diff --git a/.codacy.yml b/.codacy.yml index d2b506b..38f8856 100644 --- a/.codacy.yml +++ b/.codacy.yml @@ -1,6 +1,10 @@ # Codacy — reduce noise on generated / vendor / report trees (PR #15 100-issue cap). # https://docs.codacy.com/repositories-configure/codacy-configuration-file/ +# Advisory detector stays in Semgrep/Opengrep (array walk is `for…of`, not `input[i]`). --- +engines: + remark-lint: + enabled: false exclude_paths: - "assets/**" - "libraries/**" @@ -10,3 +14,5 @@ exclude_paths: - "scripts/**" - "extension/vendor/**" - "coverage/**" + - "SECURITY.md" + - "AUDIT.md" diff --git a/AUDIT.md b/AUDIT.md index 9362d86..6f6e2f6 100644 --- a/AUDIT.md +++ b/AUDIT.md @@ -1,12 +1,12 @@ # Fabric Hub Security Audit Living posture notes for **hub.fabric.pub** (`@fabric/hub` **0.1.0-RC1**). Re-run **`npm audit`** after dependency changes; keep this file aligned with the current lockfile. -## Status (2026-08-14) +## Status (2026-08-15) | Area | Posture | |------|---------| -| `@fabric/core` | Git pin `FabricLabs/fabric#feature/rsi` (lockfile SHA `1fc616492428ec6e8c731e3afb74fd841407aa0e`) | -| `@fabric/http` | Git pin `FabricLabs/fabric-http#feature/rsi` (lockfile SHA `852520a2bd1070bb974b1a34297811f3c63588eb`) | +| `@fabric/core` | Git pin `FabricLabs/fabric#feature/rsi` (lockfile SHA `9938917804e2bf5ba5cf1fab7bf0975129d9063f`) | +| `@fabric/http` | Git pin `FabricLabs/fabric-http#feature/rsi` (lockfile SHA `7d7f1c7c918dabe7f2ae59d638b16e1a020d08bd`) | | npm `allow-git` | **`.npmrc` `allow-git=all`** — required for nested git-dep preparation (commit-SHA fetches of core/http); `root` is insufficient | | Node | **`engines.node` = `24.15.0`** (aligned with core / http) | | WebSocket (`ws`) | **Mitigated** — direct + override **`8.21.2`** | @@ -40,7 +40,7 @@ Living posture notes for **hub.fabric.pub** (`@fabric/hub` **0.1.0-RC1**). Re-ru ## Recommendations 1. After dependency edits: **`npm ci`** (or `npm i`) then **`npm audit`** and **`npm run ci`** (`build` + `test:unit`). -2. Keep core/http on `feature/rsi` during RSI, then re-pin releases to lockfile SHAs; use **`npm run link:fabric`** for local monorepo work. **`npm run report:install` wipes `package-lock.json`** then `npm i --allow-git=all` — bump tips with `npm install FabricLabs/fabric#feature/rsi FabricLabs/fabric-http#feature/rsi --allow-git=all` when upstream moves. +2. Keep core/http on `feature/rsi` during RSI, then re-pin releases to lockfile SHAs; use **`npm run link:fabric`** for local monorepo work. **`npm run report:install` removes `package-lock.json`** then `npm i --allow-git=all` — bump tips with `npm install FabricLabs/fabric#feature/rsi FabricLabs/fabric-http#feature/rsi --allow-git=all` when upstream moves. 3. Do not run **`npm audit fix --force`** casually — it has proposed Electron 43 and React Router downgrades that fight the chosen pins. There is **no** `extract-zip` fix to force in. 4. Revisit React Router when a release fixes GHSA-qwww without regressing open-redirect advisories. 5. Webpack must keep **`conditionNames`** without bare **`import`**, plus CJS aliases for **`react-router$` / `react-router-dom$` / `react-router/dom$`** — otherwise RR7’s `.mjs` exports break the SPA bundle at runtime. @@ -63,9 +63,9 @@ Living posture notes for **hub.fabric.pub** (`@fabric/hub` **0.1.0-RC1**). Re-ru | Device-link linked GET starving the peer | Fixed upstream in `@fabric/http` (keep until TTL; Hub re-exports) | | Site-login / device-link Origin redeem | Open — inherited from `@fabric/http` (possession proof). Http device-link also allows thin-client Origins on allowlisted hubs; still not a possession proof. | | Device-link client-supplied nonce | Open — inherited from `@fabric/http` (prefer always-fresh nonce) | -| Device-link FIFO eviction under create flood | Open — nit; per-origin quota | +| Device-link FIFO eviction under create flood | Fixed — http `MAX_SESSIONS_PER_ORIGIN`; Hub re-exports | | Identity import / stronger at-rest crypto | Deferred — heavy lift | -| Large WIP split into stacked PRs | Open — process | +| Large WIP split into stacked PRs | Open — process ([#15](https://github.com/FabricLabs/hub.fabric.pub/pull/15) merged; remaining RSI is follow-up PRs) | | Fabric hallmarks (opt-in OP_RETURN) | In tree — Hub publish/scan + docs; regtest-only | ## Disclosure diff --git a/CHANGELOG.md b/CHANGELOG.md index 0403dec..a90ffb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,13 +2,23 @@ All notable changes to **hub.fabric.pub** (Fabric Hub) are documented here. RCs are coordinated with **`@fabric/core`** and **`@fabric/http`**. ## [Unreleased] -- **Chat shoutbox:** WebRTC → Fabric TCP `P2P_RELAY` inner chat is UTF-8 text (legacy JSON `{ object.content }` envelopes are unpacked). Registry marks `P2P_CHAT_MESSAGE` as `utf8-text`; author is AMP signature. -- **IdentityCrossSign:** `functions/identityCrossSign.js` / `identityCrossSignVerify.js` re-export `@fabric/core`. +- **PR #16 review nits:** `report:install` removes `package-lock.json` (instead of writing a blank line into it). Heap cap helpers return a trimmed copy instead of `delete map[key]`. Message-log restore basename-only reads + `parseFilesystemJson` for STATE. Docs record lockfile `@fabric/core` **`9938917`** / `@fabric/http` **`7d7f1c7`**. +- **Boot noise (not the heap root):** managed Lightning is opt-in (`lightning.managed` / `lightning.enable`, plus `lightningd` on PATH). `scripts/hub.js` datadir-only settings no longer spawn CLN (10 sock retries per life). Ops: `pm2-logrotate`, drop dead `sensemaker.io:7778` seed, Hub Node **24.15.x** — [PRODUCTION.md](docs/PRODUCTION.md). +- **Heap OOM (desktop Electron):** `npm run desktop` loads `node_modules/@fabric/core` (not a `link:fabric` tree). That pin’s `Filesystem.publish` still retains every body and `synchronize()`s. Hub now wraps `fs.publish` → `writeFile` (`functions/hubFilesystemPersist.js`) so Payjoin, federation registry, contract queue, identity cluster, and document writes cannot retain. Tip indexing uses one `getblock` (verbosity **1** unless tx documents or regtest federation scan need **2**) instead of two verbosity-2 calls. Local crash: ~844 s / ~3671 MiB mark-compact; Beacon never started (`beacon/NETWORK` guard); `sensemaker.io:7777` timeout is a dead seed, not the leak. Restart desktop after this; `npm run link:fabric` still picks up the core Filesystem cut. Do not raise `--max-old-space-size`. +- **Heap OOM (playnet Hub):** `Filesystem.publish` no longer retains bodies or re-syncs the tree (core). Hub `commit()` writes `STATE` with `writeFile` (not `publish`), stringifies `_state.content` after capping Activity (`256`) and the in-memory Fabric message map (`2048`). Merkle leaves are payload hashes. P2P BitcoinBlock ingest uses a bounded tip set. Oversized `STATE` snapshots skip JSON restore and reload a window from `messages/*.json`. Pins `992ea478` / `f1b5e147` / `1b162e35` were already live and did not stop the loop. Do not raise `--max-old-space-size`. Tests: `tests/hub.heapBounds.test.js`. +- **GetDocument Buffer JSON:** `Filesystem.readFile` returns a Buffer; Hub now JSON-parses Buffers (same as strings, including `Uint8Array`) so held files expose `contentBase64`. The old `typeof raw === 'string'` branch returned the Buffer as the document, which made document-network / fabric-epic e2e wait helpers report `no document`. Wait diagnostics treat an empty-string `contentBase64` as a payload mismatch, not a missing body. +- **Shared-mode http fallbacks:** when `@fabric/http/functions/httpSharedMode` omits `isHttpSharedModeEnabled` / `resolveHttpListenHost` / `DEFAULT_HTTP_LISTEN_ENV_KEYS`, Hub uses the local implementations (not only `applySharedModeWebsocketGate`). Local listen-host matches http: constructor `host` beats inherited `INTERFACE`. +- **BIP-69 PSBTs:** unsigned Hub builders sort vin/vout with `@fabric/core/functions/bip69` before the first signature (crowdfund payout, original Payjoin PSBT, Bitcoin `_buildPSBT`). Payjoin ACP still appends the Hub input and does not reorder signed slots. +- **Operator Accept:** `AcceptTrackedApplicationContract` / `RejectTrackedApplicationContract` verify Schnorr `OP_IDENTITY`/`admin` tokens against Hub `_rootKey` **or** the Fabric Peer identity (`agent.key`). Local developer `FABRIC_XPRV` is the production publisher. Missing token → `adminToken required`; bad signature → `adminToken invalid`. Hub-level tests bypass `setup.verifyAdminToken` (`tests/hub.operatorAccept.test.js`). +- **Peer / Bitcoin debug flood:** do not `console.debug` every Fabric Peer `debug` event, and do not `console.log` Bitcoin `debug`, unless `settings.debug` / `FABRIC_HUB_DEBUG`. Truncate at 2 KiB. Do **not** force `bitcoin.settings.debug = true` after start (that re-enabled per-RPC debug strings on production). Lightning `debug` is gated the same way. +- **Bulk security-advisory ingest:** drop OpenSSF / GHSA malware dumps (`security_advisory`, `@zalastax/nolb-*`, “Malicious code in @…”) on `CreateDocument`, `EditDocument`, P2P file receive, inventory resync, and `recordActivity`. JSON arrays of advisory objects recurse (cap 32). Those Internal-message floods OOMed production Hub. Pair with `@fabric/http` Internal-log + commit snapshot cuts. +- **Chat shoutbox:** WebRTC → Fabric TCP `P2P_RELAY` inner chat is UTF-8 text (legacy JSON `{ object.content }` envelopes are unpacked via `@fabric/core/functions/fabricChatText`). Registry marks `P2P_CHAT_MESSAGE` as `utf8-text`; author is AMP signature. +- **Identity paths:** Hub re-exports `fabricIdentityAccountPath` (core helper when the pin exports it). Receive leaf stays `fabricIdentityDerivationPath`. - **Identity cluster:** ingest keys must be compressed or x-only hex (`pubkeyXOnly`); colon-smashed strings are `invalid pubkey`. - **Beacon:** Hub ready-round retry tests match core recovered-witness checks (real Schnorr; fake `'00'` is rejected). - **Device link:** per-origin create quota is in `@fabric/http` (`MAX_SESSIONS_PER_ORIGIN`); Hub re-exports it from `functions/fabricDeviceLink.js`. Browser device-link fetch omits client-set Origin/Referer. - **Site login:** expired `GET /sessions/:delegationToken` requires matching `Authorization: Bearer` (http pin). -- **Pins:** `@fabric/core` lockfile `1fc616492…` (first-tier RC1 contract, undersize AMP drop, IdentityCrossSign kind/id guards, canonical `host:port` dial keys); `@fabric/http` lockfile `852520a…` (`pubkey@` strip + dedicated-NIC `:7778`→`:7777`, `--wallet -p` is not a path, Bearer path-token). `package.json` stays on `#feature/rsi`. `report:install` wipes the lockfile then `npm i --allow-git=all`. +- **Pins:** `@fabric/core` lockfile `9938917804e2bf5ba5cf1fab7bf0975129d9063f` (Filesystem publish retain cut + production follow-ups from [#185](https://github.com/FabricLabs/fabric/pull/185); MuSig2 `autoAccept` default off, BIP-21 `req-*`, collection cwd-containment, Codacy `Number('…')` literals; plus MuSig2/BIP helpers, IPv6 candidate `[host]:port`, generic-message debug exact-match, exported `fabricIdentityAccountPath`, AMP wire name wins over inventory JSON `type: 98`); `@fabric/http` lockfile `7d7f1c7c918dabe7f2ae59d638b16e1a020d08bd` (POST-null 400, device-link DELETE cancel `ok: false`, 402 blob-id omit, CLI `fabricHomeEnv` before `Environment.start()`, Internal-log/commit snapshot cut, `fabricChatText` re-export, `pubkey@` strip + dedicated-NIC `:7778`→`:7777`, unicast `FABRIC_INTERFACE` sibling-NIC self-filter, Bearer path-token). `package.json` stays on `#feature/rsi`. `report:install` removes `package-lock.json` then `npm i --allow-git=all`. `scripts/hub.js` loads `~/.fabric/env` via `fabricHomeEnv` (process env wins). Playnet `loadPeerKeySettings` rethrows unless `MODULE_NOT_FOUND`; fallback keeps raw `FABRIC_SEED` hex as `{ seed }`. - **Managed Bitcoin:** Hub RPC probe keeps cookie credentials (no longer a port-only stub that 401s an orphan `bitcoind`). Spawn early-exit / datadir lock **attaches** to the live node instead of `pm2` crash-looping. Shutdown kills only a Core this process spawned. - **Playnet:** `npm run playnet:status -- --production` reports native `fabric-beacon` plus an optional sibling GoonCitizen contract id. Deploy the application namespace from GoonCitizen: `npm run playnet:deploy-gooncitizen -- --production --accept`. - **SPA assets:** `assets/scripts/assets/manifest.json` loads the same-origin `/bundles/browser.min.js` (no remote `fabric.pub` script URI). diff --git a/SECURITY.md b/SECURITY.md index 2f7f262..17840ac 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -22,12 +22,12 @@ Hub admin capabilities (Beacon accept, generateblock, wallet spend, **regtest fa - `bitcoinClient` attaches `hubAdminToken` only for Hub `/services/bitcoin` bases; explorer/payments URLs use `apiToken` only. - **Fabric hallmarks** (`bitcoin.hallmarks` / `FABRIC_HALLMARKS`) spend wallet UTXOs when enabled (regtest); off by default. Commitment digests are public on L1 by design — never enable on mainnet until fee/policy review. -## Outstanding (PR #15 / RSI follow-ups) +## Outstanding (PR #16 / RSI follow-ups) - **Identity import** — xprv imports should persist through the encrypted identity path (not watch-only `id`/`xpub`) and restore locked/unlocked per password flow (heavy lift; extension sync no longer writes unlocked `xprv`/`masterXprv`). - ~~**Encrypted backup export**~~ — primary “Download encrypted backup” requires an unlocked signing `xprv` (watch-only disabled + labeled). -- **Large WIP split** — PR #15 still spans far more than review-tool limits; land remaining RSI work as stacked PRs (identity, Bitcoin/HTLC, WebRTC, docs). +- **Large WIP split** — [PR #15](https://github.com/FabricLabs/hub.fabric.pub/pull/15) merged; remaining RSI (identity import/KDF, login redeem) continues on [PR #16](https://github.com/FabricLabs/hub.fabric.pub/pull/16). - **`GenericMessage` / WS** — see [MESSAGE_TRANSPORT.md](MESSAGE_TRANSPORT.md); prefer named AMP types on public hubs. -- ~~**`@fabric/core` / `@fabric/http` pin hygiene**~~ — pins: core `1fc616492428ec6e8c731e3afb74fd841407aa0e`, http `852520a2bd1070bb974b1a34297811f3c63588eb` (refreshed via `feature/rsi`; `report:install` wipes the lockfile then `npm i --allow-git=all`). Keep `package.json` on moving `feature/rsi` during RSI; re-pin releases to lockfile SHAs. +- ~~**`@fabric/core` / `@fabric/http` pin hygiene**~~ — pins: core `9938917804e2bf5ba5cf1fab7bf0975129d9063f`, http `7d7f1c7c918dabe7f2ae59d638b16e1a020d08bd` (refreshed via `feature/rsi`; `report:install` removes `package-lock.json` then `npm i --allow-git=all`). Keep `package.json` on moving `feature/rsi` during RSI; re-pin releases to lockfile SHAs. - ~~**Fabric coin types**~~ — `functions/fabricAccountDerivedIdentity.js` uses core `fabricIdentityDerivationPath` (default **7778**; optional `mainnet` / **7777**). Wire Hub UI / bitcoin network into that optional arg where product wants mainnet identity paths. - **Site-login / device-link Origin gates** — inherited from `@fabric/http` (forgeable Origin/Referer for session/device-link redeem on shared hosts; Hub self-sign is opt-in + loopback-only in http). Site-login uses `clientMayPollDesktopSession`. Device-link uses that plus thin-client Origins on allowlisted hubs (`clientMayAccessDeviceLink`, re-exported from `functions/fabricDeviceLink.js`). Not a possession proof. Prefer possession proofs before treating QR `sessionId` as browser-grade auth; cleartext production hubs are no longer default-allowlisted. Per-origin device-link create quota is in http. Remaining coordinated follow-ups: always-fresh device-link nonce, bind `sessionId` into link messages. - **Payment test route** — Hub defaults `exposePaymentTestRoute` **off**; set `FABRIC_HTTP_PAYMENTS_EXPOSE_TEST_ROUTE=1` (or legacy `FABRIC_HTTP_PAYMENTS_HIDE_TEST_ROUTE=0`) when needed for local 402 checks. diff --git a/assets/bundles/browser.min.js b/assets/bundles/browser.min.js index 2def810..cd1d624 100644 --- a/assets/bundles/browser.min.js +++ b/assets/bundles/browser.min.js @@ -1,2 +1,2 @@ /*! For license information please see browser.min.js.LICENSE.txt */ -(()=>{var __webpack_modules__={"./node_modules/@fabric/core/constants.js"(module){"use strict";eval("{/*\n Fabric Core Constants.\n ---\n Author: Fabric Labs\n Copyright: All Rights Reserved.\n */\n\n\n// Networking and Environment\nconst PEER_PORT = 7777;\nconst MAX_PEERS = 32;\nconst PRECISION = 100;\n\n// Fabric Core\nconst FABRIC_USER_AGENT = 'Fabric Core 0.1.0 (@fabric/core#v0.1.0-RC1)';\nconst BITCOIN_NETWORK = 'mainnet';\nconst BITCOIN_GENESIS = '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f';\nconst BITCOIN_GENESIS_ROOT = '4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b';\n/**\n * Fabric protocol identity coin types (BIP44 `coin_type'`, not Bitcoin funds).\n * - **7777** — Bitcoin **mainnet** identities\n * - **7778** — all other networks (testnet, signet, regtest, and unspecified)\n */\nconst FABRIC_COIN_TYPE_MAINNET = 7777;\nconst FABRIC_COIN_TYPE_TESTNET = 7778;\n/** Default Fabric coin type (non-mainnet / development). Alias of {@link FABRIC_COIN_TYPE_TESTNET}. */\nconst FABRIC_COIN_TYPE = FABRIC_COIN_TYPE_TESTNET;\n/** Default Fabric identity path (non-mainnet): m/44'/7778'/0'/0/0 */\nconst FABRIC_KEY_DERIVATION_PATH = `m/44'/${FABRIC_COIN_TYPE_TESTNET}'/0'/0/0`;\n/** Mainnet Fabric identity path: m/44'/7777'/0'/0/0 */\nconst FABRIC_KEY_DERIVATION_PATH_MAINNET = `m/44'/${FABRIC_COIN_TYPE_MAINNET}'/0'/0/0`;\n/** BIP44 coin type for Bitcoin funds (receive / change). */\nconst BITCOIN_COIN_TYPE = 0;\n/** Default Bitcoin receive path account 0 / index 0 (funds — never Fabric identity). */\nconst BITCOIN_KEY_DERIVATION_PATH = \"m/44'/0'/0'/0/0\";\n\n/**\n * Resolve Fabric identity coin type for a Bitcoin / Fabric network name.\n * Mainnet → 7777; everything else (incl. empty / unknown) → 7778.\n * @param {string|null|undefined} network\n * @returns {number}\n */\nfunction fabricCoinTypeForNetwork (network) {\n const n = String(network == null ? '' : network).trim().toLowerCase();\n if (n === 'main' || n === 'mainnet' || n === 'bitcoin' || n === 'livenet') {\n return FABRIC_COIN_TYPE_MAINNET;\n }\n return FABRIC_COIN_TYPE_TESTNET;\n}\n\n/**\n * Fabric identity path: m/44'/{7777|7778}'/account'/0/index\n * @param {number} [account=0]\n * @param {number} [index=0]\n * @param {string|number} [networkOrCoinType] Network name (`mainnet` / `regtest` / …)\n * or an explicit coin type integer. Omit for default non-mainnet (7778).\n * @returns {string}\n */\nfunction fabricIdentityDerivationPath (account = 0, index = 0, networkOrCoinType) {\n const a = assertBip32ChildIndex(account, 'account');\n const i = assertBip32ChildIndex(index, 'index');\n let coin = FABRIC_COIN_TYPE_TESTNET;\n if (typeof networkOrCoinType === 'number') {\n coin = assertBip32ChildIndex(networkOrCoinType, 'coinType');\n } else if (networkOrCoinType != null && String(networkOrCoinType).trim() !== '') {\n coin = fabricCoinTypeForNetwork(networkOrCoinType);\n }\n return `m/44'/${coin}'/${a}'/0/${i}`;\n}\n\n/**\n * Bitcoin BIP44 receive path (external chain): m/44'/0'/account'/0/index\n * @param {number} [account=0]\n * @param {number} [index=0]\n * @returns {string}\n */\nfunction bitcoinReceiveDerivationPath (account = 0, index = 0) {\n const a = assertBip32ChildIndex(account, 'account');\n const i = assertBip32ChildIndex(index, 'index');\n return `m/44'/${BITCOIN_COIN_TYPE}'/${a}'/0/${i}`;\n}\n\n/**\n * Bitcoin BIP44 change path (internal chain): m/44'/0'/account'/1/index\n * @param {number} [account=0]\n * @param {number} [index=0]\n * @returns {string}\n */\nfunction bitcoinChangeDerivationPath (account = 0, index = 0) {\n const a = assertBip32ChildIndex(account, 'account');\n const i = assertBip32ChildIndex(index, 'index');\n return `m/44'/${BITCOIN_COIN_TYPE}'/${a}'/1/${i}`;\n}\n\n/**\n * BIP32 child index domain: finite integer in [0, 0x7fffffff].\n * @param {*} value\n * @param {string} label\n * @returns {number}\n */\nfunction assertBip32ChildIndex (value, label = 'index') {\n const n = Number(value);\n if (!Number.isFinite(n) || !Number.isInteger(n) || n < 0 || n > 0x7fffffff) {\n throw new RangeError(`BIP32 ${label} must be an integer in [0, 0x7fffffff]`);\n }\n return n;\n}\n\nconst FIXTURE_SEED = 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';\nconst FIXTURE_XPUB = 'xpub661MyMwAqRbcF6GygV6Q6XAg8dqhPvDuhYHGniequi6HMbYhNNH5XC13Np3qRANHVD2mmnNGtMGBfDT69s2ovpHLr7q8syoAuyWqtRGEsYQ';\nconst FIXTURE_XPRV = 'xprv9s21ZrQH143K2cCWaTZPjPDwac1CzTW4LKMfzLFEMNZJUoDYppxpyPgZXY7CZkjefGJTrTyqKnMrM4RG6nGn7Q9cwjHggCtn3CdFGJahaWY';\n\n// Message Constants\nconst MAGIC_BYTES = 0xC0D3F33D;\n/** Wire protocol version for `@fabric/core` 0.1.x pre-release (`0x01`).\n * 208-byte header (incl. Lightning-style `preimage`) is the V1 frame under this version —\n * not a bump to `0x02`. Keep in sync with `FABRIC_MESSAGE_VERSION` in `src/constants.h`. */\nconst VERSION_NUMBER = 0x01;\n/* magic, version, parent, author, type, size, hash, preimage, signature — then body */\nconst HEADER_SIZE = 208;\nconst LARGE_COLLECTION_SIZE = 10; // TODO: test with 1,000,000\nconst MAX_MESSAGE_SIZE = 4096 - HEADER_SIZE;\n/** Max UTF-16 code units accepted for `JSON.parse` of locally persisted JSON (LevelDB peer registry, CLI STATE file). */\nconst PERSISTED_JSON_MAX_CHARS = 2 * 1024 * 1024;\n\n// Stacks and Frames\nconst MAX_STACK_HEIGHT = 32; // max height of stack (number of elements)\nconst MAX_FRAME_SIZE = 32; // max size of a stack frame in bytes\nconst MAX_MEMORY_ALLOC = MAX_STACK_HEIGHT * MAX_FRAME_SIZE;\nconst MAX_TX_PER_BLOCK = 4;\nconst MAX_CHANNEL_VALUE = 100000000;\n\n// Machine Constraints\nconst MACHINE_MAX_MEMORY = MAX_MEMORY_ALLOC * MAX_MESSAGE_SIZE;\nconst MAX_CHAT_MESSAGE_LENGTH = 2048;\n\n// Playnet\nconst FABRIC_PLAYNET_ADDRESS = ''; // unset until a published playnet P2TR deposit address is chosen\nconst FABRIC_PLAYNET_ORIGIN = ''; // unset until first playnet deploy block hash is sealed\n\n// FABRIC ONLY\nconst BITCOIN_BLOCK_TYPE = 21000;\nconst BITCOIN_BLOCK_HASH_TYPE = 21100;\nconst BITCOIN_TRANSACTION_TYPE = 22000;\nconst BITCOIN_TRANSACTION_HASH_TYPE = 22100;\nconst GENERIC_MESSAGE_TYPE = 15103;\nconst LOG_MESSAGE_TYPE = 3235156080;\nconst GENERIC_LIST_TYPE = 3235170158;\n/** Sidechain registry / state update (typed fields; HTTP may map RFC6902 ↔ fields). */\nconst SIDECHAIN_STATE_PATCH_TYPE = 997;\nconst DOCUMENT_PUBLISH_TYPE = 998;\nconst DOCUMENT_REQUEST_TYPE = 999;\nconst JSON_CALL_TYPE = 16000;\nconst PATCH_MESSAGE_TYPE = 1024;\n/** Contract negotiation: batched Fabric messages + chain Merkle root + JSON Patch (RFC 6902) — see docs/CONTRACT_PROPOSAL.md */\nconst CONTRACT_PROPOSAL_TYPE = 138; // 0x8A (POLICY.md / FABRIC_MESSAGE_TYPE_CONSOLIDATION)\n\n// Opcodes\nconst OP_CYCLE = '00';\nconst OP_DONE = 'ff';\n\n// Bitcoin\nconst OP_0 = '00';\nconst OP_36 = '24';\nconst OP_CHECKSIG = 'ac';\nconst OP_DUP = '76';\nconst OP_EQUAL = '87';\nconst OP_SHA256 = 'a8';\nconst OP_HASH160 = 'a9';\nconst OP_PUSHDATA1 = '4c';\nconst OP_RETURN = '6a';\nconst OP_EQUALVERIFY = '88';\nconst OP_SEPARATOR = 'ab';\n\n// Bech32m\nconst BECH32M_CHARSET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\n\n// Peering\nconst P2P_PORT = 7777;\n// Gossip and peering discovery (WebRTC + Fabric P2P)\n/** First-class wire opcode: gossip known peers for cross-cluster discovery. */\nconst P2P_PEER_GOSSIP = 0x61;\n/** First-class wire opcode: peer needs more connections; relayed until fulfilled. */\nconst P2P_PEERING_OFFER = 0x62;\n/** Max gossip relays per logical hop (anti amplification). */\nconst GOSSIP_MAX_HOPS = 5;\n/** Per-origin relay budget per rolling minute (anti flood). */\nconst GOSSIP_MAX_RELAYS_PER_ORIGIN_PER_MINUTE = 60;\n/** Max entries for logical gossip payload dedup (excluding hop/signature churn). */\nconst GOSSIP_MAX_PAYLOAD_CACHE = 50000;\n/** Peering-offer relay: same defaults as gossip (separate caches / rate map). */\nconst PEERING_OFFER_MAX_HOPS = 5;\nconst PEERING_OFFER_MAX_RELAYS_PER_ORIGIN_PER_MINUTE = 60;\nconst PEERING_OFFER_MAX_PAYLOAD_CACHE = 50000;\n/** Max queued connection candidates from {@link P2P_PEERING_OFFER} (FIFO eviction). */\nconst PEER_MAX_CANDIDATES_QUEUE = 128;\n/**\n * Minimum delay before {@link Peer#_fillPeerSlots} redials the same candidate.\n * Immediate requeue plus `connections:close` was a tight ECONNREFUSED loop.\n */\nconst PEER_CANDIDATE_RETRY_MS = 60000;\n/** Max wire-hash dedup entries in {@link Peer} (bounded memory). */\nconst PEER_MAX_WIRE_HASH_CACHE = 10000;\n/**\n * Max logical first-writer-wins registration keys in {@link Peer}\n * (CONTRACT_PUBLISH / DOCUMENT_PUBLISH / CONTRACT_PROPOSAL / announces /\n * BitcoinBlock tip / FLUSH_CHAIN / peer alias / key reveal).\n * Distinct from wire-hash dedup: catches re-signed copies of the same body.\n */\nconst PEER_MAX_LOGICAL_REGISTER_CACHE = 10000;\n\n/** Default Peer registry-score penalties (Bitcoin Core–style misbehavior). */\nconst PEER_SCORE_BODY_HASH_MISMATCH_PENALTY = 100;\nconst PEER_SCORE_INVALID_SIGNATURE_PENALTY = 100;\nconst PEER_SCORE_SIGNER_PIN_MISMATCH_PENALTY = 100;\nconst PEER_SCORE_SESSION_KEY_VIOLATION_PENALTY = 240;\nconst PEER_SCORE_CONTRACT_OPS_FORBIDDEN_PENALTY = 80;\nconst PEER_SCORE_LOGICAL_REGISTER_HIJACK_PENALTY = 40;\nconst PEER_SCORE_LOGICAL_REGISTER_DUPLICATE_PENALTY = 8;\nconst PEER_SCORE_LOGICAL_REGISTER_DUPLICATE_WINDOW_MS = 60000;\n/** Max nested {@link P2P_RELAY} unwrap depth (outermost counts as 0). */\nconst PEER_MAX_RELAY_NEST_DEPTH = 2;\n/** Default TTL for hard-misbehavior bans (pubkey + connection address). */\nconst PEER_BAN_TTL_MS = 15 * 60 * 1000;\n/** Inbound credit cost for {@link P2P_RELAY} mesh flood envelopes. */\nconst PEER_RELAY_CREDIT_COST = 8;\nconst PEER_SCORE_RELAY_NEST_EXCEEDED_PENALTY = 60;\n/** Max chat mesh relays per origin per rolling minute (local emit still happens). */\nconst CHAT_MAX_RELAYS_PER_ORIGIN_PER_MINUTE = 30;\n/** Max sealed ciphertext rows awaiting key reveal on a Peer. */\nconst PEER_MAX_PENDING_SEALED_DELIVERIES = 32;\n/** Max private DocumentRequest reverse-route entries. */\nconst PEER_MAX_DOCUMENT_RELAY_ROUTES = 256;\nconst P2P_GENERIC = 0x80; // 128 in decimal\nconst P2P_IDENT_REQUEST = 0x01; // 1, or the identity\nconst P2P_IDENT_RESPONSE = 0x11;\nconst P2P_ROOT = 0x00000000;\nconst P2P_PING = 0x00000012; // same ID as Lightning (18)\nconst P2P_PONG = 0x00000013; // same ID as Lightning (19)\nconst P2P_INSTRUCTION = 0x00000020; // TODO: select w/ no overlap\nconst P2P_START_CHAIN = 0x00000021;\nconst P2P_STATE_REQUEST = 0x00000029; // TODO: select w/ no overlap\nconst P2P_STATE_ROOT = 0x00000030; // TODO: select w/ no overlap\nconst P2P_BASE_MESSAGE = 0x00000031; // TODO: select w/ no overlap\nconst P2P_STATE_COMMITTMENT = 0x00000032; // TODO: select w/ no overlap\nconst P2P_STATE_CHANGE = 0x00000033; // TODO: select w/ no overlap\nconst P2P_TRANSACTION = 0x00000039; // TODO: select w/ no overlap\nconst P2P_CALL = 0x00000042;\nconst P2P_RELAY = 0x00000043; // Mesh flood envelope: body = raw inner Message bytes (not directed onion)\nconst P2P_MESSAGE_RECEIPT = 0x00000044; // Ack/receipt for a processed inbound message (WebSocket / P2P)\n/** Directed onion hop: field body `{ nextPeer, ttl, inner }` — see `functions/fabricOnion.js`. */\nconst P2P_FORWARD = 0x00000045;\n/** Max nested `P2P_FORWARD` hops an originator may build (path length). */\nconst P2P_FORWARD_MAX_HOPS = 8;\nconst P2P_CHAIN_SYNC_REQUEST = 0x55;\n/** Playnet / federation: rewind bitcoind to a known-good tip; relay only to highly trusted peers. */\nconst P2P_FLUSH_CHAIN = 0x56;\nconst P2P_INVENTORY_REQUEST = 0x57;\nconst P2P_INVENTORY_RESPONSE = 0x58;\nconst P2P_FILE_SEND = 0x59;\nconst P2P_DOCUMENT_PUBLISH = 0x5a;\nconst P2P_PEER_ALIAS = 0x5b;\nconst P2P_PEER_ANNOUNCE = 0x5c;\nconst P2P_SESSION_OFFER = 0x5d;\nconst P2P_SESSION_OPEN = 0x5e;\nconst P2P_CONTRACT_PUBLISH = 0x5f;\nconst P2P_CONTRACT_MESSAGE = 0x60;\nconst P2P_SESSION_ACK = 0x4200;\nconst P2P_MUSIG_START = 0x4220;\nconst P2P_MUSIG_ACCEPT = 0x4221;\nconst P2P_MUSIG_RECEIVE_COUNTER = 0x4222;\nconst P2P_MUSIG_SEND_PROPOSAL = 0x4223;\nconst P2P_MUSIG_REPLY_TO_PROPOSAL = 0x4224;\nconst P2P_MUSIG_ACCEPT_PROPOSAL = 0x4225;\n\n// Message Types\nconst PEER_CANDIDATE = 0x09;\n// TODO: should be 0x02 for Bitcoin P2P\nconst BLOCK_CANDIDATE = 0x03;\n\nconst SESSION_START = 0x02;\nconst CHAT_MESSAGE = 0x67;\n/** First-class peer chat frame (author-signed, relayed verbatim). Body = raw UTF-8 text only (no JSON). Author is AMP header + signature. */\nconst P2P_CHAT_MESSAGE = 0x68;\n\n// Lightning\nconst LIGHTNING_TEST_HEADER = 'D0520C6E';\nconst LIGHTNING_PROTOCOL_H_INIT = 'Noise_XK_secp256k1_ChaChaPoly_SHA256';\nconst LIGHTNING_PROTOCOL_PROLOGUE = 'lightning';\n\n// Lightning BOLT Message Types (subset)\n// Setup & Control\nconst LIGHTNING_WARNING = 0x00000001; // 1\nconst LIGHTNING_INIT = 0x00000010; // 16\nconst LIGHTNING_ERROR = 0x00000011; // 17\nconst LIGHTNING_PING = 0x00000012; // 18 (alias of P2P_PING)\nconst LIGHTNING_PONG = 0x00000013; // 19 (alias of P2P_PONG)\n\n// Channel Management\nconst LIGHTNING_OPEN_CHANNEL = 0x00000020; // 32\nconst LIGHTNING_ACCEPT_CHANNEL = 0x00000021; // 33\nconst LIGHTNING_FUNDING_CREATED = 0x00000022; // 34\nconst LIGHTNING_FUNDING_SIGNED = 0x00000023; // 35\nconst LIGHTNING_CHANNEL_READY = 0x00000024; // 36\nconst LIGHTNING_SHUTDOWN = 0x00000026; // 38\nconst LIGHTNING_CLOSING_SIGNED = 0x00000027; // 39\n\n// Payment Messages\nconst LIGHTNING_UPDATE_ADD_HTLC = 0x00000080; // 128\nconst LIGHTNING_UPDATE_FULFILL_HTLC = 0x00000082; // 130\nconst LIGHTNING_UPDATE_FAIL_HTLC = 0x00000083; // 131\nconst LIGHTNING_COMMITMENT_SIGNED = 0x00000084; // 132\nconst LIGHTNING_REVOKE_AND_ACK = 0x00000085; // 133\n\n// Gossip Protocol\nconst LIGHTNING_CHANNEL_ANNOUNCEMENT = 0x00000100; // 256\nconst LIGHTNING_NODE_ANNOUNCEMENT = 0x00000101; // 257\nconst LIGHTNING_CHANNEL_UPDATE = 0x00000102; // 258\n\n// Lightning BMM\nconst LIGHTNING_BMM_HEADER = 'D0520C6E';\nconst LIGHTNING_SIDECHAIN_NUM = 0xFF; // 1-byte - sidechain number\n\nconst LIGHTNING_SIDEBLOCK_HASH = 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000; // 32-bytes\nconst LIGHTNING_PARENT_SIDEBLOCK_HASH = 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001; // 32-bytes\n\nconst ZERO_LENGTH_PLAINTEXT = '';\n\n// HTTP\nconst HTTP_HEADER_CONTENT_TYPE = 'application/json';\n\n// UI\nconst INPUT_HINT = 'Press the \"i\" key to begin typing.';\n\n// CommonJS Support\nmodule.exports = {\n PEER_PORT,\n MAX_PEERS,\n PRECISION,\n BITCOIN_NETWORK,\n BITCOIN_GENESIS,\n BITCOIN_GENESIS_HASH: BITCOIN_GENESIS,\n BITCOIN_GENESIS_ROOT,\n FABRIC_KEY_DERIVATION_PATH,\n FABRIC_KEY_DERIVATION_PATH_MAINNET,\n FABRIC_COIN_TYPE,\n FABRIC_COIN_TYPE_MAINNET,\n FABRIC_COIN_TYPE_TESTNET,\n BITCOIN_COIN_TYPE,\n BITCOIN_KEY_DERIVATION_PATH,\n fabricCoinTypeForNetwork,\n fabricIdentityDerivationPath,\n bitcoinReceiveDerivationPath,\n bitcoinChangeDerivationPath,\n assertBip32ChildIndex,\n FABRIC_USER_AGENT,\n FIXTURE_SEED,\n FIXTURE_XPUB,\n FIXTURE_XPRV,\n HEADER_SIZE,\n BITCOIN_BLOCK_TYPE,\n BITCOIN_BLOCK_HASH_TYPE,\n BITCOIN_TRANSACTION_TYPE,\n BITCOIN_TRANSACTION_HASH_TYPE,\n GENERIC_MESSAGE_TYPE,\n LOG_MESSAGE_TYPE,\n GENERIC_LIST_TYPE,\n LARGE_COLLECTION_SIZE,\n BLOCK_CANDIDATE,\n CHAT_MESSAGE,\n P2P_CHAT_MESSAGE,\n INPUT_HINT,\n ZERO_LENGTH_PLAINTEXT,\n BECH32M_CHARSET,\n FABRIC_PLAYNET_ADDRESS,\n FABRIC_PLAYNET_ORIGIN,\n LIGHTNING_TEST_HEADER,\n LIGHTNING_PROTOCOL_H_INIT,\n LIGHTNING_PROTOCOL_PROLOGUE,\n LIGHTNING_WARNING,\n LIGHTNING_INIT,\n LIGHTNING_ERROR,\n LIGHTNING_PING,\n LIGHTNING_PONG,\n LIGHTNING_OPEN_CHANNEL,\n LIGHTNING_ACCEPT_CHANNEL,\n LIGHTNING_FUNDING_CREATED,\n LIGHTNING_FUNDING_SIGNED,\n LIGHTNING_CHANNEL_READY,\n LIGHTNING_SHUTDOWN,\n LIGHTNING_CLOSING_SIGNED,\n LIGHTNING_UPDATE_ADD_HTLC,\n LIGHTNING_UPDATE_FULFILL_HTLC,\n LIGHTNING_UPDATE_FAIL_HTLC,\n LIGHTNING_COMMITMENT_SIGNED,\n LIGHTNING_REVOKE_AND_ACK,\n LIGHTNING_CHANNEL_ANNOUNCEMENT,\n LIGHTNING_NODE_ANNOUNCEMENT,\n LIGHTNING_CHANNEL_UPDATE,\n LIGHTNING_BMM_HEADER,\n LIGHTNING_SIDECHAIN_NUM,\n LIGHTNING_SIDEBLOCK_HASH,\n LIGHTNING_PARENT_SIDEBLOCK_HASH,\n HTTP_HEADER_CONTENT_TYPE,\n MAGIC_BYTES,\n MAX_FRAME_SIZE,\n MAX_MEMORY_ALLOC,\n MAX_MESSAGE_SIZE,\n PERSISTED_JSON_MAX_CHARS,\n MAX_STACK_HEIGHT,\n MAX_CHANNEL_VALUE,\n MAX_CHAT_MESSAGE_LENGTH,\n MAX_TX_PER_BLOCK,\n MACHINE_MAX_MEMORY,\n OP_CYCLE,\n OP_DONE,\n OP_0,\n OP_36,\n OP_CHECKSIG,\n OP_DUP,\n OP_EQUAL,\n OP_SHA256,\n OP_HASH160,\n OP_PUSHDATA1,\n OP_RETURN,\n OP_EQUALVERIFY,\n OP_SEPARATOR,\n P2P_GENERIC,\n P2P_PEER_GOSSIP,\n P2P_PEERING_OFFER,\n GOSSIP_MAX_HOPS,\n GOSSIP_MAX_RELAYS_PER_ORIGIN_PER_MINUTE,\n GOSSIP_MAX_PAYLOAD_CACHE,\n PEERING_OFFER_MAX_HOPS,\n PEERING_OFFER_MAX_RELAYS_PER_ORIGIN_PER_MINUTE,\n PEERING_OFFER_MAX_PAYLOAD_CACHE,\n PEER_MAX_CANDIDATES_QUEUE,\n PEER_CANDIDATE_RETRY_MS,\n PEER_MAX_WIRE_HASH_CACHE,\n PEER_MAX_LOGICAL_REGISTER_CACHE,\n PEER_SCORE_BODY_HASH_MISMATCH_PENALTY,\n PEER_SCORE_INVALID_SIGNATURE_PENALTY,\n PEER_SCORE_SIGNER_PIN_MISMATCH_PENALTY,\n PEER_SCORE_SESSION_KEY_VIOLATION_PENALTY,\n PEER_SCORE_CONTRACT_OPS_FORBIDDEN_PENALTY,\n PEER_SCORE_LOGICAL_REGISTER_HIJACK_PENALTY,\n PEER_SCORE_LOGICAL_REGISTER_DUPLICATE_PENALTY,\n PEER_SCORE_LOGICAL_REGISTER_DUPLICATE_WINDOW_MS,\n PEER_MAX_RELAY_NEST_DEPTH,\n PEER_BAN_TTL_MS,\n PEER_RELAY_CREDIT_COST,\n PEER_SCORE_RELAY_NEST_EXCEEDED_PENALTY,\n CHAT_MAX_RELAYS_PER_ORIGIN_PER_MINUTE,\n PEER_MAX_PENDING_SEALED_DELIVERIES,\n PEER_MAX_DOCUMENT_RELAY_ROUTES,\n P2P_IDENT_REQUEST,\n P2P_IDENT_RESPONSE,\n P2P_CHAIN_SYNC_REQUEST,\n P2P_FLUSH_CHAIN,\n P2P_INVENTORY_REQUEST,\n P2P_INVENTORY_RESPONSE,\n P2P_FILE_SEND,\n P2P_DOCUMENT_PUBLISH,\n P2P_PEER_ALIAS,\n P2P_PEER_ANNOUNCE,\n P2P_SESSION_OFFER,\n P2P_SESSION_OPEN,\n P2P_CONTRACT_PUBLISH,\n P2P_CONTRACT_MESSAGE,\n P2P_ROOT,\n P2P_PING,\n P2P_PONG,\n P2P_PORT,\n P2P_START_CHAIN,\n P2P_INSTRUCTION,\n P2P_BASE_MESSAGE,\n P2P_STATE_ROOT,\n P2P_STATE_COMMITTMENT,\n P2P_STATE_CHANGE,\n P2P_STATE_REQUEST,\n P2P_TRANSACTION,\n P2P_CALL,\n P2P_RELAY,\n P2P_MESSAGE_RECEIPT,\n P2P_FORWARD,\n P2P_FORWARD_MAX_HOPS,\n P2P_SESSION_ACK,\n P2P_MUSIG_START,\n P2P_MUSIG_ACCEPT,\n P2P_MUSIG_RECEIVE_COUNTER,\n P2P_MUSIG_SEND_PROPOSAL,\n P2P_MUSIG_REPLY_TO_PROPOSAL,\n P2P_MUSIG_ACCEPT_PROPOSAL,\n PEER_CANDIDATE,\n SIDECHAIN_STATE_PATCH_TYPE,\n DOCUMENT_PUBLISH_TYPE,\n DOCUMENT_REQUEST_TYPE,\n JSON_CALL_TYPE,\n PATCH_MESSAGE_TYPE,\n CONTRACT_PROPOSAL_TYPE,\n SESSION_START,\n VERSION_NUMBER\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0UsK0JBQStCO0FBQ25HO0FBQ0E7QUFDQSw0Q0FBNEMseUJBQXlCO0FBQ3JFO0FBQ0Esb0RBQW9ELHlCQUF5QjtBQUM3RTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CLFdBQVcsdUJBQXVCO0FBQ2xDLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDLFVBQVU7QUFDMUMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLGVBQWU7QUFDMUI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLGtCQUFrQixLQUFLLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDckM7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGtCQUFrQixJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ2xEOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixrQkFBa0IsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUNsRDs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxPQUFPO0FBQ3pDO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS9jb25zdGFudHMuanM/MmEwMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICBGYWJyaWMgQ29yZSBDb25zdGFudHMuXG4gIC0tLVxuICBBdXRob3I6IEZhYnJpYyBMYWJzXG4gIENvcHlyaWdodDogQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBOZXR3b3JraW5nIGFuZCBFbnZpcm9ubWVudFxuY29uc3QgUEVFUl9QT1JUID0gNzc3NztcbmNvbnN0IE1BWF9QRUVSUyA9IDMyO1xuY29uc3QgUFJFQ0lTSU9OID0gMTAwO1xuXG4vLyBGYWJyaWMgQ29yZVxuY29uc3QgRkFCUklDX1VTRVJfQUdFTlQgPSAnRmFicmljIENvcmUgMC4xLjAgKEBmYWJyaWMvY29yZSN2MC4xLjAtUkMxKSc7XG5jb25zdCBCSVRDT0lOX05FVFdPUksgPSAnbWFpbm5ldCc7XG5jb25zdCBCSVRDT0lOX0dFTkVTSVMgPSAnMDAwMDAwMDAwMDE5ZDY2ODljMDg1YWUxNjU4MzFlOTM0ZmY3NjNhZTQ2YTJhNmMxNzJiM2YxYjYwYThjZTI2Zic7XG5jb25zdCBCSVRDT0lOX0dFTkVTSVNfUk9PVCA9ICc0YTVlMWU0YmFhYjg5ZjNhMzI1MThhODhjMzFiYzg3ZjYxOGY3NjY3M2UyY2M3N2FiMjEyN2I3YWZkZWRhMzNiJztcbi8qKlxuICogRmFicmljIHByb3RvY29sIGlkZW50aXR5IGNvaW4gdHlwZXMgKEJJUDQ0IGBjb2luX3R5cGUnYCwgbm90IEJpdGNvaW4gZnVuZHMpLlxuICogLSAqKjc3NzcqKiDigJQgQml0Y29pbiAqKm1haW5uZXQqKiBpZGVudGl0aWVzXG4gKiAtICoqNzc3OCoqIOKAlCBhbGwgb3RoZXIgbmV0d29ya3MgKHRlc3RuZXQsIHNpZ25ldCwgcmVndGVzdCwgYW5kIHVuc3BlY2lmaWVkKVxuICovXG5jb25zdCBGQUJSSUNfQ09JTl9UWVBFX01BSU5ORVQgPSA3Nzc3O1xuY29uc3QgRkFCUklDX0NPSU5fVFlQRV9URVNUTkVUID0gNzc3ODtcbi8qKiBEZWZhdWx0IEZhYnJpYyBjb2luIHR5cGUgKG5vbi1tYWlubmV0IC8gZGV2ZWxvcG1lbnQpLiBBbGlhcyBvZiB7QGxpbmsgRkFCUklDX0NPSU5fVFlQRV9URVNUTkVUfS4gKi9cbmNvbnN0IEZBQlJJQ19DT0lOX1RZUEUgPSBGQUJSSUNfQ09JTl9UWVBFX1RFU1RORVQ7XG4vKiogRGVmYXVsdCBGYWJyaWMgaWRlbnRpdHkgcGF0aCAobm9uLW1haW5uZXQpOiBtLzQ0Jy83Nzc4Jy8wJy8wLzAgKi9cbmNvbnN0IEZBQlJJQ19LRVlfREVSSVZBVElPTl9QQVRIID0gYG0vNDQnLyR7RkFCUklDX0NPSU5fVFlQRV9URVNUTkVUfScvMCcvMC8wYDtcbi8qKiBNYWlubmV0IEZhYnJpYyBpZGVudGl0eSBwYXRoOiBtLzQ0Jy83Nzc3Jy8wJy8wLzAgKi9cbmNvbnN0IEZBQlJJQ19LRVlfREVSSVZBVElPTl9QQVRIX01BSU5ORVQgPSBgbS80NCcvJHtGQUJSSUNfQ09JTl9UWVBFX01BSU5ORVR9Jy8wJy8wLzBgO1xuLyoqIEJJUDQ0IGNvaW4gdHlwZSBmb3IgQml0Y29pbiBmdW5kcyAocmVjZWl2ZSAvIGNoYW5nZSkuICovXG5jb25zdCBCSVRDT0lOX0NPSU5fVFlQRSA9IDA7XG4vKiogRGVmYXVsdCBCaXRjb2luIHJlY2VpdmUgcGF0aCBhY2NvdW50IDAgLyBpbmRleCAwIChmdW5kcyDigJQgbmV2ZXIgRmFicmljIGlkZW50aXR5KS4gKi9cbmNvbnN0IEJJVENPSU5fS0VZX0RFUklWQVRJT05fUEFUSCA9IFwibS80NCcvMCcvMCcvMC8wXCI7XG5cbi8qKlxuICogUmVzb2x2ZSBGYWJyaWMgaWRlbnRpdHkgY29pbiB0eXBlIGZvciBhIEJpdGNvaW4gLyBGYWJyaWMgbmV0d29yayBuYW1lLlxuICogTWFpbm5ldCDihpIgNzc3NzsgZXZlcnl0aGluZyBlbHNlIChpbmNsLiBlbXB0eSAvIHVua25vd24pIOKGkiA3Nzc4LlxuICogQHBhcmFtIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IG5ldHdvcmtcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGZhYnJpY0NvaW5UeXBlRm9yTmV0d29yayAobmV0d29yaykge1xuICBjb25zdCBuID0gU3RyaW5nKG5ldHdvcmsgPT0gbnVsbCA/ICcnIDogbmV0d29yaykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChuID09PSAnbWFpbicgfHwgbiA9PT0gJ21haW5uZXQnIHx8IG4gPT09ICdiaXRjb2luJyB8fCBuID09PSAnbGl2ZW5ldCcpIHtcbiAgICByZXR1cm4gRkFCUklDX0NPSU5fVFlQRV9NQUlOTkVUO1xuICB9XG4gIHJldHVybiBGQUJSSUNfQ09JTl9UWVBFX1RFU1RORVQ7XG59XG5cbi8qKlxuICogRmFicmljIGlkZW50aXR5IHBhdGg6IG0vNDQnL3s3Nzc3fDc3Nzh9Jy9hY2NvdW50Jy8wL2luZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW2FjY291bnQ9MF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXg9MF1cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW25ldHdvcmtPckNvaW5UeXBlXSBOZXR3b3JrIG5hbWUgKGBtYWlubmV0YCAvIGByZWd0ZXN0YCAvIOKApilcbiAqICAgb3IgYW4gZXhwbGljaXQgY29pbiB0eXBlIGludGVnZXIuIE9taXQgZm9yIGRlZmF1bHQgbm9uLW1haW5uZXQgKDc3NzgpLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmFicmljSWRlbnRpdHlEZXJpdmF0aW9uUGF0aCAoYWNjb3VudCA9IDAsIGluZGV4ID0gMCwgbmV0d29ya09yQ29pblR5cGUpIHtcbiAgY29uc3QgYSA9IGFzc2VydEJpcDMyQ2hpbGRJbmRleChhY2NvdW50LCAnYWNjb3VudCcpO1xuICBjb25zdCBpID0gYXNzZXJ0QmlwMzJDaGlsZEluZGV4KGluZGV4LCAnaW5kZXgnKTtcbiAgbGV0IGNvaW4gPSBGQUJSSUNfQ09JTl9UWVBFX1RFU1RORVQ7XG4gIGlmICh0eXBlb2YgbmV0d29ya09yQ29pblR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgY29pbiA9IGFzc2VydEJpcDMyQ2hpbGRJbmRleChuZXR3b3JrT3JDb2luVHlwZSwgJ2NvaW5UeXBlJyk7XG4gIH0gZWxzZSBpZiAobmV0d29ya09yQ29pblR5cGUgIT0gbnVsbCAmJiBTdHJpbmcobmV0d29ya09yQ29pblR5cGUpLnRyaW0oKSAhPT0gJycpIHtcbiAgICBjb2luID0gZmFicmljQ29pblR5cGVGb3JOZXR3b3JrKG5ldHdvcmtPckNvaW5UeXBlKTtcbiAgfVxuICByZXR1cm4gYG0vNDQnLyR7Y29pbn0nLyR7YX0nLzAvJHtpfWA7XG59XG5cbi8qKlxuICogQml0Y29pbiBCSVA0NCByZWNlaXZlIHBhdGggKGV4dGVybmFsIGNoYWluKTogbS80NCcvMCcvYWNjb3VudCcvMC9pbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFthY2NvdW50PTBdXG4gKiBAcGFyYW0ge251bWJlcn0gW2luZGV4PTBdXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBiaXRjb2luUmVjZWl2ZURlcml2YXRpb25QYXRoIChhY2NvdW50ID0gMCwgaW5kZXggPSAwKSB7XG4gIGNvbnN0IGEgPSBhc3NlcnRCaXAzMkNoaWxkSW5kZXgoYWNjb3VudCwgJ2FjY291bnQnKTtcbiAgY29uc3QgaSA9IGFzc2VydEJpcDMyQ2hpbGRJbmRleChpbmRleCwgJ2luZGV4Jyk7XG4gIHJldHVybiBgbS80NCcvJHtCSVRDT0lOX0NPSU5fVFlQRX0nLyR7YX0nLzAvJHtpfWA7XG59XG5cbi8qKlxuICogQml0Y29pbiBCSVA0NCBjaGFuZ2UgcGF0aCAoaW50ZXJuYWwgY2hhaW4pOiBtLzQ0Jy8wJy9hY2NvdW50Jy8xL2luZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW2FjY291bnQ9MF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXg9MF1cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGJpdGNvaW5DaGFuZ2VEZXJpdmF0aW9uUGF0aCAoYWNjb3VudCA9IDAsIGluZGV4ID0gMCkge1xuICBjb25zdCBhID0gYXNzZXJ0QmlwMzJDaGlsZEluZGV4KGFjY291bnQsICdhY2NvdW50Jyk7XG4gIGNvbnN0IGkgPSBhc3NlcnRCaXAzMkNoaWxkSW5kZXgoaW5kZXgsICdpbmRleCcpO1xuICByZXR1cm4gYG0vNDQnLyR7QklUQ09JTl9DT0lOX1RZUEV9Jy8ke2F9Jy8xLyR7aX1gO1xufVxuXG4vKipcbiAqIEJJUDMyIGNoaWxkIGluZGV4IGRvbWFpbjogZmluaXRlIGludGVnZXIgaW4gWzAsIDB4N2ZmZmZmZmZdLlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBhc3NlcnRCaXAzMkNoaWxkSW5kZXggKHZhbHVlLCBsYWJlbCA9ICdpbmRleCcpIHtcbiAgY29uc3QgbiA9IE51bWJlcih2YWx1ZSk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG4pIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG4pIHx8IG4gPCAwIHx8IG4gPiAweDdmZmZmZmZmKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEJJUDMyICR7bGFiZWx9IG11c3QgYmUgYW4gaW50ZWdlciBpbiBbMCwgMHg3ZmZmZmZmZl1gKTtcbiAgfVxuICByZXR1cm4gbjtcbn1cblxuY29uc3QgRklYVFVSRV9TRUVEID0gJ2FiYW5kb24gYWJhbmRvbiBhYmFuZG9uIGFiYW5kb24gYWJhbmRvbiBhYmFuZG9uIGFiYW5kb24gYWJhbmRvbiBhYmFuZG9uIGFiYW5kb24gYWJhbmRvbiBhYm91dCc7XG5jb25zdCBGSVhUVVJFX1hQVUIgPSAneHB1YjY2MU15TXdBcVJiY0Y2R3lnVjZRNlhBZzhkcWhQdkR1aFlIR25pZXF1aTZITWJZaE5OSDVYQzEzTnAzcVJBTkhWRDJtbW5OR3RNR0JmRFQ2OXMyb3ZwSExyN3E4c3lvQXV5V3F0UkdFc1lRJztcbmNvbnN0IEZJWFRVUkVfWFBSViA9ICd4cHJ2OXMyMVpyUUgxNDNLMmNDV2FUWlBqUER3YWMxQ3pUVzRMS01mekxGRU1OWkpVb0RZcHB4cHlQZ1pYWTdDWmtqZWZHSlRyVHlxS25Nck00Ukc2bkduN1E5Y3dqSGdnQ3RuM0NkRkdKYWhhV1knO1xuXG4vLyBNZXNzYWdlIENvbnN0YW50c1xuY29uc3QgTUFHSUNfQllURVMgPSAweEMwRDNGMzNEO1xuLyoqIFdpcmUgcHJvdG9jb2wgdmVyc2lvbiBmb3IgYEBmYWJyaWMvY29yZWAgMC4xLnggcHJlLXJlbGVhc2UgKGAweDAxYCkuXG4gKiAyMDgtYnl0ZSBoZWFkZXIgKGluY2wuIExpZ2h0bmluZy1zdHlsZSBgcHJlaW1hZ2VgKSBpcyB0aGUgVjEgZnJhbWUgdW5kZXIgdGhpcyB2ZXJzaW9uIOKAlFxuICogbm90IGEgYnVtcCB0byBgMHgwMmAuIEtlZXAgaW4gc3luYyB3aXRoIGBGQUJSSUNfTUVTU0FHRV9WRVJTSU9OYCBpbiBgc3JjL2NvbnN0YW50cy5oYC4gKi9cbmNvbnN0IFZFUlNJT05fTlVNQkVSID0gMHgwMTtcbi8qIG1hZ2ljLCB2ZXJzaW9uLCBwYXJlbnQsIGF1dGhvciwgdHlwZSwgc2l6ZSwgaGFzaCwgcHJlaW1hZ2UsIHNpZ25hdHVyZSDigJQgdGhlbiBib2R5ICovXG5jb25zdCBIRUFERVJfU0laRSA9IDIwODtcbmNvbnN0IExBUkdFX0NPTExFQ1RJT05fU0laRSA9IDEwOyAvLyBUT0RPOiB0ZXN0IHdpdGggMSwwMDAsMDAwXG5jb25zdCBNQVhfTUVTU0FHRV9TSVpFID0gNDA5NiAtIEhFQURFUl9TSVpFO1xuLyoqIE1heCBVVEYtMTYgY29kZSB1bml0cyBhY2NlcHRlZCBmb3IgYEpTT04ucGFyc2VgIG9mIGxvY2FsbHkgcGVyc2lzdGVkIEpTT04gKExldmVsREIgcGVlciByZWdpc3RyeSwgQ0xJIFNUQVRFIGZpbGUpLiAqL1xuY29uc3QgUEVSU0lTVEVEX0pTT05fTUFYX0NIQVJTID0gMiAqIDEwMjQgKiAxMDI0O1xuXG4vLyBTdGFja3MgYW5kIEZyYW1lc1xuY29uc3QgTUFYX1NUQUNLX0hFSUdIVCA9IDMyOyAvLyBtYXggaGVpZ2h0IG9mIHN0YWNrIChudW1iZXIgb2YgZWxlbWVudHMpXG5jb25zdCBNQVhfRlJBTUVfU0laRSA9IDMyOyAvLyBtYXggc2l6ZSBvZiBhIHN0YWNrIGZyYW1lIGluIGJ5dGVzXG5jb25zdCBNQVhfTUVNT1JZX0FMTE9DID0gTUFYX1NUQUNLX0hFSUdIVCAqIE1BWF9GUkFNRV9TSVpFO1xuY29uc3QgTUFYX1RYX1BFUl9CTE9DSyA9IDQ7XG5jb25zdCBNQVhfQ0hBTk5FTF9WQUxVRSA9IDEwMDAwMDAwMDtcblxuLy8gTWFjaGluZSBDb25zdHJhaW50c1xuY29uc3QgTUFDSElORV9NQVhfTUVNT1JZID0gTUFYX01FTU9SWV9BTExPQyAqIE1BWF9NRVNTQUdFX1NJWkU7XG5jb25zdCBNQVhfQ0hBVF9NRVNTQUdFX0xFTkdUSCA9IDIwNDg7XG5cbi8vIFBsYXluZXRcbmNvbnN0IEZBQlJJQ19QTEFZTkVUX0FERFJFU1MgPSAnJzsgLy8gdW5zZXQgdW50aWwgYSBwdWJsaXNoZWQgcGxheW5ldCBQMlRSIGRlcG9zaXQgYWRkcmVzcyBpcyBjaG9zZW5cbmNvbnN0IEZBQlJJQ19QTEFZTkVUX09SSUdJTiA9ICcnOyAvLyB1bnNldCB1bnRpbCBmaXJzdCBwbGF5bmV0IGRlcGxveSBibG9jayBoYXNoIGlzIHNlYWxlZFxuXG4vLyBGQUJSSUMgT05MWVxuY29uc3QgQklUQ09JTl9CTE9DS19UWVBFID0gMjEwMDA7XG5jb25zdCBCSVRDT0lOX0JMT0NLX0hBU0hfVFlQRSA9IDIxMTAwO1xuY29uc3QgQklUQ09JTl9UUkFOU0FDVElPTl9UWVBFID0gMjIwMDA7XG5jb25zdCBCSVRDT0lOX1RSQU5TQUNUSU9OX0hBU0hfVFlQRSA9IDIyMTAwO1xuY29uc3QgR0VORVJJQ19NRVNTQUdFX1RZUEUgPSAxNTEwMztcbmNvbnN0IExPR19NRVNTQUdFX1RZUEUgPSAzMjM1MTU2MDgwO1xuY29uc3QgR0VORVJJQ19MSVNUX1RZUEUgPSAzMjM1MTcwMTU4O1xuLyoqIFNpZGVjaGFpbiByZWdpc3RyeSAvIHN0YXRlIHVwZGF0ZSAodHlwZWQgZmllbGRzOyBIVFRQIG1heSBtYXAgUkZDNjkwMiDihpQgZmllbGRzKS4gKi9cbmNvbnN0IFNJREVDSEFJTl9TVEFURV9QQVRDSF9UWVBFID0gOTk3O1xuY29uc3QgRE9DVU1FTlRfUFVCTElTSF9UWVBFID0gOTk4O1xuY29uc3QgRE9DVU1FTlRfUkVRVUVTVF9UWVBFID0gOTk5O1xuY29uc3QgSlNPTl9DQUxMX1RZUEUgPSAxNjAwMDtcbmNvbnN0IFBBVENIX01FU1NBR0VfVFlQRSA9IDEwMjQ7XG4vKiogQ29udHJhY3QgbmVnb3RpYXRpb246IGJhdGNoZWQgRmFicmljIG1lc3NhZ2VzICsgY2hhaW4gTWVya2xlIHJvb3QgKyBKU09OIFBhdGNoIChSRkMgNjkwMikg4oCUIHNlZSBkb2NzL0NPTlRSQUNUX1BST1BPU0FMLm1kICovXG5jb25zdCBDT05UUkFDVF9QUk9QT1NBTF9UWVBFID0gMTM4OyAvLyAweDhBIChQT0xJQ1kubWQgLyBGQUJSSUNfTUVTU0FHRV9UWVBFX0NPTlNPTElEQVRJT04pXG5cbi8vIE9wY29kZXNcbmNvbnN0IE9QX0NZQ0xFID0gJzAwJztcbmNvbnN0IE9QX0RPTkUgPSAnZmYnO1xuXG4vLyBCaXRjb2luXG5jb25zdCBPUF8wID0gJzAwJztcbmNvbnN0IE9QXzM2ID0gJzI0JztcbmNvbnN0IE9QX0NIRUNLU0lHID0gJ2FjJztcbmNvbnN0IE9QX0RVUCA9ICc3Nic7XG5jb25zdCBPUF9FUVVBTCA9ICc4Nyc7XG5jb25zdCBPUF9TSEEyNTYgPSAnYTgnO1xuY29uc3QgT1BfSEFTSDE2MCA9ICdhOSc7XG5jb25zdCBPUF9QVVNIREFUQTEgPSAnNGMnO1xuY29uc3QgT1BfUkVUVVJOID0gJzZhJztcbmNvbnN0IE9QX0VRVUFMVkVSSUZZID0gJzg4JztcbmNvbnN0IE9QX1NFUEFSQVRPUiA9ICdhYic7XG5cbi8vIEJlY2gzMm1cbmNvbnN0IEJFQ0gzMk1fQ0hBUlNFVCA9ICdxcHpyeTl4OGdmMnR2ZHcwczNqbjU0a2hjZTZtdWE3bCc7XG5cbi8vIFBlZXJpbmdcbmNvbnN0IFAyUF9QT1JUID0gNzc3Nztcbi8vIEdvc3NpcCBhbmQgcGVlcmluZyBkaXNjb3ZlcnkgKFdlYlJUQyArIEZhYnJpYyBQMlApXG4vKiogRmlyc3QtY2xhc3Mgd2lyZSBvcGNvZGU6IGdvc3NpcCBrbm93biBwZWVycyBmb3IgY3Jvc3MtY2x1c3RlciBkaXNjb3ZlcnkuICovXG5jb25zdCBQMlBfUEVFUl9HT1NTSVAgPSAweDYxO1xuLyoqIEZpcnN0LWNsYXNzIHdpcmUgb3Bjb2RlOiBwZWVyIG5lZWRzIG1vcmUgY29ubmVjdGlvbnM7IHJlbGF5ZWQgdW50aWwgZnVsZmlsbGVkLiAqL1xuY29uc3QgUDJQX1BFRVJJTkdfT0ZGRVIgPSAweDYyO1xuLyoqIE1heCBnb3NzaXAgcmVsYXlzIHBlciBsb2dpY2FsIGhvcCAoYW50aSBhbXBsaWZpY2F0aW9uKS4gKi9cbmNvbnN0IEdPU1NJUF9NQVhfSE9QUyA9IDU7XG4vKiogUGVyLW9yaWdpbiByZWxheSBidWRnZXQgcGVyIHJvbGxpbmcgbWludXRlIChhbnRpIGZsb29kKS4gKi9cbmNvbnN0IEdPU1NJUF9NQVhfUkVMQVlTX1BFUl9PUklHSU5fUEVSX01JTlVURSA9IDYwO1xuLyoqIE1heCBlbnRyaWVzIGZvciBsb2dpY2FsIGdvc3NpcCBwYXlsb2FkIGRlZHVwIChleGNsdWRpbmcgaG9wL3NpZ25hdHVyZSBjaHVybikuICovXG5jb25zdCBHT1NTSVBfTUFYX1BBWUxPQURfQ0FDSEUgPSA1MDAwMDtcbi8qKiBQZWVyaW5nLW9mZmVyIHJlbGF5OiBzYW1lIGRlZmF1bHRzIGFzIGdvc3NpcCAoc2VwYXJhdGUgY2FjaGVzIC8gcmF0ZSBtYXApLiAqL1xuY29uc3QgUEVFUklOR19PRkZFUl9NQVhfSE9QUyA9IDU7XG5jb25zdCBQRUVSSU5HX09GRkVSX01BWF9SRUxBWVNfUEVSX09SSUdJTl9QRVJfTUlOVVRFID0gNjA7XG5jb25zdCBQRUVSSU5HX09GRkVSX01BWF9QQVlMT0FEX0NBQ0hFID0gNTAwMDA7XG4vKiogTWF4IHF1ZXVlZCBjb25uZWN0aW9uIGNhbmRpZGF0ZXMgZnJvbSB7QGxpbmsgUDJQX1BFRVJJTkdfT0ZGRVJ9IChGSUZPIGV2aWN0aW9uKS4gKi9cbmNvbnN0IFBFRVJfTUFYX0NBTkRJREFURVNfUVVFVUUgPSAxMjg7XG4vKipcbiAqIE1pbmltdW0gZGVsYXkgYmVmb3JlIHtAbGluayBQZWVyI19maWxsUGVlclNsb3RzfSByZWRpYWxzIHRoZSBzYW1lIGNhbmRpZGF0ZS5cbiAqIEltbWVkaWF0ZSByZXF1ZXVlIHBsdXMgYGNvbm5lY3Rpb25zOmNsb3NlYCB3YXMgYSB0aWdodCBFQ09OTlJFRlVTRUQgbG9vcC5cbiAqL1xuY29uc3QgUEVFUl9DQU5ESURBVEVfUkVUUllfTVMgPSA2MDAwMDtcbi8qKiBNYXggd2lyZS1oYXNoIGRlZHVwIGVudHJpZXMgaW4ge0BsaW5rIFBlZXJ9IChib3VuZGVkIG1lbW9yeSkuICovXG5jb25zdCBQRUVSX01BWF9XSVJFX0hBU0hfQ0FDSEUgPSAxMDAwMDtcbi8qKlxuICogTWF4IGxvZ2ljYWwgZmlyc3Qtd3JpdGVyLXdpbnMgcmVnaXN0cmF0aW9uIGtleXMgaW4ge0BsaW5rIFBlZXJ9XG4gKiAoQ09OVFJBQ1RfUFVCTElTSCAvIERPQ1VNRU5UX1BVQkxJU0ggLyBDT05UUkFDVF9QUk9QT1NBTCAvIGFubm91bmNlcyAvXG4gKiBCaXRjb2luQmxvY2sgdGlwIC8gRkxVU0hfQ0hBSU4gLyBwZWVyIGFsaWFzIC8ga2V5IHJldmVhbCkuXG4gKiBEaXN0aW5jdCBmcm9tIHdpcmUtaGFzaCBkZWR1cDogY2F0Y2hlcyByZS1zaWduZWQgY29waWVzIG9mIHRoZSBzYW1lIGJvZHkuXG4gKi9cbmNvbnN0IFBFRVJfTUFYX0xPR0lDQUxfUkVHSVNURVJfQ0FDSEUgPSAxMDAwMDtcblxuLyoqIERlZmF1bHQgUGVlciByZWdpc3RyeS1zY29yZSBwZW5hbHRpZXMgKEJpdGNvaW4gQ29yZeKAk3N0eWxlIG1pc2JlaGF2aW9yKS4gKi9cbmNvbnN0IFBFRVJfU0NPUkVfQk9EWV9IQVNIX01JU01BVENIX1BFTkFMVFkgPSAxMDA7XG5jb25zdCBQRUVSX1NDT1JFX0lOVkFMSURfU0lHTkFUVVJFX1BFTkFMVFkgPSAxMDA7XG5jb25zdCBQRUVSX1NDT1JFX1NJR05FUl9QSU5fTUlTTUFUQ0hfUEVOQUxUWSA9IDEwMDtcbmNvbnN0IFBFRVJfU0NPUkVfU0VTU0lPTl9LRVlfVklPTEFUSU9OX1BFTkFMVFkgPSAyNDA7XG5jb25zdCBQRUVSX1NDT1JFX0NPTlRSQUNUX09QU19GT1JCSURERU5fUEVOQUxUWSA9IDgwO1xuY29uc3QgUEVFUl9TQ09SRV9MT0dJQ0FMX1JFR0lTVEVSX0hJSkFDS19QRU5BTFRZID0gNDA7XG5jb25zdCBQRUVSX1NDT1JFX0xPR0lDQUxfUkVHSVNURVJfRFVQTElDQVRFX1BFTkFMVFkgPSA4O1xuY29uc3QgUEVFUl9TQ09SRV9MT0dJQ0FMX1JFR0lTVEVSX0RVUExJQ0FURV9XSU5ET1dfTVMgPSA2MDAwMDtcbi8qKiBNYXggbmVzdGVkIHtAbGluayBQMlBfUkVMQVl9IHVud3JhcCBkZXB0aCAob3V0ZXJtb3N0IGNvdW50cyBhcyAwKS4gKi9cbmNvbnN0IFBFRVJfTUFYX1JFTEFZX05FU1RfREVQVEggPSAyO1xuLyoqIERlZmF1bHQgVFRMIGZvciBoYXJkLW1pc2JlaGF2aW9yIGJhbnMgKHB1YmtleSArIGNvbm5lY3Rpb24gYWRkcmVzcykuICovXG5jb25zdCBQRUVSX0JBTl9UVExfTVMgPSAxNSAqIDYwICogMTAwMDtcbi8qKiBJbmJvdW5kIGNyZWRpdCBjb3N0IGZvciB7QGxpbmsgUDJQX1JFTEFZfSBtZXNoIGZsb29kIGVudmVsb3Blcy4gKi9cbmNvbnN0IFBFRVJfUkVMQVlfQ1JFRElUX0NPU1QgPSA4O1xuY29uc3QgUEVFUl9TQ09SRV9SRUxBWV9ORVNUX0VYQ0VFREVEX1BFTkFMVFkgPSA2MDtcbi8qKiBNYXggY2hhdCBtZXNoIHJlbGF5cyBwZXIgb3JpZ2luIHBlciByb2xsaW5nIG1pbnV0ZSAobG9jYWwgZW1pdCBzdGlsbCBoYXBwZW5zKS4gKi9cbmNvbnN0IENIQVRfTUFYX1JFTEFZU19QRVJfT1JJR0lOX1BFUl9NSU5VVEUgPSAzMDtcbi8qKiBNYXggc2VhbGVkIGNpcGhlcnRleHQgcm93cyBhd2FpdGluZyBrZXkgcmV2ZWFsIG9uIGEgUGVlci4gKi9cbmNvbnN0IFBFRVJfTUFYX1BFTkRJTkdfU0VBTEVEX0RFTElWRVJJRVMgPSAzMjtcbi8qKiBNYXggcHJpdmF0ZSBEb2N1bWVudFJlcXVlc3QgcmV2ZXJzZS1yb3V0ZSBlbnRyaWVzLiAqL1xuY29uc3QgUEVFUl9NQVhfRE9DVU1FTlRfUkVMQVlfUk9VVEVTID0gMjU2O1xuY29uc3QgUDJQX0dFTkVSSUMgPSAweDgwOyAvLyAxMjggaW4gZGVjaW1hbFxuY29uc3QgUDJQX0lERU5UX1JFUVVFU1QgPSAweDAxOyAvLyAxLCBvciB0aGUgaWRlbnRpdHlcbmNvbnN0IFAyUF9JREVOVF9SRVNQT05TRSA9IDB4MTE7XG5jb25zdCBQMlBfUk9PVCA9IDB4MDAwMDAwMDA7XG5jb25zdCBQMlBfUElORyA9IDB4MDAwMDAwMTI7IC8vIHNhbWUgSUQgYXMgTGlnaHRuaW5nICgxOClcbmNvbnN0IFAyUF9QT05HID0gMHgwMDAwMDAxMzsgLy8gc2FtZSBJRCBhcyBMaWdodG5pbmcgKDE5KVxuY29uc3QgUDJQX0lOU1RSVUNUSU9OID0gMHgwMDAwMDAyMDsgLy8gVE9ETzogc2VsZWN0IHcvIG5vIG92ZXJsYXBcbmNvbnN0IFAyUF9TVEFSVF9DSEFJTiA9IDB4MDAwMDAwMjE7XG5jb25zdCBQMlBfU1RBVEVfUkVRVUVTVCA9IDB4MDAwMDAwMjk7IC8vIFRPRE86IHNlbGVjdCB3LyBubyBvdmVybGFwXG5jb25zdCBQMlBfU1RBVEVfUk9PVCA9IDB4MDAwMDAwMzA7IC8vIFRPRE86IHNlbGVjdCB3LyBubyBvdmVybGFwXG5jb25zdCBQMlBfQkFTRV9NRVNTQUdFID0gMHgwMDAwMDAzMTsgLy8gVE9ETzogc2VsZWN0IHcvIG5vIG92ZXJsYXBcbmNvbnN0IFAyUF9TVEFURV9DT01NSVRUTUVOVCA9IDB4MDAwMDAwMzI7IC8vIFRPRE86IHNlbGVjdCB3LyBubyBvdmVybGFwXG5jb25zdCBQMlBfU1RBVEVfQ0hBTkdFID0gMHgwMDAwMDAzMzsgLy8gVE9ETzogc2VsZWN0IHcvIG5vIG92ZXJsYXBcbmNvbnN0IFAyUF9UUkFOU0FDVElPTiA9IDB4MDAwMDAwMzk7IC8vIFRPRE86IHNlbGVjdCB3LyBubyBvdmVybGFwXG5jb25zdCBQMlBfQ0FMTCA9IDB4MDAwMDAwNDI7XG5jb25zdCBQMlBfUkVMQVkgPSAweDAwMDAwMDQzOyAvLyBNZXNoIGZsb29kIGVudmVsb3BlOiBib2R5ID0gcmF3IGlubmVyIE1lc3NhZ2UgYnl0ZXMgKG5vdCBkaXJlY3RlZCBvbmlvbilcbmNvbnN0IFAyUF9NRVNTQUdFX1JFQ0VJUFQgPSAweDAwMDAwMDQ0OyAvLyBBY2svcmVjZWlwdCBmb3IgYSBwcm9jZXNzZWQgaW5ib3VuZCBtZXNzYWdlIChXZWJTb2NrZXQgLyBQMlApXG4vKiogRGlyZWN0ZWQgb25pb24gaG9wOiBmaWVsZCBib2R5IGB7IG5leHRQZWVyLCB0dGwsIGlubmVyIH1gIOKAlCBzZWUgYGZ1bmN0aW9ucy9mYWJyaWNPbmlvbi5qc2AuICovXG5jb25zdCBQMlBfRk9SV0FSRCA9IDB4MDAwMDAwNDU7XG4vKiogTWF4IG5lc3RlZCBgUDJQX0ZPUldBUkRgIGhvcHMgYW4gb3JpZ2luYXRvciBtYXkgYnVpbGQgKHBhdGggbGVuZ3RoKS4gKi9cbmNvbnN0IFAyUF9GT1JXQVJEX01BWF9IT1BTID0gODtcbmNvbnN0IFAyUF9DSEFJTl9TWU5DX1JFUVVFU1QgPSAweDU1O1xuLyoqIFBsYXluZXQgLyBmZWRlcmF0aW9uOiByZXdpbmQgYml0Y29pbmQgdG8gYSBrbm93bi1nb29kIHRpcDsgcmVsYXkgb25seSB0byBoaWdobHkgdHJ1c3RlZCBwZWVycy4gKi9cbmNvbnN0IFAyUF9GTFVTSF9DSEFJTiA9IDB4NTY7XG5jb25zdCBQMlBfSU5WRU5UT1JZX1JFUVVFU1QgPSAweDU3O1xuY29uc3QgUDJQX0lOVkVOVE9SWV9SRVNQT05TRSA9IDB4NTg7XG5jb25zdCBQMlBfRklMRV9TRU5EID0gMHg1OTtcbmNvbnN0IFAyUF9ET0NVTUVOVF9QVUJMSVNIID0gMHg1YTtcbmNvbnN0IFAyUF9QRUVSX0FMSUFTID0gMHg1YjtcbmNvbnN0IFAyUF9QRUVSX0FOTk9VTkNFID0gMHg1YztcbmNvbnN0IFAyUF9TRVNTSU9OX09GRkVSID0gMHg1ZDtcbmNvbnN0IFAyUF9TRVNTSU9OX09QRU4gPSAweDVlO1xuY29uc3QgUDJQX0NPTlRSQUNUX1BVQkxJU0ggPSAweDVmO1xuY29uc3QgUDJQX0NPTlRSQUNUX01FU1NBR0UgPSAweDYwO1xuY29uc3QgUDJQX1NFU1NJT05fQUNLID0gMHg0MjAwO1xuY29uc3QgUDJQX01VU0lHX1NUQVJUID0gMHg0MjIwO1xuY29uc3QgUDJQX01VU0lHX0FDQ0VQVCA9IDB4NDIyMTtcbmNvbnN0IFAyUF9NVVNJR19SRUNFSVZFX0NPVU5URVIgPSAweDQyMjI7XG5jb25zdCBQMlBfTVVTSUdfU0VORF9QUk9QT1NBTCA9IDB4NDIyMztcbmNvbnN0IFAyUF9NVVNJR19SRVBMWV9UT19QUk9QT1NBTCA9IDB4NDIyNDtcbmNvbnN0IFAyUF9NVVNJR19BQ0NFUFRfUFJPUE9TQUwgPSAweDQyMjU7XG5cbi8vIE1lc3NhZ2UgVHlwZXNcbmNvbnN0IFBFRVJfQ0FORElEQVRFID0gMHgwOTtcbi8vIFRPRE86IHNob3VsZCBiZSAweDAyIGZvciBCaXRjb2luIFAyUFxuY29uc3QgQkxPQ0tfQ0FORElEQVRFID0gMHgwMztcblxuY29uc3QgU0VTU0lPTl9TVEFSVCA9IDB4MDI7XG5jb25zdCBDSEFUX01FU1NBR0UgPSAweDY3O1xuLyoqIEZpcnN0LWNsYXNzIHBlZXIgY2hhdCBmcmFtZSAoYXV0aG9yLXNpZ25lZCwgcmVsYXllZCB2ZXJiYXRpbSkuIEJvZHkgPSByYXcgVVRGLTggdGV4dCBvbmx5IChubyBKU09OKS4gQXV0aG9yIGlzIEFNUCBoZWFkZXIgKyBzaWduYXR1cmUuICovXG5jb25zdCBQMlBfQ0hBVF9NRVNTQUdFID0gMHg2ODtcblxuLy8gTGlnaHRuaW5nXG5jb25zdCBMSUdIVE5JTkdfVEVTVF9IRUFERVIgPSAnRDA1MjBDNkUnO1xuY29uc3QgTElHSFROSU5HX1BST1RPQ09MX0hfSU5JVCA9ICdOb2lzZV9YS19zZWNwMjU2azFfQ2hhQ2hhUG9seV9TSEEyNTYnO1xuY29uc3QgTElHSFROSU5HX1BST1RPQ09MX1BST0xPR1VFID0gJ2xpZ2h0bmluZyc7XG5cbi8vIExpZ2h0bmluZyBCT0xUIE1lc3NhZ2UgVHlwZXMgKHN1YnNldClcbi8vIFNldHVwICYgQ29udHJvbFxuY29uc3QgTElHSFROSU5HX1dBUk5JTkcgPSAweDAwMDAwMDAxOyAvLyAxXG5jb25zdCBMSUdIVE5JTkdfSU5JVCA9IDB4MDAwMDAwMTA7IC8vIDE2XG5jb25zdCBMSUdIVE5JTkdfRVJST1IgPSAweDAwMDAwMDExOyAvLyAxN1xuY29uc3QgTElHSFROSU5HX1BJTkcgPSAweDAwMDAwMDEyOyAvLyAxOCAoYWxpYXMgb2YgUDJQX1BJTkcpXG5jb25zdCBMSUdIVE5JTkdfUE9ORyA9IDB4MDAwMDAwMTM7IC8vIDE5IChhbGlhcyBvZiBQMlBfUE9ORylcblxuLy8gQ2hhbm5lbCBNYW5hZ2VtZW50XG5jb25zdCBMSUdIVE5JTkdfT1BFTl9DSEFOTkVMID0gMHgwMDAwMDAyMDsgLy8gMzJcbmNvbnN0IExJR0hUTklOR19BQ0NFUFRfQ0hBTk5FTCA9IDB4MDAwMDAwMjE7IC8vIDMzXG5jb25zdCBMSUdIVE5JTkdfRlVORElOR19DUkVBVEVEID0gMHgwMDAwMDAyMjsgLy8gMzRcbmNvbnN0IExJR0hUTklOR19GVU5ESU5HX1NJR05FRCA9IDB4MDAwMDAwMjM7IC8vIDM1XG5jb25zdCBMSUdIVE5JTkdfQ0hBTk5FTF9SRUFEWSA9IDB4MDAwMDAwMjQ7IC8vIDM2XG5jb25zdCBMSUdIVE5JTkdfU0hVVERPV04gPSAweDAwMDAwMDI2OyAvLyAzOFxuY29uc3QgTElHSFROSU5HX0NMT1NJTkdfU0lHTkVEID0gMHgwMDAwMDAyNzsgLy8gMzlcblxuLy8gUGF5bWVudCBNZXNzYWdlc1xuY29uc3QgTElHSFROSU5HX1VQREFURV9BRERfSFRMQyA9IDB4MDAwMDAwODA7IC8vIDEyOFxuY29uc3QgTElHSFROSU5HX1VQREFURV9GVUxGSUxMX0hUTEMgPSAweDAwMDAwMDgyOyAvLyAxMzBcbmNvbnN0IExJR0hUTklOR19VUERBVEVfRkFJTF9IVExDID0gMHgwMDAwMDA4MzsgLy8gMTMxXG5jb25zdCBMSUdIVE5JTkdfQ09NTUlUTUVOVF9TSUdORUQgPSAweDAwMDAwMDg0OyAvLyAxMzJcbmNvbnN0IExJR0hUTklOR19SRVZPS0VfQU5EX0FDSyA9IDB4MDAwMDAwODU7IC8vIDEzM1xuXG4vLyBHb3NzaXAgUHJvdG9jb2xcbmNvbnN0IExJR0hUTklOR19DSEFOTkVMX0FOTk9VTkNFTUVOVCA9IDB4MDAwMDAxMDA7IC8vIDI1NlxuY29uc3QgTElHSFROSU5HX05PREVfQU5OT1VOQ0VNRU5UID0gMHgwMDAwMDEwMTsgLy8gMjU3XG5jb25zdCBMSUdIVE5JTkdfQ0hBTk5FTF9VUERBVEUgPSAweDAwMDAwMTAyOyAvLyAyNThcblxuLy8gTGlnaHRuaW5nIEJNTVxuY29uc3QgTElHSFROSU5HX0JNTV9IRUFERVIgPSAnRDA1MjBDNkUnO1xuY29uc3QgTElHSFROSU5HX1NJREVDSEFJTl9OVU0gPSAweEZGOyAvLyAxLWJ5dGUgLSBzaWRlY2hhaW4gbnVtYmVyXG5cbmNvbnN0IExJR0hUTklOR19TSURFQkxPQ0tfSEFTSCA9IDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOyAvLyAzMi1ieXRlc1xuY29uc3QgTElHSFROSU5HX1BBUkVOVF9TSURFQkxPQ0tfSEFTSCA9IDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOyAvLyAzMi1ieXRlc1xuXG5jb25zdCBaRVJPX0xFTkdUSF9QTEFJTlRFWFQgPSAnJztcblxuLy8gSFRUUFxuY29uc3QgSFRUUF9IRUFERVJfQ09OVEVOVF9UWVBFID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuXG4vLyBVSVxuY29uc3QgSU5QVVRfSElOVCA9ICdQcmVzcyB0aGUgXCJpXCIga2V5IHRvIGJlZ2luIHR5cGluZy4nO1xuXG4vLyBDb21tb25KUyBTdXBwb3J0XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgUEVFUl9QT1JULFxuICBNQVhfUEVFUlMsXG4gIFBSRUNJU0lPTixcbiAgQklUQ09JTl9ORVRXT1JLLFxuICBCSVRDT0lOX0dFTkVTSVMsXG4gIEJJVENPSU5fR0VORVNJU19IQVNIOiBCSVRDT0lOX0dFTkVTSVMsXG4gIEJJVENPSU5fR0VORVNJU19ST09ULFxuICBGQUJSSUNfS0VZX0RFUklWQVRJT05fUEFUSCxcbiAgRkFCUklDX0tFWV9ERVJJVkFUSU9OX1BBVEhfTUFJTk5FVCxcbiAgRkFCUklDX0NPSU5fVFlQRSxcbiAgRkFCUklDX0NPSU5fVFlQRV9NQUlOTkVULFxuICBGQUJSSUNfQ09JTl9UWVBFX1RFU1RORVQsXG4gIEJJVENPSU5fQ09JTl9UWVBFLFxuICBCSVRDT0lOX0tFWV9ERVJJVkFUSU9OX1BBVEgsXG4gIGZhYnJpY0NvaW5UeXBlRm9yTmV0d29yayxcbiAgZmFicmljSWRlbnRpdHlEZXJpdmF0aW9uUGF0aCxcbiAgYml0Y29pblJlY2VpdmVEZXJpdmF0aW9uUGF0aCxcbiAgYml0Y29pbkNoYW5nZURlcml2YXRpb25QYXRoLFxuICBhc3NlcnRCaXAzMkNoaWxkSW5kZXgsXG4gIEZBQlJJQ19VU0VSX0FHRU5ULFxuICBGSVhUVVJFX1NFRUQsXG4gIEZJWFRVUkVfWFBVQixcbiAgRklYVFVSRV9YUFJWLFxuICBIRUFERVJfU0laRSxcbiAgQklUQ09JTl9CTE9DS19UWVBFLFxuICBCSVRDT0lOX0JMT0NLX0hBU0hfVFlQRSxcbiAgQklUQ09JTl9UUkFOU0FDVElPTl9UWVBFLFxuICBCSVRDT0lOX1RSQU5TQUNUSU9OX0hBU0hfVFlQRSxcbiAgR0VORVJJQ19NRVNTQUdFX1RZUEUsXG4gIExPR19NRVNTQUdFX1RZUEUsXG4gIEdFTkVSSUNfTElTVF9UWVBFLFxuICBMQVJHRV9DT0xMRUNUSU9OX1NJWkUsXG4gIEJMT0NLX0NBTkRJREFURSxcbiAgQ0hBVF9NRVNTQUdFLFxuICBQMlBfQ0hBVF9NRVNTQUdFLFxuICBJTlBVVF9ISU5ULFxuICBaRVJPX0xFTkdUSF9QTEFJTlRFWFQsXG4gIEJFQ0gzMk1fQ0hBUlNFVCxcbiAgRkFCUklDX1BMQVlORVRfQUREUkVTUyxcbiAgRkFCUklDX1BMQVlORVRfT1JJR0lOLFxuICBMSUdIVE5JTkdfVEVTVF9IRUFERVIsXG4gIExJR0hUTklOR19QUk9UT0NPTF9IX0lOSVQsXG4gIExJR0hUTklOR19QUk9UT0NPTF9QUk9MT0dVRSxcbiAgTElHSFROSU5HX1dBUk5JTkcsXG4gIExJR0hUTklOR19JTklULFxuICBMSUdIVE5JTkdfRVJST1IsXG4gIExJR0hUTklOR19QSU5HLFxuICBMSUdIVE5JTkdfUE9ORyxcbiAgTElHSFROSU5HX09QRU5fQ0hBTk5FTCxcbiAgTElHSFROSU5HX0FDQ0VQVF9DSEFOTkVMLFxuICBMSUdIVE5JTkdfRlVORElOR19DUkVBVEVELFxuICBMSUdIVE5JTkdfRlVORElOR19TSUdORUQsXG4gIExJR0hUTklOR19DSEFOTkVMX1JFQURZLFxuICBMSUdIVE5JTkdfU0hVVERPV04sXG4gIExJR0hUTklOR19DTE9TSU5HX1NJR05FRCxcbiAgTElHSFROSU5HX1VQREFURV9BRERfSFRMQyxcbiAgTElHSFROSU5HX1VQREFURV9GVUxGSUxMX0hUTEMsXG4gIExJR0hUTklOR19VUERBVEVfRkFJTF9IVExDLFxuICBMSUdIVE5JTkdfQ09NTUlUTUVOVF9TSUdORUQsXG4gIExJR0hUTklOR19SRVZPS0VfQU5EX0FDSyxcbiAgTElHSFROSU5HX0NIQU5ORUxfQU5OT1VOQ0VNRU5ULFxuICBMSUdIVE5JTkdfTk9ERV9BTk5PVU5DRU1FTlQsXG4gIExJR0hUTklOR19DSEFOTkVMX1VQREFURSxcbiAgTElHSFROSU5HX0JNTV9IRUFERVIsXG4gIExJR0hUTklOR19TSURFQ0hBSU5fTlVNLFxuICBMSUdIVE5JTkdfU0lERUJMT0NLX0hBU0gsXG4gIExJR0hUTklOR19QQVJFTlRfU0lERUJMT0NLX0hBU0gsXG4gIEhUVFBfSEVBREVSX0NPTlRFTlRfVFlQRSxcbiAgTUFHSUNfQllURVMsXG4gIE1BWF9GUkFNRV9TSVpFLFxuICBNQVhfTUVNT1JZX0FMTE9DLFxuICBNQVhfTUVTU0FHRV9TSVpFLFxuICBQRVJTSVNURURfSlNPTl9NQVhfQ0hBUlMsXG4gIE1BWF9TVEFDS19IRUlHSFQsXG4gIE1BWF9DSEFOTkVMX1ZBTFVFLFxuICBNQVhfQ0hBVF9NRVNTQUdFX0xFTkdUSCxcbiAgTUFYX1RYX1BFUl9CTE9DSyxcbiAgTUFDSElORV9NQVhfTUVNT1JZLFxuICBPUF9DWUNMRSxcbiAgT1BfRE9ORSxcbiAgT1BfMCxcbiAgT1BfMzYsXG4gIE9QX0NIRUNLU0lHLFxuICBPUF9EVVAsXG4gIE9QX0VRVUFMLFxuICBPUF9TSEEyNTYsXG4gIE9QX0hBU0gxNjAsXG4gIE9QX1BVU0hEQVRBMSxcbiAgT1BfUkVUVVJOLFxuICBPUF9FUVVBTFZFUklGWSxcbiAgT1BfU0VQQVJBVE9SLFxuICBQMlBfR0VORVJJQyxcbiAgUDJQX1BFRVJfR09TU0lQLFxuICBQMlBfUEVFUklOR19PRkZFUixcbiAgR09TU0lQX01BWF9IT1BTLFxuICBHT1NTSVBfTUFYX1JFTEFZU19QRVJfT1JJR0lOX1BFUl9NSU5VVEUsXG4gIEdPU1NJUF9NQVhfUEFZTE9BRF9DQUNIRSxcbiAgUEVFUklOR19PRkZFUl9NQVhfSE9QUyxcbiAgUEVFUklOR19PRkZFUl9NQVhfUkVMQVlTX1BFUl9PUklHSU5fUEVSX01JTlVURSxcbiAgUEVFUklOR19PRkZFUl9NQVhfUEFZTE9BRF9DQUNIRSxcbiAgUEVFUl9NQVhfQ0FORElEQVRFU19RVUVVRSxcbiAgUEVFUl9DQU5ESURBVEVfUkVUUllfTVMsXG4gIFBFRVJfTUFYX1dJUkVfSEFTSF9DQUNIRSxcbiAgUEVFUl9NQVhfTE9HSUNBTF9SRUdJU1RFUl9DQUNIRSxcbiAgUEVFUl9TQ09SRV9CT0RZX0hBU0hfTUlTTUFUQ0hfUEVOQUxUWSxcbiAgUEVFUl9TQ09SRV9JTlZBTElEX1NJR05BVFVSRV9QRU5BTFRZLFxuICBQRUVSX1NDT1JFX1NJR05FUl9QSU5fTUlTTUFUQ0hfUEVOQUxUWSxcbiAgUEVFUl9TQ09SRV9TRVNTSU9OX0tFWV9WSU9MQVRJT05fUEVOQUxUWSxcbiAgUEVFUl9TQ09SRV9DT05UUkFDVF9PUFNfRk9SQklEREVOX1BFTkFMVFksXG4gIFBFRVJfU0NPUkVfTE9HSUNBTF9SRUdJU1RFUl9ISUpBQ0tfUEVOQUxUWSxcbiAgUEVFUl9TQ09SRV9MT0dJQ0FMX1JFR0lTVEVSX0RVUExJQ0FURV9QRU5BTFRZLFxuICBQRUVSX1NDT1JFX0xPR0lDQUxfUkVHSVNURVJfRFVQTElDQVRFX1dJTkRPV19NUyxcbiAgUEVFUl9NQVhfUkVMQVlfTkVTVF9ERVBUSCxcbiAgUEVFUl9CQU5fVFRMX01TLFxuICBQRUVSX1JFTEFZX0NSRURJVF9DT1NULFxuICBQRUVSX1NDT1JFX1JFTEFZX05FU1RfRVhDRUVERURfUEVOQUxUWSxcbiAgQ0hBVF9NQVhfUkVMQVlTX1BFUl9PUklHSU5fUEVSX01JTlVURSxcbiAgUEVFUl9NQVhfUEVORElOR19TRUFMRURfREVMSVZFUklFUyxcbiAgUEVFUl9NQVhfRE9DVU1FTlRfUkVMQVlfUk9VVEVTLFxuICBQMlBfSURFTlRfUkVRVUVTVCxcbiAgUDJQX0lERU5UX1JFU1BPTlNFLFxuICBQMlBfQ0hBSU5fU1lOQ19SRVFVRVNULFxuICBQMlBfRkxVU0hfQ0hBSU4sXG4gIFAyUF9JTlZFTlRPUllfUkVRVUVTVCxcbiAgUDJQX0lOVkVOVE9SWV9SRVNQT05TRSxcbiAgUDJQX0ZJTEVfU0VORCxcbiAgUDJQX0RPQ1VNRU5UX1BVQkxJU0gsXG4gIFAyUF9QRUVSX0FMSUFTLFxuICBQMlBfUEVFUl9BTk5PVU5DRSxcbiAgUDJQX1NFU1NJT05fT0ZGRVIsXG4gIFAyUF9TRVNTSU9OX09QRU4sXG4gIFAyUF9DT05UUkFDVF9QVUJMSVNILFxuICBQMlBfQ09OVFJBQ1RfTUVTU0FHRSxcbiAgUDJQX1JPT1QsXG4gIFAyUF9QSU5HLFxuICBQMlBfUE9ORyxcbiAgUDJQX1BPUlQsXG4gIFAyUF9TVEFSVF9DSEFJTixcbiAgUDJQX0lOU1RSVUNUSU9OLFxuICBQMlBfQkFTRV9NRVNTQUdFLFxuICBQMlBfU1RBVEVfUk9PVCxcbiAgUDJQX1NUQVRFX0NPTU1JVFRNRU5ULFxuICBQMlBfU1RBVEVfQ0hBTkdFLFxuICBQMlBfU1RBVEVfUkVRVUVTVCxcbiAgUDJQX1RSQU5TQUNUSU9OLFxuICBQMlBfQ0FMTCxcbiAgUDJQX1JFTEFZLFxuICBQMlBfTUVTU0FHRV9SRUNFSVBULFxuICBQMlBfRk9SV0FSRCxcbiAgUDJQX0ZPUldBUkRfTUFYX0hPUFMsXG4gIFAyUF9TRVNTSU9OX0FDSyxcbiAgUDJQX01VU0lHX1NUQVJULFxuICBQMlBfTVVTSUdfQUNDRVBULFxuICBQMlBfTVVTSUdfUkVDRUlWRV9DT1VOVEVSLFxuICBQMlBfTVVTSUdfU0VORF9QUk9QT1NBTCxcbiAgUDJQX01VU0lHX1JFUExZX1RPX1BST1BPU0FMLFxuICBQMlBfTVVTSUdfQUNDRVBUX1BST1BPU0FMLFxuICBQRUVSX0NBTkRJREFURSxcbiAgU0lERUNIQUlOX1NUQVRFX1BBVENIX1RZUEUsXG4gIERPQ1VNRU5UX1BVQkxJU0hfVFlQRSxcbiAgRE9DVU1FTlRfUkVRVUVTVF9UWVBFLFxuICBKU09OX0NBTExfVFlQRSxcbiAgUEFUQ0hfTUVTU0FHRV9UWVBFLFxuICBDT05UUkFDVF9QUk9QT1NBTF9UWVBFLFxuICBTRVNTSU9OX1NUQVJULFxuICBWRVJTSU9OX05VTUJFUlxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/constants.js\n\n}")},"./node_modules/@fabric/core/functions/_sortKeys.js"(module){eval("{/**\n * Create a new {@link Object} with sorted properties.\n * @param {Object} [state] Object to sort.\n * @returns {Object} Re-sorted instance of `state` as provided.\n */\nmodule.exports = function _sortKeys (state = {}) {\n // Sort the keys of the state object, and return a new object with the sorted keys.\n return Object.keys(state).sort().reduce((obj, key) => {\n // Add the key to the new object.\n obj[key] = state[key];\n // Return the new object.\n return obj;\n }, {});\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9fc29ydEtleXMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxpQkFBaUIsY0FBYztBQUMvQixXQUFXLFFBQVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsSUFBSTtBQUNQIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9fc29ydEtleXMuanM/ZWY4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENyZWF0ZSBhIG5ldyB7QGxpbmsgT2JqZWN0fSB3aXRoIHNvcnRlZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGF0ZV0gT2JqZWN0IHRvIHNvcnQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZS1zb3J0ZWQgaW5zdGFuY2Ugb2YgYHN0YXRlYCBhcyBwcm92aWRlZC5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfc29ydEtleXMgKHN0YXRlID0ge30pIHtcbiAgLy8gU29ydCB0aGUga2V5cyBvZiB0aGUgc3RhdGUgb2JqZWN0LCBhbmQgcmV0dXJuIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBzb3J0ZWQga2V5cy5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHN0YXRlKS5zb3J0KCkucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgIC8vIEFkZCB0aGUga2V5IHRvIHRoZSBuZXcgb2JqZWN0LlxuICAgIG9ialtrZXldID0gc3RhdGVba2V5XTtcbiAgICAvLyBSZXR1cm4gdGhlIG5ldyBvYmplY3QuXG4gICAgcmV0dXJuIG9iajtcbiAgfSwge30pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/_sortKeys.js\n\n}")},"./node_modules/@fabric/core/functions/applicationNamespaces.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n/**\n * Fabric application namespaces — the common outer + contract-body type set\n * shared by Hub and other downstream Application Resource Contracts.\n *\n * Model (see docs/APPLICATION_NAMESPACES.md):\n * 1. Global shoutbox — P2P_CHAT_MESSAGE (not contract-namespaced)\n * 2. Gossip — CONTRACT_PUBLISH / CONTRACT_MESSAGE (P2P_CONTRACT_* aliases)\n * 3. Apps ignore CONTRACT_MESSAGE frames for unknown contract ids\n * 4. Federation-shaped contracts carry a validator convergent timeline\n *\n * Outer opcodes live in constants.js / types/message.js. This module only\n * catalogs **names** and **contract body `type` strings** so apps converge.\n * Product-specific body types (missions, gameplay batches, share envelopes)\n * live in each app’s own catalog — not here.\n */\n\nconst {\n P2P_CHAT_MESSAGE,\n P2P_CONTRACT_PUBLISH,\n P2P_CONTRACT_MESSAGE,\n CONTRACT_PROPOSAL_TYPE,\n CHAT_MESSAGE\n} = __webpack_require__(/*! ../constants */ \"./node_modules/@fabric/core/constants.js\");\n\n/** Outer wire types for the application-namespace flow. */\nconst OUTER = Object.freeze({\n /** Network-wide shoutbox (author-signed; Peer relays). */\n P2P_CHAT_MESSAGE: 'P2P_CHAT_MESSAGE',\n /** Legacy chat opcode (0x67); prefer P2P_CHAT_MESSAGE for mesh. */\n CHAT_MESSAGE: 'ChatMessage',\n /** Publish an application / Federation genesis → namespace id. */\n CONTRACT_PUBLISH: 'CONTRACT_PUBLISH',\n /** Namespaced app event; body.contract required. */\n CONTRACT_MESSAGE: 'CONTRACT_MESSAGE',\n /** Batched contract proposal (escrow / payout / patches). */\n CONTRACT_PROPOSAL: 'CONTRACT_PROPOSAL'\n});\n\n/** Opcode aliases accepted by Message.fromVector (same numeric codes). */\nconst OUTER_ALIASES = Object.freeze({\n P2P_CONTRACT_PUBLISH: 'P2P_CONTRACT_PUBLISH',\n P2P_CONTRACT_MESSAGE: 'P2P_CONTRACT_MESSAGE',\n P2P_CONTRACT_PROPOSAL: 'P2P_CONTRACT_PROPOSAL',\n ChatMessage: 'ChatMessage'\n});\n\n/**\n * Shared CONTRACT_MESSAGE body `type` values (generic ARC domain).\n * Apps MAY define additional types under their own contract namespace.\n */\nconst CONTRACT_BODY_TYPES = Object.freeze({\n FederationContractInvite: 'FederationContractInvite',\n FederationContractInviteResponse: 'FederationContractInviteResponse',\n /** Chat under a group / pair Application Resource Contract. */\n GroupChat: 'GroupChat',\n /** Membership / meta mutation on a group Federation contract. */\n GroupChange: 'GroupChange',\n /** Proposed membership/meta change pending validator votes (k-of-n). */\n GroupChangeProposal: 'GroupChangeProposal',\n /** Validator vote (BIP340) on a GroupChangeProposal. */\n GroupChangeVote: 'GroupChangeVote',\n /** Request missing Statechain journal entries (fromClock → tip). */\n GroupJournalRequest: 'GroupJournalRequest',\n /** Catch-up batch of accepted journal rows + tip Schnorr (k-of-n members). */\n GroupJournalBatch: 'GroupJournalBatch',\n /** Optional tip attestation: folded stateDigest signed by member threshold. */\n GroupStateJournal: 'GroupStateJournal',\n /** Token-backed contract role grant (reader / signer). */\n ContractCapabilityGrant: 'ContractCapabilityGrant',\n /** Propose spend or decay-migrate from contract Taproot UTXO. */\n ContractWithdrawalRequest: 'ContractWithdrawalRequest',\n /** Co-signer witness for a withdrawal / migration. */\n ContractWithdrawalWitness: 'ContractWithdrawalWitness',\n /** Phase-1 delivery ACK: reader received the wire frame. */\n MessageReceived: 'MessageReceived',\n /** Phase-2 BIP340 receipt over message / content hash. */\n MessageReceipt: 'MessageReceipt'\n});\n\n/**\n * GenericMessage / activity `type` strings shared across Hub Beacon Federation\n * (not outer opcodes; not necessarily CONTRACT_MESSAGE bodies).\n */\nconst ACTIVITY_TYPES = Object.freeze({\n FederationSignRequest: 'FederationSignRequest',\n FederationSignResponse: 'FederationSignResponse'\n});\n\n/** Fabric log / activity type names for contract namespace events. */\nconst LOG_TYPES = Object.freeze({\n ContractPublish: 'ContractPublish',\n ContractMessage: 'ContractMessage'\n});\n\nconst OUTER_OPCODES = Object.freeze({\n P2P_CHAT_MESSAGE,\n CHAT_MESSAGE,\n CONTRACT_PUBLISH: P2P_CONTRACT_PUBLISH,\n CONTRACT_MESSAGE: P2P_CONTRACT_MESSAGE,\n CONTRACT_PROPOSAL: CONTRACT_PROPOSAL_TYPE\n});\n\n/**\n * True when `name` is a preferred outer type for app-namespace mesh traffic.\n * @param {string} name\n * @returns {boolean}\n */\nfunction isApplicationOuterType (name) {\n const n = String(name || '');\n return n === OUTER.P2P_CHAT_MESSAGE\n || n === OUTER.CONTRACT_PUBLISH\n || n === OUTER.CONTRACT_MESSAGE\n || n === OUTER.CONTRACT_PROPOSAL\n || n === OUTER_ALIASES.P2P_CONTRACT_PUBLISH\n || n === OUTER_ALIASES.P2P_CONTRACT_MESSAGE\n || n === OUTER_ALIASES.P2P_CONTRACT_PROPOSAL;\n}\n\n/**\n * True when `type` is a known shared CONTRACT_MESSAGE body type.\n * @param {string} type\n * @returns {boolean}\n */\nfunction isKnownContractBodyType (type) {\n return Object.prototype.hasOwnProperty.call(CONTRACT_BODY_TYPES, String(type || ''));\n}\n\nmodule.exports = {\n OUTER,\n OUTER_ALIASES,\n OUTER_OPCODES,\n CONTRACT_BODY_TYPES,\n ACTIVITY_TYPES,\n LOG_TYPES,\n isApplicationOuterType,\n isKnownContractBodyType\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9hcHBsaWNhdGlvbk5hbWVzcGFjZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsRUFBRSxtQkFBTyxDQUFDLDhEQUFjOztBQUUxQjtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvZnVuY3Rpb25zL2FwcGxpY2F0aW9uTmFtZXNwYWNlcy5qcz83MjFkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBGYWJyaWMgYXBwbGljYXRpb24gbmFtZXNwYWNlcyDigJQgdGhlIGNvbW1vbiBvdXRlciArIGNvbnRyYWN0LWJvZHkgdHlwZSBzZXRcbiAqIHNoYXJlZCBieSBIdWIgYW5kIG90aGVyIGRvd25zdHJlYW0gQXBwbGljYXRpb24gUmVzb3VyY2UgQ29udHJhY3RzLlxuICpcbiAqIE1vZGVsIChzZWUgZG9jcy9BUFBMSUNBVElPTl9OQU1FU1BBQ0VTLm1kKTpcbiAqICAgMS4gR2xvYmFsIHNob3V0Ym94IOKAlCBQMlBfQ0hBVF9NRVNTQUdFIChub3QgY29udHJhY3QtbmFtZXNwYWNlZClcbiAqICAgMi4gR29zc2lwIOKAlCBDT05UUkFDVF9QVUJMSVNIIC8gQ09OVFJBQ1RfTUVTU0FHRSAoUDJQX0NPTlRSQUNUXyogYWxpYXNlcylcbiAqICAgMy4gQXBwcyBpZ25vcmUgQ09OVFJBQ1RfTUVTU0FHRSBmcmFtZXMgZm9yIHVua25vd24gY29udHJhY3QgaWRzXG4gKiAgIDQuIEZlZGVyYXRpb24tc2hhcGVkIGNvbnRyYWN0cyBjYXJyeSBhIHZhbGlkYXRvciBjb252ZXJnZW50IHRpbWVsaW5lXG4gKlxuICogT3V0ZXIgb3Bjb2RlcyBsaXZlIGluIGNvbnN0YW50cy5qcyAvIHR5cGVzL21lc3NhZ2UuanMuIFRoaXMgbW9kdWxlIG9ubHlcbiAqIGNhdGFsb2dzICoqbmFtZXMqKiBhbmQgKipjb250cmFjdCBib2R5IGB0eXBlYCBzdHJpbmdzKiogc28gYXBwcyBjb252ZXJnZS5cbiAqIFByb2R1Y3Qtc3BlY2lmaWMgYm9keSB0eXBlcyAobWlzc2lvbnMsIGdhbWVwbGF5IGJhdGNoZXMsIHNoYXJlIGVudmVsb3BlcylcbiAqIGxpdmUgaW4gZWFjaCBhcHDigJlzIG93biBjYXRhbG9nIOKAlCBub3QgaGVyZS5cbiAqL1xuXG5jb25zdCB7XG4gIFAyUF9DSEFUX01FU1NBR0UsXG4gIFAyUF9DT05UUkFDVF9QVUJMSVNILFxuICBQMlBfQ09OVFJBQ1RfTUVTU0FHRSxcbiAgQ09OVFJBQ1RfUFJPUE9TQUxfVFlQRSxcbiAgQ0hBVF9NRVNTQUdFXG59ID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzJyk7XG5cbi8qKiBPdXRlciB3aXJlIHR5cGVzIGZvciB0aGUgYXBwbGljYXRpb24tbmFtZXNwYWNlIGZsb3cuICovXG5jb25zdCBPVVRFUiA9IE9iamVjdC5mcmVlemUoe1xuICAvKiogTmV0d29yay13aWRlIHNob3V0Ym94IChhdXRob3Itc2lnbmVkOyBQZWVyIHJlbGF5cykuICovXG4gIFAyUF9DSEFUX01FU1NBR0U6ICdQMlBfQ0hBVF9NRVNTQUdFJyxcbiAgLyoqIExlZ2FjeSBjaGF0IG9wY29kZSAoMHg2Nyk7IHByZWZlciBQMlBfQ0hBVF9NRVNTQUdFIGZvciBtZXNoLiAqL1xuICBDSEFUX01FU1NBR0U6ICdDaGF0TWVzc2FnZScsXG4gIC8qKiBQdWJsaXNoIGFuIGFwcGxpY2F0aW9uIC8gRmVkZXJhdGlvbiBnZW5lc2lzIOKGkiBuYW1lc3BhY2UgaWQuICovXG4gIENPTlRSQUNUX1BVQkxJU0g6ICdDT05UUkFDVF9QVUJMSVNIJyxcbiAgLyoqIE5hbWVzcGFjZWQgYXBwIGV2ZW50OyBib2R5LmNvbnRyYWN0IHJlcXVpcmVkLiAqL1xuICBDT05UUkFDVF9NRVNTQUdFOiAnQ09OVFJBQ1RfTUVTU0FHRScsXG4gIC8qKiBCYXRjaGVkIGNvbnRyYWN0IHByb3Bvc2FsIChlc2Nyb3cgLyBwYXlvdXQgLyBwYXRjaGVzKS4gKi9cbiAgQ09OVFJBQ1RfUFJPUE9TQUw6ICdDT05UUkFDVF9QUk9QT1NBTCdcbn0pO1xuXG4vKiogT3Bjb2RlIGFsaWFzZXMgYWNjZXB0ZWQgYnkgTWVzc2FnZS5mcm9tVmVjdG9yIChzYW1lIG51bWVyaWMgY29kZXMpLiAqL1xuY29uc3QgT1VURVJfQUxJQVNFUyA9IE9iamVjdC5mcmVlemUoe1xuICBQMlBfQ09OVFJBQ1RfUFVCTElTSDogJ1AyUF9DT05UUkFDVF9QVUJMSVNIJyxcbiAgUDJQX0NPTlRSQUNUX01FU1NBR0U6ICdQMlBfQ09OVFJBQ1RfTUVTU0FHRScsXG4gIFAyUF9DT05UUkFDVF9QUk9QT1NBTDogJ1AyUF9DT05UUkFDVF9QUk9QT1NBTCcsXG4gIENoYXRNZXNzYWdlOiAnQ2hhdE1lc3NhZ2UnXG59KTtcblxuLyoqXG4gKiBTaGFyZWQgQ09OVFJBQ1RfTUVTU0FHRSBib2R5IGB0eXBlYCB2YWx1ZXMgKGdlbmVyaWMgQVJDIGRvbWFpbikuXG4gKiBBcHBzIE1BWSBkZWZpbmUgYWRkaXRpb25hbCB0eXBlcyB1bmRlciB0aGVpciBvd24gY29udHJhY3QgbmFtZXNwYWNlLlxuICovXG5jb25zdCBDT05UUkFDVF9CT0RZX1RZUEVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEZlZGVyYXRpb25Db250cmFjdEludml0ZTogJ0ZlZGVyYXRpb25Db250cmFjdEludml0ZScsXG4gIEZlZGVyYXRpb25Db250cmFjdEludml0ZVJlc3BvbnNlOiAnRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlUmVzcG9uc2UnLFxuICAvKiogQ2hhdCB1bmRlciBhIGdyb3VwIC8gcGFpciBBcHBsaWNhdGlvbiBSZXNvdXJjZSBDb250cmFjdC4gKi9cbiAgR3JvdXBDaGF0OiAnR3JvdXBDaGF0JyxcbiAgLyoqIE1lbWJlcnNoaXAgLyBtZXRhIG11dGF0aW9uIG9uIGEgZ3JvdXAgRmVkZXJhdGlvbiBjb250cmFjdC4gKi9cbiAgR3JvdXBDaGFuZ2U6ICdHcm91cENoYW5nZScsXG4gIC8qKiBQcm9wb3NlZCBtZW1iZXJzaGlwL21ldGEgY2hhbmdlIHBlbmRpbmcgdmFsaWRhdG9yIHZvdGVzIChrLW9mLW4pLiAqL1xuICBHcm91cENoYW5nZVByb3Bvc2FsOiAnR3JvdXBDaGFuZ2VQcm9wb3NhbCcsXG4gIC8qKiBWYWxpZGF0b3Igdm90ZSAoQklQMzQwKSBvbiBhIEdyb3VwQ2hhbmdlUHJvcG9zYWwuICovXG4gIEdyb3VwQ2hhbmdlVm90ZTogJ0dyb3VwQ2hhbmdlVm90ZScsXG4gIC8qKiBSZXF1ZXN0IG1pc3NpbmcgU3RhdGVjaGFpbiBqb3VybmFsIGVudHJpZXMgKGZyb21DbG9jayDihpIgdGlwKS4gKi9cbiAgR3JvdXBKb3VybmFsUmVxdWVzdDogJ0dyb3VwSm91cm5hbFJlcXVlc3QnLFxuICAvKiogQ2F0Y2gtdXAgYmF0Y2ggb2YgYWNjZXB0ZWQgam91cm5hbCByb3dzICsgdGlwIFNjaG5vcnIgKGstb2YtbiBtZW1iZXJzKS4gKi9cbiAgR3JvdXBKb3VybmFsQmF0Y2g6ICdHcm91cEpvdXJuYWxCYXRjaCcsXG4gIC8qKiBPcHRpb25hbCB0aXAgYXR0ZXN0YXRpb246IGZvbGRlZCBzdGF0ZURpZ2VzdCBzaWduZWQgYnkgbWVtYmVyIHRocmVzaG9sZC4gKi9cbiAgR3JvdXBTdGF0ZUpvdXJuYWw6ICdHcm91cFN0YXRlSm91cm5hbCcsXG4gIC8qKiBUb2tlbi1iYWNrZWQgY29udHJhY3Qgcm9sZSBncmFudCAocmVhZGVyIC8gc2lnbmVyKS4gKi9cbiAgQ29udHJhY3RDYXBhYmlsaXR5R3JhbnQ6ICdDb250cmFjdENhcGFiaWxpdHlHcmFudCcsXG4gIC8qKiBQcm9wb3NlIHNwZW5kIG9yIGRlY2F5LW1pZ3JhdGUgZnJvbSBjb250cmFjdCBUYXByb290IFVUWE8uICovXG4gIENvbnRyYWN0V2l0aGRyYXdhbFJlcXVlc3Q6ICdDb250cmFjdFdpdGhkcmF3YWxSZXF1ZXN0JyxcbiAgLyoqIENvLXNpZ25lciB3aXRuZXNzIGZvciBhIHdpdGhkcmF3YWwgLyBtaWdyYXRpb24uICovXG4gIENvbnRyYWN0V2l0aGRyYXdhbFdpdG5lc3M6ICdDb250cmFjdFdpdGhkcmF3YWxXaXRuZXNzJyxcbiAgLyoqIFBoYXNlLTEgZGVsaXZlcnkgQUNLOiByZWFkZXIgcmVjZWl2ZWQgdGhlIHdpcmUgZnJhbWUuICovXG4gIE1lc3NhZ2VSZWNlaXZlZDogJ01lc3NhZ2VSZWNlaXZlZCcsXG4gIC8qKiBQaGFzZS0yIEJJUDM0MCByZWNlaXB0IG92ZXIgbWVzc2FnZSAvIGNvbnRlbnQgaGFzaC4gKi9cbiAgTWVzc2FnZVJlY2VpcHQ6ICdNZXNzYWdlUmVjZWlwdCdcbn0pO1xuXG4vKipcbiAqIEdlbmVyaWNNZXNzYWdlIC8gYWN0aXZpdHkgYHR5cGVgIHN0cmluZ3Mgc2hhcmVkIGFjcm9zcyBIdWIgQmVhY29uIEZlZGVyYXRpb25cbiAqIChub3Qgb3V0ZXIgb3Bjb2Rlczsgbm90IG5lY2Vzc2FyaWx5IENPTlRSQUNUX01FU1NBR0UgYm9kaWVzKS5cbiAqL1xuY29uc3QgQUNUSVZJVFlfVFlQRVMgPSBPYmplY3QuZnJlZXplKHtcbiAgRmVkZXJhdGlvblNpZ25SZXF1ZXN0OiAnRmVkZXJhdGlvblNpZ25SZXF1ZXN0JyxcbiAgRmVkZXJhdGlvblNpZ25SZXNwb25zZTogJ0ZlZGVyYXRpb25TaWduUmVzcG9uc2UnXG59KTtcblxuLyoqIEZhYnJpYyBsb2cgLyBhY3Rpdml0eSB0eXBlIG5hbWVzIGZvciBjb250cmFjdCBuYW1lc3BhY2UgZXZlbnRzLiAqL1xuY29uc3QgTE9HX1RZUEVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIENvbnRyYWN0UHVibGlzaDogJ0NvbnRyYWN0UHVibGlzaCcsXG4gIENvbnRyYWN0TWVzc2FnZTogJ0NvbnRyYWN0TWVzc2FnZSdcbn0pO1xuXG5jb25zdCBPVVRFUl9PUENPREVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIFAyUF9DSEFUX01FU1NBR0UsXG4gIENIQVRfTUVTU0FHRSxcbiAgQ09OVFJBQ1RfUFVCTElTSDogUDJQX0NPTlRSQUNUX1BVQkxJU0gsXG4gIENPTlRSQUNUX01FU1NBR0U6IFAyUF9DT05UUkFDVF9NRVNTQUdFLFxuICBDT05UUkFDVF9QUk9QT1NBTDogQ09OVFJBQ1RfUFJPUE9TQUxfVFlQRVxufSk7XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGBuYW1lYCBpcyBhIHByZWZlcnJlZCBvdXRlciB0eXBlIGZvciBhcHAtbmFtZXNwYWNlIG1lc2ggdHJhZmZpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNBcHBsaWNhdGlvbk91dGVyVHlwZSAobmFtZSkge1xuICBjb25zdCBuID0gU3RyaW5nKG5hbWUgfHwgJycpO1xuICByZXR1cm4gbiA9PT0gT1VURVIuUDJQX0NIQVRfTUVTU0FHRVxuICAgIHx8IG4gPT09IE9VVEVSLkNPTlRSQUNUX1BVQkxJU0hcbiAgICB8fCBuID09PSBPVVRFUi5DT05UUkFDVF9NRVNTQUdFXG4gICAgfHwgbiA9PT0gT1VURVIuQ09OVFJBQ1RfUFJPUE9TQUxcbiAgICB8fCBuID09PSBPVVRFUl9BTElBU0VTLlAyUF9DT05UUkFDVF9QVUJMSVNIXG4gICAgfHwgbiA9PT0gT1VURVJfQUxJQVNFUy5QMlBfQ09OVFJBQ1RfTUVTU0FHRVxuICAgIHx8IG4gPT09IE9VVEVSX0FMSUFTRVMuUDJQX0NPTlRSQUNUX1BST1BPU0FMO1xufVxuXG4vKipcbiAqIFRydWUgd2hlbiBgdHlwZWAgaXMgYSBrbm93biBzaGFyZWQgQ09OVFJBQ1RfTUVTU0FHRSBib2R5IHR5cGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzS25vd25Db250cmFjdEJvZHlUeXBlICh0eXBlKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQ09OVFJBQ1RfQk9EWV9UWVBFUywgU3RyaW5nKHR5cGUgfHwgJycpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE9VVEVSLFxuICBPVVRFUl9BTElBU0VTLFxuICBPVVRFUl9PUENPREVTLFxuICBDT05UUkFDVF9CT0RZX1RZUEVTLFxuICBBQ1RJVklUWV9UWVBFUyxcbiAgTE9HX1RZUEVTLFxuICBpc0FwcGxpY2F0aW9uT3V0ZXJUeXBlLFxuICBpc0tub3duQ29udHJhY3RCb2R5VHlwZVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/applicationNamespaces.js\n\n}")},"./node_modules/@fabric/core/functions/base58.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n/**\n * Bitcoin Base58 (no checksum) and Base58Check (double-SHA256 4-byte suffix).\n *\n * Raw alphabet matches Bitcoin Core / BIP-0173 base58 (no 0, O, I, l).\n * Check uses @noble/hashes (same as BIP-340 paths).\n *\n * @module functions/base58\n */\n\n\nconst { sha256 } = __webpack_require__(/*! @noble/hashes/sha2.js */ \"./node_modules/@noble/hashes/sha2.js\");\nconst { toUint8Strict } = __webpack_require__(/*! ./bytes */ \"./node_modules/@fabric/core/functions/bytes.js\");\n\nconst ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n\nconst DECODE_MAP = (() => {\n const m = new Map();\n for (let i = 0; i < ALPHABET.length; i++) m.set(ALPHABET.charCodeAt(i), i);\n return m;\n})();\n\n/**\n * @param {Buffer|Uint8Array} source\n * @returns {string}\n */\nfunction encode (source) {\n const bytes = toUint8Strict(source);\n if (bytes.length === 0) return '';\n\n const digits = [0];\n for (let i = 0; i < bytes.length; i++) {\n let carry = bytes[i];\n for (let j = 0; j < digits.length; j++) {\n carry += digits[j] << 8;\n digits[j] = carry % 58;\n carry = (carry / 58) | 0;\n }\n while (carry) {\n digits.push(carry % 58);\n carry = (carry / 58) | 0;\n }\n }\n\n let out = '';\n for (let k = 0; k < bytes.length - 1 && bytes[k] === 0; k++) {\n out += ALPHABET[0];\n }\n for (let q = digits.length - 1; q >= 0; q--) {\n out += ALPHABET[digits[q]];\n }\n return out;\n}\n\n/**\n * @param {string} str\n * @returns {Buffer}\n */\nfunction decode (str) {\n if (typeof str !== 'string') throw new TypeError('base58.decode expects a string');\n if (str.length === 0) return Buffer.alloc(0);\n\n const bytes = [0];\n for (let i = 0; i < str.length; i++) {\n const val = DECODE_MAP.get(str.charCodeAt(i));\n if (val === undefined) throw new Error(`Invalid base58 character: ${str[i]}`);\n\n let carry = val;\n for (let j = 0; j < bytes.length; j++) {\n carry += bytes[j] * 58;\n bytes[j] = carry & 0xff;\n carry >>= 8;\n }\n while (carry) {\n bytes.push(carry & 0xff);\n carry >>= 8;\n }\n }\n\n // Leading `1` characters map to leading zero bytes (same rule as bitcoinjs/bs58).\n for (let k = 0; k < str.length - 1 && str.charCodeAt(k) === 49 /* '1' */; k++) {\n bytes.push(0);\n }\n\n return Buffer.from(bytes.reverse());\n}\n\nfunction checksum (payload) {\n const h = sha256(sha256(payload));\n return h.subarray(0, 4);\n}\n\n/**\n * @param {Buffer|Uint8Array} payload — version byte(s) + data (checksum appended)\n * @returns {string}\n */\nfunction encodeCheck (payload) {\n const p = toUint8Strict(payload);\n const cs = checksum(p);\n const combined = new Uint8Array(p.length + 4);\n combined.set(p, 0);\n combined.set(cs, p.length);\n return encode(combined);\n}\n\n/**\n * @param {string} str\n * @returns {Buffer} payload only (no checksum bytes)\n */\nfunction decodeCheck (str) {\n const buf = decode(str);\n if (buf.length < 4) throw new Error('base58check data too short');\n\n const payload = buf.subarray(0, buf.length - 4);\n const cs = buf.subarray(buf.length - 4);\n const expect = Buffer.from(checksum(payload));\n if (cs.length !== expect.length || !cs.equals(expect)) {\n throw new Error('Invalid base58 checksum');\n }\n return Buffer.from(payload);\n}\n\nmodule.exports = {\n encode,\n decode,\n encodeCheck,\n decodeCheck,\n ALPHABET,\n /** @deprecated Use {@link module:functions/bytes.toUint8Strict} — alias kept for compatibility */\n toU8: toUint8Strict\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9iYXNlNTguanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDYTs7QUFFYixRQUFRLFNBQVMsRUFBRSxtQkFBTyxDQUFDLG1FQUF1QjtBQUNsRCxRQUFRLGdCQUFnQixFQUFFLG1CQUFPLENBQUMsK0RBQVM7O0FBRTNDOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IscUJBQXFCO0FBQ3ZDO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixrQkFBa0I7QUFDcEM7QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQix3Q0FBd0M7QUFDMUQ7QUFDQTtBQUNBLGtDQUFrQyxRQUFRO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsTUFBTTs7QUFFckM7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0Esd0VBQXdFLE9BQU87O0FBRS9FO0FBQ0Esb0JBQW9CLGtCQUFrQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsMERBQTBEO0FBQzVFO0FBQ0E7O0FBRUEsU0FBUyxNQUFNO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0EsU0FBUyxNQUFNO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDRDQUE0QztBQUNuRTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9iYXNlNTguanM/MjgxNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJpdGNvaW4gQmFzZTU4IChubyBjaGVja3N1bSkgYW5kIEJhc2U1OENoZWNrIChkb3VibGUtU0hBMjU2IDQtYnl0ZSBzdWZmaXgpLlxuICpcbiAqIFJhdyBhbHBoYWJldCBtYXRjaGVzIEJpdGNvaW4gQ29yZSAvIEJJUC0wMTczIGJhc2U1OCAobm8gMCwgTywgSSwgbCkuXG4gKiBDaGVjayB1c2VzIEBub2JsZS9oYXNoZXMgKHNhbWUgYXMgQklQLTM0MCBwYXRocykuXG4gKlxuICogQG1vZHVsZSBmdW5jdGlvbnMvYmFzZTU4XG4gKi9cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgeyBzaGEyNTYgfSA9IHJlcXVpcmUoJ0Bub2JsZS9oYXNoZXMvc2hhMi5qcycpO1xuY29uc3QgeyB0b1VpbnQ4U3RyaWN0IH0gPSByZXF1aXJlKCcuL2J5dGVzJyk7XG5cbmNvbnN0IEFMUEhBQkVUID0gJzEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXonO1xuXG5jb25zdCBERUNPREVfTUFQID0gKCgpID0+IHtcbiAgY29uc3QgbSA9IG5ldyBNYXAoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBBTFBIQUJFVC5sZW5ndGg7IGkrKykgbS5zZXQoQUxQSEFCRVQuY2hhckNvZGVBdChpKSwgaSk7XG4gIHJldHVybiBtO1xufSkoKTtcblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcnxVaW50OEFycmF5fSBzb3VyY2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZSAoc291cmNlKSB7XG4gIGNvbnN0IGJ5dGVzID0gdG9VaW50OFN0cmljdChzb3VyY2UpO1xuICBpZiAoYnl0ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG5cbiAgY29uc3QgZGlnaXRzID0gWzBdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGNhcnJ5ID0gYnl0ZXNbaV07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaWdpdHMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNhcnJ5ICs9IGRpZ2l0c1tqXSA8PCA4O1xuICAgICAgZGlnaXRzW2pdID0gY2FycnkgJSA1ODtcbiAgICAgIGNhcnJ5ID0gKGNhcnJ5IC8gNTgpIHwgMDtcbiAgICB9XG4gICAgd2hpbGUgKGNhcnJ5KSB7XG4gICAgICBkaWdpdHMucHVzaChjYXJyeSAlIDU4KTtcbiAgICAgIGNhcnJ5ID0gKGNhcnJ5IC8gNTgpIHwgMDtcbiAgICB9XG4gIH1cblxuICBsZXQgb3V0ID0gJyc7XG4gIGZvciAobGV0IGsgPSAwOyBrIDwgYnl0ZXMubGVuZ3RoIC0gMSAmJiBieXRlc1trXSA9PT0gMDsgaysrKSB7XG4gICAgb3V0ICs9IEFMUEhBQkVUWzBdO1xuICB9XG4gIGZvciAobGV0IHEgPSBkaWdpdHMubGVuZ3RoIC0gMTsgcSA+PSAwOyBxLS0pIHtcbiAgICBvdXQgKz0gQUxQSEFCRVRbZGlnaXRzW3FdXTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoc3RyKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignYmFzZTU4LmRlY29kZSBleHBlY3RzIGEgc3RyaW5nJyk7XG4gIGlmIChzdHIubGVuZ3RoID09PSAwKSByZXR1cm4gQnVmZmVyLmFsbG9jKDApO1xuXG4gIGNvbnN0IGJ5dGVzID0gWzBdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHZhbCA9IERFQ09ERV9NQVAuZ2V0KHN0ci5jaGFyQ29kZUF0KGkpKTtcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBiYXNlNTggY2hhcmFjdGVyOiAke3N0cltpXX1gKTtcblxuICAgIGxldCBjYXJyeSA9IHZhbDtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJ5dGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICBjYXJyeSArPSBieXRlc1tqXSAqIDU4O1xuICAgICAgYnl0ZXNbal0gPSBjYXJyeSAmIDB4ZmY7XG4gICAgICBjYXJyeSA+Pj0gODtcbiAgICB9XG4gICAgd2hpbGUgKGNhcnJ5KSB7XG4gICAgICBieXRlcy5wdXNoKGNhcnJ5ICYgMHhmZik7XG4gICAgICBjYXJyeSA+Pj0gODtcbiAgICB9XG4gIH1cblxuICAvLyBMZWFkaW5nIGAxYCBjaGFyYWN0ZXJzIG1hcCB0byBsZWFkaW5nIHplcm8gYnl0ZXMgKHNhbWUgcnVsZSBhcyBiaXRjb2luanMvYnM1OCkuXG4gIGZvciAobGV0IGsgPSAwOyBrIDwgc3RyLmxlbmd0aCAtIDEgJiYgc3RyLmNoYXJDb2RlQXQoaykgPT09IDQ5IC8qICcxJyAqLzsgaysrKSB7XG4gICAgYnl0ZXMucHVzaCgwKTtcbiAgfVxuXG4gIHJldHVybiBCdWZmZXIuZnJvbShieXRlcy5yZXZlcnNlKCkpO1xufVxuXG5mdW5jdGlvbiBjaGVja3N1bSAocGF5bG9hZCkge1xuICBjb25zdCBoID0gc2hhMjU2KHNoYTI1NihwYXlsb2FkKSk7XG4gIHJldHVybiBoLnN1YmFycmF5KDAsIDQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyfFVpbnQ4QXJyYXl9IHBheWxvYWQg4oCUIHZlcnNpb24gYnl0ZShzKSArIGRhdGEgKGNoZWNrc3VtIGFwcGVuZGVkKVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlQ2hlY2sgKHBheWxvYWQpIHtcbiAgY29uc3QgcCA9IHRvVWludDhTdHJpY3QocGF5bG9hZCk7XG4gIGNvbnN0IGNzID0gY2hlY2tzdW0ocCk7XG4gIGNvbnN0IGNvbWJpbmVkID0gbmV3IFVpbnQ4QXJyYXkocC5sZW5ndGggKyA0KTtcbiAgY29tYmluZWQuc2V0KHAsIDApO1xuICBjb21iaW5lZC5zZXQoY3MsIHAubGVuZ3RoKTtcbiAgcmV0dXJuIGVuY29kZShjb21iaW5lZCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybnMge0J1ZmZlcn0gcGF5bG9hZCBvbmx5IChubyBjaGVja3N1bSBieXRlcylcbiAqL1xuZnVuY3Rpb24gZGVjb2RlQ2hlY2sgKHN0cikge1xuICBjb25zdCBidWYgPSBkZWNvZGUoc3RyKTtcbiAgaWYgKGJ1Zi5sZW5ndGggPCA0KSB0aHJvdyBuZXcgRXJyb3IoJ2Jhc2U1OGNoZWNrIGRhdGEgdG9vIHNob3J0Jyk7XG5cbiAgY29uc3QgcGF5bG9hZCA9IGJ1Zi5zdWJhcnJheSgwLCBidWYubGVuZ3RoIC0gNCk7XG4gIGNvbnN0IGNzID0gYnVmLnN1YmFycmF5KGJ1Zi5sZW5ndGggLSA0KTtcbiAgY29uc3QgZXhwZWN0ID0gQnVmZmVyLmZyb20oY2hlY2tzdW0ocGF5bG9hZCkpO1xuICBpZiAoY3MubGVuZ3RoICE9PSBleHBlY3QubGVuZ3RoIHx8ICFjcy5lcXVhbHMoZXhwZWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiYXNlNTggY2hlY2tzdW0nKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ocGF5bG9hZCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlbmNvZGUsXG4gIGRlY29kZSxcbiAgZW5jb2RlQ2hlY2ssXG4gIGRlY29kZUNoZWNrLFxuICBBTFBIQUJFVCxcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgbW9kdWxlOmZ1bmN0aW9ucy9ieXRlcy50b1VpbnQ4U3RyaWN0fSDigJQgYWxpYXMga2VwdCBmb3IgY29tcGF0aWJpbGl0eSAqL1xuICB0b1U4OiB0b1VpbnQ4U3RyaWN0XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/base58.js\n\n}")},"./node_modules/@fabric/core/functions/beaconFederationSigning.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * Beacon Federation signature collection rounds + epoch signing helpers.\n *\n * When k-of-n validators are configured, epoch seals wait until a threshold\n * Schnorr witness is assembled over `signingStringForBeaconEpoch(payload)`.\n *\n * Used by Hub Beacon and any app that seals L1-tied epochs under a Federation.\n *\n * @see docs/STATECHAIN.md\n * @see docs/PROGRAM.md\n */\n\nconst crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nconst Key = __webpack_require__(/*! ../types/key */ \"./node_modules/@fabric/core/types/key.js\");\nconst fabricCanonicalJson = __webpack_require__(/*! ./fabricCanonicalJson */ \"./node_modules/@fabric/core/functions/fabricCanonicalJson.js\");\nconst { jsonSafe } = fabricCanonicalJson;\n\nconst BEACON_EPOCH_SIGNING_KIND = 'BeaconEpoch';\nconst FEDERATION_SIGN_REQUEST = 'FederationSignRequest';\nconst FEDERATION_SIGN_RESPONSE = 'FederationSignResponse';\nconst PENDING_STORE_PATH = 'beacon/PENDING_EPOCH_ROUNDS';\n\n/**\n * UTF-8 string that federation members sign for a beacon epoch.\n * @param {object} epochPayload\n * @returns {string}\n */\nfunction signingStringForBeaconEpoch (epochPayload) {\n const safe = jsonSafe(epochPayload);\n return fabricCanonicalJson({\n version: 1,\n kind: BEACON_EPOCH_SIGNING_KIND,\n epoch: safe\n });\n}\n\n/**\n * SHA-256 hex digest of {@link signingStringForBeaconEpoch}.\n * @param {object} epochPayload\n * @returns {string}\n */\nfunction epochCommitmentDigestHex (epochPayload) {\n const s = signingStringForBeaconEpoch(epochPayload);\n return crypto.createHash('sha256').update(Buffer.from(s, 'utf8')).digest('hex');\n}\n\n/**\n * Verify threshold Schnorr signatures over the same message buffer used when signing.\n * @param {Buffer} messageBuffer\n * @param {object} witness\n * @param {string[]} validatorPubkeys\n * @param {number} [threshold=1]\n * @returns {boolean}\n */\nfunction verifyFederationWitnessOnMessage (messageBuffer, witness, validatorPubkeys, threshold = 1) {\n if (!witness || !witness.signatures || typeof witness.signatures !== 'object') return false;\n if (!Buffer.isBuffer(messageBuffer)) return false;\n // Deduplicate so a repeated pubkey cannot satisfy k-of-n with one signature.\n const pubkeys = Array.from(new Set(\n (Array.isArray(validatorPubkeys) ? validatorPubkeys : [])\n .filter((p) => typeof p === 'string' && p)\n ));\n const thr = Number(threshold);\n if (!Number.isInteger(thr) || thr < 1) return false;\n let valid = 0;\n for (const pubkey of pubkeys) {\n const sigHex = witness.signatures[pubkey];\n if (!sigHex || typeof sigHex !== 'string') continue;\n try {\n const k = new Key({ pubkey });\n const sig = Buffer.from(sigHex, 'hex');\n if (k.verifySchnorr(messageBuffer, sig)) valid++;\n if (valid >= thr) return true;\n } catch {\n /* ignore */\n }\n }\n return false;\n}\n\nfunction emptyDoc () {\n return { version: 1, rounds: {} };\n}\n\nfunction loadPendingDoc (fs) {\n if (!fs || typeof fs.readFile !== 'function') return emptyDoc();\n try {\n const raw = fs.readFile(PENDING_STORE_PATH);\n if (!raw) return emptyDoc();\n const parsed = typeof raw === 'string' ? JSON.parse(raw) : JSON.parse(String(raw));\n if (!parsed || typeof parsed !== 'object') return emptyDoc();\n const rounds = parsed.rounds && typeof parsed.rounds === 'object' ? parsed.rounds : {};\n return { version: 1, rounds };\n } catch (_) {\n return emptyDoc();\n }\n}\n\nasync function persistPendingDoc (fs, doc) {\n if (!fs || typeof fs.publish !== 'function') return;\n await fs.publish(PENDING_STORE_PATH, {\n version: 1,\n rounds: doc.rounds || {}\n });\n}\n\n/**\n * @param {object} epochPayload full epoch incl. sidechain / contracts heads\n * @param {{ validators?: string[], threshold?: number }} [policy]\n * @param {{ version?: number, signatures?: object }|null} [initialWitness]\n * @returns {object} pending round\n */\nfunction createRound (epochPayload, policy = {}, initialWitness = null) {\n const pol = policy && typeof policy === 'object' ? policy : {};\n const commitmentDigest = epochCommitmentDigestHex(epochPayload);\n const validators = (pol.validators || []).map((v) => String(v).trim()).filter(Boolean);\n const threshold = Math.max(1, Number(pol.threshold) || 1);\n const round = {\n commitmentDigest,\n payload: epochPayload,\n validators,\n threshold: Math.min(threshold, validators.length || threshold),\n witness: {\n version: 1,\n signatures: Object.assign({}, (initialWitness && initialWitness.signatures) || {})\n },\n status: 'collecting',\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString()\n };\n if (roundMeetsThreshold(round)) round.status = 'ready';\n return round;\n}\n\nfunction messageBufferForPayload (payload) {\n return Buffer.from(signingStringForBeaconEpoch(payload), 'utf8');\n}\n\n/**\n * @param {object} round\n * @returns {boolean}\n */\nfunction roundMeetsThreshold (round) {\n if (!round || !round.validators || !round.validators.length) return true;\n return verifyFederationWitnessOnMessage(\n messageBufferForPayload(round.payload),\n round.witness,\n round.validators,\n round.threshold\n );\n}\n\n/**\n * Add / replace one validator signature; verify before accepting.\n * `ready` stays closed to new signatures. Callers retry durable seal via\n * `Beacon#submitFederationEpochSignature` (idempotent finalize), not here.\n * @returns {{ ok: boolean, round?: object, error?: string, sealed?: boolean }}\n */\nfunction addSignature (round, pubkey, signatureHex) {\n if (!round || round.status === 'sealed' || round.status === 'ready') {\n return { ok: false, error: 'round not open' };\n }\n const pk = String(pubkey || '').trim();\n const sig = String(signatureHex || '').trim();\n if (!pk || !sig) return { ok: false, error: 'pubkey and signature required' };\n if (!round.validators.includes(pk)) {\n return { ok: false, error: 'pubkey not in federation validators' };\n }\n const msg = messageBufferForPayload(round.payload);\n const probe = { version: 1, signatures: { [pk]: sig } };\n if (!verifyFederationWitnessOnMessage(msg, probe, [pk], 1)) {\n return { ok: false, error: 'invalid Schnorr signature' };\n }\n round.witness.signatures[pk] = sig;\n round.updatedAt = new Date().toISOString();\n const sealed = roundMeetsThreshold(round);\n if (sealed) round.status = 'ready';\n return { ok: true, round, sealed };\n}\n\nfunction encodeSignRequest (round) {\n return {\n type: FEDERATION_SIGN_REQUEST,\n version: 1,\n commitmentDigest: round.commitmentDigest,\n epoch: round.payload,\n validators: round.validators.slice(),\n threshold: round.threshold,\n createdAt: round.createdAt\n };\n}\n\nfunction encodeSignResponse (commitmentDigest, pubkey, signatureHex) {\n return {\n type: FEDERATION_SIGN_RESPONSE,\n version: 1,\n commitmentDigest: String(commitmentDigest),\n pubkey: String(pubkey),\n signature: String(signatureHex)\n };\n}\n\nfunction parseSignResponse (body) {\n if (!body || typeof body !== 'object') return { ok: false, error: 'body required' };\n if (body.type && body.type !== FEDERATION_SIGN_RESPONSE) {\n return { ok: false, error: 'not a FederationSignResponse' };\n }\n const commitmentDigest = body.commitmentDigest != null ? String(body.commitmentDigest) : '';\n const pubkey = body.pubkey != null ? String(body.pubkey) : '';\n const signature = body.signature != null ? String(body.signature) : '';\n if (!commitmentDigest || !pubkey || !signature) {\n return { ok: false, error: 'commitmentDigest, pubkey, signature required' };\n }\n return { ok: true, commitmentDigest, pubkey, signature };\n}\n\nmodule.exports = {\n BEACON_EPOCH_SIGNING_KIND,\n FEDERATION_SIGN_REQUEST,\n FEDERATION_SIGN_RESPONSE,\n PENDING_STORE_PATH,\n signingStringForBeaconEpoch,\n epochCommitmentDigestHex,\n verifyFederationWitnessOnMessage,\n loadPendingDoc,\n persistPendingDoc,\n createRound,\n roundMeetsThreshold,\n addSignature,\n encodeSignRequest,\n encodeSignResponse,\n parseSignResponse,\n messageBufferForPayload\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9iZWFjb25GZWRlcmF0aW9uU2lnbmluZy5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLG1CQUFPLENBQUMseURBQVE7QUFDL0IsWUFBWSxtQkFBTyxDQUFDLDhEQUFjO0FBQ2xDLDRCQUE0QixtQkFBTyxDQUFDLDJGQUF1QjtBQUMzRCxRQUFRLFdBQVc7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsMEJBQTBCLGtDQUFrQztBQUM1RCxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxNQUFNO0FBQ2xEOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixRQUFRO0FBQ2xDLGtCQUFrQixNQUFNO0FBQ3hCO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLDZDQUE2QztBQUMxRCxhQUFhLHVDQUF1QyxPQUFPO0FBQzNELGFBQWEsUUFBUTtBQUNyQjtBQUNBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHFEQUFxRDtBQUN2RixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLE1BQU07QUFDZjs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxrQkFBa0IsMEJBQTBCO0FBQzVDO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvZnVuY3Rpb25zL2JlYWNvbkZlZGVyYXRpb25TaWduaW5nLmpzP2I4M2QiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEJlYWNvbiBGZWRlcmF0aW9uIHNpZ25hdHVyZSBjb2xsZWN0aW9uIHJvdW5kcyArIGVwb2NoIHNpZ25pbmcgaGVscGVycy5cbiAqXG4gKiBXaGVuIGstb2YtbiB2YWxpZGF0b3JzIGFyZSBjb25maWd1cmVkLCBlcG9jaCBzZWFscyB3YWl0IHVudGlsIGEgdGhyZXNob2xkXG4gKiBTY2hub3JyIHdpdG5lc3MgaXMgYXNzZW1ibGVkIG92ZXIgYHNpZ25pbmdTdHJpbmdGb3JCZWFjb25FcG9jaChwYXlsb2FkKWAuXG4gKlxuICogVXNlZCBieSBIdWIgQmVhY29uIGFuZCBhbnkgYXBwIHRoYXQgc2VhbHMgTDEtdGllZCBlcG9jaHMgdW5kZXIgYSBGZWRlcmF0aW9uLlxuICpcbiAqIEBzZWUgZG9jcy9TVEFURUNIQUlOLm1kXG4gKiBAc2VlIGRvY3MvUFJPR1JBTS5tZFxuICovXG5cbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3QgS2V5ID0gcmVxdWlyZSgnLi4vdHlwZXMva2V5Jyk7XG5jb25zdCBmYWJyaWNDYW5vbmljYWxKc29uID0gcmVxdWlyZSgnLi9mYWJyaWNDYW5vbmljYWxKc29uJyk7XG5jb25zdCB7IGpzb25TYWZlIH0gPSBmYWJyaWNDYW5vbmljYWxKc29uO1xuXG5jb25zdCBCRUFDT05fRVBPQ0hfU0lHTklOR19LSU5EID0gJ0JlYWNvbkVwb2NoJztcbmNvbnN0IEZFREVSQVRJT05fU0lHTl9SRVFVRVNUID0gJ0ZlZGVyYXRpb25TaWduUmVxdWVzdCc7XG5jb25zdCBGRURFUkFUSU9OX1NJR05fUkVTUE9OU0UgPSAnRmVkZXJhdGlvblNpZ25SZXNwb25zZSc7XG5jb25zdCBQRU5ESU5HX1NUT1JFX1BBVEggPSAnYmVhY29uL1BFTkRJTkdfRVBPQ0hfUk9VTkRTJztcblxuLyoqXG4gKiBVVEYtOCBzdHJpbmcgdGhhdCBmZWRlcmF0aW9uIG1lbWJlcnMgc2lnbiBmb3IgYSBiZWFjb24gZXBvY2guXG4gKiBAcGFyYW0ge29iamVjdH0gZXBvY2hQYXlsb2FkXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzaWduaW5nU3RyaW5nRm9yQmVhY29uRXBvY2ggKGVwb2NoUGF5bG9hZCkge1xuICBjb25zdCBzYWZlID0ganNvblNhZmUoZXBvY2hQYXlsb2FkKTtcbiAgcmV0dXJuIGZhYnJpY0Nhbm9uaWNhbEpzb24oe1xuICAgIHZlcnNpb246IDEsXG4gICAga2luZDogQkVBQ09OX0VQT0NIX1NJR05JTkdfS0lORCxcbiAgICBlcG9jaDogc2FmZVxuICB9KTtcbn1cblxuLyoqXG4gKiBTSEEtMjU2IGhleCBkaWdlc3Qgb2Yge0BsaW5rIHNpZ25pbmdTdHJpbmdGb3JCZWFjb25FcG9jaH0uXG4gKiBAcGFyYW0ge29iamVjdH0gZXBvY2hQYXlsb2FkXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlcG9jaENvbW1pdG1lbnREaWdlc3RIZXggKGVwb2NoUGF5bG9hZCkge1xuICBjb25zdCBzID0gc2lnbmluZ1N0cmluZ0ZvckJlYWNvbkVwb2NoKGVwb2NoUGF5bG9hZCk7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKEJ1ZmZlci5mcm9tKHMsICd1dGY4JykpLmRpZ2VzdCgnaGV4Jyk7XG59XG5cbi8qKlxuICogVmVyaWZ5IHRocmVzaG9sZCBTY2hub3JyIHNpZ25hdHVyZXMgb3ZlciB0aGUgc2FtZSBtZXNzYWdlIGJ1ZmZlciB1c2VkIHdoZW4gc2lnbmluZy5cbiAqIEBwYXJhbSB7QnVmZmVyfSBtZXNzYWdlQnVmZmVyXG4gKiBAcGFyYW0ge29iamVjdH0gd2l0bmVzc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsaWRhdG9yUHVia2V5c1xuICogQHBhcmFtIHtudW1iZXJ9IFt0aHJlc2hvbGQ9MV1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB2ZXJpZnlGZWRlcmF0aW9uV2l0bmVzc09uTWVzc2FnZSAobWVzc2FnZUJ1ZmZlciwgd2l0bmVzcywgdmFsaWRhdG9yUHVia2V5cywgdGhyZXNob2xkID0gMSkge1xuICBpZiAoIXdpdG5lc3MgfHwgIXdpdG5lc3Muc2lnbmF0dXJlcyB8fCB0eXBlb2Ygd2l0bmVzcy5zaWduYXR1cmVzICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihtZXNzYWdlQnVmZmVyKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBEZWR1cGxpY2F0ZSBzbyBhIHJlcGVhdGVkIHB1YmtleSBjYW5ub3Qgc2F0aXNmeSBrLW9mLW4gd2l0aCBvbmUgc2lnbmF0dXJlLlxuICBjb25zdCBwdWJrZXlzID0gQXJyYXkuZnJvbShuZXcgU2V0KFxuICAgIChBcnJheS5pc0FycmF5KHZhbGlkYXRvclB1YmtleXMpID8gdmFsaWRhdG9yUHVia2V5cyA6IFtdKVxuICAgICAgLmZpbHRlcigocCkgPT4gdHlwZW9mIHAgPT09ICdzdHJpbmcnICYmIHApXG4gICkpO1xuICBjb25zdCB0aHIgPSBOdW1iZXIodGhyZXNob2xkKTtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHRocikgfHwgdGhyIDwgMSkgcmV0dXJuIGZhbHNlO1xuICBsZXQgdmFsaWQgPSAwO1xuICBmb3IgKGNvbnN0IHB1YmtleSBvZiBwdWJrZXlzKSB7XG4gICAgY29uc3Qgc2lnSGV4ID0gd2l0bmVzcy5zaWduYXR1cmVzW3B1YmtleV07XG4gICAgaWYgKCFzaWdIZXggfHwgdHlwZW9mIHNpZ0hleCAhPT0gJ3N0cmluZycpIGNvbnRpbnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBrID0gbmV3IEtleSh7IHB1YmtleSB9KTtcbiAgICAgIGNvbnN0IHNpZyA9IEJ1ZmZlci5mcm9tKHNpZ0hleCwgJ2hleCcpO1xuICAgICAgaWYgKGsudmVyaWZ5U2Nobm9ycihtZXNzYWdlQnVmZmVyLCBzaWcpKSB2YWxpZCsrO1xuICAgICAgaWYgKHZhbGlkID49IHRocikgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBpZ25vcmUgKi9cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBlbXB0eURvYyAoKSB7XG4gIHJldHVybiB7IHZlcnNpb246IDEsIHJvdW5kczoge30gfTtcbn1cblxuZnVuY3Rpb24gbG9hZFBlbmRpbmdEb2MgKGZzKSB7XG4gIGlmICghZnMgfHwgdHlwZW9mIGZzLnJlYWRGaWxlICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZW1wdHlEb2MoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZShQRU5ESU5HX1NUT1JFX1BBVEgpO1xuICAgIGlmICghcmF3KSByZXR1cm4gZW1wdHlEb2MoKTtcbiAgICBjb25zdCBwYXJzZWQgPSB0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmF3KSA6IEpTT04ucGFyc2UoU3RyaW5nKHJhdykpO1xuICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnKSByZXR1cm4gZW1wdHlEb2MoKTtcbiAgICBjb25zdCByb3VuZHMgPSBwYXJzZWQucm91bmRzICYmIHR5cGVvZiBwYXJzZWQucm91bmRzID09PSAnb2JqZWN0JyA/IHBhcnNlZC5yb3VuZHMgOiB7fTtcbiAgICByZXR1cm4geyB2ZXJzaW9uOiAxLCByb3VuZHMgfTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBlbXB0eURvYygpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RQZW5kaW5nRG9jIChmcywgZG9jKSB7XG4gIGlmICghZnMgfHwgdHlwZW9mIGZzLnB1Ymxpc2ggIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgYXdhaXQgZnMucHVibGlzaChQRU5ESU5HX1NUT1JFX1BBVEgsIHtcbiAgICB2ZXJzaW9uOiAxLFxuICAgIHJvdW5kczogZG9jLnJvdW5kcyB8fCB7fVxuICB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZXBvY2hQYXlsb2FkIGZ1bGwgZXBvY2ggaW5jbC4gc2lkZWNoYWluIC8gY29udHJhY3RzIGhlYWRzXG4gKiBAcGFyYW0ge3sgdmFsaWRhdG9ycz86IHN0cmluZ1tdLCB0aHJlc2hvbGQ/OiBudW1iZXIgfX0gW3BvbGljeV1cbiAqIEBwYXJhbSB7eyB2ZXJzaW9uPzogbnVtYmVyLCBzaWduYXR1cmVzPzogb2JqZWN0IH18bnVsbH0gW2luaXRpYWxXaXRuZXNzXVxuICogQHJldHVybnMge29iamVjdH0gcGVuZGluZyByb3VuZFxuICovXG5mdW5jdGlvbiBjcmVhdGVSb3VuZCAoZXBvY2hQYXlsb2FkLCBwb2xpY3kgPSB7fSwgaW5pdGlhbFdpdG5lc3MgPSBudWxsKSB7XG4gIGNvbnN0IHBvbCA9IHBvbGljeSAmJiB0eXBlb2YgcG9saWN5ID09PSAnb2JqZWN0JyA/IHBvbGljeSA6IHt9O1xuICBjb25zdCBjb21taXRtZW50RGlnZXN0ID0gZXBvY2hDb21taXRtZW50RGlnZXN0SGV4KGVwb2NoUGF5bG9hZCk7XG4gIGNvbnN0IHZhbGlkYXRvcnMgPSAocG9sLnZhbGlkYXRvcnMgfHwgW10pLm1hcCgodikgPT4gU3RyaW5nKHYpLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCB0aHJlc2hvbGQgPSBNYXRoLm1heCgxLCBOdW1iZXIocG9sLnRocmVzaG9sZCkgfHwgMSk7XG4gIGNvbnN0IHJvdW5kID0ge1xuICAgIGNvbW1pdG1lbnREaWdlc3QsXG4gICAgcGF5bG9hZDogZXBvY2hQYXlsb2FkLFxuICAgIHZhbGlkYXRvcnMsXG4gICAgdGhyZXNob2xkOiBNYXRoLm1pbih0aHJlc2hvbGQsIHZhbGlkYXRvcnMubGVuZ3RoIHx8IHRocmVzaG9sZCksXG4gICAgd2l0bmVzczoge1xuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHNpZ25hdHVyZXM6IE9iamVjdC5hc3NpZ24oe30sIChpbml0aWFsV2l0bmVzcyAmJiBpbml0aWFsV2l0bmVzcy5zaWduYXR1cmVzKSB8fCB7fSlcbiAgICB9LFxuICAgIHN0YXR1czogJ2NvbGxlY3RpbmcnLFxuICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIH07XG4gIGlmIChyb3VuZE1lZXRzVGhyZXNob2xkKHJvdW5kKSkgcm91bmQuc3RhdHVzID0gJ3JlYWR5JztcbiAgcmV0dXJuIHJvdW5kO1xufVxuXG5mdW5jdGlvbiBtZXNzYWdlQnVmZmVyRm9yUGF5bG9hZCAocGF5bG9hZCkge1xuICByZXR1cm4gQnVmZmVyLmZyb20oc2lnbmluZ1N0cmluZ0ZvckJlYWNvbkVwb2NoKHBheWxvYWQpLCAndXRmOCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb3VuZFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHJvdW5kTWVldHNUaHJlc2hvbGQgKHJvdW5kKSB7XG4gIGlmICghcm91bmQgfHwgIXJvdW5kLnZhbGlkYXRvcnMgfHwgIXJvdW5kLnZhbGlkYXRvcnMubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHZlcmlmeUZlZGVyYXRpb25XaXRuZXNzT25NZXNzYWdlKFxuICAgIG1lc3NhZ2VCdWZmZXJGb3JQYXlsb2FkKHJvdW5kLnBheWxvYWQpLFxuICAgIHJvdW5kLndpdG5lc3MsXG4gICAgcm91bmQudmFsaWRhdG9ycyxcbiAgICByb3VuZC50aHJlc2hvbGRcbiAgKTtcbn1cblxuLyoqXG4gKiBBZGQgLyByZXBsYWNlIG9uZSB2YWxpZGF0b3Igc2lnbmF0dXJlOyB2ZXJpZnkgYmVmb3JlIGFjY2VwdGluZy5cbiAqIGByZWFkeWAgc3RheXMgY2xvc2VkIHRvIG5ldyBzaWduYXR1cmVzLiBDYWxsZXJzIHJldHJ5IGR1cmFibGUgc2VhbCB2aWFcbiAqIGBCZWFjb24jc3VibWl0RmVkZXJhdGlvbkVwb2NoU2lnbmF0dXJlYCAoaWRlbXBvdGVudCBmaW5hbGl6ZSksIG5vdCBoZXJlLlxuICogQHJldHVybnMge3sgb2s6IGJvb2xlYW4sIHJvdW5kPzogb2JqZWN0LCBlcnJvcj86IHN0cmluZywgc2VhbGVkPzogYm9vbGVhbiB9fVxuICovXG5mdW5jdGlvbiBhZGRTaWduYXR1cmUgKHJvdW5kLCBwdWJrZXksIHNpZ25hdHVyZUhleCkge1xuICBpZiAoIXJvdW5kIHx8IHJvdW5kLnN0YXR1cyA9PT0gJ3NlYWxlZCcgfHwgcm91bmQuc3RhdHVzID09PSAncmVhZHknKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ3JvdW5kIG5vdCBvcGVuJyB9O1xuICB9XG4gIGNvbnN0IHBrID0gU3RyaW5nKHB1YmtleSB8fCAnJykudHJpbSgpO1xuICBjb25zdCBzaWcgPSBTdHJpbmcoc2lnbmF0dXJlSGV4IHx8ICcnKS50cmltKCk7XG4gIGlmICghcGsgfHwgIXNpZykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ3B1YmtleSBhbmQgc2lnbmF0dXJlIHJlcXVpcmVkJyB9O1xuICBpZiAoIXJvdW5kLnZhbGlkYXRvcnMuaW5jbHVkZXMocGspKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ3B1YmtleSBub3QgaW4gZmVkZXJhdGlvbiB2YWxpZGF0b3JzJyB9O1xuICB9XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2VCdWZmZXJGb3JQYXlsb2FkKHJvdW5kLnBheWxvYWQpO1xuICBjb25zdCBwcm9iZSA9IHsgdmVyc2lvbjogMSwgc2lnbmF0dXJlczogeyBbcGtdOiBzaWcgfSB9O1xuICBpZiAoIXZlcmlmeUZlZGVyYXRpb25XaXRuZXNzT25NZXNzYWdlKG1zZywgcHJvYmUsIFtwa10sIDEpKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ2ludmFsaWQgU2Nobm9yciBzaWduYXR1cmUnIH07XG4gIH1cbiAgcm91bmQud2l0bmVzcy5zaWduYXR1cmVzW3BrXSA9IHNpZztcbiAgcm91bmQudXBkYXRlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICBjb25zdCBzZWFsZWQgPSByb3VuZE1lZXRzVGhyZXNob2xkKHJvdW5kKTtcbiAgaWYgKHNlYWxlZCkgcm91bmQuc3RhdHVzID0gJ3JlYWR5JztcbiAgcmV0dXJuIHsgb2s6IHRydWUsIHJvdW5kLCBzZWFsZWQgfTtcbn1cblxuZnVuY3Rpb24gZW5jb2RlU2lnblJlcXVlc3QgKHJvdW5kKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogRkVERVJBVElPTl9TSUdOX1JFUVVFU1QsXG4gICAgdmVyc2lvbjogMSxcbiAgICBjb21taXRtZW50RGlnZXN0OiByb3VuZC5jb21taXRtZW50RGlnZXN0LFxuICAgIGVwb2NoOiByb3VuZC5wYXlsb2FkLFxuICAgIHZhbGlkYXRvcnM6IHJvdW5kLnZhbGlkYXRvcnMuc2xpY2UoKSxcbiAgICB0aHJlc2hvbGQ6IHJvdW5kLnRocmVzaG9sZCxcbiAgICBjcmVhdGVkQXQ6IHJvdW5kLmNyZWF0ZWRBdFxuICB9O1xufVxuXG5mdW5jdGlvbiBlbmNvZGVTaWduUmVzcG9uc2UgKGNvbW1pdG1lbnREaWdlc3QsIHB1YmtleSwgc2lnbmF0dXJlSGV4KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogRkVERVJBVElPTl9TSUdOX1JFU1BPTlNFLFxuICAgIHZlcnNpb246IDEsXG4gICAgY29tbWl0bWVudERpZ2VzdDogU3RyaW5nKGNvbW1pdG1lbnREaWdlc3QpLFxuICAgIHB1YmtleTogU3RyaW5nKHB1YmtleSksXG4gICAgc2lnbmF0dXJlOiBTdHJpbmcoc2lnbmF0dXJlSGV4KVxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVNpZ25SZXNwb25zZSAoYm9keSkge1xuICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkgIT09ICdvYmplY3QnKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnYm9keSByZXF1aXJlZCcgfTtcbiAgaWYgKGJvZHkudHlwZSAmJiBib2R5LnR5cGUgIT09IEZFREVSQVRJT05fU0lHTl9SRVNQT05TRSkge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdub3QgYSBGZWRlcmF0aW9uU2lnblJlc3BvbnNlJyB9O1xuICB9XG4gIGNvbnN0IGNvbW1pdG1lbnREaWdlc3QgPSBib2R5LmNvbW1pdG1lbnREaWdlc3QgIT0gbnVsbCA/IFN0cmluZyhib2R5LmNvbW1pdG1lbnREaWdlc3QpIDogJyc7XG4gIGNvbnN0IHB1YmtleSA9IGJvZHkucHVia2V5ICE9IG51bGwgPyBTdHJpbmcoYm9keS5wdWJrZXkpIDogJyc7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IGJvZHkuc2lnbmF0dXJlICE9IG51bGwgPyBTdHJpbmcoYm9keS5zaWduYXR1cmUpIDogJyc7XG4gIGlmICghY29tbWl0bWVudERpZ2VzdCB8fCAhcHVia2V5IHx8ICFzaWduYXR1cmUpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnY29tbWl0bWVudERpZ2VzdCwgcHVia2V5LCBzaWduYXR1cmUgcmVxdWlyZWQnIH07XG4gIH1cbiAgcmV0dXJuIHsgb2s6IHRydWUsIGNvbW1pdG1lbnREaWdlc3QsIHB1YmtleSwgc2lnbmF0dXJlIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCRUFDT05fRVBPQ0hfU0lHTklOR19LSU5ELFxuICBGRURFUkFUSU9OX1NJR05fUkVRVUVTVCxcbiAgRkVERVJBVElPTl9TSUdOX1JFU1BPTlNFLFxuICBQRU5ESU5HX1NUT1JFX1BBVEgsXG4gIHNpZ25pbmdTdHJpbmdGb3JCZWFjb25FcG9jaCxcbiAgZXBvY2hDb21taXRtZW50RGlnZXN0SGV4LFxuICB2ZXJpZnlGZWRlcmF0aW9uV2l0bmVzc09uTWVzc2FnZSxcbiAgbG9hZFBlbmRpbmdEb2MsXG4gIHBlcnNpc3RQZW5kaW5nRG9jLFxuICBjcmVhdGVSb3VuZCxcbiAgcm91bmRNZWV0c1RocmVzaG9sZCxcbiAgYWRkU2lnbmF0dXJlLFxuICBlbmNvZGVTaWduUmVxdWVzdCxcbiAgZW5jb2RlU2lnblJlc3BvbnNlLFxuICBwYXJzZVNpZ25SZXNwb25zZSxcbiAgbWVzc2FnZUJ1ZmZlckZvclBheWxvYWRcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/beaconFederationSigning.js\n\n}")},"./node_modules/@fabric/core/functions/bech32.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var process = __webpack_require__(/*! process/browser */ \"./node_modules/process/browser.js\");\n/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n/**\n * Bech32 (BIP 173) and Bech32m (BIP 350) — human-readable encoding for witness programs.\n *\n * **Node.js (priority):**\n * 1. **`FABRIC_NATIVE_BECH32=1`** and `fabric.node` built with `native/sipa/segwit_addr.c`\n * → Pieter Wuille’s **C** reference ([sipa/bech32](https://github.com/sipa/bech32) `ref/c/`) via {@link ./fabricNativeAccel.js}.\n * 2. Else Wuille’s **JavaScript** reference in {@link ./sipa/bech32.js}.\n * 3. Else, or when **`FABRIC_PURE_BECH32=1`**, the bundled pure-JS codec in this file.\n *\n * @module functions/bech32\n */\n\n\nconst fabricNativeAccel = __webpack_require__(/*! ./fabricNativeAccel */ \"./node_modules/@fabric/core/functions/fabricNativeAccel.js\");\nconst { u32be } = __webpack_require__(/*! ./bytes */ \"./node_modules/@fabric/core/functions/bytes.js\");\n\nconst CHARSET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\n\nconst CHARSET_REV = (() => {\n const m = new Map();\n for (let i = 0; i < CHARSET.length; i++) m.set(CHARSET.charCodeAt(i), i);\n return m;\n})();\n\nconst BECH32_CONST = 1;\nconst BECH32M_CONST = u32be(43, 200, 48, 163);\n\nfunction isNodeRuntime () {\n return typeof process !== 'undefined' && process.versions && typeof process.versions.node === 'string';\n}\n\nfunction useNativeCBech32 () {\n return fabricNativeAccel.isNativeBech32Callable();\n}\n\nfunction useSipaReferenceOnNode () {\n if (!isNodeRuntime()) return false;\n if (typeof process.env === 'object' && process.env && process.env.FABRIC_PURE_BECH32 === '1') {\n return false;\n }\n return true;\n}\n\nfunction loadSipaBech32 () {\n return __webpack_require__(/*! ./sipa/bech32 */ \"./node_modules/@fabric/core/functions/sipa/bech32.js\");\n}\n\nfunction loadSipaSegwit () {\n return __webpack_require__(/*! ./sipa/segwit_addr */ \"./node_modules/@fabric/core/functions/sipa/segwit_addr.js\");\n}\n\nfunction polymod (values) {\n const GEN = [\n u32be(59, 106, 87, 178),\n u32be(38, 80, 142, 109),\n u32be(30, 161, 25, 250),\n u32be(61, 66, 51, 221),\n u32be(42, 20, 98, 179)\n ];\n const mask25 = (1 << 25) - 1;\n let chk = 1;\n for (let i = 0; i < values.length; ++i) {\n const top = chk >> 25;\n chk = ((chk & mask25) << 5) ^ values[i];\n for (let j = 0; j < 5; ++j) {\n if ((top >> j) & 1) chk ^= GEN[j];\n }\n }\n return chk;\n}\n\nfunction hrpExpand (hrp) {\n const ret = [];\n for (let i = 0; i < hrp.length; i++) ret.push(hrp.charCodeAt(i) >> 5);\n ret.push(0);\n for (let i = 0; i < hrp.length; i++) ret.push(hrp.charCodeAt(i) & 31);\n return ret;\n}\n\nfunction createChecksum (hrp, data, constValue) {\n const values = hrpExpand(hrp).concat(data).concat([0, 0, 0, 0, 0, 0]);\n const mod = polymod(values) ^ constValue;\n const ret = [];\n for (let i = 0; i < 6; ++i) {\n ret.push((mod >> (5 * (5 - i))) & 31);\n }\n return ret;\n}\n\nfunction verifyChecksum (hrp, data) {\n return polymod(hrpExpand(hrp).concat(data));\n}\n\n/**\n * Convert bits (BIP 173 convertBits).\n * @param {number[]} data\n * @param {number} fromBits\n * @param {number} toBits\n * @param {boolean} pad\n * @returns {number[]|null}\n */\nfunction convertBits (data, fromBits, toBits, pad) {\n let acc = 0;\n let bits = 0;\n const maxv = (1 << toBits) - 1;\n const result = [];\n for (let i = 0; i < data.length; i++) {\n const value = data[i];\n if (value < 0 || (value >> fromBits) !== 0) return null;\n acc = (acc << fromBits) | value;\n bits += fromBits;\n while (bits >= toBits) {\n bits -= toBits;\n result.push((acc >> bits) & maxv);\n }\n }\n if (pad) {\n if (bits > 0) result.push((acc << (toBits - bits)) & maxv);\n } else if (bits >= fromBits || ((acc << (toBits - bits)) & maxv) !== 0) {\n return null;\n }\n return result;\n}\n\n/**\n * @param {Buffer|Uint8Array} bytes\n * @returns {number[]}\n */\nfunction toWords (bytes) {\n const u8 = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);\n const w = convertBits(Array.from(u8), 8, 5, true);\n if (!w) throw new Error('bech32.toWords: invalid data');\n return w;\n}\n\n/**\n * @param {number[]} words\n * @returns {Buffer}\n */\nfunction fromWords (words) {\n const res = convertBits(words, 5, 8, false);\n if (!res) throw new Error('bech32.fromWords: invalid padding');\n return Buffer.from(res);\n}\n\nfunction assertEncodeSpec (spec) {\n if (spec !== 'bech32' && spec !== 'bech32m') {\n throw new TypeError('bech32.encode: spec must be \"bech32\" or \"bech32m\"');\n }\n}\n\nfunction assertEncodeHrp (hrp) {\n if (typeof hrp !== 'string' || hrp.length < 1 || hrp.length > 83) {\n throw new TypeError('bech32.encode: hrp must be a non-empty string (1..83 chars)');\n }\n for (let i = 0; i < hrp.length; i++) {\n const c = hrp.charCodeAt(i);\n if (c < 33 || c > 126) {\n throw new TypeError('bech32.encode: hrp must contain printable ASCII only');\n }\n }\n}\n\nfunction assertEncodeWords (words) {\n if (!Array.isArray(words)) {\n throw new TypeError('bech32.encode: words must be an array of 5-bit integers');\n }\n for (let i = 0; i < words.length; i++) {\n const v = words[i];\n if (!Number.isInteger(v) || v < 0 || v > 31) {\n throw new TypeError(`bech32.encode: invalid word at index ${i}`);\n }\n }\n}\n\nfunction encodePure (hrp, words, spec) {\n assertEncodeHrp(hrp);\n assertEncodeWords(words);\n assertEncodeSpec(spec);\n const c = spec === 'bech32m' ? BECH32M_CONST : BECH32_CONST;\n const chk = createChecksum(hrp, words, c);\n const combined = words.concat(chk);\n let out = hrp + '1';\n for (let i = 0; i < combined.length; i++) {\n out += CHARSET[combined[i]];\n }\n return out;\n}\n\nfunction encodeSipa (hrp, words, spec) {\n const sipa = loadSipaBech32();\n const enc = spec === 'bech32m' ? sipa.encodings.BECH32M : sipa.encodings.BECH32;\n return sipa.encode(hrp, words, enc);\n}\n\n/**\n * @param {string} hrp\n * @param {number[]} words — 5-bit groups (0–31)\n * @param {'bech32'|'bech32m'} spec\n * @returns {string}\n */\nfunction encode (hrp, words, spec) {\n assertEncodeHrp(hrp);\n assertEncodeWords(words);\n assertEncodeSpec(spec);\n if (useNativeCBech32()) {\n const out = fabricNativeAccel.bech32Encode(hrp, words, spec);\n if (out != null) return out;\n }\n if (useSipaReferenceOnNode()) return encodeSipa(hrp, words, spec);\n return encodePure(hrp, words, spec);\n}\n\nfunction decodePure (str) {\n if (typeof str !== 'string' || str.length < 8) throw new Error('Invalid bech32 string');\n const lower = str.toLowerCase();\n const upper = str.toUpperCase();\n if (str !== lower && str !== upper) throw new Error('Mixed-case bech32');\n const s = lower;\n const pos = s.lastIndexOf('1');\n if (pos === -1 || pos === 0) throw new Error('Missing separator');\n const hrp = s.slice(0, pos);\n const dataPart = s.slice(pos + 1);\n if (dataPart.length < 6) throw new Error('Checksum too short');\n const data = [];\n for (let i = 0; i < dataPart.length; i++) {\n const c = dataPart.charCodeAt(i);\n const v = CHARSET_REV.get(c);\n if (v === undefined) throw new Error(`Invalid bech32 character: ${dataPart[i]}`);\n data.push(v);\n }\n const chk = verifyChecksum(hrp, data);\n if (chk === BECH32_CONST) return { hrp, words: data.slice(0, -6), spec: 'bech32' };\n if (chk === BECH32M_CONST) return { hrp, words: data.slice(0, -6), spec: 'bech32m' };\n throw new Error('Invalid bech32 checksum');\n}\n\nfunction decodeSipa (str) {\n const sipa = loadSipaBech32();\n let d = sipa.decode(str, sipa.encodings.BECH32);\n let spec = 'bech32';\n if (d === null) {\n d = sipa.decode(str, sipa.encodings.BECH32M);\n spec = 'bech32m';\n }\n if (d === null) throw new Error('Invalid bech32 checksum');\n return { hrp: d.hrp, words: d.data, spec };\n}\n\n/**\n * @param {string} str\n * @returns {{ hrp: string, words: number[], spec: 'bech32'|'bech32m' }}\n */\nfunction decode (str) {\n if (useNativeCBech32()) {\n const out = fabricNativeAccel.bech32Decode(str);\n if (out != null) return out;\n }\n if (useSipaReferenceOnNode()) return decodeSipa(str);\n return decodePure(str);\n}\n\n/**\n * Encode a native segwit address (BIP 173 / 350), e.g. `bc` + v0 + 20/32-byte program.\n * On Node, uses {@link ./sipa/segwit_addr.js}; otherwise the same rules via {@link #encode}.\n * @param {string} hrp — e.g. `'bc'`, `'tb'`, `'bcrt'`\n * @param {number} version — witness version 0–16\n * @param {Buffer|Uint8Array|number[]} program — witness program bytes\n * @returns {string|null} address or null if invalid (sipa reference behavior on Node)\n */\nfunction encodeSegwitAddress (hrp, version, program) {\n try {\n assertEncodeHrp(hrp);\n } catch {\n return null;\n }\n if (!Number.isInteger(version) || version < 0 || version > 16) return null;\n let buf;\n try {\n if (Buffer.isBuffer(program)) {\n buf = program;\n } else if (program instanceof Uint8Array) {\n buf = Buffer.from(program);\n } else if (Array.isArray(program)) {\n const arr = [];\n for (let i = 0; i < program.length; i++) {\n const v = program[i];\n if (!Number.isInteger(v) || v < 0 || v > 255) return null;\n arr.push(v);\n }\n buf = Buffer.from(arr);\n } else {\n return null;\n }\n } catch {\n return null;\n }\n if (buf.length < 2 || buf.length > 40) return null;\n if (version === 0 && buf.length !== 20 && buf.length !== 32) return null;\n if (useNativeCBech32()) {\n const out = fabricNativeAccel.segwitAddrEncode(hrp, version, buf);\n if (out == null) return null;\n return out;\n }\n if (useSipaReferenceOnNode()) {\n const out = loadSipaSegwit().encode(hrp, version, Array.from(buf));\n if (out == null) return null;\n return out;\n }\n const enc = version > 0 ? 'bech32m' : 'bech32';\n const conv = convertBits(Array.from(buf), 8, 5, true);\n if (!conv) return null;\n return encodePure(hrp, [version].concat(conv), enc);\n}\n\n/**\n * Decode a native segwit address; returns null if invalid.\n * @param {string} hrp\n * @param {string} addr\n * @returns {{ version: number, program: Buffer }|null}\n */\nfunction decodeSegwitAddress (hrp, addr) {\n if (useNativeCBech32()) {\n return fabricNativeAccel.segwitAddrDecode(hrp, addr);\n }\n if (useSipaReferenceOnNode()) {\n const d = loadSipaSegwit().decode(hrp, addr);\n if (!d) return null;\n return { version: d.version, program: Buffer.from(d.program) };\n }\n let inner;\n try {\n inner = decodePure(addr);\n } catch {\n return null;\n }\n if (inner.hrp !== hrp || inner.words.length < 1 || inner.words[0] > 16) return null;\n const witver = inner.words[0];\n const bech32m = inner.spec === 'bech32m';\n if (witver === 0 && bech32m) return null;\n if (witver !== 0 && !bech32m) return null;\n const res = convertBits(inner.words.slice(1), 5, 8, false);\n if (!res || res.length < 2 || res.length > 40) return null;\n if (witver === 0 && res.length !== 20 && res.length !== 32) return null;\n return { version: witver, program: Buffer.from(res) };\n}\n\nmodule.exports = {\n CHARSET,\n encode,\n decode,\n toWords,\n fromWords,\n convertBits,\n polymod,\n hrpExpand,\n BECH32_CONST,\n BECH32M_CONST,\n encodeSegwitAddress,\n decodeSegwitAddress\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9iZWNoMzIuanMiLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0dBQXNHLDZCQUE2QjtBQUNuSSxpREFBaUQsdUJBQXVCO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ2E7O0FBRWIsMEJBQTBCLG1CQUFPLENBQUMsdUZBQXFCO0FBQ3ZELFFBQVEsUUFBUSxFQUFFLG1CQUFPLENBQUMsK0RBQVM7O0FBRW5DOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0Isb0JBQW9CO0FBQ3RDO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLE9BQU8sb0JBQW9CLE9BQU8sb0JBQW9CLE9BQU87QUFDN0U7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLE9BQU8scUJBQXFCLE9BQU8sUUFBUSxPQUFPO0FBQy9EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyxtQkFBTyxDQUFDLDJFQUFlO0FBQ2hDOztBQUVBO0FBQ0EsU0FBUyxtQkFBTyxDQUFDLHFGQUFvQjtBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixtQkFBbUI7QUFDckM7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsT0FBTztBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGlCQUFpQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxtQkFBbUI7QUFDOUIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsTUFBTTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixrQkFBa0I7QUFDcEM7QUFDQTtBQUNBLGtFQUFrRSxFQUFFO0FBQ3BFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHFCQUFxQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixXQUFXLG9CQUFvQjtBQUMvQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBLHNFQUFzRSxZQUFZO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQyxzQ0FBc0M7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLDhCQUE4Qiw4QkFBOEIsY0FBYztBQUM1RixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsNEJBQTRCO0FBQ3ZDLGFBQWEsYUFBYTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNO0FBQ04sWUFBWSxNQUFNO0FBQ2xCLE1BQU07QUFDTjtBQUNBLHNCQUFzQixvQkFBb0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE1BQU07QUFDbEIsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUM7QUFDbkMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixlQUFlLGtDQUFrQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw2QkFBNkIsTUFBTTtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMEJBQTBCLE1BQU07QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS9mdW5jdGlvbnMvYmVjaDMyLmpzPzE2NTIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCZWNoMzIgKEJJUCAxNzMpIGFuZCBCZWNoMzJtIChCSVAgMzUwKSDigJQgaHVtYW4tcmVhZGFibGUgZW5jb2RpbmcgZm9yIHdpdG5lc3MgcHJvZ3JhbXMuXG4gKlxuICogKipOb2RlLmpzIChwcmlvcml0eSk6KipcbiAqIDEuICoqYEZBQlJJQ19OQVRJVkVfQkVDSDMyPTFgKiogYW5kIGBmYWJyaWMubm9kZWAgYnVpbHQgd2l0aCBgbmF0aXZlL3NpcGEvc2Vnd2l0X2FkZHIuY2BcbiAqICAgIOKGkiBQaWV0ZXIgV3VpbGxl4oCZcyAqKkMqKiByZWZlcmVuY2UgKFtzaXBhL2JlY2gzMl0oaHR0cHM6Ly9naXRodWIuY29tL3NpcGEvYmVjaDMyKSBgcmVmL2MvYCkgdmlhIHtAbGluayAuL2ZhYnJpY05hdGl2ZUFjY2VsLmpzfS5cbiAqIDIuIEVsc2UgV3VpbGxl4oCZcyAqKkphdmFTY3JpcHQqKiByZWZlcmVuY2UgaW4ge0BsaW5rIC4vc2lwYS9iZWNoMzIuanN9LlxuICogMy4gRWxzZSwgb3Igd2hlbiAqKmBGQUJSSUNfUFVSRV9CRUNIMzI9MWAqKiwgdGhlIGJ1bmRsZWQgcHVyZS1KUyBjb2RlYyBpbiB0aGlzIGZpbGUuXG4gKlxuICogQG1vZHVsZSBmdW5jdGlvbnMvYmVjaDMyXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgZmFicmljTmF0aXZlQWNjZWwgPSByZXF1aXJlKCcuL2ZhYnJpY05hdGl2ZUFjY2VsJyk7XG5jb25zdCB7IHUzMmJlIH0gPSByZXF1aXJlKCcuL2J5dGVzJyk7XG5cbmNvbnN0IENIQVJTRVQgPSAncXB6cnk5eDhnZjJ0dmR3MHMzam41NGtoY2U2bXVhN2wnO1xuXG5jb25zdCBDSEFSU0VUX1JFViA9ICgoKSA9PiB7XG4gIGNvbnN0IG0gPSBuZXcgTWFwKCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgQ0hBUlNFVC5sZW5ndGg7IGkrKykgbS5zZXQoQ0hBUlNFVC5jaGFyQ29kZUF0KGkpLCBpKTtcbiAgcmV0dXJuIG07XG59KSgpO1xuXG5jb25zdCBCRUNIMzJfQ09OU1QgPSAxO1xuY29uc3QgQkVDSDMyTV9DT05TVCA9IHUzMmJlKDQzLCAyMDAsIDQ4LCAxNjMpO1xuXG5mdW5jdGlvbiBpc05vZGVSdW50aW1lICgpIHtcbiAgcmV0dXJuIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGUgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiB1c2VOYXRpdmVDQmVjaDMyICgpIHtcbiAgcmV0dXJuIGZhYnJpY05hdGl2ZUFjY2VsLmlzTmF0aXZlQmVjaDMyQ2FsbGFibGUoKTtcbn1cblxuZnVuY3Rpb24gdXNlU2lwYVJlZmVyZW5jZU9uTm9kZSAoKSB7XG4gIGlmICghaXNOb2RlUnVudGltZSgpKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgcHJvY2Vzcy5lbnYgPT09ICdvYmplY3QnICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LkZBQlJJQ19QVVJFX0JFQ0gzMiA9PT0gJzEnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBsb2FkU2lwYUJlY2gzMiAoKSB7XG4gIHJldHVybiByZXF1aXJlKCcuL3NpcGEvYmVjaDMyJyk7XG59XG5cbmZ1bmN0aW9uIGxvYWRTaXBhU2Vnd2l0ICgpIHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4vc2lwYS9zZWd3aXRfYWRkcicpO1xufVxuXG5mdW5jdGlvbiBwb2x5bW9kICh2YWx1ZXMpIHtcbiAgY29uc3QgR0VOID0gW1xuICAgIHUzMmJlKDU5LCAxMDYsIDg3LCAxNzgpLFxuICAgIHUzMmJlKDM4LCA4MCwgMTQyLCAxMDkpLFxuICAgIHUzMmJlKDMwLCAxNjEsIDI1LCAyNTApLFxuICAgIHUzMmJlKDYxLCA2NiwgNTEsIDIyMSksXG4gICAgdTMyYmUoNDIsIDIwLCA5OCwgMTc5KVxuICBdO1xuICBjb25zdCBtYXNrMjUgPSAoMSA8PCAyNSkgLSAxO1xuICBsZXQgY2hrID0gMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCB0b3AgPSBjaGsgPj4gMjU7XG4gICAgY2hrID0gKChjaGsgJiBtYXNrMjUpIDw8IDUpIF4gdmFsdWVzW2ldO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgNTsgKytqKSB7XG4gICAgICBpZiAoKHRvcCA+PiBqKSAmIDEpIGNoayBePSBHRU5bal07XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGs7XG59XG5cbmZ1bmN0aW9uIGhycEV4cGFuZCAoaHJwKSB7XG4gIGNvbnN0IHJldCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGhycC5sZW5ndGg7IGkrKykgcmV0LnB1c2goaHJwLmNoYXJDb2RlQXQoaSkgPj4gNSk7XG4gIHJldC5wdXNoKDApO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGhycC5sZW5ndGg7IGkrKykgcmV0LnB1c2goaHJwLmNoYXJDb2RlQXQoaSkgJiAzMSk7XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNoZWNrc3VtIChocnAsIGRhdGEsIGNvbnN0VmFsdWUpIHtcbiAgY29uc3QgdmFsdWVzID0gaHJwRXhwYW5kKGhycCkuY29uY2F0KGRhdGEpLmNvbmNhdChbMCwgMCwgMCwgMCwgMCwgMF0pO1xuICBjb25zdCBtb2QgPSBwb2x5bW9kKHZhbHVlcykgXiBjb25zdFZhbHVlO1xuICBjb25zdCByZXQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyArK2kpIHtcbiAgICByZXQucHVzaCgobW9kID4+ICg1ICogKDUgLSBpKSkpICYgMzEpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUNoZWNrc3VtIChocnAsIGRhdGEpIHtcbiAgcmV0dXJuIHBvbHltb2QoaHJwRXhwYW5kKGhycCkuY29uY2F0KGRhdGEpKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGJpdHMgKEJJUCAxNzMgY29udmVydEJpdHMpLlxuICogQHBhcmFtIHtudW1iZXJbXX0gZGF0YVxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21CaXRzXG4gKiBAcGFyYW0ge251bWJlcn0gdG9CaXRzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHBhZFxuICogQHJldHVybnMge251bWJlcltdfG51bGx9XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRCaXRzIChkYXRhLCBmcm9tQml0cywgdG9CaXRzLCBwYWQpIHtcbiAgbGV0IGFjYyA9IDA7XG4gIGxldCBiaXRzID0gMDtcbiAgY29uc3QgbWF4diA9ICgxIDw8IHRvQml0cykgLSAxO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdmFsdWUgPSBkYXRhW2ldO1xuICAgIGlmICh2YWx1ZSA8IDAgfHwgKHZhbHVlID4+IGZyb21CaXRzKSAhPT0gMCkgcmV0dXJuIG51bGw7XG4gICAgYWNjID0gKGFjYyA8PCBmcm9tQml0cykgfCB2YWx1ZTtcbiAgICBiaXRzICs9IGZyb21CaXRzO1xuICAgIHdoaWxlIChiaXRzID49IHRvQml0cykge1xuICAgICAgYml0cyAtPSB0b0JpdHM7XG4gICAgICByZXN1bHQucHVzaCgoYWNjID4+IGJpdHMpICYgbWF4dik7XG4gICAgfVxuICB9XG4gIGlmIChwYWQpIHtcbiAgICBpZiAoYml0cyA+IDApIHJlc3VsdC5wdXNoKChhY2MgPDwgKHRvQml0cyAtIGJpdHMpKSAmIG1heHYpO1xuICB9IGVsc2UgaWYgKGJpdHMgPj0gZnJvbUJpdHMgfHwgKChhY2MgPDwgKHRvQml0cyAtIGJpdHMpKSAmIG1heHYpICE9PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcnxVaW50OEFycmF5fSBieXRlc1xuICogQHJldHVybnMge251bWJlcltdfVxuICovXG5mdW5jdGlvbiB0b1dvcmRzIChieXRlcykge1xuICBjb25zdCB1OCA9IGJ5dGVzIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGJ5dGVzIDogbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpO1xuICBjb25zdCB3ID0gY29udmVydEJpdHMoQXJyYXkuZnJvbSh1OCksIDgsIDUsIHRydWUpO1xuICBpZiAoIXcpIHRocm93IG5ldyBFcnJvcignYmVjaDMyLnRvV29yZHM6IGludmFsaWQgZGF0YScpO1xuICByZXR1cm4gdztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcltdfSB3b3Jkc1xuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZnVuY3Rpb24gZnJvbVdvcmRzICh3b3Jkcykge1xuICBjb25zdCByZXMgPSBjb252ZXJ0Qml0cyh3b3JkcywgNSwgOCwgZmFsc2UpO1xuICBpZiAoIXJlcykgdGhyb3cgbmV3IEVycm9yKCdiZWNoMzIuZnJvbVdvcmRzOiBpbnZhbGlkIHBhZGRpbmcnKTtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlcyk7XG59XG5cbmZ1bmN0aW9uIGFzc2VydEVuY29kZVNwZWMgKHNwZWMpIHtcbiAgaWYgKHNwZWMgIT09ICdiZWNoMzInICYmIHNwZWMgIT09ICdiZWNoMzJtJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2JlY2gzMi5lbmNvZGU6IHNwZWMgbXVzdCBiZSBcImJlY2gzMlwiIG9yIFwiYmVjaDMybVwiJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0RW5jb2RlSHJwIChocnApIHtcbiAgaWYgKHR5cGVvZiBocnAgIT09ICdzdHJpbmcnIHx8IGhycC5sZW5ndGggPCAxIHx8IGhycC5sZW5ndGggPiA4Mykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2JlY2gzMi5lbmNvZGU6IGhycCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyAoMS4uODMgY2hhcnMpJyk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBocnAubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjID0gaHJwLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMgPCAzMyB8fCBjID4gMTI2KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdiZWNoMzIuZW5jb2RlOiBocnAgbXVzdCBjb250YWluIHByaW50YWJsZSBBU0NJSSBvbmx5Jyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydEVuY29kZVdvcmRzICh3b3Jkcykge1xuICBpZiAoIUFycmF5LmlzQXJyYXkod29yZHMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYmVjaDMyLmVuY29kZTogd29yZHMgbXVzdCBiZSBhbiBhcnJheSBvZiA1LWJpdCBpbnRlZ2VycycpO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB2ID0gd29yZHNbaV07XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHYpIHx8IHYgPCAwIHx8IHYgPiAzMSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgYmVjaDMyLmVuY29kZTogaW52YWxpZCB3b3JkIGF0IGluZGV4ICR7aX1gKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlUHVyZSAoaHJwLCB3b3Jkcywgc3BlYykge1xuICBhc3NlcnRFbmNvZGVIcnAoaHJwKTtcbiAgYXNzZXJ0RW5jb2RlV29yZHMod29yZHMpO1xuICBhc3NlcnRFbmNvZGVTcGVjKHNwZWMpO1xuICBjb25zdCBjID0gc3BlYyA9PT0gJ2JlY2gzMm0nID8gQkVDSDMyTV9DT05TVCA6IEJFQ0gzMl9DT05TVDtcbiAgY29uc3QgY2hrID0gY3JlYXRlQ2hlY2tzdW0oaHJwLCB3b3JkcywgYyk7XG4gIGNvbnN0IGNvbWJpbmVkID0gd29yZHMuY29uY2F0KGNoayk7XG4gIGxldCBvdXQgPSBocnAgKyAnMSc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29tYmluZWQubGVuZ3RoOyBpKyspIHtcbiAgICBvdXQgKz0gQ0hBUlNFVFtjb21iaW5lZFtpXV07XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gZW5jb2RlU2lwYSAoaHJwLCB3b3Jkcywgc3BlYykge1xuICBjb25zdCBzaXBhID0gbG9hZFNpcGFCZWNoMzIoKTtcbiAgY29uc3QgZW5jID0gc3BlYyA9PT0gJ2JlY2gzMm0nID8gc2lwYS5lbmNvZGluZ3MuQkVDSDMyTSA6IHNpcGEuZW5jb2RpbmdzLkJFQ0gzMjtcbiAgcmV0dXJuIHNpcGEuZW5jb2RlKGhycCwgd29yZHMsIGVuYyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGhycFxuICogQHBhcmFtIHtudW1iZXJbXX0gd29yZHMg4oCUIDUtYml0IGdyb3VwcyAoMOKAkzMxKVxuICogQHBhcmFtIHsnYmVjaDMyJ3wnYmVjaDMybSd9IHNwZWNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZSAoaHJwLCB3b3Jkcywgc3BlYykge1xuICBhc3NlcnRFbmNvZGVIcnAoaHJwKTtcbiAgYXNzZXJ0RW5jb2RlV29yZHMod29yZHMpO1xuICBhc3NlcnRFbmNvZGVTcGVjKHNwZWMpO1xuICBpZiAodXNlTmF0aXZlQ0JlY2gzMigpKSB7XG4gICAgY29uc3Qgb3V0ID0gZmFicmljTmF0aXZlQWNjZWwuYmVjaDMyRW5jb2RlKGhycCwgd29yZHMsIHNwZWMpO1xuICAgIGlmIChvdXQgIT0gbnVsbCkgcmV0dXJuIG91dDtcbiAgfVxuICBpZiAodXNlU2lwYVJlZmVyZW5jZU9uTm9kZSgpKSByZXR1cm4gZW5jb2RlU2lwYShocnAsIHdvcmRzLCBzcGVjKTtcbiAgcmV0dXJuIGVuY29kZVB1cmUoaHJwLCB3b3Jkcywgc3BlYyk7XG59XG5cbmZ1bmN0aW9uIGRlY29kZVB1cmUgKHN0cikge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycgfHwgc3RyLmxlbmd0aCA8IDgpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiZWNoMzIgc3RyaW5nJyk7XG4gIGNvbnN0IGxvd2VyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHVwcGVyID0gc3RyLnRvVXBwZXJDYXNlKCk7XG4gIGlmIChzdHIgIT09IGxvd2VyICYmIHN0ciAhPT0gdXBwZXIpIHRocm93IG5ldyBFcnJvcignTWl4ZWQtY2FzZSBiZWNoMzInKTtcbiAgY29uc3QgcyA9IGxvd2VyO1xuICBjb25zdCBwb3MgPSBzLmxhc3RJbmRleE9mKCcxJyk7XG4gIGlmIChwb3MgPT09IC0xIHx8IHBvcyA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHNlcGFyYXRvcicpO1xuICBjb25zdCBocnAgPSBzLnNsaWNlKDAsIHBvcyk7XG4gIGNvbnN0IGRhdGFQYXJ0ID0gcy5zbGljZShwb3MgKyAxKTtcbiAgaWYgKGRhdGFQYXJ0Lmxlbmd0aCA8IDYpIHRocm93IG5ldyBFcnJvcignQ2hlY2tzdW0gdG9vIHNob3J0Jyk7XG4gIGNvbnN0IGRhdGEgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhUGFydC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGMgPSBkYXRhUGFydC5jaGFyQ29kZUF0KGkpO1xuICAgIGNvbnN0IHYgPSBDSEFSU0VUX1JFVi5nZXQoYyk7XG4gICAgaWYgKHYgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJlY2gzMiBjaGFyYWN0ZXI6ICR7ZGF0YVBhcnRbaV19YCk7XG4gICAgZGF0YS5wdXNoKHYpO1xuICB9XG4gIGNvbnN0IGNoayA9IHZlcmlmeUNoZWNrc3VtKGhycCwgZGF0YSk7XG4gIGlmIChjaGsgPT09IEJFQ0gzMl9DT05TVCkgcmV0dXJuIHsgaHJwLCB3b3JkczogZGF0YS5zbGljZSgwLCAtNiksIHNwZWM6ICdiZWNoMzInIH07XG4gIGlmIChjaGsgPT09IEJFQ0gzMk1fQ09OU1QpIHJldHVybiB7IGhycCwgd29yZHM6IGRhdGEuc2xpY2UoMCwgLTYpLCBzcGVjOiAnYmVjaDMybScgfTtcbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGJlY2gzMiBjaGVja3N1bScpO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVTaXBhIChzdHIpIHtcbiAgY29uc3Qgc2lwYSA9IGxvYWRTaXBhQmVjaDMyKCk7XG4gIGxldCBkID0gc2lwYS5kZWNvZGUoc3RyLCBzaXBhLmVuY29kaW5ncy5CRUNIMzIpO1xuICBsZXQgc3BlYyA9ICdiZWNoMzInO1xuICBpZiAoZCA9PT0gbnVsbCkge1xuICAgIGQgPSBzaXBhLmRlY29kZShzdHIsIHNpcGEuZW5jb2RpbmdzLkJFQ0gzMk0pO1xuICAgIHNwZWMgPSAnYmVjaDMybSc7XG4gIH1cbiAgaWYgKGQgPT09IG51bGwpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiZWNoMzIgY2hlY2tzdW0nKTtcbiAgcmV0dXJuIHsgaHJwOiBkLmhycCwgd29yZHM6IGQuZGF0YSwgc3BlYyB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHt7IGhycDogc3RyaW5nLCB3b3JkczogbnVtYmVyW10sIHNwZWM6ICdiZWNoMzInfCdiZWNoMzJtJyB9fVxuICovXG5mdW5jdGlvbiBkZWNvZGUgKHN0cikge1xuICBpZiAodXNlTmF0aXZlQ0JlY2gzMigpKSB7XG4gICAgY29uc3Qgb3V0ID0gZmFicmljTmF0aXZlQWNjZWwuYmVjaDMyRGVjb2RlKHN0cik7XG4gICAgaWYgKG91dCAhPSBudWxsKSByZXR1cm4gb3V0O1xuICB9XG4gIGlmICh1c2VTaXBhUmVmZXJlbmNlT25Ob2RlKCkpIHJldHVybiBkZWNvZGVTaXBhKHN0cik7XG4gIHJldHVybiBkZWNvZGVQdXJlKHN0cik7XG59XG5cbi8qKlxuICogRW5jb2RlIGEgbmF0aXZlIHNlZ3dpdCBhZGRyZXNzIChCSVAgMTczIC8gMzUwKSwgZS5nLiBgYmNgICsgdjAgKyAyMC8zMi1ieXRlIHByb2dyYW0uXG4gKiBPbiBOb2RlLCB1c2VzIHtAbGluayAuL3NpcGEvc2Vnd2l0X2FkZHIuanN9OyBvdGhlcndpc2UgdGhlIHNhbWUgcnVsZXMgdmlhIHtAbGluayAjZW5jb2RlfS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBocnAg4oCUIGUuZy4gYCdiYydgLCBgJ3RiJ2AsIGAnYmNydCdgXG4gKiBAcGFyYW0ge251bWJlcn0gdmVyc2lvbiDigJQgd2l0bmVzcyB2ZXJzaW9uIDDigJMxNlxuICogQHBhcmFtIHtCdWZmZXJ8VWludDhBcnJheXxudW1iZXJbXX0gcHJvZ3JhbSDigJQgd2l0bmVzcyBwcm9ncmFtIGJ5dGVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGFkZHJlc3Mgb3IgbnVsbCBpZiBpbnZhbGlkIChzaXBhIHJlZmVyZW5jZSBiZWhhdmlvciBvbiBOb2RlKVxuICovXG5mdW5jdGlvbiBlbmNvZGVTZWd3aXRBZGRyZXNzIChocnAsIHZlcnNpb24sIHByb2dyYW0pIHtcbiAgdHJ5IHtcbiAgICBhc3NlcnRFbmNvZGVIcnAoaHJwKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZlcnNpb24pIHx8IHZlcnNpb24gPCAwIHx8IHZlcnNpb24gPiAxNikgcmV0dXJuIG51bGw7XG4gIGxldCBidWY7XG4gIHRyeSB7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihwcm9ncmFtKSkge1xuICAgICAgYnVmID0gcHJvZ3JhbTtcbiAgICB9IGVsc2UgaWYgKHByb2dyYW0gaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICBidWYgPSBCdWZmZXIuZnJvbShwcm9ncmFtKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvZ3JhbSkpIHtcbiAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9ncmFtLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHYgPSBwcm9ncmFtW2ldO1xuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodikgfHwgdiA8IDAgfHwgdiA+IDI1NSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGFyci5wdXNoKHYpO1xuICAgICAgfVxuICAgICAgYnVmID0gQnVmZmVyLmZyb20oYXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoYnVmLmxlbmd0aCA8IDIgfHwgYnVmLmxlbmd0aCA+IDQwKSByZXR1cm4gbnVsbDtcbiAgaWYgKHZlcnNpb24gPT09IDAgJiYgYnVmLmxlbmd0aCAhPT0gMjAgJiYgYnVmLmxlbmd0aCAhPT0gMzIpIHJldHVybiBudWxsO1xuICBpZiAodXNlTmF0aXZlQ0JlY2gzMigpKSB7XG4gICAgY29uc3Qgb3V0ID0gZmFicmljTmF0aXZlQWNjZWwuc2Vnd2l0QWRkckVuY29kZShocnAsIHZlcnNpb24sIGJ1Zik7XG4gICAgaWYgKG91dCA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGlmICh1c2VTaXBhUmVmZXJlbmNlT25Ob2RlKCkpIHtcbiAgICBjb25zdCBvdXQgPSBsb2FkU2lwYVNlZ3dpdCgpLmVuY29kZShocnAsIHZlcnNpb24sIEFycmF5LmZyb20oYnVmKSk7XG4gICAgaWYgKG91dCA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGNvbnN0IGVuYyA9IHZlcnNpb24gPiAwID8gJ2JlY2gzMm0nIDogJ2JlY2gzMic7XG4gIGNvbnN0IGNvbnYgPSBjb252ZXJ0Qml0cyhBcnJheS5mcm9tKGJ1ZiksIDgsIDUsIHRydWUpO1xuICBpZiAoIWNvbnYpIHJldHVybiBudWxsO1xuICByZXR1cm4gZW5jb2RlUHVyZShocnAsIFt2ZXJzaW9uXS5jb25jYXQoY29udiksIGVuYyk7XG59XG5cbi8qKlxuICogRGVjb2RlIGEgbmF0aXZlIHNlZ3dpdCBhZGRyZXNzOyByZXR1cm5zIG51bGwgaWYgaW52YWxpZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBocnBcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyXG4gKiBAcmV0dXJucyB7eyB2ZXJzaW9uOiBudW1iZXIsIHByb2dyYW06IEJ1ZmZlciB9fG51bGx9XG4gKi9cbmZ1bmN0aW9uIGRlY29kZVNlZ3dpdEFkZHJlc3MgKGhycCwgYWRkcikge1xuICBpZiAodXNlTmF0aXZlQ0JlY2gzMigpKSB7XG4gICAgcmV0dXJuIGZhYnJpY05hdGl2ZUFjY2VsLnNlZ3dpdEFkZHJEZWNvZGUoaHJwLCBhZGRyKTtcbiAgfVxuICBpZiAodXNlU2lwYVJlZmVyZW5jZU9uTm9kZSgpKSB7XG4gICAgY29uc3QgZCA9IGxvYWRTaXBhU2Vnd2l0KCkuZGVjb2RlKGhycCwgYWRkcik7XG4gICAgaWYgKCFkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4geyB2ZXJzaW9uOiBkLnZlcnNpb24sIHByb2dyYW06IEJ1ZmZlci5mcm9tKGQucHJvZ3JhbSkgfTtcbiAgfVxuICBsZXQgaW5uZXI7XG4gIHRyeSB7XG4gICAgaW5uZXIgPSBkZWNvZGVQdXJlKGFkZHIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoaW5uZXIuaHJwICE9PSBocnAgfHwgaW5uZXIud29yZHMubGVuZ3RoIDwgMSB8fCBpbm5lci53b3Jkc1swXSA+IDE2KSByZXR1cm4gbnVsbDtcbiAgY29uc3Qgd2l0dmVyID0gaW5uZXIud29yZHNbMF07XG4gIGNvbnN0IGJlY2gzMm0gPSBpbm5lci5zcGVjID09PSAnYmVjaDMybSc7XG4gIGlmICh3aXR2ZXIgPT09IDAgJiYgYmVjaDMybSkgcmV0dXJuIG51bGw7XG4gIGlmICh3aXR2ZXIgIT09IDAgJiYgIWJlY2gzMm0pIHJldHVybiBudWxsO1xuICBjb25zdCByZXMgPSBjb252ZXJ0Qml0cyhpbm5lci53b3Jkcy5zbGljZSgxKSwgNSwgOCwgZmFsc2UpO1xuICBpZiAoIXJlcyB8fCByZXMubGVuZ3RoIDwgMiB8fCByZXMubGVuZ3RoID4gNDApIHJldHVybiBudWxsO1xuICBpZiAod2l0dmVyID09PSAwICYmIHJlcy5sZW5ndGggIT09IDIwICYmIHJlcy5sZW5ndGggIT09IDMyKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHsgdmVyc2lvbjogd2l0dmVyLCBwcm9ncmFtOiBCdWZmZXIuZnJvbShyZXMpIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDSEFSU0VULFxuICBlbmNvZGUsXG4gIGRlY29kZSxcbiAgdG9Xb3JkcyxcbiAgZnJvbVdvcmRzLFxuICBjb252ZXJ0Qml0cyxcbiAgcG9seW1vZCxcbiAgaHJwRXhwYW5kLFxuICBCRUNIMzJfQ09OU1QsXG4gIEJFQ0gzMk1fQ09OU1QsXG4gIGVuY29kZVNlZ3dpdEFkZHJlc3MsXG4gIGRlY29kZVNlZ3dpdEFkZHJlc3Ncbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/bech32.js\n\n}")},"./node_modules/@fabric/core/functions/bip32.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n/**\n * BIP-32 hierarchical deterministic wallets (secp256k1) — extended keys, derivation, base58.\n *\n * Uses @noble/curves and @noble/hashes; optional `ecc` in constructor is accepted for API\n * compatibility with the former `bip32` package and is not used for math.\n *\n * @module functions/bip32\n */\n\n\nconst { hmac } = __webpack_require__(/*! @noble/hashes/hmac.js */ \"./node_modules/@noble/hashes/hmac.js\");\nconst { sha256 } = __webpack_require__(/*! @noble/hashes/sha2.js */ \"./node_modules/@noble/hashes/sha2.js\");\nconst { sha512 } = __webpack_require__(/*! @noble/hashes/sha2.js */ \"./node_modules/@noble/hashes/sha2.js\");\nconst { ripemd160 } = __webpack_require__(/*! @noble/hashes/legacy.js */ \"./node_modules/@noble/hashes/legacy.js\");\nconst { secp256k1 } = __webpack_require__(/*! @noble/curves/secp256k1.js */ \"./node_modules/@noble/curves/secp256k1.js\");\nconst { encodeCheck, decodeCheck } = __webpack_require__(/*! ./base58 */ \"./node_modules/@fabric/core/functions/base58.js\");\nconst { toUint8Strict, u32be } = __webpack_require__(/*! ./bytes */ \"./node_modules/@fabric/core/functions/bytes.js\");\n\nconst Point = secp256k1.Point;\nconst ZERO = Point.ZERO;\nconst N = Point.Fn.ORDER;\n\n/** BIP32 hardened derivation bit (2^31) without a bare 2147483648 literal. */\nconst HARDENED_OFFSET = (1 << 31) >>> 0;\nconst MASTER_SECRET = new Uint8Array(Buffer.from('Bitcoin seed', 'utf8'));\n\nfunction hash160 (buf) {\n return ripemd160(sha256(toUint8Strict(buf)));\n}\n\nfunction bufToBn (b) {\n let x = 0n;\n for (let i = 0; i < b.length; i++) x = (x << 8n) | BigInt(b[i]);\n return x;\n}\n\nfunction bnToBuf32 (n) {\n if (n <= 0n || n >= N) throw new Error('Invalid scalar');\n let hex = n.toString(16);\n if (hex.length > 64) throw new Error('scalar overflow');\n hex = hex.padStart(64, '0');\n return Buffer.from(hex, 'hex');\n}\n\nfunction ser32 (i) {\n const b = Buffer.allocUnsafe(4);\n b.writeUInt32BE(i >>> 0, 0);\n return b;\n}\n\nfunction fingerprintFromPub (pub) {\n return Buffer.from(hash160(pub)).readUInt32BE(0);\n}\n\nconst DEFAULT_NETWORK = {\n messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n bech32: 'bc',\n bip32: { public: u32be(4, 136, 178, 30), private: u32be(4, 136, 173, 228) },\n pubKeyHash: 0x00,\n scriptHash: 0x05,\n wif: 0x80\n};\n\nfunction networkFromVersions (version) {\n const testnetBip32Pub = u32be(4, 53, 135, 207);\n const testnetBip32Priv = u32be(4, 53, 131, 148);\n const pairs = [\n [u32be(4, 136, 178, 30), u32be(4, 136, 173, 228), DEFAULT_NETWORK],\n [testnetBip32Pub, testnetBip32Priv, {\n messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n bech32: 'tb',\n bip32: { public: testnetBip32Pub, private: testnetBip32Priv },\n pubKeyHash: 0x6f,\n scriptHash: 0xc4,\n wif: 0xef\n }]\n ];\n for (const [pubV, privV, net] of pairs) {\n if (version === pubV || version === privV) return net;\n }\n return DEFAULT_NETWORK;\n}\n\nclass HDNode {\n constructor (network, depth, parentFingerprint, index, chainCode, privateKey, publicKey) {\n this.network = network;\n this.depth = depth;\n this.parentFingerprint = parentFingerprint;\n this.index = index;\n this.chainCode = chainCode;\n this.privateKey = privateKey;\n this.publicKey = publicKey;\n this.fingerprint = fingerprintFromPub(this.publicKey);\n }\n\n get isNeutered () {\n return this.privateKey == null;\n }\n\n neutered () {\n return new HDNode(\n this.network,\n this.depth,\n this.parentFingerprint,\n this.index,\n Buffer.from(this.chainCode),\n null,\n Buffer.from(this.publicKey)\n );\n }\n\n derive (index) {\n let i;\n if (typeof index === 'number') {\n i = index;\n } else if (typeof index === 'bigint') {\n if (index < 0n || index > 0xffffffffn) throw new Error('Invalid index');\n i = Number(index);\n } else if (typeof index === 'string') {\n if (!/^\\d+$/.test(index)) throw new Error('Invalid index');\n i = Number(index);\n } else {\n throw new Error('Invalid index');\n }\n if (!Number.isInteger(i) || i < 0 || i > (2 ** 32) - 1) throw new Error('Invalid index');\n const hardened = i >= HARDENED_OFFSET;\n\n if (this.privateKey) {\n let data;\n if (hardened) {\n data = Buffer.concat([Buffer.from([0]), this.privateKey, ser32(i)]);\n } else {\n data = Buffer.concat([this.publicKey, ser32(i)]);\n }\n const I = Buffer.from(hmac(sha512, toUint8Strict(this.chainCode), toUint8Strict(data)));\n const IL = I.subarray(0, 32);\n const IR = I.subarray(32, 64);\n const parseIL = bufToBn(IL);\n if (parseIL >= N) throw new Error('Invalid derivation (IL >= n)');\n const kPar = bufToBn(this.privateKey);\n const ki = (parseIL + kPar) % N;\n if (ki === 0n) throw new Error('Invalid derivation (ki = 0)');\n const childPriv = bnToBuf32(ki);\n const childPub = Buffer.from(secp256k1.getPublicKey(toUint8Strict(childPriv), true));\n return new HDNode(\n this.network,\n this.depth + 1,\n this.fingerprint,\n i,\n IR,\n childPriv,\n childPub\n );\n }\n\n if (hardened) throw new TypeError('Cannot derive hardened child from public parent');\n const data = Buffer.concat([this.publicKey, ser32(i)]);\n const I = Buffer.from(hmac(sha512, toUint8Strict(this.chainCode), toUint8Strict(data)));\n const IL = I.subarray(0, 32);\n const IR = I.subarray(32, 64);\n const parseIL = bufToBn(IL);\n if (parseIL >= N) throw new Error('Invalid derivation (IL >= n)');\n const P = Point.fromBytes(toUint8Strict(this.publicKey));\n const T = Point.BASE.multiply(parseIL);\n const K = P.add(T);\n if (K.equals(ZERO)) throw new Error('Invalid derivation (point at infinity)');\n const childPub = Buffer.from(K.toBytes(true));\n return new HDNode(\n this.network,\n this.depth + 1,\n this.fingerprint,\n i,\n IR,\n null,\n childPub\n );\n }\n\n derivePath (path) {\n const parts = path.split('/');\n if (parts[0] !== 'm') throw new Error(`Invalid path: ${path}`);\n if (parts.length - 1 > 255) {\n throw new Error('Invalid path: BIP-32 depth must not exceed 255');\n }\n if (this.depth !== 0) {\n throw new Error(`Invalid path: absolute path \"${path}\" must be derived from the master (depth 0) node`);\n }\n let node = this;\n for (let p = 1; p < parts.length; p++) {\n let seg = parts[p];\n if (!seg) throw new Error(`Invalid path segment: empty in ${path}`);\n const hardened = seg.endsWith(\"'\") || seg.endsWith('h');\n if (hardened) seg = seg.slice(0, -1);\n if (!/^\\d+$/.test(seg)) throw new Error(`Invalid path segment: ${parts[p]}`);\n const index = Number(seg);\n if (!Number.isInteger(index) || index < 0 || index > (2 ** 31) - 1) {\n throw new Error(`Invalid path segment: ${parts[p]}`);\n }\n node = node.derive(hardened ? index + HARDENED_OFFSET : index);\n }\n return node;\n }\n\n toBase58 () {\n const version = this.isNeutered ? this.network.bip32.public : this.network.bip32.private;\n const b = Buffer.allocUnsafe(78);\n b.writeUInt32BE(version >>> 0, 0);\n b.writeUInt8(this.depth, 4);\n b.writeUInt32BE(this.parentFingerprint >>> 0, 5);\n b.writeUInt32BE(this.index >>> 0, 9);\n Buffer.from(this.chainCode).copy(b, 13);\n if (this.privateKey) {\n b.writeUInt8(0, 45);\n Buffer.from(this.privateKey).copy(b, 46);\n } else {\n Buffer.from(this.publicKey).copy(b, 45);\n }\n return encodeCheck(b);\n }\n}\n\nfunction fromSeed (seed, network = DEFAULT_NETWORK) {\n if (seed == null) throw new Error('Seed is required');\n let s;\n if (Buffer.isBuffer(seed)) s = seed;\n else if (seed instanceof Uint8Array) s = Buffer.from(seed);\n else throw new Error('Seed must be a Buffer or Uint8Array');\n if (s.length < 16 || s.length > 64) throw new Error('Seed must be 16–64 bytes');\n const I = Buffer.from(hmac(sha512, MASTER_SECRET, toUint8Strict(s)));\n const IL = I.subarray(0, 32);\n const IR = I.subarray(32, 64);\n const parseIL = bufToBn(IL);\n if (parseIL === 0n || parseIL >= N) throw new Error('Invalid master seed');\n const privateKey = IL;\n const publicKey = Buffer.from(secp256k1.getPublicKey(toUint8Strict(privateKey), true));\n return new HDNode(network, 0, 0, 0, IR, privateKey, publicKey);\n}\n\nfunction fromBase58 (str) {\n const raw = decodeCheck(str);\n if (raw.length !== 78) throw new Error('Invalid extended key length');\n const version = raw.readUInt32BE(0);\n const net = networkFromVersions(version);\n const depth = raw[4];\n const parentFingerprint = raw.readUInt32BE(5);\n const index = raw.readUInt32BE(9);\n const chainCode = raw.subarray(13, 45);\n const keyData = raw.subarray(45, 78);\n\n if (depth === 0) {\n if (parentFingerprint !== 0) throw new Error('Invalid master key: parent fingerprint must be zero');\n if (index !== 0) throw new Error('Invalid master key: child number must be zero');\n }\n\n if (version === net.bip32.private) {\n if (keyData[0] !== 0) throw new Error('Invalid private key prefix');\n const privateKey = keyData.subarray(1, 33);\n const publicKey = Buffer.from(secp256k1.getPublicKey(toUint8Strict(privateKey), true));\n return new HDNode(net, depth, parentFingerprint, index, chainCode, privateKey, publicKey);\n }\n if (version === net.bip32.public) {\n if (keyData[0] !== 2 && keyData[0] !== 3) {\n throw new Error('Invalid public key prefix');\n }\n let publicKey;\n try {\n publicKey = Buffer.from(Point.fromBytes(toUint8Strict(keyData)).toBytes(true));\n } catch {\n throw new Error('Invalid public key');\n }\n return new HDNode(net, depth, parentFingerprint, index, chainCode, null, publicKey);\n }\n throw new Error('Unknown extended key version');\n}\n\n/**\n * Drop-in shape for `new (require('bip32').default)(ecc)`.\n */\nclass BIP32Factory {\n constructor (_ecc) {\n this._ecc = _ecc;\n }\n\n fromSeed (seed, network) {\n return fromSeed(seed, network || DEFAULT_NETWORK);\n }\n\n fromBase58 (str) {\n return fromBase58(str);\n }\n}\n\nmodule.exports = {\n default: BIP32Factory,\n fromSeed,\n fromBase58,\n HDNode,\n DEFAULT_NETWORK\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9iaXAzMi5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ2E7O0FBRWIsUUFBUSxPQUFPLEVBQUUsbUJBQU8sQ0FBQyxtRUFBdUI7QUFDaEQsUUFBUSxTQUFTLEVBQUUsbUJBQU8sQ0FBQyxtRUFBdUI7QUFDbEQsUUFBUSxTQUFTLEVBQUUsbUJBQU8sQ0FBQyxtRUFBdUI7QUFDbEQsUUFBUSxZQUFZLEVBQUUsbUJBQU8sQ0FBQyx1RUFBeUI7QUFDdkQsUUFBUSxZQUFZLEVBQUUsbUJBQU8sQ0FBQyw2RUFBNEI7QUFDMUQsUUFBUSwyQkFBMkIsRUFBRSxtQkFBTyxDQUFDLGlFQUFVO0FBQ3ZELFFBQVEsdUJBQXVCLEVBQUUsbUJBQU8sQ0FBQywrREFBUzs7QUFFbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUMsTUFBTTs7QUFFM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsY0FBYztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLE1BQU07QUFDZjs7QUFFQTtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLE1BQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtFQUFrRTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvREFBb0Q7QUFDbkU7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU07QUFDWjtBQUNBLE1BQU0sTUFBTTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTSxTQUFTLE1BQU07QUFDcEMsUUFBUTtBQUNSLGVBQWUsTUFBTTtBQUNyQjtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsTUFBTTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCLGNBQWMsTUFBTTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE1BQU07QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJEQUEyRCxLQUFLO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELEtBQUs7QUFDM0Q7QUFDQTtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQSxrRUFBa0UsS0FBSztBQUN2RTtBQUNBO0FBQ0EsdUVBQXVFLFNBQVM7QUFDaEY7QUFDQTtBQUNBLGlEQUFpRCxTQUFTO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTTtBQUNWO0FBQ0E7QUFDQSxNQUFNLE1BQU07QUFDWixNQUFNO0FBQ04sTUFBTSxNQUFNO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSxNQUFNO0FBQ1osMkNBQTJDLE1BQU07QUFDakQ7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE1BQU07QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsTUFBTTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE1BQU07QUFDeEIsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvZnVuY3Rpb25zL2JpcDMyLmpzPzVjMzMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCSVAtMzIgaGllcmFyY2hpY2FsIGRldGVybWluaXN0aWMgd2FsbGV0cyAoc2VjcDI1NmsxKSDigJQgZXh0ZW5kZWQga2V5cywgZGVyaXZhdGlvbiwgYmFzZTU4LlxuICpcbiAqIFVzZXMgQG5vYmxlL2N1cnZlcyBhbmQgQG5vYmxlL2hhc2hlczsgb3B0aW9uYWwgYGVjY2AgaW4gY29uc3RydWN0b3IgaXMgYWNjZXB0ZWQgZm9yIEFQSVxuICogY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBmb3JtZXIgYGJpcDMyYCBwYWNrYWdlIGFuZCBpcyBub3QgdXNlZCBmb3IgbWF0aC5cbiAqXG4gKiBAbW9kdWxlIGZ1bmN0aW9ucy9iaXAzMlxuICovXG4ndXNlIHN0cmljdCc7XG5cbmNvbnN0IHsgaG1hYyB9ID0gcmVxdWlyZSgnQG5vYmxlL2hhc2hlcy9obWFjLmpzJyk7XG5jb25zdCB7IHNoYTI1NiB9ID0gcmVxdWlyZSgnQG5vYmxlL2hhc2hlcy9zaGEyLmpzJyk7XG5jb25zdCB7IHNoYTUxMiB9ID0gcmVxdWlyZSgnQG5vYmxlL2hhc2hlcy9zaGEyLmpzJyk7XG5jb25zdCB7IHJpcGVtZDE2MCB9ID0gcmVxdWlyZSgnQG5vYmxlL2hhc2hlcy9sZWdhY3kuanMnKTtcbmNvbnN0IHsgc2VjcDI1NmsxIH0gPSByZXF1aXJlKCdAbm9ibGUvY3VydmVzL3NlY3AyNTZrMS5qcycpO1xuY29uc3QgeyBlbmNvZGVDaGVjaywgZGVjb2RlQ2hlY2sgfSA9IHJlcXVpcmUoJy4vYmFzZTU4Jyk7XG5jb25zdCB7IHRvVWludDhTdHJpY3QsIHUzMmJlIH0gPSByZXF1aXJlKCcuL2J5dGVzJyk7XG5cbmNvbnN0IFBvaW50ID0gc2VjcDI1NmsxLlBvaW50O1xuY29uc3QgWkVSTyA9IFBvaW50LlpFUk87XG5jb25zdCBOID0gUG9pbnQuRm4uT1JERVI7XG5cbi8qKiBCSVAzMiBoYXJkZW5lZCBkZXJpdmF0aW9uIGJpdCAoMl4zMSkgd2l0aG91dCBhIGJhcmUgMjE0NzQ4MzY0OCBsaXRlcmFsLiAqL1xuY29uc3QgSEFSREVORURfT0ZGU0VUID0gKDEgPDwgMzEpID4+PiAwO1xuY29uc3QgTUFTVEVSX1NFQ1JFVCA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKCdCaXRjb2luIHNlZWQnLCAndXRmOCcpKTtcblxuZnVuY3Rpb24gaGFzaDE2MCAoYnVmKSB7XG4gIHJldHVybiByaXBlbWQxNjAoc2hhMjU2KHRvVWludDhTdHJpY3QoYnVmKSkpO1xufVxuXG5mdW5jdGlvbiBidWZUb0JuIChiKSB7XG4gIGxldCB4ID0gMG47XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykgeCA9ICh4IDw8IDhuKSB8IEJpZ0ludChiW2ldKTtcbiAgcmV0dXJuIHg7XG59XG5cbmZ1bmN0aW9uIGJuVG9CdWYzMiAobikge1xuICBpZiAobiA8PSAwbiB8fCBuID49IE4pIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzY2FsYXInKTtcbiAgbGV0IGhleCA9IG4udG9TdHJpbmcoMTYpO1xuICBpZiAoaGV4Lmxlbmd0aCA+IDY0KSB0aHJvdyBuZXcgRXJyb3IoJ3NjYWxhciBvdmVyZmxvdycpO1xuICBoZXggPSBoZXgucGFkU3RhcnQoNjQsICcwJyk7XG4gIHJldHVybiBCdWZmZXIuZnJvbShoZXgsICdoZXgnKTtcbn1cblxuZnVuY3Rpb24gc2VyMzIgKGkpIHtcbiAgY29uc3QgYiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0KTtcbiAgYi53cml0ZVVJbnQzMkJFKGkgPj4+IDAsIDApO1xuICByZXR1cm4gYjtcbn1cblxuZnVuY3Rpb24gZmluZ2VycHJpbnRGcm9tUHViIChwdWIpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhhc2gxNjAocHViKSkucmVhZFVJbnQzMkJFKDApO1xufVxuXG5jb25zdCBERUZBVUxUX05FVFdPUksgPSB7XG4gIG1lc3NhZ2VQcmVmaXg6ICdcXHgxOEJpdGNvaW4gU2lnbmVkIE1lc3NhZ2U6XFxuJyxcbiAgYmVjaDMyOiAnYmMnLFxuICBiaXAzMjogeyBwdWJsaWM6IHUzMmJlKDQsIDEzNiwgMTc4LCAzMCksIHByaXZhdGU6IHUzMmJlKDQsIDEzNiwgMTczLCAyMjgpIH0sXG4gIHB1YktleUhhc2g6IDB4MDAsXG4gIHNjcmlwdEhhc2g6IDB4MDUsXG4gIHdpZjogMHg4MFxufTtcblxuZnVuY3Rpb24gbmV0d29ya0Zyb21WZXJzaW9ucyAodmVyc2lvbikge1xuICBjb25zdCB0ZXN0bmV0QmlwMzJQdWIgPSB1MzJiZSg0LCA1MywgMTM1LCAyMDcpO1xuICBjb25zdCB0ZXN0bmV0QmlwMzJQcml2ID0gdTMyYmUoNCwgNTMsIDEzMSwgMTQ4KTtcbiAgY29uc3QgcGFpcnMgPSBbXG4gICAgW3UzMmJlKDQsIDEzNiwgMTc4LCAzMCksIHUzMmJlKDQsIDEzNiwgMTczLCAyMjgpLCBERUZBVUxUX05FVFdPUktdLFxuICAgIFt0ZXN0bmV0QmlwMzJQdWIsIHRlc3RuZXRCaXAzMlByaXYsIHtcbiAgICAgIG1lc3NhZ2VQcmVmaXg6ICdcXHgxOEJpdGNvaW4gU2lnbmVkIE1lc3NhZ2U6XFxuJyxcbiAgICAgIGJlY2gzMjogJ3RiJyxcbiAgICAgIGJpcDMyOiB7IHB1YmxpYzogdGVzdG5ldEJpcDMyUHViLCBwcml2YXRlOiB0ZXN0bmV0QmlwMzJQcml2IH0sXG4gICAgICBwdWJLZXlIYXNoOiAweDZmLFxuICAgICAgc2NyaXB0SGFzaDogMHhjNCxcbiAgICAgIHdpZjogMHhlZlxuICAgIH1dXG4gIF07XG4gIGZvciAoY29uc3QgW3B1YlYsIHByaXZWLCBuZXRdIG9mIHBhaXJzKSB7XG4gICAgaWYgKHZlcnNpb24gPT09IHB1YlYgfHwgdmVyc2lvbiA9PT0gcHJpdlYpIHJldHVybiBuZXQ7XG4gIH1cbiAgcmV0dXJuIERFRkFVTFRfTkVUV09SSztcbn1cblxuY2xhc3MgSEROb2RlIHtcbiAgY29uc3RydWN0b3IgKG5ldHdvcmssIGRlcHRoLCBwYXJlbnRGaW5nZXJwcmludCwgaW5kZXgsIGNoYWluQ29kZSwgcHJpdmF0ZUtleSwgcHVibGljS2V5KSB7XG4gICAgdGhpcy5uZXR3b3JrID0gbmV0d29yaztcbiAgICB0aGlzLmRlcHRoID0gZGVwdGg7XG4gICAgdGhpcy5wYXJlbnRGaW5nZXJwcmludCA9IHBhcmVudEZpbmdlcnByaW50O1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmNoYWluQ29kZSA9IGNoYWluQ29kZTtcbiAgICB0aGlzLnByaXZhdGVLZXkgPSBwcml2YXRlS2V5O1xuICAgIHRoaXMucHVibGljS2V5ID0gcHVibGljS2V5O1xuICAgIHRoaXMuZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludEZyb21QdWIodGhpcy5wdWJsaWNLZXkpO1xuICB9XG5cbiAgZ2V0IGlzTmV1dGVyZWQgKCkge1xuICAgIHJldHVybiB0aGlzLnByaXZhdGVLZXkgPT0gbnVsbDtcbiAgfVxuXG4gIG5ldXRlcmVkICgpIHtcbiAgICByZXR1cm4gbmV3IEhETm9kZShcbiAgICAgIHRoaXMubmV0d29yayxcbiAgICAgIHRoaXMuZGVwdGgsXG4gICAgICB0aGlzLnBhcmVudEZpbmdlcnByaW50LFxuICAgICAgdGhpcy5pbmRleCxcbiAgICAgIEJ1ZmZlci5mcm9tKHRoaXMuY2hhaW5Db2RlKSxcbiAgICAgIG51bGwsXG4gICAgICBCdWZmZXIuZnJvbSh0aGlzLnB1YmxpY0tleSlcbiAgICApO1xuICB9XG5cbiAgZGVyaXZlIChpbmRleCkge1xuICAgIGxldCBpO1xuICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICBpID0gaW5kZXg7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5kZXggPT09ICdiaWdpbnQnKSB7XG4gICAgICBpZiAoaW5kZXggPCAwbiB8fCBpbmRleCA+IDB4ZmZmZmZmZmZuKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTtcbiAgICAgIGkgPSBOdW1iZXIoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGluZGV4ID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKCEvXlxcZCskLy50ZXN0KGluZGV4KSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgICBpID0gTnVtYmVyKGluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgfVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihpKSB8fCBpIDwgMCB8fCBpID4gKDIgKiogMzIpIC0gMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgY29uc3QgaGFyZGVuZWQgPSBpID49IEhBUkRFTkVEX09GRlNFVDtcblxuICAgIGlmICh0aGlzLnByaXZhdGVLZXkpIHtcbiAgICAgIGxldCBkYXRhO1xuICAgICAgaWYgKGhhcmRlbmVkKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbMF0pLCB0aGlzLnByaXZhdGVLZXksIHNlcjMyKGkpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbdGhpcy5wdWJsaWNLZXksIHNlcjMyKGkpXSk7XG4gICAgICB9XG4gICAgICBjb25zdCBJID0gQnVmZmVyLmZyb20oaG1hYyhzaGE1MTIsIHRvVWludDhTdHJpY3QodGhpcy5jaGFpbkNvZGUpLCB0b1VpbnQ4U3RyaWN0KGRhdGEpKSk7XG4gICAgICBjb25zdCBJTCA9IEkuc3ViYXJyYXkoMCwgMzIpO1xuICAgICAgY29uc3QgSVIgPSBJLnN1YmFycmF5KDMyLCA2NCk7XG4gICAgICBjb25zdCBwYXJzZUlMID0gYnVmVG9CbihJTCk7XG4gICAgICBpZiAocGFyc2VJTCA+PSBOKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVyaXZhdGlvbiAoSUwgPj0gbiknKTtcbiAgICAgIGNvbnN0IGtQYXIgPSBidWZUb0JuKHRoaXMucHJpdmF0ZUtleSk7XG4gICAgICBjb25zdCBraSA9IChwYXJzZUlMICsga1BhcikgJSBOO1xuICAgICAgaWYgKGtpID09PSAwbikgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRlcml2YXRpb24gKGtpID0gMCknKTtcbiAgICAgIGNvbnN0IGNoaWxkUHJpdiA9IGJuVG9CdWYzMihraSk7XG4gICAgICBjb25zdCBjaGlsZFB1YiA9IEJ1ZmZlci5mcm9tKHNlY3AyNTZrMS5nZXRQdWJsaWNLZXkodG9VaW50OFN0cmljdChjaGlsZFByaXYpLCB0cnVlKSk7XG4gICAgICByZXR1cm4gbmV3IEhETm9kZShcbiAgICAgICAgdGhpcy5uZXR3b3JrLFxuICAgICAgICB0aGlzLmRlcHRoICsgMSxcbiAgICAgICAgdGhpcy5maW5nZXJwcmludCxcbiAgICAgICAgaSxcbiAgICAgICAgSVIsXG4gICAgICAgIGNoaWxkUHJpdixcbiAgICAgICAgY2hpbGRQdWJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGhhcmRlbmVkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgZGVyaXZlIGhhcmRlbmVkIGNoaWxkIGZyb20gcHVibGljIHBhcmVudCcpO1xuICAgIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KFt0aGlzLnB1YmxpY0tleSwgc2VyMzIoaSldKTtcbiAgICBjb25zdCBJID0gQnVmZmVyLmZyb20oaG1hYyhzaGE1MTIsIHRvVWludDhTdHJpY3QodGhpcy5jaGFpbkNvZGUpLCB0b1VpbnQ4U3RyaWN0KGRhdGEpKSk7XG4gICAgY29uc3QgSUwgPSBJLnN1YmFycmF5KDAsIDMyKTtcbiAgICBjb25zdCBJUiA9IEkuc3ViYXJyYXkoMzIsIDY0KTtcbiAgICBjb25zdCBwYXJzZUlMID0gYnVmVG9CbihJTCk7XG4gICAgaWYgKHBhcnNlSUwgPj0gTikgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRlcml2YXRpb24gKElMID49IG4pJyk7XG4gICAgY29uc3QgUCA9IFBvaW50LmZyb21CeXRlcyh0b1VpbnQ4U3RyaWN0KHRoaXMucHVibGljS2V5KSk7XG4gICAgY29uc3QgVCA9IFBvaW50LkJBU0UubXVsdGlwbHkocGFyc2VJTCk7XG4gICAgY29uc3QgSyA9IFAuYWRkKFQpO1xuICAgIGlmIChLLmVxdWFscyhaRVJPKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRlcml2YXRpb24gKHBvaW50IGF0IGluZmluaXR5KScpO1xuICAgIGNvbnN0IGNoaWxkUHViID0gQnVmZmVyLmZyb20oSy50b0J5dGVzKHRydWUpKTtcbiAgICByZXR1cm4gbmV3IEhETm9kZShcbiAgICAgIHRoaXMubmV0d29yayxcbiAgICAgIHRoaXMuZGVwdGggKyAxLFxuICAgICAgdGhpcy5maW5nZXJwcmludCxcbiAgICAgIGksXG4gICAgICBJUixcbiAgICAgIG51bGwsXG4gICAgICBjaGlsZFB1YlxuICAgICk7XG4gIH1cblxuICBkZXJpdmVQYXRoIChwYXRoKSB7XG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzWzBdICE9PSAnbScpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXRoOiAke3BhdGh9YCk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAtIDEgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXRoOiBCSVAtMzIgZGVwdGggbXVzdCBub3QgZXhjZWVkIDI1NScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZXB0aCAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhdGg6IGFic29sdXRlIHBhdGggXCIke3BhdGh9XCIgbXVzdCBiZSBkZXJpdmVkIGZyb20gdGhlIG1hc3RlciAoZGVwdGggMCkgbm9kZWApO1xuICAgIH1cbiAgICBsZXQgbm9kZSA9IHRoaXM7XG4gICAgZm9yIChsZXQgcCA9IDE7IHAgPCBwYXJ0cy5sZW5ndGg7IHArKykge1xuICAgICAgbGV0IHNlZyA9IHBhcnRzW3BdO1xuICAgICAgaWYgKCFzZWcpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXRoIHNlZ21lbnQ6IGVtcHR5IGluICR7cGF0aH1gKTtcbiAgICAgIGNvbnN0IGhhcmRlbmVkID0gc2VnLmVuZHNXaXRoKFwiJ1wiKSB8fCBzZWcuZW5kc1dpdGgoJ2gnKTtcbiAgICAgIGlmIChoYXJkZW5lZCkgc2VnID0gc2VnLnNsaWNlKDAsIC0xKTtcbiAgICAgIGlmICghL15cXGQrJC8udGVzdChzZWcpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGF0aCBzZWdtZW50OiAke3BhcnRzW3BdfWApO1xuICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIoc2VnKTtcbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gKDIgKiogMzEpIC0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGF0aCBzZWdtZW50OiAke3BhcnRzW3BdfWApO1xuICAgICAgfVxuICAgICAgbm9kZSA9IG5vZGUuZGVyaXZlKGhhcmRlbmVkID8gaW5kZXggKyBIQVJERU5FRF9PRkZTRVQgOiBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgdG9CYXNlNTggKCkge1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmlzTmV1dGVyZWQgPyB0aGlzLm5ldHdvcmsuYmlwMzIucHVibGljIDogdGhpcy5uZXR3b3JrLmJpcDMyLnByaXZhdGU7XG4gICAgY29uc3QgYiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg3OCk7XG4gICAgYi53cml0ZVVJbnQzMkJFKHZlcnNpb24gPj4+IDAsIDApO1xuICAgIGIud3JpdGVVSW50OCh0aGlzLmRlcHRoLCA0KTtcbiAgICBiLndyaXRlVUludDMyQkUodGhpcy5wYXJlbnRGaW5nZXJwcmludCA+Pj4gMCwgNSk7XG4gICAgYi53cml0ZVVJbnQzMkJFKHRoaXMuaW5kZXggPj4+IDAsIDkpO1xuICAgIEJ1ZmZlci5mcm9tKHRoaXMuY2hhaW5Db2RlKS5jb3B5KGIsIDEzKTtcbiAgICBpZiAodGhpcy5wcml2YXRlS2V5KSB7XG4gICAgICBiLndyaXRlVUludDgoMCwgNDUpO1xuICAgICAgQnVmZmVyLmZyb20odGhpcy5wcml2YXRlS2V5KS5jb3B5KGIsIDQ2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgQnVmZmVyLmZyb20odGhpcy5wdWJsaWNLZXkpLmNvcHkoYiwgNDUpO1xuICAgIH1cbiAgICByZXR1cm4gZW5jb2RlQ2hlY2soYik7XG4gIH1cbn1cblxuZnVuY3Rpb24gZnJvbVNlZWQgKHNlZWQsIG5ldHdvcmsgPSBERUZBVUxUX05FVFdPUkspIHtcbiAgaWYgKHNlZWQgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdTZWVkIGlzIHJlcXVpcmVkJyk7XG4gIGxldCBzO1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHNlZWQpKSBzID0gc2VlZDtcbiAgZWxzZSBpZiAoc2VlZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHMgPSBCdWZmZXIuZnJvbShzZWVkKTtcbiAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJ1NlZWQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7XG4gIGlmIChzLmxlbmd0aCA8IDE2IHx8IHMubGVuZ3RoID4gNjQpIHRocm93IG5ldyBFcnJvcignU2VlZCBtdXN0IGJlIDE24oCTNjQgYnl0ZXMnKTtcbiAgY29uc3QgSSA9IEJ1ZmZlci5mcm9tKGhtYWMoc2hhNTEyLCBNQVNURVJfU0VDUkVULCB0b1VpbnQ4U3RyaWN0KHMpKSk7XG4gIGNvbnN0IElMID0gSS5zdWJhcnJheSgwLCAzMik7XG4gIGNvbnN0IElSID0gSS5zdWJhcnJheSgzMiwgNjQpO1xuICBjb25zdCBwYXJzZUlMID0gYnVmVG9CbihJTCk7XG4gIGlmIChwYXJzZUlMID09PSAwbiB8fCBwYXJzZUlMID49IE4pIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXN0ZXIgc2VlZCcpO1xuICBjb25zdCBwcml2YXRlS2V5ID0gSUw7XG4gIGNvbnN0IHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKHNlY3AyNTZrMS5nZXRQdWJsaWNLZXkodG9VaW50OFN0cmljdChwcml2YXRlS2V5KSwgdHJ1ZSkpO1xuICByZXR1cm4gbmV3IEhETm9kZShuZXR3b3JrLCAwLCAwLCAwLCBJUiwgcHJpdmF0ZUtleSwgcHVibGljS2V5KTtcbn1cblxuZnVuY3Rpb24gZnJvbUJhc2U1OCAoc3RyKSB7XG4gIGNvbnN0IHJhdyA9IGRlY29kZUNoZWNrKHN0cik7XG4gIGlmIChyYXcubGVuZ3RoICE9PSA3OCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGV4dGVuZGVkIGtleSBsZW5ndGgnKTtcbiAgY29uc3QgdmVyc2lvbiA9IHJhdy5yZWFkVUludDMyQkUoMCk7XG4gIGNvbnN0IG5ldCA9IG5ldHdvcmtGcm9tVmVyc2lvbnModmVyc2lvbik7XG4gIGNvbnN0IGRlcHRoID0gcmF3WzRdO1xuICBjb25zdCBwYXJlbnRGaW5nZXJwcmludCA9IHJhdy5yZWFkVUludDMyQkUoNSk7XG4gIGNvbnN0IGluZGV4ID0gcmF3LnJlYWRVSW50MzJCRSg5KTtcbiAgY29uc3QgY2hhaW5Db2RlID0gcmF3LnN1YmFycmF5KDEzLCA0NSk7XG4gIGNvbnN0IGtleURhdGEgPSByYXcuc3ViYXJyYXkoNDUsIDc4KTtcblxuICBpZiAoZGVwdGggPT09IDApIHtcbiAgICBpZiAocGFyZW50RmluZ2VycHJpbnQgIT09IDApIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXN0ZXIga2V5OiBwYXJlbnQgZmluZ2VycHJpbnQgbXVzdCBiZSB6ZXJvJyk7XG4gICAgaWYgKGluZGV4ICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWFzdGVyIGtleTogY2hpbGQgbnVtYmVyIG11c3QgYmUgemVybycpO1xuICB9XG5cbiAgaWYgKHZlcnNpb24gPT09IG5ldC5iaXAzMi5wcml2YXRlKSB7XG4gICAgaWYgKGtleURhdGFbMF0gIT09IDApIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwcml2YXRlIGtleSBwcmVmaXgnKTtcbiAgICBjb25zdCBwcml2YXRlS2V5ID0ga2V5RGF0YS5zdWJhcnJheSgxLCAzMyk7XG4gICAgY29uc3QgcHVibGljS2V5ID0gQnVmZmVyLmZyb20oc2VjcDI1NmsxLmdldFB1YmxpY0tleSh0b1VpbnQ4U3RyaWN0KHByaXZhdGVLZXkpLCB0cnVlKSk7XG4gICAgcmV0dXJuIG5ldyBIRE5vZGUobmV0LCBkZXB0aCwgcGFyZW50RmluZ2VycHJpbnQsIGluZGV4LCBjaGFpbkNvZGUsIHByaXZhdGVLZXksIHB1YmxpY0tleSk7XG4gIH1cbiAgaWYgKHZlcnNpb24gPT09IG5ldC5iaXAzMi5wdWJsaWMpIHtcbiAgICBpZiAoa2V5RGF0YVswXSAhPT0gMiAmJiBrZXlEYXRhWzBdICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHVibGljIGtleSBwcmVmaXgnKTtcbiAgICB9XG4gICAgbGV0IHB1YmxpY0tleTtcbiAgICB0cnkge1xuICAgICAgcHVibGljS2V5ID0gQnVmZmVyLmZyb20oUG9pbnQuZnJvbUJ5dGVzKHRvVWludDhTdHJpY3Qoa2V5RGF0YSkpLnRvQnl0ZXModHJ1ZSkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHB1YmxpYyBrZXknKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBIRE5vZGUobmV0LCBkZXB0aCwgcGFyZW50RmluZ2VycHJpbnQsIGluZGV4LCBjaGFpbkNvZGUsIG51bGwsIHB1YmxpY0tleSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGV4dGVuZGVkIGtleSB2ZXJzaW9uJyk7XG59XG5cbi8qKlxuICogRHJvcC1pbiBzaGFwZSBmb3IgYG5ldyAocmVxdWlyZSgnYmlwMzInKS5kZWZhdWx0KShlY2MpYC5cbiAqL1xuY2xhc3MgQklQMzJGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IgKF9lY2MpIHtcbiAgICB0aGlzLl9lY2MgPSBfZWNjO1xuICB9XG5cbiAgZnJvbVNlZWQgKHNlZWQsIG5ldHdvcmspIHtcbiAgICByZXR1cm4gZnJvbVNlZWQoc2VlZCwgbmV0d29yayB8fCBERUZBVUxUX05FVFdPUkspO1xuICB9XG5cbiAgZnJvbUJhc2U1OCAoc3RyKSB7XG4gICAgcmV0dXJuIGZyb21CYXNlNTgoc3RyKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZGVmYXVsdDogQklQMzJGYWN0b3J5LFxuICBmcm9tU2VlZCxcbiAgZnJvbUJhc2U1OCxcbiAgSEROb2RlLFxuICBERUZBVUxUX05FVFdPUktcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/bip32.js\n\n}")},"./node_modules/@fabric/core/functions/bip39.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n/**\n * BIP-39 mnemonics (English wordlist) — PBKDF2 seed, validation, entropy conversion.\n *\n * @module functions/bip39\n */\n\n\nconst crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nconst { sha256, sha512 } = __webpack_require__(/*! @noble/hashes/sha2.js */ \"./node_modules/@noble/hashes/sha2.js\");\nconst { pbkdf2, pbkdf2Async } = __webpack_require__(/*! @noble/hashes/pbkdf2.js */ \"./node_modules/@noble/hashes/pbkdf2.js\");\n\nconst DEFAULT_WORDLIST = __webpack_require__(/*! ../settings/bip39-english.json */ \"./node_modules/@fabric/core/settings/bip39-english.json\");\n\n/** BIP-39 allows exactly these mnemonic lengths (words). */\nconst MNEMONIC_WORD_COUNTS = Object.freeze([12, 15, 18, 21, 24]);\n\nfunction assertWordlistInvariants (wordlist, name = 'wordlist') {\n if (!Array.isArray(wordlist) || wordlist.length !== 2048) {\n throw new Error(`${name} must be an array of exactly 2048 words`);\n }\n const seen = new Set();\n for (let i = 0; i < wordlist.length; i++) {\n const w = wordlist[i];\n if (typeof w !== 'string' || w.length === 0) {\n throw new Error(`${name}[${i}] must be a non-empty string`);\n }\n if (/\\s/.test(w)) {\n throw new Error(`${name}[${i}] must be a single word (no whitespace)`);\n }\n if (seen.has(w)) throw new Error(`${name} contains duplicate word: ${w}`);\n seen.add(w);\n }\n}\n\nassertWordlistInvariants(DEFAULT_WORDLIST, 'settings/bip39-english.json');\n\nfunction resolveWordlist (wordlist) {\n const wl = wordlist || DEFAULT_WORDLIST;\n if (wl !== DEFAULT_WORDLIST) assertWordlistInvariants(wl);\n return wl;\n}\n\nfunction normalize (str) {\n const words = (str || '').normalize('NFKD').trim().toLowerCase().split(/\\s+/).filter(Boolean);\n return words.join(' ');\n}\n\nfunction salt (passphrase) {\n return 'mnemonic' + (passphrase || '');\n}\n\nfunction seedInputs (mnemonic, passphrase) {\n const m = normalize(mnemonic);\n // BIP-39: normalize passphrase with NFKD (mnemonic words are normalized in normalize()).\n const passNorm = (passphrase || '').normalize('NFKD');\n return {\n pwd: Buffer.from(m, 'utf8'),\n saltBuf: Buffer.from(salt(passNorm), 'utf8')\n };\n}\n\n/**\n * @param {string} mnemonic\n * @param {string} [passphrase]\n * @returns {Buffer}\n */\nfunction mnemonicToSeedSync (mnemonic, passphrase = '') {\n const { pwd, saltBuf } = seedInputs(mnemonic, passphrase);\n const out = pbkdf2(sha512, pwd, saltBuf, { c: 2048, dkLen: 64 });\n return Buffer.from(out);\n}\n\n/**\n * @param {string} mnemonic\n * @param {string} [passphrase]\n * @returns {Promise}\n */\nasync function mnemonicToSeed (mnemonic, passphrase = '') {\n const { pwd, saltBuf } = seedInputs(mnemonic, passphrase);\n const out = await pbkdf2Async(sha512, pwd, saltBuf, { c: 2048, dkLen: 64 });\n return Buffer.from(out);\n}\n\nfunction deriveChecksumBits (entropy) {\n const CS = (entropy.length * 8) / 32;\n const h = sha256(Uint8Array.from(entropy));\n const bits = [];\n for (const b of h) {\n for (let i = 7; i >= 0; i--) bits.push((b >> i) & 1);\n }\n return bits.slice(0, CS);\n}\n\nfunction binaryToWord (bits, wordlist) {\n const idx = parseInt(bits.join(''), 2);\n if (!Number.isFinite(idx) || idx < 0 || idx >= wordlist.length) {\n throw new RangeError(`Word index ${idx} out of range for wordlist (length ${wordlist.length})`);\n }\n return wordlist[idx];\n}\n\n/**\n * @param {Buffer} entropy\n * @param {string[]} [wordlist]\n * @returns {string}\n */\nfunction entropyToMnemonic (entropy, wordlist = DEFAULT_WORDLIST) {\n const wl = resolveWordlist(wordlist);\n if (typeof entropy === 'string') {\n throw new Error('Entropy must be a Buffer or Uint8Array; do not pass a hex/utf8 string (use Buffer.from(hex, \"hex\") explicitly).');\n }\n if (!Buffer.isBuffer(entropy)) entropy = Buffer.from(entropy);\n if (entropy.length < 16 || entropy.length > 32 || entropy.length % 4 !== 0) {\n throw new Error('Entropy length must be 16–32 bytes and a multiple of 4');\n }\n const checksum = deriveChecksumBits(entropy);\n const bits = [];\n for (const b of entropy) {\n for (let i = 7; i >= 0; i--) bits.push((b >> i) & 1);\n }\n bits.push(...checksum);\n const chunks = [];\n for (let i = 0; i < bits.length; i += 11) {\n chunks.push(binaryToWord(bits.slice(i, i + 11), wl));\n }\n return chunks.join(' ');\n}\n\n/**\n * CSPRNG bytes. Node `crypto.randomBytes` when present; otherwise Web Crypto\n * `getRandomValues` (browser / Android WebView). Some bundlers stub `crypto`\n * as `{}`, which makes `randomBytes` throw \"is not a function\".\n * @param {number} n\n * @returns {Buffer}\n * @private\n */\nfunction randomBytesSecure (n) {\n const size = n >>> 0;\n if (typeof crypto.randomBytes === 'function') return crypto.randomBytes(size);\n const web = (typeof globalThis !== 'undefined' && globalThis.crypto) ||\n (typeof window !== 'undefined' && window.crypto) ||\n null;\n if (web && typeof web.getRandomValues === 'function') {\n const out = Buffer.alloc(size);\n web.getRandomValues(out);\n return out;\n }\n throw new Error('secure randomBytes unavailable');\n}\n\n/**\n * @param {number} [strength=128] 128 → 12 words, 256 → 24 words\n * @param {string[]} [wordlist]\n * @returns {string}\n */\nfunction generateMnemonic (strength = 128, wordlist = DEFAULT_WORDLIST) {\n resolveWordlist(wordlist);\n if (strength % 32 !== 0 || strength < 128 || strength > 256) {\n throw new Error('Strength must be 128–256 in steps of 32');\n }\n const entropy = randomBytesSecure(strength / 8);\n return entropyToMnemonic(entropy, wordlist);\n}\n\n/**\n * @param {string} mnemonic\n * @param {string[]} [wordlist]\n * @returns {boolean}\n */\nfunction validateMnemonic (mnemonic, wordlist = DEFAULT_WORDLIST) {\n const wl = resolveWordlist(wordlist);\n const n = normalize(mnemonic);\n if (!n) return false;\n const words = n.split(' ');\n if (!MNEMONIC_WORD_COUNTS.includes(words.length)) return false;\n const set = new Set(wl);\n if (!words.every((w) => set.has(w))) return false;\n try {\n mnemonicToEntropy(n, wl);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * @param {string} mnemonic\n * @param {string[]} [wordlist]\n * @returns {Buffer}\n */\nfunction mnemonicToEntropy (mnemonic, wordlist = DEFAULT_WORDLIST) {\n const wl = resolveWordlist(wordlist);\n const words = normalize(mnemonic).split(' ');\n if (!MNEMONIC_WORD_COUNTS.includes(words.length)) {\n throw new Error('Invalid mnemonic length (use 12, 15, 18, 21, or 24 words)');\n }\n const bits = [];\n for (const w of words) {\n const idx = wl.indexOf(w);\n if (idx < 0) throw new Error(`Unknown word: ${w}`);\n for (let i = 10; i >= 0; i--) bits.push((idx >> i) & 1);\n }\n const divider = Math.floor(bits.length / 33) * 32;\n const entropyBits = bits.slice(0, divider);\n const checksumBits = bits.slice(divider);\n const entropy = Buffer.alloc(entropyBits.length / 8);\n for (let i = 0; i < entropy.length; i++) {\n let v = 0;\n for (let j = 0; j < 8; j++) v = (v << 1) | entropyBits[i * 8 + j];\n entropy[i] = v;\n }\n const expected = deriveChecksumBits(entropy);\n if (expected.length !== checksumBits.length) throw new Error('Checksum length mismatch');\n for (let i = 0; i < expected.length; i++) {\n if (expected[i] !== checksumBits[i]) throw new Error('Invalid checksum');\n }\n return entropy;\n}\n\nmodule.exports = {\n mnemonicToSeed,\n mnemonicToSeedSync,\n entropyToMnemonic,\n generateMnemonic,\n validateMnemonic,\n mnemonicToEntropy,\n defaultWordlist: DEFAULT_WORDLIST\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9iaXAzOS5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyx5REFBUTtBQUMvQixRQUFRLGlCQUFpQixFQUFFLG1CQUFPLENBQUMsbUVBQXVCO0FBQzFELFFBQVEsc0JBQXNCLEVBQUUsbUJBQU8sQ0FBQyx1RUFBeUI7O0FBRWpFLHlCQUF5QixtQkFBTyxDQUFDLCtGQUFnQzs7QUFFakU7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLE1BQU07QUFDN0I7QUFDQTtBQUNBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBLHlCQUF5QixLQUFLLEdBQUcsRUFBRTtBQUNuQztBQUNBO0FBQ0EseUJBQXlCLEtBQUssR0FBRyxFQUFFO0FBQ25DO0FBQ0Esd0NBQXdDLE1BQU0sMkJBQTJCLEVBQUU7QUFDM0U7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLE1BQU07QUFDZixhQUFhLE1BQU07QUFDbkI7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQSxVQUFVLGVBQWU7QUFDekIsNkNBQTZDLG9CQUFvQjtBQUNqRSxTQUFTLE1BQU07QUFDZjs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQSxVQUFVLGVBQWU7QUFDekIsd0RBQXdELG9CQUFvQjtBQUM1RSxTQUFTLE1BQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxLQUFLLG9DQUFvQyxnQkFBZ0I7QUFDaEc7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQSxPQUFPLE1BQU0sOEJBQThCLE1BQU07QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVE7QUFDNUI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGlCQUFpQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBLFNBQVM7QUFDVCxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsRUFBRTtBQUNwRCxxQkFBcUIsUUFBUTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixNQUFNO0FBQ3hCLGtCQUFrQixvQkFBb0I7QUFDdEM7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9iaXAzOS5qcz9hOTUyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQklQLTM5IG1uZW1vbmljcyAoRW5nbGlzaCB3b3JkbGlzdCkg4oCUIFBCS0RGMiBzZWVkLCB2YWxpZGF0aW9uLCBlbnRyb3B5IGNvbnZlcnNpb24uXG4gKlxuICogQG1vZHVsZSBmdW5jdGlvbnMvYmlwMzlcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbmNvbnN0IHsgc2hhMjU2LCBzaGE1MTIgfSA9IHJlcXVpcmUoJ0Bub2JsZS9oYXNoZXMvc2hhMi5qcycpO1xuY29uc3QgeyBwYmtkZjIsIHBia2RmMkFzeW5jIH0gPSByZXF1aXJlKCdAbm9ibGUvaGFzaGVzL3Bia2RmMi5qcycpO1xuXG5jb25zdCBERUZBVUxUX1dPUkRMSVNUID0gcmVxdWlyZSgnLi4vc2V0dGluZ3MvYmlwMzktZW5nbGlzaC5qc29uJyk7XG5cbi8qKiBCSVAtMzkgYWxsb3dzIGV4YWN0bHkgdGhlc2UgbW5lbW9uaWMgbGVuZ3RocyAod29yZHMpLiAqL1xuY29uc3QgTU5FTU9OSUNfV09SRF9DT1VOVFMgPSBPYmplY3QuZnJlZXplKFsxMiwgMTUsIDE4LCAyMSwgMjRdKTtcblxuZnVuY3Rpb24gYXNzZXJ0V29yZGxpc3RJbnZhcmlhbnRzICh3b3JkbGlzdCwgbmFtZSA9ICd3b3JkbGlzdCcpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHdvcmRsaXN0KSB8fCB3b3JkbGlzdC5sZW5ndGggIT09IDIwNDgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gbXVzdCBiZSBhbiBhcnJheSBvZiBleGFjdGx5IDIwNDggd29yZHNgKTtcbiAgfVxuICBjb25zdCBzZWVuID0gbmV3IFNldCgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHdvcmRsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdyA9IHdvcmRsaXN0W2ldO1xuICAgIGlmICh0eXBlb2YgdyAhPT0gJ3N0cmluZycgfHwgdy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfVske2l9XSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZ2ApO1xuICAgIH1cbiAgICBpZiAoL1xccy8udGVzdCh3KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9WyR7aX1dIG11c3QgYmUgYSBzaW5nbGUgd29yZCAobm8gd2hpdGVzcGFjZSlgKTtcbiAgICB9XG4gICAgaWYgKHNlZW4uaGFzKHcpKSB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gY29udGFpbnMgZHVwbGljYXRlIHdvcmQ6ICR7d31gKTtcbiAgICBzZWVuLmFkZCh3KTtcbiAgfVxufVxuXG5hc3NlcnRXb3JkbGlzdEludmFyaWFudHMoREVGQVVMVF9XT1JETElTVCwgJ3NldHRpbmdzL2JpcDM5LWVuZ2xpc2guanNvbicpO1xuXG5mdW5jdGlvbiByZXNvbHZlV29yZGxpc3QgKHdvcmRsaXN0KSB7XG4gIGNvbnN0IHdsID0gd29yZGxpc3QgfHwgREVGQVVMVF9XT1JETElTVDtcbiAgaWYgKHdsICE9PSBERUZBVUxUX1dPUkRMSVNUKSBhc3NlcnRXb3JkbGlzdEludmFyaWFudHMod2wpO1xuICByZXR1cm4gd2w7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyKSB7XG4gIGNvbnN0IHdvcmRzID0gKHN0ciB8fCAnJykubm9ybWFsaXplKCdORktEJykudHJpbSgpLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiB3b3Jkcy5qb2luKCcgJyk7XG59XG5cbmZ1bmN0aW9uIHNhbHQgKHBhc3NwaHJhc2UpIHtcbiAgcmV0dXJuICdtbmVtb25pYycgKyAocGFzc3BocmFzZSB8fCAnJyk7XG59XG5cbmZ1bmN0aW9uIHNlZWRJbnB1dHMgKG1uZW1vbmljLCBwYXNzcGhyYXNlKSB7XG4gIGNvbnN0IG0gPSBub3JtYWxpemUobW5lbW9uaWMpO1xuICAvLyBCSVAtMzk6IG5vcm1hbGl6ZSBwYXNzcGhyYXNlIHdpdGggTkZLRCAobW5lbW9uaWMgd29yZHMgYXJlIG5vcm1hbGl6ZWQgaW4gbm9ybWFsaXplKCkpLlxuICBjb25zdCBwYXNzTm9ybSA9IChwYXNzcGhyYXNlIHx8ICcnKS5ub3JtYWxpemUoJ05GS0QnKTtcbiAgcmV0dXJuIHtcbiAgICBwd2Q6IEJ1ZmZlci5mcm9tKG0sICd1dGY4JyksXG4gICAgc2FsdEJ1ZjogQnVmZmVyLmZyb20oc2FsdChwYXNzTm9ybSksICd1dGY4JylcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW5lbW9uaWNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGFzc3BocmFzZV1cbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmZ1bmN0aW9uIG1uZW1vbmljVG9TZWVkU3luYyAobW5lbW9uaWMsIHBhc3NwaHJhc2UgPSAnJykge1xuICBjb25zdCB7IHB3ZCwgc2FsdEJ1ZiB9ID0gc2VlZElucHV0cyhtbmVtb25pYywgcGFzc3BocmFzZSk7XG4gIGNvbnN0IG91dCA9IHBia2RmMihzaGE1MTIsIHB3ZCwgc2FsdEJ1ZiwgeyBjOiAyMDQ4LCBka0xlbjogNjQgfSk7XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtbmVtb25pY1xuICogQHBhcmFtIHtzdHJpbmd9IFtwYXNzcGhyYXNlXVxuICogQHJldHVybnMge1Byb21pc2U8QnVmZmVyPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbW5lbW9uaWNUb1NlZWQgKG1uZW1vbmljLCBwYXNzcGhyYXNlID0gJycpIHtcbiAgY29uc3QgeyBwd2QsIHNhbHRCdWYgfSA9IHNlZWRJbnB1dHMobW5lbW9uaWMsIHBhc3NwaHJhc2UpO1xuICBjb25zdCBvdXQgPSBhd2FpdCBwYmtkZjJBc3luYyhzaGE1MTIsIHB3ZCwgc2FsdEJ1ZiwgeyBjOiAyMDQ4LCBka0xlbjogNjQgfSk7XG4gIHJldHVybiBCdWZmZXIuZnJvbShvdXQpO1xufVxuXG5mdW5jdGlvbiBkZXJpdmVDaGVja3N1bUJpdHMgKGVudHJvcHkpIHtcbiAgY29uc3QgQ1MgPSAoZW50cm9weS5sZW5ndGggKiA4KSAvIDMyO1xuICBjb25zdCBoID0gc2hhMjU2KFVpbnQ4QXJyYXkuZnJvbShlbnRyb3B5KSk7XG4gIGNvbnN0IGJpdHMgPSBbXTtcbiAgZm9yIChjb25zdCBiIG9mIGgpIHtcbiAgICBmb3IgKGxldCBpID0gNzsgaSA+PSAwOyBpLS0pIGJpdHMucHVzaCgoYiA+PiBpKSAmIDEpO1xuICB9XG4gIHJldHVybiBiaXRzLnNsaWNlKDAsIENTKTtcbn1cblxuZnVuY3Rpb24gYmluYXJ5VG9Xb3JkIChiaXRzLCB3b3JkbGlzdCkge1xuICBjb25zdCBpZHggPSBwYXJzZUludChiaXRzLmpvaW4oJycpLCAyKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaWR4KSB8fCBpZHggPCAwIHx8IGlkeCA+PSB3b3JkbGlzdC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgV29yZCBpbmRleCAke2lkeH0gb3V0IG9mIHJhbmdlIGZvciB3b3JkbGlzdCAobGVuZ3RoICR7d29yZGxpc3QubGVuZ3RofSlgKTtcbiAgfVxuICByZXR1cm4gd29yZGxpc3RbaWR4XTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZW50cm9weVxuICogQHBhcmFtIHtzdHJpbmdbXX0gW3dvcmRsaXN0XVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW50cm9weVRvTW5lbW9uaWMgKGVudHJvcHksIHdvcmRsaXN0ID0gREVGQVVMVF9XT1JETElTVCkge1xuICBjb25zdCB3bCA9IHJlc29sdmVXb3JkbGlzdCh3b3JkbGlzdCk7XG4gIGlmICh0eXBlb2YgZW50cm9weSA9PT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VudHJvcHkgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5OyBkbyBub3QgcGFzcyBhIGhleC91dGY4IHN0cmluZyAodXNlIEJ1ZmZlci5mcm9tKGhleCwgXCJoZXhcIikgZXhwbGljaXRseSkuJyk7XG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoZW50cm9weSkpIGVudHJvcHkgPSBCdWZmZXIuZnJvbShlbnRyb3B5KTtcbiAgaWYgKGVudHJvcHkubGVuZ3RoIDwgMTYgfHwgZW50cm9weS5sZW5ndGggPiAzMiB8fCBlbnRyb3B5Lmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VudHJvcHkgbGVuZ3RoIG11c3QgYmUgMTbigJMzMiBieXRlcyBhbmQgYSBtdWx0aXBsZSBvZiA0Jyk7XG4gIH1cbiAgY29uc3QgY2hlY2tzdW0gPSBkZXJpdmVDaGVja3N1bUJpdHMoZW50cm9weSk7XG4gIGNvbnN0IGJpdHMgPSBbXTtcbiAgZm9yIChjb25zdCBiIG9mIGVudHJvcHkpIHtcbiAgICBmb3IgKGxldCBpID0gNzsgaSA+PSAwOyBpLS0pIGJpdHMucHVzaCgoYiA+PiBpKSAmIDEpO1xuICB9XG4gIGJpdHMucHVzaCguLi5jaGVja3N1bSk7XG4gIGNvbnN0IGNodW5rcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJpdHMubGVuZ3RoOyBpICs9IDExKSB7XG4gICAgY2h1bmtzLnB1c2goYmluYXJ5VG9Xb3JkKGJpdHMuc2xpY2UoaSwgaSArIDExKSwgd2wpKTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJyAnKTtcbn1cblxuLyoqXG4gKiBDU1BSTkcgYnl0ZXMuIE5vZGUgYGNyeXB0by5yYW5kb21CeXRlc2Agd2hlbiBwcmVzZW50OyBvdGhlcndpc2UgV2ViIENyeXB0b1xuICogYGdldFJhbmRvbVZhbHVlc2AgKGJyb3dzZXIgLyBBbmRyb2lkIFdlYlZpZXcpLiBTb21lIGJ1bmRsZXJzIHN0dWIgYGNyeXB0b2BcbiAqIGFzIGB7fWAsIHdoaWNoIG1ha2VzIGByYW5kb21CeXRlc2AgdGhyb3cgXCJpcyBub3QgYSBmdW5jdGlvblwiLlxuICogQHBhcmFtIHtudW1iZXJ9IG5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByYW5kb21CeXRlc1NlY3VyZSAobikge1xuICBjb25zdCBzaXplID0gbiA+Pj4gMDtcbiAgaWYgKHR5cGVvZiBjcnlwdG8ucmFuZG9tQnl0ZXMgPT09ICdmdW5jdGlvbicpIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoc2l6ZSk7XG4gIGNvbnN0IHdlYiA9ICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcy5jcnlwdG8pIHx8XG4gICAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jcnlwdG8pIHx8XG4gICAgbnVsbDtcbiAgaWYgKHdlYiAmJiB0eXBlb2Ygd2ViLmdldFJhbmRvbVZhbHVlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IG91dCA9IEJ1ZmZlci5hbGxvYyhzaXplKTtcbiAgICB3ZWIuZ2V0UmFuZG9tVmFsdWVzKG91dCk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ3NlY3VyZSByYW5kb21CeXRlcyB1bmF2YWlsYWJsZScpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RyZW5ndGg9MTI4XSAxMjgg4oaSIDEyIHdvcmRzLCAyNTYg4oaSIDI0IHdvcmRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbd29yZGxpc3RdXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZU1uZW1vbmljIChzdHJlbmd0aCA9IDEyOCwgd29yZGxpc3QgPSBERUZBVUxUX1dPUkRMSVNUKSB7XG4gIHJlc29sdmVXb3JkbGlzdCh3b3JkbGlzdCk7XG4gIGlmIChzdHJlbmd0aCAlIDMyICE9PSAwIHx8IHN0cmVuZ3RoIDwgMTI4IHx8IHN0cmVuZ3RoID4gMjU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdHJlbmd0aCBtdXN0IGJlIDEyOOKAkzI1NiBpbiBzdGVwcyBvZiAzMicpO1xuICB9XG4gIGNvbnN0IGVudHJvcHkgPSByYW5kb21CeXRlc1NlY3VyZShzdHJlbmd0aCAvIDgpO1xuICByZXR1cm4gZW50cm9weVRvTW5lbW9uaWMoZW50cm9weSwgd29yZGxpc3QpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtbmVtb25pY1xuICogQHBhcmFtIHtzdHJpbmdbXX0gW3dvcmRsaXN0XVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTW5lbW9uaWMgKG1uZW1vbmljLCB3b3JkbGlzdCA9IERFRkFVTFRfV09SRExJU1QpIHtcbiAgY29uc3Qgd2wgPSByZXNvbHZlV29yZGxpc3Qod29yZGxpc3QpO1xuICBjb25zdCBuID0gbm9ybWFsaXplKG1uZW1vbmljKTtcbiAgaWYgKCFuKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHdvcmRzID0gbi5zcGxpdCgnICcpO1xuICBpZiAoIU1ORU1PTklDX1dPUkRfQ09VTlRTLmluY2x1ZGVzKHdvcmRzLmxlbmd0aCkpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgc2V0ID0gbmV3IFNldCh3bCk7XG4gIGlmICghd29yZHMuZXZlcnkoKHcpID0+IHNldC5oYXModykpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgbW5lbW9uaWNUb0VudHJvcHkobiwgd2wpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW5lbW9uaWNcbiAqIEBwYXJhbSB7c3RyaW5nW119IFt3b3JkbGlzdF1cbiAqIEByZXR1cm5zIHtCdWZmZXJ9XG4gKi9cbmZ1bmN0aW9uIG1uZW1vbmljVG9FbnRyb3B5IChtbmVtb25pYywgd29yZGxpc3QgPSBERUZBVUxUX1dPUkRMSVNUKSB7XG4gIGNvbnN0IHdsID0gcmVzb2x2ZVdvcmRsaXN0KHdvcmRsaXN0KTtcbiAgY29uc3Qgd29yZHMgPSBub3JtYWxpemUobW5lbW9uaWMpLnNwbGl0KCcgJyk7XG4gIGlmICghTU5FTU9OSUNfV09SRF9DT1VOVFMuaW5jbHVkZXMod29yZHMubGVuZ3RoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtbmVtb25pYyBsZW5ndGggKHVzZSAxMiwgMTUsIDE4LCAyMSwgb3IgMjQgd29yZHMpJyk7XG4gIH1cbiAgY29uc3QgYml0cyA9IFtdO1xuICBmb3IgKGNvbnN0IHcgb2Ygd29yZHMpIHtcbiAgICBjb25zdCBpZHggPSB3bC5pbmRleE9mKHcpO1xuICAgIGlmIChpZHggPCAwKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gd29yZDogJHt3fWApO1xuICAgIGZvciAobGV0IGkgPSAxMDsgaSA+PSAwOyBpLS0pIGJpdHMucHVzaCgoaWR4ID4+IGkpICYgMSk7XG4gIH1cbiAgY29uc3QgZGl2aWRlciA9IE1hdGguZmxvb3IoYml0cy5sZW5ndGggLyAzMykgKiAzMjtcbiAgY29uc3QgZW50cm9weUJpdHMgPSBiaXRzLnNsaWNlKDAsIGRpdmlkZXIpO1xuICBjb25zdCBjaGVja3N1bUJpdHMgPSBiaXRzLnNsaWNlKGRpdmlkZXIpO1xuICBjb25zdCBlbnRyb3B5ID0gQnVmZmVyLmFsbG9jKGVudHJvcHlCaXRzLmxlbmd0aCAvIDgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJvcHkubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgdiA9IDA7XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCA4OyBqKyspIHYgPSAodiA8PCAxKSB8IGVudHJvcHlCaXRzW2kgKiA4ICsgal07XG4gICAgZW50cm9weVtpXSA9IHY7XG4gIH1cbiAgY29uc3QgZXhwZWN0ZWQgPSBkZXJpdmVDaGVja3N1bUJpdHMoZW50cm9weSk7XG4gIGlmIChleHBlY3RlZC5sZW5ndGggIT09IGNoZWNrc3VtQml0cy5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignQ2hlY2tzdW0gbGVuZ3RoIG1pc21hdGNoJyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZXhwZWN0ZWRbaV0gIT09IGNoZWNrc3VtQml0c1tpXSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNoZWNrc3VtJyk7XG4gIH1cbiAgcmV0dXJuIGVudHJvcHk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtbmVtb25pY1RvU2VlZCxcbiAgbW5lbW9uaWNUb1NlZWRTeW5jLFxuICBlbnRyb3B5VG9NbmVtb25pYyxcbiAgZ2VuZXJhdGVNbmVtb25pYyxcbiAgdmFsaWRhdGVNbmVtb25pYyxcbiAgbW5lbW9uaWNUb0VudHJvcHksXG4gIGRlZmF1bHRXb3JkbGlzdDogREVGQVVMVF9XT1JETElTVFxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/bip39.js\n\n}")},"./node_modules/@fabric/core/functions/bytes.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * Normalized byte views for crypto pipelines.\n *\n * **Why one module:** duplicate `toU8` helpers across encoders and curves tend to drift\n * (Buffer vs Uint8Array order, throw vs coerce). Downstream, that becomes inconsistent\n * signatures, hashes, or address parsing between Node and browser bundles — a useful\n * wedge for differential bugs. Keep coercion rules centralized and tested.\n *\n * @module functions/bytes\n */\n\n/**\n * Wire / encoding inputs: only Node `Buffer` or `Uint8Array`. Reject everything else.\n * @param {Buffer|Uint8Array} input\n * @returns {Uint8Array}\n */\nfunction toUint8Strict (input) {\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer && Buffer.isBuffer(input)) {\n return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n }\n if (input instanceof Uint8Array) return input;\n throw new TypeError('expected Buffer or Uint8Array');\n}\n\nfunction _enforceMax (u8, maxLength, label) {\n if (maxLength == null || !Number.isFinite(maxLength) || maxLength < 0) return;\n if (u8.length > maxLength) {\n throw new RangeError(`${label}: length ${u8.length} exceeds maxLength ${maxLength}`);\n }\n}\n\nfunction _isByte (v) {\n return Number.isInteger(v) && v >= 0 && v <= 255;\n}\n\n/**\n * Pack four 0–255 byte values as a big-endian uint32 (for protocol constants without large literals).\n * @param {number} a\n * @param {number} b\n * @param {number} c\n * @param {number} d\n * @returns {number}\n */\nfunction u32be (a, b, c, d) {\n return ((a & 255) << 24) | ((b & 255) << 16) | ((c & 255) << 8) | (d & 255);\n}\n\nfunction _bytesFromIterable (iterable, maxLength) {\n const out = [];\n let i = 0;\n for (const v of iterable) {\n if (!_isByte(v)) {\n throw new TypeError('toUint8Flexible: expected integer byte 0–255');\n }\n out.push(v);\n i++;\n if (maxLength != null && Number.isFinite(maxLength) && i > maxLength) {\n throw new RangeError(`toUint8Flexible: length exceeds maxLength ${maxLength}`);\n }\n }\n return new Uint8Array(out);\n}\n\n/**\n * Noble / secp256k1 call sites that must accept browser-friendly inputs already vetted\n * by callers (e.g. key material as Buffer, hex-decoded bytes, or typed arrays).\n * Optional **`maxLength`** bounds allocation for array-likes and iterables (DoS hardening).\n * Rejects strings (use explicit encoding) and non-byte values (no silent modular wrap).\n * @param {Buffer|Uint8Array|ArrayLike|Iterable} bytes\n * @param {number} [maxLength] — when set, reject views longer than this\n * @returns {Uint8Array}\n */\nfunction toUint8Flexible (bytes, maxLength) {\n if (typeof bytes === 'string') {\n throw new TypeError('toUint8Flexible: string input is not allowed; decode to bytes explicitly');\n }\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer && Buffer.isBuffer(bytes)) {\n const u8 = new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n _enforceMax(u8, maxLength, 'toUint8Flexible');\n return u8;\n }\n if (bytes instanceof Uint8Array) {\n _enforceMax(bytes, maxLength, 'toUint8Flexible');\n return bytes;\n }\n const len = bytes != null && typeof bytes.length === 'number' && Number.isFinite(bytes.length)\n ? bytes.length\n : null;\n if (len != null) {\n if (maxLength != null && Number.isFinite(maxLength) && len > maxLength) {\n throw new RangeError(`toUint8Flexible: array-like length ${len} exceeds maxLength ${maxLength}`);\n }\n const out = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n const v = bytes[i];\n if (!_isByte(v)) {\n throw new TypeError(`toUint8Flexible: expected integer byte 0–255 at index ${i}`);\n }\n out[i] = v;\n }\n return out;\n }\n if (bytes != null && typeof bytes[Symbol.iterator] === 'function') {\n return _bytesFromIterable(bytes, maxLength);\n }\n throw new TypeError('toUint8Flexible: expected Buffer, Uint8Array, array-like, or iterable of bytes');\n}\n\nmodule.exports = {\n toUint8Strict,\n toUint8Flexible,\n u32be\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9ieXRlcy5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYSxNQUFNLG9CQUFvQixNQUFNLGFBQWEsTUFBTTtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixNQUFNLFdBQVcsV0FBVyxvQkFBb0IsVUFBVTtBQUN0RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RSxVQUFVO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNEQUFzRDtBQUNqRSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RTtBQUNBLGFBQWEsTUFBTSxvQkFBb0IsTUFBTSxhQUFhLE1BQU07QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsS0FBSyxvQkFBb0IsVUFBVTtBQUNwRztBQUNBO0FBQ0Esb0JBQW9CLFNBQVM7QUFDN0I7QUFDQTtBQUNBLHFGQUFxRixFQUFFO0FBQ3ZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvZnVuY3Rpb25zL2J5dGVzLmpzP2M0ZjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE5vcm1hbGl6ZWQgYnl0ZSB2aWV3cyBmb3IgY3J5cHRvIHBpcGVsaW5lcy5cbiAqXG4gKiAqKldoeSBvbmUgbW9kdWxlOioqIGR1cGxpY2F0ZSBgdG9VOGAgaGVscGVycyBhY3Jvc3MgZW5jb2RlcnMgYW5kIGN1cnZlcyB0ZW5kIHRvIGRyaWZ0XG4gKiAoQnVmZmVyIHZzIFVpbnQ4QXJyYXkgb3JkZXIsIHRocm93IHZzIGNvZXJjZSkuIERvd25zdHJlYW0sIHRoYXQgYmVjb21lcyBpbmNvbnNpc3RlbnRcbiAqIHNpZ25hdHVyZXMsIGhhc2hlcywgb3IgYWRkcmVzcyBwYXJzaW5nIGJldHdlZW4gTm9kZSBhbmQgYnJvd3NlciBidW5kbGVzIOKAlCBhIHVzZWZ1bFxuICogd2VkZ2UgZm9yIGRpZmZlcmVudGlhbCBidWdzLiBLZWVwIGNvZXJjaW9uIHJ1bGVzIGNlbnRyYWxpemVkIGFuZCB0ZXN0ZWQuXG4gKlxuICogQG1vZHVsZSBmdW5jdGlvbnMvYnl0ZXNcbiAqL1xuXG4vKipcbiAqIFdpcmUgLyBlbmNvZGluZyBpbnB1dHM6IG9ubHkgTm9kZSBgQnVmZmVyYCBvciBgVWludDhBcnJheWAuIFJlamVjdCBldmVyeXRoaW5nIGVsc2UuXG4gKiBAcGFyYW0ge0J1ZmZlcnxVaW50OEFycmF5fSBpbnB1dFxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvVWludDhTdHJpY3QgKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBCdWZmZXIuaXNCdWZmZXIgJiYgQnVmZmVyLmlzQnVmZmVyKGlucHV0KSkge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShpbnB1dC5idWZmZXIsIGlucHV0LmJ5dGVPZmZzZXQsIGlucHV0LmJ5dGVMZW5ndGgpO1xuICB9XG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiBpbnB1dDtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtcbn1cblxuZnVuY3Rpb24gX2VuZm9yY2VNYXggKHU4LCBtYXhMZW5ndGgsIGxhYmVsKSB7XG4gIGlmIChtYXhMZW5ndGggPT0gbnVsbCB8fCAhTnVtYmVyLmlzRmluaXRlKG1heExlbmd0aCkgfHwgbWF4TGVuZ3RoIDwgMCkgcmV0dXJuO1xuICBpZiAodTgubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCR7bGFiZWx9OiBsZW5ndGggJHt1OC5sZW5ndGh9IGV4Y2VlZHMgbWF4TGVuZ3RoICR7bWF4TGVuZ3RofWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9pc0J5dGUgKHYpIHtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodikgJiYgdiA+PSAwICYmIHYgPD0gMjU1O1xufVxuXG4vKipcbiAqIFBhY2sgZm91ciAw4oCTMjU1IGJ5dGUgdmFsdWVzIGFzIGEgYmlnLWVuZGlhbiB1aW50MzIgKGZvciBwcm90b2NvbCBjb25zdGFudHMgd2l0aG91dCBsYXJnZSBsaXRlcmFscykuXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjXG4gKiBAcGFyYW0ge251bWJlcn0gZFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gdTMyYmUgKGEsIGIsIGMsIGQpIHtcbiAgcmV0dXJuICgoYSAmIDI1NSkgPDwgMjQpIHwgKChiICYgMjU1KSA8PCAxNikgfCAoKGMgJiAyNTUpIDw8IDgpIHwgKGQgJiAyNTUpO1xufVxuXG5mdW5jdGlvbiBfYnl0ZXNGcm9tSXRlcmFibGUgKGl0ZXJhYmxlLCBtYXhMZW5ndGgpIHtcbiAgY29uc3Qgb3V0ID0gW107XG4gIGxldCBpID0gMDtcbiAgZm9yIChjb25zdCB2IG9mIGl0ZXJhYmxlKSB7XG4gICAgaWYgKCFfaXNCeXRlKHYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0b1VpbnQ4RmxleGlibGU6IGV4cGVjdGVkIGludGVnZXIgYnl0ZSAw4oCTMjU1Jyk7XG4gICAgfVxuICAgIG91dC5wdXNoKHYpO1xuICAgIGkrKztcbiAgICBpZiAobWF4TGVuZ3RoICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKG1heExlbmd0aCkgJiYgaSA+IG1heExlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYHRvVWludDhGbGV4aWJsZTogbGVuZ3RoIGV4Y2VlZHMgbWF4TGVuZ3RoICR7bWF4TGVuZ3RofWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkob3V0KTtcbn1cblxuLyoqXG4gKiBOb2JsZSAvIHNlY3AyNTZrMSBjYWxsIHNpdGVzIHRoYXQgbXVzdCBhY2NlcHQgYnJvd3Nlci1mcmllbmRseSBpbnB1dHMgYWxyZWFkeSB2ZXR0ZWRcbiAqIGJ5IGNhbGxlcnMgKGUuZy4ga2V5IG1hdGVyaWFsIGFzIEJ1ZmZlciwgaGV4LWRlY29kZWQgYnl0ZXMsIG9yIHR5cGVkIGFycmF5cykuXG4gKiBPcHRpb25hbCAqKmBtYXhMZW5ndGhgKiogYm91bmRzIGFsbG9jYXRpb24gZm9yIGFycmF5LWxpa2VzIGFuZCBpdGVyYWJsZXMgKERvUyBoYXJkZW5pbmcpLlxuICogUmVqZWN0cyBzdHJpbmdzICh1c2UgZXhwbGljaXQgZW5jb2RpbmcpIGFuZCBub24tYnl0ZSB2YWx1ZXMgKG5vIHNpbGVudCBtb2R1bGFyIHdyYXApLlxuICogQHBhcmFtIHtCdWZmZXJ8VWludDhBcnJheXxBcnJheUxpa2U8bnVtYmVyPnxJdGVyYWJsZTxudW1iZXI+fSBieXRlc1xuICogQHBhcmFtIHtudW1iZXJ9IFttYXhMZW5ndGhdIOKAlCB3aGVuIHNldCwgcmVqZWN0IHZpZXdzIGxvbmdlciB0aGFuIHRoaXNcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fVxuICovXG5mdW5jdGlvbiB0b1VpbnQ4RmxleGlibGUgKGJ5dGVzLCBtYXhMZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0b1VpbnQ4RmxleGlibGU6IHN0cmluZyBpbnB1dCBpcyBub3QgYWxsb3dlZDsgZGVjb2RlIHRvIGJ5dGVzIGV4cGxpY2l0bHknKTtcbiAgfVxuICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQnVmZmVyLmlzQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihieXRlcykpIHtcbiAgICBjb25zdCB1OCA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmJ1ZmZlciwgYnl0ZXMuYnl0ZU9mZnNldCwgYnl0ZXMuYnl0ZUxlbmd0aCk7XG4gICAgX2VuZm9yY2VNYXgodTgsIG1heExlbmd0aCwgJ3RvVWludDhGbGV4aWJsZScpO1xuICAgIHJldHVybiB1ODtcbiAgfVxuICBpZiAoYnl0ZXMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgX2VuZm9yY2VNYXgoYnl0ZXMsIG1heExlbmd0aCwgJ3RvVWludDhGbGV4aWJsZScpO1xuICAgIHJldHVybiBieXRlcztcbiAgfVxuICBjb25zdCBsZW4gPSBieXRlcyAhPSBudWxsICYmIHR5cGVvZiBieXRlcy5sZW5ndGggPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShieXRlcy5sZW5ndGgpXG4gICAgPyBieXRlcy5sZW5ndGhcbiAgICA6IG51bGw7XG4gIGlmIChsZW4gIT0gbnVsbCkge1xuICAgIGlmIChtYXhMZW5ndGggIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUobWF4TGVuZ3RoKSAmJiBsZW4gPiBtYXhMZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGB0b1VpbnQ4RmxleGlibGU6IGFycmF5LWxpa2UgbGVuZ3RoICR7bGVufSBleGNlZWRzIG1heExlbmd0aCAke21heExlbmd0aH1gKTtcbiAgICB9XG4gICAgY29uc3Qgb3V0ID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCB2ID0gYnl0ZXNbaV07XG4gICAgICBpZiAoIV9pc0J5dGUodikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgdG9VaW50OEZsZXhpYmxlOiBleHBlY3RlZCBpbnRlZ2VyIGJ5dGUgMOKAkzI1NSBhdCBpbmRleCAke2l9YCk7XG4gICAgICB9XG4gICAgICBvdXRbaV0gPSB2O1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGlmIChieXRlcyAhPSBudWxsICYmIHR5cGVvZiBieXRlc1tTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIF9ieXRlc0Zyb21JdGVyYWJsZShieXRlcywgbWF4TGVuZ3RoKTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0b1VpbnQ4RmxleGlibGU6IGV4cGVjdGVkIEJ1ZmZlciwgVWludDhBcnJheSwgYXJyYXktbGlrZSwgb3IgaXRlcmFibGUgb2YgYnl0ZXMnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHRvVWludDhTdHJpY3QsXG4gIHRvVWludDhGbGV4aWJsZSxcbiAgdTMyYmVcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/bytes.js\n\n}")},"./node_modules/@fabric/core/functions/executionProgramRunner.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n/**\n * Full {@link Machine}/{@link Program} runner for Hub-style execution programs\n * (`language: 'fabric-execution'`): structured `{ op, ... }` steps with a real\n * stack (Push/Pop/Dup/ADD/FabricOpcode/DelegationSignRequest).\n *\n * @module functions/executionProgramRunner\n * @see docs/PROGRAM.md\n */\n\nconst { jsonSafe } = __webpack_require__(/*! ./fabricCanonicalJson */ \"./node_modules/@fabric/core/functions/fabricCanonicalJson.js\");\nconst {\n opcodeAllowed,\n opcodesFromGenesis,\n normalizeOpcodeAllowList\n} = __webpack_require__(/*! ./opcodeAllowList */ \"./node_modules/@fabric/core/functions/opcodeAllowList.js\");\n\nconst DEFAULT_MAX_STEPS = 256;\nconst DEFAULT_MAX_STACK = 64;\nconst DEFAULT_MAX_DEPTH = 16;\nconst DEFAULT_MAX_TRACE = 512;\n\n/** Outer wire names that are transport keepalives — not allowed in FabricOpcode steps. */\nconst NON_EXECUTION_FABRIC_TYPES = new Set(['Ping', 'Pong']);\n\n/**\n * Optional Hub registry resolver. Core stays free of Hub deps; Hub injects\n * `options.resolveFabricEntry` or we no-op metadata frames.\n * @type {null|function}\n */\nlet _resolveFabricEntry = null;\n\n/**\n * @param {function} fn `(step) => { name, opcodeDec, stability?, encoding?, notes? }`\n */\nfunction setFabricEntryResolver (fn) {\n _resolveFabricEntry = typeof fn === 'function' ? fn : null;\n}\n\nfunction assertPlainJson (value, depth, maxDepth) {\n if (depth > maxDepth) throw new Error('value exceeds max nesting depth');\n if (value === null) return;\n const t = typeof value;\n if (t === 'string' || t === 'number' || t === 'boolean') {\n if (t === 'number' && !Number.isFinite(value)) throw new Error('non-finite number not allowed');\n return;\n }\n if (t === 'bigint' || t === 'function' || t === 'symbol' || t === 'undefined') {\n throw new Error('unsupported value type in Push');\n }\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) assertPlainJson(value[i], depth + 1, maxDepth);\n return;\n }\n if (t === 'object') {\n const proto = Object.getPrototypeOf(value);\n if (proto !== Object.prototype && proto !== null) throw new Error('non-plain object in Push');\n const keys = Object.keys(value);\n for (let i = 0; i < keys.length; i++) assertPlainJson(value[keys[i]], depth + 1, maxDepth);\n }\n}\n\nfunction normalizeOpName (op) {\n const raw = String(op || '').trim();\n if (!raw) return '';\n const lower = raw.toLowerCase();\n const map = {\n push: 'Push',\n pop: 'Pop',\n dup: 'Dup',\n add: 'ADD',\n fabricopcode: 'FabricOpcode',\n delegationsignrequest: 'DelegationSignRequest'\n };\n return map[lower] || raw;\n}\n\nfunction defaultResolveFabricEntry (step) {\n if (_resolveFabricEntry) return _resolveFabricEntry(step);\n const hasName = step.fabricType != null && String(step.fabricType).trim() !== '';\n const name = hasName ? String(step.fabricType).trim() : 'Unknown';\n if (NON_EXECUTION_FABRIC_TYPES.has(name)) {\n throw new Error(`${name} is a transport keepalive, not an Execution program opcode`);\n }\n const opcodeDec = step.fabricOpcode != null ? Number(step.fabricOpcode) : null;\n return {\n name,\n opcodeDec: Number.isFinite(opcodeDec) ? opcodeDec : null,\n stability: null,\n encoding: null,\n notes: null\n };\n}\n\n/**\n * Content-address a Hub execution program via {@link Program}.\n * @param {object} program `{ version?, steps: [...] }`\n * @returns {{ program: object, programHash: string }}\n */\nfunction executionProgramFromHub (program) {\n const Program = __webpack_require__(/*! ../types/program */ \"./node_modules/@fabric/core/types/program.js\");\n const safe = jsonSafe(program && typeof program === 'object' ? program : {});\n const prog = Program.from({\n language: 'fabric-execution',\n source: safe\n });\n const compiled = prog.compile();\n if (!compiled.ok) {\n throw new Error(compiled.error || 'fabric-execution compile failed');\n }\n return { program: prog, programHash: prog.programHash };\n}\n\n/**\n * Run structured execution steps on a {@link Machine} stack.\n *\n * Allow-list precedence when `options.machine` is injected:\n * 1. non-empty `options.allowedOpcodes` / genesis opcodes (applied via\n * `setAllowedOpcodes`)\n * 2. otherwise the Machine's existing `allowedOpcodes`\n *\n * @param {object} program Hub `{ steps: [...] }`\n * @param {object} [options]\n * @param {string[]} [options.allowedOpcodes]\n * @param {object} [options.genesis]\n * @param {import('../types/machine')} [options.machine]\n * @returns {{\n * ok: boolean,\n * stepsExecuted?: number,\n * stack?: any[],\n * trace?: any[],\n * error?: string,\n * programHash?: string|null,\n * runCommitmentHex?: string|null,\n * program?: object|null,\n * machine?: object|null\n * }}\n */\nfunction runExecutionProgram (program, options = {}) {\n const steps = program && program.steps;\n if (!Array.isArray(steps)) {\n return { ok: false, error: 'program.steps must be an array', programHash: null, runCommitmentHex: null };\n }\n\n const maxSteps = Math.min(Math.max(1, Number(options.maxSteps) || DEFAULT_MAX_STEPS), 4096);\n const maxStack = Math.min(Math.max(1, Number(options.maxStack) || DEFAULT_MAX_STACK), 256);\n const maxDepth = Math.min(Math.max(1, Number(options.maxDepth) || DEFAULT_MAX_DEPTH), 64);\n const maxTrace = Math.min(Math.max(1, Number(options.maxTrace) || DEFAULT_MAX_TRACE), 8192);\n const resolveFabricEntry = typeof options.resolveFabricEntry === 'function'\n ? options.resolveFabricEntry\n : defaultResolveFabricEntry;\n\n if (steps.length > maxSteps) {\n return {\n ok: false,\n error: `program exceeds maxSteps (${maxSteps})`,\n programHash: null,\n runCommitmentHex: null\n };\n }\n\n let prog = null;\n let programHash = null;\n try {\n const built = executionProgramFromHub(program);\n prog = built.program;\n programHash = built.programHash;\n } catch (e) {\n return {\n ok: false,\n error: e && e.message ? e.message : String(e),\n programHash: null,\n runCommitmentHex: null\n };\n }\n\n const Machine = __webpack_require__(/*! ../types/machine */ \"./node_modules/@fabric/core/types/machine.js\");\n let allowList = normalizeOpcodeAllowList(options.allowedOpcodes || []);\n if (!allowList.length && options.genesis) {\n allowList = opcodesFromGenesis(options.genesis);\n }\n const machine = options.machine instanceof Machine\n ? options.machine\n : new Machine({\n deterministic: true,\n allowedOpcodes: allowList.length ? allowList : null\n });\n if (options.machine instanceof Machine) {\n if (allowList.length) {\n // Prefer explicit opts / genesis list over any preloaded Machine allow-list.\n machine.setAllowedOpcodes(allowList);\n } else {\n allowList = machine.allowedOpcodes || [];\n }\n }\n\n // Structured execution owns the stack; clear any prior compute residue.\n machine.stack = [];\n machine._program = prog;\n\n const stack = machine.stack;\n const trace = [];\n\n function pushTrace (entry) {\n if (trace.length >= maxTrace) {\n if (trace.length === maxTrace) trace.push({ truncated: true });\n return;\n }\n trace.push(entry);\n }\n\n const ops = Object.assign(Object.create(null), {\n FabricOpcode (step, pc) {\n const entry = resolveFabricEntry(step);\n if (NON_EXECUTION_FABRIC_TYPES.has(entry.name)) {\n throw new Error(`${entry.name} is a transport keepalive, not an Execution program opcode`);\n }\n if (!opcodeAllowed(allowList, entry.name)) {\n throw new Error(`FabricOpcode \"${entry.name}\" not in primitives.opcodes allow-list`);\n }\n const frame = {\n kind: 'fabric',\n name: entry.name,\n opcodeDec: entry.opcodeDec,\n stability: entry.stability,\n encoding: entry.encoding,\n notes: entry.notes\n };\n stack.push(frame);\n pushTrace({ pc, op: 'FabricOpcode', name: entry.name, opcodeDec: entry.opcodeDec });\n },\n Push (step, pc) {\n if (!Object.prototype.hasOwnProperty.call(step, 'value')) {\n throw new Error('Push requires value');\n }\n assertPlainJson(step.value, 0, maxDepth);\n stack.push(step.value);\n pushTrace({ pc, op: 'Push' });\n },\n Pop (_step, pc) {\n if (stack.length < 1) throw new Error('stack underflow');\n stack.pop();\n pushTrace({ pc, op: 'Pop' });\n },\n Dup (_step, pc) {\n if (stack.length < 1) throw new Error('stack underflow');\n stack.push(stack[stack.length - 1]);\n pushTrace({ pc, op: 'Dup' });\n },\n ADD (_step, pc) {\n if (stack.length < 2) throw new Error('stack underflow');\n const b = stack.pop();\n const a = stack.pop();\n if (typeof a !== 'number' || typeof b !== 'number' || !Number.isFinite(a) || !Number.isFinite(b)) {\n throw new Error('ADD requires two finite numbers');\n }\n stack.push(a + b);\n pushTrace({ pc, op: 'ADD' });\n },\n DelegationSignRequest (step, pc) {\n if (!step || typeof step.envelope !== 'object' || !step.envelope) {\n throw new Error('DelegationSignRequest requires envelope object');\n }\n assertPlainJson(step.envelope, 0, maxDepth);\n stack.push({ kind: 'DelegationSignRequest', envelope: step.envelope });\n pushTrace({ pc, op: 'DelegationSignRequest' });\n }\n });\n\n try {\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n if (!step || typeof step !== 'object') {\n return {\n ok: false,\n error: `invalid step at index ${i}`,\n trace,\n stack: stack.slice(),\n programHash,\n runCommitmentHex: null,\n program: prog,\n machine\n };\n }\n const op = normalizeOpName(step.op);\n if (!op || !Object.prototype.hasOwnProperty.call(ops, op)) {\n return {\n ok: false,\n error: `unknown op \"${step.op}\" at index ${i}`,\n trace,\n stack: stack.slice(),\n programHash,\n runCommitmentHex: null,\n program: prog,\n machine\n };\n }\n ops[op](step, i);\n if (stack.length > maxStack) {\n return {\n ok: false,\n error: 'stack overflow',\n trace,\n stack: stack.slice(),\n programHash,\n runCommitmentHex: null,\n program: prog,\n machine\n };\n }\n }\n\n ++machine.clock;\n const tip = stack.length ? stack[stack.length - 1] : null;\n machine._state.content = tip != null ? tip : machine._state.content;\n if (typeof machine.commit === 'function') machine.commit();\n\n const runCommitmentHex = prog.runCommitmentHex({ tip, stack: trace });\n return {\n ok: true,\n stepsExecuted: steps.length,\n stack: stack.slice(),\n tip,\n trace,\n programHash,\n runCommitmentHex,\n program: prog,\n machine\n };\n } catch (err) {\n return {\n ok: false,\n error: err && err.message ? err.message : String(err),\n trace,\n stack: stack.slice(),\n tip: null,\n programHash,\n runCommitmentHex: null,\n program: prog,\n machine\n };\n }\n}\n\nmodule.exports = {\n DEFAULT_MAX_STEPS,\n DEFAULT_MAX_STACK,\n DEFAULT_MAX_DEPTH,\n DEFAULT_MAX_TRACE,\n NON_EXECUTION_FABRIC_TYPES,\n setFabricEntryResolver,\n executionProgramFromHub,\n runExecutionProgram,\n normalizeOpName\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9leGVjdXRpb25Qcm9ncmFtUnVubmVyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0EsU0FBUyxjQUFjLEVBQUUsZUFBZTtBQUN4QyxtREFBbUQsU0FBUztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsV0FBVyxFQUFFLG1CQUFPLENBQUMsMkZBQXVCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxFQUFFLG1CQUFPLENBQUMsbUZBQW1COztBQUUvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0VBQWdFO0FBQ2hFO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFVBQVUsZ0JBQWdCLGdEQUFnRDtBQUNyRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsTUFBTTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdEQUFnRCxjQUFjO0FBQzlELFdBQVcsUUFBUSxXQUFXLHdCQUF3QjtBQUN0RCxlQUFlO0FBQ2Y7QUFDQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLHNFQUFrQjtBQUM1Qyw2RUFBNkU7QUFDN0U7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0Esd0NBQXdDLGVBQWU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRLGVBQWUsY0FBYztBQUNoRCxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQixXQUFXLDRCQUE0QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsU0FBUztBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsc0VBQWtCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0RBQWtELGlCQUFpQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixZQUFZO0FBQ3ZDO0FBQ0E7QUFDQSx5Q0FBeUMsV0FBVztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixzRUFBc0U7QUFDeEYsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixlQUFlO0FBQ2pDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZUFBZTtBQUNqQyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixlQUFlO0FBQ2pDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHdEQUF3RDtBQUMzRSxrQkFBa0IsaUNBQWlDO0FBQ25EO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLG9CQUFvQixrQkFBa0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsRUFBRTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsUUFBUSxhQUFhLEVBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscURBQXFELG1CQUFtQjtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvZnVuY3Rpb25zL2V4ZWN1dGlvblByb2dyYW1SdW5uZXIuanM/YjEyMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRnVsbCB7QGxpbmsgTWFjaGluZX0ve0BsaW5rIFByb2dyYW19IHJ1bm5lciBmb3IgSHViLXN0eWxlIGV4ZWN1dGlvbiBwcm9ncmFtc1xuICogKGBsYW5ndWFnZTogJ2ZhYnJpYy1leGVjdXRpb24nYCk6IHN0cnVjdHVyZWQgYHsgb3AsIC4uLiB9YCBzdGVwcyB3aXRoIGEgcmVhbFxuICogc3RhY2sgKFB1c2gvUG9wL0R1cC9BREQvRmFicmljT3Bjb2RlL0RlbGVnYXRpb25TaWduUmVxdWVzdCkuXG4gKlxuICogQG1vZHVsZSBmdW5jdGlvbnMvZXhlY3V0aW9uUHJvZ3JhbVJ1bm5lclxuICogQHNlZSBkb2NzL1BST0dSQU0ubWRcbiAqL1xuXG5jb25zdCB7IGpzb25TYWZlIH0gPSByZXF1aXJlKCcuL2ZhYnJpY0Nhbm9uaWNhbEpzb24nKTtcbmNvbnN0IHtcbiAgb3Bjb2RlQWxsb3dlZCxcbiAgb3Bjb2Rlc0Zyb21HZW5lc2lzLFxuICBub3JtYWxpemVPcGNvZGVBbGxvd0xpc3Rcbn0gPSByZXF1aXJlKCcuL29wY29kZUFsbG93TGlzdCcpO1xuXG5jb25zdCBERUZBVUxUX01BWF9TVEVQUyA9IDI1NjtcbmNvbnN0IERFRkFVTFRfTUFYX1NUQUNLID0gNjQ7XG5jb25zdCBERUZBVUxUX01BWF9ERVBUSCA9IDE2O1xuY29uc3QgREVGQVVMVF9NQVhfVFJBQ0UgPSA1MTI7XG5cbi8qKiBPdXRlciB3aXJlIG5hbWVzIHRoYXQgYXJlIHRyYW5zcG9ydCBrZWVwYWxpdmVzIOKAlCBub3QgYWxsb3dlZCBpbiBGYWJyaWNPcGNvZGUgc3RlcHMuICovXG5jb25zdCBOT05fRVhFQ1VUSU9OX0ZBQlJJQ19UWVBFUyA9IG5ldyBTZXQoWydQaW5nJywgJ1BvbmcnXSk7XG5cbi8qKlxuICogT3B0aW9uYWwgSHViIHJlZ2lzdHJ5IHJlc29sdmVyLiBDb3JlIHN0YXlzIGZyZWUgb2YgSHViIGRlcHM7IEh1YiBpbmplY3RzXG4gKiBgb3B0aW9ucy5yZXNvbHZlRmFicmljRW50cnlgIG9yIHdlIG5vLW9wIG1ldGFkYXRhIGZyYW1lcy5cbiAqIEB0eXBlIHtudWxsfGZ1bmN0aW9ufVxuICovXG5sZXQgX3Jlc29sdmVGYWJyaWNFbnRyeSA9IG51bGw7XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gYChzdGVwKSA9PiB7IG5hbWUsIG9wY29kZURlYywgc3RhYmlsaXR5PywgZW5jb2Rpbmc/LCBub3Rlcz8gfWBcbiAqL1xuZnVuY3Rpb24gc2V0RmFicmljRW50cnlSZXNvbHZlciAoZm4pIHtcbiAgX3Jlc29sdmVGYWJyaWNFbnRyeSA9IHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyA/IGZuIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0UGxhaW5Kc29uICh2YWx1ZSwgZGVwdGgsIG1heERlcHRoKSB7XG4gIGlmIChkZXB0aCA+IG1heERlcHRoKSB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlIGV4Y2VlZHMgbWF4IG5lc3RpbmcgZGVwdGgnKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm47XG4gIGNvbnN0IHQgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0ID09PSAnc3RyaW5nJyB8fCB0ID09PSAnbnVtYmVyJyB8fCB0ID09PSAnYm9vbGVhbicpIHtcbiAgICBpZiAodCA9PT0gJ251bWJlcicgJiYgIU51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcignbm9uLWZpbml0ZSBudW1iZXIgbm90IGFsbG93ZWQnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHQgPT09ICdiaWdpbnQnIHx8IHQgPT09ICdmdW5jdGlvbicgfHwgdCA9PT0gJ3N5bWJvbCcgfHwgdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIHZhbHVlIHR5cGUgaW4gUHVzaCcpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIGFzc2VydFBsYWluSnNvbih2YWx1ZVtpXSwgZGVwdGggKyAxLCBtYXhEZXB0aCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh0ID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgICBpZiAocHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IG5ldyBFcnJvcignbm9uLXBsYWluIG9iamVjdCBpbiBQdXNoJyk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIGFzc2VydFBsYWluSnNvbih2YWx1ZVtrZXlzW2ldXSwgZGVwdGggKyAxLCBtYXhEZXB0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplT3BOYW1lIChvcCkge1xuICBjb25zdCByYXcgPSBTdHJpbmcob3AgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFyYXcpIHJldHVybiAnJztcbiAgY29uc3QgbG93ZXIgPSByYXcudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgbWFwID0ge1xuICAgIHB1c2g6ICdQdXNoJyxcbiAgICBwb3A6ICdQb3AnLFxuICAgIGR1cDogJ0R1cCcsXG4gICAgYWRkOiAnQUREJyxcbiAgICBmYWJyaWNvcGNvZGU6ICdGYWJyaWNPcGNvZGUnLFxuICAgIGRlbGVnYXRpb25zaWducmVxdWVzdDogJ0RlbGVnYXRpb25TaWduUmVxdWVzdCdcbiAgfTtcbiAgcmV0dXJuIG1hcFtsb3dlcl0gfHwgcmF3O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0UmVzb2x2ZUZhYnJpY0VudHJ5IChzdGVwKSB7XG4gIGlmIChfcmVzb2x2ZUZhYnJpY0VudHJ5KSByZXR1cm4gX3Jlc29sdmVGYWJyaWNFbnRyeShzdGVwKTtcbiAgY29uc3QgaGFzTmFtZSA9IHN0ZXAuZmFicmljVHlwZSAhPSBudWxsICYmIFN0cmluZyhzdGVwLmZhYnJpY1R5cGUpLnRyaW0oKSAhPT0gJyc7XG4gIGNvbnN0IG5hbWUgPSBoYXNOYW1lID8gU3RyaW5nKHN0ZXAuZmFicmljVHlwZSkudHJpbSgpIDogJ1Vua25vd24nO1xuICBpZiAoTk9OX0VYRUNVVElPTl9GQUJSSUNfVFlQRVMuaGFzKG5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IGlzIGEgdHJhbnNwb3J0IGtlZXBhbGl2ZSwgbm90IGFuIEV4ZWN1dGlvbiBwcm9ncmFtIG9wY29kZWApO1xuICB9XG4gIGNvbnN0IG9wY29kZURlYyA9IHN0ZXAuZmFicmljT3Bjb2RlICE9IG51bGwgPyBOdW1iZXIoc3RlcC5mYWJyaWNPcGNvZGUpIDogbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBuYW1lLFxuICAgIG9wY29kZURlYzogTnVtYmVyLmlzRmluaXRlKG9wY29kZURlYykgPyBvcGNvZGVEZWMgOiBudWxsLFxuICAgIHN0YWJpbGl0eTogbnVsbCxcbiAgICBlbmNvZGluZzogbnVsbCxcbiAgICBub3RlczogbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIENvbnRlbnQtYWRkcmVzcyBhIEh1YiBleGVjdXRpb24gcHJvZ3JhbSB2aWEge0BsaW5rIFByb2dyYW19LlxuICogQHBhcmFtIHtvYmplY3R9IHByb2dyYW0gYHsgdmVyc2lvbj8sIHN0ZXBzOiBbLi4uXSB9YFxuICogQHJldHVybnMge3sgcHJvZ3JhbTogb2JqZWN0LCBwcm9ncmFtSGFzaDogc3RyaW5nIH19XG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGlvblByb2dyYW1Gcm9tSHViIChwcm9ncmFtKSB7XG4gIGNvbnN0IFByb2dyYW0gPSByZXF1aXJlKCcuLi90eXBlcy9wcm9ncmFtJyk7XG4gIGNvbnN0IHNhZmUgPSBqc29uU2FmZShwcm9ncmFtICYmIHR5cGVvZiBwcm9ncmFtID09PSAnb2JqZWN0JyA/IHByb2dyYW0gOiB7fSk7XG4gIGNvbnN0IHByb2cgPSBQcm9ncmFtLmZyb20oe1xuICAgIGxhbmd1YWdlOiAnZmFicmljLWV4ZWN1dGlvbicsXG4gICAgc291cmNlOiBzYWZlXG4gIH0pO1xuICBjb25zdCBjb21waWxlZCA9IHByb2cuY29tcGlsZSgpO1xuICBpZiAoIWNvbXBpbGVkLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGNvbXBpbGVkLmVycm9yIHx8ICdmYWJyaWMtZXhlY3V0aW9uIGNvbXBpbGUgZmFpbGVkJyk7XG4gIH1cbiAgcmV0dXJuIHsgcHJvZ3JhbTogcHJvZywgcHJvZ3JhbUhhc2g6IHByb2cucHJvZ3JhbUhhc2ggfTtcbn1cblxuLyoqXG4gKiBSdW4gc3RydWN0dXJlZCBleGVjdXRpb24gc3RlcHMgb24gYSB7QGxpbmsgTWFjaGluZX0gc3RhY2suXG4gKlxuICogQWxsb3ctbGlzdCBwcmVjZWRlbmNlIHdoZW4gYG9wdGlvbnMubWFjaGluZWAgaXMgaW5qZWN0ZWQ6XG4gKiAxLiBub24tZW1wdHkgYG9wdGlvbnMuYWxsb3dlZE9wY29kZXNgIC8gZ2VuZXNpcyBvcGNvZGVzIChhcHBsaWVkIHZpYVxuICogICAgYHNldEFsbG93ZWRPcGNvZGVzYClcbiAqIDIuIG90aGVyd2lzZSB0aGUgTWFjaGluZSdzIGV4aXN0aW5nIGBhbGxvd2VkT3Bjb2Rlc2BcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvZ3JhbSBIdWIgYHsgc3RlcHM6IFsuLi5dIH1gXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbb3B0aW9ucy5hbGxvd2VkT3Bjb2Rlc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucy5nZW5lc2lzXVxuICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL21hY2hpbmUnKX0gW29wdGlvbnMubWFjaGluZV1cbiAqIEByZXR1cm5zIHt7XG4gKiAgIG9rOiBib29sZWFuLFxuICogICBzdGVwc0V4ZWN1dGVkPzogbnVtYmVyLFxuICogICBzdGFjaz86IGFueVtdLFxuICogICB0cmFjZT86IGFueVtdLFxuICogICBlcnJvcj86IHN0cmluZyxcbiAqICAgcHJvZ3JhbUhhc2g/OiBzdHJpbmd8bnVsbCxcbiAqICAgcnVuQ29tbWl0bWVudEhleD86IHN0cmluZ3xudWxsLFxuICogICBwcm9ncmFtPzogb2JqZWN0fG51bGwsXG4gKiAgIG1hY2hpbmU/OiBvYmplY3R8bnVsbFxuICogfX1cbiAqL1xuZnVuY3Rpb24gcnVuRXhlY3V0aW9uUHJvZ3JhbSAocHJvZ3JhbSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHN0ZXBzID0gcHJvZ3JhbSAmJiBwcm9ncmFtLnN0ZXBzO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoc3RlcHMpKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ3Byb2dyYW0uc3RlcHMgbXVzdCBiZSBhbiBhcnJheScsIHByb2dyYW1IYXNoOiBudWxsLCBydW5Db21taXRtZW50SGV4OiBudWxsIH07XG4gIH1cblxuICBjb25zdCBtYXhTdGVwcyA9IE1hdGgubWluKE1hdGgubWF4KDEsIE51bWJlcihvcHRpb25zLm1heFN0ZXBzKSB8fCBERUZBVUxUX01BWF9TVEVQUyksIDQwOTYpO1xuICBjb25zdCBtYXhTdGFjayA9IE1hdGgubWluKE1hdGgubWF4KDEsIE51bWJlcihvcHRpb25zLm1heFN0YWNrKSB8fCBERUZBVUxUX01BWF9TVEFDSyksIDI1Nik7XG4gIGNvbnN0IG1heERlcHRoID0gTWF0aC5taW4oTWF0aC5tYXgoMSwgTnVtYmVyKG9wdGlvbnMubWF4RGVwdGgpIHx8IERFRkFVTFRfTUFYX0RFUFRIKSwgNjQpO1xuICBjb25zdCBtYXhUcmFjZSA9IE1hdGgubWluKE1hdGgubWF4KDEsIE51bWJlcihvcHRpb25zLm1heFRyYWNlKSB8fCBERUZBVUxUX01BWF9UUkFDRSksIDgxOTIpO1xuICBjb25zdCByZXNvbHZlRmFicmljRW50cnkgPSB0eXBlb2Ygb3B0aW9ucy5yZXNvbHZlRmFicmljRW50cnkgPT09ICdmdW5jdGlvbidcbiAgICA/IG9wdGlvbnMucmVzb2x2ZUZhYnJpY0VudHJ5XG4gICAgOiBkZWZhdWx0UmVzb2x2ZUZhYnJpY0VudHJ5O1xuXG4gIGlmIChzdGVwcy5sZW5ndGggPiBtYXhTdGVwcykge1xuICAgIHJldHVybiB7XG4gICAgICBvazogZmFsc2UsXG4gICAgICBlcnJvcjogYHByb2dyYW0gZXhjZWVkcyBtYXhTdGVwcyAoJHttYXhTdGVwc30pYCxcbiAgICAgIHByb2dyYW1IYXNoOiBudWxsLFxuICAgICAgcnVuQ29tbWl0bWVudEhleDogbnVsbFxuICAgIH07XG4gIH1cblxuICBsZXQgcHJvZyA9IG51bGw7XG4gIGxldCBwcm9ncmFtSGFzaCA9IG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgYnVpbHQgPSBleGVjdXRpb25Qcm9ncmFtRnJvbUh1Yihwcm9ncmFtKTtcbiAgICBwcm9nID0gYnVpbHQucHJvZ3JhbTtcbiAgICBwcm9ncmFtSGFzaCA9IGJ1aWx0LnByb2dyYW1IYXNoO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9rOiBmYWxzZSxcbiAgICAgIGVycm9yOiBlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSxcbiAgICAgIHByb2dyYW1IYXNoOiBudWxsLFxuICAgICAgcnVuQ29tbWl0bWVudEhleDogbnVsbFxuICAgIH07XG4gIH1cblxuICBjb25zdCBNYWNoaW5lID0gcmVxdWlyZSgnLi4vdHlwZXMvbWFjaGluZScpO1xuICBsZXQgYWxsb3dMaXN0ID0gbm9ybWFsaXplT3Bjb2RlQWxsb3dMaXN0KG9wdGlvbnMuYWxsb3dlZE9wY29kZXMgfHwgW10pO1xuICBpZiAoIWFsbG93TGlzdC5sZW5ndGggJiYgb3B0aW9ucy5nZW5lc2lzKSB7XG4gICAgYWxsb3dMaXN0ID0gb3Bjb2Rlc0Zyb21HZW5lc2lzKG9wdGlvbnMuZ2VuZXNpcyk7XG4gIH1cbiAgY29uc3QgbWFjaGluZSA9IG9wdGlvbnMubWFjaGluZSBpbnN0YW5jZW9mIE1hY2hpbmVcbiAgICA/IG9wdGlvbnMubWFjaGluZVxuICAgIDogbmV3IE1hY2hpbmUoe1xuICAgICAgZGV0ZXJtaW5pc3RpYzogdHJ1ZSxcbiAgICAgIGFsbG93ZWRPcGNvZGVzOiBhbGxvd0xpc3QubGVuZ3RoID8gYWxsb3dMaXN0IDogbnVsbFxuICAgIH0pO1xuICBpZiAob3B0aW9ucy5tYWNoaW5lIGluc3RhbmNlb2YgTWFjaGluZSkge1xuICAgIGlmIChhbGxvd0xpc3QubGVuZ3RoKSB7XG4gICAgICAvLyBQcmVmZXIgZXhwbGljaXQgb3B0cyAvIGdlbmVzaXMgbGlzdCBvdmVyIGFueSBwcmVsb2FkZWQgTWFjaGluZSBhbGxvdy1saXN0LlxuICAgICAgbWFjaGluZS5zZXRBbGxvd2VkT3Bjb2RlcyhhbGxvd0xpc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGxvd0xpc3QgPSBtYWNoaW5lLmFsbG93ZWRPcGNvZGVzIHx8IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0cnVjdHVyZWQgZXhlY3V0aW9uIG93bnMgdGhlIHN0YWNrOyBjbGVhciBhbnkgcHJpb3IgY29tcHV0ZSByZXNpZHVlLlxuICBtYWNoaW5lLnN0YWNrID0gW107XG4gIG1hY2hpbmUuX3Byb2dyYW0gPSBwcm9nO1xuXG4gIGNvbnN0IHN0YWNrID0gbWFjaGluZS5zdGFjaztcbiAgY29uc3QgdHJhY2UgPSBbXTtcblxuICBmdW5jdGlvbiBwdXNoVHJhY2UgKGVudHJ5KSB7XG4gICAgaWYgKHRyYWNlLmxlbmd0aCA+PSBtYXhUcmFjZSkge1xuICAgICAgaWYgKHRyYWNlLmxlbmd0aCA9PT0gbWF4VHJhY2UpIHRyYWNlLnB1c2goeyB0cnVuY2F0ZWQ6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyYWNlLnB1c2goZW50cnkpO1xuICB9XG5cbiAgY29uc3Qgb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCB7XG4gICAgRmFicmljT3Bjb2RlIChzdGVwLCBwYykge1xuICAgICAgY29uc3QgZW50cnkgPSByZXNvbHZlRmFicmljRW50cnkoc3RlcCk7XG4gICAgICBpZiAoTk9OX0VYRUNVVElPTl9GQUJSSUNfVFlQRVMuaGFzKGVudHJ5Lm5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnRyeS5uYW1lfSBpcyBhIHRyYW5zcG9ydCBrZWVwYWxpdmUsIG5vdCBhbiBFeGVjdXRpb24gcHJvZ3JhbSBvcGNvZGVgKTtcbiAgICAgIH1cbiAgICAgIGlmICghb3Bjb2RlQWxsb3dlZChhbGxvd0xpc3QsIGVudHJ5Lm5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFicmljT3Bjb2RlIFwiJHtlbnRyeS5uYW1lfVwiIG5vdCBpbiBwcmltaXRpdmVzLm9wY29kZXMgYWxsb3ctbGlzdGApO1xuICAgICAgfVxuICAgICAgY29uc3QgZnJhbWUgPSB7XG4gICAgICAgIGtpbmQ6ICdmYWJyaWMnLFxuICAgICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgICBvcGNvZGVEZWM6IGVudHJ5Lm9wY29kZURlYyxcbiAgICAgICAgc3RhYmlsaXR5OiBlbnRyeS5zdGFiaWxpdHksXG4gICAgICAgIGVuY29kaW5nOiBlbnRyeS5lbmNvZGluZyxcbiAgICAgICAgbm90ZXM6IGVudHJ5Lm5vdGVzXG4gICAgICB9O1xuICAgICAgc3RhY2sucHVzaChmcmFtZSk7XG4gICAgICBwdXNoVHJhY2UoeyBwYywgb3A6ICdGYWJyaWNPcGNvZGUnLCBuYW1lOiBlbnRyeS5uYW1lLCBvcGNvZGVEZWM6IGVudHJ5Lm9wY29kZURlYyB9KTtcbiAgICB9LFxuICAgIFB1c2ggKHN0ZXAsIHBjKSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGVwLCAndmFsdWUnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1B1c2ggcmVxdWlyZXMgdmFsdWUnKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydFBsYWluSnNvbihzdGVwLnZhbHVlLCAwLCBtYXhEZXB0aCk7XG4gICAgICBzdGFjay5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgcHVzaFRyYWNlKHsgcGMsIG9wOiAnUHVzaCcgfSk7XG4gICAgfSxcbiAgICBQb3AgKF9zdGVwLCBwYykge1xuICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcignc3RhY2sgdW5kZXJmbG93Jyk7XG4gICAgICBzdGFjay5wb3AoKTtcbiAgICAgIHB1c2hUcmFjZSh7IHBjLCBvcDogJ1BvcCcgfSk7XG4gICAgfSxcbiAgICBEdXAgKF9zdGVwLCBwYykge1xuICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcignc3RhY2sgdW5kZXJmbG93Jyk7XG4gICAgICBzdGFjay5wdXNoKHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdKTtcbiAgICAgIHB1c2hUcmFjZSh7IHBjLCBvcDogJ0R1cCcgfSk7XG4gICAgfSxcbiAgICBBREQgKF9zdGVwLCBwYykge1xuICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDIpIHRocm93IG5ldyBFcnJvcignc3RhY2sgdW5kZXJmbG93Jyk7XG4gICAgICBjb25zdCBiID0gc3RhY2sucG9wKCk7XG4gICAgICBjb25zdCBhID0gc3RhY2sucG9wKCk7XG4gICAgICBpZiAodHlwZW9mIGEgIT09ICdudW1iZXInIHx8IHR5cGVvZiBiICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzRmluaXRlKGEpIHx8ICFOdW1iZXIuaXNGaW5pdGUoYikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBREQgcmVxdWlyZXMgdHdvIGZpbml0ZSBudW1iZXJzJyk7XG4gICAgICB9XG4gICAgICBzdGFjay5wdXNoKGEgKyBiKTtcbiAgICAgIHB1c2hUcmFjZSh7IHBjLCBvcDogJ0FERCcgfSk7XG4gICAgfSxcbiAgICBEZWxlZ2F0aW9uU2lnblJlcXVlc3QgKHN0ZXAsIHBjKSB7XG4gICAgICBpZiAoIXN0ZXAgfHwgdHlwZW9mIHN0ZXAuZW52ZWxvcGUgIT09ICdvYmplY3QnIHx8ICFzdGVwLmVudmVsb3BlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGVsZWdhdGlvblNpZ25SZXF1ZXN0IHJlcXVpcmVzIGVudmVsb3BlIG9iamVjdCcpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0UGxhaW5Kc29uKHN0ZXAuZW52ZWxvcGUsIDAsIG1heERlcHRoKTtcbiAgICAgIHN0YWNrLnB1c2goeyBraW5kOiAnRGVsZWdhdGlvblNpZ25SZXF1ZXN0JywgZW52ZWxvcGU6IHN0ZXAuZW52ZWxvcGUgfSk7XG4gICAgICBwdXNoVHJhY2UoeyBwYywgb3A6ICdEZWxlZ2F0aW9uU2lnblJlcXVlc3QnIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdGVwID0gc3RlcHNbaV07XG4gICAgICBpZiAoIXN0ZXAgfHwgdHlwZW9mIHN0ZXAgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBgaW52YWxpZCBzdGVwIGF0IGluZGV4ICR7aX1gLFxuICAgICAgICAgIHRyYWNlLFxuICAgICAgICAgIHN0YWNrOiBzdGFjay5zbGljZSgpLFxuICAgICAgICAgIHByb2dyYW1IYXNoLFxuICAgICAgICAgIHJ1bkNvbW1pdG1lbnRIZXg6IG51bGwsXG4gICAgICAgICAgcHJvZ3JhbTogcHJvZyxcbiAgICAgICAgICBtYWNoaW5lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBvcCA9IG5vcm1hbGl6ZU9wTmFtZShzdGVwLm9wKTtcbiAgICAgIGlmICghb3AgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHMsIG9wKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBlcnJvcjogYHVua25vd24gb3AgXCIke3N0ZXAub3B9XCIgYXQgaW5kZXggJHtpfWAsXG4gICAgICAgICAgdHJhY2UsXG4gICAgICAgICAgc3RhY2s6IHN0YWNrLnNsaWNlKCksXG4gICAgICAgICAgcHJvZ3JhbUhhc2gsXG4gICAgICAgICAgcnVuQ29tbWl0bWVudEhleDogbnVsbCxcbiAgICAgICAgICBwcm9ncmFtOiBwcm9nLFxuICAgICAgICAgIG1hY2hpbmVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIG9wc1tvcF0oc3RlcCwgaSk7XG4gICAgICBpZiAoc3RhY2subGVuZ3RoID4gbWF4U3RhY2spIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgZXJyb3I6ICdzdGFjayBvdmVyZmxvdycsXG4gICAgICAgICAgdHJhY2UsXG4gICAgICAgICAgc3RhY2s6IHN0YWNrLnNsaWNlKCksXG4gICAgICAgICAgcHJvZ3JhbUhhc2gsXG4gICAgICAgICAgcnVuQ29tbWl0bWVudEhleDogbnVsbCxcbiAgICAgICAgICBwcm9ncmFtOiBwcm9nLFxuICAgICAgICAgIG1hY2hpbmVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICArK21hY2hpbmUuY2xvY2s7XG4gICAgY29uc3QgdGlwID0gc3RhY2subGVuZ3RoID8gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0gOiBudWxsO1xuICAgIG1hY2hpbmUuX3N0YXRlLmNvbnRlbnQgPSB0aXAgIT0gbnVsbCA/IHRpcCA6IG1hY2hpbmUuX3N0YXRlLmNvbnRlbnQ7XG4gICAgaWYgKHR5cGVvZiBtYWNoaW5lLmNvbW1pdCA9PT0gJ2Z1bmN0aW9uJykgbWFjaGluZS5jb21taXQoKTtcblxuICAgIGNvbnN0IHJ1bkNvbW1pdG1lbnRIZXggPSBwcm9nLnJ1bkNvbW1pdG1lbnRIZXgoeyB0aXAsIHN0YWNrOiB0cmFjZSB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgb2s6IHRydWUsXG4gICAgICBzdGVwc0V4ZWN1dGVkOiBzdGVwcy5sZW5ndGgsXG4gICAgICBzdGFjazogc3RhY2suc2xpY2UoKSxcbiAgICAgIHRpcCxcbiAgICAgIHRyYWNlLFxuICAgICAgcHJvZ3JhbUhhc2gsXG4gICAgICBydW5Db21taXRtZW50SGV4LFxuICAgICAgcHJvZ3JhbTogcHJvZyxcbiAgICAgIG1hY2hpbmVcbiAgICB9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2s6IGZhbHNlLFxuICAgICAgZXJyb3I6IGVyciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICB0cmFjZSxcbiAgICAgIHN0YWNrOiBzdGFjay5zbGljZSgpLFxuICAgICAgdGlwOiBudWxsLFxuICAgICAgcHJvZ3JhbUhhc2gsXG4gICAgICBydW5Db21taXRtZW50SGV4OiBudWxsLFxuICAgICAgcHJvZ3JhbTogcHJvZyxcbiAgICAgIG1hY2hpbmVcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBERUZBVUxUX01BWF9TVEVQUyxcbiAgREVGQVVMVF9NQVhfU1RBQ0ssXG4gIERFRkFVTFRfTUFYX0RFUFRILFxuICBERUZBVUxUX01BWF9UUkFDRSxcbiAgTk9OX0VYRUNVVElPTl9GQUJSSUNfVFlQRVMsXG4gIHNldEZhYnJpY0VudHJ5UmVzb2x2ZXIsXG4gIGV4ZWN1dGlvblByb2dyYW1Gcm9tSHViLFxuICBydW5FeGVjdXRpb25Qcm9ncmFtLFxuICBub3JtYWxpemVPcE5hbWVcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/executionProgramRunner.js\n\n}")},"./node_modules/@fabric/core/functions/executionRunBridge.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * Bridge Hub ExecutionRun digests toward {@link FabricProgramRun}.\n *\n * Prefer {@link Program#runCommitmentHex} when a Program instance is supplied\n * (full Machine runner). Legacy `ExecutionRun` commitments remain as\n * `executionRunCommitmentHex`.\n *\n * @module functions/executionRunBridge\n * @see docs/PROGRAM.md\n */\n\nconst crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nconst { fabricCanonicalJson, jsonSafe } = __webpack_require__(/*! ./fabricCanonicalJson */ \"./node_modules/@fabric/core/functions/fabricCanonicalJson.js\");\n\nconst EXECUTION_RUN_KIND = 'ExecutionRun';\nconst FABRIC_PROGRAM_RUN_KIND = 'FabricProgramRun';\n\n/**\n * @param {object} [result]\n * @returns {{ ok: boolean, stepsExecuted: number|null, error: string|null, trace: any[], stack: any[] }}\n */\nfunction normalizeExecutionResult (result) {\n const r = result && typeof result === 'object' ? result : {};\n return {\n ok: !!r.ok,\n stepsExecuted: r.stepsExecuted != null ? Number(r.stepsExecuted) : null,\n error: r.ok ? null : (r.error != null ? String(r.error) : null),\n trace: Array.isArray(r.trace) ? r.trace : [],\n stack: Array.isArray(r.stack) ? r.stack : []\n };\n}\n\n/**\n * Legacy Hub digest: SHA-256 over canonical ExecutionRun body (contractId-scoped).\n * @param {string} contractId\n * @param {object} result\n * @returns {string} 64-char lowercase hex\n */\nfunction computeExecutionRunCommitmentHex (contractId, result) {\n const id = String(contractId || '').trim();\n if (!id) throw new Error('contractId required');\n const r = normalizeExecutionResult(result);\n const body = {\n version: 1,\n kind: EXECUTION_RUN_KIND,\n contractId: id,\n ok: r.ok,\n stepsExecuted: r.stepsExecuted,\n error: r.error,\n trace: r.trace,\n stack: r.stack\n };\n return crypto.createHash('sha256')\n .update(Buffer.from(fabricCanonicalJson(body), 'utf8'))\n .digest('hex');\n}\n\n/**\n * Nested ExecutionRun under FabricProgramRun (compat when no Program instance).\n * @param {object} opts\n * @returns {string}\n */\nfunction computeFabricProgramRunFromExecution (opts = {}) {\n const programHash = String(opts.programHash || '').trim().toLowerCase();\n if (!/^[0-9a-f]{64}$/.test(programHash)) {\n throw new Error('programHash required (64-hex)');\n }\n const contractId = String(opts.contractId || '').trim();\n if (!contractId) throw new Error('contractId required');\n const r = normalizeExecutionResult(opts.result);\n const body = {\n version: 1,\n kind: FABRIC_PROGRAM_RUN_KIND,\n programHash,\n result: jsonSafe({\n kind: EXECUTION_RUN_KIND,\n contractId,\n ok: r.ok,\n stepsExecuted: r.stepsExecuted,\n error: r.error,\n trace: r.trace,\n stack: r.stack\n })\n };\n return crypto.createHash('sha256')\n .update(Buffer.from(fabricCanonicalJson(body), 'utf8'))\n .digest('hex');\n}\n\n/**\n * Build forward-compatible RunExecutionContract digest fields.\n *\n * @param {object} opts\n * @param {string} opts.contractId\n * @param {string} [opts.programHash]\n * @param {object} opts.result\n * @param {object} [opts.program] Program instance with runCommitmentHex()\n * @returns {object}\n */\nfunction buildExecutionRunOutput (opts = {}) {\n const contractId = String(opts.contractId || '').trim();\n if (!contractId) throw new Error('contractId required');\n const r = normalizeExecutionResult(opts.result);\n const executionRunCommitmentHex = computeExecutionRunCommitmentHex(contractId, r);\n\n let programHashRaw = opts.programHash != null\n ? String(opts.programHash).trim().toLowerCase()\n : '';\n if (!programHashRaw && opts.program && opts.program.programHash) {\n programHashRaw = String(opts.program.programHash).trim().toLowerCase();\n }\n const programHash = /^[0-9a-f]{64}$/.test(programHashRaw) ? programHashRaw : null;\n\n let fabricProgramRunCommitmentHex = null;\n let fabricProgramRun = null;\n if (programHash) {\n if (opts.program && typeof opts.program.runCommitmentHex === 'function' && r.ok) {\n const tip = opts.result && opts.result.tip != null\n ? opts.result.tip\n : (r.stack.length ? r.stack[r.stack.length - 1] : null);\n fabricProgramRunCommitmentHex = String(opts.program.runCommitmentHex({\n tip,\n stack: r.trace.length ? r.trace : r.stack\n })).toLowerCase();\n } else if (opts.result && opts.result.runCommitmentHex &&\n /^[0-9a-f]{64}$/i.test(String(opts.result.runCommitmentHex))) {\n fabricProgramRunCommitmentHex = String(opts.result.runCommitmentHex).trim().toLowerCase();\n } else {\n fabricProgramRunCommitmentHex = computeFabricProgramRunFromExecution({\n programHash,\n contractId,\n result: r\n });\n }\n fabricProgramRun = {\n kind: FABRIC_PROGRAM_RUN_KIND,\n programHash,\n runCommitmentHex: fabricProgramRunCommitmentHex\n };\n }\n\n return {\n programHash,\n runCommitmentHex: fabricProgramRunCommitmentHex || executionRunCommitmentHex,\n executionRunCommitmentHex,\n fabricProgramRunCommitmentHex,\n fabricProgramRun\n };\n}\n\nmodule.exports = {\n EXECUTION_RUN_KIND,\n FABRIC_PROGRAM_RUN_KIND,\n normalizeExecutionResult,\n computeExecutionRunCommitmentHex,\n computeFabricProgramRunFromExecution,\n buildExecutionRunOutput\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9leGVjdXRpb25SdW5CcmlkZ2UuanMiLCJtYXBwaW5ncyI6IjtBQUFhOztBQUViO0FBQ0EsMkNBQTJDLHVCQUF1QjtBQUNsRTtBQUNBLFdBQVcsZ0NBQWdDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLG1CQUFPLENBQUMseURBQVE7QUFDL0IsUUFBUSxnQ0FBZ0MsRUFBRSxtQkFBTyxDQUFDLDJGQUF1Qjs7QUFFekU7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBLGtCQUFrQixHQUFHO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxHQUFHOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ04sbUJBQW1CLEdBQUc7QUFDdEI7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9leGVjdXRpb25SdW5CcmlkZ2UuanM/OTc4OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQnJpZGdlIEh1YiBFeGVjdXRpb25SdW4gZGlnZXN0cyB0b3dhcmQge0BsaW5rIEZhYnJpY1Byb2dyYW1SdW59LlxuICpcbiAqIFByZWZlciB7QGxpbmsgUHJvZ3JhbSNydW5Db21taXRtZW50SGV4fSB3aGVuIGEgUHJvZ3JhbSBpbnN0YW5jZSBpcyBzdXBwbGllZFxuICogKGZ1bGwgTWFjaGluZSBydW5uZXIpLiBMZWdhY3kgYEV4ZWN1dGlvblJ1bmAgY29tbWl0bWVudHMgcmVtYWluIGFzXG4gKiBgZXhlY3V0aW9uUnVuQ29tbWl0bWVudEhleGAuXG4gKlxuICogQG1vZHVsZSBmdW5jdGlvbnMvZXhlY3V0aW9uUnVuQnJpZGdlXG4gKiBAc2VlIGRvY3MvUFJPR1JBTS5tZFxuICovXG5cbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3QgeyBmYWJyaWNDYW5vbmljYWxKc29uLCBqc29uU2FmZSB9ID0gcmVxdWlyZSgnLi9mYWJyaWNDYW5vbmljYWxKc29uJyk7XG5cbmNvbnN0IEVYRUNVVElPTl9SVU5fS0lORCA9ICdFeGVjdXRpb25SdW4nO1xuY29uc3QgRkFCUklDX1BST0dSQU1fUlVOX0tJTkQgPSAnRmFicmljUHJvZ3JhbVJ1bic7XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IFtyZXN1bHRdXG4gKiBAcmV0dXJucyB7eyBvazogYm9vbGVhbiwgc3RlcHNFeGVjdXRlZDogbnVtYmVyfG51bGwsIGVycm9yOiBzdHJpbmd8bnVsbCwgdHJhY2U6IGFueVtdLCBzdGFjazogYW55W10gfX1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRXhlY3V0aW9uUmVzdWx0IChyZXN1bHQpIHtcbiAgY29uc3QgciA9IHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyA/IHJlc3VsdCA6IHt9O1xuICByZXR1cm4ge1xuICAgIG9rOiAhIXIub2ssXG4gICAgc3RlcHNFeGVjdXRlZDogci5zdGVwc0V4ZWN1dGVkICE9IG51bGwgPyBOdW1iZXIoci5zdGVwc0V4ZWN1dGVkKSA6IG51bGwsXG4gICAgZXJyb3I6IHIub2sgPyBudWxsIDogKHIuZXJyb3IgIT0gbnVsbCA/IFN0cmluZyhyLmVycm9yKSA6IG51bGwpLFxuICAgIHRyYWNlOiBBcnJheS5pc0FycmF5KHIudHJhY2UpID8gci50cmFjZSA6IFtdLFxuICAgIHN0YWNrOiBBcnJheS5pc0FycmF5KHIuc3RhY2spID8gci5zdGFjayA6IFtdXG4gIH07XG59XG5cbi8qKlxuICogTGVnYWN5IEh1YiBkaWdlc3Q6IFNIQS0yNTYgb3ZlciBjYW5vbmljYWwgRXhlY3V0aW9uUnVuIGJvZHkgKGNvbnRyYWN0SWQtc2NvcGVkKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250cmFjdElkXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzdWx0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSA2NC1jaGFyIGxvd2VyY2FzZSBoZXhcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUV4ZWN1dGlvblJ1bkNvbW1pdG1lbnRIZXggKGNvbnRyYWN0SWQsIHJlc3VsdCkge1xuICBjb25zdCBpZCA9IFN0cmluZyhjb250cmFjdElkIHx8ICcnKS50cmltKCk7XG4gIGlmICghaWQpIHRocm93IG5ldyBFcnJvcignY29udHJhY3RJZCByZXF1aXJlZCcpO1xuICBjb25zdCByID0gbm9ybWFsaXplRXhlY3V0aW9uUmVzdWx0KHJlc3VsdCk7XG4gIGNvbnN0IGJvZHkgPSB7XG4gICAgdmVyc2lvbjogMSxcbiAgICBraW5kOiBFWEVDVVRJT05fUlVOX0tJTkQsXG4gICAgY29udHJhY3RJZDogaWQsXG4gICAgb2s6IHIub2ssXG4gICAgc3RlcHNFeGVjdXRlZDogci5zdGVwc0V4ZWN1dGVkLFxuICAgIGVycm9yOiByLmVycm9yLFxuICAgIHRyYWNlOiByLnRyYWNlLFxuICAgIHN0YWNrOiByLnN0YWNrXG4gIH07XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JylcbiAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKGZhYnJpY0Nhbm9uaWNhbEpzb24oYm9keSksICd1dGY4JykpXG4gICAgLmRpZ2VzdCgnaGV4Jyk7XG59XG5cbi8qKlxuICogTmVzdGVkIEV4ZWN1dGlvblJ1biB1bmRlciBGYWJyaWNQcm9ncmFtUnVuIChjb21wYXQgd2hlbiBubyBQcm9ncmFtIGluc3RhbmNlKS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjb21wdXRlRmFicmljUHJvZ3JhbVJ1bkZyb21FeGVjdXRpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCBwcm9ncmFtSGFzaCA9IFN0cmluZyhvcHRzLnByb2dyYW1IYXNoIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCEvXlswLTlhLWZdezY0fSQvLnRlc3QocHJvZ3JhbUhhc2gpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9ncmFtSGFzaCByZXF1aXJlZCAoNjQtaGV4KScpO1xuICB9XG4gIGNvbnN0IGNvbnRyYWN0SWQgPSBTdHJpbmcob3B0cy5jb250cmFjdElkIHx8ICcnKS50cmltKCk7XG4gIGlmICghY29udHJhY3RJZCkgdGhyb3cgbmV3IEVycm9yKCdjb250cmFjdElkIHJlcXVpcmVkJyk7XG4gIGNvbnN0IHIgPSBub3JtYWxpemVFeGVjdXRpb25SZXN1bHQob3B0cy5yZXN1bHQpO1xuICBjb25zdCBib2R5ID0ge1xuICAgIHZlcnNpb246IDEsXG4gICAga2luZDogRkFCUklDX1BST0dSQU1fUlVOX0tJTkQsXG4gICAgcHJvZ3JhbUhhc2gsXG4gICAgcmVzdWx0OiBqc29uU2FmZSh7XG4gICAgICBraW5kOiBFWEVDVVRJT05fUlVOX0tJTkQsXG4gICAgICBjb250cmFjdElkLFxuICAgICAgb2s6IHIub2ssXG4gICAgICBzdGVwc0V4ZWN1dGVkOiByLnN0ZXBzRXhlY3V0ZWQsXG4gICAgICBlcnJvcjogci5lcnJvcixcbiAgICAgIHRyYWNlOiByLnRyYWNlLFxuICAgICAgc3RhY2s6IHIuc3RhY2tcbiAgICB9KVxuICB9O1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpXG4gICAgLnVwZGF0ZShCdWZmZXIuZnJvbShmYWJyaWNDYW5vbmljYWxKc29uKGJvZHkpLCAndXRmOCcpKVxuICAgIC5kaWdlc3QoJ2hleCcpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGZvcndhcmQtY29tcGF0aWJsZSBSdW5FeGVjdXRpb25Db250cmFjdCBkaWdlc3QgZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5jb250cmFjdElkXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMucHJvZ3JhbUhhc2hdXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0cy5yZXN1bHRcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0cy5wcm9ncmFtXSBQcm9ncmFtIGluc3RhbmNlIHdpdGggcnVuQ29tbWl0bWVudEhleCgpXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBidWlsZEV4ZWN1dGlvblJ1bk91dHB1dCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IGNvbnRyYWN0SWQgPSBTdHJpbmcob3B0cy5jb250cmFjdElkIHx8ICcnKS50cmltKCk7XG4gIGlmICghY29udHJhY3RJZCkgdGhyb3cgbmV3IEVycm9yKCdjb250cmFjdElkIHJlcXVpcmVkJyk7XG4gIGNvbnN0IHIgPSBub3JtYWxpemVFeGVjdXRpb25SZXN1bHQob3B0cy5yZXN1bHQpO1xuICBjb25zdCBleGVjdXRpb25SdW5Db21taXRtZW50SGV4ID0gY29tcHV0ZUV4ZWN1dGlvblJ1bkNvbW1pdG1lbnRIZXgoY29udHJhY3RJZCwgcik7XG5cbiAgbGV0IHByb2dyYW1IYXNoUmF3ID0gb3B0cy5wcm9ncmFtSGFzaCAhPSBudWxsXG4gICAgPyBTdHJpbmcob3B0cy5wcm9ncmFtSGFzaCkudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICA6ICcnO1xuICBpZiAoIXByb2dyYW1IYXNoUmF3ICYmIG9wdHMucHJvZ3JhbSAmJiBvcHRzLnByb2dyYW0ucHJvZ3JhbUhhc2gpIHtcbiAgICBwcm9ncmFtSGFzaFJhdyA9IFN0cmluZyhvcHRzLnByb2dyYW0ucHJvZ3JhbUhhc2gpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIGNvbnN0IHByb2dyYW1IYXNoID0gL15bMC05YS1mXXs2NH0kLy50ZXN0KHByb2dyYW1IYXNoUmF3KSA/IHByb2dyYW1IYXNoUmF3IDogbnVsbDtcblxuICBsZXQgZmFicmljUHJvZ3JhbVJ1bkNvbW1pdG1lbnRIZXggPSBudWxsO1xuICBsZXQgZmFicmljUHJvZ3JhbVJ1biA9IG51bGw7XG4gIGlmIChwcm9ncmFtSGFzaCkge1xuICAgIGlmIChvcHRzLnByb2dyYW0gJiYgdHlwZW9mIG9wdHMucHJvZ3JhbS5ydW5Db21taXRtZW50SGV4ID09PSAnZnVuY3Rpb24nICYmIHIub2spIHtcbiAgICAgIGNvbnN0IHRpcCA9IG9wdHMucmVzdWx0ICYmIG9wdHMucmVzdWx0LnRpcCAhPSBudWxsXG4gICAgICAgID8gb3B0cy5yZXN1bHQudGlwXG4gICAgICAgIDogKHIuc3RhY2subGVuZ3RoID8gci5zdGFja1tyLnN0YWNrLmxlbmd0aCAtIDFdIDogbnVsbCk7XG4gICAgICBmYWJyaWNQcm9ncmFtUnVuQ29tbWl0bWVudEhleCA9IFN0cmluZyhvcHRzLnByb2dyYW0ucnVuQ29tbWl0bWVudEhleCh7XG4gICAgICAgIHRpcCxcbiAgICAgICAgc3RhY2s6IHIudHJhY2UubGVuZ3RoID8gci50cmFjZSA6IHIuc3RhY2tcbiAgICAgIH0pKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0gZWxzZSBpZiAob3B0cy5yZXN1bHQgJiYgb3B0cy5yZXN1bHQucnVuQ29tbWl0bWVudEhleCAmJlxuICAgICAgICAvXlswLTlhLWZdezY0fSQvaS50ZXN0KFN0cmluZyhvcHRzLnJlc3VsdC5ydW5Db21taXRtZW50SGV4KSkpIHtcbiAgICAgIGZhYnJpY1Byb2dyYW1SdW5Db21taXRtZW50SGV4ID0gU3RyaW5nKG9wdHMucmVzdWx0LnJ1bkNvbW1pdG1lbnRIZXgpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWJyaWNQcm9ncmFtUnVuQ29tbWl0bWVudEhleCA9IGNvbXB1dGVGYWJyaWNQcm9ncmFtUnVuRnJvbUV4ZWN1dGlvbih7XG4gICAgICAgIHByb2dyYW1IYXNoLFxuICAgICAgICBjb250cmFjdElkLFxuICAgICAgICByZXN1bHQ6IHJcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmYWJyaWNQcm9ncmFtUnVuID0ge1xuICAgICAga2luZDogRkFCUklDX1BST0dSQU1fUlVOX0tJTkQsXG4gICAgICBwcm9ncmFtSGFzaCxcbiAgICAgIHJ1bkNvbW1pdG1lbnRIZXg6IGZhYnJpY1Byb2dyYW1SdW5Db21taXRtZW50SGV4XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHJvZ3JhbUhhc2gsXG4gICAgcnVuQ29tbWl0bWVudEhleDogZmFicmljUHJvZ3JhbVJ1bkNvbW1pdG1lbnRIZXggfHwgZXhlY3V0aW9uUnVuQ29tbWl0bWVudEhleCxcbiAgICBleGVjdXRpb25SdW5Db21taXRtZW50SGV4LFxuICAgIGZhYnJpY1Byb2dyYW1SdW5Db21taXRtZW50SGV4LFxuICAgIGZhYnJpY1Byb2dyYW1SdW5cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYRUNVVElPTl9SVU5fS0lORCxcbiAgRkFCUklDX1BST0dSQU1fUlVOX0tJTkQsXG4gIG5vcm1hbGl6ZUV4ZWN1dGlvblJlc3VsdCxcbiAgY29tcHV0ZUV4ZWN1dGlvblJ1bkNvbW1pdG1lbnRIZXgsXG4gIGNvbXB1dGVGYWJyaWNQcm9ncmFtUnVuRnJvbUV4ZWN1dGlvbixcbiAgYnVpbGRFeGVjdXRpb25SdW5PdXRwdXRcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/executionRunBridge.js\n\n}")},"./node_modules/@fabric/core/functions/fabricCanonicalJson.js"(module){"use strict";eval("{\n\n/**\n * Deep JSON with lexicographically sorted object keys. Used anywhere bytes must be\n * **identical** across Node, browser, and Hub (L1 document preimage, beacon strings).\n *\n * **Security / audit**\n * - One implementation — do not fork a second “stable stringify” for signing or hashes.\n * - **Depth cap** prevents stack exhaustion on cyclic or pathologically nested input.\n * - **`undefined`**, **`Symbol`**, **`BigInt`**: `undefined` encodes as JSON `null` (explicit);\n * `Symbol` / non-JSON BigInt throw (fail closed).\n *\n * @module functions/fabricCanonicalJson\n */\n\nconst MAX_DEPTH = 64;\n\n/**\n * @param {*} value\n * @param {number} [depth=0]\n * @returns {string}\n */\nfunction fabricCanonicalJson (value, depth = 0) {\n if (depth > MAX_DEPTH) {\n throw new RangeError('fabricCanonicalJson: max nesting depth exceeded');\n }\n if (value === undefined) {\n return 'null';\n }\n if (value === null || typeof value !== 'object') {\n if (typeof value === 'bigint') {\n throw new TypeError('fabricCanonicalJson: BigInt is not JSON-safe');\n }\n if (typeof value === 'symbol') {\n throw new TypeError('fabricCanonicalJson: Symbol is not JSON-safe');\n }\n const s = JSON.stringify(value);\n if (s === undefined) {\n throw new TypeError('fabricCanonicalJson: value is not JSON-serializable');\n }\n return s;\n }\n if (Array.isArray(value)) {\n return '[' + value.map((v) => fabricCanonicalJson(v, depth + 1)).join(',') + ']';\n }\n const keys = Object.keys(value).sort();\n return '{' + keys.map((k) => JSON.stringify(k) + ':' + fabricCanonicalJson(value[k], depth + 1)).join(',') + '}';\n}\n\n/**\n * Drop `undefined` and normalize values the same way JSON.parse(JSON.stringify) does.\n * @param {*} value\n * @returns {*}\n */\nfunction jsonSafe (value) {\n // JSON.stringify(undefined) yields `undefined` (not the string \"null\"), which\n // JSON.parse cannot consume — match fabricCanonicalJson's undefined → null.\n if (value === undefined) return null;\n return JSON.parse(JSON.stringify(value));\n}\n\n/** @deprecated Prefer {@link fabricCanonicalJson} by name. */\nconst stableStringify = fabricCanonicalJson;\n\nmodule.exports = fabricCanonicalJson;\nmodule.exports.fabricCanonicalJson = fabricCanonicalJson;\nmodule.exports.jsonSafe = jsonSafe;\nmodule.exports.stableStringify = stableStringify;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9mYWJyaWNDYW5vbmljYWxKc29uLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNHQUFzRztBQUNqSDs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdCQUF3QiwyQkFBMkI7QUFDbkQ7O0FBRUE7QUFDQSxrQ0FBa0M7QUFDbEMsdUJBQXVCO0FBQ3ZCLDhCQUE4QiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS9mdW5jdGlvbnMvZmFicmljQ2Fub25pY2FsSnNvbi5qcz9iYmU5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZWVwIEpTT04gd2l0aCBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgb2JqZWN0IGtleXMuIFVzZWQgYW55d2hlcmUgYnl0ZXMgbXVzdCBiZVxuICogKippZGVudGljYWwqKiBhY3Jvc3MgTm9kZSwgYnJvd3NlciwgYW5kIEh1YiAoTDEgZG9jdW1lbnQgcHJlaW1hZ2UsIGJlYWNvbiBzdHJpbmdzKS5cbiAqXG4gKiAqKlNlY3VyaXR5IC8gYXVkaXQqKlxuICogLSBPbmUgaW1wbGVtZW50YXRpb24g4oCUIGRvIG5vdCBmb3JrIGEgc2Vjb25kIOKAnHN0YWJsZSBzdHJpbmdpZnnigJ0gZm9yIHNpZ25pbmcgb3IgaGFzaGVzLlxuICogLSAqKkRlcHRoIGNhcCoqIHByZXZlbnRzIHN0YWNrIGV4aGF1c3Rpb24gb24gY3ljbGljIG9yIHBhdGhvbG9naWNhbGx5IG5lc3RlZCBpbnB1dC5cbiAqIC0gKipgdW5kZWZpbmVkYCoqLCAqKmBTeW1ib2xgKiosICoqYEJpZ0ludGAqKjogYHVuZGVmaW5lZGAgZW5jb2RlcyBhcyBKU09OIGBudWxsYCAoZXhwbGljaXQpO1xuICogICBgU3ltYm9sYCAvIG5vbi1KU09OIEJpZ0ludCB0aHJvdyAoZmFpbCBjbG9zZWQpLlxuICpcbiAqIEBtb2R1bGUgZnVuY3Rpb25zL2ZhYnJpY0Nhbm9uaWNhbEpzb25cbiAqL1xuXG5jb25zdCBNQVhfREVQVEggPSA2NDtcblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gW2RlcHRoPTBdXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmYWJyaWNDYW5vbmljYWxKc29uICh2YWx1ZSwgZGVwdGggPSAwKSB7XG4gIGlmIChkZXB0aCA+IE1BWF9ERVBUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdmYWJyaWNDYW5vbmljYWxKc29uOiBtYXggbmVzdGluZyBkZXB0aCBleGNlZWRlZCcpO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfVxuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmYWJyaWNDYW5vbmljYWxKc29uOiBCaWdJbnQgaXMgbm90IEpTT04tc2FmZScpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZmFicmljQ2Fub25pY2FsSnNvbjogU3ltYm9sIGlzIG5vdCBKU09OLXNhZmUnKTtcbiAgICB9XG4gICAgY29uc3QgcyA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICBpZiAocyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdmYWJyaWNDYW5vbmljYWxKc29uOiB2YWx1ZSBpcyBub3QgSlNPTi1zZXJpYWxpemFibGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIHM7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuICdbJyArIHZhbHVlLm1hcCgodikgPT4gZmFicmljQ2Fub25pY2FsSnNvbih2LCBkZXB0aCArIDEpKS5qb2luKCcsJykgKyAnXSc7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCk7XG4gIHJldHVybiAneycgKyBrZXlzLm1hcCgoaykgPT4gSlNPTi5zdHJpbmdpZnkoaykgKyAnOicgKyBmYWJyaWNDYW5vbmljYWxKc29uKHZhbHVlW2tdLCBkZXB0aCArIDEpKS5qb2luKCcsJykgKyAnfSc7XG59XG5cbi8qKlxuICogRHJvcCBgdW5kZWZpbmVkYCBhbmQgbm9ybWFsaXplIHZhbHVlcyB0aGUgc2FtZSB3YXkgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSkgZG9lcy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBqc29uU2FmZSAodmFsdWUpIHtcbiAgLy8gSlNPTi5zdHJpbmdpZnkodW5kZWZpbmVkKSB5aWVsZHMgYHVuZGVmaW5lZGAgKG5vdCB0aGUgc3RyaW5nIFwibnVsbFwiKSwgd2hpY2hcbiAgLy8gSlNPTi5wYXJzZSBjYW5ub3QgY29uc3VtZSDigJQgbWF0Y2ggZmFicmljQ2Fub25pY2FsSnNvbidzIHVuZGVmaW5lZCDihpIgbnVsbC5cbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgUHJlZmVyIHtAbGluayBmYWJyaWNDYW5vbmljYWxKc29ufSBieSBuYW1lLiAqL1xuY29uc3Qgc3RhYmxlU3RyaW5naWZ5ID0gZmFicmljQ2Fub25pY2FsSnNvbjtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWJyaWNDYW5vbmljYWxKc29uO1xubW9kdWxlLmV4cG9ydHMuZmFicmljQ2Fub25pY2FsSnNvbiA9IGZhYnJpY0Nhbm9uaWNhbEpzb247XG5tb2R1bGUuZXhwb3J0cy5qc29uU2FmZSA9IGpzb25TYWZlO1xubW9kdWxlLmV4cG9ydHMuc3RhYmxlU3RyaW5naWZ5ID0gc3RhYmxlU3RyaW5naWZ5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/fabricCanonicalJson.js\n\n}")},"./node_modules/@fabric/core/functions/fabricIdentitySchnorr.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * @fileoverview Protocol identity Schnorr helpers (site-login, device-link,\n * IdentityCrossSign). Signing uses {@link Identity#fabricKey} when an HD master\n * is available. Verify: BIP340 over UTF-8; `identity.xpub` must neuter to\n * `pubkeyHex`; `identity.id` must be Bech32 `id1…` of SHA-256d(compressed pubkey).\n * @see IDENTITY.md\n */\n\nconst Key = __webpack_require__(/*! ../types/key */ \"./node_modules/@fabric/core/types/key.js\");\nconst Identity = __webpack_require__(/*! ../types/identity */ \"./node_modules/@fabric/core/types/identity.js\");\nconst Hash256 = __webpack_require__(/*! ../types/hash256 */ \"./node_modules/@fabric/core/types/hash256.js\");\nconst Bech32 = __webpack_require__(/*! ../types/bech32 */ \"./node_modules/@fabric/core/types/bech32.js\");\nconst { FABRIC_KEY_DERIVATION_PATH } = __webpack_require__(/*! ../constants */ \"./node_modules/@fabric/core/constants.js\");\n\n/**\n * Fabric Bech32 identity id from a compressed secp256k1 pubkey (IDENTITY.md).\n * @param {string} pubkeyHex\n * @returns {string}\n */\nfunction fabricIdentityIdFromPubkeyHex (pubkeyHex) {\n const raw = String(pubkeyHex || '').trim().replace(/^0x/i, '');\n if (!raw) throw new Error('Missing pubkey bytes.');\n if (!/^[0-9a-f]{66}$/i.test(raw)) {\n throw new Error('Invalid compressed pubkey hex (expected 66 hex characters).');\n }\n const input = Buffer.from(raw, 'hex');\n const pubkeyhash = Hash256.digest(input);\n return new Bech32({ hrp: 'id', content: pubkeyhash }).toString();\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction looksLikeFabricIdentity (value) {\n if (!value || typeof value !== 'object') return false;\n if (typeof value.id !== 'string' && typeof value.id !== 'number') return false;\n if (value.fabricKey && typeof value.fabricKey.signSchnorr === 'function') return true;\n return !!(value.key && typeof value.key.signSchnorr === 'function');\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction looksLikeFabricKey (value) {\n return !!(value && typeof value === 'object' &&\n typeof value.signSchnorr === 'function' &&\n (value.pubkey || value.public || value.xprv || value.xpub || value.master));\n}\n\n/**\n * Resolve the protocol signing key + Fabric bech32 id from flexible inputs.\n * @param {object} input Identity, HD Key / master, `{ mnemonic|xprv }`, or leaf\n * `{ privateKeyHex|private, xpub? }` (Passport session material already at the Fabric path).\n * @returns {{ fabricKey: object, identityId: string, identity: object }}\n */\nfunction resolveFabricSigningIdentity (input) {\n if (!input) throw new Error('Identity or Key required');\n\n let identity = null;\n let leafXpub = null;\n if (looksLikeFabricIdentity(input)) {\n identity = input;\n } else if (looksLikeFabricKey(input)) {\n identity = new Identity(input);\n } else if (typeof input === 'object') {\n if (input.mnemonic || input.xprv) {\n identity = new Identity(new Key({\n mnemonic: input.mnemonic || undefined,\n xprv: input.xprv || undefined,\n passphrase: input.passphrase || undefined\n }));\n } else {\n const priv = input.privateKeyHex || input.private || null;\n if (priv) {\n const hex = Buffer.isBuffer(priv) ? priv.toString('hex') : String(priv).replace(/^0x/i, '');\n const leaf = new Key({ private: hex });\n identity = new Identity(leaf);\n leafXpub = typeof input.xpub === 'string' ? input.xpub : null;\n }\n }\n }\n\n if (!identity) throw new Error('Identity or Key required');\n\n let fabricKey = identity.fabricKey;\n if (!fabricKey || typeof fabricKey.signSchnorr !== 'function') {\n const master = identity.key || identity.master || (looksLikeFabricKey(input) ? input : null);\n if (master && typeof master.derive === 'function') {\n try {\n const path = (identity.derivation) || FABRIC_KEY_DERIVATION_PATH;\n fabricKey = master.derive(path);\n } catch (_) {\n fabricKey = master;\n }\n } else if (master && typeof master.signSchnorr === 'function') {\n fabricKey = master;\n }\n }\n if (!fabricKey || typeof fabricKey.signSchnorr !== 'function') {\n throw new Error('Fabric signing key unavailable');\n }\n\n let xpub = fabricKey.xpub || leafXpub || null;\n if (!xpub && typeof input === 'object' && typeof input.xpub === 'string') {\n xpub = input.xpub;\n }\n if (!xpub) {\n throw new Error('Fabric signing key missing xpub (pass identity.xpub for leaf keys)');\n }\n if (!fabricKey.xpub) {\n const candidate = String(xpub);\n let neutered;\n try {\n neutered = new Key({ xpub: candidate });\n } catch (_) {\n throw new Error('invalid xpub for signing key');\n }\n const expected = String(fabricKey.pubkey || '').toLowerCase();\n const fromXpub = String(neutered.pubkey || '').toLowerCase();\n if (!expected || !fromXpub || expected !== fromXpub) {\n throw new Error('xpub does not match signing pubkey');\n }\n fabricKey.xpub = candidate;\n }\n\n return {\n fabricKey,\n identityId: String(identity.id),\n identity\n };\n}\n\n/**\n * @private\n * @param {*} value\n * @returns {boolean}\n */\nfunction isResolvedSigningIdentity (value) {\n return !!(value && typeof value === 'object' &&\n value.fabricKey && typeof value.fabricKey.signSchnorr === 'function' &&\n typeof value.identityId === 'string');\n}\n\n/**\n * Build the JSON body Hub / LiveRelay expect for client-signed challenges.\n * @param {object} input Identity, Key, Passport leaf, or already-resolved\n * `{ fabricKey, identityId }` from {@link resolveFabricSigningIdentity}\n * @param {string} message UTF-8 challenge string\n * @returns {{ signature: string, pubkeyHex: string, identity: { id: string, xpub: string } }}\n */\nfunction buildFabricIdentitySignedPayload (input, message) {\n if (typeof message !== 'string' || !message) {\n throw new Error('message required');\n }\n const resolved = isResolvedSigningIdentity(input)\n ? input\n : resolveFabricSigningIdentity(input);\n const { fabricKey, identityId } = resolved;\n const signature = Buffer.from(fabricKey.signSchnorr(Buffer.from(message, 'utf8'))).toString('hex');\n const pubkeyHex = String(fabricKey.pubkey || '');\n if (!/^[a-f0-9]{66}$/i.test(pubkeyHex)) {\n throw new Error('Could not derive Fabric public key');\n }\n const xpub = String(fabricKey.xpub || '');\n if (!xpub) throw new Error('Fabric signing key missing xpub');\n return {\n signature,\n pubkeyHex,\n identity: { id: identityId, xpub }\n };\n}\n\n/**\n * Verify Schnorr + identity.id matches the signing pubkey (IDENTITY.md).\n * @param {string} message\n * @param {string} signatureHex\n * @param {string} pubkeyHex\n * @param {{ id?: *, xpub: string }} identity\n * @returns {{ ok: true, key: object, identityId: string }|{ ok: false, error: string }}\n */\nfunction verifyIdentitySchnorr (message, signatureHex, pubkeyHex, identity) {\n if (typeof message !== 'string' || !message) {\n return { ok: false, error: 'Missing signed message' };\n }\n if (typeof signatureHex !== 'string' || !/^[a-f0-9]{128}$/i.test(signatureHex)) {\n return { ok: false, error: 'Missing or invalid signature' };\n }\n if (typeof pubkeyHex !== 'string' || !/^[a-f0-9]{66}$/i.test(pubkeyHex)) {\n return { ok: false, error: 'Missing or invalid pubkey' };\n }\n if (!identity || typeof identity !== 'object' || typeof identity.xpub !== 'string' || !identity.xpub) {\n return { ok: false, error: 'Missing identity xpub' };\n }\n let key;\n try {\n key = new Key({ xpub: identity.xpub });\n } catch (_) {\n return { ok: false, error: 'Invalid xpub' };\n }\n const msgBuf = Buffer.from(message, 'utf8');\n let sigBuf;\n try {\n sigBuf = Buffer.from(signatureHex, 'hex');\n } catch (_) {\n return { ok: false, error: 'Invalid signature encoding' };\n }\n if (!key.verifySchnorr(msgBuf, sigBuf)) {\n return { ok: false, error: 'Signature verification failed' };\n }\n const compressedPub = String(key.pubkey || '').toLowerCase();\n if (compressedPub !== String(pubkeyHex).toLowerCase()) {\n return { ok: false, error: 'Public key does not match xpub' };\n }\n let expectedId;\n try {\n expectedId = fabricIdentityIdFromPubkeyHex(pubkeyHex);\n } catch (_) {\n return { ok: false, error: 'Could not derive identity from pubkey' };\n }\n const claimedId = identity.id != null ? String(identity.id).trim() : '';\n if (!claimedId || String(expectedId) !== claimedId) {\n return { ok: false, error: 'Identity id does not match xpub' };\n }\n return { ok: true, key, identityId: claimedId };\n}\n\nmodule.exports = {\n fabricIdentityIdFromPubkeyHex,\n resolveFabricSigningIdentity,\n buildFabricIdentitySignedPayload,\n verifyIdentitySchnorr\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9mYWJyaWNJZGVudGl0eVNjaG5vcnIuanMiLCJtYXBwaW5ncyI6IjtBQUFhOztBQUViO0FBQ0E7QUFDQSxxQ0FBcUMsMEJBQTBCO0FBQy9ELDRDQUE0QztBQUM1QyxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQSxZQUFZLG1CQUFPLENBQUMsOERBQWM7QUFDbEMsaUJBQWlCLG1CQUFPLENBQUMsd0VBQW1CO0FBQzVDLGdCQUFnQixtQkFBTyxDQUFDLHNFQUFrQjtBQUMxQyxlQUFlLG1CQUFPLENBQUMsb0VBQWlCO0FBQ3hDLFFBQVEsNkJBQTZCLEVBQUUsbUJBQU8sQ0FBQyw4REFBYzs7QUFFN0Q7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsR0FBRztBQUNyQjtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQSxzQkFBc0IsZ0NBQWdDO0FBQ3REOztBQUVBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRLG9DQUFvQyxlQUFlO0FBQ3RFLFFBQVEsOEJBQThCO0FBQ3RDLGVBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBLG9CQUFvQixNQUFNO0FBQzFCLCtCQUErQixjQUFjO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixpQkFBaUI7QUFDNUMsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixRQUFRLHVCQUF1QixRQUFRO0FBQ3ZDLFdBQVcsUUFBUTtBQUNuQixlQUFlLGtEQUFrRDtBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSx3QkFBd0I7QUFDbEMsb0JBQW9CLE1BQU0sNEJBQTRCLE1BQU07QUFDNUQ7QUFDQSxrQkFBa0IsR0FBRztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLHdCQUF3QjtBQUNyQyxlQUFlLDJDQUEyQyxHQUFHO0FBQzdEO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLHNEQUFzRCxJQUFJO0FBQzFELGFBQWE7QUFDYjtBQUNBLG1EQUFtRCxHQUFHO0FBQ3RELGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixxQkFBcUI7QUFDekMsSUFBSTtBQUNKLGFBQWE7QUFDYjtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkIsSUFBSTtBQUNKLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS9mdW5jdGlvbnMvZmFicmljSWRlbnRpdHlTY2hub3JyLmpzPzMyMDIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgUHJvdG9jb2wgaWRlbnRpdHkgU2Nobm9yciBoZWxwZXJzIChzaXRlLWxvZ2luLCBkZXZpY2UtbGluayxcbiAqIElkZW50aXR5Q3Jvc3NTaWduKS4gU2lnbmluZyB1c2VzIHtAbGluayBJZGVudGl0eSNmYWJyaWNLZXl9IHdoZW4gYW4gSEQgbWFzdGVyXG4gKiBpcyBhdmFpbGFibGUuIFZlcmlmeTogQklQMzQwIG92ZXIgVVRGLTg7IGBpZGVudGl0eS54cHViYCBtdXN0IG5ldXRlciB0b1xuICogYHB1YmtleUhleGA7IGBpZGVudGl0eS5pZGAgbXVzdCBiZSBCZWNoMzIgYGlkMeKApmAgb2YgU0hBLTI1NmQoY29tcHJlc3NlZCBwdWJrZXkpLlxuICogQHNlZSBJREVOVElUWS5tZFxuICovXG5cbmNvbnN0IEtleSA9IHJlcXVpcmUoJy4uL3R5cGVzL2tleScpO1xuY29uc3QgSWRlbnRpdHkgPSByZXF1aXJlKCcuLi90eXBlcy9pZGVudGl0eScpO1xuY29uc3QgSGFzaDI1NiA9IHJlcXVpcmUoJy4uL3R5cGVzL2hhc2gyNTYnKTtcbmNvbnN0IEJlY2gzMiA9IHJlcXVpcmUoJy4uL3R5cGVzL2JlY2gzMicpO1xuY29uc3QgeyBGQUJSSUNfS0VZX0RFUklWQVRJT05fUEFUSCB9ID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzJyk7XG5cbi8qKlxuICogRmFicmljIEJlY2gzMiBpZGVudGl0eSBpZCBmcm9tIGEgY29tcHJlc3NlZCBzZWNwMjU2azEgcHVia2V5IChJREVOVElUWS5tZCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHVia2V5SGV4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmYWJyaWNJZGVudGl0eUlkRnJvbVB1YmtleUhleCAocHVia2V5SGV4KSB7XG4gIGNvbnN0IHJhdyA9IFN0cmluZyhwdWJrZXlIZXggfHwgJycpLnRyaW0oKS5yZXBsYWNlKC9eMHgvaSwgJycpO1xuICBpZiAoIXJhdykgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHB1YmtleSBieXRlcy4nKTtcbiAgaWYgKCEvXlswLTlhLWZdezY2fSQvaS50ZXN0KHJhdykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29tcHJlc3NlZCBwdWJrZXkgaGV4IChleHBlY3RlZCA2NiBoZXggY2hhcmFjdGVycykuJyk7XG4gIH1cbiAgY29uc3QgaW5wdXQgPSBCdWZmZXIuZnJvbShyYXcsICdoZXgnKTtcbiAgY29uc3QgcHVia2V5aGFzaCA9IEhhc2gyNTYuZGlnZXN0KGlucHV0KTtcbiAgcmV0dXJuIG5ldyBCZWNoMzIoeyBocnA6ICdpZCcsIGNvbnRlbnQ6IHB1YmtleWhhc2ggfSkudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gbG9va3NMaWtlRmFicmljSWRlbnRpdHkgKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHZhbHVlLmlkICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUuaWQgIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XG4gIGlmICh2YWx1ZS5mYWJyaWNLZXkgJiYgdHlwZW9mIHZhbHVlLmZhYnJpY0tleS5zaWduU2Nobm9yciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHRydWU7XG4gIHJldHVybiAhISh2YWx1ZS5rZXkgJiYgdHlwZW9mIHZhbHVlLmtleS5zaWduU2Nobm9yciA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGxvb2tzTGlrZUZhYnJpY0tleSAodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2YgdmFsdWUuc2lnblNjaG5vcnIgPT09ICdmdW5jdGlvbicgJiZcbiAgICAodmFsdWUucHVia2V5IHx8IHZhbHVlLnB1YmxpYyB8fCB2YWx1ZS54cHJ2IHx8IHZhbHVlLnhwdWIgfHwgdmFsdWUubWFzdGVyKSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgcHJvdG9jb2wgc2lnbmluZyBrZXkgKyBGYWJyaWMgYmVjaDMyIGlkIGZyb20gZmxleGlibGUgaW5wdXRzLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IElkZW50aXR5LCBIRCBLZXkgLyBtYXN0ZXIsIGB7IG1uZW1vbmljfHhwcnYgfWAsIG9yIGxlYWZcbiAqICAgYHsgcHJpdmF0ZUtleUhleHxwcml2YXRlLCB4cHViPyB9YCAoUGFzc3BvcnQgc2Vzc2lvbiBtYXRlcmlhbCBhbHJlYWR5IGF0IHRoZSBGYWJyaWMgcGF0aCkuXG4gKiBAcmV0dXJucyB7eyBmYWJyaWNLZXk6IG9iamVjdCwgaWRlbnRpdHlJZDogc3RyaW5nLCBpZGVudGl0eTogb2JqZWN0IH19XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGYWJyaWNTaWduaW5nSWRlbnRpdHkgKGlucHV0KSB7XG4gIGlmICghaW5wdXQpIHRocm93IG5ldyBFcnJvcignSWRlbnRpdHkgb3IgS2V5IHJlcXVpcmVkJyk7XG5cbiAgbGV0IGlkZW50aXR5ID0gbnVsbDtcbiAgbGV0IGxlYWZYcHViID0gbnVsbDtcbiAgaWYgKGxvb2tzTGlrZUZhYnJpY0lkZW50aXR5KGlucHV0KSkge1xuICAgIGlkZW50aXR5ID0gaW5wdXQ7XG4gIH0gZWxzZSBpZiAobG9va3NMaWtlRmFicmljS2V5KGlucHV0KSkge1xuICAgIGlkZW50aXR5ID0gbmV3IElkZW50aXR5KGlucHV0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnKSB7XG4gICAgaWYgKGlucHV0Lm1uZW1vbmljIHx8IGlucHV0LnhwcnYpIHtcbiAgICAgIGlkZW50aXR5ID0gbmV3IElkZW50aXR5KG5ldyBLZXkoe1xuICAgICAgICBtbmVtb25pYzogaW5wdXQubW5lbW9uaWMgfHwgdW5kZWZpbmVkLFxuICAgICAgICB4cHJ2OiBpbnB1dC54cHJ2IHx8IHVuZGVmaW5lZCxcbiAgICAgICAgcGFzc3BocmFzZTogaW5wdXQucGFzc3BocmFzZSB8fCB1bmRlZmluZWRcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcHJpdiA9IGlucHV0LnByaXZhdGVLZXlIZXggfHwgaW5wdXQucHJpdmF0ZSB8fCBudWxsO1xuICAgICAgaWYgKHByaXYpIHtcbiAgICAgICAgY29uc3QgaGV4ID0gQnVmZmVyLmlzQnVmZmVyKHByaXYpID8gcHJpdi50b1N0cmluZygnaGV4JykgOiBTdHJpbmcocHJpdikucmVwbGFjZSgvXjB4L2ksICcnKTtcbiAgICAgICAgY29uc3QgbGVhZiA9IG5ldyBLZXkoeyBwcml2YXRlOiBoZXggfSk7XG4gICAgICAgIGlkZW50aXR5ID0gbmV3IElkZW50aXR5KGxlYWYpO1xuICAgICAgICBsZWFmWHB1YiA9IHR5cGVvZiBpbnB1dC54cHViID09PSAnc3RyaW5nJyA/IGlucHV0LnhwdWIgOiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghaWRlbnRpdHkpIHRocm93IG5ldyBFcnJvcignSWRlbnRpdHkgb3IgS2V5IHJlcXVpcmVkJyk7XG5cbiAgbGV0IGZhYnJpY0tleSA9IGlkZW50aXR5LmZhYnJpY0tleTtcbiAgaWYgKCFmYWJyaWNLZXkgfHwgdHlwZW9mIGZhYnJpY0tleS5zaWduU2Nobm9yciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IG1hc3RlciA9IGlkZW50aXR5LmtleSB8fCBpZGVudGl0eS5tYXN0ZXIgfHwgKGxvb2tzTGlrZUZhYnJpY0tleShpbnB1dCkgPyBpbnB1dCA6IG51bGwpO1xuICAgIGlmIChtYXN0ZXIgJiYgdHlwZW9mIG1hc3Rlci5kZXJpdmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSAoaWRlbnRpdHkuZGVyaXZhdGlvbikgfHwgRkFCUklDX0tFWV9ERVJJVkFUSU9OX1BBVEg7XG4gICAgICAgIGZhYnJpY0tleSA9IG1hc3Rlci5kZXJpdmUocGF0aCk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIGZhYnJpY0tleSA9IG1hc3RlcjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1hc3RlciAmJiB0eXBlb2YgbWFzdGVyLnNpZ25TY2hub3JyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmYWJyaWNLZXkgPSBtYXN0ZXI7XG4gICAgfVxuICB9XG4gIGlmICghZmFicmljS2V5IHx8IHR5cGVvZiBmYWJyaWNLZXkuc2lnblNjaG5vcnIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhYnJpYyBzaWduaW5nIGtleSB1bmF2YWlsYWJsZScpO1xuICB9XG5cbiAgbGV0IHhwdWIgPSBmYWJyaWNLZXkueHB1YiB8fCBsZWFmWHB1YiB8fCBudWxsO1xuICBpZiAoIXhwdWIgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgaW5wdXQueHB1YiA9PT0gJ3N0cmluZycpIHtcbiAgICB4cHViID0gaW5wdXQueHB1YjtcbiAgfVxuICBpZiAoIXhwdWIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhYnJpYyBzaWduaW5nIGtleSBtaXNzaW5nIHhwdWIgKHBhc3MgaWRlbnRpdHkueHB1YiBmb3IgbGVhZiBrZXlzKScpO1xuICB9XG4gIGlmICghZmFicmljS2V5LnhwdWIpIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBTdHJpbmcoeHB1Yik7XG4gICAgbGV0IG5ldXRlcmVkO1xuICAgIHRyeSB7XG4gICAgICBuZXV0ZXJlZCA9IG5ldyBLZXkoeyB4cHViOiBjYW5kaWRhdGUgfSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHhwdWIgZm9yIHNpZ25pbmcga2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IGV4cGVjdGVkID0gU3RyaW5nKGZhYnJpY0tleS5wdWJrZXkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZnJvbVhwdWIgPSBTdHJpbmcobmV1dGVyZWQucHVia2V5IHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghZXhwZWN0ZWQgfHwgIWZyb21YcHViIHx8IGV4cGVjdGVkICE9PSBmcm9tWHB1Yikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd4cHViIGRvZXMgbm90IG1hdGNoIHNpZ25pbmcgcHVia2V5Jyk7XG4gICAgfVxuICAgIGZhYnJpY0tleS54cHViID0gY2FuZGlkYXRlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmYWJyaWNLZXksXG4gICAgaWRlbnRpdHlJZDogU3RyaW5nKGlkZW50aXR5LmlkKSxcbiAgICBpZGVudGl0eVxuICB9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNSZXNvbHZlZFNpZ25pbmdJZGVudGl0eSAodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZS5mYWJyaWNLZXkgJiYgdHlwZW9mIHZhbHVlLmZhYnJpY0tleS5zaWduU2Nobm9yciA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiB2YWx1ZS5pZGVudGl0eUlkID09PSAnc3RyaW5nJyk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIEpTT04gYm9keSBIdWIgLyBMaXZlUmVsYXkgZXhwZWN0IGZvciBjbGllbnQtc2lnbmVkIGNoYWxsZW5nZXMuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgSWRlbnRpdHksIEtleSwgUGFzc3BvcnQgbGVhZiwgb3IgYWxyZWFkeS1yZXNvbHZlZFxuICogICBgeyBmYWJyaWNLZXksIGlkZW50aXR5SWQgfWAgZnJvbSB7QGxpbmsgcmVzb2x2ZUZhYnJpY1NpZ25pbmdJZGVudGl0eX1cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFVURi04IGNoYWxsZW5nZSBzdHJpbmdcbiAqIEByZXR1cm5zIHt7IHNpZ25hdHVyZTogc3RyaW5nLCBwdWJrZXlIZXg6IHN0cmluZywgaWRlbnRpdHk6IHsgaWQ6IHN0cmluZywgeHB1Yjogc3RyaW5nIH0gfX1cbiAqL1xuZnVuY3Rpb24gYnVpbGRGYWJyaWNJZGVudGl0eVNpZ25lZFBheWxvYWQgKGlucHV0LCBtZXNzYWdlKSB7XG4gIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycgfHwgIW1lc3NhZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21lc3NhZ2UgcmVxdWlyZWQnKTtcbiAgfVxuICBjb25zdCByZXNvbHZlZCA9IGlzUmVzb2x2ZWRTaWduaW5nSWRlbnRpdHkoaW5wdXQpXG4gICAgPyBpbnB1dFxuICAgIDogcmVzb2x2ZUZhYnJpY1NpZ25pbmdJZGVudGl0eShpbnB1dCk7XG4gIGNvbnN0IHsgZmFicmljS2V5LCBpZGVudGl0eUlkIH0gPSByZXNvbHZlZDtcbiAgY29uc3Qgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20oZmFicmljS2V5LnNpZ25TY2hub3JyKEJ1ZmZlci5mcm9tKG1lc3NhZ2UsICd1dGY4JykpKS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IHB1YmtleUhleCA9IFN0cmluZyhmYWJyaWNLZXkucHVia2V5IHx8ICcnKTtcbiAgaWYgKCEvXlthLWYwLTldezY2fSQvaS50ZXN0KHB1YmtleUhleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkZXJpdmUgRmFicmljIHB1YmxpYyBrZXknKTtcbiAgfVxuICBjb25zdCB4cHViID0gU3RyaW5nKGZhYnJpY0tleS54cHViIHx8ICcnKTtcbiAgaWYgKCF4cHViKSB0aHJvdyBuZXcgRXJyb3IoJ0ZhYnJpYyBzaWduaW5nIGtleSBtaXNzaW5nIHhwdWInKTtcbiAgcmV0dXJuIHtcbiAgICBzaWduYXR1cmUsXG4gICAgcHVia2V5SGV4LFxuICAgIGlkZW50aXR5OiB7IGlkOiBpZGVudGl0eUlkLCB4cHViIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgU2Nobm9yciArIGlkZW50aXR5LmlkIG1hdGNoZXMgdGhlIHNpZ25pbmcgcHVia2V5IChJREVOVElUWS5tZCkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZUhleFxuICogQHBhcmFtIHtzdHJpbmd9IHB1YmtleUhleFxuICogQHBhcmFtIHt7IGlkPzogKiwgeHB1Yjogc3RyaW5nIH19IGlkZW50aXR5XG4gKiBAcmV0dXJucyB7eyBvazogdHJ1ZSwga2V5OiBvYmplY3QsIGlkZW50aXR5SWQ6IHN0cmluZyB9fHsgb2s6IGZhbHNlLCBlcnJvcjogc3RyaW5nIH19XG4gKi9cbmZ1bmN0aW9uIHZlcmlmeUlkZW50aXR5U2Nobm9yciAobWVzc2FnZSwgc2lnbmF0dXJlSGV4LCBwdWJrZXlIZXgsIGlkZW50aXR5KSB7XG4gIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycgfHwgIW1lc3NhZ2UpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnTWlzc2luZyBzaWduZWQgbWVzc2FnZScgfTtcbiAgfVxuICBpZiAodHlwZW9mIHNpZ25hdHVyZUhleCAhPT0gJ3N0cmluZycgfHwgIS9eW2EtZjAtOV17MTI4fSQvaS50ZXN0KHNpZ25hdHVyZUhleCkpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnTWlzc2luZyBvciBpbnZhbGlkIHNpZ25hdHVyZScgfTtcbiAgfVxuICBpZiAodHlwZW9mIHB1YmtleUhleCAhPT0gJ3N0cmluZycgfHwgIS9eW2EtZjAtOV17NjZ9JC9pLnRlc3QocHVia2V5SGV4KSkge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdNaXNzaW5nIG9yIGludmFsaWQgcHVia2V5JyB9O1xuICB9XG4gIGlmICghaWRlbnRpdHkgfHwgdHlwZW9mIGlkZW50aXR5ICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgaWRlbnRpdHkueHB1YiAhPT0gJ3N0cmluZycgfHwgIWlkZW50aXR5LnhwdWIpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnTWlzc2luZyBpZGVudGl0eSB4cHViJyB9O1xuICB9XG4gIGxldCBrZXk7XG4gIHRyeSB7XG4gICAga2V5ID0gbmV3IEtleSh7IHhwdWI6IGlkZW50aXR5LnhwdWIgfSk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnSW52YWxpZCB4cHViJyB9O1xuICB9XG4gIGNvbnN0IG1zZ0J1ZiA9IEJ1ZmZlci5mcm9tKG1lc3NhZ2UsICd1dGY4Jyk7XG4gIGxldCBzaWdCdWY7XG4gIHRyeSB7XG4gICAgc2lnQnVmID0gQnVmZmVyLmZyb20oc2lnbmF0dXJlSGV4LCAnaGV4Jyk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnSW52YWxpZCBzaWduYXR1cmUgZW5jb2RpbmcnIH07XG4gIH1cbiAgaWYgKCFrZXkudmVyaWZ5U2Nobm9ycihtc2dCdWYsIHNpZ0J1ZikpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnU2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQnIH07XG4gIH1cbiAgY29uc3QgY29tcHJlc3NlZFB1YiA9IFN0cmluZyhrZXkucHVia2V5IHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoY29tcHJlc3NlZFB1YiAhPT0gU3RyaW5nKHB1YmtleUhleCkudG9Mb3dlckNhc2UoKSkge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdQdWJsaWMga2V5IGRvZXMgbm90IG1hdGNoIHhwdWInIH07XG4gIH1cbiAgbGV0IGV4cGVjdGVkSWQ7XG4gIHRyeSB7XG4gICAgZXhwZWN0ZWRJZCA9IGZhYnJpY0lkZW50aXR5SWRGcm9tUHVia2V5SGV4KHB1YmtleUhleCk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnQ291bGQgbm90IGRlcml2ZSBpZGVudGl0eSBmcm9tIHB1YmtleScgfTtcbiAgfVxuICBjb25zdCBjbGFpbWVkSWQgPSBpZGVudGl0eS5pZCAhPSBudWxsID8gU3RyaW5nKGlkZW50aXR5LmlkKS50cmltKCkgOiAnJztcbiAgaWYgKCFjbGFpbWVkSWQgfHwgU3RyaW5nKGV4cGVjdGVkSWQpICE9PSBjbGFpbWVkSWQpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnSWRlbnRpdHkgaWQgZG9lcyBub3QgbWF0Y2ggeHB1YicgfTtcbiAgfVxuICByZXR1cm4geyBvazogdHJ1ZSwga2V5LCBpZGVudGl0eUlkOiBjbGFpbWVkSWQgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZhYnJpY0lkZW50aXR5SWRGcm9tUHVia2V5SGV4LFxuICByZXNvbHZlRmFicmljU2lnbmluZ0lkZW50aXR5LFxuICBidWlsZEZhYnJpY0lkZW50aXR5U2lnbmVkUGF5bG9hZCxcbiAgdmVyaWZ5SWRlbnRpdHlTY2hub3JyXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/fabricIdentitySchnorr.js\n\n}")},"./node_modules/@fabric/core/functions/fabricNativeAccel.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * Browser stub for @fabric/core/functions/fabricNativeAccel.\n * The real module uses require(addonPath) for fabric.node; webpack cannot parse that.\n * Native acceleration is Node-only; Hub/browser always uses @noble/hashes.\n */\n\nconst { sha256 } = __webpack_require__(/*! @noble/hashes/sha2.js */ \"./node_modules/@noble/hashes/sha2.js\");\n\nconst SUPPORTED_ADDON_EXPORTS = Object.freeze(['doubleSha256']);\n\nfunction status () {\n return {\n available: false,\n methods: [],\n nativeDoubleSha256OptIn: false,\n path: null,\n error: undefined\n };\n}\n\nfunction doubleSha256Buffer (buf) {\n if (!Buffer.isBuffer(buf)) throw new Error('doubleSha256Buffer expects Buffer');\n const first = sha256(new Uint8Array(buf));\n const second = sha256(first);\n return Buffer.from(second);\n}\n\nfunction doubleSha256Hex (buf) {\n return doubleSha256Buffer(buf).toString('hex');\n}\n\nfunction isNativeBech32Callable () {\n return false;\n}\n\nmodule.exports = {\n SUPPORTED_ADDON_EXPORTS,\n status,\n doubleSha256Buffer,\n doubleSha256Hex,\n isNativeBech32Callable\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9mYWJyaWNOYXRpdmVBY2NlbC5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWI7QUFDQTtBQUNBLDREQUE0RDtBQUM1RCxxQ0FBcUM7QUFDckM7O0FBRUEsUUFBUSxTQUFTLEVBQUUsbUJBQU8sQ0FBQyxtRUFBdUI7O0FBRWxEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU8sTUFBTTtBQUNiO0FBQ0E7QUFDQSxTQUFTLE1BQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9mYWJyaWNOYXRpdmVBY2NlbC5qcz9hMzJmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBCcm93c2VyIHN0dWIgZm9yIEBmYWJyaWMvY29yZS9mdW5jdGlvbnMvZmFicmljTmF0aXZlQWNjZWwuXG4gKiBUaGUgcmVhbCBtb2R1bGUgdXNlcyByZXF1aXJlKGFkZG9uUGF0aCkgZm9yIGZhYnJpYy5ub2RlOyB3ZWJwYWNrIGNhbm5vdCBwYXJzZSB0aGF0LlxuICogTmF0aXZlIGFjY2VsZXJhdGlvbiBpcyBOb2RlLW9ubHk7IEh1Yi9icm93c2VyIGFsd2F5cyB1c2VzIEBub2JsZS9oYXNoZXMuXG4gKi9cblxuY29uc3QgeyBzaGEyNTYgfSA9IHJlcXVpcmUoJ0Bub2JsZS9oYXNoZXMvc2hhMi5qcycpO1xuXG5jb25zdCBTVVBQT1JURURfQURET05fRVhQT1JUUyA9IE9iamVjdC5mcmVlemUoWydkb3VibGVTaGEyNTYnXSk7XG5cbmZ1bmN0aW9uIHN0YXR1cyAoKSB7XG4gIHJldHVybiB7XG4gICAgYXZhaWxhYmxlOiBmYWxzZSxcbiAgICBtZXRob2RzOiBbXSxcbiAgICBuYXRpdmVEb3VibGVTaGEyNTZPcHRJbjogZmFsc2UsXG4gICAgcGF0aDogbnVsbCxcbiAgICBlcnJvcjogdW5kZWZpbmVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIGRvdWJsZVNoYTI1NkJ1ZmZlciAoYnVmKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBFcnJvcignZG91YmxlU2hhMjU2QnVmZmVyIGV4cGVjdHMgQnVmZmVyJyk7XG4gIGNvbnN0IGZpcnN0ID0gc2hhMjU2KG5ldyBVaW50OEFycmF5KGJ1ZikpO1xuICBjb25zdCBzZWNvbmQgPSBzaGEyNTYoZmlyc3QpO1xuICByZXR1cm4gQnVmZmVyLmZyb20oc2Vjb25kKTtcbn1cblxuZnVuY3Rpb24gZG91YmxlU2hhMjU2SGV4IChidWYpIHtcbiAgcmV0dXJuIGRvdWJsZVNoYTI1NkJ1ZmZlcihidWYpLnRvU3RyaW5nKCdoZXgnKTtcbn1cblxuZnVuY3Rpb24gaXNOYXRpdmVCZWNoMzJDYWxsYWJsZSAoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFNVUFBPUlRFRF9BRERPTl9FWFBPUlRTLFxuICBzdGF0dXMsXG4gIGRvdWJsZVNoYTI1NkJ1ZmZlcixcbiAgZG91YmxlU2hhMjU2SGV4LFxuICBpc05hdGl2ZUJlY2gzMkNhbGxhYmxlXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/fabricNativeAccel.js\n\n}")},"./node_modules/@fabric/core/functions/fabricProgramManifest.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n/**\n * Program manifest v1: program identity + allowed traffic + optional federation /\n * sidechain policy. Parsed by {@link Machine.parseManifest}.\n *\n * @module functions/fabricProgramManifest\n */\n\n/**\n * Setup-phase manifest schema (v1).\n * @param {object} raw\n * @returns {{ ok: boolean, error?: string, manifest?: object }}\n */\nfunction parseProgramManifestV1 (raw) {\n if (!raw || typeof raw !== 'object') return { ok: false, error: 'manifest must be an object' };\n const version = Number(raw.version);\n if (version !== 1) return { ok: false, error: 'unsupported manifest version' };\n const programId = typeof raw.programId === 'string' ? raw.programId.trim() : '';\n const programHash = typeof raw.programHash === 'string' ? raw.programHash.trim() : '';\n if (!programId || !programHash) return { ok: false, error: 'programId and programHash are required' };\n const allowedMessageTypes = Array.isArray(raw.allowedMessageTypes)\n ? raw.allowedMessageTypes.filter((t) => typeof t === 'string')\n : [];\n const federation = raw.federation && typeof raw.federation === 'object'\n ? {\n validators: Array.isArray(raw.federation.validators)\n ? raw.federation.validators.filter((v) => typeof v === 'string')\n : [],\n threshold: Math.max(1, Number(raw.federation.threshold) || 1)\n }\n : null;\n let sidechainPolicy = null;\n if (raw.sidechainPolicy && typeof raw.sidechainPolicy === 'object') {\n try {\n const sidechainState = __webpack_require__(/*! ./sidechainState */ \"./node_modules/@fabric/core/functions/sidechainState.js\");\n sidechainPolicy = sidechainState.parseStatechainPathPolicy(raw.sidechainPolicy);\n } catch (_) {\n sidechainPolicy = null;\n }\n }\n return {\n ok: true,\n manifest: {\n version: 1,\n programId,\n programHash,\n allowedMessageTypes,\n federation,\n sidechainPolicy\n }\n };\n}\n\n/** @deprecated Use {@link parseProgramManifestV1}. */\nconst parseDistributedManifestV1 = parseProgramManifestV1;\n\nmodule.exports = {\n parseProgramManifestV1,\n parseDistributedManifestV1\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9mYWJyaWNQcm9ncmFtTWFuaWZlc3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBLGdDQUFnQyw0QkFBNEI7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsZUFBZTtBQUNmO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLG1CQUFPLENBQUMsaUZBQWtCO0FBQ3ZEO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsNkJBQTZCO0FBQ2xEOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9mYWJyaWNQcm9ncmFtTWFuaWZlc3QuanM/MzA5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUHJvZ3JhbSBtYW5pZmVzdCB2MTogcHJvZ3JhbSBpZGVudGl0eSArIGFsbG93ZWQgdHJhZmZpYyArIG9wdGlvbmFsIGZlZGVyYXRpb24gL1xuICogc2lkZWNoYWluIHBvbGljeS4gUGFyc2VkIGJ5IHtAbGluayBNYWNoaW5lLnBhcnNlTWFuaWZlc3R9LlxuICpcbiAqIEBtb2R1bGUgZnVuY3Rpb25zL2ZhYnJpY1Byb2dyYW1NYW5pZmVzdFxuICovXG5cbi8qKlxuICogU2V0dXAtcGhhc2UgbWFuaWZlc3Qgc2NoZW1hICh2MSkuXG4gKiBAcGFyYW0ge29iamVjdH0gcmF3XG4gKiBAcmV0dXJucyB7eyBvazogYm9vbGVhbiwgZXJyb3I/OiBzdHJpbmcsIG1hbmlmZXN0Pzogb2JqZWN0IH19XG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvZ3JhbU1hbmlmZXN0VjEgKHJhdykge1xuICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnb2JqZWN0JykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ21hbmlmZXN0IG11c3QgYmUgYW4gb2JqZWN0JyB9O1xuICBjb25zdCB2ZXJzaW9uID0gTnVtYmVyKHJhdy52ZXJzaW9uKTtcbiAgaWYgKHZlcnNpb24gIT09IDEpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICd1bnN1cHBvcnRlZCBtYW5pZmVzdCB2ZXJzaW9uJyB9O1xuICBjb25zdCBwcm9ncmFtSWQgPSB0eXBlb2YgcmF3LnByb2dyYW1JZCA9PT0gJ3N0cmluZycgPyByYXcucHJvZ3JhbUlkLnRyaW0oKSA6ICcnO1xuICBjb25zdCBwcm9ncmFtSGFzaCA9IHR5cGVvZiByYXcucHJvZ3JhbUhhc2ggPT09ICdzdHJpbmcnID8gcmF3LnByb2dyYW1IYXNoLnRyaW0oKSA6ICcnO1xuICBpZiAoIXByb2dyYW1JZCB8fCAhcHJvZ3JhbUhhc2gpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdwcm9ncmFtSWQgYW5kIHByb2dyYW1IYXNoIGFyZSByZXF1aXJlZCcgfTtcbiAgY29uc3QgYWxsb3dlZE1lc3NhZ2VUeXBlcyA9IEFycmF5LmlzQXJyYXkocmF3LmFsbG93ZWRNZXNzYWdlVHlwZXMpXG4gICAgPyByYXcuYWxsb3dlZE1lc3NhZ2VUeXBlcy5maWx0ZXIoKHQpID0+IHR5cGVvZiB0ID09PSAnc3RyaW5nJylcbiAgICA6IFtdO1xuICBjb25zdCBmZWRlcmF0aW9uID0gcmF3LmZlZGVyYXRpb24gJiYgdHlwZW9mIHJhdy5mZWRlcmF0aW9uID09PSAnb2JqZWN0J1xuICAgID8ge1xuICAgICAgICB2YWxpZGF0b3JzOiBBcnJheS5pc0FycmF5KHJhdy5mZWRlcmF0aW9uLnZhbGlkYXRvcnMpXG4gICAgICAgICAgPyByYXcuZmVkZXJhdGlvbi52YWxpZGF0b3JzLmZpbHRlcigodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnKVxuICAgICAgICAgIDogW10sXG4gICAgICAgIHRocmVzaG9sZDogTWF0aC5tYXgoMSwgTnVtYmVyKHJhdy5mZWRlcmF0aW9uLnRocmVzaG9sZCkgfHwgMSlcbiAgICAgIH1cbiAgICA6IG51bGw7XG4gIGxldCBzaWRlY2hhaW5Qb2xpY3kgPSBudWxsO1xuICBpZiAocmF3LnNpZGVjaGFpblBvbGljeSAmJiB0eXBlb2YgcmF3LnNpZGVjaGFpblBvbGljeSA9PT0gJ29iamVjdCcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2lkZWNoYWluU3RhdGUgPSByZXF1aXJlKCcuL3NpZGVjaGFpblN0YXRlJyk7XG4gICAgICBzaWRlY2hhaW5Qb2xpY3kgPSBzaWRlY2hhaW5TdGF0ZS5wYXJzZVN0YXRlY2hhaW5QYXRoUG9saWN5KHJhdy5zaWRlY2hhaW5Qb2xpY3kpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHNpZGVjaGFpblBvbGljeSA9IG51bGw7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgb2s6IHRydWUsXG4gICAgbWFuaWZlc3Q6IHtcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICBwcm9ncmFtSWQsXG4gICAgICBwcm9ncmFtSGFzaCxcbiAgICAgIGFsbG93ZWRNZXNzYWdlVHlwZXMsXG4gICAgICBmZWRlcmF0aW9uLFxuICAgICAgc2lkZWNoYWluUG9saWN5XG4gICAgfVxuICB9O1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBwYXJzZVByb2dyYW1NYW5pZmVzdFYxfS4gKi9cbmNvbnN0IHBhcnNlRGlzdHJpYnV0ZWRNYW5pZmVzdFYxID0gcGFyc2VQcm9ncmFtTWFuaWZlc3RWMTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhcnNlUHJvZ3JhbU1hbmlmZXN0VjEsXG4gIHBhcnNlRGlzdHJpYnV0ZWRNYW5pZmVzdFYxXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/fabricProgramManifest.js\n\n}")},"./node_modules/@fabric/core/functions/identityCrossSign.js"(module){"use strict";eval("{\n\n/**\n * @fileoverview Canonical IdentityCrossSign / IdentityCrossSignRevoke strings.\n * Browser-safe (no Node built-ins). Site-login / device-link HTTP stays in\n * `@fabric/http`; this module is the gossiped BIP340 message after countersign.\n */\n\nconst CROSS_SIGN_PREFIX = 'fabric:identity-cross-sign:1';\nconst REVOKE_PREFIX = 'fabric:identity-cross-sign-revoke:1';\nconst SIGN_TYPE = 'IdentityCrossSign';\nconst REVOKE_TYPE = 'IdentityCrossSignRevoke';\n\nfunction _normHex (value) {\n return String(value || '').trim().toLowerCase().replace(/^0x/, '');\n}\n\nfunction _normNonce (nonce) {\n const n = _normHex(nonce);\n if (!/^[a-f0-9]{64}$/.test(n)) return null;\n return n;\n}\n\n/** Compressed 33-byte (02/03 + 32) or x-only 32-byte hex. Rejects `:` so fields cannot collide. */\nfunction _normPubkey (value) {\n const s = _normHex(value);\n if (/^0[23][a-f0-9]{64}$/.test(s)) return s;\n if (/^[a-f0-9]{64}$/.test(s)) return s;\n return null;\n}\n\n/**\n * Canonical BIP340 message: A attests that B is the same actor.\n * @param {string} nonce 64-hex from the device-link session\n * @param {string} localPubkey signing device pubkey\n * @param {string} peerPubkey linked device pubkey\n * @returns {string|null}\n */\nfunction buildCrossSignMessage (nonce, localPubkey, peerPubkey) {\n const n = _normNonce(nonce);\n const local = _normPubkey(localPubkey);\n const peer = _normPubkey(peerPubkey);\n if (!n || !local || !peer) return null;\n return `${CROSS_SIGN_PREFIX}:${n}:${local}:${peer}`;\n}\n\n/**\n * Canonical BIP340 message: either side splits the A↔B edge.\n * @param {string} nonce\n * @param {string} localPubkey\n * @param {string} peerPubkey\n * @returns {string|null}\n */\nfunction buildRevokeMessage (nonce, localPubkey, peerPubkey) {\n const n = _normNonce(nonce);\n const local = _normPubkey(localPubkey);\n const peer = _normPubkey(peerPubkey);\n if (!n || !local || !peer) return null;\n return `${REVOKE_PREFIX}:${n}:${local}:${peer}`;\n}\n\nfunction parsePrefixed (msg, prefix) {\n const s = String(msg || '');\n const head = prefix + ':';\n if (!s.startsWith(head)) return null;\n const rest = s.slice(head.length);\n const nonce = rest.slice(0, 64);\n if (!/^[a-f0-9]{64}$/i.test(nonce) || rest[64] !== ':') return null;\n const after = rest.slice(65);\n const i = after.indexOf(':');\n if (i <= 0) return null;\n const localPubkey = _normPubkey(after.slice(0, i));\n const peerPubkey = _normPubkey(after.slice(i + 1));\n if (!localPubkey || !peerPubkey) return null;\n return { nonce: nonce.toLowerCase(), localPubkey, peerPubkey };\n}\n\nfunction parseCrossSignMessage (msg) {\n return parsePrefixed(msg, CROSS_SIGN_PREFIX);\n}\n\nfunction parseRevokeMessage (msg) {\n return parsePrefixed(msg, REVOKE_PREFIX);\n}\n\n/**\n * @param {string} type\n * @param {object} [fields]\n * @returns {object}\n */\nfunction _typedObject (type, fields = {}) {\n return {\n type,\n '@type': type,\n localPubkey: _normPubkey(fields.localPubkey) || '',\n peerPubkey: _normPubkey(fields.peerPubkey) || '',\n nonce: _normNonce(fields.nonce) || '',\n createdAt: fields.createdAt || new Date().toISOString(),\n signature: fields.signature || null,\n pubkeyHex: fields.pubkeyHex || null,\n identity: fields.identity || null\n };\n}\n\n/**\n * @param {object} [fields]\n * @returns {object}\n */\nfunction buildCrossSignObject (fields = {}) {\n return _typedObject(SIGN_TYPE, fields);\n}\n\n/**\n * @param {object} [fields]\n * @returns {object}\n */\nfunction buildRevokeObject (fields = {}) {\n return _typedObject(REVOKE_TYPE, fields);\n}\n\nfunction isCrossSignType (type) {\n const t = String(type || '');\n return t === SIGN_TYPE || t === REVOKE_TYPE;\n}\n\nmodule.exports = {\n CROSS_SIGN_PREFIX,\n REVOKE_PREFIX,\n SIGN_TYPE,\n REVOKE_TYPE,\n buildCrossSignMessage,\n buildRevokeMessage,\n parseCrossSignMessage,\n parseRevokeMessage,\n buildCrossSignObject,\n buildRevokeObject,\n isCrossSignType\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9pZGVudGl0eUNyb3NzU2lnbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsR0FBRztBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixHQUFHO0FBQ3pCLGlCQUFpQixHQUFHO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsS0FBSztBQUNwRDs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksY0FBYyxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsS0FBSztBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsR0FBRztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS9mdW5jdGlvbnMvaWRlbnRpdHlDcm9zc1NpZ24uanM/OGI5NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBDYW5vbmljYWwgSWRlbnRpdHlDcm9zc1NpZ24gLyBJZGVudGl0eUNyb3NzU2lnblJldm9rZSBzdHJpbmdzLlxuICogQnJvd3Nlci1zYWZlIChubyBOb2RlIGJ1aWx0LWlucykuIFNpdGUtbG9naW4gLyBkZXZpY2UtbGluayBIVFRQIHN0YXlzIGluXG4gKiBgQGZhYnJpYy9odHRwYDsgdGhpcyBtb2R1bGUgaXMgdGhlIGdvc3NpcGVkIEJJUDM0MCBtZXNzYWdlIGFmdGVyIGNvdW50ZXJzaWduLlxuICovXG5cbmNvbnN0IENST1NTX1NJR05fUFJFRklYID0gJ2ZhYnJpYzppZGVudGl0eS1jcm9zcy1zaWduOjEnO1xuY29uc3QgUkVWT0tFX1BSRUZJWCA9ICdmYWJyaWM6aWRlbnRpdHktY3Jvc3Mtc2lnbi1yZXZva2U6MSc7XG5jb25zdCBTSUdOX1RZUEUgPSAnSWRlbnRpdHlDcm9zc1NpZ24nO1xuY29uc3QgUkVWT0tFX1RZUEUgPSAnSWRlbnRpdHlDcm9zc1NpZ25SZXZva2UnO1xuXG5mdW5jdGlvbiBfbm9ybUhleCAodmFsdWUpIHtcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXjB4LywgJycpO1xufVxuXG5mdW5jdGlvbiBfbm9ybU5vbmNlIChub25jZSkge1xuICBjb25zdCBuID0gX25vcm1IZXgobm9uY2UpO1xuICBpZiAoIS9eW2EtZjAtOV17NjR9JC8udGVzdChuKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBuO1xufVxuXG4vKiogQ29tcHJlc3NlZCAzMy1ieXRlICgwMi8wMyArIDMyKSBvciB4LW9ubHkgMzItYnl0ZSBoZXguIFJlamVjdHMgYDpgIHNvIGZpZWxkcyBjYW5ub3QgY29sbGlkZS4gKi9cbmZ1bmN0aW9uIF9ub3JtUHVia2V5ICh2YWx1ZSkge1xuICBjb25zdCBzID0gX25vcm1IZXgodmFsdWUpO1xuICBpZiAoL14wWzIzXVthLWYwLTldezY0fSQvLnRlc3QocykpIHJldHVybiBzO1xuICBpZiAoL15bYS1mMC05XXs2NH0kLy50ZXN0KHMpKSByZXR1cm4gcztcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIEJJUDM0MCBtZXNzYWdlOiBBIGF0dGVzdHMgdGhhdCBCIGlzIHRoZSBzYW1lIGFjdG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IG5vbmNlIDY0LWhleCBmcm9tIHRoZSBkZXZpY2UtbGluayBzZXNzaW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxQdWJrZXkgc2lnbmluZyBkZXZpY2UgcHVia2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGVlclB1YmtleSBsaW5rZWQgZGV2aWNlIHB1YmtleVxuICogQHJldHVybnMge3N0cmluZ3xudWxsfVxuICovXG5mdW5jdGlvbiBidWlsZENyb3NzU2lnbk1lc3NhZ2UgKG5vbmNlLCBsb2NhbFB1YmtleSwgcGVlclB1YmtleSkge1xuICBjb25zdCBuID0gX25vcm1Ob25jZShub25jZSk7XG4gIGNvbnN0IGxvY2FsID0gX25vcm1QdWJrZXkobG9jYWxQdWJrZXkpO1xuICBjb25zdCBwZWVyID0gX25vcm1QdWJrZXkocGVlclB1YmtleSk7XG4gIGlmICghbiB8fCAhbG9jYWwgfHwgIXBlZXIpIHJldHVybiBudWxsO1xuICByZXR1cm4gYCR7Q1JPU1NfU0lHTl9QUkVGSVh9OiR7bn06JHtsb2NhbH06JHtwZWVyfWA7XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIEJJUDM0MCBtZXNzYWdlOiBlaXRoZXIgc2lkZSBzcGxpdHMgdGhlIEHihpRCIGVkZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9uY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbFB1YmtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBlZXJQdWJrZXlcbiAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH1cbiAqL1xuZnVuY3Rpb24gYnVpbGRSZXZva2VNZXNzYWdlIChub25jZSwgbG9jYWxQdWJrZXksIHBlZXJQdWJrZXkpIHtcbiAgY29uc3QgbiA9IF9ub3JtTm9uY2Uobm9uY2UpO1xuICBjb25zdCBsb2NhbCA9IF9ub3JtUHVia2V5KGxvY2FsUHVia2V5KTtcbiAgY29uc3QgcGVlciA9IF9ub3JtUHVia2V5KHBlZXJQdWJrZXkpO1xuICBpZiAoIW4gfHwgIWxvY2FsIHx8ICFwZWVyKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGAke1JFVk9LRV9QUkVGSVh9OiR7bn06JHtsb2NhbH06JHtwZWVyfWA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJlZml4ZWQgKG1zZywgcHJlZml4KSB7XG4gIGNvbnN0IHMgPSBTdHJpbmcobXNnIHx8ICcnKTtcbiAgY29uc3QgaGVhZCA9IHByZWZpeCArICc6JztcbiAgaWYgKCFzLnN0YXJ0c1dpdGgoaGVhZCkpIHJldHVybiBudWxsO1xuICBjb25zdCByZXN0ID0gcy5zbGljZShoZWFkLmxlbmd0aCk7XG4gIGNvbnN0IG5vbmNlID0gcmVzdC5zbGljZSgwLCA2NCk7XG4gIGlmICghL15bYS1mMC05XXs2NH0kL2kudGVzdChub25jZSkgfHwgcmVzdFs2NF0gIT09ICc6JykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFmdGVyID0gcmVzdC5zbGljZSg2NSk7XG4gIGNvbnN0IGkgPSBhZnRlci5pbmRleE9mKCc6Jyk7XG4gIGlmIChpIDw9IDApIHJldHVybiBudWxsO1xuICBjb25zdCBsb2NhbFB1YmtleSA9IF9ub3JtUHVia2V5KGFmdGVyLnNsaWNlKDAsIGkpKTtcbiAgY29uc3QgcGVlclB1YmtleSA9IF9ub3JtUHVia2V5KGFmdGVyLnNsaWNlKGkgKyAxKSk7XG4gIGlmICghbG9jYWxQdWJrZXkgfHwgIXBlZXJQdWJrZXkpIHJldHVybiBudWxsO1xuICByZXR1cm4geyBub25jZTogbm9uY2UudG9Mb3dlckNhc2UoKSwgbG9jYWxQdWJrZXksIHBlZXJQdWJrZXkgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDcm9zc1NpZ25NZXNzYWdlIChtc2cpIHtcbiAgcmV0dXJuIHBhcnNlUHJlZml4ZWQobXNnLCBDUk9TU19TSUdOX1BSRUZJWCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmV2b2tlTWVzc2FnZSAobXNnKSB7XG4gIHJldHVybiBwYXJzZVByZWZpeGVkKG1zZywgUkVWT0tFX1BSRUZJWCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBbZmllbGRzXVxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gX3R5cGVkT2JqZWN0ICh0eXBlLCBmaWVsZHMgPSB7fSkge1xuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgJ0B0eXBlJzogdHlwZSxcbiAgICBsb2NhbFB1YmtleTogX25vcm1QdWJrZXkoZmllbGRzLmxvY2FsUHVia2V5KSB8fCAnJyxcbiAgICBwZWVyUHVia2V5OiBfbm9ybVB1YmtleShmaWVsZHMucGVlclB1YmtleSkgfHwgJycsXG4gICAgbm9uY2U6IF9ub3JtTm9uY2UoZmllbGRzLm5vbmNlKSB8fCAnJyxcbiAgICBjcmVhdGVkQXQ6IGZpZWxkcy5jcmVhdGVkQXQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHNpZ25hdHVyZTogZmllbGRzLnNpZ25hdHVyZSB8fCBudWxsLFxuICAgIHB1YmtleUhleDogZmllbGRzLnB1YmtleUhleCB8fCBudWxsLFxuICAgIGlkZW50aXR5OiBmaWVsZHMuaWRlbnRpdHkgfHwgbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBbZmllbGRzXVxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gYnVpbGRDcm9zc1NpZ25PYmplY3QgKGZpZWxkcyA9IHt9KSB7XG4gIHJldHVybiBfdHlwZWRPYmplY3QoU0lHTl9UWVBFLCBmaWVsZHMpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBbZmllbGRzXVxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gYnVpbGRSZXZva2VPYmplY3QgKGZpZWxkcyA9IHt9KSB7XG4gIHJldHVybiBfdHlwZWRPYmplY3QoUkVWT0tFX1RZUEUsIGZpZWxkcyk7XG59XG5cbmZ1bmN0aW9uIGlzQ3Jvc3NTaWduVHlwZSAodHlwZSkge1xuICBjb25zdCB0ID0gU3RyaW5nKHR5cGUgfHwgJycpO1xuICByZXR1cm4gdCA9PT0gU0lHTl9UWVBFIHx8IHQgPT09IFJFVk9LRV9UWVBFO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1JPU1NfU0lHTl9QUkVGSVgsXG4gIFJFVk9LRV9QUkVGSVgsXG4gIFNJR05fVFlQRSxcbiAgUkVWT0tFX1RZUEUsXG4gIGJ1aWxkQ3Jvc3NTaWduTWVzc2FnZSxcbiAgYnVpbGRSZXZva2VNZXNzYWdlLFxuICBwYXJzZUNyb3NzU2lnbk1lc3NhZ2UsXG4gIHBhcnNlUmV2b2tlTWVzc2FnZSxcbiAgYnVpbGRDcm9zc1NpZ25PYmplY3QsXG4gIGJ1aWxkUmV2b2tlT2JqZWN0LFxuICBpc0Nyb3NzU2lnblR5cGVcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/identityCrossSign.js\n\n}")},"./node_modules/@fabric/core/functions/identityCrossSignVerify.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n/**\n * @fileoverview Sign / verify IdentityCrossSign bodies with protocol identity\n * Schnorr (`functions/fabricIdentitySchnorr`). AMP / envelope author is transport\n * only — the inner BIP340 over the canonical string is the identity proof.\n */\n\nconst {\n buildFabricIdentitySignedPayload,\n resolveFabricSigningIdentity,\n verifyIdentitySchnorr\n} = __webpack_require__(/*! ./fabricIdentitySchnorr */ \"./node_modules/@fabric/core/functions/fabricIdentitySchnorr.js\");\nconst {\n SIGN_TYPE,\n REVOKE_TYPE,\n buildCrossSignMessage,\n buildRevokeMessage,\n buildCrossSignObject,\n buildRevokeObject\n} = __webpack_require__(/*! ./identityCrossSign */ \"./node_modules/@fabric/core/functions/identityCrossSign.js\");\n\nfunction pubkeyXOnly (hex) {\n const s = String(hex || '').toLowerCase().replace(/^0x/, '');\n if (/^0[23][0-9a-f]{64}$/.test(s)) return s.slice(2);\n if (/^[0-9a-f]{64}$/.test(s)) return s;\n return null;\n}\n\nfunction pubkeysMatch (a, b) {\n const xa = pubkeyXOnly(a);\n const xb = pubkeyXOnly(b);\n return !!(xa && xb && xa === xb);\n}\n\nfunction _messageFor (kind, rec) {\n if (kind === REVOKE_TYPE) {\n return buildRevokeMessage(rec.nonce, rec.localPubkey, rec.peerPubkey);\n }\n return buildCrossSignMessage(rec.nonce, rec.localPubkey, rec.peerPubkey);\n}\n\n/**\n * @param {object} identity unlocked Fabric Identity, HD Key, or Passport\n * `{ privateKeyHex, xpub }` leaf. Canonical `localPubkey` is the Fabric\n * signing key (`fabricKey.pubkey`), never Bech32 `identity.id` or the\n * HD master pubkey.\n * @param {object} fields { peerPubkey, nonce, createdAt? }\n * `createdAt` is display metadata only — it is not in the canonical BIP340\n * string and must not be treated as authenticated.\n * @param {string} [kind]\n * @returns {object}\n */\nfunction signCrossSign (identity, fields, kind = SIGN_TYPE) {\n if (!fields || typeof fields !== 'object') {\n throw new Error('cross-sign fields required');\n }\n if (kind !== SIGN_TYPE && kind !== REVOKE_TYPE) {\n throw new Error('unknown cross-sign type');\n }\n const resolved = resolveFabricSigningIdentity(identity);\n const localPubkey = String(resolved.fabricKey.pubkey || '');\n const rec = {\n localPubkey,\n peerPubkey: fields.peerPubkey,\n nonce: fields.nonce,\n createdAt: fields.createdAt\n };\n const message = _messageFor(kind, rec);\n if (!message) throw new Error('invalid cross-sign fields');\n const signed = buildFabricIdentitySignedPayload(resolved, message);\n const base = kind === REVOKE_TYPE\n ? buildRevokeObject(Object.assign({}, rec, signed))\n : buildCrossSignObject(Object.assign({}, rec, signed));\n return base;\n}\n\n/**\n * @param {object} object gossip / HTTP body\n * @param {string} [_signerPubkey] AMP / envelope author when present (ignored)\n * @returns {{ ok: true, kind: string, record: object }|{ ok: false, error: string }}\n * `record.createdAt` is copied from the body when present; it is not covered\n * by the Schnorr signature.\n */\nfunction verifyCrossSignObject (object, _signerPubkey) {\n if (!object || typeof object !== 'object') {\n return { ok: false, error: 'cross-sign object required' };\n }\n const kind = object.type || object['@type'];\n if (kind !== SIGN_TYPE && kind !== REVOKE_TYPE) {\n return { ok: false, error: 'unknown cross-sign type' };\n }\n const localPubkey = object.localPubkey || object.pubkeyHex;\n const peerPubkey = object.peerPubkey;\n const nonce = object.nonce;\n const message = _messageFor(kind, { localPubkey, peerPubkey, nonce });\n if (!message) return { ok: false, error: 'invalid cross-sign fields' };\n const checked = verifyIdentitySchnorr(\n message,\n object.signature,\n object.pubkeyHex || localPubkey,\n object.identity\n );\n if (!checked.ok) return { ok: false, error: checked.error || 'signature failed' };\n if (!pubkeysMatch(checked.key && checked.key.pubkey, localPubkey) &&\n !pubkeysMatch(object.pubkeyHex, localPubkey)) {\n return { ok: false, error: 'pubkey does not match localPubkey' };\n }\n return {\n ok: true,\n kind,\n record: {\n localPubkey,\n peerPubkey,\n nonce,\n createdAt: object.createdAt || null\n }\n };\n}\n\nmodule.exports = {\n signCrossSign,\n verifyCrossSignObject,\n pubkeysMatch\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9pZGVudGl0eUNyb3NzU2lnblZlcmlmeS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxFQUFFLG1CQUFPLENBQUMsK0ZBQXlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxFQUFFLG1CQUFPLENBQUMsdUZBQXFCOztBQUVqQztBQUNBO0FBQ0Esc0JBQXNCLEdBQUc7QUFDekIsaUJBQWlCLEdBQUc7QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixRQUFRLHFCQUFxQjtBQUM3QjtBQUNBO0FBQ0EsV0FBVyxRQUFRLFNBQVM7QUFDNUI7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QywyQ0FBMkM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsZUFBZSx3Q0FBd0MsR0FBRztBQUMxRCw4REFBOEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGdDQUFnQztBQUN0RSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvZnVuY3Rpb25zL2lkZW50aXR5Q3Jvc3NTaWduVmVyaWZ5LmpzPzRiMjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgU2lnbiAvIHZlcmlmeSBJZGVudGl0eUNyb3NzU2lnbiBib2RpZXMgd2l0aCBwcm90b2NvbCBpZGVudGl0eVxuICogU2Nobm9yciAoYGZ1bmN0aW9ucy9mYWJyaWNJZGVudGl0eVNjaG5vcnJgKS4gQU1QIC8gZW52ZWxvcGUgYXV0aG9yIGlzIHRyYW5zcG9ydFxuICogb25seSDigJQgdGhlIGlubmVyIEJJUDM0MCBvdmVyIHRoZSBjYW5vbmljYWwgc3RyaW5nIGlzIHRoZSBpZGVudGl0eSBwcm9vZi5cbiAqL1xuXG5jb25zdCB7XG4gIGJ1aWxkRmFicmljSWRlbnRpdHlTaWduZWRQYXlsb2FkLFxuICByZXNvbHZlRmFicmljU2lnbmluZ0lkZW50aXR5LFxuICB2ZXJpZnlJZGVudGl0eVNjaG5vcnJcbn0gPSByZXF1aXJlKCcuL2ZhYnJpY0lkZW50aXR5U2Nobm9ycicpO1xuY29uc3Qge1xuICBTSUdOX1RZUEUsXG4gIFJFVk9LRV9UWVBFLFxuICBidWlsZENyb3NzU2lnbk1lc3NhZ2UsXG4gIGJ1aWxkUmV2b2tlTWVzc2FnZSxcbiAgYnVpbGRDcm9zc1NpZ25PYmplY3QsXG4gIGJ1aWxkUmV2b2tlT2JqZWN0XG59ID0gcmVxdWlyZSgnLi9pZGVudGl0eUNyb3NzU2lnbicpO1xuXG5mdW5jdGlvbiBwdWJrZXlYT25seSAoaGV4KSB7XG4gIGNvbnN0IHMgPSBTdHJpbmcoaGV4IHx8ICcnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL14weC8sICcnKTtcbiAgaWYgKC9eMFsyM11bMC05YS1mXXs2NH0kLy50ZXN0KHMpKSByZXR1cm4gcy5zbGljZSgyKTtcbiAgaWYgKC9eWzAtOWEtZl17NjR9JC8udGVzdChzKSkgcmV0dXJuIHM7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBwdWJrZXlzTWF0Y2ggKGEsIGIpIHtcbiAgY29uc3QgeGEgPSBwdWJrZXlYT25seShhKTtcbiAgY29uc3QgeGIgPSBwdWJrZXlYT25seShiKTtcbiAgcmV0dXJuICEhKHhhICYmIHhiICYmIHhhID09PSB4Yik7XG59XG5cbmZ1bmN0aW9uIF9tZXNzYWdlRm9yIChraW5kLCByZWMpIHtcbiAgaWYgKGtpbmQgPT09IFJFVk9LRV9UWVBFKSB7XG4gICAgcmV0dXJuIGJ1aWxkUmV2b2tlTWVzc2FnZShyZWMubm9uY2UsIHJlYy5sb2NhbFB1YmtleSwgcmVjLnBlZXJQdWJrZXkpO1xuICB9XG4gIHJldHVybiBidWlsZENyb3NzU2lnbk1lc3NhZ2UocmVjLm5vbmNlLCByZWMubG9jYWxQdWJrZXksIHJlYy5wZWVyUHVia2V5KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gaWRlbnRpdHkgdW5sb2NrZWQgRmFicmljIElkZW50aXR5LCBIRCBLZXksIG9yIFBhc3Nwb3J0XG4gKiAgIGB7IHByaXZhdGVLZXlIZXgsIHhwdWIgfWAgbGVhZi4gQ2Fub25pY2FsIGBsb2NhbFB1YmtleWAgaXMgdGhlIEZhYnJpY1xuICogICBzaWduaW5nIGtleSAoYGZhYnJpY0tleS5wdWJrZXlgKSwgbmV2ZXIgQmVjaDMyIGBpZGVudGl0eS5pZGAgb3IgdGhlXG4gKiAgIEhEIG1hc3RlciBwdWJrZXkuXG4gKiBAcGFyYW0ge29iamVjdH0gZmllbGRzIHsgcGVlclB1YmtleSwgbm9uY2UsIGNyZWF0ZWRBdD8gfVxuICogICBgY3JlYXRlZEF0YCBpcyBkaXNwbGF5IG1ldGFkYXRhIG9ubHkg4oCUIGl0IGlzIG5vdCBpbiB0aGUgY2Fub25pY2FsIEJJUDM0MFxuICogICBzdHJpbmcgYW5kIG11c3Qgbm90IGJlIHRyZWF0ZWQgYXMgYXV0aGVudGljYXRlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBba2luZF1cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHNpZ25Dcm9zc1NpZ24gKGlkZW50aXR5LCBmaWVsZHMsIGtpbmQgPSBTSUdOX1RZUEUpIHtcbiAgaWYgKCFmaWVsZHMgfHwgdHlwZW9mIGZpZWxkcyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nyb3NzLXNpZ24gZmllbGRzIHJlcXVpcmVkJyk7XG4gIH1cbiAgaWYgKGtpbmQgIT09IFNJR05fVFlQRSAmJiBraW5kICE9PSBSRVZPS0VfVFlQRSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjcm9zcy1zaWduIHR5cGUnKTtcbiAgfVxuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVGYWJyaWNTaWduaW5nSWRlbnRpdHkoaWRlbnRpdHkpO1xuICBjb25zdCBsb2NhbFB1YmtleSA9IFN0cmluZyhyZXNvbHZlZC5mYWJyaWNLZXkucHVia2V5IHx8ICcnKTtcbiAgY29uc3QgcmVjID0ge1xuICAgIGxvY2FsUHVia2V5LFxuICAgIHBlZXJQdWJrZXk6IGZpZWxkcy5wZWVyUHVia2V5LFxuICAgIG5vbmNlOiBmaWVsZHMubm9uY2UsXG4gICAgY3JlYXRlZEF0OiBmaWVsZHMuY3JlYXRlZEF0XG4gIH07XG4gIGNvbnN0IG1lc3NhZ2UgPSBfbWVzc2FnZUZvcihraW5kLCByZWMpO1xuICBpZiAoIW1lc3NhZ2UpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjcm9zcy1zaWduIGZpZWxkcycpO1xuICBjb25zdCBzaWduZWQgPSBidWlsZEZhYnJpY0lkZW50aXR5U2lnbmVkUGF5bG9hZChyZXNvbHZlZCwgbWVzc2FnZSk7XG4gIGNvbnN0IGJhc2UgPSBraW5kID09PSBSRVZPS0VfVFlQRVxuICAgID8gYnVpbGRSZXZva2VPYmplY3QoT2JqZWN0LmFzc2lnbih7fSwgcmVjLCBzaWduZWQpKVxuICAgIDogYnVpbGRDcm9zc1NpZ25PYmplY3QoT2JqZWN0LmFzc2lnbih7fSwgcmVjLCBzaWduZWQpKTtcbiAgcmV0dXJuIGJhc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCBnb3NzaXAgLyBIVFRQIGJvZHlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbX3NpZ25lclB1YmtleV0gQU1QIC8gZW52ZWxvcGUgYXV0aG9yIHdoZW4gcHJlc2VudCAoaWdub3JlZClcbiAqIEByZXR1cm5zIHt7IG9rOiB0cnVlLCBraW5kOiBzdHJpbmcsIHJlY29yZDogb2JqZWN0IH18eyBvazogZmFsc2UsIGVycm9yOiBzdHJpbmcgfX1cbiAqICAgYHJlY29yZC5jcmVhdGVkQXRgIGlzIGNvcGllZCBmcm9tIHRoZSBib2R5IHdoZW4gcHJlc2VudDsgaXQgaXMgbm90IGNvdmVyZWRcbiAqICAgYnkgdGhlIFNjaG5vcnIgc2lnbmF0dXJlLlxuICovXG5mdW5jdGlvbiB2ZXJpZnlDcm9zc1NpZ25PYmplY3QgKG9iamVjdCwgX3NpZ25lclB1YmtleSkge1xuICBpZiAoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdjcm9zcy1zaWduIG9iamVjdCByZXF1aXJlZCcgfTtcbiAgfVxuICBjb25zdCBraW5kID0gb2JqZWN0LnR5cGUgfHwgb2JqZWN0WydAdHlwZSddO1xuICBpZiAoa2luZCAhPT0gU0lHTl9UWVBFICYmIGtpbmQgIT09IFJFVk9LRV9UWVBFKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ3Vua25vd24gY3Jvc3Mtc2lnbiB0eXBlJyB9O1xuICB9XG4gIGNvbnN0IGxvY2FsUHVia2V5ID0gb2JqZWN0LmxvY2FsUHVia2V5IHx8IG9iamVjdC5wdWJrZXlIZXg7XG4gIGNvbnN0IHBlZXJQdWJrZXkgPSBvYmplY3QucGVlclB1YmtleTtcbiAgY29uc3Qgbm9uY2UgPSBvYmplY3Qubm9uY2U7XG4gIGNvbnN0IG1lc3NhZ2UgPSBfbWVzc2FnZUZvcihraW5kLCB7IGxvY2FsUHVia2V5LCBwZWVyUHVia2V5LCBub25jZSB9KTtcbiAgaWYgKCFtZXNzYWdlKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnaW52YWxpZCBjcm9zcy1zaWduIGZpZWxkcycgfTtcbiAgY29uc3QgY2hlY2tlZCA9IHZlcmlmeUlkZW50aXR5U2Nobm9ycihcbiAgICBtZXNzYWdlLFxuICAgIG9iamVjdC5zaWduYXR1cmUsXG4gICAgb2JqZWN0LnB1YmtleUhleCB8fCBsb2NhbFB1YmtleSxcbiAgICBvYmplY3QuaWRlbnRpdHlcbiAgKTtcbiAgaWYgKCFjaGVja2VkLm9rKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBjaGVja2VkLmVycm9yIHx8ICdzaWduYXR1cmUgZmFpbGVkJyB9O1xuICBpZiAoIXB1YmtleXNNYXRjaChjaGVja2VkLmtleSAmJiBjaGVja2VkLmtleS5wdWJrZXksIGxvY2FsUHVia2V5KSAmJlxuICAgICFwdWJrZXlzTWF0Y2gob2JqZWN0LnB1YmtleUhleCwgbG9jYWxQdWJrZXkpKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ3B1YmtleSBkb2VzIG5vdCBtYXRjaCBsb2NhbFB1YmtleScgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG9rOiB0cnVlLFxuICAgIGtpbmQsXG4gICAgcmVjb3JkOiB7XG4gICAgICBsb2NhbFB1YmtleSxcbiAgICAgIHBlZXJQdWJrZXksXG4gICAgICBub25jZSxcbiAgICAgIGNyZWF0ZWRBdDogb2JqZWN0LmNyZWF0ZWRBdCB8fCBudWxsXG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2lnbkNyb3NzU2lnbixcbiAgdmVyaWZ5Q3Jvc3NTaWduT2JqZWN0LFxuICBwdWJrZXlzTWF0Y2hcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/identityCrossSignVerify.js\n\n}")},"./node_modules/@fabric/core/functions/inventoryHtlc.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * P2TR (BIP 341) script-path HTLC for inventory → paid document transfer.\n * Internal key is a fixed NUMS point; spending uses either:\n * - Claim: sha256(preimage) == paymentHash, seller Schnorr signature\n * - Refund: CLTV lock height, buyer signature\n *\n * **Payment hash / preimage (binding):** always go through\n * `@fabric/core/functions/documentPaymentHash` (`resolveDocumentContentHashHex`).\n *\n * - **Sealed (priced):** preimage = content key `K`; paymentHash = SHA256(K).\n * - **Legacy unsealed envelope:** preimage = SHA256(**unsigned**\n * `documentPublishEnvelopeBuffer` bytes) — never a Schnorr-signed gossip frame;\n * paymentHash = SHA256(preimage) (`purchaseContentHashHex`).\n *\n * Phase-2 AES-GCM for sealed docs uses `K`; legacy envelope path may use the\n * envelope-derived 32-byte preimage as the content key only when unsealed.\n */\n\nconst crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nconst bitcoin = __webpack_require__(/*! bitcoinjs-lib */ \"./node_modules/bitcoinjs-lib/src/index.js\");\nconst ecc = __webpack_require__(/*! ../types/ecc */ \"./node_modules/@fabric/core/types/ecc.js\");\nconst bip341 = __webpack_require__(/*! bitcoinjs-lib/src/payments/bip341 */ \"./node_modules/bitcoinjs-lib/src/payments/bip341.js\");\nconst psbtutils = __webpack_require__(/*! bitcoinjs-lib/src/psbt/psbtutils */ \"./node_modules/bitcoinjs-lib/src/psbt/psbtutils.js\");\nconst { payments, networks, script, Psbt } = bitcoin;\n\nbitcoin.initEccLib(ecc);\n\n/** bitcoinjs-lib Signer for taproot script-path (publicKey + sign + signSchnorr). */\nfunction signerFromPriv32 (priv32) {\n const priv = asBuffer(priv32);\n if (!priv || priv.length !== 32) throw new Error('Private key must be 32 bytes.');\n const publicKey = ecc.pointFromScalar(priv, true);\n if (!publicKey) throw new Error('Invalid private key (pointFromScalar failed).');\n return {\n publicKey: Buffer.from(publicKey),\n sign (hash) {\n return Buffer.from(ecc.sign(hash, priv));\n },\n signSchnorr (hash) {\n return Buffer.from(ecc.signSchnorr(hash, priv));\n }\n };\n}\n\n/** BIP341-style NUMS x-only internal key (nothing-up-my-sleeve). */\nconst TAPROOT_INTERNAL_NUMS = Buffer.from(\n '50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0',\n 'hex'\n);\n\nfunction networkForFabricName (name = '') {\n const n = String(name || '').toLowerCase();\n if (n === 'regtest' || n === 'test') return networks.regtest;\n if (n === 'testnet' || n === 'signet') return networks.testnet;\n return networks.bitcoin;\n}\n\n/** Coerce Buffer / Uint8Array / hex string to Buffer (bitcoinjs-lib 7 uses Uint8Array). */\nfunction asBuffer (value, encoding = 'hex') {\n if (Buffer.isBuffer(value)) return value;\n if (value instanceof Uint8Array) return Buffer.from(value);\n if (typeof value === 'string') return Buffer.from(value, encoding);\n return null;\n}\n\nfunction toXOnly (pubkey33) {\n const key = asBuffer(pubkey33);\n if (!key || key.length !== 33) return null;\n if (key[0] !== 0x02 && key[0] !== 0x03) return null;\n return key.subarray(1, 33);\n}\n\nfunction buildInventoryHtlcP2tr (opts = {}) {\n const {\n networkName,\n sellerPubkeyCompressed,\n buyerRefundPubkeyCompressed,\n refundLocktimeHeight\n } = opts;\n\n const sellerX = toXOnly(sellerPubkeyCompressed);\n const buyerX = toXOnly(buyerRefundPubkeyCompressed);\n if (!sellerX || !buyerX) throw new Error('Invalid compressed public keys (expect 33-byte 02/03).');\n const paymentHash32 = asBuffer(opts.paymentHash32);\n if (!paymentHash32 || paymentHash32.length !== 32) {\n throw new Error('paymentHash32 must be a 32-byte Buffer.');\n }\n const lock = Number(refundLocktimeHeight);\n if (!Number.isFinite(lock) || lock < 1 || lock >= 500000000) {\n throw new Error('refundLocktimeHeight must be a valid block height (< 500000000).');\n }\n\n const claimScript = script.compile([\n script.OPS.OP_SHA256,\n paymentHash32,\n script.OPS.OP_EQUALVERIFY,\n sellerX,\n script.OPS.OP_CHECKSIG\n ]);\n\n const refundScript = script.compile([\n script.number.encode(lock),\n script.OPS.OP_CHECKLOCKTIMEVERIFY,\n script.OPS.OP_DROP,\n buyerX,\n script.OPS.OP_CHECKSIG\n ]);\n\n const scriptTree = [{ output: claimScript }, { output: refundScript }];\n const pay = payments.p2tr({\n internalPubkey: TAPROOT_INTERNAL_NUMS,\n scriptTree,\n network: networkForFabricName(networkName)\n });\n if (!pay.address || !pay.output) throw new Error('p2tr() did not produce address/output.');\n\n return {\n address: pay.address,\n // bitcoinjs may yield Uint8Array; Hub/tests and Transaction.addOutput expect Buffer.\n output: asBuffer(pay.output),\n claimScript: asBuffer(claimScript),\n refundScript: asBuffer(refundScript),\n paymentHashHex: paymentHash32.toString('hex')\n };\n}\n\nfunction randomPreimage32 () {\n return crypto.randomBytes(32);\n}\n\nfunction hash256 (buf) {\n return crypto.createHash('sha256').update(buf).digest();\n}\n\n/**\n * BIP21-style URI and display amounts so wallets can pre-fill send-to Taproot (bc1p / bcrt1 / tb1).\n * @param {Object} opts\n * @param {string} opts.paymentAddress - Bech32m P2TR address\n * @param {number} opts.amountSats - Invoice amount in satoshis\n * @param {string} [opts.label] - Optional label (shortened for URI)\n * @returns {{ amountBtc: string, bitcoinUri: string, label?: string }}\n */\nfunction buildHtlcFundingHints ({ paymentAddress, amountSats, label = '' }) {\n const addr = String(paymentAddress || '').trim();\n const sats = Math.round(Number(amountSats || 0));\n if (!addr || !Number.isFinite(sats) || sats <= 0) {\n return { amountBtc: '', bitcoinUri: '', label: label || undefined };\n }\n const amountBtc = (sats / 100000000).toFixed(8);\n const params = new URLSearchParams();\n params.set('amount', amountBtc);\n const lab = String(label || '').trim().slice(0, 120);\n if (lab) params.set('label', lab);\n const bitcoinUri = `bitcoin:${addr}?${params.toString()}`;\n return { amountBtc, bitcoinUri, ...(lab ? { label: lab } : {}) };\n}\n\n/**\n * Find vout index paying exactly `paymentAddress` (P2TR script match).\n */\nfunction findP2trVoutForAddress (tx, paymentAddress, network) {\n const addr = String(paymentAddress || '').trim();\n if (!addr) return -1;\n const want = Buffer.from(bitcoin.address.toOutputScript(addr, network));\n for (let i = 0; i < tx.outs.length; i++) {\n const sc = tx.outs[i].script;\n if (sc && Buffer.from(sc).equals(want)) return i;\n }\n return -1;\n}\n\n/**\n * Control block for spending a given tapleaf in the standard two-leaf HTLC tree\n * [claimScript, refundScript] (same order as {@link buildInventoryHtlcP2tr}).\n */\nfunction buildTapLeafControlBlock (claimScript, refundScript, leafScript) {\n const claimBuf = asBuffer(claimScript);\n const refundBuf = asBuffer(refundScript);\n const leafBuf = asBuffer(leafScript);\n if (!claimBuf || !refundBuf || !leafBuf) throw new Error('Invalid HTLC tapleaf script bytes.');\n const scriptTree = [{ output: claimBuf }, { output: refundBuf }];\n const hashTree = bip341.toHashTree(scriptTree);\n const leafVersion = bip341.LEAF_VERSION_TAPSCRIPT;\n const leafHash = bip341.tapleafHash({ output: leafBuf, version: leafVersion });\n const path = bip341.findScriptPath(hashTree, leafHash);\n if (path === undefined) throw new Error('Leaf script not found in HTLC tap tree.');\n const outputKey = bip341.tweakKey(TAPROOT_INTERNAL_NUMS, hashTree.hash);\n if (!outputKey) throw new Error('Taproot tweak failed for HTLC script path.');\n return Buffer.concat([\n Buffer.from([leafVersion | outputKey.parity]),\n TAPROOT_INTERNAL_NUMS,\n ...path\n ]);\n}\n\nfunction buildClaimControlBlock (claimScript, refundScript) {\n const claimBuf = asBuffer(claimScript);\n if (!claimBuf) throw new Error('Invalid claim script bytes.');\n return buildTapLeafControlBlock(claimBuf, refundScript, claimBuf);\n}\n\n/**\n * Build unsigned PSBT spending the funded HTLC UTXO via the seller claim leaf (hashlock + CHECKSIG).\n * @param {Object} opts\n * @returns {Object} bundle for {@link signAndExtractInventoryHtlcSellerClaim}\n */\nfunction prepareInventoryHtlcSellerClaimPsbt (opts = {}) {\n const {\n networkName,\n fundedTxHex,\n paymentAddress,\n claimScript,\n refundScript,\n preimage32,\n destinationAddress,\n feeSats\n } = opts;\n\n const network = networkForFabricName(networkName);\n const tx = bitcoin.Transaction.fromHex(String(fundedTxHex || '').trim());\n const vout = findP2trVoutForAddress(tx, paymentAddress, network);\n if (vout < 0) throw new Error('Funding tx has no output matching paymentAddress.');\n const out = tx.outs[vout];\n const inputSats = typeof out.value === 'bigint' ? Number(out.value) : Number(out.value);\n if (!Number.isFinite(inputSats) || inputSats <= 0) throw new Error('Invalid HTLC output value.');\n const fee = Math.max(1, Math.round(Number(feeSats || 1000)));\n const destSats = inputSats - fee;\n if (destSats < 546) throw new Error('Amount after fee is below dust threshold; lower fee or fund more sats.');\n\n const claimBuf = asBuffer(claimScript);\n const refundBuf = asBuffer(refundScript);\n const preimage = asBuffer(preimage32);\n if (!claimBuf || !refundBuf) throw new Error('Invalid HTLC script bytes.');\n if (!preimage || preimage.length !== 32) throw new Error('preimage must be 32 bytes.');\n\n const controlBlock = buildClaimControlBlock(claimBuf, refundBuf);\n const psbt = new Psbt({ network });\n psbt.addInput({\n hash: tx.getId(),\n index: vout,\n witnessUtxo: {\n script: out.script,\n value: BigInt(inputSats)\n },\n tapInternalKey: TAPROOT_INTERNAL_NUMS,\n tapLeafScript: [{\n leafVersion: bip341.LEAF_VERSION_TAPSCRIPT,\n script: claimBuf,\n controlBlock\n }]\n });\n psbt.addOutput({\n address: String(destinationAddress || '').trim(),\n value: BigInt(destSats)\n });\n\n return {\n psbt,\n preimage32: preimage,\n claimScript: claimBuf,\n vout,\n inputSats,\n destSats,\n fee\n };\n}\n\n/**\n * Sign with seller secp256k1 private key (32 bytes) and finalize witness:\n * [schnorr_sig, preimage, script, control_block] per BIP341 script path.\n */\nfunction signAndExtractInventoryHtlcSellerClaim (bundle, sellerPriv32) {\n if (!bundle || !bundle.psbt) throw new Error('Invalid PSBT bundle.');\n const priv = asBuffer(sellerPriv32);\n if (!priv || priv.length !== 32) throw new Error('Seller private key must be 32 bytes.');\n const { psbt, preimage32 } = bundle;\n psbt.signInput(0, signerFromPriv32(priv));\n\n const preimage = asBuffer(preimage32);\n psbt.finalizeInput(0, (_inputIndex, input) => {\n const leaf = (input.tapLeafScript || [])[0];\n if (!leaf || !leaf.script || !leaf.controlBlock) {\n throw new Error('Missing tapLeafScript on PSBT input.');\n }\n const lh = Buffer.from(bip341.tapleafHash({ output: leaf.script, version: leaf.leafVersion }));\n const tss = (input.tapScriptSig || []).find((t) => Buffer.from(t.leafHash).equals(lh));\n if (!tss) throw new Error('Missing tapscript signature.');\n const sig = tss.signature.length >= 64 ? tss.signature.subarray(0, 64) : tss.signature;\n const witness = [sig, preimage, leaf.script, leaf.controlBlock];\n return { finalScriptWitness: psbtutils.witnessStackToScriptWitness(witness) };\n });\n\n const extracted = psbt.extractTransaction();\n return { txHex: extracted.toHex(), txid: extracted.getId() };\n}\n\n/**\n * Build unsigned PSBT spending the funded HTLC UTXO via the buyer/initiator refund leaf (CLTV + CHECKSIG).\n * Spending tx must use nLockTime ≥ refundLocktimeHeight and input sequence ≠ 0xffffffff.\n */\nfunction prepareInventoryHtlcBuyerRefundPsbt (opts = {}) {\n const {\n networkName,\n fundedTxHex,\n paymentAddress,\n claimScript,\n refundScript,\n refundLocktimeHeight,\n destinationAddress,\n feeSats\n } = opts;\n\n const network = networkForFabricName(networkName);\n const tx = bitcoin.Transaction.fromHex(String(fundedTxHex || '').trim());\n const vout = findP2trVoutForAddress(tx, paymentAddress, network);\n if (vout < 0) throw new Error('Funding tx has no output matching paymentAddress.');\n const out = tx.outs[vout];\n const inputSats = typeof out.value === 'bigint' ? Number(out.value) : Number(out.value);\n if (!Number.isFinite(inputSats) || inputSats <= 0) throw new Error('Invalid HTLC output value.');\n const fee = Math.max(1, Math.round(Number(feeSats || 1000)));\n const destSats = inputSats - fee;\n if (destSats < 546) throw new Error('Amount after fee is below dust threshold; lower fee or fund more sats.');\n\n const claimBuf = asBuffer(claimScript);\n const refundBuf = asBuffer(refundScript);\n if (!claimBuf || !refundBuf) throw new Error('Invalid HTLC script bytes.');\n const lock = Number(refundLocktimeHeight);\n if (!Number.isFinite(lock) || lock < 1) throw new Error('refundLocktimeHeight is required.');\n\n const controlBlock = buildTapLeafControlBlock(claimBuf, refundBuf, refundBuf);\n const psbt = new Psbt({ network });\n psbt.setLocktime(lock);\n psbt.addInput({\n hash: tx.getId(),\n index: vout,\n sequence: 0xfffffffe,\n witnessUtxo: {\n script: out.script,\n value: BigInt(inputSats)\n },\n tapInternalKey: TAPROOT_INTERNAL_NUMS,\n tapLeafScript: [{\n leafVersion: bip341.LEAF_VERSION_TAPSCRIPT,\n script: refundBuf,\n controlBlock\n }]\n });\n psbt.addOutput({\n address: String(destinationAddress || '').trim(),\n value: BigInt(destSats)\n });\n\n return {\n psbt,\n claimScript: claimBuf,\n refundScript: refundBuf,\n vout,\n inputSats,\n destSats,\n fee,\n locktime: lock\n };\n}\n\n/**\n * Sign with buyer secp256k1 private key (32 bytes) and finalize witness for refund leaf:\n * [schnorr_sig, script, control_block].\n */\nfunction signAndExtractInventoryHtlcBuyerRefund (bundle, buyerPriv32) {\n if (!bundle || !bundle.psbt) throw new Error('Invalid PSBT bundle.');\n const priv = asBuffer(buyerPriv32);\n if (!priv || priv.length !== 32) throw new Error('Buyer private key must be 32 bytes.');\n const { psbt } = bundle;\n psbt.signInput(0, signerFromPriv32(priv));\n\n psbt.finalizeInput(0, (_inputIndex, input) => {\n const leaf = (input.tapLeafScript || [])[0];\n if (!leaf || !leaf.script || !leaf.controlBlock) {\n throw new Error('Missing tapLeafScript on PSBT input.');\n }\n const lh = Buffer.from(bip341.tapleafHash({ output: leaf.script, version: leaf.leafVersion }));\n const tss = (input.tapScriptSig || []).find((t) => Buffer.from(t.leafHash).equals(lh));\n if (!tss) throw new Error('Missing tapscript signature.');\n const sig = tss.signature.length >= 64 ? tss.signature.subarray(0, 64) : tss.signature;\n const witness = [sig, leaf.script, leaf.controlBlock];\n return { finalScriptWitness: psbtutils.witnessStackToScriptWitness(witness) };\n });\n\n const extracted = psbt.extractTransaction();\n return { txHex: extracted.toHex(), txid: extracted.getId() };\n}\n\n/**\n * Find a 32-byte witness stack item whose SHA256 equals paymentHash.\n * Seller claim witness is typically [schnorr_sig, preimage, script, control_block].\n *\n * @param {Array|undefined} witness\n * @param {Buffer|string} paymentHash32\n * @returns {Buffer|null}\n */\nfunction extractPreimageFromWitnessStack (witness, paymentHash32) {\n const want = asBuffer(paymentHash32) || Buffer.from(String(paymentHash32 || '').trim(), 'hex');\n if (want.length !== 32) return null;\n const wantHex = want.toString('hex');\n const stack = Array.isArray(witness) ? witness : [];\n for (const item of stack) {\n let buf = asBuffer(item);\n if (!buf && typeof item === 'string') {\n try { buf = Buffer.from(item, 'hex'); } catch (_) { continue; }\n }\n if (!buf || buf.length !== 32) continue;\n if (hash256(buf).toString('hex') === wantHex) return Buffer.from(buf);\n }\n return null;\n}\n\n/**\n * Scan a claim transaction for the HTLC preimage (content key for sealed sales).\n *\n * @param {string|import('bitcoinjs-lib').Transaction} txHexOrTx\n * @param {string|Buffer} paymentHashHex\n * @returns {{ ok: boolean, preimage32?: Buffer, preimageHex?: string, vin?: number, error?: string }}\n */\nfunction extractPreimageFromClaimTx (txHexOrTx, paymentHashHex) {\n let tx;\n try {\n tx = typeof txHexOrTx === 'string'\n ? bitcoin.Transaction.fromHex(String(txHexOrTx).trim())\n : txHexOrTx;\n } catch (err) {\n return { ok: false, error: err && err.message ? err.message : 'invalid tx' };\n }\n if (!tx || !Array.isArray(tx.ins)) return { ok: false, error: 'invalid transaction' };\n const hashHex = Buffer.isBuffer(paymentHashHex)\n ? paymentHashHex.toString('hex')\n : String(paymentHashHex || '').trim().toLowerCase();\n if (!/^[0-9a-f]{64}$/.test(hashHex)) return { ok: false, error: 'paymentHashHex must be 64 hex chars' };\n\n for (let vin = 0; vin < tx.ins.length; vin++) {\n const input = tx.ins[vin];\n const witness = input && input.witness;\n const preimage = extractPreimageFromWitnessStack(witness, hashHex);\n if (preimage) {\n return {\n ok: true,\n preimage32: preimage,\n preimageHex: preimage.toString('hex'),\n vin\n };\n }\n }\n return { ok: false, error: 'preimage not found in claim witnesses' };\n}\n\n/**\n * True when chain tip height is high enough for the buyer refund leaf.\n * @param {number} tipHeight\n * @param {number} refundLocktimeHeight\n */\nfunction refundLocktimeMature (tipHeight, refundLocktimeHeight) {\n const tip = Math.round(Number(tipHeight));\n const lock = Math.round(Number(refundLocktimeHeight));\n if (!Number.isFinite(tip) || !Number.isFinite(lock) || lock < 1) return false;\n return tip >= lock;\n}\n\nfunction normalizeHex (label, hex, byteLen) {\n const h = String(hex || '').trim().replace(/^0x/i, '');\n if (!/^[0-9a-f]*$/i.test(h) || h.length !== byteLen * 2) {\n throw new Error(`${label} must be ${byteLen * 2} hex characters.`);\n }\n return h.toLowerCase();\n}\n\n/**\n * Document-offer L1 escrow: same Taproot HTLC as inventory, with roles renamed.\n * Deliverer claims with preimage + Schnorr (seller leaf); initiator refunds after CLTV (buyer leaf).\n *\n * @param {object} opts\n * @param {string} opts.networkName - e.g. regtest, mainnet\n * @param {string} opts.delivererPubkeyHex - 33-byte compressed (claim path)\n * @param {string} opts.initiatorRefundPubkeyHex - 33-byte compressed (refund path)\n * @param {string} opts.paymentHashHex - SHA256(preimage), 32 bytes hex\n * @param {number} opts.refundLockHeight - block height for CLTV refund leg\n * @param {number} [opts.amountSats]\n * @param {string} [opts.label]\n */\nfunction buildDocumentOfferEscrow (opts = {}) {\n const paymentHashHex = normalizeHex('paymentHashHex', opts.paymentHashHex, 32);\n const delivererHex = normalizeHex('pubkeyHex', opts.delivererPubkeyHex, 33);\n const initiatorHex = normalizeHex('pubkeyHex', opts.initiatorRefundPubkeyHex, 33);\n const built = buildInventoryHtlcP2tr({\n networkName: opts.networkName || 'regtest',\n sellerPubkeyCompressed: Buffer.from(delivererHex, 'hex'),\n buyerRefundPubkeyCompressed: Buffer.from(initiatorHex, 'hex'),\n paymentHash32: Buffer.from(paymentHashHex, 'hex'),\n refundLocktimeHeight: Number(opts.refundLockHeight)\n });\n const hints = buildHtlcFundingHints({\n paymentAddress: built.address,\n amountSats: Math.round(Number(opts.amountSats || 0)),\n label: String(opts.label || 'document-offer').slice(0, 120)\n });\n return {\n paymentAddress: built.address,\n claimScriptHex: built.claimScript.toString('hex'),\n refundScriptHex: built.refundScript.toString('hex'),\n paymentHashHex: built.paymentHashHex,\n amountBtc: hints.amountBtc,\n bitcoinUri: hints.bitcoinUri\n };\n}\n\n/**\n * Normalize compressed (66 hex) or x-only (64 hex) pubkey to lowercase x-only hex.\n * @param {string|Buffer|null|undefined} pk\n * @returns {string|null}\n */\nfunction toXOnlyPubkeyHex (pk) {\n if (pk == null) return null;\n if (Buffer.isBuffer(pk)) {\n if (pk.length === 32) return pk.toString('hex');\n if (pk.length === 33 && (pk[0] === 0x02 || pk[0] === 0x03)) {\n return pk.subarray(1).toString('hex');\n }\n return null;\n }\n let s = String(pk).trim().toLowerCase();\n if (s.startsWith('0x')) s = s.slice(2);\n if (/^[0-9a-f]{64}$/.test(s)) return s;\n if (/^[0-9a-f]{66}$/.test(s) && (s.startsWith('02') || s.startsWith('03'))) return s.slice(2);\n return null;\n}\n\n/**\n * @param {string|Buffer|null|undefined} a\n * @param {string|Buffer|null|undefined} b\n * @returns {boolean}\n */\nfunction pubkeysMatchXOnly (a, b) {\n const xa = toXOnlyPubkeyHex(a);\n const xb = toXOnlyPubkeyHex(b);\n return !!(xa && xb && xa === xb);\n}\n\n/**\n * Rebuild buyer-bound P2TR and optionally verify a seller-advertised paymentAddress.\n * Never treat seller-supplied address as authoritative without a match.\n *\n * @param {object} opts\n * @param {string} opts.networkName\n * @param {Buffer|string} opts.sellerPubkeyCompressed\n * @param {Buffer|string} opts.buyerRefundPubkeyCompressed\n * @param {Buffer|string} opts.paymentHash32\n * @param {number} opts.refundLocktimeHeight\n * @param {string} [opts.paymentAddress] seller-advertised address (optional)\n * @returns {{ ok: true, built: object } | { ok: false, error: string, expectedAddress?: string, built?: object }}\n */\nfunction validateInventoryHtlcOffer (opts = {}) {\n let seller = opts.sellerPubkeyCompressed;\n let buyer = opts.buyerRefundPubkeyCompressed;\n let hash = opts.paymentHash32;\n try {\n if (!Buffer.isBuffer(seller)) seller = Buffer.from(String(seller || ''), 'hex');\n if (!Buffer.isBuffer(buyer)) buyer = Buffer.from(String(buyer || ''), 'hex');\n if (!Buffer.isBuffer(hash)) hash = Buffer.from(String(hash || ''), 'hex');\n } catch (e) {\n return { ok: false, error: `Invalid HTLC key/hash material: ${e.message}` };\n }\n let built;\n try {\n built = buildInventoryHtlcP2tr({\n networkName: opts.networkName || 'regtest',\n sellerPubkeyCompressed: seller,\n buyerRefundPubkeyCompressed: buyer,\n paymentHash32: hash,\n refundLocktimeHeight: Number(opts.refundLocktimeHeight)\n });\n } catch (e) {\n return { ok: false, error: e.message || String(e) };\n }\n const offered = opts.paymentAddress != null ? String(opts.paymentAddress).trim() : '';\n if (offered && offered !== built.address) {\n return {\n ok: false,\n error: 'Seller HTLC paymentAddress does not match buyer-bound P2TR script — refusing to fund',\n expectedAddress: built.address,\n built\n };\n }\n return { ok: true, built };\n}\n\nmodule.exports = {\n buildInventoryHtlcP2tr,\n buildHtlcFundingHints,\n buildDocumentOfferEscrow,\n validateInventoryHtlcOffer,\n toXOnlyPubkeyHex,\n pubkeysMatchXOnly,\n randomPreimage32,\n hash256,\n networkForFabricName,\n TAPROOT_INTERNAL_NUMS,\n findP2trVoutForAddress,\n buildTapLeafControlBlock,\n buildClaimControlBlock,\n prepareInventoryHtlcSellerClaimPsbt,\n signAndExtractInventoryHtlcSellerClaim,\n prepareInventoryHtlcBuyerRefundPsbt,\n signAndExtractInventoryHtlcBuyerRefund,\n extractPreimageFromWitnessStack,\n extractPreimageFromClaimTx,\n refundLocktimeMature\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9pbnZlbnRvcnlIdGxjLmpzIiwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYjtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx5REFBUTtBQUMvQixnQkFBZ0IsbUJBQU8sQ0FBQyxnRUFBZTtBQUN2QyxZQUFZLG1CQUFPLENBQUMsOERBQWM7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLDhGQUFtQztBQUMxRCxrQkFBa0IsbUJBQU8sQ0FBQyw0RkFBa0M7QUFDNUQsUUFBUSxtQ0FBbUM7O0FBRTNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLEtBQUs7QUFDTDtBQUNBLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4QkFBOEIsTUFBTTtBQUNwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLE1BQU07QUFDWiwwQ0FBMEMsTUFBTTtBQUNoRCx3Q0FBd0MsTUFBTTtBQUM5QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IscUJBQXFCLElBQUksc0JBQXNCO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FB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Ly4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS9mdW5jdGlvbnMvaW52ZW50b3J5SHRsYy5qcz9kZjY4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBQMlRSIChCSVAgMzQxKSBzY3JpcHQtcGF0aCBIVExDIGZvciBpbnZlbnRvcnkg4oaSIHBhaWQgZG9jdW1lbnQgdHJhbnNmZXIuXG4gKiBJbnRlcm5hbCBrZXkgaXMgYSBmaXhlZCBOVU1TIHBvaW50OyBzcGVuZGluZyB1c2VzIGVpdGhlcjpcbiAqICAgLSBDbGFpbTogc2hhMjU2KHByZWltYWdlKSA9PSBwYXltZW50SGFzaCwgc2VsbGVyIFNjaG5vcnIgc2lnbmF0dXJlXG4gKiAgIC0gUmVmdW5kOiBDTFRWIGxvY2sgaGVpZ2h0LCBidXllciBzaWduYXR1cmVcbiAqXG4gKiAqKlBheW1lbnQgaGFzaCAvIHByZWltYWdlIChiaW5kaW5nKToqKiBhbHdheXMgZ28gdGhyb3VnaFxuICogYEBmYWJyaWMvY29yZS9mdW5jdGlvbnMvZG9jdW1lbnRQYXltZW50SGFzaGAgKGByZXNvbHZlRG9jdW1lbnRDb250ZW50SGFzaEhleGApLlxuICpcbiAqIC0gKipTZWFsZWQgKHByaWNlZCk6KiogcHJlaW1hZ2UgPSBjb250ZW50IGtleSBgS2A7IHBheW1lbnRIYXNoID0gU0hBMjU2KEspLlxuICogLSAqKkxlZ2FjeSB1bnNlYWxlZCBlbnZlbG9wZToqKiBwcmVpbWFnZSA9IFNIQTI1NigqKnVuc2lnbmVkKipcbiAqICAgYGRvY3VtZW50UHVibGlzaEVudmVsb3BlQnVmZmVyYCBieXRlcykg4oCUIG5ldmVyIGEgU2Nobm9yci1zaWduZWQgZ29zc2lwIGZyYW1lO1xuICogICBwYXltZW50SGFzaCA9IFNIQTI1NihwcmVpbWFnZSkgKGBwdXJjaGFzZUNvbnRlbnRIYXNoSGV4YCkuXG4gKlxuICogUGhhc2UtMiBBRVMtR0NNIGZvciBzZWFsZWQgZG9jcyB1c2VzIGBLYDsgbGVnYWN5IGVudmVsb3BlIHBhdGggbWF5IHVzZSB0aGVcbiAqIGVudmVsb3BlLWRlcml2ZWQgMzItYnl0ZSBwcmVpbWFnZSBhcyB0aGUgY29udGVudCBrZXkgb25seSB3aGVuIHVuc2VhbGVkLlxuICovXG5cbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3QgYml0Y29pbiA9IHJlcXVpcmUoJ2JpdGNvaW5qcy1saWInKTtcbmNvbnN0IGVjYyA9IHJlcXVpcmUoJy4uL3R5cGVzL2VjYycpO1xuY29uc3QgYmlwMzQxID0gcmVxdWlyZSgnYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvYmlwMzQxJyk7XG5jb25zdCBwc2J0dXRpbHMgPSByZXF1aXJlKCdiaXRjb2luanMtbGliL3NyYy9wc2J0L3BzYnR1dGlscycpO1xuY29uc3QgeyBwYXltZW50cywgbmV0d29ya3MsIHNjcmlwdCwgUHNidCB9ID0gYml0Y29pbjtcblxuYml0Y29pbi5pbml0RWNjTGliKGVjYyk7XG5cbi8qKiBiaXRjb2luanMtbGliIFNpZ25lciBmb3IgdGFwcm9vdCBzY3JpcHQtcGF0aCAocHVibGljS2V5ICsgc2lnbiArIHNpZ25TY2hub3JyKS4gKi9cbmZ1bmN0aW9uIHNpZ25lckZyb21Qcml2MzIgKHByaXYzMikge1xuICBjb25zdCBwcml2ID0gYXNCdWZmZXIocHJpdjMyKTtcbiAgaWYgKCFwcml2IHx8IHByaXYubGVuZ3RoICE9PSAzMikgdGhyb3cgbmV3IEVycm9yKCdQcml2YXRlIGtleSBtdXN0IGJlIDMyIGJ5dGVzLicpO1xuICBjb25zdCBwdWJsaWNLZXkgPSBlY2MucG9pbnRGcm9tU2NhbGFyKHByaXYsIHRydWUpO1xuICBpZiAoIXB1YmxpY0tleSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHByaXZhdGUga2V5IChwb2ludEZyb21TY2FsYXIgZmFpbGVkKS4nKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaWNLZXk6IEJ1ZmZlci5mcm9tKHB1YmxpY0tleSksXG4gICAgc2lnbiAoaGFzaCkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGVjYy5zaWduKGhhc2gsIHByaXYpKTtcbiAgICB9LFxuICAgIHNpZ25TY2hub3JyIChoYXNoKSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oZWNjLnNpZ25TY2hub3JyKGhhc2gsIHByaXYpKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKiBCSVAzNDEtc3R5bGUgTlVNUyB4LW9ubHkgaW50ZXJuYWwga2V5IChub3RoaW5nLXVwLW15LXNsZWV2ZSkuICovXG5jb25zdCBUQVBST09UX0lOVEVSTkFMX05VTVMgPSBCdWZmZXIuZnJvbShcbiAgJzUwOTI5Yjc0YzFhMDQ5NTRiNzhiNGI2MDM1ZTk3YTVlMDc4YTVhMGYyOGVjOTZkNTQ3YmZlZTlhY2U4MDNhYzAnLFxuICAnaGV4J1xuKTtcblxuZnVuY3Rpb24gbmV0d29ya0ZvckZhYnJpY05hbWUgKG5hbWUgPSAnJykge1xuICBjb25zdCBuID0gU3RyaW5nKG5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChuID09PSAncmVndGVzdCcgfHwgbiA9PT0gJ3Rlc3QnKSByZXR1cm4gbmV0d29ya3MucmVndGVzdDtcbiAgaWYgKG4gPT09ICd0ZXN0bmV0JyB8fCBuID09PSAnc2lnbmV0JykgcmV0dXJuIG5ldHdvcmtzLnRlc3RuZXQ7XG4gIHJldHVybiBuZXR3b3Jrcy5iaXRjb2luO1xufVxuXG4vKiogQ29lcmNlIEJ1ZmZlciAvIFVpbnQ4QXJyYXkgLyBoZXggc3RyaW5nIHRvIEJ1ZmZlciAoYml0Y29pbmpzLWxpYiA3IHVzZXMgVWludDhBcnJheSkuICovXG5mdW5jdGlvbiBhc0J1ZmZlciAodmFsdWUsIGVuY29kaW5nID0gJ2hleCcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkgcmV0dXJuIEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZSwgZW5jb2RpbmcpO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gdG9YT25seSAocHVia2V5MzMpIHtcbiAgY29uc3Qga2V5ID0gYXNCdWZmZXIocHVia2V5MzMpO1xuICBpZiAoIWtleSB8fCBrZXkubGVuZ3RoICE9PSAzMykgcmV0dXJuIG51bGw7XG4gIGlmIChrZXlbMF0gIT09IDB4MDIgJiYga2V5WzBdICE9PSAweDAzKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGtleS5zdWJhcnJheSgxLCAzMyk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkSW52ZW50b3J5SHRsY1AydHIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbmV0d29ya05hbWUsXG4gICAgc2VsbGVyUHVia2V5Q29tcHJlc3NlZCxcbiAgICBidXllclJlZnVuZFB1YmtleUNvbXByZXNzZWQsXG4gICAgcmVmdW5kTG9ja3RpbWVIZWlnaHRcbiAgfSA9IG9wdHM7XG5cbiAgY29uc3Qgc2VsbGVyWCA9IHRvWE9ubHkoc2VsbGVyUHVia2V5Q29tcHJlc3NlZCk7XG4gIGNvbnN0IGJ1eWVyWCA9IHRvWE9ubHkoYnV5ZXJSZWZ1bmRQdWJrZXlDb21wcmVzc2VkKTtcbiAgaWYgKCFzZWxsZXJYIHx8ICFidXllclgpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb21wcmVzc2VkIHB1YmxpYyBrZXlzIChleHBlY3QgMzMtYnl0ZSAwMi8wMykuJyk7XG4gIGNvbnN0IHBheW1lbnRIYXNoMzIgPSBhc0J1ZmZlcihvcHRzLnBheW1lbnRIYXNoMzIpO1xuICBpZiAoIXBheW1lbnRIYXNoMzIgfHwgcGF5bWVudEhhc2gzMi5sZW5ndGggIT09IDMyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwYXltZW50SGFzaDMyIG11c3QgYmUgYSAzMi1ieXRlIEJ1ZmZlci4nKTtcbiAgfVxuICBjb25zdCBsb2NrID0gTnVtYmVyKHJlZnVuZExvY2t0aW1lSGVpZ2h0KTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobG9jaykgfHwgbG9jayA8IDEgfHwgbG9jayA+PSA1MDAwMDAwMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZnVuZExvY2t0aW1lSGVpZ2h0IG11c3QgYmUgYSB2YWxpZCBibG9jayBoZWlnaHQgKDwgNTAwMDAwMDAwKS4nKTtcbiAgfVxuXG4gIGNvbnN0IGNsYWltU2NyaXB0ID0gc2NyaXB0LmNvbXBpbGUoW1xuICAgIHNjcmlwdC5PUFMuT1BfU0hBMjU2LFxuICAgIHBheW1lbnRIYXNoMzIsXG4gICAgc2NyaXB0Lk9QUy5PUF9FUVVBTFZFUklGWSxcbiAgICBzZWxsZXJYLFxuICAgIHNjcmlwdC5PUFMuT1BfQ0hFQ0tTSUdcbiAgXSk7XG5cbiAgY29uc3QgcmVmdW5kU2NyaXB0ID0gc2NyaXB0LmNvbXBpbGUoW1xuICAgIHNjcmlwdC5udW1iZXIuZW5jb2RlKGxvY2spLFxuICAgIHNjcmlwdC5PUFMuT1BfQ0hFQ0tMT0NLVElNRVZFUklGWSxcbiAgICBzY3JpcHQuT1BTLk9QX0RST1AsXG4gICAgYnV5ZXJYLFxuICAgIHNjcmlwdC5PUFMuT1BfQ0hFQ0tTSUdcbiAgXSk7XG5cbiAgY29uc3Qgc2NyaXB0VHJlZSA9IFt7IG91dHB1dDogY2xhaW1TY3JpcHQgfSwgeyBvdXRwdXQ6IHJlZnVuZFNjcmlwdCB9XTtcbiAgY29uc3QgcGF5ID0gcGF5bWVudHMucDJ0cih7XG4gICAgaW50ZXJuYWxQdWJrZXk6IFRBUFJPT1RfSU5URVJOQUxfTlVNUyxcbiAgICBzY3JpcHRUcmVlLFxuICAgIG5ldHdvcms6IG5ldHdvcmtGb3JGYWJyaWNOYW1lKG5ldHdvcmtOYW1lKVxuICB9KTtcbiAgaWYgKCFwYXkuYWRkcmVzcyB8fCAhcGF5Lm91dHB1dCkgdGhyb3cgbmV3IEVycm9yKCdwMnRyKCkgZGlkIG5vdCBwcm9kdWNlIGFkZHJlc3Mvb3V0cHV0LicpO1xuXG4gIHJldHVybiB7XG4gICAgYWRkcmVzczogcGF5LmFkZHJlc3MsXG4gICAgLy8gYml0Y29pbmpzIG1heSB5aWVsZCBVaW50OEFycmF5OyBIdWIvdGVzdHMgYW5kIFRyYW5zYWN0aW9uLmFkZE91dHB1dCBleHBlY3QgQnVmZmVyLlxuICAgIG91dHB1dDogYXNCdWZmZXIocGF5Lm91dHB1dCksXG4gICAgY2xhaW1TY3JpcHQ6IGFzQnVmZmVyKGNsYWltU2NyaXB0KSxcbiAgICByZWZ1bmRTY3JpcHQ6IGFzQnVmZmVyKHJlZnVuZFNjcmlwdCksXG4gICAgcGF5bWVudEhhc2hIZXg6IHBheW1lbnRIYXNoMzIudG9TdHJpbmcoJ2hleCcpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJhbmRvbVByZWltYWdlMzIgKCkge1xuICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKTtcbn1cblxuZnVuY3Rpb24gaGFzaDI1NiAoYnVmKSB7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGJ1ZikuZGlnZXN0KCk7XG59XG5cbi8qKlxuICogQklQMjEtc3R5bGUgVVJJIGFuZCBkaXNwbGF5IGFtb3VudHMgc28gd2FsbGV0cyBjYW4gcHJlLWZpbGwgc2VuZC10byBUYXByb290IChiYzFwIC8gYmNydDEgLyB0YjEpLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLnBheW1lbnRBZGRyZXNzIC0gQmVjaDMybSBQMlRSIGFkZHJlc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmFtb3VudFNhdHMgLSBJbnZvaWNlIGFtb3VudCBpbiBzYXRvc2hpc1xuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxhYmVsXSAtIE9wdGlvbmFsIGxhYmVsIChzaG9ydGVuZWQgZm9yIFVSSSlcbiAqIEByZXR1cm5zIHt7IGFtb3VudEJ0Yzogc3RyaW5nLCBiaXRjb2luVXJpOiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nIH19XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSHRsY0Z1bmRpbmdIaW50cyAoeyBwYXltZW50QWRkcmVzcywgYW1vdW50U2F0cywgbGFiZWwgPSAnJyB9KSB7XG4gIGNvbnN0IGFkZHIgPSBTdHJpbmcocGF5bWVudEFkZHJlc3MgfHwgJycpLnRyaW0oKTtcbiAgY29uc3Qgc2F0cyA9IE1hdGgucm91bmQoTnVtYmVyKGFtb3VudFNhdHMgfHwgMCkpO1xuICBpZiAoIWFkZHIgfHwgIU51bWJlci5pc0Zpbml0ZShzYXRzKSB8fCBzYXRzIDw9IDApIHtcbiAgICByZXR1cm4geyBhbW91bnRCdGM6ICcnLCBiaXRjb2luVXJpOiAnJywgbGFiZWw6IGxhYmVsIHx8IHVuZGVmaW5lZCB9O1xuICB9XG4gIGNvbnN0IGFtb3VudEJ0YyA9IChzYXRzIC8gMTAwMDAwMDAwKS50b0ZpeGVkKDgpO1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIHBhcmFtcy5zZXQoJ2Ftb3VudCcsIGFtb3VudEJ0Yyk7XG4gIGNvbnN0IGxhYiA9IFN0cmluZyhsYWJlbCB8fCAnJykudHJpbSgpLnNsaWNlKDAsIDEyMCk7XG4gIGlmIChsYWIpIHBhcmFtcy5zZXQoJ2xhYmVsJywgbGFiKTtcbiAgY29uc3QgYml0Y29pblVyaSA9IGBiaXRjb2luOiR7YWRkcn0/JHtwYXJhbXMudG9TdHJpbmcoKX1gO1xuICByZXR1cm4geyBhbW91bnRCdGMsIGJpdGNvaW5VcmksIC4uLihsYWIgPyB7IGxhYmVsOiBsYWIgfSA6IHt9KSB9O1xufVxuXG4vKipcbiAqIEZpbmQgdm91dCBpbmRleCBwYXlpbmcgZXhhY3RseSBgcGF5bWVudEFkZHJlc3NgIChQMlRSIHNjcmlwdCBtYXRjaCkuXG4gKi9cbmZ1bmN0aW9uIGZpbmRQMnRyVm91dEZvckFkZHJlc3MgKHR4LCBwYXltZW50QWRkcmVzcywgbmV0d29yaykge1xuICBjb25zdCBhZGRyID0gU3RyaW5nKHBheW1lbnRBZGRyZXNzIHx8ICcnKS50cmltKCk7XG4gIGlmICghYWRkcikgcmV0dXJuIC0xO1xuICBjb25zdCB3YW50ID0gQnVmZmVyLmZyb20oYml0Y29pbi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KGFkZHIsIG5ldHdvcmspKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eC5vdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc2MgPSB0eC5vdXRzW2ldLnNjcmlwdDtcbiAgICBpZiAoc2MgJiYgQnVmZmVyLmZyb20oc2MpLmVxdWFscyh3YW50KSkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIENvbnRyb2wgYmxvY2sgZm9yIHNwZW5kaW5nIGEgZ2l2ZW4gdGFwbGVhZiBpbiB0aGUgc3RhbmRhcmQgdHdvLWxlYWYgSFRMQyB0cmVlXG4gKiBbY2xhaW1TY3JpcHQsIHJlZnVuZFNjcmlwdF0gKHNhbWUgb3JkZXIgYXMge0BsaW5rIGJ1aWxkSW52ZW50b3J5SHRsY1AydHJ9KS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRUYXBMZWFmQ29udHJvbEJsb2NrIChjbGFpbVNjcmlwdCwgcmVmdW5kU2NyaXB0LCBsZWFmU2NyaXB0KSB7XG4gIGNvbnN0IGNsYWltQnVmID0gYXNCdWZmZXIoY2xhaW1TY3JpcHQpO1xuICBjb25zdCByZWZ1bmRCdWYgPSBhc0J1ZmZlcihyZWZ1bmRTY3JpcHQpO1xuICBjb25zdCBsZWFmQnVmID0gYXNCdWZmZXIobGVhZlNjcmlwdCk7XG4gIGlmICghY2xhaW1CdWYgfHwgIXJlZnVuZEJ1ZiB8fCAhbGVhZkJ1ZikgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEhUTEMgdGFwbGVhZiBzY3JpcHQgYnl0ZXMuJyk7XG4gIGNvbnN0IHNjcmlwdFRyZWUgPSBbeyBvdXRwdXQ6IGNsYWltQnVmIH0sIHsgb3V0cHV0OiByZWZ1bmRCdWYgfV07XG4gIGNvbnN0IGhhc2hUcmVlID0gYmlwMzQxLnRvSGFzaFRyZWUoc2NyaXB0VHJlZSk7XG4gIGNvbnN0IGxlYWZWZXJzaW9uID0gYmlwMzQxLkxFQUZfVkVSU0lPTl9UQVBTQ1JJUFQ7XG4gIGNvbnN0IGxlYWZIYXNoID0gYmlwMzQxLnRhcGxlYWZIYXNoKHsgb3V0cHV0OiBsZWFmQnVmLCB2ZXJzaW9uOiBsZWFmVmVyc2lvbiB9KTtcbiAgY29uc3QgcGF0aCA9IGJpcDM0MS5maW5kU2NyaXB0UGF0aChoYXNoVHJlZSwgbGVhZkhhc2gpO1xuICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ0xlYWYgc2NyaXB0IG5vdCBmb3VuZCBpbiBIVExDIHRhcCB0cmVlLicpO1xuICBjb25zdCBvdXRwdXRLZXkgPSBiaXAzNDEudHdlYWtLZXkoVEFQUk9PVF9JTlRFUk5BTF9OVU1TLCBoYXNoVHJlZS5oYXNoKTtcbiAgaWYgKCFvdXRwdXRLZXkpIHRocm93IG5ldyBFcnJvcignVGFwcm9vdCB0d2VhayBmYWlsZWQgZm9yIEhUTEMgc2NyaXB0IHBhdGguJyk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBCdWZmZXIuZnJvbShbbGVhZlZlcnNpb24gfCBvdXRwdXRLZXkucGFyaXR5XSksXG4gICAgVEFQUk9PVF9JTlRFUk5BTF9OVU1TLFxuICAgIC4uLnBhdGhcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ2xhaW1Db250cm9sQmxvY2sgKGNsYWltU2NyaXB0LCByZWZ1bmRTY3JpcHQpIHtcbiAgY29uc3QgY2xhaW1CdWYgPSBhc0J1ZmZlcihjbGFpbVNjcmlwdCk7XG4gIGlmICghY2xhaW1CdWYpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjbGFpbSBzY3JpcHQgYnl0ZXMuJyk7XG4gIHJldHVybiBidWlsZFRhcExlYWZDb250cm9sQmxvY2soY2xhaW1CdWYsIHJlZnVuZFNjcmlwdCwgY2xhaW1CdWYpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHVuc2lnbmVkIFBTQlQgc3BlbmRpbmcgdGhlIGZ1bmRlZCBIVExDIFVUWE8gdmlhIHRoZSBzZWxsZXIgY2xhaW0gbGVhZiAoaGFzaGxvY2sgKyBDSEVDS1NJRykuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICogQHJldHVybnMge09iamVjdH0gYnVuZGxlIGZvciB7QGxpbmsgc2lnbkFuZEV4dHJhY3RJbnZlbnRvcnlIdGxjU2VsbGVyQ2xhaW19XG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVJbnZlbnRvcnlIdGxjU2VsbGVyQ2xhaW1Qc2J0IChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtOYW1lLFxuICAgIGZ1bmRlZFR4SGV4LFxuICAgIHBheW1lbnRBZGRyZXNzLFxuICAgIGNsYWltU2NyaXB0LFxuICAgIHJlZnVuZFNjcmlwdCxcbiAgICBwcmVpbWFnZTMyLFxuICAgIGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICBmZWVTYXRzXG4gIH0gPSBvcHRzO1xuXG4gIGNvbnN0IG5ldHdvcmsgPSBuZXR3b3JrRm9yRmFicmljTmFtZShuZXR3b3JrTmFtZSk7XG4gIGNvbnN0IHR4ID0gYml0Y29pbi5UcmFuc2FjdGlvbi5mcm9tSGV4KFN0cmluZyhmdW5kZWRUeEhleCB8fCAnJykudHJpbSgpKTtcbiAgY29uc3Qgdm91dCA9IGZpbmRQMnRyVm91dEZvckFkZHJlc3ModHgsIHBheW1lbnRBZGRyZXNzLCBuZXR3b3JrKTtcbiAgaWYgKHZvdXQgPCAwKSB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmRpbmcgdHggaGFzIG5vIG91dHB1dCBtYXRjaGluZyBwYXltZW50QWRkcmVzcy4nKTtcbiAgY29uc3Qgb3V0ID0gdHgub3V0c1t2b3V0XTtcbiAgY29uc3QgaW5wdXRTYXRzID0gdHlwZW9mIG91dC52YWx1ZSA9PT0gJ2JpZ2ludCcgPyBOdW1iZXIob3V0LnZhbHVlKSA6IE51bWJlcihvdXQudmFsdWUpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbnB1dFNhdHMpIHx8IGlucHV0U2F0cyA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgSFRMQyBvdXRwdXQgdmFsdWUuJyk7XG4gIGNvbnN0IGZlZSA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoTnVtYmVyKGZlZVNhdHMgfHwgMTAwMCkpKTtcbiAgY29uc3QgZGVzdFNhdHMgPSBpbnB1dFNhdHMgLSBmZWU7XG4gIGlmIChkZXN0U2F0cyA8IDU0NikgdGhyb3cgbmV3IEVycm9yKCdBbW91bnQgYWZ0ZXIgZmVlIGlzIGJlbG93IGR1c3QgdGhyZXNob2xkOyBsb3dlciBmZWUgb3IgZnVuZCBtb3JlIHNhdHMuJyk7XG5cbiAgY29uc3QgY2xhaW1CdWYgPSBhc0J1ZmZlcihjbGFpbVNjcmlwdCk7XG4gIGNvbnN0IHJlZnVuZEJ1ZiA9IGFzQnVmZmVyKHJlZnVuZFNjcmlwdCk7XG4gIGNvbnN0IHByZWltYWdlID0gYXNCdWZmZXIocHJlaW1hZ2UzMik7XG4gIGlmICghY2xhaW1CdWYgfHwgIXJlZnVuZEJ1ZikgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEhUTEMgc2NyaXB0IGJ5dGVzLicpO1xuICBpZiAoIXByZWltYWdlIHx8IHByZWltYWdlLmxlbmd0aCAhPT0gMzIpIHRocm93IG5ldyBFcnJvcigncHJlaW1hZ2UgbXVzdCBiZSAzMiBieXRlcy4nKTtcblxuICBjb25zdCBjb250cm9sQmxvY2sgPSBidWlsZENsYWltQ29udHJvbEJsb2NrKGNsYWltQnVmLCByZWZ1bmRCdWYpO1xuICBjb25zdCBwc2J0ID0gbmV3IFBzYnQoeyBuZXR3b3JrIH0pO1xuICBwc2J0LmFkZElucHV0KHtcbiAgICBoYXNoOiB0eC5nZXRJZCgpLFxuICAgIGluZGV4OiB2b3V0LFxuICAgIHdpdG5lc3NVdHhvOiB7XG4gICAgICBzY3JpcHQ6IG91dC5zY3JpcHQsXG4gICAgICB2YWx1ZTogQmlnSW50KGlucHV0U2F0cylcbiAgICB9LFxuICAgIHRhcEludGVybmFsS2V5OiBUQVBST09UX0lOVEVSTkFMX05VTVMsXG4gICAgdGFwTGVhZlNjcmlwdDogW3tcbiAgICAgIGxlYWZWZXJzaW9uOiBiaXAzNDEuTEVBRl9WRVJTSU9OX1RBUFNDUklQVCxcbiAgICAgIHNjcmlwdDogY2xhaW1CdWYsXG4gICAgICBjb250cm9sQmxvY2tcbiAgICB9XVxuICB9KTtcbiAgcHNidC5hZGRPdXRwdXQoe1xuICAgIGFkZHJlc3M6IFN0cmluZyhkZXN0aW5hdGlvbkFkZHJlc3MgfHwgJycpLnRyaW0oKSxcbiAgICB2YWx1ZTogQmlnSW50KGRlc3RTYXRzKVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHBzYnQsXG4gICAgcHJlaW1hZ2UzMjogcHJlaW1hZ2UsXG4gICAgY2xhaW1TY3JpcHQ6IGNsYWltQnVmLFxuICAgIHZvdXQsXG4gICAgaW5wdXRTYXRzLFxuICAgIGRlc3RTYXRzLFxuICAgIGZlZVxuICB9O1xufVxuXG4vKipcbiAqIFNpZ24gd2l0aCBzZWxsZXIgc2VjcDI1NmsxIHByaXZhdGUga2V5ICgzMiBieXRlcykgYW5kIGZpbmFsaXplIHdpdG5lc3M6XG4gKiBbc2Nobm9ycl9zaWcsIHByZWltYWdlLCBzY3JpcHQsIGNvbnRyb2xfYmxvY2tdIHBlciBCSVAzNDEgc2NyaXB0IHBhdGguXG4gKi9cbmZ1bmN0aW9uIHNpZ25BbmRFeHRyYWN0SW52ZW50b3J5SHRsY1NlbGxlckNsYWltIChidW5kbGUsIHNlbGxlclByaXYzMikge1xuICBpZiAoIWJ1bmRsZSB8fCAhYnVuZGxlLnBzYnQpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBQU0JUIGJ1bmRsZS4nKTtcbiAgY29uc3QgcHJpdiA9IGFzQnVmZmVyKHNlbGxlclByaXYzMik7XG4gIGlmICghcHJpdiB8fCBwcml2Lmxlbmd0aCAhPT0gMzIpIHRocm93IG5ldyBFcnJvcignU2VsbGVyIHByaXZhdGUga2V5IG11c3QgYmUgMzIgYnl0ZXMuJyk7XG4gIGNvbnN0IHsgcHNidCwgcHJlaW1hZ2UzMiB9ID0gYnVuZGxlO1xuICBwc2J0LnNpZ25JbnB1dCgwLCBzaWduZXJGcm9tUHJpdjMyKHByaXYpKTtcblxuICBjb25zdCBwcmVpbWFnZSA9IGFzQnVmZmVyKHByZWltYWdlMzIpO1xuICBwc2J0LmZpbmFsaXplSW5wdXQoMCwgKF9pbnB1dEluZGV4LCBpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGxlYWYgPSAoaW5wdXQudGFwTGVhZlNjcmlwdCB8fCBbXSlbMF07XG4gICAgaWYgKCFsZWFmIHx8ICFsZWFmLnNjcmlwdCB8fCAhbGVhZi5jb250cm9sQmxvY2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0YXBMZWFmU2NyaXB0IG9uIFBTQlQgaW5wdXQuJyk7XG4gICAgfVxuICAgIGNvbnN0IGxoID0gQnVmZmVyLmZyb20oYmlwMzQxLnRhcGxlYWZIYXNoKHsgb3V0cHV0OiBsZWFmLnNjcmlwdCwgdmVyc2lvbjogbGVhZi5sZWFmVmVyc2lvbiB9KSk7XG4gICAgY29uc3QgdHNzID0gKGlucHV0LnRhcFNjcmlwdFNpZyB8fCBbXSkuZmluZCgodCkgPT4gQnVmZmVyLmZyb20odC5sZWFmSGFzaCkuZXF1YWxzKGxoKSk7XG4gICAgaWYgKCF0c3MpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0YXBzY3JpcHQgc2lnbmF0dXJlLicpO1xuICAgIGNvbnN0IHNpZyA9IHRzcy5zaWduYXR1cmUubGVuZ3RoID49IDY0ID8gdHNzLnNpZ25hdHVyZS5zdWJhcnJheSgwLCA2NCkgOiB0c3Muc2lnbmF0dXJlO1xuICAgIGNvbnN0IHdpdG5lc3MgPSBbc2lnLCBwcmVpbWFnZSwgbGVhZi5zY3JpcHQsIGxlYWYuY29udHJvbEJsb2NrXTtcbiAgICByZXR1cm4geyBmaW5hbFNjcmlwdFdpdG5lc3M6IHBzYnR1dGlscy53aXRuZXNzU3RhY2tUb1NjcmlwdFdpdG5lc3Mod2l0bmVzcykgfTtcbiAgfSk7XG5cbiAgY29uc3QgZXh0cmFjdGVkID0gcHNidC5leHRyYWN0VHJhbnNhY3Rpb24oKTtcbiAgcmV0dXJuIHsgdHhIZXg6IGV4dHJhY3RlZC50b0hleCgpLCB0eGlkOiBleHRyYWN0ZWQuZ2V0SWQoKSB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIHVuc2lnbmVkIFBTQlQgc3BlbmRpbmcgdGhlIGZ1bmRlZCBIVExDIFVUWE8gdmlhIHRoZSBidXllci9pbml0aWF0b3IgcmVmdW5kIGxlYWYgKENMVFYgKyBDSEVDS1NJRykuXG4gKiBTcGVuZGluZyB0eCBtdXN0IHVzZSBuTG9ja1RpbWUg4omlIHJlZnVuZExvY2t0aW1lSGVpZ2h0IGFuZCBpbnB1dCBzZXF1ZW5jZSDiiaAgMHhmZmZmZmZmZi5cbiAqL1xuZnVuY3Rpb24gcHJlcGFyZUludmVudG9yeUh0bGNCdXllclJlZnVuZFBzYnQgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbmV0d29ya05hbWUsXG4gICAgZnVuZGVkVHhIZXgsXG4gICAgcGF5bWVudEFkZHJlc3MsXG4gICAgY2xhaW1TY3JpcHQsXG4gICAgcmVmdW5kU2NyaXB0LFxuICAgIHJlZnVuZExvY2t0aW1lSGVpZ2h0LFxuICAgIGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICBmZWVTYXRzXG4gIH0gPSBvcHRzO1xuXG4gIGNvbnN0IG5ldHdvcmsgPSBuZXR3b3JrRm9yRmFicmljTmFtZShuZXR3b3JrTmFtZSk7XG4gIGNvbnN0IHR4ID0gYml0Y29pbi5UcmFuc2FjdGlvbi5mcm9tSGV4KFN0cmluZyhmdW5kZWRUeEhleCB8fCAnJykudHJpbSgpKTtcbiAgY29uc3Qgdm91dCA9IGZpbmRQMnRyVm91dEZvckFkZHJlc3ModHgsIHBheW1lbnRBZGRyZXNzLCBuZXR3b3JrKTtcbiAgaWYgKHZvdXQgPCAwKSB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmRpbmcgdHggaGFzIG5vIG91dHB1dCBtYXRjaGluZyBwYXltZW50QWRkcmVzcy4nKTtcbiAgY29uc3Qgb3V0ID0gdHgub3V0c1t2b3V0XTtcbiAgY29uc3QgaW5wdXRTYXRzID0gdHlwZW9mIG91dC52YWx1ZSA9PT0gJ2JpZ2ludCcgPyBOdW1iZXIob3V0LnZhbHVlKSA6IE51bWJlcihvdXQudmFsdWUpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbnB1dFNhdHMpIHx8IGlucHV0U2F0cyA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgSFRMQyBvdXRwdXQgdmFsdWUuJyk7XG4gIGNvbnN0IGZlZSA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoTnVtYmVyKGZlZVNhdHMgfHwgMTAwMCkpKTtcbiAgY29uc3QgZGVzdFNhdHMgPSBpbnB1dFNhdHMgLSBmZWU7XG4gIGlmIChkZXN0U2F0cyA8IDU0NikgdGhyb3cgbmV3IEVycm9yKCdBbW91bnQgYWZ0ZXIgZmVlIGlzIGJlbG93IGR1c3QgdGhyZXNob2xkOyBsb3dlciBmZWUgb3IgZnVuZCBtb3JlIHNhdHMuJyk7XG5cbiAgY29uc3QgY2xhaW1CdWYgPSBhc0J1ZmZlcihjbGFpbVNjcmlwdCk7XG4gIGNvbnN0IHJlZnVuZEJ1ZiA9IGFzQnVmZmVyKHJlZnVuZFNjcmlwdCk7XG4gIGlmICghY2xhaW1CdWYgfHwgIXJlZnVuZEJ1ZikgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEhUTEMgc2NyaXB0IGJ5dGVzLicpO1xuICBjb25zdCBsb2NrID0gTnVtYmVyKHJlZnVuZExvY2t0aW1lSGVpZ2h0KTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobG9jaykgfHwgbG9jayA8IDEpIHRocm93IG5ldyBFcnJvcigncmVmdW5kTG9ja3RpbWVIZWlnaHQgaXMgcmVxdWlyZWQuJyk7XG5cbiAgY29uc3QgY29udHJvbEJsb2NrID0gYnVpbGRUYXBMZWFmQ29udHJvbEJsb2NrKGNsYWltQnVmLCByZWZ1bmRCdWYsIHJlZnVuZEJ1Zik7XG4gIGNvbnN0IHBzYnQgPSBuZXcgUHNidCh7IG5ldHdvcmsgfSk7XG4gIHBzYnQuc2V0TG9ja3RpbWUobG9jayk7XG4gIHBzYnQuYWRkSW5wdXQoe1xuICAgIGhhc2g6IHR4LmdldElkKCksXG4gICAgaW5kZXg6IHZvdXQsXG4gICAgc2VxdWVuY2U6IDB4ZmZmZmZmZmUsXG4gICAgd2l0bmVzc1V0eG86IHtcbiAgICAgIHNjcmlwdDogb3V0LnNjcmlwdCxcbiAgICAgIHZhbHVlOiBCaWdJbnQoaW5wdXRTYXRzKVxuICAgIH0sXG4gICAgdGFwSW50ZXJuYWxLZXk6IFRBUFJPT1RfSU5URVJOQUxfTlVNUyxcbiAgICB0YXBMZWFmU2NyaXB0OiBbe1xuICAgICAgbGVhZlZlcnNpb246IGJpcDM0MS5MRUFGX1ZFUlNJT05fVEFQU0NSSVBULFxuICAgICAgc2NyaXB0OiByZWZ1bmRCdWYsXG4gICAgICBjb250cm9sQmxvY2tcbiAgICB9XVxuICB9KTtcbiAgcHNidC5hZGRPdXRwdXQoe1xuICAgIGFkZHJlc3M6IFN0cmluZyhkZXN0aW5hdGlvbkFkZHJlc3MgfHwgJycpLnRyaW0oKSxcbiAgICB2YWx1ZTogQmlnSW50KGRlc3RTYXRzKVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHBzYnQsXG4gICAgY2xhaW1TY3JpcHQ6IGNsYWltQnVmLFxuICAgIHJlZnVuZFNjcmlwdDogcmVmdW5kQnVmLFxuICAgIHZvdXQsXG4gICAgaW5wdXRTYXRzLFxuICAgIGRlc3RTYXRzLFxuICAgIGZlZSxcbiAgICBsb2NrdGltZTogbG9ja1xuICB9O1xufVxuXG4vKipcbiAqIFNpZ24gd2l0aCBidXllciBzZWNwMjU2azEgcHJpdmF0ZSBrZXkgKDMyIGJ5dGVzKSBhbmQgZmluYWxpemUgd2l0bmVzcyBmb3IgcmVmdW5kIGxlYWY6XG4gKiBbc2Nobm9ycl9zaWcsIHNjcmlwdCwgY29udHJvbF9ibG9ja10uXG4gKi9cbmZ1bmN0aW9uIHNpZ25BbmRFeHRyYWN0SW52ZW50b3J5SHRsY0J1eWVyUmVmdW5kIChidW5kbGUsIGJ1eWVyUHJpdjMyKSB7XG4gIGlmICghYnVuZGxlIHx8ICFidW5kbGUucHNidCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFBTQlQgYnVuZGxlLicpO1xuICBjb25zdCBwcml2ID0gYXNCdWZmZXIoYnV5ZXJQcml2MzIpO1xuICBpZiAoIXByaXYgfHwgcHJpdi5sZW5ndGggIT09IDMyKSB0aHJvdyBuZXcgRXJyb3IoJ0J1eWVyIHByaXZhdGUga2V5IG11c3QgYmUgMzIgYnl0ZXMuJyk7XG4gIGNvbnN0IHsgcHNidCB9ID0gYnVuZGxlO1xuICBwc2J0LnNpZ25JbnB1dCgwLCBzaWduZXJGcm9tUHJpdjMyKHByaXYpKTtcblxuICBwc2J0LmZpbmFsaXplSW5wdXQoMCwgKF9pbnB1dEluZGV4LCBpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGxlYWYgPSAoaW5wdXQudGFwTGVhZlNjcmlwdCB8fCBbXSlbMF07XG4gICAgaWYgKCFsZWFmIHx8ICFsZWFmLnNjcmlwdCB8fCAhbGVhZi5jb250cm9sQmxvY2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0YXBMZWFmU2NyaXB0IG9uIFBTQlQgaW5wdXQuJyk7XG4gICAgfVxuICAgIGNvbnN0IGxoID0gQnVmZmVyLmZyb20oYmlwMzQxLnRhcGxlYWZIYXNoKHsgb3V0cHV0OiBsZWFmLnNjcmlwdCwgdmVyc2lvbjogbGVhZi5sZWFmVmVyc2lvbiB9KSk7XG4gICAgY29uc3QgdHNzID0gKGlucHV0LnRhcFNjcmlwdFNpZyB8fCBbXSkuZmluZCgodCkgPT4gQnVmZmVyLmZyb20odC5sZWFmSGFzaCkuZXF1YWxzKGxoKSk7XG4gICAgaWYgKCF0c3MpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0YXBzY3JpcHQgc2lnbmF0dXJlLicpO1xuICAgIGNvbnN0IHNpZyA9IHRzcy5zaWduYXR1cmUubGVuZ3RoID49IDY0ID8gdHNzLnNpZ25hdHVyZS5zdWJhcnJheSgwLCA2NCkgOiB0c3Muc2lnbmF0dXJlO1xuICAgIGNvbnN0IHdpdG5lc3MgPSBbc2lnLCBsZWFmLnNjcmlwdCwgbGVhZi5jb250cm9sQmxvY2tdO1xuICAgIHJldHVybiB7IGZpbmFsU2NyaXB0V2l0bmVzczogcHNidHV0aWxzLndpdG5lc3NTdGFja1RvU2NyaXB0V2l0bmVzcyh3aXRuZXNzKSB9O1xuICB9KTtcblxuICBjb25zdCBleHRyYWN0ZWQgPSBwc2J0LmV4dHJhY3RUcmFuc2FjdGlvbigpO1xuICByZXR1cm4geyB0eEhleDogZXh0cmFjdGVkLnRvSGV4KCksIHR4aWQ6IGV4dHJhY3RlZC5nZXRJZCgpIH07XG59XG5cbi8qKlxuICogRmluZCBhIDMyLWJ5dGUgd2l0bmVzcyBzdGFjayBpdGVtIHdob3NlIFNIQTI1NiBlcXVhbHMgcGF5bWVudEhhc2guXG4gKiBTZWxsZXIgY2xhaW0gd2l0bmVzcyBpcyB0eXBpY2FsbHkgW3NjaG5vcnJfc2lnLCBwcmVpbWFnZSwgc2NyaXB0LCBjb250cm9sX2Jsb2NrXS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PEJ1ZmZlcnxzdHJpbmc+fHVuZGVmaW5lZH0gd2l0bmVzc1xuICogQHBhcmFtIHtCdWZmZXJ8c3RyaW5nfSBwYXltZW50SGFzaDMyXG4gKiBAcmV0dXJucyB7QnVmZmVyfG51bGx9XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RQcmVpbWFnZUZyb21XaXRuZXNzU3RhY2sgKHdpdG5lc3MsIHBheW1lbnRIYXNoMzIpIHtcbiAgY29uc3Qgd2FudCA9IGFzQnVmZmVyKHBheW1lbnRIYXNoMzIpIHx8IEJ1ZmZlci5mcm9tKFN0cmluZyhwYXltZW50SGFzaDMyIHx8ICcnKS50cmltKCksICdoZXgnKTtcbiAgaWYgKHdhbnQubGVuZ3RoICE9PSAzMikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHdhbnRIZXggPSB3YW50LnRvU3RyaW5nKCdoZXgnKTtcbiAgY29uc3Qgc3RhY2sgPSBBcnJheS5pc0FycmF5KHdpdG5lc3MpID8gd2l0bmVzcyA6IFtdO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2Ygc3RhY2spIHtcbiAgICBsZXQgYnVmID0gYXNCdWZmZXIoaXRlbSk7XG4gICAgaWYgKCFidWYgJiYgdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkgeyBidWYgPSBCdWZmZXIuZnJvbShpdGVtLCAnaGV4Jyk7IH0gY2F0Y2ggKF8pIHsgY29udGludWU7IH1cbiAgICB9XG4gICAgaWYgKCFidWYgfHwgYnVmLmxlbmd0aCAhPT0gMzIpIGNvbnRpbnVlO1xuICAgIGlmIChoYXNoMjU2KGJ1ZikudG9TdHJpbmcoJ2hleCcpID09PSB3YW50SGV4KSByZXR1cm4gQnVmZmVyLmZyb20oYnVmKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBTY2FuIGEgY2xhaW0gdHJhbnNhY3Rpb24gZm9yIHRoZSBIVExDIHByZWltYWdlIChjb250ZW50IGtleSBmb3Igc2VhbGVkIHNhbGVzKS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xpbXBvcnQoJ2JpdGNvaW5qcy1saWInKS5UcmFuc2FjdGlvbn0gdHhIZXhPclR4XG4gKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IHBheW1lbnRIYXNoSGV4XG4gKiBAcmV0dXJucyB7eyBvazogYm9vbGVhbiwgcHJlaW1hZ2UzMj86IEJ1ZmZlciwgcHJlaW1hZ2VIZXg/OiBzdHJpbmcsIHZpbj86IG51bWJlciwgZXJyb3I/OiBzdHJpbmcgfX1cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFByZWltYWdlRnJvbUNsYWltVHggKHR4SGV4T3JUeCwgcGF5bWVudEhhc2hIZXgpIHtcbiAgbGV0IHR4O1xuICB0cnkge1xuICAgIHR4ID0gdHlwZW9mIHR4SGV4T3JUeCA9PT0gJ3N0cmluZydcbiAgICAgID8gYml0Y29pbi5UcmFuc2FjdGlvbi5mcm9tSGV4KFN0cmluZyh0eEhleE9yVHgpLnRyaW0oKSlcbiAgICAgIDogdHhIZXhPclR4O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBlcnIgJiYgZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6ICdpbnZhbGlkIHR4JyB9O1xuICB9XG4gIGlmICghdHggfHwgIUFycmF5LmlzQXJyYXkodHguaW5zKSkgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ2ludmFsaWQgdHJhbnNhY3Rpb24nIH07XG4gIGNvbnN0IGhhc2hIZXggPSBCdWZmZXIuaXNCdWZmZXIocGF5bWVudEhhc2hIZXgpXG4gICAgPyBwYXltZW50SGFzaEhleC50b1N0cmluZygnaGV4JylcbiAgICA6IFN0cmluZyhwYXltZW50SGFzaEhleCB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghL15bMC05YS1mXXs2NH0kLy50ZXN0KGhhc2hIZXgpKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAncGF5bWVudEhhc2hIZXggbXVzdCBiZSA2NCBoZXggY2hhcnMnIH07XG5cbiAgZm9yIChsZXQgdmluID0gMDsgdmluIDwgdHguaW5zLmxlbmd0aDsgdmluKyspIHtcbiAgICBjb25zdCBpbnB1dCA9IHR4Lmluc1t2aW5dO1xuICAgIGNvbnN0IHdpdG5lc3MgPSBpbnB1dCAmJiBpbnB1dC53aXRuZXNzO1xuICAgIGNvbnN0IHByZWltYWdlID0gZXh0cmFjdFByZWltYWdlRnJvbVdpdG5lc3NTdGFjayh3aXRuZXNzLCBoYXNoSGV4KTtcbiAgICBpZiAocHJlaW1hZ2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9rOiB0cnVlLFxuICAgICAgICBwcmVpbWFnZTMyOiBwcmVpbWFnZSxcbiAgICAgICAgcHJlaW1hZ2VIZXg6IHByZWltYWdlLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdmluXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAncHJlaW1hZ2Ugbm90IGZvdW5kIGluIGNsYWltIHdpdG5lc3NlcycgfTtcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gY2hhaW4gdGlwIGhlaWdodCBpcyBoaWdoIGVub3VnaCBmb3IgdGhlIGJ1eWVyIHJlZnVuZCBsZWFmLlxuICogQHBhcmFtIHtudW1iZXJ9IHRpcEhlaWdodFxuICogQHBhcmFtIHtudW1iZXJ9IHJlZnVuZExvY2t0aW1lSGVpZ2h0XG4gKi9cbmZ1bmN0aW9uIHJlZnVuZExvY2t0aW1lTWF0dXJlICh0aXBIZWlnaHQsIHJlZnVuZExvY2t0aW1lSGVpZ2h0KSB7XG4gIGNvbnN0IHRpcCA9IE1hdGgucm91bmQoTnVtYmVyKHRpcEhlaWdodCkpO1xuICBjb25zdCBsb2NrID0gTWF0aC5yb3VuZChOdW1iZXIocmVmdW5kTG9ja3RpbWVIZWlnaHQpKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGlwKSB8fCAhTnVtYmVyLmlzRmluaXRlKGxvY2spIHx8IGxvY2sgPCAxKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0aXAgPj0gbG9jaztcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplSGV4IChsYWJlbCwgaGV4LCBieXRlTGVuKSB7XG4gIGNvbnN0IGggPSBTdHJpbmcoaGV4IHx8ICcnKS50cmltKCkucmVwbGFjZSgvXjB4L2ksICcnKTtcbiAgaWYgKCEvXlswLTlhLWZdKiQvaS50ZXN0KGgpIHx8IGgubGVuZ3RoICE9PSBieXRlTGVuICogMikge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtsYWJlbH0gbXVzdCBiZSAke2J5dGVMZW4gKiAyfSBoZXggY2hhcmFjdGVycy5gKTtcbiAgfVxuICByZXR1cm4gaC50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIERvY3VtZW50LW9mZmVyIEwxIGVzY3Jvdzogc2FtZSBUYXByb290IEhUTEMgYXMgaW52ZW50b3J5LCB3aXRoIHJvbGVzIHJlbmFtZWQuXG4gKiBEZWxpdmVyZXIgY2xhaW1zIHdpdGggcHJlaW1hZ2UgKyBTY2hub3JyIChzZWxsZXIgbGVhZik7IGluaXRpYXRvciByZWZ1bmRzIGFmdGVyIENMVFYgKGJ1eWVyIGxlYWYpLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5uZXR3b3JrTmFtZSAtIGUuZy4gcmVndGVzdCwgbWFpbm5ldFxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuZGVsaXZlcmVyUHVia2V5SGV4IC0gMzMtYnl0ZSBjb21wcmVzc2VkIChjbGFpbSBwYXRoKVxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuaW5pdGlhdG9yUmVmdW5kUHVia2V5SGV4IC0gMzMtYnl0ZSBjb21wcmVzc2VkIChyZWZ1bmQgcGF0aClcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLnBheW1lbnRIYXNoSGV4IC0gU0hBMjU2KHByZWltYWdlKSwgMzIgYnl0ZXMgaGV4XG4gKiBAcGFyYW0ge251bWJlcn0gb3B0cy5yZWZ1bmRMb2NrSGVpZ2h0IC0gYmxvY2sgaGVpZ2h0IGZvciBDTFRWIHJlZnVuZCBsZWdcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5hbW91bnRTYXRzXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxhYmVsXVxuICovXG5mdW5jdGlvbiBidWlsZERvY3VtZW50T2ZmZXJFc2Nyb3cgKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXltZW50SGFzaEhleCA9IG5vcm1hbGl6ZUhleCgncGF5bWVudEhhc2hIZXgnLCBvcHRzLnBheW1lbnRIYXNoSGV4LCAzMik7XG4gIGNvbnN0IGRlbGl2ZXJlckhleCA9IG5vcm1hbGl6ZUhleCgncHVia2V5SGV4Jywgb3B0cy5kZWxpdmVyZXJQdWJrZXlIZXgsIDMzKTtcbiAgY29uc3QgaW5pdGlhdG9ySGV4ID0gbm9ybWFsaXplSGV4KCdwdWJrZXlIZXgnLCBvcHRzLmluaXRpYXRvclJlZnVuZFB1YmtleUhleCwgMzMpO1xuICBjb25zdCBidWlsdCA9IGJ1aWxkSW52ZW50b3J5SHRsY1AydHIoe1xuICAgIG5ldHdvcmtOYW1lOiBvcHRzLm5ldHdvcmtOYW1lIHx8ICdyZWd0ZXN0JyxcbiAgICBzZWxsZXJQdWJrZXlDb21wcmVzc2VkOiBCdWZmZXIuZnJvbShkZWxpdmVyZXJIZXgsICdoZXgnKSxcbiAgICBidXllclJlZnVuZFB1YmtleUNvbXByZXNzZWQ6IEJ1ZmZlci5mcm9tKGluaXRpYXRvckhleCwgJ2hleCcpLFxuICAgIHBheW1lbnRIYXNoMzI6IEJ1ZmZlci5mcm9tKHBheW1lbnRIYXNoSGV4LCAnaGV4JyksXG4gICAgcmVmdW5kTG9ja3RpbWVIZWlnaHQ6IE51bWJlcihvcHRzLnJlZnVuZExvY2tIZWlnaHQpXG4gIH0pO1xuICBjb25zdCBoaW50cyA9IGJ1aWxkSHRsY0Z1bmRpbmdIaW50cyh7XG4gICAgcGF5bWVudEFkZHJlc3M6IGJ1aWx0LmFkZHJlc3MsXG4gICAgYW1vdW50U2F0czogTWF0aC5yb3VuZChOdW1iZXIob3B0cy5hbW91bnRTYXRzIHx8IDApKSxcbiAgICBsYWJlbDogU3RyaW5nKG9wdHMubGFiZWwgfHwgJ2RvY3VtZW50LW9mZmVyJykuc2xpY2UoMCwgMTIwKVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwYXltZW50QWRkcmVzczogYnVpbHQuYWRkcmVzcyxcbiAgICBjbGFpbVNjcmlwdEhleDogYnVpbHQuY2xhaW1TY3JpcHQudG9TdHJpbmcoJ2hleCcpLFxuICAgIHJlZnVuZFNjcmlwdEhleDogYnVpbHQucmVmdW5kU2NyaXB0LnRvU3RyaW5nKCdoZXgnKSxcbiAgICBwYXltZW50SGFzaEhleDogYnVpbHQucGF5bWVudEhhc2hIZXgsXG4gICAgYW1vdW50QnRjOiBoaW50cy5hbW91bnRCdGMsXG4gICAgYml0Y29pblVyaTogaGludHMuYml0Y29pblVyaVxuICB9O1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBjb21wcmVzc2VkICg2NiBoZXgpIG9yIHgtb25seSAoNjQgaGV4KSBwdWJrZXkgdG8gbG93ZXJjYXNlIHgtb25seSBoZXguXG4gKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ8bnVsbHx1bmRlZmluZWR9IHBrXG4gKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9XG4gKi9cbmZ1bmN0aW9uIHRvWE9ubHlQdWJrZXlIZXggKHBrKSB7XG4gIGlmIChwayA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihwaykpIHtcbiAgICBpZiAocGsubGVuZ3RoID09PSAzMikgcmV0dXJuIHBrLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBpZiAocGsubGVuZ3RoID09PSAzMyAmJiAocGtbMF0gPT09IDB4MDIgfHwgcGtbMF0gPT09IDB4MDMpKSB7XG4gICAgICByZXR1cm4gcGsuc3ViYXJyYXkoMSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBsZXQgcyA9IFN0cmluZyhwaykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChzLnN0YXJ0c1dpdGgoJzB4JykpIHMgPSBzLnNsaWNlKDIpO1xuICBpZiAoL15bMC05YS1mXXs2NH0kLy50ZXN0KHMpKSByZXR1cm4gcztcbiAgaWYgKC9eWzAtOWEtZl17NjZ9JC8udGVzdChzKSAmJiAocy5zdGFydHNXaXRoKCcwMicpIHx8IHMuc3RhcnRzV2l0aCgnMDMnKSkpIHJldHVybiBzLnNsaWNlKDIpO1xuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ8bnVsbHx1bmRlZmluZWR9IGFcbiAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcnxudWxsfHVuZGVmaW5lZH0gYlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHB1YmtleXNNYXRjaFhPbmx5IChhLCBiKSB7XG4gIGNvbnN0IHhhID0gdG9YT25seVB1YmtleUhleChhKTtcbiAgY29uc3QgeGIgPSB0b1hPbmx5UHVia2V5SGV4KGIpO1xuICByZXR1cm4gISEoeGEgJiYgeGIgJiYgeGEgPT09IHhiKTtcbn1cblxuLyoqXG4gKiBSZWJ1aWxkIGJ1eWVyLWJvdW5kIFAyVFIgYW5kIG9wdGlvbmFsbHkgdmVyaWZ5IGEgc2VsbGVyLWFkdmVydGlzZWQgcGF5bWVudEFkZHJlc3MuXG4gKiBOZXZlciB0cmVhdCBzZWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyBhdXRob3JpdGF0aXZlIHdpdGhvdXQgYSBtYXRjaC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0c1xuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubmV0d29ya05hbWVcbiAqIEBwYXJhbSB7QnVmZmVyfHN0cmluZ30gb3B0cy5zZWxsZXJQdWJrZXlDb21wcmVzc2VkXG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IG9wdHMuYnV5ZXJSZWZ1bmRQdWJrZXlDb21wcmVzc2VkXG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IG9wdHMucGF5bWVudEhhc2gzMlxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMucmVmdW5kTG9ja3RpbWVIZWlnaHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5wYXltZW50QWRkcmVzc10gc2VsbGVyLWFkdmVydGlzZWQgYWRkcmVzcyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyB7eyBvazogdHJ1ZSwgYnVpbHQ6IG9iamVjdCB9IHwgeyBvazogZmFsc2UsIGVycm9yOiBzdHJpbmcsIGV4cGVjdGVkQWRkcmVzcz86IHN0cmluZywgYnVpbHQ/OiBvYmplY3QgfX1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJbnZlbnRvcnlIdGxjT2ZmZXIgKG9wdHMgPSB7fSkge1xuICBsZXQgc2VsbGVyID0gb3B0cy5zZWxsZXJQdWJrZXlDb21wcmVzc2VkO1xuICBsZXQgYnV5ZXIgPSBvcHRzLmJ1eWVyUmVmdW5kUHVia2V5Q29tcHJlc3NlZDtcbiAgbGV0IGhhc2ggPSBvcHRzLnBheW1lbnRIYXNoMzI7XG4gIHRyeSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoc2VsbGVyKSkgc2VsbGVyID0gQnVmZmVyLmZyb20oU3RyaW5nKHNlbGxlciB8fCAnJyksICdoZXgnKTtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidXllcikpIGJ1eWVyID0gQnVmZmVyLmZyb20oU3RyaW5nKGJ1eWVyIHx8ICcnKSwgJ2hleCcpO1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGhhc2gpKSBoYXNoID0gQnVmZmVyLmZyb20oU3RyaW5nKGhhc2ggfHwgJycpLCAnaGV4Jyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBgSW52YWxpZCBIVExDIGtleS9oYXNoIG1hdGVyaWFsOiAke2UubWVzc2FnZX1gIH07XG4gIH1cbiAgbGV0IGJ1aWx0O1xuICB0cnkge1xuICAgIGJ1aWx0ID0gYnVpbGRJbnZlbnRvcnlIdGxjUDJ0cih7XG4gICAgICBuZXR3b3JrTmFtZTogb3B0cy5uZXR3b3JrTmFtZSB8fCAncmVndGVzdCcsXG4gICAgICBzZWxsZXJQdWJrZXlDb21wcmVzc2VkOiBzZWxsZXIsXG4gICAgICBidXllclJlZnVuZFB1YmtleUNvbXByZXNzZWQ6IGJ1eWVyLFxuICAgICAgcGF5bWVudEhhc2gzMjogaGFzaCxcbiAgICAgIHJlZnVuZExvY2t0aW1lSGVpZ2h0OiBOdW1iZXIob3B0cy5yZWZ1bmRMb2NrdGltZUhlaWdodClcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGUubWVzc2FnZSB8fCBTdHJpbmcoZSkgfTtcbiAgfVxuICBjb25zdCBvZmZlcmVkID0gb3B0cy5wYXltZW50QWRkcmVzcyAhPSBudWxsID8gU3RyaW5nKG9wdHMucGF5bWVudEFkZHJlc3MpLnRyaW0oKSA6ICcnO1xuICBpZiAob2ZmZXJlZCAmJiBvZmZlcmVkICE9PSBidWlsdC5hZGRyZXNzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9rOiBmYWxzZSxcbiAgICAgIGVycm9yOiAnU2VsbGVyIEhUTEMgcGF5bWVudEFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggYnV5ZXItYm91bmQgUDJUUiBzY3JpcHQg4oCUIHJlZnVzaW5nIHRvIGZ1bmQnLFxuICAgICAgZXhwZWN0ZWRBZGRyZXNzOiBidWlsdC5hZGRyZXNzLFxuICAgICAgYnVpbHRcbiAgICB9O1xuICB9XG4gIHJldHVybiB7IG9rOiB0cnVlLCBidWlsdCB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYnVpbGRJbnZlbnRvcnlIdGxjUDJ0cixcbiAgYnVpbGRIdGxjRnVuZGluZ0hpbnRzLFxuICBidWlsZERvY3VtZW50T2ZmZXJFc2Nyb3csXG4gIHZhbGlkYXRlSW52ZW50b3J5SHRsY09mZmVyLFxuICB0b1hPbmx5UHVia2V5SGV4LFxuICBwdWJrZXlzTWF0Y2hYT25seSxcbiAgcmFuZG9tUHJlaW1hZ2UzMixcbiAgaGFzaDI1NixcbiAgbmV0d29ya0ZvckZhYnJpY05hbWUsXG4gIFRBUFJPT1RfSU5URVJOQUxfTlVNUyxcbiAgZmluZFAydHJWb3V0Rm9yQWRkcmVzcyxcbiAgYnVpbGRUYXBMZWFmQ29udHJvbEJsb2NrLFxuICBidWlsZENsYWltQ29udHJvbEJsb2NrLFxuICBwcmVwYXJlSW52ZW50b3J5SHRsY1NlbGxlckNsYWltUHNidCxcbiAgc2lnbkFuZEV4dHJhY3RJbnZlbnRvcnlIdGxjU2VsbGVyQ2xhaW0sXG4gIHByZXBhcmVJbnZlbnRvcnlIdGxjQnV5ZXJSZWZ1bmRQc2J0LFxuICBzaWduQW5kRXh0cmFjdEludmVudG9yeUh0bGNCdXllclJlZnVuZCxcbiAgZXh0cmFjdFByZWltYWdlRnJvbVdpdG5lc3NTdGFjayxcbiAgZXh0cmFjdFByZWltYWdlRnJvbUNsYWltVHgsXG4gIHJlZnVuZExvY2t0aW1lTWF0dXJlXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/inventoryHtlc.js\n\n}")},"./node_modules/@fabric/core/functions/json.js"(module){eval("{/**\n * Parse input to a JSON string.\n * @param {Object} [input] Any input object.\n * @returns {String}\n */\nmodule.exports = function (input) {\n return JSON.stringify(input, null, ' ');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9qc29uLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9qc29uLmpzPzFlOTAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJzZSBpbnB1dCB0byBhIEpTT04gc3RyaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IFtpbnB1dF0gQW55IGlucHV0IG9iamVjdC5cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShpbnB1dCwgbnVsbCwgJyAgJyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/json.js\n\n}")},"./node_modules/@fabric/core/functions/opcodeAllowList.js"(module){"use strict";eval("{\n\n/**\n * Normalize ARC / Program opcode allow-lists for {@link Machine}.\n *\n * @module functions/opcodeAllowList\n * @see docs/PROGRAM.md\n * @see docs/ARC.md\n */\n\n/**\n * @param {Iterable<*>} [list]\n * @returns {string[]}\n */\nfunction normalizeOpcodeAllowList (list) {\n const out = [];\n const seen = new Set();\n for (const raw of list || []) {\n const name = String(raw == null ? '' : raw).trim();\n if (!name || seen.has(name)) continue;\n seen.add(name);\n out.push(name);\n }\n return out;\n}\n\n/**\n * Read `primitives.opcodes` (or top-level `opcodes`) from a genesis / ARC / Program bag.\n * @param {object} [source]\n * @returns {string[]} empty when unrestricted / absent\n */\nfunction opcodesFromGenesis (source = {}) {\n const src = source && typeof source === 'object' ? source : {};\n const primitives = src.primitives && typeof src.primitives === 'object' ? src.primitives : {};\n const fromPrim = Array.isArray(primitives.opcodes) ? primitives.opcodes : [];\n const fromTop = Array.isArray(src.opcodes) ? src.opcodes : [];\n const fromSettings = src.settings && Array.isArray(src.settings.opcodes)\n ? src.settings.opcodes\n : [];\n const fromAllowed = Array.isArray(src.allowedOpcodes) ? src.allowedOpcodes : [];\n if (fromPrim.length) return normalizeOpcodeAllowList(fromPrim);\n if (fromTop.length) return normalizeOpcodeAllowList(fromTop);\n if (fromSettings.length) return normalizeOpcodeAllowList(fromSettings);\n if (fromAllowed.length) return normalizeOpcodeAllowList(fromAllowed);\n return [];\n}\n\n/**\n * @param {string[]} allowList\n * @param {string} name\n * @returns {boolean}\n */\nfunction opcodeAllowed (allowList, name) {\n if (!allowList || !allowList.length) return true;\n return allowList.includes(String(name || ''));\n}\n\n/**\n * @param {string[]} allowList\n * @param {Iterable<*>} steps\n * @returns {{ ok: true }|{ ok: false, error: string, unknown: string[] }}\n */\nfunction assertStepsAllowed (allowList, steps) {\n if (!allowList || !allowList.length) return { ok: true };\n const unknown = [];\n for (const step of steps || []) {\n const name = String(step == null ? '' : step).trim();\n if (!name) continue;\n if (!opcodeAllowed(allowList, name)) unknown.push(name);\n }\n if (!unknown.length) return { ok: true };\n return {\n ok: false,\n error: `opcode(s) not in primitives.opcodes allow-list: ${unknown.join(', ')}`,\n unknown\n };\n}\n\nmodule.exports = {\n normalizeOpcodeAllowList,\n opcodesFromGenesis,\n opcodeAllowed,\n assertStepsAllowed\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9vcGNvZGVBbGxvd0xpc3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQSxtREFBbUQsY0FBYztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFVBQVU7QUFDdkI7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxhQUFhO0FBQ3hCLGVBQWUsVUFBVSxHQUFHO0FBQzVCO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQSw4REFBOEQsbUJBQW1CO0FBQ2pGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvZnVuY3Rpb25zL29wY29kZUFsbG93TGlzdC5qcz9kOTQyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBOb3JtYWxpemUgQVJDIC8gUHJvZ3JhbSBvcGNvZGUgYWxsb3ctbGlzdHMgZm9yIHtAbGluayBNYWNoaW5lfS5cbiAqXG4gKiBAbW9kdWxlIGZ1bmN0aW9ucy9vcGNvZGVBbGxvd0xpc3RcbiAqIEBzZWUgZG9jcy9QUk9HUkFNLm1kXG4gKiBAc2VlIGRvY3MvQVJDLm1kXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0l0ZXJhYmxlPCo+fSBbbGlzdF1cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplT3Bjb2RlQWxsb3dMaXN0IChsaXN0KSB7XG4gIGNvbnN0IG91dCA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IHJhdyBvZiBsaXN0IHx8IFtdKSB7XG4gICAgY29uc3QgbmFtZSA9IFN0cmluZyhyYXcgPT0gbnVsbCA/ICcnIDogcmF3KS50cmltKCk7XG4gICAgaWYgKCFuYW1lIHx8IHNlZW4uaGFzKG5hbWUpKSBjb250aW51ZTtcbiAgICBzZWVuLmFkZChuYW1lKTtcbiAgICBvdXQucHVzaChuYW1lKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFJlYWQgYHByaW1pdGl2ZXMub3Bjb2Rlc2AgKG9yIHRvcC1sZXZlbCBgb3Bjb2Rlc2ApIGZyb20gYSBnZW5lc2lzIC8gQVJDIC8gUHJvZ3JhbSBiYWcuXG4gKiBAcGFyYW0ge29iamVjdH0gW3NvdXJjZV1cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gZW1wdHkgd2hlbiB1bnJlc3RyaWN0ZWQgLyBhYnNlbnRcbiAqL1xuZnVuY3Rpb24gb3Bjb2Rlc0Zyb21HZW5lc2lzIChzb3VyY2UgPSB7fSkge1xuICBjb25zdCBzcmMgPSBzb3VyY2UgJiYgdHlwZW9mIHNvdXJjZSA9PT0gJ29iamVjdCcgPyBzb3VyY2UgOiB7fTtcbiAgY29uc3QgcHJpbWl0aXZlcyA9IHNyYy5wcmltaXRpdmVzICYmIHR5cGVvZiBzcmMucHJpbWl0aXZlcyA9PT0gJ29iamVjdCcgPyBzcmMucHJpbWl0aXZlcyA6IHt9O1xuICBjb25zdCBmcm9tUHJpbSA9IEFycmF5LmlzQXJyYXkocHJpbWl0aXZlcy5vcGNvZGVzKSA/IHByaW1pdGl2ZXMub3Bjb2RlcyA6IFtdO1xuICBjb25zdCBmcm9tVG9wID0gQXJyYXkuaXNBcnJheShzcmMub3Bjb2RlcykgPyBzcmMub3Bjb2RlcyA6IFtdO1xuICBjb25zdCBmcm9tU2V0dGluZ3MgPSBzcmMuc2V0dGluZ3MgJiYgQXJyYXkuaXNBcnJheShzcmMuc2V0dGluZ3Mub3Bjb2RlcylcbiAgICA/IHNyYy5zZXR0aW5ncy5vcGNvZGVzXG4gICAgOiBbXTtcbiAgY29uc3QgZnJvbUFsbG93ZWQgPSBBcnJheS5pc0FycmF5KHNyYy5hbGxvd2VkT3Bjb2RlcykgPyBzcmMuYWxsb3dlZE9wY29kZXMgOiBbXTtcbiAgaWYgKGZyb21QcmltLmxlbmd0aCkgcmV0dXJuIG5vcm1hbGl6ZU9wY29kZUFsbG93TGlzdChmcm9tUHJpbSk7XG4gIGlmIChmcm9tVG9wLmxlbmd0aCkgcmV0dXJuIG5vcm1hbGl6ZU9wY29kZUFsbG93TGlzdChmcm9tVG9wKTtcbiAgaWYgKGZyb21TZXR0aW5ncy5sZW5ndGgpIHJldHVybiBub3JtYWxpemVPcGNvZGVBbGxvd0xpc3QoZnJvbVNldHRpbmdzKTtcbiAgaWYgKGZyb21BbGxvd2VkLmxlbmd0aCkgcmV0dXJuIG5vcm1hbGl6ZU9wY29kZUFsbG93TGlzdChmcm9tQWxsb3dlZCk7XG4gIHJldHVybiBbXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhbGxvd0xpc3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gb3Bjb2RlQWxsb3dlZCAoYWxsb3dMaXN0LCBuYW1lKSB7XG4gIGlmICghYWxsb3dMaXN0IHx8ICFhbGxvd0xpc3QubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGFsbG93TGlzdC5pbmNsdWRlcyhTdHJpbmcobmFtZSB8fCAnJykpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFsbG93TGlzdFxuICogQHBhcmFtIHtJdGVyYWJsZTwqPn0gc3RlcHNcbiAqIEByZXR1cm5zIHt7IG9rOiB0cnVlIH18eyBvazogZmFsc2UsIGVycm9yOiBzdHJpbmcsIHVua25vd246IHN0cmluZ1tdIH19XG4gKi9cbmZ1bmN0aW9uIGFzc2VydFN0ZXBzQWxsb3dlZCAoYWxsb3dMaXN0LCBzdGVwcykge1xuICBpZiAoIWFsbG93TGlzdCB8fCAhYWxsb3dMaXN0Lmxlbmd0aCkgcmV0dXJuIHsgb2s6IHRydWUgfTtcbiAgY29uc3QgdW5rbm93biA9IFtdO1xuICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcHMgfHwgW10pIHtcbiAgICBjb25zdCBuYW1lID0gU3RyaW5nKHN0ZXAgPT0gbnVsbCA/ICcnIDogc3RlcCkudHJpbSgpO1xuICAgIGlmICghbmFtZSkgY29udGludWU7XG4gICAgaWYgKCFvcGNvZGVBbGxvd2VkKGFsbG93TGlzdCwgbmFtZSkpIHVua25vd24ucHVzaChuYW1lKTtcbiAgfVxuICBpZiAoIXVua25vd24ubGVuZ3RoKSByZXR1cm4geyBvazogdHJ1ZSB9O1xuICByZXR1cm4ge1xuICAgIG9rOiBmYWxzZSxcbiAgICBlcnJvcjogYG9wY29kZShzKSBub3QgaW4gcHJpbWl0aXZlcy5vcGNvZGVzIGFsbG93LWxpc3Q6ICR7dW5rbm93bi5qb2luKCcsICcpfWAsXG4gICAgdW5rbm93blxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbm9ybWFsaXplT3Bjb2RlQWxsb3dMaXN0LFxuICBvcGNvZGVzRnJvbUdlbmVzaXMsXG4gIG9wY29kZUFsbG93ZWQsXG4gIGFzc2VydFN0ZXBzQWxsb3dlZFxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/opcodeAllowList.js\n\n}")},"./node_modules/@fabric/core/functions/opcodeRegistry.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nconst constants = __webpack_require__(/*! ../constants */ \"./node_modules/@fabric/core/constants.js\");\n\nconst BITCOIN_PRIMITIVE_PREFIXES = Object.freeze([\n 'OP_'\n]);\n\nconst FABRIC_OPCODE_PREFIXES = Object.freeze([\n 'P2P_',\n 'LIGHTNING_'\n]);\n\nconst FABRIC_OPCODE_EXACT = Object.freeze([\n 'BITCOIN_BLOCK_TYPE',\n 'BITCOIN_BLOCK_HASH_TYPE',\n 'BITCOIN_TRANSACTION_TYPE',\n 'BITCOIN_TRANSACTION_HASH_TYPE',\n 'LOG_MESSAGE_TYPE',\n 'GENERIC_LIST_TYPE',\n 'DOCUMENT_PUBLISH_TYPE',\n 'DOCUMENT_REQUEST_TYPE',\n 'JSON_CALL_TYPE',\n 'PATCH_MESSAGE_TYPE',\n 'CONTRACT_PROPOSAL_TYPE',\n 'BLOCK_CANDIDATE',\n 'PEER_CANDIDATE',\n 'SESSION_START',\n 'CHAT_MESSAGE'\n]);\n\nfunction classifyConstantName (name) {\n if (!name || typeof name !== 'string') return null;\n if (BITCOIN_PRIMITIVE_PREFIXES.some((prefix) => name.startsWith(prefix))) return 'bitcoin';\n if (FABRIC_OPCODE_PREFIXES.some((prefix) => name.startsWith(prefix))) return 'fabric';\n if (FABRIC_OPCODE_EXACT.includes(name)) return 'fabric';\n return null;\n}\n\nfunction normalizeOpcodeName (name) {\n return String(name || '').trim().toUpperCase();\n}\n\nfunction normalizePubkeyHex (value) {\n const raw = String(value || '').trim().toLowerCase().replace(/^0x/, '');\n if (!raw) return '';\n if (/^[0-9a-f]{64}$/.test(raw)) return raw;\n if (/^(02|03)[0-9a-f]{64}$/.test(raw)) return raw.slice(2);\n return '';\n}\n\nfunction createDefaultOpcodeRegistry () {\n const registry = {};\n for (const [name, value] of Object.entries(constants)) {\n const family = classifyConstantName(name);\n if (!family) continue;\n registry[name] = {\n name,\n family,\n enabled: true,\n code: value\n };\n }\n return registry;\n}\n\nfunction defineOpcode (registry, name, definition = {}) {\n if (!registry || typeof registry !== 'object') throw new Error('Registry object is required.');\n const opcode = normalizeOpcodeName(name);\n if (!opcode) throw new Error('Opcode name is required.');\n\n const next = Object.assign({\n name: opcode,\n family: definition.family || 'fabric',\n enabled: definition.enabled !== false,\n code: (typeof definition.code !== 'undefined') ? definition.code : null,\n body: definition.body || null,\n author: definition.author || null,\n policy: definition.policy || null\n }, definition, { name: opcode });\n\n registry[opcode] = next;\n return next;\n}\n\nfunction parseOpcodeContractBody (body = '') {\n const text = String(body || '');\n return text\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith('#'));\n}\n\nfunction resolveOpcodeContract (registry, body = '') {\n const lines = parseOpcodeContractBody(body).map(normalizeOpcodeName);\n const resolved = [];\n const unknown = [];\n for (const op of lines) {\n if (registry && registry[op] && registry[op].enabled !== false) {\n resolved.push(registry[op]);\n } else {\n unknown.push(op);\n }\n }\n\n return { lines, resolved, unknown };\n}\n\nmodule.exports = {\n createDefaultOpcodeRegistry,\n defineOpcode,\n parseOpcodeContractBody,\n resolveOpcodeContract,\n normalizeOpcodeName,\n normalizePubkeyHex\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9vcGNvZGVSZWdpc3RyeS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyw4REFBYzs7QUFFeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixHQUFHO0FBQ3BCLHdCQUF3QixHQUFHO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLGdCQUFnQixjQUFjOztBQUVqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9vcGNvZGVSZWdpc3RyeS5qcz84ZGY4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzJyk7XG5cbmNvbnN0IEJJVENPSU5fUFJJTUlUSVZFX1BSRUZJWEVTID0gT2JqZWN0LmZyZWV6ZShbXG4gICdPUF8nXG5dKTtcblxuY29uc3QgRkFCUklDX09QQ09ERV9QUkVGSVhFUyA9IE9iamVjdC5mcmVlemUoW1xuICAnUDJQXycsXG4gICdMSUdIVE5JTkdfJ1xuXSk7XG5cbmNvbnN0IEZBQlJJQ19PUENPREVfRVhBQ1QgPSBPYmplY3QuZnJlZXplKFtcbiAgJ0JJVENPSU5fQkxPQ0tfVFlQRScsXG4gICdCSVRDT0lOX0JMT0NLX0hBU0hfVFlQRScsXG4gICdCSVRDT0lOX1RSQU5TQUNUSU9OX1RZUEUnLFxuICAnQklUQ09JTl9UUkFOU0FDVElPTl9IQVNIX1RZUEUnLFxuICAnTE9HX01FU1NBR0VfVFlQRScsXG4gICdHRU5FUklDX0xJU1RfVFlQRScsXG4gICdET0NVTUVOVF9QVUJMSVNIX1RZUEUnLFxuICAnRE9DVU1FTlRfUkVRVUVTVF9UWVBFJyxcbiAgJ0pTT05fQ0FMTF9UWVBFJyxcbiAgJ1BBVENIX01FU1NBR0VfVFlQRScsXG4gICdDT05UUkFDVF9QUk9QT1NBTF9UWVBFJyxcbiAgJ0JMT0NLX0NBTkRJREFURScsXG4gICdQRUVSX0NBTkRJREFURScsXG4gICdTRVNTSU9OX1NUQVJUJyxcbiAgJ0NIQVRfTUVTU0FHRSdcbl0pO1xuXG5mdW5jdGlvbiBjbGFzc2lmeUNvbnN0YW50TmFtZSAobmFtZSkge1xuICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcbiAgaWYgKEJJVENPSU5fUFJJTUlUSVZFX1BSRUZJWEVTLnNvbWUoKHByZWZpeCkgPT4gbmFtZS5zdGFydHNXaXRoKHByZWZpeCkpKSByZXR1cm4gJ2JpdGNvaW4nO1xuICBpZiAoRkFCUklDX09QQ09ERV9QUkVGSVhFUy5zb21lKChwcmVmaXgpID0+IG5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSkgcmV0dXJuICdmYWJyaWMnO1xuICBpZiAoRkFCUklDX09QQ09ERV9FWEFDVC5pbmNsdWRlcyhuYW1lKSkgcmV0dXJuICdmYWJyaWMnO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplT3Bjb2RlTmFtZSAobmFtZSkge1xuICByZXR1cm4gU3RyaW5nKG5hbWUgfHwgJycpLnRyaW0oKS50b1VwcGVyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQdWJrZXlIZXggKHZhbHVlKSB7XG4gIGNvbnN0IHJhdyA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXjB4LywgJycpO1xuICBpZiAoIXJhdykgcmV0dXJuICcnO1xuICBpZiAoL15bMC05YS1mXXs2NH0kLy50ZXN0KHJhdykpIHJldHVybiByYXc7XG4gIGlmICgvXigwMnwwMylbMC05YS1mXXs2NH0kLy50ZXN0KHJhdykpIHJldHVybiByYXcuc2xpY2UoMik7XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdE9wY29kZVJlZ2lzdHJ5ICgpIHtcbiAgY29uc3QgcmVnaXN0cnkgPSB7fTtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbnN0YW50cykpIHtcbiAgICBjb25zdCBmYW1pbHkgPSBjbGFzc2lmeUNvbnN0YW50TmFtZShuYW1lKTtcbiAgICBpZiAoIWZhbWlseSkgY29udGludWU7XG4gICAgcmVnaXN0cnlbbmFtZV0gPSB7XG4gICAgICBuYW1lLFxuICAgICAgZmFtaWx5LFxuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGNvZGU6IHZhbHVlXG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmVnaXN0cnk7XG59XG5cbmZ1bmN0aW9uIGRlZmluZU9wY29kZSAocmVnaXN0cnksIG5hbWUsIGRlZmluaXRpb24gPSB7fSkge1xuICBpZiAoIXJlZ2lzdHJ5IHx8IHR5cGVvZiByZWdpc3RyeSAhPT0gJ29iamVjdCcpIHRocm93IG5ldyBFcnJvcignUmVnaXN0cnkgb2JqZWN0IGlzIHJlcXVpcmVkLicpO1xuICBjb25zdCBvcGNvZGUgPSBub3JtYWxpemVPcGNvZGVOYW1lKG5hbWUpO1xuICBpZiAoIW9wY29kZSkgdGhyb3cgbmV3IEVycm9yKCdPcGNvZGUgbmFtZSBpcyByZXF1aXJlZC4nKTtcblxuICBjb25zdCBuZXh0ID0gT2JqZWN0LmFzc2lnbih7XG4gICAgbmFtZTogb3Bjb2RlLFxuICAgIGZhbWlseTogZGVmaW5pdGlvbi5mYW1pbHkgfHwgJ2ZhYnJpYycsXG4gICAgZW5hYmxlZDogZGVmaW5pdGlvbi5lbmFibGVkICE9PSBmYWxzZSxcbiAgICBjb2RlOiAodHlwZW9mIGRlZmluaXRpb24uY29kZSAhPT0gJ3VuZGVmaW5lZCcpID8gZGVmaW5pdGlvbi5jb2RlIDogbnVsbCxcbiAgICBib2R5OiBkZWZpbml0aW9uLmJvZHkgfHwgbnVsbCxcbiAgICBhdXRob3I6IGRlZmluaXRpb24uYXV0aG9yIHx8IG51bGwsXG4gICAgcG9saWN5OiBkZWZpbml0aW9uLnBvbGljeSB8fCBudWxsXG4gIH0sIGRlZmluaXRpb24sIHsgbmFtZTogb3Bjb2RlIH0pO1xuXG4gIHJlZ2lzdHJ5W29wY29kZV0gPSBuZXh0O1xuICByZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gcGFyc2VPcGNvZGVDb250cmFjdEJvZHkgKGJvZHkgPSAnJykge1xuICBjb25zdCB0ZXh0ID0gU3RyaW5nKGJvZHkgfHwgJycpO1xuICByZXR1cm4gdGV4dFxuICAgIC5zcGxpdCgvXFxyP1xcbi8pXG4gICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpXG4gICAgLmZpbHRlcigobGluZSkgPT4gbGluZSAmJiAhbGluZS5zdGFydHNXaXRoKCcjJykpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlT3Bjb2RlQ29udHJhY3QgKHJlZ2lzdHJ5LCBib2R5ID0gJycpIHtcbiAgY29uc3QgbGluZXMgPSBwYXJzZU9wY29kZUNvbnRyYWN0Qm9keShib2R5KS5tYXAobm9ybWFsaXplT3Bjb2RlTmFtZSk7XG4gIGNvbnN0IHJlc29sdmVkID0gW107XG4gIGNvbnN0IHVua25vd24gPSBbXTtcbiAgZm9yIChjb25zdCBvcCBvZiBsaW5lcykge1xuICAgIGlmIChyZWdpc3RyeSAmJiByZWdpc3RyeVtvcF0gJiYgcmVnaXN0cnlbb3BdLmVuYWJsZWQgIT09IGZhbHNlKSB7XG4gICAgICByZXNvbHZlZC5wdXNoKHJlZ2lzdHJ5W29wXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVua25vd24ucHVzaChvcCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgbGluZXMsIHJlc29sdmVkLCB1bmtub3duIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVEZWZhdWx0T3Bjb2RlUmVnaXN0cnksXG4gIGRlZmluZU9wY29kZSxcbiAgcGFyc2VPcGNvZGVDb250cmFjdEJvZHksXG4gIHJlc29sdmVPcGNvZGVDb250cmFjdCxcbiAgbm9ybWFsaXplT3Bjb2RlTmFtZSxcbiAgbm9ybWFsaXplUHVia2V5SGV4XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/opcodeRegistry.js\n\n}")},"./node_modules/@fabric/core/functions/padDigits.js"(module){"use strict";eval("{\n\nmodule.exports = function padDigits (number, digits) {\n return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9wYWREaWdpdHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9wYWREaWdpdHMuanM/YTE1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFkRGlnaXRzIChudW1iZXIsIGRpZ2l0cykge1xuICByZXR1cm4gQXJyYXkoTWF0aC5tYXgoZGlnaXRzIC0gU3RyaW5nKG51bWJlcikubGVuZ3RoICsgMSwgMCkpLmpvaW4oMCkgKyBudW1iZXI7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/padDigits.js\n\n}")},"./node_modules/@fabric/core/functions/publishedDocumentEnvelope.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * Canonical Fabric `DocumentPublish` **unsigned** envelope bytes + document-offer types.\n *\n * **Legacy unsealed payment binding (do not hash signed gossip frames):**\n * 1. Build **unsigned** AMP bytes via {@link documentPublishEnvelopeBuffer}\n * (signature field **must** be all zeros — this is the binding commitment).\n * 2. HTLC / invoice **preimage** (32 bytes) = `SHA256(those unsigned bytes)`.\n * 3. **`purchaseContentHashHex`** / wire `contentHashHex` = `SHA256(preimage)`.\n *\n * Signing a `DocumentPublish` for Peer gossip changes the signature bytes and\n * **must not** be used as the payment commitment. Prefer\n * {@link module:functions/documentPaymentHash} `resolveDocumentContentHashHex`\n * for sealed vs envelope vs blob.\n *\n * Offer JSON `type` aliases (BOLT12-shaped naming; wire opcodes remain inventory)\n * live here so Hub/Peer do not need a separate module.\n */\n\nconst crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nconst Message = __webpack_require__(/*! ../types/message */ \"./node_modules/@fabric/core/types/message.js\");\nconst fabricCanonicalJson = __webpack_require__(/*! ./fabricCanonicalJson */ \"./node_modules/@fabric/core/functions/fabricCanonicalJson.js\");\n\n/** Canonical JSON `type`: buyer/originator asks for catalog / settlement terms. */\nconst FABRIC_DOCUMENT_OFFER = 'FABRIC_DOCUMENT_OFFER';\n/** Accepted synonym for `FABRIC_DOCUMENT_OFFER`. */\nconst FABRIC_DOCUMENT_OFFER_REQUEST = 'FABRIC_DOCUMENT_OFFER_REQUEST';\n/** Canonical JSON `type`: seller/router replies (items, L1 `contentHash`, optional HTLC hooks). */\nconst FABRIC_DOCUMENT_OFFER_RESPONSE = 'FABRIC_DOCUMENT_OFFER_RESPONSE';\n/** Accepted synonym for `FABRIC_DOCUMENT_OFFER_RESPONSE`. */\nconst FABRIC_DOCUMENT_OFFER_REPLY = 'FABRIC_DOCUMENT_OFFER_REPLY';\n\nconst TO_LEGACY_INVENTORY = Object.freeze({\n [FABRIC_DOCUMENT_OFFER]: 'INVENTORY_REQUEST',\n [FABRIC_DOCUMENT_OFFER_REQUEST]: 'INVENTORY_REQUEST',\n [FABRIC_DOCUMENT_OFFER_RESPONSE]: 'INVENTORY_RESPONSE',\n [FABRIC_DOCUMENT_OFFER_REPLY]: 'INVENTORY_RESPONSE'\n});\n\n/**\n * Map Fabric document-offer envelope `type` strings to legacy handler types (`INVENTORY_*`).\n * @param {unknown} type\n * @returns {string|null}\n */\nfunction fabricDocumentOfferEnvelopeToLegacy (type) {\n if (typeof type !== 'string') return null;\n const t = type.trim();\n return TO_LEGACY_INVENTORY[t] || null;\n}\n\n/**\n * Shallow-clone `message` with `type` set to `INVENTORY_REQUEST` / `INVENTORY_RESPONSE` when a Fabric alias is used.\n * @param {object} message\n * @returns {object}\n */\nfunction normalizeFabricDocumentOfferEnvelopeForHandlers (message) {\n if (!message || typeof message !== 'object') return message;\n const legacy = fabricDocumentOfferEnvelopeToLegacy(message.type);\n if (!legacy) return message;\n return Object.assign({}, message, { type: legacy });\n}\n\n/**\n * True for legacy `INVENTORY_REQUEST` or Fabric document-offer request aliases.\n * @param {unknown} type\n * @returns {boolean}\n */\nfunction isDocumentInventoryRequestType (type) {\n const t = typeof type === 'string' ? type.trim() : '';\n return t === 'INVENTORY_REQUEST' ||\n t === FABRIC_DOCUMENT_OFFER ||\n t === FABRIC_DOCUMENT_OFFER_REQUEST;\n}\n\n/**\n * True for legacy `INVENTORY_RESPONSE` or Fabric document-offer response aliases.\n * @param {unknown} type\n * @returns {boolean}\n */\nfunction isDocumentInventoryResponseType (type) {\n const t = typeof type === 'string' ? type.trim() : '';\n return t === 'INVENTORY_RESPONSE' ||\n t === FABRIC_DOCUMENT_OFFER_RESPONSE ||\n t === FABRIC_DOCUMENT_OFFER_REPLY;\n}\n\n/**\n * Bridge / hub: merge `documents` inventory when inner JSON matches this shape.\n * @param {object|null|undefined} parsed\n * @returns {boolean}\n */\nfunction isDocumentInventoryDocumentsOfferResponse (parsed) {\n return !!(parsed && parsed.object &&\n String(parsed.object.kind || '').trim().toLowerCase() === 'documents' &&\n isDocumentInventoryResponseType(parsed.type));\n}\n\n/**\n * Content-stable fields only — no timestamps / lineage that drift between Hub store\n * and Peer rebuild (`_buildDocumentParsedForPublish`).\n * @param {string} docIdNorm - normalized document id\n * @param {object} parsed - parsed document JSON (e.g. hub `documents/{id}.json`)\n */\nfunction whitelistedDocumentFields (docIdNorm, parsed) {\n const p = parsed || {};\n const id = docIdNorm;\n return {\n contentBase64: p.contentBase64 != null ? String(p.contentBase64) : null,\n id,\n mime: p.mime != null ? String(p.mime) : 'application/octet-stream',\n name: p.name != null ? String(p.name) : 'document',\n revision: p.revision != null ? Number(p.revision) : 1,\n sha256: p.sha256 != null ? String(p.sha256) : id,\n size: p.size != null ? Number(p.size) : 0\n };\n}\n\n/**\n * Assert AMP buffer is an **unsigned** DocumentPublish frame (signature all zeros).\n * Payment binding must never hash a Schnorr-signed gossip frame.\n * @param {Buffer} buf\n * @returns {Buffer} same buffer\n */\nfunction assertUnsignedDocumentPublishEnvelope (buf) {\n if (!Buffer.isBuffer(buf) || buf.length < 208) {\n throw new Error('document publish envelope must be an AMP Message buffer (≥ 208 bytes)');\n }\n const sig = buf.subarray(144, 208);\n if (!sig.equals(Buffer.alloc(64))) {\n throw new Error(\n 'document publish envelope must be unsigned (zero signature); ' +\n 'do not hash signed gossip DocumentPublish bytes for payment binding'\n );\n }\n return buf;\n}\n\n/**\n * Full **unsigned** AMP message bytes (header + body) for DocumentPublish with\n * canonical JSON payload. Signature field is always zeros — safe for payment hash.\n * @param {string} docIdNorm\n * @param {object} parsed\n * @returns {Buffer}\n */\nfunction documentPublishEnvelopeBuffer (docIdNorm, parsed) {\n if (!docIdNorm || !parsed || parsed.contentBase64 == null) {\n throw new Error('document id and contentBase64 required for publish envelope');\n }\n const payload = whitelistedDocumentFields(docIdNorm, parsed);\n const dataStr = fabricCanonicalJson(payload);\n const msg = Message.fromVector(['DocumentPublish', dataStr]);\n // Ensure we never accidentally carry a signature into the commitment.\n if (msg.raw && Buffer.isBuffer(msg.raw.signature)) msg.raw.signature.fill(0);\n const buf = msg.toBuffer();\n return assertUnsignedDocumentPublishEnvelope(buf);\n}\n\n/**\n * SHA256 of the **unsigned** envelope buffer (legacy unsealed HTLC preimage).\n * Rejects signed frames if a raw buffer is passed through {@link assertUnsignedDocumentPublishEnvelope}.\n * @param {string} docIdNorm\n * @param {object} parsed\n * @returns {Buffer}\n */\nfunction inventoryHtlcPreimage32 (docIdNorm, parsed) {\n const buf = documentPublishEnvelopeBuffer(docIdNorm, parsed);\n return crypto.createHash('sha256').update(buf).digest();\n}\n\n/** Hex string matching Hub CreatePurchaseInvoice / ClaimPurchase `contentHash` (envelope mode). */\nfunction purchaseContentHashHex (docIdNorm, parsed) {\n const preimage = inventoryHtlcPreimage32(docIdNorm, parsed);\n return crypto.createHash('sha256').update(preimage).digest('hex');\n}\n\n/**\n * Payment preimage from an already-built AMP buffer — only if unsigned.\n * @param {Buffer} envelopeBuf\n * @returns {Buffer} 32-byte SHA256(envelopeBuf)\n */\nfunction inventoryHtlcPreimage32FromEnvelopeBuffer (envelopeBuf) {\n const buf = assertUnsignedDocumentPublishEnvelope(envelopeBuf);\n return crypto.createHash('sha256').update(buf).digest();\n}\n\nmodule.exports = {\n fabricCanonicalJson,\n whitelistedDocumentFields,\n assertUnsignedDocumentPublishEnvelope,\n documentPublishEnvelopeBuffer,\n inventoryHtlcPreimage32,\n inventoryHtlcPreimage32FromEnvelopeBuffer,\n purchaseContentHashHex,\n FABRIC_DOCUMENT_OFFER,\n FABRIC_DOCUMENT_OFFER_REQUEST,\n FABRIC_DOCUMENT_OFFER_RESPONSE,\n FABRIC_DOCUMENT_OFFER_REPLY,\n TO_LEGACY_INVENTORY,\n fabricDocumentOfferEnvelopeToLegacy,\n normalizeFabricDocumentOfferEnvelopeForHandlers,\n isDocumentInventoryRequestType,\n isDocumentInventoryResponseType,\n isDocumentInventoryDocumentsOfferResponse\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9wdWJsaXNoZWREb2N1bWVudEVudmVsb3BlLmpzIiwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLDRDQUE0QztBQUNoRDtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEO0FBQ0E7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHlEQUFRO0FBQy9CLGdCQUFnQixtQkFBTyxDQUFDLHNFQUFrQjtBQUMxQyw0QkFBNEIsbUJBQU8sQ0FBQywyRkFBdUI7O0FBRTNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsYUFBYSxjQUFjO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVEsb0RBQW9ELEdBQUc7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxPQUFPLE1BQU07QUFDYjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsTUFBTTtBQUN4QjtBQUNBLG9FQUFvRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNERBQTRELDRDQUE0QztBQUN4RyxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS9mdW5jdGlvbnMvcHVibGlzaGVkRG9jdW1lbnRFbnZlbG9wZS5qcz80M2NjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDYW5vbmljYWwgRmFicmljIGBEb2N1bWVudFB1Ymxpc2hgICoqdW5zaWduZWQqKiBlbnZlbG9wZSBieXRlcyArIGRvY3VtZW50LW9mZmVyIHR5cGVzLlxuICpcbiAqICoqTGVnYWN5IHVuc2VhbGVkIHBheW1lbnQgYmluZGluZyAoZG8gbm90IGhhc2ggc2lnbmVkIGdvc3NpcCBmcmFtZXMpOioqXG4gKiAxLiBCdWlsZCAqKnVuc2lnbmVkKiogQU1QIGJ5dGVzIHZpYSB7QGxpbmsgZG9jdW1lbnRQdWJsaXNoRW52ZWxvcGVCdWZmZXJ9XG4gKiAgICAoc2lnbmF0dXJlIGZpZWxkICoqbXVzdCoqIGJlIGFsbCB6ZXJvcyDigJQgdGhpcyBpcyB0aGUgYmluZGluZyBjb21taXRtZW50KS5cbiAqIDIuIEhUTEMgLyBpbnZvaWNlICoqcHJlaW1hZ2UqKiAoMzIgYnl0ZXMpID0gYFNIQTI1Nih0aG9zZSB1bnNpZ25lZCBieXRlcylgLlxuICogMy4gKipgcHVyY2hhc2VDb250ZW50SGFzaEhleGAqKiAvIHdpcmUgYGNvbnRlbnRIYXNoSGV4YCA9IGBTSEEyNTYocHJlaW1hZ2UpYC5cbiAqXG4gKiBTaWduaW5nIGEgYERvY3VtZW50UHVibGlzaGAgZm9yIFBlZXIgZ29zc2lwIGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBieXRlcyBhbmRcbiAqICoqbXVzdCBub3QqKiBiZSB1c2VkIGFzIHRoZSBwYXltZW50IGNvbW1pdG1lbnQuIFByZWZlclxuICoge0BsaW5rIG1vZHVsZTpmdW5jdGlvbnMvZG9jdW1lbnRQYXltZW50SGFzaH0gYHJlc29sdmVEb2N1bWVudENvbnRlbnRIYXNoSGV4YFxuICogZm9yIHNlYWxlZCB2cyBlbnZlbG9wZSB2cyBibG9iLlxuICpcbiAqIE9mZmVyIEpTT04gYHR5cGVgIGFsaWFzZXMgKEJPTFQxMi1zaGFwZWQgbmFtaW5nOyB3aXJlIG9wY29kZXMgcmVtYWluIGludmVudG9yeSlcbiAqIGxpdmUgaGVyZSBzbyBIdWIvUGVlciBkbyBub3QgbmVlZCBhIHNlcGFyYXRlIG1vZHVsZS5cbiAqL1xuXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbmNvbnN0IE1lc3NhZ2UgPSByZXF1aXJlKCcuLi90eXBlcy9tZXNzYWdlJyk7XG5jb25zdCBmYWJyaWNDYW5vbmljYWxKc29uID0gcmVxdWlyZSgnLi9mYWJyaWNDYW5vbmljYWxKc29uJyk7XG5cbi8qKiBDYW5vbmljYWwgSlNPTiBgdHlwZWA6IGJ1eWVyL29yaWdpbmF0b3IgYXNrcyBmb3IgY2F0YWxvZyAvIHNldHRsZW1lbnQgdGVybXMuICovXG5jb25zdCBGQUJSSUNfRE9DVU1FTlRfT0ZGRVIgPSAnRkFCUklDX0RPQ1VNRU5UX09GRkVSJztcbi8qKiBBY2NlcHRlZCBzeW5vbnltIGZvciBgRkFCUklDX0RPQ1VNRU5UX09GRkVSYC4gKi9cbmNvbnN0IEZBQlJJQ19ET0NVTUVOVF9PRkZFUl9SRVFVRVNUID0gJ0ZBQlJJQ19ET0NVTUVOVF9PRkZFUl9SRVFVRVNUJztcbi8qKiBDYW5vbmljYWwgSlNPTiBgdHlwZWA6IHNlbGxlci9yb3V0ZXIgcmVwbGllcyAoaXRlbXMsIEwxIGBjb250ZW50SGFzaGAsIG9wdGlvbmFsIEhUTEMgaG9va3MpLiAqL1xuY29uc3QgRkFCUklDX0RPQ1VNRU5UX09GRkVSX1JFU1BPTlNFID0gJ0ZBQlJJQ19ET0NVTUVOVF9PRkZFUl9SRVNQT05TRSc7XG4vKiogQWNjZXB0ZWQgc3lub255bSBmb3IgYEZBQlJJQ19ET0NVTUVOVF9PRkZFUl9SRVNQT05TRWAuICovXG5jb25zdCBGQUJSSUNfRE9DVU1FTlRfT0ZGRVJfUkVQTFkgPSAnRkFCUklDX0RPQ1VNRU5UX09GRkVSX1JFUExZJztcblxuY29uc3QgVE9fTEVHQUNZX0lOVkVOVE9SWSA9IE9iamVjdC5mcmVlemUoe1xuICBbRkFCUklDX0RPQ1VNRU5UX09GRkVSXTogJ0lOVkVOVE9SWV9SRVFVRVNUJyxcbiAgW0ZBQlJJQ19ET0NVTUVOVF9PRkZFUl9SRVFVRVNUXTogJ0lOVkVOVE9SWV9SRVFVRVNUJyxcbiAgW0ZBQlJJQ19ET0NVTUVOVF9PRkZFUl9SRVNQT05TRV06ICdJTlZFTlRPUllfUkVTUE9OU0UnLFxuICBbRkFCUklDX0RPQ1VNRU5UX09GRkVSX1JFUExZXTogJ0lOVkVOVE9SWV9SRVNQT05TRSdcbn0pO1xuXG4vKipcbiAqIE1hcCBGYWJyaWMgZG9jdW1lbnQtb2ZmZXIgZW52ZWxvcGUgYHR5cGVgIHN0cmluZ3MgdG8gbGVnYWN5IGhhbmRsZXIgdHlwZXMgKGBJTlZFTlRPUllfKmApLlxuICogQHBhcmFtIHt1bmtub3dufSB0eXBlXG4gKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9XG4gKi9cbmZ1bmN0aW9uIGZhYnJpY0RvY3VtZW50T2ZmZXJFbnZlbG9wZVRvTGVnYWN5ICh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuICBjb25zdCB0ID0gdHlwZS50cmltKCk7XG4gIHJldHVybiBUT19MRUdBQ1lfSU5WRU5UT1JZW3RdIHx8IG51bGw7XG59XG5cbi8qKlxuICogU2hhbGxvdy1jbG9uZSBgbWVzc2FnZWAgd2l0aCBgdHlwZWAgc2V0IHRvIGBJTlZFTlRPUllfUkVRVUVTVGAgLyBgSU5WRU5UT1JZX1JFU1BPTlNFYCB3aGVuIGEgRmFicmljIGFsaWFzIGlzIHVzZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gbWVzc2FnZVxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRmFicmljRG9jdW1lbnRPZmZlckVudmVsb3BlRm9ySGFuZGxlcnMgKG1lc3NhZ2UpIHtcbiAgaWYgKCFtZXNzYWdlIHx8IHR5cGVvZiBtZXNzYWdlICE9PSAnb2JqZWN0JykgcmV0dXJuIG1lc3NhZ2U7XG4gIGNvbnN0IGxlZ2FjeSA9IGZhYnJpY0RvY3VtZW50T2ZmZXJFbnZlbG9wZVRvTGVnYWN5KG1lc3NhZ2UudHlwZSk7XG4gIGlmICghbGVnYWN5KSByZXR1cm4gbWVzc2FnZTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG1lc3NhZ2UsIHsgdHlwZTogbGVnYWN5IH0pO1xufVxuXG4vKipcbiAqIFRydWUgZm9yIGxlZ2FjeSBgSU5WRU5UT1JZX1JFUVVFU1RgIG9yIEZhYnJpYyBkb2N1bWVudC1vZmZlciByZXF1ZXN0IGFsaWFzZXMuXG4gKiBAcGFyYW0ge3Vua25vd259IHR5cGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0RvY3VtZW50SW52ZW50b3J5UmVxdWVzdFR5cGUgKHR5cGUpIHtcbiAgY29uc3QgdCA9IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyA/IHR5cGUudHJpbSgpIDogJyc7XG4gIHJldHVybiB0ID09PSAnSU5WRU5UT1JZX1JFUVVFU1QnIHx8XG4gICAgdCA9PT0gRkFCUklDX0RPQ1VNRU5UX09GRkVSIHx8XG4gICAgdCA9PT0gRkFCUklDX0RPQ1VNRU5UX09GRkVSX1JFUVVFU1Q7XG59XG5cbi8qKlxuICogVHJ1ZSBmb3IgbGVnYWN5IGBJTlZFTlRPUllfUkVTUE9OU0VgIG9yIEZhYnJpYyBkb2N1bWVudC1vZmZlciByZXNwb25zZSBhbGlhc2VzLlxuICogQHBhcmFtIHt1bmtub3dufSB0eXBlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNEb2N1bWVudEludmVudG9yeVJlc3BvbnNlVHlwZSAodHlwZSkge1xuICBjb25zdCB0ID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnID8gdHlwZS50cmltKCkgOiAnJztcbiAgcmV0dXJuIHQgPT09ICdJTlZFTlRPUllfUkVTUE9OU0UnIHx8XG4gICAgdCA9PT0gRkFCUklDX0RPQ1VNRU5UX09GRkVSX1JFU1BPTlNFIHx8XG4gICAgdCA9PT0gRkFCUklDX0RPQ1VNRU5UX09GRkVSX1JFUExZO1xufVxuXG4vKipcbiAqIEJyaWRnZSAvIGh1YjogbWVyZ2UgYGRvY3VtZW50c2AgaW52ZW50b3J5IHdoZW4gaW5uZXIgSlNPTiBtYXRjaGVzIHRoaXMgc2hhcGUuXG4gKiBAcGFyYW0ge29iamVjdHxudWxsfHVuZGVmaW5lZH0gcGFyc2VkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNEb2N1bWVudEludmVudG9yeURvY3VtZW50c09mZmVyUmVzcG9uc2UgKHBhcnNlZCkge1xuICByZXR1cm4gISEocGFyc2VkICYmIHBhcnNlZC5vYmplY3QgJiZcbiAgICBTdHJpbmcocGFyc2VkLm9iamVjdC5raW5kIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2RvY3VtZW50cycgJiZcbiAgICBpc0RvY3VtZW50SW52ZW50b3J5UmVzcG9uc2VUeXBlKHBhcnNlZC50eXBlKSk7XG59XG5cbi8qKlxuICogQ29udGVudC1zdGFibGUgZmllbGRzIG9ubHkg4oCUIG5vIHRpbWVzdGFtcHMgLyBsaW5lYWdlIHRoYXQgZHJpZnQgYmV0d2VlbiBIdWIgc3RvcmVcbiAqIGFuZCBQZWVyIHJlYnVpbGQgKGBfYnVpbGREb2N1bWVudFBhcnNlZEZvclB1Ymxpc2hgKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb2NJZE5vcm0gLSBub3JtYWxpemVkIGRvY3VtZW50IGlkXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyc2VkIC0gcGFyc2VkIGRvY3VtZW50IEpTT04gKGUuZy4gaHViIGBkb2N1bWVudHMve2lkfS5qc29uYClcbiAqL1xuZnVuY3Rpb24gd2hpdGVsaXN0ZWREb2N1bWVudEZpZWxkcyAoZG9jSWROb3JtLCBwYXJzZWQpIHtcbiAgY29uc3QgcCA9IHBhcnNlZCB8fCB7fTtcbiAgY29uc3QgaWQgPSBkb2NJZE5vcm07XG4gIHJldHVybiB7XG4gICAgY29udGVudEJhc2U2NDogcC5jb250ZW50QmFzZTY0ICE9IG51bGwgPyBTdHJpbmcocC5jb250ZW50QmFzZTY0KSA6IG51bGwsXG4gICAgaWQsXG4gICAgbWltZTogcC5taW1lICE9IG51bGwgPyBTdHJpbmcocC5taW1lKSA6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxuICAgIG5hbWU6IHAubmFtZSAhPSBudWxsID8gU3RyaW5nKHAubmFtZSkgOiAnZG9jdW1lbnQnLFxuICAgIHJldmlzaW9uOiBwLnJldmlzaW9uICE9IG51bGwgPyBOdW1iZXIocC5yZXZpc2lvbikgOiAxLFxuICAgIHNoYTI1NjogcC5zaGEyNTYgIT0gbnVsbCA/IFN0cmluZyhwLnNoYTI1NikgOiBpZCxcbiAgICBzaXplOiBwLnNpemUgIT0gbnVsbCA/IE51bWJlcihwLnNpemUpIDogMFxuICB9O1xufVxuXG4vKipcbiAqIEFzc2VydCBBTVAgYnVmZmVyIGlzIGFuICoqdW5zaWduZWQqKiBEb2N1bWVudFB1Ymxpc2ggZnJhbWUgKHNpZ25hdHVyZSBhbGwgemVyb3MpLlxuICogUGF5bWVudCBiaW5kaW5nIG11c3QgbmV2ZXIgaGFzaCBhIFNjaG5vcnItc2lnbmVkIGdvc3NpcCBmcmFtZS5cbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IHNhbWUgYnVmZmVyXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFVuc2lnbmVkRG9jdW1lbnRQdWJsaXNoRW52ZWxvcGUgKGJ1Zikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpIHx8IGJ1Zi5sZW5ndGggPCAyMDgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RvY3VtZW50IHB1Ymxpc2ggZW52ZWxvcGUgbXVzdCBiZSBhbiBBTVAgTWVzc2FnZSBidWZmZXIgKOKJpSAyMDggYnl0ZXMpJyk7XG4gIH1cbiAgY29uc3Qgc2lnID0gYnVmLnN1YmFycmF5KDE0NCwgMjA4KTtcbiAgaWYgKCFzaWcuZXF1YWxzKEJ1ZmZlci5hbGxvYyg2NCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ2RvY3VtZW50IHB1Ymxpc2ggZW52ZWxvcGUgbXVzdCBiZSB1bnNpZ25lZCAoemVybyBzaWduYXR1cmUpOyAnICtcbiAgICAgICdkbyBub3QgaGFzaCBzaWduZWQgZ29zc2lwIERvY3VtZW50UHVibGlzaCBieXRlcyBmb3IgcGF5bWVudCBiaW5kaW5nJ1xuICAgICk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuLyoqXG4gKiBGdWxsICoqdW5zaWduZWQqKiBBTVAgbWVzc2FnZSBieXRlcyAoaGVhZGVyICsgYm9keSkgZm9yIERvY3VtZW50UHVibGlzaCB3aXRoXG4gKiBjYW5vbmljYWwgSlNPTiBwYXlsb2FkLiBTaWduYXR1cmUgZmllbGQgaXMgYWx3YXlzIHplcm9zIOKAlCBzYWZlIGZvciBwYXltZW50IGhhc2guXG4gKiBAcGFyYW0ge3N0cmluZ30gZG9jSWROb3JtXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyc2VkXG4gKiBAcmV0dXJucyB7QnVmZmVyfVxuICovXG5mdW5jdGlvbiBkb2N1bWVudFB1Ymxpc2hFbnZlbG9wZUJ1ZmZlciAoZG9jSWROb3JtLCBwYXJzZWQpIHtcbiAgaWYgKCFkb2NJZE5vcm0gfHwgIXBhcnNlZCB8fCBwYXJzZWQuY29udGVudEJhc2U2NCA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkb2N1bWVudCBpZCBhbmQgY29udGVudEJhc2U2NCByZXF1aXJlZCBmb3IgcHVibGlzaCBlbnZlbG9wZScpO1xuICB9XG4gIGNvbnN0IHBheWxvYWQgPSB3aGl0ZWxpc3RlZERvY3VtZW50RmllbGRzKGRvY0lkTm9ybSwgcGFyc2VkKTtcbiAgY29uc3QgZGF0YVN0ciA9IGZhYnJpY0Nhbm9uaWNhbEpzb24ocGF5bG9hZCk7XG4gIGNvbnN0IG1zZyA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ0RvY3VtZW50UHVibGlzaCcsIGRhdGFTdHJdKTtcbiAgLy8gRW5zdXJlIHdlIG5ldmVyIGFjY2lkZW50YWxseSBjYXJyeSBhIHNpZ25hdHVyZSBpbnRvIHRoZSBjb21taXRtZW50LlxuICBpZiAobXNnLnJhdyAmJiBCdWZmZXIuaXNCdWZmZXIobXNnLnJhdy5zaWduYXR1cmUpKSBtc2cucmF3LnNpZ25hdHVyZS5maWxsKDApO1xuICBjb25zdCBidWYgPSBtc2cudG9CdWZmZXIoKTtcbiAgcmV0dXJuIGFzc2VydFVuc2lnbmVkRG9jdW1lbnRQdWJsaXNoRW52ZWxvcGUoYnVmKTtcbn1cblxuLyoqXG4gKiBTSEEyNTYgb2YgdGhlICoqdW5zaWduZWQqKiBlbnZlbG9wZSBidWZmZXIgKGxlZ2FjeSB1bnNlYWxlZCBIVExDIHByZWltYWdlKS5cbiAqIFJlamVjdHMgc2lnbmVkIGZyYW1lcyBpZiBhIHJhdyBidWZmZXIgaXMgcGFzc2VkIHRocm91Z2gge0BsaW5rIGFzc2VydFVuc2lnbmVkRG9jdW1lbnRQdWJsaXNoRW52ZWxvcGV9LlxuICogQHBhcmFtIHtzdHJpbmd9IGRvY0lkTm9ybVxuICogQHBhcmFtIHtvYmplY3R9IHBhcnNlZFxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZnVuY3Rpb24gaW52ZW50b3J5SHRsY1ByZWltYWdlMzIgKGRvY0lkTm9ybSwgcGFyc2VkKSB7XG4gIGNvbnN0IGJ1ZiA9IGRvY3VtZW50UHVibGlzaEVudmVsb3BlQnVmZmVyKGRvY0lkTm9ybSwgcGFyc2VkKTtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoYnVmKS5kaWdlc3QoKTtcbn1cblxuLyoqIEhleCBzdHJpbmcgbWF0Y2hpbmcgSHViIENyZWF0ZVB1cmNoYXNlSW52b2ljZSAvIENsYWltUHVyY2hhc2UgYGNvbnRlbnRIYXNoYCAoZW52ZWxvcGUgbW9kZSkuICovXG5mdW5jdGlvbiBwdXJjaGFzZUNvbnRlbnRIYXNoSGV4IChkb2NJZE5vcm0sIHBhcnNlZCkge1xuICBjb25zdCBwcmVpbWFnZSA9IGludmVudG9yeUh0bGNQcmVpbWFnZTMyKGRvY0lkTm9ybSwgcGFyc2VkKTtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUocHJlaW1hZ2UpLmRpZ2VzdCgnaGV4Jyk7XG59XG5cbi8qKlxuICogUGF5bWVudCBwcmVpbWFnZSBmcm9tIGFuIGFscmVhZHktYnVpbHQgQU1QIGJ1ZmZlciDigJQgb25seSBpZiB1bnNpZ25lZC5cbiAqIEBwYXJhbSB7QnVmZmVyfSBlbnZlbG9wZUJ1ZlxuICogQHJldHVybnMge0J1ZmZlcn0gMzItYnl0ZSBTSEEyNTYoZW52ZWxvcGVCdWYpXG4gKi9cbmZ1bmN0aW9uIGludmVudG9yeUh0bGNQcmVpbWFnZTMyRnJvbUVudmVsb3BlQnVmZmVyIChlbnZlbG9wZUJ1Zikge1xuICBjb25zdCBidWYgPSBhc3NlcnRVbnNpZ25lZERvY3VtZW50UHVibGlzaEVudmVsb3BlKGVudmVsb3BlQnVmKTtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoYnVmKS5kaWdlc3QoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZhYnJpY0Nhbm9uaWNhbEpzb24sXG4gIHdoaXRlbGlzdGVkRG9jdW1lbnRGaWVsZHMsXG4gIGFzc2VydFVuc2lnbmVkRG9jdW1lbnRQdWJsaXNoRW52ZWxvcGUsXG4gIGRvY3VtZW50UHVibGlzaEVudmVsb3BlQnVmZmVyLFxuICBpbnZlbnRvcnlIdGxjUHJlaW1hZ2UzMixcbiAgaW52ZW50b3J5SHRsY1ByZWltYWdlMzJGcm9tRW52ZWxvcGVCdWZmZXIsXG4gIHB1cmNoYXNlQ29udGVudEhhc2hIZXgsXG4gIEZBQlJJQ19ET0NVTUVOVF9PRkZFUixcbiAgRkFCUklDX0RPQ1VNRU5UX09GRkVSX1JFUVVFU1QsXG4gIEZBQlJJQ19ET0NVTUVOVF9PRkZFUl9SRVNQT05TRSxcbiAgRkFCUklDX0RPQ1VNRU5UX09GRkVSX1JFUExZLFxuICBUT19MRUdBQ1lfSU5WRU5UT1JZLFxuICBmYWJyaWNEb2N1bWVudE9mZmVyRW52ZWxvcGVUb0xlZ2FjeSxcbiAgbm9ybWFsaXplRmFicmljRG9jdW1lbnRPZmZlckVudmVsb3BlRm9ySGFuZGxlcnMsXG4gIGlzRG9jdW1lbnRJbnZlbnRvcnlSZXF1ZXN0VHlwZSxcbiAgaXNEb2N1bWVudEludmVudG9yeVJlc3BvbnNlVHlwZSxcbiAgaXNEb2N1bWVudEludmVudG9yeURvY3VtZW50c09mZmVyUmVzcG9uc2Vcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/publishedDocumentEnvelope.js\n\n}")},"./node_modules/@fabric/core/functions/sidechainState.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * Sidechain document helpers (distributed execution) — shared mutual state as ordered\n * snapshots under contract rules. **Not a Fabric type**; prefer this module over any\n * legacy `types/statechain` path.\n *\n * Hub often says “sidechain state”: a logical JSON document `{ version, clock, content }`\n * advanced by RFC6902 patches, authorized by federation (or operator policy), and sealed\n * into L1-tied epoch digests with full snapshots for reorg rewind. Optional path policy\n * encodes the contract’s allowed mutations.\n *\n * @module functions/sidechainState\n * @see docs/DISTRIBUTED_EXECUTION.md\n * @see snippets/sidechains.md\n */\n\nconst crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nconst { applyPatch, validate } = __webpack_require__(/*! fast-json-patch */ \"./node_modules/fast-json-patch/index.mjs\");\nconst fabricCanonicalJson = __webpack_require__(/*! ./fabricCanonicalJson */ \"./node_modules/@fabric/core/functions/fabricCanonicalJson.js\");\nconst { jsonSafe, stableStringify } = fabricCanonicalJson;\nconst {\n signingStringForBeaconEpoch,\n verifyFederationWitnessOnMessage\n} = __webpack_require__(/*! ./beaconFederationSigning */ \"./node_modules/@fabric/core/functions/beaconFederationSigning.js\");\n\nconst SIDECHAIN_STATE_PATH = 'sidechain/STATE';\nconst SIDECHAIN_SNAPSHOTS_PATH = 'sidechain/SNAPSHOTS';\nconst SIDECHAIN_JOURNAL_PATH = 'sidechain/JOURNAL';\nconst SIDECHAIN_PATCH_KIND = 'SidechainStatePatch';\n/** Manifest / GenericMessage / activity type name (not yet a dedicated outer opcode). */\nconst SIDECHAIN_STATE_PATCH_TYPE = 'SIDECHAIN_STATE_PATCH';\n\n/**\n * @typedef {{ version?: number, clock: number, content: object }} StatechainState\n * @typedef {{\n * maxOps?: number,\n * maxPathDepth?: number,\n * allowedPathPrefixes?: string[],\n * deniedPathPrefixes?: string[],\n * allowEmptyPolicy?: boolean\n * }} StatechainPathPolicy\n */\n\nfunction stablePatchBody (basisClock, basisDigest, patches) {\n return stableStringify({\n version: 1,\n kind: SIDECHAIN_PATCH_KIND,\n basisClock: Number(basisClock),\n basisDigest: String(basisDigest || ''),\n patches: jsonSafe(patches)\n });\n}\n\n/**\n * UTF-8 string federation members sign (same bytes for all validators).\n * @param {{ basisClock: number, basisDigest: string, patches: object[] }} proposal\n * @returns {string}\n */\nfunction signingStringForSidechainStatePatch (proposal) {\n return stablePatchBody(proposal.basisClock, proposal.basisDigest, proposal.patches);\n}\n\n/**\n * @param {{ basisClock: number, basisDigest: string, patches: object[] }} proposal\n * @returns {string}\n */\nfunction patchCommitmentDigestHex (proposal) {\n const s = signingStringForSidechainStatePatch(proposal);\n return crypto.createHash('sha256').update(Buffer.from(s, 'utf8')).digest('hex');\n}\n\n/** @returns {StatechainState} */\nfunction createInitialState () {\n return { version: 1, clock: 0, content: {} };\n}\n\n/**\n * Digest of the full statechain document (public commitment).\n * @param {StatechainState} state\n * @returns {string}\n */\nfunction stateDigest (state) {\n const s = stableStringify({\n version: state.version != null ? Number(state.version) : 1,\n clock: Number(state.clock) || 0,\n content: jsonSafe(state.content || {})\n });\n return crypto.createHash('sha256').update(Buffer.from(s, 'utf8')).digest('hex');\n}\n\n/**\n * Normalize optional contract path policy from a distributed manifest or settings.\n * @param {object|null|undefined} raw\n * @returns {StatechainPathPolicy|null}\n */\nfunction parseStatechainPathPolicy (raw) {\n if (!raw || typeof raw !== 'object') return null;\n const maxOps = raw.maxOps != null ? Math.max(1, Number(raw.maxOps) || 1) : undefined;\n const maxPathDepth = raw.maxPathDepth != null ? Math.max(1, Number(raw.maxPathDepth) || 1) : undefined;\n const allowedPathPrefixes = Array.isArray(raw.allowedPathPrefixes)\n ? raw.allowedPathPrefixes.filter((p) => typeof p === 'string' && p.length)\n : undefined;\n const deniedPathPrefixes = Array.isArray(raw.deniedPathPrefixes)\n ? raw.deniedPathPrefixes.filter((p) => typeof p === 'string' && p.length)\n : undefined;\n return {\n maxOps,\n maxPathDepth,\n allowedPathPrefixes,\n deniedPathPrefixes,\n allowEmptyPolicy: raw.allowEmptyPolicy !== false\n };\n}\n\n/**\n * Enforce contract path rules on an RFC6902 patch list (before apply).\n * @param {object[]} patches\n * @param {StatechainPathPolicy|null|undefined} policy\n * @returns {{ ok: boolean, error?: string }}\n */\nfunction validatePatchesAgainstPolicy (patches, policy) {\n if (!Array.isArray(patches) || !patches.length) {\n return { ok: false, error: 'patches must be a non-empty array' };\n }\n if (!policy) return { ok: true };\n\n if (policy.maxOps != null && patches.length > policy.maxOps) {\n return { ok: false, error: `patches exceed maxOps (${policy.maxOps})` };\n }\n\n const allowed = policy.allowedPathPrefixes;\n const denied = policy.deniedPathPrefixes || [];\n const maxDepth = policy.maxPathDepth;\n\n /**\n * @param {string} path\n * @param {string} label\n * @returns {{ ok: boolean, error?: string }}\n */\n function checkPath (path, label) {\n if (!path.startsWith('/')) {\n return { ok: false, error: `invalid patch ${label}: ${path || '(empty)'}` };\n }\n const depth = path === '/' ? 0 : path.split('/').length - 1;\n if (maxDepth != null && depth > maxDepth) {\n return { ok: false, error: `${label} depth exceeds maxPathDepth (${maxDepth}): ${path}` };\n }\n if (denied.some((prefix) => _pathMatchesPrefix(path, prefix))) {\n return { ok: false, error: `${label} denied by policy: ${path}` };\n }\n if (Array.isArray(allowed) && allowed.length) {\n const okPath = allowed.some((prefix) => _pathMatchesPrefix(path, prefix));\n if (!okPath) {\n return { ok: false, error: `${label} not allowed by policy: ${path}` };\n }\n }\n return { ok: true };\n }\n\n for (const op of patches) {\n if (!op || typeof op !== 'object') {\n return { ok: false, error: 'invalid patch op' };\n }\n const path = typeof op.path === 'string' ? op.path : '';\n const pathCheck = checkPath(path, 'path');\n if (!pathCheck.ok) return pathCheck;\n const kind = String(op.op || '').toLowerCase();\n if (kind === 'copy' || kind === 'move') {\n const from = typeof op.from === 'string' ? op.from : '';\n const fromCheck = checkPath(from, 'from');\n if (!fromCheck.ok) return fromCheck;\n }\n }\n return { ok: true };\n}\n\n/** @private */\nfunction _pathMatchesPrefix (path, prefix) {\n if (!prefix || typeof prefix !== 'string') return false;\n if (prefix === '/') return true;\n return path === prefix || path.startsWith(prefix + '/');\n}\n\n/**\n * @param {StatechainState} state\n * @param {object[]} patches RFC6902 operations on `state.content`\n * @param {StatechainPathPolicy|null|undefined} [policy]\n * @returns {{ ok: boolean, state?: StatechainState, error?: string, newDigest?: string, basisDigest?: string }}\n */\nfunction applyPatchesToState (state, patches, policy) {\n if (!Array.isArray(patches) || !patches.length) {\n return { ok: false, error: 'patches must be a non-empty array' };\n }\n const verr = validate(patches);\n if (verr) {\n return { ok: false, error: verr.message || String(verr) };\n }\n const policyCheck = validatePatchesAgainstPolicy(patches, policy);\n if (!policyCheck.ok) return policyCheck;\n\n const basisDigest = stateDigest(state);\n const next = {\n version: state.version != null ? Number(state.version) : 1,\n clock: Number(state.clock) || 0,\n content: JSON.parse(JSON.stringify(state.content || {}))\n };\n try {\n applyPatch(next.content, patches, true, true);\n } catch (e) {\n return { ok: false, error: e && e.message ? e.message : String(e) };\n }\n next.clock = next.clock + 1;\n return { ok: true, state: next, newDigest: stateDigest(next), basisDigest };\n}\n\nfunction _cloneState (state) {\n return {\n version: state.version != null ? Number(state.version) : 1,\n clock: Number(state.clock) || 0,\n content: JSON.parse(JSON.stringify(state.content && typeof state.content === 'object' ? state.content : {}))\n };\n}\n\n/**\n * Sanitize a contract / namespace id for store paths (hex-ish Fabric Actor ids).\n * @param {string} contractId\n * @returns {string}\n */\nfunction normalizeContractId (contractId) {\n const id = String(contractId || '').trim().toLowerCase();\n if (\n !id ||\n id.includes('\\0') ||\n id.includes('/') ||\n id.includes('\\\\') ||\n id.includes('..') ||\n id.length > 128\n ) {\n throw new Error('invalid contractId for contract Statechain');\n }\n return id;\n}\n\n/**\n * Store paths for a Contract-published contract Statechain (same layout as Hub root).\n * @param {string} contractId\n * @returns {{ contractId: string, base: string, state: string, snapshots: string, journal: string }}\n */\nfunction storePathsForContract (contractId) {\n const id = normalizeContractId(contractId);\n const base = `sidechains/${id}`;\n return {\n contractId: id,\n base,\n state: `${base}/STATE`,\n snapshots: `${base}/SNAPSHOTS`,\n journal: `${base}/JOURNAL`\n };\n}\n\n/**\n * JSON Pointer on the **parent** Statechain content where the child head is sealed.\n * @param {string} contractId\n * @returns {string}\n */\nfunction parentSealPath (contractId) {\n return `/namespaces/${normalizeContractId(contractId)}`;\n}\n\n/**\n * Compact public head for parent seal / Beacon contracts root sync.\n * @param {string} contractId\n * @param {StatechainState} state\n * @param {{ name?: string|null, parentContractId?: string|null }} [meta]\n * @returns {{ contractId: string, clock: number, stateDigest: string, name: string|null, parentContractId: string|null }}\n */\nfunction namespaceHeadFromState (contractId, state, meta = {}) {\n const id = normalizeContractId(contractId);\n return {\n contractId: id,\n clock: Number(state && state.clock) || 0,\n stateDigest: stateDigest(state || createInitialState()),\n name: meta.name != null ? String(meta.name) : null,\n parentContractId: meta.parentContractId != null ? String(meta.parentContractId) : null\n };\n}\n\n/**\n * RFC6902 patches to publish / replace a namespace head under `/namespaces/`.\n * @param {object|null|undefined} existingContent parent content\n * @param {string} contractId\n * @param {object} head from {@link namespaceHeadFromState}\n * @returns {object[]}\n */\nfunction patchesForNamespaceHead (existingContent, contractId, head) {\n const id = normalizeContractId(contractId);\n const path = parentSealPath(id);\n const key = 'namespaces';\n const namespaces = existingContent && existingContent[key] && typeof existingContent[key] === 'object'\n ? existingContent[key]\n : null;\n const prev = namespaces && Object.prototype.hasOwnProperty.call(namespaces, id)\n ? namespaces[id]\n : null;\n if (prev && prev.stateDigest && head && head.stateDigest && prev.stateDigest === head.stateDigest &&\n Number(prev.clock) === Number(head.clock)) {\n return [];\n }\n if (!namespaces) {\n return [{\n op: 'add',\n path: `/${key}`,\n value: { [id]: jsonSafe(head) }\n }];\n }\n if (prev) {\n return [{ op: 'replace', path, value: jsonSafe(head) }];\n }\n return [{ op: 'add', path, value: jsonSafe(head) }];\n}\n\nfunction loadStateAt (fs, statePath) {\n if (!fs || typeof fs.readFile !== 'function') return createInitialState();\n const path = statePath || SIDECHAIN_STATE_PATH;\n try {\n const raw = fs.readFile(path);\n if (!raw) return createInitialState();\n // Filesystem may return string or Buffer (same as loadSnapshotsDoc / loadJournalDoc).\n const parsed = typeof raw === 'string'\n ? JSON.parse(raw)\n : (Buffer.isBuffer(raw)\n ? JSON.parse(raw.toString('utf8'))\n : raw);\n if (!parsed || typeof parsed !== 'object') return createInitialState();\n const clock = Number(parsed.clock) || 0;\n const content = parsed.content && typeof parsed.content === 'object' ? parsed.content : {};\n return { version: Number(parsed.version) || 1, clock, content };\n } catch (_) {\n return createInitialState();\n }\n}\n\nfunction loadState (fs) {\n return loadStateAt(fs, SIDECHAIN_STATE_PATH);\n}\n\nasync function persistStateAt (fs, state, statePath) {\n if (!fs || typeof fs.publish !== 'function') return;\n const path = statePath || SIDECHAIN_STATE_PATH;\n const doc = {\n version: state.version != null ? Number(state.version) : 1,\n clock: Number(state.clock) || 0,\n content: jsonSafe(state.content || {})\n };\n await fs.publish(path, doc);\n}\n\nasync function persistState (fs, state) {\n return persistStateAt(fs, state, SIDECHAIN_STATE_PATH);\n}\n\n/**\n * Ensure a contract Statechain document exists for an accepted CONTRACT_PUBLISH id.\n * @param {*} fs\n * @param {string} contractId\n * @returns {Promise<{ paths: object, state: StatechainState, created: boolean }>}\n */\nasync function ensureContractStatechain (fs, contractId) {\n const paths = storePathsForContract(contractId);\n let existed = false;\n if (fs && typeof fs.readFile === 'function') {\n try {\n existed = !!fs.readFile(paths.state);\n } catch (_) {\n existed = false;\n }\n }\n const state = loadStateAt(fs, paths.state);\n if (!existed) {\n await persistStateAt(fs, state, paths.state);\n }\n return { paths, state, created: !existed };\n}\n\nfunction loadSnapshotsDoc (fs) {\n if (!fs || typeof fs.readFile !== 'function') return { version: 1, byClock: {} };\n try {\n const raw = fs.readFile(SIDECHAIN_SNAPSHOTS_PATH);\n if (!raw) return { version: 1, byClock: {} };\n const parsed = typeof raw === 'string' ? JSON.parse(raw) : JSON.parse(raw.toString('utf8'));\n if (!parsed || typeof parsed !== 'object') return { version: 1, byClock: {} };\n const byClock = parsed.byClock && typeof parsed.byClock === 'object' ? parsed.byClock : {};\n return { version: 1, byClock };\n } catch (_) {\n return { version: 1, byClock: {} };\n }\n}\n\nfunction loadSnapshotForBeaconClock (fs, beaconClock) {\n const doc = loadSnapshotsDoc(fs);\n const key = String(beaconClock);\n const s = doc.byClock[key];\n if (!s || typeof s !== 'object') return null;\n return {\n version: Number(s.version) || 1,\n clock: Number(s.clock) || 0,\n content: s.content && typeof s.content === 'object' ? JSON.parse(JSON.stringify(s.content)) : {}\n };\n}\n\nfunction saveSnapshotForBeaconClockSync (fs, beaconClock, state) {\n if (!fs || typeof fs.writeFile !== 'function') return false;\n const key = String(beaconClock);\n if (!key || key === 'undefined') return false;\n const doc = loadSnapshotsDoc(fs);\n doc.byClock[key] = jsonSafe(_cloneState(state));\n return fs.writeFile(SIDECHAIN_SNAPSHOTS_PATH, JSON.stringify(doc, null, 2));\n}\n\nfunction pruneSnapshotsForRemovedBeaconClocksSync (fs, removedBeaconClocks) {\n if (!fs || typeof fs.writeFile !== 'function') return false;\n if (!Array.isArray(removedBeaconClocks) || !removedBeaconClocks.length) return true;\n const doc = loadSnapshotsDoc(fs);\n for (const c of removedBeaconClocks) {\n const k = String(c);\n if (doc.byClock[k]) delete doc.byClock[k];\n }\n return fs.writeFile(SIDECHAIN_SNAPSHOTS_PATH, JSON.stringify(doc, null, 2));\n}\n\nfunction pruneSnapshotsAfterBeaconClockSync (fs, tipBeaconClock) {\n if (!fs || typeof fs.writeFile !== 'function') return false;\n const doc = loadSnapshotsDoc(fs);\n const tip = Number(tipBeaconClock);\n if (!Number.isFinite(tip)) return true;\n for (const k of Object.keys(doc.byClock)) {\n const n = Number(k);\n if (Number.isFinite(n) && n > tip) delete doc.byClock[k];\n }\n return fs.writeFile(SIDECHAIN_SNAPSHOTS_PATH, JSON.stringify(doc, null, 2));\n}\n\nfunction loadJournalDoc (fs) {\n if (!fs || typeof fs.readFile !== 'function') return { version: 1, entries: [] };\n try {\n const raw = fs.readFile(SIDECHAIN_JOURNAL_PATH);\n if (!raw) return { version: 1, entries: [] };\n const parsed = typeof raw === 'string' ? JSON.parse(raw) : JSON.parse(raw.toString('utf8'));\n if (!parsed || typeof parsed !== 'object') return { version: 1, entries: [] };\n const entries = Array.isArray(parsed.entries) ? parsed.entries : [];\n return { version: 1, entries };\n } catch (_) {\n return { version: 1, entries: [] };\n }\n}\n\n/**\n * Append a patch transition for audit / unsealed recovery.\n * @returns {object|null} the entry written\n */\nfunction appendJournalEntrySync (fs, entry) {\n if (!fs || typeof fs.writeFile !== 'function') return null;\n const doc = loadJournalDoc(fs);\n const row = {\n seq: doc.entries.length + 1,\n at: new Date().toISOString(),\n basisClock: Number(entry.basisClock) || 0,\n clock: Number(entry.clock) || 0,\n basisDigest: String(entry.basisDigest || ''),\n newDigest: String(entry.newDigest || ''),\n patchDigest: String(entry.patchDigest || ''),\n patches: jsonSafe(entry.patches || []),\n sealedBeaconClock: entry.sealedBeaconClock != null ? Number(entry.sealedBeaconClock) : null\n };\n doc.entries.push(row);\n fs.writeFile(SIDECHAIN_JOURNAL_PATH, JSON.stringify(doc, null, 2));\n return row;\n}\n\n/**\n * Mark journal rows with sidechain clock <= sealedSidechainClock as sealed to this beacon epoch.\n */\nfunction sealJournalThroughSidechainClockSync (fs, sealedSidechainClock, beaconClock) {\n if (!fs || typeof fs.writeFile !== 'function') return false;\n const tip = Number(sealedSidechainClock);\n const bc = Number(beaconClock);\n if (!Number.isFinite(tip) || !Number.isFinite(bc)) return false;\n const doc = loadJournalDoc(fs);\n let changed = false;\n for (const e of doc.entries) {\n if (e.sealedBeaconClock == null && Number(e.clock) <= tip) {\n e.sealedBeaconClock = bc;\n changed = true;\n }\n }\n if (!changed) return true;\n return fs.writeFile(SIDECHAIN_JOURNAL_PATH, JSON.stringify(doc, null, 2));\n}\n\n/**\n * Drop journal entries sealed to removed beacon clocks; keep unsealed and still-valid seals.\n */\nfunction pruneJournalForRemovedBeaconClocksSync (fs, removedBeaconClocks) {\n if (!fs || typeof fs.writeFile !== 'function') return false;\n if (!Array.isArray(removedBeaconClocks) || !removedBeaconClocks.length) return true;\n const removed = new Set(removedBeaconClocks.map((c) => Number(c)).filter((n) => Number.isFinite(n)));\n const doc = loadJournalDoc(fs);\n doc.entries = doc.entries.filter((e) => {\n if (e.sealedBeaconClock == null) return true;\n return !removed.has(Number(e.sealedBeaconClock));\n });\n return fs.writeFile(SIDECHAIN_JOURNAL_PATH, JSON.stringify(doc, null, 2));\n}\n\n/**\n * Replay unsealed journal entries that build on `basis` (sequential by clock).\n * @returns {{ state: StatechainState, applied: number }}\n */\nfunction replayUnsealedJournalEntries (basis, journalEntries, policy) {\n let state = _cloneState(basis);\n let applied = 0;\n const pending = (Array.isArray(journalEntries) ? journalEntries : [])\n .filter((e) => e && e.sealedBeaconClock == null)\n .sort((a, b) => Number(a.clock) - Number(b.clock));\n for (const e of pending) {\n if (Number(e.basisClock) !== Number(state.clock)) continue;\n const dig = stateDigest(state);\n if (e.basisDigest && e.basisDigest !== dig) continue;\n const r = applyPatchesToState(state, e.patches, policy);\n if (!r.ok) break;\n state = r.state;\n applied++;\n }\n return { state, applied };\n}\n\n/**\n * Unified tip restore: snapshot → digest-match loaded STATE → genesis.\n * Optionally replay unsealed journal entries after the sealed tip.\n *\n * @param {{\n * tipPayload: object|null,\n * snapshot: StatechainState|null,\n * loadedState: StatechainState|null,\n * journalEntries?: object[],\n * policy?: StatechainPathPolicy|null,\n * replayUnsealed?: boolean\n * }} args\n * @returns {{\n * state: StatechainState,\n * source: 'snapshot'|'digest-match'|'genesis',\n * unsealedApplied: number,\n * warning?: string\n * }}\n */\nfunction resolveStateForBeaconTip (args = {}) {\n const tipPayload = args.tipPayload || null;\n const snapshot = args.snapshot || null;\n const loadedState = args.loadedState || null;\n const replay = args.replayUnsealed !== false;\n const policy = args.policy || null;\n const journalEntries = args.journalEntries || [];\n\n let state = null;\n let source = 'genesis';\n let warning;\n\n if (snapshot && typeof snapshot === 'object') {\n state = _cloneState(snapshot);\n source = 'snapshot';\n } else if (loadedState && tipPayload && tipPayload.sidechain && tipPayload.sidechain.stateDigest) {\n const dig = stateDigest(loadedState);\n if (dig === String(tipPayload.sidechain.stateDigest)) {\n state = _cloneState(loadedState);\n source = 'digest-match';\n }\n }\n\n if (!state) {\n state = createInitialState();\n source = 'genesis';\n if (tipPayload && tipPayload.clock != null) {\n warning = `no snapshot for beacon clock ${tipPayload.clock}; reset to genesis`;\n }\n }\n\n let unsealedApplied = 0;\n if (replay && journalEntries.length) {\n const r = replayUnsealedJournalEntries(state, journalEntries, policy);\n state = r.state;\n unsealedApplied = r.applied;\n }\n\n return { state, source, unsealedApplied, warning };\n}\n\n/**\n * Serialize async work on a single chain (patch submits, reorg vs patch races).\n * @returns {(fn: () => Promise<*>) => Promise<*>}\n */\nfunction createSerializeQueue () {\n let tail = Promise.resolve();\n return function runSerialized (fn) {\n const next = tail.then(() => fn());\n // Keep queue alive after rejections\n tail = next.then(() => undefined, () => undefined);\n return next;\n };\n}\n\n/**\n * Build GenericMessage / activity JSON body for a statechain patch proposal.\n * @param {{ basisClock: number, basisDigest: string, patches: object[], federationWitness?: object }} proposal\n */\nfunction encodeSidechainStatePatchMessage (proposal) {\n return {\n type: SIDECHAIN_STATE_PATCH_TYPE,\n version: 1,\n kind: SIDECHAIN_PATCH_KIND,\n basisClock: Number(proposal.basisClock),\n basisDigest: String(proposal.basisDigest || ''),\n patches: jsonSafe(proposal.patches || []),\n federationWitness: proposal.federationWitness || null\n };\n}\n\n/**\n * @param {object} body\n * @returns {{ ok: boolean, proposal?: object, error?: string }}\n */\nfunction parseSidechainStatePatchMessage (body) {\n if (!body || typeof body !== 'object') return { ok: false, error: 'body must be an object' };\n const type = body.type || body['@type'];\n if (type && type !== SIDECHAIN_STATE_PATCH_TYPE && body.kind !== SIDECHAIN_PATCH_KIND) {\n return { ok: false, error: 'not a SIDECHAIN_STATE_PATCH message' };\n }\n if (!Array.isArray(body.patches) || !body.patches.length) {\n return { ok: false, error: 'patches required' };\n }\n const basisClock = body.basisClock != null ? Number(body.basisClock) : NaN;\n if (!Number.isFinite(basisClock)) return { ok: false, error: 'basisClock required' };\n return {\n ok: true,\n proposal: {\n basisClock,\n basisDigest: body.basisDigest != null ? String(body.basisDigest) : '',\n patches: body.patches,\n federationWitness: body.federationWitness || null\n }\n };\n}\n\n/**\n * Fail-closed check of federation witnesses on a loaded beacon epoch chain.\n * @param {Array<{ type?: string, payload?: object, federationWitness?: object }>} epochChain\n * @param {string[]} validators\n * @param {number} threshold\n * @returns {{ ok: boolean, failures: Array<{ clock: *, reason: string }> }}\n */\nfunction verifyEpochChainFederationWitnesses (epochChain, validators, threshold) {\n const failures = [];\n const pubs = Array.isArray(validators) ? validators : [];\n if (!pubs.length) return { ok: true, failures };\n const thr = Math.max(1, Number(threshold) || 1);\n const chain = Array.isArray(epochChain) ? epochChain : [];\n for (const e of chain) {\n if (!e || e.type !== 'BEACON_EPOCH' || !e.payload) continue;\n const buf = Buffer.from(signingStringForBeaconEpoch(e.payload), 'utf8');\n const ok = verifyFederationWitnessOnMessage(buf, e.federationWitness, pubs, thr);\n if (!ok) {\n failures.push({\n clock: e.payload.clock,\n reason: 'federationWitness missing or invalid'\n });\n }\n }\n return { ok: failures.length === 0, failures };\n}\n\n/**\n * Operator/UI summary of the append-only journal (no full patch bodies by default).\n * @param {*} fs\n * @param {{ limit?: number, includePatches?: boolean }} [opts]\n */\nfunction summarizeJournal (fs, opts = {}) {\n const doc = loadJournalDoc(fs);\n const limit = Math.max(1, Math.min(500, Number(opts.limit) || 50));\n const includePatches = !!opts.includePatches;\n const unsealedCount = doc.entries.filter((e) => e && e.sealedBeaconClock == null).length;\n const slice = doc.entries.slice(-limit).reverse();\n const entries = slice.map((e) => {\n const row = {\n seq: e.seq,\n at: e.at || null,\n basisClock: Number(e.basisClock) || 0,\n clock: Number(e.clock) || 0,\n sealedBeaconClock: e.sealedBeaconClock != null ? Number(e.sealedBeaconClock) : null,\n basisDigest: e.basisDigest || null,\n newDigest: e.newDigest || null,\n patchDigest: e.patchDigest || null,\n opCount: Array.isArray(e.patches) ? e.patches.length : 0,\n paths: Array.isArray(e.patches)\n ? e.patches.map((p) => (p && p.path != null ? String(p.path) : '')).filter(Boolean).slice(0, 12)\n : []\n };\n if (includePatches) row.patches = e.patches || [];\n return row;\n });\n return {\n version: 1,\n path: SIDECHAIN_JOURNAL_PATH,\n entryCount: doc.entries.length,\n unsealedCount,\n entries\n };\n}\n\n/**\n * Operator/UI list of sealed snapshots keyed by beacon clock (digests, not full content).\n * @param {*} fs\n * @param {{ limit?: number, includeContent?: boolean }} [opts]\n */\nfunction summarizeSnapshots (fs, opts = {}) {\n const doc = loadSnapshotsDoc(fs);\n const limit = Math.max(1, Math.min(500, Number(opts.limit) || 50));\n const includeContent = !!opts.includeContent;\n const clocks = Object.keys(doc.byClock)\n .map((k) => Number(k))\n .filter((n) => Number.isFinite(n))\n .sort((a, b) => b - a)\n .slice(0, limit);\n const snapshots = clocks.map((beaconClock) => {\n const s = doc.byClock[String(beaconClock)];\n const state = {\n version: Number(s && s.version) || 1,\n clock: Number(s && s.clock) || 0,\n content: (s && s.content && typeof s.content === 'object') ? s.content : {}\n };\n const row = {\n beaconClock,\n sidechainClock: state.clock,\n stateDigest: stateDigest(state)\n };\n if (includeContent) {\n row.content = state.content;\n row.version = state.version;\n }\n return row;\n });\n return {\n version: 1,\n path: SIDECHAIN_SNAPSHOTS_PATH,\n snapshotCount: Object.keys(doc.byClock).length,\n snapshots\n };\n}\n\nmodule.exports = {\n SIDECHAIN_STATE_PATH,\n SIDECHAIN_SNAPSHOTS_PATH,\n SIDECHAIN_JOURNAL_PATH,\n SIDECHAIN_PATCH_KIND,\n SIDECHAIN_STATE_PATCH_TYPE,\n signingStringForSidechainStatePatch,\n patchCommitmentDigestHex,\n createInitialState,\n stateDigest,\n parseStatechainPathPolicy,\n validatePatchesAgainstPolicy,\n applyPatchesToState,\n loadState,\n persistState,\n loadStateAt,\n persistStateAt,\n normalizeContractId,\n storePathsForContract,\n parentSealPath,\n namespaceHeadFromState,\n patchesForNamespaceHead,\n ensureContractStatechain,\n loadSnapshotForBeaconClock,\n saveSnapshotForBeaconClockSync,\n pruneSnapshotsForRemovedBeaconClocksSync,\n pruneSnapshotsAfterBeaconClockSync,\n loadJournalDoc,\n appendJournalEntrySync,\n sealJournalThroughSidechainClockSync,\n pruneJournalForRemovedBeaconClocksSync,\n replayUnsealedJournalEntries,\n resolveStateForBeaconTip,\n createSerializeQueue,\n encodeSidechainStatePatchMessage,\n parseSidechainStatePatchMessage,\n verifyEpochChainFederationWitnesses,\n summarizeJournal,\n summarizeSnapshots\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9zaWRlY2hhaW5TdGF0ZS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWI7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0EsZ0VBQWdFLHlCQUF5QjtBQUN6RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsbUJBQU8sQ0FBQyx5REFBUTtBQUMvQixRQUFRLHVCQUF1QixFQUFFLG1CQUFPLENBQUMsaUVBQWlCO0FBQzFELDRCQUE0QixtQkFBTyxDQUFDLDJGQUF1QjtBQUMzRCxRQUFRLDRCQUE0QjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxFQUFFLEVBQUUsbUJBQU8sQ0FBQyxtR0FBMkI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsb0RBQW9EO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsYUFBYSw4REFBOEQ7QUFDM0UsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSw4REFBOEQ7QUFDM0UsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxNQUFNO0FBQ2xEOztBQUVBLGNBQWMsaUJBQWlCO0FBQy9CO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QyxHQUFHO0FBQ0gsNENBQTRDLE1BQU07QUFDbEQ7O0FBRUE7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFdBQVcscUNBQXFDO0FBQ2hELGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0EsYUFBYSw0Q0FBNEMsY0FBYztBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1DQUFtQyxNQUFNLElBQUksa0JBQWtCO0FBQzlFO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUJBQXFCLE9BQU8sOEJBQThCLFNBQVMsS0FBSyxLQUFLO0FBQzVGO0FBQ0E7QUFDQSxlQUFlLHFCQUFxQixPQUFPLG9CQUFvQixLQUFLO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHFCQUFxQixPQUFPLHlCQUF5QixLQUFLO0FBQzNFO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCLFdBQVcsVUFBVTtBQUNyQixXQUFXLHFDQUFxQztBQUNoRCxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLGFBQWE7QUFDYjtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEdBQThHO0FBQzlHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixHQUFHO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLGNBQWMsS0FBSztBQUNuQixrQkFBa0IsS0FBSztBQUN2QixnQkFBZ0IsS0FBSztBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQSx3QkFBd0IsZ0NBQWdDO0FBQ3hEOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxpQkFBaUI7QUFDNUIsYUFBYSxzREFBc0Q7QUFDbkUsZUFBZTtBQUNmO0FBQ0EsNkRBQTZEO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyx1QkFBdUI7QUFDbEMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUSxXQUFXO0FBQzlCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBSTtBQUNwQixlQUFlO0FBQ2YsS0FBSztBQUNMO0FBQ0E7QUFDQSxjQUFjLDRDQUE0QztBQUMxRDtBQUNBLFlBQVksd0NBQXdDO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsUUFBUTtBQUNuQixhQUFhLFVBQVUseURBQXlEO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQSxhQUFhO0FBQ2IsSUFBSTtBQUNKLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQSxhQUFhO0FBQ2IsSUFBSTtBQUNKLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxtQkFBbUI7QUFDbkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsMEZBQTBGO0FBQ3ZHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixlQUFlO0FBQ2Y7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxRQUFRLDZEQUE2RCxHQUFHO0FBQ25GLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsZUFBZSwrQkFBK0IsMEJBQTBCO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLDRDQUE0QztBQUN6RDtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLDRDQUE0QztBQUN6RDtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS9mdW5jdGlvbnMvc2lkZWNoYWluU3RhdGUuanM/YTU4ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2lkZWNoYWluIGRvY3VtZW50IGhlbHBlcnMgKGRpc3RyaWJ1dGVkIGV4ZWN1dGlvbikg4oCUIHNoYXJlZCBtdXR1YWwgc3RhdGUgYXMgb3JkZXJlZFxuICogc25hcHNob3RzIHVuZGVyIGNvbnRyYWN0IHJ1bGVzLiAqKk5vdCBhIEZhYnJpYyB0eXBlKio7IHByZWZlciB0aGlzIG1vZHVsZSBvdmVyIGFueVxuICogbGVnYWN5IGB0eXBlcy9zdGF0ZWNoYWluYCBwYXRoLlxuICpcbiAqIEh1YiBvZnRlbiBzYXlzIOKAnHNpZGVjaGFpbiBzdGF0ZeKAnTogYSBsb2dpY2FsIEpTT04gZG9jdW1lbnQgYHsgdmVyc2lvbiwgY2xvY2ssIGNvbnRlbnQgfWBcbiAqIGFkdmFuY2VkIGJ5IFJGQzY5MDIgcGF0Y2hlcywgYXV0aG9yaXplZCBieSBmZWRlcmF0aW9uIChvciBvcGVyYXRvciBwb2xpY3kpLCBhbmQgc2VhbGVkXG4gKiBpbnRvIEwxLXRpZWQgZXBvY2ggZGlnZXN0cyB3aXRoIGZ1bGwgc25hcHNob3RzIGZvciByZW9yZyByZXdpbmQuIE9wdGlvbmFsIHBhdGggcG9saWN5XG4gKiBlbmNvZGVzIHRoZSBjb250cmFjdOKAmXMgYWxsb3dlZCBtdXRhdGlvbnMuXG4gKlxuICogQG1vZHVsZSBmdW5jdGlvbnMvc2lkZWNoYWluU3RhdGVcbiAqIEBzZWUgZG9jcy9ESVNUUklCVVRFRF9FWEVDVVRJT04ubWRcbiAqIEBzZWUgc25pcHBldHMvc2lkZWNoYWlucy5tZFxuICovXG5cbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3QgeyBhcHBseVBhdGNoLCB2YWxpZGF0ZSB9ID0gcmVxdWlyZSgnZmFzdC1qc29uLXBhdGNoJyk7XG5jb25zdCBmYWJyaWNDYW5vbmljYWxKc29uID0gcmVxdWlyZSgnLi9mYWJyaWNDYW5vbmljYWxKc29uJyk7XG5jb25zdCB7IGpzb25TYWZlLCBzdGFibGVTdHJpbmdpZnkgfSA9IGZhYnJpY0Nhbm9uaWNhbEpzb247XG5jb25zdCB7XG4gIHNpZ25pbmdTdHJpbmdGb3JCZWFjb25FcG9jaCxcbiAgdmVyaWZ5RmVkZXJhdGlvbldpdG5lc3NPbk1lc3NhZ2Vcbn0gPSByZXF1aXJlKCcuL2JlYWNvbkZlZGVyYXRpb25TaWduaW5nJyk7XG5cbmNvbnN0IFNJREVDSEFJTl9TVEFURV9QQVRIID0gJ3NpZGVjaGFpbi9TVEFURSc7XG5jb25zdCBTSURFQ0hBSU5fU05BUFNIT1RTX1BBVEggPSAnc2lkZWNoYWluL1NOQVBTSE9UUyc7XG5jb25zdCBTSURFQ0hBSU5fSk9VUk5BTF9QQVRIID0gJ3NpZGVjaGFpbi9KT1VSTkFMJztcbmNvbnN0IFNJREVDSEFJTl9QQVRDSF9LSU5EID0gJ1NpZGVjaGFpblN0YXRlUGF0Y2gnO1xuLyoqIE1hbmlmZXN0IC8gR2VuZXJpY01lc3NhZ2UgLyBhY3Rpdml0eSB0eXBlIG5hbWUgKG5vdCB5ZXQgYSBkZWRpY2F0ZWQgb3V0ZXIgb3Bjb2RlKS4gKi9cbmNvbnN0IFNJREVDSEFJTl9TVEFURV9QQVRDSF9UWVBFID0gJ1NJREVDSEFJTl9TVEFURV9QQVRDSCc7XG5cbi8qKlxuICogQHR5cGVkZWYge3sgdmVyc2lvbj86IG51bWJlciwgY2xvY2s6IG51bWJlciwgY29udGVudDogb2JqZWN0IH19IFN0YXRlY2hhaW5TdGF0ZVxuICogQHR5cGVkZWYge3tcbiAqICAgbWF4T3BzPzogbnVtYmVyLFxuICogICBtYXhQYXRoRGVwdGg/OiBudW1iZXIsXG4gKiAgIGFsbG93ZWRQYXRoUHJlZml4ZXM/OiBzdHJpbmdbXSxcbiAqICAgZGVuaWVkUGF0aFByZWZpeGVzPzogc3RyaW5nW10sXG4gKiAgIGFsbG93RW1wdHlQb2xpY3k/OiBib29sZWFuXG4gKiB9fSBTdGF0ZWNoYWluUGF0aFBvbGljeVxuICovXG5cbmZ1bmN0aW9uIHN0YWJsZVBhdGNoQm9keSAoYmFzaXNDbG9jaywgYmFzaXNEaWdlc3QsIHBhdGNoZXMpIHtcbiAgcmV0dXJuIHN0YWJsZVN0cmluZ2lmeSh7XG4gICAgdmVyc2lvbjogMSxcbiAgICBraW5kOiBTSURFQ0hBSU5fUEFUQ0hfS0lORCxcbiAgICBiYXNpc0Nsb2NrOiBOdW1iZXIoYmFzaXNDbG9jayksXG4gICAgYmFzaXNEaWdlc3Q6IFN0cmluZyhiYXNpc0RpZ2VzdCB8fCAnJyksXG4gICAgcGF0Y2hlczoganNvblNhZmUocGF0Y2hlcylcbiAgfSk7XG59XG5cbi8qKlxuICogVVRGLTggc3RyaW5nIGZlZGVyYXRpb24gbWVtYmVycyBzaWduIChzYW1lIGJ5dGVzIGZvciBhbGwgdmFsaWRhdG9ycykuXG4gKiBAcGFyYW0ge3sgYmFzaXNDbG9jazogbnVtYmVyLCBiYXNpc0RpZ2VzdDogc3RyaW5nLCBwYXRjaGVzOiBvYmplY3RbXSB9fSBwcm9wb3NhbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc2lnbmluZ1N0cmluZ0ZvclNpZGVjaGFpblN0YXRlUGF0Y2ggKHByb3Bvc2FsKSB7XG4gIHJldHVybiBzdGFibGVQYXRjaEJvZHkocHJvcG9zYWwuYmFzaXNDbG9jaywgcHJvcG9zYWwuYmFzaXNEaWdlc3QsIHByb3Bvc2FsLnBhdGNoZXMpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7eyBiYXNpc0Nsb2NrOiBudW1iZXIsIGJhc2lzRGlnZXN0OiBzdHJpbmcsIHBhdGNoZXM6IG9iamVjdFtdIH19IHByb3Bvc2FsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBwYXRjaENvbW1pdG1lbnREaWdlc3RIZXggKHByb3Bvc2FsKSB7XG4gIGNvbnN0IHMgPSBzaWduaW5nU3RyaW5nRm9yU2lkZWNoYWluU3RhdGVQYXRjaChwcm9wb3NhbCk7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKEJ1ZmZlci5mcm9tKHMsICd1dGY4JykpLmRpZ2VzdCgnaGV4Jyk7XG59XG5cbi8qKiBAcmV0dXJucyB7U3RhdGVjaGFpblN0YXRlfSAqL1xuZnVuY3Rpb24gY3JlYXRlSW5pdGlhbFN0YXRlICgpIHtcbiAgcmV0dXJuIHsgdmVyc2lvbjogMSwgY2xvY2s6IDAsIGNvbnRlbnQ6IHt9IH07XG59XG5cbi8qKlxuICogRGlnZXN0IG9mIHRoZSBmdWxsIHN0YXRlY2hhaW4gZG9jdW1lbnQgKHB1YmxpYyBjb21taXRtZW50KS5cbiAqIEBwYXJhbSB7U3RhdGVjaGFpblN0YXRlfSBzdGF0ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc3RhdGVEaWdlc3QgKHN0YXRlKSB7XG4gIGNvbnN0IHMgPSBzdGFibGVTdHJpbmdpZnkoe1xuICAgIHZlcnNpb246IHN0YXRlLnZlcnNpb24gIT0gbnVsbCA/IE51bWJlcihzdGF0ZS52ZXJzaW9uKSA6IDEsXG4gICAgY2xvY2s6IE51bWJlcihzdGF0ZS5jbG9jaykgfHwgMCxcbiAgICBjb250ZW50OiBqc29uU2FmZShzdGF0ZS5jb250ZW50IHx8IHt9KVxuICB9KTtcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoQnVmZmVyLmZyb20ocywgJ3V0ZjgnKSkuZGlnZXN0KCdoZXgnKTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgb3B0aW9uYWwgY29udHJhY3QgcGF0aCBwb2xpY3kgZnJvbSBhIGRpc3RyaWJ1dGVkIG1hbmlmZXN0IG9yIHNldHRpbmdzLlxuICogQHBhcmFtIHtvYmplY3R8bnVsbHx1bmRlZmluZWR9IHJhd1xuICogQHJldHVybnMge1N0YXRlY2hhaW5QYXRoUG9saWN5fG51bGx9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3RhdGVjaGFpblBhdGhQb2xpY3kgKHJhdykge1xuICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IG1heE9wcyA9IHJhdy5tYXhPcHMgIT0gbnVsbCA/IE1hdGgubWF4KDEsIE51bWJlcihyYXcubWF4T3BzKSB8fCAxKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgbWF4UGF0aERlcHRoID0gcmF3Lm1heFBhdGhEZXB0aCAhPSBudWxsID8gTWF0aC5tYXgoMSwgTnVtYmVyKHJhdy5tYXhQYXRoRGVwdGgpIHx8IDEpIDogdW5kZWZpbmVkO1xuICBjb25zdCBhbGxvd2VkUGF0aFByZWZpeGVzID0gQXJyYXkuaXNBcnJheShyYXcuYWxsb3dlZFBhdGhQcmVmaXhlcylcbiAgICA/IHJhdy5hbGxvd2VkUGF0aFByZWZpeGVzLmZpbHRlcigocCkgPT4gdHlwZW9mIHAgPT09ICdzdHJpbmcnICYmIHAubGVuZ3RoKVxuICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBkZW5pZWRQYXRoUHJlZml4ZXMgPSBBcnJheS5pc0FycmF5KHJhdy5kZW5pZWRQYXRoUHJlZml4ZXMpXG4gICAgPyByYXcuZGVuaWVkUGF0aFByZWZpeGVzLmZpbHRlcigocCkgPT4gdHlwZW9mIHAgPT09ICdzdHJpbmcnICYmIHAubGVuZ3RoKVxuICAgIDogdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIG1heE9wcyxcbiAgICBtYXhQYXRoRGVwdGgsXG4gICAgYWxsb3dlZFBhdGhQcmVmaXhlcyxcbiAgICBkZW5pZWRQYXRoUHJlZml4ZXMsXG4gICAgYWxsb3dFbXB0eVBvbGljeTogcmF3LmFsbG93RW1wdHlQb2xpY3kgIT09IGZhbHNlXG4gIH07XG59XG5cbi8qKlxuICogRW5mb3JjZSBjb250cmFjdCBwYXRoIHJ1bGVzIG9uIGFuIFJGQzY5MDIgcGF0Y2ggbGlzdCAoYmVmb3JlIGFwcGx5KS5cbiAqIEBwYXJhbSB7b2JqZWN0W119IHBhdGNoZXNcbiAqIEBwYXJhbSB7U3RhdGVjaGFpblBhdGhQb2xpY3l8bnVsbHx1bmRlZmluZWR9IHBvbGljeVxuICogQHJldHVybnMge3sgb2s6IGJvb2xlYW4sIGVycm9yPzogc3RyaW5nIH19XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUGF0Y2hlc0FnYWluc3RQb2xpY3kgKHBhdGNoZXMsIHBvbGljeSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocGF0Y2hlcykgfHwgIXBhdGNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ3BhdGNoZXMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheScgfTtcbiAgfVxuICBpZiAoIXBvbGljeSkgcmV0dXJuIHsgb2s6IHRydWUgfTtcblxuICBpZiAocG9saWN5Lm1heE9wcyAhPSBudWxsICYmIHBhdGNoZXMubGVuZ3RoID4gcG9saWN5Lm1heE9wcykge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGBwYXRjaGVzIGV4Y2VlZCBtYXhPcHMgKCR7cG9saWN5Lm1heE9wc30pYCB9O1xuICB9XG5cbiAgY29uc3QgYWxsb3dlZCA9IHBvbGljeS5hbGxvd2VkUGF0aFByZWZpeGVzO1xuICBjb25zdCBkZW5pZWQgPSBwb2xpY3kuZGVuaWVkUGF0aFByZWZpeGVzIHx8IFtdO1xuICBjb25zdCBtYXhEZXB0aCA9IHBvbGljeS5tYXhQYXRoRGVwdGg7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbFxuICAgKiBAcmV0dXJucyB7eyBvazogYm9vbGVhbiwgZXJyb3I/OiBzdHJpbmcgfX1cbiAgICovXG4gIGZ1bmN0aW9uIGNoZWNrUGF0aCAocGF0aCwgbGFiZWwpIHtcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBgaW52YWxpZCBwYXRjaCAke2xhYmVsfTogJHtwYXRoIHx8ICcoZW1wdHkpJ31gIH07XG4gICAgfVxuICAgIGNvbnN0IGRlcHRoID0gcGF0aCA9PT0gJy8nID8gMCA6IHBhdGguc3BsaXQoJy8nKS5sZW5ndGggLSAxO1xuICAgIGlmIChtYXhEZXB0aCAhPSBudWxsICYmIGRlcHRoID4gbWF4RGVwdGgpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGAke2xhYmVsfSBkZXB0aCBleGNlZWRzIG1heFBhdGhEZXB0aCAoJHttYXhEZXB0aH0pOiAke3BhdGh9YCB9O1xuICAgIH1cbiAgICBpZiAoZGVuaWVkLnNvbWUoKHByZWZpeCkgPT4gX3BhdGhNYXRjaGVzUHJlZml4KHBhdGgsIHByZWZpeCkpKSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBgJHtsYWJlbH0gZGVuaWVkIGJ5IHBvbGljeTogJHtwYXRofWAgfTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWxsb3dlZCkgJiYgYWxsb3dlZC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG9rUGF0aCA9IGFsbG93ZWQuc29tZSgocHJlZml4KSA9PiBfcGF0aE1hdGNoZXNQcmVmaXgocGF0aCwgcHJlZml4KSk7XG4gICAgICBpZiAoIW9rUGF0aCkge1xuICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBgJHtsYWJlbH0gbm90IGFsbG93ZWQgYnkgcG9saWN5OiAke3BhdGh9YCB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBvazogdHJ1ZSB9O1xuICB9XG5cbiAgZm9yIChjb25zdCBvcCBvZiBwYXRjaGVzKSB7XG4gICAgaWYgKCFvcCB8fCB0eXBlb2Ygb3AgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnaW52YWxpZCBwYXRjaCBvcCcgfTtcbiAgICB9XG4gICAgY29uc3QgcGF0aCA9IHR5cGVvZiBvcC5wYXRoID09PSAnc3RyaW5nJyA/IG9wLnBhdGggOiAnJztcbiAgICBjb25zdCBwYXRoQ2hlY2sgPSBjaGVja1BhdGgocGF0aCwgJ3BhdGgnKTtcbiAgICBpZiAoIXBhdGhDaGVjay5vaykgcmV0dXJuIHBhdGhDaGVjaztcbiAgICBjb25zdCBraW5kID0gU3RyaW5nKG9wLm9wIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChraW5kID09PSAnY29weScgfHwga2luZCA9PT0gJ21vdmUnKSB7XG4gICAgICBjb25zdCBmcm9tID0gdHlwZW9mIG9wLmZyb20gPT09ICdzdHJpbmcnID8gb3AuZnJvbSA6ICcnO1xuICAgICAgY29uc3QgZnJvbUNoZWNrID0gY2hlY2tQYXRoKGZyb20sICdmcm9tJyk7XG4gICAgICBpZiAoIWZyb21DaGVjay5vaykgcmV0dXJuIGZyb21DaGVjaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgb2s6IHRydWUgfTtcbn1cblxuLyoqIEBwcml2YXRlICovXG5mdW5jdGlvbiBfcGF0aE1hdGNoZXNQcmVmaXggKHBhdGgsIHByZWZpeCkge1xuICBpZiAoIXByZWZpeCB8fCB0eXBlb2YgcHJlZml4ICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICBpZiAocHJlZml4ID09PSAnLycpIHJldHVybiB0cnVlO1xuICByZXR1cm4gcGF0aCA9PT0gcHJlZml4IHx8IHBhdGguc3RhcnRzV2l0aChwcmVmaXggKyAnLycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7U3RhdGVjaGFpblN0YXRlfSBzdGF0ZVxuICogQHBhcmFtIHtvYmplY3RbXX0gcGF0Y2hlcyBSRkM2OTAyIG9wZXJhdGlvbnMgb24gYHN0YXRlLmNvbnRlbnRgXG4gKiBAcGFyYW0ge1N0YXRlY2hhaW5QYXRoUG9saWN5fG51bGx8dW5kZWZpbmVkfSBbcG9saWN5XVxuICogQHJldHVybnMge3sgb2s6IGJvb2xlYW4sIHN0YXRlPzogU3RhdGVjaGFpblN0YXRlLCBlcnJvcj86IHN0cmluZywgbmV3RGlnZXN0Pzogc3RyaW5nLCBiYXNpc0RpZ2VzdD86IHN0cmluZyB9fVxuICovXG5mdW5jdGlvbiBhcHBseVBhdGNoZXNUb1N0YXRlIChzdGF0ZSwgcGF0Y2hlcywgcG9saWN5KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwYXRjaGVzKSB8fCAhcGF0Y2hlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAncGF0Y2hlcyBtdXN0IGJlIGEgbm9uLWVtcHR5IGFycmF5JyB9O1xuICB9XG4gIGNvbnN0IHZlcnIgPSB2YWxpZGF0ZShwYXRjaGVzKTtcbiAgaWYgKHZlcnIpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiB2ZXJyLm1lc3NhZ2UgfHwgU3RyaW5nKHZlcnIpIH07XG4gIH1cbiAgY29uc3QgcG9saWN5Q2hlY2sgPSB2YWxpZGF0ZVBhdGNoZXNBZ2FpbnN0UG9saWN5KHBhdGNoZXMsIHBvbGljeSk7XG4gIGlmICghcG9saWN5Q2hlY2sub2spIHJldHVybiBwb2xpY3lDaGVjaztcblxuICBjb25zdCBiYXNpc0RpZ2VzdCA9IHN0YXRlRGlnZXN0KHN0YXRlKTtcbiAgY29uc3QgbmV4dCA9IHtcbiAgICB2ZXJzaW9uOiBzdGF0ZS52ZXJzaW9uICE9IG51bGwgPyBOdW1iZXIoc3RhdGUudmVyc2lvbikgOiAxLFxuICAgIGNsb2NrOiBOdW1iZXIoc3RhdGUuY2xvY2spIHx8IDAsXG4gICAgY29udGVudDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzdGF0ZS5jb250ZW50IHx8IHt9KSlcbiAgfTtcbiAgdHJ5IHtcbiAgICBhcHBseVBhdGNoKG5leHQuY29udGVudCwgcGF0Y2hlcywgdHJ1ZSwgdHJ1ZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSB9O1xuICB9XG4gIG5leHQuY2xvY2sgPSBuZXh0LmNsb2NrICsgMTtcbiAgcmV0dXJuIHsgb2s6IHRydWUsIHN0YXRlOiBuZXh0LCBuZXdEaWdlc3Q6IHN0YXRlRGlnZXN0KG5leHQpLCBiYXNpc0RpZ2VzdCB9O1xufVxuXG5mdW5jdGlvbiBfY2xvbmVTdGF0ZSAoc3RhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBzdGF0ZS52ZXJzaW9uICE9IG51bGwgPyBOdW1iZXIoc3RhdGUudmVyc2lvbikgOiAxLFxuICAgIGNsb2NrOiBOdW1iZXIoc3RhdGUuY2xvY2spIHx8IDAsXG4gICAgY29udGVudDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzdGF0ZS5jb250ZW50ICYmIHR5cGVvZiBzdGF0ZS5jb250ZW50ID09PSAnb2JqZWN0JyA/IHN0YXRlLmNvbnRlbnQgOiB7fSkpXG4gIH07XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBjb250cmFjdCAvIG5hbWVzcGFjZSBpZCBmb3Igc3RvcmUgcGF0aHMgKGhleC1pc2ggRmFicmljIEFjdG9yIGlkcykuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udHJhY3RJZFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQ29udHJhY3RJZCAoY29udHJhY3RJZCkge1xuICBjb25zdCBpZCA9IFN0cmluZyhjb250cmFjdElkIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKFxuICAgICFpZCB8fFxuICAgIGlkLmluY2x1ZGVzKCdcXDAnKSB8fFxuICAgIGlkLmluY2x1ZGVzKCcvJykgfHxcbiAgICBpZC5pbmNsdWRlcygnXFxcXCcpIHx8XG4gICAgaWQuaW5jbHVkZXMoJy4uJykgfHxcbiAgICBpZC5sZW5ndGggPiAxMjhcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNvbnRyYWN0SWQgZm9yIGNvbnRyYWN0IFN0YXRlY2hhaW4nKTtcbiAgfVxuICByZXR1cm4gaWQ7XG59XG5cbi8qKlxuICogU3RvcmUgcGF0aHMgZm9yIGEgQ29udHJhY3QtcHVibGlzaGVkIGNvbnRyYWN0IFN0YXRlY2hhaW4gKHNhbWUgbGF5b3V0IGFzIEh1YiByb290KS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250cmFjdElkXG4gKiBAcmV0dXJucyB7eyBjb250cmFjdElkOiBzdHJpbmcsIGJhc2U6IHN0cmluZywgc3RhdGU6IHN0cmluZywgc25hcHNob3RzOiBzdHJpbmcsIGpvdXJuYWw6IHN0cmluZyB9fVxuICovXG5mdW5jdGlvbiBzdG9yZVBhdGhzRm9yQ29udHJhY3QgKGNvbnRyYWN0SWQpIHtcbiAgY29uc3QgaWQgPSBub3JtYWxpemVDb250cmFjdElkKGNvbnRyYWN0SWQpO1xuICBjb25zdCBiYXNlID0gYHNpZGVjaGFpbnMvJHtpZH1gO1xuICByZXR1cm4ge1xuICAgIGNvbnRyYWN0SWQ6IGlkLFxuICAgIGJhc2UsXG4gICAgc3RhdGU6IGAke2Jhc2V9L1NUQVRFYCxcbiAgICBzbmFwc2hvdHM6IGAke2Jhc2V9L1NOQVBTSE9UU2AsXG4gICAgam91cm5hbDogYCR7YmFzZX0vSk9VUk5BTGBcbiAgfTtcbn1cblxuLyoqXG4gKiBKU09OIFBvaW50ZXIgb24gdGhlICoqcGFyZW50KiogU3RhdGVjaGFpbiBjb250ZW50IHdoZXJlIHRoZSBjaGlsZCBoZWFkIGlzIHNlYWxlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250cmFjdElkXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBwYXJlbnRTZWFsUGF0aCAoY29udHJhY3RJZCkge1xuICByZXR1cm4gYC9uYW1lc3BhY2VzLyR7bm9ybWFsaXplQ29udHJhY3RJZChjb250cmFjdElkKX1gO1xufVxuXG4vKipcbiAqIENvbXBhY3QgcHVibGljIGhlYWQgZm9yIHBhcmVudCBzZWFsIC8gQmVhY29uIGNvbnRyYWN0cyByb290IHN5bmMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udHJhY3RJZFxuICogQHBhcmFtIHtTdGF0ZWNoYWluU3RhdGV9IHN0YXRlXG4gKiBAcGFyYW0ge3sgbmFtZT86IHN0cmluZ3xudWxsLCBwYXJlbnRDb250cmFjdElkPzogc3RyaW5nfG51bGwgfX0gW21ldGFdXG4gKiBAcmV0dXJucyB7eyBjb250cmFjdElkOiBzdHJpbmcsIGNsb2NrOiBudW1iZXIsIHN0YXRlRGlnZXN0OiBzdHJpbmcsIG5hbWU6IHN0cmluZ3xudWxsLCBwYXJlbnRDb250cmFjdElkOiBzdHJpbmd8bnVsbCB9fVxuICovXG5mdW5jdGlvbiBuYW1lc3BhY2VIZWFkRnJvbVN0YXRlIChjb250cmFjdElkLCBzdGF0ZSwgbWV0YSA9IHt9KSB7XG4gIGNvbnN0IGlkID0gbm9ybWFsaXplQ29udHJhY3RJZChjb250cmFjdElkKTtcbiAgcmV0dXJuIHtcbiAgICBjb250cmFjdElkOiBpZCxcbiAgICBjbG9jazogTnVtYmVyKHN0YXRlICYmIHN0YXRlLmNsb2NrKSB8fCAwLFxuICAgIHN0YXRlRGlnZXN0OiBzdGF0ZURpZ2VzdChzdGF0ZSB8fCBjcmVhdGVJbml0aWFsU3RhdGUoKSksXG4gICAgbmFtZTogbWV0YS5uYW1lICE9IG51bGwgPyBTdHJpbmcobWV0YS5uYW1lKSA6IG51bGwsXG4gICAgcGFyZW50Q29udHJhY3RJZDogbWV0YS5wYXJlbnRDb250cmFjdElkICE9IG51bGwgPyBTdHJpbmcobWV0YS5wYXJlbnRDb250cmFjdElkKSA6IG51bGxcbiAgfTtcbn1cblxuLyoqXG4gKiBSRkM2OTAyIHBhdGNoZXMgdG8gcHVibGlzaCAvIHJlcGxhY2UgYSBuYW1lc3BhY2UgaGVhZCB1bmRlciBgL25hbWVzcGFjZXMvPGlkPmAuXG4gKiBAcGFyYW0ge29iamVjdHxudWxsfHVuZGVmaW5lZH0gZXhpc3RpbmdDb250ZW50IHBhcmVudCBjb250ZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gY29udHJhY3RJZFxuICogQHBhcmFtIHtvYmplY3R9IGhlYWQgZnJvbSB7QGxpbmsgbmFtZXNwYWNlSGVhZEZyb21TdGF0ZX1cbiAqIEByZXR1cm5zIHtvYmplY3RbXX1cbiAqL1xuZnVuY3Rpb24gcGF0Y2hlc0Zvck5hbWVzcGFjZUhlYWQgKGV4aXN0aW5nQ29udGVudCwgY29udHJhY3RJZCwgaGVhZCkge1xuICBjb25zdCBpZCA9IG5vcm1hbGl6ZUNvbnRyYWN0SWQoY29udHJhY3RJZCk7XG4gIGNvbnN0IHBhdGggPSBwYXJlbnRTZWFsUGF0aChpZCk7XG4gIGNvbnN0IGtleSA9ICduYW1lc3BhY2VzJztcbiAgY29uc3QgbmFtZXNwYWNlcyA9IGV4aXN0aW5nQ29udGVudCAmJiBleGlzdGluZ0NvbnRlbnRba2V5XSAmJiB0eXBlb2YgZXhpc3RpbmdDb250ZW50W2tleV0gPT09ICdvYmplY3QnXG4gICAgPyBleGlzdGluZ0NvbnRlbnRba2V5XVxuICAgIDogbnVsbDtcbiAgY29uc3QgcHJldiA9IG5hbWVzcGFjZXMgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5hbWVzcGFjZXMsIGlkKVxuICAgID8gbmFtZXNwYWNlc1tpZF1cbiAgICA6IG51bGw7XG4gIGlmIChwcmV2ICYmIHByZXYuc3RhdGVEaWdlc3QgJiYgaGVhZCAmJiBoZWFkLnN0YXRlRGlnZXN0ICYmIHByZXYuc3RhdGVEaWdlc3QgPT09IGhlYWQuc3RhdGVEaWdlc3QgJiZcbiAgICAgIE51bWJlcihwcmV2LmNsb2NrKSA9PT0gTnVtYmVyKGhlYWQuY2xvY2spKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmICghbmFtZXNwYWNlcykge1xuICAgIHJldHVybiBbe1xuICAgICAgb3A6ICdhZGQnLFxuICAgICAgcGF0aDogYC8ke2tleX1gLFxuICAgICAgdmFsdWU6IHsgW2lkXToganNvblNhZmUoaGVhZCkgfVxuICAgIH1dO1xuICB9XG4gIGlmIChwcmV2KSB7XG4gICAgcmV0dXJuIFt7IG9wOiAncmVwbGFjZScsIHBhdGgsIHZhbHVlOiBqc29uU2FmZShoZWFkKSB9XTtcbiAgfVxuICByZXR1cm4gW3sgb3A6ICdhZGQnLCBwYXRoLCB2YWx1ZToganNvblNhZmUoaGVhZCkgfV07XG59XG5cbmZ1bmN0aW9uIGxvYWRTdGF0ZUF0IChmcywgc3RhdGVQYXRoKSB7XG4gIGlmICghZnMgfHwgdHlwZW9mIGZzLnJlYWRGaWxlICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gY3JlYXRlSW5pdGlhbFN0YXRlKCk7XG4gIGNvbnN0IHBhdGggPSBzdGF0ZVBhdGggfHwgU0lERUNIQUlOX1NUQVRFX1BBVEg7XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGUocGF0aCk7XG4gICAgaWYgKCFyYXcpIHJldHVybiBjcmVhdGVJbml0aWFsU3RhdGUoKTtcbiAgICAvLyBGaWxlc3lzdGVtIG1heSByZXR1cm4gc3RyaW5nIG9yIEJ1ZmZlciAoc2FtZSBhcyBsb2FkU25hcHNob3RzRG9jIC8gbG9hZEpvdXJuYWxEb2MpLlxuICAgIGNvbnN0IHBhcnNlZCA9IHR5cGVvZiByYXcgPT09ICdzdHJpbmcnXG4gICAgICA/IEpTT04ucGFyc2UocmF3KVxuICAgICAgOiAoQnVmZmVyLmlzQnVmZmVyKHJhdylcbiAgICAgICAgPyBKU09OLnBhcnNlKHJhdy50b1N0cmluZygndXRmOCcpKVxuICAgICAgICA6IHJhdyk7XG4gICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcpIHJldHVybiBjcmVhdGVJbml0aWFsU3RhdGUoKTtcbiAgICBjb25zdCBjbG9jayA9IE51bWJlcihwYXJzZWQuY2xvY2spIHx8IDA7XG4gICAgY29uc3QgY29udGVudCA9IHBhcnNlZC5jb250ZW50ICYmIHR5cGVvZiBwYXJzZWQuY29udGVudCA9PT0gJ29iamVjdCcgPyBwYXJzZWQuY29udGVudCA6IHt9O1xuICAgIHJldHVybiB7IHZlcnNpb246IE51bWJlcihwYXJzZWQudmVyc2lvbikgfHwgMSwgY2xvY2ssIGNvbnRlbnQgfTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBjcmVhdGVJbml0aWFsU3RhdGUoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsb2FkU3RhdGUgKGZzKSB7XG4gIHJldHVybiBsb2FkU3RhdGVBdChmcywgU0lERUNIQUlOX1NUQVRFX1BBVEgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwZXJzaXN0U3RhdGVBdCAoZnMsIHN0YXRlLCBzdGF0ZVBhdGgpIHtcbiAgaWYgKCFmcyB8fCB0eXBlb2YgZnMucHVibGlzaCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuO1xuICBjb25zdCBwYXRoID0gc3RhdGVQYXRoIHx8IFNJREVDSEFJTl9TVEFURV9QQVRIO1xuICBjb25zdCBkb2MgPSB7XG4gICAgdmVyc2lvbjogc3RhdGUudmVyc2lvbiAhPSBudWxsID8gTnVtYmVyKHN0YXRlLnZlcnNpb24pIDogMSxcbiAgICBjbG9jazogTnVtYmVyKHN0YXRlLmNsb2NrKSB8fCAwLFxuICAgIGNvbnRlbnQ6IGpzb25TYWZlKHN0YXRlLmNvbnRlbnQgfHwge30pXG4gIH07XG4gIGF3YWl0IGZzLnB1Ymxpc2gocGF0aCwgZG9jKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGVyc2lzdFN0YXRlIChmcywgc3RhdGUpIHtcbiAgcmV0dXJuIHBlcnNpc3RTdGF0ZUF0KGZzLCBzdGF0ZSwgU0lERUNIQUlOX1NUQVRFX1BBVEgpO1xufVxuXG4vKipcbiAqIEVuc3VyZSBhIGNvbnRyYWN0IFN0YXRlY2hhaW4gZG9jdW1lbnQgZXhpc3RzIGZvciBhbiBhY2NlcHRlZCBDT05UUkFDVF9QVUJMSVNIIGlkLlxuICogQHBhcmFtIHsqfSBmc1xuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0SWRcbiAqIEByZXR1cm5zIHtQcm9taXNlPHsgcGF0aHM6IG9iamVjdCwgc3RhdGU6IFN0YXRlY2hhaW5TdGF0ZSwgY3JlYXRlZDogYm9vbGVhbiB9Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZW5zdXJlQ29udHJhY3RTdGF0ZWNoYWluIChmcywgY29udHJhY3RJZCkge1xuICBjb25zdCBwYXRocyA9IHN0b3JlUGF0aHNGb3JDb250cmFjdChjb250cmFjdElkKTtcbiAgbGV0IGV4aXN0ZWQgPSBmYWxzZTtcbiAgaWYgKGZzICYmIHR5cGVvZiBmcy5yZWFkRmlsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBleGlzdGVkID0gISFmcy5yZWFkRmlsZShwYXRocy5zdGF0ZSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgZXhpc3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBjb25zdCBzdGF0ZSA9IGxvYWRTdGF0ZUF0KGZzLCBwYXRocy5zdGF0ZSk7XG4gIGlmICghZXhpc3RlZCkge1xuICAgIGF3YWl0IHBlcnNpc3RTdGF0ZUF0KGZzLCBzdGF0ZSwgcGF0aHMuc3RhdGUpO1xuICB9XG4gIHJldHVybiB7IHBhdGhzLCBzdGF0ZSwgY3JlYXRlZDogIWV4aXN0ZWQgfTtcbn1cblxuZnVuY3Rpb24gbG9hZFNuYXBzaG90c0RvYyAoZnMpIHtcbiAgaWYgKCFmcyB8fCB0eXBlb2YgZnMucmVhZEZpbGUgIT09ICdmdW5jdGlvbicpIHJldHVybiB7IHZlcnNpb246IDEsIGJ5Q2xvY2s6IHt9IH07XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGUoU0lERUNIQUlOX1NOQVBTSE9UU19QQVRIKTtcbiAgICBpZiAoIXJhdykgcmV0dXJuIHsgdmVyc2lvbjogMSwgYnlDbG9jazoge30gfTtcbiAgICBjb25zdCBwYXJzZWQgPSB0eXBlb2YgcmF3ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmF3KSA6IEpTT04ucGFyc2UocmF3LnRvU3RyaW5nKCd1dGY4JykpO1xuICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnKSByZXR1cm4geyB2ZXJzaW9uOiAxLCBieUNsb2NrOiB7fSB9O1xuICAgIGNvbnN0IGJ5Q2xvY2sgPSBwYXJzZWQuYnlDbG9jayAmJiB0eXBlb2YgcGFyc2VkLmJ5Q2xvY2sgPT09ICdvYmplY3QnID8gcGFyc2VkLmJ5Q2xvY2sgOiB7fTtcbiAgICByZXR1cm4geyB2ZXJzaW9uOiAxLCBieUNsb2NrIH07XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4geyB2ZXJzaW9uOiAxLCBieUNsb2NrOiB7fSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRTbmFwc2hvdEZvckJlYWNvbkNsb2NrIChmcywgYmVhY29uQ2xvY2spIHtcbiAgY29uc3QgZG9jID0gbG9hZFNuYXBzaG90c0RvYyhmcyk7XG4gIGNvbnN0IGtleSA9IFN0cmluZyhiZWFjb25DbG9jayk7XG4gIGNvbnN0IHMgPSBkb2MuYnlDbG9ja1trZXldO1xuICBpZiAoIXMgfHwgdHlwZW9mIHMgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBOdW1iZXIocy52ZXJzaW9uKSB8fCAxLFxuICAgIGNsb2NrOiBOdW1iZXIocy5jbG9jaykgfHwgMCxcbiAgICBjb250ZW50OiBzLmNvbnRlbnQgJiYgdHlwZW9mIHMuY29udGVudCA9PT0gJ29iamVjdCcgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHMuY29udGVudCkpIDoge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gc2F2ZVNuYXBzaG90Rm9yQmVhY29uQ2xvY2tTeW5jIChmcywgYmVhY29uQ2xvY2ssIHN0YXRlKSB7XG4gIGlmICghZnMgfHwgdHlwZW9mIGZzLndyaXRlRmlsZSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBrZXkgPSBTdHJpbmcoYmVhY29uQ2xvY2spO1xuICBpZiAoIWtleSB8fCBrZXkgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGRvYyA9IGxvYWRTbmFwc2hvdHNEb2MoZnMpO1xuICBkb2MuYnlDbG9ja1trZXldID0ganNvblNhZmUoX2Nsb25lU3RhdGUoc3RhdGUpKTtcbiAgcmV0dXJuIGZzLndyaXRlRmlsZShTSURFQ0hBSU5fU05BUFNIT1RTX1BBVEgsIEpTT04uc3RyaW5naWZ5KGRvYywgbnVsbCwgMikpO1xufVxuXG5mdW5jdGlvbiBwcnVuZVNuYXBzaG90c0ZvclJlbW92ZWRCZWFjb25DbG9ja3NTeW5jIChmcywgcmVtb3ZlZEJlYWNvbkNsb2Nrcykge1xuICBpZiAoIWZzIHx8IHR5cGVvZiBmcy53cml0ZUZpbGUgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlbW92ZWRCZWFjb25DbG9ja3MpIHx8ICFyZW1vdmVkQmVhY29uQ2xvY2tzLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGRvYyA9IGxvYWRTbmFwc2hvdHNEb2MoZnMpO1xuICBmb3IgKGNvbnN0IGMgb2YgcmVtb3ZlZEJlYWNvbkNsb2Nrcykge1xuICAgIGNvbnN0IGsgPSBTdHJpbmcoYyk7XG4gICAgaWYgKGRvYy5ieUNsb2NrW2tdKSBkZWxldGUgZG9jLmJ5Q2xvY2tba107XG4gIH1cbiAgcmV0dXJuIGZzLndyaXRlRmlsZShTSURFQ0hBSU5fU05BUFNIT1RTX1BBVEgsIEpTT04uc3RyaW5naWZ5KGRvYywgbnVsbCwgMikpO1xufVxuXG5mdW5jdGlvbiBwcnVuZVNuYXBzaG90c0FmdGVyQmVhY29uQ2xvY2tTeW5jIChmcywgdGlwQmVhY29uQ2xvY2spIHtcbiAgaWYgKCFmcyB8fCB0eXBlb2YgZnMud3JpdGVGaWxlICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGRvYyA9IGxvYWRTbmFwc2hvdHNEb2MoZnMpO1xuICBjb25zdCB0aXAgPSBOdW1iZXIodGlwQmVhY29uQ2xvY2spO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh0aXApKSByZXR1cm4gdHJ1ZTtcbiAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGRvYy5ieUNsb2NrKSkge1xuICAgIGNvbnN0IG4gPSBOdW1iZXIoayk7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShuKSAmJiBuID4gdGlwKSBkZWxldGUgZG9jLmJ5Q2xvY2tba107XG4gIH1cbiAgcmV0dXJuIGZzLndyaXRlRmlsZShTSURFQ0hBSU5fU05BUFNIT1RTX1BBVEgsIEpTT04uc3RyaW5naWZ5KGRvYywgbnVsbCwgMikpO1xufVxuXG5mdW5jdGlvbiBsb2FkSm91cm5hbERvYyAoZnMpIHtcbiAgaWYgKCFmcyB8fCB0eXBlb2YgZnMucmVhZEZpbGUgIT09ICdmdW5jdGlvbicpIHJldHVybiB7IHZlcnNpb246IDEsIGVudHJpZXM6IFtdIH07XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGUoU0lERUNIQUlOX0pPVVJOQUxfUEFUSCk7XG4gICAgaWYgKCFyYXcpIHJldHVybiB7IHZlcnNpb246IDEsIGVudHJpZXM6IFtdIH07XG4gICAgY29uc3QgcGFyc2VkID0gdHlwZW9mIHJhdyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJhdykgOiBKU09OLnBhcnNlKHJhdy50b1N0cmluZygndXRmOCcpKTtcbiAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JykgcmV0dXJuIHsgdmVyc2lvbjogMSwgZW50cmllczogW10gfTtcbiAgICBjb25zdCBlbnRyaWVzID0gQXJyYXkuaXNBcnJheShwYXJzZWQuZW50cmllcykgPyBwYXJzZWQuZW50cmllcyA6IFtdO1xuICAgIHJldHVybiB7IHZlcnNpb246IDEsIGVudHJpZXMgfTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiB7IHZlcnNpb246IDEsIGVudHJpZXM6IFtdIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBlbmQgYSBwYXRjaCB0cmFuc2l0aW9uIGZvciBhdWRpdCAvIHVuc2VhbGVkIHJlY292ZXJ5LlxuICogQHJldHVybnMge29iamVjdHxudWxsfSB0aGUgZW50cnkgd3JpdHRlblxuICovXG5mdW5jdGlvbiBhcHBlbmRKb3VybmFsRW50cnlTeW5jIChmcywgZW50cnkpIHtcbiAgaWYgKCFmcyB8fCB0eXBlb2YgZnMud3JpdGVGaWxlICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgZG9jID0gbG9hZEpvdXJuYWxEb2MoZnMpO1xuICBjb25zdCByb3cgPSB7XG4gICAgc2VxOiBkb2MuZW50cmllcy5sZW5ndGggKyAxLFxuICAgIGF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgYmFzaXNDbG9jazogTnVtYmVyKGVudHJ5LmJhc2lzQ2xvY2spIHx8IDAsXG4gICAgY2xvY2s6IE51bWJlcihlbnRyeS5jbG9jaykgfHwgMCxcbiAgICBiYXNpc0RpZ2VzdDogU3RyaW5nKGVudHJ5LmJhc2lzRGlnZXN0IHx8ICcnKSxcbiAgICBuZXdEaWdlc3Q6IFN0cmluZyhlbnRyeS5uZXdEaWdlc3QgfHwgJycpLFxuICAgIHBhdGNoRGlnZXN0OiBTdHJpbmcoZW50cnkucGF0Y2hEaWdlc3QgfHwgJycpLFxuICAgIHBhdGNoZXM6IGpzb25TYWZlKGVudHJ5LnBhdGNoZXMgfHwgW10pLFxuICAgIHNlYWxlZEJlYWNvbkNsb2NrOiBlbnRyeS5zZWFsZWRCZWFjb25DbG9jayAhPSBudWxsID8gTnVtYmVyKGVudHJ5LnNlYWxlZEJlYWNvbkNsb2NrKSA6IG51bGxcbiAgfTtcbiAgZG9jLmVudHJpZXMucHVzaChyb3cpO1xuICBmcy53cml0ZUZpbGUoU0lERUNIQUlOX0pPVVJOQUxfUEFUSCwgSlNPTi5zdHJpbmdpZnkoZG9jLCBudWxsLCAyKSk7XG4gIHJldHVybiByb3c7XG59XG5cbi8qKlxuICogTWFyayBqb3VybmFsIHJvd3Mgd2l0aCBzaWRlY2hhaW4gY2xvY2sgPD0gc2VhbGVkU2lkZWNoYWluQ2xvY2sgYXMgc2VhbGVkIHRvIHRoaXMgYmVhY29uIGVwb2NoLlxuICovXG5mdW5jdGlvbiBzZWFsSm91cm5hbFRocm91Z2hTaWRlY2hhaW5DbG9ja1N5bmMgKGZzLCBzZWFsZWRTaWRlY2hhaW5DbG9jaywgYmVhY29uQ2xvY2spIHtcbiAgaWYgKCFmcyB8fCB0eXBlb2YgZnMud3JpdGVGaWxlICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHRpcCA9IE51bWJlcihzZWFsZWRTaWRlY2hhaW5DbG9jayk7XG4gIGNvbnN0IGJjID0gTnVtYmVyKGJlYWNvbkNsb2NrKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGlwKSB8fCAhTnVtYmVyLmlzRmluaXRlKGJjKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBkb2MgPSBsb2FkSm91cm5hbERvYyhmcyk7XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGZvciAoY29uc3QgZSBvZiBkb2MuZW50cmllcykge1xuICAgIGlmIChlLnNlYWxlZEJlYWNvbkNsb2NrID09IG51bGwgJiYgTnVtYmVyKGUuY2xvY2spIDw9IHRpcCkge1xuICAgICAgZS5zZWFsZWRCZWFjb25DbG9jayA9IGJjO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmICghY2hhbmdlZCkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmcy53cml0ZUZpbGUoU0lERUNIQUlOX0pPVVJOQUxfUEFUSCwgSlNPTi5zdHJpbmdpZnkoZG9jLCBudWxsLCAyKSk7XG59XG5cbi8qKlxuICogRHJvcCBqb3VybmFsIGVudHJpZXMgc2VhbGVkIHRvIHJlbW92ZWQgYmVhY29uIGNsb2Nrczsga2VlcCB1bnNlYWxlZCBhbmQgc3RpbGwtdmFsaWQgc2VhbHMuXG4gKi9cbmZ1bmN0aW9uIHBydW5lSm91cm5hbEZvclJlbW92ZWRCZWFjb25DbG9ja3NTeW5jIChmcywgcmVtb3ZlZEJlYWNvbkNsb2Nrcykge1xuICBpZiAoIWZzIHx8IHR5cGVvZiBmcy53cml0ZUZpbGUgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlbW92ZWRCZWFjb25DbG9ja3MpIHx8ICFyZW1vdmVkQmVhY29uQ2xvY2tzLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHJlbW92ZWQgPSBuZXcgU2V0KHJlbW92ZWRCZWFjb25DbG9ja3MubWFwKChjKSA9PiBOdW1iZXIoYykpLmZpbHRlcigobikgPT4gTnVtYmVyLmlzRmluaXRlKG4pKSk7XG4gIGNvbnN0IGRvYyA9IGxvYWRKb3VybmFsRG9jKGZzKTtcbiAgZG9jLmVudHJpZXMgPSBkb2MuZW50cmllcy5maWx0ZXIoKGUpID0+IHtcbiAgICBpZiAoZS5zZWFsZWRCZWFjb25DbG9jayA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gIXJlbW92ZWQuaGFzKE51bWJlcihlLnNlYWxlZEJlYWNvbkNsb2NrKSk7XG4gIH0pO1xuICByZXR1cm4gZnMud3JpdGVGaWxlKFNJREVDSEFJTl9KT1VSTkFMX1BBVEgsIEpTT04uc3RyaW5naWZ5KGRvYywgbnVsbCwgMikpO1xufVxuXG4vKipcbiAqIFJlcGxheSB1bnNlYWxlZCBqb3VybmFsIGVudHJpZXMgdGhhdCBidWlsZCBvbiBgYmFzaXNgIChzZXF1ZW50aWFsIGJ5IGNsb2NrKS5cbiAqIEByZXR1cm5zIHt7IHN0YXRlOiBTdGF0ZWNoYWluU3RhdGUsIGFwcGxpZWQ6IG51bWJlciB9fVxuICovXG5mdW5jdGlvbiByZXBsYXlVbnNlYWxlZEpvdXJuYWxFbnRyaWVzIChiYXNpcywgam91cm5hbEVudHJpZXMsIHBvbGljeSkge1xuICBsZXQgc3RhdGUgPSBfY2xvbmVTdGF0ZShiYXNpcyk7XG4gIGxldCBhcHBsaWVkID0gMDtcbiAgY29uc3QgcGVuZGluZyA9IChBcnJheS5pc0FycmF5KGpvdXJuYWxFbnRyaWVzKSA/IGpvdXJuYWxFbnRyaWVzIDogW10pXG4gICAgLmZpbHRlcigoZSkgPT4gZSAmJiBlLnNlYWxlZEJlYWNvbkNsb2NrID09IG51bGwpXG4gICAgLnNvcnQoKGEsIGIpID0+IE51bWJlcihhLmNsb2NrKSAtIE51bWJlcihiLmNsb2NrKSk7XG4gIGZvciAoY29uc3QgZSBvZiBwZW5kaW5nKSB7XG4gICAgaWYgKE51bWJlcihlLmJhc2lzQ2xvY2spICE9PSBOdW1iZXIoc3RhdGUuY2xvY2spKSBjb250aW51ZTtcbiAgICBjb25zdCBkaWcgPSBzdGF0ZURpZ2VzdChzdGF0ZSk7XG4gICAgaWYgKGUuYmFzaXNEaWdlc3QgJiYgZS5iYXNpc0RpZ2VzdCAhPT0gZGlnKSBjb250aW51ZTtcbiAgICBjb25zdCByID0gYXBwbHlQYXRjaGVzVG9TdGF0ZShzdGF0ZSwgZS5wYXRjaGVzLCBwb2xpY3kpO1xuICAgIGlmICghci5vaykgYnJlYWs7XG4gICAgc3RhdGUgPSByLnN0YXRlO1xuICAgIGFwcGxpZWQrKztcbiAgfVxuICByZXR1cm4geyBzdGF0ZSwgYXBwbGllZCB9O1xufVxuXG4vKipcbiAqIFVuaWZpZWQgdGlwIHJlc3RvcmU6IHNuYXBzaG90IOKGkiBkaWdlc3QtbWF0Y2ggbG9hZGVkIFNUQVRFIOKGkiBnZW5lc2lzLlxuICogT3B0aW9uYWxseSByZXBsYXkgdW5zZWFsZWQgam91cm5hbCBlbnRyaWVzIGFmdGVyIHRoZSBzZWFsZWQgdGlwLlxuICpcbiAqIEBwYXJhbSB7e1xuICogICB0aXBQYXlsb2FkOiBvYmplY3R8bnVsbCxcbiAqICAgc25hcHNob3Q6IFN0YXRlY2hhaW5TdGF0ZXxudWxsLFxuICogICBsb2FkZWRTdGF0ZTogU3RhdGVjaGFpblN0YXRlfG51bGwsXG4gKiAgIGpvdXJuYWxFbnRyaWVzPzogb2JqZWN0W10sXG4gKiAgIHBvbGljeT86IFN0YXRlY2hhaW5QYXRoUG9saWN5fG51bGwsXG4gKiAgIHJlcGxheVVuc2VhbGVkPzogYm9vbGVhblxuICogfX0gYXJnc1xuICogQHJldHVybnMge3tcbiAqICAgc3RhdGU6IFN0YXRlY2hhaW5TdGF0ZSxcbiAqICAgc291cmNlOiAnc25hcHNob3QnfCdkaWdlc3QtbWF0Y2gnfCdnZW5lc2lzJyxcbiAqICAgdW5zZWFsZWRBcHBsaWVkOiBudW1iZXIsXG4gKiAgIHdhcm5pbmc/OiBzdHJpbmdcbiAqIH19XG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTdGF0ZUZvckJlYWNvblRpcCAoYXJncyA9IHt9KSB7XG4gIGNvbnN0IHRpcFBheWxvYWQgPSBhcmdzLnRpcFBheWxvYWQgfHwgbnVsbDtcbiAgY29uc3Qgc25hcHNob3QgPSBhcmdzLnNuYXBzaG90IHx8IG51bGw7XG4gIGNvbnN0IGxvYWRlZFN0YXRlID0gYXJncy5sb2FkZWRTdGF0ZSB8fCBudWxsO1xuICBjb25zdCByZXBsYXkgPSBhcmdzLnJlcGxheVVuc2VhbGVkICE9PSBmYWxzZTtcbiAgY29uc3QgcG9saWN5ID0gYXJncy5wb2xpY3kgfHwgbnVsbDtcbiAgY29uc3Qgam91cm5hbEVudHJpZXMgPSBhcmdzLmpvdXJuYWxFbnRyaWVzIHx8IFtdO1xuXG4gIGxldCBzdGF0ZSA9IG51bGw7XG4gIGxldCBzb3VyY2UgPSAnZ2VuZXNpcyc7XG4gIGxldCB3YXJuaW5nO1xuXG4gIGlmIChzbmFwc2hvdCAmJiB0eXBlb2Ygc25hcHNob3QgPT09ICdvYmplY3QnKSB7XG4gICAgc3RhdGUgPSBfY2xvbmVTdGF0ZShzbmFwc2hvdCk7XG4gICAgc291cmNlID0gJ3NuYXBzaG90JztcbiAgfSBlbHNlIGlmIChsb2FkZWRTdGF0ZSAmJiB0aXBQYXlsb2FkICYmIHRpcFBheWxvYWQuc2lkZWNoYWluICYmIHRpcFBheWxvYWQuc2lkZWNoYWluLnN0YXRlRGlnZXN0KSB7XG4gICAgY29uc3QgZGlnID0gc3RhdGVEaWdlc3QobG9hZGVkU3RhdGUpO1xuICAgIGlmIChkaWcgPT09IFN0cmluZyh0aXBQYXlsb2FkLnNpZGVjaGFpbi5zdGF0ZURpZ2VzdCkpIHtcbiAgICAgIHN0YXRlID0gX2Nsb25lU3RhdGUobG9hZGVkU3RhdGUpO1xuICAgICAgc291cmNlID0gJ2RpZ2VzdC1tYXRjaCc7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFzdGF0ZSkge1xuICAgIHN0YXRlID0gY3JlYXRlSW5pdGlhbFN0YXRlKCk7XG4gICAgc291cmNlID0gJ2dlbmVzaXMnO1xuICAgIGlmICh0aXBQYXlsb2FkICYmIHRpcFBheWxvYWQuY2xvY2sgIT0gbnVsbCkge1xuICAgICAgd2FybmluZyA9IGBubyBzbmFwc2hvdCBmb3IgYmVhY29uIGNsb2NrICR7dGlwUGF5bG9hZC5jbG9ja307IHJlc2V0IHRvIGdlbmVzaXNgO1xuICAgIH1cbiAgfVxuXG4gIGxldCB1bnNlYWxlZEFwcGxpZWQgPSAwO1xuICBpZiAocmVwbGF5ICYmIGpvdXJuYWxFbnRyaWVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHIgPSByZXBsYXlVbnNlYWxlZEpvdXJuYWxFbnRyaWVzKHN0YXRlLCBqb3VybmFsRW50cmllcywgcG9saWN5KTtcbiAgICBzdGF0ZSA9IHIuc3RhdGU7XG4gICAgdW5zZWFsZWRBcHBsaWVkID0gci5hcHBsaWVkO1xuICB9XG5cbiAgcmV0dXJuIHsgc3RhdGUsIHNvdXJjZSwgdW5zZWFsZWRBcHBsaWVkLCB3YXJuaW5nIH07XG59XG5cbi8qKlxuICogU2VyaWFsaXplIGFzeW5jIHdvcmsgb24gYSBzaW5nbGUgY2hhaW4gKHBhdGNoIHN1Ym1pdHMsIHJlb3JnIHZzIHBhdGNoIHJhY2VzKS5cbiAqIEByZXR1cm5zIHsoZm46ICgpID0+IFByb21pc2U8Kj4pID0+IFByb21pc2U8Kj59XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNlcmlhbGl6ZVF1ZXVlICgpIHtcbiAgbGV0IHRhaWwgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJ1blNlcmlhbGl6ZWQgKGZuKSB7XG4gICAgY29uc3QgbmV4dCA9IHRhaWwudGhlbigoKSA9PiBmbigpKTtcbiAgICAvLyBLZWVwIHF1ZXVlIGFsaXZlIGFmdGVyIHJlamVjdGlvbnNcbiAgICB0YWlsID0gbmV4dC50aGVuKCgpID0+IHVuZGVmaW5lZCwgKCkgPT4gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBHZW5lcmljTWVzc2FnZSAvIGFjdGl2aXR5IEpTT04gYm9keSBmb3IgYSBzdGF0ZWNoYWluIHBhdGNoIHByb3Bvc2FsLlxuICogQHBhcmFtIHt7IGJhc2lzQ2xvY2s6IG51bWJlciwgYmFzaXNEaWdlc3Q6IHN0cmluZywgcGF0Y2hlczogb2JqZWN0W10sIGZlZGVyYXRpb25XaXRuZXNzPzogb2JqZWN0IH19IHByb3Bvc2FsXG4gKi9cbmZ1bmN0aW9uIGVuY29kZVNpZGVjaGFpblN0YXRlUGF0Y2hNZXNzYWdlIChwcm9wb3NhbCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFNJREVDSEFJTl9TVEFURV9QQVRDSF9UWVBFLFxuICAgIHZlcnNpb246IDEsXG4gICAga2luZDogU0lERUNIQUlOX1BBVENIX0tJTkQsXG4gICAgYmFzaXNDbG9jazogTnVtYmVyKHByb3Bvc2FsLmJhc2lzQ2xvY2spLFxuICAgIGJhc2lzRGlnZXN0OiBTdHJpbmcocHJvcG9zYWwuYmFzaXNEaWdlc3QgfHwgJycpLFxuICAgIHBhdGNoZXM6IGpzb25TYWZlKHByb3Bvc2FsLnBhdGNoZXMgfHwgW10pLFxuICAgIGZlZGVyYXRpb25XaXRuZXNzOiBwcm9wb3NhbC5mZWRlcmF0aW9uV2l0bmVzcyB8fCBudWxsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAqIEByZXR1cm5zIHt7IG9rOiBib29sZWFuLCBwcm9wb3NhbD86IG9iamVjdCwgZXJyb3I/OiBzdHJpbmcgfX1cbiAqL1xuZnVuY3Rpb24gcGFyc2VTaWRlY2hhaW5TdGF0ZVBhdGNoTWVzc2FnZSAoYm9keSkge1xuICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkgIT09ICdvYmplY3QnKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnYm9keSBtdXN0IGJlIGFuIG9iamVjdCcgfTtcbiAgY29uc3QgdHlwZSA9IGJvZHkudHlwZSB8fCBib2R5WydAdHlwZSddO1xuICBpZiAodHlwZSAmJiB0eXBlICE9PSBTSURFQ0hBSU5fU1RBVEVfUEFUQ0hfVFlQRSAmJiBib2R5LmtpbmQgIT09IFNJREVDSEFJTl9QQVRDSF9LSU5EKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ25vdCBhIFNJREVDSEFJTl9TVEFURV9QQVRDSCBtZXNzYWdlJyB9O1xuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheShib2R5LnBhdGNoZXMpIHx8ICFib2R5LnBhdGNoZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ3BhdGNoZXMgcmVxdWlyZWQnIH07XG4gIH1cbiAgY29uc3QgYmFzaXNDbG9jayA9IGJvZHkuYmFzaXNDbG9jayAhPSBudWxsID8gTnVtYmVyKGJvZHkuYmFzaXNDbG9jaykgOiBOYU47XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGJhc2lzQ2xvY2spKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnYmFzaXNDbG9jayByZXF1aXJlZCcgfTtcbiAgcmV0dXJuIHtcbiAgICBvazogdHJ1ZSxcbiAgICBwcm9wb3NhbDoge1xuICAgICAgYmFzaXNDbG9jayxcbiAgICAgIGJhc2lzRGlnZXN0OiBib2R5LmJhc2lzRGlnZXN0ICE9IG51bGwgPyBTdHJpbmcoYm9keS5iYXNpc0RpZ2VzdCkgOiAnJyxcbiAgICAgIHBhdGNoZXM6IGJvZHkucGF0Y2hlcyxcbiAgICAgIGZlZGVyYXRpb25XaXRuZXNzOiBib2R5LmZlZGVyYXRpb25XaXRuZXNzIHx8IG51bGxcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogRmFpbC1jbG9zZWQgY2hlY2sgb2YgZmVkZXJhdGlvbiB3aXRuZXNzZXMgb24gYSBsb2FkZWQgYmVhY29uIGVwb2NoIGNoYWluLlxuICogQHBhcmFtIHtBcnJheTx7IHR5cGU/OiBzdHJpbmcsIHBheWxvYWQ/OiBvYmplY3QsIGZlZGVyYXRpb25XaXRuZXNzPzogb2JqZWN0IH0+fSBlcG9jaENoYWluXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSB2YWxpZGF0b3JzXG4gKiBAcGFyYW0ge251bWJlcn0gdGhyZXNob2xkXG4gKiBAcmV0dXJucyB7eyBvazogYm9vbGVhbiwgZmFpbHVyZXM6IEFycmF5PHsgY2xvY2s6ICosIHJlYXNvbjogc3RyaW5nIH0+IH19XG4gKi9cbmZ1bmN0aW9uIHZlcmlmeUVwb2NoQ2hhaW5GZWRlcmF0aW9uV2l0bmVzc2VzIChlcG9jaENoYWluLCB2YWxpZGF0b3JzLCB0aHJlc2hvbGQpIHtcbiAgY29uc3QgZmFpbHVyZXMgPSBbXTtcbiAgY29uc3QgcHVicyA9IEFycmF5LmlzQXJyYXkodmFsaWRhdG9ycykgPyB2YWxpZGF0b3JzIDogW107XG4gIGlmICghcHVicy5sZW5ndGgpIHJldHVybiB7IG9rOiB0cnVlLCBmYWlsdXJlcyB9O1xuICBjb25zdCB0aHIgPSBNYXRoLm1heCgxLCBOdW1iZXIodGhyZXNob2xkKSB8fCAxKTtcbiAgY29uc3QgY2hhaW4gPSBBcnJheS5pc0FycmF5KGVwb2NoQ2hhaW4pID8gZXBvY2hDaGFpbiA6IFtdO1xuICBmb3IgKGNvbnN0IGUgb2YgY2hhaW4pIHtcbiAgICBpZiAoIWUgfHwgZS50eXBlICE9PSAnQkVBQ09OX0VQT0NIJyB8fCAhZS5wYXlsb2FkKSBjb250aW51ZTtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShzaWduaW5nU3RyaW5nRm9yQmVhY29uRXBvY2goZS5wYXlsb2FkKSwgJ3V0ZjgnKTtcbiAgICBjb25zdCBvayA9IHZlcmlmeUZlZGVyYXRpb25XaXRuZXNzT25NZXNzYWdlKGJ1ZiwgZS5mZWRlcmF0aW9uV2l0bmVzcywgcHVicywgdGhyKTtcbiAgICBpZiAoIW9rKSB7XG4gICAgICBmYWlsdXJlcy5wdXNoKHtcbiAgICAgICAgY2xvY2s6IGUucGF5bG9hZC5jbG9jayxcbiAgICAgICAgcmVhc29uOiAnZmVkZXJhdGlvbldpdG5lc3MgbWlzc2luZyBvciBpbnZhbGlkJ1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IG9rOiBmYWlsdXJlcy5sZW5ndGggPT09IDAsIGZhaWx1cmVzIH07XG59XG5cbi8qKlxuICogT3BlcmF0b3IvVUkgc3VtbWFyeSBvZiB0aGUgYXBwZW5kLW9ubHkgam91cm5hbCAobm8gZnVsbCBwYXRjaCBib2RpZXMgYnkgZGVmYXVsdCkuXG4gKiBAcGFyYW0geyp9IGZzXG4gKiBAcGFyYW0ge3sgbGltaXQ/OiBudW1iZXIsIGluY2x1ZGVQYXRjaGVzPzogYm9vbGVhbiB9fSBbb3B0c11cbiAqL1xuZnVuY3Rpb24gc3VtbWFyaXplSm91cm5hbCAoZnMsIG9wdHMgPSB7fSkge1xuICBjb25zdCBkb2MgPSBsb2FkSm91cm5hbERvYyhmcyk7XG4gIGNvbnN0IGxpbWl0ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oNTAwLCBOdW1iZXIob3B0cy5saW1pdCkgfHwgNTApKTtcbiAgY29uc3QgaW5jbHVkZVBhdGNoZXMgPSAhIW9wdHMuaW5jbHVkZVBhdGNoZXM7XG4gIGNvbnN0IHVuc2VhbGVkQ291bnQgPSBkb2MuZW50cmllcy5maWx0ZXIoKGUpID0+IGUgJiYgZS5zZWFsZWRCZWFjb25DbG9jayA9PSBudWxsKS5sZW5ndGg7XG4gIGNvbnN0IHNsaWNlID0gZG9jLmVudHJpZXMuc2xpY2UoLWxpbWl0KS5yZXZlcnNlKCk7XG4gIGNvbnN0IGVudHJpZXMgPSBzbGljZS5tYXAoKGUpID0+IHtcbiAgICBjb25zdCByb3cgPSB7XG4gICAgICBzZXE6IGUuc2VxLFxuICAgICAgYXQ6IGUuYXQgfHwgbnVsbCxcbiAgICAgIGJhc2lzQ2xvY2s6IE51bWJlcihlLmJhc2lzQ2xvY2spIHx8IDAsXG4gICAgICBjbG9jazogTnVtYmVyKGUuY2xvY2spIHx8IDAsXG4gICAgICBzZWFsZWRCZWFjb25DbG9jazogZS5zZWFsZWRCZWFjb25DbG9jayAhPSBudWxsID8gTnVtYmVyKGUuc2VhbGVkQmVhY29uQ2xvY2spIDogbnVsbCxcbiAgICAgIGJhc2lzRGlnZXN0OiBlLmJhc2lzRGlnZXN0IHx8IG51bGwsXG4gICAgICBuZXdEaWdlc3Q6IGUubmV3RGlnZXN0IHx8IG51bGwsXG4gICAgICBwYXRjaERpZ2VzdDogZS5wYXRjaERpZ2VzdCB8fCBudWxsLFxuICAgICAgb3BDb3VudDogQXJyYXkuaXNBcnJheShlLnBhdGNoZXMpID8gZS5wYXRjaGVzLmxlbmd0aCA6IDAsXG4gICAgICBwYXRoczogQXJyYXkuaXNBcnJheShlLnBhdGNoZXMpXG4gICAgICAgID8gZS5wYXRjaGVzLm1hcCgocCkgPT4gKHAgJiYgcC5wYXRoICE9IG51bGwgPyBTdHJpbmcocC5wYXRoKSA6ICcnKSkuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsIDEyKVxuICAgICAgICA6IFtdXG4gICAgfTtcbiAgICBpZiAoaW5jbHVkZVBhdGNoZXMpIHJvdy5wYXRjaGVzID0gZS5wYXRjaGVzIHx8IFtdO1xuICAgIHJldHVybiByb3c7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHZlcnNpb246IDEsXG4gICAgcGF0aDogU0lERUNIQUlOX0pPVVJOQUxfUEFUSCxcbiAgICBlbnRyeUNvdW50OiBkb2MuZW50cmllcy5sZW5ndGgsXG4gICAgdW5zZWFsZWRDb3VudCxcbiAgICBlbnRyaWVzXG4gIH07XG59XG5cbi8qKlxuICogT3BlcmF0b3IvVUkgbGlzdCBvZiBzZWFsZWQgc25hcHNob3RzIGtleWVkIGJ5IGJlYWNvbiBjbG9jayAoZGlnZXN0cywgbm90IGZ1bGwgY29udGVudCkuXG4gKiBAcGFyYW0geyp9IGZzXG4gKiBAcGFyYW0ge3sgbGltaXQ/OiBudW1iZXIsIGluY2x1ZGVDb250ZW50PzogYm9vbGVhbiB9fSBbb3B0c11cbiAqL1xuZnVuY3Rpb24gc3VtbWFyaXplU25hcHNob3RzIChmcywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGRvYyA9IGxvYWRTbmFwc2hvdHNEb2MoZnMpO1xuICBjb25zdCBsaW1pdCA9IE1hdGgubWF4KDEsIE1hdGgubWluKDUwMCwgTnVtYmVyKG9wdHMubGltaXQpIHx8IDUwKSk7XG4gIGNvbnN0IGluY2x1ZGVDb250ZW50ID0gISFvcHRzLmluY2x1ZGVDb250ZW50O1xuICBjb25zdCBjbG9ja3MgPSBPYmplY3Qua2V5cyhkb2MuYnlDbG9jaylcbiAgICAubWFwKChrKSA9PiBOdW1iZXIoaykpXG4gICAgLmZpbHRlcigobikgPT4gTnVtYmVyLmlzRmluaXRlKG4pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBiIC0gYSlcbiAgICAuc2xpY2UoMCwgbGltaXQpO1xuICBjb25zdCBzbmFwc2hvdHMgPSBjbG9ja3MubWFwKChiZWFjb25DbG9jaykgPT4ge1xuICAgIGNvbnN0IHMgPSBkb2MuYnlDbG9ja1tTdHJpbmcoYmVhY29uQ2xvY2spXTtcbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIHZlcnNpb246IE51bWJlcihzICYmIHMudmVyc2lvbikgfHwgMSxcbiAgICAgIGNsb2NrOiBOdW1iZXIocyAmJiBzLmNsb2NrKSB8fCAwLFxuICAgICAgY29udGVudDogKHMgJiYgcy5jb250ZW50ICYmIHR5cGVvZiBzLmNvbnRlbnQgPT09ICdvYmplY3QnKSA/IHMuY29udGVudCA6IHt9XG4gICAgfTtcbiAgICBjb25zdCByb3cgPSB7XG4gICAgICBiZWFjb25DbG9jayxcbiAgICAgIHNpZGVjaGFpbkNsb2NrOiBzdGF0ZS5jbG9jayxcbiAgICAgIHN0YXRlRGlnZXN0OiBzdGF0ZURpZ2VzdChzdGF0ZSlcbiAgICB9O1xuICAgIGlmIChpbmNsdWRlQ29udGVudCkge1xuICAgICAgcm93LmNvbnRlbnQgPSBzdGF0ZS5jb250ZW50O1xuICAgICAgcm93LnZlcnNpb24gPSBzdGF0ZS52ZXJzaW9uO1xuICAgIH1cbiAgICByZXR1cm4gcm93O1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiAxLFxuICAgIHBhdGg6IFNJREVDSEFJTl9TTkFQU0hPVFNfUEFUSCxcbiAgICBzbmFwc2hvdENvdW50OiBPYmplY3Qua2V5cyhkb2MuYnlDbG9jaykubGVuZ3RoLFxuICAgIHNuYXBzaG90c1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU0lERUNIQUlOX1NUQVRFX1BBVEgsXG4gIFNJREVDSEFJTl9TTkFQU0hPVFNfUEFUSCxcbiAgU0lERUNIQUlOX0pPVVJOQUxfUEFUSCxcbiAgU0lERUNIQUlOX1BBVENIX0tJTkQsXG4gIFNJREVDSEFJTl9TVEFURV9QQVRDSF9UWVBFLFxuICBzaWduaW5nU3RyaW5nRm9yU2lkZWNoYWluU3RhdGVQYXRjaCxcbiAgcGF0Y2hDb21taXRtZW50RGlnZXN0SGV4LFxuICBjcmVhdGVJbml0aWFsU3RhdGUsXG4gIHN0YXRlRGlnZXN0LFxuICBwYXJzZVN0YXRlY2hhaW5QYXRoUG9saWN5LFxuICB2YWxpZGF0ZVBhdGNoZXNBZ2FpbnN0UG9saWN5LFxuICBhcHBseVBhdGNoZXNUb1N0YXRlLFxuICBsb2FkU3RhdGUsXG4gIHBlcnNpc3RTdGF0ZSxcbiAgbG9hZFN0YXRlQXQsXG4gIHBlcnNpc3RTdGF0ZUF0LFxuICBub3JtYWxpemVDb250cmFjdElkLFxuICBzdG9yZVBhdGhzRm9yQ29udHJhY3QsXG4gIHBhcmVudFNlYWxQYXRoLFxuICBuYW1lc3BhY2VIZWFkRnJvbVN0YXRlLFxuICBwYXRjaGVzRm9yTmFtZXNwYWNlSGVhZCxcbiAgZW5zdXJlQ29udHJhY3RTdGF0ZWNoYWluLFxuICBsb2FkU25hcHNob3RGb3JCZWFjb25DbG9jayxcbiAgc2F2ZVNuYXBzaG90Rm9yQmVhY29uQ2xvY2tTeW5jLFxuICBwcnVuZVNuYXBzaG90c0ZvclJlbW92ZWRCZWFjb25DbG9ja3NTeW5jLFxuICBwcnVuZVNuYXBzaG90c0FmdGVyQmVhY29uQ2xvY2tTeW5jLFxuICBsb2FkSm91cm5hbERvYyxcbiAgYXBwZW5kSm91cm5hbEVudHJ5U3luYyxcbiAgc2VhbEpvdXJuYWxUaHJvdWdoU2lkZWNoYWluQ2xvY2tTeW5jLFxuICBwcnVuZUpvdXJuYWxGb3JSZW1vdmVkQmVhY29uQ2xvY2tzU3luYyxcbiAgcmVwbGF5VW5zZWFsZWRKb3VybmFsRW50cmllcyxcbiAgcmVzb2x2ZVN0YXRlRm9yQmVhY29uVGlwLFxuICBjcmVhdGVTZXJpYWxpemVRdWV1ZSxcbiAgZW5jb2RlU2lkZWNoYWluU3RhdGVQYXRjaE1lc3NhZ2UsXG4gIHBhcnNlU2lkZWNoYWluU3RhdGVQYXRjaE1lc3NhZ2UsXG4gIHZlcmlmeUVwb2NoQ2hhaW5GZWRlcmF0aW9uV2l0bmVzc2VzLFxuICBzdW1tYXJpemVKb3VybmFsLFxuICBzdW1tYXJpemVTbmFwc2hvdHNcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/sidechainState.js\n\n}")},"./node_modules/@fabric/core/functions/sipa/bech32.js"(module){"use strict";eval("{// Copyright (c) 2017, 2021 Pieter Wuille\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n// Upstream: https://github.com/sipa/bech32/blob/master/ref/javascript/bech32.js\n\n\n\nvar CHARSET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\nvar GENERATOR = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\n\nconst encodings = {\n BECH32: 'bech32',\n BECH32M: 'bech32m'\n};\n\nmodule.exports = {\n decode: decode,\n encode: encode,\n encodings: encodings\n};\n\nfunction getEncodingConst (enc) {\n if (enc == encodings.BECH32) {\n return 1;\n } else if (enc == encodings.BECH32M) {\n return 0x2bc830a3;\n } else {\n return null;\n }\n}\n\nfunction polymod (values) {\n var chk = 1;\n for (var p = 0; p < values.length; ++p) {\n var top = chk >> 25;\n chk = (chk & 0x1ffffff) << 5 ^ values[p];\n for (var i = 0; i < 5; ++i) {\n if ((top >> i) & 1) {\n chk ^= GENERATOR[i];\n }\n }\n }\n return chk;\n}\n\nfunction hrpExpand (hrp) {\n var ret = [];\n var p;\n for (p = 0; p < hrp.length; ++p) {\n ret.push(hrp.charCodeAt(p) >> 5);\n }\n ret.push(0);\n for (p = 0; p < hrp.length; ++p) {\n ret.push(hrp.charCodeAt(p) & 31);\n }\n return ret;\n}\n\nfunction verifyChecksum (hrp, data, enc) {\n return polymod(hrpExpand(hrp).concat(data)) === getEncodingConst(enc);\n}\n\nfunction createChecksum (hrp, data, enc) {\n var values = hrpExpand(hrp).concat(data).concat([0, 0, 0, 0, 0, 0]);\n var mod = polymod(values) ^ getEncodingConst(enc);\n var ret = [];\n for (var p = 0; p < 6; ++p) {\n ret.push((mod >> 5 * (5 - p)) & 31);\n }\n return ret;\n}\n\nfunction encode (hrp, data, enc) {\n var combined = data.concat(createChecksum(hrp, data, enc));\n var ret = hrp + '1';\n for (var p = 0; p < combined.length; ++p) {\n ret += CHARSET.charAt(combined[p]);\n }\n return ret;\n}\n\nfunction decode (bechString, enc) {\n var p;\n var has_lower = false;\n var has_upper = false;\n for (p = 0; p < bechString.length; ++p) {\n if (bechString.charCodeAt(p) < 33 || bechString.charCodeAt(p) > 126) {\n return null;\n }\n if (bechString.charCodeAt(p) >= 97 && bechString.charCodeAt(p) <= 122) {\n has_lower = true;\n }\n if (bechString.charCodeAt(p) >= 65 && bechString.charCodeAt(p) <= 90) {\n has_upper = true;\n }\n }\n if (has_lower && has_upper) {\n return null;\n }\n bechString = bechString.toLowerCase();\n var pos = bechString.lastIndexOf('1');\n if (pos < 1 || pos + 7 > bechString.length || bechString.length > 90) {\n return null;\n }\n var hrp = bechString.substring(0, pos);\n var data = [];\n for (p = pos + 1; p < bechString.length; ++p) {\n var d = CHARSET.indexOf(bechString.charAt(p));\n if (d === -1) {\n return null;\n }\n data.push(d);\n }\n if (!verifyChecksum(hrp, data, enc)) {\n return null;\n }\n return { hrp: hrp, data: data.slice(0, data.length - 6) };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9zaXBhL2JlY2gzMi5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQixtQkFBbUI7QUFDckM7QUFDQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLGNBQWMsZ0JBQWdCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixPQUFPO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLHVCQUF1QjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHVCQUF1QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvZnVuY3Rpb25zL3NpcGEvYmVjaDMyLmpzP2I0YmQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE3LCAyMDIxIFBpZXRlciBXdWlsbGVcbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuLy9cbi8vIFVwc3RyZWFtOiBodHRwczovL2dpdGh1Yi5jb20vc2lwYS9iZWNoMzIvYmxvYi9tYXN0ZXIvcmVmL2phdmFzY3JpcHQvYmVjaDMyLmpzXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIENIQVJTRVQgPSAncXB6cnk5eDhnZjJ0dmR3MHMzam41NGtoY2U2bXVhN2wnO1xudmFyIEdFTkVSQVRPUiA9IFsweDNiNmE1N2IyLCAweDI2NTA4ZTZkLCAweDFlYTExOWZhLCAweDNkNDIzM2RkLCAweDJhMTQ2MmIzXTtcblxuY29uc3QgZW5jb2RpbmdzID0ge1xuICBCRUNIMzI6ICdiZWNoMzInLFxuICBCRUNIMzJNOiAnYmVjaDMybSdcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBkZWNvZGU6IGRlY29kZSxcbiAgZW5jb2RlOiBlbmNvZGUsXG4gIGVuY29kaW5nczogZW5jb2RpbmdzXG59O1xuXG5mdW5jdGlvbiBnZXRFbmNvZGluZ0NvbnN0IChlbmMpIHtcbiAgaWYgKGVuYyA9PSBlbmNvZGluZ3MuQkVDSDMyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAoZW5jID09IGVuY29kaW5ncy5CRUNIMzJNKSB7XG4gICAgcmV0dXJuIDB4MmJjODMwYTM7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9seW1vZCAodmFsdWVzKSB7XG4gIHZhciBjaGsgPSAxO1xuICBmb3IgKHZhciBwID0gMDsgcCA8IHZhbHVlcy5sZW5ndGg7ICsrcCkge1xuICAgIHZhciB0b3AgPSBjaGsgPj4gMjU7XG4gICAgY2hrID0gKGNoayAmIDB4MWZmZmZmZikgPDwgNSBeIHZhbHVlc1twXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7ICsraSkge1xuICAgICAgaWYgKCh0b3AgPj4gaSkgJiAxKSB7XG4gICAgICAgIGNoayBePSBHRU5FUkFUT1JbaV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGs7XG59XG5cbmZ1bmN0aW9uIGhycEV4cGFuZCAoaHJwKSB7XG4gIHZhciByZXQgPSBbXTtcbiAgdmFyIHA7XG4gIGZvciAocCA9IDA7IHAgPCBocnAubGVuZ3RoOyArK3ApIHtcbiAgICByZXQucHVzaChocnAuY2hhckNvZGVBdChwKSA+PiA1KTtcbiAgfVxuICByZXQucHVzaCgwKTtcbiAgZm9yIChwID0gMDsgcCA8IGhycC5sZW5ndGg7ICsrcCkge1xuICAgIHJldC5wdXNoKGhycC5jaGFyQ29kZUF0KHApICYgMzEpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUNoZWNrc3VtIChocnAsIGRhdGEsIGVuYykge1xuICByZXR1cm4gcG9seW1vZChocnBFeHBhbmQoaHJwKS5jb25jYXQoZGF0YSkpID09PSBnZXRFbmNvZGluZ0NvbnN0KGVuYyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNoZWNrc3VtIChocnAsIGRhdGEsIGVuYykge1xuICB2YXIgdmFsdWVzID0gaHJwRXhwYW5kKGhycCkuY29uY2F0KGRhdGEpLmNvbmNhdChbMCwgMCwgMCwgMCwgMCwgMF0pO1xuICB2YXIgbW9kID0gcG9seW1vZCh2YWx1ZXMpIF4gZ2V0RW5jb2RpbmdDb25zdChlbmMpO1xuICB2YXIgcmV0ID0gW107XG4gIGZvciAodmFyIHAgPSAwOyBwIDwgNjsgKytwKSB7XG4gICAgcmV0LnB1c2goKG1vZCA+PiA1ICogKDUgLSBwKSkgJiAzMSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZW5jb2RlIChocnAsIGRhdGEsIGVuYykge1xuICB2YXIgY29tYmluZWQgPSBkYXRhLmNvbmNhdChjcmVhdGVDaGVja3N1bShocnAsIGRhdGEsIGVuYykpO1xuICB2YXIgcmV0ID0gaHJwICsgJzEnO1xuICBmb3IgKHZhciBwID0gMDsgcCA8IGNvbWJpbmVkLmxlbmd0aDsgKytwKSB7XG4gICAgcmV0ICs9IENIQVJTRVQuY2hhckF0KGNvbWJpbmVkW3BdKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBkZWNvZGUgKGJlY2hTdHJpbmcsIGVuYykge1xuICB2YXIgcDtcbiAgdmFyIGhhc19sb3dlciA9IGZhbHNlO1xuICB2YXIgaGFzX3VwcGVyID0gZmFsc2U7XG4gIGZvciAocCA9IDA7IHAgPCBiZWNoU3RyaW5nLmxlbmd0aDsgKytwKSB7XG4gICAgaWYgKGJlY2hTdHJpbmcuY2hhckNvZGVBdChwKSA8IDMzIHx8IGJlY2hTdHJpbmcuY2hhckNvZGVBdChwKSA+IDEyNikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChiZWNoU3RyaW5nLmNoYXJDb2RlQXQocCkgPj0gOTcgJiYgYmVjaFN0cmluZy5jaGFyQ29kZUF0KHApIDw9IDEyMikge1xuICAgICAgaGFzX2xvd2VyID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGJlY2hTdHJpbmcuY2hhckNvZGVBdChwKSA+PSA2NSAmJiBiZWNoU3RyaW5nLmNoYXJDb2RlQXQocCkgPD0gOTApIHtcbiAgICAgIGhhc191cHBlciA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmIChoYXNfbG93ZXIgJiYgaGFzX3VwcGVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgYmVjaFN0cmluZyA9IGJlY2hTdHJpbmcudG9Mb3dlckNhc2UoKTtcbiAgdmFyIHBvcyA9IGJlY2hTdHJpbmcubGFzdEluZGV4T2YoJzEnKTtcbiAgaWYgKHBvcyA8IDEgfHwgcG9zICsgNyA+IGJlY2hTdHJpbmcubGVuZ3RoIHx8IGJlY2hTdHJpbmcubGVuZ3RoID4gOTApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgaHJwID0gYmVjaFN0cmluZy5zdWJzdHJpbmcoMCwgcG9zKTtcbiAgdmFyIGRhdGEgPSBbXTtcbiAgZm9yIChwID0gcG9zICsgMTsgcCA8IGJlY2hTdHJpbmcubGVuZ3RoOyArK3ApIHtcbiAgICB2YXIgZCA9IENIQVJTRVQuaW5kZXhPZihiZWNoU3RyaW5nLmNoYXJBdChwKSk7XG4gICAgaWYgKGQgPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZGF0YS5wdXNoKGQpO1xuICB9XG4gIGlmICghdmVyaWZ5Q2hlY2tzdW0oaHJwLCBkYXRhLCBlbmMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHsgaHJwOiBocnAsIGRhdGE6IGRhdGEuc2xpY2UoMCwgZGF0YS5sZW5ndGggLSA2KSB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/sipa/bech32.js\n\n}")},"./node_modules/@fabric/core/functions/sipa/segwit_addr.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{// Copyright (c) 2017, 2021 Pieter Wuille\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the "Software"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n//\n// Upstream: https://github.com/sipa/bech32/blob/master/ref/javascript/segwit_addr.js\n\n\n\nvar bech32 = __webpack_require__(/*! ./bech32 */ "./node_modules/@fabric/core/functions/sipa/bech32.js");\n\nmodule.exports = {\n encode: encode,\n decode: decode\n};\n\nfunction convertbits (data, frombits, tobits, pad) {\n var acc = 0;\n var bits = 0;\n var ret = [];\n var maxv = (1 << tobits) - 1;\n for (var p = 0; p < data.length; ++p) {\n var value = data[p];\n if (value < 0 || (value >> frombits) !== 0) {\n return null;\n }\n acc = (acc << frombits) | value;\n bits += frombits;\n while (bits >= tobits) {\n bits -= tobits;\n ret.push((acc >> bits) & maxv);\n }\n }\n if (pad) {\n if (bits > 0) {\n ret.push((acc << (tobits - bits)) & maxv);\n }\n } else if (bits >= frombits || ((acc << (tobits - bits)) & maxv)) {\n return null;\n }\n return ret;\n}\n\nfunction decode (hrp, addr) {\n var bech32m = false;\n var dec = bech32.decode(addr, bech32.encodings.BECH32);\n if (dec === null) {\n dec = bech32.decode(addr, bech32.encodings.BECH32M);\n bech32m = true;\n }\n if (dec === null || dec.hrp !== hrp || dec.data.length < 1 || dec.data[0] > 16) {\n return null;\n }\n var res = convertbits(dec.data.slice(1), 5, 8, false);\n if (res === null || res.length < 2 || res.length > 40) {\n return null;\n }\n if (dec.data[0] === 0 && res.length !== 20 && res.length !== 32) {\n return null;\n }\n if (dec.data[0] === 0 && bech32m) {\n return null;\n }\n if (dec.data[0] !== 0 && !bech32m) {\n return null;\n }\n return { version: dec.data[0], program: res };\n}\n\nfunction encode (hrp, version, program) {\n var enc = bech32.encodings.BECH32;\n if (version > 0) {\n enc = bech32.encodings.BECH32M;\n }\n var ret = bech32.encode(hrp, [version].concat(convertbits(program, 8, 5, true)), enc);\n if (decode(hrp, ret) === null) {\n return null;\n }\n return ret;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9zaXBhL3NlZ3dpdF9hZGRyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsc0VBQVU7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsaUJBQWlCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvZnVuY3Rpb25zL3NpcGEvc2Vnd2l0X2FkZHIuanM/ZmE4YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIDIwMjEgUGlldGVyIFd1aWxsZVxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG4vL1xuLy8gVXBzdHJlYW06IGh0dHBzOi8vZ2l0aHViLmNvbS9zaXBhL2JlY2gzMi9ibG9iL21hc3Rlci9yZWYvamF2YXNjcmlwdC9zZWd3aXRfYWRkci5qc1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBiZWNoMzIgPSByZXF1aXJlKCcuL2JlY2gzMicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5jb2RlOiBlbmNvZGUsXG4gIGRlY29kZTogZGVjb2RlXG59O1xuXG5mdW5jdGlvbiBjb252ZXJ0Yml0cyAoZGF0YSwgZnJvbWJpdHMsIHRvYml0cywgcGFkKSB7XG4gIHZhciBhY2MgPSAwO1xuICB2YXIgYml0cyA9IDA7XG4gIHZhciByZXQgPSBbXTtcbiAgdmFyIG1heHYgPSAoMSA8PCB0b2JpdHMpIC0gMTtcbiAgZm9yICh2YXIgcCA9IDA7IHAgPCBkYXRhLmxlbmd0aDsgKytwKSB7XG4gICAgdmFyIHZhbHVlID0gZGF0YVtwXTtcbiAgICBpZiAodmFsdWUgPCAwIHx8ICh2YWx1ZSA+PiBmcm9tYml0cykgIT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBhY2MgPSAoYWNjIDw8IGZyb21iaXRzKSB8IHZhbHVlO1xuICAgIGJpdHMgKz0gZnJvbWJpdHM7XG4gICAgd2hpbGUgKGJpdHMgPj0gdG9iaXRzKSB7XG4gICAgICBiaXRzIC09IHRvYml0cztcbiAgICAgIHJldC5wdXNoKChhY2MgPj4gYml0cykgJiBtYXh2KTtcbiAgICB9XG4gIH1cbiAgaWYgKHBhZCkge1xuICAgIGlmIChiaXRzID4gMCkge1xuICAgICAgcmV0LnB1c2goKGFjYyA8PCAodG9iaXRzIC0gYml0cykpICYgbWF4dik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGJpdHMgPj0gZnJvbWJpdHMgfHwgKChhY2MgPDwgKHRvYml0cyAtIGJpdHMpKSAmIG1heHYpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gZGVjb2RlIChocnAsIGFkZHIpIHtcbiAgdmFyIGJlY2gzMm0gPSBmYWxzZTtcbiAgdmFyIGRlYyA9IGJlY2gzMi5kZWNvZGUoYWRkciwgYmVjaDMyLmVuY29kaW5ncy5CRUNIMzIpO1xuICBpZiAoZGVjID09PSBudWxsKSB7XG4gICAgZGVjID0gYmVjaDMyLmRlY29kZShhZGRyLCBiZWNoMzIuZW5jb2RpbmdzLkJFQ0gzMk0pO1xuICAgIGJlY2gzMm0gPSB0cnVlO1xuICB9XG4gIGlmIChkZWMgPT09IG51bGwgfHwgZGVjLmhycCAhPT0gaHJwIHx8IGRlYy5kYXRhLmxlbmd0aCA8IDEgfHwgZGVjLmRhdGFbMF0gPiAxNikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciByZXMgPSBjb252ZXJ0Yml0cyhkZWMuZGF0YS5zbGljZSgxKSwgNSwgOCwgZmFsc2UpO1xuICBpZiAocmVzID09PSBudWxsIHx8IHJlcy5sZW5ndGggPCAyIHx8IHJlcy5sZW5ndGggPiA0MCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChkZWMuZGF0YVswXSA9PT0gMCAmJiByZXMubGVuZ3RoICE9PSAyMCAmJiByZXMubGVuZ3RoICE9PSAzMikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChkZWMuZGF0YVswXSA9PT0gMCAmJiBiZWNoMzJtKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGRlYy5kYXRhWzBdICE9PSAwICYmICFiZWNoMzJtKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHsgdmVyc2lvbjogZGVjLmRhdGFbMF0sIHByb2dyYW06IHJlcyB9O1xufVxuXG5mdW5jdGlvbiBlbmNvZGUgKGhycCwgdmVyc2lvbiwgcHJvZ3JhbSkge1xuICB2YXIgZW5jID0gYmVjaDMyLmVuY29kaW5ncy5CRUNIMzI7XG4gIGlmICh2ZXJzaW9uID4gMCkge1xuICAgIGVuYyA9IGJlY2gzMi5lbmNvZGluZ3MuQkVDSDMyTTtcbiAgfVxuICB2YXIgcmV0ID0gYmVjaDMyLmVuY29kZShocnAsIFt2ZXJzaW9uXS5jb25jYXQoY29udmVydGJpdHMocHJvZ3JhbSwgOCwgNSwgdHJ1ZSkpLCBlbmMpO1xuICBpZiAoZGVjb2RlKGhycCwgcmV0KSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/sipa/segwit_addr.js\n\n}')},"./node_modules/@fabric/core/functions/taggedHash.js"(module,__unused_webpack_exports,__webpack_require__){eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n/**\n * BIP-340 Tagged Hash Implementation\n *\n * Computes tagged hash as specified in BIP-340:\n * tagged_hash(tag, msg) = SHA256(SHA256(tag) || SHA256(tag) || msg)\n *\n * Uses @noble/hashes for browser compatibility (avoids crypto-browserify digest errors).\n *\n * @module functions/taggedHash\n */\n\nconst { sha256 } = __webpack_require__(/*! @noble/hashes/sha2.js */ \"./node_modules/@noble/hashes/sha2.js\");\n\n/**\n * Compute BIP-340 tagged hash\n *\n * @param {String|Buffer} tag - Tag string (e.g., \"Fabric/Message\")\n * @param {Buffer} data - Data to hash\n * @returns {Buffer} 32-byte hash\n */\nfunction taggedHash (tag, data) {\n if (!tag) throw new Error('Tag is required');\n if (!data) throw new Error('Data is required');\n\n // Convert tag to Buffer if it's a string\n if (typeof tag === 'string') {\n tag = Buffer.from(tag, 'utf8');\n }\n\n if (!Buffer.isBuffer(tag)) {\n throw new Error('Tag must be a string or Buffer');\n }\n\n if (!Buffer.isBuffer(data)) {\n throw new Error('Data must be a Buffer');\n }\n\n // SHA256(tag)\n const tagHash = Buffer.from(sha256(new Uint8Array(tag)));\n\n // SHA256(SHA256(tag) || SHA256(tag) || msg)\n const buffer = Buffer.concat([\n tagHash,\n tagHash,\n data\n ]);\n\n return Buffer.from(sha256(new Uint8Array(buffer)));\n}\n\nmodule.exports = taggedHash;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy90YWdnZWRIYXNoLmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLFNBQVMsRUFBRSxtQkFBTyxDQUFDLG1FQUF1Qjs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLFdBQVcsUUFBUTtBQUNuQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsTUFBTTtBQUNoQjs7QUFFQSxPQUFPLE1BQU07QUFDYjtBQUNBOztBQUVBLE9BQU8sTUFBTTtBQUNiO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsTUFBTTs7QUFFeEI7QUFDQSxpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLE1BQU07QUFDZjs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS9mdW5jdGlvbnMvdGFnZ2VkSGFzaC5qcz8yYTE0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQklQLTM0MCBUYWdnZWQgSGFzaCBJbXBsZW1lbnRhdGlvblxuICpcbiAqIENvbXB1dGVzIHRhZ2dlZCBoYXNoIGFzIHNwZWNpZmllZCBpbiBCSVAtMzQwOlxuICogdGFnZ2VkX2hhc2godGFnLCBtc2cpID0gU0hBMjU2KFNIQTI1Nih0YWcpIHx8IFNIQTI1Nih0YWcpIHx8IG1zZylcbiAqXG4gKiBVc2VzIEBub2JsZS9oYXNoZXMgZm9yIGJyb3dzZXIgY29tcGF0aWJpbGl0eSAoYXZvaWRzIGNyeXB0by1icm93c2VyaWZ5IGRpZ2VzdCBlcnJvcnMpLlxuICpcbiAqIEBtb2R1bGUgZnVuY3Rpb25zL3RhZ2dlZEhhc2hcbiAqL1xuXG5jb25zdCB7IHNoYTI1NiB9ID0gcmVxdWlyZSgnQG5vYmxlL2hhc2hlcy9zaGEyLmpzJyk7XG5cbi8qKlxuICogQ29tcHV0ZSBCSVAtMzQwIHRhZ2dlZCBoYXNoXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8QnVmZmVyfSB0YWcgLSBUYWcgc3RyaW5nIChlLmcuLCBcIkZhYnJpYy9NZXNzYWdlXCIpXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSAtIERhdGEgdG8gaGFzaFxuICogQHJldHVybnMge0J1ZmZlcn0gMzItYnl0ZSBoYXNoXG4gKi9cbmZ1bmN0aW9uIHRhZ2dlZEhhc2ggKHRhZywgZGF0YSkge1xuICBpZiAoIXRhZykgdGhyb3cgbmV3IEVycm9yKCdUYWcgaXMgcmVxdWlyZWQnKTtcbiAgaWYgKCFkYXRhKSB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEgaXMgcmVxdWlyZWQnKTtcblxuICAvLyBDb252ZXJ0IHRhZyB0byBCdWZmZXIgaWYgaXQncyBhIHN0cmluZ1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICB0YWcgPSBCdWZmZXIuZnJvbSh0YWcsICd1dGY4Jyk7XG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YWcpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUYWcgbXVzdCBiZSBhIHN0cmluZyBvciBCdWZmZXInKTtcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIG11c3QgYmUgYSBCdWZmZXInKTtcbiAgfVxuXG4gIC8vIFNIQTI1Nih0YWcpXG4gIGNvbnN0IHRhZ0hhc2ggPSBCdWZmZXIuZnJvbShzaGEyNTYobmV3IFVpbnQ4QXJyYXkodGFnKSkpO1xuXG4gIC8vIFNIQTI1NihTSEEyNTYodGFnKSB8fCBTSEEyNTYodGFnKSB8fCBtc2cpXG4gIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW1xuICAgIHRhZ0hhc2gsXG4gICAgdGFnSGFzaCxcbiAgICBkYXRhXG4gIF0pO1xuXG4gIHJldHVybiBCdWZmZXIuZnJvbShzaGEyNTYobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRhZ2dlZEhhc2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/taggedHash.js\n\n}")},"./node_modules/@fabric/core/functions/wireJson.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * Bounded JSON.parse for AMP message bodies, persisted store/Level blobs, and Jade→blessed\n * UI attrs. Centralizes length checks and parse failures so wire handlers stay consistent.\n *\n * Body size is already capped when messages are constructed, but this guards against\n * regressions or non-AMP callers passing huge strings before `JSON.parse`.\n * Wire parsing uses a UTF-8 byte cap ({@link MAX_MESSAGE_SIZE}); persisted parsing uses a UTF-16 code-unit cap ({@link PERSISTED_JSON_MAX_CHARS}).\n *\n * @module functions/wireJson\n */\n\nconst { MAX_MESSAGE_SIZE, PERSISTED_JSON_MAX_CHARS } = __webpack_require__(/*! ../constants */ \"./node_modules/@fabric/core/constants.js\");\n\n/**\n * Normalize {@link Message#data} to a string for parsing.\n * @param {*} data\n * @returns {string}\n */\nfunction messageDataToString (data) {\n if (data == null) return '{}';\n return typeof data === 'string' ? data : String(data);\n}\n\n/**\n * Parse JSON with an explicit size bound (wire, LevelDB, local files).\n * @param {string} raw\n * @param {number} maxChars — reject when measured size exceeds this (see `opts.measure`)\n * @param {{ measure?: 'utf16' | 'utf8' }} [opts] — wire AMP bodies use UTF-8 bytes vs {@link MAX_MESSAGE_SIZE}; persisted paths use UTF-16 code units (default).\n * @returns {{ ok: true, value: * } | { ok: false, error: Error }}\n */\nfunction tryParseJsonBounded (raw, maxChars, opts) {\n if (typeof raw !== 'string') {\n return { ok: false, error: new TypeError('bounded JSON: expected string') };\n }\n if (!Number.isFinite(maxChars) || maxChars < 0) {\n return { ok: false, error: new TypeError('bounded JSON: maxChars must be a non-negative finite number') };\n }\n const measure = opts && opts.measure === 'utf8' ? 'utf8' : 'utf16';\n const size = measure === 'utf8' ? Buffer.byteLength(raw, 'utf8') : raw.length;\n if (size > maxChars) {\n const label = measure === 'utf8' ? 'UTF-8 byte length' : 'length';\n return { ok: false, error: new RangeError(`bounded JSON: ${label} ${size} exceeds max ${maxChars}`) };\n }\n try {\n return { ok: true, value: JSON.parse(raw) };\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n return { ok: false, error: e };\n }\n}\n\n/**\n * Parse JSON from an AMP message body (see {@link MAX_MESSAGE_SIZE}).\n * @param {string} raw\n * @returns {{ ok: true, value: * } | { ok: false, error: Error }}\n */\nfunction tryParseWireJson (raw) {\n return tryParseJsonBounded(raw, MAX_MESSAGE_SIZE, { measure: 'utf8' });\n}\n\n/**\n * AMP / hub bodies that use empty string as “no object”: coerce to '{}' then {@link tryParseWireJson}.\n * @param {string} [raw]\n * @returns {{ ok: true, value: * } | { ok: false, error: Error }}\n */\nfunction tryParseWireJsonBody (raw) {\n const s = raw == null ? '' : typeof raw === 'string' ? raw : String(raw);\n return tryParseWireJson(s === '' ? '{}' : s);\n}\n\n/**\n * LevelDB / local files / store roots: same bound as {@link PERSISTED_JSON_MAX_CHARS}.\n * @param {string} raw\n * @returns {{ ok: true, value: * } | { ok: false, error: Error }}\n */\nfunction tryParsePersistedJson (raw) {\n return tryParseJsonBounded(raw, PERSISTED_JSON_MAX_CHARS);\n}\n\n/**\n * Like {@link JSON.parse} for persisted payloads (see {@link PERSISTED_JSON_MAX_CHARS}).\n * @param {string} raw\n * @returns {*}\n */\nfunction parsePersistedJson (raw) {\n return parseJsonBounded(raw, PERSISTED_JSON_MAX_CHARS);\n}\n\n/**\n * String or Buffer (Level / store) → UTF-8 string for {@link tryParsePersistedJson}.\n * @param {*} raw\n * @returns {string}\n */\nfunction utf8FromPersistedRaw (raw) {\n if (raw == null) return '';\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer && Buffer.isBuffer(raw)) return raw.toString('utf8');\n return typeof raw === 'string' ? raw : String(raw);\n}\n\n/**\n * Like {@link JSON.parse} with an explicit UTF-16 length bound (throws on oversize or invalid JSON).\n * @param {string} raw\n * @param {number} maxChars\n * @returns {*}\n */\nfunction parseJsonBounded (raw, maxChars) {\n const pr = tryParseJsonBounded(raw, maxChars);\n if (!pr.ok) throw pr.error;\n return pr.value;\n}\n\n/**\n * Jade-parser {@link Tag} attrs → blessed() params (JSON-like vals use {@link tryParsePersistedJson}; on failure, keeps raw string).\n * @param {Array<{ name: string, val: string }>|undefined} astAttrs\n * @returns {{ attrs: string[], params: Object }}\n */\nfunction blessedParamsFromJadeAttrs (astAttrs) {\n const attrs = [];\n const params = Object.create(null);\n if (!astAttrs) return { attrs, params };\n if (!Array.isArray(astAttrs)) return { attrs, params };\n for (const attr of astAttrs) {\n if (!attr || attr.name == null) continue;\n const name = String(attr.name);\n const valRaw = attr.val == null ? '' : attr.val;\n const valStr = typeof valRaw === 'string' ? valRaw : String(valRaw);\n attrs.push(name + '=' + valStr);\n if (valStr.length >= 2 && valStr[0] === \"'\" && valStr[valStr.length - 1] === \"'\") {\n const content = valStr.slice(1, -1);\n if (content[0] === '{') {\n const pr = tryParsePersistedJson(content);\n params[name] = pr.ok ? pr.value : content;\n } else {\n params[name] = content;\n }\n } else {\n const pr = tryParsePersistedJson(valStr);\n params[name] = pr.ok ? pr.value : valStr;\n }\n }\n return { attrs, params };\n}\n\nmodule.exports = {\n messageDataToString,\n utf8FromPersistedRaw,\n tryParseJsonBounded,\n tryParseWireJson,\n tryParseWireJsonBody,\n tryParsePersistedJson,\n parsePersistedJson,\n parseJsonBounded,\n blessedParamsFromJadeAttrs,\n MAX_WIRE_JSON_BYTES: MAX_MESSAGE_SIZE,\n // Backward-compat alias; prefer MAX_WIRE_JSON_BYTES for correctness.\n MAX_WIRE_JSON_CHARS: MAX_MESSAGE_SIZE\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy93aXJlSnNvbi5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLHVCQUF1QixHQUFHLGdEQUFnRCwrQkFBK0I7QUFDako7QUFDQTtBQUNBOztBQUVBLFFBQVEsNkNBQTZDLEVBQUUsbUJBQU8sQ0FBQyw4REFBYzs7QUFFN0U7QUFDQSxjQUFjLG9CQUFvQjtBQUNsQyxXQUFXLEdBQUc7QUFDZCxhQUFhO0FBQ2I7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWEsOEJBQThCLDZDQUE2Qyx5QkFBeUI7QUFDakgsZUFBZSxxQkFBcUIsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0Esb0NBQW9DLE1BQU07QUFDMUM7QUFDQTtBQUNBLGFBQWEsa0RBQWtELE9BQU8sRUFBRSxNQUFNLGNBQWMsU0FBUztBQUNyRztBQUNBO0FBQ0EsYUFBYTtBQUNiLElBQUk7QUFDSjtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDLHVCQUF1QjtBQUNwRSxXQUFXLFFBQVE7QUFDbkIsZUFBZSxxQkFBcUIsSUFBSTtBQUN4QztBQUNBO0FBQ0Esc0RBQXNELGlCQUFpQjtBQUN2RTs7QUFFQTtBQUNBLDZFQUE2RSxlQUFlLHVCQUF1QjtBQUNuSCxXQUFXLFFBQVE7QUFDbkIsZUFBZSxxQkFBcUIsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7O0FBRUE7QUFDQSx1REFBdUQsK0JBQStCO0FBQ3RGLFdBQVcsUUFBUTtBQUNuQixlQUFlLHFCQUFxQixJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyxrQkFBa0IsNkJBQTZCLCtCQUErQjtBQUN2RixXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0RBQXdELDRCQUE0QjtBQUNwRixXQUFXLEdBQUc7QUFDZCxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNLG9CQUFvQixNQUFNLGFBQWEsTUFBTTtBQUNoRTtBQUNBOztBQUVBO0FBQ0EsU0FBUyxrQkFBa0I7QUFDM0IsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLFdBQVcsOENBQThDLDhCQUE4QjtBQUN2RyxXQUFXLFFBQVEsMkJBQTJCLGFBQWE7QUFDM0QsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvZnVuY3Rpb25zL3dpcmVKc29uLmpzP2ZlZWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEJvdW5kZWQgSlNPTi5wYXJzZSBmb3IgQU1QIG1lc3NhZ2UgYm9kaWVzLCBwZXJzaXN0ZWQgc3RvcmUvTGV2ZWwgYmxvYnMsIGFuZCBKYWRl4oaSYmxlc3NlZFxuICogVUkgYXR0cnMuIENlbnRyYWxpemVzIGxlbmd0aCBjaGVja3MgYW5kIHBhcnNlIGZhaWx1cmVzIHNvIHdpcmUgaGFuZGxlcnMgc3RheSBjb25zaXN0ZW50LlxuICpcbiAqIEJvZHkgc2l6ZSBpcyBhbHJlYWR5IGNhcHBlZCB3aGVuIG1lc3NhZ2VzIGFyZSBjb25zdHJ1Y3RlZCwgYnV0IHRoaXMgZ3VhcmRzIGFnYWluc3RcbiAqIHJlZ3Jlc3Npb25zIG9yIG5vbi1BTVAgY2FsbGVycyBwYXNzaW5nIGh1Z2Ugc3RyaW5ncyBiZWZvcmUgYEpTT04ucGFyc2VgLlxuICogV2lyZSBwYXJzaW5nIHVzZXMgYSBVVEYtOCBieXRlIGNhcCAoe0BsaW5rIE1BWF9NRVNTQUdFX1NJWkV9KTsgcGVyc2lzdGVkIHBhcnNpbmcgdXNlcyBhIFVURi0xNiBjb2RlLXVuaXQgY2FwICh7QGxpbmsgUEVSU0lTVEVEX0pTT05fTUFYX0NIQVJTfSkuXG4gKlxuICogQG1vZHVsZSBmdW5jdGlvbnMvd2lyZUpzb25cbiAqL1xuXG5jb25zdCB7IE1BWF9NRVNTQUdFX1NJWkUsIFBFUlNJU1RFRF9KU09OX01BWF9DSEFSUyB9ID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzJyk7XG5cbi8qKlxuICogTm9ybWFsaXplIHtAbGluayBNZXNzYWdlI2RhdGF9IHRvIGEgc3RyaW5nIGZvciBwYXJzaW5nLlxuICogQHBhcmFtIHsqfSBkYXRhXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBtZXNzYWdlRGF0YVRvU3RyaW5nIChkYXRhKSB7XG4gIGlmIChkYXRhID09IG51bGwpIHJldHVybiAne30nO1xuICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gZGF0YSA6IFN0cmluZyhkYXRhKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBKU09OIHdpdGggYW4gZXhwbGljaXQgc2l6ZSBib3VuZCAod2lyZSwgTGV2ZWxEQiwgbG9jYWwgZmlsZXMpLlxuICogQHBhcmFtIHtzdHJpbmd9IHJhd1xuICogQHBhcmFtIHtudW1iZXJ9IG1heENoYXJzIOKAlCByZWplY3Qgd2hlbiBtZWFzdXJlZCBzaXplIGV4Y2VlZHMgdGhpcyAoc2VlIGBvcHRzLm1lYXN1cmVgKVxuICogQHBhcmFtIHt7IG1lYXN1cmU/OiAndXRmMTYnIHwgJ3V0ZjgnIH19IFtvcHRzXSDigJQgd2lyZSBBTVAgYm9kaWVzIHVzZSBVVEYtOCBieXRlcyB2cyB7QGxpbmsgTUFYX01FU1NBR0VfU0laRX07IHBlcnNpc3RlZCBwYXRocyB1c2UgVVRGLTE2IGNvZGUgdW5pdHMgKGRlZmF1bHQpLlxuICogQHJldHVybnMge3sgb2s6IHRydWUsIHZhbHVlOiAqIH0gfCB7IG9rOiBmYWxzZSwgZXJyb3I6IEVycm9yIH19XG4gKi9cbmZ1bmN0aW9uIHRyeVBhcnNlSnNvbkJvdW5kZWQgKHJhdywgbWF4Q2hhcnMsIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiByYXcgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogbmV3IFR5cGVFcnJvcignYm91bmRlZCBKU09OOiBleHBlY3RlZCBzdHJpbmcnKSB9O1xuICB9XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG1heENoYXJzKSB8fCBtYXhDaGFycyA8IDApIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBuZXcgVHlwZUVycm9yKCdib3VuZGVkIEpTT046IG1heENoYXJzIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIG51bWJlcicpIH07XG4gIH1cbiAgY29uc3QgbWVhc3VyZSA9IG9wdHMgJiYgb3B0cy5tZWFzdXJlID09PSAndXRmOCcgPyAndXRmOCcgOiAndXRmMTYnO1xuICBjb25zdCBzaXplID0gbWVhc3VyZSA9PT0gJ3V0ZjgnID8gQnVmZmVyLmJ5dGVMZW5ndGgocmF3LCAndXRmOCcpIDogcmF3Lmxlbmd0aDtcbiAgaWYgKHNpemUgPiBtYXhDaGFycykge1xuICAgIGNvbnN0IGxhYmVsID0gbWVhc3VyZSA9PT0gJ3V0ZjgnID8gJ1VURi04IGJ5dGUgbGVuZ3RoJyA6ICdsZW5ndGgnO1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IG5ldyBSYW5nZUVycm9yKGBib3VuZGVkIEpTT046ICR7bGFiZWx9ICR7c2l6ZX0gZXhjZWVkcyBtYXggJHttYXhDaGFyc31gKSB9O1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBKU09OLnBhcnNlKHJhdykgfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKTtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBlIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBKU09OIGZyb20gYW4gQU1QIG1lc3NhZ2UgYm9keSAoc2VlIHtAbGluayBNQVhfTUVTU0FHRV9TSVpFfSkuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3XG4gKiBAcmV0dXJucyB7eyBvazogdHJ1ZSwgdmFsdWU6ICogfSB8IHsgb2s6IGZhbHNlLCBlcnJvcjogRXJyb3IgfX1cbiAqL1xuZnVuY3Rpb24gdHJ5UGFyc2VXaXJlSnNvbiAocmF3KSB7XG4gIHJldHVybiB0cnlQYXJzZUpzb25Cb3VuZGVkKHJhdywgTUFYX01FU1NBR0VfU0laRSwgeyBtZWFzdXJlOiAndXRmOCcgfSk7XG59XG5cbi8qKlxuICogQU1QIC8gaHViIGJvZGllcyB0aGF0IHVzZSBlbXB0eSBzdHJpbmcgYXMg4oCcbm8gb2JqZWN04oCdOiBjb2VyY2UgdG8gPGNvZGU+J3t9JzwvY29kZT4gdGhlbiB7QGxpbmsgdHJ5UGFyc2VXaXJlSnNvbn0uXG4gKiBAcGFyYW0ge3N0cmluZ30gW3Jhd11cbiAqIEByZXR1cm5zIHt7IG9rOiB0cnVlLCB2YWx1ZTogKiB9IHwgeyBvazogZmFsc2UsIGVycm9yOiBFcnJvciB9fVxuICovXG5mdW5jdGlvbiB0cnlQYXJzZVdpcmVKc29uQm9keSAocmF3KSB7XG4gIGNvbnN0IHMgPSByYXcgPT0gbnVsbCA/ICcnIDogdHlwZW9mIHJhdyA9PT0gJ3N0cmluZycgPyByYXcgOiBTdHJpbmcocmF3KTtcbiAgcmV0dXJuIHRyeVBhcnNlV2lyZUpzb24ocyA9PT0gJycgPyAne30nIDogcyk7XG59XG5cbi8qKlxuICogTGV2ZWxEQiAvIGxvY2FsIGZpbGVzIC8gc3RvcmUgcm9vdHM6IHNhbWUgYm91bmQgYXMge0BsaW5rIFBFUlNJU1RFRF9KU09OX01BWF9DSEFSU30uXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3XG4gKiBAcmV0dXJucyB7eyBvazogdHJ1ZSwgdmFsdWU6ICogfSB8IHsgb2s6IGZhbHNlLCBlcnJvcjogRXJyb3IgfX1cbiAqL1xuZnVuY3Rpb24gdHJ5UGFyc2VQZXJzaXN0ZWRKc29uIChyYXcpIHtcbiAgcmV0dXJuIHRyeVBhcnNlSnNvbkJvdW5kZWQocmF3LCBQRVJTSVNURURfSlNPTl9NQVhfQ0hBUlMpO1xufVxuXG4vKipcbiAqIExpa2Uge0BsaW5rIEpTT04ucGFyc2V9IGZvciBwZXJzaXN0ZWQgcGF5bG9hZHMgKHNlZSB7QGxpbmsgUEVSU0lTVEVEX0pTT05fTUFYX0NIQVJTfSkuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmF3XG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VQZXJzaXN0ZWRKc29uIChyYXcpIHtcbiAgcmV0dXJuIHBhcnNlSnNvbkJvdW5kZWQocmF3LCBQRVJTSVNURURfSlNPTl9NQVhfQ0hBUlMpO1xufVxuXG4vKipcbiAqIFN0cmluZyBvciBCdWZmZXIgKExldmVsIC8gc3RvcmUpIOKGkiBVVEYtOCBzdHJpbmcgZm9yIHtAbGluayB0cnlQYXJzZVBlcnNpc3RlZEpzb259LlxuICogQHBhcmFtIHsqfSByYXdcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHV0ZjhGcm9tUGVyc2lzdGVkUmF3IChyYXcpIHtcbiAgaWYgKHJhdyA9PSBudWxsKSByZXR1cm4gJyc7XG4gIGlmICh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBCdWZmZXIuaXNCdWZmZXIgJiYgQnVmZmVyLmlzQnVmZmVyKHJhdykpIHJldHVybiByYXcudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgcmV0dXJuIHR5cGVvZiByYXcgPT09ICdzdHJpbmcnID8gcmF3IDogU3RyaW5nKHJhdyk7XG59XG5cbi8qKlxuICogTGlrZSB7QGxpbmsgSlNPTi5wYXJzZX0gd2l0aCBhbiBleHBsaWNpdCBVVEYtMTYgbGVuZ3RoIGJvdW5kICh0aHJvd3Mgb24gb3ZlcnNpemUgb3IgaW52YWxpZCBKU09OKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhDaGFyc1xuICogQHJldHVybnMgeyp9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlSnNvbkJvdW5kZWQgKHJhdywgbWF4Q2hhcnMpIHtcbiAgY29uc3QgcHIgPSB0cnlQYXJzZUpzb25Cb3VuZGVkKHJhdywgbWF4Q2hhcnMpO1xuICBpZiAoIXByLm9rKSB0aHJvdyBwci5lcnJvcjtcbiAgcmV0dXJuIHByLnZhbHVlO1xufVxuXG4vKipcbiAqIEphZGUtcGFyc2VyIHtAbGluayBUYWd9IGF0dHJzIOKGkiBibGVzc2VkKCkgcGFyYW1zIChKU09OLWxpa2UgdmFscyB1c2Uge0BsaW5rIHRyeVBhcnNlUGVyc2lzdGVkSnNvbn07IG9uIGZhaWx1cmUsIGtlZXBzIHJhdyBzdHJpbmcpLlxuICogQHBhcmFtIHtBcnJheTx7IG5hbWU6IHN0cmluZywgdmFsOiBzdHJpbmcgfT58dW5kZWZpbmVkfSBhc3RBdHRyc1xuICogQHJldHVybnMge3sgYXR0cnM6IHN0cmluZ1tdLCBwYXJhbXM6IE9iamVjdCB9fVxuICovXG5mdW5jdGlvbiBibGVzc2VkUGFyYW1zRnJvbUphZGVBdHRycyAoYXN0QXR0cnMpIHtcbiAgY29uc3QgYXR0cnMgPSBbXTtcbiAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCFhc3RBdHRycykgcmV0dXJuIHsgYXR0cnMsIHBhcmFtcyB9O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXN0QXR0cnMpKSByZXR1cm4geyBhdHRycywgcGFyYW1zIH07XG4gIGZvciAoY29uc3QgYXR0ciBvZiBhc3RBdHRycykge1xuICAgIGlmICghYXR0ciB8fCBhdHRyLm5hbWUgPT0gbnVsbCkgY29udGludWU7XG4gICAgY29uc3QgbmFtZSA9IFN0cmluZyhhdHRyLm5hbWUpO1xuICAgIGNvbnN0IHZhbFJhdyA9IGF0dHIudmFsID09IG51bGwgPyAnJyA6IGF0dHIudmFsO1xuICAgIGNvbnN0IHZhbFN0ciA9IHR5cGVvZiB2YWxSYXcgPT09ICdzdHJpbmcnID8gdmFsUmF3IDogU3RyaW5nKHZhbFJhdyk7XG4gICAgYXR0cnMucHVzaChuYW1lICsgJz0nICsgdmFsU3RyKTtcbiAgICBpZiAodmFsU3RyLmxlbmd0aCA+PSAyICYmIHZhbFN0clswXSA9PT0gXCInXCIgJiYgdmFsU3RyW3ZhbFN0ci5sZW5ndGggLSAxXSA9PT0gXCInXCIpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB2YWxTdHIuc2xpY2UoMSwgLTEpO1xuICAgICAgaWYgKGNvbnRlbnRbMF0gPT09ICd7Jykge1xuICAgICAgICBjb25zdCBwciA9IHRyeVBhcnNlUGVyc2lzdGVkSnNvbihjb250ZW50KTtcbiAgICAgICAgcGFyYW1zW25hbWVdID0gcHIub2sgPyBwci52YWx1ZSA6IGNvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbXNbbmFtZV0gPSBjb250ZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwciA9IHRyeVBhcnNlUGVyc2lzdGVkSnNvbih2YWxTdHIpO1xuICAgICAgcGFyYW1zW25hbWVdID0gcHIub2sgPyBwci52YWx1ZSA6IHZhbFN0cjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgYXR0cnMsIHBhcmFtcyB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWVzc2FnZURhdGFUb1N0cmluZyxcbiAgdXRmOEZyb21QZXJzaXN0ZWRSYXcsXG4gIHRyeVBhcnNlSnNvbkJvdW5kZWQsXG4gIHRyeVBhcnNlV2lyZUpzb24sXG4gIHRyeVBhcnNlV2lyZUpzb25Cb2R5LFxuICB0cnlQYXJzZVBlcnNpc3RlZEpzb24sXG4gIHBhcnNlUGVyc2lzdGVkSnNvbixcbiAgcGFyc2VKc29uQm91bmRlZCxcbiAgYmxlc3NlZFBhcmFtc0Zyb21KYWRlQXR0cnMsXG4gIE1BWF9XSVJFX0pTT05fQllURVM6IE1BWF9NRVNTQUdFX1NJWkUsXG4gIC8vIEJhY2t3YXJkLWNvbXBhdCBhbGlhczsgcHJlZmVyIE1BWF9XSVJFX0pTT05fQllURVMgZm9yIGNvcnJlY3RuZXNzLlxuICBNQVhfV0lSRV9KU09OX0NIQVJTOiBNQVhfTUVTU0FHRV9TSVpFXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/functions/wireJson.js\n\n}")},"./node_modules/@fabric/core/types/actor.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * @fileoverview Base Actor type for Fabric: JSON-shaped state, JSON Patch commits, and a\n * content-derived id.\n *\n *

State_state.content is observed with fast-json-patch.\n * {@link Actor#commit} turns observer diffs into {@link Actor#history} entries and emits commit plus\n * message with type: 'ActorMessage' / data.type: 'Changes'.

\n *\n *

Identity — {@link Actor#id} is a SHA256 digest (hex) of the 32-byte preimage buffer;\n * {@link Actor#preimage} is SHA256(UTF-8) of the pretty-printed {@link Actor#toGenericMessage}\n * { type, object } with sorted keys ({@link Actor#toObject}). Implementation uses {@link Hash256.compute}.\n * Treat id as a content address for that state shape, not an arbitrary application string hash.

\n *\n *

Relationship to {@link Message}Message extends Actor and implements\n * AMP (wire headers, opcodes, Schnorr Fabric/Message). Downstream apps that only need a stable\n * storage key should not label that key Actor#id unless it is produced by this type.

\n *\n *

Narrative docs: DEVELOPERS.md (section Actor and Message) and this file’s class JSDoc are\n * kept in sync; npm run make:docs embeds DEVELOPERS.md as the HTML home page, while Actor.html is generated\n * from here.

\n */\n\n// Generics\nconst EventEmitter = __webpack_require__(/*! events */ \"./node_modules/events/events.js\");\n// const stream = require('node:stream/promises');\n\n// Dependencies\nconst monitor = __webpack_require__(/*! fast-json-patch */ \"./node_modules/fast-json-patch/index.mjs\");\nconst pointer = __webpack_require__(/*! json-pointer */ \"./node_modules/json-pointer/index.js\");\n\n// Fabric Types\nconst Hash256 = __webpack_require__(/*! ./hash256 */ \"./node_modules/@fabric/core/types/hash256.js\");\n\n// Fabric Functions\nconst _sortKeys = __webpack_require__(/*! ../functions/_sortKeys */ \"./node_modules/@fabric/core/functions/_sortKeys.js\");\nconst { tryParsePersistedJson } = __webpack_require__(/*! ../functions/wireJson */ \"./node_modules/@fabric/core/functions/wireJson.js\");\n\n/**\n * @classdesc Base Actor: JSON-shaped _state.content observed with\n * fast-json-patch; {@link Actor#commit} turns diffs into {@link Actor#history} and emits\n * commit plus message (type: 'ActorMessage', data.type: 'Changes').\n * Identity — {@link Actor#id} is SHA256(hex) of the 32-byte preimage buffer; {@link Actor#preimage} is\n * SHA256(UTF-8) of pretty-printed {@link Actor#toGenericMessage} { type, object } with sorted keys\n * ({@link Actor#toObject}); uses {@link Hash256.compute}. Treat id as a content address, not an\n * arbitrary app string hash. Wire traffic — see {@link Message} (extends Actor, AMP). Same narrative as\n * DEVELOPERS.md (Actor and Message) and @fileoverview above (also on\n * types_actor.js.html source page).\n * @class Actor\n * @extends EventEmitter\n * @access protected\n * @fires Actor#commit\n * @emits message Emits structured objects; on {@link Actor#commit}, type: 'ActorMessage' with patch metadata (not necessarily a {@link Message} AMP instance).\n * @property {String} id 64-char hex: SHA256 of the 32-byte digest represented by {@link Actor#preimage}.\n * @property {String} preimage 64-char hex: SHA256 of UTF-8 pretty JSON of {@link Actor#toGenericMessage}.\n */\nclass Actor extends EventEmitter {\n /**\n * Creates an {@link Actor}, which emits messages for other\n * Actors to subscribe to. You can supply certain parameters\n * for the actor, including key material [!!!] — be mindful of\n * what you share with others!\n * @param {Object} [actor] Object to use as the actor.\n * @param {String} [actor.seed] Optional mnemonic or seed string stored into state (see BIP39 / wallet docs — not validated here).\n * @param {Buffer} [actor.public] Public key.\n * @param {Buffer} [actor.private] Private key.\n * @returns {Actor} Instance of the Actor. Call {@link Actor#sign} to emit a {@link Signature}.\n */\n constructor (actor = {}) {\n super(actor);\n\n this.settings = {\n type: 'Actor',\n status: 'PAUSED'\n };\n\n // Internal State\n // TODO: encourage use of `state` over `_state`\n // TODO: use `const state` here\n this._state = {\n type: this.settings.type,\n status: this.settings.status,\n content: this._readObject(actor)\n };\n\n // TODO: evaluate disabling by default\n this.history = [];\n\n // TODO: evaluate disabling by default\n // and/or resolving performance issues at scale\n try {\n this.observer = monitor.observe(this._state.content, this._handleMonitorChanges.bind(this));\n } catch (exception) {\n console.error('UNABLE TO WATCH:', exception);\n }\n\n // TODO: use elegant method to strip these properties\n Object.defineProperty(this, '_events', { enumerable: false });\n Object.defineProperty(this, '_eventsCount', { enumerable: false });\n Object.defineProperty(this, '_maxListeners', { enumerable: false });\n Object.defineProperty(this, '_state', { enumerable: false });\n Object.defineProperty(this, 'observer', { enumerable: false });\n\n // Chainable\n return this;\n }\n\n static chunk (array, size = 32) {\n const chunkedArray = [];\n for (var i = 0; i < array.length; i += size) {\n chunkedArray.push(array.slice(i, i + size));\n }\n return chunkedArray;\n }\n\n /**\n * Create an {@link Actor} from a variety of formats.\n * @param {Object} input Target {@link Object} to create.\n * @returns {Actor} Instance of the {@link Actor}.\n */\n static fromAny (input = {}) {\n let state = null;\n\n if (typeof input === 'string') {\n state = { content: input };\n } else if (input instanceof Buffer) {\n state = { content: input.toString('hex') };\n } else {\n state = Object.assign({}, input);\n }\n\n return new Actor(state);\n }\n\n static fromJSON (input) {\n let result = null;\n\n if (typeof input === 'string' && input.length) {\n const pr = tryParsePersistedJson(input);\n result = pr.ok ? pr.value : null;\n }\n\n return result;\n }\n\n /**\n * Get a number of random bytes from the runtime environment.\n * @param {Number} [count=32] Number of random bytes to retrieve.\n * @returns {Buffer} The random bytes.\n */\n static randomBytes (count = 32) {\n if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) {\n const array = new Uint8Array(count);\n window.crypto.getRandomValues(array);\n return Buffer.from(array);\n } else {\n return (__webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\").randomBytes)(count);\n }\n }\n\n get id () {\n const buffer = Buffer.from(this.preimage, 'hex');\n return Hash256.compute(buffer);\n }\n\n get spendable () {\n if (!this.signer) return false;\n return false;\n }\n\n get generic () {\n return this.toGenericMessage();\n }\n\n get preimage () {\n if (!this.generic) throw new Error('Could not get generic');\n const string = JSON.stringify(this.generic, null, ' ');\n const secret = Buffer.from(string, 'utf8');\n const preimage = Hash256.compute(secret);\n return preimage;\n }\n\n get state () {\n return JSON.parse(JSON.stringify(this._state.content || {}));\n }\n\n get status () {\n return this._state.status;\n }\n\n get type () {\n return this._state['@type'];\n }\n\n set state (value) {\n this._state.content = value;\n }\n\n set status (value) {\n this._state.status = value;\n }\n\n /**\n * Explicitly adopt a set of {@link JSONPatch}-encoded changes.\n * @param {Array} changes List of {@link JSONPatch} operations to apply.\n * @returns {Actor} Instance of the Actor.\n */\n adopt (changes) {\n try {\n monitor.applyPatch(this._state.content, changes);\n this.commit();\n } catch (exception) {\n this.emit('error', exception);\n }\n\n return this;\n }\n\n /**\n * Resolve the current state to a commitment.\n * @returns {String} 32-byte ID\n */\n commit () {\n const now = new Date();\n const state = new Actor(this.state);\n const changes = monitor.generate(this.observer);\n const parent = (this.history.length) ? this.history[this.history.length - 1].state : null;\n const commit = new Actor({\n changes: changes,\n parent: parent,\n state: state.id // TODO: include whole state?\n });\n\n this.history.push(commit);\n\n this.emit('commit', commit);\n this.emit('message', {\n type: 'ActorMessage',\n data: {\n actor: { id: this.id },\n created: now.toISOString(),\n object: changes,\n type: 'Changes'\n }\n });\n\n return commit.id;\n }\n\n debug (...params) {\n this.emit('debug', params);\n }\n\n /**\n * Export the Actor's state to a standard {@link Object}.\n * @returns {Object} Standard object.\n */\n export () {\n return {\n id: this.id,\n type: 'FabricActor',\n object: this.state,\n version: 1\n };\n }\n\n /**\n * Retrieve a value from the Actor's state by {@link JSONPointer} path.\n * @param {String} path Path to retrieve using {@link JSONPointer}.\n * @returns {Object} Value of the path in the Actor's state.\n */\n get (path) {\n return pointer.get(this._state.content, path);\n }\n\n log (...params) {\n this.emit('log', ...params);\n }\n\n mutate (seed) {\n if (seed === 0 || !seed) seed = this.randomBytes(32).toString('hex');\n\n const patches = [\n { op: 'replace', path: '/seed', value: seed }\n ];\n\n monitor.applyPatch(this._state.content, patches);\n this.commit();\n\n return this;\n }\n\n /**\n * Set a value in the Actor's state by {@link JSONPointer} path.\n * @param {String} path Path to set using {@link JSONPointer}.\n * @param {Object} value Value to set.\n * @returns {Object} Value of the path in the Actor's state.\n */\n set (path, value) {\n pointer.set(this._state.content, path, value);\n this.commit();\n return this;\n }\n\n setStatus (value) {\n if (!value) throw new Error('Cannot remove status.');\n this.status = value;\n }\n\n /**\n * Returns a new output stream for the Actor.\n * @param {TransformStream} [pipe] Pipe to stream to.\n * @returns {TransformStream} New output stream for the Actor.\n */\n stream (pipe) {\n if (pipe) {\n //\n const stream = new stream.Transform({\n transform (chunk, encoding, done) {\n done(null, chunk);\n }\n });\n\n // TODO: test this\n // 1. Stream to the output pipe\n stream.pipe(pipe);\n\n // 2. Stream to the actor\n this.stream.pipe(stream);\n\n return stream;\n } else {\n return this.stream;\n }\n\n // removed by dead control flow\n\n }\n\n /**\n * Casts the Actor to a normalized Buffer.\n * @returns {Buffer}\n */\n toBuffer () {\n return Buffer.from(this.serialize(), 'utf8');\n }\n\n /**\n * Casts the Actor to a generic message envelope for state announcements and history.\n * Shape is stable: `{ type, object }` where `object` is sorted-key state ({@link Actor#toObject}).\n * {@link Actor#id} derives from a digest of the pretty-printed generic message; extending this\n * envelope requires a format/version migration across the network.\n * @param {String} [type='FabricActorState'] Logical message type string.\n * @see {@link https://en.wikipedia.org/wiki/Merkle_tree}\n * @see {@link https://dev.fabric.pub/messages}\n * @returns {Object} `{ type, object }`\n */\n toGenericMessage (type = 'FabricActorState') {\n const messageType = type || 'FabricActorState';\n return {\n type: messageType,\n object: this.toObject()\n };\n }\n\n toJSON () {\n return {\n '@id': this.id,\n ...this.state\n };\n }\n\n /**\n * Returns the Actor's current state as an {@link Object}.\n * @returns {Object}\n */\n toObject () {\n return _sortKeys(this.state);\n }\n\n toString (format = 'json') {\n switch (format) {\n case 'hex':\n return Buffer.from(this.serialize(), 'utf8').toString('hex');\n case 'json':\n default:\n return this.serialize();\n }\n }\n\n /**\n * Toggles `status` property to paused.\n * @returns {Actor} Instance of the Actor.\n */\n pause () {\n this.status = 'PAUSING';\n this.commit();\n this.status = 'PAUSED';\n return this;\n }\n\n randomBytes (count = 32) {\n return Actor.randomBytes(count);\n }\n\n /**\n * Serialize the Actor's current state into a JSON-formatted string.\n * @returns {String}\n */\n serialize () {\n let json = null;\n\n try {\n json = JSON.stringify(this.toObject(), null, ' ');\n } catch (exception) {\n json = JSON.stringify({\n type: 'Error',\n content: `Exception serializing: ${exception}`\n }, null, ' ');\n }\n\n return json;\n }\n\n sha256 (value) {\n return Hash256.digest(value);\n }\n\n /**\n * Signs the Actor.\n * @returns {Actor}\n */\n sign () {\n throw new Error('Unimplemented on this branch. Use @fabric/core/types/signer instead.');\n /* this.signature = this.key._sign(this.toBuffer());\n this.emit('signature', this.signature);\n return this; */\n }\n\n /**\n * Toggles `status` property to unpaused.\n * @returns {Actor} Instance of the Actor.\n */\n unpause () {\n this.status = 'UNPAUSING';\n this.commit();\n this.status = 'UNPAUSED';\n return this;\n }\n\n validate () {\n if (!this.state) return false;\n if (!this.id) return false;\n return true;\n }\n\n /**\n * Get the inner value of the Actor with an optional cast type.\n * @param {String} [format] Cast the value to one of: `buffer, hex, json, string`\n * @returns {Object} Inner value of the Actor as an {@link Object}, or cast to the requested `format`.\n */\n value (format = 'object') {\n switch (format) {\n default:\n return this.state;\n case 'buffer':\n return Buffer.from(this.value('string'), 'utf8');\n case 'hex':\n return this.value('buffer').toString('hex');\n case 'json':\n case 'string':\n return JSON.stringify(this.state);\n }\n }\n\n _getField (name) {\n return this._state.content[name];\n }\n\n /**\n * Incurs 1 SYSCALL\n * @access private\n * @returns {Object}\n */\n _getState () {\n return this.state;\n }\n\n _handleMonitorChanges (_changes) {\n // TODO: emit global state event here\n // after verify, commit\n }\n\n /**\n * Parse an Object into a corresponding Fabric state.\n * @param {Object} input Object to read as input.\n * @returns {Object} Fabric state.\n */\n _readObject (input = {}) {\n if (typeof input === 'string') {\n return Object.assign({}, {\n type: 'String',\n size: input.length,\n content: input,\n encoding: 'utf8'\n });\n } else if (input instanceof Buffer) {\n return Object.assign({}, {\n type: 'Buffer',\n size: input.length,\n content: input.toString('hex'),\n encoding: 'hex'\n });\n } else {\n return Object.assign({}, input);\n }\n }\n}\n\nmodule.exports = Actor;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGVBQWUsUUFBUTtBQUN2QjtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNLDBCQUEwQixNQUFNO0FBQ3RDLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ04sNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS90eXBlcy9hY3Rvci5qcz82NTY4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEJhc2UgPHN0cm9uZz5BY3Rvcjwvc3Ryb25nPiB0eXBlIGZvciBGYWJyaWM6IEpTT04tc2hhcGVkIHN0YXRlLCBKU09OIFBhdGNoIGNvbW1pdHMsIGFuZCBhXG4gKiBjb250ZW50LWRlcml2ZWQgPHN0cm9uZz5pZDwvc3Ryb25nPi5cbiAqXG4gKiA8cD48c3Ryb25nPlN0YXRlPC9zdHJvbmc+IOKAlCA8Y29kZT5fc3RhdGUuY29udGVudDwvY29kZT4gaXMgb2JzZXJ2ZWQgd2l0aCA8Y29kZT5mYXN0LWpzb24tcGF0Y2g8L2NvZGU+LlxuICoge0BsaW5rIEFjdG9yI2NvbW1pdH0gdHVybnMgb2JzZXJ2ZXIgZGlmZnMgaW50byB7QGxpbmsgQWN0b3IjaGlzdG9yeX0gZW50cmllcyBhbmQgZW1pdHMgPGNvZGU+Y29tbWl0PC9jb2RlPiBwbHVzXG4gKiA8Y29kZT5tZXNzYWdlPC9jb2RlPiB3aXRoIDxjb2RlPnR5cGU6ICdBY3Rvck1lc3NhZ2UnPC9jb2RlPiAvIDxjb2RlPmRhdGEudHlwZTogJ0NoYW5nZXMnPC9jb2RlPi48L3A+XG4gKlxuICogPHA+PHN0cm9uZz5JZGVudGl0eTwvc3Ryb25nPiDigJQge0BsaW5rIEFjdG9yI2lkfSBpcyBhIFNIQTI1NiBkaWdlc3QgKGhleCkgb2YgdGhlIDMyLWJ5dGUgcHJlaW1hZ2UgYnVmZmVyO1xuICoge0BsaW5rIEFjdG9yI3ByZWltYWdlfSBpcyBTSEEyNTYoVVRGLTgpIG9mIHRoZSBwcmV0dHktcHJpbnRlZCB7QGxpbmsgQWN0b3IjdG9HZW5lcmljTWVzc2FnZX1cbiAqIDxjb2RlPnsgdHlwZSwgb2JqZWN0IH08L2NvZGU+IHdpdGggc29ydGVkIGtleXMgKHtAbGluayBBY3RvciN0b09iamVjdH0pLiBJbXBsZW1lbnRhdGlvbiB1c2VzIHtAbGluayBIYXNoMjU2LmNvbXB1dGV9LlxuICogVHJlYXQgPGNvZGU+aWQ8L2NvZGU+IGFzIGEgPHN0cm9uZz5jb250ZW50IGFkZHJlc3M8L3N0cm9uZz4gZm9yIHRoYXQgc3RhdGUgc2hhcGUsIG5vdCBhbiBhcmJpdHJhcnkgYXBwbGljYXRpb24gc3RyaW5nIGhhc2guPC9wPlxuICpcbiAqIDxwPjxzdHJvbmc+UmVsYXRpb25zaGlwIHRvIHtAbGluayBNZXNzYWdlfTwvc3Ryb25nPiDigJQgPGNvZGU+TWVzc2FnZTwvY29kZT4gZXh0ZW5kcyA8Y29kZT5BY3RvcjwvY29kZT4gYW5kIGltcGxlbWVudHNcbiAqIDxzdHJvbmc+QU1QPC9zdHJvbmc+ICh3aXJlIGhlYWRlcnMsIG9wY29kZXMsIFNjaG5vcnIgPGNvZGU+RmFicmljL01lc3NhZ2U8L2NvZGU+KS4gRG93bnN0cmVhbSBhcHBzIHRoYXQgb25seSBuZWVkIGEgc3RhYmxlXG4gKiBzdG9yYWdlIGtleSBzaG91bGQgbm90IGxhYmVsIHRoYXQga2V5IDxjb2RlPkFjdG9yI2lkPC9jb2RlPiB1bmxlc3MgaXQgaXMgcHJvZHVjZWQgYnkgdGhpcyB0eXBlLjwvcD5cbiAqXG4gKiA8cD5OYXJyYXRpdmUgZG9jczogPHN0cm9uZz5ERVZFTE9QRVJTLm1kPC9zdHJvbmc+IChzZWN0aW9uIDxlbT5BY3RvciBhbmQgTWVzc2FnZTwvZW0+KSBhbmQgdGhpcyBmaWxl4oCZcyBjbGFzcyBKU0RvYyBhcmVcbiAqIGtlcHQgaW4gc3luYzsgPGNvZGU+bnBtIHJ1biBtYWtlOmRvY3M8L2NvZGU+IGVtYmVkcyBERVZFTE9QRVJTLm1kIGFzIHRoZSBIVE1MIGhvbWUgcGFnZSwgd2hpbGUgQWN0b3IuaHRtbCBpcyBnZW5lcmF0ZWRcbiAqIGZyb20gaGVyZS48L3A+XG4gKi9cblxuLy8gR2VuZXJpY3NcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuLy8gY29uc3Qgc3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0vcHJvbWlzZXMnKTtcblxuLy8gRGVwZW5kZW5jaWVzXG5jb25zdCBtb25pdG9yID0gcmVxdWlyZSgnZmFzdC1qc29uLXBhdGNoJyk7XG5jb25zdCBwb2ludGVyID0gcmVxdWlyZSgnanNvbi1wb2ludGVyJyk7XG5cbi8vIEZhYnJpYyBUeXBlc1xuY29uc3QgSGFzaDI1NiA9IHJlcXVpcmUoJy4vaGFzaDI1NicpO1xuXG4vLyBGYWJyaWMgRnVuY3Rpb25zXG5jb25zdCBfc29ydEtleXMgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvX3NvcnRLZXlzJyk7XG5jb25zdCB7IHRyeVBhcnNlUGVyc2lzdGVkSnNvbiB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3dpcmVKc29uJyk7XG5cbi8qKlxuICogQGNsYXNzZGVzYyBCYXNlIDxzdHJvbmc+QWN0b3I8L3N0cm9uZz46IEpTT04tc2hhcGVkIDxjb2RlPl9zdGF0ZS5jb250ZW50PC9jb2RlPiBvYnNlcnZlZCB3aXRoXG4gKiA8Y29kZT5mYXN0LWpzb24tcGF0Y2g8L2NvZGU+OyB7QGxpbmsgQWN0b3IjY29tbWl0fSB0dXJucyBkaWZmcyBpbnRvIHtAbGluayBBY3RvciNoaXN0b3J5fSBhbmQgZW1pdHNcbiAqIDxjb2RlPmNvbW1pdDwvY29kZT4gcGx1cyA8Y29kZT5tZXNzYWdlPC9jb2RlPiAoPGNvZGU+dHlwZTogJ0FjdG9yTWVzc2FnZSc8L2NvZGU+LCA8Y29kZT5kYXRhLnR5cGU6ICdDaGFuZ2VzJzwvY29kZT4pLlxuICogPHN0cm9uZz5JZGVudGl0eTwvc3Ryb25nPiDigJQge0BsaW5rIEFjdG9yI2lkfSBpcyBTSEEyNTYoaGV4KSBvZiB0aGUgMzItYnl0ZSBwcmVpbWFnZSBidWZmZXI7IHtAbGluayBBY3RvciNwcmVpbWFnZX0gaXNcbiAqIFNIQTI1NihVVEYtOCkgb2YgcHJldHR5LXByaW50ZWQge0BsaW5rIEFjdG9yI3RvR2VuZXJpY01lc3NhZ2V9IDxjb2RlPnsgdHlwZSwgb2JqZWN0IH08L2NvZGU+IHdpdGggc29ydGVkIGtleXNcbiAqICh7QGxpbmsgQWN0b3IjdG9PYmplY3R9KTsgdXNlcyB7QGxpbmsgSGFzaDI1Ni5jb21wdXRlfS4gVHJlYXQgPGNvZGU+aWQ8L2NvZGU+IGFzIGEgPHN0cm9uZz5jb250ZW50IGFkZHJlc3M8L3N0cm9uZz4sIG5vdCBhblxuICogYXJiaXRyYXJ5IGFwcCBzdHJpbmcgaGFzaC4gPHN0cm9uZz5XaXJlIHRyYWZmaWM8L3N0cm9uZz4g4oCUIHNlZSB7QGxpbmsgTWVzc2FnZX0gKGV4dGVuZHMgQWN0b3IsIEFNUCkuIFNhbWUgbmFycmF0aXZlIGFzXG4gKiA8c3Ryb25nPkRFVkVMT1BFUlMubWQ8L3N0cm9uZz4gKDxlbT5BY3RvciBhbmQgTWVzc2FnZTwvZW0+KSBhbmQgPGNvZGU+QGZpbGVvdmVydmlldzwvY29kZT4gYWJvdmUgKGFsc28gb25cbiAqIDxjb2RlPnR5cGVzX2FjdG9yLmpzLmh0bWw8L2NvZGU+IHNvdXJjZSBwYWdlKS5cbiAqIEBjbGFzcyBBY3RvclxuICogQGV4dGVuZHMgRXZlbnRFbWl0dGVyXG4gKiBAYWNjZXNzIHByb3RlY3RlZFxuICogQGZpcmVzIEFjdG9yI2NvbW1pdFxuICogQGVtaXRzIG1lc3NhZ2UgRW1pdHMgc3RydWN0dXJlZCBvYmplY3RzOyBvbiB7QGxpbmsgQWN0b3IjY29tbWl0fSwgPGNvZGU+dHlwZTogJ0FjdG9yTWVzc2FnZSc8L2NvZGU+IHdpdGggcGF0Y2ggbWV0YWRhdGEgKG5vdCBuZWNlc3NhcmlseSBhIHtAbGluayBNZXNzYWdlfSBBTVAgaW5zdGFuY2UpLlxuICogQHByb3BlcnR5IHtTdHJpbmd9IGlkIDY0LWNoYXIgaGV4OiBTSEEyNTYgb2YgdGhlIDMyLWJ5dGUgZGlnZXN0IHJlcHJlc2VudGVkIGJ5IHtAbGluayBBY3RvciNwcmVpbWFnZX0uXG4gKiBAcHJvcGVydHkge1N0cmluZ30gcHJlaW1hZ2UgNjQtY2hhciBoZXg6IFNIQTI1NiBvZiBVVEYtOCBwcmV0dHkgSlNPTiBvZiB7QGxpbmsgQWN0b3IjdG9HZW5lcmljTWVzc2FnZX0uXG4gKi9cbmNsYXNzIEFjdG9yIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4ge0BsaW5rIEFjdG9yfSwgd2hpY2ggZW1pdHMgbWVzc2FnZXMgZm9yIG90aGVyXG4gICAqIEFjdG9ycyB0byBzdWJzY3JpYmUgdG8uICBZb3UgY2FuIHN1cHBseSBjZXJ0YWluIHBhcmFtZXRlcnNcbiAgICogZm9yIHRoZSBhY3RvciwgaW5jbHVkaW5nIGtleSBtYXRlcmlhbCBbISEhXSDigJQgYmUgbWluZGZ1bCBvZlxuICAgKiB3aGF0IHlvdSBzaGFyZSB3aXRoIG90aGVycyFcbiAgICogQHBhcmFtIHtPYmplY3R9IFthY3Rvcl0gT2JqZWN0IHRvIHVzZSBhcyB0aGUgYWN0b3IuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbYWN0b3Iuc2VlZF0gT3B0aW9uYWwgbW5lbW9uaWMgb3Igc2VlZCBzdHJpbmcgc3RvcmVkIGludG8gc3RhdGUgKHNlZSBCSVAzOSAvIHdhbGxldCBkb2NzIOKAlCBub3QgdmFsaWRhdGVkIGhlcmUpLlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gW2FjdG9yLnB1YmxpY10gUHVibGljIGtleS5cbiAgICogQHBhcmFtIHtCdWZmZXJ9IFthY3Rvci5wcml2YXRlXSBQcml2YXRlIGtleS5cbiAgICogQHJldHVybnMge0FjdG9yfSBJbnN0YW5jZSBvZiB0aGUgQWN0b3IuICBDYWxsIHtAbGluayBBY3RvciNzaWdufSB0byBlbWl0IGEge0BsaW5rIFNpZ25hdHVyZX0uXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoYWN0b3IgPSB7fSkge1xuICAgIHN1cGVyKGFjdG9yKTtcblxuICAgIHRoaXMuc2V0dGluZ3MgPSB7XG4gICAgICB0eXBlOiAnQWN0b3InLFxuICAgICAgc3RhdHVzOiAnUEFVU0VEJ1xuICAgIH07XG5cbiAgICAvLyBJbnRlcm5hbCBTdGF0ZVxuICAgIC8vIFRPRE86IGVuY291cmFnZSB1c2Ugb2YgYHN0YXRlYCBvdmVyIGBfc3RhdGVgXG4gICAgLy8gVE9ETzogdXNlIGBjb25zdCBzdGF0ZWAgaGVyZVxuICAgIHRoaXMuX3N0YXRlID0ge1xuICAgICAgdHlwZTogdGhpcy5zZXR0aW5ncy50eXBlLFxuICAgICAgc3RhdHVzOiB0aGlzLnNldHRpbmdzLnN0YXR1cyxcbiAgICAgIGNvbnRlbnQ6IHRoaXMuX3JlYWRPYmplY3QoYWN0b3IpXG4gICAgfTtcblxuICAgIC8vIFRPRE86IGV2YWx1YXRlIGRpc2FibGluZyBieSBkZWZhdWx0XG4gICAgdGhpcy5oaXN0b3J5ID0gW107XG5cbiAgICAvLyBUT0RPOiBldmFsdWF0ZSBkaXNhYmxpbmcgYnkgZGVmYXVsdFxuICAgIC8vIGFuZC9vciByZXNvbHZpbmcgcGVyZm9ybWFuY2UgaXNzdWVzIGF0IHNjYWxlXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub2JzZXJ2ZXIgPSBtb25pdG9yLm9ic2VydmUodGhpcy5fc3RhdGUuY29udGVudCwgdGhpcy5faGFuZGxlTW9uaXRvckNoYW5nZXMuYmluZCh0aGlzKSk7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVTkFCTEUgVE8gV0FUQ0g6JywgZXhjZXB0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiB1c2UgZWxlZ2FudCBtZXRob2QgdG8gc3RyaXAgdGhlc2UgcHJvcGVydGllc1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2V2ZW50cycsIHsgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfZXZlbnRzQ291bnQnLCB7IGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX21heExpc3RlbmVycycsIHsgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfc3RhdGUnLCB7IGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnb2JzZXJ2ZXInLCB7IGVudW1lcmFibGU6IGZhbHNlIH0pO1xuXG4gICAgLy8gQ2hhaW5hYmxlXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgY2h1bmsgKGFycmF5LCBzaXplID0gMzIpIHtcbiAgICBjb25zdCBjaHVua2VkQXJyYXkgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSArPSBzaXplKSB7XG4gICAgICBjaHVua2VkQXJyYXkucHVzaChhcnJheS5zbGljZShpLCBpICsgc2l6ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gY2h1bmtlZEFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiB7QGxpbmsgQWN0b3J9IGZyb20gYSB2YXJpZXR5IG9mIGZvcm1hdHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dCBUYXJnZXQge0BsaW5rIE9iamVjdH0gdG8gY3JlYXRlLlxuICAgKiBAcmV0dXJucyB7QWN0b3J9IEluc3RhbmNlIG9mIHRoZSB7QGxpbmsgQWN0b3J9LlxuICAgKi9cbiAgc3RhdGljIGZyb21BbnkgKGlucHV0ID0ge30pIHtcbiAgICBsZXQgc3RhdGUgPSBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHN0YXRlID0geyBjb250ZW50OiBpbnB1dCB9O1xuICAgIH0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIHN0YXRlID0geyBjb250ZW50OiBpbnB1dC50b1N0cmluZygnaGV4JykgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBY3RvcihzdGF0ZSk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04gKGlucHV0KSB7XG4gICAgbGV0IHJlc3VsdCA9IG51bGw7XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyAmJiBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByID0gdHJ5UGFyc2VQZXJzaXN0ZWRKc29uKGlucHV0KTtcbiAgICAgIHJlc3VsdCA9IHByLm9rID8gcHIudmFsdWUgOiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyBmcm9tIHRoZSBydW50aW1lIGVudmlyb25tZW50LlxuICAgKiBAcGFyYW0ge051bWJlcn0gW2NvdW50PTMyXSBOdW1iZXIgb2YgcmFuZG9tIGJ5dGVzIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBUaGUgcmFuZG9tIGJ5dGVzLlxuICAgKi9cbiAgc3RhdGljIHJhbmRvbUJ5dGVzIChjb3VudCA9IDMyKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jcnlwdG8gJiYgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xuICAgICAgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyYXkpO1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFycmF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlcXVpcmUoJ2NyeXB0bycpLnJhbmRvbUJ5dGVzKGNvdW50KTtcbiAgICB9XG4gIH1cblxuICBnZXQgaWQgKCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMucHJlaW1hZ2UsICdoZXgnKTtcbiAgICByZXR1cm4gSGFzaDI1Ni5jb21wdXRlKGJ1ZmZlcik7XG4gIH1cblxuICBnZXQgc3BlbmRhYmxlICgpIHtcbiAgICBpZiAoIXRoaXMuc2lnbmVyKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGdlbmVyaWMgKCkge1xuICAgIHJldHVybiB0aGlzLnRvR2VuZXJpY01lc3NhZ2UoKTtcbiAgfVxuXG4gIGdldCBwcmVpbWFnZSAoKSB7XG4gICAgaWYgKCF0aGlzLmdlbmVyaWMpIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGdldCBnZW5lcmljJyk7XG4gICAgY29uc3Qgc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZW5lcmljLCBudWxsLCAnICAnKTtcbiAgICBjb25zdCBzZWNyZXQgPSBCdWZmZXIuZnJvbShzdHJpbmcsICd1dGY4Jyk7XG4gICAgY29uc3QgcHJlaW1hZ2UgPSBIYXNoMjU2LmNvbXB1dGUoc2VjcmV0KTtcbiAgICByZXR1cm4gcHJlaW1hZ2U7XG4gIH1cblxuICBnZXQgc3RhdGUgKCkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX3N0YXRlLmNvbnRlbnQgfHwge30pKTtcbiAgfVxuXG4gIGdldCBzdGF0dXMgKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZS5zdGF0dXM7XG4gIH1cblxuICBnZXQgdHlwZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlWydAdHlwZSddO1xuICB9XG5cbiAgc2V0IHN0YXRlICh2YWx1ZSkge1xuICAgIHRoaXMuX3N0YXRlLmNvbnRlbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIHNldCBzdGF0dXMgKHZhbHVlKSB7XG4gICAgdGhpcy5fc3RhdGUuc3RhdHVzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGljaXRseSBhZG9wdCBhIHNldCBvZiB7QGxpbmsgSlNPTlBhdGNofS1lbmNvZGVkIGNoYW5nZXMuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNoYW5nZXMgTGlzdCBvZiB7QGxpbmsgSlNPTlBhdGNofSBvcGVyYXRpb25zIHRvIGFwcGx5LlxuICAgKiBAcmV0dXJucyB7QWN0b3J9IEluc3RhbmNlIG9mIHRoZSBBY3Rvci5cbiAgICovXG4gIGFkb3B0IChjaGFuZ2VzKSB7XG4gICAgdHJ5IHtcbiAgICAgIG1vbml0b3IuYXBwbHlQYXRjaCh0aGlzLl9zdGF0ZS5jb250ZW50LCBjaGFuZ2VzKTtcbiAgICAgIHRoaXMuY29tbWl0KCk7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXhjZXB0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBjdXJyZW50IHN0YXRlIHRvIGEgY29tbWl0bWVudC5cbiAgICogQHJldHVybnMge1N0cmluZ30gMzItYnl0ZSBJRFxuICAgKi9cbiAgY29tbWl0ICgpIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHN0YXRlID0gbmV3IEFjdG9yKHRoaXMuc3RhdGUpO1xuICAgIGNvbnN0IGNoYW5nZXMgPSBtb25pdG9yLmdlbmVyYXRlKHRoaXMub2JzZXJ2ZXIpO1xuICAgIGNvbnN0IHBhcmVudCA9ICh0aGlzLmhpc3RvcnkubGVuZ3RoKSA/IHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMV0uc3RhdGUgOiBudWxsO1xuICAgIGNvbnN0IGNvbW1pdCA9IG5ldyBBY3Rvcih7XG4gICAgICBjaGFuZ2VzOiBjaGFuZ2VzLFxuICAgICAgcGFyZW50OiBwYXJlbnQsXG4gICAgICBzdGF0ZTogc3RhdGUuaWQgLy8gVE9ETzogaW5jbHVkZSB3aG9sZSBzdGF0ZT9cbiAgICB9KTtcblxuICAgIHRoaXMuaGlzdG9yeS5wdXNoKGNvbW1pdCk7XG5cbiAgICB0aGlzLmVtaXQoJ2NvbW1pdCcsIGNvbW1pdCk7XG4gICAgdGhpcy5lbWl0KCdtZXNzYWdlJywge1xuICAgICAgdHlwZTogJ0FjdG9yTWVzc2FnZScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGFjdG9yOiB7IGlkOiB0aGlzLmlkIH0sXG4gICAgICAgIGNyZWF0ZWQ6IG5vdy50b0lTT1N0cmluZygpLFxuICAgICAgICBvYmplY3Q6IGNoYW5nZXMsXG4gICAgICAgIHR5cGU6ICdDaGFuZ2VzJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbW1pdC5pZDtcbiAgfVxuXG4gIGRlYnVnICguLi5wYXJhbXMpIHtcbiAgICB0aGlzLmVtaXQoJ2RlYnVnJywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdGhlIEFjdG9yJ3Mgc3RhdGUgdG8gYSBzdGFuZGFyZCB7QGxpbmsgT2JqZWN0fS5cbiAgICogQHJldHVybnMge09iamVjdH0gU3RhbmRhcmQgb2JqZWN0LlxuICAgKi9cbiAgZXhwb3J0ICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0eXBlOiAnRmFicmljQWN0b3InLFxuICAgICAgb2JqZWN0OiB0aGlzLnN0YXRlLFxuICAgICAgdmVyc2lvbjogMVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSB2YWx1ZSBmcm9tIHRoZSBBY3RvcidzIHN0YXRlIGJ5IHtAbGluayBKU09OUG9pbnRlcn0gcGF0aC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggUGF0aCB0byByZXRyaWV2ZSB1c2luZyB7QGxpbmsgSlNPTlBvaW50ZXJ9LlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBWYWx1ZSBvZiB0aGUgcGF0aCBpbiB0aGUgQWN0b3IncyBzdGF0ZS5cbiAgICovXG4gIGdldCAocGF0aCkge1xuICAgIHJldHVybiBwb2ludGVyLmdldCh0aGlzLl9zdGF0ZS5jb250ZW50LCBwYXRoKTtcbiAgfVxuXG4gIGxvZyAoLi4ucGFyYW1zKSB7XG4gICAgdGhpcy5lbWl0KCdsb2cnLCAuLi5wYXJhbXMpO1xuICB9XG5cbiAgbXV0YXRlIChzZWVkKSB7XG4gICAgaWYgKHNlZWQgPT09IDAgfHwgIXNlZWQpIHNlZWQgPSB0aGlzLnJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBjb25zdCBwYXRjaGVzID0gW1xuICAgICAgeyBvcDogJ3JlcGxhY2UnLCBwYXRoOiAnL3NlZWQnLCB2YWx1ZTogc2VlZCB9XG4gICAgXTtcblxuICAgIG1vbml0b3IuYXBwbHlQYXRjaCh0aGlzLl9zdGF0ZS5jb250ZW50LCBwYXRjaGVzKTtcbiAgICB0aGlzLmNvbW1pdCgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgdmFsdWUgaW4gdGhlIEFjdG9yJ3Mgc3RhdGUgYnkge0BsaW5rIEpTT05Qb2ludGVyfSBwYXRoLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGF0aCBQYXRoIHRvIHNldCB1c2luZyB7QGxpbmsgSlNPTlBvaW50ZXJ9LlxuICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgVmFsdWUgdG8gc2V0LlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBWYWx1ZSBvZiB0aGUgcGF0aCBpbiB0aGUgQWN0b3IncyBzdGF0ZS5cbiAgICovXG4gIHNldCAocGF0aCwgdmFsdWUpIHtcbiAgICBwb2ludGVyLnNldCh0aGlzLl9zdGF0ZS5jb250ZW50LCBwYXRoLCB2YWx1ZSk7XG4gICAgdGhpcy5jb21taXQoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldFN0YXR1cyAodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByZW1vdmUgc3RhdHVzLicpO1xuICAgIHRoaXMuc3RhdHVzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBvdXRwdXQgc3RyZWFtIGZvciB0aGUgQWN0b3IuXG4gICAqIEBwYXJhbSB7VHJhbnNmb3JtU3RyZWFtfSBbcGlwZV0gUGlwZSB0byBzdHJlYW0gdG8uXG4gICAqIEByZXR1cm5zIHtUcmFuc2Zvcm1TdHJlYW19IE5ldyBvdXRwdXQgc3RyZWFtIGZvciB0aGUgQWN0b3IuXG4gICAqL1xuICBzdHJlYW0gKHBpcGUpIHtcbiAgICBpZiAocGlwZSkge1xuICAgICAgLy9cbiAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBzdHJlYW0uVHJhbnNmb3JtKHtcbiAgICAgICAgdHJhbnNmb3JtIChjaHVuaywgZW5jb2RpbmcsIGRvbmUpIHtcbiAgICAgICAgICBkb25lKG51bGwsIGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRPRE86IHRlc3QgdGhpc1xuICAgICAgLy8gMS4gU3RyZWFtIHRvIHRoZSBvdXRwdXQgcGlwZVxuICAgICAgc3RyZWFtLnBpcGUocGlwZSk7XG5cbiAgICAgIC8vIDIuIFN0cmVhbSB0byB0aGUgYWN0b3JcbiAgICAgIHRoaXMuc3RyZWFtLnBpcGUoc3RyZWFtKTtcblxuICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0cyB0aGUgQWN0b3IgdG8gYSBub3JtYWxpemVkIEJ1ZmZlci5cbiAgICogQHJldHVybnMge0J1ZmZlcn1cbiAgICovXG4gIHRvQnVmZmVyICgpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5zZXJpYWxpemUoKSwgJ3V0ZjgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXN0cyB0aGUgQWN0b3IgdG8gYSBnZW5lcmljIG1lc3NhZ2UgZW52ZWxvcGUgZm9yIHN0YXRlIGFubm91bmNlbWVudHMgYW5kIGhpc3RvcnkuXG4gICAqIFNoYXBlIGlzIHN0YWJsZTogYHsgdHlwZSwgb2JqZWN0IH1gIHdoZXJlIGBvYmplY3RgIGlzIHNvcnRlZC1rZXkgc3RhdGUgKHtAbGluayBBY3RvciN0b09iamVjdH0pLlxuICAgKiB7QGxpbmsgQWN0b3IjaWR9IGRlcml2ZXMgZnJvbSBhIGRpZ2VzdCBvZiB0aGUgcHJldHR5LXByaW50ZWQgZ2VuZXJpYyBtZXNzYWdlOyBleHRlbmRpbmcgdGhpc1xuICAgKiBlbnZlbG9wZSByZXF1aXJlcyBhIGZvcm1hdC92ZXJzaW9uIG1pZ3JhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbdHlwZT0nRmFicmljQWN0b3JTdGF0ZSddIExvZ2ljYWwgbWVzc2FnZSB0eXBlIHN0cmluZy5cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWVya2xlX3RyZWV9XG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2LmZhYnJpYy5wdWIvbWVzc2FnZXN9XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IGB7IHR5cGUsIG9iamVjdCB9YFxuICAgKi9cbiAgdG9HZW5lcmljTWVzc2FnZSAodHlwZSA9ICdGYWJyaWNBY3RvclN0YXRlJykge1xuICAgIGNvbnN0IG1lc3NhZ2VUeXBlID0gdHlwZSB8fCAnRmFicmljQWN0b3JTdGF0ZSc7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IG1lc3NhZ2VUeXBlLFxuICAgICAgb2JqZWN0OiB0aGlzLnRvT2JqZWN0KClcbiAgICB9O1xuICB9XG5cbiAgdG9KU09OICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ0BpZCc6IHRoaXMuaWQsXG4gICAgICAuLi50aGlzLnN0YXRlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBBY3RvcidzIGN1cnJlbnQgc3RhdGUgYXMgYW4ge0BsaW5rIE9iamVjdH0uXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuICB0b09iamVjdCAoKSB7XG4gICAgcmV0dXJuIF9zb3J0S2V5cyh0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIHRvU3RyaW5nIChmb3JtYXQgPSAnanNvbicpIHtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuc2VyaWFsaXplKCksICd1dGY4JykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY2FzZSAnanNvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBgc3RhdHVzYCBwcm9wZXJ0eSB0byBwYXVzZWQuXG4gICAqIEByZXR1cm5zIHtBY3Rvcn0gSW5zdGFuY2Ugb2YgdGhlIEFjdG9yLlxuICAgKi9cbiAgcGF1c2UgKCkge1xuICAgIHRoaXMuc3RhdHVzID0gJ1BBVVNJTkcnO1xuICAgIHRoaXMuY29tbWl0KCk7XG4gICAgdGhpcy5zdGF0dXMgPSAnUEFVU0VEJztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJhbmRvbUJ5dGVzIChjb3VudCA9IDMyKSB7XG4gICAgcmV0dXJuIEFjdG9yLnJhbmRvbUJ5dGVzKGNvdW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdGhlIEFjdG9yJ3MgY3VycmVudCBzdGF0ZSBpbnRvIGEgSlNPTi1mb3JtYXR0ZWQgc3RyaW5nLlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgKi9cbiAgc2VyaWFsaXplICgpIHtcbiAgICBsZXQganNvbiA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAganNvbiA9IEpTT04uc3RyaW5naWZ5KHRoaXMudG9PYmplY3QoKSwgbnVsbCwgJyAgJyk7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICBqc29uID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB0eXBlOiAnRXJyb3InLFxuICAgICAgICBjb250ZW50OiBgRXhjZXB0aW9uIHNlcmlhbGl6aW5nOiAke2V4Y2VwdGlvbn1gXG4gICAgICB9LCBudWxsLCAnICAnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHNoYTI1NiAodmFsdWUpIHtcbiAgICByZXR1cm4gSGFzaDI1Ni5kaWdlc3QodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHRoZSBBY3Rvci5cbiAgICogQHJldHVybnMge0FjdG9yfVxuICAgKi9cbiAgc2lnbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmltcGxlbWVudGVkIG9uIHRoaXMgYnJhbmNoLiAgVXNlIEBmYWJyaWMvY29yZS90eXBlcy9zaWduZXIgaW5zdGVhZC4nKTtcbiAgICAvKiB0aGlzLnNpZ25hdHVyZSA9IHRoaXMua2V5Ll9zaWduKHRoaXMudG9CdWZmZXIoKSk7XG4gICAgdGhpcy5lbWl0KCdzaWduYXR1cmUnLCB0aGlzLnNpZ25hdHVyZSk7XG4gICAgcmV0dXJuIHRoaXM7ICovXG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBgc3RhdHVzYCBwcm9wZXJ0eSB0byB1bnBhdXNlZC5cbiAgICogQHJldHVybnMge0FjdG9yfSBJbnN0YW5jZSBvZiB0aGUgQWN0b3IuXG4gICAqL1xuICB1bnBhdXNlICgpIHtcbiAgICB0aGlzLnN0YXR1cyA9ICdVTlBBVVNJTkcnO1xuICAgIHRoaXMuY29tbWl0KCk7XG4gICAgdGhpcy5zdGF0dXMgPSAnVU5QQVVTRUQnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmFsaWRhdGUgKCkge1xuICAgIGlmICghdGhpcy5zdGF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghdGhpcy5pZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgaW5uZXIgdmFsdWUgb2YgdGhlIEFjdG9yIHdpdGggYW4gb3B0aW9uYWwgY2FzdCB0eXBlLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW2Zvcm1hdF0gQ2FzdCB0aGUgdmFsdWUgdG8gb25lIG9mOiBgYnVmZmVyLCBoZXgsIGpzb24sIHN0cmluZ2BcbiAgICogQHJldHVybnMge09iamVjdH0gSW5uZXIgdmFsdWUgb2YgdGhlIEFjdG9yIGFzIGFuIHtAbGluayBPYmplY3R9LCBvciBjYXN0IHRvIHRoZSByZXF1ZXN0ZWQgYGZvcm1hdGAuXG4gICAqL1xuICB2YWx1ZSAoZm9ybWF0ID0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGU7XG4gICAgICBjYXNlICdidWZmZXInOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy52YWx1ZSgnc3RyaW5nJyksICd1dGY4Jyk7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSgnYnVmZmVyJykudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY2FzZSAnanNvbic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgX2dldEZpZWxkIChuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlLmNvbnRlbnRbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogSW5jdXJzIDEgU1lTQ0FMTFxuICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIF9nZXRTdGF0ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGU7XG4gIH1cblxuICBfaGFuZGxlTW9uaXRvckNoYW5nZXMgKF9jaGFuZ2VzKSB7XG4gICAgLy8gVE9ETzogZW1pdCBnbG9iYWwgc3RhdGUgZXZlbnQgaGVyZVxuICAgIC8vIGFmdGVyIHZlcmlmeSwgY29tbWl0XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYW4gT2JqZWN0IGludG8gYSBjb3JyZXNwb25kaW5nIEZhYnJpYyBzdGF0ZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0IE9iamVjdCB0byByZWFkIGFzIGlucHV0LlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBGYWJyaWMgc3RhdGUuXG4gICAqL1xuICBfcmVhZE9iamVjdCAoaW5wdXQgPSB7fSkge1xuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwge1xuICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgc2l6ZTogaW5wdXQubGVuZ3RoLFxuICAgICAgICBjb250ZW50OiBpbnB1dCxcbiAgICAgICAgZW5jb2Rpbmc6ICd1dGY4J1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHtcbiAgICAgICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgICAgIHNpemU6IGlucHV0Lmxlbmd0aCxcbiAgICAgICAgY29udGVudDogaW5wdXQudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBlbmNvZGluZzogJ2hleCdcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgaW5wdXQpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFjdG9yO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/actor.js\n\n}")},"./node_modules/@fabric/core/types/bech32.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\nconst { encode, decode, toWords, fromWords } = __webpack_require__(/*! ../functions/bech32 */ \"./node_modules/@fabric/core/functions/bech32.js\");\n\nclass Bech32 {\n constructor (input = {}) {\n this.settings = Object.assign({\n hrp: 'bc',\n separator: '1',\n content: ''\n }, input);\n\n return this;\n }\n\n get content () {\n return this.settings.content;\n }\n\n get hrp () {\n return this.settings.hrp;\n }\n\n get words () {\n const buffer = (this.content instanceof Buffer) ? this.content : Buffer.from(this.content, 'hex');\n return toWords(buffer);\n }\n\n static decode (input = '') {\n const d = decode(input);\n return {\n prefix: d.hrp,\n content: fromWords(d.words)\n };\n }\n\n toString () {\n return encode(this.hrp, this.words, 'bech32m');\n }\n}\n\nmodule.exports = Bech32;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL2JlY2gzMi5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWIsUUFBUSxxQ0FBcUMsRUFBRSxtQkFBTyxDQUFDLDRFQUFxQjs7QUFFNUU7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRDQUE0QyxNQUFNLG1CQUFtQixNQUFNO0FBQzNFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvdHlwZXMvYmVjaDMyLmpzP2E5ODUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IGVuY29kZSwgZGVjb2RlLCB0b1dvcmRzLCBmcm9tV29yZHMgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9iZWNoMzInKTtcblxuY2xhc3MgQmVjaDMyIHtcbiAgY29uc3RydWN0b3IgKGlucHV0ID0ge30pIHtcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBocnA6ICdiYycsXG4gICAgICBzZXBhcmF0b3I6ICcxJyxcbiAgICAgIGNvbnRlbnQ6ICcnXG4gICAgfSwgaW5wdXQpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQgY29udGVudCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuY29udGVudDtcbiAgfVxuXG4gIGdldCBocnAgKCkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmhycDtcbiAgfVxuXG4gIGdldCB3b3JkcyAoKSB7XG4gICAgY29uc3QgYnVmZmVyID0gKHRoaXMuY29udGVudCBpbnN0YW5jZW9mIEJ1ZmZlcikgPyB0aGlzLmNvbnRlbnQgOiBCdWZmZXIuZnJvbSh0aGlzLmNvbnRlbnQsICdoZXgnKTtcbiAgICByZXR1cm4gdG9Xb3JkcyhidWZmZXIpO1xuICB9XG5cbiAgc3RhdGljIGRlY29kZSAoaW5wdXQgPSAnJykge1xuICAgIGNvbnN0IGQgPSBkZWNvZGUoaW5wdXQpO1xuICAgIHJldHVybiB7XG4gICAgICBwcmVmaXg6IGQuaHJwLFxuICAgICAgY29udGVudDogZnJvbVdvcmRzKGQud29yZHMpXG4gICAgfTtcbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gZW5jb2RlKHRoaXMuaHJwLCB0aGlzLndvcmRzLCAnYmVjaDMybScpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQmVjaDMyO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/bech32.js\n\n}")},"./node_modules/@fabric/core/types/circuit.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n// External dependencies\nconst crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nconst parser = __webpack_require__(/*! dotparser */ \"./node_modules/dotparser/index.js\");\nconst visualize = __webpack_require__(/*! javascript-state-machine/lib/visualize */ \"./node_modules/javascript-state-machine/lib/visualize.js\");\nconst StateMachine = __webpack_require__(/*! javascript-state-machine */ \"./node_modules/javascript-state-machine/lib/state-machine.js\");\n\n// Fabric Types\nconst Machine = __webpack_require__(/*! ./machine */ \"./node_modules/@fabric/core/types/machine.js\");\nconst Actor = __webpack_require__(/*! ./actor */ \"./node_modules/@fabric/core/types/actor.js\");\n\n/**\n * The {@link Circuit} is the mechanism through which {@link Fabric}\n * operates, a computable directed graph describing a network of\n * {@link Peer} components and their interactions (side effects).\n * See also {@link Swarm} for deeper inspection of {@link Machine}\n * mechanics.\n */\nclass Circuit extends Actor {\n constructor (config = {}) {\n super(config);\n\n this.settings = Object.assign({\n edges: [],\n gates: [],\n loops: [],\n nodes: [],\n wires: [],\n methods: {},\n state: {\n graph: {\n edges: [],\n nodes: []\n }\n }\n }, config);\n\n this['@data'] = this.settings;\n\n this.gates = [];\n this.transitions = [];\n this.methods = {};\n\n for (let i in this.settings.gates) {\n this.transitions.push({\n name: `step`,\n from: 'cycle()',\n to: `${this.settings.gates[i]}`\n });\n }\n\n for (let i in this.settings.wires) {\n let wire = this.settings.wires[i];\n this.transitions.push({ name: wire.name, from: wire.from, to: wire.to });\n }\n\n // Internal State\n this._state = {\n steps: [\n 'load', // load from storage\n 'bootstrap', // configure memory\n 'step', // single cycle before start\n 'start', // create services\n 'listen' // listen for input\n ],\n content: this.settings.state\n };\n\n this.graph = new StateMachine({\n init: 'start()',\n data: this.state,\n transitions: this.transitions,\n methods: this.methods\n });\n\n return this;\n }\n\n get hash () {\n return crypto.createHash('sha256').update(this.dot).digest('hex');\n }\n\n get dot () {\n // TODO: generate polynomial for circuit\n return visualize(this.graph, {\n orientation: 'horizontal'\n });\n }\n\n _registerMethod (name, method) {\n this.methods[name] = method;\n }\n\n fromBristolFashion () {\n // Convert from Bristol Fashion format to internal circuit representation\n const lines = this.dot.split('\\n');\n const [_numGates, _numWires, numInputWires, numOutputWires] = lines[0].split(' ').map(Number);\n\n this.gates = [];\n this.wires = [];\n this.inputWires = numInputWires;\n this.outputWires = numOutputWires;\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i].trim();\n if (!line) continue;\n\n const parts = line.split(' ');\n if (parts.length < 4) continue;\n\n const numInputs = parseInt(parts[0]);\n const numOutputs = parseInt(parts[1]);\n const gate = {\n type: parts[parts.length - 1],\n numInputs: numInputs,\n numOutputs: numOutputs,\n inputs: parts.slice(2, 2 + numInputs).map(Number),\n outputs: parts.slice(2 + numInputs, 2 + numInputs + numOutputs).map(Number)\n };\n\n this.gates.push(gate);\n }\n\n return this;\n }\n\n fromBristolFormat () {\n // Convert from Bristol Format to internal circuit representation\n const lines = this.dot.split('\\n');\n const [_numGates, _numWires] = lines[0].split(' ').map(Number);\n\n this.gates = [];\n this.wires = [];\n\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i].trim();\n if (!line) continue;\n\n const parts = line.split(' ');\n if (parts.length < 3) continue;\n\n const gate = {\n type: parts[parts.length - 1],\n inputs: parts.slice(0, -1).map(Number)\n };\n\n this.gates.push(gate);\n }\n\n return this;\n }\n\n toBristolFashion () {\n // Convert internal circuit representation to Bristol Fashion format\n let output = `${this.gates.length} ${this.wires.length} ${this.inputWires || 0} ${this.outputWires || 0}\\n`;\n\n for (const gate of this.gates) {\n const numInputs = gate.numInputs || gate.inputs.length;\n const numOutputs = gate.numOutputs || 1;\n const inputs = gate.inputs.join(' ');\n const outputs = gate.outputs ? gate.outputs.join(' ') : '';\n output += `${numInputs} ${numOutputs} ${inputs} ${outputs} ${gate.type}\\n`;\n }\n\n return output;\n }\n\n toBristolFormat () {\n // Convert internal circuit representation to Bristol Format\n let output = `${this.gates.length} ${this.wires.length}\\n`;\n\n for (const gate of this.gates) {\n output += `${gate.inputs.join(' ')} ${gate.type}\\n`;\n }\n\n return output;\n }\n\n toObject () {\n return parser(this.dot);\n }\n\n parse (input) {\n return parser(input);\n }\n\n compute (input) {\n let output = input;\n\n // empty resolves to Identity function f(x) = x\n\n return output;\n }\n\n scramble () {\n let key = crypto.randomBytes(32);\n let machine = new Machine({ seed: key });\n void machine.sip();\n let gates = [];\n\n for (let i = 0; i < this._state.steps.length; i++) {\n gates.push({\n name: this._state.steps[i],\n seed: machine.sip()\n });\n }\n\n gates.sort((a, b) => {\n return a.seed - b.seed;\n });\n\n return gates;\n }\n\n render () {\n let hash = crypto.createHash('sha256').update(this.dot).digest('base64');\n return `\n ${this.dot}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n`;\n }\n\n _draw () {\n return this;\n }\n\n async _step () {\n let circuit = this;\n let origin = circuit.hash + '';\n\n console.log('[CIRCUIT:STEP]', this.graph);\n console.log('[CIRCUIT:STEP]', 'woo:', this.toObject());\n console.log('[CIRCUIT:STEP]', 'zkc:', this.toObject().map((x) => {\n return x.children.filter(x => {\n return x.type === 'edge_stmt';\n }).map((y) => {\n return y.edge_list.map(z => {\n return z.id;\n });\n });\n })[0]);\n\n console.log('[CIRCUIT:STEP]', 'fsm:', this.graph._fsm);\n console.log('[CIRCUIT:STEP]', 'origin:', origin);\n console.log('[CIRCUIT:STEP]', 'origin hash:', this.hash);\n console.log('[CIRCUIT:STEP]', 'origin data:', this.dot);\n console.log('[CIRCUIT:STEP]', 'current:', this.graph.state);\n\n switch (this.graph.state) {\n default:\n console.error('unhandled state:', this.graph.state);\n break;\n case 'init':\n this.graph.ready();\n break;\n case 'ready':\n this.graph.step1();\n break;\n case '1':\n this.graph.step2();\n break;\n case '2':\n this.graph.step3();\n break;\n case '3':\n this.graph.done();\n break;\n case 'complete':\n console.log('#winning');\n this.emit('complete');\n break;\n }\n\n console.log('[CIRCUIT:STEP]', 'after:', this.graph.state);\n\n this.emit(origin, this.dot);\n\n await this._PUT(`/output`, Buffer.alloc((256 ** 3) / 8), false);\n await this._PUT(`/source`, this.dot, false);\n await this._PUT(`/status`, this.graph.state, false);\n\n let commit = await this.commit();\n\n console.log('commit:', commit);\n\n return commit;\n }\n\n async start () {\n return this;\n }\n}\n\nmodule.exports = Circuit;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL2NpcmN1aXQuanMiLCJtYXBwaW5ncyI6IjtBQUFhOztBQUViO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLHlEQUFRO0FBQy9CLGVBQWUsbUJBQU8sQ0FBQyxvREFBVztBQUNsQyxrQkFBa0IsbUJBQU8sQ0FBQyx3R0FBd0M7QUFDbEUscUJBQXFCLG1CQUFPLENBQUMsOEZBQTBCOztBQUV2RDtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLCtEQUFXO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQywyREFBUzs7QUFFL0I7QUFDQSxRQUFRLGVBQWUsZ0NBQWdDO0FBQ3ZEO0FBQ0EsSUFBSSxZQUFZO0FBQ2hCLGFBQWEsYUFBYSwwQkFBMEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsdUJBQXVCO0FBQ3RDLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLCtDQUErQztBQUM3RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsb0JBQW9CLGtCQUFrQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCOztBQUU1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVO0FBQzdFOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixtQkFBbUIsRUFBRSxrQkFBa0I7O0FBRTNEO0FBQ0EsbUJBQW1CLHVCQUF1QixFQUFFLFVBQVU7QUFDdEQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLFdBQVc7QUFDM0M7QUFDQTs7QUFFQSxvQkFBb0IsOEJBQThCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxVQUFVLDJCQUEyQixLQUFLLElBQUksU0FBUztBQUMzRjtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsVUFBVSwwQ0FBMEMsU0FBUztBQUM1RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsVUFBVTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSwrQkFBK0IsTUFBTTtBQUNyQztBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvdHlwZXMvY2lyY3VpdC5qcz8xYjA3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gRXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbmNvbnN0IHBhcnNlciA9IHJlcXVpcmUoJ2RvdHBhcnNlcicpO1xuY29uc3QgdmlzdWFsaXplID0gcmVxdWlyZSgnamF2YXNjcmlwdC1zdGF0ZS1tYWNoaW5lL2xpYi92aXN1YWxpemUnKTtcbmNvbnN0IFN0YXRlTWFjaGluZSA9IHJlcXVpcmUoJ2phdmFzY3JpcHQtc3RhdGUtbWFjaGluZScpO1xuXG4vLyBGYWJyaWMgVHlwZXNcbmNvbnN0IE1hY2hpbmUgPSByZXF1aXJlKCcuL21hY2hpbmUnKTtcbmNvbnN0IEFjdG9yID0gcmVxdWlyZSgnLi9hY3RvcicpO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgQ2lyY3VpdH0gaXMgdGhlIG1lY2hhbmlzbSB0aHJvdWdoIHdoaWNoIHtAbGluayBGYWJyaWN9XG4gKiBvcGVyYXRlcywgYSBjb21wdXRhYmxlIGRpcmVjdGVkIGdyYXBoIGRlc2NyaWJpbmcgYSBuZXR3b3JrIG9mXG4gKiB7QGxpbmsgUGVlcn0gY29tcG9uZW50cyBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIChzaWRlIGVmZmVjdHMpLlxuICogU2VlIGFsc28ge0BsaW5rIFN3YXJtfSBmb3IgZGVlcGVyIGluc3BlY3Rpb24gb2Yge0BsaW5rIE1hY2hpbmV9XG4gKiBtZWNoYW5pY3MuXG4gKi9cbmNsYXNzIENpcmN1aXQgZXh0ZW5kcyBBY3RvciB7XG4gIGNvbnN0cnVjdG9yIChjb25maWcgPSB7fSkge1xuICAgIHN1cGVyKGNvbmZpZyk7XG5cbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBlZGdlczogW10sXG4gICAgICBnYXRlczogW10sXG4gICAgICBsb29wczogW10sXG4gICAgICBub2RlczogW10sXG4gICAgICB3aXJlczogW10sXG4gICAgICBtZXRob2RzOiB7fSxcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIGdyYXBoOiB7XG4gICAgICAgICAgZWRnZXM6IFtdLFxuICAgICAgICAgIG5vZGVzOiBbXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgY29uZmlnKTtcblxuICAgIHRoaXNbJ0BkYXRhJ10gPSB0aGlzLnNldHRpbmdzO1xuXG4gICAgdGhpcy5nYXRlcyA9IFtdO1xuICAgIHRoaXMudHJhbnNpdGlvbnMgPSBbXTtcbiAgICB0aGlzLm1ldGhvZHMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgaW4gdGhpcy5zZXR0aW5ncy5nYXRlcykge1xuICAgICAgdGhpcy50cmFuc2l0aW9ucy5wdXNoKHtcbiAgICAgICAgbmFtZTogYHN0ZXBgLFxuICAgICAgICBmcm9tOiAnY3ljbGUoKScsXG4gICAgICAgIHRvOiBgJHt0aGlzLnNldHRpbmdzLmdhdGVzW2ldfWBcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgaW4gdGhpcy5zZXR0aW5ncy53aXJlcykge1xuICAgICAgbGV0IHdpcmUgPSB0aGlzLnNldHRpbmdzLndpcmVzW2ldO1xuICAgICAgdGhpcy50cmFuc2l0aW9ucy5wdXNoKHsgbmFtZTogd2lyZS5uYW1lLCBmcm9tOiB3aXJlLmZyb20sIHRvOiB3aXJlLnRvIH0pO1xuICAgIH1cblxuICAgIC8vIEludGVybmFsIFN0YXRlXG4gICAgdGhpcy5fc3RhdGUgPSB7XG4gICAgICBzdGVwczogW1xuICAgICAgICAnbG9hZCcsIC8vIGxvYWQgZnJvbSBzdG9yYWdlXG4gICAgICAgICdib290c3RyYXAnLCAvLyBjb25maWd1cmUgbWVtb3J5XG4gICAgICAgICdzdGVwJywgLy8gc2luZ2xlIGN5Y2xlIGJlZm9yZSBzdGFydFxuICAgICAgICAnc3RhcnQnLCAvLyBjcmVhdGUgc2VydmljZXNcbiAgICAgICAgJ2xpc3RlbicgLy8gbGlzdGVuIGZvciBpbnB1dFxuICAgICAgXSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMuc2V0dGluZ3Muc3RhdGVcbiAgICB9O1xuXG4gICAgdGhpcy5ncmFwaCA9IG5ldyBTdGF0ZU1hY2hpbmUoe1xuICAgICAgaW5pdDogJ3N0YXJ0KCknLFxuICAgICAgZGF0YTogdGhpcy5zdGF0ZSxcbiAgICAgIHRyYW5zaXRpb25zOiB0aGlzLnRyYW5zaXRpb25zLFxuICAgICAgbWV0aG9kczogdGhpcy5tZXRob2RzXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldCBoYXNoICgpIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0aGlzLmRvdCkuZGlnZXN0KCdoZXgnKTtcbiAgfVxuXG4gIGdldCBkb3QgKCkge1xuICAgIC8vIFRPRE86IGdlbmVyYXRlIHBvbHlub21pYWwgZm9yIGNpcmN1aXRcbiAgICByZXR1cm4gdmlzdWFsaXplKHRoaXMuZ3JhcGgsIHtcbiAgICAgIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCdcbiAgICB9KTtcbiAgfVxuXG4gIF9yZWdpc3Rlck1ldGhvZCAobmFtZSwgbWV0aG9kKSB7XG4gICAgdGhpcy5tZXRob2RzW25hbWVdID0gbWV0aG9kO1xuICB9XG5cbiAgZnJvbUJyaXN0b2xGYXNoaW9uICgpIHtcbiAgICAvLyBDb252ZXJ0IGZyb20gQnJpc3RvbCBGYXNoaW9uIGZvcm1hdCB0byBpbnRlcm5hbCBjaXJjdWl0IHJlcHJlc2VudGF0aW9uXG4gICAgY29uc3QgbGluZXMgPSB0aGlzLmRvdC5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgW19udW1HYXRlcywgX251bVdpcmVzLCBudW1JbnB1dFdpcmVzLCBudW1PdXRwdXRXaXJlc10gPSBsaW5lc1swXS5zcGxpdCgnICcpLm1hcChOdW1iZXIpO1xuXG4gICAgdGhpcy5nYXRlcyA9IFtdO1xuICAgIHRoaXMud2lyZXMgPSBbXTtcbiAgICB0aGlzLmlucHV0V2lyZXMgPSBudW1JbnB1dFdpcmVzO1xuICAgIHRoaXMub3V0cHV0V2lyZXMgPSBudW1PdXRwdXRXaXJlcztcblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XG4gICAgICBpZiAoIWxpbmUpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBwYXJ0cyA9IGxpbmUuc3BsaXQoJyAnKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPCA0KSBjb250aW51ZTtcblxuICAgICAgY29uc3QgbnVtSW5wdXRzID0gcGFyc2VJbnQocGFydHNbMF0pO1xuICAgICAgY29uc3QgbnVtT3V0cHV0cyA9IHBhcnNlSW50KHBhcnRzWzFdKTtcbiAgICAgIGNvbnN0IGdhdGUgPSB7XG4gICAgICAgIHR5cGU6IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLFxuICAgICAgICBudW1JbnB1dHM6IG51bUlucHV0cyxcbiAgICAgICAgbnVtT3V0cHV0czogbnVtT3V0cHV0cyxcbiAgICAgICAgaW5wdXRzOiBwYXJ0cy5zbGljZSgyLCAyICsgbnVtSW5wdXRzKS5tYXAoTnVtYmVyKSxcbiAgICAgICAgb3V0cHV0czogcGFydHMuc2xpY2UoMiArIG51bUlucHV0cywgMiArIG51bUlucHV0cyArIG51bU91dHB1dHMpLm1hcChOdW1iZXIpXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmdhdGVzLnB1c2goZ2F0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmcm9tQnJpc3RvbEZvcm1hdCAoKSB7XG4gICAgLy8gQ29udmVydCBmcm9tIEJyaXN0b2wgRm9ybWF0IHRvIGludGVybmFsIGNpcmN1aXQgcmVwcmVzZW50YXRpb25cbiAgICBjb25zdCBsaW5lcyA9IHRoaXMuZG90LnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCBbX251bUdhdGVzLCBfbnVtV2lyZXNdID0gbGluZXNbMF0uc3BsaXQoJyAnKS5tYXAoTnVtYmVyKTtcblxuICAgIHRoaXMuZ2F0ZXMgPSBbXTtcbiAgICB0aGlzLndpcmVzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5lID0gbGluZXNbaV0udHJpbSgpO1xuICAgICAgaWYgKCFsaW5lKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgcGFydHMgPSBsaW5lLnNwbGl0KCcgJyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoIDwgMykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGdhdGUgPSB7XG4gICAgICAgIHR5cGU6IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLFxuICAgICAgICBpbnB1dHM6IHBhcnRzLnNsaWNlKDAsIC0xKS5tYXAoTnVtYmVyKVxuICAgICAgfTtcblxuICAgICAgdGhpcy5nYXRlcy5wdXNoKGdhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9CcmlzdG9sRmFzaGlvbiAoKSB7XG4gICAgLy8gQ29udmVydCBpbnRlcm5hbCBjaXJjdWl0IHJlcHJlc2VudGF0aW9uIHRvIEJyaXN0b2wgRmFzaGlvbiBmb3JtYXRcbiAgICBsZXQgb3V0cHV0ID0gYCR7dGhpcy5nYXRlcy5sZW5ndGh9ICR7dGhpcy53aXJlcy5sZW5ndGh9ICR7dGhpcy5pbnB1dFdpcmVzIHx8IDB9ICR7dGhpcy5vdXRwdXRXaXJlcyB8fCAwfVxcbmA7XG5cbiAgICBmb3IgKGNvbnN0IGdhdGUgb2YgdGhpcy5nYXRlcykge1xuICAgICAgY29uc3QgbnVtSW5wdXRzID0gZ2F0ZS5udW1JbnB1dHMgfHwgZ2F0ZS5pbnB1dHMubGVuZ3RoO1xuICAgICAgY29uc3QgbnVtT3V0cHV0cyA9IGdhdGUubnVtT3V0cHV0cyB8fCAxO1xuICAgICAgY29uc3QgaW5wdXRzID0gZ2F0ZS5pbnB1dHMuam9pbignICcpO1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IGdhdGUub3V0cHV0cyA/IGdhdGUub3V0cHV0cy5qb2luKCcgJykgOiAnJztcbiAgICAgIG91dHB1dCArPSBgJHtudW1JbnB1dHN9ICR7bnVtT3V0cHV0c30gJHtpbnB1dHN9ICR7b3V0cHV0c30gJHtnYXRlLnR5cGV9XFxuYDtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgdG9CcmlzdG9sRm9ybWF0ICgpIHtcbiAgICAvLyBDb252ZXJ0IGludGVybmFsIGNpcmN1aXQgcmVwcmVzZW50YXRpb24gdG8gQnJpc3RvbCBGb3JtYXRcbiAgICBsZXQgb3V0cHV0ID0gYCR7dGhpcy5nYXRlcy5sZW5ndGh9ICR7dGhpcy53aXJlcy5sZW5ndGh9XFxuYDtcblxuICAgIGZvciAoY29uc3QgZ2F0ZSBvZiB0aGlzLmdhdGVzKSB7XG4gICAgICBvdXRwdXQgKz0gYCR7Z2F0ZS5pbnB1dHMuam9pbignICcpfSAke2dhdGUudHlwZX1cXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICB0b09iamVjdCAoKSB7XG4gICAgcmV0dXJuIHBhcnNlcih0aGlzLmRvdCk7XG4gIH1cblxuICBwYXJzZSAoaW5wdXQpIHtcbiAgICByZXR1cm4gcGFyc2VyKGlucHV0KTtcbiAgfVxuXG4gIGNvbXB1dGUgKGlucHV0KSB7XG4gICAgbGV0IG91dHB1dCA9IGlucHV0O1xuXG4gICAgLy8gZW1wdHkgcmVzb2x2ZXMgdG8gSWRlbnRpdHkgZnVuY3Rpb24gZih4KSA9IHhcblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBzY3JhbWJsZSAoKSB7XG4gICAgbGV0IGtleSA9IGNyeXB0by5yYW5kb21CeXRlcygzMik7XG4gICAgbGV0IG1hY2hpbmUgPSBuZXcgTWFjaGluZSh7IHNlZWQ6IGtleSB9KTtcbiAgICB2b2lkIG1hY2hpbmUuc2lwKCk7XG4gICAgbGV0IGdhdGVzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3N0YXRlLnN0ZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBnYXRlcy5wdXNoKHtcbiAgICAgICAgbmFtZTogdGhpcy5fc3RhdGUuc3RlcHNbaV0sXG4gICAgICAgIHNlZWQ6IG1hY2hpbmUuc2lwKClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGdhdGVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBhLnNlZWQgLSBiLnNlZWQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ2F0ZXM7XG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGxldCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0aGlzLmRvdCkuZGlnZXN0KCdiYXNlNjQnKTtcbiAgICByZXR1cm4gYDxmYWJyaWMtY2lyY3VpdD5cbiAgPGZhYnJpYy1jb2RlLXNuaXBwZXQgZGF0YS1iaW5kPVwiJHt0aGlzLmhhc2h9XCIgZGF0YS1pbnRlZ3JpdHk9XCJzaGEyNTYtJHtoYXNofVwiPiR7dGhpcy5kb3R9PC9mYWJyaWMtY29kZS1zbmlwcGV0PlxuICA8ZmFicmljLWNhbnZhcz5cbiAgICA8ZmFicmljLWdyaWQ+XG4gICAgICA8ZmFicmljLWdyaWQtcm93PlxuICAgICAgICA8dGV4dGFyZWEgZGF0YS1iaW5kPVwiJHt0aGlzLmhhc2h9XCIgcGxhY2Vob2xkZXI9XCJQdXJpdHkgY29udHJhY3QgaGVyZS4uLlwiPiR7dGhpcy5kb3R9PC90ZXh0YXJlYT5cbiAgICAgIDwvZmFicmljLWdyaWQtcm93PlxuICAgICAgPGZhYnJpYy1ncmlkLXJvdz5cbiAgICAgICAgPGJ1dHRvbiBkYXRhLWFjdGlvbj1cIl9zdGVwXCI+c3RlcDwvYnV0dG9uPlxuICAgICAgPC9mYWJyaWMtZ3JpZC1yb3c+XG4gICAgICA8ZmFicmljLWdyaWQtcm93PlxuICAgICAgICA8ZmFicmljLXN2ZyBpZD1cInN2Z1wiPjwvZmFicmljLXN2Zz5cbiAgICAgIDwvZmFicmljLWdyaWQtcm93PlxuICAgICAgPGZhYnJpYy1ncmlkLXJvdz5cbiAgICAgICAgPGNhbnZhcyBpZD1cIm91dHB1dFwiIGRhdGEtYmluZD1cIm91dHB1dFwiPjwvY2FudmFzPlxuICAgICAgICA8Y2FudmFzIGlkPVwiY2FudmFzXCIgZGF0YS1iaW5kPVwiJHt0aGlzLmhhc2h9XCI+PC9jYW52YXM+XG4gICAgICA8L2ZhYnJpYy1ncmlkLXJvdz5cbiAgPC9mYWJyaWMtY2FudmFzPlxuPC9mYWJyaWMtY2lyY3VpdD5gO1xuICB9XG5cbiAgX2RyYXcgKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYXN5bmMgX3N0ZXAgKCkge1xuICAgIGxldCBjaXJjdWl0ID0gdGhpcztcbiAgICBsZXQgb3JpZ2luID0gY2lyY3VpdC5oYXNoICsgJyc7XG5cbiAgICBjb25zb2xlLmxvZygnW0NJUkNVSVQ6U1RFUF0nLCB0aGlzLmdyYXBoKTtcbiAgICBjb25zb2xlLmxvZygnW0NJUkNVSVQ6U1RFUF0nLCAnd29vOicsIHRoaXMudG9PYmplY3QoKSk7XG4gICAgY29uc29sZS5sb2coJ1tDSVJDVUlUOlNURVBdJywgJ3prYzonLCB0aGlzLnRvT2JqZWN0KCkubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4geC5jaGlsZHJlbi5maWx0ZXIoeCA9PiB7XG4gICAgICAgIHJldHVybiB4LnR5cGUgPT09ICdlZGdlX3N0bXQnO1xuICAgICAgfSkubWFwKCh5KSA9PiB7XG4gICAgICAgIHJldHVybiB5LmVkZ2VfbGlzdC5tYXAoeiA9PiB7XG4gICAgICAgICAgcmV0dXJuIHouaWQ7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSlbMF0pO1xuXG4gICAgY29uc29sZS5sb2coJ1tDSVJDVUlUOlNURVBdJywgJ2ZzbTonLCB0aGlzLmdyYXBoLl9mc20pO1xuICAgIGNvbnNvbGUubG9nKCdbQ0lSQ1VJVDpTVEVQXScsICdvcmlnaW46Jywgb3JpZ2luKTtcbiAgICBjb25zb2xlLmxvZygnW0NJUkNVSVQ6U1RFUF0nLCAnb3JpZ2luIGhhc2g6JywgdGhpcy5oYXNoKTtcbiAgICBjb25zb2xlLmxvZygnW0NJUkNVSVQ6U1RFUF0nLCAnb3JpZ2luIGRhdGE6JywgdGhpcy5kb3QpO1xuICAgIGNvbnNvbGUubG9nKCdbQ0lSQ1VJVDpTVEVQXScsICdjdXJyZW50OicsIHRoaXMuZ3JhcGguc3RhdGUpO1xuXG4gICAgc3dpdGNoICh0aGlzLmdyYXBoLnN0YXRlKSB7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmVycm9yKCd1bmhhbmRsZWQgc3RhdGU6JywgdGhpcy5ncmFwaC5zdGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW5pdCc6XG4gICAgICAgIHRoaXMuZ3JhcGgucmVhZHkoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWFkeSc6XG4gICAgICAgIHRoaXMuZ3JhcGguc3RlcDEoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcxJzpcbiAgICAgICAgdGhpcy5ncmFwaC5zdGVwMigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzInOlxuICAgICAgICB0aGlzLmdyYXBoLnN0ZXAzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnMyc6XG4gICAgICAgIHRoaXMuZ3JhcGguZG9uZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbXBsZXRlJzpcbiAgICAgICAgY29uc29sZS5sb2coJyN3aW5uaW5nJyk7XG4gICAgICAgIHRoaXMuZW1pdCgnY29tcGxldGUnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1tDSVJDVUlUOlNURVBdJywgJ2FmdGVyOicsIHRoaXMuZ3JhcGguc3RhdGUpO1xuXG4gICAgdGhpcy5lbWl0KG9yaWdpbiwgdGhpcy5kb3QpO1xuXG4gICAgYXdhaXQgdGhpcy5fUFVUKGAvb3V0cHV0YCwgQnVmZmVyLmFsbG9jKCgyNTYgKiogMykgLyA4KSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuX1BVVChgL3NvdXJjZWAsIHRoaXMuZG90LCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5fUFVUKGAvc3RhdHVzYCwgdGhpcy5ncmFwaC5zdGF0ZSwgZmFsc2UpO1xuXG4gICAgbGV0IGNvbW1pdCA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG5cbiAgICBjb25zb2xlLmxvZygnY29tbWl0OicsIGNvbW1pdCk7XG5cbiAgICByZXR1cm4gY29tbWl0O1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ2lyY3VpdDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/circuit.js\n\n}")},"./node_modules/@fabric/core/types/collection.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nconst pluralize = __webpack_require__(/*! pluralize */ \"./node_modules/pluralize/pluralize.js\");\nconst monitor = __webpack_require__(/*! fast-json-patch */ \"./node_modules/fast-json-patch/index.mjs\");\nconst pointer = __webpack_require__(/*! json-pointer */ \"./node_modules/json-pointer/index.js\");\n\nconst Entity = __webpack_require__(/*! ./entity */ \"./node_modules/@fabric/core/types/entity.js\");\nconst Stack = __webpack_require__(/*! ./stack */ \"./node_modules/@fabric/core/types/stack.js\");\nconst State = __webpack_require__(/*! ./state */ \"./node_modules/@fabric/core/types/state.js\");\n\n/**\n * The {@link Collection} type maintains an ordered list of {@link State} items.\n * @property {Object} @entity Fabric-bound entity object.\n */\nclass Collection extends Stack {\n /**\n * Create a list of {@link Entity}-like objects for later retrieval.\n * @param {Object} [configuration={}] Configuration object.\n * @return {Collection} Configured instance of the the {@link Collection}.\n */\n constructor (configuration = {}) {\n super(configuration);\n\n // TODO: document `listeners` handler (currently only `create`)\n this.settings = Object.assign({\n atomic: true,\n type: Entity,\n deterministic: true,\n name: '@fabric/store',\n path: `./collections`,\n fields: { id: 'id' },\n key: 'id'\n }, configuration);\n\n this['@type'] = 'Collection';\n this['@entity']['@type'] = 'Collection';\n\n // Set name to plural version, define path for storage\n this.name = pluralize(this.settings.name);\n this._path = `/${this.name.toLowerCase()}`;\n\n this._state = {};\n this.value = {};\n\n this.set(`${this.path}`, this.settings.data || {});\n this.observer = monitor.observe(this.value);\n\n Object.defineProperty(this, '@allocation', { enumerable: false });\n Object.defineProperty(this, '@buffer', { enumerable: false });\n Object.defineProperty(this, '@encoding', { enumerable: false });\n Object.defineProperty(this, '@parent', { enumerable: false });\n Object.defineProperty(this, '@preimage', { enumerable: false });\n Object.defineProperty(this, 'frame', { enumerable: false });\n Object.defineProperty(this, 'services', { enumerable: false });\n\n return this;\n }\n\n get routes () {\n return this.settings.routes;\n }\n\n get path () {\n return this._path;\n }\n\n set path (value) {\n this._path = value;\n return this._path;\n }\n\n /**\n * Current elements of the collection as a {@link MerkleTree}.\n * @returns {MerkleTree}\n */\n asMerkleTree () {\n let list = pointer.get(this.value, this.path);\n let stack = new Stack(Object.keys(list));\n return stack.asMerkleTree();\n }\n\n /**\n * Sets the `key` property of collection settings.\n * @param {String} name Value to set the `key` setting to.\n */\n _setKey (name) {\n this.settings.key = name;\n }\n\n /**\n * Retrieve an element from the collection by ID.\n * @param {String} id Document identifier.\n */\n getByID (id) {\n if (!id) return null;\n\n let result = null;\n\n try {\n if (this.settings.verbosity >= 5) console.log(`getting ${this.path}/${id} from:`, this.value);\n result = pointer.get(this.value, `${this.path}/${id}`);\n } catch {\n // console.debug('[FABRIC:COLLECTION]', `@${this.name}`, Date.now(), `Could not find ID \"${id}\" in tree ${this.asMerkleTree()}`);\n }\n\n result = this._wrapResult(result);\n\n return result;\n }\n\n /**\n * Retrieve the most recent element in the collection.\n */\n getLatest () {\n let items = pointer.get(this.value, this.path);\n return items[items.length - 1];\n }\n\n /**\n * Find a document by specific field.\n * @param {String} name Name of field to search.\n * @param {String} value Value to match.\n */\n findByField (name, value) {\n let result = null;\n let items = pointer.get(this.value, this.path);\n // constant-time loop\n for (let id in items) {\n if (items[id][name] === value) {\n // use only first result\n result = (result) ? result : items[id];\n }\n }\n return result;\n }\n\n /**\n * Find a document by the \"name\" field.\n * @param {String} name Name to search for.\n */\n findByName (name) {\n let result = null;\n let items = pointer.get(this.value, this.path);\n // constant-time loop\n for (let id in items) {\n if (items[id].name === name) {\n // use only first result\n result = (result) ? result : items[id];\n }\n }\n return result;\n }\n\n /**\n * Find a document by the \"symbol\" field.\n * @param {String} symbol Value to search for.\n */\n findBySymbol (symbol) {\n let result = null;\n let items = pointer.get(this.value, this.path);\n // constant-time loop\n for (let id in items) {\n // TODO: fix bug here (check for symbol)\n if (items[id].symbol === symbol) {\n // use only first result\n result = (result) ? result : items[id];\n }\n }\n return result;\n }\n\n // TODO: deep search, consider GraphQL (!!!: to discuss)\n match (query = {}) {\n let result = null;\n let items = pointer.get(this.value, this.path);\n let list = Object.keys(items).map((x) => {\n return items[x];\n });\n\n try {\n result = list.filter((x) => {\n for (let field in query) {\n if (x[field] !== query[field]) return false;\n }\n return true;\n });\n } catch (E) {\n console.error('Could not match:', E);\n }\n\n return result;\n }\n\n _wrapResult (result) {\n // TODO: enable upstream specification via pure JSON\n if (this.settings.type.name !== 'Entity') {\n let Type = this.settings.type;\n result = new Type(result || {});\n }\n\n // TODO: validation of result by calling result.validate()\n // TODO: signing of result by calling result.signWith()\n return result;\n }\n\n /**\n * Modify a target document using an array of atomic updates.\n * @param {String} path Path to the document to modify.\n * @param {Array} patches List of operations to apply.\n */\n async _patchTarget (path, patches) {\n let link = `${path}`;\n let result = null;\n\n if (this.settings.verbosity >= 5) console.log('[AUDIT]', 'Patching target:', path, patches);\n\n try {\n result = monitor.applyPatch(this.value, patches.map((op) => {\n op.path = `${link}${op.path}`;\n return op;\n })).newDocument;\n } catch (E) {\n console.error('Could not patch target:', E, path, patches);\n }\n\n await this.commit();\n\n return result;\n }\n\n /**\n * Adds an {@link Entity} to the {@link Collection}.\n * @param {Mixed} data {@link Entity} to add.\n * @return {Number} Length of the collection.\n */\n async push (data, commit = true) {\n super.push(data);\n\n const entity = new Entity(data);\n let state = new State(data);\n\n this['@entity'].states[this.id] = this['@data'];\n this['@entity'].states[entity.id] = state['@data'];\n\n // Use entity IDs for collection indexing to avoid collisions in State IDs.\n this['@data'][this['@data'].length - 1] = entity.id;\n\n this['@entity']['@data'] = this['@data'].map(x => x.toString());\n this['@data'] = this['@entity']['@data'];\n\n this['@id'] = this.id;\n\n if (commit) {\n try {\n this['@commit'] = await this.commit();\n } catch (E) {\n console.error('Could not commit.', E);\n }\n }\n\n return this['@data'].length;\n }\n\n async populate () {\n return Promise.all(this['@entity']['@data'].map(id => {\n return this['@entity'].states[id.toString('hex')];\n }));\n }\n\n async query (path) {\n return this.get(path);\n }\n\n /**\n * Retrieve a key from the {@link State}.\n * @param {Path} path Key to retrieve.\n * @returns {Mixed}\n */\n get (path) {\n let result = null;\n\n try {\n result = pointer.get(this['@entity']['@data'], path);\n } catch (exception) {\n this.emit('warning', `[FABRIC:COLLECTION] Could not retrieve path: ${path} ${JSON.stringify(exception)}`);\n // console.error('[FABRIC:COLLECTION]', 'Could not retrieve path:', path, exception);\n }\n\n return result;\n }\n\n /**\n * Set a key in the {@link State} to a particular value.\n * @param {Path} path Key to retrieve.\n * @returns {Mixed}\n */\n set (path, value) {\n pointer.set(this._state, path, value);\n pointer.set(this.value, path, value);\n pointer.set(this['@entity']['@data'], path, value);\n\n this.commit();\n return true;\n }\n\n /**\n * Generate a list of elements in the collection.\n * @deprecated\n * @returns {Array}\n */\n list () {\n let map = this.map();\n let ids = Object.keys(map);\n // TODO: `list()` should return an Array\n let result = {};\n\n for (let i = 0; i < ids.length; i++) {\n result[ids[i]] = this._wrapResult(map[ids[i]]);\n }\n\n return result;\n }\n\n /**\n * Provides the {@link Collection} as an {@link Array} of typed\n * elements. The type of these elments are defined by the collection's\n * type, supplied in the constructor.\n */\n toTypedArray () {\n const map = this.map();\n const ids = Object.keys(map);\n return ids.map((id) => this._wrapResult(map[id]));\n }\n\n typedMap () {\n const map = this.map();\n const ids = Object.keys(map);\n // TODO: `list()` should return an Array\n const result = {};\n\n for (let i = 0; i < ids.length; i++) {\n result[ids[i]] = this._wrapResult(map[ids[i]]);\n }\n\n return result;\n }\n\n /**\n * Generate a hashtable of elements in the collection.\n * @returns {Array}\n */\n map () {\n return pointer.get(this.value, `${this.path}`);\n }\n\n render () {\n // Collection rendering should expose the ordered ID list, not internal state metadata.\n return JSON.stringify(this['@entity']['@data'] || []);\n }\n\n /**\n * Create an instance of an {@link Entity}.\n * @param {Object} entity Object with properties.\n * @return {Promise} Resolves with instantiated {@link Entity}.\n */\n async create (input, commit = true) {\n if (this.settings.verbosity >= 5) console.log('[FABRIC:COLLECTION]', 'Creating object:', input);\n if (!this.settings.deterministic) input.created = Date.now();\n\n let result = null;\n let entity = new Entity(input);\n let link = `${this.path}/${entity.id}`;\n // TODO: enable specifying names (again)\n // let link = `${this.path}/${(entity.data[this.settings.fields.id] || entity.id)}`;\n // TODO: handle duplicates (when desired, i.e., \"unique\" in settings)\n let current = await this.getByID(entity.id);\n if (current) {\n if (this.settings.verbosity >= 5) console.log('[FABRIC:COLLECTION]', 'Exact entity exists:', current);\n }\n\n if (this.settings.methods && this.settings.methods.create) {\n result = await this.settings.methods.create.call(this, input);\n } else {\n result = entity;\n }\n\n pointer.set(this._state, link, result.data);\n\n this.set(link, result.data || result);\n\n this.emit('message', {\n '@type': 'Create',\n '@data': Object.assign({}, result.data, {\n id: entity.id\n })\n });\n\n if (commit) {\n try {\n this['@commit'] = await this.commit();\n this.emit('commit', this['@commit']);\n } catch (E) {\n console.error('Could not commit.', E);\n }\n }\n\n if (this.settings.listeners && this.settings.listeners.create) {\n await this.settings.listeners.create(entity.data);\n }\n\n result = result.data || entity.data;\n result.id = entity.id;\n\n return result;\n }\n\n /**\n * Loads {@link State} into memory.\n * @param {State} state State to import.\n * @param {Boolean} commit Whether or not to commit the result.\n * @emits message Will emit one `CollectionSnapshot` message (not the removed Snapshot type).\n */\n async import (input, commit = true) {\n if (input['@data']) input = input['@data'];\n\n let result = null;\n let size = await this.push(input, false);\n let state = this['@entity'].states[this['@data'][size - 1]];\n let entity = new Entity(state);\n let link = `${this.path}/${input.id || entity.id}`;\n\n if (this.settings.verbosity >= 4) console.log('state.data:', state.data);\n if (this.settings.verbosity >= 4) console.log('state:', state);\n if (this.settings.verbosity >= 4) console.log('link:', link);\n\n this.set(link, state.data || state);\n\n if (commit) {\n try {\n this['@commit'] = await this.commit();\n } catch (E) {\n console.error('Could not commit.', E);\n }\n }\n\n result = state.data || entity.data;\n result.id = input.id || entity.id;\n\n // TODO: ensure updates sent on subscriber channels\n // ESPECIALLY when an ID is supplied...\n // TODO: test upstream attack vectors\n if (this.settings.verbosity >= 4) console.log('input.id', input.id);\n\n this.emit('message', {\n '@type': 'CollectionSnapshot',\n '@data': {\n path: this.path,\n state: pointer.get(this.value, this.path)\n }\n });\n\n return result;\n }\n\n async importList (list) {\n let ids = [];\n\n for (let i = 0; i < list.length; i++) {\n let item = await this.import(list[i]);\n ids.push(item.id);\n }\n\n return ids;\n }\n\n async importMap (map) {\n return this.importList(Object.values(map));\n }\n\n commit () {\n if (this.settings.verbosity >= 4) this.emit('debug', '[FABRIC:COLLECTION] Committing...');\n const patches = monitor.generate(this.observer);\n\n if (patches && patches.length) {\n const body = {\n changes: patches,\n state: this.value\n };\n\n this.emit('transaction', body);\n this.emit('patches', patches);\n this.emit('message', {\n '@type': 'Transaction',\n '@data': body\n });\n }\n }\n\n get len () {\n return Object.keys(this.list()).length;\n }\n}\n\nmodule.exports = Collection;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL2NvbGxlY3Rpb24uanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsa0JBQWtCLG1CQUFPLENBQUMsd0RBQVc7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsaUVBQWlCO0FBQ3pDLGdCQUFnQixtQkFBTyxDQUFDLDBEQUFjOztBQUV0QyxlQUFlLG1CQUFPLENBQUMsNkRBQVU7QUFDakMsY0FBYyxtQkFBTyxDQUFDLDJEQUFTO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQywyREFBUzs7QUFFL0I7QUFDQSxRQUFRLGtCQUFrQixtQ0FBbUMsYUFBYTtBQUMxRSxjQUFjLFFBQVE7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGFBQWE7QUFDcEMsY0FBYyxTQUFTLGlCQUFpQjtBQUN4QyxjQUFjLDRCQUE0QixnQ0FBZ0MsaUJBQWlCO0FBQzNGO0FBQ0EsaUNBQWlDO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFVBQVU7QUFDMUI7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQix3QkFBd0I7O0FBRTdDO0FBQ0E7O0FBRUEsZ0JBQWdCLFVBQVUsMkJBQTJCO0FBQ3JEOztBQUVBLGlEQUFpRCxtQkFBbUI7QUFDcEUsNkNBQTZDLG1CQUFtQjtBQUNoRSwrQ0FBK0MsbUJBQW1CO0FBQ2xFLDZDQUE2QyxtQkFBbUI7QUFDaEUsK0NBQStDLG1CQUFtQjtBQUNsRSwyQ0FBMkMsbUJBQW1CO0FBQzlELDhDQUE4QyxtQkFBbUI7O0FBRWpFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4QyxpQkFBaUI7QUFDL0QsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztB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VUFBVSxHQUFHLG9EQUFvRDtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLGFBQWE7QUFDekIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixVQUFVLEdBQUcsc0JBQXNCOztBQUVyRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS90eXBlcy9jb2xsZWN0aW9uLmpzPzJkNzQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBwbHVyYWxpemUgPSByZXF1aXJlKCdwbHVyYWxpemUnKTtcbmNvbnN0IG1vbml0b3IgPSByZXF1aXJlKCdmYXN0LWpzb24tcGF0Y2gnKTtcbmNvbnN0IHBvaW50ZXIgPSByZXF1aXJlKCdqc29uLXBvaW50ZXInKTtcblxuY29uc3QgRW50aXR5ID0gcmVxdWlyZSgnLi9lbnRpdHknKTtcbmNvbnN0IFN0YWNrID0gcmVxdWlyZSgnLi9zdGFjaycpO1xuY29uc3QgU3RhdGUgPSByZXF1aXJlKCcuL3N0YXRlJyk7XG5cbi8qKlxuICogVGhlIHtAbGluayBDb2xsZWN0aW9ufSB0eXBlIG1haW50YWlucyBhbiBvcmRlcmVkIGxpc3Qgb2Yge0BsaW5rIFN0YXRlfSBpdGVtcy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBAZW50aXR5IEZhYnJpYy1ib3VuZCBlbnRpdHkgb2JqZWN0LlxuICovXG5jbGFzcyBDb2xsZWN0aW9uIGV4dGVuZHMgU3RhY2sge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbGlzdCBvZiB7QGxpbmsgRW50aXR5fS1saWtlIG9iamVjdHMgZm9yIGxhdGVyIHJldHJpZXZhbC5cbiAgICogQHBhcmFtICB7T2JqZWN0fSAgW2NvbmZpZ3VyYXRpb249e31dIENvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtDb2xsZWN0aW9ufSAgICAgICAgICAgICAgICAgQ29uZmlndXJlZCBpbnN0YW5jZSBvZiB0aGUgdGhlIHtAbGluayBDb2xsZWN0aW9ufS5cbiAgICovXG4gIGNvbnN0cnVjdG9yIChjb25maWd1cmF0aW9uID0ge30pIHtcbiAgICBzdXBlcihjb25maWd1cmF0aW9uKTtcblxuICAgIC8vIFRPRE86IGRvY3VtZW50IGBsaXN0ZW5lcnNgIGhhbmRsZXIgKGN1cnJlbnRseSBvbmx5IGBjcmVhdGVgKVxuICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGF0b21pYzogdHJ1ZSxcbiAgICAgIHR5cGU6IEVudGl0eSxcbiAgICAgIGRldGVybWluaXN0aWM6IHRydWUsXG4gICAgICBuYW1lOiAnQGZhYnJpYy9zdG9yZScsXG4gICAgICBwYXRoOiBgLi9jb2xsZWN0aW9uc2AsXG4gICAgICBmaWVsZHM6IHsgaWQ6ICdpZCcgfSxcbiAgICAgIGtleTogJ2lkJ1xuICAgIH0sIGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgdGhpc1snQHR5cGUnXSA9ICdDb2xsZWN0aW9uJztcbiAgICB0aGlzWydAZW50aXR5J11bJ0B0eXBlJ10gPSAnQ29sbGVjdGlvbic7XG5cbiAgICAvLyBTZXQgbmFtZSB0byBwbHVyYWwgdmVyc2lvbiwgZGVmaW5lIHBhdGggZm9yIHN0b3JhZ2VcbiAgICB0aGlzLm5hbWUgPSBwbHVyYWxpemUodGhpcy5zZXR0aW5ncy5uYW1lKTtcbiAgICB0aGlzLl9wYXRoID0gYC8ke3RoaXMubmFtZS50b0xvd2VyQ2FzZSgpfWA7XG5cbiAgICB0aGlzLl9zdGF0ZSA9IHt9O1xuICAgIHRoaXMudmFsdWUgPSB7fTtcblxuICAgIHRoaXMuc2V0KGAke3RoaXMucGF0aH1gLCB0aGlzLnNldHRpbmdzLmRhdGEgfHwge30pO1xuICAgIHRoaXMub2JzZXJ2ZXIgPSBtb25pdG9yLm9ic2VydmUodGhpcy52YWx1ZSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0BhbGxvY2F0aW9uJywgeyBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0BidWZmZXInLCB7IGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnQGVuY29kaW5nJywgeyBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0BwYXJlbnQnLCB7IGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnQHByZWltYWdlJywgeyBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2ZyYW1lJywgeyBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3NlcnZpY2VzJywgeyBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0IHJvdXRlcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3Mucm91dGVzO1xuICB9XG5cbiAgZ2V0IHBhdGggKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXRoO1xuICB9XG5cbiAgc2V0IHBhdGggKHZhbHVlKSB7XG4gICAgdGhpcy5fcGF0aCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzLl9wYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgZWxlbWVudHMgb2YgdGhlIGNvbGxlY3Rpb24gYXMgYSB7QGxpbmsgTWVya2xlVHJlZX0uXG4gICAqIEByZXR1cm5zIHtNZXJrbGVUcmVlfVxuICAgKi9cbiAgYXNNZXJrbGVUcmVlICgpIHtcbiAgICBsZXQgbGlzdCA9IHBvaW50ZXIuZ2V0KHRoaXMudmFsdWUsIHRoaXMucGF0aCk7XG4gICAgbGV0IHN0YWNrID0gbmV3IFN0YWNrKE9iamVjdC5rZXlzKGxpc3QpKTtcbiAgICByZXR1cm4gc3RhY2suYXNNZXJrbGVUcmVlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYGtleWAgcHJvcGVydHkgb2YgY29sbGVjdGlvbiBzZXR0aW5ncy5cbiAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVmFsdWUgdG8gc2V0IHRoZSBga2V5YCBzZXR0aW5nIHRvLlxuICAgKi9cbiAgX3NldEtleSAobmFtZSkge1xuICAgIHRoaXMuc2V0dGluZ3Mua2V5ID0gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhbiBlbGVtZW50IGZyb20gdGhlIGNvbGxlY3Rpb24gYnkgSUQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBpZCBEb2N1bWVudCBpZGVudGlmaWVyLlxuICAgKi9cbiAgZ2V0QnlJRCAoaWQpIHtcbiAgICBpZiAoIWlkKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCByZXN1bHQgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnZlcmJvc2l0eSA+PSA1KSBjb25zb2xlLmxvZyhgZ2V0dGluZyAke3RoaXMucGF0aH0vJHtpZH0gZnJvbTpgLCB0aGlzLnZhbHVlKTtcbiAgICAgIHJlc3VsdCA9IHBvaW50ZXIuZ2V0KHRoaXMudmFsdWUsIGAke3RoaXMucGF0aH0vJHtpZH1gKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgLy8gY29uc29sZS5kZWJ1ZygnW0ZBQlJJQzpDT0xMRUNUSU9OXScsIGBAJHt0aGlzLm5hbWV9YCwgRGF0ZS5ub3coKSwgYENvdWxkIG5vdCBmaW5kIElEIFwiJHtpZH1cIiBpbiB0cmVlICR7dGhpcy5hc01lcmtsZVRyZWUoKX1gKTtcbiAgICB9XG5cbiAgICByZXN1bHQgPSB0aGlzLl93cmFwUmVzdWx0KHJlc3VsdCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBtb3N0IHJlY2VudCBlbGVtZW50IGluIHRoZSBjb2xsZWN0aW9uLlxuICAgKi9cbiAgZ2V0TGF0ZXN0ICgpIHtcbiAgICBsZXQgaXRlbXMgPSBwb2ludGVyLmdldCh0aGlzLnZhbHVlLCB0aGlzLnBhdGgpO1xuICAgIHJldHVybiBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgZG9jdW1lbnQgYnkgc3BlY2lmaWMgZmllbGQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIE5hbWUgb2YgZmllbGQgdG8gc2VhcmNoLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgVmFsdWUgdG8gbWF0Y2guXG4gICAqL1xuICBmaW5kQnlGaWVsZCAobmFtZSwgdmFsdWUpIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICBsZXQgaXRlbXMgPSBwb2ludGVyLmdldCh0aGlzLnZhbHVlLCB0aGlzLnBhdGgpO1xuICAgIC8vIGNvbnN0YW50LXRpbWUgbG9vcFxuICAgIGZvciAobGV0IGlkIGluIGl0ZW1zKSB7XG4gICAgICBpZiAoaXRlbXNbaWRdW25hbWVdID09PSB2YWx1ZSkge1xuICAgICAgICAvLyB1c2Ugb25seSBmaXJzdCByZXN1bHRcbiAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCkgPyByZXN1bHQgOiBpdGVtc1tpZF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIGRvY3VtZW50IGJ5IHRoZSBcIm5hbWVcIiBmaWVsZC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgTmFtZSB0byBzZWFyY2ggZm9yLlxuICAgKi9cbiAgZmluZEJ5TmFtZSAobmFtZSkge1xuICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgIGxldCBpdGVtcyA9IHBvaW50ZXIuZ2V0KHRoaXMudmFsdWUsIHRoaXMucGF0aCk7XG4gICAgLy8gY29uc3RhbnQtdGltZSBsb29wXG4gICAgZm9yIChsZXQgaWQgaW4gaXRlbXMpIHtcbiAgICAgIGlmIChpdGVtc1tpZF0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAvLyB1c2Ugb25seSBmaXJzdCByZXN1bHRcbiAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCkgPyByZXN1bHQgOiBpdGVtc1tpZF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIGRvY3VtZW50IGJ5IHRoZSBcInN5bWJvbFwiIGZpZWxkLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gc3ltYm9sIFZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqL1xuICBmaW5kQnlTeW1ib2wgKHN5bWJvbCkge1xuICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgIGxldCBpdGVtcyA9IHBvaW50ZXIuZ2V0KHRoaXMudmFsdWUsIHRoaXMucGF0aCk7XG4gICAgLy8gY29uc3RhbnQtdGltZSBsb29wXG4gICAgZm9yIChsZXQgaWQgaW4gaXRlbXMpIHtcbiAgICAgIC8vIFRPRE86IGZpeCBidWcgaGVyZSAoY2hlY2sgZm9yIHN5bWJvbClcbiAgICAgIGlmIChpdGVtc1tpZF0uc3ltYm9sID09PSBzeW1ib2wpIHtcbiAgICAgICAgLy8gdXNlIG9ubHkgZmlyc3QgcmVzdWx0XG4gICAgICAgIHJlc3VsdCA9IChyZXN1bHQpID8gcmVzdWx0IDogaXRlbXNbaWRdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gVE9ETzogZGVlcCBzZWFyY2gsIGNvbnNpZGVyIEdyYXBoUUwgKCEhITogdG8gZGlzY3VzcylcbiAgbWF0Y2ggKHF1ZXJ5ID0ge30pIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICBsZXQgaXRlbXMgPSBwb2ludGVyLmdldCh0aGlzLnZhbHVlLCB0aGlzLnBhdGgpO1xuICAgIGxldCBsaXN0ID0gT2JqZWN0LmtleXMoaXRlbXMpLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIGl0ZW1zW3hdO1xuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGxpc3QuZmlsdGVyKCh4KSA9PiB7XG4gICAgICAgIGZvciAobGV0IGZpZWxkIGluIHF1ZXJ5KSB7XG4gICAgICAgICAgaWYgKHhbZmllbGRdICE9PSBxdWVyeVtmaWVsZF0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBtYXRjaDonLCBFKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgX3dyYXBSZXN1bHQgKHJlc3VsdCkge1xuICAgIC8vIFRPRE86IGVuYWJsZSB1cHN0cmVhbSBzcGVjaWZpY2F0aW9uIHZpYSBwdXJlIEpTT05cbiAgICBpZiAodGhpcy5zZXR0aW5ncy50eXBlLm5hbWUgIT09ICdFbnRpdHknKSB7XG4gICAgICBsZXQgVHlwZSA9IHRoaXMuc2V0dGluZ3MudHlwZTtcbiAgICAgIHJlc3VsdCA9IG5ldyBUeXBlKHJlc3VsdCB8fCB7fSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogdmFsaWRhdGlvbiBvZiByZXN1bHQgYnkgY2FsbGluZyByZXN1bHQudmFsaWRhdGUoKVxuICAgIC8vIFRPRE86IHNpZ25pbmcgb2YgcmVzdWx0IGJ5IGNhbGxpbmcgcmVzdWx0LnNpZ25XaXRoKClcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmeSBhIHRhcmdldCBkb2N1bWVudCB1c2luZyBhbiBhcnJheSBvZiBhdG9taWMgdXBkYXRlcy5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggUGF0aCB0byB0aGUgZG9jdW1lbnQgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0ge0FycmF5fSBwYXRjaGVzIExpc3Qgb2Ygb3BlcmF0aW9ucyB0byBhcHBseS5cbiAgICovXG4gIGFzeW5jIF9wYXRjaFRhcmdldCAocGF0aCwgcGF0Y2hlcykge1xuICAgIGxldCBsaW5rID0gYCR7cGF0aH1gO1xuICAgIGxldCByZXN1bHQgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MudmVyYm9zaXR5ID49IDUpIGNvbnNvbGUubG9nKCdbQVVESVRdJywgJ1BhdGNoaW5nIHRhcmdldDonLCBwYXRoLCBwYXRjaGVzKTtcblxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBtb25pdG9yLmFwcGx5UGF0Y2godGhpcy52YWx1ZSwgcGF0Y2hlcy5tYXAoKG9wKSA9PiB7XG4gICAgICAgIG9wLnBhdGggPSBgJHtsaW5rfSR7b3AucGF0aH1gO1xuICAgICAgICByZXR1cm4gb3A7XG4gICAgICB9KSkubmV3RG9jdW1lbnQ7XG4gICAgfSBjYXRjaCAoRSkge1xuICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHBhdGNoIHRhcmdldDonLCBFLCBwYXRoLCBwYXRjaGVzKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIHtAbGluayBFbnRpdHl9IHRvIHRoZSB7QGxpbmsgQ29sbGVjdGlvbn0uXG4gICAqIEBwYXJhbSAge01peGVkfSBkYXRhIHtAbGluayBFbnRpdHl9IHRvIGFkZC5cbiAgICogQHJldHVybiB7TnVtYmVyfSAgICAgIExlbmd0aCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICovXG4gIGFzeW5jIHB1c2ggKGRhdGEsIGNvbW1pdCA9IHRydWUpIHtcbiAgICBzdXBlci5wdXNoKGRhdGEpO1xuXG4gICAgY29uc3QgZW50aXR5ID0gbmV3IEVudGl0eShkYXRhKTtcbiAgICBsZXQgc3RhdGUgPSBuZXcgU3RhdGUoZGF0YSk7XG5cbiAgICB0aGlzWydAZW50aXR5J10uc3RhdGVzW3RoaXMuaWRdID0gdGhpc1snQGRhdGEnXTtcbiAgICB0aGlzWydAZW50aXR5J10uc3RhdGVzW2VudGl0eS5pZF0gPSBzdGF0ZVsnQGRhdGEnXTtcblxuICAgIC8vIFVzZSBlbnRpdHkgSURzIGZvciBjb2xsZWN0aW9uIGluZGV4aW5nIHRvIGF2b2lkIGNvbGxpc2lvbnMgaW4gU3RhdGUgSURzLlxuICAgIHRoaXNbJ0BkYXRhJ11bdGhpc1snQGRhdGEnXS5sZW5ndGggLSAxXSA9IGVudGl0eS5pZDtcblxuICAgIHRoaXNbJ0BlbnRpdHknXVsnQGRhdGEnXSA9IHRoaXNbJ0BkYXRhJ10ubWFwKHggPT4geC50b1N0cmluZygpKTtcbiAgICB0aGlzWydAZGF0YSddID0gdGhpc1snQGVudGl0eSddWydAZGF0YSddO1xuXG4gICAgdGhpc1snQGlkJ10gPSB0aGlzLmlkO1xuXG4gICAgaWYgKGNvbW1pdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpc1snQGNvbW1pdCddID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGNvbW1pdC4nLCBFKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1snQGRhdGEnXS5sZW5ndGg7XG4gIH1cblxuICBhc3luYyBwb3B1bGF0ZSAoKSB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXNbJ0BlbnRpdHknXVsnQGRhdGEnXS5tYXAoaWQgPT4ge1xuICAgICAgcmV0dXJuIHRoaXNbJ0BlbnRpdHknXS5zdGF0ZXNbaWQudG9TdHJpbmcoJ2hleCcpXTtcbiAgICB9KSk7XG4gIH1cblxuICBhc3luYyBxdWVyeSAocGF0aCkge1xuICAgIHJldHVybiB0aGlzLmdldChwYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIGtleSBmcm9tIHRoZSB7QGxpbmsgU3RhdGV9LlxuICAgKiBAcGFyYW0ge1BhdGh9IHBhdGggS2V5IHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7TWl4ZWR9XG4gICAqL1xuICBnZXQgKHBhdGgpIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBwb2ludGVyLmdldCh0aGlzWydAZW50aXR5J11bJ0BkYXRhJ10sIHBhdGgpO1xuICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgICAgdGhpcy5lbWl0KCd3YXJuaW5nJywgYFtGQUJSSUM6Q09MTEVDVElPTl0gQ291bGQgbm90IHJldHJpZXZlIHBhdGg6ICR7cGF0aH0gJHtKU09OLnN0cmluZ2lmeShleGNlcHRpb24pfWApO1xuICAgICAgLy8gY29uc29sZS5lcnJvcignW0ZBQlJJQzpDT0xMRUNUSU9OXScsICdDb3VsZCBub3QgcmV0cmlldmUgcGF0aDonLCBwYXRoLCBleGNlcHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEga2V5IGluIHRoZSB7QGxpbmsgU3RhdGV9IHRvIGEgcGFydGljdWxhciB2YWx1ZS5cbiAgICogQHBhcmFtIHtQYXRofSBwYXRoIEtleSB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge01peGVkfVxuICAgKi9cbiAgc2V0IChwYXRoLCB2YWx1ZSkge1xuICAgIHBvaW50ZXIuc2V0KHRoaXMuX3N0YXRlLCBwYXRoLCB2YWx1ZSk7XG4gICAgcG9pbnRlci5zZXQodGhpcy52YWx1ZSwgcGF0aCwgdmFsdWUpO1xuICAgIHBvaW50ZXIuc2V0KHRoaXNbJ0BlbnRpdHknXVsnQGRhdGEnXSwgcGF0aCwgdmFsdWUpO1xuXG4gICAgdGhpcy5jb21taXQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIGxpc3Qgb2YgZWxlbWVudHMgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGxpc3QgKCkge1xuICAgIGxldCBtYXAgPSB0aGlzLm1hcCgpO1xuICAgIGxldCBpZHMgPSBPYmplY3Qua2V5cyhtYXApO1xuICAgIC8vIFRPRE86IGBsaXN0KClgIHNob3VsZCByZXR1cm4gYW4gQXJyYXlcbiAgICBsZXQgcmVzdWx0ID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2lkc1tpXV0gPSB0aGlzLl93cmFwUmVzdWx0KG1hcFtpZHNbaV1dKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSB7QGxpbmsgQ29sbGVjdGlvbn0gYXMgYW4ge0BsaW5rIEFycmF5fSBvZiB0eXBlZFxuICAgKiBlbGVtZW50cy4gIFRoZSB0eXBlIG9mIHRoZXNlIGVsbWVudHMgYXJlIGRlZmluZWQgYnkgdGhlIGNvbGxlY3Rpb24nc1xuICAgKiB0eXBlLCBzdXBwbGllZCBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAqL1xuICB0b1R5cGVkQXJyYXkgKCkge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMubWFwKCk7XG4gICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXMobWFwKTtcbiAgICByZXR1cm4gaWRzLm1hcCgoaWQpID0+IHRoaXMuX3dyYXBSZXN1bHQobWFwW2lkXSkpO1xuICB9XG5cbiAgdHlwZWRNYXAgKCkge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMubWFwKCk7XG4gICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXMobWFwKTtcbiAgICAvLyBUT0RPOiBgbGlzdCgpYCBzaG91bGQgcmV0dXJuIGFuIEFycmF5XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0W2lkc1tpXV0gPSB0aGlzLl93cmFwUmVzdWx0KG1hcFtpZHNbaV1dKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgaGFzaHRhYmxlIG9mIGVsZW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBtYXAgKCkge1xuICAgIHJldHVybiBwb2ludGVyLmdldCh0aGlzLnZhbHVlLCBgJHt0aGlzLnBhdGh9YCk7XG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIC8vIENvbGxlY3Rpb24gcmVuZGVyaW5nIHNob3VsZCBleHBvc2UgdGhlIG9yZGVyZWQgSUQgbGlzdCwgbm90IGludGVybmFsIHN0YXRlIG1ldGFkYXRhLlxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzWydAZW50aXR5J11bJ0BkYXRhJ10gfHwgW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiB7QGxpbmsgRW50aXR5fS5cbiAgICogQHBhcmFtICB7T2JqZWN0fSAgZW50aXR5IE9iamVjdCB3aXRoIHByb3BlcnRpZXMuXG4gICAqIEByZXR1cm4ge1Byb21pc2V9ICAgICAgICBSZXNvbHZlcyB3aXRoIGluc3RhbnRpYXRlZCB7QGxpbmsgRW50aXR5fS5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZSAoaW5wdXQsIGNvbW1pdCA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy52ZXJib3NpdHkgPj0gNSkgY29uc29sZS5sb2coJ1tGQUJSSUM6Q09MTEVDVElPTl0nLCAnQ3JlYXRpbmcgb2JqZWN0OicsIGlucHV0KTtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MuZGV0ZXJtaW5pc3RpYykgaW5wdXQuY3JlYXRlZCA9IERhdGUubm93KCk7XG5cbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICBsZXQgZW50aXR5ID0gbmV3IEVudGl0eShpbnB1dCk7XG4gICAgbGV0IGxpbmsgPSBgJHt0aGlzLnBhdGh9LyR7ZW50aXR5LmlkfWA7XG4gICAgLy8gVE9ETzogZW5hYmxlIHNwZWNpZnlpbmcgbmFtZXMgKGFnYWluKVxuICAgIC8vIGxldCBsaW5rID0gYCR7dGhpcy5wYXRofS8keyhlbnRpdHkuZGF0YVt0aGlzLnNldHRpbmdzLmZpZWxkcy5pZF0gfHwgZW50aXR5LmlkKX1gO1xuICAgIC8vIFRPRE86IGhhbmRsZSBkdXBsaWNhdGVzICh3aGVuIGRlc2lyZWQsIGkuZS4sIFwidW5pcXVlXCIgaW4gc2V0dGluZ3MpXG4gICAgbGV0IGN1cnJlbnQgPSBhd2FpdCB0aGlzLmdldEJ5SUQoZW50aXR5LmlkKTtcbiAgICBpZiAoY3VycmVudCkge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MudmVyYm9zaXR5ID49IDUpIGNvbnNvbGUubG9nKCdbRkFCUklDOkNPTExFQ1RJT05dJywgJ0V4YWN0IGVudGl0eSBleGlzdHM6JywgY3VycmVudCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MubWV0aG9kcyAmJiB0aGlzLnNldHRpbmdzLm1ldGhvZHMuY3JlYXRlKSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLnNldHRpbmdzLm1ldGhvZHMuY3JlYXRlLmNhbGwodGhpcywgaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBlbnRpdHk7XG4gICAgfVxuXG4gICAgcG9pbnRlci5zZXQodGhpcy5fc3RhdGUsIGxpbmssIHJlc3VsdC5kYXRhKTtcblxuICAgIHRoaXMuc2V0KGxpbmssIHJlc3VsdC5kYXRhIHx8IHJlc3VsdCk7XG5cbiAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCB7XG4gICAgICAnQHR5cGUnOiAnQ3JlYXRlJyxcbiAgICAgICdAZGF0YSc6IE9iamVjdC5hc3NpZ24oe30sIHJlc3VsdC5kYXRhLCB7XG4gICAgICAgIGlkOiBlbnRpdHkuaWRcbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBpZiAoY29tbWl0KSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzWydAY29tbWl0J10gPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgICAgICB0aGlzLmVtaXQoJ2NvbW1pdCcsIHRoaXNbJ0Bjb21taXQnXSk7XG4gICAgICB9IGNhdGNoIChFKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBjb21taXQuJywgRSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MubGlzdGVuZXJzICYmIHRoaXMuc2V0dGluZ3MubGlzdGVuZXJzLmNyZWF0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5saXN0ZW5lcnMuY3JlYXRlKGVudGl0eS5kYXRhKTtcbiAgICB9XG5cbiAgICByZXN1bHQgPSByZXN1bHQuZGF0YSB8fCBlbnRpdHkuZGF0YTtcbiAgICByZXN1bHQuaWQgPSBlbnRpdHkuaWQ7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHtAbGluayBTdGF0ZX0gaW50byBtZW1vcnkuXG4gICAqIEBwYXJhbSB7U3RhdGV9IHN0YXRlIFN0YXRlIHRvIGltcG9ydC5cbiAgICogQHBhcmFtIHtCb29sZWFufSBjb21taXQgV2hldGhlciBvciBub3QgdG8gY29tbWl0IHRoZSByZXN1bHQuXG4gICAqIEBlbWl0cyBtZXNzYWdlIFdpbGwgZW1pdCBvbmUgYENvbGxlY3Rpb25TbmFwc2hvdGAgbWVzc2FnZSAobm90IHRoZSByZW1vdmVkIFNuYXBzaG90IHR5cGUpLlxuICAgKi9cbiAgYXN5bmMgaW1wb3J0IChpbnB1dCwgY29tbWl0ID0gdHJ1ZSkge1xuICAgIGlmIChpbnB1dFsnQGRhdGEnXSkgaW5wdXQgPSBpbnB1dFsnQGRhdGEnXTtcblxuICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgIGxldCBzaXplID0gYXdhaXQgdGhpcy5wdXNoKGlucHV0LCBmYWxzZSk7XG4gICAgbGV0IHN0YXRlID0gdGhpc1snQGVudGl0eSddLnN0YXRlc1t0aGlzWydAZGF0YSddW3NpemUgLSAxXV07XG4gICAgbGV0IGVudGl0eSA9IG5ldyBFbnRpdHkoc3RhdGUpO1xuICAgIGxldCBsaW5rID0gYCR7dGhpcy5wYXRofS8ke2lucHV0LmlkIHx8IGVudGl0eS5pZH1gO1xuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MudmVyYm9zaXR5ID49IDQpIGNvbnNvbGUubG9nKCdzdGF0ZS5kYXRhOicsIHN0YXRlLmRhdGEpO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnZlcmJvc2l0eSA+PSA0KSBjb25zb2xlLmxvZygnc3RhdGU6Jywgc3RhdGUpO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnZlcmJvc2l0eSA+PSA0KSBjb25zb2xlLmxvZygnbGluazonLCBsaW5rKTtcblxuICAgIHRoaXMuc2V0KGxpbmssIHN0YXRlLmRhdGEgfHwgc3RhdGUpO1xuXG4gICAgaWYgKGNvbW1pdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpc1snQGNvbW1pdCddID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGNvbW1pdC4nLCBFKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXN1bHQgPSBzdGF0ZS5kYXRhIHx8IGVudGl0eS5kYXRhO1xuICAgIHJlc3VsdC5pZCA9IGlucHV0LmlkIHx8IGVudGl0eS5pZDtcblxuICAgIC8vIFRPRE86IGVuc3VyZSB1cGRhdGVzIHNlbnQgb24gc3Vic2NyaWJlciBjaGFubmVsc1xuICAgIC8vIEVTUEVDSUFMTFkgd2hlbiBhbiBJRCBpcyBzdXBwbGllZC4uLlxuICAgIC8vIFRPRE86IHRlc3QgdXBzdHJlYW0gYXR0YWNrIHZlY3RvcnNcbiAgICBpZiAodGhpcy5zZXR0aW5ncy52ZXJib3NpdHkgPj0gNCkgY29uc29sZS5sb2coJ2lucHV0LmlkJywgaW5wdXQuaWQpO1xuXG4gICAgdGhpcy5lbWl0KCdtZXNzYWdlJywge1xuICAgICAgJ0B0eXBlJzogJ0NvbGxlY3Rpb25TbmFwc2hvdCcsXG4gICAgICAnQGRhdGEnOiB7XG4gICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgc3RhdGU6IHBvaW50ZXIuZ2V0KHRoaXMudmFsdWUsIHRoaXMucGF0aClcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBpbXBvcnRMaXN0IChsaXN0KSB7XG4gICAgbGV0IGlkcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgaXRlbSA9IGF3YWl0IHRoaXMuaW1wb3J0KGxpc3RbaV0pO1xuICAgICAgaWRzLnB1c2goaXRlbS5pZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIGFzeW5jIGltcG9ydE1hcCAobWFwKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1wb3J0TGlzdChPYmplY3QudmFsdWVzKG1hcCkpO1xuICB9XG5cbiAgY29tbWl0ICgpIHtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy52ZXJib3NpdHkgPj0gNCkgdGhpcy5lbWl0KCdkZWJ1ZycsICdbRkFCUklDOkNPTExFQ1RJT05dIENvbW1pdHRpbmcuLi4nKTtcbiAgICBjb25zdCBwYXRjaGVzID0gbW9uaXRvci5nZW5lcmF0ZSh0aGlzLm9ic2VydmVyKTtcblxuICAgIGlmIChwYXRjaGVzICYmIHBhdGNoZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICBjaGFuZ2VzOiBwYXRjaGVzLFxuICAgICAgICBzdGF0ZTogdGhpcy52YWx1ZVxuICAgICAgfTtcblxuICAgICAgdGhpcy5lbWl0KCd0cmFuc2FjdGlvbicsIGJvZHkpO1xuICAgICAgdGhpcy5lbWl0KCdwYXRjaGVzJywgcGF0Y2hlcyk7XG4gICAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCB7XG4gICAgICAgICdAdHlwZSc6ICdUcmFuc2FjdGlvbicsXG4gICAgICAgICdAZGF0YSc6IGJvZHlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsZW4gKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmxpc3QoKSkubGVuZ3RoO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGVjdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/collection.js\n\n}")},"./node_modules/@fabric/core/types/ecc.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n// Shared noble-curves-based secp256k1 shim implementing the tiny-secp256k1-style interface\nconst { secp256k1, schnorr: schnorrModule } = __webpack_require__(/*! @noble/curves/secp256k1.js */ \"./node_modules/@noble/curves/secp256k1.js\");\nconst { toUint8Flexible } = __webpack_require__(/*! ../functions/bytes */ \"./node_modules/@fabric/core/functions/bytes.js\");\nconst SecpPoint = secp256k1.ProjectivePoint || secp256k1.Point;\n\n// noble-curves v1 exposes secp256k1.CURVE.n; v2 exposes secp256k1.Point.Fn.ORDER\nconst CURVE_N = (secp256k1.CURVE && secp256k1.CURVE.n) ||\n (secp256k1.Point && secp256k1.Point.Fn && secp256k1.Point.Fn.ORDER);\n\nfunction fromBytes (bytes) {\n if (!SecpPoint) throw new Error('Unsupported noble secp256k1 Point API');\n const u8 = toUint8Flexible(bytes, 65);\n if (typeof SecpPoint.fromBytes === 'function') return SecpPoint.fromBytes(u8);\n if (typeof SecpPoint.fromHex === 'function') {\n const hex = Buffer.from(u8).toString('hex');\n return SecpPoint.fromHex(hex);\n }\n throw new Error('Unsupported noble secp256k1 Point API');\n}\n\nfunction toRawBytes (P, compressed = true) {\n if (!P) throw new Error('Missing point');\n if (typeof P.toRawBytes === 'function') return P.toRawBytes(compressed);\n if (typeof P.toBytes === 'function') {\n // noble-curves v2: toBytes() always returns compressed SEC1 (33 bytes).\n if (compressed) return P.toBytes();\n const affine = (typeof P.toAffine === 'function') ? P.toAffine() : null;\n if (!affine || typeof affine.x !== 'bigint' || typeof affine.y !== 'bigint') {\n throw new Error('Point.toAffine() unavailable for uncompressed encoding');\n }\n const x = Buffer.from(affine.x.toString(16).padStart(64, '0'), 'hex');\n const y = Buffer.from(affine.y.toString(16).padStart(64, '0'), 'hex');\n return Buffer.concat([Buffer.from([0x04]), x, y]);\n }\n throw new Error('Unsupported point serialization');\n}\n\nfunction getYParity (P) {\n // noble-curves v1: point has `.y` bigint; v2: use `toAffine().y`\n const y = (P && typeof P.y === 'bigint')\n ? P.y\n : (P && typeof P.toAffine === 'function' ? P.toAffine().y : null);\n if (typeof y !== 'bigint') throw new Error('Unable to determine point y-parity');\n return (y & 1n) ? 1 : 0;\n}\n\nconst ecc = {\n isPrivate (d) {\n if (!d) return false;\n const bytes = Buffer.isBuffer(d) ? d : Buffer.from(d);\n if (bytes.length !== 32) return false;\n try {\n if (secp256k1.utils && typeof secp256k1.utils.isValidPrivateKey === 'function') {\n return secp256k1.utils.isValidPrivateKey(bytes);\n }\n if (secp256k1.utils && typeof secp256k1.utils.isValidSecretKey === 'function') {\n return secp256k1.utils.isValidSecretKey(bytes);\n }\n // Fallback: check scalar range (1..n-1)\n if (!CURVE_N) return false;\n const k = BigInt('0x' + bytes.toString('hex'));\n return k > 0n && k < CURVE_N;\n } catch {\n return false;\n }\n },\n\n isPoint (p) {\n if (!p) return false;\n const bytes = Buffer.isBuffer(p) ? p : Buffer.from(p);\n try {\n if (secp256k1.utils && typeof secp256k1.utils.isValidPublicKey === 'function') {\n return secp256k1.utils.isValidPublicKey(toUint8Flexible(bytes, 65));\n }\n fromBytes(bytes);\n return true;\n } catch {\n return false;\n }\n },\n\n // bitcoinjs / bip32: scalar -> point\n pointFromScalar (d, compressed) {\n if (!d) return null;\n const bytes = Buffer.isBuffer(d) ? d : Buffer.from(d);\n try {\n const pub = secp256k1.getPublicKey(toUint8Flexible(bytes, 32), compressed);\n return Buffer.from(pub);\n } catch {\n return null;\n }\n },\n\n // ecpair: point + scalar tweak\n pointAddScalar (p, tweak, compressed) {\n if (!p || !tweak) return null;\n const pBytes = Buffer.isBuffer(p) ? p : Buffer.from(p);\n const tBytes = Buffer.isBuffer(tweak) ? tweak : Buffer.from(tweak);\n try {\n if (!SecpPoint) return null;\n if (!CURVE_N) return null;\n const P = fromBytes(pBytes);\n const k = BigInt('0x' + tBytes.toString('hex'));\n if (k === 0n || k >= CURVE_N) return null;\n const T = SecpPoint.BASE.multiply(k);\n const R = P.add(T);\n return Buffer.from(toRawBytes(R, compressed));\n } catch {\n return null;\n }\n },\n\n // ecpair / bitcoinjs: point compression / decompression\n pointCompress (p, compressed) {\n if (!p) return null;\n const bytes = Buffer.isBuffer(p) ? p : Buffer.from(p);\n try {\n if (!SecpPoint) return null;\n const P = fromBytes(bytes);\n return Buffer.from(toRawBytes(P, compressed));\n } catch {\n return null;\n }\n },\n\n // x-only point check for bitcoinjs ecc_lib.verifyEcc (accepts both even- and odd-Y encodings)\n isXOnlyPoint (x) {\n if (!x) return false;\n const xBytes = Buffer.isBuffer(x) ? x : Buffer.from(x);\n if (xBytes.length !== 32) return false;\n try {\n // Try even-Y (0x02) then odd-Y (0x03); if either is on-curve, x is valid\n if (!SecpPoint) return false;\n fromBytes(Buffer.concat([Buffer.from([0x02]), xBytes]));\n return true;\n } catch {\n try {\n fromBytes(Buffer.concat([Buffer.from([0x03]), xBytes]));\n return true;\n } catch {\n return false;\n }\n }\n },\n\n // BIP341-style x-only tweak, used by both bitcoinjs and ecpair tests\n xOnlyPointAddTweak (xOnlyPubkey, tweak) {\n const xBytes = Buffer.isBuffer(xOnlyPubkey) ? xOnlyPubkey : Buffer.from(xOnlyPubkey);\n const tBytes = Buffer.isBuffer(tweak) ? tweak : Buffer.from(tweak);\n if (xBytes.length !== 32 || tBytes.length !== 32) return null;\n try {\n if (!SecpPoint) return null;\n if (!CURVE_N) return null;\n const P = fromBytes(Buffer.concat([Buffer.from([0x02]), xBytes]));\n const k = BigInt('0x' + tBytes.toString('hex'));\n if (k === 0n || k >= CURVE_N) return null;\n const T = SecpPoint.BASE.multiply(k);\n const R = P.add(T);\n if (R.equals(SecpPoint.ZERO)) return null;\n const Rx = Buffer.from(toRawBytes(R, true)).slice(1);\n const parity = getYParity(R);\n return { xOnlyPubkey: Rx, parity };\n } catch {\n return null;\n }\n },\n\n // Scalar addition modulo n, as required by ecpair tests\n privateAdd (d, tweak) {\n if (!d || !tweak) return null;\n const dBytes = Buffer.isBuffer(d) ? d : Buffer.from(d);\n const tBytes = Buffer.isBuffer(tweak) ? tweak : Buffer.from(tweak);\n if (dBytes.length !== 32 || tBytes.length !== 32) return null;\n if (!CURVE_N) return null;\n const x = BigInt('0x' + dBytes.toString('hex'));\n const t = BigInt('0x' + tBytes.toString('hex'));\n const res = (x + t) % CURVE_N;\n if (res === 0n) return null;\n const hex = res.toString(16).padStart(64, '0');\n return Buffer.from(hex, 'hex');\n },\n\n // Scalar negation modulo n, as required by ecpair tests\n privateNegate (d) {\n if (!d) return null;\n const dBytes = Buffer.isBuffer(d) ? d : Buffer.from(d);\n if (dBytes.length !== 32) return null;\n if (!CURVE_N) return null;\n const x = BigInt('0x' + dBytes.toString('hex'));\n if (x === 0n || x >= CURVE_N) return null;\n const res = (CURVE_N - x) % CURVE_N;\n const hex = res.toString(16).padStart(64, '0');\n return Buffer.from(hex, 'hex');\n },\n\n // ECDSA sign / verify with 32-byte message hashes, compact 64-byte signatures\n sign (msg, priv) {\n const m = Buffer.isBuffer(msg) ? msg : Buffer.from(msg);\n const d = Buffer.isBuffer(priv) ? priv : Buffer.from(priv);\n if (m.length !== 32 || d.length !== 32) {\n throw new Error('sign expects 32-byte message hash and private key');\n }\n // noble-curves v2 prehashes (sha256) by default; for tiny-secp compatibility we sign raw 32-byte hashes.\n const sig = secp256k1.sign(toUint8Flexible(m, 32), toUint8Flexible(d, 32), { prehash: false });\n // noble-curves v1 returns Signature; v2 returns Uint8Array(64)\n if (sig && typeof sig.toCompactRawBytes === 'function') {\n return Buffer.from(sig.toCompactRawBytes());\n }\n return Buffer.from(sig);\n },\n\n verify (msg, pubkey, sig) {\n const m = Buffer.isBuffer(msg) ? msg : Buffer.from(msg);\n const p = Buffer.isBuffer(pubkey) ? pubkey : Buffer.from(pubkey);\n const s = Buffer.isBuffer(sig) ? sig : Buffer.from(sig);\n if (m.length !== 32) return false;\n try {\n // noble-curves v2 prehashes (sha256) by default; verify raw 32-byte hashes.\n return secp256k1.verify(toUint8Flexible(s, 64), toUint8Flexible(m, 32), toUint8Flexible(p, 65), { prehash: false });\n } catch {\n return false;\n }\n },\n\n // BIP340 Schnorr (for Federation.verifyMultiSignature and ecpair testEcc)\n signSchnorr (msgHash, privKey, auxRand) {\n const m = Buffer.isBuffer(msgHash) ? msgHash : Buffer.from(msgHash);\n const d = Buffer.isBuffer(privKey) ? privKey : Buffer.from(privKey);\n if (m.length !== 32 || d.length !== 32) throw new Error('signSchnorr expects 32-byte message hash and private key');\n const aux = (auxRand != null && (Buffer.isBuffer(auxRand) || auxRand.length === 32))\n ? (Buffer.isBuffer(auxRand) ? auxRand : Buffer.from(auxRand))\n : Buffer.alloc(32);\n return Buffer.from(schnorrModule.sign(toUint8Flexible(m, 32), toUint8Flexible(d, 32), toUint8Flexible(aux, 32)));\n },\n verifySchnorr (msgHash, xOnlyPubkey, sig) {\n const m = Buffer.isBuffer(msgHash) ? msgHash : Buffer.from(msgHash);\n const px = Buffer.isBuffer(xOnlyPubkey) ? xOnlyPubkey : Buffer.from(xOnlyPubkey);\n const s = Buffer.isBuffer(sig) ? sig : Buffer.from(sig);\n if (m.length !== 32 || px.length !== 32 || s.length !== 64) return false;\n try {\n return schnorrModule.verify(toUint8Flexible(s, 64), toUint8Flexible(m, 32), toUint8Flexible(px, 32));\n } catch {\n return false;\n }\n }\n};\n\nif (typeof window !== 'undefined') {\n // Skip under JSDOM (e.g. webpack bundler / browser tests set global.window); self-test is for real browsers.\n // Use window.navigator — Node may set global.window without a global `navigator`.\n const nav = typeof window.navigator !== 'undefined' ? window.navigator : null;\n const ua = nav && nav.userAgent ? nav.userAgent : '';\n const skipJsdom = /jsdom/i.test(ua);\n const globalScope = typeof globalThis !== 'undefined' ? globalThis : window;\n if (!skipJsdom && !globalScope.__FABRIC_ECC_SELFTESTED__) {\n globalScope.__FABRIC_ECC_SELFTESTED__ = true;\n try {\n __webpack_require__(/*! ./ecc.selftest */ \"./node_modules/@fabric/core/types/ecc.selftest.js\")(ecc);\n } catch (e) {\n console.error('[fabric/ecc] self-test load failed:', e && e.message, e);\n }\n }\n}\n\nmodule.exports = ecc;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBMEM7QUFDMUM7QUFDQSxhQUFhLE1BQU07QUFDbkI7QUFDQSxXQUFXLE1BQU07QUFDakIsR0FBRzs7QUFFSDtBQUNBLGNBQWMsTUFBTSx1QkFBdUIsTUFBTTtBQUNqRCxjQUFjLE1BQU0sNkJBQTZCLE1BQU07QUFDdkQsY0FBYyxNQUFNLHVCQUF1QixNQUFNO0FBQ2pEO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQsd0dBQXdHLGdCQUFnQjtBQUN4SCxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLGNBQWMsTUFBTSwrQkFBK0IsTUFBTTtBQUN6RCxjQUFjLE1BQU0sK0JBQStCLE1BQU07QUFDekQ7QUFDQSxxQ0FBcUMsTUFBTTtBQUMzQyxTQUFTLE1BQU0sK0JBQStCLE1BQU07QUFDcEQsUUFBUSxNQUFNO0FBQ2QsV0FBVyxNQUFNO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLGNBQWMsTUFBTSwrQkFBK0IsTUFBTTtBQUN6RCxlQUFlLE1BQU0sdUNBQXVDLE1BQU07QUFDbEUsY0FBYyxNQUFNLHVCQUF1QixNQUFNO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdGQUFnRjtBQUNoRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtQkFBTyxDQUFDLHlFQUFnQjtBQUM5QixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvdHlwZXMvZWNjLmpzPzk4MzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBTaGFyZWQgbm9ibGUtY3VydmVzLWJhc2VkIHNlY3AyNTZrMSBzaGltIGltcGxlbWVudGluZyB0aGUgdGlueS1zZWNwMjU2azEtc3R5bGUgaW50ZXJmYWNlXG5jb25zdCB7IHNlY3AyNTZrMSwgc2Nobm9ycjogc2Nobm9yck1vZHVsZSB9ID0gcmVxdWlyZSgnQG5vYmxlL2N1cnZlcy9zZWNwMjU2azEuanMnKTtcbmNvbnN0IHsgdG9VaW50OEZsZXhpYmxlIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvYnl0ZXMnKTtcbmNvbnN0IFNlY3BQb2ludCA9IHNlY3AyNTZrMS5Qcm9qZWN0aXZlUG9pbnQgfHwgc2VjcDI1NmsxLlBvaW50O1xuXG4vLyBub2JsZS1jdXJ2ZXMgdjEgZXhwb3NlcyBzZWNwMjU2azEuQ1VSVkUubjsgdjIgZXhwb3NlcyBzZWNwMjU2azEuUG9pbnQuRm4uT1JERVJcbmNvbnN0IENVUlZFX04gPSAoc2VjcDI1NmsxLkNVUlZFICYmIHNlY3AyNTZrMS5DVVJWRS5uKSB8fFxuICAoc2VjcDI1NmsxLlBvaW50ICYmIHNlY3AyNTZrMS5Qb2ludC5GbiAmJiBzZWNwMjU2azEuUG9pbnQuRm4uT1JERVIpO1xuXG5mdW5jdGlvbiBmcm9tQnl0ZXMgKGJ5dGVzKSB7XG4gIGlmICghU2VjcFBvaW50KSB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIG5vYmxlIHNlY3AyNTZrMSBQb2ludCBBUEknKTtcbiAgY29uc3QgdTggPSB0b1VpbnQ4RmxleGlibGUoYnl0ZXMsIDY1KTtcbiAgaWYgKHR5cGVvZiBTZWNwUG9pbnQuZnJvbUJ5dGVzID09PSAnZnVuY3Rpb24nKSByZXR1cm4gU2VjcFBvaW50LmZyb21CeXRlcyh1OCk7XG4gIGlmICh0eXBlb2YgU2VjcFBvaW50LmZyb21IZXggPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBoZXggPSBCdWZmZXIuZnJvbSh1OCkudG9TdHJpbmcoJ2hleCcpO1xuICAgIHJldHVybiBTZWNwUG9pbnQuZnJvbUhleChoZXgpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbm9ibGUgc2VjcDI1NmsxIFBvaW50IEFQSScpO1xufVxuXG5mdW5jdGlvbiB0b1Jhd0J5dGVzIChQLCBjb21wcmVzc2VkID0gdHJ1ZSkge1xuICBpZiAoIVApIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBwb2ludCcpO1xuICBpZiAodHlwZW9mIFAudG9SYXdCeXRlcyA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIFAudG9SYXdCeXRlcyhjb21wcmVzc2VkKTtcbiAgaWYgKHR5cGVvZiBQLnRvQnl0ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBub2JsZS1jdXJ2ZXMgdjI6IHRvQnl0ZXMoKSBhbHdheXMgcmV0dXJucyBjb21wcmVzc2VkIFNFQzEgKDMzIGJ5dGVzKS5cbiAgICBpZiAoY29tcHJlc3NlZCkgcmV0dXJuIFAudG9CeXRlcygpO1xuICAgIGNvbnN0IGFmZmluZSA9ICh0eXBlb2YgUC50b0FmZmluZSA9PT0gJ2Z1bmN0aW9uJykgPyBQLnRvQWZmaW5lKCkgOiBudWxsO1xuICAgIGlmICghYWZmaW5lIHx8IHR5cGVvZiBhZmZpbmUueCAhPT0gJ2JpZ2ludCcgfHwgdHlwZW9mIGFmZmluZS55ICE9PSAnYmlnaW50Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2ludC50b0FmZmluZSgpIHVuYXZhaWxhYmxlIGZvciB1bmNvbXByZXNzZWQgZW5jb2RpbmcnKTtcbiAgICB9XG4gICAgY29uc3QgeCA9IEJ1ZmZlci5mcm9tKGFmZmluZS54LnRvU3RyaW5nKDE2KS5wYWRTdGFydCg2NCwgJzAnKSwgJ2hleCcpO1xuICAgIGNvbnN0IHkgPSBCdWZmZXIuZnJvbShhZmZpbmUueS50b1N0cmluZygxNikucGFkU3RhcnQoNjQsICcwJyksICdoZXgnKTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oWzB4MDRdKSwgeCwgeV0pO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcG9pbnQgc2VyaWFsaXphdGlvbicpO1xufVxuXG5mdW5jdGlvbiBnZXRZUGFyaXR5IChQKSB7XG4gIC8vIG5vYmxlLWN1cnZlcyB2MTogcG9pbnQgaGFzIGAueWAgYmlnaW50OyB2MjogdXNlIGB0b0FmZmluZSgpLnlgXG4gIGNvbnN0IHkgPSAoUCAmJiB0eXBlb2YgUC55ID09PSAnYmlnaW50JylcbiAgICA/IFAueVxuICAgIDogKFAgJiYgdHlwZW9mIFAudG9BZmZpbmUgPT09ICdmdW5jdGlvbicgPyBQLnRvQWZmaW5lKCkueSA6IG51bGwpO1xuICBpZiAodHlwZW9mIHkgIT09ICdiaWdpbnQnKSB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBkZXRlcm1pbmUgcG9pbnQgeS1wYXJpdHknKTtcbiAgcmV0dXJuICh5ICYgMW4pID8gMSA6IDA7XG59XG5cbmNvbnN0IGVjYyA9IHtcbiAgaXNQcml2YXRlIChkKSB7XG4gICAgaWYgKCFkKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIoZCkgPyBkIDogQnVmZmVyLmZyb20oZCk7XG4gICAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gMzIpIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgaWYgKHNlY3AyNTZrMS51dGlscyAmJiB0eXBlb2Ygc2VjcDI1NmsxLnV0aWxzLmlzVmFsaWRQcml2YXRlS2V5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBzZWNwMjU2azEudXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoYnl0ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHNlY3AyNTZrMS51dGlscyAmJiB0eXBlb2Ygc2VjcDI1NmsxLnV0aWxzLmlzVmFsaWRTZWNyZXRLZXkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHNlY3AyNTZrMS51dGlscy5pc1ZhbGlkU2VjcmV0S2V5KGJ5dGVzKTtcbiAgICAgIH1cbiAgICAgIC8vIEZhbGxiYWNrOiBjaGVjayBzY2FsYXIgcmFuZ2UgKDEuLm4tMSlcbiAgICAgIGlmICghQ1VSVkVfTikgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgayA9IEJpZ0ludCgnMHgnICsgYnl0ZXMudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIHJldHVybiBrID4gMG4gJiYgayA8IENVUlZFX047XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LFxuXG4gIGlzUG9pbnQgKHApIHtcbiAgICBpZiAoIXApIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcihwKSA/IHAgOiBCdWZmZXIuZnJvbShwKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHNlY3AyNTZrMS51dGlscyAmJiB0eXBlb2Ygc2VjcDI1NmsxLnV0aWxzLmlzVmFsaWRQdWJsaWNLZXkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHNlY3AyNTZrMS51dGlscy5pc1ZhbGlkUHVibGljS2V5KHRvVWludDhGbGV4aWJsZShieXRlcywgNjUpKTtcbiAgICAgIH1cbiAgICAgIGZyb21CeXRlcyhieXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gYml0Y29pbmpzIC8gYmlwMzI6IHNjYWxhciAtPiBwb2ludFxuICBwb2ludEZyb21TY2FsYXIgKGQsIGNvbXByZXNzZWQpIHtcbiAgICBpZiAoIWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKGQpID8gZCA6IEJ1ZmZlci5mcm9tKGQpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwdWIgPSBzZWNwMjU2azEuZ2V0UHVibGljS2V5KHRvVWludDhGbGV4aWJsZShieXRlcywgMzIpLCBjb21wcmVzc2VkKTtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShwdWIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LFxuXG4gIC8vIGVjcGFpcjogcG9pbnQgKyBzY2FsYXIgdHdlYWtcbiAgcG9pbnRBZGRTY2FsYXIgKHAsIHR3ZWFrLCBjb21wcmVzc2VkKSB7XG4gICAgaWYgKCFwIHx8ICF0d2VhaykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcEJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHApID8gcCA6IEJ1ZmZlci5mcm9tKHApO1xuICAgIGNvbnN0IHRCeXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih0d2VhaykgPyB0d2VhayA6IEJ1ZmZlci5mcm9tKHR3ZWFrKTtcbiAgICB0cnkge1xuICAgICAgaWYgKCFTZWNwUG9pbnQpIHJldHVybiBudWxsO1xuICAgICAgaWYgKCFDVVJWRV9OKSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IFAgPSBmcm9tQnl0ZXMocEJ5dGVzKTtcbiAgICAgIGNvbnN0IGsgPSBCaWdJbnQoJzB4JyArIHRCeXRlcy50b1N0cmluZygnaGV4JykpO1xuICAgICAgaWYgKGsgPT09IDBuIHx8IGsgPj0gQ1VSVkVfTikgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBUID0gU2VjcFBvaW50LkJBU0UubXVsdGlwbHkoayk7XG4gICAgICBjb25zdCBSID0gUC5hZGQoVCk7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20odG9SYXdCeXRlcyhSLCBjb21wcmVzc2VkKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sXG5cbiAgLy8gZWNwYWlyIC8gYml0Y29pbmpzOiBwb2ludCBjb21wcmVzc2lvbiAvIGRlY29tcHJlc3Npb25cbiAgcG9pbnRDb21wcmVzcyAocCwgY29tcHJlc3NlZCkge1xuICAgIGlmICghcCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIocCkgPyBwIDogQnVmZmVyLmZyb20ocCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghU2VjcFBvaW50KSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IFAgPSBmcm9tQnl0ZXMoYnl0ZXMpO1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRvUmF3Qnl0ZXMoUCwgY29tcHJlc3NlZCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LFxuXG4gIC8vIHgtb25seSBwb2ludCBjaGVjayBmb3IgYml0Y29pbmpzIGVjY19saWIudmVyaWZ5RWNjIChhY2NlcHRzIGJvdGggZXZlbi0gYW5kIG9kZC1ZIGVuY29kaW5ncylcbiAgaXNYT25seVBvaW50ICh4KSB7XG4gICAgaWYgKCF4KSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgeEJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHgpID8geCA6IEJ1ZmZlci5mcm9tKHgpO1xuICAgIGlmICh4Qnl0ZXMubGVuZ3RoICE9PSAzMikgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgZXZlbi1ZICgweDAyKSB0aGVuIG9kZC1ZICgweDAzKTsgaWYgZWl0aGVyIGlzIG9uLWN1cnZlLCB4IGlzIHZhbGlkXG4gICAgICBpZiAoIVNlY3BQb2ludCkgcmV0dXJuIGZhbHNlO1xuICAgICAgZnJvbUJ5dGVzKEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFsweDAyXSksIHhCeXRlc10pKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZnJvbUJ5dGVzKEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFsweDAzXSksIHhCeXRlc10pKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvLyBCSVAzNDEtc3R5bGUgeC1vbmx5IHR3ZWFrLCB1c2VkIGJ5IGJvdGggYml0Y29pbmpzIGFuZCBlY3BhaXIgdGVzdHNcbiAgeE9ubHlQb2ludEFkZFR3ZWFrICh4T25seVB1YmtleSwgdHdlYWspIHtcbiAgICBjb25zdCB4Qnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIoeE9ubHlQdWJrZXkpID8geE9ubHlQdWJrZXkgOiBCdWZmZXIuZnJvbSh4T25seVB1YmtleSk7XG4gICAgY29uc3QgdEJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHR3ZWFrKSA/IHR3ZWFrIDogQnVmZmVyLmZyb20odHdlYWspO1xuICAgIGlmICh4Qnl0ZXMubGVuZ3RoICE9PSAzMiB8fCB0Qnl0ZXMubGVuZ3RoICE9PSAzMikgcmV0dXJuIG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghU2VjcFBvaW50KSByZXR1cm4gbnVsbDtcbiAgICAgIGlmICghQ1VSVkVfTikgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBQID0gZnJvbUJ5dGVzKEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFsweDAyXSksIHhCeXRlc10pKTtcbiAgICAgIGNvbnN0IGsgPSBCaWdJbnQoJzB4JyArIHRCeXRlcy50b1N0cmluZygnaGV4JykpO1xuICAgICAgaWYgKGsgPT09IDBuIHx8IGsgPj0gQ1VSVkVfTikgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBUID0gU2VjcFBvaW50LkJBU0UubXVsdGlwbHkoayk7XG4gICAgICBjb25zdCBSID0gUC5hZGQoVCk7XG4gICAgICBpZiAoUi5lcXVhbHMoU2VjcFBvaW50LlpFUk8pKSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IFJ4ID0gQnVmZmVyLmZyb20odG9SYXdCeXRlcyhSLCB0cnVlKSkuc2xpY2UoMSk7XG4gICAgICBjb25zdCBwYXJpdHkgPSBnZXRZUGFyaXR5KFIpO1xuICAgICAgcmV0dXJuIHsgeE9ubHlQdWJrZXk6IFJ4LCBwYXJpdHkgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSxcblxuICAvLyBTY2FsYXIgYWRkaXRpb24gbW9kdWxvIG4sIGFzIHJlcXVpcmVkIGJ5IGVjcGFpciB0ZXN0c1xuICBwcml2YXRlQWRkIChkLCB0d2Vhaykge1xuICAgIGlmICghZCB8fCAhdHdlYWspIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGRCeXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcihkKSA/IGQgOiBCdWZmZXIuZnJvbShkKTtcbiAgICBjb25zdCB0Qnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodHdlYWspID8gdHdlYWsgOiBCdWZmZXIuZnJvbSh0d2Vhayk7XG4gICAgaWYgKGRCeXRlcy5sZW5ndGggIT09IDMyIHx8IHRCeXRlcy5sZW5ndGggIT09IDMyKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIUNVUlZFX04pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHggPSBCaWdJbnQoJzB4JyArIGRCeXRlcy50b1N0cmluZygnaGV4JykpO1xuICAgIGNvbnN0IHQgPSBCaWdJbnQoJzB4JyArIHRCeXRlcy50b1N0cmluZygnaGV4JykpO1xuICAgIGNvbnN0IHJlcyA9ICh4ICsgdCkgJSBDVVJWRV9OO1xuICAgIGlmIChyZXMgPT09IDBuKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBoZXggPSByZXMudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDY0LCAnMCcpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShoZXgsICdoZXgnKTtcbiAgfSxcblxuICAvLyBTY2FsYXIgbmVnYXRpb24gbW9kdWxvIG4sIGFzIHJlcXVpcmVkIGJ5IGVjcGFpciB0ZXN0c1xuICBwcml2YXRlTmVnYXRlIChkKSB7XG4gICAgaWYgKCFkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkQnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIoZCkgPyBkIDogQnVmZmVyLmZyb20oZCk7XG4gICAgaWYgKGRCeXRlcy5sZW5ndGggIT09IDMyKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIUNVUlZFX04pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHggPSBCaWdJbnQoJzB4JyArIGRCeXRlcy50b1N0cmluZygnaGV4JykpO1xuICAgIGlmICh4ID09PSAwbiB8fCB4ID49IENVUlZFX04pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHJlcyA9IChDVVJWRV9OIC0geCkgJSBDVVJWRV9OO1xuICAgIGNvbnN0IGhleCA9IHJlcy50b1N0cmluZygxNikucGFkU3RhcnQoNjQsICcwJyk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhleCwgJ2hleCcpO1xuICB9LFxuXG4gIC8vIEVDRFNBIHNpZ24gLyB2ZXJpZnkgd2l0aCAzMi1ieXRlIG1lc3NhZ2UgaGFzaGVzLCBjb21wYWN0IDY0LWJ5dGUgc2lnbmF0dXJlc1xuICBzaWduIChtc2csIHByaXYpIHtcbiAgICBjb25zdCBtID0gQnVmZmVyLmlzQnVmZmVyKG1zZykgPyBtc2cgOiBCdWZmZXIuZnJvbShtc2cpO1xuICAgIGNvbnN0IGQgPSBCdWZmZXIuaXNCdWZmZXIocHJpdikgPyBwcml2IDogQnVmZmVyLmZyb20ocHJpdik7XG4gICAgaWYgKG0ubGVuZ3RoICE9PSAzMiB8fCBkLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2lnbiBleHBlY3RzIDMyLWJ5dGUgbWVzc2FnZSBoYXNoIGFuZCBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgICAvLyBub2JsZS1jdXJ2ZXMgdjIgcHJlaGFzaGVzIChzaGEyNTYpIGJ5IGRlZmF1bHQ7IGZvciB0aW55LXNlY3AgY29tcGF0aWJpbGl0eSB3ZSBzaWduIHJhdyAzMi1ieXRlIGhhc2hlcy5cbiAgICBjb25zdCBzaWcgPSBzZWNwMjU2azEuc2lnbih0b1VpbnQ4RmxleGlibGUobSwgMzIpLCB0b1VpbnQ4RmxleGlibGUoZCwgMzIpLCB7IHByZWhhc2g6IGZhbHNlIH0pO1xuICAgIC8vIG5vYmxlLWN1cnZlcyB2MSByZXR1cm5zIFNpZ25hdHVyZTsgdjIgcmV0dXJucyBVaW50OEFycmF5KDY0KVxuICAgIGlmIChzaWcgJiYgdHlwZW9mIHNpZy50b0NvbXBhY3RSYXdCeXRlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZy50b0NvbXBhY3RSYXdCeXRlcygpKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNpZyk7XG4gIH0sXG5cbiAgdmVyaWZ5IChtc2csIHB1YmtleSwgc2lnKSB7XG4gICAgY29uc3QgbSA9IEJ1ZmZlci5pc0J1ZmZlcihtc2cpID8gbXNnIDogQnVmZmVyLmZyb20obXNnKTtcbiAgICBjb25zdCBwID0gQnVmZmVyLmlzQnVmZmVyKHB1YmtleSkgPyBwdWJrZXkgOiBCdWZmZXIuZnJvbShwdWJrZXkpO1xuICAgIGNvbnN0IHMgPSBCdWZmZXIuaXNCdWZmZXIoc2lnKSA/IHNpZyA6IEJ1ZmZlci5mcm9tKHNpZyk7XG4gICAgaWYgKG0ubGVuZ3RoICE9PSAzMikgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAvLyBub2JsZS1jdXJ2ZXMgdjIgcHJlaGFzaGVzIChzaGEyNTYpIGJ5IGRlZmF1bHQ7IHZlcmlmeSByYXcgMzItYnl0ZSBoYXNoZXMuXG4gICAgICByZXR1cm4gc2VjcDI1NmsxLnZlcmlmeSh0b1VpbnQ4RmxleGlibGUocywgNjQpLCB0b1VpbnQ4RmxleGlibGUobSwgMzIpLCB0b1VpbnQ4RmxleGlibGUocCwgNjUpLCB7IHByZWhhc2g6IGZhbHNlIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcblxuICAvLyBCSVAzNDAgU2Nobm9yciAoZm9yIEZlZGVyYXRpb24udmVyaWZ5TXVsdGlTaWduYXR1cmUgYW5kIGVjcGFpciB0ZXN0RWNjKVxuICBzaWduU2Nobm9yciAobXNnSGFzaCwgcHJpdktleSwgYXV4UmFuZCkge1xuICAgIGNvbnN0IG0gPSBCdWZmZXIuaXNCdWZmZXIobXNnSGFzaCkgPyBtc2dIYXNoIDogQnVmZmVyLmZyb20obXNnSGFzaCk7XG4gICAgY29uc3QgZCA9IEJ1ZmZlci5pc0J1ZmZlcihwcml2S2V5KSA/IHByaXZLZXkgOiBCdWZmZXIuZnJvbShwcml2S2V5KTtcbiAgICBpZiAobS5sZW5ndGggIT09IDMyIHx8IGQubGVuZ3RoICE9PSAzMikgdGhyb3cgbmV3IEVycm9yKCdzaWduU2Nobm9yciBleHBlY3RzIDMyLWJ5dGUgbWVzc2FnZSBoYXNoIGFuZCBwcml2YXRlIGtleScpO1xuICAgIGNvbnN0IGF1eCA9IChhdXhSYW5kICE9IG51bGwgJiYgKEJ1ZmZlci5pc0J1ZmZlcihhdXhSYW5kKSB8fCBhdXhSYW5kLmxlbmd0aCA9PT0gMzIpKVxuICAgICAgPyAoQnVmZmVyLmlzQnVmZmVyKGF1eFJhbmQpID8gYXV4UmFuZCA6IEJ1ZmZlci5mcm9tKGF1eFJhbmQpKVxuICAgICAgOiBCdWZmZXIuYWxsb2MoMzIpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShzY2hub3JyTW9kdWxlLnNpZ24odG9VaW50OEZsZXhpYmxlKG0sIDMyKSwgdG9VaW50OEZsZXhpYmxlKGQsIDMyKSwgdG9VaW50OEZsZXhpYmxlKGF1eCwgMzIpKSk7XG4gIH0sXG4gIHZlcmlmeVNjaG5vcnIgKG1zZ0hhc2gsIHhPbmx5UHVia2V5LCBzaWcpIHtcbiAgICBjb25zdCBtID0gQnVmZmVyLmlzQnVmZmVyKG1zZ0hhc2gpID8gbXNnSGFzaCA6IEJ1ZmZlci5mcm9tKG1zZ0hhc2gpO1xuICAgIGNvbnN0IHB4ID0gQnVmZmVyLmlzQnVmZmVyKHhPbmx5UHVia2V5KSA/IHhPbmx5UHVia2V5IDogQnVmZmVyLmZyb20oeE9ubHlQdWJrZXkpO1xuICAgIGNvbnN0IHMgPSBCdWZmZXIuaXNCdWZmZXIoc2lnKSA/IHNpZyA6IEJ1ZmZlci5mcm9tKHNpZyk7XG4gICAgaWYgKG0ubGVuZ3RoICE9PSAzMiB8fCBweC5sZW5ndGggIT09IDMyIHx8IHMubGVuZ3RoICE9PSA2NCkgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gc2Nobm9yck1vZHVsZS52ZXJpZnkodG9VaW50OEZsZXhpYmxlKHMsIDY0KSwgdG9VaW50OEZsZXhpYmxlKG0sIDMyKSwgdG9VaW50OEZsZXhpYmxlKHB4LCAzMikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufTtcblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIC8vIFNraXAgdW5kZXIgSlNET00gKGUuZy4gd2VicGFjayBidW5kbGVyIC8gYnJvd3NlciB0ZXN0cyBzZXQgZ2xvYmFsLndpbmRvdyk7IHNlbGYtdGVzdCBpcyBmb3IgcmVhbCBicm93c2Vycy5cbiAgLy8gVXNlIHdpbmRvdy5uYXZpZ2F0b3Ig4oCUIE5vZGUgbWF5IHNldCBnbG9iYWwud2luZG93IHdpdGhvdXQgYSBnbG9iYWwgYG5hdmlnYXRvcmAuXG4gIGNvbnN0IG5hdiA9IHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5uYXZpZ2F0b3IgOiBudWxsO1xuICBjb25zdCB1YSA9IG5hdiAmJiBuYXYudXNlckFnZW50ID8gbmF2LnVzZXJBZ2VudCA6ICcnO1xuICBjb25zdCBza2lwSnNkb20gPSAvanNkb20vaS50ZXN0KHVhKTtcbiAgY29uc3QgZ2xvYmFsU2NvcGUgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogd2luZG93O1xuICBpZiAoIXNraXBKc2RvbSAmJiAhZ2xvYmFsU2NvcGUuX19GQUJSSUNfRUNDX1NFTEZURVNURURfXykge1xuICAgIGdsb2JhbFNjb3BlLl9fRkFCUklDX0VDQ19TRUxGVEVTVEVEX18gPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICByZXF1aXJlKCcuL2VjYy5zZWxmdGVzdCcpKGVjYyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2ZhYnJpYy9lY2NdIHNlbGYtdGVzdCBsb2FkIGZhaWxlZDonLCBlICYmIGUubWVzc2FnZSwgZSk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZWNjO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/ecc.js\n\n}")},"./node_modules/@fabric/core/types/ecc.selftest.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * Browser bundle shim: `@fabric/core/types/ecc.js` requires `./ecc.selftest`, which is\n * omitted from some published builds. Webpack replaces that import with this file.\n *\n * @param {object} ecc — same API as `@fabric/core/types/ecc.js` exports\n */\nmodule.exports = function runFabricEccSelftest (ecc) {\n try {\n const priv = Buffer.alloc(32, 0);\n priv[31] = 1;\n if (!ecc.isPrivate(priv)) {\n console.error('[fabric/ecc] self-test: isPrivate(1) expected true');\n return;\n }\n const pub = ecc.pointFromScalar(priv, true);\n if (!pub || pub.length < 33) {\n console.error('[fabric/ecc] self-test: pointFromScalar failed');\n return;\n }\n const msg = Buffer.alloc(32, 7);\n const sig = ecc.sign(msg, priv);\n if (!ecc.verify(msg, pub, sig)) {\n console.error('[fabric/ecc] self-test: verify failed');\n }\n } catch (e) {\n console.error('[fabric/ecc] self-test failed:', e && e.message ? e.message : e);\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL2VjYy5zZWxmdGVzdC5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvdHlwZXMvZWNjLnNlbGZ0ZXN0LmpzP2RjMDMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEJyb3dzZXIgYnVuZGxlIHNoaW06IGBAZmFicmljL2NvcmUvdHlwZXMvZWNjLmpzYCByZXF1aXJlcyBgLi9lY2Muc2VsZnRlc3RgLCB3aGljaCBpc1xuICogb21pdHRlZCBmcm9tIHNvbWUgcHVibGlzaGVkIGJ1aWxkcy4gV2VicGFjayByZXBsYWNlcyB0aGF0IGltcG9ydCB3aXRoIHRoaXMgZmlsZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZWNjIOKAlCBzYW1lIEFQSSBhcyBgQGZhYnJpYy9jb3JlL3R5cGVzL2VjYy5qc2AgZXhwb3J0c1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJ1bkZhYnJpY0VjY1NlbGZ0ZXN0IChlY2MpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcml2ID0gQnVmZmVyLmFsbG9jKDMyLCAwKTtcbiAgICBwcml2WzMxXSA9IDE7XG4gICAgaWYgKCFlY2MuaXNQcml2YXRlKHByaXYpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZmFicmljL2VjY10gc2VsZi10ZXN0OiBpc1ByaXZhdGUoMSkgZXhwZWN0ZWQgdHJ1ZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwdWIgPSBlY2MucG9pbnRGcm9tU2NhbGFyKHByaXYsIHRydWUpO1xuICAgIGlmICghcHViIHx8IHB1Yi5sZW5ndGggPCAzMykge1xuICAgICAgY29uc29sZS5lcnJvcignW2ZhYnJpYy9lY2NdIHNlbGYtdGVzdDogcG9pbnRGcm9tU2NhbGFyIGZhaWxlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtc2cgPSBCdWZmZXIuYWxsb2MoMzIsIDcpO1xuICAgIGNvbnN0IHNpZyA9IGVjYy5zaWduKG1zZywgcHJpdik7XG4gICAgaWYgKCFlY2MudmVyaWZ5KG1zZywgcHViLCBzaWcpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbZmFicmljL2VjY10gc2VsZi10ZXN0OiB2ZXJpZnkgZmFpbGVkJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcignW2ZhYnJpYy9lY2NdIHNlbGYtdGVzdCBmYWlsZWQ6JywgZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBlKTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/ecc.selftest.js\n\n}")},"./node_modules/@fabric/core/types/entity.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n/* provided dependency */ var process = __webpack_require__(/*! process/browser */ \"./node_modules/process/browser.js\");\n\n\nconst crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nconst { EventEmitter } = __webpack_require__(/*! events */ \"./node_modules/events/events.js\");\nconst monitor = __webpack_require__(/*! fast-json-patch */ \"./node_modules/fast-json-patch/index.mjs\");\nconst Witness = __webpack_require__(/*! ./witness */ \"./node_modules/@fabric/core/types/witness.js\");\n\n/**\n * @classdesc Structured document type: extends {@link EventEmitter} (not {@link Actor}) with\n * @type / @data shape, JSON serialization, and id = SHA256(toJSON()).\n * Different model from {@link Actor#id} (sorted generic envelope). Entity.Transition (JSON Patch\n * between entity states) is the supported migration path — see DEVELOPERS.md (Consolidated prototypes).\n * @class Entity\n * @extends EventEmitter\n */\nclass Entity extends EventEmitter {\n constructor (data = {}) {\n super(data);\n\n // allow this entity to be run without the new keyword\n if (!(this instanceof Entity)) return new Entity(data);\n\n // set internal properties\n this.settings = {\n verbosity: 2 // Information && Warnings\n };\n\n // configure defaults\n this.actor = Object.assign({}, this._downsample(data));\n this.data = Object.assign({}, data);\n\n // TODO: use getters/setters to restrict access to these elements\n // remove EventEmitter cruft\n Object.defineProperty(this, '_events', { enumerable: false });\n Object.defineProperty(this, '_eventsCount', { enumerable: false });\n Object.defineProperty(this, '_maxListeners', { enumerable: false });\n\n // remove mutable variables\n Object.defineProperty(this, 'actor', { enumerable: false });\n // Object.defineProperty(this, 'machine', { enumerable: false });\n\n // return instance\n return this;\n }\n\n get version () {\n return 1;\n }\n\n set state (state) {\n if (!state) throw new Error('State must be provided.');\n this._state = state;\n }\n\n get state () {\n return Object.assign({}, this._state);\n }\n\n get buffer () {\n let entity = this;\n return function buffer () {\n return Buffer.from(entity.toJSON(), 'utf8');\n };\n }\n\n get id () {\n let data = this.toJSON();\n let hash = crypto.createHash('sha256').update(data).digest('hex');\n if (this.settings.verbosity >= 5) console.log('[FABRIC:ENTITY (pending upstream!)]', 'hash:', hash, 'data:', data);\n return hash;\n }\n\n serialize () {\n return this.toJSON();\n }\n\n toBuffer () {\n return Buffer.from(this.toString(), 'utf8');\n }\n\n /**\n * Produces a string of JSON, representing the entity.\n * @return {String} JSON-encoded object.\n */\n toJSON () {\n let result = null;\n\n switch (this.actor['@type']) {\n default:\n result = JSON.stringify(this.toObject());\n break;\n case 'Function':\n result = this._downsample();\n break;\n case 'Buffer':\n case 'String':\n result = JSON.stringify(this.toString());\n break;\n }\n\n return result;\n }\n\n toString () {\n let result = null;\n\n switch (this.actor['@type']) {\n default:\n result = JSON.stringify(this.actor['@data']);\n break;\n case 'Buffer':\n void new Uint8Array(this.data);\n const values = Object.values(this.data);\n result = JSON.stringify(values);\n break;\n case 'String':\n // TODO: write up longer-form explanation as to why we use an Array here\n result = this.actor['@data'].map(x => String.fromCharCode(x)).join('');\n // console.log('was string in array? now:', result);\n break;\n }\n\n return result;\n }\n\n toObject () {\n return this.actor['@data'];\n }\n\n /**\n * As a {@link Buffer}.\n * @return {Buffer} Slice of memory.\n */\n toRaw () {\n return Buffer.from(this.toJSON(), 'utf8');\n }\n\n /**\n * Return a {@link Fabric}-labeled {@link Object} for this {@link Entity}.\n * @param {Mixed} [input] Input to downsample. If not provided, current Entity will be used. \n */\n _downsample (input = this.data) {\n let result = {};\n\n if (typeof input === 'string') {\n result = {\n '@type': 'String',\n '@data': input.split('').map(x => x.charCodeAt(0))\n };\n } else if (input instanceof Array) {\n result = {\n '@type': 'Array',\n '@data': input\n };\n } else if (input instanceof Buffer) {\n result = {\n '@type': 'Buffer',\n '@data': JSON.parse(JSON.stringify(input))[0]\n };\n } else if (input instanceof Function) {\n try {\n result = {\n '@type': 'Function',\n '@data': JSON.stringify(input)\n };\n } catch (E) {\n console.error('Something could not be converted:', E, input);\n process.exit();\n }\n } else {\n try {\n result = {\n '@type': 'Entity',\n '@data': JSON.parse(JSON.stringify(input))\n };\n } catch (E) {\n console.error('Something could not be converted:', E, input);\n process.exit();\n }\n }\n\n return result;\n }\n}\n\n/**\n * @classdesc JSON Patch diff between two {@link Entity} snapshots (origin,\n * target, changes). Built via {@link Transition.between}, {@link Transition#fromTarget}, or manual\n * changes; uses fast-json-patch observe/generate.\n * @memberof Entity\n * @class Transition\n * @extends Entity\n */\nclass Transition extends Entity {\n constructor (settings = {}) {\n super(settings);\n\n this.status = 'constructing';\n this._state = {\n origin: null,\n target: null,\n changes: [],\n program: [],\n witness: null\n };\n\n this.settings = Object.assign({}, this._state, settings);\n this.witness = new Witness(this.settings);\n\n this._setOrigin(this.settings.origin);\n this._setTarget(this.settings.target);\n\n this.status = 'constructed';\n }\n\n static between (origin, target) {\n const x = new Entity(origin);\n const y = new Entity(target);\n\n const actor = Object.assign({}, origin);\n const observer = monitor.observe(actor);\n\n Object.assign(actor, target);\n\n return new Transition({\n origin: x.id,\n target: y.id,\n changes: monitor.generate(observer)\n });\n }\n\n fromTarget (target) {\n const base = new Entity();\n const entity = this._describeTarget(target);\n return new Transition({\n origin: base.id,\n target: entity.id\n });\n }\n\n _applyTo (state) {\n if (!state) throw new Error('State must be provided.');\n if (!(state instanceof Entity)) throw new Error('State not of known Entity type.');\n\n const instance = Object.assign({}, state);\n const observer = monitor.observe(instance);\n\n try {\n monitor.applyPatch(instance, this._state.changes);\n } catch (E) {\n console.error('Could not apply changes:', E);\n }\n\n monitor.generate(observer);\n return instance;\n }\n\n _setChanges (changes) {\n if (!changes) throw new Error('No changes specified.');\n this._state.changes = changes;\n }\n\n _setOrigin (origin) {\n if (!origin) throw new Error('No origin specified.');\n this._state.origin = origin;\n }\n\n _setTarget (target) {\n if (!target) throw new Error('No target specified.');\n this._state.target = target;\n }\n\n _describeTarget (target) {\n if (!target) throw new Error('No target specified.');\n const entity = new Entity(target);\n this._setTarget(entity.id);\n return entity;\n }\n}\n\nEntity.Transition = Transition;\n\nmodule.exports = Entity;\nmodule.exports.Transition = Transition;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL2VudGl0eS5qcyIsIm1hcHBpbmdzIjoiOztBQUFhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyx5REFBUTtBQUMvQixRQUFRLGVBQWUsRUFBRSxtQkFBTyxDQUFDLCtDQUFRO0FBQ3pDLGdCQUFnQixtQkFBTyxDQUFDLGlFQUFpQjtBQUN6QyxnQkFBZ0IsbUJBQU8sQ0FBQywrREFBVzs7QUFFbkM7QUFDQSxrRUFBa0Usb0JBQW9CLE1BQU0sWUFBWTtBQUN4RztBQUNBLGlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQztBQUNqQyxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQSw2Q0FBNkMsbUJBQW1CO0FBQ2hFLGtEQUFrRCxtQkFBbUI7QUFDckUsbURBQW1ELG1CQUFtQjs7QUFFdEU7QUFDQSwyQ0FBMkMsbUJBQW1CO0FBQzlELGdEQUFnRCxtQkFBbUI7O0FBRW5FO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsYUFBYTtBQUN4QixjQUFjLFFBQVE7QUFDdEI7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjs7QUFFQTtBQUNBLGVBQWUsYUFBYSxVQUFVLGNBQWMsVUFBVSxhQUFhO0FBQzNFLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sMEJBQTBCLE1BQU07QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVEsT0FBTztBQUNmO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRLE9BQU87QUFDZjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDREQUE0RCxjQUFjO0FBQzFFLDBEQUEwRCx5QkFBeUIsR0FBRyw0QkFBNEI7QUFDbEgseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0M7QUFDbEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7QUFDckM7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHlCQUF5QiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS90eXBlcy9lbnRpdHkuanM/MDhkMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuY29uc3QgbW9uaXRvciA9IHJlcXVpcmUoJ2Zhc3QtanNvbi1wYXRjaCcpO1xuY29uc3QgV2l0bmVzcyA9IHJlcXVpcmUoJy4vd2l0bmVzcycpO1xuXG4vKipcbiAqIEBjbGFzc2Rlc2MgPHN0cm9uZz5TdHJ1Y3R1cmVkIGRvY3VtZW50PC9zdHJvbmc+IHR5cGU6IGV4dGVuZHMge0BsaW5rIEV2ZW50RW1pdHRlcn0gKG5vdCB7QGxpbmsgQWN0b3J9KSB3aXRoXG4gKiA8Y29kZT5AdHlwZTwvY29kZT4gLyA8Y29kZT5AZGF0YTwvY29kZT4gc2hhcGUsIEpTT04gc2VyaWFsaXphdGlvbiwgYW5kIDxjb2RlPmlkPC9jb2RlPiA9IFNIQTI1Nig8Y29kZT50b0pTT04oKTwvY29kZT4pLlxuICogPHN0cm9uZz5EaWZmZXJlbnQgbW9kZWwgZnJvbSB7QGxpbmsgQWN0b3IjaWR9PC9zdHJvbmc+IChzb3J0ZWQgZ2VuZXJpYyBlbnZlbG9wZSkuIDxjb2RlPkVudGl0eS5UcmFuc2l0aW9uPC9jb2RlPiAoSlNPTiBQYXRjaFxuICogYmV0d2VlbiBlbnRpdHkgc3RhdGVzKSBpcyB0aGUgc3VwcG9ydGVkIG1pZ3JhdGlvbiBwYXRoIOKAlCBzZWUgPHN0cm9uZz5ERVZFTE9QRVJTLm1kPC9zdHJvbmc+ICg8ZW0+Q29uc29saWRhdGVkIHByb3RvdHlwZXM8L2VtPikuXG4gKiBAY2xhc3MgRW50aXR5XG4gKiBAZXh0ZW5kcyBFdmVudEVtaXR0ZXJcbiAqL1xuY2xhc3MgRW50aXR5IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IgKGRhdGEgPSB7fSkge1xuICAgIHN1cGVyKGRhdGEpO1xuXG4gICAgLy8gYWxsb3cgdGhpcyBlbnRpdHkgdG8gYmUgcnVuIHdpdGhvdXQgdGhlIG5ldyBrZXl3b3JkXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEVudGl0eSkpIHJldHVybiBuZXcgRW50aXR5KGRhdGEpO1xuXG4gICAgLy8gc2V0IGludGVybmFsIHByb3BlcnRpZXNcbiAgICB0aGlzLnNldHRpbmdzID0ge1xuICAgICAgdmVyYm9zaXR5OiAyIC8vIEluZm9ybWF0aW9uICYmIFdhcm5pbmdzXG4gICAgfTtcblxuICAgIC8vIGNvbmZpZ3VyZSBkZWZhdWx0c1xuICAgIHRoaXMuYWN0b3IgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kb3duc2FtcGxlKGRhdGEpKTtcbiAgICB0aGlzLmRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKTtcblxuICAgIC8vIFRPRE86IHVzZSBnZXR0ZXJzL3NldHRlcnMgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZXNlIGVsZW1lbnRzXG4gICAgLy8gcmVtb3ZlIEV2ZW50RW1pdHRlciBjcnVmdFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2V2ZW50cycsIHsgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfZXZlbnRzQ291bnQnLCB7IGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX21heExpc3RlbmVycycsIHsgZW51bWVyYWJsZTogZmFsc2UgfSk7XG5cbiAgICAvLyByZW1vdmUgbXV0YWJsZSB2YXJpYWJsZXNcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2FjdG9yJywgeyBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ21hY2hpbmUnLCB7IGVudW1lcmFibGU6IGZhbHNlIH0pO1xuXG4gICAgLy8gcmV0dXJuIGluc3RhbmNlXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQgdmVyc2lvbiAoKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBzZXQgc3RhdGUgKHN0YXRlKSB7XG4gICAgaWYgKCFzdGF0ZSkgdGhyb3cgbmV3IEVycm9yKCdTdGF0ZSBtdXN0IGJlIHByb3ZpZGVkLicpO1xuICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7XG4gIH1cblxuICBnZXQgc3RhdGUgKCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9zdGF0ZSk7XG4gIH1cblxuICBnZXQgYnVmZmVyICgpIHtcbiAgICBsZXQgZW50aXR5ID0gdGhpcztcbiAgICByZXR1cm4gZnVuY3Rpb24gYnVmZmVyICgpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShlbnRpdHkudG9KU09OKCksICd1dGY4Jyk7XG4gICAgfTtcbiAgfVxuXG4gIGdldCBpZCAoKSB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLnRvSlNPTigpO1xuICAgIGxldCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShkYXRhKS5kaWdlc3QoJ2hleCcpO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnZlcmJvc2l0eSA+PSA1KSBjb25zb2xlLmxvZygnW0ZBQlJJQzpFTlRJVFkgKHBlbmRpbmcgdXBzdHJlYW0hKV0nLCAnaGFzaDonLCBoYXNoLCAnZGF0YTonLCBkYXRhKTtcbiAgICByZXR1cm4gaGFzaDtcbiAgfVxuXG4gIHNlcmlhbGl6ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9KU09OKCk7XG4gIH1cblxuICB0b0J1ZmZlciAoKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMudG9TdHJpbmcoKSwgJ3V0ZjgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9kdWNlcyBhIHN0cmluZyBvZiBKU09OLCByZXByZXNlbnRpbmcgdGhlIGVudGl0eS5cbiAgICogQHJldHVybiB7U3RyaW5nfSBKU09OLWVuY29kZWQgb2JqZWN0LlxuICAgKi9cbiAgdG9KU09OICgpIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGhpcy5hY3RvclsnQHR5cGUnXSkge1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodGhpcy50b09iamVjdCgpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdGdW5jdGlvbic6XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2Rvd25zYW1wbGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdCdWZmZXInOlxuICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodGhpcy50b1N0cmluZygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHRvU3RyaW5nICgpIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGhpcy5hY3RvclsnQHR5cGUnXSkge1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5hY3RvclsnQGRhdGEnXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQnVmZmVyJzpcbiAgICAgICAgdm9pZCBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKHRoaXMuZGF0YSk7XG4gICAgICAgIHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgLy8gVE9ETzogd3JpdGUgdXAgbG9uZ2VyLWZvcm0gZXhwbGFuYXRpb24gYXMgdG8gd2h5IHdlIHVzZSBhbiBBcnJheSBoZXJlXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuYWN0b3JbJ0BkYXRhJ10ubWFwKHggPT4gU3RyaW5nLmZyb21DaGFyQ29kZSh4KSkuam9pbignJyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCd3YXMgc3RyaW5nIGluIGFycmF5PyBub3c6JywgcmVzdWx0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHRvT2JqZWN0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5hY3RvclsnQGRhdGEnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcyBhIHtAbGluayBCdWZmZXJ9LlxuICAgKiBAcmV0dXJuIHtCdWZmZXJ9IFNsaWNlIG9mIG1lbW9yeS5cbiAgICovXG4gIHRvUmF3ICgpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy50b0pTT04oKSwgJ3V0ZjgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSB7QGxpbmsgRmFicmljfS1sYWJlbGVkIHtAbGluayBPYmplY3R9IGZvciB0aGlzIHtAbGluayBFbnRpdHl9LlxuICAgKiBAcGFyYW0ge01peGVkfSBbaW5wdXRdIElucHV0IHRvIGRvd25zYW1wbGUuICBJZiBub3QgcHJvdmlkZWQsIGN1cnJlbnQgRW50aXR5IHdpbGwgYmUgdXNlZC4gXG4gICAqL1xuICBfZG93bnNhbXBsZSAoaW5wdXQgPSB0aGlzLmRhdGEpIHtcbiAgICBsZXQgcmVzdWx0ID0ge307XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAnQHR5cGUnOiAnU3RyaW5nJyxcbiAgICAgICAgJ0BkYXRhJzogaW5wdXQuc3BsaXQoJycpLm1hcCh4ID0+IHguY2hhckNvZGVBdCgwKSlcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgICdAdHlwZSc6ICdBcnJheScsXG4gICAgICAgICdAZGF0YSc6IGlucHV0XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgJ0B0eXBlJzogJ0J1ZmZlcicsXG4gICAgICAgICdAZGF0YSc6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKVswXVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAnQHR5cGUnOiAnRnVuY3Rpb24nLFxuICAgICAgICAgICdAZGF0YSc6IEpTT04uc3RyaW5naWZ5KGlucHV0KVxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTb21ldGhpbmcgY291bGQgbm90IGJlIGNvbnZlcnRlZDonLCBFLCBpbnB1dCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgJ0B0eXBlJzogJ0VudGl0eScsXG4gICAgICAgICAgJ0BkYXRhJzogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnB1dCkpXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChFKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NvbWV0aGluZyBjb3VsZCBub3QgYmUgY29udmVydGVkOicsIEUsIGlucHV0KTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG4vKipcbiAqIEBjbGFzc2Rlc2MgSlNPTiBQYXRjaCA8c3Ryb25nPmRpZmY8L3N0cm9uZz4gYmV0d2VlbiB0d28ge0BsaW5rIEVudGl0eX0gc25hcHNob3RzICg8Y29kZT5vcmlnaW48L2NvZGU+LFxuICogPGNvZGU+dGFyZ2V0PC9jb2RlPiwgPGNvZGU+Y2hhbmdlczwvY29kZT4pLiBCdWlsdCB2aWEge0BsaW5rIFRyYW5zaXRpb24uYmV0d2Vlbn0sIHtAbGluayBUcmFuc2l0aW9uI2Zyb21UYXJnZXR9LCBvciBtYW51YWxcbiAqIDxjb2RlPmNoYW5nZXM8L2NvZGU+OyB1c2VzIDxjb2RlPmZhc3QtanNvbi1wYXRjaDwvY29kZT4gb2JzZXJ2ZS9nZW5lcmF0ZS5cbiAqIEBtZW1iZXJvZiBFbnRpdHlcbiAqIEBjbGFzcyBUcmFuc2l0aW9uXG4gKiBAZXh0ZW5kcyBFbnRpdHlcbiAqL1xuY2xhc3MgVHJhbnNpdGlvbiBleHRlbmRzIEVudGl0eSB7XG4gIGNvbnN0cnVjdG9yIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgc3VwZXIoc2V0dGluZ3MpO1xuXG4gICAgdGhpcy5zdGF0dXMgPSAnY29uc3RydWN0aW5nJztcbiAgICB0aGlzLl9zdGF0ZSA9IHtcbiAgICAgIG9yaWdpbjogbnVsbCxcbiAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgIGNoYW5nZXM6IFtdLFxuICAgICAgcHJvZ3JhbTogW10sXG4gICAgICB3aXRuZXNzOiBudWxsXG4gICAgfTtcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9zdGF0ZSwgc2V0dGluZ3MpO1xuICAgIHRoaXMud2l0bmVzcyA9IG5ldyBXaXRuZXNzKHRoaXMuc2V0dGluZ3MpO1xuXG4gICAgdGhpcy5fc2V0T3JpZ2luKHRoaXMuc2V0dGluZ3Mub3JpZ2luKTtcbiAgICB0aGlzLl9zZXRUYXJnZXQodGhpcy5zZXR0aW5ncy50YXJnZXQpO1xuXG4gICAgdGhpcy5zdGF0dXMgPSAnY29uc3RydWN0ZWQnO1xuICB9XG5cbiAgc3RhdGljIGJldHdlZW4gKG9yaWdpbiwgdGFyZ2V0KSB7XG4gICAgY29uc3QgeCA9IG5ldyBFbnRpdHkob3JpZ2luKTtcbiAgICBjb25zdCB5ID0gbmV3IEVudGl0eSh0YXJnZXQpO1xuXG4gICAgY29uc3QgYWN0b3IgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW4pO1xuICAgIGNvbnN0IG9ic2VydmVyID0gbW9uaXRvci5vYnNlcnZlKGFjdG9yKTtcblxuICAgIE9iamVjdC5hc3NpZ24oYWN0b3IsIHRhcmdldCk7XG5cbiAgICByZXR1cm4gbmV3IFRyYW5zaXRpb24oe1xuICAgICAgb3JpZ2luOiB4LmlkLFxuICAgICAgdGFyZ2V0OiB5LmlkLFxuICAgICAgY2hhbmdlczogbW9uaXRvci5nZW5lcmF0ZShvYnNlcnZlcilcbiAgICB9KTtcbiAgfVxuXG4gIGZyb21UYXJnZXQgKHRhcmdldCkge1xuICAgIGNvbnN0IGJhc2UgPSBuZXcgRW50aXR5KCk7XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5fZGVzY3JpYmVUYXJnZXQodGFyZ2V0KTtcbiAgICByZXR1cm4gbmV3IFRyYW5zaXRpb24oe1xuICAgICAgb3JpZ2luOiBiYXNlLmlkLFxuICAgICAgdGFyZ2V0OiBlbnRpdHkuaWRcbiAgICB9KTtcbiAgfVxuXG4gIF9hcHBseVRvIChzdGF0ZSkge1xuICAgIGlmICghc3RhdGUpIHRocm93IG5ldyBFcnJvcignU3RhdGUgbXVzdCBiZSBwcm92aWRlZC4nKTtcbiAgICBpZiAoIShzdGF0ZSBpbnN0YW5jZW9mIEVudGl0eSkpIHRocm93IG5ldyBFcnJvcignU3RhdGUgbm90IG9mIGtub3duIEVudGl0eSB0eXBlLicpO1xuXG4gICAgY29uc3QgaW5zdGFuY2UgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSk7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBtb25pdG9yLm9ic2VydmUoaW5zdGFuY2UpO1xuXG4gICAgdHJ5IHtcbiAgICAgIG1vbml0b3IuYXBwbHlQYXRjaChpbnN0YW5jZSwgdGhpcy5fc3RhdGUuY2hhbmdlcyk7XG4gICAgfSBjYXRjaCAoRSkge1xuICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGFwcGx5IGNoYW5nZXM6JywgRSk7XG4gICAgfVxuXG4gICAgbW9uaXRvci5nZW5lcmF0ZShvYnNlcnZlcik7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgX3NldENoYW5nZXMgKGNoYW5nZXMpIHtcbiAgICBpZiAoIWNoYW5nZXMpIHRocm93IG5ldyBFcnJvcignTm8gY2hhbmdlcyBzcGVjaWZpZWQuJyk7XG4gICAgdGhpcy5fc3RhdGUuY2hhbmdlcyA9IGNoYW5nZXM7XG4gIH1cblxuICBfc2V0T3JpZ2luIChvcmlnaW4pIHtcbiAgICBpZiAoIW9yaWdpbikgdGhyb3cgbmV3IEVycm9yKCdObyBvcmlnaW4gc3BlY2lmaWVkLicpO1xuICAgIHRoaXMuX3N0YXRlLm9yaWdpbiA9IG9yaWdpbjtcbiAgfVxuXG4gIF9zZXRUYXJnZXQgKHRhcmdldCkge1xuICAgIGlmICghdGFyZ2V0KSB0aHJvdyBuZXcgRXJyb3IoJ05vIHRhcmdldCBzcGVjaWZpZWQuJyk7XG4gICAgdGhpcy5fc3RhdGUudGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG5cbiAgX2Rlc2NyaWJlVGFyZ2V0ICh0YXJnZXQpIHtcbiAgICBpZiAoIXRhcmdldCkgdGhyb3cgbmV3IEVycm9yKCdObyB0YXJnZXQgc3BlY2lmaWVkLicpO1xuICAgIGNvbnN0IGVudGl0eSA9IG5ldyBFbnRpdHkodGFyZ2V0KTtcbiAgICB0aGlzLl9zZXRUYXJnZXQoZW50aXR5LmlkKTtcbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG59XG5cbkVudGl0eS5UcmFuc2l0aW9uID0gVHJhbnNpdGlvbjtcblxubW9kdWxlLmV4cG9ydHMgPSBFbnRpdHk7XG5tb2R1bGUuZXhwb3J0cy5UcmFuc2l0aW9uID0gVHJhbnNpdGlvbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/entity.js\n\n}")},"./node_modules/@fabric/core/types/hash256.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\nconst { sha256 } = __webpack_require__(/*! @noble/hashes/sha2.js */ \"./node_modules/@noble/hashes/sha2.js\");\nconst fabricNativeAccel = __webpack_require__(/*! ../functions/fabricNativeAccel */ \"./node_modules/@fabric/core/functions/fabricNativeAccel.js\");\n\n/**\n * Simple interaction with 256-bit spaces.\n */\nclass Hash256 {\n /**\n * Create an instance of a `Hash256` object by calling `new Hash256()`,\n * where `settings` can be provided to supply a particular input object.\n *\n * If the `settings` is not a string, `input` must be provided.\n * @param {Object} settings\n * @param {String} settings.input Input string to map as 256-bit hash.\n */\n constructor (settings = {}) {\n if (typeof settings === 'string') settings = { input: settings };\n if (!settings.input) {\n if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) {\n settings.input = window.crypto.getRandomValues(new Uint8Array(32)).join('');\n } else {\n settings.input = (__webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\").randomBytes)(32).toString('hex');\n }\n }\n\n // Ensure the input can be cast to a buffer\n const buffer = Buffer.from(settings.input, 'utf8');\n\n // Settings\n this.settings = Object.assign({\n hash: Hash256.digest(buffer)\n }, settings);\n\n return this;\n }\n\n static compute (input) {\n if (typeof input === 'string') input = Buffer.from(input, 'utf8');\n const buffer = sha256(input);\n return Buffer.from(buffer).toString('hex');\n }\n\n /**\n * Double-SHA256 digest (Bitcoin-style). Matches C message body hash.\n * @param {String|Buffer} input Content to digest.\n * @returns {String} SHA256(SHA256(input)) as hexadecimal string.\n */\n static doubleDigest (input) {\n if (typeof input === 'string') input = Buffer.from(input, 'utf8');\n return fabricNativeAccel.doubleSha256Hex(input);\n }\n\n /**\n * Produce a SHA256 digest of some input data.\n * @param {String|Buffer} input Content to digest.\n * @returns {String} `SHA256(input)` as a hexadecimal string.\n */\n static digest (input) {\n if (typeof input !== 'string' && !(input instanceof Buffer)) {\n throw new Error(`Input to process must be of type \"String\" or \"Buffer\" to digest.`);\n }\n\n return Hash256.compute(input);\n }\n\n get hash () {\n return this.value;\n }\n\n // TODO: document `hash256.value`\n get value () {\n return Hash256.digest(this.settings.input);\n }\n\n /**\n * Reverses the bytes of the digest.\n */\n static reverse (input = '') {\n return Buffer.from(input, 'hex').reverse().toString('hex');\n }\n\n static async hash (input) {\n // Use @noble/hashes for browser compatibility (crypto.subtle is undefined in non-secure context)\n const data = typeof input === 'string' ? Buffer.from(input, 'utf8') : input;\n return Hash256.compute(data);\n }\n\n reverse (input = this.value) {\n return Hash256.reverse(input);\n }\n}\n\nmodule.exports = Hash256;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL2hhc2gyNTYuanMiLCJtYXBwaW5ncyI6IjtBQUFhOztBQUViLFFBQVEsU0FBUyxFQUFFLG1CQUFPLENBQUMsbUVBQXVCO0FBQ2xELDBCQUEwQixtQkFBTyxDQUFDLGtHQUFnQzs7QUFFbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjtBQUNBLDRCQUE0QjtBQUM1QixtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLHlCQUF5Qiw0RkFBNkI7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixNQUFNOztBQUV6QjtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkMsTUFBTTtBQUNqRDtBQUNBLFdBQVcsTUFBTTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxlQUFlO0FBQzVCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0EsMkNBQTJDLE1BQU07QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxlQUFlO0FBQzVCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0Esd0RBQXdELE1BQU07QUFDOUQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDLE1BQU07QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS90eXBlcy9oYXNoMjU2LmpzPzBjOWUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IHNoYTI1NiB9ID0gcmVxdWlyZSgnQG5vYmxlL2hhc2hlcy9zaGEyLmpzJyk7XG5jb25zdCBmYWJyaWNOYXRpdmVBY2NlbCA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNOYXRpdmVBY2NlbCcpO1xuXG4vKipcbiAqIFNpbXBsZSBpbnRlcmFjdGlvbiB3aXRoIDI1Ni1iaXQgc3BhY2VzLlxuICovXG5jbGFzcyBIYXNoMjU2IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIGBIYXNoMjU2YCBvYmplY3QgYnkgY2FsbGluZyBgbmV3IEhhc2gyNTYoKWAsXG4gICAqIHdoZXJlIGBzZXR0aW5nc2AgY2FuIGJlIHByb3ZpZGVkIHRvIHN1cHBseSBhIHBhcnRpY3VsYXIgaW5wdXQgb2JqZWN0LlxuICAgKlxuICAgKiBJZiB0aGUgYHNldHRpbmdzYCBpcyBub3QgYSBzdHJpbmcsIGBpbnB1dGAgbXVzdCBiZSBwcm92aWRlZC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzZXR0aW5ncy5pbnB1dCBJbnB1dCBzdHJpbmcgdG8gbWFwIGFzIDI1Ni1iaXQgaGFzaC5cbiAgICovXG4gIGNvbnN0cnVjdG9yIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBzZXR0aW5ncyA9PT0gJ3N0cmluZycpIHNldHRpbmdzID0geyBpbnB1dDogc2V0dGluZ3MgfTtcbiAgICBpZiAoIXNldHRpbmdzLmlucHV0KSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmNyeXB0byAmJiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgICBzZXR0aW5ncy5pbnB1dCA9IHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDMyKSkuam9pbignJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXR0aW5ncy5pbnB1dCA9IHJlcXVpcmUoJ2NyeXB0bycpLnJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoZSBpbnB1dCBjYW4gYmUgY2FzdCB0byBhIGJ1ZmZlclxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHNldHRpbmdzLmlucHV0LCAndXRmOCcpO1xuXG4gICAgLy8gU2V0dGluZ3NcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBoYXNoOiBIYXNoMjU2LmRpZ2VzdChidWZmZXIpXG4gICAgfSwgc2V0dGluZ3MpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgY29tcHV0ZSAoaW5wdXQpIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykgaW5wdXQgPSBCdWZmZXIuZnJvbShpbnB1dCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBidWZmZXIgPSBzaGEyNTYoaW5wdXQpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShidWZmZXIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3VibGUtU0hBMjU2IGRpZ2VzdCAoQml0Y29pbi1zdHlsZSkuIE1hdGNoZXMgQyBtZXNzYWdlIGJvZHkgaGFzaC5cbiAgICogQHBhcmFtIHtTdHJpbmd8QnVmZmVyfSBpbnB1dCBDb250ZW50IHRvIGRpZ2VzdC5cbiAgICogQHJldHVybnMge1N0cmluZ30gU0hBMjU2KFNIQTI1NihpbnB1dCkpIGFzIGhleGFkZWNpbWFsIHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyBkb3VibGVEaWdlc3QgKGlucHV0KSB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIGlucHV0ID0gQnVmZmVyLmZyb20oaW5wdXQsICd1dGY4Jyk7XG4gICAgcmV0dXJuIGZhYnJpY05hdGl2ZUFjY2VsLmRvdWJsZVNoYTI1NkhleChpbnB1dCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvZHVjZSBhIFNIQTI1NiBkaWdlc3Qgb2Ygc29tZSBpbnB1dCBkYXRhLlxuICAgKiBAcGFyYW0ge1N0cmluZ3xCdWZmZXJ9IGlucHV0IENvbnRlbnQgdG8gZGlnZXN0LlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBgU0hBMjU2KGlucHV0KWAgYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgZGlnZXN0IChpbnB1dCkge1xuICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmICEoaW5wdXQgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYElucHV0IHRvIHByb2Nlc3MgbXVzdCBiZSBvZiB0eXBlIFwiU3RyaW5nXCIgb3IgXCJCdWZmZXJcIiB0byBkaWdlc3QuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEhhc2gyNTYuY29tcHV0ZShpbnB1dCk7XG4gIH1cblxuICBnZXQgaGFzaCAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cblxuICAvLyBUT0RPOiBkb2N1bWVudCBgaGFzaDI1Ni52YWx1ZWBcbiAgZ2V0IHZhbHVlICgpIHtcbiAgICByZXR1cm4gSGFzaDI1Ni5kaWdlc3QodGhpcy5zZXR0aW5ncy5pbnB1dCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2ZXJzZXMgdGhlIGJ5dGVzIG9mIHRoZSBkaWdlc3QuXG4gICAqL1xuICBzdGF0aWMgcmV2ZXJzZSAoaW5wdXQgPSAnJykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCwgJ2hleCcpLnJldmVyc2UoKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgaGFzaCAoaW5wdXQpIHtcbiAgICAvLyBVc2UgQG5vYmxlL2hhc2hlcyBmb3IgYnJvd3NlciBjb21wYXRpYmlsaXR5IChjcnlwdG8uc3VidGxlIGlzIHVuZGVmaW5lZCBpbiBub24tc2VjdXJlIGNvbnRleHQpXG4gICAgY29uc3QgZGF0YSA9IHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgPyBCdWZmZXIuZnJvbShpbnB1dCwgJ3V0ZjgnKSA6IGlucHV0O1xuICAgIHJldHVybiBIYXNoMjU2LmNvbXB1dGUoZGF0YSk7XG4gIH1cblxuICByZXZlcnNlIChpbnB1dCA9IHRoaXMudmFsdWUpIHtcbiAgICByZXR1cm4gSGFzaDI1Ni5yZXZlcnNlKGlucHV0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2gyNTY7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/hash256.js\n\n}")},"./node_modules/@fabric/core/types/identity.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\nconst Actor = __webpack_require__(/*! ./actor */ \"./node_modules/@fabric/core/types/actor.js\");\nconst Bech32 = __webpack_require__(/*! ./bech32 */ \"./node_modules/@fabric/core/types/bech32.js\");\nconst Hash256 = __webpack_require__(/*! ./hash256 */ \"./node_modules/@fabric/core/types/hash256.js\");\nconst Key = __webpack_require__(/*! ./key */ \"./node_modules/@fabric/core/types/key.js\");\nconst {\n FABRIC_KEY_DERIVATION_PATH,\n fabricIdentityDerivationPath,\n assertBip32ChildIndex\n} = __webpack_require__(/*! ../constants */ \"./node_modules/@fabric/core/constants.js\");\n\n/**\n * @classdesc BIP32/BIP39 identity wrapping {@link Key}: mnemonic / xprv / passphrase.\n * Protocol identity (pubkey / Schnorr sign / Bech32 id) uses the Fabric derivation path\n * m/44'/{7777|7778}'/account'/0/index — coin type 7777 on Bitcoin\n * mainnet, 7778 on all other networks (see {@link Identity#derivation} and\n * IDENTITY.md). The HD master remains available as {@link Identity#master} /\n * {@link Identity#key} so Bitcoin funds can derive under BIP44 coin type 0 (see\n * BITCOIN_KEY_DERIVATION_PATH in constants.js\n * / Wallet) without mixing protocol identity keys with spend keys.\n * Important: this class overrides {@link Actor#id} with toString()\n * (human-facing / Bech32-style identity), not the content-addressed\n * Actor#id / preimage chain from {@link Actor#toGenericMessage}. Use\n * pubkey, pubkeyhash, or explicit hashing when you need stable bytes.\n * @class Identity\n * @extends Actor\n */\nclass Identity extends Actor {\n /**\n * Create an instance of an Identity.\n * @param {Object} [settings] Settings for the Identity.\n * @param {String} [settings.seed] BIP 39 seed phrase.\n * @param {String} [settings.xprv] Serialized BIP 32 master private key.\n * @param {String} [settings.xpub] Serialized BIP 32 master public key.\n * @param {Number} [settings.account=0] BIP 44 account index (Fabric coin type 7777/7778).\n * @param {Number} [settings.index=0] BIP 44 address index.\n * @param {String} [settings.network=regtest] Bitcoin network name; selects Fabric coin type\n * (`mainnet` → 7777, otherwise → 7778).\n * @param {String} [settings.passphrase] Passphrase for the key.\n * @returns {Identity} Instance of the identity.\n */\n constructor (settings = {}) {\n const fromKey = settings instanceof Key;\n super(fromKey ? {} : settings);\n\n this.settings = Object.assign({\n seed: null,\n xprv: null,\n passphrase: null,\n account: 0,\n index: 0,\n network: 'regtest'\n }, fromKey ? {} : settings);\n\n // Initialize master key (Bitcoin fund root). Protocol signing uses {@link #fabricKey}.\n if (fromKey) {\n this.key = settings;\n } else {\n this.key = new Key({\n seed: this.settings.seed,\n xprv: this.settings.xprv,\n passphrase: this.settings.passphrase\n });\n\n // Ensure we have a private key\n if (!this.key.xprv) {\n // Generate a new key if none provided\n this.key = new Key();\n this.settings.xprv = this.key.xprv;\n }\n }\n\n this._state = {\n content: {\n account: assertBip32ChildIndex(\n this.settings.account != null ? this.settings.account : 0,\n 'account'\n ),\n index: assertBip32ChildIndex(\n this.settings.index != null ? this.settings.index : 0,\n 'index'\n ),\n network: this.settings.network != null ? String(this.settings.network) : 'regtest'\n }\n };\n\n return this;\n }\n\n get accountID () {\n return this._state.content.account;\n }\n\n get network () {\n return this._state.content.network || 'regtest';\n }\n\n get derivation () {\n // m / purpose' / coin_type' / account' / change / address_index\n // Fabric identity: 7777 mainnet / 7778 otherwise (IDENTITY.md). Change 0 = external;\n // change 1 is reserved for revoke / internal-chain mechanics.\n return fabricIdentityDerivationPath(this.accountID, this.index, this.network);\n }\n\n get id () {\n return this.toString();\n }\n\n get index () {\n return this._state.content.index;\n }\n\n /** HD master key — use for Bitcoin BIP44 coin-type-0 fund derivation only. */\n get master () {\n return this.key;\n }\n\n /**\n * Fabric-protocol signing key at {@link Identity#derivation}.\n * When this.key is already a protocol account/signing node (or public-only),\n * derivation may be impossible — use the key as-is.\n * @returns {Key}\n */\n get fabricKey () {\n const path = this.derivation || FABRIC_KEY_DERIVATION_PATH;\n try {\n return this.key.derive(path);\n } catch (_) {\n return this.key;\n }\n }\n\n get pubkey () {\n return this.fabricKey.pubkey;\n }\n\n get pubkeyhash () {\n const input = Buffer.from(this.pubkey, 'hex');\n return Hash256.digest(input);\n }\n\n static fromString (input = '') {\n const parsed = Bech32.decode(input);\n return {\n content: parsed.content.toString('hex')\n };\n }\n\n loadAccountByID (id = 0) {\n this._state.content.account = assertBip32ChildIndex(id, 'account');\n this.commit();\n return this;\n }\n\n sign (data = Buffer.from('', 'hex')) {\n return this.fabricKey.sign(data);\n }\n\n /**\n * Retrieve the bech32m-encoded identity.\n * @returns {String} Public identity.\n */\n toString () {\n const bech32 = new Bech32({\n hrp: 'id',\n content: this.pubkeyhash\n });\n\n return bech32.toString();\n }\n\n _nextAccount () {\n ++this._state.content.account;\n this.commit();\n return this;\n }\n\n _signAsSchnorr (input) {\n if (!input) input = this.pubkeyhash;\n this._signature = this.fabricKey.sign(input);\n return this;\n }\n\n _verifyKeyIsChild (_key, _parent) {\n throw new Error('_verifyKeyIsChild is not yet implemented.');\n }\n}\n\nmodule.exports = Identity;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL2lkZW50aXR5LmpzIiwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsMkRBQVM7QUFDL0IsZUFBZSxtQkFBTyxDQUFDLDZEQUFVO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLCtEQUFXO0FBQ25DLFlBQVksbUJBQU8sQ0FBQyx1REFBTztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsRUFBRSxtQkFBTyxDQUFDLDhEQUFjOztBQUUxQjtBQUNBLDhEQUE4RCxVQUFVO0FBQ3hFO0FBQ0EsZ0JBQWdCLFVBQVU7QUFDMUIsOERBQThELDJCQUEyQjtBQUN6RixzRUFBc0UsdUJBQXVCO0FBQzdGLElBQUksb0JBQW9CO0FBQ3hCO0FBQ0E7QUFDQSxxREFBcUQsZ0JBQWdCO0FBQ3JFO0FBQ0EsNkRBQTZELDZCQUE2QjtBQUMxRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUSxpREFBaUQ7QUFDdEU7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxVQUFVO0FBQ3pCO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssZUFBZTs7QUFFcEIseUVBQXlFLGlCQUFpQjtBQUMxRjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQ0FBcUMsMEJBQTBCO0FBQy9EO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLE1BQU07QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLE1BQU07QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL2lkZW50aXR5LmpzPzk4NGQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBBY3RvciA9IHJlcXVpcmUoJy4vYWN0b3InKTtcbmNvbnN0IEJlY2gzMiA9IHJlcXVpcmUoJy4vYmVjaDMyJyk7XG5jb25zdCBIYXNoMjU2ID0gcmVxdWlyZSgnLi9oYXNoMjU2Jyk7XG5jb25zdCBLZXkgPSByZXF1aXJlKCcuL2tleScpO1xuY29uc3Qge1xuICBGQUJSSUNfS0VZX0RFUklWQVRJT05fUEFUSCxcbiAgZmFicmljSWRlbnRpdHlEZXJpdmF0aW9uUGF0aCxcbiAgYXNzZXJ0QmlwMzJDaGlsZEluZGV4XG59ID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzJyk7XG5cbi8qKlxuICogQGNsYXNzZGVzYyA8c3Ryb25nPkJJUDMyL0JJUDM5IGlkZW50aXR5PC9zdHJvbmc+IHdyYXBwaW5nIHtAbGluayBLZXl9OiBtbmVtb25pYyAvIHhwcnYgLyBwYXNzcGhyYXNlLlxuICogUHJvdG9jb2wgaWRlbnRpdHkgKHB1YmtleSAvIFNjaG5vcnIgc2lnbiAvIEJlY2gzMiBpZCkgdXNlcyB0aGUgRmFicmljIGRlcml2YXRpb24gcGF0aFxuICogPGNvZGU+bS80NCcvezc3Nzd8Nzc3OH0nL2FjY291bnQnLzAvaW5kZXg8L2NvZGU+IOKAlCBjb2luIHR5cGUgPHN0cm9uZz43Nzc3PC9zdHJvbmc+IG9uIEJpdGNvaW5cbiAqIG1haW5uZXQsIDxzdHJvbmc+Nzc3ODwvc3Ryb25nPiBvbiBhbGwgb3RoZXIgbmV0d29ya3MgKHNlZSB7QGxpbmsgSWRlbnRpdHkjZGVyaXZhdGlvbn0gYW5kXG4gKiBJREVOVElUWS5tZCkuIFRoZSBIRCA8c3Ryb25nPm1hc3Rlcjwvc3Ryb25nPiByZW1haW5zIGF2YWlsYWJsZSBhcyB7QGxpbmsgSWRlbnRpdHkjbWFzdGVyfSAvXG4gKiB7QGxpbmsgSWRlbnRpdHkja2V5fSBzbyBCaXRjb2luIGZ1bmRzIGNhbiBkZXJpdmUgdW5kZXIgQklQNDQgY29pbiB0eXBlIDxjb2RlPjA8L2NvZGU+IChzZWVcbiAqIDxjb2RlPkJJVENPSU5fS0VZX0RFUklWQVRJT05fUEFUSDwvY29kZT4gaW4gPGNvZGU+Y29uc3RhbnRzLmpzPC9jb2RlPlxuICogLyBXYWxsZXQpIHdpdGhvdXQgbWl4aW5nIHByb3RvY29sIGlkZW50aXR5IGtleXMgd2l0aCBzcGVuZCBrZXlzLlxuICogPHN0cm9uZz5JbXBvcnRhbnQ6PC9zdHJvbmc+IHRoaXMgY2xhc3Mgb3ZlcnJpZGVzIHtAbGluayBBY3RvciNpZH0gd2l0aCA8Y29kZT50b1N0cmluZygpPC9jb2RlPlxuICogKGh1bWFuLWZhY2luZyAvIEJlY2gzMi1zdHlsZSBpZGVudGl0eSksIDxzdHJvbmc+bm90PC9zdHJvbmc+IHRoZSBjb250ZW50LWFkZHJlc3NlZFxuICogPGNvZGU+QWN0b3IjaWQ8L2NvZGU+IC8gPGNvZGU+cHJlaW1hZ2U8L2NvZGU+IGNoYWluIGZyb20ge0BsaW5rIEFjdG9yI3RvR2VuZXJpY01lc3NhZ2V9LiBVc2VcbiAqIDxjb2RlPnB1YmtleTwvY29kZT4sIDxjb2RlPnB1YmtleWhhc2g8L2NvZGU+LCBvciBleHBsaWNpdCBoYXNoaW5nIHdoZW4geW91IG5lZWQgc3RhYmxlIGJ5dGVzLlxuICogQGNsYXNzIElkZW50aXR5XG4gKiBAZXh0ZW5kcyBBY3RvclxuICovXG5jbGFzcyBJZGVudGl0eSBleHRlbmRzIEFjdG9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiBJZGVudGl0eS5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtzZXR0aW5nc10gU2V0dGluZ3MgZm9yIHRoZSBJZGVudGl0eS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtzZXR0aW5ncy5zZWVkXSBCSVAgMzkgc2VlZCBwaHJhc2UuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbc2V0dGluZ3MueHBydl0gU2VyaWFsaXplZCBCSVAgMzIgbWFzdGVyIHByaXZhdGUga2V5LlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW3NldHRpbmdzLnhwdWJdIFNlcmlhbGl6ZWQgQklQIDMyIG1hc3RlciBwdWJsaWMga2V5LlxuICAgKiBAcGFyYW0ge051bWJlcn0gW3NldHRpbmdzLmFjY291bnQ9MF0gQklQIDQ0IGFjY291bnQgaW5kZXggKEZhYnJpYyBjb2luIHR5cGUgNzc3Ny83Nzc4KS5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IFtzZXR0aW5ncy5pbmRleD0wXSBCSVAgNDQgYWRkcmVzcyBpbmRleC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtzZXR0aW5ncy5uZXR3b3JrPXJlZ3Rlc3RdIEJpdGNvaW4gbmV0d29yayBuYW1lOyBzZWxlY3RzIEZhYnJpYyBjb2luIHR5cGVcbiAgICogICAoYG1haW5uZXRgIOKGkiA3Nzc3LCBvdGhlcndpc2Ug4oaSIDc3NzgpLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW3NldHRpbmdzLnBhc3NwaHJhc2VdIFBhc3NwaHJhc2UgZm9yIHRoZSBrZXkuXG4gICAqIEByZXR1cm5zIHtJZGVudGl0eX0gSW5zdGFuY2Ugb2YgdGhlIGlkZW50aXR5LlxuICAgKi9cbiAgY29uc3RydWN0b3IgKHNldHRpbmdzID0ge30pIHtcbiAgICBjb25zdCBmcm9tS2V5ID0gc2V0dGluZ3MgaW5zdGFuY2VvZiBLZXk7XG4gICAgc3VwZXIoZnJvbUtleSA/IHt9IDogc2V0dGluZ3MpO1xuXG4gICAgdGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgc2VlZDogbnVsbCxcbiAgICAgIHhwcnY6IG51bGwsXG4gICAgICBwYXNzcGhyYXNlOiBudWxsLFxuICAgICAgYWNjb3VudDogMCxcbiAgICAgIGluZGV4OiAwLFxuICAgICAgbmV0d29yazogJ3JlZ3Rlc3QnXG4gICAgfSwgZnJvbUtleSA/IHt9IDogc2V0dGluZ3MpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBtYXN0ZXIga2V5IChCaXRjb2luIGZ1bmQgcm9vdCkuIFByb3RvY29sIHNpZ25pbmcgdXNlcyB7QGxpbmsgI2ZhYnJpY0tleX0uXG4gICAgaWYgKGZyb21LZXkpIHtcbiAgICAgIHRoaXMua2V5ID0gc2V0dGluZ3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua2V5ID0gbmV3IEtleSh7XG4gICAgICAgIHNlZWQ6IHRoaXMuc2V0dGluZ3Muc2VlZCxcbiAgICAgICAgeHBydjogdGhpcy5zZXR0aW5ncy54cHJ2LFxuICAgICAgICBwYXNzcGhyYXNlOiB0aGlzLnNldHRpbmdzLnBhc3NwaHJhc2VcbiAgICAgIH0pO1xuXG4gICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHByaXZhdGUga2V5XG4gICAgICBpZiAoIXRoaXMua2V5LnhwcnYpIHtcbiAgICAgICAgLy8gR2VuZXJhdGUgYSBuZXcga2V5IGlmIG5vbmUgcHJvdmlkZWRcbiAgICAgICAgdGhpcy5rZXkgPSBuZXcgS2V5KCk7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MueHBydiA9IHRoaXMua2V5LnhwcnY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUgPSB7XG4gICAgICBjb250ZW50OiB7XG4gICAgICAgIGFjY291bnQ6IGFzc2VydEJpcDMyQ2hpbGRJbmRleChcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmFjY291bnQgIT0gbnVsbCA/IHRoaXMuc2V0dGluZ3MuYWNjb3VudCA6IDAsXG4gICAgICAgICAgJ2FjY291bnQnXG4gICAgICAgICksXG4gICAgICAgIGluZGV4OiBhc3NlcnRCaXAzMkNoaWxkSW5kZXgoXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5pbmRleCAhPSBudWxsID8gdGhpcy5zZXR0aW5ncy5pbmRleCA6IDAsXG4gICAgICAgICAgJ2luZGV4J1xuICAgICAgICApLFxuICAgICAgICBuZXR3b3JrOiB0aGlzLnNldHRpbmdzLm5ldHdvcmsgIT0gbnVsbCA/IFN0cmluZyh0aGlzLnNldHRpbmdzLm5ldHdvcmspIDogJ3JlZ3Rlc3QnXG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0IGFjY291bnRJRCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlLmNvbnRlbnQuYWNjb3VudDtcbiAgfVxuXG4gIGdldCBuZXR3b3JrICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUuY29udGVudC5uZXR3b3JrIHx8ICdyZWd0ZXN0JztcbiAgfVxuXG4gIGdldCBkZXJpdmF0aW9uICgpIHtcbiAgICAvLyBtIC8gcHVycG9zZScgLyBjb2luX3R5cGUnIC8gYWNjb3VudCcgLyBjaGFuZ2UgLyBhZGRyZXNzX2luZGV4XG4gICAgLy8gRmFicmljIGlkZW50aXR5OiA3Nzc3IG1haW5uZXQgLyA3Nzc4IG90aGVyd2lzZSAoSURFTlRJVFkubWQpLiBDaGFuZ2UgMCA9IGV4dGVybmFsO1xuICAgIC8vIGNoYW5nZSAxIGlzIHJlc2VydmVkIGZvciByZXZva2UgLyBpbnRlcm5hbC1jaGFpbiBtZWNoYW5pY3MuXG4gICAgcmV0dXJuIGZhYnJpY0lkZW50aXR5RGVyaXZhdGlvblBhdGgodGhpcy5hY2NvdW50SUQsIHRoaXMuaW5kZXgsIHRoaXMubmV0d29yayk7XG4gIH1cblxuICBnZXQgaWQgKCkge1xuICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXQgaW5kZXggKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZS5jb250ZW50LmluZGV4O1xuICB9XG5cbiAgLyoqIEhEIG1hc3RlciBrZXkg4oCUIHVzZSBmb3IgQml0Y29pbiBCSVA0NCBjb2luLXR5cGUtMCBmdW5kIGRlcml2YXRpb24gb25seS4gKi9cbiAgZ2V0IG1hc3RlciAoKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIEZhYnJpYy1wcm90b2NvbCBzaWduaW5nIGtleSBhdCB7QGxpbmsgSWRlbnRpdHkjZGVyaXZhdGlvbn0uXG4gICAqIFdoZW4gdGhpcy5rZXkgaXMgYWxyZWFkeSBhIHByb3RvY29sIGFjY291bnQvc2lnbmluZyBub2RlIChvciBwdWJsaWMtb25seSksXG4gICAqIGRlcml2YXRpb24gbWF5IGJlIGltcG9zc2libGUg4oCUIHVzZSB0aGUga2V5IGFzLWlzLlxuICAgKiBAcmV0dXJucyB7S2V5fVxuICAgKi9cbiAgZ2V0IGZhYnJpY0tleSAoKSB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuZGVyaXZhdGlvbiB8fCBGQUJSSUNfS0VZX0RFUklWQVRJT05fUEFUSDtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMua2V5LmRlcml2ZShwYXRoKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm4gdGhpcy5rZXk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHB1YmtleSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmFicmljS2V5LnB1YmtleTtcbiAgfVxuXG4gIGdldCBwdWJrZXloYXNoICgpIHtcbiAgICBjb25zdCBpbnB1dCA9IEJ1ZmZlci5mcm9tKHRoaXMucHVia2V5LCAnaGV4Jyk7XG4gICAgcmV0dXJuIEhhc2gyNTYuZGlnZXN0KGlucHV0KTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RyaW5nIChpbnB1dCA9ICcnKSB7XG4gICAgY29uc3QgcGFyc2VkID0gQmVjaDMyLmRlY29kZShpbnB1dCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IHBhcnNlZC5jb250ZW50LnRvU3RyaW5nKCdoZXgnKVxuICAgIH07XG4gIH1cblxuICBsb2FkQWNjb3VudEJ5SUQgKGlkID0gMCkge1xuICAgIHRoaXMuX3N0YXRlLmNvbnRlbnQuYWNjb3VudCA9IGFzc2VydEJpcDMyQ2hpbGRJbmRleChpZCwgJ2FjY291bnQnKTtcbiAgICB0aGlzLmNvbW1pdCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2lnbiAoZGF0YSA9IEJ1ZmZlci5mcm9tKCcnLCAnaGV4JykpIHtcbiAgICByZXR1cm4gdGhpcy5mYWJyaWNLZXkuc2lnbihkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgYmVjaDMybS1lbmNvZGVkIGlkZW50aXR5LlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBQdWJsaWMgaWRlbnRpdHkuXG4gICAqL1xuICB0b1N0cmluZyAoKSB7XG4gICAgY29uc3QgYmVjaDMyID0gbmV3IEJlY2gzMih7XG4gICAgICBocnA6ICdpZCcsXG4gICAgICBjb250ZW50OiB0aGlzLnB1YmtleWhhc2hcbiAgICB9KTtcblxuICAgIHJldHVybiBiZWNoMzIudG9TdHJpbmcoKTtcbiAgfVxuXG4gIF9uZXh0QWNjb3VudCAoKSB7XG4gICAgKyt0aGlzLl9zdGF0ZS5jb250ZW50LmFjY291bnQ7XG4gICAgdGhpcy5jb21taXQoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9zaWduQXNTY2hub3JyIChpbnB1dCkge1xuICAgIGlmICghaW5wdXQpIGlucHV0ID0gdGhpcy5wdWJrZXloYXNoO1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRoaXMuZmFicmljS2V5LnNpZ24oaW5wdXQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX3ZlcmlmeUtleUlzQ2hpbGQgKF9rZXksIF9wYXJlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ192ZXJpZnlLZXlJc0NoaWxkIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBJZGVudGl0eTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/identity.js\n\n}")},"./node_modules/@fabric/core/types/key.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n/**\n * @fabric/core/types/key\n * Cryptographic key generation, derivation, signing, and encryption.\n *\n * @signers\n * - Eric Martindale \n */\n\n\n// Constants\nconst {\n FABRIC_KEY_DERIVATION_PATH,\n BECH32M_CHARSET\n} = __webpack_require__(/*! ../constants */ \"./node_modules/@fabric/core/constants.js\");\n\n// Node Modules\nconst crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nconst EventEmitter = (__webpack_require__(/*! events */ \"./node_modules/events/events.js\").EventEmitter);\nconst { sha256 } = __webpack_require__(/*! @noble/hashes/sha2.js */ \"./node_modules/@noble/hashes/sha2.js\");\n\n/**\n * Deterministic bit stream for {@link Key#bit}. Replaces the `arbitrary` npm package, whose published\n * `main` is a browserify bundle (`docs/dist/index.js`) that breaks under webpack (nested `require`).\n * Internal helper — omitted from published API / dev docs.\n * @ignore\n */\nfunction createKeyBitGenerator (seedQ) {\n const seed = Buffer.alloc(4);\n seed.writeUInt32BE(seedQ >>> 0, 0);\n let counter = 0;\n let pool = Buffer.from(sha256(Buffer.concat([\n Buffer.from('fabric/key/bitgen/v1', 'utf8'),\n seed\n ])));\n let offset = 0;\n\n return {\n next: {\n bits (n) {\n let out = 0;\n for (let i = 0; i < n; i++) {\n if ((offset >> 3) >= pool.length) {\n const tail = Buffer.alloc(4);\n tail.writeUInt32BE(counter >>> 0, 0);\n counter = (counter + 1) >>> 0;\n pool = Buffer.from(sha256(Buffer.concat([pool, tail])));\n offset = 0;\n }\n const byteIndex = offset >> 3;\n const bitInByte = offset & 7;\n offset++;\n const bit = (pool[byteIndex] >> (7 - bitInByte)) & 1;\n out = (out << 1) | bit;\n }\n return out;\n }\n }\n };\n}\n\n// Dependencies\n// TODO: remove all external dependencies\nconst BN = __webpack_require__(/*! bn.js */ \"./node_modules/bn.js/lib/bn.js\");\nconst ecc = __webpack_require__(/*! ./ecc */ \"./node_modules/@fabric/core/types/ecc.js\");\nconst { secp256k1, schnorr: nobleSchnorr } = __webpack_require__(/*! @noble/curves/secp256k1.js */ \"./node_modules/@noble/curves/secp256k1.js\");\nconst SecpPoint = secp256k1.ProjectivePoint || secp256k1.Point;\n\nfunction privateKeyToBuffer (privkey) {\n if (Buffer.isBuffer(privkey)) return privkey;\n if (BN.isBN(privkey)) return Buffer.from(privkey.toString(16).padStart(64, '0'), 'hex');\n if (typeof privkey === 'string') {\n if (!/^[0-9a-fA-F]{1,64}$/.test(privkey)) throw new Error('Invalid private key format');\n return Buffer.from(privkey.padStart(64, '0'), 'hex');\n }\n if (ArrayBuffer.isView(privkey) && !(privkey instanceof DataView) && privkey.byteLength === 32) {\n // Uint8Array and other typed-array views from upgraded deps (bip32/ecpair).\n return Buffer.from(privkey);\n }\n if (Array.isArray(privkey) && privkey.length === 32 && privkey.every((x) => Number.isInteger(x) && x >= 0 && x <= 255)) {\n return Buffer.from(privkey);\n }\n throw new Error('Invalid private key format');\n}\n\nfunction secpPointFromPublicKey (pubkey) {\n const bytes = Buffer.isBuffer(pubkey) ? pubkey : Buffer.from(pubkey);\n // noble-curves v1: ProjectivePoint.fromHex(bytes)\n if (secp256k1.ProjectivePoint && typeof secp256k1.ProjectivePoint.fromHex === 'function') {\n return secp256k1.ProjectivePoint.fromHex(bytes);\n }\n // noble-curves v2: Point.fromBytes(bytes)\n if (SecpPoint && typeof SecpPoint.fromBytes === 'function') {\n return SecpPoint.fromBytes(bytes);\n }\n // Fallback: v2 Point.fromHex expects a hex string\n if (SecpPoint && typeof SecpPoint.fromHex === 'function') {\n return SecpPoint.fromHex(bytes.toString('hex'));\n }\n throw new Error('Unsupported secp256k1 Point API');\n}\n\nfunction secpPointFromPrivateKey (privkey) {\n const bytes = privateKeyToBuffer(privkey);\n // noble-curves v1\n if (secp256k1.ProjectivePoint && typeof secp256k1.ProjectivePoint.fromPrivateKey === 'function') {\n return secp256k1.ProjectivePoint.fromPrivateKey(bytes);\n }\n // noble-curves v2: compute pubkey then parse into Point\n const pub = secp256k1.getPublicKey(bytes, false);\n return secpPointFromPublicKey(pub);\n}\n\nfunction secpPointToRawBytes (point, compressed = true) {\n if (!point) throw new Error('Missing secp256k1 point');\n if (typeof point.toRawBytes === 'function') return point.toRawBytes(compressed);\n if (typeof point.toBytes === 'function') {\n if (compressed) return point.toBytes(); // v2: compressed SEC1 (33 bytes)\n if (typeof point.toAffine !== 'function') throw new Error('Point.toAffine() unavailable for uncompressed encoding');\n const affine = point.toAffine();\n const x = Buffer.from(affine.x.toString(16).padStart(64, '0'), 'hex');\n const y = Buffer.from(affine.y.toString(16).padStart(64, '0'), 'hex');\n return Buffer.concat([Buffer.from([0x04]), x, y]);\n }\n throw new Error('Unsupported secp256k1 Point API');\n}\n\nconst { encodeCheck, decodeCheck } = __webpack_require__(/*! ../functions/base58 */ \"./node_modules/@fabric/core/functions/base58.js\");\nconst bip39 = __webpack_require__(/*! ../functions/bip39 */ \"./node_modules/@fabric/core/functions/bip39.js\");\nconst bip32Module = __webpack_require__(/*! ../functions/bip32 */ \"./node_modules/@fabric/core/functions/bip32.js\");\nconst BIP32 = bip32Module.default;\nconst BIP32_DEFAULT_NETWORK = bip32Module.DEFAULT_NETWORK;\nconst { payments } = __webpack_require__(/*! bitcoinjs-lib */ \"./node_modules/bitcoinjs-lib/src/index.js\");\n\n// Fabric Dependencies\nconst Actor = __webpack_require__(/*! ./actor */ \"./node_modules/@fabric/core/types/actor.js\");\nconst Hash256 = __webpack_require__(/*! ./hash256 */ \"./node_modules/@fabric/core/types/hash256.js\");\n\n// NOTE: see also @fabric/passport\n// expect a bech32m identifier using prefix \"id\"\n\nfunction bip32NetworkFromKeySettings (settings) {\n const name = settings.network === 'regtest' ? 'regtest' : settings.network;\n const raw = settings.networks[name] || settings.networks.mainnet;\n return {\n messagePrefix: raw.messagePrefix,\n bech32: raw.bech32,\n bip32: raw.bip32,\n pubKeyHash: raw.pubKeyHash,\n scriptHash: raw.scriptHash,\n wif: raw.wif\n };\n}\n\n/**\n * Represents a cryptographic key.\n */\nclass Key extends EventEmitter {\n /**\n * Create an instance of a Fabric Key, either restoring from some known\n * values or from prior knowledge. For instance, you can call `new Key()`\n * to create a fresh keypair, or `new Key({ public: 'deadbeef...' })` to\n * create it from a known public key.\n * @param {Object} [settings] Initialization for the key.\n * @param {String} [settings.network] Network string.\n * @param {String} [settings.seed] Mnemonic seed for initializing the key.\n * @param {String} [settings.public] Public key in hex.\n * @param {String} [settings.private] Private key in hex.\n * @param {String} [settings.wif] WIF-encoded private key.\n * @param {String} [settings.purpose=44] Constrains derivations to this space.\n */\n constructor (input = {}) {\n super(input);\n\n // Settings\n this.settings = Object.assign({\n debug: false,\n network: 'main',\n curve: 'secp256k1',\n derivation: FABRIC_KEY_DERIVATION_PATH,\n mode: 'aes-256-cbc',\n prefix: '00',\n public: null,\n private: null,\n wif: null,\n purpose: 44,\n account: 0,\n bits: 256,\n hd: true,\n seed: null,\n passphrase: '',\n password: null,\n index: 0,\n path: null,\n cipher: {\n iv: {\n size: 16\n }\n },\n state: {\n status: 'sensitive'\n },\n witness: true,\n networks: {\n mainnet: {\n messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n bech32: 'bc',\n bip32: {\n public: 0x0488b21e,\n private: 0x0488ade4\n },\n pubKeyHash: 0x00,\n scriptHash: 0x05,\n wif: 0x80\n },\n testnet: {\n messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n bech32: 'tb',\n bip32: {\n public: 0x043587cf,\n private: 0x04358394\n },\n pubKeyHash: 0x6f,\n scriptHash: 0xc4,\n wif: 0xef\n },\n regtest: {\n messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n bech32: 'bcrt',\n bip32: {\n public: 0x043587cf,\n private: 0x04358394\n },\n pubKeyHash: 0x6f,\n scriptHash: 0xc4,\n wif: 0xef\n }\n }\n }, input);\n\n this.bip32 = new BIP32(ecc);\n this._bech32mCharset = BECH32M_CHARSET;\n\n this.clock = 0;\n this.master = null;\n this.private = null;\n this.public = null;\n this._pubUncompressed = false; // set true for legacy uncompressed WIF\n this._state = null; // Initialize as null to defer state updates\n\n if (this.settings.mnemonic) {\n this._mode = 'FROM_MNEMONIC';\n } else if (this.settings.seed) {\n this._mode = 'FROM_SEED';\n } else if (this.settings.wif) {\n this._mode = 'FROM_WIF';\n } else if (this.settings.private) {\n this._mode = 'FROM_PRIVATE_KEY';\n } else if (this.settings.xprv) {\n this._mode = 'FROM_XPRV';\n } else if (this.settings.xpub) {\n this._mode = 'FROM_XPUB';\n } else if (this.settings.pubkey || this.settings.public) {\n this._mode = 'FROM_PUBLIC_KEY';\n } else {\n this._mode = 'FROM_RANDOM';\n }\n\n let seed = null;\n let root = null;\n\n switch (this._mode) {\n case 'FROM_MNEMONIC':\n seed = bip39.mnemonicToSeedSync(this.settings.mnemonic, this.settings.passphrase);\n root = this.bip32.fromSeed(seed, bip32NetworkFromKeySettings(this.settings));\n this.seed = this.settings.mnemonic;\n this.xprv = root.toBase58();\n this.xpub = root.neutered().toBase58();\n this.master = root;\n this._point = secpPointFromPrivateKey(root.privateKey);\n this.status = 'seeded';\n break;\n case 'FROM_SEED':\n // TODO: allow setting of raw seed (deprecates passing a mnemonic in the `seed` property)\n seed = bip39.mnemonicToSeedSync(this.settings.seed, this.settings.passphrase);\n root = this.bip32.fromSeed(seed, bip32NetworkFromKeySettings(this.settings));\n this.seed = this.settings.seed;\n this.xprv = root.toBase58();\n this.xpub = root.neutered().toBase58();\n this.master = root;\n this._point = secpPointFromPrivateKey(root.privateKey);\n break;\n case 'FROM_WIF':\n const decoded = decodeCheck(this.settings.wif);\n const privateKey = decoded.slice(1, 33);\n const isCompressed = decoded.length === 34 && decoded[33] === 0x01;\n this._point = secpPointFromPrivateKey(privateKey);\n this.private = Buffer.isBuffer(privateKey) ? privateKey : Buffer.from(privateKey);\n if (!isCompressed) this._pubUncompressed = true;\n break;\n case 'FROM_XPRV':\n this.master = this.bip32.fromBase58(this.settings.xprv);\n this.xprv = this.master.toBase58();\n this.xpub = this.master.neutered().toBase58();\n this._point = secpPointFromPrivateKey(this.master.privateKey);\n break;\n case 'FROM_XPUB':\n this.master = this.bip32.fromBase58(this.settings.xpub);\n this.xpub = this.master.neutered().toBase58();\n this._point = secpPointFromPublicKey(this.master.publicKey);\n break;\n case 'FROM_PRIVATE_KEY':\n // Key is private\n const provision = (this.settings.private instanceof Buffer) ? this.settings.private : Buffer.from(this.settings.private, 'hex');\n this._point = secpPointFromPrivateKey(provision);\n this.private = provision;\n break;\n case 'FROM_PUBLIC_KEY':\n const pubkey = this.settings.pubkey || this.settings.public;\n // Key is only public\n const pubkeyBuf = (pubkey instanceof Buffer) ? pubkey : Buffer.from(pubkey, 'hex');\n this._point = secpPointFromPublicKey(pubkeyBuf);\n break;\n case 'FROM_RANDOM':\n this.mnemonic = bip39.generateMnemonic();\n // TODO: set property `seed` as the actual derived seed, not the seed phrase\n const interim = bip39.mnemonicToSeedSync(this.mnemonic);\n this.master = this.bip32.fromSeed(interim, bip32NetworkFromKeySettings(this.settings));\n this.xprv = this.master.toBase58();\n this.xpub = this.master.neutered().toBase58();\n this._point = secpPointFromPrivateKey(this.master.privateKey);\n break;\n }\n\n // Read the pair (for modes that use master, set private from master)\n if (!this.private && this.master && this.master.privateKey) {\n this.private = privateKeyToBuffer(this.master.privateKey);\n }\n // Adapt noble-curves point to the minimal interface used elsewhere.\n this.public = {\n encodeCompressed: (e) => Buffer.from(secpPointToRawBytes(this._point, !this._pubUncompressed)).toString(e || 'hex'),\n encode: (e) => Buffer.from(secpPointToRawBytes(this._point, false)).toString(e || 'hex')\n };\n // Adapter for Session/Token: elliptic-style getPrivate/getPublic\n this.keypair = {\n getPrivate: (enc) => {\n if (!this.private) return null;\n const hex = Buffer.isBuffer(this.private) ? this.private.toString('hex') : String(this.private);\n if (enc === 'bytes') return Buffer.isBuffer(this.private) ? this.private : Buffer.from(hex, 'hex');\n if (enc === 'hex') return hex;\n return new BN(hex, 16);\n },\n getPublic: (compressed, enc) => {\n const bytes = secpPointToRawBytes(this._point, compressed !== false);\n return (enc || 'hex') === 'hex' ? Buffer.from(bytes).toString('hex') : Buffer.from(bytes);\n }\n };\n\n // TODO: determine if this makes sense / needs to be private\n this.privkey = (this.private) ? this.private.toString() : null;\n\n // Configure Deterministic Random\n // WARNING: this will currently loop after 2^32 bits\n // TODO: evaluate compression when treating seed phrase as ascii\n // TODO: consider using sha256(masterprivkey) or sha256(sha256(...))?\n this._starseed = Hash256.digest(this.pubkeyhash).toString('hex');\n this.q = parseInt(this._starseed.substring(0, 4), 16);\n this.generator = createKeyBitGenerator(this.q);\n\n this['@data'] = {\n type: 'Key',\n public: this.pubkey,\n address: this.address\n };\n\n this._state = {\n pubkey: this.pubkey,\n content: this.settings.state\n };\n\n // Object.defineProperty(this, 'keyring', { enumerable: false });\n Object.defineProperty(this, '_point', { enumerable: false }); // noble ProjectivePoint has BigInt; hide from JSON.stringify\n Object.defineProperty(this, 'keypair', { enumerable: false });\n Object.defineProperty(this, 'private', { enumerable: false });\n\n return this;\n }\n\n /**\n * Create a Key instance from a WIF-encoded private key.\n * @param {String} wif - The WIF-encoded private key\n * @param {Object} [options] - Additional options for key creation\n * @returns {Key} A new Key instance\n */\n static fromWIF (wif, options = {}) {\n return new Key({ ...options, wif });\n }\n\n static Mnemonic (seed) {\n if (!seed) seed = crypto.randomBytes(32);\n const mnemonic = bip39.entropyToMnemonic(seed);\n const seedBuffer = bip39.mnemonicToSeedSync(mnemonic);\n const bip32 = new BIP32(ecc);\n const master = bip32.fromSeed(seedBuffer, BIP32_DEFAULT_NETWORK);\n const key = new Key();\n key.seed = mnemonic;\n key.private = master.privateKey.toString('hex');\n key.public = master.publicKey.toString('hex');\n key.chainCode = master.chainCode.toString('hex');\n key.depth = master.depth;\n key.index = master.index;\n key.parentFingerprint = master.parentFingerprint;\n key.fingerprint = master.fingerprint;\n key.keypair = master;\n return key;\n }\n\n get account () {\n return this.settings.account;\n }\n\n get id () {\n return this.pubkeyhash;\n }\n\n /**\n * @deprecated Per-message IVs are generated in {@link Key#encrypt}. Do not rely on this getter.\n */\n get iv () {\n return crypto.randomBytes(16);\n }\n\n get path () {\n return this.settings.path;\n }\n\n get purpose () {\n return this.settings.purpose;\n }\n\n bit () {\n return this.generator.next.bits(1);\n }\n\n /* export () {\n return {\n addresses: {\n p2wkh: null,\n p2tr: null\n },\n private: this.keypair.private,\n public: this.keypair.public\n };\n } */\n\n deriveAccountReceive (index) {\n return this.deriveAddress(index);\n }\n\n deriveAddress (index = 0, change = 0, type = 'p2pkh') {\n const key = this.deriveKeyPair(index, change);\n const network = this.settings.network === 'regtest' ? this.settings.networks.testnet : this.settings.networks[this.settings.network];\n\n switch (type) {\n case 'p2pkh':\n return {\n address: payments.p2pkh({\n pubkey: Buffer.from(key.publicKey, 'hex'),\n network: network\n }).address,\n publicKey: key.publicKey,\n privateKey: key.privateKey\n };\n case 'p2wpkh':\n return {\n address: payments.p2wpkh({\n pubkey: Buffer.from(key.publicKey, 'hex'),\n network: network\n }).address,\n publicKey: key.publicKey,\n privateKey: key.privateKey\n };\n case 'p2tr':\n // For p2tr, we need to use the x-only pubkey (first 32 bytes after the prefix)\n const pubkeyBuffer = Buffer.from(key.publicKey, 'hex');\n const xOnlyPubkey = pubkeyBuffer.slice(1, 33); // Remove prefix byte and take next 32 bytes\n\n // Generate taproot address using bech32m encoding\n const commitHash = crypto.createHash('sha256')\n .update(Buffer.concat([xOnlyPubkey, Buffer.alloc(32)]))\n .digest();\n const tweakResult = ecc.xOnlyPointAddTweak(xOnlyPubkey, commitHash);\n if (!tweakResult) throw new Error('Invalid tweak');\n\n // Use the correct network prefix for bech32m\n let hrp;\n switch (this.settings.network) {\n case 'main':\n hrp = 'bc';\n break;\n case 'testnet':\n hrp = 'tb';\n break;\n case 'regtest':\n hrp = 'bcrt';\n break;\n default:\n throw new Error(`Unsupported network: ${this.settings.network}`);\n }\n\n const address = this._encodeBech32m(tweakResult.xOnlyPubkey, hrp);\n\n return {\n address: address,\n publicKey: key.publicKey,\n privateKey: key.privateKey\n };\n default:\n throw new Error(`Unsupported address type: ${type}`);\n }\n }\n\n _encodeBech32m (data, hrp) {\n // Witness version 1 for P2TR\n const version = [1];\n // Convert witness program to 5-bit words\n const program = this._convertBits(Array.from(data), 8, 5, true);\n if (!program) throw new Error('Invalid program');\n\n // Combine version and program\n const words = version.concat(program);\n\n // Generate checksum\n const chk = this._bech32mCreateChecksum(hrp, words);\n\n // Return final address\n return hrp + '1' + words.map(x => this._bech32mCharset[x]).join('') + chk;\n }\n\n _convertBits (data, fromBits, toBits, pad) {\n let acc = 0;\n let bits = 0;\n const maxv = (1 << toBits) - 1;\n const result = [];\n\n for (let i = 0; i < data.length; i++) {\n const value = data[i];\n if (value < 0 || value >> fromBits !== 0) {\n return null;\n }\n acc = (acc << fromBits) | value;\n bits += fromBits;\n while (bits >= toBits) {\n bits -= toBits;\n result.push((acc >> bits) & maxv);\n }\n }\n\n if (pad) {\n if (bits > 0) {\n result.push((acc << (toBits - bits)) & maxv);\n }\n } else if (bits >= fromBits || ((acc << (toBits - bits)) & maxv)) {\n return null;\n }\n\n return result;\n }\n\n _bech32mCreateChecksum (hrp, data) {\n const values = this._bech32mExpandHrp(hrp).concat(data).concat([0, 0, 0, 0, 0, 0]);\n const polymod = this._bech32mPolymod(values) ^ 0x2bc830a3;\n const ret = [];\n for (let i = 0; i < 6; i++) {\n ret.push((polymod >> 5 * (5 - i)) & 31);\n }\n return ret.map(x => this._bech32mCharset[x]).join('');\n }\n\n _bech32mExpandHrp (hrp) {\n const ret = [];\n for (let i = 0; i < hrp.length; i++) {\n ret.push(hrp.charCodeAt(i) >> 5);\n }\n ret.push(0);\n for (let i = 0; i < hrp.length; i++) {\n ret.push(hrp.charCodeAt(i) & 31);\n }\n return ret;\n }\n\n _bech32mPolymod (values) {\n const GEN = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\n let chk = 1;\n for (let i = 0; i < values.length; i++) {\n const top = chk >> 25;\n chk = ((chk & 0x1ffffff) << 5) ^ values[i];\n for (let j = 0; j < 5; j++) {\n if ((top >> j) & 1) {\n chk ^= GEN[j];\n }\n }\n }\n return chk;\n }\n\n deriveKeyPair (addressID = 0, change = 0) {\n const path = `m/${this.purpose}'/0'/${this.account}'/${change}/${addressID}`;\n const derived = this.master.derivePath(path);\n const pubBytes = secp256k1.getPublicKey(derived.privateKey, true);\n return {\n privateKey: derived.privateKey.toString('hex'),\n publicKey: Buffer.from(pubBytes).toString('hex')\n };\n }\n\n encrypt (value) {\n if (!this.private) {\n if (this.settings.debug) console.error('[FABRIC:KEY]', 'Cannot encrypt without private key');\n return null;\n }\n\n try {\n const ivbuff = crypto.randomBytes(16);\n // Derive a 32-byte key from the private key using SHA-256\n const key = crypto.createHash('sha256')\n .update(this.private.toString('hex'))\n .digest();\n const cipher = crypto.createCipheriv(this.settings.mode, key, ivbuff);\n let encrypted = cipher.update(value, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n return ivbuff.toString('hex') + ':' + encrypted;\n } catch {\n if (this.settings.debug) console.error('[FABRIC:KEY]', 'Encryption failed');\n return null;\n }\n }\n\n decrypt (text) {\n if (!text) return null;\n if (!this.private) {\n if (this.settings.debug) console.error('[FABRIC:KEY]', 'Cannot decrypt without private key');\n return null;\n }\n if (text instanceof Buffer) text = text.toString('utf8');\n\n try {\n if (typeof text !== 'string' || !text.includes(':')) return null;\n const parts = text.split(':');\n const ivHex = parts.shift();\n if (!/^[0-9a-fA-F]{32}$/.test(ivHex || '')) return null;\n const blobHex = parts.join(':');\n if (!blobHex || !/^[0-9a-fA-F]+$/.test(blobHex)) return null;\n\n const iv = Buffer.from(ivHex, 'hex');\n const blob = Buffer.from(parts.join(':'), 'hex');\n // Use the same key derivation as encrypt\n const key = crypto.createHash('sha256')\n .update(this.private.toString('hex'))\n .digest();\n const decipher = crypto.createDecipheriv(this.settings.mode, key, iv);\n let decrypted = decipher.update(blob, 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n return decrypted;\n } catch {\n if (this.settings.debug) console.error('[FABRIC:KEY]', 'Decryption failed');\n return null;\n }\n }\n\n _sign (msg) {\n if (typeof msg !== 'string') msg = JSON.stringify(msg);\n return this.signSchnorr(msg);\n }\n\n _verify (msg, sig) {\n return this.verifySchnorr(msg, sig);\n }\n\n /**\n * Verify a message's signature.\n * @param {Buffer|String} msg - The message that was signed\n * @param {Buffer|String} sig - The signature to verify\n * @returns {Boolean} Whether the signature is valid\n */\n verify (msg, sig) {\n return this._verify(msg, sig);\n }\n\n /**\n * Signs a message using Schnorr signatures (BIP340).\n * @param {Buffer|String} msg - The message to sign\n * @returns {Buffer} The signature\n */\n signSchnorr (msg) {\n // console.debug('signing schnorr:', msg, this.settings);\n if (!this.private) throw new Error('Cannot sign without private key');\n\n // Convert message to Buffer if it's a string\n const messageBuffer = Buffer.isBuffer(msg) ? msg : Buffer.from(msg);\n\n // Create message hash\n const messageHash = crypto.createHash('sha256').update(messageBuffer).digest();\n\n // Get private key as 32-byte buffer\n const privateKeyBuffer = privateKeyToBuffer(this.private);\n\n // Sign using noble-curves Schnorr (BIP340). Zero auxRand for deterministic signatures.\n const signature = nobleSchnorr.sign(messageHash, privateKeyBuffer, Buffer.alloc(32));\n\n // Ensure we return a Buffer\n return Buffer.isBuffer(signature) ? signature : Buffer.from(signature);\n }\n\n /**\n * Signs a pre-computed hash using Schnorr signatures (BIP340).\n * This is useful when the message has already been hashed (e.g., with a tagged hash).\n * @param {Buffer} messageHash - The pre-computed message hash (32 bytes)\n * @returns {Buffer} The signature (64 bytes)\n */\n signSchnorrHash (messageHash) {\n if (!this.private) throw new Error('Cannot sign without private key');\n // bitcoinjs-lib 7 crypto helpers return Uint8Array; accept Buffer or Uint8Array.\n const hash = Buffer.isBuffer(messageHash)\n ? messageHash\n : (messageHash instanceof Uint8Array ? Buffer.from(messageHash) : null);\n if (!hash || hash.length !== 32) {\n throw new Error('Message hash must be a 32-byte Buffer');\n }\n\n // Get private key as 32-byte buffer\n const privateKeyBuffer = privateKeyToBuffer(this.private);\n\n // Sign using noble-curves Schnorr (BIP340). Zero auxRand for deterministic signatures.\n const signature = nobleSchnorr.sign(hash, privateKeyBuffer, Buffer.alloc(32));\n\n // Ensure we return a Buffer\n return Buffer.isBuffer(signature) ? signature : Buffer.from(signature);\n }\n\n /**\n * Verifies a Schnorr signature (BIP340).\n * @param {Buffer|String} msg - The message that was signed\n * @param {Buffer} sig - The signature to verify\n * @returns {Boolean} Whether the signature is valid\n */\n verifySchnorr (msg, sig) {\n // Convert message to Buffer if it's a string\n const messageBuffer = Buffer.isBuffer(msg) ? msg : Buffer.from(msg);\n\n // Create message hash\n const messageHash = crypto.createHash('sha256').update(messageBuffer).digest();\n\n // Get x-only public key (32 bytes) from compressed public key (33 bytes)\n // For Schnorr, we only need the x coordinate (first 32 bytes after the prefix)\n const compressedPubkey = Buffer.from(this.public.encodeCompressed('hex'), 'hex');\n const xOnlyPubkey = compressedPubkey.slice(1); // Remove the prefix byte\n\n // Ensure signature is a Buffer\n const sigBuffer = Buffer.isBuffer(sig) ? sig : Buffer.from(sig);\n\n // Verify using noble-curves Schnorr (BIP340)\n return nobleSchnorr.verify(sigBuffer, messageHash, xOnlyPubkey);\n }\n\n /**\n * Verifies a Schnorr signature with a pre-computed hash (BIP340).\n * This is useful when the message has already been hashed (e.g., with a tagged hash).\n * @param {Buffer} messageHash - The pre-computed message hash (32 bytes)\n * @param {Buffer} sig - The signature to verify (64 bytes)\n * @returns {Boolean} Whether the signature is valid\n */\n verifySchnorrHash (messageHash, sig) {\n const hash = Buffer.isBuffer(messageHash)\n ? messageHash\n : (messageHash instanceof Uint8Array ? Buffer.from(messageHash) : null);\n if (!hash || hash.length !== 32) {\n throw new Error('Message hash must be a 32-byte Buffer');\n }\n\n // Get x-only public key (32 bytes) from compressed public key (33 bytes)\n const compressedPubkey = Buffer.from(this.public.encodeCompressed('hex'), 'hex');\n const xOnlyPubkey = compressedPubkey.slice(1); // Remove the prefix byte\n\n // Ensure signature is a Buffer\n const sigBuffer = Buffer.isBuffer(sig) ? sig : Buffer.from(sig);\n\n // Verify using noble-curves Schnorr (BIP340)\n return nobleSchnorr.verify(sigBuffer, hash, xOnlyPubkey);\n }\n\n commit () {\n const reference = { ...this.state };\n const state = new Actor(reference);\n const commit = {\n type: 'KeyCommit',\n hash: state.id,\n signatures: []\n };\n\n // Store current state's hash\n this._state.hash = state.id;\n\n // Sign the commit message using the configured key\n const signature = this.sign(commit);\n commit.signatures.push(signature);\n\n this.emit('commit', commit);\n }\n\n /**\n * Sign a buffer of data using BIP 340: https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n * @param {Buffer} data Buffer of data to sign.\n * @returns {Buffer} Resulting signature (64 bytes).\n */\n sign (msg) {\n return this._sign(msg);\n }\n\n derive (path = this.settings.derivation) {\n if (!this.master) throw new Error('You cannot derive without a master key. Provide a seed phrase or an xprv.');\n\n const derived = this.master.derivePath(path);\n // Prefer extended keys so Key initializes as FROM_XPRV/FROM_XPUB (keeps .xpub for\n // Fabric protocol identity login / watch-only). Raw private+public alone loses xpub.\n if (derived.privateKey && typeof derived.toBase58 === 'function') {\n return new Key({ xprv: derived.toBase58() });\n }\n if (typeof derived.neutered === 'function') {\n return new Key({ xpub: derived.neutered().toBase58() });\n }\n return new Key({\n private: derived.privateKey.toString('hex'),\n public: derived.publicKey.toString('hex')\n });\n }\n\n /**\n * Secures the key by clearing sensitive information from memory.\n * This method should be called when the key is no longer needed\n * to prevent sensitive data from remaining in memory.\n */\n secure () {\n // Update state before clearing key material, so commit can still be signed.\n this._state.status = 'secured';\n this.commit();\n\n // Clear sensitive key material\n if (Buffer.isBuffer(this.private)) {\n this.private.fill(0);\n }\n\n // Null out sensitive properties\n this.private = null;\n this.privkey = null;\n this.seed = null;\n this.master = null;\n\n // Clear any derived keys\n this.xprv = null;\n\n return this;\n }\n\n get pubkeyhash () {\n const input = Buffer.from(this.pubkey, 'hex');\n return Hash256.digest(input);\n }\n\n get pubkey () {\n return this.public.encodeCompressed('hex');\n }\n\n /**\n * Exports the private key in Wallet Import Format (WIF)\n * @returns {String} The private key encoded in WIF format\n * @throws {Error} If the key doesn't have a private component\n */\n toWIF () {\n if (!this.private) throw new Error('Cannot export WIF without private key');\n const privateKeyBuffer = privateKeyToBuffer(this.private);\n\n const network = this.settings.network === 'regtest'\n ? this.settings.networks.testnet\n : this.settings.networks[this.settings.network] || this.settings.networks.mainnet;\n\n const prefix = Buffer.from([network.wif]);\n const payload = Buffer.concat([\n prefix,\n privateKeyBuffer,\n Buffer.from([0x01])\n ]);\n\n return encodeCheck(payload);\n }\n\n toBitcoinAddress () {\n if (!this.public) throw new Error('Cannot derive Bitcoin address without public key');\n const network = this.settings.network === 'regtest'\n ? this.settings.networks.testnet\n : this.settings.networks[this.settings.network] || this.settings.networks.mainnet;\n\n const p2pkh = payments.p2pkh({\n pubkey: Buffer.from(this.public.encode('hex'), 'hex'),\n network: network\n });\n\n return p2pkh.address;\n }\n}\n\nmodule.exports = Key;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL2tleS5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsRUFBRSxtQkFBTyxDQUFDLDhEQUFjOztBQUUxQjtBQUNBLGVBQWUsbUJBQU8sQ0FBQyx5REFBUTtBQUMvQixxQkFBcUIsbUZBQThCO0FBQ25ELFFBQVEsU0FBUyxFQUFFLG1CQUFPLENBQUMsbUVBQXVCOztBQUVsRDtBQUNBLGlDQUFpQyxjQUFjO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBLGFBQWEsTUFBTSxhQUFhLE1BQU07QUFDdEMsSUFBSSxNQUFNO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLE9BQU87QUFDL0I7QUFDQSx5QkFBeUIsTUFBTTtBQUMvQjtBQUNBO0FBQ0EsbUJBQW1CLE1BQU0sYUFBYSxNQUFNO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLG1CQUFPLENBQUMsNkNBQU87QUFDMUIsWUFBWSxtQkFBTyxDQUFDLHVEQUFPO0FBQzNCLFFBQVEsbUNBQW1DLEVBQUUsbUJBQU8sQ0FBQyw2RUFBNEI7QUFDakY7O0FBRUE7QUFDQSxNQUFNLE1BQU07QUFDWiwrQkFBK0IsTUFBTTtBQUNyQztBQUNBLHVCQUF1QixLQUFLO0FBQzVCLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0IsTUFBTSw2QkFBNkIsTUFBTTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFpQixNQUFNO0FBQ3ZCO0FBQ0EsNkNBQTZDLE1BQU07QUFDbkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkJBQTZCLE1BQU07QUFDbkMsbURBQW1EOztBQUVuRDtBQUNBLHNCQUFzQixNQUFNLHVCQUF1QixNQUFNOztBQUV6RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QiwwQkFBMEI7QUFDakQ7QUFDQTtBQUNBLHVCQUF1QixxQ0FBcUM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxNQUFNO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixNQUFNO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsTUFBTTtBQUN6QixvQkFBb0IsTUFBTTtBQUMxQjtBQUNBO0FBQ0EsTUFBTSxNQUFNO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvdHlwZXMva2V5LmpzP2I0MDYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmFicmljL2NvcmUvdHlwZXMva2V5XG4gKiBDcnlwdG9ncmFwaGljIGtleSBnZW5lcmF0aW9uLCBkZXJpdmF0aW9uLCBzaWduaW5nLCBhbmQgZW5jcnlwdGlvbi5cbiAqXG4gKiBAc2lnbmVyc1xuICogLSBFcmljIE1hcnRpbmRhbGUgPGVyaWNAZXJpY21hcnRpbmRhbGUuY29tPlxuICovXG4ndXNlIHN0cmljdCc7XG5cbi8vIENvbnN0YW50c1xuY29uc3Qge1xuICBGQUJSSUNfS0VZX0RFUklWQVRJT05fUEFUSCxcbiAgQkVDSDMyTV9DSEFSU0VUXG59ID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzJyk7XG5cbi8vIE5vZGUgTW9kdWxlc1xuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5jb25zdCB7IHNoYTI1NiB9ID0gcmVxdWlyZSgnQG5vYmxlL2hhc2hlcy9zaGEyLmpzJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5pc3RpYyBiaXQgc3RyZWFtIGZvciB7QGxpbmsgS2V5I2JpdH0uIFJlcGxhY2VzIHRoZSBgYXJiaXRyYXJ5YCBucG0gcGFja2FnZSwgd2hvc2UgcHVibGlzaGVkXG4gKiBgbWFpbmAgaXMgYSBicm93c2VyaWZ5IGJ1bmRsZSAoYGRvY3MvZGlzdC9pbmRleC5qc2ApIHRoYXQgYnJlYWtzIHVuZGVyIHdlYnBhY2sgKG5lc3RlZCBgcmVxdWlyZWApLlxuICogSW50ZXJuYWwgaGVscGVyIOKAlCBvbWl0dGVkIGZyb20gcHVibGlzaGVkIEFQSSAvIGRldiBkb2NzLlxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBjcmVhdGVLZXlCaXRHZW5lcmF0b3IgKHNlZWRRKSB7XG4gIGNvbnN0IHNlZWQgPSBCdWZmZXIuYWxsb2MoNCk7XG4gIHNlZWQud3JpdGVVSW50MzJCRShzZWVkUSA+Pj4gMCwgMCk7XG4gIGxldCBjb3VudGVyID0gMDtcbiAgbGV0IHBvb2wgPSBCdWZmZXIuZnJvbShzaGEyNTYoQnVmZmVyLmNvbmNhdChbXG4gICAgQnVmZmVyLmZyb20oJ2ZhYnJpYy9rZXkvYml0Z2VuL3YxJywgJ3V0ZjgnKSxcbiAgICBzZWVkXG4gIF0pKSk7XG4gIGxldCBvZmZzZXQgPSAwO1xuXG4gIHJldHVybiB7XG4gICAgbmV4dDoge1xuICAgICAgYml0cyAobikge1xuICAgICAgICBsZXQgb3V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBpZiAoKG9mZnNldCA+PiAzKSA+PSBwb29sLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGFpbCA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICAgICAgICAgIHRhaWwud3JpdGVVSW50MzJCRShjb3VudGVyID4+PiAwLCAwKTtcbiAgICAgICAgICAgIGNvdW50ZXIgPSAoY291bnRlciArIDEpID4+PiAwO1xuICAgICAgICAgICAgcG9vbCA9IEJ1ZmZlci5mcm9tKHNoYTI1NihCdWZmZXIuY29uY2F0KFtwb29sLCB0YWlsXSkpKTtcbiAgICAgICAgICAgIG9mZnNldCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGJ5dGVJbmRleCA9IG9mZnNldCA+PiAzO1xuICAgICAgICAgIGNvbnN0IGJpdEluQnl0ZSA9IG9mZnNldCAmIDc7XG4gICAgICAgICAgb2Zmc2V0Kys7XG4gICAgICAgICAgY29uc3QgYml0ID0gKHBvb2xbYnl0ZUluZGV4XSA+PiAoNyAtIGJpdEluQnl0ZSkpICYgMTtcbiAgICAgICAgICBvdXQgPSAob3V0IDw8IDEpIHwgYml0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG4vLyBEZXBlbmRlbmNpZXNcbi8vIFRPRE86IHJlbW92ZSBhbGwgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzXG5jb25zdCBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG5jb25zdCBlY2MgPSByZXF1aXJlKCcuL2VjYycpO1xuY29uc3QgeyBzZWNwMjU2azEsIHNjaG5vcnI6IG5vYmxlU2Nobm9yciB9ID0gcmVxdWlyZSgnQG5vYmxlL2N1cnZlcy9zZWNwMjU2azEuanMnKTtcbmNvbnN0IFNlY3BQb2ludCA9IHNlY3AyNTZrMS5Qcm9qZWN0aXZlUG9pbnQgfHwgc2VjcDI1NmsxLlBvaW50O1xuXG5mdW5jdGlvbiBwcml2YXRlS2V5VG9CdWZmZXIgKHByaXZrZXkpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihwcml2a2V5KSkgcmV0dXJuIHByaXZrZXk7XG4gIGlmIChCTi5pc0JOKHByaXZrZXkpKSByZXR1cm4gQnVmZmVyLmZyb20ocHJpdmtleS50b1N0cmluZygxNikucGFkU3RhcnQoNjQsICcwJyksICdoZXgnKTtcbiAgaWYgKHR5cGVvZiBwcml2a2V5ID09PSAnc3RyaW5nJykge1xuICAgIGlmICghL15bMC05YS1mQS1GXXsxLDY0fSQvLnRlc3QocHJpdmtleSkpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwcml2YXRlIGtleSBmb3JtYXQnKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20ocHJpdmtleS5wYWRTdGFydCg2NCwgJzAnKSwgJ2hleCcpO1xuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcocHJpdmtleSkgJiYgIShwcml2a2V5IGluc3RhbmNlb2YgRGF0YVZpZXcpICYmIHByaXZrZXkuYnl0ZUxlbmd0aCA9PT0gMzIpIHtcbiAgICAvLyBVaW50OEFycmF5IGFuZCBvdGhlciB0eXBlZC1hcnJheSB2aWV3cyBmcm9tIHVwZ3JhZGVkIGRlcHMgKGJpcDMyL2VjcGFpcikuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHByaXZrZXkpO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHByaXZrZXkpICYmIHByaXZrZXkubGVuZ3RoID09PSAzMiAmJiBwcml2a2V5LmV2ZXJ5KCh4KSA9PiBOdW1iZXIuaXNJbnRlZ2VyKHgpICYmIHggPj0gMCAmJiB4IDw9IDI1NSkpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20ocHJpdmtleSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHByaXZhdGUga2V5IGZvcm1hdCcpO1xufVxuXG5mdW5jdGlvbiBzZWNwUG9pbnRGcm9tUHVibGljS2V5IChwdWJrZXkpIHtcbiAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIocHVia2V5KSA/IHB1YmtleSA6IEJ1ZmZlci5mcm9tKHB1YmtleSk7XG4gIC8vIG5vYmxlLWN1cnZlcyB2MTogUHJvamVjdGl2ZVBvaW50LmZyb21IZXgoYnl0ZXMpXG4gIGlmIChzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50ICYmIHR5cGVvZiBzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50LmZyb21IZXggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2VjcDI1NmsxLlByb2plY3RpdmVQb2ludC5mcm9tSGV4KGJ5dGVzKTtcbiAgfVxuICAvLyBub2JsZS1jdXJ2ZXMgdjI6IFBvaW50LmZyb21CeXRlcyhieXRlcylcbiAgaWYgKFNlY3BQb2ludCAmJiB0eXBlb2YgU2VjcFBvaW50LmZyb21CeXRlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBTZWNwUG9pbnQuZnJvbUJ5dGVzKGJ5dGVzKTtcbiAgfVxuICAvLyBGYWxsYmFjazogdjIgUG9pbnQuZnJvbUhleCBleHBlY3RzIGEgaGV4IHN0cmluZ1xuICBpZiAoU2VjcFBvaW50ICYmIHR5cGVvZiBTZWNwUG9pbnQuZnJvbUhleCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBTZWNwUG9pbnQuZnJvbUhleChieXRlcy50b1N0cmluZygnaGV4JykpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgc2VjcDI1NmsxIFBvaW50IEFQSScpO1xufVxuXG5mdW5jdGlvbiBzZWNwUG9pbnRGcm9tUHJpdmF0ZUtleSAocHJpdmtleSkge1xuICBjb25zdCBieXRlcyA9IHByaXZhdGVLZXlUb0J1ZmZlcihwcml2a2V5KTtcbiAgLy8gbm9ibGUtY3VydmVzIHYxXG4gIGlmIChzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50ICYmIHR5cGVvZiBzZWNwMjU2azEuUHJvamVjdGl2ZVBvaW50LmZyb21Qcml2YXRlS2V5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHNlY3AyNTZrMS5Qcm9qZWN0aXZlUG9pbnQuZnJvbVByaXZhdGVLZXkoYnl0ZXMpO1xuICB9XG4gIC8vIG5vYmxlLWN1cnZlcyB2MjogY29tcHV0ZSBwdWJrZXkgdGhlbiBwYXJzZSBpbnRvIFBvaW50XG4gIGNvbnN0IHB1YiA9IHNlY3AyNTZrMS5nZXRQdWJsaWNLZXkoYnl0ZXMsIGZhbHNlKTtcbiAgcmV0dXJuIHNlY3BQb2ludEZyb21QdWJsaWNLZXkocHViKTtcbn1cblxuZnVuY3Rpb24gc2VjcFBvaW50VG9SYXdCeXRlcyAocG9pbnQsIGNvbXByZXNzZWQgPSB0cnVlKSB7XG4gIGlmICghcG9pbnQpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBzZWNwMjU2azEgcG9pbnQnKTtcbiAgaWYgKHR5cGVvZiBwb2ludC50b1Jhd0J5dGVzID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcG9pbnQudG9SYXdCeXRlcyhjb21wcmVzc2VkKTtcbiAgaWYgKHR5cGVvZiBwb2ludC50b0J5dGVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGNvbXByZXNzZWQpIHJldHVybiBwb2ludC50b0J5dGVzKCk7IC8vIHYyOiBjb21wcmVzc2VkIFNFQzEgKDMzIGJ5dGVzKVxuICAgIGlmICh0eXBlb2YgcG9pbnQudG9BZmZpbmUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFcnJvcignUG9pbnQudG9BZmZpbmUoKSB1bmF2YWlsYWJsZSBmb3IgdW5jb21wcmVzc2VkIGVuY29kaW5nJyk7XG4gICAgY29uc3QgYWZmaW5lID0gcG9pbnQudG9BZmZpbmUoKTtcbiAgICBjb25zdCB4ID0gQnVmZmVyLmZyb20oYWZmaW5lLngudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDY0LCAnMCcpLCAnaGV4Jyk7XG4gICAgY29uc3QgeSA9IEJ1ZmZlci5mcm9tKGFmZmluZS55LnRvU3RyaW5nKDE2KS5wYWRTdGFydCg2NCwgJzAnKSwgJ2hleCcpO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbMHgwNF0pLCB4LCB5XSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBzZWNwMjU2azEgUG9pbnQgQVBJJyk7XG59XG5cbmNvbnN0IHsgZW5jb2RlQ2hlY2ssIGRlY29kZUNoZWNrIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvYmFzZTU4Jyk7XG5jb25zdCBiaXAzOSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9iaXAzOScpO1xuY29uc3QgYmlwMzJNb2R1bGUgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvYmlwMzInKTtcbmNvbnN0IEJJUDMyID0gYmlwMzJNb2R1bGUuZGVmYXVsdDtcbmNvbnN0IEJJUDMyX0RFRkFVTFRfTkVUV09SSyA9IGJpcDMyTW9kdWxlLkRFRkFVTFRfTkVUV09SSztcbmNvbnN0IHsgcGF5bWVudHMgfSA9IHJlcXVpcmUoJ2JpdGNvaW5qcy1saWInKTtcblxuLy8gRmFicmljIERlcGVuZGVuY2llc1xuY29uc3QgQWN0b3IgPSByZXF1aXJlKCcuL2FjdG9yJyk7XG5jb25zdCBIYXNoMjU2ID0gcmVxdWlyZSgnLi9oYXNoMjU2Jyk7XG5cbi8vIE5PVEU6IHNlZSBhbHNvIEBmYWJyaWMvcGFzc3BvcnRcbi8vIGV4cGVjdCBhIGJlY2gzMm0gaWRlbnRpZmllciB1c2luZyBwcmVmaXggXCJpZFwiXG5cbmZ1bmN0aW9uIGJpcDMyTmV0d29ya0Zyb21LZXlTZXR0aW5ncyAoc2V0dGluZ3MpIHtcbiAgY29uc3QgbmFtZSA9IHNldHRpbmdzLm5ldHdvcmsgPT09ICdyZWd0ZXN0JyA/ICdyZWd0ZXN0JyA6IHNldHRpbmdzLm5ldHdvcms7XG4gIGNvbnN0IHJhdyA9IHNldHRpbmdzLm5ldHdvcmtzW25hbWVdIHx8IHNldHRpbmdzLm5ldHdvcmtzLm1haW5uZXQ7XG4gIHJldHVybiB7XG4gICAgbWVzc2FnZVByZWZpeDogcmF3Lm1lc3NhZ2VQcmVmaXgsXG4gICAgYmVjaDMyOiByYXcuYmVjaDMyLFxuICAgIGJpcDMyOiByYXcuYmlwMzIsXG4gICAgcHViS2V5SGFzaDogcmF3LnB1YktleUhhc2gsXG4gICAgc2NyaXB0SGFzaDogcmF3LnNjcmlwdEhhc2gsXG4gICAgd2lmOiByYXcud2lmXG4gIH07XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNyeXB0b2dyYXBoaWMga2V5LlxuICovXG5jbGFzcyBLZXkgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGEgRmFicmljIEtleSwgZWl0aGVyIHJlc3RvcmluZyBmcm9tIHNvbWUga25vd25cbiAgICogdmFsdWVzIG9yIGZyb20gcHJpb3Iga25vd2xlZGdlLiAgRm9yIGluc3RhbmNlLCB5b3UgY2FuIGNhbGwgYG5ldyBLZXkoKWBcbiAgICogdG8gY3JlYXRlIGEgZnJlc2gga2V5cGFpciwgb3IgYG5ldyBLZXkoeyBwdWJsaWM6ICdkZWFkYmVlZi4uLicgfSlgIHRvXG4gICAqIGNyZWF0ZSBpdCBmcm9tIGEga25vd24gcHVibGljIGtleS5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtzZXR0aW5nc10gSW5pdGlhbGl6YXRpb24gZm9yIHRoZSBrZXkuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbc2V0dGluZ3MubmV0d29ya10gTmV0d29yayBzdHJpbmcuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbc2V0dGluZ3Muc2VlZF0gTW5lbW9uaWMgc2VlZCBmb3IgaW5pdGlhbGl6aW5nIHRoZSBrZXkuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbc2V0dGluZ3MucHVibGljXSBQdWJsaWMga2V5IGluIGhleC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtzZXR0aW5ncy5wcml2YXRlXSBQcml2YXRlIGtleSBpbiBoZXguXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbc2V0dGluZ3Mud2lmXSBXSUYtZW5jb2RlZCBwcml2YXRlIGtleS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtzZXR0aW5ncy5wdXJwb3NlPTQ0XSBDb25zdHJhaW5zIGRlcml2YXRpb25zIHRvIHRoaXMgc3BhY2UuXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoaW5wdXQgPSB7fSkge1xuICAgIHN1cGVyKGlucHV0KTtcblxuICAgIC8vIFNldHRpbmdzXG4gICAgdGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgZGVidWc6IGZhbHNlLFxuICAgICAgbmV0d29yazogJ21haW4nLFxuICAgICAgY3VydmU6ICdzZWNwMjU2azEnLFxuICAgICAgZGVyaXZhdGlvbjogRkFCUklDX0tFWV9ERVJJVkFUSU9OX1BBVEgsXG4gICAgICBtb2RlOiAnYWVzLTI1Ni1jYmMnLFxuICAgICAgcHJlZml4OiAnMDAnLFxuICAgICAgcHVibGljOiBudWxsLFxuICAgICAgcHJpdmF0ZTogbnVsbCxcbiAgICAgIHdpZjogbnVsbCxcbiAgICAgIHB1cnBvc2U6IDQ0LFxuICAgICAgYWNjb3VudDogMCxcbiAgICAgIGJpdHM6IDI1NixcbiAgICAgIGhkOiB0cnVlLFxuICAgICAgc2VlZDogbnVsbCxcbiAgICAgIHBhc3NwaHJhc2U6ICcnLFxuICAgICAgcGFzc3dvcmQ6IG51bGwsXG4gICAgICBpbmRleDogMCxcbiAgICAgIHBhdGg6IG51bGwsXG4gICAgICBjaXBoZXI6IHtcbiAgICAgICAgaXY6IHtcbiAgICAgICAgICBzaXplOiAxNlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3RhdGU6IHtcbiAgICAgICAgc3RhdHVzOiAnc2Vuc2l0aXZlJ1xuICAgICAgfSxcbiAgICAgIHdpdG5lc3M6IHRydWUsXG4gICAgICBuZXR3b3Jrczoge1xuICAgICAgICBtYWlubmV0OiB7XG4gICAgICAgICAgbWVzc2FnZVByZWZpeDogJ1xceDE4Qml0Y29pbiBTaWduZWQgTWVzc2FnZTpcXG4nLFxuICAgICAgICAgIGJlY2gzMjogJ2JjJyxcbiAgICAgICAgICBiaXAzMjoge1xuICAgICAgICAgICAgcHVibGljOiAweDA0ODhiMjFlLFxuICAgICAgICAgICAgcHJpdmF0ZTogMHgwNDg4YWRlNFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHViS2V5SGFzaDogMHgwMCxcbiAgICAgICAgICBzY3JpcHRIYXNoOiAweDA1LFxuICAgICAgICAgIHdpZjogMHg4MFxuICAgICAgICB9LFxuICAgICAgICB0ZXN0bmV0OiB7XG4gICAgICAgICAgbWVzc2FnZVByZWZpeDogJ1xceDE4Qml0Y29pbiBTaWduZWQgTWVzc2FnZTpcXG4nLFxuICAgICAgICAgIGJlY2gzMjogJ3RiJyxcbiAgICAgICAgICBiaXAzMjoge1xuICAgICAgICAgICAgcHVibGljOiAweDA0MzU4N2NmLFxuICAgICAgICAgICAgcHJpdmF0ZTogMHgwNDM1ODM5NFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHViS2V5SGFzaDogMHg2ZixcbiAgICAgICAgICBzY3JpcHRIYXNoOiAweGM0LFxuICAgICAgICAgIHdpZjogMHhlZlxuICAgICAgICB9LFxuICAgICAgICByZWd0ZXN0OiB7XG4gICAgICAgICAgbWVzc2FnZVByZWZpeDogJ1xceDE4Qml0Y29pbiBTaWduZWQgTWVzc2FnZTpcXG4nLFxuICAgICAgICAgIGJlY2gzMjogJ2JjcnQnLFxuICAgICAgICAgIGJpcDMyOiB7XG4gICAgICAgICAgICBwdWJsaWM6IDB4MDQzNTg3Y2YsXG4gICAgICAgICAgICBwcml2YXRlOiAweDA0MzU4Mzk0XG4gICAgICAgICAgfSxcbiAgICAgICAgICBwdWJLZXlIYXNoOiAweDZmLFxuICAgICAgICAgIHNjcmlwdEhhc2g6IDB4YzQsXG4gICAgICAgICAgd2lmOiAweGVmXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBpbnB1dCk7XG5cbiAgICB0aGlzLmJpcDMyID0gbmV3IEJJUDMyKGVjYyk7XG4gICAgdGhpcy5fYmVjaDMybUNoYXJzZXQgPSBCRUNIMzJNX0NIQVJTRVQ7XG5cbiAgICB0aGlzLmNsb2NrID0gMDtcbiAgICB0aGlzLm1hc3RlciA9IG51bGw7XG4gICAgdGhpcy5wcml2YXRlID0gbnVsbDtcbiAgICB0aGlzLnB1YmxpYyA9IG51bGw7XG4gICAgdGhpcy5fcHViVW5jb21wcmVzc2VkID0gZmFsc2U7IC8vIHNldCB0cnVlIGZvciBsZWdhY3kgdW5jb21wcmVzc2VkIFdJRlxuICAgIHRoaXMuX3N0YXRlID0gbnVsbDsgLy8gSW5pdGlhbGl6ZSBhcyBudWxsIHRvIGRlZmVyIHN0YXRlIHVwZGF0ZXNcblxuICAgIGlmICh0aGlzLnNldHRpbmdzLm1uZW1vbmljKSB7XG4gICAgICB0aGlzLl9tb2RlID0gJ0ZST01fTU5FTU9OSUMnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZXR0aW5ncy5zZWVkKSB7XG4gICAgICB0aGlzLl9tb2RlID0gJ0ZST01fU0VFRCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNldHRpbmdzLndpZikge1xuICAgICAgdGhpcy5fbW9kZSA9ICdGUk9NX1dJRic7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNldHRpbmdzLnByaXZhdGUpIHtcbiAgICAgIHRoaXMuX21vZGUgPSAnRlJPTV9QUklWQVRFX0tFWSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNldHRpbmdzLnhwcnYpIHtcbiAgICAgIHRoaXMuX21vZGUgPSAnRlJPTV9YUFJWJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2V0dGluZ3MueHB1Yikge1xuICAgICAgdGhpcy5fbW9kZSA9ICdGUk9NX1hQVUInO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZXR0aW5ncy5wdWJrZXkgfHwgdGhpcy5zZXR0aW5ncy5wdWJsaWMpIHtcbiAgICAgIHRoaXMuX21vZGUgPSAnRlJPTV9QVUJMSUNfS0VZJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kZSA9ICdGUk9NX1JBTkRPTSc7XG4gICAgfVxuXG4gICAgbGV0IHNlZWQgPSBudWxsO1xuICAgIGxldCByb290ID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGhpcy5fbW9kZSkge1xuICAgICAgY2FzZSAnRlJPTV9NTkVNT05JQyc6XG4gICAgICAgIHNlZWQgPSBiaXAzOS5tbmVtb25pY1RvU2VlZFN5bmModGhpcy5zZXR0aW5ncy5tbmVtb25pYywgdGhpcy5zZXR0aW5ncy5wYXNzcGhyYXNlKTtcbiAgICAgICAgcm9vdCA9IHRoaXMuYmlwMzIuZnJvbVNlZWQoc2VlZCwgYmlwMzJOZXR3b3JrRnJvbUtleVNldHRpbmdzKHRoaXMuc2V0dGluZ3MpKTtcbiAgICAgICAgdGhpcy5zZWVkID0gdGhpcy5zZXR0aW5ncy5tbmVtb25pYztcbiAgICAgICAgdGhpcy54cHJ2ID0gcm9vdC50b0Jhc2U1OCgpO1xuICAgICAgICB0aGlzLnhwdWIgPSByb290Lm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcbiAgICAgICAgdGhpcy5tYXN0ZXIgPSByb290O1xuICAgICAgICB0aGlzLl9wb2ludCA9IHNlY3BQb2ludEZyb21Qcml2YXRlS2V5KHJvb3QucHJpdmF0ZUtleSk7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gJ3NlZWRlZCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRlJPTV9TRUVEJzpcbiAgICAgICAgLy8gVE9ETzogYWxsb3cgc2V0dGluZyBvZiByYXcgc2VlZCAoZGVwcmVjYXRlcyBwYXNzaW5nIGEgbW5lbW9uaWMgaW4gdGhlIGBzZWVkYCBwcm9wZXJ0eSlcbiAgICAgICAgc2VlZCA9IGJpcDM5Lm1uZW1vbmljVG9TZWVkU3luYyh0aGlzLnNldHRpbmdzLnNlZWQsIHRoaXMuc2V0dGluZ3MucGFzc3BocmFzZSk7XG4gICAgICAgIHJvb3QgPSB0aGlzLmJpcDMyLmZyb21TZWVkKHNlZWQsIGJpcDMyTmV0d29ya0Zyb21LZXlTZXR0aW5ncyh0aGlzLnNldHRpbmdzKSk7XG4gICAgICAgIHRoaXMuc2VlZCA9IHRoaXMuc2V0dGluZ3Muc2VlZDtcbiAgICAgICAgdGhpcy54cHJ2ID0gcm9vdC50b0Jhc2U1OCgpO1xuICAgICAgICB0aGlzLnhwdWIgPSByb290Lm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcbiAgICAgICAgdGhpcy5tYXN0ZXIgPSByb290O1xuICAgICAgICB0aGlzLl9wb2ludCA9IHNlY3BQb2ludEZyb21Qcml2YXRlS2V5KHJvb3QucHJpdmF0ZUtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRlJPTV9XSUYnOlxuICAgICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlQ2hlY2sodGhpcy5zZXR0aW5ncy53aWYpO1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gZGVjb2RlZC5zbGljZSgxLCAzMyk7XG4gICAgICAgIGNvbnN0IGlzQ29tcHJlc3NlZCA9IGRlY29kZWQubGVuZ3RoID09PSAzNCAmJiBkZWNvZGVkWzMzXSA9PT0gMHgwMTtcbiAgICAgICAgdGhpcy5fcG9pbnQgPSBzZWNwUG9pbnRGcm9tUHJpdmF0ZUtleShwcml2YXRlS2V5KTtcbiAgICAgICAgdGhpcy5wcml2YXRlID0gQnVmZmVyLmlzQnVmZmVyKHByaXZhdGVLZXkpID8gcHJpdmF0ZUtleSA6IEJ1ZmZlci5mcm9tKHByaXZhdGVLZXkpO1xuICAgICAgICBpZiAoIWlzQ29tcHJlc3NlZCkgdGhpcy5fcHViVW5jb21wcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdGUk9NX1hQUlYnOlxuICAgICAgICB0aGlzLm1hc3RlciA9IHRoaXMuYmlwMzIuZnJvbUJhc2U1OCh0aGlzLnNldHRpbmdzLnhwcnYpO1xuICAgICAgICB0aGlzLnhwcnYgPSB0aGlzLm1hc3Rlci50b0Jhc2U1OCgpO1xuICAgICAgICB0aGlzLnhwdWIgPSB0aGlzLm1hc3Rlci5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG4gICAgICAgIHRoaXMuX3BvaW50ID0gc2VjcFBvaW50RnJvbVByaXZhdGVLZXkodGhpcy5tYXN0ZXIucHJpdmF0ZUtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRlJPTV9YUFVCJzpcbiAgICAgICAgdGhpcy5tYXN0ZXIgPSB0aGlzLmJpcDMyLmZyb21CYXNlNTgodGhpcy5zZXR0aW5ncy54cHViKTtcbiAgICAgICAgdGhpcy54cHViID0gdGhpcy5tYXN0ZXIubmV1dGVyZWQoKS50b0Jhc2U1OCgpO1xuICAgICAgICB0aGlzLl9wb2ludCA9IHNlY3BQb2ludEZyb21QdWJsaWNLZXkodGhpcy5tYXN0ZXIucHVibGljS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdGUk9NX1BSSVZBVEVfS0VZJzpcbiAgICAgICAgLy8gS2V5IGlzIHByaXZhdGVcbiAgICAgICAgY29uc3QgcHJvdmlzaW9uID0gKHRoaXMuc2V0dGluZ3MucHJpdmF0ZSBpbnN0YW5jZW9mIEJ1ZmZlcikgPyB0aGlzLnNldHRpbmdzLnByaXZhdGUgOiBCdWZmZXIuZnJvbSh0aGlzLnNldHRpbmdzLnByaXZhdGUsICdoZXgnKTtcbiAgICAgICAgdGhpcy5fcG9pbnQgPSBzZWNwUG9pbnRGcm9tUHJpdmF0ZUtleShwcm92aXNpb24pO1xuICAgICAgICB0aGlzLnByaXZhdGUgPSBwcm92aXNpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRlJPTV9QVUJMSUNfS0VZJzpcbiAgICAgICAgY29uc3QgcHVia2V5ID0gdGhpcy5zZXR0aW5ncy5wdWJrZXkgfHwgdGhpcy5zZXR0aW5ncy5wdWJsaWM7XG4gICAgICAgIC8vIEtleSBpcyBvbmx5IHB1YmxpY1xuICAgICAgICBjb25zdCBwdWJrZXlCdWYgPSAocHVia2V5IGluc3RhbmNlb2YgQnVmZmVyKSA/IHB1YmtleSA6IEJ1ZmZlci5mcm9tKHB1YmtleSwgJ2hleCcpO1xuICAgICAgICB0aGlzLl9wb2ludCA9IHNlY3BQb2ludEZyb21QdWJsaWNLZXkocHVia2V5QnVmKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdGUk9NX1JBTkRPTSc6XG4gICAgICAgIHRoaXMubW5lbW9uaWMgPSBiaXAzOS5nZW5lcmF0ZU1uZW1vbmljKCk7XG4gICAgICAgIC8vIFRPRE86IHNldCBwcm9wZXJ0eSBgc2VlZGAgYXMgdGhlIGFjdHVhbCBkZXJpdmVkIHNlZWQsIG5vdCB0aGUgc2VlZCBwaHJhc2VcbiAgICAgICAgY29uc3QgaW50ZXJpbSA9IGJpcDM5Lm1uZW1vbmljVG9TZWVkU3luYyh0aGlzLm1uZW1vbmljKTtcbiAgICAgICAgdGhpcy5tYXN0ZXIgPSB0aGlzLmJpcDMyLmZyb21TZWVkKGludGVyaW0sIGJpcDMyTmV0d29ya0Zyb21LZXlTZXR0aW5ncyh0aGlzLnNldHRpbmdzKSk7XG4gICAgICAgIHRoaXMueHBydiA9IHRoaXMubWFzdGVyLnRvQmFzZTU4KCk7XG4gICAgICAgIHRoaXMueHB1YiA9IHRoaXMubWFzdGVyLm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcbiAgICAgICAgdGhpcy5fcG9pbnQgPSBzZWNwUG9pbnRGcm9tUHJpdmF0ZUtleSh0aGlzLm1hc3Rlci5wcml2YXRlS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gUmVhZCB0aGUgcGFpciAoZm9yIG1vZGVzIHRoYXQgdXNlIG1hc3Rlciwgc2V0IHByaXZhdGUgZnJvbSBtYXN0ZXIpXG4gICAgaWYgKCF0aGlzLnByaXZhdGUgJiYgdGhpcy5tYXN0ZXIgJiYgdGhpcy5tYXN0ZXIucHJpdmF0ZUtleSkge1xuICAgICAgdGhpcy5wcml2YXRlID0gcHJpdmF0ZUtleVRvQnVmZmVyKHRoaXMubWFzdGVyLnByaXZhdGVLZXkpO1xuICAgIH1cbiAgICAvLyBBZGFwdCBub2JsZS1jdXJ2ZXMgcG9pbnQgdG8gdGhlIG1pbmltYWwgaW50ZXJmYWNlIHVzZWQgZWxzZXdoZXJlLlxuICAgIHRoaXMucHVibGljID0ge1xuICAgICAgZW5jb2RlQ29tcHJlc3NlZDogKGUpID0+IEJ1ZmZlci5mcm9tKHNlY3BQb2ludFRvUmF3Qnl0ZXModGhpcy5fcG9pbnQsICF0aGlzLl9wdWJVbmNvbXByZXNzZWQpKS50b1N0cmluZyhlIHx8ICdoZXgnKSxcbiAgICAgIGVuY29kZTogKGUpID0+IEJ1ZmZlci5mcm9tKHNlY3BQb2ludFRvUmF3Qnl0ZXModGhpcy5fcG9pbnQsIGZhbHNlKSkudG9TdHJpbmcoZSB8fCAnaGV4JylcbiAgICB9O1xuICAgIC8vIEFkYXB0ZXIgZm9yIFNlc3Npb24vVG9rZW46IGVsbGlwdGljLXN0eWxlIGdldFByaXZhdGUvZ2V0UHVibGljXG4gICAgdGhpcy5rZXlwYWlyID0ge1xuICAgICAgZ2V0UHJpdmF0ZTogKGVuYykgPT4ge1xuICAgICAgICBpZiAoIXRoaXMucHJpdmF0ZSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGhleCA9IEJ1ZmZlci5pc0J1ZmZlcih0aGlzLnByaXZhdGUpID8gdGhpcy5wcml2YXRlLnRvU3RyaW5nKCdoZXgnKSA6IFN0cmluZyh0aGlzLnByaXZhdGUpO1xuICAgICAgICBpZiAoZW5jID09PSAnYnl0ZXMnKSByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHRoaXMucHJpdmF0ZSkgPyB0aGlzLnByaXZhdGUgOiBCdWZmZXIuZnJvbShoZXgsICdoZXgnKTtcbiAgICAgICAgaWYgKGVuYyA9PT0gJ2hleCcpIHJldHVybiBoZXg7XG4gICAgICAgIHJldHVybiBuZXcgQk4oaGV4LCAxNik7XG4gICAgICB9LFxuICAgICAgZ2V0UHVibGljOiAoY29tcHJlc3NlZCwgZW5jKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gc2VjcFBvaW50VG9SYXdCeXRlcyh0aGlzLl9wb2ludCwgY29tcHJlc3NlZCAhPT0gZmFsc2UpO1xuICAgICAgICByZXR1cm4gKGVuYyB8fCAnaGV4JykgPT09ICdoZXgnID8gQnVmZmVyLmZyb20oYnl0ZXMpLnRvU3RyaW5nKCdoZXgnKSA6IEJ1ZmZlci5mcm9tKGJ5dGVzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gVE9ETzogZGV0ZXJtaW5lIGlmIHRoaXMgbWFrZXMgc2Vuc2UgLyBuZWVkcyB0byBiZSBwcml2YXRlXG4gICAgdGhpcy5wcml2a2V5ID0gKHRoaXMucHJpdmF0ZSkgPyB0aGlzLnByaXZhdGUudG9TdHJpbmcoKSA6IG51bGw7XG5cbiAgICAvLyBDb25maWd1cmUgRGV0ZXJtaW5pc3RpYyBSYW5kb21cbiAgICAvLyBXQVJOSU5HOiB0aGlzIHdpbGwgY3VycmVudGx5IGxvb3AgYWZ0ZXIgMl4zMiBiaXRzXG4gICAgLy8gVE9ETzogZXZhbHVhdGUgY29tcHJlc3Npb24gd2hlbiB0cmVhdGluZyBzZWVkIHBocmFzZSBhcyBhc2NpaVxuICAgIC8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIHNoYTI1NihtYXN0ZXJwcml2a2V5KSBvciBzaGEyNTYoc2hhMjU2KC4uLikpP1xuICAgIHRoaXMuX3N0YXJzZWVkID0gSGFzaDI1Ni5kaWdlc3QodGhpcy5wdWJrZXloYXNoKS50b1N0cmluZygnaGV4Jyk7XG4gICAgdGhpcy5xID0gcGFyc2VJbnQodGhpcy5fc3RhcnNlZWQuc3Vic3RyaW5nKDAsIDQpLCAxNik7XG4gICAgdGhpcy5nZW5lcmF0b3IgPSBjcmVhdGVLZXlCaXRHZW5lcmF0b3IodGhpcy5xKTtcblxuICAgIHRoaXNbJ0BkYXRhJ10gPSB7XG4gICAgICB0eXBlOiAnS2V5JyxcbiAgICAgIHB1YmxpYzogdGhpcy5wdWJrZXksXG4gICAgICBhZGRyZXNzOiB0aGlzLmFkZHJlc3NcbiAgICB9O1xuXG4gICAgdGhpcy5fc3RhdGUgPSB7XG4gICAgICBwdWJrZXk6IHRoaXMucHVia2V5LFxuICAgICAgY29udGVudDogdGhpcy5zZXR0aW5ncy5zdGF0ZVxuICAgIH07XG5cbiAgICAvLyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2tleXJpbmcnLCB7IGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX3BvaW50JywgeyBlbnVtZXJhYmxlOiBmYWxzZSB9KTsgLy8gbm9ibGUgUHJvamVjdGl2ZVBvaW50IGhhcyBCaWdJbnQ7IGhpZGUgZnJvbSBKU09OLnN0cmluZ2lmeVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAna2V5cGFpcicsIHsgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdwcml2YXRlJywgeyBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEtleSBpbnN0YW5jZSBmcm9tIGEgV0lGLWVuY29kZWQgcHJpdmF0ZSBrZXkuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB3aWYgLSBUaGUgV0lGLWVuY29kZWQgcHJpdmF0ZSBrZXlcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3Iga2V5IGNyZWF0aW9uXG4gICAqIEByZXR1cm5zIHtLZXl9IEEgbmV3IEtleSBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGZyb21XSUYgKHdpZiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBLZXkoeyAuLi5vcHRpb25zLCB3aWYgfSk7XG4gIH1cblxuICBzdGF0aWMgTW5lbW9uaWMgKHNlZWQpIHtcbiAgICBpZiAoIXNlZWQpIHNlZWQgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMzIpO1xuICAgIGNvbnN0IG1uZW1vbmljID0gYmlwMzkuZW50cm9weVRvTW5lbW9uaWMoc2VlZCk7XG4gICAgY29uc3Qgc2VlZEJ1ZmZlciA9IGJpcDM5Lm1uZW1vbmljVG9TZWVkU3luYyhtbmVtb25pYyk7XG4gICAgY29uc3QgYmlwMzIgPSBuZXcgQklQMzIoZWNjKTtcbiAgICBjb25zdCBtYXN0ZXIgPSBiaXAzMi5mcm9tU2VlZChzZWVkQnVmZmVyLCBCSVAzMl9ERUZBVUxUX05FVFdPUkspO1xuICAgIGNvbnN0IGtleSA9IG5ldyBLZXkoKTtcbiAgICBrZXkuc2VlZCA9IG1uZW1vbmljO1xuICAgIGtleS5wcml2YXRlID0gbWFzdGVyLnByaXZhdGVLZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGtleS5wdWJsaWMgPSBtYXN0ZXIucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICBrZXkuY2hhaW5Db2RlID0gbWFzdGVyLmNoYWluQ29kZS50b1N0cmluZygnaGV4Jyk7XG4gICAga2V5LmRlcHRoID0gbWFzdGVyLmRlcHRoO1xuICAgIGtleS5pbmRleCA9IG1hc3Rlci5pbmRleDtcbiAgICBrZXkucGFyZW50RmluZ2VycHJpbnQgPSBtYXN0ZXIucGFyZW50RmluZ2VycHJpbnQ7XG4gICAga2V5LmZpbmdlcnByaW50ID0gbWFzdGVyLmZpbmdlcnByaW50O1xuICAgIGtleS5rZXlwYWlyID0gbWFzdGVyO1xuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBnZXQgYWNjb3VudCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuYWNjb3VudDtcbiAgfVxuXG4gIGdldCBpZCAoKSB7XG4gICAgcmV0dXJuIHRoaXMucHVia2V5aGFzaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBQZXItbWVzc2FnZSBJVnMgYXJlIGdlbmVyYXRlZCBpbiB7QGxpbmsgS2V5I2VuY3J5cHR9LiBEbyBub3QgcmVseSBvbiB0aGlzIGdldHRlci5cbiAgICovXG4gIGdldCBpdiAoKSB7XG4gICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcygxNik7XG4gIH1cblxuICBnZXQgcGF0aCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucGF0aDtcbiAgfVxuXG4gIGdldCBwdXJwb3NlICgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5wdXJwb3NlO1xuICB9XG5cbiAgYml0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0b3IubmV4dC5iaXRzKDEpO1xuICB9XG5cbiAgLyogZXhwb3J0ICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRkcmVzc2VzOiB7XG4gICAgICAgIHAyd2toOiBudWxsLFxuICAgICAgICBwMnRyOiBudWxsXG4gICAgICB9LFxuICAgICAgcHJpdmF0ZTogdGhpcy5rZXlwYWlyLnByaXZhdGUsXG4gICAgICBwdWJsaWM6IHRoaXMua2V5cGFpci5wdWJsaWNcbiAgICB9O1xuICB9ICovXG5cbiAgZGVyaXZlQWNjb3VudFJlY2VpdmUgKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVyaXZlQWRkcmVzcyhpbmRleCk7XG4gIH1cblxuICBkZXJpdmVBZGRyZXNzIChpbmRleCA9IDAsIGNoYW5nZSA9IDAsIHR5cGUgPSAncDJwa2gnKSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5kZXJpdmVLZXlQYWlyKGluZGV4LCBjaGFuZ2UpO1xuICAgIGNvbnN0IG5ldHdvcmsgPSB0aGlzLnNldHRpbmdzLm5ldHdvcmsgPT09ICdyZWd0ZXN0JyA/IHRoaXMuc2V0dGluZ3MubmV0d29ya3MudGVzdG5ldCA6IHRoaXMuc2V0dGluZ3MubmV0d29ya3NbdGhpcy5zZXR0aW5ncy5uZXR3b3JrXTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAncDJwa2gnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFkZHJlc3M6IHBheW1lbnRzLnAycGtoKHtcbiAgICAgICAgICAgIHB1YmtleTogQnVmZmVyLmZyb20oa2V5LnB1YmxpY0tleSwgJ2hleCcpLFxuICAgICAgICAgICAgbmV0d29yazogbmV0d29ya1xuICAgICAgICAgIH0pLmFkZHJlc3MsXG4gICAgICAgICAgcHVibGljS2V5OiBrZXkucHVibGljS2V5LFxuICAgICAgICAgIHByaXZhdGVLZXk6IGtleS5wcml2YXRlS2V5XG4gICAgICAgIH07XG4gICAgICBjYXNlICdwMndwa2gnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFkZHJlc3M6IHBheW1lbnRzLnAyd3BraCh7XG4gICAgICAgICAgICBwdWJrZXk6IEJ1ZmZlci5mcm9tKGtleS5wdWJsaWNLZXksICdoZXgnKSxcbiAgICAgICAgICAgIG5ldHdvcms6IG5ldHdvcmtcbiAgICAgICAgICB9KS5hZGRyZXNzLFxuICAgICAgICAgIHB1YmxpY0tleToga2V5LnB1YmxpY0tleSxcbiAgICAgICAgICBwcml2YXRlS2V5OiBrZXkucHJpdmF0ZUtleVxuICAgICAgICB9O1xuICAgICAgY2FzZSAncDJ0cic6XG4gICAgICAgIC8vIEZvciBwMnRyLCB3ZSBuZWVkIHRvIHVzZSB0aGUgeC1vbmx5IHB1YmtleSAoZmlyc3QgMzIgYnl0ZXMgYWZ0ZXIgdGhlIHByZWZpeClcbiAgICAgICAgY29uc3QgcHVia2V5QnVmZmVyID0gQnVmZmVyLmZyb20oa2V5LnB1YmxpY0tleSwgJ2hleCcpO1xuICAgICAgICBjb25zdCB4T25seVB1YmtleSA9IHB1YmtleUJ1ZmZlci5zbGljZSgxLCAzMyk7IC8vIFJlbW92ZSBwcmVmaXggYnl0ZSBhbmQgdGFrZSBuZXh0IDMyIGJ5dGVzXG5cbiAgICAgICAgLy8gR2VuZXJhdGUgdGFwcm9vdCBhZGRyZXNzIHVzaW5nIGJlY2gzMm0gZW5jb2RpbmdcbiAgICAgICAgY29uc3QgY29tbWl0SGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKVxuICAgICAgICAgIC51cGRhdGUoQnVmZmVyLmNvbmNhdChbeE9ubHlQdWJrZXksIEJ1ZmZlci5hbGxvYygzMildKSlcbiAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgIGNvbnN0IHR3ZWFrUmVzdWx0ID0gZWNjLnhPbmx5UG9pbnRBZGRUd2Vhayh4T25seVB1YmtleSwgY29tbWl0SGFzaCk7XG4gICAgICAgIGlmICghdHdlYWtSZXN1bHQpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0d2VhaycpO1xuXG4gICAgICAgIC8vIFVzZSB0aGUgY29ycmVjdCBuZXR3b3JrIHByZWZpeCBmb3IgYmVjaDMybVxuICAgICAgICBsZXQgaHJwO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuc2V0dGluZ3MubmV0d29yaykge1xuICAgICAgICAgIGNhc2UgJ21haW4nOlxuICAgICAgICAgICAgaHJwID0gJ2JjJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Rlc3RuZXQnOlxuICAgICAgICAgICAgaHJwID0gJ3RiJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3JlZ3Rlc3QnOlxuICAgICAgICAgICAgaHJwID0gJ2JjcnQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbmV0d29yazogJHt0aGlzLnNldHRpbmdzLm5ldHdvcmt9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5fZW5jb2RlQmVjaDMybSh0d2Vha1Jlc3VsdC54T25seVB1YmtleSwgaHJwKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgICAgcHVibGljS2V5OiBrZXkucHVibGljS2V5LFxuICAgICAgICAgIHByaXZhdGVLZXk6IGtleS5wcml2YXRlS2V5XG4gICAgICAgIH07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGFkZHJlc3MgdHlwZTogJHt0eXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIF9lbmNvZGVCZWNoMzJtIChkYXRhLCBocnApIHtcbiAgICAvLyBXaXRuZXNzIHZlcnNpb24gMSBmb3IgUDJUUlxuICAgIGNvbnN0IHZlcnNpb24gPSBbMV07XG4gICAgLy8gQ29udmVydCB3aXRuZXNzIHByb2dyYW0gdG8gNS1iaXQgd29yZHNcbiAgICBjb25zdCBwcm9ncmFtID0gdGhpcy5fY29udmVydEJpdHMoQXJyYXkuZnJvbShkYXRhKSwgOCwgNSwgdHJ1ZSk7XG4gICAgaWYgKCFwcm9ncmFtKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcHJvZ3JhbScpO1xuXG4gICAgLy8gQ29tYmluZSB2ZXJzaW9uIGFuZCBwcm9ncmFtXG4gICAgY29uc3Qgd29yZHMgPSB2ZXJzaW9uLmNvbmNhdChwcm9ncmFtKTtcblxuICAgIC8vIEdlbmVyYXRlIGNoZWNrc3VtXG4gICAgY29uc3QgY2hrID0gdGhpcy5fYmVjaDMybUNyZWF0ZUNoZWNrc3VtKGhycCwgd29yZHMpO1xuXG4gICAgLy8gUmV0dXJuIGZpbmFsIGFkZHJlc3NcbiAgICByZXR1cm4gaHJwICsgJzEnICsgd29yZHMubWFwKHggPT4gdGhpcy5fYmVjaDMybUNoYXJzZXRbeF0pLmpvaW4oJycpICsgY2hrO1xuICB9XG5cbiAgX2NvbnZlcnRCaXRzIChkYXRhLCBmcm9tQml0cywgdG9CaXRzLCBwYWQpIHtcbiAgICBsZXQgYWNjID0gMDtcbiAgICBsZXQgYml0cyA9IDA7XG4gICAgY29uc3QgbWF4diA9ICgxIDw8IHRvQml0cykgLSAxO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbaV07XG4gICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4+IGZyb21CaXRzICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgYWNjID0gKGFjYyA8PCBmcm9tQml0cykgfCB2YWx1ZTtcbiAgICAgIGJpdHMgKz0gZnJvbUJpdHM7XG4gICAgICB3aGlsZSAoYml0cyA+PSB0b0JpdHMpIHtcbiAgICAgICAgYml0cyAtPSB0b0JpdHM7XG4gICAgICAgIHJlc3VsdC5wdXNoKChhY2MgPj4gYml0cykgJiBtYXh2KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFkKSB7XG4gICAgICBpZiAoYml0cyA+IDApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goKGFjYyA8PCAodG9CaXRzIC0gYml0cykpICYgbWF4dik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChiaXRzID49IGZyb21CaXRzIHx8ICgoYWNjIDw8ICh0b0JpdHMgLSBiaXRzKSkgJiBtYXh2KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIF9iZWNoMzJtQ3JlYXRlQ2hlY2tzdW0gKGhycCwgZGF0YSkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX2JlY2gzMm1FeHBhbmRIcnAoaHJwKS5jb25jYXQoZGF0YSkuY29uY2F0KFswLCAwLCAwLCAwLCAwLCAwXSk7XG4gICAgY29uc3QgcG9seW1vZCA9IHRoaXMuX2JlY2gzMm1Qb2x5bW9kKHZhbHVlcykgXiAweDJiYzgzMGEzO1xuICAgIGNvbnN0IHJldCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICByZXQucHVzaCgocG9seW1vZCA+PiA1ICogKDUgLSBpKSkgJiAzMSk7XG4gICAgfVxuICAgIHJldHVybiByZXQubWFwKHggPT4gdGhpcy5fYmVjaDMybUNoYXJzZXRbeF0pLmpvaW4oJycpO1xuICB9XG5cbiAgX2JlY2gzMm1FeHBhbmRIcnAgKGhycCkge1xuICAgIGNvbnN0IHJldCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaHJwLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXQucHVzaChocnAuY2hhckNvZGVBdChpKSA+PiA1KTtcbiAgICB9XG4gICAgcmV0LnB1c2goMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBocnAubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJldC5wdXNoKGhycC5jaGFyQ29kZUF0KGkpICYgMzEpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgX2JlY2gzMm1Qb2x5bW9kICh2YWx1ZXMpIHtcbiAgICBjb25zdCBHRU4gPSBbMHgzYjZhNTdiMiwgMHgyNjUwOGU2ZCwgMHgxZWExMTlmYSwgMHgzZDQyMzNkZCwgMHgyYTE0NjJiM107XG4gICAgbGV0IGNoayA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRvcCA9IGNoayA+PiAyNTtcbiAgICAgIGNoayA9ICgoY2hrICYgMHgxZmZmZmZmKSA8PCA1KSBeIHZhbHVlc1tpXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNTsgaisrKSB7XG4gICAgICAgIGlmICgodG9wID4+IGopICYgMSkge1xuICAgICAgICAgIGNoayBePSBHRU5bal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoaztcbiAgfVxuXG4gIGRlcml2ZUtleVBhaXIgKGFkZHJlc3NJRCA9IDAsIGNoYW5nZSA9IDApIHtcbiAgICBjb25zdCBwYXRoID0gYG0vJHt0aGlzLnB1cnBvc2V9Jy8wJy8ke3RoaXMuYWNjb3VudH0nLyR7Y2hhbmdlfS8ke2FkZHJlc3NJRH1gO1xuICAgIGNvbnN0IGRlcml2ZWQgPSB0aGlzLm1hc3Rlci5kZXJpdmVQYXRoKHBhdGgpO1xuICAgIGNvbnN0IHB1YkJ5dGVzID0gc2VjcDI1NmsxLmdldFB1YmxpY0tleShkZXJpdmVkLnByaXZhdGVLZXksIHRydWUpO1xuICAgIHJldHVybiB7XG4gICAgICBwcml2YXRlS2V5OiBkZXJpdmVkLnByaXZhdGVLZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgcHVibGljS2V5OiBCdWZmZXIuZnJvbShwdWJCeXRlcykudG9TdHJpbmcoJ2hleCcpXG4gICAgfTtcbiAgfVxuXG4gIGVuY3J5cHQgKHZhbHVlKSB7XG4gICAgaWYgKCF0aGlzLnByaXZhdGUpIHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRlYnVnKSBjb25zb2xlLmVycm9yKCdbRkFCUklDOktFWV0nLCAnQ2Fubm90IGVuY3J5cHQgd2l0aG91dCBwcml2YXRlIGtleScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGl2YnVmZiA9IGNyeXB0by5yYW5kb21CeXRlcygxNik7XG4gICAgICAvLyBEZXJpdmUgYSAzMi1ieXRlIGtleSBmcm9tIHRoZSBwcml2YXRlIGtleSB1c2luZyBTSEEtMjU2XG4gICAgICBjb25zdCBrZXkgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JylcbiAgICAgICAgLnVwZGF0ZSh0aGlzLnByaXZhdGUudG9TdHJpbmcoJ2hleCcpKVxuICAgICAgICAuZGlnZXN0KCk7XG4gICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYodGhpcy5zZXR0aW5ncy5tb2RlLCBrZXksIGl2YnVmZik7XG4gICAgICBsZXQgZW5jcnlwdGVkID0gY2lwaGVyLnVwZGF0ZSh2YWx1ZSwgJ3V0ZjgnLCAnaGV4Jyk7XG4gICAgICBlbmNyeXB0ZWQgKz0gY2lwaGVyLmZpbmFsKCdoZXgnKTtcbiAgICAgIHJldHVybiBpdmJ1ZmYudG9TdHJpbmcoJ2hleCcpICsgJzonICsgZW5jcnlwdGVkO1xuICAgIH0gY2F0Y2gge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpIGNvbnNvbGUuZXJyb3IoJ1tGQUJSSUM6S0VZXScsICdFbmNyeXB0aW9uIGZhaWxlZCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZGVjcnlwdCAodGV4dCkge1xuICAgIGlmICghdGV4dCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLnByaXZhdGUpIHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRlYnVnKSBjb25zb2xlLmVycm9yKCdbRkFCUklDOktFWV0nLCAnQ2Fubm90IGRlY3J5cHQgd2l0aG91dCBwcml2YXRlIGtleScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0ZXh0IGluc3RhbmNlb2YgQnVmZmVyKSB0ZXh0ID0gdGV4dC50b1N0cmluZygndXRmOCcpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycgfHwgIXRleHQuaW5jbHVkZXMoJzonKSkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBwYXJ0cyA9IHRleHQuc3BsaXQoJzonKTtcbiAgICAgIGNvbnN0IGl2SGV4ID0gcGFydHMuc2hpZnQoKTtcbiAgICAgIGlmICghL15bMC05YS1mQS1GXXszMn0kLy50ZXN0KGl2SGV4IHx8ICcnKSkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBibG9iSGV4ID0gcGFydHMuam9pbignOicpO1xuICAgICAgaWYgKCFibG9iSGV4IHx8ICEvXlswLTlhLWZBLUZdKyQvLnRlc3QoYmxvYkhleCkpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCBpdiA9IEJ1ZmZlci5mcm9tKGl2SGV4LCAnaGV4Jyk7XG4gICAgICBjb25zdCBibG9iID0gQnVmZmVyLmZyb20ocGFydHMuam9pbignOicpLCAnaGV4Jyk7XG4gICAgICAvLyBVc2UgdGhlIHNhbWUga2V5IGRlcml2YXRpb24gYXMgZW5jcnlwdFxuICAgICAgY29uc3Qga2V5ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpXG4gICAgICAgIC51cGRhdGUodGhpcy5wcml2YXRlLnRvU3RyaW5nKCdoZXgnKSlcbiAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdih0aGlzLnNldHRpbmdzLm1vZGUsIGtleSwgaXYpO1xuICAgICAgbGV0IGRlY3J5cHRlZCA9IGRlY2lwaGVyLnVwZGF0ZShibG9iLCAnaGV4JywgJ3V0ZjgnKTtcbiAgICAgIGRlY3J5cHRlZCArPSBkZWNpcGhlci5maW5hbCgndXRmOCcpO1xuICAgICAgcmV0dXJuIGRlY3J5cHRlZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRlYnVnKSBjb25zb2xlLmVycm9yKCdbRkFCUklDOktFWV0nLCAnRGVjcnlwdGlvbiBmYWlsZWQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9zaWduIChtc2cpIHtcbiAgICBpZiAodHlwZW9mIG1zZyAhPT0gJ3N0cmluZycpIG1zZyA9IEpTT04uc3RyaW5naWZ5KG1zZyk7XG4gICAgcmV0dXJuIHRoaXMuc2lnblNjaG5vcnIobXNnKTtcbiAgfVxuXG4gIF92ZXJpZnkgKG1zZywgc2lnKSB7XG4gICAgcmV0dXJuIHRoaXMudmVyaWZ5U2Nobm9ycihtc2csIHNpZyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IGEgbWVzc2FnZSdzIHNpZ25hdHVyZS5cbiAgICogQHBhcmFtIHtCdWZmZXJ8U3RyaW5nfSBtc2cgLSBUaGUgbWVzc2FnZSB0aGF0IHdhcyBzaWduZWRcbiAgICogQHBhcmFtIHtCdWZmZXJ8U3RyaW5nfSBzaWcgLSBUaGUgc2lnbmF0dXJlIHRvIHZlcmlmeVxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gV2hldGhlciB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkXG4gICAqL1xuICB2ZXJpZnkgKG1zZywgc2lnKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZlcmlmeShtc2csIHNpZyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgYSBtZXNzYWdlIHVzaW5nIFNjaG5vcnIgc2lnbmF0dXJlcyAoQklQMzQwKS5cbiAgICogQHBhcmFtIHtCdWZmZXJ8U3RyaW5nfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBzaWduXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IFRoZSBzaWduYXR1cmVcbiAgICovXG4gIHNpZ25TY2hub3JyIChtc2cpIHtcbiAgICAvLyBjb25zb2xlLmRlYnVnKCdzaWduaW5nIHNjaG5vcnI6JywgbXNnLCB0aGlzLnNldHRpbmdzKTtcbiAgICBpZiAoIXRoaXMucHJpdmF0ZSkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2lnbiB3aXRob3V0IHByaXZhdGUga2V5Jyk7XG5cbiAgICAvLyBDb252ZXJ0IG1lc3NhZ2UgdG8gQnVmZmVyIGlmIGl0J3MgYSBzdHJpbmdcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmlzQnVmZmVyKG1zZykgPyBtc2cgOiBCdWZmZXIuZnJvbShtc2cpO1xuXG4gICAgLy8gQ3JlYXRlIG1lc3NhZ2UgaGFzaFxuICAgIGNvbnN0IG1lc3NhZ2VIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShtZXNzYWdlQnVmZmVyKS5kaWdlc3QoKTtcblxuICAgIC8vIEdldCBwcml2YXRlIGtleSBhcyAzMi1ieXRlIGJ1ZmZlclxuICAgIGNvbnN0IHByaXZhdGVLZXlCdWZmZXIgPSBwcml2YXRlS2V5VG9CdWZmZXIodGhpcy5wcml2YXRlKTtcblxuICAgIC8vIFNpZ24gdXNpbmcgbm9ibGUtY3VydmVzIFNjaG5vcnIgKEJJUDM0MCkuIFplcm8gYXV4UmFuZCBmb3IgZGV0ZXJtaW5pc3RpYyBzaWduYXR1cmVzLlxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IG5vYmxlU2Nobm9yci5zaWduKG1lc3NhZ2VIYXNoLCBwcml2YXRlS2V5QnVmZmVyLCBCdWZmZXIuYWxsb2MoMzIpKTtcblxuICAgIC8vIEVuc3VyZSB3ZSByZXR1cm4gYSBCdWZmZXJcbiAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHNpZ25hdHVyZSkgPyBzaWduYXR1cmUgOiBCdWZmZXIuZnJvbShzaWduYXR1cmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIGEgcHJlLWNvbXB1dGVkIGhhc2ggdXNpbmcgU2Nobm9yciBzaWduYXR1cmVzIChCSVAzNDApLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBtZXNzYWdlIGhhcyBhbHJlYWR5IGJlZW4gaGFzaGVkIChlLmcuLCB3aXRoIGEgdGFnZ2VkIGhhc2gpLlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gbWVzc2FnZUhhc2ggLSBUaGUgcHJlLWNvbXB1dGVkIG1lc3NhZ2UgaGFzaCAoMzIgYnl0ZXMpXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IFRoZSBzaWduYXR1cmUgKDY0IGJ5dGVzKVxuICAgKi9cbiAgc2lnblNjaG5vcnJIYXNoIChtZXNzYWdlSGFzaCkge1xuICAgIGlmICghdGhpcy5wcml2YXRlKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzaWduIHdpdGhvdXQgcHJpdmF0ZSBrZXknKTtcbiAgICAvLyBiaXRjb2luanMtbGliIDcgY3J5cHRvIGhlbHBlcnMgcmV0dXJuIFVpbnQ4QXJyYXk7IGFjY2VwdCBCdWZmZXIgb3IgVWludDhBcnJheS5cbiAgICBjb25zdCBoYXNoID0gQnVmZmVyLmlzQnVmZmVyKG1lc3NhZ2VIYXNoKVxuICAgICAgPyBtZXNzYWdlSGFzaFxuICAgICAgOiAobWVzc2FnZUhhc2ggaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gQnVmZmVyLmZyb20obWVzc2FnZUhhc2gpIDogbnVsbCk7XG4gICAgaWYgKCFoYXNoIHx8IGhhc2gubGVuZ3RoICE9PSAzMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZXNzYWdlIGhhc2ggbXVzdCBiZSBhIDMyLWJ5dGUgQnVmZmVyJyk7XG4gICAgfVxuXG4gICAgLy8gR2V0IHByaXZhdGUga2V5IGFzIDMyLWJ5dGUgYnVmZmVyXG4gICAgY29uc3QgcHJpdmF0ZUtleUJ1ZmZlciA9IHByaXZhdGVLZXlUb0J1ZmZlcih0aGlzLnByaXZhdGUpO1xuXG4gICAgLy8gU2lnbiB1c2luZyBub2JsZS1jdXJ2ZXMgU2Nobm9yciAoQklQMzQwKS4gWmVybyBhdXhSYW5kIGZvciBkZXRlcm1pbmlzdGljIHNpZ25hdHVyZXMuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gbm9ibGVTY2hub3JyLnNpZ24oaGFzaCwgcHJpdmF0ZUtleUJ1ZmZlciwgQnVmZmVyLmFsbG9jKDMyKSk7XG5cbiAgICAvLyBFbnN1cmUgd2UgcmV0dXJuIGEgQnVmZmVyXG4gICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihzaWduYXR1cmUpID8gc2lnbmF0dXJlIDogQnVmZmVyLmZyb20oc2lnbmF0dXJlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBhIFNjaG5vcnIgc2lnbmF0dXJlIChCSVAzNDApLlxuICAgKiBAcGFyYW0ge0J1ZmZlcnxTdHJpbmd9IG1zZyAtIFRoZSBtZXNzYWdlIHRoYXQgd2FzIHNpZ25lZFxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gc2lnIC0gVGhlIHNpZ25hdHVyZSB0byB2ZXJpZnlcbiAgICogQHJldHVybnMge0Jvb2xlYW59IFdoZXRoZXIgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZFxuICAgKi9cbiAgdmVyaWZ5U2Nobm9yciAobXNnLCBzaWcpIHtcbiAgICAvLyBDb252ZXJ0IG1lc3NhZ2UgdG8gQnVmZmVyIGlmIGl0J3MgYSBzdHJpbmdcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gQnVmZmVyLmlzQnVmZmVyKG1zZykgPyBtc2cgOiBCdWZmZXIuZnJvbShtc2cpO1xuXG4gICAgLy8gQ3JlYXRlIG1lc3NhZ2UgaGFzaFxuICAgIGNvbnN0IG1lc3NhZ2VIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShtZXNzYWdlQnVmZmVyKS5kaWdlc3QoKTtcblxuICAgIC8vIEdldCB4LW9ubHkgcHVibGljIGtleSAoMzIgYnl0ZXMpIGZyb20gY29tcHJlc3NlZCBwdWJsaWMga2V5ICgzMyBieXRlcylcbiAgICAvLyBGb3IgU2Nobm9yciwgd2Ugb25seSBuZWVkIHRoZSB4IGNvb3JkaW5hdGUgKGZpcnN0IDMyIGJ5dGVzIGFmdGVyIHRoZSBwcmVmaXgpXG4gICAgY29uc3QgY29tcHJlc3NlZFB1YmtleSA9IEJ1ZmZlci5mcm9tKHRoaXMucHVibGljLmVuY29kZUNvbXByZXNzZWQoJ2hleCcpLCAnaGV4Jyk7XG4gICAgY29uc3QgeE9ubHlQdWJrZXkgPSBjb21wcmVzc2VkUHVia2V5LnNsaWNlKDEpOyAvLyBSZW1vdmUgdGhlIHByZWZpeCBieXRlXG5cbiAgICAvLyBFbnN1cmUgc2lnbmF0dXJlIGlzIGEgQnVmZmVyXG4gICAgY29uc3Qgc2lnQnVmZmVyID0gQnVmZmVyLmlzQnVmZmVyKHNpZykgPyBzaWcgOiBCdWZmZXIuZnJvbShzaWcpO1xuXG4gICAgLy8gVmVyaWZ5IHVzaW5nIG5vYmxlLWN1cnZlcyBTY2hub3JyIChCSVAzNDApXG4gICAgcmV0dXJuIG5vYmxlU2Nobm9yci52ZXJpZnkoc2lnQnVmZmVyLCBtZXNzYWdlSGFzaCwgeE9ubHlQdWJrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGEgU2Nobm9yciBzaWduYXR1cmUgd2l0aCBhIHByZS1jb21wdXRlZCBoYXNoIChCSVAzNDApLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBtZXNzYWdlIGhhcyBhbHJlYWR5IGJlZW4gaGFzaGVkIChlLmcuLCB3aXRoIGEgdGFnZ2VkIGhhc2gpLlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gbWVzc2FnZUhhc2ggLSBUaGUgcHJlLWNvbXB1dGVkIG1lc3NhZ2UgaGFzaCAoMzIgYnl0ZXMpXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzaWcgLSBUaGUgc2lnbmF0dXJlIHRvIHZlcmlmeSAoNjQgYnl0ZXMpXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBXaGV0aGVyIHRoZSBzaWduYXR1cmUgaXMgdmFsaWRcbiAgICovXG4gIHZlcmlmeVNjaG5vcnJIYXNoIChtZXNzYWdlSGFzaCwgc2lnKSB7XG4gICAgY29uc3QgaGFzaCA9IEJ1ZmZlci5pc0J1ZmZlcihtZXNzYWdlSGFzaClcbiAgICAgID8gbWVzc2FnZUhhc2hcbiAgICAgIDogKG1lc3NhZ2VIYXNoIGluc3RhbmNlb2YgVWludDhBcnJheSA/IEJ1ZmZlci5mcm9tKG1lc3NhZ2VIYXNoKSA6IG51bGwpO1xuICAgIGlmICghaGFzaCB8fCBoYXNoLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWVzc2FnZSBoYXNoIG11c3QgYmUgYSAzMi1ieXRlIEJ1ZmZlcicpO1xuICAgIH1cblxuICAgIC8vIEdldCB4LW9ubHkgcHVibGljIGtleSAoMzIgYnl0ZXMpIGZyb20gY29tcHJlc3NlZCBwdWJsaWMga2V5ICgzMyBieXRlcylcbiAgICBjb25zdCBjb21wcmVzc2VkUHVia2V5ID0gQnVmZmVyLmZyb20odGhpcy5wdWJsaWMuZW5jb2RlQ29tcHJlc3NlZCgnaGV4JyksICdoZXgnKTtcbiAgICBjb25zdCB4T25seVB1YmtleSA9IGNvbXByZXNzZWRQdWJrZXkuc2xpY2UoMSk7IC8vIFJlbW92ZSB0aGUgcHJlZml4IGJ5dGVcblxuICAgIC8vIEVuc3VyZSBzaWduYXR1cmUgaXMgYSBCdWZmZXJcbiAgICBjb25zdCBzaWdCdWZmZXIgPSBCdWZmZXIuaXNCdWZmZXIoc2lnKSA/IHNpZyA6IEJ1ZmZlci5mcm9tKHNpZyk7XG5cbiAgICAvLyBWZXJpZnkgdXNpbmcgbm9ibGUtY3VydmVzIFNjaG5vcnIgKEJJUDM0MClcbiAgICByZXR1cm4gbm9ibGVTY2hub3JyLnZlcmlmeShzaWdCdWZmZXIsIGhhc2gsIHhPbmx5UHVia2V5KTtcbiAgfVxuXG4gIGNvbW1pdCAoKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0geyAuLi50aGlzLnN0YXRlIH07XG4gICAgY29uc3Qgc3RhdGUgPSBuZXcgQWN0b3IocmVmZXJlbmNlKTtcbiAgICBjb25zdCBjb21taXQgPSB7XG4gICAgICB0eXBlOiAnS2V5Q29tbWl0JyxcbiAgICAgIGhhc2g6IHN0YXRlLmlkLFxuICAgICAgc2lnbmF0dXJlczogW11cbiAgICB9O1xuXG4gICAgLy8gU3RvcmUgY3VycmVudCBzdGF0ZSdzIGhhc2hcbiAgICB0aGlzLl9zdGF0ZS5oYXNoID0gc3RhdGUuaWQ7XG5cbiAgICAvLyBTaWduIHRoZSBjb21taXQgbWVzc2FnZSB1c2luZyB0aGUgY29uZmlndXJlZCBrZXlcbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLnNpZ24oY29tbWl0KTtcbiAgICBjb21taXQuc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZSk7XG5cbiAgICB0aGlzLmVtaXQoJ2NvbW1pdCcsIGNvbW1pdCk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhIGJ1ZmZlciBvZiBkYXRhIHVzaW5nIEJJUCAzNDA6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAzNDAubWVkaWF3aWtpXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIEJ1ZmZlciBvZiBkYXRhIHRvIHNpZ24uXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IFJlc3VsdGluZyBzaWduYXR1cmUgKDY0IGJ5dGVzKS5cbiAgICovXG4gIHNpZ24gKG1zZykge1xuICAgIHJldHVybiB0aGlzLl9zaWduKG1zZyk7XG4gIH1cblxuICBkZXJpdmUgKHBhdGggPSB0aGlzLnNldHRpbmdzLmRlcml2YXRpb24pIHtcbiAgICBpZiAoIXRoaXMubWFzdGVyKSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgZGVyaXZlIHdpdGhvdXQgYSBtYXN0ZXIga2V5LiAgUHJvdmlkZSBhIHNlZWQgcGhyYXNlIG9yIGFuIHhwcnYuJyk7XG5cbiAgICBjb25zdCBkZXJpdmVkID0gdGhpcy5tYXN0ZXIuZGVyaXZlUGF0aChwYXRoKTtcbiAgICAvLyBQcmVmZXIgZXh0ZW5kZWQga2V5cyBzbyBLZXkgaW5pdGlhbGl6ZXMgYXMgRlJPTV9YUFJWL0ZST01fWFBVQiAoa2VlcHMgLnhwdWIgZm9yXG4gICAgLy8gRmFicmljIHByb3RvY29sIGlkZW50aXR5IGxvZ2luIC8gd2F0Y2gtb25seSkuIFJhdyBwcml2YXRlK3B1YmxpYyBhbG9uZSBsb3NlcyB4cHViLlxuICAgIGlmIChkZXJpdmVkLnByaXZhdGVLZXkgJiYgdHlwZW9mIGRlcml2ZWQudG9CYXNlNTggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBuZXcgS2V5KHsgeHBydjogZGVyaXZlZC50b0Jhc2U1OCgpIH0pO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRlcml2ZWQubmV1dGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBuZXcgS2V5KHsgeHB1YjogZGVyaXZlZC5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgS2V5KHtcbiAgICAgIHByaXZhdGU6IGRlcml2ZWQucHJpdmF0ZUtleS50b1N0cmluZygnaGV4JyksXG4gICAgICBwdWJsaWM6IGRlcml2ZWQucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlY3VyZXMgdGhlIGtleSBieSBjbGVhcmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gZnJvbSBtZW1vcnkuXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUga2V5IGlzIG5vIGxvbmdlciBuZWVkZWRcbiAgICogdG8gcHJldmVudCBzZW5zaXRpdmUgZGF0YSBmcm9tIHJlbWFpbmluZyBpbiBtZW1vcnkuXG4gICAqL1xuICBzZWN1cmUgKCkge1xuICAgIC8vIFVwZGF0ZSBzdGF0ZSBiZWZvcmUgY2xlYXJpbmcga2V5IG1hdGVyaWFsLCBzbyBjb21taXQgY2FuIHN0aWxsIGJlIHNpZ25lZC5cbiAgICB0aGlzLl9zdGF0ZS5zdGF0dXMgPSAnc2VjdXJlZCc7XG4gICAgdGhpcy5jb21taXQoKTtcblxuICAgIC8vIENsZWFyIHNlbnNpdGl2ZSBrZXkgbWF0ZXJpYWxcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHRoaXMucHJpdmF0ZSkpIHtcbiAgICAgIHRoaXMucHJpdmF0ZS5maWxsKDApO1xuICAgIH1cblxuICAgIC8vIE51bGwgb3V0IHNlbnNpdGl2ZSBwcm9wZXJ0aWVzXG4gICAgdGhpcy5wcml2YXRlID0gbnVsbDtcbiAgICB0aGlzLnByaXZrZXkgPSBudWxsO1xuICAgIHRoaXMuc2VlZCA9IG51bGw7XG4gICAgdGhpcy5tYXN0ZXIgPSBudWxsO1xuXG4gICAgLy8gQ2xlYXIgYW55IGRlcml2ZWQga2V5c1xuICAgIHRoaXMueHBydiA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldCBwdWJrZXloYXNoICgpIHtcbiAgICBjb25zdCBpbnB1dCA9IEJ1ZmZlci5mcm9tKHRoaXMucHVia2V5LCAnaGV4Jyk7XG4gICAgcmV0dXJuIEhhc2gyNTYuZGlnZXN0KGlucHV0KTtcbiAgfVxuXG4gIGdldCBwdWJrZXkgKCkge1xuICAgIHJldHVybiB0aGlzLnB1YmxpYy5lbmNvZGVDb21wcmVzc2VkKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnRzIHRoZSBwcml2YXRlIGtleSBpbiBXYWxsZXQgSW1wb3J0IEZvcm1hdCAoV0lGKVxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcHJpdmF0ZSBrZXkgZW5jb2RlZCBpbiBXSUYgZm9ybWF0XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUga2V5IGRvZXNuJ3QgaGF2ZSBhIHByaXZhdGUgY29tcG9uZW50XG4gICAqL1xuICB0b1dJRiAoKSB7XG4gICAgaWYgKCF0aGlzLnByaXZhdGUpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4cG9ydCBXSUYgd2l0aG91dCBwcml2YXRlIGtleScpO1xuICAgIGNvbnN0IHByaXZhdGVLZXlCdWZmZXIgPSBwcml2YXRlS2V5VG9CdWZmZXIodGhpcy5wcml2YXRlKTtcblxuICAgIGNvbnN0IG5ldHdvcmsgPSB0aGlzLnNldHRpbmdzLm5ldHdvcmsgPT09ICdyZWd0ZXN0J1xuICAgICAgPyB0aGlzLnNldHRpbmdzLm5ldHdvcmtzLnRlc3RuZXRcbiAgICAgIDogdGhpcy5zZXR0aW5ncy5uZXR3b3Jrc1t0aGlzLnNldHRpbmdzLm5ldHdvcmtdIHx8IHRoaXMuc2V0dGluZ3MubmV0d29ya3MubWFpbm5ldDtcblxuICAgIGNvbnN0IHByZWZpeCA9IEJ1ZmZlci5mcm9tKFtuZXR3b3JrLndpZl0pO1xuICAgIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIHByZWZpeCxcbiAgICAgIHByaXZhdGVLZXlCdWZmZXIsXG4gICAgICBCdWZmZXIuZnJvbShbMHgwMV0pXG4gICAgXSk7XG5cbiAgICByZXR1cm4gZW5jb2RlQ2hlY2socGF5bG9hZCk7XG4gIH1cblxuICB0b0JpdGNvaW5BZGRyZXNzICgpIHtcbiAgICBpZiAoIXRoaXMucHVibGljKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZXJpdmUgQml0Y29pbiBhZGRyZXNzIHdpdGhvdXQgcHVibGljIGtleScpO1xuICAgIGNvbnN0IG5ldHdvcmsgPSB0aGlzLnNldHRpbmdzLm5ldHdvcmsgPT09ICdyZWd0ZXN0J1xuICAgICAgPyB0aGlzLnNldHRpbmdzLm5ldHdvcmtzLnRlc3RuZXRcbiAgICAgIDogdGhpcy5zZXR0aW5ncy5uZXR3b3Jrc1t0aGlzLnNldHRpbmdzLm5ldHdvcmtdIHx8IHRoaXMuc2V0dGluZ3MubmV0d29ya3MubWFpbm5ldDtcblxuICAgIGNvbnN0IHAycGtoID0gcGF5bWVudHMucDJwa2goe1xuICAgICAgcHVia2V5OiBCdWZmZXIuZnJvbSh0aGlzLnB1YmxpYy5lbmNvZGUoJ2hleCcpLCAnaGV4JyksXG4gICAgICBuZXR3b3JrOiBuZXR3b3JrXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcDJwa2guYWRkcmVzcztcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEtleTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/key.js\n\n}")},"./node_modules/@fabric/core/types/machine.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n // commit (.) and continue (,) ⇒ ;\n\n// Constants\nconst {\n MACHINE_MAX_MEMORY\n} = __webpack_require__(/*! ../constants */ \"./node_modules/@fabric/core/constants.js\");\n\n// Dependencies\nconst monitor = __webpack_require__(/*! fast-json-patch */ \"./node_modules/fast-json-patch/index.mjs\");\nconst BN = __webpack_require__(/*! bn.js */ \"./node_modules/bn.js/lib/bn.js\");\n\n// Fabric Types\nconst Actor = __webpack_require__(/*! ./actor */ \"./node_modules/@fabric/core/types/actor.js\");\nconst State = __webpack_require__(/*! ./state */ \"./node_modules/@fabric/core/types/state.js\");\nconst Key = __webpack_require__(/*! ./key */ \"./node_modules/@fabric/core/types/key.js\");\n\n// Fabric Functions\nconst {\n createDefaultOpcodeRegistry,\n defineOpcode: defineOpcodeEntry,\n resolveOpcodeContract\n} = __webpack_require__(/*! ../functions/opcodeRegistry */ \"./node_modules/@fabric/core/functions/opcodeRegistry.js\");\nconst {\n normalizeOpcodeAllowList,\n opcodesFromGenesis,\n opcodeAllowed,\n assertStepsAllowed\n} = __webpack_require__(/*! ../functions/opcodeAllowList */ \"./node_modules/@fabric/core/functions/opcodeAllowList.js\");\n\n// Strict JSON\nconst { parsePersistedJson } = __webpack_require__(/*! ../functions/wireJson */ \"./node_modules/@fabric/core/functions/wireJson.js\");\n\n/**\n * @classdesc Deterministic virtual machine layer extending {@link Actor}: script/stack, fixed memory buffer,\n * clock, and a {@link Key}-backed generator for reproducible “random” bits (sip). Consumes {@link State}-signed\n * instruction entries from {@link Fabric#push} — not the same as P2P {@link Message} dispatch (see\n * types/message.js).\n * @class Machine\n * @extends Actor\n */\nclass Machine extends Actor {\n /**\n * Parse a JSON object of Buffer-like entries into an array of {@link Buffer}s (legacy wire / script helper).\n * @param {string} [input='']\n * @returns {Buffer[]}\n */\n static fromObjectString (input = '') {\n if (!input) throw new Error('Must provide input.');\n if (typeof input !== 'string') input = JSON.stringify(input);\n const result = [];\n const object = parsePersistedJson(input);\n\n for (const i in object) {\n let element = object[i];\n\n if (element instanceof Array) {\n element = Buffer.from(element);\n } else {\n element = Buffer.from(element.data);\n }\n\n result.push(element);\n }\n\n return result;\n }\n\n /**\n * Create a Machine.\n * @param {Object} settings Run-time configuration.\n */\n constructor (settings) {\n super(settings);\n\n // settings\n this.settings = Object.assign({\n path: './stores/machine',\n clock: 0,\n debug: false,\n deterministic: true,\n interval: 60, // seconds\n key: null,\n precision: 8,\n script: [],\n type: 'x86',\n // Opcode allow-list. Null or empty = unrestricted (legacy soft compute).\n allowedOpcodes: null\n }, settings);\n\n // machine key\n this.key = new Key(this.settings.key);\n\n // internal clock\n this.clock = this.settings.clock;\n\n // deterministic entropy and RNG\n this.entropy = this.sip();\n this.memory = Buffer.alloc(MACHINE_MAX_MEMORY);\n\n this.known = {}; // definitions\n this.opcodes = createDefaultOpcodeRegistry();\n this.stack = []; // output\n this.history = []; // State tree\n this._allowedOpcodes = normalizeOpcodeAllowList(this.settings.allowedOpcodes || []);\n\n this._state = {\n content: {\n clock: this.clock\n },\n status: 'PAUSED'\n };\n\n // watch for changes\n this.observer = monitor.observe(this._state.content);\n\n // ensure chainability\n return this;\n }\n\n get interval () {\n return this.settings.interval;\n }\n\n get frequency () {\n return (1 / this.interval).toFixed(this.settings.precision);\n }\n\n get script () {\n return this.settings.script;\n }\n\n get tip () {\n this.log(`tip requested, history: ${JSON.stringify(this.history)}`);\n return this.history[this.history.length - 1] || null;\n }\n\n /**\n * Active opcode allow-list (empty = unrestricted).\n * @returns {string[]}\n */\n get allowedOpcodes () {\n return this._allowedOpcodes.slice();\n }\n\n /**\n * Restrict `define` / `loadProgram` / `compute` to this opcode set.\n * Empty / null clears the restriction (legacy soft unknown-op behavior).\n * @param {Iterable<*>|null} list\n * @returns {Machine}\n */\n setAllowedOpcodes (list) {\n this._allowedOpcodes = normalizeOpcodeAllowList(list || []);\n this.settings.allowedOpcodes = this._allowedOpcodes.length\n ? this._allowedOpcodes.slice()\n : null;\n return this;\n }\n\n /**\n * Apply ARC / Program genesis `primitives.opcodes` as the Machine allow-list.\n * No-op when genesis has no opcodes (keeps unrestricted).\n * @param {object} [genesis]\n * @returns {Machine}\n */\n applyGenesisOpcodes (genesis) {\n const list = opcodesFromGenesis(genesis);\n if (list.length) this.setAllowedOpcodes(list);\n return this;\n }\n\n bit () {\n return this.key.generator.next.bits(1);\n }\n\n /**\n * Get `n` bits of deterministic random data.\n * @param {Number} [n=128] Number of bits to retrieve.\n * @return {Number} Random bits from {@link Generator}.\n */\n sip (n = 128) {\n const self = this;\n return new BN([...Array(n)].map(() => {\n return self.bit().toString();\n }).join(''), 2).toString(16);\n }\n\n /**\n * Get `n` bytes of deterministic random data.\n * @param {Number} [n=32] Number of bytes to retrieve.\n * @return {Number} Random bytes from {@link Generator}.\n */\n slurp (n = 32) {\n const self = this;\n return new BN([...Array(n * 8)].map(() => {\n return self.bit();\n }).join(''), 2).toString(16);\n }\n\n validateCycle (_i) {\n return false;\n }\n\n /**\n * Computes the next \"step\" for our current Vector. Analagous to `sum`.\n * The top item on the stack is always the memory held at current position,\n * so counts should always begin with 0.\n * @param {Object} input Value to pass as input.\n * @return {Machine} Instance of the resulting machine.\n */\n async compute (input) {\n ++this.clock;\n\n this.emit('tick', this.clock);\n\n const allow = this._allowedOpcodes;\n const restricted = allow && allow.length > 0;\n\n for (const i in this.script) {\n const instruction = this.script[i];\n const name = String(instruction == null ? '' : instruction);\n if (restricted && !opcodeAllowed(allow, name)) {\n throw new Error(`opcode not in primitives.opcodes allow-list: ${name}`);\n }\n const method = this.known[instruction];\n\n if (method) {\n const data = method.call(this.state, input);\n this.stack.push(data);\n } else if (restricted) {\n throw new Error(`opcode not defined (fail closed under allow-list): ${name}`);\n } else {\n this.stack.push(instruction | 0);\n }\n }\n\n this._state.content = (this.stack.length)\n ? this.stack[this.stack.length - 1]\n : this._state.content;\n\n this._result = this.state;\n this.commit();\n\n return this;\n }\n\n asBuffer () {\n const data = this.serialize(this.state);\n return Buffer.from(data);\n }\n\n // register a local function\n define (name, op, definition = {}) {\n const opName = String(name == null ? '' : name);\n if (!opName) throw new Error('opcode name required');\n if (this._allowedOpcodes && this._allowedOpcodes.length\n && !opcodeAllowed(this._allowedOpcodes, opName)) {\n throw new Error(`define rejected: opcode not in primitives.opcodes allow-list: ${opName}`);\n }\n if (typeof op !== 'function') {\n throw new Error(`define requires a function for opcode: ${opName}`);\n }\n this.known[opName] = op.bind(this.state);\n defineOpcodeEntry(this.opcodes, opName, Object.assign({}, definition, {\n implementation: true\n }));\n return this.known[opName];\n }\n\n defineOpcode (name, op, definition = {}) {\n return this.define(name, op, definition);\n }\n\n defineBitcoinOpcode (name, op, definition = {}) {\n return this.define(name, op, Object.assign({}, definition, { family: 'bitcoin' }));\n }\n\n defineFabricOpcode (name, op, definition = {}) {\n return this.define(name, op, Object.assign({}, definition, { family: 'fabric' }));\n }\n\n compileOpcodeContract (body = '') {\n const resolved = resolveOpcodeContract(this.opcodes, body);\n if (resolved.unknown.length) {\n throw new Error(`Unknown opcodes in contract: ${resolved.unknown.join(', ')}`);\n }\n return resolved.lines;\n }\n\n /**\n * Parse program manifest v1 (former DistributedExecution.parseDistributedManifestV1).\n * @param {Object} raw\n * @param {Program|null} [program] When provided, programId/hash must match.\n * @returns {{ok: boolean, error: (string|undefined), manifest: (Object|undefined)}}\n */\n parseManifest (raw, program = null) {\n const { parseProgramManifestV1 } = __webpack_require__(/*! ../functions/fabricProgramManifest */ \"./node_modules/@fabric/core/functions/fabricProgramManifest.js\");\n const parsed = parseProgramManifestV1(raw);\n if (!parsed.ok) return parsed;\n if (program) {\n const hash = program.programHash || (typeof program.hash === 'function' ? program.hash() : null);\n if (hash && parsed.manifest.programHash !== hash) {\n return { ok: false, error: 'manifest programHash does not match Program' };\n }\n }\n return parsed;\n }\n\n /**\n * Load a {@link Program} onto this machine (sets script steps).\n * When an opcode allow-list is active (ctor `allowedOpcodes`,\n * {@link Machine#setAllowedOpcodes}, {@link Machine#applyGenesisOpcodes},\n * or Program/genesis `primitives.opcodes`), steps and javascript `source`\n * keys must be listed — fail closed.\n * @param {Program|object} program\n * @param {Object} [opts]\n * @param {Object} [opts.genesis] ARC genesis; may supply `primitives.opcodes` allow-list\n * @returns {Machine}\n */\n loadProgram (program, opts = {}) {\n const Program = __webpack_require__(/*! ./program */ \"./node_modules/@fabric/core/types/program.js\");\n const prog = program instanceof Program ? program : Program.from(program || {});\n const compiled = prog.compile();\n if (!compiled.ok) {\n throw new Error(compiled.error || 'program compile failed');\n }\n\n // Program or caller genesis may install an allow-list when unrestricted.\n const fromExtra = normalizeOpcodeAllowList(\n opcodesFromGenesis(opts.genesis || {})\n .concat(opcodesFromGenesis(prog))\n .concat(opcodesFromGenesis(prog.settings || {}))\n );\n if (fromExtra.length && !(this._allowedOpcodes && this._allowedOpcodes.length)) {\n this.setAllowedOpcodes(fromExtra);\n }\n\n const steps = prog.steps.slice();\n const stepCheck = assertStepsAllowed(this._allowedOpcodes, steps);\n if (!stepCheck.ok) throw new Error(stepCheck.error);\n\n if (prog.language === 'javascript' && prog.source && typeof prog.source === 'object' &&\n !Array.isArray(prog.source)) {\n for (const [name, fn] of Object.entries(prog.source)) {\n if (typeof fn === 'function') this.define(name, fn);\n }\n }\n this.settings.script = steps;\n this._program = prog;\n return this;\n }\n\n /**\n * Load and compute a Program; return stack tip + run commitment for L1 binding.\n * @param {Program|Object} program\n * @param {*} [input]\n * @param {Object} [opts]\n * @param {Object} [opts.genesis] ARC genesis for `primitives.opcodes` allow-list\n * @returns {Promise.<{ok: boolean, stack: Array, tip: *, trace: Array, runCommitmentHex: (string|null), error: (string|undefined)}>}\n */\n async runProgram (program, input, opts = {}) {\n try {\n const Program = __webpack_require__(/*! ./program */ \"./node_modules/@fabric/core/types/program.js\");\n const prog = program instanceof Program ? program : Program.from(program || {});\n if (prog.language === 'fabric-execution') {\n const {\n runExecutionProgram\n } = __webpack_require__(/*! ../functions/executionProgramRunner */ \"./node_modules/@fabric/core/functions/executionProgramRunner.js\");\n if (opts.genesis) this.applyGenesisOpcodes(opts.genesis);\n const src = prog.settings.source && typeof prog.settings.source === 'object'\n ? prog.settings.source\n : program;\n const result = runExecutionProgram(src, Object.assign({}, opts, {\n machine: this,\n allowedOpcodes: this._allowedOpcodes\n }));\n return {\n ok: result.ok,\n stack: result.stack || [],\n tip: result.tip != null\n ? result.tip\n : (result.stack && result.stack.length ? result.stack[result.stack.length - 1] : null),\n trace: result.trace || [],\n runCommitmentHex: result.runCommitmentHex || null,\n programHash: result.programHash || null,\n stepsExecuted: result.stepsExecuted,\n error: result.error,\n program: result.program || prog\n };\n }\n this.loadProgram(program, opts);\n const beforeLen = this.stack.length;\n await this.compute(input);\n const trace = this.stack.slice(beforeLen);\n const tip = this.stack.length ? this.stack[this.stack.length - 1] : null;\n const runCommitmentHex = this._program\n ? this._program.runCommitmentHex({ tip, stack: trace })\n : null;\n return {\n ok: true,\n stack: this.stack.slice(),\n tip,\n trace,\n runCommitmentHex,\n programHash: this._program ? this._program.programHash : null,\n program: this._program || null\n };\n } catch (err) {\n return {\n ok: false,\n stack: this.stack.slice(),\n tip: null,\n trace: [],\n runCommitmentHex: null,\n programHash: null,\n error: err && err.message ? err.message : String(err)\n };\n }\n }\n\n applyOperation (op) {\n monitor.applyOperation(this.state, op);\n }\n\n commit () {\n if (!this.history) this.history = [];\n if (!this.observer) return false;\n\n const changes = monitor.generate(this.observer);\n\n if (changes && changes.length) {\n let vector = new State({\n '@type': 'Change',\n '@data': changes,\n method: 'patch',\n parent: this.id,\n params: changes\n });\n\n this.history.push(vector);\n\n this.emit('transaction', vector);\n this.emit('changes', changes);\n }\n\n return changes;\n }\n\n async start () {\n this.status = 'STARTING';\n const f = this.settings.frequency;\n const fromFreq = (typeof f === 'number' && Number.isFinite(f)) ? f * 1000 : NaN;\n const intervalSec = (typeof this.settings.interval === 'number' && Number.isFinite(this.settings.interval))\n ? this.settings.interval\n : 60;\n const ms = Number.isFinite(fromFreq) && fromFreq > 0 ? fromFreq : Math.max(1, intervalSec * 1000);\n this._governor = setInterval(this.compute.bind(this), ms);\n this.status = 'STARTED';\n return this;\n }\n\n async stop () {\n this.status = 'STOPPING';\n if (this._governor) clearInterval(this._governor);\n this.status = 'STOPPED';\n return this;\n }\n}\n\nmodule.exports = Machine;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL21hY2hpbmUuanMiLCJtYXBwaW5ncyI6IjtBQUFhLENBQUM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsRUFBRSxFQUFFLG1CQUFPLENBQUMsOERBQWM7O0FBRTFCO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsaUVBQWlCO0FBQ3pDLFdBQVcsbUJBQU8sQ0FBQyw2Q0FBTzs7QUFFMUI7QUFDQSxjQUFjLG1CQUFPLENBQUMsMkRBQVM7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLDJEQUFTO0FBQy9CLFlBQVksbUJBQU8sQ0FBQyx1REFBTzs7QUFFM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsRUFBRSxtQkFBTyxDQUFDLDRGQUE2QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxFQUFFLG1CQUFPLENBQUMsOEZBQThCOztBQUUxQztBQUNBLFFBQVEscUJBQXFCLEVBQUUsbUJBQU8sQ0FBQyxnRkFBdUI7O0FBRTlEO0FBQ0EsOEVBQThFLFlBQVk7QUFDMUYsaUJBQWlCLFVBQVUsK0VBQStFLFlBQVk7QUFDdEgsNkJBQTZCLG1CQUFtQix1QkFBdUIsZUFBZTtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRUFBa0UsYUFBYTtBQUMvRSxhQUFhLFFBQVE7QUFDckIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLE1BQU07QUFDeEIsUUFBUTtBQUNSLGtCQUFrQixNQUFNO0FBQ3hCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFB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LGVBQWUsVUFBVSw0R0FBNEc7QUFDckk7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQSxzQkFBc0IsbUJBQU8sQ0FBQywrREFBVztBQUN6QyxvRkFBb0Y7QUFDcEY7QUFDQTtBQUNBO0FBQ0EsVUFBVSxFQUFFLG1CQUFPLENBQUMsNEdBQXFDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFO0FBQ2hFO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxtQkFBbUI7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvdHlwZXMvbWFjaGluZS5qcz85YjU0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JzsgLy8gY29tbWl0ICguKSBhbmQgY29udGludWUgKCwpIOKHkiA7XG5cbi8vIENvbnN0YW50c1xuY29uc3Qge1xuICBNQUNISU5FX01BWF9NRU1PUllcbn0gPSByZXF1aXJlKCcuLi9jb25zdGFudHMnKTtcblxuLy8gRGVwZW5kZW5jaWVzXG5jb25zdCBtb25pdG9yID0gcmVxdWlyZSgnZmFzdC1qc29uLXBhdGNoJyk7XG5jb25zdCBCTiA9IHJlcXVpcmUoJ2JuLmpzJyk7XG5cbi8vIEZhYnJpYyBUeXBlc1xuY29uc3QgQWN0b3IgPSByZXF1aXJlKCcuL2FjdG9yJyk7XG5jb25zdCBTdGF0ZSA9IHJlcXVpcmUoJy4vc3RhdGUnKTtcbmNvbnN0IEtleSA9IHJlcXVpcmUoJy4va2V5Jyk7XG5cbi8vIEZhYnJpYyBGdW5jdGlvbnNcbmNvbnN0IHtcbiAgY3JlYXRlRGVmYXVsdE9wY29kZVJlZ2lzdHJ5LFxuICBkZWZpbmVPcGNvZGU6IGRlZmluZU9wY29kZUVudHJ5LFxuICByZXNvbHZlT3Bjb2RlQ29udHJhY3Rcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvb3Bjb2RlUmVnaXN0cnknKTtcbmNvbnN0IHtcbiAgbm9ybWFsaXplT3Bjb2RlQWxsb3dMaXN0LFxuICBvcGNvZGVzRnJvbUdlbmVzaXMsXG4gIG9wY29kZUFsbG93ZWQsXG4gIGFzc2VydFN0ZXBzQWxsb3dlZFxufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9vcGNvZGVBbGxvd0xpc3QnKTtcblxuLy8gU3RyaWN0IEpTT05cbmNvbnN0IHsgcGFyc2VQZXJzaXN0ZWRKc29uIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvd2lyZUpzb24nKTtcblxuLyoqXG4gKiBAY2xhc3NkZXNjIERldGVybWluaXN0aWMgPHN0cm9uZz52aXJ0dWFsIG1hY2hpbmU8L3N0cm9uZz4gbGF5ZXIgZXh0ZW5kaW5nIHtAbGluayBBY3Rvcn06IHNjcmlwdC9zdGFjaywgZml4ZWQgbWVtb3J5IGJ1ZmZlcixcbiAqIGNsb2NrLCBhbmQgYSB7QGxpbmsgS2V5fS1iYWNrZWQgZ2VuZXJhdG9yIGZvciByZXByb2R1Y2libGUg4oCccmFuZG9t4oCdIGJpdHMgKDxjb2RlPnNpcDwvY29kZT4pLiBDb25zdW1lcyB7QGxpbmsgU3RhdGV9LXNpZ25lZFxuICogaW5zdHJ1Y3Rpb24gZW50cmllcyBmcm9tIHtAbGluayBGYWJyaWMjcHVzaH0g4oCUIG5vdCB0aGUgc2FtZSBhcyBQMlAge0BsaW5rIE1lc3NhZ2V9IGRpc3BhdGNoIChzZWVcbiAqIDxjb2RlPnR5cGVzL21lc3NhZ2UuanM8L2NvZGU+KS5cbiAqIEBjbGFzcyBNYWNoaW5lXG4gKiBAZXh0ZW5kcyBBY3RvclxuICovXG5jbGFzcyBNYWNoaW5lIGV4dGVuZHMgQWN0b3Ige1xuICAvKipcbiAgICogUGFyc2UgYSBKU09OIG9iamVjdCBvZiBCdWZmZXItbGlrZSBlbnRyaWVzIGludG8gYW4gYXJyYXkgb2Yge0BsaW5rIEJ1ZmZlcn1zIChsZWdhY3kgd2lyZSAvIHNjcmlwdCBoZWxwZXIpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2lucHV0PScnXVxuICAgKiBAcmV0dXJucyB7QnVmZmVyW119XG4gICAqL1xuICBzdGF0aWMgZnJvbU9iamVjdFN0cmluZyAoaW5wdXQgPSAnJykge1xuICAgIGlmICghaW5wdXQpIHRocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGlucHV0LicpO1xuICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSBpbnB1dCA9IEpTT04uc3RyaW5naWZ5KGlucHV0KTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCBvYmplY3QgPSBwYXJzZVBlcnNpc3RlZEpzb24oaW5wdXQpO1xuXG4gICAgZm9yIChjb25zdCBpIGluIG9iamVjdCkge1xuICAgICAgbGV0IGVsZW1lbnQgPSBvYmplY3RbaV07XG5cbiAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgZWxlbWVudCA9IEJ1ZmZlci5mcm9tKGVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudCA9IEJ1ZmZlci5mcm9tKGVsZW1lbnQuZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdC5wdXNoKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTWFjaGluZS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHNldHRpbmdzIFJ1bi10aW1lIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoc2V0dGluZ3MpIHtcbiAgICBzdXBlcihzZXR0aW5ncyk7XG5cbiAgICAvLyBzZXR0aW5nc1xuICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIHBhdGg6ICcuL3N0b3Jlcy9tYWNoaW5lJyxcbiAgICAgIGNsb2NrOiAwLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgICAgZGV0ZXJtaW5pc3RpYzogdHJ1ZSxcbiAgICAgIGludGVydmFsOiA2MCwgLy8gc2Vjb25kc1xuICAgICAga2V5OiBudWxsLFxuICAgICAgcHJlY2lzaW9uOiA4LFxuICAgICAgc2NyaXB0OiBbXSxcbiAgICAgIHR5cGU6ICd4ODYnLFxuICAgICAgLy8gT3Bjb2RlIGFsbG93LWxpc3QuIE51bGwgb3IgZW1wdHkgPSB1bnJlc3RyaWN0ZWQgKGxlZ2FjeSBzb2Z0IGNvbXB1dGUpLlxuICAgICAgYWxsb3dlZE9wY29kZXM6IG51bGxcbiAgICB9LCBzZXR0aW5ncyk7XG5cbiAgICAvLyBtYWNoaW5lIGtleVxuICAgIHRoaXMua2V5ID0gbmV3IEtleSh0aGlzLnNldHRpbmdzLmtleSk7XG5cbiAgICAvLyBpbnRlcm5hbCBjbG9ja1xuICAgIHRoaXMuY2xvY2sgPSB0aGlzLnNldHRpbmdzLmNsb2NrO1xuXG4gICAgLy8gZGV0ZXJtaW5pc3RpYyBlbnRyb3B5IGFuZCBSTkdcbiAgICB0aGlzLmVudHJvcHkgPSB0aGlzLnNpcCgpO1xuICAgIHRoaXMubWVtb3J5ID0gQnVmZmVyLmFsbG9jKE1BQ0hJTkVfTUFYX01FTU9SWSk7XG5cbiAgICB0aGlzLmtub3duID0ge307IC8vIGRlZmluaXRpb25zXG4gICAgdGhpcy5vcGNvZGVzID0gY3JlYXRlRGVmYXVsdE9wY29kZVJlZ2lzdHJ5KCk7XG4gICAgdGhpcy5zdGFjayA9IFtdOyAvLyBvdXRwdXRcbiAgICB0aGlzLmhpc3RvcnkgPSBbXTsgLy8gU3RhdGUgdHJlZVxuICAgIHRoaXMuX2FsbG93ZWRPcGNvZGVzID0gbm9ybWFsaXplT3Bjb2RlQWxsb3dMaXN0KHRoaXMuc2V0dGluZ3MuYWxsb3dlZE9wY29kZXMgfHwgW10pO1xuXG4gICAgdGhpcy5fc3RhdGUgPSB7XG4gICAgICBjb250ZW50OiB7XG4gICAgICAgIGNsb2NrOiB0aGlzLmNsb2NrXG4gICAgICB9LFxuICAgICAgc3RhdHVzOiAnUEFVU0VEJ1xuICAgIH07XG5cbiAgICAvLyB3YXRjaCBmb3IgY2hhbmdlc1xuICAgIHRoaXMub2JzZXJ2ZXIgPSBtb25pdG9yLm9ic2VydmUodGhpcy5fc3RhdGUuY29udGVudCk7XG5cbiAgICAvLyBlbnN1cmUgY2hhaW5hYmlsaXR5XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQgaW50ZXJ2YWwgKCkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmludGVydmFsO1xuICB9XG5cbiAgZ2V0IGZyZXF1ZW5jeSAoKSB7XG4gICAgcmV0dXJuICgxIC8gdGhpcy5pbnRlcnZhbCkudG9GaXhlZCh0aGlzLnNldHRpbmdzLnByZWNpc2lvbik7XG4gIH1cblxuICBnZXQgc2NyaXB0ICgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5zY3JpcHQ7XG4gIH1cblxuICBnZXQgdGlwICgpIHtcbiAgICB0aGlzLmxvZyhgdGlwIHJlcXVlc3RlZCwgaGlzdG9yeTogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmhpc3RvcnkpfWApO1xuICAgIHJldHVybiB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDFdIHx8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQWN0aXZlIG9wY29kZSBhbGxvdy1saXN0IChlbXB0eSA9IHVucmVzdHJpY3RlZCkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGdldCBhbGxvd2VkT3Bjb2RlcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93ZWRPcGNvZGVzLnNsaWNlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdHJpY3QgYGRlZmluZWAgLyBgbG9hZFByb2dyYW1gIC8gYGNvbXB1dGVgIHRvIHRoaXMgb3Bjb2RlIHNldC5cbiAgICogRW1wdHkgLyBudWxsIGNsZWFycyB0aGUgcmVzdHJpY3Rpb24gKGxlZ2FjeSBzb2Z0IHVua25vd24tb3AgYmVoYXZpb3IpLlxuICAgKiBAcGFyYW0ge0l0ZXJhYmxlPCo+fG51bGx9IGxpc3RcbiAgICogQHJldHVybnMge01hY2hpbmV9XG4gICAqL1xuICBzZXRBbGxvd2VkT3Bjb2RlcyAobGlzdCkge1xuICAgIHRoaXMuX2FsbG93ZWRPcGNvZGVzID0gbm9ybWFsaXplT3Bjb2RlQWxsb3dMaXN0KGxpc3QgfHwgW10pO1xuICAgIHRoaXMuc2V0dGluZ3MuYWxsb3dlZE9wY29kZXMgPSB0aGlzLl9hbGxvd2VkT3Bjb2Rlcy5sZW5ndGhcbiAgICAgID8gdGhpcy5fYWxsb3dlZE9wY29kZXMuc2xpY2UoKVxuICAgICAgOiBudWxsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IEFSQyAvIFByb2dyYW0gZ2VuZXNpcyBgcHJpbWl0aXZlcy5vcGNvZGVzYCBhcyB0aGUgTWFjaGluZSBhbGxvdy1saXN0LlxuICAgKiBOby1vcCB3aGVuIGdlbmVzaXMgaGFzIG5vIG9wY29kZXMgKGtlZXBzIHVucmVzdHJpY3RlZCkuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZ2VuZXNpc11cbiAgICogQHJldHVybnMge01hY2hpbmV9XG4gICAqL1xuICBhcHBseUdlbmVzaXNPcGNvZGVzIChnZW5lc2lzKSB7XG4gICAgY29uc3QgbGlzdCA9IG9wY29kZXNGcm9tR2VuZXNpcyhnZW5lc2lzKTtcbiAgICBpZiAobGlzdC5sZW5ndGgpIHRoaXMuc2V0QWxsb3dlZE9wY29kZXMobGlzdCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBiaXQgKCkge1xuICAgIHJldHVybiB0aGlzLmtleS5nZW5lcmF0b3IubmV4dC5iaXRzKDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBgbmAgYml0cyBvZiBkZXRlcm1pbmlzdGljIHJhbmRvbSBkYXRhLlxuICAgKiBAcGFyYW0gIHtOdW1iZXJ9IFtuPTEyOF0gTnVtYmVyIG9mIGJpdHMgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm4ge051bWJlcn0gICAgICAgIFJhbmRvbSBiaXRzIGZyb20ge0BsaW5rIEdlbmVyYXRvcn0uXG4gICAqL1xuICBzaXAgKG4gPSAxMjgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gbmV3IEJOKFsuLi5BcnJheShuKV0ubWFwKCgpID0+IHtcbiAgICAgIHJldHVybiBzZWxmLmJpdCgpLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbignJyksIDIpLnRvU3RyaW5nKDE2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYG5gIGJ5dGVzIG9mIGRldGVybWluaXN0aWMgcmFuZG9tIGRhdGEuXG4gICAqIEBwYXJhbSAge051bWJlcn0gW249MzJdIE51bWJlciBvZiBieXRlcyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgUmFuZG9tIGJ5dGVzIGZyb20ge0BsaW5rIEdlbmVyYXRvcn0uXG4gICAqL1xuICBzbHVycCAobiA9IDMyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBCTihbLi4uQXJyYXkobiAqIDgpXS5tYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHNlbGYuYml0KCk7XG4gICAgfSkuam9pbignJyksIDIpLnRvU3RyaW5nKDE2KTtcbiAgfVxuXG4gIHZhbGlkYXRlQ3ljbGUgKF9pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSBuZXh0IFwic3RlcFwiIGZvciBvdXIgY3VycmVudCBWZWN0b3IuICBBbmFsYWdvdXMgdG8gYHN1bWAuXG4gICAqIFRoZSB0b3AgaXRlbSBvbiB0aGUgc3RhY2sgaXMgYWx3YXlzIHRoZSBtZW1vcnkgaGVsZCBhdCBjdXJyZW50IHBvc2l0aW9uLFxuICAgKiBzbyBjb3VudHMgc2hvdWxkIGFsd2F5cyBiZWdpbiB3aXRoIDAuXG4gICAqIEBwYXJhbSAge09iamVjdH0gaW5wdXQgVmFsdWUgdG8gcGFzcyBhcyBpbnB1dC5cbiAgICogQHJldHVybiB7TWFjaGluZX0gSW5zdGFuY2Ugb2YgdGhlIHJlc3VsdGluZyBtYWNoaW5lLlxuICAgKi9cbiAgYXN5bmMgY29tcHV0ZSAoaW5wdXQpIHtcbiAgICArK3RoaXMuY2xvY2s7XG5cbiAgICB0aGlzLmVtaXQoJ3RpY2snLCB0aGlzLmNsb2NrKTtcblxuICAgIGNvbnN0IGFsbG93ID0gdGhpcy5fYWxsb3dlZE9wY29kZXM7XG4gICAgY29uc3QgcmVzdHJpY3RlZCA9IGFsbG93ICYmIGFsbG93Lmxlbmd0aCA+IDA7XG5cbiAgICBmb3IgKGNvbnN0IGkgaW4gdGhpcy5zY3JpcHQpIHtcbiAgICAgIGNvbnN0IGluc3RydWN0aW9uID0gdGhpcy5zY3JpcHRbaV07XG4gICAgICBjb25zdCBuYW1lID0gU3RyaW5nKGluc3RydWN0aW9uID09IG51bGwgPyAnJyA6IGluc3RydWN0aW9uKTtcbiAgICAgIGlmIChyZXN0cmljdGVkICYmICFvcGNvZGVBbGxvd2VkKGFsbG93LCBuYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG9wY29kZSBub3QgaW4gcHJpbWl0aXZlcy5vcGNvZGVzIGFsbG93LWxpc3Q6ICR7bmFtZX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMua25vd25baW5zdHJ1Y3Rpb25dO1xuXG4gICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBtZXRob2QuY2FsbCh0aGlzLnN0YXRlLCBpbnB1dCk7XG4gICAgICAgIHRoaXMuc3RhY2sucHVzaChkYXRhKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdHJpY3RlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG9wY29kZSBub3QgZGVmaW5lZCAoZmFpbCBjbG9zZWQgdW5kZXIgYWxsb3ctbGlzdCk6ICR7bmFtZX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhY2sucHVzaChpbnN0cnVjdGlvbiB8IDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3N0YXRlLmNvbnRlbnQgPSAodGhpcy5zdGFjay5sZW5ndGgpXG4gICAgICA/IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXVxuICAgICAgOiB0aGlzLl9zdGF0ZS5jb250ZW50O1xuXG4gICAgdGhpcy5fcmVzdWx0ID0gdGhpcy5zdGF0ZTtcbiAgICB0aGlzLmNvbW1pdCgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhc0J1ZmZlciAoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc2VyaWFsaXplKHRoaXMuc3RhdGUpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKTtcbiAgfVxuXG4gIC8vIHJlZ2lzdGVyIGEgbG9jYWwgZnVuY3Rpb25cbiAgZGVmaW5lIChuYW1lLCBvcCwgZGVmaW5pdGlvbiA9IHt9KSB7XG4gICAgY29uc3Qgb3BOYW1lID0gU3RyaW5nKG5hbWUgPT0gbnVsbCA/ICcnIDogbmFtZSk7XG4gICAgaWYgKCFvcE5hbWUpIHRocm93IG5ldyBFcnJvcignb3Bjb2RlIG5hbWUgcmVxdWlyZWQnKTtcbiAgICBpZiAodGhpcy5fYWxsb3dlZE9wY29kZXMgJiYgdGhpcy5fYWxsb3dlZE9wY29kZXMubGVuZ3RoXG4gICAgICAmJiAhb3Bjb2RlQWxsb3dlZCh0aGlzLl9hbGxvd2VkT3Bjb2Rlcywgb3BOYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBkZWZpbmUgcmVqZWN0ZWQ6IG9wY29kZSBub3QgaW4gcHJpbWl0aXZlcy5vcGNvZGVzIGFsbG93LWxpc3Q6ICR7b3BOYW1lfWApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGRlZmluZSByZXF1aXJlcyBhIGZ1bmN0aW9uIGZvciBvcGNvZGU6ICR7b3BOYW1lfWApO1xuICAgIH1cbiAgICB0aGlzLmtub3duW29wTmFtZV0gPSBvcC5iaW5kKHRoaXMuc3RhdGUpO1xuICAgIGRlZmluZU9wY29kZUVudHJ5KHRoaXMub3Bjb2Rlcywgb3BOYW1lLCBPYmplY3QuYXNzaWduKHt9LCBkZWZpbml0aW9uLCB7XG4gICAgICBpbXBsZW1lbnRhdGlvbjogdHJ1ZVxuICAgIH0pKTtcbiAgICByZXR1cm4gdGhpcy5rbm93bltvcE5hbWVdO1xuICB9XG5cbiAgZGVmaW5lT3Bjb2RlIChuYW1lLCBvcCwgZGVmaW5pdGlvbiA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5lKG5hbWUsIG9wLCBkZWZpbml0aW9uKTtcbiAgfVxuXG4gIGRlZmluZUJpdGNvaW5PcGNvZGUgKG5hbWUsIG9wLCBkZWZpbml0aW9uID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbmUobmFtZSwgb3AsIE9iamVjdC5hc3NpZ24oe30sIGRlZmluaXRpb24sIHsgZmFtaWx5OiAnYml0Y29pbicgfSkpO1xuICB9XG5cbiAgZGVmaW5lRmFicmljT3Bjb2RlIChuYW1lLCBvcCwgZGVmaW5pdGlvbiA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5lKG5hbWUsIG9wLCBPYmplY3QuYXNzaWduKHt9LCBkZWZpbml0aW9uLCB7IGZhbWlseTogJ2ZhYnJpYycgfSkpO1xuICB9XG5cbiAgY29tcGlsZU9wY29kZUNvbnRyYWN0IChib2R5ID0gJycpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVPcGNvZGVDb250cmFjdCh0aGlzLm9wY29kZXMsIGJvZHkpO1xuICAgIGlmIChyZXNvbHZlZC51bmtub3duLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG9wY29kZXMgaW4gY29udHJhY3Q6ICR7cmVzb2x2ZWQudW5rbm93bi5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZWQubGluZXM7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgcHJvZ3JhbSBtYW5pZmVzdCB2MSAoZm9ybWVyIERpc3RyaWJ1dGVkRXhlY3V0aW9uLnBhcnNlRGlzdHJpYnV0ZWRNYW5pZmVzdFYxKS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJhd1xuICAgKiBAcGFyYW0ge1Byb2dyYW18bnVsbH0gW3Byb2dyYW1dIFdoZW4gcHJvdmlkZWQsIHByb2dyYW1JZC9oYXNoIG11c3QgbWF0Y2guXG4gICAqIEByZXR1cm5zIHt7b2s6IGJvb2xlYW4sIGVycm9yOiAoc3RyaW5nfHVuZGVmaW5lZCksIG1hbmlmZXN0OiAoT2JqZWN0fHVuZGVmaW5lZCl9fVxuICAgKi9cbiAgcGFyc2VNYW5pZmVzdCAocmF3LCBwcm9ncmFtID0gbnVsbCkge1xuICAgIGNvbnN0IHsgcGFyc2VQcm9ncmFtTWFuaWZlc3RWMSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY1Byb2dyYW1NYW5pZmVzdCcpO1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlUHJvZ3JhbU1hbmlmZXN0VjEocmF3KTtcbiAgICBpZiAoIXBhcnNlZC5vaykgcmV0dXJuIHBhcnNlZDtcbiAgICBpZiAocHJvZ3JhbSkge1xuICAgICAgY29uc3QgaGFzaCA9IHByb2dyYW0ucHJvZ3JhbUhhc2ggfHwgKHR5cGVvZiBwcm9ncmFtLmhhc2ggPT09ICdmdW5jdGlvbicgPyBwcm9ncmFtLmhhc2goKSA6IG51bGwpO1xuICAgICAgaWYgKGhhc2ggJiYgcGFyc2VkLm1hbmlmZXN0LnByb2dyYW1IYXNoICE9PSBoYXNoKSB7XG4gICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdtYW5pZmVzdCBwcm9ncmFtSGFzaCBkb2VzIG5vdCBtYXRjaCBQcm9ncmFtJyB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSB7QGxpbmsgUHJvZ3JhbX0gb250byB0aGlzIG1hY2hpbmUgKHNldHMgc2NyaXB0IHN0ZXBzKS5cbiAgICogV2hlbiBhbiBvcGNvZGUgYWxsb3ctbGlzdCBpcyBhY3RpdmUgKGN0b3IgYGFsbG93ZWRPcGNvZGVzYCxcbiAgICoge0BsaW5rIE1hY2hpbmUjc2V0QWxsb3dlZE9wY29kZXN9LCB7QGxpbmsgTWFjaGluZSNhcHBseUdlbmVzaXNPcGNvZGVzfSxcbiAgICogb3IgUHJvZ3JhbS9nZW5lc2lzIGBwcmltaXRpdmVzLm9wY29kZXNgKSwgc3RlcHMgYW5kIGphdmFzY3JpcHQgYHNvdXJjZWBcbiAgICoga2V5cyBtdXN0IGJlIGxpc3RlZCDigJQgZmFpbCBjbG9zZWQuXG4gICAqIEBwYXJhbSB7UHJvZ3JhbXxvYmplY3R9IHByb2dyYW1cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHMuZ2VuZXNpc10gQVJDIGdlbmVzaXM7IG1heSBzdXBwbHkgYHByaW1pdGl2ZXMub3Bjb2Rlc2AgYWxsb3ctbGlzdFxuICAgKiBAcmV0dXJucyB7TWFjaGluZX1cbiAgICovXG4gIGxvYWRQcm9ncmFtIChwcm9ncmFtLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBQcm9ncmFtID0gcmVxdWlyZSgnLi9wcm9ncmFtJyk7XG4gICAgY29uc3QgcHJvZyA9IHByb2dyYW0gaW5zdGFuY2VvZiBQcm9ncmFtID8gcHJvZ3JhbSA6IFByb2dyYW0uZnJvbShwcm9ncmFtIHx8IHt9KTtcbiAgICBjb25zdCBjb21waWxlZCA9IHByb2cuY29tcGlsZSgpO1xuICAgIGlmICghY29tcGlsZWQub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihjb21waWxlZC5lcnJvciB8fCAncHJvZ3JhbSBjb21waWxlIGZhaWxlZCcpO1xuICAgIH1cblxuICAgIC8vIFByb2dyYW0gb3IgY2FsbGVyIGdlbmVzaXMgbWF5IGluc3RhbGwgYW4gYWxsb3ctbGlzdCB3aGVuIHVucmVzdHJpY3RlZC5cbiAgICBjb25zdCBmcm9tRXh0cmEgPSBub3JtYWxpemVPcGNvZGVBbGxvd0xpc3QoXG4gICAgICBvcGNvZGVzRnJvbUdlbmVzaXMob3B0cy5nZW5lc2lzIHx8IHt9KVxuICAgICAgICAuY29uY2F0KG9wY29kZXNGcm9tR2VuZXNpcyhwcm9nKSlcbiAgICAgICAgLmNvbmNhdChvcGNvZGVzRnJvbUdlbmVzaXMocHJvZy5zZXR0aW5ncyB8fCB7fSkpXG4gICAgKTtcbiAgICBpZiAoZnJvbUV4dHJhLmxlbmd0aCAmJiAhKHRoaXMuX2FsbG93ZWRPcGNvZGVzICYmIHRoaXMuX2FsbG93ZWRPcGNvZGVzLmxlbmd0aCkpIHtcbiAgICAgIHRoaXMuc2V0QWxsb3dlZE9wY29kZXMoZnJvbUV4dHJhKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGVwcyA9IHByb2cuc3RlcHMuc2xpY2UoKTtcbiAgICBjb25zdCBzdGVwQ2hlY2sgPSBhc3NlcnRTdGVwc0FsbG93ZWQodGhpcy5fYWxsb3dlZE9wY29kZXMsIHN0ZXBzKTtcbiAgICBpZiAoIXN0ZXBDaGVjay5vaykgdGhyb3cgbmV3IEVycm9yKHN0ZXBDaGVjay5lcnJvcik7XG5cbiAgICBpZiAocHJvZy5sYW5ndWFnZSA9PT0gJ2phdmFzY3JpcHQnICYmIHByb2cuc291cmNlICYmIHR5cGVvZiBwcm9nLnNvdXJjZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkocHJvZy5zb3VyY2UpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBmbl0gb2YgT2JqZWN0LmVudHJpZXMocHJvZy5zb3VyY2UpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHRoaXMuZGVmaW5lKG5hbWUsIGZuKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXR0aW5ncy5zY3JpcHQgPSBzdGVwcztcbiAgICB0aGlzLl9wcm9ncmFtID0gcHJvZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGFuZCBjb21wdXRlIGEgUHJvZ3JhbTsgcmV0dXJuIHN0YWNrIHRpcCArIHJ1biBjb21taXRtZW50IGZvciBMMSBiaW5kaW5nLlxuICAgKiBAcGFyYW0ge1Byb2dyYW18T2JqZWN0fSBwcm9ncmFtXG4gICAqIEBwYXJhbSB7Kn0gW2lucHV0XVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy5nZW5lc2lzXSBBUkMgZ2VuZXNpcyBmb3IgYHByaW1pdGl2ZXMub3Bjb2Rlc2AgYWxsb3ctbGlzdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZS48e29rOiBib29sZWFuLCBzdGFjazogQXJyYXksIHRpcDogKiwgdHJhY2U6IEFycmF5LCBydW5Db21taXRtZW50SGV4OiAoc3RyaW5nfG51bGwpLCBlcnJvcjogKHN0cmluZ3x1bmRlZmluZWQpfT59XG4gICAqL1xuICBhc3luYyBydW5Qcm9ncmFtIChwcm9ncmFtLCBpbnB1dCwgb3B0cyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFByb2dyYW0gPSByZXF1aXJlKCcuL3Byb2dyYW0nKTtcbiAgICAgIGNvbnN0IHByb2cgPSBwcm9ncmFtIGluc3RhbmNlb2YgUHJvZ3JhbSA/IHByb2dyYW0gOiBQcm9ncmFtLmZyb20ocHJvZ3JhbSB8fCB7fSk7XG4gICAgICBpZiAocHJvZy5sYW5ndWFnZSA9PT0gJ2ZhYnJpYy1leGVjdXRpb24nKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBydW5FeGVjdXRpb25Qcm9ncmFtXG4gICAgICAgIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZXhlY3V0aW9uUHJvZ3JhbVJ1bm5lcicpO1xuICAgICAgICBpZiAob3B0cy5nZW5lc2lzKSB0aGlzLmFwcGx5R2VuZXNpc09wY29kZXMob3B0cy5nZW5lc2lzKTtcbiAgICAgICAgY29uc3Qgc3JjID0gcHJvZy5zZXR0aW5ncy5zb3VyY2UgJiYgdHlwZW9mIHByb2cuc2V0dGluZ3Muc291cmNlID09PSAnb2JqZWN0J1xuICAgICAgICAgID8gcHJvZy5zZXR0aW5ncy5zb3VyY2VcbiAgICAgICAgICA6IHByb2dyYW07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJ1bkV4ZWN1dGlvblByb2dyYW0oc3JjLCBPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7XG4gICAgICAgICAgbWFjaGluZTogdGhpcyxcbiAgICAgICAgICBhbGxvd2VkT3Bjb2RlczogdGhpcy5fYWxsb3dlZE9wY29kZXNcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9rOiByZXN1bHQub2ssXG4gICAgICAgICAgc3RhY2s6IHJlc3VsdC5zdGFjayB8fCBbXSxcbiAgICAgICAgICB0aXA6IHJlc3VsdC50aXAgIT0gbnVsbFxuICAgICAgICAgICAgPyByZXN1bHQudGlwXG4gICAgICAgICAgICA6IChyZXN1bHQuc3RhY2sgJiYgcmVzdWx0LnN0YWNrLmxlbmd0aCA/IHJlc3VsdC5zdGFja1tyZXN1bHQuc3RhY2subGVuZ3RoIC0gMV0gOiBudWxsKSxcbiAgICAgICAgICB0cmFjZTogcmVzdWx0LnRyYWNlIHx8IFtdLFxuICAgICAgICAgIHJ1bkNvbW1pdG1lbnRIZXg6IHJlc3VsdC5ydW5Db21taXRtZW50SGV4IHx8IG51bGwsXG4gICAgICAgICAgcHJvZ3JhbUhhc2g6IHJlc3VsdC5wcm9ncmFtSGFzaCB8fCBudWxsLFxuICAgICAgICAgIHN0ZXBzRXhlY3V0ZWQ6IHJlc3VsdC5zdGVwc0V4ZWN1dGVkLFxuICAgICAgICAgIGVycm9yOiByZXN1bHQuZXJyb3IsXG4gICAgICAgICAgcHJvZ3JhbTogcmVzdWx0LnByb2dyYW0gfHwgcHJvZ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5sb2FkUHJvZ3JhbShwcm9ncmFtLCBvcHRzKTtcbiAgICAgIGNvbnN0IGJlZm9yZUxlbiA9IHRoaXMuc3RhY2subGVuZ3RoO1xuICAgICAgYXdhaXQgdGhpcy5jb21wdXRlKGlucHV0KTtcbiAgICAgIGNvbnN0IHRyYWNlID0gdGhpcy5zdGFjay5zbGljZShiZWZvcmVMZW4pO1xuICAgICAgY29uc3QgdGlwID0gdGhpcy5zdGFjay5sZW5ndGggPyB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV0gOiBudWxsO1xuICAgICAgY29uc3QgcnVuQ29tbWl0bWVudEhleCA9IHRoaXMuX3Byb2dyYW1cbiAgICAgICAgPyB0aGlzLl9wcm9ncmFtLnJ1bkNvbW1pdG1lbnRIZXgoeyB0aXAsIHN0YWNrOiB0cmFjZSB9KVxuICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvazogdHJ1ZSxcbiAgICAgICAgc3RhY2s6IHRoaXMuc3RhY2suc2xpY2UoKSxcbiAgICAgICAgdGlwLFxuICAgICAgICB0cmFjZSxcbiAgICAgICAgcnVuQ29tbWl0bWVudEhleCxcbiAgICAgICAgcHJvZ3JhbUhhc2g6IHRoaXMuX3Byb2dyYW0gPyB0aGlzLl9wcm9ncmFtLnByb2dyYW1IYXNoIDogbnVsbCxcbiAgICAgICAgcHJvZ3JhbTogdGhpcy5fcHJvZ3JhbSB8fCBudWxsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICBzdGFjazogdGhpcy5zdGFjay5zbGljZSgpLFxuICAgICAgICB0aXA6IG51bGwsXG4gICAgICAgIHRyYWNlOiBbXSxcbiAgICAgICAgcnVuQ29tbWl0bWVudEhleDogbnVsbCxcbiAgICAgICAgcHJvZ3JhbUhhc2g6IG51bGwsXG4gICAgICAgIGVycm9yOiBlcnIgJiYgZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5T3BlcmF0aW9uIChvcCkge1xuICAgIG1vbml0b3IuYXBwbHlPcGVyYXRpb24odGhpcy5zdGF0ZSwgb3ApO1xuICB9XG5cbiAgY29tbWl0ICgpIHtcbiAgICBpZiAoIXRoaXMuaGlzdG9yeSkgdGhpcy5oaXN0b3J5ID0gW107XG4gICAgaWYgKCF0aGlzLm9ic2VydmVyKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBjaGFuZ2VzID0gbW9uaXRvci5nZW5lcmF0ZSh0aGlzLm9ic2VydmVyKTtcblxuICAgIGlmIChjaGFuZ2VzICYmIGNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICBsZXQgdmVjdG9yID0gbmV3IFN0YXRlKHtcbiAgICAgICAgJ0B0eXBlJzogJ0NoYW5nZScsXG4gICAgICAgICdAZGF0YSc6IGNoYW5nZXMsXG4gICAgICAgIG1ldGhvZDogJ3BhdGNoJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLmlkLFxuICAgICAgICBwYXJhbXM6IGNoYW5nZXNcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmhpc3RvcnkucHVzaCh2ZWN0b3IpO1xuXG4gICAgICB0aGlzLmVtaXQoJ3RyYW5zYWN0aW9uJywgdmVjdG9yKTtcbiAgICAgIHRoaXMuZW1pdCgnY2hhbmdlcycsIGNoYW5nZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VzO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIHRoaXMuc3RhdHVzID0gJ1NUQVJUSU5HJztcbiAgICBjb25zdCBmID0gdGhpcy5zZXR0aW5ncy5mcmVxdWVuY3k7XG4gICAgY29uc3QgZnJvbUZyZXEgPSAodHlwZW9mIGYgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShmKSkgPyBmICogMTAwMCA6IE5hTjtcbiAgICBjb25zdCBpbnRlcnZhbFNlYyA9ICh0eXBlb2YgdGhpcy5zZXR0aW5ncy5pbnRlcnZhbCA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHRoaXMuc2V0dGluZ3MuaW50ZXJ2YWwpKVxuICAgICAgPyB0aGlzLnNldHRpbmdzLmludGVydmFsXG4gICAgICA6IDYwO1xuICAgIGNvbnN0IG1zID0gTnVtYmVyLmlzRmluaXRlKGZyb21GcmVxKSAmJiBmcm9tRnJlcSA+IDAgPyBmcm9tRnJlcSA6IE1hdGgubWF4KDEsIGludGVydmFsU2VjICogMTAwMCk7XG4gICAgdGhpcy5fZ292ZXJub3IgPSBzZXRJbnRlcnZhbCh0aGlzLmNvbXB1dGUuYmluZCh0aGlzKSwgbXMpO1xuICAgIHRoaXMuc3RhdHVzID0gJ1NUQVJURUQnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoKSB7XG4gICAgdGhpcy5zdGF0dXMgPSAnU1RPUFBJTkcnO1xuICAgIGlmICh0aGlzLl9nb3Zlcm5vcikgY2xlYXJJbnRlcnZhbCh0aGlzLl9nb3Zlcm5vcik7XG4gICAgdGhpcy5zdGF0dXMgPSAnU1RPUFBFRCc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNYWNoaW5lO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/machine.js\n\n}")},"./node_modules/@fabric/core/types/message.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\nconst {\n MAGIC_BYTES,\n VERSION_NUMBER,\n HEADER_SIZE,\n MAX_MESSAGE_SIZE,\n OP_CYCLE,\n LOG_MESSAGE_TYPE,\n GENERIC_LIST_TYPE,\n GENERIC_MESSAGE_TYPE,\n BITCOIN_BLOCK_TYPE,\n BITCOIN_BLOCK_HASH_TYPE,\n BITCOIN_TRANSACTION_TYPE,\n BITCOIN_TRANSACTION_HASH_TYPE,\n P2P_GENERIC,\n P2P_IDENT_REQUEST,\n P2P_IDENT_RESPONSE,\n P2P_PING,\n P2P_PONG,\n P2P_START_CHAIN,\n P2P_INSTRUCTION,\n P2P_BASE_MESSAGE,\n P2P_CHAIN_SYNC_REQUEST,\n P2P_FLUSH_CHAIN,\n P2P_INVENTORY_REQUEST,\n P2P_INVENTORY_RESPONSE,\n P2P_FILE_SEND,\n P2P_DOCUMENT_PUBLISH,\n P2P_PEER_ALIAS,\n P2P_PEER_ANNOUNCE,\n P2P_PEER_GOSSIP,\n P2P_PEERING_OFFER,\n P2P_SESSION_OFFER,\n P2P_SESSION_OPEN,\n P2P_CONTRACT_PUBLISH,\n P2P_CONTRACT_MESSAGE,\n P2P_STATE_ROOT,\n P2P_STATE_COMMITTMENT,\n P2P_STATE_CHANGE,\n P2P_STATE_REQUEST,\n P2P_TRANSACTION,\n P2P_CALL,\n P2P_RELAY,\n P2P_MESSAGE_RECEIPT,\n P2P_FORWARD,\n CHAT_MESSAGE,\n P2P_CHAT_MESSAGE,\n SIDECHAIN_STATE_PATCH_TYPE,\n DOCUMENT_PUBLISH_TYPE,\n DOCUMENT_REQUEST_TYPE,\n JSON_CALL_TYPE,\n PATCH_MESSAGE_TYPE,\n CONTRACT_PROPOSAL_TYPE,\n BLOCK_CANDIDATE,\n PEER_CANDIDATE,\n SESSION_START,\n // Lightning message codes\n LIGHTNING_WARNING,\n LIGHTNING_INIT,\n LIGHTNING_ERROR,\n LIGHTNING_PING,\n LIGHTNING_PONG,\n LIGHTNING_OPEN_CHANNEL,\n LIGHTNING_ACCEPT_CHANNEL,\n LIGHTNING_FUNDING_CREATED,\n LIGHTNING_FUNDING_SIGNED,\n LIGHTNING_CHANNEL_READY,\n LIGHTNING_SHUTDOWN,\n LIGHTNING_CLOSING_SIGNED,\n LIGHTNING_UPDATE_ADD_HTLC,\n LIGHTNING_UPDATE_FULFILL_HTLC,\n LIGHTNING_UPDATE_FAIL_HTLC,\n LIGHTNING_COMMITMENT_SIGNED,\n LIGHTNING_REVOKE_AND_ACK,\n LIGHTNING_CHANNEL_ANNOUNCEMENT,\n LIGHTNING_NODE_ANNOUNCEMENT,\n LIGHTNING_CHANNEL_UPDATE\n} = __webpack_require__(/*! ../constants */ \"./node_modules/@fabric/core/constants.js\");\n\nconst { tryParseWireJson } = __webpack_require__(/*! ../functions/wireJson */ \"./node_modules/@fabric/core/functions/wireJson.js\");\n\n/**\n * @private\n * @param {Buffer} buf\n */\nfunction isAllZero32 (buf) {\n if (!buf || buf.length !== 32) return true;\n return buf.equals(Buffer.alloc(32));\n}\n\n// Dependencies\n// const crypto = require('crypto');\nconst struct = __webpack_require__(/*! struct */ \"./node_modules/struct/index.js\");\n\n// Fabric Types\nconst Actor = __webpack_require__(/*! ./actor */ \"./node_modules/@fabric/core/types/actor.js\");\nconst Hash256 = __webpack_require__(/*! ./hash256 */ \"./node_modules/@fabric/core/types/hash256.js\");\n\n// Function Definitions\nconst padDigits = __webpack_require__(/*! ../functions/padDigits */ \"./node_modules/@fabric/core/functions/padDigits.js\");\nconst taggedHash = __webpack_require__(/*! ../functions/taggedHash */ \"./node_modules/@fabric/core/functions/taggedHash.js\");\n\n/**\n * **Two parallel type names:**\n * - **Wire** (`wireType`, {@link Message#type}): SCREAMING_SNAKE_CASE strings from opcode\n * decode (`fromBuffer`, `toVector` first element). Matches AMP / `constants.js` style.\n * - **Friendly** ({@link Message#friendlyType}, `toObject().type`): PascalCase (or historical\n * labels) for JSON and human-facing APIs — see {@link Message.FRIENDLY_TYPE_BY_WIRE}.\n *\n * Encode accepts **either** name via merged {@link Message#types} (canonical wire + legacy friendly).\n * {@link Message.wireTypeFromFriendly} / {@link Message.friendlyTypeFromWire} convert between them.\n *\n * Opcode → wire string order matches the historical `type` switch: when multiple labels share one\n * opcode (e.g. P2P vs Lightning), **first listed** in {@link Message.WIRE_TYPE_DECODE_ORDER} wins.\n * Those maps are **not** global exports: use {@link Message} statics `WIRE_TYPE_DECODE_ORDER` and\n * `FRIENDLY_TYPE_BY_WIRE`.\n */\n/** @private */\nconst WIRE_TYPE_DECODE_ORDER = Object.freeze([\n [BITCOIN_BLOCK_TYPE, 'BITCOIN_BLOCK'],\n [BITCOIN_BLOCK_HASH_TYPE, 'BITCOIN_BLOCK_HASH'],\n [BITCOIN_TRANSACTION_TYPE, 'BITCOIN_TRANSACTION'],\n [BITCOIN_TRANSACTION_HASH_TYPE, 'BITCOIN_TRANSACTION_HASH'],\n [LOG_MESSAGE_TYPE, 'LOG_MESSAGE'],\n [GENERIC_LIST_TYPE, 'GENERIC_LIST'],\n [GENERIC_MESSAGE_TYPE, 'GENERIC_MESSAGE'],\n [SIDECHAIN_STATE_PATCH_TYPE, 'SIDECHAIN_STATE_PATCH'],\n [DOCUMENT_PUBLISH_TYPE, 'DOCUMENT_PUBLISH'],\n [DOCUMENT_REQUEST_TYPE, 'DOCUMENT_REQUEST'],\n [BLOCK_CANDIDATE, 'BLOCK_CANDIDATE'],\n [P2P_PING, 'P2P_PING'],\n [P2P_PONG, 'P2P_PONG'],\n [P2P_GENERIC, 'P2P_GENERIC'],\n [P2P_CHAIN_SYNC_REQUEST, 'P2P_CHAIN_SYNC_REQUEST'],\n [P2P_FLUSH_CHAIN, 'P2P_FLUSH_CHAIN'],\n [P2P_INVENTORY_REQUEST, 'P2P_INVENTORY_REQUEST'],\n [P2P_INVENTORY_RESPONSE, 'P2P_INVENTORY_RESPONSE'],\n [P2P_FILE_SEND, 'P2P_FILE_SEND'],\n [P2P_DOCUMENT_PUBLISH, 'P2P_DOCUMENT_PUBLISH'],\n [P2P_PEER_ALIAS, 'P2P_PEER_ALIAS'],\n [P2P_PEER_ANNOUNCE, 'P2P_PEER_ANNOUNCE'],\n [P2P_PEER_GOSSIP, 'P2P_PEER_GOSSIP'],\n [P2P_PEERING_OFFER, 'P2P_PEERING_OFFER'],\n [P2P_SESSION_OFFER, 'P2P_SESSION_OFFER'],\n [P2P_SESSION_OPEN, 'P2P_SESSION_OPEN'],\n [P2P_CONTRACT_PUBLISH, 'CONTRACT_PUBLISH'],\n [P2P_CONTRACT_MESSAGE, 'CONTRACT_MESSAGE'],\n [P2P_IDENT_REQUEST, 'P2P_IDENT_REQUEST'],\n [P2P_IDENT_RESPONSE, 'P2P_IDENT_RESPONSE'],\n [P2P_BASE_MESSAGE, 'P2P_BASE_MESSAGE'],\n [P2P_STATE_ROOT, 'P2P_STATE_ROOT'],\n [P2P_STATE_CHANGE, 'P2P_STATE_CHANGE'],\n [P2P_STATE_REQUEST, 'P2P_STATE_REQUEST'],\n [P2P_TRANSACTION, 'P2P_TRANSACTION'],\n [P2P_CALL, 'P2P_CALL'],\n [P2P_RELAY, 'P2P_RELAY'],\n [P2P_MESSAGE_RECEIPT, 'P2P_MESSAGE_RECEIPT'],\n [P2P_FORWARD, 'P2P_FORWARD'],\n [PEER_CANDIDATE, 'PEER_CANDIDATE'],\n [SESSION_START, 'SESSION_START'],\n [CHAT_MESSAGE, 'CHAT_MESSAGE'],\n [P2P_CHAT_MESSAGE, 'P2P_CHAT_MESSAGE'],\n [JSON_CALL_TYPE, 'JSON_CALL'],\n [PATCH_MESSAGE_TYPE, 'JSON_PATCH'],\n [CONTRACT_PROPOSAL_TYPE, 'CONTRACT_PROPOSAL'],\n [P2P_START_CHAIN, 'P2P_START_CHAIN'],\n [LIGHTNING_WARNING, 'LIGHTNING_WARNING'],\n [LIGHTNING_INIT, 'LIGHTNING_INIT'],\n [LIGHTNING_ERROR, 'LIGHTNING_ERROR'],\n [LIGHTNING_PING, 'LIGHTNING_PING'],\n [LIGHTNING_PONG, 'LIGHTNING_PONG'],\n [LIGHTNING_OPEN_CHANNEL, 'LIGHTNING_OPEN_CHANNEL'],\n [LIGHTNING_ACCEPT_CHANNEL, 'LIGHTNING_ACCEPT_CHANNEL'],\n [LIGHTNING_FUNDING_CREATED, 'LIGHTNING_FUNDING_CREATED'],\n [LIGHTNING_FUNDING_SIGNED, 'LIGHTNING_FUNDING_SIGNED'],\n [LIGHTNING_CHANNEL_READY, 'LIGHTNING_CHANNEL_READY'],\n [LIGHTNING_SHUTDOWN, 'LIGHTNING_SHUTDOWN'],\n [LIGHTNING_CLOSING_SIGNED, 'LIGHTNING_CLOSING_SIGNED'],\n [LIGHTNING_UPDATE_ADD_HTLC, 'LIGHTNING_UPDATE_ADD_HTLC'],\n [LIGHTNING_UPDATE_FULFILL_HTLC, 'LIGHTNING_UPDATE_FULFILL_HTLC'],\n [LIGHTNING_UPDATE_FAIL_HTLC, 'LIGHTNING_UPDATE_FAIL_HTLC'],\n [LIGHTNING_COMMITMENT_SIGNED, 'LIGHTNING_COMMITMENT_SIGNED'],\n [LIGHTNING_REVOKE_AND_ACK, 'LIGHTNING_REVOKE_AND_ACK'],\n [LIGHTNING_CHANNEL_ANNOUNCEMENT, 'LIGHTNING_CHANNEL_ANNOUNCEMENT'],\n [LIGHTNING_NODE_ANNOUNCEMENT, 'LIGHTNING_NODE_ANNOUNCEMENT'],\n [LIGHTNING_CHANNEL_UPDATE, 'LIGHTNING_CHANNEL_UPDATE']\n]);\n\nconst CANONICAL_WIRE_TYPE_BY_OPCODE = Object.freeze(\n WIRE_TYPE_DECODE_ORDER.reduce((acc, pair) => {\n const code = pair[0];\n const name = pair[1];\n if (typeof code !== 'number' || !Number.isFinite(code)) return acc;\n if (acc[code] !== undefined) return acc;\n acc[code] = name;\n return acc;\n }, {})\n);\n\nconst CANONICAL_MESSAGE_TYPE_STRINGS = Object.freeze(\n Object.entries(CANONICAL_WIRE_TYPE_BY_OPCODE).reduce((acc, entry) => {\n const code = Number(entry[0]);\n const name = entry[1];\n acc[name] = code;\n return acc;\n }, {})\n);\n\nconst LEGACY_MESSAGE_TYPE_ALIASES = Object.freeze({\n BitcoinBlock: BITCOIN_BLOCK_TYPE,\n BitcoinBlockHash: BITCOIN_BLOCK_HASH_TYPE,\n BitcoinTransaction: BITCOIN_TRANSACTION_TYPE,\n BitcoinTransactionHash: BITCOIN_TRANSACTION_HASH_TYPE,\n GenericLogMessage: LOG_MESSAGE_TYPE,\n GenericList: GENERIC_LIST_TYPE,\n GenericQueue: GENERIC_LIST_TYPE,\n // Transitional Hub/browser catch-all (opcode GENERIC_MESSAGE_TYPE / 15103).\n GenericMessage: GENERIC_MESSAGE_TYPE,\n FabricLogMessage: LOG_MESSAGE_TYPE,\n FabricServiceLogMessage: LOG_MESSAGE_TYPE,\n GenericTransferQueue: GENERIC_LIST_TYPE,\n JSONCall: JSON_CALL_TYPE,\n JSONPatch: PATCH_MESSAGE_TYPE,\n ContractProposal: CONTRACT_PROPOSAL_TYPE,\n Generic: P2P_GENERIC,\n Cycle: typeof OP_CYCLE === 'string' ? parseInt(OP_CYCLE, 16) : Number(OP_CYCLE),\n IdentityRequest: P2P_IDENT_REQUEST,\n IdentityResponse: P2P_IDENT_RESPONSE,\n ChainSyncRequest: P2P_CHAIN_SYNC_REQUEST,\n FlushChain: P2P_FLUSH_CHAIN,\n InventoryRequest: P2P_INVENTORY_REQUEST,\n InventoryResponse: P2P_INVENTORY_RESPONSE,\n PeerAlias: P2P_PEER_ALIAS,\n PeerAnnounce: P2P_PEER_ANNOUNCE,\n PeerGossip: P2P_PEER_GOSSIP,\n PeeringOffer: P2P_PEERING_OFFER,\n SessionOffer: P2P_SESSION_OFFER,\n SessionOpen: P2P_SESSION_OPEN,\n FileSend: P2P_FILE_SEND,\n DocumentPricingPublish: P2P_DOCUMENT_PUBLISH,\n Ping: P2P_PING,\n Pong: P2P_PONG,\n DocumentRequest: DOCUMENT_REQUEST_TYPE,\n DocumentPublish: DOCUMENT_PUBLISH_TYPE,\n SidechainStatePatch: SIDECHAIN_STATE_PATCH_TYPE,\n BlockCandidate: BLOCK_CANDIDATE,\n PeerCandidate: PEER_CANDIDATE,\n PeerInstruction: P2P_INSTRUCTION,\n PeerMessage: P2P_BASE_MESSAGE,\n StartSession: SESSION_START,\n ChatMessage: CHAT_MESSAGE,\n StartChain: P2P_START_CHAIN,\n StateRoot: P2P_STATE_ROOT,\n StateCommitment: P2P_STATE_COMMITTMENT,\n StateChange: P2P_STATE_CHANGE,\n StateRequest: P2P_STATE_REQUEST,\n Transaction: P2P_TRANSACTION,\n Call: P2P_CALL,\n LogMessage: LOG_MESSAGE_TYPE,\n LightningWarning: LIGHTNING_WARNING,\n LightningInit: LIGHTNING_INIT,\n LightningError: LIGHTNING_ERROR,\n LightningPing: LIGHTNING_PING,\n LightningPong: LIGHTNING_PONG,\n OpenChannel: LIGHTNING_OPEN_CHANNEL,\n AcceptChannel: LIGHTNING_ACCEPT_CHANNEL,\n FundingCreated: LIGHTNING_FUNDING_CREATED,\n FundingSigned: LIGHTNING_FUNDING_SIGNED,\n ChannelReady: LIGHTNING_CHANNEL_READY,\n Shutdown: LIGHTNING_SHUTDOWN,\n ClosingSigned: LIGHTNING_CLOSING_SIGNED,\n UpdateAddHTLC: LIGHTNING_UPDATE_ADD_HTLC,\n UpdateFulfillHTLC: LIGHTNING_UPDATE_FULFILL_HTLC,\n UpdateFailHTLC: LIGHTNING_UPDATE_FAIL_HTLC,\n CommitmentSigned: LIGHTNING_COMMITMENT_SIGNED,\n RevokeAndAck: LIGHTNING_REVOKE_AND_ACK,\n ChannelAnnouncement: LIGHTNING_CHANNEL_ANNOUNCEMENT,\n NodeAnnouncement: LIGHTNING_NODE_ANNOUNCEMENT,\n ChannelUpdate: LIGHTNING_CHANNEL_UPDATE,\n // P2P_-prefixed contract names encode to the canonical contract opcodes\n // (decode names stay CONTRACT_PUBLISH / CONTRACT_MESSAGE / CONTRACT_PROPOSAL).\n P2P_CONTRACT_PUBLISH: P2P_CONTRACT_PUBLISH,\n P2P_CONTRACT_MESSAGE: P2P_CONTRACT_MESSAGE,\n P2P_CONTRACT_PROPOSAL: CONTRACT_PROPOSAL_TYPE\n});\n\n/**\n * Wire-level type strings (ALL_CAPS, opcode decode) ↔ JSON-oriented friendly names (PascalCase\n * where historically used). {@link Message#wireType} / {@link Message#type} use wire names;\n * {@link Message#friendlyType} and {@link Message#toObject} `type` use friendly names.\n */\n/** @private */\nconst FRIENDLY_TYPE_BY_WIRE = Object.freeze((() => {\n const tmp = {};\n for (const friendly of Object.keys(LEGACY_MESSAGE_TYPE_ALIASES)) {\n const code = LEGACY_MESSAGE_TYPE_ALIASES[friendly];\n if (typeof code !== 'number' || !Number.isFinite(code)) continue;\n const wire = CANONICAL_WIRE_TYPE_BY_OPCODE[code];\n if (!wire || tmp[wire] !== undefined) continue;\n tmp[wire] = friendly;\n }\n for (const wire of Object.values(CANONICAL_WIRE_TYPE_BY_OPCODE)) {\n if (tmp[wire] === undefined) tmp[wire] = wire;\n }\n return tmp;\n})());\n\nconst FRIENDLY_TO_WIRE_TYPE = Object.freeze((() => {\n const tmp = {};\n for (const [wire, friendly] of Object.entries(FRIENDLY_TYPE_BY_WIRE)) {\n if (tmp[friendly] === undefined) tmp[friendly] = wire;\n }\n return tmp;\n})());\n\n/**\n * @private\n * @param {string} wire\n * @returns {string}\n */\nfunction friendlyTypeFromWire (wire) {\n const w = String(wire || '').trim();\n return FRIENDLY_TYPE_BY_WIRE[w] || w;\n}\n\n/**\n * @private\n * @param {string} friendly\n * @returns {string}\n */\nfunction wireTypeFromFriendly (friendly) {\n const f = String(friendly || '').trim();\n return FRIENDLY_TO_WIRE_TYPE[f] || f;\n}\n\n/**\n * Resolve any opcode / wire name / friendly alias to the numeric AMP type code.\n * @private\n * @param {number|string|null|undefined} value\n * @returns {number|null}\n */\nfunction canonicalTypeCode (value) {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return CANONICAL_WIRE_TYPE_BY_OPCODE[value] !== undefined ? value : null;\n }\n if (typeof value === 'string') {\n const s = value.trim();\n if (!s) return null;\n if (Object.prototype.hasOwnProperty.call(CANONICAL_MESSAGE_TYPE_STRINGS, s)) {\n return CANONICAL_MESSAGE_TYPE_STRINGS[s];\n }\n if (Object.prototype.hasOwnProperty.call(LEGACY_MESSAGE_TYPE_ALIASES, s)) {\n const code = LEGACY_MESSAGE_TYPE_ALIASES[s];\n return (typeof code === 'number' && Number.isFinite(code)) ? code : null;\n }\n if (/^\\d+$/.test(s)) {\n const n = Number(s);\n return CANONICAL_WIRE_TYPE_BY_OPCODE[n] !== undefined ? n : null;\n }\n }\n return null;\n}\n\n/**\n * Resolve any opcode / wire name / friendly alias to the SCREAMING_SNAKE wire label.\n * @private\n * @param {number|string|null|undefined} value\n * @returns {string|null}\n */\nfunction canonicalTypeName (value) {\n const code = canonicalTypeCode(value);\n if (code != null) return CANONICAL_WIRE_TYPE_BY_OPCODE[code] || null;\n if (typeof value === 'string') {\n const s = value.trim();\n return s || null;\n }\n return null;\n}\n\n/**\n * True when two type references name the same AMP opcode (number, wire name, or friendly alias).\n * Unregistered string labels only match via exact trim equality.\n * @private\n * @param {number|string|null|undefined} a\n * @param {number|string|null|undefined} b\n * @returns {boolean}\n */\nfunction typeEquals (a, b) {\n const ca = canonicalTypeCode(a);\n const cb = canonicalTypeCode(b);\n if (ca != null && cb != null) return ca === cb;\n if (typeof a === 'string' && typeof b === 'string') {\n return a.trim() === b.trim();\n }\n return a === b;\n}\n\n/**\n * @classdesc Application Messaging Protocol (AMP) — binary envelope for what {@link Peer},\n * {@link Service}, and bridges actually exchange. Extends {@link Actor} for construction and state helpers, but on the wire\n * you think in opcodes, headers (parent, author as x-only pubkey, hash, preimage,\n * 64-byte Schnorr signature), and payload.\n *\n *

Signing — {@link Message#signWithKey} / {@link Message#verifyWithKey} use BIP-340 Schnorr on tagged\n * hash Fabric/Message over header (signature field zeroed) + body. This is not Bitcoin Signed\n * Message (ECDSA + Core prefix).

\n *\n *

Type names — {@link Message#wireType} / {@link Message#type} use SCREAMING_SNAKE wire labels from\n * opcode decode; {@link Message#friendlyType} and {@link Message#toObject}'s type use PascalCase (or legacy)\n * JSON names. {@link Message.wireTypeFromFriendly} / {@link Message.friendlyTypeFromWire} bridge the two. See file header\n * maps (WIRE_TYPE_DECODE_ORDER, LEGACY_MESSAGE_TYPE_ALIASES) when aligning @fabric/http\n * or Hub.

\n *\n *

Body (V1) — Prefer {@link Message.fromFields} / {@link Message#toFields} with a\n * registered body schema (see body codec helpers on this module). Bodies are C-like typed fields, not JSON;\n * JSON bridging is @fabric/http. See docs/MESSAGE_BODY.md.

\n *\n *

Narrative — See DEVELOPERS.md (Actor and Message) and {@link Actor}\n * @fileoverview; home HTML is generated from DEVELOPERS.md, while this page comes from\n * types/message.js.

\n * @class Message\n * @extends Actor\n */\nclass Message extends Actor {\n /**\n * Build a message from an object. Prefer type/data; @type / @data\n * are accepted for backward compatibility.\n * @param {Object} [input={}] Initial fields: type or @type, data or\n * @data, optional signer, sensitive, preimage.\n * @return {Message} Instance ready for {@link Message#asRaw}, {@link Message#signWithKey}, etc.\n */\n constructor (input = {}) {\n super(input);\n\n this.raw = {\n magic: Buffer.alloc(4),\n version: Buffer.alloc(4),\n parent: Buffer.alloc(32),\n author: Buffer.alloc(32),\n type: Buffer.alloc(4), // TODO: 8, 32\n size: Buffer.alloc(4), // TODO: 8, 32\n hash: Buffer.alloc(32),\n preimage: Buffer.alloc(32),\n signature: Buffer.alloc(64),\n data: null\n };\n\n this.raw.magic.write(MAGIC_BYTES.toString(16), 'hex');\n this.raw.version.write(padDigits(VERSION_NUMBER.toString(16), 8), 'hex');\n\n // Use provided signer\n if (input.signer) {\n this.signer = input.signer;\n } else {\n this.signer = null;\n }\n\n /**\n * When true, keep wire preimage zeroed (no payment secret). Default public\n * messages already use zeros — see {@link Message#preimage} (Lightning-style).\n */\n this._sensitive = !!(input && input.sensitive);\n /** When true, an explicit HTLC / circuit payment preimage was set — do not clobber. */\n this._explicitPreimage = false;\n\n // Support both @type/@data (deprecated) and type/data (preferred) formats\n const messageType = input.type || input['@type'];\n const messageData = input.data || input['@data'];\n\n if (messageData && messageType) {\n this.type = messageType;\n // Set the type field to the numeric constant\n const typeCode = this.types[messageType] || this.types.P2P_BASE_MESSAGE;\n this.raw.type.writeUInt32BE(typeCode, 0);\n\n if (Buffer.isBuffer(messageData) || messageData instanceof Uint8Array) {\n this.data = Buffer.from(messageData);\n } else if (typeof messageData !== 'string') {\n // Deprecated transitional path: plain objects without an explicit field encode\n // still JSON.stringify. Prefer Message.fromFields(type, fields) for V1 bodies\n // (docs/MESSAGE_BODY.md). Auto field-encode is not applied here to avoid breaking\n // legacy ChatMessage / GenericMessage object payloads.\n this.data = JSON.stringify(messageData);\n } else {\n this.data = messageData;\n }\n }\n\n if (input.preimage != null) this.preimage = input.preimage;\n\n // Log HEARTBEAT message creation to track origin\n if (this.type === 'HEARTBEAT' || messageType === 'HEARTBEAT') {\n const hasSignature = input.signature || (this.raw.signature && this.raw.signature.toString('hex') !== '0'.repeat(128));\n const inputSummary = {\n type: input.type || input['@type'],\n hasType: !!(input.type || input['@type']),\n hasData: !!(input.data || input['@data']),\n hasSignature: !!hasSignature,\n inputKeys: Object.keys(input).filter(k => !k.startsWith('_') && k !== 'signer')\n };\n\n console.log('[FABRIC:MESSAGE]', '⚠️ HEARTBEAT message created:', {\n messageType: this.type || messageType,\n input: inputSummary,\n hasSignature: hasSignature,\n signatureHex: this.raw.signature ? this.raw.signature.toString('hex').substring(0, 16) + '...' : 'none'\n });\n console.trace('[FABRIC:MESSAGE]', 'HEARTBEAT creation stack trace:');\n }\n\n // Set various properties to be unenumerable\n for (let name of [\n '@input',\n '@entity',\n '_state',\n 'config',\n 'settings',\n 'signer',\n 'stack',\n 'observer'\n ]) Object.defineProperty(this, name, { enumerable: false });\n\n return this;\n }\n\n get author () {\n return this.raw.author.toString('hex');\n }\n\n get body () {\n return this.raw.data.toString('utf8');\n }\n\n get byte () {\n const input = 0 + '';\n const num = Buffer.from(`0x${padDigits(input, 8)}`, 'hex');\n return num;\n }\n\n get tu16 () {\n return parseInt(0);\n }\n\n get tu32 () {\n return parseInt(0);\n }\n\n get tu64 () {\n return parseInt(0);\n }\n\n get Uint256 () {\n // 256 bits\n return Buffer.from((this.raw && this.raw.hash) ? `0x${padDigits(this.raw.hash, 8)}` : Actor.randomBytes(32));\n }\n\n set signature (value) {\n if (value instanceof Buffer) value = value.toString('hex');\n this.raw.signature.write(value, 'hex');\n }\n\n /**\n * Optional 32-byte **payment** preimage on wire (Lightning-style):\n * - **All zeros (default / public):** no HTLC secret; body integrity is only {@link Message#hash}\n * (double-SHA256(body)). Do **not** put SHA256(body) here — that collides with circuit HTLC chains.\n * - **Non-zero:** explicit payment secret for inventory HTLC / Fabric Circuit hops\n * (`payment_hash = SHA256(preimage)`), covered by the Schnorr signature.\n * - {@link Message#sensitive} forces zeros and refuses to clobber an explicit secret.\n */\n get preimage () {\n if (!this.raw || !Buffer.isBuffer(this.raw.preimage) || this.raw.preimage.length !== 32) return null;\n if (isAllZero32(this.raw.preimage)) return null;\n return Buffer.from(this.raw.preimage);\n }\n\n set preimage (value) {\n if (!this.raw.preimage || !Buffer.isBuffer(this.raw.preimage) || this.raw.preimage.length !== 32) {\n this.raw.preimage = Buffer.alloc(32);\n }\n if (value === null || value === undefined) {\n this.raw.preimage.fill(0);\n this._explicitPreimage = false;\n return;\n }\n const buf = Buffer.isBuffer(value) ? value : Buffer.from(value, 'hex');\n if (buf.length !== 32) throw new Error('Message preimage must be 32 bytes');\n buf.copy(this.raw.preimage);\n this._explicitPreimage = !isAllZero32(this.raw.preimage);\n }\n\n toBuffer () {\n return this.asRaw();\n }\n\n /**\n * Returns a {@link Buffer} of the complete message.\n * @return {Buffer} Buffer of the encoded {@link Message}.\n */\n asRaw () {\n return Buffer.concat([this.header, this.raw.data]);\n }\n\n toRaw () {\n return this.asRaw();\n }\n\n asTypedArray () {\n return new Uint8Array(this.asRaw());\n // TODO: Node 12\n // return new TypedArray(this.asRaw());\n }\n\n asBlob () {\n return this.asRaw().map(byte => parseInt(byte, 16));\n }\n\n toObject () {\n return {\n headers: {\n magic: parseInt(`${this.raw.magic.toString('hex')}`, 16),\n version: parseInt(`${this.raw.version.toString('hex')}`, 16),\n parent: this.raw.parent.toString('hex'),\n author: this.raw.author.toString('hex'),\n type: parseInt(`${this.raw.type.toString('hex')}`, 16),\n size: parseInt(`${this.raw.size.toString('hex')}`, 16),\n hash: this.raw.hash.toString('hex'),\n preimage: this.preimage ? this.preimage.toString('hex') : null,\n signature: this.raw.signature.toString('hex'),\n },\n type: this.friendlyType,\n wireType: this.wireType,\n data: this.data\n };\n }\n\n toVector () {\n return [this.type, this.data];\n }\n\n fromObject (input) {\n return new Message(input);\n }\n\n /**\n * Signs the message using a specific key.\n * Uses BIP-340 Schnorr signatures with tagged hash \"Fabric/Message\".\n * Signs the complete message (header + body) as per C implementation.\n *\n * @param {Object} key Key object with private key and sign method.\n * @param {String|Buffer} key.private Private key\n * @param {String|Buffer} key.pubkey Public key\n * @param {Function} key.sign Signing function\n * @returns {Message} Signed message.\n * @throws {Error} If attempting to sign without a private key\n */\n signWithKey (key) {\n if (!key) throw new Error('No key provided.');\n if (!key.private) throw new Error('Cannot sign message with public key only.');\n if (!key.sign) throw new Error('Key object must implement sign method');\n\n // Extract x-only public key (32 bytes) from compressed pubkey (33 bytes)\n // This matches the C implementation which uses secp256k1_xonly_pubkey_serialize\n const compressedPubkey = Buffer.from(key.public.encodeCompressed('hex'), 'hex');\n const xOnlyPubkey = compressedPubkey.slice(1); // Remove prefix byte (first byte)\n\n // Set author field BEFORE signing so it's included in the signed data\n // Write x-only pubkey to author field (32 bytes = 64 hex chars)\n this.raw.author.write(xOnlyPubkey.toString('hex'), 'hex');\n\n // Create header with signature field zeroed (as it would be during signing)\n // The C implementation includes the signature field in offsetof(Message, body),\n // but it's zero/uninitialized when signing, so we zero it\n const zeroedSignature = Buffer.alloc(64); // 64 bytes of zeros\n const pre = Buffer.isBuffer(this.raw.preimage)\n ? this.raw.preimage\n : Buffer.from(this.raw.preimage || '', 'hex');\n if (pre.length !== 32) throw new Error('Message preimage must be 32 bytes on wire');\n const headerForHash = Buffer.concat([\n Buffer.from(this.raw.magic, 'hex'),\n Buffer.from(this.raw.version, 'hex'),\n Buffer.from(this.raw.parent, 'hex'),\n Buffer.from(this.raw.author, 'hex'),\n Buffer.from(this.raw.type, 'hex'),\n Buffer.from(this.raw.size, 'hex'),\n Buffer.from(this.raw.hash, 'hex'),\n pre,\n zeroedSignature // Signature field zeroed for hash computation\n ]);\n\n // Create buffer with header (signature zeroed) + body\n // This matches the C implementation: memcpy(data_buffer, message, offsetof(Message, body))\n const dataBuffer = Buffer.concat([\n headerForHash,\n this.raw.data || Buffer.alloc(0)\n ]);\n\n // Compute tagged hash with \"Fabric/Message\" tag (BIP-340)\n // This matches: secp256k1_tagged_sha256(ctx, msghash, \"Fabric/Message\", data_buffer, data_size)\n const tag = 'Fabric/Message';\n const messageHash = taggedHash(tag, dataBuffer);\n\n // Sign the tagged hash using BIP-340 Schnorr\n // This matches: secp256k1_schnorrsig_sign32(ctx, signature, msghash, &keypair, NULL)\n // Use signSchnorrHash since we already have a pre-computed hash\n const signature = key.signSchnorrHash(messageHash);\n\n // Write signature (64 bytes = 128 hex chars)\n this.raw.signature.write(signature.toString('hex'), 'hex');\n\n return this;\n }\n\n sign () {\n if (!this.signer) throw new Error('No signer available.');\n if (!this.signer.private) throw new Error('Cannot sign message with public key only.');\n if (!this.signer.sign) throw new Error('Signer must implement sign method');\n\n return this.signWithKey(this.signer);\n }\n\n /**\n * Verify a message's signature.\n * @returns {Boolean} `true` if the signature is valid, `false` if not.\n */\n verify () {\n if (!this.header) throw new Error('No header property.');\n if (!this.raw) throw new Error('No raw property.');\n if (!this.signer) throw new Error('No signer available.');\n if (!this.signer.verify) throw new Error('Signer must implement verify method');\n\n return this.verifyWithKey(this.signer);\n }\n\n /**\n * Verify a message's signature with a specific key.\n * Uses BIP-340 Schnorr signature verification with tagged hash \"Fabric/Message\".\n * Verifies the complete message (header + body) as per C implementation.\n *\n * @param {Object} key Key object with verify method.\n * @param {Function} key.verify Verification function\n * @returns {Boolean} `true` if the signature is valid, `false` if not.\n */\n verifyWithKey (key) {\n if (!this.header) throw new Error('No header property.');\n if (!this.raw) throw new Error('No raw property.');\n if (!key) throw new Error('No key provided.');\n if (!key.verify) throw new Error('Key object must implement verify method');\n\n // Parse x-only pubkey from author field (32 bytes = 64 hex chars)\n // This matches the C implementation which uses secp256k1_xonly_pubkey_parse\n const authorHex = this.raw.author.toString('hex');\n if (authorHex.length !== 64) {\n throw new Error(`Invalid author field length: expected 64 hex chars (32 bytes), got ${authorHex.length}`);\n }\n const xOnlyPubkeyFromAuthor = Buffer.from(authorHex, 'hex');\n\n // Get x-only pubkey from the provided key for comparison\n // This allows us to verify using the key directly instead of reconstructing\n const compressedPubkeyFromKey = Buffer.from(key.public.encodeCompressed('hex'), 'hex');\n const xOnlyPubkeyFromKey = compressedPubkeyFromKey.slice(1);\n\n // Verify that the author field matches the key's x-only pubkey\n if (!xOnlyPubkeyFromAuthor.equals(xOnlyPubkeyFromKey)) {\n return false;\n }\n\n // Create header with signature field zeroed (as it would be during signing)\n // The C implementation includes the signature field in offsetof(Message, body),\n // but it's zero/uninitialized when signing, so we zero it for verification\n const zeroedSignature = Buffer.alloc(64); // 64 bytes of zeros\n const pre = Buffer.isBuffer(this.raw.preimage)\n ? this.raw.preimage\n : Buffer.from(this.raw.preimage || '', 'hex');\n if (pre.length !== 32) throw new Error('Message preimage must be 32 bytes on wire');\n const headerForHash = Buffer.concat([\n Buffer.from(this.raw.magic, 'hex'),\n Buffer.from(this.raw.version, 'hex'),\n Buffer.from(this.raw.parent, 'hex'),\n Buffer.from(this.raw.author, 'hex'),\n Buffer.from(this.raw.type, 'hex'),\n Buffer.from(this.raw.size, 'hex'),\n Buffer.from(this.raw.hash, 'hex'),\n pre,\n zeroedSignature // Signature field zeroed for hash computation\n ]);\n\n // Create buffer with header (signature zeroed) + body\n // This matches the C implementation: memcpy(data_buffer, message, offsetof(Message, body))\n const dataBuffer = Buffer.concat([\n headerForHash,\n this.raw.data || Buffer.alloc(0)\n ]);\n\n // Compute tagged hash with \"Fabric/Message\" tag (BIP-340)\n const tag = 'Fabric/Message';\n const messageHash = taggedHash(tag, dataBuffer);\n\n // Get signature\n const signature = this.raw.signature;\n const sigBuffer = Buffer.isBuffer(signature) ? signature : Buffer.from(signature.toString('hex'), 'hex');\n\n // Use the provided key's verifySchnorrHash method directly\n // This avoids needing to reconstruct the key from the author field\n return key.verifySchnorrHash(messageHash, sigBuffer);\n }\n\n /**\n * Sets the signer for the message.\n * @param {Object} key Key object with pubkey property.\n * @param {String|Buffer} key.pubkey Public key\n * @returns {Message} Instance of the Message with associated signer.\n */\n _setSigner (key) {\n if (!key || !key.pubkey) {\n throw new Error('Key object with pubkey is required');\n }\n\n this.signer = key;\n return this;\n }\n\n static parseBuffer (buffer) {\n const message = struct()\n .charsnt('magic', 4, 'hex')\n .charsnt('version', 4, 'hex')\n .charsnt('parent', 32, 'hex')\n .charsnt('author', 32, 'hex')\n .charsnt('type', 4, 'hex')\n .charsnt('size', 4, 'hex')\n .charsnt('hash', 32, 'hex')\n .charsnt('preimage', 32, 'hex')\n .charsnt('signature', 64, 'hex')\n .charsnt('data', buffer.length - HEADER_SIZE);\n\n message.allocate();\n message._setBuff(buffer);\n\n return message;\n }\n\n static parseRawMessage (buffer) {\n const message = {\n magic: buffer.slice(0, 4),\n version: buffer.slice(4, 8),\n parent: buffer.slice(8, 40),\n author: buffer.slice(40, 72),\n type: buffer.slice(72, 76),\n size: buffer.slice(76, 80),\n hash: buffer.slice(80, 112),\n preimage: buffer.slice(112, 144),\n signature: buffer.slice(144, HEADER_SIZE)\n };\n\n if (buffer.length >= HEADER_SIZE) {\n message.data = buffer.slice(HEADER_SIZE, buffer.length);\n }\n\n return message;\n };\n\n static fromBuffer (buffer) {\n return Message.fromRaw(buffer);\n }\n\n static fromRaw (input) {\n if (!input) return null;\n // Convert various buffer-like inputs to Buffer\n let buffer;\n if (input instanceof Buffer) {\n buffer = input;\n } else if (input instanceof Uint8Array) {\n buffer = Buffer.from(input.buffer);\n } else if (input instanceof ArrayBuffer) {\n buffer = Buffer.from(input);\n } else if (input.buffer instanceof ArrayBuffer) {\n buffer = Buffer.from(input.buffer);\n } else {\n throw new Error('Input must be a buffer or buffer-like object.');\n }\n\n const message = new Message();\n const payload = buffer.subarray(HEADER_SIZE);\n message.raw = {\n magic: buffer.subarray(0, 4),\n version: buffer.subarray(4, 8),\n parent: buffer.subarray(8, 40),\n author: buffer.subarray(40, 72),\n type: buffer.subarray(72, 76),\n size: buffer.subarray(76, 80),\n hash: buffer.subarray(80, 112),\n preimage: buffer.subarray(112, 144),\n signature: buffer.subarray(144, HEADER_SIZE),\n data: payload\n };\n\n // Do not assign `message.data` here: the `data` setter recomputes `raw.hash`\n // (double-SHA256 of the body), which would replace the on-wire hash and break\n // `Peer._handleFabricMessage` body-integrity checks (C parity).\n message._explicitPreimage = !isAllZero32(message.raw.preimage);\n\n return message;\n }\n\n static fromVector (vector = ['LogMessage', 'No vector provided.']) {\n let message = null;\n\n try {\n message = new Message({\n type: vector[0],\n data: vector[1]\n });\n } catch (exception) {\n console.error('[FABRIC:MESSAGE]', 'Could not construct Message:', exception);\n }\n\n return message;\n }\n\n /**\n * Build a Message whose body is encoded from a registered field schema (V1).\n * @param {string|number} type Wire or friendly type name (or opcode).\n * @param {object} [fields={}] Named fields matching the schema.\n * @param {object} [opts={}] Extra Message constructor options (`signer`, `sensitive`, …).\n * @returns {Message}\n */\n static fromFields (type, fields = {}, opts = {}) {\n const schema = getBodySchema(type);\n if (!schema) {\n throw new Error(`Message.fromFields: no body schema registered for type ${type}`);\n }\n return new Message(Object.assign({}, opts, {\n type,\n data: encodeBody(schema, fields)\n }));\n }\n\n /**\n * Decode body bytes via the registered field schema for this message type.\n * Truncated / malformed peer bodies return {@code null} (protocol violation) instead of throwing.\n * @returns {object|null} Field map, or null if no schema / empty / undecodable body.\n */\n toFields () {\n const opcode = this.raw.type.readUInt32BE(0);\n const schema = getBodySchema(this.type) || getBodySchema(this.wireType) || getBodySchema(opcode);\n if (!schema) return null;\n const buf = Buffer.isBuffer(this.raw.data)\n ? this.raw.data\n : Buffer.from(this.data || '', 'utf8');\n if (!buf.length) return {};\n try {\n return decodeBody(schema, buf);\n } catch (err) {\n if (err && (err.name === 'RangeError' || err instanceof RangeError)) return null;\n throw err;\n }\n }\n\n /** Raw body Buffer (preferred over UTF-8 `data` getter for binary field bodies). */\n get bodyBuffer () {\n if (Buffer.isBuffer(this.raw.data)) return this.raw.data;\n return Buffer.from(this.data || '', 'utf8');\n }\n\n /* get [Symbol.toStringTag] () {\n return ``;\n } */\n\n get id () {\n return Hash256.digest(this.asRaw());\n }\n\n get types () {\n return Object.assign({}, CANONICAL_MESSAGE_TYPE_STRINGS, LEGACY_MESSAGE_TYPE_ALIASES);\n }\n\n get codes () {\n return Object.assign({}, CANONICAL_WIRE_TYPE_BY_OPCODE);\n }\n\n get magic () {\n return this.raw.magic;\n }\n\n get signature () {\n return parseInt(Buffer.from(this.raw.signature, 'hex'));\n }\n\n get size () {\n return parseInt(Buffer.from(this.raw.size, 'hex'));\n }\n\n get version () {\n return parseInt(Buffer.from(this.raw.version));\n }\n\n get header () {\n if (!Buffer.isBuffer(this.raw.preimage) || this.raw.preimage.length !== 32) {\n throw new Error('Message raw.preimage must be a 32-byte Buffer');\n }\n const parts = [\n Buffer.from(this.raw.magic, 'hex'),\n Buffer.from(this.raw.version, 'hex'),\n Buffer.from(this.raw.parent, 'hex'),\n Buffer.from(this.raw.author, 'hex'),\n Buffer.from(this.raw.type, 'hex'),\n Buffer.from(this.raw.size, 'hex'),\n Buffer.from(this.raw.hash, 'hex'),\n this.raw.preimage,\n Buffer.from(this.raw.signature, 'hex')\n ];\n\n return Buffer.concat(parts);\n }\n\n /**\n * AMP wire type string (SCREAMING_SNAKE_CASE / opcode-canonical). Same as {@link Message#type}.\n */\n get wireType () {\n const code = parseInt(this.raw.type.toString('hex'), 16);\n // Strict Protocol V1: unregistered opcodes must NOT alias to P2P_BASE_MESSAGE\n // (that would run generic JSON dispatch / relay paths on hostile type bytes).\n return CANONICAL_WIRE_TYPE_BY_OPCODE[code] || 'UNKNOWN_MESSAGE';\n }\n\n /**\n * JSON-oriented type label (historical PascalCase aliases). Use in APIs and `toObject().type`.\n */\n get friendlyType () {\n return friendlyTypeFromWire(this.wireType);\n }\n}\n\nObject.defineProperty(Message.prototype, 'type', {\n get () {\n return this.wireType;\n },\n set (value) {\n // console.trace('setting type:', value);\n let code = this.types[value];\n // Default to P2P_BASE_MESSAGE for unknown/unregistered names.\n if (!code) {\n this.emit('warning', `Unknown message type: ${value}`);\n // Keep unknown payloads representable on-wire without inventing ad-hoc generic labels.\n tryParseWireJson(typeof this.data === 'string' ? this.data : String(this.data ?? ''));\n code = this.types.P2P_BASE_MESSAGE;\n value = 'P2P_BASE_MESSAGE';\n }\n\n const padded = padDigits(code.toString(16), 8);\n this['@type'] = value;\n this.raw.type.write(padded, 'hex');\n }\n});\n\nObject.defineProperty(Message.prototype, 'data', {\n get () {\n if (!this.raw.data) return '';\n return this.raw.data.toString('utf8');\n },\n set (value) {\n if (!value) value = '';\n const bodyBuf = Buffer.from(value);\n const hexDouble = Hash256.doubleDigest(bodyBuf);\n // Keep `raw.hash` as 32 bytes (double-SHA256 of body); do not assign a string to the buffer slot.\n if (Buffer.isBuffer(this.raw.hash) && this.raw.hash.length === 32) {\n Buffer.from(hexDouble, 'hex').copy(this.raw.hash);\n } else {\n this.raw.hash = Buffer.from(hexDouble, 'hex');\n }\n this.raw.data = bodyBuf;\n this.raw.size.write(padDigits(this.raw.data.byteLength.toString(16), 8), 'hex');\n // Lightning-style: body changes never invent a payment preimage. Public =\n // all-zero unless an explicit HTLC/circuit secret was set (or sensitive clears it).\n if (!Buffer.isBuffer(this.raw.preimage) || this.raw.preimage.length !== 32) {\n this.raw.preimage = Buffer.alloc(32);\n }\n if (this._sensitive || !this._explicitPreimage) {\n this.raw.preimage.fill(0);\n if (this._sensitive) this._explicitPreimage = false;\n }\n }\n});\n\nObject.defineProperty(Message.prototype, 'sensitive', {\n get () {\n return !!this._sensitive;\n },\n set (value) {\n this._sensitive = !!value;\n if (!this._sensitive) return;\n // Never leave a payment secret on a sensitive frame; do not invent SHA256(body).\n if (!Buffer.isBuffer(this.raw.preimage) || this.raw.preimage.length !== 32) {\n this.raw.preimage = Buffer.alloc(32);\n }\n this.raw.preimage.fill(0);\n this._explicitPreimage = false;\n }\n});\n\nMessage.friendlyTypeFromWire = friendlyTypeFromWire;\nMessage.wireTypeFromFriendly = wireTypeFromFriendly;\nMessage.canonicalTypeCode = canonicalTypeCode;\nMessage.canonicalTypeName = canonicalTypeName;\nMessage.typeEquals = typeEquals;\nMessage.WIRE_TYPE_DECODE_ORDER = WIRE_TYPE_DECODE_ORDER;\nMessage.FRIENDLY_TYPE_BY_WIRE = FRIENDLY_TYPE_BY_WIRE;\nMessage.FRIENDLY_TO_WIRE_TYPE = FRIENDLY_TO_WIRE_TYPE;\n\n// --- AMP body field codec (formerly functions/messageBodyCodec) ---\nconst BODY_FIELD_TYPES = Object.freeze([\n 'u8', 'u16', 'u32', 'u64', 'bytes32', 'bytes', 'string', 'message'\n]);\n/** @private @type {Map>} */\nconst BODY_SCHEMA_BY_KEY = new Map();\n\nfunction registerBodySchema (opcodeOrName, schema) {\n if (!Array.isArray(schema)) throw new TypeError('schema must be an array');\n for (const f of schema) {\n if (!f || typeof f.name !== 'string' || !BODY_FIELD_TYPES.includes(f.type)) {\n throw new TypeError(`invalid field: ${JSON.stringify(f)}`);\n }\n }\n BODY_SCHEMA_BY_KEY.set(opcodeOrName, schema.slice());\n}\n\nfunction getBodySchema (opcodeOrName) {\n if (opcodeOrName == null) return null;\n if (BODY_SCHEMA_BY_KEY.has(opcodeOrName)) return BODY_SCHEMA_BY_KEY.get(opcodeOrName);\n if (typeof opcodeOrName === 'string') {\n const upper = opcodeOrName.toUpperCase();\n if (BODY_SCHEMA_BY_KEY.has(upper)) return BODY_SCHEMA_BY_KEY.get(upper);\n }\n return null;\n}\n\nfunction _writeU32 (buf, offset, value) {\n buf.writeUInt32BE(value >>> 0, offset);\n}\n\nfunction _readU32 (buf, offset) {\n return buf.readUInt32BE(offset);\n}\n\nfunction encodeBody (schema, fields = {}) {\n if (!Array.isArray(schema)) throw new TypeError('schema required');\n const chunks = [];\n let total = 0;\n for (const def of schema) {\n const value = fields[def.name];\n let part;\n switch (def.type) {\n case 'u8': {\n part = Buffer.alloc(1);\n part.writeUInt8(Number(value) || 0, 0);\n break;\n }\n case 'u16': {\n part = Buffer.alloc(2);\n part.writeUInt16BE(Number(value) || 0, 0);\n break;\n }\n case 'u32': {\n part = Buffer.alloc(4);\n _writeU32(part, 0, Number(value) || 0);\n break;\n }\n case 'u64': {\n part = Buffer.alloc(8);\n const n = typeof value === 'bigint' ? value : BigInt(Number(value) || 0);\n part.writeBigUInt64BE(n, 0);\n break;\n }\n case 'bytes32': {\n part = Buffer.alloc(32);\n if (Buffer.isBuffer(value)) {\n value.copy(part, 0, 0, Math.min(32, value.length));\n } else if (typeof value === 'string' && /^[0-9a-fA-F]*$/.test(value)) {\n Buffer.from(value.padStart(64, '0').slice(0, 64), 'hex').copy(part);\n }\n break;\n }\n case 'bytes':\n case 'message': {\n const raw = Buffer.isBuffer(value)\n ? value\n : (value == null ? Buffer.alloc(0) : Buffer.from(String(value), 'utf8'));\n part = Buffer.alloc(4 + raw.length);\n _writeU32(part, 0, raw.length);\n raw.copy(part, 4);\n break;\n }\n case 'string': {\n const raw = Buffer.from(value == null ? '' : String(value), 'utf8');\n part = Buffer.alloc(4 + raw.length);\n _writeU32(part, 0, raw.length);\n raw.copy(part, 4);\n break;\n }\n default:\n throw new TypeError(`unsupported field type: ${def.type}`);\n }\n total += part.length;\n if (total > MAX_MESSAGE_SIZE) {\n throw new RangeError(`message body exceeds MAX_MESSAGE_SIZE (${MAX_MESSAGE_SIZE})`);\n }\n chunks.push(part);\n }\n return Buffer.concat(chunks, total);\n}\n\n/**\n * Default for an optional field when the wire body ends before that field.\n * @private\n * @param {{ type: string }} def\n */\nfunction _optionalFieldDefault (def) {\n switch (def.type) {\n case 'string':\n return '';\n case 'bytes':\n case 'message':\n return Buffer.alloc(0);\n case 'bytes32':\n return Buffer.alloc(32);\n case 'u8':\n case 'u16':\n case 'u32':\n return 0;\n case 'u64':\n return 0n;\n default:\n throw new TypeError(`unsupported field type: ${def.type}`);\n }\n}\n\nfunction decodeBody (schema, buffer) {\n if (!Array.isArray(schema)) throw new TypeError('schema required');\n const buf = Buffer.isBuffer(buffer) ? buffer : Buffer.from(buffer || []);\n const out = {};\n let offset = 0;\n for (const def of schema) {\n if (def.optional && offset >= buf.length) {\n out[def.name] = _optionalFieldDefault(def);\n continue;\n }\n if (offset > buf.length) {\n throw new RangeError(`truncated body while reading field ${def.name}`);\n }\n switch (def.type) {\n case 'u8': {\n if (offset + 1 > buf.length) throw new RangeError(`truncated body at ${def.name}`);\n out[def.name] = buf.readUInt8(offset);\n offset += 1;\n break;\n }\n case 'u16': {\n if (offset + 2 > buf.length) throw new RangeError(`truncated body at ${def.name}`);\n out[def.name] = buf.readUInt16BE(offset);\n offset += 2;\n break;\n }\n case 'u32': {\n if (offset + 4 > buf.length) throw new RangeError(`truncated body at ${def.name}`);\n out[def.name] = _readU32(buf, offset);\n offset += 4;\n break;\n }\n case 'u64': {\n if (offset + 8 > buf.length) throw new RangeError(`truncated body at ${def.name}`);\n out[def.name] = buf.readBigUInt64BE(offset);\n offset += 8;\n break;\n }\n case 'bytes32': {\n if (offset + 32 > buf.length) throw new RangeError(`truncated body at ${def.name}`);\n out[def.name] = Buffer.from(buf.subarray(offset, offset + 32));\n offset += 32;\n break;\n }\n case 'bytes':\n case 'message': {\n if (offset + 4 > buf.length) throw new RangeError(`truncated body at ${def.name}`);\n const len = _readU32(buf, offset);\n offset += 4;\n if (offset + len > buf.length) throw new RangeError(`truncated body at ${def.name}`);\n out[def.name] = Buffer.from(buf.subarray(offset, offset + len));\n offset += len;\n break;\n }\n case 'string': {\n if (offset + 4 > buf.length) throw new RangeError(`truncated body at ${def.name}`);\n const len = _readU32(buf, offset);\n offset += 4;\n if (offset + len > buf.length) throw new RangeError(`truncated body at ${def.name}`);\n out[def.name] = buf.subarray(offset, offset + len).toString('utf8');\n offset += len;\n break;\n }\n default:\n throw new TypeError(`unsupported field type: ${def.type}`);\n }\n }\n return out;\n}\n\nconst SCHEMA_P2P_PING = Object.freeze([{ name: 'nonce', type: 'string' }]);\nconst SCHEMA_P2P_CHAT = null;\nconst SCHEMA_PROGRAM_RUN = Object.freeze([\n { name: 'programHash', type: 'bytes32' },\n { name: 'runCommitment', type: 'bytes32' },\n { name: 'resultHint', type: 'string' }\n]);\n/** @private Directed onion hop — see {@link module:@fabric/core/functions/fabricOnion}. */\nconst SCHEMA_P2P_FORWARD = Object.freeze([\n { name: 'nextPeer', type: 'bytes32' },\n { name: 'ttl', type: 'u8' },\n { name: 'inner', type: 'message' }\n]);\n/** @private Discovery / peering field layouts (Phase B); JSON bodies remain accepted. */\nconst SCHEMA_P2P_PEER_GOSSIP = Object.freeze([\n { name: 'host', type: 'string' },\n { name: 'port', type: 'u32' },\n { name: 'gossipHop', type: 'u8' },\n { name: 'nonce', type: 'string' }\n]);\nconst SCHEMA_P2P_PEERING_OFFER = Object.freeze([\n { name: 'transport', type: 'string' },\n { name: 'host', type: 'string' },\n { name: 'port', type: 'u32' },\n { name: 'peeringHop', type: 'u8' }\n]);\nconst SCHEMA_P2P_PEER_ANNOUNCE = Object.freeze([\n { name: 'host', type: 'string' },\n { name: 'port', type: 'u32' }\n]);\n\n/**\n * Parse an inbound AMP body: prefer JSON (legacy), else registered field schema.\n * @private\n * @param {Message} message\n * @returns {{ ok: true, value: object, encoding: 'json'|'fields' } | { ok: false, error: Error }}\n */\nfunction tryParseMessageBody (message) {\n if (!message) {\n return { ok: false, error: new TypeError('tryParseMessageBody: message required') };\n }\n const rawStr = typeof message.data === 'string'\n ? message.data\n : (message.data != null ? String(message.data) : '');\n const pr = tryParseWireJson(rawStr);\n if (pr.ok && pr.value !== null && typeof pr.value === 'object' && !Array.isArray(pr.value)) {\n return { ok: true, value: pr.value, encoding: 'json' };\n }\n const schema = getBodySchema(message.type) || getBodySchema(message.wireType);\n const bodyBuf = message.raw && Buffer.isBuffer(message.raw.data)\n ? message.raw.data\n : null;\n if (schema && bodyBuf && bodyBuf.length > 0) {\n try {\n const fields = decodeBody(schema, bodyBuf);\n if (fields && typeof fields === 'object' && !Array.isArray(fields)) {\n return { ok: true, value: fields, encoding: 'fields' };\n }\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n return { ok: false, error: e };\n }\n }\n if (pr.ok) {\n return { ok: false, error: new TypeError('message body must be a JSON object or field layout') };\n }\n return { ok: false, error: pr.error || new Error('unparsed message body') };\n}\n\n(function _installBodySchemaDefaults () {\n registerBodySchema(P2P_PING, SCHEMA_P2P_PING);\n registerBodySchema('P2P_PING', SCHEMA_P2P_PING);\n registerBodySchema('Ping', SCHEMA_P2P_PING);\n registerBodySchema(P2P_PONG, SCHEMA_P2P_PING);\n registerBodySchema('P2P_PONG', SCHEMA_P2P_PING);\n registerBodySchema('Pong', SCHEMA_P2P_PING);\n registerBodySchema('FabricProgramRun', SCHEMA_PROGRAM_RUN);\n registerBodySchema(P2P_FORWARD, SCHEMA_P2P_FORWARD);\n registerBodySchema('P2P_FORWARD', SCHEMA_P2P_FORWARD);\n registerBodySchema(P2P_PEER_GOSSIP, SCHEMA_P2P_PEER_GOSSIP);\n registerBodySchema('P2P_PEER_GOSSIP', SCHEMA_P2P_PEER_GOSSIP);\n registerBodySchema('PeerGossip', SCHEMA_P2P_PEER_GOSSIP);\n registerBodySchema(P2P_PEERING_OFFER, SCHEMA_P2P_PEERING_OFFER);\n registerBodySchema('P2P_PEERING_OFFER', SCHEMA_P2P_PEERING_OFFER);\n registerBodySchema('PeeringOffer', SCHEMA_P2P_PEERING_OFFER);\n registerBodySchema(P2P_PEER_ANNOUNCE, SCHEMA_P2P_PEER_ANNOUNCE);\n registerBodySchema('P2P_PEER_ANNOUNCE', SCHEMA_P2P_PEER_ANNOUNCE);\n registerBodySchema('PeerAnnounce', SCHEMA_P2P_PEER_ANNOUNCE);\n})();\n\nMessage.FIELD_TYPES = BODY_FIELD_TYPES;\nMessage.MAX_MESSAGE_SIZE = MAX_MESSAGE_SIZE;\nMessage.registerBodySchema = registerBodySchema;\nMessage.getBodySchema = getBodySchema;\nMessage.encodeBody = encodeBody;\nMessage.decodeBody = decodeBody;\nMessage.tryParseMessageBody = tryParseMessageBody;\nMessage.SCHEMA_P2P_PING = SCHEMA_P2P_PING;\nMessage.SCHEMA_P2P_CHAT = SCHEMA_P2P_CHAT;\nMessage.SCHEMA_PROGRAM_RUN = SCHEMA_PROGRAM_RUN;\nMessage.SCHEMA_P2P_FORWARD = SCHEMA_P2P_FORWARD;\nMessage.SCHEMA_P2P_PEER_GOSSIP = SCHEMA_P2P_PEER_GOSSIP;\nMessage.SCHEMA_P2P_PEERING_OFFER = SCHEMA_P2P_PEERING_OFFER;\nMessage.SCHEMA_P2P_PEER_ANNOUNCE = SCHEMA_P2P_PEER_ANNOUNCE;\n\nmodule.exports = Message;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL21lc3NhZ2UuanMiLCJtYXBwaW5ncyI6IjtBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxFQUFFLG1CQUFPLENBQUMsOERBQWM7O0FBRTFCLFFBQVEsbUJBQW1CLEVBQUUsbUJBQU8sQ0FBQyxnRkFBdUI7O0FBRTVEO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE1BQU07QUFDMUI7O0FBRUE7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyw4Q0FBUTs7QUFFL0I7QUFDQSxjQUFjLG1CQUFPLENBQUMsMkRBQVM7QUFDL0IsZ0JBQWdCLG1CQUFPLENBQUMsK0RBQVc7O0FBRW5DO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsa0ZBQXdCO0FBQ2xELG1CQUFtQixtQkFBTyxDQUFDLG9GQUF5Qjs7QUFFcEQ7QUFDQTtBQUNBLDRCQUE0QixtQkFBbUI7QUFDL0M7QUFDQSxvQkFBb0IsMkJBQTJCO0FBQy9DLG1EQUFtRCxvQ0FBb0M7QUFDdkY7QUFDQSw4Q0FBOEMscUJBQXFCO0FBQ25FLElBQUksb0NBQW9DLEdBQUcsb0NBQW9DO0FBQy9FO0FBQ0E7QUFDQSx3REFBd0Qsc0NBQXNDO0FBQzlGLCtDQUErQyxlQUFlO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxJQUFJO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxJQUFJO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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SUFBSSxzQ0FBc0M7QUFDMUMsSUFBSSx3Q0FBd0M7QUFDNUMsSUFBSTtBQUNKO0FBQ0EsdUNBQXVDLGdEQUFnRDtBQUN2RjtBQUNBLElBQUksbUNBQW1DO0FBQ3ZDLElBQUkseUJBQXlCO0FBQzdCLElBQUk7QUFDSjtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBLElBQUksOEJBQThCO0FBQ2xDLElBQUksMkJBQTJCO0FBQy9CLElBQUksK0JBQStCO0FBQ25DLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSSxtQ0FBbUM7QUFDdkMsSUFBSSw4QkFBOEI7QUFDbEMsSUFBSSwyQkFBMkI7QUFDL0IsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJLDhCQUE4QjtBQUNsQyxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLGVBQWUscURBQXFELElBQUk7QUFDeEU7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsaUNBQWlDLE1BQU07QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS90eXBlcy9tZXNzYWdlLmpzP2ZiYmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7XG4gIE1BR0lDX0JZVEVTLFxuICBWRVJTSU9OX05VTUJFUixcbiAgSEVBREVSX1NJWkUsXG4gIE1BWF9NRVNTQUdFX1NJWkUsXG4gIE9QX0NZQ0xFLFxuICBMT0dfTUVTU0FHRV9UWVBFLFxuICBHRU5FUklDX0xJU1RfVFlQRSxcbiAgR0VORVJJQ19NRVNTQUdFX1RZUEUsXG4gIEJJVENPSU5fQkxPQ0tfVFlQRSxcbiAgQklUQ09JTl9CTE9DS19IQVNIX1RZUEUsXG4gIEJJVENPSU5fVFJBTlNBQ1RJT05fVFlQRSxcbiAgQklUQ09JTl9UUkFOU0FDVElPTl9IQVNIX1RZUEUsXG4gIFAyUF9HRU5FUklDLFxuICBQMlBfSURFTlRfUkVRVUVTVCxcbiAgUDJQX0lERU5UX1JFU1BPTlNFLFxuICBQMlBfUElORyxcbiAgUDJQX1BPTkcsXG4gIFAyUF9TVEFSVF9DSEFJTixcbiAgUDJQX0lOU1RSVUNUSU9OLFxuICBQMlBfQkFTRV9NRVNTQUdFLFxuICBQMlBfQ0hBSU5fU1lOQ19SRVFVRVNULFxuICBQMlBfRkxVU0hfQ0hBSU4sXG4gIFAyUF9JTlZFTlRPUllfUkVRVUVTVCxcbiAgUDJQX0lOVkVOVE9SWV9SRVNQT05TRSxcbiAgUDJQX0ZJTEVfU0VORCxcbiAgUDJQX0RPQ1VNRU5UX1BVQkxJU0gsXG4gIFAyUF9QRUVSX0FMSUFTLFxuICBQMlBfUEVFUl9BTk5PVU5DRSxcbiAgUDJQX1BFRVJfR09TU0lQLFxuICBQMlBfUEVFUklOR19PRkZFUixcbiAgUDJQX1NFU1NJT05fT0ZGRVIsXG4gIFAyUF9TRVNTSU9OX09QRU4sXG4gIFAyUF9DT05UUkFDVF9QVUJMSVNILFxuICBQMlBfQ09OVFJBQ1RfTUVTU0FHRSxcbiAgUDJQX1NUQVRFX1JPT1QsXG4gIFAyUF9TVEFURV9DT01NSVRUTUVOVCxcbiAgUDJQX1NUQVRFX0NIQU5HRSxcbiAgUDJQX1NUQVRFX1JFUVVFU1QsXG4gIFAyUF9UUkFOU0FDVElPTixcbiAgUDJQX0NBTEwsXG4gIFAyUF9SRUxBWSxcbiAgUDJQX01FU1NBR0VfUkVDRUlQVCxcbiAgUDJQX0ZPUldBUkQsXG4gIENIQVRfTUVTU0FHRSxcbiAgUDJQX0NIQVRfTUVTU0FHRSxcbiAgU0lERUNIQUlOX1NUQVRFX1BBVENIX1RZUEUsXG4gIERPQ1VNRU5UX1BVQkxJU0hfVFlQRSxcbiAgRE9DVU1FTlRfUkVRVUVTVF9UWVBFLFxuICBKU09OX0NBTExfVFlQRSxcbiAgUEFUQ0hfTUVTU0FHRV9UWVBFLFxuICBDT05UUkFDVF9QUk9QT1NBTF9UWVBFLFxuICBCTE9DS19DQU5ESURBVEUsXG4gIFBFRVJfQ0FORElEQVRFLFxuICBTRVNTSU9OX1NUQVJULFxuICAvLyBMaWdodG5pbmcgbWVzc2FnZSBjb2Rlc1xuICBMSUdIVE5JTkdfV0FSTklORyxcbiAgTElHSFROSU5HX0lOSVQsXG4gIExJR0hUTklOR19FUlJPUixcbiAgTElHSFROSU5HX1BJTkcsXG4gIExJR0hUTklOR19QT05HLFxuICBMSUdIVE5JTkdfT1BFTl9DSEFOTkVMLFxuICBMSUdIVE5JTkdfQUNDRVBUX0NIQU5ORUwsXG4gIExJR0hUTklOR19GVU5ESU5HX0NSRUFURUQsXG4gIExJR0hUTklOR19GVU5ESU5HX1NJR05FRCxcbiAgTElHSFROSU5HX0NIQU5ORUxfUkVBRFksXG4gIExJR0hUTklOR19TSFVURE9XTixcbiAgTElHSFROSU5HX0NMT1NJTkdfU0lHTkVELFxuICBMSUdIVE5JTkdfVVBEQVRFX0FERF9IVExDLFxuICBMSUdIVE5JTkdfVVBEQVRFX0ZVTEZJTExfSFRMQyxcbiAgTElHSFROSU5HX1VQREFURV9GQUlMX0hUTEMsXG4gIExJR0hUTklOR19DT01NSVRNRU5UX1NJR05FRCxcbiAgTElHSFROSU5HX1JFVk9LRV9BTkRfQUNLLFxuICBMSUdIVE5JTkdfQ0hBTk5FTF9BTk5PVU5DRU1FTlQsXG4gIExJR0hUTklOR19OT0RFX0FOTk9VTkNFTUVOVCxcbiAgTElHSFROSU5HX0NIQU5ORUxfVVBEQVRFXG59ID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzJyk7XG5cbmNvbnN0IHsgdHJ5UGFyc2VXaXJlSnNvbiB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3dpcmVKc29uJyk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZcbiAqL1xuZnVuY3Rpb24gaXNBbGxaZXJvMzIgKGJ1Zikge1xuICBpZiAoIWJ1ZiB8fCBidWYubGVuZ3RoICE9PSAzMikgcmV0dXJuIHRydWU7XG4gIHJldHVybiBidWYuZXF1YWxzKEJ1ZmZlci5hbGxvYygzMikpO1xufVxuXG4vLyBEZXBlbmRlbmNpZXNcbi8vIGNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3Qgc3RydWN0ID0gcmVxdWlyZSgnc3RydWN0Jyk7XG5cbi8vIEZhYnJpYyBUeXBlc1xuY29uc3QgQWN0b3IgPSByZXF1aXJlKCcuL2FjdG9yJyk7XG5jb25zdCBIYXNoMjU2ID0gcmVxdWlyZSgnLi9oYXNoMjU2Jyk7XG5cbi8vIEZ1bmN0aW9uIERlZmluaXRpb25zXG5jb25zdCBwYWREaWdpdHMgPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvcGFkRGlnaXRzJyk7XG5jb25zdCB0YWdnZWRIYXNoID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3RhZ2dlZEhhc2gnKTtcblxuLyoqXG4gKiAqKlR3byBwYXJhbGxlbCB0eXBlIG5hbWVzOioqXG4gKiAtICoqV2lyZSoqIChgd2lyZVR5cGVgLCB7QGxpbmsgTWVzc2FnZSN0eXBlfSk6IFNDUkVBTUlOR19TTkFLRV9DQVNFIHN0cmluZ3MgZnJvbSBvcGNvZGVcbiAqICAgZGVjb2RlIChgZnJvbUJ1ZmZlcmAsIGB0b1ZlY3RvcmAgZmlyc3QgZWxlbWVudCkuIE1hdGNoZXMgQU1QIC8gYGNvbnN0YW50cy5qc2Agc3R5bGUuXG4gKiAtICoqRnJpZW5kbHkqKiAoe0BsaW5rIE1lc3NhZ2UjZnJpZW5kbHlUeXBlfSwgYHRvT2JqZWN0KCkudHlwZWApOiBQYXNjYWxDYXNlIChvciBoaXN0b3JpY2FsXG4gKiAgIGxhYmVscykgZm9yIEpTT04gYW5kIGh1bWFuLWZhY2luZyBBUElzIOKAlCBzZWUge0BsaW5rIE1lc3NhZ2UuRlJJRU5ETFlfVFlQRV9CWV9XSVJFfS5cbiAqXG4gKiBFbmNvZGUgYWNjZXB0cyAqKmVpdGhlcioqIG5hbWUgdmlhIG1lcmdlZCB7QGxpbmsgTWVzc2FnZSN0eXBlc30gKGNhbm9uaWNhbCB3aXJlICsgbGVnYWN5IGZyaWVuZGx5KS5cbiAqIHtAbGluayBNZXNzYWdlLndpcmVUeXBlRnJvbUZyaWVuZGx5fSAvIHtAbGluayBNZXNzYWdlLmZyaWVuZGx5VHlwZUZyb21XaXJlfSBjb252ZXJ0IGJldHdlZW4gdGhlbS5cbiAqXG4gKiBPcGNvZGUg4oaSIHdpcmUgc3RyaW5nIG9yZGVyIG1hdGNoZXMgdGhlIGhpc3RvcmljYWwgYHR5cGVgIHN3aXRjaDogd2hlbiBtdWx0aXBsZSBsYWJlbHMgc2hhcmUgb25lXG4gKiBvcGNvZGUgKGUuZy4gUDJQIHZzIExpZ2h0bmluZyksICoqZmlyc3QgbGlzdGVkKiogaW4ge0BsaW5rIE1lc3NhZ2UuV0lSRV9UWVBFX0RFQ09ERV9PUkRFUn0gd2lucy5cbiAqIFRob3NlIG1hcHMgYXJlICoqbm90KiogZ2xvYmFsIGV4cG9ydHM6IHVzZSB7QGxpbmsgTWVzc2FnZX0gc3RhdGljcyBgV0lSRV9UWVBFX0RFQ09ERV9PUkRFUmAgYW5kXG4gKiBgRlJJRU5ETFlfVFlQRV9CWV9XSVJFYC5cbiAqL1xuLyoqIEBwcml2YXRlICovXG5jb25zdCBXSVJFX1RZUEVfREVDT0RFX09SREVSID0gT2JqZWN0LmZyZWV6ZShbXG4gIFtCSVRDT0lOX0JMT0NLX1RZUEUsICdCSVRDT0lOX0JMT0NLJ10sXG4gIFtCSVRDT0lOX0JMT0NLX0hBU0hfVFlQRSwgJ0JJVENPSU5fQkxPQ0tfSEFTSCddLFxuICBbQklUQ09JTl9UUkFOU0FDVElPTl9UWVBFLCAnQklUQ09JTl9UUkFOU0FDVElPTiddLFxuICBbQklUQ09JTl9UUkFOU0FDVElPTl9IQVNIX1RZUEUsICdCSVRDT0lOX1RSQU5TQUNUSU9OX0hBU0gnXSxcbiAgW0xPR19NRVNTQUdFX1RZUEUsICdMT0dfTUVTU0FHRSddLFxuICBbR0VORVJJQ19MSVNUX1RZUEUsICdHRU5FUklDX0xJU1QnXSxcbiAgW0dFTkVSSUNfTUVTU0FHRV9UWVBFLCAnR0VORVJJQ19NRVNTQUdFJ10sXG4gIFtTSURFQ0hBSU5fU1RBVEVfUEFUQ0hfVFlQRSwgJ1NJREVDSEFJTl9TVEFURV9QQVRDSCddLFxuICBbRE9DVU1FTlRfUFVCTElTSF9UWVBFLCAnRE9DVU1FTlRfUFVCTElTSCddLFxuICBbRE9DVU1FTlRfUkVRVUVTVF9UWVBFLCAnRE9DVU1FTlRfUkVRVUVTVCddLFxuICBbQkxPQ0tfQ0FORElEQVRFLCAnQkxPQ0tfQ0FORElEQVRFJ10sXG4gIFtQMlBfUElORywgJ1AyUF9QSU5HJ10sXG4gIFtQMlBfUE9ORywgJ1AyUF9QT05HJ10sXG4gIFtQMlBfR0VORVJJQywgJ1AyUF9HRU5FUklDJ10sXG4gIFtQMlBfQ0hBSU5fU1lOQ19SRVFVRVNULCAnUDJQX0NIQUlOX1NZTkNfUkVRVUVTVCddLFxuICBbUDJQX0ZMVVNIX0NIQUlOLCAnUDJQX0ZMVVNIX0NIQUlOJ10sXG4gIFtQMlBfSU5WRU5UT1JZX1JFUVVFU1QsICdQMlBfSU5WRU5UT1JZX1JFUVVFU1QnXSxcbiAgW1AyUF9JTlZFTlRPUllfUkVTUE9OU0UsICdQMlBfSU5WRU5UT1JZX1JFU1BPTlNFJ10sXG4gIFtQMlBfRklMRV9TRU5ELCAnUDJQX0ZJTEVfU0VORCddLFxuICBbUDJQX0RPQ1VNRU5UX1BVQkxJU0gsICdQMlBfRE9DVU1FTlRfUFVCTElTSCddLFxuICBbUDJQX1BFRVJfQUxJQVMsICdQMlBfUEVFUl9BTElBUyddLFxuICBbUDJQX1BFRVJfQU5OT1VOQ0UsICdQMlBfUEVFUl9BTk5PVU5DRSddLFxuICBbUDJQX1BFRVJfR09TU0lQLCAnUDJQX1BFRVJfR09TU0lQJ10sXG4gIFtQMlBfUEVFUklOR19PRkZFUiwgJ1AyUF9QRUVSSU5HX09GRkVSJ10sXG4gIFtQMlBfU0VTU0lPTl9PRkZFUiwgJ1AyUF9TRVNTSU9OX09GRkVSJ10sXG4gIFtQMlBfU0VTU0lPTl9PUEVOLCAnUDJQX1NFU1NJT05fT1BFTiddLFxuICBbUDJQX0NPTlRSQUNUX1BVQkxJU0gsICdDT05UUkFDVF9QVUJMSVNIJ10sXG4gIFtQMlBfQ09OVFJBQ1RfTUVTU0FHRSwgJ0NPTlRSQUNUX01FU1NBR0UnXSxcbiAgW1AyUF9JREVOVF9SRVFVRVNULCAnUDJQX0lERU5UX1JFUVVFU1QnXSxcbiAgW1AyUF9JREVOVF9SRVNQT05TRSwgJ1AyUF9JREVOVF9SRVNQT05TRSddLFxuICBbUDJQX0JBU0VfTUVTU0FHRSwgJ1AyUF9CQVNFX01FU1NBR0UnXSxcbiAgW1AyUF9TVEFURV9ST09ULCAnUDJQX1NUQVRFX1JPT1QnXSxcbiAgW1AyUF9TVEFURV9DSEFOR0UsICdQMlBfU1RBVEVfQ0hBTkdFJ10sXG4gIFtQMlBfU1RBVEVfUkVRVUVTVCwgJ1AyUF9TVEFURV9SRVFVRVNUJ10sXG4gIFtQMlBfVFJBTlNBQ1RJT04sICdQMlBfVFJBTlNBQ1RJT04nXSxcbiAgW1AyUF9DQUxMLCAnUDJQX0NBTEwnXSxcbiAgW1AyUF9SRUxBWSwgJ1AyUF9SRUxBWSddLFxuICBbUDJQX01FU1NBR0VfUkVDRUlQVCwgJ1AyUF9NRVNTQUdFX1JFQ0VJUFQnXSxcbiAgW1AyUF9GT1JXQVJELCAnUDJQX0ZPUldBUkQnXSxcbiAgW1BFRVJfQ0FORElEQVRFLCAnUEVFUl9DQU5ESURBVEUnXSxcbiAgW1NFU1NJT05fU1RBUlQsICdTRVNTSU9OX1NUQVJUJ10sXG4gIFtDSEFUX01FU1NBR0UsICdDSEFUX01FU1NBR0UnXSxcbiAgW1AyUF9DSEFUX01FU1NBR0UsICdQMlBfQ0hBVF9NRVNTQUdFJ10sXG4gIFtKU09OX0NBTExfVFlQRSwgJ0pTT05fQ0FMTCddLFxuICBbUEFUQ0hfTUVTU0FHRV9UWVBFLCAnSlNPTl9QQVRDSCddLFxuICBbQ09OVFJBQ1RfUFJPUE9TQUxfVFlQRSwgJ0NPTlRSQUNUX1BST1BPU0FMJ10sXG4gIFtQMlBfU1RBUlRfQ0hBSU4sICdQMlBfU1RBUlRfQ0hBSU4nXSxcbiAgW0xJR0hUTklOR19XQVJOSU5HLCAnTElHSFROSU5HX1dBUk5JTkcnXSxcbiAgW0xJR0hUTklOR19JTklULCAnTElHSFROSU5HX0lOSVQnXSxcbiAgW0xJR0hUTklOR19FUlJPUiwgJ0xJR0hUTklOR19FUlJPUiddLFxuICBbTElHSFROSU5HX1BJTkcsICdMSUdIVE5JTkdfUElORyddLFxuICBbTElHSFROSU5HX1BPTkcsICdMSUdIVE5JTkdfUE9ORyddLFxuICBbTElHSFROSU5HX09QRU5fQ0hBTk5FTCwgJ0xJR0hUTklOR19PUEVOX0NIQU5ORUwnXSxcbiAgW0xJR0hUTklOR19BQ0NFUFRfQ0hBTk5FTCwgJ0xJR0hUTklOR19BQ0NFUFRfQ0hBTk5FTCddLFxuICBbTElHSFROSU5HX0ZVTkRJTkdfQ1JFQVRFRCwgJ0xJR0hUTklOR19GVU5ESU5HX0NSRUFURUQnXSxcbiAgW0xJR0hUTklOR19GVU5ESU5HX1NJR05FRCwgJ0xJR0hUTklOR19GVU5ESU5HX1NJR05FRCddLFxuICBbTElHSFROSU5HX0NIQU5ORUxfUkVBRFksICdMSUdIVE5JTkdfQ0hBTk5FTF9SRUFEWSddLFxuICBbTElHSFROSU5HX1NIVVRET1dOLCAnTElHSFROSU5HX1NIVVRET1dOJ10sXG4gIFtMSUdIVE5JTkdfQ0xPU0lOR19TSUdORUQsICdMSUdIVE5JTkdfQ0xPU0lOR19TSUdORUQnXSxcbiAgW0xJR0hUTklOR19VUERBVEVfQUREX0hUTEMsICdMSUdIVE5JTkdfVVBEQVRFX0FERF9IVExDJ10sXG4gIFtMSUdIVE5JTkdfVVBEQVRFX0ZVTEZJTExfSFRMQywgJ0xJR0hUTklOR19VUERBVEVfRlVMRklMTF9IVExDJ10sXG4gIFtMSUdIVE5JTkdfVVBEQVRFX0ZBSUxfSFRMQywgJ0xJR0hUTklOR19VUERBVEVfRkFJTF9IVExDJ10sXG4gIFtMSUdIVE5JTkdfQ09NTUlUTUVOVF9TSUdORUQsICdMSUdIVE5JTkdfQ09NTUlUTUVOVF9TSUdORUQnXSxcbiAgW0xJR0hUTklOR19SRVZPS0VfQU5EX0FDSywgJ0xJR0hUTklOR19SRVZPS0VfQU5EX0FDSyddLFxuICBbTElHSFROSU5HX0NIQU5ORUxfQU5OT1VOQ0VNRU5ULCAnTElHSFROSU5HX0NIQU5ORUxfQU5OT1VOQ0VNRU5UJ10sXG4gIFtMSUdIVE5JTkdfTk9ERV9BTk5PVU5DRU1FTlQsICdMSUdIVE5JTkdfTk9ERV9BTk5PVU5DRU1FTlQnXSxcbiAgW0xJR0hUTklOR19DSEFOTkVMX1VQREFURSwgJ0xJR0hUTklOR19DSEFOTkVMX1VQREFURSddXG5dKTtcblxuY29uc3QgQ0FOT05JQ0FMX1dJUkVfVFlQRV9CWV9PUENPREUgPSBPYmplY3QuZnJlZXplKFxuICBXSVJFX1RZUEVfREVDT0RFX09SREVSLnJlZHVjZSgoYWNjLCBwYWlyKSA9PiB7XG4gICAgY29uc3QgY29kZSA9IHBhaXJbMF07XG4gICAgY29uc3QgbmFtZSA9IHBhaXJbMV07XG4gICAgaWYgKHR5cGVvZiBjb2RlICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzRmluaXRlKGNvZGUpKSByZXR1cm4gYWNjO1xuICAgIGlmIChhY2NbY29kZV0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGFjYztcbiAgICBhY2NbY29kZV0gPSBuYW1lO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KVxuKTtcblxuY29uc3QgQ0FOT05JQ0FMX01FU1NBR0VfVFlQRV9TVFJJTkdTID0gT2JqZWN0LmZyZWV6ZShcbiAgT2JqZWN0LmVudHJpZXMoQ0FOT05JQ0FMX1dJUkVfVFlQRV9CWV9PUENPREUpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IGNvZGUgPSBOdW1iZXIoZW50cnlbMF0pO1xuICAgIGNvbnN0IG5hbWUgPSBlbnRyeVsxXTtcbiAgICBhY2NbbmFtZV0gPSBjb2RlO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KVxuKTtcblxuY29uc3QgTEVHQUNZX01FU1NBR0VfVFlQRV9BTElBU0VTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEJpdGNvaW5CbG9jazogQklUQ09JTl9CTE9DS19UWVBFLFxuICBCaXRjb2luQmxvY2tIYXNoOiBCSVRDT0lOX0JMT0NLX0hBU0hfVFlQRSxcbiAgQml0Y29pblRyYW5zYWN0aW9uOiBCSVRDT0lOX1RSQU5TQUNUSU9OX1RZUEUsXG4gIEJpdGNvaW5UcmFuc2FjdGlvbkhhc2g6IEJJVENPSU5fVFJBTlNBQ1RJT05fSEFTSF9UWVBFLFxuICBHZW5lcmljTG9nTWVzc2FnZTogTE9HX01FU1NBR0VfVFlQRSxcbiAgR2VuZXJpY0xpc3Q6IEdFTkVSSUNfTElTVF9UWVBFLFxuICBHZW5lcmljUXVldWU6IEdFTkVSSUNfTElTVF9UWVBFLFxuICAvLyBUcmFuc2l0aW9uYWwgSHViL2Jyb3dzZXIgY2F0Y2gtYWxsIChvcGNvZGUgR0VORVJJQ19NRVNTQUdFX1RZUEUgLyAxNTEwMykuXG4gIEdlbmVyaWNNZXNzYWdlOiBHRU5FUklDX01FU1NBR0VfVFlQRSxcbiAgRmFicmljTG9nTWVzc2FnZTogTE9HX01FU1NBR0VfVFlQRSxcbiAgRmFicmljU2VydmljZUxvZ01lc3NhZ2U6IExPR19NRVNTQUdFX1RZUEUsXG4gIEdlbmVyaWNUcmFuc2ZlclF1ZXVlOiBHRU5FUklDX0xJU1RfVFlQRSxcbiAgSlNPTkNhbGw6IEpTT05fQ0FMTF9UWVBFLFxuICBKU09OUGF0Y2g6IFBBVENIX01FU1NBR0VfVFlQRSxcbiAgQ29udHJhY3RQcm9wb3NhbDogQ09OVFJBQ1RfUFJPUE9TQUxfVFlQRSxcbiAgR2VuZXJpYzogUDJQX0dFTkVSSUMsXG4gIEN5Y2xlOiB0eXBlb2YgT1BfQ1lDTEUgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoT1BfQ1lDTEUsIDE2KSA6IE51bWJlcihPUF9DWUNMRSksXG4gIElkZW50aXR5UmVxdWVzdDogUDJQX0lERU5UX1JFUVVFU1QsXG4gIElkZW50aXR5UmVzcG9uc2U6IFAyUF9JREVOVF9SRVNQT05TRSxcbiAgQ2hhaW5TeW5jUmVxdWVzdDogUDJQX0NIQUlOX1NZTkNfUkVRVUVTVCxcbiAgRmx1c2hDaGFpbjogUDJQX0ZMVVNIX0NIQUlOLFxuICBJbnZlbnRvcnlSZXF1ZXN0OiBQMlBfSU5WRU5UT1JZX1JFUVVFU1QsXG4gIEludmVudG9yeVJlc3BvbnNlOiBQMlBfSU5WRU5UT1JZX1JFU1BPTlNFLFxuICBQZWVyQWxpYXM6IFAyUF9QRUVSX0FMSUFTLFxuICBQZWVyQW5ub3VuY2U6IFAyUF9QRUVSX0FOTk9VTkNFLFxuICBQZWVyR29zc2lwOiBQMlBfUEVFUl9HT1NTSVAsXG4gIFBlZXJpbmdPZmZlcjogUDJQX1BFRVJJTkdfT0ZGRVIsXG4gIFNlc3Npb25PZmZlcjogUDJQX1NFU1NJT05fT0ZGRVIsXG4gIFNlc3Npb25PcGVuOiBQMlBfU0VTU0lPTl9PUEVOLFxuICBGaWxlU2VuZDogUDJQX0ZJTEVfU0VORCxcbiAgRG9jdW1lbnRQcmljaW5nUHVibGlzaDogUDJQX0RPQ1VNRU5UX1BVQkxJU0gsXG4gIFBpbmc6IFAyUF9QSU5HLFxuICBQb25nOiBQMlBfUE9ORyxcbiAgRG9jdW1lbnRSZXF1ZXN0OiBET0NVTUVOVF9SRVFVRVNUX1RZUEUsXG4gIERvY3VtZW50UHVibGlzaDogRE9DVU1FTlRfUFVCTElTSF9UWVBFLFxuICBTaWRlY2hhaW5TdGF0ZVBhdGNoOiBTSURFQ0hBSU5fU1RBVEVfUEFUQ0hfVFlQRSxcbiAgQmxvY2tDYW5kaWRhdGU6IEJMT0NLX0NBTkRJREFURSxcbiAgUGVlckNhbmRpZGF0ZTogUEVFUl9DQU5ESURBVEUsXG4gIFBlZXJJbnN0cnVjdGlvbjogUDJQX0lOU1RSVUNUSU9OLFxuICBQZWVyTWVzc2FnZTogUDJQX0JBU0VfTUVTU0FHRSxcbiAgU3RhcnRTZXNzaW9uOiBTRVNTSU9OX1NUQVJULFxuICBDaGF0TWVzc2FnZTogQ0hBVF9NRVNTQUdFLFxuICBTdGFydENoYWluOiBQMlBfU1RBUlRfQ0hBSU4sXG4gIFN0YXRlUm9vdDogUDJQX1NUQVRFX1JPT1QsXG4gIFN0YXRlQ29tbWl0bWVudDogUDJQX1NUQVRFX0NPTU1JVFRNRU5ULFxuICBTdGF0ZUNoYW5nZTogUDJQX1NUQVRFX0NIQU5HRSxcbiAgU3RhdGVSZXF1ZXN0OiBQMlBfU1RBVEVfUkVRVUVTVCxcbiAgVHJhbnNhY3Rpb246IFAyUF9UUkFOU0FDVElPTixcbiAgQ2FsbDogUDJQX0NBTEwsXG4gIExvZ01lc3NhZ2U6IExPR19NRVNTQUdFX1RZUEUsXG4gIExpZ2h0bmluZ1dhcm5pbmc6IExJR0hUTklOR19XQVJOSU5HLFxuICBMaWdodG5pbmdJbml0OiBMSUdIVE5JTkdfSU5JVCxcbiAgTGlnaHRuaW5nRXJyb3I6IExJR0hUTklOR19FUlJPUixcbiAgTGlnaHRuaW5nUGluZzogTElHSFROSU5HX1BJTkcsXG4gIExpZ2h0bmluZ1Bvbmc6IExJR0hUTklOR19QT05HLFxuICBPcGVuQ2hhbm5lbDogTElHSFROSU5HX09QRU5fQ0hBTk5FTCxcbiAgQWNjZXB0Q2hhbm5lbDogTElHSFROSU5HX0FDQ0VQVF9DSEFOTkVMLFxuICBGdW5kaW5nQ3JlYXRlZDogTElHSFROSU5HX0ZVTkRJTkdfQ1JFQVRFRCxcbiAgRnVuZGluZ1NpZ25lZDogTElHSFROSU5HX0ZVTkRJTkdfU0lHTkVELFxuICBDaGFubmVsUmVhZHk6IExJR0hUTklOR19DSEFOTkVMX1JFQURZLFxuICBTaHV0ZG93bjogTElHSFROSU5HX1NIVVRET1dOLFxuICBDbG9zaW5nU2lnbmVkOiBMSUdIVE5JTkdfQ0xPU0lOR19TSUdORUQsXG4gIFVwZGF0ZUFkZEhUTEM6IExJR0hUTklOR19VUERBVEVfQUREX0hUTEMsXG4gIFVwZGF0ZUZ1bGZpbGxIVExDOiBMSUdIVE5JTkdfVVBEQVRFX0ZVTEZJTExfSFRMQyxcbiAgVXBkYXRlRmFpbEhUTEM6IExJR0hUTklOR19VUERBVEVfRkFJTF9IVExDLFxuICBDb21taXRtZW50U2lnbmVkOiBMSUdIVE5JTkdfQ09NTUlUTUVOVF9TSUdORUQsXG4gIFJldm9rZUFuZEFjazogTElHSFROSU5HX1JFVk9LRV9BTkRfQUNLLFxuICBDaGFubmVsQW5ub3VuY2VtZW50OiBMSUdIVE5JTkdfQ0hBTk5FTF9BTk5PVU5DRU1FTlQsXG4gIE5vZGVBbm5vdW5jZW1lbnQ6IExJR0hUTklOR19OT0RFX0FOTk9VTkNFTUVOVCxcbiAgQ2hhbm5lbFVwZGF0ZTogTElHSFROSU5HX0NIQU5ORUxfVVBEQVRFLFxuICAvLyBQMlBfLXByZWZpeGVkIGNvbnRyYWN0IG5hbWVzIGVuY29kZSB0byB0aGUgY2Fub25pY2FsIGNvbnRyYWN0IG9wY29kZXNcbiAgLy8gKGRlY29kZSBuYW1lcyBzdGF5IENPTlRSQUNUX1BVQkxJU0ggLyBDT05UUkFDVF9NRVNTQUdFIC8gQ09OVFJBQ1RfUFJPUE9TQUwpLlxuICBQMlBfQ09OVFJBQ1RfUFVCTElTSDogUDJQX0NPTlRSQUNUX1BVQkxJU0gsXG4gIFAyUF9DT05UUkFDVF9NRVNTQUdFOiBQMlBfQ09OVFJBQ1RfTUVTU0FHRSxcbiAgUDJQX0NPTlRSQUNUX1BST1BPU0FMOiBDT05UUkFDVF9QUk9QT1NBTF9UWVBFXG59KTtcblxuLyoqXG4gKiBXaXJlLWxldmVsIHR5cGUgc3RyaW5ncyAoQUxMX0NBUFMsIG9wY29kZSBkZWNvZGUpIOKGlCBKU09OLW9yaWVudGVkIGZyaWVuZGx5IG5hbWVzIChQYXNjYWxDYXNlXG4gKiB3aGVyZSBoaXN0b3JpY2FsbHkgdXNlZCkuIHtAbGluayBNZXNzYWdlI3dpcmVUeXBlfSAvIHtAbGluayBNZXNzYWdlI3R5cGV9IHVzZSB3aXJlIG5hbWVzO1xuICoge0BsaW5rIE1lc3NhZ2UjZnJpZW5kbHlUeXBlfSBhbmQge0BsaW5rIE1lc3NhZ2UjdG9PYmplY3R9IGB0eXBlYCB1c2UgZnJpZW5kbHkgbmFtZXMuXG4gKi9cbi8qKiBAcHJpdmF0ZSAqL1xuY29uc3QgRlJJRU5ETFlfVFlQRV9CWV9XSVJFID0gT2JqZWN0LmZyZWV6ZSgoKCkgPT4ge1xuICBjb25zdCB0bXAgPSB7fTtcbiAgZm9yIChjb25zdCBmcmllbmRseSBvZiBPYmplY3Qua2V5cyhMRUdBQ1lfTUVTU0FHRV9UWVBFX0FMSUFTRVMpKSB7XG4gICAgY29uc3QgY29kZSA9IExFR0FDWV9NRVNTQUdFX1RZUEVfQUxJQVNFU1tmcmllbmRseV07XG4gICAgaWYgKHR5cGVvZiBjb2RlICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzRmluaXRlKGNvZGUpKSBjb250aW51ZTtcbiAgICBjb25zdCB3aXJlID0gQ0FOT05JQ0FMX1dJUkVfVFlQRV9CWV9PUENPREVbY29kZV07XG4gICAgaWYgKCF3aXJlIHx8IHRtcFt3aXJlXSAhPT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICB0bXBbd2lyZV0gPSBmcmllbmRseTtcbiAgfVxuICBmb3IgKGNvbnN0IHdpcmUgb2YgT2JqZWN0LnZhbHVlcyhDQU5PTklDQUxfV0lSRV9UWVBFX0JZX09QQ09ERSkpIHtcbiAgICBpZiAodG1wW3dpcmVdID09PSB1bmRlZmluZWQpIHRtcFt3aXJlXSA9IHdpcmU7XG4gIH1cbiAgcmV0dXJuIHRtcDtcbn0pKCkpO1xuXG5jb25zdCBGUklFTkRMWV9UT19XSVJFX1RZUEUgPSBPYmplY3QuZnJlZXplKCgoKSA9PiB7XG4gIGNvbnN0IHRtcCA9IHt9O1xuICBmb3IgKGNvbnN0IFt3aXJlLCBmcmllbmRseV0gb2YgT2JqZWN0LmVudHJpZXMoRlJJRU5ETFlfVFlQRV9CWV9XSVJFKSkge1xuICAgIGlmICh0bXBbZnJpZW5kbHldID09PSB1bmRlZmluZWQpIHRtcFtmcmllbmRseV0gPSB3aXJlO1xuICB9XG4gIHJldHVybiB0bXA7XG59KSgpKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHdpcmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZyaWVuZGx5VHlwZUZyb21XaXJlICh3aXJlKSB7XG4gIGNvbnN0IHcgPSBTdHJpbmcod2lyZSB8fCAnJykudHJpbSgpO1xuICByZXR1cm4gRlJJRU5ETFlfVFlQRV9CWV9XSVJFW3ddIHx8IHc7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBmcmllbmRseVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gd2lyZVR5cGVGcm9tRnJpZW5kbHkgKGZyaWVuZGx5KSB7XG4gIGNvbnN0IGYgPSBTdHJpbmcoZnJpZW5kbHkgfHwgJycpLnRyaW0oKTtcbiAgcmV0dXJuIEZSSUVORExZX1RPX1dJUkVfVFlQRVtmXSB8fCBmO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW55IG9wY29kZSAvIHdpcmUgbmFtZSAvIGZyaWVuZGx5IGFsaWFzIHRvIHRoZSBudW1lcmljIEFNUCB0eXBlIGNvZGUuXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfG51bGx8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybnMge251bWJlcnxudWxsfVxuICovXG5mdW5jdGlvbiBjYW5vbmljYWxUeXBlQ29kZSAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBDQU5PTklDQUxfV0lSRV9UWVBFX0JZX09QQ09ERVt2YWx1ZV0gIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHMgPSB2YWx1ZS50cmltKCk7XG4gICAgaWYgKCFzKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKENBTk9OSUNBTF9NRVNTQUdFX1RZUEVfU1RSSU5HUywgcykpIHtcbiAgICAgIHJldHVybiBDQU5PTklDQUxfTUVTU0FHRV9UWVBFX1NUUklOR1Nbc107XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTEVHQUNZX01FU1NBR0VfVFlQRV9BTElBU0VTLCBzKSkge1xuICAgICAgY29uc3QgY29kZSA9IExFR0FDWV9NRVNTQUdFX1RZUEVfQUxJQVNFU1tzXTtcbiAgICAgIHJldHVybiAodHlwZW9mIGNvZGUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShjb2RlKSkgPyBjb2RlIDogbnVsbDtcbiAgICB9XG4gICAgaWYgKC9eXFxkKyQvLnRlc3QocykpIHtcbiAgICAgIGNvbnN0IG4gPSBOdW1iZXIocyk7XG4gICAgICByZXR1cm4gQ0FOT05JQ0FMX1dJUkVfVFlQRV9CWV9PUENPREVbbl0gIT09IHVuZGVmaW5lZCA/IG4gOiBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGFueSBvcGNvZGUgLyB3aXJlIG5hbWUgLyBmcmllbmRseSBhbGlhcyB0byB0aGUgU0NSRUFNSU5HX1NOQUtFIHdpcmUgbGFiZWwuXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfG51bGx8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ3xudWxsfVxuICovXG5mdW5jdGlvbiBjYW5vbmljYWxUeXBlTmFtZSAodmFsdWUpIHtcbiAgY29uc3QgY29kZSA9IGNhbm9uaWNhbFR5cGVDb2RlKHZhbHVlKTtcbiAgaWYgKGNvZGUgIT0gbnVsbCkgcmV0dXJuIENBTk9OSUNBTF9XSVJFX1RZUEVfQllfT1BDT0RFW2NvZGVdIHx8IG51bGw7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgcyA9IHZhbHVlLnRyaW0oKTtcbiAgICByZXR1cm4gcyB8fCBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFRydWUgd2hlbiB0d28gdHlwZSByZWZlcmVuY2VzIG5hbWUgdGhlIHNhbWUgQU1QIG9wY29kZSAobnVtYmVyLCB3aXJlIG5hbWUsIG9yIGZyaWVuZGx5IGFsaWFzKS5cbiAqIFVucmVnaXN0ZXJlZCBzdHJpbmcgbGFiZWxzIG9ubHkgbWF0Y2ggdmlhIGV4YWN0IHRyaW0gZXF1YWxpdHkuXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBhXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd8bnVsbHx1bmRlZmluZWR9IGJcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB0eXBlRXF1YWxzIChhLCBiKSB7XG4gIGNvbnN0IGNhID0gY2Fub25pY2FsVHlwZUNvZGUoYSk7XG4gIGNvbnN0IGNiID0gY2Fub25pY2FsVHlwZUNvZGUoYik7XG4gIGlmIChjYSAhPSBudWxsICYmIGNiICE9IG51bGwpIHJldHVybiBjYSA9PT0gY2I7XG4gIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGIgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGEudHJpbSgpID09PSBiLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gYSA9PT0gYjtcbn1cblxuLyoqXG4gKiBAY2xhc3NkZXNjIDxzdHJvbmc+QXBwbGljYXRpb24gTWVzc2FnaW5nIFByb3RvY29sIChBTVApPC9zdHJvbmc+IOKAlCBiaW5hcnkgZW52ZWxvcGUgZm9yIHdoYXQge0BsaW5rIFBlZXJ9LFxuICoge0BsaW5rIFNlcnZpY2V9LCBhbmQgYnJpZGdlcyBhY3R1YWxseSBleGNoYW5nZS4gRXh0ZW5kcyB7QGxpbmsgQWN0b3J9IGZvciBjb25zdHJ1Y3Rpb24gYW5kIHN0YXRlIGhlbHBlcnMsIGJ1dCBvbiB0aGUgd2lyZVxuICogeW91IHRoaW5rIGluIDxzdHJvbmc+b3Bjb2Rlczwvc3Ryb25nPiwgPHN0cm9uZz5oZWFkZXJzPC9zdHJvbmc+IChwYXJlbnQsIGF1dGhvciBhcyB4LW9ubHkgcHVia2V5LCBoYXNoLCBwcmVpbWFnZSxcbiAqIDY0LWJ5dGUgU2Nobm9yciBzaWduYXR1cmUpLCBhbmQgPHN0cm9uZz5wYXlsb2FkPC9zdHJvbmc+LlxuICpcbiAqIDxwPjxzdHJvbmc+U2lnbmluZzwvc3Ryb25nPiDigJQge0BsaW5rIE1lc3NhZ2Ujc2lnbldpdGhLZXl9IC8ge0BsaW5rIE1lc3NhZ2UjdmVyaWZ5V2l0aEtleX0gdXNlIEJJUC0zNDAgU2Nobm9yciBvbiB0YWdnZWRcbiAqIGhhc2ggPGNvZGU+RmFicmljL01lc3NhZ2U8L2NvZGU+IG92ZXIgaGVhZGVyIChzaWduYXR1cmUgZmllbGQgemVyb2VkKSArIGJvZHkuIFRoaXMgaXMgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gQml0Y29pbiBTaWduZWRcbiAqIE1lc3NhZ2UgKEVDRFNBICsgQ29yZSBwcmVmaXgpLjwvcD5cbiAqXG4gKiA8cD48c3Ryb25nPlR5cGUgbmFtZXM8L3N0cm9uZz4g4oCUIHtAbGluayBNZXNzYWdlI3dpcmVUeXBlfSAvIHtAbGluayBNZXNzYWdlI3R5cGV9IHVzZSBTQ1JFQU1JTkdfU05BS0Ugd2lyZSBsYWJlbHMgZnJvbVxuICogb3Bjb2RlIGRlY29kZTsge0BsaW5rIE1lc3NhZ2UjZnJpZW5kbHlUeXBlfSBhbmQge0BsaW5rIE1lc3NhZ2UjdG9PYmplY3R9J3MgPGNvZGU+dHlwZTwvY29kZT4gdXNlIFBhc2NhbENhc2UgKG9yIGxlZ2FjeSlcbiAqIEpTT04gbmFtZXMuIHtAbGluayBNZXNzYWdlLndpcmVUeXBlRnJvbUZyaWVuZGx5fSAvIHtAbGluayBNZXNzYWdlLmZyaWVuZGx5VHlwZUZyb21XaXJlfSBicmlkZ2UgdGhlIHR3by4gU2VlIGZpbGUgaGVhZGVyXG4gKiBtYXBzICg8Y29kZT5XSVJFX1RZUEVfREVDT0RFX09SREVSPC9jb2RlPiwgPGNvZGU+TEVHQUNZX01FU1NBR0VfVFlQRV9BTElBU0VTPC9jb2RlPikgd2hlbiBhbGlnbmluZyA8c3Ryb25nPkBmYWJyaWMvaHR0cDwvc3Ryb25nPlxuICogb3IgSHViLjwvcD5cbiAqXG4gKiA8cD48c3Ryb25nPkJvZHkgKFYxKTwvc3Ryb25nPiDigJQgUHJlZmVyIHtAbGluayBNZXNzYWdlLmZyb21GaWVsZHN9IC8ge0BsaW5rIE1lc3NhZ2UjdG9GaWVsZHN9IHdpdGggYVxuICogcmVnaXN0ZXJlZCBib2R5IHNjaGVtYSAoc2VlIGJvZHkgY29kZWMgaGVscGVycyBvbiB0aGlzIG1vZHVsZSkuIEJvZGllcyBhcmUgQy1saWtlIHR5cGVkIGZpZWxkcywgbm90IEpTT047XG4gKiBKU09OIGJyaWRnaW5nIGlzIDxzdHJvbmc+QGZhYnJpYy9odHRwPC9zdHJvbmc+LiBTZWUgPGNvZGU+ZG9jcy9NRVNTQUdFX0JPRFkubWQ8L2NvZGU+LjwvcD5cbiAqXG4gKiA8cD48c3Ryb25nPk5hcnJhdGl2ZTwvc3Ryb25nPiDigJQgU2VlIDxzdHJvbmc+REVWRUxPUEVSUy5tZDwvc3Ryb25nPiAoPGVtPkFjdG9yIGFuZCBNZXNzYWdlPC9lbT4pIGFuZCB7QGxpbmsgQWN0b3J9XG4gKiA8Y29kZT5AZmlsZW92ZXJ2aWV3PC9jb2RlPjsgaG9tZSBIVE1MIGlzIGdlbmVyYXRlZCBmcm9tIERFVkVMT1BFUlMubWQsIHdoaWxlIHRoaXMgcGFnZSBjb21lcyBmcm9tXG4gKiA8Y29kZT50eXBlcy9tZXNzYWdlLmpzPC9jb2RlPi48L3A+XG4gKiBAY2xhc3MgTWVzc2FnZVxuICogQGV4dGVuZHMgQWN0b3JcbiAqL1xuY2xhc3MgTWVzc2FnZSBleHRlbmRzIEFjdG9yIHtcbiAgLyoqXG4gICAqIEJ1aWxkIGEgbWVzc2FnZSBmcm9tIGFuIG9iamVjdC4gUHJlZmVyIDxjb2RlPnR5cGU8L2NvZGU+Lzxjb2RlPmRhdGE8L2NvZGU+OyA8Y29kZT5AdHlwZTwvY29kZT4gLyA8Y29kZT5AZGF0YTwvY29kZT5cbiAgICogYXJlIGFjY2VwdGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKiBAcGFyYW0ge09iamVjdH0gW2lucHV0PXt9XSBJbml0aWFsIGZpZWxkczogPGNvZGU+dHlwZTwvY29kZT4gb3IgPGNvZGU+QHR5cGU8L2NvZGU+LCA8Y29kZT5kYXRhPC9jb2RlPiBvclxuICAgKiA8Y29kZT5AZGF0YTwvY29kZT4sIG9wdGlvbmFsIDxjb2RlPnNpZ25lcjwvY29kZT4sIDxjb2RlPnNlbnNpdGl2ZTwvY29kZT4sIDxjb2RlPnByZWltYWdlPC9jb2RlPi5cbiAgICogQHJldHVybiB7TWVzc2FnZX0gSW5zdGFuY2UgcmVhZHkgZm9yIHtAbGluayBNZXNzYWdlI2FzUmF3fSwge0BsaW5rIE1lc3NhZ2Ujc2lnbldpdGhLZXl9LCBldGMuXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoaW5wdXQgPSB7fSkge1xuICAgIHN1cGVyKGlucHV0KTtcblxuICAgIHRoaXMucmF3ID0ge1xuICAgICAgbWFnaWM6IEJ1ZmZlci5hbGxvYyg0KSxcbiAgICAgIHZlcnNpb246IEJ1ZmZlci5hbGxvYyg0KSxcbiAgICAgIHBhcmVudDogQnVmZmVyLmFsbG9jKDMyKSxcbiAgICAgIGF1dGhvcjogQnVmZmVyLmFsbG9jKDMyKSxcbiAgICAgIHR5cGU6IEJ1ZmZlci5hbGxvYyg0KSwgLy8gVE9ETzogOCwgMzJcbiAgICAgIHNpemU6IEJ1ZmZlci5hbGxvYyg0KSwgLy8gVE9ETzogOCwgMzJcbiAgICAgIGhhc2g6IEJ1ZmZlci5hbGxvYygzMiksXG4gICAgICBwcmVpbWFnZTogQnVmZmVyLmFsbG9jKDMyKSxcbiAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmFsbG9jKDY0KSxcbiAgICAgIGRhdGE6IG51bGxcbiAgICB9O1xuXG4gICAgdGhpcy5yYXcubWFnaWMud3JpdGUoTUFHSUNfQllURVMudG9TdHJpbmcoMTYpLCAnaGV4Jyk7XG4gICAgdGhpcy5yYXcudmVyc2lvbi53cml0ZShwYWREaWdpdHMoVkVSU0lPTl9OVU1CRVIudG9TdHJpbmcoMTYpLCA4KSwgJ2hleCcpO1xuXG4gICAgLy8gVXNlIHByb3ZpZGVkIHNpZ25lclxuICAgIGlmIChpbnB1dC5zaWduZXIpIHtcbiAgICAgIHRoaXMuc2lnbmVyID0gaW5wdXQuc2lnbmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNpZ25lciA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiB0cnVlLCBrZWVwIHdpcmUgcHJlaW1hZ2UgemVyb2VkIChubyBwYXltZW50IHNlY3JldCkuIERlZmF1bHQgcHVibGljXG4gICAgICogbWVzc2FnZXMgYWxyZWFkeSB1c2UgemVyb3Mg4oCUIHNlZSB7QGxpbmsgTWVzc2FnZSNwcmVpbWFnZX0gKExpZ2h0bmluZy1zdHlsZSkuXG4gICAgICovXG4gICAgdGhpcy5fc2Vuc2l0aXZlID0gISEoaW5wdXQgJiYgaW5wdXQuc2Vuc2l0aXZlKTtcbiAgICAvKiogV2hlbiB0cnVlLCBhbiBleHBsaWNpdCBIVExDIC8gY2lyY3VpdCBwYXltZW50IHByZWltYWdlIHdhcyBzZXQg4oCUIGRvIG5vdCBjbG9iYmVyLiAqL1xuICAgIHRoaXMuX2V4cGxpY2l0UHJlaW1hZ2UgPSBmYWxzZTtcblxuICAgIC8vIFN1cHBvcnQgYm90aCBAdHlwZS9AZGF0YSAoZGVwcmVjYXRlZCkgYW5kIHR5cGUvZGF0YSAocHJlZmVycmVkKSBmb3JtYXRzXG4gICAgY29uc3QgbWVzc2FnZVR5cGUgPSBpbnB1dC50eXBlIHx8IGlucHV0WydAdHlwZSddO1xuICAgIGNvbnN0IG1lc3NhZ2VEYXRhID0gaW5wdXQuZGF0YSB8fCBpbnB1dFsnQGRhdGEnXTtcblxuICAgIGlmIChtZXNzYWdlRGF0YSAmJiBtZXNzYWdlVHlwZSkge1xuICAgICAgdGhpcy50eXBlID0gbWVzc2FnZVR5cGU7XG4gICAgICAvLyBTZXQgdGhlIHR5cGUgZmllbGQgdG8gdGhlIG51bWVyaWMgY29uc3RhbnRcbiAgICAgIGNvbnN0IHR5cGVDb2RlID0gdGhpcy50eXBlc1ttZXNzYWdlVHlwZV0gfHwgdGhpcy50eXBlcy5QMlBfQkFTRV9NRVNTQUdFO1xuICAgICAgdGhpcy5yYXcudHlwZS53cml0ZVVJbnQzMkJFKHR5cGVDb2RlLCAwKTtcblxuICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihtZXNzYWdlRGF0YSkgfHwgbWVzc2FnZURhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKG1lc3NhZ2VEYXRhKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG1lc3NhZ2VEYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBEZXByZWNhdGVkIHRyYW5zaXRpb25hbCBwYXRoOiBwbGFpbiBvYmplY3RzIHdpdGhvdXQgYW4gZXhwbGljaXQgZmllbGQgZW5jb2RlXG4gICAgICAgIC8vIHN0aWxsIEpTT04uc3RyaW5naWZ5LiBQcmVmZXIgTWVzc2FnZS5mcm9tRmllbGRzKHR5cGUsIGZpZWxkcykgZm9yIFYxIGJvZGllc1xuICAgICAgICAvLyAoZG9jcy9NRVNTQUdFX0JPRFkubWQpLiBBdXRvIGZpZWxkLWVuY29kZSBpcyBub3QgYXBwbGllZCBoZXJlIHRvIGF2b2lkIGJyZWFraW5nXG4gICAgICAgIC8vIGxlZ2FjeSBDaGF0TWVzc2FnZSAvIEdlbmVyaWNNZXNzYWdlIG9iamVjdCBwYXlsb2Fkcy5cbiAgICAgICAgdGhpcy5kYXRhID0gSlNPTi5zdHJpbmdpZnkobWVzc2FnZURhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhID0gbWVzc2FnZURhdGE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlucHV0LnByZWltYWdlICE9IG51bGwpIHRoaXMucHJlaW1hZ2UgPSBpbnB1dC5wcmVpbWFnZTtcblxuICAgIC8vIExvZyBIRUFSVEJFQVQgbWVzc2FnZSBjcmVhdGlvbiB0byB0cmFjayBvcmlnaW5cbiAgICBpZiAodGhpcy50eXBlID09PSAnSEVBUlRCRUFUJyB8fCBtZXNzYWdlVHlwZSA9PT0gJ0hFQVJUQkVBVCcpIHtcbiAgICAgIGNvbnN0IGhhc1NpZ25hdHVyZSA9IGlucHV0LnNpZ25hdHVyZSB8fCAodGhpcy5yYXcuc2lnbmF0dXJlICYmIHRoaXMucmF3LnNpZ25hdHVyZS50b1N0cmluZygnaGV4JykgIT09ICcwJy5yZXBlYXQoMTI4KSk7XG4gICAgICBjb25zdCBpbnB1dFN1bW1hcnkgPSB7XG4gICAgICAgIHR5cGU6IGlucHV0LnR5cGUgfHwgaW5wdXRbJ0B0eXBlJ10sXG4gICAgICAgIGhhc1R5cGU6ICEhKGlucHV0LnR5cGUgfHwgaW5wdXRbJ0B0eXBlJ10pLFxuICAgICAgICBoYXNEYXRhOiAhIShpbnB1dC5kYXRhIHx8IGlucHV0WydAZGF0YSddKSxcbiAgICAgICAgaGFzU2lnbmF0dXJlOiAhIWhhc1NpZ25hdHVyZSxcbiAgICAgICAgaW5wdXRLZXlzOiBPYmplY3Qua2V5cyhpbnB1dCkuZmlsdGVyKGsgPT4gIWsuc3RhcnRzV2l0aCgnXycpICYmIGsgIT09ICdzaWduZXInKVxuICAgICAgfTtcblxuICAgICAgY29uc29sZS5sb2coJ1tGQUJSSUM6TUVTU0FHRV0nLCAn4pqg77iPICBIRUFSVEJFQVQgbWVzc2FnZSBjcmVhdGVkOicsIHtcbiAgICAgICAgbWVzc2FnZVR5cGU6IHRoaXMudHlwZSB8fCBtZXNzYWdlVHlwZSxcbiAgICAgICAgaW5wdXQ6IGlucHV0U3VtbWFyeSxcbiAgICAgICAgaGFzU2lnbmF0dXJlOiBoYXNTaWduYXR1cmUsXG4gICAgICAgIHNpZ25hdHVyZUhleDogdGhpcy5yYXcuc2lnbmF0dXJlID8gdGhpcy5yYXcuc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKS5zdWJzdHJpbmcoMCwgMTYpICsgJy4uLicgOiAnbm9uZSdcbiAgICAgIH0pO1xuICAgICAgY29uc29sZS50cmFjZSgnW0ZBQlJJQzpNRVNTQUdFXScsICdIRUFSVEJFQVQgY3JlYXRpb24gc3RhY2sgdHJhY2U6Jyk7XG4gICAgfVxuXG4gICAgLy8gU2V0IHZhcmlvdXMgcHJvcGVydGllcyB0byBiZSB1bmVudW1lcmFibGVcbiAgICBmb3IgKGxldCBuYW1lIG9mIFtcbiAgICAgICdAaW5wdXQnLFxuICAgICAgJ0BlbnRpdHknLFxuICAgICAgJ19zdGF0ZScsXG4gICAgICAnY29uZmlnJyxcbiAgICAgICdzZXR0aW5ncycsXG4gICAgICAnc2lnbmVyJyxcbiAgICAgICdzdGFjaycsXG4gICAgICAnb2JzZXJ2ZXInXG4gICAgXSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHsgZW51bWVyYWJsZTogZmFsc2UgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldCBhdXRob3IgKCkge1xuICAgIHJldHVybiB0aGlzLnJhdy5hdXRob3IudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHJldHVybiB0aGlzLnJhdy5kYXRhLnRvU3RyaW5nKCd1dGY4Jyk7XG4gIH1cblxuICBnZXQgYnl0ZSAoKSB7XG4gICAgY29uc3QgaW5wdXQgPSAwICsgJyc7XG4gICAgY29uc3QgbnVtID0gQnVmZmVyLmZyb20oYDB4JHtwYWREaWdpdHMoaW5wdXQsIDgpfWAsICdoZXgnKTtcbiAgICByZXR1cm4gbnVtO1xuICB9XG5cbiAgZ2V0IHR1MTYgKCkge1xuICAgIHJldHVybiBwYXJzZUludCgwKTtcbiAgfVxuXG4gIGdldCB0dTMyICgpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoMCk7XG4gIH1cblxuICBnZXQgdHU2NCAoKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KDApO1xuICB9XG5cbiAgZ2V0IFVpbnQyNTYgKCkge1xuICAgIC8vIDI1NiBiaXRzXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKCh0aGlzLnJhdyAmJiB0aGlzLnJhdy5oYXNoKSA/IGAweCR7cGFkRGlnaXRzKHRoaXMucmF3Lmhhc2gsIDgpfWAgOiBBY3Rvci5yYW5kb21CeXRlcygzMikpO1xuICB9XG5cbiAgc2V0IHNpZ25hdHVyZSAodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBCdWZmZXIpIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoJ2hleCcpO1xuICAgIHRoaXMucmF3LnNpZ25hdHVyZS53cml0ZSh2YWx1ZSwgJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIDMyLWJ5dGUgKipwYXltZW50KiogcHJlaW1hZ2Ugb24gd2lyZSAoTGlnaHRuaW5nLXN0eWxlKTpcbiAgICogLSAqKkFsbCB6ZXJvcyAoZGVmYXVsdCAvIHB1YmxpYyk6Kiogbm8gSFRMQyBzZWNyZXQ7IGJvZHkgaW50ZWdyaXR5IGlzIG9ubHkge0BsaW5rIE1lc3NhZ2UjaGFzaH1cbiAgICogICAoZG91YmxlLVNIQTI1Nihib2R5KSkuIERvICoqbm90KiogcHV0IFNIQTI1Nihib2R5KSBoZXJlIOKAlCB0aGF0IGNvbGxpZGVzIHdpdGggY2lyY3VpdCBIVExDIGNoYWlucy5cbiAgICogLSAqKk5vbi16ZXJvOioqIGV4cGxpY2l0IHBheW1lbnQgc2VjcmV0IGZvciBpbnZlbnRvcnkgSFRMQyAvIEZhYnJpYyBDaXJjdWl0IGhvcHNcbiAgICogICAoYHBheW1lbnRfaGFzaCA9IFNIQTI1NihwcmVpbWFnZSlgKSwgY292ZXJlZCBieSB0aGUgU2Nobm9yciBzaWduYXR1cmUuXG4gICAqIC0ge0BsaW5rIE1lc3NhZ2Ujc2Vuc2l0aXZlfSBmb3JjZXMgemVyb3MgYW5kIHJlZnVzZXMgdG8gY2xvYmJlciBhbiBleHBsaWNpdCBzZWNyZXQuXG4gICAqL1xuICBnZXQgcHJlaW1hZ2UgKCkge1xuICAgIGlmICghdGhpcy5yYXcgfHwgIUJ1ZmZlci5pc0J1ZmZlcih0aGlzLnJhdy5wcmVpbWFnZSkgfHwgdGhpcy5yYXcucHJlaW1hZ2UubGVuZ3RoICE9PSAzMikgcmV0dXJuIG51bGw7XG4gICAgaWYgKGlzQWxsWmVybzMyKHRoaXMucmF3LnByZWltYWdlKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMucmF3LnByZWltYWdlKTtcbiAgfVxuXG4gIHNldCBwcmVpbWFnZSAodmFsdWUpIHtcbiAgICBpZiAoIXRoaXMucmF3LnByZWltYWdlIHx8ICFCdWZmZXIuaXNCdWZmZXIodGhpcy5yYXcucHJlaW1hZ2UpIHx8IHRoaXMucmF3LnByZWltYWdlLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRoaXMucmF3LnByZWltYWdlID0gQnVmZmVyLmFsbG9jKDMyKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmF3LnByZWltYWdlLmZpbGwoMCk7XG4gICAgICB0aGlzLl9leHBsaWNpdFByZWltYWdlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlLCAnaGV4Jyk7XG4gICAgaWYgKGJ1Zi5sZW5ndGggIT09IDMyKSB0aHJvdyBuZXcgRXJyb3IoJ01lc3NhZ2UgcHJlaW1hZ2UgbXVzdCBiZSAzMiBieXRlcycpO1xuICAgIGJ1Zi5jb3B5KHRoaXMucmF3LnByZWltYWdlKTtcbiAgICB0aGlzLl9leHBsaWNpdFByZWltYWdlID0gIWlzQWxsWmVybzMyKHRoaXMucmF3LnByZWltYWdlKTtcbiAgfVxuXG4gIHRvQnVmZmVyICgpIHtcbiAgICByZXR1cm4gdGhpcy5hc1JhdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB7QGxpbmsgQnVmZmVyfSBvZiB0aGUgY29tcGxldGUgbWVzc2FnZS5cbiAgICogQHJldHVybiB7QnVmZmVyfSBCdWZmZXIgb2YgdGhlIGVuY29kZWQge0BsaW5rIE1lc3NhZ2V9LlxuICAgKi9cbiAgYXNSYXcgKCkge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlciwgdGhpcy5yYXcuZGF0YV0pO1xuICB9XG5cbiAgdG9SYXcgKCkge1xuICAgIHJldHVybiB0aGlzLmFzUmF3KCk7XG4gIH1cblxuICBhc1R5cGVkQXJyYXkgKCkge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0aGlzLmFzUmF3KCkpO1xuICAgIC8vIFRPRE86IE5vZGUgMTJcbiAgICAvLyByZXR1cm4gbmV3IFR5cGVkQXJyYXkodGhpcy5hc1JhdygpKTtcbiAgfVxuXG4gIGFzQmxvYiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNSYXcoKS5tYXAoYnl0ZSA9PiBwYXJzZUludChieXRlLCAxNikpO1xuICB9XG5cbiAgdG9PYmplY3QgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIG1hZ2ljOiBwYXJzZUludChgJHt0aGlzLnJhdy5tYWdpYy50b1N0cmluZygnaGV4Jyl9YCwgMTYpLFxuICAgICAgICB2ZXJzaW9uOiBwYXJzZUludChgJHt0aGlzLnJhdy52ZXJzaW9uLnRvU3RyaW5nKCdoZXgnKX1gLCAxNiksXG4gICAgICAgIHBhcmVudDogdGhpcy5yYXcucGFyZW50LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgYXV0aG9yOiB0aGlzLnJhdy5hdXRob3IudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB0eXBlOiBwYXJzZUludChgJHt0aGlzLnJhdy50eXBlLnRvU3RyaW5nKCdoZXgnKX1gLCAxNiksXG4gICAgICAgIHNpemU6IHBhcnNlSW50KGAke3RoaXMucmF3LnNpemUudG9TdHJpbmcoJ2hleCcpfWAsIDE2KSxcbiAgICAgICAgaGFzaDogdGhpcy5yYXcuaGFzaC50b1N0cmluZygnaGV4JyksXG4gICAgICAgIHByZWltYWdlOiB0aGlzLnByZWltYWdlID8gdGhpcy5wcmVpbWFnZS50b1N0cmluZygnaGV4JykgOiBudWxsLFxuICAgICAgICBzaWduYXR1cmU6IHRoaXMucmF3LnNpZ25hdHVyZS50b1N0cmluZygnaGV4JyksXG4gICAgICB9LFxuICAgICAgdHlwZTogdGhpcy5mcmllbmRseVR5cGUsXG4gICAgICB3aXJlVHlwZTogdGhpcy53aXJlVHlwZSxcbiAgICAgIGRhdGE6IHRoaXMuZGF0YVxuICAgIH07XG4gIH1cblxuICB0b1ZlY3RvciAoKSB7XG4gICAgcmV0dXJuIFt0aGlzLnR5cGUsIHRoaXMuZGF0YV07XG4gIH1cblxuICBmcm9tT2JqZWN0IChpbnB1dCkge1xuICAgIHJldHVybiBuZXcgTWVzc2FnZShpbnB1dCk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgdGhlIG1lc3NhZ2UgdXNpbmcgYSBzcGVjaWZpYyBrZXkuXG4gICAqIFVzZXMgQklQLTM0MCBTY2hub3JyIHNpZ25hdHVyZXMgd2l0aCB0YWdnZWQgaGFzaCBcIkZhYnJpYy9NZXNzYWdlXCIuXG4gICAqIFNpZ25zIHRoZSBjb21wbGV0ZSBtZXNzYWdlIChoZWFkZXIgKyBib2R5KSBhcyBwZXIgQyBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGtleSBLZXkgb2JqZWN0IHdpdGggcHJpdmF0ZSBrZXkgYW5kIHNpZ24gbWV0aG9kLlxuICAgKiBAcGFyYW0ge1N0cmluZ3xCdWZmZXJ9IGtleS5wcml2YXRlIFByaXZhdGUga2V5XG4gICAqIEBwYXJhbSB7U3RyaW5nfEJ1ZmZlcn0ga2V5LnB1YmtleSBQdWJsaWMga2V5XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleS5zaWduIFNpZ25pbmcgZnVuY3Rpb25cbiAgICogQHJldHVybnMge01lc3NhZ2V9IFNpZ25lZCBtZXNzYWdlLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgYXR0ZW1wdGluZyB0byBzaWduIHdpdGhvdXQgYSBwcml2YXRlIGtleVxuICAgKi9cbiAgc2lnbldpdGhLZXkgKGtleSkge1xuICAgIGlmICgha2V5KSB0aHJvdyBuZXcgRXJyb3IoJ05vIGtleSBwcm92aWRlZC4nKTtcbiAgICBpZiAoIWtleS5wcml2YXRlKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzaWduIG1lc3NhZ2Ugd2l0aCBwdWJsaWMga2V5IG9ubHkuJyk7XG4gICAgaWYgKCFrZXkuc2lnbikgdGhyb3cgbmV3IEVycm9yKCdLZXkgb2JqZWN0IG11c3QgaW1wbGVtZW50IHNpZ24gbWV0aG9kJyk7XG5cbiAgICAvLyBFeHRyYWN0IHgtb25seSBwdWJsaWMga2V5ICgzMiBieXRlcykgZnJvbSBjb21wcmVzc2VkIHB1YmtleSAoMzMgYnl0ZXMpXG4gICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBDIGltcGxlbWVudGF0aW9uIHdoaWNoIHVzZXMgc2VjcDI1NmsxX3hvbmx5X3B1YmtleV9zZXJpYWxpemVcbiAgICBjb25zdCBjb21wcmVzc2VkUHVia2V5ID0gQnVmZmVyLmZyb20oa2V5LnB1YmxpYy5lbmNvZGVDb21wcmVzc2VkKCdoZXgnKSwgJ2hleCcpO1xuICAgIGNvbnN0IHhPbmx5UHVia2V5ID0gY29tcHJlc3NlZFB1YmtleS5zbGljZSgxKTsgLy8gUmVtb3ZlIHByZWZpeCBieXRlIChmaXJzdCBieXRlKVxuXG4gICAgLy8gU2V0IGF1dGhvciBmaWVsZCBCRUZPUkUgc2lnbmluZyBzbyBpdCdzIGluY2x1ZGVkIGluIHRoZSBzaWduZWQgZGF0YVxuICAgIC8vIFdyaXRlIHgtb25seSBwdWJrZXkgdG8gYXV0aG9yIGZpZWxkICgzMiBieXRlcyA9IDY0IGhleCBjaGFycylcbiAgICB0aGlzLnJhdy5hdXRob3Iud3JpdGUoeE9ubHlQdWJrZXkudG9TdHJpbmcoJ2hleCcpLCAnaGV4Jyk7XG5cbiAgICAvLyBDcmVhdGUgaGVhZGVyIHdpdGggc2lnbmF0dXJlIGZpZWxkIHplcm9lZCAoYXMgaXQgd291bGQgYmUgZHVyaW5nIHNpZ25pbmcpXG4gICAgLy8gVGhlIEMgaW1wbGVtZW50YXRpb24gaW5jbHVkZXMgdGhlIHNpZ25hdHVyZSBmaWVsZCBpbiBvZmZzZXRvZihNZXNzYWdlLCBib2R5KSxcbiAgICAvLyBidXQgaXQncyB6ZXJvL3VuaW5pdGlhbGl6ZWQgd2hlbiBzaWduaW5nLCBzbyB3ZSB6ZXJvIGl0XG4gICAgY29uc3QgemVyb2VkU2lnbmF0dXJlID0gQnVmZmVyLmFsbG9jKDY0KTsgLy8gNjQgYnl0ZXMgb2YgemVyb3NcbiAgICBjb25zdCBwcmUgPSBCdWZmZXIuaXNCdWZmZXIodGhpcy5yYXcucHJlaW1hZ2UpXG4gICAgICA/IHRoaXMucmF3LnByZWltYWdlXG4gICAgICA6IEJ1ZmZlci5mcm9tKHRoaXMucmF3LnByZWltYWdlIHx8ICcnLCAnaGV4Jyk7XG4gICAgaWYgKHByZS5sZW5ndGggIT09IDMyKSB0aHJvdyBuZXcgRXJyb3IoJ01lc3NhZ2UgcHJlaW1hZ2UgbXVzdCBiZSAzMiBieXRlcyBvbiB3aXJlJyk7XG4gICAgY29uc3QgaGVhZGVyRm9ySGFzaCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgQnVmZmVyLmZyb20odGhpcy5yYXcubWFnaWMsICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHRoaXMucmF3LnZlcnNpb24sICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHRoaXMucmF3LnBhcmVudCwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20odGhpcy5yYXcuYXV0aG9yLCAnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbSh0aGlzLnJhdy50eXBlLCAnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbSh0aGlzLnJhdy5zaXplLCAnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbSh0aGlzLnJhdy5oYXNoLCAnaGV4JyksXG4gICAgICBwcmUsXG4gICAgICB6ZXJvZWRTaWduYXR1cmUgLy8gU2lnbmF0dXJlIGZpZWxkIHplcm9lZCBmb3IgaGFzaCBjb21wdXRhdGlvblxuICAgIF0pO1xuXG4gICAgLy8gQ3JlYXRlIGJ1ZmZlciB3aXRoIGhlYWRlciAoc2lnbmF0dXJlIHplcm9lZCkgKyBib2R5XG4gICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBDIGltcGxlbWVudGF0aW9uOiBtZW1jcHkoZGF0YV9idWZmZXIsIG1lc3NhZ2UsIG9mZnNldG9mKE1lc3NhZ2UsIGJvZHkpKVxuICAgIGNvbnN0IGRhdGFCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIGhlYWRlckZvckhhc2gsXG4gICAgICB0aGlzLnJhdy5kYXRhIHx8IEJ1ZmZlci5hbGxvYygwKVxuICAgIF0pO1xuXG4gICAgLy8gQ29tcHV0ZSB0YWdnZWQgaGFzaCB3aXRoIFwiRmFicmljL01lc3NhZ2VcIiB0YWcgKEJJUC0zNDApXG4gICAgLy8gVGhpcyBtYXRjaGVzOiBzZWNwMjU2azFfdGFnZ2VkX3NoYTI1NihjdHgsIG1zZ2hhc2gsIFwiRmFicmljL01lc3NhZ2VcIiwgZGF0YV9idWZmZXIsIGRhdGFfc2l6ZSlcbiAgICBjb25zdCB0YWcgPSAnRmFicmljL01lc3NhZ2UnO1xuICAgIGNvbnN0IG1lc3NhZ2VIYXNoID0gdGFnZ2VkSGFzaCh0YWcsIGRhdGFCdWZmZXIpO1xuXG4gICAgLy8gU2lnbiB0aGUgdGFnZ2VkIGhhc2ggdXNpbmcgQklQLTM0MCBTY2hub3JyXG4gICAgLy8gVGhpcyBtYXRjaGVzOiBzZWNwMjU2azFfc2Nobm9ycnNpZ19zaWduMzIoY3R4LCBzaWduYXR1cmUsIG1zZ2hhc2gsICZrZXlwYWlyLCBOVUxMKVxuICAgIC8vIFVzZSBzaWduU2Nobm9yckhhc2ggc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgcHJlLWNvbXB1dGVkIGhhc2hcbiAgICBjb25zdCBzaWduYXR1cmUgPSBrZXkuc2lnblNjaG5vcnJIYXNoKG1lc3NhZ2VIYXNoKTtcblxuICAgIC8vIFdyaXRlIHNpZ25hdHVyZSAoNjQgYnl0ZXMgPSAxMjggaGV4IGNoYXJzKVxuICAgIHRoaXMucmF3LnNpZ25hdHVyZS53cml0ZShzaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpLCAnaGV4Jyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNpZ24gKCkge1xuICAgIGlmICghdGhpcy5zaWduZXIpIHRocm93IG5ldyBFcnJvcignTm8gc2lnbmVyIGF2YWlsYWJsZS4nKTtcbiAgICBpZiAoIXRoaXMuc2lnbmVyLnByaXZhdGUpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNpZ24gbWVzc2FnZSB3aXRoIHB1YmxpYyBrZXkgb25seS4nKTtcbiAgICBpZiAoIXRoaXMuc2lnbmVyLnNpZ24pIHRocm93IG5ldyBFcnJvcignU2lnbmVyIG11c3QgaW1wbGVtZW50IHNpZ24gbWV0aG9kJyk7XG5cbiAgICByZXR1cm4gdGhpcy5zaWduV2l0aEtleSh0aGlzLnNpZ25lcik7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IGEgbWVzc2FnZSdzIHNpZ25hdHVyZS5cbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkLCBgZmFsc2VgIGlmIG5vdC5cbiAgICovXG4gIHZlcmlmeSAoKSB7XG4gICAgaWYgKCF0aGlzLmhlYWRlcikgdGhyb3cgbmV3IEVycm9yKCdObyBoZWFkZXIgcHJvcGVydHkuJyk7XG4gICAgaWYgKCF0aGlzLnJhdykgdGhyb3cgbmV3IEVycm9yKCdObyByYXcgcHJvcGVydHkuJyk7XG4gICAgaWYgKCF0aGlzLnNpZ25lcikgdGhyb3cgbmV3IEVycm9yKCdObyBzaWduZXIgYXZhaWxhYmxlLicpO1xuICAgIGlmICghdGhpcy5zaWduZXIudmVyaWZ5KSB0aHJvdyBuZXcgRXJyb3IoJ1NpZ25lciBtdXN0IGltcGxlbWVudCB2ZXJpZnkgbWV0aG9kJyk7XG5cbiAgICByZXR1cm4gdGhpcy52ZXJpZnlXaXRoS2V5KHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgYSBtZXNzYWdlJ3Mgc2lnbmF0dXJlIHdpdGggYSBzcGVjaWZpYyBrZXkuXG4gICAqIFVzZXMgQklQLTM0MCBTY2hub3JyIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gd2l0aCB0YWdnZWQgaGFzaCBcIkZhYnJpYy9NZXNzYWdlXCIuXG4gICAqIFZlcmlmaWVzIHRoZSBjb21wbGV0ZSBtZXNzYWdlIChoZWFkZXIgKyBib2R5KSBhcyBwZXIgQyBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGtleSBLZXkgb2JqZWN0IHdpdGggdmVyaWZ5IG1ldGhvZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5LnZlcmlmeSBWZXJpZmljYXRpb24gZnVuY3Rpb25cbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkLCBgZmFsc2VgIGlmIG5vdC5cbiAgICovXG4gIHZlcmlmeVdpdGhLZXkgKGtleSkge1xuICAgIGlmICghdGhpcy5oZWFkZXIpIHRocm93IG5ldyBFcnJvcignTm8gaGVhZGVyIHByb3BlcnR5LicpO1xuICAgIGlmICghdGhpcy5yYXcpIHRocm93IG5ldyBFcnJvcignTm8gcmF3IHByb3BlcnR5LicpO1xuICAgIGlmICgha2V5KSB0aHJvdyBuZXcgRXJyb3IoJ05vIGtleSBwcm92aWRlZC4nKTtcbiAgICBpZiAoIWtleS52ZXJpZnkpIHRocm93IG5ldyBFcnJvcignS2V5IG9iamVjdCBtdXN0IGltcGxlbWVudCB2ZXJpZnkgbWV0aG9kJyk7XG5cbiAgICAvLyBQYXJzZSB4LW9ubHkgcHVia2V5IGZyb20gYXV0aG9yIGZpZWxkICgzMiBieXRlcyA9IDY0IGhleCBjaGFycylcbiAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIEMgaW1wbGVtZW50YXRpb24gd2hpY2ggdXNlcyBzZWNwMjU2azFfeG9ubHlfcHVia2V5X3BhcnNlXG4gICAgY29uc3QgYXV0aG9ySGV4ID0gdGhpcy5yYXcuYXV0aG9yLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBpZiAoYXV0aG9ySGV4Lmxlbmd0aCAhPT0gNjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhdXRob3IgZmllbGQgbGVuZ3RoOiBleHBlY3RlZCA2NCBoZXggY2hhcnMgKDMyIGJ5dGVzKSwgZ290ICR7YXV0aG9ySGV4Lmxlbmd0aH1gKTtcbiAgICB9XG4gICAgY29uc3QgeE9ubHlQdWJrZXlGcm9tQXV0aG9yID0gQnVmZmVyLmZyb20oYXV0aG9ySGV4LCAnaGV4Jyk7XG5cbiAgICAvLyBHZXQgeC1vbmx5IHB1YmtleSBmcm9tIHRoZSBwcm92aWRlZCBrZXkgZm9yIGNvbXBhcmlzb25cbiAgICAvLyBUaGlzIGFsbG93cyB1cyB0byB2ZXJpZnkgdXNpbmcgdGhlIGtleSBkaXJlY3RseSBpbnN0ZWFkIG9mIHJlY29uc3RydWN0aW5nXG4gICAgY29uc3QgY29tcHJlc3NlZFB1YmtleUZyb21LZXkgPSBCdWZmZXIuZnJvbShrZXkucHVibGljLmVuY29kZUNvbXByZXNzZWQoJ2hleCcpLCAnaGV4Jyk7XG4gICAgY29uc3QgeE9ubHlQdWJrZXlGcm9tS2V5ID0gY29tcHJlc3NlZFB1YmtleUZyb21LZXkuc2xpY2UoMSk7XG5cbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgYXV0aG9yIGZpZWxkIG1hdGNoZXMgdGhlIGtleSdzIHgtb25seSBwdWJrZXlcbiAgICBpZiAoIXhPbmx5UHVia2V5RnJvbUF1dGhvci5lcXVhbHMoeE9ubHlQdWJrZXlGcm9tS2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBoZWFkZXIgd2l0aCBzaWduYXR1cmUgZmllbGQgemVyb2VkIChhcyBpdCB3b3VsZCBiZSBkdXJpbmcgc2lnbmluZylcbiAgICAvLyBUaGUgQyBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlcyB0aGUgc2lnbmF0dXJlIGZpZWxkIGluIG9mZnNldG9mKE1lc3NhZ2UsIGJvZHkpLFxuICAgIC8vIGJ1dCBpdCdzIHplcm8vdW5pbml0aWFsaXplZCB3aGVuIHNpZ25pbmcsIHNvIHdlIHplcm8gaXQgZm9yIHZlcmlmaWNhdGlvblxuICAgIGNvbnN0IHplcm9lZFNpZ25hdHVyZSA9IEJ1ZmZlci5hbGxvYyg2NCk7IC8vIDY0IGJ5dGVzIG9mIHplcm9zXG4gICAgY29uc3QgcHJlID0gQnVmZmVyLmlzQnVmZmVyKHRoaXMucmF3LnByZWltYWdlKVxuICAgICAgPyB0aGlzLnJhdy5wcmVpbWFnZVxuICAgICAgOiBCdWZmZXIuZnJvbSh0aGlzLnJhdy5wcmVpbWFnZSB8fCAnJywgJ2hleCcpO1xuICAgIGlmIChwcmUubGVuZ3RoICE9PSAzMikgdGhyb3cgbmV3IEVycm9yKCdNZXNzYWdlIHByZWltYWdlIG11c3QgYmUgMzIgYnl0ZXMgb24gd2lyZScpO1xuICAgIGNvbnN0IGhlYWRlckZvckhhc2ggPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIEJ1ZmZlci5mcm9tKHRoaXMucmF3Lm1hZ2ljLCAnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbSh0aGlzLnJhdy52ZXJzaW9uLCAnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbSh0aGlzLnJhdy5wYXJlbnQsICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHRoaXMucmF3LmF1dGhvciwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20odGhpcy5yYXcudHlwZSwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20odGhpcy5yYXcuc2l6ZSwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20odGhpcy5yYXcuaGFzaCwgJ2hleCcpLFxuICAgICAgcHJlLFxuICAgICAgemVyb2VkU2lnbmF0dXJlIC8vIFNpZ25hdHVyZSBmaWVsZCB6ZXJvZWQgZm9yIGhhc2ggY29tcHV0YXRpb25cbiAgICBdKTtcblxuICAgIC8vIENyZWF0ZSBidWZmZXIgd2l0aCBoZWFkZXIgKHNpZ25hdHVyZSB6ZXJvZWQpICsgYm9keVxuICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgQyBpbXBsZW1lbnRhdGlvbjogbWVtY3B5KGRhdGFfYnVmZmVyLCBtZXNzYWdlLCBvZmZzZXRvZihNZXNzYWdlLCBib2R5KSlcbiAgICBjb25zdCBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBoZWFkZXJGb3JIYXNoLFxuICAgICAgdGhpcy5yYXcuZGF0YSB8fCBCdWZmZXIuYWxsb2MoMClcbiAgICBdKTtcblxuICAgIC8vIENvbXB1dGUgdGFnZ2VkIGhhc2ggd2l0aCBcIkZhYnJpYy9NZXNzYWdlXCIgdGFnIChCSVAtMzQwKVxuICAgIGNvbnN0IHRhZyA9ICdGYWJyaWMvTWVzc2FnZSc7XG4gICAgY29uc3QgbWVzc2FnZUhhc2ggPSB0YWdnZWRIYXNoKHRhZywgZGF0YUJ1ZmZlcik7XG5cbiAgICAvLyBHZXQgc2lnbmF0dXJlXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5yYXcuc2lnbmF0dXJlO1xuICAgIGNvbnN0IHNpZ0J1ZmZlciA9IEJ1ZmZlci5pc0J1ZmZlcihzaWduYXR1cmUpID8gc2lnbmF0dXJlIDogQnVmZmVyLmZyb20oc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSwgJ2hleCcpO1xuXG4gICAgLy8gVXNlIHRoZSBwcm92aWRlZCBrZXkncyB2ZXJpZnlTY2hub3JySGFzaCBtZXRob2QgZGlyZWN0bHlcbiAgICAvLyBUaGlzIGF2b2lkcyBuZWVkaW5nIHRvIHJlY29uc3RydWN0IHRoZSBrZXkgZnJvbSB0aGUgYXV0aG9yIGZpZWxkXG4gICAgcmV0dXJuIGtleS52ZXJpZnlTY2hub3JySGFzaChtZXNzYWdlSGFzaCwgc2lnQnVmZmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzaWduZXIgZm9yIHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge09iamVjdH0ga2V5IEtleSBvYmplY3Qgd2l0aCBwdWJrZXkgcHJvcGVydHkuXG4gICAqIEBwYXJhbSB7U3RyaW5nfEJ1ZmZlcn0ga2V5LnB1YmtleSBQdWJsaWMga2V5XG4gICAqIEByZXR1cm5zIHtNZXNzYWdlfSBJbnN0YW5jZSBvZiB0aGUgTWVzc2FnZSB3aXRoIGFzc29jaWF0ZWQgc2lnbmVyLlxuICAgKi9cbiAgX3NldFNpZ25lciAoa2V5KSB7XG4gICAgaWYgKCFrZXkgfHwgIWtleS5wdWJrZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignS2V5IG9iamVjdCB3aXRoIHB1YmtleSBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuc2lnbmVyID0ga2V5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlQnVmZmVyIChidWZmZXIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gc3RydWN0KClcbiAgICAgIC5jaGFyc250KCdtYWdpYycsIDQsICdoZXgnKVxuICAgICAgLmNoYXJzbnQoJ3ZlcnNpb24nLCA0LCAnaGV4JylcbiAgICAgIC5jaGFyc250KCdwYXJlbnQnLCAzMiwgJ2hleCcpXG4gICAgICAuY2hhcnNudCgnYXV0aG9yJywgMzIsICdoZXgnKVxuICAgICAgLmNoYXJzbnQoJ3R5cGUnLCA0LCAnaGV4JylcbiAgICAgIC5jaGFyc250KCdzaXplJywgNCwgJ2hleCcpXG4gICAgICAuY2hhcnNudCgnaGFzaCcsIDMyLCAnaGV4JylcbiAgICAgIC5jaGFyc250KCdwcmVpbWFnZScsIDMyLCAnaGV4JylcbiAgICAgIC5jaGFyc250KCdzaWduYXR1cmUnLCA2NCwgJ2hleCcpXG4gICAgICAuY2hhcnNudCgnZGF0YScsIGJ1ZmZlci5sZW5ndGggLSBIRUFERVJfU0laRSk7XG5cbiAgICBtZXNzYWdlLmFsbG9jYXRlKCk7XG4gICAgbWVzc2FnZS5fc2V0QnVmZihidWZmZXIpO1xuXG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VSYXdNZXNzYWdlIChidWZmZXIpIHtcbiAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgbWFnaWM6IGJ1ZmZlci5zbGljZSgwLCA0KSxcbiAgICAgIHZlcnNpb246IGJ1ZmZlci5zbGljZSg0LCA4KSxcbiAgICAgIHBhcmVudDogYnVmZmVyLnNsaWNlKDgsIDQwKSxcbiAgICAgIGF1dGhvcjogYnVmZmVyLnNsaWNlKDQwLCA3MiksXG4gICAgICB0eXBlOiBidWZmZXIuc2xpY2UoNzIsIDc2KSxcbiAgICAgIHNpemU6IGJ1ZmZlci5zbGljZSg3NiwgODApLFxuICAgICAgaGFzaDogYnVmZmVyLnNsaWNlKDgwLCAxMTIpLFxuICAgICAgcHJlaW1hZ2U6IGJ1ZmZlci5zbGljZSgxMTIsIDE0NCksXG4gICAgICBzaWduYXR1cmU6IGJ1ZmZlci5zbGljZSgxNDQsIEhFQURFUl9TSVpFKVxuICAgIH07XG5cbiAgICBpZiAoYnVmZmVyLmxlbmd0aCA+PSBIRUFERVJfU0laRSkge1xuICAgICAgbWVzc2FnZS5kYXRhID0gYnVmZmVyLnNsaWNlKEhFQURFUl9TSVpFLCBidWZmZXIubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfTtcblxuICBzdGF0aWMgZnJvbUJ1ZmZlciAoYnVmZmVyKSB7XG4gICAgcmV0dXJuIE1lc3NhZ2UuZnJvbVJhdyhidWZmZXIpO1xuICB9XG5cbiAgc3RhdGljIGZyb21SYXcgKGlucHV0KSB7XG4gICAgaWYgKCFpbnB1dCkgcmV0dXJuIG51bGw7XG4gICAgLy8gQ29udmVydCB2YXJpb3VzIGJ1ZmZlci1saWtlIGlucHV0cyB0byBCdWZmZXJcbiAgICBsZXQgYnVmZmVyO1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgYnVmZmVyID0gaW5wdXQ7XG4gICAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGlucHV0LmJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oaW5wdXQuYnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBtdXN0IGJlIGEgYnVmZmVyIG9yIGJ1ZmZlci1saWtlIG9iamVjdC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gbmV3IE1lc3NhZ2UoKTtcbiAgICBjb25zdCBwYXlsb2FkID0gYnVmZmVyLnN1YmFycmF5KEhFQURFUl9TSVpFKTtcbiAgICBtZXNzYWdlLnJhdyA9IHtcbiAgICAgIG1hZ2ljOiBidWZmZXIuc3ViYXJyYXkoMCwgNCksXG4gICAgICB2ZXJzaW9uOiBidWZmZXIuc3ViYXJyYXkoNCwgOCksXG4gICAgICBwYXJlbnQ6IGJ1ZmZlci5zdWJhcnJheSg4LCA0MCksXG4gICAgICBhdXRob3I6IGJ1ZmZlci5zdWJhcnJheSg0MCwgNzIpLFxuICAgICAgdHlwZTogYnVmZmVyLnN1YmFycmF5KDcyLCA3NiksXG4gICAgICBzaXplOiBidWZmZXIuc3ViYXJyYXkoNzYsIDgwKSxcbiAgICAgIGhhc2g6IGJ1ZmZlci5zdWJhcnJheSg4MCwgMTEyKSxcbiAgICAgIHByZWltYWdlOiBidWZmZXIuc3ViYXJyYXkoMTEyLCAxNDQpLFxuICAgICAgc2lnbmF0dXJlOiBidWZmZXIuc3ViYXJyYXkoMTQ0LCBIRUFERVJfU0laRSksXG4gICAgICBkYXRhOiBwYXlsb2FkXG4gICAgfTtcblxuICAgIC8vIERvIG5vdCBhc3NpZ24gYG1lc3NhZ2UuZGF0YWAgaGVyZTogdGhlIGBkYXRhYCBzZXR0ZXIgcmVjb21wdXRlcyBgcmF3Lmhhc2hgXG4gICAgLy8gKGRvdWJsZS1TSEEyNTYgb2YgdGhlIGJvZHkpLCB3aGljaCB3b3VsZCByZXBsYWNlIHRoZSBvbi13aXJlIGhhc2ggYW5kIGJyZWFrXG4gICAgLy8gYFBlZXIuX2hhbmRsZUZhYnJpY01lc3NhZ2VgIGJvZHktaW50ZWdyaXR5IGNoZWNrcyAoQyBwYXJpdHkpLlxuICAgIG1lc3NhZ2UuX2V4cGxpY2l0UHJlaW1hZ2UgPSAhaXNBbGxaZXJvMzIobWVzc2FnZS5yYXcucHJlaW1hZ2UpO1xuXG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICBzdGF0aWMgZnJvbVZlY3RvciAodmVjdG9yID0gWydMb2dNZXNzYWdlJywgJ05vIHZlY3RvciBwcm92aWRlZC4nXSkge1xuICAgIGxldCBtZXNzYWdlID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBtZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuICAgICAgICB0eXBlOiB2ZWN0b3JbMF0sXG4gICAgICAgIGRhdGE6IHZlY3RvclsxXVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbRkFCUklDOk1FU1NBR0VdJywgJ0NvdWxkIG5vdCBjb25zdHJ1Y3QgTWVzc2FnZTonLCBleGNlcHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgTWVzc2FnZSB3aG9zZSBib2R5IGlzIGVuY29kZWQgZnJvbSBhIHJlZ2lzdGVyZWQgZmllbGQgc2NoZW1hIChWMSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdHlwZSBXaXJlIG9yIGZyaWVuZGx5IHR5cGUgbmFtZSAob3Igb3Bjb2RlKS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtmaWVsZHM9e31dIE5hbWVkIGZpZWxkcyBtYXRjaGluZyB0aGUgc2NoZW1hLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdHM9e31dIEV4dHJhIE1lc3NhZ2UgY29uc3RydWN0b3Igb3B0aW9ucyAoYHNpZ25lcmAsIGBzZW5zaXRpdmVgLCDigKYpLlxuICAgKiBAcmV0dXJucyB7TWVzc2FnZX1cbiAgICovXG4gIHN0YXRpYyBmcm9tRmllbGRzICh0eXBlLCBmaWVsZHMgPSB7fSwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3Qgc2NoZW1hID0gZ2V0Qm9keVNjaGVtYSh0eXBlKTtcbiAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZXNzYWdlLmZyb21GaWVsZHM6IG5vIGJvZHkgc2NoZW1hIHJlZ2lzdGVyZWQgZm9yIHR5cGUgJHt0eXBlfWApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7fSwgb3B0cywge1xuICAgICAgdHlwZSxcbiAgICAgIGRhdGE6IGVuY29kZUJvZHkoc2NoZW1hLCBmaWVsZHMpXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZSBib2R5IGJ5dGVzIHZpYSB0aGUgcmVnaXN0ZXJlZCBmaWVsZCBzY2hlbWEgZm9yIHRoaXMgbWVzc2FnZSB0eXBlLlxuICAgKiBUcnVuY2F0ZWQgLyBtYWxmb3JtZWQgcGVlciBib2RpZXMgcmV0dXJuIHtAY29kZSBudWxsfSAocHJvdG9jb2wgdmlvbGF0aW9uKSBpbnN0ZWFkIG9mIHRocm93aW5nLlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fG51bGx9IEZpZWxkIG1hcCwgb3IgbnVsbCBpZiBubyBzY2hlbWEgLyBlbXB0eSAvIHVuZGVjb2RhYmxlIGJvZHkuXG4gICAqL1xuICB0b0ZpZWxkcyAoKSB7XG4gICAgY29uc3Qgb3Bjb2RlID0gdGhpcy5yYXcudHlwZS5yZWFkVUludDMyQkUoMCk7XG4gICAgY29uc3Qgc2NoZW1hID0gZ2V0Qm9keVNjaGVtYSh0aGlzLnR5cGUpIHx8IGdldEJvZHlTY2hlbWEodGhpcy53aXJlVHlwZSkgfHwgZ2V0Qm9keVNjaGVtYShvcGNvZGUpO1xuICAgIGlmICghc2NoZW1hKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuaXNCdWZmZXIodGhpcy5yYXcuZGF0YSlcbiAgICAgID8gdGhpcy5yYXcuZGF0YVxuICAgICAgOiBCdWZmZXIuZnJvbSh0aGlzLmRhdGEgfHwgJycsICd1dGY4Jyk7XG4gICAgaWYgKCFidWYubGVuZ3RoKSByZXR1cm4ge307XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkZWNvZGVCb2R5KHNjaGVtYSwgYnVmKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgJiYgKGVyci5uYW1lID09PSAnUmFuZ2VFcnJvcicgfHwgZXJyIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikpIHJldHVybiBudWxsO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSYXcgYm9keSBCdWZmZXIgKHByZWZlcnJlZCBvdmVyIFVURi04IGBkYXRhYCBnZXR0ZXIgZm9yIGJpbmFyeSBmaWVsZCBib2RpZXMpLiAqL1xuICBnZXQgYm9keUJ1ZmZlciAoKSB7XG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLnJhdy5kYXRhKSkgcmV0dXJuIHRoaXMucmF3LmRhdGE7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMuZGF0YSB8fCAnJywgJ3V0ZjgnKTtcbiAgfVxuXG4gIC8qIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSAoKSB7XG4gICAgcmV0dXJuIGA8TWVzc2FnZSB8ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5yYXcpfT5gO1xuICB9ICovXG5cbiAgZ2V0IGlkICgpIHtcbiAgICByZXR1cm4gSGFzaDI1Ni5kaWdlc3QodGhpcy5hc1JhdygpKTtcbiAgfVxuXG4gIGdldCB0eXBlcyAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIENBTk9OSUNBTF9NRVNTQUdFX1RZUEVfU1RSSU5HUywgTEVHQUNZX01FU1NBR0VfVFlQRV9BTElBU0VTKTtcbiAgfVxuXG4gIGdldCBjb2RlcyAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIENBTk9OSUNBTF9XSVJFX1RZUEVfQllfT1BDT0RFKTtcbiAgfVxuXG4gIGdldCBtYWdpYyAoKSB7XG4gICAgcmV0dXJuIHRoaXMucmF3Lm1hZ2ljO1xuICB9XG5cbiAgZ2V0IHNpZ25hdHVyZSAoKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KEJ1ZmZlci5mcm9tKHRoaXMucmF3LnNpZ25hdHVyZSwgJ2hleCcpKTtcbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoQnVmZmVyLmZyb20odGhpcy5yYXcuc2l6ZSwgJ2hleCcpKTtcbiAgfVxuXG4gIGdldCB2ZXJzaW9uICgpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoQnVmZmVyLmZyb20odGhpcy5yYXcudmVyc2lvbikpO1xuICB9XG5cbiAgZ2V0IGhlYWRlciAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcy5yYXcucHJlaW1hZ2UpIHx8IHRoaXMucmF3LnByZWltYWdlLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWVzc2FnZSByYXcucHJlaW1hZ2UgbXVzdCBiZSBhIDMyLWJ5dGUgQnVmZmVyJyk7XG4gICAgfVxuICAgIGNvbnN0IHBhcnRzID0gW1xuICAgICAgQnVmZmVyLmZyb20odGhpcy5yYXcubWFnaWMsICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHRoaXMucmF3LnZlcnNpb24sICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHRoaXMucmF3LnBhcmVudCwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20odGhpcy5yYXcuYXV0aG9yLCAnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbSh0aGlzLnJhdy50eXBlLCAnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbSh0aGlzLnJhdy5zaXplLCAnaGV4JyksXG4gICAgICBCdWZmZXIuZnJvbSh0aGlzLnJhdy5oYXNoLCAnaGV4JyksXG4gICAgICB0aGlzLnJhdy5wcmVpbWFnZSxcbiAgICAgIEJ1ZmZlci5mcm9tKHRoaXMucmF3LnNpZ25hdHVyZSwgJ2hleCcpXG4gICAgXTtcblxuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KHBhcnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBTVAgd2lyZSB0eXBlIHN0cmluZyAoU0NSRUFNSU5HX1NOQUtFX0NBU0UgLyBvcGNvZGUtY2Fub25pY2FsKS4gU2FtZSBhcyB7QGxpbmsgTWVzc2FnZSN0eXBlfS5cbiAgICovXG4gIGdldCB3aXJlVHlwZSAoKSB7XG4gICAgY29uc3QgY29kZSA9IHBhcnNlSW50KHRoaXMucmF3LnR5cGUudG9TdHJpbmcoJ2hleCcpLCAxNik7XG4gICAgLy8gU3RyaWN0IFByb3RvY29sIFYxOiB1bnJlZ2lzdGVyZWQgb3Bjb2RlcyBtdXN0IE5PVCBhbGlhcyB0byBQMlBfQkFTRV9NRVNTQUdFXG4gICAgLy8gKHRoYXQgd291bGQgcnVuIGdlbmVyaWMgSlNPTiBkaXNwYXRjaCAvIHJlbGF5IHBhdGhzIG9uIGhvc3RpbGUgdHlwZSBieXRlcykuXG4gICAgcmV0dXJuIENBTk9OSUNBTF9XSVJFX1RZUEVfQllfT1BDT0RFW2NvZGVdIHx8ICdVTktOT1dOX01FU1NBR0UnO1xuICB9XG5cbiAgLyoqXG4gICAqIEpTT04tb3JpZW50ZWQgdHlwZSBsYWJlbCAoaGlzdG9yaWNhbCBQYXNjYWxDYXNlIGFsaWFzZXMpLiBVc2UgaW4gQVBJcyBhbmQgYHRvT2JqZWN0KCkudHlwZWAuXG4gICAqL1xuICBnZXQgZnJpZW5kbHlUeXBlICgpIHtcbiAgICByZXR1cm4gZnJpZW5kbHlUeXBlRnJvbVdpcmUodGhpcy53aXJlVHlwZSk7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KE1lc3NhZ2UucHJvdG90eXBlLCAndHlwZScsIHtcbiAgZ2V0ICgpIHtcbiAgICByZXR1cm4gdGhpcy53aXJlVHlwZTtcbiAgfSxcbiAgc2V0ICh2YWx1ZSkge1xuICAgIC8vIGNvbnNvbGUudHJhY2UoJ3NldHRpbmcgdHlwZTonLCB2YWx1ZSk7XG4gICAgbGV0IGNvZGUgPSB0aGlzLnR5cGVzW3ZhbHVlXTtcbiAgICAvLyBEZWZhdWx0IHRvIFAyUF9CQVNFX01FU1NBR0UgZm9yIHVua25vd24vdW5yZWdpc3RlcmVkIG5hbWVzLlxuICAgIGlmICghY29kZSkge1xuICAgICAgdGhpcy5lbWl0KCd3YXJuaW5nJywgYFVua25vd24gbWVzc2FnZSB0eXBlOiAke3ZhbHVlfWApO1xuICAgICAgLy8gS2VlcCB1bmtub3duIHBheWxvYWRzIHJlcHJlc2VudGFibGUgb24td2lyZSB3aXRob3V0IGludmVudGluZyBhZC1ob2MgZ2VuZXJpYyBsYWJlbHMuXG4gICAgICB0cnlQYXJzZVdpcmVKc29uKHR5cGVvZiB0aGlzLmRhdGEgPT09ICdzdHJpbmcnID8gdGhpcy5kYXRhIDogU3RyaW5nKHRoaXMuZGF0YSA/PyAnJykpO1xuICAgICAgY29kZSA9IHRoaXMudHlwZXMuUDJQX0JBU0VfTUVTU0FHRTtcbiAgICAgIHZhbHVlID0gJ1AyUF9CQVNFX01FU1NBR0UnO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZGRlZCA9IHBhZERpZ2l0cyhjb2RlLnRvU3RyaW5nKDE2KSwgOCk7XG4gICAgdGhpc1snQHR5cGUnXSA9IHZhbHVlO1xuICAgIHRoaXMucmF3LnR5cGUud3JpdGUocGFkZGVkLCAnaGV4Jyk7XG4gIH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzc2FnZS5wcm90b3R5cGUsICdkYXRhJywge1xuICBnZXQgKCkge1xuICAgIGlmICghdGhpcy5yYXcuZGF0YSkgcmV0dXJuICcnO1xuICAgIHJldHVybiB0aGlzLnJhdy5kYXRhLnRvU3RyaW5nKCd1dGY4Jyk7XG4gIH0sXG4gIHNldCAodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlKSB2YWx1ZSA9ICcnO1xuICAgIGNvbnN0IGJvZHlCdWYgPSBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgY29uc3QgaGV4RG91YmxlID0gSGFzaDI1Ni5kb3VibGVEaWdlc3QoYm9keUJ1Zik7XG4gICAgLy8gS2VlcCBgcmF3Lmhhc2hgIGFzIDMyIGJ5dGVzIChkb3VibGUtU0hBMjU2IG9mIGJvZHkpOyBkbyBub3QgYXNzaWduIGEgc3RyaW5nIHRvIHRoZSBidWZmZXIgc2xvdC5cbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHRoaXMucmF3Lmhhc2gpICYmIHRoaXMucmF3Lmhhc2gubGVuZ3RoID09PSAzMikge1xuICAgICAgQnVmZmVyLmZyb20oaGV4RG91YmxlLCAnaGV4JykuY29weSh0aGlzLnJhdy5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yYXcuaGFzaCA9IEJ1ZmZlci5mcm9tKGhleERvdWJsZSwgJ2hleCcpO1xuICAgIH1cbiAgICB0aGlzLnJhdy5kYXRhID0gYm9keUJ1ZjtcbiAgICB0aGlzLnJhdy5zaXplLndyaXRlKHBhZERpZ2l0cyh0aGlzLnJhdy5kYXRhLmJ5dGVMZW5ndGgudG9TdHJpbmcoMTYpLCA4KSwgJ2hleCcpO1xuICAgIC8vIExpZ2h0bmluZy1zdHlsZTogYm9keSBjaGFuZ2VzIG5ldmVyIGludmVudCBhIHBheW1lbnQgcHJlaW1hZ2UuIFB1YmxpYyA9XG4gICAgLy8gYWxsLXplcm8gdW5sZXNzIGFuIGV4cGxpY2l0IEhUTEMvY2lyY3VpdCBzZWNyZXQgd2FzIHNldCAob3Igc2Vuc2l0aXZlIGNsZWFycyBpdCkuXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcy5yYXcucHJlaW1hZ2UpIHx8IHRoaXMucmF3LnByZWltYWdlLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRoaXMucmF3LnByZWltYWdlID0gQnVmZmVyLmFsbG9jKDMyKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NlbnNpdGl2ZSB8fCAhdGhpcy5fZXhwbGljaXRQcmVpbWFnZSkge1xuICAgICAgdGhpcy5yYXcucHJlaW1hZ2UuZmlsbCgwKTtcbiAgICAgIGlmICh0aGlzLl9zZW5zaXRpdmUpIHRoaXMuX2V4cGxpY2l0UHJlaW1hZ2UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTWVzc2FnZS5wcm90b3R5cGUsICdzZW5zaXRpdmUnLCB7XG4gIGdldCAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5fc2Vuc2l0aXZlO1xuICB9LFxuICBzZXQgKHZhbHVlKSB7XG4gICAgdGhpcy5fc2Vuc2l0aXZlID0gISF2YWx1ZTtcbiAgICBpZiAoIXRoaXMuX3NlbnNpdGl2ZSkgcmV0dXJuO1xuICAgIC8vIE5ldmVyIGxlYXZlIGEgcGF5bWVudCBzZWNyZXQgb24gYSBzZW5zaXRpdmUgZnJhbWU7IGRvIG5vdCBpbnZlbnQgU0hBMjU2KGJvZHkpLlxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMucmF3LnByZWltYWdlKSB8fCB0aGlzLnJhdy5wcmVpbWFnZS5sZW5ndGggIT09IDMyKSB7XG4gICAgICB0aGlzLnJhdy5wcmVpbWFnZSA9IEJ1ZmZlci5hbGxvYygzMik7XG4gICAgfVxuICAgIHRoaXMucmF3LnByZWltYWdlLmZpbGwoMCk7XG4gICAgdGhpcy5fZXhwbGljaXRQcmVpbWFnZSA9IGZhbHNlO1xuICB9XG59KTtcblxuTWVzc2FnZS5mcmllbmRseVR5cGVGcm9tV2lyZSA9IGZyaWVuZGx5VHlwZUZyb21XaXJlO1xuTWVzc2FnZS53aXJlVHlwZUZyb21GcmllbmRseSA9IHdpcmVUeXBlRnJvbUZyaWVuZGx5O1xuTWVzc2FnZS5jYW5vbmljYWxUeXBlQ29kZSA9IGNhbm9uaWNhbFR5cGVDb2RlO1xuTWVzc2FnZS5jYW5vbmljYWxUeXBlTmFtZSA9IGNhbm9uaWNhbFR5cGVOYW1lO1xuTWVzc2FnZS50eXBlRXF1YWxzID0gdHlwZUVxdWFscztcbk1lc3NhZ2UuV0lSRV9UWVBFX0RFQ09ERV9PUkRFUiA9IFdJUkVfVFlQRV9ERUNPREVfT1JERVI7XG5NZXNzYWdlLkZSSUVORExZX1RZUEVfQllfV0lSRSA9IEZSSUVORExZX1RZUEVfQllfV0lSRTtcbk1lc3NhZ2UuRlJJRU5ETFlfVE9fV0lSRV9UWVBFID0gRlJJRU5ETFlfVE9fV0lSRV9UWVBFO1xuXG4vLyAtLS0gQU1QIGJvZHkgZmllbGQgY29kZWMgKGZvcm1lcmx5IGZ1bmN0aW9ucy9tZXNzYWdlQm9keUNvZGVjKSAtLS1cbmNvbnN0IEJPRFlfRklFTERfVFlQRVMgPSBPYmplY3QuZnJlZXplKFtcbiAgJ3U4JywgJ3UxNicsICd1MzInLCAndTY0JywgJ2J5dGVzMzInLCAnYnl0ZXMnLCAnc3RyaW5nJywgJ21lc3NhZ2UnXG5dKTtcbi8qKiBAcHJpdmF0ZSBAdHlwZSB7TWFwPG51bWJlcnxzdHJpbmcsIEFycmF5PHsgbmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcgfT4+fSAqL1xuY29uc3QgQk9EWV9TQ0hFTUFfQllfS0VZID0gbmV3IE1hcCgpO1xuXG5mdW5jdGlvbiByZWdpc3RlckJvZHlTY2hlbWEgKG9wY29kZU9yTmFtZSwgc2NoZW1hKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdzY2hlbWEgbXVzdCBiZSBhbiBhcnJheScpO1xuICBmb3IgKGNvbnN0IGYgb2Ygc2NoZW1hKSB7XG4gICAgaWYgKCFmIHx8IHR5cGVvZiBmLm5hbWUgIT09ICdzdHJpbmcnIHx8ICFCT0RZX0ZJRUxEX1RZUEVTLmluY2x1ZGVzKGYudHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgZmllbGQ6ICR7SlNPTi5zdHJpbmdpZnkoZil9YCk7XG4gICAgfVxuICB9XG4gIEJPRFlfU0NIRU1BX0JZX0tFWS5zZXQob3Bjb2RlT3JOYW1lLCBzY2hlbWEuc2xpY2UoKSk7XG59XG5cbmZ1bmN0aW9uIGdldEJvZHlTY2hlbWEgKG9wY29kZU9yTmFtZSkge1xuICBpZiAob3Bjb2RlT3JOYW1lID09IG51bGwpIHJldHVybiBudWxsO1xuICBpZiAoQk9EWV9TQ0hFTUFfQllfS0VZLmhhcyhvcGNvZGVPck5hbWUpKSByZXR1cm4gQk9EWV9TQ0hFTUFfQllfS0VZLmdldChvcGNvZGVPck5hbWUpO1xuICBpZiAodHlwZW9mIG9wY29kZU9yTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCB1cHBlciA9IG9wY29kZU9yTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmIChCT0RZX1NDSEVNQV9CWV9LRVkuaGFzKHVwcGVyKSkgcmV0dXJuIEJPRFlfU0NIRU1BX0JZX0tFWS5nZXQodXBwZXIpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBfd3JpdGVVMzIgKGJ1Ziwgb2Zmc2V0LCB2YWx1ZSkge1xuICBidWYud3JpdGVVSW50MzJCRSh2YWx1ZSA+Pj4gMCwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gX3JlYWRVMzIgKGJ1Ziwgb2Zmc2V0KSB7XG4gIHJldHVybiBidWYucmVhZFVJbnQzMkJFKG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIGVuY29kZUJvZHkgKHNjaGVtYSwgZmllbGRzID0ge30pIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NjaGVtYSByZXF1aXJlZCcpO1xuICBjb25zdCBjaHVua3MgPSBbXTtcbiAgbGV0IHRvdGFsID0gMDtcbiAgZm9yIChjb25zdCBkZWYgb2Ygc2NoZW1hKSB7XG4gICAgY29uc3QgdmFsdWUgPSBmaWVsZHNbZGVmLm5hbWVdO1xuICAgIGxldCBwYXJ0O1xuICAgIHN3aXRjaCAoZGVmLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3U4Jzoge1xuICAgICAgICBwYXJ0ID0gQnVmZmVyLmFsbG9jKDEpO1xuICAgICAgICBwYXJ0LndyaXRlVUludDgoTnVtYmVyKHZhbHVlKSB8fCAwLCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd1MTYnOiB7XG4gICAgICAgIHBhcnQgPSBCdWZmZXIuYWxsb2MoMik7XG4gICAgICAgIHBhcnQud3JpdGVVSW50MTZCRShOdW1iZXIodmFsdWUpIHx8IDAsIDApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3UzMic6IHtcbiAgICAgICAgcGFydCA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICAgICAgX3dyaXRlVTMyKHBhcnQsIDAsIE51bWJlcih2YWx1ZSkgfHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAndTY0Jzoge1xuICAgICAgICBwYXJ0ID0gQnVmZmVyLmFsbG9jKDgpO1xuICAgICAgICBjb25zdCBuID0gdHlwZW9mIHZhbHVlID09PSAnYmlnaW50JyA/IHZhbHVlIDogQmlnSW50KE51bWJlcih2YWx1ZSkgfHwgMCk7XG4gICAgICAgIHBhcnQud3JpdGVCaWdVSW50NjRCRShuLCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdieXRlczMyJzoge1xuICAgICAgICBwYXJ0ID0gQnVmZmVyLmFsbG9jKDMyKTtcbiAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZS5jb3B5KHBhcnQsIDAsIDAsIE1hdGgubWluKDMyLCB2YWx1ZS5sZW5ndGgpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIC9eWzAtOWEtZkEtRl0qJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICBCdWZmZXIuZnJvbSh2YWx1ZS5wYWRTdGFydCg2NCwgJzAnKS5zbGljZSgwLCA2NCksICdoZXgnKS5jb3B5KHBhcnQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnYnl0ZXMnOlxuICAgICAgY2FzZSAnbWVzc2FnZSc6IHtcbiAgICAgICAgY29uc3QgcmF3ID0gQnVmZmVyLmlzQnVmZmVyKHZhbHVlKVxuICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICA6ICh2YWx1ZSA9PSBudWxsID8gQnVmZmVyLmFsbG9jKDApIDogQnVmZmVyLmZyb20oU3RyaW5nKHZhbHVlKSwgJ3V0ZjgnKSk7XG4gICAgICAgIHBhcnQgPSBCdWZmZXIuYWxsb2MoNCArIHJhdy5sZW5ndGgpO1xuICAgICAgICBfd3JpdGVVMzIocGFydCwgMCwgcmF3Lmxlbmd0aCk7XG4gICAgICAgIHJhdy5jb3B5KHBhcnQsIDQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3N0cmluZyc6IHtcbiAgICAgICAgY29uc3QgcmF3ID0gQnVmZmVyLmZyb20odmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKSwgJ3V0ZjgnKTtcbiAgICAgICAgcGFydCA9IEJ1ZmZlci5hbGxvYyg0ICsgcmF3Lmxlbmd0aCk7XG4gICAgICAgIF93cml0ZVUzMihwYXJ0LCAwLCByYXcubGVuZ3RoKTtcbiAgICAgICAgcmF3LmNvcHkocGFydCwgNCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgZmllbGQgdHlwZTogJHtkZWYudHlwZX1gKTtcbiAgICB9XG4gICAgdG90YWwgKz0gcGFydC5sZW5ndGg7XG4gICAgaWYgKHRvdGFsID4gTUFYX01FU1NBR0VfU0laRSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYG1lc3NhZ2UgYm9keSBleGNlZWRzIE1BWF9NRVNTQUdFX1NJWkUgKCR7TUFYX01FU1NBR0VfU0laRX0pYCk7XG4gICAgfVxuICAgIGNodW5rcy5wdXNoKHBhcnQpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcywgdG90YWwpO1xufVxuXG4vKipcbiAqIERlZmF1bHQgZm9yIGFuIG9wdGlvbmFsIGZpZWxkIHdoZW4gdGhlIHdpcmUgYm9keSBlbmRzIGJlZm9yZSB0aGF0IGZpZWxkLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7eyB0eXBlOiBzdHJpbmcgfX0gZGVmXG4gKi9cbmZ1bmN0aW9uIF9vcHRpb25hbEZpZWxkRGVmYXVsdCAoZGVmKSB7XG4gIHN3aXRjaCAoZGVmLnR5cGUpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuICcnO1xuICAgIGNhc2UgJ2J5dGVzJzpcbiAgICBjYXNlICdtZXNzYWdlJzpcbiAgICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG4gICAgY2FzZSAnYnl0ZXMzMic6XG4gICAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDMyKTtcbiAgICBjYXNlICd1OCc6XG4gICAgY2FzZSAndTE2JzpcbiAgICBjYXNlICd1MzInOlxuICAgICAgcmV0dXJuIDA7XG4gICAgY2FzZSAndTY0JzpcbiAgICAgIHJldHVybiAwbjtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgZmllbGQgdHlwZTogJHtkZWYudHlwZX1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWNvZGVCb2R5IChzY2hlbWEsIGJ1ZmZlcikge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignc2NoZW1hIHJlcXVpcmVkJyk7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpID8gYnVmZmVyIDogQnVmZmVyLmZyb20oYnVmZmVyIHx8IFtdKTtcbiAgY29uc3Qgb3V0ID0ge307XG4gIGxldCBvZmZzZXQgPSAwO1xuICBmb3IgKGNvbnN0IGRlZiBvZiBzY2hlbWEpIHtcbiAgICBpZiAoZGVmLm9wdGlvbmFsICYmIG9mZnNldCA+PSBidWYubGVuZ3RoKSB7XG4gICAgICBvdXRbZGVmLm5hbWVdID0gX29wdGlvbmFsRmllbGREZWZhdWx0KGRlZik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG9mZnNldCA+IGJ1Zi5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGB0cnVuY2F0ZWQgYm9keSB3aGlsZSByZWFkaW5nIGZpZWxkICR7ZGVmLm5hbWV9YCk7XG4gICAgfVxuICAgIHN3aXRjaCAoZGVmLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3U4Jzoge1xuICAgICAgICBpZiAob2Zmc2V0ICsgMSA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKGB0cnVuY2F0ZWQgYm9keSBhdCAke2RlZi5uYW1lfWApO1xuICAgICAgICBvdXRbZGVmLm5hbWVdID0gYnVmLnJlYWRVSW50OChvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd1MTYnOiB7XG4gICAgICAgIGlmIChvZmZzZXQgKyAyID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYHRydW5jYXRlZCBib2R5IGF0ICR7ZGVmLm5hbWV9YCk7XG4gICAgICAgIG91dFtkZWYubmFtZV0gPSBidWYucmVhZFVJbnQxNkJFKG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3UzMic6IHtcbiAgICAgICAgaWYgKG9mZnNldCArIDQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgdHJ1bmNhdGVkIGJvZHkgYXQgJHtkZWYubmFtZX1gKTtcbiAgICAgICAgb3V0W2RlZi5uYW1lXSA9IF9yZWFkVTMyKGJ1Ziwgb2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAndTY0Jzoge1xuICAgICAgICBpZiAob2Zmc2V0ICsgOCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKGB0cnVuY2F0ZWQgYm9keSBhdCAke2RlZi5uYW1lfWApO1xuICAgICAgICBvdXRbZGVmLm5hbWVdID0gYnVmLnJlYWRCaWdVSW50NjRCRShvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gODtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdieXRlczMyJzoge1xuICAgICAgICBpZiAob2Zmc2V0ICsgMzIgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgdHJ1bmNhdGVkIGJvZHkgYXQgJHtkZWYubmFtZX1gKTtcbiAgICAgICAgb3V0W2RlZi5uYW1lXSA9IEJ1ZmZlci5mcm9tKGJ1Zi5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIDMyKSk7XG4gICAgICAgIG9mZnNldCArPSAzMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdieXRlcyc6XG4gICAgICBjYXNlICdtZXNzYWdlJzoge1xuICAgICAgICBpZiAob2Zmc2V0ICsgNCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKGB0cnVuY2F0ZWQgYm9keSBhdCAke2RlZi5uYW1lfWApO1xuICAgICAgICBjb25zdCBsZW4gPSBfcmVhZFUzMihidWYsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICBpZiAob2Zmc2V0ICsgbGVuID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYHRydW5jYXRlZCBib2R5IGF0ICR7ZGVmLm5hbWV9YCk7XG4gICAgICAgIG91dFtkZWYubmFtZV0gPSBCdWZmZXIuZnJvbShidWYuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW4pKTtcbiAgICAgICAgb2Zmc2V0ICs9IGxlbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdzdHJpbmcnOiB7XG4gICAgICAgIGlmIChvZmZzZXQgKyA0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYHRydW5jYXRlZCBib2R5IGF0ICR7ZGVmLm5hbWV9YCk7XG4gICAgICAgIGNvbnN0IGxlbiA9IF9yZWFkVTMyKGJ1Ziwgb2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgIGlmIChvZmZzZXQgKyBsZW4gPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgdHJ1bmNhdGVkIGJvZHkgYXQgJHtkZWYubmFtZX1gKTtcbiAgICAgICAgb3V0W2RlZi5uYW1lXSA9IGJ1Zi5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbikudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICAgICAgb2Zmc2V0ICs9IGxlbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCBmaWVsZCB0eXBlOiAke2RlZi50eXBlfWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5jb25zdCBTQ0hFTUFfUDJQX1BJTkcgPSBPYmplY3QuZnJlZXplKFt7IG5hbWU6ICdub25jZScsIHR5cGU6ICdzdHJpbmcnIH1dKTtcbmNvbnN0IFNDSEVNQV9QMlBfQ0hBVCA9IG51bGw7XG5jb25zdCBTQ0hFTUFfUFJPR1JBTV9SVU4gPSBPYmplY3QuZnJlZXplKFtcbiAgeyBuYW1lOiAncHJvZ3JhbUhhc2gnLCB0eXBlOiAnYnl0ZXMzMicgfSxcbiAgeyBuYW1lOiAncnVuQ29tbWl0bWVudCcsIHR5cGU6ICdieXRlczMyJyB9LFxuICB7IG5hbWU6ICdyZXN1bHRIaW50JywgdHlwZTogJ3N0cmluZycgfVxuXSk7XG4vKiogQHByaXZhdGUgRGlyZWN0ZWQgb25pb24gaG9wIOKAlCBzZWUge0BsaW5rIG1vZHVsZTpAZmFicmljL2NvcmUvZnVuY3Rpb25zL2ZhYnJpY09uaW9ufS4gKi9cbmNvbnN0IFNDSEVNQV9QMlBfRk9SV0FSRCA9IE9iamVjdC5mcmVlemUoW1xuICB7IG5hbWU6ICduZXh0UGVlcicsIHR5cGU6ICdieXRlczMyJyB9LFxuICB7IG5hbWU6ICd0dGwnLCB0eXBlOiAndTgnIH0sXG4gIHsgbmFtZTogJ2lubmVyJywgdHlwZTogJ21lc3NhZ2UnIH1cbl0pO1xuLyoqIEBwcml2YXRlIERpc2NvdmVyeSAvIHBlZXJpbmcgZmllbGQgbGF5b3V0cyAoUGhhc2UgQik7IEpTT04gYm9kaWVzIHJlbWFpbiBhY2NlcHRlZC4gKi9cbmNvbnN0IFNDSEVNQV9QMlBfUEVFUl9HT1NTSVAgPSBPYmplY3QuZnJlZXplKFtcbiAgeyBuYW1lOiAnaG9zdCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIHsgbmFtZTogJ3BvcnQnLCB0eXBlOiAndTMyJyB9LFxuICB7IG5hbWU6ICdnb3NzaXBIb3AnLCB0eXBlOiAndTgnIH0sXG4gIHsgbmFtZTogJ25vbmNlJywgdHlwZTogJ3N0cmluZycgfVxuXSk7XG5jb25zdCBTQ0hFTUFfUDJQX1BFRVJJTkdfT0ZGRVIgPSBPYmplY3QuZnJlZXplKFtcbiAgeyBuYW1lOiAndHJhbnNwb3J0JywgdHlwZTogJ3N0cmluZycgfSxcbiAgeyBuYW1lOiAnaG9zdCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIHsgbmFtZTogJ3BvcnQnLCB0eXBlOiAndTMyJyB9LFxuICB7IG5hbWU6ICdwZWVyaW5nSG9wJywgdHlwZTogJ3U4JyB9XG5dKTtcbmNvbnN0IFNDSEVNQV9QMlBfUEVFUl9BTk5PVU5DRSA9IE9iamVjdC5mcmVlemUoW1xuICB7IG5hbWU6ICdob3N0JywgdHlwZTogJ3N0cmluZycgfSxcbiAgeyBuYW1lOiAncG9ydCcsIHR5cGU6ICd1MzInIH1cbl0pO1xuXG4vKipcbiAqIFBhcnNlIGFuIGluYm91bmQgQU1QIGJvZHk6IHByZWZlciBKU09OIChsZWdhY3kpLCBlbHNlIHJlZ2lzdGVyZWQgZmllbGQgc2NoZW1hLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7TWVzc2FnZX0gbWVzc2FnZVxuICogQHJldHVybnMge3sgb2s6IHRydWUsIHZhbHVlOiBvYmplY3QsIGVuY29kaW5nOiAnanNvbid8J2ZpZWxkcycgfSB8IHsgb2s6IGZhbHNlLCBlcnJvcjogRXJyb3IgfX1cbiAqL1xuZnVuY3Rpb24gdHJ5UGFyc2VNZXNzYWdlQm9keSAobWVzc2FnZSkge1xuICBpZiAoIW1lc3NhZ2UpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBuZXcgVHlwZUVycm9yKCd0cnlQYXJzZU1lc3NhZ2VCb2R5OiBtZXNzYWdlIHJlcXVpcmVkJykgfTtcbiAgfVxuICBjb25zdCByYXdTdHIgPSB0eXBlb2YgbWVzc2FnZS5kYXRhID09PSAnc3RyaW5nJ1xuICAgID8gbWVzc2FnZS5kYXRhXG4gICAgOiAobWVzc2FnZS5kYXRhICE9IG51bGwgPyBTdHJpbmcobWVzc2FnZS5kYXRhKSA6ICcnKTtcbiAgY29uc3QgcHIgPSB0cnlQYXJzZVdpcmVKc29uKHJhd1N0cik7XG4gIGlmIChwci5vayAmJiBwci52YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgcHIudmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHByLnZhbHVlKSkge1xuICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogcHIudmFsdWUsIGVuY29kaW5nOiAnanNvbicgfTtcbiAgfVxuICBjb25zdCBzY2hlbWEgPSBnZXRCb2R5U2NoZW1hKG1lc3NhZ2UudHlwZSkgfHwgZ2V0Qm9keVNjaGVtYShtZXNzYWdlLndpcmVUeXBlKTtcbiAgY29uc3QgYm9keUJ1ZiA9IG1lc3NhZ2UucmF3ICYmIEJ1ZmZlci5pc0J1ZmZlcihtZXNzYWdlLnJhdy5kYXRhKVxuICAgID8gbWVzc2FnZS5yYXcuZGF0YVxuICAgIDogbnVsbDtcbiAgaWYgKHNjaGVtYSAmJiBib2R5QnVmICYmIGJvZHlCdWYubGVuZ3RoID4gMCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBkZWNvZGVCb2R5KHNjaGVtYSwgYm9keUJ1Zik7XG4gICAgICBpZiAoZmllbGRzICYmIHR5cGVvZiBmaWVsZHMgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGZpZWxkcykpIHtcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBmaWVsZHMsIGVuY29kaW5nOiAnZmllbGRzJyB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKFN0cmluZyhlcnIpKTtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGUgfTtcbiAgICB9XG4gIH1cbiAgaWYgKHByLm9rKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogbmV3IFR5cGVFcnJvcignbWVzc2FnZSBib2R5IG11c3QgYmUgYSBKU09OIG9iamVjdCBvciBmaWVsZCBsYXlvdXQnKSB9O1xuICB9XG4gIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IHByLmVycm9yIHx8IG5ldyBFcnJvcigndW5wYXJzZWQgbWVzc2FnZSBib2R5JykgfTtcbn1cblxuKGZ1bmN0aW9uIF9pbnN0YWxsQm9keVNjaGVtYURlZmF1bHRzICgpIHtcbiAgcmVnaXN0ZXJCb2R5U2NoZW1hKFAyUF9QSU5HLCBTQ0hFTUFfUDJQX1BJTkcpO1xuICByZWdpc3RlckJvZHlTY2hlbWEoJ1AyUF9QSU5HJywgU0NIRU1BX1AyUF9QSU5HKTtcbiAgcmVnaXN0ZXJCb2R5U2NoZW1hKCdQaW5nJywgU0NIRU1BX1AyUF9QSU5HKTtcbiAgcmVnaXN0ZXJCb2R5U2NoZW1hKFAyUF9QT05HLCBTQ0hFTUFfUDJQX1BJTkcpO1xuICByZWdpc3RlckJvZHlTY2hlbWEoJ1AyUF9QT05HJywgU0NIRU1BX1AyUF9QSU5HKTtcbiAgcmVnaXN0ZXJCb2R5U2NoZW1hKCdQb25nJywgU0NIRU1BX1AyUF9QSU5HKTtcbiAgcmVnaXN0ZXJCb2R5U2NoZW1hKCdGYWJyaWNQcm9ncmFtUnVuJywgU0NIRU1BX1BST0dSQU1fUlVOKTtcbiAgcmVnaXN0ZXJCb2R5U2NoZW1hKFAyUF9GT1JXQVJELCBTQ0hFTUFfUDJQX0ZPUldBUkQpO1xuICByZWdpc3RlckJvZHlTY2hlbWEoJ1AyUF9GT1JXQVJEJywgU0NIRU1BX1AyUF9GT1JXQVJEKTtcbiAgcmVnaXN0ZXJCb2R5U2NoZW1hKFAyUF9QRUVSX0dPU1NJUCwgU0NIRU1BX1AyUF9QRUVSX0dPU1NJUCk7XG4gIHJlZ2lzdGVyQm9keVNjaGVtYSgnUDJQX1BFRVJfR09TU0lQJywgU0NIRU1BX1AyUF9QRUVSX0dPU1NJUCk7XG4gIHJlZ2lzdGVyQm9keVNjaGVtYSgnUGVlckdvc3NpcCcsIFNDSEVNQV9QMlBfUEVFUl9HT1NTSVApO1xuICByZWdpc3RlckJvZHlTY2hlbWEoUDJQX1BFRVJJTkdfT0ZGRVIsIFNDSEVNQV9QMlBfUEVFUklOR19PRkZFUik7XG4gIHJlZ2lzdGVyQm9keVNjaGVtYSgnUDJQX1BFRVJJTkdfT0ZGRVInLCBTQ0hFTUFfUDJQX1BFRVJJTkdfT0ZGRVIpO1xuICByZWdpc3RlckJvZHlTY2hlbWEoJ1BlZXJpbmdPZmZlcicsIFNDSEVNQV9QMlBfUEVFUklOR19PRkZFUik7XG4gIHJlZ2lzdGVyQm9keVNjaGVtYShQMlBfUEVFUl9BTk5PVU5DRSwgU0NIRU1BX1AyUF9QRUVSX0FOTk9VTkNFKTtcbiAgcmVnaXN0ZXJCb2R5U2NoZW1hKCdQMlBfUEVFUl9BTk5PVU5DRScsIFNDSEVNQV9QMlBfUEVFUl9BTk5PVU5DRSk7XG4gIHJlZ2lzdGVyQm9keVNjaGVtYSgnUGVlckFubm91bmNlJywgU0NIRU1BX1AyUF9QRUVSX0FOTk9VTkNFKTtcbn0pKCk7XG5cbk1lc3NhZ2UuRklFTERfVFlQRVMgPSBCT0RZX0ZJRUxEX1RZUEVTO1xuTWVzc2FnZS5NQVhfTUVTU0FHRV9TSVpFID0gTUFYX01FU1NBR0VfU0laRTtcbk1lc3NhZ2UucmVnaXN0ZXJCb2R5U2NoZW1hID0gcmVnaXN0ZXJCb2R5U2NoZW1hO1xuTWVzc2FnZS5nZXRCb2R5U2NoZW1hID0gZ2V0Qm9keVNjaGVtYTtcbk1lc3NhZ2UuZW5jb2RlQm9keSA9IGVuY29kZUJvZHk7XG5NZXNzYWdlLmRlY29kZUJvZHkgPSBkZWNvZGVCb2R5O1xuTWVzc2FnZS50cnlQYXJzZU1lc3NhZ2VCb2R5ID0gdHJ5UGFyc2VNZXNzYWdlQm9keTtcbk1lc3NhZ2UuU0NIRU1BX1AyUF9QSU5HID0gU0NIRU1BX1AyUF9QSU5HO1xuTWVzc2FnZS5TQ0hFTUFfUDJQX0NIQVQgPSBTQ0hFTUFfUDJQX0NIQVQ7XG5NZXNzYWdlLlNDSEVNQV9QUk9HUkFNX1JVTiA9IFNDSEVNQV9QUk9HUkFNX1JVTjtcbk1lc3NhZ2UuU0NIRU1BX1AyUF9GT1JXQVJEID0gU0NIRU1BX1AyUF9GT1JXQVJEO1xuTWVzc2FnZS5TQ0hFTUFfUDJQX1BFRVJfR09TU0lQID0gU0NIRU1BX1AyUF9QRUVSX0dPU1NJUDtcbk1lc3NhZ2UuU0NIRU1BX1AyUF9QRUVSSU5HX09GRkVSID0gU0NIRU1BX1AyUF9QRUVSSU5HX09GRkVSO1xuTWVzc2FnZS5TQ0hFTUFfUDJQX1BFRVJfQU5OT1VOQ0UgPSBTQ0hFTUFfUDJQX1BFRVJfQU5OT1VOQ0U7XG5cbm1vZHVsZS5leHBvcnRzID0gTWVzc2FnZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/message.js\n\n}")},"./node_modules/@fabric/core/types/program.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * @fileoverview Multi-language Program — executable artifact for {@link Machine}, with optional\n * L1 Bitcoin redeem scaffolding for `bitcoin-script`.\n *\n * Languages: `fabric-opcodes` | `javascript` | `bitcoin-script` | `solidity` | `asm`\n * (solidity/asm compile stubs until Compiler frontends land).\n *\n * @see docs/PROGRAM.md\n */\n\nconst crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nconst Circuit = __webpack_require__(/*! ./circuit */ \"./node_modules/@fabric/core/types/circuit.js\");\nconst Script = __webpack_require__(/*! ./script */ \"./node_modules/@fabric/core/types/script.js\");\nconst Hash256 = __webpack_require__(/*! ./hash256 */ \"./node_modules/@fabric/core/types/hash256.js\");\nconst fabricCanonicalJson = __webpack_require__(/*! ../functions/fabricCanonicalJson */ \"./node_modules/@fabric/core/functions/fabricCanonicalJson.js\");\nconst { jsonSafe } = fabricCanonicalJson;\n\nconst LANGUAGES = Object.freeze([\n 'fabric-opcodes',\n 'javascript',\n 'bitcoin-script',\n 'solidity',\n 'asm',\n 'fabric-execution'\n]);\n\nclass Program extends Circuit {\n /**\n * @param {object} [settings]\n * @param {string} [settings.language]\n * @param {string|object} [settings.source]\n * @param {*} [settings.bytecode]\n * @param {string[]} [settings.steps]\n * @param {string} [settings.programId]\n */\n constructor (settings = {}) {\n super(settings);\n\n this.settings = Object.assign({\n language: 'fabric-opcodes',\n source: null,\n bytecode: null,\n steps: [],\n instructions: [],\n programId: null\n }, settings);\n\n this.circuit = new Circuit();\n this.script = new Script();\n this.state = {};\n\n if (Array.isArray(this.settings.instructions) && this.settings.instructions.length &&\n !(this.settings.steps && this.settings.steps.length)) {\n this.settings.steps = this.settings.instructions.slice();\n }\n\n return this;\n }\n\n /**\n * @param {Object} [opts]\n * @param {string} [opts.language]\n * @param {*} [opts.source]\n * @param {*} [opts.bytecode]\n * @param {Array.} [opts.steps]\n * @param {string} [opts.programId]\n * @returns {Program}\n */\n static from (opts = {}) {\n return new Program(opts);\n }\n\n get language () {\n return String(this.settings.language || 'fabric-opcodes');\n }\n\n get source () {\n return this.settings.source;\n }\n\n get bytecode () {\n return this.settings.bytecode;\n }\n\n get steps () {\n return Array.isArray(this.settings.steps) ? this.settings.steps : [];\n }\n\n get programId () {\n if (this.settings.programId) return String(this.settings.programId);\n return this.programHash.slice(0, 32);\n }\n\n get programHash () {\n return this.hash();\n }\n\n /**\n * Content-address of language + source/bytecode/steps.\n * @returns {string} 64-char hex\n */\n hash () {\n const body = fabricCanonicalJson({\n language: this.language,\n source: this.settings.source != null ? jsonSafe(this.settings.source) : null,\n bytecode: this.settings.bytecode != null ? jsonSafe(this.settings.bytecode) : null,\n steps: this.steps\n });\n return Hash256.compute(Buffer.from(body, 'utf8'));\n }\n\n toJSON () {\n return {\n language: this.language,\n source: this.settings.source,\n bytecode: this.settings.bytecode,\n steps: this.steps.slice(),\n programId: this.programId,\n programHash: this.programHash\n };\n }\n\n /**\n * Normalize language-specific form into `steps` / `bytecode`.\n * @returns {{ok: boolean, error: (string|undefined), program: (Program|undefined)}}\n */\n compile () {\n const lang = this.language;\n if (!LANGUAGES.includes(lang)) {\n return { ok: false, error: `unsupported language: ${lang}` };\n }\n\n if (lang === 'fabric-opcodes') {\n let steps = this.steps.slice();\n if (!steps.length && typeof this.settings.source === 'string') {\n steps = this.settings.source.split(/\\r?\\n/).map((l) => l.trim()).filter(Boolean);\n } else if (!steps.length && Array.isArray(this.settings.source)) {\n steps = this.settings.source.map(String);\n }\n this.settings.steps = steps;\n this.settings.bytecode = steps.slice();\n this.settings.instructions = steps.slice();\n return { ok: true, program: this };\n }\n\n if (lang === 'javascript') {\n let steps = this.steps.slice();\n if (!steps.length && typeof this.settings.source === 'string') {\n steps = this.settings.source.split(/\\r?\\n/).map((l) => l.trim()).filter(Boolean);\n } else if (!steps.length && this.settings.source && typeof this.settings.source === 'object') {\n steps = Object.keys(this.settings.source);\n }\n this.settings.steps = steps;\n this.settings.bytecode = steps.slice();\n return { ok: true, program: this };\n }\n\n if (lang === 'bitcoin-script') {\n try {\n const bitcoin = __webpack_require__(/*! bitcoinjs-lib */ \"./node_modules/bitcoinjs-lib/src/index.js\");\n let compiled = null;\n if (Buffer.isBuffer(this.settings.bytecode)) {\n compiled = this.settings.bytecode;\n } else if (typeof this.settings.bytecode === 'string' && /^[0-9a-fA-F]+$/.test(this.settings.bytecode)) {\n compiled = Buffer.from(this.settings.bytecode, 'hex');\n } else if (Array.isArray(this.settings.source)) {\n compiled = bitcoin.script.compile(this.settings.source);\n } else if (typeof this.settings.source === 'string') {\n const parts = this.settings.source.trim().split(/\\s+/).filter(Boolean);\n const chunks = parts.map((p) => {\n if (p.startsWith('OP_') && bitcoin.opcodes[p] != null) return bitcoin.opcodes[p];\n if (/^[0-9a-fA-F]+$/.test(p) && p.length % 2 === 0) return Buffer.from(p, 'hex');\n throw new Error(`unrecognized script token: ${p}`);\n });\n compiled = bitcoin.script.compile(chunks);\n } else {\n return { ok: false, error: 'bitcoin-script requires source asm string, opcode array, or bytecode hex' };\n }\n this.settings.bytecode = compiled;\n this.settings.steps = ['OP_CHECKREDEEM'];\n return { ok: true, program: this };\n } catch (err) {\n return {\n ok: false,\n error: err && err.message ? err.message : 'bitcoin-script compile failed'\n };\n }\n }\n\n if (lang === 'fabric-execution') {\n let src = this.settings.source;\n if ((!src || typeof src !== 'object') && Array.isArray(this.settings.steps) &&\n this.settings.steps.length && typeof this.settings.steps[0] === 'object') {\n src = { version: 1, steps: this.settings.steps };\n }\n if (!src || typeof src !== 'object' || Array.isArray(src)) {\n return { ok: false, error: 'fabric-execution requires source object with steps[]' };\n }\n if (!Array.isArray(src.steps)) {\n return { ok: false, error: 'fabric-execution source.steps must be an array' };\n }\n const safe = jsonSafe(src);\n this.settings.source = safe;\n this.settings.bytecode = safe;\n // Machine structured runner reads source.steps; script names stay empty.\n this.settings.steps = [];\n this.settings.instructions = [];\n return { ok: true, program: this };\n }\n\n if (lang === 'solidity' || lang === 'asm') {\n return {\n ok: false,\n error: `${lang} compile not implemented — use Compiler frontend when available`\n };\n }\n\n return { ok: false, error: `unsupported language: ${lang}` };\n }\n\n /**\n * L1 redeem script scaffold (bitcoin-script only).\n * @returns {{ok: boolean, error: (string|undefined), scriptHex: (string|undefined), asm: (string|undefined)}}\n */\n toRedeemScript () {\n if (this.language !== 'bitcoin-script') {\n return { ok: false, error: 'toRedeemScript requires language bitcoin-script' };\n }\n const compiled = this.compile();\n if (!compiled.ok) return { ok: false, error: compiled.error };\n const buf = Buffer.isBuffer(this.settings.bytecode)\n ? this.settings.bytecode\n : Buffer.from(String(this.settings.bytecode || ''), 'hex');\n let asm = null;\n try {\n const bitcoin = __webpack_require__(/*! bitcoinjs-lib */ \"./node_modules/bitcoinjs-lib/src/index.js\");\n asm = bitcoin.script.toASM(buf);\n } catch (_) {\n asm = null;\n }\n return {\n ok: true,\n scriptHex: buf.toString('hex'),\n asm\n };\n }\n\n /**\n * Stable digest binding program identity to a compute result (L1 / OP_RETURN / witness).\n * @param {*} result\n * @returns {string} 64-char hex\n */\n runCommitmentHex (result) {\n const body = fabricCanonicalJson({\n version: 1,\n kind: 'FabricProgramRun',\n programHash: this.programHash,\n result: jsonSafe(result == null ? null : result)\n });\n return crypto.createHash('sha256').update(Buffer.from(body, 'utf8')).digest('hex');\n }\n\n step () {\n return this;\n }\n\n async start () {\n return this;\n }\n}\n\nProgram.LANGUAGES = LANGUAGES;\n\nmodule.exports = Program;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL3Byb2dyYW0uanMiLCJtYXBwaW5ncyI6IjtBQUFhOztBQUViO0FBQ0EsbUVBQW1FLGNBQWM7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSxtQkFBTyxDQUFDLHlEQUFRO0FBQy9CLGdCQUFnQixtQkFBTyxDQUFDLCtEQUFXO0FBQ25DLGVBQWUsbUJBQU8sQ0FBQyw2REFBVTtBQUNqQyxnQkFBZ0IsbUJBQU8sQ0FBQywrREFBVztBQUNuQyw0QkFBNEIsbUJBQU8sQ0FBQyxzR0FBa0M7QUFDdEUsUUFBUSxXQUFXOztBQUVuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsZUFBZTtBQUM1QixhQUFhLEdBQUc7QUFDaEIsYUFBYSxVQUFVO0FBQ3ZCLGFBQWEsUUFBUTtBQUNyQjtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLFFBQVE7QUFDckIsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsR0FBRztBQUNoQixhQUFhLEdBQUc7QUFDaEIsYUFBYSxnQkFBZ0I7QUFDN0IsYUFBYSxRQUFRO0FBQ3JCLGVBQWU7QUFDZjtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCwyQkFBMkIsTUFBTTtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwyQ0FBMkMsS0FBSztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQU8sQ0FBQyxnRUFBZTtBQUMvQztBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVU7QUFDVixxQkFBcUIsTUFBTTtBQUMzQixVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLE1BQU07QUFDN0UsMERBQTBELEVBQUU7QUFDNUQsV0FBVztBQUNYO0FBQ0EsVUFBVTtBQUNWLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsTUFBTTtBQUN4QjtBQUNBOztBQUVBLGFBQWEsMkNBQTJDLEtBQUs7QUFDN0Q7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLCtCQUErQjtBQUMvQixnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0E7QUFDQSxzQkFBc0IsbUJBQU8sQ0FBQyxnRUFBZTtBQUM3QztBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLEdBQUc7QUFDaEIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLDhDQUE4QyxNQUFNO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS90eXBlcy9wcm9ncmFtLmpzPzFkMDAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgTXVsdGktbGFuZ3VhZ2UgUHJvZ3JhbSDigJQgZXhlY3V0YWJsZSBhcnRpZmFjdCBmb3Ige0BsaW5rIE1hY2hpbmV9LCB3aXRoIG9wdGlvbmFsXG4gKiBMMSBCaXRjb2luIHJlZGVlbSBzY2FmZm9sZGluZyBmb3IgYGJpdGNvaW4tc2NyaXB0YC5cbiAqXG4gKiBMYW5ndWFnZXM6IGBmYWJyaWMtb3Bjb2Rlc2AgfCBgamF2YXNjcmlwdGAgfCBgYml0Y29pbi1zY3JpcHRgIHwgYHNvbGlkaXR5YCB8IGBhc21gXG4gKiAoc29saWRpdHkvYXNtIGNvbXBpbGUgc3R1YnMgdW50aWwgQ29tcGlsZXIgZnJvbnRlbmRzIGxhbmQpLlxuICpcbiAqIEBzZWUgZG9jcy9QUk9HUkFNLm1kXG4gKi9cblxuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5jb25zdCBDaXJjdWl0ID0gcmVxdWlyZSgnLi9jaXJjdWl0Jyk7XG5jb25zdCBTY3JpcHQgPSByZXF1aXJlKCcuL3NjcmlwdCcpO1xuY29uc3QgSGFzaDI1NiA9IHJlcXVpcmUoJy4vaGFzaDI1NicpO1xuY29uc3QgZmFicmljQ2Fub25pY2FsSnNvbiA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNDYW5vbmljYWxKc29uJyk7XG5jb25zdCB7IGpzb25TYWZlIH0gPSBmYWJyaWNDYW5vbmljYWxKc29uO1xuXG5jb25zdCBMQU5HVUFHRVMgPSBPYmplY3QuZnJlZXplKFtcbiAgJ2ZhYnJpYy1vcGNvZGVzJyxcbiAgJ2phdmFzY3JpcHQnLFxuICAnYml0Y29pbi1zY3JpcHQnLFxuICAnc29saWRpdHknLFxuICAnYXNtJyxcbiAgJ2ZhYnJpYy1leGVjdXRpb24nXG5dKTtcblxuY2xhc3MgUHJvZ3JhbSBleHRlbmRzIENpcmN1aXQge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IFtzZXR0aW5nc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZXR0aW5ncy5sYW5ndWFnZV1cbiAgICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBbc2V0dGluZ3Muc291cmNlXVxuICAgKiBAcGFyYW0geyp9IFtzZXR0aW5ncy5ieXRlY29kZV1cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW3NldHRpbmdzLnN0ZXBzXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NldHRpbmdzLnByb2dyYW1JZF1cbiAgICovXG4gIGNvbnN0cnVjdG9yIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgc3VwZXIoc2V0dGluZ3MpO1xuXG4gICAgdGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgbGFuZ3VhZ2U6ICdmYWJyaWMtb3Bjb2RlcycsXG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBieXRlY29kZTogbnVsbCxcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICAgIGluc3RydWN0aW9uczogW10sXG4gICAgICBwcm9ncmFtSWQ6IG51bGxcbiAgICB9LCBzZXR0aW5ncyk7XG5cbiAgICB0aGlzLmNpcmN1aXQgPSBuZXcgQ2lyY3VpdCgpO1xuICAgIHRoaXMuc2NyaXB0ID0gbmV3IFNjcmlwdCgpO1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuc2V0dGluZ3MuaW5zdHJ1Y3Rpb25zKSAmJiB0aGlzLnNldHRpbmdzLmluc3RydWN0aW9ucy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnNldHRpbmdzLnN0ZXBzICYmIHRoaXMuc2V0dGluZ3Muc3RlcHMubGVuZ3RoKSkge1xuICAgICAgdGhpcy5zZXR0aW5ncy5zdGVwcyA9IHRoaXMuc2V0dGluZ3MuaW5zdHJ1Y3Rpb25zLnNsaWNlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubGFuZ3VhZ2VdXG4gICAqIEBwYXJhbSB7Kn0gW29wdHMuc291cmNlXVxuICAgKiBAcGFyYW0geyp9IFtvcHRzLmJ5dGVjb2RlXVxuICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBbb3B0cy5zdGVwc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLnByb2dyYW1JZF1cbiAgICogQHJldHVybnMge1Byb2dyYW19XG4gICAqL1xuICBzdGF0aWMgZnJvbSAob3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9ncmFtKG9wdHMpO1xuICB9XG5cbiAgZ2V0IGxhbmd1YWdlICgpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2UgfHwgJ2ZhYnJpYy1vcGNvZGVzJyk7XG4gIH1cblxuICBnZXQgc291cmNlICgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5zb3VyY2U7XG4gIH1cblxuICBnZXQgYnl0ZWNvZGUgKCkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmJ5dGVjb2RlO1xuICB9XG5cbiAgZ2V0IHN0ZXBzICgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnNldHRpbmdzLnN0ZXBzKSA/IHRoaXMuc2V0dGluZ3Muc3RlcHMgOiBbXTtcbiAgfVxuXG4gIGdldCBwcm9ncmFtSWQgKCkge1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnByb2dyYW1JZCkgcmV0dXJuIFN0cmluZyh0aGlzLnNldHRpbmdzLnByb2dyYW1JZCk7XG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbUhhc2guc2xpY2UoMCwgMzIpO1xuICB9XG5cbiAgZ2V0IHByb2dyYW1IYXNoICgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udGVudC1hZGRyZXNzIG9mIGxhbmd1YWdlICsgc291cmNlL2J5dGVjb2RlL3N0ZXBzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSA2NC1jaGFyIGhleFxuICAgKi9cbiAgaGFzaCAoKSB7XG4gICAgY29uc3QgYm9keSA9IGZhYnJpY0Nhbm9uaWNhbEpzb24oe1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ3VhZ2UsXG4gICAgICBzb3VyY2U6IHRoaXMuc2V0dGluZ3Muc291cmNlICE9IG51bGwgPyBqc29uU2FmZSh0aGlzLnNldHRpbmdzLnNvdXJjZSkgOiBudWxsLFxuICAgICAgYnl0ZWNvZGU6IHRoaXMuc2V0dGluZ3MuYnl0ZWNvZGUgIT0gbnVsbCA/IGpzb25TYWZlKHRoaXMuc2V0dGluZ3MuYnl0ZWNvZGUpIDogbnVsbCxcbiAgICAgIHN0ZXBzOiB0aGlzLnN0ZXBzXG4gICAgfSk7XG4gICAgcmV0dXJuIEhhc2gyNTYuY29tcHV0ZShCdWZmZXIuZnJvbShib2R5LCAndXRmOCcpKTtcbiAgfVxuXG4gIHRvSlNPTiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmd1YWdlLFxuICAgICAgc291cmNlOiB0aGlzLnNldHRpbmdzLnNvdXJjZSxcbiAgICAgIGJ5dGVjb2RlOiB0aGlzLnNldHRpbmdzLmJ5dGVjb2RlLFxuICAgICAgc3RlcHM6IHRoaXMuc3RlcHMuc2xpY2UoKSxcbiAgICAgIHByb2dyYW1JZDogdGhpcy5wcm9ncmFtSWQsXG4gICAgICBwcm9ncmFtSGFzaDogdGhpcy5wcm9ncmFtSGFzaFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIGxhbmd1YWdlLXNwZWNpZmljIGZvcm0gaW50byBgc3RlcHNgIC8gYGJ5dGVjb2RlYC5cbiAgICogQHJldHVybnMge3tvazogYm9vbGVhbiwgZXJyb3I6IChzdHJpbmd8dW5kZWZpbmVkKSwgcHJvZ3JhbTogKFByb2dyYW18dW5kZWZpbmVkKX19XG4gICAqL1xuICBjb21waWxlICgpIHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5sYW5ndWFnZTtcbiAgICBpZiAoIUxBTkdVQUdFUy5pbmNsdWRlcyhsYW5nKSkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogYHVuc3VwcG9ydGVkIGxhbmd1YWdlOiAke2xhbmd9YCB9O1xuICAgIH1cblxuICAgIGlmIChsYW5nID09PSAnZmFicmljLW9wY29kZXMnKSB7XG4gICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0ZXBzLnNsaWNlKCk7XG4gICAgICBpZiAoIXN0ZXBzLmxlbmd0aCAmJiB0eXBlb2YgdGhpcy5zZXR0aW5ncy5zb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0ZXBzID0gdGhpcy5zZXR0aW5ncy5zb3VyY2Uuc3BsaXQoL1xccj9cXG4vKS5tYXAoKGwpID0+IGwudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICB9IGVsc2UgaWYgKCFzdGVwcy5sZW5ndGggJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNldHRpbmdzLnNvdXJjZSkpIHtcbiAgICAgICAgc3RlcHMgPSB0aGlzLnNldHRpbmdzLnNvdXJjZS5tYXAoU3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0dGluZ3Muc3RlcHMgPSBzdGVwcztcbiAgICAgIHRoaXMuc2V0dGluZ3MuYnl0ZWNvZGUgPSBzdGVwcy5zbGljZSgpO1xuICAgICAgdGhpcy5zZXR0aW5ncy5pbnN0cnVjdGlvbnMgPSBzdGVwcy5zbGljZSgpO1xuICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHByb2dyYW06IHRoaXMgfTtcbiAgICB9XG5cbiAgICBpZiAobGFuZyA9PT0gJ2phdmFzY3JpcHQnKSB7XG4gICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0ZXBzLnNsaWNlKCk7XG4gICAgICBpZiAoIXN0ZXBzLmxlbmd0aCAmJiB0eXBlb2YgdGhpcy5zZXR0aW5ncy5zb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0ZXBzID0gdGhpcy5zZXR0aW5ncy5zb3VyY2Uuc3BsaXQoL1xccj9cXG4vKS5tYXAoKGwpID0+IGwudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICB9IGVsc2UgaWYgKCFzdGVwcy5sZW5ndGggJiYgdGhpcy5zZXR0aW5ncy5zb3VyY2UgJiYgdHlwZW9mIHRoaXMuc2V0dGluZ3Muc291cmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBzdGVwcyA9IE9iamVjdC5rZXlzKHRoaXMuc2V0dGluZ3Muc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0dGluZ3Muc3RlcHMgPSBzdGVwcztcbiAgICAgIHRoaXMuc2V0dGluZ3MuYnl0ZWNvZGUgPSBzdGVwcy5zbGljZSgpO1xuICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHByb2dyYW06IHRoaXMgfTtcbiAgICB9XG5cbiAgICBpZiAobGFuZyA9PT0gJ2JpdGNvaW4tc2NyaXB0Jykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYml0Y29pbiA9IHJlcXVpcmUoJ2JpdGNvaW5qcy1saWInKTtcbiAgICAgICAgbGV0IGNvbXBpbGVkID0gbnVsbDtcbiAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLnNldHRpbmdzLmJ5dGVjb2RlKSkge1xuICAgICAgICAgIGNvbXBpbGVkID0gdGhpcy5zZXR0aW5ncy5ieXRlY29kZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5ncy5ieXRlY29kZSA9PT0gJ3N0cmluZycgJiYgL15bMC05YS1mQS1GXSskLy50ZXN0KHRoaXMuc2V0dGluZ3MuYnl0ZWNvZGUpKSB7XG4gICAgICAgICAgY29tcGlsZWQgPSBCdWZmZXIuZnJvbSh0aGlzLnNldHRpbmdzLmJ5dGVjb2RlLCAnaGV4Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnNldHRpbmdzLnNvdXJjZSkpIHtcbiAgICAgICAgICBjb21waWxlZCA9IGJpdGNvaW4uc2NyaXB0LmNvbXBpbGUodGhpcy5zZXR0aW5ncy5zb3VyY2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzLnNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IHRoaXMuc2V0dGluZ3Muc291cmNlLnRyaW0oKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICBjb25zdCBjaHVua3MgPSBwYXJ0cy5tYXAoKHApID0+IHtcbiAgICAgICAgICAgIGlmIChwLnN0YXJ0c1dpdGgoJ09QXycpICYmIGJpdGNvaW4ub3Bjb2Rlc1twXSAhPSBudWxsKSByZXR1cm4gYml0Y29pbi5vcGNvZGVzW3BdO1xuICAgICAgICAgICAgaWYgKC9eWzAtOWEtZkEtRl0rJC8udGVzdChwKSAmJiBwLmxlbmd0aCAlIDIgPT09IDApIHJldHVybiBCdWZmZXIuZnJvbShwLCAnaGV4Jyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVucmVjb2duaXplZCBzY3JpcHQgdG9rZW46ICR7cH1gKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb21waWxlZCA9IGJpdGNvaW4uc2NyaXB0LmNvbXBpbGUoY2h1bmtzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnYml0Y29pbi1zY3JpcHQgcmVxdWlyZXMgc291cmNlIGFzbSBzdHJpbmcsIG9wY29kZSBhcnJheSwgb3IgYnl0ZWNvZGUgaGV4JyB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0dGluZ3MuYnl0ZWNvZGUgPSBjb21waWxlZDtcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGVwcyA9IFsnT1BfQ0hFQ0tSRURFRU0nXTtcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHByb2dyYW06IHRoaXMgfTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBlcnJvcjogZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiAnYml0Y29pbi1zY3JpcHQgY29tcGlsZSBmYWlsZWQnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxhbmcgPT09ICdmYWJyaWMtZXhlY3V0aW9uJykge1xuICAgICAgbGV0IHNyYyA9IHRoaXMuc2V0dGluZ3Muc291cmNlO1xuICAgICAgaWYgKCghc3JjIHx8IHR5cGVvZiBzcmMgIT09ICdvYmplY3QnKSAmJiBBcnJheS5pc0FycmF5KHRoaXMuc2V0dGluZ3Muc3RlcHMpICYmXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5zdGVwcy5sZW5ndGggJiYgdHlwZW9mIHRoaXMuc2V0dGluZ3Muc3RlcHNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHNyYyA9IHsgdmVyc2lvbjogMSwgc3RlcHM6IHRoaXMuc2V0dGluZ3Muc3RlcHMgfTtcbiAgICAgIH1cbiAgICAgIGlmICghc3JjIHx8IHR5cGVvZiBzcmMgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnZmFicmljLWV4ZWN1dGlvbiByZXF1aXJlcyBzb3VyY2Ugb2JqZWN0IHdpdGggc3RlcHNbXScgfTtcbiAgICAgIH1cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShzcmMuc3RlcHMpKSB7XG4gICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdmYWJyaWMtZXhlY3V0aW9uIHNvdXJjZS5zdGVwcyBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgICAgfVxuICAgICAgY29uc3Qgc2FmZSA9IGpzb25TYWZlKHNyYyk7XG4gICAgICB0aGlzLnNldHRpbmdzLnNvdXJjZSA9IHNhZmU7XG4gICAgICB0aGlzLnNldHRpbmdzLmJ5dGVjb2RlID0gc2FmZTtcbiAgICAgIC8vIE1hY2hpbmUgc3RydWN0dXJlZCBydW5uZXIgcmVhZHMgc291cmNlLnN0ZXBzOyBzY3JpcHQgbmFtZXMgc3RheSBlbXB0eS5cbiAgICAgIHRoaXMuc2V0dGluZ3Muc3RlcHMgPSBbXTtcbiAgICAgIHRoaXMuc2V0dGluZ3MuaW5zdHJ1Y3Rpb25zID0gW107XG4gICAgICByZXR1cm4geyBvazogdHJ1ZSwgcHJvZ3JhbTogdGhpcyB9O1xuICAgIH1cblxuICAgIGlmIChsYW5nID09PSAnc29saWRpdHknIHx8IGxhbmcgPT09ICdhc20nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvazogZmFsc2UsXG4gICAgICAgIGVycm9yOiBgJHtsYW5nfSBjb21waWxlIG5vdCBpbXBsZW1lbnRlZCDigJQgdXNlIENvbXBpbGVyIGZyb250ZW5kIHdoZW4gYXZhaWxhYmxlYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBgdW5zdXBwb3J0ZWQgbGFuZ3VhZ2U6ICR7bGFuZ31gIH07XG4gIH1cblxuICAvKipcbiAgICogTDEgcmVkZWVtIHNjcmlwdCBzY2FmZm9sZCAoYml0Y29pbi1zY3JpcHQgb25seSkuXG4gICAqIEByZXR1cm5zIHt7b2s6IGJvb2xlYW4sIGVycm9yOiAoc3RyaW5nfHVuZGVmaW5lZCksIHNjcmlwdEhleDogKHN0cmluZ3x1bmRlZmluZWQpLCBhc206IChzdHJpbmd8dW5kZWZpbmVkKX19XG4gICAqL1xuICB0b1JlZGVlbVNjcmlwdCAoKSB7XG4gICAgaWYgKHRoaXMubGFuZ3VhZ2UgIT09ICdiaXRjb2luLXNjcmlwdCcpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICd0b1JlZGVlbVNjcmlwdCByZXF1aXJlcyBsYW5ndWFnZSBiaXRjb2luLXNjcmlwdCcgfTtcbiAgICB9XG4gICAgY29uc3QgY29tcGlsZWQgPSB0aGlzLmNvbXBpbGUoKTtcbiAgICBpZiAoIWNvbXBpbGVkLm9rKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBjb21waWxlZC5lcnJvciB9O1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih0aGlzLnNldHRpbmdzLmJ5dGVjb2RlKVxuICAgICAgPyB0aGlzLnNldHRpbmdzLmJ5dGVjb2RlXG4gICAgICA6IEJ1ZmZlci5mcm9tKFN0cmluZyh0aGlzLnNldHRpbmdzLmJ5dGVjb2RlIHx8ICcnKSwgJ2hleCcpO1xuICAgIGxldCBhc20gPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiaXRjb2luID0gcmVxdWlyZSgnYml0Y29pbmpzLWxpYicpO1xuICAgICAgYXNtID0gYml0Y29pbi5zY3JpcHQudG9BU00oYnVmKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBhc20gPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgb2s6IHRydWUsXG4gICAgICBzY3JpcHRIZXg6IGJ1Zi50b1N0cmluZygnaGV4JyksXG4gICAgICBhc21cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YWJsZSBkaWdlc3QgYmluZGluZyBwcm9ncmFtIGlkZW50aXR5IHRvIGEgY29tcHV0ZSByZXN1bHQgKEwxIC8gT1BfUkVUVVJOIC8gd2l0bmVzcykuXG4gICAqIEBwYXJhbSB7Kn0gcmVzdWx0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IDY0LWNoYXIgaGV4XG4gICAqL1xuICBydW5Db21taXRtZW50SGV4IChyZXN1bHQpIHtcbiAgICBjb25zdCBib2R5ID0gZmFicmljQ2Fub25pY2FsSnNvbih7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAga2luZDogJ0ZhYnJpY1Byb2dyYW1SdW4nLFxuICAgICAgcHJvZ3JhbUhhc2g6IHRoaXMucHJvZ3JhbUhhc2gsXG4gICAgICByZXN1bHQ6IGpzb25TYWZlKHJlc3VsdCA9PSBudWxsID8gbnVsbCA6IHJlc3VsdClcbiAgICB9KTtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShCdWZmZXIuZnJvbShib2R5LCAndXRmOCcpKS5kaWdlc3QoJ2hleCcpO1xuICB9XG5cbiAgc3RlcCAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhc3luYyBzdGFydCAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuUHJvZ3JhbS5MQU5HVUFHRVMgPSBMQU5HVUFHRVM7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvZ3JhbTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/program.js\n\n}")},"./node_modules/@fabric/core/types/script.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nconst Stack = __webpack_require__(/*! ./stack */ \"./node_modules/@fabric/core/types/stack.js\");\n\n// addresses of known operators\nconst known = {\n 'OP_0': '0x5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9',\n 'OP_1': '0x6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b'\n};\n\nclass Script extends Stack {\n /**\n * Compose a {@link Script} for inclusion within a {@link Contract}.\n * @param {Mixed} config Configuration options for the script.\n * @return {Script} Instance of the {@link Script}, ready for use.\n */\n constructor (config) {\n super(config);\n this.stack = new Stack();\n this['@data'] = this.stack['@data'];\n return this;\n }\n\n compile () {\n return this.stack.map(x => {\n return known[x] || x;\n });\n }\n\n render () {\n return this.stack.join(' ');\n }\n}\n\nmodule.exports = Script;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL3NjcmlwdC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsMkRBQVM7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQixjQUFjLHdCQUF3QixlQUFlO0FBQ3JFLGNBQWMsT0FBTztBQUNyQixjQUFjLGVBQWUsaUJBQWlCLGFBQWE7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL3NjcmlwdC5qcz84N2I1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgU3RhY2sgPSByZXF1aXJlKCcuL3N0YWNrJyk7XG5cbi8vIGFkZHJlc3NlcyBvZiBrbm93biBvcGVyYXRvcnNcbmNvbnN0IGtub3duID0ge1xuICAnT1BfMCc6ICcweDVmZWNlYjY2ZmZjODZmMzhkOTUyNzg2YzZkNjk2Yzc5YzJkYmMyMzlkZDRlOTFiNDY3MjlkNzNhMjdmYjU3ZTknLFxuICAnT1BfMSc6ICcweDZiODZiMjczZmYzNGZjZTE5ZDZiODA0ZWZmNWEzZjU3NDdhZGE0ZWFhMjJmMWQ0OWMwMWU1MmRkYjc4NzViNGInXG59O1xuXG5jbGFzcyBTY3JpcHQgZXh0ZW5kcyBTdGFjayB7XG4gIC8qKlxuICAgKiBDb21wb3NlIGEge0BsaW5rIFNjcmlwdH0gZm9yIGluY2x1c2lvbiB3aXRoaW4gYSB7QGxpbmsgQ29udHJhY3R9LlxuICAgKiBAcGFyYW0gIHtNaXhlZH0gY29uZmlnIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHNjcmlwdC5cbiAgICogQHJldHVybiB7U2NyaXB0fSAgICAgICAgSW5zdGFuY2Ugb2YgdGhlIHtAbGluayBTY3JpcHR9LCByZWFkeSBmb3IgdXNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IgKGNvbmZpZykge1xuICAgIHN1cGVyKGNvbmZpZyk7XG4gICAgdGhpcy5zdGFjayA9IG5ldyBTdGFjaygpO1xuICAgIHRoaXNbJ0BkYXRhJ10gPSB0aGlzLnN0YWNrWydAZGF0YSddO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29tcGlsZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2subWFwKHggPT4ge1xuICAgICAgcmV0dXJuIGtub3duW3hdIHx8IHg7XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLmpvaW4oJyAnKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNjcmlwdDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/script.js\n\n}")},"./node_modules/@fabric/core/types/stack.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\nconst {\n MAX_MEMORY_ALLOC,\n MAX_FRAME_SIZE\n} = __webpack_require__(/*! ../constants */ \"./node_modules/@fabric/core/constants.js\");\n\nconst State = __webpack_require__(/*! ./state */ \"./node_modules/@fabric/core/types/state.js\");\nconst { MerkleTree } = __webpack_require__(/*! merkletreejs */ \"./node_modules/merkletreejs/dist/index.js\");\n\nclass Stack extends State {\n constructor (list = []) {\n super(list);\n\n this.limit = MAX_MEMORY_ALLOC;\n this.frame = Buffer.alloc(MAX_FRAME_SIZE);\n this.config = list || [];\n\n // Patch for new Collection inheritance\n this.settings = Object.assign({\n verbosity: 2\n }, list);\n\n this['@type'] = this.config['@type'];\n this['@entity'].frames = {};\n this['@entity'].states = {};\n this['@states'] = {};\n this['@data'] = [];\n\n if (list instanceof Array) {\n for (let i in list) {\n this.push(list[i]);\n }\n }\n\n this['@entity']['@type'] = this['@type'];\n this['@entity']['@data'] = this['@data'];\n this['@id'] = this.id;\n\n return this;\n }\n\n get size () {\n return this['@data'].length;\n }\n\n push (data) {\n let state = new State(data);\n\n this['@entity'].states[this.id] = this['@data'];\n this['@entity'].states[state.id] = state['@data'];\n this['@entity'].frames[this.id] = this['@data'];\n this['@entity'].frames[state.id] = state['@data'];\n\n // write the frame\n // NOTE: no garbage collection\n this.frame = Buffer.from(state.id);\n\n // push frame onto stack\n this['@data'].push(this.frame);\n this['@type'] = 'Stack';\n this['@size'] = this['@data'].length * MAX_FRAME_SIZE;\n\n this.commit();\n\n return this['@data'].length;\n }\n\n dedupe () {\n return new Stack([...new Set(this.asArray())]);\n }\n\n pop () {\n let element = this['@data'].pop();\n return element;\n }\n\n asArray () {\n return Array.from(this['@data']);\n }\n\n asMerkleTree () {\n return new MerkleTree(this.asArray(), this.sha256, {\n isBitcoinTree: true\n });\n }\n\n snapshot () {\n return this.id || { '@id': `${this.sha256(this.state['@data'])}` };\n }\n\n commit () {\n let stack = this;\n let changes = super.commit();\n\n if (changes.length) {\n let data = Object.assign({}, {\n parent: stack.tip,\n changes: changes\n });\n\n stack.state['@data'] = data;\n stack.history.push(stack.state.id);\n }\n\n // TODO: return Transaction\n return changes;\n }\n}\n\nmodule.exports = Stack;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL3N0YWNrLmpzIiwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSxFQUFFLEVBQUUsbUJBQU8sQ0FBQyw4REFBYzs7QUFFMUIsY0FBYyxtQkFBTyxDQUFDLDJEQUFTO0FBQy9CLFFBQVEsYUFBYSxFQUFFLG1CQUFPLENBQUMsK0RBQWM7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsTUFBTTs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLHdCQUF3QixVQUFVLGlDQUFpQztBQUNuRTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL3N0YWNrLmpzP2QzZmEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7XG4gIE1BWF9NRU1PUllfQUxMT0MsXG4gIE1BWF9GUkFNRV9TSVpFXG59ID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzJyk7XG5cbmNvbnN0IFN0YXRlID0gcmVxdWlyZSgnLi9zdGF0ZScpO1xuY29uc3QgeyBNZXJrbGVUcmVlIH0gPSByZXF1aXJlKCdtZXJrbGV0cmVlanMnKTtcblxuY2xhc3MgU3RhY2sgZXh0ZW5kcyBTdGF0ZSB7XG4gIGNvbnN0cnVjdG9yIChsaXN0ID0gW10pIHtcbiAgICBzdXBlcihsaXN0KTtcblxuICAgIHRoaXMubGltaXQgPSBNQVhfTUVNT1JZX0FMTE9DO1xuICAgIHRoaXMuZnJhbWUgPSBCdWZmZXIuYWxsb2MoTUFYX0ZSQU1FX1NJWkUpO1xuICAgIHRoaXMuY29uZmlnID0gbGlzdCB8fCBbXTtcblxuICAgIC8vIFBhdGNoIGZvciBuZXcgQ29sbGVjdGlvbiBpbmhlcml0YW5jZVxuICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIHZlcmJvc2l0eTogMlxuICAgIH0sIGxpc3QpO1xuXG4gICAgdGhpc1snQHR5cGUnXSA9IHRoaXMuY29uZmlnWydAdHlwZSddO1xuICAgIHRoaXNbJ0BlbnRpdHknXS5mcmFtZXMgPSB7fTtcbiAgICB0aGlzWydAZW50aXR5J10uc3RhdGVzID0ge307XG4gICAgdGhpc1snQHN0YXRlcyddID0ge307XG4gICAgdGhpc1snQGRhdGEnXSA9IFtdO1xuXG4gICAgaWYgKGxpc3QgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgZm9yIChsZXQgaSBpbiBsaXN0KSB7XG4gICAgICAgIHRoaXMucHVzaChsaXN0W2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWydAZW50aXR5J11bJ0B0eXBlJ10gPSB0aGlzWydAdHlwZSddO1xuICAgIHRoaXNbJ0BlbnRpdHknXVsnQGRhdGEnXSA9IHRoaXNbJ0BkYXRhJ107XG4gICAgdGhpc1snQGlkJ10gPSB0aGlzLmlkO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNbJ0BkYXRhJ10ubGVuZ3RoO1xuICB9XG5cbiAgcHVzaCAoZGF0YSkge1xuICAgIGxldCBzdGF0ZSA9IG5ldyBTdGF0ZShkYXRhKTtcblxuICAgIHRoaXNbJ0BlbnRpdHknXS5zdGF0ZXNbdGhpcy5pZF0gPSB0aGlzWydAZGF0YSddO1xuICAgIHRoaXNbJ0BlbnRpdHknXS5zdGF0ZXNbc3RhdGUuaWRdID0gc3RhdGVbJ0BkYXRhJ107XG4gICAgdGhpc1snQGVudGl0eSddLmZyYW1lc1t0aGlzLmlkXSA9IHRoaXNbJ0BkYXRhJ107XG4gICAgdGhpc1snQGVudGl0eSddLmZyYW1lc1tzdGF0ZS5pZF0gPSBzdGF0ZVsnQGRhdGEnXTtcblxuICAgIC8vIHdyaXRlIHRoZSBmcmFtZVxuICAgIC8vIE5PVEU6IG5vIGdhcmJhZ2UgY29sbGVjdGlvblxuICAgIHRoaXMuZnJhbWUgPSBCdWZmZXIuZnJvbShzdGF0ZS5pZCk7XG5cbiAgICAvLyBwdXNoIGZyYW1lIG9udG8gc3RhY2tcbiAgICB0aGlzWydAZGF0YSddLnB1c2godGhpcy5mcmFtZSk7XG4gICAgdGhpc1snQHR5cGUnXSA9ICdTdGFjayc7XG4gICAgdGhpc1snQHNpemUnXSA9IHRoaXNbJ0BkYXRhJ10ubGVuZ3RoICogTUFYX0ZSQU1FX1NJWkU7XG5cbiAgICB0aGlzLmNvbW1pdCgpO1xuXG4gICAgcmV0dXJuIHRoaXNbJ0BkYXRhJ10ubGVuZ3RoO1xuICB9XG5cbiAgZGVkdXBlICgpIHtcbiAgICByZXR1cm4gbmV3IFN0YWNrKFsuLi5uZXcgU2V0KHRoaXMuYXNBcnJheSgpKV0pO1xuICB9XG5cbiAgcG9wICgpIHtcbiAgICBsZXQgZWxlbWVudCA9IHRoaXNbJ0BkYXRhJ10ucG9wKCk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBhc0FycmF5ICgpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzWydAZGF0YSddKTtcbiAgfVxuXG4gIGFzTWVya2xlVHJlZSAoKSB7XG4gICAgcmV0dXJuIG5ldyBNZXJrbGVUcmVlKHRoaXMuYXNBcnJheSgpLCB0aGlzLnNoYTI1Niwge1xuICAgICAgaXNCaXRjb2luVHJlZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgc25hcHNob3QgKCkge1xuICAgIHJldHVybiB0aGlzLmlkIHx8IHsgJ0BpZCc6IGAke3RoaXMuc2hhMjU2KHRoaXMuc3RhdGVbJ0BkYXRhJ10pfWAgfTtcbiAgfVxuXG4gIGNvbW1pdCAoKSB7XG4gICAgbGV0IHN0YWNrID0gdGhpcztcbiAgICBsZXQgY2hhbmdlcyA9IHN1cGVyLmNvbW1pdCgpO1xuXG4gICAgaWYgKGNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIHtcbiAgICAgICAgcGFyZW50OiBzdGFjay50aXAsXG4gICAgICAgIGNoYW5nZXM6IGNoYW5nZXNcbiAgICAgIH0pO1xuXG4gICAgICBzdGFjay5zdGF0ZVsnQGRhdGEnXSA9IGRhdGE7XG4gICAgICBzdGFjay5oaXN0b3J5LnB1c2goc3RhY2suc3RhdGUuaWQpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJldHVybiBUcmFuc2FjdGlvblxuICAgIHJldHVybiBjaGFuZ2VzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/stack.js\n\n}")},"./node_modules/@fabric/core/types/state.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n// Constants\nconst {\n MAX_MESSAGE_SIZE\n} = __webpack_require__(/*! ../constants */ \"./node_modules/@fabric/core/constants.js\");\n\n// Dependencies\nconst crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nconst monitor = __webpack_require__(/*! fast-json-patch */ \"./node_modules/fast-json-patch/index.mjs\");\nconst pointer = __webpack_require__(/*! json-pointer */ \"./node_modules/json-pointer/index.js\");\n\n// Fabric Types\nconst Actor = __webpack_require__(/*! ./actor */ \"./node_modules/@fabric/core/types/actor.js\");\n\n// Local Services\nconst json = __webpack_require__(/*! ../functions/json */ \"./node_modules/@fabric/core/functions/json.js\");\nconst { tryParsePersistedJson, parsePersistedJson } = __webpack_require__(/*! ../functions/wireJson */ \"./node_modules/@fabric/core/functions/wireJson.js\");\n\n/**\n * @classdesc Named snapshot of application data extending {@link Actor} — @type,\n * @data, @id, JSON Patch\n * flows. Absorbs former Scribe behavior: verbose / verbosity, now,\n * trust, start/stop, and structured log / error /\n * warn / debug (console + events). {@link Channel}, {@link Document}, {@link Ledger},\n * {@link Router}, and {@link Instruction} extend State directly. {@link Vector} is an {@link EventEmitter} only.\n * Sibling concept to {@link Entity}.\n * @class State\n * @extends Actor\n * @access protected\n * @property {Number} size Size of state in bytes.\n * @property {Buffer} @buffer Byte-for-byte memory representation of state.\n * @property {String} @type Named type.\n * @property {Mixed} @data Local instance of the state.\n * @property {String} @id Unique identifier for this data.\n */\nclass State extends Actor {\n /**\n * Creates a snapshot of some information.\n * @param {Mixed} data Input data.\n * @return {State} Resulting state.\n */\n constructor (data = {}) {\n super(data);\n\n this['@input'] = data || null;\n this['@data'] = data || {};\n this['@meta'] = {};\n this['@encoding'] = 'json';\n\n // Literal Entity Structure\n this['@entity'] = {\n '@type': 'State',\n '@data': data\n };\n\n // TODO: test and document memory alignment\n // this['@buffer'] = Buffer.alloc(Constants.MAX_MESSAGE_SIZE);\n this['@allocation'] = Buffer.alloc(MAX_MESSAGE_SIZE);\n this['@buffer'] = Buffer.from(this.serialize(this['@entity']['@data']));\n\n // if not destined to be an object...\n if (typeof this['@data'] === 'string') {\n this['@entity']['@type'] = 'String';\n this['@entity']['@data'] = this['@data'].split('').map(x => x.charCodeAt(0));\n } else if (this['@data'] instanceof Array) {\n this['@entity']['@type'] = 'Array';\n } else if (this['@data'] instanceof Buffer) {\n this['@entity']['@type'] = 'Buffer';\n } else if (\n this['@data'] &&\n this['@data']['@type'] &&\n this['@data']['@data']\n ) {\n switch (this['@data']['@type']) {\n default:\n this['@entity']['@type'] = this['@data']['@type'];\n this['@entity']['@data'] = this['@data']['@data'];\n break;\n }\n } else {\n this['@entity']['@type'] = 'Object';\n this['@entity']['@data'] = data;\n }\n\n // start at zero\n this._clock = 0;\n\n // set various #meta\n this['@type'] = this['@entity']['@type'];\n // this['@id'] = null;\n // this['@id'] = this.id;\n\n // set internal data\n this.services = { json };\n this.name = this['@entity'].name || this.id;\n\n if (this['@entity']['@data']) {\n try {\n this.observer = monitor.observe(this['@entity']['@data']);\n } catch (E) {\n console.error('Could not create observer:', E, this['@entity']['@data']);\n }\n }\n\n this.value = {};\n\n const cfg = (typeof data === 'object' && data !== null && !Buffer.isBuffer(data)) ? data : {};\n this.settings = Object.assign({\n verbose: true,\n verbosity: 2,\n path: './stores/state',\n tags: []\n }, this.settings, cfg);\n\n this.status = 'ready';\n\n // TODO: document hidden properties\n // Remove various undesired clutter from output\n Object.defineProperty(this, '@allocation', { enumerable: false });\n Object.defineProperty(this, '@buffer', { enumerable: false });\n Object.defineProperty(this, '@encoding', { enumerable: false });\n Object.defineProperty(this, 'key', { enumerable: false });\n Object.defineProperty(this, 'services', { enumerable: false });\n\n Object.defineProperty(this, 'size', {\n enumerable: true,\n get: function count () {\n return this['@buffer'].length;\n }\n });\n\n Object.defineProperty(this, 'domain', {\n enumerable: false\n });\n\n Object.defineProperty(this, '_events', {\n enumerable: false\n });\n\n Object.defineProperty(this, '_eventsCount', {\n enumerable: false\n });\n\n Object.defineProperty(this, '_maxListeners', {\n enumerable: false\n });\n\n return this;\n }\n\n static get json () {\n return json;\n }\n\n static get html () {\n return json;\n }\n\n static get pointer () {\n return pointer;\n }\n\n get path () {\n return `/entities/${this.id}`;\n }\n\n get state () {\n return this.value;\n // TODO: re-enable the below, map security considerations\n // return Object.assign({}, this.value);\n }\n\n set path (value) {\n return this.path;\n }\n\n set state (value) {\n this.value = value;\n }\n\n /**\n * Marshall an input into an instance of a {@link State}. States have\n * absolute authority over their own domain, so choose your States wisely.\n * @param {String} input Arbitrary input.\n * @return {State} Resulting instance of the {@link State}.\n */\n static fromJSON (input) {\n let result = null;\n\n if (typeof input === 'string') {\n const pr = tryParsePersistedJson(input);\n if (pr.ok) result = pr.value;\n else console.error('Failure in fromJSON:', pr.error);\n }\n\n return result;\n }\n\n static fromHex (input) {\n if (typeof input !== 'string') return null;\n return this.fromJSON(Buffer.from(input, 'hex').toString('utf8'));\n }\n\n static fromString (input) {\n if (typeof input !== 'string') return null;\n return this.fromJSON(input);\n }\n\n sha256 (value) {\n return crypto.createHash('sha256').update(value).digest('hex');\n }\n\n now () {\n return new Date().getTime();\n }\n\n _sign () {\n this.commit();\n }\n\n /**\n * @param {EventEmitter} source Event stream.\n * @returns {State} this\n */\n trust (source) {\n const self = this;\n source.on('message', async function handleTrustedMessage (_msg) {});\n source.on('transaction', async function handleTrustedTransaction (transaction) {\n self.log('[EVENT:TRANSACTION]', 'apply this transaction to local state:', transaction);\n self.log('[PROPOSAL]', 'apply this transaction to local state:', transaction);\n });\n return self;\n }\n\n /**\n * @param {State} other Peer {@link State} whose `settings.namespace` is appended to `settings.tags`.\n * @returns {Number} New length of `settings.tags`.\n */\n inherits (other) {\n const ns = other && other.settings && other.settings.namespace;\n if (ns) this.settings.tags.push(ns);\n return this.settings.tags.length;\n }\n\n log (...inputs) {\n const t = this.now();\n inputs.unshift(`[${this.constructor.name.toUpperCase()}]`);\n inputs.unshift(`[${t}]`);\n if (this.settings.verbosity >= 3) {\n console.log.apply(null, ['[STATE]'].concat(inputs));\n }\n return this.emit('info', ['[STATE]'].concat(inputs));\n }\n\n error (...inputs) {\n const t = this.now();\n inputs.unshift(`[${this.constructor.name.toUpperCase()}]`);\n inputs.unshift(`[${t}]`);\n if (this.settings.verbose) {\n console.error.apply(null, ['[STATE]'].concat(inputs));\n }\n return this.emit('error', ['[STATE]'].concat(inputs));\n }\n\n warn (...inputs) {\n const t = this.now();\n inputs.unshift(`[${this.constructor.name.toUpperCase()}]`);\n inputs.unshift(`[${t}]`);\n if (this.settings.verbose) {\n console.warn.apply(null, ['[STATE]'].concat(inputs));\n }\n return this.emit('warning', ['[STATE]'].concat(inputs));\n }\n\n debug (...inputs) {\n const t = this.now();\n inputs.unshift(`[${this.constructor.name.toUpperCase()}]`);\n inputs.unshift(`[${t}]`);\n if (this.settings.verbose) {\n console.debug.apply(null, ['[STATE]'].concat(inputs));\n }\n return this.emit('debug', ['[STATE]'].concat(inputs));\n }\n\n async open () {\n this.status = 'opened';\n return this;\n }\n\n async close () {\n this.status = 'closed';\n return this;\n }\n\n async start () {\n this.status = 'starting';\n this['@data'] = this.settings;\n await this.open();\n await this.commit();\n this.status = 'started';\n return this;\n }\n\n async stop () {\n this.status = 'stopping';\n await this.close();\n this.status = 'stopped';\n return this;\n }\n\n async _applyChanges (ops) {\n try {\n monitor.applyPatch(this['@data'], ops);\n\n await this.commit();\n } catch (E) {\n this.error('Error applying changes:', E);\n }\n\n return this;\n }\n\n fingerprint () {\n const map = {};\n map['@method'] = 'sha256';\n map['@input'] = this.serialize(this['@entity']['@data']);\n map['@buffer'] = crypto.createHash('sha256').update(map['@input'], 'utf8');\n map['@output'] = map['@buffer'].digest('hex');\n return map['@output'];\n }\n\n isRoot () {\n return this['@parent'] === this.id;\n }\n\n toBuffer () {\n if (this['@data'] instanceof Buffer) return this['@data'];\n if (this['@data']) return this.serialize();\n\n return Buffer.from(this['@data']['@data']);\n }\n\n /** Converts the State to an HTML document. */\n toHTML () {\n const state = this;\n const solution = state['@output'].toString('utf8');\n const confirmed = String(solution);\n const raw = `X-Claim-ID: ${this.id}\nX-Claim-Integrity: sha256\nX-Claim-Type: Response\nX-Claim-Result: ${state.id}\nBody:\n# STOP!\nHere is your opportunity to read the documentation: https://dev.fabric.pub\n\nDocument ID: ${this.id}\nDocument Type (local JSON): ${this.constructor.name}\nDocument Path: ${this.path}\nDocument Name: ${this.name}\nDocument Integrity: sha256:${this.id}\nDocument Data (local JSON, <${confirmed.length}> bytes: ${confirmed}\nDocument Source:\n\\`\\`\\`\n${confirmed}\n\\`\\`\\`\n\n## Source Code\n### Free as in _freedom_.\nLabs: https://github.com/FabricLabs\n\nTo edit this message, visit this URL: https://github.com/FabricLabs/fabric/edit/master/types/state.js\n\n## Onboarding\nWhen you're ready to continue, visit the following URL: https://dev.fabric.pub/WELCOME.html\n`;\n\n return raw;\n }\n\n /**\n * Unmarshall an existing state to an instance of a {@link Blob}.\n * @return {String} Serialized {@link Blob}.\n */\n toString () {\n return this.serialize();\n }\n\n overlay (data) {\n let state = new State(data);\n this['@parent'] = this['@id'];\n this['@data'] = Object.assign({}, this['@data'], state['@data']);\n this['@did'] = `did:fabric:${this.id}`;\n this['@id'] = this.id;\n return this;\n }\n\n pack (data) {\n if (!data) data = this['@data'];\n return json(data);\n }\n\n /**\n * Convert to {@link Buffer}.\n * @param {Mixed} [input] Input to serialize.\n * @return {Buffer} {@link Store}-able blob.\n */\n serialize (input = this.state, _encoding = 'json') {\n const state = {};\n let result = null;\n\n if (typeof input === 'string') {\n return Buffer.from(`${json(input)}`, 'utf8');\n } else if (input instanceof Array) {\n result = Buffer.from(`${JSON.stringify(input)}`, 'utf8');\n } else if (input instanceof Buffer) {\n result = input;\n } else if (input['@type'] && input['@data']) {\n return this.serialize(input['@data']);\n } else {\n switch (input.constructor.name) {\n case 'Function':\n result = Buffer.from(input.toString('utf8'));\n break;\n case 'Boolean':\n result = Buffer.from(JSON.stringify(input));\n break;\n case 'Buffer':\n result = Buffer.from(JSON.stringify(input.toString('utf8')));\n break;\n case 'Object':\n result = Buffer.from(JSON.stringify(input));\n break;\n default:\n result = input.toString('utf8');\n break;\n }\n\n // strip special fields\n // TODO: order?\n for (const name in input) {\n if (name.charAt(0) === '@') {\n continue;\n } else {\n state[name] = input[name];\n }\n }\n }\n\n return parsePersistedJson(json(result));\n }\n\n /**\n * Take a hex-encoded input and convert to a {@link State} object.\n * @param {String} input [description]\n * @return {State} [description]\n */\n deserialize (input) {\n let output = null;\n\n if (typeof input === 'string') {\n // Let's create a state object...\n try {\n let state = new State(input);\n // Assign our output to the state data\n output = state['@data'];\n } catch (E) {\n this.error('Could not parse string as Buffer:', E);\n }\n\n return output;\n } else {\n this.log('WARNING:', `input not a string`, input);\n }\n\n if (!output) return null;\n\n switch (output['@type']) {\n case 'String':\n output = output['@buffer'].toString(output['@encoding']);\n break;\n }\n\n return output;\n }\n\n flatten () {\n let map = {};\n\n for (let k in this['@data']) {\n map[k] = this.serialize(this['@data'][k]);\n }\n\n return map;\n }\n\n /**\n * Creates a new child {@link State}, with `@parent` set to\n * the current {@link State} by immutable identifier.\n * @returns {State}\n */\n fork () {\n let data = Object.assign({\n '@parent': this.id\n }, this['@data']);\n return new State(data);\n }\n\n /**\n * Retrieve a key from the {@link State}.\n * @param {Path} path Key to retrieve.\n * @returns {Mixed}\n */\n get (path = '') {\n // return pointer.get(this.state, path);\n let result = null;\n try {\n result = pointer.get(this['@entity']['@data'], path);\n } catch (exception) {\n console.error('[FABRIC:STATE]', 'Could not retrieve path:', path, pointer.get(this['@entity']['@data'], '/'), exception);\n }\n return result;\n }\n\n /**\n * Set a key in the {@link State} to a particular value.\n * @param {Path} path Key to retrieve.\n * @returns {Mixed}\n */\n set (path, value) {\n // console.log('setting:', path, value);\n pointer.set(this.value, path, value);\n pointer.set(this['@entity']['@data'], path, value);\n const result = pointer.set(this.value, path, value);\n this.commit();\n return result;\n }\n\n /**\n * Increment the vector clock, broadcast all changes as a transaction.\n */\n commit () {\n ++this._clock;\n\n this['@parent'] = this.id;\n this['@preimage'] = this.toString();\n this['@constructor'] = this.constructor;\n\n if (this.observer) {\n this['@changes'] = monitor.generate(this.observer);\n }\n\n this['@id'] = this.id;\n\n if (this['@changes'] && this['@changes'].length) {\n this.emit('changes', this['@changes']);\n this.emit('state', this['@state']);\n this.emit('message', {\n '@type': 'Transaction',\n '@data': {\n 'changes': this['@changes'],\n 'state': this['@changes']\n }\n });\n }\n\n return this;\n }\n\n /**\n * Compose a JSON string for network consumption.\n * @return {String} JSON-encoded {@link String}.\n */\n render () {\n this['@id'] = this.id;\n this['@encoding'] = 'json';\n this['@output'] = this.serialize(this.state, 'json');\n this['@commit'] = this.commit();\n\n return this['@output'].toString('utf8');\n }\n}\n\nmodule.exports = State;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL3N0YXRlLmpzIiwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSxFQUFFLEVBQUUsbUJBQU8sQ0FBQyw4REFBYzs7QUFFMUI7QUFDQSxlQUFlLG1CQUFPLENBQUMseURBQVE7QUFDL0IsZ0JBQWdCLG1CQUFPLENBQUMsaUVBQWlCO0FBQ3pDLGdCQUFnQixtQkFBTyxDQUFDLDBEQUFjOztBQUV0QztBQUNBLGNBQWMsbUJBQU8sQ0FBQywyREFBUzs7QUFFL0I7QUFDQSxhQUFhLG1CQUFPLENBQUMsd0VBQW1CO0FBQ3hDLFFBQVEsNENBQTRDLEVBQUUsbUJBQU8sQ0FBQyxnRkFBdUI7O0FBRXJGO0FBQ0EsNkVBQTZFLGFBQWE7QUFDMUY7QUFDQTtBQUNBO0FBQ0EsK0RBQStELGNBQWMsR0FBRyxlQUFlLEdBQUcsYUFBYTtBQUMvRyxJQUFJLGFBQWEsT0FBTyxtQkFBbUIscUNBQXFDLGNBQWMsT0FBTyxvQkFBb0I7QUFDekgsdUJBQXVCLGFBQWE7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCLGNBQWMsUUFBUTtBQUN0QixjQUFjLFFBQVE7QUFDdEIsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsUUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsT0FBTztBQUNyQixjQUFjLFlBQVk7QUFDMUI7QUFDQSx3QkFBd0I7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCLE1BQU07QUFDaEMsc0JBQXNCLE1BQU07O0FBRTVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTSxrQ0FBa0MsTUFBTTtBQUM5QztBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsYUFBYTtBQUNwQyxhQUFhLE1BQU07QUFDbkIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWMsUUFBUSxjQUFjLGFBQWE7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmYWJyaWMvY29yZS90eXBlcy9zdGF0ZS5qcz9mNmZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gQ29uc3RhbnRzXG5jb25zdCB7XG4gIE1BWF9NRVNTQUdFX1NJWkVcbn0gPSByZXF1aXJlKCcuLi9jb25zdGFudHMnKTtcblxuLy8gRGVwZW5kZW5jaWVzXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbmNvbnN0IG1vbml0b3IgPSByZXF1aXJlKCdmYXN0LWpzb24tcGF0Y2gnKTtcbmNvbnN0IHBvaW50ZXIgPSByZXF1aXJlKCdqc29uLXBvaW50ZXInKTtcblxuLy8gRmFicmljIFR5cGVzXG5jb25zdCBBY3RvciA9IHJlcXVpcmUoJy4vYWN0b3InKTtcblxuLy8gTG9jYWwgU2VydmljZXNcbmNvbnN0IGpzb24gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvanNvbicpO1xuY29uc3QgeyB0cnlQYXJzZVBlcnNpc3RlZEpzb24sIHBhcnNlUGVyc2lzdGVkSnNvbiB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3dpcmVKc29uJyk7XG5cbi8qKlxuICogQGNsYXNzZGVzYyA8c3Ryb25nPk5hbWVkIHNuYXBzaG90PC9zdHJvbmc+IG9mIGFwcGxpY2F0aW9uIGRhdGEgZXh0ZW5kaW5nIHtAbGluayBBY3Rvcn0g4oCUIDxjb2RlPkB0eXBlPC9jb2RlPixcbiAqIDxjb2RlPkBkYXRhPC9jb2RlPiwgPGNvZGU+QGlkPC9jb2RlPiwgSlNPTiBQYXRjaFxuICogZmxvd3MuIEFic29yYnMgZm9ybWVyIDxzdHJvbmc+U2NyaWJlPC9zdHJvbmc+IGJlaGF2aW9yOiA8Y29kZT52ZXJib3NlPC9jb2RlPiAvIDxjb2RlPnZlcmJvc2l0eTwvY29kZT4sIDxjb2RlPm5vdzwvY29kZT4sXG4gKiA8Y29kZT50cnVzdDwvY29kZT4sIDxjb2RlPnN0YXJ0PC9jb2RlPi88Y29kZT5zdG9wPC9jb2RlPiwgYW5kIHN0cnVjdHVyZWQgPGNvZGU+bG9nPC9jb2RlPiAvIDxjb2RlPmVycm9yPC9jb2RlPiAvXG4gKiA8Y29kZT53YXJuPC9jb2RlPiAvIDxjb2RlPmRlYnVnPC9jb2RlPiAoY29uc29sZSArIGV2ZW50cykuIHtAbGluayBDaGFubmVsfSwge0BsaW5rIERvY3VtZW50fSwge0BsaW5rIExlZGdlcn0sXG4gKiB7QGxpbmsgUm91dGVyfSwgYW5kIHtAbGluayBJbnN0cnVjdGlvbn0gZXh0ZW5kIDxjb2RlPlN0YXRlPC9jb2RlPiBkaXJlY3RseS4ge0BsaW5rIFZlY3Rvcn0gaXMgYW4ge0BsaW5rIEV2ZW50RW1pdHRlcn0gb25seS5cbiAqIFNpYmxpbmcgY29uY2VwdCB0byB7QGxpbmsgRW50aXR5fS5cbiAqIEBjbGFzcyBTdGF0ZVxuICogQGV4dGVuZHMgQWN0b3JcbiAqIEBhY2Nlc3MgcHJvdGVjdGVkXG4gKiBAcHJvcGVydHkge051bWJlcn0gc2l6ZSBTaXplIG9mIHN0YXRlIGluIGJ5dGVzLlxuICogQHByb3BlcnR5IHtCdWZmZXJ9IEBidWZmZXIgQnl0ZS1mb3ItYnl0ZSBtZW1vcnkgcmVwcmVzZW50YXRpb24gb2Ygc3RhdGUuXG4gKiBAcHJvcGVydHkge1N0cmluZ30gQHR5cGUgTmFtZWQgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7TWl4ZWR9IEBkYXRhIExvY2FsIGluc3RhbmNlIG9mIHRoZSBzdGF0ZS5cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBAaWQgVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgZGF0YS5cbiAqL1xuY2xhc3MgU3RhdGUgZXh0ZW5kcyBBY3RvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc25hcHNob3Qgb2Ygc29tZSBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtICB7TWl4ZWR9IGRhdGEgSW5wdXQgZGF0YS5cbiAgICogQHJldHVybiB7U3RhdGV9ICAgICAgUmVzdWx0aW5nIHN0YXRlLlxuICAgKi9cbiAgY29uc3RydWN0b3IgKGRhdGEgPSB7fSkge1xuICAgIHN1cGVyKGRhdGEpO1xuXG4gICAgdGhpc1snQGlucHV0J10gPSBkYXRhIHx8IG51bGw7XG4gICAgdGhpc1snQGRhdGEnXSA9IGRhdGEgfHwge307XG4gICAgdGhpc1snQG1ldGEnXSA9IHt9O1xuICAgIHRoaXNbJ0BlbmNvZGluZyddID0gJ2pzb24nO1xuXG4gICAgLy8gTGl0ZXJhbCBFbnRpdHkgU3RydWN0dXJlXG4gICAgdGhpc1snQGVudGl0eSddID0ge1xuICAgICAgJ0B0eXBlJzogJ1N0YXRlJyxcbiAgICAgICdAZGF0YSc6IGRhdGFcbiAgICB9O1xuXG4gICAgLy8gVE9ETzogdGVzdCBhbmQgZG9jdW1lbnQgbWVtb3J5IGFsaWdubWVudFxuICAgIC8vIHRoaXNbJ0BidWZmZXInXSA9IEJ1ZmZlci5hbGxvYyhDb25zdGFudHMuTUFYX01FU1NBR0VfU0laRSk7XG4gICAgdGhpc1snQGFsbG9jYXRpb24nXSA9IEJ1ZmZlci5hbGxvYyhNQVhfTUVTU0FHRV9TSVpFKTtcbiAgICB0aGlzWydAYnVmZmVyJ10gPSBCdWZmZXIuZnJvbSh0aGlzLnNlcmlhbGl6ZSh0aGlzWydAZW50aXR5J11bJ0BkYXRhJ10pKTtcblxuICAgIC8vIGlmIG5vdCBkZXN0aW5lZCB0byBiZSBhbiBvYmplY3QuLi5cbiAgICBpZiAodHlwZW9mIHRoaXNbJ0BkYXRhJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzWydAZW50aXR5J11bJ0B0eXBlJ10gPSAnU3RyaW5nJztcbiAgICAgIHRoaXNbJ0BlbnRpdHknXVsnQGRhdGEnXSA9IHRoaXNbJ0BkYXRhJ10uc3BsaXQoJycpLm1hcCh4ID0+IHguY2hhckNvZGVBdCgwKSk7XG4gICAgfSBlbHNlIGlmICh0aGlzWydAZGF0YSddIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHRoaXNbJ0BlbnRpdHknXVsnQHR5cGUnXSA9ICdBcnJheSc7XG4gICAgfSBlbHNlIGlmICh0aGlzWydAZGF0YSddIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICB0aGlzWydAZW50aXR5J11bJ0B0eXBlJ10gPSAnQnVmZmVyJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpc1snQGRhdGEnXSAmJlxuICAgICAgdGhpc1snQGRhdGEnXVsnQHR5cGUnXSAmJlxuICAgICAgdGhpc1snQGRhdGEnXVsnQGRhdGEnXVxuICAgICkge1xuICAgICAgc3dpdGNoICh0aGlzWydAZGF0YSddWydAdHlwZSddKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpc1snQGVudGl0eSddWydAdHlwZSddID0gdGhpc1snQGRhdGEnXVsnQHR5cGUnXTtcbiAgICAgICAgICB0aGlzWydAZW50aXR5J11bJ0BkYXRhJ10gPSB0aGlzWydAZGF0YSddWydAZGF0YSddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzWydAZW50aXR5J11bJ0B0eXBlJ10gPSAnT2JqZWN0JztcbiAgICAgIHRoaXNbJ0BlbnRpdHknXVsnQGRhdGEnXSA9IGRhdGE7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQgYXQgemVyb1xuICAgIHRoaXMuX2Nsb2NrID0gMDtcblxuICAgIC8vIHNldCB2YXJpb3VzICNtZXRhXG4gICAgdGhpc1snQHR5cGUnXSA9IHRoaXNbJ0BlbnRpdHknXVsnQHR5cGUnXTtcbiAgICAvLyB0aGlzWydAaWQnXSA9IG51bGw7XG4gICAgLy8gdGhpc1snQGlkJ10gPSB0aGlzLmlkO1xuXG4gICAgLy8gc2V0IGludGVybmFsIGRhdGFcbiAgICB0aGlzLnNlcnZpY2VzID0geyBqc29uIH07XG4gICAgdGhpcy5uYW1lID0gdGhpc1snQGVudGl0eSddLm5hbWUgfHwgdGhpcy5pZDtcblxuICAgIGlmICh0aGlzWydAZW50aXR5J11bJ0BkYXRhJ10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBtb25pdG9yLm9ic2VydmUodGhpc1snQGVudGl0eSddWydAZGF0YSddKTtcbiAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGNyZWF0ZSBvYnNlcnZlcjonLCBFLCB0aGlzWydAZW50aXR5J11bJ0BkYXRhJ10pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB7fTtcblxuICAgIGNvbnN0IGNmZyA9ICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCAmJiAhQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSA/IGRhdGEgOiB7fTtcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICB2ZXJib3NlOiB0cnVlLFxuICAgICAgdmVyYm9zaXR5OiAyLFxuICAgICAgcGF0aDogJy4vc3RvcmVzL3N0YXRlJyxcbiAgICAgIHRhZ3M6IFtdXG4gICAgfSwgdGhpcy5zZXR0aW5ncywgY2ZnKTtcblxuICAgIHRoaXMuc3RhdHVzID0gJ3JlYWR5JztcblxuICAgIC8vIFRPRE86IGRvY3VtZW50IGhpZGRlbiBwcm9wZXJ0aWVzXG4gICAgLy8gUmVtb3ZlIHZhcmlvdXMgdW5kZXNpcmVkIGNsdXR0ZXIgZnJvbSBvdXRwdXRcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0BhbGxvY2F0aW9uJywgeyBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0BidWZmZXInLCB7IGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnQGVuY29kaW5nJywgeyBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2tleScsIHsgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzZXJ2aWNlcycsIHsgZW51bWVyYWJsZTogZmFsc2UgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3NpemUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBjb3VudCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzWydAYnVmZmVyJ10ubGVuZ3RoO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdkb21haW4nLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfZXZlbnRzJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2V2ZW50c0NvdW50Jywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX21heExpc3RlbmVycycsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQganNvbiAoKSB7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGh0bWwgKCkge1xuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGdldCBwb2ludGVyICgpIHtcbiAgICByZXR1cm4gcG9pbnRlcjtcbiAgfVxuXG4gIGdldCBwYXRoICgpIHtcbiAgICByZXR1cm4gYC9lbnRpdGllcy8ke3RoaXMuaWR9YDtcbiAgfVxuXG4gIGdldCBzdGF0ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgLy8gVE9ETzogcmUtZW5hYmxlIHRoZSBiZWxvdywgbWFwIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zXG4gICAgLy8gcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMudmFsdWUpO1xuICB9XG5cbiAgc2V0IHBhdGggKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0aDtcbiAgfVxuXG4gIHNldCBzdGF0ZSAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogTWFyc2hhbGwgYW4gaW5wdXQgaW50byBhbiBpbnN0YW5jZSBvZiBhIHtAbGluayBTdGF0ZX0uICBTdGF0ZXMgaGF2ZVxuICAgKiBhYnNvbHV0ZSBhdXRob3JpdHkgb3ZlciB0aGVpciBvd24gZG9tYWluLCBzbyBjaG9vc2UgeW91ciBTdGF0ZXMgd2lzZWx5LlxuICAgKiBAcGFyYW0gIHtTdHJpbmd9IGlucHV0IEFyYml0cmFyeSBpbnB1dC5cbiAgICogQHJldHVybiB7U3RhdGV9ICAgICAgIFJlc3VsdGluZyBpbnN0YW5jZSBvZiB0aGUge0BsaW5rIFN0YXRlfS5cbiAgICovXG4gIHN0YXRpYyBmcm9tSlNPTiAoaW5wdXQpIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBwciA9IHRyeVBhcnNlUGVyc2lzdGVkSnNvbihpbnB1dCk7XG4gICAgICBpZiAocHIub2spIHJlc3VsdCA9IHByLnZhbHVlO1xuICAgICAgZWxzZSBjb25zb2xlLmVycm9yKCdGYWlsdXJlIGluIGZyb21KU09OOicsIHByLmVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGZyb21IZXggKGlucHV0KSB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmZyb21KU09OKEJ1ZmZlci5mcm9tKGlucHV0LCAnaGV4JykudG9TdHJpbmcoJ3V0ZjgnKSk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0cmluZyAoaW5wdXQpIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUpTT04oaW5wdXQpO1xuICB9XG5cbiAgc2hhMjU2ICh2YWx1ZSkge1xuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHZhbHVlKS5kaWdlc3QoJ2hleCcpO1xuICB9XG5cbiAgbm93ICgpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxuICBfc2lnbiAoKSB7XG4gICAgdGhpcy5jb21taXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gc291cmNlIEV2ZW50IHN0cmVhbS5cbiAgICogQHJldHVybnMge1N0YXRlfSB0aGlzXG4gICAqL1xuICB0cnVzdCAoc291cmNlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc291cmNlLm9uKCdtZXNzYWdlJywgYXN5bmMgZnVuY3Rpb24gaGFuZGxlVHJ1c3RlZE1lc3NhZ2UgKF9tc2cpIHt9KTtcbiAgICBzb3VyY2Uub24oJ3RyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gaGFuZGxlVHJ1c3RlZFRyYW5zYWN0aW9uICh0cmFuc2FjdGlvbikge1xuICAgICAgc2VsZi5sb2coJ1tFVkVOVDpUUkFOU0FDVElPTl0nLCAnYXBwbHkgdGhpcyB0cmFuc2FjdGlvbiB0byBsb2NhbCBzdGF0ZTonLCB0cmFuc2FjdGlvbik7XG4gICAgICBzZWxmLmxvZygnW1BST1BPU0FMXScsICdhcHBseSB0aGlzIHRyYW5zYWN0aW9uIHRvIGxvY2FsIHN0YXRlOicsIHRyYW5zYWN0aW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N0YXRlfSBvdGhlciBQZWVyIHtAbGluayBTdGF0ZX0gd2hvc2UgYHNldHRpbmdzLm5hbWVzcGFjZWAgaXMgYXBwZW5kZWQgdG8gYHNldHRpbmdzLnRhZ3NgLlxuICAgKiBAcmV0dXJucyB7TnVtYmVyfSBOZXcgbGVuZ3RoIG9mIGBzZXR0aW5ncy50YWdzYC5cbiAgICovXG4gIGluaGVyaXRzIChvdGhlcikge1xuICAgIGNvbnN0IG5zID0gb3RoZXIgJiYgb3RoZXIuc2V0dGluZ3MgJiYgb3RoZXIuc2V0dGluZ3MubmFtZXNwYWNlO1xuICAgIGlmIChucykgdGhpcy5zZXR0aW5ncy50YWdzLnB1c2gobnMpO1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnRhZ3MubGVuZ3RoO1xuICB9XG5cbiAgbG9nICguLi5pbnB1dHMpIHtcbiAgICBjb25zdCB0ID0gdGhpcy5ub3coKTtcbiAgICBpbnB1dHMudW5zaGlmdChgWyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lLnRvVXBwZXJDYXNlKCl9XWApO1xuICAgIGlucHV0cy51bnNoaWZ0KGBbJHt0fV1gKTtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy52ZXJib3NpdHkgPj0gMykge1xuICAgICAgY29uc29sZS5sb2cuYXBwbHkobnVsbCwgWydbU1RBVEVdJ10uY29uY2F0KGlucHV0cykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbWl0KCdpbmZvJywgWydbU1RBVEVdJ10uY29uY2F0KGlucHV0cykpO1xuICB9XG5cbiAgZXJyb3IgKC4uLmlucHV0cykge1xuICAgIGNvbnN0IHQgPSB0aGlzLm5vdygpO1xuICAgIGlucHV0cy51bnNoaWZ0KGBbJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWUudG9VcHBlckNhc2UoKX1dYCk7XG4gICAgaW5wdXRzLnVuc2hpZnQoYFske3R9XWApO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnZlcmJvc2UpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IuYXBwbHkobnVsbCwgWydbU1RBVEVdJ10uY29uY2F0KGlucHV0cykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbWl0KCdlcnJvcicsIFsnW1NUQVRFXSddLmNvbmNhdChpbnB1dHMpKTtcbiAgfVxuXG4gIHdhcm4gKC4uLmlucHV0cykge1xuICAgIGNvbnN0IHQgPSB0aGlzLm5vdygpO1xuICAgIGlucHV0cy51bnNoaWZ0KGBbJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWUudG9VcHBlckNhc2UoKX1dYCk7XG4gICAgaW5wdXRzLnVuc2hpZnQoYFske3R9XWApO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnZlcmJvc2UpIHtcbiAgICAgIGNvbnNvbGUud2Fybi5hcHBseShudWxsLCBbJ1tTVEFURV0nXS5jb25jYXQoaW5wdXRzKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVtaXQoJ3dhcm5pbmcnLCBbJ1tTVEFURV0nXS5jb25jYXQoaW5wdXRzKSk7XG4gIH1cblxuICBkZWJ1ZyAoLi4uaW5wdXRzKSB7XG4gICAgY29uc3QgdCA9IHRoaXMubm93KCk7XG4gICAgaW5wdXRzLnVuc2hpZnQoYFske3RoaXMuY29uc3RydWN0b3IubmFtZS50b1VwcGVyQ2FzZSgpfV1gKTtcbiAgICBpbnB1dHMudW5zaGlmdChgWyR7dH1dYCk7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5kZWJ1Zy5hcHBseShudWxsLCBbJ1tTVEFURV0nXS5jb25jYXQoaW5wdXRzKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVtaXQoJ2RlYnVnJywgWydbU1RBVEVdJ10uY29uY2F0KGlucHV0cykpO1xuICB9XG5cbiAgYXN5bmMgb3BlbiAoKSB7XG4gICAgdGhpcy5zdGF0dXMgPSAnb3BlbmVkJztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzeW5jIGNsb3NlICgpIHtcbiAgICB0aGlzLnN0YXR1cyA9ICdjbG9zZWQnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKCkge1xuICAgIHRoaXMuc3RhdHVzID0gJ3N0YXJ0aW5nJztcbiAgICB0aGlzWydAZGF0YSddID0gdGhpcy5zZXR0aW5ncztcbiAgICBhd2FpdCB0aGlzLm9wZW4oKTtcbiAgICBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgIHRoaXMuc3RhdHVzID0gJ3N0YXJ0ZWQnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYXN5bmMgc3RvcCAoKSB7XG4gICAgdGhpcy5zdGF0dXMgPSAnc3RvcHBpbmcnO1xuICAgIGF3YWl0IHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLnN0YXR1cyA9ICdzdG9wcGVkJztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzeW5jIF9hcHBseUNoYW5nZXMgKG9wcykge1xuICAgIHRyeSB7XG4gICAgICBtb25pdG9yLmFwcGx5UGF0Y2godGhpc1snQGRhdGEnXSwgb3BzKTtcblxuICAgICAgYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICB9IGNhdGNoIChFKSB7XG4gICAgICB0aGlzLmVycm9yKCdFcnJvciBhcHBseWluZyBjaGFuZ2VzOicsIEUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZmluZ2VycHJpbnQgKCkge1xuICAgIGNvbnN0IG1hcCA9IHt9O1xuICAgIG1hcFsnQG1ldGhvZCddID0gJ3NoYTI1Nic7XG4gICAgbWFwWydAaW5wdXQnXSA9IHRoaXMuc2VyaWFsaXplKHRoaXNbJ0BlbnRpdHknXVsnQGRhdGEnXSk7XG4gICAgbWFwWydAYnVmZmVyJ10gPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKG1hcFsnQGlucHV0J10sICd1dGY4Jyk7XG4gICAgbWFwWydAb3V0cHV0J10gPSBtYXBbJ0BidWZmZXInXS5kaWdlc3QoJ2hleCcpO1xuICAgIHJldHVybiBtYXBbJ0BvdXRwdXQnXTtcbiAgfVxuXG4gIGlzUm9vdCAoKSB7XG4gICAgcmV0dXJuIHRoaXNbJ0BwYXJlbnQnXSA9PT0gdGhpcy5pZDtcbiAgfVxuXG4gIHRvQnVmZmVyICgpIHtcbiAgICBpZiAodGhpc1snQGRhdGEnXSBpbnN0YW5jZW9mIEJ1ZmZlcikgcmV0dXJuIHRoaXNbJ0BkYXRhJ107XG4gICAgaWYgKHRoaXNbJ0BkYXRhJ10pIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXNbJ0BkYXRhJ11bJ0BkYXRhJ10pO1xuICB9XG5cbiAgLyoqIENvbnZlcnRzIHRoZSBTdGF0ZSB0byBhbiBIVE1MIGRvY3VtZW50LiAqL1xuICB0b0hUTUwgKCkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcztcbiAgICBjb25zdCBzb2x1dGlvbiA9IHN0YXRlWydAb3V0cHV0J10udG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICBjb25zdCBjb25maXJtZWQgPSBTdHJpbmcoc29sdXRpb24pO1xuICAgIGNvbnN0IHJhdyA9IGA8aHRtbD5YLUNsYWltLUlEOiAke3RoaXMuaWR9XG5YLUNsYWltLUludGVncml0eTogc2hhMjU2XG5YLUNsYWltLVR5cGU6IFJlc3BvbnNlXG5YLUNsYWltLVJlc3VsdDogJHtzdGF0ZS5pZH1cbkJvZHk6XG4jIFNUT1AhXG5IZXJlIGlzIHlvdXIgb3Bwb3J0dW5pdHkgdG8gcmVhZCB0aGUgZG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9kZXYuZmFicmljLnB1YlxuXG5Eb2N1bWVudCBJRDogJHt0aGlzLmlkfVxuRG9jdW1lbnQgVHlwZSAobG9jYWwgSlNPTik6ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfVxuRG9jdW1lbnQgUGF0aDogJHt0aGlzLnBhdGh9XG5Eb2N1bWVudCBOYW1lOiAke3RoaXMubmFtZX1cbkRvY3VtZW50IEludGVncml0eTogc2hhMjU2OiR7dGhpcy5pZH1cbkRvY3VtZW50IERhdGEgKGxvY2FsIEpTT04sIDwke2NvbmZpcm1lZC5sZW5ndGh9PiBieXRlczogJHtjb25maXJtZWR9XG5Eb2N1bWVudCBTb3VyY2U6XG5cXGBcXGBcXGBcbiR7Y29uZmlybWVkfVxuXFxgXFxgXFxgXG5cbiMjIFNvdXJjZSBDb2RlXG4jIyMgRnJlZSBhcyBpbiBfZnJlZWRvbV8uXG5MYWJzOiBodHRwczovL2dpdGh1Yi5jb20vRmFicmljTGFic1xuXG5UbyBlZGl0IHRoaXMgbWVzc2FnZSwgdmlzaXQgdGhpcyBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9GYWJyaWNMYWJzL2ZhYnJpYy9lZGl0L21hc3Rlci90eXBlcy9zdGF0ZS5qc1xuXG4jIyBPbmJvYXJkaW5nXG5XaGVuIHlvdSdyZSByZWFkeSB0byBjb250aW51ZSwgdmlzaXQgdGhlIGZvbGxvd2luZyBVUkw6IGh0dHBzOi8vZGV2LmZhYnJpYy5wdWIvV0VMQ09NRS5odG1sPC9odG1sPlxuYDtcblxuICAgIHJldHVybiByYXc7XG4gIH1cblxuICAvKipcbiAgICogVW5tYXJzaGFsbCBhbiBleGlzdGluZyBzdGF0ZSB0byBhbiBpbnN0YW5jZSBvZiBhIHtAbGluayBCbG9ifS5cbiAgICogQHJldHVybiB7U3RyaW5nfSBTZXJpYWxpemVkIHtAbGluayBCbG9ifS5cbiAgICovXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIG92ZXJsYXkgKGRhdGEpIHtcbiAgICBsZXQgc3RhdGUgPSBuZXcgU3RhdGUoZGF0YSk7XG4gICAgdGhpc1snQHBhcmVudCddID0gdGhpc1snQGlkJ107XG4gICAgdGhpc1snQGRhdGEnXSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXNbJ0BkYXRhJ10sIHN0YXRlWydAZGF0YSddKTtcbiAgICB0aGlzWydAZGlkJ10gPSBgZGlkOmZhYnJpYzoke3RoaXMuaWR9YDtcbiAgICB0aGlzWydAaWQnXSA9IHRoaXMuaWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwYWNrIChkYXRhKSB7XG4gICAgaWYgKCFkYXRhKSBkYXRhID0gdGhpc1snQGRhdGEnXTtcbiAgICByZXR1cm4ganNvbihkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRvIHtAbGluayBCdWZmZXJ9LlxuICAgKiBAcGFyYW0gIHtNaXhlZH0gW2lucHV0XSBJbnB1dCB0byBzZXJpYWxpemUuXG4gICAqIEByZXR1cm4ge0J1ZmZlcn0gICAgICAge0BsaW5rIFN0b3JlfS1hYmxlIGJsb2IuXG4gICAqL1xuICBzZXJpYWxpemUgKGlucHV0ID0gdGhpcy5zdGF0ZSwgX2VuY29kaW5nID0gJ2pzb24nKSB7XG4gICAgY29uc3Qgc3RhdGUgPSB7fTtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oYCR7anNvbihpbnB1dCl9YCwgJ3V0ZjgnKTtcbiAgICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHJlc3VsdCA9IEJ1ZmZlci5mcm9tKGAke0pTT04uc3RyaW5naWZ5KGlucHV0KX1gLCAndXRmOCcpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICAgIHJlc3VsdCA9IGlucHV0O1xuICAgIH0gZWxzZSBpZiAoaW5wdXRbJ0B0eXBlJ10gJiYgaW5wdXRbJ0BkYXRhJ10pIHtcbiAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZShpbnB1dFsnQGRhdGEnXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAoaW5wdXQuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgICBjYXNlICdGdW5jdGlvbic6XG4gICAgICAgICAgcmVzdWx0ID0gQnVmZmVyLmZyb20oaW5wdXQudG9TdHJpbmcoJ3V0ZjgnKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Jvb2xlYW4nOlxuICAgICAgICAgIHJlc3VsdCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGlucHV0KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0J1ZmZlcic6XG4gICAgICAgICAgcmVzdWx0ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoaW5wdXQudG9TdHJpbmcoJ3V0ZjgnKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdPYmplY3QnOlxuICAgICAgICAgIHJlc3VsdCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGlucHV0KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVzdWx0ID0gaW5wdXQudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gc3RyaXAgc3BlY2lhbCBmaWVsZHNcbiAgICAgIC8vIFRPRE86IG9yZGVyP1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGlucHV0KSB7XG4gICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGVbbmFtZV0gPSBpbnB1dFtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVBlcnNpc3RlZEpzb24oanNvbihyZXN1bHQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIGEgaGV4LWVuY29kZWQgaW5wdXQgYW5kIGNvbnZlcnQgdG8gYSB7QGxpbmsgU3RhdGV9IG9iamVjdC5cbiAgICogQHBhcmFtICB7U3RyaW5nfSBpbnB1dCBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge1N0YXRlfSAgICAgICBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBkZXNlcmlhbGl6ZSAoaW5wdXQpIHtcbiAgICBsZXQgb3V0cHV0ID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBMZXQncyBjcmVhdGUgYSBzdGF0ZSBvYmplY3QuLi5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBzdGF0ZSA9IG5ldyBTdGF0ZShpbnB1dCk7XG4gICAgICAgIC8vIEFzc2lnbiBvdXIgb3V0cHV0IHRvIHRoZSBzdGF0ZSBkYXRhXG4gICAgICAgIG91dHB1dCA9IHN0YXRlWydAZGF0YSddO1xuICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICB0aGlzLmVycm9yKCdDb3VsZCBub3QgcGFyc2Ugc3RyaW5nIGFzIEJ1ZmZlcjonLCBFKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2coJ1dBUk5JTkc6JywgYGlucHV0IG5vdCBhIHN0cmluZ2AsIGlucHV0KTtcbiAgICB9XG5cbiAgICBpZiAoIW91dHB1dCkgcmV0dXJuIG51bGw7XG5cbiAgICBzd2l0Y2ggKG91dHB1dFsnQHR5cGUnXSkge1xuICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0WydAYnVmZmVyJ10udG9TdHJpbmcob3V0cHV0WydAZW5jb2RpbmcnXSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBmbGF0dGVuICgpIHtcbiAgICBsZXQgbWFwID0ge307XG5cbiAgICBmb3IgKGxldCBrIGluIHRoaXNbJ0BkYXRhJ10pIHtcbiAgICAgIG1hcFtrXSA9IHRoaXMuc2VyaWFsaXplKHRoaXNbJ0BkYXRhJ11ba10pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjaGlsZCB7QGxpbmsgU3RhdGV9LCB3aXRoIGBAcGFyZW50YCBzZXQgdG9cbiAgICogdGhlIGN1cnJlbnQge0BsaW5rIFN0YXRlfSBieSBpbW11dGFibGUgaWRlbnRpZmllci5cbiAgICogQHJldHVybnMge1N0YXRlfVxuICAgKi9cbiAgZm9yayAoKSB7XG4gICAgbGV0IGRhdGEgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICdAcGFyZW50JzogdGhpcy5pZFxuICAgIH0sIHRoaXNbJ0BkYXRhJ10pO1xuICAgIHJldHVybiBuZXcgU3RhdGUoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBrZXkgZnJvbSB0aGUge0BsaW5rIFN0YXRlfS5cbiAgICogQHBhcmFtIHtQYXRofSBwYXRoIEtleSB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge01peGVkfVxuICAgKi9cbiAgZ2V0IChwYXRoID0gJycpIHtcbiAgICAvLyByZXR1cm4gcG9pbnRlci5nZXQodGhpcy5zdGF0ZSwgcGF0aCk7XG4gICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IHBvaW50ZXIuZ2V0KHRoaXNbJ0BlbnRpdHknXVsnQGRhdGEnXSwgcGF0aCk7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbRkFCUklDOlNUQVRFXScsICdDb3VsZCBub3QgcmV0cmlldmUgcGF0aDonLCBwYXRoLCBwb2ludGVyLmdldCh0aGlzWydAZW50aXR5J11bJ0BkYXRhJ10sICcvJyksIGV4Y2VwdGlvbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEga2V5IGluIHRoZSB7QGxpbmsgU3RhdGV9IHRvIGEgcGFydGljdWxhciB2YWx1ZS5cbiAgICogQHBhcmFtIHtQYXRofSBwYXRoIEtleSB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge01peGVkfVxuICAgKi9cbiAgc2V0IChwYXRoLCB2YWx1ZSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdzZXR0aW5nOicsIHBhdGgsIHZhbHVlKTtcbiAgICBwb2ludGVyLnNldCh0aGlzLnZhbHVlLCBwYXRoLCB2YWx1ZSk7XG4gICAgcG9pbnRlci5zZXQodGhpc1snQGVudGl0eSddWydAZGF0YSddLCBwYXRoLCB2YWx1ZSk7XG4gICAgY29uc3QgcmVzdWx0ID0gcG9pbnRlci5zZXQodGhpcy52YWx1ZSwgcGF0aCwgdmFsdWUpO1xuICAgIHRoaXMuY29tbWl0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgdGhlIHZlY3RvciBjbG9jaywgYnJvYWRjYXN0IGFsbCBjaGFuZ2VzIGFzIGEgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBjb21taXQgKCkge1xuICAgICsrdGhpcy5fY2xvY2s7XG5cbiAgICB0aGlzWydAcGFyZW50J10gPSB0aGlzLmlkO1xuICAgIHRoaXNbJ0BwcmVpbWFnZSddID0gdGhpcy50b1N0cmluZygpO1xuICAgIHRoaXNbJ0Bjb25zdHJ1Y3RvciddID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIGlmICh0aGlzLm9ic2VydmVyKSB7XG4gICAgICB0aGlzWydAY2hhbmdlcyddID0gbW9uaXRvci5nZW5lcmF0ZSh0aGlzLm9ic2VydmVyKTtcbiAgICB9XG5cbiAgICB0aGlzWydAaWQnXSA9IHRoaXMuaWQ7XG5cbiAgICBpZiAodGhpc1snQGNoYW5nZXMnXSAmJiB0aGlzWydAY2hhbmdlcyddLmxlbmd0aCkge1xuICAgICAgdGhpcy5lbWl0KCdjaGFuZ2VzJywgdGhpc1snQGNoYW5nZXMnXSk7XG4gICAgICB0aGlzLmVtaXQoJ3N0YXRlJywgdGhpc1snQHN0YXRlJ10pO1xuICAgICAgdGhpcy5lbWl0KCdtZXNzYWdlJywge1xuICAgICAgICAnQHR5cGUnOiAnVHJhbnNhY3Rpb24nLFxuICAgICAgICAnQGRhdGEnOiB7XG4gICAgICAgICAgJ2NoYW5nZXMnOiB0aGlzWydAY2hhbmdlcyddLFxuICAgICAgICAgICdzdGF0ZSc6IHRoaXNbJ0BjaGFuZ2VzJ11cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ29tcG9zZSBhIEpTT04gc3RyaW5nIGZvciBuZXR3b3JrIGNvbnN1bXB0aW9uLlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IEpTT04tZW5jb2RlZCB7QGxpbmsgU3RyaW5nfS5cbiAgICovXG4gIHJlbmRlciAoKSB7XG4gICAgdGhpc1snQGlkJ10gPSB0aGlzLmlkO1xuICAgIHRoaXNbJ0BlbmNvZGluZyddID0gJ2pzb24nO1xuICAgIHRoaXNbJ0BvdXRwdXQnXSA9IHRoaXMuc2VyaWFsaXplKHRoaXMuc3RhdGUsICdqc29uJyk7XG4gICAgdGhpc1snQGNvbW1pdCddID0gdGhpcy5jb21taXQoKTtcblxuICAgIHJldHVybiB0aGlzWydAb3V0cHV0J10udG9TdHJpbmcoJ3V0ZjgnKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/state.js\n\n}")},"./node_modules/@fabric/core/types/tree.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n// Dependencies\nconst merge = __webpack_require__(/*! lodash.merge */ \"./node_modules/lodash.merge/index.js\");\nconst { MerkleTree } = __webpack_require__(/*! merkletreejs */ \"./node_modules/merkletreejs/dist/index.js\");\n\n// Fabric Types\nconst Actor = __webpack_require__(/*! ./actor */ \"./node_modules/@fabric/core/types/actor.js\");\nconst Hash256 = __webpack_require__(/*! ./hash256 */ \"./node_modules/@fabric/core/types/hash256.js\");\n\n/**\n * Class implementing a Merkle Tree.\n */\nclass Tree extends Actor {\n /**\n * Create an instance of a Tree.\n * @param {Object} [settings] Configuration.\n * @returns {Tree} Instance of the tree.\n */\n constructor (settings = {}) {\n super(settings);\n\n if (settings instanceof Array) settings = { leaves: settings };\n\n this.settings = merge({\n leaves: []\n }, this.settings, settings);\n\n this._tree = new MerkleTree(this.settings.leaves, Hash256.digest, {\n isBitcoinTree: true\n });\n\n this._state = {\n root: this.root\n };\n\n return this;\n }\n\n get root () {\n return this._tree.getRoot();\n }\n\n /**\n * Add a leaf to the tree (accumulates into `settings.leaves`).\n * @param {String|Buffer} leaf Leaf to add to the tree.\n * @returns {Tree} Instance of the tree.\n */\n addLeaf (leaf = '') {\n this.settings.leaves = (this.settings.leaves || []).concat([leaf]);\n this._tree = new MerkleTree(this.settings.leaves, Hash256.digest, {\n isBitcoinTree: true\n });\n this._state = this._state || {};\n this._state.root = this.root;\n\n this.emit('leaf', leaf);\n\n return this;\n }\n\n /**\n * Hex encoding of {@link Tree#root} (empty string when the tree has no root bytes).\n * @returns {string}\n */\n get rootHex () {\n const root = this.root;\n if (!root || !root.length) return '';\n return Buffer.isBuffer(root) ? root.toString('hex') : String(root);\n }\n\n /**\n * Get a list of the {@link Tree}'s leaves.\n * @returns {Array} A list of the {@link Tree}'s leaves.\n */\n getLeaves () {\n return this._tree.getLeaves();\n }\n}\n\nmodule.exports = Tree;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL3RyZWUuanMiLCJtYXBwaW5ncyI6IjtBQUFhOztBQUViO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLDBEQUFjO0FBQ3BDLFFBQVEsYUFBYSxFQUFFLG1CQUFPLENBQUMsK0RBQWM7O0FBRTdDO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLDJEQUFTO0FBQy9CLGdCQUFnQixtQkFBTyxDQUFDLCtEQUFXOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxNQUFNO0FBQ3JCO0FBQ0EsNEJBQTRCO0FBQzVCOztBQUVBLGdEQUFnRDs7QUFFaEQ7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGVBQWU7QUFDNUIsZUFBZSxNQUFNO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLGlCQUFpQjtBQUN2QyxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7O0FBRUE7QUFDQSx3QkFBd0IsV0FBVztBQUNuQyxlQUFlLE9BQU8sZUFBZSxXQUFXO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmFicmljL2NvcmUvdHlwZXMvdHJlZS5qcz9iOWFiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gRGVwZW5kZW5jaWVzXG5jb25zdCBtZXJnZSA9IHJlcXVpcmUoJ2xvZGFzaC5tZXJnZScpO1xuY29uc3QgeyBNZXJrbGVUcmVlIH0gPSByZXF1aXJlKCdtZXJrbGV0cmVlanMnKTtcblxuLy8gRmFicmljIFR5cGVzXG5jb25zdCBBY3RvciA9IHJlcXVpcmUoJy4vYWN0b3InKTtcbmNvbnN0IEhhc2gyNTYgPSByZXF1aXJlKCcuL2hhc2gyNTYnKTtcblxuLyoqXG4gKiBDbGFzcyBpbXBsZW1lbnRpbmcgYSBNZXJrbGUgVHJlZS5cbiAqL1xuY2xhc3MgVHJlZSBleHRlbmRzIEFjdG9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhIFRyZWUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbc2V0dGluZ3NdIENvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIHtUcmVlfSBJbnN0YW5jZSBvZiB0aGUgdHJlZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgc3VwZXIoc2V0dGluZ3MpO1xuXG4gICAgaWYgKHNldHRpbmdzIGluc3RhbmNlb2YgQXJyYXkpIHNldHRpbmdzID0geyBsZWF2ZXM6IHNldHRpbmdzIH07XG5cbiAgICB0aGlzLnNldHRpbmdzID0gbWVyZ2Uoe1xuICAgICAgbGVhdmVzOiBbXVxuICAgIH0sIHRoaXMuc2V0dGluZ3MsIHNldHRpbmdzKTtcblxuICAgIHRoaXMuX3RyZWUgPSBuZXcgTWVya2xlVHJlZSh0aGlzLnNldHRpbmdzLmxlYXZlcywgSGFzaDI1Ni5kaWdlc3QsIHtcbiAgICAgIGlzQml0Y29pblRyZWU6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXMuX3N0YXRlID0ge1xuICAgICAgcm9vdDogdGhpcy5yb290XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0IHJvb3QgKCkge1xuICAgIHJldHVybiB0aGlzLl90cmVlLmdldFJvb3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBsZWFmIHRvIHRoZSB0cmVlIChhY2N1bXVsYXRlcyBpbnRvIGBzZXR0aW5ncy5sZWF2ZXNgKS5cbiAgICogQHBhcmFtIHtTdHJpbmd8QnVmZmVyfSBsZWFmIExlYWYgdG8gYWRkIHRvIHRoZSB0cmVlLlxuICAgKiBAcmV0dXJucyB7VHJlZX0gSW5zdGFuY2Ugb2YgdGhlIHRyZWUuXG4gICAqL1xuICBhZGRMZWFmIChsZWFmID0gJycpIHtcbiAgICB0aGlzLnNldHRpbmdzLmxlYXZlcyA9ICh0aGlzLnNldHRpbmdzLmxlYXZlcyB8fCBbXSkuY29uY2F0KFtsZWFmXSk7XG4gICAgdGhpcy5fdHJlZSA9IG5ldyBNZXJrbGVUcmVlKHRoaXMuc2V0dGluZ3MubGVhdmVzLCBIYXNoMjU2LmRpZ2VzdCwge1xuICAgICAgaXNCaXRjb2luVHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMuX3N0YXRlID0gdGhpcy5fc3RhdGUgfHwge307XG4gICAgdGhpcy5fc3RhdGUucm9vdCA9IHRoaXMucm9vdDtcblxuICAgIHRoaXMuZW1pdCgnbGVhZicsIGxlYWYpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSGV4IGVuY29kaW5nIG9mIHtAbGluayBUcmVlI3Jvb3R9IChlbXB0eSBzdHJpbmcgd2hlbiB0aGUgdHJlZSBoYXMgbm8gcm9vdCBieXRlcykuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgcm9vdEhleCAoKSB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcbiAgICBpZiAoIXJvb3QgfHwgIXJvb3QubGVuZ3RoKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihyb290KSA/IHJvb3QudG9TdHJpbmcoJ2hleCcpIDogU3RyaW5nKHJvb3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGxpc3Qgb2YgdGhlIHtAbGluayBUcmVlfSdzIGxlYXZlcy5cbiAgICogQHJldHVybnMge0FycmF5fSBBIGxpc3Qgb2YgdGhlIHtAbGluayBUcmVlfSdzIGxlYXZlcy5cbiAgICovXG4gIGdldExlYXZlcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyZWUuZ2V0TGVhdmVzKCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUcmVlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/tree.js\n\n}")},"./node_modules/@fabric/core/types/witness.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\nconst crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nconst { secp256k1 } = __webpack_require__(/*! @noble/curves/secp256k1.js */ \"./node_modules/@noble/curves/secp256k1.js\");\nclass Witness {\n constructor (settings = {}) {\n this.settings = Object.assign({\n curve: 'secp256k1',\n data: null,\n keypair: null\n }, settings);\n\n this.buffer = Buffer.alloc(32 * 256);\n this._state = {\n data: this.settings.data\n };\n\n if (settings && settings.keypair) {\n if (settings.keypair.private) {\n this._usePrivateKey(settings.keypair.private);\n } else if (settings.keypair.public) {\n this._usePublicKey(settings.keypair.public);\n }\n }\n\n if (!this.keypair) {\n const privateKey = crypto.randomBytes(32);\n const publicKey = Buffer.from(secp256k1.getPublicKey(privateKey, false));\n this.keypair = { privateKey, publicKey };\n }\n\n if (settings && settings.data) {\n this._loadData(settings.data);\n }\n\n Object.defineProperty(this, 'buffer', { enumerable: false });\n Object.defineProperty(this, 'keypair', { enumerable: false });\n\n return this;\n }\n\n get data () {\n return this._state.data;\n }\n\n get hash () {\n return this.digest(this._state.data || '');\n }\n\n get pubkey () {\n return Buffer.from(this.keypair.publicKey).toString('hex');\n }\n\n get signature () {\n const digest = Buffer.from(this.hash, 'hex');\n const sig = secp256k1.sign(digest, this.keypair.privateKey, { prehash: false });\n const compact = (sig && typeof sig.toCompactRawBytes === 'function')\n ? Buffer.from(sig.toCompactRawBytes())\n : Buffer.from(sig);\n\n return {\n curve: this.settings.curve,\n r: compact.slice(0, 32).toString('hex'),\n s: compact.slice(32, 64).toString('hex')\n };\n }\n\n digest (data) {\n return crypto.createHash('sha256').update(data).digest('hex');\n }\n\n lock () {\n return Object.freeze(this);\n }\n\n _dumpKeypair () {\n return {\n private: this.keypair.privateKey,\n public: this.keypair.publicKey\n };\n }\n\n _usePrivateKey (key) {\n const privateKey = Buffer.isBuffer(key) ? key : Buffer.from(key, 'hex');\n const publicKey = Buffer.from(secp256k1.getPublicKey(privateKey, false));\n this.keypair = { privateKey, publicKey };\n }\n\n _usePublicKey (key) {\n const publicKey = Buffer.isBuffer(key) ? key : Buffer.from(key, 'hex');\n this.keypair = { publicKey };\n }\n\n _loadData (data) {\n if (data && typeof data !== 'string') data = JSON.stringify(data);\n if (this.buffer.size < data.length) return new Error(`Insufficient storage (needed ${data.length} bytes)`);\n\n try {\n // set internal state and write buffer...\n this._state.data = data;\n this.buffer.write(data);\n } catch (E) {\n console.error('Could not write data for Witness:', E);\n }\n\n return this;\n }\n\n _fromBitcoinSignature (_signature = {}) {\n\n }\n\n /**\n * Converts the Witness to a Compact DER format.\n */\n toCompactDER () {\n let sig = this.signature;\n let R = sig.r;\n let S = sig.s;\n\n let payload = [\n 0x02, // a header byte indicating an integer.\n 32, // A 1-byte length descriptor for the R value\n // TODO: assign R coordinate\n R, // The R coordinate, as a big-endian integer.\n 0x02, // a header byte indicating an integer.\n 32, // A 1-byte length descriptor for the S value.\n // TODO: assign S coordinate\n S // The S coordinate, as a big-endian integer.\n ].map(x => x.toString(16)).join('');\n\n console.log('payload:', payload);\n\n let raw = [\n 0x30, // indicates compound structure\n Buffer.from(payload, 'hex').size, // payload size\n ].join('') + payload;\n\n let der = Buffer.from(raw, 'hex');\n\n return der;\n }\n\n verify (msg, signature) {\n const hash = Buffer.from(this.digest(msg), 'hex');\n const publicKey = Buffer.from(this.keypair.publicKey);\n const compact = Buffer.concat([\n Buffer.from(signature.r, 'hex'),\n Buffer.from(signature.s, 'hex')\n ]);\n const verifies = secp256k1.verify(compact, hash, publicKey, { prehash: false });\n let verification = {\n msg: msg,\n hash: hash.toString('hex'),\n pubkey: this.pubkey,\n signature: signature,\n verifies: verifies\n };\n\n return verification;\n }\n}\n\nmodule.exports = Witness;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL3dpdG5lc3MuanMiLCJtYXBwaW5ncyI6IjtBQUFhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyx5REFBUTtBQUMvQixRQUFRLFlBQVksRUFBRSxtQkFBTyxDQUFDLDZFQUE0QjtBQUMxRDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsa0JBQWtCLE1BQU07QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QixNQUFNO0FBQzlCLHVCQUF1QjtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNENBQTRDLG1CQUFtQjtBQUMvRCw2Q0FBNkMsbUJBQW1COztBQUVoRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLE1BQU07QUFDakI7O0FBRUE7QUFDQSxtQkFBbUIsTUFBTTtBQUN6QixrRUFBa0UsZ0JBQWdCO0FBQ2xGO0FBQ0EsUUFBUSxNQUFNO0FBQ2QsUUFBUSxNQUFNOztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1QixNQUFNLHVCQUF1QixNQUFNO0FBQzFELHNCQUFzQixNQUFNO0FBQzVCLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBLHNCQUFzQixNQUFNLHVCQUF1QixNQUFNO0FBQ3pELHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBO0FBQ0EseUZBQXlGLGFBQWE7O0FBRXRHO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3Q0FBd0M7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLE1BQU07QUFDWjs7QUFFQSxjQUFjLE1BQU07O0FBRXBCO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsTUFBTTtBQUN2QixzQkFBc0IsTUFBTTtBQUM1QixvQkFBb0IsTUFBTTtBQUMxQixNQUFNLE1BQU07QUFDWixNQUFNLE1BQU07QUFDWjtBQUNBLGtFQUFrRSxnQkFBZ0I7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL3dpdG5lc3MuanM/ZjY1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3QgeyBzZWNwMjU2azEgfSA9IHJlcXVpcmUoJ0Bub2JsZS9jdXJ2ZXMvc2VjcDI1NmsxLmpzJyk7XG5jbGFzcyBXaXRuZXNzIHtcbiAgY29uc3RydWN0b3IgKHNldHRpbmdzID0ge30pIHtcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBjdXJ2ZTogJ3NlY3AyNTZrMScsXG4gICAgICBkYXRhOiBudWxsLFxuICAgICAga2V5cGFpcjogbnVsbFxuICAgIH0sIHNldHRpbmdzKTtcblxuICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyLmFsbG9jKDMyICogMjU2KTtcbiAgICB0aGlzLl9zdGF0ZSA9IHtcbiAgICAgIGRhdGE6IHRoaXMuc2V0dGluZ3MuZGF0YVxuICAgIH07XG5cbiAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3Mua2V5cGFpcikge1xuICAgICAgaWYgKHNldHRpbmdzLmtleXBhaXIucHJpdmF0ZSkge1xuICAgICAgICB0aGlzLl91c2VQcml2YXRlS2V5KHNldHRpbmdzLmtleXBhaXIucHJpdmF0ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNldHRpbmdzLmtleXBhaXIucHVibGljKSB7XG4gICAgICAgIHRoaXMuX3VzZVB1YmxpY0tleShzZXR0aW5ncy5rZXlwYWlyLnB1YmxpYyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmtleXBhaXIpIHtcbiAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMzIpO1xuICAgICAgY29uc3QgcHVibGljS2V5ID0gQnVmZmVyLmZyb20oc2VjcDI1NmsxLmdldFB1YmxpY0tleShwcml2YXRlS2V5LCBmYWxzZSkpO1xuICAgICAgdGhpcy5rZXlwYWlyID0geyBwcml2YXRlS2V5LCBwdWJsaWNLZXkgfTtcbiAgICB9XG5cbiAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MuZGF0YSkge1xuICAgICAgdGhpcy5fbG9hZERhdGEoc2V0dGluZ3MuZGF0YSk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdidWZmZXInLCB7IGVudW1lcmFibGU6IGZhbHNlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAna2V5cGFpcicsIHsgZW51bWVyYWJsZTogZmFsc2UgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldCBkYXRhICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUuZGF0YTtcbiAgfVxuXG4gIGdldCBoYXNoICgpIHtcbiAgICByZXR1cm4gdGhpcy5kaWdlc3QodGhpcy5fc3RhdGUuZGF0YSB8fCAnJyk7XG4gIH1cblxuICBnZXQgcHVia2V5ICgpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5rZXlwYWlyLnB1YmxpY0tleSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgZ2V0IHNpZ25hdHVyZSAoKSB7XG4gICAgY29uc3QgZGlnZXN0ID0gQnVmZmVyLmZyb20odGhpcy5oYXNoLCAnaGV4Jyk7XG4gICAgY29uc3Qgc2lnID0gc2VjcDI1NmsxLnNpZ24oZGlnZXN0LCB0aGlzLmtleXBhaXIucHJpdmF0ZUtleSwgeyBwcmVoYXNoOiBmYWxzZSB9KTtcbiAgICBjb25zdCBjb21wYWN0ID0gKHNpZyAmJiB0eXBlb2Ygc2lnLnRvQ29tcGFjdFJhd0J5dGVzID09PSAnZnVuY3Rpb24nKVxuICAgICAgPyBCdWZmZXIuZnJvbShzaWcudG9Db21wYWN0UmF3Qnl0ZXMoKSlcbiAgICAgIDogQnVmZmVyLmZyb20oc2lnKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjdXJ2ZTogdGhpcy5zZXR0aW5ncy5jdXJ2ZSxcbiAgICAgIHI6IGNvbXBhY3Quc2xpY2UoMCwgMzIpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHM6IGNvbXBhY3Quc2xpY2UoMzIsIDY0KS50b1N0cmluZygnaGV4JylcbiAgICB9O1xuICB9XG5cbiAgZGlnZXN0IChkYXRhKSB7XG4gICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoZGF0YSkuZGlnZXN0KCdoZXgnKTtcbiAgfVxuXG4gIGxvY2sgKCkge1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG5cbiAgX2R1bXBLZXlwYWlyICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJpdmF0ZTogdGhpcy5rZXlwYWlyLnByaXZhdGVLZXksXG4gICAgICBwdWJsaWM6IHRoaXMua2V5cGFpci5wdWJsaWNLZXlcbiAgICB9O1xuICB9XG5cbiAgX3VzZVByaXZhdGVLZXkgKGtleSkge1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBCdWZmZXIuaXNCdWZmZXIoa2V5KSA/IGtleSA6IEJ1ZmZlci5mcm9tKGtleSwgJ2hleCcpO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKHNlY3AyNTZrMS5nZXRQdWJsaWNLZXkocHJpdmF0ZUtleSwgZmFsc2UpKTtcbiAgICB0aGlzLmtleXBhaXIgPSB7IHByaXZhdGVLZXksIHB1YmxpY0tleSB9O1xuICB9XG5cbiAgX3VzZVB1YmxpY0tleSAoa2V5KSB7XG4gICAgY29uc3QgcHVibGljS2V5ID0gQnVmZmVyLmlzQnVmZmVyKGtleSkgPyBrZXkgOiBCdWZmZXIuZnJvbShrZXksICdoZXgnKTtcbiAgICB0aGlzLmtleXBhaXIgPSB7IHB1YmxpY0tleSB9O1xuICB9XG5cbiAgX2xvYWREYXRhIChkYXRhKSB7XG4gICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgaWYgKHRoaXMuYnVmZmVyLnNpemUgPCBkYXRhLmxlbmd0aCkgcmV0dXJuIG5ldyBFcnJvcihgSW5zdWZmaWNpZW50IHN0b3JhZ2UgKG5lZWRlZCAke2RhdGEubGVuZ3RofSBieXRlcylgKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBzZXQgaW50ZXJuYWwgc3RhdGUgYW5kIHdyaXRlIGJ1ZmZlci4uLlxuICAgICAgdGhpcy5fc3RhdGUuZGF0YSA9IGRhdGE7XG4gICAgICB0aGlzLmJ1ZmZlci53cml0ZShkYXRhKTtcbiAgICB9IGNhdGNoIChFKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgd3JpdGUgZGF0YSBmb3IgV2l0bmVzczonLCBFKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9mcm9tQml0Y29pblNpZ25hdHVyZSAoX3NpZ25hdHVyZSA9IHt9KSB7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgV2l0bmVzcyB0byBhIENvbXBhY3QgREVSIGZvcm1hdC5cbiAgICovXG4gIHRvQ29tcGFjdERFUiAoKSB7XG4gICAgbGV0IHNpZyA9IHRoaXMuc2lnbmF0dXJlO1xuICAgIGxldCBSID0gc2lnLnI7XG4gICAgbGV0IFMgPSBzaWcucztcblxuICAgIGxldCBwYXlsb2FkID0gW1xuICAgICAgMHgwMiwgLy8gYSBoZWFkZXIgYnl0ZSBpbmRpY2F0aW5nIGFuIGludGVnZXIuXG4gICAgICAzMiwgLy8gQSAxLWJ5dGUgbGVuZ3RoIGRlc2NyaXB0b3IgZm9yIHRoZSBSIHZhbHVlXG4gICAgICAvLyBUT0RPOiBhc3NpZ24gUiBjb29yZGluYXRlXG4gICAgICBSLCAvLyBUaGUgUiBjb29yZGluYXRlLCBhcyBhIGJpZy1lbmRpYW4gaW50ZWdlci5cbiAgICAgIDB4MDIsIC8vIGEgaGVhZGVyIGJ5dGUgaW5kaWNhdGluZyBhbiBpbnRlZ2VyLlxuICAgICAgMzIsIC8vIEEgMS1ieXRlIGxlbmd0aCBkZXNjcmlwdG9yIGZvciB0aGUgUyB2YWx1ZS5cbiAgICAgIC8vIFRPRE86IGFzc2lnbiBTIGNvb3JkaW5hdGVcbiAgICAgIFMgLy8gVGhlIFMgY29vcmRpbmF0ZSwgYXMgYSBiaWctZW5kaWFuIGludGVnZXIuXG4gICAgXS5tYXAoeCA9PiB4LnRvU3RyaW5nKDE2KSkuam9pbignJyk7XG5cbiAgICBjb25zb2xlLmxvZygncGF5bG9hZDonLCBwYXlsb2FkKTtcblxuICAgIGxldCByYXcgPSBbXG4gICAgICAweDMwLCAvLyBpbmRpY2F0ZXMgY29tcG91bmQgc3RydWN0dXJlXG4gICAgICBCdWZmZXIuZnJvbShwYXlsb2FkLCAnaGV4Jykuc2l6ZSwgLy8gcGF5bG9hZCBzaXplXG4gICAgXS5qb2luKCcnKSArIHBheWxvYWQ7XG5cbiAgICBsZXQgZGVyID0gQnVmZmVyLmZyb20ocmF3LCAnaGV4Jyk7XG5cbiAgICByZXR1cm4gZGVyO1xuICB9XG5cbiAgdmVyaWZ5IChtc2csIHNpZ25hdHVyZSkge1xuICAgIGNvbnN0IGhhc2ggPSBCdWZmZXIuZnJvbSh0aGlzLmRpZ2VzdChtc2cpLCAnaGV4Jyk7XG4gICAgY29uc3QgcHVibGljS2V5ID0gQnVmZmVyLmZyb20odGhpcy5rZXlwYWlyLnB1YmxpY0tleSk7XG4gICAgY29uc3QgY29tcGFjdCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgQnVmZmVyLmZyb20oc2lnbmF0dXJlLnIsICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZS5zLCAnaGV4JylcbiAgICBdKTtcbiAgICBjb25zdCB2ZXJpZmllcyA9IHNlY3AyNTZrMS52ZXJpZnkoY29tcGFjdCwgaGFzaCwgcHVibGljS2V5LCB7IHByZWhhc2g6IGZhbHNlIH0pO1xuICAgIGxldCB2ZXJpZmljYXRpb24gPSB7XG4gICAgICBtc2c6IG1zZyxcbiAgICAgIGhhc2g6IGhhc2gudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgcHVia2V5OiB0aGlzLnB1YmtleSxcbiAgICAgIHNpZ25hdHVyZTogc2lnbmF0dXJlLFxuICAgICAgdmVyaWZpZXM6IHZlcmlmaWVzXG4gICAgfTtcblxuICAgIHJldHVybiB2ZXJpZmljYXRpb247XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBXaXRuZXNzOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fabric/core/types/witness.js\n\n}")},"./node_modules/@fluentui/react-component-event-listener/dist/es/EventListener.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EventListener: () => (/* binding */ EventListener)\n/* harmony export */ });\n/* harmony import */ var _useEventListener__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./useEventListener */ "./node_modules/@fluentui/react-component-event-listener/dist/es/useEventListener.js");\n\nvar EventListener = /*#__PURE__*/function () {\n function EventListener(props) {\n (0,_useEventListener__WEBPACK_IMPORTED_MODULE_0__.useEventListener)(props);\n return null;\n }\n\n EventListener.defaultProps = {\n capture: false\n };\n return EventListener;\n}();\n//# sourceMappingURL=EventListener.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZsdWVudHVpL3JlYWN0LWNvbXBvbmVudC1ldmVudC1saXN0ZW5lci9kaXN0L2VzL0V2ZW50TGlzdGVuZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBc0Q7QUFDL0M7QUFDUDtBQUNBLElBQUksbUVBQWdCO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmx1ZW50dWkvcmVhY3QtY29tcG9uZW50LWV2ZW50LWxpc3RlbmVyL2Rpc3QvZXMvRXZlbnRMaXN0ZW5lci5qcz85ZWEwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUV2ZW50TGlzdGVuZXIgfSBmcm9tICcuL3VzZUV2ZW50TGlzdGVuZXInO1xuZXhwb3J0IHZhciBFdmVudExpc3RlbmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXZlbnRMaXN0ZW5lcihwcm9wcykge1xuICAgIHVzZUV2ZW50TGlzdGVuZXIocHJvcHMpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgRXZlbnRMaXN0ZW5lci5kZWZhdWx0UHJvcHMgPSB7XG4gICAgY2FwdHVyZTogZmFsc2VcbiAgfTtcbiAgcmV0dXJuIEV2ZW50TGlzdGVuZXI7XG59KCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FdmVudExpc3RlbmVyLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fluentui/react-component-event-listener/dist/es/EventListener.js\n\n}')},"./node_modules/@fluentui/react-component-event-listener/dist/es/index.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EventListener: () => (/* reexport safe */ _EventListener__WEBPACK_IMPORTED_MODULE_0__.EventListener),\n/* harmony export */ documentRef: () => (/* binding */ documentRef),\n/* harmony export */ windowRef: () => (/* binding */ windowRef)\n/* harmony export */ });\n/* empty/unused harmony star reexport */\n/* empty/unused harmony star reexport */\n/* harmony import */ var _EventListener__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./EventListener */ \"./node_modules/@fluentui/react-component-event-listener/dist/es/EventListener.js\");\nvar documentRef = {\n current: typeof document === 'undefined' ? null : document\n};\nvar windowRef = {\n current: typeof window === 'undefined' ? null : window\n};\n\n\n\n//# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZsdWVudHVpL3JlYWN0LWNvbXBvbmVudC1ldmVudC1saXN0ZW5lci9kaXN0L2VzL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNnRDtBQUN4QjtBQUM4QjtBQUN0RCIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmbHVlbnR1aS9yZWFjdC1jb21wb25lbnQtZXZlbnQtbGlzdGVuZXIvZGlzdC9lcy9pbmRleC5qcz80NTZjIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgZG9jdW1lbnRSZWYgPSB7XG4gIGN1cnJlbnQ6IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogZG9jdW1lbnRcbn07XG5leHBvcnQgdmFyIHdpbmRvd1JlZiA9IHtcbiAgY3VycmVudDogdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogd2luZG93XG59O1xuZXhwb3J0IHsgRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4vRXZlbnRMaXN0ZW5lcic7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCB7IHVzZUV2ZW50TGlzdGVuZXIgfSBmcm9tICcuL3VzZUV2ZW50TGlzdGVuZXInO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fluentui/react-component-event-listener/dist/es/index.js\n\n}")},"./node_modules/@fluentui/react-component-event-listener/dist/es/useEventListener.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useEventListener: () => (/* binding */ useEventListener)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n\n\nvar getWindowEvent = function getWindowEvent(target) {\n if (target) {\n var _ownerDocument$defaul, _ownerDocument, _ownerDocument$defaul2;\n\n if (typeof target.window === 'object' && target.window === target) {\n return target.event;\n }\n\n return (_ownerDocument$defaul = (_ownerDocument = target.ownerDocument) == null ? void 0 : (_ownerDocument$defaul2 = _ownerDocument.defaultView) == null ? void 0 : _ownerDocument$defaul2.event) != null ? _ownerDocument$defaul : undefined;\n }\n\n return undefined;\n};\n\nvar isActionSupported = function isActionSupported(element, method) {\n return element ? !!element[method] : false;\n};\n\nvar useEventListener = function useEventListener(options) {\n var capture = options.capture,\n listener = options.listener,\n type = options.type,\n target = options.target,\n targetRef = options.targetRef;\n var latestListener = react__WEBPACK_IMPORTED_MODULE_0__.useRef(listener);\n latestListener.current = listener;\n var eventHandler = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (event) {\n return latestListener.current(event);\n }, []);\n var timeoutId = react__WEBPACK_IMPORTED_MODULE_0__.useRef(undefined);\n\n if (true) {\n // This is fine to violate there conditional rule as environment variables will never change during component\n // lifecycle\n // eslint-disable-next-line react-hooks/rules-of-hooks\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function () {\n if (typeof target !== 'undefined' && typeof targetRef !== 'undefined') {\n throw new Error('`target` and `targetRef` props are mutually exclusive, please use one of them.');\n }\n\n if (typeof target === 'undefined' && typeof targetRef === 'undefined') {\n throw new Error(\"`target` and `targetRef` props are `undefined`, it' required to use one of them.\");\n }\n }, [target, targetRef]);\n }\n\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function () {\n var element = typeof targetRef === 'undefined' ? target : targetRef.current; // Store the current event to avoid triggering handlers immediately\n // Note this depends on a deprecated but extremely well supported quirk of the web platform\n // https://github.com/facebook/react/issues/20074\n\n var currentEvent = getWindowEvent(window);\n\n var conditionalHandler = function conditionalHandler(event) {\n // Skip if this event is the same as the one running when we added the handlers\n if (event === currentEvent) {\n currentEvent = undefined;\n return;\n }\n\n eventHandler(event);\n };\n\n if (isActionSupported(element, 'addEventListener')) {\n element.addEventListener(type, conditionalHandler, capture);\n } else if (true) {\n throw new Error('@fluentui/react-component-event-listener: Passed `element` is not valid or does not support `addEventListener()` method.');\n } // @ts-ignore We have a collision between types from DOM and @types/node\n\n\n timeoutId.current = setTimeout(function () {\n currentEvent = undefined;\n }, 1);\n return function () {\n clearTimeout(timeoutId.current);\n currentEvent = undefined;\n\n if (isActionSupported(element, 'removeEventListener')) {\n element.removeEventListener(type, conditionalHandler, capture);\n } else if (true) {\n throw new Error('@fluentui/react-component-event-listener: Passed `element` is not valid or does not support `removeEventListener()` method.');\n }\n };\n }, [capture, eventHandler, target, targetRef, type]);\n};\n//# sourceMappingURL=useEventListener.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZsdWVudHVpL3JlYWN0LWNvbXBvbmVudC1ldmVudC1saXN0ZW5lci9kaXN0L2VzL3VzZUV2ZW50TGlzdGVuZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQStCOztBQUUvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHlDQUFZO0FBQ25DO0FBQ0EscUJBQXFCLDhDQUFpQjtBQUN0QztBQUNBLEdBQUc7QUFDSCxrQkFBa0IseUNBQVk7O0FBRTlCLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsSUFBSSw0Q0FBZTtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBLEVBQUUsNENBQWU7QUFDakIsaUZBQWlGO0FBQ2pGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sU0FBUyxJQUFxQztBQUNwRDtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLFNBQVMsSUFBcUM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmx1ZW50dWkvcmVhY3QtY29tcG9uZW50LWV2ZW50LWxpc3RlbmVyL2Rpc3QvZXMvdXNlRXZlbnRMaXN0ZW5lci5qcz8yZmY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxudmFyIGdldFdpbmRvd0V2ZW50ID0gZnVuY3Rpb24gZ2V0V2luZG93RXZlbnQodGFyZ2V0KSB7XG4gIGlmICh0YXJnZXQpIHtcbiAgICB2YXIgX293bmVyRG9jdW1lbnQkZGVmYXVsLCBfb3duZXJEb2N1bWVudCwgX293bmVyRG9jdW1lbnQkZGVmYXVsMjtcblxuICAgIGlmICh0eXBlb2YgdGFyZ2V0LndpbmRvdyA9PT0gJ29iamVjdCcgJiYgdGFyZ2V0LndpbmRvdyA9PT0gdGFyZ2V0KSB7XG4gICAgICByZXR1cm4gdGFyZ2V0LmV2ZW50O1xuICAgIH1cblxuICAgIHJldHVybiAoX293bmVyRG9jdW1lbnQkZGVmYXVsID0gKF9vd25lckRvY3VtZW50ID0gdGFyZ2V0Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiAoX293bmVyRG9jdW1lbnQkZGVmYXVsMiA9IF9vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSA9PSBudWxsID8gdm9pZCAwIDogX293bmVyRG9jdW1lbnQkZGVmYXVsMi5ldmVudCkgIT0gbnVsbCA/IF9vd25lckRvY3VtZW50JGRlZmF1bCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG52YXIgaXNBY3Rpb25TdXBwb3J0ZWQgPSBmdW5jdGlvbiBpc0FjdGlvblN1cHBvcnRlZChlbGVtZW50LCBtZXRob2QpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAhIWVsZW1lbnRbbWV0aG9kXSA6IGZhbHNlO1xufTtcblxuZXhwb3J0IHZhciB1c2VFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gdXNlRXZlbnRMaXN0ZW5lcihvcHRpb25zKSB7XG4gIHZhciBjYXB0dXJlID0gb3B0aW9ucy5jYXB0dXJlLFxuICAgICAgbGlzdGVuZXIgPSBvcHRpb25zLmxpc3RlbmVyLFxuICAgICAgdHlwZSA9IG9wdGlvbnMudHlwZSxcbiAgICAgIHRhcmdldCA9IG9wdGlvbnMudGFyZ2V0LFxuICAgICAgdGFyZ2V0UmVmID0gb3B0aW9ucy50YXJnZXRSZWY7XG4gIHZhciBsYXRlc3RMaXN0ZW5lciA9IFJlYWN0LnVzZVJlZihsaXN0ZW5lcik7XG4gIGxhdGVzdExpc3RlbmVyLmN1cnJlbnQgPSBsaXN0ZW5lcjtcbiAgdmFyIGV2ZW50SGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiBsYXRlc3RMaXN0ZW5lci5jdXJyZW50KGV2ZW50KTtcbiAgfSwgW10pO1xuICB2YXIgdGltZW91dElkID0gUmVhY3QudXNlUmVmKHVuZGVmaW5lZCk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGlzIGZpbmUgdG8gdmlvbGF0ZSB0aGVyZSBjb25kaXRpb25hbCBydWxlIGFzIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIG5ldmVyIGNoYW5nZSBkdXJpbmcgY29tcG9uZW50XG4gICAgLy8gbGlmZWN5Y2xlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdGFyZ2V0UmVmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2B0YXJnZXRgIGFuZCBgdGFyZ2V0UmVmYCBwcm9wcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBwbGVhc2UgdXNlIG9uZSBvZiB0aGVtLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRhcmdldFJlZiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYHRhcmdldGAgYW5kIGB0YXJnZXRSZWZgIHByb3BzIGFyZSBgdW5kZWZpbmVkYCwgaXQnIHJlcXVpcmVkIHRvIHVzZSBvbmUgb2YgdGhlbS5cIik7XG4gICAgICB9XG4gICAgfSwgW3RhcmdldCwgdGFyZ2V0UmVmXSk7XG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbGVtZW50ID0gdHlwZW9mIHRhcmdldFJlZiA9PT0gJ3VuZGVmaW5lZCcgPyB0YXJnZXQgOiB0YXJnZXRSZWYuY3VycmVudDsgLy8gU3RvcmUgdGhlIGN1cnJlbnQgZXZlbnQgdG8gYXZvaWQgdHJpZ2dlcmluZyBoYW5kbGVycyBpbW1lZGlhdGVseVxuICAgIC8vIE5vdGUgdGhpcyBkZXBlbmRzIG9uIGEgZGVwcmVjYXRlZCBidXQgZXh0cmVtZWx5IHdlbGwgc3VwcG9ydGVkIHF1aXJrIG9mIHRoZSB3ZWIgcGxhdGZvcm1cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzIwMDc0XG5cbiAgICB2YXIgY3VycmVudEV2ZW50ID0gZ2V0V2luZG93RXZlbnQod2luZG93KTtcblxuICAgIHZhciBjb25kaXRpb25hbEhhbmRsZXIgPSBmdW5jdGlvbiBjb25kaXRpb25hbEhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIC8vIFNraXAgaWYgdGhpcyBldmVudCBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIHJ1bm5pbmcgd2hlbiB3ZSBhZGRlZCB0aGUgaGFuZGxlcnNcbiAgICAgIGlmIChldmVudCA9PT0gY3VycmVudEV2ZW50KSB7XG4gICAgICAgIGN1cnJlbnRFdmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudEhhbmRsZXIoZXZlbnQpO1xuICAgIH07XG5cbiAgICBpZiAoaXNBY3Rpb25TdXBwb3J0ZWQoZWxlbWVudCwgJ2FkZEV2ZW50TGlzdGVuZXInKSkge1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNvbmRpdGlvbmFsSGFuZGxlciwgY2FwdHVyZSk7XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0BmbHVlbnR1aS9yZWFjdC1jb21wb25lbnQtZXZlbnQtbGlzdGVuZXI6IFBhc3NlZCBgZWxlbWVudGAgaXMgbm90IHZhbGlkIG9yIGRvZXMgbm90IHN1cHBvcnQgYGFkZEV2ZW50TGlzdGVuZXIoKWAgbWV0aG9kLicpO1xuICAgIH0gLy8gQHRzLWlnbm9yZSBXZSBoYXZlIGEgY29sbGlzaW9uIGJldHdlZW4gdHlwZXMgZnJvbSBET00gYW5kIEB0eXBlcy9ub2RlXG5cblxuICAgIHRpbWVvdXRJZC5jdXJyZW50ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50RXZlbnQgPSB1bmRlZmluZWQ7XG4gICAgfSwgMSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQuY3VycmVudCk7XG4gICAgICBjdXJyZW50RXZlbnQgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChpc0FjdGlvblN1cHBvcnRlZChlbGVtZW50LCAncmVtb3ZlRXZlbnRMaXN0ZW5lcicpKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjb25kaXRpb25hbEhhbmRsZXIsIGNhcHR1cmUpO1xuICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQGZsdWVudHVpL3JlYWN0LWNvbXBvbmVudC1ldmVudC1saXN0ZW5lcjogUGFzc2VkIGBlbGVtZW50YCBpcyBub3QgdmFsaWQgb3IgZG9lcyBub3Qgc3VwcG9ydCBgcmVtb3ZlRXZlbnRMaXN0ZW5lcigpYCBtZXRob2QuJyk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2NhcHR1cmUsIGV2ZW50SGFuZGxlciwgdGFyZ2V0LCB0YXJnZXRSZWYsIHR5cGVdKTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VFdmVudExpc3RlbmVyLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fluentui/react-component-event-listener/dist/es/useEventListener.js\n\n}")},"./node_modules/@fluentui/react-component-ref/dist/es/Ref.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Ref: () => (/* binding */ Ref)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js");\n/* harmony import */ var _RefFindNode__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./RefFindNode */ "./node_modules/@fluentui/react-component-ref/dist/es/RefFindNode.js");\n/* harmony import */ var _RefForward__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./RefForward */ "./node_modules/@fluentui/react-component-ref/dist/es/RefForward.js");\n\nvar _excluded = ["children", "innerRef"];\n\n\n\n\nvar Ref = function Ref(props) {\n var children = props.children,\n innerRef = props.innerRef,\n rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(props, _excluded);\n\n var child = react__WEBPACK_IMPORTED_MODULE_1__.Children.only(children);\n var ElementType = react_is__WEBPACK_IMPORTED_MODULE_2__.isForwardRef(child) ? _RefForward__WEBPACK_IMPORTED_MODULE_4__.RefForward : _RefFindNode__WEBPACK_IMPORTED_MODULE_3__.RefFindNode;\n var childWithProps = child && rest && Object.keys(rest).length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.cloneElement(child, rest) : child;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(ElementType, {\n innerRef: innerRef\n }, childWithProps);\n};\n//# sourceMappingURL=Ref.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZsdWVudHVpL3JlYWN0LWNvbXBvbmVudC1yZWYvZGlzdC9lcy9SZWYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFvRztBQUNwRztBQUMrQjtBQUNLO0FBQ1E7QUFDRjtBQUNuQztBQUNQO0FBQ0E7QUFDQSxhQUFhLG1HQUE2Qjs7QUFFMUMsY0FBYywyQ0FBYztBQUM1QixvQkFBb0Isa0RBQW9CLFVBQVUsbURBQVUsR0FBRyxxREFBVztBQUMxRSxvRkFBb0YsK0NBQWtCO0FBQ3RHLHNCQUFzQixnREFBbUI7QUFDekM7QUFDQSxHQUFHO0FBQ0g7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0BmbHVlbnR1aS9yZWFjdC1jb21wb25lbnQtcmVmL2Rpc3QvZXMvUmVmLmpzP2U0YzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG52YXIgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJpbm5lclJlZlwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFJlYWN0SXMgZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IHsgUmVmRmluZE5vZGUgfSBmcm9tICcuL1JlZkZpbmROb2RlJztcbmltcG9ydCB7IFJlZkZvcndhcmQgfSBmcm9tICcuL1JlZkZvcndhcmQnO1xuZXhwb3J0IHZhciBSZWYgPSBmdW5jdGlvbiBSZWYocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICBpbm5lclJlZiA9IHByb3BzLmlubmVyUmVmLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBjaGlsZCA9IFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pO1xuICB2YXIgRWxlbWVudFR5cGUgPSBSZWFjdElzLmlzRm9yd2FyZFJlZihjaGlsZCkgPyBSZWZGb3J3YXJkIDogUmVmRmluZE5vZGU7XG4gIHZhciBjaGlsZFdpdGhQcm9wcyA9IGNoaWxkICYmIHJlc3QgJiYgT2JqZWN0LmtleXMocmVzdCkubGVuZ3RoID4gMCA/IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHJlc3QpIDogY2hpbGQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChFbGVtZW50VHlwZSwge1xuICAgIGlubmVyUmVmOiBpbm5lclJlZlxuICB9LCBjaGlsZFdpdGhQcm9wcyk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVmLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fluentui/react-component-ref/dist/es/Ref.js\n\n}')},"./node_modules/@fluentui/react-component-ref/dist/es/RefFindNode.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RefFindNode: () => (/* binding */ RefFindNode)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "./node_modules/@fluentui/react-component-ref/dist/es/utils.js");\n\n\n\n // ========================================================\n// react/packages/react-reconciler/src/ReactFiber.js\n// ========================================================\n\n/**\n * Detects if a passed element is a Fiber object instead of an element. Is needed as `ReactDOM.findDOMNode()` returns\n * a Fiber in `react-test-renderer` that can cause issues with tests. Is used only in non-production env.\n *\n * @see https://github.com/facebook/react/issues/7371#issuecomment-317396864\n * @see https://github.com/Semantic-Org/Semantic-UI-React/issues/4061#issuecomment-694895617\n */\nfunction isFiberRef(node) {\n if (node === null) {\n return false;\n }\n\n if (node instanceof Element || node instanceof Text) {\n return false;\n }\n\n return !!(node.type && node.tag);\n}\n\nvar RefFindNode = /*#__PURE__*/function (_React$Component) {\n ;(0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(RefFindNode, _React$Component);\n\n function RefFindNode() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.prevNode = void 0;\n return _this;\n }\n\n var _proto = RefFindNode.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var currentNode = react_dom__WEBPACK_IMPORTED_MODULE_2__.findDOMNode(this);\n\n if (true) {\n if (isFiberRef(currentNode)) {\n currentNode = null;\n }\n }\n\n this.prevNode = currentNode;\n (0,_utils__WEBPACK_IMPORTED_MODULE_3__.handleRef)(this.props.innerRef, currentNode);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var currentNode = react_dom__WEBPACK_IMPORTED_MODULE_2__.findDOMNode(this);\n\n if (true) {\n if (isFiberRef(currentNode)) {\n currentNode = null;\n }\n }\n\n if (this.prevNode !== currentNode) {\n this.prevNode = currentNode;\n (0,_utils__WEBPACK_IMPORTED_MODULE_3__.handleRef)(this.props.innerRef, currentNode);\n }\n\n if (prevProps.innerRef !== this.props.innerRef) {\n (0,_utils__WEBPACK_IMPORTED_MODULE_3__.handleRef)(this.props.innerRef, currentNode);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n (0,_utils__WEBPACK_IMPORTED_MODULE_3__.handleRef)(this.props.innerRef, null);\n delete this.prevNode;\n };\n\n _proto.render = function render() {\n var children = this.props.children;\n return children;\n };\n\n return RefFindNode;\n}(react__WEBPACK_IMPORTED_MODULE_1__.Component);\n//# sourceMappingURL=RefFindNode.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZsdWVudHVpL3JlYWN0LWNvbXBvbmVudC1yZWYvZGlzdC9lcy9SZWZGaW5kTm9kZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBc0U7QUFDdkM7QUFDTztBQUNGLENBQUM7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVPO0FBQ1AsRUFBRSxxRkFBYzs7QUFFaEI7QUFDQTs7QUFFQSx3RUFBd0UsYUFBYTtBQUNyRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esc0JBQXNCLGtEQUFvQjs7QUFFMUMsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksaURBQVM7QUFDYjs7QUFFQTtBQUNBLHNCQUFzQixrREFBb0I7O0FBRTFDLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0saURBQVM7QUFDZjs7QUFFQTtBQUNBLE1BQU0saURBQVM7QUFDZjtBQUNBOztBQUVBO0FBQ0EsSUFBSSxpREFBUztBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDLENBQUMsNENBQWU7QUFDakIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmx1ZW50dWkvcmVhY3QtY29tcG9uZW50LXJlZi9kaXN0L2VzL1JlZkZpbmROb2RlLmpzPzY5OTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgaGFuZGxlUmVmIH0gZnJvbSAnLi91dGlscyc7IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyByZWFjdC9wYWNrYWdlcy9yZWFjdC1yZWNvbmNpbGVyL3NyYy9SZWFjdEZpYmVyLmpzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIERldGVjdHMgaWYgYSBwYXNzZWQgZWxlbWVudCBpcyBhIEZpYmVyIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGVsZW1lbnQuIElzIG5lZWRlZCBhcyBgUmVhY3RET00uZmluZERPTU5vZGUoKWAgcmV0dXJuc1xuICogYSBGaWJlciBpbiBgcmVhY3QtdGVzdC1yZW5kZXJlcmAgdGhhdCBjYW4gY2F1c2UgaXNzdWVzIHdpdGggdGVzdHMuIElzIHVzZWQgb25seSBpbiBub24tcHJvZHVjdGlvbiBlbnYuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzczNzEjaXNzdWVjb21tZW50LTMxNzM5Njg2NFxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vU2VtYW50aWMtT3JnL1NlbWFudGljLVVJLVJlYWN0L2lzc3Vlcy80MDYxI2lzc3VlY29tbWVudC02OTQ4OTU2MTdcbiAqL1xuZnVuY3Rpb24gaXNGaWJlclJlZihub2RlKSB7XG4gIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBUZXh0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuICEhKG5vZGUudHlwZSAmJiBub2RlLnRhZyk7XG59XG5cbmV4cG9ydCB2YXIgUmVmRmluZE5vZGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUmVmRmluZE5vZGUsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJlZkZpbmROb2RlKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSB8fCB0aGlzO1xuICAgIF90aGlzLnByZXZOb2RlID0gdm9pZCAwO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSZWZGaW5kTm9kZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdmFyIGN1cnJlbnROb2RlID0gUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGlzRmliZXJSZWYoY3VycmVudE5vZGUpKSB7XG4gICAgICAgIGN1cnJlbnROb2RlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnByZXZOb2RlID0gY3VycmVudE5vZGU7XG4gICAgaGFuZGxlUmVmKHRoaXMucHJvcHMuaW5uZXJSZWYsIGN1cnJlbnROb2RlKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBjdXJyZW50Tm9kZSA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZpYmVyUmVmKGN1cnJlbnROb2RlKSkge1xuICAgICAgICBjdXJyZW50Tm9kZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJldk5vZGUgIT09IGN1cnJlbnROb2RlKSB7XG4gICAgICB0aGlzLnByZXZOb2RlID0gY3VycmVudE5vZGU7XG4gICAgICBoYW5kbGVSZWYodGhpcy5wcm9wcy5pbm5lclJlZiwgY3VycmVudE5vZGUpO1xuICAgIH1cblxuICAgIGlmIChwcmV2UHJvcHMuaW5uZXJSZWYgIT09IHRoaXMucHJvcHMuaW5uZXJSZWYpIHtcbiAgICAgIGhhbmRsZVJlZih0aGlzLnByb3BzLmlubmVyUmVmLCBjdXJyZW50Tm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIGhhbmRsZVJlZih0aGlzLnByb3BzLmlubmVyUmVmLCBudWxsKTtcbiAgICBkZWxldGUgdGhpcy5wcmV2Tm9kZTtcbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9O1xuXG4gIHJldHVybiBSZWZGaW5kTm9kZTtcbn0oUmVhY3QuQ29tcG9uZW50KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlZkZpbmROb2RlLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@fluentui/react-component-ref/dist/es/RefFindNode.js\n\n}')},"./node_modules/@fluentui/react-component-ref/dist/es/RefForward.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RefForward: () => (/* binding */ RefForward)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ "./node_modules/@fluentui/react-component-ref/dist/es/utils.js");\n\n\n\nvar RefForward = /*#__PURE__*/function (_React$Component) {\n (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(RefForward, _React$Component);\n\n function RefForward() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.currentNode = void 0;\n\n _this.handleRefOverride = function (node) {\n var _this$props = _this.props,\n children = _this$props.children,\n innerRef = _this$props.innerRef;\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.handleRef)(children.ref, node);\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.handleRef)(innerRef, node);\n _this.currentNode = node;\n };\n\n return _this;\n }\n\n var _proto = RefForward.prototype;\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (prevProps.innerRef !== this.props.innerRef) {\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.handleRef)(this.props.innerRef, this.currentNode);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n delete this.currentNode;\n };\n\n _proto.render = function render() {\n var children = this.props.children;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.cloneElement(children, {\n ref: this.handleRefOverride\n });\n };\n\n return RefForward;\n}(react__WEBPACK_IMPORTED_MODULE_1__.Component);\n//# sourceMappingURL=RefForward.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZsdWVudHVpL3JlYWN0LWNvbXBvbmVudC1yZWYvZGlzdC9lcy9SZWZGb3J3YXJkLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXNFO0FBQ3ZDO0FBQ0s7QUFDN0I7QUFDUCxFQUFFLG9GQUFjOztBQUVoQjtBQUNBOztBQUVBLHdFQUF3RSxhQUFhO0FBQ3JGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0saURBQVM7QUFDZixNQUFNLGlEQUFTO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLGlEQUFTO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QiwrQ0FBa0I7QUFDMUM7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxDQUFDLENBQUMsNENBQWU7QUFDakIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmx1ZW50dWkvcmVhY3QtY29tcG9uZW50LXJlZi9kaXN0L2VzL1JlZkZvcndhcmQuanM/OTBlMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGhhbmRsZVJlZiB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBSZWZGb3J3YXJkID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFJlZkZvcndhcmQsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJlZkZvcndhcmQoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuY3VycmVudE5vZGUgPSB2b2lkIDA7XG5cbiAgICBfdGhpcy5oYW5kbGVSZWZPdmVycmlkZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICAgIGlubmVyUmVmID0gX3RoaXMkcHJvcHMuaW5uZXJSZWY7XG4gICAgICBoYW5kbGVSZWYoY2hpbGRyZW4ucmVmLCBub2RlKTtcbiAgICAgIGhhbmRsZVJlZihpbm5lclJlZiwgbm9kZSk7XG4gICAgICBfdGhpcy5jdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSZWZGb3J3YXJkLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIGlmIChwcmV2UHJvcHMuaW5uZXJSZWYgIT09IHRoaXMucHJvcHMuaW5uZXJSZWYpIHtcbiAgICAgIGhhbmRsZVJlZih0aGlzLnByb3BzLmlubmVyUmVmLCB0aGlzLmN1cnJlbnROb2RlKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgZGVsZXRlIHRoaXMuY3VycmVudE5vZGU7XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICByZWY6IHRoaXMuaGFuZGxlUmVmT3ZlcnJpZGVcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gUmVmRm9yd2FyZDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlZkZvcndhcmQuanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fluentui/react-component-ref/dist/es/RefForward.js\n\n}')},"./node_modules/@fluentui/react-component-ref/dist/es/utils.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ handleRef: () => (/* binding */ handleRef),\n/* harmony export */ isRefObject: () => (/* binding */ isRefObject)\n/* harmony export */ });\n/**\n * The function that correctly handles passing refs.\n *\n * @param ref - An ref object or function\n * @param node - A node that should be passed by ref\n */\nvar handleRef = function handleRef(ref, node) {\n if (true) {\n if (typeof ref === 'string') {\n throw new Error('We do not support refs as string, this is a legacy API and will be likely to be removed in one of the future releases of React.');\n }\n }\n\n if (typeof ref === 'function') {\n ref(node);\n return;\n }\n\n if (ref !== null && typeof ref === 'object') {\n // The `current` property is defined as readonly, however it's a valid way because\n // `ref` is a mutable object\n ref.current = node;\n }\n};\n/** Checks that the passed object is a valid React ref object. */\n\nvar isRefObject = function isRefObject(ref) {\n return (// https://github.com/facebook/react/blob/v16.8.2/packages/react-reconciler/src/ReactFiberCommitWork.js#L665\n ref !== null && typeof ref === 'object' && ref.hasOwnProperty('current')\n );\n};\n//# sourceMappingURL=utils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGZsdWVudHVpL3JlYWN0LWNvbXBvbmVudC1yZWYvZGlzdC9lcy91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AZmx1ZW50dWkvcmVhY3QtY29tcG9uZW50LXJlZi9kaXN0L2VzL3V0aWxzLmpzP2QzODIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgZnVuY3Rpb24gdGhhdCBjb3JyZWN0bHkgaGFuZGxlcyBwYXNzaW5nIHJlZnMuXG4gKlxuICogQHBhcmFtIHJlZiAtIEFuIHJlZiBvYmplY3Qgb3IgZnVuY3Rpb25cbiAqIEBwYXJhbSBub2RlIC0gQSBub2RlIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBieSByZWZcbiAqL1xuZXhwb3J0IHZhciBoYW5kbGVSZWYgPSBmdW5jdGlvbiBoYW5kbGVSZWYocmVmLCBub2RlKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlIGRvIG5vdCBzdXBwb3J0IHJlZnMgYXMgc3RyaW5nLCB0aGlzIGlzIGEgbGVnYWN5IEFQSSBhbmQgd2lsbCBiZSBsaWtlbHkgdG8gYmUgcmVtb3ZlZCBpbiBvbmUgb2YgdGhlIGZ1dHVyZSByZWxlYXNlcyBvZiBSZWFjdC4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlZihub2RlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocmVmICE9PSBudWxsICYmIHR5cGVvZiByZWYgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gVGhlIGBjdXJyZW50YCBwcm9wZXJ0eSBpcyBkZWZpbmVkIGFzIHJlYWRvbmx5LCBob3dldmVyIGl0J3MgYSB2YWxpZCB3YXkgYmVjYXVzZVxuICAgIC8vIGByZWZgIGlzIGEgbXV0YWJsZSBvYmplY3RcbiAgICByZWYuY3VycmVudCA9IG5vZGU7XG4gIH1cbn07XG4vKiogQ2hlY2tzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSB2YWxpZCBSZWFjdCByZWYgb2JqZWN0LiAqL1xuXG5leHBvcnQgdmFyIGlzUmVmT2JqZWN0ID0gZnVuY3Rpb24gaXNSZWZPYmplY3QocmVmKSB7XG4gIHJldHVybiAoLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvdjE2LjguMi9wYWNrYWdlcy9yZWFjdC1yZWNvbmNpbGVyL3NyYy9SZWFjdEZpYmVyQ29tbWl0V29yay5qcyNMNjY1XG4gICAgcmVmICE9PSBudWxsICYmIHR5cGVvZiByZWYgPT09ICdvYmplY3QnICYmIHJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpXG4gICk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@fluentui/react-component-ref/dist/es/utils.js\n\n}")},"./node_modules/@popperjs/core/lib/createPopper.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createPopper: () => (/* binding */ createPopper),\n/* harmony export */ popperGenerator: () => (/* binding */ popperGenerator)\n/* harmony export */ });\n/* empty/unused harmony star reexport */\n/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js");\n/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");\n/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/orderModifiers.js */ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js");\n/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/debounce.js */ "./node_modules/@popperjs/core/lib/utils/debounce.js");\n/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/mergeByName.js */ "./node_modules/@popperjs/core/lib/utils/mergeByName.js");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");\n\n\n\n\n\n\n\n\n\nvar DEFAULT_OPTIONS = {\n placement: \'bottom\',\n modifiers: [],\n strategy: \'absolute\'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === \'function\');\n });\n}\n\nfunction popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: \'bottom\',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === \'function\' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: (0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_8__.isElement)(reference) ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_2__["default"])(reference) : reference.contextElement ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_2__["default"])(reference.contextElement) : [],\n popper: (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_2__["default"])(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = (0,_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_4__["default"])((0,_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_6__["default"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don\'t proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: (0,_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(reference, (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(popper), state.options.strategy === \'fixed\'),\n popper: (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_1__["default"])(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn\'t persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === \'function\') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: (0,_utils_debounce_js__WEBPACK_IMPORTED_MODULE_5__["default"])(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === \'function\') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nvar createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUErRDtBQUNOO0FBQ1E7QUFDSjtBQUNOO0FBQ1o7QUFDTTtBQUNNO0FBQ0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNFQUFzRSxhQUFhO0FBQ25GO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1Asb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBLHFCQUFxQixtRUFBUyxjQUFjLDJFQUFpQix5Q0FBeUMsMkVBQWlCO0FBQ3ZILGtCQUFrQiwyRUFBaUI7QUFDbkMsV0FBVztBQUNYOztBQUVBLCtCQUErQixvRUFBYyxDQUFDLGlFQUFXLHlEQUF5RDs7QUFFbEg7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDOztBQUVBO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjtBQUNBLHFCQUFxQiwwRUFBZ0IsWUFBWSx5RUFBZTtBQUNoRSxrQkFBa0IsdUVBQWE7QUFDL0IsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQSw2Q0FBNkMsS0FBSzs7QUFFbEQ7QUFDQSxzRUFBc0U7QUFDdEUsU0FBUzs7QUFFVCw0QkFBNEIsdUNBQXVDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFO0FBQ2hFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxjQUFjLDhEQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOztBQUVYOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ08sbURBQW1EIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcz82Y2VlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvb3JkZXJNb2RpZmllcnMuanNcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi91dGlscy9kZWJvdW5jZS5qc1wiO1xuaW1wb3J0IG1lcmdlQnlOYW1lIGZyb20gXCIuL3V0aWxzL21lcmdlQnlOYW1lLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJ1xufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAhYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zKSB7XG4gIGlmIChnZW5lcmF0b3JPcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBnZW5lcmF0b3JPcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX2dlbmVyYXRvck9wdGlvbnMgPSBnZW5lcmF0b3JPcHRpb25zLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE1vZGlmaWVycyxcbiAgICAgIGRlZmF1bHRNb2RpZmllcnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPT09IHZvaWQgMCA/IFtdIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuICAgICAgZGVmYXVsdE9wdGlvbnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID09PSB2b2lkIDAgPyBERUZBVUxUX09QVElPTlMgOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICBvcmRlcmVkTW9kaWZpZXJzOiBbXSxcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgZGVmYXVsdE9wdGlvbnMpLFxuICAgICAgbW9kaWZpZXJzRGF0YToge30sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyOiBwb3BwZXJcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIHN0eWxlczoge31cbiAgICB9O1xuICAgIHZhciBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgdmFyIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdmFyIGluc3RhbmNlID0ge1xuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gc2V0T3B0aW9ucyhzZXRPcHRpb25zQWN0aW9uKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHNldE9wdGlvbnNBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBzZXRPcHRpb25zQWN0aW9uKHN0YXRlLm9wdGlvbnMpIDogc2V0T3B0aW9uc0FjdGlvbjtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBzdGF0ZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIHN0YXRlLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogaXNFbGVtZW50KHJlZmVyZW5jZSkgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UpIDogcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50ID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlLmNvbnRleHRFbGVtZW50KSA6IFtdLFxuICAgICAgICAgIHBvcHBlcjogbGlzdFNjcm9sbFBhcmVudHMocG9wcGVyKVxuICAgICAgICB9OyAvLyBPcmRlcnMgdGhlIG1vZGlmaWVycyBiYXNlZCBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGBwaGFzZWBcbiAgICAgICAgLy8gcHJvcGVydGllc1xuXG4gICAgICAgIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJNb2RpZmllcnMobWVyZ2VCeU5hbWUoW10uY29uY2F0KGRlZmF1bHRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSkpOyAvLyBTdHJpcCBvdXQgZGlzYWJsZWQgbW9kaWZpZXJzXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uZW5hYmxlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUg4oCTIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlciByZWN0cyB0byBiZSByZWFkIGJ5IG1vZGlmaWVyc1xuXG5cbiAgICAgICAgc3RhdGUucmVjdHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBnZXRDb21wb3NpdGVSZWN0KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCcpLFxuICAgICAgICAgIHBvcHBlcjogZ2V0TGF5b3V0UmVjdChwb3BwZXIpXG4gICAgICAgIH07IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZS4gVGhlXG4gICAgICAgIC8vIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRoZSBgZmxpcGAgbW9kaWZpZXIgY2hhbmdpbmcgdGhlXG4gICAgICAgIC8vIHBsYWNlbWVudCwgd2hpY2ggdGhlbiBuZWVkcyB0byByZS1ydW4gYWxsIHRoZSBtb2RpZmllcnMsIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGxvZ2ljIHdhcyBwcmV2aW91c2x5IHJhbiBmb3IgdGhlIHByZXZpb3VzIHBsYWNlbWVudCBhbmQgaXMgdGhlcmVmb3JlXG4gICAgICAgIC8vIHN0YWxlL2luY29ycmVjdFxuXG4gICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50OyAvLyBPbiBlYWNoIHVwZGF0ZSBjeWNsZSwgdGhlIGBtb2RpZmllcnNEYXRhYCBwcm9wZXJ0eSBmb3IgZWFjaCBtb2RpZmllclxuICAgICAgICAvLyBpcyBmaWxsZWQgd2l0aCB0aGUgaW5pdGlhbCBkYXRhIHNwZWNpZmllZCBieSB0aGUgbW9kaWZpZXIuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gaXQgZG9lc24ndCBwZXJzaXN0IGFuZCBpcyBmcmVzaCBvbiBlYWNoIHVwZGF0ZS5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHBlcnNpc3RlbnQgZGF0YSwgdXNlIGAke25hbWV9I3BlcnNpc3RlbnRgXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5tb2RpZmllcnNEYXRhW21vZGlmaWVyLm5hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kaWZpZXIuZGF0YSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGlmIChzdGF0ZS5yZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3N0YXRlJG9yZGVyZWRNb2RpZmllID0gc3RhdGUub3JkZXJlZE1vZGlmaWVyc1tpbmRleF0sXG4gICAgICAgICAgICAgIGZuID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLmZuLFxuICAgICAgICAgICAgICBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm9wdGlvbnMsXG4gICAgICAgICAgICAgIF9vcHRpb25zID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9PT0gdm9pZCAwID8ge30gOiBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyLFxuICAgICAgICAgICAgICBuYW1lID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm5hbWU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGZuKHtcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBvcHRpb25zOiBfb3B0aW9ucyxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgICAgICB9KSB8fCBzdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBBc3luYyBhbmQgb3B0aW1pc3RpY2FsbHkgb3B0aW1pemVkIHVwZGF0ZSDigJMgaXQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgaWZcbiAgICAgIC8vIG5vdCBuZWNlc3NhcnkgKGRlYm91bmNlZCB0byBydW4gYXQgbW9zdCBvbmNlLXBlci10aWNrKVxuICAgICAgdXBkYXRlOiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgcmVzb2x2ZShzdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgICAgICAgX3JlZiRvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucyA9IF9yZWYkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmLmVmZmVjdDtcblxuICAgICAgICBpZiAodHlwZW9mIGVmZmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjbGVhbnVwRm4gPSBlZmZlY3Qoe1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhciBub29wRm4gPSBmdW5jdGlvbiBub29wRm4oKSB7fTtcblxuICAgICAgICAgIGVmZmVjdENsZWFudXBGbnMucHVzaChjbGVhbnVwRm4gfHwgbm9vcEZuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9KTtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59XG5leHBvcnQgdmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdyB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/createPopper.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/contains.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ contains)\n/* harmony export */ });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");\n\nfunction contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUErQztBQUNoQztBQUNmLDJEQUEyRDs7QUFFM0Q7QUFDQTtBQUNBLElBQUk7QUFDSix1QkFBdUIsNERBQVk7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQSxRQUFRO0FBQ1IsTUFBTTs7O0FBR047QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvY29udGFpbnMuanM/N2YzNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7XG4gIHZhciByb290Tm9kZSA9IGNoaWxkLmdldFJvb3ROb2RlICYmIGNoaWxkLmdldFJvb3ROb2RlKCk7IC8vIEZpcnN0LCBhdHRlbXB0IHdpdGggZmFzdGVyIG5hdGl2ZSBtZXRob2RcblxuICBpZiAocGFyZW50LmNvbnRhaW5zKGNoaWxkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIHRoZW4gZmFsbGJhY2sgdG8gY3VzdG9tIGltcGxlbWVudGF0aW9uIHdpdGggU2hhZG93IERPTSBzdXBwb3J0XG4gIGVsc2UgaWYgKHJvb3ROb2RlICYmIGlzU2hhZG93Um9vdChyb290Tm9kZSkpIHtcbiAgICAgIHZhciBuZXh0ID0gY2hpbGQ7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKG5leHQgJiYgcGFyZW50LmlzU2FtZU5vZGUobmV4dCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ106IG5lZWQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlzLi4uXG5cblxuICAgICAgICBuZXh0ID0gbmV4dC5wYXJlbnROb2RlIHx8IG5leHQuaG9zdDtcbiAgICAgIH0gd2hpbGUgKG5leHQpO1xuICAgIH0gLy8gR2l2ZSB1cCwgdGhlIHJlc3VsdCBpcyBmYWxzZVxuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/contains.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getBoundingClientRect)\n/* harmony export */ });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");\n/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isLayoutViewport.js */ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js");\n\n\n\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {\n scaleX = element.offsetWidth > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !(0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__["default"])() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBMkQ7QUFDbEI7QUFDRjtBQUNjO0FBQ3RDO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLDZEQUFhO0FBQ25DLHVDQUF1QyxxREFBSztBQUM1Qyx3Q0FBd0MscURBQUs7QUFDN0M7O0FBRUEsYUFBYSx5REFBUyxZQUFZLHlEQUFTO0FBQzNDOztBQUVBLDBCQUEwQixnRUFBZ0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanM/MGY4OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cblxuICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSAxO1xuICB2YXIgc2NhbGVZID0gMTtcblxuICBpZiAoaW5jbHVkZVNjYWxlICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBzY2FsZVggPSBlbGVtZW50Lm9mZnNldFdpZHRoID4gMCA/IHJvdW5kKGNsaWVudFJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxIDogMTtcbiAgICBzY2FsZVkgPSBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDAgPyByb3VuZChjbGllbnRSZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxIDogMTtcbiAgfVxuXG4gIHZhciBfcmVmID0gaXNFbGVtZW50KGVsZW1lbnQpID8gZ2V0V2luZG93KGVsZW1lbnQpIDogd2luZG93LFxuICAgICAgdmlzdWFsVmlld3BvcnQgPSBfcmVmLnZpc3VhbFZpZXdwb3J0O1xuXG4gIHZhciBhZGRWaXN1YWxPZmZzZXRzID0gIWlzTGF5b3V0Vmlld3BvcnQoKSAmJiBpc0ZpeGVkU3RyYXRlZ3k7XG4gIHZhciB4ID0gKGNsaWVudFJlY3QubGVmdCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCA6IDApKSAvIHNjYWxlWDtcbiAgdmFyIHkgPSAoY2xpZW50UmVjdC50b3AgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcCA6IDApKSAvIHNjYWxlWTtcbiAgdmFyIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlWDtcbiAgdmFyIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGVZO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgbGVmdDogeCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getClippingRect)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");\n/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getViewportRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js");\n/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js");\n/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./listScrollParents.js */ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js");\n/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");\n/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");\n/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_8__["default"])(element, false, strategy === \'fixed\');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport ? (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_12__["default"])((0,_getViewportRect_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element, strategy)) : (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_7__.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_12__["default"])((0,_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element)));\n} // A "clipping parent" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = (0,_listScrollParents_js__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_9__["default"])(element));\n var canEscapeClipping = [\'absolute\', \'fixed\'].indexOf((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_6__["default"])(element).position) >= 0;\n var clipperElement = canEscapeClipping && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_7__.isHTMLElement)(element) ? (0,_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_4__["default"])(element) : element;\n\n if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_7__.isElement)(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_7__.isElement)(clippingParent) && (0,_contains_js__WEBPACK_IMPORTED_MODULE_10__["default"])(clippingParent, clipperElement) && (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_11__["default"])(clippingParent) !== \'body\';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === \'clippingParents\' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.top, accRect.top);\n accRect.right = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.right, accRect.right);\n accRect.bottom = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.bottom, accRect.bottom);\n accRect.left = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXVDO0FBQ1k7QUFDQTtBQUNJO0FBQ0o7QUFDTTtBQUNKO0FBQ007QUFDSTtBQUNoQjtBQUNWO0FBQ007QUFDaUI7QUFDaEI7O0FBRTVDO0FBQ0EsYUFBYSxxRUFBcUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIsK0NBQVEsR0FBRyx1RUFBZ0IsQ0FBQywrREFBZSx1QkFBdUIseURBQVMsMEVBQTBFLHVFQUFnQixDQUFDLCtEQUFlLENBQUMsa0VBQWtCO0FBQ3BPLEVBQUU7QUFDRjtBQUNBOzs7QUFHQTtBQUNBLHdCQUF3QixpRUFBaUIsQ0FBQyw2REFBYTtBQUN2RCx3REFBd0QsZ0VBQWdCO0FBQ3hFLDRDQUE0Qyw2REFBYSxZQUFZLCtEQUFlOztBQUVwRixPQUFPLHlEQUFTO0FBQ2hCO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQSxXQUFXLHlEQUFTLG9CQUFvQix5REFBUSxvQ0FBb0MsNERBQVc7QUFDL0YsR0FBRztBQUNILEVBQUU7QUFDRjs7O0FBR2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG9EQUFHO0FBQ3JCLG9CQUFvQixvREFBRztBQUN2QixxQkFBcUIsb0RBQUc7QUFDeEIsbUJBQW1CLG9EQUFHO0FBQ3RCO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzPzlkZTAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getCompositeRect)\n/* harmony export */ });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");\n/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getNodeScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");\n\n\n\n\n\n\n\n\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_7__.round)(rect.width) / element.offsetWidth || 1;\n var scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_7__.round)(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nfunction getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(offsetParent);\n var offsetParentIsScaled = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(offsetParent) && isElementScaled(offsetParent);\n var documentElement = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__["default"])(offsetParent);\n var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_2__["default"])(offsetParent) !== \'body\' || // https://github.com/popperjs/popper-core/issues/1078\n (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(documentElement)) {\n scroll = (0,_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent);\n }\n\n if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(offsetParent)) {\n offsets = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_4__["default"])(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUErRDtBQUNoQjtBQUNKO0FBQ0s7QUFDVztBQUNGO0FBQ1I7QUFDUjs7QUFFekM7QUFDQTtBQUNBLGVBQWUscURBQUs7QUFDcEIsZUFBZSxxREFBSztBQUNwQjtBQUNBLEVBQUU7QUFDRjs7O0FBR2U7QUFDZjtBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDLDZEQUFhO0FBQzdDLDZCQUE2Qiw2REFBYTtBQUMxQyx3QkFBd0Isa0VBQWtCO0FBQzFDLGFBQWEscUVBQXFCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLDJEQUFXO0FBQ25CLElBQUksOERBQWM7QUFDbEIsZUFBZSw2REFBYTtBQUM1Qjs7QUFFQSxRQUFRLDZEQUFhO0FBQ3JCLGdCQUFnQixxRUFBcUI7QUFDckM7QUFDQTtBQUNBLE1BQU07QUFDTixrQkFBa0IsbUVBQW1CO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanM/ZDExNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getComputedStyle)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");\n\nfunction getComputedStyle(element) {\n return (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element).getComputedStyle(element);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXVDO0FBQ3hCO0FBQ2YsU0FBUyx5REFBUztBQUNsQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qcz9iNTE5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getDocumentElement)\n/* harmony export */ });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");\n\nfunction getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return (((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBNEM7QUFDN0I7QUFDZjtBQUNBLFdBQVcseURBQVM7QUFDcEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzP2VmNTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICByZXR1cm4gKChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgZWxlbWVudC5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KS5kb2N1bWVudEVsZW1lbnQ7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getDocumentRect)\n/* harmony export */ });\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js");\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");\n\n\n\n\n // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);\n var winScroll = (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_3__["default"])(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_4__.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_4__.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element);\n var y = -winScroll.scrollTop;\n\n if ((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__["default"])(body || html).direction === \'rtl\') {\n x += (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_4__.max)(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXlEO0FBQ0o7QUFDTTtBQUNSO0FBQ1osQ0FBQztBQUN4Qzs7QUFFZTtBQUNmOztBQUVBLGFBQWEsa0VBQWtCO0FBQy9CLGtCQUFrQiwrREFBZTtBQUNqQztBQUNBLGNBQWMsbURBQUc7QUFDakIsZUFBZSxtREFBRztBQUNsQixrQ0FBa0MsbUVBQW1CO0FBQ3JEOztBQUVBLE1BQU0sZ0VBQWdCO0FBQ3RCLFNBQVMsbURBQUc7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRSZWN0LmpzPzNlNzkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getHTMLElementScroll)\n/* harmony export */ });\nfunction getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcz81ZmU2Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getLayoutRect)\n/* harmony export */ });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");\n // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn\'t take into account transforms.\n\nfunction getLayoutRect(element) {\n var clientRect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element); // Use the clientRect sizes if it\'s not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStELENBQUM7QUFDaEU7O0FBRWU7QUFDZixtQkFBbUIscUVBQXFCLFdBQVc7QUFDbkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzP2UyZTkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getNodeName)\n/* harmony export */ });\nfunction getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcz81Nzg4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\n\n}")},"./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getNodeScroll)\n/* harmony export */ });\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");\n/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js");\n\n\n\n\nfunction getNodeScroll(node) {\n if (node === (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(node) || !(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(node)) {\n return (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node);\n } else {\n return (0,_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__["default"])(node);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlU2Nyb2xsLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQW1EO0FBQ1o7QUFDUztBQUNhO0FBQzlDO0FBQ2YsZUFBZSx5REFBUyxXQUFXLDZEQUFhO0FBQ2hELFdBQVcsK0RBQWU7QUFDMUIsSUFBSTtBQUNKLFdBQVcsb0VBQW9CO0FBQy9CO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanM/MTk5YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getOffsetParent)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");\n/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./isTableElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");\n/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/userAgent.js */ "./node_modules/@popperjs/core/lib/utils/userAgent.js");\n\n\n\n\n\n\n\n\nfunction getTrueOffsetParent(element) {\n if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(element) || // https://github.com/popperjs/popper-core/issues/837\n (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element).position === \'fixed\') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_6__["default"])());\n var isIE = /Trident/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_6__["default"])());\n\n if (isIE && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element);\n\n if (elementCss.position === \'fixed\') {\n return null;\n }\n }\n\n var currentNode = (0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_5__["default"])(element);\n\n if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__.isShadowRoot)(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(currentNode) && [\'html\', \'body\'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(currentNode)) < 0) {\n var css = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_2__["default"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== \'none\' || css.perspective !== \'none\' || css.contain === \'paint\' || [\'transform\', \'perspective\'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === \'filter\' || isFirefox && css.filter && css.filter !== \'none\') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n var window = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && (0,_isTableElement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(offsetParent) && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_2__["default"])(offsetParent).position === \'static\') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent) === \'html\' || (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__["default"])(offsetParent) === \'body\' && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_2__["default"])(offsetParent).position === \'static\')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBdUM7QUFDSTtBQUNVO0FBQ1M7QUFDYjtBQUNGO0FBQ0M7O0FBRWhEO0FBQ0EsT0FBTyw2REFBYTtBQUNwQixFQUFFLGdFQUFnQjtBQUNsQjtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBLGtDQUFrQywrREFBVztBQUM3Qyw2QkFBNkIsK0RBQVc7O0FBRXhDLGNBQWMsNkRBQWE7QUFDM0I7QUFDQSxxQkFBcUIsZ0VBQWdCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsNkRBQWE7O0FBRWpDLE1BQU0sNERBQVk7QUFDbEI7QUFDQTs7QUFFQSxTQUFTLDZEQUFhLDBDQUEwQywyREFBVztBQUMzRSxjQUFjLGdFQUFnQixlQUFlO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7OztBQUdlO0FBQ2YsZUFBZSx5REFBUztBQUN4Qjs7QUFFQSx5QkFBeUIsOERBQWMsa0JBQWtCLGdFQUFnQjtBQUN6RTtBQUNBOztBQUVBLHVCQUF1QiwyREFBVyw2QkFBNkIsMkRBQVcsNkJBQTZCLGdFQUFnQjtBQUN2SDtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qcz9iNjJiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getParentNode)\n/* harmony export */ });\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");\n\n\n\nfunction getParentNode(element) {\n if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element) === \'html\') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_2__.isShadowRoot)(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element) // fallback\n\n );\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBMkM7QUFDYztBQUNWO0FBQ2hDO0FBQ2YsTUFBTSwyREFBVztBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLDREQUFZO0FBQ2hCO0FBQ0EsSUFBSSxrRUFBa0I7O0FBRXRCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanM/MjhiZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getScrollParent)\n/* harmony export */ });\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getNodeName.js */ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");\n\n\n\n\nfunction getScrollParent(node) {\n if ([\'html\', \'body\', \'#document\'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_2__["default"])(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__.isHTMLElement)(node) && (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_1__["default"])(node)) {\n return node;\n }\n\n return getScrollParent((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRTY3JvbGxQYXJlbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBK0M7QUFDRTtBQUNOO0FBQ0s7QUFDakM7QUFDZiw0Q0FBNEMsMkRBQVc7QUFDdkQ7QUFDQTtBQUNBOztBQUVBLE1BQU0sNkRBQWEsVUFBVSw4REFBYztBQUMzQztBQUNBOztBQUVBLHlCQUF5Qiw2REFBYTtBQUN0QyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzPzlkMGUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getViewportRect)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js");\n/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isLayoutViewport.js */ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js");\n\n\n\n\nfunction getViewportRect(element, strategy) {\n var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);\n var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = (0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__["default"])();\n\n if (layoutViewport || !layoutViewport && strategy === \'fixed\') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element),\n y: y\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBdUM7QUFDa0I7QUFDRTtBQUNOO0FBQ3RDO0FBQ2YsWUFBWSx5REFBUztBQUNyQixhQUFhLGtFQUFrQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixnRUFBZ0I7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxtRUFBbUI7QUFDOUI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanM/N2M3MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICB2YXIgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIHZhciBsYXlvdXRWaWV3cG9ydCA9IGlzTGF5b3V0Vmlld3BvcnQoKTtcblxuICAgIGlmIChsYXlvdXRWaWV3cG9ydCB8fCAhbGF5b3V0Vmlld3BvcnQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSxcbiAgICB5OiB5XG4gIH07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getWindow)\n/* harmony export */ });\nfunction getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcz8xZmMwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIGlmIChub2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgaWYgKG5vZGUudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgV2luZG93XScpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93IDogd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\n\n}")},"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getWindowScroll)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");\n\nfunction getWindowScroll(node) {\n var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBdUM7QUFDeEI7QUFDZixZQUFZLHlEQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGwuanM/YTMyMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getWindowScrollBarX)\n/* harmony export */ });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js");\n\n\n\nfunction getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let\'s assume\n // it\'s not an issue. I don\'t think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn\'t cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(element)).left + (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__["default"])(element).scrollLeft;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBK0Q7QUFDTjtBQUNOO0FBQ3BDO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHFFQUFxQixDQUFDLGtFQUFrQixrQkFBa0IsK0RBQWU7QUFDbEYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanM/NjEyNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isElement: () => (/* binding */ isElement),\n/* harmony export */ isHTMLElement: () => (/* binding */ isHTMLElement),\n/* harmony export */ isShadowRoot: () => (/* binding */ isShadowRoot)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");\n\n\nfunction isElement(node) {\n var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === \'undefined\') {\n return false;\n }\n\n var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBdUM7O0FBRXZDO0FBQ0EsbUJBQW1CLHlEQUFTO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIseURBQVM7QUFDNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQix5REFBUztBQUM1QjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzPzI3NjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ isLayoutViewport)\n/* harmony export */ });\n/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/userAgent.js */ "./node_modules/@popperjs/core/lib/utils/userAgent.js");\n\nfunction isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__["default"])());\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc0xheW91dFZpZXdwb3J0LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWdEO0FBQ2pDO0FBQ2YsZ0RBQWdELCtEQUFXO0FBQzNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc0xheW91dFZpZXdwb3J0LmpzPzc0YWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTGF5b3V0Vmlld3BvcnQoKSB7XG4gIHJldHVybiAhL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChnZXRVQVN0cmluZygpKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ isScrollParent)\n/* harmony export */ });\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js");\n\nfunction isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFxRDtBQUN0QztBQUNmO0FBQ0EsMEJBQTBCLGdFQUFnQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNTY3JvbGxQYXJlbnQuanM/YWU2YyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\n\n}')},"./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ isTableElement)\n/* harmony export */ });\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element)) >= 0;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEyQztBQUM1QjtBQUNmLHVDQUF1QywyREFBVztBQUNsRCIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNUYWJsZUVsZW1lbnQuanM/YjQ1MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\n\n}")},"./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ listScrollParents)\n/* harmony export */ });\n/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getParentNode.js */ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindow.js */ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isScrollParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js");\n\n\n\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we\'ll need to re-calculate the\nreference element\'s position.\n*/\n\nfunction listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = (0,_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__["default"])(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_1__["default"])(target)));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFtRDtBQUNKO0FBQ1I7QUFDVTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLCtEQUFlO0FBQ3BDO0FBQ0EsWUFBWSx5REFBUztBQUNyQiwrREFBK0QsOERBQWM7QUFDN0U7QUFDQTtBQUNBLHVDQUF1Qyw2REFBYTtBQUNwRCIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanM/ZWExYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\n\n}')},"./node_modules/@popperjs/core/lib/enums.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ afterMain: () => (/* binding */ afterMain),\n/* harmony export */ afterRead: () => (/* binding */ afterRead),\n/* harmony export */ afterWrite: () => (/* binding */ afterWrite),\n/* harmony export */ auto: () => (/* binding */ auto),\n/* harmony export */ basePlacements: () => (/* binding */ basePlacements),\n/* harmony export */ beforeMain: () => (/* binding */ beforeMain),\n/* harmony export */ beforeRead: () => (/* binding */ beforeRead),\n/* harmony export */ beforeWrite: () => (/* binding */ beforeWrite),\n/* harmony export */ bottom: () => (/* binding */ bottom),\n/* harmony export */ clippingParents: () => (/* binding */ clippingParents),\n/* harmony export */ end: () => (/* binding */ end),\n/* harmony export */ left: () => (/* binding */ left),\n/* harmony export */ main: () => (/* binding */ main),\n/* harmony export */ modifierPhases: () => (/* binding */ modifierPhases),\n/* harmony export */ placements: () => (/* binding */ placements),\n/* harmony export */ popper: () => (/* binding */ popper),\n/* harmony export */ read: () => (/* binding */ read),\n/* harmony export */ reference: () => (/* binding */ reference),\n/* harmony export */ right: () => (/* binding */ right),\n/* harmony export */ start: () => (/* binding */ start),\n/* harmony export */ top: () => (/* binding */ top),\n/* harmony export */ variationPlacements: () => (/* binding */ variationPlacements),\n/* harmony export */ viewport: () => (/* binding */ viewport),\n/* harmony export */ write: () => (/* binding */ write)\n/* harmony export */ });\nvar top = 'top';\nvar bottom = 'bottom';\nvar right = 'right';\nvar left = 'left';\nvar auto = 'auto';\nvar basePlacements = [top, bottom, right, left];\nvar start = 'start';\nvar end = 'end';\nvar clippingParents = 'clippingParents';\nvar viewport = 'viewport';\nvar popper = 'popper';\nvar reference = 'reference';\nvar variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nvar placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nvar beforeRead = 'beforeRead';\nvar read = 'read';\nvar afterRead = 'afterRead'; // pure-logic modifiers\n\nvar beforeMain = 'beforeMain';\nvar main = 'main';\nvar afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nvar beforeWrite = 'beforeWrite';\nvar write = 'write';\nvar afterWrite = 'afterWrite';\nvar modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFPO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ1A7QUFDQSxDQUFDO0FBQ007QUFDUDtBQUNBLENBQUMsT0FBTzs7QUFFRDtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9lbnVtcy5qcz83N2Y5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgdG9wID0gJ3RvcCc7XG5leHBvcnQgdmFyIGJvdHRvbSA9ICdib3R0b20nO1xuZXhwb3J0IHZhciByaWdodCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIGxlZnQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIGF1dG8gPSAnYXV0byc7XG5leHBvcnQgdmFyIGJhc2VQbGFjZW1lbnRzID0gW3RvcCwgYm90dG9tLCByaWdodCwgbGVmdF07XG5leHBvcnQgdmFyIHN0YXJ0ID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgZW5kID0gJ2VuZCc7XG5leHBvcnQgdmFyIGNsaXBwaW5nUGFyZW50cyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IHZhciB2aWV3cG9ydCA9ICd2aWV3cG9ydCc7XG5leHBvcnQgdmFyIHBvcHBlciA9ICdwb3BwZXInO1xuZXhwb3J0IHZhciByZWZlcmVuY2UgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB2YXIgdmFyaWF0aW9uUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9iYXNlUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pO1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL1tdLmNvbmNhdChiYXNlUGxhY2VtZW50cywgW2F1dG9dKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQsIHBsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7IC8vIG1vZGlmaWVycyB0aGF0IG5lZWQgdG8gcmVhZCB0aGUgRE9NXG5cbmV4cG9ydCB2YXIgYmVmb3JlUmVhZCA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCB2YXIgcmVhZCA9ICdyZWFkJztcbmV4cG9ydCB2YXIgYWZ0ZXJSZWFkID0gJ2FmdGVyUmVhZCc7IC8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5cbmV4cG9ydCB2YXIgYmVmb3JlTWFpbiA9ICdiZWZvcmVNYWluJztcbmV4cG9ydCB2YXIgbWFpbiA9ICdtYWluJztcbmV4cG9ydCB2YXIgYWZ0ZXJNYWluID0gJ2FmdGVyTWFpbic7IC8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcblxuZXhwb3J0IHZhciBiZWZvcmVXcml0ZSA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgdmFyIHdyaXRlID0gJ3dyaXRlJztcbmV4cG9ydCB2YXIgYWZ0ZXJXcml0ZSA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCB2YXIgbW9kaWZpZXJQaGFzZXMgPSBbYmVmb3JlUmVhZCwgcmVhZCwgYWZ0ZXJSZWFkLCBiZWZvcmVNYWluLCBtYWluLCBhZnRlck1haW4sIGJlZm9yZVdyaXRlLCB3cml0ZSwgYWZ0ZXJXcml0ZV07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/enums.js\n\n}")},"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0Q7QUFDSyxDQUFDO0FBQzVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7O0FBRXhDLFNBQVMsdUVBQWEsY0FBYyxxRUFBVztBQUMvQztBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUhBQXVIOztBQUV2SDtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQUksR0FBRzs7QUFFZCxXQUFXLHVFQUFhLGNBQWMscUVBQVc7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsRUFBRTs7O0FBR0YsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcz8wYWI0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\n\n}")},"./node_modules/@popperjs/core/lib/modifiers/arrow.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js");\n/* harmony import */ var _dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/contains.js */ "./node_modules/@popperjs/core/lib/dom-utils/contains.js");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");\n/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js");\n/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js");\n/* harmony import */ var _utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js");\n/* harmony import */ var _utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === \'function\' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return (0,_utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_6__["default"])(typeof padding !== \'number\' ? padding : (0,_utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_7__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_8__.basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(state.placement);\n var axis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(basePlacement);\n var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_8__.left, _enums_js__WEBPACK_IMPORTED_MODULE_8__.right].indexOf(basePlacement) >= 0;\n var len = isVertical ? \'height\' : \'width\';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_1__["default"])(arrowElement);\n var minProp = axis === \'y\' ? _enums_js__WEBPACK_IMPORTED_MODULE_8__.top : _enums_js__WEBPACK_IMPORTED_MODULE_8__.left;\n var maxProp = axis === \'y\' ? _enums_js__WEBPACK_IMPORTED_MODULE_8__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_8__.right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_3__["default"])(arrowElement);\n var clientSize = arrowOffsetParent ? axis === \'y\' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn\'t overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_5__.within)(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? \'[data-popper-arrow]\' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === \'string\') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!(0,_dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: \'arrow\',\n enabled: true,\n phase: \'main\',\n fn: arrow,\n effect: effect,\n requires: [\'popperOffsets\'],\n requiresIfExists: [\'preventOverflow\']\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcnJvdy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQTREO0FBQ0Y7QUFDVjtBQUNjO0FBQ2M7QUFDaEM7QUFDb0I7QUFDTjtBQUNhLENBQUM7O0FBRXhFO0FBQ0Esb0VBQW9FO0FBQ3BFO0FBQ0EsR0FBRztBQUNILFNBQVMsd0VBQWtCLHlDQUF5QyxxRUFBZSxVQUFVLHFEQUFjO0FBQzNHOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixzRUFBZ0I7QUFDdEMsYUFBYSw4RUFBd0I7QUFDckMsb0JBQW9CLDJDQUFJLEVBQUUsNENBQUs7QUFDL0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLHVFQUFhO0FBQy9CLCtCQUErQiwwQ0FBRyxHQUFHLDJDQUFJO0FBQ3pDLCtCQUErQiw2Q0FBTSxHQUFHLDRDQUFLO0FBQzdDO0FBQ0E7QUFDQSwwQkFBMEIseUVBQWU7QUFDekM7QUFDQSx1REFBdUQ7QUFDdkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3REFBTSxvQkFBb0I7O0FBRXpDO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTyxrRUFBUTtBQUNmO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOzs7QUFHRixpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanM/MDkyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4uL2RvbS11dGlscy9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4gfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuLi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4uL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qc1wiO1xuaW1wb3J0IHsgbGVmdCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB0b3AsIGJvdHRvbSB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB0b1BhZGRpbmdPYmplY3QgPSBmdW5jdGlvbiB0b1BhZGRpbmdPYmplY3QocGFkZGluZywgc3RhdGUpIHtcbiAgcGFkZGluZyA9IHR5cGVvZiBwYWRkaW5nID09PSAnZnVuY3Rpb24nID8gcGFkZGluZyhPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHBhZGRpbmc7XG4gIHJldHVybiBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xufTtcblxuZnVuY3Rpb24gYXJyb3coX3JlZikge1xuICB2YXIgX3N0YXRlJG1vZGlmaWVyc0RhdGEkO1xuXG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBheGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwO1xuICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBpZiAoIWFycm93RWxlbWVudCB8fCAhcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gdG9QYWRkaW5nT2JqZWN0KG9wdGlvbnMucGFkZGluZywgc3RhdGUpO1xuICB2YXIgYXJyb3dSZWN0ID0gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpO1xuICB2YXIgbWluUHJvcCA9IGF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gIHZhciBtYXhQcm9wID0gYXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gIHZhciBlbmREaWZmID0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2xlbl0gKyBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucG9wcGVyW2xlbl07XG4gIHZhciBzdGFydERpZmYgPSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoYXJyb3dFbGVtZW50KTtcbiAgdmFyIGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudEhlaWdodCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50V2lkdGggfHwgMCA6IDA7XG4gIHZhciBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjsgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBwb3BwZXIgaWYgdGhlIGNlbnRlciBwb2ludCBpc1xuICAvLyBvdXRzaWRlIG9mIHRoZSBwb3BwZXIgYm91bmRzXG5cbiAgdmFyIG1pbiA9IHBhZGRpbmdPYmplY3RbbWluUHJvcF07XG4gIHZhciBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dSZWN0W2xlbl0gLSBwYWRkaW5nT2JqZWN0W21heFByb3BdO1xuICB2YXIgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd1JlY3RbbGVuXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgdmFyIG9mZnNldCA9IHdpdGhpbihtaW4sIGNlbnRlciwgbWF4KTsgLy8gUHJldmVudHMgYnJlYWtpbmcgc3ludGF4IGhpZ2hsaWdodGluZy4uLlxuXG4gIHZhciBheGlzUHJvcCA9IGF4aXM7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSAoX3N0YXRlJG1vZGlmaWVyc0RhdGEkID0ge30sIF9zdGF0ZSRtb2RpZmllcnNEYXRhJFtheGlzUHJvcF0gPSBvZmZzZXQsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJC5jZW50ZXJPZmZzZXQgPSBvZmZzZXQgLSBjZW50ZXIsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJCk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGFycm93RWxlbWVudCA9IF9vcHRpb25zJGVsZW1lbnQgPT09IHZvaWQgMCA/ICdbZGF0YS1wb3BwZXItYXJyb3ddJyA6IF9vcHRpb25zJGVsZW1lbnQ7XG5cbiAgaWYgKGFycm93RWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIENTUyBzZWxlY3RvclxuXG5cbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoYXJyb3dFbGVtZW50KTtcblxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb250YWlucyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIsIGFycm93RWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5lbGVtZW50cy5hcnJvdyA9IGFycm93RWxlbWVudDtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGFycm93LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/arrow.js\n\n}')},"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ mapToStyles: () => (/* binding */ mapToStyles)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_7__.round)(x * dpr) / dpr || 0,\n y: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_7__.round)(y * dpr) / dpr || 0\n };\n}\n\nfunction mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_0__.left;\n var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_0__.top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(popper)) {\n offsetParent = (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(popper);\n\n if ((0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_0__.top || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_0__.left || placement === _enums_js__WEBPACK_IMPORTED_MODULE_0__.right) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_0__.end) {\n sideY = _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_0__.left || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_0__.top || placement === _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_0__.end) {\n sideX = _enums_js__WEBPACK_IMPORTED_MODULE_0__.right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(state.placement),\n variation: (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBNEQ7QUFDRTtBQUNaO0FBQ2tCO0FBQ0o7QUFDSjtBQUNSO0FBQ1gsQ0FBQzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLHFEQUFLO0FBQ1osT0FBTyxxREFBSztBQUNaO0FBQ0E7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDJDQUFJO0FBQ2xCLGNBQWMsMENBQUc7QUFDakI7O0FBRUE7QUFDQSx1QkFBdUIseUVBQWU7QUFDdEM7QUFDQTs7QUFFQSx5QkFBeUIsbUVBQVM7QUFDbEMscUJBQXFCLDRFQUFrQjs7QUFFdkMsVUFBVSwwRUFBZ0I7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047O0FBRUEsc0JBQXNCLDBDQUFHLG1CQUFtQiwyQ0FBSSxrQkFBa0IsNENBQUssbUJBQW1CLDBDQUFHO0FBQzdGLGNBQWMsNkNBQU07QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsMkNBQUksbUJBQW1CLDBDQUFHLGtCQUFrQiw2Q0FBTSxtQkFBbUIsMENBQUc7QUFDOUYsY0FBYyw0Q0FBSztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFLG1FQUFTO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQkFBMkIsb0NBQW9DO0FBQy9EOztBQUVBLHlCQUF5QixxQ0FBcUM7QUFDOUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHNFQUFnQjtBQUMvQixlQUFlLGtFQUFZO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsbURBQW1EO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EseUNBQXlDLGtEQUFrRDtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7O0FBR0YsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qcz83Y2RhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdW5zZXRTaWRlcyA9IHtcbiAgdG9wOiAnYXV0bycsXG4gIHJpZ2h0OiAnYXV0bycsXG4gIGJvdHRvbTogJ2F1dG8nLFxuICBsZWZ0OiAnYXV0bydcbn07IC8vIFJvdW5kIHRoZSBvZmZzZXRzIHRvIHRoZSBuZWFyZXN0IHN1aXRhYmxlIHN1YnBpeGVsIGJhc2VkIG9uIHRoZSBEUFIuXG4vLyBab29taW5nIGNhbiBjaGFuZ2UgdGhlIERQUiwgYnV0IGl0IHNlZW1zIHRvIHJlcG9ydCBhIHZhbHVlIHRoYXQgd2lsbFxuLy8gY2xlYW5seSBkaXZpZGUgdGhlIHZhbHVlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWJwaXhlbHMuXG5cbmZ1bmN0aW9uIHJvdW5kT2Zmc2V0c0J5RFBSKF9yZWYsIHdpbikge1xuICB2YXIgeCA9IF9yZWYueCxcbiAgICAgIHkgPSBfcmVmLnk7XG4gIHZhciBkcHIgPSB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggKiBkcHIpIC8gZHByIHx8IDAsXG4gICAgeTogcm91bmQoeSAqIGRwcikgLyBkcHIgfHwgMFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9TdHlsZXMoX3JlZjIpIHtcbiAgdmFyIF9PYmplY3QkYXNzaWduMjtcblxuICB2YXIgcG9wcGVyID0gX3JlZjIucG9wcGVyLFxuICAgICAgcG9wcGVyUmVjdCA9IF9yZWYyLnBvcHBlclJlY3QsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmMi5wbGFjZW1lbnQsXG4gICAgICB2YXJpYXRpb24gPSBfcmVmMi52YXJpYXRpb24sXG4gICAgICBvZmZzZXRzID0gX3JlZjIub2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfcmVmMi5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBhZGFwdGl2ZSA9IF9yZWYyLmFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzID0gX3JlZjIucm91bmRPZmZzZXRzLFxuICAgICAgaXNGaXhlZCA9IF9yZWYyLmlzRml4ZWQ7XG4gIHZhciBfb2Zmc2V0cyR4ID0gb2Zmc2V0cy54LFxuICAgICAgeCA9IF9vZmZzZXRzJHggPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR4LFxuICAgICAgX29mZnNldHMkeSA9IG9mZnNldHMueSxcbiAgICAgIHkgPSBfb2Zmc2V0cyR5ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeTtcblxuICB2YXIgX3JlZjMgPSB0eXBlb2Ygcm91bmRPZmZzZXRzID09PSAnZnVuY3Rpb24nID8gcm91bmRPZmZzZXRzKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWYzLng7XG4gIHkgPSBfcmVmMy55O1xuICB2YXIgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgdmFyIGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG4gIHZhciBzaWRlWCA9IGxlZnQ7XG4gIHZhciBzaWRlWSA9IHRvcDtcbiAgdmFyIHdpbiA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgdmFyIGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICB2YXIgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycgJiYgcG9zaXRpb24gPT09ICdhYnNvbHV0ZScpIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG5cblxuICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09IHRvcCB8fCAocGxhY2VtZW50ID09PSBsZWZ0IHx8IHBsYWNlbWVudCA9PT0gcmlnaHQpICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWSA9IGJvdHRvbTtcbiAgICAgIHZhciBvZmZzZXRZID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQuaGVpZ2h0IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbaGVpZ2h0UHJvcF07XG4gICAgICB5IC09IG9mZnNldFkgLSBwb3BwZXJSZWN0LmhlaWdodDtcbiAgICAgIHkgKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGlmIChwbGFjZW1lbnQgPT09IGxlZnQgfHwgKHBsYWNlbWVudCA9PT0gdG9wIHx8IHBsYWNlbWVudCA9PT0gYm90dG9tKSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVggPSByaWdodDtcbiAgICAgIHZhciBvZmZzZXRYID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQud2lkdGggOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFt3aWR0aFByb3BdO1xuICAgICAgeCAtPSBvZmZzZXRYIC0gcG9wcGVyUmVjdC53aWR0aDtcbiAgICAgIHggKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgfSwgYWRhcHRpdmUgJiYgdW5zZXRTaWRlcyk7XG5cbiAgdmFyIF9yZWY0ID0gcm91bmRPZmZzZXRzID09PSB0cnVlID8gcm91bmRPZmZzZXRzQnlEUFIoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9LCBnZXRXaW5kb3cocG9wcGVyKSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWY0Lng7XG4gIHkgPSBfcmVmNC55O1xuXG4gIGlmIChncHVBY2NlbGVyYXRpb24pIHtcbiAgICB2YXIgX09iamVjdCRhc3NpZ247XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24gPSB7fSwgX09iamVjdCRhc3NpZ25bc2lkZVldID0gaGFzWSA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbltzaWRlWF0gPSBoYXNYID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduLnRyYW5zZm9ybSA9ICh3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSA8PSAxID8gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIiA6IFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweCwgMClcIiwgX09iamVjdCRhc3NpZ24pKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbjIgPSB7fSwgX09iamVjdCRhc3NpZ24yW3NpZGVZXSA9IGhhc1kgPyB5ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMltzaWRlWF0gPSBoYXNYID8geCArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjIudHJhbnNmb3JtID0gJycsIF9PYmplY3QkYXNzaWduMikpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3R5bGVzKF9yZWY1KSB7XG4gIHZhciBzdGF0ZSA9IF9yZWY1LnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWY1Lm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPSBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGdwdUFjY2VsZXJhdCxcbiAgICAgIF9vcHRpb25zJGFkYXB0aXZlID0gb3B0aW9ucy5hZGFwdGl2ZSxcbiAgICAgIGFkYXB0aXZlID0gX29wdGlvbnMkYWRhcHRpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhZGFwdGl2ZSxcbiAgICAgIF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9IG9wdGlvbnMucm91bmRPZmZzZXRzLFxuICAgICAgcm91bmRPZmZzZXRzID0gX29wdGlvbnMkcm91bmRPZmZzZXRzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcm91bmRPZmZzZXRzO1xuICB2YXIgY29tbW9uU3R5bGVzID0ge1xuICAgIHBsYWNlbWVudDogZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHZhcmlhdGlvbjogZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCksXG4gICAgcG9wcGVyOiBzdGF0ZS5lbGVtZW50cy5wb3BwZXIsXG4gICAgcG9wcGVyUmVjdDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIGdwdUFjY2VsZXJhdGlvbjogZ3B1QWNjZWxlcmF0aW9uLFxuICAgIGlzRml4ZWQ6IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCdcbiAgfTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLnBvcHBlciwgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsXG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGFkYXB0aXZlOiBhZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93ICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMuYXJyb3cgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMuYXJyb3csIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgYWRhcHRpdmU6IGZhbHNlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1wbGFjZW1lbnQnOiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIGZuOiBjb21wdXRlU3R5bGVzLFxuICBkYXRhOiB7fVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\n\n}")},"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrRCxDQUFDOztBQUVuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUVBQVM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcz9hZDZlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\n\n}")},"./node_modules/@popperjs/core/lib/modifiers/flip.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getOppositePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");\n/* harmony import */ var _utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getOppositeVariationPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");\n/* harmony import */ var _utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/computeAutoPlacement.js */ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_5__.auto) {\n return [];\n }\n\n var oppositePlacement = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement);\n return [(0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(placement), oppositePlacement, (0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [(0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_5__.auto ? (0,_utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__["default"])(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement);\n\n var isStartVariation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_6__["default"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start;\n var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.top, _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? \'width\' : \'height\';\n var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_3__["default"])(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.right : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left : isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(mainVariationSide);\n }\n\n var altVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return "break";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === "break") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: \'flip\',\n enabled: true,\n phase: \'main\',\n fn: flip,\n requiresIfExists: [\'offset\'],\n data: {\n _skip: false\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQW9FO0FBQ1I7QUFDMEI7QUFDOUI7QUFDWTtBQUNBO0FBQ2hCLENBQUM7O0FBRXJEO0FBQ0EsTUFBTSxzRUFBZ0IsZ0JBQWdCLDJDQUFJO0FBQzFDO0FBQ0E7O0FBRUEsMEJBQTBCLDBFQUFvQjtBQUM5QyxVQUFVLG1GQUE2QixnQ0FBZ0MsbUZBQTZCO0FBQ3BHOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixzRUFBZ0I7QUFDdEM7QUFDQSxpR0FBaUcsMEVBQW9CO0FBQ3JIO0FBQ0Esc0JBQXNCLHNFQUFnQixnQkFBZ0IsMkNBQUksR0FBRywwRUFBb0I7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQix1QkFBdUI7QUFDekM7O0FBRUEseUJBQXlCLHNFQUFnQjs7QUFFekMsMkJBQTJCLGtFQUFZLGdCQUFnQiw0Q0FBSztBQUM1RCxzQkFBc0IsMENBQUcsRUFBRSw2Q0FBTTtBQUNqQztBQUNBLG1CQUFtQixvRUFBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLDREQUE0RCw0Q0FBSyxHQUFHLDJDQUFJLHNCQUFzQiw2Q0FBTSxHQUFHLDBDQUFHOztBQUUxRztBQUNBLDBCQUEwQiwwRUFBb0I7QUFDOUM7O0FBRUEsMkJBQTJCLDBFQUFvQjtBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0MsUUFBUTtBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2ZsaXAuanM/ZWNiMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/flip.js\n\n}')},"./node_modules/@popperjs/core/lib/modifiers/hide.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n\n\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom, _enums_js__WEBPACK_IMPORTED_MODULE_0__.left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1RDtBQUNDOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVUsMENBQUcsRUFBRSw0Q0FBSyxFQUFFLDZDQUFNLEVBQUUsMkNBQUk7QUFDbEM7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG9FQUFjO0FBQ3hDO0FBQ0EsR0FBRztBQUNILDBCQUEwQixvRUFBYztBQUN4QztBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7OztBQUdGLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanM/MWQ2YyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/hide.js\n\n}")},"./node_modules/@popperjs/core/lib/modifiers/offset.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ distanceAndSkiddingToXY: () => (/* binding */ distanceAndSkiddingToXY)\n/* harmony export */ });\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement);\n var invertDistance = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = _enums_js__WEBPACK_IMPORTED_MODULE_1__.placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE0RDtBQUNELENBQUM7O0FBRXJEO0FBQ1Asc0JBQXNCLHNFQUFnQjtBQUN0Qyx3QkFBd0IsMkNBQUksRUFBRSwwQ0FBRzs7QUFFakMsbUVBQW1FO0FBQ25FO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsMkNBQUksRUFBRSw0Q0FBSztBQUNyQjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsaURBQVU7QUFDdkI7QUFDQTtBQUNBLEdBQUcsSUFBSTtBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcz85ODM1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/offset.js\n\n}")},"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ \"./node_modules/@popperjs/core/lib/utils/computeOffsets.js\");\n\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = (0,_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXdEOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixvRUFBYztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFQUFFOzs7QUFHRixpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzPzEzNGEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\n\n}")},"./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");\n/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js");\n/* harmony import */ var _utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getAltAxis.js */ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js");\n/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/within.js */ "./node_modules/@popperjs/core/lib/utils/within.js");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");\n/* harmony import */ var _utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");\n\n\n\n\n\n\n\n\n\n\n\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_7__["default"])(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state.placement);\n var variation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_8__["default"])(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(basePlacement);\n var altAxis = (0,_utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_3__["default"])(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === \'function\' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === \'number\' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === \'y\' ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.top : _enums_js__WEBPACK_IMPORTED_MODULE_0__.left;\n var altSide = mainAxis === \'y\' ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_0__.right;\n var len = mainAxis === \'y\' ? \'height\' : \'width\';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_0__.start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_0__.start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn\'t go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__["default"])(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData[\'arrow#persistent\'] ? state.modifiersData[\'arrow#persistent\'].padding : (0,_utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_9__["default"])();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don\'t want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_4__.within)(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__["default"])(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === \'y\' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_4__.within)(tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.min)(min, tetherMin) : min, offset, tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.max)(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === \'x\' ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.top : _enums_js__WEBPACK_IMPORTED_MODULE_0__.left;\n\n var _altSide = mainAxis === \'x\' ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_0__.right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === \'y\' ? \'height\' : \'width\';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_4__.withinMaxClamp)(_tetherMin, _offset, _tetherMax) : (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_4__.within)(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: \'preventOverflow\',\n enabled: true,\n phase: \'main\',\n fn: preventOverflow,\n requiresIfExists: [\'offset\']\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQThEO0FBQ0Y7QUFDZ0I7QUFDNUI7QUFDWTtBQUNGO0FBQ0k7QUFDTjtBQUNKO0FBQ1k7QUFDRTs7QUFFbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0VBQWM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsc0JBQXNCLHNFQUFnQjtBQUN0QyxrQkFBa0Isa0VBQVk7QUFDOUI7QUFDQSxpQkFBaUIsOEVBQXdCO0FBQ3pDLGdCQUFnQixnRUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSw0RkFBNEY7QUFDNUY7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxzQ0FBc0MsMENBQUcsR0FBRywyQ0FBSTtBQUNoRCxxQ0FBcUMsNkNBQU0sR0FBRyw0Q0FBSztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDRDQUFLO0FBQ3BDLCtCQUErQiw0Q0FBSywyQ0FBMkM7QUFDL0U7O0FBRUE7QUFDQSw2Q0FBNkMsdUVBQWE7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EseUhBQXlILHdFQUFrQjtBQUMzSTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsd0RBQU07QUFDekI7QUFDQTtBQUNBLG9EQUFvRCx5RUFBZTtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQix3REFBTSxVQUFVLG9EQUFPLHlDQUF5QyxvREFBTztBQUNqRztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1Q0FBdUMsMENBQUcsR0FBRywyQ0FBSTs7QUFFakQsc0NBQXNDLDZDQUFNLEdBQUcsNENBQUs7O0FBRXBEOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHdCQUF3QiwwQ0FBRyxFQUFFLDJDQUFJOztBQUVqQzs7QUFFQTs7QUFFQTs7QUFFQSxvREFBb0QsZ0VBQWMsb0NBQW9DLHdEQUFNOztBQUU1RztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOzs7QUFHRixpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanM/OTQzNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHN0YXJ0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QWx0QXhpcyBmcm9tIFwiLi4vdXRpbHMvZ2V0QWx0QXhpcy5qc1wiO1xuaW1wb3J0IHsgd2l0aGluLCB3aXRoaW5NYXhDbGFtcCB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuLi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmltcG9ydCB7IG1pbiBhcyBtYXRoTWluLCBtYXggYXMgbWF0aE1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHByZXZlbnRPdmVyZmxvdyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIF9vcHRpb25zJHRldGhlciA9IG9wdGlvbnMudGV0aGVyLFxuICAgICAgdGV0aGVyID0gX29wdGlvbnMkdGV0aGVyID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkdGV0aGVyLFxuICAgICAgX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID0gb3B0aW9ucy50ZXRoZXJPZmZzZXQsXG4gICAgICB0ZXRoZXJPZmZzZXQgPSBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQ7XG4gIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5XG4gIH0pO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gIXZhcmlhdGlvbjtcbiAgdmFyIG1haW5BeGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgYWx0QXhpcyA9IGdldEFsdEF4aXMobWFpbkF4aXMpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgdGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gdGV0aGVyT2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogdGV0aGVyT2Zmc2V0O1xuICB2YXIgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldFZhbHVlID09PSAnbnVtYmVyJyA/IHtcbiAgICBtYWluQXhpczogdGV0aGVyT2Zmc2V0VmFsdWUsXG4gICAgYWx0QXhpczogdGV0aGVyT2Zmc2V0VmFsdWVcbiAgfSA6IE9iamVjdC5hc3NpZ24oe1xuICAgIG1haW5BeGlzOiAwLFxuICAgIGFsdEF4aXM6IDBcbiAgfSwgdGV0aGVyT2Zmc2V0VmFsdWUpO1xuICB2YXIgb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0ID8gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXRbc3RhdGUucGxhY2VtZW50XSA6IG51bGw7XG4gIHZhciBkYXRhID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmICghcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDtcblxuICAgIHZhciBtYWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICAgIHZhciBhbHRTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBvZmZzZXQgPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXTtcbiAgICB2YXIgbWluID0gb2Zmc2V0ICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgIHZhciBtYXggPSBvZmZzZXQgLSBvdmVyZmxvd1thbHRTaWRlXTtcbiAgICB2YXIgYWRkaXRpdmUgPSB0ZXRoZXIgPyAtcG9wcGVyUmVjdFtsZW5dIC8gMiA6IDA7XG4gICAgdmFyIG1pbkxlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gOiBwb3BwZXJSZWN0W2xlbl07XG4gICAgdmFyIG1heExlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyAtcG9wcGVyUmVjdFtsZW5dIDogLXJlZmVyZW5jZVJlY3RbbGVuXTsgLy8gV2UgbmVlZCB0byBpbmNsdWRlIHRoZSBhcnJvdyBpbiB0aGUgY2FsY3VsYXRpb24gc28gdGhlIGFycm93IGRvZXNuJ3QgZ29cbiAgICAvLyBvdXRzaWRlIHRoZSByZWZlcmVuY2UgYm91bmRzXG5cbiAgICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gICAgdmFyIGFycm93UmVjdCA9IHRldGhlciAmJiBhcnJvd0VsZW1lbnQgPyBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgdmFyIGFycm93UGFkZGluZ09iamVjdCA9IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXSA/IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXS5wYWRkaW5nIDogZ2V0RnJlc2hTaWRlT2JqZWN0KCk7XG4gICAgdmFyIGFycm93UGFkZGluZ01pbiA9IGFycm93UGFkZGluZ09iamVjdFttYWluU2lkZV07XG4gICAgdmFyIGFycm93UGFkZGluZ01heCA9IGFycm93UGFkZGluZ09iamVjdFthbHRTaWRlXTsgLy8gSWYgdGhlIHJlZmVyZW5jZSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBhcnJvdyBsZW5ndGgsIHdlIGRvbid0IHdhbnRcbiAgICAvLyB0byBpbmNsdWRlIGl0cyBmdWxsIHNpemUgaW4gdGhlIGNhbGN1bGF0aW9uLiBJZiB0aGUgcmVmZXJlbmNlIGlzIHNtYWxsXG4gICAgLy8gYW5kIG5lYXIgdGhlIGVkZ2Ugb2YgYSBib3VuZGFyeSwgdGhlIHBvcHBlciBjYW4gb3ZlcmZsb3cgZXZlbiBpZiB0aGVcbiAgICAvLyByZWZlcmVuY2UgaXMgbm90IG92ZXJmbG93aW5nIGFzIHdlbGwgKGUuZy4gdmlydHVhbCBlbGVtZW50cyB3aXRoIG5vXG4gICAgLy8gd2lkdGggb3IgaGVpZ2h0KVxuXG4gICAgdmFyIGFycm93TGVuID0gd2l0aGluKDAsIHJlZmVyZW5jZVJlY3RbbGVuXSwgYXJyb3dSZWN0W2xlbl0pO1xuICAgIHZhciBtaW5PZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gLyAyIC0gYWRkaXRpdmUgLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1pbkxlbiAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBtYXhPZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyAtcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiArIGFkZGl0aXZlICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtYXhMZW4gKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdyAmJiBnZXRPZmZzZXRQYXJlbnQoc3RhdGUuZWxlbWVudHMuYXJyb3cpO1xuICAgIHZhciBjbGllbnRPZmZzZXQgPSBhcnJvd09mZnNldFBhcmVudCA/IG1haW5BeGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRUb3AgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudExlZnQgfHwgMCA6IDA7XG4gICAgdmFyIG9mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVttYWluQXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgOiAwO1xuICAgIHZhciB0ZXRoZXJNaW4gPSBvZmZzZXQgKyBtaW5PZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlIC0gY2xpZW50T2Zmc2V0O1xuICAgIHZhciB0ZXRoZXJNYXggPSBvZmZzZXQgKyBtYXhPZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlO1xuICAgIHZhciBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihtaW4sIHRldGhlck1pbikgOiBtaW4sIG9mZnNldCwgdGV0aGVyID8gbWF0aE1heChtYXgsIHRldGhlck1heCkgOiBtYXgpO1xuICAgIHBvcHBlck9mZnNldHNbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0IC0gb2Zmc2V0O1xuICB9XG5cbiAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyO1xuXG4gICAgdmFyIF9tYWluU2lkZSA9IG1haW5BeGlzID09PSAneCcgPyB0b3AgOiBsZWZ0O1xuXG4gICAgdmFyIF9hbHRTaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IGJvdHRvbSA6IHJpZ2h0O1xuXG4gICAgdmFyIF9vZmZzZXQgPSBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdO1xuXG4gICAgdmFyIF9sZW4gPSBhbHRBeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICB2YXIgX21pbiA9IF9vZmZzZXQgKyBvdmVyZmxvd1tfbWFpblNpZGVdO1xuXG4gICAgdmFyIF9tYXggPSBfb2Zmc2V0IC0gb3ZlcmZsb3dbX2FsdFNpZGVdO1xuXG4gICAgdmFyIGlzT3JpZ2luU2lkZSA9IFt0b3AsIGxlZnRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJDIgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW2FsdEF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkMiA6IDA7XG5cbiAgICB2YXIgX3RldGhlck1pbiA9IGlzT3JpZ2luU2lkZSA/IF9taW4gOiBfb2Zmc2V0IC0gcmVmZXJlbmNlUmVjdFtfbGVuXSAtIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzO1xuXG4gICAgdmFyIF90ZXRoZXJNYXggPSBpc09yaWdpblNpZGUgPyBfb2Zmc2V0ICsgcmVmZXJlbmNlUmVjdFtfbGVuXSArIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzIDogX21heDtcblxuICAgIHZhciBfcHJldmVudGVkT2Zmc2V0ID0gdGV0aGVyICYmIGlzT3JpZ2luU2lkZSA/IHdpdGhpbk1heENsYW1wKF90ZXRoZXJNaW4sIF9vZmZzZXQsIF90ZXRoZXJNYXgpIDogd2l0aGluKHRldGhlciA/IF90ZXRoZXJNaW4gOiBfbWluLCBfb2Zmc2V0LCB0ZXRoZXIgPyBfdGV0aGVyTWF4IDogX21heCk7XG5cbiAgICBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldCAtIF9vZmZzZXQ7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J11cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\n\n}')},"./node_modules/@popperjs/core/lib/popper.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* empty/unused harmony star reexport */\n/* empty/unused harmony star reexport */\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createPopper: () => (/* binding */ createPopper),\n/* harmony export */ defaultModifiers: () => (/* binding */ defaultModifiers)\n/* harmony export */ });\n/* empty/unused harmony star reexport */\n/* empty/unused harmony star reexport */\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createPopper.js */ "./node_modules/@popperjs/core/lib/createPopper.js");\n/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js");\n/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js");\n/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js");\n/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js");\n/* harmony import */ var _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifiers/offset.js */ "./node_modules/@popperjs/core/lib/modifiers/offset.js");\n/* harmony import */ var _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiers/flip.js */ "./node_modules/@popperjs/core/lib/modifiers/flip.js");\n/* harmony import */ var _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiers/preventOverflow.js */ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js");\n/* harmony import */ var _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./modifiers/arrow.js */ "./node_modules/@popperjs/core/lib/modifiers/arrow.js");\n/* harmony import */ var _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modifiers/hide.js */ "./node_modules/@popperjs/core/lib/modifiers/hide.js");\n\n\n\n\n\n\n\n\n\n\nvar defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_2__["default"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_3__["default"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_4__["default"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_5__["default"], _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_6__["default"], _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_7__["default"], _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__["default"], _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_9__["default"], _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_10__["default"]];\nvar createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_0__.popperGenerator)({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQW9FO0FBQ1Q7QUFDRjtBQUNBO0FBQ0o7QUFDVjtBQUNKO0FBQ3NCO0FBQ3BCO0FBQ0Y7QUFDdkMsd0JBQXdCLG9FQUFjLEVBQUUsbUVBQWEsRUFBRSxtRUFBYSxFQUFFLGlFQUFXLEVBQUUsNERBQU0sRUFBRSwwREFBSSxFQUFFLHFFQUFlLEVBQUUsMkRBQUssRUFBRSwyREFBSTtBQUM3SCxnQ0FBZ0MsaUVBQWU7QUFDL0M7QUFDQSxDQUFDLEdBQUc7O0FBRXVFLENBQUM7O0FBRVIsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXIuanM/MzljMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbmltcG9ydCBvZmZzZXQgZnJvbSBcIi4vbW9kaWZpZXJzL29mZnNldC5qc1wiO1xuaW1wb3J0IGZsaXAgZnJvbSBcIi4vbW9kaWZpZXJzL2ZsaXAuanNcIjtcbmltcG9ydCBwcmV2ZW50T3ZlcmZsb3cgZnJvbSBcIi4vbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGFycm93IGZyb20gXCIuL21vZGlmaWVycy9hcnJvdy5qc1wiO1xuaW1wb3J0IGhpZGUgZnJvbSBcIi4vbW9kaWZpZXJzL2hpZGUuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlcywgb2Zmc2V0LCBmbGlwLCBwcmV2ZW50T3ZlcmZsb3csIGFycm93LCBoaWRlXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/popper.js\n\n}')},"./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ computeAutoPlacement)\n/* harmony export */ });\n/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");\n/* harmony import */ var _detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./detectOverflow.js */ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js");\n/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");\n\n\n\n\nfunction computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.placements : _options$allowedAutoP;\n var variation = (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement);\n var placements = variation ? flipVariations ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.variationPlacements : _enums_js__WEBPACK_IMPORTED_MODULE_1__.variationPlacements.filter(function (placement) {\n return (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) === variation;\n }) : _enums_js__WEBPACK_IMPORTED_MODULE_1__.basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = (0,_detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[(0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__["default"])(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQTZDO0FBQ2tEO0FBQzlDO0FBQ0k7QUFDdEM7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsaURBQWE7QUFDOUUsa0JBQWtCLDREQUFZO0FBQzlCLGdEQUFnRCwwREFBbUIsR0FBRywwREFBbUI7QUFDekYsV0FBVyw0REFBWTtBQUN2QixHQUFHLElBQUkscURBQWM7QUFDckI7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0EscUJBQXFCLDhEQUFjO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxFQUFFLGdFQUFnQjtBQUN2QjtBQUNBLEdBQUcsSUFBSTtBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanM/NDNjZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFyaWF0aW9uUGxhY2VtZW50cywgYmFzZVBsYWNlbWVudHMsIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPSBfb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPT09IHZvaWQgMCA/IGFsbFBsYWNlbWVudHMgOiBfb3B0aW9ucyRhbGxvd2VkQXV0b1A7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcbiAgdmFyIHBsYWNlbWVudHMgPSB2YXJpYXRpb24gPyBmbGlwVmFyaWF0aW9ucyA/IHZhcmlhdGlvblBsYWNlbWVudHMgOiB2YXJpYXRpb25QbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb247XG4gIH0pIDogYmFzZVBsYWNlbWVudHM7XG4gIHZhciBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwO1xuICB9KTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0d28gYXJyYXkgdW5pb25zLi4uXG5cblxuICB2YXIgb3ZlcmZsb3dzID0gYWxsb3dlZFBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvdmVyZmxvd3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdO1xuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\n\n}')},"./node_modules/@popperjs/core/lib/utils/computeOffsets.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ computeOffsets)\n/* harmony export */ });\n/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js");\n/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ "./node_modules/@popperjs/core/lib/utils/getVariation.js");\n/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");\n\n\n\n\nfunction computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? (0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__["default"])(placement) : null;\n var variation = placement ? (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__["default"])(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case _enums_js__WEBPACK_IMPORTED_MODULE_3__.top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_3__.bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_3__.right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_3__.left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? (0,_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_2__["default"])(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === \'y\' ? \'height\' : \'width\';\n\n switch (variation) {\n case _enums_js__WEBPACK_IMPORTED_MODULE_3__.start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_3__.end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXFEO0FBQ1I7QUFDd0I7QUFDRjtBQUNwRDtBQUNmO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxnRUFBZ0I7QUFDbEQsOEJBQThCLDREQUFZO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMsMENBQUc7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsNkNBQU07QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsNENBQUs7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsMkNBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsd0VBQXdCOztBQUV6RDtBQUNBOztBQUVBO0FBQ0EsV0FBVyw0Q0FBSztBQUNoQjtBQUNBOztBQUVBLFdBQVcsMENBQUc7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzPzVkN2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/computeOffsets.js\n\n}')},"./node_modules/@popperjs/core/lib/utils/debounce.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ debounce)\n/* harmony export */ });\nfunction debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RlYm91bmNlLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanM/YjFlMiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/debounce.js\n\n}')},"./node_modules/@popperjs/core/lib/utils/detectOverflow.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ detectOverflow)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js");\n/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js");\n/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js");\n/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./computeOffsets.js */ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js");\n/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./rectToClientRect.js */ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js");\n/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mergePaddingObject.js */ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js");\n/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./expandToHashMap.js */ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js");\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = (0,_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_7__["default"])(typeof padding !== \'number\' ? padding : (0,_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_8__["default"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_5__.basePlacements));\n var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_5__.popper ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.reference : _enums_js__WEBPACK_IMPORTED_MODULE_5__.popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = (0,_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_6__.isElement)(element) ? element : element.contextElement || (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__["default"])(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = (0,_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_2__["default"])(state.elements.reference);\n var popperOffsets = (0,_computeOffsets_js__WEBPACK_IMPORTED_MODULE_3__["default"])({\n reference: referenceClientRect,\n element: popperRect,\n strategy: \'absolute\',\n placement: placement\n });\n var popperClientRect = (0,_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_4__["default"])(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_5__.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_5__.popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.right, _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.top, _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom].indexOf(key) >= 0 ? \'y\' : \'x\';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBOEQ7QUFDTTtBQUNNO0FBQ3pCO0FBQ0k7QUFDMEQ7QUFDeEQ7QUFDRTtBQUNOLENBQUM7O0FBRXJDO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxzREFBZTtBQUMvRDtBQUNBLHdEQUF3RCwrQ0FBUTtBQUNoRTtBQUNBLDBEQUEwRCw2Q0FBTTtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixrRUFBa0IseUNBQXlDLCtEQUFlLFVBQVUscURBQWM7QUFDeEgsc0NBQXNDLDZDQUFNLEdBQUcsZ0RBQVMsR0FBRyw2Q0FBTTtBQUNqRTtBQUNBO0FBQ0EsMkJBQTJCLHlFQUFlLENBQUMsbUVBQVMsZ0RBQWdELDRFQUFrQjtBQUN0SCw0QkFBNEIsK0VBQXFCO0FBQ2pELHNCQUFzQiw4REFBYztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx5QkFBeUIsZ0VBQWdCLGlCQUFpQjtBQUMxRCw2Q0FBNkMsNkNBQU0sMkNBQTJDO0FBQzlGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQzs7QUFFL0MseUJBQXlCLDZDQUFNO0FBQy9CO0FBQ0E7QUFDQSxzQkFBc0IsNENBQUssRUFBRSw2Q0FBTTtBQUNuQyxrQkFBa0IsMENBQUcsRUFBRSw2Q0FBTTtBQUM3QjtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzP2I2MTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldENsaXBwaW5nUmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBjbGlwcGluZ1BhcmVudHMsIHJlZmVyZW5jZSwgcG9wcGVyLCBib3R0b20sIHRvcCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi9leHBhbmRUb0hhc2hNYXAuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIF9vcHRpb25zJHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gc3RhdGUucGxhY2VtZW50IDogX29wdGlvbnMkcGxhY2VtZW50LFxuICAgICAgX29wdGlvbnMkc3RyYXRlZ3kgPSBfb3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIHN0cmF0ZWd5ID0gX29wdGlvbnMkc3RyYXRlZ3kgPT09IHZvaWQgMCA/IHN0YXRlLnN0cmF0ZWd5IDogX29wdGlvbnMkc3RyYXRlZ3ksXG4gICAgICBfb3B0aW9ucyRib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucyRib3VuZGFyeSA9PT0gdm9pZCAwID8gY2xpcHBpbmdQYXJlbnRzIDogX29wdGlvbnMkYm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRyb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucyRyb290Qm91bmRhcnkgPT09IHZvaWQgMCA/IHZpZXdwb3J0IDogX29wdGlvbnMkcm9vdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZWxlbWVudENvbnRlID0gX29wdGlvbnMuZWxlbWVudENvbnRleHQsXG4gICAgICBlbGVtZW50Q29udGV4dCA9IF9vcHRpb25zJGVsZW1lbnRDb250ZSA9PT0gdm9pZCAwID8gcG9wcGVyIDogX29wdGlvbnMkZWxlbWVudENvbnRlLFxuICAgICAgX29wdGlvbnMkYWx0Qm91bmRhcnkgPSBfb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMkYWx0Qm91bmRhcnkgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucyRwYWRkaW5nID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkcGFkZGluZztcbiAgdmFyIHBhZGRpbmdPYmplY3QgPSBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xuICB2YXIgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyByZWZlcmVuY2UgOiBwb3BwZXI7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgdmFyIGNsaXBwaW5nQ2xpZW50UmVjdCA9IGdldENsaXBwaW5nUmVjdChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCBnZXREb2N1bWVudEVsZW1lbnQoc3RhdGUuZWxlbWVudHMucG9wcGVyKSwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpO1xuICB2YXIgcmVmZXJlbmNlQ2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChzdGF0ZS5lbGVtZW50cy5yZWZlcmVuY2UpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZUNsaWVudFJlY3QsXG4gICAgZWxlbWVudDogcG9wcGVyUmVjdCxcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KTtcbiAgdmFyIHBvcHBlckNsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KE9iamVjdC5hc3NpZ24oe30sIHBvcHBlclJlY3QsIHBvcHBlck9mZnNldHMpKTtcbiAgdmFyIGVsZW1lbnRDbGllbnRSZWN0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHBvcHBlckNsaWVudFJlY3QgOiByZWZlcmVuY2VDbGllbnRSZWN0OyAvLyBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyByZWN0XG4gIC8vIDAgb3IgbmVnYXRpdmUgPSB3aXRoaW4gdGhlIGNsaXBwaW5nIHJlY3RcblxuICB2YXIgb3ZlcmZsb3dPZmZzZXRzID0ge1xuICAgIHRvcDogY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wLFxuICAgIGJvdHRvbTogZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tLFxuICAgIGxlZnQ6IGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCxcbiAgICByaWdodDogZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0XG4gIH07XG4gIHZhciBvZmZzZXREYXRhID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQ7IC8vIE9mZnNldHMgY2FuIGJlIGFwcGxpZWQgb25seSB0byB0aGUgcG9wcGVyIGVsZW1lbnRcblxuICBpZiAoZWxlbWVudENvbnRleHQgPT09IHBvcHBlciAmJiBvZmZzZXREYXRhKSB7XG4gICAgdmFyIG9mZnNldCA9IG9mZnNldERhdGFbcGxhY2VtZW50XTtcbiAgICBPYmplY3Qua2V5cyhvdmVyZmxvd09mZnNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIG11bHRpcGx5ID0gW3JpZ2h0LCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gMSA6IC0xO1xuICAgICAgdmFyIGF4aXMgPSBbdG9wLCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gJ3knIDogJ3gnO1xuICAgICAgb3ZlcmZsb3dPZmZzZXRzW2tleV0gKz0gb2Zmc2V0W2F4aXNdICogbXVsdGlwbHk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb3ZlcmZsb3dPZmZzZXRzO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/detectOverflow.js\n\n}')},"./node_modules/@popperjs/core/lib/utils/expandToHashMap.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ expandToHashMap)\n/* harmony export */ });\nfunction expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUk7QUFDUCIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9leHBhbmRUb0hhc2hNYXAuanM/OTg1MiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\n\n}')},"./node_modules/@popperjs/core/lib/utils/getAltAxis.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getAltAxis)\n/* harmony export */ });\nfunction getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzP2YyZTAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getAltAxis.js\n\n}")},"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getBasePlacement)\n/* harmony export */ });\n\nfunction getBasePlacement(placement) {\n return placement.split('-')[0];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFtQztBQUNwQjtBQUNmO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcz9iNTBlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\n\n}")},"./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getFreshSideObject)\n/* harmony export */ });\nfunction getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanM/MzVmNiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRGcmVzaFNpZGVPYmplY3QoKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwXG4gIH07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\n\n}')},"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getMainAxisFromPlacement)\n/* harmony export */ });\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcz9hZDlkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSA+PSAwID8gJ3gnIDogJ3knO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\n\n}")},"./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getOppositePlacement)\n/* harmony export */ });\nvar hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanM/NTIzMiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\n\n}")},"./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getOppositeVariationPlacement)\n/* harmony export */ });\nvar hash = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcz81MDBiIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\n\n}")},"./node_modules/@popperjs/core/lib/utils/getVariation.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ getVariation)\n/* harmony export */ });\nfunction getVariation(placement) {\n return placement.split('-')[1];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcz8zZDhkIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getVariation.js\n\n}")},"./node_modules/@popperjs/core/lib/utils/math.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ max: () => (/* binding */ max),\n/* harmony export */ min: () => (/* binding */ min),\n/* harmony export */ round: () => (/* binding */ round)\n/* harmony export */ });\nvar max = Math.max;\nvar min = Math.min;\nvar round = Math.round;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQU87QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanM/ODRjNiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgcm91bmQgPSBNYXRoLnJvdW5kOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/math.js\n\n}")},"./node_modules/@popperjs/core/lib/utils/mergeByName.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ mergeByName)\n/* harmony export */ });\nfunction mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixLQUFLO0FBQ0w7QUFDQSxHQUFHLElBQUksR0FBRzs7QUFFVjtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzPzJhMzUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/mergeByName.js\n\n}')},"./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ mergePaddingObject)\n/* harmony export */ });\n/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js");\n\nfunction mergePaddingObject(paddingObject) {\n return Object.assign({}, (0,_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__["default"])(), paddingObject);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF5RDtBQUMxQztBQUNmLHlCQUF5QixFQUFFLGtFQUFrQjtBQUM3QyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanM/ZDM5YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\n\n}')},"./node_modules/@popperjs/core/lib/utils/orderModifiers.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ orderModifiers)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ "./node_modules/@popperjs/core/lib/enums.js");\n // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nfunction orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZDLENBQUM7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsR0FBRzs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRWU7QUFDZjtBQUNBLDJDQUEyQzs7QUFFM0MsU0FBUyxxREFBYztBQUN2QjtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcz9iOWU2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/orderModifiers.js\n\n}')},"./node_modules/@popperjs/core/lib/utils/rectToClientRect.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ rectToClientRect)\n/* harmony export */ });\nfunction rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2YseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanM/N2JjZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlY3QsIHtcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgdG9wOiByZWN0LnksXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\n\n}')},"./node_modules/@popperjs/core/lib/utils/userAgent.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ getUAString)\n/* harmony export */ });\nfunction getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + "/" + item.version;\n }).join(\' \');\n }\n\n return navigator.userAgent;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VzZXJBZ2VudC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy91c2VyQWdlbnQuanM/MTJkOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/userAgent.js\n\n}')},"./node_modules/@popperjs/core/lib/utils/within.js"(__unused_webpack_module,__webpack_exports__,__webpack_require__){"use strict";eval('{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ within: () => (/* binding */ within),\n/* harmony export */ withinMaxClamp: () => (/* binding */ withinMaxClamp)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/@popperjs/core/lib/utils/math.js");\n\nfunction within(min, value, max) {\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(min, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(value, max));\n}\nfunction withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBMkQ7QUFDcEQ7QUFDUCxTQUFTLDZDQUFPLE1BQU0sNkNBQU87QUFDN0I7QUFDTztBQUNQO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy93aXRoaW4uanM/ZTQzZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbk1heENsYW1wKG1pbiwgdmFsdWUsIG1heCkge1xuICB2YXIgdiA9IHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpO1xuICByZXR1cm4gdiA+IG1heCA/IG1heCA6IHY7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/within.js\n\n}')},"./node_modules/@scure/base/lib/index.js"(__unused_webpack_module,exports){"use strict";eval("{\n/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.bytes = exports.stringToBytes = exports.str = exports.bytesToString = exports.hex = exports.utf8 = exports.bech32m = exports.bech32 = exports.base58check = exports.createBase58check = exports.base58xmr = exports.base58xrp = exports.base58flickr = exports.base58 = exports.base64urlnopad = exports.base64url = exports.base64nopad = exports.base64 = exports.base32crockford = exports.base32hexnopad = exports.base32hex = exports.base32nopad = exports.base32 = exports.base16 = exports.utils = void 0;\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\nfunction isArrayOf(isString, arr) {\n if (!Array.isArray(arr))\n return false;\n if (arr.length === 0)\n return true;\n if (isString) {\n return arr.every((item) => typeof item === 'string');\n }\n else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\n// no abytes: seems to have 10% slowdown. Why?!\nfunction afn(input) {\n if (typeof input !== 'function')\n throw new Error('function expected');\n return true;\n}\nfunction astr(label, input) {\n if (typeof input !== 'string')\n throw new Error(`${label}: string expected`);\n return true;\n}\nfunction anumber(n) {\n if (!Number.isSafeInteger(n))\n throw new Error(`invalid integer: ${n}`);\n}\nfunction aArr(input) {\n if (!Array.isArray(input))\n throw new Error('array expected');\n}\nfunction astrArr(label, input) {\n if (!isArrayOf(true, input))\n throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label, input) {\n if (!isArrayOf(false, input))\n throw new Error(`${label}: array of numbers expected`);\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain(...args) {\n const id = (a) => a;\n // Wrap call in closure so JIT can inline calls\n const wrap = (a, b) => (c) => a(b(c));\n // Construct chain of args[-1].encode(args[-2].encode([...]))\n const encode = args.map((x) => x.encode).reduceRight(wrap, id);\n // Construct chain of args[0].decode(args[1].decode(...))\n const decode = args.map((x) => x.decode).reduce(wrap, id);\n return { encode, decode };\n}\n/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters) {\n // mapping 1 to \"b\"\n const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n const len = lettersA.length;\n astrArr('alphabet', lettersA);\n // mapping \"b\" to 1\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(`alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`);\n return lettersA[i];\n });\n },\n decode: (input) => {\n aArr(input);\n return input.map((letter) => {\n astr('alphabet.decode', letter);\n const i = indexes.get(letter);\n if (i === undefined)\n throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n },\n };\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = '') {\n astr('join', separator);\n return {\n encode: (from) => {\n astrArr('join.decode', from);\n return from.join(separator);\n },\n decode: (to) => {\n astr('join.decode', to);\n return to.split(separator);\n },\n };\n}\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits, chr = '=') {\n anumber(bits);\n astr('padding', chr);\n return {\n encode(data) {\n astrArr('padding.encode', data);\n while ((data.length * bits) % 8)\n data.push(chr);\n return data;\n },\n decode(input) {\n astrArr('padding.decode', input);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('padding: invalid, string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0)\n throw new Error('padding: invalid, string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize(fn) {\n afn(fn);\n return { encode: (from) => from, decode: (to) => fn(to) };\n}\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data, from, to) {\n // base 1 is impossible\n if (from < 2)\n throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n if (to < 2)\n throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n aArr(data);\n if (!data.length)\n return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data, (d) => {\n anumber(d);\n if (d < 0 || d >= from)\n throw new Error(`invalid integer: ${d}`);\n return d;\n });\n const dlen = digits.length;\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < dlen; i++) {\n const digit = digits[i];\n const fromCarry = from * carry;\n const digitBase = fromCarry + digit;\n if (!Number.isSafeInteger(digitBase) ||\n fromCarry / from !== carry ||\n digitBase - digit !== fromCarry) {\n throw new Error('convertRadix: carry overflow');\n }\n const div = digitBase / to;\n carry = digitBase % to;\n const rounded = Math.floor(div);\n digits[i] = rounded;\n if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done)\n continue;\n else if (!rounded)\n pos = i;\n else\n done = false;\n }\n res.push(carry);\n if (done)\n break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++)\n res.push(0);\n return res.reverse();\n}\nconst gcd = (a, b) => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from, to) => from + (to - gcd(from, to));\nconst powers = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++)\n res.push(2 ** i);\n return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data, from, to, padding) {\n aArr(data);\n if (from <= 0 || from > 32)\n throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32)\n throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`);\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const max = powers[from];\n const mask = powers[to] - 1;\n const res = [];\n for (const n of data) {\n anumber(n);\n if (n >= max)\n throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32)\n throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to)\n res.push(((carry >> (pos - to)) & mask) >>> 0);\n const pow = powers[pos];\n if (pow === undefined)\n throw new Error('invalid carry');\n carry &= pow - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from)\n throw new Error('Excess padding');\n if (!padding && carry > 0)\n throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0)\n res.push(carry >>> 0);\n return res;\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num) {\n anumber(num);\n const _256 = 2 ** 8;\n return {\n encode: (bytes) => {\n if (!isBytes(bytes))\n throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), _256, num);\n },\n decode: (digits) => {\n anumArr('radix.decode', digits);\n return Uint8Array.from(convertRadix(digits, num, _256));\n },\n };\n}\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits, revPadding = false) {\n anumber(bits);\n if (bits <= 0 || bits > 32)\n throw new Error('radix2: bits should be in (0..32]');\n if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n throw new Error('radix2: carry overflow');\n return {\n encode: (bytes) => {\n if (!isBytes(bytes))\n throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits) => {\n anumArr('radix2.decode', digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\nfunction unsafeWrapper(fn) {\n afn(fn);\n return function (...args) {\n try {\n return fn.apply(null, args);\n }\n catch (e) { }\n };\n}\nfunction checksum(len, fn) {\n anumber(len);\n afn(fn);\n return {\n encode(data) {\n if (!isBytes(data))\n throw new Error('checksum.encode: input should be Uint8Array');\n const sum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(sum, data.length);\n return res;\n },\n decode(data) {\n if (!isBytes(data))\n throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const oldChecksum = data.slice(-len);\n const newChecksum = fn(payload).slice(0, len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i])\n throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\n// prettier-ignore\nexports.utils = {\n alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n// RFC 4648 aka RFC 3548\n// ---------------------\n/**\n * base16 encoding from RFC 4648.\n * @example\n * ```js\n * base16.encode(Uint8Array.from([0x12, 0xab]));\n * // => '12AB'\n * ```\n */\nexports.base16 = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\n/**\n * base32 encoding from RFC 4648. Has padding.\n * Use `base32nopad` for unpadded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ===='\n * base32.decode('CKVQ====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexports.base32 = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), padding(5), join(''));\n/**\n * base32 encoding from RFC 4648. No padding.\n * Use `base32` for padded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ'\n * base32nopad.decode('CKVQ');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexports.base32nopad = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), join(''));\n/**\n * base32 encoding from RFC 4648. Padded. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hexnopad` for unpadded version.\n * @example\n * ```js\n * base32hex.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG===='\n * base32hex.decode('2ALG====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexports.base32hex = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), padding(5), join(''));\n/**\n * base32 encoding from RFC 4648. No padding. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hex` for padded version.\n * @example\n * ```js\n * base32hexnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG'\n * base32hexnopad.decode('2ALG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexports.base32hexnopad = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), join(''));\n/**\n * base32 encoding from RFC 4648. Doug Crockford's version.\n * https://www.crockford.com/base32.html\n * @example\n * ```js\n * base32crockford.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ANG'\n * base32crockford.decode('2ANG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexports.base32crockford = chain(radix2(5), alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'), join(''), normalize((s) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1')));\n// Built-in base64 conversion https://caniuse.com/mdn-javascript_builtins_uint8array_frombase64\n// prettier-ignore\nconst hasBase64Builtin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toBase64 === 'function' &&\n typeof Uint8Array.fromBase64 === 'function')();\nconst decodeBase64Builtin = (s, isUrl) => {\n astr('base64', s);\n const re = isUrl ? /^[A-Za-z0-9=_-]+$/ : /^[A-Za-z0-9=+/]+$/;\n const alphabet = isUrl ? 'base64url' : 'base64';\n if (s.length > 0 && !re.test(s))\n throw new Error('invalid base64');\n return Uint8Array.fromBase64(s, { alphabet, lastChunkHandling: 'strict' });\n};\n/**\n * base64 from RFC 4648. Padded.\n * Use `base64nopad` for unpadded version.\n * Also check out `base64url`, `base64urlnopad`.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexports.base64 = hasBase64Builtin ? {\n encode(b) { abytes(b); return b.toBase64(); },\n decode(s) { return decodeBase64Builtin(s, false); },\n} : chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), padding(6), join(''));\n/**\n * base64 from RFC 4648. No padding.\n * Use `base64` for padded version.\n * @example\n * ```js\n * base64nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64nopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexports.base64nopad = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), join(''));\n/**\n * base64 from RFC 4648, using URL-safe alphabet. Padded.\n * Use `base64urlnopad` for unpadded version.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64url.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64url.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexports.base64url = hasBase64Builtin ? {\n encode(b) { abytes(b); return b.toBase64({ alphabet: 'base64url' }); },\n decode(s) { return decodeBase64Builtin(s, true); },\n} : chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), padding(6), join(''));\n/**\n * base64 from RFC 4648, using URL-safe alphabet. No padding.\n * Use `base64url` for padded version.\n * @example\n * ```js\n * base64urlnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64urlnopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexports.base64urlnopad = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), join(''));\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc) => chain(radix(58), alphabet(abc), join(''));\n/**\n * base58: base64 without ambigous characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n * @example\n * ```js\n * base58.decode('01abcdef');\n * // => '3UhJW'\n * ```\n */\nexports.base58 = genBase58('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');\n/**\n * base58: flickr version. Check out `base58`.\n */\nexports.base58flickr = genBase58('123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ');\n/**\n * base58: XRP version. Check out `base58`.\n */\nexports.base58xrp = genBase58('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz');\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n/**\n * base58: XMR version. Check out `base58`.\n * Done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n * Block encoding significantly reduces quadratic complexity of base58.\n */\nexports.base58xmr = {\n encode(data) {\n let res = '';\n for (let i = 0; i < data.length; i += 8) {\n const block = data.subarray(i, i + 8);\n res += exports.base58.encode(block).padStart(XMR_BLOCK_LEN[block.length], '1');\n }\n return res;\n },\n decode(str) {\n let res = [];\n for (let i = 0; i < str.length; i += 11) {\n const slice = str.slice(i, i + 11);\n const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n const block = exports.base58.decode(slice);\n for (let j = 0; j < block.length - blockLen; j++) {\n if (block[j] !== 0)\n throw new Error('base58xmr: wrong padding');\n }\n res = res.concat(Array.from(block.slice(block.length - blockLen)));\n }\n return Uint8Array.from(res);\n },\n};\n/**\n * Method, which creates base58check encoder.\n * Requires function, calculating sha256.\n */\nconst createBase58check = (sha256) => chain(checksum(4, (data) => sha256(sha256(data))), exports.base58);\nexports.createBase58check = createBase58check;\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexports.base58check = exports.createBase58check;\nconst BECH_ALPHABET = chain(alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'), join(''));\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre) {\n const b = pre >> 25;\n let chk = (pre & 0x1ffffff) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if (((b >> i) & 1) === 1)\n chk ^= POLYMOD_GENERATORS[i];\n }\n return chk;\n}\nfunction bechChecksum(prefix, words, encodingConst = 1) {\n const len = prefix.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126)\n throw new Error(`Invalid prefix (${prefix})`);\n chk = bech32Polymod(chk) ^ (c >> 5);\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++)\n chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words)\n chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++)\n chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]], 30, 5, false));\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding) {\n const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n const _words = radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n function encode(prefix, words, limit = 90) {\n astr('bech32.encode prefix', prefix);\n if (isBytes(words))\n words = Array.from(words);\n anumArr('bech32.encode', words);\n const plen = prefix.length;\n if (plen === 0)\n throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n const lowered = prefix.toLowerCase();\n const sum = bechChecksum(lowered, words, ENCODING_CONST);\n return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}`;\n }\n function decode(str, limit = 90) {\n astr('bech32.decode input', str);\n const slen = str.length;\n if (slen < 8 || (limit !== false && slen > limit))\n throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n // don't allow mixed case\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n const sepIndex = lowered.lastIndexOf('1');\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix = lowered.slice(0, sepIndex);\n const data = lowered.slice(sepIndex + 1);\n if (data.length < 6)\n throw new Error('Data must be at least 6 characters long');\n const words = BECH_ALPHABET.decode(data).slice(0, -6);\n const sum = bechChecksum(prefix, words, ENCODING_CONST);\n if (!data.endsWith(sum))\n throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n const decodeUnsafe = unsafeWrapper(decode);\n function decodeToBytes(str) {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n function encodeFromBytes(prefix, bytes) {\n return encode(prefix, toWords(bytes));\n }\n return {\n encode,\n decode,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords,\n };\n}\n/**\n * bech32 from BIP 173. Operates on words.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexports.bech32 = genBech32('bech32');\n/**\n * bech32m from BIP 350. Operates on words.\n * It was to mitigate `bech32` weaknesses.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexports.bech32m = genBech32('bech32m');\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * ```js\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n * ```\n */\nexports.utf8 = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\n// prettier-ignore\nconst hasHexBuiltin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toHex === 'function' &&\n typeof Uint8Array.fromHex === 'function')();\n// prettier-ignore\nconst hexBuiltin = {\n encode(data) { abytes(data); return data.toHex(); },\n decode(s) { astr('hex', s); return Uint8Array.fromHex(s); },\n};\n/**\n * hex string decoder. Uses built-in function, when available.\n * @example\n * ```js\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n * ```\n */\nexports.hex = hasHexBuiltin\n ? hexBuiltin\n : chain(radix2(4), alphabet('0123456789abcdef'), join(''), normalize((s) => {\n if (typeof s !== 'string' || s.length % 2 !== 0)\n throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);\n return s.toLowerCase();\n }));\n// prettier-ignore\nconst CODERS = {\n utf8: exports.utf8, hex: exports.hex, base16: exports.base16, base32: exports.base32, base64: exports.base64, base64url: exports.base64url, base58: exports.base58, base58xmr: exports.base58xmr\n};\nconst coderTypeError = 'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n/** @deprecated */\nconst bytesToString = (type, bytes) => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (!isBytes(bytes))\n throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\nexports.bytesToString = bytesToString;\n/** @deprecated */\nexports.str = exports.bytesToString; // as in python, but for bytes only\n/** @deprecated */\nconst stringToBytes = (type, str) => {\n if (!CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (typeof str !== 'string')\n throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\nexports.stringToBytes = stringToBytes;\n/** @deprecated */\nexports.bytes = exports.stringToBytes;\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHNjdXJlL2Jhc2UvbGliL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsYUFBYSxHQUFHLHFCQUFxQixHQUFHLFdBQVcsR0FBRyxxQkFBcUIsR0FBRyxXQUFXLEdBQUcsWUFBWSxHQUFHLGVBQWUsR0FBRyxjQUFjLEdBQUcsbUJBQW1CLEdBQUcseUJBQXlCLEdBQUcsaUJBQWlCLEdBQUcsaUJBQWlCLEdBQUcsb0JBQW9CLEdBQUcsY0FBYyxHQUFHLHNCQUFzQixHQUFHLGlCQUFpQixHQUFHLG1CQUFtQixHQUFHLGNBQWMsR0FBRyx1QkFBdUIsR0FBRyxzQkFBc0IsR0FBRyxpQkFBaUIsR0FBRyxtQkFBbUIsR0FBRyxjQUFjLEdBQUcsY0FBYyxHQUFHLGFBQWE7QUFDaGY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLE1BQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsRUFBRTtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixNQUFNO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixNQUFNO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRkFBc0YsRUFBRSxjQUFjLFFBQVE7QUFDOUc7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNU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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQywrQkFBK0I7QUFDL0I7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsY0FBYyxzQkFBc0I7QUFDdkQsZ0JBQWdCLGdCQUFnQiwrQkFBK0I7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxvRUFBb0UsVUFBVSxjQUFjLFNBQVM7QUFDckc7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxXQUFXLDBCQUEwQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHNjdXJlL2Jhc2UvbGliL2luZGV4LmpzP2FhNDMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG4vKiEgc2N1cmUtYmFzZSAtIE1JVCBMaWNlbnNlIChjKSAyMDIyIFBhdWwgTWlsbGVyIChwYXVsbWlsbHIuY29tKSAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5ieXRlcyA9IGV4cG9ydHMuc3RyaW5nVG9CeXRlcyA9IGV4cG9ydHMuc3RyID0gZXhwb3J0cy5ieXRlc1RvU3RyaW5nID0gZXhwb3J0cy5oZXggPSBleHBvcnRzLnV0ZjggPSBleHBvcnRzLmJlY2gzMm0gPSBleHBvcnRzLmJlY2gzMiA9IGV4cG9ydHMuYmFzZTU4Y2hlY2sgPSBleHBvcnRzLmNyZWF0ZUJhc2U1OGNoZWNrID0gZXhwb3J0cy5iYXNlNTh4bXIgPSBleHBvcnRzLmJhc2U1OHhycCA9IGV4cG9ydHMuYmFzZTU4ZmxpY2tyID0gZXhwb3J0cy5iYXNlNTggPSBleHBvcnRzLmJhc2U2NHVybG5vcGFkID0gZXhwb3J0cy5iYXNlNjR1cmwgPSBleHBvcnRzLmJhc2U2NG5vcGFkID0gZXhwb3J0cy5iYXNlNjQgPSBleHBvcnRzLmJhc2UzMmNyb2NrZm9yZCA9IGV4cG9ydHMuYmFzZTMyaGV4bm9wYWQgPSBleHBvcnRzLmJhc2UzMmhleCA9IGV4cG9ydHMuYmFzZTMybm9wYWQgPSBleHBvcnRzLmJhc2UzMiA9IGV4cG9ydHMuYmFzZTE2ID0gZXhwb3J0cy51dGlscyA9IHZvaWQgMDtcbmZ1bmN0aW9uIGlzQnl0ZXMoYSkge1xuICAgIHJldHVybiBhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCAoQXJyYXlCdWZmZXIuaXNWaWV3KGEpICYmIGEuY29uc3RydWN0b3IubmFtZSA9PT0gJ1VpbnQ4QXJyYXknKTtcbn1cbi8qKiBBc3NlcnRzIHNvbWV0aGluZyBpcyBVaW50OEFycmF5LiAqL1xuZnVuY3Rpb24gYWJ5dGVzKGIsIC4uLmxlbmd0aHMpIHtcbiAgICBpZiAoIWlzQnl0ZXMoYikpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVWludDhBcnJheSBleHBlY3RlZCcpO1xuICAgIGlmIChsZW5ndGhzLmxlbmd0aCA+IDAgJiYgIWxlbmd0aHMuaW5jbHVkZXMoYi5sZW5ndGgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VpbnQ4QXJyYXkgZXhwZWN0ZWQgb2YgbGVuZ3RoICcgKyBsZW5ndGhzICsgJywgZ290IGxlbmd0aD0nICsgYi5sZW5ndGgpO1xufVxuZnVuY3Rpb24gaXNBcnJheU9mKGlzU3RyaW5nLCBhcnIpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhcnIubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGFyci5ldmVyeSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBhcnIuZXZlcnkoKGl0ZW0pID0+IE51bWJlci5pc1NhZmVJbnRlZ2VyKGl0ZW0pKTtcbiAgICB9XG59XG4vLyBubyBhYnl0ZXM6IHNlZW1zIHRvIGhhdmUgMTAlIHNsb3dkb3duLiBXaHk/IVxuZnVuY3Rpb24gYWZuKGlucHV0KSB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmdW5jdGlvbiBleHBlY3RlZCcpO1xuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gYXN0cihsYWJlbCwgaW5wdXQpIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2xhYmVsfTogc3RyaW5nIGV4cGVjdGVkYCk7XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBhbnVtYmVyKG4pIHtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG4pKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgaW50ZWdlcjogJHtufWApO1xufVxuZnVuY3Rpb24gYUFycihpbnB1dCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYXJyYXkgZXhwZWN0ZWQnKTtcbn1cbmZ1bmN0aW9uIGFzdHJBcnIobGFiZWwsIGlucHV0KSB7XG4gICAgaWYgKCFpc0FycmF5T2YodHJ1ZSwgaW5wdXQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bGFiZWx9OiBhcnJheSBvZiBzdHJpbmdzIGV4cGVjdGVkYCk7XG59XG5mdW5jdGlvbiBhbnVtQXJyKGxhYmVsLCBpbnB1dCkge1xuICAgIGlmICghaXNBcnJheU9mKGZhbHNlLCBpbnB1dCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtsYWJlbH06IGFycmF5IG9mIG51bWJlcnMgZXhwZWN0ZWRgKTtcbn1cbi8qKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gY2hhaW4oLi4uYXJncykge1xuICAgIGNvbnN0IGlkID0gKGEpID0+IGE7XG4gICAgLy8gV3JhcCBjYWxsIGluIGNsb3N1cmUgc28gSklUIGNhbiBpbmxpbmUgY2FsbHNcbiAgICBjb25zdCB3cmFwID0gKGEsIGIpID0+IChjKSA9PiBhKGIoYykpO1xuICAgIC8vIENvbnN0cnVjdCBjaGFpbiBvZiBhcmdzWy0xXS5lbmNvZGUoYXJnc1stMl0uZW5jb2RlKFsuLi5dKSlcbiAgICBjb25zdCBlbmNvZGUgPSBhcmdzLm1hcCgoeCkgPT4geC5lbmNvZGUpLnJlZHVjZVJpZ2h0KHdyYXAsIGlkKTtcbiAgICAvLyBDb25zdHJ1Y3QgY2hhaW4gb2YgYXJnc1swXS5kZWNvZGUoYXJnc1sxXS5kZWNvZGUoLi4uKSlcbiAgICBjb25zdCBkZWNvZGUgPSBhcmdzLm1hcCgoeCkgPT4geC5kZWNvZGUpLnJlZHVjZSh3cmFwLCBpZCk7XG4gICAgcmV0dXJuIHsgZW5jb2RlLCBkZWNvZGUgfTtcbn1cbi8qKlxuICogRW5jb2RlcyBpbnRlZ2VyIHJhZGl4IHJlcHJlc2VudGF0aW9uIHRvIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgYWxwaGFiZXQgYW5kIGJhY2suXG4gKiBDb3VsZCBhbHNvIGJlIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiBhbHBoYWJldChsZXR0ZXJzKSB7XG4gICAgLy8gbWFwcGluZyAxIHRvIFwiYlwiXG4gICAgY29uc3QgbGV0dGVyc0EgPSB0eXBlb2YgbGV0dGVycyA9PT0gJ3N0cmluZycgPyBsZXR0ZXJzLnNwbGl0KCcnKSA6IGxldHRlcnM7XG4gICAgY29uc3QgbGVuID0gbGV0dGVyc0EubGVuZ3RoO1xuICAgIGFzdHJBcnIoJ2FscGhhYmV0JywgbGV0dGVyc0EpO1xuICAgIC8vIG1hcHBpbmcgXCJiXCIgdG8gMVxuICAgIGNvbnN0IGluZGV4ZXMgPSBuZXcgTWFwKGxldHRlcnNBLm1hcCgobCwgaSkgPT4gW2wsIGldKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW5jb2RlOiAoZGlnaXRzKSA9PiB7XG4gICAgICAgICAgICBhQXJyKGRpZ2l0cyk7XG4gICAgICAgICAgICByZXR1cm4gZGlnaXRzLm1hcCgoaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoaSkgfHwgaSA8IDAgfHwgaSA+PSBsZW4pXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgYWxwaGFiZXQuZW5jb2RlOiBkaWdpdCBpbmRleCBvdXRzaWRlIGFscGhhYmV0IFwiJHtpfVwiLiBBbGxvd2VkOiAke2xldHRlcnN9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxldHRlcnNBW2ldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlY29kZTogKGlucHV0KSA9PiB7XG4gICAgICAgICAgICBhQXJyKGlucHV0KTtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5tYXAoKGxldHRlcikgPT4ge1xuICAgICAgICAgICAgICAgIGFzdHIoJ2FscGhhYmV0LmRlY29kZScsIGxldHRlcik7XG4gICAgICAgICAgICAgICAgY29uc3QgaSA9IGluZGV4ZXMuZ2V0KGxldHRlcik7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxldHRlcjogXCIke2xldHRlcn1cIi4gQWxsb3dlZDogJHtsZXR0ZXJzfWApO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cbi8qKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gam9pbihzZXBhcmF0b3IgPSAnJykge1xuICAgIGFzdHIoJ2pvaW4nLCBzZXBhcmF0b3IpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVuY29kZTogKGZyb20pID0+IHtcbiAgICAgICAgICAgIGFzdHJBcnIoJ2pvaW4uZGVjb2RlJywgZnJvbSk7XG4gICAgICAgICAgICByZXR1cm4gZnJvbS5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0sXG4gICAgICAgIGRlY29kZTogKHRvKSA9PiB7XG4gICAgICAgICAgICBhc3RyKCdqb2luLmRlY29kZScsIHRvKTtcbiAgICAgICAgICAgIHJldHVybiB0by5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vKipcbiAqIFBhZCBzdHJpbmdzIGFycmF5IHNvIGl0IGhhcyBpbnRlZ2VyIG51bWJlciBvZiBiaXRzXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiBwYWRkaW5nKGJpdHMsIGNociA9ICc9Jykge1xuICAgIGFudW1iZXIoYml0cyk7XG4gICAgYXN0cigncGFkZGluZycsIGNocik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW5jb2RlKGRhdGEpIHtcbiAgICAgICAgICAgIGFzdHJBcnIoJ3BhZGRpbmcuZW5jb2RlJywgZGF0YSk7XG4gICAgICAgICAgICB3aGlsZSAoKGRhdGEubGVuZ3RoICogYml0cykgJSA4KVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaChjaHIpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIGRlY29kZShpbnB1dCkge1xuICAgICAgICAgICAgYXN0ckFycigncGFkZGluZy5kZWNvZGUnLCBpbnB1dCk7XG4gICAgICAgICAgICBsZXQgZW5kID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKChlbmQgKiBiaXRzKSAlIDgpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYWRkaW5nOiBpbnZhbGlkLCBzdHJpbmcgc2hvdWxkIGhhdmUgd2hvbGUgbnVtYmVyIG9mIGJ5dGVzJyk7XG4gICAgICAgICAgICBmb3IgKDsgZW5kID4gMCAmJiBpbnB1dFtlbmQgLSAxXSA9PT0gY2hyOyBlbmQtLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBlbmQgLSAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBsYXN0ICogYml0cztcbiAgICAgICAgICAgICAgICBpZiAoYnl0ZSAlIDggPT09IDApXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFkZGluZzogaW52YWxpZCwgc3RyaW5nIGhhcyB0b28gbXVjaCBwYWRkaW5nJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuc2xpY2UoMCwgZW5kKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLyoqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5mdW5jdGlvbiBub3JtYWxpemUoZm4pIHtcbiAgICBhZm4oZm4pO1xuICAgIHJldHVybiB7IGVuY29kZTogKGZyb20pID0+IGZyb20sIGRlY29kZTogKHRvKSA9PiBmbih0bykgfTtcbn1cbi8qKlxuICogU2xvdzogTyhuXjIpIHRpbWUgY29tcGxleGl0eVxuICovXG5mdW5jdGlvbiBjb252ZXJ0UmFkaXgoZGF0YSwgZnJvbSwgdG8pIHtcbiAgICAvLyBiYXNlIDEgaXMgaW1wb3NzaWJsZVxuICAgIGlmIChmcm9tIDwgMilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb252ZXJ0UmFkaXg6IGludmFsaWQgZnJvbT0ke2Zyb219LCBiYXNlIGNhbm5vdCBiZSBsZXNzIHRoYW4gMmApO1xuICAgIGlmICh0byA8IDIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29udmVydFJhZGl4OiBpbnZhbGlkIHRvPSR7dG99LCBiYXNlIGNhbm5vdCBiZSBsZXNzIHRoYW4gMmApO1xuICAgIGFBcnIoZGF0YSk7XG4gICAgaWYgKCFkYXRhLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIGxldCBwb3MgPSAwO1xuICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgIGNvbnN0IGRpZ2l0cyA9IEFycmF5LmZyb20oZGF0YSwgKGQpID0+IHtcbiAgICAgICAgYW51bWJlcihkKTtcbiAgICAgICAgaWYgKGQgPCAwIHx8IGQgPj0gZnJvbSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBpbnRlZ2VyOiAke2R9YCk7XG4gICAgICAgIHJldHVybiBkO1xuICAgIH0pO1xuICAgIGNvbnN0IGRsZW4gPSBkaWdpdHMubGVuZ3RoO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGxldCBjYXJyeSA9IDA7XG4gICAgICAgIGxldCBkb25lID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHBvczsgaSA8IGRsZW47IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGlnaXQgPSBkaWdpdHNbaV07XG4gICAgICAgICAgICBjb25zdCBmcm9tQ2FycnkgPSBmcm9tICogY2Fycnk7XG4gICAgICAgICAgICBjb25zdCBkaWdpdEJhc2UgPSBmcm9tQ2FycnkgKyBkaWdpdDtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoZGlnaXRCYXNlKSB8fFxuICAgICAgICAgICAgICAgIGZyb21DYXJyeSAvIGZyb20gIT09IGNhcnJ5IHx8XG4gICAgICAgICAgICAgICAgZGlnaXRCYXNlIC0gZGlnaXQgIT09IGZyb21DYXJyeSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY29udmVydFJhZGl4OiBjYXJyeSBvdmVyZmxvdycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGl2ID0gZGlnaXRCYXNlIC8gdG87XG4gICAgICAgICAgICBjYXJyeSA9IGRpZ2l0QmFzZSAlIHRvO1xuICAgICAgICAgICAgY29uc3Qgcm91bmRlZCA9IE1hdGguZmxvb3IoZGl2KTtcbiAgICAgICAgICAgIGRpZ2l0c1tpXSA9IHJvdW5kZWQ7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJvdW5kZWQpIHx8IHJvdW5kZWQgKiB0byArIGNhcnJ5ICE9PSBkaWdpdEJhc2UpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb252ZXJ0UmFkaXg6IGNhcnJ5IG92ZXJmbG93Jyk7XG4gICAgICAgICAgICBpZiAoIWRvbmUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBlbHNlIGlmICghcm91bmRlZClcbiAgICAgICAgICAgICAgICBwb3MgPSBpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXMucHVzaChjYXJyeSk7XG4gICAgICAgIGlmIChkb25lKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggLSAxICYmIGRhdGFbaV0gPT09IDA7IGkrKylcbiAgICAgICAgcmVzLnB1c2goMCk7XG4gICAgcmV0dXJuIHJlcy5yZXZlcnNlKCk7XG59XG5jb25zdCBnY2QgPSAoYSwgYikgPT4gKGIgPT09IDAgPyBhIDogZ2NkKGIsIGEgJSBiKSk7XG5jb25zdCByYWRpeDJjYXJyeSA9IC8qIEBfX05PX1NJREVfRUZGRUNUU19fICovIChmcm9tLCB0bykgPT4gZnJvbSArICh0byAtIGdjZChmcm9tLCB0bykpO1xuY29uc3QgcG93ZXJzID0gLyogQF9fUFVSRV9fICovICgoKSA9PiB7XG4gICAgbGV0IHJlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDA7IGkrKylcbiAgICAgICAgcmVzLnB1c2goMiAqKiBpKTtcbiAgICByZXR1cm4gcmVzO1xufSkoKTtcbi8qKlxuICogSW1wbGVtZW50ZWQgd2l0aCBudW1iZXJzLCBiZWNhdXNlIEJpZ0ludCBpcyA1eCBzbG93ZXJcbiAqL1xuZnVuY3Rpb24gY29udmVydFJhZGl4MihkYXRhLCBmcm9tLCB0bywgcGFkZGluZykge1xuICAgIGFBcnIoZGF0YSk7XG4gICAgaWYgKGZyb20gPD0gMCB8fCBmcm9tID4gMzIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29udmVydFJhZGl4Mjogd3JvbmcgZnJvbT0ke2Zyb219YCk7XG4gICAgaWYgKHRvIDw9IDAgfHwgdG8gPiAzMilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb252ZXJ0UmFkaXgyOiB3cm9uZyB0bz0ke3RvfWApO1xuICAgIGlmIChyYWRpeDJjYXJyeShmcm9tLCB0bykgPiAzMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnZlcnRSYWRpeDI6IGNhcnJ5IG92ZXJmbG93IGZyb209JHtmcm9tfSB0bz0ke3RvfSBjYXJyeUJpdHM9JHtyYWRpeDJjYXJyeShmcm9tLCB0byl9YCk7XG4gICAgfVxuICAgIGxldCBjYXJyeSA9IDA7XG4gICAgbGV0IHBvcyA9IDA7IC8vIGJpdHdpc2UgcG9zaXRpb24gaW4gY3VycmVudCBlbGVtZW50XG4gICAgY29uc3QgbWF4ID0gcG93ZXJzW2Zyb21dO1xuICAgIGNvbnN0IG1hc2sgPSBwb3dlcnNbdG9dIC0gMTtcbiAgICBjb25zdCByZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IG4gb2YgZGF0YSkge1xuICAgICAgICBhbnVtYmVyKG4pO1xuICAgICAgICBpZiAobiA+PSBtYXgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnZlcnRSYWRpeDI6IGludmFsaWQgZGF0YSB3b3JkPSR7bn0gZnJvbT0ke2Zyb219YCk7XG4gICAgICAgIGNhcnJ5ID0gKGNhcnJ5IDw8IGZyb20pIHwgbjtcbiAgICAgICAgaWYgKHBvcyArIGZyb20gPiAzMilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY29udmVydFJhZGl4MjogY2Fycnkgb3ZlcmZsb3cgcG9zPSR7cG9zfSBmcm9tPSR7ZnJvbX1gKTtcbiAgICAgICAgcG9zICs9IGZyb207XG4gICAgICAgIGZvciAoOyBwb3MgPj0gdG87IHBvcyAtPSB0bylcbiAgICAgICAgICAgIHJlcy5wdXNoKCgoY2FycnkgPj4gKHBvcyAtIHRvKSkgJiBtYXNrKSA+Pj4gMCk7XG4gICAgICAgIGNvbnN0IHBvdyA9IHBvd2Vyc1twb3NdO1xuICAgICAgICBpZiAocG93ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY2FycnknKTtcbiAgICAgICAgY2FycnkgJj0gcG93IC0gMTsgLy8gY2xlYW4gY2FycnksIG90aGVyd2lzZSBpdCB3aWxsIGNhdXNlIG92ZXJmbG93XG4gICAgfVxuICAgIGNhcnJ5ID0gKGNhcnJ5IDw8ICh0byAtIHBvcykpICYgbWFzaztcbiAgICBpZiAoIXBhZGRpbmcgJiYgcG9zID49IGZyb20pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhjZXNzIHBhZGRpbmcnKTtcbiAgICBpZiAoIXBhZGRpbmcgJiYgY2FycnkgPiAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vbi16ZXJvIHBhZGRpbmc6ICR7Y2Fycnl9YCk7XG4gICAgaWYgKHBhZGRpbmcgJiYgcG9zID4gMClcbiAgICAgICAgcmVzLnB1c2goY2FycnkgPj4+IDApO1xuICAgIHJldHVybiByZXM7XG59XG4vKipcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmZ1bmN0aW9uIHJhZGl4KG51bSkge1xuICAgIGFudW1iZXIobnVtKTtcbiAgICBjb25zdCBfMjU2ID0gMiAqKiA4O1xuICAgIHJldHVybiB7XG4gICAgICAgIGVuY29kZTogKGJ5dGVzKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzQnl0ZXMoYnl0ZXMpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmFkaXguZW5jb2RlIGlucHV0IHNob3VsZCBiZSBVaW50OEFycmF5Jyk7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydFJhZGl4KEFycmF5LmZyb20oYnl0ZXMpLCBfMjU2LCBudW0pO1xuICAgICAgICB9LFxuICAgICAgICBkZWNvZGU6IChkaWdpdHMpID0+IHtcbiAgICAgICAgICAgIGFudW1BcnIoJ3JhZGl4LmRlY29kZScsIGRpZ2l0cyk7XG4gICAgICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKGNvbnZlcnRSYWRpeChkaWdpdHMsIG51bSwgXzI1NikpO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vKipcbiAqIElmIGJvdGggYmFzZXMgYXJlIHBvd2VyIG9mIHNhbWUgbnVtYmVyIChsaWtlIGAyKio4IDwtPiAyKio2NGApLFxuICogdGhlcmUgaXMgYSBsaW5lYXIgYWxnb3JpdGhtLiBGb3Igbm93IHdlIGhhdmUgaW1wbGVtZW50YXRpb24gZm9yIHBvd2VyLW9mLXR3byBiYXNlcyBvbmx5LlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gcmFkaXgyKGJpdHMsIHJldlBhZGRpbmcgPSBmYWxzZSkge1xuICAgIGFudW1iZXIoYml0cyk7XG4gICAgaWYgKGJpdHMgPD0gMCB8fCBiaXRzID4gMzIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmFkaXgyOiBiaXRzIHNob3VsZCBiZSBpbiAoMC4uMzJdJyk7XG4gICAgaWYgKHJhZGl4MmNhcnJ5KDgsIGJpdHMpID4gMzIgfHwgcmFkaXgyY2FycnkoYml0cywgOCkgPiAzMilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyYWRpeDI6IGNhcnJ5IG92ZXJmbG93Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW5jb2RlOiAoYnl0ZXMpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNCeXRlcyhieXRlcykpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyYWRpeDIuZW5jb2RlIGlucHV0IHNob3VsZCBiZSBVaW50OEFycmF5Jyk7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydFJhZGl4MihBcnJheS5mcm9tKGJ5dGVzKSwgOCwgYml0cywgIXJldlBhZGRpbmcpO1xuICAgICAgICB9LFxuICAgICAgICBkZWNvZGU6IChkaWdpdHMpID0+IHtcbiAgICAgICAgICAgIGFudW1BcnIoJ3JhZGl4Mi5kZWNvZGUnLCBkaWdpdHMpO1xuICAgICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShjb252ZXJ0UmFkaXgyKGRpZ2l0cywgYml0cywgOCwgcmV2UGFkZGluZykpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5mdW5jdGlvbiB1bnNhZmVXcmFwcGVyKGZuKSB7XG4gICAgYWZuKGZuKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkgeyB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNoZWNrc3VtKGxlbiwgZm4pIHtcbiAgICBhbnVtYmVyKGxlbik7XG4gICAgYWZuKGZuKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBlbmNvZGUoZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFpc0J5dGVzKGRhdGEpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2hlY2tzdW0uZW5jb2RlOiBpbnB1dCBzaG91bGQgYmUgVWludDhBcnJheScpO1xuICAgICAgICAgICAgY29uc3Qgc3VtID0gZm4oZGF0YSkuc2xpY2UoMCwgbGVuKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGRhdGEubGVuZ3RoICsgbGVuKTtcbiAgICAgICAgICAgIHJlcy5zZXQoZGF0YSk7XG4gICAgICAgICAgICByZXMuc2V0KHN1bSwgZGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSxcbiAgICAgICAgZGVjb2RlKGRhdGEpIHtcbiAgICAgICAgICAgIGlmICghaXNCeXRlcyhkYXRhKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoZWNrc3VtLmRlY29kZTogaW5wdXQgc2hvdWxkIGJlIFVpbnQ4QXJyYXknKTtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhLnNsaWNlKDAsIC1sZW4pO1xuICAgICAgICAgICAgY29uc3Qgb2xkQ2hlY2tzdW0gPSBkYXRhLnNsaWNlKC1sZW4pO1xuICAgICAgICAgICAgY29uc3QgbmV3Q2hlY2tzdW0gPSBmbihwYXlsb2FkKS5zbGljZSgwLCBsZW4pO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgICAgICAgICAgICBpZiAobmV3Q2hlY2tzdW1baV0gIT09IG9sZENoZWNrc3VtW2ldKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY2hlY2tzdW0nKTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyBwcmV0dGllci1pZ25vcmVcbmV4cG9ydHMudXRpbHMgPSB7XG4gICAgYWxwaGFiZXQsIGNoYWluLCBjaGVja3N1bSwgY29udmVydFJhZGl4LCBjb252ZXJ0UmFkaXgyLCByYWRpeCwgcmFkaXgyLCBqb2luLCBwYWRkaW5nLFxufTtcbi8vIFJGQyA0NjQ4IGFrYSBSRkMgMzU0OFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vKipcbiAqIGJhc2UxNiBlbmNvZGluZyBmcm9tIFJGQyA0NjQ4LlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBiYXNlMTYuZW5jb2RlKFVpbnQ4QXJyYXkuZnJvbShbMHgxMiwgMHhhYl0pKTtcbiAqIC8vID0+ICcxMkFCJ1xuICogYGBgXG4gKi9cbmV4cG9ydHMuYmFzZTE2ID0gY2hhaW4ocmFkaXgyKDQpLCBhbHBoYWJldCgnMDEyMzQ1Njc4OUFCQ0RFRicpLCBqb2luKCcnKSk7XG4vKipcbiAqIGJhc2UzMiBlbmNvZGluZyBmcm9tIFJGQyA0NjQ4LiBIYXMgcGFkZGluZy5cbiAqIFVzZSBgYmFzZTMybm9wYWRgIGZvciB1bnBhZGRlZCB2ZXJzaW9uLlxuICogQWxzbyBjaGVjayBvdXQgYGJhc2UzMmhleGAsIGBiYXNlMzJoZXhub3BhZGAsIGBiYXNlMzJjcm9ja2ZvcmRgLlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBiYXNlMzIuZW5jb2RlKFVpbnQ4QXJyYXkuZnJvbShbMHgxMiwgMHhhYl0pKTtcbiAqIC8vID0+ICdDS1ZRPT09PSdcbiAqIGJhc2UzMi5kZWNvZGUoJ0NLVlE9PT09Jyk7XG4gKiAvLyA9PiBVaW50OEFycmF5LmZyb20oWzB4MTIsIDB4YWJdKVxuICogYGBgXG4gKi9cbmV4cG9ydHMuYmFzZTMyID0gY2hhaW4ocmFkaXgyKDUpLCBhbHBoYWJldCgnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnKSwgcGFkZGluZyg1KSwgam9pbignJykpO1xuLyoqXG4gKiBiYXNlMzIgZW5jb2RpbmcgZnJvbSBSRkMgNDY0OC4gTm8gcGFkZGluZy5cbiAqIFVzZSBgYmFzZTMyYCBmb3IgcGFkZGVkIHZlcnNpb24uXG4gKiBBbHNvIGNoZWNrIG91dCBgYmFzZTMyaGV4YCwgYGJhc2UzMmhleG5vcGFkYCwgYGJhc2UzMmNyb2NrZm9yZGAuXG4gKiBAZXhhbXBsZVxuICogYGBganNcbiAqIGJhc2UzMm5vcGFkLmVuY29kZShVaW50OEFycmF5LmZyb20oWzB4MTIsIDB4YWJdKSk7XG4gKiAvLyA9PiAnQ0tWUSdcbiAqIGJhc2UzMm5vcGFkLmRlY29kZSgnQ0tWUScpO1xuICogLy8gPT4gVWludDhBcnJheS5mcm9tKFsweDEyLCAweGFiXSlcbiAqIGBgYFxuICovXG5leHBvcnRzLmJhc2UzMm5vcGFkID0gY2hhaW4ocmFkaXgyKDUpLCBhbHBoYWJldCgnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnKSwgam9pbignJykpO1xuLyoqXG4gKiBiYXNlMzIgZW5jb2RpbmcgZnJvbSBSRkMgNDY0OC4gUGFkZGVkLiBDb21wYXJlZCB0byBvcmRpbmFyeSBgYmFzZTMyYCwgc2xpZ2h0bHkgZGlmZmVyZW50IGFscGhhYmV0LlxuICogVXNlIGBiYXNlMzJoZXhub3BhZGAgZm9yIHVucGFkZGVkIHZlcnNpb24uXG4gKiBAZXhhbXBsZVxuICogYGBganNcbiAqIGJhc2UzMmhleC5lbmNvZGUoVWludDhBcnJheS5mcm9tKFsweDEyLCAweGFiXSkpO1xuICogLy8gPT4gJzJBTEc9PT09J1xuICogYmFzZTMyaGV4LmRlY29kZSgnMkFMRz09PT0nKTtcbiAqIC8vID0+IFVpbnQ4QXJyYXkuZnJvbShbMHgxMiwgMHhhYl0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0cy5iYXNlMzJoZXggPSBjaGFpbihyYWRpeDIoNSksIGFscGhhYmV0KCcwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVicpLCBwYWRkaW5nKDUpLCBqb2luKCcnKSk7XG4vKipcbiAqIGJhc2UzMiBlbmNvZGluZyBmcm9tIFJGQyA0NjQ4LiBObyBwYWRkaW5nLiBDb21wYXJlZCB0byBvcmRpbmFyeSBgYmFzZTMyYCwgc2xpZ2h0bHkgZGlmZmVyZW50IGFscGhhYmV0LlxuICogVXNlIGBiYXNlMzJoZXhgIGZvciBwYWRkZWQgdmVyc2lvbi5cbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogYmFzZTMyaGV4bm9wYWQuZW5jb2RlKFVpbnQ4QXJyYXkuZnJvbShbMHgxMiwgMHhhYl0pKTtcbiAqIC8vID0+ICcyQUxHJ1xuICogYmFzZTMyaGV4bm9wYWQuZGVjb2RlKCcyQUxHJyk7XG4gKiAvLyA9PiBVaW50OEFycmF5LmZyb20oWzB4MTIsIDB4YWJdKVxuICogYGBgXG4gKi9cbmV4cG9ydHMuYmFzZTMyaGV4bm9wYWQgPSBjaGFpbihyYWRpeDIoNSksIGFscGhhYmV0KCcwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVicpLCBqb2luKCcnKSk7XG4vKipcbiAqIGJhc2UzMiBlbmNvZGluZyBmcm9tIFJGQyA0NjQ4LiBEb3VnIENyb2NrZm9yZCdzIHZlcnNpb24uXG4gKiBodHRwczovL3d3dy5jcm9ja2ZvcmQuY29tL2Jhc2UzMi5odG1sXG4gKiBAZXhhbXBsZVxuICogYGBganNcbiAqIGJhc2UzMmNyb2NrZm9yZC5lbmNvZGUoVWludDhBcnJheS5mcm9tKFsweDEyLCAweGFiXSkpO1xuICogLy8gPT4gJzJBTkcnXG4gKiBiYXNlMzJjcm9ja2ZvcmQuZGVjb2RlKCcyQU5HJyk7XG4gKiAvLyA9PiBVaW50OEFycmF5LmZyb20oWzB4MTIsIDB4YWJdKVxuICogYGBgXG4gKi9cbmV4cG9ydHMuYmFzZTMyY3JvY2tmb3JkID0gY2hhaW4ocmFkaXgyKDUpLCBhbHBoYWJldCgnMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVonKSwgam9pbignJyksIG5vcm1hbGl6ZSgocykgPT4gcy50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL08vZywgJzAnKS5yZXBsYWNlKC9bSUxdL2csICcxJykpKTtcbi8vIEJ1aWx0LWluIGJhc2U2NCBjb252ZXJzaW9uIGh0dHBzOi8vY2FuaXVzZS5jb20vbWRuLWphdmFzY3JpcHRfYnVpbHRpbnNfdWludDhhcnJheV9mcm9tYmFzZTY0XG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IGhhc0Jhc2U2NEJ1aWx0aW4gPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IHR5cGVvZiBVaW50OEFycmF5LmZyb20oW10pLnRvQmFzZTY0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIFVpbnQ4QXJyYXkuZnJvbUJhc2U2NCA9PT0gJ2Z1bmN0aW9uJykoKTtcbmNvbnN0IGRlY29kZUJhc2U2NEJ1aWx0aW4gPSAocywgaXNVcmwpID0+IHtcbiAgICBhc3RyKCdiYXNlNjQnLCBzKTtcbiAgICBjb25zdCByZSA9IGlzVXJsID8gL15bQS1aYS16MC05PV8tXSskLyA6IC9eW0EtWmEtejAtOT0rL10rJC87XG4gICAgY29uc3QgYWxwaGFiZXQgPSBpc1VybCA/ICdiYXNlNjR1cmwnIDogJ2Jhc2U2NCc7XG4gICAgaWYgKHMubGVuZ3RoID4gMCAmJiAhcmUudGVzdChzKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGJhc2U2NCcpO1xuICAgIHJldHVybiBVaW50OEFycmF5LmZyb21CYXNlNjQocywgeyBhbHBoYWJldCwgbGFzdENodW5rSGFuZGxpbmc6ICdzdHJpY3QnIH0pO1xufTtcbi8qKlxuICogYmFzZTY0IGZyb20gUkZDIDQ2NDguIFBhZGRlZC5cbiAqIFVzZSBgYmFzZTY0bm9wYWRgIGZvciB1bnBhZGRlZCB2ZXJzaW9uLlxuICogQWxzbyBjaGVjayBvdXQgYGJhc2U2NHVybGAsIGBiYXNlNjR1cmxub3BhZGAuXG4gKiBGYWxscyBiYWNrIHRvIGJ1aWx0LWluIGZ1bmN0aW9uLCB3aGVuIGF2YWlsYWJsZS5cbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogYmFzZTY0LmVuY29kZShVaW50OEFycmF5LmZyb20oWzB4MTIsIDB4YWJdKSk7XG4gKiAvLyA9PiAnRXFzPSdcbiAqIGJhc2U2NC5kZWNvZGUoJ0Vxcz0nKTtcbiAqIC8vID0+IFVpbnQ4QXJyYXkuZnJvbShbMHgxMiwgMHhhYl0pXG4gKiBgYGBcbiAqL1xuLy8gcHJldHRpZXItaWdub3JlXG5leHBvcnRzLmJhc2U2NCA9IGhhc0Jhc2U2NEJ1aWx0aW4gPyB7XG4gICAgZW5jb2RlKGIpIHsgYWJ5dGVzKGIpOyByZXR1cm4gYi50b0Jhc2U2NCgpOyB9LFxuICAgIGRlY29kZShzKSB7IHJldHVybiBkZWNvZGVCYXNlNjRCdWlsdGluKHMsIGZhbHNlKTsgfSxcbn0gOiBjaGFpbihyYWRpeDIoNiksIGFscGhhYmV0KCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJyksIHBhZGRpbmcoNiksIGpvaW4oJycpKTtcbi8qKlxuICogYmFzZTY0IGZyb20gUkZDIDQ2NDguIE5vIHBhZGRpbmcuXG4gKiBVc2UgYGJhc2U2NGAgZm9yIHBhZGRlZCB2ZXJzaW9uLlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBiYXNlNjRub3BhZC5lbmNvZGUoVWludDhBcnJheS5mcm9tKFsweDEyLCAweGFiXSkpO1xuICogLy8gPT4gJ0VxcydcbiAqIGJhc2U2NG5vcGFkLmRlY29kZSgnRXFzJyk7XG4gKiAvLyA9PiBVaW50OEFycmF5LmZyb20oWzB4MTIsIDB4YWJdKVxuICogYGBgXG4gKi9cbmV4cG9ydHMuYmFzZTY0bm9wYWQgPSBjaGFpbihyYWRpeDIoNiksIGFscGhhYmV0KCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJyksIGpvaW4oJycpKTtcbi8qKlxuICogYmFzZTY0IGZyb20gUkZDIDQ2NDgsIHVzaW5nIFVSTC1zYWZlIGFscGhhYmV0LiBQYWRkZWQuXG4gKiBVc2UgYGJhc2U2NHVybG5vcGFkYCBmb3IgdW5wYWRkZWQgdmVyc2lvbi5cbiAqIEZhbGxzIGJhY2sgdG8gYnVpbHQtaW4gZnVuY3Rpb24sIHdoZW4gYXZhaWxhYmxlLlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBiYXNlNjR1cmwuZW5jb2RlKFVpbnQ4QXJyYXkuZnJvbShbMHgxMiwgMHhhYl0pKTtcbiAqIC8vID0+ICdFcXM9J1xuICogYmFzZTY0dXJsLmRlY29kZSgnRXFzPScpO1xuICogLy8gPT4gVWludDhBcnJheS5mcm9tKFsweDEyLCAweGFiXSlcbiAqIGBgYFxuICovXG4vLyBwcmV0dGllci1pZ25vcmVcbmV4cG9ydHMuYmFzZTY0dXJsID0gaGFzQmFzZTY0QnVpbHRpbiA/IHtcbiAgICBlbmNvZGUoYikgeyBhYnl0ZXMoYik7IHJldHVybiBiLnRvQmFzZTY0KHsgYWxwaGFiZXQ6ICdiYXNlNjR1cmwnIH0pOyB9LFxuICAgIGRlY29kZShzKSB7IHJldHVybiBkZWNvZGVCYXNlNjRCdWlsdGluKHMsIHRydWUpOyB9LFxufSA6IGNoYWluKHJhZGl4Mig2KSwgYWxwaGFiZXQoJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8nKSwgcGFkZGluZyg2KSwgam9pbignJykpO1xuLyoqXG4gKiBiYXNlNjQgZnJvbSBSRkMgNDY0OCwgdXNpbmcgVVJMLXNhZmUgYWxwaGFiZXQuIE5vIHBhZGRpbmcuXG4gKiBVc2UgYGJhc2U2NHVybGAgZm9yIHBhZGRlZCB2ZXJzaW9uLlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBiYXNlNjR1cmxub3BhZC5lbmNvZGUoVWludDhBcnJheS5mcm9tKFsweDEyLCAweGFiXSkpO1xuICogLy8gPT4gJ0VxcydcbiAqIGJhc2U2NHVybG5vcGFkLmRlY29kZSgnRXFzJyk7XG4gKiAvLyA9PiBVaW50OEFycmF5LmZyb20oWzB4MTIsIDB4YWJdKVxuICogYGBgXG4gKi9cbmV4cG9ydHMuYmFzZTY0dXJsbm9wYWQgPSBjaGFpbihyYWRpeDIoNiksIGFscGhhYmV0KCdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJyksIGpvaW4oJycpKTtcbi8vIGJhc2U1OCBjb2RlXG4vLyAtLS0tLS0tLS0tLVxuY29uc3QgZ2VuQmFzZTU4ID0gLyogQF9fTk9fU0lERV9FRkZFQ1RTX18gKi8gKGFiYykgPT4gY2hhaW4ocmFkaXgoNTgpLCBhbHBoYWJldChhYmMpLCBqb2luKCcnKSk7XG4vKipcbiAqIGJhc2U1ODogYmFzZTY0IHdpdGhvdXQgYW1iaWdvdXMgY2hhcmFjdGVycyArLCAvLCAwLCBPLCBJLCBsLlxuICogUXVhZHJhdGljIChPKG5eMikpIC0gc28sIGNhbid0IGJlIHVzZWQgb24gbGFyZ2UgaW5wdXRzLlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBiYXNlNTguZGVjb2RlKCcwMWFiY2RlZicpO1xuICogLy8gPT4gJzNVaEpXJ1xuICogYGBgXG4gKi9cbmV4cG9ydHMuYmFzZTU4ID0gZ2VuQmFzZTU4KCcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6Jyk7XG4vKipcbiAqIGJhc2U1ODogZmxpY2tyIHZlcnNpb24uIENoZWNrIG91dCBgYmFzZTU4YC5cbiAqL1xuZXhwb3J0cy5iYXNlNThmbGlja3IgPSBnZW5CYXNlNTgoJzEyMzQ1Njc4OWFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXpBQkNERUZHSEpLTE1OUFFSU1RVVldYWVonKTtcbi8qKlxuICogYmFzZTU4OiBYUlAgdmVyc2lvbi4gQ2hlY2sgb3V0IGBiYXNlNThgLlxuICovXG5leHBvcnRzLmJhc2U1OHhycCA9IGdlbkJhc2U1OCgncnBzaG5hZjM5d0JVRE5FR0hKS0xNNFBRUlNUN1ZXWFlaMmJjZGVDZzY1amttOG9GcWkxdHV2QXh5eicpO1xuLy8gRGF0YSBsZW4gKGluZGV4KSAtPiBlbmNvZGVkIGJsb2NrIGxlblxuY29uc3QgWE1SX0JMT0NLX0xFTiA9IFswLCAyLCAzLCA1LCA2LCA3LCA5LCAxMCwgMTFdO1xuLyoqXG4gKiBiYXNlNTg6IFhNUiB2ZXJzaW9uLiBDaGVjayBvdXQgYGJhc2U1OGAuXG4gKiBEb25lIGluIDgtYnl0ZSBibG9ja3MgKHdoaWNoIGVxdWFscyAxMSBjaGFycyBpbiBkZWNvZGluZykuIExhc3QgKG5vbi1mdWxsKSBibG9jayBwYWRkZWQgd2l0aCAnMScgdG8gc2l6ZSBpbiBYTVJfQkxPQ0tfTEVOLlxuICogQmxvY2sgZW5jb2Rpbmcgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHF1YWRyYXRpYyBjb21wbGV4aXR5IG9mIGJhc2U1OC5cbiAqL1xuZXhwb3J0cy5iYXNlNTh4bXIgPSB7XG4gICAgZW5jb2RlKGRhdGEpIHtcbiAgICAgICAgbGV0IHJlcyA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDgpIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gZGF0YS5zdWJhcnJheShpLCBpICsgOCk7XG4gICAgICAgICAgICByZXMgKz0gZXhwb3J0cy5iYXNlNTguZW5jb2RlKGJsb2NrKS5wYWRTdGFydChYTVJfQkxPQ0tfTEVOW2Jsb2NrLmxlbmd0aF0sICcxJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgIGRlY29kZShzdHIpIHtcbiAgICAgICAgbGV0IHJlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gMTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHNsaWNlID0gc3RyLnNsaWNlKGksIGkgKyAxMSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja0xlbiA9IFhNUl9CTE9DS19MRU4uaW5kZXhPZihzbGljZS5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBleHBvcnRzLmJhc2U1OC5kZWNvZGUoc2xpY2UpO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBibG9jay5sZW5ndGggLSBibG9ja0xlbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrW2pdICE9PSAwKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Jhc2U1OHhtcjogd3JvbmcgcGFkZGluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdChBcnJheS5mcm9tKGJsb2NrLnNsaWNlKGJsb2NrLmxlbmd0aCAtIGJsb2NrTGVuKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LmZyb20ocmVzKTtcbiAgICB9LFxufTtcbi8qKlxuICogTWV0aG9kLCB3aGljaCBjcmVhdGVzIGJhc2U1OGNoZWNrIGVuY29kZXIuXG4gKiBSZXF1aXJlcyBmdW5jdGlvbiwgY2FsY3VsYXRpbmcgc2hhMjU2LlxuICovXG5jb25zdCBjcmVhdGVCYXNlNThjaGVjayA9IChzaGEyNTYpID0+IGNoYWluKGNoZWNrc3VtKDQsIChkYXRhKSA9PiBzaGEyNTYoc2hhMjU2KGRhdGEpKSksIGV4cG9ydHMuYmFzZTU4KTtcbmV4cG9ydHMuY3JlYXRlQmFzZTU4Y2hlY2sgPSBjcmVhdGVCYXNlNThjaGVjaztcbi8qKlxuICogVXNlIGBjcmVhdGVCYXNlNThjaGVja2AgaW5zdGVhZC5cbiAqIEBkZXByZWNhdGVkXG4gKi9cbmV4cG9ydHMuYmFzZTU4Y2hlY2sgPSBleHBvcnRzLmNyZWF0ZUJhc2U1OGNoZWNrO1xuY29uc3QgQkVDSF9BTFBIQUJFVCA9IGNoYWluKGFscGhhYmV0KCdxcHpyeTl4OGdmMnR2ZHcwczNqbjU0a2hjZTZtdWE3bCcpLCBqb2luKCcnKSk7XG5jb25zdCBQT0xZTU9EX0dFTkVSQVRPUlMgPSBbMHgzYjZhNTdiMiwgMHgyNjUwOGU2ZCwgMHgxZWExMTlmYSwgMHgzZDQyMzNkZCwgMHgyYTE0NjJiM107XG5mdW5jdGlvbiBiZWNoMzJQb2x5bW9kKHByZSkge1xuICAgIGNvbnN0IGIgPSBwcmUgPj4gMjU7XG4gICAgbGV0IGNoayA9IChwcmUgJiAweDFmZmZmZmYpIDw8IDU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBQT0xZTU9EX0dFTkVSQVRPUlMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCgoYiA+PiBpKSAmIDEpID09PSAxKVxuICAgICAgICAgICAgY2hrIF49IFBPTFlNT0RfR0VORVJBVE9SU1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaztcbn1cbmZ1bmN0aW9uIGJlY2hDaGVja3N1bShwcmVmaXgsIHdvcmRzLCBlbmNvZGluZ0NvbnN0ID0gMSkge1xuICAgIGNvbnN0IGxlbiA9IHByZWZpeC5sZW5ndGg7XG4gICAgbGV0IGNoayA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBjID0gcHJlZml4LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjIDwgMzMgfHwgYyA+IDEyNilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcmVmaXggKCR7cHJlZml4fSlgKTtcbiAgICAgICAgY2hrID0gYmVjaDMyUG9seW1vZChjaGspIF4gKGMgPj4gNSk7XG4gICAgfVxuICAgIGNoayA9IGJlY2gzMlBvbHltb2QoY2hrKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgICBjaGsgPSBiZWNoMzJQb2x5bW9kKGNoaykgXiAocHJlZml4LmNoYXJDb2RlQXQoaSkgJiAweDFmKTtcbiAgICBmb3IgKGxldCB2IG9mIHdvcmRzKVxuICAgICAgICBjaGsgPSBiZWNoMzJQb2x5bW9kKGNoaykgXiB2O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKVxuICAgICAgICBjaGsgPSBiZWNoMzJQb2x5bW9kKGNoayk7XG4gICAgY2hrIF49IGVuY29kaW5nQ29uc3Q7XG4gICAgcmV0dXJuIEJFQ0hfQUxQSEFCRVQuZW5jb2RlKGNvbnZlcnRSYWRpeDIoW2NoayAlIHBvd2Vyc1szMF1dLCAzMCwgNSwgZmFsc2UpKTtcbn1cbi8qKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZnVuY3Rpb24gZ2VuQmVjaDMyKGVuY29kaW5nKSB7XG4gICAgY29uc3QgRU5DT0RJTkdfQ09OU1QgPSBlbmNvZGluZyA9PT0gJ2JlY2gzMicgPyAxIDogMHgyYmM4MzBhMztcbiAgICBjb25zdCBfd29yZHMgPSByYWRpeDIoNSk7XG4gICAgY29uc3QgZnJvbVdvcmRzID0gX3dvcmRzLmRlY29kZTtcbiAgICBjb25zdCB0b1dvcmRzID0gX3dvcmRzLmVuY29kZTtcbiAgICBjb25zdCBmcm9tV29yZHNVbnNhZmUgPSB1bnNhZmVXcmFwcGVyKGZyb21Xb3Jkcyk7XG4gICAgZnVuY3Rpb24gZW5jb2RlKHByZWZpeCwgd29yZHMsIGxpbWl0ID0gOTApIHtcbiAgICAgICAgYXN0cignYmVjaDMyLmVuY29kZSBwcmVmaXgnLCBwcmVmaXgpO1xuICAgICAgICBpZiAoaXNCeXRlcyh3b3JkcykpXG4gICAgICAgICAgICB3b3JkcyA9IEFycmF5LmZyb20od29yZHMpO1xuICAgICAgICBhbnVtQXJyKCdiZWNoMzIuZW5jb2RlJywgd29yZHMpO1xuICAgICAgICBjb25zdCBwbGVuID0gcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgaWYgKHBsZW4gPT09IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIHByZWZpeCBsZW5ndGggJHtwbGVufWApO1xuICAgICAgICBjb25zdCBhY3R1YWxMZW5ndGggPSBwbGVuICsgNyArIHdvcmRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxpbWl0ICE9PSBmYWxzZSAmJiBhY3R1YWxMZW5ndGggPiBsaW1pdClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYExlbmd0aCAke2FjdHVhbExlbmd0aH0gZXhjZWVkcyBsaW1pdCAke2xpbWl0fWApO1xuICAgICAgICBjb25zdCBsb3dlcmVkID0gcHJlZml4LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHN1bSA9IGJlY2hDaGVja3N1bShsb3dlcmVkLCB3b3JkcywgRU5DT0RJTkdfQ09OU1QpO1xuICAgICAgICByZXR1cm4gYCR7bG93ZXJlZH0xJHtCRUNIX0FMUEhBQkVULmVuY29kZSh3b3Jkcyl9JHtzdW19YDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVjb2RlKHN0ciwgbGltaXQgPSA5MCkge1xuICAgICAgICBhc3RyKCdiZWNoMzIuZGVjb2RlIGlucHV0Jywgc3RyKTtcbiAgICAgICAgY29uc3Qgc2xlbiA9IHN0ci5sZW5ndGg7XG4gICAgICAgIGlmIChzbGVuIDwgOCB8fCAobGltaXQgIT09IGZhbHNlICYmIHNsZW4gPiBsaW1pdCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIHN0cmluZyBsZW5ndGg6ICR7c2xlbn0gKCR7c3RyfSkuIEV4cGVjdGVkICg4Li4ke2xpbWl0fSlgKTtcbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbWl4ZWQgY2FzZVxuICAgICAgICBjb25zdCBsb3dlcmVkID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChzdHIgIT09IGxvd2VyZWQgJiYgc3RyICE9PSBzdHIudG9VcHBlckNhc2UoKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3RyaW5nIG11c3QgYmUgbG93ZXJjYXNlIG9yIHVwcGVyY2FzZWApO1xuICAgICAgICBjb25zdCBzZXBJbmRleCA9IGxvd2VyZWQubGFzdEluZGV4T2YoJzEnKTtcbiAgICAgICAgaWYgKHNlcEluZGV4ID09PSAwIHx8IHNlcEluZGV4ID09PSAtMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGV0dGVyIFwiMVwiIG11c3QgYmUgcHJlc2VudCBiZXR3ZWVuIHByZWZpeCBhbmQgZGF0YSBvbmx5YCk7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGxvd2VyZWQuc2xpY2UoMCwgc2VwSW5kZXgpO1xuICAgICAgICBjb25zdCBkYXRhID0gbG93ZXJlZC5zbGljZShzZXBJbmRleCArIDEpO1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCA2KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhIG11c3QgYmUgYXQgbGVhc3QgNiBjaGFyYWN0ZXJzIGxvbmcnKTtcbiAgICAgICAgY29uc3Qgd29yZHMgPSBCRUNIX0FMUEhBQkVULmRlY29kZShkYXRhKS5zbGljZSgwLCAtNik7XG4gICAgICAgIGNvbnN0IHN1bSA9IGJlY2hDaGVja3N1bShwcmVmaXgsIHdvcmRzLCBFTkNPRElOR19DT05TVCk7XG4gICAgICAgIGlmICghZGF0YS5lbmRzV2l0aChzdW0pKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoZWNrc3VtIGluICR7c3RyfTogZXhwZWN0ZWQgXCIke3N1bX1cImApO1xuICAgICAgICByZXR1cm4geyBwcmVmaXgsIHdvcmRzIH07XG4gICAgfVxuICAgIGNvbnN0IGRlY29kZVVuc2FmZSA9IHVuc2FmZVdyYXBwZXIoZGVjb2RlKTtcbiAgICBmdW5jdGlvbiBkZWNvZGVUb0J5dGVzKHN0cikge1xuICAgICAgICBjb25zdCB7IHByZWZpeCwgd29yZHMgfSA9IGRlY29kZShzdHIsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHsgcHJlZml4LCB3b3JkcywgYnl0ZXM6IGZyb21Xb3Jkcyh3b3JkcykgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5jb2RlRnJvbUJ5dGVzKHByZWZpeCwgYnl0ZXMpIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZShwcmVmaXgsIHRvV29yZHMoYnl0ZXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZW5jb2RlLFxuICAgICAgICBkZWNvZGUsXG4gICAgICAgIGVuY29kZUZyb21CeXRlcyxcbiAgICAgICAgZGVjb2RlVG9CeXRlcyxcbiAgICAgICAgZGVjb2RlVW5zYWZlLFxuICAgICAgICBmcm9tV29yZHMsXG4gICAgICAgIGZyb21Xb3Jkc1Vuc2FmZSxcbiAgICAgICAgdG9Xb3JkcyxcbiAgICB9O1xufVxuLyoqXG4gKiBiZWNoMzIgZnJvbSBCSVAgMTczLiBPcGVyYXRlcyBvbiB3b3Jkcy5cbiAqIEZvciBoaWdoLWxldmVsLCBjaGVjayBvdXQgc2N1cmUtYnRjLXNpZ25lcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvc2N1cmUtYnRjLXNpZ25lci5cbiAqL1xuZXhwb3J0cy5iZWNoMzIgPSBnZW5CZWNoMzIoJ2JlY2gzMicpO1xuLyoqXG4gKiBiZWNoMzJtIGZyb20gQklQIDM1MC4gT3BlcmF0ZXMgb24gd29yZHMuXG4gKiBJdCB3YXMgdG8gbWl0aWdhdGUgYGJlY2gzMmAgd2Vha25lc3Nlcy5cbiAqIEZvciBoaWdoLWxldmVsLCBjaGVjayBvdXQgc2N1cmUtYnRjLXNpZ25lcjpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvc2N1cmUtYnRjLXNpZ25lci5cbiAqL1xuZXhwb3J0cy5iZWNoMzJtID0gZ2VuQmVjaDMyKCdiZWNoMzJtJyk7XG4vKipcbiAqIFVURi04LXRvLWJ5dGUgZGVjb2Rlci4gVXNlcyBidWlsdC1pbiBUZXh0RGVjb2RlciAvIFRleHRFbmNvZGVyLlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBjb25zdCBiID0gdXRmOC5kZWNvZGUoXCJoZXlcIik7IC8vID0+IG5ldyBVaW50OEFycmF5KFsgMTA0LCAxMDEsIDEyMSBdKVxuICogY29uc3Qgc3RyID0gdXRmOC5lbmNvZGUoYik7IC8vIFwiaGV5XCJcbiAqIGBgYFxuICovXG5leHBvcnRzLnV0ZjggPSB7XG4gICAgZW5jb2RlOiAoZGF0YSkgPT4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGRhdGEpLFxuICAgIGRlY29kZTogKHN0cikgPT4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0ciksXG59O1xuLy8gQnVpbHQtaW4gaGV4IGNvbnZlcnNpb24gaHR0cHM6Ly9jYW5pdXNlLmNvbS9tZG4tamF2YXNjcmlwdF9idWlsdGluc191aW50OGFycmF5X2Zyb21oZXhcbi8vIHByZXR0aWVyLWlnbm9yZVxuY29uc3QgaGFzSGV4QnVpbHRpbiA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4gdHlwZW9mIFVpbnQ4QXJyYXkuZnJvbShbXSkudG9IZXggPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgVWludDhBcnJheS5mcm9tSGV4ID09PSAnZnVuY3Rpb24nKSgpO1xuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBoZXhCdWlsdGluID0ge1xuICAgIGVuY29kZShkYXRhKSB7IGFieXRlcyhkYXRhKTsgcmV0dXJuIGRhdGEudG9IZXgoKTsgfSxcbiAgICBkZWNvZGUocykgeyBhc3RyKCdoZXgnLCBzKTsgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbUhleChzKTsgfSxcbn07XG4vKipcbiAqIGhleCBzdHJpbmcgZGVjb2Rlci4gVXNlcyBidWlsdC1pbiBmdW5jdGlvbiwgd2hlbiBhdmFpbGFibGUuXG4gKiBAZXhhbXBsZVxuICogYGBganNcbiAqIGNvbnN0IGIgPSBoZXguZGVjb2RlKFwiMDEwMmZmXCIpOyAvLyA9PiBuZXcgVWludDhBcnJheShbIDEsIDIsIDI1NSBdKVxuICogY29uc3Qgc3RyID0gaGV4LmVuY29kZShiKTsgLy8gXCIwMTAyZmZcIlxuICogYGBgXG4gKi9cbmV4cG9ydHMuaGV4ID0gaGFzSGV4QnVpbHRpblxuICAgID8gaGV4QnVpbHRpblxuICAgIDogY2hhaW4ocmFkaXgyKDQpLCBhbHBoYWJldCgnMDEyMzQ1Njc4OWFiY2RlZicpLCBqb2luKCcnKSwgbm9ybWFsaXplKChzKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcyAhPT0gJ3N0cmluZycgfHwgcy5sZW5ndGggJSAyICE9PSAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaGV4LmRlY29kZTogZXhwZWN0ZWQgc3RyaW5nLCBnb3QgJHt0eXBlb2Ygc30gd2l0aCBsZW5ndGggJHtzLmxlbmd0aH1gKTtcbiAgICAgICAgcmV0dXJuIHMudG9Mb3dlckNhc2UoKTtcbiAgICB9KSk7XG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IENPREVSUyA9IHtcbiAgICB1dGY4OiBleHBvcnRzLnV0ZjgsIGhleDogZXhwb3J0cy5oZXgsIGJhc2UxNjogZXhwb3J0cy5iYXNlMTYsIGJhc2UzMjogZXhwb3J0cy5iYXNlMzIsIGJhc2U2NDogZXhwb3J0cy5iYXNlNjQsIGJhc2U2NHVybDogZXhwb3J0cy5iYXNlNjR1cmwsIGJhc2U1ODogZXhwb3J0cy5iYXNlNTgsIGJhc2U1OHhtcjogZXhwb3J0cy5iYXNlNTh4bXJcbn07XG5jb25zdCBjb2RlclR5cGVFcnJvciA9ICdJbnZhbGlkIGVuY29kaW5nIHR5cGUuIEF2YWlsYWJsZSB0eXBlczogdXRmOCwgaGV4LCBiYXNlMTYsIGJhc2UzMiwgYmFzZTY0LCBiYXNlNjR1cmwsIGJhc2U1OCwgYmFzZTU4eG1yJztcbi8qKiBAZGVwcmVjYXRlZCAqL1xuY29uc3QgYnl0ZXNUb1N0cmluZyA9ICh0eXBlLCBieXRlcykgPT4ge1xuICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycgfHwgIUNPREVSUy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjb2RlclR5cGVFcnJvcik7XG4gICAgaWYgKCFpc0J5dGVzKGJ5dGVzKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYnl0ZXNUb1N0cmluZygpIGV4cGVjdHMgVWludDhBcnJheScpO1xuICAgIHJldHVybiBDT0RFUlNbdHlwZV0uZW5jb2RlKGJ5dGVzKTtcbn07XG5leHBvcnRzLmJ5dGVzVG9TdHJpbmcgPSBieXRlc1RvU3RyaW5nO1xuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnRzLnN0ciA9IGV4cG9ydHMuYnl0ZXNUb1N0cmluZzsgLy8gYXMgaW4gcHl0aG9uLCBidXQgZm9yIGJ5dGVzIG9ubHlcbi8qKiBAZGVwcmVjYXRlZCAqL1xuY29uc3Qgc3RyaW5nVG9CeXRlcyA9ICh0eXBlLCBzdHIpID0+IHtcbiAgICBpZiAoIUNPREVSUy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjb2RlclR5cGVFcnJvcik7XG4gICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmdUb0J5dGVzKCkgZXhwZWN0cyBzdHJpbmcnKTtcbiAgICByZXR1cm4gQ09ERVJTW3R5cGVdLmRlY29kZShzdHIpO1xufTtcbmV4cG9ydHMuc3RyaW5nVG9CeXRlcyA9IHN0cmluZ1RvQnl0ZXM7XG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydHMuYnl0ZXMgPSBleHBvcnRzLnN0cmluZ1RvQnl0ZXM7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@scure/base/lib/index.js\n\n}")},"./node_modules/@semantic-ui-react/event-stack/lib/cjs/event-stack.development.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{\n\nObject.defineProperty(exports, "__esModule", ({ value: true }));\n\nvar env = __webpack_require__(/*! exenv */ "./node_modules/exenv/index.js");\nvar PropTypes = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\n\nfunction _typeof(obj) {\n if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== "function" && superClass !== null) {\n throw new TypeError("Super expression must either be null or a function");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === "object" || typeof call === "function")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\n/**\n * The current implementation was chosen by performance and compatibility reasons, feel free to play\n * with benchmarks and submit PR with faster alternative. Each method contains links to benchmarks.\n */\nvar EventSet =\n/*#__PURE__*/\nfunction () {\n /**\n * @see https://jsperf.com/suir-eventset-constructor\n */\n function EventSet(eventHandlers) {\n _classCallCheck(this, EventSet);\n\n _defineProperty(this, "handlers", void 0);\n\n this.handlers = eventHandlers.slice(0);\n }\n /**\n * @see https://jsperf.com/suir-eventset-addhandlers\n */\n\n\n _createClass(EventSet, [{\n key: "addHandlers",\n value: function addHandlers(additionalHandlers) {\n var newHandlers = this.handlers.slice(0);\n var length = additionalHandlers.length; // Heads up!\n // Previously we use Set there, it granted uniqueness of handlers, now dispatchEvent() is\n // responsible for this.\n\n for (var i = 0; i < length; i += 1) {\n newHandlers.push(additionalHandlers[i]);\n }\n\n return new EventSet(newHandlers);\n }\n /**\n * @see https://jsperf.com/suir-eventset-dispatchsingle\n * @see https://jsperf.com/suir-eventset-dispatchmultiple2\n */\n\n }, {\n key: "dispatchEvent",\n value: function dispatchEvent(event, dispatchAll) {\n var count = this.handlers.length - 1;\n\n if (!dispatchAll) {\n // Heads up!\n // We don\'t use .pop() there because it will mutate the array.\n var recentHandler = this.handlers[count];\n recentHandler(event);\n return;\n }\n\n for (var i = count; i >= 0; i -= 1) {\n if (!this.handlers[i].called) {\n this.handlers[i].called = true;\n this.handlers[i](event);\n }\n }\n\n for (var _i = count; _i >= 0; _i -= 1) {\n this.handlers[_i].called = false;\n }\n }\n }, {\n key: "hasHandlers",\n value: function hasHandlers() {\n return this.handlers.length > 0;\n }\n /**\n * @see https://jsperf.com/suir-eventset-removehandlers\n */\n\n }, {\n key: "removeHandlers",\n value: function removeHandlers(removalHandlers) {\n var newHandlers = [];\n var length = this.handlers.length;\n\n for (var i = 0; i < length; i += 1) {\n var handler = this.handlers[i];\n\n if (removalHandlers.indexOf(handler) === -1) {\n newHandlers.push(handler);\n }\n }\n\n return new EventSet(newHandlers);\n }\n }]);\n\n return EventSet;\n}();\n\n/**\n * An IE11-compatible function.\n *\n * @see https://jsperf.com/suir-clone-map\n */\nfunction cloneMap(map) {\n var newMap = new Map();\n map.forEach(function (value, key) {\n newMap.set(key, value);\n });\n return newMap;\n}\nfunction normalizeHandlers(handlers) {\n return Array.isArray(handlers) ? handlers : [handlers];\n}\n/**\n * Asserts that the passed value is React.RefObject\n *\n * @see https://github.com/facebook/react/blob/v16.8.2/packages/react-reconciler/src/ReactFiberCommitWork.js#L665\n */\n\nvar isRefObject = function isRefObject(ref // eslint-disable-next-line\n) {\n return ref !== null && _typeof(ref) === \'object\' && ref.hasOwnProperty(\'current\');\n};\n/**\n * Normalizes `target` for EventStack, because `target` can be passed as `boolean` or `string`.\n *\n * @see https://jsperf.com/suir-normalize-target\n */\n\nfunction normalizeTarget(target) {\n if (target === \'document\') return document;\n if (target === \'window\') return window;\n if (isRefObject(target)) return target.current || document;\n return target || document;\n}\n\nvar EventPool =\n/*#__PURE__*/\nfunction () {\n function EventPool(poolName, handlerSets) {\n _classCallCheck(this, EventPool);\n\n _defineProperty(this, "handlerSets", void 0);\n\n _defineProperty(this, "poolName", void 0);\n\n this.handlerSets = handlerSets;\n this.poolName = poolName;\n }\n\n _createClass(EventPool, [{\n key: "addHandlers",\n value: function addHandlers(eventType, eventHandlers) {\n var handlerSets = cloneMap(this.handlerSets);\n\n if (handlerSets.has(eventType)) {\n var eventSet = handlerSets.get(eventType);\n handlerSets.set(eventType, eventSet.addHandlers(eventHandlers));\n } else {\n handlerSets.set(eventType, new EventSet(eventHandlers));\n }\n\n return new EventPool(this.poolName, handlerSets);\n }\n }, {\n key: "dispatchEvent",\n value: function dispatchEvent(eventType, event) {\n var handlerSet = this.handlerSets.get(eventType);\n var shouldDispatchAll = this.poolName === \'default\';\n\n if (handlerSet) {\n handlerSet.dispatchEvent(event, shouldDispatchAll);\n }\n }\n }, {\n key: "hasHandlers",\n value: function hasHandlers(eventType) {\n if (!eventType) {\n return this.handlerSets.size > 0;\n }\n\n var eventSet = this.handlerSets.get(eventType);\n\n if (eventSet) {\n return eventSet.hasHandlers();\n }\n\n return false;\n }\n }, {\n key: "removeHandlers",\n value: function removeHandlers(eventType, eventHandlers) {\n var handlerSets = cloneMap(this.handlerSets);\n\n if (!handlerSets.has(eventType)) {\n return new EventPool(this.poolName, handlerSets);\n }\n\n var currentSet = handlerSets.get(eventType);\n var nextSet = currentSet.removeHandlers(eventHandlers);\n\n if (nextSet.hasHandlers()) {\n handlerSets.set(eventType, nextSet);\n } else {\n handlerSets.delete(eventType);\n }\n\n return new EventPool(this.poolName, handlerSets);\n }\n }]);\n\n return EventPool;\n}();\n\n_defineProperty(EventPool, "createByType", function (poolName, eventType, eventHandlers) {\n var handlerSets = new Map();\n handlerSets.set(eventType, new EventSet(eventHandlers));\n return new EventPool(poolName, handlerSets);\n});\n\nvar EventTarget =\n/*#__PURE__*/\nfunction () {\n function EventTarget(target) {\n var _this = this;\n\n _classCallCheck(this, EventTarget);\n\n _defineProperty(this, "handlers", new Map());\n\n _defineProperty(this, "pools", new Map());\n\n _defineProperty(this, "target", void 0);\n\n _defineProperty(this, "createEmitter", function (eventType) {\n return function (event) {\n _this.pools.forEach(function (pool) {\n pool.dispatchEvent(eventType, event);\n });\n };\n });\n\n this.target = target;\n }\n\n _createClass(EventTarget, [{\n key: "addHandlers",\n value: function addHandlers(poolName, eventType, eventHandlers) {\n if (this.pools.has(poolName)) {\n var eventPool = this.pools.get(poolName);\n this.pools.set(poolName, eventPool.addHandlers(eventType, eventHandlers));\n } else {\n this.pools.set(poolName, EventPool.createByType(poolName, eventType, eventHandlers));\n }\n\n if (!this.handlers.has(eventType)) {\n this.addTargetHandler(eventType);\n }\n }\n }, {\n key: "hasHandlers",\n value: function hasHandlers() {\n return this.handlers.size > 0;\n }\n }, {\n key: "removeHandlers",\n value: function removeHandlers(poolName, eventType, eventHandlers) {\n if (!this.pools.has(poolName)) {\n return;\n }\n\n var pool = this.pools.get(poolName);\n var newPool = pool.removeHandlers(eventType, eventHandlers);\n\n if (newPool.hasHandlers()) {\n this.pools.set(poolName, newPool);\n } else {\n this.pools.delete(poolName);\n }\n\n var hasHandlers = false;\n this.pools.forEach(function (pool) {\n return hasHandlers = hasHandlers || pool.hasHandlers(eventType);\n });\n\n if (!hasHandlers) {\n this.removeTargetHandler(eventType);\n }\n }\n }, {\n key: "addTargetHandler",\n value: function addTargetHandler(eventType) {\n var handler = this.createEmitter(eventType);\n this.handlers.set(eventType, handler);\n this.target.addEventListener(eventType, handler, true);\n }\n }, {\n key: "removeTargetHandler",\n value: function removeTargetHandler(eventType) {\n if (this.handlers.has(eventType)) {\n this.target.removeEventListener(eventType, this.handlers.get(eventType), true);\n this.handlers.delete(eventType);\n }\n }\n }]);\n\n return EventTarget;\n}();\n\nvar EventStack =\n/*#__PURE__*/\nfunction () {\n function EventStack() {\n var _this = this;\n\n _classCallCheck(this, EventStack);\n\n _defineProperty(this, "targets", new Map());\n\n _defineProperty(this, "getTarget", function (target) {\n var autoCreate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var normalized = normalizeTarget(target);\n\n if (_this.targets.has(normalized)) {\n return _this.targets.get(normalized);\n }\n\n if (!autoCreate) return null;\n var eventTarget = new EventTarget(normalized);\n\n _this.targets.set(normalized, eventTarget);\n\n return eventTarget;\n });\n\n _defineProperty(this, "removeTarget", function (target) {\n _this.targets.delete(normalizeTarget(target));\n });\n }\n\n _createClass(EventStack, [{\n key: "sub",\n value: function sub(eventName, eventHandlers) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (!env.canUseDOM) return;\n var _options$target = options.target,\n target = _options$target === void 0 ? document : _options$target,\n _options$pool = options.pool,\n pool = _options$pool === void 0 ? \'default\' : _options$pool;\n var eventTarget = this.getTarget(target);\n eventTarget.addHandlers(pool, eventName, normalizeHandlers(eventHandlers));\n }\n }, {\n key: "unsub",\n value: function unsub(eventName, eventHandlers) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (!env.canUseDOM) return;\n var _options$target2 = options.target,\n target = _options$target2 === void 0 ? document : _options$target2,\n _options$pool2 = options.pool,\n pool = _options$pool2 === void 0 ? \'default\' : _options$pool2;\n var eventTarget = this.getTarget(target, false);\n\n if (eventTarget) {\n eventTarget.removeHandlers(pool, eventName, normalizeHandlers(eventHandlers));\n if (!eventTarget.hasHandlers()) this.removeTarget(target);\n }\n }\n }]);\n\n return EventStack;\n}();\n\nvar instance = new EventStack();\n\n/**\n * This component exposes the EventStack API as public and provides a declarative way to manage it.\n */\nvar EventStack$1 =\n/*#__PURE__*/\nfunction (_React$PureComponent) {\n _inherits(EventStack, _React$PureComponent);\n\n function EventStack() {\n _classCallCheck(this, EventStack);\n\n return _possibleConstructorReturn(this, _getPrototypeOf(EventStack).apply(this, arguments));\n }\n\n _createClass(EventStack, [{\n key: "componentDidMount",\n value: function componentDidMount() {\n this.subscribe(this.props);\n }\n }, {\n key: "componentDidUpdate",\n value: function componentDidUpdate(prevProps) {\n this.unsubscribe(prevProps);\n this.subscribe(this.props);\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n this.unsubscribe(this.props);\n }\n }, {\n key: "subscribe",\n value: function subscribe(props) {\n var name = props.name,\n on = props.on,\n pool = props.pool,\n target = props.target;\n instance.sub(name, on, {\n pool: pool,\n target: target\n });\n }\n }, {\n key: "unsubscribe",\n value: function unsubscribe(props) {\n var name = props.name,\n on = props.on,\n pool = props.pool,\n target = props.target;\n instance.unsub(name, on, {\n pool: pool,\n target: target\n });\n }\n }, {\n key: "render",\n value: function render() {\n return null;\n }\n }]);\n\n return EventStack;\n}(React.PureComponent);\n\n_defineProperty(EventStack$1, "defaultProps", {\n pool: \'default\',\n target: \'document\'\n});\nEventStack$1.propTypes = {\n /** An event name on which we will subscribe. */\n name: PropTypes.string.isRequired,\n\n /** An event handler or array of event handlers. */\n on: PropTypes.oneOfType([PropTypes.func, PropTypes.arrayOf(PropTypes.func)]).isRequired,\n\n /** A name of pool. */\n pool: PropTypes.string,\n\n /** A DOM element on which we will subscribe. */\n target: PropTypes.oneOfType([PropTypes.oneOf([\'document\', \'window\']), // Heads up!\n // This condition for SSR safety.\n PropTypes.instanceOf(env.canUseDOM ? HTMLElement : Object), PropTypes.shape({\n current: PropTypes.object\n })])\n};\n\nexports.instance = instance;\nexports["default"] = EventStack$1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHNlbWFudGljLXVpLXJlYWN0L2V2ZW50LXN0YWNrL2xpYi9janMvZXZlbnQtc3RhY2suZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsOENBQTZDLEVBQUUsYUFBYSxFQUFDOztBQUU3RCxVQUFVLG1CQUFPLENBQUMsNENBQU87QUFDekIsZ0JBQWdCLG1CQUFPLENBQUMsc0RBQVk7QUFDcEMsWUFBWSxtQkFBTyxDQUFDLDRDQUFPOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixrQkFBa0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBOztBQUVBLHNCQUFzQixZQUFZO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLFFBQVE7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsU0FBUztBQUNwQztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixZQUFZO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsZ0JBQWdCO0FBQ2hCLGtCQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvQHNlbWFudGljLXVpLXJlYWN0L2V2ZW50LXN0YWNrL2xpYi9janMvZXZlbnQtc3RhY2suZGV2ZWxvcG1lbnQuanM/ZWNmMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBlbnYgPSByZXF1aXJlKCdleGVudicpO1xudmFyIFByb3BUeXBlcyA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMnKTtcbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkge1xuICBpZiAoY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfVxuXG4gIHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufVxuXG4vKipcbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdhcyBjaG9zZW4gYnkgcGVyZm9ybWFuY2UgYW5kIGNvbXBhdGliaWxpdHkgcmVhc29ucywgZmVlbCBmcmVlIHRvIHBsYXlcbiAqIHdpdGggYmVuY2htYXJrcyBhbmQgc3VibWl0IFBSIHdpdGggZmFzdGVyIGFsdGVybmF0aXZlLiBFYWNoIG1ldGhvZCBjb250YWlucyBsaW5rcyB0byBiZW5jaG1hcmtzLlxuICovXG52YXIgRXZlbnRTZXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL2pzcGVyZi5jb20vc3Vpci1ldmVudHNldC1jb25zdHJ1Y3RvclxuICAgKi9cbiAgZnVuY3Rpb24gRXZlbnRTZXQoZXZlbnRIYW5kbGVycykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdmVudFNldCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJoYW5kbGVyc1wiLCB2b2lkIDApO1xuXG4gICAgdGhpcy5oYW5kbGVycyA9IGV2ZW50SGFuZGxlcnMuc2xpY2UoMCk7XG4gIH1cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9qc3BlcmYuY29tL3N1aXItZXZlbnRzZXQtYWRkaGFuZGxlcnNcbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoRXZlbnRTZXQsIFt7XG4gICAga2V5OiBcImFkZEhhbmRsZXJzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZEhhbmRsZXJzKGFkZGl0aW9uYWxIYW5kbGVycykge1xuICAgICAgdmFyIG5ld0hhbmRsZXJzID0gdGhpcy5oYW5kbGVycy5zbGljZSgwKTtcbiAgICAgIHZhciBsZW5ndGggPSBhZGRpdGlvbmFsSGFuZGxlcnMubGVuZ3RoOyAvLyBIZWFkcyB1cCFcbiAgICAgIC8vIFByZXZpb3VzbHkgd2UgdXNlIFNldCB0aGVyZSwgaXQgZ3JhbnRlZCB1bmlxdWVuZXNzIG9mIGhhbmRsZXJzLCBub3cgZGlzcGF0Y2hFdmVudCgpIGlzXG4gICAgICAvLyByZXNwb25zaWJsZSBmb3IgdGhpcy5cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBuZXdIYW5kbGVycy5wdXNoKGFkZGl0aW9uYWxIYW5kbGVyc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRXZlbnRTZXQobmV3SGFuZGxlcnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc2VlIGh0dHBzOi8vanNwZXJmLmNvbS9zdWlyLWV2ZW50c2V0LWRpc3BhdGNoc2luZ2xlXG4gICAgICogQHNlZSBodHRwczovL2pzcGVyZi5jb20vc3Vpci1ldmVudHNldC1kaXNwYXRjaG11bHRpcGxlMlxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiZGlzcGF0Y2hFdmVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGV2ZW50LCBkaXNwYXRjaEFsbCkge1xuICAgICAgdmFyIGNvdW50ID0gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuXG4gICAgICBpZiAoIWRpc3BhdGNoQWxsKSB7XG4gICAgICAgIC8vIEhlYWRzIHVwIVxuICAgICAgICAvLyBXZSBkb24ndCB1c2UgLnBvcCgpIHRoZXJlIGJlY2F1c2UgaXQgd2lsbCBtdXRhdGUgdGhlIGFycmF5LlxuICAgICAgICB2YXIgcmVjZW50SGFuZGxlciA9IHRoaXMuaGFuZGxlcnNbY291bnRdO1xuICAgICAgICByZWNlbnRIYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gY291bnQ7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgICAgIGlmICghdGhpcy5oYW5kbGVyc1tpXS5jYWxsZWQpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJzW2ldLmNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyc1tpXShldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgX2kgPSBjb3VudDsgX2kgPj0gMDsgX2kgLT0gMSkge1xuICAgICAgICB0aGlzLmhhbmRsZXJzW19pXS5jYWxsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzSGFuZGxlcnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzSGFuZGxlcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggPiAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAc2VlIGh0dHBzOi8vanNwZXJmLmNvbS9zdWlyLWV2ZW50c2V0LXJlbW92ZWhhbmRsZXJzXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJyZW1vdmVIYW5kbGVyc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVIYW5kbGVycyhyZW1vdmFsSGFuZGxlcnMpIHtcbiAgICAgIHZhciBuZXdIYW5kbGVycyA9IFtdO1xuICAgICAgdmFyIGxlbmd0aCA9IHRoaXMuaGFuZGxlcnMubGVuZ3RoO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5oYW5kbGVyc1tpXTtcblxuICAgICAgICBpZiAocmVtb3ZhbEhhbmRsZXJzLmluZGV4T2YoaGFuZGxlcikgPT09IC0xKSB7XG4gICAgICAgICAgbmV3SGFuZGxlcnMucHVzaChoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEV2ZW50U2V0KG5ld0hhbmRsZXJzKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXZlbnRTZXQ7XG59KCk7XG5cbi8qKlxuICogQW4gSUUxMS1jb21wYXRpYmxlIGZ1bmN0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9qc3BlcmYuY29tL3N1aXItY2xvbmUtbWFwXG4gKi9cbmZ1bmN0aW9uIGNsb25lTWFwKG1hcCkge1xuICB2YXIgbmV3TWFwID0gbmV3IE1hcCgpO1xuICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgIG5ld01hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gbmV3TWFwO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplSGFuZGxlcnMoaGFuZGxlcnMpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaGFuZGxlcnMpID8gaGFuZGxlcnMgOiBbaGFuZGxlcnNdO1xufVxuLyoqXG4gKiBBc3NlcnRzIHRoYXQgdGhlIHBhc3NlZCB2YWx1ZSBpcyBSZWFjdC5SZWZPYmplY3RcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL3YxNi44LjIvcGFja2FnZXMvcmVhY3QtcmVjb25jaWxlci9zcmMvUmVhY3RGaWJlckNvbW1pdFdvcmsuanMjTDY2NVxuICovXG5cbnZhciBpc1JlZk9iamVjdCA9IGZ1bmN0aW9uIGlzUmVmT2JqZWN0KHJlZiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbikge1xuICByZXR1cm4gcmVmICE9PSBudWxsICYmIF90eXBlb2YocmVmKSA9PT0gJ29iamVjdCcgJiYgcmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50Jyk7XG59O1xuLyoqXG4gKiBOb3JtYWxpemVzIGB0YXJnZXRgIGZvciBFdmVudFN0YWNrLCBiZWNhdXNlIGB0YXJnZXRgIGNhbiBiZSBwYXNzZWQgYXMgYGJvb2xlYW5gIG9yIGBzdHJpbmdgLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9qc3BlcmYuY29tL3N1aXItbm9ybWFsaXplLXRhcmdldFxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHRhcmdldCA9PT0gJ2RvY3VtZW50JykgcmV0dXJuIGRvY3VtZW50O1xuICBpZiAodGFyZ2V0ID09PSAnd2luZG93JykgcmV0dXJuIHdpbmRvdztcbiAgaWYgKGlzUmVmT2JqZWN0KHRhcmdldCkpIHJldHVybiB0YXJnZXQuY3VycmVudCB8fCBkb2N1bWVudDtcbiAgcmV0dXJuIHRhcmdldCB8fCBkb2N1bWVudDtcbn1cblxudmFyIEV2ZW50UG9vbCA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEV2ZW50UG9vbChwb29sTmFtZSwgaGFuZGxlclNldHMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRXZlbnRQb29sKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhhbmRsZXJTZXRzXCIsIHZvaWQgMCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwb29sTmFtZVwiLCB2b2lkIDApO1xuXG4gICAgdGhpcy5oYW5kbGVyU2V0cyA9IGhhbmRsZXJTZXRzO1xuICAgIHRoaXMucG9vbE5hbWUgPSBwb29sTmFtZTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdmVudFBvb2wsIFt7XG4gICAga2V5OiBcImFkZEhhbmRsZXJzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZEhhbmRsZXJzKGV2ZW50VHlwZSwgZXZlbnRIYW5kbGVycykge1xuICAgICAgdmFyIGhhbmRsZXJTZXRzID0gY2xvbmVNYXAodGhpcy5oYW5kbGVyU2V0cyk7XG5cbiAgICAgIGlmIChoYW5kbGVyU2V0cy5oYXMoZXZlbnRUeXBlKSkge1xuICAgICAgICB2YXIgZXZlbnRTZXQgPSBoYW5kbGVyU2V0cy5nZXQoZXZlbnRUeXBlKTtcbiAgICAgICAgaGFuZGxlclNldHMuc2V0KGV2ZW50VHlwZSwgZXZlbnRTZXQuYWRkSGFuZGxlcnMoZXZlbnRIYW5kbGVycykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlclNldHMuc2V0KGV2ZW50VHlwZSwgbmV3IEV2ZW50U2V0KGV2ZW50SGFuZGxlcnMpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBFdmVudFBvb2wodGhpcy5wb29sTmFtZSwgaGFuZGxlclNldHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkaXNwYXRjaEV2ZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZlbnRUeXBlLCBldmVudCkge1xuICAgICAgdmFyIGhhbmRsZXJTZXQgPSB0aGlzLmhhbmRsZXJTZXRzLmdldChldmVudFR5cGUpO1xuICAgICAgdmFyIHNob3VsZERpc3BhdGNoQWxsID0gdGhpcy5wb29sTmFtZSA9PT0gJ2RlZmF1bHQnO1xuXG4gICAgICBpZiAoaGFuZGxlclNldCkge1xuICAgICAgICBoYW5kbGVyU2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQsIHNob3VsZERpc3BhdGNoQWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzSGFuZGxlcnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzSGFuZGxlcnMoZXZlbnRUeXBlKSB7XG4gICAgICBpZiAoIWV2ZW50VHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyU2V0cy5zaXplID4gMDtcbiAgICAgIH1cblxuICAgICAgdmFyIGV2ZW50U2V0ID0gdGhpcy5oYW5kbGVyU2V0cy5nZXQoZXZlbnRUeXBlKTtcblxuICAgICAgaWYgKGV2ZW50U2V0KSB7XG4gICAgICAgIHJldHVybiBldmVudFNldC5oYXNIYW5kbGVycygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbW92ZUhhbmRsZXJzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZUhhbmRsZXJzKGV2ZW50VHlwZSwgZXZlbnRIYW5kbGVycykge1xuICAgICAgdmFyIGhhbmRsZXJTZXRzID0gY2xvbmVNYXAodGhpcy5oYW5kbGVyU2V0cyk7XG5cbiAgICAgIGlmICghaGFuZGxlclNldHMuaGFzKGV2ZW50VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFdmVudFBvb2wodGhpcy5wb29sTmFtZSwgaGFuZGxlclNldHMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY3VycmVudFNldCA9IGhhbmRsZXJTZXRzLmdldChldmVudFR5cGUpO1xuICAgICAgdmFyIG5leHRTZXQgPSBjdXJyZW50U2V0LnJlbW92ZUhhbmRsZXJzKGV2ZW50SGFuZGxlcnMpO1xuXG4gICAgICBpZiAobmV4dFNldC5oYXNIYW5kbGVycygpKSB7XG4gICAgICAgIGhhbmRsZXJTZXRzLnNldChldmVudFR5cGUsIG5leHRTZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlclNldHMuZGVsZXRlKGV2ZW50VHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRXZlbnRQb29sKHRoaXMucG9vbE5hbWUsIGhhbmRsZXJTZXRzKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXZlbnRQb29sO1xufSgpO1xuXG5fZGVmaW5lUHJvcGVydHkoRXZlbnRQb29sLCBcImNyZWF0ZUJ5VHlwZVwiLCBmdW5jdGlvbiAocG9vbE5hbWUsIGV2ZW50VHlwZSwgZXZlbnRIYW5kbGVycykge1xuICB2YXIgaGFuZGxlclNldHMgPSBuZXcgTWFwKCk7XG4gIGhhbmRsZXJTZXRzLnNldChldmVudFR5cGUsIG5ldyBFdmVudFNldChldmVudEhhbmRsZXJzKSk7XG4gIHJldHVybiBuZXcgRXZlbnRQb29sKHBvb2xOYW1lLCBoYW5kbGVyU2V0cyk7XG59KTtcblxudmFyIEV2ZW50VGFyZ2V0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXZlbnRUYXJnZXQodGFyZ2V0KSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdmVudFRhcmdldCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJoYW5kbGVyc1wiLCBuZXcgTWFwKCkpO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicG9vbHNcIiwgbmV3IE1hcCgpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRhcmdldFwiLCB2b2lkIDApO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY3JlYXRlRW1pdHRlclwiLCBmdW5jdGlvbiAoZXZlbnRUeXBlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIF90aGlzLnBvb2xzLmZvckVhY2goZnVuY3Rpb24gKHBvb2wpIHtcbiAgICAgICAgICBwb29sLmRpc3BhdGNoRXZlbnQoZXZlbnRUeXBlLCBldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV2ZW50VGFyZ2V0LCBbe1xuICAgIGtleTogXCJhZGRIYW5kbGVyc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRIYW5kbGVycyhwb29sTmFtZSwgZXZlbnRUeXBlLCBldmVudEhhbmRsZXJzKSB7XG4gICAgICBpZiAodGhpcy5wb29scy5oYXMocG9vbE5hbWUpKSB7XG4gICAgICAgIHZhciBldmVudFBvb2wgPSB0aGlzLnBvb2xzLmdldChwb29sTmFtZSk7XG4gICAgICAgIHRoaXMucG9vbHMuc2V0KHBvb2xOYW1lLCBldmVudFBvb2wuYWRkSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudEhhbmRsZXJzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvb2xzLnNldChwb29sTmFtZSwgRXZlbnRQb29sLmNyZWF0ZUJ5VHlwZShwb29sTmFtZSwgZXZlbnRUeXBlLCBldmVudEhhbmRsZXJzKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5oYW5kbGVycy5oYXMoZXZlbnRUeXBlKSkge1xuICAgICAgICB0aGlzLmFkZFRhcmdldEhhbmRsZXIoZXZlbnRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzSGFuZGxlcnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzSGFuZGxlcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5zaXplID4gMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlSGFuZGxlcnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlSGFuZGxlcnMocG9vbE5hbWUsIGV2ZW50VHlwZSwgZXZlbnRIYW5kbGVycykge1xuICAgICAgaWYgKCF0aGlzLnBvb2xzLmhhcyhwb29sTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9vbCA9IHRoaXMucG9vbHMuZ2V0KHBvb2xOYW1lKTtcbiAgICAgIHZhciBuZXdQb29sID0gcG9vbC5yZW1vdmVIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50SGFuZGxlcnMpO1xuXG4gICAgICBpZiAobmV3UG9vbC5oYXNIYW5kbGVycygpKSB7XG4gICAgICAgIHRoaXMucG9vbHMuc2V0KHBvb2xOYW1lLCBuZXdQb29sKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9vbHMuZGVsZXRlKHBvb2xOYW1lKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGhhc0hhbmRsZXJzID0gZmFsc2U7XG4gICAgICB0aGlzLnBvb2xzLmZvckVhY2goZnVuY3Rpb24gKHBvb2wpIHtcbiAgICAgICAgcmV0dXJuIGhhc0hhbmRsZXJzID0gaGFzSGFuZGxlcnMgfHwgcG9vbC5oYXNIYW5kbGVycyhldmVudFR5cGUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghaGFzSGFuZGxlcnMpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUYXJnZXRIYW5kbGVyKGV2ZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFRhcmdldEhhbmRsZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkVGFyZ2V0SGFuZGxlcihldmVudFR5cGUpIHtcbiAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5jcmVhdGVFbWl0dGVyKGV2ZW50VHlwZSk7XG4gICAgICB0aGlzLmhhbmRsZXJzLnNldChldmVudFR5cGUsIGhhbmRsZXIpO1xuICAgICAgdGhpcy50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIHRydWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW1vdmVUYXJnZXRIYW5kbGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZVRhcmdldEhhbmRsZXIoZXZlbnRUeXBlKSB7XG4gICAgICBpZiAodGhpcy5oYW5kbGVycy5oYXMoZXZlbnRUeXBlKSkge1xuICAgICAgICB0aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgdGhpcy5oYW5kbGVycy5nZXQoZXZlbnRUeXBlKSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMuZGVsZXRlKGV2ZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEV2ZW50VGFyZ2V0O1xufSgpO1xuXG52YXIgRXZlbnRTdGFjayA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEV2ZW50U3RhY2soKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdmVudFN0YWNrKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRhcmdldHNcIiwgbmV3IE1hcCgpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImdldFRhcmdldFwiLCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICB2YXIgYXV0b0NyZWF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgICAgIHZhciBub3JtYWxpemVkID0gbm9ybWFsaXplVGFyZ2V0KHRhcmdldCk7XG5cbiAgICAgIGlmIChfdGhpcy50YXJnZXRzLmhhcyhub3JtYWxpemVkKSkge1xuICAgICAgICByZXR1cm4gX3RoaXMudGFyZ2V0cy5nZXQobm9ybWFsaXplZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghYXV0b0NyZWF0ZSkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgZXZlbnRUYXJnZXQgPSBuZXcgRXZlbnRUYXJnZXQobm9ybWFsaXplZCk7XG5cbiAgICAgIF90aGlzLnRhcmdldHMuc2V0KG5vcm1hbGl6ZWQsIGV2ZW50VGFyZ2V0KTtcblxuICAgICAgcmV0dXJuIGV2ZW50VGFyZ2V0O1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicmVtb3ZlVGFyZ2V0XCIsIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIF90aGlzLnRhcmdldHMuZGVsZXRlKG5vcm1hbGl6ZVRhcmdldCh0YXJnZXQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhFdmVudFN0YWNrLCBbe1xuICAgIGtleTogXCJzdWJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3ViKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVycykge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgaWYgKCFlbnYuY2FuVXNlRE9NKSByZXR1cm47XG4gICAgICB2YXIgX29wdGlvbnMkdGFyZ2V0ID0gb3B0aW9ucy50YXJnZXQsXG4gICAgICAgICAgdGFyZ2V0ID0gX29wdGlvbnMkdGFyZ2V0ID09PSB2b2lkIDAgPyBkb2N1bWVudCA6IF9vcHRpb25zJHRhcmdldCxcbiAgICAgICAgICBfb3B0aW9ucyRwb29sID0gb3B0aW9ucy5wb29sLFxuICAgICAgICAgIHBvb2wgPSBfb3B0aW9ucyRwb29sID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfb3B0aW9ucyRwb29sO1xuICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gdGhpcy5nZXRUYXJnZXQodGFyZ2V0KTtcbiAgICAgIGV2ZW50VGFyZ2V0LmFkZEhhbmRsZXJzKHBvb2wsIGV2ZW50TmFtZSwgbm9ybWFsaXplSGFuZGxlcnMoZXZlbnRIYW5kbGVycykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1bnN1YlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1bnN1YihldmVudE5hbWUsIGV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICAgIGlmICghZW52LmNhblVzZURPTSkgcmV0dXJuO1xuICAgICAgdmFyIF9vcHRpb25zJHRhcmdldDIgPSBvcHRpb25zLnRhcmdldCxcbiAgICAgICAgICB0YXJnZXQgPSBfb3B0aW9ucyR0YXJnZXQyID09PSB2b2lkIDAgPyBkb2N1bWVudCA6IF9vcHRpb25zJHRhcmdldDIsXG4gICAgICAgICAgX29wdGlvbnMkcG9vbDIgPSBvcHRpb25zLnBvb2wsXG4gICAgICAgICAgcG9vbCA9IF9vcHRpb25zJHBvb2wyID09PSB2b2lkIDAgPyAnZGVmYXVsdCcgOiBfb3B0aW9ucyRwb29sMjtcbiAgICAgIHZhciBldmVudFRhcmdldCA9IHRoaXMuZ2V0VGFyZ2V0KHRhcmdldCwgZmFsc2UpO1xuXG4gICAgICBpZiAoZXZlbnRUYXJnZXQpIHtcbiAgICAgICAgZXZlbnRUYXJnZXQucmVtb3ZlSGFuZGxlcnMocG9vbCwgZXZlbnROYW1lLCBub3JtYWxpemVIYW5kbGVycyhldmVudEhhbmRsZXJzKSk7XG4gICAgICAgIGlmICghZXZlbnRUYXJnZXQuaGFzSGFuZGxlcnMoKSkgdGhpcy5yZW1vdmVUYXJnZXQodGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXZlbnRTdGFjaztcbn0oKTtcblxudmFyIGluc3RhbmNlID0gbmV3IEV2ZW50U3RhY2soKTtcblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCBleHBvc2VzIHRoZSBFdmVudFN0YWNrIEFQSSBhcyBwdWJsaWMgYW5kIHByb3ZpZGVzIGEgZGVjbGFyYXRpdmUgd2F5IHRvIG1hbmFnZSBpdC5cbiAqL1xudmFyIEV2ZW50U3RhY2skMSA9XG4vKiNfX1BVUkVfXyovXG5mdW5jdGlvbiAoX1JlYWN0JFB1cmVDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEV2ZW50U3RhY2ssIF9SZWFjdCRQdXJlQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBFdmVudFN0YWNrKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdmVudFN0YWNrKTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoRXZlbnRTdGFjaykuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRXZlbnRTdGFjaywgW3tcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkTW91bnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLnN1YnNjcmliZSh0aGlzLnByb3BzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY29tcG9uZW50RGlkVXBkYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUocHJldlByb3BzKTtcbiAgICAgIHRoaXMuc3Vic2NyaWJlKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb21wb25lbnRXaWxsVW5tb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInN1YnNjcmliZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzdWJzY3JpYmUocHJvcHMpIHtcbiAgICAgIHZhciBuYW1lID0gcHJvcHMubmFtZSxcbiAgICAgICAgICBvbiA9IHByb3BzLm9uLFxuICAgICAgICAgIHBvb2wgPSBwcm9wcy5wb29sLFxuICAgICAgICAgIHRhcmdldCA9IHByb3BzLnRhcmdldDtcbiAgICAgIGluc3RhbmNlLnN1YihuYW1lLCBvbiwge1xuICAgICAgICBwb29sOiBwb29sLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVuc3Vic2NyaWJlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKHByb3BzKSB7XG4gICAgICB2YXIgbmFtZSA9IHByb3BzLm5hbWUsXG4gICAgICAgICAgb24gPSBwcm9wcy5vbixcbiAgICAgICAgICBwb29sID0gcHJvcHMucG9vbCxcbiAgICAgICAgICB0YXJnZXQgPSBwcm9wcy50YXJnZXQ7XG4gICAgICBpbnN0YW5jZS51bnN1YihuYW1lLCBvbiwge1xuICAgICAgICBwb29sOiBwb29sLFxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXZlbnRTdGFjaztcbn0oUmVhY3QuUHVyZUNvbXBvbmVudCk7XG5cbl9kZWZpbmVQcm9wZXJ0eShFdmVudFN0YWNrJDEsIFwiZGVmYXVsdFByb3BzXCIsIHtcbiAgcG9vbDogJ2RlZmF1bHQnLFxuICB0YXJnZXQ6ICdkb2N1bWVudCdcbn0pO1xuRXZlbnRTdGFjayQxLnByb3BUeXBlcyA9IHtcbiAgLyoqIEFuIGV2ZW50IG5hbWUgb24gd2hpY2ggd2Ugd2lsbCBzdWJzY3JpYmUuICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcblxuICAvKiogQW4gZXZlbnQgaGFuZGxlciBvciBhcnJheSBvZiBldmVudCBoYW5kbGVycy4gKi9cbiAgb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuZnVuYyldKS5pc1JlcXVpcmVkLFxuXG4gIC8qKiBBIG5hbWUgb2YgcG9vbC4gKi9cbiAgcG9vbDogUHJvcFR5cGVzLnN0cmluZyxcblxuICAvKiogQSBET00gZWxlbWVudCBvbiB3aGljaCB3ZSB3aWxsIHN1YnNjcmliZS4gKi9cbiAgdGFyZ2V0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydkb2N1bWVudCcsICd3aW5kb3cnXSksIC8vIEhlYWRzIHVwIVxuICAvLyBUaGlzIGNvbmRpdGlvbiBmb3IgU1NSIHNhZmV0eS5cbiAgUHJvcFR5cGVzLmluc3RhbmNlT2YoZW52LmNhblVzZURPTSA/IEhUTUxFbGVtZW50IDogT2JqZWN0KSwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pXSlcbn07XG5cbmV4cG9ydHMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbmV4cG9ydHMuZGVmYXVsdCA9IEV2ZW50U3RhY2skMTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@semantic-ui-react/event-stack/lib/cjs/event-stack.development.js\n\n}')},"./node_modules/@semantic-ui-react/event-stack/lib/index.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n\nvar stack;\n\nif (false) // removed by dead control flow\n{} else {\n stack = __webpack_require__(/*! ./cjs/event-stack.development.js */ "./node_modules/@semantic-ui-react/event-stack/lib/cjs/event-stack.development.js");\n}\n\nmodule.exports = stack.default;\nmodule.exports.instance = stack.instance;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHNlbWFudGljLXVpLXJlYWN0L2V2ZW50LXN0YWNrL2xpYi9pbmRleC5qcyIsIm1hcHBpbmdzIjoiO0FBQ2E7O0FBRWI7O0FBRUEsSUFBSSxLQUFxQyxFQUFFO0FBQUEsRUFFMUMsQ0FBQztBQUNGLFVBQVUsbUJBQU8sQ0FBQywwSEFBa0M7QUFDcEQ7O0FBRUE7QUFDQSx1QkFBdUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9Ac2VtYW50aWMtdWktcmVhY3QvZXZlbnQtc3RhY2svbGliL2luZGV4LmpzPzU0YjQiXSwic291cmNlc0NvbnRlbnQiOlsiXG4ndXNlIHN0cmljdCc7XG5cbnZhciBzdGFjaztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgc3RhY2sgPSByZXF1aXJlKCcuL2Nqcy9ldmVudC1zdGFjay5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBzdGFjayA9IHJlcXVpcmUoJy4vY2pzL2V2ZW50LXN0YWNrLmRldmVsb3BtZW50LmpzJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2suZGVmYXVsdDtcbm1vZHVsZS5leHBvcnRzLmluc3RhbmNlID0gc3RhY2suaW5zdGFuY2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@semantic-ui-react/event-stack/lib/index.js\n\n}')},"./node_modules/asn1.js/lib/asn1.js"(__unused_webpack_module,exports,__webpack_require__){eval('{var asn1 = exports;\n\nasn1.bignum = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js");\n\nasn1.define = (__webpack_require__(/*! ./asn1/api */ "./node_modules/asn1.js/lib/asn1/api.js").define);\nasn1.base = __webpack_require__(/*! ./asn1/base */ "./node_modules/asn1.js/lib/asn1/base/index.js");\nasn1.constants = __webpack_require__(/*! ./asn1/constants */ "./node_modules/asn1.js/lib/asn1/constants/index.js");\nasn1.decoders = __webpack_require__(/*! ./asn1/decoders */ "./node_modules/asn1.js/lib/asn1/decoders/index.js");\nasn1.encoders = __webpack_require__(/*! ./asn1/encoders */ "./node_modules/asn1.js/lib/asn1/encoders/index.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxjQUFjLG1CQUFPLENBQUMsNkNBQU87O0FBRTdCLGNBQWMsd0ZBQTRCO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyxrRUFBYTtBQUNqQyxpQkFBaUIsbUJBQU8sQ0FBQyw0RUFBa0I7QUFDM0MsZ0JBQWdCLG1CQUFPLENBQUMsMEVBQWlCO0FBQ3pDLGdCQUFnQixtQkFBTyxDQUFDLDBFQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEuanM/N2Y3YSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXNuMSA9IGV4cG9ydHM7XG5cbmFzbjEuYmlnbnVtID0gcmVxdWlyZSgnYm4uanMnKTtcblxuYXNuMS5kZWZpbmUgPSByZXF1aXJlKCcuL2FzbjEvYXBpJykuZGVmaW5lO1xuYXNuMS5iYXNlID0gcmVxdWlyZSgnLi9hc24xL2Jhc2UnKTtcbmFzbjEuY29uc3RhbnRzID0gcmVxdWlyZSgnLi9hc24xL2NvbnN0YW50cycpO1xuYXNuMS5kZWNvZGVycyA9IHJlcXVpcmUoJy4vYXNuMS9kZWNvZGVycycpO1xuYXNuMS5lbmNvZGVycyA9IHJlcXVpcmUoJy4vYXNuMS9lbmNvZGVycycpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1.js\n\n}')},"./node_modules/asn1.js/lib/asn1/api.js"(__unused_webpack_module,exports,__webpack_require__){eval("{var asn1 = __webpack_require__(/*! ../asn1 */ \"./node_modules/asn1.js/lib/asn1.js\");\nvar inherits = __webpack_require__(/*! inherits */ \"./node_modules/inherits/inherits_browser.js\");\n\nvar api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n var named;\n try {\n named = (__webpack_require__(/*! vm */ \"./node_modules/vm-browserify/index.js\").runInThisContext)(\n '(function ' + this.name + '(entity) {\\n' +\n ' this._initNamed(entity);\\n' +\n '})'\n );\n } catch (e) {\n named = function (entity) {\n this._initNamed(entity);\n };\n }\n inherits(named, base);\n named.prototype._initNamed = function initnamed(entity) {\n base.call(this, entity);\n };\n\n return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9hcGkuanMiLCJtYXBwaW5ncyI6IkFBQUEsV0FBVyxtQkFBTyxDQUFDLG1EQUFTO0FBQzVCLGVBQWUsbUJBQU8sQ0FBQyw2REFBVTs7QUFFakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5RkFBOEI7QUFDMUMsNENBQTRDO0FBQzVDLGlDQUFpQztBQUNqQyxRQUFRO0FBQ1I7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2FwaS5qcz9lZjNhIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBhc24xID0gcmVxdWlyZSgnLi4vYXNuMScpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxudmFyIGFwaSA9IGV4cG9ydHM7XG5cbmFwaS5kZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUobmFtZSwgYm9keSkge1xuICByZXR1cm4gbmV3IEVudGl0eShuYW1lLCBib2R5KTtcbn07XG5cbmZ1bmN0aW9uIEVudGl0eShuYW1lLCBib2R5KSB7XG4gIHRoaXMubmFtZSA9IG5hbWU7XG4gIHRoaXMuYm9keSA9IGJvZHk7XG5cbiAgdGhpcy5kZWNvZGVycyA9IHt9O1xuICB0aGlzLmVuY29kZXJzID0ge307XG59O1xuXG5FbnRpdHkucHJvdG90eXBlLl9jcmVhdGVOYW1lZCA9IGZ1bmN0aW9uIGNyZWF0ZU5hbWVkKGJhc2UpIHtcbiAgdmFyIG5hbWVkO1xuICB0cnkge1xuICAgIG5hbWVkID0gcmVxdWlyZSgndm0nKS5ydW5JblRoaXNDb250ZXh0KFxuICAgICAgJyhmdW5jdGlvbiAnICsgdGhpcy5uYW1lICsgJyhlbnRpdHkpIHtcXG4nICtcbiAgICAgICcgIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xcbicgK1xuICAgICAgJ30pJ1xuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBuYW1lZCA9IGZ1bmN0aW9uIChlbnRpdHkpIHtcbiAgICAgIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xuICAgIH07XG4gIH1cbiAgaW5oZXJpdHMobmFtZWQsIGJhc2UpO1xuICBuYW1lZC5wcm90b3R5cGUuX2luaXROYW1lZCA9IGZ1bmN0aW9uIGluaXRuYW1lZChlbnRpdHkpIHtcbiAgICBiYXNlLmNhbGwodGhpcywgZW50aXR5KTtcbiAgfTtcblxuICByZXR1cm4gbmV3IG5hbWVkKHRoaXMpO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5fZ2V0RGVjb2RlciA9IGZ1bmN0aW9uIF9nZXREZWNvZGVyKGVuYykge1xuICBlbmMgPSBlbmMgfHwgJ2Rlcic7XG4gIC8vIExhemlseSBjcmVhdGUgZGVjb2RlclxuICBpZiAoIXRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkoZW5jKSlcbiAgICB0aGlzLmRlY29kZXJzW2VuY10gPSB0aGlzLl9jcmVhdGVOYW1lZChhc24xLmRlY29kZXJzW2VuY10pO1xuICByZXR1cm4gdGhpcy5kZWNvZGVyc1tlbmNdO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoZGF0YSwgZW5jLCBvcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLl9nZXREZWNvZGVyKGVuYykuZGVjb2RlKGRhdGEsIG9wdGlvbnMpO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5fZ2V0RW5jb2RlciA9IGZ1bmN0aW9uIF9nZXRFbmNvZGVyKGVuYykge1xuICBlbmMgPSBlbmMgfHwgJ2Rlcic7XG4gIC8vIExhemlseSBjcmVhdGUgZW5jb2RlclxuICBpZiAoIXRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoZW5jKSlcbiAgICB0aGlzLmVuY29kZXJzW2VuY10gPSB0aGlzLl9jcmVhdGVOYW1lZChhc24xLmVuY29kZXJzW2VuY10pO1xuICByZXR1cm4gdGhpcy5lbmNvZGVyc1tlbmNdO1xufTtcblxuRW50aXR5LnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoZGF0YSwgZW5jLCAvKiBpbnRlcm5hbCAqLyByZXBvcnRlcikge1xuICByZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihlbmMpLmVuY29kZShkYXRhLCByZXBvcnRlcik7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/api.js\n\n}")},"./node_modules/asn1.js/lib/asn1/base/buffer.js"(__unused_webpack_module,exports,__webpack_require__){eval("{var inherits = __webpack_require__(/*! inherits */ \"./node_modules/inherits/inherits_browser.js\");\nvar Reporter = (__webpack_require__(/*! ../base */ \"./node_modules/asn1.js/lib/asn1/base/index.js\").Reporter);\nvar Buffer = (__webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer);\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n var res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n var res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!(item instanceof EncoderBuffer))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = new Buffer(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL2J1ZmZlci5qcyIsIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsNkRBQVU7QUFDakMsZUFBZSw4RkFBMkI7QUFDMUMsYUFBYSw0RUFBd0I7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL2J1ZmZlci5qcz82MjgzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG52YXIgUmVwb3J0ZXIgPSByZXF1aXJlKCcuLi9iYXNlJykuUmVwb3J0ZXI7XG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuXG5mdW5jdGlvbiBEZWNvZGVyQnVmZmVyKGJhc2UsIG9wdGlvbnMpIHtcbiAgUmVwb3J0ZXIuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYmFzZSkpIHtcbiAgICB0aGlzLmVycm9yKCdJbnB1dCBub3QgQnVmZmVyJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5iYXNlID0gYmFzZTtcbiAgdGhpcy5vZmZzZXQgPSAwO1xuICB0aGlzLmxlbmd0aCA9IGJhc2UubGVuZ3RoO1xufVxuaW5oZXJpdHMoRGVjb2RlckJ1ZmZlciwgUmVwb3J0ZXIpO1xuZXhwb3J0cy5EZWNvZGVyQnVmZmVyID0gRGVjb2RlckJ1ZmZlcjtcblxuRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uIHNhdmUoKSB7XG4gIHJldHVybiB7IG9mZnNldDogdGhpcy5vZmZzZXQsIHJlcG9ydGVyOiBSZXBvcnRlci5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpIH07XG59O1xuXG5EZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24gcmVzdG9yZShzYXZlKSB7XG4gIC8vIFJldHVybiBza2lwcGVkIGRhdGFcbiAgdmFyIHJlcyA9IG5ldyBEZWNvZGVyQnVmZmVyKHRoaXMuYmFzZSk7XG4gIHJlcy5vZmZzZXQgPSBzYXZlLm9mZnNldDtcbiAgcmVzLmxlbmd0aCA9IHRoaXMub2Zmc2V0O1xuXG4gIHRoaXMub2Zmc2V0ID0gc2F2ZS5vZmZzZXQ7XG4gIFJlcG9ydGVyLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcywgc2F2ZS5yZXBvcnRlcik7XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbkRlY29kZXJCdWZmZXIucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiBpc0VtcHR5KCkge1xuICByZXR1cm4gdGhpcy5vZmZzZXQgPT09IHRoaXMubGVuZ3RoO1xufTtcblxuRGVjb2RlckJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4KGZhaWwpIHtcbiAgaWYgKHRoaXMub2Zmc2V0ICsgMSA8PSB0aGlzLmxlbmd0aClcbiAgICByZXR1cm4gdGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCB0cnVlKTtcbiAgZWxzZVxuICAgIHJldHVybiB0aGlzLmVycm9yKGZhaWwgfHwgJ0RlY29kZXJCdWZmZXIgb3ZlcnJ1bicpO1xufVxuXG5EZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gc2tpcChieXRlcywgZmFpbCkge1xuICBpZiAoISh0aGlzLm9mZnNldCArIGJ5dGVzIDw9IHRoaXMubGVuZ3RoKSlcbiAgICByZXR1cm4gdGhpcy5lcnJvcihmYWlsIHx8ICdEZWNvZGVyQnVmZmVyIG92ZXJydW4nKTtcblxuICB2YXIgcmVzID0gbmV3IERlY29kZXJCdWZmZXIodGhpcy5iYXNlKTtcblxuICAvLyBTaGFyZSByZXBvcnRlciBzdGF0ZVxuICByZXMuX3JlcG9ydGVyU3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuXG4gIHJlcy5vZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgcmVzLmxlbmd0aCA9IHRoaXMub2Zmc2V0ICsgYnl0ZXM7XG4gIHRoaXMub2Zmc2V0ICs9IGJ5dGVzO1xuICByZXR1cm4gcmVzO1xufVxuXG5EZWNvZGVyQnVmZmVyLnByb3RvdHlwZS5yYXcgPSBmdW5jdGlvbiByYXcoc2F2ZSkge1xuICByZXR1cm4gdGhpcy5iYXNlLnNsaWNlKHNhdmUgPyBzYXZlLm9mZnNldCA6IHRoaXMub2Zmc2V0LCB0aGlzLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIEVuY29kZXJCdWZmZXIodmFsdWUsIHJlcG9ydGVyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgIGlmICghKGl0ZW0gaW5zdGFuY2VvZiBFbmNvZGVyQnVmZmVyKSlcbiAgICAgICAgaXRlbSA9IG5ldyBFbmNvZGVyQnVmZmVyKGl0ZW0sIHJlcG9ydGVyKTtcbiAgICAgIHRoaXMubGVuZ3RoICs9IGl0ZW0ubGVuZ3RoO1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfSwgdGhpcyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIGlmICghKDAgPD0gdmFsdWUgJiYgdmFsdWUgPD0gMHhmZikpXG4gICAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ25vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUnKTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5sZW5ndGggPSAxO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5sZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGU6ICcgKyB0eXBlb2YgdmFsdWUpO1xuICB9XG59XG5leHBvcnRzLkVuY29kZXJCdWZmZXIgPSBFbmNvZGVyQnVmZmVyO1xuXG5FbmNvZGVyQnVmZmVyLnByb3RvdHlwZS5qb2luID0gZnVuY3Rpb24gam9pbihvdXQsIG9mZnNldCkge1xuICBpZiAoIW91dClcbiAgICBvdXQgPSBuZXcgQnVmZmVyKHRoaXMubGVuZ3RoKTtcbiAgaWYgKCFvZmZzZXQpXG4gICAgb2Zmc2V0ID0gMDtcblxuICBpZiAodGhpcy5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuIG91dDtcblxuICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgIHRoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICBpdGVtLmpvaW4ob3V0LCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IGl0ZW0ubGVuZ3RoO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICBvdXRbb2Zmc2V0XSA9IHRoaXMudmFsdWU7XG4gICAgZWxzZSBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09ICdzdHJpbmcnKVxuICAgICAgb3V0LndyaXRlKHRoaXMudmFsdWUsIG9mZnNldCk7XG4gICAgZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHRoaXMudmFsdWUpKVxuICAgICAgdGhpcy52YWx1ZS5jb3B5KG91dCwgb2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gdGhpcy5sZW5ndGg7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/base/buffer.js\n\n}")},"./node_modules/asn1.js/lib/asn1/base/index.js"(__unused_webpack_module,exports,__webpack_require__){eval('{var base = exports;\n\nbase.Reporter = (__webpack_require__(/*! ./reporter */ "./node_modules/asn1.js/lib/asn1/base/reporter.js").Reporter);\nbase.DecoderBuffer = (__webpack_require__(/*! ./buffer */ "./node_modules/asn1.js/lib/asn1/base/buffer.js").DecoderBuffer);\nbase.EncoderBuffer = (__webpack_require__(/*! ./buffer */ "./node_modules/asn1.js/lib/asn1/base/buffer.js").EncoderBuffer);\nbase.Node = __webpack_require__(/*! ./node */ "./node_modules/asn1.js/lib/asn1/base/node.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFBOztBQUVBLGdCQUFnQixvR0FBOEI7QUFDOUMscUJBQXFCLHFHQUFpQztBQUN0RCxxQkFBcUIscUdBQWlDO0FBQ3RELFlBQVksbUJBQU8sQ0FBQyw0REFBUSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvYmFzZS9pbmRleC5qcz80MWRmIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBiYXNlID0gZXhwb3J0cztcblxuYmFzZS5SZXBvcnRlciA9IHJlcXVpcmUoJy4vcmVwb3J0ZXInKS5SZXBvcnRlcjtcbmJhc2UuRGVjb2RlckJ1ZmZlciA9IHJlcXVpcmUoJy4vYnVmZmVyJykuRGVjb2RlckJ1ZmZlcjtcbmJhc2UuRW5jb2RlckJ1ZmZlciA9IHJlcXVpcmUoJy4vYnVmZmVyJykuRW5jb2RlckJ1ZmZlcjtcbmJhc2UuTm9kZSA9IHJlcXVpcmUoJy4vbm9kZScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/base/index.js\n\n}')},"./node_modules/asn1.js/lib/asn1/base/node.js"(module,__unused_webpack_exports,__webpack_require__){eval("{var Reporter = (__webpack_require__(/*! ../base */ \"./node_modules/asn1.js/lib/asn1/base/index.js\").Reporter);\nvar EncoderBuffer = (__webpack_require__(/*! ../base */ \"./node_modules/asn1.js/lib/asn1/base/index.js\").EncoderBuffer);\nvar DecoderBuffer = (__webpack_require__(/*! ../base */ \"./node_modules/asn1.js/lib/asn1/base/index.js\").DecoderBuffer);\nvar assert = __webpack_require__(/*! minimalistic-assert */ \"./node_modules/minimalistic-assert/index.js\");\n\n// Supported tags\nvar tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n var state = {};\n this._baseState = state;\n\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n var state = this._baseState;\n var cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n var res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n var state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n var clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n var state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n var state = this._baseState;\n\n // Filter children and args\n var children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n var res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n var value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n var state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n var state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n var state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n var state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n var state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n var state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n var state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n var state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n var result = state['default'];\n var present = true;\n\n var prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n var tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n var save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n var prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n var explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n var start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n if (state.any)\n var save = input.save();\n var body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any)\n result = result;\n else if (state.choice === null)\n result = this._decodeGeneric(state.tag, input, options);\n else\n result = this._decodeChoice(input, options);\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n var data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n var state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n var state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n var state = this._baseState;\n var result = null;\n var match = false;\n\n Object.keys(state.choice).some(function(key) {\n var save = input.save();\n var node = state.choice[key];\n try {\n var value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n var state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n var result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n var result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default']\n else\n return;\n }\n\n // Encode children first\n var content = null;\n var primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n var prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n var res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n var child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n var state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n var result;\n if (!state.any && state.choice === null) {\n var tag = state.implicit !== null ? state.implicit : state.tag;\n var cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n var state = this._baseState;\n\n var node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n var state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL25vZGUuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSw4RkFBMkI7QUFDMUMsb0JBQW9CLG1HQUFnQztBQUNwRCxvQkFBb0IsbUdBQWdDO0FBQ3BELGFBQWEsbUJBQU8sQ0FBQyx3RUFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCO0FBQ2pCO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL25vZGUuanM/ODM2MCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgUmVwb3J0ZXIgPSByZXF1aXJlKCcuLi9iYXNlJykuUmVwb3J0ZXI7XG52YXIgRW5jb2RlckJ1ZmZlciA9IHJlcXVpcmUoJy4uL2Jhc2UnKS5FbmNvZGVyQnVmZmVyO1xudmFyIERlY29kZXJCdWZmZXIgPSByZXF1aXJlKCcuLi9iYXNlJykuRGVjb2RlckJ1ZmZlcjtcbnZhciBhc3NlcnQgPSByZXF1aXJlKCdtaW5pbWFsaXN0aWMtYXNzZXJ0Jyk7XG5cbi8vIFN1cHBvcnRlZCB0YWdzXG52YXIgdGFncyA9IFtcbiAgJ3NlcScsICdzZXFvZicsICdzZXQnLCAnc2V0b2YnLCAnb2JqaWQnLCAnYm9vbCcsXG4gICdnZW50aW1lJywgJ3V0Y3RpbWUnLCAnbnVsbF8nLCAnZW51bScsICdpbnQnLCAnb2JqRGVzYycsXG4gICdiaXRzdHInLCAnYm1wc3RyJywgJ2NoYXJzdHInLCAnZ2Vuc3RyJywgJ2dyYXBoc3RyJywgJ2lhNXN0cicsICdpc282NDZzdHInLFxuICAnbnVtc3RyJywgJ29jdHN0cicsICdwcmludHN0cicsICd0NjFzdHInLCAndW5pc3RyJywgJ3V0ZjhzdHInLCAndmlkZW9zdHInXG5dO1xuXG4vLyBQdWJsaWMgbWV0aG9kcyBsaXN0XG52YXIgbWV0aG9kcyA9IFtcbiAgJ2tleScsICdvYmonLCAndXNlJywgJ29wdGlvbmFsJywgJ2V4cGxpY2l0JywgJ2ltcGxpY2l0JywgJ2RlZicsICdjaG9pY2UnLFxuICAnYW55JywgJ2NvbnRhaW5zJ1xuXS5jb25jYXQodGFncyk7XG5cbi8vIE92ZXJyaWRlZCBtZXRob2RzIGxpc3RcbnZhciBvdmVycmlkZWQgPSBbXG4gICdfcGVla1RhZycsICdfZGVjb2RlVGFnJywgJ191c2UnLFxuICAnX2RlY29kZVN0cicsICdfZGVjb2RlT2JqaWQnLCAnX2RlY29kZVRpbWUnLFxuICAnX2RlY29kZU51bGwnLCAnX2RlY29kZUludCcsICdfZGVjb2RlQm9vbCcsICdfZGVjb2RlTGlzdCcsXG5cbiAgJ19lbmNvZGVDb21wb3NpdGUnLCAnX2VuY29kZVN0cicsICdfZW5jb2RlT2JqaWQnLCAnX2VuY29kZVRpbWUnLFxuICAnX2VuY29kZU51bGwnLCAnX2VuY29kZUludCcsICdfZW5jb2RlQm9vbCdcbl07XG5cbmZ1bmN0aW9uIE5vZGUoZW5jLCBwYXJlbnQpIHtcbiAgdmFyIHN0YXRlID0ge307XG4gIHRoaXMuX2Jhc2VTdGF0ZSA9IHN0YXRlO1xuXG4gIHN0YXRlLmVuYyA9IGVuYztcblxuICBzdGF0ZS5wYXJlbnQgPSBwYXJlbnQgfHwgbnVsbDtcbiAgc3RhdGUuY2hpbGRyZW4gPSBudWxsO1xuXG4gIC8vIFN0YXRlXG4gIHN0YXRlLnRhZyA9IG51bGw7XG4gIHN0YXRlLmFyZ3MgPSBudWxsO1xuICBzdGF0ZS5yZXZlcnNlQXJncyA9IG51bGw7XG4gIHN0YXRlLmNob2ljZSA9IG51bGw7XG4gIHN0YXRlLm9wdGlvbmFsID0gZmFsc2U7XG4gIHN0YXRlLmFueSA9IGZhbHNlO1xuICBzdGF0ZS5vYmogPSBmYWxzZTtcbiAgc3RhdGUudXNlID0gbnVsbDtcbiAgc3RhdGUudXNlRGVjb2RlciA9IG51bGw7XG4gIHN0YXRlLmtleSA9IG51bGw7XG4gIHN0YXRlWydkZWZhdWx0J10gPSBudWxsO1xuICBzdGF0ZS5leHBsaWNpdCA9IG51bGw7XG4gIHN0YXRlLmltcGxpY2l0ID0gbnVsbDtcbiAgc3RhdGUuY29udGFpbnMgPSBudWxsO1xuXG4gIC8vIFNob3VsZCBjcmVhdGUgbmV3IGluc3RhbmNlIG9uIGVhY2ggbWV0aG9kXG4gIGlmICghc3RhdGUucGFyZW50KSB7XG4gICAgc3RhdGUuY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzLl93cmFwKCk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gTm9kZTtcblxudmFyIHN0YXRlUHJvcHMgPSBbXG4gICdlbmMnLCAncGFyZW50JywgJ2NoaWxkcmVuJywgJ3RhZycsICdhcmdzJywgJ3JldmVyc2VBcmdzJywgJ2Nob2ljZScsXG4gICdvcHRpb25hbCcsICdhbnknLCAnb2JqJywgJ3VzZScsICdhbHRlcmVkVXNlJywgJ2tleScsICdkZWZhdWx0JywgJ2V4cGxpY2l0JyxcbiAgJ2ltcGxpY2l0JywgJ2NvbnRhaW5zJ1xuXTtcblxuTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICB2YXIgY3N0YXRlID0ge307XG4gIHN0YXRlUHJvcHMuZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7XG4gICAgY3N0YXRlW3Byb3BdID0gc3RhdGVbcHJvcF07XG4gIH0pO1xuICB2YXIgcmVzID0gbmV3IHRoaXMuY29uc3RydWN0b3IoY3N0YXRlLnBhcmVudCk7XG4gIHJlcy5fYmFzZVN0YXRlID0gY3N0YXRlO1xuICByZXR1cm4gcmVzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX3dyYXAgPSBmdW5jdGlvbiB3cmFwKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIG1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICB0aGlzW21ldGhvZF0gPSBmdW5jdGlvbiBfd3JhcHBlZE1ldGhvZCgpIHtcbiAgICAgIHZhciBjbG9uZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xuICAgICAgc3RhdGUuY2hpbGRyZW4ucHVzaChjbG9uZSk7XG4gICAgICByZXR1cm4gY2xvbmVbbWV0aG9kXS5hcHBseShjbG9uZSwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9LCB0aGlzKTtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChib2R5KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUucGFyZW50ID09PSBudWxsKTtcbiAgYm9keS5jYWxsKHRoaXMpO1xuXG4gIC8vIEZpbHRlciBjaGlsZHJlblxuICBzdGF0ZS5jaGlsZHJlbiA9IHN0YXRlLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZC5fYmFzZVN0YXRlLnBhcmVudCA9PT0gdGhpcztcbiAgfSwgdGhpcyk7XG4gIGFzc2VydC5lcXVhbChzdGF0ZS5jaGlsZHJlbi5sZW5ndGgsIDEsICdSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQnKTtcbn07XG5cbk5vZGUucHJvdG90eXBlLl91c2VBcmdzID0gZnVuY3Rpb24gdXNlQXJncyhhcmdzKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICAvLyBGaWx0ZXIgY2hpbGRyZW4gYW5kIGFyZ3NcbiAgdmFyIGNoaWxkcmVuID0gYXJncy5maWx0ZXIoZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGFyZyBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I7XG4gIH0sIHRoaXMpO1xuICBhcmdzID0gYXJncy5maWx0ZXIoZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuICEoYXJnIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0sIHRoaXMpO1xuXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggIT09IDApIHtcbiAgICBhc3NlcnQoc3RhdGUuY2hpbGRyZW4gPT09IG51bGwpO1xuICAgIHN0YXRlLmNoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICAvLyBSZXBsYWNlIHBhcmVudCB0byBtYWludGFpbiBiYWNrd2FyZCBsaW5rXG4gICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjaGlsZCkge1xuICAgICAgY2hpbGQuX2Jhc2VTdGF0ZS5wYXJlbnQgPSB0aGlzO1xuICAgIH0sIHRoaXMpO1xuICB9XG4gIGlmIChhcmdzLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzc2VydChzdGF0ZS5hcmdzID09PSBudWxsKTtcbiAgICBzdGF0ZS5hcmdzID0gYXJncztcbiAgICBzdGF0ZS5yZXZlcnNlQXJncyA9IGFyZ3MubWFwKGZ1bmN0aW9uKGFyZykge1xuICAgICAgaWYgKHR5cGVvZiBhcmcgIT09ICdvYmplY3QnIHx8IGFyZy5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KVxuICAgICAgICByZXR1cm4gYXJnO1xuXG4gICAgICB2YXIgcmVzID0ge307XG4gICAgICBPYmplY3Qua2V5cyhhcmcpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT0gKGtleSB8IDApKVxuICAgICAgICAgIGtleSB8PSAwO1xuICAgICAgICB2YXIgdmFsdWUgPSBhcmdba2V5XTtcbiAgICAgICAgcmVzW3ZhbHVlXSA9IGtleTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxufTtcblxuLy9cbi8vIE92ZXJyaWRlZCBtZXRob2RzXG4vL1xuXG5vdmVycmlkZWQuZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgTm9kZS5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uIF9vdmVycmlkZWQoKSB7XG4gICAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICAgIHRocm93IG5ldyBFcnJvcihtZXRob2QgKyAnIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICcgKyBzdGF0ZS5lbmMpO1xuICB9O1xufSk7XG5cbi8vXG4vLyBQdWJsaWMgbWV0aG9kc1xuLy9cblxudGFncy5mb3JFYWNoKGZ1bmN0aW9uKHRhZykge1xuICBOb2RlLnByb3RvdHlwZVt0YWddID0gZnVuY3Rpb24gX3RhZ01ldGhvZCgpIHtcbiAgICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgYXNzZXJ0KHN0YXRlLnRhZyA9PT0gbnVsbCk7XG4gICAgc3RhdGUudGFnID0gdGFnO1xuXG4gICAgdGhpcy5fdXNlQXJncyhhcmdzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xufSk7XG5cbk5vZGUucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShpdGVtKSB7XG4gIGFzc2VydChpdGVtKTtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS51c2UgPT09IG51bGwpO1xuICBzdGF0ZS51c2UgPSBpdGVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUub3B0aW9uYWwgPSBmdW5jdGlvbiBvcHRpb25hbCgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIHN0YXRlLm9wdGlvbmFsID0gdHJ1ZTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbk5vZGUucHJvdG90eXBlLmRlZiA9IGZ1bmN0aW9uIGRlZih2YWwpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZVsnZGVmYXVsdCddID09PSBudWxsKTtcbiAgc3RhdGVbJ2RlZmF1bHQnXSA9IHZhbDtcbiAgc3RhdGUub3B0aW9uYWwgPSB0cnVlO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuZXhwbGljaXQgPSBmdW5jdGlvbiBleHBsaWNpdChudW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5leHBsaWNpdCA9PT0gbnVsbCAmJiBzdGF0ZS5pbXBsaWNpdCA9PT0gbnVsbCk7XG4gIHN0YXRlLmV4cGxpY2l0ID0gbnVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuaW1wbGljaXQgPSBmdW5jdGlvbiBpbXBsaWNpdChudW0pIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGFzc2VydChzdGF0ZS5leHBsaWNpdCA9PT0gbnVsbCAmJiBzdGF0ZS5pbXBsaWNpdCA9PT0gbnVsbCk7XG4gIHN0YXRlLmltcGxpY2l0ID0gbnVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUub2JqID0gZnVuY3Rpb24gb2JqKCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG4gIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICBzdGF0ZS5vYmogPSB0cnVlO1xuXG4gIGlmIChhcmdzLmxlbmd0aCAhPT0gMClcbiAgICB0aGlzLl91c2VBcmdzKGFyZ3MpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUua2V5ID0gZnVuY3Rpb24ga2V5KG5ld0tleSkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgYXNzZXJ0KHN0YXRlLmtleSA9PT0gbnVsbCk7XG4gIHN0YXRlLmtleSA9IG5ld0tleTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbk5vZGUucHJvdG90eXBlLmFueSA9IGZ1bmN0aW9uIGFueSgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIHN0YXRlLmFueSA9IHRydWU7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5jaG9pY2UgPSBmdW5jdGlvbiBjaG9pY2Uob2JqKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUuY2hvaWNlID09PSBudWxsKTtcbiAgc3RhdGUuY2hvaWNlID0gb2JqO1xuICB0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmpba2V5XTtcbiAgfSkpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuTm9kZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiBjb250YWlucyhpdGVtKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICBhc3NlcnQoc3RhdGUudXNlID09PSBudWxsKTtcbiAgc3RhdGUuY29udGFpbnMgPSBpdGVtO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIERlY29kaW5nXG4vL1xuXG5Ob2RlLnByb3RvdHlwZS5fZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICAvLyBEZWNvZGUgcm9vdCBub2RlXG4gIGlmIChzdGF0ZS5wYXJlbnQgPT09IG51bGwpXG4gICAgcmV0dXJuIGlucHV0LndyYXBSZXN1bHQoc3RhdGUuY2hpbGRyZW5bMF0uX2RlY29kZShpbnB1dCwgb3B0aW9ucykpO1xuXG4gIHZhciByZXN1bHQgPSBzdGF0ZVsnZGVmYXVsdCddO1xuICB2YXIgcHJlc2VudCA9IHRydWU7XG5cbiAgdmFyIHByZXZLZXkgPSBudWxsO1xuICBpZiAoc3RhdGUua2V5ICE9PSBudWxsKVxuICAgIHByZXZLZXkgPSBpbnB1dC5lbnRlcktleShzdGF0ZS5rZXkpO1xuXG4gIC8vIENoZWNrIGlmIHRhZyBpcyB0aGVyZVxuICBpZiAoc3RhdGUub3B0aW9uYWwpIHtcbiAgICB2YXIgdGFnID0gbnVsbDtcbiAgICBpZiAoc3RhdGUuZXhwbGljaXQgIT09IG51bGwpXG4gICAgICB0YWcgPSBzdGF0ZS5leHBsaWNpdDtcbiAgICBlbHNlIGlmIChzdGF0ZS5pbXBsaWNpdCAhPT0gbnVsbClcbiAgICAgIHRhZyA9IHN0YXRlLmltcGxpY2l0O1xuICAgIGVsc2UgaWYgKHN0YXRlLnRhZyAhPT0gbnVsbClcbiAgICAgIHRhZyA9IHN0YXRlLnRhZztcblxuICAgIGlmICh0YWcgPT09IG51bGwgJiYgIXN0YXRlLmFueSkge1xuICAgICAgLy8gVHJpYWwgYW5kIEVycm9yXG4gICAgICB2YXIgc2F2ZSA9IGlucHV0LnNhdmUoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzdGF0ZS5jaG9pY2UgPT09IG51bGwpXG4gICAgICAgICAgdGhpcy5fZGVjb2RlR2VuZXJpYyhzdGF0ZS50YWcsIGlucHV0LCBvcHRpb25zKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMuX2RlY29kZUNob2ljZShpbnB1dCwgb3B0aW9ucyk7XG4gICAgICAgIHByZXNlbnQgPSB0cnVlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBwcmVzZW50ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpbnB1dC5yZXN0b3JlKHNhdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcmVzZW50ID0gdGhpcy5fcGVla1RhZyhpbnB1dCwgdGFnLCBzdGF0ZS5hbnkpO1xuXG4gICAgICBpZiAoaW5wdXQuaXNFcnJvcihwcmVzZW50KSlcbiAgICAgICAgcmV0dXJuIHByZXNlbnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gUHVzaCBvYmplY3Qgb24gc3RhY2tcbiAgdmFyIHByZXZPYmo7XG4gIGlmIChzdGF0ZS5vYmogJiYgcHJlc2VudClcbiAgICBwcmV2T2JqID0gaW5wdXQuZW50ZXJPYmplY3QoKTtcblxuICBpZiAocHJlc2VudCkge1xuICAgIC8vIFVud3JhcCBleHBsaWNpdCB2YWx1ZXNcbiAgICBpZiAoc3RhdGUuZXhwbGljaXQgIT09IG51bGwpIHtcbiAgICAgIHZhciBleHBsaWNpdCA9IHRoaXMuX2RlY29kZVRhZyhpbnB1dCwgc3RhdGUuZXhwbGljaXQpO1xuICAgICAgaWYgKGlucHV0LmlzRXJyb3IoZXhwbGljaXQpKVxuICAgICAgICByZXR1cm4gZXhwbGljaXQ7XG4gICAgICBpbnB1dCA9IGV4cGxpY2l0O1xuICAgIH1cblxuICAgIHZhciBzdGFydCA9IGlucHV0Lm9mZnNldDtcblxuICAgIC8vIFVud3JhcCBpbXBsaWNpdCBhbmQgbm9ybWFsIHZhbHVlc1xuICAgIGlmIChzdGF0ZS51c2UgPT09IG51bGwgJiYgc3RhdGUuY2hvaWNlID09PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdGUuYW55KVxuICAgICAgICB2YXIgc2F2ZSA9IGlucHV0LnNhdmUoKTtcbiAgICAgIHZhciBib2R5ID0gdGhpcy5fZGVjb2RlVGFnKFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgc3RhdGUuaW1wbGljaXQgIT09IG51bGwgPyBzdGF0ZS5pbXBsaWNpdCA6IHN0YXRlLnRhZyxcbiAgICAgICAgc3RhdGUuYW55XG4gICAgICApO1xuICAgICAgaWYgKGlucHV0LmlzRXJyb3IoYm9keSkpXG4gICAgICAgIHJldHVybiBib2R5O1xuXG4gICAgICBpZiAoc3RhdGUuYW55KVxuICAgICAgICByZXN1bHQgPSBpbnB1dC5yYXcoc2F2ZSk7XG4gICAgICBlbHNlXG4gICAgICAgIGlucHV0ID0gYm9keTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyYWNrICYmIHN0YXRlLnRhZyAhPT0gbnVsbClcbiAgICAgIG9wdGlvbnMudHJhY2soaW5wdXQucGF0aCgpLCBzdGFydCwgaW5wdXQubGVuZ3RoLCAndGFnZ2VkJyk7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRyYWNrICYmIHN0YXRlLnRhZyAhPT0gbnVsbClcbiAgICAgIG9wdGlvbnMudHJhY2soaW5wdXQucGF0aCgpLCBpbnB1dC5vZmZzZXQsIGlucHV0Lmxlbmd0aCwgJ2NvbnRlbnQnKTtcblxuICAgIC8vIFNlbGVjdCBwcm9wZXIgbWV0aG9kIGZvciB0YWdcbiAgICBpZiAoc3RhdGUuYW55KVxuICAgICAgcmVzdWx0ID0gcmVzdWx0O1xuICAgIGVsc2UgaWYgKHN0YXRlLmNob2ljZSA9PT0gbnVsbClcbiAgICAgIHJlc3VsdCA9IHRoaXMuX2RlY29kZUdlbmVyaWMoc3RhdGUudGFnLCBpbnB1dCwgb3B0aW9ucyk7XG4gICAgZWxzZVxuICAgICAgcmVzdWx0ID0gdGhpcy5fZGVjb2RlQ2hvaWNlKGlucHV0LCBvcHRpb25zKTtcblxuICAgIGlmIChpbnB1dC5pc0Vycm9yKHJlc3VsdCkpXG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgLy8gRGVjb2RlIGNoaWxkcmVuXG4gICAgaWYgKCFzdGF0ZS5hbnkgJiYgc3RhdGUuY2hvaWNlID09PSBudWxsICYmIHN0YXRlLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIGRlY29kZUNoaWxkcmVuKGNoaWxkKSB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFyZSBpZ25vcmluZyBlcnJvcnMgaGVyZSwgdG8gbGV0IHBhcnNlciBjb250aW51ZSB3aXRoIG90aGVyXG4gICAgICAgIC8vIHBhcnRzIG9mIGVuY29kZWQgZGF0YVxuICAgICAgICBjaGlsZC5fZGVjb2RlKGlucHV0LCBvcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIERlY29kZSBjb250YWluZWQvZW5jb2RlZCBieSBzY2hlbWEsIG9ubHkgaW4gYml0IG9yIG9jdGV0IHN0cmluZ3NcbiAgICBpZiAoc3RhdGUuY29udGFpbnMgJiYgKHN0YXRlLnRhZyA9PT0gJ29jdHN0cicgfHwgc3RhdGUudGFnID09PSAnYml0c3RyJykpIHtcbiAgICAgIHZhciBkYXRhID0gbmV3IERlY29kZXJCdWZmZXIocmVzdWx0KTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuX2dldFVzZShzdGF0ZS5jb250YWlucywgaW5wdXQuX3JlcG9ydGVyU3RhdGUub2JqKVxuICAgICAgICAgIC5fZGVjb2RlKGRhdGEsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBvcCBvYmplY3RcbiAgaWYgKHN0YXRlLm9iaiAmJiBwcmVzZW50KVxuICAgIHJlc3VsdCA9IGlucHV0LmxlYXZlT2JqZWN0KHByZXZPYmopO1xuXG4gIC8vIFNldCBrZXlcbiAgaWYgKHN0YXRlLmtleSAhPT0gbnVsbCAmJiAocmVzdWx0ICE9PSBudWxsIHx8IHByZXNlbnQgPT09IHRydWUpKVxuICAgIGlucHV0LmxlYXZlS2V5KHByZXZLZXksIHN0YXRlLmtleSwgcmVzdWx0KTtcbiAgZWxzZSBpZiAocHJldktleSAhPT0gbnVsbClcbiAgICBpbnB1dC5leGl0S2V5KHByZXZLZXkpO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYyA9IGZ1bmN0aW9uIGRlY29kZUdlbmVyaWModGFnLCBpbnB1dCwgb3B0aW9ucykge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9iYXNlU3RhdGU7XG5cbiAgaWYgKHRhZyA9PT0gJ3NlcScgfHwgdGFnID09PSAnc2V0JylcbiAgICByZXR1cm4gbnVsbDtcbiAgaWYgKHRhZyA9PT0gJ3NlcW9mJyB8fCB0YWcgPT09ICdzZXRvZicpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZUxpc3QoaW5wdXQsIHRhZywgc3RhdGUuYXJnc1swXSwgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKC9zdHIkLy50ZXN0KHRhZykpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZVN0cihpbnB1dCwgdGFnLCBvcHRpb25zKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqaWQnICYmIHN0YXRlLmFyZ3MpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZU9iamlkKGlucHV0LCBzdGF0ZS5hcmdzWzBdLCBzdGF0ZS5hcmdzWzFdLCBvcHRpb25zKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqaWQnKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVPYmppZChpbnB1dCwgbnVsbCwgbnVsbCwgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2dlbnRpbWUnIHx8IHRhZyA9PT0gJ3V0Y3RpbWUnKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVUaW1lKGlucHV0LCB0YWcsIG9wdGlvbnMpO1xuICBlbHNlIGlmICh0YWcgPT09ICdudWxsXycpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZU51bGwoaW5wdXQsIG9wdGlvbnMpO1xuICBlbHNlIGlmICh0YWcgPT09ICdib29sJylcbiAgICByZXR1cm4gdGhpcy5fZGVjb2RlQm9vbChpbnB1dCwgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ29iakRlc2MnKVxuICAgIHJldHVybiB0aGlzLl9kZWNvZGVTdHIoaW5wdXQsIHRhZywgb3B0aW9ucyk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2ludCcgfHwgdGFnID09PSAnZW51bScpXG4gICAgcmV0dXJuIHRoaXMuX2RlY29kZUludChpbnB1dCwgc3RhdGUuYXJncyAmJiBzdGF0ZS5hcmdzWzBdLCBvcHRpb25zKTtcblxuICBpZiAoc3RhdGUudXNlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFVzZShzdGF0ZS51c2UsIGlucHV0Ll9yZXBvcnRlclN0YXRlLm9iailcbiAgICAgICAgLl9kZWNvZGUoaW5wdXQsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBpbnB1dC5lcnJvcigndW5rbm93biB0YWc6ICcgKyB0YWcpO1xuICB9XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5fZ2V0VXNlID0gZnVuY3Rpb24gX2dldFVzZShlbnRpdHksIG9iaikge1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgLy8gQ3JlYXRlIGFsdGVyZWQgdXNlIGRlY29kZXIgaWYgaW1wbGljaXQgaXMgc2V0XG4gIHN0YXRlLnVzZURlY29kZXIgPSB0aGlzLl91c2UoZW50aXR5LCBvYmopO1xuICBhc3NlcnQoc3RhdGUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCA9PT0gbnVsbCk7XG4gIHN0YXRlLnVzZURlY29kZXIgPSBzdGF0ZS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF07XG4gIGlmIChzdGF0ZS5pbXBsaWNpdCAhPT0gc3RhdGUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0KSB7XG4gICAgc3RhdGUudXNlRGVjb2RlciA9IHN0YXRlLnVzZURlY29kZXIuY2xvbmUoKTtcbiAgICBzdGF0ZS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQgPSBzdGF0ZS5pbXBsaWNpdDtcbiAgfVxuICByZXR1cm4gc3RhdGUudXNlRGVjb2Rlcjtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9kZWNvZGVDaG9pY2UgPSBmdW5jdGlvbiBkZWNvZGVDaG9pY2UoaW5wdXQsIG9wdGlvbnMpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgdmFyIG1hdGNoID0gZmFsc2U7XG5cbiAgT2JqZWN0LmtleXMoc3RhdGUuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKGtleSkge1xuICAgIHZhciBzYXZlID0gaW5wdXQuc2F2ZSgpO1xuICAgIHZhciBub2RlID0gc3RhdGUuY2hvaWNlW2tleV07XG4gICAgdHJ5IHtcbiAgICAgIHZhciB2YWx1ZSA9IG5vZGUuX2RlY29kZShpbnB1dCwgb3B0aW9ucyk7XG4gICAgICBpZiAoaW5wdXQuaXNFcnJvcih2YWx1ZSkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgcmVzdWx0ID0geyB0eXBlOiBrZXksIHZhbHVlOiB2YWx1ZSB9O1xuICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlucHV0LnJlc3RvcmUoc2F2ZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LCB0aGlzKTtcblxuICBpZiAoIW1hdGNoKVxuICAgIHJldHVybiBpbnB1dC5lcnJvcignQ2hvaWNlIG5vdCBtYXRjaGVkJyk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vXG4vLyBFbmNvZGluZ1xuLy9cblxuTm9kZS5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXIgPSBmdW5jdGlvbiBjcmVhdGVFbmNvZGVyQnVmZmVyKGRhdGEpIHtcbiAgcmV0dXJuIG5ldyBFbmNvZGVyQnVmZmVyKGRhdGEsIHRoaXMucmVwb3J0ZXIpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2VuY29kZSA9IGZ1bmN0aW9uIGVuY29kZShkYXRhLCByZXBvcnRlciwgcGFyZW50KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgaWYgKHN0YXRlWydkZWZhdWx0J10gIT09IG51bGwgJiYgc3RhdGVbJ2RlZmF1bHQnXSA9PT0gZGF0YSlcbiAgICByZXR1cm47XG5cbiAgdmFyIHJlc3VsdCA9IHRoaXMuX2VuY29kZVZhbHVlKGRhdGEsIHJlcG9ydGVyLCBwYXJlbnQpO1xuICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuO1xuXG4gIGlmICh0aGlzLl9za2lwRGVmYXVsdChyZXN1bHQsIHJlcG9ydGVyLCBwYXJlbnQpKVxuICAgIHJldHVybjtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2VuY29kZVZhbHVlID0gZnVuY3Rpb24gZW5jb2RlKGRhdGEsIHJlcG9ydGVyLCBwYXJlbnQpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIC8vIERlY29kZSByb290IG5vZGVcbiAgaWYgKHN0YXRlLnBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gc3RhdGUuY2hpbGRyZW5bMF0uX2VuY29kZShkYXRhLCByZXBvcnRlciB8fCBuZXcgUmVwb3J0ZXIoKSk7XG5cbiAgdmFyIHJlc3VsdCA9IG51bGw7XG5cbiAgLy8gU2V0IHJlcG9ydGVyIHRvIHNoYXJlIGl0IHdpdGggYSBjaGlsZCBjbGFzc1xuICB0aGlzLnJlcG9ydGVyID0gcmVwb3J0ZXI7XG5cbiAgLy8gQ2hlY2sgaWYgZGF0YSBpcyB0aGVyZVxuICBpZiAoc3RhdGUub3B0aW9uYWwgJiYgZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHN0YXRlWydkZWZhdWx0J10gIT09IG51bGwpXG4gICAgICBkYXRhID0gc3RhdGVbJ2RlZmF1bHQnXVxuICAgIGVsc2VcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEVuY29kZSBjaGlsZHJlbiBmaXJzdFxuICB2YXIgY29udGVudCA9IG51bGw7XG4gIHZhciBwcmltaXRpdmUgPSBmYWxzZTtcbiAgaWYgKHN0YXRlLmFueSkge1xuICAgIC8vIEFueXRoaW5nIHRoYXQgd2FzIGdpdmVuIGlzIHRyYW5zbGF0ZWQgdG8gYnVmZmVyXG4gICAgcmVzdWx0ID0gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihkYXRhKTtcbiAgfSBlbHNlIGlmIChzdGF0ZS5jaG9pY2UpIHtcbiAgICByZXN1bHQgPSB0aGlzLl9lbmNvZGVDaG9pY2UoZGF0YSwgcmVwb3J0ZXIpO1xuICB9IGVsc2UgaWYgKHN0YXRlLmNvbnRhaW5zKSB7XG4gICAgY29udGVudCA9IHRoaXMuX2dldFVzZShzdGF0ZS5jb250YWlucywgcGFyZW50KS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyKTtcbiAgICBwcmltaXRpdmUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHN0YXRlLmNoaWxkcmVuKSB7XG4gICAgY29udGVudCA9IHN0YXRlLmNoaWxkcmVuLm1hcChmdW5jdGlvbihjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkLl9iYXNlU3RhdGUudGFnID09PSAnbnVsbF8nKVxuICAgICAgICByZXR1cm4gY2hpbGQuX2VuY29kZShudWxsLCByZXBvcnRlciwgZGF0YSk7XG5cbiAgICAgIGlmIChjaGlsZC5fYmFzZVN0YXRlLmtleSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdDaGlsZCBzaG91bGQgaGF2ZSBhIGtleScpO1xuICAgICAgdmFyIHByZXZLZXkgPSByZXBvcnRlci5lbnRlcktleShjaGlsZC5fYmFzZVN0YXRlLmtleSk7XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpXG4gICAgICAgIHJldHVybiByZXBvcnRlci5lcnJvcignQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Jyk7XG5cbiAgICAgIHZhciByZXMgPSBjaGlsZC5fZW5jb2RlKGRhdGFbY2hpbGQuX2Jhc2VTdGF0ZS5rZXldLCByZXBvcnRlciwgZGF0YSk7XG4gICAgICByZXBvcnRlci5sZWF2ZUtleShwcmV2S2V5KTtcblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LCB0aGlzKS5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9KTtcbiAgICBjb250ZW50ID0gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihjb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoc3RhdGUudGFnID09PSAnc2Vxb2YnIHx8IHN0YXRlLnRhZyA9PT0gJ3NldG9mJykge1xuICAgICAgLy8gVE9ETyhpbmR1dG55KTogdGhpcyBzaG91bGQgYmUgdGhyb3duIG9uIERTTCBsZXZlbFxuICAgICAgaWYgKCEoc3RhdGUuYXJncyAmJiBzdGF0ZS5hcmdzLmxlbmd0aCA9PT0gMSkpXG4gICAgICAgIHJldHVybiByZXBvcnRlci5lcnJvcignVG9vIG1hbnkgYXJncyBmb3IgOiAnICsgc3RhdGUudGFnKTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKVxuICAgICAgICByZXR1cm4gcmVwb3J0ZXIuZXJyb3IoJ3NlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXknKTtcblxuICAgICAgdmFyIGNoaWxkID0gdGhpcy5jbG9uZSgpO1xuICAgICAgY2hpbGQuX2Jhc2VTdGF0ZS5pbXBsaWNpdCA9IG51bGw7XG4gICAgICBjb250ZW50ID0gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihkYXRhLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0VXNlKHN0YXRlLmFyZ3NbMF0sIGRhdGEpLl9lbmNvZGUoaXRlbSwgcmVwb3J0ZXIpO1xuICAgICAgfSwgY2hpbGQpKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLnVzZSAhPT0gbnVsbCkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5fZ2V0VXNlKHN0YXRlLnVzZSwgcGFyZW50KS5fZW5jb2RlKGRhdGEsIHJlcG9ydGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudCA9IHRoaXMuX2VuY29kZVByaW1pdGl2ZShzdGF0ZS50YWcsIGRhdGEpO1xuICAgICAgcHJpbWl0aXZlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBFbmNvZGUgZGF0YSBpdHNlbGZcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKCFzdGF0ZS5hbnkgJiYgc3RhdGUuY2hvaWNlID09PSBudWxsKSB7XG4gICAgdmFyIHRhZyA9IHN0YXRlLmltcGxpY2l0ICE9PSBudWxsID8gc3RhdGUuaW1wbGljaXQgOiBzdGF0ZS50YWc7XG4gICAgdmFyIGNscyA9IHN0YXRlLmltcGxpY2l0ID09PSBudWxsID8gJ3VuaXZlcnNhbCcgOiAnY29udGV4dCc7XG5cbiAgICBpZiAodGFnID09PSBudWxsKSB7XG4gICAgICBpZiAoc3RhdGUudXNlID09PSBudWxsKVxuICAgICAgICByZXBvcnRlci5lcnJvcignVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGF0ZS51c2UgPT09IG51bGwpXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2VuY29kZUNvbXBvc2l0ZSh0YWcsIHByaW1pdGl2ZSwgY2xzLCBjb250ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBXcmFwIGluIGV4cGxpY2l0XG4gIGlmIChzdGF0ZS5leHBsaWNpdCAhPT0gbnVsbClcbiAgICByZXN1bHQgPSB0aGlzLl9lbmNvZGVDb21wb3NpdGUoc3RhdGUuZXhwbGljaXQsIGZhbHNlLCAnY29udGV4dCcsIHJlc3VsdCk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9lbmNvZGVDaG9pY2UgPSBmdW5jdGlvbiBlbmNvZGVDaG9pY2UoZGF0YSwgcmVwb3J0ZXIpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIHZhciBub2RlID0gc3RhdGUuY2hvaWNlW2RhdGEudHlwZV07XG4gIGlmICghbm9kZSkge1xuICAgIGFzc2VydChcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGRhdGEudHlwZSArICcgbm90IGZvdW5kIGluICcgK1xuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc3RhdGUuY2hvaWNlKSkpO1xuICB9XG4gIHJldHVybiBub2RlLl9lbmNvZGUoZGF0YS52YWx1ZSwgcmVwb3J0ZXIpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZSA9IGZ1bmN0aW9uIGVuY29kZVByaW1pdGl2ZSh0YWcsIGRhdGEpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fYmFzZVN0YXRlO1xuXG4gIGlmICgvc3RyJC8udGVzdCh0YWcpKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVTdHIoZGF0YSwgdGFnKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqaWQnICYmIHN0YXRlLmFyZ3MpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGRhdGEsIHN0YXRlLnJldmVyc2VBcmdzWzBdLCBzdGF0ZS5hcmdzWzFdKTtcbiAgZWxzZSBpZiAodGFnID09PSAnb2JqaWQnKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVPYmppZChkYXRhLCBudWxsLCBudWxsKTtcbiAgZWxzZSBpZiAodGFnID09PSAnZ2VudGltZScgfHwgdGFnID09PSAndXRjdGltZScpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoZGF0YSwgdGFnKTtcbiAgZWxzZSBpZiAodGFnID09PSAnbnVsbF8nKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ2ludCcgfHwgdGFnID09PSAnZW51bScpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZUludChkYXRhLCBzdGF0ZS5hcmdzICYmIHN0YXRlLnJldmVyc2VBcmdzWzBdKTtcbiAgZWxzZSBpZiAodGFnID09PSAnYm9vbCcpXG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woZGF0YSk7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ29iakRlc2MnKVxuICAgIHJldHVybiB0aGlzLl9lbmNvZGVTdHIoZGF0YSwgdGFnKTtcbiAgZWxzZVxuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdGFnOiAnICsgdGFnKTtcbn07XG5cbk5vZGUucHJvdG90eXBlLl9pc051bXN0ciA9IGZ1bmN0aW9uIGlzTnVtc3RyKHN0cikge1xuICByZXR1cm4gL15bMC05IF0qJC8udGVzdChzdHIpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuX2lzUHJpbnRzdHIgPSBmdW5jdGlvbiBpc1ByaW50c3RyKHN0cikge1xuICByZXR1cm4gL15bQS1aYS16MC05ICdcXChcXClcXCssXFwtXFwuXFwvOj1cXD9dKiQvLnRlc3Qoc3RyKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/base/node.js\n\n}")},"./node_modules/asn1.js/lib/asn1/base/reporter.js"(__unused_webpack_module,exports,__webpack_require__){eval("{var inherits = __webpack_require__(/*! inherits */ \"./node_modules/inherits/inherits_browser.js\");\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n var state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n var state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n var state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n var state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n var state = this._reporterState;\n\n var prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n var state = this._reporterState;\n\n var now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n var err;\n var state = this._reporterState;\n\n var inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n var state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL3JlcG9ydGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyw2REFBVTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9iYXNlL3JlcG9ydGVyLmpzP2QxYzgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZnVuY3Rpb24gUmVwb3J0ZXIob3B0aW9ucykge1xuICB0aGlzLl9yZXBvcnRlclN0YXRlID0ge1xuICAgIG9iajogbnVsbCxcbiAgICBwYXRoOiBbXSxcbiAgICBvcHRpb25zOiBvcHRpb25zIHx8IHt9LFxuICAgIGVycm9yczogW11cbiAgfTtcbn1cbmV4cG9ydHMuUmVwb3J0ZXIgPSBSZXBvcnRlcjtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmlzRXJyb3IgPSBmdW5jdGlvbiBpc0Vycm9yKG9iaikge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgUmVwb3J0ZXJFcnJvcjtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24gc2F2ZSgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICByZXR1cm4geyBvYmo6IHN0YXRlLm9iaiwgcGF0aExlbjogc3RhdGUucGF0aC5sZW5ndGggfTtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24gcmVzdG9yZShkYXRhKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgc3RhdGUub2JqID0gZGF0YS5vYmo7XG4gIHN0YXRlLnBhdGggPSBzdGF0ZS5wYXRoLnNsaWNlKDAsIGRhdGEucGF0aExlbik7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUuZW50ZXJLZXkgPSBmdW5jdGlvbiBlbnRlcktleShrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKGtleSk7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUuZXhpdEtleSA9IGZ1bmN0aW9uIGV4aXRLZXkoaW5kZXgpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICBzdGF0ZS5wYXRoID0gc3RhdGUucGF0aC5zbGljZSgwLCBpbmRleCAtIDEpO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmxlYXZlS2V5ID0gZnVuY3Rpb24gbGVhdmVLZXkoaW5kZXgsIGtleSwgdmFsdWUpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICB0aGlzLmV4aXRLZXkoaW5kZXgpO1xuICBpZiAoc3RhdGUub2JqICE9PSBudWxsKVxuICAgIHN0YXRlLm9ialtrZXldID0gdmFsdWU7XG59O1xuXG5SZXBvcnRlci5wcm90b3R5cGUucGF0aCA9IGZ1bmN0aW9uIHBhdGgoKSB7XG4gIHJldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGguam9pbignLycpO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmVudGVyT2JqZWN0ID0gZnVuY3Rpb24gZW50ZXJPYmplY3QoKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgdmFyIHByZXYgPSBzdGF0ZS5vYmo7XG4gIHN0YXRlLm9iaiA9IHt9O1xuICByZXR1cm4gcHJldjtcbn07XG5cblJlcG9ydGVyLnByb3RvdHlwZS5sZWF2ZU9iamVjdCA9IGZ1bmN0aW9uIGxlYXZlT2JqZWN0KHByZXYpIHtcbiAgdmFyIHN0YXRlID0gdGhpcy5fcmVwb3J0ZXJTdGF0ZTtcblxuICB2YXIgbm93ID0gc3RhdGUub2JqO1xuICBzdGF0ZS5vYmogPSBwcmV2O1xuICByZXR1cm4gbm93O1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gZXJyb3IobXNnKSB7XG4gIHZhciBlcnI7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX3JlcG9ydGVyU3RhdGU7XG5cbiAgdmFyIGluaGVyaXRlZCA9IG1zZyBpbnN0YW5jZW9mIFJlcG9ydGVyRXJyb3I7XG4gIGlmIChpbmhlcml0ZWQpIHtcbiAgICBlcnIgPSBtc2c7XG4gIH0gZWxzZSB7XG4gICAgZXJyID0gbmV3IFJlcG9ydGVyRXJyb3Ioc3RhdGUucGF0aC5tYXAoZnVuY3Rpb24oZWxlbSkge1xuICAgICAgcmV0dXJuICdbJyArIEpTT04uc3RyaW5naWZ5KGVsZW0pICsgJ10nO1xuICAgIH0pLmpvaW4oJycpLCBtc2cubWVzc2FnZSB8fCBtc2csIG1zZy5zdGFjayk7XG4gIH1cblxuICBpZiAoIXN0YXRlLm9wdGlvbnMucGFydGlhbClcbiAgICB0aHJvdyBlcnI7XG5cbiAgaWYgKCFpbmhlcml0ZWQpXG4gICAgc3RhdGUuZXJyb3JzLnB1c2goZXJyKTtcblxuICByZXR1cm4gZXJyO1xufTtcblxuUmVwb3J0ZXIucHJvdG90eXBlLndyYXBSZXN1bHQgPSBmdW5jdGlvbiB3cmFwUmVzdWx0KHJlc3VsdCkge1xuICB2YXIgc3RhdGUgPSB0aGlzLl9yZXBvcnRlclN0YXRlO1xuICBpZiAoIXN0YXRlLm9wdGlvbnMucGFydGlhbClcbiAgICByZXR1cm4gcmVzdWx0O1xuXG4gIHJldHVybiB7XG4gICAgcmVzdWx0OiB0aGlzLmlzRXJyb3IocmVzdWx0KSA/IG51bGwgOiByZXN1bHQsXG4gICAgZXJyb3JzOiBzdGF0ZS5lcnJvcnNcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIFJlcG9ydGVyRXJyb3IocGF0aCwgbXNnKSB7XG4gIHRoaXMucGF0aCA9IHBhdGg7XG4gIHRoaXMucmV0aHJvdyhtc2cpO1xufTtcbmluaGVyaXRzKFJlcG9ydGVyRXJyb3IsIEVycm9yKTtcblxuUmVwb3J0ZXJFcnJvci5wcm90b3R5cGUucmV0aHJvdyA9IGZ1bmN0aW9uIHJldGhyb3cobXNnKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1zZyArICcgYXQ6ICcgKyAodGhpcy5wYXRoIHx8ICcoc2hhbGxvdyknKTtcbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcG9ydGVyRXJyb3IpO1xuXG4gIGlmICghdGhpcy5zdGFjaykge1xuICAgIHRyeSB7XG4gICAgICAvLyBJRSBvbmx5IGFkZHMgc3RhY2sgd2hlbiB0aHJvd25cbiAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuc3RhY2sgPSBlLnN0YWNrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/base/reporter.js\n\n}")},"./node_modules/asn1.js/lib/asn1/constants/der.js"(__unused_webpack_module,exports,__webpack_require__){eval("{var constants = __webpack_require__(/*! ../constants */ \"./node_modules/asn1.js/lib/asn1/constants/index.js\");\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9jb25zdGFudHMvZGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQixtQkFBTyxDQUFDLHdFQUFjOztBQUV0QyxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEIsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvY29uc3RhbnRzL2Rlci5qcz84YjcxIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBjb25zdGFudHMgPSByZXF1aXJlKCcuLi9jb25zdGFudHMnKTtcblxuZXhwb3J0cy50YWdDbGFzcyA9IHtcbiAgMDogJ3VuaXZlcnNhbCcsXG4gIDE6ICdhcHBsaWNhdGlvbicsXG4gIDI6ICdjb250ZXh0JyxcbiAgMzogJ3ByaXZhdGUnXG59O1xuZXhwb3J0cy50YWdDbGFzc0J5TmFtZSA9IGNvbnN0YW50cy5fcmV2ZXJzZShleHBvcnRzLnRhZ0NsYXNzKTtcblxuZXhwb3J0cy50YWcgPSB7XG4gIDB4MDA6ICdlbmQnLFxuICAweDAxOiAnYm9vbCcsXG4gIDB4MDI6ICdpbnQnLFxuICAweDAzOiAnYml0c3RyJyxcbiAgMHgwNDogJ29jdHN0cicsXG4gIDB4MDU6ICdudWxsXycsXG4gIDB4MDY6ICdvYmppZCcsXG4gIDB4MDc6ICdvYmpEZXNjJyxcbiAgMHgwODogJ2V4dGVybmFsJyxcbiAgMHgwOTogJ3JlYWwnLFxuICAweDBhOiAnZW51bScsXG4gIDB4MGI6ICdlbWJlZCcsXG4gIDB4MGM6ICd1dGY4c3RyJyxcbiAgMHgwZDogJ3JlbGF0aXZlT2lkJyxcbiAgMHgxMDogJ3NlcScsXG4gIDB4MTE6ICdzZXQnLFxuICAweDEyOiAnbnVtc3RyJyxcbiAgMHgxMzogJ3ByaW50c3RyJyxcbiAgMHgxNDogJ3Q2MXN0cicsXG4gIDB4MTU6ICd2aWRlb3N0cicsXG4gIDB4MTY6ICdpYTVzdHInLFxuICAweDE3OiAndXRjdGltZScsXG4gIDB4MTg6ICdnZW50aW1lJyxcbiAgMHgxOTogJ2dyYXBoc3RyJyxcbiAgMHgxYTogJ2lzbzY0NnN0cicsXG4gIDB4MWI6ICdnZW5zdHInLFxuICAweDFjOiAndW5pc3RyJyxcbiAgMHgxZDogJ2NoYXJzdHInLFxuICAweDFlOiAnYm1wc3RyJ1xufTtcbmV4cG9ydHMudGFnQnlOYW1lID0gY29uc3RhbnRzLl9yZXZlcnNlKGV4cG9ydHMudGFnKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/constants/der.js\n\n}")},"./node_modules/asn1.js/lib/asn1/constants/index.js"(__unused_webpack_module,exports,__webpack_require__){eval('{var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n var res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n var value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = __webpack_require__(/*! ./der */ "./node_modules/asn1.js/lib/asn1/constants/der.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9jb25zdGFudHMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsK0RBQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2NvbnN0YW50cy9pbmRleC5qcz8wMjExIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBjb25zdGFudHMgPSBleHBvcnRzO1xuXG4vLyBIZWxwZXJcbmNvbnN0YW50cy5fcmV2ZXJzZSA9IGZ1bmN0aW9uIHJldmVyc2UobWFwKSB7XG4gIHZhciByZXMgPSB7fTtcblxuICBPYmplY3Qua2V5cyhtYXApLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgLy8gQ29udmVydCBrZXkgdG8gaW50ZWdlciBpZiBpdCBpcyBzdHJpbmdpZmllZFxuICAgIGlmICgoa2V5IHwgMCkgPT0ga2V5KVxuICAgICAga2V5ID0ga2V5IHwgMDtcblxuICAgIHZhciB2YWx1ZSA9IG1hcFtrZXldO1xuICAgIHJlc1t2YWx1ZV0gPSBrZXk7XG4gIH0pO1xuXG4gIHJldHVybiByZXM7XG59O1xuXG5jb25zdGFudHMuZGVyID0gcmVxdWlyZSgnLi9kZXInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/constants/index.js\n\n}')},"./node_modules/asn1.js/lib/asn1/decoders/der.js"(module,__unused_webpack_exports,__webpack_require__){eval("{var inherits = __webpack_require__(/*! inherits */ \"./node_modules/inherits/inherits_browser.js\");\n\nvar asn1 = __webpack_require__(/*! ../../asn1 */ \"./node_modules/asn1.js/lib/asn1.js\");\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!(data instanceof base.DecoderBuffer))\n data = new base.DecoderBuffer(data, options);\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n var state = buffer.save();\n var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n var decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n var len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n var state = buffer.save();\n var res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n while (true) {\n var tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n var len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n var res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len)\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n var result = [];\n while (!buffer.isEmpty()) {\n var possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n var res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n var unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n var raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n var str = '';\n for (var i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n var numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n var printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n var result;\n var identifiers = [];\n var ident = 0;\n while (!buffer.isEmpty()) {\n var subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n var first = (identifiers[0] / 40) | 0;\n var second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n var tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n var str = buffer.raw().toString();\n if (tag === 'gentime') {\n var year = str.slice(0, 4) | 0;\n var mon = str.slice(4, 6) | 0;\n var day = str.slice(6, 8) | 0;\n var hour = str.slice(8, 10) | 0;\n var min = str.slice(10, 12) | 0;\n var sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n var year = str.slice(0, 2) | 0;\n var mon = str.slice(2, 4) | 0;\n var day = str.slice(4, 6) | 0;\n var hour = str.slice(6, 8) | 0;\n var min = str.slice(8, 10) | 0;\n var sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n var res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n var raw = buffer.raw();\n var res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n var tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n var cls = der.tagClass[tag >> 6];\n var primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n var oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n var tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n var len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n var num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (var i = 0; i < num; i++) {\n len <<= 8;\n var j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9kZWNvZGVycy9kZXIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLDZEQUFVOztBQUVqQyxXQUFXLG1CQUFPLENBQUMsc0RBQVk7QUFDL0I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2RlY29kZXJzL2Rlci5qcz9jZmJkIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbnZhciBhc24xID0gcmVxdWlyZSgnLi4vLi4vYXNuMScpO1xudmFyIGJhc2UgPSBhc24xLmJhc2U7XG52YXIgYmlnbnVtID0gYXNuMS5iaWdudW07XG5cbi8vIEltcG9ydCBERVIgY29uc3RhbnRzXG52YXIgZGVyID0gYXNuMS5jb25zdGFudHMuZGVyO1xuXG5mdW5jdGlvbiBERVJEZWNvZGVyKGVudGl0eSkge1xuICB0aGlzLmVuYyA9ICdkZXInO1xuICB0aGlzLm5hbWUgPSBlbnRpdHkubmFtZTtcbiAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XG5cbiAgLy8gQ29uc3RydWN0IGJhc2UgdHJlZVxuICB0aGlzLnRyZWUgPSBuZXcgREVSTm9kZSgpO1xuICB0aGlzLnRyZWUuX2luaXQoZW50aXR5LmJvZHkpO1xufTtcbm1vZHVsZS5leHBvcnRzID0gREVSRGVjb2RlcjtcblxuREVSRGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGRhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIGJhc2UuRGVjb2RlckJ1ZmZlcikpXG4gICAgZGF0YSA9IG5ldyBiYXNlLkRlY29kZXJCdWZmZXIoZGF0YSwgb3B0aW9ucyk7XG5cbiAgcmV0dXJuIHRoaXMudHJlZS5fZGVjb2RlKGRhdGEsIG9wdGlvbnMpO1xufTtcblxuLy8gVHJlZSBtZXRob2RzXG5cbmZ1bmN0aW9uIERFUk5vZGUocGFyZW50KSB7XG4gIGJhc2UuTm9kZS5jYWxsKHRoaXMsICdkZXInLCBwYXJlbnQpO1xufVxuaW5oZXJpdHMoREVSTm9kZSwgYmFzZS5Ob2RlKTtcblxuREVSTm9kZS5wcm90b3R5cGUuX3BlZWtUYWcgPSBmdW5jdGlvbiBwZWVrVGFnKGJ1ZmZlciwgdGFnLCBhbnkpIHtcbiAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBzdGF0ZSA9IGJ1ZmZlci5zYXZlKCk7XG4gIHZhciBkZWNvZGVkVGFnID0gZGVyRGVjb2RlVGFnKGJ1ZmZlciwgJ0ZhaWxlZCB0byBwZWVrIHRhZzogXCInICsgdGFnICsgJ1wiJyk7XG4gIGlmIChidWZmZXIuaXNFcnJvcihkZWNvZGVkVGFnKSlcbiAgICByZXR1cm4gZGVjb2RlZFRhZztcblxuICBidWZmZXIucmVzdG9yZShzdGF0ZSk7XG5cbiAgcmV0dXJuIGRlY29kZWRUYWcudGFnID09PSB0YWcgfHwgZGVjb2RlZFRhZy50YWdTdHIgPT09IHRhZyB8fFxuICAgIChkZWNvZGVkVGFnLnRhZ1N0ciArICdvZicpID09PSB0YWcgfHwgYW55O1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZVRhZyA9IGZ1bmN0aW9uIGRlY29kZVRhZyhidWZmZXIsIHRhZywgYW55KSB7XG4gIHZhciBkZWNvZGVkVGFnID0gZGVyRGVjb2RlVGFnKGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mIFwiJyArIHRhZyArICdcIicpO1xuICBpZiAoYnVmZmVyLmlzRXJyb3IoZGVjb2RlZFRhZykpXG4gICAgcmV0dXJuIGRlY29kZWRUYWc7XG5cbiAgdmFyIGxlbiA9IGRlckRlY29kZUxlbihidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFRhZy5wcmltaXRpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mIFwiJyArIHRhZyArICdcIicpO1xuXG4gIC8vIEZhaWx1cmVcbiAgaWYgKGJ1ZmZlci5pc0Vycm9yKGxlbikpXG4gICAgcmV0dXJuIGxlbjtcblxuICBpZiAoIWFueSAmJlxuICAgICAgZGVjb2RlZFRhZy50YWcgIT09IHRhZyAmJlxuICAgICAgZGVjb2RlZFRhZy50YWdTdHIgIT09IHRhZyAmJlxuICAgICAgZGVjb2RlZFRhZy50YWdTdHIgKyAnb2YnICE9PSB0YWcpIHtcbiAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiBcIicgKyB0YWcgKyAnXCInKTtcbiAgfVxuXG4gIGlmIChkZWNvZGVkVGFnLnByaW1pdGl2ZSB8fCBsZW4gIT09IG51bGwpXG4gICAgcmV0dXJuIGJ1ZmZlci5za2lwKGxlbiwgJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicgKyB0YWcgKyAnXCInKTtcblxuICAvLyBJbmRlZmluaXRlIGxlbmd0aC4uLiBmaW5kIEVORCB0YWdcbiAgdmFyIHN0YXRlID0gYnVmZmVyLnNhdmUoKTtcbiAgdmFyIHJlcyA9IHRoaXMuX3NraXBVbnRpbEVuZChcbiAgICAgIGJ1ZmZlcixcbiAgICAgICdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiBcIicgKyB0aGlzLnRhZyArICdcIicpO1xuICBpZiAoYnVmZmVyLmlzRXJyb3IocmVzKSlcbiAgICByZXR1cm4gcmVzO1xuXG4gIGxlbiA9IGJ1ZmZlci5vZmZzZXQgLSBzdGF0ZS5vZmZzZXQ7XG4gIGJ1ZmZlci5yZXN0b3JlKHN0YXRlKTtcbiAgcmV0dXJuIGJ1ZmZlci5za2lwKGxlbiwgJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicgKyB0YWcgKyAnXCInKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9za2lwVW50aWxFbmQgPSBmdW5jdGlvbiBza2lwVW50aWxFbmQoYnVmZmVyLCBmYWlsKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHRhZyA9IGRlckRlY29kZVRhZyhidWZmZXIsIGZhaWwpO1xuICAgIGlmIChidWZmZXIuaXNFcnJvcih0YWcpKVxuICAgICAgcmV0dXJuIHRhZztcbiAgICB2YXIgbGVuID0gZGVyRGVjb2RlTGVuKGJ1ZmZlciwgdGFnLnByaW1pdGl2ZSwgZmFpbCk7XG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKGxlbikpXG4gICAgICByZXR1cm4gbGVuO1xuXG4gICAgdmFyIHJlcztcbiAgICBpZiAodGFnLnByaW1pdGl2ZSB8fCBsZW4gIT09IG51bGwpXG4gICAgICByZXMgPSBidWZmZXIuc2tpcChsZW4pXG4gICAgZWxzZVxuICAgICAgcmVzID0gdGhpcy5fc2tpcFVudGlsRW5kKGJ1ZmZlciwgZmFpbCk7XG5cbiAgICAvLyBGYWlsdXJlXG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKHJlcykpXG4gICAgICByZXR1cm4gcmVzO1xuXG4gICAgaWYgKHRhZy50YWdTdHIgPT09ICdlbmQnKVxuICAgICAgYnJlYWs7XG4gIH1cbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVMaXN0ID0gZnVuY3Rpb24gZGVjb2RlTGlzdChidWZmZXIsIHRhZywgZGVjb2RlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgd2hpbGUgKCFidWZmZXIuaXNFbXB0eSgpKSB7XG4gICAgdmFyIHBvc3NpYmxlRW5kID0gdGhpcy5fcGVla1RhZyhidWZmZXIsICdlbmQnKTtcbiAgICBpZiAoYnVmZmVyLmlzRXJyb3IocG9zc2libGVFbmQpKVxuICAgICAgcmV0dXJuIHBvc3NpYmxlRW5kO1xuXG4gICAgdmFyIHJlcyA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlciwgJ2RlcicsIG9wdGlvbnMpO1xuICAgIGlmIChidWZmZXIuaXNFcnJvcihyZXMpICYmIHBvc3NpYmxlRW5kKVxuICAgICAgYnJlYWs7XG4gICAgcmVzdWx0LnB1c2gocmVzKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZVN0ciA9IGZ1bmN0aW9uIGRlY29kZVN0cihidWZmZXIsIHRhZykge1xuICBpZiAodGFnID09PSAnYml0c3RyJykge1xuICAgIHZhciB1bnVzZWQgPSBidWZmZXIucmVhZFVJbnQ4KCk7XG4gICAgaWYgKGJ1ZmZlci5pc0Vycm9yKHVudXNlZCkpXG4gICAgICByZXR1cm4gdW51c2VkO1xuICAgIHJldHVybiB7IHVudXNlZDogdW51c2VkLCBkYXRhOiBidWZmZXIucmF3KCkgfTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdibXBzdHInKSB7XG4gICAgdmFyIHJhdyA9IGJ1ZmZlci5yYXcoKTtcbiAgICBpZiAocmF3Lmxlbmd0aCAlIDIgPT09IDEpXG4gICAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCcpO1xuXG4gICAgdmFyIHN0ciA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3Lmxlbmd0aCAvIDI7IGkrKykge1xuICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocmF3LnJlYWRVSW50MTZCRShpICogMikpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ251bXN0cicpIHtcbiAgICB2YXIgbnVtc3RyID0gYnVmZmVyLnJhdygpLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIGlmICghdGhpcy5faXNOdW1zdHIobnVtc3RyKSkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci5lcnJvcignRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bXN0cjtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdvY3RzdHInKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5yYXcoKTtcbiAgfSBlbHNlIGlmICh0YWcgPT09ICdvYmpEZXNjJykge1xuICAgIHJldHVybiBidWZmZXIucmF3KCk7XG4gIH0gZWxzZSBpZiAodGFnID09PSAncHJpbnRzdHInKSB7XG4gICAgdmFyIHByaW50c3RyID0gYnVmZmVyLnJhdygpLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIGlmICghdGhpcy5faXNQcmludHN0cihwcmludHN0cikpIHtcbiAgICAgIHJldHVybiBidWZmZXIuZXJyb3IoJ0RlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHByaW50c3RyO1xuICB9IGVsc2UgaWYgKC9zdHIkLy50ZXN0KHRhZykpIHtcbiAgICByZXR1cm4gYnVmZmVyLnJhdygpLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5lcnJvcignRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICcgKyB0YWcgKyAnIHVuc3VwcG9ydGVkJyk7XG4gIH1cbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVPYmppZCA9IGZ1bmN0aW9uIGRlY29kZU9iamlkKGJ1ZmZlciwgdmFsdWVzLCByZWxhdGl2ZSkge1xuICB2YXIgcmVzdWx0O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcbiAgdmFyIGlkZW50ID0gMDtcbiAgd2hpbGUgKCFidWZmZXIuaXNFbXB0eSgpKSB7XG4gICAgdmFyIHN1YmlkZW50ID0gYnVmZmVyLnJlYWRVSW50OCgpO1xuICAgIGlkZW50IDw8PSA3O1xuICAgIGlkZW50IHw9IHN1YmlkZW50ICYgMHg3ZjtcbiAgICBpZiAoKHN1YmlkZW50ICYgMHg4MCkgPT09IDApIHtcbiAgICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnQpO1xuICAgICAgaWRlbnQgPSAwO1xuICAgIH1cbiAgfVxuICBpZiAoc3ViaWRlbnQgJiAweDgwKVxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnQpO1xuXG4gIHZhciBmaXJzdCA9IChpZGVudGlmaWVyc1swXSAvIDQwKSB8IDA7XG4gIHZhciBzZWNvbmQgPSBpZGVudGlmaWVyc1swXSAlIDQwO1xuXG4gIGlmIChyZWxhdGl2ZSlcbiAgICByZXN1bHQgPSBpZGVudGlmaWVycztcbiAgZWxzZVxuICAgIHJlc3VsdCA9IFtmaXJzdCwgc2Vjb25kXS5jb25jYXQoaWRlbnRpZmllcnMuc2xpY2UoMSkpO1xuXG4gIGlmICh2YWx1ZXMpIHtcbiAgICB2YXIgdG1wID0gdmFsdWVzW3Jlc3VsdC5qb2luKCcgJyldO1xuICAgIGlmICh0bXAgPT09IHVuZGVmaW5lZClcbiAgICAgIHRtcCA9IHZhbHVlc1tyZXN1bHQuam9pbignLicpXTtcbiAgICBpZiAodG1wICE9PSB1bmRlZmluZWQpXG4gICAgICByZXN1bHQgPSB0bXA7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZVRpbWUgPSBmdW5jdGlvbiBkZWNvZGVUaW1lKGJ1ZmZlciwgdGFnKSB7XG4gIHZhciBzdHIgPSBidWZmZXIucmF3KCkudG9TdHJpbmcoKTtcbiAgaWYgKHRhZyA9PT0gJ2dlbnRpbWUnKSB7XG4gICAgdmFyIHllYXIgPSBzdHIuc2xpY2UoMCwgNCkgfCAwO1xuICAgIHZhciBtb24gPSBzdHIuc2xpY2UoNCwgNikgfCAwO1xuICAgIHZhciBkYXkgPSBzdHIuc2xpY2UoNiwgOCkgfCAwO1xuICAgIHZhciBob3VyID0gc3RyLnNsaWNlKDgsIDEwKSB8IDA7XG4gICAgdmFyIG1pbiA9IHN0ci5zbGljZSgxMCwgMTIpIHwgMDtcbiAgICB2YXIgc2VjID0gc3RyLnNsaWNlKDEyLCAxNCkgfCAwO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ3V0Y3RpbWUnKSB7XG4gICAgdmFyIHllYXIgPSBzdHIuc2xpY2UoMCwgMikgfCAwO1xuICAgIHZhciBtb24gPSBzdHIuc2xpY2UoMiwgNCkgfCAwO1xuICAgIHZhciBkYXkgPSBzdHIuc2xpY2UoNCwgNikgfCAwO1xuICAgIHZhciBob3VyID0gc3RyLnNsaWNlKDYsIDgpIHwgMDtcbiAgICB2YXIgbWluID0gc3RyLnNsaWNlKDgsIDEwKSB8IDA7XG4gICAgdmFyIHNlYyA9IHN0ci5zbGljZSgxMCwgMTIpIHwgMDtcbiAgICBpZiAoeWVhciA8IDcwKVxuICAgICAgeWVhciA9IDIwMDAgKyB5ZWFyO1xuICAgIGVsc2VcbiAgICAgIHllYXIgPSAxOTAwICsgeWVhcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYnVmZmVyLmVycm9yKCdEZWNvZGluZyAnICsgdGFnICsgJyB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7XG4gIH1cblxuICByZXR1cm4gRGF0ZS5VVEMoeWVhciwgbW9uIC0gMSwgZGF5LCBob3VyLCBtaW4sIHNlYywgMCk7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fZGVjb2RlTnVsbCA9IGZ1bmN0aW9uIGRlY29kZU51bGwoYnVmZmVyKSB7XG4gIHJldHVybiBudWxsO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2RlY29kZUJvb2wgPSBmdW5jdGlvbiBkZWNvZGVCb29sKGJ1ZmZlcikge1xuICB2YXIgcmVzID0gYnVmZmVyLnJlYWRVSW50OCgpO1xuICBpZiAoYnVmZmVyLmlzRXJyb3IocmVzKSlcbiAgICByZXR1cm4gcmVzO1xuICBlbHNlXG4gICAgcmV0dXJuIHJlcyAhPT0gMDtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9kZWNvZGVJbnQgPSBmdW5jdGlvbiBkZWNvZGVJbnQoYnVmZmVyLCB2YWx1ZXMpIHtcbiAgLy8gQmlnaW50LCByZXR1cm4gYXMgaXQgaXMgKGFzc3VtZSBiaWcgZW5kaWFuKVxuICB2YXIgcmF3ID0gYnVmZmVyLnJhdygpO1xuICB2YXIgcmVzID0gbmV3IGJpZ251bShyYXcpO1xuXG4gIGlmICh2YWx1ZXMpXG4gICAgcmVzID0gdmFsdWVzW3Jlcy50b1N0cmluZygxMCldIHx8IHJlcztcblxuICByZXR1cm4gcmVzO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX3VzZSA9IGZ1bmN0aW9uIHVzZShlbnRpdHksIG9iaikge1xuICBpZiAodHlwZW9mIGVudGl0eSA9PT0gJ2Z1bmN0aW9uJylcbiAgICBlbnRpdHkgPSBlbnRpdHkob2JqKTtcbiAgcmV0dXJuIGVudGl0eS5fZ2V0RGVjb2RlcignZGVyJykudHJlZTtcbn07XG5cbi8vIFV0aWxpdHkgbWV0aG9kc1xuXG5mdW5jdGlvbiBkZXJEZWNvZGVUYWcoYnVmLCBmYWlsKSB7XG4gIHZhciB0YWcgPSBidWYucmVhZFVJbnQ4KGZhaWwpO1xuICBpZiAoYnVmLmlzRXJyb3IodGFnKSlcbiAgICByZXR1cm4gdGFnO1xuXG4gIHZhciBjbHMgPSBkZXIudGFnQ2xhc3NbdGFnID4+IDZdO1xuICB2YXIgcHJpbWl0aXZlID0gKHRhZyAmIDB4MjApID09PSAwO1xuXG4gIC8vIE11bHRpLW9jdGV0IHRhZyAtIGxvYWRcbiAgaWYgKCh0YWcgJiAweDFmKSA9PT0gMHgxZikge1xuICAgIHZhciBvY3QgPSB0YWc7XG4gICAgdGFnID0gMDtcbiAgICB3aGlsZSAoKG9jdCAmIDB4ODApID09PSAweDgwKSB7XG4gICAgICBvY3QgPSBidWYucmVhZFVJbnQ4KGZhaWwpO1xuICAgICAgaWYgKGJ1Zi5pc0Vycm9yKG9jdCkpXG4gICAgICAgIHJldHVybiBvY3Q7XG5cbiAgICAgIHRhZyA8PD0gNztcbiAgICAgIHRhZyB8PSBvY3QgJiAweDdmO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0YWcgJj0gMHgxZjtcbiAgfVxuICB2YXIgdGFnU3RyID0gZGVyLnRhZ1t0YWddO1xuXG4gIHJldHVybiB7XG4gICAgY2xzOiBjbHMsXG4gICAgcHJpbWl0aXZlOiBwcmltaXRpdmUsXG4gICAgdGFnOiB0YWcsXG4gICAgdGFnU3RyOiB0YWdTdHJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVyRGVjb2RlTGVuKGJ1ZiwgcHJpbWl0aXZlLCBmYWlsKSB7XG4gIHZhciBsZW4gPSBidWYucmVhZFVJbnQ4KGZhaWwpO1xuICBpZiAoYnVmLmlzRXJyb3IobGVuKSlcbiAgICByZXR1cm4gbGVuO1xuXG4gIC8vIEluZGVmaW5pdGUgZm9ybVxuICBpZiAoIXByaW1pdGl2ZSAmJiBsZW4gPT09IDB4ODApXG4gICAgcmV0dXJuIG51bGw7XG5cbiAgLy8gRGVmaW5pdGUgZm9ybVxuICBpZiAoKGxlbiAmIDB4ODApID09PSAwKSB7XG4gICAgLy8gU2hvcnQgZm9ybVxuICAgIHJldHVybiBsZW47XG4gIH1cblxuICAvLyBMb25nIGZvcm1cbiAgdmFyIG51bSA9IGxlbiAmIDB4N2Y7XG4gIGlmIChudW0gPiA0KVxuICAgIHJldHVybiBidWYuZXJyb3IoJ2xlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmcnKTtcblxuICBsZW4gPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG4gICAgbGVuIDw8PSA4O1xuICAgIHZhciBqID0gYnVmLnJlYWRVSW50OChmYWlsKTtcbiAgICBpZiAoYnVmLmlzRXJyb3IoaikpXG4gICAgICByZXR1cm4gajtcbiAgICBsZW4gfD0gajtcbiAgfVxuXG4gIHJldHVybiBsZW47XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/decoders/der.js\n\n}")},"./node_modules/asn1.js/lib/asn1/decoders/index.js"(__unused_webpack_module,exports,__webpack_require__){eval('{var decoders = exports;\n\ndecoders.der = __webpack_require__(/*! ./der */ "./node_modules/asn1.js/lib/asn1/decoders/der.js");\ndecoders.pem = __webpack_require__(/*! ./pem */ "./node_modules/asn1.js/lib/asn1/decoders/pem.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9kZWNvZGVycy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxlQUFlLG1CQUFPLENBQUMsOERBQU87QUFDOUIsZUFBZSxtQkFBTyxDQUFDLDhEQUFPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9kZWNvZGVycy9pbmRleC5qcz8yMGY2Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBkZWNvZGVycyA9IGV4cG9ydHM7XG5cbmRlY29kZXJzLmRlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG5kZWNvZGVycy5wZW0gPSByZXF1aXJlKCcuL3BlbScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/decoders/index.js\n\n}')},"./node_modules/asn1.js/lib/asn1/decoders/pem.js"(module,__unused_webpack_exports,__webpack_require__){eval("{var inherits = __webpack_require__(/*! inherits */ \"./node_modules/inherits/inherits_browser.js\");\nvar Buffer = (__webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer);\n\nvar DERDecoder = __webpack_require__(/*! ./der */ \"./node_modules/asn1.js/lib/asn1/decoders/der.js\");\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n var lines = data.toString().split(/[\\r\\n]+/g);\n\n var label = options.label.toUpperCase();\n\n var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n var start = -1;\n var end = -1;\n for (var i = 0; i < lines.length; i++) {\n var match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n var base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n var input = new Buffer(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9kZWNvZGVycy9wZW0uanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLDZEQUFVO0FBQ2pDLGFBQWEsNEVBQXdCOztBQUVyQyxpQkFBaUIsbUJBQU8sQ0FBQyw4REFBTzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGtCQUFrQjtBQUNwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9hc24xLmpzL2xpYi9hc24xL2RlY29kZXJzL3BlbS5qcz84ZGY3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG52YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuXG52YXIgREVSRGVjb2RlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG5cbmZ1bmN0aW9uIFBFTURlY29kZXIoZW50aXR5KSB7XG4gIERFUkRlY29kZXIuY2FsbCh0aGlzLCBlbnRpdHkpO1xuICB0aGlzLmVuYyA9ICdwZW0nO1xufTtcbmluaGVyaXRzKFBFTURlY29kZXIsIERFUkRlY29kZXIpO1xubW9kdWxlLmV4cG9ydHMgPSBQRU1EZWNvZGVyO1xuXG5QRU1EZWNvZGVyLnByb3RvdHlwZS5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoZGF0YSwgb3B0aW9ucykge1xuICB2YXIgbGluZXMgPSBkYXRhLnRvU3RyaW5nKCkuc3BsaXQoL1tcXHJcXG5dKy9nKTtcblxuICB2YXIgbGFiZWwgPSBvcHRpb25zLmxhYmVsLnRvVXBwZXJDYXNlKCk7XG5cbiAgdmFyIHJlID0gL14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvO1xuICB2YXIgc3RhcnQgPSAtMTtcbiAgdmFyIGVuZCA9IC0xO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1hdGNoID0gbGluZXNbaV0ubWF0Y2gocmUpO1xuICAgIGlmIChtYXRjaCA9PT0gbnVsbClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgaWYgKG1hdGNoWzJdICE9PSBsYWJlbClcbiAgICAgIGNvbnRpbnVlO1xuXG4gICAgaWYgKHN0YXJ0ID09PSAtMSkge1xuICAgICAgaWYgKG1hdGNoWzFdICE9PSAnQkVHSU4nKVxuICAgICAgICBicmVhaztcbiAgICAgIHN0YXJ0ID0gaTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1hdGNoWzFdICE9PSAnRU5EJylcbiAgICAgICAgYnJlYWs7XG4gICAgICBlbmQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICcgKyBsYWJlbCk7XG5cbiAgdmFyIGJhc2U2NCA9IGxpbmVzLnNsaWNlKHN0YXJ0ICsgMSwgZW5kKS5qb2luKCcnKTtcbiAgLy8gUmVtb3ZlIGV4Y2Vzc2l2ZSBzeW1ib2xzXG4gIGJhc2U2NC5yZXBsYWNlKC9bXmEtejAtOVxcK1xcLz1dKy9naSwgJycpO1xuXG4gIHZhciBpbnB1dCA9IG5ldyBCdWZmZXIoYmFzZTY0LCAnYmFzZTY0Jyk7XG4gIHJldHVybiBERVJEZWNvZGVyLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLCBpbnB1dCwgb3B0aW9ucyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/decoders/pem.js\n\n}")},"./node_modules/asn1.js/lib/asn1/encoders/der.js"(module,__unused_webpack_exports,__webpack_require__){eval("{var inherits = __webpack_require__(/*! inherits */ \"./node_modules/inherits/inherits_browser.js\");\nvar Buffer = (__webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer);\n\nvar asn1 = __webpack_require__(/*! ../../asn1 */ \"./node_modules/asn1.js/lib/asn1.js\");\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n var header = new Buffer(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n var lenOctets = 1;\n for (var i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n var header = new Buffer(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n var buf = new Buffer(str.length * 2);\n for (var i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s\\.]+/g);\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n var size = 0;\n for (var i = 0; i < id.length; i++) {\n var ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n var objid = new Buffer(size);\n var offset = objid.length - 1;\n for (var i = id.length - 1; i >= 0; i--) {\n var ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n var str;\n var date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n var numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = new Buffer(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n var size = num.length;\n if (num.length === 0)\n size++;\n\n var out = new Buffer(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n var size = 1;\n for (var i = num; i >= 0x100; i >>= 8)\n size++;\n\n var out = new Array(size);\n for (var i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n var state = this._baseState;\n var i;\n if (state['default'] === null)\n return false;\n\n var data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n var res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9kZXIuanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLDZEQUFVO0FBQ2pDLGFBQWEsNEVBQXdCOztBQUVyQyxXQUFXLG1CQUFPLENBQUMsc0RBQVk7QUFDL0I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixZQUFZO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrREFBa0QsT0FBTztBQUN6RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkM7QUFDQSxJQUFJO0FBQ0o7QUFDQSxvQkFBb0IsZUFBZTtBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQixlQUFlO0FBQ2pDO0FBQ0EsaUJBQWlCLGVBQWU7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLFFBQVE7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLFlBQVk7QUFDaEM7O0FBRUE7QUFDQSwrQkFBK0IsUUFBUTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2FzbjEuanMvbGliL2FzbjEvZW5jb2RlcnMvZGVyLmpzPzM3NjgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXInKS5CdWZmZXI7XG5cbnZhciBhc24xID0gcmVxdWlyZSgnLi4vLi4vYXNuMScpO1xudmFyIGJhc2UgPSBhc24xLmJhc2U7XG5cbi8vIEltcG9ydCBERVIgY29uc3RhbnRzXG52YXIgZGVyID0gYXNuMS5jb25zdGFudHMuZGVyO1xuXG5mdW5jdGlvbiBERVJFbmNvZGVyKGVudGl0eSkge1xuICB0aGlzLmVuYyA9ICdkZXInO1xuICB0aGlzLm5hbWUgPSBlbnRpdHkubmFtZTtcbiAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XG5cbiAgLy8gQ29uc3RydWN0IGJhc2UgdHJlZVxuICB0aGlzLnRyZWUgPSBuZXcgREVSTm9kZSgpO1xuICB0aGlzLnRyZWUuX2luaXQoZW50aXR5LmJvZHkpO1xufTtcbm1vZHVsZS5leHBvcnRzID0gREVSRW5jb2RlcjtcblxuREVSRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGRhdGEsIHJlcG9ydGVyKSB7XG4gIHJldHVybiB0aGlzLnRyZWUuX2VuY29kZShkYXRhLCByZXBvcnRlcikuam9pbigpO1xufTtcblxuLy8gVHJlZSBtZXRob2RzXG5cbmZ1bmN0aW9uIERFUk5vZGUocGFyZW50KSB7XG4gIGJhc2UuTm9kZS5jYWxsKHRoaXMsICdkZXInLCBwYXJlbnQpO1xufVxuaW5oZXJpdHMoREVSTm9kZSwgYmFzZS5Ob2RlKTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZSA9IGZ1bmN0aW9uIGVuY29kZUNvbXBvc2l0ZSh0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50KSB7XG4gIHZhciBlbmNvZGVkVGFnID0gZW5jb2RlVGFnKHRhZywgcHJpbWl0aXZlLCBjbHMsIHRoaXMucmVwb3J0ZXIpO1xuXG4gIC8vIFNob3J0IGZvcm1cbiAgaWYgKGNvbnRlbnQubGVuZ3RoIDwgMHg4MCkge1xuICAgIHZhciBoZWFkZXIgPSBuZXcgQnVmZmVyKDIpO1xuICAgIGhlYWRlclswXSA9IGVuY29kZWRUYWc7XG4gICAgaGVhZGVyWzFdID0gY29udGVudC5sZW5ndGg7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWyBoZWFkZXIsIGNvbnRlbnQgXSk7XG4gIH1cblxuICAvLyBMb25nIGZvcm1cbiAgLy8gQ291bnQgb2N0ZXRzIHJlcXVpcmVkIHRvIHN0b3JlIGxlbmd0aFxuICB2YXIgbGVuT2N0ZXRzID0gMTtcbiAgZm9yICh2YXIgaSA9IGNvbnRlbnQubGVuZ3RoOyBpID49IDB4MTAwOyBpID4+PSA4KVxuICAgIGxlbk9jdGV0cysrO1xuXG4gIHZhciBoZWFkZXIgPSBuZXcgQnVmZmVyKDEgKyAxICsgbGVuT2N0ZXRzKTtcbiAgaGVhZGVyWzBdID0gZW5jb2RlZFRhZztcbiAgaGVhZGVyWzFdID0gMHg4MCB8IGxlbk9jdGV0cztcblxuICBmb3IgKHZhciBpID0gMSArIGxlbk9jdGV0cywgaiA9IGNvbnRlbnQubGVuZ3RoOyBqID4gMDsgaS0tLCBqID4+PSA4KVxuICAgIGhlYWRlcltpXSA9IGogJiAweGZmO1xuXG4gIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFsgaGVhZGVyLCBjb250ZW50IF0pO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZVN0ciA9IGZ1bmN0aW9uIGVuY29kZVN0cihzdHIsIHRhZykge1xuICBpZiAodGFnID09PSAnYml0c3RyJykge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFsgc3RyLnVudXNlZCB8IDAsIHN0ci5kYXRhIF0pO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2JtcHN0cicpIHtcbiAgICB2YXIgYnVmID0gbmV3IEJ1ZmZlcihzdHIubGVuZ3RoICogMik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ1Zi53cml0ZVVJbnQxNkJFKHN0ci5jaGFyQ29kZUF0KGkpLCBpICogMik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGJ1Zik7XG4gIH0gZWxzZSBpZiAodGFnID09PSAnbnVtc3RyJykge1xuICAgIGlmICghdGhpcy5faXNOdW1zdHIoc3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ0VuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBkaWdpdHMgYW5kIHNwYWNlJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHN0cik7XG4gIH0gZWxzZSBpZiAodGFnID09PSAncHJpbnRzdHInKSB7XG4gICAgaWYgKCF0aGlzLl9pc1ByaW50c3RyKHN0cikpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb24gbWFyaycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihzdHIpO1xuICB9IGVsc2UgaWYgKC9zdHIkLy50ZXN0KHRhZykpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihzdHIpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ29iakRlc2MnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoc3RyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcignRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICcgKyB0YWcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdW5zdXBwb3J0ZWQnKTtcbiAgfVxufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZU9iamlkID0gZnVuY3Rpb24gZW5jb2RlT2JqaWQoaWQsIHZhbHVlcywgcmVsYXRpdmUpIHtcbiAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIXZhbHVlcylcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kJyk7XG4gICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkoaWQpKVxuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ29iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwJyk7XG4gICAgaWQgPSB2YWx1ZXNbaWRdLnNwbGl0KC9bXFxzXFwuXSsvZyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZC5sZW5ndGg7IGkrKylcbiAgICAgIGlkW2ldIHw9IDA7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpZCkpIHtcbiAgICBpZCA9IGlkLnNsaWNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZC5sZW5ndGg7IGkrKylcbiAgICAgIGlkW2ldIHw9IDA7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoaWQpKSB7XG4gICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ29iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnb3Q6ICcgKyBKU09OLnN0cmluZ2lmeShpZCkpO1xuICB9XG5cbiAgaWYgKCFyZWxhdGl2ZSkge1xuICAgIGlmIChpZFsxXSA+PSA0MClcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0InKTtcbiAgICBpZC5zcGxpY2UoMCwgMiwgaWRbMF0gKiA0MCArIGlkWzFdKTtcbiAgfVxuXG4gIC8vIENvdW50IG51bWJlciBvZiBvY3RldHNcbiAgdmFyIHNpemUgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGlkLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGlkZW50ID0gaWRbaV07XG4gICAgZm9yIChzaXplKys7IGlkZW50ID49IDB4ODA7IGlkZW50ID4+PSA3KVxuICAgICAgc2l6ZSsrO1xuICB9XG5cbiAgdmFyIG9iamlkID0gbmV3IEJ1ZmZlcihzaXplKTtcbiAgdmFyIG9mZnNldCA9IG9iamlkLmxlbmd0aCAtIDE7XG4gIGZvciAodmFyIGkgPSBpZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBpZGVudCA9IGlkW2ldO1xuICAgIG9iamlkW29mZnNldC0tXSA9IGlkZW50ICYgMHg3ZjtcbiAgICB3aGlsZSAoKGlkZW50ID4+PSA3KSA+IDApXG4gICAgICBvYmppZFtvZmZzZXQtLV0gPSAweDgwIHwgKGlkZW50ICYgMHg3Zik7XG4gIH1cblxuICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihvYmppZCk7XG59O1xuXG5mdW5jdGlvbiB0d28obnVtKSB7XG4gIGlmIChudW0gPCAxMClcbiAgICByZXR1cm4gJzAnICsgbnVtO1xuICBlbHNlXG4gICAgcmV0dXJuIG51bTtcbn1cblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZVRpbWUgPSBmdW5jdGlvbiBlbmNvZGVUaW1lKHRpbWUsIHRhZykge1xuICB2YXIgc3RyO1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuXG4gIGlmICh0YWcgPT09ICdnZW50aW1lJykge1xuICAgIHN0ciA9IFtcbiAgICAgIHR3byhkYXRlLmdldEZ1bGxZZWFyKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDRGF0ZSgpKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ0hvdXJzKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDTWludXRlcygpKSxcbiAgICAgIHR3byhkYXRlLmdldFVUQ1NlY29uZHMoKSksXG4gICAgICAnWidcbiAgICBdLmpvaW4oJycpO1xuICB9IGVsc2UgaWYgKHRhZyA9PT0gJ3V0Y3RpbWUnKSB7XG4gICAgc3RyID0gW1xuICAgICAgdHdvKGRhdGUuZ2V0RnVsbFllYXIoKSAlIDEwMCksXG4gICAgICB0d28oZGF0ZS5nZXRVVENNb250aCgpICsgMSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENEYXRlKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDSG91cnMoKSksXG4gICAgICB0d28oZGF0ZS5nZXRVVENNaW51dGVzKCkpLFxuICAgICAgdHdvKGRhdGUuZ2V0VVRDU2Vjb25kcygpKSxcbiAgICAgICdaJ1xuICAgIF0uam9pbignJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yZXBvcnRlci5lcnJvcignRW5jb2RpbmcgJyArIHRhZyArICcgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCcpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2VuY29kZVN0cihzdHIsICdvY3RzdHInKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9lbmNvZGVOdWxsID0gZnVuY3Rpb24gZW5jb2RlTnVsbCgpIHtcbiAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoJycpO1xufTtcblxuREVSTm9kZS5wcm90b3R5cGUuX2VuY29kZUludCA9IGZ1bmN0aW9uIGVuY29kZUludChudW0sIHZhbHVlcykge1xuICBpZiAodHlwZW9mIG51bSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIXZhbHVlcylcbiAgICAgIHJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCdTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwJyk7XG4gICAgaWYgKCF2YWx1ZXMuaGFzT3duUHJvcGVydHkobnVtKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoJ1ZhbHVlcyBtYXAgZG9lc25cXCd0IGNvbnRhaW46ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkobnVtKSk7XG4gICAgfVxuICAgIG51bSA9IHZhbHVlc1tudW1dO1xuICB9XG5cbiAgLy8gQmlnbnVtLCBhc3N1bWUgYmlnIGVuZGlhblxuICBpZiAodHlwZW9mIG51bSAhPT0gJ251bWJlcicgJiYgIUJ1ZmZlci5pc0J1ZmZlcihudW0pKSB7XG4gICAgdmFyIG51bUFycmF5ID0gbnVtLnRvQXJyYXkoKTtcbiAgICBpZiAoIW51bS5zaWduICYmIG51bUFycmF5WzBdICYgMHg4MCkge1xuICAgICAgbnVtQXJyYXkudW5zaGlmdCgwKTtcbiAgICB9XG4gICAgbnVtID0gbmV3IEJ1ZmZlcihudW1BcnJheSk7XG4gIH1cblxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG51bSkpIHtcbiAgICB2YXIgc2l6ZSA9IG51bS5sZW5ndGg7XG4gICAgaWYgKG51bS5sZW5ndGggPT09IDApXG4gICAgICBzaXplKys7XG5cbiAgICB2YXIgb3V0ID0gbmV3IEJ1ZmZlcihzaXplKTtcbiAgICBudW0uY29weShvdXQpO1xuICAgIGlmIChudW0ubGVuZ3RoID09PSAwKVxuICAgICAgb3V0WzBdID0gMFxuICAgIHJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG91dCk7XG4gIH1cblxuICBpZiAobnVtIDwgMHg4MClcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihudW0pO1xuXG4gIGlmIChudW0gPCAweDEwMClcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCwgbnVtXSk7XG5cbiAgdmFyIHNpemUgPSAxO1xuICBmb3IgKHZhciBpID0gbnVtOyBpID49IDB4MTAwOyBpID4+PSA4KVxuICAgIHNpemUrKztcblxuICB2YXIgb3V0ID0gbmV3IEFycmF5KHNpemUpO1xuICBmb3IgKHZhciBpID0gb3V0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgb3V0W2ldID0gbnVtICYgMHhmZjtcbiAgICBudW0gPj49IDg7XG4gIH1cbiAgaWYob3V0WzBdICYgMHg4MCkge1xuICAgIG91dC51bnNoaWZ0KDApO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobmV3IEJ1ZmZlcihvdXQpKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl9lbmNvZGVCb29sID0gZnVuY3Rpb24gZW5jb2RlQm9vbCh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih2YWx1ZSA/IDB4ZmYgOiAwKTtcbn07XG5cbkRFUk5vZGUucHJvdG90eXBlLl91c2UgPSBmdW5jdGlvbiB1c2UoZW50aXR5LCBvYmopIHtcbiAgaWYgKHR5cGVvZiBlbnRpdHkgPT09ICdmdW5jdGlvbicpXG4gICAgZW50aXR5ID0gZW50aXR5KG9iaik7XG4gIHJldHVybiBlbnRpdHkuX2dldEVuY29kZXIoJ2RlcicpLnRyZWU7XG59O1xuXG5ERVJOb2RlLnByb3RvdHlwZS5fc2tpcERlZmF1bHQgPSBmdW5jdGlvbiBza2lwRGVmYXVsdChkYXRhQnVmZmVyLCByZXBvcnRlciwgcGFyZW50KSB7XG4gIHZhciBzdGF0ZSA9IHRoaXMuX2Jhc2VTdGF0ZTtcbiAgdmFyIGk7XG4gIGlmIChzdGF0ZVsnZGVmYXVsdCddID09PSBudWxsKVxuICAgIHJldHVybiBmYWxzZTtcblxuICB2YXIgZGF0YSA9IGRhdGFCdWZmZXIuam9pbigpO1xuICBpZiAoc3RhdGUuZGVmYXVsdEJ1ZmZlciA9PT0gdW5kZWZpbmVkKVxuICAgIHN0YXRlLmRlZmF1bHRCdWZmZXIgPSB0aGlzLl9lbmNvZGVWYWx1ZShzdGF0ZVsnZGVmYXVsdCddLCByZXBvcnRlciwgcGFyZW50KS5qb2luKCk7XG5cbiAgaWYgKGRhdGEubGVuZ3RoICE9PSBzdGF0ZS5kZWZhdWx0QnVmZmVyLmxlbmd0aClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChpPTA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkYXRhW2ldICE9PSBzdGF0ZS5kZWZhdWx0QnVmZmVyW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLy8gVXRpbGl0eSBtZXRob2RzXG5cbmZ1bmN0aW9uIGVuY29kZVRhZyh0YWcsIHByaW1pdGl2ZSwgY2xzLCByZXBvcnRlcikge1xuICB2YXIgcmVzO1xuXG4gIGlmICh0YWcgPT09ICdzZXFvZicpXG4gICAgdGFnID0gJ3NlcSc7XG4gIGVsc2UgaWYgKHRhZyA9PT0gJ3NldG9mJylcbiAgICB0YWcgPSAnc2V0JztcblxuICBpZiAoZGVyLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eSh0YWcpKVxuICAgIHJlcyA9IGRlci50YWdCeU5hbWVbdGFnXTtcbiAgZWxzZSBpZiAodHlwZW9mIHRhZyA9PT0gJ251bWJlcicgJiYgKHRhZyB8IDApID09PSB0YWcpXG4gICAgcmVzID0gdGFnO1xuICBlbHNlXG4gICAgcmV0dXJuIHJlcG9ydGVyLmVycm9yKCdVbmtub3duIHRhZzogJyArIHRhZyk7XG5cbiAgaWYgKHJlcyA+PSAweDFmKVxuICAgIHJldHVybiByZXBvcnRlci5lcnJvcignTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkJyk7XG5cbiAgaWYgKCFwcmltaXRpdmUpXG4gICAgcmVzIHw9IDB4MjA7XG5cbiAgcmVzIHw9IChkZXIudGFnQ2xhc3NCeU5hbWVbY2xzIHx8ICd1bml2ZXJzYWwnXSA8PCA2KTtcblxuICByZXR1cm4gcmVzO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/encoders/der.js\n\n}")},"./node_modules/asn1.js/lib/asn1/encoders/index.js"(__unused_webpack_module,exports,__webpack_require__){eval('{var encoders = exports;\n\nencoders.der = __webpack_require__(/*! ./der */ "./node_modules/asn1.js/lib/asn1/encoders/der.js");\nencoders.pem = __webpack_require__(/*! ./pem */ "./node_modules/asn1.js/lib/asn1/encoders/pem.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxlQUFlLG1CQUFPLENBQUMsOERBQU87QUFDOUIsZUFBZSxtQkFBTyxDQUFDLDhEQUFPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9pbmRleC5qcz8zNDNlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBlbmNvZGVycyA9IGV4cG9ydHM7XG5cbmVuY29kZXJzLmRlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG5lbmNvZGVycy5wZW0gPSByZXF1aXJlKCcuL3BlbScpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/encoders/index.js\n\n}')},"./node_modules/asn1.js/lib/asn1/encoders/pem.js"(module,__unused_webpack_exports,__webpack_require__){eval("{var inherits = __webpack_require__(/*! inherits */ \"./node_modules/inherits/inherits_browser.js\");\n\nvar DEREncoder = __webpack_require__(/*! ./der */ \"./node_modules/asn1.js/lib/asn1/encoders/der.js\");\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n var buf = DEREncoder.prototype.encode.call(this, data);\n\n var p = buf.toString('base64');\n var out = [ '-----BEGIN ' + options.label + '-----' ];\n for (var i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9wZW0uanMiLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLDZEQUFVOztBQUVqQyxpQkFBaUIsbUJBQU8sQ0FBQyw4REFBTzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYXNuMS5qcy9saWIvYXNuMS9lbmNvZGVycy9wZW0uanM/ODViMyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xuXG52YXIgREVSRW5jb2RlciA9IHJlcXVpcmUoJy4vZGVyJyk7XG5cbmZ1bmN0aW9uIFBFTUVuY29kZXIoZW50aXR5KSB7XG4gIERFUkVuY29kZXIuY2FsbCh0aGlzLCBlbnRpdHkpO1xuICB0aGlzLmVuYyA9ICdwZW0nO1xufTtcbmluaGVyaXRzKFBFTUVuY29kZXIsIERFUkVuY29kZXIpO1xubW9kdWxlLmV4cG9ydHMgPSBQRU1FbmNvZGVyO1xuXG5QRU1FbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoZGF0YSwgb3B0aW9ucykge1xuICB2YXIgYnVmID0gREVSRW5jb2Rlci5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcywgZGF0YSk7XG5cbiAgdmFyIHAgPSBidWYudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB2YXIgb3V0ID0gWyAnLS0tLS1CRUdJTiAnICsgb3B0aW9ucy5sYWJlbCArICctLS0tLScgXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwLmxlbmd0aDsgaSArPSA2NClcbiAgICBvdXQucHVzaChwLnNsaWNlKGksIGkgKyA2NCkpO1xuICBvdXQucHVzaCgnLS0tLS1FTkQgJyArIG9wdGlvbnMubGFiZWwgKyAnLS0tLS0nKTtcbiAgcmV0dXJuIG91dC5qb2luKCdcXG4nKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/asn1.js/lib/asn1/encoders/pem.js\n\n}")},"./actions/apiActions.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nvar fetch = __webpack_require__(/*! node-fetch */ "./node_modules/node-fetch/browser.js");\n\n/** Reject protocol-relative and cross-origin absolute URLs (Codacy / SSRF hygiene for client-side fetch). */\nfunction assertClientFetchPath(input) {\n var s = String(input || \'\');\n if (!s) throw new TypeError(\'path required\');\n if (s.startsWith(\'//\')) throw new TypeError(\'protocol-relative URL refused\');\n if (/^https?:\\/\\//i.test(s)) {\n if (typeof window === \'undefined\' || !window.location) return s;\n var u = new URL(s, window.location.href);\n if (u.origin !== window.location.origin) {\n throw new TypeError(\'cross-origin URL refused\');\n }\n }\n return s;\n}\nfunction fetchFromAPI(_x) {\n return _fetchFromAPI.apply(this, arguments);\n}\nfunction _fetchFromAPI() {\n _fetchFromAPI = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(path) {\n var token,\n safe,\n response,\n _args = arguments;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n token = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;\n safe = assertClientFetchPath(path);\n _context.n = 1;\n return fetch(safe, {\n method: \'GET\',\n headers: {\n \'Accept\': \'application/json\',\n \'Content-Type\': \'application/json\',\n \'Authorization\': token ? "Bearer ".concat(token) : undefined\n }\n });\n case 1:\n response = _context.v;\n _context.n = 2;\n return response.json();\n case 2:\n return _context.a(2, _context.v);\n }\n }, _callee);\n }));\n return _fetchFromAPI.apply(this, arguments);\n}\nfunction patchAPI(_x2, _x3) {\n return _patchAPI.apply(this, arguments);\n}\nfunction _patchAPI() {\n _patchAPI = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(path, params) {\n var token,\n safe,\n response,\n _args2 = arguments;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n token = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : null;\n safe = assertClientFetchPath(path);\n _context2.n = 1;\n return fetch(safe, {\n method: \'PATCH\',\n headers: {\n \'Accept\': \'application/json\',\n \'Content-Type\': \'application/json\',\n \'Authorization\': token ? "Bearer ".concat(token) : undefined\n },\n body: JSON.stringify([{\n op: \'replace\',\n path: \'/\',\n value: params\n }])\n });\n case 1:\n response = _context2.v;\n _context2.n = 2;\n return response.json();\n case 2:\n return _context2.a(2, _context2.v);\n }\n }, _callee2);\n }));\n return _patchAPI.apply(this, arguments);\n}\nfunction postAPI(_x4, _x5) {\n return _postAPI.apply(this, arguments);\n}\nfunction _postAPI() {\n _postAPI = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(path, params) {\n var token,\n safe,\n response,\n _args3 = arguments;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n token = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : null;\n safe = assertClientFetchPath(path);\n _context3.n = 1;\n return fetch(safe, {\n method: \'POST\',\n headers: {\n \'Accept\': \'application/json\',\n \'Content-Type\': \'application/json\',\n \'Authorization\': token ? "Bearer ".concat(token) : undefined\n },\n body: params\n });\n case 1:\n response = _context3.v;\n _context3.n = 2;\n return response.json();\n case 2:\n return _context3.a(2, _context3.v);\n }\n }, _callee3);\n }));\n return _postAPI.apply(this, arguments);\n}\nmodule.exports = {\n assertClientFetchPath: assertClientFetchPath,\n fetchFromAPI: fetchFromAPI,\n patchAPI: patchAPI,\n postAPI: postAPI\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQUEsSUFBQThFLFNBQUEsQ0FBQS9FLENBQUE7TUFBQTtJQUFBLEdBQUE2RSxRQUFBO0VBQUEsQ0FDN0I7RUFBQSxPQUFBRCxRQUFBLENBQUE5QyxLQUFBLE9BQUFELFNBQUE7QUFBQTtBQUVEbUQsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZjlDLHFCQUFxQixFQUFyQkEscUJBQXFCO0VBQ3JCVyxZQUFZLEVBQVpBLFlBQVk7RUFDWmUsUUFBUSxFQUFSQSxRQUFRO0VBQ1JZLE9BQU8sRUFBUEE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9hY3Rpb25zL2FwaUFjdGlvbnMuanM/MTY1OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGZldGNoID0gcmVxdWlyZSgnbm9kZS1mZXRjaCcpO1xuXG4vKiogUmVqZWN0IHByb3RvY29sLXJlbGF0aXZlIGFuZCBjcm9zcy1vcmlnaW4gYWJzb2x1dGUgVVJMcyAoQ29kYWN5IC8gU1NSRiBoeWdpZW5lIGZvciBjbGllbnQtc2lkZSBmZXRjaCkuICovXG5mdW5jdGlvbiBhc3NlcnRDbGllbnRGZXRjaFBhdGggKGlucHV0KSB7XG4gIGNvbnN0IHMgPSBTdHJpbmcoaW5wdXQgfHwgJycpO1xuICBpZiAoIXMpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhdGggcmVxdWlyZWQnKTtcbiAgaWYgKHMuc3RhcnRzV2l0aCgnLy8nKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigncHJvdG9jb2wtcmVsYXRpdmUgVVJMIHJlZnVzZWQnKTtcbiAgaWYgKC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QocykpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5sb2NhdGlvbikgcmV0dXJuIHM7XG4gICAgY29uc3QgdSA9IG5ldyBVUkwocywgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIGlmICh1Lm9yaWdpbiAhPT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY3Jvc3Mtb3JpZ2luIFVSTCByZWZ1c2VkJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEZyb21BUEkgKHBhdGgsIHRva2VuID0gbnVsbCkge1xuICBjb25zdCBzYWZlID0gYXNzZXJ0Q2xpZW50RmV0Y2hQYXRoKHBhdGgpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHNhZmUsIHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0F1dGhvcml6YXRpb24nOiAodG9rZW4pID8gYEJlYXJlciAke3Rva2VufWAgOiB1bmRlZmluZWRcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhdGNoQVBJIChwYXRoLCBwYXJhbXMsIHRva2VuID0gbnVsbCkge1xuICBjb25zdCBzYWZlID0gYXNzZXJ0Q2xpZW50RmV0Y2hQYXRoKHBhdGgpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHNhZmUsIHtcbiAgICBtZXRob2Q6ICdQQVRDSCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQXV0aG9yaXphdGlvbic6ICh0b2tlbikgPyBgQmVhcmVyICR7dG9rZW59YCA6IHVuZGVmaW5lZFxuICAgIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgeyBvcDogJ3JlcGxhY2UnLCBwYXRoOiAnLycsIHZhbHVlOiBwYXJhbXMgfVxuICAgIF0pXG4gIH0pO1xuXG4gIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBvc3RBUEkgKHBhdGgsIHBhcmFtcywgdG9rZW4gPSBudWxsKSB7XG4gIGNvbnN0IHNhZmUgPSBhc3NlcnRDbGllbnRGZXRjaFBhdGgocGF0aCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goc2FmZSwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0F1dGhvcml6YXRpb24nOiAodG9rZW4pID8gYEJlYXJlciAke3Rva2VufWAgOiB1bmRlZmluZWRcbiAgICB9LFxuICAgIGJvZHk6IHBhcmFtc1xuICB9KTtcblxuICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXNzZXJ0Q2xpZW50RmV0Y2hQYXRoLFxuICBmZXRjaEZyb21BUEksXG4gIHBhdGNoQVBJLFxuICBwb3N0QVBJXG59O1xuIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIlN5bWJvbCIsIm4iLCJpdGVyYXRvciIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiZmV0Y2giLCJyZXF1aXJlIiwiYXNzZXJ0Q2xpZW50RmV0Y2hQYXRoIiwiaW5wdXQiLCJzIiwiU3RyaW5nIiwic3RhcnRzV2l0aCIsInRlc3QiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIlVSTCIsImhyZWYiLCJvcmlnaW4iLCJmZXRjaEZyb21BUEkiLCJfeCIsIl9mZXRjaEZyb21BUEkiLCJfY2FsbGVlIiwicGF0aCIsInRva2VuIiwic2FmZSIsInJlc3BvbnNlIiwiX2FyZ3MiLCJfY29udGV4dCIsInVuZGVmaW5lZCIsIm1ldGhvZCIsImhlYWRlcnMiLCJjb25jYXQiLCJqc29uIiwicGF0Y2hBUEkiLCJfeDIiLCJfeDMiLCJfcGF0Y2hBUEkiLCJfY2FsbGVlMiIsInBhcmFtcyIsIl9hcmdzMiIsIl9jb250ZXh0MiIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5Iiwib3AiLCJwb3N0QVBJIiwiX3g0IiwiX3g1IiwiX3Bvc3RBUEkiLCJfY2FsbGVlMyIsIl9hcmdzMyIsIl9jb250ZXh0MyIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./actions/apiActions.js\n\n}')},"./actions/bridgeActions.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nvar _require = __webpack_require__(/*! ./apiActions */ "./actions/apiActions.js"),\n fetchFromAPI = _require.fetchFromAPI;\n\n// Action types\nvar BRIDGE_SYNC_REQUEST = \'BRIDGE_SYNC_REQUEST\';\nvar BRIDGE_SYNC_SUCCESS = \'BRIDGE_SYNC_SUCCESS\';\nvar BRIDGE_SYNC_FAILURE = \'BRIDGE_SYNC_FAILURE\';\nvar BRIDGE_NETWORK_STATUS_UPDATE = \'BRIDGE_NETWORK_STATUS_UPDATE\';\n\n// Action creators\nvar bridgeSyncRequest = function bridgeSyncRequest() {\n return {\n type: BRIDGE_SYNC_REQUEST,\n loading: true\n };\n};\nvar bridgeSyncSuccess = function bridgeSyncSuccess(instance) {\n return {\n type: BRIDGE_SYNC_SUCCESS,\n payload: instance,\n loading: false\n };\n};\nvar bridgeSyncFailure = function bridgeSyncFailure(error) {\n return {\n type: BRIDGE_SYNC_FAILURE,\n payload: error,\n loading: false\n };\n};\nvar bridgeNetworkStatusUpdate = function bridgeNetworkStatusUpdate(status) {\n return {\n type: BRIDGE_NETWORK_STATUS_UPDATE,\n payload: status\n };\n};\n\n// Thunk action creator\nvar bridgeSync = function bridgeSync() {\n return /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(dispatch, getState) {\n var token, instance, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n dispatch(bridgeSyncRequest());\n token = getState().auth.token;\n _context.p = 1;\n _context.n = 2;\n return fetchFromAPI("/", token);\n case 2:\n instance = _context.v;\n dispatch(bridgeSyncSuccess(instance));\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n dispatch(bridgeSyncFailure(_t));\n case 4:\n return _context.a(2);\n }\n }, _callee, null, [[1, 3]]);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }();\n};\nmodule.exports = {\n bridgeSync: bridgeSync,\n bridgeNetworkStatusUpdate: bridgeNetworkStatusUpdate,\n BRIDGE_SYNC_REQUEST: BRIDGE_SYNC_REQUEST,\n BRIDGE_SYNC_SUCCESS: BRIDGE_SYNC_SUCCESS,\n BRIDGE_SYNC_FAILURE: BRIDGE_SYNC_FAILURE,\n BRIDGE_NETWORK_STATUS_UPDATE: BRIDGE_NETWORK_STATUS_UPDATE\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQUFyQixLQUFBLE9BQUFELFNBQUE7SUFBQTtFQUFBO0FBQ0gsQ0FBQztBQUVEZ0MsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZlosVUFBVSxFQUFWQSxVQUFVO0VBQ1ZGLHlCQUF5QixFQUF6QkEseUJBQXlCO0VBQ3pCWixtQkFBbUIsRUFBbkJBLG1CQUFtQjtFQUNuQkMsbUJBQW1CLEVBQW5CQSxtQkFBbUI7RUFDbkJDLG1CQUFtQixFQUFuQkEsbUJBQW1CO0VBQ25CQyw0QkFBNEIsRUFBNUJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vYWN0aW9ucy9icmlkZ2VBY3Rpb25zLmpzPzljNDYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IGZldGNoRnJvbUFQSSB9ID0gcmVxdWlyZSgnLi9hcGlBY3Rpb25zJyk7XG5cbi8vIEFjdGlvbiB0eXBlc1xuY29uc3QgQlJJREdFX1NZTkNfUkVRVUVTVCA9ICdCUklER0VfU1lOQ19SRVFVRVNUJztcbmNvbnN0IEJSSURHRV9TWU5DX1NVQ0NFU1MgPSAnQlJJREdFX1NZTkNfU1VDQ0VTUyc7XG5jb25zdCBCUklER0VfU1lOQ19GQUlMVVJFID0gJ0JSSURHRV9TWU5DX0ZBSUxVUkUnO1xuY29uc3QgQlJJREdFX05FVFdPUktfU1RBVFVTX1VQREFURSA9ICdCUklER0VfTkVUV09SS19TVEFUVVNfVVBEQVRFJztcblxuLy8gQWN0aW9uIGNyZWF0b3JzXG5jb25zdCBicmlkZ2VTeW5jUmVxdWVzdCA9ICgpID0+ICh7IHR5cGU6IEJSSURHRV9TWU5DX1JFUVVFU1QsIGxvYWRpbmc6IHRydWUgfSk7XG5jb25zdCBicmlkZ2VTeW5jU3VjY2VzcyA9IChpbnN0YW5jZSkgPT4gKHsgdHlwZTogQlJJREdFX1NZTkNfU1VDQ0VTUywgcGF5bG9hZDogaW5zdGFuY2UsIGxvYWRpbmc6IGZhbHNlIH0pO1xuY29uc3QgYnJpZGdlU3luY0ZhaWx1cmUgPSAoZXJyb3IpID0+ICh7IHR5cGU6IEJSSURHRV9TWU5DX0ZBSUxVUkUsIHBheWxvYWQ6IGVycm9yLCBsb2FkaW5nOiBmYWxzZSB9KTtcbmNvbnN0IGJyaWRnZU5ldHdvcmtTdGF0dXNVcGRhdGUgPSAoc3RhdHVzKSA9PiAoe1xuICB0eXBlOiBCUklER0VfTkVUV09SS19TVEFUVVNfVVBEQVRFLFxuICBwYXlsb2FkOiBzdGF0dXNcbn0pO1xuXG4vLyBUaHVuayBhY3Rpb24gY3JlYXRvclxuY29uc3QgYnJpZGdlU3luYyA9ICgpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBkaXNwYXRjaChicmlkZ2VTeW5jUmVxdWVzdCgpKTtcbiAgICBjb25zdCB7IHRva2VuIH0gPSBnZXRTdGF0ZSgpLmF1dGg7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE86IGdldCBicmlkZ2UgaW5zdGFuY2VcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgZmV0Y2hGcm9tQVBJKGAvYCwgdG9rZW4pO1xuICAgICAgZGlzcGF0Y2goYnJpZGdlU3luY1N1Y2Nlc3MoaW5zdGFuY2UpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZGlzcGF0Y2goYnJpZGdlU3luY0ZhaWx1cmUoZXJyb3IpKTtcbiAgICB9XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYnJpZGdlU3luYyxcbiAgYnJpZGdlTmV0d29ya1N0YXR1c1VwZGF0ZSxcbiAgQlJJREdFX1NZTkNfUkVRVUVTVCxcbiAgQlJJREdFX1NZTkNfU1VDQ0VTUyxcbiAgQlJJREdFX1NZTkNfRkFJTFVSRSxcbiAgQlJJREdFX05FVFdPUktfU1RBVFVTX1VQREFURVxufTtcbiJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJTeW1ib2wiLCJuIiwiaXRlcmF0b3IiLCJvIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl9yZXF1aXJlIiwicmVxdWlyZSIsImZldGNoRnJvbUFQSSIsIkJSSURHRV9TWU5DX1JFUVVFU1QiLCJCUklER0VfU1lOQ19TVUNDRVNTIiwiQlJJREdFX1NZTkNfRkFJTFVSRSIsIkJSSURHRV9ORVRXT1JLX1NUQVRVU19VUERBVEUiLCJicmlkZ2VTeW5jUmVxdWVzdCIsInR5cGUiLCJsb2FkaW5nIiwiYnJpZGdlU3luY1N1Y2Nlc3MiLCJpbnN0YW5jZSIsInBheWxvYWQiLCJicmlkZ2VTeW5jRmFpbHVyZSIsImVycm9yIiwiYnJpZGdlTmV0d29ya1N0YXR1c1VwZGF0ZSIsInN0YXR1cyIsImJyaWRnZVN5bmMiLCJfcmVmIiwiX2NhbGxlZSIsImRpc3BhdGNoIiwiZ2V0U3RhdGUiLCJ0b2tlbiIsIl90IiwiX2NvbnRleHQiLCJhdXRoIiwiX3giLCJfeDIiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./actions/bridgeActions.js\n\n}')},"./actions/contractActions.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n// Dependencies\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nvar fetch = __webpack_require__(/*! cross-fetch */ "./node_modules/cross-fetch/dist/browser-ponyfill.js");\n\n// API Actions\nvar _require = __webpack_require__(/*! ./apiActions */ "./actions/apiActions.js"),\n fetchFromAPI = _require.fetchFromAPI,\n patchAPI = _require.patchAPI;\n\n// Action Types\nvar FETCH_CONTRACT_REQUEST = \'FETCH_CONTRACT_REQUEST\';\nvar FETCH_CONTRACT_SUCCESS = \'FETCH_CONTRACT_SUCCESS\';\nvar FETCH_CONTRACT_FAILURE = \'FETCH_CONTRACT_FAILURE\';\nvar SIGN_CONTRACT_REQUEST = \'SIGN_CONTRACT_REQUEST\';\nvar SIGN_CONTRACT_SUCCESS = \'SIGN_CONTRACT_SUCCESS\';\nvar SIGN_CONTRACT_FAILURE = \'SIGN_CONTRACT_FAILURE\';\nvar GET_CONTRACTS_REQUEST = \'GET_CONTRACTS_REQUEST\';\nvar GET_CONTRACTS_SUCCESS = \'GET_CONTRACTS_SUCCESS\';\nvar GET_CONTRACTS_FAILURE = \'GET_CONTRACTS_FAILURE\';\n\n// Sync Action Creators\nvar fetchContractRequest = function fetchContractRequest() {\n return {\n type: FETCH_CONTRACT_REQUEST\n };\n};\nvar fetchContractSuccess = function fetchContractSuccess(contract) {\n return {\n type: FETCH_CONTRACT_SUCCESS,\n payload: contract\n };\n};\nvar fetchContractFailure = function fetchContractFailure(error) {\n return {\n type: FETCH_CONTRACT_FAILURE,\n payload: error\n };\n};\nvar getContractsRequest = function getContractsRequest() {\n return {\n type: GET_CONTRACTS_REQUEST,\n isSending: true\n };\n};\nvar getContractsSuccess = function getContractsSuccess(contracts) {\n return {\n type: GET_CONTRACTS_SUCCESS,\n payload: {\n contracts: contracts\n },\n isSending: false\n };\n};\nvar getContractsFailure = function getContractsFailure(error) {\n return {\n type: GET_CONTRACTS_FAILURE,\n payload: error,\n error: error,\n isSending: false\n };\n};\nvar signContractRequest = function signContractRequest() {\n return {\n type: SIGN_CONTRACT_REQUEST\n };\n};\nvar signContractSuccess = function signContractSuccess(contract) {\n return {\n type: SIGN_CONTRACT_SUCCESS,\n payload: contract,\n isCompliant: true\n };\n};\nvar signContractFailure = function signContractFailure(error) {\n return {\n type: SIGN_CONTRACT_FAILURE,\n payload: error\n };\n};\n\n// Async Action Creator (Thunk)\nvar fetchContract = function fetchContract(id) {\n return /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(dispatch, getState) {\n var token, contract, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n dispatch(fetchContractRequest());\n token = getState().auth.token;\n _context.p = 1;\n _context.n = 2;\n return fetchFromAPI("/contracts/".concat(id), token);\n case 2:\n contract = _context.v;\n dispatch(fetchContractSuccess(contract));\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n dispatch(fetchContractFailure(_t));\n case 4:\n return _context.a(2);\n }\n }, _callee, null, [[1, 3]]);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }();\n};\n\n// Async Action Creator (Thunk)\nvar signContract = function signContract(id) {\n return /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(dispatch, getState) {\n var token, contract, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n dispatch(signContractRequest());\n token = getState().auth.token;\n _context2.p = 1;\n _context2.n = 2;\n return patchAPI("/settings/compliance", {\n isCompliant: true\n }, token);\n case 2:\n contract = _context2.v;\n dispatch(signContractSuccess(contract));\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t2 = _context2.v;\n dispatch(signContractFailure(_t2));\n case 4:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3]]);\n }));\n return function (_x3, _x4) {\n return _ref2.apply(this, arguments);\n };\n }();\n};\nvar getContracts = function getContracts() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(dispatch, getState) {\n var state, token, response, error, result, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n dispatch(getContractsRequest());\n state = getState();\n token = state.auth.token;\n _context3.p = 1;\n _context3.n = 2;\n return fetch(\'/contracts\', {\n method: \'GET\',\n headers: {\n \'Authorization\': "Bearer ".concat(token),\n \'Content-Type\': \'application/json\'\n }\n });\n case 2:\n response = _context3.v;\n if (response.ok) {\n _context3.n = 4;\n break;\n }\n _context3.n = 3;\n return response.json();\n case 3:\n error = _context3.v;\n throw new Error(error.contract);\n case 4:\n _context3.n = 5;\n return response.json();\n case 5:\n result = _context3.v;\n dispatch(getContractsSuccess(result));\n _context3.n = 7;\n break;\n case 6:\n _context3.p = 6;\n _t3 = _context3.v;\n dispatch(getContractsFailure(_t3.contract));\n case 7:\n return _context3.a(2);\n }\n }, _callee3, null, [[1, 6]]);\n }));\n return function (_x5, _x6) {\n return _ref3.apply(this, arguments);\n };\n }();\n};\nvar fetchContracts = getContracts;\nmodule.exports = {\n fetchContracts: fetchContracts,\n fetchContract: fetchContract,\n signContract: signContract,\n getContracts: getContracts,\n FETCH_CONTRACT_REQUEST: FETCH_CONTRACT_REQUEST,\n FETCH_CONTRACT_SUCCESS: FETCH_CONTRACT_SUCCESS,\n FETCH_CONTRACT_FAILURE: FETCH_CONTRACT_FAILURE,\n GET_CONTRACTS_REQUEST: GET_CONTRACTS_REQUEST,\n GET_CONTRACTS_SUCCESS: GET_CONTRACTS_SUCCESS,\n GET_CONTRACTS_FAILURE: GET_CONTRACTS_FAILURE,\n SIGN_CONTRACT_REQUEST: SIGN_CONTRACT_REQUEST,\n SIGN_CONTRACT_SUCCESS: SIGN_CONTRACT_SUCCESS,\n SIGN_CONTRACT_FAILURE: SIGN_CONTRACT_FAILURE\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QjtFQUNyQkMscUJBQXFCLEVBQXJCQSxxQkFBcUI7RUFDckJDLHFCQUFxQixFQUFyQkE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9hY3Rpb25zL2NvbnRyYWN0QWN0aW9ucy5qcz9kNThiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gRGVwZW5kZW5jaWVzXG5jb25zdCBmZXRjaCA9IHJlcXVpcmUoJ2Nyb3NzLWZldGNoJyk7XG5cbi8vIEFQSSBBY3Rpb25zXG5jb25zdCB7XG4gIGZldGNoRnJvbUFQSSxcbiAgcGF0Y2hBUElcbn0gPSByZXF1aXJlKCcuL2FwaUFjdGlvbnMnKTtcblxuLy8gQWN0aW9uIFR5cGVzXG5jb25zdCBGRVRDSF9DT05UUkFDVF9SRVFVRVNUID0gJ0ZFVENIX0NPTlRSQUNUX1JFUVVFU1QnO1xuY29uc3QgRkVUQ0hfQ09OVFJBQ1RfU1VDQ0VTUyA9ICdGRVRDSF9DT05UUkFDVF9TVUNDRVNTJztcbmNvbnN0IEZFVENIX0NPTlRSQUNUX0ZBSUxVUkUgPSAnRkVUQ0hfQ09OVFJBQ1RfRkFJTFVSRSc7XG5jb25zdCBTSUdOX0NPTlRSQUNUX1JFUVVFU1QgPSAnU0lHTl9DT05UUkFDVF9SRVFVRVNUJztcbmNvbnN0IFNJR05fQ09OVFJBQ1RfU1VDQ0VTUyA9ICdTSUdOX0NPTlRSQUNUX1NVQ0NFU1MnO1xuY29uc3QgU0lHTl9DT05UUkFDVF9GQUlMVVJFID0gJ1NJR05fQ09OVFJBQ1RfRkFJTFVSRSc7XG5jb25zdCBHRVRfQ09OVFJBQ1RTX1JFUVVFU1QgPSAnR0VUX0NPTlRSQUNUU19SRVFVRVNUJztcbmNvbnN0IEdFVF9DT05UUkFDVFNfU1VDQ0VTUyA9ICdHRVRfQ09OVFJBQ1RTX1NVQ0NFU1MnO1xuY29uc3QgR0VUX0NPTlRSQUNUU19GQUlMVVJFID0gJ0dFVF9DT05UUkFDVFNfRkFJTFVSRSc7XG5cbi8vIFN5bmMgQWN0aW9uIENyZWF0b3JzXG5jb25zdCBmZXRjaENvbnRyYWN0UmVxdWVzdCA9ICgpID0+ICh7IHR5cGU6IEZFVENIX0NPTlRSQUNUX1JFUVVFU1QgfSk7XG5jb25zdCBmZXRjaENvbnRyYWN0U3VjY2VzcyA9IChjb250cmFjdCkgPT4gKHsgdHlwZTogRkVUQ0hfQ09OVFJBQ1RfU1VDQ0VTUywgcGF5bG9hZDogY29udHJhY3QgfSk7XG5jb25zdCBmZXRjaENvbnRyYWN0RmFpbHVyZSA9IChlcnJvcikgPT4gKHsgdHlwZTogRkVUQ0hfQ09OVFJBQ1RfRkFJTFVSRSwgcGF5bG9hZDogZXJyb3IgfSk7XG5jb25zdCBnZXRDb250cmFjdHNSZXF1ZXN0ID0gKCkgPT4gKHsgdHlwZTogR0VUX0NPTlRSQUNUU19SRVFVRVNULCBpc1NlbmRpbmc6IHRydWUgfSk7XG5jb25zdCBnZXRDb250cmFjdHNTdWNjZXNzID0gKGNvbnRyYWN0cykgPT4gKHsgdHlwZTogR0VUX0NPTlRSQUNUU19TVUNDRVNTLCBwYXlsb2FkOiB7IGNvbnRyYWN0cyB9LCBpc1NlbmRpbmc6IGZhbHNlIH0pO1xuY29uc3QgZ2V0Q29udHJhY3RzRmFpbHVyZSA9IChlcnJvcikgPT4gKHsgdHlwZTogR0VUX0NPTlRSQUNUU19GQUlMVVJFLCBwYXlsb2FkOiBlcnJvciwgZXJyb3I6IGVycm9yLCBpc1NlbmRpbmc6IGZhbHNlIH0pO1xuY29uc3Qgc2lnbkNvbnRyYWN0UmVxdWVzdCA9ICgpID0+ICh7IHR5cGU6IFNJR05fQ09OVFJBQ1RfUkVRVUVTVCB9KTtcbmNvbnN0IHNpZ25Db250cmFjdFN1Y2Nlc3MgPSAoY29udHJhY3QpID0+ICh7IHR5cGU6IFNJR05fQ09OVFJBQ1RfU1VDQ0VTUywgcGF5bG9hZDogY29udHJhY3QsIGlzQ29tcGxpYW50OiB0cnVlIH0pO1xuY29uc3Qgc2lnbkNvbnRyYWN0RmFpbHVyZSA9IChlcnJvcikgPT4gKHsgdHlwZTogU0lHTl9DT05UUkFDVF9GQUlMVVJFLCBwYXlsb2FkOiBlcnJvciB9KTtcblxuLy8gQXN5bmMgQWN0aW9uIENyZWF0b3IgKFRodW5rKVxuY29uc3QgZmV0Y2hDb250cmFjdCA9IChpZCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGRpc3BhdGNoKGZldGNoQ29udHJhY3RSZXF1ZXN0KCkpO1xuXG4gICAgY29uc3QgeyB0b2tlbiB9ID0gZ2V0U3RhdGUoKS5hdXRoO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRyYWN0ID0gYXdhaXQgZmV0Y2hGcm9tQVBJKGAvY29udHJhY3RzLyR7aWR9YCwgdG9rZW4pO1xuXG4gICAgICBkaXNwYXRjaChmZXRjaENvbnRyYWN0U3VjY2Vzcyhjb250cmFjdCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkaXNwYXRjaChmZXRjaENvbnRyYWN0RmFpbHVyZShlcnJvcikpO1xuICAgIH1cbiAgfTtcbn07XG5cbi8vIEFzeW5jIEFjdGlvbiBDcmVhdG9yIChUaHVuaylcbmNvbnN0IHNpZ25Db250cmFjdCA9IChpZCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGRpc3BhdGNoKHNpZ25Db250cmFjdFJlcXVlc3QoKSk7XG4gICAgY29uc3QgeyB0b2tlbiB9ID0gZ2V0U3RhdGUoKS5hdXRoO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRyYWN0ID0gYXdhaXQgcGF0Y2hBUEkoYC9zZXR0aW5ncy9jb21wbGlhbmNlYCwge1xuICAgICAgICBpc0NvbXBsaWFudDogdHJ1ZVxuICAgICAgfSwgdG9rZW4pO1xuICAgICAgZGlzcGF0Y2goc2lnbkNvbnRyYWN0U3VjY2Vzcyhjb250cmFjdCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkaXNwYXRjaChzaWduQ29udHJhY3RGYWlsdXJlKGVycm9yKSk7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgZ2V0Q29udHJhY3RzID0gKHBhcmFtcyA9IHt9KSA9PiB7XG4gIHJldHVybiBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgZGlzcGF0Y2goZ2V0Q29udHJhY3RzUmVxdWVzdCgpKTtcblxuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBjb25zdCB0b2tlbiA9IHN0YXRlLmF1dGgudG9rZW47XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2NvbnRyYWN0cycsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5jb250cmFjdCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgZGlzcGF0Y2goZ2V0Q29udHJhY3RzU3VjY2VzcyhyZXN1bHQpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZGlzcGF0Y2goZ2V0Q29udHJhY3RzRmFpbHVyZShlcnJvci5jb250cmFjdCkpO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGZldGNoQ29udHJhY3RzID0gZ2V0Q29udHJhY3RzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmV0Y2hDb250cmFjdHMsXG4gIGZldGNoQ29udHJhY3QsXG4gIHNpZ25Db250cmFjdCxcbiAgZ2V0Q29udHJhY3RzLFxuICBGRVRDSF9DT05UUkFDVF9SRVFVRVNULFxuICBGRVRDSF9DT05UUkFDVF9TVUNDRVNTLFxuICBGRVRDSF9DT05UUkFDVF9GQUlMVVJFLFxuICBHRVRfQ09OVFJBQ1RTX1JFUVVFU1QsXG4gIEdFVF9DT05UUkFDVFNfU1VDQ0VTUyxcbiAgR0VUX0NPTlRSQUNUU19GQUlMVVJFLFxuICBTSUdOX0NPTlRSQUNUX1JFUVVFU1QsXG4gIFNJR05fQ09OVFJBQ1RfU1VDQ0VTUyxcbiAgU0lHTl9DT05UUkFDVF9GQUlMVVJFXG59O1xuIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIlN5bWJvbCIsIm4iLCJpdGVyYXRvciIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiZmV0Y2giLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJmZXRjaEZyb21BUEkiLCJwYXRjaEFQSSIsIkZFVENIX0NPTlRSQUNUX1JFUVVFU1QiLCJGRVRDSF9DT05UUkFDVF9TVUNDRVNTIiwiRkVUQ0hfQ09OVFJBQ1RfRkFJTFVSRSIsIlNJR05fQ09OVFJBQ1RfUkVRVUVTVCIsIlNJR05fQ09OVFJBQ1RfU1VDQ0VTUyIsIlNJR05fQ09OVFJBQ1RfRkFJTFVSRSIsIkdFVF9DT05UUkFDVFNfUkVRVUVTVCIsIkdFVF9DT05UUkFDVFNfU1VDQ0VTUyIsIkdFVF9DT05UUkFDVFNfRkFJTFVSRSIsImZldGNoQ29udHJhY3RSZXF1ZXN0IiwidHlwZSIsImZldGNoQ29udHJhY3RTdWNjZXNzIiwiY29udHJhY3QiLCJwYXlsb2FkIiwiZmV0Y2hDb250cmFjdEZhaWx1cmUiLCJlcnJvciIsImdldENvbnRyYWN0c1JlcXVlc3QiLCJpc1NlbmRpbmciLCJnZXRDb250cmFjdHNTdWNjZXNzIiwiY29udHJhY3RzIiwiZ2V0Q29udHJhY3RzRmFpbHVyZSIsInNpZ25Db250cmFjdFJlcXVlc3QiLCJzaWduQ29udHJhY3RTdWNjZXNzIiwiaXNDb21wbGlhbnQiLCJzaWduQ29udHJhY3RGYWlsdXJlIiwiZmV0Y2hDb250cmFjdCIsImlkIiwiX3JlZiIsIl9jYWxsZWUiLCJkaXNwYXRjaCIsImdldFN0YXRlIiwidG9rZW4iLCJfdCIsIl9jb250ZXh0IiwiYXV0aCIsImNvbmNhdCIsIl94IiwiX3gyIiwic2lnbkNvbnRyYWN0IiwiX3JlZjIiLCJfY2FsbGVlMiIsIl90MiIsIl9jb250ZXh0MiIsIl94MyIsIl94NCIsImdldENvbnRyYWN0cyIsInBhcmFtcyIsInVuZGVmaW5lZCIsIl9yZWYzIiwiX2NhbGxlZTMiLCJzdGF0ZSIsInJlc3BvbnNlIiwicmVzdWx0IiwiX3QzIiwiX2NvbnRleHQzIiwibWV0aG9kIiwiaGVhZGVycyIsIm9rIiwianNvbiIsIkVycm9yIiwiX3g1IiwiX3g2IiwiZmV0Y2hDb250cmFjdHMiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./actions/contractActions.js\n\n}')},"./actions/documentActions.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nvar _require = __webpack_require__(/*! ./apiActions */ \"./actions/apiActions.js\"),\n assertClientFetchPath = _require.assertClientFetchPath,\n fetchFromAPI = _require.fetchFromAPI;\nvar createTimeoutPromise = __webpack_require__(/*! ../functions/createTimeoutPromise */ \"./functions/createTimeoutPromise.js\");\nvar _require2 = __webpack_require__(/*! ../functions/fabricSafeLog */ \"./functions/fabricSafeLog.js\"),\n safeIdentityErr = _require2.safeIdentityErr;\nfunction fetchDocumentsFromAPI(_x) {\n return _fetchDocumentsFromAPI.apply(this, arguments);\n} // Action types\nfunction _fetchDocumentsFromAPI() {\n _fetchDocumentsFromAPI = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(token) {\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.n) {\n case 0:\n return _context8.a(2, fetchFromAPI('/documents', token));\n }\n }, _callee8);\n }));\n return _fetchDocumentsFromAPI.apply(this, arguments);\n}\nvar FETCH_DOCUMENTS_REQUEST = 'FETCH_DOCUMENTS_REQUEST';\nvar FETCH_DOCUMENTS_SUCCESS = 'FETCH_DOCUMENTS_SUCCESS';\nvar FETCH_DOCUMENTS_FAILURE = 'FETCH_DOCUMENTS_FAILURE';\nvar FETCH_DOCUMENT_REQUEST = 'FETCH_DOCUMENT_REQUEST';\nvar FETCH_DOCUMENT_SUCCESS = 'FETCH_DOCUMENT_SUCCESS';\nvar FETCH_DOCUMENT_FAILURE = 'FETCH_DOCUMENT_FAILURE';\nvar UPLOAD_DOCUMENT_REQUEST = 'UPLOAD_DOCUMENT_REQUEST';\nvar UPLOAD_DOCUMENT_SUCCESS = 'UPLOAD_DOCUMENT_SUCCESS';\nvar UPLOAD_DOCUMENT_FAILURE = 'UPLOAD_DOCUMENT_FAILURE';\nvar SEARCH_DOCUMENT_REQUEST = 'SEARCH_DOCUMENT_REQUEST';\nvar SEARCH_DOCUMENT_SUCCESS = 'SEARCH_DOCUMENT_SUCCESS';\nvar SEARCH_DOCUMENT_FAILURE = 'SEARCH_DOCUMENT_FAILURE';\nvar CREATE_DOCUMENT_REQUEST = 'CREATE_DOCUMENT_REQUEST';\nvar CREATE_DOCUMENT_SUCCESS = 'CREATE_DOCUMENT_SUCCESS';\nvar CREATE_DOCUMENT_FAILURE = 'CREATE_DOCUMENT_FAILURE';\nvar EDIT_DOCUMENT_REQUEST = 'EDIT_DOCUMENT_REQUEST';\nvar EDIT_DOCUMENT_SUCCESS = 'EDIT_DOCUMENT_SUCCESS';\nvar EDIT_DOCUMENT_FAILURE = 'EDIT_DOCUMENT_FAILURE';\nvar DELETE_DOCUMENT_REQUEST = 'DELETE_DOCUMENT_REQUEST';\nvar DELETE_DOCUMENT_SUCCESS = 'DELETE_DOCUMENT_SUCCESS';\nvar DELETE_DOCUMENT_FAILURE = 'DELETE_DOCUMENT_FAILURE';\n\n// Action creators\nvar fetchDocumentsRequest = function fetchDocumentsRequest() {\n return {\n type: FETCH_DOCUMENTS_REQUEST\n };\n};\nvar fetchDocumentsSuccess = function fetchDocumentsSuccess(documents) {\n return {\n type: FETCH_DOCUMENTS_SUCCESS,\n payload: documents\n };\n};\nvar fetchDocumentsFailure = function fetchDocumentsFailure(error) {\n return {\n type: FETCH_DOCUMENTS_FAILURE,\n payload: error\n };\n};\nvar fetchDocumentRequest = function fetchDocumentRequest() {\n return {\n type: FETCH_DOCUMENT_REQUEST\n };\n};\nvar fetchDocumentSuccess = function fetchDocumentSuccess(instance) {\n return {\n type: FETCH_DOCUMENT_SUCCESS,\n payload: instance\n };\n};\nvar fetchDocumentFailure = function fetchDocumentFailure(error) {\n return {\n type: FETCH_DOCUMENT_FAILURE,\n payload: error\n };\n};\nvar uploadDocumentRequest = function uploadDocumentRequest() {\n return {\n type: UPLOAD_DOCUMENT_REQUEST\n };\n};\nvar uploadDocumentSuccess = function uploadDocumentSuccess(fabric_id) {\n return {\n type: UPLOAD_DOCUMENT_SUCCESS,\n payload: fabric_id\n };\n};\nvar uploadDocumentFailure = function uploadDocumentFailure(error) {\n return {\n type: UPLOAD_DOCUMENT_FAILURE,\n payload: error\n };\n};\nvar searchDocumentRequest = function searchDocumentRequest() {\n return {\n type: SEARCH_DOCUMENT_REQUEST\n };\n};\nvar searchDocumentSuccess = function searchDocumentSuccess(results) {\n return {\n type: SEARCH_DOCUMENT_SUCCESS,\n payload: results\n };\n};\nvar searchDocumentFailure = function searchDocumentFailure(error) {\n return {\n type: SEARCH_DOCUMENT_FAILURE,\n payload: error\n };\n};\nvar createDocumentRequest = function createDocumentRequest() {\n return {\n type: CREATE_DOCUMENT_REQUEST\n };\n};\nvar createDocumentSuccess = function createDocumentSuccess(results) {\n return {\n type: CREATE_DOCUMENT_SUCCESS,\n payload: results\n };\n};\nvar createDocumentFailure = function createDocumentFailure(error) {\n return {\n type: CREATE_DOCUMENT_FAILURE,\n payload: error\n };\n};\nvar editDocumentRequest = function editDocumentRequest() {\n return {\n type: EDIT_DOCUMENT_REQUEST\n };\n};\nvar editDocumentSuccess = function editDocumentSuccess(document) {\n return {\n type: EDIT_DOCUMENT_SUCCESS,\n payload: document\n };\n};\nvar editDocumentFailure = function editDocumentFailure(error) {\n return {\n type: EDIT_DOCUMENT_FAILURE,\n payload: error\n };\n};\nvar deleteDocumentRequest = function deleteDocumentRequest() {\n return {\n type: DELETE_DOCUMENT_REQUEST\n };\n};\nvar deleteDocumentSuccess = function deleteDocumentSuccess() {\n return {\n type: DELETE_DOCUMENT_SUCCESS\n };\n};\nvar deleteDocumentFailure = function deleteDocumentFailure(error) {\n return {\n type: DELETE_DOCUMENT_FAILURE,\n payload: error\n };\n};\n\n// Thunk action creator\nvar fetchDocuments = function fetchDocuments() {\n return /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(dispatch, getState) {\n var token, documents, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n dispatch(fetchDocumentsRequest());\n token = getState().auth.token;\n _context.p = 1;\n _context.n = 2;\n return fetchDocumentsFromAPI(token);\n case 2:\n documents = _context.v;\n dispatch(fetchDocumentsSuccess(documents));\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n dispatch(fetchDocumentsFailure(_t));\n case 4:\n return _context.a(2);\n }\n }, _callee, null, [[1, 3]]);\n }));\n return function (_x2, _x3) {\n return _ref.apply(this, arguments);\n };\n }();\n};\nvar fetchDocument = function fetchDocument(fabricID) {\n return /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(dispatch, getState) {\n var token, instance, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n dispatch(fetchDocumentRequest());\n token = getState().auth.token;\n _context2.p = 1;\n _context2.n = 2;\n return fetchFromAPI(\"/documents/\".concat(encodeURIComponent(fabricID)), token);\n case 2:\n instance = _context2.v;\n dispatch(fetchDocumentSuccess(instance));\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t2 = _context2.v;\n dispatch(fetchDocumentFailure(_t2));\n case 4:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3]]);\n }));\n return function (_x4, _x5) {\n return _ref2.apply(this, arguments);\n };\n }();\n};\nvar uploadDocument = function uploadDocument(file) {\n return /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(dispatch, getState) {\n var token, timeoutPromise, data, fetchPromise, fileCreation, errorData, fileAnswer, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n dispatch(uploadDocumentRequest());\n _context3.p = 1;\n token = getState().auth.token;\n timeoutPromise = createTimeoutPromise(1200000, 'File upload could not be completed due to a timeout error. Please check your network connection and try again. For ongoing issues, contact our support team at support@novo.com.');\n data = new FormData();\n data.append('name', file.name);\n data.append('file', file);\n fetchPromise = fetch(assertClientFetchPath('/files'), {\n headers: {\n 'Authorization': \"Bearer \".concat(token)\n },\n method: 'POST',\n body: data\n });\n _context3.n = 2;\n return Promise.race([timeoutPromise, fetchPromise]);\n case 2:\n fileCreation = _context3.v;\n if (fileCreation.ok) {\n _context3.n = 4;\n break;\n }\n _context3.n = 3;\n return fileCreation.json();\n case 3:\n errorData = _context3.v;\n throw new Error(errorData.message || 'Server error');\n case 4:\n _context3.n = 5;\n return fileCreation.json();\n case 5:\n fileAnswer = _context3.v;\n dispatch(uploadDocumentSuccess(fileAnswer.fabric_id));\n _context3.n = 7;\n break;\n case 6:\n _context3.p = 6;\n _t3 = _context3.v;\n dispatch(uploadDocumentFailure(_t3.message));\n case 7:\n return _context3.a(2);\n }\n }, _callee3, null, [[1, 6]]);\n }));\n return function (_x6, _x7) {\n return _ref3.apply(this, arguments);\n };\n }();\n};\nvar searchDocument = function searchDocument(query) {\n return /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(dispatch, getState) {\n var token, response, obj, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n dispatch(searchDocumentRequest());\n token = getState().auth.token;\n _context4.p = 1;\n _context4.n = 2;\n return fetch(assertClientFetchPath('/documents'), {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n method: 'SEARCH',\n body: JSON.stringify({\n query: query\n })\n });\n case 2:\n response = _context4.v;\n _context4.n = 3;\n return response.json();\n case 3:\n obj = _context4.v;\n console.debug('fetch result: ', obj);\n dispatch(searchDocumentSuccess(obj.content));\n _context4.n = 5;\n break;\n case 4:\n _context4.p = 4;\n _t4 = _context4.v;\n console.error('Error fetching data:', safeIdentityErr(_t4));\n dispatch(searchDocumentFailure(_t4.message));\n case 5:\n return _context4.a(2);\n }\n }, _callee4, null, [[1, 4]]);\n }));\n return function (_x8, _x9) {\n return _ref4.apply(this, arguments);\n };\n }();\n};\nvar createDocument = function createDocument(type, query) {\n return /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(dispatch, getState) {\n var token, response, errorData, obj, _t5;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.p = _context5.n) {\n case 0:\n dispatch(createDocumentRequest());\n token = getState().auth.token;\n _context5.p = 1;\n _context5.n = 2;\n return fetch(assertClientFetchPath('/documents'), {\n headers: {\n Authorization: \"Bearer \".concat(token),\n 'Content-Type': 'application/json'\n },\n method: 'POST',\n body: JSON.stringify({\n type: type,\n query: query\n })\n });\n case 2:\n response = _context5.v;\n if (response.ok) {\n _context5.n = 4;\n break;\n }\n _context5.n = 3;\n return response.json();\n case 3:\n errorData = _context5.v;\n throw new Error(errorData.message || 'Server error');\n case 4:\n _context5.n = 5;\n return response.json();\n case 5:\n obj = _context5.v;\n dispatch(createDocumentSuccess(obj));\n _context5.n = 7;\n break;\n case 6:\n _context5.p = 6;\n _t5 = _context5.v;\n dispatch(createDocumentFailure(_t5.message));\n case 7:\n return _context5.a(2);\n }\n }, _callee5, null, [[1, 6]]);\n }));\n return function (_x0, _x1) {\n return _ref5.apply(this, arguments);\n };\n }();\n};\nvar editDocument = function editDocument(fabricID, title) {\n return /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(dispatch, getState) {\n var token, response, errorData, document, _t6;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.p = _context6.n) {\n case 0:\n dispatch(editDocumentRequest());\n token = getState().auth.token;\n _context6.p = 1;\n _context6.n = 2;\n return fetch(assertClientFetchPath(\"/documents/\".concat(encodeURIComponent(fabricID))), {\n headers: {\n Authorization: \"Bearer \".concat(token),\n 'Content-Type': 'application/json'\n },\n method: 'PATCH',\n body: JSON.stringify({\n title: title\n })\n });\n case 2:\n response = _context6.v;\n if (response.ok) {\n _context6.n = 4;\n break;\n }\n _context6.n = 3;\n return response.json()[\"catch\"](function () {\n return {};\n });\n case 3:\n errorData = _context6.v;\n throw new Error(errorData.message || \"Server error (\".concat(response.status, \")\"));\n case 4:\n _context6.n = 5;\n return response.json();\n case 5:\n document = _context6.v;\n dispatch(editDocumentSuccess(document));\n _context6.n = 7;\n break;\n case 6:\n _context6.p = 6;\n _t6 = _context6.v;\n console.error('Error fetching data:', safeIdentityErr(_t6));\n dispatch(editDocumentFailure(_t6.message));\n case 7:\n return _context6.a(2);\n }\n }, _callee6, null, [[1, 6]]);\n }));\n return function (_x10, _x11) {\n return _ref6.apply(this, arguments);\n };\n }();\n};\nvar deleteDocument = function deleteDocument(fabricID) {\n return /*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(dispatch, getState) {\n var token, response, error, _t7;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.p = _context7.n) {\n case 0:\n dispatch(deleteDocumentRequest());\n token = getState().auth.token;\n _context7.p = 1;\n _context7.n = 2;\n return fetch(assertClientFetchPath(\"/documents/delete/\".concat(encodeURIComponent(fabricID))), {\n headers: {\n Authorization: \"Bearer \".concat(token),\n 'Content-Type': 'application/json'\n },\n method: 'PATCH',\n body: JSON.stringify({\n fabricID: fabricID\n })\n });\n case 2:\n response = _context7.v;\n if (response.ok) {\n _context7.n = 4;\n break;\n }\n _context7.n = 3;\n return response.json();\n case 3:\n error = _context7.v;\n throw new Error(error.message);\n case 4:\n dispatch(deleteDocumentSuccess());\n _context7.n = 6;\n break;\n case 5:\n _context7.p = 5;\n _t7 = _context7.v;\n console.error('Error fetching data:', safeIdentityErr(_t7));\n dispatch(deleteDocumentFailure(_t7.message));\n case 6:\n return _context7.a(2);\n }\n }, _callee7, null, [[1, 5]]);\n }));\n return function (_x12, _x13) {\n return _ref7.apply(this, arguments);\n };\n }();\n};\nmodule.exports = {\n fetchDocument: fetchDocument,\n fetchDocuments: fetchDocuments,\n uploadDocument: uploadDocument,\n searchDocument: searchDocument,\n createDocument: createDocument,\n editDocument: editDocument,\n deleteDocument: deleteDocument,\n FETCH_DOCUMENT_REQUEST: FETCH_DOCUMENT_REQUEST,\n FETCH_DOCUMENT_SUCCESS: FETCH_DOCUMENT_SUCCESS,\n FETCH_DOCUMENT_FAILURE: FETCH_DOCUMENT_FAILURE,\n FETCH_DOCUMENTS_REQUEST: FETCH_DOCUMENTS_REQUEST,\n FETCH_DOCUMENTS_SUCCESS: FETCH_DOCUMENTS_SUCCESS,\n FETCH_DOCUMENTS_FAILURE: FETCH_DOCUMENTS_FAILURE,\n UPLOAD_DOCUMENT_REQUEST: UPLOAD_DOCUMENT_REQUEST,\n UPLOAD_DOCUMENT_SUCCESS: UPLOAD_DOCUMENT_SUCCESS,\n UPLOAD_DOCUMENT_FAILURE: UPLOAD_DOCUMENT_FAILURE,\n SEARCH_DOCUMENT_REQUEST: SEARCH_DOCUMENT_REQUEST,\n SEARCH_DOCUMENT_SUCCESS: SEARCH_DOCUMENT_SUCCESS,\n SEARCH_DOCUMENT_FAILURE: SEARCH_DOCUMENT_FAILURE,\n CREATE_DOCUMENT_REQUEST: CREATE_DOCUMENT_REQUEST,\n CREATE_DOCUMENT_SUCCESS: CREATE_DOCUMENT_SUCCESS,\n CREATE_DOCUMENT_FAILURE: CREATE_DOCUMENT_FAILURE,\n EDIT_DOCUMENT_REQUEST: EDIT_DOCUMENT_REQUEST,\n EDIT_DOCUMENT_SUCCESS: EDIT_DOCUMENT_SUCCESS,\n EDIT_DOCUMENT_FAILURE: EDIT_DOCUMENT_FAILURE,\n DELETE_DOCUMENT_REQUEST: DELETE_DOCUMENT_REQUEST,\n DELETE_DOCUMENT_SUCCESS: DELETE_DOCUMENT_SUCCESS,\n DELETE_DOCUMENT_FAILURE: DELETE_DOCUMENT_FAILURE\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hY3Rpb25zL2RvY3VtZW50QWN0aW9ucy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFBQSxTQUFBQSxhQUFBLElBQ2IsdUtBQUFDLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxXQUFBLDhCQUFBQyxFQUFBTixDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLFFBQUFDLENBQUEsR0FBQUwsQ0FBQSxJQUFBQSxDQUFBLENBQUFNLFNBQUEsWUFBQUMsU0FBQSxHQUFBUCxDQUFBLEdBQUFPLFNBQUEsRUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLE1BQUEsQ0FBQUwsQ0FBQSxDQUFBQyxTQUFBLFVBQUFLLG1CQUFBLENBQUFILENBQUEsdUJBQUFWLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLFFBQUFFLENBQUEsRUFBQUMsQ0FBQSxFQUFBRyxDQUFBLEVBQUFJLENBQUEsTUFBQUMsQ0FBQSxHQUFBWCxDQUFBLFFBQUFZLENBQUEsT0FBQUMsQ0FBQSxLQUFBRixDQUFBLEtBQUFiLENBQUEsS0FBQWdCLENBQUEsRUFBQXBCLENBQUEsRUFBQXFCLENBQUEsRUFBQUMsQ0FBQSxFQUFBTixDQUFBLEVBQUFNLENBQUEsQ0FBQUMsSUFBQSxDQUFBdkIsQ0FBQSxNQUFBc0IsQ0FBQSxXQUFBQSxFQUFBckIsQ0FBQSxFQUFBQyxDQUFBLFdBQUFNLENBQUEsR0FBQVAsQ0FBQSxFQUFBUSxDQUFBLE1BQUFHLENBQUEsR0FBQVosQ0FBQSxFQUFBbUIsQ0FBQSxDQUFBZixDQUFBLEdBQUFGLENBQUEsRUFBQW1CLENBQUEsZ0JBQUFDLEVBQUFwQixDQUFBLEVBQUFFLENBQUEsU0FBQUssQ0FBQSxHQUFBUCxDQUFBLEVBQUFVLENBQUEsR0FBQVIsQ0FBQSxFQUFBSCxDQUFBLE9BQUFpQixDQUFBLElBQUFGLENBQUEsS0FBQVYsQ0FBQSxJQUFBTCxDQUFBLEdBQUFnQixDQUFBLENBQUFPLE1BQUEsRUFBQXZCLENBQUEsVUFBQUssQ0FBQSxFQUFBRSxDQUFBLEdBQUFTLENBQUEsQ0FBQWhCLENBQUEsR0FBQXFCLENBQUEsR0FBQUgsQ0FBQSxDQUFBRixDQUFBLEVBQUFRLENBQUEsR0FBQWpCLENBQUEsS0FBQU4sQ0FBQSxRQUFBSSxDQUFBLEdBQUFtQixDQUFBLEtBQUFyQixDQUFBLE1BQUFRLENBQUEsR0FBQUosQ0FBQSxFQUFBQyxDQUFBLEdBQUFELENBQUEsWUFBQUMsQ0FBQSxXQUFBRCxDQUFBLE1BQUFBLENBQUEsTUFBQVIsQ0FBQSxJQUFBUSxDQUFBLE9BQUFjLENBQUEsTUFBQWhCLENBQUEsR0FBQUosQ0FBQSxRQUFBb0IsQ0FBQSxHQUFBZCxDQUFBLFFBQUFDLENBQUEsTUFBQVUsQ0FBQSxDQUFBQyxDQUFBLEdBQUFoQixDQUFBLEVBQUFlLENBQUEsQ0FBQWYsQ0FBQSxHQUFBSSxDQUFBLE9BQUFjLENBQUEsR0FBQUcsQ0FBQSxLQUFBbkIsQ0FBQSxHQUFBSixDQUFBLFFBQUFNLENBQUEsTUFBQUosQ0FBQSxJQUFBQSxDQUFBLEdBQUFxQixDQUFBLE1BQUFqQixDQUFBLE1BQUFOLENBQUEsRUFBQU0sQ0FBQSxNQUFBSixDQUFBLEVBQUFlLENBQUEsQ0FBQWYsQ0FBQSxHQUFBcUIsQ0FBQSxFQUFBaEIsQ0FBQSxjQUFBSCxDQUFBLElBQUFKLENBQUEsYUFBQW1CLENBQUEsUUFBQUgsQ0FBQSxPQUFBZCxDQUFBLHFCQUFBRSxDQUFBLEVBQUFXLENBQUEsRUFBQVEsQ0FBQSxRQUFBVCxDQUFBLFlBQUFVLFNBQUEsdUNBQUFSLENBQUEsVUFBQUQsQ0FBQSxJQUFBSyxDQUFBLENBQUFMLENBQUEsRUFBQVEsQ0FBQSxHQUFBaEIsQ0FBQSxHQUFBUSxDQUFBLEVBQUFMLENBQUEsR0FBQWEsQ0FBQSxHQUFBeEIsQ0FBQSxHQUFBUSxDQUFBLE9BQUFULENBQUEsR0FBQVksQ0FBQSxNQUFBTSxDQUFBLEtBQUFWLENBQUEsS0FBQUMsQ0FBQSxHQUFBQSxDQUFBLFFBQUFBLENBQUEsU0FBQVUsQ0FBQSxDQUFBZixDQUFBLFFBQUFrQixDQUFBLENBQUFiLENBQUEsRUFBQUcsQ0FBQSxLQUFBTyxDQUFBLENBQUFmLENBQUEsR0FBQVEsQ0FBQSxHQUFBTyxDQUFBLENBQUFDLENBQUEsR0FBQVIsQ0FBQSxhQUFBSSxDQUFBLE1BQUFSLENBQUEsUUFBQUMsQ0FBQSxLQUFBSCxDQUFBLFlBQUFMLENBQUEsR0FBQU8sQ0FBQSxDQUFBRixDQUFBLFdBQUFMLENBQUEsR0FBQUEsQ0FBQSxDQUFBMEIsSUFBQSxDQUFBbkIsQ0FBQSxFQUFBSSxDQUFBLFVBQUFjLFNBQUEsMkNBQUF6QixDQUFBLENBQUEyQixJQUFBLFNBQUEzQixDQUFBLEVBQUFXLENBQUEsR0FBQVgsQ0FBQSxDQUFBNEIsS0FBQSxFQUFBcEIsQ0FBQSxTQUFBQSxDQUFBLG9CQUFBQSxDQUFBLEtBQUFSLENBQUEsR0FBQU8sQ0FBQSxlQUFBUCxDQUFBLENBQUEwQixJQUFBLENBQUFuQixDQUFBLEdBQUFDLENBQUEsU0FBQUcsQ0FBQSxHQUFBYyxTQUFBLHVDQUFBcEIsQ0FBQSxnQkFBQUcsQ0FBQSxPQUFBRCxDQUFBLEdBQUFSLENBQUEsY0FBQUMsQ0FBQSxJQUFBaUIsQ0FBQSxHQUFBQyxDQUFBLENBQUFmLENBQUEsUUFBQVEsQ0FBQSxHQUFBVixDQUFBLENBQUF5QixJQUFBLENBQUF2QixDQUFBLEVBQUFlLENBQUEsT0FBQUUsQ0FBQSxrQkFBQXBCLENBQUEsSUFBQU8sQ0FBQSxHQUFBUixDQUFBLEVBQUFTLENBQUEsTUFBQUcsQ0FBQSxHQUFBWCxDQUFBLGNBQUFlLENBQUEsbUJBQUFhLEtBQUEsRUFBQTVCLENBQUEsRUFBQTJCLElBQUEsRUFBQVYsQ0FBQSxTQUFBaEIsQ0FBQSxFQUFBSSxDQUFBLEVBQUFFLENBQUEsUUFBQUksQ0FBQSxRQUFBUyxDQUFBLGdCQUFBVixVQUFBLGNBQUFtQixrQkFBQSxjQUFBQywyQkFBQSxLQUFBOUIsQ0FBQSxHQUFBWSxNQUFBLENBQUFtQixjQUFBLE1BQUF2QixDQUFBLE1BQUFMLENBQUEsSUFBQUgsQ0FBQSxDQUFBQSxDQUFBLElBQUFHLENBQUEsU0FBQVcsbUJBQUEsQ0FBQWQsQ0FBQSxPQUFBRyxDQUFBLGlDQUFBSCxDQUFBLEdBQUFXLENBQUEsR0FBQW1CLDBCQUFBLENBQUFyQixTQUFBLEdBQUFDLFNBQUEsQ0FBQUQsU0FBQSxHQUFBRyxNQUFBLENBQUFDLE1BQUEsQ0FBQUwsQ0FBQSxZQUFBTyxFQUFBaEIsQ0FBQSxXQUFBYSxNQUFBLENBQUFvQixjQUFBLEdBQUFwQixNQUFBLENBQUFvQixjQUFBLENBQUFqQyxDQUFBLEVBQUErQiwwQkFBQSxLQUFBL0IsQ0FBQSxDQUFBa0MsU0FBQSxHQUFBSCwwQkFBQSxFQUFBaEIsbUJBQUEsQ0FBQWYsQ0FBQSxFQUFBTSxDQUFBLHlCQUFBTixDQUFBLENBQUFVLFNBQUEsR0FBQUcsTUFBQSxDQUFBQyxNQUFBLENBQUFGLENBQUEsR0FBQVosQ0FBQSxXQUFBOEIsaUJBQUEsQ0FBQXBCLFNBQUEsR0FBQXFCLDBCQUFBLEVBQUFoQixtQkFBQSxDQUFBSCxDQUFBLGlCQUFBbUIsMEJBQUEsR0FBQWhCLG1CQUFBLENBQUFnQiwwQkFBQSxpQkFBQUQsaUJBQUEsR0FBQUEsaUJBQUEsQ0FBQUssV0FBQSx3QkFBQXBCLG1CQUFBLENBQUFnQiwwQkFBQSxFQUFBekIsQ0FBQSx3QkFBQVMsbUJBQUEsQ0FBQUgsQ0FBQSxHQUFBRyxtQkFBQSxDQUFBSCxDQUFBLEVBQUFOLENBQUEsZ0JBQUFTLG1CQUFBLENBQUFILENBQUEsRUFBQVIsQ0FBQSxpQ0FBQVcsbUJBQUEsQ0FBQUgsQ0FBQSw4REFBQWIsWUFBQSxZQUFBQSxhQUFBLGFBQUFxQyxDQUFBLEVBQUE1QixDQUFBLEVBQUE2QixDQUFBLEVBQUFyQixDQUFBO0FBQUEsU0FBQUQsb0JBQUFmLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLEVBQUFILENBQUEsUUFBQU8sQ0FBQSxHQUFBSyxNQUFBLENBQUF5QixjQUFBLFFBQUE5QixDQUFBLHVCQUFBUixDQUFBLElBQUFRLENBQUEsUUFBQU8sbUJBQUEsWUFBQXdCLG1CQUFBdkMsQ0FBQSxFQUFBRSxDQUFBLEVBQUFFLENBQUEsRUFBQUgsQ0FBQSxhQUFBSyxFQUFBSixDQUFBLEVBQUFFLENBQUEsSUFBQVcsbUJBQUEsQ0FBQWYsQ0FBQSxFQUFBRSxDQUFBLFlBQUFGLENBQUEsZ0JBQUF3QyxPQUFBLENBQUF0QyxDQUFBLEVBQUFFLENBQUEsRUFBQUosQ0FBQSxTQUFBRSxDQUFBLEdBQUFNLENBQUEsR0FBQUEsQ0FBQSxDQUFBUixDQUFBLEVBQUFFLENBQUEsSUFBQTJCLEtBQUEsRUFBQXpCLENBQUEsRUFBQXFDLFVBQUEsR0FBQXhDLENBQUEsRUFBQXlDLFlBQUEsR0FBQXpDLENBQUEsRUFBQTBDLFFBQUEsR0FBQTFDLENBQUEsTUFBQUQsQ0FBQSxDQUFBRSxDQUFBLElBQUFFLENBQUEsSUFBQUUsQ0FBQSxhQUFBQSxDQUFBLGNBQUFBLENBQUEsbUJBQUFTLG1CQUFBLENBQUFmLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLEVBQUFILENBQUE7QUFBQSxTQUFBMkMsbUJBQUF4QyxDQUFBLEVBQUFILENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLEVBQUFJLENBQUEsRUFBQWUsQ0FBQSxFQUFBWixDQUFBLGNBQUFELENBQUEsR0FBQUosQ0FBQSxDQUFBaUIsQ0FBQSxFQUFBWixDQUFBLEdBQUFHLENBQUEsR0FBQUosQ0FBQSxDQUFBcUIsS0FBQSxXQUFBekIsQ0FBQSxnQkFBQUosQ0FBQSxDQUFBSSxDQUFBLEtBQUFJLENBQUEsQ0FBQW9CLElBQUEsR0FBQTNCLENBQUEsQ0FBQVcsQ0FBQSxJQUFBaUMsT0FBQSxDQUFBQyxPQUFBLENBQUFsQyxDQUFBLEVBQUFtQyxJQUFBLENBQUE3QyxDQUFBLEVBQUFJLENBQUE7QUFBQSxTQUFBMEMsa0JBQUE1QyxDQUFBLDZCQUFBSCxDQUFBLFNBQUFELENBQUEsR0FBQWlELFNBQUEsYUFBQUosT0FBQSxXQUFBM0MsQ0FBQSxFQUFBSSxDQUFBLFFBQUFlLENBQUEsR0FBQWpCLENBQUEsQ0FBQThDLEtBQUEsQ0FBQWpELENBQUEsRUFBQUQsQ0FBQSxZQUFBbUQsTUFBQS9DLENBQUEsSUFBQXdDLGtCQUFBLENBQUF2QixDQUFBLEVBQUFuQixDQUFBLEVBQUFJLENBQUEsRUFBQTZDLEtBQUEsRUFBQUMsTUFBQSxVQUFBaEQsQ0FBQSxjQUFBZ0QsT0FBQWhELENBQUEsSUFBQXdDLGtCQUFBLENBQUF2QixDQUFBLEVBQUFuQixDQUFBLEVBQUFJLENBQUEsRUFBQTZDLEtBQUEsRUFBQUMsTUFBQSxXQUFBaEQsQ0FBQSxLQUFBK0MsS0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBZ0RDLG1CQUFPLENBQUMsNkNBQWMsQ0FBQztFQUEvREMscUJBQXFCLEdBQUFGLFFBQUEsQ0FBckJFLHFCQUFxQjtFQUFFQyxZQUFZLEdBQUFILFFBQUEsQ0FBWkcsWUFBWTtBQUMzQyxJQUFNQyxvQkFBb0IsR0FBR0gsbUJBQU8sQ0FBQyw4RUFBbUMsQ0FBQztBQUN6RSxJQUFBSSxTQUFBLEdBQTRCSixtQkFBTyxDQUFDLGdFQUE0QixDQUFDO0VBQXpESyxlQUFlLEdBQUFELFNBQUEsQ0FBZkMsZUFBZTtBQUEyQyxTQUduREMscUJBQXFCQSxDQUFBQyxFQUFBO0VBQUEsT0FBQUMsc0JBQUEsQ0FBQVosS0FBQSxPQUFBRCxTQUFBO0FBQUEsRUFJcEM7QUFBQSxTQUFBYSx1QkFBQTtFQUFBQSxzQkFBQSxHQUFBZCxpQkFBQSxjQUFBakQsWUFBQSxHQUFBc0MsQ0FBQSxDQUpBLFNBQUEwQixTQUFzQ0MsS0FBSztJQUFBLE9BQUFqRSxZQUFBLEdBQUFxQyxDQUFBLFdBQUE2QixTQUFBO01BQUEsa0JBQUFBLFNBQUEsQ0FBQTdELENBQUE7UUFBQTtVQUFBLE9BQUE2RCxTQUFBLENBQUE1QyxDQUFBLElBQ2xDbUMsWUFBWSxDQUFDLFlBQVksRUFBRVEsS0FBSyxDQUFDO01BQUE7SUFBQSxHQUFBRCxRQUFBO0VBQUEsQ0FDekM7RUFBQSxPQUFBRCxzQkFBQSxDQUFBWixLQUFBLE9BQUFELFNBQUE7QUFBQTtBQUdELElBQU1pQix1QkFBdUIsR0FBRyx5QkFBeUI7QUFDekQsSUFBTUMsdUJBQXVCLEdBQUcseUJBQXlCO0FBQ3pELElBQU1DLHVCQUF1QixHQUFHLHlCQUF5QjtBQUV6RCxJQUFNQyxzQkFBc0IsR0FBRyx3QkFBd0I7QUFDdkQsSUFBTUMsc0JBQXNCLEdBQUcsd0JBQXdCO0FBQ3ZELElBQU1DLHNCQUFzQixHQUFHLHdCQUF3QjtBQUV2RCxJQUFNQyx1QkFBdUIsR0FBRyx5QkFBeUI7QUFDekQsSUFBTUMsdUJBQXVCLEdBQUcseUJBQXlCO0FBQ3pELElBQU1DLHVCQUF1QixHQUFHLHlCQUF5QjtBQUV6RCxJQUFNQyx1QkFBdUIsR0FBRyx5QkFBeUI7QUFDekQsSUFBTUMsdUJBQXVCLEdBQUcseUJBQXlCO0FBQ3pELElBQU1DLHVCQUF1QixHQUFHLHlCQUF5QjtBQUV6RCxJQUFNQyx1QkFBdUIsR0FBRyx5QkFBeUI7QUFDekQsSUFBTUMsdUJBQXVCLEdBQUcseUJBQXlCO0FBQ3pELElBQU1DLHVCQUF1QixHQUFHLHlCQUF5QjtBQUV6RCxJQUFNQyxxQkFBcUIsR0FBRyx1QkFBdUI7QUFDckQsSUFBTUMscUJBQXFCLEdBQUcsdUJBQXVCO0FBQ3JELElBQU1DLHFCQUFxQixHQUFHLHVCQUF1QjtBQUVyRCxJQUFNQyx1QkFBdUIsR0FBRyx5QkFBeUI7QUFDekQsSUFBTUMsdUJBQXVCLEdBQUcseUJBQXlCO0FBQ3pELElBQU1DLHVCQUF1QixHQUFHLHlCQUF5Qjs7QUFFekQ7QUFDQSxJQUFNQyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFBO0VBQUEsT0FBVTtJQUFFQyxJQUFJLEVBQUV0QjtFQUF3QixDQUFDO0FBQUEsQ0FBQztBQUN2RSxJQUFNdUIscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBSUMsU0FBUztFQUFBLE9BQU07SUFBRUYsSUFBSSxFQUFFckIsdUJBQXVCO0lBQUV3QixPQUFPLEVBQUVEO0VBQVUsQ0FBQztBQUFBLENBQUM7QUFDcEcsSUFBTUUscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBSUMsS0FBSztFQUFBLE9BQU07SUFBRUwsSUFBSSxFQUFFcEIsdUJBQXVCO0lBQUV1QixPQUFPLEVBQUVFO0VBQU0sQ0FBQztBQUFBLENBQUM7QUFFNUYsSUFBTUMsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBQTtFQUFBLE9BQVU7SUFBRU4sSUFBSSxFQUFFbkI7RUFBdUIsQ0FBQztBQUFBLENBQUM7QUFDckUsSUFBTTBCLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUlDLFFBQVE7RUFBQSxPQUFNO0lBQUVSLElBQUksRUFBRWxCLHNCQUFzQjtJQUFFcUIsT0FBTyxFQUFFSztFQUFTLENBQUM7QUFBQSxDQUFDO0FBQ2hHLElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUlKLEtBQUs7RUFBQSxPQUFNO0lBQUVMLElBQUksRUFBRWpCLHNCQUFzQjtJQUFFb0IsT0FBTyxFQUFFRTtFQUFNLENBQUM7QUFBQSxDQUFDO0FBRTFGLElBQU1LLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUE7RUFBQSxPQUFVO0lBQUVWLElBQUksRUFBRWhCO0VBQXdCLENBQUM7QUFBQSxDQUFDO0FBQ3ZFLElBQU0yQixxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJQyxTQUFTO0VBQUEsT0FBTTtJQUFFWixJQUFJLEVBQUVmLHVCQUF1QjtJQUFFa0IsT0FBTyxFQUFFUztFQUFVLENBQUM7QUFBQSxDQUFDO0FBQ3BHLElBQU1DLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlSLEtBQUs7RUFBQSxPQUFNO0lBQUVMLElBQUksRUFBRWQsdUJBQXVCO0lBQUVpQixPQUFPLEVBQUVFO0VBQU0sQ0FBQztBQUFBLENBQUM7QUFFNUYsSUFBTVMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBQTtFQUFBLE9BQVU7SUFBRWQsSUFBSSxFQUFFYjtFQUF3QixDQUFDO0FBQUEsQ0FBQztBQUN2RSxJQUFNNEIscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBSUMsT0FBTztFQUFBLE9BQU07SUFBRWhCLElBQUksRUFBRVosdUJBQXVCO0lBQUVlLE9BQU8sRUFBRWE7RUFBUSxDQUFDO0FBQUEsQ0FBQztBQUNoRyxJQUFNQyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJWixLQUFLO0VBQUEsT0FBTTtJQUFFTCxJQUFJLEVBQUVYLHVCQUF1QjtJQUFFYyxPQUFPLEVBQUVFO0VBQU0sQ0FBQztBQUFBLENBQUM7QUFFNUYsSUFBTWEscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBQTtFQUFBLE9BQVU7SUFBRWxCLElBQUksRUFBRVY7RUFBd0IsQ0FBQztBQUFBLENBQUM7QUFDdkUsSUFBTTZCLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlILE9BQU87RUFBQSxPQUFNO0lBQUVoQixJQUFJLEVBQUVULHVCQUF1QjtJQUFFWSxPQUFPLEVBQUVhO0VBQVEsQ0FBQztBQUFBLENBQUM7QUFDaEcsSUFBTUkscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBSWYsS0FBSztFQUFBLE9BQU07SUFBRUwsSUFBSSxFQUFFUix1QkFBdUI7SUFBRVcsT0FBTyxFQUFFRTtFQUFNLENBQUM7QUFBQSxDQUFDO0FBRTVGLElBQU1nQixtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFBO0VBQUEsT0FBVTtJQUFFckIsSUFBSSxFQUFFUDtFQUFzQixDQUFDO0FBQUEsQ0FBQztBQUNuRSxJQUFNNkIsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBSUMsUUFBUTtFQUFBLE9BQU07SUFBRXZCLElBQUksRUFBRU4scUJBQXFCO0lBQUVTLE9BQU8sRUFBRW9CO0VBQVMsQ0FBQztBQUFBLENBQUM7QUFDOUYsSUFBTUMsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBSW5CLEtBQUs7RUFBQSxPQUFNO0lBQUVMLElBQUksRUFBRUwscUJBQXFCO0lBQUVRLE9BQU8sRUFBRUU7RUFBTSxDQUFDO0FBQUEsQ0FBQztBQUV4RixJQUFNb0IscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBQTtFQUFBLE9BQVU7SUFBRXpCLElBQUksRUFBRUo7RUFBd0IsQ0FBQztBQUFBLENBQUM7QUFDdkUsSUFBTThCLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUE7RUFBQSxPQUFVO0lBQUUxQixJQUFJLEVBQUVIO0VBQXdCLENBQUM7QUFBQSxDQUFDO0FBQ3ZFLElBQU04QixxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJdEIsS0FBSztFQUFBLE9BQU07SUFBRUwsSUFBSSxFQUFFRix1QkFBdUI7SUFBRUssT0FBTyxFQUFFRTtFQUFNLENBQUM7QUFBQSxDQUFDOztBQUU1RjtBQUNBLElBQU11QixjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUEsRUFBUztFQUMzQjtJQUFBLElBQUFDLElBQUEsR0FBQXJFLGlCQUFBLGNBQUFqRCxZQUFBLEdBQUFzQyxDQUFBLENBQU8sU0FBQWlGLFFBQU9DLFFBQVEsRUFBRUMsUUFBUTtNQUFBLElBQUF4RCxLQUFBLEVBQUEwQixTQUFBLEVBQUErQixFQUFBO01BQUEsT0FBQTFILFlBQUEsR0FBQXFDLENBQUEsV0FBQXNGLFFBQUE7UUFBQSxrQkFBQUEsUUFBQSxDQUFBekcsQ0FBQSxHQUFBeUcsUUFBQSxDQUFBdEgsQ0FBQTtVQUFBO1lBQzlCbUgsUUFBUSxDQUFDaEMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1lBQ3pCdkIsS0FBSyxHQUFLd0QsUUFBUSxDQUFDLENBQUMsQ0FBQ0csSUFBSSxDQUF6QjNELEtBQUs7WUFBQTBELFFBQUEsQ0FBQXpHLENBQUE7WUFBQXlHLFFBQUEsQ0FBQXRILENBQUE7WUFBQSxPQUVhd0QscUJBQXFCLENBQUNJLEtBQUssQ0FBQztVQUFBO1lBQTlDMEIsU0FBUyxHQUFBZ0MsUUFBQSxDQUFBdEcsQ0FBQTtZQUNmbUcsUUFBUSxDQUFDOUIscUJBQXFCLENBQUNDLFNBQVMsQ0FBQyxDQUFDO1lBQUNnQyxRQUFBLENBQUF0SCxDQUFBO1lBQUE7VUFBQTtZQUFBc0gsUUFBQSxDQUFBekcsQ0FBQTtZQUFBd0csRUFBQSxHQUFBQyxRQUFBLENBQUF0RyxDQUFBO1lBRTNDbUcsUUFBUSxDQUFDM0IscUJBQXFCLENBQUE2QixFQUFNLENBQUMsQ0FBQztVQUFDO1lBQUEsT0FBQUMsUUFBQSxDQUFBckcsQ0FBQTtRQUFBO01BQUEsR0FBQWlHLE9BQUE7SUFBQSxDQUUxQztJQUFBLGlCQUFBTSxHQUFBLEVBQUFDLEdBQUE7TUFBQSxPQUFBUixJQUFBLENBQUFuRSxLQUFBLE9BQUFELFNBQUE7SUFBQTtFQUFBO0FBQ0gsQ0FBQztBQUVELElBQU02RSxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUlDLFFBQVEsRUFBSztFQUNsQztJQUFBLElBQUFDLEtBQUEsR0FBQWhGLGlCQUFBLGNBQUFqRCxZQUFBLEdBQUFzQyxDQUFBLENBQU8sU0FBQTRGLFNBQU9WLFFBQVEsRUFBRUMsUUFBUTtNQUFBLElBQUF4RCxLQUFBLEVBQUFnQyxRQUFBLEVBQUFrQyxHQUFBO01BQUEsT0FBQW5JLFlBQUEsR0FBQXFDLENBQUEsV0FBQStGLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBbEgsQ0FBQSxHQUFBa0gsU0FBQSxDQUFBL0gsQ0FBQTtVQUFBO1lBQzlCbUgsUUFBUSxDQUFDekIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1lBQ3hCOUIsS0FBSyxHQUFLd0QsUUFBUSxDQUFDLENBQUMsQ0FBQ0csSUFBSSxDQUF6QjNELEtBQUs7WUFBQW1FLFNBQUEsQ0FBQWxILENBQUE7WUFBQWtILFNBQUEsQ0FBQS9ILENBQUE7WUFBQSxPQUVZb0QsWUFBWSxlQUFBNEUsTUFBQSxDQUFlQyxrQkFBa0IsQ0FBQ04sUUFBUSxDQUFDLEdBQUkvRCxLQUFLLENBQUM7VUFBQTtZQUFsRmdDLFFBQVEsR0FBQW1DLFNBQUEsQ0FBQS9HLENBQUE7WUFDZG1HLFFBQVEsQ0FBQ3hCLG9CQUFvQixDQUFDQyxRQUFRLENBQUMsQ0FBQztZQUFDbUMsU0FBQSxDQUFBL0gsQ0FBQTtZQUFBO1VBQUE7WUFBQStILFNBQUEsQ0FBQWxILENBQUE7WUFBQWlILEdBQUEsR0FBQUMsU0FBQSxDQUFBL0csQ0FBQTtZQUV6Q21HLFFBQVEsQ0FBQ3RCLG9CQUFvQixDQUFBaUMsR0FBTSxDQUFDLENBQUM7VUFBQztZQUFBLE9BQUFDLFNBQUEsQ0FBQTlHLENBQUE7UUFBQTtNQUFBLEdBQUE0RyxRQUFBO0lBQUEsQ0FFekM7SUFBQSxpQkFBQUssR0FBQSxFQUFBQyxHQUFBO01BQUEsT0FBQVAsS0FBQSxDQUFBOUUsS0FBQSxPQUFBRCxTQUFBO0lBQUE7RUFBQTtBQUNILENBQUM7QUFFRCxJQUFNdUYsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFJQyxJQUFJLEVBQUs7RUFDL0I7SUFBQSxJQUFBQyxLQUFBLEdBQUExRixpQkFBQSxjQUFBakQsWUFBQSxHQUFBc0MsQ0FBQSxDQUFPLFNBQUFzRyxTQUFPcEIsUUFBUSxFQUFFQyxRQUFRO01BQUEsSUFBQXhELEtBQUEsRUFBQTRFLGNBQUEsRUFBQUMsSUFBQSxFQUFBQyxZQUFBLEVBQUFDLFlBQUEsRUFBQUMsU0FBQSxFQUFBQyxVQUFBLEVBQUFDLEdBQUE7TUFBQSxPQUFBbkosWUFBQSxHQUFBcUMsQ0FBQSxXQUFBK0csU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUFsSSxDQUFBLEdBQUFrSSxTQUFBLENBQUEvSSxDQUFBO1VBQUE7WUFDOUJtSCxRQUFRLENBQUNyQixxQkFBcUIsQ0FBQyxDQUFDLENBQUM7WUFBQ2lELFNBQUEsQ0FBQWxJLENBQUE7WUFFeEIrQyxLQUFLLEdBQUt3RCxRQUFRLENBQUMsQ0FBQyxDQUFDRyxJQUFJLENBQXpCM0QsS0FBSztZQUNQNEUsY0FBYyxHQUFHbkYsb0JBQW9CLENBQUMsT0FBTyxFQUFFLGtMQUFrTCxDQUFDO1lBRWxPb0YsSUFBSSxHQUFHLElBQUlPLFFBQVEsQ0FBQyxDQUFDO1lBRTNCUCxJQUFJLENBQUNRLE1BQU0sQ0FBQyxNQUFNLEVBQUVaLElBQUksQ0FBQ2EsSUFBSSxDQUFDO1lBQzlCVCxJQUFJLENBQUNRLE1BQU0sQ0FBQyxNQUFNLEVBQUVaLElBQUksQ0FBQztZQUVuQkssWUFBWSxHQUFHUyxLQUFLLENBQUNoRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsRUFBRTtjQUMxRGlHLE9BQU8sRUFBRTtnQkFDUCxlQUFlLFlBQUFwQixNQUFBLENBQVlwRSxLQUFLO2NBQ2xDLENBQUM7Y0FDRHlGLE1BQU0sRUFBRSxNQUFNO2NBQ2RDLElBQUksRUFBRWI7WUFDUixDQUFDLENBQUM7WUFBQU0sU0FBQSxDQUFBL0ksQ0FBQTtZQUFBLE9BRXlCeUMsT0FBTyxDQUFDOEcsSUFBSSxDQUFDLENBQUNmLGNBQWMsRUFBRUUsWUFBWSxDQUFDLENBQUM7VUFBQTtZQUFqRUMsWUFBWSxHQUFBSSxTQUFBLENBQUEvSCxDQUFBO1lBQUEsSUFFYjJILFlBQVksQ0FBQ2EsRUFBRTtjQUFBVCxTQUFBLENBQUEvSSxDQUFBO2NBQUE7WUFBQTtZQUFBK0ksU0FBQSxDQUFBL0ksQ0FBQTtZQUFBLE9BQ00ySSxZQUFZLENBQUNjLElBQUksQ0FBQyxDQUFDO1VBQUE7WUFBckNiLFNBQVMsR0FBQUcsU0FBQSxDQUFBL0gsQ0FBQTtZQUFBLE1BQ1QsSUFBSTBJLEtBQUssQ0FBQ2QsU0FBUyxDQUFDZSxPQUFPLElBQUksY0FBYyxDQUFDO1VBQUE7WUFBQVosU0FBQSxDQUFBL0ksQ0FBQTtZQUFBLE9BRzdCMkksWUFBWSxDQUFDYyxJQUFJLENBQUMsQ0FBQztVQUFBO1lBQXRDWixVQUFVLEdBQUFFLFNBQUEsQ0FBQS9ILENBQUE7WUFFaEJtRyxRQUFRLENBQUNwQixxQkFBcUIsQ0FBQzhDLFVBQVUsQ0FBQzdDLFNBQVMsQ0FBQyxDQUFDO1lBQUMrQyxTQUFBLENBQUEvSSxDQUFBO1lBQUE7VUFBQTtZQUFBK0ksU0FBQSxDQUFBbEksQ0FBQTtZQUFBaUksR0FBQSxHQUFBQyxTQUFBLENBQUEvSCxDQUFBO1lBRXREbUcsUUFBUSxDQUFDbEIscUJBQXFCLENBQUM2QyxHQUFBLENBQU1hLE9BQU8sQ0FBQyxDQUFDO1VBQUM7WUFBQSxPQUFBWixTQUFBLENBQUE5SCxDQUFBO1FBQUE7TUFBQSxHQUFBc0gsUUFBQTtJQUFBLENBR2xEO0lBQUEsaUJBQUFxQixHQUFBLEVBQUFDLEdBQUE7TUFBQSxPQUFBdkIsS0FBQSxDQUFBeEYsS0FBQSxPQUFBRCxTQUFBO0lBQUE7RUFBQTtBQUNILENBQUM7QUFFRCxJQUFNaUgsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFJQyxLQUFLLEVBQUs7RUFDaEM7SUFBQSxJQUFBQyxLQUFBLEdBQUFwSCxpQkFBQSxjQUFBakQsWUFBQSxHQUFBc0MsQ0FBQSxDQUFPLFNBQUFnSSxTQUFPOUMsUUFBUSxFQUFFQyxRQUFRO01BQUEsSUFBQXhELEtBQUEsRUFBQXNHLFFBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBO01BQUEsT0FBQXpLLFlBQUEsR0FBQXFDLENBQUEsV0FBQXFJLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBeEosQ0FBQSxHQUFBd0osU0FBQSxDQUFBckssQ0FBQTtVQUFBO1lBQzlCbUgsUUFBUSxDQUFDakIscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1lBQ3pCdEMsS0FBSyxHQUFLd0QsUUFBUSxDQUFDLENBQUMsQ0FBQ0csSUFBSSxDQUF6QjNELEtBQUs7WUFBQXlHLFNBQUEsQ0FBQXhKLENBQUE7WUFBQXdKLFNBQUEsQ0FBQXJLLENBQUE7WUFBQSxPQUVZbUosS0FBSyxDQUFDaEcscUJBQXFCLENBQUMsWUFBWSxDQUFDLEVBQUU7Y0FDaEVpRyxPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsY0FBYyxFQUFFO2NBQ2xCLENBQUM7Y0FDREMsTUFBTSxFQUFFLFFBQVE7Y0FDaEJDLElBQUksRUFBRWdCLElBQUksQ0FBQ0MsU0FBUyxDQUFDO2dCQUFFUixLQUFLLEVBQUxBO2NBQU0sQ0FBQztZQUNoQyxDQUFDLENBQUM7VUFBQTtZQVBJRyxRQUFRLEdBQUFHLFNBQUEsQ0FBQXJKLENBQUE7WUFBQXFKLFNBQUEsQ0FBQXJLLENBQUE7WUFBQSxPQVNJa0ssUUFBUSxDQUFDVCxJQUFJLENBQUMsQ0FBQztVQUFBO1lBQTNCVSxHQUFHLEdBQUFFLFNBQUEsQ0FBQXJKLENBQUE7WUFDVHdKLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLGdCQUFnQixFQUFFTixHQUFHLENBQUM7WUFFcENoRCxRQUFRLENBQUNoQixxQkFBcUIsQ0FBQ2dFLEdBQUcsQ0FBQ08sT0FBTyxDQUFDLENBQUM7WUFBQ0wsU0FBQSxDQUFBckssQ0FBQTtZQUFBO1VBQUE7WUFBQXFLLFNBQUEsQ0FBQXhKLENBQUE7WUFBQXVKLEdBQUEsR0FBQUMsU0FBQSxDQUFBckosQ0FBQTtZQUU3Q3dKLE9BQU8sQ0FBQy9FLEtBQUssQ0FBQyxzQkFBc0IsRUFBRWxDLGVBQWUsQ0FBQTZHLEdBQU0sQ0FBQyxDQUFDO1lBQzdEakQsUUFBUSxDQUFDZCxxQkFBcUIsQ0FBQytELEdBQUEsQ0FBTVQsT0FBTyxDQUFDLENBQUM7VUFBQztZQUFBLE9BQUFVLFNBQUEsQ0FBQXBKLENBQUE7UUFBQTtNQUFBLEdBQUFnSixRQUFBO0lBQUEsQ0FFbEQ7SUFBQSxpQkFBQVUsR0FBQSxFQUFBQyxHQUFBO01BQUEsT0FBQVosS0FBQSxDQUFBbEgsS0FBQSxPQUFBRCxTQUFBO0lBQUE7RUFBQTtBQUNILENBQUM7QUFDRCxJQUFNZ0ksY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFJekYsSUFBSSxFQUFFMkUsS0FBSyxFQUFLO0VBQ3RDO0lBQUEsSUFBQWUsS0FBQSxHQUFBbEksaUJBQUEsY0FBQWpELFlBQUEsR0FBQXNDLENBQUEsQ0FBTyxTQUFBOEksU0FBTzVELFFBQVEsRUFBRUMsUUFBUTtNQUFBLElBQUF4RCxLQUFBLEVBQUFzRyxRQUFBLEVBQUF0QixTQUFBLEVBQUF1QixHQUFBLEVBQUFhLEdBQUE7TUFBQSxPQUFBckwsWUFBQSxHQUFBcUMsQ0FBQSxXQUFBaUosU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUFwSyxDQUFBLEdBQUFvSyxTQUFBLENBQUFqTCxDQUFBO1VBQUE7WUFDOUJtSCxRQUFRLENBQUNiLHFCQUFxQixDQUFDLENBQUMsQ0FBQztZQUN6QjFDLEtBQUssR0FBS3dELFFBQVEsQ0FBQyxDQUFDLENBQUNHLElBQUksQ0FBekIzRCxLQUFLO1lBQUFxSCxTQUFBLENBQUFwSyxDQUFBO1lBQUFvSyxTQUFBLENBQUFqTCxDQUFBO1lBQUEsT0FFWW1KLEtBQUssQ0FBQ2hHLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxFQUFFO2NBQ2hFaUcsT0FBTyxFQUFFO2dCQUNQOEIsYUFBYSxZQUFBbEQsTUFBQSxDQUFZcEUsS0FBSyxDQUFFO2dCQUNoQyxjQUFjLEVBQUU7Y0FDbEIsQ0FBQztjQUNEeUYsTUFBTSxFQUFFLE1BQU07Y0FDZEMsSUFBSSxFQUFFZ0IsSUFBSSxDQUFDQyxTQUFTLENBQUM7Z0JBQUVuRixJQUFJLEVBQUpBLElBQUk7Z0JBQUUyRSxLQUFLLEVBQUxBO2NBQU0sQ0FBQztZQUN0QyxDQUFDLENBQUM7VUFBQTtZQVBJRyxRQUFRLEdBQUFlLFNBQUEsQ0FBQWpLLENBQUE7WUFBQSxJQVNUa0osUUFBUSxDQUFDVixFQUFFO2NBQUF5QixTQUFBLENBQUFqTCxDQUFBO2NBQUE7WUFBQTtZQUFBaUwsU0FBQSxDQUFBakwsQ0FBQTtZQUFBLE9BQ1VrSyxRQUFRLENBQUNULElBQUksQ0FBQyxDQUFDO1VBQUE7WUFBakNiLFNBQVMsR0FBQXFDLFNBQUEsQ0FBQWpLLENBQUE7WUFBQSxNQUNULElBQUkwSSxLQUFLLENBQUNkLFNBQVMsQ0FBQ2UsT0FBTyxJQUFJLGNBQWMsQ0FBQztVQUFBO1lBQUFzQixTQUFBLENBQUFqTCxDQUFBO1lBQUEsT0FHcENrSyxRQUFRLENBQUNULElBQUksQ0FBQyxDQUFDO1VBQUE7WUFBM0JVLEdBQUcsR0FBQWMsU0FBQSxDQUFBakssQ0FBQTtZQUVUbUcsUUFBUSxDQUFDWixxQkFBcUIsQ0FBQzRELEdBQUcsQ0FBQyxDQUFDO1lBQUNjLFNBQUEsQ0FBQWpMLENBQUE7WUFBQTtVQUFBO1lBQUFpTCxTQUFBLENBQUFwSyxDQUFBO1lBQUFtSyxHQUFBLEdBQUFDLFNBQUEsQ0FBQWpLLENBQUE7WUFFckNtRyxRQUFRLENBQUNYLHFCQUFxQixDQUFDd0UsR0FBQSxDQUFNckIsT0FBTyxDQUFDLENBQUM7VUFBQztZQUFBLE9BQUFzQixTQUFBLENBQUFoSyxDQUFBO1FBQUE7TUFBQSxHQUFBOEosUUFBQTtJQUFBLENBRWxEO0lBQUEsaUJBQUFJLEdBQUEsRUFBQUMsR0FBQTtNQUFBLE9BQUFOLEtBQUEsQ0FBQWhJLEtBQUEsT0FBQUQsU0FBQTtJQUFBO0VBQUE7QUFDSCxDQUFDO0FBRUQsSUFBTXdJLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFJMUQsUUFBUSxFQUFFMkQsS0FBSyxFQUFLO0VBQ3hDO0lBQUEsSUFBQUMsS0FBQSxHQUFBM0ksaUJBQUEsY0FBQWpELFlBQUEsR0FBQXNDLENBQUEsQ0FBTyxTQUFBdUosU0FBT3JFLFFBQVEsRUFBRUMsUUFBUTtNQUFBLElBQUF4RCxLQUFBLEVBQUFzRyxRQUFBLEVBQUF0QixTQUFBLEVBQUFqQyxRQUFBLEVBQUE4RSxHQUFBO01BQUEsT0FBQTlMLFlBQUEsR0FBQXFDLENBQUEsV0FBQTBKLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBN0ssQ0FBQSxHQUFBNkssU0FBQSxDQUFBMUwsQ0FBQTtVQUFBO1lBQzlCbUgsUUFBUSxDQUFDVixtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDdkI3QyxLQUFLLEdBQUt3RCxRQUFRLENBQUMsQ0FBQyxDQUFDRyxJQUFJLENBQXpCM0QsS0FBSztZQUFBOEgsU0FBQSxDQUFBN0ssQ0FBQTtZQUFBNkssU0FBQSxDQUFBMUwsQ0FBQTtZQUFBLE9BRVltSixLQUFLLENBQzFCaEcscUJBQXFCLGVBQUE2RSxNQUFBLENBQWVDLGtCQUFrQixDQUFDTixRQUFRLENBQUMsQ0FBRSxDQUFDLEVBQ25FO2NBQ0F5QixPQUFPLEVBQUU7Z0JBQ1A4QixhQUFhLFlBQUFsRCxNQUFBLENBQVlwRSxLQUFLLENBQUU7Z0JBQ2hDLGNBQWMsRUFBRTtjQUNsQixDQUFDO2NBQ0R5RixNQUFNLEVBQUUsT0FBTztjQUNmQyxJQUFJLEVBQUVnQixJQUFJLENBQUNDLFNBQVMsQ0FBQztnQkFBRWUsS0FBSyxFQUFMQTtjQUFNLENBQUM7WUFDaEMsQ0FBQyxDQUFDO1VBQUE7WUFUSXBCLFFBQVEsR0FBQXdCLFNBQUEsQ0FBQTFLLENBQUE7WUFBQSxJQVdUa0osUUFBUSxDQUFDVixFQUFFO2NBQUFrQyxTQUFBLENBQUExTCxDQUFBO2NBQUE7WUFBQTtZQUFBMEwsU0FBQSxDQUFBMUwsQ0FBQTtZQUFBLE9BQ1VrSyxRQUFRLENBQUNULElBQUksQ0FBQyxDQUFDLFNBQU0sQ0FBQztjQUFBLE9BQU8sQ0FBQyxDQUFDO1lBQUEsQ0FBQyxDQUFDO1VBQUE7WUFBbkRiLFNBQVMsR0FBQThDLFNBQUEsQ0FBQTFLLENBQUE7WUFBQSxNQUNULElBQUkwSSxLQUFLLENBQUNkLFNBQVMsQ0FBQ2UsT0FBTyxxQkFBQTNCLE1BQUEsQ0FBcUJrQyxRQUFRLENBQUN5QixNQUFNLE1BQUcsQ0FBQztVQUFBO1lBQUFELFNBQUEsQ0FBQTFMLENBQUE7WUFBQSxPQUdwRGtLLFFBQVEsQ0FBQ1QsSUFBSSxDQUFDLENBQUM7VUFBQTtZQUFoQzlDLFFBQVEsR0FBQStFLFNBQUEsQ0FBQTFLLENBQUE7WUFFZG1HLFFBQVEsQ0FBQ1QsbUJBQW1CLENBQUNDLFFBQVEsQ0FBQyxDQUFDO1lBQUMrRSxTQUFBLENBQUExTCxDQUFBO1lBQUE7VUFBQTtZQUFBMEwsU0FBQSxDQUFBN0ssQ0FBQTtZQUFBNEssR0FBQSxHQUFBQyxTQUFBLENBQUExSyxDQUFBO1lBRXhDd0osT0FBTyxDQUFDL0UsS0FBSyxDQUFDLHNCQUFzQixFQUFFbEMsZUFBZSxDQUFBa0ksR0FBTSxDQUFDLENBQUM7WUFDN0R0RSxRQUFRLENBQUNQLG1CQUFtQixDQUFDNkUsR0FBQSxDQUFNOUIsT0FBTyxDQUFDLENBQUM7VUFBQztZQUFBLE9BQUErQixTQUFBLENBQUF6SyxDQUFBO1FBQUE7TUFBQSxHQUFBdUssUUFBQTtJQUFBLENBRWhEO0lBQUEsaUJBQUFJLElBQUEsRUFBQUMsSUFBQTtNQUFBLE9BQUFOLEtBQUEsQ0FBQXpJLEtBQUEsT0FBQUQsU0FBQTtJQUFBO0VBQUE7QUFDSCxDQUFDO0FBRUQsSUFBTWlKLGNBQWMsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBSW5FLFFBQVEsRUFBSztFQUNuQztJQUFBLElBQUFvRSxLQUFBLEdBQUFuSixpQkFBQSxjQUFBakQsWUFBQSxHQUFBc0MsQ0FBQSxDQUFPLFNBQUErSixTQUFPN0UsUUFBUSxFQUFFQyxRQUFRO01BQUEsSUFBQXhELEtBQUEsRUFBQXNHLFFBQUEsRUFBQXpFLEtBQUEsRUFBQXdHLEdBQUE7TUFBQSxPQUFBdE0sWUFBQSxHQUFBcUMsQ0FBQSxXQUFBa0ssU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUFyTCxDQUFBLEdBQUFxTCxTQUFBLENBQUFsTSxDQUFBO1VBQUE7WUFDOUJtSCxRQUFRLENBQUNOLHFCQUFxQixDQUFDLENBQUMsQ0FBQztZQUN6QmpELEtBQUssR0FBS3dELFFBQVEsQ0FBQyxDQUFDLENBQUNHLElBQUksQ0FBekIzRCxLQUFLO1lBQUFzSSxTQUFBLENBQUFyTCxDQUFBO1lBQUFxTCxTQUFBLENBQUFsTSxDQUFBO1lBQUEsT0FFWW1KLEtBQUssQ0FDMUJoRyxxQkFBcUIsc0JBQUE2RSxNQUFBLENBQXNCQyxrQkFBa0IsQ0FBQ04sUUFBUSxDQUFDLENBQUUsQ0FBQyxFQUMxRTtjQUNBeUIsT0FBTyxFQUFFO2dCQUNQOEIsYUFBYSxZQUFBbEQsTUFBQSxDQUFZcEUsS0FBSyxDQUFFO2dCQUNoQyxjQUFjLEVBQUU7Y0FDbEIsQ0FBQztjQUNEeUYsTUFBTSxFQUFFLE9BQU87Y0FDZkMsSUFBSSxFQUFFZ0IsSUFBSSxDQUFDQyxTQUFTLENBQUM7Z0JBQUU1QyxRQUFRLEVBQVJBO2NBQVMsQ0FBQztZQUNuQyxDQUFDLENBQUM7VUFBQTtZQVRJdUMsUUFBUSxHQUFBZ0MsU0FBQSxDQUFBbEwsQ0FBQTtZQUFBLElBV1RrSixRQUFRLENBQUNWLEVBQUU7Y0FBQTBDLFNBQUEsQ0FBQWxNLENBQUE7Y0FBQTtZQUFBO1lBQUFrTSxTQUFBLENBQUFsTSxDQUFBO1lBQUEsT0FDTWtLLFFBQVEsQ0FBQ1QsSUFBSSxDQUFDLENBQUM7VUFBQTtZQUE3QmhFLEtBQUssR0FBQXlHLFNBQUEsQ0FBQWxMLENBQUE7WUFBQSxNQUNMLElBQUkwSSxLQUFLLENBQUNqRSxLQUFLLENBQUNrRSxPQUFPLENBQUM7VUFBQTtZQUVoQ3hDLFFBQVEsQ0FBQ0wscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1lBQUNvRixTQUFBLENBQUFsTSxDQUFBO1lBQUE7VUFBQTtZQUFBa00sU0FBQSxDQUFBckwsQ0FBQTtZQUFBb0wsR0FBQSxHQUFBQyxTQUFBLENBQUFsTCxDQUFBO1lBRWxDd0osT0FBTyxDQUFDL0UsS0FBSyxDQUFDLHNCQUFzQixFQUFFbEMsZUFBZSxDQUFBMEksR0FBTSxDQUFDLENBQUM7WUFDN0Q5RSxRQUFRLENBQUNKLHFCQUFxQixDQUFDa0YsR0FBQSxDQUFNdEMsT0FBTyxDQUFDLENBQUM7VUFBQztZQUFBLE9BQUF1QyxTQUFBLENBQUFqTCxDQUFBO1FBQUE7TUFBQSxHQUFBK0ssUUFBQTtJQUFBLENBRWxEO0lBQUEsaUJBQUFHLElBQUEsRUFBQUMsSUFBQTtNQUFBLE9BQUFMLEtBQUEsQ0FBQWpKLEtBQUEsT0FBQUQsU0FBQTtJQUFBO0VBQUE7QUFDSCxDQUFDO0FBRUR3SixNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmNUUsYUFBYSxFQUFiQSxhQUFhO0VBQ2JWLGNBQWMsRUFBZEEsY0FBYztFQUNkb0IsY0FBYyxFQUFkQSxjQUFjO0VBQ2QwQixjQUFjLEVBQWRBLGNBQWM7RUFDZGUsY0FBYyxFQUFkQSxjQUFjO0VBQ2RRLFlBQVksRUFBWkEsWUFBWTtFQUNaUyxjQUFjLEVBQWRBLGNBQWM7RUFDZDdILHNCQUFzQixFQUF0QkEsc0JBQXNCO0VBQ3RCQyxzQkFBc0IsRUFBdEJBLHNCQUFzQjtFQUN0QkMsc0JBQXNCLEVBQXRCQSxzQkFBc0I7RUFDdEJMLHVCQUF1QixFQUF2QkEsdUJBQXVCO0VBQ3ZCQyx1QkFBdUIsRUFBdkJBLHVCQUF1QjtFQUN2QkMsdUJBQXVCLEVBQXZCQSx1QkFBdUI7RUFDdkJJLHVCQUF1QixFQUF2QkEsdUJBQXVCO0VBQ3ZCQyx1QkFBdUIsRUFBdkJBLHVCQUF1QjtFQUN2QkMsdUJBQXVCLEVBQXZCQSx1QkFBdUI7RUFDdkJDLHVCQUF1QixFQUF2QkEsdUJBQXVCO0VBQ3ZCQyx1QkFBdUIsRUFBdkJBLHVCQUF1QjtFQUN2QkMsdUJBQXVCLEVBQXZCQSx1QkFBdUI7RUFDdkJDLHVCQUF1QixFQUF2QkEsdUJBQXVCO0VBQ3ZCQyx1QkFBdUIsRUFBdkJBLHVCQUF1QjtFQUN2QkMsdUJBQXVCLEVBQXZCQSx1QkFBdUI7RUFDdkJDLHFCQUFxQixFQUFyQkEscUJBQXFCO0VBQ3JCQyxxQkFBcUIsRUFBckJBLHFCQUFxQjtFQUNyQkMscUJBQXFCLEVBQXJCQSxxQkFBcUI7RUFDckJDLHVCQUF1QixFQUF2QkEsdUJBQXVCO0VBQ3ZCQyx1QkFBdUIsRUFBdkJBLHVCQUF1QjtFQUN2QkMsdUJBQXVCLEVBQXZCQTtBQUNGLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2FjdGlvbnMvZG9jdW1lbnRBY3Rpb25zLmpzPzFmMDYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IGFzc2VydENsaWVudEZldGNoUGF0aCwgZmV0Y2hGcm9tQVBJIH0gPSByZXF1aXJlKCcuL2FwaUFjdGlvbnMnKTtcbmNvbnN0IGNyZWF0ZVRpbWVvdXRQcm9taXNlID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2NyZWF0ZVRpbWVvdXRQcm9taXNlJyk7XG5jb25zdCB7IHNhZmVJZGVudGl0eUVyciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY1NhZmVMb2cnKTtcblxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaERvY3VtZW50c0Zyb21BUEkgKHRva2VuKSB7XG4gIHJldHVybiBmZXRjaEZyb21BUEkoJy9kb2N1bWVudHMnLCB0b2tlbik7XG59XG5cbi8vIEFjdGlvbiB0eXBlc1xuY29uc3QgRkVUQ0hfRE9DVU1FTlRTX1JFUVVFU1QgPSAnRkVUQ0hfRE9DVU1FTlRTX1JFUVVFU1QnO1xuY29uc3QgRkVUQ0hfRE9DVU1FTlRTX1NVQ0NFU1MgPSAnRkVUQ0hfRE9DVU1FTlRTX1NVQ0NFU1MnO1xuY29uc3QgRkVUQ0hfRE9DVU1FTlRTX0ZBSUxVUkUgPSAnRkVUQ0hfRE9DVU1FTlRTX0ZBSUxVUkUnO1xuXG5jb25zdCBGRVRDSF9ET0NVTUVOVF9SRVFVRVNUID0gJ0ZFVENIX0RPQ1VNRU5UX1JFUVVFU1QnO1xuY29uc3QgRkVUQ0hfRE9DVU1FTlRfU1VDQ0VTUyA9ICdGRVRDSF9ET0NVTUVOVF9TVUNDRVNTJztcbmNvbnN0IEZFVENIX0RPQ1VNRU5UX0ZBSUxVUkUgPSAnRkVUQ0hfRE9DVU1FTlRfRkFJTFVSRSc7XG5cbmNvbnN0IFVQTE9BRF9ET0NVTUVOVF9SRVFVRVNUID0gJ1VQTE9BRF9ET0NVTUVOVF9SRVFVRVNUJztcbmNvbnN0IFVQTE9BRF9ET0NVTUVOVF9TVUNDRVNTID0gJ1VQTE9BRF9ET0NVTUVOVF9TVUNDRVNTJztcbmNvbnN0IFVQTE9BRF9ET0NVTUVOVF9GQUlMVVJFID0gJ1VQTE9BRF9ET0NVTUVOVF9GQUlMVVJFJztcblxuY29uc3QgU0VBUkNIX0RPQ1VNRU5UX1JFUVVFU1QgPSAnU0VBUkNIX0RPQ1VNRU5UX1JFUVVFU1QnO1xuY29uc3QgU0VBUkNIX0RPQ1VNRU5UX1NVQ0NFU1MgPSAnU0VBUkNIX0RPQ1VNRU5UX1NVQ0NFU1MnO1xuY29uc3QgU0VBUkNIX0RPQ1VNRU5UX0ZBSUxVUkUgPSAnU0VBUkNIX0RPQ1VNRU5UX0ZBSUxVUkUnO1xuXG5jb25zdCBDUkVBVEVfRE9DVU1FTlRfUkVRVUVTVCA9ICdDUkVBVEVfRE9DVU1FTlRfUkVRVUVTVCc7XG5jb25zdCBDUkVBVEVfRE9DVU1FTlRfU1VDQ0VTUyA9ICdDUkVBVEVfRE9DVU1FTlRfU1VDQ0VTUyc7XG5jb25zdCBDUkVBVEVfRE9DVU1FTlRfRkFJTFVSRSA9ICdDUkVBVEVfRE9DVU1FTlRfRkFJTFVSRSc7XG5cbmNvbnN0IEVESVRfRE9DVU1FTlRfUkVRVUVTVCA9ICdFRElUX0RPQ1VNRU5UX1JFUVVFU1QnO1xuY29uc3QgRURJVF9ET0NVTUVOVF9TVUNDRVNTID0gJ0VESVRfRE9DVU1FTlRfU1VDQ0VTUyc7XG5jb25zdCBFRElUX0RPQ1VNRU5UX0ZBSUxVUkUgPSAnRURJVF9ET0NVTUVOVF9GQUlMVVJFJztcblxuY29uc3QgREVMRVRFX0RPQ1VNRU5UX1JFUVVFU1QgPSAnREVMRVRFX0RPQ1VNRU5UX1JFUVVFU1QnO1xuY29uc3QgREVMRVRFX0RPQ1VNRU5UX1NVQ0NFU1MgPSAnREVMRVRFX0RPQ1VNRU5UX1NVQ0NFU1MnO1xuY29uc3QgREVMRVRFX0RPQ1VNRU5UX0ZBSUxVUkUgPSAnREVMRVRFX0RPQ1VNRU5UX0ZBSUxVUkUnO1xuXG4vLyBBY3Rpb24gY3JlYXRvcnNcbmNvbnN0IGZldGNoRG9jdW1lbnRzUmVxdWVzdCA9ICgpID0+ICh7IHR5cGU6IEZFVENIX0RPQ1VNRU5UU19SRVFVRVNUIH0pO1xuY29uc3QgZmV0Y2hEb2N1bWVudHNTdWNjZXNzID0gKGRvY3VtZW50cykgPT4gKHsgdHlwZTogRkVUQ0hfRE9DVU1FTlRTX1NVQ0NFU1MsIHBheWxvYWQ6IGRvY3VtZW50cyB9KTtcbmNvbnN0IGZldGNoRG9jdW1lbnRzRmFpbHVyZSA9IChlcnJvcikgPT4gKHsgdHlwZTogRkVUQ0hfRE9DVU1FTlRTX0ZBSUxVUkUsIHBheWxvYWQ6IGVycm9yIH0pO1xuXG5jb25zdCBmZXRjaERvY3VtZW50UmVxdWVzdCA9ICgpID0+ICh7IHR5cGU6IEZFVENIX0RPQ1VNRU5UX1JFUVVFU1QgfSk7XG5jb25zdCBmZXRjaERvY3VtZW50U3VjY2VzcyA9IChpbnN0YW5jZSkgPT4gKHsgdHlwZTogRkVUQ0hfRE9DVU1FTlRfU1VDQ0VTUywgcGF5bG9hZDogaW5zdGFuY2UgfSk7XG5jb25zdCBmZXRjaERvY3VtZW50RmFpbHVyZSA9IChlcnJvcikgPT4gKHsgdHlwZTogRkVUQ0hfRE9DVU1FTlRfRkFJTFVSRSwgcGF5bG9hZDogZXJyb3IgfSk7XG5cbmNvbnN0IHVwbG9hZERvY3VtZW50UmVxdWVzdCA9ICgpID0+ICh7IHR5cGU6IFVQTE9BRF9ET0NVTUVOVF9SRVFVRVNUIH0pO1xuY29uc3QgdXBsb2FkRG9jdW1lbnRTdWNjZXNzID0gKGZhYnJpY19pZCkgPT4gKHsgdHlwZTogVVBMT0FEX0RPQ1VNRU5UX1NVQ0NFU1MsIHBheWxvYWQ6IGZhYnJpY19pZCB9KTtcbmNvbnN0IHVwbG9hZERvY3VtZW50RmFpbHVyZSA9IChlcnJvcikgPT4gKHsgdHlwZTogVVBMT0FEX0RPQ1VNRU5UX0ZBSUxVUkUsIHBheWxvYWQ6IGVycm9yIH0pO1xuXG5jb25zdCBzZWFyY2hEb2N1bWVudFJlcXVlc3QgPSAoKSA9PiAoeyB0eXBlOiBTRUFSQ0hfRE9DVU1FTlRfUkVRVUVTVCB9KTtcbmNvbnN0IHNlYXJjaERvY3VtZW50U3VjY2VzcyA9IChyZXN1bHRzKSA9PiAoeyB0eXBlOiBTRUFSQ0hfRE9DVU1FTlRfU1VDQ0VTUywgcGF5bG9hZDogcmVzdWx0cyB9KTtcbmNvbnN0IHNlYXJjaERvY3VtZW50RmFpbHVyZSA9IChlcnJvcikgPT4gKHsgdHlwZTogU0VBUkNIX0RPQ1VNRU5UX0ZBSUxVUkUsIHBheWxvYWQ6IGVycm9yIH0pO1xuXG5jb25zdCBjcmVhdGVEb2N1bWVudFJlcXVlc3QgPSAoKSA9PiAoeyB0eXBlOiBDUkVBVEVfRE9DVU1FTlRfUkVRVUVTVCB9KTtcbmNvbnN0IGNyZWF0ZURvY3VtZW50U3VjY2VzcyA9IChyZXN1bHRzKSA9PiAoeyB0eXBlOiBDUkVBVEVfRE9DVU1FTlRfU1VDQ0VTUywgcGF5bG9hZDogcmVzdWx0cyB9KTtcbmNvbnN0IGNyZWF0ZURvY3VtZW50RmFpbHVyZSA9IChlcnJvcikgPT4gKHsgdHlwZTogQ1JFQVRFX0RPQ1VNRU5UX0ZBSUxVUkUsIHBheWxvYWQ6IGVycm9yIH0pO1xuXG5jb25zdCBlZGl0RG9jdW1lbnRSZXF1ZXN0ID0gKCkgPT4gKHsgdHlwZTogRURJVF9ET0NVTUVOVF9SRVFVRVNUIH0pO1xuY29uc3QgZWRpdERvY3VtZW50U3VjY2VzcyA9IChkb2N1bWVudCkgPT4gKHsgdHlwZTogRURJVF9ET0NVTUVOVF9TVUNDRVNTLCBwYXlsb2FkOiBkb2N1bWVudCB9KTtcbmNvbnN0IGVkaXREb2N1bWVudEZhaWx1cmUgPSAoZXJyb3IpID0+ICh7IHR5cGU6IEVESVRfRE9DVU1FTlRfRkFJTFVSRSwgcGF5bG9hZDogZXJyb3IgfSk7XG5cbmNvbnN0IGRlbGV0ZURvY3VtZW50UmVxdWVzdCA9ICgpID0+ICh7IHR5cGU6IERFTEVURV9ET0NVTUVOVF9SRVFVRVNUIH0pO1xuY29uc3QgZGVsZXRlRG9jdW1lbnRTdWNjZXNzID0gKCkgPT4gKHsgdHlwZTogREVMRVRFX0RPQ1VNRU5UX1NVQ0NFU1MgfSk7XG5jb25zdCBkZWxldGVEb2N1bWVudEZhaWx1cmUgPSAoZXJyb3IpID0+ICh7IHR5cGU6IERFTEVURV9ET0NVTUVOVF9GQUlMVVJFLCBwYXlsb2FkOiBlcnJvciB9KTtcblxuLy8gVGh1bmsgYWN0aW9uIGNyZWF0b3JcbmNvbnN0IGZldGNoRG9jdW1lbnRzID0gKCkgPT4ge1xuICByZXR1cm4gYXN5bmMgKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGRpc3BhdGNoKGZldGNoRG9jdW1lbnRzUmVxdWVzdCgpKTtcbiAgICBjb25zdCB7IHRva2VuIH0gPSBnZXRTdGF0ZSgpLmF1dGg7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRvY3VtZW50cyA9IGF3YWl0IGZldGNoRG9jdW1lbnRzRnJvbUFQSSh0b2tlbik7XG4gICAgICBkaXNwYXRjaChmZXRjaERvY3VtZW50c1N1Y2Nlc3MoZG9jdW1lbnRzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGRpc3BhdGNoKGZldGNoRG9jdW1lbnRzRmFpbHVyZShlcnJvcikpO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGZldGNoRG9jdW1lbnQgPSAoZmFicmljSUQpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBkaXNwYXRjaChmZXRjaERvY3VtZW50UmVxdWVzdCgpKTtcbiAgICBjb25zdCB7IHRva2VuIH0gPSBnZXRTdGF0ZSgpLmF1dGg7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgZmV0Y2hGcm9tQVBJKGAvZG9jdW1lbnRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGZhYnJpY0lEKX1gLCB0b2tlbik7XG4gICAgICBkaXNwYXRjaChmZXRjaERvY3VtZW50U3VjY2VzcyhpbnN0YW5jZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkaXNwYXRjaChmZXRjaERvY3VtZW50RmFpbHVyZShlcnJvcikpO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IHVwbG9hZERvY3VtZW50ID0gKGZpbGUpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBkaXNwYXRjaCh1cGxvYWREb2N1bWVudFJlcXVlc3QoKSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgdG9rZW4gfSA9IGdldFN0YXRlKCkuYXV0aDtcbiAgICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gY3JlYXRlVGltZW91dFByb21pc2UoMTIwMDAwMCwgJ0ZpbGUgdXBsb2FkIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgZHVlIHRvIGEgdGltZW91dCBlcnJvci4gUGxlYXNlIGNoZWNrIHlvdXIgbmV0d29yayBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4uIEZvciBvbmdvaW5nIGlzc3VlcywgY29udGFjdCBvdXIgc3VwcG9ydCB0ZWFtIGF0IHN1cHBvcnRAbm92by5jb20uJyk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgICAgZGF0YS5hcHBlbmQoJ25hbWUnLCBmaWxlLm5hbWUpO1xuICAgICAgZGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcblxuICAgICAgY29uc3QgZmV0Y2hQcm9taXNlID0gZmV0Y2goYXNzZXJ0Q2xpZW50RmV0Y2hQYXRoKCcvZmlsZXMnKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGFcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmaWxlQ3JlYXRpb24gPSBhd2FpdCBQcm9taXNlLnJhY2UoW3RpbWVvdXRQcm9taXNlLCBmZXRjaFByb21pc2VdKTtcblxuICAgICAgaWYgKCFmaWxlQ3JlYXRpb24ub2spIHtcbiAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgZmlsZUNyZWF0aW9uLmpzb24oKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yRGF0YS5tZXNzYWdlIHx8ICdTZXJ2ZXIgZXJyb3InKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZUFuc3dlciA9IGF3YWl0IGZpbGVDcmVhdGlvbi5qc29uKCk7XG5cbiAgICAgIGRpc3BhdGNoKHVwbG9hZERvY3VtZW50U3VjY2VzcyhmaWxlQW5zd2VyLmZhYnJpY19pZCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkaXNwYXRjaCh1cGxvYWREb2N1bWVudEZhaWx1cmUoZXJyb3IubWVzc2FnZSkpO1xuICAgIH1cblxuICB9XG59XG5cbmNvbnN0IHNlYXJjaERvY3VtZW50ID0gKHF1ZXJ5KSA9PiB7XG4gIHJldHVybiBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgZGlzcGF0Y2goc2VhcmNoRG9jdW1lbnRSZXF1ZXN0KCkpO1xuICAgIGNvbnN0IHsgdG9rZW4gfSA9IGdldFN0YXRlKCkuYXV0aDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhc3NlcnRDbGllbnRGZXRjaFBhdGgoJy9kb2N1bWVudHMnKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZDogJ1NFQVJDSCcsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcXVlcnkgfSlcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBvYmogPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBjb25zb2xlLmRlYnVnKCdmZXRjaCByZXN1bHQ6ICcsIG9iaik7XG5cbiAgICAgIGRpc3BhdGNoKHNlYXJjaERvY3VtZW50U3VjY2VzcyhvYmouY29udGVudCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBkYXRhOicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgICAgZGlzcGF0Y2goc2VhcmNoRG9jdW1lbnRGYWlsdXJlKGVycm9yLm1lc3NhZ2UpKTtcbiAgICB9XG4gIH1cbn1cbmNvbnN0IGNyZWF0ZURvY3VtZW50ID0gKHR5cGUsIHF1ZXJ5KSA9PiB7XG4gIHJldHVybiBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgZGlzcGF0Y2goY3JlYXRlRG9jdW1lbnRSZXF1ZXN0KCkpO1xuICAgIGNvbnN0IHsgdG9rZW4gfSA9IGdldFN0YXRlKCkuYXV0aDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhc3NlcnRDbGllbnRGZXRjaFBhdGgoJy9kb2N1bWVudHMnKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9LFxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB0eXBlLCBxdWVyeSB9KVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UgfHwgJ1NlcnZlciBlcnJvcicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvYmogPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICAgIGRpc3BhdGNoKGNyZWF0ZURvY3VtZW50U3VjY2VzcyhvYmopKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZGlzcGF0Y2goY3JlYXRlRG9jdW1lbnRGYWlsdXJlKGVycm9yLm1lc3NhZ2UpKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZWRpdERvY3VtZW50ID0gKGZhYnJpY0lELCB0aXRsZSkgPT4ge1xuICByZXR1cm4gYXN5bmMgKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGRpc3BhdGNoKGVkaXREb2N1bWVudFJlcXVlc3QoKSk7XG4gICAgY29uc3QgeyB0b2tlbiB9ID0gZ2V0U3RhdGUoKS5hdXRoO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFxuICAgICAgICBhc3NlcnRDbGllbnRGZXRjaFBhdGgoYC9kb2N1bWVudHMvJHtlbmNvZGVVUklDb21wb25lbnQoZmFicmljSUQpfWApLFxuICAgICAgICB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB0aXRsZSB9KVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UgfHwgYFNlcnZlciBlcnJvciAoJHtyZXNwb25zZS5zdGF0dXN9KWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkb2N1bWVudCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgZGlzcGF0Y2goZWRpdERvY3VtZW50U3VjY2Vzcyhkb2N1bWVudCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBkYXRhOicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgICAgZGlzcGF0Y2goZWRpdERvY3VtZW50RmFpbHVyZShlcnJvci5tZXNzYWdlKSk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGRlbGV0ZURvY3VtZW50ID0gKGZhYnJpY0lEKSA9PiB7XG4gIHJldHVybiBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgZGlzcGF0Y2goZGVsZXRlRG9jdW1lbnRSZXF1ZXN0KCkpO1xuICAgIGNvbnN0IHsgdG9rZW4gfSA9IGdldFN0YXRlKCkuYXV0aDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgYXNzZXJ0Q2xpZW50RmV0Y2hQYXRoKGAvZG9jdW1lbnRzL2RlbGV0ZS8ke2VuY29kZVVSSUNvbXBvbmVudChmYWJyaWNJRCl9YCksXG4gICAgICAgIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGZhYnJpY0lEIH0pXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCBlcnJvciA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgZGlzcGF0Y2goZGVsZXRlRG9jdW1lbnRTdWNjZXNzKCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBkYXRhOicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgICAgZGlzcGF0Y2goZGVsZXRlRG9jdW1lbnRGYWlsdXJlKGVycm9yLm1lc3NhZ2UpKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZldGNoRG9jdW1lbnQsXG4gIGZldGNoRG9jdW1lbnRzLFxuICB1cGxvYWREb2N1bWVudCxcbiAgc2VhcmNoRG9jdW1lbnQsXG4gIGNyZWF0ZURvY3VtZW50LFxuICBlZGl0RG9jdW1lbnQsXG4gIGRlbGV0ZURvY3VtZW50LFxuICBGRVRDSF9ET0NVTUVOVF9SRVFVRVNULFxuICBGRVRDSF9ET0NVTUVOVF9TVUNDRVNTLFxuICBGRVRDSF9ET0NVTUVOVF9GQUlMVVJFLFxuICBGRVRDSF9ET0NVTUVOVFNfUkVRVUVTVCxcbiAgRkVUQ0hfRE9DVU1FTlRTX1NVQ0NFU1MsXG4gIEZFVENIX0RPQ1VNRU5UU19GQUlMVVJFLFxuICBVUExPQURfRE9DVU1FTlRfUkVRVUVTVCxcbiAgVVBMT0FEX0RPQ1VNRU5UX1NVQ0NFU1MsXG4gIFVQTE9BRF9ET0NVTUVOVF9GQUlMVVJFLFxuICBTRUFSQ0hfRE9DVU1FTlRfUkVRVUVTVCxcbiAgU0VBUkNIX0RPQ1VNRU5UX1NVQ0NFU1MsXG4gIFNFQVJDSF9ET0NVTUVOVF9GQUlMVVJFLFxuICBDUkVBVEVfRE9DVU1FTlRfUkVRVUVTVCxcbiAgQ1JFQVRFX0RPQ1VNRU5UX1NVQ0NFU1MsXG4gIENSRUFURV9ET0NVTUVOVF9GQUlMVVJFLFxuICBFRElUX0RPQ1VNRU5UX1JFUVVFU1QsXG4gIEVESVRfRE9DVU1FTlRfU1VDQ0VTUyxcbiAgRURJVF9ET0NVTUVOVF9GQUlMVVJFLFxuICBERUxFVEVfRE9DVU1FTlRfUkVRVUVTVCxcbiAgREVMRVRFX0RPQ1VNRU5UX1NVQ0NFU1MsXG4gIERFTEVURV9ET0NVTUVOVF9GQUlMVVJFLFxufTtcbiJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJTeW1ib2wiLCJuIiwiaXRlcmF0b3IiLCJvIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl9yZXF1aXJlIiwicmVxdWlyZSIsImFzc2VydENsaWVudEZldGNoUGF0aCIsImZldGNoRnJvbUFQSSIsImNyZWF0ZVRpbWVvdXRQcm9taXNlIiwiX3JlcXVpcmUyIiwic2FmZUlkZW50aXR5RXJyIiwiZmV0Y2hEb2N1bWVudHNGcm9tQVBJIiwiX3giLCJfZmV0Y2hEb2N1bWVudHNGcm9tQVBJIiwiX2NhbGxlZTgiLCJ0b2tlbiIsIl9jb250ZXh0OCIsIkZFVENIX0RPQ1VNRU5UU19SRVFVRVNUIiwiRkVUQ0hfRE9DVU1FTlRTX1NVQ0NFU1MiLCJGRVRDSF9ET0NVTUVOVFNfRkFJTFVSRSIsIkZFVENIX0RPQ1VNRU5UX1JFUVVFU1QiLCJGRVRDSF9ET0NVTUVOVF9TVUNDRVNTIiwiRkVUQ0hfRE9DVU1FTlRfRkFJTFVSRSIsIlVQTE9BRF9ET0NVTUVOVF9SRVFVRVNUIiwiVVBMT0FEX0RPQ1VNRU5UX1NVQ0NFU1MiLCJVUExPQURfRE9DVU1FTlRfRkFJTFVSRSIsIlNFQVJDSF9ET0NVTUVOVF9SRVFVRVNUIiwiU0VBUkNIX0RPQ1VNRU5UX1NVQ0NFU1MiLCJTRUFSQ0hfRE9DVU1FTlRfRkFJTFVSRSIsIkNSRUFURV9ET0NVTUVOVF9SRVFVRVNUIiwiQ1JFQVRFX0RPQ1VNRU5UX1NVQ0NFU1MiLCJDUkVBVEVfRE9DVU1FTlRfRkFJTFVSRSIsIkVESVRfRE9DVU1FTlRfUkVRVUVTVCIsIkVESVRfRE9DVU1FTlRfU1VDQ0VTUyIsIkVESVRfRE9DVU1FTlRfRkFJTFVSRSIsIkRFTEVURV9ET0NVTUVOVF9SRVFVRVNUIiwiREVMRVRFX0RPQ1VNRU5UX1NVQ0NFU1MiLCJERUxFVEVfRE9DVU1FTlRfRkFJTFVSRSIsImZldGNoRG9jdW1lbnRzUmVxdWVzdCIsInR5cGUiLCJmZXRjaERvY3VtZW50c1N1Y2Nlc3MiLCJkb2N1bWVudHMiLCJwYXlsb2FkIiwiZmV0Y2hEb2N1bWVudHNGYWlsdXJlIiwiZXJyb3IiLCJmZXRjaERvY3VtZW50UmVxdWVzdCIsImZldGNoRG9jdW1lbnRTdWNjZXNzIiwiaW5zdGFuY2UiLCJmZXRjaERvY3VtZW50RmFpbHVyZSIsInVwbG9hZERvY3VtZW50UmVxdWVzdCIsInVwbG9hZERvY3VtZW50U3VjY2VzcyIsImZhYnJpY19pZCIsInVwbG9hZERvY3VtZW50RmFpbHVyZSIsInNlYXJjaERvY3VtZW50UmVxdWVzdCIsInNlYXJjaERvY3VtZW50U3VjY2VzcyIsInJlc3VsdHMiLCJzZWFyY2hEb2N1bWVudEZhaWx1cmUiLCJjcmVhdGVEb2N1bWVudFJlcXVlc3QiLCJjcmVhdGVEb2N1bWVudFN1Y2Nlc3MiLCJjcmVhdGVEb2N1bWVudEZhaWx1cmUiLCJlZGl0RG9jdW1lbnRSZXF1ZXN0IiwiZWRpdERvY3VtZW50U3VjY2VzcyIsImRvY3VtZW50IiwiZWRpdERvY3VtZW50RmFpbHVyZSIsImRlbGV0ZURvY3VtZW50UmVxdWVzdCIsImRlbGV0ZURvY3VtZW50U3VjY2VzcyIsImRlbGV0ZURvY3VtZW50RmFpbHVyZSIsImZldGNoRG9jdW1lbnRzIiwiX3JlZiIsIl9jYWxsZWUiLCJkaXNwYXRjaCIsImdldFN0YXRlIiwiX3QiLCJfY29udGV4dCIsImF1dGgiLCJfeDIiLCJfeDMiLCJmZXRjaERvY3VtZW50IiwiZmFicmljSUQiLCJfcmVmMiIsIl9jYWxsZWUyIiwiX3QyIiwiX2NvbnRleHQyIiwiY29uY2F0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiX3g0IiwiX3g1IiwidXBsb2FkRG9jdW1lbnQiLCJmaWxlIiwiX3JlZjMiLCJfY2FsbGVlMyIsInRpbWVvdXRQcm9taXNlIiwiZGF0YSIsImZldGNoUHJvbWlzZSIsImZpbGVDcmVhdGlvbiIsImVycm9yRGF0YSIsImZpbGVBbnN3ZXIiLCJfdDMiLCJfY29udGV4dDMiLCJGb3JtRGF0YSIsImFwcGVuZCIsIm5hbWUiLCJmZXRjaCIsImhlYWRlcnMiLCJtZXRob2QiLCJib2R5IiwicmFjZSIsIm9rIiwianNvbiIsIkVycm9yIiwibWVzc2FnZSIsIl94NiIsIl94NyIsInNlYXJjaERvY3VtZW50IiwicXVlcnkiLCJfcmVmNCIsIl9jYWxsZWU0IiwicmVzcG9uc2UiLCJvYmoiLCJfdDQiLCJfY29udGV4dDQiLCJKU09OIiwic3RyaW5naWZ5IiwiY29uc29sZSIsImRlYnVnIiwiY29udGVudCIsIl94OCIsIl94OSIsImNyZWF0ZURvY3VtZW50IiwiX3JlZjUiLCJfY2FsbGVlNSIsIl90NSIsIl9jb250ZXh0NSIsIkF1dGhvcml6YXRpb24iLCJfeDAiLCJfeDEiLCJlZGl0RG9jdW1lbnQiLCJ0aXRsZSIsIl9yZWY2IiwiX2NhbGxlZTYiLCJfdDYiLCJfY29udGV4dDYiLCJzdGF0dXMiLCJfeDEwIiwiX3gxMSIsImRlbGV0ZURvY3VtZW50IiwiX3JlZjciLCJfY2FsbGVlNyIsIl90NyIsIl9jb250ZXh0NyIsIl94MTIiLCJfeDEzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./actions/documentActions.js\n\n}")},"./actions/index.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{/**\n * Actions Index\n */\n\n\n// # Actions\n// Actions drive the application. They are the only way to change the state.\n\n// ## Contract Actions\nvar _require = __webpack_require__(/*! ../actions/contractActions */ "./actions/contractActions.js"),\n fetchContracts = _require.fetchContracts,\n fetchContract = _require.fetchContract,\n signContract = _require.signContract;\n\n// ## Document Actions\nvar _require2 = __webpack_require__(/*! ../actions/documentActions */ "./actions/documentActions.js"),\n fetchDocuments = _require2.fetchDocuments,\n fetchDocument = _require2.fetchDocument,\n uploadDocument = _require2.uploadDocument,\n searchDocument = _require2.searchDocument,\n createDocument = _require2.createDocument,\n editDocument = _require2.editDocument,\n deleteDocument = _require2.deleteDocument;\n\n// ## Search Actions\nvar _require3 = __webpack_require__(/*! ../actions/searchActions */ "./actions/searchActions.js"),\n searchGlobal = _require3.searchGlobal;\n\n// ## Bridge Actions\nvar _require4 = __webpack_require__(/*! ../actions/bridgeActions */ "./actions/bridgeActions.js"),\n bridgeNetworkStatusUpdate = _require4.bridgeNetworkStatusUpdate;\nmodule.exports = {\n fetchContract: fetchContract,\n fetchContracts: fetchContracts,\n signContract: signContract,\n fetchDocuments: fetchDocuments,\n fetchDocument: fetchDocument,\n searchDocument: searchDocument,\n uploadDocument: uploadDocument,\n createDocument: createDocument,\n editDocument: editDocument,\n deleteDocument: deleteDocument,\n searchGlobal: searchGlobal,\n bridgeNetworkStatusUpdate: bridgeNetworkStatusUpdate\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hY3Rpb25zL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNhOztBQUViO0FBQ0E7O0FBRUE7QUFDQSxJQUFBQSxRQUFBLEdBSUlDLG1CQUFPLENBQUMsZ0VBQTRCLENBQUM7RUFIdkNDLGNBQWMsR0FBQUYsUUFBQSxDQUFkRSxjQUFjO0VBQ2RDLGFBQWEsR0FBQUgsUUFBQSxDQUFiRyxhQUFhO0VBQ2JDLFlBQVksR0FBQUosUUFBQSxDQUFaSSxZQUFZOztBQUdkO0FBQ0EsSUFBQUMsU0FBQSxHQVFJSixtQkFBTyxDQUFDLGdFQUE0QixDQUFDO0VBUHZDSyxjQUFjLEdBQUFELFNBQUEsQ0FBZEMsY0FBYztFQUNkQyxhQUFhLEdBQUFGLFNBQUEsQ0FBYkUsYUFBYTtFQUNiQyxjQUFjLEdBQUFILFNBQUEsQ0FBZEcsY0FBYztFQUNkQyxjQUFjLEdBQUFKLFNBQUEsQ0FBZEksY0FBYztFQUNkQyxjQUFjLEdBQUFMLFNBQUEsQ0FBZEssY0FBYztFQUNkQyxZQUFZLEdBQUFOLFNBQUEsQ0FBWk0sWUFBWTtFQUNaQyxjQUFjLEdBQUFQLFNBQUEsQ0FBZE8sY0FBYzs7QUFHaEI7QUFDQSxJQUFBQyxTQUFBLEdBRUlaLG1CQUFPLENBQUMsNERBQTBCLENBQUM7RUFEckNhLFlBQVksR0FBQUQsU0FBQSxDQUFaQyxZQUFZOztBQUdkO0FBQ0EsSUFBQUMsU0FBQSxHQUVJZCxtQkFBTyxDQUFDLDREQUEwQixDQUFDO0VBRHJDZSx5QkFBeUIsR0FBQUQsU0FBQSxDQUF6QkMseUJBQXlCO0FBRzNCQyxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmZixhQUFhLEVBQUVBLGFBQWE7RUFDNUJELGNBQWMsRUFBRUEsY0FBYztFQUM5QkUsWUFBWSxFQUFFQSxZQUFZO0VBQzFCRSxjQUFjLEVBQUVBLGNBQWM7RUFDOUJDLGFBQWEsRUFBRUEsYUFBYTtFQUM1QkUsY0FBYyxFQUFFQSxjQUFjO0VBQzlCRCxjQUFjLEVBQUVBLGNBQWM7RUFDOUJFLGNBQWMsRUFBRUEsY0FBYztFQUM5QkMsWUFBWSxFQUFFQSxZQUFZO0VBQzFCQyxjQUFjLEVBQUVBLGNBQWM7RUFDOUJFLFlBQVksRUFBRUEsWUFBWTtFQUMxQkUseUJBQXlCLEVBQUVBO0FBQzdCLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2FjdGlvbnMvaW5kZXguanM/NzY5OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFjdGlvbnMgSW5kZXhcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyAjIEFjdGlvbnNcbi8vIEFjdGlvbnMgZHJpdmUgdGhlIGFwcGxpY2F0aW9uLiAgVGhleSBhcmUgdGhlIG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgc3RhdGUuXG5cbi8vICMjIENvbnRyYWN0IEFjdGlvbnNcbmNvbnN0IHtcbiAgZmV0Y2hDb250cmFjdHMsXG4gIGZldGNoQ29udHJhY3QsXG4gIHNpZ25Db250cmFjdFxufSA9IHJlcXVpcmUoJy4uL2FjdGlvbnMvY29udHJhY3RBY3Rpb25zJyk7XG5cbi8vICMjIERvY3VtZW50IEFjdGlvbnNcbmNvbnN0IHtcbiAgZmV0Y2hEb2N1bWVudHMsXG4gIGZldGNoRG9jdW1lbnQsXG4gIHVwbG9hZERvY3VtZW50LFxuICBzZWFyY2hEb2N1bWVudCxcbiAgY3JlYXRlRG9jdW1lbnQsXG4gIGVkaXREb2N1bWVudCxcbiAgZGVsZXRlRG9jdW1lbnRcbn0gPSByZXF1aXJlKCcuLi9hY3Rpb25zL2RvY3VtZW50QWN0aW9ucycpO1xuXG4vLyAjIyBTZWFyY2ggQWN0aW9uc1xuY29uc3Qge1xuICBzZWFyY2hHbG9iYWxcbn0gPSByZXF1aXJlKCcuLi9hY3Rpb25zL3NlYXJjaEFjdGlvbnMnKTtcblxuLy8gIyMgQnJpZGdlIEFjdGlvbnNcbmNvbnN0IHtcbiAgYnJpZGdlTmV0d29ya1N0YXR1c1VwZGF0ZVxufSA9IHJlcXVpcmUoJy4uL2FjdGlvbnMvYnJpZGdlQWN0aW9ucycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmV0Y2hDb250cmFjdDogZmV0Y2hDb250cmFjdCxcbiAgZmV0Y2hDb250cmFjdHM6IGZldGNoQ29udHJhY3RzLFxuICBzaWduQ29udHJhY3Q6IHNpZ25Db250cmFjdCxcbiAgZmV0Y2hEb2N1bWVudHM6IGZldGNoRG9jdW1lbnRzLFxuICBmZXRjaERvY3VtZW50OiBmZXRjaERvY3VtZW50LFxuICBzZWFyY2hEb2N1bWVudDogc2VhcmNoRG9jdW1lbnQsXG4gIHVwbG9hZERvY3VtZW50OiB1cGxvYWREb2N1bWVudCxcbiAgY3JlYXRlRG9jdW1lbnQ6IGNyZWF0ZURvY3VtZW50LFxuICBlZGl0RG9jdW1lbnQ6IGVkaXREb2N1bWVudCxcbiAgZGVsZXRlRG9jdW1lbnQ6IGRlbGV0ZURvY3VtZW50LFxuICBzZWFyY2hHbG9iYWw6IHNlYXJjaEdsb2JhbCxcbiAgYnJpZGdlTmV0d29ya1N0YXR1c1VwZGF0ZTogYnJpZGdlTmV0d29ya1N0YXR1c1VwZGF0ZVxufTtcbiJdLCJuYW1lcyI6WyJfcmVxdWlyZSIsInJlcXVpcmUiLCJmZXRjaENvbnRyYWN0cyIsImZldGNoQ29udHJhY3QiLCJzaWduQ29udHJhY3QiLCJfcmVxdWlyZTIiLCJmZXRjaERvY3VtZW50cyIsImZldGNoRG9jdW1lbnQiLCJ1cGxvYWREb2N1bWVudCIsInNlYXJjaERvY3VtZW50IiwiY3JlYXRlRG9jdW1lbnQiLCJlZGl0RG9jdW1lbnQiLCJkZWxldGVEb2N1bWVudCIsIl9yZXF1aXJlMyIsInNlYXJjaEdsb2JhbCIsIl9yZXF1aXJlNCIsImJyaWRnZU5ldHdvcmtTdGF0dXNVcGRhdGUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./actions/index.js\n\n}')},"./actions/searchActions.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nvar _require = __webpack_require__(/*! ./apiActions */ "./actions/apiActions.js"),\n fetchFromAPI = _require.fetchFromAPI;\n\n// Action types\nvar SEARCH_GLOBAL_REQUEST = \'SEARCH_GLOBAL_REQUEST\';\nvar SEARCH_GLOBAL_SUCCESS = \'SEARCH_GLOBAL_SUCCESS\';\nvar SEARCH_GLOBAL_FAILURE = \'SEARCH_GLOBAL_FAILURE\';\n\n// Action creators\nvar searchGlobalRequest = function searchGlobalRequest() {\n return {\n type: SEARCH_GLOBAL_REQUEST\n };\n};\nvar searchGlobalSuccess = function searchGlobalSuccess(data) {\n return {\n type: SEARCH_GLOBAL_SUCCESS,\n payload: data\n };\n};\nvar searchGlobalFailure = function searchGlobalFailure(error) {\n return {\n type: SEARCH_GLOBAL_FAILURE,\n payload: error\n };\n};\n\n// Thunk action creator\nvar searchGlobal = function searchGlobal(query) {\n return /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(dispatch, getState) {\n var token, fetchPromise, timeoutPromise, response, data, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n dispatch(searchGlobalRequest());\n token = getState().auth.token;\n _context.p = 1;\n fetchPromise = fetch("/", {\n method: \'SEARCH\',\n headers: {\n Authorization: "Bearer ".concat(token),\n \'Content-Type\': \'application/json\'\n },\n body: JSON.stringify({\n query: query\n })\n });\n timeoutPromise = new Promise(function (_, reject) {\n setTimeout(function () {\n reject(new Error(\'Fetch timed out\'));\n }, 15000);\n });\n _context.n = 2;\n return Promise.race([timeoutPromise, fetchPromise]);\n case 2:\n response = _context.v;\n _context.n = 3;\n return response.json();\n case 3:\n data = _context.v;\n dispatch(searchGlobalSuccess(data));\n _context.n = 5;\n break;\n case 4:\n _context.p = 4;\n _t = _context.v;\n dispatch(searchGlobalFailure(_t));\n case 5:\n return _context.a(2);\n }\n }, _callee, null, [[1, 4]]);\n }));\n return function (_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }();\n};\nmodule.exports = {\n searchGlobal: searchGlobal,\n SEARCH_GLOBAL_REQUEST: SEARCH_GLOBAL_REQUEST,\n SEARCH_GLOBAL_SUCCESS: SEARCH_GLOBAL_SUCCESS,\n SEARCH_GLOBAL_FAILURE: SEARCH_GLOBAL_FAILURE\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFBSSxDQUFDLENBQUM7VUFBQTtZQUE1QjlCLElBQUksR0FBQWUsUUFBQSxDQUFBekQsQ0FBQTtZQUNWa0QsUUFBUSxDQUFDVCxtQkFBbUIsQ0FBQ0MsSUFBSSxDQUFDLENBQUM7WUFBQ2UsUUFBQSxDQUFBekUsQ0FBQTtZQUFBO1VBQUE7WUFBQXlFLFFBQUEsQ0FBQTVELENBQUE7WUFBQTJELEVBQUEsR0FBQUMsUUFBQSxDQUFBekQsQ0FBQTtZQUVwQ2tELFFBQVEsQ0FBQ04sbUJBQW1CLENBQUFZLEVBQU0sQ0FBQyxDQUFDO1VBQUM7WUFBQSxPQUFBQyxRQUFBLENBQUF4RCxDQUFBO1FBQUE7TUFBQSxHQUFBZ0QsT0FBQTtJQUFBLENBRXhDO0lBQUEsaUJBQUF3QixFQUFBLEVBQUFDLEdBQUE7TUFBQSxPQUFBMUIsSUFBQSxDQUFBbEIsS0FBQSxPQUFBRCxTQUFBO0lBQUE7RUFBQTtBQUNILENBQUM7QUFHRDhDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2Y5QixZQUFZLEVBQVpBLFlBQVk7RUFDWlYscUJBQXFCLEVBQXJCQSxxQkFBcUI7RUFDckJDLHFCQUFxQixFQUFyQkEscUJBQXFCO0VBQ3JCQyxxQkFBcUIsRUFBckJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vYWN0aW9ucy9zZWFyY2hBY3Rpb25zLmpzPzYzZDAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IGZldGNoRnJvbUFQSSB9ID0gcmVxdWlyZSgnLi9hcGlBY3Rpb25zJyk7XG5cblxuLy8gQWN0aW9uIHR5cGVzXG5jb25zdCBTRUFSQ0hfR0xPQkFMX1JFUVVFU1QgPSAnU0VBUkNIX0dMT0JBTF9SRVFVRVNUJztcbmNvbnN0IFNFQVJDSF9HTE9CQUxfU1VDQ0VTUyA9ICdTRUFSQ0hfR0xPQkFMX1NVQ0NFU1MnO1xuY29uc3QgU0VBUkNIX0dMT0JBTF9GQUlMVVJFID0gJ1NFQVJDSF9HTE9CQUxfRkFJTFVSRSc7XG5cblxuLy8gQWN0aW9uIGNyZWF0b3JzXG5jb25zdCBzZWFyY2hHbG9iYWxSZXF1ZXN0ID0gKCkgPT4gKHsgdHlwZTogU0VBUkNIX0dMT0JBTF9SRVFVRVNUIH0pO1xuY29uc3Qgc2VhcmNoR2xvYmFsU3VjY2VzcyA9IChkYXRhKSA9PiAoeyB0eXBlOiBTRUFSQ0hfR0xPQkFMX1NVQ0NFU1MsIHBheWxvYWQ6IGRhdGEgfSk7XG5jb25zdCBzZWFyY2hHbG9iYWxGYWlsdXJlID0gKGVycm9yKSA9PiAoeyB0eXBlOiBTRUFSQ0hfR0xPQkFMX0ZBSUxVUkUsIHBheWxvYWQ6IGVycm9yIH0pO1xuXG4vLyBUaHVuayBhY3Rpb24gY3JlYXRvclxuY29uc3Qgc2VhcmNoR2xvYmFsID0gKHF1ZXJ5KSA9PiB7XG4gIHJldHVybiBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgZGlzcGF0Y2goc2VhcmNoR2xvYmFsUmVxdWVzdCgpKTtcbiAgICBjb25zdCB7IHRva2VuIH0gPSBnZXRTdGF0ZSgpLmF1dGg7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZldGNoUHJvbWlzZSA9IGZldGNoKGAvYCwge1xuICAgICAgICBtZXRob2Q6ICdTRUFSQ0gnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBxdWVyeTogcXVlcnkgfSksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGZXRjaCB0aW1lZCBvdXQnKSk7XG4gICAgICAgIH0sIDE1MDAwKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW3RpbWVvdXRQcm9taXNlLCBmZXRjaFByb21pc2VdKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBkaXNwYXRjaChzZWFyY2hHbG9iYWxTdWNjZXNzKGRhdGEpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZGlzcGF0Y2goc2VhcmNoR2xvYmFsRmFpbHVyZShlcnJvcikpO1xuICAgIH1cbiAgfTtcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNlYXJjaEdsb2JhbCxcbiAgU0VBUkNIX0dMT0JBTF9SRVFVRVNULFxuICBTRUFSQ0hfR0xPQkFMX1NVQ0NFU1MsXG4gIFNFQVJDSF9HTE9CQUxfRkFJTFVSRVxufTtcbiJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJTeW1ib2wiLCJuIiwiaXRlcmF0b3IiLCJvIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl9yZXF1aXJlIiwicmVxdWlyZSIsImZldGNoRnJvbUFQSSIsIlNFQVJDSF9HTE9CQUxfUkVRVUVTVCIsIlNFQVJDSF9HTE9CQUxfU1VDQ0VTUyIsIlNFQVJDSF9HTE9CQUxfRkFJTFVSRSIsInNlYXJjaEdsb2JhbFJlcXVlc3QiLCJ0eXBlIiwic2VhcmNoR2xvYmFsU3VjY2VzcyIsImRhdGEiLCJwYXlsb2FkIiwic2VhcmNoR2xvYmFsRmFpbHVyZSIsImVycm9yIiwic2VhcmNoR2xvYmFsIiwicXVlcnkiLCJfcmVmIiwiX2NhbGxlZSIsImRpc3BhdGNoIiwiZ2V0U3RhdGUiLCJ0b2tlbiIsImZldGNoUHJvbWlzZSIsInRpbWVvdXRQcm9taXNlIiwicmVzcG9uc2UiLCJfdCIsIl9jb250ZXh0IiwiYXV0aCIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJjb25jYXQiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIl8iLCJyZWplY3QiLCJzZXRUaW1lb3V0IiwiRXJyb3IiLCJyYWNlIiwianNvbiIsIl94IiwiX3gyIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./actions/searchActions.js\n\n}')},"./components/ActivitiesHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link,\n useSearchParams = _require.useSearchParams;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Segment = _require2.Segment;\nvar ActivityStream = __webpack_require__(/*! ./ActivityStream */ "./components/ActivityStream.js");\nvar _require3 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require3.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require3.subscribeHubUiFeatureFlags;\nvar ACTIVITY_FILTERS = [{\n value: \'all\',\n label: \'All\',\n icon: \'list layout\'\n}, {\n value: \'chat\',\n label: \'Chat\',\n icon: \'comments\'\n}, {\n value: \'bitcoin\',\n label: \'Bitcoin\',\n icon: \'bitcoin\'\n}, {\n value: \'documents\',\n label: \'Documents\',\n icon: \'file outline\'\n}, {\n value: \'network\',\n label: \'Network\',\n icon: \'sitemap\'\n}];\nvar VALID_FILTER = new Set(ACTIVITY_FILTERS.map(function (f) {\n return f.value;\n}));\nfunction ActivitiesUiNotifications(_ref) {\n var ufProp = _ref.uf;\n var uf = ufProp || loadHubUiFeatureFlags();\n var _React$useState = React.useState(function () {\n return readUiNotifications();\n }),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n list = _React$useState2[0],\n setList = _React$useState2[1];\n React.useEffect(function () {\n var sync = function sync() {\n return setList(readUiNotifications());\n };\n if (typeof window !== \'undefined\') {\n window.addEventListener(UPDATED_EVENT, sync);\n var onStorage = function onStorage(ev) {\n if (ev && ev.key === STORAGE_KEY) sync();\n };\n window.addEventListener(\'storage\', onStorage);\n return function () {\n window.removeEventListener(UPDATED_EVENT, sync);\n window.removeEventListener(\'storage\', onStorage);\n };\n }\n return undefined;\n }, []);\n if (list.length === 0) return null;\n return /*#__PURE__*/React.createElement(Segment, {\n id: "in-app-notifications",\n secondary: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bell outline"\n }), "In-app notifications"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginBottom: \'0.75em\'\n }\n }, "Wallet, Payjoin, and hub toasts. Open a link, copy details, or dismiss."), list.map(function (n) {\n var openTo = notificationOpenHref(n.href, uf);\n return /*#__PURE__*/React.createElement(Segment, {\n key: n.id,\n size: "small",\n style: {\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n fontWeight: 600\n }\n }, n.title), n.subtitle && /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.85em\',\n color: \'#888\',\n wordBreak: \'break-word\',\n marginTop: \'0.25em\'\n }\n }, n.subtitle), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.35em\',\n alignItems: \'center\',\n marginTop: \'0.5em\'\n }\n }, openTo && /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: openTo,\n size: "mini",\n primary: true\n }, "Open"), n.copyText && /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n icon: true,\n title: "Copy to clipboard",\n onClick: function onClick() {\n return copyToClipboard(n.copyText);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy outline"\n })), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n icon: true,\n title: "Dismiss",\n onClick: function onClick() {\n return removeUiNotification(n.id);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "close"\n }))));\n }), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return clearUiNotifications();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "trash"\n }), "Clear all"));\n}\n\n/**\n * Canonical hub activity feed (`/activities`).\n */\nfunction ActivitiesHome(props) {\n var ref = props.bridgeRef || props.bridge;\n var adminToken = props.adminToken;\n var onRequireUnlock = props.onRequireUnlock;\n var identity = props.identity;\n var _useSearchParams = useSearchParams(),\n _useSearchParams2 = _slicedToArray(_useSearchParams, 2),\n searchParams = _useSearchParams2[0],\n setSearchParams = _useSearchParams2[1];\n var _React$useState3 = React.useState(0),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n flagTick = _React$useState4[0],\n setFlagTick = _React$useState4[1];\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setFlagTick(function (n) {\n return n + 1;\n });\n });\n }, []);\n void flagTick;\n var uf = loadHubUiFeatureFlags();\n var rawType = (searchParams.get(\'type\') || \'all\').trim().toLowerCase();\n var entryTypeFilter = VALID_FILTER.has(rawType) ? rawType : \'all\';\n var setEntryTypeFilter = function setEntryTypeFilter(value) {\n setSearchParams(function (prev) {\n var p = new URLSearchParams(prev);\n if (!value || value === \'all\') p["delete"](\'type\');else p.set(\'type\', value);\n return p;\n }, {\n replace: true\n });\n };\n return /*#__PURE__*/React.createElement("fabric-hub-activities", {\n "class": "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.35em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n as: Link,\n to: "/",\n size: "small",\n icon: true,\n labelPosition: "left",\n "aria-label": "Back to home"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Home"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/notifications",\n basic: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n title: "Wallet, Payjoin, and hub toasts (same as the bell)",\n "aria-label": "Notifications \\u2014 in-app toasts"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bell outline",\n "aria-hidden": "true"\n }), "Notifications"), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n as: Link,\n to: "/settings/security",\n size: "small",\n icon: true,\n labelPosition: "left",\n "aria-label": "Security, delegation tokens, and session audit"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield alternate",\n "aria-hidden": "true"\n }), "Security & delegation"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n title: "Bitcoin hub page",\n "aria-label": "Bitcoin dashboard"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin",\n "aria-hidden": "true"\n }), "Bitcoin"), uf.bitcoinPayments ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/payments",\n basic: true,\n size: "small",\n title: "Payjoin and payments"\n }, "Payments") : null, uf.bitcoinInvoices ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/invoices#fabric-invoices-tab-demo",\n basic: true,\n size: "small",\n title: "Invoices walkthrough"\n }, "Invoices") : null, uf.bitcoinResources ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/resources",\n basic: true,\n size: "small",\n title: "HTTP resources and L1 payment verification"\n }, "Resources") : null, uf.bitcoinCrowdfund ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/crowdfunds",\n basic: true,\n size: "small",\n icon: true,\n title: "Taproot campaign vault"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "heart"\n }), "Crowdfunds") : null), /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "activities-page-heading",\n "aria-describedby": "activities-page-summary"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "activities-page-heading",\n style: {\n marginTop: \'0.75em\'\n }\n }, "Activities"), /*#__PURE__*/React.createElement("p", {\n id: "activities-page-summary",\n style: {\n color: \'#666\'\n }\n }, "Hub message log, chat, Bitcoin blocks, and network events. Wallet, Payjoin, and other short toasts live on", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/notifications"\n }, "Notifications"), " (same list as the bell in the top bar)."), /*#__PURE__*/React.createElement("div", {\n role: "toolbar",\n "aria-label": "Activity type filter",\n style: {\n marginBottom: \'0.75em\',\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.35em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement("span", {\n style: {\n fontSize: \'0.9em\',\n color: \'#666\',\n marginRight: \'0.25em\'\n }\n }, "Show:"), ACTIVITY_FILTERS.map(function (f) {\n var active = entryTypeFilter === f.value;\n return /*#__PURE__*/React.createElement(Button, {\n key: f.value,\n size: "small",\n type: "button",\n active: active,\n primary: active,\n basic: !active,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return setEntryTypeFilter(f.value);\n },\n "aria-pressed": active,\n "aria-label": f.value === \'all\' ? \'Show all activity types\' : "Filter activity feed: ".concat(f.label, " only")\n }, /*#__PURE__*/React.createElement(Icon, {\n name: f.icon\n }), f.label);\n })), /*#__PURE__*/React.createElement(ActivityStream, {\n bridge: ref,\n bridgeRef: ref,\n adminToken: adminToken,\n identity: identity,\n onRequireUnlock: onRequireUnlock,\n includeHeader: false,\n entryTypeFilter: entryTypeFilter\n }))));\n}\nmodule.exports = ActivitiesHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0FjdGl2aXRpZXNIb21lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLGVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBQyxlQUFBLENBQUFGLENBQUEsS0FBQUcscUJBQUEsQ0FBQUgsQ0FBQSxFQUFBQyxDQUFBLEtBQUFHLDJCQUFBLENBQUFKLENBQUEsRUFBQUMsQ0FBQSxLQUFBSSxnQkFBQTtBQUFBLFNBQUFBLGlCQUFBLGNBQUFDLFNBQUE7QUFBQSxTQUFBRiw0QkFBQUosQ0FBQSxFQUFBTyxDQUFBLFFBQUFQLENBQUEsMkJBQUFBLENBQUEsU0FBQVEsaUJBQUEsQ0FBQVIsQ0FBQSxFQUFBTyxDQUFBLE9BQUFFLENBQUEsTUFBQUMsUUFBQSxDQUFBQyxJQUFBLENBQUFYLENBQUEsRUFBQVksS0FBQSw2QkFBQUgsQ0FBQSxJQUFBVCxDQUFBLENBQUFhLFdBQUEsS0FBQUosQ0FBQSxHQUFBVCxDQUFBLENBQUFhLFdBQUEsQ0FBQUMsSUFBQSxhQUFBTCxDQUFBLGNBQUFBLENBQUEsR0FBQU0sS0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLG9CQUFBUyxDQUFBLCtDQUFBUSxJQUFBLENBQUFSLENBQUEsSUFBQUQsaUJBQUEsQ0FBQVIsQ0FBQSxFQUFBTyxDQUFBO0FBQUEsU0FBQUMsa0JBQUFSLENBQUEsRUFBQU8sQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQVAsQ0FBQSxDQUFBa0IsTUFBQSxNQUFBWCxDQUFBLEdBQUFQLENBQUEsQ0FBQWtCLE1BQUEsWUFBQWpCLENBQUEsTUFBQWtCLENBQUEsR0FBQUosS0FBQSxDQUFBUixDQUFBLEdBQUFOLENBQUEsR0FBQU0sQ0FBQSxFQUFBTixDQUFBLElBQUFrQixDQUFBLENBQUFsQixDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxVQUFBa0IsQ0FBQTtBQUFBLFNBQUFoQixzQkFBQUgsQ0FBQSxFQUFBb0IsQ0FBQSxRQUFBWCxDQUFBLFdBQUFULENBQUEsZ0NBQUFxQixNQUFBLElBQUFyQixDQUFBLENBQUFxQixNQUFBLENBQUFDLFFBQUEsS0FBQXRCLENBQUEsNEJBQUFTLENBQUEsUUFBQVIsQ0FBQSxFQUFBa0IsQ0FBQSxFQUFBSSxDQUFBLEVBQUFDLENBQUEsRUFBQWpCLENBQUEsT0FBQWtCLENBQUEsT0FBQUMsQ0FBQSxpQkFBQUgsQ0FBQSxJQUFBZCxDQUFBLEdBQUFBLENBQUEsQ0FBQUUsSUFBQSxDQUFBWCxDQUFBLEdBQUEyQixJQUFBLFFBQUFQLENBQUEsUUFBQVEsTUFBQSxDQUFBbkIsQ0FBQSxNQUFBQSxDQUFBLFVBQUFnQixDQUFBLHVCQUFBQSxDQUFBLElBQUF4QixDQUFBLEdBQUFzQixDQUFBLENBQUFaLElBQUEsQ0FBQUYsQ0FBQSxHQUFBb0IsSUFBQSxNQUFBdEIsQ0FBQSxDQUFBdUIsSUFBQSxDQUFBN0IsQ0FBQSxDQUFBOEIsS0FBQSxHQUFBeEIsQ0FBQSxDQUFBVyxNQUFBLEtBQUFFLENBQUEsR0FBQUssQ0FBQSxpQkFBQXpCLENBQUEsSUFBQTBCLENBQUEsT0FBQVAsQ0FBQSxHQUFBbkIsQ0FBQSx5QkFBQXlCLENBQUEsWUFBQWhCLENBQUEsZUFBQWUsQ0FBQSxHQUFBZixDQUFBLGNBQUFtQixNQUFBLENBQUFKLENBQUEsTUFBQUEsQ0FBQSwyQkFBQUUsQ0FBQSxRQUFBUCxDQUFBLGFBQUFaLENBQUE7QUFBQSxTQUFBTCxnQkFBQUYsQ0FBQSxRQUFBZSxLQUFBLENBQUFpQixPQUFBLENBQUFoQyxDQUFBLFVBQUFBLENBQUE7QUFFYixJQUFNaUMsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLDRDQUFPLENBQUM7QUFDOUIsSUFBQUMsUUFBQSxHQUFrQ0QsbUJBQU8sQ0FBQyx1RUFBa0IsQ0FBQztFQUFyREUsSUFBSSxHQUFBRCxRQUFBLENBQUpDLElBQUk7RUFBRUMsZUFBZSxHQUFBRixRQUFBLENBQWZFLGVBQWU7QUFDN0IsSUFBQUMsU0FBQSxHQUEwQ0osbUJBQU8sQ0FBQyw0RUFBbUIsQ0FBQztFQUE5REssTUFBTSxHQUFBRCxTQUFBLENBQU5DLE1BQU07RUFBRUMsTUFBTSxHQUFBRixTQUFBLENBQU5FLE1BQU07RUFBRUMsSUFBSSxHQUFBSCxTQUFBLENBQUpHLElBQUk7RUFBRUMsT0FBTyxHQUFBSixTQUFBLENBQVBJLE9BQU87QUFDckMsSUFBTUMsY0FBYyxHQUFHVCxtQkFBTyxDQUFDLHdEQUFrQixDQUFDO0FBQ2xELElBQUFVLFNBQUEsR0FHSVYsbUJBQU8sQ0FBQyx3RUFBZ0MsQ0FBQztFQUYzQ1cscUJBQXFCLEdBQUFELFNBQUEsQ0FBckJDLHFCQUFxQjtFQUNyQkMsMEJBQTBCLEdBQUFGLFNBQUEsQ0FBMUJFLDBCQUEwQjtBQUc1QixJQUFNQyxnQkFBZ0IsR0FBRyxDQUN2QjtFQUFFaEIsS0FBSyxFQUFFLEtBQUs7RUFBRWlCLEtBQUssRUFBRSxLQUFLO0VBQUVDLElBQUksRUFBRTtBQUFjLENBQUMsRUFDbkQ7RUFBRWxCLEtBQUssRUFBRSxNQUFNO0VBQUVpQixLQUFLLEVBQUUsTUFBTTtFQUFFQyxJQUFJLEVBQUU7QUFBVyxDQUFDLEVBQ2xEO0VBQUVsQixLQUFLLEVBQUUsU0FBUztFQUFFaUIsS0FBSyxFQUFFLFNBQVM7RUFBRUMsSUFBSSxFQUFFO0FBQVUsQ0FBQyxFQUN2RDtFQUFFbEIsS0FBSyxFQUFFLFdBQVc7RUFBRWlCLEtBQUssRUFBRSxXQUFXO0VBQUVDLElBQUksRUFBRTtBQUFlLENBQUMsRUFDaEU7RUFBRWxCLEtBQUssRUFBRSxTQUFTO0VBQUVpQixLQUFLLEVBQUUsU0FBUztFQUFFQyxJQUFJLEVBQUU7QUFBVSxDQUFDLENBQ3hEO0FBRUQsSUFBTUMsWUFBWSxHQUFHLElBQUlDLEdBQUcsQ0FBQ0osZ0JBQWdCLENBQUNLLEdBQUcsQ0FBQyxVQUFDM0IsQ0FBQztFQUFBLE9BQUtBLENBQUMsQ0FBQ00sS0FBSztBQUFBLEVBQUMsQ0FBQztBQUVsRSxTQUFTc0IseUJBQXlCQSxDQUFBQyxJQUFBLEVBQWtCO0VBQUEsSUFBVkMsTUFBTSxHQUFBRCxJQUFBLENBQVZFLEVBQUU7RUFDdEMsSUFBTUEsRUFBRSxHQUFHRCxNQUFNLElBQUlWLHFCQUFxQixDQUFDLENBQUM7RUFDNUMsSUFBQVksZUFBQSxHQUF3QnhCLEtBQUssQ0FBQ3lCLFFBQVEsQ0FBQztNQUFBLE9BQU1DLG1CQUFtQixDQUFDLENBQUM7SUFBQSxFQUFDO0lBQUFDLGdCQUFBLEdBQUE3RCxjQUFBLENBQUEwRCxlQUFBO0lBQTVESSxJQUFJLEdBQUFELGdCQUFBO0lBQUVFLE9BQU8sR0FBQUYsZ0JBQUE7RUFDcEIzQixLQUFLLENBQUM4QixTQUFTLENBQUMsWUFBTTtJQUNwQixJQUFNQyxJQUFJLEdBQUcsU0FBUEEsSUFBSUEsQ0FBQTtNQUFBLE9BQVNGLE9BQU8sQ0FBQ0gsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQUE7SUFDakQsSUFBSSxPQUFPTSxNQUFNLEtBQUssV0FBVyxFQUFFO01BQ2pDQSxNQUFNLENBQUNDLGdCQUFnQixDQUFDQyxhQUFhLEVBQUVILElBQUksQ0FBQztNQUM1QyxJQUFNSSxTQUFTLEdBQUcsU0FBWkEsU0FBU0EsQ0FBSUMsRUFBRSxFQUFLO1FBQ3hCLElBQUlBLEVBQUUsSUFBSUEsRUFBRSxDQUFDQyxHQUFHLEtBQUtDLFdBQVcsRUFBRVAsSUFBSSxDQUFDLENBQUM7TUFDMUMsQ0FBQztNQUNEQyxNQUFNLENBQUNDLGdCQUFnQixDQUFDLFNBQVMsRUFBRUUsU0FBUyxDQUFDO01BQzdDLE9BQU8sWUFBTTtRQUNYSCxNQUFNLENBQUNPLG1CQUFtQixDQUFDTCxhQUFhLEVBQUVILElBQUksQ0FBQztRQUMvQ0MsTUFBTSxDQUFDTyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUVKLFNBQVMsQ0FBQztNQUNsRCxDQUFDO0lBQ0g7SUFDQSxPQUFPSyxTQUFTO0VBQ2xCLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFJWixJQUFJLENBQUMzQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8sSUFBSTtFQUVsQyxvQkFDRWUsS0FBQSxDQUFBeUMsYUFBQSxDQUFDaEMsT0FBTztJQUFDaUMsRUFBRSxFQUFDLHNCQUFzQjtJQUFDQyxTQUFTO0lBQUNDLEtBQUssRUFBRTtNQUFFQyxZQUFZLEVBQUU7SUFBTTtFQUFFLGdCQUMxRTdDLEtBQUEsQ0FBQXlDLGFBQUEsQ0FBQ2xDLE1BQU07SUFBQ3VDLEVBQUUsRUFBQyxJQUFJO0lBQUNGLEtBQUssRUFBRTtNQUFFRyxTQUFTLEVBQUU7SUFBRTtFQUFFLGdCQUN0Qy9DLEtBQUEsQ0FBQXlDLGFBQUEsQ0FBQ2pDLElBQUk7SUFBQzNCLElBQUksRUFBQztFQUFjLENBQUUsQ0FBQyx3QkFFdEIsQ0FBQyxlQUNUbUIsS0FBQSxDQUFBeUMsYUFBQTtJQUFHRyxLQUFLLEVBQUU7TUFBRUksS0FBSyxFQUFFLE1BQU07TUFBRUMsUUFBUSxFQUFFLE9BQU87TUFBRUosWUFBWSxFQUFFO0lBQVM7RUFBRSxHQUFDLHlFQUVyRSxDQUFDLEVBQ0hqQixJQUFJLENBQUNULEdBQUcsQ0FBQyxVQUFDakMsQ0FBQyxFQUFLO0lBQ2YsSUFBTWdFLE1BQU0sR0FBR0Msb0JBQW9CLENBQUNqRSxDQUFDLENBQUNrRSxJQUFJLEVBQUU3QixFQUFFLENBQUM7SUFDL0Msb0JBQ0F2QixLQUFBLENBQUF5QyxhQUFBLENBQUNoQyxPQUFPO01BQUM0QixHQUFHLEVBQUVuRCxDQUFDLENBQUN3RCxFQUFHO01BQUNXLElBQUksRUFBQyxPQUFPO01BQUNULEtBQUssRUFBRTtRQUFFQyxZQUFZLEVBQUU7TUFBUTtJQUFFLGdCQUNoRTdDLEtBQUEsQ0FBQXlDLGFBQUE7TUFBS0csS0FBSyxFQUFFO1FBQUVVLFVBQVUsRUFBRTtNQUFJO0lBQUUsR0FBRXBFLENBQUMsQ0FBQ3FFLEtBQVcsQ0FBQyxFQUMvQ3JFLENBQUMsQ0FBQ3NFLFFBQVEsaUJBQ1R4RCxLQUFBLENBQUF5QyxhQUFBO01BQUtHLEtBQUssRUFBRTtRQUFFSyxRQUFRLEVBQUUsUUFBUTtRQUFFRCxLQUFLLEVBQUUsTUFBTTtRQUFFUyxTQUFTLEVBQUUsWUFBWTtRQUFFVixTQUFTLEVBQUU7TUFBUztJQUFFLEdBQzdGN0QsQ0FBQyxDQUFDc0UsUUFDQSxDQUNOLGVBQ0R4RCxLQUFBLENBQUF5QyxhQUFBO01BQUtHLEtBQUssRUFBRTtRQUFFYyxPQUFPLEVBQUUsTUFBTTtRQUFFQyxRQUFRLEVBQUUsTUFBTTtRQUFFQyxHQUFHLEVBQUUsUUFBUTtRQUFFQyxVQUFVLEVBQUUsUUFBUTtRQUFFZCxTQUFTLEVBQUU7TUFBUTtJQUFFLEdBQ3hHRyxNQUFNLGlCQUNMbEQsS0FBQSxDQUFBeUMsYUFBQSxDQUFDbkMsTUFBTTtNQUFDd0MsRUFBRSxFQUFFM0MsSUFBSztNQUFDMkQsRUFBRSxFQUFFWixNQUFPO01BQUNHLElBQUksRUFBQyxNQUFNO01BQUNVLE9BQU87SUFBQSxHQUFDLE1BRTFDLENBQ1QsRUFDQTdFLENBQUMsQ0FBQzhFLFFBQVEsaUJBQ1RoRSxLQUFBLENBQUF5QyxhQUFBLENBQUNuQyxNQUFNO01BQ0wrQyxJQUFJLEVBQUMsTUFBTTtNQUNYWSxLQUFLO01BQ0xqRCxJQUFJO01BQ0p1QyxLQUFLLEVBQUMsbUJBQW1CO01BQ3pCVyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtRQUFBLE9BQVFDLGVBQWUsQ0FBQ2pGLENBQUMsQ0FBQzhFLFFBQVEsQ0FBQztNQUFBO0lBQUMsZ0JBRTNDaEUsS0FBQSxDQUFBeUMsYUFBQSxDQUFDakMsSUFBSTtNQUFDM0IsSUFBSSxFQUFDO0lBQWMsQ0FBRSxDQUNyQixDQUNULGVBQ0RtQixLQUFBLENBQUF5QyxhQUFBLENBQUNuQyxNQUFNO01BQ0wrQyxJQUFJLEVBQUMsTUFBTTtNQUNYWSxLQUFLO01BQ0xqRCxJQUFJO01BQ0p1QyxLQUFLLEVBQUMsU0FBUztNQUNmVyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtRQUFBLE9BQVFFLG9CQUFvQixDQUFDbEYsQ0FBQyxDQUFDd0QsRUFBRSxDQUFDO01BQUE7SUFBQyxnQkFFMUMxQyxLQUFBLENBQUF5QyxhQUFBLENBQUNqQyxJQUFJO01BQUMzQixJQUFJLEVBQUM7SUFBTyxDQUFFLENBQ2QsQ0FDTCxDQUNFLENBQUM7RUFFWixDQUFDLENBQUMsZUFDRm1CLEtBQUEsQ0FBQXlDLGFBQUEsQ0FBQ25DLE1BQU07SUFBQytDLElBQUksRUFBQyxPQUFPO0lBQUNZLEtBQUs7SUFBQ2pELElBQUk7SUFBQ3FELGFBQWEsRUFBQyxNQUFNO0lBQUNILE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO01BQUEsT0FBUUksb0JBQW9CLENBQUMsQ0FBQztJQUFBO0VBQUMsZ0JBQ3pGdEUsS0FBQSxDQUFBeUMsYUFBQSxDQUFDakMsSUFBSTtJQUFDM0IsSUFBSSxFQUFDO0VBQU8sQ0FBRSxDQUFDLGFBRWYsQ0FDRCxDQUFDO0FBRWQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzBGLGNBQWNBLENBQUVDLEtBQUssRUFBRTtFQUM5QixJQUFNQyxHQUFHLEdBQUdELEtBQUssQ0FBQ0UsU0FBUyxJQUFJRixLQUFLLENBQUNHLE1BQU07RUFDM0MsSUFBTUMsVUFBVSxHQUFHSixLQUFLLENBQUNJLFVBQVU7RUFDbkMsSUFBTUMsZUFBZSxHQUFHTCxLQUFLLENBQUNLLGVBQWU7RUFDN0MsSUFBTUMsUUFBUSxHQUFHTixLQUFLLENBQUNNLFFBQVE7RUFDL0IsSUFBQUMsZ0JBQUEsR0FBd0MzRSxlQUFlLENBQUMsQ0FBQztJQUFBNEUsaUJBQUEsR0FBQWxILGNBQUEsQ0FBQWlILGdCQUFBO0lBQWxERSxZQUFZLEdBQUFELGlCQUFBO0lBQUVFLGVBQWUsR0FBQUYsaUJBQUE7RUFDcEMsSUFBQUcsZ0JBQUEsR0FBZ0NuRixLQUFLLENBQUN5QixRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQUEyRCxnQkFBQSxHQUFBdEgsY0FBQSxDQUFBcUgsZ0JBQUE7SUFBMUNFLFFBQVEsR0FBQUQsZ0JBQUE7SUFBRUUsV0FBVyxHQUFBRixnQkFBQTtFQUM1QnBGLEtBQUssQ0FBQzhCLFNBQVMsQ0FBQztJQUFBLE9BQU1qQiwwQkFBMEIsQ0FBQztNQUFBLE9BQU15RSxXQUFXLENBQUMsVUFBQ3BHLENBQUM7UUFBQSxPQUFLQSxDQUFDLEdBQUcsQ0FBQztNQUFBLEVBQUM7SUFBQSxFQUFDO0VBQUEsR0FBRSxFQUFFLENBQUM7RUFDdEYsS0FBS21HLFFBQVE7RUFDYixJQUFNOUQsRUFBRSxHQUFHWCxxQkFBcUIsQ0FBQyxDQUFDO0VBQ2xDLElBQU0yRSxPQUFPLEdBQUcsQ0FBQ04sWUFBWSxDQUFDTyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFQyxJQUFJLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQztFQUN4RSxJQUFJQyxlQUFlLEdBQUcxRSxZQUFZLENBQUMyRSxHQUFHLENBQUNMLE9BQU8sQ0FBQyxHQUFHQSxPQUFPLEdBQUcsS0FBSztFQUVqRSxJQUFNTSxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFJL0YsS0FBSyxFQUFLO0lBQ3BDb0YsZUFBZSxDQUFDLFVBQUNZLElBQUksRUFBSztNQUN4QixJQUFNQyxDQUFDLEdBQUcsSUFBSUMsZUFBZSxDQUFDRixJQUFJLENBQUM7TUFDbkMsSUFBSSxDQUFDaEcsS0FBSyxJQUFJQSxLQUFLLEtBQUssS0FBSyxFQUFFaUcsQ0FBQyxVQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FDM0NBLENBQUMsQ0FBQ0UsR0FBRyxDQUFDLE1BQU0sRUFBRW5HLEtBQUssQ0FBQztNQUN6QixPQUFPaUcsQ0FBQztJQUNWLENBQUMsRUFBRTtNQUFFRyxPQUFPLEVBQUU7SUFBSyxDQUFDLENBQUM7RUFDdkIsQ0FBQztFQUVELG9CQUNFbEcsS0FBQSxDQUFBeUMsYUFBQTtJQUF1QixTQUFNO0VBQVMsZ0JBQ3BDekMsS0FBQSxDQUFBeUMsYUFBQSxDQUFDaEMsT0FBTyxxQkFDTlQsS0FBQSxDQUFBeUMsYUFBQTtJQUFLRyxLQUFLLEVBQUU7TUFBRWMsT0FBTyxFQUFFLE1BQU07TUFBRUMsUUFBUSxFQUFFLE1BQU07TUFBRUMsR0FBRyxFQUFFLFFBQVE7TUFBRUMsVUFBVSxFQUFFO0lBQVM7RUFBRSxnQkFDckY3RCxLQUFBLENBQUF5QyxhQUFBLENBQUNuQyxNQUFNO0lBQUMyRCxLQUFLO0lBQUNuQixFQUFFLEVBQUUzQyxJQUFLO0lBQUMyRCxFQUFFLEVBQUMsR0FBRztJQUFDVCxJQUFJLEVBQUMsT0FBTztJQUFDckMsSUFBSTtJQUFDcUQsYUFBYSxFQUFDLE1BQU07SUFBQyxjQUFXO0VBQWMsZ0JBQzdGckUsS0FBQSxDQUFBeUMsYUFBQSxDQUFDakMsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLFlBQVk7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLFFBRXZDLENBQUMsZUFDVG1CLEtBQUEsQ0FBQXlDLGFBQUEsQ0FBQ25DLE1BQU07SUFDTHdDLEVBQUUsRUFBRTNDLElBQUs7SUFDVDJELEVBQUUsRUFBQyxnQkFBZ0I7SUFDbkJHLEtBQUs7SUFDTFosSUFBSSxFQUFDLE9BQU87SUFDWnJDLElBQUk7SUFDSnFELGFBQWEsRUFBQyxNQUFNO0lBQ3BCZCxLQUFLLEVBQUMsb0RBQW9EO0lBQzFELGNBQVc7RUFBK0IsZ0JBRTFDdkQsS0FBQSxDQUFBeUMsYUFBQSxDQUFDakMsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLGNBQWM7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLGlCQUV6QyxDQUFDLGVBQ1RtQixLQUFBLENBQUF5QyxhQUFBLENBQUNuQyxNQUFNO0lBQ0wyRCxLQUFLO0lBQ0xuQixFQUFFLEVBQUUzQyxJQUFLO0lBQ1QyRCxFQUFFLEVBQUMsb0JBQW9CO0lBQ3ZCVCxJQUFJLEVBQUMsT0FBTztJQUNackMsSUFBSTtJQUNKcUQsYUFBYSxFQUFDLE1BQU07SUFDcEIsY0FBVztFQUFnRCxnQkFFM0RyRSxLQUFBLENBQUF5QyxhQUFBLENBQUNqQyxJQUFJO0lBQUMzQixJQUFJLEVBQUMsa0JBQWtCO0lBQUMsZUFBWTtFQUFNLENBQUUsQ0FBQyx5QkFFN0MsQ0FBQyxlQUNUbUIsS0FBQSxDQUFBeUMsYUFBQSxDQUFDbkMsTUFBTTtJQUNMd0MsRUFBRSxFQUFFM0MsSUFBSztJQUNUMkQsRUFBRSxFQUFDLG1CQUFtQjtJQUN0QkcsS0FBSztJQUNMWixJQUFJLEVBQUMsT0FBTztJQUNackMsSUFBSTtJQUNKcUQsYUFBYSxFQUFDLE1BQU07SUFDcEJkLEtBQUssRUFBQyxrQkFBa0I7SUFDeEIsY0FBVztFQUFtQixnQkFFOUJ2RCxLQUFBLENBQUF5QyxhQUFBLENBQUNqQyxJQUFJO0lBQUMzQixJQUFJLEVBQUMsU0FBUztJQUFDLGVBQVk7RUFBTSxDQUFFLENBQUMsV0FFcEMsQ0FBQyxFQUNSMEMsRUFBRSxDQUFDNEUsZUFBZSxnQkFDakJuRyxLQUFBLENBQUF5QyxhQUFBLENBQUNuQyxNQUFNO0lBQUN3QyxFQUFFLEVBQUUzQyxJQUFLO0lBQUMyRCxFQUFFLEVBQUMsV0FBVztJQUFDRyxLQUFLO0lBQUNaLElBQUksRUFBQyxPQUFPO0lBQUNFLEtBQUssRUFBQztFQUFzQixHQUFDLFVBRXpFLENBQUMsR0FDUCxJQUFJLEVBQ1BoQyxFQUFFLENBQUM2RSxlQUFlLGdCQUNqQnBHLEtBQUEsQ0FBQXlDLGFBQUEsQ0FBQ25DLE1BQU07SUFBQ3dDLEVBQUUsRUFBRTNDLElBQUs7SUFBQzJELEVBQUUsRUFBQyxxREFBcUQ7SUFBQ0csS0FBSztJQUFDWixJQUFJLEVBQUMsT0FBTztJQUFDRSxLQUFLLEVBQUM7RUFBc0IsR0FBQyxVQUVuSCxDQUFDLEdBQ1AsSUFBSSxFQUNQaEMsRUFBRSxDQUFDOEUsZ0JBQWdCLGdCQUNsQnJHLEtBQUEsQ0FBQXlDLGFBQUEsQ0FBQ25DLE1BQU07SUFBQ3dDLEVBQUUsRUFBRTNDLElBQUs7SUFBQzJELEVBQUUsRUFBQyw2QkFBNkI7SUFBQ0csS0FBSztJQUFDWixJQUFJLEVBQUMsT0FBTztJQUFDRSxLQUFLLEVBQUM7RUFBNEMsR0FBQyxXQUVqSCxDQUFDLEdBQ1AsSUFBSSxFQUNQaEMsRUFBRSxDQUFDK0UsZ0JBQWdCLGdCQUNsQnRHLEtBQUEsQ0FBQXlDLGFBQUEsQ0FBQ25DLE1BQU07SUFBQ3dDLEVBQUUsRUFBRTNDLElBQUs7SUFBQzJELEVBQUUsRUFBQyw4QkFBOEI7SUFBQ0csS0FBSztJQUFDWixJQUFJLEVBQUMsT0FBTztJQUFDckMsSUFBSTtJQUFDdUMsS0FBSyxFQUFDO0VBQXdCLGdCQUN4R3ZELEtBQUEsQ0FBQXlDLGFBQUEsQ0FBQ2pDLElBQUk7SUFBQzNCLElBQUksRUFBQztFQUFPLENBQUUsQ0FBQyxjQUVmLENBQUMsR0FDUCxJQUNELENBQUMsZUFDTm1CLEtBQUEsQ0FBQXlDLGFBQUE7SUFBUyxtQkFBZ0IseUJBQXlCO0lBQUMsb0JBQWlCO0VBQXlCLGdCQUMzRnpDLEtBQUEsQ0FBQXlDLGFBQUEsQ0FBQ2xDLE1BQU07SUFBQ3VDLEVBQUUsRUFBQyxJQUFJO0lBQUNKLEVBQUUsRUFBQyx5QkFBeUI7SUFBQ0UsS0FBSyxFQUFFO01BQUVHLFNBQVMsRUFBRTtJQUFTO0VBQUUsR0FBQyxZQUVyRSxDQUFDLGVBQ1QvQyxLQUFBLENBQUF5QyxhQUFBO0lBQUdDLEVBQUUsRUFBQyx5QkFBeUI7SUFBQ0UsS0FBSyxFQUFFO01BQUVJLEtBQUssRUFBRTtJQUFPO0VBQUUsR0FBQyw0R0FDa0QsRUFBQyxHQUFHLGVBQzlHaEQsS0FBQSxDQUFBeUMsYUFBQSxDQUFDdEMsSUFBSTtJQUFDMkQsRUFBRSxFQUFDO0VBQWdCLEdBQUMsZUFBbUIsQ0FBQyw0Q0FDN0MsQ0FBQyxlQUNKOUQsS0FBQSxDQUFBeUMsYUFBQTtJQUNFOEQsSUFBSSxFQUFDLFNBQVM7SUFDZCxjQUFXLHNCQUFzQjtJQUNqQzNELEtBQUssRUFBRTtNQUFFQyxZQUFZLEVBQUUsUUFBUTtNQUFFYSxPQUFPLEVBQUUsTUFBTTtNQUFFQyxRQUFRLEVBQUUsTUFBTTtNQUFFQyxHQUFHLEVBQUUsUUFBUTtNQUFFQyxVQUFVLEVBQUU7SUFBUztFQUFFLGdCQUUxRzdELEtBQUEsQ0FBQXlDLGFBQUE7SUFBTUcsS0FBSyxFQUFFO01BQUVLLFFBQVEsRUFBRSxPQUFPO01BQUVELEtBQUssRUFBRSxNQUFNO01BQUV3RCxXQUFXLEVBQUU7SUFBUztFQUFFLEdBQUMsT0FBVyxDQUFDLEVBQ3JGMUYsZ0JBQWdCLENBQUNLLEdBQUcsQ0FBQyxVQUFDM0IsQ0FBQyxFQUFLO0lBQzNCLElBQU1pSCxNQUFNLEdBQUdkLGVBQWUsS0FBS25HLENBQUMsQ0FBQ00sS0FBSztJQUMxQyxvQkFDRUUsS0FBQSxDQUFBeUMsYUFBQSxDQUFDbkMsTUFBTTtNQUNMK0IsR0FBRyxFQUFFN0MsQ0FBQyxDQUFDTSxLQUFNO01BQ2J1RCxJQUFJLEVBQUMsT0FBTztNQUNacUQsSUFBSSxFQUFDLFFBQVE7TUFDYkQsTUFBTSxFQUFFQSxNQUFPO01BQ2YxQyxPQUFPLEVBQUUwQyxNQUFPO01BQ2hCeEMsS0FBSyxFQUFFLENBQUN3QyxNQUFPO01BQ2Z6RixJQUFJO01BQ0pxRCxhQUFhLEVBQUMsTUFBTTtNQUNwQkgsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7UUFBQSxPQUFRMkIsa0JBQWtCLENBQUNyRyxDQUFDLENBQUNNLEtBQUssQ0FBQztNQUFBLENBQUM7TUFDM0MsZ0JBQWMyRyxNQUFPO01BQ3JCLGNBQVlqSCxDQUFDLENBQUNNLEtBQUssS0FBSyxLQUFLLEdBQUcseUJBQXlCLDRCQUFBNkcsTUFBQSxDQUE0Qm5ILENBQUMsQ0FBQ3VCLEtBQUs7SUFBUSxnQkFFcEdmLEtBQUEsQ0FBQXlDLGFBQUEsQ0FBQ2pDLElBQUk7TUFBQzNCLElBQUksRUFBRVcsQ0FBQyxDQUFDd0I7SUFBSyxDQUFFLENBQUMsRUFDckJ4QixDQUFDLENBQUN1QixLQUNHLENBQUM7RUFFYixDQUFDLENBQ0UsQ0FBQyxlQUNOZixLQUFBLENBQUF5QyxhQUFBLENBQUMvQixjQUFjO0lBQ2JpRSxNQUFNLEVBQUVGLEdBQUk7SUFDWkMsU0FBUyxFQUFFRCxHQUFJO0lBQ2ZHLFVBQVUsRUFBRUEsVUFBVztJQUN2QkUsUUFBUSxFQUFFQSxRQUFTO0lBQ25CRCxlQUFlLEVBQUVBLGVBQWdCO0lBQ2pDK0IsYUFBYSxFQUFFLEtBQU07SUFDckJqQixlQUFlLEVBQUVBO0VBQWdCLENBQ2xDLENBQ00sQ0FDRixDQUNZLENBQUM7QUFFNUI7QUFFQWtCLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHdkMsY0FBYyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29tcG9uZW50cy9BY3Rpdml0aWVzSG9tZS5qcz8yNGRjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBMaW5rLCB1c2VTZWFyY2hQYXJhbXMgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHsgQnV0dG9uLCBIZWFkZXIsIEljb24sIFNlZ21lbnQgfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCBBY3Rpdml0eVN0cmVhbSA9IHJlcXVpcmUoJy4vQWN0aXZpdHlTdHJlYW0nKTtcbmNvbnN0IHtcbiAgbG9hZEh1YlVpRmVhdHVyZUZsYWdzLFxuICBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFnc1xufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJVaUZlYXR1cmVGbGFncycpO1xuXG5jb25zdCBBQ1RJVklUWV9GSUxURVJTID0gW1xuICB7IHZhbHVlOiAnYWxsJywgbGFiZWw6ICdBbGwnLCBpY29uOiAnbGlzdCBsYXlvdXQnIH0sXG4gIHsgdmFsdWU6ICdjaGF0JywgbGFiZWw6ICdDaGF0JywgaWNvbjogJ2NvbW1lbnRzJyB9LFxuICB7IHZhbHVlOiAnYml0Y29pbicsIGxhYmVsOiAnQml0Y29pbicsIGljb246ICdiaXRjb2luJyB9LFxuICB7IHZhbHVlOiAnZG9jdW1lbnRzJywgbGFiZWw6ICdEb2N1bWVudHMnLCBpY29uOiAnZmlsZSBvdXRsaW5lJyB9LFxuICB7IHZhbHVlOiAnbmV0d29yaycsIGxhYmVsOiAnTmV0d29yaycsIGljb246ICdzaXRlbWFwJyB9XG5dO1xuXG5jb25zdCBWQUxJRF9GSUxURVIgPSBuZXcgU2V0KEFDVElWSVRZX0ZJTFRFUlMubWFwKChmKSA9PiBmLnZhbHVlKSk7XG5cbmZ1bmN0aW9uIEFjdGl2aXRpZXNVaU5vdGlmaWNhdGlvbnMgKHsgdWY6IHVmUHJvcCB9KSB7XG4gIGNvbnN0IHVmID0gdWZQcm9wIHx8IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuICBjb25zdCBbbGlzdCwgc2V0TGlzdF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiByZWFkVWlOb3RpZmljYXRpb25zKCkpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHN5bmMgPSAoKSA9PiBzZXRMaXN0KHJlYWRVaU5vdGlmaWNhdGlvbnMoKSk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihVUERBVEVEX0VWRU5ULCBzeW5jKTtcbiAgICAgIGNvbnN0IG9uU3RvcmFnZSA9IChldikgPT4ge1xuICAgICAgICBpZiAoZXYgJiYgZXYua2V5ID09PSBTVE9SQUdFX0tFWSkgc3luYygpO1xuICAgICAgfTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgb25TdG9yYWdlKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFVQREFURURfRVZFTlQsIHN5bmMpO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIG9uU3RvcmFnZSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LCBbXSk7XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxTZWdtZW50IGlkPVwiaW4tYXBwLW5vdGlmaWNhdGlvbnNcIiBzZWNvbmRhcnkgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIHN0eWxlPXt7IG1hcmdpblRvcDogMCB9fT5cbiAgICAgICAgPEljb24gbmFtZT1cImJlbGwgb3V0bGluZVwiIC8+XG4gICAgICAgIEluLWFwcCBub3RpZmljYXRpb25zXG4gICAgICA8L0hlYWRlcj5cbiAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45ZW0nLCBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nIH19PlxuICAgICAgICBXYWxsZXQsIFBheWpvaW4sIGFuZCBodWIgdG9hc3RzLiBPcGVuIGEgbGluaywgY29weSBkZXRhaWxzLCBvciBkaXNtaXNzLlxuICAgICAgPC9wPlxuICAgICAge2xpc3QubWFwKChuKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wZW5UbyA9IG5vdGlmaWNhdGlvbk9wZW5IcmVmKG4uaHJlZiwgdWYpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICA8U2VnbWVudCBrZXk9e24uaWR9IHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRXZWlnaHQ6IDYwMCB9fT57bi50aXRsZX08L2Rpdj5cbiAgICAgICAgICB7bi5zdWJ0aXRsZSAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJywgY29sb3I6ICcjODg4Jywgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsIG1hcmdpblRvcDogJzAuMjVlbScgfX0+XG4gICAgICAgICAgICAgIHtuLnN1YnRpdGxlfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC4zNWVtJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIG1hcmdpblRvcDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgIHtvcGVuVG8gJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz17b3BlblRvfSBzaXplPVwibWluaVwiIHByaW1hcnk+XG4gICAgICAgICAgICAgICAgT3BlblxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7bi5jb3B5VGV4dCAmJiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJDb3B5IHRvIGNsaXBib2FyZFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY29weVRvQ2xpcGJvYXJkKG4uY29weVRleHQpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHkgb3V0bGluZVwiIC8+XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgIHRpdGxlPVwiRGlzbWlzc1wiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHJlbW92ZVVpTm90aWZpY2F0aW9uKG4uaWQpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY2xvc2VcIiAvPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCIgb25DbGljaz17KCkgPT4gY2xlYXJVaU5vdGlmaWNhdGlvbnMoKX0+XG4gICAgICAgIDxJY29uIG5hbWU9XCJ0cmFzaFwiIC8+XG4gICAgICAgIENsZWFyIGFsbFxuICAgICAgPC9CdXR0b24+XG4gICAgPC9TZWdtZW50PlxuICApO1xufVxuXG4vKipcbiAqIENhbm9uaWNhbCBodWIgYWN0aXZpdHkgZmVlZCAoYC9hY3Rpdml0aWVzYCkuXG4gKi9cbmZ1bmN0aW9uIEFjdGl2aXRpZXNIb21lIChwcm9wcykge1xuICBjb25zdCByZWYgPSBwcm9wcy5icmlkZ2VSZWYgfHwgcHJvcHMuYnJpZGdlO1xuICBjb25zdCBhZG1pblRva2VuID0gcHJvcHMuYWRtaW5Ub2tlbjtcbiAgY29uc3Qgb25SZXF1aXJlVW5sb2NrID0gcHJvcHMub25SZXF1aXJlVW5sb2NrO1xuICBjb25zdCBpZGVudGl0eSA9IHByb3BzLmlkZW50aXR5O1xuICBjb25zdCBbc2VhcmNoUGFyYW1zLCBzZXRTZWFyY2hQYXJhbXNdID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IFtmbGFnVGljaywgc2V0RmxhZ1RpY2tdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncygoKSA9PiBzZXRGbGFnVGljaygobikgPT4gbiArIDEpKSwgW10pO1xuICB2b2lkIGZsYWdUaWNrO1xuICBjb25zdCB1ZiA9IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuICBjb25zdCByYXdUeXBlID0gKHNlYXJjaFBhcmFtcy5nZXQoJ3R5cGUnKSB8fCAnYWxsJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGxldCBlbnRyeVR5cGVGaWx0ZXIgPSBWQUxJRF9GSUxURVIuaGFzKHJhd1R5cGUpID8gcmF3VHlwZSA6ICdhbGwnO1xuXG4gIGNvbnN0IHNldEVudHJ5VHlwZUZpbHRlciA9ICh2YWx1ZSkgPT4ge1xuICAgIHNldFNlYXJjaFBhcmFtcygocHJldikgPT4ge1xuICAgICAgY29uc3QgcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocHJldik7XG4gICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSAnYWxsJykgcC5kZWxldGUoJ3R5cGUnKTtcbiAgICAgIGVsc2UgcC5zZXQoJ3R5cGUnLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gcDtcbiAgICB9LCB7IHJlcGxhY2U6IHRydWUgfSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZmFicmljLWh1Yi1hY3Rpdml0aWVzIGNsYXNzPVwiZmFkZS1pblwiPlxuICAgICAgPFNlZ21lbnQ+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4V3JhcDogJ3dyYXAnLCBnYXA6ICcwLjM1ZW0nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICA8QnV0dG9uIGJhc2ljIGFzPXtMaW5rfSB0bz1cIi9cIiBzaXplPVwic21hbGxcIiBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCIgYXJpYS1sYWJlbD1cIkJhY2sgdG8gaG9tZVwiPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgSG9tZVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGFzPXtMaW5rfVxuICAgICAgICAgICAgdG89XCIvbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgIHRpdGxlPVwiV2FsbGV0LCBQYXlqb2luLCBhbmQgaHViIHRvYXN0cyAoc2FtZSBhcyB0aGUgYmVsbClcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5vdGlmaWNhdGlvbnMg4oCUIGluLWFwcCB0b2FzdHNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJiZWxsIG91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgTm90aWZpY2F0aW9uc1xuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICBhcz17TGlua31cbiAgICAgICAgICAgIHRvPVwiL3NldHRpbmdzL3NlY3VyaXR5XCJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBpY29uXG4gICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2VjdXJpdHksIGRlbGVnYXRpb24gdG9rZW5zLCBhbmQgc2Vzc2lvbiBhdWRpdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cInNoaWVsZCBhbHRlcm5hdGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgU2VjdXJpdHkgJmFtcDsgZGVsZWdhdGlvblxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGFzPXtMaW5rfVxuICAgICAgICAgICAgdG89XCIvc2VydmljZXMvYml0Y29pblwiXG4gICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgIHRpdGxlPVwiQml0Y29pbiBodWIgcGFnZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQml0Y29pbiBkYXNoYm9hcmRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJiaXRjb2luXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIEJpdGNvaW5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICB7dWYuYml0Y29pblBheW1lbnRzID8gKFxuICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvcGF5bWVudHNcIiBiYXNpYyBzaXplPVwic21hbGxcIiB0aXRsZT1cIlBheWpvaW4gYW5kIHBheW1lbnRzXCI+XG4gICAgICAgICAgICAgIFBheW1lbnRzXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dWYuYml0Y29pbkludm9pY2VzID8gKFxuICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pbi9pbnZvaWNlcyNmYWJyaWMtaW52b2ljZXMtdGFiLWRlbW9cIiBiYXNpYyBzaXplPVwic21hbGxcIiB0aXRsZT1cIkludm9pY2VzIHdhbGt0aHJvdWdoXCI+XG4gICAgICAgICAgICAgIEludm9pY2VzXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dWYuYml0Y29pblJlc291cmNlcyA/IChcbiAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vcmVzb3VyY2VzXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgdGl0bGU9XCJIVFRQIHJlc291cmNlcyBhbmQgTDEgcGF5bWVudCB2ZXJpZmljYXRpb25cIj5cbiAgICAgICAgICAgICAgUmVzb3VyY2VzXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dWYuYml0Y29pbkNyb3dkZnVuZCA/IChcbiAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kc1wiIGJhc2ljIHNpemU9XCJzbWFsbFwiIGljb24gdGl0bGU9XCJUYXByb290IGNhbXBhaWduIHZhdWx0XCI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJoZWFydFwiIC8+XG4gICAgICAgICAgICAgIENyb3dkZnVuZHNcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiYWN0aXZpdGllcy1wYWdlLWhlYWRpbmdcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiYWN0aXZpdGllcy1wYWdlLXN1bW1hcnlcIj5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDJcIiBpZD1cImFjdGl2aXRpZXMtcGFnZS1oZWFkaW5nXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgIEFjdGl2aXRpZXNcbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICA8cCBpZD1cImFjdGl2aXRpZXMtcGFnZS1zdW1tYXJ5XCIgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgIEh1YiBtZXNzYWdlIGxvZywgY2hhdCwgQml0Y29pbiBibG9ja3MsIGFuZCBuZXR3b3JrIGV2ZW50cy4gV2FsbGV0LCBQYXlqb2luLCBhbmQgb3RoZXIgc2hvcnQgdG9hc3RzIGxpdmUgb257JyAnfVxuICAgICAgICAgICAgPExpbmsgdG89XCIvbm90aWZpY2F0aW9uc1wiPk5vdGlmaWNhdGlvbnM8L0xpbms+IChzYW1lIGxpc3QgYXMgdGhlIGJlbGwgaW4gdGhlIHRvcCBiYXIpLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByb2xlPVwidG9vbGJhclwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWN0aXZpdHkgdHlwZSBmaWx0ZXJcIlxuICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC43NWVtJywgZGlzcGxheTogJ2ZsZXgnLCBmbGV4V3JhcDogJ3dyYXAnLCBnYXA6ICcwLjM1ZW0nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAnMC45ZW0nLCBjb2xvcjogJyM2NjYnLCBtYXJnaW5SaWdodDogJzAuMjVlbScgfX0+U2hvdzo8L3NwYW4+XG4gICAgICAgICAgICB7QUNUSVZJVFlfRklMVEVSUy5tYXAoKGYpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gZW50cnlUeXBlRmlsdGVyID09PSBmLnZhbHVlO1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17Zi52YWx1ZX1cbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZT17YWN0aXZlfVxuICAgICAgICAgICAgICAgICAgcHJpbWFyeT17YWN0aXZlfVxuICAgICAgICAgICAgICAgICAgYmFzaWM9eyFhY3RpdmV9XG4gICAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRFbnRyeVR5cGVGaWx0ZXIoZi52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9e2FjdGl2ZX1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2YudmFsdWUgPT09ICdhbGwnID8gJ1Nob3cgYWxsIGFjdGl2aXR5IHR5cGVzJyA6IGBGaWx0ZXIgYWN0aXZpdHkgZmVlZDogJHtmLmxhYmVsfSBvbmx5YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPXtmLmljb259IC8+XG4gICAgICAgICAgICAgICAgICB7Zi5sYWJlbH1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxBY3Rpdml0eVN0cmVhbVxuICAgICAgICAgICAgYnJpZGdlPXtyZWZ9XG4gICAgICAgICAgICBicmlkZ2VSZWY9e3JlZn1cbiAgICAgICAgICAgIGFkbWluVG9rZW49e2FkbWluVG9rZW59XG4gICAgICAgICAgICBpZGVudGl0eT17aWRlbnRpdHl9XG4gICAgICAgICAgICBvblJlcXVpcmVVbmxvY2s9e29uUmVxdWlyZVVubG9ja31cbiAgICAgICAgICAgIGluY2x1ZGVIZWFkZXI9e2ZhbHNlfVxuICAgICAgICAgICAgZW50cnlUeXBlRmlsdGVyPXtlbnRyeVR5cGVGaWx0ZXJ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9TZWdtZW50PlxuICAgIDwvZmFicmljLWh1Yi1hY3Rpdml0aWVzPlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFjdGl2aXRpZXNIb21lO1xuIl0sIm5hbWVzIjpbIl9zbGljZWRUb0FycmF5IiwiciIsImUiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwiYSIsIl9hcnJheUxpa2VUb0FycmF5IiwidCIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbmd0aCIsIm4iLCJsIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpIiwidSIsImYiLCJvIiwibmV4dCIsIk9iamVjdCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJpc0FycmF5IiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJMaW5rIiwidXNlU2VhcmNoUGFyYW1zIiwiX3JlcXVpcmUyIiwiQnV0dG9uIiwiSGVhZGVyIiwiSWNvbiIsIlNlZ21lbnQiLCJBY3Rpdml0eVN0cmVhbSIsIl9yZXF1aXJlMyIsImxvYWRIdWJVaUZlYXR1cmVGbGFncyIsInN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzIiwiQUNUSVZJVFlfRklMVEVSUyIsImxhYmVsIiwiaWNvbiIsIlZBTElEX0ZJTFRFUiIsIlNldCIsIm1hcCIsIkFjdGl2aXRpZXNVaU5vdGlmaWNhdGlvbnMiLCJfcmVmIiwidWZQcm9wIiwidWYiLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsInJlYWRVaU5vdGlmaWNhdGlvbnMiLCJfUmVhY3QkdXNlU3RhdGUyIiwibGlzdCIsInNldExpc3QiLCJ1c2VFZmZlY3QiLCJzeW5jIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsIlVQREFURURfRVZFTlQiLCJvblN0b3JhZ2UiLCJldiIsImtleSIsIlNUT1JBR0VfS0VZIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInVuZGVmaW5lZCIsImNyZWF0ZUVsZW1lbnQiLCJpZCIsInNlY29uZGFyeSIsInN0eWxlIiwibWFyZ2luQm90dG9tIiwiYXMiLCJtYXJnaW5Ub3AiLCJjb2xvciIsImZvbnRTaXplIiwib3BlblRvIiwibm90aWZpY2F0aW9uT3BlbkhyZWYiLCJocmVmIiwic2l6ZSIsImZvbnRXZWlnaHQiLCJ0aXRsZSIsInN1YnRpdGxlIiwid29yZEJyZWFrIiwiZGlzcGxheSIsImZsZXhXcmFwIiwiZ2FwIiwiYWxpZ25JdGVtcyIsInRvIiwicHJpbWFyeSIsImNvcHlUZXh0IiwiYmFzaWMiLCJvbkNsaWNrIiwiY29weVRvQ2xpcGJvYXJkIiwicmVtb3ZlVWlOb3RpZmljYXRpb24iLCJsYWJlbFBvc2l0aW9uIiwiY2xlYXJVaU5vdGlmaWNhdGlvbnMiLCJBY3Rpdml0aWVzSG9tZSIsInByb3BzIiwicmVmIiwiYnJpZGdlUmVmIiwiYnJpZGdlIiwiYWRtaW5Ub2tlbiIsIm9uUmVxdWlyZVVubG9jayIsImlkZW50aXR5IiwiX3VzZVNlYXJjaFBhcmFtcyIsIl91c2VTZWFyY2hQYXJhbXMyIiwic2VhcmNoUGFyYW1zIiwic2V0U2VhcmNoUGFyYW1zIiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJmbGFnVGljayIsInNldEZsYWdUaWNrIiwicmF3VHlwZSIsImdldCIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImVudHJ5VHlwZUZpbHRlciIsImhhcyIsInNldEVudHJ5VHlwZUZpbHRlciIsInByZXYiLCJwIiwiVVJMU2VhcmNoUGFyYW1zIiwic2V0IiwicmVwbGFjZSIsImJpdGNvaW5QYXltZW50cyIsImJpdGNvaW5JbnZvaWNlcyIsImJpdGNvaW5SZXNvdXJjZXMiLCJiaXRjb2luQ3Jvd2RmdW5kIiwicm9sZSIsIm1hcmdpblJpZ2h0IiwiYWN0aXZlIiwidHlwZSIsImNvbmNhdCIsImluY2x1ZGVIZWFkZXIiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/ActivitiesHome.js\n\n}')},"./components/ActivityStream.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n// Dependencies\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nvar _require = __webpack_require__(/*! ../functions/isLikelyBip32ExtendedKey */ \"./functions/isLikelyBip32ExtendedKey.js\"),\n isLikelyBip32ExtendedKey = _require.isLikelyBip32ExtendedKey;\nvar _require2 = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/dist/index.js\"),\n Link = _require2.Link;\nvar _require3 = __webpack_require__(/*! semantic-ui-react */ \"./node_modules/semantic-ui-react/dist/es/index.js\"),\n Button = _require3.Button,\n Icon = _require3.Icon,\n Label = _require3.Label;\nvar ChatInput = __webpack_require__(/*! ./ChatInput */ \"./components/ChatInput.js\");\nvar _require4 = __webpack_require__(/*! ../functions/messageTypes */ \"./functions/messageTypes.js\"),\n isDelegationSignatureRequestActivity = _require4.isDelegationSignatureRequestActivity;\nvar _require5 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ \"./functions/hubUiFeatureFlags.js\"),\n loadHubUiFeatureFlags = _require5.loadHubUiFeatureFlags;\nvar _require6 = __webpack_require__(/*! ../functions/fabricSafeLog */ \"./functions/fabricSafeLog.js\"),\n safeIdentityErr = _require6.safeIdentityErr;\nvar _require7 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ \"./functions/hubAdminTokenBrowser.js\"),\n readHubAdminTokenFromBrowser = _require7.readHubAdminTokenFromBrowser;\nvar _require8 = __webpack_require__(/*! ../functions/hubIdentityUiHints */ \"./functions/hubIdentityUiHints.js\"),\n classifyHubBrowserIdentity = _require8.classifyHubBrowserIdentity,\n fabricIdentityChatDisabledReasonPlain = _require8.fabricIdentityChatDisabledReasonPlain;\nvar MESSAGE_PAGE_SIZE = 10;\n\n/**\n * @param {object} entry\n * @returns {'chat'|'bitcoin'|'documents'|'network'|'signing'|null}\n */\nfunction getActivityEntryCategory(entry) {\n if (!entry || _typeof(entry) !== 'object') return null;\n if (entry.type === 'CLIENT_NOTICE') return 'bitcoin';\n if (entry.type === 'P2P_CHAT_MESSAGE') return 'chat';\n if (isDelegationSignatureRequestActivity(entry)) return 'signing';\n if (entry.object && entry.object.type === 'BitcoinBlock') return 'bitcoin';\n if (entry.object && entry.object.type === 'Document') {\n var mime = String(entry.object.mime || '').toLowerCase();\n if (entry.object.bitcoinBlock === true || mime === 'application/x-fabric-bitcoin-block+json') return null;\n return 'documents';\n }\n return 'network';\n}\n\n/**\n * @param {object} entry\n * @param {string} filter\n */\nfunction entryMatchesActivityFilter(entry, filter) {\n var f = filter && String(filter).trim() || 'all';\n if (f === 'all') return true;\n var cat = getActivityEntryCategory(entry);\n if (cat == null) return false;\n return cat === f;\n}\nvar ActivityStreamElement = /*#__PURE__*/function (_React$Component) {\n function ActivityStreamElement(props) {\n var _this;\n _classCallCheck(this, ActivityStreamElement);\n _this = _callSuper(this, ActivityStreamElement, [props]);\n _defineProperty(_this, \"_handlePurgeEntry\", function (messageKey, documentId) {\n var mk = typeof messageKey === 'string' ? messageKey.trim() : '';\n var docId = typeof documentId === 'string' ? documentId.trim() : '';\n if (!mk && !docId) return;\n var activeBridgeRef = _this.props.bridgeRef || _this.props.bridge;\n var bridgeInstance = activeBridgeRef && activeBridgeRef.current;\n if (!bridgeInstance || typeof bridgeInstance.emitTombstone !== 'function') return;\n var token = readHubAdminTokenFromBrowser(_this.props && _this.props.adminToken);\n bridgeInstance.emitTombstone({\n messageId: mk || undefined,\n documentId: docId || undefined,\n adminToken: token\n });\n });\n _defineProperty(_this, \"_handleL1PaymentActivity\", function (event) {\n try {\n var d = event && event.detail;\n if (!d || !d.txid) return;\n var activeBridgeRef = _this.props.bridgeRef || _this.props.bridge;\n var bridgeInstance = activeBridgeRef && activeBridgeRef.current;\n if (bridgeInstance && typeof bridgeInstance.applyL1InvoicePaymentActivity === 'function') {\n bridgeInstance.applyL1InvoicePaymentActivity(d);\n }\n } catch (e) {\n console.warn('[FABRIC:STREAM] l1PaymentActivity:', safeIdentityErr(e));\n }\n });\n _defineProperty(_this, \"_handleGlobalStateUpdate\", function (event) {\n try {\n var globalState = event && event.detail && event.detail.globalState;\n if (!globalState) return;\n var messages = globalState.messages || {};\n var preset = _this.props.streamPreset || 'default';\n var fabricEntries = Object.entries(messages).filter(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n m = _ref2[1];\n return m && _typeof(m) === 'object';\n }).map(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n messageKey = _ref4[0],\n m = _ref4[1];\n return Object.assign({}, m, {\n messageKey: messageKey\n });\n }).filter(function (m) {\n if (preset === 'notifications') return isDelegationSignatureRequestActivity(m);\n return !isDelegationSignatureRequestActivity(m);\n }).sort(function (a, b) {\n var ta = a.object && a.object.created || 0;\n var tb = b.object && b.object.created || 0;\n return ta - tb; // oldest first\n });\n var docAddLast = new Map();\n var _iterator = _createForOfIteratorHelper(fabricEntries),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var m = _step.value;\n if (m && m.type === 'Add' && m.object && m.object.type === 'Document' && m.object.id) {\n docAddLast.set(String(m.object.id), m);\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n var fabricDeduped = fabricEntries.filter(function (m) {\n if (m && m.type === 'Add' && m.object && m.object.type === 'Document' && m.object.id) {\n var id = String(m.object.id);\n return docAddLast.get(id) === m;\n }\n return true;\n });\n\n // Tombstones can be replayed or emitted through multiple paths; keep the latest\n // event per target so one purge action does not flood the visible feed.\n var tombstoneLast = new Map();\n var _iterator2 = _createForOfIteratorHelper(fabricDeduped),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _m = _step2.value;\n if (!_m || _m.type !== 'Tombstone' || !_m.object || _typeof(_m.object) !== 'object') continue;\n var activityId = _m.object.activityMessageId != null ? String(_m.object.activityMessageId).trim() : '';\n var documentId = _m.object.documentId != null ? String(_m.object.documentId).trim() : '';\n var key = activityId ? \"activity:\".concat(activityId) : documentId ? \"document:\".concat(documentId) : '';\n if (key) tombstoneLast.set(key, _m);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n var fabricDedupedFinal = fabricDeduped.filter(function (m) {\n if (!m || m.type !== 'Tombstone' || !m.object || _typeof(m.object) !== 'object') return true;\n var activityId = m.object.activityMessageId != null ? String(m.object.activityMessageId).trim() : '';\n var documentId = m.object.documentId != null ? String(m.object.documentId).trim() : '';\n var key = activityId ? \"activity:\".concat(activityId) : documentId ? \"document:\".concat(documentId) : '';\n if (!key) return true;\n return tombstoneLast.get(key) === m;\n });\n _this._shouldScrollToBottom = _this._isScrolledToBottom();\n _this.setState(function (s) {\n var isFirstLoad = s.entries.length === 0;\n var prevNotices = preset === 'notifications' ? [] : (Array.isArray(s.entries) ? s.entries : []).filter(function (e) {\n return e && e.type === 'CLIENT_NOTICE';\n });\n var tNotice = function tNotice(e) {\n var c = e && e.object && e.object.created;\n return typeof c === 'number' ? c : new Date(c || 0).getTime() || 0;\n };\n var entries = fabricDedupedFinal.concat(prevNotices).sort(function (a, b) {\n return tNotice(a) - tNotice(b);\n });\n return {\n entries: entries,\n displayLimit: isFirstLoad ? MESSAGE_PAGE_SIZE : s.displayLimit\n };\n });\n } catch (e) {\n console.error('[FABRIC:STREAM]', 'Error processing global state update:', safeIdentityErr(e));\n }\n });\n _defineProperty(_this, \"_handleChatWarning\", function (event) {\n var message = event && event.detail && typeof event.detail.message === 'string' && event.detail.message.trim() || fabricIdentityChatDisabledReasonPlain(_this.props.identity || _this.props.auth);\n _this.setState({\n chatWarning: message\n });\n if (_this._chatWarningTimer) clearTimeout(_this._chatWarningTimer);\n _this._chatWarningTimer = setTimeout(function () {\n _this.setState({\n chatWarning: null\n });\n _this._chatWarningTimer = null;\n }, 6000);\n });\n _defineProperty(_this, \"_handleChatSubmit\", function (e) {\n if (e && typeof e.preventDefault === 'function') e.preventDefault();\n var text = (_this.state.chatInput || '').trim();\n if (!text) return;\n var onSubmit = _this.props.onSubmitChat || _this.props.bridge && _this.props.bridge.current && typeof _this.props.bridge.current.submitChatMessage === 'function' && _this.props.bridge.current.submitChatMessage.bind(_this.props.bridge.current);\n if (typeof onSubmit === 'function') {\n onSubmit(text);\n _this.setState({\n chatInput: ''\n });\n }\n });\n _this.settings = Object.assign({\n authority: 'https://hub.fabric.pub',\n includeHeader: true,\n activities: []\n }, props);\n _this.state = _objectSpread(_objectSpread({}, _this.settings), {}, {\n chatInput: '',\n entries: [],\n displayLimit: MESSAGE_PAGE_SIZE,\n chatWarning: null\n });\n _this._scrollContainerRef = React.createRef();\n _this._lastEntryRef = React.createRef();\n _this._loadMoreSentinelRef = React.createRef();\n _this._intersectionObserver = null;\n _this._shouldScrollToBottom = false;\n _this._prevEntriesLength = 0;\n _this._userHasLoadedMore = false;\n _this._userHasScrolledInStream = false;\n return _possibleConstructorReturn(_this, _this);\n }\n _inherits(ActivityStreamElement, _React$Component);\n return _createClass(ActivityStreamElement, [{\n key: \"_scrollToBottom\",\n value: function _scrollToBottom() {\n var lastEl = this._lastEntryRef.current;\n if (lastEl && typeof lastEl.scrollIntoView === 'function') {\n lastEl.scrollIntoView({\n block: 'end',\n behavior: 'auto'\n });\n return;\n }\n var el = this._scrollContainerRef.current;\n if (el) {\n el.scrollTop = el.scrollHeight - el.clientHeight;\n }\n }\n }, {\n key: \"_isScrolledToBottom\",\n value: function _isScrolledToBottom() {\n var el = this._scrollContainerRef.current;\n if (!el) return true;\n var threshold = 20;\n return el.scrollTop + el.clientHeight >= el.scrollHeight - threshold;\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n console.debug('[FABRIC:STREAM]', 'Stream mounted!');\n // Optional: parent may pass fetchResource(path) for non-bridge activity sources.\n if (typeof this.props.fetchResource === 'function') {\n var preset = this.props.streamPreset || 'default';\n var uf = loadHubUiFeatureFlags();\n if (preset !== 'notifications' || uf.activities) {\n this.props.fetchResource('/activities');\n }\n }\n window.addEventListener('globalStateUpdate', this._handleGlobalStateUpdate);\n window.addEventListener('fabric:chatWarning', this._handleChatWarning);\n window.addEventListener('fabric:l1PaymentActivity', this._handleL1PaymentActivity);\n // Initial load from persisted/restored state (survives refresh)\n var activeBridgeRef = this.props.bridgeRef || this.props.bridge;\n var bridgeInstance = activeBridgeRef && activeBridgeRef.current;\n if (bridgeInstance && typeof bridgeInstance.getGlobalState === 'function') {\n var gs = bridgeInstance.getGlobalState();\n if (gs) this._handleGlobalStateUpdate({\n detail: {\n globalState: gs\n }\n });\n }\n this._setupIntersectionObserver();\n this._prevEntriesLength = this.state.entries.length;\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n var _this2 = this;\n this._observeSentinel();\n var prevLen = this._prevEntriesLength;\n var currLen = this.state.entries.length;\n this._prevEntriesLength = currLen;\n if (this._shouldScrollToBottom || currLen > 0 && prevLen === 0) {\n this._shouldScrollToBottom = false;\n this._scrollToBottom();\n requestAnimationFrame(function () {\n return _this2._scrollToBottom();\n });\n setTimeout(function () {\n return _this2._scrollToBottom();\n }, 100);\n setTimeout(function () {\n return _this2._scrollToBottom();\n }, 300);\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (typeof this._hubUiFlagsUnsub === 'function') {\n this._hubUiFlagsUnsub();\n this._hubUiFlagsUnsub = null;\n }\n window.removeEventListener('globalStateUpdate', this._handleGlobalStateUpdate);\n window.removeEventListener('fabric:chatWarning', this._handleChatWarning);\n window.removeEventListener('fabric:l1PaymentActivity', this._handleL1PaymentActivity);\n if (this._chatWarningTimer) clearTimeout(this._chatWarningTimer);\n if (this._intersectionObserver && this._loadMoreSentinelRef.current) {\n this._intersectionObserver.unobserve(this._loadMoreSentinelRef.current);\n }\n this._intersectionObserver = null;\n }\n }, {\n key: \"_setupIntersectionObserver\",\n value: function _setupIntersectionObserver() {\n var _this3 = this;\n if (typeof IntersectionObserver === 'undefined') return;\n var root = this._scrollContainerRef.current;\n if (!root) {\n setTimeout(function () {\n return _this3._setupIntersectionObserver();\n }, 0);\n return;\n }\n this._intersectionObserver = new IntersectionObserver(function (entries) {\n var sentinel = entries[0];\n if (!sentinel || !sentinel.isIntersecting) return;\n if (!_this3._userHasScrolledInStream) return;\n _this3._userHasLoadedMore = true;\n _this3.setState(function (prev) {\n var total = prev.entries.length;\n if (prev.displayLimit >= total) return null;\n return {\n displayLimit: Math.min(prev.displayLimit + MESSAGE_PAGE_SIZE, total)\n };\n });\n }, {\n root: root,\n rootMargin: '0px',\n threshold: 0\n });\n this._observeSentinel();\n }\n }, {\n key: \"_observeSentinel\",\n value: function _observeSentinel() {\n if (!this._intersectionObserver) return;\n if (this._observedSentinel) {\n try {\n this._intersectionObserver.unobserve(this._observedSentinel);\n } catch (_) {}\n this._observedSentinel = null;\n }\n if (this._loadMoreSentinelRef.current) {\n this._observedSentinel = this._loadMoreSentinelRef.current;\n this._intersectionObserver.observe(this._observedSentinel);\n }\n }\n }, {\n key: \"_tombstoneDocumentId\",\n value: function _tombstoneDocumentId(entry) {\n if (!entry || !entry.object) return null;\n if (entry.type === 'Add' && entry.object.type === 'Document' && entry.object.id) {\n return String(entry.object.id).trim();\n }\n return null;\n }\n }, {\n key: \"_renderPurgeButton\",\n value: function _renderPurgeButton(entry) {\n var _this4 = this;\n if (entry && entry.object && entry.object.localOnly) return null;\n var adminToken = readHubAdminTokenFromBrowser(this.props && this.props.adminToken);\n if (!adminToken || !entry || !entry.messageKey) return null;\n var docId = this._tombstoneDocumentId(entry);\n var title = docId ? 'Remove this activity row and unpublish the document from the hub catalog (requires admin)' : 'Purge this entry from the hub activity log (requires admin)';\n return /*#__PURE__*/React.createElement(Button, {\n type: \"button\",\n basic: true,\n icon: true,\n size: \"mini\",\n compact: true,\n title: title,\n style: {\n marginLeft: '0.5em',\n verticalAlign: 'middle'\n },\n onClick: function onClick(e) {\n e.stopPropagation();\n _this4._handlePurgeEntry(entry.messageKey, docId || undefined);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"trash\"\n }));\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this5 = this;\n var apiActivities = this.props.api && this.props.api.resource && this.props.api.resource.activities || [];\n var allEntries = Array.isArray(this.state.entries) && this.state.entries.length > 0 ? this.state.entries : apiActivities;\n var entryTypeFilter = this.props.entryTypeFilter && String(this.props.entryTypeFilter).trim() || 'all';\n var filteredEntries = entryTypeFilter === 'all' ? allEntries : Array.isArray(allEntries) ? allEntries.filter(function (e) {\n return entryMatchesActivityFilter(e, entryTypeFilter);\n }) : [];\n var total = filteredEntries.length;\n var effectiveLimit = this._userHasLoadedMore ? this.state.displayLimit : MESSAGE_PAGE_SIZE;\n var displayLimit = Math.min(effectiveLimit, total);\n var entries = filteredEntries.slice(-displayLimit);\n var hasMore = displayLimit < total;\n var activeBridgeRef = this.props.bridgeRef || this.props.bridge;\n var bridgeInstance = activeBridgeRef && activeBridgeRef.current;\n var meshStatus = bridgeInstance && typeof bridgeInstance.webrtcMeshStatus !== 'undefined' ? bridgeInstance.webrtcMeshStatus : null;\n var chatDebug = bridgeInstance && typeof bridgeInstance.webrtcChatDebugStatus !== 'undefined' ? bridgeInstance.webrtcChatDebugStatus : null;\n var lastDeliveredTo = chatDebug && Number.isFinite(chatDebug.lastDeliveredTo) ? chatDebug.lastDeliveredTo : null;\n var toShortId = function toShortId(value) {\n if (typeof value !== 'string' || !value) return '-';\n if (value.length <= 12) return value;\n return \"\".concat(value.slice(0, 8), \"...\").concat(value.slice(-4));\n };\n var connectedPeerIds = chatDebug && Array.isArray(chatDebug.connectedPeerIds) ? chatDebug.connectedPeerIds : [];\n var recipientPeerIds = chatDebug && Array.isArray(chatDebug.lastRecipientPeerIds) ? chatDebug.lastRecipientPeerIds : [];\n var connectedPeerLabel = connectedPeerIds.length ? connectedPeerIds.map(toShortId).join(', ') : '-';\n var recipientPeerLabel = recipientPeerIds.length ? recipientPeerIds.map(toShortId).join(', ') : '-';\n var canSubmitChat = bridgeInstance && typeof bridgeInstance.hasUnlockedIdentity === 'function' ? bridgeInstance.hasUnlockedIdentity() : true;\n var idHint = this.props.identity || this.props.auth;\n var chatDisabledReason = canSubmitChat ? null : fabricIdentityChatDisabledReasonPlain(idHint);\n var streamPreset = this.props.streamPreset || 'default';\n var hasComposeChannel = typeof this.props.onSubmitChat === 'function' || bridgeInstance && typeof bridgeInstance.submitChatMessage === 'function';\n var uf = loadHubUiFeatureFlags();\n var peerDetailNav = !!(uf.peers && readHubAdminTokenFromBrowser(this.props.adminToken));\n var headerTitle = typeof this.props.headerTitle === 'string' && this.props.headerTitle.trim() ? this.props.headerTitle.trim() : streamPreset === 'notifications' ? 'Delegation & signing' : 'Activity Stream';\n var showChatChrome = streamPreset !== 'notifications';\n return /*#__PURE__*/React.createElement(\"fabric-activity-stream\", {\n className: \"activity-stream\"\n }, this.props.includeHeader && /*#__PURE__*/React.createElement(\"h3\", null, headerTitle), /*#__PURE__*/React.createElement(\"div\", {\n ref: this._scrollContainerRef,\n onScroll: function onScroll() {\n _this5._userHasScrolledInStream = true;\n },\n style: {\n maxHeight: '40vh',\n minHeight: '8em',\n overflowY: 'auto',\n overflowX: 'hidden',\n marginBottom: '0.5em',\n WebkitOverflowScrolling: 'touch'\n }\n }, hasMore && /*#__PURE__*/React.createElement(\"div\", {\n ref: this._loadMoreSentinelRef,\n style: {\n padding: '0.25em 0',\n fontSize: '0.85em',\n color: '#888',\n textAlign: 'center'\n }\n }, \"\\u2191 Scroll up for older messages (\", total - displayLimit, \" more)\"), entries.length > 0 && /*#__PURE__*/React.createElement(\"div\", null, entries.map(function (entry, index) {\n var _entry$actor;\n if (entry.type === 'CLIENT_NOTICE') {\n var _isLast = index === entries.length - 1;\n var txid = entry.object && entry.object.txid;\n return /*#__PURE__*/React.createElement(\"div\", {\n key: \"notice-\".concat(entry.object && entry.object.created, \"-\").concat(index),\n ref: _isLast ? _this5._lastEntryRef : null,\n style: {\n marginBottom: '0.35em',\n fontSize: '0.92em',\n color: '#555'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"bitcoin\",\n color: \"orange\"\n }), ' ', entry.object && entry.object.content, txid && /*#__PURE__*/React.createElement(React.Fragment, null, ' ', uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: \"/services/bitcoin/transactions/\".concat(encodeURIComponent(String(txid).trim())),\n style: {\n color: '#2185d0'\n }\n }, \"Transaction\") : /*#__PURE__*/React.createElement(\"code\", {\n style: {\n fontSize: '0.88em',\n color: '#666'\n },\n title: \"Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility to open the tx viewer\"\n }, String(txid).slice(0, 16), \"\\u2026\")), _this5._renderPurgeButton(entry));\n }\n if (isDelegationSignatureRequestActivity(entry)) {\n var o = entry.object || {};\n var content = typeof o.content === 'string' ? o.content : '';\n var purpose = typeof o.purpose === 'string' ? o.purpose : '';\n var ost = o.status || entry.status;\n var isPending = ost === 'pending';\n var _created = o.created || null;\n var _actorId = entry.actor && (entry.actor.username || entry.actor.id) || 'local';\n var _isLast2 = index === entries.length - 1;\n return /*#__PURE__*/React.createElement(\"div\", {\n key: \"delegation-\".concat(o.messageId || _created || index),\n ref: _isLast2 ? _this5._lastEntryRef : null,\n style: {\n marginBottom: '0.5em',\n fontSize: '0.95em',\n opacity: isPending ? 0.85 : 1\n }\n }, /*#__PURE__*/React.createElement(Label, {\n size: \"small\",\n color: \"teal\",\n style: {\n marginRight: '0.35em'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"key\"\n }), \"Signing\"), /*#__PURE__*/React.createElement(Label, {\n size: \"small\",\n basic: true,\n title: \"Same activity stream as public chat; delegation channel\"\n }, \"#delegation\"), ' ', /*#__PURE__*/React.createElement(\"strong\", null, \"@\", _actorId), purpose ? /*#__PURE__*/React.createElement(React.Fragment, null, \" \\xB7 \", purpose) : null, isPending ? ' — waiting for Fabric Hub desktop…' : null, !isPending && ost === 'approved' ? ' — approved' : null, !isPending && ost === 'rejected' ? ' — rejected' : null, !isPending && ost === 'timeout' ? ' — timed out' : null, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n marginTop: '0.25em',\n color: '#444',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word'\n }\n }, content || '(no preview)'));\n }\n var isChat = entry.type === 'P2P_CHAT_MESSAGE';\n var created = entry.object && entry.object.created || entry.created || null;\n var rawActorId = entry.actor && (entry.actor.username || entry.actor.id) || (isChat ? 'unknown' : 'system');\n var actorId = bridgeInstance && typeof bridgeInstance.getPeerDisplayName === 'function' && (_entry$actor = entry.actor) !== null && _entry$actor !== void 0 && _entry$actor.id ? bridgeInstance.getPeerDisplayName(entry.actor.id) : rawActorId;\n var target = entry.target;\n var targetLabel = typeof target === 'string' ? target : target && (target.name || target.id) || null;\n if (isChat) {\n var _content = entry.object && (entry.object.content || entry.object.body || entry.object.text) || '';\n var _isPending = entry.status === 'pending';\n var isQueued = entry.status === 'queued';\n var transport = entry.transport || null;\n var deliveredTo = entry.delivery && Number.isFinite(entry.delivery.deliveredTo) ? entry.delivery.deliveredTo : null;\n var fromPeerId = entry.delivery && entry.delivery.fromPeerId ? entry.delivery.fromPeerId : null;\n var style = {\n marginBottom: '0.5em',\n opacity: _isPending || isQueued ? 0.7 : 1,\n color: isQueued ? '#888' : undefined\n };\n var actorPeerPath = actorId && !isLikelyBip32ExtendedKey(actorId) && uf.peers ? \"/peers/\".concat(encodeURIComponent(actorId)) : null;\n var actorNode = actorId && actorId !== 'unknown' ? actorPeerPath ? /*#__PURE__*/React.createElement(Link, {\n to: actorPeerPath,\n style: {\n color: 'inherit',\n textDecoration: 'none'\n }\n }, /*#__PURE__*/React.createElement(\"strong\", null, \"@\", actorId)) : /*#__PURE__*/React.createElement(\"strong\", {\n title: !uf.peers ? 'Peers disabled — enable Peers in Admin → Feature visibility' : 'BIP32 extended key — not a TCP peer route'\n }, \"@\", actorId) : /*#__PURE__*/React.createElement(\"strong\", null, \"@\", actorId);\n var _isLast3 = index === entries.length - 1;\n return /*#__PURE__*/React.createElement(\"div\", {\n key: \"\".concat(created || 'chat', \"-\").concat(index),\n ref: _isLast3 ? _this5._lastEntryRef : null,\n style: style\n }, actorNode, _isPending && ' (sending…)', isQueued && ' (!)', \": \", _content, transport === 'webrtc' && /*#__PURE__*/React.createElement(\"span\", {\n style: {\n marginLeft: '0.5em'\n }\n }, /*#__PURE__*/React.createElement(Label, {\n size: \"tiny\",\n basic: true,\n color: \"teal\",\n title: \"Delivered via WebRTC mesh\"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"exchange\"\n }), \"WebRTC\"), deliveredTo != null && /*#__PURE__*/React.createElement(Label, {\n size: \"tiny\",\n basic: true,\n color: \"blue\",\n title: \"Peers this message was delivered to\"\n }, \"delivered: \", deliveredTo), fromPeerId && /*#__PURE__*/React.createElement(Label, {\n size: \"tiny\",\n basic: true,\n color: \"grey\",\n title: \"Source mesh peer\"\n }, \"from: \", fromPeerId)), _this5._renderPurgeButton(entry));\n }\n if (entry.object && entry.object.type === 'BitcoinBlock') {\n var _o = entry.object;\n var hash = String(_o.hash || _o.id || '').trim();\n var height = _o.height;\n var txCount = _o.txCount;\n var net = _o.network ? String(_o.network) : '';\n var _isLast4 = index === entries.length - 1;\n var bbCreated = _o.created || null;\n var heightLabel = height != null && Number.isFinite(Number(height)) ? \"#\".concat(height) : 'block';\n var txLabel = txCount != null && Number.isFinite(Number(txCount)) ? \"\".concat(Number(txCount), \" tx\").concat(Number(txCount) === 1 ? '' : 's') : null;\n return /*#__PURE__*/React.createElement(\"div\", {\n key: \"\".concat(hash || 'block', \"-\").concat(bbCreated || index),\n ref: _isLast4 ? _this5._lastEntryRef : null,\n style: {\n marginBottom: '0.4em',\n fontSize: '0.95em'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"cube\",\n color: \"yellow\",\n title: \"New chain tip\"\n }), ' ', /*#__PURE__*/React.createElement(\"strong\", null, \"New block\"), ' ', hash ? uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: \"/services/bitcoin/blocks/\".concat(encodeURIComponent(hash)),\n style: {\n color: '#2185d0'\n }\n }, heightLabel) : /*#__PURE__*/React.createElement(\"span\", {\n title: \"Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility to open the block viewer\"\n }, heightLabel) : /*#__PURE__*/React.createElement(\"span\", null, heightLabel), hash && /*#__PURE__*/React.createElement(React.Fragment, null, ' ', /*#__PURE__*/React.createElement(\"code\", {\n style: {\n fontSize: '0.88em',\n color: '#555'\n },\n title: hash\n }, hash.length > 18 ? \"\".concat(hash.slice(0, 10), \"\\u2026\").concat(hash.slice(-8)) : hash)), txLabel ? /*#__PURE__*/React.createElement(React.Fragment, null, \" \\xB7 \", txLabel) : null, net ? /*#__PURE__*/React.createElement(\"span\", {\n style: {\n color: '#888'\n }\n }, \" \\xB7 \", net) : null, _this5._renderPurgeButton(entry));\n }\n if (entry.object && entry.object.type === 'Document') {\n var ob = entry.object;\n var mime = String(ob.mime || '').toLowerCase();\n if (ob.bitcoinBlock === true || mime === 'application/x-fabric-bitcoin-block+json') {\n return null;\n }\n }\n var verb = entry.type || 'Activity';\n var objectType = entry.object && entry.object.type ? entry.object.type : 'Object';\n var objectName = entry.object && (entry.object.name || entry.object.id);\n var objectTypeLabel = String(objectType || 'Object').trim();\n var objectNameLabel = objectName != null && String(objectName).trim() ? String(objectName).trim() : '';\n var objectSummary = objectNameLabel ? \"\".concat(objectTypeLabel, \": \").concat(objectNameLabel) : objectTypeLabel;\n var objectId = entry.object && entry.object.id;\n var objectHref = null;\n if (objectType === 'Document' && objectId) {\n objectHref = \"/documents/\".concat(encodeURIComponent(objectId));\n } else if (objectType === 'StorageContract' && objectId) {\n objectHref = \"/contracts/\".concat(encodeURIComponent(objectId));\n }\n var targetHref = null;\n if (typeof target === 'string' && target && !isLikelyBip32ExtendedKey(target)) {\n if (peerDetailNav) targetHref = \"/peers/\".concat(encodeURIComponent(target));\n } else if (target && target.type === 'Collection' && target.name === 'documents') {\n targetHref = '/documents';\n }\n var isLast = index === entries.length - 1;\n return /*#__PURE__*/React.createElement(\"div\", {\n key: \"\".concat(created || 'activity', \"-\").concat(index),\n ref: isLast ? _this5._lastEntryRef : null,\n style: {\n marginBottom: '0.35em'\n }\n }, actorId && actorId !== 'system' ? !isLikelyBip32ExtendedKey(actorId) && peerDetailNav ? /*#__PURE__*/React.createElement(Link, {\n to: \"/peers/\".concat(encodeURIComponent(actorId)),\n style: {\n color: 'inherit',\n textDecoration: 'none'\n }\n }, /*#__PURE__*/React.createElement(\"strong\", null, \"@\", actorId)) : /*#__PURE__*/React.createElement(\"strong\", {\n title: !peerDetailNav && !isLikelyBip32ExtendedKey(actorId) ? 'Peers detail requires hub admin token in this browser' : 'BIP32 extended key — not a TCP peer route'\n }, \"@\", actorId) : /*#__PURE__*/React.createElement(\"strong\", null, \"@\", actorId), ' ', verb, ' ', objectHref ? /*#__PURE__*/React.createElement(Link, {\n to: objectHref,\n style: {\n color: 'inherit',\n textDecoration: 'none'\n }\n }, /*#__PURE__*/React.createElement(\"strong\", null, objectSummary)) : /*#__PURE__*/React.createElement(\"strong\", null, objectSummary), targetLabel && /*#__PURE__*/React.createElement(React.Fragment, null, \" \\u2192 \", targetHref ? /*#__PURE__*/React.createElement(Link, {\n to: targetHref,\n style: {\n color: 'inherit',\n textDecoration: 'none'\n }\n }, /*#__PURE__*/React.createElement(\"span\", null, targetLabel)) : /*#__PURE__*/React.createElement(\"span\", null, targetLabel)), _this5._renderPurgeButton(entry));\n })), entries.length === 0 && streamPreset === 'notifications' && /*#__PURE__*/React.createElement(\"div\", {\n style: {\n color: '#888',\n fontSize: '0.9em',\n padding: '0.35em 0',\n lineHeight: 1.45\n }\n }, \"No delegation signature requests in this feed yet.\", uf.activities ? /*#__PURE__*/React.createElement(React.Fragment, null, ' ', \"Wallet, Payjoin, and other short toasts are listed on the\", ' ', /*#__PURE__*/React.createElement(Link, {\n to: \"/notifications\"\n }, \"Notifications\"), ' ', \"page (bell in the top bar).\") : /*#__PURE__*/React.createElement(React.Fragment, null, \" Enable \\u201CActivities\\u201D in Admin \\u2192 Feature visibility to open the full feed and bell toasts.\"), ' ', \"Open\", ' ', /*#__PURE__*/React.createElement(Link, {\n to: \"/settings/security\"\n }, \"Security & delegation\"), ' ', \"to list or revoke desktop signing sessions.\"), entries.length === 0 && streamPreset !== 'notifications' && /*#__PURE__*/React.createElement(\"div\", {\n style: {\n color: '#888',\n fontSize: '0.9em',\n padding: '0.35em 0'\n }\n }, entryTypeFilter === 'all' ? 'No activity yet. Chat, document events, and Bitcoin blocks show here when the hub and network are active.' : \"No \".concat(entryTypeFilter, \" activity matches this filter yet.\"))), /*#__PURE__*/React.createElement(\"div\", {\n style: {\n marginTop: '0.5em'\n }\n }, showChatChrome && (meshStatus || chatDebug) && /*#__PURE__*/React.createElement(\"div\", {\n style: {\n marginBottom: '0.5em',\n color: '#666',\n fontSize: '0.85em'\n }\n }, \"WebRTC Debug: mesh connected \", meshStatus && Number.isFinite(meshStatus.connected) ? meshStatus.connected : 0, ' ', \"| self \", toShortId(chatDebug && chatDebug.peerId), ' ', \"| peers [\", connectedPeerLabel, \"]\", ' ', \"| last deliveredTo \", lastDeliveredTo != null ? lastDeliveredTo : '-', ' ', \"| recipients [\", recipientPeerLabel, \"]\"), this.state.chatWarning && /*#__PURE__*/React.createElement(\"div\", {\n style: {\n marginBottom: '0.5em'\n }\n }, /*#__PURE__*/React.createElement(Label, {\n basic: true,\n color: \"orange\"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"lock\"\n }), this.state.chatWarning), typeof this.props.onRequireUnlock === 'function' && /*#__PURE__*/React.createElement(Button, {\n size: \"mini\",\n basic: true,\n color: \"orange\",\n style: {\n marginLeft: '0.5em'\n },\n onClick: function onClick() {\n return _this5.props.onRequireUnlock();\n }\n }, \"Unlock\")), showChatChrome && hasComposeChannel && !canSubmitChat && /*#__PURE__*/React.createElement(\"p\", {\n id: \"fabric-chat-compose-hint\",\n style: {\n marginBottom: '0.5em',\n fontSize: '0.85em',\n color: '#666',\n lineHeight: 1.45\n }\n }, function () {\n var mode = classifyHubBrowserIdentity(idHint);\n if (mode === 'password_locked') {\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Link, {\n to: \"/settings\"\n }, \"Settings\"), \" \\u2192 \", /*#__PURE__*/React.createElement(\"strong\", null, \"Fabric identity\"), \", or the top-bar \", /*#__PURE__*/React.createElement(\"strong\", null, \"Locked\"), \" control, unlocks chat signing (encryption password).\");\n }\n if (mode === 'watch_only') {\n return /*#__PURE__*/React.createElement(React.Fragment, null, \"Chat needs a signing key in this browser. Open \", /*#__PURE__*/React.createElement(Link, {\n to: \"/settings\"\n }, \"Settings\"), \" \\u2192 \", /*#__PURE__*/React.createElement(\"strong\", null, \"Fabric identity\"), \" or the top-bar identity menu to import a full key or use desktop signing (watch-only cannot sign).\");\n }\n return /*#__PURE__*/React.createElement(React.Fragment, null, \"Create or restore a key: \", /*#__PURE__*/React.createElement(Link, {\n to: \"/settings\"\n }, \"Settings\"), \" \\u2192 \", /*#__PURE__*/React.createElement(\"strong\", null, \"Fabric identity\"), \", or \", /*#__PURE__*/React.createElement(\"strong\", null, \"Log in\"), \" in the top bar.\");\n }()), showChatChrome && hasComposeChannel && /*#__PURE__*/React.createElement(ChatInput, {\n inputId: \"fabric-chat-compose-input\",\n ariaDescribedBy: !canSubmitChat ? 'fabric-chat-compose-hint' : undefined,\n value: this.state.chatInput,\n onChange: function onChange(value) {\n return _this5.setState({\n chatInput: value\n });\n },\n onSubmit: function onSubmit(text) {\n if (!canSubmitChat) {\n if (typeof _this5.props.onRequireUnlock === 'function') _this5.props.onRequireUnlock();\n _this5._handleChatWarning({\n detail: {\n message: chatDisabledReason\n }\n });\n return;\n }\n var onSubmit = _this5.props.onSubmitChat || _this5.props.bridge && _this5.props.bridge.current && typeof _this5.props.bridge.current.submitChatMessage === 'function' && _this5.props.bridge.current.submitChatMessage.bind(_this5.props.bridge.current);\n if (typeof onSubmit === 'function') {\n onSubmit(text);\n _this5.setState({\n chatInput: ''\n });\n }\n },\n placeholder: \"Type a message\\u2026\",\n title: chatDisabledReason || 'Send chat message',\n disabled: !canSubmitChat\n })));\n }\n }]);\n}(React.Component);\nfunction ActivityStream(props) {\n return /*#__PURE__*/React.createElement(ActivityStreamElement, props);\n}\nmodule.exports = ActivityStream;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFNBQVNDLGNBQWNBLENBQUV6USxLQUFLLEVBQUU7RUFDOUIsb0JBQU9uQyxLQUFBLENBQUFxTCxhQUFBLENBQUNwSixxQkFBcUIsRUFBS0UsS0FBUSxDQUFDO0FBQzdDO0FBRUEwUSxNQUFNLENBQUNDLE9BQU8sR0FBR0YsY0FBYyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29tcG9uZW50cy9BY3Rpdml0eVN0cmVhbS5qcz83ODg5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gRGVwZW5kZW5jaWVzXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IGlzTGlrZWx5QmlwMzJFeHRlbmRlZEtleSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2lzTGlrZWx5QmlwMzJFeHRlbmRlZEtleScpO1xuY29uc3QgeyBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5jb25zdCB7IEJ1dHRvbiwgSWNvbiwgTGFiZWwgfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCBDaGF0SW5wdXQgPSByZXF1aXJlKCcuL0NoYXRJbnB1dCcpO1xuY29uc3QgeyBpc0RlbGVnYXRpb25TaWduYXR1cmVSZXF1ZXN0QWN0aXZpdHkgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9tZXNzYWdlVHlwZXMnKTtcbmNvbnN0IHsgbG9hZEh1YlVpRmVhdHVyZUZsYWdzIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViVWlGZWF0dXJlRmxhZ3MnKTtcbmNvbnN0IHsgc2FmZUlkZW50aXR5RXJyIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljU2FmZUxvZycpO1xuY29uc3QgeyByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViQWRtaW5Ub2tlbkJyb3dzZXInKTtcbmNvbnN0IHtcbiAgY2xhc3NpZnlIdWJCcm93c2VySWRlbnRpdHksXG4gIGZhYnJpY0lkZW50aXR5Q2hhdERpc2FibGVkUmVhc29uUGxhaW5cbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViSWRlbnRpdHlVaUhpbnRzJyk7XG5cbmNvbnN0IE1FU1NBR0VfUEFHRV9TSVpFID0gMTA7XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVudHJ5XG4gKiBAcmV0dXJucyB7J2NoYXQnfCdiaXRjb2luJ3wnZG9jdW1lbnRzJ3wnbmV0d29yayd8J3NpZ25pbmcnfG51bGx9XG4gKi9cbmZ1bmN0aW9uIGdldEFjdGl2aXR5RW50cnlDYXRlZ29yeSAoZW50cnkpIHtcbiAgaWYgKCFlbnRyeSB8fCB0eXBlb2YgZW50cnkgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgaWYgKGVudHJ5LnR5cGUgPT09ICdDTElFTlRfTk9USUNFJykgcmV0dXJuICdiaXRjb2luJztcbiAgaWYgKGVudHJ5LnR5cGUgPT09ICdQMlBfQ0hBVF9NRVNTQUdFJykgcmV0dXJuICdjaGF0JztcbiAgaWYgKGlzRGVsZWdhdGlvblNpZ25hdHVyZVJlcXVlc3RBY3Rpdml0eShlbnRyeSkpIHJldHVybiAnc2lnbmluZyc7XG4gIGlmIChlbnRyeS5vYmplY3QgJiYgZW50cnkub2JqZWN0LnR5cGUgPT09ICdCaXRjb2luQmxvY2snKSByZXR1cm4gJ2JpdGNvaW4nO1xuICBpZiAoZW50cnkub2JqZWN0ICYmIGVudHJ5Lm9iamVjdC50eXBlID09PSAnRG9jdW1lbnQnKSB7XG4gICAgY29uc3QgbWltZSA9IFN0cmluZyhlbnRyeS5vYmplY3QubWltZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoZW50cnkub2JqZWN0LmJpdGNvaW5CbG9jayA9PT0gdHJ1ZSB8fCBtaW1lID09PSAnYXBwbGljYXRpb24veC1mYWJyaWMtYml0Y29pbi1ibG9jaytqc29uJykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuICdkb2N1bWVudHMnO1xuICB9XG4gIHJldHVybiAnbmV0d29yayc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVudHJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIGVudHJ5TWF0Y2hlc0FjdGl2aXR5RmlsdGVyIChlbnRyeSwgZmlsdGVyKSB7XG4gIGNvbnN0IGYgPSAoZmlsdGVyICYmIFN0cmluZyhmaWx0ZXIpLnRyaW0oKSkgfHwgJ2FsbCc7XG4gIGlmIChmID09PSAnYWxsJykgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGNhdCA9IGdldEFjdGl2aXR5RW50cnlDYXRlZ29yeShlbnRyeSk7XG4gIGlmIChjYXQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gY2F0ID09PSBmO1xufVxuXG5jbGFzcyBBY3Rpdml0eVN0cmVhbUVsZW1lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBhdXRob3JpdHk6ICdodHRwczovL2h1Yi5mYWJyaWMucHViJyxcbiAgICAgIGluY2x1ZGVIZWFkZXI6IHRydWUsXG4gICAgICBhY3Rpdml0aWVzOiBbXVxuICAgIH0sIHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAuLi50aGlzLnNldHRpbmdzLFxuICAgICAgY2hhdElucHV0OiAnJyxcbiAgICAgIGVudHJpZXM6IFtdLFxuICAgICAgZGlzcGxheUxpbWl0OiBNRVNTQUdFX1BBR0VfU0laRSxcbiAgICAgIGNoYXRXYXJuaW5nOiBudWxsXG4gICAgfTtcblxuICAgIHRoaXMuX3Njcm9sbENvbnRhaW5lclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuX2xhc3RFbnRyeVJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuX2xvYWRNb3JlU2VudGluZWxSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcbiAgICB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlciA9IG51bGw7XG4gICAgdGhpcy5fc2hvdWxkU2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcbiAgICB0aGlzLl9wcmV2RW50cmllc0xlbmd0aCA9IDA7XG4gICAgdGhpcy5fdXNlckhhc0xvYWRlZE1vcmUgPSBmYWxzZTtcbiAgICB0aGlzLl91c2VySGFzU2Nyb2xsZWRJblN0cmVhbSA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX3Njcm9sbFRvQm90dG9tICgpIHtcbiAgICBjb25zdCBsYXN0RWwgPSB0aGlzLl9sYXN0RW50cnlSZWYuY3VycmVudDtcbiAgICBpZiAobGFzdEVsICYmIHR5cGVvZiBsYXN0RWwuc2Nyb2xsSW50b1ZpZXcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGxhc3RFbC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnZW5kJywgYmVoYXZpb3I6ICdhdXRvJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWwgPSB0aGlzLl9zY3JvbGxDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodCAtIGVsLmNsaWVudEhlaWdodDtcbiAgICB9XG4gIH1cblxuICBfaXNTY3JvbGxlZFRvQm90dG9tICgpIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuX3Njcm9sbENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IDIwO1xuICAgIHJldHVybiBlbC5zY3JvbGxUb3AgKyBlbC5jbGllbnRIZWlnaHQgPj0gZWwuc2Nyb2xsSGVpZ2h0IC0gdGhyZXNob2xkO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQgKCkge1xuICAgIGNvbnNvbGUuZGVidWcoJ1tGQUJSSUM6U1RSRUFNXScsICdTdHJlYW0gbW91bnRlZCEnKTtcbiAgICAvLyBPcHRpb25hbDogcGFyZW50IG1heSBwYXNzIGZldGNoUmVzb3VyY2UocGF0aCkgZm9yIG5vbi1icmlkZ2UgYWN0aXZpdHkgc291cmNlcy5cbiAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMuZmV0Y2hSZXNvdXJjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgcHJlc2V0ID0gdGhpcy5wcm9wcy5zdHJlYW1QcmVzZXQgfHwgJ2RlZmF1bHQnO1xuICAgICAgY29uc3QgdWYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgICAgIGlmIChwcmVzZXQgIT09ICdub3RpZmljYXRpb25zJyB8fCB1Zi5hY3Rpdml0aWVzKSB7XG4gICAgICAgIHRoaXMucHJvcHMuZmV0Y2hSZXNvdXJjZSgnL2FjdGl2aXRpZXMnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2dsb2JhbFN0YXRlVXBkYXRlJywgdGhpcy5faGFuZGxlR2xvYmFsU3RhdGVVcGRhdGUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmYWJyaWM6Y2hhdFdhcm5pbmcnLCB0aGlzLl9oYW5kbGVDaGF0V2FybmluZyk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZhYnJpYzpsMVBheW1lbnRBY3Rpdml0eScsIHRoaXMuX2hhbmRsZUwxUGF5bWVudEFjdGl2aXR5KTtcbiAgICAvLyBJbml0aWFsIGxvYWQgZnJvbSBwZXJzaXN0ZWQvcmVzdG9yZWQgc3RhdGUgKHN1cnZpdmVzIHJlZnJlc2gpXG4gICAgY29uc3QgYWN0aXZlQnJpZGdlUmVmID0gdGhpcy5wcm9wcy5icmlkZ2VSZWYgfHwgdGhpcy5wcm9wcy5icmlkZ2U7XG4gICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSBhY3RpdmVCcmlkZ2VSZWYgJiYgYWN0aXZlQnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgaWYgKGJyaWRnZUluc3RhbmNlICYmIHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5nZXRHbG9iYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgZ3MgPSBicmlkZ2VJbnN0YW5jZS5nZXRHbG9iYWxTdGF0ZSgpO1xuICAgICAgaWYgKGdzKSB0aGlzLl9oYW5kbGVHbG9iYWxTdGF0ZVVwZGF0ZSh7IGRldGFpbDogeyBnbG9iYWxTdGF0ZTogZ3MgfSB9KTtcbiAgICB9XG4gICAgdGhpcy5fc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpO1xuICAgIHRoaXMuX3ByZXZFbnRyaWVzTGVuZ3RoID0gdGhpcy5zdGF0ZS5lbnRyaWVzLmxlbmd0aDtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSAocHJldlByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICB0aGlzLl9vYnNlcnZlU2VudGluZWwoKTtcbiAgICBjb25zdCBwcmV2TGVuID0gdGhpcy5fcHJldkVudHJpZXNMZW5ndGg7XG4gICAgY29uc3QgY3VyckxlbiA9IHRoaXMuc3RhdGUuZW50cmllcy5sZW5ndGg7XG4gICAgdGhpcy5fcHJldkVudHJpZXNMZW5ndGggPSBjdXJyTGVuO1xuICAgIGlmICh0aGlzLl9zaG91bGRTY3JvbGxUb0JvdHRvbSB8fCAoY3VyckxlbiA+IDAgJiYgcHJldkxlbiA9PT0gMCkpIHtcbiAgICAgIHRoaXMuX3Nob3VsZFNjcm9sbFRvQm90dG9tID0gZmFsc2U7XG4gICAgICB0aGlzLl9zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuX3Njcm9sbFRvQm90dG9tKCkpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zY3JvbGxUb0JvdHRvbSgpLCAxMDApO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zY3JvbGxUb0JvdHRvbSgpLCAzMDApO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2h1YlVpRmxhZ3NVbnN1YiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5faHViVWlGbGFnc1Vuc3ViKCk7XG4gICAgICB0aGlzLl9odWJVaUZsYWdzVW5zdWIgPSBudWxsO1xuICAgIH1cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZ2xvYmFsU3RhdGVVcGRhdGUnLCB0aGlzLl9oYW5kbGVHbG9iYWxTdGF0ZVVwZGF0ZSk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZhYnJpYzpjaGF0V2FybmluZycsIHRoaXMuX2hhbmRsZUNoYXRXYXJuaW5nKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZmFicmljOmwxUGF5bWVudEFjdGl2aXR5JywgdGhpcy5faGFuZGxlTDFQYXltZW50QWN0aXZpdHkpO1xuICAgIGlmICh0aGlzLl9jaGF0V2FybmluZ1RpbWVyKSBjbGVhclRpbWVvdXQodGhpcy5fY2hhdFdhcm5pbmdUaW1lcik7XG4gICAgaWYgKHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyICYmIHRoaXMuX2xvYWRNb3JlU2VudGluZWxSZWYuY3VycmVudCkge1xuICAgICAgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuX2xvYWRNb3JlU2VudGluZWxSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyID0gbnVsbDtcbiAgfVxuXG4gIF9zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyICgpIHtcbiAgICBpZiAodHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9zY3JvbGxDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICBjb25zdCBzZW50aW5lbCA9IGVudHJpZXNbMF07XG4gICAgICAgIGlmICghc2VudGluZWwgfHwgIXNlbnRpbmVsLmlzSW50ZXJzZWN0aW5nKSByZXR1cm47XG4gICAgICAgIGlmICghdGhpcy5fdXNlckhhc1Njcm9sbGVkSW5TdHJlYW0pIHJldHVybjtcbiAgICAgICAgdGhpcy5fdXNlckhhc0xvYWRlZE1vcmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldFN0YXRlKChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgdG90YWwgPSBwcmV2LmVudHJpZXMubGVuZ3RoO1xuICAgICAgICAgIGlmIChwcmV2LmRpc3BsYXlMaW1pdCA+PSB0b3RhbCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgcmV0dXJuIHsgZGlzcGxheUxpbWl0OiBNYXRoLm1pbihwcmV2LmRpc3BsYXlMaW1pdCArIE1FU1NBR0VfUEFHRV9TSVpFLCB0b3RhbCkgfTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgeyByb290LCByb290TWFyZ2luOiAnMHB4JywgdGhyZXNob2xkOiAwIH1cbiAgICApO1xuICAgIHRoaXMuX29ic2VydmVTZW50aW5lbCgpO1xuICB9XG5cbiAgX29ic2VydmVTZW50aW5lbCAoKSB7XG4gICAgaWYgKCF0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlcikgcmV0dXJuO1xuICAgIGlmICh0aGlzLl9vYnNlcnZlZFNlbnRpbmVsKSB7XG4gICAgICB0cnkgeyB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlci51bm9ic2VydmUodGhpcy5fb2JzZXJ2ZWRTZW50aW5lbCk7IH0gY2F0Y2ggKF8pIHt9XG4gICAgICB0aGlzLl9vYnNlcnZlZFNlbnRpbmVsID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xvYWRNb3JlU2VudGluZWxSZWYuY3VycmVudCkge1xuICAgICAgdGhpcy5fb2JzZXJ2ZWRTZW50aW5lbCA9IHRoaXMuX2xvYWRNb3JlU2VudGluZWxSZWYuY3VycmVudDtcbiAgICAgIHRoaXMuX2ludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5fb2JzZXJ2ZWRTZW50aW5lbCk7XG4gICAgfVxuICB9XG5cbiAgX3RvbWJzdG9uZURvY3VtZW50SWQgKGVudHJ5KSB7XG4gICAgaWYgKCFlbnRyeSB8fCAhZW50cnkub2JqZWN0KSByZXR1cm4gbnVsbDtcbiAgICBpZiAoZW50cnkudHlwZSA9PT0gJ0FkZCcgJiYgZW50cnkub2JqZWN0LnR5cGUgPT09ICdEb2N1bWVudCcgJiYgZW50cnkub2JqZWN0LmlkKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGVudHJ5Lm9iamVjdC5pZCkudHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIF9oYW5kbGVQdXJnZUVudHJ5ID0gKG1lc3NhZ2VLZXksIGRvY3VtZW50SWQpID0+IHtcbiAgICBjb25zdCBtayA9IHR5cGVvZiBtZXNzYWdlS2V5ID09PSAnc3RyaW5nJyA/IG1lc3NhZ2VLZXkudHJpbSgpIDogJyc7XG4gICAgY29uc3QgZG9jSWQgPSB0eXBlb2YgZG9jdW1lbnRJZCA9PT0gJ3N0cmluZycgPyBkb2N1bWVudElkLnRyaW0oKSA6ICcnO1xuICAgIGlmICghbWsgJiYgIWRvY0lkKSByZXR1cm47XG4gICAgY29uc3QgYWN0aXZlQnJpZGdlUmVmID0gdGhpcy5wcm9wcy5icmlkZ2VSZWYgfHwgdGhpcy5wcm9wcy5icmlkZ2U7XG4gICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSBhY3RpdmVCcmlkZ2VSZWYgJiYgYWN0aXZlQnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFicmlkZ2VJbnN0YW5jZSB8fCB0eXBlb2YgYnJpZGdlSW5zdGFuY2UuZW1pdFRvbWJzdG9uZSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuO1xuICAgIGNvbnN0IHRva2VuID0gcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3Nlcih0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuYWRtaW5Ub2tlbik7XG4gICAgYnJpZGdlSW5zdGFuY2UuZW1pdFRvbWJzdG9uZSh7XG4gICAgICBtZXNzYWdlSWQ6IG1rIHx8IHVuZGVmaW5lZCxcbiAgICAgIGRvY3VtZW50SWQ6IGRvY0lkIHx8IHVuZGVmaW5lZCxcbiAgICAgIGFkbWluVG9rZW46IHRva2VuXG4gICAgfSk7XG4gIH07XG5cbiAgX3JlbmRlclB1cmdlQnV0dG9uIChlbnRyeSkge1xuICAgIGlmIChlbnRyeSAmJiBlbnRyeS5vYmplY3QgJiYgZW50cnkub2JqZWN0LmxvY2FsT25seSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgYWRtaW5Ub2tlbiA9IHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmFkbWluVG9rZW4pO1xuICAgIGlmICghYWRtaW5Ub2tlbiB8fCAhZW50cnkgfHwgIWVudHJ5Lm1lc3NhZ2VLZXkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGRvY0lkID0gdGhpcy5fdG9tYnN0b25lRG9jdW1lbnRJZChlbnRyeSk7XG4gICAgY29uc3QgdGl0bGUgPSBkb2NJZFxuICAgICAgPyAnUmVtb3ZlIHRoaXMgYWN0aXZpdHkgcm93IGFuZCB1bnB1Ymxpc2ggdGhlIGRvY3VtZW50IGZyb20gdGhlIGh1YiBjYXRhbG9nIChyZXF1aXJlcyBhZG1pbiknXG4gICAgICA6ICdQdXJnZSB0aGlzIGVudHJ5IGZyb20gdGhlIGh1YiBhY3Rpdml0eSBsb2cgKHJlcXVpcmVzIGFkbWluKSc7XG4gICAgcmV0dXJuIChcbiAgICAgIDxCdXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGJhc2ljXG4gICAgICAgIGljb25cbiAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICBjb21wYWN0XG4gICAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJywgdmVydGljYWxBbGlnbjogJ21pZGRsZScgfX1cbiAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuX2hhbmRsZVB1cmdlRW50cnkoZW50cnkubWVzc2FnZUtleSwgZG9jSWQgfHwgdW5kZWZpbmVkKTtcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPEljb24gbmFtZT1cInRyYXNoXCIgLz5cbiAgICAgIDwvQnV0dG9uPlxuICAgICk7XG4gIH1cblxuICBfaGFuZGxlTDFQYXltZW50QWN0aXZpdHkgPSAoZXZlbnQpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZCA9IGV2ZW50ICYmIGV2ZW50LmRldGFpbDtcbiAgICAgIGlmICghZCB8fCAhZC50eGlkKSByZXR1cm47XG4gICAgICBjb25zdCBhY3RpdmVCcmlkZ2VSZWYgPSB0aGlzLnByb3BzLmJyaWRnZVJlZiB8fCB0aGlzLnByb3BzLmJyaWRnZTtcbiAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gYWN0aXZlQnJpZGdlUmVmICYmIGFjdGl2ZUJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgaWYgKGJyaWRnZUluc3RhbmNlICYmIHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5hcHBseUwxSW52b2ljZVBheW1lbnRBY3Rpdml0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBicmlkZ2VJbnN0YW5jZS5hcHBseUwxSW52b2ljZVBheW1lbnRBY3Rpdml0eShkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tGQUJSSUM6U1RSRUFNXSBsMVBheW1lbnRBY3Rpdml0eTonLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgIH1cbiAgfTtcblxuICBfaGFuZGxlR2xvYmFsU3RhdGVVcGRhdGUgPSAoZXZlbnQpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZ2xvYmFsU3RhdGUgPSBldmVudCAmJiBldmVudC5kZXRhaWwgJiYgZXZlbnQuZGV0YWlsLmdsb2JhbFN0YXRlO1xuICAgICAgaWYgKCFnbG9iYWxTdGF0ZSkgcmV0dXJuO1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBnbG9iYWxTdGF0ZS5tZXNzYWdlcyB8fCB7fTtcbiAgICAgIGNvbnN0IHByZXNldCA9IHRoaXMucHJvcHMuc3RyZWFtUHJlc2V0IHx8ICdkZWZhdWx0JztcbiAgICAgIGNvbnN0IGZhYnJpY0VudHJpZXMgPSBPYmplY3QuZW50cmllcyhtZXNzYWdlcylcbiAgICAgICAgLmZpbHRlcigoWywgbV0pID0+IG0gJiYgdHlwZW9mIG0gPT09ICdvYmplY3QnKVxuICAgICAgICAubWFwKChbbWVzc2FnZUtleSwgbV0pID0+IE9iamVjdC5hc3NpZ24oe30sIG0sIHsgbWVzc2FnZUtleSB9KSlcbiAgICAgICAgLmZpbHRlcigobSkgPT4ge1xuICAgICAgICAgIGlmIChwcmVzZXQgPT09ICdub3RpZmljYXRpb25zJykgcmV0dXJuIGlzRGVsZWdhdGlvblNpZ25hdHVyZVJlcXVlc3RBY3Rpdml0eShtKTtcbiAgICAgICAgICByZXR1cm4gIWlzRGVsZWdhdGlvblNpZ25hdHVyZVJlcXVlc3RBY3Rpdml0eShtKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCB0YSA9IChhLm9iamVjdCAmJiBhLm9iamVjdC5jcmVhdGVkKSB8fCAwO1xuICAgICAgICAgIGNvbnN0IHRiID0gKGIub2JqZWN0ICYmIGIub2JqZWN0LmNyZWF0ZWQpIHx8IDA7XG4gICAgICAgICAgcmV0dXJuIHRhIC0gdGI7IC8vIG9sZGVzdCBmaXJzdFxuICAgICAgICB9KTtcblxuICAgICAgY29uc3QgZG9jQWRkTGFzdCA9IG5ldyBNYXAoKTtcbiAgICAgIGZvciAoY29uc3QgbSBvZiBmYWJyaWNFbnRyaWVzKSB7XG4gICAgICAgIGlmIChtICYmIG0udHlwZSA9PT0gJ0FkZCcgJiYgbS5vYmplY3QgJiYgbS5vYmplY3QudHlwZSA9PT0gJ0RvY3VtZW50JyAmJiBtLm9iamVjdC5pZCkge1xuICAgICAgICAgIGRvY0FkZExhc3Quc2V0KFN0cmluZyhtLm9iamVjdC5pZCksIG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBmYWJyaWNEZWR1cGVkID0gZmFicmljRW50cmllcy5maWx0ZXIoKG0pID0+IHtcbiAgICAgICAgaWYgKG0gJiYgbS50eXBlID09PSAnQWRkJyAmJiBtLm9iamVjdCAmJiBtLm9iamVjdC50eXBlID09PSAnRG9jdW1lbnQnICYmIG0ub2JqZWN0LmlkKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBTdHJpbmcobS5vYmplY3QuaWQpO1xuICAgICAgICAgIHJldHVybiBkb2NBZGRMYXN0LmdldChpZCkgPT09IG07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgICAgLy8gVG9tYnN0b25lcyBjYW4gYmUgcmVwbGF5ZWQgb3IgZW1pdHRlZCB0aHJvdWdoIG11bHRpcGxlIHBhdGhzOyBrZWVwIHRoZSBsYXRlc3RcbiAgICAgIC8vIGV2ZW50IHBlciB0YXJnZXQgc28gb25lIHB1cmdlIGFjdGlvbiBkb2VzIG5vdCBmbG9vZCB0aGUgdmlzaWJsZSBmZWVkLlxuICAgICAgY29uc3QgdG9tYnN0b25lTGFzdCA9IG5ldyBNYXAoKTtcbiAgICAgIGZvciAoY29uc3QgbSBvZiBmYWJyaWNEZWR1cGVkKSB7XG4gICAgICAgIGlmICghbSB8fCBtLnR5cGUgIT09ICdUb21ic3RvbmUnIHx8ICFtLm9iamVjdCB8fCB0eXBlb2YgbS5vYmplY3QgIT09ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgYWN0aXZpdHlJZCA9IG0ub2JqZWN0LmFjdGl2aXR5TWVzc2FnZUlkICE9IG51bGwgPyBTdHJpbmcobS5vYmplY3QuYWN0aXZpdHlNZXNzYWdlSWQpLnRyaW0oKSA6ICcnO1xuICAgICAgICBjb25zdCBkb2N1bWVudElkID0gbS5vYmplY3QuZG9jdW1lbnRJZCAhPSBudWxsID8gU3RyaW5nKG0ub2JqZWN0LmRvY3VtZW50SWQpLnRyaW0oKSA6ICcnO1xuICAgICAgICBjb25zdCBrZXkgPSBhY3Rpdml0eUlkID8gYGFjdGl2aXR5OiR7YWN0aXZpdHlJZH1gIDogKGRvY3VtZW50SWQgPyBgZG9jdW1lbnQ6JHtkb2N1bWVudElkfWAgOiAnJyk7XG4gICAgICAgIGlmIChrZXkpIHRvbWJzdG9uZUxhc3Quc2V0KGtleSwgbSk7XG4gICAgICB9XG4gICAgICBjb25zdCBmYWJyaWNEZWR1cGVkRmluYWwgPSBmYWJyaWNEZWR1cGVkLmZpbHRlcigobSkgPT4ge1xuICAgICAgICBpZiAoIW0gfHwgbS50eXBlICE9PSAnVG9tYnN0b25lJyB8fCAhbS5vYmplY3QgfHwgdHlwZW9mIG0ub2JqZWN0ICE9PSAnb2JqZWN0JykgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IGFjdGl2aXR5SWQgPSBtLm9iamVjdC5hY3Rpdml0eU1lc3NhZ2VJZCAhPSBudWxsID8gU3RyaW5nKG0ub2JqZWN0LmFjdGl2aXR5TWVzc2FnZUlkKS50cmltKCkgOiAnJztcbiAgICAgICAgY29uc3QgZG9jdW1lbnRJZCA9IG0ub2JqZWN0LmRvY3VtZW50SWQgIT0gbnVsbCA/IFN0cmluZyhtLm9iamVjdC5kb2N1bWVudElkKS50cmltKCkgOiAnJztcbiAgICAgICAgY29uc3Qga2V5ID0gYWN0aXZpdHlJZCA/IGBhY3Rpdml0eToke2FjdGl2aXR5SWR9YCA6IChkb2N1bWVudElkID8gYGRvY3VtZW50OiR7ZG9jdW1lbnRJZH1gIDogJycpO1xuICAgICAgICBpZiAoIWtleSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiB0b21ic3RvbmVMYXN0LmdldChrZXkpID09PSBtO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3Nob3VsZFNjcm9sbFRvQm90dG9tID0gdGhpcy5faXNTY3JvbGxlZFRvQm90dG9tKCk7XG4gICAgICB0aGlzLnNldFN0YXRlKChzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzRmlyc3RMb2FkID0gcy5lbnRyaWVzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgY29uc3QgcHJldk5vdGljZXMgPSBwcmVzZXQgPT09ICdub3RpZmljYXRpb25zJ1xuICAgICAgICAgID8gW11cbiAgICAgICAgICA6IChBcnJheS5pc0FycmF5KHMuZW50cmllcykgPyBzLmVudHJpZXMgOiBbXSkuZmlsdGVyKFxuICAgICAgICAgICAgKGUpID0+IGUgJiYgZS50eXBlID09PSAnQ0xJRU5UX05PVElDRSdcbiAgICAgICAgICApO1xuICAgICAgICBjb25zdCB0Tm90aWNlID0gKGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjID0gZSAmJiBlLm9iamVjdCAmJiBlLm9iamVjdC5jcmVhdGVkO1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgYyA9PT0gJ251bWJlcicgPyBjIDogbmV3IERhdGUoYyB8fCAwKS5nZXRUaW1lKCkgfHwgMDtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGZhYnJpY0RlZHVwZWRGaW5hbC5jb25jYXQocHJldk5vdGljZXMpLnNvcnQoKGEsIGIpID0+IHROb3RpY2UoYSkgLSB0Tm90aWNlKGIpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbnRyaWVzLFxuICAgICAgICAgIGRpc3BsYXlMaW1pdDogaXNGaXJzdExvYWQgPyBNRVNTQUdFX1BBR0VfU0laRSA6IHMuZGlzcGxheUxpbWl0XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbRkFCUklDOlNUUkVBTV0nLCAnRXJyb3IgcHJvY2Vzc2luZyBnbG9iYWwgc3RhdGUgdXBkYXRlOicsIHNhZmVJZGVudGl0eUVycihlKSk7XG4gICAgfVxuICB9O1xuXG4gIF9oYW5kbGVDaGF0V2FybmluZyA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSAoXG4gICAgICBldmVudCAmJlxuICAgICAgZXZlbnQuZGV0YWlsICYmXG4gICAgICB0eXBlb2YgZXZlbnQuZGV0YWlsLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmXG4gICAgICBldmVudC5kZXRhaWwubWVzc2FnZS50cmltKClcbiAgICApIHx8IGZhYnJpY0lkZW50aXR5Q2hhdERpc2FibGVkUmVhc29uUGxhaW4odGhpcy5wcm9wcy5pZGVudGl0eSB8fCB0aGlzLnByb3BzLmF1dGgpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGNoYXRXYXJuaW5nOiBtZXNzYWdlIH0pO1xuXG4gICAgaWYgKHRoaXMuX2NoYXRXYXJuaW5nVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLl9jaGF0V2FybmluZ1RpbWVyKTtcbiAgICB0aGlzLl9jaGF0V2FybmluZ1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2hhdFdhcm5pbmc6IG51bGwgfSk7XG4gICAgICB0aGlzLl9jaGF0V2FybmluZ1RpbWVyID0gbnVsbDtcbiAgICB9LCA2MDAwKTtcbiAgfTtcblxuICBfaGFuZGxlQ2hhdFN1Ym1pdCA9IChlKSA9PiB7XG4gICAgaWYgKGUgJiYgdHlwZW9mIGUucHJldmVudERlZmF1bHQgPT09ICdmdW5jdGlvbicpIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB0ZXh0ID0gKHRoaXMuc3RhdGUuY2hhdElucHV0IHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm47XG4gICAgY29uc3Qgb25TdWJtaXQgPSB0aGlzLnByb3BzLm9uU3VibWl0Q2hhdCB8fCAodGhpcy5wcm9wcy5icmlkZ2UgJiYgdGhpcy5wcm9wcy5icmlkZ2UuY3VycmVudCAmJiB0eXBlb2YgdGhpcy5wcm9wcy5icmlkZ2UuY3VycmVudC5zdWJtaXRDaGF0TWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzLnByb3BzLmJyaWRnZS5jdXJyZW50LnN1Ym1pdENoYXRNZXNzYWdlLmJpbmQodGhpcy5wcm9wcy5icmlkZ2UuY3VycmVudCkpO1xuICAgIGlmICh0eXBlb2Ygb25TdWJtaXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9uU3VibWl0KHRleHQpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNoYXRJbnB1dDogJycgfSk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgYXBpQWN0aXZpdGllcyA9ICh0aGlzLnByb3BzLmFwaSAmJiB0aGlzLnByb3BzLmFwaS5yZXNvdXJjZSAmJiB0aGlzLnByb3BzLmFwaS5yZXNvdXJjZS5hY3Rpdml0aWVzKSB8fCBbXTtcbiAgICBjb25zdCBhbGxFbnRyaWVzID0gQXJyYXkuaXNBcnJheSh0aGlzLnN0YXRlLmVudHJpZXMpICYmIHRoaXMuc3RhdGUuZW50cmllcy5sZW5ndGggPiAwXG4gICAgICA/IHRoaXMuc3RhdGUuZW50cmllc1xuICAgICAgOiBhcGlBY3Rpdml0aWVzO1xuICAgIGNvbnN0IGVudHJ5VHlwZUZpbHRlciA9ICh0aGlzLnByb3BzLmVudHJ5VHlwZUZpbHRlciAmJiBTdHJpbmcodGhpcy5wcm9wcy5lbnRyeVR5cGVGaWx0ZXIpLnRyaW0oKSkgfHwgJ2FsbCc7XG4gICAgY29uc3QgZmlsdGVyZWRFbnRyaWVzID0gZW50cnlUeXBlRmlsdGVyID09PSAnYWxsJ1xuICAgICAgPyBhbGxFbnRyaWVzXG4gICAgICA6IChBcnJheS5pc0FycmF5KGFsbEVudHJpZXMpID8gYWxsRW50cmllcy5maWx0ZXIoKGUpID0+IGVudHJ5TWF0Y2hlc0FjdGl2aXR5RmlsdGVyKGUsIGVudHJ5VHlwZUZpbHRlcikpIDogW10pO1xuICAgIGNvbnN0IHRvdGFsID0gZmlsdGVyZWRFbnRyaWVzLmxlbmd0aDtcbiAgICBjb25zdCBlZmZlY3RpdmVMaW1pdCA9IHRoaXMuX3VzZXJIYXNMb2FkZWRNb3JlID8gdGhpcy5zdGF0ZS5kaXNwbGF5TGltaXQgOiBNRVNTQUdFX1BBR0VfU0laRTtcbiAgICBjb25zdCBkaXNwbGF5TGltaXQgPSBNYXRoLm1pbihlZmZlY3RpdmVMaW1pdCwgdG90YWwpO1xuICAgIGNvbnN0IGVudHJpZXMgPSBmaWx0ZXJlZEVudHJpZXMuc2xpY2UoLWRpc3BsYXlMaW1pdCk7XG4gICAgY29uc3QgaGFzTW9yZSA9IGRpc3BsYXlMaW1pdCA8IHRvdGFsO1xuICAgIGNvbnN0IGFjdGl2ZUJyaWRnZVJlZiA9IHRoaXMucHJvcHMuYnJpZGdlUmVmIHx8IHRoaXMucHJvcHMuYnJpZGdlO1xuICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gYWN0aXZlQnJpZGdlUmVmICYmIGFjdGl2ZUJyaWRnZVJlZi5jdXJyZW50O1xuICAgIGNvbnN0IG1lc2hTdGF0dXMgPSBicmlkZ2VJbnN0YW5jZSAmJiB0eXBlb2YgYnJpZGdlSW5zdGFuY2Uud2VicnRjTWVzaFN0YXR1cyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgID8gYnJpZGdlSW5zdGFuY2Uud2VicnRjTWVzaFN0YXR1c1xuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGNoYXREZWJ1ZyA9IGJyaWRnZUluc3RhbmNlICYmIHR5cGVvZiBicmlkZ2VJbnN0YW5jZS53ZWJydGNDaGF0RGVidWdTdGF0dXMgIT09ICd1bmRlZmluZWQnXG4gICAgICA/IGJyaWRnZUluc3RhbmNlLndlYnJ0Y0NoYXREZWJ1Z1N0YXR1c1xuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGxhc3REZWxpdmVyZWRUbyA9IGNoYXREZWJ1ZyAmJiBOdW1iZXIuaXNGaW5pdGUoY2hhdERlYnVnLmxhc3REZWxpdmVyZWRUbylcbiAgICAgID8gY2hhdERlYnVnLmxhc3REZWxpdmVyZWRUb1xuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHRvU2hvcnRJZCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgIXZhbHVlKSByZXR1cm4gJy0nO1xuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8PSAxMikgcmV0dXJuIHZhbHVlO1xuICAgICAgcmV0dXJuIGAke3ZhbHVlLnNsaWNlKDAsIDgpfS4uLiR7dmFsdWUuc2xpY2UoLTQpfWA7XG4gICAgfTtcbiAgICBjb25zdCBjb25uZWN0ZWRQZWVySWRzID0gY2hhdERlYnVnICYmIEFycmF5LmlzQXJyYXkoY2hhdERlYnVnLmNvbm5lY3RlZFBlZXJJZHMpXG4gICAgICA/IGNoYXREZWJ1Zy5jb25uZWN0ZWRQZWVySWRzXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IHJlY2lwaWVudFBlZXJJZHMgPSBjaGF0RGVidWcgJiYgQXJyYXkuaXNBcnJheShjaGF0RGVidWcubGFzdFJlY2lwaWVudFBlZXJJZHMpXG4gICAgICA/IGNoYXREZWJ1Zy5sYXN0UmVjaXBpZW50UGVlcklkc1xuICAgICAgOiBbXTtcbiAgICBjb25zdCBjb25uZWN0ZWRQZWVyTGFiZWwgPSBjb25uZWN0ZWRQZWVySWRzLmxlbmd0aFxuICAgICAgPyBjb25uZWN0ZWRQZWVySWRzLm1hcCh0b1Nob3J0SWQpLmpvaW4oJywgJylcbiAgICAgIDogJy0nO1xuICAgIGNvbnN0IHJlY2lwaWVudFBlZXJMYWJlbCA9IHJlY2lwaWVudFBlZXJJZHMubGVuZ3RoXG4gICAgICA/IHJlY2lwaWVudFBlZXJJZHMubWFwKHRvU2hvcnRJZCkuam9pbignLCAnKVxuICAgICAgOiAnLSc7XG4gICAgY29uc3QgY2FuU3VibWl0Q2hhdCA9IChcbiAgICAgIGJyaWRnZUluc3RhbmNlICYmXG4gICAgICB0eXBlb2YgYnJpZGdlSW5zdGFuY2UuaGFzVW5sb2NrZWRJZGVudGl0eSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICkgPyBicmlkZ2VJbnN0YW5jZS5oYXNVbmxvY2tlZElkZW50aXR5KCkgOiB0cnVlO1xuICAgIGNvbnN0IGlkSGludCA9IHRoaXMucHJvcHMuaWRlbnRpdHkgfHwgdGhpcy5wcm9wcy5hdXRoO1xuICAgIGNvbnN0IGNoYXREaXNhYmxlZFJlYXNvbiA9IGNhblN1Ym1pdENoYXRcbiAgICAgID8gbnVsbFxuICAgICAgOiBmYWJyaWNJZGVudGl0eUNoYXREaXNhYmxlZFJlYXNvblBsYWluKGlkSGludCk7XG4gICAgY29uc3Qgc3RyZWFtUHJlc2V0ID0gdGhpcy5wcm9wcy5zdHJlYW1QcmVzZXQgfHwgJ2RlZmF1bHQnO1xuICAgIGNvbnN0IGhhc0NvbXBvc2VDaGFubmVsID0gKFxuICAgICAgKHR5cGVvZiB0aGlzLnByb3BzLm9uU3VibWl0Q2hhdCA9PT0gJ2Z1bmN0aW9uJykgfHxcbiAgICAgIChicmlkZ2VJbnN0YW5jZSAmJiB0eXBlb2YgYnJpZGdlSW5zdGFuY2Uuc3VibWl0Q2hhdE1lc3NhZ2UgPT09ICdmdW5jdGlvbicpXG4gICAgKTtcbiAgICBjb25zdCB1ZiA9IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuICAgIGNvbnN0IHBlZXJEZXRhaWxOYXYgPSAhIShcbiAgICAgIHVmLnBlZXJzICYmXG4gICAgICByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKHRoaXMucHJvcHMuYWRtaW5Ub2tlbilcbiAgICApO1xuICAgIGNvbnN0IGhlYWRlclRpdGxlID0gdHlwZW9mIHRoaXMucHJvcHMuaGVhZGVyVGl0bGUgPT09ICdzdHJpbmcnICYmIHRoaXMucHJvcHMuaGVhZGVyVGl0bGUudHJpbSgpXG4gICAgICA/IHRoaXMucHJvcHMuaGVhZGVyVGl0bGUudHJpbSgpXG4gICAgICA6IChzdHJlYW1QcmVzZXQgPT09ICdub3RpZmljYXRpb25zJyA/ICdEZWxlZ2F0aW9uICYgc2lnbmluZycgOiAnQWN0aXZpdHkgU3RyZWFtJyk7XG4gICAgY29uc3Qgc2hvd0NoYXRDaHJvbWUgPSBzdHJlYW1QcmVzZXQgIT09ICdub3RpZmljYXRpb25zJztcbiAgICByZXR1cm4gKFxuICAgICAgPGZhYnJpYy1hY3Rpdml0eS1zdHJlYW0gY2xhc3NOYW1lPSdhY3Rpdml0eS1zdHJlYW0nPlxuICAgICAgICB7dGhpcy5wcm9wcy5pbmNsdWRlSGVhZGVyICYmIDxoMz57aGVhZGVyVGl0bGV9PC9oMz59XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e3RoaXMuX3Njcm9sbENvbnRhaW5lclJlZn1cbiAgICAgICAgICBvblNjcm9sbD17KCkgPT4geyB0aGlzLl91c2VySGFzU2Nyb2xsZWRJblN0cmVhbSA9IHRydWU7IH19XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIG1heEhlaWdodDogJzQwdmgnLFxuICAgICAgICAgICAgbWluSGVpZ2h0OiAnOGVtJyxcbiAgICAgICAgICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgICAgICAgICAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogJzAuNWVtJyxcbiAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHtoYXNNb3JlICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgcmVmPXt0aGlzLl9sb2FkTW9yZVNlbnRpbmVsUmVmfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcwLjI1ZW0gMCcsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6ICcwLjg1ZW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzg4OCcsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJ1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICDihpEgU2Nyb2xsIHVwIGZvciBvbGRlciBtZXNzYWdlcyAoe3RvdGFsIC0gZGlzcGxheUxpbWl0fSBtb3JlKVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7ZW50cmllcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIHtlbnRyaWVzLm1hcCgoZW50cnksIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09ICdDTElFTlRfTk9USUNFJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPT09IGVudHJpZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHR4aWQgPSBlbnRyeS5vYmplY3QgJiYgZW50cnkub2JqZWN0LnR4aWQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtgbm90aWNlLSR7ZW50cnkub2JqZWN0ICYmIGVudHJ5Lm9iamVjdC5jcmVhdGVkfS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgcmVmPXtpc0xhc3QgPyB0aGlzLl9sYXN0RW50cnlSZWYgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuMzVlbScsIGZvbnRTaXplOiAnMC45MmVtJywgY29sb3I6ICcjNTU1JyB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiBjb2xvcj1cIm9yYW5nZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICB7ZW50cnkub2JqZWN0ICYmIGVudHJ5Lm9iamVjdC5jb250ZW50fVxuICAgICAgICAgICAgICAgICAgICAgIHt0eGlkICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt1Zi5iaXRjb2luRXhwbG9yZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh0eGlkKS50cmltKCkpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJyMyMTg1ZDAnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg4ZW0nLCBjb2xvcjogJyM2NjYnIH19IHRpdGxlPVwiRW5hYmxlIEJpdGNvaW4g4oCUIEJsb2NrICYgdHJhbnNhY3Rpb24gZGV0YWlsIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IHRvIG9wZW4gdGhlIHR4IHZpZXdlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1N0cmluZyh0eGlkKS5zbGljZSgwLCAxNil94oCmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5fcmVuZGVyUHVyZ2VCdXR0b24oZW50cnkpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0RlbGVnYXRpb25TaWduYXR1cmVSZXF1ZXN0QWN0aXZpdHkoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBvID0gZW50cnkub2JqZWN0IHx8IHt9O1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZiBvLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gby5jb250ZW50IDogJyc7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwdXJwb3NlID0gdHlwZW9mIG8ucHVycG9zZSA9PT0gJ3N0cmluZycgPyBvLnB1cnBvc2UgOiAnJztcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG9zdCA9IG8uc3RhdHVzIHx8IGVudHJ5LnN0YXR1cztcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzUGVuZGluZyA9IG9zdCA9PT0gJ3BlbmRpbmcnO1xuICAgICAgICAgICAgICAgICAgY29uc3QgY3JlYXRlZCA9IG8uY3JlYXRlZCB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYWN0b3JJZCA9IChlbnRyeS5hY3RvciAmJiAoZW50cnkuYWN0b3IudXNlcm5hbWUgfHwgZW50cnkuYWN0b3IuaWQpKSB8fCAnbG9jYWwnO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPT09IGVudHJpZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BkZWxlZ2F0aW9uLSR7by5tZXNzYWdlSWQgfHwgY3JlYXRlZCB8fCBpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgIHJlZj17aXNMYXN0ID8gdGhpcy5fbGFzdEVudHJ5UmVmIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiAnMC41ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcwLjk1ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogaXNQZW5kaW5nID8gMC44NSA6IDFcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwidGVhbFwiIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJrZXlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJzbWFsbFwiIGJhc2ljIHRpdGxlPVwiU2FtZSBhY3Rpdml0eSBzdHJlYW0gYXMgcHVibGljIGNoYXQ7IGRlbGVnYXRpb24gY2hhbm5lbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgI2RlbGVnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5Ae2FjdG9ySWR9PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAge3B1cnBvc2UgPyA8PiDCtyB7cHVycG9zZX08Lz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgIHtpc1BlbmRpbmcgPyAnIOKAlCB3YWl0aW5nIGZvciBGYWJyaWMgSHViIGRlc2t0b3DigKYnIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICB7IWlzUGVuZGluZyAmJiBvc3QgPT09ICdhcHByb3ZlZCcgPyAnIOKAlCBhcHByb3ZlZCcgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgIHshaXNQZW5kaW5nICYmIG9zdCA9PT0gJ3JlamVjdGVkJyA/ICcg4oCUIHJlamVjdGVkJyA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgeyFpc1BlbmRpbmcgJiYgb3N0ID09PSAndGltZW91dCcgPyAnIOKAlCB0aW1lZCBvdXQnIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMjVlbScsIGNvbG9yOiAnIzQ0NCcsIHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbnRlbnQgfHwgJyhubyBwcmV2aWV3KSd9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXNDaGF0ID0gZW50cnkudHlwZSA9PT0gJ1AyUF9DSEFUX01FU1NBR0UnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSAoZW50cnkub2JqZWN0ICYmIGVudHJ5Lm9iamVjdC5jcmVhdGVkKSB8fCBlbnRyeS5jcmVhdGVkIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3QWN0b3JJZCA9IChlbnRyeS5hY3RvciAmJiAoZW50cnkuYWN0b3IudXNlcm5hbWUgfHwgZW50cnkuYWN0b3IuaWQpKSB8fCAoaXNDaGF0ID8gJ3Vua25vd24nIDogJ3N5c3RlbScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdG9ySWQgPSAoYnJpZGdlSW5zdGFuY2UgJiYgdHlwZW9mIGJyaWRnZUluc3RhbmNlLmdldFBlZXJEaXNwbGF5TmFtZSA9PT0gJ2Z1bmN0aW9uJyAmJiBlbnRyeS5hY3Rvcj8uaWQpXG4gICAgICAgICAgICAgICAgICA/IGJyaWRnZUluc3RhbmNlLmdldFBlZXJEaXNwbGF5TmFtZShlbnRyeS5hY3Rvci5pZClcbiAgICAgICAgICAgICAgICAgIDogcmF3QWN0b3JJZDtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlbnRyeS50YXJnZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0TGFiZWwgPSB0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgPyB0YXJnZXRcbiAgICAgICAgICAgICAgICAgIDogKHRhcmdldCAmJiAodGFyZ2V0Lm5hbWUgfHwgdGFyZ2V0LmlkKSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgICAgIGlmIChpc0NoYXQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSAoZW50cnkub2JqZWN0ICYmIChlbnRyeS5vYmplY3QuY29udGVudCB8fCBlbnRyeS5vYmplY3QuYm9keSB8fCBlbnRyeS5vYmplY3QudGV4dCkpIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNQZW5kaW5nID0gZW50cnkuc3RhdHVzID09PSAncGVuZGluZyc7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc1F1ZXVlZCA9IGVudHJ5LnN0YXR1cyA9PT0gJ3F1ZXVlZCc7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSBlbnRyeS50cmFuc3BvcnQgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGl2ZXJlZFRvID0gZW50cnkuZGVsaXZlcnkgJiYgTnVtYmVyLmlzRmluaXRlKGVudHJ5LmRlbGl2ZXJ5LmRlbGl2ZXJlZFRvKVxuICAgICAgICAgICAgICAgICAgICA/IGVudHJ5LmRlbGl2ZXJ5LmRlbGl2ZXJlZFRvXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZyb21QZWVySWQgPSBlbnRyeS5kZWxpdmVyeSAmJiBlbnRyeS5kZWxpdmVyeS5mcm9tUGVlcklkXG4gICAgICAgICAgICAgICAgICAgID8gZW50cnkuZGVsaXZlcnkuZnJvbVBlZXJJZFxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiAnMC41ZW0nLFxuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAoaXNQZW5kaW5nIHx8IGlzUXVldWVkKSA/IDAuNyA6IDEsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBpc1F1ZXVlZCA/ICcjODg4JyA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdG9yUGVlclBhdGggPSBhY3RvcklkICYmICFpc0xpa2VseUJpcDMyRXh0ZW5kZWRLZXkoYWN0b3JJZCkgJiYgdWYucGVlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBgL3BlZXJzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGFjdG9ySWQpfWBcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYWN0b3JOb2RlID0gYWN0b3JJZCAmJiBhY3RvcklkICE9PSAndW5rbm93bidcbiAgICAgICAgICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RvclBlZXJQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bz17YWN0b3JQZWVyUGF0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAnaW5oZXJpdCcsIHRleHREZWNvcmF0aW9uOiAnbm9uZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkB7YWN0b3JJZH08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IDxzdHJvbmcgdGl0bGU9eyF1Zi5wZWVycyA/ICdQZWVycyBkaXNhYmxlZCDigJQgZW5hYmxlIFBlZXJzIGluIEFkbWluIOKGkiBGZWF0dXJlIHZpc2liaWxpdHknIDogJ0JJUDMyIGV4dGVuZGVkIGtleSDigJQgbm90IGEgVENQIHBlZXIgcm91dGUnfT5Ae2FjdG9ySWR9PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IDxzdHJvbmc+QHthY3RvcklkfTwvc3Ryb25nPjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBlbnRyaWVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtjcmVhdGVkIHx8ICdjaGF0J30tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgIHJlZj17aXNMYXN0ID8gdGhpcy5fbGFzdEVudHJ5UmVmIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7YWN0b3JOb2RlfVxuICAgICAgICAgICAgICAgICAgICAgIHtpc1BlbmRpbmcgJiYgJyAoc2VuZGluZ+KApiknfVxuICAgICAgICAgICAgICAgICAgICAgIHtpc1F1ZXVlZCAmJiAnICghKSd9OiB7Y29udGVudH1cbiAgICAgICAgICAgICAgICAgICAgICB7dHJhbnNwb3J0ID09PSAnd2VicnRjJyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT0ndGlueScgYmFzaWMgY29sb3I9J3RlYWwnIHRpdGxlPSdEZWxpdmVyZWQgdmlhIFdlYlJUQyBtZXNoJz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdleGNoYW5nZScgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJSVENcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2RlbGl2ZXJlZFRvICE9IG51bGwgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBzaXplPSd0aW55JyBiYXNpYyBjb2xvcj0nYmx1ZScgdGl0bGU9J1BlZXJzIHRoaXMgbWVzc2FnZSB3YXMgZGVsaXZlcmVkIHRvJz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJlZDoge2RlbGl2ZXJlZFRvfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtmcm9tUGVlcklkICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT0ndGlueScgYmFzaWMgY29sb3I9J2dyZXknIHRpdGxlPSdTb3VyY2UgbWVzaCBwZWVyJz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IHtmcm9tUGVlcklkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5fcmVuZGVyUHVyZ2VCdXR0b24oZW50cnkpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5Lm9iamVjdCAmJiBlbnRyeS5vYmplY3QudHlwZSA9PT0gJ0JpdGNvaW5CbG9jaycpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG8gPSBlbnRyeS5vYmplY3Q7XG4gICAgICAgICAgICAgICAgICBjb25zdCBoYXNoID0gU3RyaW5nKG8uaGFzaCB8fCBvLmlkIHx8ICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBvLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHR4Q291bnQgPSBvLnR4Q291bnQ7XG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXQgPSBvLm5ldHdvcmsgPyBTdHJpbmcoby5uZXR3b3JrKSA6ICcnO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPT09IGVudHJpZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJiQ3JlYXRlZCA9IG8uY3JlYXRlZCB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0TGFiZWwgPSBoZWlnaHQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKGhlaWdodCkpID8gYCMke2hlaWdodH1gIDogJ2Jsb2NrJztcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHR4TGFiZWwgPSB0eENvdW50ICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcih0eENvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgPyBgJHtOdW1iZXIodHhDb3VudCl9IHR4JHtOdW1iZXIodHhDb3VudCkgPT09IDEgPyAnJyA6ICdzJ31gXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2hhc2ggfHwgJ2Jsb2NrJ30tJHtiYkNyZWF0ZWQgfHwgaW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgICAgICByZWY9e2lzTGFzdCA/IHRoaXMuX2xhc3RFbnRyeVJlZiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC40ZW0nLCBmb250U2l6ZTogJzAuOTVlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9J2N1YmUnIGNvbG9yPSd5ZWxsb3cnIHRpdGxlPSdOZXcgY2hhaW4gdGlwJyAvPlxuICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5OZXcgYmxvY2s8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgIHtoYXNoXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdWYuYml0Y29pbkV4cGxvcmVyID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL2Jsb2Nrcy8ke2VuY29kZVVSSUNvbXBvbmVudChoYXNoKX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICcjMjE4NWQwJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtoZWlnaHRMYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9XCJFbmFibGUgQml0Y29pbiDigJQgQmxvY2sgJiB0cmFuc2FjdGlvbiBkZXRhaWwgcm91dGVzIGluIEFkbWluIOKGkiBGZWF0dXJlIHZpc2liaWxpdHkgdG8gb3BlbiB0aGUgYmxvY2sgdmlld2VyXCI+e2hlaWdodExhYmVsfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDxzcGFuPntoZWlnaHRMYWJlbH08L3NwYW4+fVxuICAgICAgICAgICAgICAgICAgICAgIHtoYXNoICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44OGVtJywgY29sb3I6ICcjNTU1JyB9fSB0aXRsZT17aGFzaH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2hhc2gubGVuZ3RoID4gMTggPyBgJHtoYXNoLnNsaWNlKDAsIDEwKX3igKYke2hhc2guc2xpY2UoLTgpfWAgOiBoYXNofVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIHt0eExhYmVsID8gPD4gwrcge3R4TGFiZWx9PC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICB7bmV0ID8gPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjODg4JyB9fT4gwrcge25ldH08L3NwYW4+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5fcmVuZGVyUHVyZ2VCdXR0b24oZW50cnkpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVudHJ5Lm9iamVjdCAmJiBlbnRyeS5vYmplY3QudHlwZSA9PT0gJ0RvY3VtZW50Jykge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgb2IgPSBlbnRyeS5vYmplY3Q7XG4gICAgICAgICAgICAgICAgICBjb25zdCBtaW1lID0gU3RyaW5nKG9iLm1pbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICBpZiAob2IuYml0Y29pbkJsb2NrID09PSB0cnVlIHx8IG1pbWUgPT09ICdhcHBsaWNhdGlvbi94LWZhYnJpYy1iaXRjb2luLWJsb2NrK2pzb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBlbnRyeS50eXBlIHx8ICdBY3Rpdml0eSc7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0VHlwZSA9IGVudHJ5Lm9iamVjdCAmJiBlbnRyeS5vYmplY3QudHlwZSA/IGVudHJ5Lm9iamVjdC50eXBlIDogJ09iamVjdCc7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0TmFtZSA9IGVudHJ5Lm9iamVjdCAmJiAoZW50cnkub2JqZWN0Lm5hbWUgfHwgZW50cnkub2JqZWN0LmlkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmplY3RUeXBlTGFiZWwgPSBTdHJpbmcob2JqZWN0VHlwZSB8fCAnT2JqZWN0JykudHJpbSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdE5hbWVMYWJlbCA9IG9iamVjdE5hbWUgIT0gbnVsbCAmJiBTdHJpbmcob2JqZWN0TmFtZSkudHJpbSgpXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhvYmplY3ROYW1lKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0U3VtbWFyeSA9IG9iamVjdE5hbWVMYWJlbFxuICAgICAgICAgICAgICAgICAgPyBgJHtvYmplY3RUeXBlTGFiZWx9OiAke29iamVjdE5hbWVMYWJlbH1gXG4gICAgICAgICAgICAgICAgICA6IG9iamVjdFR5cGVMYWJlbDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdElkID0gZW50cnkub2JqZWN0ICYmIGVudHJ5Lm9iamVjdC5pZDtcbiAgICAgICAgICAgICAgICBsZXQgb2JqZWN0SHJlZiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKG9iamVjdFR5cGUgPT09ICdEb2N1bWVudCcgJiYgb2JqZWN0SWQpIHtcbiAgICAgICAgICAgICAgICAgIG9iamVjdEhyZWYgPSBgL2RvY3VtZW50cy8ke2VuY29kZVVSSUNvbXBvbmVudChvYmplY3RJZCl9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdFR5cGUgPT09ICdTdG9yYWdlQ29udHJhY3QnICYmIG9iamVjdElkKSB7XG4gICAgICAgICAgICAgICAgICBvYmplY3RIcmVmID0gYC9jb250cmFjdHMvJHtlbmNvZGVVUklDb21wb25lbnQob2JqZWN0SWQpfWA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldEhyZWYgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJyAmJiB0YXJnZXQgJiYgIWlzTGlrZWx5QmlwMzJFeHRlbmRlZEtleSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICBpZiAocGVlckRldGFpbE5hdikgdGFyZ2V0SHJlZiA9IGAvcGVlcnMvJHtlbmNvZGVVUklDb21wb25lbnQodGFyZ2V0KX1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHRhcmdldC50eXBlID09PSAnQ29sbGVjdGlvbicgJiYgdGFyZ2V0Lm5hbWUgPT09ICdkb2N1bWVudHMnKSB7XG4gICAgICAgICAgICAgICAgICB0YXJnZXRIcmVmID0gJy9kb2N1bWVudHMnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBlbnRyaWVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtjcmVhdGVkIHx8ICdhY3Rpdml0eSd9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgICAgcmVmPXtpc0xhc3QgPyB0aGlzLl9sYXN0RW50cnlSZWYgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHthY3RvcklkICYmIGFjdG9ySWQgIT09ICdzeXN0ZW0nXG4gICAgICAgICAgICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFpc0xpa2VseUJpcDMyRXh0ZW5kZWRLZXkoYWN0b3JJZCkgJiYgcGVlckRldGFpbE5hdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG89e2AvcGVlcnMvJHtlbmNvZGVVUklDb21wb25lbnQoYWN0b3JJZCl9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICdpbmhlcml0JywgdGV4dERlY29yYXRpb246ICdub25lJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkB7YWN0b3JJZH08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDxzdHJvbmcgdGl0bGU9eyFwZWVyRGV0YWlsTmF2ICYmICFpc0xpa2VseUJpcDMyRXh0ZW5kZWRLZXkoYWN0b3JJZCkgPyAnUGVlcnMgZGV0YWlsIHJlcXVpcmVzIGh1YiBhZG1pbiB0b2tlbiBpbiB0aGlzIGJyb3dzZXInIDogJ0JJUDMyIGV4dGVuZGVkIGtleSDigJQgbm90IGEgVENQIHBlZXIgcm91dGUnfT5Ae2FjdG9ySWR9PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiA8c3Ryb25nPkB7YWN0b3JJZH08L3N0cm9uZz59eycgJ31cbiAgICAgICAgICAgICAgICAgICAge3ZlcmJ9eycgJ31cbiAgICAgICAgICAgICAgICAgICAge29iamVjdEhyZWZcbiAgICAgICAgICAgICAgICAgICAgICA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvPXtvYmplY3RIcmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ2luaGVyaXQnLCB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e29iamVjdFN1bW1hcnl9PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiA8c3Ryb25nPntvYmplY3RTdW1tYXJ5fTwvc3Ryb25nPn1cbiAgICAgICAgICAgICAgICAgICAge3RhcmdldExhYmVsICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8PiDihpIge3RhcmdldEhyZWZcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPXt0YXJnZXRIcmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAnaW5oZXJpdCcsIHRleHREZWNvcmF0aW9uOiAnbm9uZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt0YXJnZXRMYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiA8c3Bhbj57dGFyZ2V0TGFiZWx9PC9zcGFuPn1cbiAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAge3RoaXMuX3JlbmRlclB1cmdlQnV0dG9uKGVudHJ5KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7ZW50cmllcy5sZW5ndGggPT09IDAgJiYgc3RyZWFtUHJlc2V0ID09PSAnbm90aWZpY2F0aW9ucycgJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBjb2xvcjogJyM4ODgnLCBmb250U2l6ZTogJzAuOWVtJywgcGFkZGluZzogJzAuMzVlbSAwJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICAgICAgTm8gZGVsZWdhdGlvbiBzaWduYXR1cmUgcmVxdWVzdHMgaW4gdGhpcyBmZWVkIHlldC5cbiAgICAgICAgICAgICAge3VmLmFjdGl2aXRpZXMgPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHsnICd9V2FsbGV0LCBQYXlqb2luLCBhbmQgb3RoZXIgc2hvcnQgdG9hc3RzIGFyZSBsaXN0ZWQgb24gdGhleycgJ31cbiAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL25vdGlmaWNhdGlvbnNcIj5Ob3RpZmljYXRpb25zPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgeycgJ31wYWdlIChiZWxsIGluIHRoZSB0b3AgYmFyKS5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8PiBFbmFibGUg4oCcQWN0aXZpdGllc+KAnSBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IHRvIG9wZW4gdGhlIGZ1bGwgZmVlZCBhbmQgYmVsbCB0b2FzdHMuPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHsnICd9T3BlbnsnICd9XG4gICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzL3NlY3VyaXR5XCI+U2VjdXJpdHkgJmFtcDsgZGVsZWdhdGlvbjwvTGluaz5cbiAgICAgICAgICAgICAgeycgJ310byBsaXN0IG9yIHJldm9rZSBkZXNrdG9wIHNpZ25pbmcgc2Vzc2lvbnMuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtlbnRyaWVzLmxlbmd0aCA9PT0gMCAmJiBzdHJlYW1QcmVzZXQgIT09ICdub3RpZmljYXRpb25zJyAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcsIGZvbnRTaXplOiAnMC45ZW0nLCBwYWRkaW5nOiAnMC4zNWVtIDAnIH19PlxuICAgICAgICAgICAgICB7ZW50cnlUeXBlRmlsdGVyID09PSAnYWxsJ1xuICAgICAgICAgICAgICAgID8gJ05vIGFjdGl2aXR5IHlldC4gQ2hhdCwgZG9jdW1lbnQgZXZlbnRzLCBhbmQgQml0Y29pbiBibG9ja3Mgc2hvdyBoZXJlIHdoZW4gdGhlIGh1YiBhbmQgbmV0d29yayBhcmUgYWN0aXZlLidcbiAgICAgICAgICAgICAgICA6IGBObyAke2VudHJ5VHlwZUZpbHRlcn0gYWN0aXZpdHkgbWF0Y2hlcyB0aGlzIGZpbHRlciB5ZXQuYH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJyB9fT5cbiAgICAgICAgICB7c2hvd0NoYXRDaHJvbWUgJiYgKG1lc2hTdGF0dXMgfHwgY2hhdERlYnVnKSAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNWVtJywgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjg1ZW0nIH19PlxuICAgICAgICAgICAgICBXZWJSVEMgRGVidWc6IG1lc2ggY29ubmVjdGVkIHttZXNoU3RhdHVzICYmIE51bWJlci5pc0Zpbml0ZShtZXNoU3RhdHVzLmNvbm5lY3RlZCkgPyBtZXNoU3RhdHVzLmNvbm5lY3RlZCA6IDB9XG4gICAgICAgICAgICAgIHsnICd9fCBzZWxmIHt0b1Nob3J0SWQoY2hhdERlYnVnICYmIGNoYXREZWJ1Zy5wZWVySWQpfVxuICAgICAgICAgICAgICB7JyAnfXwgcGVlcnMgW3tjb25uZWN0ZWRQZWVyTGFiZWx9XVxuICAgICAgICAgICAgICB7JyAnfXwgbGFzdCBkZWxpdmVyZWRUbyB7bGFzdERlbGl2ZXJlZFRvICE9IG51bGwgPyBsYXN0RGVsaXZlcmVkVG8gOiAnLSd9XG4gICAgICAgICAgICAgIHsnICd9fCByZWNpcGllbnRzIFt7cmVjaXBpZW50UGVlckxhYmVsfV1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3RoaXMuc3RhdGUuY2hhdFdhcm5pbmcgJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgIDxMYWJlbCBiYXNpYyBjb2xvcj0nb3JhbmdlJz5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdsb2NrJyAvPlxuICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNoYXRXYXJuaW5nfVxuICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICB7dHlwZW9mIHRoaXMucHJvcHMub25SZXF1aXJlVW5sb2NrID09PSAnZnVuY3Rpb24nICYmIChcbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBzaXplPSdtaW5pJ1xuICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgIGNvbG9yPSdvcmFuZ2UnXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nIH19XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnByb3BzLm9uUmVxdWlyZVVubG9jaygpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFVubG9ja1xuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7c2hvd0NoYXRDaHJvbWUgJiYgaGFzQ29tcG9zZUNoYW5uZWwgJiYgIWNhblN1Ym1pdENoYXQgJiYgKFxuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgaWQ9XCJmYWJyaWMtY2hhdC1jb21wb3NlLWhpbnRcIlxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjVlbScsIGZvbnRTaXplOiAnMC44NWVtJywgY29sb3I6ICcjNjY2JywgbGluZUhlaWdodDogMS40NSB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlID0gY2xhc3NpZnlIdWJCcm93c2VySWRlbnRpdHkoaWRIaW50KTtcbiAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ3Bhc3N3b3JkX2xvY2tlZCcpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3NcIj5TZXR0aW5nczwvTGluaz4g4oaSIDxzdHJvbmc+RmFicmljIGlkZW50aXR5PC9zdHJvbmc+LCBvciB0aGUgdG9wLWJhciA8c3Ryb25nPkxvY2tlZDwvc3Ryb25nPiBjb250cm9sLCB1bmxvY2tzIGNoYXQgc2lnbmluZyAoZW5jcnlwdGlvbiBwYXNzd29yZCkuXG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICd3YXRjaF9vbmx5Jykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICBDaGF0IG5lZWRzIGEgc2lnbmluZyBrZXkgaW4gdGhpcyBicm93c2VyLiBPcGVuIDxMaW5rIHRvPVwiL3NldHRpbmdzXCI+U2V0dGluZ3M8L0xpbms+IOKGkiA8c3Ryb25nPkZhYnJpYyBpZGVudGl0eTwvc3Ryb25nPiBvciB0aGUgdG9wLWJhciBpZGVudGl0eSBtZW51IHRvIGltcG9ydCBhIGZ1bGwga2V5IG9yIHVzZSBkZXNrdG9wIHNpZ25pbmcgKHdhdGNoLW9ubHkgY2Fubm90IHNpZ24pLlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICBDcmVhdGUgb3IgcmVzdG9yZSBhIGtleTogPExpbmsgdG89XCIvc2V0dGluZ3NcIj5TZXR0aW5nczwvTGluaz4g4oaSIDxzdHJvbmc+RmFicmljIGlkZW50aXR5PC9zdHJvbmc+LCBvciA8c3Ryb25nPkxvZyBpbjwvc3Ryb25nPiBpbiB0aGUgdG9wIGJhci5cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7c2hvd0NoYXRDaHJvbWUgJiYgaGFzQ29tcG9zZUNoYW5uZWwgJiYgKFxuICAgICAgICAgICAgPENoYXRJbnB1dFxuICAgICAgICAgICAgICBpbnB1dElkPVwiZmFicmljLWNoYXQtY29tcG9zZS1pbnB1dFwiXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeT17IWNhblN1Ym1pdENoYXQgPyAnZmFicmljLWNoYXQtY29tcG9zZS1oaW50JyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuY2hhdElucHV0fVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiB0aGlzLnNldFN0YXRlKHsgY2hhdElucHV0OiB2YWx1ZSB9KX1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9eyh0ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5TdWJtaXRDaGF0KSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25SZXF1aXJlVW5sb2NrID09PSAnZnVuY3Rpb24nKSB0aGlzLnByb3BzLm9uUmVxdWlyZVVubG9jaygpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2hhdFdhcm5pbmcoeyBkZXRhaWw6IHsgbWVzc2FnZTogY2hhdERpc2FibGVkUmVhc29uIH0gfSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG9uU3VibWl0ID0gdGhpcy5wcm9wcy5vblN1Ym1pdENoYXQgfHwgKHRoaXMucHJvcHMuYnJpZGdlICYmIHRoaXMucHJvcHMuYnJpZGdlLmN1cnJlbnQgJiYgdHlwZW9mIHRoaXMucHJvcHMuYnJpZGdlLmN1cnJlbnQuc3VibWl0Q2hhdE1lc3NhZ2UgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5wcm9wcy5icmlkZ2UuY3VycmVudC5zdWJtaXRDaGF0TWVzc2FnZS5iaW5kKHRoaXMucHJvcHMuYnJpZGdlLmN1cnJlbnQpKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9uU3VibWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICBvblN1Ym1pdCh0ZXh0KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBjaGF0SW5wdXQ6ICcnIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIGEgbWVzc2FnZeKAplwiXG4gICAgICAgICAgICAgIHRpdGxlPXtjaGF0RGlzYWJsZWRSZWFzb24gfHwgJ1NlbmQgY2hhdCBtZXNzYWdlJ31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjYW5TdWJtaXRDaGF0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZmFicmljLWFjdGl2aXR5LXN0cmVhbT5cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIEFjdGl2aXR5U3RyZWFtIChwcm9wcykge1xuICByZXR1cm4gPEFjdGl2aXR5U3RyZWFtRWxlbWVudCB7Li4ucHJvcHN9IC8+O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEFjdGl2aXR5U3RyZWFtO1xuIl0sIm5hbWVzIjpbIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX25vbkl0ZXJhYmxlUmVzdCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwibCIsImkiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydGllcyIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3RvUHJvcGVydHlLZXkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJwcm90b3R5cGUiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIl90eXBlb2YiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJCb29sZWFuIiwidmFsdWVPZiIsInNldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJiaW5kIiwiX19wcm90b19fIiwiX2luaGVyaXRzIiwiY3JlYXRlIiwiX3NldFByb3RvdHlwZU9mIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsImlzTGlrZWx5QmlwMzJFeHRlbmRlZEtleSIsIl9yZXF1aXJlMiIsIkxpbmsiLCJfcmVxdWlyZTMiLCJCdXR0b24iLCJJY29uIiwiTGFiZWwiLCJDaGF0SW5wdXQiLCJfcmVxdWlyZTQiLCJpc0RlbGVnYXRpb25TaWduYXR1cmVSZXF1ZXN0QWN0aXZpdHkiLCJfcmVxdWlyZTUiLCJsb2FkSHViVWlGZWF0dXJlRmxhZ3MiLCJfcmVxdWlyZTYiLCJzYWZlSWRlbnRpdHlFcnIiLCJfcmVxdWlyZTciLCJyZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIiwiX3JlcXVpcmU4IiwiY2xhc3NpZnlIdWJCcm93c2VySWRlbnRpdHkiLCJmYWJyaWNJZGVudGl0eUNoYXREaXNhYmxlZFJlYXNvblBsYWluIiwiTUVTU0FHRV9QQUdFX1NJWkUiLCJnZXRBY3Rpdml0eUVudHJ5Q2F0ZWdvcnkiLCJlbnRyeSIsInR5cGUiLCJvYmplY3QiLCJtaW1lIiwidG9Mb3dlckNhc2UiLCJiaXRjb2luQmxvY2siLCJlbnRyeU1hdGNoZXNBY3Rpdml0eUZpbHRlciIsInRyaW0iLCJjYXQiLCJBY3Rpdml0eVN0cmVhbUVsZW1lbnQiLCJfUmVhY3QkQ29tcG9uZW50IiwicHJvcHMiLCJfdGhpcyIsIm1lc3NhZ2VLZXkiLCJkb2N1bWVudElkIiwibWsiLCJkb2NJZCIsImFjdGl2ZUJyaWRnZVJlZiIsImJyaWRnZVJlZiIsImJyaWRnZSIsImJyaWRnZUluc3RhbmNlIiwiY3VycmVudCIsImVtaXRUb21ic3RvbmUiLCJ0b2tlbiIsImFkbWluVG9rZW4iLCJtZXNzYWdlSWQiLCJ1bmRlZmluZWQiLCJldmVudCIsImQiLCJkZXRhaWwiLCJ0eGlkIiwiYXBwbHlMMUludm9pY2VQYXltZW50QWN0aXZpdHkiLCJjb25zb2xlIiwid2FybiIsImdsb2JhbFN0YXRlIiwibWVzc2FnZXMiLCJwcmVzZXQiLCJzdHJlYW1QcmVzZXQiLCJmYWJyaWNFbnRyaWVzIiwiZW50cmllcyIsIl9yZWYiLCJfcmVmMiIsIm0iLCJtYXAiLCJfcmVmMyIsIl9yZWY0IiwiYXNzaWduIiwic29ydCIsImIiLCJ0YSIsImNyZWF0ZWQiLCJ0YiIsImRvY0FkZExhc3QiLCJNYXAiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImlkIiwic2V0IiwiZXJyIiwiZmFicmljRGVkdXBlZCIsImdldCIsInRvbWJzdG9uZUxhc3QiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiYWN0aXZpdHlJZCIsImFjdGl2aXR5TWVzc2FnZUlkIiwiY29uY2F0IiwiZmFicmljRGVkdXBlZEZpbmFsIiwiX3Nob3VsZFNjcm9sbFRvQm90dG9tIiwiX2lzU2Nyb2xsZWRUb0JvdHRvbSIsInNldFN0YXRlIiwiaXNGaXJzdExvYWQiLCJwcmV2Tm90aWNlcyIsInROb3RpY2UiLCJjIiwiRGF0ZSIsImdldFRpbWUiLCJkaXNwbGF5TGltaXQiLCJlcnJvciIsIm1lc3NhZ2UiLCJpZGVudGl0eSIsImF1dGgiLCJjaGF0V2FybmluZyIsIl9jaGF0V2FybmluZ1RpbWVyIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInByZXZlbnREZWZhdWx0IiwidGV4dCIsInN0YXRlIiwiY2hhdElucHV0Iiwib25TdWJtaXQiLCJvblN1Ym1pdENoYXQiLCJzdWJtaXRDaGF0TWVzc2FnZSIsInNldHRpbmdzIiwiYXV0aG9yaXR5IiwiaW5jbHVkZUhlYWRlciIsImFjdGl2aXRpZXMiLCJfc2Nyb2xsQ29udGFpbmVyUmVmIiwiY3JlYXRlUmVmIiwiX2xhc3RFbnRyeVJlZiIsIl9sb2FkTW9yZVNlbnRpbmVsUmVmIiwiX2ludGVyc2VjdGlvbk9ic2VydmVyIiwiX3ByZXZFbnRyaWVzTGVuZ3RoIiwiX3VzZXJIYXNMb2FkZWRNb3JlIiwiX3VzZXJIYXNTY3JvbGxlZEluU3RyZWFtIiwiX3Njcm9sbFRvQm90dG9tIiwibGFzdEVsIiwic2Nyb2xsSW50b1ZpZXciLCJibG9jayIsImJlaGF2aW9yIiwiZWwiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJ0aHJlc2hvbGQiLCJjb21wb25lbnREaWRNb3VudCIsImRlYnVnIiwiZmV0Y2hSZXNvdXJjZSIsInVmIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9oYW5kbGVHbG9iYWxTdGF0ZVVwZGF0ZSIsIl9oYW5kbGVDaGF0V2FybmluZyIsIl9oYW5kbGVMMVBheW1lbnRBY3Rpdml0eSIsImdldEdsb2JhbFN0YXRlIiwiZ3MiLCJfc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlciIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsIl90aGlzMiIsIl9vYnNlcnZlU2VudGluZWwiLCJwcmV2TGVuIiwiY3VyckxlbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiX2h1YlVpRmxhZ3NVbnN1YiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ1bm9ic2VydmUiLCJfdGhpczMiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsInJvb3QiLCJzZW50aW5lbCIsImlzSW50ZXJzZWN0aW5nIiwicHJldiIsInRvdGFsIiwiTWF0aCIsIm1pbiIsInJvb3RNYXJnaW4iLCJfb2JzZXJ2ZWRTZW50aW5lbCIsIl8iLCJvYnNlcnZlIiwiX3RvbWJzdG9uZURvY3VtZW50SWQiLCJfcmVuZGVyUHVyZ2VCdXR0b24iLCJfdGhpczQiLCJsb2NhbE9ubHkiLCJ0aXRsZSIsImNyZWF0ZUVsZW1lbnQiLCJiYXNpYyIsImljb24iLCJzaXplIiwiY29tcGFjdCIsInN0eWxlIiwibWFyZ2luTGVmdCIsInZlcnRpY2FsQWxpZ24iLCJvbkNsaWNrIiwic3RvcFByb3BhZ2F0aW9uIiwiX2hhbmRsZVB1cmdlRW50cnkiLCJyZW5kZXIiLCJfdGhpczUiLCJhcGlBY3Rpdml0aWVzIiwiYXBpIiwicmVzb3VyY2UiLCJhbGxFbnRyaWVzIiwiZW50cnlUeXBlRmlsdGVyIiwiZmlsdGVyZWRFbnRyaWVzIiwiZWZmZWN0aXZlTGltaXQiLCJoYXNNb3JlIiwibWVzaFN0YXR1cyIsIndlYnJ0Y01lc2hTdGF0dXMiLCJjaGF0RGVidWciLCJ3ZWJydGNDaGF0RGVidWdTdGF0dXMiLCJsYXN0RGVsaXZlcmVkVG8iLCJpc0Zpbml0ZSIsInRvU2hvcnRJZCIsImNvbm5lY3RlZFBlZXJJZHMiLCJyZWNpcGllbnRQZWVySWRzIiwibGFzdFJlY2lwaWVudFBlZXJJZHMiLCJjb25uZWN0ZWRQZWVyTGFiZWwiLCJqb2luIiwicmVjaXBpZW50UGVlckxhYmVsIiwiY2FuU3VibWl0Q2hhdCIsImhhc1VubG9ja2VkSWRlbnRpdHkiLCJpZEhpbnQiLCJjaGF0RGlzYWJsZWRSZWFzb24iLCJoYXNDb21wb3NlQ2hhbm5lbCIsInBlZXJEZXRhaWxOYXYiLCJwZWVycyIsImhlYWRlclRpdGxlIiwic2hvd0NoYXRDaHJvbWUiLCJjbGFzc05hbWUiLCJyZWYiLCJvblNjcm9sbCIsIm1heEhlaWdodCIsIm1pbkhlaWdodCIsIm92ZXJmbG93WSIsIm92ZXJmbG93WCIsIm1hcmdpbkJvdHRvbSIsIldlYmtpdE92ZXJmbG93U2Nyb2xsaW5nIiwicGFkZGluZyIsImZvbnRTaXplIiwiY29sb3IiLCJ0ZXh0QWxpZ24iLCJpbmRleCIsIl9lbnRyeSRhY3RvciIsImlzTGFzdCIsImNvbnRlbnQiLCJGcmFnbWVudCIsImJpdGNvaW5FeHBsb3JlciIsInRvIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicHVycG9zZSIsIm9zdCIsInN0YXR1cyIsImlzUGVuZGluZyIsImFjdG9ySWQiLCJhY3RvciIsInVzZXJuYW1lIiwib3BhY2l0eSIsIm1hcmdpblJpZ2h0IiwibWFyZ2luVG9wIiwid2hpdGVTcGFjZSIsIndvcmRCcmVhayIsImlzQ2hhdCIsInJhd0FjdG9ySWQiLCJnZXRQZWVyRGlzcGxheU5hbWUiLCJ0YXJnZXQiLCJ0YXJnZXRMYWJlbCIsImJvZHkiLCJpc1F1ZXVlZCIsInRyYW5zcG9ydCIsImRlbGl2ZXJlZFRvIiwiZGVsaXZlcnkiLCJmcm9tUGVlcklkIiwiYWN0b3JQZWVyUGF0aCIsImFjdG9yTm9kZSIsInRleHREZWNvcmF0aW9uIiwiaGFzaCIsImhlaWdodCIsInR4Q291bnQiLCJuZXQiLCJuZXR3b3JrIiwiYmJDcmVhdGVkIiwiaGVpZ2h0TGFiZWwiLCJ0eExhYmVsIiwib2IiLCJ2ZXJiIiwib2JqZWN0VHlwZSIsIm9iamVjdE5hbWUiLCJvYmplY3RUeXBlTGFiZWwiLCJvYmplY3ROYW1lTGFiZWwiLCJvYmplY3RTdW1tYXJ5Iiwib2JqZWN0SWQiLCJvYmplY3RIcmVmIiwidGFyZ2V0SHJlZiIsImxpbmVIZWlnaHQiLCJjb25uZWN0ZWQiLCJwZWVySWQiLCJvblJlcXVpcmVVbmxvY2siLCJtb2RlIiwiaW5wdXRJZCIsImFyaWFEZXNjcmliZWRCeSIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJkaXNhYmxlZCIsIkNvbXBvbmVudCIsIkFjdGl2aXR5U3RyZWFtIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/ActivityStream.js\n\n}")},"./components/AdminHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link,\n useLocation = _require.useLocation,\n useNavigate = _require.useNavigate;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Segment = _require2.Segment,\n Card = _require2.Card,\n Message = _require2.Message,\n Checkbox = _require2.Checkbox,\n Form = _require2.Form,\n Divider = _require2.Divider,\n Modal = _require2.Modal,\n Input = _require2.Input;\nvar _require3 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require3.readHubAdminTokenFromBrowser,\n clearHubAdminTokenFromBrowser = _require3.clearHubAdminTokenFromBrowser;\nvar _require4 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n fetchBitcoinStatus = _require4.fetchBitcoinStatus,\n loadUpstreamSettings = _require4.loadUpstreamSettings;\nvar _require5 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require5.loadHubUiFeatureFlags,\n setHubUiFeatureFlag = _require5.setHubUiFeatureFlag,\n setAllHubUiFeatureFlags = _require5.setAllHubUiFeatureFlags,\n FLAG_KEYS = _require5.FLAG_KEYS,\n anyBitcoinSubFeatureEnabled = _require5.anyBitcoinSubFeatureEnabled,\n fetchPersistedHubUiFeatureFlags = _require5.fetchPersistedHubUiFeatureFlags,\n persistHubUiFeatureFlags = _require5.persistHubUiFeatureFlags,\n documentMarketUiFlags = _require5.documentMarketUiFlags;\nvar HubRegtestAdminTokenPanel = __webpack_require__(/*! ./HubRegtestAdminTokenPanel */ "./components/HubRegtestAdminTokenPanel.js");\nvar BeaconAdminPanel = __webpack_require__(/*! ./BeaconAdminPanel */ "./components/BeaconAdminPanel.js");\n\n/**\n * Operator admin hub: Beacon, federation links, regtest admin token.\n */\nvar UI_FLAG_LABELS = {\n promo: \'Promo hero block on the homepage (what is Hub, install your own node)\',\n advancedMode: \'Advanced Mode (shows power-user navigation and tools)\',\n peers: \'Peers & WebRTC (nav, routes, home network card)\',\n peersAdmin: \'Peers (hub admin token required in this browser)\',\n activities: \'Notifications (bell), activity log, feed, home sections\',\n features: \'Features tour (/features, More menu, home shortcut)\',\n sidechain: \'Sidechain demo, federation settings, beacon federation nav\',\n bitcoinPayments: \'Bitcoin — Payments & Payjoin (page, nav links, balance chip)\',\n bitcoinInvoices: \'Bitcoin — Invoices walkthrough page\',\n bitcoinResources: \'Bitcoin — HTTP resources browser (/services/bitcoin/resources)\',\n bitcoinExplorer: \'Bitcoin — Block & transaction detail routes\',\n bitcoinLightning: \'Bitcoin — Lightning UI & channel detail routes\',\n bitcoinCrowdfund: \'Bitcoin — Taproot crowdfund section on the dashboard\'\n};\nvar WORK_QUEUE_STRATEGY_OPTIONS = [{\n key: \'highest_value_first\',\n value: \'highest_value_first\',\n text: \'Highest value first (default)\'\n}, {\n key: \'fifo\',\n value: \'fifo\',\n text: \'FIFO (oldest first)\'\n}, {\n key: \'oldest_high_value_first\',\n value: \'oldest_high_value_first\',\n text: \'Oldest first, value tie-breaker\'\n}];\n\n/** Must match {@link HUB_SELF_DESTRUCT_CONFIRM_PHRASE} in `services/hub.js` (POST `/settings/self-destruct`). */\nvar HUB_SELF_DESTRUCT_CONFIRM_PHRASE = \'DELETE ALL HUB DATA\';\nfunction AdminHome(props) {\n var location = useLocation();\n var navigate = useNavigate();\n var adminTokenProp = props && props.adminToken;\n var hasAdmin = !!readHubAdminTokenFromBrowser(adminTokenProp);\n var adminToken = readHubAdminTokenFromBrowser(adminTokenProp);\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n routeBlockedHint = _React$useState2[0],\n setRouteBlockedHint = _React$useState2[1];\n var _React$useState3 = React.useState(\'\'),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n network = _React$useState4[0],\n setNetwork = _React$useState4[1];\n var _React$useState5 = React.useState(false),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n httpShared = _React$useState6[0],\n setHttpShared = _React$useState6[1];\n var _React$useState7 = React.useState(true),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n httpSharedLoading = _React$useState8[0],\n setHttpSharedLoading = _React$useState8[1];\n var _React$useState9 = React.useState(null),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n httpSharedErr = _React$useState0[0],\n setHttpSharedErr = _React$useState0[1];\n var _React$useState1 = React.useState(null),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n httpSharedOk = _React$useState10[0],\n setHttpSharedOk = _React$useState10[1];\n var _React$useState11 = React.useState(false),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n httpSharedSaving = _React$useState12[0],\n setHttpSharedSaving = _React$useState12[1];\n var _React$useState13 = React.useState(function () {\n return loadHubUiFeatureFlags();\n }),\n _React$useState14 = _slicedToArray(_React$useState13, 2),\n uiFlags = _React$useState14[0],\n setUiFlags = _React$useState14[1];\n var _React$useState15 = React.useState(null),\n _React$useState16 = _slicedToArray(_React$useState15, 2),\n uiFlagsPersistMsg = _React$useState16[0],\n setUiFlagsPersistMsg = _React$useState16[1];\n var _React$useState17 = React.useState(null),\n _React$useState18 = _slicedToArray(_React$useState17, 2),\n workerStatus = _React$useState18[0],\n setWorkerStatus = _React$useState18[1];\n var _React$useState19 = React.useState([]),\n _React$useState20 = _slicedToArray(_React$useState19, 2),\n workerQueue = _React$useState20[0],\n setWorkerQueue = _React$useState20[1];\n var _React$useState21 = React.useState(\'highest_value_first\'),\n _React$useState22 = _slicedToArray(_React$useState21, 2),\n workerStrategy = _React$useState22[0],\n setWorkerStrategy = _React$useState22[1];\n var _React$useState23 = React.useState(false),\n _React$useState24 = _slicedToArray(_React$useState23, 2),\n workerStrategySaving = _React$useState24[0],\n setWorkerStrategySaving = _React$useState24[1];\n var _React$useState25 = React.useState(null),\n _React$useState26 = _slicedToArray(_React$useState25, 2),\n wealthSummary = _React$useState26[0],\n setWealthSummary = _React$useState26[1];\n var _React$useState27 = React.useState(null),\n _React$useState28 = _slicedToArray(_React$useState27, 2),\n operatorHealth = _React$useState28[0],\n setOperatorHealth = _React$useState28[1];\n var _React$useState29 = React.useState(false),\n _React$useState30 = _slicedToArray(_React$useState29, 2),\n operatorHealthLoading = _React$useState30[0],\n setOperatorHealthLoading = _React$useState30[1];\n var _React$useState31 = React.useState(null),\n _React$useState32 = _slicedToArray(_React$useState31, 2),\n operatorHealthError = _React$useState32[0],\n setOperatorHealthError = _React$useState32[1];\n var _React$useState33 = React.useState(false),\n _React$useState34 = _slicedToArray(_React$useState33, 2),\n workerLoading = _React$useState34[0],\n setWorkerLoading = _React$useState34[1];\n var _React$useState35 = React.useState(false),\n _React$useState36 = _slicedToArray(_React$useState35, 2),\n workerActionBusy = _React$useState36[0],\n setWorkerActionBusy = _React$useState36[1];\n var _React$useState37 = React.useState(null),\n _React$useState38 = _slicedToArray(_React$useState37, 2),\n workerError = _React$useState38[0],\n setWorkerError = _React$useState38[1];\n var _React$useState39 = React.useState(false),\n _React$useState40 = _slicedToArray(_React$useState39, 2),\n selfDestructOpen = _React$useState40[0],\n setSelfDestructOpen = _React$useState40[1];\n var _React$useState41 = React.useState(\'\'),\n _React$useState42 = _slicedToArray(_React$useState41, 2),\n selfDestructPhrase = _React$useState42[0],\n setSelfDestructPhrase = _React$useState42[1];\n var _React$useState43 = React.useState(false),\n _React$useState44 = _slicedToArray(_React$useState43, 2),\n selfDestructBusy = _React$useState44[0],\n setSelfDestructBusy = _React$useState44[1];\n var _React$useState45 = React.useState(null),\n _React$useState46 = _slicedToArray(_React$useState45, 2),\n selfDestructErr = _React$useState46[0],\n setSelfDestructErr = _React$useState46[1];\n var _React$useState47 = React.useState(null),\n _React$useState48 = _slicedToArray(_React$useState47, 2),\n selfDestructOk = _React$useState48[0],\n setSelfDestructOk = _React$useState48[1];\n var rpcCall = React.useCallback(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(method) {\n var params,\n res,\n json,\n _args = arguments;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n params = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};\n _context.n = 1;\n return fetch(\'/services/rpc\', {\n method: \'POST\',\n headers: {\n Accept: \'application/json\',\n \'Content-Type\': \'application/json\'\n },\n body: JSON.stringify({\n jsonrpc: \'2.0\',\n id: Date.now(),\n method: method,\n params: params\n })\n });\n case 1:\n res = _context.v;\n _context.n = 2;\n return res.json()["catch"](function () {\n return {};\n });\n case 2:\n json = _context.v;\n if (!(json && json.error)) {\n _context.n = 3;\n break;\n }\n throw new Error(json.error.message || \'RPC error\');\n case 3:\n return _context.a(2, json && Object.prototype.hasOwnProperty.call(json, \'result\') ? json.result : json);\n }\n }, _callee);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }(), []);\n var refreshWorkerPanel = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var _yield$Promise$all, _yield$Promise$all2, statusRes, queueRes, wealthRes, _t;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n setWorkerLoading(true);\n setWorkerError(null);\n _context2.p = 1;\n _context2.n = 2;\n return Promise.all([rpcCall(\'GetWorkerStatus\', {}), rpcCall(\'ListWorkerQueue\', {\n limit: 100,\n offset: 0\n }), rpcCall(\'GetNodeWealthSummary\', {})]);\n case 2:\n _yield$Promise$all = _context2.v;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 3);\n statusRes = _yield$Promise$all2[0];\n queueRes = _yield$Promise$all2[1];\n wealthRes = _yield$Promise$all2[2];\n setWorkerStatus(statusRes || null);\n setWorkerQueue(Array.isArray(queueRes && queueRes.items) ? queueRes.items : []);\n if (statusRes && statusRes.strategy) setWorkerStrategy(String(statusRes.strategy));\n setWealthSummary(wealthRes || null);\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t = _context2.v;\n setWorkerError(_t && _t.message ? _t.message : String(_t));\n case 4:\n _context2.p = 4;\n setWorkerLoading(false);\n return _context2.f(4);\n case 5:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3, 4, 5]]);\n })), [rpcCall]);\n var refreshOperatorHealth = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var res, json, _t2;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n setOperatorHealthLoading(true);\n setOperatorHealthError(null);\n _context3.p = 1;\n _context3.n = 2;\n return fetch(\'/services/operator/health\', {\n headers: {\n Accept: \'application/json\'\n }\n });\n case 2:\n res = _context3.v;\n _context3.n = 3;\n return res.json()["catch"](function () {\n return {};\n });\n case 3:\n json = _context3.v;\n if (res.ok) {\n _context3.n = 4;\n break;\n }\n throw new Error(json && json.message || "".concat(res.status, " ").concat(res.statusText));\n case 4:\n setOperatorHealth(json || null);\n _context3.n = 6;\n break;\n case 5:\n _context3.p = 5;\n _t2 = _context3.v;\n setOperatorHealthError(_t2 && _t2.message ? _t2.message : String(_t2));\n case 6:\n _context3.p = 6;\n setOperatorHealthLoading(false);\n return _context3.f(6);\n case 7:\n return _context3.a(2);\n }\n }, _callee3, null, [[1, 5, 6, 7]]);\n })), []);\n var formatBytes = React.useCallback(function (n) {\n var v = Number(n);\n if (!Number.isFinite(v) || v < 0) return \'n/a\';\n if (v < 1024) return "".concat(v, " B");\n var units = [\'KB\', \'MB\', \'GB\', \'TB\', \'PB\'];\n var idx = -1;\n var cur = v;\n do {\n cur = cur / 1024;\n idx++;\n } while (cur >= 1024 && idx < units.length - 1);\n return "".concat(cur.toFixed(cur >= 100 ? 0 : cur >= 10 ? 1 : 2), " ").concat(units[idx]);\n }, []);\n var runSelfDestruct = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var token, res, raw, json, _t3;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n token = readHubAdminTokenFromBrowser(adminTokenProp);\n if (token) {\n _context4.n = 1;\n break;\n }\n setSelfDestructErr(\'Admin token required in this browser.\');\n return _context4.a(2);\n case 1:\n setSelfDestructBusy(true);\n setSelfDestructErr(null);\n _context4.p = 2;\n _context4.n = 3;\n return fetch(\'/settings/self-destruct\', {\n method: \'POST\',\n headers: {\n Accept: \'application/json\',\n \'Content-Type\': \'application/json\',\n Authorization: "Bearer ".concat(token)\n },\n body: JSON.stringify({\n confirmPhrase: selfDestructPhrase.trim()\n })\n });\n case 3:\n res = _context4.v;\n _context4.n = 4;\n return res.text();\n case 4:\n raw = _context4.v;\n json = {};\n try {\n json = raw ? JSON.parse(raw) : {};\n } catch (_) {\n json = {};\n }\n if (res.ok) {\n _context4.n = 5;\n break;\n }\n throw new Error(json && json.message || raw || "".concat(res.status, " ").concat(res.statusText));\n case 5:\n setSelfDestructOk(json.message || \'Local data wipe started. The Hub process will exit.\');\n clearHubAdminTokenFromBrowser();\n setSelfDestructOpen(false);\n setSelfDestructPhrase(\'\');\n setTimeout(function () {\n return navigate(\'/\');\n }, 2000);\n _context4.n = 7;\n break;\n case 6:\n _context4.p = 6;\n _t3 = _context4.v;\n setSelfDestructErr(_t3 && _t3.message ? _t3.message : String(_t3));\n case 7:\n _context4.p = 7;\n setSelfDestructBusy(false);\n return _context4.f(7);\n case 8:\n return _context4.a(2);\n }\n }, _callee4, null, [[2, 6, 7, 8]]);\n })), [adminTokenProp, selfDestructPhrase, navigate]);\n var formatDuration = React.useCallback(function (secIn) {\n var sec = Number(secIn);\n if (!Number.isFinite(sec) || sec < 0) return \'n/a\';\n var d = Math.floor(sec / 86400);\n var h = Math.floor(sec % 86400 / 3600);\n var m = Math.floor(sec % 3600 / 60);\n if (d > 0) return "".concat(d, "d ").concat(h, "h");\n if (h > 0) return "".concat(h, "h ").concat(m, "m");\n return "".concat(m, "m");\n }, []);\n React.useLayoutEffect(function () {\n var s = location.state;\n if (s && typeof s.featureFlagBlocked === \'string\') {\n var path = typeof s.blockedPath === \'string\' ? s.blockedPath : \'\';\n setRouteBlockedHint({\n flag: s.featureFlagBlocked,\n path: path\n });\n navigate({\n pathname: location.pathname,\n search: location.search || \'\',\n hash: location.hash || \'\'\n }, {\n replace: true,\n state: {}\n });\n return;\n }\n var qs = new URLSearchParams(location.search || \'\');\n var qFlag = String(qs.get(\'blockedFlag\') || \'\').trim();\n var qPath = String(qs.get(\'blockedPath\') || \'\').trim();\n if (qFlag) {\n setRouteBlockedHint({\n flag: qFlag,\n path: qPath\n });\n }\n }, [location.state, location.pathname, location.search, location.hash, navigate]);\n React.useEffect(function () {\n var cancelled = false;\n fetchBitcoinStatus(loadUpstreamSettings()).then(function (s) {\n if (cancelled || !s) return;\n setNetwork(s.network ? String(s.network).toLowerCase() : \'\');\n })["catch"](function () {});\n return function () {\n cancelled = true;\n };\n }, []);\n React.useEffect(function () {\n refreshWorkerPanel();\n }, [refreshWorkerPanel]);\n React.useEffect(function () {\n var mounted = true;\n refreshOperatorHealth();\n var timer = setInterval(function () {\n if (mounted) refreshOperatorHealth();\n }, 30000);\n return function () {\n mounted = false;\n clearInterval(timer);\n };\n }, [refreshOperatorHealth]);\n React.useEffect(function () {\n var cancelled = false;\n fetchPersistedHubUiFeatureFlags().then(function (next) {\n if (!cancelled && next && _typeof(next) === \'object\') setUiFlags(next);\n })["catch"](function () {});\n return function () {\n cancelled = true;\n };\n }, []);\n React.useEffect(function () {\n var cancelled = false;\n setHttpSharedLoading(true);\n setHttpSharedErr(null);\n fetch(\'/settings/HTTP_SHARED_MODE\', {\n headers: {\n Accept: \'application/json\'\n }\n }).then(function (r) {\n if (cancelled) return;\n if (r.status === 404) {\n setHttpShared(false);\n return;\n }\n if (!r.ok) throw new Error("".concat(r.status, " ").concat(r.statusText));\n return r.json();\n }).then(function (j) {\n if (cancelled || !j) return;\n var v = j.value;\n setHttpShared(v === true || v === \'true\');\n })["catch"](function (e) {\n if (!cancelled) setHttpSharedErr(e && e.message ? e.message : String(e));\n })["finally"](function () {\n if (!cancelled) setHttpSharedLoading(false);\n });\n return function () {\n cancelled = true;\n };\n }, []);\n var persistHttpShared = function persistHttpShared(next) {\n if (!adminToken) {\n setHttpSharedErr(\'Admin token required to change HTTP bind mode.\');\n return;\n }\n setHttpSharedSaving(true);\n setHttpSharedErr(null);\n setHttpSharedOk(null);\n fetch(\'/settings/HTTP_SHARED_MODE\', {\n method: \'PUT\',\n headers: {\n Accept: \'application/json\',\n \'Content-Type\': \'application/json\',\n Authorization: "Bearer ".concat(adminToken)\n },\n body: JSON.stringify({\n value: !!next\n })\n }).then(function (r) {\n if (!r.ok) return r.text().then(function (t) {\n throw new Error(t || "".concat(r.status));\n });\n return r.json();\n }).then(function (j) {\n setHttpShared(!!next);\n if (j && j.httpRebind === \'scheduled\') {\n setHttpSharedOk(j.message || \'HTTP listener is rebinding; WebSocket clients will reconnect.\');\n } else if (j && j.httpRebind === \'skipped\') {\n setHttpSharedOk(j.httpRebindReason || \'Saved. Bind address is controlled by environment until you restart without those variables.\');\n } else {\n setHttpSharedOk(null);\n }\n })["catch"](function (e) {\n setHttpSharedErr(e && e.message ? e.message : String(e));\n })["finally"](function () {\n setHttpSharedSaving(false);\n });\n };\n var syncUiFlag = /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(key, checked) {\n var next, result;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n setHubUiFeatureFlag(key, checked);\n next = loadHubUiFeatureFlags();\n setUiFlags(next);\n if (adminToken) {\n _context5.n = 1;\n break;\n }\n setUiFlagsPersistMsg(\'Saved in this browser only. Save admin token to persist on hub disk.\');\n return _context5.a(2);\n case 1:\n _context5.n = 2;\n return persistHubUiFeatureFlags(next, adminToken);\n case 2:\n result = _context5.v;\n if (result.ok) {\n _context5.n = 3;\n break;\n }\n setUiFlagsPersistMsg("Saved in browser; hub-disk save failed: ".concat(result.message || \'unknown error\'));\n return _context5.a(2);\n case 3:\n setUiFlagsPersistMsg(\'Persisted to hub settings (disk) and restored on startup.\');\n case 4:\n return _context5.a(2);\n }\n }, _callee5);\n }));\n return function syncUiFlag(_x2, _x3) {\n return _ref5.apply(this, arguments);\n };\n }();\n var applyDocumentMarketPreset = /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {\n var next, result;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.n) {\n case 0:\n next = setAllHubUiFeatureFlags(documentMarketUiFlags());\n setUiFlags(next);\n if (adminToken) {\n _context6.n = 1;\n break;\n }\n setUiFlagsPersistMsg(\'Document market preset saved in this browser only. Save admin token to persist on hub disk.\');\n return _context6.a(2);\n case 1:\n _context6.n = 2;\n return persistHubUiFeatureFlags(next, adminToken);\n case 2:\n result = _context6.v;\n if (result.ok) {\n _context6.n = 3;\n break;\n }\n setUiFlagsPersistMsg("Document market preset in browser; hub-disk save failed: ".concat(result.message || \'unknown error\'));\n return _context6.a(2);\n case 3:\n setUiFlagsPersistMsg(\'Document market preset persisted to hub settings (disk).\');\n case 4:\n return _context6.a(2);\n }\n }, _callee6);\n }));\n return function applyDocumentMarketPreset() {\n return _ref6.apply(this, arguments);\n };\n }();\n var runWorkerNow = /*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {\n var _t4;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.p = _context7.n) {\n case 0:\n if (adminToken) {\n _context7.n = 1;\n break;\n }\n return _context7.a(2, setWorkerError(\'Admin token required.\'));\n case 1:\n setWorkerActionBusy(true);\n setWorkerError(null);\n _context7.p = 2;\n _context7.n = 3;\n return rpcCall(\'RunWorkerQueueNow\', {\n adminToken: adminToken\n });\n case 3:\n _context7.n = 4;\n return refreshWorkerPanel();\n case 4:\n _context7.n = 6;\n break;\n case 5:\n _context7.p = 5;\n _t4 = _context7.v;\n setWorkerError(_t4 && _t4.message ? _t4.message : String(_t4));\n case 6:\n _context7.p = 6;\n setWorkerActionBusy(false);\n return _context7.f(6);\n case 7:\n return _context7.a(2);\n }\n }, _callee7, null, [[2, 5, 6, 7]]);\n }));\n return function runWorkerNow() {\n return _ref7.apply(this, arguments);\n };\n }();\n var saveWorkerStrategy = /*#__PURE__*/function () {\n var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(strategy) {\n var out, _t5;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.p = _context8.n) {\n case 0:\n if (hasAdmin) {\n _context8.n = 1;\n break;\n }\n return _context8.a(2, setWorkerError(\'Admin token required.\'));\n case 1:\n setWorkerStrategySaving(true);\n setWorkerError(null);\n _context8.p = 2;\n _context8.n = 3;\n return rpcCall(\'SetWorkerQueueStrategy\', {\n adminToken: adminToken,\n strategy: strategy\n });\n case 3:\n out = _context8.v;\n if (!(out && out.status === \'error\')) {\n _context8.n = 4;\n break;\n }\n throw new Error(out.message || \'Could not save worker queue strategy\');\n case 4:\n setWorkerStrategy(String(out && out.strategy || strategy || \'highest_value_first\'));\n _context8.n = 5;\n return refreshWorkerPanel();\n case 5:\n _context8.n = 7;\n break;\n case 6:\n _context8.p = 6;\n _t5 = _context8.v;\n setWorkerError(_t5 && _t5.message ? _t5.message : String(_t5));\n case 7:\n _context8.p = 7;\n setWorkerStrategySaving(false);\n return _context8.f(7);\n case 8:\n return _context8.a(2);\n }\n }, _callee8, null, [[2, 6, 7, 8]]);\n }));\n return function saveWorkerStrategy(_x4) {\n return _ref8.apply(this, arguments);\n };\n }();\n var clearWorkerQueue = /*#__PURE__*/function () {\n var _ref9 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {\n var _t6;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.p = _context9.n) {\n case 0:\n if (adminToken) {\n _context9.n = 1;\n break;\n }\n return _context9.a(2, setWorkerError(\'Admin token required.\'));\n case 1:\n setWorkerActionBusy(true);\n setWorkerError(null);\n _context9.p = 2;\n _context9.n = 3;\n return rpcCall(\'ClearWorkerQueue\', {\n adminToken: adminToken\n });\n case 3:\n _context9.n = 4;\n return refreshWorkerPanel();\n case 4:\n _context9.n = 6;\n break;\n case 5:\n _context9.p = 5;\n _t6 = _context9.v;\n setWorkerError(_t6 && _t6.message ? _t6.message : String(_t6));\n case 6:\n _context9.p = 6;\n setWorkerActionBusy(false);\n return _context9.f(6);\n case 7:\n return _context9.a(2);\n }\n }, _callee9, null, [[2, 5, 6, 7]]);\n }));\n return function clearWorkerQueue() {\n return _ref9.apply(this, arguments);\n };\n }();\n var dropWorkerItem = /*#__PURE__*/function () {\n var _ref0 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0(id) {\n var _t7;\n return _regenerator().w(function (_context0) {\n while (1) switch (_context0.p = _context0.n) {\n case 0:\n if (adminToken) {\n _context0.n = 1;\n break;\n }\n return _context0.a(2, setWorkerError(\'Admin token required.\'));\n case 1:\n setWorkerActionBusy(true);\n setWorkerError(null);\n _context0.p = 2;\n _context0.n = 3;\n return rpcCall(\'DropWorkerQueueItem\', {\n adminToken: adminToken,\n id: id\n });\n case 3:\n _context0.n = 4;\n return refreshWorkerPanel();\n case 4:\n _context0.n = 6;\n break;\n case 5:\n _context0.p = 5;\n _t7 = _context0.v;\n setWorkerError(_t7 && _t7.message ? _t7.message : String(_t7));\n case 6:\n _context0.p = 6;\n setWorkerActionBusy(false);\n return _context0.f(6);\n case 7:\n return _context0.a(2);\n }\n }, _callee0, null, [[2, 5, 6, 7]]);\n }));\n return function dropWorkerItem(_x5) {\n return _ref0.apply(this, arguments);\n };\n }();\n return /*#__PURE__*/React.createElement(Segment, {\n style: {\n maxWidth: 960,\n margin: \'1em auto\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'1em\',\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/",\n basic: true,\n size: "small",\n "aria-label": "Back to home"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Home"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings",\n basic: true,\n size: "small",\n "aria-label": "Back to settings overview"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "setting",\n "aria-hidden": "true"\n }), "Settings")), routeBlockedHint && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n marginBottom: \'1em\'\n },\n onDismiss: function onDismiss() {\n return setRouteBlockedHint(null);\n },\n dismissible: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "That page is hidden in this browser"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, routeBlockedHint.flag === \'peersAdmin\' ? /*#__PURE__*/React.createElement(React.Fragment, null, "You opened", \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, routeBlockedHint.path || \'(unknown path)\'), ". Peers are only available when this browser has the hub admin token (first-time setup token). Paste or refresh the token below, then open the link again.") : /*#__PURE__*/React.createElement(React.Fragment, null, "You opened", \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, routeBlockedHint.path || \'(unknown path)\'), ", but", \' \', /*#__PURE__*/React.createElement("strong", null, UI_FLAG_LABELS[routeBlockedHint.flag] || routeBlockedHint.flag), " is turned off under Feature visibility below. Enable it, then open the link again."))), /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "admin-page-heading"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "settings",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Admin")), /*#__PURE__*/React.createElement("p", {\n id: "admin-page-summary",\n style: {\n color: \'#666\',\n marginBottom: \'1.25em\',\n maxWidth: \'42rem\',\n lineHeight: 1.45\n }\n }, "Node-operator tools that depend on the hub setup token, Bitcoin service, and distributed execution surfaces. End users normally use ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), \' \', "and the ", /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin"\n }, "Bitcoin"), " dashboard without opening this page. The Bitcoin dashboard is always available; turn on the Bitcoin sub-toggles below for Payments, Invoices, HTTP resources, block/tx explorer routes, Lightning, and crowdfund UI."), !hasAdmin ? /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "No admin token in this browser"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, "Paste the setup token from first-time hub configuration (or refresh it) to unlock Generate Block, Hub-wallet spends, and federation policy saves. Regtest: use the panel below.")) : /*#__PURE__*/React.createElement(Message, {\n positive: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, "Admin token is present in this browser."), /*#__PURE__*/React.createElement(HubRegtestAdminTokenPanel, {\n network: network,\n adminTokenProp: adminTokenProp\n }), /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n marginTop: \'1.5em\'\n },\n id: "admin-operator-health-heading"\n }, "Operator health"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.75em\',\n maxWidth: \'42rem\',\n lineHeight: 1.45\n }\n }, "Local node health signals for disk capacity, process pressure, and connectivity to configured local services."), operatorHealthError ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n }\n }, operatorHealthError) : null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\',\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n loading: operatorHealthLoading,\n onClick: refreshOperatorHealth\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), " Refresh health"), operatorHealth && operatorHealth.now ? /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n alignSelf: \'center\'\n }\n }, "Updated: ", new Date(operatorHealth.now).toLocaleString()) : null), /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Host:"), " ", operatorHealth && operatorHealth.node && operatorHealth.node.hostname ? operatorHealth.node.hostname : \'n/a\'), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Node process uptime:"), " ", formatDuration(operatorHealth && operatorHealth.node ? operatorHealth.node.uptimeSec : null)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "CPU usage (process):"), " ", operatorHealth && operatorHealth.node && operatorHealth.node.cpu && Number.isFinite(Number(operatorHealth.node.cpu.processPercent)) ? "".concat(Number(operatorHealth.node.cpu.processPercent).toFixed(1), "%") : \'warming up…\'), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "CPU cores:"), " ", operatorHealth && operatorHealth.node && operatorHealth.node.cpu && Number.isFinite(Number(operatorHealth.node.cpu.cores)) ? Number(operatorHealth.node.cpu.cores) : \'n/a\'), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "System load avg:"), " ", operatorHealth && operatorHealth.node && Array.isArray(operatorHealth.node.loadAverage) ? operatorHealth.node.loadAverage.map(function (v) {\n return Number(v || 0).toFixed(2);\n }).join(\' / \') : \'n/a\'), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Memory RSS:"), " ", formatBytes(operatorHealth && operatorHealth.node && operatorHealth.node.memory ? operatorHealth.node.memory.rss : null)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Heap used:"), " ", formatBytes(operatorHealth && operatorHealth.node && operatorHealth.node.memory ? operatorHealth.node.memory.heapUsed : null))), /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Disk path:"), " ", /*#__PURE__*/React.createElement("code", null, operatorHealth && operatorHealth.disk && operatorHealth.disk.path ? operatorHealth.disk.path : \'n/a\')), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Disk available:"), " ", formatBytes(operatorHealth && operatorHealth.disk ? operatorHealth.disk.availableBytes : null)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Disk used:"), " ", formatBytes(operatorHealth && operatorHealth.disk ? operatorHealth.disk.usedBytes : null), " (", operatorHealth && operatorHealth.disk && Number.isFinite(Number(operatorHealth.disk.usedPercent)) ? "".concat(Number(operatorHealth.disk.usedPercent).toFixed(1), "%") : \'n/a\', ")"), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Estimated time to full:"), " ", formatDuration(operatorHealth && operatorHealth.disk ? operatorHealth.disk.estimatedSecondsUntilFull : null), operatorHealth && operatorHealth.disk && operatorHealth.disk.estimatedAt ? " (around ".concat(new Date(operatorHealth.disk.estimatedAt).toLocaleString(), ")") : \'\'), /*#__PURE__*/React.createElement("div", {\n style: {\n color: \'#666\'\n }\n }, operatorHealth && operatorHealth.disk && Number.isFinite(Number(operatorHealth.disk.trendBytesPerSecond)) && Number(operatorHealth.disk.trendBytesPerSecond) > 0 ? "Observed fill rate: ".concat(formatBytes(operatorHealth.disk.trendBytesPerSecond), "/s") : \'Fill-rate estimate appears after multiple health samples.\')), /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n marginBottom: \'1.25em\'\n }\n }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "DNS probe:"), " ", operatorHealth && operatorHealth.network && operatorHealth.network.dnsProbe && operatorHealth.network.dnsProbe.ok ? \'ok\' : \'failed\'), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Local service reachability:")), operatorHealth && operatorHealth.network && Array.isArray(operatorHealth.network.localProbes) && operatorHealth.network.localProbes.length ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.25em\'\n }\n }, operatorHealth.network.localProbes.map(function (probe) {\n return /*#__PURE__*/React.createElement("div", {\n key: "".concat(probe.name, ":").concat(probe.host, ":").concat(probe.port)\n }, /*#__PURE__*/React.createElement("code", null, probe.name), " ", probe.host, ":", probe.port, " \\u2014 ", probe.ok ? "reachable (".concat(probe.latencyMs, " ms)") : "unreachable (".concat(probe.error || \'error\', ")"));\n })) : /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.25em\',\n color: \'#666\'\n }\n }, "No local probes configured."), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Network-accessible addresses:")), operatorHealth && operatorHealth.network && Array.isArray(operatorHealth.network.interfaces) && operatorHealth.network.interfaces.length ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.25em\'\n }\n }, operatorHealth.network.interfaces.map(function (iface) {\n return /*#__PURE__*/React.createElement("div", {\n key: iface.name\n }, /*#__PURE__*/React.createElement("code", null, iface.name), ": ", Array.isArray(iface.addresses) ? iface.addresses.map(function (a) {\n return a.address;\n }).join(\', \') : \'(none)\');\n })) : /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.25em\',\n color: \'#666\'\n }\n }, "No external interfaces detected.")), !hasAdmin ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Admin controls are hidden until token is present"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, "Save a valid admin token above to reveal worker queue controls, wealth visibility, network bind settings, and feature visibility toggles.")) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(BeaconAdminPanel, null), /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n marginTop: \'1.5em\'\n },\n id: "admin-worker-queue-heading"\n }, "Fabric worker queue"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.75em\',\n maxWidth: \'42rem\',\n lineHeight: 1.45\n }\n }, "Prioritized offer execution queue. Strategy is operator-managed and persisted on hub settings."), workerError ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n }\n }, workerError) : null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\',\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n loading: workerLoading,\n onClick: refreshWorkerPanel\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), " Refresh"), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n size: "small",\n disabled: !hasAdmin || workerActionBusy,\n loading: workerActionBusy,\n onClick: runWorkerNow\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "play"\n }), " Run Now"), /*#__PURE__*/React.createElement(Button, {\n negative: true,\n size: "small",\n disabled: !hasAdmin || workerActionBusy,\n loading: workerActionBusy,\n onClick: clearWorkerQueue\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "trash"\n }), " Clear Queue")), /*#__PURE__*/React.createElement(Form, {\n style: {\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Form.Select, {\n label: "Job selection strategy",\n options: WORK_QUEUE_STRATEGY_OPTIONS,\n value: workerStrategy,\n disabled: !hasAdmin || workerStrategySaving,\n onChange: function onChange(_, d) {\n var next = String(d && d.value ? d.value : \'\');\n if (next) saveWorkerStrategy(next);\n }\n })), /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Worker ready:"), " ", workerStatus && workerStatus.workerReady ? \'yes\' : \'no\'), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Selection strategy:"), " ", workerStatus && workerStatus.strategy ? workerStatus.strategy : workerStrategy), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Queue length:"), " ", workerStatus && Number.isFinite(Number(workerStatus.queueLength)) ? Number(workerStatus.queueLength) : 0), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Queue busy:"), " ", workerStatus && workerStatus.queueBusy ? \'yes\' : \'no\')), workerQueue.length ? /*#__PURE__*/React.createElement(Card.Group, {\n itemsPerRow: 1,\n stackable: true,\n style: {\n marginBottom: \'1.25em\'\n }\n }, workerQueue.slice(0, 25).map(function (item) {\n return /*#__PURE__*/React.createElement(Card, {\n key: item.id\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, {\n style: {\n fontSize: \'1em\'\n }\n }, item.type || \'work-item\'), /*#__PURE__*/React.createElement(Card.Meta, null, item.id), /*#__PURE__*/React.createElement(Card.Description, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Value:"), " ", Number(item.valueSats || 0), " sats"), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Attempts:"), " ", Number(item.attempts || 0)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Peer:"), " ", item.sourcePeer || \'(n/a)\'))), /*#__PURE__*/React.createElement(Card.Content, {\n extra: true\n }, /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n negative: true,\n disabled: !hasAdmin || workerActionBusy,\n onClick: function onClick() {\n return dropWorkerItem(item.id);\n }\n }, "Drop item")));\n })) : /*#__PURE__*/React.createElement(Message, {\n size: "small",\n info: true,\n style: {\n marginBottom: \'1.25em\'\n }\n }, "Queue is empty."), /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n marginTop: \'1.5em\'\n },\n id: "admin-wealth-heading"\n }, "Node wealth visibility"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.75em\',\n maxWidth: \'42rem\',\n lineHeight: 1.45\n }\n }, "Operational wallet balance plus labeled BTC-earning flows (Payjoin, storage contracts, inventory HTLC) observed by this hub."), /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n marginBottom: \'1.25em\'\n }\n }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Network:"), " ", wealthSummary && wealthSummary.wallet && wealthSummary.wallet.network ? wealthSummary.wallet.network : \'(unknown)\'), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Wallet balance:"), " ", wealthSummary && wealthSummary.wallet ? Number(wealthSummary.wallet.balanceBtc || 0) : 0, " BTC"), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Chain height:"), " ", wealthSummary && wealthSummary.wallet && wealthSummary.wallet.height != null ? wealthSummary.wallet.height : \'n/a\'), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Labeled flow counts:")), /*#__PURE__*/React.createElement("div", null, "Payjoin proposals: ", wealthSummary && wealthSummary.labeledFlows ? Number(wealthSummary.labeledFlows.counts.payjoin || 0) : 0), /*#__PURE__*/React.createElement("div", null, "Payjoin deposits: ", wealthSummary && wealthSummary.labeledFlows ? Number(wealthSummary.labeledFlows.counts.payjoinDeposit || 0) : 0), /*#__PURE__*/React.createElement("div", null, "Inventory HTLC funds: ", wealthSummary && wealthSummary.labeledFlows ? Number(wealthSummary.labeledFlows.counts.inventoryHtlcFund || 0) : 0), /*#__PURE__*/React.createElement("div", null, "Inventory HTLC claims: ", wealthSummary && wealthSummary.labeledFlows ? Number(wealthSummary.labeledFlows.counts.inventoryHtlcClaim || 0) : 0), /*#__PURE__*/React.createElement("div", null, "Storage contracts: ", wealthSummary && wealthSummary.labeledFlows ? Number(wealthSummary.labeledFlows.counts.storageContract || 0) : 0), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Labeled flow totals (sats):")), /*#__PURE__*/React.createElement("div", null, "Payjoin proposals: ", wealthSummary && wealthSummary.labeledFlows ? Number(wealthSummary.labeledFlows.totals.payjoin || 0) : 0), /*#__PURE__*/React.createElement("div", null, "Payjoin deposits: ", wealthSummary && wealthSummary.labeledFlows ? Number(wealthSummary.labeledFlows.totals.payjoinDeposit || 0) : 0), /*#__PURE__*/React.createElement("div", null, "Inventory HTLC funds: ", wealthSummary && wealthSummary.labeledFlows ? Number(wealthSummary.labeledFlows.totals.inventoryHtlcFund || 0) : 0), /*#__PURE__*/React.createElement("div", null, "Inventory HTLC claims: ", wealthSummary && wealthSummary.labeledFlows ? Number(wealthSummary.labeledFlows.totals.inventoryHtlcClaim || 0) : 0), /*#__PURE__*/React.createElement("div", null, "Storage contracts: ", wealthSummary && wealthSummary.labeledFlows ? Number(wealthSummary.labeledFlows.totals.storageContract || 0) : 0)), /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n marginTop: \'1.5em\'\n },\n id: "admin-network-http-heading"\n }, "Network \\u2014 HTTP bind (hub)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.75em\',\n maxWidth: \'42rem\',\n lineHeight: 1.45\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Shared mode"), " persists in ", /*#__PURE__*/React.createElement("code", null, "stores/hub/settings.json"), " as ", /*#__PURE__*/React.createElement("code", null, "HTTP_SHARED_MODE"), ". When enabled, the hub listens on ", /*#__PURE__*/React.createElement("code", null, "0.0.0.0"), " so other machines on the LAN can open this UI (subject to firewall). When disabled, HTTP is bound to ", /*#__PURE__*/React.createElement("code", null, "127.0.0.1"), " only. Changing this setting ", /*#__PURE__*/React.createElement("strong", null, "rebinds the HTTP server immediately"), " (open WebSockets drop and reconnect). If ", /*#__PURE__*/React.createElement("code", null, "FABRIC_HUB_INTERFACE"), " or ", /*#__PURE__*/React.createElement("code", null, "INTERFACE"), " is set in the environment, the bind address follows that instead; save still persists the flag for when env is unset."), httpSharedOk && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n },\n onDismiss: function onDismiss() {\n return setHttpSharedOk(null);\n }\n }, httpSharedOk), httpSharedErr && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n }\n }, httpSharedErr), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(Checkbox, {\n toggle: true,\n label: "HTTP shared mode (bind all interfaces)",\n "aria-label": "HTTP shared mode (bind all interfaces)",\n checked: httpShared,\n disabled: httpSharedLoading || httpSharedSaving || !hasAdmin,\n onChange: function onChange(_, d) {\n return persistHttpShared(!!d.checked);\n }\n }), /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.35em\',\n fontSize: \'0.85em\',\n color: \'#888\'\n }\n }, httpSharedLoading ? \'Loading current setting…\' : null, !hasAdmin ? \' Save the admin token in this browser to change this setting.\' : null))), /*#__PURE__*/React.createElement(Divider, {\n section: true\n }), /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "admin-ui-visibility-heading"\n }, "Feature visibility"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.75em\',\n maxWidth: \'42rem\',\n lineHeight: 1.45\n }\n }, "Defaults favor the ", /*#__PURE__*/React.createElement("strong", null, "Document market"), " (Documents, Peers, Bitcoin invoices/explorer). When a toggle is off, that area is hidden for this browser profile until you turn it back on. Home, Documents, Contracts, Settings, Security, and this Admin page stay available. Each browser merges local cache with hub-stored defaults when loaded; with admin token, saves persist to hub disk."), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n primary: true,\n basic: true,\n id: "fabric-hub-ui-flag-document-market-preset",\n style: {\n marginBottom: \'0.75em\'\n },\n onClick: function onClick() {\n applyDocumentMarketPreset();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate outline",\n "aria-hidden": "true"\n }), "Document market preset"), uiFlagsPersistMsg ? /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n },\n onDismiss: function onDismiss() {\n return setUiFlagsPersistMsg(null);\n }\n }, uiFlagsPersistMsg) : null, /*#__PURE__*/React.createElement(Form, null, FLAG_KEYS.map(function (key) {\n var labelText = UI_FLAG_LABELS[key] || key;\n var flagInputId = "fabric-hub-ui-flag-".concat(key);\n return /*#__PURE__*/React.createElement(Form.Field, {\n key: key\n }, /*#__PURE__*/React.createElement(Checkbox, {\n toggle: true,\n id: flagInputId,\n label: labelText,\n checked: !!uiFlags[key],\n "aria-label": "".concat(labelText, " \\u2014 hub UI feature flag ").concat(key),\n onChange: function onChange(_, d) {\n syncUiFlag(key, !!d.checked);\n }\n }));\n })), uiFlags.sidechain || anyBitcoinSubFeatureEnabled(uiFlags) ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n marginTop: \'1.5em\'\n },\n id: "admin-related-pages-heading"\n }, "Related pages"), /*#__PURE__*/React.createElement(Card.Group, {\n itemsPerRow: 1,\n stackable: true\n }, uiFlags.sidechain ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/settings/admin/beacon-federation",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "users",\n "aria-hidden": "true"\n }), " Beacon Federation"), /*#__PURE__*/React.createElement(Card.Description, null, "Contract: epoch cadence, Fabric messages, cooperative signing, and L1 Taproot vault (144-block deposit lock by default)."))), /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/federations",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "sliders horizontal",\n "aria-hidden": "true"\n }), " Federations (validators)"), /*#__PURE__*/React.createElement(Card.Description, null, "Edit distributed federation pubkeys persisted on this hub (when not overridden by environment). Cross-check live policy with", \' \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/manifest",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET manifest"), \' / \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/epoch",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET epoch"), \' \', "(see ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings/admin/beacon-federation"\n }, "Beacon Federation"), " for verification).")))) : null, /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/services/bitcoin",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin",\n "aria-hidden": "true"\n }), " Bitcoin dashboard"), /*#__PURE__*/React.createElement(Card.Description, null, "Node status, regtest tools, and core wallet view. Sub-pages (payments, invoices, resources, explorer, Lightning) follow the Bitcoin toggles above."))))) : /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginTop: \'1.5em\',\n maxWidth: \'42rem\',\n lineHeight: 1.45\n }\n }, "Enable ", /*#__PURE__*/React.createElement("strong", null, "Sidechain"), " and/or any ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin \\u2026"), " toggle to show operator shortcut cards (federation, Bitcoin dashboard link)."), /*#__PURE__*/React.createElement(Divider, {\n section: true\n }), /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "admin-self-destruct-heading",\n style: {\n color: \'#9f3a38\',\n marginTop: \'1.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bomb",\n "aria-hidden": "true"\n }), " Danger zone"), /*#__PURE__*/React.createElement(Message, {\n negative: true,\n style: {\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Self-destruct \\u2014 wipe local Hub data"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n lineHeight: 1.45\n }\n }, "Deletes this Hub\'s writable ", /*#__PURE__*/React.createElement("code", null, "stores/"), " and ", /*#__PURE__*/React.createElement("code", null, "logs/"), " under its data directory (setup, documents, Fabric state, local Bitcoin/Lightning/Payjoin files, and related indexes). The server stops and exits so files can be removed; ", /*#__PURE__*/React.createElement("strong", null, "restart the Hub manually"), " to run first-time setup again. This cannot be undone.")), selfDestructOk ? /*#__PURE__*/React.createElement(Message, {\n positive: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n },\n onDismiss: function onDismiss() {\n return setSelfDestructOk(null);\n }\n }, selfDestructOk) : null, /*#__PURE__*/React.createElement(Button, {\n negative: true,\n basic: true,\n id: "fabric-hub-admin-self-destruct-open",\n disabled: !hasAdmin || selfDestructBusy,\n loading: selfDestructBusy,\n onClick: function onClick() {\n setSelfDestructErr(null);\n setSelfDestructPhrase(\'\');\n setSelfDestructOpen(true);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bomb",\n "aria-hidden": "true"\n }), " Self-destruct\\u2026"), /*#__PURE__*/React.createElement(Modal, {\n closeOnDimmerClick: !selfDestructBusy,\n open: selfDestructOpen,\n onClose: function onClose() {\n return !selfDestructBusy && setSelfDestructOpen(false);\n },\n size: "small"\n }, /*#__PURE__*/React.createElement(Modal.Header, {\n style: {\n color: \'#9f3a38\'\n }\n }, "Confirm total data wipe"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: \'0.75em\',\n lineHeight: 1.45\n }\n }, "Type the phrase below exactly to confirm. The Hub process will shut down and delete local data."), /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'1rem\',\n userSelect: \'all\'\n }\n }, HUB_SELF_DESTRUCT_CONFIRM_PHRASE)), selfDestructErr ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n }\n }, selfDestructErr) : null, /*#__PURE__*/React.createElement(Input, {\n fluid: true,\n placeholder: "Confirmation phrase",\n "aria-label": "Self-destruct confirmation phrase",\n value: selfDestructPhrase,\n disabled: selfDestructBusy,\n onChange: function onChange(_, d) {\n return setSelfDestructPhrase(d.value);\n }\n })), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n return !selfDestructBusy && setSelfDestructOpen(false);\n },\n disabled: selfDestructBusy\n }, "Cancel"), /*#__PURE__*/React.createElement(Button, {\n negative: true,\n id: "fabric-hub-admin-self-destruct-confirm",\n disabled: selfDestructBusy || selfDestructPhrase.trim() !== HUB_SELF_DESTRUCT_CONFIRM_PHRASE,\n loading: selfDestructBusy,\n onClick: runSelfDestruct\n }, "Wipe all local data and exit")))));\n}\nmodule.exports = AdminHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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R0FBRy9WLFNBQVMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvQWRtaW5Ib21lLmpzPzExMDkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmssIHVzZUxvY2F0aW9uLCB1c2VOYXZpZ2F0ZSB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuY29uc3QgeyBCdXR0b24sIEhlYWRlciwgSWNvbiwgU2VnbWVudCwgQ2FyZCwgTWVzc2FnZSwgQ2hlY2tib3gsIEZvcm0sIERpdmlkZXIsIE1vZGFsLCBJbnB1dCB9ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IHsgcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciwgY2xlYXJIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJBZG1pblRva2VuQnJvd3NlcicpO1xuY29uc3QgeyBmZXRjaEJpdGNvaW5TdGF0dXMsIGxvYWRVcHN0cmVhbVNldHRpbmdzIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvYml0Y29pbkNsaWVudCcpO1xuY29uc3Qge1xuICBsb2FkSHViVWlGZWF0dXJlRmxhZ3MsXG4gIHNldEh1YlVpRmVhdHVyZUZsYWcsXG4gIHNldEFsbEh1YlVpRmVhdHVyZUZsYWdzLFxuICBGTEFHX0tFWVMsXG4gIGFueUJpdGNvaW5TdWJGZWF0dXJlRW5hYmxlZCxcbiAgZmV0Y2hQZXJzaXN0ZWRIdWJVaUZlYXR1cmVGbGFncyxcbiAgcGVyc2lzdEh1YlVpRmVhdHVyZUZsYWdzLFxuICBkb2N1bWVudE1hcmtldFVpRmxhZ3Ncbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViVWlGZWF0dXJlRmxhZ3MnKTtcbmNvbnN0IEh1YlJlZ3Rlc3RBZG1pblRva2VuUGFuZWwgPSByZXF1aXJlKCcuL0h1YlJlZ3Rlc3RBZG1pblRva2VuUGFuZWwnKTtcbmNvbnN0IEJlYWNvbkFkbWluUGFuZWwgPSByZXF1aXJlKCcuL0JlYWNvbkFkbWluUGFuZWwnKTtcblxuLyoqXG4gKiBPcGVyYXRvciBhZG1pbiBodWI6IEJlYWNvbiwgZmVkZXJhdGlvbiBsaW5rcywgcmVndGVzdCBhZG1pbiB0b2tlbi5cbiAqL1xuY29uc3QgVUlfRkxBR19MQUJFTFMgPSB7XG4gIHByb21vOiAnUHJvbW8gaGVybyBibG9jayBvbiB0aGUgaG9tZXBhZ2UgKHdoYXQgaXMgSHViLCBpbnN0YWxsIHlvdXIgb3duIG5vZGUpJyxcbiAgYWR2YW5jZWRNb2RlOiAnQWR2YW5jZWQgTW9kZSAoc2hvd3MgcG93ZXItdXNlciBuYXZpZ2F0aW9uIGFuZCB0b29scyknLFxuICBwZWVyczogJ1BlZXJzICYgV2ViUlRDIChuYXYsIHJvdXRlcywgaG9tZSBuZXR3b3JrIGNhcmQpJyxcbiAgcGVlcnNBZG1pbjogJ1BlZXJzIChodWIgYWRtaW4gdG9rZW4gcmVxdWlyZWQgaW4gdGhpcyBicm93c2VyKScsXG4gIGFjdGl2aXRpZXM6ICdOb3RpZmljYXRpb25zIChiZWxsKSwgYWN0aXZpdHkgbG9nLCBmZWVkLCBob21lIHNlY3Rpb25zJyxcbiAgZmVhdHVyZXM6ICdGZWF0dXJlcyB0b3VyICgvZmVhdHVyZXMsIE1vcmUgbWVudSwgaG9tZSBzaG9ydGN1dCknLFxuICBzaWRlY2hhaW46ICdTaWRlY2hhaW4gZGVtbywgZmVkZXJhdGlvbiBzZXR0aW5ncywgYmVhY29uIGZlZGVyYXRpb24gbmF2JyxcbiAgYml0Y29pblBheW1lbnRzOiAnQml0Y29pbiDigJQgUGF5bWVudHMgJiBQYXlqb2luIChwYWdlLCBuYXYgbGlua3MsIGJhbGFuY2UgY2hpcCknLFxuICBiaXRjb2luSW52b2ljZXM6ICdCaXRjb2luIOKAlCBJbnZvaWNlcyB3YWxrdGhyb3VnaCBwYWdlJyxcbiAgYml0Y29pblJlc291cmNlczogJ0JpdGNvaW4g4oCUIEhUVFAgcmVzb3VyY2VzIGJyb3dzZXIgKC9zZXJ2aWNlcy9iaXRjb2luL3Jlc291cmNlcyknLFxuICBiaXRjb2luRXhwbG9yZXI6ICdCaXRjb2luIOKAlCBCbG9jayAmIHRyYW5zYWN0aW9uIGRldGFpbCByb3V0ZXMnLFxuICBiaXRjb2luTGlnaHRuaW5nOiAnQml0Y29pbiDigJQgTGlnaHRuaW5nIFVJICYgY2hhbm5lbCBkZXRhaWwgcm91dGVzJyxcbiAgYml0Y29pbkNyb3dkZnVuZDogJ0JpdGNvaW4g4oCUIFRhcHJvb3QgY3Jvd2RmdW5kIHNlY3Rpb24gb24gdGhlIGRhc2hib2FyZCdcbn07XG5jb25zdCBXT1JLX1FVRVVFX1NUUkFURUdZX09QVElPTlMgPSBbXG4gIHsga2V5OiAnaGlnaGVzdF92YWx1ZV9maXJzdCcsIHZhbHVlOiAnaGlnaGVzdF92YWx1ZV9maXJzdCcsIHRleHQ6ICdIaWdoZXN0IHZhbHVlIGZpcnN0IChkZWZhdWx0KScgfSxcbiAgeyBrZXk6ICdmaWZvJywgdmFsdWU6ICdmaWZvJywgdGV4dDogJ0ZJRk8gKG9sZGVzdCBmaXJzdCknIH0sXG4gIHsga2V5OiAnb2xkZXN0X2hpZ2hfdmFsdWVfZmlyc3QnLCB2YWx1ZTogJ29sZGVzdF9oaWdoX3ZhbHVlX2ZpcnN0JywgdGV4dDogJ09sZGVzdCBmaXJzdCwgdmFsdWUgdGllLWJyZWFrZXInIH1cbl07XG5cbi8qKiBNdXN0IG1hdGNoIHtAbGluayBIVUJfU0VMRl9ERVNUUlVDVF9DT05GSVJNX1BIUkFTRX0gaW4gYHNlcnZpY2VzL2h1Yi5qc2AgKFBPU1QgYC9zZXR0aW5ncy9zZWxmLWRlc3RydWN0YCkuICovXG5jb25zdCBIVUJfU0VMRl9ERVNUUlVDVF9DT05GSVJNX1BIUkFTRSA9ICdERUxFVEUgQUxMIEhVQiBEQVRBJztcblxuZnVuY3Rpb24gQWRtaW5Ib21lIChwcm9wcykge1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgYWRtaW5Ub2tlblByb3AgPSBwcm9wcyAmJiBwcm9wcy5hZG1pblRva2VuO1xuICBjb25zdCBoYXNBZG1pbiA9ICEhcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlcihhZG1pblRva2VuUHJvcCk7XG4gIGNvbnN0IGFkbWluVG9rZW4gPSByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKGFkbWluVG9rZW5Qcm9wKTtcbiAgY29uc3QgW3JvdXRlQmxvY2tlZEhpbnQsIHNldFJvdXRlQmxvY2tlZEhpbnRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtuZXR3b3JrLCBzZXROZXR3b3JrXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2h0dHBTaGFyZWQsIHNldEh0dHBTaGFyZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaHR0cFNoYXJlZExvYWRpbmcsIHNldEh0dHBTaGFyZWRMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbaHR0cFNoYXJlZEVyciwgc2V0SHR0cFNoYXJlZEVycl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2h0dHBTaGFyZWRPaywgc2V0SHR0cFNoYXJlZE9rXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbaHR0cFNoYXJlZFNhdmluZywgc2V0SHR0cFNoYXJlZFNhdmluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFt1aUZsYWdzLCBzZXRVaUZsYWdzXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpKTtcbiAgY29uc3QgW3VpRmxhZ3NQZXJzaXN0TXNnLCBzZXRVaUZsYWdzUGVyc2lzdE1zZ10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3dvcmtlclN0YXR1cywgc2V0V29ya2VyU3RhdHVzXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbd29ya2VyUXVldWUsIHNldFdvcmtlclF1ZXVlXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgY29uc3QgW3dvcmtlclN0cmF0ZWd5LCBzZXRXb3JrZXJTdHJhdGVneV0gPSBSZWFjdC51c2VTdGF0ZSgnaGlnaGVzdF92YWx1ZV9maXJzdCcpO1xuICBjb25zdCBbd29ya2VyU3RyYXRlZ3lTYXZpbmcsIHNldFdvcmtlclN0cmF0ZWd5U2F2aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3dlYWx0aFN1bW1hcnksIHNldFdlYWx0aFN1bW1hcnldID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtvcGVyYXRvckhlYWx0aCwgc2V0T3BlcmF0b3JIZWFsdGhdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtvcGVyYXRvckhlYWx0aExvYWRpbmcsIHNldE9wZXJhdG9ySGVhbHRoTG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtvcGVyYXRvckhlYWx0aEVycm9yLCBzZXRPcGVyYXRvckhlYWx0aEVycm9yXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbd29ya2VyTG9hZGluZywgc2V0V29ya2VyTG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFt3b3JrZXJBY3Rpb25CdXN5LCBzZXRXb3JrZXJBY3Rpb25CdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3dvcmtlckVycm9yLCBzZXRXb3JrZXJFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3NlbGZEZXN0cnVjdE9wZW4sIHNldFNlbGZEZXN0cnVjdE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2VsZkRlc3RydWN0UGhyYXNlLCBzZXRTZWxmRGVzdHJ1Y3RQaHJhc2VdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbc2VsZkRlc3RydWN0QnVzeSwgc2V0U2VsZkRlc3RydWN0QnVzeV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzZWxmRGVzdHJ1Y3RFcnIsIHNldFNlbGZEZXN0cnVjdEVycl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3NlbGZEZXN0cnVjdE9rLCBzZXRTZWxmRGVzdHJ1Y3RPa10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcblxuICBjb25zdCBycGNDYWxsID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKG1ldGhvZCwgcGFyYW1zID0ge30pID0+IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL3NlcnZpY2VzL3JwYycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBqc29ucnBjOiAnMi4wJywgaWQ6IERhdGUubm93KCksIG1ldGhvZCwgcGFyYW1zIH0pXG4gICAgfSk7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IHJlcy5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgaWYgKGpzb24gJiYganNvbi5lcnJvcikgdGhyb3cgbmV3IEVycm9yKGpzb24uZXJyb3IubWVzc2FnZSB8fCAnUlBDIGVycm9yJyk7XG4gICAgcmV0dXJuIGpzb24gJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGpzb24sICdyZXN1bHQnKSA/IGpzb24ucmVzdWx0IDoganNvbjtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IHJlZnJlc2hXb3JrZXJQYW5lbCA9IFJlYWN0LnVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRXb3JrZXJMb2FkaW5nKHRydWUpO1xuICAgIHNldFdvcmtlckVycm9yKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBbc3RhdHVzUmVzLCBxdWV1ZVJlcywgd2VhbHRoUmVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcnBjQ2FsbCgnR2V0V29ya2VyU3RhdHVzJywge30pLFxuICAgICAgICBycGNDYWxsKCdMaXN0V29ya2VyUXVldWUnLCB7IGxpbWl0OiAxMDAsIG9mZnNldDogMCB9KSxcbiAgICAgICAgcnBjQ2FsbCgnR2V0Tm9kZVdlYWx0aFN1bW1hcnknLCB7fSlcbiAgICAgIF0pO1xuICAgICAgc2V0V29ya2VyU3RhdHVzKHN0YXR1c1JlcyB8fCBudWxsKTtcbiAgICAgIHNldFdvcmtlclF1ZXVlKEFycmF5LmlzQXJyYXkocXVldWVSZXMgJiYgcXVldWVSZXMuaXRlbXMpID8gcXVldWVSZXMuaXRlbXMgOiBbXSk7XG4gICAgICBpZiAoc3RhdHVzUmVzICYmIHN0YXR1c1Jlcy5zdHJhdGVneSkgc2V0V29ya2VyU3RyYXRlZ3koU3RyaW5nKHN0YXR1c1Jlcy5zdHJhdGVneSkpO1xuICAgICAgc2V0V2VhbHRoU3VtbWFyeSh3ZWFsdGhSZXMgfHwgbnVsbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0V29ya2VyRXJyb3IoZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRXb3JrZXJMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtycGNDYWxsXSk7XG5cbiAgY29uc3QgcmVmcmVzaE9wZXJhdG9ySGVhbHRoID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldE9wZXJhdG9ySGVhbHRoTG9hZGluZyh0cnVlKTtcbiAgICBzZXRPcGVyYXRvckhlYWx0aEVycm9yKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL3NlcnZpY2VzL29wZXJhdG9yL2hlYWx0aCcsIHsgaGVhZGVyczogeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9IH0pO1xuICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcy5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKChqc29uICYmIGpzb24ubWVzc2FnZSkgfHwgYCR7cmVzLnN0YXR1c30gJHtyZXMuc3RhdHVzVGV4dH1gKTtcbiAgICAgIHNldE9wZXJhdG9ySGVhbHRoKGpzb24gfHwgbnVsbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0T3BlcmF0b3JIZWFsdGhFcnJvcihlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldE9wZXJhdG9ySGVhbHRoTG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgY29uc3QgZm9ybWF0Qnl0ZXMgPSBSZWFjdC51c2VDYWxsYmFjaygobikgPT4ge1xuICAgIGNvbnN0IHYgPSBOdW1iZXIobik7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodikgfHwgdiA8IDApIHJldHVybiAnbi9hJztcbiAgICBpZiAodiA8IDEwMjQpIHJldHVybiBgJHt2fSBCYDtcbiAgICBjb25zdCB1bml0cyA9IFsnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInXTtcbiAgICBsZXQgaWR4ID0gLTE7XG4gICAgbGV0IGN1ciA9IHY7XG4gICAgZG8ge1xuICAgICAgY3VyID0gY3VyIC8gMTAyNDtcbiAgICAgIGlkeCsrO1xuICAgIH0gd2hpbGUgKGN1ciA+PSAxMDI0ICYmIGlkeCA8IHVuaXRzLmxlbmd0aCAtIDEpO1xuICAgIHJldHVybiBgJHtjdXIudG9GaXhlZChjdXIgPj0gMTAwID8gMCA6IGN1ciA+PSAxMCA/IDEgOiAyKX0gJHt1bml0c1tpZHhdfWA7XG4gIH0sIFtdKTtcblxuICBjb25zdCBydW5TZWxmRGVzdHJ1Y3QgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKGFkbWluVG9rZW5Qcm9wKTtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICBzZXRTZWxmRGVzdHJ1Y3RFcnIoJ0FkbWluIHRva2VuIHJlcXVpcmVkIGluIHRoaXMgYnJvd3Nlci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0U2VsZkRlc3RydWN0QnVzeSh0cnVlKTtcbiAgICBzZXRTZWxmRGVzdHJ1Y3RFcnIobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvc2V0dGluZ3Mvc2VsZi1kZXN0cnVjdCcsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgY29uZmlybVBocmFzZTogc2VsZkRlc3RydWN0UGhyYXNlLnRyaW0oKSB9KVxuICAgICAgfSk7XG4gICAgICBjb25zdCByYXcgPSBhd2FpdCByZXMudGV4dCgpO1xuICAgICAgbGV0IGpzb24gPSB7fTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGpzb24gPSByYXcgPyBKU09OLnBhcnNlKHJhdykgOiB7fTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAganNvbiA9IHt9O1xuICAgICAgfVxuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKChqc29uICYmIGpzb24ubWVzc2FnZSkgfHwgcmF3IHx8IGAke3Jlcy5zdGF0dXN9ICR7cmVzLnN0YXR1c1RleHR9YCk7XG4gICAgICB9XG4gICAgICBzZXRTZWxmRGVzdHJ1Y3RPayhqc29uLm1lc3NhZ2UgfHwgJ0xvY2FsIGRhdGEgd2lwZSBzdGFydGVkLiBUaGUgSHViIHByb2Nlc3Mgd2lsbCBleGl0LicpO1xuICAgICAgY2xlYXJIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIoKTtcbiAgICAgIHNldFNlbGZEZXN0cnVjdE9wZW4oZmFsc2UpO1xuICAgICAgc2V0U2VsZkRlc3RydWN0UGhyYXNlKCcnKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gbmF2aWdhdGUoJy8nKSwgMjAwMCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0U2VsZkRlc3RydWN0RXJyKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U2VsZkRlc3RydWN0QnVzeShmYWxzZSk7XG4gICAgfVxuICB9LCBbYWRtaW5Ub2tlblByb3AsIHNlbGZEZXN0cnVjdFBocmFzZSwgbmF2aWdhdGVdKTtcblxuICBjb25zdCBmb3JtYXREdXJhdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKChzZWNJbikgPT4ge1xuICAgIGNvbnN0IHNlYyA9IE51bWJlcihzZWNJbik7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc2VjKSB8fCBzZWMgPCAwKSByZXR1cm4gJ24vYSc7XG4gICAgY29uc3QgZCA9IE1hdGguZmxvb3Ioc2VjIC8gODY0MDApO1xuICAgIGNvbnN0IGggPSBNYXRoLmZsb29yKChzZWMgJSA4NjQwMCkgLyAzNjAwKTtcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcigoc2VjICUgMzYwMCkgLyA2MCk7XG4gICAgaWYgKGQgPiAwKSByZXR1cm4gYCR7ZH1kICR7aH1oYDtcbiAgICBpZiAoaCA+IDApIHJldHVybiBgJHtofWggJHttfW1gO1xuICAgIHJldHVybiBgJHttfW1gO1xuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzID0gbG9jYXRpb24uc3RhdGU7XG4gICAgaWYgKHMgJiYgdHlwZW9mIHMuZmVhdHVyZUZsYWdCbG9ja2VkID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgcGF0aCA9IHR5cGVvZiBzLmJsb2NrZWRQYXRoID09PSAnc3RyaW5nJyA/IHMuYmxvY2tlZFBhdGggOiAnJztcbiAgICAgIHNldFJvdXRlQmxvY2tlZEhpbnQoeyBmbGFnOiBzLmZlYXR1cmVGbGFnQmxvY2tlZCwgcGF0aCB9KTtcbiAgICAgIG5hdmlnYXRlKFxuICAgICAgICB7IHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZSwgc2VhcmNoOiBsb2NhdGlvbi5zZWFyY2ggfHwgJycsIGhhc2g6IGxvY2F0aW9uLmhhc2ggfHwgJycgfSxcbiAgICAgICAgeyByZXBsYWNlOiB0cnVlLCBzdGF0ZToge30gfVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaCB8fCAnJyk7XG4gICAgY29uc3QgcUZsYWcgPSBTdHJpbmcocXMuZ2V0KCdibG9ja2VkRmxhZycpIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgcVBhdGggPSBTdHJpbmcocXMuZ2V0KCdibG9ja2VkUGF0aCcpIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKHFGbGFnKSB7XG4gICAgICBzZXRSb3V0ZUJsb2NrZWRIaW50KHsgZmxhZzogcUZsYWcsIHBhdGg6IHFQYXRoIH0pO1xuICAgIH1cbiAgfSwgW2xvY2F0aW9uLnN0YXRlLCBsb2NhdGlvbi5wYXRobmFtZSwgbG9jYXRpb24uc2VhcmNoLCBsb2NhdGlvbi5oYXNoLCBuYXZpZ2F0ZV0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIGZldGNoQml0Y29pblN0YXR1cyhsb2FkVXBzdHJlYW1TZXR0aW5ncygpKVxuICAgICAgLnRoZW4oKHMpID0+IHtcbiAgICAgICAgaWYgKGNhbmNlbGxlZCB8fCAhcykgcmV0dXJuO1xuICAgICAgICBzZXROZXR3b3JrKHMubmV0d29yayA/IFN0cmluZyhzLm5ldHdvcmspLnRvTG93ZXJDYXNlKCkgOiAnJyk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHt9KTtcbiAgICByZXR1cm4gKCkgPT4geyBjYW5jZWxsZWQgPSB0cnVlOyB9O1xuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZWZyZXNoV29ya2VyUGFuZWwoKTtcbiAgfSwgW3JlZnJlc2hXb3JrZXJQYW5lbF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IG1vdW50ZWQgPSB0cnVlO1xuICAgIHJlZnJlc2hPcGVyYXRvckhlYWx0aCgpO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKG1vdW50ZWQpIHJlZnJlc2hPcGVyYXRvckhlYWx0aCgpO1xuICAgIH0sIDMwMDAwKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbW91bnRlZCA9IGZhbHNlO1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgfTtcbiAgfSwgW3JlZnJlc2hPcGVyYXRvckhlYWx0aF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIGZldGNoUGVyc2lzdGVkSHViVWlGZWF0dXJlRmxhZ3MoKVxuICAgICAgLnRoZW4oKG5leHQpID0+IHtcbiAgICAgICAgaWYgKCFjYW5jZWxsZWQgJiYgbmV4dCAmJiB0eXBlb2YgbmV4dCA9PT0gJ29iamVjdCcpIHNldFVpRmxhZ3MobmV4dCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHt9KTtcbiAgICByZXR1cm4gKCkgPT4geyBjYW5jZWxsZWQgPSB0cnVlOyB9O1xuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgc2V0SHR0cFNoYXJlZExvYWRpbmcodHJ1ZSk7XG4gICAgc2V0SHR0cFNoYXJlZEVycihudWxsKTtcbiAgICBmZXRjaCgnL3NldHRpbmdzL0hUVFBfU0hBUkVEX01PREUnLCB7IGhlYWRlcnM6IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfSB9KVxuICAgICAgLnRoZW4oKHIpID0+IHtcbiAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICBpZiAoci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgIHNldEh0dHBTaGFyZWQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXIub2spIHRocm93IG5ldyBFcnJvcihgJHtyLnN0YXR1c30gJHtyLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIHJldHVybiByLmpzb24oKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoaikgPT4ge1xuICAgICAgICBpZiAoY2FuY2VsbGVkIHx8ICFqKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHYgPSBqLnZhbHVlO1xuICAgICAgICBzZXRIdHRwU2hhcmVkKHYgPT09IHRydWUgfHwgdiA9PT0gJ3RydWUnKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHNldEh0dHBTaGFyZWRFcnIoZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHNldEh0dHBTaGFyZWRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7IGNhbmNlbGxlZCA9IHRydWU7IH07XG4gIH0sIFtdKTtcblxuICBjb25zdCBwZXJzaXN0SHR0cFNoYXJlZCA9IChuZXh0KSA9PiB7XG4gICAgaWYgKCFhZG1pblRva2VuKSB7XG4gICAgICBzZXRIdHRwU2hhcmVkRXJyKCdBZG1pbiB0b2tlbiByZXF1aXJlZCB0byBjaGFuZ2UgSFRUUCBiaW5kIG1vZGUuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldEh0dHBTaGFyZWRTYXZpbmcodHJ1ZSk7XG4gICAgc2V0SHR0cFNoYXJlZEVycihudWxsKTtcbiAgICBzZXRIdHRwU2hhcmVkT2sobnVsbCk7XG4gICAgZmV0Y2goJy9zZXR0aW5ncy9IVFRQX1NIQVJFRF9NT0RFJywge1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthZG1pblRva2VufWBcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHZhbHVlOiAhIW5leHQgfSlcbiAgICB9KVxuICAgICAgLnRoZW4oKHIpID0+IHtcbiAgICAgICAgaWYgKCFyLm9rKSByZXR1cm4gci50ZXh0KCkudGhlbigodCkgPT4geyB0aHJvdyBuZXcgRXJyb3IodCB8fCBgJHtyLnN0YXR1c31gKTsgfSk7XG4gICAgICAgIHJldHVybiByLmpzb24oKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoaikgPT4ge1xuICAgICAgICBzZXRIdHRwU2hhcmVkKCEhbmV4dCk7XG4gICAgICAgIGlmIChqICYmIGouaHR0cFJlYmluZCA9PT0gJ3NjaGVkdWxlZCcpIHtcbiAgICAgICAgICBzZXRIdHRwU2hhcmVkT2soai5tZXNzYWdlIHx8ICdIVFRQIGxpc3RlbmVyIGlzIHJlYmluZGluZzsgV2ViU29ja2V0IGNsaWVudHMgd2lsbCByZWNvbm5lY3QuJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaiAmJiBqLmh0dHBSZWJpbmQgPT09ICdza2lwcGVkJykge1xuICAgICAgICAgIHNldEh0dHBTaGFyZWRPayhqLmh0dHBSZWJpbmRSZWFzb24gfHwgJ1NhdmVkLiBCaW5kIGFkZHJlc3MgaXMgY29udHJvbGxlZCBieSBlbnZpcm9ubWVudCB1bnRpbCB5b3UgcmVzdGFydCB3aXRob3V0IHRob3NlIHZhcmlhYmxlcy4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRIdHRwU2hhcmVkT2sobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgc2V0SHR0cFNoYXJlZEVycihlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBzZXRIdHRwU2hhcmVkU2F2aW5nKGZhbHNlKTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHN5bmNVaUZsYWcgPSBhc3luYyAoa2V5LCBjaGVja2VkKSA9PiB7XG4gICAgc2V0SHViVWlGZWF0dXJlRmxhZyhrZXksIGNoZWNrZWQpO1xuICAgIGNvbnN0IG5leHQgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgICBzZXRVaUZsYWdzKG5leHQpO1xuICAgIGlmICghYWRtaW5Ub2tlbikge1xuICAgICAgc2V0VWlGbGFnc1BlcnNpc3RNc2coJ1NhdmVkIGluIHRoaXMgYnJvd3NlciBvbmx5LiBTYXZlIGFkbWluIHRva2VuIHRvIHBlcnNpc3Qgb24gaHViIGRpc2suJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcnNpc3RIdWJVaUZlYXR1cmVGbGFncyhuZXh0LCBhZG1pblRva2VuKTtcbiAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgc2V0VWlGbGFnc1BlcnNpc3RNc2coYFNhdmVkIGluIGJyb3dzZXI7IGh1Yi1kaXNrIHNhdmUgZmFpbGVkOiAke3Jlc3VsdC5tZXNzYWdlIHx8ICd1bmtub3duIGVycm9yJ31gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VWlGbGFnc1BlcnNpc3RNc2coJ1BlcnNpc3RlZCB0byBodWIgc2V0dGluZ3MgKGRpc2spIGFuZCByZXN0b3JlZCBvbiBzdGFydHVwLicpO1xuICB9O1xuXG4gIGNvbnN0IGFwcGx5RG9jdW1lbnRNYXJrZXRQcmVzZXQgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IHNldEFsbEh1YlVpRmVhdHVyZUZsYWdzKGRvY3VtZW50TWFya2V0VWlGbGFncygpKTtcbiAgICBzZXRVaUZsYWdzKG5leHQpO1xuICAgIGlmICghYWRtaW5Ub2tlbikge1xuICAgICAgc2V0VWlGbGFnc1BlcnNpc3RNc2coJ0RvY3VtZW50IG1hcmtldCBwcmVzZXQgc2F2ZWQgaW4gdGhpcyBicm93c2VyIG9ubHkuIFNhdmUgYWRtaW4gdG9rZW4gdG8gcGVyc2lzdCBvbiBodWIgZGlzay4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyc2lzdEh1YlVpRmVhdHVyZUZsYWdzKG5leHQsIGFkbWluVG9rZW4pO1xuICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICBzZXRVaUZsYWdzUGVyc2lzdE1zZyhgRG9jdW1lbnQgbWFya2V0IHByZXNldCBpbiBicm93c2VyOyBodWItZGlzayBzYXZlIGZhaWxlZDogJHtyZXN1bHQubWVzc2FnZSB8fCAndW5rbm93biBlcnJvcid9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFVpRmxhZ3NQZXJzaXN0TXNnKCdEb2N1bWVudCBtYXJrZXQgcHJlc2V0IHBlcnNpc3RlZCB0byBodWIgc2V0dGluZ3MgKGRpc2spLicpO1xuICB9O1xuXG4gIGNvbnN0IHJ1bldvcmtlck5vdyA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWFkbWluVG9rZW4pIHJldHVybiBzZXRXb3JrZXJFcnJvcignQWRtaW4gdG9rZW4gcmVxdWlyZWQuJyk7XG4gICAgc2V0V29ya2VyQWN0aW9uQnVzeSh0cnVlKTtcbiAgICBzZXRXb3JrZXJFcnJvcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnBjQ2FsbCgnUnVuV29ya2VyUXVldWVOb3cnLCB7IGFkbWluVG9rZW4gfSk7XG4gICAgICBhd2FpdCByZWZyZXNoV29ya2VyUGFuZWwoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXRXb3JrZXJFcnJvcihlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFdvcmtlckFjdGlvbkJ1c3koZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzYXZlV29ya2VyU3RyYXRlZ3kgPSBhc3luYyAoc3RyYXRlZ3kpID0+IHtcbiAgICBpZiAoIWhhc0FkbWluKSByZXR1cm4gc2V0V29ya2VyRXJyb3IoJ0FkbWluIHRva2VuIHJlcXVpcmVkLicpO1xuICAgIHNldFdvcmtlclN0cmF0ZWd5U2F2aW5nKHRydWUpO1xuICAgIHNldFdvcmtlckVycm9yKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdXQgPSBhd2FpdCBycGNDYWxsKCdTZXRXb3JrZXJRdWV1ZVN0cmF0ZWd5JywgeyBhZG1pblRva2VuLCBzdHJhdGVneSB9KTtcbiAgICAgIGlmIChvdXQgJiYgb3V0LnN0YXR1cyA9PT0gJ2Vycm9yJykgdGhyb3cgbmV3IEVycm9yKG91dC5tZXNzYWdlIHx8ICdDb3VsZCBub3Qgc2F2ZSB3b3JrZXIgcXVldWUgc3RyYXRlZ3knKTtcbiAgICAgIHNldFdvcmtlclN0cmF0ZWd5KFN0cmluZygob3V0ICYmIG91dC5zdHJhdGVneSkgfHwgc3RyYXRlZ3kgfHwgJ2hpZ2hlc3RfdmFsdWVfZmlyc3QnKSk7XG4gICAgICBhd2FpdCByZWZyZXNoV29ya2VyUGFuZWwoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXRXb3JrZXJFcnJvcihlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFdvcmtlclN0cmF0ZWd5U2F2aW5nKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2xlYXJXb3JrZXJRdWV1ZSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWFkbWluVG9rZW4pIHJldHVybiBzZXRXb3JrZXJFcnJvcignQWRtaW4gdG9rZW4gcmVxdWlyZWQuJyk7XG4gICAgc2V0V29ya2VyQWN0aW9uQnVzeSh0cnVlKTtcbiAgICBzZXRXb3JrZXJFcnJvcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnBjQ2FsbCgnQ2xlYXJXb3JrZXJRdWV1ZScsIHsgYWRtaW5Ub2tlbiB9KTtcbiAgICAgIGF3YWl0IHJlZnJlc2hXb3JrZXJQYW5lbCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldFdvcmtlckVycm9yKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0V29ya2VyQWN0aW9uQnVzeShmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRyb3BXb3JrZXJJdGVtID0gYXN5bmMgKGlkKSA9PiB7XG4gICAgaWYgKCFhZG1pblRva2VuKSByZXR1cm4gc2V0V29ya2VyRXJyb3IoJ0FkbWluIHRva2VuIHJlcXVpcmVkLicpO1xuICAgIHNldFdvcmtlckFjdGlvbkJ1c3kodHJ1ZSk7XG4gICAgc2V0V29ya2VyRXJyb3IobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJwY0NhbGwoJ0Ryb3BXb3JrZXJRdWV1ZUl0ZW0nLCB7IGFkbWluVG9rZW4sIGlkIH0pO1xuICAgICAgYXdhaXQgcmVmcmVzaFdvcmtlclBhbmVsKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0V29ya2VyRXJyb3IoZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRXb3JrZXJBY3Rpb25CdXN5KGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8U2VnbWVudCBzdHlsZT17eyBtYXhXaWR0aDogOTYwLCBtYXJnaW46ICcxZW0gYXV0bycgfX0+XG4gICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScsIGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC41ZW0nIH19PlxuICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9cIiBiYXNpYyBzaXplPVwic21hbGxcIiBhcmlhLWxhYmVsPVwiQmFjayB0byBob21lXCI+XG4gICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgIEhvbWVcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NldHRpbmdzXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgYXJpYS1sYWJlbD1cIkJhY2sgdG8gc2V0dGluZ3Mgb3ZlcnZpZXdcIj5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwic2V0dGluZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgU2V0dGluZ3NcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAge3JvdXRlQmxvY2tlZEhpbnQgJiYgKFxuICAgICAgICA8TWVzc2FnZVxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19XG4gICAgICAgICAgb25EaXNtaXNzPXsoKSA9PiBzZXRSb3V0ZUJsb2NrZWRIaW50KG51bGwpfVxuICAgICAgICAgIGRpc21pc3NpYmxlXG4gICAgICAgID5cbiAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+VGhhdCBwYWdlIGlzIGhpZGRlbiBpbiB0aGlzIGJyb3dzZXI8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnIH19PlxuICAgICAgICAgICAge3JvdXRlQmxvY2tlZEhpbnQuZmxhZyA9PT0gJ3BlZXJzQWRtaW4nID8gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIFlvdSBvcGVuZWR7JyAnfVxuICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e3JvdXRlQmxvY2tlZEhpbnQucGF0aCB8fCAnKHVua25vd24gcGF0aCknfTwvY29kZT5cbiAgICAgICAgICAgICAgICAuIFBlZXJzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIHRoaXMgYnJvd3NlciBoYXMgdGhlIGh1YiBhZG1pbiB0b2tlbiAoZmlyc3QtdGltZSBzZXR1cCB0b2tlbikuXG4gICAgICAgICAgICAgICAgUGFzdGUgb3IgcmVmcmVzaCB0aGUgdG9rZW4gYmVsb3csIHRoZW4gb3BlbiB0aGUgbGluayBhZ2Fpbi5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIFlvdSBvcGVuZWR7JyAnfVxuICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e3JvdXRlQmxvY2tlZEhpbnQucGF0aCB8fCAnKHVua25vd24gcGF0aCknfTwvY29kZT5cbiAgICAgICAgICAgICAgICAsIGJ1dHsnICd9XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57VUlfRkxBR19MQUJFTFNbcm91dGVCbG9ja2VkSGludC5mbGFnXSB8fCByb3V0ZUJsb2NrZWRIaW50LmZsYWd9PC9zdHJvbmc+IGlzIHR1cm5lZCBvZmYgdW5kZXJcbiAgICAgICAgICAgICAgICBGZWF0dXJlIHZpc2liaWxpdHkgYmVsb3cuIEVuYWJsZSBpdCwgdGhlbiBvcGVuIHRoZSBsaW5rIGFnYWluLlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApfVxuXG4gICAgICA8SGVhZGVyIGFzPVwiaDJcIiBpZD1cImFkbWluLXBhZ2UtaGVhZGluZ1wiPlxuICAgICAgICA8SWNvbiBuYW1lPVwic2V0dGluZ3NcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+QWRtaW48L0hlYWRlci5Db250ZW50PlxuICAgICAgPC9IZWFkZXI+XG4gICAgICA8cCBpZD1cImFkbWluLXBhZ2Utc3VtbWFyeVwiIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzEuMjVlbScsIG1heFdpZHRoOiAnNDJyZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICBOb2RlLW9wZXJhdG9yIHRvb2xzIHRoYXQgZGVwZW5kIG9uIHRoZSBodWIgc2V0dXAgdG9rZW4sIEJpdGNvaW4gc2VydmljZSwgYW5kIGRpc3RyaWJ1dGVkIGV4ZWN1dGlvbiBzdXJmYWNlcy5cbiAgICAgICAgRW5kIHVzZXJzIG5vcm1hbGx5IHVzZSA8TGluayB0bz1cIi9zZXR0aW5nc1wiPlNldHRpbmdzPC9MaW5rPlxuICAgICAgICB7JyAnfWFuZCB0aGUgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pblwiPkJpdGNvaW48L0xpbms+IGRhc2hib2FyZCB3aXRob3V0IG9wZW5pbmcgdGhpcyBwYWdlLlxuICAgICAgICBUaGUgQml0Y29pbiBkYXNoYm9hcmQgaXMgYWx3YXlzIGF2YWlsYWJsZTsgdHVybiBvbiB0aGUgQml0Y29pbiBzdWItdG9nZ2xlcyBiZWxvdyBmb3IgUGF5bWVudHMsIEludm9pY2VzLCBIVFRQIHJlc291cmNlcywgYmxvY2svdHggZXhwbG9yZXIgcm91dGVzLCBMaWdodG5pbmcsIGFuZCBjcm93ZGZ1bmQgVUkuXG4gICAgICA8L3A+XG5cbiAgICAgIHshaGFzQWRtaW4gPyAoXG4gICAgICAgIDxNZXNzYWdlIGluZm8gc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+Tm8gYWRtaW4gdG9rZW4gaW4gdGhpcyBicm93c2VyPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJyB9fT5cbiAgICAgICAgICAgIFBhc3RlIHRoZSBzZXR1cCB0b2tlbiBmcm9tIGZpcnN0LXRpbWUgaHViIGNvbmZpZ3VyYXRpb24gKG9yIHJlZnJlc2ggaXQpIHRvIHVubG9jayBHZW5lcmF0ZSBCbG9jaywgSHViLXdhbGxldCBzcGVuZHMsIGFuZCBmZWRlcmF0aW9uIHBvbGljeSBzYXZlcy5cbiAgICAgICAgICAgIFJlZ3Rlc3Q6IHVzZSB0aGUgcGFuZWwgYmVsb3cuXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApIDogKFxuICAgICAgICA8TWVzc2FnZSBwb3NpdGl2ZSBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgIEFkbWluIHRva2VuIGlzIHByZXNlbnQgaW4gdGhpcyBicm93c2VyLlxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApfVxuXG4gICAgICA8SHViUmVndGVzdEFkbWluVG9rZW5QYW5lbCBuZXR3b3JrPXtuZXR3b3JrfSBhZG1pblRva2VuUHJvcD17YWRtaW5Ub2tlblByb3B9IC8+XG5cbiAgICAgIDxIZWFkZXIgYXM9XCJoM1wiIHN0eWxlPXt7IG1hcmdpblRvcDogJzEuNWVtJyB9fSBpZD1cImFkbWluLW9wZXJhdG9yLWhlYWx0aC1oZWFkaW5nXCI+T3BlcmF0b3IgaGVhbHRoPC9IZWFkZXI+XG4gICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nLCBtYXhXaWR0aDogJzQycmVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgTG9jYWwgbm9kZSBoZWFsdGggc2lnbmFscyBmb3IgZGlzayBjYXBhY2l0eSwgcHJvY2VzcyBwcmVzc3VyZSwgYW5kIGNvbm5lY3Rpdml0eSB0byBjb25maWd1cmVkIGxvY2FsIHNlcnZpY2VzLlxuICAgICAgPC9wPlxuICAgICAge29wZXJhdG9ySGVhbHRoRXJyb3IgPyAoXG4gICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAge29wZXJhdG9ySGVhbHRoRXJyb3J9XG4gICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJywgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgPEJ1dHRvbiBiYXNpYyBzaXplPVwic21hbGxcIiBsb2FkaW5nPXtvcGVyYXRvckhlYWx0aExvYWRpbmd9IG9uQ2xpY2s9e3JlZnJlc2hPcGVyYXRvckhlYWx0aH0+XG4gICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPiBSZWZyZXNoIGhlYWx0aFxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAge29wZXJhdG9ySGVhbHRoICYmIG9wZXJhdG9ySGVhbHRoLm5vdyA/IChcbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJywgYWxpZ25TZWxmOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgIFVwZGF0ZWQ6IHtuZXcgRGF0ZShvcGVyYXRvckhlYWx0aC5ub3cpLnRvTG9jYWxlU3RyaW5nKCl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgICAgPFNlZ21lbnQgc2Vjb25kYXJ5IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5Ib3N0Ojwvc3Ryb25nPiB7b3BlcmF0b3JIZWFsdGggJiYgb3BlcmF0b3JIZWFsdGgubm9kZSAmJiBvcGVyYXRvckhlYWx0aC5ub2RlLmhvc3RuYW1lID8gb3BlcmF0b3JIZWFsdGgubm9kZS5ob3N0bmFtZSA6ICduL2EnfTwvZGl2PlxuICAgICAgICA8ZGl2PjxzdHJvbmc+Tm9kZSBwcm9jZXNzIHVwdGltZTo8L3N0cm9uZz4ge2Zvcm1hdER1cmF0aW9uKG9wZXJhdG9ySGVhbHRoICYmIG9wZXJhdG9ySGVhbHRoLm5vZGUgPyBvcGVyYXRvckhlYWx0aC5ub2RlLnVwdGltZVNlYyA6IG51bGwpfTwvZGl2PlxuICAgICAgICA8ZGl2PjxzdHJvbmc+Q1BVIHVzYWdlIChwcm9jZXNzKTo8L3N0cm9uZz4ge29wZXJhdG9ySGVhbHRoICYmIG9wZXJhdG9ySGVhbHRoLm5vZGUgJiYgb3BlcmF0b3JIZWFsdGgubm9kZS5jcHUgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcihvcGVyYXRvckhlYWx0aC5ub2RlLmNwdS5wcm9jZXNzUGVyY2VudCkpID8gYCR7TnVtYmVyKG9wZXJhdG9ySGVhbHRoLm5vZGUuY3B1LnByb2Nlc3NQZXJjZW50KS50b0ZpeGVkKDEpfSVgIDogJ3dhcm1pbmcgdXDigKYnfTwvZGl2PlxuICAgICAgICA8ZGl2PjxzdHJvbmc+Q1BVIGNvcmVzOjwvc3Ryb25nPiB7b3BlcmF0b3JIZWFsdGggJiYgb3BlcmF0b3JIZWFsdGgubm9kZSAmJiBvcGVyYXRvckhlYWx0aC5ub2RlLmNwdSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKG9wZXJhdG9ySGVhbHRoLm5vZGUuY3B1LmNvcmVzKSkgPyBOdW1iZXIob3BlcmF0b3JIZWFsdGgubm9kZS5jcHUuY29yZXMpIDogJ24vYSd9PC9kaXY+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5TeXN0ZW0gbG9hZCBhdmc6PC9zdHJvbmc+IHtvcGVyYXRvckhlYWx0aCAmJiBvcGVyYXRvckhlYWx0aC5ub2RlICYmIEFycmF5LmlzQXJyYXkob3BlcmF0b3JIZWFsdGgubm9kZS5sb2FkQXZlcmFnZSkgPyBvcGVyYXRvckhlYWx0aC5ub2RlLmxvYWRBdmVyYWdlLm1hcCgodikgPT4gTnVtYmVyKHYgfHwgMCkudG9GaXhlZCgyKSkuam9pbignIC8gJykgOiAnbi9hJ308L2Rpdj5cbiAgICAgICAgPGRpdj48c3Ryb25nPk1lbW9yeSBSU1M6PC9zdHJvbmc+IHtmb3JtYXRCeXRlcyhvcGVyYXRvckhlYWx0aCAmJiBvcGVyYXRvckhlYWx0aC5ub2RlICYmIG9wZXJhdG9ySGVhbHRoLm5vZGUubWVtb3J5ID8gb3BlcmF0b3JIZWFsdGgubm9kZS5tZW1vcnkucnNzIDogbnVsbCl9PC9kaXY+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5IZWFwIHVzZWQ6PC9zdHJvbmc+IHtmb3JtYXRCeXRlcyhvcGVyYXRvckhlYWx0aCAmJiBvcGVyYXRvckhlYWx0aC5ub2RlICYmIG9wZXJhdG9ySGVhbHRoLm5vZGUubWVtb3J5ID8gb3BlcmF0b3JIZWFsdGgubm9kZS5tZW1vcnkuaGVhcFVzZWQgOiBudWxsKX08L2Rpdj5cbiAgICAgIDwvU2VnbWVudD5cbiAgICAgIDxTZWdtZW50IHNlY29uZGFyeSBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICA8ZGl2PjxzdHJvbmc+RGlzayBwYXRoOjwvc3Ryb25nPiA8Y29kZT57b3BlcmF0b3JIZWFsdGggJiYgb3BlcmF0b3JIZWFsdGguZGlzayAmJiBvcGVyYXRvckhlYWx0aC5kaXNrLnBhdGggPyBvcGVyYXRvckhlYWx0aC5kaXNrLnBhdGggOiAnbi9hJ308L2NvZGU+PC9kaXY+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5EaXNrIGF2YWlsYWJsZTo8L3N0cm9uZz4ge2Zvcm1hdEJ5dGVzKG9wZXJhdG9ySGVhbHRoICYmIG9wZXJhdG9ySGVhbHRoLmRpc2sgPyBvcGVyYXRvckhlYWx0aC5kaXNrLmF2YWlsYWJsZUJ5dGVzIDogbnVsbCl9PC9kaXY+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5EaXNrIHVzZWQ6PC9zdHJvbmc+IHtmb3JtYXRCeXRlcyhvcGVyYXRvckhlYWx0aCAmJiBvcGVyYXRvckhlYWx0aC5kaXNrID8gb3BlcmF0b3JIZWFsdGguZGlzay51c2VkQnl0ZXMgOiBudWxsKX0gKHtvcGVyYXRvckhlYWx0aCAmJiBvcGVyYXRvckhlYWx0aC5kaXNrICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIob3BlcmF0b3JIZWFsdGguZGlzay51c2VkUGVyY2VudCkpID8gYCR7TnVtYmVyKG9wZXJhdG9ySGVhbHRoLmRpc2sudXNlZFBlcmNlbnQpLnRvRml4ZWQoMSl9JWAgOiAnbi9hJ30pPC9kaXY+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5Fc3RpbWF0ZWQgdGltZSB0byBmdWxsOjwvc3Ryb25nPiB7Zm9ybWF0RHVyYXRpb24ob3BlcmF0b3JIZWFsdGggJiYgb3BlcmF0b3JIZWFsdGguZGlzayA/IG9wZXJhdG9ySGVhbHRoLmRpc2suZXN0aW1hdGVkU2Vjb25kc1VudGlsRnVsbCA6IG51bGwpfXtvcGVyYXRvckhlYWx0aCAmJiBvcGVyYXRvckhlYWx0aC5kaXNrICYmIG9wZXJhdG9ySGVhbHRoLmRpc2suZXN0aW1hdGVkQXQgPyBgIChhcm91bmQgJHtuZXcgRGF0ZShvcGVyYXRvckhlYWx0aC5kaXNrLmVzdGltYXRlZEF0KS50b0xvY2FsZVN0cmluZygpfSlgIDogJyd9PC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICB7b3BlcmF0b3JIZWFsdGggJiYgb3BlcmF0b3JIZWFsdGguZGlzayAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKG9wZXJhdG9ySGVhbHRoLmRpc2sudHJlbmRCeXRlc1BlclNlY29uZCkpICYmIE51bWJlcihvcGVyYXRvckhlYWx0aC5kaXNrLnRyZW5kQnl0ZXNQZXJTZWNvbmQpID4gMFxuICAgICAgICAgICAgPyBgT2JzZXJ2ZWQgZmlsbCByYXRlOiAke2Zvcm1hdEJ5dGVzKG9wZXJhdG9ySGVhbHRoLmRpc2sudHJlbmRCeXRlc1BlclNlY29uZCl9L3NgXG4gICAgICAgICAgICA6ICdGaWxsLXJhdGUgZXN0aW1hdGUgYXBwZWFycyBhZnRlciBtdWx0aXBsZSBoZWFsdGggc2FtcGxlcy4nfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU2VnbWVudD5cbiAgICAgIDxTZWdtZW50IHNlY29uZGFyeSBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxLjI1ZW0nIH19PlxuICAgICAgICA8ZGl2PjxzdHJvbmc+RE5TIHByb2JlOjwvc3Ryb25nPiB7b3BlcmF0b3JIZWFsdGggJiYgb3BlcmF0b3JIZWFsdGgubmV0d29yayAmJiBvcGVyYXRvckhlYWx0aC5uZXR3b3JrLmRuc1Byb2JlICYmIG9wZXJhdG9ySGVhbHRoLm5ldHdvcmsuZG5zUHJvYmUub2sgPyAnb2snIDogJ2ZhaWxlZCd9PC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PjxzdHJvbmc+TG9jYWwgc2VydmljZSByZWFjaGFiaWxpdHk6PC9zdHJvbmc+PC9kaXY+XG4gICAgICAgIHtvcGVyYXRvckhlYWx0aCAmJiBvcGVyYXRvckhlYWx0aC5uZXR3b3JrICYmIEFycmF5LmlzQXJyYXkob3BlcmF0b3JIZWFsdGgubmV0d29yay5sb2NhbFByb2JlcykgJiYgb3BlcmF0b3JIZWFsdGgubmV0d29yay5sb2NhbFByb2Jlcy5sZW5ndGggPyAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjI1ZW0nIH19PlxuICAgICAgICAgICAge29wZXJhdG9ySGVhbHRoLm5ldHdvcmsubG9jYWxQcm9iZXMubWFwKChwcm9iZSkgPT4gKFxuICAgICAgICAgICAgICA8ZGl2IGtleT17YCR7cHJvYmUubmFtZX06JHtwcm9iZS5ob3N0fToke3Byb2JlLnBvcnR9YH0+XG4gICAgICAgICAgICAgICAgPGNvZGU+e3Byb2JlLm5hbWV9PC9jb2RlPiB7cHJvYmUuaG9zdH06e3Byb2JlLnBvcnR9IOKAlCB7cHJvYmUub2sgPyBgcmVhY2hhYmxlICgke3Byb2JlLmxhdGVuY3lNc30gbXMpYCA6IGB1bnJlYWNoYWJsZSAoJHtwcm9iZS5lcnJvciB8fCAnZXJyb3InfSlgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC4yNWVtJywgY29sb3I6ICcjNjY2JyB9fT5ObyBsb2NhbCBwcm9iZXMgY29uZmlndXJlZC48L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+PHN0cm9uZz5OZXR3b3JrLWFjY2Vzc2libGUgYWRkcmVzc2VzOjwvc3Ryb25nPjwvZGl2PlxuICAgICAgICB7b3BlcmF0b3JIZWFsdGggJiYgb3BlcmF0b3JIZWFsdGgubmV0d29yayAmJiBBcnJheS5pc0FycmF5KG9wZXJhdG9ySGVhbHRoLm5ldHdvcmsuaW50ZXJmYWNlcykgJiYgb3BlcmF0b3JIZWFsdGgubmV0d29yay5pbnRlcmZhY2VzLmxlbmd0aCA/IChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMjVlbScgfX0+XG4gICAgICAgICAgICB7b3BlcmF0b3JIZWFsdGgubmV0d29yay5pbnRlcmZhY2VzLm1hcCgoaWZhY2UpID0+IChcbiAgICAgICAgICAgICAgPGRpdiBrZXk9e2lmYWNlLm5hbWV9PlxuICAgICAgICAgICAgICAgIDxjb2RlPntpZmFjZS5uYW1lfTwvY29kZT46IHtBcnJheS5pc0FycmF5KGlmYWNlLmFkZHJlc3NlcykgPyBpZmFjZS5hZGRyZXNzZXMubWFwKChhKSA9PiBhLmFkZHJlc3MpLmpvaW4oJywgJykgOiAnKG5vbmUpJ31cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMjVlbScsIGNvbG9yOiAnIzY2NicgfX0+Tm8gZXh0ZXJuYWwgaW50ZXJmYWNlcyBkZXRlY3RlZC48L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvU2VnbWVudD5cblxuICAgICAgeyFoYXNBZG1pbiA/IChcbiAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19PlxuICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5BZG1pbiBjb250cm9scyBhcmUgaGlkZGVuIHVudGlsIHRva2VuIGlzIHByZXNlbnQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnIH19PlxuICAgICAgICAgICAgU2F2ZSBhIHZhbGlkIGFkbWluIHRva2VuIGFib3ZlIHRvIHJldmVhbCB3b3JrZXIgcXVldWUgY29udHJvbHMsIHdlYWx0aCB2aXNpYmlsaXR5LCBuZXR3b3JrIGJpbmQgc2V0dGluZ3MsIGFuZCBmZWF0dXJlIHZpc2liaWxpdHkgdG9nZ2xlcy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICkgOiAoXG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICA8QmVhY29uQWRtaW5QYW5lbCAvPlxuXG4gICAgICA8SGVhZGVyIGFzPVwiaDNcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxLjVlbScgfX0gaWQ9XCJhZG1pbi13b3JrZXItcXVldWUtaGVhZGluZ1wiPkZhYnJpYyB3b3JrZXIgcXVldWU8L0hlYWRlcj5cbiAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuNzVlbScsIG1heFdpZHRoOiAnNDJyZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICBQcmlvcml0aXplZCBvZmZlciBleGVjdXRpb24gcXVldWUuIFN0cmF0ZWd5IGlzIG9wZXJhdG9yLW1hbmFnZWQgYW5kIHBlcnNpc3RlZCBvbiBodWIgc2V0dGluZ3MuXG4gICAgICA8L3A+XG4gICAgICB7d29ya2VyRXJyb3IgPyAoXG4gICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAge3dvcmtlckVycm9yfVxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcwLjVlbScsIGZsZXhXcmFwOiAnd3JhcCcsIG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgIDxCdXR0b24gYmFzaWMgc2l6ZT1cInNtYWxsXCIgbG9hZGluZz17d29ya2VyTG9hZGluZ30gb25DbGljaz17cmVmcmVzaFdvcmtlclBhbmVsfT5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwicmVmcmVzaFwiIC8+IFJlZnJlc2hcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxCdXR0b24gcHJpbWFyeSBzaXplPVwic21hbGxcIiBkaXNhYmxlZD17IWhhc0FkbWluIHx8IHdvcmtlckFjdGlvbkJ1c3l9IGxvYWRpbmc9e3dvcmtlckFjdGlvbkJ1c3l9IG9uQ2xpY2s9e3J1bldvcmtlck5vd30+XG4gICAgICAgICAgPEljb24gbmFtZT1cInBsYXlcIiAvPiBSdW4gTm93XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8QnV0dG9uIG5lZ2F0aXZlIHNpemU9XCJzbWFsbFwiIGRpc2FibGVkPXshaGFzQWRtaW4gfHwgd29ya2VyQWN0aW9uQnVzeX0gbG9hZGluZz17d29ya2VyQWN0aW9uQnVzeX0gb25DbGljaz17Y2xlYXJXb3JrZXJRdWV1ZX0+XG4gICAgICAgICAgPEljb24gbmFtZT1cInRyYXNoXCIgLz4gQ2xlYXIgUXVldWVcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxGb3JtIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgIDxGb3JtLlNlbGVjdFxuICAgICAgICAgIGxhYmVsPVwiSm9iIHNlbGVjdGlvbiBzdHJhdGVneVwiXG4gICAgICAgICAgb3B0aW9ucz17V09SS19RVUVVRV9TVFJBVEVHWV9PUFRJT05TfVxuICAgICAgICAgIHZhbHVlPXt3b3JrZXJTdHJhdGVneX1cbiAgICAgICAgICBkaXNhYmxlZD17IWhhc0FkbWluIHx8IHdvcmtlclN0cmF0ZWd5U2F2aW5nfVxuICAgICAgICAgIG9uQ2hhbmdlPXsoXywgZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IFN0cmluZyhkICYmIGQudmFsdWUgPyBkLnZhbHVlIDogJycpO1xuICAgICAgICAgICAgaWYgKG5leHQpIHNhdmVXb3JrZXJTdHJhdGVneShuZXh0KTtcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9Gb3JtPlxuICAgICAgPFNlZ21lbnQgc2Vjb25kYXJ5IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5Xb3JrZXIgcmVhZHk6PC9zdHJvbmc+IHt3b3JrZXJTdGF0dXMgJiYgd29ya2VyU3RhdHVzLndvcmtlclJlYWR5ID8gJ3llcycgOiAnbm8nfTwvZGl2PlxuICAgICAgICA8ZGl2PjxzdHJvbmc+U2VsZWN0aW9uIHN0cmF0ZWd5Ojwvc3Ryb25nPiB7d29ya2VyU3RhdHVzICYmIHdvcmtlclN0YXR1cy5zdHJhdGVneSA/IHdvcmtlclN0YXR1cy5zdHJhdGVneSA6IHdvcmtlclN0cmF0ZWd5fTwvZGl2PlxuICAgICAgICA8ZGl2PjxzdHJvbmc+UXVldWUgbGVuZ3RoOjwvc3Ryb25nPiB7d29ya2VyU3RhdHVzICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIod29ya2VyU3RhdHVzLnF1ZXVlTGVuZ3RoKSkgPyBOdW1iZXIod29ya2VyU3RhdHVzLnF1ZXVlTGVuZ3RoKSA6IDB9PC9kaXY+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5RdWV1ZSBidXN5Ojwvc3Ryb25nPiB7d29ya2VyU3RhdHVzICYmIHdvcmtlclN0YXR1cy5xdWV1ZUJ1c3kgPyAneWVzJyA6ICdubyd9PC9kaXY+XG4gICAgICA8L1NlZ21lbnQ+XG4gICAgICB7d29ya2VyUXVldWUubGVuZ3RoID8gKFxuICAgICAgICA8Q2FyZC5Hcm91cCBpdGVtc1BlclJvdz17MX0gc3RhY2thYmxlIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEuMjVlbScgfX0+XG4gICAgICAgICAge3dvcmtlclF1ZXVlLnNsaWNlKDAsIDI1KS5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgIDxDYXJkIGtleT17aXRlbS5pZH0+XG4gICAgICAgICAgICAgIDxDYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPENhcmQuSGVhZGVyIHN0eWxlPXt7IGZvbnRTaXplOiAnMWVtJyB9fT57aXRlbS50eXBlIHx8ICd3b3JrLWl0ZW0nfTwvQ2FyZC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgPENhcmQuTWV0YT57aXRlbS5pZH08L0NhcmQuTWV0YT5cbiAgICAgICAgICAgICAgICA8Q2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+PHN0cm9uZz5WYWx1ZTo8L3N0cm9uZz4ge051bWJlcihpdGVtLnZhbHVlU2F0cyB8fCAwKX0gc2F0czwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdj48c3Ryb25nPkF0dGVtcHRzOjwvc3Ryb25nPiB7TnVtYmVyKGl0ZW0uYXR0ZW1wdHMgfHwgMCl9PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2PjxzdHJvbmc+UGVlcjo8L3N0cm9uZz4ge2l0ZW0uc291cmNlUGVlciB8fCAnKG4vYSknfTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvQ2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgPC9DYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDYXJkLkNvbnRlbnQgZXh0cmE+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBzaXplPVwibWluaVwiIGJhc2ljIG5lZ2F0aXZlIGRpc2FibGVkPXshaGFzQWRtaW4gfHwgd29ya2VyQWN0aW9uQnVzeX0gb25DbGljaz17KCkgPT4gZHJvcFdvcmtlckl0ZW0oaXRlbS5pZCl9PlxuICAgICAgICAgICAgICAgICAgRHJvcCBpdGVtXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvQ2FyZC5Db250ZW50PlxuICAgICAgICAgICAgPC9DYXJkPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L0NhcmQuR3JvdXA+XG4gICAgICApIDogKFxuICAgICAgICA8TWVzc2FnZSBzaXplPVwic21hbGxcIiBpbmZvIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEuMjVlbScgfX0+XG4gICAgICAgICAgUXVldWUgaXMgZW1wdHkuXG4gICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICl9XG5cbiAgICAgIDxIZWFkZXIgYXM9XCJoM1wiIHN0eWxlPXt7IG1hcmdpblRvcDogJzEuNWVtJyB9fSBpZD1cImFkbWluLXdlYWx0aC1oZWFkaW5nXCI+Tm9kZSB3ZWFsdGggdmlzaWJpbGl0eTwvSGVhZGVyPlxuICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC43NWVtJywgbWF4V2lkdGg6ICc0MnJlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgIE9wZXJhdGlvbmFsIHdhbGxldCBiYWxhbmNlIHBsdXMgbGFiZWxlZCBCVEMtZWFybmluZyBmbG93cyAoUGF5am9pbiwgc3RvcmFnZSBjb250cmFjdHMsIGludmVudG9yeSBIVExDKSBvYnNlcnZlZCBieSB0aGlzIGh1Yi5cbiAgICAgIDwvcD5cbiAgICAgIDxTZWdtZW50IHNlY29uZGFyeSBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxLjI1ZW0nIH19PlxuICAgICAgICA8ZGl2PjxzdHJvbmc+TmV0d29yazo8L3N0cm9uZz4ge3dlYWx0aFN1bW1hcnkgJiYgd2VhbHRoU3VtbWFyeS53YWxsZXQgJiYgd2VhbHRoU3VtbWFyeS53YWxsZXQubmV0d29yayA/IHdlYWx0aFN1bW1hcnkud2FsbGV0Lm5ldHdvcmsgOiAnKHVua25vd24pJ308L2Rpdj5cbiAgICAgICAgPGRpdj48c3Ryb25nPldhbGxldCBiYWxhbmNlOjwvc3Ryb25nPiB7d2VhbHRoU3VtbWFyeSAmJiB3ZWFsdGhTdW1tYXJ5LndhbGxldCA/IE51bWJlcih3ZWFsdGhTdW1tYXJ5LndhbGxldC5iYWxhbmNlQnRjIHx8IDApIDogMH0gQlRDPC9kaXY+XG4gICAgICAgIDxkaXY+PHN0cm9uZz5DaGFpbiBoZWlnaHQ6PC9zdHJvbmc+IHt3ZWFsdGhTdW1tYXJ5ICYmIHdlYWx0aFN1bW1hcnkud2FsbGV0ICYmIHdlYWx0aFN1bW1hcnkud2FsbGV0LmhlaWdodCAhPSBudWxsID8gd2VhbHRoU3VtbWFyeS53YWxsZXQuaGVpZ2h0IDogJ24vYSd9PC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PjxzdHJvbmc+TGFiZWxlZCBmbG93IGNvdW50czo8L3N0cm9uZz48L2Rpdj5cbiAgICAgICAgPGRpdj5QYXlqb2luIHByb3Bvc2Fsczoge3dlYWx0aFN1bW1hcnkgJiYgd2VhbHRoU3VtbWFyeS5sYWJlbGVkRmxvd3MgPyBOdW1iZXIod2VhbHRoU3VtbWFyeS5sYWJlbGVkRmxvd3MuY291bnRzLnBheWpvaW4gfHwgMCkgOiAwfTwvZGl2PlxuICAgICAgICA8ZGl2PlBheWpvaW4gZGVwb3NpdHM6IHt3ZWFsdGhTdW1tYXJ5ICYmIHdlYWx0aFN1bW1hcnkubGFiZWxlZEZsb3dzID8gTnVtYmVyKHdlYWx0aFN1bW1hcnkubGFiZWxlZEZsb3dzLmNvdW50cy5wYXlqb2luRGVwb3NpdCB8fCAwKSA6IDB9PC9kaXY+XG4gICAgICAgIDxkaXY+SW52ZW50b3J5IEhUTEMgZnVuZHM6IHt3ZWFsdGhTdW1tYXJ5ICYmIHdlYWx0aFN1bW1hcnkubGFiZWxlZEZsb3dzID8gTnVtYmVyKHdlYWx0aFN1bW1hcnkubGFiZWxlZEZsb3dzLmNvdW50cy5pbnZlbnRvcnlIdGxjRnVuZCB8fCAwKSA6IDB9PC9kaXY+XG4gICAgICAgIDxkaXY+SW52ZW50b3J5IEhUTEMgY2xhaW1zOiB7d2VhbHRoU3VtbWFyeSAmJiB3ZWFsdGhTdW1tYXJ5LmxhYmVsZWRGbG93cyA/IE51bWJlcih3ZWFsdGhTdW1tYXJ5LmxhYmVsZWRGbG93cy5jb3VudHMuaW52ZW50b3J5SHRsY0NsYWltIHx8IDApIDogMH08L2Rpdj5cbiAgICAgICAgPGRpdj5TdG9yYWdlIGNvbnRyYWN0czoge3dlYWx0aFN1bW1hcnkgJiYgd2VhbHRoU3VtbWFyeS5sYWJlbGVkRmxvd3MgPyBOdW1iZXIod2VhbHRoU3VtbWFyeS5sYWJlbGVkRmxvd3MuY291bnRzLnN0b3JhZ2VDb250cmFjdCB8fCAwKSA6IDB9PC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PjxzdHJvbmc+TGFiZWxlZCBmbG93IHRvdGFscyAoc2F0cyk6PC9zdHJvbmc+PC9kaXY+XG4gICAgICAgIDxkaXY+UGF5am9pbiBwcm9wb3NhbHM6IHt3ZWFsdGhTdW1tYXJ5ICYmIHdlYWx0aFN1bW1hcnkubGFiZWxlZEZsb3dzID8gTnVtYmVyKHdlYWx0aFN1bW1hcnkubGFiZWxlZEZsb3dzLnRvdGFscy5wYXlqb2luIHx8IDApIDogMH08L2Rpdj5cbiAgICAgICAgPGRpdj5QYXlqb2luIGRlcG9zaXRzOiB7d2VhbHRoU3VtbWFyeSAmJiB3ZWFsdGhTdW1tYXJ5LmxhYmVsZWRGbG93cyA/IE51bWJlcih3ZWFsdGhTdW1tYXJ5LmxhYmVsZWRGbG93cy50b3RhbHMucGF5am9pbkRlcG9zaXQgfHwgMCkgOiAwfTwvZGl2PlxuICAgICAgICA8ZGl2PkludmVudG9yeSBIVExDIGZ1bmRzOiB7d2VhbHRoU3VtbWFyeSAmJiB3ZWFsdGhTdW1tYXJ5LmxhYmVsZWRGbG93cyA/IE51bWJlcih3ZWFsdGhTdW1tYXJ5LmxhYmVsZWRGbG93cy50b3RhbHMuaW52ZW50b3J5SHRsY0Z1bmQgfHwgMCkgOiAwfTwvZGl2PlxuICAgICAgICA8ZGl2PkludmVudG9yeSBIVExDIGNsYWltczoge3dlYWx0aFN1bW1hcnkgJiYgd2VhbHRoU3VtbWFyeS5sYWJlbGVkRmxvd3MgPyBOdW1iZXIod2VhbHRoU3VtbWFyeS5sYWJlbGVkRmxvd3MudG90YWxzLmludmVudG9yeUh0bGNDbGFpbSB8fCAwKSA6IDB9PC9kaXY+XG4gICAgICAgIDxkaXY+U3RvcmFnZSBjb250cmFjdHM6IHt3ZWFsdGhTdW1tYXJ5ICYmIHdlYWx0aFN1bW1hcnkubGFiZWxlZEZsb3dzID8gTnVtYmVyKHdlYWx0aFN1bW1hcnkubGFiZWxlZEZsb3dzLnRvdGFscy5zdG9yYWdlQ29udHJhY3QgfHwgMCkgOiAwfTwvZGl2PlxuICAgICAgPC9TZWdtZW50PlxuXG4gICAgICA8SGVhZGVyIGFzPVwiaDNcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxLjVlbScgfX0gaWQ9XCJhZG1pbi1uZXR3b3JrLWh0dHAtaGVhZGluZ1wiPk5ldHdvcmsg4oCUIEhUVFAgYmluZCAoaHViKTwvSGVhZGVyPlxuICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC43NWVtJywgbWF4V2lkdGg6ICc0MnJlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgIDxzdHJvbmc+U2hhcmVkIG1vZGU8L3N0cm9uZz4gcGVyc2lzdHMgaW4gPGNvZGU+c3RvcmVzL2h1Yi9zZXR0aW5ncy5qc29uPC9jb2RlPiBhcyA8Y29kZT5IVFRQX1NIQVJFRF9NT0RFPC9jb2RlPi5cbiAgICAgICAgV2hlbiBlbmFibGVkLCB0aGUgaHViIGxpc3RlbnMgb24gPGNvZGU+MC4wLjAuMDwvY29kZT4gc28gb3RoZXIgbWFjaGluZXMgb24gdGhlIExBTiBjYW4gb3BlbiB0aGlzIFVJIChzdWJqZWN0IHRvIGZpcmV3YWxsKS5cbiAgICAgICAgV2hlbiBkaXNhYmxlZCwgSFRUUCBpcyBib3VuZCB0byA8Y29kZT4xMjcuMC4wLjE8L2NvZGU+IG9ubHkuIENoYW5naW5nIHRoaXMgc2V0dGluZyA8c3Ryb25nPnJlYmluZHMgdGhlIEhUVFAgc2VydmVyIGltbWVkaWF0ZWx5PC9zdHJvbmc+IChvcGVuIFdlYlNvY2tldHMgZHJvcCBhbmQgcmVjb25uZWN0KS5cbiAgICAgICAgSWYgPGNvZGU+RkFCUklDX0hVQl9JTlRFUkZBQ0U8L2NvZGU+IG9yIDxjb2RlPklOVEVSRkFDRTwvY29kZT4gaXMgc2V0IGluIHRoZSBlbnZpcm9ubWVudCwgdGhlIGJpbmQgYWRkcmVzcyBmb2xsb3dzIHRoYXQgaW5zdGVhZDsgc2F2ZSBzdGlsbCBwZXJzaXN0cyB0aGUgZmxhZyBmb3Igd2hlbiBlbnYgaXMgdW5zZXQuXG4gICAgICA8L3A+XG4gICAgICB7aHR0cFNoYXJlZE9rICYmIChcbiAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nIH19IG9uRGlzbWlzcz17KCkgPT4gc2V0SHR0cFNoYXJlZE9rKG51bGwpfT5cbiAgICAgICAgICB7aHR0cFNoYXJlZE9rfVxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApfVxuICAgICAge2h0dHBTaGFyZWRFcnIgJiYgKFxuICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZSBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nIH19PlxuICAgICAgICAgIHtodHRwU2hhcmVkRXJyfVxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApfVxuICAgICAgPEZvcm0+XG4gICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgdG9nZ2xlXG4gICAgICAgICAgICBsYWJlbD1cIkhUVFAgc2hhcmVkIG1vZGUgKGJpbmQgYWxsIGludGVyZmFjZXMpXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJIVFRQIHNoYXJlZCBtb2RlIChiaW5kIGFsbCBpbnRlcmZhY2VzKVwiXG4gICAgICAgICAgICBjaGVja2VkPXtodHRwU2hhcmVkfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2h0dHBTaGFyZWRMb2FkaW5nIHx8IGh0dHBTaGFyZWRTYXZpbmcgfHwgIWhhc0FkbWlufVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhfLCBkKSA9PiBwZXJzaXN0SHR0cFNoYXJlZCghIWQuY2hlY2tlZCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Ub3A6ICcwLjM1ZW0nLCBmb250U2l6ZTogJzAuODVlbScsIGNvbG9yOiAnIzg4OCcgfX0+XG4gICAgICAgICAgICB7aHR0cFNoYXJlZExvYWRpbmcgPyAnTG9hZGluZyBjdXJyZW50IHNldHRpbmfigKYnIDogbnVsbH1cbiAgICAgICAgICAgIHshaGFzQWRtaW4gPyAnIFNhdmUgdGhlIGFkbWluIHRva2VuIGluIHRoaXMgYnJvd3NlciB0byBjaGFuZ2UgdGhpcyBzZXR0aW5nLicgOiBudWxsfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgPC9Gb3JtPlxuXG4gICAgICA8RGl2aWRlciBzZWN0aW9uIC8+XG5cbiAgICAgIDxIZWFkZXIgYXM9XCJoM1wiIGlkPVwiYWRtaW4tdWktdmlzaWJpbGl0eS1oZWFkaW5nXCI+RmVhdHVyZSB2aXNpYmlsaXR5PC9IZWFkZXI+XG4gICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nLCBtYXhXaWR0aDogJzQycmVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgRGVmYXVsdHMgZmF2b3IgdGhlIDxzdHJvbmc+RG9jdW1lbnQgbWFya2V0PC9zdHJvbmc+IChEb2N1bWVudHMsIFBlZXJzLCBCaXRjb2luIGludm9pY2VzL2V4cGxvcmVyKS5cbiAgICAgICAgV2hlbiBhIHRvZ2dsZSBpcyBvZmYsIHRoYXQgYXJlYSBpcyBoaWRkZW4gZm9yIHRoaXMgYnJvd3NlciBwcm9maWxlIHVudGlsIHlvdSB0dXJuIGl0IGJhY2sgb24uXG4gICAgICAgIEhvbWUsIERvY3VtZW50cywgQ29udHJhY3RzLCBTZXR0aW5ncywgU2VjdXJpdHksIGFuZCB0aGlzIEFkbWluIHBhZ2Ugc3RheSBhdmFpbGFibGUuXG4gICAgICAgIEVhY2ggYnJvd3NlciBtZXJnZXMgbG9jYWwgY2FjaGUgd2l0aCBodWItc3RvcmVkIGRlZmF1bHRzIHdoZW4gbG9hZGVkOyB3aXRoIGFkbWluIHRva2VuLCBzYXZlcyBwZXJzaXN0IHRvIGh1YiBkaXNrLlxuICAgICAgPC9wPlxuICAgICAgPEJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgcHJpbWFyeVxuICAgICAgICBiYXNpY1xuICAgICAgICBpZD1cImZhYnJpYy1odWItdWktZmxhZy1kb2N1bWVudC1tYXJrZXQtcHJlc2V0XCJcbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7IGFwcGx5RG9jdW1lbnRNYXJrZXRQcmVzZXQoKTsgfX1cbiAgICAgID5cbiAgICAgICAgPEljb24gbmFtZT1cImZpbGUgYWx0ZXJuYXRlIG91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICBEb2N1bWVudCBtYXJrZXQgcHJlc2V0XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIHt1aUZsYWdzUGVyc2lzdE1zZyA/IChcbiAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nIH19IG9uRGlzbWlzcz17KCkgPT4gc2V0VWlGbGFnc1BlcnNpc3RNc2cobnVsbCl9PlxuICAgICAgICAgIHt1aUZsYWdzUGVyc2lzdE1zZ31cbiAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8Rm9ybT5cbiAgICAgICAge0ZMQUdfS0VZUy5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IFVJX0ZMQUdfTEFCRUxTW2tleV0gfHwga2V5O1xuICAgICAgICAgIGNvbnN0IGZsYWdJbnB1dElkID0gYGZhYnJpYy1odWItdWktZmxhZy0ke2tleX1gO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Rm9ybS5GaWVsZCBrZXk9e2tleX0+XG4gICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgIHRvZ2dsZVxuICAgICAgICAgICAgICAgIGlkPXtmbGFnSW5wdXRJZH1cbiAgICAgICAgICAgICAgICBsYWJlbD17bGFiZWxUZXh0fVxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9eyEhdWlGbGFnc1trZXldfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2Ake2xhYmVsVGV4dH0g4oCUIGh1YiBVSSBmZWF0dXJlIGZsYWcgJHtrZXl9YH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KF8sIGQpID0+IHtcbiAgICAgICAgICAgICAgICAgIHN5bmNVaUZsYWcoa2V5LCAhIWQuY2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvRm9ybT5cblxuICAgICAgICAgIHsodWlGbGFncy5zaWRlY2hhaW4gfHwgYW55Qml0Y29pblN1YkZlYXR1cmVFbmFibGVkKHVpRmxhZ3MpKSA/IChcbiAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiIHN0eWxlPXt7IG1hcmdpblRvcDogJzEuNWVtJyB9fSBpZD1cImFkbWluLXJlbGF0ZWQtcGFnZXMtaGVhZGluZ1wiPlJlbGF0ZWQgcGFnZXM8L0hlYWRlcj5cbiAgICAgICAgICA8Q2FyZC5Hcm91cCBpdGVtc1BlclJvdz17MX0gc3RhY2thYmxlPlxuICAgICAgICAgICAge3VpRmxhZ3Muc2lkZWNoYWluID8gKFxuICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgPENhcmQgYXM9e0xpbmt9IHRvPVwiL3NldHRpbmdzL2FkbWluL2JlYWNvbi1mZWRlcmF0aW9uXCIgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICA8Q2FyZC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8Q2FyZC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInVzZXJzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gQmVhY29uIEZlZGVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgPC9DYXJkLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPENhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgQ29udHJhY3Q6IGVwb2NoIGNhZGVuY2UsIEZhYnJpYyBtZXNzYWdlcywgY29vcGVyYXRpdmUgc2lnbmluZywgYW5kIEwxIFRhcHJvb3QgdmF1bHQgKDE0NC1ibG9jayBkZXBvc2l0IGxvY2sgYnkgZGVmYXVsdCkuXG4gICAgICAgICAgICAgICAgICAgIDwvQ2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvQ2FyZC5Db250ZW50PlxuICAgICAgICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgICAgICAgICA8Q2FyZCBhcz17TGlua30gdG89XCIvZmVkZXJhdGlvbnNcIiBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxDYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxDYXJkLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2xpZGVycyBob3Jpem9udGFsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gRmVkZXJhdGlvbnMgKHZhbGlkYXRvcnMpXG4gICAgICAgICAgICAgICAgICAgIDwvQ2FyZC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxDYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIEVkaXQgZGlzdHJpYnV0ZWQgZmVkZXJhdGlvbiBwdWJrZXlzIHBlcnNpc3RlZCBvbiB0aGlzIGh1YiAod2hlbiBub3Qgb3ZlcnJpZGRlbiBieSBlbnZpcm9ubWVudCkuXG4gICAgICAgICAgICAgICAgICAgICAgQ3Jvc3MtY2hlY2sgbGl2ZSBwb2xpY3kgd2l0aHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC9tYW5pZmVzdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5HRVQgbWFuaWZlc3Q8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgeycgLyAnfVxuICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIvc2VydmljZXMvZGlzdHJpYnV0ZWQvZXBvY2hcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+R0VUIGVwb2NoPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIHsnICd9KHNlZSA8TGluayB0bz1cIi9zZXR0aW5ncy9hZG1pbi9iZWFjb24tZmVkZXJhdGlvblwiPkJlYWNvbiBGZWRlcmF0aW9uPC9MaW5rPiBmb3IgdmVyaWZpY2F0aW9uKS5cbiAgICAgICAgICAgICAgICAgICAgPC9DYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9DYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9DYXJkPlxuICAgICAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8Q2FyZCBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pblwiIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19PlxuICAgICAgICAgICAgICA8Q2FyZC5Db250ZW50PlxuICAgICAgICAgICAgICAgIDxDYXJkLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJiaXRjb2luXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gQml0Y29pbiBkYXNoYm9hcmRcbiAgICAgICAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxDYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgTm9kZSBzdGF0dXMsIHJlZ3Rlc3QgdG9vbHMsIGFuZCBjb3JlIHdhbGxldCB2aWV3LiBTdWItcGFnZXMgKHBheW1lbnRzLCBpbnZvaWNlcywgcmVzb3VyY2VzLCBleHBsb3JlciwgTGlnaHRuaW5nKSBmb2xsb3cgdGhlIEJpdGNvaW4gdG9nZ2xlcyBhYm92ZS5cbiAgICAgICAgICAgICAgICA8L0NhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIDwvQ2FyZC5Db250ZW50PlxuICAgICAgICAgICAgPC9DYXJkPlxuICAgICAgICAgIDwvQ2FyZC5Hcm91cD5cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICApIDogKFxuICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Ub3A6ICcxLjVlbScsIG1heFdpZHRoOiAnNDJyZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgIEVuYWJsZSA8c3Ryb25nPlNpZGVjaGFpbjwvc3Ryb25nPiBhbmQvb3IgYW55IDxzdHJvbmc+Qml0Y29pbiDigKY8L3N0cm9uZz4gdG9nZ2xlIHRvIHNob3cgb3BlcmF0b3Igc2hvcnRjdXQgY2FyZHMgKGZlZGVyYXRpb24sIEJpdGNvaW4gZGFzaGJvYXJkIGxpbmspLlxuICAgICAgICA8L3A+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxEaXZpZGVyIHNlY3Rpb24gLz5cblxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiIGlkPVwiYWRtaW4tc2VsZi1kZXN0cnVjdC1oZWFkaW5nXCIgc3R5bGU9e3sgY29sb3I6ICcjOWYzYTM4JywgbWFyZ2luVG9wOiAnMS41ZW0nIH19PlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImJvbWJcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPiBEYW5nZXIgem9uZVxuICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+U2VsZi1kZXN0cnVjdCDigJQgd2lwZSBsb2NhbCBIdWIgZGF0YTwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICAgICAgRGVsZXRlcyB0aGlzIEh1YiZhcG9zO3Mgd3JpdGFibGUgPGNvZGU+c3RvcmVzLzwvY29kZT4gYW5kIDxjb2RlPmxvZ3MvPC9jb2RlPiB1bmRlciBpdHMgZGF0YSBkaXJlY3RvcnkgKHNldHVwLCBkb2N1bWVudHMsIEZhYnJpYyBzdGF0ZSwgbG9jYWwgQml0Y29pbi9MaWdodG5pbmcvUGF5am9pbiBmaWxlcywgYW5kIHJlbGF0ZWQgaW5kZXhlcykuXG4gICAgICAgICAgICAgIFRoZSBzZXJ2ZXIgc3RvcHMgYW5kIGV4aXRzIHNvIGZpbGVzIGNhbiBiZSByZW1vdmVkOyA8c3Ryb25nPnJlc3RhcnQgdGhlIEh1YiBtYW51YWxseTwvc3Ryb25nPiB0byBydW4gZmlyc3QtdGltZSBzZXR1cCBhZ2Fpbi4gVGhpcyBjYW5ub3QgYmUgdW5kb25lLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICB7c2VsZkRlc3RydWN0T2sgPyAoXG4gICAgICAgICAgICA8TWVzc2FnZSBwb3NpdGl2ZSBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nIH19IG9uRGlzbWlzcz17KCkgPT4gc2V0U2VsZkRlc3RydWN0T2sobnVsbCl9PlxuICAgICAgICAgICAgICB7c2VsZkRlc3RydWN0T2t9XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgbmVnYXRpdmVcbiAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICBpZD1cImZhYnJpYy1odWItYWRtaW4tc2VsZi1kZXN0cnVjdC1vcGVuXCJcbiAgICAgICAgICAgIGRpc2FibGVkPXshaGFzQWRtaW4gfHwgc2VsZkRlc3RydWN0QnVzeX1cbiAgICAgICAgICAgIGxvYWRpbmc9e3NlbGZEZXN0cnVjdEJ1c3l9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIHNldFNlbGZEZXN0cnVjdEVycihudWxsKTtcbiAgICAgICAgICAgICAgc2V0U2VsZkRlc3RydWN0UGhyYXNlKCcnKTtcbiAgICAgICAgICAgICAgc2V0U2VsZkRlc3RydWN0T3Blbih0cnVlKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImJvbWJcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPiBTZWxmLWRlc3RydWN04oCmXG4gICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgICA8TW9kYWxcbiAgICAgICAgICAgIGNsb3NlT25EaW1tZXJDbGljaz17IXNlbGZEZXN0cnVjdEJ1c3l9XG4gICAgICAgICAgICBvcGVuPXtzZWxmRGVzdHJ1Y3RPcGVufVxuICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gIXNlbGZEZXN0cnVjdEJ1c3kgJiYgc2V0U2VsZkRlc3RydWN0T3BlbihmYWxzZSl9XG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxNb2RhbC5IZWFkZXIgc3R5bGU9e3sgY29sb3I6ICcjOWYzYTM4JyB9fT5Db25maXJtIHRvdGFsIGRhdGEgd2lwZTwvTW9kYWwuSGVhZGVyPlxuICAgICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICAgICAgVHlwZSB0aGUgcGhyYXNlIGJlbG93IGV4YWN0bHkgdG8gY29uZmlybS4gVGhlIEh1YiBwcm9jZXNzIHdpbGwgc2h1dCBkb3duIGFuZCBkZWxldGUgbG9jYWwgZGF0YS5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcxcmVtJywgdXNlclNlbGVjdDogJ2FsbCcgfX0+e0hVQl9TRUxGX0RFU1RSVUNUX0NPTkZJUk1fUEhSQVNFfTwvY29kZT5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICB7c2VsZkRlc3RydWN0RXJyID8gKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICB7c2VsZkRlc3RydWN0RXJyfVxuICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgIGZsdWlkXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDb25maXJtYXRpb24gcGhyYXNlXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2VsZi1kZXN0cnVjdCBjb25maXJtYXRpb24gcGhyYXNlXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17c2VsZkRlc3RydWN0UGhyYXNlfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxmRGVzdHJ1Y3RCdXN5fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoXywgZCkgPT4gc2V0U2VsZkRlc3RydWN0UGhyYXNlKGQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgICAgICAgICAgPE1vZGFsLkFjdGlvbnM+XG4gICAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4gIXNlbGZEZXN0cnVjdEJ1c3kgJiYgc2V0U2VsZkRlc3RydWN0T3BlbihmYWxzZSl9IGRpc2FibGVkPXtzZWxmRGVzdHJ1Y3RCdXN5fT5cbiAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBuZWdhdGl2ZVxuICAgICAgICAgICAgICAgIGlkPVwiZmFicmljLWh1Yi1hZG1pbi1zZWxmLWRlc3RydWN0LWNvbmZpcm1cIlxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgIHNlbGZEZXN0cnVjdEJ1c3kgfHxcbiAgICAgICAgICAgICAgICAgIHNlbGZEZXN0cnVjdFBocmFzZS50cmltKCkgIT09IEhVQl9TRUxGX0RFU1RSVUNUX0NPTkZJUk1fUEhSQVNFXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvYWRpbmc9e3NlbGZEZXN0cnVjdEJ1c3l9XG4gICAgICAgICAgICAgICAgb25DbGljaz17cnVuU2VsZkRlc3RydWN0fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgV2lwZSBhbGwgbG9jYWwgZGF0YSBhbmQgZXhpdFxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvTW9kYWwuQWN0aW9ucz5cbiAgICAgICAgICA8L01vZGFsPlxuICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgKX1cbiAgICA8L1NlZ21lbnQ+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQWRtaW5Ib21lO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIm4iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJuZXh0IiwicHVzaCIsImlzQXJyYXkiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJ1c2VMb2NhdGlvbiIsInVzZU5hdmlnYXRlIiwiX3JlcXVpcmUyIiwiQnV0dG9uIiwiSGVhZGVyIiwiSWNvbiIsIlNlZ21lbnQiLCJDYXJkIiwiTWVzc2FnZSIsIkNoZWNrYm94IiwiRm9ybSIsIkRpdmlkZXIiLCJNb2RhbCIsIklucHV0IiwiX3JlcXVpcmUzIiwicmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciIsImNsZWFySHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIiwiX3JlcXVpcmU0IiwiZmV0Y2hCaXRjb2luU3RhdHVzIiwibG9hZFVwc3RyZWFtU2V0dGluZ3MiLCJfcmVxdWlyZTUiLCJsb2FkSHViVWlGZWF0dXJlRmxhZ3MiLCJzZXRIdWJVaUZlYXR1cmVGbGFnIiwic2V0QWxsSHViVWlGZWF0dXJlRmxhZ3MiLCJGTEFHX0tFWVMiLCJhbnlCaXRjb2luU3ViRmVhdHVyZUVuYWJsZWQiLCJmZXRjaFBlcnNpc3RlZEh1YlVpRmVhdHVyZUZsYWdzIiwicGVyc2lzdEh1YlVpRmVhdHVyZUZsYWdzIiwiZG9jdW1lbnRNYXJrZXRVaUZsYWdzIiwiSHViUmVndGVzdEFkbWluVG9rZW5QYW5lbCIsIkJlYWNvbkFkbWluUGFuZWwiLCJVSV9GTEFHX0xBQkVMUyIsInByb21vIiwiYWR2YW5jZWRNb2RlIiwicGVlcnMiLCJwZWVyc0FkbWluIiwiYWN0aXZpdGllcyIsImZlYXR1cmVzIiwic2lkZWNoYWluIiwiYml0Y29pblBheW1lbnRzIiwiYml0Y29pbkludm9pY2VzIiwiYml0Y29pblJlc291cmNlcyIsImJpdGNvaW5FeHBsb3JlciIsImJpdGNvaW5MaWdodG5pbmciLCJiaXRjb2luQ3Jvd2RmdW5kIiwiV09SS19RVUVVRV9TVFJBVEVHWV9PUFRJT05TIiwia2V5IiwidGV4dCIsIkhVQl9TRUxGX0RFU1RSVUNUX0NPTkZJUk1fUEhSQVNFIiwiQWRtaW5Ib21lIiwicHJvcHMiLCJsb2NhdGlvbiIsIm5hdmlnYXRlIiwiYWRtaW5Ub2tlblByb3AiLCJhZG1pblRva2VuIiwiaGFzQWRtaW4iLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJyb3V0ZUJsb2NrZWRIaW50Iiwic2V0Um91dGVCbG9ja2VkSGludCIsIl9SZWFjdCR1c2VTdGF0ZTMiLCJfUmVhY3QkdXNlU3RhdGU0IiwibmV0d29yayIsInNldE5ldHdvcmsiLCJfUmVhY3QkdXNlU3RhdGU1IiwiX1JlYWN0JHVzZVN0YXRlNiIsImh0dHBTaGFyZWQiLCJzZXRIdHRwU2hhcmVkIiwiX1JlYWN0JHVzZVN0YXRlNyIsIl9SZWFjdCR1c2VTdGF0ZTgiLCJodHRwU2hhcmVkTG9hZGluZyIsInNldEh0dHBTaGFyZWRMb2FkaW5nIiwiX1JlYWN0JHVzZVN0YXRlOSIsIl9SZWFjdCR1c2VTdGF0ZTAiLCJodHRwU2hhcmVkRXJyIiwic2V0SHR0cFNoYXJlZEVyciIsIl9SZWFjdCR1c2VTdGF0ZTEiLCJfUmVhY3QkdXNlU3RhdGUxMCIsImh0dHBTaGFyZWRPayIsInNldEh0dHBTaGFyZWRPayIsIl9SZWFjdCR1c2VTdGF0ZTExIiwiX1JlYWN0JHVzZVN0YXRlMTIiLCJodHRwU2hhcmVkU2F2aW5nIiwic2V0SHR0cFNoYXJlZFNhdmluZyIsIl9SZWFjdCR1c2VTdGF0ZTEzIiwiX1JlYWN0JHVzZVN0YXRlMTQiLCJ1aUZsYWdzIiwic2V0VWlGbGFncyIsIl9SZWFjdCR1c2VTdGF0ZTE1IiwiX1JlYWN0JHVzZVN0YXRlMTYiLCJ1aUZsYWdzUGVyc2lzdE1zZyIsInNldFVpRmxhZ3NQZXJzaXN0TXNnIiwiX1JlYWN0JHVzZVN0YXRlMTciLCJfUmVhY3QkdXNlU3RhdGUxOCIsIndvcmtlclN0YXR1cyIsInNldFdvcmtlclN0YXR1cyIsIl9SZWFjdCR1c2VTdGF0ZTE5IiwiX1JlYWN0JHVzZVN0YXRlMjAiLCJ3b3JrZXJRdWV1ZSIsInNldFdvcmtlclF1ZXVlIiwiX1JlYWN0JHVzZVN0YXRlMjEiLCJfUmVhY3QkdXNlU3RhdGUyMiIsIndvcmtlclN0cmF0ZWd5Iiwic2V0V29ya2VyU3RyYXRlZ3kiLCJfUmVhY3QkdXNlU3RhdGUyMyIsIl9SZWFjdCR1c2VTdGF0ZTI0Iiwid29ya2VyU3RyYXRlZ3lTYXZpbmciLCJzZXRXb3JrZXJTdHJhdGVneVNhdmluZyIsIl9SZWFjdCR1c2VTdGF0ZTI1IiwiX1JlYWN0JHVzZVN0YXRlMjYiLCJ3ZWFsdGhTdW1tYXJ5Iiwic2V0V2VhbHRoU3VtbWFyeSIsIl9SZWFjdCR1c2VTdGF0ZTI3IiwiX1JlYWN0JHVzZVN0YXRlMjgiLCJvcGVyYXRvckhlYWx0aCIsInNldE9wZXJhdG9ySGVhbHRoIiwiX1JlYWN0JHVzZVN0YXRlMjkiLCJfUmVhY3QkdXNlU3RhdGUzMCIsIm9wZXJhdG9ySGVhbHRoTG9hZGluZyIsInNldE9wZXJhdG9ySGVhbHRoTG9hZGluZyIsIl9SZWFjdCR1c2VTdGF0ZTMxIiwiX1JlYWN0JHVzZVN0YXRlMzIiLCJvcGVyYXRvckhlYWx0aEVycm9yIiwic2V0T3BlcmF0b3JIZWFsdGhFcnJvciIsIl9SZWFjdCR1c2VTdGF0ZTMzIiwiX1JlYWN0JHVzZVN0YXRlMzQiLCJ3b3JrZXJMb2FkaW5nIiwic2V0V29ya2VyTG9hZGluZyIsIl9SZWFjdCR1c2VTdGF0ZTM1IiwiX1JlYWN0JHVzZVN0YXRlMzYiLCJ3b3JrZXJBY3Rpb25CdXN5Iiwic2V0V29ya2VyQWN0aW9uQnVzeSIsIl9SZWFjdCR1c2VTdGF0ZTM3IiwiX1JlYWN0JHVzZVN0YXRlMzgiLCJ3b3JrZXJFcnJvciIsInNldFdvcmtlckVycm9yIiwiX1JlYWN0JHVzZVN0YXRlMzkiLCJfUmVhY3QkdXNlU3RhdGU0MCIsInNlbGZEZXN0cnVjdE9wZW4iLCJzZXRTZWxmRGVzdHJ1Y3RPcGVuIiwiX1JlYWN0JHVzZVN0YXRlNDEiLCJfUmVhY3QkdXNlU3RhdGU0MiIsInNlbGZEZXN0cnVjdFBocmFzZSIsInNldFNlbGZEZXN0cnVjdFBocmFzZSIsIl9SZWFjdCR1c2VTdGF0ZTQzIiwiX1JlYWN0JHVzZVN0YXRlNDQiLCJzZWxmRGVzdHJ1Y3RCdXN5Iiwic2V0U2VsZkRlc3RydWN0QnVzeSIsIl9SZWFjdCR1c2VTdGF0ZTQ1IiwiX1JlYWN0JHVzZVN0YXRlNDYiLCJzZWxmRGVzdHJ1Y3RFcnIiLCJzZXRTZWxmRGVzdHJ1Y3RFcnIiLCJfUmVhY3QkdXNlU3RhdGU0NyIsIl9SZWFjdCR1c2VTdGF0ZTQ4Iiwic2VsZkRlc3RydWN0T2siLCJzZXRTZWxmRGVzdHJ1Y3RPayIsInJwY0NhbGwiLCJ1c2VDYWxsYmFjayIsIl9yZWYiLCJfY2FsbGVlIiwibWV0aG9kIiwicGFyYW1zIiwicmVzIiwianNvbiIsIl9hcmdzIiwiX2NvbnRleHQiLCJ1bmRlZmluZWQiLCJmZXRjaCIsImhlYWRlcnMiLCJBY2NlcHQiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImpzb25ycGMiLCJpZCIsIkRhdGUiLCJub3ciLCJlcnJvciIsIkVycm9yIiwibWVzc2FnZSIsImhhc093blByb3BlcnR5IiwicmVzdWx0IiwiX3giLCJyZWZyZXNoV29ya2VyUGFuZWwiLCJfY2FsbGVlMiIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJzdGF0dXNSZXMiLCJxdWV1ZVJlcyIsIndlYWx0aFJlcyIsIl90IiwiX2NvbnRleHQyIiwiYWxsIiwibGltaXQiLCJvZmZzZXQiLCJpdGVtcyIsInN0cmF0ZWd5IiwiU3RyaW5nIiwicmVmcmVzaE9wZXJhdG9ySGVhbHRoIiwiX2NhbGxlZTMiLCJfdDIiLCJfY29udGV4dDMiLCJvayIsImNvbmNhdCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJmb3JtYXRCeXRlcyIsIk51bWJlciIsImlzRmluaXRlIiwidW5pdHMiLCJpZHgiLCJjdXIiLCJ0b0ZpeGVkIiwicnVuU2VsZkRlc3RydWN0IiwiX2NhbGxlZTQiLCJ0b2tlbiIsInJhdyIsIl90MyIsIl9jb250ZXh0NCIsIkF1dGhvcml6YXRpb24iLCJjb25maXJtUGhyYXNlIiwidHJpbSIsInBhcnNlIiwiXyIsInNldFRpbWVvdXQiLCJmb3JtYXREdXJhdGlvbiIsInNlY0luIiwic2VjIiwiTWF0aCIsImZsb29yIiwiaCIsInVzZUxheW91dEVmZmVjdCIsInMiLCJzdGF0ZSIsImZlYXR1cmVGbGFnQmxvY2tlZCIsInBhdGgiLCJibG9ja2VkUGF0aCIsImZsYWciLCJwYXRobmFtZSIsInNlYXJjaCIsImhhc2giLCJyZXBsYWNlIiwicXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJxRmxhZyIsImdldCIsInFQYXRoIiwidXNlRWZmZWN0IiwiY2FuY2VsbGVkIiwidG9Mb3dlckNhc2UiLCJtb3VudGVkIiwidGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJqIiwicGVyc2lzdEh0dHBTaGFyZWQiLCJodHRwUmViaW5kIiwiaHR0cFJlYmluZFJlYXNvbiIsInN5bmNVaUZsYWciLCJfcmVmNSIsIl9jYWxsZWU1IiwiY2hlY2tlZCIsIl9jb250ZXh0NSIsIl94MiIsIl94MyIsImFwcGx5RG9jdW1lbnRNYXJrZXRQcmVzZXQiLCJfcmVmNiIsIl9jYWxsZWU2IiwiX2NvbnRleHQ2IiwicnVuV29ya2VyTm93IiwiX3JlZjciLCJfY2FsbGVlNyIsIl90NCIsIl9jb250ZXh0NyIsInNhdmVXb3JrZXJTdHJhdGVneSIsIl9yZWY4IiwiX2NhbGxlZTgiLCJvdXQiLCJfdDUiLCJfY29udGV4dDgiLCJfeDQiLCJjbGVhcldvcmtlclF1ZXVlIiwiX3JlZjkiLCJfY2FsbGVlOSIsIl90NiIsIl9jb250ZXh0OSIsImRyb3BXb3JrZXJJdGVtIiwiX3JlZjAiLCJfY2FsbGVlMCIsIl90NyIsIl9jb250ZXh0MCIsIl94NSIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsIm1heFdpZHRoIiwibWFyZ2luIiwibWFyZ2luQm90dG9tIiwiZGlzcGxheSIsImZsZXhXcmFwIiwiZ2FwIiwiYXMiLCJ0byIsImJhc2ljIiwic2l6ZSIsIndhcm5pbmciLCJvbkRpc21pc3MiLCJkaXNtaXNzaWJsZSIsIkZyYWdtZW50Iiwid29yZEJyZWFrIiwiQ29udGVudCIsImNvbG9yIiwibGluZUhlaWdodCIsImluZm8iLCJwb3NpdGl2ZSIsIm1hcmdpblRvcCIsIm5lZ2F0aXZlIiwibG9hZGluZyIsIm9uQ2xpY2siLCJmb250U2l6ZSIsImFsaWduU2VsZiIsInRvTG9jYWxlU3RyaW5nIiwic2Vjb25kYXJ5Iiwibm9kZSIsImhvc3RuYW1lIiwidXB0aW1lU2VjIiwiY3B1IiwicHJvY2Vzc1BlcmNlbnQiLCJjb3JlcyIsImxvYWRBdmVyYWdlIiwibWFwIiwiam9pbiIsIm1lbW9yeSIsInJzcyIsImhlYXBVc2VkIiwiZGlzayIsImF2YWlsYWJsZUJ5dGVzIiwidXNlZEJ5dGVzIiwidXNlZFBlcmNlbnQiLCJlc3RpbWF0ZWRTZWNvbmRzVW50aWxGdWxsIiwiZXN0aW1hdGVkQXQiLCJ0cmVuZEJ5dGVzUGVyU2Vjb25kIiwiZG5zUHJvYmUiLCJsb2NhbFByb2JlcyIsInByb2JlIiwiaG9zdCIsInBvcnQiLCJsYXRlbmN5TXMiLCJpbnRlcmZhY2VzIiwiaWZhY2UiLCJhZGRyZXNzZXMiLCJhZGRyZXNzIiwicHJpbWFyeSIsImRpc2FibGVkIiwiU2VsZWN0IiwibGFiZWwiLCJvcHRpb25zIiwib25DaGFuZ2UiLCJ3b3JrZXJSZWFkeSIsInF1ZXVlTGVuZ3RoIiwicXVldWVCdXN5IiwiR3JvdXAiLCJpdGVtc1BlclJvdyIsInN0YWNrYWJsZSIsIml0ZW0iLCJ0eXBlIiwiTWV0YSIsIkRlc2NyaXB0aW9uIiwidmFsdWVTYXRzIiwiYXR0ZW1wdHMiLCJzb3VyY2VQZWVyIiwiZXh0cmEiLCJ3YWxsZXQiLCJiYWxhbmNlQnRjIiwiaGVpZ2h0IiwibGFiZWxlZEZsb3dzIiwiY291bnRzIiwicGF5am9pbiIsInBheWpvaW5EZXBvc2l0IiwiaW52ZW50b3J5SHRsY0Z1bmQiLCJpbnZlbnRvcnlIdGxjQ2xhaW0iLCJzdG9yYWdlQ29udHJhY3QiLCJ0b3RhbHMiLCJGaWVsZCIsInRvZ2dsZSIsInNlY3Rpb24iLCJsYWJlbFRleHQiLCJmbGFnSW5wdXRJZCIsImN1cnNvciIsImhyZWYiLCJ0YXJnZXQiLCJyZWwiLCJjbG9zZU9uRGltbWVyQ2xpY2siLCJvcGVuIiwib25DbG9zZSIsInVzZXJTZWxlY3QiLCJmbHVpZCIsInBsYWNlaG9sZGVyIiwiQWN0aW9ucyIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/AdminHome.js\n\n}')},"./components/BeaconAdminPanel.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Header = _require2.Header,\n Icon = _require2.Icon,\n Message = _require2.Message,\n Segment = _require2.Segment,\n Button = _require2.Button,\n Loader = _require2.Loader;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n fetchBitcoinStatus = _require3.fetchBitcoinStatus,\n loadUpstreamSettings = _require3.loadUpstreamSettings;\nvar _require4 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require4.readHubAdminTokenFromBrowser;\nvar _require5 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require5.formatSatsDisplay;\nvar _require6 = __webpack_require__(/*! ../functions/beaconFederationConstants */ "./functions/beaconFederationConstants.js"),\n REGTEST_EPOCH_INTERVAL_MINUTES = _require6.REGTEST_EPOCH_INTERVAL_MINUTES,\n NON_REGTEST_CADENCE_LABEL = _require6.NON_REGTEST_CADENCE_LABEL,\n DEFAULT_L1_DEPOSIT_MATURITY_BLOCKS = _require6.DEFAULT_L1_DEPOSIT_MATURITY_BLOCKS;\nvar _require7 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require7.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require7.subscribeHubUiFeatureFlags;\n\n/**\n * Admin summary: Beacon cadence, live status from Hub Bitcoin service, link to Beacon Federation contract page.\n */\nfunction BeaconAdminPanel() {\n var _React$useState = React.useState(true),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n loading = _React$useState2[0],\n setLoading = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n error = _React$useState4[0],\n setError = _React$useState4[1];\n var _React$useState5 = React.useState(null),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n status = _React$useState6[0],\n setStatus = _React$useState6[1];\n var _React$useState7 = React.useState(0),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n hubUiTick = _React$useState8[0],\n setHubUiTick = _React$useState8[1];\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setHubUiTick(function (t) {\n return t + 1;\n });\n });\n }, []);\n void hubUiTick;\n var uf = loadHubUiFeatureFlags();\n var refresh = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var upstream, s, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n setError(null);\n _context.p = 1;\n upstream = _objectSpread(_objectSpread({}, loadUpstreamSettings()), {}, {\n hubAdminToken: readHubAdminTokenFromBrowser(null) || \'\'\n });\n _context.n = 2;\n return fetchBitcoinStatus(upstream);\n case 2:\n s = _context.v;\n setStatus(s && _typeof(s) === \'object\' ? s : null);\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n setError(_t && _t.message ? _t.message : String(_t));\n setStatus(null);\n case 4:\n _context.p = 4;\n setLoading(false);\n return _context.f(4);\n case 5:\n return _context.a(2);\n }\n }, _callee, null, [[1, 3, 4, 5]]);\n })), []);\n React.useEffect(function () {\n void refresh();\n }, [refresh]);\n var network = status && status.network ? String(status.network).toLowerCase() : \'\';\n var isRegtest = network === \'regtest\';\n var cadence = isRegtest ? "About every ".concat(REGTEST_EPOCH_INTERVAL_MINUTES, " minutes (regtest timer)") : NON_REGTEST_CADENCE_LABEL;\n var beacon = status && status.beacon && _typeof(status.beacon) === \'object\' ? status.beacon : null;\n var clock = beacon && beacon.clock != null ? Number(beacon.clock) : null;\n var balanceSats = beacon && beacon.balanceSats != null ? Number(beacon.balanceSats) : null;\n return /*#__PURE__*/React.createElement(Segment, {\n style: {\n maxWidth: 720\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "admin-beacon-heading"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "radio",\n "aria-hidden": "true"\n }), "Beacon"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\',\n marginBottom: \'0.75em\',\n lineHeight: 1.45\n }\n }, "The Hub ", /*#__PURE__*/React.createElement("strong", null, "Beacon"), " seals a chain of Fabric ", /*#__PURE__*/React.createElement("code", null, "BEACON_EPOCH"), " messages against Bitcoin (block hash, height, optional sidechain digest). On ", /*#__PURE__*/React.createElement("strong", null, "regtest"), " the default cadence is timer-based (~", REGTEST_EPOCH_INTERVAL_MINUTES, " minutes); on ", /*#__PURE__*/React.createElement("strong", null, "mainnet, testnet, and signet"), " epochs are driven by", \' \', /*#__PURE__*/React.createElement("strong", null, NON_REGTEST_CADENCE_LABEL), ". Federation members co-sign witness data on those messages; the ", /*#__PURE__*/React.createElement("strong", null, "Beacon Federation"), " page links the on-chain Taproot vault (", /*#__PURE__*/React.createElement("code", null, "GET /services/distributed/vault"), ", UTXOs, withdrawal PSBT RPC).", /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.5em\',\n fontSize: \'0.92em\',\n color: \'#666\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Provability:"), " compare each epoch\'s height/hash to L1; re-verify Schnorr witnesses against the manifest pubkeys using the canonical epoch signing string in", \' \', /*#__PURE__*/React.createElement("code", null, "@fabric/core"), " ", /*#__PURE__*/React.createElement("code", null, "DistributedExecution"), ".", \' \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/manifest",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Manifest"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/epoch",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Epoch JSON"), ".")), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginBottom: \'0.75em\'\n }\n }, "Default L1 deposit policy for the federation vault: lock incoming deposits for", \' \', /*#__PURE__*/React.createElement("strong", null, DEFAULT_L1_DEPOSIT_MATURITY_BLOCKS), " blocks before withdrawal paths unlock (operator policy)."), loading ? /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: "centered",\n size: "small"\n }) : error ? /*#__PURE__*/React.createElement(Message, {\n warning: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Could not load Bitcoin / Beacon status"), /*#__PURE__*/React.createElement("p", null, error)) : /*#__PURE__*/React.createElement(Message, {\n info: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Live status"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Network:"), " ", network || \'unknown\', /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("strong", null, "Epoch cadence (this hub):"), " ", cadence, /*#__PURE__*/React.createElement("br", null), beacon ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("strong", null, "Beacon clock:"), " ", Number.isFinite(clock) ? clock : \'—\', /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("strong", null, "Core balance (Hub wallet / beacon view):"), \' \', Number.isFinite(balanceSats) ? "".concat(formatSatsDisplay(balanceSats), " sats") : \'—\') : /*#__PURE__*/React.createElement("span", null, "Beacon snapshot not included in status (Bitcoin service may be off or idle)."))), uf.sidechain ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings/admin/beacon-federation",\n primary: true,\n size: "small",\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users"\n }), "Beacon Federation contract"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/sidechains",\n basic: true,\n size: "small",\n style: {\n marginTop: \'0.5em\',\n marginLeft: \'0.35em\'\n }\n }, "Sidechain")) : /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#888\',\n fontSize: \'0.9em\',\n marginTop: \'0.75em\',\n marginBottom: 0,\n lineHeight: 1.45\n }\n }, "Enable ", /*#__PURE__*/React.createElement("strong", null, "Sidechain"), " under Admin \\u2192 Feature visibility to open Beacon Federation and the sidechain tools from here."));\n}\nmodule.exports = BeaconAdminPanel;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFBQ2tGLEVBQUUsRUFBQyxhQUFhO0lBQUNFLEtBQUs7SUFBQ1QsSUFBSSxFQUFDLE9BQU87SUFBQ2YsS0FBSyxFQUFFO01BQUVRLFNBQVMsRUFBRSxPQUFPO01BQUVpQixVQUFVLEVBQUU7SUFBUztFQUFFLEdBQUMsV0FFbkcsQ0FDTSxDQUFDLGdCQUVqQnhGLEtBQUEsQ0FBQThELGFBQUE7SUFBR0MsS0FBSyxFQUFFO01BQUVJLEtBQUssRUFBRSxNQUFNO01BQUVLLFFBQVEsRUFBRSxPQUFPO01BQUVELFNBQVMsRUFBRSxRQUFRO01BQUVILFlBQVksRUFBRSxDQUFDO01BQUVDLFVBQVUsRUFBRTtJQUFLO0VBQUUsR0FBQyxTQUMvRixlQUFBckUsS0FBQSxDQUFBOEQsYUFBQSxpQkFBUSxXQUFpQixDQUFDLHVHQUNoQyxDQUVFLENBQUM7QUFFZDtBQUVBMkIsTUFBTSxDQUFDQyxPQUFPLEdBQUdqRSxnQkFBZ0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvQmVhY29uQWRtaW5QYW5lbC5qcz8xMjA4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5jb25zdCB7IEhlYWRlciwgSWNvbiwgTWVzc2FnZSwgU2VnbWVudCwgQnV0dG9uLCBMb2FkZXIgfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCB7IGZldGNoQml0Y29pblN0YXR1cywgbG9hZFVwc3RyZWFtU2V0dGluZ3MgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9iaXRjb2luQ2xpZW50Jyk7XG5jb25zdCB7IHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJBZG1pblRva2VuQnJvd3NlcicpO1xuY29uc3QgeyBmb3JtYXRTYXRzRGlzcGxheSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2Zvcm1hdFNhdHMnKTtcbmNvbnN0IHtcbiAgUkVHVEVTVF9FUE9DSF9JTlRFUlZBTF9NSU5VVEVTLFxuICBOT05fUkVHVEVTVF9DQURFTkNFX0xBQkVMLFxuICBERUZBVUxUX0wxX0RFUE9TSVRfTUFUVVJJVFlfQkxPQ0tTXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2JlYWNvbkZlZGVyYXRpb25Db25zdGFudHMnKTtcbmNvbnN0IHtcbiAgbG9hZEh1YlVpRmVhdHVyZUZsYWdzLFxuICBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFnc1xufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJVaUZlYXR1cmVGbGFncycpO1xuXG4vKipcbiAqIEFkbWluIHN1bW1hcnk6IEJlYWNvbiBjYWRlbmNlLCBsaXZlIHN0YXR1cyBmcm9tIEh1YiBCaXRjb2luIHNlcnZpY2UsIGxpbmsgdG8gQmVhY29uIEZlZGVyYXRpb24gY29udHJhY3QgcGFnZS5cbiAqL1xuZnVuY3Rpb24gQmVhY29uQWRtaW5QYW5lbCAoKSB7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbc3RhdHVzLCBzZXRTdGF0dXNdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtodWJVaVRpY2ssIHNldEh1YlVpVGlja10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzKCgpID0+IHNldEh1YlVpVGljaygodCkgPT4gdCArIDEpKSwgW10pO1xuICB2b2lkIGh1YlVpVGljaztcbiAgY29uc3QgdWYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcblxuICBjb25zdCByZWZyZXNoID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cHN0cmVhbSA9IHtcbiAgICAgICAgLi4ubG9hZFVwc3RyZWFtU2V0dGluZ3MoKSxcbiAgICAgICAgaHViQWRtaW5Ub2tlbjogcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlcihudWxsKSB8fCAnJ1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHMgPSBhd2FpdCBmZXRjaEJpdGNvaW5TdGF0dXModXBzdHJlYW0pO1xuICAgICAgc2V0U3RhdHVzKHMgJiYgdHlwZW9mIHMgPT09ICdvYmplY3QnID8gcyA6IG51bGwpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldEVycm9yKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICAgIHNldFN0YXR1cyhudWxsKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICB2b2lkIHJlZnJlc2goKTtcbiAgfSwgW3JlZnJlc2hdKTtcblxuICBjb25zdCBuZXR3b3JrID0gc3RhdHVzICYmIHN0YXR1cy5uZXR3b3JrID8gU3RyaW5nKHN0YXR1cy5uZXR3b3JrKS50b0xvd2VyQ2FzZSgpIDogJyc7XG4gIGNvbnN0IGlzUmVndGVzdCA9IG5ldHdvcmsgPT09ICdyZWd0ZXN0JztcbiAgY29uc3QgY2FkZW5jZSA9IGlzUmVndGVzdFxuICAgID8gYEFib3V0IGV2ZXJ5ICR7UkVHVEVTVF9FUE9DSF9JTlRFUlZBTF9NSU5VVEVTfSBtaW51dGVzIChyZWd0ZXN0IHRpbWVyKWBcbiAgICA6IE5PTl9SRUdURVNUX0NBREVOQ0VfTEFCRUw7XG4gIGNvbnN0IGJlYWNvbiA9IHN0YXR1cyAmJiBzdGF0dXMuYmVhY29uICYmIHR5cGVvZiBzdGF0dXMuYmVhY29uID09PSAnb2JqZWN0JyA/IHN0YXR1cy5iZWFjb24gOiBudWxsO1xuICBjb25zdCBjbG9jayA9IGJlYWNvbiAmJiBiZWFjb24uY2xvY2sgIT0gbnVsbCA/IE51bWJlcihiZWFjb24uY2xvY2spIDogbnVsbDtcbiAgY29uc3QgYmFsYW5jZVNhdHMgPSBiZWFjb24gJiYgYmVhY29uLmJhbGFuY2VTYXRzICE9IG51bGwgPyBOdW1iZXIoYmVhY29uLmJhbGFuY2VTYXRzKSA6IG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VnbWVudCBzdHlsZT17eyBtYXhXaWR0aDogNzIwIH19PlxuICAgICAgPEhlYWRlciBhcz1cImgzXCIgaWQ9XCJhZG1pbi1iZWFjb24taGVhZGluZ1wiPlxuICAgICAgICA8SWNvbiBuYW1lPVwicmFkaW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICBCZWFjb25cbiAgICAgIDwvSGVhZGVyPlxuICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNTU1JywgbWFyZ2luQm90dG9tOiAnMC43NWVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgVGhlIEh1YiA8c3Ryb25nPkJlYWNvbjwvc3Ryb25nPiBzZWFscyBhIGNoYWluIG9mIEZhYnJpYyA8Y29kZT5CRUFDT05fRVBPQ0g8L2NvZGU+IG1lc3NhZ2VzIGFnYWluc3QgQml0Y29pbiAoYmxvY2sgaGFzaCwgaGVpZ2h0LCBvcHRpb25hbCBzaWRlY2hhaW4gZGlnZXN0KS5cbiAgICAgICAgT24gPHN0cm9uZz5yZWd0ZXN0PC9zdHJvbmc+IHRoZSBkZWZhdWx0IGNhZGVuY2UgaXMgdGltZXItYmFzZWQgKH57UkVHVEVTVF9FUE9DSF9JTlRFUlZBTF9NSU5VVEVTfSBtaW51dGVzKTsgb24gPHN0cm9uZz5tYWlubmV0LCB0ZXN0bmV0LCBhbmQgc2lnbmV0PC9zdHJvbmc+IGVwb2NocyBhcmUgZHJpdmVuIGJ5eycgJ31cbiAgICAgICAgPHN0cm9uZz57Tk9OX1JFR1RFU1RfQ0FERU5DRV9MQUJFTH08L3N0cm9uZz4uXG4gICAgICAgIEZlZGVyYXRpb24gbWVtYmVycyBjby1zaWduIHdpdG5lc3MgZGF0YSBvbiB0aG9zZSBtZXNzYWdlczsgdGhlIDxzdHJvbmc+QmVhY29uIEZlZGVyYXRpb248L3N0cm9uZz4gcGFnZSBsaW5rcyB0aGUgb24tY2hhaW4gVGFwcm9vdCB2YXVsdCAoPGNvZGU+R0VUIC9zZXJ2aWNlcy9kaXN0cmlidXRlZC92YXVsdDwvY29kZT4sIFVUWE9zLCB3aXRoZHJhd2FsIFBTQlQgUlBDKS5cbiAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2Jsb2NrJywgbWFyZ2luVG9wOiAnMC41ZW0nLCBmb250U2l6ZTogJzAuOTJlbScsIGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgPHN0cm9uZz5Qcm92YWJpbGl0eTo8L3N0cm9uZz4gY29tcGFyZSBlYWNoIGVwb2NoJmFwb3M7cyBoZWlnaHQvaGFzaCB0byBMMTsgcmUtdmVyaWZ5IFNjaG5vcnIgd2l0bmVzc2VzIGFnYWluc3QgdGhlIG1hbmlmZXN0IHB1YmtleXMgdXNpbmcgdGhlIGNhbm9uaWNhbCBlcG9jaCBzaWduaW5nIHN0cmluZyBpbnsnICd9XG4gICAgICAgICAgPGNvZGU+QGZhYnJpYy9jb3JlPC9jb2RlPiA8Y29kZT5EaXN0cmlidXRlZEV4ZWN1dGlvbjwvY29kZT4ueycgJ31cbiAgICAgICAgICA8YSBocmVmPVwiL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL21hbmlmZXN0XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPk1hbmlmZXN0PC9hPlxuICAgICAgICAgIHsnIMK3ICd9XG4gICAgICAgICAgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC9lcG9jaFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5FcG9jaCBKU09OPC9hPi5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9wPlxuICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScsIG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgIERlZmF1bHQgTDEgZGVwb3NpdCBwb2xpY3kgZm9yIHRoZSBmZWRlcmF0aW9uIHZhdWx0OiBsb2NrIGluY29taW5nIGRlcG9zaXRzIGZvcnsnICd9XG4gICAgICAgIDxzdHJvbmc+e0RFRkFVTFRfTDFfREVQT1NJVF9NQVRVUklUWV9CTE9DS1N9PC9zdHJvbmc+IGJsb2NrcyBiZWZvcmUgd2l0aGRyYXdhbCBwYXRocyB1bmxvY2sgKG9wZXJhdG9yIHBvbGljeSkuXG4gICAgICA8L3A+XG5cbiAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICA8TG9hZGVyIGFjdGl2ZSBpbmxpbmU9XCJjZW50ZXJlZFwiIHNpemU9XCJzbWFsbFwiIC8+XG4gICAgICApIDogZXJyb3IgPyAoXG4gICAgICAgIDxNZXNzYWdlIHdhcm5pbmc+XG4gICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkNvdWxkIG5vdCBsb2FkIEJpdGNvaW4gLyBCZWFjb24gc3RhdHVzPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICA8cD57ZXJyb3J9PC9wPlxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApIDogKFxuICAgICAgICA8TWVzc2FnZSBpbmZvPlxuICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5MaXZlIHN0YXR1czwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPk5ldHdvcms6PC9zdHJvbmc+IHtuZXR3b3JrIHx8ICd1bmtub3duJ31cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgPHN0cm9uZz5FcG9jaCBjYWRlbmNlICh0aGlzIGh1Yik6PC9zdHJvbmc+IHtjYWRlbmNlfVxuICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICB7YmVhY29uID8gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+QmVhY29uIGNsb2NrOjwvc3Ryb25nPiB7TnVtYmVyLmlzRmluaXRlKGNsb2NrKSA/IGNsb2NrIDogJ+KAlCd9XG4gICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5Db3JlIGJhbGFuY2UgKEh1YiB3YWxsZXQgLyBiZWFjb24gdmlldyk6PC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgICAgICB7TnVtYmVyLmlzRmluaXRlKGJhbGFuY2VTYXRzKSA/IGAke2Zvcm1hdFNhdHNEaXNwbGF5KGJhbGFuY2VTYXRzKX0gc2F0c2AgOiAn4oCUJ31cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8c3Bhbj5CZWFjb24gc25hcHNob3Qgbm90IGluY2x1ZGVkIGluIHN0YXR1cyAoQml0Y29pbiBzZXJ2aWNlIG1heSBiZSBvZmYgb3IgaWRsZSkuPC9zcGFuPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICl9XG5cbiAgICAgIHt1Zi5zaWRlY2hhaW4gPyAoXG4gICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXR0aW5ncy9hZG1pbi9iZWFjb24tZmVkZXJhdGlvblwiIHByaW1hcnkgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgPEljb24gbmFtZT1cInVzZXJzXCIgLz5cbiAgICAgICAgICAgIEJlYWNvbiBGZWRlcmF0aW9uIGNvbnRyYWN0XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2lkZWNoYWluc1wiIGJhc2ljIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJywgbWFyZ2luTGVmdDogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICBTaWRlY2hhaW5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcsIGZvbnRTaXplOiAnMC45ZW0nLCBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBtYXJnaW5Cb3R0b206IDAsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgRW5hYmxlIDxzdHJvbmc+U2lkZWNoYWluPC9zdHJvbmc+IHVuZGVyIEFkbWluIOKGkiBGZWF0dXJlIHZpc2liaWxpdHkgdG8gb3BlbiBCZWFjb24gRmVkZXJhdGlvbiBhbmQgdGhlIHNpZGVjaGFpbiB0b29scyBmcm9tIGhlcmUuXG4gICAgICAgIDwvcD5cbiAgICAgICl9XG4gICAgPC9TZWdtZW50PlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJlYWNvbkFkbWluUGFuZWw7XG4iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yIiwiZSIsInQiLCJyIiwiU3ltYm9sIiwibiIsIml0ZXJhdG9yIiwibyIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJwcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdHlwZW9mIiwiY29uc3RydWN0b3IiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfbmV4dCIsIl90aHJvdyIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibmV4dCIsImlzQXJyYXkiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJIZWFkZXIiLCJJY29uIiwiTWVzc2FnZSIsIlNlZ21lbnQiLCJCdXR0b24iLCJMb2FkZXIiLCJfcmVxdWlyZTMiLCJmZXRjaEJpdGNvaW5TdGF0dXMiLCJsb2FkVXBzdHJlYW1TZXR0aW5ncyIsIl9yZXF1aXJlNCIsInJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIiLCJfcmVxdWlyZTUiLCJmb3JtYXRTYXRzRGlzcGxheSIsIl9yZXF1aXJlNiIsIlJFR1RFU1RfRVBPQ0hfSU5URVJWQUxfTUlOVVRFUyIsIk5PTl9SRUdURVNUX0NBREVOQ0VfTEFCRUwiLCJERUZBVUxUX0wxX0RFUE9TSVRfTUFUVVJJVFlfQkxPQ0tTIiwiX3JlcXVpcmU3IiwibG9hZEh1YlVpRmVhdHVyZUZsYWdzIiwic3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MiLCJCZWFjb25BZG1pblBhbmVsIiwiX1JlYWN0JHVzZVN0YXRlIiwidXNlU3RhdGUiLCJfUmVhY3QkdXNlU3RhdGUyIiwibG9hZGluZyIsInNldExvYWRpbmciLCJfUmVhY3QkdXNlU3RhdGUzIiwiX1JlYWN0JHVzZVN0YXRlNCIsImVycm9yIiwic2V0RXJyb3IiLCJfUmVhY3QkdXNlU3RhdGU1IiwiX1JlYWN0JHVzZVN0YXRlNiIsInN0YXR1cyIsInNldFN0YXR1cyIsIl9SZWFjdCR1c2VTdGF0ZTciLCJfUmVhY3QkdXNlU3RhdGU4IiwiaHViVWlUaWNrIiwic2V0SHViVWlUaWNrIiwidXNlRWZmZWN0IiwidWYiLCJyZWZyZXNoIiwidXNlQ2FsbGJhY2siLCJfY2FsbGVlIiwidXBzdHJlYW0iLCJzIiwiX3QiLCJfY29udGV4dCIsImh1YkFkbWluVG9rZW4iLCJtZXNzYWdlIiwibmV0d29yayIsInRvTG93ZXJDYXNlIiwiaXNSZWd0ZXN0IiwiY2FkZW5jZSIsImNvbmNhdCIsImJlYWNvbiIsImNsb2NrIiwiYmFsYW5jZVNhdHMiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJtYXhXaWR0aCIsImFzIiwiaWQiLCJjb2xvciIsIm1hcmdpbkJvdHRvbSIsImxpbmVIZWlnaHQiLCJkaXNwbGF5IiwibWFyZ2luVG9wIiwiZm9udFNpemUiLCJocmVmIiwidGFyZ2V0IiwicmVsIiwiYWN0aXZlIiwiaW5saW5lIiwic2l6ZSIsIndhcm5pbmciLCJpbmZvIiwibWFyZ2luIiwiRnJhZ21lbnQiLCJpc0Zpbml0ZSIsInNpZGVjaGFpbiIsInRvIiwicHJpbWFyeSIsImJhc2ljIiwibWFyZ2luTGVmdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/BeaconAdminPanel.js\n\n}')},"./components/BeaconFederationHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Segment = _require2.Segment,\n List = _require2.List,\n Message = _require2.Message;\nvar DistributedFederationPanel = __webpack_require__(/*! ./DistributedFederationPanel */ "./components/DistributedFederationPanel.js");\nvar TrackedApplicationContractsPanel = __webpack_require__(/*! ./TrackedApplicationContractsPanel */ "./components/TrackedApplicationContractsPanel.js");\nvar _require3 = __webpack_require__(/*! ../functions/beaconFederationConstants */ "./functions/beaconFederationConstants.js"),\n REGTEST_EPOCH_INTERVAL_MINUTES = _require3.REGTEST_EPOCH_INTERVAL_MINUTES,\n NON_REGTEST_CADENCE_LABEL = _require3.NON_REGTEST_CADENCE_LABEL,\n DEFAULT_L1_DEPOSIT_MATURITY_BLOCKS = _require3.DEFAULT_L1_DEPOSIT_MATURITY_BLOCKS;\nvar _require4 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require4.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require4.subscribeHubUiFeatureFlags;\nvar _require5 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require5.readHubAdminTokenFromBrowser;\nvar BEACON_DESIGN_DOC_HREF = \'https://github.com/FabricLabs/hub.fabric.pub/blob/master/docs/BEACON_SIDECHAIN_DESIGN_AND_ROADMAP.md\';\nvar SIDECHAIN_INDEX_DOC_HREF = \'https://github.com/FabricLabs/hub.fabric.pub/blob/master/docs/SIDECHAIN_AND_EXECUTION_INDEX.md\';\n\n/**\n * Dedicated operator page: Beacon Federation "contract" — Fabric epochs, cooperative signing, L1 Taproot vault (design).\n */\nfunction BeaconFederationHome() {\n var _React$useState = React.useState(0),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n hubUiTick = _React$useState2[0],\n setHubUiTick = _React$useState2[1];\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setHubUiTick(function (t) {\n return t + 1;\n });\n });\n }, []);\n void hubUiTick;\n var uf = loadHubUiFeatureFlags();\n var hasAdminToken = !!readHubAdminTokenFromBrowser();\n var peersNav = !!(uf && uf.peers && hasAdminToken);\n return /*#__PURE__*/React.createElement(Segment, {\n style: {\n maxWidth: 900,\n margin: \'1em auto\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings/admin",\n basic: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n },\n "aria-label": "Back to admin"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Admin"), /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "beacon-federation-heading"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Beacon Federation")), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\',\n maxWidth: \'44rem\',\n lineHeight: 1.5,\n marginBottom: \'1em\'\n }\n }, "The ", /*#__PURE__*/React.createElement("strong", null, "Beacon Federation"), " is the agreement among hub operators who run the same distributed program: they ", /*#__PURE__*/React.createElement("strong", null, "distribute Bitcoin blocks"), " across the Fabric P2P mesh, ", /*#__PURE__*/React.createElement("strong", null, "evaluate each tip deterministically"), " to the same canonical epoch payload, and attach a ", /*#__PURE__*/React.createElement("strong", null, "k-of-n Schnorr witness"), " on the sealed ", /*#__PURE__*/React.createElement("code", null, "BEACON_EPOCH"), " Fabric message. On ", /*#__PURE__*/React.createElement("strong", null, "regtest"), ", this hub emits an epoch on a ", /*#__PURE__*/React.createElement("strong", null, "~", REGTEST_EPOCH_INTERVAL_MINUTES, "-minute"), " timer by default; on", /*#__PURE__*/React.createElement("strong", null, "mainnet, testnet, and signet"), ", epochs align with ", /*#__PURE__*/React.createElement("strong", null, NON_REGTEST_CADENCE_LABEL), "."), /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "L1 binding, Fabric sealing, and reproducibility"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\',\n maxWidth: \'44rem\',\n lineHeight: 1.5,\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "What is anchored where:"), " each ", /*#__PURE__*/React.createElement("code", null, "BEACON_EPOCH"), " payload names a concrete Bitcoin tip (", /*#__PURE__*/React.createElement("strong", null, "height + block hash"), ") and seals", \' \', /*#__PURE__*/React.createElement("code", null, "contracts: ", \'{\', " clock, stateDigest ", \'}\'), " \\u2014 the state root of ", /*#__PURE__*/React.createElement("strong", null, "published application contracts"), " this operator has accepted into the Beacon-tracked set. An optional ", /*#__PURE__*/React.createElement("code", null, "sidechain"), " head may also appear for operational state. The hub persists the ordered epoch chain on disk (", /*#__PURE__*/React.createElement("code", null, "beacon/CHAIN"), ") with Merkle metadata for consistency checks. That is ", /*#__PURE__*/React.createElement("strong", null, "verifiable against your own bitcoind"), " (or explorer) independently of Fabric peers."), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\',\n maxWidth: \'44rem\',\n lineHeight: 1.5,\n marginBottom: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Reproducing federation approval:"), " validator partial signatures target a ", /*#__PURE__*/React.createElement("strong", null, "canonical signing string"), " derived from the epoch payload (see", \' \', /*#__PURE__*/React.createElement("code", null, "DistributedExecution.signingStringForBeaconEpoch"), " in ", /*#__PURE__*/React.createElement("code", null, "@fabric/core"), "). With the same payload, manifest pubkeys, and threshold, anyone can re-run", \' \', /*#__PURE__*/React.createElement("code", null, "verifyFederationWitnessOnMessage"), " to confirm a ", /*#__PURE__*/React.createElement("strong", null, "k-of-n Schnorr witness"), " matches what the hub accepted. Public JSON for operators:", \' \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/manifest",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET /services/distributed/manifest"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/epoch",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET /services/distributed/epoch"), "."), /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Scope (avoid mixing guarantees)"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Execution contracts"), " use a separate deterministic ", /*#__PURE__*/React.createElement("code", null, "runCommitmentHex"), " over the opcode trace and optional L1 OP_RETURN anchoring \\u2014 they do", \' \', /*#__PURE__*/React.createElement("strong", null, "not"), " consume federation witnesses. The ", /*#__PURE__*/React.createElement("strong", null, "Taproot federation vault"), " is a separate L1 leg: deposit address and UTXO scan are on the Hub; co-signing spends stays with validators (PSBT).")), /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "On-chain federation vault (Taproot)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\',\n maxWidth: \'44rem\',\n lineHeight: 1.5,\n marginBottom: \'0.75em\'\n }\n }, "The L1 leg of the contract is a ", /*#__PURE__*/React.createElement("strong", null, "Taproot"), " address controlled by the federation: anyone can ", /*#__PURE__*/React.createElement("strong", null, "fund"), " it. The hub derives a deterministic ", /*#__PURE__*/React.createElement("strong", null, "k-of-n tapscript"), " (sorted validator pubkeys, same list as the manifest) with a NUMS internal key \\u2014 spend only via script path.", /*#__PURE__*/React.createElement("strong", null, "Beacon operators"), " use ", /*#__PURE__*/React.createElement("code", null, "PrepareFederationVaultWithdrawalPsbt"), " (admin token, ", /*#__PURE__*/React.createElement("code", null, "POST /services/rpc"), ") to build an ", /*#__PURE__*/React.createElement("strong", null, "unsigned"), " PSBT from a funding tx; each validator signs with their key until threshold signatures exist, then broadcast. The ", /*#__PURE__*/React.createElement("strong", null, "default"), " policy for incoming deposits is to treat them as ", /*#__PURE__*/React.createElement("strong", null, "mature after ", DEFAULT_L1_DEPOSIT_MATURITY_BLOCKS, " confirmations"), " (~one day on mainnet) before planning withdrawals \\u2014 surfaced on", \' \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/vault/utxos",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET /services/distributed/vault/utxos"), \' \', "per UTXO (", /*#__PURE__*/React.createElement("code", null, "maturedForWithdrawalPolicy"), ")."), /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Hub HTTP / RPC (live)"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/vault",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET /services/distributed/vault"), \' — address, tapscript, policy · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/vault/utxos",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET /services/distributed/vault/utxos"), \' — watch-only balance via \', /*#__PURE__*/React.createElement("code", null, "scantxoutset"), \' · manifest includes a compact \', /*#__PURE__*/React.createElement("code", null, "federationVault"), \' summary when validators are set. Fabric-side enforcement (epochs, sidechain patches) is unchanged.\')), /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n marginTop: \'1.25em\'\n }\n }, "This hub (live policy)"), /*#__PURE__*/React.createElement(DistributedFederationPanel, {\n size: "small",\n marginBottom: "1em"\n }), /*#__PURE__*/React.createElement(TrackedApplicationContractsPanel, null), /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Operator checklist"), /*#__PURE__*/React.createElement(List, {\n bulleted: true,\n relaxed: true\n }, /*#__PURE__*/React.createElement(List.Item, null, "Configure validator pubkeys and threshold under ", /*#__PURE__*/React.createElement(Link, {\n to: "/federations"\n }, "Federations"), " (or ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings/federation"\n }, "Settings \\u2192 Distributed federation"), ")."), /*#__PURE__*/React.createElement(List.Item, null, "Confirm epoch stream: ", /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/epoch",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET /services/distributed/epoch"), "; vault: ", /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/vault",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET /services/distributed/vault"), " and ", /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/vault/utxos",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "UTXOs"), "."), /*#__PURE__*/React.createElement(List.Item, null, "Compare epoch block height/hash to L1 and spot-check witness bytes in CI using ", /*#__PURE__*/React.createElement("code", null, "@fabric/core"), " helpers (see design doc)."), /*#__PURE__*/React.createElement(List.Item, null, "Coordinate with peers:", \' \', peersNav ? /*#__PURE__*/React.createElement(Link, {\n to: "/peers"\n }, "Peers") : /*#__PURE__*/React.createElement("span", null, "Peers (paste hub admin token under Admin to open the list)"), \' \', "and federation invites from peer detail (admin)."), /*#__PURE__*/React.createElement(List.Item, null, "Accept inbound ", /*#__PURE__*/React.createElement("code", null, "CONTRACT_PUBLISH"), " offers (above) so they enter the Beacon contracts state root; sidechain app payloads:", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/sidechains"\n }, "Statechain"), ";", /*#__PURE__*/React.createElement(React.Fragment, null, \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/activities"\n }, "Activity log"), " shows ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin blocks"), " and hub log events; ", /*#__PURE__*/React.createElement(Link, {\n to: "/notifications"\n }, "Notifications"), " (bell) lists wallet and Payjoin toasts.")), /*#__PURE__*/React.createElement(List.Item, null, "Further reading:", \' \', /*#__PURE__*/React.createElement("a", {\n href: BEACON_DESIGN_DOC_HREF,\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Beacon + sidechain design & roadmap"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: SIDECHAIN_INDEX_DOC_HREF,\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Sidechain & execution index"), ".")));\n}\nmodule.exports = BeaconFederationHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0JlYWNvbkZlZGVyYXRpb25Ib21lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLGVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBQyxlQUFBLENBQUFGLENBQUEsS0FBQUcscUJBQUEsQ0FBQUgsQ0FBQSxFQUFBQyxDQUFBLEtBQUFHLDJCQUFBLENBQUFKLENBQUEsRUFBQUMsQ0FBQSxLQUFBSSxnQkFBQTtBQUFBLFNBQUFBLGlCQUFBLGNBQUFDLFNBQUE7QUFBQSxTQUFBRiw0QkFBQUosQ0FBQSxFQUFBTyxDQUFBLFFBQUFQLENBQUEsMkJBQUFBLENBQUEsU0FBQVEsaUJBQUEsQ0FBQVIsQ0FBQSxFQUFBTyxDQUFBLE9BQUFFLENBQUEsTUFBQUMsUUFBQSxDQUFBQyxJQUFBLENBQUFYLENBQUEsRUFBQVksS0FBQSw2QkFBQUgsQ0FBQSxJQUFBVCxDQUFBLENBQUFhLFdBQUEsS0FBQUosQ0FBQSxHQUFBVCxDQUFBLENBQUFhLFdBQUEsQ0FBQUMsSUFBQSxhQUFBTCxDQUFBLGNBQUFBLENBQUEsR0FBQU0sS0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLG9CQUFBUyxDQUFBLCtDQUFBUSxJQUFBLENBQUFSLENBQUEsSUFBQUQsaUJBQUEsQ0FBQVIsQ0FBQSxFQUFBTyxDQUFBO0FBQUEsU0FBQUMsa0JBQUFSLENBQUEsRUFBQU8sQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQVAsQ0FBQSxDQUFBa0IsTUFBQSxNQUFBWCxDQUFBLEdBQUFQLENBQUEsQ0FBQWtCLE1BQUEsWUFBQWpCLENBQUEsTUFBQWtCLENBQUEsR0FBQUosS0FBQSxDQUFBUixDQUFBLEdBQUFOLENBQUEsR0FBQU0sQ0FBQSxFQUFBTixDQUFBLElBQUFrQixDQUFBLENBQUFsQixDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxVQUFBa0IsQ0FBQTtBQUFBLFNBQUFoQixzQkFBQUgsQ0FBQSxFQUFBb0IsQ0FBQSxRQUFBWCxDQUFBLFdBQUFULENBQUEsZ0NB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LENBQUFuQyxLQUFBLENBQUF5RCxRQUFBLFFBQ0csR0FBRyxlQUNKekQsS0FBQSxDQUFBbUMsYUFBQSxDQUFDaEMsSUFBSTtJQUFDcUMsRUFBRSxFQUFDO0VBQWEsR0FBQyxjQUFrQixDQUFDLFdBQU8sZUFBQXhDLEtBQUEsQ0FBQW1DLGFBQUEsaUJBQVEsZ0JBQXNCLENBQUMseUJBQXFCLGVBQUFuQyxLQUFBLENBQUFtQyxhQUFBLENBQUNoQyxJQUFJO0lBQUNxQyxFQUFFLEVBQUM7RUFBZ0IsR0FBQyxlQUFtQixDQUFDLDRDQUNuSixDQUNPLENBQUMsZUFDWnhDLEtBQUEsQ0FBQW1DLGFBQUEsQ0FBQzFCLElBQUksQ0FBQytDLElBQUksUUFBQyxrQkFDTyxFQUFDLEdBQUcsZUFDcEJ4RCxLQUFBLENBQUFtQyxhQUFBO0lBQUdhLElBQUksRUFBRTFCLHNCQUF1QjtJQUFDMkIsTUFBTSxFQUFDLFFBQVE7SUFBQ0MsR0FBRyxFQUFDO0VBQXFCLEdBQUMscUNBQTBDLENBQUMsRUFDckgsS0FBSyxlQUNObEQsS0FBQSxDQUFBbUMsYUFBQTtJQUFHYSxJQUFJLEVBQUV6Qix3QkFBeUI7SUFBQzBCLE1BQU0sRUFBQyxRQUFRO0lBQUNDLEdBQUcsRUFBQztFQUFxQixHQUFDLDZCQUFrQyxDQUFDLEtBQ3ZHLENBQ1AsQ0FDQyxDQUFDO0FBRWQ7QUFFQVEsTUFBTSxDQUFDQyxPQUFPLEdBQUduQyxvQkFBb0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvQmVhY29uRmVkZXJhdGlvbkhvbWUuanM/YTFmYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluayB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuY29uc3QgeyBCdXR0b24sIEhlYWRlciwgSWNvbiwgU2VnbWVudCwgTGlzdCwgTWVzc2FnZSB9ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IERpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsID0gcmVxdWlyZSgnLi9EaXN0cmlidXRlZEZlZGVyYXRpb25QYW5lbCcpO1xuY29uc3QgVHJhY2tlZEFwcGxpY2F0aW9uQ29udHJhY3RzUGFuZWwgPSByZXF1aXJlKCcuL1RyYWNrZWRBcHBsaWNhdGlvbkNvbnRyYWN0c1BhbmVsJyk7XG5jb25zdCB7XG4gIFJFR1RFU1RfRVBPQ0hfSU5URVJWQUxfTUlOVVRFUyxcbiAgTk9OX1JFR1RFU1RfQ0FERU5DRV9MQUJFTCxcbiAgREVGQVVMVF9MMV9ERVBPU0lUX01BVFVSSVRZX0JMT0NLU1xufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9iZWFjb25GZWRlcmF0aW9uQ29uc3RhbnRzJyk7XG5jb25zdCB7XG4gIGxvYWRIdWJVaUZlYXR1cmVGbGFncyxcbiAgc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3Ncbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViVWlGZWF0dXJlRmxhZ3MnKTtcbmNvbnN0IHsgcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YkFkbWluVG9rZW5Ccm93c2VyJyk7XG5cbmNvbnN0IEJFQUNPTl9ERVNJR05fRE9DX0hSRUYgPSAnaHR0cHM6Ly9naXRodWIuY29tL0ZhYnJpY0xhYnMvaHViLmZhYnJpYy5wdWIvYmxvYi9tYXN0ZXIvZG9jcy9CRUFDT05fU0lERUNIQUlOX0RFU0lHTl9BTkRfUk9BRE1BUC5tZCc7XG5jb25zdCBTSURFQ0hBSU5fSU5ERVhfRE9DX0hSRUYgPSAnaHR0cHM6Ly9naXRodWIuY29tL0ZhYnJpY0xhYnMvaHViLmZhYnJpYy5wdWIvYmxvYi9tYXN0ZXIvZG9jcy9TSURFQ0hBSU5fQU5EX0VYRUNVVElPTl9JTkRFWC5tZCc7XG5cbi8qKlxuICogRGVkaWNhdGVkIG9wZXJhdG9yIHBhZ2U6IEJlYWNvbiBGZWRlcmF0aW9uIFwiY29udHJhY3RcIiDigJQgRmFicmljIGVwb2NocywgY29vcGVyYXRpdmUgc2lnbmluZywgTDEgVGFwcm9vdCB2YXVsdCAoZGVzaWduKS5cbiAqL1xuZnVuY3Rpb24gQmVhY29uRmVkZXJhdGlvbkhvbWUgKCkge1xuICBjb25zdCBbaHViVWlUaWNrLCBzZXRIdWJVaVRpY2tdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncygoKSA9PiBzZXRIdWJVaVRpY2soKHQpID0+IHQgKyAxKSksIFtdKTtcbiAgdm9pZCBodWJVaVRpY2s7XG4gIGNvbnN0IHVmID0gbG9hZEh1YlVpRmVhdHVyZUZsYWdzKCk7XG4gIGNvbnN0IGhhc0FkbWluVG9rZW4gPSAhIXJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIoKTtcbiAgY29uc3QgcGVlcnNOYXYgPSAhISh1ZiAmJiB1Zi5wZWVycyAmJiBoYXNBZG1pblRva2VuKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWdtZW50IHN0eWxlPXt7IG1heFdpZHRoOiA5MDAsIG1hcmdpbjogJzFlbSBhdXRvJyB9fT5cbiAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NldHRpbmdzL2FkbWluXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fSBhcmlhLWxhYmVsPVwiQmFjayB0byBhZG1pblwiPlxuICAgICAgICA8SWNvbiBuYW1lPVwiYXJyb3cgbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIEFkbWluXG4gICAgICA8L0J1dHRvbj5cblxuICAgICAgPEhlYWRlciBhcz1cImgyXCIgaWQ9XCJiZWFjb24tZmVkZXJhdGlvbi1oZWFkaW5nXCI+XG4gICAgICAgIDxJY29uIG5hbWU9XCJ1c2Vyc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDxIZWFkZXIuQ29udGVudD5CZWFjb24gRmVkZXJhdGlvbjwvSGVhZGVyLkNvbnRlbnQ+XG4gICAgICA8L0hlYWRlcj5cblxuICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNTU1JywgbWF4V2lkdGg6ICc0NHJlbScsIGxpbmVIZWlnaHQ6IDEuNSwgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgVGhlIDxzdHJvbmc+QmVhY29uIEZlZGVyYXRpb248L3N0cm9uZz4gaXMgdGhlIGFncmVlbWVudCBhbW9uZyBodWIgb3BlcmF0b3JzIHdobyBydW4gdGhlIHNhbWUgZGlzdHJpYnV0ZWQgcHJvZ3JhbTpcbiAgICAgICAgdGhleSA8c3Ryb25nPmRpc3RyaWJ1dGUgQml0Y29pbiBibG9ja3M8L3N0cm9uZz4gYWNyb3NzIHRoZSBGYWJyaWMgUDJQIG1lc2gsIDxzdHJvbmc+ZXZhbHVhdGUgZWFjaCB0aXAgZGV0ZXJtaW5pc3RpY2FsbHk8L3N0cm9uZz4gdG8gdGhlIHNhbWVcbiAgICAgICAgY2Fub25pY2FsIGVwb2NoIHBheWxvYWQsIGFuZCBhdHRhY2ggYSA8c3Ryb25nPmstb2YtbiBTY2hub3JyIHdpdG5lc3M8L3N0cm9uZz4gb24gdGhlIHNlYWxlZCA8Y29kZT5CRUFDT05fRVBPQ0g8L2NvZGU+IEZhYnJpYyBtZXNzYWdlLlxuICAgICAgICBPbiA8c3Ryb25nPnJlZ3Rlc3Q8L3N0cm9uZz4sIHRoaXMgaHViIGVtaXRzIGFuIGVwb2NoIG9uIGEgPHN0cm9uZz5+e1JFR1RFU1RfRVBPQ0hfSU5URVJWQUxfTUlOVVRFU30tbWludXRlPC9zdHJvbmc+IHRpbWVyIGJ5IGRlZmF1bHQ7IG9uXG4gICAgICAgIDxzdHJvbmc+bWFpbm5ldCwgdGVzdG5ldCwgYW5kIHNpZ25ldDwvc3Ryb25nPiwgZXBvY2hzIGFsaWduIHdpdGggPHN0cm9uZz57Tk9OX1JFR1RFU1RfQ0FERU5DRV9MQUJFTH08L3N0cm9uZz4uXG4gICAgICA8L3A+XG5cbiAgICAgIDxIZWFkZXIgYXM9XCJoM1wiPkwxIGJpbmRpbmcsIEZhYnJpYyBzZWFsaW5nLCBhbmQgcmVwcm9kdWNpYmlsaXR5PC9IZWFkZXI+XG4gICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM1NTUnLCBtYXhXaWR0aDogJzQ0cmVtJywgbGluZUhlaWdodDogMS41LCBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+XG4gICAgICAgIDxzdHJvbmc+V2hhdCBpcyBhbmNob3JlZCB3aGVyZTo8L3N0cm9uZz4gZWFjaCA8Y29kZT5CRUFDT05fRVBPQ0g8L2NvZGU+IHBheWxvYWQgbmFtZXMgYSBjb25jcmV0ZSBCaXRjb2luIHRpcCAoPHN0cm9uZz5oZWlnaHQgKyBibG9jayBoYXNoPC9zdHJvbmc+KSBhbmQgc2VhbHN7JyAnfVxuICAgICAgICA8Y29kZT5jb250cmFjdHM6IHsneyd9IGNsb2NrLCBzdGF0ZURpZ2VzdCB7J30nfTwvY29kZT4g4oCUIHRoZSBzdGF0ZSByb290IG9mIDxzdHJvbmc+cHVibGlzaGVkIGFwcGxpY2F0aW9uIGNvbnRyYWN0czwvc3Ryb25nPiB0aGlzIG9wZXJhdG9yIGhhcyBhY2NlcHRlZCBpbnRvIHRoZSBCZWFjb24tdHJhY2tlZCBzZXQuXG4gICAgICAgIEFuIG9wdGlvbmFsIDxjb2RlPnNpZGVjaGFpbjwvY29kZT4gaGVhZCBtYXkgYWxzbyBhcHBlYXIgZm9yIG9wZXJhdGlvbmFsIHN0YXRlLiBUaGUgaHViIHBlcnNpc3RzIHRoZSBvcmRlcmVkIGVwb2NoIGNoYWluIG9uIGRpc2sgKDxjb2RlPmJlYWNvbi9DSEFJTjwvY29kZT4pIHdpdGggTWVya2xlIG1ldGFkYXRhIGZvciBjb25zaXN0ZW5jeSBjaGVja3MuXG4gICAgICAgIFRoYXQgaXMgPHN0cm9uZz52ZXJpZmlhYmxlIGFnYWluc3QgeW91ciBvd24gYml0Y29pbmQ8L3N0cm9uZz4gKG9yIGV4cGxvcmVyKSBpbmRlcGVuZGVudGx5IG9mIEZhYnJpYyBwZWVycy5cbiAgICAgIDwvcD5cbiAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzU1NScsIG1heFdpZHRoOiAnNDRyZW0nLCBsaW5lSGVpZ2h0OiAxLjUsIG1hcmdpbkJvdHRvbTogJzAuNjVlbScgfX0+XG4gICAgICAgIDxzdHJvbmc+UmVwcm9kdWNpbmcgZmVkZXJhdGlvbiBhcHByb3ZhbDo8L3N0cm9uZz4gdmFsaWRhdG9yIHBhcnRpYWwgc2lnbmF0dXJlcyB0YXJnZXQgYSA8c3Ryb25nPmNhbm9uaWNhbCBzaWduaW5nIHN0cmluZzwvc3Ryb25nPiBkZXJpdmVkIGZyb20gdGhlIGVwb2NoIHBheWxvYWQgKHNlZXsnICd9XG4gICAgICAgIDxjb2RlPkRpc3RyaWJ1dGVkRXhlY3V0aW9uLnNpZ25pbmdTdHJpbmdGb3JCZWFjb25FcG9jaDwvY29kZT4gaW4gPGNvZGU+QGZhYnJpYy9jb3JlPC9jb2RlPikuIFdpdGggdGhlIHNhbWUgcGF5bG9hZCwgbWFuaWZlc3QgcHVia2V5cywgYW5kIHRocmVzaG9sZCwgYW55b25lIGNhbiByZS1ydW57JyAnfVxuICAgICAgICA8Y29kZT52ZXJpZnlGZWRlcmF0aW9uV2l0bmVzc09uTWVzc2FnZTwvY29kZT4gdG8gY29uZmlybSBhIDxzdHJvbmc+ay1vZi1uIFNjaG5vcnIgd2l0bmVzczwvc3Ryb25nPiBtYXRjaGVzIHdoYXQgdGhlIGh1YiBhY2NlcHRlZC4gUHVibGljIEpTT04gZm9yIG9wZXJhdG9yczp7JyAnfVxuICAgICAgICA8YSBocmVmPVwiL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL21hbmlmZXN0XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPkdFVCAvc2VydmljZXMvZGlzdHJpYnV0ZWQvbWFuaWZlc3Q8L2E+XG4gICAgICAgIHsnIMK3ICd9XG4gICAgICAgIDxhIGhyZWY9XCIvc2VydmljZXMvZGlzdHJpYnV0ZWQvZXBvY2hcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+R0VUIC9zZXJ2aWNlcy9kaXN0cmlidXRlZC9lcG9jaDwvYT4uXG4gICAgICA8L3A+XG4gICAgICA8TWVzc2FnZSB3YXJuaW5nIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgIDxNZXNzYWdlLkhlYWRlcj5TY29wZSAoYXZvaWQgbWl4aW5nIGd1YXJhbnRlZXMpPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+XG4gICAgICAgICAgPHN0cm9uZz5FeGVjdXRpb24gY29udHJhY3RzPC9zdHJvbmc+IHVzZSBhIHNlcGFyYXRlIGRldGVybWluaXN0aWMgPGNvZGU+cnVuQ29tbWl0bWVudEhleDwvY29kZT4gb3ZlciB0aGUgb3Bjb2RlIHRyYWNlIGFuZCBvcHRpb25hbCBMMSBPUF9SRVRVUk4gYW5jaG9yaW5nIOKAlCB0aGV5IGRveycgJ31cbiAgICAgICAgICA8c3Ryb25nPm5vdDwvc3Ryb25nPiBjb25zdW1lIGZlZGVyYXRpb24gd2l0bmVzc2VzLiBUaGUgPHN0cm9uZz5UYXByb290IGZlZGVyYXRpb24gdmF1bHQ8L3N0cm9uZz4gaXMgYSBzZXBhcmF0ZSBMMSBsZWc6IGRlcG9zaXQgYWRkcmVzcyBhbmQgVVRYTyBzY2FuIGFyZSBvbiB0aGUgSHViOyBjby1zaWduaW5nIHNwZW5kcyBzdGF5cyB3aXRoIHZhbGlkYXRvcnMgKFBTQlQpLlxuICAgICAgICA8L3A+XG4gICAgICA8L01lc3NhZ2U+XG5cbiAgICAgIDxIZWFkZXIgYXM9XCJoM1wiPk9uLWNoYWluIGZlZGVyYXRpb24gdmF1bHQgKFRhcHJvb3QpPC9IZWFkZXI+XG4gICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM1NTUnLCBtYXhXaWR0aDogJzQ0cmVtJywgbGluZUhlaWdodDogMS41LCBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nIH19PlxuICAgICAgICBUaGUgTDEgbGVnIG9mIHRoZSBjb250cmFjdCBpcyBhIDxzdHJvbmc+VGFwcm9vdDwvc3Ryb25nPiBhZGRyZXNzIGNvbnRyb2xsZWQgYnkgdGhlIGZlZGVyYXRpb246IGFueW9uZSBjYW4gPHN0cm9uZz5mdW5kPC9zdHJvbmc+IGl0LlxuICAgICAgICBUaGUgaHViIGRlcml2ZXMgYSBkZXRlcm1pbmlzdGljIDxzdHJvbmc+ay1vZi1uIHRhcHNjcmlwdDwvc3Ryb25nPiAoc29ydGVkIHZhbGlkYXRvciBwdWJrZXlzLCBzYW1lIGxpc3QgYXMgdGhlIG1hbmlmZXN0KSB3aXRoIGEgTlVNUyBpbnRlcm5hbCBrZXkg4oCUIHNwZW5kIG9ubHkgdmlhIHNjcmlwdCBwYXRoLlxuICAgICAgICA8c3Ryb25nPkJlYWNvbiBvcGVyYXRvcnM8L3N0cm9uZz4gdXNlIDxjb2RlPlByZXBhcmVGZWRlcmF0aW9uVmF1bHRXaXRoZHJhd2FsUHNidDwvY29kZT4gKGFkbWluIHRva2VuLCA8Y29kZT5QT1NUIC9zZXJ2aWNlcy9ycGM8L2NvZGU+KSB0byBidWlsZCBhbiA8c3Ryb25nPnVuc2lnbmVkPC9zdHJvbmc+IFBTQlQgZnJvbSBhIGZ1bmRpbmcgdHg7IGVhY2ggdmFsaWRhdG9yIHNpZ25zIHdpdGggdGhlaXIga2V5IHVudGlsIHRocmVzaG9sZCBzaWduYXR1cmVzIGV4aXN0LCB0aGVuIGJyb2FkY2FzdC5cbiAgICAgICAgVGhlIDxzdHJvbmc+ZGVmYXVsdDwvc3Ryb25nPiBwb2xpY3kgZm9yIGluY29taW5nIGRlcG9zaXRzIGlzIHRvIHRyZWF0IHRoZW0gYXMgPHN0cm9uZz5tYXR1cmUgYWZ0ZXIge0RFRkFVTFRfTDFfREVQT1NJVF9NQVRVUklUWV9CTE9DS1N9IGNvbmZpcm1hdGlvbnM8L3N0cm9uZz4gKH5vbmUgZGF5IG9uIG1haW5uZXQpIGJlZm9yZSBwbGFubmluZyB3aXRoZHJhd2FscyDigJQgc3VyZmFjZWQgb257JyAnfVxuICAgICAgICA8YSBocmVmPVwiL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL3ZhdWx0L3V0eG9zXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPkdFVCAvc2VydmljZXMvZGlzdHJpYnV0ZWQvdmF1bHQvdXR4b3M8L2E+XG4gICAgICAgIHsnICd9cGVyIFVUWE8gKDxjb2RlPm1hdHVyZWRGb3JXaXRoZHJhd2FsUG9saWN5PC9jb2RlPikuXG4gICAgICA8L3A+XG4gICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICA8TWVzc2FnZS5IZWFkZXI+SHViIEhUVFAgLyBSUEMgKGxpdmUpPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+XG4gICAgICAgICAgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC92YXVsdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5HRVQgL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL3ZhdWx0PC9hPlxuICAgICAgICAgIHsnIOKAlCBhZGRyZXNzLCB0YXBzY3JpcHQsIHBvbGljeSDCtyAnfVxuICAgICAgICAgIDxhIGhyZWY9XCIvc2VydmljZXMvZGlzdHJpYnV0ZWQvdmF1bHQvdXR4b3NcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+R0VUIC9zZXJ2aWNlcy9kaXN0cmlidXRlZC92YXVsdC91dHhvczwvYT5cbiAgICAgICAgICB7JyDigJQgd2F0Y2gtb25seSBiYWxhbmNlIHZpYSAnfVxuICAgICAgICAgIDxjb2RlPnNjYW50eG91dHNldDwvY29kZT5cbiAgICAgICAgICB7JyDCtyBtYW5pZmVzdCBpbmNsdWRlcyBhIGNvbXBhY3QgJ31cbiAgICAgICAgICA8Y29kZT5mZWRlcmF0aW9uVmF1bHQ8L2NvZGU+XG4gICAgICAgICAgeycgc3VtbWFyeSB3aGVuIHZhbGlkYXRvcnMgYXJlIHNldC4gRmFicmljLXNpZGUgZW5mb3JjZW1lbnQgKGVwb2Nocywgc2lkZWNoYWluIHBhdGNoZXMpIGlzIHVuY2hhbmdlZC4nfVxuICAgICAgICA8L3A+XG4gICAgICA8L01lc3NhZ2U+XG5cbiAgICAgIDxIZWFkZXIgYXM9XCJoM1wiIHN0eWxlPXt7IG1hcmdpblRvcDogJzEuMjVlbScgfX0+VGhpcyBodWIgKGxpdmUgcG9saWN5KTwvSGVhZGVyPlxuICAgICAgPERpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsIHNpemU9XCJzbWFsbFwiIG1hcmdpbkJvdHRvbT1cIjFlbVwiIC8+XG5cbiAgICAgIDxUcmFja2VkQXBwbGljYXRpb25Db250cmFjdHNQYW5lbCAvPlxuXG4gICAgICA8SGVhZGVyIGFzPVwiaDNcIj5PcGVyYXRvciBjaGVja2xpc3Q8L0hlYWRlcj5cbiAgICAgIDxMaXN0IGJ1bGxldGVkIHJlbGF4ZWQ+XG4gICAgICAgIDxMaXN0Lkl0ZW0+Q29uZmlndXJlIHZhbGlkYXRvciBwdWJrZXlzIGFuZCB0aHJlc2hvbGQgdW5kZXIgPExpbmsgdG89XCIvZmVkZXJhdGlvbnNcIj5GZWRlcmF0aW9uczwvTGluaz4gKG9yIDxMaW5rIHRvPVwiL3NldHRpbmdzL2ZlZGVyYXRpb25cIj5TZXR0aW5ncyDihpIgRGlzdHJpYnV0ZWQgZmVkZXJhdGlvbjwvTGluaz4pLjwvTGlzdC5JdGVtPlxuICAgICAgICA8TGlzdC5JdGVtPkNvbmZpcm0gZXBvY2ggc3RyZWFtOiA8YSBocmVmPVwiL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL2Vwb2NoXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPkdFVCAvc2VydmljZXMvZGlzdHJpYnV0ZWQvZXBvY2g8L2E+OyB2YXVsdDogPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC92YXVsdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5HRVQgL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL3ZhdWx0PC9hPiBhbmQgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC92YXVsdC91dHhvc1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5VVFhPczwvYT4uPC9MaXN0Lkl0ZW0+XG4gICAgICAgIDxMaXN0Lkl0ZW0+Q29tcGFyZSBlcG9jaCBibG9jayBoZWlnaHQvaGFzaCB0byBMMSBhbmQgc3BvdC1jaGVjayB3aXRuZXNzIGJ5dGVzIGluIENJIHVzaW5nIDxjb2RlPkBmYWJyaWMvY29yZTwvY29kZT4gaGVscGVycyAoc2VlIGRlc2lnbiBkb2MpLjwvTGlzdC5JdGVtPlxuICAgICAgICA8TGlzdC5JdGVtPlxuICAgICAgICAgIENvb3JkaW5hdGUgd2l0aCBwZWVyczp7JyAnfVxuICAgICAgICAgIHtwZWVyc05hdiA/IDxMaW5rIHRvPVwiL3BlZXJzXCI+UGVlcnM8L0xpbms+IDogPHNwYW4+UGVlcnMgKHBhc3RlIGh1YiBhZG1pbiB0b2tlbiB1bmRlciBBZG1pbiB0byBvcGVuIHRoZSBsaXN0KTwvc3Bhbj59XG4gICAgICAgICAgeycgJ31hbmQgZmVkZXJhdGlvbiBpbnZpdGVzIGZyb20gcGVlciBkZXRhaWwgKGFkbWluKS5cbiAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgQWNjZXB0IGluYm91bmQgPGNvZGU+Q09OVFJBQ1RfUFVCTElTSDwvY29kZT4gb2ZmZXJzIChhYm92ZSkgc28gdGhleSBlbnRlciB0aGUgQmVhY29uIGNvbnRyYWN0cyBzdGF0ZSByb290OyBzaWRlY2hhaW4gYXBwIHBheWxvYWRzOnsnICd9XG4gICAgICAgICAgPExpbmsgdG89XCIvc2lkZWNoYWluc1wiPlN0YXRlY2hhaW48L0xpbms+O1xuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgPExpbmsgdG89XCIvYWN0aXZpdGllc1wiPkFjdGl2aXR5IGxvZzwvTGluaz4gc2hvd3MgPHN0cm9uZz5CaXRjb2luIGJsb2Nrczwvc3Ryb25nPiBhbmQgaHViIGxvZyBldmVudHM7IDxMaW5rIHRvPVwiL25vdGlmaWNhdGlvbnNcIj5Ob3RpZmljYXRpb25zPC9MaW5rPiAoYmVsbCkgbGlzdHMgd2FsbGV0IGFuZCBQYXlqb2luIHRvYXN0cy5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgRnVydGhlciByZWFkaW5nOnsnICd9XG4gICAgICAgICAgPGEgaHJlZj17QkVBQ09OX0RFU0lHTl9ET0NfSFJFRn0gdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPkJlYWNvbiArIHNpZGVjaGFpbiBkZXNpZ24gJmFtcDsgcm9hZG1hcDwvYT5cbiAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgIDxhIGhyZWY9e1NJREVDSEFJTl9JTkRFWF9ET0NfSFJFRn0gdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlNpZGVjaGFpbiAmYW1wOyBleGVjdXRpb24gaW5kZXg8L2E+LlxuICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgIDwvTGlzdD5cbiAgICA8L1NlZ21lbnQ+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQmVhY29uRmVkZXJhdGlvbkhvbWU7XG4iXSwibmFtZXMiOlsiX3NsaWNlZFRvQXJyYXkiLCJyIiwiZSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJhIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0IiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibGVuZ3RoIiwibiIsImwiLCJTeW1ib2wiLCJpdGVyYXRvciIsImkiLCJ1IiwiZiIsIm8iLCJuZXh0IiwiT2JqZWN0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImlzQXJyYXkiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJIZWFkZXIiLCJJY29uIiwiU2VnbWVudCIsIkxpc3QiLCJNZXNzYWdlIiwiRGlzdHJpYnV0ZWRGZWRlcmF0aW9uUGFuZWwiLCJUcmFja2VkQXBwbGljYXRpb25Db250cmFjdHNQYW5lbCIsIl9yZXF1aXJlMyIsIlJFR1RFU1RfRVBPQ0hfSU5URVJWQUxfTUlOVVRFUyIsIk5PTl9SRUdURVNUX0NBREVOQ0VfTEFCRUwiLCJERUZBVUxUX0wxX0RFUE9TSVRfTUFUVVJJVFlfQkxPQ0tTIiwiX3JlcXVpcmU0IiwibG9hZEh1YlVpRmVhdHVyZUZsYWdzIiwic3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MiLCJfcmVxdWlyZTUiLCJyZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIiwiQkVBQ09OX0RFU0lHTl9ET0NfSFJFRiIsIlNJREVDSEFJTl9JTkRFWF9ET0NfSFJFRiIsIkJlYWNvbkZlZGVyYXRpb25Ib21lIiwiX1JlYWN0JHVzZVN0YXRlIiwidXNlU3RhdGUiLCJfUmVhY3QkdXNlU3RhdGUyIiwiaHViVWlUaWNrIiwic2V0SHViVWlUaWNrIiwidXNlRWZmZWN0IiwidWYiLCJoYXNBZG1pblRva2VuIiwicGVlcnNOYXYiLCJwZWVycyIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsIm1heFdpZHRoIiwibWFyZ2luIiwiYXMiLCJ0byIsImJhc2ljIiwic2l6ZSIsIm1hcmdpbkJvdHRvbSIsImlkIiwiQ29udGVudCIsImNvbG9yIiwibGluZUhlaWdodCIsImhyZWYiLCJ0YXJnZXQiLCJyZWwiLCJ3YXJuaW5nIiwiaW5mbyIsIm1hcmdpblRvcCIsImJ1bGxldGVkIiwicmVsYXhlZCIsIkl0ZW0iLCJGcmFnbWVudCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/BeaconFederationHome.js\n\n}')},"./components/BitcoinBlockList.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Header = _require2.Header,\n Icon = _require2.Icon,\n List = _require2.List,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n fetchBitcoinStatus = _require3.fetchBitcoinStatus,\n fetchExplorerData = _require3.fetchExplorerData,\n loadUpstreamSettings = _require3.loadUpstreamSettings,\n getSpendWalletContext = _require3.getSpendWalletContext;\nvar _require4 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require4.readHubAdminTokenFromBrowser;\nvar _require5 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require5.formatSatsDisplay;\nfunction trimHash(value) {\n var s = String(value || \'\');\n if (!s) return \'n/a\';\n if (s.length <= 20) return s;\n return "".concat(s.slice(0, 10), "...").concat(s.slice(-10));\n}\nvar BitcoinBlockList = /*#__PURE__*/function (_React$Component) {\n function BitcoinBlockList(props) {\n var _this;\n _classCallCheck(this, BitcoinBlockList);\n _this = _callSuper(this, BitcoinBlockList, [props]);\n _this.state = {\n loading: true,\n upstream: loadUpstreamSettings(),\n blocks: [],\n transactions: []\n };\n return _this;\n }\n _inherits(BitcoinBlockList, _React$Component);\n return _createClass(BitcoinBlockList, [{\n key: "componentDidMount",\n value: function () {\n var _componentDidMount = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _context.n = 1;\n return this.refresh();\n case 1:\n return _context.a(2);\n }\n }, _callee, this);\n }));\n function componentDidMount() {\n return _componentDidMount.apply(this, arguments);\n }\n return componentDidMount;\n }()\n }, {\n key: "refresh",\n value: function () {\n var _refresh = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var spend, net, adminTok, effectiveAdminTok, upstreamAdmin, _yield$Promise$all, _yield$Promise$all2, data, status, explorerBlocks, explorerTxs, statusBlocks, statusTxs, _t;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n this.setState({\n loading: true\n });\n _context2.p = 1;\n spend = getSpendWalletContext(this.props.identity || {});\n net = this.props.bitcoin && this.props.bitcoin.network ? String(this.props.bitcoin.network).toLowerCase() : \'regtest\';\n adminTok = this.props.adminToken != null && String(this.props.adminToken).trim() ? String(this.props.adminToken).trim() : \'\';\n effectiveAdminTok = adminTok || readHubAdminTokenFromBrowser(null) || \'\';\n upstreamAdmin = _objectSpread(_objectSpread({}, this.state.upstream), {}, {\n hubAdminToken: effectiveAdminTok\n });\n _context2.n = 2;\n return Promise.all([fetchExplorerData(upstreamAdmin, spend, {\n network: net,\n adminToken: effectiveAdminTok\n })["catch"](function () {\n return {};\n }), fetchBitcoinStatus(upstreamAdmin)["catch"](function () {\n return {};\n })]);\n case 2:\n _yield$Promise$all = _context2.v;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);\n data = _yield$Promise$all2[0];\n status = _yield$Promise$all2[1];\n explorerBlocks = Array.isArray(data && data.blocks) ? data.blocks : [];\n explorerTxs = Array.isArray(data && data.transactions) ? data.transactions : [];\n statusBlocks = Array.isArray(status && status.blocks) ? status.blocks : [];\n statusTxs = Array.isArray(status && status.transactions) ? status.transactions : [];\n this.setState({\n loading: false,\n blocks: explorerBlocks.length ? explorerBlocks : statusBlocks,\n transactions: explorerTxs.length ? explorerTxs : statusTxs\n });\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t = _context2.v;\n this.setState({\n loading: false,\n blocks: [],\n transactions: []\n });\n case 4:\n return _context2.a(2);\n }\n }, _callee2, this, [[1, 3]]);\n }));\n function refresh() {\n return _refresh.apply(this, arguments);\n }\n return refresh;\n }()\n }, {\n key: "render",\n value: function render() {\n var _this2 = this;\n return /*#__PURE__*/React.createElement("div", {\n className: "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, {\n loading: this.state.loading\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left"\n }), "Bitcoin"), /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "list"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Explorer"))), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n onClick: function onClick() {\n return _this2.refresh();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh"))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Recent Blocks"), this.state.blocks.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No block data yet.") : /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true\n }, this.state.blocks.map(function (block, idx) {\n return /*#__PURE__*/React.createElement(List.Item, {\n key: block.hash || block.id || idx\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, block.hash || block.id ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/blocks/".concat(encodeURIComponent(block.hash || block.id))\n }, "#", block.height != null ? block.height : \'n/a\', " - ", trimHash(block.hash || block.id)) : /*#__PURE__*/React.createElement("span", null, "#", block.height != null ? block.height : \'n/a\', " - hash unavailable")), /*#__PURE__*/React.createElement(List.Description, null, block.time ? new Date(Number(block.time) * 1000).toLocaleString() : \'time unavailable\')));\n }))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Mempool Transactions (", this.state.transactions.length, ")"), this.state.transactions.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No transaction data yet.") : /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true\n }, this.state.transactions.map(function (tx, idx) {\n var tid = tx.txid || tx.id || \'\';\n return /*#__PURE__*/React.createElement(List.Item, {\n key: tid || idx\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, tid ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(String(tid)))\n }, trimHash(tid)) : \'n/a\'), /*#__PURE__*/React.createElement(List.Description, null, tx.value != null ? "".concat(tx.value, " BTC") : tx.amountSats != null ? "".concat(formatSatsDisplay(tx.amountSats), " sats") : \'amount unavailable\')));\n }))));\n }\n }]);\n}(React.Component);\nmodule.exports = BitcoinBlockList;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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aWMvaHViLy4vY29tcG9uZW50cy9CaXRjb2luQmxvY2tMaXN0LmpzPzZjNDciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHsgQnV0dG9uLCBIZWFkZXIsIEljb24sIExpc3QsIFNlZ21lbnQgfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCB7IGZldGNoQml0Y29pblN0YXR1cywgZmV0Y2hFeHBsb3JlckRhdGEsIGxvYWRVcHN0cmVhbVNldHRpbmdzLCBnZXRTcGVuZFdhbGxldENvbnRleHQgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9iaXRjb2luQ2xpZW50Jyk7XG5jb25zdCB7IHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJBZG1pblRva2VuQnJvd3NlcicpO1xuY29uc3QgeyBmb3JtYXRTYXRzRGlzcGxheSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2Zvcm1hdFNhdHMnKTtcblxuZnVuY3Rpb24gdHJpbUhhc2ggKHZhbHVlKSB7XG4gIGNvbnN0IHMgPSBTdHJpbmcodmFsdWUgfHwgJycpO1xuICBpZiAoIXMpIHJldHVybiAnbi9hJztcbiAgaWYgKHMubGVuZ3RoIDw9IDIwKSByZXR1cm4gcztcbiAgcmV0dXJuIGAke3Muc2xpY2UoMCwgMTApfS4uLiR7cy5zbGljZSgtMTApfWA7XG59XG5cbmNsYXNzIEJpdGNvaW5CbG9ja0xpc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICB1cHN0cmVhbTogbG9hZFVwc3RyZWFtU2V0dGluZ3MoKSxcbiAgICAgIGJsb2NrczogW10sXG4gICAgICB0cmFuc2FjdGlvbnM6IFtdXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2ggKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzcGVuZCA9IGdldFNwZW5kV2FsbGV0Q29udGV4dCh0aGlzLnByb3BzLmlkZW50aXR5IHx8IHt9KTtcbiAgICAgIGNvbnN0IG5ldCA9ICh0aGlzLnByb3BzLmJpdGNvaW4gJiYgdGhpcy5wcm9wcy5iaXRjb2luLm5ldHdvcmspXG4gICAgICAgID8gU3RyaW5nKHRoaXMucHJvcHMuYml0Y29pbi5uZXR3b3JrKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIDogJ3JlZ3Rlc3QnO1xuICAgICAgY29uc3QgYWRtaW5Ub2sgPSAodGhpcy5wcm9wcy5hZG1pblRva2VuICE9IG51bGwgJiYgU3RyaW5nKHRoaXMucHJvcHMuYWRtaW5Ub2tlbikudHJpbSgpKVxuICAgICAgICA/IFN0cmluZyh0aGlzLnByb3BzLmFkbWluVG9rZW4pLnRyaW0oKVxuICAgICAgICA6ICcnO1xuICAgICAgY29uc3QgZWZmZWN0aXZlQWRtaW5Ub2sgPSBhZG1pblRvayB8fCByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKG51bGwpIHx8ICcnO1xuICAgICAgY29uc3QgdXBzdHJlYW1BZG1pbiA9IHtcbiAgICAgICAgLi4udGhpcy5zdGF0ZS51cHN0cmVhbSxcbiAgICAgICAgaHViQWRtaW5Ub2tlbjogZWZmZWN0aXZlQWRtaW5Ub2tcbiAgICAgIH07XG4gICAgICBjb25zdCBbZGF0YSwgc3RhdHVzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgZmV0Y2hFeHBsb3JlckRhdGEodXBzdHJlYW1BZG1pbiwgc3BlbmQsIHsgbmV0d29yazogbmV0LCBhZG1pblRva2VuOiBlZmZlY3RpdmVBZG1pblRvayB9KS5jYXRjaCgoKSA9PiAoe30pKSxcbiAgICAgICAgZmV0Y2hCaXRjb2luU3RhdHVzKHVwc3RyZWFtQWRtaW4pLmNhdGNoKCgpID0+ICh7fSkpXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IGV4cGxvcmVyQmxvY2tzID0gQXJyYXkuaXNBcnJheShkYXRhICYmIGRhdGEuYmxvY2tzKSA/IGRhdGEuYmxvY2tzIDogW107XG4gICAgICBjb25zdCBleHBsb3JlclR4cyA9IEFycmF5LmlzQXJyYXkoZGF0YSAmJiBkYXRhLnRyYW5zYWN0aW9ucykgPyBkYXRhLnRyYW5zYWN0aW9ucyA6IFtdO1xuICAgICAgY29uc3Qgc3RhdHVzQmxvY2tzID0gQXJyYXkuaXNBcnJheShzdGF0dXMgJiYgc3RhdHVzLmJsb2NrcykgPyBzdGF0dXMuYmxvY2tzIDogW107XG4gICAgICBjb25zdCBzdGF0dXNUeHMgPSBBcnJheS5pc0FycmF5KHN0YXR1cyAmJiBzdGF0dXMudHJhbnNhY3Rpb25zKSA/IHN0YXR1cy50cmFuc2FjdGlvbnMgOiBbXTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgYmxvY2tzOiBleHBsb3JlckJsb2Nrcy5sZW5ndGggPyBleHBsb3JlckJsb2NrcyA6IHN0YXR1c0Jsb2NrcyxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBleHBsb3JlclR4cy5sZW5ndGggPyBleHBsb3JlclR4cyA6IHN0YXR1c1R4c1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlLCBibG9ja3M6IFtdLCB0cmFuc2FjdGlvbnM6IFtdIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmFkZS1pblwiPlxuICAgICAgICA8U2VnbWVudCBsb2FkaW5nPXt0aGlzLnN0YXRlLmxvYWRpbmd9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJywgZ2FwOiAnMC41ZW0nLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICcwLjVlbScsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW5cIiBiYXNpYyBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYXJyb3cgbGVmdFwiIC8+XG4gICAgICAgICAgICAgICAgQml0Y29pblxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImgyXCIgc3R5bGU9e3sgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJsaXN0XCIgLz5cbiAgICAgICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+RXhwbG9yZXI8L0hlYWRlci5Db250ZW50PlxuICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPEJ1dHRvbiBiYXNpYyBzaXplPVwic21hbGxcIiBvbkNsaWNrPXsoKSA9PiB0aGlzLnJlZnJlc2goKX0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgUmVmcmVzaFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgPEhlYWRlciBhcz1cImgzXCI+UmVjZW50IEJsb2NrczwvSGVhZGVyPlxuICAgICAgICAgIHt0aGlzLnN0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19Pk5vIGJsb2NrIGRhdGEgeWV0LjwvcD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPExpc3QgZGl2aWRlZCByZWxheGVkPlxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5ibG9ja3MubWFwKChibG9jaywgaWR4KSA9PiAoXG4gICAgICAgICAgICAgICAgPExpc3QuSXRlbSBrZXk9e2Jsb2NrLmhhc2ggfHwgYmxvY2suaWQgfHwgaWR4fT5cbiAgICAgICAgICAgICAgICAgIDxMaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxMaXN0LkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICB7KGJsb2NrLmhhc2ggfHwgYmxvY2suaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vYmxvY2tzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGJsb2NrLmhhc2ggfHwgYmxvY2suaWQpfWB9PiN7YmxvY2suaGVpZ2h0ICE9IG51bGwgPyBibG9jay5oZWlnaHQgOiAnbi9hJ30gLSB7dHJpbUhhc2goYmxvY2suaGFzaCB8fCBibG9jay5pZCl9PC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgOiA8c3Bhbj4je2Jsb2NrLmhlaWdodCAhPSBudWxsID8gYmxvY2suaGVpZ2h0IDogJ24vYSd9IC0gaGFzaCB1bmF2YWlsYWJsZTwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICAgIDwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxMaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIHtibG9jay50aW1lID8gbmV3IERhdGUoTnVtYmVyKGJsb2NrLnRpbWUpICogMTAwMCkudG9Mb2NhbGVTdHJpbmcoKSA6ICd0aW1lIHVuYXZhaWxhYmxlJ31cbiAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9MaXN0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgPEhlYWRlciBhcz1cImgzXCI+TWVtcG9vbCBUcmFuc2FjdGlvbnMgKHt0aGlzLnN0YXRlLnRyYW5zYWN0aW9ucy5sZW5ndGh9KTwvSGVhZGVyPlxuICAgICAgICAgIHt0aGlzLnN0YXRlLnRyYW5zYWN0aW9ucy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19Pk5vIHRyYW5zYWN0aW9uIGRhdGEgeWV0LjwvcD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPExpc3QgZGl2aWRlZCByZWxheGVkPlxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS50cmFuc2FjdGlvbnMubWFwKCh0eCwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlkID0gdHgudHhpZCB8fCB0eC5pZCB8fCAnJztcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPExpc3QuSXRlbSBrZXk9e3RpZCB8fCBpZHh9PlxuICAgICAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgIDxMaXN0LkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aWQgPyA8TGluayB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodGlkKSl9YH0+e3RyaW1IYXNoKHRpZCl9PC9MaW5rPiA6ICduL2EnfVxuICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPExpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dHgudmFsdWUgIT0gbnVsbCA/IGAke3R4LnZhbHVlfSBCVENgIDogKHR4LmFtb3VudFNhdHMgIT0gbnVsbCA/IGAke2Zvcm1hdFNhdHNEaXNwbGF5KHR4LmFtb3VudFNhdHMpfSBzYXRzYCA6ICdhbW91bnQgdW5hdmFpbGFibGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L0xpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L0xpc3Q+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TZWdtZW50PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJpdGNvaW5CbG9ja0xpc3Q7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3NsaWNlZFRvQXJyYXkiLCJyIiwiZSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJhIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0IiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbmd0aCIsIm4iLCJsIiwiaSIsInUiLCJmIiwibmV4dCIsIk9iamVjdCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJpc0FycmF5Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3JlZ2VuZXJhdG9yIiwidG9TdHJpbmdUYWciLCJjIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsInAiLCJ5IiwiRyIsInYiLCJkIiwiYmluZCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJfaW5oZXJpdHMiLCJfc2V0UHJvdG90eXBlT2YiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJIZWFkZXIiLCJJY29uIiwiTGlzdCIsIlNlZ21lbnQiLCJfcmVxdWlyZTMiLCJmZXRjaEJpdGNvaW5TdGF0dXMiLCJmZXRjaEV4cGxvcmVyRGF0YSIsImxvYWRVcHN0cmVhbVNldHRpbmdzIiwiZ2V0U3BlbmRXYWxsZXRDb250ZXh0IiwiX3JlcXVpcmU0IiwicmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciIsIl9yZXF1aXJlNSIsImZvcm1hdFNhdHNEaXNwbGF5IiwidHJpbUhhc2giLCJzIiwiY29uY2F0IiwiQml0Y29pbkJsb2NrTGlzdCIsIl9SZWFjdCRDb21wb25lbnQiLCJwcm9wcyIsIl90aGlzIiwic3RhdGUiLCJsb2FkaW5nIiwidXBzdHJlYW0iLCJibG9ja3MiLCJ0cmFuc2FjdGlvbnMiLCJfY29tcG9uZW50RGlkTW91bnQiLCJfY2FsbGVlIiwiX2NvbnRleHQiLCJyZWZyZXNoIiwiY29tcG9uZW50RGlkTW91bnQiLCJfcmVmcmVzaCIsIl9jYWxsZWUyIiwic3BlbmQiLCJuZXQiLCJhZG1pblRvayIsImVmZmVjdGl2ZUFkbWluVG9rIiwidXBzdHJlYW1BZG1pbiIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJkYXRhIiwic3RhdHVzIiwiZXhwbG9yZXJCbG9ja3MiLCJleHBsb3JlclR4cyIsInN0YXR1c0Jsb2NrcyIsInN0YXR1c1R4cyIsIl90IiwiX2NvbnRleHQyIiwic2V0U3RhdGUiLCJpZGVudGl0eSIsImJpdGNvaW4iLCJuZXR3b3JrIiwidG9Mb3dlckNhc2UiLCJhZG1pblRva2VuIiwidHJpbSIsImh1YkFkbWluVG9rZW4iLCJhbGwiLCJyZW5kZXIiLCJfdGhpczIiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiZ2FwIiwiZmxleFdyYXAiLCJhcyIsInRvIiwiYmFzaWMiLCJzaXplIiwibWFyZ2luIiwiQ29udGVudCIsIm9uQ2xpY2siLCJjb2xvciIsImRpdmlkZWQiLCJyZWxheGVkIiwibWFwIiwiYmxvY2siLCJpZHgiLCJJdGVtIiwiaGFzaCIsImlkIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaGVpZ2h0IiwiRGVzY3JpcHRpb24iLCJ0aW1lIiwiRGF0ZSIsInRvTG9jYWxlU3RyaW5nIiwidHgiLCJ0aWQiLCJ0eGlkIiwiYW1vdW50U2F0cyIsIkNvbXBvbmVudCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/BitcoinBlockList.js\n\n}')},"./components/BitcoinBlockView.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link,\n useParams = _require.useParams;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Divider = _require2.Divider,\n Grid = _require2.Grid,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Segment = _require2.Segment,\n Table = _require2.Table,\n Message = _require2.Message,\n Label = _require2.Label,\n Loader = _require2.Loader;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n fetchBlockByHash = _require3.fetchBlockByHash,\n loadUpstreamSettings = _require3.loadUpstreamSettings;\nvar _require4 = __webpack_require__(/*! ../constants */ "./constants.js"),\n UI_NUMBER_LOG_EXP_THRESHOLD = _require4.UI_NUMBER_LOG_EXP_THRESHOLD,\n UI_NUMBER_COMPACT_FRACTION_THRESHOLD = _require4.UI_NUMBER_COMPACT_FRACTION_THRESHOLD;\nvar BLOCK_HASH_REGEX = /^[a-fA-F0-9]{64}$/;\nfunction shortHash(h) {\n var s = String(h || \'\').trim();\n if (!s) return \'—\';\n if (s.length <= 18) return s;\n return "".concat(s.slice(0, 10), "\\u2026").concat(s.slice(-8));\n}\nfunction blockLink(hash) {\n var h = String(hash || \'\').trim();\n if (!h) return null;\n return "/services/bitcoin/blocks/".concat(encodeURIComponent(h));\n}\nfunction fmtInt(n) {\n if (n == null || n === \'\') return \'—\';\n var x = Number(n);\n if (!Number.isFinite(x)) return \'—\';\n return x.toLocaleString();\n}\nfunction fmtDifficulty(n) {\n if (n == null || n === \'\') return \'—\';\n var x = Number(n);\n if (!Number.isFinite(x)) return \'—\';\n if (x >= UI_NUMBER_LOG_EXP_THRESHOLD) return x.toExponential(4);\n if (x >= UI_NUMBER_COMPACT_FRACTION_THRESHOLD) return x.toLocaleString(undefined, {\n maximumFractionDigits: 2\n });\n return x.toLocaleString(undefined, {\n maximumFractionDigits: 8\n });\n}\n\n/**\n * @param {object} props\n * @param {string} props.label\n * @param {React.ReactNode} props.children\n */\nfunction MetaRow(_ref) {\n var label = _ref.label,\n children = _ref.children;\n return /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true,\n style: {\n fontWeight: 600,\n color: \'#666\',\n width: \'11rem\'\n }\n }, label), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n wordBreak: \'break-all\',\n fontFamily: \'monospace\',\n fontSize: \'0.92em\'\n }\n }, children));\n}\nfunction BitcoinBlockView() {\n var _useParams = useParams(),\n blockhashParam = _useParams.blockhash;\n var rawHash = (blockhashParam || \'\').trim();\n var _React$useState = React.useState(!!rawHash),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n loading = _React$useState2[0],\n setLoading = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n error = _React$useState4[0],\n setError = _React$useState4[1];\n var _React$useState5 = React.useState(null),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n block = _React$useState6[0],\n setBlock = _React$useState6[1];\n var loadBlock = React.useCallback(function () {\n if (!rawHash) {\n setLoading(false);\n setError(null);\n setBlock(null);\n return;\n }\n if (!BLOCK_HASH_REGEX.test(rawHash)) {\n setLoading(false);\n setError(\'Invalid block hash. Must be 64 hex characters.\');\n setBlock(null);\n return;\n }\n setLoading(true);\n setError(null);\n var upstream = loadUpstreamSettings();\n fetchBlockByHash(upstream, rawHash).then(function (data) {\n setBlock(data || null);\n })["catch"](function (err) {\n setBlock(null);\n setError(err && err.message ? err.message : String(err));\n })["finally"](function () {\n return setLoading(false);\n });\n }, [rawHash]);\n React.useEffect(function () {\n loadBlock();\n }, [loadBlock]);\n var txs = Array.isArray(block && block.tx) ? block.tx : [];\n var hash = block && block.hash || rawHash;\n var prev = block && block.previousblockhash ? String(block.previousblockhash).trim() : \'\';\n var next = block && block.nextblockhash ? String(block.nextblockhash).trim() : \'\';\n var prevPath = prev ? blockLink(prev) : null;\n var nextPath = next ? blockLink(next) : null;\n var height = block && block.height != null ? block.height : null;\n var timeSec = block && block.time != null ? Number(block.time) : null;\n var medianSec = block && block.mediantime != null ? Number(block.mediantime) : null;\n var nTxRpc = block && block.nTx != null ? block.nTx : txs.length;\n return /*#__PURE__*/React.createElement("div", {\n className: "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'flex-start\',\n gap: \'0.75em\',\n flexWrap: \'wrap\',\n marginBottom: \'0.25em\'\n },\n role: "banner"\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small",\n "aria-label": "Back to Bitcoin dashboard",\n title: "Bitcoin home (status, wallet, explorer, and tools)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Bitcoin"), /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n style: {\n margin: 0,\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.35em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cube",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Block ", height != null && Number.isFinite(Number(height)) ? "#".concat(fmtInt(height)) : hash ? shortHash(hash) : \'\', /*#__PURE__*/React.createElement(Header.Subheader, {\n style: {\n marginTop: \'0.35em\'\n }\n }, timeSec != null && Number.isFinite(timeSec) ? /*#__PURE__*/React.createElement("span", {\n title: "Unix ".concat(timeSec)\n }, new Date(timeSec * 1000).toLocaleString()) : \'—\', medianSec != null && Number.isFinite(medianSec) && medianSec !== timeSec && /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.75em\',\n color: \'#888\'\n }\n }, "(median ", new Date(medianSec * 1000).toLocaleString(), ")"))))), !loading && !error && block && (prevPath || nextPath) && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'1rem\'\n }\n }, /*#__PURE__*/React.createElement(Button.Group, {\n size: "small"\n }, prevPath ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: prevPath,\n title: prev\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left"\n }), "Parent block") : /*#__PURE__*/React.createElement(Button, {\n disabled: true,\n title: "No parent (genesis or unknown)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left"\n }), "Parent block"), nextPath ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: nextPath,\n title: next\n }, "Child block", /*#__PURE__*/React.createElement(Icon, {\n name: "arrow right",\n style: {\n marginLeft: \'0.5em\'\n }\n })) : /*#__PURE__*/React.createElement(Button, {\n disabled: true,\n title: "No known descendant (chain tip on this hub)"\n }, "Child block", /*#__PURE__*/React.createElement(Icon, {\n name: "arrow right",\n style: {\n marginLeft: \'0.5em\'\n }\n }))))), !rawHash && /*#__PURE__*/React.createElement(Message, {\n warning: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Missing block hash"), /*#__PURE__*/React.createElement("p", null, "Open a block from the block explorer so the URL includes a 64-character hex block id."), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/blocks",\n primary: true,\n style: {\n marginTop: \'0.75em\'\n },\n title: "Open block explorer (recent blocks and mempool)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), "Block Explorer")), !!rawHash && loading && /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: "centered"\n }), /*#__PURE__*/React.createElement("p", {\n style: {\n textAlign: \'center\',\n marginTop: \'1em\',\n color: \'#666\'\n }\n }, "Loading block\\u2026")), !!rawHash && error && !loading && /*#__PURE__*/React.createElement(Message, {\n negative: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Failed to load block"), /*#__PURE__*/React.createElement("p", null, error), BLOCK_HASH_REGEX.test(rawHash) ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\',\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n onClick: function onClick() {\n return void loadBlock();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/blocks",\n size: "small",\n basic: true,\n title: "Open block explorer (recent blocks and mempool)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "list"\n }), "Block Explorer")) : null), !!rawHash && !loading && !error && !block && /*#__PURE__*/React.createElement(Message, {\n warning: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Block not found"), /*#__PURE__*/React.createElement("p", null, "This hub\'s Bitcoin node does not have that block, or the hash is unknown on this network."), BLOCK_HASH_REGEX.test(rawHash) ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\',\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n onClick: function onClick() {\n return void loadBlock();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/blocks",\n size: "small",\n basic: true,\n title: "Open block explorer (recent blocks and mempool)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "list"\n }), "Block Explorer")) : null), !loading && !error && block && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Grid, {\n stackable: true\n }, /*#__PURE__*/React.createElement(Grid.Column, {\n width: 16\n }, /*#__PURE__*/React.createElement(Label.Group, {\n size: "small"\n }, block.confirmations != null && /*#__PURE__*/React.createElement(Label, {\n color: "blue",\n title: "Confirmations on this node"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check circle"\n }), fmtInt(block.confirmations), " confirmations"), /*#__PURE__*/React.createElement(Label, {\n title: "Transaction count"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "exchange"\n }), fmtInt(nTxRpc), " txs"), block.size != null && /*#__PURE__*/React.createElement(Label, {\n title: "Serialized block size"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "database"\n }), fmtInt(block.size), " B"), block.weight != null && /*#__PURE__*/React.createElement(Label, {\n title: "BIP141 block weight"\n }, "weight ", fmtInt(block.weight)), block.strippedsize != null && block.strippedsize !== block.size && /*#__PURE__*/React.createElement(Label, {\n title: "Stripped size (witness discount)"\n }, "stripped ", fmtInt(block.strippedsize), " B")))), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginBottom: \'0.75em\'\n }\n }, "Block details"), /*#__PURE__*/React.createElement(Table, {\n basic: "very",\n compact: true,\n celled: true,\n unstackable: true\n }, /*#__PURE__*/React.createElement(Table.Body, null, /*#__PURE__*/React.createElement(MetaRow, {\n label: "Hash"\n }, /*#__PURE__*/React.createElement("span", {\n title: hash\n }, /*#__PURE__*/React.createElement("code", null, hash))), height != null && /*#__PURE__*/React.createElement(MetaRow, {\n label: "Height"\n }, fmtInt(height)), prev ? /*#__PURE__*/React.createElement(MetaRow, {\n label: "Previous block"\n }, /*#__PURE__*/React.createElement(Link, {\n to: prevPath,\n title: prev\n }, /*#__PURE__*/React.createElement("code", null, shortHash(prev))), /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.5em\',\n color: \'#888\',\n fontSize: \'0.85em\'\n }\n }, "(parent)")) : null, next ? /*#__PURE__*/React.createElement(MetaRow, {\n label: "Next block"\n }, /*#__PURE__*/React.createElement(Link, {\n to: nextPath,\n title: next\n }, /*#__PURE__*/React.createElement("code", null, shortHash(next)))) : /*#__PURE__*/React.createElement(MetaRow, {\n label: "Next block"\n }, /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\'\n }\n }, "\\u2014 (chain tip)")), block.merkleroot ? /*#__PURE__*/React.createElement(MetaRow, {\n label: "Merkle root"\n }, /*#__PURE__*/React.createElement("code", {\n title: block.merkleroot\n }, shortHash(block.merkleroot))) : null, block.version != null && /*#__PURE__*/React.createElement(MetaRow, {\n label: "Version"\n }, fmtInt(block.version), block.versionHex ? /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.5em\',\n color: \'#888\'\n }\n }, "(", block.versionHex, ")") : null), block.bits != null && /*#__PURE__*/React.createElement(MetaRow, {\n label: "Bits"\n }, /*#__PURE__*/React.createElement("code", null, String(block.bits))), block.difficulty != null && /*#__PURE__*/React.createElement(MetaRow, {\n label: "Difficulty"\n }, fmtDifficulty(block.difficulty)), block.nonce != null && /*#__PURE__*/React.createElement(MetaRow, {\n label: "Nonce"\n }, /*#__PURE__*/React.createElement("code", null, fmtInt(block.nonce))), block.chainwork != null && /*#__PURE__*/React.createElement(MetaRow, {\n label: "Chainwork"\n }, /*#__PURE__*/React.createElement("code", {\n title: String(block.chainwork)\n }, shortHash(String(block.chainwork))), /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.5em\',\n color: \'#888\',\n fontSize: \'0.85em\'\n }\n }, "(hex)"))))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Transactions"), txs.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No transactions in this block payload.") : /*#__PURE__*/React.createElement(Table, {\n compact: "very",\n celled: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Txid"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Value"))), /*#__PURE__*/React.createElement(Table.Body, null, txs.slice(0, 200).map(function (tx, idx) {\n var txid = tx && (tx.txid || tx.id) || String(tx);\n var value = tx && Array.isArray(tx.vout) ? tx.vout.reduce(function (acc, v) {\n return acc + Number(v.value || 0);\n }, 0) : null;\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "".concat(txid, ":").concat(idx)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(txid)),\n title: txid,\n "aria-label": "Transaction ".concat(txid)\n }, /*#__PURE__*/React.createElement("code", null, shortHash(txid)))), /*#__PURE__*/React.createElement(Table.Cell, null, value != null ? "".concat(value, " BTC") : \'-\'));\n }))))));\n}\nmodule.exports = BitcoinBlockView;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TUFDWiw2QkFBQXBILE1BQUEsQ0FBMkJvSCxJQUFJO0lBQUcsZ0JBRWxDaEosS0FBQSxDQUFBNkMsYUFBQSxlQUFPdEIsU0FBUyxDQUFDeUgsSUFBSSxDQUFRLENBQ3pCLENBQ0ksQ0FBQyxlQUNiaEosS0FBQSxDQUFBNkMsYUFBQSxDQUFDakMsS0FBSyxDQUFDbUMsSUFBSSxRQUFFakQsS0FBSyxJQUFJLElBQUksTUFBQThCLE1BQUEsQ0FBTTlCLEtBQUssWUFBUyxHQUFnQixDQUNyRCxDQUFDO0VBRWhCLENBQUMsQ0FDUyxDQUNQLENBRUYsQ0FDVCxDQUVELENBQUM7QUFFVjtBQUVBeUosTUFBTSxDQUFDQyxPQUFPLEdBQUdoRyxnQkFBZ0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvQml0Y29pbkJsb2NrVmlldy5qcz83MGM3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBMaW5rLCB1c2VQYXJhbXMgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHtcbiAgQnV0dG9uLFxuICBEaXZpZGVyLFxuICBHcmlkLFxuICBIZWFkZXIsXG4gIEljb24sXG4gIFNlZ21lbnQsXG4gIFRhYmxlLFxuICBNZXNzYWdlLFxuICBMYWJlbCxcbiAgTG9hZGVyXG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IHsgZmV0Y2hCbG9ja0J5SGFzaCwgbG9hZFVwc3RyZWFtU2V0dGluZ3MgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9iaXRjb2luQ2xpZW50Jyk7XG5jb25zdCB7IFVJX05VTUJFUl9MT0dfRVhQX1RIUkVTSE9MRCwgVUlfTlVNQkVSX0NPTVBBQ1RfRlJBQ1RJT05fVEhSRVNIT0xEIH0gPSByZXF1aXJlKCcuLi9jb25zdGFudHMnKTtcblxuY29uc3QgQkxPQ0tfSEFTSF9SRUdFWCA9IC9eW2EtZkEtRjAtOV17NjR9JC87XG5cbmZ1bmN0aW9uIHNob3J0SGFzaCAoaCkge1xuICBjb25zdCBzID0gU3RyaW5nKGggfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFzKSByZXR1cm4gJ+KAlCc7XG4gIGlmIChzLmxlbmd0aCA8PSAxOCkgcmV0dXJuIHM7XG4gIHJldHVybiBgJHtzLnNsaWNlKDAsIDEwKX3igKYke3Muc2xpY2UoLTgpfWA7XG59XG5cbmZ1bmN0aW9uIGJsb2NrTGluayAoaGFzaCkge1xuICBjb25zdCBoID0gU3RyaW5nKGhhc2ggfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFoKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGAvc2VydmljZXMvYml0Y29pbi9ibG9ja3MvJHtlbmNvZGVVUklDb21wb25lbnQoaCl9YDtcbn1cblxuZnVuY3Rpb24gZm10SW50IChuKSB7XG4gIGlmIChuID09IG51bGwgfHwgbiA9PT0gJycpIHJldHVybiAn4oCUJztcbiAgY29uc3QgeCA9IE51bWJlcihuKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoeCkpIHJldHVybiAn4oCUJztcbiAgcmV0dXJuIHgudG9Mb2NhbGVTdHJpbmcoKTtcbn1cblxuZnVuY3Rpb24gZm10RGlmZmljdWx0eSAobikge1xuICBpZiAobiA9PSBudWxsIHx8IG4gPT09ICcnKSByZXR1cm4gJ+KAlCc7XG4gIGNvbnN0IHggPSBOdW1iZXIobik7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHgpKSByZXR1cm4gJ+KAlCc7XG4gIGlmICh4ID49IFVJX05VTUJFUl9MT0dfRVhQX1RIUkVTSE9MRCkgcmV0dXJuIHgudG9FeHBvbmVudGlhbCg0KTtcbiAgaWYgKHggPj0gVUlfTlVNQkVSX0NPTVBBQ1RfRlJBQ1RJT05fVEhSRVNIT0xEKSByZXR1cm4geC50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyIH0pO1xuICByZXR1cm4geC50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiA4IH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BzLmxhYmVsXG4gKiBAcGFyYW0ge1JlYWN0LlJlYWN0Tm9kZX0gcHJvcHMuY2hpbGRyZW5cbiAqL1xuZnVuY3Rpb24gTWV0YVJvdyAoeyBsYWJlbCwgY2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxUYWJsZS5Sb3c+XG4gICAgICA8VGFibGUuQ2VsbCBjb2xsYXBzaW5nIHN0eWxlPXt7IGZvbnRXZWlnaHQ6IDYwMCwgY29sb3I6ICcjNjY2Jywgd2lkdGg6ICcxMXJlbScgfX0+e2xhYmVsfTwvVGFibGUuQ2VsbD5cbiAgICAgIDxUYWJsZS5DZWxsIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcsIGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnLCBmb250U2l6ZTogJzAuOTJlbScgfX0+e2NoaWxkcmVufTwvVGFibGUuQ2VsbD5cbiAgICA8L1RhYmxlLlJvdz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQml0Y29pbkJsb2NrVmlldyAoKSB7XG4gIGNvbnN0IHsgYmxvY2toYXNoOiBibG9ja2hhc2hQYXJhbSB9ID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IHJhd0hhc2ggPSAoYmxvY2toYXNoUGFyYW0gfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoISFyYXdIYXNoKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2Jsb2NrLCBzZXRCbG9ja10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcblxuICBjb25zdCBsb2FkQmxvY2sgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFyYXdIYXNoKSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgc2V0QmxvY2sobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghQkxPQ0tfSEFTSF9SRUdFWC50ZXN0KHJhd0hhc2gpKSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEVycm9yKCdJbnZhbGlkIGJsb2NrIGhhc2guIE11c3QgYmUgNjQgaGV4IGNoYXJhY3RlcnMuJyk7XG4gICAgICBzZXRCbG9jayhudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIGNvbnN0IHVwc3RyZWFtID0gbG9hZFVwc3RyZWFtU2V0dGluZ3MoKTtcblxuICAgIGZldGNoQmxvY2tCeUhhc2godXBzdHJlYW0sIHJhd0hhc2gpXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICBzZXRCbG9jayhkYXRhIHx8IG51bGwpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHNldEJsb2NrKG51bGwpO1xuICAgICAgICBzZXRFcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiBzZXRMb2FkaW5nKGZhbHNlKSk7XG4gIH0sIFtyYXdIYXNoXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBsb2FkQmxvY2soKTtcbiAgfSwgW2xvYWRCbG9ja10pO1xuXG4gIGNvbnN0IHR4cyA9IEFycmF5LmlzQXJyYXkoYmxvY2sgJiYgYmxvY2sudHgpID8gYmxvY2sudHggOiBbXTtcbiAgY29uc3QgaGFzaCA9IChibG9jayAmJiBibG9jay5oYXNoKSB8fCByYXdIYXNoO1xuICBjb25zdCBwcmV2ID0gYmxvY2sgJiYgYmxvY2sucHJldmlvdXNibG9ja2hhc2ggPyBTdHJpbmcoYmxvY2sucHJldmlvdXNibG9ja2hhc2gpLnRyaW0oKSA6ICcnO1xuICBjb25zdCBuZXh0ID0gYmxvY2sgJiYgYmxvY2submV4dGJsb2NraGFzaCA/IFN0cmluZyhibG9jay5uZXh0YmxvY2toYXNoKS50cmltKCkgOiAnJztcbiAgY29uc3QgcHJldlBhdGggPSBwcmV2ID8gYmxvY2tMaW5rKHByZXYpIDogbnVsbDtcbiAgY29uc3QgbmV4dFBhdGggPSBuZXh0ID8gYmxvY2tMaW5rKG5leHQpIDogbnVsbDtcbiAgY29uc3QgaGVpZ2h0ID0gYmxvY2sgJiYgYmxvY2suaGVpZ2h0ICE9IG51bGwgPyBibG9jay5oZWlnaHQgOiBudWxsO1xuICBjb25zdCB0aW1lU2VjID0gYmxvY2sgJiYgYmxvY2sudGltZSAhPSBudWxsID8gTnVtYmVyKGJsb2NrLnRpbWUpIDogbnVsbDtcbiAgY29uc3QgbWVkaWFuU2VjID0gYmxvY2sgJiYgYmxvY2subWVkaWFudGltZSAhPSBudWxsID8gTnVtYmVyKGJsb2NrLm1lZGlhbnRpbWUpIDogbnVsbDtcbiAgY29uc3QgblR4UnBjID0gYmxvY2sgJiYgYmxvY2sublR4ICE9IG51bGwgPyBibG9jay5uVHggOiB0eHMubGVuZ3RoO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9J2ZhZGUtaW4nPlxuICAgICAgPFNlZ21lbnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JywgZ2FwOiAnMC43NWVtJywgZmxleFdyYXA6ICd3cmFwJywgbWFyZ2luQm90dG9tOiAnMC4yNWVtJyB9fVxuICAgICAgICAgIHJvbGU9XCJiYW5uZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pblwiIGJhc2ljIHNpemU9XCJzbWFsbFwiIGFyaWEtbGFiZWw9XCJCYWNrIHRvIEJpdGNvaW4gZGFzaGJvYXJkXCIgdGl0bGU9XCJCaXRjb2luIGhvbWUgKHN0YXR1cywgd2FsbGV0LCBleHBsb3JlciwgYW5kIHRvb2xzKVwiPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgQml0Y29pblxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoMlwiIHN0eWxlPXt7IG1hcmdpbjogMCwgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC4zNWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjdWJlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIDxIZWFkZXIuQ29udGVudD5cbiAgICAgICAgICAgICAgQmxvY2sge2hlaWdodCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIoaGVpZ2h0KSlcbiAgICAgICAgICAgICAgICA/IGAjJHtmbXRJbnQoaGVpZ2h0KX1gXG4gICAgICAgICAgICAgICAgOiAoaGFzaCA/IHNob3J0SGFzaChoYXNoKSA6ICcnKX1cbiAgICAgICAgICAgICAgPEhlYWRlci5TdWJoZWFkZXIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICAgICAgICB7dGltZVNlYyAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh0aW1lU2VjKSA/IChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPXtgVW5peCAke3RpbWVTZWN9YH0+e25ldyBEYXRlKHRpbWVTZWMgKiAxMDAwKS50b0xvY2FsZVN0cmluZygpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgJ+KAlCdcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHttZWRpYW5TZWMgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUobWVkaWFuU2VjKSAmJiBtZWRpYW5TZWMgIT09IHRpbWVTZWMgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNzVlbScsIGNvbG9yOiAnIzg4OCcgfX0+XG4gICAgICAgICAgICAgICAgICAgIChtZWRpYW4ge25ldyBEYXRlKG1lZGlhblNlYyAqIDEwMDApLnRvTG9jYWxlU3RyaW5nKCl9KVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvSGVhZGVyLlN1YmhlYWRlcj5cbiAgICAgICAgICAgIDwvSGVhZGVyLkNvbnRlbnQ+XG4gICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgYmxvY2sgJiYgKHByZXZQYXRoIHx8IG5leHRQYXRoKSAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxcmVtJyB9fT5cbiAgICAgICAgICAgIDxCdXR0b24uR3JvdXAgc2l6ZT0nc21hbGwnPlxuICAgICAgICAgICAgICB7cHJldlBhdGggPyAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89e3ByZXZQYXRofSB0aXRsZT17cHJldn0+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdhcnJvdyBsZWZ0JyAvPlxuICAgICAgICAgICAgICAgICAgUGFyZW50IGJsb2NrXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBkaXNhYmxlZCB0aXRsZT0nTm8gcGFyZW50IChnZW5lc2lzIG9yIHVua25vd24pJz5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9J2Fycm93IGxlZnQnIC8+XG4gICAgICAgICAgICAgICAgICBQYXJlbnQgYmxvY2tcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge25leHRQYXRoID8gKFxuICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPXtuZXh0UGF0aH0gdGl0bGU9e25leHR9PlxuICAgICAgICAgICAgICAgICAgQ2hpbGQgYmxvY2tcbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9J2Fycm93IHJpZ2h0JyBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nIH19IC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBkaXNhYmxlZCB0aXRsZT0nTm8ga25vd24gZGVzY2VuZGFudCAoY2hhaW4gdGlwIG9uIHRoaXMgaHViKSc+XG4gICAgICAgICAgICAgICAgICBDaGlsZCBibG9ja1xuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT0nYXJyb3cgcmlnaHQnIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScgfX0gLz5cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQnV0dG9uLkdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9TZWdtZW50PlxuXG4gICAgICB7IXJhd0hhc2ggJiYgKFxuICAgICAgICA8TWVzc2FnZSB3YXJuaW5nPlxuICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5NaXNzaW5nIGJsb2NrIGhhc2g8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgIDxwPk9wZW4gYSBibG9jayBmcm9tIHRoZSBibG9jayBleHBsb3JlciBzbyB0aGUgVVJMIGluY2x1ZGVzIGEgNjQtY2hhcmFjdGVyIGhleCBibG9jayBpZC48L3A+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2Jsb2Nrc1wiXG4gICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19XG4gICAgICAgICAgICB0aXRsZT1cIk9wZW4gYmxvY2sgZXhwbG9yZXIgKHJlY2VudCBibG9ja3MgYW5kIG1lbXBvb2wpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwiYml0Y29pblwiIC8+XG4gICAgICAgICAgICBCbG9jayBFeHBsb3JlclxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApfVxuXG4gICAgICB7ISFyYXdIYXNoICYmIGxvYWRpbmcgJiYgKFxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8TG9hZGVyIGFjdGl2ZSBpbmxpbmU9XCJjZW50ZXJlZFwiIC8+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgdGV4dEFsaWduOiAnY2VudGVyJywgbWFyZ2luVG9wOiAnMWVtJywgY29sb3I6ICcjNjY2JyB9fT5Mb2FkaW5nIGJsb2Nr4oCmPC9wPlxuICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICApfVxuXG4gICAgICB7ISFyYXdIYXNoICYmIGVycm9yICYmICFsb2FkaW5nICYmIChcbiAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmU+XG4gICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkZhaWxlZCB0byBsb2FkIGJsb2NrPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICA8cD57ZXJyb3J9PC9wPlxuICAgICAgICAgIHtCTE9DS19IQVNIX1JFR0VYLnRlc3QocmF3SGFzaCkgPyAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScsIGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMC41ZW0nLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBzaXplPVwic21hbGxcIiBvbkNsaWNrPXsoKSA9PiB2b2lkIGxvYWRCbG9jaygpfT5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicmVmcmVzaFwiIC8+XG4gICAgICAgICAgICAgICAgUmV0cnlcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBhcz17TGlua31cbiAgICAgICAgICAgICAgICB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2Jsb2Nrc1wiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgIHRpdGxlPVwiT3BlbiBibG9jayBleHBsb3JlciAocmVjZW50IGJsb2NrcyBhbmQgbWVtcG9vbClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImxpc3RcIiAvPlxuICAgICAgICAgICAgICAgIEJsb2NrIEV4cGxvcmVyXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICl9XG5cbiAgICAgIHshIXJhd0hhc2ggJiYgIWxvYWRpbmcgJiYgIWVycm9yICYmICFibG9jayAmJiAoXG4gICAgICAgIDxNZXNzYWdlIHdhcm5pbmc+XG4gICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkJsb2NrIG5vdCBmb3VuZDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgPHA+VGhpcyBodWImYXBvcztzIEJpdGNvaW4gbm9kZSBkb2VzIG5vdCBoYXZlIHRoYXQgYmxvY2ssIG9yIHRoZSBoYXNoIGlzIHVua25vd24gb24gdGhpcyBuZXR3b3JrLjwvcD5cbiAgICAgICAgICB7QkxPQ0tfSEFTSF9SRUdFWC50ZXN0KHJhd0hhc2gpID8gKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc2l6ZT1cInNtYWxsXCIgb25DbGljaz17KCkgPT4gdm9pZCBsb2FkQmxvY2soKX0+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICAgIFJldHJ5XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgICAgdG89XCIvc2VydmljZXMvYml0Y29pbi9ibG9ja3NcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICB0aXRsZT1cIk9wZW4gYmxvY2sgZXhwbG9yZXIgKHJlY2VudCBibG9ja3MgYW5kIG1lbXBvb2wpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJsaXN0XCIgLz5cbiAgICAgICAgICAgICAgICBCbG9jayBFeHBsb3JlclxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApfVxuXG4gICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIGJsb2NrICYmIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICAgIDxHcmlkIHN0YWNrYWJsZT5cbiAgICAgICAgICAgICAgPEdyaWQuQ29sdW1uIHdpZHRoPXsxNn0+XG4gICAgICAgICAgICAgICAgPExhYmVsLkdyb3VwIHNpemU9J3NtYWxsJz5cbiAgICAgICAgICAgICAgICAgIHtibG9jay5jb25maXJtYXRpb25zICE9IG51bGwgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY29sb3I9J2JsdWUnIHRpdGxlPSdDb25maXJtYXRpb25zIG9uIHRoaXMgbm9kZSc+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT0nY2hlY2sgY2lyY2xlJyAvPlxuICAgICAgICAgICAgICAgICAgICAgIHtmbXRJbnQoYmxvY2suY29uZmlybWF0aW9ucyl9IGNvbmZpcm1hdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgdGl0bGU9J1RyYW5zYWN0aW9uIGNvdW50Jz5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT0nZXhjaGFuZ2UnIC8+XG4gICAgICAgICAgICAgICAgICAgIHtmbXRJbnQoblR4UnBjKX0gdHhzXG4gICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAge2Jsb2NrLnNpemUgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbCB0aXRsZT0nU2VyaWFsaXplZCBibG9jayBzaXplJz5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdkYXRhYmFzZScgLz5cbiAgICAgICAgICAgICAgICAgICAgICB7Zm10SW50KGJsb2NrLnNpemUpfSBCXG4gICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge2Jsb2NrLndlaWdodCAhPSBudWxsICYmIChcbiAgICAgICAgICAgICAgICAgICAgPExhYmVsIHRpdGxlPSdCSVAxNDEgYmxvY2sgd2VpZ2h0Jz5cbiAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQge2ZtdEludChibG9jay53ZWlnaHQpfVxuICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHtibG9jay5zdHJpcHBlZHNpemUgIT0gbnVsbCAmJiBibG9jay5zdHJpcHBlZHNpemUgIT09IGJsb2NrLnNpemUgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8TGFiZWwgdGl0bGU9J1N0cmlwcGVkIHNpemUgKHdpdG5lc3MgZGlzY291bnQpJz5cbiAgICAgICAgICAgICAgICAgICAgICBzdHJpcHBlZCB7Zm10SW50KGJsb2NrLnN0cmlwcGVkc2l6ZSl9IEJcbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbC5Hcm91cD5cbiAgICAgICAgICAgICAgPC9HcmlkLkNvbHVtbj5cbiAgICAgICAgICAgIDwvR3JpZD5cblxuICAgICAgICAgICAgPERpdmlkZXIgLz5cblxuICAgICAgICAgICAgPEhlYWRlciBhcz0naDQnIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+QmxvY2sgZGV0YWlsczwvSGVhZGVyPlxuICAgICAgICAgICAgPFRhYmxlIGJhc2ljPSd2ZXJ5JyBjb21wYWN0IGNlbGxlZCB1bnN0YWNrYWJsZT5cbiAgICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAgPE1ldGFSb3cgbGFiZWw9J0hhc2gnPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9e2hhc2h9Pjxjb2RlPntoYXNofTwvY29kZT48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9NZXRhUm93PlxuICAgICAgICAgICAgICAgIHtoZWlnaHQgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICA8TWV0YVJvdyBsYWJlbD0nSGVpZ2h0Jz5cbiAgICAgICAgICAgICAgICAgICAge2ZtdEludChoZWlnaHQpfVxuICAgICAgICAgICAgICAgICAgPC9NZXRhUm93PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge3ByZXYgPyAoXG4gICAgICAgICAgICAgICAgICA8TWV0YVJvdyBsYWJlbD0nUHJldmlvdXMgYmxvY2snPlxuICAgICAgICAgICAgICAgICAgICA8TGluayB0bz17cHJldlBhdGh9IHRpdGxlPXtwcmV2fT5cbiAgICAgICAgICAgICAgICAgICAgICA8Y29kZT57c2hvcnRIYXNoKHByZXYpfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nLCBjb2xvcjogJyM4ODgnLCBmb250U2l6ZTogJzAuODVlbScgfX0+KHBhcmVudCk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L01ldGFSb3c+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAge25leHQgPyAoXG4gICAgICAgICAgICAgICAgICA8TWV0YVJvdyBsYWJlbD0nTmV4dCBibG9jayc+XG4gICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtuZXh0UGF0aH0gdGl0bGU9e25leHR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPntzaG9ydEhhc2gobmV4dCl9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICA8L01ldGFSb3c+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxNZXRhUm93IGxhYmVsPSdOZXh0IGJsb2NrJz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjODg4JyB9fT7igJQgKGNoYWluIHRpcCk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L01ldGFSb3c+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7YmxvY2subWVya2xlcm9vdCA/IChcbiAgICAgICAgICAgICAgICAgIDxNZXRhUm93IGxhYmVsPSdNZXJrbGUgcm9vdCc+XG4gICAgICAgICAgICAgICAgICAgIDxjb2RlIHRpdGxlPXtibG9jay5tZXJrbGVyb290fT57c2hvcnRIYXNoKGJsb2NrLm1lcmtsZXJvb3QpfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgIDwvTWV0YVJvdz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7YmxvY2sudmVyc2lvbiAhPSBudWxsICYmIChcbiAgICAgICAgICAgICAgICAgIDxNZXRhUm93IGxhYmVsPSdWZXJzaW9uJz5cbiAgICAgICAgICAgICAgICAgICAge2ZtdEludChibG9jay52ZXJzaW9uKX1cbiAgICAgICAgICAgICAgICAgICAge2Jsb2NrLnZlcnNpb25IZXggPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJywgY29sb3I6ICcjODg4JyB9fT4oe2Jsb2NrLnZlcnNpb25IZXh9KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICA8L01ldGFSb3c+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7YmxvY2suYml0cyAhPSBudWxsICYmIChcbiAgICAgICAgICAgICAgICAgIDxNZXRhUm93IGxhYmVsPSdCaXRzJz5cbiAgICAgICAgICAgICAgICAgICAgPGNvZGU+e1N0cmluZyhibG9jay5iaXRzKX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICA8L01ldGFSb3c+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7YmxvY2suZGlmZmljdWx0eSAhPSBudWxsICYmIChcbiAgICAgICAgICAgICAgICAgIDxNZXRhUm93IGxhYmVsPSdEaWZmaWN1bHR5Jz5cbiAgICAgICAgICAgICAgICAgICAge2ZtdERpZmZpY3VsdHkoYmxvY2suZGlmZmljdWx0eSl9XG4gICAgICAgICAgICAgICAgICA8L01ldGFSb3c+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7YmxvY2subm9uY2UgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICA8TWV0YVJvdyBsYWJlbD0nTm9uY2UnPlxuICAgICAgICAgICAgICAgICAgICA8Y29kZT57Zm10SW50KGJsb2NrLm5vbmNlKX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICA8L01ldGFSb3c+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7YmxvY2suY2hhaW53b3JrICE9IG51bGwgJiYgKFxuICAgICAgICAgICAgICAgICAgPE1ldGFSb3cgbGFiZWw9J0NoYWlud29yayc+XG4gICAgICAgICAgICAgICAgICAgIDxjb2RlIHRpdGxlPXtTdHJpbmcoYmxvY2suY2hhaW53b3JrKX0+e3Nob3J0SGFzaChTdHJpbmcoYmxvY2suY2hhaW53b3JrKSl9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nLCBjb2xvcjogJyM4ODgnLCBmb250U2l6ZTogJzAuODVlbScgfX0+KGhleCk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L01ldGFSb3c+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9J2gzJz5UcmFuc2FjdGlvbnM8L0hlYWRlcj5cbiAgICAgICAgICAgIHt0eHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19Pk5vIHRyYW5zYWN0aW9ucyBpbiB0aGlzIGJsb2NrIHBheWxvYWQuPC9wPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFRhYmxlIGNvbXBhY3Q9J3ZlcnknIGNlbGxlZD5cbiAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+VHhpZDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+VmFsdWU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICAgIHt0eHMuc2xpY2UoMCwgMjAwKS5tYXAoKHR4LCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHhpZCA9ICh0eCAmJiAodHgudHhpZCB8fCB0eC5pZCkpIHx8IFN0cmluZyh0eCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdHggJiYgQXJyYXkuaXNBcnJheSh0eC52b3V0KVxuICAgICAgICAgICAgICAgICAgICAgID8gdHgudm91dC5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgTnVtYmVyKHYudmFsdWUgfHwgMCksIDApXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3cga2V5PXtgJHt0eGlkfToke2lkeH1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHR4aWQpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3R4aWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YFRyYW5zYWN0aW9uICR7dHhpZH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3Nob3J0SGFzaCh0eGlkKX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPnt2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9IEJUQ2AgOiAnLSd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCaXRjb2luQmxvY2tWaWV3O1xuIl0sIm5hbWVzIjpbIl9zbGljZWRUb0FycmF5IiwiciIsImUiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwiYSIsIl9hcnJheUxpa2VUb0FycmF5IiwidCIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbmd0aCIsIm4iLCJsIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpIiwidSIsImYiLCJvIiwibmV4dCIsIk9iamVjdCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJpc0FycmF5IiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJMaW5rIiwidXNlUGFyYW1zIiwiX3JlcXVpcmUyIiwiQnV0dG9uIiwiRGl2aWRlciIsIkdyaWQiLCJIZWFkZXIiLCJJY29uIiwiU2VnbWVudCIsIlRhYmxlIiwiTWVzc2FnZSIsIkxhYmVsIiwiTG9hZGVyIiwiX3JlcXVpcmUzIiwiZmV0Y2hCbG9ja0J5SGFzaCIsImxvYWRVcHN0cmVhbVNldHRpbmdzIiwiX3JlcXVpcmU0IiwiVUlfTlVNQkVSX0xPR19FWFBfVEhSRVNIT0xEIiwiVUlfTlVNQkVSX0NPTVBBQ1RfRlJBQ1RJT05fVEhSRVNIT0xEIiwiQkxPQ0tfSEFTSF9SRUdFWCIsInNob3J0SGFzaCIsImgiLCJzIiwiU3RyaW5nIiwidHJpbSIsImNvbmNhdCIsImJsb2NrTGluayIsImhhc2giLCJlbmNvZGVVUklDb21wb25lbnQiLCJmbXRJbnQiLCJ4IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJ0b0xvY2FsZVN0cmluZyIsImZtdERpZmZpY3VsdHkiLCJ0b0V4cG9uZW50aWFsIiwidW5kZWZpbmVkIiwibWF4aW11bUZyYWN0aW9uRGlnaXRzIiwiTWV0YVJvdyIsIl9yZWYiLCJsYWJlbCIsImNoaWxkcmVuIiwiY3JlYXRlRWxlbWVudCIsIlJvdyIsIkNlbGwiLCJjb2xsYXBzaW5nIiwic3R5bGUiLCJmb250V2VpZ2h0IiwiY29sb3IiLCJ3aWR0aCIsIndvcmRCcmVhayIsImZvbnRGYW1pbHkiLCJmb250U2l6ZSIsIkJpdGNvaW5CbG9ja1ZpZXciLCJfdXNlUGFyYW1zIiwiYmxvY2toYXNoUGFyYW0iLCJibG9ja2hhc2giLCJyYXdIYXNoIiwiX1JlYWN0JHVzZVN0YXRlIiwidXNlU3RhdGUiLCJfUmVhY3QkdXNlU3RhdGUyIiwibG9hZGluZyIsInNldExvYWRpbmciLCJfUmVhY3QkdXNlU3RhdGUzIiwiX1JlYWN0JHVzZVN0YXRlNCIsImVycm9yIiwic2V0RXJyb3IiLCJfUmVhY3QkdXNlU3RhdGU1IiwiX1JlYWN0JHVzZVN0YXRlNiIsImJsb2NrIiwic2V0QmxvY2siLCJsb2FkQmxvY2siLCJ1c2VDYWxsYmFjayIsInVwc3RyZWFtIiwidGhlbiIsImRhdGEiLCJlcnIiLCJtZXNzYWdlIiwidXNlRWZmZWN0IiwidHhzIiwidHgiLCJwcmV2IiwicHJldmlvdXNibG9ja2hhc2giLCJuZXh0YmxvY2toYXNoIiwicHJldlBhdGgiLCJuZXh0UGF0aCIsImhlaWdodCIsInRpbWVTZWMiLCJ0aW1lIiwibWVkaWFuU2VjIiwibWVkaWFudGltZSIsIm5UeFJwYyIsIm5UeCIsImNsYXNzTmFtZSIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwiZ2FwIiwiZmxleFdyYXAiLCJtYXJnaW5Cb3R0b20iLCJyb2xlIiwiYXMiLCJ0byIsImJhc2ljIiwic2l6ZSIsInRpdGxlIiwibWFyZ2luIiwiQ29udGVudCIsIlN1YmhlYWRlciIsIm1hcmdpblRvcCIsIkRhdGUiLCJtYXJnaW5MZWZ0IiwiR3JvdXAiLCJkaXNhYmxlZCIsIndhcm5pbmciLCJwcmltYXJ5IiwiYWN0aXZlIiwiaW5saW5lIiwidGV4dEFsaWduIiwibmVnYXRpdmUiLCJ0eXBlIiwib25DbGljayIsIkZyYWdtZW50Iiwic3RhY2thYmxlIiwiQ29sdW1uIiwiY29uZmlybWF0aW9ucyIsIndlaWdodCIsInN0cmlwcGVkc2l6ZSIsImNvbXBhY3QiLCJjZWxsZWQiLCJ1bnN0YWNrYWJsZSIsIkJvZHkiLCJtZXJrbGVyb290IiwidmVyc2lvbiIsInZlcnNpb25IZXgiLCJiaXRzIiwiZGlmZmljdWx0eSIsIm5vbmNlIiwiY2hhaW53b3JrIiwiSGVhZGVyQ2VsbCIsIm1hcCIsImlkeCIsInR4aWQiLCJpZCIsInZvdXQiLCJyZWR1Y2UiLCJhY2MiLCJ2Iiwia2V5IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/BitcoinBlockView.js\n\n}')},"./components/BitcoinHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Checkbox = _require2.Checkbox,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Input = _require2.Input,\n List = _require2.List,\n Loader = _require2.Loader,\n Message = _require2.Message,\n Modal = _require2.Modal,\n Segment = _require2.Segment,\n Table = _require2.Table;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n clearBalanceCache = _require3.clearBalanceCache,\n createLightningChannel = _require3.createLightningChannel,\n createLightningInvoice = _require3.createLightningInvoice,\n createPayjoinDeposit = _require3.createPayjoinDeposit,\n decodeLightningInvoice = _require3.decodeLightningInvoice,\n deriveAndStoreReceiveAddress = _require3.deriveAndStoreReceiveAddress,\n fetchAddressBalance = _require3.fetchAddressBalance,\n fetchBitcoinStatus = _require3.fetchBitcoinStatus,\n fetchBitcoinPeers = _require3.fetchBitcoinPeers,\n fetchBitcoinNetworkSummary = _require3.fetchBitcoinNetworkSummary,\n broadcastRawTransaction = _require3.broadcastRawTransaction,\n fetchExplorerData = _require3.fetchExplorerData,\n fetchLightningChannels = _require3.fetchLightningChannels,\n fetchLightningStatus = _require3.fetchLightningStatus,\n fetchPayjoinCapabilities = _require3.fetchPayjoinCapabilities,\n fetchPayjoinSessions = _require3.fetchPayjoinSessions,\n fetchPayjoinSession = _require3.fetchPayjoinSession,\n fetchReceiveAddress = _require3.fetchReceiveAddress,\n fetchUTXOs = _require3.fetchUTXOs,\n fetchWalletSummary = _require3.fetchWalletSummary,\n fetchWalletSummaryWithCache = _require3.fetchWalletSummaryWithCache,\n getSpendWalletContext = _require3.getSpendWalletContext,\n getNextReceiveWalletContext = _require3.getNextReceiveWalletContext,\n loadUpstreamSettings = _require3.loadUpstreamSettings,\n loadPayjoinPreferences = _require3.loadPayjoinPreferences,\n savePayjoinPreferences = _require3.savePayjoinPreferences,\n payLightningInvoice = _require3.payLightningInvoice,\n reserveNextReceiveAddress = _require3.reserveNextReceiveAddress,\n saveUpstreamSettings = _require3.saveUpstreamSettings,\n sendPayment = _require3.sendPayment,\n generateBlock = _require3.generateBlock,\n requestFaucet = _require3.requestFaucet;\nvar _require4 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require4.formatSatsDisplay,\n formatBtcFromSats = _require4.formatBtcFromSats;\nvar _require5 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require5.readHubAdminTokenFromBrowser;\nvar _require6 = __webpack_require__(/*! ../functions/uiNotifications */ "./functions/uiNotifications.js"),\n copyToClipboard = _require6.copyToClipboard,\n pushUiNotification = _require6.pushUiNotification;\nvar _require7 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require7.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require7.subscribeHubUiFeatureFlags;\nvar _require8 = __webpack_require__(/*! ../constants */ "./constants.js"),\n SATS_PER_BTC = _require8.SATS_PER_BTC,\n UI_NUMBER_LOG_EXP_THRESHOLD = _require8.UI_NUMBER_LOG_EXP_THRESHOLD;\nvar HubRegtestAdminTokenPanel = __webpack_require__(/*! ./HubRegtestAdminTokenPanel */ "./components/HubRegtestAdminTokenPanel.js");\nvar BitcoinWalletBranchBar = __webpack_require__(/*! ./BitcoinWalletBranchBar */ "./components/BitcoinWalletBranchBar.js");\nvar BitcoinHome = /*#__PURE__*/function (_React$Component) {\n function BitcoinHome(props) {\n var _this;\n _classCallCheck(this, BitcoinHome);\n _this = _callSuper(this, BitcoinHome, [props]);\n var upstream = loadUpstreamSettings();\n var payjoinPrefs = loadPayjoinPreferences();\n _this.state = {\n loading: true,\n refreshing: false,\n error: null,\n advancedOpen: false,\n settingsOpen: false,\n upstreamDraft: _objectSpread({}, upstream),\n upstream: upstream,\n wallet: {\n walletId: \'\',\n fingerprint: \'\',\n xpub: \'\',\n hasPrivateKey: false,\n balanceSats: 0,\n confirmedSats: 0,\n unconfirmedSats: 0,\n address: \'\',\n receiveIndex: 0\n },\n blocks: [],\n transactions: [],\n utxos: [],\n paymentTo: \'\',\n paymentAmountSats: \'\',\n paymentMemo: \'\',\n invoiceAmountSats: \'\',\n invoiceMemo: \'\',\n invoiceInput: \'\',\n payjoinEnabled: !!payjoinPrefs.operatorDeposit,\n payjoinAmountSats: \'\',\n payjoinLabel: \'\',\n payjoinMemo: \'\',\n payjoinSessionId: \'\',\n payjoinResult: null,\n payjoinCapabilities: {\n available: false\n },\n payjoinSessionsSnapshot: null,\n bitcoinStatus: {\n available: false,\n status: \'STARTING\'\n },\n lightningStatus: {\n available: false,\n status: \'UNAVAILABLE\'\n },\n lightningChannels: [],\n lightningOutputs: [],\n channelCreateRemote: \'\',\n channelCreateAmountSats: \'100000\',\n channelCreatePushMsat: \'\',\n channelCreateResult: null,\n channelCreateLoading: false,\n paymentResult: null,\n lightningResult: null,\n faucetAddress: \'\',\n faucetAmountSats: \'10000\',\n faucetResult: null,\n lookupAddress: \'\',\n lookupResult: null,\n lookupLoading: false,\n nodePeers: [],\n nodeNetwork: {},\n rawTxHex: \'\',\n rawTxResult: null,\n txLookupId: \'\',\n txLookupError: null,\n hubUiFlagsRev: 0\n };\n _this._onBitcoinHashChange = function () {\n return _this._syncBitcoinHashScroll();\n };\n return _this;\n }\n _inherits(BitcoinHome, _React$Component);\n return _createClass(BitcoinHome, [{\n key: "_syncBitcoinHashScroll",\n value: function _syncBitcoinHashScroll() {\n if (typeof window === \'undefined\') return;\n var raw = (window.location.hash || \'\').replace(/^#/, \'\');\n if (!raw) return;\n requestAnimationFrame(function () {\n var el = document.getElementById(raw);\n if (el) el.scrollIntoView({\n behavior: \'smooth\',\n block: \'start\'\n });\n });\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n var _this2 = this;\n this.refresh();\n this._onGlobalStateUpdate = this._onGlobalStateUpdate.bind(this);\n window.addEventListener(\'globalStateUpdate\', this._onGlobalStateUpdate);\n this._syncBitcoinHashScroll();\n if (typeof window !== \'undefined\') {\n window.addEventListener(\'hashchange\', this._onBitcoinHashChange);\n this._hubUiFlagsUnsub = subscribeHubUiFeatureFlags(function () {\n _this2.setState(function (s) {\n return {\n hubUiFlagsRev: (s.hubUiFlagsRev || 0) + 1\n };\n });\n });\n }\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n if (this._onGlobalStateUpdate) {\n window.removeEventListener(\'globalStateUpdate\', this._onGlobalStateUpdate);\n }\n if (typeof window !== \'undefined\') {\n window.removeEventListener(\'hashchange\', this._onBitcoinHashChange);\n }\n if (typeof this._hubUiFlagsUnsub === \'function\') {\n this._hubUiFlagsUnsub();\n this._hubUiFlagsUnsub = null;\n }\n }\n }, {\n key: "_onGlobalStateUpdate",\n value: function _onGlobalStateUpdate(e) {\n var d = e && e.detail;\n if (!d || !d.operation || d.operation.path !== \'/bitcoin\' || !d.globalState || !d.globalState.bitcoin) return;\n this.setState({\n bitcoinStatus: d.globalState.bitcoin\n });\n // Keep client wallet figures fresh whenever bitcoin status patches arrive.\n this._refreshClientBalanceFromHubStatus(d.globalState.bitcoin);\n }\n }, {\n key: "_refreshClientBalanceFromHubStatus",\n value: function () {\n var _refreshClientBalanceFromHubStatus2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var bitcoinStatus,\n identity,\n wallet,\n network,\n summary,\n balanceSats,\n confirmedSats,\n unconfirmedSats,\n _args = arguments;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n bitcoinStatus = _args.length > 0 && _args[0] !== undefined ? _args[0] : null;\n if (!this._refreshingClientBalance) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n this._refreshingClientBalance = true;\n _context.p = 2;\n identity = this.getIdentity();\n wallet = getSpendWalletContext(identity);\n network = bitcoinStatus && bitcoinStatus.network ? String(bitcoinStatus.network).toLowerCase() : this.state.bitcoinStatus && this.state.bitcoinStatus.network ? String(this.state.bitcoinStatus.network).toLowerCase() : \'\';\n _context.n = 3;\n return fetchWalletSummaryWithCache(this.state.upstream, wallet, {\n network: network\n })["catch"](function () {\n return {};\n });\n case 3:\n summary = _context.v;\n if (!(!summary || _typeof(summary) !== \'object\')) {\n _context.n = 4;\n break;\n }\n return _context.a(2);\n case 4:\n balanceSats = Number(summary.balanceSats != null ? summary.balanceSats : summary.balance || 0);\n confirmedSats = Number(summary.confirmedSats != null ? summary.confirmedSats : balanceSats);\n unconfirmedSats = Number(summary.unconfirmedSats || 0);\n this.setState(function (prev) {\n return {\n wallet: _objectSpread(_objectSpread({}, prev.wallet), {}, {\n balanceSats: balanceSats,\n confirmedSats: confirmedSats,\n unconfirmedSats: unconfirmedSats\n })\n };\n });\n case 5:\n _context.p = 5;\n this._refreshingClientBalance = false;\n return _context.f(5);\n case 6:\n return _context.a(2);\n }\n }, _callee, this, [[2,, 5, 6]]);\n }));\n function _refreshClientBalanceFromHubStatus() {\n return _refreshClientBalanceFromHubStatus2.apply(this, arguments);\n }\n return _refreshClientBalanceFromHubStatus;\n }()\n }, {\n key: "componentDidUpdate",\n value: function componentDidUpdate(prevProps, prevState) {\n var prevId = prevProps && prevProps.identity && prevProps.identity.xpub;\n var nextId = this.props && this.props.identity && this.props.identity.xpub;\n if (prevId !== nextId) this.refresh();\n if (prevState.refreshing && !this.state.refreshing) {\n this._syncBitcoinHashScroll();\n }\n }\n }, {\n key: "satsToBTC",\n value: function satsToBTC(value) {\n return formatBtcFromSats(value);\n }\n\n /** Compute Lightning balance from listfunds outputs (client-side fallback when status returns 0). */\n }, {\n key: "getLightningBalanceFromOutputs",\n value: function getLightningBalanceFromOutputs() {\n var outputs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var confirmed = 0;\n var unconfirmed = 0;\n var immature = 0;\n var _iterator = _createForOfIteratorHelper(outputs),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var o = _step.value;\n var amt = o.amount_msat != null ? Math.floor(Number(o.amount_msat) / 1000) : o.amount_sat != null ? Number(o.amount_sat) : 0;\n var status = String(o.status || \'\').toLowerCase();\n if (status === \'confirmed\') confirmed += amt;else if (status === \'unconfirmed\') unconfirmed += amt;else if (status === \'immature\') immature += amt;else if (status !== \'spent\') unconfirmed += amt;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return {\n confirmed: confirmed,\n unconfirmed: unconfirmed,\n immature: immature\n };\n }\n }, {\n key: "trimHash",\n value: function trimHash() {\n var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'\';\n var left = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 8;\n var right = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 8;\n var text = String(value || \'\');\n if (text.length <= left + right + 1) return text;\n return "".concat(text.slice(0, left), "...").concat(text.slice(-right));\n }\n }, {\n key: "formatDifficulty",\n value: function formatDifficulty(value) {\n var n = Number(value);\n if (!Number.isFinite(n)) return \'—\';\n if (n >= UI_NUMBER_LOG_EXP_THRESHOLD) return n.toExponential(4);\n return n.toLocaleString();\n }\n }, {\n key: "formatBytes",\n value: function formatBytes(n) {\n var v = Number(n);\n if (!Number.isFinite(v) || v < 0) return \'—\';\n if (v < 1024) return "".concat(Math.round(v), " B");\n if (v < 1048576) return "".concat((v / 1024).toFixed(1), " KiB");\n return "".concat((v / 1048576).toFixed(2), " MiB");\n }\n }, {\n key: "handleBroadcastRawTx",\n value: function () {\n var _handleBroadcastRawTx = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var token, settings, r, err, _t;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n token = this.props.adminToken;\n if (token) {\n _context2.n = 1;\n break;\n }\n this.setState({\n rawTxResult: {\n error: \'Admin token required. Complete node setup or refresh your session.\'\n }\n });\n return _context2.a(2);\n case 1:\n settings = _objectSpread(_objectSpread({}, this.state.upstream), {}, {\n apiToken: token\n });\n _context2.p = 2;\n _context2.n = 3;\n return broadcastRawTransaction(settings, this.state.rawTxHex);\n case 3:\n r = _context2.v;\n err = r && (r.error || r.message);\n if (!err) {\n _context2.n = 4;\n break;\n }\n this.setState({\n rawTxResult: {\n error: String(err)\n }\n });\n return _context2.a(2);\n case 4:\n this.setState({\n rawTxResult: r,\n rawTxHex: \'\'\n });\n _context2.n = 5;\n return this.refresh();\n case 5:\n _context2.n = 7;\n break;\n case 6:\n _context2.p = 6;\n _t = _context2.v;\n this.setState({\n rawTxResult: {\n error: _t && _t.message ? _t.message : String(_t)\n }\n });\n case 7:\n return _context2.a(2);\n }\n }, _callee2, this, [[2, 6]]);\n }));\n function handleBroadcastRawTx() {\n return _handleBroadcastRawTx.apply(this, arguments);\n }\n return handleBroadcastRawTx;\n }()\n }, {\n key: "handleTxLookup",\n value: function handleTxLookup() {\n var id = String(this.state.txLookupId || \'\').trim();\n if (!/^[0-9a-fA-F]{64}$/.test(id)) {\n this.setState({\n txLookupError: \'Enter a 64-character transaction id (hex).\'\n });\n return;\n }\n var f = loadHubUiFeatureFlags();\n if (!f.bitcoinExplorer) {\n this.setState({\n txLookupError: \'Enable Bitcoin — Block & transaction detail routes in Admin → Feature visibility to open the transaction view.\'\n });\n return;\n }\n this.setState({\n txLookupError: null\n });\n var nav = this.props.navigate;\n if (typeof nav === \'function\') nav("/services/bitcoin/transactions/".concat(encodeURIComponent(id)));else if (typeof window !== \'undefined\') window.location.assign("/services/bitcoin/transactions/".concat(encodeURIComponent(id)));\n }\n\n /**\n * Navigate to a relative Hub path (must start with `/`). Keeps row click navigation off\n * `Array#map` index parameters that some static rules treat as tainted for `window` location.\n * @param {string} path\n */\n }, {\n key: "navigateInternalPath",\n value: function navigateInternalPath(path) {\n var p = String(path || \'\');\n if (!p.startsWith(\'/\') || p.includes(\'//\')) return;\n var nav = this.props.navigate;\n if (typeof nav === \'function\') nav(p);else if (typeof window !== \'undefined\') window.location.assign(p);\n }\n }, {\n key: "getIdentity",\n value: function getIdentity() {\n var identity = this.props && this.props.identity || this.props && this.props.auth || null;\n return identity || {};\n }\n }, {\n key: "refresh",\n value: function () {\n var _refresh = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var identity, spendWallet, nextReceive, upstream, upstreamAdmin, network, summaryTask, explorerTask, bitcoinStatusTask, lightningStatusTask, lightningChannelsTask, utxoTask, payjoinCapabilitiesTask, payjoinSessionsTask, payjoinSessionTask, nodePeersTask, nodeNetworkTask, _yield$Promise$all, _yield$Promise$all2, summary, explorer, bitcoinStatus, lightningStatus, lightningChannels, utxos, payjoinCapabilities, payjoinSessionsList, payjoinSession, nodePeers, nodeNetwork, _network, address, localRecv, receiveIndex, balanceSats, confirmedSats, unconfirmedSats, explorerBlocks, explorerTransactions, statusBlocks, statusTransactions, payjoinSessionsSnapshot, hubUi, activeNotExpired, awaitingCompletion, _t2;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n identity = this.getIdentity();\n spendWallet = getSpendWalletContext(identity);\n nextReceive = getNextReceiveWalletContext(identity);\n upstream = this.state.upstream;\n upstreamAdmin = _objectSpread(_objectSpread({}, upstream), {}, {\n hubAdminToken: this._hubAdminToken() || \'\'\n });\n this.setState({\n loading: !spendWallet.walletId,\n refreshing: true,\n error: null\n });\n network = this.state.bitcoinStatus && this.state.bitcoinStatus.network ? String(this.state.bitcoinStatus.network).toLowerCase() : \'\';\n summaryTask = fetchWalletSummaryWithCache(upstreamAdmin, spendWallet, {\n network: network\n })["catch"](function () {\n return {};\n });\n explorerTask = fetchExplorerData(upstreamAdmin, spendWallet, {\n network: network,\n adminToken: this._hubAdminToken() || \'\'\n })["catch"](function () {\n return {\n blocks: [],\n transactions: []\n };\n });\n bitcoinStatusTask = fetchBitcoinStatus(upstreamAdmin)["catch"](function () {\n return {\n available: false,\n status: \'UNAVAILABLE\'\n };\n });\n lightningStatusTask = fetchLightningStatus(upstream)["catch"](function () {\n return {\n available: false,\n status: \'UNAVAILABLE\'\n };\n });\n lightningChannelsTask = fetchLightningChannels(upstream)["catch"](function () {\n return {\n channels: [],\n outputs: []\n };\n });\n utxoTask = fetchUTXOs(upstreamAdmin, spendWallet)["catch"](function () {\n return [];\n });\n payjoinCapabilitiesTask = fetchPayjoinCapabilities(upstream)["catch"](function () {\n return {\n available: false\n };\n });\n payjoinSessionsTask = fetchPayjoinSessions(upstream, {\n limit: 25,\n includeExpired: false\n })["catch"](function () {\n return [];\n });\n payjoinSessionTask = this.state.payjoinSessionId ? fetchPayjoinSession(upstream, this.state.payjoinSessionId)["catch"](function () {\n return null;\n }) : Promise.resolve(null);\n nodePeersTask = fetchBitcoinPeers(upstream)["catch"](function () {\n return [];\n });\n nodeNetworkTask = fetchBitcoinNetworkSummary(upstream)["catch"](function () {\n return {};\n });\n _context3.p = 1;\n _context3.n = 2;\n return Promise.all([summaryTask, explorerTask, bitcoinStatusTask, lightningStatusTask, lightningChannelsTask, utxoTask, payjoinCapabilitiesTask, payjoinSessionsTask, payjoinSessionTask, nodePeersTask, nodeNetworkTask]);\n case 2:\n _yield$Promise$all = _context3.v;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 11);\n summary = _yield$Promise$all2[0];\n explorer = _yield$Promise$all2[1];\n bitcoinStatus = _yield$Promise$all2[2];\n lightningStatus = _yield$Promise$all2[3];\n lightningChannels = _yield$Promise$all2[4];\n utxos = _yield$Promise$all2[5];\n payjoinCapabilities = _yield$Promise$all2[6];\n payjoinSessionsList = _yield$Promise$all2[7];\n payjoinSession = _yield$Promise$all2[8];\n nodePeers = _yield$Promise$all2[9];\n nodeNetwork = _yield$Promise$all2[10];\n _network = bitcoinStatus && bitcoinStatus.network ? String(bitcoinStatus.network).toLowerCase() : \'\';\n _context3.n = 3;\n return fetchReceiveAddress(upstream, nextReceive, {\n network: _network,\n identity: identity\n })["catch"](function () {\n return \'\';\n });\n case 3:\n address = _context3.v;\n localRecv = deriveAndStoreReceiveAddress(nextReceive, {\n network: _network,\n identity: identity\n });\n receiveIndex = localRecv && localRecv.currentIndex != null ? Number(localRecv.currentIndex) : 0;\n balanceSats = Number(summary.balanceSats != null ? summary.balanceSats : summary.balance || 0);\n confirmedSats = Number(summary.confirmedSats != null ? summary.confirmedSats : balanceSats);\n unconfirmedSats = Number(summary.unconfirmedSats || 0);\n explorerBlocks = Array.isArray(explorer.blocks) ? explorer.blocks.slice(0, 10) : [];\n explorerTransactions = Array.isArray(explorer.transactions) ? explorer.transactions.slice(0, 10) : [];\n statusBlocks = bitcoinStatus && Array.isArray(bitcoinStatus.recentBlocks) ? bitcoinStatus.recentBlocks.slice(0, 10) : [];\n statusTransactions = bitcoinStatus && Array.isArray(bitcoinStatus.recentTransactions) ? bitcoinStatus.recentTransactions.slice(0, 10) : [];\n payjoinSessionsSnapshot = null;\n hubUi = loadHubUiFeatureFlags();\n if (hubUi && hubUi.bitcoinPayments) {\n if (Array.isArray(payjoinSessionsList)) {\n activeNotExpired = payjoinSessionsList.length;\n awaitingCompletion = payjoinSessionsList.filter(function (s) {\n return String(s && s.status || \'\') !== \'success\';\n }).length;\n payjoinSessionsSnapshot = {\n activeNotExpired: activeNotExpired,\n awaitingCompletion: awaitingCompletion\n };\n }\n }\n this.setState({\n loading: false,\n refreshing: false,\n error: null,\n wallet: _objectSpread(_objectSpread({}, spendWallet), {}, {\n balanceSats: balanceSats,\n confirmedSats: confirmedSats,\n unconfirmedSats: unconfirmedSats,\n address: address || \'\',\n receiveIndex: receiveIndex\n }),\n blocks: explorerBlocks.length ? explorerBlocks : statusBlocks,\n transactions: explorerTransactions.length ? explorerTransactions : statusTransactions,\n bitcoinStatus: bitcoinStatus && _typeof(bitcoinStatus) === \'object\' ? bitcoinStatus : {\n available: false,\n status: \'UNAVAILABLE\'\n },\n lightningStatus: lightningStatus && _typeof(lightningStatus) === \'object\' ? lightningStatus : {\n available: false,\n status: \'UNAVAILABLE\'\n },\n lightningChannels: lightningChannels && Array.isArray(lightningChannels.channels) ? lightningChannels.channels : [],\n lightningOutputs: lightningChannels && Array.isArray(lightningChannels.outputs) ? lightningChannels.outputs : [],\n utxos: Array.isArray(utxos) ? utxos : [],\n payjoinCapabilities: payjoinCapabilities && _typeof(payjoinCapabilities) === \'object\' ? payjoinCapabilities : {\n available: false\n },\n payjoinSessionsSnapshot: payjoinSessionsSnapshot,\n payjoinResult: payjoinSession || this.state.payjoinResult,\n nodePeers: Array.isArray(nodePeers) ? nodePeers : [],\n nodeNetwork: nodeNetwork && _typeof(nodeNetwork) === \'object\' ? nodeNetwork : {}\n });\n if (typeof window !== \'undefined\' && Number.isFinite(balanceSats)) {\n window.dispatchEvent(new CustomEvent(\'clientBalanceUpdate\', {\n detail: {\n walletId: spendWallet.walletId,\n balanceSats: balanceSats,\n confirmedSats: confirmedSats,\n unconfirmedSats: unconfirmedSats\n }\n }));\n }\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t2 = _context3.v;\n this.setState({\n loading: false,\n refreshing: false,\n error: _t2 && _t2.message ? _t2.message : String(_t2)\n });\n case 5:\n return _context3.a(2);\n }\n }, _callee3, this, [[1, 4]]);\n }));\n function refresh() {\n return _refresh.apply(this, arguments);\n }\n return refresh;\n }()\n }, {\n key: "handleNextReceiveAddress",\n value: function handleNextReceiveAddress() {\n var network = this.state.bitcoinStatus && this.state.bitcoinStatus.network ? String(this.state.bitcoinStatus.network).toLowerCase() : \'\';\n var receiveWallet = getNextReceiveWalletContext(this.getIdentity());\n var next = reserveNextReceiveAddress(receiveWallet, {\n network: network,\n identity: this.getIdentity()\n });\n if (!next || !next.currentAddress) {\n this.setState({\n paymentResult: {\n error: \'Unable to derive next receive address from xpub.\'\n }\n });\n return;\n }\n this.setState(function (prev) {\n return {\n wallet: _objectSpread(_objectSpread({}, prev.wallet), {}, {\n address: next.currentAddress,\n receiveIndex: Number(next.currentIndex || 0)\n })\n };\n });\n }\n }, {\n key: "_hubAdminToken",\n value: function _hubAdminToken() {\n return readHubAdminTokenFromBrowser(this.props && this.props.adminToken);\n }\n }, {\n key: "handleSendPayment",\n value: function () {\n var _handleSendPayment = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var paymentTo, paymentAmountSats, adminToken, result, paidTxid, _t3;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n paymentTo = String(this.state.paymentTo || \'\').trim();\n paymentAmountSats = Number(this.state.paymentAmountSats || 0);\n if (paymentTo) {\n _context4.n = 1;\n break;\n }\n this.setState({\n paymentResult: {\n error: \'Recipient is required.\'\n }\n });\n return _context4.a(2);\n case 1:\n if (!(!Number.isFinite(paymentAmountSats) || paymentAmountSats <= 0)) {\n _context4.n = 2;\n break;\n }\n this.setState({\n paymentResult: {\n error: \'Amount (sats) must be greater than zero.\'\n }\n });\n return _context4.a(2);\n case 2:\n adminToken = this._hubAdminToken();\n if (adminToken) {\n _context4.n = 3;\n break;\n }\n this.setState({\n paymentResult: {\n error: \'Admin token required. Hub wallet spends use the setup token (same as Generate Block / broadcast).\'\n }\n });\n return _context4.a(2);\n case 3:\n _context4.p = 3;\n _context4.n = 4;\n return sendPayment(this.state.upstream, this.state.wallet, {\n to: paymentTo,\n amountSats: paymentAmountSats,\n memo: this.state.paymentMemo,\n adminToken: adminToken\n });\n case 4:\n result = _context4.v;\n paidTxid = result && result.payment && result.payment.txid || result && result.txid;\n if (paidTxid && typeof window !== \'undefined\') {\n window.dispatchEvent(new CustomEvent(\'clientBalanceUpdate\'));\n }\n this.setState({\n paymentResult: result || {\n status: \'submitted\'\n },\n paymentAmountSats: \'\',\n paymentMemo: \'\'\n });\n _context4.n = 5;\n return this.refresh();\n case 5:\n _context4.n = 7;\n break;\n case 6:\n _context4.p = 6;\n _t3 = _context4.v;\n this.setState({\n paymentResult: {\n error: _t3 && _t3.message ? _t3.message : String(_t3)\n }\n });\n case 7:\n return _context4.a(2);\n }\n }, _callee4, this, [[3, 6]]);\n }));\n function handleSendPayment() {\n return _handleSendPayment.apply(this, arguments);\n }\n return handleSendPayment;\n }()\n }, {\n key: "handleLookupAddress",\n value: function () {\n var _handleLookupAddress = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var address, result, _t4;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.p = _context5.n) {\n case 0:\n address = String(this.state.lookupAddress || \'\').trim();\n if (address) {\n _context5.n = 1;\n break;\n }\n this.setState({\n lookupResult: {\n error: \'Address is required.\'\n }\n });\n return _context5.a(2);\n case 1:\n this.setState({\n lookupLoading: true,\n lookupResult: null\n });\n _context5.p = 2;\n _context5.n = 3;\n return fetchAddressBalance(this.state.upstream, address);\n case 3:\n result = _context5.v;\n this.setState({\n lookupResult: result || {\n error: \'No balance data returned.\'\n },\n lookupLoading: false\n });\n _context5.n = 5;\n break;\n case 4:\n _context5.p = 4;\n _t4 = _context5.v;\n this.setState({\n lookupResult: {\n error: _t4 && _t4.message ? _t4.message : String(_t4)\n },\n lookupLoading: false\n });\n case 5:\n return _context5.a(2);\n }\n }, _callee5, this, [[2, 4]]);\n }));\n function handleLookupAddress() {\n return _handleLookupAddress.apply(this, arguments);\n }\n return handleLookupAddress;\n }()\n }, {\n key: "handleRequestFaucet",\n value: function () {\n var _handleRequestFaucet = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {\n var address, amountSats, result, _t5;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.p = _context6.n) {\n case 0:\n address = String(this.state.faucetAddress || \'\').trim();\n if (address) {\n _context6.n = 1;\n break;\n }\n this.setState({\n faucetResult: {\n error: \'Address is required.\'\n }\n });\n return _context6.a(2);\n case 1:\n amountSats = Math.max(1, Math.min(1000000, Number(this.state.faucetAmountSats || 10000) || 10000));\n this.setState({\n faucetResult: null\n });\n _context6.p = 2;\n _context6.n = 3;\n return requestFaucet(this.state.upstream, {\n address: address,\n amountSats: amountSats\n });\n case 3:\n result = _context6.v;\n this.setState({\n faucetResult: result\n });\n if (!result.error && typeof window !== \'undefined\') {\n window.dispatchEvent(new CustomEvent(\'clientBalanceUpdate\'));\n }\n if (!result.error && this.state.wallet && this.state.wallet.walletId) {\n clearBalanceCache(this.state.wallet.walletId);\n }\n _context6.n = 4;\n return this.refresh();\n case 4:\n _context6.n = 6;\n break;\n case 5:\n _context6.p = 5;\n _t5 = _context6.v;\n this.setState({\n faucetResult: {\n error: _t5 && _t5.message ? _t5.message : String(_t5)\n }\n });\n case 6:\n return _context6.a(2);\n }\n }, _callee6, this, [[2, 5]]);\n }));\n function handleRequestFaucet() {\n return _handleRequestFaucet.apply(this, arguments);\n }\n return handleRequestFaucet;\n }()\n }, {\n key: "handleCreateLightningInvoice",\n value: function () {\n var _handleCreateLightningInvoice = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {\n var amountSats, result, invoice, _t6;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.p = _context7.n) {\n case 0:\n amountSats = Number(this.state.invoiceAmountSats || 0);\n if (!(!Number.isFinite(amountSats) || amountSats <= 0)) {\n _context7.n = 1;\n break;\n }\n this.setState({\n lightningResult: {\n error: \'Invoice amount (sats) must be greater than zero.\'\n }\n });\n return _context7.a(2);\n case 1:\n _context7.p = 1;\n _context7.n = 2;\n return createLightningInvoice(this.state.upstream, this.state.wallet, {\n amountSats: amountSats,\n memo: this.state.invoiceMemo\n });\n case 2:\n result = _context7.v;\n invoice = result.invoice || result.bolt11 || result.request || \'\';\n this.setState({\n lightningResult: result,\n invoiceInput: invoice || this.state.invoiceInput\n });\n _context7.n = 4;\n break;\n case 3:\n _context7.p = 3;\n _t6 = _context7.v;\n this.setState({\n lightningResult: {\n error: _t6 && _t6.message ? _t6.message : String(_t6)\n }\n });\n case 4:\n return _context7.a(2);\n }\n }, _callee7, this, [[1, 3]]);\n }));\n function handleCreateLightningInvoice() {\n return _handleCreateLightningInvoice.apply(this, arguments);\n }\n return handleCreateLightningInvoice;\n }()\n }, {\n key: "handleDecodeLightningInvoice",\n value: function () {\n var _handleDecodeLightningInvoice = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {\n var invoice, result, _t7;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.p = _context8.n) {\n case 0:\n invoice = String(this.state.invoiceInput || \'\').trim();\n if (invoice) {\n _context8.n = 1;\n break;\n }\n this.setState({\n lightningResult: {\n error: \'Paste a Lightning invoice to decode.\'\n }\n });\n return _context8.a(2);\n case 1:\n _context8.p = 1;\n _context8.n = 2;\n return decodeLightningInvoice(this.state.upstream, invoice);\n case 2:\n result = _context8.v;\n this.setState({\n lightningResult: result\n });\n _context8.n = 4;\n break;\n case 3:\n _context8.p = 3;\n _t7 = _context8.v;\n this.setState({\n lightningResult: {\n error: _t7 && _t7.message ? _t7.message : String(_t7)\n }\n });\n case 4:\n return _context8.a(2);\n }\n }, _callee8, this, [[1, 3]]);\n }));\n function handleDecodeLightningInvoice() {\n return _handleDecodeLightningInvoice.apply(this, arguments);\n }\n return handleDecodeLightningInvoice;\n }()\n }, {\n key: "handlePayLightningInvoice",\n value: function () {\n var _handlePayLightningInvoice = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {\n var invoice, result, _t8;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.p = _context9.n) {\n case 0:\n invoice = String(this.state.invoiceInput || \'\').trim();\n if (invoice) {\n _context9.n = 1;\n break;\n }\n this.setState({\n lightningResult: {\n error: \'Paste a Lightning invoice to pay.\'\n }\n });\n return _context9.a(2);\n case 1:\n _context9.p = 1;\n _context9.n = 2;\n return payLightningInvoice(this.state.upstream, this.state.wallet, invoice);\n case 2:\n result = _context9.v;\n this.setState({\n lightningResult: result\n });\n _context9.n = 3;\n return this.refresh();\n case 3:\n _context9.n = 5;\n break;\n case 4:\n _context9.p = 4;\n _t8 = _context9.v;\n this.setState({\n lightningResult: {\n error: _t8 && _t8.message ? _t8.message : String(_t8)\n }\n });\n case 5:\n return _context9.a(2);\n }\n }, _callee9, this, [[1, 4]]);\n }));\n function handlePayLightningInvoice() {\n return _handlePayLightningInvoice.apply(this, arguments);\n }\n return handlePayLightningInvoice;\n }()\n }, {\n key: "handleCreateChannel",\n value: function () {\n var _handleCreateChannel = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0() {\n var remote, amountSats, result, hasError, _t9;\n return _regenerator().w(function (_context0) {\n while (1) switch (_context0.p = _context0.n) {\n case 0:\n remote = String(this.state.channelCreateRemote || \'\').trim();\n amountSats = Number(this.state.channelCreateAmountSats || 0);\n if (remote) {\n _context0.n = 1;\n break;\n }\n this.setState({\n channelCreateResult: {\n error: \'Remote (id@ip:port) is required.\'\n }\n });\n return _context0.a(2);\n case 1:\n if (remote.includes(\'@\')) {\n _context0.n = 2;\n break;\n }\n this.setState({\n channelCreateResult: {\n error: \'Remote must be id@ip:port (e.g. 03abc...@192.168.50.5:9735).\'\n }\n });\n return _context0.a(2);\n case 2:\n if (!(!Number.isFinite(amountSats) || amountSats < 10000)) {\n _context0.n = 3;\n break;\n }\n this.setState({\n channelCreateResult: {\n error: \'Amount must be at least 10000 sats.\'\n }\n });\n return _context0.a(2);\n case 3:\n this.setState({\n channelCreateLoading: true,\n channelCreateResult: null\n });\n _context0.p = 4;\n _context0.n = 5;\n return createLightningChannel(this.state.upstream, {\n remote: remote,\n amountSats: amountSats,\n pushMsat: this.state.channelCreatePushMsat ? Number(this.state.channelCreatePushMsat) : undefined\n });\n case 5:\n result = _context0.v;\n hasError = result && (result.error || result.detail);\n this.setState(_objectSpread({\n channelCreateResult: result,\n channelCreateLoading: false\n }, hasError ? {} : {\n channelCreateRemote: \'\',\n channelCreatePushMsat: \'\'\n }));\n if (hasError) {\n _context0.n = 6;\n break;\n }\n _context0.n = 6;\n return this.refresh();\n case 6:\n _context0.n = 8;\n break;\n case 7:\n _context0.p = 7;\n _t9 = _context0.v;\n this.setState({\n channelCreateResult: {\n error: _t9 && _t9.message ? _t9.message : String(_t9)\n },\n channelCreateLoading: false\n });\n case 8:\n return _context0.a(2);\n }\n }, _callee0, this, [[4, 7]]);\n }));\n function handleCreateChannel() {\n return _handleCreateChannel.apply(this, arguments);\n }\n return handleCreateChannel;\n }()\n }, {\n key: "handleGenerateBlock",\n value: function () {\n var _handleGenerateBlock = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee1() {\n var settings, result, hashes, tip, n, sub, _t0;\n return _regenerator().w(function (_context1) {\n while (1) switch (_context1.p = _context1.n) {\n case 0:\n _context1.p = 0;\n // Block generation always uses the Hub\'s wallet; no address is sent so coinbase goes to the Hub.\n // Admin token required for block generation.\n settings = _objectSpread(_objectSpread({}, this.state.upstream), {}, {\n apiToken: this.props.adminToken || this.state.upstream.apiToken\n });\n _context1.n = 1;\n return generateBlock(settings, {\n count: 1\n });\n case 1:\n result = _context1.v;\n this.setState({\n paymentResult: {\n generatedBlock: result\n }\n });\n if (this.state.wallet && this.state.wallet.walletId) {\n clearBalanceCache(this.state.wallet.walletId);\n }\n if (typeof window !== \'undefined\') {\n window.dispatchEvent(new CustomEvent(\'clientBalanceUpdate\'));\n }\n try {\n hashes = result && Array.isArray(result.blockHashes) ? result.blockHashes : [];\n tip = hashes.length ? String(hashes[hashes.length - 1]) : \'\';\n n = result && result.count != null ? Number(result.count) : hashes.length;\n sub = tip ? "".concat(Number.isFinite(n) && n > 1 ? "".concat(n, " blocks \\xB7 ") : \'\', "Tip ").concat(tip.slice(0, 14), "\\u2026") : \'Chain tip updated — check Bitcoin dashboard\';\n pushUiNotification({\n id: "regtest-block-".concat(Date.now()),\n kind: \'bitcoin_block\',\n title: \'New block (regtest)\',\n subtitle: sub,\n href: tip ? "/services/bitcoin/blocks/".concat(encodeURIComponent(tip)) : \'/services/bitcoin\',\n copyText: tip || undefined\n });\n } catch (e) {/* ignore */}\n _context1.n = 2;\n return this.refresh();\n case 2:\n _context1.n = 4;\n break;\n case 3:\n _context1.p = 3;\n _t0 = _context1.v;\n this.setState({\n paymentResult: {\n error: _t0 && _t0.message ? _t0.message : String(_t0)\n }\n });\n case 4:\n return _context1.a(2);\n }\n }, _callee1, this, [[0, 3]]);\n }));\n function handleGenerateBlock() {\n return _handleGenerateBlock.apply(this, arguments);\n }\n return handleGenerateBlock;\n }()\n }, {\n key: "handleCreatePayjoinDeposit",\n value: function () {\n var _handleCreatePayjoinDeposit = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee10() {\n var receiveWallet, pjPref, useJm, session, sid, amt, _t1;\n return _regenerator().w(function (_context10) {\n while (1) switch (_context10.p = _context10.n) {\n case 0:\n if (this.state.payjoinEnabled) {\n _context10.n = 1;\n break;\n }\n this.setState({\n payjoinResult: {\n error: \'Enable Payjoin first to create an optional payjoin deposit request.\'\n }\n });\n return _context10.a(2);\n case 1:\n _context10.p = 1;\n receiveWallet = getNextReceiveWalletContext(this.getIdentity());\n pjPref = loadPayjoinPreferences();\n useJm = pjPref.receiveTaprootJoinmarket !== false;\n _context10.n = 2;\n return createPayjoinDeposit(this.state.upstream, receiveWallet, _objectSpread(_objectSpread({}, useJm ? {\n receiveTemplate: \'joinmarket_taproot_v1\'\n } : {\n address: this.state.wallet.address\n }), {}, {\n amountSats: Number(this.state.payjoinAmountSats || 0),\n label: this.state.payjoinLabel,\n memo: this.state.payjoinMemo\n }));\n case 2:\n session = _context10.v;\n this.setState({\n payjoinSessionId: session.id || \'\',\n payjoinResult: session,\n payjoinAmountSats: \'\',\n payjoinLabel: \'\',\n payjoinMemo: \'\'\n });\n try {\n sid = String(session.id || \'\').trim();\n amt = session.amountSats != null && Number(session.amountSats) > 0 ? "".concat(session.amountSats, " sats") : \'amount optional\';\n if (sid) {\n pushUiNotification({\n id: "payjoin-session-".concat(sid),\n kind: \'payjoin\',\n title: \'Payjoin deposit session ready\',\n subtitle: amt,\n href: "/payments?payjoinSession=".concat(encodeURIComponent(sid)),\n copyText: session.bip21Uri || session.proposalURL || sid\n });\n }\n } catch (e) {/* ignore */}\n _context10.n = 3;\n return this.refresh();\n case 3:\n _context10.n = 5;\n break;\n case 4:\n _context10.p = 4;\n _t1 = _context10.v;\n this.setState({\n payjoinResult: {\n error: _t1 && _t1.message ? _t1.message : String(_t1)\n }\n });\n case 5:\n return _context10.a(2);\n }\n }, _callee10, this, [[1, 4]]);\n }));\n function handleCreatePayjoinDeposit() {\n return _handleCreatePayjoinDeposit.apply(this, arguments);\n }\n return handleCreatePayjoinDeposit;\n }()\n }, {\n key: "handleRefreshPayjoinSession",\n value: function () {\n var _handleRefreshPayjoinSession = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee11() {\n var sessionId, session, _t10;\n return _regenerator().w(function (_context11) {\n while (1) switch (_context11.p = _context11.n) {\n case 0:\n sessionId = String(this.state.payjoinSessionId || \'\').trim();\n if (sessionId) {\n _context11.n = 1;\n break;\n }\n return _context11.a(2);\n case 1:\n _context11.p = 1;\n _context11.n = 2;\n return fetchPayjoinSession(this.state.upstream, sessionId);\n case 2:\n session = _context11.v;\n this.setState({\n payjoinResult: session || this.state.payjoinResult\n });\n _context11.n = 4;\n break;\n case 3:\n _context11.p = 3;\n _t10 = _context11.v;\n this.setState({\n payjoinResult: {\n error: _t10 && _t10.message ? _t10.message : String(_t10)\n }\n });\n case 4:\n return _context11.a(2);\n }\n }, _callee11, this, [[1, 3]]);\n }));\n function handleRefreshPayjoinSession() {\n return _handleRefreshPayjoinSession.apply(this, arguments);\n }\n return handleRefreshPayjoinSession;\n }() /** Placeholder and hint for address inputs based on Hub Bitcoin network. */\n }, {\n key: "getAddressPlaceholder",\n value: function getAddressPlaceholder(network) {\n var n = String(network || \'\').toLowerCase();\n if (n === \'regtest\') return \'bcrt1... or m/44\\\'/0\\\'/0\\\'/0/0\';\n if (n === \'testnet\' || n === \'signet\') return \'tb1... or 2N...\';\n if (n === \'mainnet\' || n === \'main\') return \'bc1... or 3...\';\n return \'address for current network\';\n }\n }, {\n key: "render",\n value: function render() {\n var _this3 = this;\n var wallet = this.state.wallet;\n var hasUpstream = !!(this.state.upstream.explorerBaseUrl || this.state.upstream.paymentsBaseUrl || this.state.upstream.lightningBaseUrl);\n var bitcoinReady = !!(this.state.bitcoinStatus && this.state.bitcoinStatus.available);\n var bitcoinNetwork = String(this.state.bitcoinStatus && this.state.bitcoinStatus.network || \'\').toLowerCase();\n var isRegtest = bitcoinNetwork === \'regtest\';\n var hasAdminToken = !!readHubAdminTokenFromBrowser(this.props.adminToken);\n var canGenerateBlocks = bitcoinReady && bitcoinNetwork === \'regtest\';\n var canShowGenerateBlock = canGenerateBlocks && hasAdminToken;\n var lightningAvailable = !!(this.state.lightningStatus && this.state.lightningStatus.available);\n var addressPlaceholder = this.getAddressPlaceholder(bitcoinNetwork);\n var bc = this.state.bitcoinStatus && this.state.bitcoinStatus.blockchain;\n var mp = this.state.bitcoinStatus && this.state.bitcoinStatus.mempoolInfo;\n var nodePeers = Array.isArray(this.state.nodePeers) ? this.state.nodePeers : [];\n var nn = this.state.nodeNetwork && _typeof(this.state.nodeNetwork) === \'object\' ? this.state.nodeNetwork : {};\n var ni = nn.networkInfo && _typeof(nn.networkInfo) === \'object\' ? nn.networkInfo : null;\n var depRoot = nn.deployments && _typeof(nn.deployments) === \'object\' ? nn.deployments : null;\n var deploymentsInner = depRoot && depRoot.deployments && _typeof(depRoot.deployments) === \'object\' ? depRoot.deployments : null;\n var deploymentEntries = deploymentsInner ? Object.entries(deploymentsInner) : depRoot ? Object.entries(depRoot).filter(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 1),\n k = _ref2[0];\n return k !== \'deployments\';\n }) : [];\n void this.state.hubUiFlagsRev;\n var hubUi = loadHubUiFeatureFlags();\n var bitcoinPage = this.props && this.props.bitcoinPage ? String(this.props.bitcoinPage).toLowerCase() : \'dashboard\';\n var isDashboardPage = bitcoinPage === \'dashboard\';\n var isFaucetPage = bitcoinPage === \'faucet\';\n var isLightningPage = bitcoinPage === \'lightning\';\n var isExplorerPage = bitcoinPage === \'explorer\';\n var payjoinSnapshot = this.state.payjoinSessionsSnapshot && _typeof(this.state.payjoinSessionsSnapshot) === \'object\' ? this.state.payjoinSessionsSnapshot : {\n activeNotExpired: 0,\n awaitingCompletion: 0\n };\n var lightningFunds = this.getLightningBalanceFromOutputs(this.state.lightningOutputs || []);\n var hubWalletSats = Number(this.state.bitcoinStatus && this.state.bitcoinStatus.balanceSats != null ? this.state.bitcoinStatus.balanceSats : Math.round(Number(this.state.bitcoinStatus && this.state.bitcoinStatus.balance != null ? this.state.bitcoinStatus.balance : 0) * SATS_PER_BTC));\n var clientWalletSats = Number(wallet && wallet.balanceSats != null ? wallet.balanceSats : 0);\n var sharedSessionsSats = Number(lightningFunds.confirmed || 0) + Number(lightningFunds.unconfirmed || 0) + Number(lightningFunds.immature || 0);\n /** Avoid showing “No data yet” on first paint before refresh() resolves or while a refresh is in flight. */\n var explorerDataPending = this.state.refreshing || this.state.loading && this.state.blocks.length === 0 && this.state.transactions.length === 0;\n return /*#__PURE__*/React.createElement("div", {\n className: "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "bitcoin-home-heading",\n "aria-describedby": "bitcoin-home-summary"\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n position: \'sticky\',\n top: \'6.5rem\',\n zIndex: 12,\n background: \'#fff\',\n paddingBottom: \'0.35em\',\n marginBottom: \'0.35em\',\n boxShadow: \'0 1px 0 rgba(34, 36, 38, 0.15)\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexDirection: \'column\',\n alignItems: \'stretch\',\n gap: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "bitcoin-home-heading",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin",\n color: "orange",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Bitcoin")), /*#__PURE__*/React.createElement("div", {\n id: "fabric-bitcoin-regtest-toolbar",\n "aria-label": "Regtest: refresh, generate block, shortcuts",\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.35em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n icon: true,\n onClick: function onClick() {\n return _this3.setState({\n settingsOpen: true,\n upstreamDraft: _objectSpread({}, _this3.state.upstream)\n });\n },\n title: "Configure upstream APIs",\n "aria-label": "Configure upstream APIs"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cog",\n "aria-hidden": "true"\n })), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n loading: this.state.refreshing,\n onClick: function onClick() {\n return _this3.refresh();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh",\n "aria-hidden": "true"\n }), "Refresh"), canShowGenerateBlock && /*#__PURE__*/React.createElement(Button, {\n basic: true,\n onClick: function onClick() {\n return _this3.handleGenerateBlock();\n },\n title: "Mine one block: coinbase pays this node\\u2019s Hub bitcoind wallet only \\u2014 not your browser wallet chip. Use Faucet to send from the Hub to your receive address, then mine again to confirm."\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cube",\n "aria-hidden": "true"\n }), "Generate Block"), canGenerateBlocks ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/faucet",\n basic: true,\n title: "Request regtest coins from the Hub wallet to your Fabric receive address (updates the top-bar balance after a confirm block)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "tint",\n "aria-hidden": "true"\n }), "Faucet") : null, hubUi.bitcoinPayments ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/payments",\n basic: true,\n title: "Open wallet payments manager"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "credit card outline",\n "aria-hidden": "true"\n }), "Payments") : null, hubUi.bitcoinInvoices ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/invoices#fabric-invoices-tab-demo",\n basic: true,\n title: "Create and manage invoices"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate outline",\n "aria-hidden": "true"\n }), "Invoices") : null, hubUi.bitcoinResources ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/resources",\n basic: true,\n title: "Browse Bitcoin HTTP resources (GET) and L1 verify"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sitemap",\n "aria-hidden": "true"\n }), "Resources") : null, hubUi.bitcoinCrowdfund ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/crowdfunds",\n basic: true,\n title: "Taproot crowdfund vault, ACP donation PSBT, Payjoin to campaign address"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "heart outline",\n "aria-hidden": "true"\n }), "Crowdfunds") : null, hubUi.bitcoinLightning ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/lightning",\n basic: true,\n title: "Dedicated Lightning page"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt",\n "aria-hidden": "true"\n }), "Lightning") : null, hubUi.bitcoinExplorer ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/blocks",\n basic: true,\n title: "Dedicated Explorer page"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "search",\n "aria-hidden": "true"\n }), "Explorer") : null))), /*#__PURE__*/React.createElement("p", {\n id: "bitcoin-home-summary",\n style: {\n marginTop: \'0.5em\',\n color: \'#666\',\n marginBottom: \'0.5em\',\n maxWidth: \'42rem\',\n lineHeight: 1.45\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Your browser wallet"), " (Fabric identity) powers invoices, client-signed sends, and the balance chip \\u2014 see", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/bitcoin-wallet"\n }, "Bitcoin wallet & derivation"), ".", /*#__PURE__*/React.createElement("strong", null, " Hub wallet"), " is this node\'s ", /*#__PURE__*/React.createElement("code", null, "bitcoind"), \' \', "(", isRegtest ? \'mining on regtest, \' : \'\', "admin spends, Payjoin); it is not your identity\'s key.", isRegtest ? /*#__PURE__*/React.createElement(React.Fragment, null, \' \', /*#__PURE__*/React.createElement("strong", null, "Regtest:"), " ", /*#__PURE__*/React.createElement("strong", null, "Generate Block"), " only increases the Hub wallet; it does not credit your browser balance. Use the ", /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/faucet"\n }, "Faucet"), " (or a paid invoice / Payjoin / peer payment) to move value to your receive address, then mine a block so it confirms.") : null), /*#__PURE__*/React.createElement(HubRegtestAdminTokenPanel, {\n network: bitcoinNetwork || \'mainnet\',\n adminTokenProp: this.props && this.props.adminToken\n }), /*#__PURE__*/React.createElement(BitcoinWalletBranchBar, {\n identity: this.props && this.props.identity || {}\n }))), /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: \'-1px\',\n padding: \'0.75em 1em\',\n background: \'linear-gradient(92deg, #f7f5ef 0%, #ebe6d8 45%, #e8e4d6 100%)\',\n borderColor: \'#d4cfc0\'\n }\n }, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "bitcoin-home-wealth-heading"\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'center\',\n gap: \'0.65rem\',\n justifyContent: \'space-between\'\n }\n }, /*#__PURE__*/React.createElement("span", {\n id: "bitcoin-home-wealth-heading",\n style: {\n fontWeight: 600,\n color: \'#3d3a33\',\n fontSize: \'0.95em\'\n }\n }, "Wealth stack"), /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#5c574c\',\n fontSize: \'0.85em\',\n maxWidth: \'36rem\',\n lineHeight: 1.4\n }\n }, "Fabric contracts & docs \\xB7 Payjoin deposit coordination \\xB7 Lightning channels"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.45rem\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/documents",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate outline"\n }), " Documents"), hubUi.peers ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/peers",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users"\n }), " Peers") : null)))), /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: \'-1px\',\n borderColor: \'#d9e2f3\',\n background: \'#f8fbff\'\n }\n }, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "operator-managed-deposits-heading"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "operator-managed-deposits-heading",\n style: {\n marginBottom: \'0.35em\'\n }\n }, "Deposits Under Management"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#4b5b73\',\n marginBottom: \'0.75em\',\n maxWidth: \'54rem\',\n lineHeight: 1.45\n }\n }, "Custody boundary: non-admin user keys stay in the browser wallet; the Hub manages shared-session flows (Lightning node channels and Payjoin receiver sessions) and may sign contract messages for coordinated settlement."), /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n unstackable: true,\n size: "small",\n style: {\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Table.Body, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n width: 5\n }, /*#__PURE__*/React.createElement("strong", null, "Client wallet (self-custody)")), /*#__PURE__*/React.createElement(Table.Cell, null, formatSatsDisplay(clientWalletSats), " sats"), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n color: \'#666\'\n }\n }, "Private keys remain with user clients.")), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Hub wallet (operator)")), /*#__PURE__*/React.createElement(Table.Cell, null, formatSatsDisplay(hubWalletSats), " sats"), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n color: \'#666\'\n }\n }, "Node operations (", isRegtest ? \'regtest mining/\' : \'\', "admin spends/settlement staging).")), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Shared sessions (managed)")), /*#__PURE__*/React.createElement(Table.Cell, null, formatSatsDisplay(sharedSessionsSats), " sats"), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n color: \'#666\'\n }\n }, "Lightning listfunds total across confirmed/unconfirmed/immature outputs.")), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Payjoin sessions")), /*#__PURE__*/React.createElement(Table.Cell, null, Number(payjoinSnapshot.activeNotExpired || 0), " active"), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n color: \'#666\'\n }\n }, Number(payjoinSnapshot.awaitingCompletion || 0), " awaiting completion.")))), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/lightning",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt"\n }), " Manage Lightning channels"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/payments#wealth-payjoin-board",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield alternate"\n }), " Manage Payjoin sessions"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings/bitcoin-wallet",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "key"\n }), " Client wallet boundary")))), !hasUpstream && /*#__PURE__*/React.createElement(Message, {\n warning: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Upstream APIs not configured"), /*#__PURE__*/React.createElement("p", null, "Open the settings cog and add your explorer/payments/lightning endpoints to enable live data and transactions.")), hasUpstream && !this.state.loading && !this.state.refreshing && !bitcoinReady && /*#__PURE__*/React.createElement(Message, {\n info: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Hub Bitcoin backend unavailable"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n fontSize: \'0.9em\',\n lineHeight: 1.45\n }\n }, "Explorer lists and the Hub wallet balance stay empty until this Hub can reach ", /*#__PURE__*/React.createElement("code", null, "bitcoind"), isRegtest ? \' (or enable managed regtest).\' : \'.\', \' \', "Your ", /*#__PURE__*/React.createElement("strong", null, "identity wallet"), " may still show receive addresses when the Payments API is up. Check server logs and", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/admin"\n }, "Admin"), ".")), hasUpstream && bitcoinReady && /*#__PURE__*/React.createElement(Message, {\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Operator deposits checklist"), /*#__PURE__*/React.createElement(List, {\n bulleted: true,\n style: {\n margin: \'0.35em 0 0\',\n fontSize: \'0.88em\',\n color: \'#555\'\n }\n }, /*#__PURE__*/React.createElement(List.Item, null, "Save the ", /*#__PURE__*/React.createElement("strong", null, "admin token"), " (first-time setup / Settings \\u2192 Admin) for", \' \', isRegtest ? \'regtest block tools and \' : \'\', "hub-wallet sends", isRegtest ? \'\' : \' and other admin RPC actions\', "."), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement("strong", null, "Payjoin:"), " ensure ", /*#__PURE__*/React.createElement("code", null, "GET /services/payjoin"), " reports available (mirror: ", /*#__PURE__*/React.createElement("code", null, "/payments/payjoin"), "); create sessions below when ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin \\u2192 Payments"), " is enabled in feature flags. Capabilities include ", /*#__PURE__*/React.createElement("code", null, "fabricProtocol"), " (BIP78 receiver today; BIP77 async roadmap)."), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement("strong", null, "Lightning:"), " Service Health should show L2 when Core Lightning is configured (or stub in dev)."))), this.state.error && /*#__PURE__*/React.createElement(Message, {\n negative: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Bitcoin data refresh failed"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, this.state.error), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n style: {\n marginTop: \'0.75em\'\n },\n loading: this.state.refreshing,\n disabled: this.state.refreshing,\n onClick: function onClick() {\n return _this3.refresh();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry")), /*#__PURE__*/React.createElement(Segment, {\n loading: this.state.loading\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Service Health"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Bridge (Hub node):"), " status, Hub wallet balance, Beacon, Lightning."), /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.88em\',\n color: \'#666\',\n margin: \'0 0 0.65em\',\n lineHeight: 1.45\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Beacon / federation provability:"), \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/admin/beacon-federation"\n }, "Beacon Federation"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/epoch",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET epoch"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/manifest",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET manifest")), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Bitcoin (RPC):"), \' \', this.state.loading || this.state.refreshing ? \'Checking…\' : bitcoinReady ? "".concat(this.state.bitcoinStatus && this.state.bitcoinStatus.status ? this.state.bitcoinStatus.status : \'available\').concat(bitcoinNetwork ? " (".concat(bitcoinNetwork, ")") : \'\') : "unavailable".concat(this.state.bitcoinStatus && this.state.bitcoinStatus.status ? " \\u2014 ".concat(this.state.bitcoinStatus.status) : \'\')), /*#__PURE__*/React.createElement("div", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\',\n lineHeight: 1.45\n }\n }, bitcoinReady && this.state.bitcoinStatus && this.state.bitcoinStatus.message ? this.state.bitcoinStatus.message : null, !bitcoinReady && !this.state.loading && !this.state.refreshing ? /*#__PURE__*/React.createElement("span", null, "The hub is not serving live chain data until ", /*#__PURE__*/React.createElement("code", null, "bitcoind"), " is reachable (or managed regtest is enabled). Balances below may be stale or zero.") : null), bitcoinReady && this.state.bitcoinStatus && this.state.bitcoinStatus.balance != null && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Hub wallet balance:"), " ", Number(this.state.bitcoinStatus.balance || 0).toFixed(8), " BTC", \' \', isRegtest ? \'(regtest block rewards go here)\' : \'(on-chain wallet balance)\'), bitcoinReady && this.state.bitcoinStatus && this.state.bitcoinStatus.beacon && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Beacon core balance:"), " ", this.satsToBTC(this.state.bitcoinStatus.beacon.balanceSats || 0), " BTC (epoch ", this.state.bitcoinStatus.beacon.clock || 0, ")"), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Lightning:"), " ", this.state.lightningStatus && this.state.lightningStatus.status === \'NOT_CONFIGURED\' ? isRegtest ? \'runs with regtest\' : \'not configured\' : this.state.lightningStatus && this.state.lightningStatus.status === \'STUB\' ? \'stub (UI testing)\' : this.state.lightningStatus && this.state.lightningStatus.status ? this.state.lightningStatus.status : \'unknown\'), /*#__PURE__*/React.createElement("div", {\n style: {\n color: \'#666\'\n }\n }, this.state.lightningStatus && this.state.lightningStatus.message ? this.state.lightningStatus.message : \'\')), /*#__PURE__*/React.createElement(Segment, {\n loading: this.state.loading\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Node console"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.75em\'\n }\n }, "Data comes from this Hub\'s Bitcoin Core RPC."), /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Dashboard"), /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n unstackable: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Table.Body, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Chain height")), /*#__PURE__*/React.createElement(Table.Cell, null, bc && bc.blocks != null ? bc.blocks : this.state.bitcoinStatus.height != null ? this.state.bitcoinStatus.height : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Headers")), /*#__PURE__*/React.createElement(Table.Cell, null, bc && bc.headers != null ? bc.headers : \'—\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Verification")), /*#__PURE__*/React.createElement(Table.Cell, null, bc && bc.verificationprogress != null ? "".concat((Number(bc.verificationprogress) * 100).toFixed(2), "%") : \'—\', bc && bc.initialblockdownload ? \' (IBD)\' : \'\'), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Difficulty")), /*#__PURE__*/React.createElement(Table.Cell, null, bc ? this.formatDifficulty(bc.difficulty) : \'—\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Chain")), /*#__PURE__*/React.createElement(Table.Cell, null, bc && bc.chain ? String(bc.chain) : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Median time")), /*#__PURE__*/React.createElement(Table.Cell, null, bc && bc.mediantime ? new Date(Number(bc.mediantime) * 1000).toLocaleString() : \'—\')), this.state.bitcoinStatus.bitcoinPruned || bc && bc.pruned ? /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Prune")), /*#__PURE__*/React.createElement(Table.Cell, {\n colSpan: 3,\n style: {\n fontSize: \'0.92em\',\n lineHeight: 1.45\n }\n }, "Pruned ", /*#__PURE__*/React.createElement("code", null, "bitcoind"), " \\u2014 block files below height", \' \', /*#__PURE__*/React.createElement("strong", null, this.state.bitcoinStatus.bitcoinPruneHeight != null ? this.state.bitcoinStatus.bitcoinPruneHeight : bc && bc.pruneheight != null ? bc.pruneheight : \'—\'), \' \', "are not available over RPC. This hub removes matching Bitcoin block/tx documents from its ", /*#__PURE__*/React.createElement("em", null, "local"), " published catalog only; Fabric ", /*#__PURE__*/React.createElement("code", null, "BitcoinBlock"), " / Beacon epochs still track the chain tip, and peers can offer older blocks via inventory.")) : null)), /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Mempool"), /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n unstackable: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Table.Body, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Transactions")), /*#__PURE__*/React.createElement(Table.Cell, null, this.state.bitcoinStatus.mempoolTxCount != null ? this.state.bitcoinStatus.mempoolTxCount : mp && mp.size != null ? mp.size : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Memory usage")), /*#__PURE__*/React.createElement(Table.Cell, null, mp && mp.usage != null ? this.formatBytes(mp.usage) : \'—\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Total vsize (mempool)")), /*#__PURE__*/React.createElement(Table.Cell, null, mp && mp.bytes != null ? this.formatBytes(mp.bytes) : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Total fees (est.)")), /*#__PURE__*/React.createElement(Table.Cell, null, this.state.bitcoinStatus.mempoolFeeSats != null ? /*#__PURE__*/React.createElement(React.Fragment, null, this.satsToBTC(this.state.bitcoinStatus.mempoolFeeSats), " BTC", \' \', /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\'\n }\n }, "(", formatSatsDisplay(this.state.bitcoinStatus.mempoolFeeSats), " sats)")) : \'—\', this.state.bitcoinStatus.mempoolFeesTruncated ? /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#b60\'\n }\n }, " (partial sum)") : null)), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Min relay fee")), /*#__PURE__*/React.createElement(Table.Cell, null, mp && mp.minrelaytxfee != null ? "".concat(mp.minrelaytxfee, " BTC/kvB") : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Mempool min fee")), /*#__PURE__*/React.createElement(Table.Cell, null, mp && mp.mempoolminfee != null ? "".concat(mp.mempoolminfee, " BTC/kvB") : \'—\')))), /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Network"), /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n unstackable: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Table.Body, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Connections")), /*#__PURE__*/React.createElement(Table.Cell, null, ni ? "".concat(ni.connections != null ? ni.connections : \'—\', " total (").concat(ni.connections_in != null ? ni.connections_in : 0, " in / ").concat(ni.connections_out != null ? ni.connections_out : 0, " out)") : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Relay fee")), /*#__PURE__*/React.createElement(Table.Cell, null, ni && ni.relayfee != null ? "".concat(ni.relayfee, " BTC/kvB") : \'—\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "User agent")), /*#__PURE__*/React.createElement(Table.Cell, {\n colSpan: "3"\n }, ni && ni.subversion ? String(ni.subversion) : \'—\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Protocol / version")), /*#__PURE__*/React.createElement(Table.Cell, {\n colSpan: "3"\n }, ni ? "protocol ".concat(ni.protocolversion != null ? ni.protocolversion : \'—\', " \\xB7 version ").concat(ni.version != null ? ni.version : \'—\') : \'—\')), Array.isArray(this.state.bitcoinStatus.p2pAddNodeTargets) && this.state.bitcoinStatus.p2pAddNodeTargets.length > 0 && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Playnet P2P")), /*#__PURE__*/React.createElement(Table.Cell, {\n colSpan: "3"\n }, /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#555\'\n }\n }, "Bitcoin Core "), /*#__PURE__*/React.createElement("code", null, "addnode"), /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#555\'\n }\n }, " targets (L1 sync): "), this.state.bitcoinStatus.p2pAddNodeTargets.map(function (h, i) {\n return /*#__PURE__*/React.createElement("span", {\n key: String(h) + i\n }, i > 0 ? \', \' : \'\', /*#__PURE__*/React.createElement("code", null, h));\n }))))), /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Consensus deployments"), deploymentEntries.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'1em\'\n }\n }, "No deployment data (requires ", /*#__PURE__*/React.createElement("code", null, "getdeploymentinfo"), " on your Core version).") : /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n unstackable: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Deployment"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Status"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Height / bit"))), /*#__PURE__*/React.createElement(Table.Body, null, deploymentEntries.map(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n name = _ref4[0],\n info = _ref4[1];\n var row = info && _typeof(info) === \'object\' ? info : {};\n var active = row.active === true ? \'active\' : row.active === false ? \'inactive\' : \'—\';\n var h = row.height != null ? row.height : row.min_activation_height != null ? row.min_activation_height : \'—\';\n var bit = row.bip9 && row.bip9.bit != null ? row.bip9.bit : row.bit;\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: name\n }, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", null, name)), /*#__PURE__*/React.createElement(Table.Cell, null, active, row.type ? " \\xB7 ".concat(row.type) : \'\'), /*#__PURE__*/React.createElement(Table.Cell, null, h, bit != null && bit !== \'\' ? " \\xB7 bit ".concat(bit) : \'\'));\n }))), /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Peers (", nodePeers.length, ")"), nodePeers.length === 0 ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n margin: \'0 0 0.5em\'\n }\n }, bitcoinReady ? /*#__PURE__*/React.createElement(React.Fragment, null, ni && Number(ni.connections) > 0 ? /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("code", null, "getnetworkinfo"), " reports ", Number(ni.connections), " P2P connection(s), but the peer table did not load (", /*#__PURE__*/React.createElement("code", null, "GET /services/bitcoin/peers"), " may have failed in this browser tab). Try ", /*#__PURE__*/React.createElement("strong", null, "Refresh peer list"), " or your regular browser.") : /*#__PURE__*/React.createElement("span", null, "No Bitcoin P2P peers in ", /*#__PURE__*/React.createElement("code", null, "getpeerinfo"), ".", isRegtest ? /*#__PURE__*/React.createElement(React.Fragment, null, \' \', "On managed regtest with ", /*#__PURE__*/React.createElement("code", null, "listen=0"), " this is usual until an outbound peer connects; use the ", /*#__PURE__*/React.createElement("strong", null, "Playnet P2P"), \' \', /*#__PURE__*/React.createElement("code", null, "addnode"), " targets above or ", /*#__PURE__*/React.createElement("code", null, "npm run bitcoin:addnode"), ".", \' \', "After you have peers, you can pull regtest coins from another operator\'s hub wallet \\u2014 e.g. open", \' \', /*#__PURE__*/React.createElement("a", {\n href: "https://hub.fabric.pub/services/bitcoin/faucet",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "hub.fabric.pub/services/bitcoin/faucet"), \' \', "and paste your receive address, then ", /*#__PURE__*/React.createElement("strong", null, "Generate block"), " here to confirm.") : \' Check connectivity, firewall, and addnode/connect settings on this Core node.\')) : /*#__PURE__*/React.createElement(React.Fragment, null, "Could not load peers (Bitcoin RPC offline or ", /*#__PURE__*/React.createElement("code", null, "GET /services/bitcoin/peers"), " failed). Fix Bitcoin status first.")), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n loading: this.state.refreshing,\n disabled: this.state.refreshing,\n onClick: function onClick() {\n return _this3.refresh();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), bitcoinReady ? \'Refresh peer list\' : \'Retry\')) : /*#__PURE__*/React.createElement("div", {\n style: {\n overflowX: \'auto\',\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n unstackable: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Address"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Direction"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Ping (ms)"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Bytes in / out"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "User agent"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Height"))), /*#__PURE__*/React.createElement(Table.Body, null, nodePeers.slice(0, 40).map(function (p, i) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "".concat(p.id != null ? p.id : i, "-").concat(p.addr || i)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, p.addr || p.addrbind || \'—\')), /*#__PURE__*/React.createElement(Table.Cell, null, p.inbound ? \'inbound\' : \'outbound\'), /*#__PURE__*/React.createElement(Table.Cell, null, p.pingtime != null ? Number(p.pingtime).toFixed(0) : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, p.bytesrecv != null || p.bytessent != null ? "".concat(p.bytesrecv != null ? _this3.formatBytes(p.bytesrecv) : \'—\', " / ").concat(p.bytessent != null ? _this3.formatBytes(p.bytessent) : \'—\') : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n maxWidth: \'14em\',\n wordBreak: \'break-word\',\n fontSize: \'0.85em\'\n }\n }, p.subver || \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, p.synced_headers != null ? p.synced_headers : p.synced_blocks != null ? p.synced_blocks : p.startingheight != null ? p.startingheight : \'—\'));\n })))), /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Search & tools"), /*#__PURE__*/React.createElement(Form, {\n style: {\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Open transaction by txid"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "64-char hex txid",\n value: this.state.txLookupId,\n onChange: function onChange(e) {\n return _this3.setState({\n txLookupId: e.target.value,\n txLookupError: null\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, {\n style: {\n alignSelf: \'flex-end\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n disabled: !bitcoinReady || !hubUi.bitcoinExplorer,\n title: !hubUi.bitcoinExplorer ? \'Enable Bitcoin — Block & transaction detail routes in Admin → Feature visibility\' : undefined,\n onClick: function onClick() {\n return _this3.handleTxLookup();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "search"\n }), "Open"))), this.state.txLookupError && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small"\n }, this.state.txLookupError)), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Broadcast raw transaction"), " \\u2014 ", /*#__PURE__*/React.createElement("code", null, "sendrawtransaction"), ". Requires admin token (same as Generate Block)."), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.TextArea, {\n rows: 4,\n placeholder: "Paste hex (no spaces required)",\n value: this.state.rawTxHex,\n onChange: function onChange(e) {\n return _this3.setState({\n rawTxHex: e.target.value,\n rawTxResult: null\n });\n },\n disabled: !hasAdminToken\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "orange",\n style: {\n marginTop: \'0.5em\'\n },\n disabled: !bitcoinReady || !hasAdminToken || !(this.state.rawTxHex || \'\').trim(),\n onClick: function onClick() {\n return _this3.handleBroadcastRawTx();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "send"\n }), "Broadcast")), this.state.rawTxResult && /*#__PURE__*/React.createElement(Message, {\n style: {\n marginTop: \'0.75em\'\n },\n negative: !!this.state.rawTxResult.error,\n positive: !this.state.rawTxResult.error\n }, /*#__PURE__*/React.createElement(Message.Header, null, this.state.rawTxResult.error ? \'Broadcast failed\' : \'Broadcast accepted\'), this.state.rawTxResult.error ? /*#__PURE__*/React.createElement("p", null, this.state.rawTxResult.error) : /*#__PURE__*/React.createElement("p", null, "txid", \' \', this.state.rawTxResult.txid ? hubUi.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(String(this.state.rawTxResult.txid)))\n }, /*#__PURE__*/React.createElement("code", null, this.state.rawTxResult.txid)) : /*#__PURE__*/React.createElement("code", null, this.state.rawTxResult.txid) : \'—\'))), /*#__PURE__*/React.createElement(Segment, {\n loading: this.state.loading\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Wallet"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Client:"), " identity fingerprint, xpub, receive index, and client balance (matches the top-bar chip). ", /*#__PURE__*/React.createElement("strong", null, "Bridge:"), " Hub node wallet \\u2014", \' \', isRegtest ? \'regtest block rewards, \' : \'on-chain balance, \', "optional admin spends, Payjoin receiver. ", /*#__PURE__*/React.createElement("strong", null, "Documents:"), " publishing is free; paid ", /*#__PURE__*/React.createElement(Link, {\n to: "/documents"\n }, "distribute"), " uses L1 invoices tied to your identity.", hubUi.bitcoinPayments || hubUi.bitcoinLightning ? /*#__PURE__*/React.createElement("span", null, \' \', "This Hub runs", \' \', hubUi.bitcoinPayments ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("strong", null, "one Payjoin receiver"), " (BIP78-shaped HTTP POST; ", /*#__PURE__*/React.createElement("code", null, "pj="), " in BIP21; ", /*#__PURE__*/React.createElement("code", null, "asyncPayjoinRoadmap: BIP77"), " in JSON capabilities)") : null, hubUi.bitcoinPayments && hubUi.bitcoinLightning ? \' and \' : null, hubUi.bitcoinLightning ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("strong", null, "one Lightning"), " service path") : null, hubUi.bitcoinPayments && !hubUi.bitcoinLightning ? \'.\' : null, hubUi.bitcoinLightning ? \'.\' : null) : /*#__PURE__*/React.createElement("span", null, \' \', "Turn on ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin \\u2014 Payments"), " and/or ", /*#__PURE__*/React.createElement("strong", null, "Lightning"), " in Admin \\u2192 Feature visibility for Payjoin deposit tooling and L2 controls on this page."), !wallet.hasPrivateKey && wallet.walletId && /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.25em\',\n color: \'#0a6\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "eye"\n }), " Watch-only: server never holds your keys. Balance is derived from xpub via scantxoutset.")), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Master wallet:"), " ", /*#__PURE__*/React.createElement("code", null, wallet.walletId || \'not available\')), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Identity fingerprint:"), " ", /*#__PURE__*/React.createElement("code", null, wallet.fingerprint || \'not available\')), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Keys on server:"), " ", wallet.hasPrivateKey ? \'yes (signing capable)\' : \'no (watch-only, keys never leave your device)\'), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Client wallet balance:"), " ", this.satsToBTC(wallet.balanceSats), " BTC"), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Confirmed:"), " ", this.satsToBTC(wallet.confirmedSats), " BTC"), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Unconfirmed:"), " ", this.satsToBTC(wallet.unconfirmedSats), " BTC"), wallet.balanceSats === 0 && bitcoinNetwork === \'regtest\' && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\',\n color: \'#0a6\',\n fontSize: \'0.9em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "info circle"\n }), " Just received funds? Use ", /*#__PURE__*/React.createElement("strong", null, "Generate Block"), " to confirm \\u2014 balance shows only confirmed UTXOs. If you used a custom faucet address instead of ", /*#__PURE__*/React.createElement("strong", null, "Use my receive address"), ", funds went elsewhere and will not appear here."), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Receive address:"), \' \', /*#__PURE__*/React.createElement("code", null, wallet.address || \'address unavailable\'), wallet.address ? /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "mini",\n style: {\n marginLeft: \'0.5em\'\n },\n onClick: function onClick() {\n return _this3.handleNextReceiveAddress();\n },\n title: "Derive next external payment address"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "plus"\n }), "Next") : null), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Receive derivation index:"), " ", wallet.receiveIndex), hubUi.bitcoinPayments ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Checkbox, {\n toggle: true,\n checked: !!this.state.payjoinEnabled,\n onChange: function onChange(e, data) {\n var v = !!(data && data.checked);\n savePayjoinPreferences({\n operatorDeposit: v\n });\n _this3.setState({\n payjoinEnabled: v\n });\n },\n label: "Use Payjoin for operator deposit sessions (on by default)",\n disabled: !(this.state.payjoinCapabilities && this.state.payjoinCapabilities.available)\n })), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.25em\',\n color: \'#666\'\n }\n }, "Payjoin endpoint status:", \' \', /*#__PURE__*/React.createElement("strong", null, this.state.payjoinCapabilities && this.state.payjoinCapabilities.available ? \'available\' : \'unavailable\'))) : null), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Look Up Address Balance"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "search"\n }), " Query balance for any on-chain address. ", /*#__PURE__*/React.createElement("strong", null, "Server does not hold keys"), " \\u2014 uses ", /*#__PURE__*/React.createElement("code", null, "scantxoutset"), " (UTXO scan). Works on pruned nodes; does not require ", /*#__PURE__*/React.createElement("code", null, "txindex"), "."), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Address (", bitcoinNetwork || \'any\', ")"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Input, {\n placeholder: addressPlaceholder,\n value: this.state.lookupAddress,\n onChange: function onChange(e) {\n return _this3.setState({\n lookupAddress: e.target.value\n });\n },\n style: {\n flex: \'1 1 16em\',\n minWidth: \'14em\'\n }\n }), wallet.address && /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n onClick: function onClick() {\n return _this3.setState({\n lookupAddress: wallet.address\n });\n },\n title: "Use your current receive address"\n }, "Use my address"), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n loading: this.state.lookupLoading,\n onClick: function onClick() {\n return _this3.handleLookupAddress();\n },\n disabled: !bitcoinReady || !(this.state.lookupAddress || \'\').trim()\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "search"\n }), "Look Up")))), this.state.lookupResult && /*#__PURE__*/React.createElement(Message, {\n style: {\n marginTop: \'1em\'\n },\n negative: !!this.state.lookupResult.error,\n positive: !this.state.lookupResult.error\n }, /*#__PURE__*/React.createElement(Message.Header, null, this.state.lookupResult.error ? \'Lookup failed\' : \'Address balance (no keys on server)\'), this.state.lookupResult.error ? /*#__PURE__*/React.createElement("p", null, this.state.lookupResult.error) : /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Balance:"), " ", this.satsToBTC(this.state.lookupResult.balanceSats || 0), " BTC (", formatSatsDisplay(this.state.lookupResult.balanceSats || 0), " sats)"), this.state.lookupResult.network && /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Network:"), " ", this.state.lookupResult.network)))), hubUi.bitcoinCrowdfund ? /*#__PURE__*/React.createElement(Segment, {\n id: "fabric-bitcoin-crowdfunding"\n }, /*#__PURE__*/React.createElement(Message, {\n info: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Crowdfunds"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, "Taproot campaign vaults, ACP donation PSBTs, Payjoin to vault, payout, and refund flows live on", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/crowdfunds"\n }, "Crowdfunds"), \' \', "(bookmark ", /*#__PURE__*/React.createElement("code", null, "/services/bitcoin/crowdfunds"), " or ", /*#__PURE__*/React.createElement("code", null, "/crowdfunds"), ")."))) : null, hubUi.bitcoinPayments ? /*#__PURE__*/React.createElement(Segment, {\n id: "fabric-bitcoin-payjoin"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Payjoin deposit"), this.state.payjoinSessionsSnapshot ? /*#__PURE__*/React.createElement(Message, {\n id: "fabric-bitcoin-payjoin-sessions-strip",\n size: "small",\n info: true,\n style: {\n marginTop: \'0.25rem\',\n marginBottom: \'1rem\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "list alternate outline"\n }), /*#__PURE__*/React.createElement("strong", null, "Hub deposit sessions"), \' \', "(not expired): ", this.state.payjoinSessionsSnapshot.activeNotExpired, this.state.payjoinSessionsSnapshot.awaitingCompletion > 0 ? /*#__PURE__*/React.createElement(React.Fragment, null, " \\u2014 ", this.state.payjoinSessionsSnapshot.awaitingCompletion, " still in progress") : null, ".", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/payments"\n }, "Payments"), \' \', "lists sessions and payer tools.") : null, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Creates a BIP21 URI with ", /*#__PURE__*/React.createElement("code", null, "pj="), " pointing at this Hub\'s single Payjoin endpoint for BIP78-compatible payjoin clients."), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Requested amount (sats, optional)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "0",\n step: "1",\n placeholder: "25000",\n value: this.state.payjoinAmountSats,\n onChange: function onChange(e) {\n return _this3.setState({\n payjoinAmountSats: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Label (optional)"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "Initial hub deposit",\n value: this.state.payjoinLabel,\n onChange: function onChange(e) {\n return _this3.setState({\n payjoinLabel: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Memo (optional)"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "Shown in wallet (optional)",\n value: this.state.payjoinMemo,\n onChange: function onChange(e) {\n return _this3.setState({\n payjoinMemo: e.target.value\n });\n }\n }))), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n onClick: function onClick() {\n return _this3.handleCreatePayjoinDeposit();\n },\n disabled: !this.state.payjoinEnabled\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield alternate"\n }), "Create Payjoin Deposit Request"), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n onClick: function onClick() {\n return _this3.handleRefreshPayjoinSession();\n },\n disabled: !this.state.payjoinSessionId\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh Session")), this.state.payjoinResult && /*#__PURE__*/React.createElement(Message, {\n style: {\n marginTop: \'1em\'\n },\n negative: !!this.state.payjoinResult.error,\n positive: !this.state.payjoinResult.error\n }, /*#__PURE__*/React.createElement(Message.Header, null, this.state.payjoinResult.error ? \'Payjoin request failed\' : \'Payjoin session\'), !this.state.payjoinResult.error && (this.state.payjoinResult.id || this.state.payjoinResult.bip21Uri) && /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.75em\',\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n type: "button",\n disabled: !this.state.payjoinResult.bip21Uri,\n onClick: function onClick() {\n return copyToClipboard(_this3.state.payjoinResult.bip21Uri || \'\');\n },\n title: "Copy BIP21 URI for wallet paste"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy outline"\n }), "Copy BIP21"), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n type: "button",\n disabled: !this.state.payjoinResult.id,\n onClick: function onClick() {\n return copyToClipboard(String(_this3.state.payjoinResult.id || \'\'));\n },\n title: "Copy session id"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy outline"\n }), "Copy session ID"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n size: "small",\n primary: true,\n to: this.state.payjoinResult.id ? "/payments?payjoinSession=".concat(encodeURIComponent(this.state.payjoinResult.id)) : \'/payments\'\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "credit card outline"\n }), "Open Payments (submit PSBT)")), /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\'\n }\n }, JSON.stringify(this.state.payjoinResult, null, 2)))) : null, isFaucetPage ? /*#__PURE__*/React.createElement(Segment, {\n "data-faucet-segment": true,\n id: "fabric-bitcoin-faucet"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Faucet"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Bridge:"), " draws from Beacon/Hub wallet (regtest only). Max 1,000,000 sats per request.", bitcoinNetwork && /*#__PURE__*/React.createElement("span", null, " Use addresses for ", /*#__PURE__*/React.createElement("strong", null, bitcoinNetwork), " (e.g. ", addressPlaceholder, ")."), \' \', "Choose ", /*#__PURE__*/React.createElement("strong", null, "Use my receive address"), " so funds go to your wallet; otherwise balance will not update.", \' \', /*#__PURE__*/React.createElement("strong", null, "Note:"), " mining with ", /*#__PURE__*/React.createElement("strong", null, "Generate Block"), " tops up the Hub wallet, not your browser chip \\u2014 this flow is how you transfer from Hub to identity."), /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Network:"), " ", bitcoinNetwork || \'unknown\'), /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Hub available balance:"), \' \', Number(this.state.bitcoinStatus && this.state.bitcoinStatus.balance != null ? this.state.bitcoinStatus.balance : 0).toFixed(8), " BTC", this.state.bitcoinStatus && this.state.bitcoinStatus.beacon && /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'1em\',\n color: \'#666\'\n }\n }, "(Beacon: ", formatSatsDisplay(this.state.bitcoinStatus.beacon.balanceSats || 0), " sats)")), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Send to address (", bitcoinNetwork || \'any\', ")"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Input, {\n placeholder: addressPlaceholder,\n value: this.state.faucetAddress,\n onChange: function onChange(e) {\n return _this3.setState({\n faucetAddress: e.target.value\n });\n },\n style: {\n flex: \'1 1 12em\',\n minWidth: \'14em\'\n }\n }), wallet.address && canGenerateBlocks && /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n onClick: function onClick() {\n return _this3.setState({\n faucetAddress: wallet.address\n });\n },\n title: "Fill with your current receive address (same network as Hub)"\n }, "Use my receive address"))), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Amount (sats)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "1",\n max: "1000000",\n step: "1",\n placeholder: "10000",\n value: this.state.faucetAmountSats,\n onChange: function onChange(e) {\n return _this3.setState({\n faucetAmountSats: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n onClick: function onClick() {\n return _this3.handleRequestFaucet();\n },\n disabled: !canGenerateBlocks || !(this.state.faucetAddress || \'\').trim(),\n title: !canGenerateBlocks ? \'Bitcoin must be available (regtest) to use faucet\' : !(this.state.faucetAddress || \'\').trim() ? "Enter a ".concat(bitcoinNetwork || \'regtest\', " address (e.g. ").concat(addressPlaceholder, ")") : \'Send test coins to this address\'\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "tint"\n }), "Request from faucet")), this.state.faucetResult && /*#__PURE__*/React.createElement(Message, {\n style: {\n marginTop: \'1em\'\n },\n positive: !this.state.faucetResult.error,\n negative: !!this.state.faucetResult.error\n }, /*#__PURE__*/React.createElement(Message.Header, null, this.state.faucetResult.error ? \'Faucet failed\' : \'Faucet\'), !this.state.faucetResult.error && function () {\n var fr = _this3.state.faucetResult;\n var faucet = fr && fr.faucet;\n var txid = faucet && faucet.txid;\n var amountSats = faucet && faucet.amountSats;\n var dest = faucet && faucet.destination;\n if (txid || amountSats) {\n return /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.5em\',\n marginBottom: \'0.5em\'\n }\n }, amountSats ? "Sent ".concat(Number(amountSats).toLocaleString(), " sats") : \'Sent\', dest ? " to ".concat(dest.slice(0, 12), "\\u2026").concat(dest.slice(-8)) : \'\', ".", txid ? /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.35em\'\n }\n }, hubUi.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(String(txid)))\n }, "View transaction") : /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.9em\'\n }\n }, String(txid))) : null);\n }\n return null;\n }(), /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\',\n marginTop: \'0.5em\'\n }\n }, JSON.stringify(this.state.faucetResult, null, 2)))) : null, hubUi.bitcoinPayments ? /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Send Payment (Layer 1)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: 0\n }\n }, "This section moved to the dedicated wallet transactions screen (includes federation multisig vault tools).", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions?scope=wallet#fabric-federation-wallet-panel"\n }, "Open wallet & federation"), ".")) : null, hubUi.bitcoinLightning && isLightningPage ? /*#__PURE__*/React.createElement(Segment, {\n id: "fabric-bitcoin-lightning"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Lightning Node (Layer 2)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Bridge:"), " create invoice, decode, and pay go through the Hub or external Lightning API."), lightningAvailable && this.state.lightningStatus && this.state.lightningStatus.status === \'RUNNING\' && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Message, {\n positive: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt"\n }), "Lightning node running", this.state.lightningStatus.node && this.state.lightningStatus.node.alias ? " \\u2014 ".concat(this.state.lightningStatus.node.alias) : \'\'), /*#__PURE__*/React.createElement("p", null, this.state.lightningChannels.length, " channel(s).")), this.state.lightningStatus.node && (this.state.lightningStatus.node.id || this.state.lightningStatus.node.address || this.state.lightningStatus.node.binding) && /*#__PURE__*/React.createElement(Segment, {\n style: {\n padding: \'0.75em\',\n marginBottom: \'1em\',\n background: \'rgba(0,0,0,0.03)\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h5",\n style: {\n margin: \'0 0 0.5em 0\'\n }\n }, "Share with other peers"), this.state.lightningStatus.node.id && /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Peer ID:"), \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.9em\'\n }\n }, this.state.lightningStatus.node.id)), (this.state.lightningStatus.node.address || this.state.lightningStatus.node.binding) && /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "IP:PORT:"), \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.9em\'\n }\n }, this.state.lightningStatus.node.address || this.state.lightningStatus.node.binding)), this.state.lightningStatus.node.id && (this.state.lightningStatus.node.address || this.state.lightningStatus.node.binding) && /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Connect string (for Create channel):"), \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.9em\'\n }\n }, this.state.lightningStatus.node.id, "@", this.state.lightningStatus.node.address || this.state.lightningStatus.node.binding)), (this.state.lightningStatus.node.id || this.state.lightningStatus.node.address || this.state.lightningStatus.node.binding) && /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n var node = _this3.state.lightningStatus.node;\n var hostPort = node.address || node.binding;\n var parts = [];\n if (node.id) parts.push(node.id);\n if (hostPort) parts.push(hostPort);\n if (node.id && hostPort) parts.push("".concat(node.id, "@").concat(hostPort));\n var text = parts.join(\'\\n\');\n try {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n navigator.clipboard.writeText(text);\n } else {\n var ta = document.createElement(\'textarea\');\n ta.value = text;\n ta.style.position = \'fixed\';\n ta.style.opacity = \'0\';\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\'copy\');\n document.body.removeChild(ta);\n }\n } catch (e) {}\n },\n title: "Copy Lightning peer ID and address"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n }), "Copy to clipboard"))), !lightningAvailable && /*#__PURE__*/React.createElement(Message, {\n info: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Lightning"), /*#__PURE__*/React.createElement("p", null, this.state.lightningStatus && this.state.lightningStatus.message || \'Lightning runs automatically with regtest. Use regtest for local development.\')), lightningAvailable && this.state.lightningStatus && this.state.lightningStatus.status === \'RUNNING\' && /*#__PURE__*/React.createElement(Segment, {\n style: {\n padding: \'0.75em\',\n marginBottom: \'1em\',\n background: \'rgba(0,0,0,0.02)\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h5",\n style: {\n margin: \'0 0 0.5em 0\'\n }\n }, "Fund Lightning node"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\',\n fontSize: \'0.95em\'\n }\n }, "Send on-chain Bitcoin to this address to fund the Lightning node. You need funds before creating channels. Use the Faucet below (regtest) or Send Payment."), this.state.lightningStatus.node && this.state.lightningStatus.node.depositAddress && /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Deposit address:"), \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.9em\'\n }\n }, this.state.lightningStatus.node.depositAddress), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n icon: true,\n style: {\n marginLeft: \'0.25em\'\n },\n onClick: function onClick() {\n var addr = _this3.state.lightningStatus.node.depositAddress;\n try {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n navigator.clipboard.writeText(addr);\n } else {\n var ta = document.createElement(\'textarea\');\n ta.value = addr;\n ta.style.position = \'fixed\';\n ta.style.opacity = \'0\';\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\'copy\');\n document.body.removeChild(ta);\n }\n } catch (e) {}\n },\n title: "Copy deposit address"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n })), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n icon: true,\n style: {\n marginLeft: \'0.25em\'\n },\n onClick: function onClick() {\n _this3.setState({\n faucetAddress: _this3.state.lightningStatus.node.depositAddress\n });\n var faucetSegment = document.querySelector(\'[data-faucet-segment]\');\n if (faucetSegment) faucetSegment.scrollIntoView({\n behavior: \'smooth\'\n });\n },\n title: "Use this address in the Faucet below"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "tint"\n }), "Use in Faucet")), this.state.lightningStatus.node && function (_node$balanceSats, _node$balanceUnconfir, _node$balanceImmature) {\n var node = _this3.state.lightningStatus.node;\n var fromStatus = {\n confirmed: Number((_node$balanceSats = node.balanceSats) !== null && _node$balanceSats !== void 0 ? _node$balanceSats : 0),\n unconfirmed: Number((_node$balanceUnconfir = node.balanceUnconfirmedSats) !== null && _node$balanceUnconfir !== void 0 ? _node$balanceUnconfir : 0),\n immature: Number((_node$balanceImmature = node.balanceImmatureSats) !== null && _node$balanceImmature !== void 0 ? _node$balanceImmature : 0)\n };\n var fromOutputs = _this3.getLightningBalanceFromOutputs(_this3.state.lightningOutputs);\n var statusTotal = fromStatus.confirmed + fromStatus.unconfirmed + fromStatus.immature;\n var outputsTotal = fromOutputs.confirmed + fromOutputs.unconfirmed + fromOutputs.immature;\n var bal = outputsTotal > statusTotal ? fromOutputs : fromStatus;\n var total = bal.confirmed + bal.unconfirmed + bal.immature;\n return /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "On-chain balance:"), \' \', formatSatsDisplay(bal.confirmed), " sats confirmed", bal.unconfirmed > 0 && /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.5em\'\n }\n }, "+ ", formatSatsDisplay(bal.unconfirmed), " unconfirmed"), bal.immature > 0 && /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.5em\'\n }\n }, "+ ", formatSatsDisplay(bal.immature), " immature"), total > 0 && (bal.unconfirmed > 0 || bal.immature > 0) && /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.5em\',\n fontWeight: 600\n }\n }, "= ", formatSatsDisplay(total), " sats total"), total < 10000 && /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.5em\',\n color: \'#b00\'\n }\n }, "(need at least 10,000 sats for channels)"), _this3.state.bitcoinStatus && _this3.state.bitcoinStatus.network === \'regtest\' && /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.85em\',\n color: \'#666\',\n marginTop: \'0.25em\',\n marginBottom: 0\n }\n }, "On regtest: generate blocks after sending to confirm. Click refresh to update."));\n }()), lightningAvailable && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: "/contracts",\n style: {\n color: \'inherit\'\n }\n }, "Channels (", this.state.lightningChannels.length, ")")), this.state.lightningChannels.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No channels yet. Create one below to connect to another Lightning node.") : /*#__PURE__*/React.createElement(Table, {\n celled: true,\n compact: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Peer"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "State"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Capacity"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Our balance"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Short channel ID"))), /*#__PURE__*/React.createElement(Table.Body, null, this.state.lightningChannels.map(function (lnChannel, listIndex) {\n var idForPath = lnChannel.channel_id || lnChannel.funding_txid;\n var path = idForPath != null && String(idForPath).trim() !== \'\' ? "/services/bitcoin/channels/".concat(encodeURIComponent(String(idForPath).trim())) : null;\n var rowKey = path != null ? path : "ln-ch-".concat(listIndex);\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: rowKey,\n style: {\n cursor: \'pointer\'\n },\n onClick: path ? function () {\n return _this3.navigateInternalPath(path);\n } : undefined\n }, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, _this3.trimHash(lnChannel.peer_id || lnChannel.funding_txid || \'\'))), /*#__PURE__*/React.createElement(Table.Cell, null, lnChannel.state || \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, lnChannel.amount_msat != null ? "".concat(formatSatsDisplay(Math.floor(Number(lnChannel.amount_msat) / 1000)), " sats") : lnChannel.channel_sat != null ? "".concat(formatSatsDisplay(lnChannel.channel_sat), " sats") : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, lnChannel.our_amount_msat != null ? "".concat(formatSatsDisplay(Math.floor(Number(lnChannel.our_amount_msat) / 1000)), " sats") : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.8em\'\n }\n }, lnChannel.short_channel_id || \'—\')));\n }))), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1.5em\'\n }\n }, "Create channel"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, "Connect to a peer and open a channel. Paste the ", /*#__PURE__*/React.createElement("strong", null, "connect string (id@ip:port)"), " from the other node\'s Share section above."), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Remote (id@ip:port)"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "03abc123...@192.168.50.5:9735",\n value: this.state.channelCreateRemote,\n onChange: function onChange(e) {\n return _this3.setState({\n channelCreateRemote: e.target.value\n });\n }\n }))), /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Amount (sats, min 10000)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "10000",\n placeholder: "100000",\n value: this.state.channelCreateAmountSats,\n onChange: function onChange(e) {\n return _this3.setState({\n channelCreateAmountSats: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Push to peer (msat, optional)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "0",\n placeholder: "0",\n value: this.state.channelCreatePushMsat,\n onChange: function onChange(e) {\n return _this3.setState({\n channelCreatePushMsat: e.target.value\n });\n }\n }))), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n loading: this.state.channelCreateLoading,\n disabled: !lightningAvailable || this.state.channelCreateLoading,\n onClick: function onClick() {\n return _this3.handleCreateChannel();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "plug"\n }), "Create channel")), this.state.channelCreateResult && /*#__PURE__*/React.createElement(Message, {\n style: {\n marginTop: \'1em\'\n },\n negative: !!this.state.channelCreateResult.error,\n positive: !this.state.channelCreateResult.error\n }, /*#__PURE__*/React.createElement(Message.Header, null, this.state.channelCreateResult.error ? \'Channel creation failed\' : \'Channel created\'), this.state.channelCreateResult.error && /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: \'0.5em\'\n }\n }, this.state.channelCreateResult.error, this.state.channelCreateResult.detail && " \\u2014 ".concat(this.state.channelCreateResult.detail)), this.state.channelCreateResult.error && /connect|peer|connection/i.test(this.state.channelCreateResult.error) && /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.9em\',\n color: \'#666\',\n marginTop: \'0.5em\'\n }\n }, "Ensure the ", /*#__PURE__*/React.createElement("strong", null, "Remote (id@ip:port)"), " field is filled with the other node\'s connect string from their Share section. The other node must be running and reachable (use the host\'s IP, not 127.0.0.1, when connecting across machines)."), this.state.channelCreateResult.error && /wrong key|handshake/i.test(this.state.channelCreateResult.error) && /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.9em\',\n color: \'#666\',\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Wrong key / handshake failed"), " means the node ID doesn\'t match the node at that address. Use the ", /*#__PURE__*/React.createElement("strong", null, "other"), " node\'s connect string \\u2014 not your own. If you\'re on the same machine, ensure you\'re not connecting this Hub to itself."), this.state.channelCreateResult.error && /bad file descriptor/i.test(this.state.channelCreateResult.error) && /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.9em\',\n color: \'#666\',\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Bad file descriptor"), " often indicates a CLN resource issue. Try: restart the Lightning node; check ", /*#__PURE__*/React.createElement("code", null, "ulimit -n"), " (file descriptor limit); verify the remote is listening with ", /*#__PURE__*/React.createElement("code", null, "nc -zv host 9735"), "."), this.state.channelCreateResult.error && /Unsupported feature|feature 44|WIRE_WARNING|peer_disconnected/i.test([this.state.channelCreateResult.error, this.state.channelCreateResult.detail].filter(Boolean).join(\' \')) && /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.9em\',\n color: \'#666\',\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Unsupported feature 44"), " means the remote node does not support BOLT 9 channel_type. Upgrade the remote Lightning node (LND, CLN, or Eclair) to a version from 2021 or later."), this.state.channelCreateResult.hint && /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.9em\',\n color: \'#666\',\n marginTop: \'0.5em\'\n }\n }, this.state.channelCreateResult.hint), this.state.channelCreateResult.status && /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.85em\',\n color: \'#555\',\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Status:"), " ", this.state.channelCreateResult.status.peerCount != null ? "".concat(this.state.channelCreateResult.status.peerCount, " peers") : \'—\', " ", this.state.channelCreateResult.status.idleDisconnected != null ? "(".concat(this.state.channelCreateResult.status.idleDisconnected, " idle disconnected)") : \'\'), /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\',\n marginTop: \'0.5em\'\n }\n }, JSON.stringify(this.state.channelCreateResult, null, 2)))), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1.5em\'\n }\n }, "Invoices & payments"), /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.88em\',\n color: \'#666\',\n margin: \'0 0 0.75em\'\n }\n }, "Below is ", /*#__PURE__*/React.createElement("strong", null, "Lightning (BOLT11)"), ". For ", /*#__PURE__*/React.createElement("strong", null, "on-chain payment requests"), " stored in the browser (account-to-account walkthrough), use", \' \', hubUi.bitcoinInvoices ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/invoices#fabric-invoices-tab-demo"\n }, "Invoices") : /*#__PURE__*/React.createElement("strong", null, "Invoices"), "."), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Create invoice amount (sats)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "1",\n step: "1",\n placeholder: "500",\n value: this.state.invoiceAmountSats,\n onChange: function onChange(e) {\n return _this3.setState({\n invoiceAmountSats: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Invoice memo"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "Shown to payer (optional)",\n value: this.state.invoiceMemo,\n onChange: function onChange(e) {\n return _this3.setState({\n invoiceMemo: e.target.value\n });\n }\n }))), /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n return _this3.handleCreateLightningInvoice();\n },\n disabled: !lightningAvailable\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "add circle"\n }), "Create Invoice"), /*#__PURE__*/React.createElement(Form.Field, {\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("label", null, "Invoice (BOLT11)"), /*#__PURE__*/React.createElement(Form.TextArea, {\n rows: 3,\n placeholder: "lnbc...",\n value: this.state.invoiceInput,\n onChange: function onChange(e) {\n return _this3.setState({\n invoiceInput: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n onClick: function onClick() {\n return _this3.handleDecodeLightningInvoice();\n },\n disabled: !lightningAvailable\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "search"\n }), "Decode"), /*#__PURE__*/React.createElement(Button, {\n color: "green",\n onClick: function onClick() {\n return _this3.handlePayLightningInvoice();\n },\n disabled: !lightningAvailable\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt"\n }), "Pay Invoice")), this.state.lightningResult && /*#__PURE__*/React.createElement(Message, {\n style: {\n marginTop: \'1em\'\n },\n negative: !!this.state.lightningResult.error,\n positive: !this.state.lightningResult.error\n }, /*#__PURE__*/React.createElement(Message.Header, null, this.state.lightningResult.error ? \'Lightning action failed\' : \'Lightning response\'), /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\'\n }\n }, JSON.stringify(this.state.lightningResult, null, 2)))) : null, isExplorerPage ? /*#__PURE__*/React.createElement(Segment, {\n id: "bitcoin-explorer"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Explorer"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Bridge (Hub node):"), " blocks and mempool transactions."), !hubUi.bitcoinExplorer && (this.state.blocks.length > 0 || this.state.transactions.length > 0) ? /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n }\n }, "Enable ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin \\u2014 Block & transaction detail routes"), " in Admin \\u2192 Feature visibility to open block and tx pages from the lists below.") : null, /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Recent Blocks"), this.state.blocks.length === 0 ? explorerDataPending ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, /*#__PURE__*/React.createElement(Loader, {\n inline: true,\n active: true,\n size: "small"\n }), " Loading block list from the Hub\\u2026") : /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No block data yet.") : /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true\n }, this.state.blocks.map(function (block, listIndex) {\n var txCount = block.txCount != null ? Number(block.txCount) : block.tx_count != null ? Number(block.tx_count) : null;\n var rewardSats = block.rewardSats != null ? Number(block.rewardSats) : null;\n var totalOutSats = block.totalOutSats != null ? Number(block.totalOutSats) : null;\n var txPart = Number.isFinite(txCount) ? "".concat(txCount, " tx").concat(txCount === 1 ? \'\' : \'s\') : null;\n var rewardPart = Number.isFinite(rewardSats) && rewardSats >= 0 ? "reward ".concat(_this3.satsToBTC(rewardSats), " BTC") : null;\n var volumePart = Number.isFinite(totalOutSats) && totalOutSats >= 0 ? "volume ".concat(_this3.satsToBTC(totalOutSats), " BTC") : null;\n var metaBits = [txPart, rewardPart, volumePart].filter(Boolean);\n var meta = metaBits.length ? " \\xB7 ".concat(metaBits.join(\' · \')) : \'\';\n return /*#__PURE__*/React.createElement(List.Item, {\n key: block.hash || block.id || listIndex\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, block.hash || block.id ? hubUi.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/blocks/".concat(encodeURIComponent(block.hash || block.id))\n }, "#", block.height != null ? block.height : \'n/a\', " - ", _this3.trimHash(block.hash || block.id || \'\')) : /*#__PURE__*/React.createElement("span", null, "#", block.height != null ? block.height : \'n/a\', " - ", _this3.trimHash(block.hash || block.id || \'\')) : /*#__PURE__*/React.createElement("span", null, "#", block.height != null ? block.height : \'n/a\', " - hash unavailable")), /*#__PURE__*/React.createElement(List.Description, null, block.time ? new Date(Number(block.time) * 1000).toLocaleString() : \'time unavailable\', meta)));\n })), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1em\'\n }\n }, "Mempool Transactions (", this.state.transactions.length, ")"), this.state.transactions.length === 0 ? explorerDataPending ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, /*#__PURE__*/React.createElement(Loader, {\n inline: true,\n active: true,\n size: "small"\n }), " Loading mempool transactions\\u2026") : /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No transaction data yet.") : /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true\n }, this.state.transactions.map(function (tx, listIndex) {\n var tid = tx.txid || tx.id || \'\';\n var unconfirmed = tx.confirmations != null ? Number(tx.confirmations) === 0 : true;\n return /*#__PURE__*/React.createElement(List.Item, {\n key: tid || listIndex\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, tid ? hubUi.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(String(tid)))\n }, _this3.trimHash(tid)) : /*#__PURE__*/React.createElement("span", null, _this3.trimHash(tid)) : _this3.trimHash(tid), unconfirmed && /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.5em\',\n fontSize: \'0.85em\',\n color: \'#f2711c\'\n }\n }, "(mempool)")), /*#__PURE__*/React.createElement(List.Description, null, tx.value != null ? "".concat(tx.value, " BTC") : tx.amountSats != null ? "".concat(formatSatsDisplay(tx.amountSats), " sats") : \'amount unavailable\')));\n }))) : null, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n onClick: function onClick() {\n return _this3.setState({\n advancedOpen: !_this3.state.advancedOpen\n });\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cogs"\n }), this.state.advancedOpen ? \'Hide\' : \'Show\', " advanced UTXO controls"), this.state.advancedOpen && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "UTXO detail (advanced)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Bridge (Hub node):"), " UTXOs from upstream payments API."), this.state.utxos.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No UTXO data returned by upstream payments API.") : /*#__PURE__*/React.createElement(Table, {\n compact: "very",\n celled: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Txid"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Vout"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Amount"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Confirmations"))), /*#__PURE__*/React.createElement(Table.Body, null, this.state.utxos.map(function (utxo, listIndex) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "".concat(utxo.txid || listIndex, ":").concat(utxo.vout || 0)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", null, _this3.trimHash(utxo.txid || utxo.id || \'\'))), /*#__PURE__*/React.createElement(Table.Cell, null, utxo.vout != null ? utxo.vout : \'-\'), /*#__PURE__*/React.createElement(Table.Cell, null, utxo.amount != null ? utxo.amount : utxo.amountSats != null ? "".concat(formatSatsDisplay(utxo.amountSats), " sats") : \'-\'), /*#__PURE__*/React.createElement(Table.Cell, null, utxo.confirmations != null ? utxo.confirmations : \'-\'));\n }))))), /*#__PURE__*/React.createElement(Modal, {\n open: this.state.settingsOpen,\n onClose: function onClose() {\n return _this3.setState({\n settingsOpen: false\n });\n },\n size: "small"\n }, /*#__PURE__*/React.createElement(Modal.Header, null, "Bitcoin Upstream Settings"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Explorer API base URL"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "https://explorer.fabric.pub",\n value: this.state.upstreamDraft.explorerBaseUrl,\n onChange: function onChange(e) {\n return _this3.setState({\n upstreamDraft: _objectSpread(_objectSpread({}, _this3.state.upstreamDraft), {}, {\n explorerBaseUrl: e.target.value\n })\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Payments API base URL"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "https://payments.fabric.pub",\n value: this.state.upstreamDraft.paymentsBaseUrl,\n onChange: function onChange(e) {\n return _this3.setState({\n upstreamDraft: _objectSpread(_objectSpread({}, _this3.state.upstreamDraft), {}, {\n paymentsBaseUrl: e.target.value\n })\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Lightning API base URL"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "https://lightning.fabric.pub",\n value: this.state.upstreamDraft.lightningBaseUrl,\n onChange: function onChange(e) {\n return _this3.setState({\n upstreamDraft: _objectSpread(_objectSpread({}, _this3.state.upstreamDraft), {}, {\n lightningBaseUrl: e.target.value\n })\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Payjoin API base URL"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "https://hub.fabric.pub/services/payjoin",\n value: this.state.upstreamDraft.payjoinBaseUrl || \'\',\n onChange: function onChange(e) {\n return _this3.setState({\n upstreamDraft: _objectSpread(_objectSpread({}, _this3.state.upstreamDraft), {}, {\n payjoinBaseUrl: e.target.value\n })\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "API token (optional)"), /*#__PURE__*/React.createElement(Input, {\n type: "password",\n placeholder: "Bearer token",\n value: this.state.upstreamDraft.apiToken,\n onChange: function onChange(e) {\n return _this3.setState({\n upstreamDraft: _objectSpread(_objectSpread({}, _this3.state.upstreamDraft), {}, {\n apiToken: e.target.value\n })\n });\n }\n })))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n return _this3.setState({\n settingsOpen: false\n });\n }\n }, "Cancel"), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n onClick: function onClick() {\n var saved = saveUpstreamSettings(_this3.state.upstreamDraft);\n _this3.setState({\n upstream: saved,\n settingsOpen: false\n }, function () {\n return _this3.refresh();\n });\n }\n }, "Save"))));\n }\n }]);\n}(React.Component);\nmodule.exports = BitcoinHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0JpdGNvaW5Ib21lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLGVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBQyxlQUFBLENBQUFGLENBQUEsS0FBQUcscUJBQUEsQ0FBQUgsQ0FBQSxFQUFBQyxDQUFBLEtBQUFHLDJCQUFBLENBQUFKLENBQUEsRUFBQUMsQ0FBQSxLQUFBSSxnQkFBQTtBQUFBLFNBQUFBLGlCQUFBLGNBQUFDLFNBQUE7QUFBQSxTQUFBSCxzQkFBQUgsQ0FBQSxFQUFBTyxDQUFBLFFBQUFDLENBQUEsV0FBQVIsQ0FBQSxnQ0FBQVMsTUFBQSxJQUFBVCxDQUFBLENBQUFTLE1BQUEsQ0FBQUMsUUFBQSxLQUFBVixDQUFBLDRCQUFBUSxDQUFBLFFBQUFQLENBQUEsRUFBQVUsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxPQUFBQyxDQUFBLE9BQUFDLENBQUEsaUJBQUFKLENBQUEsSUFBQUosQ0FBQSxHQUFBQSxDQUFBLENBQUFTLElBQUEsQ0FBQWpCLENBQUEsR0FBQWtCLElBQUEsUUFBQVgsQ0FBQSxRQUFBWSxNQUFBLENBQUFYLENBQUEsTUFBQUEsQ0FBQSxVQUFBTyxDQUFBLHVCQUFBQSxDQUFBLElBQUFkLENBQUEsR0FBQVcsQ0FBQSxDQUFBSyxJQUFBLENBQUFULENBQUEsR0FBQVksSUFBQSxNQUFBTixDQUFBLENBQUFPLElBQUEsQ0FBQXBCLENBQUEsQ0FBQXFCLEtBQUEsR0FBQVIsQ0FBQSxDQUFBUyxNQUFBLEtBQUFoQixDQUFBLEdBQUFRLENBQUEsaUJBQUFmLENBQUEsSUFBQWdCLENBQUEsT0FBQUwsQ0FBQSxHQUFBWCxDQUFBLHlCQUFBZSxDQUFBLFlBQUFQLENBQUEsZUFBQUssQ0FBQSxHQUFBTCxDQUFBLGNBQUFXLE1BQUEsQ0FBQU4sQ0FBQSxNQUFBQSxDQUFBLDJCQUFBRyxDQUFBLFFBQUFMLENBQUEsYUFBQUcsQ0FBQTtBQUFBLFNBQUFaLGdCQUFBRixDQUFBLFFBQUF3QixLQUFBLENBQUFDLE9BQUEsQ0FBQXpCLENBQUEsVUFBQUEsQ0FBQTtBQUFBLFNBQUEwQiwyQkFBQTFCLENBQUEsRUFBQUMsQ0FBQSxRQUFBTyxDQUFBLHlCQUFBQyxNQUFBLElBQUFULENBQUEsQ0FBQVMsTUFBQSxDQUFBQyxRQUFBLEtBQUFWLENBQUEscUJBQUFRLENBQUEsUUFBQWdCLEtBQUEsQ0FBQUMsT0FBQSxDQUFBekIsQ0FBQSxNQUFBUSxDQUFBLEdBQUFKLDJCQUFBLENBQUFKLENBQUEsTUFBQUMsQ0FBQSxJQUFBRCxDQUFBLHVCQUFBQSxDQUFBLENBQUF1QixNQUFBLElBQUFmLENBQUEsS0FBQVIsQ0FBQSxHQUFBUSxDQUFBLE9BQUFtQixFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQWpCLENBQUEsV0FBQUEsRUFBQSxXQUFBZ0IsRUFBQSxJQUFBM0IsQ0FBQSxDQUFBdUIsTUFBQSxLQUFBSCxJQUFBLFdBQUFBLElBQUEsTUFBQUUsS0FBQSxFQUFBdEIsQ0FBQSxDQUFBMkIsRUFBQSxVQUFBMUIsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLFVBQUFBLENBQUEsS0FBQWUsQ0FBQSxFQUFBYSxDQUFBLGdCQUFBdEIsU0FBQSxpSkFBQVUsQ0FBQSxFQUFBRixDQUFBLE9BQUFELENBQUEsZ0JBQUFnQixDQUFBLFdBQUFBLEVBQUEsSUFBQXJCLENBQUEsR0FBQUEsQ0FBQSxDQUFBUyxJQUFBLENBQUFqQixDQUFBLE1BQUFXLENBQUEsV0FBQUEsRUFBQSxRQUFBWCxDQUFBLEdBQUFRLENBQUEsQ0FBQVUsSUFBQSxXQUFBSixDQUFBLEdBQUFkLENBQUEsQ0FBQW9CLElBQUEsRUFBQXBCLENBQUEsS0FBQUMsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLElBQUFhLENBQUEsT0FBQUcsQ0FBQSxHQUFBaEIsQ0FBQSxLQUFBZSxDQUFBLFdBQUFBLEVBQUEsVUFBQUQsQ0FBQSxZQUFBTixDQUFBLGNBQUFBLENBQUEsOEJBQUFLLENBQUEsUUFBQUcsQ0FBQTtBQUFBLFNBQUFaLDRCQUFBSixDQUFBLEVBQUFjLENBQUEsUUFBQWQsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBOEIsaUJBQUEsQ0FBQTlCLENBQUEsRUFBQWMsQ0FBQSxPQUFBTixDQUFBLE1BQUF1QixRQUFBLENBQUFkLElBQUEsQ0FBQWpCLENBQUEsRUFBQWdDLEtBQUEsNkJBQUF4QixDQUFBLElBQUFSLENBQUEsQ0FBQWlDLFdBQUEsS0FBQXpCLENBQUEsR0FBQVIsQ0FBQSxDQUFBaUMsV0FBQSxDQUFBQyxJQUFBLGFBQUExQixDQUFBLGNBQUFBLENBQUEsR0FBQWdCLEtBQUEsQ0FBQVcsSUFBQSxDQUFBbkMsQ0FBQSxvQkFBQVEsQ0FBQSwrQ0FBQTRCLElBQUEsQ0FBQTVCLENBQUEsSUFBQXNCLGlCQUFBLENBQUE5QixDQUFBLEVBQUFjLENBQUE7QUFBQSxTQUFBZ0Isa0JBQUE5QixDQUFBLEVBQUFjLENBQUEsYUFBQUEsQ0FBQSxJQUFBQSxDQUFBLEdBQUFkLENBQUEsQ0FBQXVCLE1BQUEsTUFBQVQsQ0FBQSxHQUFBZCxDQUFBLENBQUF1QixNQUFBLFlBQUF0QixDQUFBLE1BQUFVLENBQUEsR0FBQWEsS0FBQSxDQUFBVixDQUFBLEdBQUFiLENBQUEsR0FBQWEsQ0FBQSxFQUFBYixDQUFBLElBQUFVLENBQUEsQ0FBQVYsQ0FBQSxJQUFBRCxDQUFBLENBQUFDLENBQUEsVUFBQVUsQ0FBQTtBQUFBLFNBQUEwQixhQUFBLElBQ2IsdUtBQUFwQyxDQUFBLEVBQUFPLENBQUEsRUFBQVIsQ0FBQSx3QkFBQVMsTUFBQSxHQUFBQSxNQUFBLE9BQUFFLENBQUEsR0FBQVgsQ0FBQSxDQUFBVSxRQUFBLGtCQUFBTSxDQUFBLEdBQUFoQixDQUFBLENBQUFzQyxXQUFBLDhCQUFBMUIsRUFBQVosQ0FBQSxFQUFBVyxDQUFBLEVBQUFLLENBQUEsRUFBQUosQ0FBQSxRQUFBMkIsQ0FBQSxHQUFBNUIsQ0FBQSxJQUFBQSxDQUFBLENBQUE2QixTQUFBLFlBQUFDLFNBQUEsR0FBQTlCLENBQUEsR0FBQThCLFNBQUEsRUFBQTVCLENBQUEsR0FBQU0sTUFBQSxDQUFBdUIsTUFBQSxDQUFBSCxDQUFBLENBQUFDLFNBQUEsVUFBQUcsbUJBQUEsQ0FBQTlCLENBQUEsdUJBQUFiLENBQUEsRUFBQVcsQ0FBQSxFQUFBSyxDQUFBLFFBQUFKLENBQUEsRUFBQTJCLENBQUEsRUFBQTFCLENBQUEsRUFBQUUsQ0FBQSxNQUFBNkIsQ0FBQSxHQUFBNUIsQ0FBQSxRQUFBNkIsQ0FBQSxPQUFBQyxDQUFBLEtBQUFGLENBQUEsS0FBQWpDLENBQUEsS0FBQW9DLENBQUEsRUFBQTlDLENBQUEsRUFBQWEsQ0FBQSxFQUFBa0MsQ0FBQSxFQUFBakMsQ0FBQSxFQUFBaUMsQ0FBQSxDQUFBQyxJQUFBLENBQUFoRCxDQUFBLE1BQUErQyxDQUFBLFdBQUFBLEVBQUF4QyxDQUFBLEVBQUFSLENBQUEsV0FBQVksQ0FBQSxHQUFBSixDQUFBLEVBQUErQixDQUFBLE1BQUExQixDQUFBLEdBQUFaLENBQUEsRUFBQTZDLENBQUEsQ0FBQW5DLENBQUEsR0FBQVgsQ0FBQSxFQUFBYyxDQUFBLGdCQUFBa0MsRUFBQWhELENBQUEsRUFBQVcsQ0FBQSxTQUFBNEIsQ0FBQSxHQUFBdkMsQ0FBQSxFQUFBYSxDQUFBLEdBQUFGLENBQUEsRUFBQUgsQ0FBQSxPQUFBcUMsQ0FBQSxJQUFBOUIsQ0FBQSxLQUFBQyxDQUFBLElBQUFSLENBQUEsR0FBQW9DLENBQUEsQ0FBQXJCLE1BQUEsRUFBQWYsQ0FBQSxVQUFBUSxDQUFBLEVBQUFKLENBQUEsR0FBQWdDLENBQUEsQ0FBQXBDLENBQUEsR0FBQXdDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRixDQUFBLEVBQUFyQyxDQUFBLEdBQUFLLENBQUEsS0FBQVosQ0FBQSxRQUFBZ0IsQ0FBQSxHQUFBVCxDQUFBLEtBQUFJLENBQUEsTUFBQUUsQ0FBQSxHQUFBRCxDQUFBLEVBQUEyQixDQUFBLEdBQUEzQixDQUFBLFlBQUEyQixDQUFBLFdBQUEzQixDQUFBLE1BQUFBLENBQUEsTUFBQVgsQ0FBQSxJQUFBVyxDQUFBLE9BQUFvQyxDQUFBLE1BQUFoQyxDQUFBLEdBQUFoQixDQUFBLFFBQUFnRCxDQUFBLEdBQUFwQyxDQUFBLFFBQUEyQixDQUFBLE1BQUFPLENBQUEsQ0FBQUMsQ0FBQSxHQUFBcEMsQ0FBQSxFQUFBbUMsQ0FBQSxDQUFBbkMsQ0FBQSxHQUFBQyxDQUFBLE9BQUFvQyxDQUFBLEdBQUF6QyxDQUFBLEtBQUFTLENBQUEsR0FBQWhCLENBQUEsUUFBQVksQ0FBQSxNQUFBRCxDQUFBLElBQUFBLENBQUEsR0FBQUosQ0FBQSxNQUFBSyxDQUFBLE1BQUFaLENBQUEsRUFBQVksQ0FBQSxNQUFBRCxDQUFBLEVBQUFtQyxDQUFBLENBQUFuQyxDQUFBLEdBQUFKLENBQUEsRUFBQWdDLENBQUEsY0FBQXZCLENBQUEsSUFBQWhCLENBQUEsYUFBQWMsQ0FBQSxRQUFBK0IsQ0FBQSxPQUFBbEMsQ0FBQSxxQkFBQUssQ0FBQSxFQUFBNEIsQ0FBQSxFQUFBckMsQ0FBQSxRQUFBUSxDQUFBLFlBQUFULFNBQUEsdUNBQUF1QyxDQUFBLFVBQUFELENBQUEsSUFBQUksQ0FBQSxDQUFBSixDQUFBLEVBQUFyQyxDQUFBLEdBQUFnQyxDQUFBLEdBQUFLLENBQUEsRUFBQS9CLENBQUEsR0FBQU4sQ0FBQSxHQUFBQyxDQUFBLEdBQUErQixDQUFBLE9BQUF0QyxDQUFBLEdBQUFZLENBQUEsTUFBQWdDLENBQUEsS0FBQWpDLENBQUEsS0FBQTJCLENBQUEsR0FBQUEsQ0FBQSxRQUFBQSxDQUFBLFNBQUFPLENBQUEsQ0FBQW5DLENBQUEsUUFBQXFDLENBQUEsQ0FBQVQsQ0FBQSxFQUFBMUIsQ0FBQSxLQUFBaUMsQ0FBQSxDQUFBbkMsQ0FBQSxHQUFBRSxDQUFBLEdBQUFpQyxDQUFBLENBQUFDLENBQUEsR0FBQWxDLENBQUEsYUFBQUUsQ0FBQSxNQUFBSCxDQUFBLFFBQUEyQixDQUFBLEtBQUF2QixDQUFBLFlBQUFSLENBQUEsR0FBQUksQ0FBQSxDQUFBSSxDQUFBLFdBQUFSLENBQUEsR0FBQUEsQ0FBQSxDQUFBUyxJQUFBLENBQUFMLENBQUEsRUFBQUMsQ0FBQSxVQUFBUCxTQUFBLDJDQUFBRSxDQUFBLENBQUFZLElBQUEsU0FBQVosQ0FBQSxFQUFBSyxDQUFBLEdBQUFMLENBQUEsQ0FBQWMsS0FBQSxFQUFBaUIsQ0FBQSxTQUFBQSxDQUFBLG9CQUFBQSxDQUFBLEtBQUEvQixDQUFBLEdBQUFJLENBQUEsZUFBQUosQ0FBQSxDQUFBUyxJQUFBLENBQUFMLENBQUEsR0FBQTJCLENBQUEsU0FBQTFCLENBQUEsR0FBQVAsU0FBQSx1Q0FBQVUsQ0FBQSxnQkFBQXVCLENBQUEsT0FBQTNCLENBQUEsR0FBQVgsQ0FBQSxjQUFBTyxDQUFBLElBQUFxQyxDQUFBLEdBQUFDLENBQUEsQ0FBQW5DLENBQUEsUUFBQUUsQ0FBQSxHQUFBYixDQUFBLENBQUFpQixJQUFBLENBQUFOLENBQUEsRUFBQW1DLENBQUEsT0FBQWhDLENBQUEsa0JBQUFOLENBQUEsSUFBQUksQ0FBQSxHQUFBWCxDQUFBLEVBQUFzQyxDQUFBLE1BQUExQixDQUFBLEdBQUFMLENBQUEsY0FBQU8sQ0FBQSxtQkFBQU8sS0FBQSxFQUFBZCxDQUFBLEVBQUFZLElBQUEsRUFBQXlCLENBQUEsU0FBQTdDLENBQUEsRUFBQWdCLENBQUEsRUFBQUosQ0FBQSxRQUFBQyxDQUFBLFFBQUFDLENBQUEsZ0JBQUEyQixVQUFBLGNBQUFTLGtCQUFBLGNBQUFDLDJCQUFBLEtBQUEzQyxDQUFBLEdBQUFXLE1BQUEsQ0FBQWlDLGNBQUEsTUFBQWIsQ0FBQSxNQUFBNUIsQ0FBQSxJQUFBSCxDQUFBLENBQUFBLENBQUEsSUFBQUcsQ0FBQSxTQUFBZ0MsbUJBQUEsQ0FBQW5DLENBQUEsT0FBQUcsQ0FBQSxpQ0FBQUgsQ0FBQSxHQUFBSyxDQUFBLEdBQUFzQywwQkFBQSxDQUFBWCxTQUFBLEdBQUFDLFNBQUEsQ0FBQUQsU0FBQSxHQUFBckIsTUFBQSxDQUFBdUIsTUFBQSxDQUFBSCxDQUFBLFlBQUF4QixFQUFBZCxDQUFBLFdBQUFrQixNQUFBLENBQUFrQyxjQUFBLEdBQUFsQyxNQUFBLENBQUFrQyxjQUFBLENBQUFwRCxDQUFBLEVBQUFrRCwwQkFBQSxLQUFBbEQsQ0FBQSxDQUFBcUQsU0FBQSxHQUFBSCwwQkFBQSxFQUFBUixtQkFBQSxDQUFBMUMsQ0FBQSxFQUFBZSxDQUFBLHlCQUFBZixDQUFBLENBQUF1QyxTQUFBLEdBQUFyQixNQUFBLENBQUF1QixNQUFBLENBQUE3QixDQUFBLEdBQUFaLENBQUEsV0FBQWlELGlCQUFBLENBQUFWLFNBQUEsR0FBQVcsMEJBQUEsRUFBQVIsbUJBQUEsQ0FBQTlCLENBQUEsaUJBQUFzQywwQkFBQSxHQUFBUixtQkFBQSxDQUFBUSwwQkFBQSxpQkFBQUQsaUJBQUEsR0FBQUEsaUJBQUEsQ0FBQUssV0FBQSx3QkFBQVosbUJBQUEsQ0FBQVEsMEJBQUEsRUFBQW5DLENBQUEsd0JBQUEyQixtQkFBQSxDQUFBOUIsQ0FBQSxHQUFBOEIsbUJBQUEsQ0FBQTlCLENBQUEsRUFBQUcsQ0FBQSxnQkFBQTJCLG1CQUFBLENBQUE5QixDQUFBLEVBQUFGLENBQUEsaUNBQUFnQyxtQkFBQSxDQUFBOUIsQ0FBQSw4REFBQXdCLFlBQUEsWUFBQUEsYUFBQSxhQUFBbUIsQ0FBQSxFQUFBNUMsQ0FBQSxFQUFBNkMsQ0FBQSxFQUFBMUMsQ0FBQTtBQUFBLFNBQUE0QixvQkFBQTFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBVyxDQUFBLEVBQUFILENBQUEsUUFBQUksQ0FBQSxHQUFBTyxNQUFBLENBQUF1QyxjQUFBLFFBQUE5QyxDQUFBLHVCQUFBWCxDQUFBLElBQUFXLENBQUEsUUFBQStCLG1CQUFBLFlBQUFnQixtQkFBQTFELENBQUEsRUFBQUQsQ0FBQSxFQUFBVyxDQUFBLEVBQUFILENBQUEsYUFBQVEsRUFBQWhCLENBQUEsRUFBQVcsQ0FBQSxJQUFBZ0MsbUJBQUEsQ0FBQTFDLENBQUEsRUFBQUQsQ0FBQSxZQUFBQyxDQUFBLGdCQUFBMkQsT0FBQSxDQUFBNUQsQ0FBQSxFQUFBVyxDQUFBLEVBQUFWLENBQUEsU0FBQUQsQ0FBQSxHQUFBWSxDQUFBLEdBQUFBLENBQUEsQ0FBQVgsQ0FBQSxFQUFBRCxDQUFBLElBQUFzQixLQUFBLEVBQUFYLENBQUEsRUFBQWtELFVBQUEsR0FBQXJELENBQUEsRUFBQXNELFlBQUEsR0FBQXRELENBQUEsRUFBQXVELFFBQUEsR0FBQXZELENBQUEsTUFBQVAsQ0FBQSxDQUFBRCxDQUFBLElBQUFXLENBQUEsSUFBQUssQ0FBQSxhQUFBQSxDQUFBLGNBQUFBLENBQUEsbUJBQUEyQixtQkFBQSxDQUFBMUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFXLENBQUEsRUFBQUgsQ0FBQTtBQUFBLFNBQUF3RCxRQUFBaEQsQ0FBQSxzQ0FBQWdELE9BQUEsd0JBQUF2RCxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQU0sQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBUCxNQUFBLElBQUFPLENBQUEsQ0FBQWlCLFdBQUEsS0FBQXhCLE1BQUEsSUFBQU8sQ0FBQSxLQUFBUCxNQUFBLENBQUErQixTQUFBLHFCQUFBeEIsQ0FBQSxLQUFBZ0QsT0FBQSxDQUFBaEQsQ0FBQTtBQUFBLFNBQUFpRCxtQkFBQXRELENBQUEsRUFBQUgsQ0FBQSxFQUFBUCxDQUFBLEVBQUFELENBQUEsRUFBQWdCLENBQUEsRUFBQUYsQ0FBQSxFQUFBeUIsQ0FBQSxjQUFBM0IsQ0FBQSxHQUFBRCxDQUFBLENBQUFHLENBQUEsRUFBQXlCLENBQUEsR0FBQTFCLENBQUEsR0FBQUQsQ0FBQSxDQUFBVSxLQUFBLFdBQUFYLENBQUEsZ0JBQUFWLENBQUEsQ0FBQVUsQ0FBQSxLQUFBQyxDQUFBLENBQUFRLElBQUEsR0FBQVosQ0FBQSxDQUFBSyxDQUFBLElBQUFxRCxPQUFBLENBQUFDLE9BQUEsQ0FBQXRELENBQUEsRUFBQXVELElBQUEsQ0FBQXBFLENBQUEsRUFBQWdCLENBQUE7QUFBQSxTQUFBcUQsa0JBQUExRCxDQUFBLDZCQUFBSCxDQUFBLFNBQUFQLENBQUEsR0FBQXFFLFNBQUEsYUFBQUosT0FBQSxXQUFBbEUsQ0FBQSxFQUFBZ0IsQ0FBQSxRQUFBRixDQUFBLEdBQUFILENBQUEsQ0FBQTRELEtBQUEsQ0FBQS9ELENBQUEsRUFBQVAsQ0FBQSxZQUFBdUUsTUFBQTdELENBQUEsSUFBQXNELGtCQUFBLENBQUFuRCxDQUFBLEVBQUFkLENBQUEsRUFBQWdCLENBQUEsRUFBQXdELEtBQUEsRUFBQUMsTUFBQSxVQUFBOUQsQ0FBQSxjQUFBOEQsT0FBQTlELENBQUEsSUFBQXNELGtCQUFBLENBQUFuRCxDQUFBLEVBQUFkLENBQUEsRUFBQWdCLENBQUEsRUFBQXdELEtBQUEsRUFBQUMsTUFBQSxXQUFBOUQsQ0FBQSxLQUFBNkQsS0FBQTtBQUFBLFNBQUFFLFFBQUF6RSxDQUFBLEVBQUFELENBQUEsUUFBQVEsQ0FBQSxHQUFBVyxNQUFBLENBQUF3RCxJQUFBLENBQUExRSxDQUFBLE9BQUFrQixNQUFBLENBQUF5RCxxQkFBQSxRQUFBNUQsQ0FBQSxHQUFBRyxNQUFBLENBQUF5RCxxQkFBQSxDQUFBM0UsQ0FBQSxHQUFBRCxDQUFBLEtBQUFnQixDQUFBLEdBQUFBLENBQUEsQ0FBQTZELE1BQUEsV0FBQTdFLENBQUEsV0FBQW1CLE1BQUEsQ0FBQTJELHdCQUFBLENBQUE3RSxDQUFBLEVBQUFELENBQUEsRUFBQTZELFVBQUEsT0FBQXJELENBQUEsQ0FBQWEsSUFBQSxDQUFBa0QsS0FBQSxDQUFBL0QsQ0FBQSxFQUFBUSxDQUFBLFlBQUFSLENBQUE7QUFBQSxTQUFBdUUsY0FBQTlFLENBQUEsYUFBQUQsQ0FBQSxNQUFBQSxDQUFBLEdBQUFzRSxTQUFBLENBQUEvQyxNQUFBLEVBQUF2QixDQUFBLFVBQUFRLENBQUEsV0FBQThELFNBQUEsQ0FBQXRFLENBQUEsSUFBQXNFLFNBQUEsQ0FBQXRFLENBQUEsUUFBQUEsQ0FBQSxPQUFBMEUsT0FBQSxDQUFBdkQsTUFBQSxDQUFBWCxDQUFBLE9BQUF3RSxPQUFBLFdBQUFoRixDQUFBLElBQUFpRixlQUFBLENBQUFoRixDQUFBLEVBQUFELENBQUEsRUFBQVEsQ0FBQSxDQUFBUixDQUFBLFNBQUFtQixNQUFBLENBQUErRCx5QkFBQSxHQUFBL0QsTUFBQSxDQUFBZ0UsZ0JBQUEsQ0FBQWxGLENBQUEsRUFBQWtCLE1BQUEsQ0FBQStELHlCQUFBLENBQUExRSxDQUFBLEtBQUFrRSxPQUFBLENBQUF2RCxNQUFBLENBQUFYLENBQUEsR0FBQXdFLE9BQUEsV0FBQWhGLENBQUEsSUFBQW1CLE1BQUEsQ0FBQXVDLGNBQUEsQ0FBQXpELENBQUEsRUFBQUQsQ0FBQSxFQUFBbUIsTUFBQSxDQUFBMkQsd0JBQUEsQ0FBQXRFLENBQUEsRUFBQVIsQ0FBQSxpQkFBQUMsQ0FBQTtBQUFBLFNBQUFnRixnQkFBQWhGLENBQUEsRUFBQUQsQ0FBQSxFQUFBUSxDQUFBLFlBQUFSLENBQUEsR0FBQW9GLGNBQUEsQ0FBQXBGLENBQUEsTUFBQUMsQ0FBQSxHQUFBa0IsTUFBQSxDQUFBdUMsY0FBQSxDQUFBekQsQ0FBQSxFQUFBRCxDQUFBLElBQUFzQixLQUFBLEVBQUFkLENBQUEsRUFBQXFELFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFVBQUE5RCxDQUFBLENBQUFELENBQUEsSUFBQVEsQ0FBQSxFQUFBUCxDQUFBO0FBQUEsU0FBQW9GLGdCQUFBdkUsQ0FBQSxFQUFBSCxDQUFBLFVBQUFHLENBQUEsWUFBQUgsQ0FBQSxhQUFBTCxTQUFBO0FBQUEsU0FBQWdGLGtCQUFBckYsQ0FBQSxFQUFBRCxDQUFBLGFBQUFRLENBQUEsTUFBQUEsQ0FBQSxHQUFBUixDQUFBLENBQUF1QixNQUFBLEVBQUFmLENBQUEsVUFBQVEsQ0FBQSxHQUFBaEIsQ0FBQSxDQUFBUSxDQUFBLEdBQUFRLENBQUEsQ0FBQTZDLFVBQUEsR0FBQTdDLENBQUEsQ0FBQTZDLFVBQUEsUUFBQTdDLENBQUEsQ0FBQThDLFlBQUEsa0JBQUE5QyxDQUFBLEtBQUFBLENBQUEsQ0FBQStDLFFBQUEsUUFBQTVDLE1BQUEsQ0FBQXVDLGNBQUEsQ0FBQXpELENBQUEsRUFBQW1GLGNBQUEsQ0FBQXBFLENBQUEsQ0FBQXVFLEdBQUEsR0FBQXZFLENBQUE7QUFBQSxTQUFBd0UsYUFBQXZGLENBQUEsRUFBQUQsQ0FBQSxFQUFBUSxDQUFBLFdBQUFSLENBQUEsSUFBQXNGLGlCQUFBLENBQUFyRixDQUFBLENBQUF1QyxTQUFBLEVBQUF4QyxDQUFBLEdBQUFRLENBQUEsSUFBQThFLGlCQUFBLENBQUFyRixDQUFBLEVBQUFPLENBQUEsR0FBQVcsTUFBQSxDQUFBdUMsY0FBQSxDQUFBekQsQ0FBQSxpQkFBQThELFFBQUEsU0FBQTlELENBQUE7QUFBQSxTQUFBbUYsZUFBQTVFLENBQUEsUUFBQUksQ0FBQSxHQUFBNkUsWUFBQSxDQUFBakYsQ0FBQSxnQ0FBQXdELE9BQUEsQ0FBQXBELENBQUEsSUFBQUEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQTZFLGFBQUFqRixDQUFBLEVBQUFSLENBQUEsb0JBQUFnRSxPQUFBLENBQUF4RCxDQUFBLE1BQUFBLENBQUEsU0FBQUEsQ0FBQSxNQUFBUCxDQUFBLEdBQUFPLENBQUEsQ0FBQUMsTUFBQSxDQUFBaUYsV0FBQSxrQkFBQXpGLENBQUEsUUFBQVcsQ0FBQSxHQUFBWCxDQUFBLENBQUFnQixJQUFBLENBQUFULENBQUEsRUFBQVIsQ0FBQSxnQ0FBQWdFLE9BQUEsQ0FBQXBELENBQUEsVUFBQUEsQ0FBQSxZQUFBTixTQUFBLHlFQUFBTixDQUFBLEdBQUEyRixNQUFBLEdBQUFDLE1BQUEsRUFBQXBGLENBQUE7QUFBQSxTQUFBcUYsV0FBQXJGLENBQUEsRUFBQVEsQ0FBQSxFQUFBZixDQUFBLFdBQUFlLENBQUEsR0FBQThFLGVBQUEsQ0FBQTlFLENBQUEsR0FBQStFLDBCQUFBLENBQUF2RixDQUFBLEVBQUF3Rix5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQWxGLENBQUEsRUFBQWYsQ0FBQSxRQUFBNkYsZUFBQSxDQUFBdEYsQ0FBQSxFQUFBeUIsV0FBQSxJQUFBakIsQ0FBQSxDQUFBdUQsS0FBQSxDQUFBL0QsQ0FBQSxFQUFBUCxDQUFBO0FBQUEsU0FBQThGLDJCQUFBdkYsQ0FBQSxFQUFBUCxDQUFBLFFBQUFBLENBQUEsaUJBQUErRCxPQUFBLENBQUEvRCxDQUFBLDBCQUFBQSxDQUFBLFVBQUFBLENBQUEsaUJBQUFBLENBQUEsWUFBQUssU0FBQSxxRUFBQTZGLHNCQUFBLENBQUEzRixDQUFBO0FBQUEsU0FBQTJGLHVCQUFBbEcsQ0FBQSxtQkFBQUEsQ0FBQSxZQUFBbUcsY0FBQSxzRUFBQW5HLENBQUE7QUFBQSxTQUFBK0YsMEJBQUEsY0FBQXhGLENBQUEsSUFBQTZGLE9BQUEsQ0FBQTdELFNBQUEsQ0FBQThELE9BQUEsQ0FBQXJGLElBQUEsQ0FBQWdGLE9BQUEsQ0FBQUMsU0FBQSxDQUFBRyxPQUFBLGlDQUFBN0YsQ0FBQSxhQUFBd0YseUJBQUEsWUFBQUEsMEJBQUEsYUFBQXhGLENBQUE7QUFBQSxTQUFBc0YsZ0JBQUF0RixDQUFBLFdBQUFzRixlQUFBLEdBQUEzRSxNQUFBLENBQUFrQyxjQUFBLEdBQUFsQyxNQUFBLENBQUFpQyxjQUFBLENBQUFILElBQUEsZUFBQXpDLENBQUEsV0FBQUEsQ0FBQSxDQUFBOEMsU0FBQSxJQUFBbkMsTUFBQSxDQUFBaUMsY0FBQSxDQUFBNUMsQ0FBQSxNQUFBc0YsZUFBQSxDQUFBdEYsQ0FBQTtBQUFBLFNBQUErRixVQUFBL0YsQ0FBQSxFQUFBUCxDQUFBLDZCQUFBQSxDQUFBLGFBQUFBLENBQUEsWUFBQUssU0FBQSx3REFBQUUsQ0FBQSxDQUFBZ0MsU0FBQSxHQUFBckIsTUFBQSxDQUFBdUIsTUFBQSxDQUFBekMsQ0FBQSxJQUFBQSxDQUFBLENBQUF1QyxTQUFBLElBQUFQLFdBQUEsSUFBQVgsS0FBQSxFQUFBZCxDQUFBLEVBQUF1RCxRQUFBLE1BQUFELFlBQUEsV0FBQTNDLE1BQUEsQ0FBQXVDLGNBQUEsQ0FBQWxELENBQUEsaUJBQUF1RCxRQUFBLFNBQUE5RCxDQUFBLElBQUF1RyxlQUFBLENBQUFoRyxDQUFBLEVBQUFQLENBQUE7QUFBQSxTQUFBdUcsZ0JBQUFoRyxDQUFBLEVBQUFQLENBQUEsV0FBQXVHLGVBQUEsR0FBQXJGLE1BQUEsQ0FBQWtDLGNBQUEsR0FBQWxDLE1BQUEsQ0FBQWtDLGNBQUEsQ0FBQUosSUFBQSxlQUFBekMsQ0FBQSxFQUFBUCxDQUFBLFdBQUFPLENBQUEsQ0FBQThDLFNBQUEsR0FBQXJELENBQUEsRUFBQU8sQ0FBQSxLQUFBZ0csZUFBQSxDQUFBaEcsQ0FBQSxFQUFBUCxDQUFBO0FBQ0EsSUFBTXdHLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyw0Q0FBTyxDQUFDO0FBQzlCLElBQUFDLFFBQUEsR0FBaUJELG1CQUFPLENBQUMsdUVBQWtCLENBQUM7RUFBcENFLElBQUksR0FBQUQsUUFBQSxDQUFKQyxJQUFJO0FBQ1osSUFBQUMsU0FBQSxHQWFJSCxtQkFBTyxDQUFDLDRFQUFtQixDQUFDO0VBWjlCSSxNQUFNLEdBQUFELFNBQUEsQ0FBTkMsTUFBTTtFQUNOQyxRQUFRLEdBQUFGLFNBQUEsQ0FBUkUsUUFBUTtFQUNSQyxJQUFJLEdBQUFILFNBQUEsQ0FBSkcsSUFBSTtFQUNKQyxNQUFNLEdBQUFKLFNBQUEsQ0FBTkksTUFBTTtFQUNOQyxJQUFJLEdBQUFMLFNBQUEsQ0FBSkssSUFBSTtFQUNKQyxLQUFLLEdBQUFOLFNBQUEsQ0FBTE0sS0FBSztFQUNMQyxJQUFJLEdBQUFQLFNBQUEsQ0FBSk8sSUFBSTtFQUNKQyxNQUFNLEdBQUFSLFNBQUEsQ0FBTlEsTUFBTTtFQUNOQyxPQUFPLEdBQUFULFNBQUEsQ0FBUFMsT0FBTztFQUNQQyxLQUFLLEdBQUFWLFNBQUEsQ0FBTFUsS0FBSztFQUNMQyxPQUFPLEdBQUFYLFNBQUEsQ0FBUFcsT0FBTztFQUNQQyxLQUFLLEdBQUFaLFNBQUEsQ0FBTFksS0FBSztBQUdQLElBQUFDLFNBQUEsR0FpQ0loQixtQkFBTyxDQUFDLGdFQUE0QixDQUFDO0VBaEN2Q2lCLGlCQUFpQixHQUFBRCxTQUFBLENBQWpCQyxpQkFBaUI7RUFDakJDLHNCQUFzQixHQUFBRixTQUFBLENBQXRCRSxzQkFBc0I7RUFDdEJDLHNCQUFzQixHQUFBSCxTQUFBLENBQXRCRyxzQkFBc0I7RUFDdEJDLG9CQUFvQixHQUFBSixTQUFBLENBQXBCSSxvQkFBb0I7RUFDcEJDLHNCQUFzQixHQUFBTCxTQUFBLENBQXRCSyxzQkFBc0I7RUFDdEJDLDRCQUE0QixHQUFBTixTQUFBLENBQTVCTSw0QkFBNEI7RUFDNUJDLG1CQUFtQixHQUFBUCxTQUFBLENBQW5CTyxtQkFBbUI7RUFDbkJDLGtCQUFrQixHQUFBUixTQUFBLENBQWxCUSxrQkFBa0I7RUFDbEJDLGlCQUFpQixHQUFBVCxTQUFBLENBQWpCUyxpQkFBaUI7RUFDakJDLDBCQUEwQixHQUFBVixTQUFBLENBQTFCVSwwQkFBMEI7RUFDMUJDLHVCQUF1QixHQUFBWCxTQUFBLENBQXZCVyx1QkFBdUI7RUFDdkJDLGlCQUFpQixHQUFBWixTQUFBLENBQWpCWSxpQkFBaUI7RUFDakJDLHNCQUFzQixHQUFBYixTQUFBLENBQXRCYSxzQkFBc0I7RUFDdEJDLG9CQUFvQixHQUFBZCxTQUFBLENBQXBCYyxvQkFBb0I7RUFDcEJDLHdCQUF3QixHQUFBZixTQUFBLENBQXhCZSx3QkFBd0I7RUFDeEJDLG9CQUFvQixHQUFBaEIsU0FBQSxDQUFwQmdCLG9CQUFvQjtFQUNwQkMsbUJBQW1CLEdBQUFqQixTQUFBLENBQW5CaUIsbUJBQW1CO0VBQ25CQyxtQkFBbUIsR0FBQWxCLFNBQUEsQ0FBbkJrQixtQkFBbUI7RUFDbkJDLFVBQVUsR0FBQW5CLFNBQUEsQ0FBVm1CLFVBQVU7RUFDVkMsa0JBQWtCLEdBQUFwQixTQUFBLENBQWxCb0Isa0JBQWtCO0VBQ2xCQywyQkFBMkIsR0FBQXJCLFNBQUEsQ0FBM0JxQiwyQkFBMkI7RUFDM0JDLHFCQUFxQixHQUFBdEIsU0FBQSxDQUFyQnNCLHFCQUFxQjtFQUNyQkMsMkJBQTJCLEdBQUF2QixTQUFBLENBQTNCdUIsMkJBQTJCO0VBQzNCQyxvQkFBb0IsR0FBQXhCLFNBQUEsQ0FBcEJ3QixvQkFBb0I7RUFDcEJDLHNCQUFzQixHQUFBekIsU0FBQSxDQUF0QnlCLHNCQUFzQjtFQUN0QkMsc0JBQXNCLEdBQUExQixTQUFBLENBQXRCMEIsc0JBQXNCO0VBQ3RCQyxtQkFBbUIsR0FBQTNCLFNBQUEsQ0FBbkIyQixtQkFBbUI7RUFDbkJDLHlCQUF5QixHQUFBNUIsU0FBQSxDQUF6QjRCLHlCQUF5QjtFQUN6QkMsb0JBQW9CLEdBQUE3QixTQUFBLENBQXBCNkIsb0JBQW9CO0VBQ3BCQyxXQUFXLEdBQUE5QixTQUFBLENBQVg4QixXQUFXO0VBQ1hDLGFBQWEsR0FBQS9CLFNBQUEsQ0FBYitCLGFBQWE7RUFDYkMsYUFBYSxHQUFBaEMsU0FBQSxDQUFiZ0MsYUFBYTtBQUVmLElBQUFDLFNBQUEsR0FBaURqRCxtQkFBTyxDQUFDLDBEQUF5QixDQUFDO0VBQTNFa0QsaUJBQWlCLEdBQUFELFNBQUEsQ0FBakJDLGlCQUFpQjtFQUFFQyxpQkFBaUIsR0FBQUYsU0FBQSxDQUFqQkUsaUJBQWlCO0FBQzVDLElBQUFDLFNBQUEsR0FBeUNwRCxtQkFBTyxDQUFDLDhFQUFtQyxDQUFDO0VBQTdFcUQsNEJBQTRCLEdBQUFELFNBQUEsQ0FBNUJDLDRCQUE0QjtBQUNwQyxJQUFBQyxTQUFBLEdBQWdEdEQsbUJBQU8sQ0FBQyxvRUFBOEIsQ0FBQztFQUEvRXVELGVBQWUsR0FBQUQsU0FBQSxDQUFmQyxlQUFlO0VBQUVDLGtCQUFrQixHQUFBRixTQUFBLENBQWxCRSxrQkFBa0I7QUFDM0MsSUFBQUMsU0FBQSxHQUE4RHpELG1CQUFPLENBQUMsd0VBQWdDLENBQUM7RUFBL0YwRCxxQkFBcUIsR0FBQUQsU0FBQSxDQUFyQkMscUJBQXFCO0VBQUVDLDBCQUEwQixHQUFBRixTQUFBLENBQTFCRSwwQkFBMEI7QUFDekQsSUFBQUMsU0FBQSxHQUFzRDVELG1CQUFPLENBQUMsb0NBQWMsQ0FBQztFQUFyRTZELFlBQVksR0FBQUQsU0FBQSxDQUFaQyxZQUFZO0VBQUVDLDJCQUEyQixHQUFBRixTQUFBLENBQTNCRSwyQkFBMkI7QUFDakQsSUFBTUMseUJBQXlCLEdBQUcvRCxtQkFBTyxDQUFDLDhFQUE2QixDQUFDO0FBQ3hFLElBQU1nRSxzQkFBc0IsR0FBR2hFLG1CQUFPLENBQUMsd0VBQTBCLENBQUM7QUFBQyxJQUU3RGlFLFdBQVcsMEJBQUFDLGdCQUFBO0VBQ2YsU0FBQUQsWUFBYUUsS0FBSyxFQUFFO0lBQUEsSUFBQUMsS0FBQTtJQUFBekYsZUFBQSxPQUFBc0YsV0FBQTtJQUNsQkcsS0FBQSxHQUFBakYsVUFBQSxPQUFBOEUsV0FBQSxHQUFNRSxLQUFLO0lBRVgsSUFBTUUsUUFBUSxHQUFHN0Isb0JBQW9CLENBQUMsQ0FBQztJQUN2QyxJQUFNOEIsWUFBWSxHQUFHN0Isc0JBQXNCLENBQUMsQ0FBQztJQUM3QzJCLEtBQUEsQ0FBS0csS0FBSyxHQUFHO01BQ1hDLE9BQU8sRUFBRSxJQUFJO01BQ2JDLFVBQVUsRUFBRSxLQUFLO01BQ2pCQyxLQUFLLEVBQUUsSUFBSTtNQUNYQyxZQUFZLEVBQUUsS0FBSztNQUNuQkMsWUFBWSxFQUFFLEtBQUs7TUFDbkJDLGFBQWEsRUFBQXhHLGFBQUEsS0FBT2dHLFFBQVEsQ0FBRTtNQUM5QkEsUUFBUSxFQUFSQSxRQUFRO01BQ1JTLE1BQU0sRUFBRTtRQUNOQyxRQUFRLEVBQUUsRUFBRTtRQUNaQyxXQUFXLEVBQUUsRUFBRTtRQUNmQyxJQUFJLEVBQUUsRUFBRTtRQUNSQyxhQUFhLEVBQUUsS0FBSztRQUNwQkMsV0FBVyxFQUFFLENBQUM7UUFDZEMsYUFBYSxFQUFFLENBQUM7UUFDaEJDLGVBQWUsRUFBRSxDQUFDO1FBQ2hCQyxPQUFPLEVBQUUsRUFBRTtRQUNYQyxZQUFZLEVBQUU7TUFDbEIsQ0FBQztNQUNEQyxNQUFNLEVBQUUsRUFBRTtNQUNWQyxZQUFZLEVBQUUsRUFBRTtNQUNoQkMsS0FBSyxFQUFFLEVBQUU7TUFDVEMsU0FBUyxFQUFFLEVBQUU7TUFDYkMsaUJBQWlCLEVBQUUsRUFBRTtNQUNyQkMsV0FBVyxFQUFFLEVBQUU7TUFDZkMsaUJBQWlCLEVBQUUsRUFBRTtNQUNyQkMsV0FBVyxFQUFFLEVBQUU7TUFDZkMsWUFBWSxFQUFFLEVBQUU7TUFDaEJDLGNBQWMsRUFBRSxDQUFDLENBQUMzQixZQUFZLENBQUM0QixlQUFlO01BQzlDQyxpQkFBaUIsRUFBRSxFQUFFO01BQ3JCQyxZQUFZLEVBQUUsRUFBRTtNQUNoQkMsV0FBVyxFQUFFLEVBQUU7TUFDZkMsZ0JBQWdCLEVBQUUsRUFBRTtNQUNwQkMsYUFBYSxFQUFFLElBQUk7TUFDbkJDLG1CQUFtQixFQUFFO1FBQUVDLFNBQVMsRUFBRTtNQUFNLENBQUM7TUFDekNDLHVCQUF1QixFQUFFLElBQUk7TUFDN0JDLGFBQWEsRUFBRTtRQUFFRixTQUFTLEVBQUUsS0FBSztRQUFFRyxNQUFNLEVBQUU7TUFBVyxDQUFDO01BQ3ZEQyxlQUFlLEVBQUU7UUFBRUosU0FBUyxFQUFFLEtBQUs7UUFBRUcsTUFBTSxFQUFFO01BQWMsQ0FBQztNQUM1REUsaUJBQWlCLEVBQUUsRUFBRTtNQUNyQkMsZ0JBQWdCLEVBQUUsRUFBRTtNQUNwQkMsbUJBQW1CLEVBQUUsRUFBRTtNQUN2QkMsdUJBQXVCLEVBQUUsUUFBUTtNQUNqQ0MscUJBQXFCLEVBQUUsRUFBRTtNQUN6QkMsbUJBQW1CLEVBQUUsSUFBSTtNQUN6QkMsb0JBQW9CLEVBQUUsS0FBSztNQUMzQkMsYUFBYSxFQUFFLElBQUk7TUFDbkJDLGVBQWUsRUFBRSxJQUFJO01BQ3JCQyxhQUFhLEVBQUUsRUFBRTtNQUNqQkMsZ0JBQWdCLEVBQUUsT0FBTztNQUN6QkMsWUFBWSxFQUFFLElBQUk7TUFDbEJDLGFBQWEsRUFBRSxFQUFFO01BQ2pCQyxZQUFZLEVBQUUsSUFBSTtNQUNsQkMsYUFBYSxFQUFFLEtBQUs7TUFDcEJDLFNBQVMsRUFBRSxFQUFFO01BQ2JDLFdBQVcsRUFBRSxDQUFDLENBQUM7TUFDZkMsUUFBUSxFQUFFLEVBQUU7TUFDWkMsV0FBVyxFQUFFLElBQUk7TUFDakJDLFVBQVUsRUFBRSxFQUFFO01BQ2RDLGFBQWEsRUFBRSxJQUFJO01BQ25CQyxhQUFhLEVBQUU7SUFDakIsQ0FBQztJQUNEL0QsS0FBQSxDQUFLZ0Usb0JBQW9CLEdBQUc7TUFBQSxPQUFNaEUsS0FBQSxDQUFLaUUsc0JBQXNCLENBQUMsQ0FBQztJQUFBO0lBQUMsT0FBQWpFLEtBQUE7RUFDbEU7RUFBQ3ZFLFNBQUEsQ0FBQW9FLFdBQUEsRUFBQUMsZ0JBQUE7RUFBQSxPQUFBcEYsWUFBQSxDQUFBbUYsV0FBQTtJQUFBcEYsR0FBQTtJQUFBakUsS0FBQSxFQUVELFNBQUF5TixzQkFBc0JBLENBQUEsRUFBSTtNQUN4QixJQUFJLE9BQU9DLE1BQU0sS0FBSyxXQUFXLEVBQUU7TUFDbkMsSUFBTUMsR0FBRyxHQUFHLENBQUNELE1BQU0sQ0FBQ0UsUUFBUSxDQUFDQyxJQUFJLElBQUksRUFBRSxFQUFFQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztNQUMxRCxJQUFJLENBQUNILEdBQUcsRUFBRTtNQUNWSSxxQkFBcUIsQ0FBQyxZQUFNO1FBQzFCLElBQU1DLEVBQUUsR0FBR0MsUUFBUSxDQUFDQyxjQUFjLENBQUNQLEdBQUcsQ0FBQztRQUN2QyxJQUFJSyxFQUFFLEVBQUVBLEVBQUUsQ0FBQ0csY0FBYyxDQUFDO1VBQUVDLFFBQVEsRUFBRSxRQUFRO1VBQUVDLEtBQUssRUFBRTtRQUFRLENBQUMsQ0FBQztNQUNuRSxDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUFwSyxHQUFBO0lBQUFqRSxLQUFBLEVBRUQsU0FBQXNPLGlCQUFpQkEsQ0FBQSxFQUFJO01BQUEsSUFBQUMsTUFBQTtNQUNuQixJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDO01BQ2QsSUFBSSxDQUFDQyxvQkFBb0IsR0FBRyxJQUFJLENBQUNBLG9CQUFvQixDQUFDOU0sSUFBSSxDQUFDLElBQUksQ0FBQztNQUNoRStMLE1BQU0sQ0FBQ2dCLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQ0Qsb0JBQW9CLENBQUM7TUFDdkUsSUFBSSxDQUFDaEIsc0JBQXNCLENBQUMsQ0FBQztNQUM3QixJQUFJLE9BQU9DLE1BQU0sS0FBSyxXQUFXLEVBQUU7UUFDakNBLE1BQU0sQ0FBQ2dCLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUNsQixvQkFBb0IsQ0FBQztRQUNoRSxJQUFJLENBQUNtQixnQkFBZ0IsR0FBRzVGLDBCQUEwQixDQUFDLFlBQU07VUFDdkR3RixNQUFJLENBQUNLLFFBQVEsQ0FBQyxVQUFDck8sQ0FBQztZQUFBLE9BQU07Y0FBRWdOLGFBQWEsRUFBRSxDQUFDaE4sQ0FBQyxDQUFDZ04sYUFBYSxJQUFJLENBQUMsSUFBSTtZQUFFLENBQUM7VUFBQSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDO01BQ0o7SUFDRjtFQUFDO0lBQUF0SixHQUFBO0lBQUFqRSxLQUFBLEVBRUQsU0FBQTZPLG9CQUFvQkEsQ0FBQSxFQUFJO01BQ3RCLElBQUksSUFBSSxDQUFDSixvQkFBb0IsRUFBRTtRQUM3QmYsTUFBTSxDQUFDb0IsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDTCxvQkFBb0IsQ0FBQztNQUM1RTtNQUNBLElBQUksT0FBT2YsTUFBTSxLQUFLLFdBQVcsRUFBRTtRQUNqQ0EsTUFBTSxDQUFDb0IsbUJBQW1CLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQ3RCLG9CQUFvQixDQUFDO01BQ3JFO01BQ0EsSUFBSSxPQUFPLElBQUksQ0FBQ21CLGdCQUFnQixLQUFLLFVBQVUsRUFBRTtRQUMvQyxJQUFJLENBQUNBLGdCQUFnQixDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDQSxnQkFBZ0IsR0FBRyxJQUFJO01BQzlCO0lBQ0Y7RUFBQztJQUFBMUssR0FBQTtJQUFBakUsS0FBQSxFQUVELFNBQUF5TyxvQkFBb0JBLENBQUU5UCxDQUFDLEVBQUU7TUFDdkIsSUFBTStDLENBQUMsR0FBRy9DLENBQUMsSUFBSUEsQ0FBQyxDQUFDb1EsTUFBTTtNQUN2QixJQUFJLENBQUNyTixDQUFDLElBQUksQ0FBQ0EsQ0FBQyxDQUFDc04sU0FBUyxJQUFJdE4sQ0FBQyxDQUFDc04sU0FBUyxDQUFDQyxJQUFJLEtBQUssVUFBVSxJQUFJLENBQUN2TixDQUFDLENBQUN3TixXQUFXLElBQUksQ0FBQ3hOLENBQUMsQ0FBQ3dOLFdBQVcsQ0FBQ0MsT0FBTyxFQUFFO01BQ3ZHLElBQUksQ0FBQ1AsUUFBUSxDQUFDO1FBQUU3QyxhQUFhLEVBQUVySyxDQUFDLENBQUN3TixXQUFXLENBQUNDO01BQVEsQ0FBQyxDQUFDO01BQ3ZEO01BQ0EsSUFBSSxDQUFDQyxrQ0FBa0MsQ0FBQzFOLENBQUMsQ0FBQ3dOLFdBQVcsQ0FBQ0MsT0FBTyxDQUFDO0lBQ2hFO0VBQUM7SUFBQWxMLEdBQUE7SUFBQWpFLEtBQUE7TUFBQSxJQUFBcVAsbUNBQUEsR0FBQXRNLGlCQUFBLGNBQUFoQyxZQUFBLEdBQUFvQixDQUFBLENBRUQsU0FBQW1OLFFBQUE7UUFBQSxJQUFBdkQsYUFBQTtVQUFBd0QsUUFBQTtVQUFBckYsTUFBQTtVQUFBc0YsT0FBQTtVQUFBQyxPQUFBO1VBQUFsRixXQUFBO1VBQUFDLGFBQUE7VUFBQUMsZUFBQTtVQUFBaUYsS0FBQSxHQUFBMU0sU0FBQTtRQUFBLE9BQUFqQyxZQUFBLEdBQUFtQixDQUFBLFdBQUF5TixRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQXJPLENBQUEsR0FBQXFPLFFBQUEsQ0FBQXRRLENBQUE7WUFBQTtjQUEwQzBNLGFBQWEsR0FBQTJELEtBQUEsQ0FBQXpQLE1BQUEsUUFBQXlQLEtBQUEsUUFBQUUsU0FBQSxHQUFBRixLQUFBLE1BQUcsSUFBSTtjQUFBLEtBQ3hELElBQUksQ0FBQ0csd0JBQXdCO2dCQUFBRixRQUFBLENBQUF0USxDQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBc1EsUUFBQSxDQUFBblEsQ0FBQTtZQUFBO2NBQ2pDLElBQUksQ0FBQ3FRLHdCQUF3QixHQUFHLElBQUk7Y0FBQ0YsUUFBQSxDQUFBck8sQ0FBQTtjQUU3QmlPLFFBQVEsR0FBRyxJQUFJLENBQUNPLFdBQVcsQ0FBQyxDQUFDO2NBQzdCNUYsTUFBTSxHQUFHeEMscUJBQXFCLENBQUM2SCxRQUFRLENBQUM7Y0FDeENDLE9BQU8sR0FBSXpELGFBQWEsSUFBSUEsYUFBYSxDQUFDeUQsT0FBTyxHQUFJbkwsTUFBTSxDQUFDMEgsYUFBYSxDQUFDeUQsT0FBTyxDQUFDLENBQUNPLFdBQVcsQ0FBQyxDQUFDLEdBQUksSUFBSSxDQUFDcEcsS0FBSyxDQUFDb0MsYUFBYSxJQUFJLElBQUksQ0FBQ3BDLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ3lELE9BQU8sR0FBSW5MLE1BQU0sQ0FBQyxJQUFJLENBQUNzRixLQUFLLENBQUNvQyxhQUFhLENBQUN5RCxPQUFPLENBQUMsQ0FBQ08sV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFO2NBQUFKLFFBQUEsQ0FBQXRRLENBQUE7Y0FBQSxPQUMvTW9JLDJCQUEyQixDQUFDLElBQUksQ0FBQ2tDLEtBQUssQ0FBQ0YsUUFBUSxFQUFFUyxNQUFNLEVBQUU7Z0JBQUVzRixPQUFPLEVBQVBBO2NBQVEsQ0FBQyxDQUFDLFNBQU0sQ0FBQztnQkFBQSxPQUFPLENBQUMsQ0FBQztjQUFBLENBQUMsQ0FBQztZQUFBO2NBQXZHQyxPQUFPLEdBQUFFLFFBQUEsQ0FBQWxPLENBQUE7Y0FBQSxNQUNULENBQUNnTyxPQUFPLElBQUkvTSxPQUFBLENBQU8rTSxPQUFPLE1BQUssUUFBUTtnQkFBQUUsUUFBQSxDQUFBdFEsQ0FBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQXNRLFFBQUEsQ0FBQW5RLENBQUE7WUFBQTtjQUVyQytLLFdBQVcsR0FBR2pHLE1BQU0sQ0FBQ21MLE9BQU8sQ0FBQ2xGLFdBQVcsSUFBSSxJQUFJLEdBQUdrRixPQUFPLENBQUNsRixXQUFXLEdBQUlrRixPQUFPLENBQUNPLE9BQU8sSUFBSSxDQUFFLENBQUM7Y0FDaEd4RixhQUFhLEdBQUdsRyxNQUFNLENBQUNtTCxPQUFPLENBQUNqRixhQUFhLElBQUksSUFBSSxHQUFHaUYsT0FBTyxDQUFDakYsYUFBYSxHQUFHRCxXQUFXLENBQUM7Y0FDM0ZFLGVBQWUsR0FBR25HLE1BQU0sQ0FBQ21MLE9BQU8sQ0FBQ2hGLGVBQWUsSUFBSSxDQUFDLENBQUM7Y0FFNUQsSUFBSSxDQUFDbUUsUUFBUSxDQUFDLFVBQUNxQixJQUFJO2dCQUFBLE9BQU07a0JBQ3ZCL0YsTUFBTSxFQUFBekcsYUFBQSxDQUFBQSxhQUFBLEtBQ0R3TSxJQUFJLENBQUMvRixNQUFNO29CQUNkSyxXQUFXLEVBQVhBLFdBQVc7b0JBQ1hDLGFBQWEsRUFBYkEsYUFBYTtvQkFDYkMsZUFBZSxFQUFmQTtrQkFBZTtnQkFFbkIsQ0FBQztjQUFBLENBQUMsQ0FBQztZQUFDO2NBQUFrRixRQUFBLENBQUFyTyxDQUFBO2NBRUosSUFBSSxDQUFDdU8sd0JBQXdCLEdBQUcsS0FBSztjQUFDLE9BQUFGLFFBQUEsQ0FBQWxRLENBQUE7WUFBQTtjQUFBLE9BQUFrUSxRQUFBLENBQUFuUSxDQUFBO1VBQUE7UUFBQSxHQUFBOFAsT0FBQTtNQUFBLENBRXpDO01BQUEsU0F6QktGLGtDQUFrQ0EsQ0FBQTtRQUFBLE9BQUFDLG1DQUFBLENBQUFwTSxLQUFBLE9BQUFELFNBQUE7TUFBQTtNQUFBLE9BQWxDb00sa0NBQWtDO0lBQUE7RUFBQTtJQUFBbkwsR0FBQTtJQUFBakUsS0FBQSxFQTJCeEMsU0FBQWtRLGtCQUFrQkEsQ0FBRUMsU0FBUyxFQUFFQyxTQUFTLEVBQUU7TUFDeEMsSUFBTUMsTUFBTSxHQUFHRixTQUFTLElBQUlBLFNBQVMsQ0FBQ1osUUFBUSxJQUFJWSxTQUFTLENBQUNaLFFBQVEsQ0FBQ2xGLElBQUk7TUFDekUsSUFBTWlHLE1BQU0sR0FBRyxJQUFJLENBQUMvRyxLQUFLLElBQUksSUFBSSxDQUFDQSxLQUFLLENBQUNnRyxRQUFRLElBQUksSUFBSSxDQUFDaEcsS0FBSyxDQUFDZ0csUUFBUSxDQUFDbEYsSUFBSTtNQUM1RSxJQUFJZ0csTUFBTSxLQUFLQyxNQUFNLEVBQUUsSUFBSSxDQUFDOUIsT0FBTyxDQUFDLENBQUM7TUFDckMsSUFBSTRCLFNBQVMsQ0FBQ3ZHLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQ0YsS0FBSyxDQUFDRSxVQUFVLEVBQUU7UUFDbEQsSUFBSSxDQUFDNEQsc0JBQXNCLENBQUMsQ0FBQztNQUMvQjtJQUNGO0VBQUM7SUFBQXhKLEdBQUE7SUFBQWpFLEtBQUEsRUFFRCxTQUFBdVEsU0FBU0EsQ0FBRXZRLEtBQUssRUFBRTtNQUNoQixPQUFPdUksaUJBQWlCLENBQUN2SSxLQUFLLENBQUM7SUFDakM7O0lBRUE7RUFBQTtJQUFBaUUsR0FBQTtJQUFBakUsS0FBQSxFQUNBLFNBQUF3USw4QkFBOEJBLENBQUEsRUFBZ0I7TUFBQSxJQUFkQyxPQUFPLEdBQUF6TixTQUFBLENBQUEvQyxNQUFBLFFBQUErQyxTQUFBLFFBQUE0TSxTQUFBLEdBQUE1TSxTQUFBLE1BQUcsRUFBRTtNQUMxQyxJQUFJME4sU0FBUyxHQUFHLENBQUM7TUFDakIsSUFBSUMsV0FBVyxHQUFHLENBQUM7TUFDbkIsSUFBSUMsUUFBUSxHQUFHLENBQUM7TUFBQyxJQUFBQyxTQUFBLEdBQUF6USwwQkFBQSxDQUNEcVEsT0FBTztRQUFBSyxLQUFBO01BQUE7UUFBdkIsS0FBQUQsU0FBQSxDQUFBdFEsQ0FBQSxNQUFBdVEsS0FBQSxHQUFBRCxTQUFBLENBQUF4UixDQUFBLElBQUFTLElBQUEsR0FBeUI7VUFBQSxJQUFkSixDQUFDLEdBQUFvUixLQUFBLENBQUE5USxLQUFBO1VBQ1YsSUFBTStRLEdBQUcsR0FBR3JSLENBQUMsQ0FBQ3NSLFdBQVcsSUFBSSxJQUFJLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDNU0sTUFBTSxDQUFDNUUsQ0FBQyxDQUFDc1IsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUl0UixDQUFDLENBQUN5UixVQUFVLElBQUksSUFBSSxHQUFHN00sTUFBTSxDQUFDNUUsQ0FBQyxDQUFDeVIsVUFBVSxDQUFDLEdBQUcsQ0FBRTtVQUNoSSxJQUFNbkYsTUFBTSxHQUFHM0gsTUFBTSxDQUFDM0UsQ0FBQyxDQUFDc00sTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDK0QsV0FBVyxDQUFDLENBQUM7VUFDbkQsSUFBSS9ELE1BQU0sS0FBSyxXQUFXLEVBQUUwRSxTQUFTLElBQUlLLEdBQUcsQ0FBQyxLQUN4QyxJQUFJL0UsTUFBTSxLQUFLLGFBQWEsRUFBRTJFLFdBQVcsSUFBSUksR0FBRyxDQUFDLEtBQ2pELElBQUkvRSxNQUFNLEtBQUssVUFBVSxFQUFFNEUsUUFBUSxJQUFJRyxHQUFHLENBQUMsS0FDM0MsSUFBSS9FLE1BQU0sS0FBSyxPQUFPLEVBQUUyRSxXQUFXLElBQUlJLEdBQUc7UUFDakQ7TUFBQyxTQUFBSyxHQUFBO1FBQUFQLFNBQUEsQ0FBQWxTLENBQUEsQ0FBQXlTLEdBQUE7TUFBQTtRQUFBUCxTQUFBLENBQUFwUixDQUFBO01BQUE7TUFDRCxPQUFPO1FBQUVpUixTQUFTLEVBQVRBLFNBQVM7UUFBRUMsV0FBVyxFQUFYQSxXQUFXO1FBQUVDLFFBQVEsRUFBUkE7TUFBUyxDQUFDO0lBQzdDO0VBQUM7SUFBQTNNLEdBQUE7SUFBQWpFLEtBQUEsRUFFRCxTQUFBcVIsUUFBUUEsQ0FBQSxFQUFtQztNQUFBLElBQWpDclIsS0FBSyxHQUFBZ0QsU0FBQSxDQUFBL0MsTUFBQSxRQUFBK0MsU0FBQSxRQUFBNE0sU0FBQSxHQUFBNU0sU0FBQSxNQUFHLEVBQUU7TUFBQSxJQUFFc08sSUFBSSxHQUFBdE8sU0FBQSxDQUFBL0MsTUFBQSxRQUFBK0MsU0FBQSxRQUFBNE0sU0FBQSxHQUFBNU0sU0FBQSxNQUFHLENBQUM7TUFBQSxJQUFFdU8sS0FBSyxHQUFBdk8sU0FBQSxDQUFBL0MsTUFBQSxRQUFBK0MsU0FBQSxRQUFBNE0sU0FBQSxHQUFBNU0sU0FBQSxNQUFHLENBQUM7TUFDdkMsSUFBTXdPLElBQUksR0FBR25OLE1BQU0sQ0FBQ3JFLEtBQUssSUFBSSxFQUFFLENBQUM7TUFDaEMsSUFBSXdSLElBQUksQ0FBQ3ZSLE1BQU0sSUFBSXFSLElBQUksR0FBR0MsS0FBSyxHQUFHLENBQUMsRUFBRSxPQUFPQyxJQUFJO01BQ2hELFVBQUFDLE1BQUEsQ0FBVUQsSUFBSSxDQUFDOVEsS0FBSyxDQUFDLENBQUMsRUFBRTRRLElBQUksQ0FBQyxTQUFBRyxNQUFBLENBQU1ELElBQUksQ0FBQzlRLEtBQUssQ0FBQyxDQUFDNlEsS0FBSyxDQUFDO0lBQ3ZEO0VBQUM7SUFBQXROLEdBQUE7SUFBQWpFLEtBQUEsRUFFRCxTQUFBMFIsZ0JBQWdCQSxDQUFFMVIsS0FBSyxFQUFFO01BQ3ZCLElBQU1YLENBQUMsR0FBR2lGLE1BQU0sQ0FBQ3RFLEtBQUssQ0FBQztNQUN2QixJQUFJLENBQUNzRSxNQUFNLENBQUNxTixRQUFRLENBQUN0UyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUc7TUFDbkMsSUFBSUEsQ0FBQyxJQUFJNkosMkJBQTJCLEVBQUUsT0FBTzdKLENBQUMsQ0FBQ3VTLGFBQWEsQ0FBQyxDQUFDLENBQUM7TUFDL0QsT0FBT3ZTLENBQUMsQ0FBQ3dTLGNBQWMsQ0FBQyxDQUFDO0lBQzNCO0VBQUM7SUFBQTVOLEdBQUE7SUFBQWpFLEtBQUEsRUFFRCxTQUFBOFIsV0FBV0EsQ0FBRXpTLENBQUMsRUFBRTtNQUNkLElBQU1vQyxDQUFDLEdBQUc2QyxNQUFNLENBQUNqRixDQUFDLENBQUM7TUFDbkIsSUFBSSxDQUFDaUYsTUFBTSxDQUFDcU4sUUFBUSxDQUFDbFEsQ0FBQyxDQUFDLElBQUlBLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHO01BQzVDLElBQUlBLENBQUMsR0FBRyxJQUFJLEVBQUUsVUFBQWdRLE1BQUEsQ0FBVVIsSUFBSSxDQUFDYyxLQUFLLENBQUN0USxDQUFDLENBQUM7TUFDckMsSUFBSUEsQ0FBQyxHQUFHLE9BQU8sRUFBRSxVQUFBZ1EsTUFBQSxDQUFVLENBQUNoUSxDQUFDLEdBQUcsSUFBSSxFQUFFdVEsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUNoRCxVQUFBUCxNQUFBLENBQVUsQ0FBQ2hRLENBQUMsR0FBRyxPQUFPLEVBQUV1USxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BDO0VBQUM7SUFBQS9OLEdBQUE7SUFBQWpFLEtBQUE7TUFBQSxJQUFBaVMscUJBQUEsR0FBQWxQLGlCQUFBLGNBQUFoQyxZQUFBLEdBQUFvQixDQUFBLENBRUQsU0FBQStQLFNBQUE7UUFBQSxJQUFBQyxLQUFBLEVBQUFDLFFBQUEsRUFBQTFULENBQUEsRUFBQTBTLEdBQUEsRUFBQWlCLEVBQUE7UUFBQSxPQUFBdFIsWUFBQSxHQUFBbUIsQ0FBQSxXQUFBb1EsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFoUixDQUFBLEdBQUFnUixTQUFBLENBQUFqVCxDQUFBO1lBQUE7Y0FDUThTLEtBQUssR0FBRyxJQUFJLENBQUM1SSxLQUFLLENBQUNnSixVQUFVO2NBQUEsSUFDOUJKLEtBQUs7Z0JBQUFHLFNBQUEsQ0FBQWpULENBQUE7Z0JBQUE7Y0FBQTtjQUNSLElBQUksQ0FBQ3VQLFFBQVEsQ0FBQztnQkFBRXhCLFdBQVcsRUFBRTtrQkFBRXRELEtBQUssRUFBRTtnQkFBcUU7Y0FBRSxDQUFDLENBQUM7Y0FBQyxPQUFBd0ksU0FBQSxDQUFBOVMsQ0FBQTtZQUFBO2NBRzVHNFMsUUFBUSxHQUFBM08sYUFBQSxDQUFBQSxhQUFBLEtBQVEsSUFBSSxDQUFDa0csS0FBSyxDQUFDRixRQUFRO2dCQUFFK0ksUUFBUSxFQUFFTDtjQUFLO2NBQUFHLFNBQUEsQ0FBQWhSLENBQUE7Y0FBQWdSLFNBQUEsQ0FBQWpULENBQUE7Y0FBQSxPQUV4QzBILHVCQUF1QixDQUFDcUwsUUFBUSxFQUFFLElBQUksQ0FBQ3pJLEtBQUssQ0FBQ3dELFFBQVEsQ0FBQztZQUFBO2NBQWhFek8sQ0FBQyxHQUFBNFQsU0FBQSxDQUFBN1EsQ0FBQTtjQUNEMlAsR0FBRyxHQUFHMVMsQ0FBQyxLQUFLQSxDQUFDLENBQUNvTCxLQUFLLElBQUlwTCxDQUFDLENBQUMrVCxPQUFPLENBQUM7Y0FBQSxLQUNuQ3JCLEdBQUc7Z0JBQUFrQixTQUFBLENBQUFqVCxDQUFBO2dCQUFBO2NBQUE7Y0FDTCxJQUFJLENBQUN1UCxRQUFRLENBQUM7Z0JBQUV4QixXQUFXLEVBQUU7a0JBQUV0RCxLQUFLLEVBQUV6RixNQUFNLENBQUMrTSxHQUFHO2dCQUFFO2NBQUUsQ0FBQyxDQUFDO2NBQUMsT0FBQWtCLFNBQUEsQ0FBQTlTLENBQUE7WUFBQTtjQUd6RCxJQUFJLENBQUNvUCxRQUFRLENBQUM7Z0JBQUV4QixXQUFXLEVBQUUxTyxDQUFDO2dCQUFFeU8sUUFBUSxFQUFFO2NBQUcsQ0FBQyxDQUFDO2NBQUNtRixTQUFBLENBQUFqVCxDQUFBO2NBQUEsT0FDMUMsSUFBSSxDQUFDbVAsT0FBTyxDQUFDLENBQUM7WUFBQTtjQUFBOEQsU0FBQSxDQUFBalQsQ0FBQTtjQUFBO1lBQUE7Y0FBQWlULFNBQUEsQ0FBQWhSLENBQUE7Y0FBQStRLEVBQUEsR0FBQUMsU0FBQSxDQUFBN1EsQ0FBQTtjQUVwQixJQUFJLENBQUNtTixRQUFRLENBQUM7Z0JBQUV4QixXQUFXLEVBQUU7a0JBQUV0RCxLQUFLLEVBQUV1SSxFQUFBLElBQVNBLEVBQUEsQ0FBTUksT0FBTyxHQUFHSixFQUFBLENBQU1JLE9BQU8sR0FBR3BPLE1BQU0sQ0FBQWdPLEVBQU07Z0JBQUU7Y0FBRSxDQUFDLENBQUM7WUFBQztjQUFBLE9BQUFDLFNBQUEsQ0FBQTlTLENBQUE7VUFBQTtRQUFBLEdBQUEwUyxRQUFBO01BQUEsQ0FFckc7TUFBQSxTQW5CS1Esb0JBQW9CQSxDQUFBO1FBQUEsT0FBQVQscUJBQUEsQ0FBQWhQLEtBQUEsT0FBQUQsU0FBQTtNQUFBO01BQUEsT0FBcEIwUCxvQkFBb0I7SUFBQTtFQUFBO0lBQUF6TyxHQUFBO0lBQUFqRSxLQUFBLEVBcUIxQixTQUFBMlMsY0FBY0EsQ0FBQSxFQUFJO01BQ2hCLElBQU1DLEVBQUUsR0FBR3ZPLE1BQU0sQ0FBQyxJQUFJLENBQUNzRixLQUFLLENBQUMwRCxVQUFVLElBQUksRUFBRSxDQUFDLENBQUN3RixJQUFJLENBQUMsQ0FBQztNQUNyRCxJQUFJLENBQUMsbUJBQW1CLENBQUMvUixJQUFJLENBQUM4UixFQUFFLENBQUMsRUFBRTtRQUNqQyxJQUFJLENBQUNoRSxRQUFRLENBQUM7VUFBRXRCLGFBQWEsRUFBRTtRQUE2QyxDQUFDLENBQUM7UUFDOUU7TUFDRjtNQUNBLElBQU03TixDQUFDLEdBQUdxSixxQkFBcUIsQ0FBQyxDQUFDO01BQ2pDLElBQUksQ0FBQ3JKLENBQUMsQ0FBQ3FULGVBQWUsRUFBRTtRQUN0QixJQUFJLENBQUNsRSxRQUFRLENBQUM7VUFDWnRCLGFBQWEsRUFBRTtRQUNqQixDQUFDLENBQUM7UUFDRjtNQUNGO01BQ0EsSUFBSSxDQUFDc0IsUUFBUSxDQUFDO1FBQUV0QixhQUFhLEVBQUU7TUFBSyxDQUFDLENBQUM7TUFDdEMsSUFBTXlGLEdBQUcsR0FBRyxJQUFJLENBQUN4SixLQUFLLENBQUN5SixRQUFRO01BQy9CLElBQUksT0FBT0QsR0FBRyxLQUFLLFVBQVUsRUFBRUEsR0FBRyxtQ0FBQXRCLE1BQUEsQ0FBbUN3QixrQkFBa0IsQ0FBQ0wsRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFDLEtBQzFGLElBQUksT0FBT2xGLE1BQU0sS0FBSyxXQUFXLEVBQUVBLE1BQU0sQ0FBQ0UsUUFBUSxDQUFDc0YsTUFBTSxtQ0FBQXpCLE1BQUEsQ0FBbUN3QixrQkFBa0IsQ0FBQ0wsRUFBRSxDQUFDLENBQUUsQ0FBQztJQUM1SDs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBSkU7SUFBQTNPLEdBQUE7SUFBQWpFLEtBQUEsRUFLQSxTQUFBbVQsb0JBQW9CQSxDQUFFbEUsSUFBSSxFQUFFO01BQzFCLElBQU0zTixDQUFDLEdBQUcrQyxNQUFNLENBQUM0SyxJQUFJLElBQUksRUFBRSxDQUFDO01BQzVCLElBQUksQ0FBQzNOLENBQUMsQ0FBQzhSLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSTlSLENBQUMsQ0FBQytSLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtNQUM1QyxJQUFNTixHQUFHLEdBQUcsSUFBSSxDQUFDeEosS0FBSyxDQUFDeUosUUFBUTtNQUMvQixJQUFJLE9BQU9ELEdBQUcsS0FBSyxVQUFVLEVBQUVBLEdBQUcsQ0FBQ3pSLENBQUMsQ0FBQyxDQUFDLEtBQ2pDLElBQUksT0FBT29NLE1BQU0sS0FBSyxXQUFXLEVBQUVBLE1BQU0sQ0FBQ0UsUUFBUSxDQUFDc0YsTUFBTSxDQUFDNVIsQ0FBQyxDQUFDO0lBQ25FO0VBQUM7SUFBQTJDLEdBQUE7SUFBQWpFLEtBQUEsRUFFRCxTQUFBOFAsV0FBV0EsQ0FBQSxFQUFJO01BQ2IsSUFBTVAsUUFBUSxHQUFJLElBQUksQ0FBQ2hHLEtBQUssSUFBSSxJQUFJLENBQUNBLEtBQUssQ0FBQ2dHLFFBQVEsSUFBTSxJQUFJLENBQUNoRyxLQUFLLElBQUksSUFBSSxDQUFDQSxLQUFLLENBQUMrSixJQUFLLElBQUksSUFBSTtNQUMvRixPQUFPL0QsUUFBUSxJQUFJLENBQUMsQ0FBQztJQUN2QjtFQUFDO0lBQUF0TCxHQUFBO0lBQUFqRSxLQUFBO01BQUEsSUFBQXVULFFBQUEsR0FBQXhRLGlCQUFBLGNBQUFoQyxZQUFBLEdBQUFvQixDQUFBLENBRUQsU0FBQXFSLFNBQUE7UUFBQSxJQUFBakUsUUFBQSxFQUFBa0UsV0FBQSxFQUFBQyxXQUFBLEVBQUFqSyxRQUFBLEVBQUFrSyxhQUFBLEVBQUFuRSxPQUFBLEVBQUFvRSxXQUFBLEVBQUFDLFlBQUEsRUFBQUMsaUJBQUEsRUFBQUMsbUJBQUEsRUFBQUMscUJBQUEsRUFBQUMsUUFBQSxFQUFBQyx1QkFBQSxFQUFBQyxtQkFBQSxFQUFBQyxrQkFBQSxFQUFBQyxhQUFBLEVBQUFDLGVBQUEsRUFBQUMsa0JBQUEsRUFBQUMsbUJBQUEsRUFBQS9FLE9BQUEsRUFBQWdGLFFBQUEsRUFBQTFJLGFBQUEsRUFBQUUsZUFBQSxFQUFBQyxpQkFBQSxFQUFBcEIsS0FBQSxFQUFBYyxtQkFBQSxFQUFBOEksbUJBQUEsRUFBQUMsY0FBQSxFQUFBMUgsU0FBQSxFQUFBQyxXQUFBLEVBQUEwSCxRQUFBLEVBQUFsSyxPQUFBLEVBQUFtSyxTQUFBLEVBQUFsSyxZQUFBLEVBQUFKLFdBQUEsRUFBQUMsYUFBQSxFQUFBQyxlQUFBLEVBQUFxSyxjQUFBLEVBQUFDLG9CQUFBLEVBQUFDLFlBQUEsRUFBQUMsa0JBQUEsRUFBQW5KLHVCQUFBLEVBQUFvSixLQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGtCQUFBLEVBQUFDLEdBQUE7UUFBQSxPQUFBdFUsWUFBQSxHQUFBbUIsQ0FBQSxXQUFBb1QsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFoVSxDQUFBLEdBQUFnVSxTQUFBLENBQUFqVyxDQUFBO1lBQUE7Y0FDUWtRLFFBQVEsR0FBRyxJQUFJLENBQUNPLFdBQVcsQ0FBQyxDQUFDO2NBQzdCMkQsV0FBVyxHQUFHL0wscUJBQXFCLENBQUM2SCxRQUFRLENBQUM7Y0FDN0NtRSxXQUFXLEdBQUcvTCwyQkFBMkIsQ0FBQzRILFFBQVEsQ0FBQztjQUNuRDlGLFFBQVEsR0FBRyxJQUFJLENBQUNFLEtBQUssQ0FBQ0YsUUFBUTtjQUM5QmtLLGFBQWEsR0FBQWxRLGFBQUEsQ0FBQUEsYUFBQSxLQUNkZ0csUUFBUTtnQkFDWDhMLGFBQWEsRUFBRSxJQUFJLENBQUNDLGNBQWMsQ0FBQyxDQUFDLElBQUk7Y0FBRTtjQUc1QyxJQUFJLENBQUM1RyxRQUFRLENBQUM7Z0JBQUVoRixPQUFPLEVBQUUsQ0FBQzZKLFdBQVcsQ0FBQ3RKLFFBQVE7Z0JBQUVOLFVBQVUsRUFBRSxJQUFJO2dCQUFFQyxLQUFLLEVBQUU7Y0FBSyxDQUFDLENBQUM7Y0FFMUUwRixPQUFPLEdBQUksSUFBSSxDQUFDN0YsS0FBSyxDQUFDb0MsYUFBYSxJQUFJLElBQUksQ0FBQ3BDLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ3lELE9BQU8sR0FBSW5MLE1BQU0sQ0FBQyxJQUFJLENBQUNzRixLQUFLLENBQUNvQyxhQUFhLENBQUN5RCxPQUFPLENBQUMsQ0FBQ08sV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFO2NBQ3RJNkQsV0FBVyxHQUFHbk0sMkJBQTJCLENBQUNrTSxhQUFhLEVBQUVGLFdBQVcsRUFBRTtnQkFBRWpFLE9BQU8sRUFBUEE7Y0FBUSxDQUFDLENBQUMsU0FBTSxDQUFDO2dCQUFBLE9BQU8sQ0FBQyxDQUFDO2NBQUEsQ0FBQyxDQUFDO2NBQ3BHcUUsWUFBWSxHQUFHN00saUJBQWlCLENBQUMyTSxhQUFhLEVBQUVGLFdBQVcsRUFBRTtnQkFDakVqRSxPQUFPLEVBQVBBLE9BQU87Z0JBQ1ArQyxVQUFVLEVBQUUsSUFBSSxDQUFDaUQsY0FBYyxDQUFDLENBQUMsSUFBSTtjQUN2QyxDQUFDLENBQUMsU0FBTSxDQUFDO2dCQUFBLE9BQU87a0JBQUU1SyxNQUFNLEVBQUUsRUFBRTtrQkFBRUMsWUFBWSxFQUFFO2dCQUFHLENBQUM7Y0FBQSxDQUFDLENBQUM7Y0FDNUNpSixpQkFBaUIsR0FBR2xOLGtCQUFrQixDQUFDK00sYUFBYSxDQUFDLFNBQU0sQ0FBQztnQkFBQSxPQUFPO2tCQUFFOUgsU0FBUyxFQUFFLEtBQUs7a0JBQUVHLE1BQU0sRUFBRTtnQkFBYyxDQUFDO2NBQUEsQ0FBQyxDQUFDO2NBQ2hIK0gsbUJBQW1CLEdBQUc3TSxvQkFBb0IsQ0FBQ3VDLFFBQVEsQ0FBQyxTQUFNLENBQUM7Z0JBQUEsT0FBTztrQkFBRW9DLFNBQVMsRUFBRSxLQUFLO2tCQUFFRyxNQUFNLEVBQUU7Z0JBQWMsQ0FBQztjQUFBLENBQUMsQ0FBQztjQUMvR2dJLHFCQUFxQixHQUFHL00sc0JBQXNCLENBQUN3QyxRQUFRLENBQUMsU0FBTSxDQUFDO2dCQUFBLE9BQU87a0JBQUVnTSxRQUFRLEVBQUUsRUFBRTtrQkFBRWhGLE9BQU8sRUFBRTtnQkFBRyxDQUFDO2NBQUEsQ0FBQyxDQUFDO2NBQ3JHd0QsUUFBUSxHQUFHMU0sVUFBVSxDQUFDb00sYUFBYSxFQUFFRixXQUFXLENBQUMsU0FBTSxDQUFDO2dCQUFBLE9BQU0sRUFBRTtjQUFBLEVBQUM7Y0FDakVTLHVCQUF1QixHQUFHL00sd0JBQXdCLENBQUNzQyxRQUFRLENBQUMsU0FBTSxDQUFDO2dCQUFBLE9BQU87a0JBQUVvQyxTQUFTLEVBQUU7Z0JBQU0sQ0FBQztjQUFBLENBQUMsQ0FBQztjQUNoR3NJLG1CQUFtQixHQUFHL00sb0JBQW9CLENBQUNxQyxRQUFRLEVBQUU7Z0JBQUVpTSxLQUFLLEVBQUUsRUFBRTtnQkFBRUMsY0FBYyxFQUFFO2NBQU0sQ0FBQyxDQUFDLFNBQU0sQ0FBQztnQkFBQSxPQUFNLEVBQUU7Y0FBQSxFQUFDO2NBQzFHdkIsa0JBQWtCLEdBQUcsSUFBSSxDQUFDekssS0FBSyxDQUFDK0IsZ0JBQWdCLEdBQ2xEckUsbUJBQW1CLENBQUNvQyxRQUFRLEVBQUUsSUFBSSxDQUFDRSxLQUFLLENBQUMrQixnQkFBZ0IsQ0FBQyxTQUFNLENBQUM7Z0JBQUEsT0FBTSxJQUFJO2NBQUEsRUFBQyxHQUM1RTlJLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQztjQUNuQndSLGFBQWEsR0FBR3hOLGlCQUFpQixDQUFDNEMsUUFBUSxDQUFDLFNBQU0sQ0FBQztnQkFBQSxPQUFNLEVBQUU7Y0FBQSxFQUFDO2NBQzNENkssZUFBZSxHQUFHeE4sMEJBQTBCLENBQUMyQyxRQUFRLENBQUMsU0FBTSxDQUFDO2dCQUFBLE9BQU8sQ0FBQyxDQUFDO2NBQUEsQ0FBQyxDQUFDO2NBQUE2TCxTQUFBLENBQUFoVSxDQUFBO2NBQUFnVSxTQUFBLENBQUFqVyxDQUFBO2NBQUEsT0FHa0d1RCxPQUFPLENBQUNnVCxHQUFHLENBQUMsQ0FDeExoQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsaUJBQWlCLEVBQ2pCQyxtQkFBbUIsRUFDbkJDLHFCQUFxQixFQUNyQkMsUUFBUSxFQUNSQyx1QkFBdUIsRUFDdkJDLG1CQUFtQixFQUNuQkMsa0JBQWtCLEVBQ2xCQyxhQUFhLEVBQ2JDLGVBQWUsQ0FDaEIsQ0FBQztZQUFBO2NBQUFDLGtCQUFBLEdBQUFlLFNBQUEsQ0FBQTdULENBQUE7Y0FBQStTLG1CQUFBLEdBQUEvVixjQUFBLENBQUE4VixrQkFBQTtjQVpLOUUsT0FBTyxHQUFBK0UsbUJBQUE7Y0FBRUMsUUFBUSxHQUFBRCxtQkFBQTtjQUFFekksYUFBYSxHQUFBeUksbUJBQUE7Y0FBRXZJLGVBQWUsR0FBQXVJLG1CQUFBO2NBQUV0SSxpQkFBaUIsR0FBQXNJLG1CQUFBO2NBQUUxSixLQUFLLEdBQUEwSixtQkFBQTtjQUFFNUksbUJBQW1CLEdBQUE0SSxtQkFBQTtjQUFFRSxtQkFBbUIsR0FBQUYsbUJBQUE7Y0FBRUcsY0FBYyxHQUFBSCxtQkFBQTtjQUFFdkgsU0FBUyxHQUFBdUgsbUJBQUE7Y0FBRXRILFdBQVcsR0FBQXNILG1CQUFBO2NBYTlKaEYsUUFBTyxHQUFJekQsYUFBYSxJQUFJQSxhQUFhLENBQUN5RCxPQUFPLEdBQUluTCxNQUFNLENBQUMwSCxhQUFhLENBQUN5RCxPQUFPLENBQUMsQ0FBQ08sV0FBVyxDQUFDLENBQUMsR0FBRyxFQUFFO2NBQUF1RixTQUFBLENBQUFqVyxDQUFBO2NBQUEsT0FDckZpSSxtQkFBbUIsQ0FBQ21DLFFBQVEsRUFBRWlLLFdBQVcsRUFBRTtnQkFBRWxFLE9BQU8sRUFBUEEsUUFBTztnQkFBRUQsUUFBUSxFQUFSQTtjQUFTLENBQUMsQ0FBQyxTQUFNLENBQUM7Z0JBQUEsT0FBTSxFQUFFO2NBQUEsRUFBQztZQUFBO2NBQWpHN0UsT0FBTyxHQUFBNEssU0FBQSxDQUFBN1QsQ0FBQTtjQUNQb1QsU0FBUyxHQUFHbk8sNEJBQTRCLENBQUNnTixXQUFXLEVBQUU7Z0JBQUVsRSxPQUFPLEVBQVBBLFFBQU87Z0JBQUVELFFBQVEsRUFBUkE7Y0FBUyxDQUFDLENBQUM7Y0FDNUU1RSxZQUFZLEdBQUdrSyxTQUFTLElBQUlBLFNBQVMsQ0FBQ2dCLFlBQVksSUFBSSxJQUFJLEdBQzVEdlIsTUFBTSxDQUFDdVEsU0FBUyxDQUFDZ0IsWUFBWSxDQUFDLEdBQzlCLENBQUM7Y0FDQ3RMLFdBQVcsR0FBR2pHLE1BQU0sQ0FBQ21MLE9BQU8sQ0FBQ2xGLFdBQVcsSUFBSSxJQUFJLEdBQUdrRixPQUFPLENBQUNsRixXQUFXLEdBQUlrRixPQUFPLENBQUNPLE9BQU8sSUFBSSxDQUFFLENBQUM7Y0FDaEd4RixhQUFhLEdBQUdsRyxNQUFNLENBQUNtTCxPQUFPLENBQUNqRixhQUFhLElBQUksSUFBSSxHQUFHaUYsT0FBTyxDQUFDakYsYUFBYSxHQUFHRCxXQUFXLENBQUM7Y0FDM0ZFLGVBQWUsR0FBR25HLE1BQU0sQ0FBQ21MLE9BQU8sQ0FBQ2hGLGVBQWUsSUFBSSxDQUFDLENBQUM7Y0FDdERxSyxjQUFjLEdBQUc1VSxLQUFLLENBQUNDLE9BQU8sQ0FBQ3NVLFFBQVEsQ0FBQzdKLE1BQU0sQ0FBQyxHQUFHNkosUUFBUSxDQUFDN0osTUFBTSxDQUFDbEssS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFO2NBQ25GcVUsb0JBQW9CLEdBQUc3VSxLQUFLLENBQUNDLE9BQU8sQ0FBQ3NVLFFBQVEsQ0FBQzVKLFlBQVksQ0FBQyxHQUFHNEosUUFBUSxDQUFDNUosWUFBWSxDQUFDbkssS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFO2NBQ3JHc1UsWUFBWSxHQUFJakosYUFBYSxJQUFJN0wsS0FBSyxDQUFDQyxPQUFPLENBQUM0TCxhQUFhLENBQUMrSixZQUFZLENBQUMsR0FDNUUvSixhQUFhLENBQUMrSixZQUFZLENBQUNwVixLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUN2QyxFQUFFO2NBQ0F1VSxrQkFBa0IsR0FBSWxKLGFBQWEsSUFBSTdMLEtBQUssQ0FBQ0MsT0FBTyxDQUFDNEwsYUFBYSxDQUFDZ0ssa0JBQWtCLENBQUMsR0FDeEZoSyxhQUFhLENBQUNnSyxrQkFBa0IsQ0FBQ3JWLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQzdDLEVBQUU7Y0FFRm9MLHVCQUF1QixHQUFHLElBQUk7Y0FDNUJvSixLQUFLLEdBQUdwTSxxQkFBcUIsQ0FBQyxDQUFDO2NBQ3JDLElBQUlvTSxLQUFLLElBQUlBLEtBQUssQ0FBQ2MsZUFBZSxFQUFFO2dCQUNsQyxJQUFJOVYsS0FBSyxDQUFDQyxPQUFPLENBQUN1VSxtQkFBbUIsQ0FBQyxFQUFFO2tCQUNoQ1MsZ0JBQWdCLEdBQUdULG1CQUFtQixDQUFDelUsTUFBTTtrQkFDN0NtVixrQkFBa0IsR0FBR1YsbUJBQW1CLENBQUNuUixNQUFNLENBQUMsVUFBQ2hELENBQUM7b0JBQUEsT0FBSzhELE1BQU0sQ0FBRTlELENBQUMsSUFBSUEsQ0FBQyxDQUFDeUwsTUFBTSxJQUFLLEVBQUUsQ0FBQyxLQUFLLFNBQVM7a0JBQUEsRUFBQyxDQUFDL0wsTUFBTTtrQkFDaEg2TCx1QkFBdUIsR0FBRztvQkFBRXFKLGdCQUFnQixFQUFoQkEsZ0JBQWdCO29CQUFFQyxrQkFBa0IsRUFBbEJBO2tCQUFtQixDQUFDO2dCQUNwRTtjQUNGO2NBRUEsSUFBSSxDQUFDeEcsUUFBUSxDQUFDO2dCQUNaaEYsT0FBTyxFQUFFLEtBQUs7Z0JBQ2RDLFVBQVUsRUFBRSxLQUFLO2dCQUNqQkMsS0FBSyxFQUFFLElBQUk7Z0JBQ1hJLE1BQU0sRUFBQXpHLGFBQUEsQ0FBQUEsYUFBQSxLQUNEZ1EsV0FBVztrQkFDZGxKLFdBQVcsRUFBWEEsV0FBVztrQkFDWEMsYUFBYSxFQUFiQSxhQUFhO2tCQUNiQyxlQUFlLEVBQWZBLGVBQWU7a0JBQ2ZDLE9BQU8sRUFBRUEsT0FBTyxJQUFJLEVBQUU7a0JBQ3RCQyxZQUFZLEVBQVpBO2dCQUFZLEVBQ2I7Z0JBQ0RDLE1BQU0sRUFBRWtLLGNBQWMsQ0FBQzdVLE1BQU0sR0FBRzZVLGNBQWMsR0FBR0UsWUFBWTtnQkFDN0RuSyxZQUFZLEVBQUVrSyxvQkFBb0IsQ0FBQzlVLE1BQU0sR0FBRzhVLG9CQUFvQixHQUFHRSxrQkFBa0I7Z0JBQ3JGbEosYUFBYSxFQUFFQSxhQUFhLElBQUlySixPQUFBLENBQU9xSixhQUFhLE1BQUssUUFBUSxHQUM3REEsYUFBYSxHQUNiO2tCQUFFRixTQUFTLEVBQUUsS0FBSztrQkFBRUcsTUFBTSxFQUFFO2dCQUFjLENBQUM7Z0JBQy9DQyxlQUFlLEVBQUVBLGVBQWUsSUFBSXZKLE9BQUEsQ0FBT3VKLGVBQWUsTUFBSyxRQUFRLEdBQ25FQSxlQUFlLEdBQ2Y7a0JBQUVKLFNBQVMsRUFBRSxLQUFLO2tCQUFFRyxNQUFNLEVBQUU7Z0JBQWMsQ0FBQztnQkFDL0NFLGlCQUFpQixFQUFFQSxpQkFBaUIsSUFBSWhNLEtBQUssQ0FBQ0MsT0FBTyxDQUFDK0wsaUJBQWlCLENBQUN1SixRQUFRLENBQUMsR0FBR3ZKLGlCQUFpQixDQUFDdUosUUFBUSxHQUFHLEVBQUU7Z0JBQ25IdEosZ0JBQWdCLEVBQUVELGlCQUFpQixJQUFJaE0sS0FBSyxDQUFDQyxPQUFPLENBQUMrTCxpQkFBaUIsQ0FBQ3VFLE9BQU8sQ0FBQyxHQUFHdkUsaUJBQWlCLENBQUN1RSxPQUFPLEdBQUcsRUFBRTtnQkFDaEgzRixLQUFLLEVBQUU1SyxLQUFLLENBQUNDLE9BQU8sQ0FBQzJLLEtBQUssQ0FBQyxHQUFHQSxLQUFLLEdBQUcsRUFBRTtnQkFDeENjLG1CQUFtQixFQUFFQSxtQkFBbUIsSUFBSWxKLE9BQUEsQ0FBT2tKLG1CQUFtQixNQUFLLFFBQVEsR0FDL0VBLG1CQUFtQixHQUNuQjtrQkFBRUMsU0FBUyxFQUFFO2dCQUFNLENBQUM7Z0JBQ3hCQyx1QkFBdUIsRUFBdkJBLHVCQUF1QjtnQkFDdkJILGFBQWEsRUFBRWdKLGNBQWMsSUFBSSxJQUFJLENBQUNoTCxLQUFLLENBQUNnQyxhQUFhO2dCQUN6RHNCLFNBQVMsRUFBRS9NLEtBQUssQ0FBQ0MsT0FBTyxDQUFDOE0sU0FBUyxDQUFDLEdBQUdBLFNBQVMsR0FBRyxFQUFFO2dCQUNwREMsV0FBVyxFQUFFQSxXQUFXLElBQUl4SyxPQUFBLENBQU93SyxXQUFXLE1BQUssUUFBUSxHQUFHQSxXQUFXLEdBQUcsQ0FBQztjQUMvRSxDQUFDLENBQUM7Y0FDRixJQUFJLE9BQU9RLE1BQU0sS0FBSyxXQUFXLElBQUlwSixNQUFNLENBQUNxTixRQUFRLENBQUNwSCxXQUFXLENBQUMsRUFBRTtnQkFDakVtRCxNQUFNLENBQUN1SSxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFO2tCQUMxRG5ILE1BQU0sRUFBRTtvQkFDTjVFLFFBQVEsRUFBRXNKLFdBQVcsQ0FBQ3RKLFFBQVE7b0JBQzlCSSxXQUFXLEVBQVhBLFdBQVc7b0JBQ1hDLGFBQWEsRUFBYkEsYUFBYTtvQkFDYkMsZUFBZSxFQUFmQTtrQkFDRjtnQkFDRixDQUFDLENBQUMsQ0FBQztjQUNMO2NBQUM2SyxTQUFBLENBQUFqVyxDQUFBO2NBQUE7WUFBQTtjQUFBaVcsU0FBQSxDQUFBaFUsQ0FBQTtjQUFBK1QsR0FBQSxHQUFBQyxTQUFBLENBQUE3VCxDQUFBO2NBRUQsSUFBSSxDQUFDbU4sUUFBUSxDQUFDO2dCQUNaaEYsT0FBTyxFQUFFLEtBQUs7Z0JBQ2RDLFVBQVUsRUFBRSxLQUFLO2dCQUNqQkMsS0FBSyxFQUFFdUwsR0FBQSxJQUFTQSxHQUFBLENBQU01QyxPQUFPLEdBQUc0QyxHQUFBLENBQU01QyxPQUFPLEdBQUdwTyxNQUFNLENBQUFnUixHQUFNO2NBQzlELENBQUMsQ0FBQztZQUFDO2NBQUEsT0FBQUMsU0FBQSxDQUFBOVYsQ0FBQTtVQUFBO1FBQUEsR0FBQWdVLFFBQUE7TUFBQSxDQUVOO01BQUEsU0F4SEtoRixPQUFPQSxDQUFBO1FBQUEsT0FBQStFLFFBQUEsQ0FBQXRRLEtBQUEsT0FBQUQsU0FBQTtNQUFBO01BQUEsT0FBUHdMLE9BQU87SUFBQTtFQUFBO0lBQUF2SyxHQUFBO0lBQUFqRSxLQUFBLEVBMEhiLFNBQUFtVyx3QkFBd0JBLENBQUEsRUFBSTtNQUMxQixJQUFNM0csT0FBTyxHQUFJLElBQUksQ0FBQzdGLEtBQUssQ0FBQ29DLGFBQWEsSUFBSSxJQUFJLENBQUNwQyxLQUFLLENBQUNvQyxhQUFhLENBQUN5RCxPQUFPLEdBQ3pFbkwsTUFBTSxDQUFDLElBQUksQ0FBQ3NGLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ3lELE9BQU8sQ0FBQyxDQUFDTyxXQUFXLENBQUMsQ0FBQyxHQUN0RCxFQUFFO01BQ04sSUFBTXFHLGFBQWEsR0FBR3pPLDJCQUEyQixDQUFDLElBQUksQ0FBQ21JLFdBQVcsQ0FBQyxDQUFDLENBQUM7TUFDckUsSUFBTWxRLElBQUksR0FBR29JLHlCQUF5QixDQUFDb08sYUFBYSxFQUFFO1FBQUU1RyxPQUFPLEVBQVBBLE9BQU87UUFBRUQsUUFBUSxFQUFFLElBQUksQ0FBQ08sV0FBVyxDQUFDO01BQUUsQ0FBQyxDQUFDO01BQ2hHLElBQUksQ0FBQ2xRLElBQUksSUFBSSxDQUFDQSxJQUFJLENBQUN5VyxjQUFjLEVBQUU7UUFDakMsSUFBSSxDQUFDekgsUUFBUSxDQUFDO1VBQUVuQyxhQUFhLEVBQUU7WUFBRTNDLEtBQUssRUFBRTtVQUFtRDtRQUFFLENBQUMsQ0FBQztRQUMvRjtNQUNGO01BQ0EsSUFBSSxDQUFDOEUsUUFBUSxDQUFDLFVBQUNxQixJQUFJO1FBQUEsT0FBTTtVQUN2Qi9GLE1BQU0sRUFBQXpHLGFBQUEsQ0FBQUEsYUFBQSxLQUNEd00sSUFBSSxDQUFDL0YsTUFBTTtZQUNkUSxPQUFPLEVBQUU5SyxJQUFJLENBQUN5VyxjQUFjO1lBQzVCMUwsWUFBWSxFQUFFckcsTUFBTSxDQUFDMUUsSUFBSSxDQUFDaVcsWUFBWSxJQUFJLENBQUM7VUFBQztRQUVoRCxDQUFDO01BQUEsQ0FBQyxDQUFDO0lBQ0w7RUFBQztJQUFBNVIsR0FBQTtJQUFBakUsS0FBQSxFQUVELFNBQUF3VixjQUFjQSxDQUFBLEVBQUk7TUFDaEIsT0FBTy9NLDRCQUE0QixDQUFDLElBQUksQ0FBQ2MsS0FBSyxJQUFJLElBQUksQ0FBQ0EsS0FBSyxDQUFDZ0osVUFBVSxDQUFDO0lBQzFFO0VBQUM7SUFBQXRPLEdBQUE7SUFBQWpFLEtBQUE7TUFBQSxJQUFBc1csa0JBQUEsR0FBQXZULGlCQUFBLGNBQUFoQyxZQUFBLEdBQUFvQixDQUFBLENBRUQsU0FBQW9VLFNBQUE7UUFBQSxJQUFBeEwsU0FBQSxFQUFBQyxpQkFBQSxFQUFBdUgsVUFBQSxFQUFBaUUsTUFBQSxFQUFBQyxRQUFBLEVBQUFDLEdBQUE7UUFBQSxPQUFBM1YsWUFBQSxHQUFBbUIsQ0FBQSxXQUFBeVUsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFyVixDQUFBLEdBQUFxVixTQUFBLENBQUF0WCxDQUFBO1lBQUE7Y0FDUTBMLFNBQVMsR0FBRzFHLE1BQU0sQ0FBQyxJQUFJLENBQUNzRixLQUFLLENBQUNvQixTQUFTLElBQUksRUFBRSxDQUFDLENBQUM4SCxJQUFJLENBQUMsQ0FBQztjQUNyRDdILGlCQUFpQixHQUFHMUcsTUFBTSxDQUFDLElBQUksQ0FBQ3FGLEtBQUssQ0FBQ3FCLGlCQUFpQixJQUFJLENBQUMsQ0FBQztjQUFBLElBQzlERCxTQUFTO2dCQUFBNEwsU0FBQSxDQUFBdFgsQ0FBQTtnQkFBQTtjQUFBO2NBQ1osSUFBSSxDQUFDdVAsUUFBUSxDQUFDO2dCQUFFbkMsYUFBYSxFQUFFO2tCQUFFM0MsS0FBSyxFQUFFO2dCQUF5QjtjQUFFLENBQUMsQ0FBQztjQUFDLE9BQUE2TSxTQUFBLENBQUFuWCxDQUFBO1lBQUE7Y0FBQSxNQUdwRSxDQUFDOEUsTUFBTSxDQUFDcU4sUUFBUSxDQUFDM0csaUJBQWlCLENBQUMsSUFBSUEsaUJBQWlCLElBQUksQ0FBQztnQkFBQTJMLFNBQUEsQ0FBQXRYLENBQUE7Z0JBQUE7Y0FBQTtjQUMvRCxJQUFJLENBQUN1UCxRQUFRLENBQUM7Z0JBQUVuQyxhQUFhLEVBQUU7a0JBQUUzQyxLQUFLLEVBQUU7Z0JBQTJDO2NBQUUsQ0FBQyxDQUFDO2NBQUMsT0FBQTZNLFNBQUEsQ0FBQW5YLENBQUE7WUFBQTtjQUlwRitTLFVBQVUsR0FBRyxJQUFJLENBQUNpRCxjQUFjLENBQUMsQ0FBQztjQUFBLElBQ25DakQsVUFBVTtnQkFBQW9FLFNBQUEsQ0FBQXRYLENBQUE7Z0JBQUE7Y0FBQTtjQUNiLElBQUksQ0FBQ3VQLFFBQVEsQ0FBQztnQkFDWm5DLGFBQWEsRUFBRTtrQkFDYjNDLEtBQUssRUFBRTtnQkFDVDtjQUNGLENBQUMsQ0FBQztjQUFDLE9BQUE2TSxTQUFBLENBQUFuWCxDQUFBO1lBQUE7Y0FBQW1YLFNBQUEsQ0FBQXJWLENBQUE7Y0FBQXFWLFNBQUEsQ0FBQXRYLENBQUE7Y0FBQSxPQUtrQjZJLFdBQVcsQ0FBQyxJQUFJLENBQUN5QixLQUFLLENBQUNGLFFBQVEsRUFBRSxJQUFJLENBQUNFLEtBQUssQ0FBQ08sTUFBTSxFQUFFO2dCQUN2RTBNLEVBQUUsRUFBRTdMLFNBQVM7Z0JBQ2I4TCxVQUFVLEVBQUU3TCxpQkFBaUI7Z0JBQzdCOEwsSUFBSSxFQUFFLElBQUksQ0FBQ25OLEtBQUssQ0FBQ3NCLFdBQVc7Z0JBQzVCc0gsVUFBVSxFQUFWQTtjQUNGLENBQUMsQ0FBQztZQUFBO2NBTElpRSxNQUFNLEdBQUFHLFNBQUEsQ0FBQWxWLENBQUE7Y0FPTmdWLFFBQVEsR0FBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNPLE9BQU8sSUFBSVAsTUFBTSxDQUFDTyxPQUFPLENBQUNDLElBQUksSUFBTVIsTUFBTSxJQUFJQSxNQUFNLENBQUNRLElBQUs7Y0FDN0YsSUFBSVAsUUFBUSxJQUFJLE9BQU8vSSxNQUFNLEtBQUssV0FBVyxFQUFFO2dCQUM3Q0EsTUFBTSxDQUFDdUksYUFBYSxDQUFDLElBQUlDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2NBQzlEO2NBRUEsSUFBSSxDQUFDdEgsUUFBUSxDQUFDO2dCQUNabkMsYUFBYSxFQUFFK0osTUFBTSxJQUFJO2tCQUFFeEssTUFBTSxFQUFFO2dCQUFZLENBQUM7Z0JBQ2hEaEIsaUJBQWlCLEVBQUUsRUFBRTtnQkFDckJDLFdBQVcsRUFBRTtjQUNmLENBQUMsQ0FBQztjQUFDMEwsU0FBQSxDQUFBdFgsQ0FBQTtjQUFBLE9BQ0csSUFBSSxDQUFDbVAsT0FBTyxDQUFDLENBQUM7WUFBQTtjQUFBbUksU0FBQSxDQUFBdFgsQ0FBQTtjQUFBO1lBQUE7Y0FBQXNYLFNBQUEsQ0FBQXJWLENBQUE7Y0FBQW9WLEdBQUEsR0FBQUMsU0FBQSxDQUFBbFYsQ0FBQTtjQUVwQixJQUFJLENBQUNtTixRQUFRLENBQUM7Z0JBQUVuQyxhQUFhLEVBQUU7a0JBQUUzQyxLQUFLLEVBQUU0TSxHQUFBLElBQVNBLEdBQUEsQ0FBTWpFLE9BQU8sR0FBR2lFLEdBQUEsQ0FBTWpFLE9BQU8sR0FBR3BPLE1BQU0sQ0FBQXFTLEdBQU07Z0JBQUU7Y0FBRSxDQUFDLENBQUM7WUFBQztjQUFBLE9BQUFDLFNBQUEsQ0FBQW5YLENBQUE7VUFBQTtRQUFBLEdBQUErVyxRQUFBO01BQUEsQ0FFdkc7TUFBQSxTQTVDS1UsaUJBQWlCQSxDQUFBO1FBQUEsT0FBQVgsa0JBQUEsQ0FBQXJULEtBQUEsT0FBQUQsU0FBQTtNQUFBO01BQUEsT0FBakJpVSxpQkFBaUI7SUFBQTtFQUFBO0lBQUFoVCxHQUFBO0lBQUFqRSxLQUFBO01BQUEsSUFBQWtYLG9CQUFBLEdBQUFuVSxpQkFBQSxjQUFBaEMsWUFBQSxHQUFBb0IsQ0FBQSxDQThDdkIsU0FBQWdWLFNBQUE7UUFBQSxJQUFBek0sT0FBQSxFQUFBOEwsTUFBQSxFQUFBWSxHQUFBO1FBQUEsT0FBQXJXLFlBQUEsR0FBQW1CLENBQUEsV0FBQW1WLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBL1YsQ0FBQSxHQUFBK1YsU0FBQSxDQUFBaFksQ0FBQTtZQUFBO2NBQ1FxTCxPQUFPLEdBQUdyRyxNQUFNLENBQUMsSUFBSSxDQUFDc0YsS0FBSyxDQUFDbUQsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDK0YsSUFBSSxDQUFDLENBQUM7Y0FBQSxJQUN4RG5JLE9BQU87Z0JBQUEyTSxTQUFBLENBQUFoWSxDQUFBO2dCQUFBO2NBQUE7Y0FDVixJQUFJLENBQUN1UCxRQUFRLENBQUM7Z0JBQUU3QixZQUFZLEVBQUU7a0JBQUVqRCxLQUFLLEVBQUU7Z0JBQXVCO2NBQUUsQ0FBQyxDQUFDO2NBQUMsT0FBQXVOLFNBQUEsQ0FBQTdYLENBQUE7WUFBQTtjQUdyRSxJQUFJLENBQUNvUCxRQUFRLENBQUM7Z0JBQUU1QixhQUFhLEVBQUUsSUFBSTtnQkFBRUQsWUFBWSxFQUFFO2NBQUssQ0FBQyxDQUFDO2NBQUNzSyxTQUFBLENBQUEvVixDQUFBO2NBQUErVixTQUFBLENBQUFoWSxDQUFBO2NBQUEsT0FFcENzSCxtQkFBbUIsQ0FBQyxJQUFJLENBQUNnRCxLQUFLLENBQUNGLFFBQVEsRUFBRWlCLE9BQU8sQ0FBQztZQUFBO2NBQWhFOEwsTUFBTSxHQUFBYSxTQUFBLENBQUE1VixDQUFBO2NBQ1osSUFBSSxDQUFDbU4sUUFBUSxDQUFDO2dCQUFFN0IsWUFBWSxFQUFFeUosTUFBTSxJQUFJO2tCQUFFMU0sS0FBSyxFQUFFO2dCQUE0QixDQUFDO2dCQUFFa0QsYUFBYSxFQUFFO2NBQU0sQ0FBQyxDQUFDO2NBQUNxSyxTQUFBLENBQUFoWSxDQUFBO2NBQUE7WUFBQTtjQUFBZ1ksU0FBQSxDQUFBL1YsQ0FBQTtjQUFBOFYsR0FBQSxHQUFBQyxTQUFBLENBQUE1VixDQUFBO2NBRXhHLElBQUksQ0FBQ21OLFFBQVEsQ0FBQztnQkFDWjdCLFlBQVksRUFBRTtrQkFBRWpELEtBQUssRUFBRXNOLEdBQUEsSUFBU0EsR0FBQSxDQUFNM0UsT0FBTyxHQUFHMkUsR0FBQSxDQUFNM0UsT0FBTyxHQUFHcE8sTUFBTSxDQUFBK1MsR0FBTTtnQkFBRSxDQUFDO2dCQUMvRXBLLGFBQWEsRUFBRTtjQUNqQixDQUFDLENBQUM7WUFBQztjQUFBLE9BQUFxSyxTQUFBLENBQUE3WCxDQUFBO1VBQUE7UUFBQSxHQUFBMlgsUUFBQTtNQUFBLENBRU47TUFBQSxTQWhCS0csbUJBQW1CQSxDQUFBO1FBQUEsT0FBQUosb0JBQUEsQ0FBQWpVLEtBQUEsT0FBQUQsU0FBQTtNQUFBO01BQUEsT0FBbkJzVSxtQkFBbUI7SUFBQTtFQUFBO0lBQUFyVCxHQUFBO0lBQUFqRSxLQUFBO01BQUEsSUFBQXVYLG9CQUFBLEdBQUF4VSxpQkFBQSxjQUFBaEMsWUFBQSxHQUFBb0IsQ0FBQSxDQWtCekIsU0FBQXFWLFNBQUE7UUFBQSxJQUFBOU0sT0FBQSxFQUFBbU0sVUFBQSxFQUFBTCxNQUFBLEVBQUFpQixHQUFBO1FBQUEsT0FBQTFXLFlBQUEsR0FBQW1CLENBQUEsV0FBQXdWLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBcFcsQ0FBQSxHQUFBb1csU0FBQSxDQUFBclksQ0FBQTtZQUFBO2NBQ1FxTCxPQUFPLEdBQUdyRyxNQUFNLENBQUMsSUFBSSxDQUFDc0YsS0FBSyxDQUFDZ0QsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDa0csSUFBSSxDQUFDLENBQUM7Y0FBQSxJQUN4RG5JLE9BQU87Z0JBQUFnTixTQUFBLENBQUFyWSxDQUFBO2dCQUFBO2NBQUE7Y0FDVixJQUFJLENBQUN1UCxRQUFRLENBQUM7Z0JBQUUvQixZQUFZLEVBQUU7a0JBQUUvQyxLQUFLLEVBQUU7Z0JBQXVCO2NBQUUsQ0FBQyxDQUFDO2NBQUMsT0FBQTROLFNBQUEsQ0FBQWxZLENBQUE7WUFBQTtjQUcvRHFYLFVBQVUsR0FBRzVGLElBQUksQ0FBQzBHLEdBQUcsQ0FBQyxDQUFDLEVBQUUxRyxJQUFJLENBQUMyRyxHQUFHLENBQUMsT0FBTyxFQUFFdFQsTUFBTSxDQUFDLElBQUksQ0FBQ3FGLEtBQUssQ0FBQ2lELGdCQUFnQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO2NBQ3hHLElBQUksQ0FBQ2dDLFFBQVEsQ0FBQztnQkFBRS9CLFlBQVksRUFBRTtjQUFLLENBQUMsQ0FBQztjQUFDNkssU0FBQSxDQUFBcFcsQ0FBQTtjQUFBb1csU0FBQSxDQUFBclksQ0FBQTtjQUFBLE9BRWYrSSxhQUFhLENBQUMsSUFBSSxDQUFDdUIsS0FBSyxDQUFDRixRQUFRLEVBQUU7Z0JBQUVpQixPQUFPLEVBQVBBLE9BQU87Z0JBQUVtTSxVQUFVLEVBQVZBO2NBQVcsQ0FBQyxDQUFDO1lBQUE7Y0FBMUVMLE1BQU0sR0FBQWtCLFNBQUEsQ0FBQWpXLENBQUE7Y0FDWixJQUFJLENBQUNtTixRQUFRLENBQUM7Z0JBQUUvQixZQUFZLEVBQUUySjtjQUFPLENBQUMsQ0FBQztjQUN2QyxJQUFJLENBQUNBLE1BQU0sQ0FBQzFNLEtBQUssSUFBSSxPQUFPNEQsTUFBTSxLQUFLLFdBQVcsRUFBRTtnQkFDbERBLE1BQU0sQ0FBQ3VJLGFBQWEsQ0FBQyxJQUFJQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztjQUM5RDtjQUNBLElBQUksQ0FBQ00sTUFBTSxDQUFDMU0sS0FBSyxJQUFJLElBQUksQ0FBQ0gsS0FBSyxDQUFDTyxNQUFNLElBQUksSUFBSSxDQUFDUCxLQUFLLENBQUNPLE1BQU0sQ0FBQ0MsUUFBUSxFQUFFO2dCQUNwRTlELGlCQUFpQixDQUFDLElBQUksQ0FBQ3NELEtBQUssQ0FBQ08sTUFBTSxDQUFDQyxRQUFRLENBQUM7Y0FDL0M7Y0FBQ3VOLFNBQUEsQ0FBQXJZLENBQUE7Y0FBQSxPQUNLLElBQUksQ0FBQ21QLE9BQU8sQ0FBQyxDQUFDO1lBQUE7Y0FBQWtKLFNBQUEsQ0FBQXJZLENBQUE7Y0FBQTtZQUFBO2NBQUFxWSxTQUFBLENBQUFwVyxDQUFBO2NBQUFtVyxHQUFBLEdBQUFDLFNBQUEsQ0FBQWpXLENBQUE7Y0FFcEIsSUFBSSxDQUFDbU4sUUFBUSxDQUFDO2dCQUFFL0IsWUFBWSxFQUFFO2tCQUFFL0MsS0FBSyxFQUFFMk4sR0FBQSxJQUFTQSxHQUFBLENBQU1oRixPQUFPLEdBQUdnRixHQUFBLENBQU1oRixPQUFPLEdBQUdwTyxNQUFNLENBQUFvVCxHQUFNO2dCQUFFO2NBQUUsQ0FBQyxDQUFDO1lBQUM7Y0FBQSxPQUFBQyxTQUFBLENBQUFsWSxDQUFBO1VBQUE7UUFBQSxHQUFBZ1ksUUFBQTtNQUFBLENBRXRHO01BQUEsU0FyQktLLG1CQUFtQkEsQ0FBQTtRQUFBLE9BQUFOLG9CQUFBLENBQUF0VSxLQUFBLE9BQUFELFNBQUE7TUFBQTtNQUFBLE9BQW5CNlUsbUJBQW1CO0lBQUE7RUFBQTtJQUFBNVQsR0FBQTtJQUFBakUsS0FBQTtNQUFBLElBQUE4WCw2QkFBQSxHQUFBL1UsaUJBQUEsY0FBQWhDLFlBQUEsR0FBQW9CLENBQUEsQ0F1QnpCLFNBQUE0VixTQUFBO1FBQUEsSUFBQWxCLFVBQUEsRUFBQUwsTUFBQSxFQUFBd0IsT0FBQSxFQUFBQyxHQUFBO1FBQUEsT0FBQWxYLFlBQUEsR0FBQW1CLENBQUEsV0FBQWdXLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBNVcsQ0FBQSxHQUFBNFcsU0FBQSxDQUFBN1ksQ0FBQTtZQUFBO2NBQ1F3WCxVQUFVLEdBQUd2UyxNQUFNLENBQUMsSUFBSSxDQUFDcUYsS0FBSyxDQUFDdUIsaUJBQWlCLElBQUksQ0FBQyxDQUFDO2NBQUEsTUFDeEQsQ0FBQzVHLE1BQU0sQ0FBQ3FOLFFBQVEsQ0FBQ2tGLFVBQVUsQ0FBQyxJQUFJQSxVQUFVLElBQUksQ0FBQztnQkFBQXFCLFNBQUEsQ0FBQTdZLENBQUE7Z0JBQUE7Y0FBQTtjQUNqRCxJQUFJLENBQUN1UCxRQUFRLENBQUM7Z0JBQUVsQyxlQUFlLEVBQUU7a0JBQUU1QyxLQUFLLEVBQUU7Z0JBQW1EO2NBQUUsQ0FBQyxDQUFDO2NBQUMsT0FBQW9PLFNBQUEsQ0FBQTFZLENBQUE7WUFBQTtjQUFBMFksU0FBQSxDQUFBNVcsQ0FBQTtjQUFBNFcsU0FBQSxDQUFBN1ksQ0FBQTtjQUFBLE9BSTdFa0gsc0JBQXNCLENBQUMsSUFBSSxDQUFDb0QsS0FBSyxDQUFDRixRQUFRLEVBQUUsSUFBSSxDQUFDRSxLQUFLLENBQUNPLE1BQU0sRUFBRTtnQkFDbEYyTSxVQUFVLEVBQVZBLFVBQVU7Z0JBQ1ZDLElBQUksRUFBRSxJQUFJLENBQUNuTixLQUFLLENBQUN3QjtjQUNuQixDQUFDLENBQUM7WUFBQTtjQUhJcUwsTUFBTSxHQUFBMEIsU0FBQSxDQUFBelcsQ0FBQTtjQUlOdVcsT0FBTyxHQUFHeEIsTUFBTSxDQUFDd0IsT0FBTyxJQUFJeEIsTUFBTSxDQUFDMkIsTUFBTSxJQUFJM0IsTUFBTSxDQUFDNEIsT0FBTyxJQUFJLEVBQUU7Y0FDdkUsSUFBSSxDQUFDeEosUUFBUSxDQUFDO2dCQUNabEMsZUFBZSxFQUFFOEosTUFBTTtnQkFDdkJwTCxZQUFZLEVBQUU0TSxPQUFPLElBQUksSUFBSSxDQUFDck8sS0FBSyxDQUFDeUI7Y0FDdEMsQ0FBQyxDQUFDO2NBQUM4TSxTQUFBLENBQUE3WSxDQUFBO2NBQUE7WUFBQTtjQUFBNlksU0FBQSxDQUFBNVcsQ0FBQTtjQUFBMlcsR0FBQSxHQUFBQyxTQUFBLENBQUF6VyxDQUFBO2NBRUgsSUFBSSxDQUFDbU4sUUFBUSxDQUFDO2dCQUFFbEMsZUFBZSxFQUFFO2tCQUFFNUMsS0FBSyxFQUFFbU8sR0FBQSxJQUFTQSxHQUFBLENBQU14RixPQUFPLEdBQUd3RixHQUFBLENBQU14RixPQUFPLEdBQUdwTyxNQUFNLENBQUE0VCxHQUFNO2dCQUFFO2NBQUUsQ0FBQyxDQUFDO1lBQUM7Y0FBQSxPQUFBQyxTQUFBLENBQUExWSxDQUFBO1VBQUE7UUFBQSxHQUFBdVksUUFBQTtNQUFBLENBRXpHO01BQUEsU0FuQktNLDRCQUE0QkEsQ0FBQTtRQUFBLE9BQUFQLDZCQUFBLENBQUE3VSxLQUFBLE9BQUFELFNBQUE7TUFBQTtNQUFBLE9BQTVCcVYsNEJBQTRCO0lBQUE7RUFBQTtJQUFBcFUsR0FBQTtJQUFBakUsS0FBQTtNQUFBLElBQUFzWSw2QkFBQSxHQUFBdlYsaUJBQUEsY0FBQWhDLFlBQUEsR0FBQW9CLENBQUEsQ0FxQmxDLFNBQUFvVyxTQUFBO1FBQUEsSUFBQVAsT0FBQSxFQUFBeEIsTUFBQSxFQUFBZ0MsR0FBQTtRQUFBLE9BQUF6WCxZQUFBLEdBQUFtQixDQUFBLFdBQUF1VyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQW5YLENBQUEsR0FBQW1YLFNBQUEsQ0FBQXBaLENBQUE7WUFBQTtjQUNRMlksT0FBTyxHQUFHM1QsTUFBTSxDQUFDLElBQUksQ0FBQ3NGLEtBQUssQ0FBQ3lCLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQ3lILElBQUksQ0FBQyxDQUFDO2NBQUEsSUFDdkRtRixPQUFPO2dCQUFBUyxTQUFBLENBQUFwWixDQUFBO2dCQUFBO2NBQUE7Y0FDVixJQUFJLENBQUN1UCxRQUFRLENBQUM7Z0JBQUVsQyxlQUFlLEVBQUU7a0JBQUU1QyxLQUFLLEVBQUU7Z0JBQXVDO2NBQUUsQ0FBQyxDQUFDO2NBQUMsT0FBQTJPLFNBQUEsQ0FBQWpaLENBQUE7WUFBQTtjQUFBaVosU0FBQSxDQUFBblgsQ0FBQTtjQUFBbVgsU0FBQSxDQUFBcFosQ0FBQTtjQUFBLE9BSWpFb0gsc0JBQXNCLENBQUMsSUFBSSxDQUFDa0QsS0FBSyxDQUFDRixRQUFRLEVBQUV1TyxPQUFPLENBQUM7WUFBQTtjQUFuRXhCLE1BQU0sR0FBQWlDLFNBQUEsQ0FBQWhYLENBQUE7Y0FDWixJQUFJLENBQUNtTixRQUFRLENBQUM7Z0JBQUVsQyxlQUFlLEVBQUU4SjtjQUFPLENBQUMsQ0FBQztjQUFDaUMsU0FBQSxDQUFBcFosQ0FBQTtjQUFBO1lBQUE7Y0FBQW9aLFNBQUEsQ0FBQW5YLENBQUE7Y0FBQWtYLEdBQUEsR0FBQUMsU0FBQSxDQUFBaFgsQ0FBQTtjQUUzQyxJQUFJLENBQUNtTixRQUFRLENBQUM7Z0JBQUVsQyxlQUFlLEVBQUU7a0JBQUU1QyxLQUFLLEVBQUUwTyxHQUFBLElBQVNBLEdBQUEsQ0FBTS9GLE9BQU8sR0FBRytGLEdBQUEsQ0FBTS9GLE9BQU8sR0FBR3BPLE1BQU0sQ0FBQW1VLEdBQU07Z0JBQUU7Y0FBRSxDQUFDLENBQUM7WUFBQztjQUFBLE9BQUFDLFNBQUEsQ0FBQWpaLENBQUE7VUFBQTtRQUFBLEdBQUErWSxRQUFBO01BQUEsQ0FFekc7TUFBQSxTQVpLRyw0QkFBNEJBLENBQUE7UUFBQSxPQUFBSiw2QkFBQSxDQUFBclYsS0FBQSxPQUFBRCxTQUFBO01BQUE7TUFBQSxPQUE1QjBWLDRCQUE0QjtJQUFBO0VBQUE7SUFBQXpVLEdBQUE7SUFBQWpFLEtBQUE7TUFBQSxJQUFBMlksMEJBQUEsR0FBQTVWLGlCQUFBLGNBQUFoQyxZQUFBLEdBQUFvQixDQUFBLENBY2xDLFNBQUF5VyxTQUFBO1FBQUEsSUFBQVosT0FBQSxFQUFBeEIsTUFBQSxFQUFBcUMsR0FBQTtRQUFBLE9BQUE5WCxZQUFBLEdBQUFtQixDQUFBLFdBQUE0VyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQXhYLENBQUEsR0FBQXdYLFNBQUEsQ0FBQXpaLENBQUE7WUFBQTtjQUNRMlksT0FBTyxHQUFHM1QsTUFBTSxDQUFDLElBQUksQ0FBQ3NGLEtBQUssQ0FBQ3lCLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQ3lILElBQUksQ0FBQyxDQUFDO2NBQUEsSUFDdkRtRixPQUFPO2dCQUFBYyxTQUFBLENBQUF6WixDQUFBO2dCQUFBO2NBQUE7Y0FDVixJQUFJLENBQUN1UCxRQUFRLENBQUM7Z0JBQUVsQyxlQUFlLEVBQUU7a0JBQUU1QyxLQUFLLEVBQUU7Z0JBQW9DO2NBQUUsQ0FBQyxDQUFDO2NBQUMsT0FBQWdQLFNBQUEsQ0FBQXRaLENBQUE7WUFBQTtjQUFBc1osU0FBQSxDQUFBeFgsQ0FBQTtjQUFBd1gsU0FBQSxDQUFBelosQ0FBQTtjQUFBLE9BSTlEMEksbUJBQW1CLENBQUMsSUFBSSxDQUFDNEIsS0FBSyxDQUFDRixRQUFRLEVBQUUsSUFBSSxDQUFDRSxLQUFLLENBQUNPLE1BQU0sRUFBRThOLE9BQU8sQ0FBQztZQUFBO2NBQW5GeEIsTUFBTSxHQUFBc0MsU0FBQSxDQUFBclgsQ0FBQTtjQUNaLElBQUksQ0FBQ21OLFFBQVEsQ0FBQztnQkFBRWxDLGVBQWUsRUFBRThKO2NBQU8sQ0FBQyxDQUFDO2NBQUNzQyxTQUFBLENBQUF6WixDQUFBO2NBQUEsT0FDckMsSUFBSSxDQUFDbVAsT0FBTyxDQUFDLENBQUM7WUFBQTtjQUFBc0ssU0FBQSxDQUFBelosQ0FBQTtjQUFBO1lBQUE7Y0FBQXlaLFNBQUEsQ0FBQXhYLENBQUE7Y0FBQXVYLEdBQUEsR0FBQUMsU0FBQSxDQUFBclgsQ0FBQTtjQUVwQixJQUFJLENBQUNtTixRQUFRLENBQUM7Z0JBQUVsQyxlQUFlLEVBQUU7a0JBQUU1QyxLQUFLLEVBQUUrTyxHQUFBLElBQVNBLEdBQUEsQ0FBTXBHLE9BQU8sR0FBR29HLEdBQUEsQ0FBTXBHLE9BQU8sR0FBR3BPLE1BQU0sQ0FBQXdVLEdBQU07Z0JBQUU7Y0FBRSxDQUFDLENBQUM7WUFBQztjQUFBLE9BQUFDLFNBQUEsQ0FBQXRaLENBQUE7VUFBQTtRQUFBLEdBQUFvWixRQUFBO01BQUEsQ0FFekc7TUFBQSxTQWJLRyx5QkFBeUJBLENBQUE7UUFBQSxPQUFBSiwwQkFBQSxDQUFBMVYsS0FBQSxPQUFBRCxTQUFBO01BQUE7TUFBQSxPQUF6QitWLHlCQUF5QjtJQUFBO0VBQUE7SUFBQTlVLEdBQUE7SUFBQWpFLEtBQUE7TUFBQSxJQUFBZ1osb0JBQUEsR0FBQWpXLGlCQUFBLGNBQUFoQyxZQUFBLEdBQUFvQixDQUFBLENBZS9CLFNBQUE4VyxTQUFBO1FBQUEsSUFBQUMsTUFBQSxFQUFBckMsVUFBQSxFQUFBTCxNQUFBLEVBQUEyQyxRQUFBLEVBQUFDLEdBQUE7UUFBQSxPQUFBclksWUFBQSxHQUFBbUIsQ0FBQSxXQUFBbVgsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUEvWCxDQUFBLEdBQUErWCxTQUFBLENBQUFoYSxDQUFBO1lBQUE7Y0FDUTZaLE1BQU0sR0FBRzdVLE1BQU0sQ0FBQyxJQUFJLENBQUNzRixLQUFLLENBQUN5QyxtQkFBbUIsSUFBSSxFQUFFLENBQUMsQ0FBQ3lHLElBQUksQ0FBQyxDQUFDO2NBQzVEZ0UsVUFBVSxHQUFHdlMsTUFBTSxDQUFDLElBQUksQ0FBQ3FGLEtBQUssQ0FBQzBDLHVCQUF1QixJQUFJLENBQUMsQ0FBQztjQUFBLElBQzdENk0sTUFBTTtnQkFBQUcsU0FBQSxDQUFBaGEsQ0FBQTtnQkFBQTtjQUFBO2NBQ1QsSUFBSSxDQUFDdVAsUUFBUSxDQUFDO2dCQUFFckMsbUJBQW1CLEVBQUU7a0JBQUV6QyxLQUFLLEVBQUU7Z0JBQW1DO2NBQUUsQ0FBQyxDQUFDO2NBQUMsT0FBQXVQLFNBQUEsQ0FBQTdaLENBQUE7WUFBQTtjQUFBLElBR25GMFosTUFBTSxDQUFDN0YsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFBQWdHLFNBQUEsQ0FBQWhhLENBQUE7Z0JBQUE7Y0FBQTtjQUN2QixJQUFJLENBQUN1UCxRQUFRLENBQUM7Z0JBQUVyQyxtQkFBbUIsRUFBRTtrQkFBRXpDLEtBQUssRUFBRTtnQkFBK0Q7Y0FBRSxDQUFDLENBQUM7Y0FBQyxPQUFBdVAsU0FBQSxDQUFBN1osQ0FBQTtZQUFBO2NBQUEsTUFHaEgsQ0FBQzhFLE1BQU0sQ0FBQ3FOLFFBQVEsQ0FBQ2tGLFVBQVUsQ0FBQyxJQUFJQSxVQUFVLEdBQUcsS0FBSztnQkFBQXdDLFNBQUEsQ0FBQWhhLENBQUE7Z0JBQUE7Y0FBQTtjQUNwRCxJQUFJLENBQUN1UCxRQUFRLENBQUM7Z0JBQUVyQyxtQkFBbUIsRUFBRTtrQkFBRXpDLEtBQUssRUFBRTtnQkFBc0M7Y0FBRSxDQUFDLENBQUM7Y0FBQyxPQUFBdVAsU0FBQSxDQUFBN1osQ0FBQTtZQUFBO2NBRzNGLElBQUksQ0FBQ29QLFFBQVEsQ0FBQztnQkFBRXBDLG9CQUFvQixFQUFFLElBQUk7Z0JBQUVELG1CQUFtQixFQUFFO2NBQUssQ0FBQyxDQUFDO2NBQUM4TSxTQUFBLENBQUEvWCxDQUFBO2NBQUErWCxTQUFBLENBQUFoYSxDQUFBO2NBQUEsT0FFbERpSCxzQkFBc0IsQ0FBQyxJQUFJLENBQUNxRCxLQUFLLENBQUNGLFFBQVEsRUFBRTtnQkFDL0R5UCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05yQyxVQUFVLEVBQVZBLFVBQVU7Z0JBQ1Z5QyxRQUFRLEVBQUUsSUFBSSxDQUFDM1AsS0FBSyxDQUFDMkMscUJBQXFCLEdBQUdoSSxNQUFNLENBQUMsSUFBSSxDQUFDcUYsS0FBSyxDQUFDMkMscUJBQXFCLENBQUMsR0FBR3NEO2NBQzFGLENBQUMsQ0FBQztZQUFBO2NBSkk0RyxNQUFNLEdBQUE2QyxTQUFBLENBQUE1WCxDQUFBO2NBS04wWCxRQUFRLEdBQUczQyxNQUFNLEtBQUtBLE1BQU0sQ0FBQzFNLEtBQUssSUFBSTBNLE1BQU0sQ0FBQ3pILE1BQU0sQ0FBQztjQUMxRCxJQUFJLENBQUNILFFBQVEsQ0FBQW5MLGFBQUE7Z0JBQ1g4SSxtQkFBbUIsRUFBRWlLLE1BQU07Z0JBQzNCaEssb0JBQW9CLEVBQUU7Y0FBSyxHQUN2QjJNLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRztnQkFBRS9NLG1CQUFtQixFQUFFLEVBQUU7Z0JBQUVFLHFCQUFxQixFQUFFO2NBQUcsQ0FBQyxDQUMzRSxDQUFDO2NBQUMsSUFDRTZNLFFBQVE7Z0JBQUFFLFNBQUEsQ0FBQWhhLENBQUE7Z0JBQUE7Y0FBQTtjQUFBZ2EsU0FBQSxDQUFBaGEsQ0FBQTtjQUFBLE9BQVEsSUFBSSxDQUFDbVAsT0FBTyxDQUFDLENBQUM7WUFBQTtjQUFBNkssU0FBQSxDQUFBaGEsQ0FBQTtjQUFBO1lBQUE7Y0FBQWdhLFNBQUEsQ0FBQS9YLENBQUE7Y0FBQThYLEdBQUEsR0FBQUMsU0FBQSxDQUFBNVgsQ0FBQTtjQUVuQyxJQUFJLENBQUNtTixRQUFRLENBQUM7Z0JBQ1pyQyxtQkFBbUIsRUFBRTtrQkFBRXpDLEtBQUssRUFBRXNQLEdBQUEsSUFBU0EsR0FBQSxDQUFNM0csT0FBTyxHQUFHMkcsR0FBQSxDQUFNM0csT0FBTyxHQUFHcE8sTUFBTSxDQUFBK1UsR0FBTTtnQkFBRSxDQUFDO2dCQUN0RjVNLG9CQUFvQixFQUFFO2NBQ3hCLENBQUMsQ0FBQztZQUFDO2NBQUEsT0FBQTZNLFNBQUEsQ0FBQTdaLENBQUE7VUFBQTtRQUFBLEdBQUF5WixRQUFBO01BQUEsQ0FFTjtNQUFBLFNBbkNLTSxtQkFBbUJBLENBQUE7UUFBQSxPQUFBUCxvQkFBQSxDQUFBL1YsS0FBQSxPQUFBRCxTQUFBO01BQUE7TUFBQSxPQUFuQnVXLG1CQUFtQjtJQUFBO0VBQUE7SUFBQXRWLEdBQUE7SUFBQWpFLEtBQUE7TUFBQSxJQUFBd1osb0JBQUEsR0FBQXpXLGlCQUFBLGNBQUFoQyxZQUFBLEdBQUFvQixDQUFBLENBcUN6QixTQUFBc1gsU0FBQTtRQUFBLElBQUFySCxRQUFBLEVBQUFvRSxNQUFBLEVBQUFrRCxNQUFBLEVBQUFDLEdBQUEsRUFBQXRhLENBQUEsRUFBQXVhLEdBQUEsRUFBQUMsR0FBQTtRQUFBLE9BQUE5WSxZQUFBLEdBQUFtQixDQUFBLFdBQUE0WCxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQXhZLENBQUEsR0FBQXdZLFNBQUEsQ0FBQXphLENBQUE7WUFBQTtjQUFBeWEsU0FBQSxDQUFBeFksQ0FBQTtjQUVJO2NBQ0E7Y0FDTThRLFFBQVEsR0FBQTNPLGFBQUEsQ0FBQUEsYUFBQSxLQUFRLElBQUksQ0FBQ2tHLEtBQUssQ0FBQ0YsUUFBUTtnQkFBRStJLFFBQVEsRUFBRSxJQUFJLENBQUNqSixLQUFLLENBQUNnSixVQUFVLElBQUksSUFBSSxDQUFDNUksS0FBSyxDQUFDRixRQUFRLENBQUMrSTtjQUFRO2NBQUFzSCxTQUFBLENBQUF6YSxDQUFBO2NBQUEsT0FDckY4SSxhQUFhLENBQUNpSyxRQUFRLEVBQUU7Z0JBQUUySCxLQUFLLEVBQUU7Y0FBRSxDQUFDLENBQUM7WUFBQTtjQUFwRHZELE1BQU0sR0FBQXNELFNBQUEsQ0FBQXJZLENBQUE7Y0FDWixJQUFJLENBQUNtTixRQUFRLENBQUM7Z0JBQUVuQyxhQUFhLEVBQUU7a0JBQUV1TixjQUFjLEVBQUV4RDtnQkFBTztjQUFFLENBQUMsQ0FBQztjQUM1RCxJQUFJLElBQUksQ0FBQzdNLEtBQUssQ0FBQ08sTUFBTSxJQUFJLElBQUksQ0FBQ1AsS0FBSyxDQUFDTyxNQUFNLENBQUNDLFFBQVEsRUFBRTtnQkFDbkQ5RCxpQkFBaUIsQ0FBQyxJQUFJLENBQUNzRCxLQUFLLENBQUNPLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDO2NBQy9DO2NBQ0EsSUFBSSxPQUFPdUQsTUFBTSxLQUFLLFdBQVcsRUFBRTtnQkFDakNBLE1BQU0sQ0FBQ3VJLGFBQWEsQ0FBQyxJQUFJQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztjQUM5RDtjQUNBLElBQUk7Z0JBQ0l3RCxNQUFNLEdBQUdsRCxNQUFNLElBQUl0VyxLQUFLLENBQUNDLE9BQU8sQ0FBQ3FXLE1BQU0sQ0FBQ3lELFdBQVcsQ0FBQyxHQUFHekQsTUFBTSxDQUFDeUQsV0FBVyxHQUFHLEVBQUU7Z0JBQzlFTixHQUFHLEdBQUdELE1BQU0sQ0FBQ3paLE1BQU0sR0FBR29FLE1BQU0sQ0FBQ3FWLE1BQU0sQ0FBQ0EsTUFBTSxDQUFDelosTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtnQkFDNURaLENBQUMsR0FBR21YLE1BQU0sSUFBSUEsTUFBTSxDQUFDdUQsS0FBSyxJQUFJLElBQUksR0FBR3pWLE1BQU0sQ0FBQ2tTLE1BQU0sQ0FBQ3VELEtBQUssQ0FBQyxHQUFHTCxNQUFNLENBQUN6WixNQUFNO2dCQUN6RTJaLEdBQUcsR0FBR0QsR0FBRyxNQUFBbEksTUFBQSxDQUNSbk4sTUFBTSxDQUFDcU4sUUFBUSxDQUFDdFMsQ0FBQyxDQUFDLElBQUlBLENBQUMsR0FBRyxDQUFDLE1BQUFvUyxNQUFBLENBQU1wUyxDQUFDLHFCQUFlLEVBQUUsVUFBQW9TLE1BQUEsQ0FBT2tJLEdBQUcsQ0FBQ2paLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGNBQzdFLDZDQUE2QztnQkFDakRrSSxrQkFBa0IsQ0FBQztrQkFDakJnSyxFQUFFLG1CQUFBbkIsTUFBQSxDQUFtQnlJLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsQ0FBRTtrQkFDakNDLElBQUksRUFBRSxlQUFlO2tCQUNyQkMsS0FBSyxFQUFFLHFCQUFxQjtrQkFDNUJDLFFBQVEsRUFBRVYsR0FBRztrQkFDYlcsSUFBSSxFQUFFWixHQUFHLCtCQUFBbEksTUFBQSxDQUErQndCLGtCQUFrQixDQUFDMEcsR0FBRyxDQUFDLElBQUssbUJBQW1CO2tCQUN2RmEsUUFBUSxFQUFFYixHQUFHLElBQUkvSjtnQkFDbkIsQ0FBQyxDQUFDO2NBQ0osQ0FBQyxDQUFDLE9BQU9qUixDQUFDLEVBQUUsQ0FBRTtjQUFjbWIsU0FBQSxDQUFBemEsQ0FBQTtjQUFBLE9BQ3RCLElBQUksQ0FBQ21QLE9BQU8sQ0FBQyxDQUFDO1lBQUE7Y0FBQXNMLFNBQUEsQ0FBQXphLENBQUE7Y0FBQTtZQUFBO2NBQUF5YSxTQUFBLENBQUF4WSxDQUFBO2NBQUF1WSxHQUFBLEdBQUFDLFNBQUEsQ0FBQXJZLENBQUE7Y0FFcEIsSUFBSSxDQUFDbU4sUUFBUSxDQUFDO2dCQUFFbkMsYUFBYSxFQUFFO2tCQUFFM0MsS0FBSyxFQUFFK1AsR0FBQSxJQUFTQSxHQUFBLENBQU1wSCxPQUFPLEdBQUdvSCxHQUFBLENBQU1wSCxPQUFPLEdBQUdwTyxNQUFNLENBQUF3VixHQUFNO2dCQUFFO2NBQUUsQ0FBQyxDQUFDO1lBQUM7Y0FBQSxPQUFBQyxTQUFBLENBQUF0YSxDQUFBO1VBQUE7UUFBQSxHQUFBaWEsUUFBQTtNQUFBLENBRXZHO01BQUEsU0FqQ0tnQixtQkFBbUJBLENBQUE7UUFBQSxPQUFBakIsb0JBQUEsQ0FBQXZXLEtBQUEsT0FBQUQsU0FBQTtNQUFBO01BQUEsT0FBbkJ5WCxtQkFBbUI7SUFBQTtFQUFBO0lBQUF4VyxHQUFBO0lBQUFqRSxLQUFBO01BQUEsSUFBQTBhLDJCQUFBLEdBQUEzWCxpQkFBQSxjQUFBaEMsWUFBQSxHQUFBb0IsQ0FBQSxDQW1DekIsU0FBQXdZLFVBQUE7UUFBQSxJQUFBdkUsYUFBQSxFQUFBd0UsTUFBQSxFQUFBQyxLQUFBLEVBQUFDLE9BQUEsRUFBQUMsR0FBQSxFQUFBaEssR0FBQSxFQUFBaUssR0FBQTtRQUFBLE9BQUFqYSxZQUFBLEdBQUFtQixDQUFBLFdBQUErWSxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQTNaLENBQUEsR0FBQTJaLFVBQUEsQ0FBQTViLENBQUE7WUFBQTtjQUFBLElBQ08sSUFBSSxDQUFDc0ssS0FBSyxDQUFDMEIsY0FBYztnQkFBQTRQLFVBQUEsQ0FBQTViLENBQUE7Z0JBQUE7Y0FBQTtjQUM1QixJQUFJLENBQUN1UCxRQUFRLENBQUM7Z0JBQUVqRCxhQUFhLEVBQUU7a0JBQUU3QixLQUFLLEVBQUU7Z0JBQXNFO2NBQUUsQ0FBQyxDQUFDO2NBQUMsT0FBQW1SLFVBQUEsQ0FBQXpiLENBQUE7WUFBQTtjQUFBeWIsVUFBQSxDQUFBM1osQ0FBQTtjQUs3RzhVLGFBQWEsR0FBR3pPLDJCQUEyQixDQUFDLElBQUksQ0FBQ21JLFdBQVcsQ0FBQyxDQUFDLENBQUM7Y0FDL0Q4SyxNQUFNLEdBQUcvUyxzQkFBc0IsQ0FBQyxDQUFDO2NBQ2pDZ1QsS0FBSyxHQUFHRCxNQUFNLENBQUNNLHdCQUF3QixLQUFLLEtBQUs7Y0FBQUQsVUFBQSxDQUFBNWIsQ0FBQTtjQUFBLE9BQ2pDbUgsb0JBQW9CLENBQUMsSUFBSSxDQUFDbUQsS0FBSyxDQUFDRixRQUFRLEVBQUUyTSxhQUFhLEVBQUEzUyxhQUFBLENBQUFBLGFBQUEsS0FDdkVvWCxLQUFLLEdBQ0w7Z0JBQUVNLGVBQWUsRUFBRTtjQUF3QixDQUFDLEdBQzVDO2dCQUFFelEsT0FBTyxFQUFFLElBQUksQ0FBQ2YsS0FBSyxDQUFDTyxNQUFNLENBQUNRO2NBQVEsQ0FBQztnQkFDMUNtTSxVQUFVLEVBQUV2UyxNQUFNLENBQUMsSUFBSSxDQUFDcUYsS0FBSyxDQUFDNEIsaUJBQWlCLElBQUksQ0FBQyxDQUFDO2dCQUNyRDZQLEtBQUssRUFBRSxJQUFJLENBQUN6UixLQUFLLENBQUM2QixZQUFZO2dCQUM5QnNMLElBQUksRUFBRSxJQUFJLENBQUNuTixLQUFLLENBQUM4QjtjQUFXLEVBQzdCLENBQUM7WUFBQTtjQVBJcVAsT0FBTyxHQUFBRyxVQUFBLENBQUF4WixDQUFBO2NBUWIsSUFBSSxDQUFDbU4sUUFBUSxDQUFDO2dCQUNabEQsZ0JBQWdCLEVBQUVvUCxPQUFPLENBQUNsSSxFQUFFLElBQUksRUFBRTtnQkFDbENqSCxhQUFhLEVBQUVtUCxPQUFPO2dCQUN0QnZQLGlCQUFpQixFQUFFLEVBQUU7Z0JBQ3JCQyxZQUFZLEVBQUUsRUFBRTtnQkFDaEJDLFdBQVcsRUFBRTtjQUNmLENBQUMsQ0FBQztjQUNGLElBQUk7Z0JBQ0lzUCxHQUFHLEdBQUcxVyxNQUFNLENBQUN5VyxPQUFPLENBQUNsSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDO2dCQUNyQzlCLEdBQUcsR0FBRytKLE9BQU8sQ0FBQ2pFLFVBQVUsSUFBSSxJQUFJLElBQUl2UyxNQUFNLENBQUN3VyxPQUFPLENBQUNqRSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQUFwRixNQUFBLENBQ2pFcUosT0FBTyxDQUFDakUsVUFBVSxhQUNyQixpQkFBaUI7Z0JBQ3JCLElBQUlrRSxHQUFHLEVBQUU7a0JBQ1BuUyxrQkFBa0IsQ0FBQztvQkFDakJnSyxFQUFFLHFCQUFBbkIsTUFBQSxDQUFxQnNKLEdBQUcsQ0FBRTtvQkFDNUJYLElBQUksRUFBRSxTQUFTO29CQUNmQyxLQUFLLEVBQUUsK0JBQStCO29CQUN0Q0MsUUFBUSxFQUFFdkosR0FBRztvQkFDYndKLElBQUksOEJBQUE5SSxNQUFBLENBQThCd0Isa0JBQWtCLENBQUM4SCxHQUFHLENBQUMsQ0FBRTtvQkFDM0RQLFFBQVEsRUFBRU0sT0FBTyxDQUFDTyxRQUFRLElBQUlQLE9BQU8sQ0FBQ1EsV0FBVyxJQUFJUDtrQkFDdkQsQ0FBQyxDQUFDO2dCQUNKO2NBQ0YsQ0FBQyxDQUFDLE9BQU9wYyxDQUFDLEVBQUUsQ0FBRTtjQUFjc2MsVUFBQSxDQUFBNWIsQ0FBQTtjQUFBLE9BQ3RCLElBQUksQ0FBQ21QLE9BQU8sQ0FBQyxDQUFDO1lBQUE7Y0FBQXlNLFVBQUEsQ0FBQTViLENBQUE7Y0FBQTtZQUFBO2NBQUE0YixVQUFBLENBQUEzWixDQUFBO2NBQUEwWixHQUFBLEdBQUFDLFVBQUEsQ0FBQXhaLENBQUE7Y0FFcEIsSUFBSSxDQUFDbU4sUUFBUSxDQUFDO2dCQUFFakQsYUFBYSxFQUFFO2tCQUFFN0IsS0FBSyxFQUFFa1IsR0FBQSxJQUFTQSxHQUFBLENBQU12SSxPQUFPLEdBQUd1SSxHQUFBLENBQU12SSxPQUFPLEdBQUdwTyxNQUFNLENBQUEyVyxHQUFNO2dCQUFFO2NBQUUsQ0FBQyxDQUFDO1lBQUM7Y0FBQSxPQUFBQyxVQUFBLENBQUF6YixDQUFBO1VBQUE7UUFBQSxHQUFBbWIsU0FBQTtNQUFBLENBRXZHO01BQUEsU0E3Q0tZLDBCQUEwQkEsQ0FBQTtRQUFBLE9BQUFiLDJCQUFBLENBQUF6WCxLQUFBLE9BQUFELFNBQUE7TUFBQTtNQUFBLE9BQTFCdVksMEJBQTBCO0lBQUE7RUFBQTtJQUFBdFgsR0FBQTtJQUFBakUsS0FBQTtNQUFBLElBQUF3Yiw0QkFBQSxHQUFBelksaUJBQUEsY0FBQWhDLFlBQUEsR0FBQW9CLENBQUEsQ0ErQ2hDLFNBQUFzWixVQUFBO1FBQUEsSUFBQUMsU0FBQSxFQUFBWixPQUFBLEVBQUFhLElBQUE7UUFBQSxPQUFBNWEsWUFBQSxHQUFBbUIsQ0FBQSxXQUFBMFosVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUF0YSxDQUFBLEdBQUFzYSxVQUFBLENBQUF2YyxDQUFBO1lBQUE7Y0FDUXFjLFNBQVMsR0FBR3JYLE1BQU0sQ0FBQyxJQUFJLENBQUNzRixLQUFLLENBQUMrQixnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQ21ILElBQUksQ0FBQyxDQUFDO2NBQUEsSUFDN0Q2SSxTQUFTO2dCQUFBRSxVQUFBLENBQUF2YyxDQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBdWMsVUFBQSxDQUFBcGMsQ0FBQTtZQUFBO2NBQUFvYyxVQUFBLENBQUF0YSxDQUFBO2NBQUFzYSxVQUFBLENBQUF2YyxDQUFBO2NBQUEsT0FFVWdJLG1CQUFtQixDQUFDLElBQUksQ0FBQ3NDLEtBQUssQ0FBQ0YsUUFBUSxFQUFFaVMsU0FBUyxDQUFDO1lBQUE7Y0FBbkVaLE9BQU8sR0FBQWMsVUFBQSxDQUFBbmEsQ0FBQTtjQUNiLElBQUksQ0FBQ21OLFFBQVEsQ0FBQztnQkFBRWpELGFBQWEsRUFBRW1QLE9BQU8sSUFBSSxJQUFJLENBQUNuUixLQUFLLENBQUNnQztjQUFjLENBQUMsQ0FBQztjQUFDaVEsVUFBQSxDQUFBdmMsQ0FBQTtjQUFBO1lBQUE7Y0FBQXVjLFVBQUEsQ0FBQXRhLENBQUE7Y0FBQXFhLElBQUEsR0FBQUMsVUFBQSxDQUFBbmEsQ0FBQTtjQUV0RSxJQUFJLENBQUNtTixRQUFRLENBQUM7Z0JBQUVqRCxhQUFhLEVBQUU7a0JBQUU3QixLQUFLLEVBQUU2UixJQUFBLElBQVNBLElBQUEsQ0FBTWxKLE9BQU8sR0FBR2tKLElBQUEsQ0FBTWxKLE9BQU8sR0FBR3BPLE1BQU0sQ0FBQXNYLElBQU07Z0JBQUU7Y0FBRSxDQUFDLENBQUM7WUFBQztjQUFBLE9BQUFDLFVBQUEsQ0FBQXBjLENBQUE7VUFBQTtRQUFBLEdBQUFpYyxTQUFBO01BQUEsQ0FFdkc7TUFBQSxTQVRLSSwyQkFBMkJBLENBQUE7UUFBQSxPQUFBTCw0QkFBQSxDQUFBdlksS0FBQSxPQUFBRCxTQUFBO01BQUE7TUFBQSxPQUEzQjZZLDJCQUEyQjtJQUFBLElBV2pDO0VBQUE7SUFBQTVYLEdBQUE7SUFBQWpFLEtBQUEsRUFDQSxTQUFBOGIscUJBQXFCQSxDQUFFdE0sT0FBTyxFQUFFO01BQzlCLElBQU1uUSxDQUFDLEdBQUdnRixNQUFNLENBQUNtTCxPQUFPLElBQUksRUFBRSxDQUFDLENBQUNPLFdBQVcsQ0FBQyxDQUFDO01BQzdDLElBQUkxUSxDQUFDLEtBQUssU0FBUyxFQUFFLE9BQU8sZ0NBQWdDO01BQzVELElBQUlBLENBQUMsS0FBSyxTQUFTLElBQUlBLENBQUMsS0FBSyxRQUFRLEVBQUUsT0FBTyxpQkFBaUI7TUFDL0QsSUFBSUEsQ0FBQyxLQUFLLFNBQVMsSUFBSUEsQ0FBQyxLQUFLLE1BQU0sRUFBRSxPQUFPLGdCQUFnQjtNQUM1RCxPQUFPLDZCQUE2QjtJQUN0QztFQUFDO0lBQUE0RSxHQUFBO0lBQUFqRSxLQUFBLEVBRUQsU0FBQStiLE1BQU1BLENBQUEsRUFBSTtNQUFBLElBQUFDLE1BQUE7TUFDUixJQUFNOVIsTUFBTSxHQUFHLElBQUksQ0FBQ1AsS0FBSyxDQUFDTyxNQUFNO01BQ2hDLElBQU0rUixXQUFXLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQ3RTLEtBQUssQ0FBQ0YsUUFBUSxDQUFDeVMsZUFBZSxJQUFJLElBQUksQ0FBQ3ZTLEtBQUssQ0FBQ0YsUUFBUSxDQUFDMFMsZUFBZSxJQUFJLElBQUksQ0FBQ3hTLEtBQUssQ0FBQ0YsUUFBUSxDQUFDMlMsZ0JBQWdCLENBQUM7TUFDMUksSUFBTUMsWUFBWSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMxUyxLQUFLLENBQUNvQyxhQUFhLElBQUksSUFBSSxDQUFDcEMsS0FBSyxDQUFDb0MsYUFBYSxDQUFDRixTQUFTLENBQUM7TUFDdkYsSUFBTXlRLGNBQWMsR0FBR2pZLE1BQU0sQ0FBRSxJQUFJLENBQUNzRixLQUFLLENBQUNvQyxhQUFhLElBQUksSUFBSSxDQUFDcEMsS0FBSyxDQUFDb0MsYUFBYSxDQUFDeUQsT0FBTyxJQUFLLEVBQUUsQ0FBQyxDQUFDTyxXQUFXLENBQUMsQ0FBQztNQUNqSCxJQUFNd00sU0FBUyxHQUFHRCxjQUFjLEtBQUssU0FBUztNQUM5QyxJQUFNRSxhQUFhLEdBQUcsQ0FBQyxDQUFDL1QsNEJBQTRCLENBQUMsSUFBSSxDQUFDYyxLQUFLLENBQUNnSixVQUFVLENBQUM7TUFDM0UsSUFBTWtLLGlCQUFpQixHQUFHSixZQUFZLElBQUlDLGNBQWMsS0FBSyxTQUFTO01BQ3RFLElBQU1JLG9CQUFvQixHQUFHRCxpQkFBaUIsSUFBSUQsYUFBYTtNQUMvRCxJQUFNRyxrQkFBa0IsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDaFQsS0FBSyxDQUFDc0MsZUFBZSxJQUFJLElBQUksQ0FBQ3RDLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ0osU0FBUyxDQUFDO01BQ2pHLElBQU0rUSxrQkFBa0IsR0FBRyxJQUFJLENBQUNkLHFCQUFxQixDQUFDUSxjQUFjLENBQUM7TUFFckUsSUFBTU8sRUFBRSxHQUFHLElBQUksQ0FBQ2xULEtBQUssQ0FBQ29DLGFBQWEsSUFBSSxJQUFJLENBQUNwQyxLQUFLLENBQUNvQyxhQUFhLENBQUMrUSxVQUFVO01BQzFFLElBQU1DLEVBQUUsR0FBRyxJQUFJLENBQUNwVCxLQUFLLENBQUNvQyxhQUFhLElBQUksSUFBSSxDQUFDcEMsS0FBSyxDQUFDb0MsYUFBYSxDQUFDaVIsV0FBVztNQUMzRSxJQUFNL1AsU0FBUyxHQUFHL00sS0FBSyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDd0osS0FBSyxDQUFDc0QsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDdEQsS0FBSyxDQUFDc0QsU0FBUyxHQUFHLEVBQUU7TUFDakYsSUFBTWdRLEVBQUUsR0FBRyxJQUFJLENBQUN0VCxLQUFLLENBQUN1RCxXQUFXLElBQUl4SyxPQUFBLENBQU8sSUFBSSxDQUFDaUgsS0FBSyxDQUFDdUQsV0FBVyxNQUFLLFFBQVEsR0FBRyxJQUFJLENBQUN2RCxLQUFLLENBQUN1RCxXQUFXLEdBQUcsQ0FBQyxDQUFDO01BQzdHLElBQU1nUSxFQUFFLEdBQUdELEVBQUUsQ0FBQ0UsV0FBVyxJQUFJemEsT0FBQSxDQUFPdWEsRUFBRSxDQUFDRSxXQUFXLE1BQUssUUFBUSxHQUFHRixFQUFFLENBQUNFLFdBQVcsR0FBRyxJQUFJO01BQ3ZGLElBQU1DLE9BQU8sR0FBR0gsRUFBRSxDQUFDSSxXQUFXLElBQUkzYSxPQUFBLENBQU91YSxFQUFFLENBQUNJLFdBQVcsTUFBSyxRQUFRLEdBQUdKLEVBQUUsQ0FBQ0ksV0FBVyxHQUFHLElBQUk7TUFDNUYsSUFBTUMsZ0JBQWdCLEdBQUdGLE9BQU8sSUFBSUEsT0FBTyxDQUFDQyxXQUFXLElBQUkzYSxPQUFBLENBQU8wYSxPQUFPLENBQUNDLFdBQVcsTUFBSyxRQUFRLEdBQzlGRCxPQUFPLENBQUNDLFdBQVcsR0FDbkIsSUFBSTtNQUNSLElBQU1FLGlCQUFpQixHQUFHRCxnQkFBZ0IsR0FDdEN6ZCxNQUFNLENBQUMyZCxPQUFPLENBQUNGLGdCQUFnQixDQUFDLEdBQy9CRixPQUFPLEdBQUd2ZCxNQUFNLENBQUMyZCxPQUFPLENBQUNKLE9BQU8sQ0FBQyxDQUFDN1osTUFBTSxDQUFDLFVBQUFrYSxJQUFBO1FBQUEsSUFBQUMsS0FBQSxHQUFBamYsY0FBQSxDQUFBZ2YsSUFBQTtVQUFFRSxDQUFDLEdBQUFELEtBQUE7UUFBQSxPQUFNQyxDQUFDLEtBQUssYUFBYTtNQUFBLEVBQUMsR0FBRyxFQUFHO01BRWpGLEtBQUssSUFBSSxDQUFDaFUsS0FBSyxDQUFDNEQsYUFBYTtNQUM3QixJQUFNMkgsS0FBSyxHQUFHcE0scUJBQXFCLENBQUMsQ0FBQztNQUNyQyxJQUFNOFUsV0FBVyxHQUFHLElBQUksQ0FBQ3JVLEtBQUssSUFBSSxJQUFJLENBQUNBLEtBQUssQ0FBQ3FVLFdBQVcsR0FBR3ZaLE1BQU0sQ0FBQyxJQUFJLENBQUNrRixLQUFLLENBQUNxVSxXQUFXLENBQUMsQ0FBQzdOLFdBQVcsQ0FBQyxDQUFDLEdBQUcsV0FBVztNQUNySCxJQUFNOE4sZUFBZSxHQUFHRCxXQUFXLEtBQUssV0FBVztNQUNuRCxJQUFNRSxZQUFZLEdBQUdGLFdBQVcsS0FBSyxRQUFRO01BQzdDLElBQU1HLGVBQWUsR0FBR0gsV0FBVyxLQUFLLFdBQVc7TUFDbkQsSUFBTUksY0FBYyxHQUFHSixXQUFXLEtBQUssVUFBVTtNQUNqRCxJQUFNSyxlQUFlLEdBQUcsSUFBSSxDQUFDdFUsS0FBSyxDQUFDbUMsdUJBQXVCLElBQUlwSixPQUFBLENBQU8sSUFBSSxDQUFDaUgsS0FBSyxDQUFDbUMsdUJBQXVCLE1BQUssUUFBUSxHQUNoSCxJQUFJLENBQUNuQyxLQUFLLENBQUNtQyx1QkFBdUIsR0FDbEM7UUFBRXFKLGdCQUFnQixFQUFFLENBQUM7UUFBRUMsa0JBQWtCLEVBQUU7TUFBRSxDQUFDO01BQ2xELElBQU04SSxjQUFjLEdBQUcsSUFBSSxDQUFDMU4sOEJBQThCLENBQUMsSUFBSSxDQUFDN0csS0FBSyxDQUFDd0MsZ0JBQWdCLElBQUksRUFBRSxDQUFDO01BQzdGLElBQU1nUyxhQUFhLEdBQUc3WixNQUFNLENBQUMsSUFBSSxDQUFDcUYsS0FBSyxDQUFDb0MsYUFBYSxJQUFJLElBQUksQ0FBQ3BDLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ3hCLFdBQVcsSUFBSSxJQUFJLEdBQ2pHLElBQUksQ0FBQ1osS0FBSyxDQUFDb0MsYUFBYSxDQUFDeEIsV0FBVyxHQUNwQzBHLElBQUksQ0FBQ2MsS0FBSyxDQUFDek4sTUFBTSxDQUFDLElBQUksQ0FBQ3FGLEtBQUssQ0FBQ29DLGFBQWEsSUFBSSxJQUFJLENBQUNwQyxLQUFLLENBQUNvQyxhQUFhLENBQUNpRSxPQUFPLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQ3JHLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ2lFLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRy9HLFlBQVksQ0FBQyxDQUFDO01BQ25KLElBQU1tVixnQkFBZ0IsR0FBRzlaLE1BQU0sQ0FBQzRGLE1BQU0sSUFBSUEsTUFBTSxDQUFDSyxXQUFXLElBQUksSUFBSSxHQUFHTCxNQUFNLENBQUNLLFdBQVcsR0FBRyxDQUFDLENBQUM7TUFDOUYsSUFBTThULGtCQUFrQixHQUFHL1osTUFBTSxDQUFDNFosY0FBYyxDQUFDeE4sU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHcE0sTUFBTSxDQUFDNFosY0FBYyxDQUFDdk4sV0FBVyxJQUFJLENBQUMsQ0FBQyxHQUFHck0sTUFBTSxDQUFDNFosY0FBYyxDQUFDdE4sUUFBUSxJQUFJLENBQUMsQ0FBQztNQUNqSjtNQUNBLElBQU0wTixtQkFBbUIsR0FDdkIsSUFBSSxDQUFDM1UsS0FBSyxDQUFDRSxVQUFVLElBQ3BCLElBQUksQ0FBQ0YsS0FBSyxDQUFDQyxPQUFPLElBQUksSUFBSSxDQUFDRCxLQUFLLENBQUNpQixNQUFNLENBQUMzSyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQzBKLEtBQUssQ0FBQ2tCLFlBQVksQ0FBQzVLLE1BQU0sS0FBSyxDQUFFO01BRWhHLG9CQUNFa0YsS0FBQSxDQUFBb1osYUFBQTtRQUFLQyxTQUFTLEVBQUM7TUFBUyxnQkFDdEJyWixLQUFBLENBQUFvWixhQUFBLENBQUNyWSxPQUFPLHFCQUNOZixLQUFBLENBQUFvWixhQUFBO1FBQVMsbUJBQWdCLHNCQUFzQjtRQUFDLG9CQUFpQjtNQUFzQixnQkFDdkZwWixLQUFBLENBQUFvWixhQUFBO1FBQ0VFLEtBQUssRUFBRTtVQUNMQyxRQUFRLEVBQUUsUUFBUTtVQUNsQkMsR0FBRyxFQUFFLFFBQVE7VUFDYkMsTUFBTSxFQUFFLEVBQUU7VUFDVkMsVUFBVSxFQUFFLE1BQU07VUFDbEJDLGFBQWEsRUFBRSxRQUFRO1VBQ3ZCQyxZQUFZLEVBQUUsUUFBUTtVQUN0QkMsU0FBUyxFQUFFO1FBQ2I7TUFBRSxnQkFFRjdaLEtBQUEsQ0FBQW9aLGFBQUE7UUFBS0UsS0FBSyxFQUFFO1VBQUVRLE9BQU8sRUFBRSxNQUFNO1VBQUVDLGFBQWEsRUFBRSxRQUFRO1VBQUVDLFVBQVUsRUFBRSxTQUFTO1VBQUVDLEdBQUcsRUFBRTtRQUFRO01BQUUsZ0JBQzVGamEsS0FBQSxDQUFBb1osYUFBQSxDQUFDNVksTUFBTTtRQUFDMFosRUFBRSxFQUFDLElBQUk7UUFBQ3pNLEVBQUUsRUFBQyxzQkFBc0I7UUFBQzZMLEtBQUssRUFBRTtVQUFFYSxNQUFNLEVBQUU7UUFBRTtNQUFFLGdCQUM3RG5hLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQyxTQUFTO1FBQUMyZSxLQUFLLEVBQUMsUUFBUTtRQUFDLGVBQVk7TUFBTSxDQUFFLENBQUMsZUFDekRwYSxLQUFBLENBQUFvWixhQUFBLENBQUM1WSxNQUFNLENBQUM2WixPQUFPLFFBQUMsU0FBdUIsQ0FDakMsQ0FBQyxlQUNUcmEsS0FBQSxDQUFBb1osYUFBQTtRQUFLM0wsRUFBRSxFQUFDLGdDQUFnQztRQUFDLGNBQVcsNkNBQTZDO1FBQUM2TCxLQUFLLEVBQUU7VUFBRVEsT0FBTyxFQUFFLE1BQU07VUFBRVEsUUFBUSxFQUFFLE1BQU07VUFBRUwsR0FBRyxFQUFFLFFBQVE7VUFBRUQsVUFBVSxFQUFFO1FBQVM7TUFBRSxnQkFDbExoYSxLQUFBLENBQUFvWixhQUFBLENBQUMvWSxNQUFNO1FBQUNrYSxLQUFLO1FBQUNDLElBQUk7UUFBQ0MsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7VUFBQSxPQUFRNUQsTUFBSSxDQUFDcE4sUUFBUSxDQUFDO1lBQUU1RSxZQUFZLEVBQUUsSUFBSTtZQUFFQyxhQUFhLEVBQUF4RyxhQUFBLEtBQU91WSxNQUFJLENBQUNyUyxLQUFLLENBQUNGLFFBQVE7VUFBRyxDQUFDLENBQUM7UUFBQSxDQUFDO1FBQUM0USxLQUFLLEVBQUMseUJBQXlCO1FBQUMsY0FBVztNQUF5QixnQkFDdExsVixLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUMsS0FBSztRQUFDLGVBQVk7TUFBTSxDQUFFLENBQy9CLENBQUMsZUFDVHVFLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFBQ3FhLE9BQU87UUFBQ2pXLE9BQU8sRUFBRSxJQUFJLENBQUNELEtBQUssQ0FBQ0UsVUFBVztRQUFDK1YsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7VUFBQSxPQUFRNUQsTUFBSSxDQUFDeE4sT0FBTyxDQUFDLENBQUM7UUFBQTtNQUFDLGdCQUM1RXJKLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQyxTQUFTO1FBQUMsZUFBWTtNQUFNLENBQUUsQ0FBQyxXQUVwQyxDQUFDLEVBQ1I4YixvQkFBb0IsaUJBQ25CdlgsS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUNMa2EsS0FBSztRQUNMRSxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVE1RCxNQUFJLENBQUN2QixtQkFBbUIsQ0FBQyxDQUFDO1FBQUEsQ0FBQztRQUMxQ0osS0FBSyxFQUFDO01BQXlMLGdCQUUvTGxWLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQyxNQUFNO1FBQUMsZUFBWTtNQUFNLENBQUUsQ0FBQyxrQkFFakMsQ0FDVCxFQUNBNmIsaUJBQWlCLGdCQUNoQnRYLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFDTDZaLEVBQUUsRUFBRS9aLElBQUs7UUFDVHNSLEVBQUUsRUFBQywwQkFBMEI7UUFDN0I4SSxLQUFLO1FBQ0xyRixLQUFLLEVBQUM7TUFBOEgsZ0JBRXBJbFYsS0FBQSxDQUFBb1osYUFBQSxDQUFDM1ksSUFBSTtRQUFDaEYsSUFBSSxFQUFDLE1BQU07UUFBQyxlQUFZO01BQU0sQ0FBRSxDQUFDLFVBRWpDLENBQUMsR0FDUCxJQUFJLEVBQ1BzVSxLQUFLLENBQUNjLGVBQWUsZ0JBQ3BCN1EsS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUFDNlosRUFBRSxFQUFFL1osSUFBSztRQUFDc1IsRUFBRSxFQUFDLFdBQVc7UUFBQzhJLEtBQUs7UUFBQ3JGLEtBQUssRUFBQztNQUE4QixnQkFDekVsVixLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUMscUJBQXFCO1FBQUMsZUFBWTtNQUFNLENBQUUsQ0FBQyxZQUVoRCxDQUFDLEdBQ1AsSUFBSSxFQUNQc1UsS0FBSyxDQUFDNEssZUFBZSxnQkFDcEIzYSxLQUFBLENBQUFvWixhQUFBLENBQUMvWSxNQUFNO1FBQUM2WixFQUFFLEVBQUUvWixJQUFLO1FBQUNzUixFQUFFLEVBQUMscURBQXFEO1FBQUM4SSxLQUFLO1FBQUNyRixLQUFLLEVBQUM7TUFBNEIsZ0JBQ2pIbFYsS0FBQSxDQUFBb1osYUFBQSxDQUFDM1ksSUFBSTtRQUFDaEYsSUFBSSxFQUFDLHdCQUF3QjtRQUFDLGVBQVk7TUFBTSxDQUFFLENBQUMsWUFFbkQsQ0FBQyxHQUNQLElBQUksRUFDUHNVLEtBQUssQ0FBQzZLLGdCQUFnQixnQkFDckI1YSxLQUFBLENBQUFvWixhQUFBLENBQUMvWSxNQUFNO1FBQUM2WixFQUFFLEVBQUUvWixJQUFLO1FBQUNzUixFQUFFLEVBQUMsNkJBQTZCO1FBQUM4SSxLQUFLO1FBQUNyRixLQUFLLEVBQUM7TUFBbUQsZ0JBQ2hIbFYsS0FBQSxDQUFBb1osYUFBQSxDQUFDM1ksSUFBSTtRQUFDaEYsSUFBSSxFQUFDLFNBQVM7UUFBQyxlQUFZO01BQU0sQ0FBRSxDQUFDLGFBRXBDLENBQUMsR0FDUCxJQUFJLEVBQ1BzVSxLQUFLLENBQUM4SyxnQkFBZ0IsZ0JBQ3JCN2EsS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUFDNlosRUFBRSxFQUFFL1osSUFBSztRQUFDc1IsRUFBRSxFQUFDLDhCQUE4QjtRQUFDOEksS0FBSztRQUFDckYsS0FBSyxFQUFDO01BQXlFLGdCQUN2SWxWLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQyxlQUFlO1FBQUMsZUFBWTtNQUFNLENBQUUsQ0FBQyxjQUUxQyxDQUFDLEdBQ1AsSUFBSSxFQUNQc1UsS0FBSyxDQUFDK0ssZ0JBQWdCLGdCQUNyQjlhLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFBQzZaLEVBQUUsRUFBRS9aLElBQUs7UUFBQ3NSLEVBQUUsRUFBQyxxQkFBcUI7UUFBQzhJLEtBQUs7UUFBQ3JGLEtBQUssRUFBQztNQUEwQixnQkFDL0VsVixLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUMsTUFBTTtRQUFDLGVBQVk7TUFBTSxDQUFFLENBQUMsYUFFakMsQ0FBQyxHQUNQLElBQUksRUFDUHNVLEtBQUssQ0FBQ3BDLGVBQWUsZ0JBQ3BCM04sS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUFDNlosRUFBRSxFQUFFL1osSUFBSztRQUFDc1IsRUFBRSxFQUFDLDBCQUEwQjtRQUFDOEksS0FBSztRQUFDckYsS0FBSyxFQUFDO01BQXlCLGdCQUNuRmxWLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQyxRQUFRO1FBQUMsZUFBWTtNQUFNLENBQUUsQ0FBQyxZQUVuQyxDQUFDLEdBQ1AsSUFDRCxDQUNGLENBQ0YsQ0FBQyxlQUNOdUUsS0FBQSxDQUFBb1osYUFBQTtRQUNFM0wsRUFBRSxFQUFDLHNCQUFzQjtRQUN6QjZMLEtBQUssRUFBRTtVQUFFeUIsU0FBUyxFQUFFLE9BQU87VUFBRVgsS0FBSyxFQUFFLE1BQU07VUFBRVIsWUFBWSxFQUFFLE9BQU87VUFBRW9CLFFBQVEsRUFBRSxPQUFPO1VBQUVDLFVBQVUsRUFBRTtRQUFLO01BQUUsZ0JBRXpHamIsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxxQkFBMkIsQ0FBQyw0RkFBbUYsRUFBQyxHQUFHLGVBQzNIcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDalosSUFBSTtRQUFDc1IsRUFBRSxFQUFDO01BQTBCLEdBQUMsNkJBQXFDLENBQUMsS0FDMUUsZUFBQXpSLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsYUFBbUIsQ0FBQyxvQkFBcUIsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxVQUFjLENBQUMsRUFBQyxHQUFHLEVBQUMsR0FDMUUsRUFBQ2hDLFNBQVMsR0FBRyxxQkFBcUIsR0FBRyxFQUFFLEVBQUMsd0RBQ3pDLEVBQUNBLFNBQVMsZ0JBQ1JwWCxLQUFBLENBQUFvWixhQUFBLENBQUFwWixLQUFBLENBQUFrYixRQUFBLFFBQ0csR0FBRyxlQUNKbGIsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxVQUFnQixDQUFDLEtBQUMsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsZ0JBQXNCLENBQUMscUZBQ2pELGVBQUFwWixLQUFBLENBQUFvWixhQUFBLENBQUNqWixJQUFJO1FBQUNzUixFQUFFLEVBQUM7TUFBMEIsR0FBQyxRQUFZLENBQUMsMEhBQ3pELENBQUMsR0FDRCxJQUNILENBQUMsZUFDSnpSLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BWLHlCQUF5QjtRQUN4QnFHLE9BQU8sRUFBRThNLGNBQWMsSUFBSSxTQUFVO1FBQ3JDZ0UsY0FBYyxFQUFFLElBQUksQ0FBQy9XLEtBQUssSUFBSSxJQUFJLENBQUNBLEtBQUssQ0FBQ2dKO01BQVcsQ0FDckQsQ0FBQyxlQUNGcE4sS0FBQSxDQUFBb1osYUFBQSxDQUFDblYsc0JBQXNCO1FBQUNtRyxRQUFRLEVBQUcsSUFBSSxDQUFDaEcsS0FBSyxJQUFJLElBQUksQ0FBQ0EsS0FBSyxDQUFDZ0csUUFBUSxJQUFLLENBQUM7TUFBRSxDQUFFLENBQ3JFLENBQ0YsQ0FBQyxlQUVWcEssS0FBQSxDQUFBb1osYUFBQSxDQUFDclksT0FBTztRQUNOdVksS0FBSyxFQUFFO1VBQ0x5QixTQUFTLEVBQUUsTUFBTTtVQUNqQkssT0FBTyxFQUFFLFlBQVk7VUFDckIxQixVQUFVLEVBQUUsK0RBQStEO1VBQzNFMkIsV0FBVyxFQUFFO1FBQ2Y7TUFBRSxnQkFFRnJiLEtBQUEsQ0FBQW9aLGFBQUE7UUFBUyxtQkFBZ0I7TUFBNkIsZ0JBQ3REcFosS0FBQSxDQUFBb1osYUFBQTtRQUFLRSxLQUFLLEVBQUU7VUFBRVEsT0FBTyxFQUFFLE1BQU07VUFBRVEsUUFBUSxFQUFFLE1BQU07VUFBRU4sVUFBVSxFQUFFLFFBQVE7VUFBRUMsR0FBRyxFQUFFLFNBQVM7VUFBRXFCLGNBQWMsRUFBRTtRQUFnQjtNQUFFLGdCQUN2SHRiLEtBQUEsQ0FBQW9aLGFBQUE7UUFBTTNMLEVBQUUsRUFBQyw2QkFBNkI7UUFBQzZMLEtBQUssRUFBRTtVQUFFaUMsVUFBVSxFQUFFLEdBQUc7VUFBRW5CLEtBQUssRUFBRSxTQUFTO1VBQUVvQixRQUFRLEVBQUU7UUFBUztNQUFFLEdBQUMsY0FBa0IsQ0FBQyxlQUM1SHhiLEtBQUEsQ0FBQW9aLGFBQUE7UUFBTUUsS0FBSyxFQUFFO1VBQUVjLEtBQUssRUFBRSxTQUFTO1VBQUVvQixRQUFRLEVBQUUsUUFBUTtVQUFFUixRQUFRLEVBQUUsT0FBTztVQUFFQyxVQUFVLEVBQUU7UUFBSTtNQUFFLEdBQUMsbUZBRXJGLENBQUMsZUFDUGpiLEtBQUEsQ0FBQW9aLGFBQUE7UUFBS0UsS0FBSyxFQUFFO1VBQUVRLE9BQU8sRUFBRSxNQUFNO1VBQUVRLFFBQVEsRUFBRSxNQUFNO1VBQUVMLEdBQUcsRUFBRTtRQUFVO01BQUUsZ0JBQ2hFamEsS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUFDNlosRUFBRSxFQUFFL1osSUFBSztRQUFDc1IsRUFBRSxFQUFDLFlBQVk7UUFBQ2dLLElBQUksRUFBQyxPQUFPO1FBQUNsQixLQUFLO1FBQUNDLElBQUk7UUFBQ2tCLGFBQWEsRUFBQztNQUFNLGdCQUM1RTFiLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQztNQUF3QixDQUFFLENBQUMsY0FDaEMsQ0FBQyxFQUNSc1UsS0FBSyxDQUFDNEwsS0FBSyxnQkFDVjNiLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFBQzZaLEVBQUUsRUFBRS9aLElBQUs7UUFBQ3NSLEVBQUUsRUFBQyxRQUFRO1FBQUNnSyxJQUFJLEVBQUMsT0FBTztRQUFDbEIsS0FBSztRQUFDQyxJQUFJO1FBQUNrQixhQUFhLEVBQUM7TUFBTSxnQkFDeEUxYixLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUM7TUFBTyxDQUFFLENBQUMsVUFDZixDQUFDLEdBQ1AsSUFDRCxDQUNGLENBQ0ksQ0FDRixDQUFDLGVBRVZ1RSxLQUFBLENBQUFvWixhQUFBLENBQUNyWSxPQUFPO1FBQUN1WSxLQUFLLEVBQUU7VUFBRXlCLFNBQVMsRUFBRSxNQUFNO1VBQUVNLFdBQVcsRUFBRSxTQUFTO1VBQUUzQixVQUFVLEVBQUU7UUFBVTtNQUFFLGdCQUNuRjFaLEtBQUEsQ0FBQW9aLGFBQUE7UUFBUyxtQkFBZ0I7TUFBbUMsZ0JBQzFEcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDNVksTUFBTTtRQUFDMFosRUFBRSxFQUFDLElBQUk7UUFBQ3pNLEVBQUUsRUFBQyxtQ0FBbUM7UUFBQzZMLEtBQUssRUFBRTtVQUFFTSxZQUFZLEVBQUU7UUFBUztNQUFFLEdBQUMsMkJBRWxGLENBQUMsZUFDVDVaLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVjLEtBQUssRUFBRSxTQUFTO1VBQUVSLFlBQVksRUFBRSxRQUFRO1VBQUVvQixRQUFRLEVBQUUsT0FBTztVQUFFQyxVQUFVLEVBQUU7UUFBSztNQUFFLEdBQUMsMk5BRTFGLENBQUMsZUFDSmpiLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUs7UUFBQzRhLE9BQU87UUFBQ0MsTUFBTTtRQUFDQyxXQUFXO1FBQUNMLElBQUksRUFBQyxPQUFPO1FBQUNuQyxLQUFLLEVBQUU7VUFBRU0sWUFBWSxFQUFFO1FBQVE7TUFBRSxnQkFDOUU1WixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUMrYSxJQUFJLHFCQUNUL2IsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDZ2IsR0FBRyxxQkFDUmhjLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUk7UUFBQ0MsS0FBSyxFQUFFO01BQUUsZ0JBQUNsYyxLQUFBLENBQUFvWixhQUFBLGlCQUFRLDhCQUFvQyxDQUFhLENBQUMsZUFDaEZwWixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQUU5WSxpQkFBaUIsQ0FBQzhWLGdCQUFnQixDQUFDLEVBQUMsT0FBaUIsQ0FBQyxlQUNuRWpaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUk7UUFBQzNDLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUU7UUFBTztNQUFFLEdBQUMsd0NBQWtELENBQy9FLENBQUMsZUFDWnBhLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2diLEdBQUcscUJBQ1JoYyxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLHFCQUFDamMsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSx1QkFBNkIsQ0FBYSxDQUFDLGVBQy9EcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxRQUFFOVksaUJBQWlCLENBQUM2VixhQUFhLENBQUMsRUFBQyxPQUFpQixDQUFDLGVBQ2hFaFosS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSTtRQUFDM0MsS0FBSyxFQUFFO1VBQUVjLEtBQUssRUFBRTtRQUFPO01BQUUsR0FBQyxtQkFBaUIsRUFBQ2hELFNBQVMsR0FBRyxpQkFBaUIsR0FBRyxFQUFFLEVBQUMsbUNBQTZDLENBQy9ILENBQUMsZUFDWnBYLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2diLEdBQUcscUJBQ1JoYyxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLHFCQUFDamMsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSwyQkFBaUMsQ0FBYSxDQUFDLGVBQ25FcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxRQUFFOVksaUJBQWlCLENBQUMrVixrQkFBa0IsQ0FBQyxFQUFDLE9BQWlCLENBQUMsZUFDckVsWixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJO1FBQUMzQyxLQUFLLEVBQUU7VUFBRWMsS0FBSyxFQUFFO1FBQU87TUFBRSxHQUFDLDBFQUUxQixDQUNILENBQUMsZUFDWnBhLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2diLEdBQUcscUJBQ1JoYyxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLHFCQUFDamMsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxrQkFBd0IsQ0FBYSxDQUFDLGVBQzFEcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxRQUFFOWMsTUFBTSxDQUFDMlosZUFBZSxDQUFDOUksZ0JBQWdCLElBQUksQ0FBQyxDQUFDLEVBQUMsU0FBbUIsQ0FBQyxlQUMvRWhRLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUk7UUFBQzNDLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUU7UUFBTztNQUFFLEdBQ2xDamIsTUFBTSxDQUFDMlosZUFBZSxDQUFDN0ksa0JBQWtCLElBQUksQ0FBQyxDQUFDLEVBQUMsdUJBQ3ZDLENBQ0gsQ0FDRCxDQUNQLENBQUMsZUFDUmpRLEtBQUEsQ0FBQW9aLGFBQUE7UUFBS0UsS0FBSyxFQUFFO1VBQUVRLE9BQU8sRUFBRSxNQUFNO1VBQUVHLEdBQUcsRUFBRSxPQUFPO1VBQUVLLFFBQVEsRUFBRTtRQUFPO01BQUUsZ0JBQzlEdGEsS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUFDNlosRUFBRSxFQUFFL1osSUFBSztRQUFDc1IsRUFBRSxFQUFDLHFCQUFxQjtRQUFDZ0ssSUFBSSxFQUFDLE9BQU87UUFBQ2xCLEtBQUs7UUFBQ0MsSUFBSTtRQUFDa0IsYUFBYSxFQUFDO01BQU0sZ0JBQ3JGMWIsS0FBQSxDQUFBb1osYUFBQSxDQUFDM1ksSUFBSTtRQUFDaEYsSUFBSSxFQUFDO01BQU0sQ0FBRSxDQUFDLDhCQUNkLENBQUMsZUFDVHVFLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFBQzZaLEVBQUUsRUFBRS9aLElBQUs7UUFBQ3NSLEVBQUUsRUFBQyxnQ0FBZ0M7UUFBQ2dLLElBQUksRUFBQyxPQUFPO1FBQUNsQixLQUFLO1FBQUNDLElBQUk7UUFBQ2tCLGFBQWEsRUFBQztNQUFNLGdCQUNoRzFiLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQztNQUFrQixDQUFFLENBQUMsNEJBQzFCLENBQUMsZUFDVHVFLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFBQzZaLEVBQUUsRUFBRS9aLElBQUs7UUFBQ3NSLEVBQUUsRUFBQywwQkFBMEI7UUFBQ2dLLElBQUksRUFBQyxPQUFPO1FBQUNsQixLQUFLO1FBQUNDLElBQUk7UUFBQ2tCLGFBQWEsRUFBQztNQUFNLGdCQUMxRjFiLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQztNQUFLLENBQUUsQ0FBQywyQkFDYixDQUNMLENBQ0UsQ0FDRixDQUFDLEVBRVQsQ0FBQ3FiLFdBQVcsaUJBQ1g5VyxLQUFBLENBQUFvWixhQUFBLENBQUN2WSxPQUFPO1FBQUNzYixPQUFPO01BQUEsZ0JBQ2RuYyxLQUFBLENBQUFvWixhQUFBLENBQUN2WSxPQUFPLENBQUNMLE1BQU0sUUFBQyw4QkFBNEMsQ0FBQyxlQUM3RFIsS0FBQSxDQUFBb1osYUFBQSxZQUFHLGdIQUFpSCxDQUM3RyxDQUNWLEVBRUF0QyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUN0UyxLQUFLLENBQUNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQ0QsS0FBSyxDQUFDRSxVQUFVLElBQUksQ0FBQ3dTLFlBQVksaUJBQzVFbFgsS0FBQSxDQUFBb1osYUFBQSxDQUFDdlksT0FBTztRQUFDdWIsSUFBSTtNQUFBLGdCQUNYcGMsS0FBQSxDQUFBb1osYUFBQSxDQUFDdlksT0FBTyxDQUFDTCxNQUFNLFFBQUMsaUNBQStDLENBQUMsZUFDaEVSLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVhLE1BQU0sRUFBRSxZQUFZO1VBQUVxQixRQUFRLEVBQUUsT0FBTztVQUFFUCxVQUFVLEVBQUU7UUFBSztNQUFFLEdBQUMsZ0ZBQ08sZUFBQWpiLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxVQUFjLENBQUMsRUFDbEdoQyxTQUFTLEdBQUcsK0JBQStCLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBQyxPQUNuRCxlQUFBcFgsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxpQkFBdUIsQ0FBQyx3RkFBb0YsRUFBQyxHQUFHLGVBQzdIcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDalosSUFBSTtRQUFDc1IsRUFBRSxFQUFDO01BQWlCLEdBQUMsT0FBVyxDQUFDLEtBQ3RDLENBQ0ksQ0FDVixFQUVBcUYsV0FBVyxJQUFJSSxZQUFZLGlCQUMxQmxYLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3ZZLE9BQU87UUFBQzRhLElBQUksRUFBQyxPQUFPO1FBQUNuQyxLQUFLLEVBQUU7VUFBRU0sWUFBWSxFQUFFO1FBQVM7TUFBRSxnQkFDdEQ1WixLQUFBLENBQUFvWixhQUFBLENBQUN2WSxPQUFPLENBQUNMLE1BQU0sUUFBQyw2QkFBMkMsQ0FBQyxlQUM1RFIsS0FBQSxDQUFBb1osYUFBQSxDQUFDelksSUFBSTtRQUFDMGIsUUFBUTtRQUFDL0MsS0FBSyxFQUFFO1VBQUVhLE1BQU0sRUFBRSxZQUFZO1VBQUVxQixRQUFRLEVBQUUsUUFBUTtVQUFFcEIsS0FBSyxFQUFFO1FBQU87TUFBRSxnQkFDaEZwYSxLQUFBLENBQUFvWixhQUFBLENBQUN6WSxJQUFJLENBQUMyYixJQUFJLFFBQUMsV0FDQSxlQUFBdGMsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxhQUFtQixDQUFDLG1EQUEwQyxFQUFDLEdBQUcsRUFDbEZoQyxTQUFTLEdBQUcsMEJBQTBCLEdBQUcsRUFBRSxFQUFDLGtCQUFnQixFQUFDQSxTQUFTLEdBQUcsRUFBRSxHQUFHLDhCQUE4QixFQUFDLEdBQ3JHLENBQUMsZUFDWnBYLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3pZLElBQUksQ0FBQzJiLElBQUkscUJBQ1J0YyxLQUFBLENBQUFvWixhQUFBLGlCQUFRLFVBQWdCLENBQUMsWUFBUSxlQUFBcFosS0FBQSxDQUFBb1osYUFBQSxlQUFNLHVCQUEyQixDQUFDLGdDQUE0QixlQUFBcFosS0FBQSxDQUFBb1osYUFBQSxlQUFNLG1CQUF1QixDQUFDLGtDQUE4QixlQUFBcFosS0FBQSxDQUFBb1osYUFBQSxpQkFBUSx5QkFBMEIsQ0FBQyx1REFBbUQsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxnQkFBb0IsQ0FBQyxpREFDblEsQ0FBQyxlQUNacFosS0FBQSxDQUFBb1osYUFBQSxDQUFDelksSUFBSSxDQUFDMmIsSUFBSSxxQkFDUnRjLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsWUFBa0IsQ0FBQyxzRkFDbEIsQ0FDUCxDQUNDLENBQ1YsRUFFQSxJQUFJLENBQUM1VSxLQUFLLENBQUNHLEtBQUssaUJBQ2YzRSxLQUFBLENBQUFvWixhQUFBLENBQUN2WSxPQUFPO1FBQUMwYixRQUFRO01BQUEsZ0JBQ2Z2YyxLQUFBLENBQUFvWixhQUFBLENBQUN2WSxPQUFPLENBQUNMLE1BQU0sUUFBQyw2QkFBMkMsQ0FBQyxlQUM1RFIsS0FBQSxDQUFBb1osYUFBQTtRQUFHRSxLQUFLLEVBQUU7VUFBRWEsTUFBTSxFQUFFO1FBQWE7TUFBRSxHQUFFLElBQUksQ0FBQzNWLEtBQUssQ0FBQ0csS0FBUyxDQUFDLGVBQzFEM0UsS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUNMbWMsSUFBSSxFQUFDLFFBQVE7UUFDYmYsSUFBSSxFQUFDLE9BQU87UUFDWm5DLEtBQUssRUFBRTtVQUFFeUIsU0FBUyxFQUFFO1FBQVMsQ0FBRTtRQUMvQnRXLE9BQU8sRUFBRSxJQUFJLENBQUNELEtBQUssQ0FBQ0UsVUFBVztRQUMvQitYLFFBQVEsRUFBRSxJQUFJLENBQUNqWSxLQUFLLENBQUNFLFVBQVc7UUFDaEMrVixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVE1RCxNQUFJLENBQUN4TixPQUFPLENBQUMsQ0FBQztRQUFBO01BQUMsZ0JBRTlCckosS0FBQSxDQUFBb1osYUFBQSxDQUFDM1ksSUFBSTtRQUFDaEYsSUFBSSxFQUFDO01BQVMsQ0FBRSxDQUFDLFNBRWpCLENBQ0QsQ0FDVixlQUVEdUUsS0FBQSxDQUFBb1osYUFBQSxDQUFDclksT0FBTztRQUFDMEQsT0FBTyxFQUFFLElBQUksQ0FBQ0QsS0FBSyxDQUFDQztNQUFRLGdCQUNuQ3pFLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzVZLE1BQU07UUFBQzBaLEVBQUUsRUFBQztNQUFJLEdBQUMsZ0JBQXNCLENBQUMsZUFDdkNsYSxLQUFBLENBQUFvWixhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUUsTUFBTTtVQUFFUixZQUFZLEVBQUU7UUFBUTtNQUFFLGdCQUFDNVosS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxvQkFBMEIsQ0FBQyxtREFBa0QsQ0FBQyxlQUMxSXBaLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVrQyxRQUFRLEVBQUUsUUFBUTtVQUFFcEIsS0FBSyxFQUFFLE1BQU07VUFBRUQsTUFBTSxFQUFFLFlBQVk7VUFBRWMsVUFBVSxFQUFFO1FBQUs7TUFBRSxnQkFDdEZqYixLQUFBLENBQUFvWixhQUFBLGlCQUFRLGtDQUF3QyxDQUFDLEVBQUMsR0FBRyxlQUNyRHBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ2paLElBQUk7UUFBQ3NSLEVBQUUsRUFBQztNQUFtQyxHQUFDLG1CQUF1QixDQUFDLEVBQ3BFLEtBQUssZUFDTnpSLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR2hFLElBQUksRUFBQyw2QkFBNkI7UUFBQ3NILE1BQU0sRUFBQyxRQUFRO1FBQUNDLEdBQUcsRUFBQztNQUFxQixHQUFDLFdBQVksQ0FBQyxFQUM1RixLQUFLLGVBQ04zYyxLQUFBLENBQUFvWixhQUFBO1FBQUdoRSxJQUFJLEVBQUMsZ0NBQWdDO1FBQUNzSCxNQUFNLEVBQUMsUUFBUTtRQUFDQyxHQUFHLEVBQUM7TUFBcUIsR0FBQyxjQUFlLENBQ2pHLENBQUMsZUFDSjNjLEtBQUEsQ0FBQW9aLGFBQUEsMkJBQUtwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLGdCQUFzQixDQUFDLEVBQUMsR0FBRyxFQUNyQyxJQUFJLENBQUM1VSxLQUFLLENBQUNDLE9BQU8sSUFBSSxJQUFJLENBQUNELEtBQUssQ0FBQ0UsVUFBVSxHQUN4QyxXQUFXLEdBQ1h3UyxZQUFZLE1BQUE1SyxNQUFBLENBQ1AsSUFBSSxDQUFDOUgsS0FBSyxDQUFDb0MsYUFBYSxJQUFJLElBQUksQ0FBQ3BDLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ0MsTUFBTSxHQUFHLElBQUksQ0FBQ3JDLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ0MsTUFBTSxHQUFHLFdBQVcsRUFBQXlGLE1BQUEsQ0FBRzZLLGNBQWMsUUFBQTdLLE1BQUEsQ0FBUTZLLGNBQWMsU0FBTSxFQUFFLGtCQUFBN0ssTUFBQSxDQUM5SSxJQUFJLENBQUM5SCxLQUFLLENBQUNvQyxhQUFhLElBQUksSUFBSSxDQUFDcEMsS0FBSyxDQUFDb0MsYUFBYSxDQUFDQyxNQUFNLGNBQUF5RixNQUFBLENBQVUsSUFBSSxDQUFDOUgsS0FBSyxDQUFDb0MsYUFBYSxDQUFDQyxNQUFNLElBQUssRUFBRSxDQUM3SCxDQUFDLGVBQ043RyxLQUFBLENBQUFvWixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUUsTUFBTTtVQUFFUixZQUFZLEVBQUUsT0FBTztVQUFFcUIsVUFBVSxFQUFFO1FBQUs7TUFBRSxHQUNwRS9ELFlBQVksSUFBSSxJQUFJLENBQUMxUyxLQUFLLENBQUNvQyxhQUFhLElBQUksSUFBSSxDQUFDcEMsS0FBSyxDQUFDb0MsYUFBYSxDQUFDMEcsT0FBTyxHQUN6RSxJQUFJLENBQUM5SSxLQUFLLENBQUNvQyxhQUFhLENBQUMwRyxPQUFPLEdBQ2hDLElBQUksRUFDUCxDQUFDNEosWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDMVMsS0FBSyxDQUFDQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUNELEtBQUssQ0FBQ0UsVUFBVSxnQkFDN0QxRSxLQUFBLENBQUFvWixhQUFBLGVBQU0sK0NBQ3lDLGVBQUFwWixLQUFBLENBQUFvWixhQUFBLGVBQU0sVUFBYyxDQUFDLHVGQUM5RCxDQUFDLEdBQ0wsSUFDRCxDQUFDLEVBQ0xsQyxZQUFZLElBQUksSUFBSSxDQUFDMVMsS0FBSyxDQUFDb0MsYUFBYSxJQUFJLElBQUksQ0FBQ3BDLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ2lFLE9BQU8sSUFBSSxJQUFJLGlCQUNuRjdLLEtBQUEsQ0FBQW9aLGFBQUEsMkJBQ0VwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLHFCQUEyQixDQUFDLEtBQUMsRUFBQ2phLE1BQU0sQ0FBQyxJQUFJLENBQUNxRixLQUFLLENBQUNvQyxhQUFhLENBQUNpRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUNnQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsTUFBSSxFQUFDLEdBQUcsRUFDdEd1SyxTQUFTLEdBQUcsaUNBQWlDLEdBQUcsMkJBQzlDLENBQ04sRUFDQUYsWUFBWSxJQUFJLElBQUksQ0FBQzFTLEtBQUssQ0FBQ29DLGFBQWEsSUFBSSxJQUFJLENBQUNwQyxLQUFLLENBQUNvQyxhQUFhLENBQUNnVyxNQUFNLGlCQUMxRTVjLEtBQUEsQ0FBQW9aLGFBQUEsMkJBQUtwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLHNCQUE0QixDQUFDLEtBQUMsRUFBQyxJQUFJLENBQUNoTyxTQUFTLENBQUMsSUFBSSxDQUFDNUcsS0FBSyxDQUFDb0MsYUFBYSxDQUFDZ1csTUFBTSxDQUFDeFgsV0FBVyxJQUFJLENBQUMsQ0FBQyxFQUFDLGNBQVksRUFBQyxJQUFJLENBQUNaLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ2dXLE1BQU0sQ0FBQ0MsS0FBSyxJQUFJLENBQUMsRUFBQyxHQUFNLENBQzVLLGVBQ0Q3YyxLQUFBLENBQUFvWixhQUFBLDJCQUFLcFosS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxZQUFrQixDQUFDLEtBQUMsRUFBQyxJQUFJLENBQUM1VSxLQUFLLENBQUNzQyxlQUFlLElBQUksSUFBSSxDQUFDdEMsS0FBSyxDQUFDc0MsZUFBZSxDQUFDRCxNQUFNLEtBQUssZ0JBQWdCLEdBQ2pIdVEsU0FBUyxHQUFHLG1CQUFtQixHQUFHLGdCQUFnQixHQUNsRCxJQUFJLENBQUM1UyxLQUFLLENBQUNzQyxlQUFlLElBQUksSUFBSSxDQUFDdEMsS0FBSyxDQUFDc0MsZUFBZSxDQUFDRCxNQUFNLEtBQUssTUFBTSxHQUN6RSxtQkFBbUIsR0FDbEIsSUFBSSxDQUFDckMsS0FBSyxDQUFDc0MsZUFBZSxJQUFJLElBQUksQ0FBQ3RDLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQ3JDLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ0QsTUFBTSxHQUFHLFNBQWdCLENBQUMsZUFDOUg3RyxLQUFBLENBQUFvWixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUU7UUFBTztNQUFFLEdBQUUsSUFBSSxDQUFDNVYsS0FBSyxDQUFDc0MsZUFBZSxJQUFJLElBQUksQ0FBQ3RDLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dHLE9BQU8sR0FBRyxJQUFJLENBQUM5SSxLQUFLLENBQUNzQyxlQUFlLENBQUN3RyxPQUFPLEdBQUcsRUFBUSxDQUN6SSxDQUFDLGVBRVZ0TixLQUFBLENBQUFvWixhQUFBLENBQUNyWSxPQUFPO1FBQUMwRCxPQUFPLEVBQUUsSUFBSSxDQUFDRCxLQUFLLENBQUNDO01BQVEsZ0JBQ25DekUsS0FBQSxDQUFBb1osYUFBQSxDQUFDNVksTUFBTTtRQUFDMFosRUFBRSxFQUFDO01BQUksR0FBQyxjQUFvQixDQUFDLGVBQ3JDbGEsS0FBQSxDQUFBb1osYUFBQTtRQUFHRSxLQUFLLEVBQUU7VUFBRWMsS0FBSyxFQUFFLE1BQU07VUFBRVIsWUFBWSxFQUFFO1FBQVM7TUFBRSxHQUFDLDhDQUVsRCxDQUFDLGVBRUo1WixLQUFBLENBQUFvWixhQUFBLENBQUM1WSxNQUFNO1FBQUMwWixFQUFFLEVBQUM7TUFBSSxHQUFDLFdBQWlCLENBQUMsZUFDbENsYSxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLO1FBQUM0YSxPQUFPO1FBQUNDLE1BQU07UUFBQ0MsV0FBVztRQUFDTCxJQUFJLEVBQUMsT0FBTztRQUFDbkMsS0FBSyxFQUFFO1VBQUVNLFlBQVksRUFBRTtRQUFNO01BQUUsZ0JBQzVFNVosS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDK2EsSUFBSSxxQkFDVC9iLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2diLEdBQUcscUJBQ1JoYyxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLHFCQUFDamMsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxjQUFvQixDQUFhLENBQUMsZUFDdERwWixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQUV2RSxFQUFFLElBQUlBLEVBQUUsQ0FBQ2pTLE1BQU0sSUFBSSxJQUFJLEdBQUdpUyxFQUFFLENBQUNqUyxNQUFNLEdBQUksSUFBSSxDQUFDakIsS0FBSyxDQUFDb0MsYUFBYSxDQUFDa1csTUFBTSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUN0WSxLQUFLLENBQUNvQyxhQUFhLENBQUNrVyxNQUFNLEdBQUcsR0FBaUIsQ0FBQyxlQUNsSjljLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUkscUJBQUNqYyxLQUFBLENBQUFvWixhQUFBLGlCQUFRLFNBQWUsQ0FBYSxDQUFDLGVBQ2pEcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxRQUFFdkUsRUFBRSxJQUFJQSxFQUFFLENBQUNxRixPQUFPLElBQUksSUFBSSxHQUFHckYsRUFBRSxDQUFDcUYsT0FBTyxHQUFHLEdBQWdCLENBQzVELENBQUMsZUFDWi9jLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2diLEdBQUcscUJBQ1JoYyxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLHFCQUFDamMsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxjQUFvQixDQUFhLENBQUMsZUFDdERwWixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQ1J2RSxFQUFFLElBQUlBLEVBQUUsQ0FBQ3NGLG9CQUFvQixJQUFJLElBQUksTUFBQTFRLE1BQUEsQ0FDL0IsQ0FBQ25OLE1BQU0sQ0FBQ3VZLEVBQUUsQ0FBQ3NGLG9CQUFvQixDQUFDLEdBQUcsR0FBRyxFQUFFblEsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUNyRCxHQUFHLEVBQ042SyxFQUFFLElBQUlBLEVBQUUsQ0FBQ3VGLG9CQUFvQixHQUFHLFFBQVEsR0FBRyxFQUNsQyxDQUFDLGVBQ2JqZCxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLHFCQUFDamMsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxZQUFrQixDQUFhLENBQUMsZUFDcERwWixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQUV2RSxFQUFFLEdBQUcsSUFBSSxDQUFDbkwsZ0JBQWdCLENBQUNtTCxFQUFFLENBQUN3RixVQUFVLENBQUMsR0FBRyxHQUFnQixDQUNoRSxDQUFDLGVBQ1psZCxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNnYixHQUFHLHFCQUNSaGMsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxxQkFBQ2pjLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsT0FBYSxDQUFhLENBQUMsZUFDL0NwWixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQUV2RSxFQUFFLElBQUlBLEVBQUUsQ0FBQ3lGLEtBQUssR0FBR2plLE1BQU0sQ0FBQ3dZLEVBQUUsQ0FBQ3lGLEtBQUssQ0FBQyxHQUFHLEdBQWdCLENBQUMsZUFDbEVuZCxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLHFCQUFDamMsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxhQUFtQixDQUFhLENBQUMsZUFDckRwWixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQ1J2RSxFQUFFLElBQUlBLEVBQUUsQ0FBQzBGLFVBQVUsR0FDaEIsSUFBSXJJLElBQUksQ0FBQzVWLE1BQU0sQ0FBQ3VZLEVBQUUsQ0FBQzBGLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDMVEsY0FBYyxDQUFDLENBQUMsR0FDdkQsR0FDTSxDQUNILENBQUMsRUFDVixJQUFJLENBQUNsSSxLQUFLLENBQUNvQyxhQUFhLENBQUN5VyxhQUFhLElBQUszRixFQUFFLElBQUlBLEVBQUUsQ0FBQzRGLE1BQU8sZ0JBQzNEdGQsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDZ2IsR0FBRyxxQkFDUmhjLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUkscUJBQUNqYyxLQUFBLENBQUFvWixhQUFBLGlCQUFRLE9BQWEsQ0FBYSxDQUFDLGVBQy9DcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSTtRQUFDc0IsT0FBTyxFQUFFLENBQUU7UUFBQ2pFLEtBQUssRUFBRTtVQUFFa0MsUUFBUSxFQUFFLFFBQVE7VUFBRVAsVUFBVSxFQUFFO1FBQUs7TUFBRSxHQUFDLFNBQ2hFLGVBQUFqYixLQUFBLENBQUFvWixhQUFBLGVBQU0sVUFBYyxDQUFDLG9DQUEyQixFQUFDLEdBQUcsZUFDM0RwWixLQUFBLENBQUFvWixhQUFBLGlCQUNHLElBQUksQ0FBQzVVLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQzRXLGtCQUFrQixJQUFJLElBQUksR0FDaEQsSUFBSSxDQUFDaFosS0FBSyxDQUFDb0MsYUFBYSxDQUFDNFcsa0JBQWtCLEdBQzFDOUYsRUFBRSxJQUFJQSxFQUFFLENBQUMrRixXQUFXLElBQUksSUFBSSxHQUFHL0YsRUFBRSxDQUFDK0YsV0FBVyxHQUFHLEdBQy9DLENBQUMsRUFBQyxHQUFHLEVBQUMsNEZBQzRFLGVBQUF6ZCxLQUFBLENBQUFvWixhQUFBLGFBQUksT0FBUyxDQUFDLG9DQUFnQyxlQUFBcFosS0FBQSxDQUFBb1osYUFBQSxlQUFNLGNBQWtCLENBQUMsK0ZBQ3ZKLENBQ0gsQ0FBQyxHQUNWLElBQ00sQ0FDUCxDQUFDLGVBRVJwWixLQUFBLENBQUFvWixhQUFBLENBQUM1WSxNQUFNO1FBQUMwWixFQUFFLEVBQUM7TUFBSSxHQUFDLFNBQWUsQ0FBQyxlQUNoQ2xhLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUs7UUFBQzRhLE9BQU87UUFBQ0MsTUFBTTtRQUFDQyxXQUFXO1FBQUNMLElBQUksRUFBQyxPQUFPO1FBQUNuQyxLQUFLLEVBQUU7VUFBRU0sWUFBWSxFQUFFO1FBQU07TUFBRSxnQkFDNUU1WixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUMrYSxJQUFJLHFCQUNUL2IsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDZ2IsR0FBRyxxQkFDUmhjLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUkscUJBQUNqYyxLQUFBLENBQUFvWixhQUFBLGlCQUFRLGNBQW9CLENBQWEsQ0FBQyxlQUN0RHBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUksUUFDUixJQUFJLENBQUN6WCxLQUFLLENBQUNvQyxhQUFhLENBQUM4VyxjQUFjLElBQUksSUFBSSxHQUM1QyxJQUFJLENBQUNsWixLQUFLLENBQUNvQyxhQUFhLENBQUM4VyxjQUFjLEdBQ3RDOUYsRUFBRSxJQUFJQSxFQUFFLENBQUM2RCxJQUFJLElBQUksSUFBSSxHQUFHN0QsRUFBRSxDQUFDNkQsSUFBSSxHQUFHLEdBQzdCLENBQUMsZUFDYnpiLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUkscUJBQUNqYyxLQUFBLENBQUFvWixhQUFBLGlCQUFRLGNBQW9CLENBQWEsQ0FBQyxlQUN0RHBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUksUUFBRXJFLEVBQUUsSUFBSUEsRUFBRSxDQUFDK0YsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUNoUixXQUFXLENBQUNpTCxFQUFFLENBQUMrRixLQUFLLENBQUMsR0FBRyxHQUFnQixDQUMxRSxDQUFDLGVBQ1ozZCxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNnYixHQUFHLHFCQUNSaGMsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxxQkFBQ2pjLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsdUJBQTZCLENBQWEsQ0FBQyxlQUMvRHBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUksUUFBRXJFLEVBQUUsSUFBSUEsRUFBRSxDQUFDZ0csS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUNqUixXQUFXLENBQUNpTCxFQUFFLENBQUNnRyxLQUFLLENBQUMsR0FBRyxHQUFnQixDQUFDLGVBQ3BGNWQsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxxQkFBQ2pjLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsbUJBQXlCLENBQWEsQ0FBQyxlQUMzRHBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUksUUFDUixJQUFJLENBQUN6WCxLQUFLLENBQUNvQyxhQUFhLENBQUNpWCxjQUFjLElBQUksSUFBSSxnQkFFNUM3ZCxLQUFBLENBQUFvWixhQUFBLENBQUFwWixLQUFBLENBQUFrYixRQUFBLFFBQ0csSUFBSSxDQUFDOVAsU0FBUyxDQUFDLElBQUksQ0FBQzVHLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ2lYLGNBQWMsQ0FBQyxFQUFDLE1BQ3pELEVBQUMsR0FBRyxlQUNKN2QsS0FBQSxDQUFBb1osYUFBQTtRQUFNRSxLQUFLLEVBQUU7VUFBRWMsS0FBSyxFQUFFO1FBQU87TUFBRSxHQUFDLEdBQUMsRUFBQ2pYLGlCQUFpQixDQUFDLElBQUksQ0FBQ3FCLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQ2lYLGNBQWMsQ0FBQyxFQUFDLFFBQVksQ0FDekcsQ0FBQyxHQUVILEdBQUcsRUFDTixJQUFJLENBQUNyWixLQUFLLENBQUNvQyxhQUFhLENBQUNrWCxvQkFBb0IsZ0JBQzFDOWQsS0FBQSxDQUFBb1osYUFBQTtRQUFNRSxLQUFLLEVBQUU7VUFBRWMsS0FBSyxFQUFFO1FBQU87TUFBRSxHQUFDLGdCQUFvQixDQUFDLEdBQ3JELElBQ00sQ0FDSCxDQUFDLGVBQ1pwYSxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNnYixHQUFHLHFCQUNSaGMsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxxQkFBQ2pjLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsZUFBcUIsQ0FBYSxDQUFDLGVBQ3ZEcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxRQUFFckUsRUFBRSxJQUFJQSxFQUFFLENBQUNtRyxhQUFhLElBQUksSUFBSSxNQUFBelIsTUFBQSxDQUFNc0wsRUFBRSxDQUFDbUcsYUFBYSxnQkFBYSxHQUFnQixDQUFDLGVBQy9GL2QsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxxQkFBQ2pjLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsaUJBQXVCLENBQWEsQ0FBQyxlQUN6RHBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUksUUFBRXJFLEVBQUUsSUFBSUEsRUFBRSxDQUFDb0csYUFBYSxJQUFJLElBQUksTUFBQTFSLE1BQUEsQ0FBTXNMLEVBQUUsQ0FBQ29HLGFBQWEsZ0JBQWEsR0FBZ0IsQ0FDckYsQ0FDRCxDQUNQLENBQUMsZUFFUmhlLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzVZLE1BQU07UUFBQzBaLEVBQUUsRUFBQztNQUFJLEdBQUMsU0FBZSxDQUFDLGVBQ2hDbGEsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSztRQUFDNGEsT0FBTztRQUFDQyxNQUFNO1FBQUNDLFdBQVc7UUFBQ0wsSUFBSSxFQUFDLE9BQU87UUFBQ25DLEtBQUssRUFBRTtVQUFFTSxZQUFZLEVBQUU7UUFBTTtNQUFFLGdCQUM1RTVaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQythLElBQUkscUJBQ1QvYixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNnYixHQUFHLHFCQUNSaGMsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxxQkFBQ2pjLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsYUFBbUIsQ0FBYSxDQUFDLGVBQ3JEcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxRQUNSbEUsRUFBRSxNQUFBekwsTUFBQSxDQUNJeUwsRUFBRSxDQUFDa0csV0FBVyxJQUFJLElBQUksR0FBR2xHLEVBQUUsQ0FBQ2tHLFdBQVcsR0FBRyxHQUFHLGNBQUEzUixNQUFBLENBQVd5TCxFQUFFLENBQUNtRyxjQUFjLElBQUksSUFBSSxHQUFHbkcsRUFBRSxDQUFDbUcsY0FBYyxHQUFHLENBQUMsWUFBQTVSLE1BQUEsQ0FBU3lMLEVBQUUsQ0FBQ29HLGVBQWUsSUFBSSxJQUFJLEdBQUdwRyxFQUFFLENBQUNvRyxlQUFlLEdBQUcsQ0FBQyxhQUN4SyxHQUNNLENBQUMsZUFDYm5lLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUkscUJBQUNqYyxLQUFBLENBQUFvWixhQUFBLGlCQUFRLFdBQWlCLENBQWEsQ0FBQyxlQUNuRHBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUksUUFBRWxFLEVBQUUsSUFBSUEsRUFBRSxDQUFDcUcsUUFBUSxJQUFJLElBQUksTUFBQTlSLE1BQUEsQ0FBTXlMLEVBQUUsQ0FBQ3FHLFFBQVEsZ0JBQWEsR0FBZ0IsQ0FDM0UsQ0FBQyxlQUNacGUsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDZ2IsR0FBRyxxQkFDUmhjLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUkscUJBQUNqYyxLQUFBLENBQUFvWixhQUFBLGlCQUFRLFlBQWtCLENBQWEsQ0FBQyxlQUNwRHBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUk7UUFBQ3NCLE9BQU8sRUFBQztNQUFHLEdBQUV4RixFQUFFLElBQUlBLEVBQUUsQ0FBQ3NHLFVBQVUsR0FBR25mLE1BQU0sQ0FBQzZZLEVBQUUsQ0FBQ3NHLFVBQVUsQ0FBQyxHQUFHLEdBQWdCLENBQzlFLENBQUMsZUFDWnJlLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2diLEdBQUcscUJBQ1JoYyxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLHFCQUFDamMsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxvQkFBMEIsQ0FBYSxDQUFDLGVBQzVEcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSTtRQUFDc0IsT0FBTyxFQUFDO01BQUcsR0FDcEJ4RixFQUFFLGVBQUF6TCxNQUFBLENBQ2F5TCxFQUFFLENBQUN1RyxlQUFlLElBQUksSUFBSSxHQUFHdkcsRUFBRSxDQUFDdUcsZUFBZSxHQUFHLEdBQUcsb0JBQUFoUyxNQUFBLENBQWN5TCxFQUFFLENBQUN3RyxPQUFPLElBQUksSUFBSSxHQUFHeEcsRUFBRSxDQUFDd0csT0FBTyxHQUFHLEdBQUcsSUFDcEgsR0FDTSxDQUNILENBQUMsRUFDWHhqQixLQUFLLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUN3SixLQUFLLENBQUNvQyxhQUFhLENBQUM0WCxpQkFBaUIsQ0FBQyxJQUFJLElBQUksQ0FBQ2hhLEtBQUssQ0FBQ29DLGFBQWEsQ0FBQzRYLGlCQUFpQixDQUFDMWpCLE1BQU0sR0FBRyxDQUFDLGlCQUNqSGtGLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2diLEdBQUcscUJBQ1JoYyxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLHFCQUFDamMsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxhQUFtQixDQUFhLENBQUMsZUFDckRwWixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJO1FBQUNzQixPQUFPLEVBQUM7TUFBRyxnQkFDckJ2ZCxLQUFBLENBQUFvWixhQUFBO1FBQU1FLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUU7UUFBTztNQUFFLEdBQUMsZUFBbUIsQ0FBQyxlQUNwRHBhLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxTQUFhLENBQUMsZUFDcEJwWixLQUFBLENBQUFvWixhQUFBO1FBQU1FLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUU7UUFBTztNQUFFLEdBQUMsc0JBQTBCLENBQUMsRUFDMUQsSUFBSSxDQUFDNVYsS0FBSyxDQUFDb0MsYUFBYSxDQUFDNFgsaUJBQWlCLENBQUNDLEdBQUcsQ0FBQyxVQUFDQyxDQUFDLEVBQUV2a0IsQ0FBQztRQUFBLG9CQUNuRDZGLEtBQUEsQ0FBQW9aLGFBQUE7VUFBTXRhLEdBQUcsRUFBRUksTUFBTSxDQUFDd2YsQ0FBQyxDQUFDLEdBQUd2a0I7UUFBRSxHQUN0QkEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxlQUNsQjZGLEtBQUEsQ0FBQW9aLGFBQUEsZUFBT3NGLENBQVEsQ0FDWCxDQUFDO01BQUEsQ0FDUixDQUNTLENBQ0gsQ0FFSCxDQUNQLENBQUMsZUFFUjFlLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzVZLE1BQU07UUFBQzBaLEVBQUUsRUFBQztNQUFJLEdBQUMsdUJBQTZCLENBQUMsRUFDN0M5QixpQkFBaUIsQ0FBQ3RkLE1BQU0sS0FBSyxDQUFDLGdCQUM3QmtGLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVjLEtBQUssRUFBRSxNQUFNO1VBQUVSLFlBQVksRUFBRTtRQUFNO01BQUUsR0FBQywrQkFBNkIsZUFBQTVaLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxtQkFBdUIsQ0FBQywyQkFBMEIsQ0FBQyxnQkFFeElwWixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLO1FBQUM0YSxPQUFPO1FBQUNDLE1BQU07UUFBQ0MsV0FBVztRQUFDTCxJQUFJLEVBQUMsT0FBTztRQUFDbkMsS0FBSyxFQUFFO1VBQUVNLFlBQVksRUFBRTtRQUFNO01BQUUsZ0JBQzVFNVosS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDUixNQUFNLHFCQUNYUixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNnYixHQUFHLHFCQUNSaGMsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDMmQsVUFBVSxRQUFDLFlBQTRCLENBQUMsZUFDL0MzZSxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUMyZCxVQUFVLFFBQUMsUUFBd0IsQ0FBQyxlQUMzQzNlLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQzJkLFVBQVUsUUFBQyxjQUE4QixDQUN2QyxDQUNDLENBQUMsZUFDZjNlLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQythLElBQUksUUFDUjNELGlCQUFpQixDQUFDcUcsR0FBRyxDQUFDLFVBQUFHLEtBQUEsRUFBa0I7UUFBQSxJQUFBQyxLQUFBLEdBQUF2bEIsY0FBQSxDQUFBc2xCLEtBQUE7VUFBaEJuakIsSUFBSSxHQUFBb2pCLEtBQUE7VUFBRXpDLElBQUksR0FBQXlDLEtBQUE7UUFDakMsSUFBTUMsR0FBRyxHQUFHMUMsSUFBSSxJQUFJN2UsT0FBQSxDQUFPNmUsSUFBSSxNQUFLLFFBQVEsR0FBR0EsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUN4RCxJQUFNMkMsTUFBTSxHQUFHRCxHQUFHLENBQUNDLE1BQU0sS0FBSyxJQUFJLEdBQUcsUUFBUSxHQUFJRCxHQUFHLENBQUNDLE1BQU0sS0FBSyxLQUFLLEdBQUcsVUFBVSxHQUFHLEdBQUk7UUFDekYsSUFBTUwsQ0FBQyxHQUFHSSxHQUFHLENBQUNoQyxNQUFNLElBQUksSUFBSSxHQUFHZ0MsR0FBRyxDQUFDaEMsTUFBTSxHQUFJZ0MsR0FBRyxDQUFDRSxxQkFBcUIsSUFBSSxJQUFJLEdBQUdGLEdBQUcsQ0FBQ0UscUJBQXFCLEdBQUcsR0FBSTtRQUNqSCxJQUFNQyxHQUFHLEdBQUdILEdBQUcsQ0FBQ0ksSUFBSSxJQUFJSixHQUFHLENBQUNJLElBQUksQ0FBQ0QsR0FBRyxJQUFJLElBQUksR0FBR0gsR0FBRyxDQUFDSSxJQUFJLENBQUNELEdBQUcsR0FBR0gsR0FBRyxDQUFDRyxHQUFHO1FBQ3JFLG9CQUNFamYsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDZ2IsR0FBRztVQUFDbGQsR0FBRyxFQUFFckQ7UUFBSyxnQkFDbkJ1RSxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLHFCQUFDamMsS0FBQSxDQUFBb1osYUFBQSxlQUFPM2QsSUFBVyxDQUFhLENBQUMsZUFDNUN1RSxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQUU4QyxNQUFNLEVBQUVELEdBQUcsQ0FBQ3RDLElBQUksWUFBQWxRLE1BQUEsQ0FBU3dTLEdBQUcsQ0FBQ3RDLElBQUksSUFBSyxFQUFlLENBQUMsZUFDbkV4YyxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQUV5QyxDQUFDLEVBQUVPLEdBQUcsSUFBSSxJQUFJLElBQUlBLEdBQUcsS0FBSyxFQUFFLGdCQUFBM1MsTUFBQSxDQUFhMlMsR0FBRyxJQUFLLEVBQWUsQ0FDcEUsQ0FBQztNQUVoQixDQUFDLENBQ1MsQ0FDUCxDQUNSLGVBRURqZixLQUFBLENBQUFvWixhQUFBLENBQUM1WSxNQUFNO1FBQUMwWixFQUFFLEVBQUM7TUFBSSxHQUFDLFNBQU8sRUFBQ3BTLFNBQVMsQ0FBQ2hOLE1BQU0sRUFBQyxHQUFTLENBQUMsRUFDbERnTixTQUFTLENBQUNoTixNQUFNLEtBQUssQ0FBQyxnQkFDckJrRixLQUFBLENBQUFvWixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFTSxZQUFZLEVBQUU7UUFBTTtNQUFFLGdCQUNsQzVaLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVjLEtBQUssRUFBRSxNQUFNO1VBQUVELE1BQU0sRUFBRTtRQUFZO01BQUUsR0FDOUNqRCxZQUFZLGdCQUVUbFgsS0FBQSxDQUFBb1osYUFBQSxDQUFBcFosS0FBQSxDQUFBa2IsUUFBQSxRQUNHbkQsRUFBRSxJQUFJNVksTUFBTSxDQUFDNFksRUFBRSxDQUFDa0csV0FBVyxDQUFDLEdBQUcsQ0FBQyxnQkFFN0JqZSxLQUFBLENBQUFvWixhQUFBLDRCQUNFcFosS0FBQSxDQUFBb1osYUFBQSxlQUFNLGdCQUFvQixDQUFDLGFBQVMsRUFBQ2phLE1BQU0sQ0FBQzRZLEVBQUUsQ0FBQ2tHLFdBQVcsQ0FBQyxFQUFDLHVEQUMzRCxlQUFBamUsS0FBQSxDQUFBb1osYUFBQSxlQUFNLDZCQUFpQyxDQUFDLCtDQUEyQyxlQUFBcFosS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxtQkFBeUIsQ0FBQyw2QkFDbEgsQ0FBQyxnQkFHUHBaLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSwwQkFDb0IsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxhQUFpQixDQUFDLEtBQ2hELEVBQUNoQyxTQUFTLGdCQUVOcFgsS0FBQSxDQUFBb1osYUFBQSxDQUFBcFosS0FBQSxDQUFBa2IsUUFBQSxRQUNHLEdBQUcsRUFBQywwQkFDbUIsZUFBQWxiLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxVQUFjLENBQUMsNERBQXdELGVBQUFwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLGFBQW1CLENBQUMsRUFBQyxHQUFHLGVBQ3JJcFosS0FBQSxDQUFBb1osYUFBQSxlQUFNLFNBQWEsQ0FBQyxzQkFBa0IsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSx5QkFBNkIsQ0FBQyxLQUMxRSxFQUFDLEdBQUcsRUFBQyxzR0FDK0YsRUFBQyxHQUFHLGVBQ3hHcFosS0FBQSxDQUFBb1osYUFBQTtRQUFHaEUsSUFBSSxFQUFDLGdEQUFnRDtRQUFDc0gsTUFBTSxFQUFDLFFBQVE7UUFBQ0MsR0FBRyxFQUFDO01BQXFCLEdBQUMsd0NBQXlDLENBQUMsRUFDNUksR0FBRyxFQUFDLHVDQUFxQyxlQUFBM2MsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxnQkFBc0IsQ0FBQyxxQkFDekUsQ0FBQyxHQUVILGdGQUNBLENBRVYsQ0FBQyxnQkFHSHBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQXBaLEtBQUEsQ0FBQWtiLFFBQUEsUUFBRSwrQ0FDNkMsZUFBQWxiLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSw2QkFBaUMsQ0FBQyx1Q0FDckYsQ0FFTCxDQUFDLGVBQ0pwWixLQUFBLENBQUFvWixhQUFBLENBQUMvWSxNQUFNO1FBQ0xtYyxJQUFJLEVBQUMsUUFBUTtRQUNiZixJQUFJLEVBQUMsT0FBTztRQUNabEIsS0FBSztRQUNMQyxJQUFJO1FBQ0prQixhQUFhLEVBQUMsTUFBTTtRQUNwQmpYLE9BQU8sRUFBRSxJQUFJLENBQUNELEtBQUssQ0FBQ0UsVUFBVztRQUMvQitYLFFBQVEsRUFBRSxJQUFJLENBQUNqWSxLQUFLLENBQUNFLFVBQVc7UUFDaEMrVixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVE1RCxNQUFJLENBQUN4TixPQUFPLENBQUMsQ0FBQztRQUFBO01BQUMsZ0JBRTlCckosS0FBQSxDQUFBb1osYUFBQSxDQUFDM1ksSUFBSTtRQUFDaEYsSUFBSSxFQUFDO01BQVMsQ0FBRSxDQUFDLEVBQ3RCeWIsWUFBWSxHQUFHLG1CQUFtQixHQUFHLE9BQ2hDLENBQ0wsQ0FBQyxnQkFFTmxYLEtBQUEsQ0FBQW9aLGFBQUE7UUFBS0UsS0FBSyxFQUFFO1VBQUU2RixTQUFTLEVBQUUsTUFBTTtVQUFFdkYsWUFBWSxFQUFFO1FBQU07TUFBRSxnQkFDckQ1WixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLO1FBQUM0YSxPQUFPO1FBQUNDLE1BQU07UUFBQ0MsV0FBVztRQUFDTCxJQUFJLEVBQUM7TUFBTyxnQkFDNUN6YixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNSLE1BQU0scUJBQ1hSLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2diLEdBQUcscUJBQ1JoYyxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUMyZCxVQUFVLFFBQUMsU0FBeUIsQ0FBQyxlQUM1QzNlLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQzJkLFVBQVUsUUFBQyxXQUEyQixDQUFDLGVBQzlDM2UsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDMmQsVUFBVSxRQUFDLFdBQTJCLENBQUMsZUFDOUMzZSxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUMyZCxVQUFVLFFBQUMsZ0JBQWdDLENBQUMsZUFDbkQzZSxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUMyZCxVQUFVLFFBQUMsWUFBNEIsQ0FBQyxlQUMvQzNlLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQzJkLFVBQVUsUUFBQyxRQUF3QixDQUNqQyxDQUNDLENBQUMsZUFDZjNlLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQythLElBQUksUUFDUmpVLFNBQVMsQ0FBQ3ZNLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUNrakIsR0FBRyxDQUFDLFVBQUN0aUIsQ0FBQyxFQUFFaEMsQ0FBQztRQUFBLG9CQUMvQjZGLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2diLEdBQUc7VUFBQ2xkLEdBQUcsS0FBQXdOLE1BQUEsQ0FBS25RLENBQUMsQ0FBQ3NSLEVBQUUsSUFBSSxJQUFJLEdBQUd0UixDQUFDLENBQUNzUixFQUFFLEdBQUd0VCxDQUFDLE9BQUFtUyxNQUFBLENBQUluUSxDQUFDLENBQUNpakIsSUFBSSxJQUFJamxCLENBQUM7UUFBRyxnQkFDMUQ2RixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLHFCQUFDamMsS0FBQSxDQUFBb1osYUFBQTtVQUFNRSxLQUFLLEVBQUU7WUFBRWtDLFFBQVEsRUFBRTtVQUFTO1FBQUUsR0FBRXJmLENBQUMsQ0FBQ2lqQixJQUFJLElBQUlqakIsQ0FBQyxDQUFDa2pCLFFBQVEsSUFBSSxHQUFVLENBQWEsQ0FBQyxlQUNsR3JmLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUksUUFBRTlmLENBQUMsQ0FBQ21qQixPQUFPLEdBQUcsU0FBUyxHQUFHLFVBQXVCLENBQUMsZUFDN0R0ZixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQUU5ZixDQUFDLENBQUNvakIsUUFBUSxJQUFJLElBQUksR0FBR3BnQixNQUFNLENBQUNoRCxDQUFDLENBQUNvakIsUUFBUSxDQUFDLENBQUMxUyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBZ0IsQ0FBQyxlQUNuRjdNLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUksUUFDUjlmLENBQUMsQ0FBQ3FqQixTQUFTLElBQUksSUFBSSxJQUFJcmpCLENBQUMsQ0FBQ3NqQixTQUFTLElBQUksSUFBSSxNQUFBblQsTUFBQSxDQUNwQ25RLENBQUMsQ0FBQ3FqQixTQUFTLElBQUksSUFBSSxHQUFHM0ksTUFBSSxDQUFDbEssV0FBVyxDQUFDeFEsQ0FBQyxDQUFDcWpCLFNBQVMsQ0FBQyxHQUFHLEdBQUcsU0FBQWxULE1BQUEsQ0FBTW5RLENBQUMsQ0FBQ3NqQixTQUFTLElBQUksSUFBSSxHQUFHNUksTUFBSSxDQUFDbEssV0FBVyxDQUFDeFEsQ0FBQyxDQUFDc2pCLFNBQVMsQ0FBQyxHQUFHLEdBQUcsSUFDM0gsR0FDTSxDQUFDLGVBQ2J6ZixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJO1VBQUMzQyxLQUFLLEVBQUU7WUFBRTBCLFFBQVEsRUFBRSxNQUFNO1lBQUUwRSxTQUFTLEVBQUUsWUFBWTtZQUFFbEUsUUFBUSxFQUFFO1VBQVM7UUFBRSxHQUNsRnJmLENBQUMsQ0FBQ3dqQixNQUFNLElBQUksR0FDSCxDQUFDLGVBQ2IzZixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQ1I5ZixDQUFDLENBQUN5akIsY0FBYyxJQUFJLElBQUksR0FDckJ6akIsQ0FBQyxDQUFDeWpCLGNBQWMsR0FDZnpqQixDQUFDLENBQUMwakIsYUFBYSxJQUFJLElBQUksR0FBRzFqQixDQUFDLENBQUMwakIsYUFBYSxHQUFJMWpCLENBQUMsQ0FBQzJqQixjQUFjLElBQUksSUFBSSxHQUFHM2pCLENBQUMsQ0FBQzJqQixjQUFjLEdBQUcsR0FDdEYsQ0FDSCxDQUFDO01BQUEsQ0FDYixDQUNTLENBQ1AsQ0FDSixDQUNOLGVBRUQ5ZixLQUFBLENBQUFvWixhQUFBLENBQUM1WSxNQUFNO1FBQUMwWixFQUFFLEVBQUM7TUFBSSxHQUFDLGdCQUEwQixDQUFDLGVBQzNDbGEsS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSTtRQUFDK1ksS0FBSyxFQUFFO1VBQUVNLFlBQVksRUFBRTtRQUFTO01BQUUsZ0JBQ3RDNVosS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxDQUFDd2YsS0FBSztRQUFDQyxNQUFNLEVBQUM7TUFBTyxnQkFDeEJoZ0IsS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxDQUFDMGYsS0FBSyxxQkFDVGpnQixLQUFBLENBQUFvWixhQUFBLGdCQUFPLDBCQUErQixDQUFDLGVBQ3ZDcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDMVksS0FBSztRQUNKd2YsV0FBVyxFQUFDLGtCQUFrQjtRQUM5QnJsQixLQUFLLEVBQUUsSUFBSSxDQUFDMkosS0FBSyxDQUFDMEQsVUFBVztRQUM3QmlZLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHM21CLENBQUM7VUFBQSxPQUFLcWQsTUFBSSxDQUFDcE4sUUFBUSxDQUFDO1lBQUV2QixVQUFVLEVBQUUxTyxDQUFDLENBQUNrakIsTUFBTSxDQUFDN2hCLEtBQUs7WUFBRXNOLGFBQWEsRUFBRTtVQUFLLENBQUMsQ0FBQztRQUFBO01BQUMsQ0FDckYsQ0FDUyxDQUFDLGVBQ2JuSSxLQUFBLENBQUFvWixhQUFBLENBQUM3WSxJQUFJLENBQUMwZixLQUFLO1FBQUMzRyxLQUFLLEVBQUU7VUFBRThHLFNBQVMsRUFBRTtRQUFXO01BQUUsZ0JBQzNDcGdCLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFDTG1jLElBQUksRUFBQyxRQUFRO1FBQ2I5QixPQUFPO1FBQ1ArQixRQUFRLEVBQUUsQ0FBQ3ZGLFlBQVksSUFBSSxDQUFDbkgsS0FBSyxDQUFDcEMsZUFBZ0I7UUFDbER1SCxLQUFLLEVBQUUsQ0FBQ25GLEtBQUssQ0FBQ3BDLGVBQWUsR0FBRyxrRkFBa0YsR0FBR2xELFNBQVU7UUFDL0hnUSxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVE1RCxNQUFJLENBQUNySixjQUFjLENBQUMsQ0FBQztRQUFBO01BQUMsZ0JBRXJDeE4sS0FBQSxDQUFBb1osYUFBQSxDQUFDM1ksSUFBSTtRQUFDaEYsSUFBSSxFQUFDO01BQVEsQ0FBRSxDQUFDLFFBRWhCLENBQ0UsQ0FDRixDQUFDLEVBQ1osSUFBSSxDQUFDK0ksS0FBSyxDQUFDMkQsYUFBYSxpQkFDdkJuSSxLQUFBLENBQUFvWixhQUFBLENBQUN2WSxPQUFPO1FBQUMwYixRQUFRO1FBQUNkLElBQUksRUFBQztNQUFPLEdBQUUsSUFBSSxDQUFDalgsS0FBSyxDQUFDMkQsYUFBdUIsQ0FFaEUsQ0FBQyxlQUVQbkksS0FBQSxDQUFBb1osYUFBQTtRQUFHRSxLQUFLLEVBQUU7VUFBRWMsS0FBSyxFQUFFLE1BQU07VUFBRVIsWUFBWSxFQUFFO1FBQVM7TUFBRSxnQkFDbEQ1WixLQUFBLENBQUFvWixhQUFBLGlCQUFRLDJCQUFpQyxDQUFDLFlBQUcsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxvQkFBd0IsQ0FBQyxvREFDM0UsQ0FBQyxlQUNKcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxxQkFDSFAsS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxDQUFDOGYsUUFBUTtRQUNaQyxJQUFJLEVBQUUsQ0FBRTtRQUNSSixXQUFXLEVBQUMsZ0NBQWdDO1FBQzVDcmxCLEtBQUssRUFBRSxJQUFJLENBQUMySixLQUFLLENBQUN3RCxRQUFTO1FBQzNCbVksUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUczbUIsQ0FBQztVQUFBLE9BQUtxZCxNQUFJLENBQUNwTixRQUFRLENBQUM7WUFBRXpCLFFBQVEsRUFBRXhPLENBQUMsQ0FBQ2tqQixNQUFNLENBQUM3aEIsS0FBSztZQUFFb04sV0FBVyxFQUFFO1VBQUssQ0FBQyxDQUFDO1FBQUEsQ0FBQztRQUNoRndVLFFBQVEsRUFBRSxDQUFDcEY7TUFBYyxDQUMxQixDQUFDLGVBQ0ZyWCxLQUFBLENBQUFvWixhQUFBLENBQUMvWSxNQUFNO1FBQ0xtYyxJQUFJLEVBQUMsUUFBUTtRQUNicEMsS0FBSyxFQUFDLFFBQVE7UUFDZGQsS0FBSyxFQUFFO1VBQUV5QixTQUFTLEVBQUU7UUFBUSxDQUFFO1FBQzlCMEIsUUFBUSxFQUFFLENBQUN2RixZQUFZLElBQUksQ0FBQ0csYUFBYSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM3UyxLQUFLLENBQUN3RCxRQUFRLElBQUksRUFBRSxFQUFFMEYsSUFBSSxDQUFDLENBQUU7UUFDakYrTSxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVE1RCxNQUFJLENBQUN0SixvQkFBb0IsQ0FBQyxDQUFDO1FBQUE7TUFBQyxnQkFFM0N2TixLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUM7TUFBTSxDQUFFLENBQUMsYUFFZCxDQUNKLENBQUMsRUFDTixJQUFJLENBQUMrSSxLQUFLLENBQUN5RCxXQUFXLGlCQUNyQmpJLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3ZZLE9BQU87UUFDTnlZLEtBQUssRUFBRTtVQUFFeUIsU0FBUyxFQUFFO1FBQVMsQ0FBRTtRQUMvQndCLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDL1gsS0FBSyxDQUFDeUQsV0FBVyxDQUFDdEQsS0FBTTtRQUN6QzRiLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQy9iLEtBQUssQ0FBQ3lELFdBQVcsQ0FBQ3REO01BQU0sZ0JBRXhDM0UsS0FBQSxDQUFBb1osYUFBQSxDQUFDdlksT0FBTyxDQUFDTCxNQUFNLFFBQUUsSUFBSSxDQUFDZ0UsS0FBSyxDQUFDeUQsV0FBVyxDQUFDdEQsS0FBSyxHQUFHLGtCQUFrQixHQUFHLG9CQUFxQyxDQUFDLEVBQzFHLElBQUksQ0FBQ0gsS0FBSyxDQUFDeUQsV0FBVyxDQUFDdEQsS0FBSyxnQkFDM0IzRSxLQUFBLENBQUFvWixhQUFBLFlBQUksSUFBSSxDQUFDNVUsS0FBSyxDQUFDeUQsV0FBVyxDQUFDdEQsS0FBUyxDQUFDLGdCQUVyQzNFLEtBQUEsQ0FBQW9aLGFBQUEsWUFBRyxNQUNHLEVBQUMsR0FBRyxFQUNQLElBQUksQ0FBQzVVLEtBQUssQ0FBQ3lELFdBQVcsQ0FBQzRKLElBQUksR0FFeEI5QixLQUFLLENBQUNwQyxlQUFlLGdCQUNuQjNOLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ2paLElBQUk7UUFBQ3NSLEVBQUUsb0NBQUFuRixNQUFBLENBQW9Dd0Isa0JBQWtCLENBQUM1TyxNQUFNLENBQUMsSUFBSSxDQUFDc0YsS0FBSyxDQUFDeUQsV0FBVyxDQUFDNEosSUFBSSxDQUFDLENBQUM7TUFBRyxnQkFDcEc3UixLQUFBLENBQUFvWixhQUFBLGVBQU8sSUFBSSxDQUFDNVUsS0FBSyxDQUFDeUQsV0FBVyxDQUFDNEosSUFBVyxDQUNyQyxDQUFDLGdCQUVQN1IsS0FBQSxDQUFBb1osYUFBQSxlQUFPLElBQUksQ0FBQzVVLEtBQUssQ0FBQ3lELFdBQVcsQ0FBQzRKLElBQVcsQ0FDMUMsR0FFRCxHQUNILENBRUUsQ0FFSixDQUFDLGVBRVY3UixLQUFBLENBQUFvWixhQUFBLENBQUNyWSxPQUFPO1FBQUMwRCxPQUFPLEVBQUUsSUFBSSxDQUFDRCxLQUFLLENBQUNDO01BQVEsZ0JBQ25DekUsS0FBQSxDQUFBb1osYUFBQSxDQUFDNVksTUFBTTtRQUFDMFosRUFBRSxFQUFDO01BQUksR0FBQyxRQUFjLENBQUMsZUFDL0JsYSxLQUFBLENBQUFvWixhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUUsTUFBTTtVQUFFUixZQUFZLEVBQUU7UUFBUTtNQUFFLGdCQUNqRDVaLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsU0FBZSxDQUFDLCtGQUEyRixlQUFBcFosS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxTQUFlLENBQUMsMkJBQWtCLEVBQUMsR0FBRyxFQUNoS2hDLFNBQVMsR0FBRyx5QkFBeUIsR0FBRyxvQkFBb0IsRUFBQywyQ0FBeUMsZUFBQXBYLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsWUFBa0IsQ0FBQyw4QkFBMEIsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ2paLElBQUk7UUFBQ3NSLEVBQUUsRUFBQztNQUFZLEdBQUMsWUFBZ0IsQ0FBQyw0Q0FDbk0sRUFBRTFCLEtBQUssQ0FBQ2MsZUFBZSxJQUFJZCxLQUFLLENBQUMrSyxnQkFBZ0IsZ0JBQy9DOWEsS0FBQSxDQUFBb1osYUFBQSxlQUNHLEdBQUcsRUFBQyxlQUFhLEVBQUMsR0FBRyxFQUNyQnJKLEtBQUssQ0FBQ2MsZUFBZSxnQkFDcEI3USxLQUFBLENBQUFvWixhQUFBLENBQUFwWixLQUFBLENBQUFrYixRQUFBLHFCQUFFbGIsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxzQkFBNEIsQ0FBQyw4QkFBMEIsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxLQUFTLENBQUMsZUFBVyxlQUFBcFosS0FBQSxDQUFBb1osYUFBQSxlQUFNLDRCQUFnQyxDQUFDLDBCQUF3QixDQUFDLEdBQzFKLElBQUksRUFDUHJKLEtBQUssQ0FBQ2MsZUFBZSxJQUFJZCxLQUFLLENBQUMrSyxnQkFBZ0IsR0FBRyxPQUFPLEdBQUcsSUFBSSxFQUNoRS9LLEtBQUssQ0FBQytLLGdCQUFnQixnQkFBRzlhLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQXBaLEtBQUEsQ0FBQWtiLFFBQUEscUJBQUVsYixLQUFBLENBQUFvWixhQUFBLGlCQUFRLGVBQXFCLENBQUMsaUJBQWUsQ0FBQyxHQUFHLElBQUksRUFDaEZySixLQUFLLENBQUNjLGVBQWUsSUFBSSxDQUFDZCxLQUFLLENBQUMrSyxnQkFBZ0IsR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUM3RC9LLEtBQUssQ0FBQytLLGdCQUFnQixHQUFHLEdBQUcsR0FBRyxJQUM1QixDQUFDLGdCQUVQOWEsS0FBQSxDQUFBb1osYUFBQSxlQUNHLEdBQUcsRUFBQyxVQUFRLGVBQUFwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLHlCQUEwQixDQUFDLFlBQVEsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsV0FBaUIsQ0FBQyxpR0FDOUUsQ0FDUCxFQUNBLENBQUNyVSxNQUFNLENBQUNJLGFBQWEsSUFBSUosTUFBTSxDQUFDQyxRQUFRLGlCQUN2Q2hGLEtBQUEsQ0FBQW9aLGFBQUE7UUFBTUUsS0FBSyxFQUFFO1VBQUVRLE9BQU8sRUFBRSxPQUFPO1VBQUVpQixTQUFTLEVBQUUsUUFBUTtVQUFFWCxLQUFLLEVBQUU7UUFBTztNQUFFLGdCQUNwRXBhLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQztNQUFLLENBQUUsQ0FBQyw2RkFDZixDQUVQLENBQUMsZUFDSnVFLEtBQUEsQ0FBQW9aLGFBQUEsMkJBQUtwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLGdCQUFzQixDQUFDLEtBQUMsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsZUFBT3JVLE1BQU0sQ0FBQ0MsUUFBUSxJQUFJLGVBQXNCLENBQU0sQ0FBQyxlQUM1RmhGLEtBQUEsQ0FBQW9aLGFBQUEsMkJBQUtwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLHVCQUE2QixDQUFDLEtBQUMsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsZUFBT3JVLE1BQU0sQ0FBQ0UsV0FBVyxJQUFJLGVBQXNCLENBQU0sQ0FBQyxlQUN0R2pGLEtBQUEsQ0FBQW9aLGFBQUEsMkJBQUtwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLGlCQUF1QixDQUFDLEtBQUMsRUFBQ3JVLE1BQU0sQ0FBQ0ksYUFBYSxHQUFHLHVCQUF1QixHQUFHLCtDQUFxRCxDQUFDLGVBQzlJbkYsS0FBQSxDQUFBb1osYUFBQTtRQUFLRSxLQUFLLEVBQUU7VUFBRXlCLFNBQVMsRUFBRTtRQUFTO01BQUUsZ0JBQUMvYSxLQUFBLENBQUFvWixhQUFBLGlCQUFRLHdCQUE4QixDQUFDLEtBQUMsRUFBQyxJQUFJLENBQUNoTyxTQUFTLENBQUNyRyxNQUFNLENBQUNLLFdBQVcsQ0FBQyxFQUFDLE1BQVMsQ0FBQyxlQUMzSHBGLEtBQUEsQ0FBQW9aLGFBQUEsMkJBQUtwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLFlBQWtCLENBQUMsS0FBQyxFQUFDLElBQUksQ0FBQ2hPLFNBQVMsQ0FBQ3JHLE1BQU0sQ0FBQ00sYUFBYSxDQUFDLEVBQUMsTUFBUyxDQUFDLGVBQ2pGckYsS0FBQSxDQUFBb1osYUFBQSwyQkFBS3BaLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsY0FBb0IsQ0FBQyxLQUFDLEVBQUMsSUFBSSxDQUFDaE8sU0FBUyxDQUFDckcsTUFBTSxDQUFDTyxlQUFlLENBQUMsRUFBQyxNQUFTLENBQUMsRUFDcEZQLE1BQU0sQ0FBQ0ssV0FBVyxLQUFLLENBQUMsSUFBSStSLGNBQWMsS0FBSyxTQUFTLGlCQUN2RG5YLEtBQUEsQ0FBQW9aLGFBQUE7UUFBS0UsS0FBSyxFQUFFO1VBQUV5QixTQUFTLEVBQUUsT0FBTztVQUFFWCxLQUFLLEVBQUUsTUFBTTtVQUFFb0IsUUFBUSxFQUFFO1FBQVE7TUFBRSxnQkFDbkV4YixLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUM7TUFBYSxDQUFFLENBQUMsOEJBQTBCLGVBQUF1RSxLQUFBLENBQUFvWixhQUFBLGlCQUFRLGdCQUFzQixDQUFDLDBHQUFpRyxlQUFBcFosS0FBQSxDQUFBb1osYUFBQSxpQkFBUSx3QkFBOEIsQ0FBQyxvREFDek4sQ0FDTixlQUNEcFosS0FBQSxDQUFBb1osYUFBQTtRQUFLRSxLQUFLLEVBQUU7VUFBRXlCLFNBQVMsRUFBRTtRQUFRO01BQUUsZ0JBQ2pDL2EsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxrQkFBd0IsQ0FBQyxFQUFDLEdBQUcsZUFDckNwWixLQUFBLENBQUFvWixhQUFBLGVBQU9yVSxNQUFNLENBQUNRLE9BQU8sSUFBSSxxQkFBNEIsQ0FBQyxFQUNyRFIsTUFBTSxDQUFDUSxPQUFPLGdCQUNidkYsS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUNMa2EsS0FBSztRQUNMa0IsSUFBSSxFQUFDLE1BQU07UUFDWG5DLEtBQUssRUFBRTtVQUFFa0gsVUFBVSxFQUFFO1FBQVEsQ0FBRTtRQUMvQi9GLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUTVELE1BQUksQ0FBQzdGLHdCQUF3QixDQUFDLENBQUM7UUFBQSxDQUFDO1FBQy9Da0UsS0FBSyxFQUFDO01BQXNDLGdCQUU1Q2xWLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQztNQUFNLENBQUUsQ0FBQyxRQUVkLENBQUMsR0FDUCxJQUNELENBQUMsZUFDTnVFLEtBQUEsQ0FBQW9aLGFBQUEsMkJBQUtwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLDJCQUFpQyxDQUFDLEtBQUMsRUFBQ3JVLE1BQU0sQ0FBQ1MsWUFBa0IsQ0FBQyxFQUMxRXVLLEtBQUssQ0FBQ2MsZUFBZSxnQkFDcEI3USxLQUFBLENBQUFvWixhQUFBLENBQUNwWixLQUFLLENBQUNrYixRQUFRLHFCQUNibGIsS0FBQSxDQUFBb1osYUFBQTtRQUFLRSxLQUFLLEVBQUU7VUFBRXlCLFNBQVMsRUFBRTtRQUFTO01BQUUsZ0JBQ2xDL2EsS0FBQSxDQUFBb1osYUFBQSxDQUFDOVksUUFBUTtRQUNQbWdCLE1BQU07UUFDTkMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUNsYyxLQUFLLENBQUMwQixjQUFlO1FBQ3JDaWEsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUczbUIsQ0FBQyxFQUFFbW5CLElBQUksRUFBSztVQUNyQixJQUFNcmtCLENBQUMsR0FBRyxDQUFDLEVBQUVxa0IsSUFBSSxJQUFJQSxJQUFJLENBQUNELE9BQU8sQ0FBQztVQUNsQy9kLHNCQUFzQixDQUFDO1lBQUV3RCxlQUFlLEVBQUU3SjtVQUFFLENBQUMsQ0FBQztVQUM5Q3VhLE1BQUksQ0FBQ3BOLFFBQVEsQ0FBQztZQUFFdkQsY0FBYyxFQUFFNUo7VUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBRTtRQUNGMlosS0FBSyxFQUFDLDJEQUEyRDtRQUNqRXdHLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQ2pZLEtBQUssQ0FBQ2lDLG1CQUFtQixJQUFJLElBQUksQ0FBQ2pDLEtBQUssQ0FBQ2lDLG1CQUFtQixDQUFDQyxTQUFTO01BQUUsQ0FDekYsQ0FDRSxDQUFDLGVBQ04xRyxLQUFBLENBQUFvWixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFeUIsU0FBUyxFQUFFLFFBQVE7VUFBRVgsS0FBSyxFQUFFO1FBQU87TUFBRSxHQUFDLDBCQUMxQixFQUFDLEdBQUcsZUFDNUJwYSxLQUFBLENBQUFvWixhQUFBLGlCQUFTLElBQUksQ0FBQzVVLEtBQUssQ0FBQ2lDLG1CQUFtQixJQUFJLElBQUksQ0FBQ2pDLEtBQUssQ0FBQ2lDLG1CQUFtQixDQUFDQyxTQUFTLEdBQUcsV0FBVyxHQUFHLGFBQXNCLENBQ3ZILENBQ1MsQ0FBQyxHQUNmLElBQ0csQ0FBQyxlQUVWMUcsS0FBQSxDQUFBb1osYUFBQSxDQUFDclksT0FBTyxxQkFDTmYsS0FBQSxDQUFBb1osYUFBQSxDQUFDNVksTUFBTTtRQUFDMFosRUFBRSxFQUFDO01BQUksR0FBQyx5QkFBK0IsQ0FBQyxlQUNoRGxhLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVjLEtBQUssRUFBRSxNQUFNO1VBQUVSLFlBQVksRUFBRTtRQUFRO01BQUUsZ0JBQ2pENVosS0FBQSxDQUFBb1osYUFBQSxDQUFDM1ksSUFBSTtRQUFDaEYsSUFBSSxFQUFDO01BQVEsQ0FBRSxDQUFDLDZDQUF5QyxlQUFBdUUsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSwyQkFBaUMsQ0FBQyxpQkFBUSxlQUFBcFosS0FBQSxDQUFBb1osYUFBQSxlQUFNLGNBQWtCLENBQUMsMERBQXNELGVBQUFwWixLQUFBLENBQUFvWixhQUFBLGVBQU0sU0FBYSxDQUFDLEtBQ25OLENBQUMsZUFDSnBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzdZLElBQUkscUJBQ0hQLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzdZLElBQUksQ0FBQzBmLEtBQUsscUJBQ1RqZ0IsS0FBQSxDQUFBb1osYUFBQSxnQkFBTyxXQUFTLEVBQUNqQyxjQUFjLElBQUksS0FBSyxFQUFDLEdBQVEsQ0FBQyxlQUNsRG5YLEtBQUEsQ0FBQW9aLGFBQUE7UUFBS0UsS0FBSyxFQUFFO1VBQUVRLE9BQU8sRUFBRSxNQUFNO1VBQUVHLEdBQUcsRUFBRSxPQUFPO1VBQUVLLFFBQVEsRUFBRSxNQUFNO1VBQUVOLFVBQVUsRUFBRTtRQUFTO01BQUUsZ0JBQ3BGaGEsS0FBQSxDQUFBb1osYUFBQSxDQUFDMVksS0FBSztRQUNKd2YsV0FBVyxFQUFFekksa0JBQW1CO1FBQ2hDNWMsS0FBSyxFQUFFLElBQUksQ0FBQzJKLEtBQUssQ0FBQ21ELGFBQWM7UUFDaEN3WSxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRzNtQixDQUFDO1VBQUEsT0FBS3FkLE1BQUksQ0FBQ3BOLFFBQVEsQ0FBQztZQUFFOUIsYUFBYSxFQUFFbk8sQ0FBQyxDQUFDa2pCLE1BQU0sQ0FBQzdoQjtVQUFNLENBQUMsQ0FBQztRQUFBLENBQUM7UUFDbEV5ZSxLQUFLLEVBQUU7VUFBRXNILElBQUksRUFBRSxVQUFVO1VBQUVDLFFBQVEsRUFBRTtRQUFPO01BQUUsQ0FDL0MsQ0FBQyxFQUNEOWIsTUFBTSxDQUFDUSxPQUFPLGlCQUNidkYsS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUNMbWMsSUFBSSxFQUFDLFFBQVE7UUFDYmpDLEtBQUs7UUFDTEUsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7VUFBQSxPQUFRNUQsTUFBSSxDQUFDcE4sUUFBUSxDQUFDO1lBQUU5QixhQUFhLEVBQUU1QyxNQUFNLENBQUNRO1VBQVEsQ0FBQyxDQUFDO1FBQUEsQ0FBQztRQUNoRTJQLEtBQUssRUFBQztNQUFrQyxHQUN6QyxnQkFFTyxDQUNULGVBQ0RsVixLQUFBLENBQUFvWixhQUFBLENBQUMvWSxNQUFNO1FBQ0xxYSxPQUFPO1FBQ1BqVyxPQUFPLEVBQUUsSUFBSSxDQUFDRCxLQUFLLENBQUNxRCxhQUFjO1FBQ2xDNFMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7VUFBQSxPQUFRNUQsTUFBSSxDQUFDMUUsbUJBQW1CLENBQUMsQ0FBQztRQUFBLENBQUM7UUFDMUNzSyxRQUFRLEVBQUUsQ0FBQ3ZGLFlBQVksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDMVMsS0FBSyxDQUFDbUQsYUFBYSxJQUFJLEVBQUUsRUFBRStGLElBQUksQ0FBQztNQUFFLGdCQUVwRTFOLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQztNQUFRLENBQUUsQ0FBQyxXQUVoQixDQUNMLENBQ0ssQ0FDUixDQUFDLEVBQ04sSUFBSSxDQUFDK0ksS0FBSyxDQUFDb0QsWUFBWSxpQkFDdEI1SCxLQUFBLENBQUFvWixhQUFBLENBQUN2WSxPQUFPO1FBQ055WSxLQUFLLEVBQUU7VUFBRXlCLFNBQVMsRUFBRTtRQUFNLENBQUU7UUFDNUJ3QixRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQy9YLEtBQUssQ0FBQ29ELFlBQVksQ0FBQ2pELEtBQU07UUFDMUM0YixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMvYixLQUFLLENBQUNvRCxZQUFZLENBQUNqRDtNQUFNLGdCQUV6QzNFLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3ZZLE9BQU8sQ0FBQ0wsTUFBTSxRQUNaLElBQUksQ0FBQ2dFLEtBQUssQ0FBQ29ELFlBQVksQ0FBQ2pELEtBQUssR0FBRyxlQUFlLEdBQUcscUNBQ3JDLENBQUMsRUFDaEIsSUFBSSxDQUFDSCxLQUFLLENBQUNvRCxZQUFZLENBQUNqRCxLQUFLLGdCQUM1QjNFLEtBQUEsQ0FBQW9aLGFBQUEsWUFBSSxJQUFJLENBQUM1VSxLQUFLLENBQUNvRCxZQUFZLENBQUNqRCxLQUFTLENBQUMsZ0JBRXRDM0UsS0FBQSxDQUFBb1osYUFBQSwyQkFDRXBaLEtBQUEsQ0FBQW9aLGFBQUEsMkJBQUtwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLFVBQWdCLENBQUMsS0FBQyxFQUFDLElBQUksQ0FBQ2hPLFNBQVMsQ0FBQyxJQUFJLENBQUM1RyxLQUFLLENBQUNvRCxZQUFZLENBQUN4QyxXQUFXLElBQUksQ0FBQyxDQUFDLEVBQUMsUUFBTSxFQUFDakMsaUJBQWlCLENBQUMsSUFBSSxDQUFDcUIsS0FBSyxDQUFDb0QsWUFBWSxDQUFDeEMsV0FBVyxJQUFJLENBQUMsQ0FBQyxFQUFDLFFBQVcsQ0FBQyxFQUN2SyxJQUFJLENBQUNaLEtBQUssQ0FBQ29ELFlBQVksQ0FBQ3lDLE9BQU8saUJBQUlySyxLQUFBLENBQUFvWixhQUFBLDJCQUFLcFosS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxVQUFnQixDQUFDLEtBQUMsRUFBQyxJQUFJLENBQUM1VSxLQUFLLENBQUNvRCxZQUFZLENBQUN5QyxPQUFhLENBQ3RHLENBRUEsQ0FFSixDQUFDLEVBRVQwRixLQUFLLENBQUM4SyxnQkFBZ0IsZ0JBQ3JCN2EsS0FBQSxDQUFBb1osYUFBQSxDQUFDclksT0FBTztRQUFDME0sRUFBRSxFQUFDO01BQTZCLGdCQUN2Q3pOLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3ZZLE9BQU87UUFBQ3ViLElBQUk7TUFBQSxnQkFDWHBjLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3ZZLE9BQU8sQ0FBQ0wsTUFBTSxRQUFDLFlBQTBCLENBQUMsZUFDM0NSLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVhLE1BQU0sRUFBRTtRQUFhO01BQUUsR0FBQyxpR0FDNkQsRUFBQyxHQUFHLGVBQ25HbmEsS0FBQSxDQUFBb1osYUFBQSxDQUFDalosSUFBSTtRQUFDc1IsRUFBRSxFQUFDO01BQThCLEdBQUMsWUFBZ0IsQ0FBQyxFQUN4RCxHQUFHLEVBQUMsWUFBVSxlQUFBelIsS0FBQSxDQUFBb1osYUFBQSxlQUFNLDhCQUFrQyxDQUFDLFFBQUksZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxhQUFpQixDQUFDLE1BQ25GLENBQ0ksQ0FDRixDQUFDLEdBQ1IsSUFBSSxFQUVQckosS0FBSyxDQUFDYyxlQUFlLGdCQUN0QjdRLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3JZLE9BQU87UUFBQzBNLEVBQUUsRUFBQztNQUF3QixnQkFDbEN6TixLQUFBLENBQUFvWixhQUFBLENBQUM1WSxNQUFNO1FBQUMwWixFQUFFLEVBQUM7TUFBSSxHQUFDLGlCQUF1QixDQUFDLEVBQ3ZDLElBQUksQ0FBQzFWLEtBQUssQ0FBQ21DLHVCQUF1QixnQkFDakMzRyxLQUFBLENBQUFvWixhQUFBLENBQUN2WSxPQUFPO1FBQ040TSxFQUFFLEVBQUMsdUNBQXVDO1FBQzFDZ08sSUFBSSxFQUFDLE9BQU87UUFDWlcsSUFBSTtRQUNKOUMsS0FBSyxFQUFFO1VBQUV5QixTQUFTLEVBQUUsU0FBUztVQUFFbkIsWUFBWSxFQUFFO1FBQU87TUFBRSxnQkFFdEQ1WixLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUM7TUFBd0IsQ0FBRSxDQUFDLGVBQ3RDdUUsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxzQkFBNEIsQ0FBQyxFQUNwQyxHQUFHLEVBQUMsaUJBQWUsRUFBQyxJQUFJLENBQUM1VSxLQUFLLENBQUNtQyx1QkFBdUIsQ0FBQ3FKLGdCQUFnQixFQUN2RSxJQUFJLENBQUN4TCxLQUFLLENBQUNtQyx1QkFBdUIsQ0FBQ3NKLGtCQUFrQixHQUFHLENBQUMsZ0JBQ3hEalEsS0FBQSxDQUFBb1osYUFBQSxDQUFBcFosS0FBQSxDQUFBa2IsUUFBQSxRQUFFLFVBQUcsRUFBQyxJQUFJLENBQUMxVyxLQUFLLENBQUNtQyx1QkFBdUIsQ0FBQ3NKLGtCQUFrQixFQUFDLG9CQUFvQixDQUFDLEdBQy9FLElBQUksRUFBQyxHQUNSLEVBQUMsR0FBRyxlQUNMalEsS0FBQSxDQUFBb1osYUFBQSxDQUFDalosSUFBSTtRQUFDc1IsRUFBRSxFQUFDO01BQVcsR0FBQyxVQUFjLENBQUMsRUFDbkMsR0FBRyxFQUFDLGlDQUNFLENBQUMsR0FDUixJQUFJLGVBQ1J6UixLQUFBLENBQUFvWixhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUU7UUFBTztNQUFFLEdBQUMsMkJBQ0YsZUFBQXBhLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxLQUFTLENBQUMseUZBQ3hDLENBQUMsZUFDSnBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzdZLElBQUkscUJBQ0hQLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzdZLElBQUksQ0FBQ3dmLEtBQUs7UUFBQ0MsTUFBTSxFQUFDO01BQU8sZ0JBQ3hCaGdCLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzdZLElBQUksQ0FBQzBmLEtBQUsscUJBQ1RqZ0IsS0FBQSxDQUFBb1osYUFBQSxnQkFBTyxtQ0FBd0MsQ0FBQyxlQUNoRHBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzFZLEtBQUs7UUFDSjhiLElBQUksRUFBQyxRQUFRO1FBQ2IvSixHQUFHLEVBQUMsR0FBRztRQUNQcU8sSUFBSSxFQUFDLEdBQUc7UUFDUlosV0FBVyxFQUFDLE9BQU87UUFDbkJybEIsS0FBSyxFQUFFLElBQUksQ0FBQzJKLEtBQUssQ0FBQzRCLGlCQUFrQjtRQUNwQytaLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHM21CLENBQUM7VUFBQSxPQUFLcWQsTUFBSSxDQUFDcE4sUUFBUSxDQUFDO1lBQUVyRCxpQkFBaUIsRUFBRTVNLENBQUMsQ0FBQ2tqQixNQUFNLENBQUM3aEI7VUFBTSxDQUFDLENBQUM7UUFBQTtNQUFDLENBQ3ZFLENBQ1MsQ0FBQyxlQUNibUYsS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxDQUFDMGYsS0FBSyxxQkFDVGpnQixLQUFBLENBQUFvWixhQUFBLGdCQUFPLGtCQUF1QixDQUFDLGVBQy9CcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDMVksS0FBSztRQUNKd2YsV0FBVyxFQUFDLHFCQUFxQjtRQUNqQ3JsQixLQUFLLEVBQUUsSUFBSSxDQUFDMkosS0FBSyxDQUFDNkIsWUFBYTtRQUMvQjhaLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHM21CLENBQUM7VUFBQSxPQUFLcWQsTUFBSSxDQUFDcE4sUUFBUSxDQUFDO1lBQUVwRCxZQUFZLEVBQUU3TSxDQUFDLENBQUNrakIsTUFBTSxDQUFDN2hCO1VBQU0sQ0FBQyxDQUFDO1FBQUE7TUFBQyxDQUNsRSxDQUNTLENBQUMsZUFDYm1GLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzdZLElBQUksQ0FBQzBmLEtBQUsscUJBQ1RqZ0IsS0FBQSxDQUFBb1osYUFBQSxnQkFBTyxpQkFBc0IsQ0FBQyxlQUM5QnBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzFZLEtBQUs7UUFDSndmLFdBQVcsRUFBQyw0QkFBNEI7UUFDeENybEIsS0FBSyxFQUFFLElBQUksQ0FBQzJKLEtBQUssQ0FBQzhCLFdBQVk7UUFDOUI2WixRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRzNtQixDQUFDO1VBQUEsT0FBS3FkLE1BQUksQ0FBQ3BOLFFBQVEsQ0FBQztZQUFFbkQsV0FBVyxFQUFFOU0sQ0FBQyxDQUFDa2pCLE1BQU0sQ0FBQzdoQjtVQUFNLENBQUMsQ0FBQztRQUFBO01BQUMsQ0FDakUsQ0FDUyxDQUNGLENBQUMsZUFDYm1GLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFBQ3FhLE9BQU87UUFBQ0QsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7VUFBQSxPQUFRNUQsTUFBSSxDQUFDVCwwQkFBMEIsQ0FBQyxDQUFDO1FBQUEsQ0FBQztRQUFDcUcsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDalksS0FBSyxDQUFDMEI7TUFBZSxnQkFDckdsRyxLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUM7TUFBa0IsQ0FBRSxDQUFDLGtDQUUxQixDQUFDLGVBQ1R1RSxLQUFBLENBQUFvWixhQUFBLENBQUMvWSxNQUFNO1FBQUNrYSxLQUFLO1FBQUNFLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUTVELE1BQUksQ0FBQ0gsMkJBQTJCLENBQUMsQ0FBQztRQUFBLENBQUM7UUFBQytGLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQ2pZLEtBQUssQ0FBQytCO01BQWlCLGdCQUN0R3ZHLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQztNQUFTLENBQUUsQ0FBQyxtQkFFakIsQ0FDSixDQUFDLEVBQ04sSUFBSSxDQUFDK0ksS0FBSyxDQUFDZ0MsYUFBYSxpQkFDdkJ4RyxLQUFBLENBQUFvWixhQUFBLENBQUN2WSxPQUFPO1FBQ055WSxLQUFLLEVBQUU7VUFBRXlCLFNBQVMsRUFBRTtRQUFNLENBQUU7UUFDNUJ3QixRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQy9YLEtBQUssQ0FBQ2dDLGFBQWEsQ0FBQzdCLEtBQU07UUFDM0M0YixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMvYixLQUFLLENBQUNnQyxhQUFhLENBQUM3QjtNQUFNLGdCQUUxQzNFLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3ZZLE9BQU8sQ0FBQ0wsTUFBTSxRQUFFLElBQUksQ0FBQ2dFLEtBQUssQ0FBQ2dDLGFBQWEsQ0FBQzdCLEtBQUssR0FBRyx3QkFBd0IsR0FBRyxpQkFBa0MsQ0FBQyxFQUMvRyxDQUFDLElBQUksQ0FBQ0gsS0FBSyxDQUFDZ0MsYUFBYSxDQUFDN0IsS0FBSyxLQUFLLElBQUksQ0FBQ0gsS0FBSyxDQUFDZ0MsYUFBYSxDQUFDaUgsRUFBRSxJQUFJLElBQUksQ0FBQ2pKLEtBQUssQ0FBQ2dDLGFBQWEsQ0FBQzBQLFFBQVEsQ0FBQyxpQkFDcEdsVyxLQUFBLENBQUFvWixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFTSxZQUFZLEVBQUUsUUFBUTtVQUFFRSxPQUFPLEVBQUUsTUFBTTtVQUFFUSxRQUFRLEVBQUUsTUFBTTtVQUFFTCxHQUFHLEVBQUUsT0FBTztVQUFFRCxVQUFVLEVBQUU7UUFBUztNQUFFLGdCQUM1R2hhLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFDTG9iLElBQUksRUFBQyxPQUFPO1FBQ1psQixLQUFLO1FBQ0xpQyxJQUFJLEVBQUMsUUFBUTtRQUNiQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUNqWSxLQUFLLENBQUNnQyxhQUFhLENBQUMwUCxRQUFTO1FBQzdDdUUsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7VUFBQSxPQUFRalgsZUFBZSxDQUFDcVQsTUFBSSxDQUFDclMsS0FBSyxDQUFDZ0MsYUFBYSxDQUFDMFAsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUFBLENBQUM7UUFDeEVoQixLQUFLLEVBQUM7TUFBaUMsZ0JBRXZDbFYsS0FBQSxDQUFBb1osYUFBQSxDQUFDM1ksSUFBSTtRQUFDaEYsSUFBSSxFQUFDO01BQWMsQ0FBRSxDQUFDLGNBRXRCLENBQUMsZUFDVHVFLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFDTG9iLElBQUksRUFBQyxPQUFPO1FBQ1psQixLQUFLO1FBQ0xpQyxJQUFJLEVBQUMsUUFBUTtRQUNiQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUNqWSxLQUFLLENBQUNnQyxhQUFhLENBQUNpSCxFQUFHO1FBQ3ZDZ04sT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7VUFBQSxPQUFRalgsZUFBZSxDQUFDdEUsTUFBTSxDQUFDMlgsTUFBSSxDQUFDclMsS0FBSyxDQUFDZ0MsYUFBYSxDQUFDaUgsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQUEsQ0FBQztRQUMxRXlILEtBQUssRUFBQztNQUFpQixnQkFFdkJsVixLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUM7TUFBYyxDQUFFLENBQUMsbUJBRXRCLENBQUMsZUFDVHVFLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFDTDZaLEVBQUUsRUFBRS9aLElBQUs7UUFDVHNiLElBQUksRUFBQyxPQUFPO1FBQ1pmLE9BQU87UUFDUGpKLEVBQUUsRUFBRSxJQUFJLENBQUNqTixLQUFLLENBQUNnQyxhQUFhLENBQUNpSCxFQUFFLCtCQUFBbkIsTUFBQSxDQUNDd0Isa0JBQWtCLENBQUMsSUFBSSxDQUFDdEosS0FBSyxDQUFDZ0MsYUFBYSxDQUFDaUgsRUFBRSxDQUFDLElBQzNFO01BQVksZ0JBRWhCek4sS0FBQSxDQUFBb1osYUFBQSxDQUFDM1ksSUFBSTtRQUFDaEYsSUFBSSxFQUFDO01BQXFCLENBQUUsQ0FBQywrQkFFN0IsQ0FDTCxDQUNOLGVBQ0R1RSxLQUFBLENBQUFvWixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFeUgsVUFBVSxFQUFFLFVBQVU7VUFBRXJCLFNBQVMsRUFBRTtRQUFhO01BQUUsR0FBRXNCLElBQUksQ0FBQ0MsU0FBUyxDQUFDLElBQUksQ0FBQ3pjLEtBQUssQ0FBQ2dDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFPLENBQ2xILENBRUosQ0FBQyxHQUNOLElBQUksRUFFUG1TLFlBQVksZ0JBQ2IzWSxLQUFBLENBQUFvWixhQUFBLENBQUNyWSxPQUFPO1FBQUMsMkJBQW1CO1FBQUMwTSxFQUFFLEVBQUM7TUFBdUIsZ0JBQ3JEek4sS0FBQSxDQUFBb1osYUFBQSxDQUFDNVksTUFBTTtRQUFDMFosRUFBRSxFQUFDO01BQUksR0FBQyxRQUFjLENBQUMsZUFDL0JsYSxLQUFBLENBQUFvWixhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUUsTUFBTTtVQUFFUixZQUFZLEVBQUU7UUFBUTtNQUFFLGdCQUNqRDVaLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsU0FBZSxDQUFDLGlGQUN4QixFQUFDakMsY0FBYyxpQkFBSW5YLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxxQkFBbUIsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVNqQyxjQUF1QixDQUFDLFdBQU8sRUFBQ00sa0JBQWtCLEVBQUMsSUFBUSxDQUFDLEVBQ2hILEdBQUcsRUFBQyxTQUFPLGVBQUF6WCxLQUFBLENBQUFvWixhQUFBLGlCQUFRLHdCQUE4QixDQUFDLG1FQUNuRCxFQUFDLEdBQUcsZUFDSnBaLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsT0FBYSxDQUFDLGlCQUFhLGVBQUFwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLGdCQUFzQixDQUFDLDZHQUNqRSxDQUFDLGVBQ0pwWixLQUFBLENBQUFvWixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFTSxZQUFZLEVBQUU7UUFBUTtNQUFFLGdCQUNwQzVaLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsVUFBZ0IsQ0FBQyxLQUFDLEVBQUNqQyxjQUFjLElBQUksU0FDMUMsQ0FBQyxlQUNOblgsS0FBQSxDQUFBb1osYUFBQTtRQUFLRSxLQUFLLEVBQUU7VUFBRU0sWUFBWSxFQUFFO1FBQU07TUFBRSxnQkFDbEM1WixLQUFBLENBQUFvWixhQUFBLGlCQUFRLHdCQUE4QixDQUFDLEVBQUMsR0FBRyxFQUMxQ2phLE1BQU0sQ0FBQyxJQUFJLENBQUNxRixLQUFLLENBQUNvQyxhQUFhLElBQUksSUFBSSxDQUFDcEMsS0FBSyxDQUFDb0MsYUFBYSxDQUFDaUUsT0FBTyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUNyRyxLQUFLLENBQUNvQyxhQUFhLENBQUNpRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUNnQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsTUFDaEksRUFBQyxJQUFJLENBQUNySSxLQUFLLENBQUNvQyxhQUFhLElBQUksSUFBSSxDQUFDcEMsS0FBSyxDQUFDb0MsYUFBYSxDQUFDZ1csTUFBTSxpQkFDMUQ1YyxLQUFBLENBQUFvWixhQUFBO1FBQU1FLEtBQUssRUFBRTtVQUFFa0gsVUFBVSxFQUFFLEtBQUs7VUFBRXBHLEtBQUssRUFBRTtRQUFPO01BQUUsR0FBQyxXQUN4QyxFQUFDalgsaUJBQWlCLENBQUMsSUFBSSxDQUFDcUIsS0FBSyxDQUFDb0MsYUFBYSxDQUFDZ1csTUFBTSxDQUFDeFgsV0FBVyxJQUFJLENBQUMsQ0FBQyxFQUFDLFFBQzFFLENBRUwsQ0FBQyxlQUNOcEYsS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxxQkFDSFAsS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxDQUFDMGYsS0FBSyxxQkFDVGpnQixLQUFBLENBQUFvWixhQUFBLGdCQUFPLG1CQUFpQixFQUFDakMsY0FBYyxJQUFJLEtBQUssRUFBQyxHQUFRLENBQUMsZUFDMURuWCxLQUFBLENBQUFvWixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFUSxPQUFPLEVBQUUsTUFBTTtVQUFFRyxHQUFHLEVBQUUsT0FBTztVQUFFSyxRQUFRLEVBQUUsTUFBTTtVQUFFTixVQUFVLEVBQUU7UUFBUztNQUFFLGdCQUNwRmhhLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzFZLEtBQUs7UUFDSndmLFdBQVcsRUFBRXpJLGtCQUFtQjtRQUNoQzVjLEtBQUssRUFBRSxJQUFJLENBQUMySixLQUFLLENBQUNnRCxhQUFjO1FBQ2hDMlksUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUczbUIsQ0FBQztVQUFBLE9BQUtxZCxNQUFJLENBQUNwTixRQUFRLENBQUM7WUFBRWpDLGFBQWEsRUFBRWhPLENBQUMsQ0FBQ2tqQixNQUFNLENBQUM3aEI7VUFBTSxDQUFDLENBQUM7UUFBQSxDQUFDO1FBQ2xFeWUsS0FBSyxFQUFFO1VBQUVzSCxJQUFJLEVBQUUsVUFBVTtVQUFFQyxRQUFRLEVBQUU7UUFBTztNQUFFLENBQy9DLENBQUMsRUFDRDliLE1BQU0sQ0FBQ1EsT0FBTyxJQUFJK1IsaUJBQWlCLGlCQUNsQ3RYLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFDTG1jLElBQUksRUFBQyxRQUFRO1FBQ2JqQyxLQUFLO1FBQ0xFLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUTVELE1BQUksQ0FBQ3BOLFFBQVEsQ0FBQztZQUFFakMsYUFBYSxFQUFFekMsTUFBTSxDQUFDUTtVQUFRLENBQUMsQ0FBQztRQUFBLENBQUM7UUFDaEUyUCxLQUFLLEVBQUM7TUFBOEQsR0FDckUsd0JBRU8sQ0FFUCxDQUNLLENBQUMsZUFDYmxWLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzdZLElBQUksQ0FBQzBmLEtBQUsscUJBQ1RqZ0IsS0FBQSxDQUFBb1osYUFBQSxnQkFBTyxlQUFvQixDQUFDLGVBQzVCcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDMVksS0FBSztRQUNKOGIsSUFBSSxFQUFDLFFBQVE7UUFDYi9KLEdBQUcsRUFBQyxHQUFHO1FBQ1BELEdBQUcsRUFBQyxTQUFTO1FBQ2JzTyxJQUFJLEVBQUMsR0FBRztRQUNSWixXQUFXLEVBQUMsT0FBTztRQUNuQnJsQixLQUFLLEVBQUUsSUFBSSxDQUFDMkosS0FBSyxDQUFDaUQsZ0JBQWlCO1FBQ25DMFksUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUczbUIsQ0FBQztVQUFBLE9BQUtxZCxNQUFJLENBQUNwTixRQUFRLENBQUM7WUFBRWhDLGdCQUFnQixFQUFFak8sQ0FBQyxDQUFDa2pCLE1BQU0sQ0FBQzdoQjtVQUFNLENBQUMsQ0FBQztRQUFBO01BQUMsQ0FDdEUsQ0FDUyxDQUFDLGVBQ2JtRixLQUFBLENBQUFvWixhQUFBLENBQUMvWSxNQUFNO1FBQ0xxYSxPQUFPO1FBQ1BELE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUTVELE1BQUksQ0FBQ25FLG1CQUFtQixDQUFDLENBQUM7UUFBQSxDQUFDO1FBQzFDK0osUUFBUSxFQUFFLENBQUNuRixpQkFBaUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDOVMsS0FBSyxDQUFDZ0QsYUFBYSxJQUFJLEVBQUUsRUFBRWtHLElBQUksQ0FBQyxDQUFFO1FBQ3pFd0gsS0FBSyxFQUFFLENBQUNvQyxpQkFBaUIsR0FBRyxtREFBbUQsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDOVMsS0FBSyxDQUFDZ0QsYUFBYSxJQUFJLEVBQUUsRUFBRWtHLElBQUksQ0FBQyxDQUFDLGNBQUFwQixNQUFBLENBQWM2SyxjQUFjLElBQUksU0FBUyxxQkFBQTdLLE1BQUEsQ0FBa0JtTCxrQkFBa0IsU0FBTTtNQUFrQyxnQkFFL096WCxLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUM7TUFBTSxDQUFFLENBQUMsdUJBRWQsQ0FDSixDQUFDLEVBQ04sSUFBSSxDQUFDK0ksS0FBSyxDQUFDa0QsWUFBWSxpQkFDdEIxSCxLQUFBLENBQUFvWixhQUFBLENBQUN2WSxPQUFPO1FBQUN5WSxLQUFLLEVBQUU7VUFBRXlCLFNBQVMsRUFBRTtRQUFNLENBQUU7UUFBQ3dGLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQy9iLEtBQUssQ0FBQ2tELFlBQVksQ0FBQy9DLEtBQU07UUFBQzRYLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDL1gsS0FBSyxDQUFDa0QsWUFBWSxDQUFDL0M7TUFBTSxnQkFDeEgzRSxLQUFBLENBQUFvWixhQUFBLENBQUN2WSxPQUFPLENBQUNMLE1BQU0sUUFBRSxJQUFJLENBQUNnRSxLQUFLLENBQUNrRCxZQUFZLENBQUMvQyxLQUFLLEdBQUcsZUFBZSxHQUFHLFFBQXlCLENBQUMsRUFDNUYsQ0FBQyxJQUFJLENBQUNILEtBQUssQ0FBQ2tELFlBQVksQ0FBQy9DLEtBQUssSUFBSyxZQUFNO1FBQ3hDLElBQU11YyxFQUFFLEdBQUdySyxNQUFJLENBQUNyUyxLQUFLLENBQUNrRCxZQUFZO1FBQ2xDLElBQU15WixNQUFNLEdBQUdELEVBQUUsSUFBSUEsRUFBRSxDQUFDQyxNQUFNO1FBQzlCLElBQU10UCxJQUFJLEdBQUdzUCxNQUFNLElBQUlBLE1BQU0sQ0FBQ3RQLElBQUk7UUFDbEMsSUFBTUgsVUFBVSxHQUFHeVAsTUFBTSxJQUFJQSxNQUFNLENBQUN6UCxVQUFVO1FBQzlDLElBQU0wUCxJQUFJLEdBQUdELE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxXQUFXO1FBQ3pDLElBQUl4UCxJQUFJLElBQUlILFVBQVUsRUFBRTtVQUN0QixvQkFDRTFSLEtBQUEsQ0FBQW9aLGFBQUE7WUFBR0UsS0FBSyxFQUFFO2NBQUV5QixTQUFTLEVBQUUsT0FBTztjQUFFbkIsWUFBWSxFQUFFO1lBQVE7VUFBRSxHQUNyRGxJLFVBQVUsV0FBQXBGLE1BQUEsQ0FBV25OLE1BQU0sQ0FBQ3VTLFVBQVUsQ0FBQyxDQUFDaEYsY0FBYyxDQUFDLENBQUMsYUFBVSxNQUFNLEVBQ3hFMFUsSUFBSSxVQUFBOVUsTUFBQSxDQUFVOFUsSUFBSSxDQUFDN2xCLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQUErUSxNQUFBLENBQUk4VSxJQUFJLENBQUM3bEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUssRUFBRSxFQUFDLEdBQzFELEVBQUNzVyxJQUFJLGdCQUNIN1IsS0FBQSxDQUFBb1osYUFBQTtZQUFNRSxLQUFLLEVBQUU7Y0FBRVEsT0FBTyxFQUFFLE9BQU87Y0FBRWlCLFNBQVMsRUFBRTtZQUFTO1VBQUUsR0FDcERoTCxLQUFLLENBQUNwQyxlQUFlLGdCQUNwQjNOLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ2paLElBQUk7WUFBQ3NSLEVBQUUsb0NBQUFuRixNQUFBLENBQW9Dd0Isa0JBQWtCLENBQUM1TyxNQUFNLENBQUMyUyxJQUFJLENBQUMsQ0FBQztVQUFHLEdBQUMsa0JBRTFFLENBQUMsZ0JBRVA3UixLQUFBLENBQUFvWixhQUFBO1lBQU1FLEtBQUssRUFBRTtjQUFFa0MsUUFBUSxFQUFFO1lBQVE7VUFBRSxHQUFFdGMsTUFBTSxDQUFDMlMsSUFBSSxDQUFRLENBRXRELENBQUMsR0FDTCxJQUNILENBQUM7UUFFUjtRQUNBLE9BQU8sSUFBSTtNQUNiLENBQUMsQ0FBRSxDQUFDLGVBQ0o3UixLQUFBLENBQUFvWixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFeUgsVUFBVSxFQUFFLFVBQVU7VUFBRXJCLFNBQVMsRUFBRSxZQUFZO1VBQUUzRSxTQUFTLEVBQUU7UUFBUTtNQUFFLEdBQUVpRyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxJQUFJLENBQUN6YyxLQUFLLENBQUNrRCxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBTyxDQUNySSxDQUVKLENBQUMsR0FDTixJQUFJLEVBRVBxSSxLQUFLLENBQUNjLGVBQWUsZ0JBQ3RCN1EsS0FBQSxDQUFBb1osYUFBQSxDQUFDclksT0FBTyxxQkFDTmYsS0FBQSxDQUFBb1osYUFBQSxDQUFDNVksTUFBTTtRQUFDMFosRUFBRSxFQUFDO01BQUksR0FBQyx3QkFBOEIsQ0FBQyxlQUMvQ2xhLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVjLEtBQUssRUFBRSxNQUFNO1VBQUVSLFlBQVksRUFBRTtRQUFFO01BQUUsR0FBQyw0R0FFNUMsRUFBQyxHQUFHLGVBQ0o1WixLQUFBLENBQUFvWixhQUFBLENBQUNqWixJQUFJO1FBQUNzUixFQUFFLEVBQUM7TUFBNEUsR0FBQywwQkFBa0MsQ0FBQyxLQUN4SCxDQUNJLENBQUMsR0FDTixJQUFJLEVBRVAxQixLQUFLLENBQUMrSyxnQkFBZ0IsSUFBSWxDLGVBQWUsZ0JBQzFDNVksS0FBQSxDQUFBb1osYUFBQSxDQUFDclksT0FBTztRQUFDME0sRUFBRSxFQUFDO01BQTBCLGdCQUNwQ3pOLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzVZLE1BQU07UUFBQzBaLEVBQUUsRUFBQztNQUFJLEdBQUMsMEJBQWdDLENBQUMsZUFDakRsYSxLQUFBLENBQUFvWixhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUUsTUFBTTtVQUFFUixZQUFZLEVBQUU7UUFBUTtNQUFFLGdCQUFDNVosS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxTQUFlLENBQUMsa0ZBQWlGLENBQUMsRUFDN0o1QixrQkFBa0IsSUFBSSxJQUFJLENBQUNoVCxLQUFLLENBQUNzQyxlQUFlLElBQUksSUFBSSxDQUFDdEMsS0FBSyxDQUFDc0MsZUFBZSxDQUFDRCxNQUFNLEtBQUssU0FBUyxpQkFDbEc3RyxLQUFBLENBQUFvWixhQUFBLENBQUFwWixLQUFBLENBQUFrYixRQUFBLHFCQUNFbGIsS0FBQSxDQUFBb1osYUFBQSxDQUFDdlksT0FBTztRQUFDMGYsUUFBUTtRQUFDakgsS0FBSyxFQUFFO1VBQUVNLFlBQVksRUFBRTtRQUFNO01BQUUsZ0JBQy9DNVosS0FBQSxDQUFBb1osYUFBQSxDQUFDdlksT0FBTyxDQUFDTCxNQUFNLHFCQUNiUixLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUM7TUFBTSxDQUFFLENBQUMsMEJBRXBCLEVBQUMsSUFBSSxDQUFDK0ksS0FBSyxDQUFDc0MsZUFBZSxDQUFDd2EsSUFBSSxJQUFJLElBQUksQ0FBQzljLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksQ0FBQ0MsS0FBSyxjQUFBalYsTUFBQSxDQUMvRCxJQUFJLENBQUM5SCxLQUFLLENBQUNzQyxlQUFlLENBQUN3YSxJQUFJLENBQUNDLEtBQUssSUFDM0MsRUFDVSxDQUFDLGVBQ2pCdmhCLEtBQUEsQ0FBQW9aLGFBQUEsWUFDRyxJQUFJLENBQUM1VSxLQUFLLENBQUN1QyxpQkFBaUIsQ0FBQ2pNLE1BQU0sRUFBQyxjQUNwQyxDQUNJLENBQUMsRUFDVCxJQUFJLENBQUMwSixLQUFLLENBQUNzQyxlQUFlLENBQUN3YSxJQUFJLEtBQUssSUFBSSxDQUFDOWMsS0FBSyxDQUFDc0MsZUFBZSxDQUFDd2EsSUFBSSxDQUFDN1QsRUFBRSxJQUFJLElBQUksQ0FBQ2pKLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksQ0FBQy9iLE9BQU8sSUFBSSxJQUFJLENBQUNmLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksQ0FBQ0UsT0FBTyxDQUFDLGlCQUM1SnhoQixLQUFBLENBQUFvWixhQUFBLENBQUNyWSxPQUFPO1FBQUN1WSxLQUFLLEVBQUU7VUFBRThCLE9BQU8sRUFBRSxRQUFRO1VBQUV4QixZQUFZLEVBQUUsS0FBSztVQUFFRixVQUFVLEVBQUU7UUFBbUI7TUFBRSxnQkFDekYxWixLQUFBLENBQUFvWixhQUFBLENBQUM1WSxNQUFNO1FBQUMwWixFQUFFLEVBQUMsSUFBSTtRQUFDWixLQUFLLEVBQUU7VUFBRWEsTUFBTSxFQUFFO1FBQWM7TUFBRSxHQUFDLHdCQUE4QixDQUFDLEVBQ2hGLElBQUksQ0FBQzNWLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksQ0FBQzdULEVBQUUsaUJBQ2pDek4sS0FBQSxDQUFBb1osYUFBQTtRQUFLRSxLQUFLLEVBQUU7VUFBRU0sWUFBWSxFQUFFO1FBQVE7TUFBRSxnQkFDcEM1WixLQUFBLENBQUFvWixhQUFBLGlCQUFRLFVBQWdCLENBQUMsRUFBQyxHQUFHLGVBQzdCcFosS0FBQSxDQUFBb1osYUFBQTtRQUFNRSxLQUFLLEVBQUU7VUFBRW9HLFNBQVMsRUFBRSxXQUFXO1VBQUVsRSxRQUFRLEVBQUU7UUFBUTtNQUFFLEdBQUUsSUFBSSxDQUFDaFgsS0FBSyxDQUFDc0MsZUFBZSxDQUFDd2EsSUFBSSxDQUFDN1QsRUFBUyxDQUNuRyxDQUNOLEVBQ0EsQ0FBQyxJQUFJLENBQUNqSixLQUFLLENBQUNzQyxlQUFlLENBQUN3YSxJQUFJLENBQUMvYixPQUFPLElBQUksSUFBSSxDQUFDZixLQUFLLENBQUNzQyxlQUFlLENBQUN3YSxJQUFJLENBQUNFLE9BQU8sa0JBQ2xGeGhCLEtBQUEsQ0FBQW9aLGFBQUE7UUFBS0UsS0FBSyxFQUFFO1VBQUVNLFlBQVksRUFBRTtRQUFRO01BQUUsZ0JBQ3BDNVosS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxVQUFnQixDQUFDLEVBQUMsR0FBRyxlQUM3QnBaLEtBQUEsQ0FBQW9aLGFBQUE7UUFBTUUsS0FBSyxFQUFFO1VBQUVvRyxTQUFTLEVBQUUsV0FBVztVQUFFbEUsUUFBUSxFQUFFO1FBQVE7TUFBRSxHQUFFLElBQUksQ0FBQ2hYLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksQ0FBQy9iLE9BQU8sSUFBSSxJQUFJLENBQUNmLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksQ0FBQ0UsT0FBYyxDQUNuSixDQUNOLEVBQ0EsSUFBSSxDQUFDaGQsS0FBSyxDQUFDc0MsZUFBZSxDQUFDd2EsSUFBSSxDQUFDN1QsRUFBRSxLQUFLLElBQUksQ0FBQ2pKLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksQ0FBQy9iLE9BQU8sSUFBSSxJQUFJLENBQUNmLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksQ0FBQ0UsT0FBTyxDQUFDLGlCQUN6SHhoQixLQUFBLENBQUFvWixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFTSxZQUFZLEVBQUU7UUFBUTtNQUFFLGdCQUNwQzVaLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsc0NBQTRDLENBQUMsRUFBQyxHQUFHLGVBQ3pEcFosS0FBQSxDQUFBb1osYUFBQTtRQUFNRSxLQUFLLEVBQUU7VUFBRW9HLFNBQVMsRUFBRSxXQUFXO1VBQUVsRSxRQUFRLEVBQUU7UUFBUTtNQUFFLEdBQUUsSUFBSSxDQUFDaFgsS0FBSyxDQUFDc0MsZUFBZSxDQUFDd2EsSUFBSSxDQUFDN1QsRUFBRSxFQUFDLEdBQUMsRUFBQyxJQUFJLENBQUNqSixLQUFLLENBQUNzQyxlQUFlLENBQUN3YSxJQUFJLENBQUMvYixPQUFPLElBQUksSUFBSSxDQUFDZixLQUFLLENBQUNzQyxlQUFlLENBQUN3YSxJQUFJLENBQUNFLE9BQWMsQ0FDeEwsQ0FDTixFQUNBLENBQUMsSUFBSSxDQUFDaGQsS0FBSyxDQUFDc0MsZUFBZSxDQUFDd2EsSUFBSSxDQUFDN1QsRUFBRSxJQUFJLElBQUksQ0FBQ2pKLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksQ0FBQy9iLE9BQU8sSUFBSSxJQUFJLENBQUNmLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksQ0FBQ0UsT0FBTyxrQkFDeEh4aEIsS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUNMb2IsSUFBSSxFQUFDLE9BQU87UUFDWmxCLEtBQUs7UUFDTEMsSUFBSTtRQUNKa0IsYUFBYSxFQUFDLE1BQU07UUFDcEJqQixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUFRO1VBQ2IsSUFBTTZHLElBQUksR0FBR3pLLE1BQUksQ0FBQ3JTLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUk7VUFDNUMsSUFBTUcsUUFBUSxHQUFHSCxJQUFJLENBQUMvYixPQUFPLElBQUkrYixJQUFJLENBQUNFLE9BQU87VUFDN0MsSUFBTUUsS0FBSyxHQUFHLEVBQUU7VUFDaEIsSUFBSUosSUFBSSxDQUFDN1QsRUFBRSxFQUFFaVUsS0FBSyxDQUFDOW1CLElBQUksQ0FBQzBtQixJQUFJLENBQUM3VCxFQUFFLENBQUM7VUFDaEMsSUFBSWdVLFFBQVEsRUFBRUMsS0FBSyxDQUFDOW1CLElBQUksQ0FBQzZtQixRQUFRLENBQUM7VUFDbEMsSUFBSUgsSUFBSSxDQUFDN1QsRUFBRSxJQUFJZ1UsUUFBUSxFQUFFQyxLQUFLLENBQUM5bUIsSUFBSSxJQUFBMFIsTUFBQSxDQUFJZ1YsSUFBSSxDQUFDN1QsRUFBRSxPQUFBbkIsTUFBQSxDQUFJbVYsUUFBUSxDQUFFLENBQUM7VUFDN0QsSUFBTXBWLElBQUksR0FBR3FWLEtBQUssQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQztVQUM3QixJQUFJO1lBQ0YsSUFBSUMsU0FBUyxDQUFDQyxTQUFTLElBQUlELFNBQVMsQ0FBQ0MsU0FBUyxDQUFDQyxTQUFTLEVBQUU7Y0FDeERGLFNBQVMsQ0FBQ0MsU0FBUyxDQUFDQyxTQUFTLENBQUN6VixJQUFJLENBQUM7WUFDckMsQ0FBQyxNQUFNO2NBQ0wsSUFBTTBWLEVBQUUsR0FBR2paLFFBQVEsQ0FBQ3NRLGFBQWEsQ0FBQyxVQUFVLENBQUM7Y0FDN0MySSxFQUFFLENBQUNsbkIsS0FBSyxHQUFHd1IsSUFBSTtjQUNmMFYsRUFBRSxDQUFDekksS0FBSyxDQUFDQyxRQUFRLEdBQUcsT0FBTztjQUMzQndJLEVBQUUsQ0FBQ3pJLEtBQUssQ0FBQzBJLE9BQU8sR0FBRyxHQUFHO2NBQ3RCbFosUUFBUSxDQUFDbVosSUFBSSxDQUFDQyxXQUFXLENBQUNILEVBQUUsQ0FBQztjQUM3QkEsRUFBRSxDQUFDSSxNQUFNLENBQUMsQ0FBQztjQUNYclosUUFBUSxDQUFDc1osV0FBVyxDQUFDLE1BQU0sQ0FBQztjQUM1QnRaLFFBQVEsQ0FBQ21aLElBQUksQ0FBQ0ksV0FBVyxDQUFDTixFQUFFLENBQUM7WUFDL0I7VUFDRixDQUFDLENBQUMsT0FBT3ZvQixDQUFDLEVBQUUsQ0FBQztRQUNmLENBQUU7UUFDRjBiLEtBQUssRUFBQztNQUFvQyxnQkFFMUNsVixLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUM7TUFBTSxDQUFFLENBQUMscUJBRWQsQ0FFSCxDQUVYLENBQ0gsRUFDQSxDQUFDK2Isa0JBQWtCLGlCQUNsQnhYLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3ZZLE9BQU87UUFBQ3ViLElBQUk7TUFBQSxnQkFDWHBjLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3ZZLE9BQU8sQ0FBQ0wsTUFBTSxRQUFDLFdBQXlCLENBQUMsZUFDMUNSLEtBQUEsQ0FBQW9aLGFBQUEsWUFBSyxJQUFJLENBQUM1VSxLQUFLLENBQUNzQyxlQUFlLElBQUksSUFBSSxDQUFDdEMsS0FBSyxDQUFDc0MsZUFBZSxDQUFDd0csT0FBTyxJQUFLLCtFQUFtRixDQUN0SixDQUNWLEVBRUFrSyxrQkFBa0IsSUFBSSxJQUFJLENBQUNoVCxLQUFLLENBQUNzQyxlQUFlLElBQUksSUFBSSxDQUFDdEMsS0FBSyxDQUFDc0MsZUFBZSxDQUFDRCxNQUFNLEtBQUssU0FBUyxpQkFDbEc3RyxLQUFBLENBQUFvWixhQUFBLENBQUNyWSxPQUFPO1FBQUN1WSxLQUFLLEVBQUU7VUFBRThCLE9BQU8sRUFBRSxRQUFRO1VBQUV4QixZQUFZLEVBQUUsS0FBSztVQUFFRixVQUFVLEVBQUU7UUFBbUI7TUFBRSxnQkFDekYxWixLQUFBLENBQUFvWixhQUFBLENBQUM1WSxNQUFNO1FBQUMwWixFQUFFLEVBQUMsSUFBSTtRQUFDWixLQUFLLEVBQUU7VUFBRWEsTUFBTSxFQUFFO1FBQWM7TUFBRSxHQUFDLHFCQUEyQixDQUFDLGVBQzlFbmEsS0FBQSxDQUFBb1osYUFBQTtRQUFHRSxLQUFLLEVBQUU7VUFBRWMsS0FBSyxFQUFFLE1BQU07VUFBRVIsWUFBWSxFQUFFLE9BQU87VUFBRTRCLFFBQVEsRUFBRTtRQUFTO01BQUUsR0FBQyw0SkFFckUsQ0FBQyxFQUNILElBQUksQ0FBQ2hYLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksSUFBSSxJQUFJLENBQUM5YyxLQUFLLENBQUNzQyxlQUFlLENBQUN3YSxJQUFJLENBQUNnQixjQUFjLGlCQUNoRnRpQixLQUFBLENBQUFvWixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFTSxZQUFZLEVBQUU7UUFBUTtNQUFFLGdCQUNwQzVaLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsa0JBQXdCLENBQUMsRUFBQyxHQUFHLGVBQ3JDcFosS0FBQSxDQUFBb1osYUFBQTtRQUFNRSxLQUFLLEVBQUU7VUFBRW9HLFNBQVMsRUFBRSxXQUFXO1VBQUVsRSxRQUFRLEVBQUU7UUFBUTtNQUFFLEdBQUUsSUFBSSxDQUFDaFgsS0FBSyxDQUFDc0MsZUFBZSxDQUFDd2EsSUFBSSxDQUFDZ0IsY0FBcUIsQ0FBQyxlQUNuSHRpQixLQUFBLENBQUFvWixhQUFBLENBQUMvWSxNQUFNO1FBQ0xvYixJQUFJLEVBQUMsTUFBTTtRQUNYbEIsS0FBSztRQUNMQyxJQUFJO1FBQ0psQixLQUFLLEVBQUU7VUFBRWtILFVBQVUsRUFBRTtRQUFTLENBQUU7UUFDaEMvRixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUFRO1VBQ2IsSUFBTTJFLElBQUksR0FBR3ZJLE1BQUksQ0FBQ3JTLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksQ0FBQ2dCLGNBQWM7VUFDM0QsSUFBSTtZQUNGLElBQUlWLFNBQVMsQ0FBQ0MsU0FBUyxJQUFJRCxTQUFTLENBQUNDLFNBQVMsQ0FBQ0MsU0FBUyxFQUFFO2NBQ3hERixTQUFTLENBQUNDLFNBQVMsQ0FBQ0MsU0FBUyxDQUFDMUMsSUFBSSxDQUFDO1lBQ3JDLENBQUMsTUFBTTtjQUNMLElBQU0yQyxFQUFFLEdBQUdqWixRQUFRLENBQUNzUSxhQUFhLENBQUMsVUFBVSxDQUFDO2NBQzdDMkksRUFBRSxDQUFDbG5CLEtBQUssR0FBR3VrQixJQUFJO2NBQ2YyQyxFQUFFLENBQUN6SSxLQUFLLENBQUNDLFFBQVEsR0FBRyxPQUFPO2NBQzNCd0ksRUFBRSxDQUFDekksS0FBSyxDQUFDMEksT0FBTyxHQUFHLEdBQUc7Y0FDdEJsWixRQUFRLENBQUNtWixJQUFJLENBQUNDLFdBQVcsQ0FBQ0gsRUFBRSxDQUFDO2NBQzdCQSxFQUFFLENBQUNJLE1BQU0sQ0FBQyxDQUFDO2NBQ1hyWixRQUFRLENBQUNzWixXQUFXLENBQUMsTUFBTSxDQUFDO2NBQzVCdFosUUFBUSxDQUFDbVosSUFBSSxDQUFDSSxXQUFXLENBQUNOLEVBQUUsQ0FBQztZQUMvQjtVQUNGLENBQUMsQ0FBQyxPQUFPdm9CLENBQUMsRUFBRSxDQUFDO1FBQ2YsQ0FBRTtRQUNGMGIsS0FBSyxFQUFDO01BQXNCLGdCQUU1QmxWLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQztNQUFNLENBQUUsQ0FDYixDQUFDLGVBQ1R1RSxLQUFBLENBQUFvWixhQUFBLENBQUMvWSxNQUFNO1FBQ0xvYixJQUFJLEVBQUMsTUFBTTtRQUNYbEIsS0FBSztRQUNMQyxJQUFJO1FBQ0psQixLQUFLLEVBQUU7VUFBRWtILFVBQVUsRUFBRTtRQUFTLENBQUU7UUFDaEMvRixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUFRO1VBQ2I1RCxNQUFJLENBQUNwTixRQUFRLENBQUM7WUFBRWpDLGFBQWEsRUFBRXFQLE1BQUksQ0FBQ3JTLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUksQ0FBQ2dCO1VBQWUsQ0FBQyxDQUFDO1VBQ2hGLElBQU1DLGFBQWEsR0FBR3paLFFBQVEsQ0FBQzBaLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQztVQUNyRSxJQUFJRCxhQUFhLEVBQUVBLGFBQWEsQ0FBQ3ZaLGNBQWMsQ0FBQztZQUFFQyxRQUFRLEVBQUU7VUFBUyxDQUFDLENBQUM7UUFDekUsQ0FBRTtRQUNGaU0sS0FBSyxFQUFDO01BQXNDLGdCQUU1Q2xWLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQztNQUFNLENBQUUsQ0FBQyxpQkFFZCxDQUNMLENBQ04sRUFDQSxJQUFJLENBQUMrSSxLQUFLLENBQUNzQyxlQUFlLENBQUN3YSxJQUFJLElBQUssVUFBQW1CLGlCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHFCQUFBLEVBQU07UUFDekMsSUFBTXJCLElBQUksR0FBR3pLLE1BQUksQ0FBQ3JTLEtBQUssQ0FBQ3NDLGVBQWUsQ0FBQ3dhLElBQUk7UUFDNUMsSUFBTXNCLFVBQVUsR0FBRztVQUNqQnJYLFNBQVMsRUFBRXBNLE1BQU0sRUFBQXNqQixpQkFBQSxHQUFDbkIsSUFBSSxDQUFDbGMsV0FBVyxjQUFBcWQsaUJBQUEsY0FBQUEsaUJBQUEsR0FBSSxDQUFDLENBQUM7VUFDeENqWCxXQUFXLEVBQUVyTSxNQUFNLEVBQUF1akIscUJBQUEsR0FBQ3BCLElBQUksQ0FBQ3VCLHNCQUFzQixjQUFBSCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLENBQUMsQ0FBQztVQUNyRGpYLFFBQVEsRUFBRXRNLE1BQU0sRUFBQXdqQixxQkFBQSxHQUFDckIsSUFBSSxDQUFDd0IsbUJBQW1CLGNBQUFILHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksQ0FBQztRQUNoRCxDQUFDO1FBQ0QsSUFBTUksV0FBVyxHQUFHbE0sTUFBSSxDQUFDeEwsOEJBQThCLENBQUN3TCxNQUFJLENBQUNyUyxLQUFLLENBQUN3QyxnQkFBZ0IsQ0FBQztRQUNwRixJQUFNZ2MsV0FBVyxHQUFHSixVQUFVLENBQUNyWCxTQUFTLEdBQUdxWCxVQUFVLENBQUNwWCxXQUFXLEdBQUdvWCxVQUFVLENBQUNuWCxRQUFRO1FBQ3ZGLElBQU13WCxZQUFZLEdBQUdGLFdBQVcsQ0FBQ3hYLFNBQVMsR0FBR3dYLFdBQVcsQ0FBQ3ZYLFdBQVcsR0FBR3VYLFdBQVcsQ0FBQ3RYLFFBQVE7UUFDM0YsSUFBTXlYLEdBQUcsR0FBR0QsWUFBWSxHQUFHRCxXQUFXLEdBQUdELFdBQVcsR0FBR0gsVUFBVTtRQUNqRSxJQUFNTyxLQUFLLEdBQUdELEdBQUcsQ0FBQzNYLFNBQVMsR0FBRzJYLEdBQUcsQ0FBQzFYLFdBQVcsR0FBRzBYLEdBQUcsQ0FBQ3pYLFFBQVE7UUFDNUQsb0JBQ0F6TCxLQUFBLENBQUFvWixhQUFBO1VBQUtFLEtBQUssRUFBRTtZQUFFTSxZQUFZLEVBQUU7VUFBUTtRQUFFLGdCQUNwQzVaLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsbUJBQXlCLENBQUMsRUFBQyxHQUFHLEVBQ3JDalcsaUJBQWlCLENBQUMrZixHQUFHLENBQUMzWCxTQUFTLENBQUMsRUFBQyxpQkFDbEMsRUFBQzJYLEdBQUcsQ0FBQzFYLFdBQVcsR0FBRyxDQUFDLGlCQUNsQnhMLEtBQUEsQ0FBQW9aLGFBQUE7VUFBTUUsS0FBSyxFQUFFO1lBQUVrSCxVQUFVLEVBQUU7VUFBUTtRQUFFLEdBQUMsSUFDbEMsRUFBQ3JkLGlCQUFpQixDQUFDK2YsR0FBRyxDQUFDMVgsV0FBVyxDQUFDLEVBQUMsY0FDbEMsQ0FDUCxFQUNBMFgsR0FBRyxDQUFDelgsUUFBUSxHQUFHLENBQUMsaUJBQ2Z6TCxLQUFBLENBQUFvWixhQUFBO1VBQU1FLEtBQUssRUFBRTtZQUFFa0gsVUFBVSxFQUFFO1VBQVE7UUFBRSxHQUFDLElBQ2xDLEVBQUNyZCxpQkFBaUIsQ0FBQytmLEdBQUcsQ0FBQ3pYLFFBQVEsQ0FBQyxFQUFDLFdBQy9CLENBQ1AsRUFDQTBYLEtBQUssR0FBRyxDQUFDLEtBQUtELEdBQUcsQ0FBQzFYLFdBQVcsR0FBRyxDQUFDLElBQUkwWCxHQUFHLENBQUN6WCxRQUFRLEdBQUcsQ0FBQyxDQUFDLGlCQUNyRHpMLEtBQUEsQ0FBQW9aLGFBQUE7VUFBTUUsS0FBSyxFQUFFO1lBQUVrSCxVQUFVLEVBQUUsT0FBTztZQUFFakYsVUFBVSxFQUFFO1VBQUk7UUFBRSxHQUFDLElBQ25ELEVBQUNwWSxpQkFBaUIsQ0FBQ2dnQixLQUFLLENBQUMsRUFBQyxhQUN4QixDQUNQLEVBQ0FBLEtBQUssR0FBRyxLQUFLLGlCQUNabmpCLEtBQUEsQ0FBQW9aLGFBQUE7VUFBTUUsS0FBSyxFQUFFO1lBQUVrSCxVQUFVLEVBQUUsT0FBTztZQUFFcEcsS0FBSyxFQUFFO1VBQU87UUFBRSxHQUFDLDBDQUE4QyxDQUNwRyxFQUNDdkQsTUFBSSxDQUFDclMsS0FBSyxDQUFDb0MsYUFBYSxJQUFJaVEsTUFBSSxDQUFDclMsS0FBSyxDQUFDb0MsYUFBYSxDQUFDeUQsT0FBTyxLQUFLLFNBQVMsaUJBQzFFckssS0FBQSxDQUFBb1osYUFBQTtVQUFHRSxLQUFLLEVBQUU7WUFBRWtDLFFBQVEsRUFBRSxRQUFRO1lBQUVwQixLQUFLLEVBQUUsTUFBTTtZQUFFVyxTQUFTLEVBQUUsUUFBUTtZQUFFbkIsWUFBWSxFQUFFO1VBQUU7UUFBRSxHQUFDLGdGQUVwRixDQUVGLENBQUM7TUFFUixDQUFDLENBQUUsQ0FDSSxDQUNWLEVBRUFwQyxrQkFBa0IsaUJBQ2pCeFgsS0FBQSxDQUFBb1osYUFBQSxDQUFBcFosS0FBQSxDQUFBa2IsUUFBQSxxQkFDRWxiLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzVZLE1BQU07UUFBQzBaLEVBQUUsRUFBQyxJQUFJO1FBQUNaLEtBQUssRUFBRTtVQUFFeUIsU0FBUyxFQUFFO1FBQU07TUFBRSxnQkFDMUMvYSxLQUFBLENBQUFvWixhQUFBLENBQUNqWixJQUFJO1FBQUNzUixFQUFFLEVBQUMsWUFBWTtRQUFDNkgsS0FBSyxFQUFFO1VBQUVjLEtBQUssRUFBRTtRQUFVO01BQUUsR0FBQyxZQUN2QyxFQUFDLElBQUksQ0FBQzVWLEtBQUssQ0FBQ3VDLGlCQUFpQixDQUFDak0sTUFBTSxFQUFDLEdBQzNDLENBQ0EsQ0FBQyxFQUNSLElBQUksQ0FBQzBKLEtBQUssQ0FBQ3VDLGlCQUFpQixDQUFDak0sTUFBTSxLQUFLLENBQUMsZ0JBQ3hDa0YsS0FBQSxDQUFBb1osYUFBQTtRQUFHRSxLQUFLLEVBQUU7VUFBRWMsS0FBSyxFQUFFO1FBQU87TUFBRSxHQUFDLHlFQUEwRSxDQUFDLGdCQUV4R3BhLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUs7UUFBQzZhLE1BQU07UUFBQ0QsT0FBTztRQUFDSCxJQUFJLEVBQUM7TUFBTyxnQkFDaEN6YixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNSLE1BQU0scUJBQ1hSLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2diLEdBQUcscUJBQ1JoYyxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUMyZCxVQUFVLFFBQUMsTUFBc0IsQ0FBQyxlQUN6QzNlLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQzJkLFVBQVUsUUFBQyxPQUF1QixDQUFDLGVBQzFDM2UsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDMmQsVUFBVSxRQUFDLFVBQTBCLENBQUMsZUFDN0MzZSxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUMyZCxVQUFVLFFBQUMsYUFBNkIsQ0FBQyxlQUNoRDNlLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQzJkLFVBQVUsUUFBQyxrQkFBa0MsQ0FDM0MsQ0FDQyxDQUFDLGVBQ2YzZSxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUMrYSxJQUFJLFFBQ1IsSUFBSSxDQUFDdlgsS0FBSyxDQUFDdUMsaUJBQWlCLENBQUMwWCxHQUFHLENBQUMsVUFBQzJFLFNBQVMsRUFBRUMsU0FBUyxFQUFLO1FBQzFELElBQU1DLFNBQVMsR0FBR0YsU0FBUyxDQUFDRyxVQUFVLElBQUlILFNBQVMsQ0FBQ0ksWUFBWTtRQUNoRSxJQUFNMVosSUFBSSxHQUFJd1osU0FBUyxJQUFJLElBQUksSUFBSXBrQixNQUFNLENBQUNva0IsU0FBUyxDQUFDLENBQUM1VixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsaUNBQUFwQixNQUFBLENBQ2hDd0Isa0JBQWtCLENBQUM1TyxNQUFNLENBQUNva0IsU0FBUyxDQUFDLENBQUM1VixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQzFFLElBQUk7UUFDUixJQUFNK1YsTUFBTSxHQUFHM1osSUFBSSxJQUFJLElBQUksR0FBR0EsSUFBSSxZQUFBd0MsTUFBQSxDQUFZK1csU0FBUyxDQUFFO1FBQ3pELG9CQUNFcmpCLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2diLEdBQUc7VUFDUmxkLEdBQUcsRUFBRTJrQixNQUFPO1VBQ1puSyxLQUFLLEVBQUU7WUFBRW9LLE1BQU0sRUFBRTtVQUFVLENBQUU7VUFDN0JqSixPQUFPLEVBQUUzUSxJQUFJLEdBQUc7WUFBQSxPQUFNK00sTUFBSSxDQUFDN0ksb0JBQW9CLENBQUNsRSxJQUFJLENBQUM7VUFBQSxJQUFHVztRQUFVLGdCQUVsRXpLLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ2liLElBQUkscUJBQ1RqYyxLQUFBLENBQUFvWixhQUFBO1VBQU1FLEtBQUssRUFBRTtZQUFFa0MsUUFBUSxFQUFFO1VBQVM7UUFBRSxHQUFFM0UsTUFBSSxDQUFDM0ssUUFBUSxDQUFDa1gsU0FBUyxDQUFDTyxPQUFPLElBQUlQLFNBQVMsQ0FBQ0ksWUFBWSxJQUFJLEVBQUUsQ0FBUSxDQUNuRyxDQUFDLGVBQ2J4akIsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxRQUFFbUgsU0FBUyxDQUFDNWUsS0FBSyxJQUFJLEdBQWdCLENBQUMsZUFDakR4RSxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQ1JtSCxTQUFTLENBQUN2WCxXQUFXLElBQUksSUFBSSxNQUFBUyxNQUFBLENBQU1uSixpQkFBaUIsQ0FBQzJJLElBQUksQ0FBQ0MsS0FBSyxDQUFDNU0sTUFBTSxDQUFDaWtCLFNBQVMsQ0FBQ3ZYLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLGFBQVd1WCxTQUFTLENBQUNRLFdBQVcsSUFBSSxJQUFJLE1BQUF0WCxNQUFBLENBQU1uSixpQkFBaUIsQ0FBQ2lnQixTQUFTLENBQUNRLFdBQVcsQ0FBQyxhQUFVLEdBQzdMLENBQUMsZUFDYjVqQixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQ1JtSCxTQUFTLENBQUNTLGVBQWUsSUFBSSxJQUFJLE1BQUF2WCxNQUFBLENBQU1uSixpQkFBaUIsQ0FBQzJJLElBQUksQ0FBQ0MsS0FBSyxDQUFDNU0sTUFBTSxDQUFDaWtCLFNBQVMsQ0FBQ1MsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsYUFBVSxHQUMvRyxDQUFDLGVBQ2I3akIsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxxQkFDVGpjLEtBQUEsQ0FBQW9aLGFBQUE7VUFBTUUsS0FBSyxFQUFFO1lBQUVrQyxRQUFRLEVBQUU7VUFBUTtRQUFFLEdBQUU0SCxTQUFTLENBQUNVLGdCQUFnQixJQUFJLEdBQVUsQ0FDbkUsQ0FDSCxDQUFDO01BRWhCLENBQUMsQ0FDUyxDQUNQLENBQ1IsZUFFRDlqQixLQUFBLENBQUFvWixhQUFBLENBQUM1WSxNQUFNO1FBQUMwWixFQUFFLEVBQUMsSUFBSTtRQUFDWixLQUFLLEVBQUU7VUFBRXlCLFNBQVMsRUFBRTtRQUFRO01BQUUsR0FBQyxnQkFBc0IsQ0FBQyxlQUN0RS9hLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVjLEtBQUssRUFBRSxNQUFNO1VBQUVSLFlBQVksRUFBRTtRQUFRO01BQUUsR0FBQyxrREFDRixlQUFBNVosS0FBQSxDQUFBb1osYUFBQSxpQkFBUSw2QkFBbUMsQ0FBQywrQ0FDM0YsQ0FBQyxlQUNKcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxxQkFDSFAsS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxDQUFDd2YsS0FBSztRQUFDQyxNQUFNLEVBQUM7TUFBTyxnQkFDeEJoZ0IsS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxDQUFDMGYsS0FBSyxxQkFDVGpnQixLQUFBLENBQUFvWixhQUFBLGdCQUFPLHFCQUEwQixDQUFDLGVBQ2xDcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDMVksS0FBSztRQUNKd2YsV0FBVyxFQUFDLCtCQUErQjtRQUMzQ3JsQixLQUFLLEVBQUUsSUFBSSxDQUFDMkosS0FBSyxDQUFDeUMsbUJBQW9CO1FBQ3RDa1osUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUczbUIsQ0FBQztVQUFBLE9BQUtxZCxNQUFJLENBQUNwTixRQUFRLENBQUM7WUFBRXhDLG1CQUFtQixFQUFFek4sQ0FBQyxDQUFDa2pCLE1BQU0sQ0FBQzdoQjtVQUFNLENBQUMsQ0FBQztRQUFBO01BQUMsQ0FDekUsQ0FDUyxDQUNGLENBQUMsZUFDYm1GLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzdZLElBQUksQ0FBQ3dmLEtBQUs7UUFBQ0MsTUFBTSxFQUFDO01BQU8sZ0JBQ3hCaGdCLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzdZLElBQUksQ0FBQzBmLEtBQUsscUJBQ1RqZ0IsS0FBQSxDQUFBb1osYUFBQSxnQkFBTywwQkFBK0IsQ0FBQyxlQUN2Q3BaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzFZLEtBQUs7UUFDSjhiLElBQUksRUFBQyxRQUFRO1FBQ2IvSixHQUFHLEVBQUMsT0FBTztRQUNYeU4sV0FBVyxFQUFDLFFBQVE7UUFDcEJybEIsS0FBSyxFQUFFLElBQUksQ0FBQzJKLEtBQUssQ0FBQzBDLHVCQUF3QjtRQUMxQ2laLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHM21CLENBQUM7VUFBQSxPQUFLcWQsTUFBSSxDQUFDcE4sUUFBUSxDQUFDO1lBQUV2Qyx1QkFBdUIsRUFBRTFOLENBQUMsQ0FBQ2tqQixNQUFNLENBQUM3aEI7VUFBTSxDQUFDLENBQUM7UUFBQTtNQUFDLENBQzdFLENBQ1MsQ0FBQyxlQUNibUYsS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxDQUFDMGYsS0FBSyxxQkFDVGpnQixLQUFBLENBQUFvWixhQUFBLGdCQUFPLCtCQUFvQyxDQUFDLGVBQzVDcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDMVksS0FBSztRQUNKOGIsSUFBSSxFQUFDLFFBQVE7UUFDYi9KLEdBQUcsRUFBQyxHQUFHO1FBQ1B5TixXQUFXLEVBQUMsR0FBRztRQUNmcmxCLEtBQUssRUFBRSxJQUFJLENBQUMySixLQUFLLENBQUMyQyxxQkFBc0I7UUFDeENnWixRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRzNtQixDQUFDO1VBQUEsT0FBS3FkLE1BQUksQ0FBQ3BOLFFBQVEsQ0FBQztZQUFFdEMscUJBQXFCLEVBQUUzTixDQUFDLENBQUNrakIsTUFBTSxDQUFDN2hCO1VBQU0sQ0FBQyxDQUFDO1FBQUE7TUFBQyxDQUMzRSxDQUNTLENBQ0YsQ0FBQyxlQUNibUYsS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUNMcWEsT0FBTztRQUNQalcsT0FBTyxFQUFFLElBQUksQ0FBQ0QsS0FBSyxDQUFDNkMsb0JBQXFCO1FBQ3pDb1YsUUFBUSxFQUFFLENBQUNqRixrQkFBa0IsSUFBSSxJQUFJLENBQUNoVCxLQUFLLENBQUM2QyxvQkFBcUI7UUFDakVvVCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVE1RCxNQUFJLENBQUN6QyxtQkFBbUIsQ0FBQyxDQUFDO1FBQUE7TUFBQyxnQkFFMUNwVSxLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUM7TUFBTSxDQUFFLENBQUMsa0JBRWQsQ0FDSixDQUFDLEVBQ04sSUFBSSxDQUFDK0ksS0FBSyxDQUFDNEMsbUJBQW1CLGlCQUM3QnBILEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3ZZLE9BQU87UUFDTnlZLEtBQUssRUFBRTtVQUFFeUIsU0FBUyxFQUFFO1FBQU0sQ0FBRTtRQUM1QndCLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDL1gsS0FBSyxDQUFDNEMsbUJBQW1CLENBQUN6QyxLQUFNO1FBQ2pENGIsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDL2IsS0FBSyxDQUFDNEMsbUJBQW1CLENBQUN6QztNQUFNLGdCQUVoRDNFLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3ZZLE9BQU8sQ0FBQ0wsTUFBTSxRQUFFLElBQUksQ0FBQ2dFLEtBQUssQ0FBQzRDLG1CQUFtQixDQUFDekMsS0FBSyxHQUFHLHlCQUF5QixHQUFHLGlCQUFrQyxDQUFDLEVBQ3RILElBQUksQ0FBQ0gsS0FBSyxDQUFDNEMsbUJBQW1CLENBQUN6QyxLQUFLLGlCQUNuQzNFLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVNLFlBQVksRUFBRTtRQUFRO01BQUUsR0FDakMsSUFBSSxDQUFDcFYsS0FBSyxDQUFDNEMsbUJBQW1CLENBQUN6QyxLQUFLLEVBQ3BDLElBQUksQ0FBQ0gsS0FBSyxDQUFDNEMsbUJBQW1CLENBQUN3QyxNQUFNLGVBQUEwQyxNQUFBLENBQVUsSUFBSSxDQUFDOUgsS0FBSyxDQUFDNEMsbUJBQW1CLENBQUN3QyxNQUFNLENBQ3BGLENBQ0osRUFDQSxJQUFJLENBQUNwRixLQUFLLENBQUM0QyxtQkFBbUIsQ0FBQ3pDLEtBQUssSUFBSSwwQkFBMEIsQ0FBQ2hKLElBQUksQ0FBQyxJQUFJLENBQUM2SSxLQUFLLENBQUM0QyxtQkFBbUIsQ0FBQ3pDLEtBQUssQ0FBQyxpQkFDNUczRSxLQUFBLENBQUFvWixhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFa0MsUUFBUSxFQUFFLE9BQU87VUFBRXBCLEtBQUssRUFBRSxNQUFNO1VBQUVXLFNBQVMsRUFBRTtRQUFRO01BQUUsR0FBQyxhQUN2RCxlQUFBL2EsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxxQkFBMkIsQ0FBQyxxTUFDOUMsQ0FDSixFQUNBLElBQUksQ0FBQzVVLEtBQUssQ0FBQzRDLG1CQUFtQixDQUFDekMsS0FBSyxJQUFJLHNCQUFzQixDQUFDaEosSUFBSSxDQUFDLElBQUksQ0FBQzZJLEtBQUssQ0FBQzRDLG1CQUFtQixDQUFDekMsS0FBSyxDQUFDLGlCQUN4RzNFLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVrQyxRQUFRLEVBQUUsT0FBTztVQUFFcEIsS0FBSyxFQUFFLE1BQU07VUFBRVcsU0FBUyxFQUFFO1FBQVE7TUFBRSxnQkFDakUvYSxLQUFBLENBQUFvWixhQUFBLGlCQUFRLDhCQUFvQyxDQUFDLHVFQUF3RSxlQUFBcFosS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxPQUFhLENBQUMsK0hBQzFJLENBQ0osRUFDQSxJQUFJLENBQUM1VSxLQUFLLENBQUM0QyxtQkFBbUIsQ0FBQ3pDLEtBQUssSUFBSSxzQkFBc0IsQ0FBQ2hKLElBQUksQ0FBQyxJQUFJLENBQUM2SSxLQUFLLENBQUM0QyxtQkFBbUIsQ0FBQ3pDLEtBQUssQ0FBQyxpQkFDeEczRSxLQUFBLENBQUFvWixhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFa0MsUUFBUSxFQUFFLE9BQU87VUFBRXBCLEtBQUssRUFBRSxNQUFNO1VBQUVXLFNBQVMsRUFBRTtRQUFRO01BQUUsZ0JBQ2pFL2EsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxxQkFBMkIsQ0FBQyxrRkFBOEUsZUFBQXBaLEtBQUEsQ0FBQW9aLGFBQUEsZUFBTSxXQUFlLENBQUMsa0VBQThELGVBQUFwWixLQUFBLENBQUFvWixhQUFBLGVBQU0sa0JBQXNCLENBQUMsS0FDbE8sQ0FDSixFQUNBLElBQUksQ0FBQzVVLEtBQUssQ0FBQzRDLG1CQUFtQixDQUFDekMsS0FBSyxJQUFJLGdFQUFnRSxDQUFDaEosSUFBSSxDQUM1RyxDQUFDLElBQUksQ0FBQzZJLEtBQUssQ0FBQzRDLG1CQUFtQixDQUFDekMsS0FBSyxFQUFFLElBQUksQ0FBQ0gsS0FBSyxDQUFDNEMsbUJBQW1CLENBQUN3QyxNQUFNLENBQUMsQ0FBQ3hMLE1BQU0sQ0FBQ3dCLE9BQU8sQ0FBQyxDQUFDK2hCLElBQUksQ0FBQyxHQUFHLENBQ3hHLENBQUMsaUJBQ0MzaEIsS0FBQSxDQUFBb1osYUFBQTtRQUFHRSxLQUFLLEVBQUU7VUFBRWtDLFFBQVEsRUFBRSxPQUFPO1VBQUVwQixLQUFLLEVBQUUsTUFBTTtVQUFFVyxTQUFTLEVBQUU7UUFBUTtNQUFFLGdCQUNqRS9hLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsd0JBQThCLENBQUMseUpBQ3RDLENBQ0osRUFDQSxJQUFJLENBQUM1VSxLQUFLLENBQUM0QyxtQkFBbUIsQ0FBQzJjLElBQUksaUJBQ2xDL2pCLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVrQyxRQUFRLEVBQUUsT0FBTztVQUFFcEIsS0FBSyxFQUFFLE1BQU07VUFBRVcsU0FBUyxFQUFFO1FBQVE7TUFBRSxHQUNoRSxJQUFJLENBQUN2VyxLQUFLLENBQUM0QyxtQkFBbUIsQ0FBQzJjLElBQy9CLENBQ0osRUFDQSxJQUFJLENBQUN2ZixLQUFLLENBQUM0QyxtQkFBbUIsQ0FBQ1AsTUFBTSxpQkFDcEM3RyxLQUFBLENBQUFvWixhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFa0MsUUFBUSxFQUFFLFFBQVE7VUFBRXBCLEtBQUssRUFBRSxNQUFNO1VBQUVXLFNBQVMsRUFBRTtRQUFRO01BQUUsZ0JBQ2xFL2EsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxTQUFlLENBQUMsS0FBQyxFQUFDLElBQUksQ0FBQzVVLEtBQUssQ0FBQzRDLG1CQUFtQixDQUFDUCxNQUFNLENBQUNtZCxTQUFTLElBQUksSUFBSSxNQUFBMVgsTUFBQSxDQUFNLElBQUksQ0FBQzlILEtBQUssQ0FBQzRDLG1CQUFtQixDQUFDUCxNQUFNLENBQUNtZCxTQUFTLGNBQVcsR0FBRyxFQUFDLEdBQUMsRUFBQyxJQUFJLENBQUN4ZixLQUFLLENBQUM0QyxtQkFBbUIsQ0FBQ1AsTUFBTSxDQUFDb2QsZ0JBQWdCLElBQUksSUFBSSxPQUFBM1gsTUFBQSxDQUFPLElBQUksQ0FBQzlILEtBQUssQ0FBQzRDLG1CQUFtQixDQUFDUCxNQUFNLENBQUNvZCxnQkFBZ0IsMkJBQXdCLEVBQ3pTLENBQ0osZUFDRGprQixLQUFBLENBQUFvWixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFeUgsVUFBVSxFQUFFLFVBQVU7VUFBRXJCLFNBQVMsRUFBRSxZQUFZO1VBQUUzRSxTQUFTLEVBQUU7UUFBUTtNQUFFLEdBQUVpRyxJQUFJLENBQUNDLFNBQVMsQ0FBQyxJQUFJLENBQUN6YyxLQUFLLENBQUM0QyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFPLENBQzVJLENBRVgsQ0FDSCxlQUVEcEgsS0FBQSxDQUFBb1osYUFBQSxDQUFDNVksTUFBTTtRQUFDMFosRUFBRSxFQUFDLElBQUk7UUFBQ1osS0FBSyxFQUFFO1VBQUV5QixTQUFTLEVBQUU7UUFBUTtNQUFFLEdBQUMscUJBQTJCLENBQUMsZUFDM0UvYSxLQUFBLENBQUFvWixhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFa0MsUUFBUSxFQUFFLFFBQVE7VUFBRXBCLEtBQUssRUFBRSxNQUFNO1VBQUVELE1BQU0sRUFBRTtRQUFhO01BQUUsR0FBQyxXQUM1RCxlQUFBbmEsS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxvQkFBMEIsQ0FBQyxVQUFNLGVBQUFwWixLQUFBLENBQUFvWixhQUFBLGlCQUFRLDJCQUFpQyxDQUFDLGdFQUE0RCxFQUFDLEdBQUcsRUFDM0pySixLQUFLLENBQUM0SyxlQUFlLGdCQUNwQjNhLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ2paLElBQUk7UUFBQ3NSLEVBQUUsRUFBQztNQUFxRCxHQUFDLFVBQWMsQ0FBQyxnQkFFOUV6UixLQUFBLENBQUFvWixhQUFBLGlCQUFRLFVBQWdCLENBQ3pCLEVBQUMsR0FDRCxDQUFDLGVBQ0pwWixLQUFBLENBQUFvWixhQUFBLENBQUM3WSxJQUFJLHFCQUNIUCxLQUFBLENBQUFvWixhQUFBLENBQUM3WSxJQUFJLENBQUN3ZixLQUFLO1FBQUNDLE1BQU0sRUFBQztNQUFPLGdCQUN4QmhnQixLQUFBLENBQUFvWixhQUFBLENBQUM3WSxJQUFJLENBQUMwZixLQUFLLHFCQUNUamdCLEtBQUEsQ0FBQW9aLGFBQUEsZ0JBQU8sOEJBQW1DLENBQUMsZUFDM0NwWixLQUFBLENBQUFvWixhQUFBLENBQUMxWSxLQUFLO1FBQ0o4YixJQUFJLEVBQUMsUUFBUTtRQUNiL0osR0FBRyxFQUFDLEdBQUc7UUFDUHFPLElBQUksRUFBQyxHQUFHO1FBQ1JaLFdBQVcsRUFBQyxLQUFLO1FBQ2pCcmxCLEtBQUssRUFBRSxJQUFJLENBQUMySixLQUFLLENBQUN1QixpQkFBa0I7UUFDcENvYSxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRzNtQixDQUFDO1VBQUEsT0FBS3FkLE1BQUksQ0FBQ3BOLFFBQVEsQ0FBQztZQUFFMUQsaUJBQWlCLEVBQUV2TSxDQUFDLENBQUNrakIsTUFBTSxDQUFDN2hCO1VBQU0sQ0FBQyxDQUFDO1FBQUE7TUFBQyxDQUN2RSxDQUNTLENBQUMsZUFDYm1GLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzdZLElBQUksQ0FBQzBmLEtBQUsscUJBQ1RqZ0IsS0FBQSxDQUFBb1osYUFBQSxnQkFBTyxjQUFtQixDQUFDLGVBQzNCcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDMVksS0FBSztRQUNKd2YsV0FBVyxFQUFDLDJCQUEyQjtRQUN2Q3JsQixLQUFLLEVBQUUsSUFBSSxDQUFDMkosS0FBSyxDQUFDd0IsV0FBWTtRQUM5Qm1hLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHM21CLENBQUM7VUFBQSxPQUFLcWQsTUFBSSxDQUFDcE4sUUFBUSxDQUFDO1lBQUV6RCxXQUFXLEVBQUV4TSxDQUFDLENBQUNrakIsTUFBTSxDQUFDN2hCO1VBQU0sQ0FBQyxDQUFDO1FBQUE7TUFBQyxDQUNqRSxDQUNTLENBQ0YsQ0FBQyxlQUNibUYsS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUFDb2EsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7VUFBQSxPQUFRNUQsTUFBSSxDQUFDM0QsNEJBQTRCLENBQUMsQ0FBQztRQUFBLENBQUM7UUFBQ3VKLFFBQVEsRUFBRSxDQUFDakY7TUFBbUIsZ0JBQ3hGeFgsS0FBQSxDQUFBb1osYUFBQSxDQUFDM1ksSUFBSTtRQUFDaEYsSUFBSSxFQUFDO01BQVksQ0FBRSxDQUFDLGtCQUVwQixDQUFDLGVBQ1R1RSxLQUFBLENBQUFvWixhQUFBLENBQUM3WSxJQUFJLENBQUMwZixLQUFLO1FBQUMzRyxLQUFLLEVBQUU7VUFBRXlCLFNBQVMsRUFBRTtRQUFNO01BQUUsZ0JBQ3RDL2EsS0FBQSxDQUFBb1osYUFBQSxnQkFBTyxrQkFBdUIsQ0FBQyxlQUMvQnBaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzdZLElBQUksQ0FBQzhmLFFBQVE7UUFDWkMsSUFBSSxFQUFFLENBQUU7UUFDUkosV0FBVyxFQUFDLFNBQVM7UUFDckJybEIsS0FBSyxFQUFFLElBQUksQ0FBQzJKLEtBQUssQ0FBQ3lCLFlBQWE7UUFDL0JrYSxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRzNtQixDQUFDO1VBQUEsT0FBS3FkLE1BQUksQ0FBQ3BOLFFBQVEsQ0FBQztZQUFFeEQsWUFBWSxFQUFFek0sQ0FBQyxDQUFDa2pCLE1BQU0sQ0FBQzdoQjtVQUFNLENBQUMsQ0FBQztRQUFBO01BQUMsQ0FDbEUsQ0FDUyxDQUFDLGVBQ2JtRixLQUFBLENBQUFvWixhQUFBLENBQUMvWSxNQUFNO1FBQUNrYSxLQUFLO1FBQUNFLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUTVELE1BQUksQ0FBQ3RELDRCQUE0QixDQUFDLENBQUM7UUFBQSxDQUFDO1FBQUNrSixRQUFRLEVBQUUsQ0FBQ2pGO01BQW1CLGdCQUM5RnhYLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzNZLElBQUk7UUFBQ2hGLElBQUksRUFBQztNQUFRLENBQUUsQ0FBQyxVQUVoQixDQUFDLGVBQ1R1RSxLQUFBLENBQUFvWixhQUFBLENBQUMvWSxNQUFNO1FBQUMrWixLQUFLLEVBQUMsT0FBTztRQUFDSyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVE1RCxNQUFJLENBQUNqRCx5QkFBeUIsQ0FBQyxDQUFDO1FBQUEsQ0FBQztRQUFDNkksUUFBUSxFQUFFLENBQUNqRjtNQUFtQixnQkFDbkd4WCxLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUM7TUFBTSxDQUFFLENBQUMsZUFFZCxDQUNKLENBQUMsRUFDTixJQUFJLENBQUMrSSxLQUFLLENBQUMrQyxlQUFlLGlCQUN6QnZILEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3ZZLE9BQU87UUFDTnlZLEtBQUssRUFBRTtVQUFFeUIsU0FBUyxFQUFFO1FBQU0sQ0FBRTtRQUM1QndCLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDL1gsS0FBSyxDQUFDK0MsZUFBZSxDQUFDNUMsS0FBTTtRQUM3QzRiLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQy9iLEtBQUssQ0FBQytDLGVBQWUsQ0FBQzVDO01BQU0sZ0JBRTVDM0UsS0FBQSxDQUFBb1osYUFBQSxDQUFDdlksT0FBTyxDQUFDTCxNQUFNLFFBQUUsSUFBSSxDQUFDZ0UsS0FBSyxDQUFDK0MsZUFBZSxDQUFDNUMsS0FBSyxHQUFHLHlCQUF5QixHQUFHLG9CQUFxQyxDQUFDLGVBQ3RIM0UsS0FBQSxDQUFBb1osYUFBQTtRQUFLRSxLQUFLLEVBQUU7VUFBRXlILFVBQVUsRUFBRSxVQUFVO1VBQUVyQixTQUFTLEVBQUU7UUFBYTtNQUFFLEdBQUVzQixJQUFJLENBQUNDLFNBQVMsQ0FBQyxJQUFJLENBQUN6YyxLQUFLLENBQUMrQyxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBTyxDQUNwSCxDQUVKLENBQUMsR0FDTixJQUFJLEVBRVBzUixjQUFjLGdCQUNmN1ksS0FBQSxDQUFBb1osYUFBQSxDQUFDclksT0FBTztRQUFDME0sRUFBRSxFQUFDO01BQWtCLGdCQUM1QnpOLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzVZLE1BQU07UUFBQzBaLEVBQUUsRUFBQztNQUFJLEdBQUMsVUFBZ0IsQ0FBQyxlQUNqQ2xhLEtBQUEsQ0FBQW9aLGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVjLEtBQUssRUFBRSxNQUFNO1VBQUVSLFlBQVksRUFBRTtRQUFRO01BQUUsZ0JBQUM1WixLQUFBLENBQUFvWixhQUFBLGlCQUFRLG9CQUEwQixDQUFDLHFDQUFvQyxDQUFDLEVBQzNILENBQUNySixLQUFLLENBQUNwQyxlQUFlLEtBQUssSUFBSSxDQUFDbkosS0FBSyxDQUFDaUIsTUFBTSxDQUFDM0ssTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMwSixLQUFLLENBQUNrQixZQUFZLENBQUM1SyxNQUFNLEdBQUcsQ0FBQyxDQUFDLGdCQUM3RmtGLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3ZZLE9BQU87UUFBQ3ViLElBQUk7UUFBQ1gsSUFBSSxFQUFDLE9BQU87UUFBQ25DLEtBQUssRUFBRTtVQUFFTSxZQUFZLEVBQUU7UUFBUztNQUFFLEdBQUMsU0FDckQsZUFBQTVaLEtBQUEsQ0FBQW9aLGFBQUEsaUJBQVEsa0RBQXVELENBQUMsd0ZBQ2hFLENBQUMsR0FDUixJQUFJLGVBQ1JwWixLQUFBLENBQUFvWixhQUFBLENBQUM1WSxNQUFNO1FBQUMwWixFQUFFLEVBQUM7TUFBSSxHQUFDLGVBQXFCLENBQUMsRUFDckMsSUFBSSxDQUFDMVYsS0FBSyxDQUFDaUIsTUFBTSxDQUFDM0ssTUFBTSxLQUFLLENBQUMsR0FDN0JxZSxtQkFBbUIsZ0JBQ2pCblosS0FBQSxDQUFBb1osYUFBQTtRQUFHRSxLQUFLLEVBQUU7VUFBRWMsS0FBSyxFQUFFO1FBQU87TUFBRSxnQkFDMUJwYSxLQUFBLENBQUFvWixhQUFBLENBQUN4WSxNQUFNO1FBQUNzakIsTUFBTTtRQUFDbkYsTUFBTTtRQUFDdEQsSUFBSSxFQUFDO01BQU8sQ0FBRSxDQUFDLDBDQUNwQyxDQUFDLGdCQUVKemIsS0FBQSxDQUFBb1osYUFBQTtRQUFHRSxLQUFLLEVBQUU7VUFBRWMsS0FBSyxFQUFFO1FBQU87TUFBRSxHQUFDLG9CQUFxQixDQUNuRCxnQkFFRHBhLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3pZLElBQUk7UUFBQ3dqQixPQUFPO1FBQUNDLE9BQU87TUFBQSxHQUNsQixJQUFJLENBQUM1ZixLQUFLLENBQUNpQixNQUFNLENBQUNnWixHQUFHLENBQUMsVUFBQ3ZWLEtBQUssRUFBRW1hLFNBQVMsRUFBSztRQUMzQyxJQUFNZ0IsT0FBTyxHQUFHbmIsS0FBSyxDQUFDbWIsT0FBTyxJQUFJLElBQUksR0FDakNsbEIsTUFBTSxDQUFDK0osS0FBSyxDQUFDbWIsT0FBTyxDQUFDLEdBQ3BCbmIsS0FBSyxDQUFDb2IsUUFBUSxJQUFJLElBQUksR0FBR25sQixNQUFNLENBQUMrSixLQUFLLENBQUNvYixRQUFRLENBQUMsR0FBRyxJQUFLO1FBQzVELElBQU1DLFVBQVUsR0FBR3JiLEtBQUssQ0FBQ3FiLFVBQVUsSUFBSSxJQUFJLEdBQUdwbEIsTUFBTSxDQUFDK0osS0FBSyxDQUFDcWIsVUFBVSxDQUFDLEdBQUcsSUFBSTtRQUM3RSxJQUFNQyxZQUFZLEdBQUd0YixLQUFLLENBQUNzYixZQUFZLElBQUksSUFBSSxHQUFHcmxCLE1BQU0sQ0FBQytKLEtBQUssQ0FBQ3NiLFlBQVksQ0FBQyxHQUFHLElBQUk7UUFDbkYsSUFBTUMsTUFBTSxHQUFHdGxCLE1BQU0sQ0FBQ3FOLFFBQVEsQ0FBQzZYLE9BQU8sQ0FBQyxNQUFBL1gsTUFBQSxDQUNoQytYLE9BQU8sU0FBQS9YLE1BQUEsQ0FBTStYLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFDeEMsSUFBSTtRQUNSLElBQU1LLFVBQVUsR0FBR3ZsQixNQUFNLENBQUNxTixRQUFRLENBQUMrWCxVQUFVLENBQUMsSUFBSUEsVUFBVSxJQUFJLENBQUMsYUFBQWpZLE1BQUEsQ0FDbkR1SyxNQUFJLENBQUN6TCxTQUFTLENBQUNtWixVQUFVLENBQUMsWUFDcEMsSUFBSTtRQUNSLElBQU1JLFVBQVUsR0FBR3hsQixNQUFNLENBQUNxTixRQUFRLENBQUNnWSxZQUFZLENBQUMsSUFBSUEsWUFBWSxJQUFJLENBQUMsYUFBQWxZLE1BQUEsQ0FDdkR1SyxNQUFJLENBQUN6TCxTQUFTLENBQUNvWixZQUFZLENBQUMsWUFDdEMsSUFBSTtRQUNSLElBQU1JLFFBQVEsR0FBRyxDQUFDSCxNQUFNLEVBQUVDLFVBQVUsRUFBRUMsVUFBVSxDQUFDLENBQUN2bUIsTUFBTSxDQUFDd0IsT0FBTyxDQUFDO1FBQ2pFLElBQU1pbEIsSUFBSSxHQUFHRCxRQUFRLENBQUM5cEIsTUFBTSxZQUFBd1IsTUFBQSxDQUFTc1ksUUFBUSxDQUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFLLEVBQUU7UUFDaEUsb0JBQ0UzaEIsS0FBQSxDQUFBb1osYUFBQSxDQUFDelksSUFBSSxDQUFDMmIsSUFBSTtVQUFDeGQsR0FBRyxFQUFFb0ssS0FBSyxDQUFDUixJQUFJLElBQUlRLEtBQUssQ0FBQ3VFLEVBQUUsSUFBSTRWO1FBQVUsZ0JBQ2xEcmpCLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3pZLElBQUksQ0FBQzBaLE9BQU8scUJBQ1hyYSxLQUFBLENBQUFvWixhQUFBLENBQUN6WSxJQUFJLENBQUNILE1BQU0sUUFDVDBJLEtBQUssQ0FBQ1IsSUFBSSxJQUFJUSxLQUFLLENBQUN1RSxFQUFFLEdBQ3JCc0MsS0FBSyxDQUFDcEMsZUFBZSxnQkFDbkIzTixLQUFBLENBQUFvWixhQUFBLENBQUNqWixJQUFJO1VBQUNzUixFQUFFLDhCQUFBbkYsTUFBQSxDQUE4QndCLGtCQUFrQixDQUFDNUUsS0FBSyxDQUFDUixJQUFJLElBQUlRLEtBQUssQ0FBQ3VFLEVBQUUsQ0FBQztRQUFHLEdBQUMsR0FDakYsRUFBQ3ZFLEtBQUssQ0FBQzRULE1BQU0sSUFBSSxJQUFJLEdBQUc1VCxLQUFLLENBQUM0VCxNQUFNLEdBQUcsS0FBSyxFQUFDLEtBQUcsRUFBQ2pHLE1BQUksQ0FBQzNLLFFBQVEsQ0FBQ2hELEtBQUssQ0FBQ1IsSUFBSSxJQUFJUSxLQUFLLENBQUN1RSxFQUFFLElBQUksRUFBRSxDQUN4RixDQUFDLGdCQUVQek4sS0FBQSxDQUFBb1osYUFBQSxlQUFNLEdBQUMsRUFBQ2xRLEtBQUssQ0FBQzRULE1BQU0sSUFBSSxJQUFJLEdBQUc1VCxLQUFLLENBQUM0VCxNQUFNLEdBQUcsS0FBSyxFQUFDLEtBQUcsRUFBQ2pHLE1BQUksQ0FBQzNLLFFBQVEsQ0FBQ2hELEtBQUssQ0FBQ1IsSUFBSSxJQUFJUSxLQUFLLENBQUN1RSxFQUFFLElBQUksRUFBRSxDQUFRLENBQzNHLGdCQUVEek4sS0FBQSxDQUFBb1osYUFBQSxlQUFNLEdBQUMsRUFBQ2xRLEtBQUssQ0FBQzRULE1BQU0sSUFBSSxJQUFJLEdBQUc1VCxLQUFLLENBQUM0VCxNQUFNLEdBQUcsS0FBSyxFQUFDLHFCQUF5QixDQUVwRSxDQUFDLGVBQ2Q5YyxLQUFBLENBQUFvWixhQUFBLENBQUN6WSxJQUFJLENBQUNta0IsV0FBVyxRQUNkNWIsS0FBSyxDQUFDNmIsSUFBSSxHQUFHLElBQUloUSxJQUFJLENBQUM1VixNQUFNLENBQUMrSixLQUFLLENBQUM2YixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQ3JZLGNBQWMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLEVBQ3RGbVksSUFDZSxDQUNOLENBQ0wsQ0FBQztNQUVoQixDQUFDLENBQ0csQ0FDUCxlQUVEN2tCLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzVZLE1BQU07UUFBQzBaLEVBQUUsRUFBQyxJQUFJO1FBQUNaLEtBQUssRUFBRTtVQUFFeUIsU0FBUyxFQUFFO1FBQU07TUFBRSxHQUFDLHdCQUFzQixFQUFDLElBQUksQ0FBQ3ZXLEtBQUssQ0FBQ2tCLFlBQVksQ0FBQzVLLE1BQU0sRUFBQyxHQUFTLENBQUMsRUFDNUcsSUFBSSxDQUFDMEosS0FBSyxDQUFDa0IsWUFBWSxDQUFDNUssTUFBTSxLQUFLLENBQUMsR0FDbkNxZSxtQkFBbUIsZ0JBQ2pCblosS0FBQSxDQUFBb1osYUFBQTtRQUFHRSxLQUFLLEVBQUU7VUFBRWMsS0FBSyxFQUFFO1FBQU87TUFBRSxnQkFDMUJwYSxLQUFBLENBQUFvWixhQUFBLENBQUN4WSxNQUFNO1FBQUNzakIsTUFBTTtRQUFDbkYsTUFBTTtRQUFDdEQsSUFBSSxFQUFDO01BQU8sQ0FBRSxDQUFDLHVDQUNwQyxDQUFDLGdCQUVKemIsS0FBQSxDQUFBb1osYUFBQTtRQUFHRSxLQUFLLEVBQUU7VUFBRWMsS0FBSyxFQUFFO1FBQU87TUFBRSxHQUFDLDBCQUEyQixDQUN6RCxnQkFFRHBhLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3pZLElBQUk7UUFBQ3dqQixPQUFPO1FBQUNDLE9BQU87TUFBQSxHQUNsQixJQUFJLENBQUM1ZixLQUFLLENBQUNrQixZQUFZLENBQUMrWSxHQUFHLENBQUMsVUFBQ3VHLEVBQUUsRUFBRTNCLFNBQVMsRUFBSztRQUM5QyxJQUFNNEIsR0FBRyxHQUFHRCxFQUFFLENBQUNuVCxJQUFJLElBQUltVCxFQUFFLENBQUN2WCxFQUFFLElBQUksRUFBRTtRQUNsQyxJQUFNakMsV0FBVyxHQUFHd1osRUFBRSxDQUFDRSxhQUFhLElBQUksSUFBSSxHQUFHL2xCLE1BQU0sQ0FBQzZsQixFQUFFLENBQUNFLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJO1FBQ3BGLG9CQUNFbGxCLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3pZLElBQUksQ0FBQzJiLElBQUk7VUFBQ3hkLEdBQUcsRUFBRW1tQixHQUFHLElBQUk1QjtRQUFVLGdCQUMvQnJqQixLQUFBLENBQUFvWixhQUFBLENBQUN6WSxJQUFJLENBQUMwWixPQUFPLHFCQUNYcmEsS0FBQSxDQUFBb1osYUFBQSxDQUFDelksSUFBSSxDQUFDSCxNQUFNLFFBQ1R5a0IsR0FBRyxHQUNGbFYsS0FBSyxDQUFDcEMsZUFBZSxnQkFDbkIzTixLQUFBLENBQUFvWixhQUFBLENBQUNqWixJQUFJO1VBQUNzUixFQUFFLG9DQUFBbkYsTUFBQSxDQUFvQ3dCLGtCQUFrQixDQUFDNU8sTUFBTSxDQUFDK2xCLEdBQUcsQ0FBQyxDQUFDO1FBQUcsR0FDM0VwTyxNQUFJLENBQUMzSyxRQUFRLENBQUMrWSxHQUFHLENBQ2QsQ0FBQyxnQkFFUGpsQixLQUFBLENBQUFvWixhQUFBLGVBQU92QyxNQUFJLENBQUMzSyxRQUFRLENBQUMrWSxHQUFHLENBQVEsQ0FDakMsR0FFRHBPLE1BQUksQ0FBQzNLLFFBQVEsQ0FBQytZLEdBQUcsQ0FDbEIsRUFDQXpaLFdBQVcsaUJBQ1Z4TCxLQUFBLENBQUFvWixhQUFBO1VBQU1FLEtBQUssRUFBRTtZQUFFa0gsVUFBVSxFQUFFLE9BQU87WUFBRWhGLFFBQVEsRUFBRSxRQUFRO1lBQUVwQixLQUFLLEVBQUU7VUFBVTtRQUFFLEdBQUMsV0FBZSxDQUVsRixDQUFDLGVBQ2RwYSxLQUFBLENBQUFvWixhQUFBLENBQUN6WSxJQUFJLENBQUNta0IsV0FBVyxRQUNkRSxFQUFFLENBQUNucUIsS0FBSyxJQUFJLElBQUksTUFBQXlSLE1BQUEsQ0FBTTBZLEVBQUUsQ0FBQ25xQixLQUFLLFlBQVVtcUIsRUFBRSxDQUFDdFQsVUFBVSxJQUFJLElBQUksTUFBQXBGLE1BQUEsQ0FBTW5KLGlCQUFpQixDQUFDNmhCLEVBQUUsQ0FBQ3RULFVBQVUsQ0FBQyxhQUFVLG9CQUM5RixDQUNOLENBQ0wsQ0FBQztNQUVoQixDQUFDLENBQ0csQ0FFRCxDQUFDLEdBQ04sSUFBSSxlQUVSMVIsS0FBQSxDQUFBb1osYUFBQSxDQUFDclksT0FBTyxxQkFDTmYsS0FBQSxDQUFBb1osYUFBQSxDQUFDL1ksTUFBTTtRQUFDa2EsS0FBSztRQUFDa0IsSUFBSSxFQUFDLE9BQU87UUFBQ2hCLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUTVELE1BQUksQ0FBQ3BOLFFBQVEsQ0FBQztZQUFFN0UsWUFBWSxFQUFFLENBQUNpUyxNQUFJLENBQUNyUyxLQUFLLENBQUNJO1VBQWEsQ0FBQyxDQUFDO1FBQUE7TUFBQyxnQkFDbEc1RSxLQUFBLENBQUFvWixhQUFBLENBQUMzWSxJQUFJO1FBQUNoRixJQUFJLEVBQUM7TUFBTSxDQUFFLENBQUMsRUFDbkIsSUFBSSxDQUFDK0ksS0FBSyxDQUFDSSxZQUFZLEdBQUcsTUFBTSxHQUFHLE1BQU0sRUFBQyx5QkFDckMsQ0FBQyxFQUNSLElBQUksQ0FBQ0osS0FBSyxDQUFDSSxZQUFZLGlCQUN0QjVFLEtBQUEsQ0FBQW9aLGFBQUE7UUFBS0UsS0FBSyxFQUFFO1VBQUV5QixTQUFTLEVBQUU7UUFBUztNQUFFLGdCQUNsQy9hLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzVZLE1BQU07UUFBQzBaLEVBQUUsRUFBQztNQUFJLEdBQUMsd0JBQThCLENBQUMsZUFDL0NsYSxLQUFBLENBQUFvWixhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUUsTUFBTTtVQUFFUixZQUFZLEVBQUU7UUFBUTtNQUFFLGdCQUFDNVosS0FBQSxDQUFBb1osYUFBQSxpQkFBUSxvQkFBMEIsQ0FBQyxzQ0FBcUMsQ0FBQyxFQUM1SCxJQUFJLENBQUM1VSxLQUFLLENBQUNtQixLQUFLLENBQUM3SyxNQUFNLEtBQUssQ0FBQyxnQkFDNUJrRixLQUFBLENBQUFvWixhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFYyxLQUFLLEVBQUU7UUFBTztNQUFFLEdBQUMsaURBQWtELENBQUMsZ0JBRWhGcGEsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSztRQUFDNGEsT0FBTyxFQUFDLE1BQU07UUFBQ0MsTUFBTTtNQUFBLGdCQUMxQjdiLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQ1IsTUFBTSxxQkFDWFIsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDZ2IsR0FBRyxxQkFDUmhjLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQzJkLFVBQVUsUUFBQyxNQUFzQixDQUFDLGVBQ3pDM2UsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDMmQsVUFBVSxRQUFDLE1BQXNCLENBQUMsZUFDekMzZSxLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUMyZCxVQUFVLFFBQUMsUUFBd0IsQ0FBQyxlQUMzQzNlLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQzJkLFVBQVUsUUFBQyxlQUErQixDQUN4QyxDQUNDLENBQUMsZUFDZjNlLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3BZLEtBQUssQ0FBQythLElBQUksUUFDUixJQUFJLENBQUN2WCxLQUFLLENBQUNtQixLQUFLLENBQUM4WSxHQUFHLENBQUMsVUFBQzBHLElBQUksRUFBRTlCLFNBQVM7UUFBQSxvQkFDcENyakIsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDZ2IsR0FBRztVQUFDbGQsR0FBRyxLQUFBd04sTUFBQSxDQUFLNlksSUFBSSxDQUFDdFQsSUFBSSxJQUFJd1IsU0FBUyxPQUFBL1csTUFBQSxDQUFJNlksSUFBSSxDQUFDQyxJQUFJLElBQUksQ0FBQztRQUFHLGdCQUM1RHBsQixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLHFCQUFDamMsS0FBQSxDQUFBb1osYUFBQSxlQUFPdkMsTUFBSSxDQUFDM0ssUUFBUSxDQUFDaVosSUFBSSxDQUFDdFQsSUFBSSxJQUFJc1QsSUFBSSxDQUFDMVgsRUFBRSxJQUFJLEVBQUUsQ0FBUSxDQUFhLENBQUMsZUFDakZ6TixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQUVrSixJQUFJLENBQUNDLElBQUksSUFBSSxJQUFJLEdBQUdELElBQUksQ0FBQ0MsSUFBSSxHQUFHLEdBQWdCLENBQUMsZUFDOURwbEIsS0FBQSxDQUFBb1osYUFBQSxDQUFDcFksS0FBSyxDQUFDaWIsSUFBSSxRQUFFa0osSUFBSSxDQUFDRSxNQUFNLElBQUksSUFBSSxHQUFHRixJQUFJLENBQUNFLE1BQU0sR0FBSUYsSUFBSSxDQUFDelQsVUFBVSxJQUFJLElBQUksTUFBQXBGLE1BQUEsQ0FBTW5KLGlCQUFpQixDQUFDZ2lCLElBQUksQ0FBQ3pULFVBQVUsQ0FBQyxhQUFVLEdBQWlCLENBQUMsZUFDN0kxUixLQUFBLENBQUFvWixhQUFBLENBQUNwWSxLQUFLLENBQUNpYixJQUFJLFFBQUVrSixJQUFJLENBQUNELGFBQWEsSUFBSSxJQUFJLEdBQUdDLElBQUksQ0FBQ0QsYUFBYSxHQUFHLEdBQWdCLENBQ3RFLENBQUM7TUFBQSxDQUNiLENBQ1MsQ0FDUCxDQUVOLENBRUEsQ0FBQyxlQUVWbGxCLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3RZLEtBQUs7UUFBQ3drQixJQUFJLEVBQUUsSUFBSSxDQUFDOWdCLEtBQUssQ0FBQ0ssWUFBYTtRQUFDMGdCLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUTFPLE1BQUksQ0FBQ3BOLFFBQVEsQ0FBQztZQUFFNUUsWUFBWSxFQUFFO1VBQU0sQ0FBQyxDQUFDO1FBQUEsQ0FBQztRQUFDNFcsSUFBSSxFQUFDO01BQU8sZ0JBQ3ZHemIsS0FBQSxDQUFBb1osYUFBQSxDQUFDdFksS0FBSyxDQUFDTixNQUFNLFFBQUMsMkJBQXVDLENBQUMsZUFDdERSLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3RZLEtBQUssQ0FBQ3VaLE9BQU8scUJBQ1pyYSxLQUFBLENBQUFvWixhQUFBLENBQUM3WSxJQUFJLHFCQUNIUCxLQUFBLENBQUFvWixhQUFBLENBQUM3WSxJQUFJLENBQUMwZixLQUFLLHFCQUNUamdCLEtBQUEsQ0FBQW9aLGFBQUEsZ0JBQU8sdUJBQTRCLENBQUMsZUFDcENwWixLQUFBLENBQUFvWixhQUFBLENBQUMxWSxLQUFLO1FBQ0p3ZixXQUFXLEVBQUMsNkJBQTZCO1FBQ3pDcmxCLEtBQUssRUFBRSxJQUFJLENBQUMySixLQUFLLENBQUNNLGFBQWEsQ0FBQ2lTLGVBQWdCO1FBQ2hEb0osUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUczbUIsQ0FBQztVQUFBLE9BQUtxZCxNQUFJLENBQUNwTixRQUFRLENBQUM7WUFBRTNFLGFBQWEsRUFBQXhHLGFBQUEsQ0FBQUEsYUFBQSxLQUFPdVksTUFBSSxDQUFDclMsS0FBSyxDQUFDTSxhQUFhO2NBQUVpUyxlQUFlLEVBQUV2ZCxDQUFDLENBQUNrakIsTUFBTSxDQUFDN2hCO1lBQUs7VUFBRyxDQUFDLENBQUM7UUFBQTtNQUFDLENBQ3JILENBQ1MsQ0FBQyxlQUNibUYsS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxDQUFDMGYsS0FBSyxxQkFDVGpnQixLQUFBLENBQUFvWixhQUFBLGdCQUFPLHVCQUE0QixDQUFDLGVBQ3BDcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDMVksS0FBSztRQUNKd2YsV0FBVyxFQUFDLDZCQUE2QjtRQUN6Q3JsQixLQUFLLEVBQUUsSUFBSSxDQUFDMkosS0FBSyxDQUFDTSxhQUFhLENBQUNrUyxlQUFnQjtRQUNoRG1KLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHM21CLENBQUM7VUFBQSxPQUFLcWQsTUFBSSxDQUFDcE4sUUFBUSxDQUFDO1lBQUUzRSxhQUFhLEVBQUF4RyxhQUFBLENBQUFBLGFBQUEsS0FBT3VZLE1BQUksQ0FBQ3JTLEtBQUssQ0FBQ00sYUFBYTtjQUFFa1MsZUFBZSxFQUFFeGQsQ0FBQyxDQUFDa2pCLE1BQU0sQ0FBQzdoQjtZQUFLO1VBQUcsQ0FBQyxDQUFDO1FBQUE7TUFBQyxDQUNySCxDQUNTLENBQUMsZUFDYm1GLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzdZLElBQUksQ0FBQzBmLEtBQUsscUJBQ1RqZ0IsS0FBQSxDQUFBb1osYUFBQSxnQkFBTyx3QkFBNkIsQ0FBQyxlQUNyQ3BaLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQzFZLEtBQUs7UUFDSndmLFdBQVcsRUFBQyw4QkFBOEI7UUFDMUNybEIsS0FBSyxFQUFFLElBQUksQ0FBQzJKLEtBQUssQ0FBQ00sYUFBYSxDQUFDbVMsZ0JBQWlCO1FBQ2pEa0osUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUczbUIsQ0FBQztVQUFBLE9BQUtxZCxNQUFJLENBQUNwTixRQUFRLENBQUM7WUFBRTNFLGFBQWEsRUFBQXhHLGFBQUEsQ0FBQUEsYUFBQSxLQUFPdVksTUFBSSxDQUFDclMsS0FBSyxDQUFDTSxhQUFhO2NBQUVtUyxnQkFBZ0IsRUFBRXpkLENBQUMsQ0FBQ2tqQixNQUFNLENBQUM3aEI7WUFBSztVQUFHLENBQUMsQ0FBQztRQUFBO01BQUMsQ0FDdEgsQ0FDUyxDQUFDLGVBQ2JtRixLQUFBLENBQUFvWixhQUFBLENBQUM3WSxJQUFJLENBQUMwZixLQUFLLHFCQUNUamdCLEtBQUEsQ0FBQW9aLGFBQUEsZ0JBQU8sc0JBQTJCLENBQUMsZUFDbkNwWixLQUFBLENBQUFvWixhQUFBLENBQUMxWSxLQUFLO1FBQ0p3ZixXQUFXLEVBQUMseUNBQXlDO1FBQ3JEcmxCLEtBQUssRUFBRSxJQUFJLENBQUMySixLQUFLLENBQUNNLGFBQWEsQ0FBQzBnQixjQUFjLElBQUksRUFBRztRQUNyRHJGLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHM21CLENBQUM7VUFBQSxPQUFLcWQsTUFBSSxDQUFDcE4sUUFBUSxDQUFDO1lBQUUzRSxhQUFhLEVBQUF4RyxhQUFBLENBQUFBLGFBQUEsS0FBT3VZLE1BQUksQ0FBQ3JTLEtBQUssQ0FBQ00sYUFBYTtjQUFFMGdCLGNBQWMsRUFBRWhzQixDQUFDLENBQUNrakIsTUFBTSxDQUFDN2hCO1lBQUs7VUFBRyxDQUFDLENBQUM7UUFBQTtNQUFDLENBQ3BILENBQ1MsQ0FBQyxlQUNibUYsS0FBQSxDQUFBb1osYUFBQSxDQUFDN1ksSUFBSSxDQUFDMGYsS0FBSyxxQkFDVGpnQixLQUFBLENBQUFvWixhQUFBLGdCQUFPLHNCQUEyQixDQUFDLGVBQ25DcFosS0FBQSxDQUFBb1osYUFBQSxDQUFDMVksS0FBSztRQUNKOGIsSUFBSSxFQUFDLFVBQVU7UUFDZjBELFdBQVcsRUFBQyxjQUFjO1FBQzFCcmxCLEtBQUssRUFBRSxJQUFJLENBQUMySixLQUFLLENBQUNNLGFBQWEsQ0FBQ3VJLFFBQVM7UUFDekM4UyxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRzNtQixDQUFDO1VBQUEsT0FBS3FkLE1BQUksQ0FBQ3BOLFFBQVEsQ0FBQztZQUFFM0UsYUFBYSxFQUFBeEcsYUFBQSxDQUFBQSxhQUFBLEtBQU91WSxNQUFJLENBQUNyUyxLQUFLLENBQUNNLGFBQWE7Y0FBRXVJLFFBQVEsRUFBRTdULENBQUMsQ0FBQ2tqQixNQUFNLENBQUM3aEI7WUFBSztVQUFHLENBQUMsQ0FBQztRQUFBO01BQUMsQ0FDOUcsQ0FDUyxDQUNSLENBQ08sQ0FBQyxlQUNoQm1GLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQ3RZLEtBQUssQ0FBQzJrQixPQUFPLHFCQUNaemxCLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFBQ29hLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUTVELE1BQUksQ0FBQ3BOLFFBQVEsQ0FBQztZQUFFNUUsWUFBWSxFQUFFO1VBQU0sQ0FBQyxDQUFDO1FBQUE7TUFBQyxHQUFDLFFBQWMsQ0FBQyxlQUM5RTdFLEtBQUEsQ0FBQW9aLGFBQUEsQ0FBQy9ZLE1BQU07UUFDTHFhLE9BQU87UUFDUEQsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUEsRUFBUTtVQUNiLElBQU1pTCxLQUFLLEdBQUc1aUIsb0JBQW9CLENBQUMrVCxNQUFJLENBQUNyUyxLQUFLLENBQUNNLGFBQWEsQ0FBQztVQUM1RCtSLE1BQUksQ0FBQ3BOLFFBQVEsQ0FBQztZQUFFbkYsUUFBUSxFQUFFb2hCLEtBQUs7WUFBRTdnQixZQUFZLEVBQUU7VUFBTSxDQUFDLEVBQUU7WUFBQSxPQUFNZ1MsTUFBSSxDQUFDeE4sT0FBTyxDQUFDLENBQUM7VUFBQSxFQUFDO1FBQy9FO01BQUUsR0FDSCxNQUVPLENBQ0ssQ0FDVixDQUNKLENBQUM7SUFFVjtFQUFDO0FBQUEsRUExeEV1QnJKLEtBQUssQ0FBQzJsQixTQUFTO0FBNnhFekNDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHM2hCLFdBQVciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvQml0Y29pbkhvbWUuanM/NjRiMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluayB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuY29uc3Qge1xuICBCdXR0b24sXG4gIENoZWNrYm94LFxuICBGb3JtLFxuICBIZWFkZXIsXG4gIEljb24sXG4gIElucHV0LFxuICBMaXN0LFxuICBMb2FkZXIsXG4gIE1lc3NhZ2UsXG4gIE1vZGFsLFxuICBTZWdtZW50LFxuICBUYWJsZVxufSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5cbmNvbnN0IHtcbiAgY2xlYXJCYWxhbmNlQ2FjaGUsXG4gIGNyZWF0ZUxpZ2h0bmluZ0NoYW5uZWwsXG4gIGNyZWF0ZUxpZ2h0bmluZ0ludm9pY2UsXG4gIGNyZWF0ZVBheWpvaW5EZXBvc2l0LFxuICBkZWNvZGVMaWdodG5pbmdJbnZvaWNlLFxuICBkZXJpdmVBbmRTdG9yZVJlY2VpdmVBZGRyZXNzLFxuICBmZXRjaEFkZHJlc3NCYWxhbmNlLFxuICBmZXRjaEJpdGNvaW5TdGF0dXMsXG4gIGZldGNoQml0Y29pblBlZXJzLFxuICBmZXRjaEJpdGNvaW5OZXR3b3JrU3VtbWFyeSxcbiAgYnJvYWRjYXN0UmF3VHJhbnNhY3Rpb24sXG4gIGZldGNoRXhwbG9yZXJEYXRhLFxuICBmZXRjaExpZ2h0bmluZ0NoYW5uZWxzLFxuICBmZXRjaExpZ2h0bmluZ1N0YXR1cyxcbiAgZmV0Y2hQYXlqb2luQ2FwYWJpbGl0aWVzLFxuICBmZXRjaFBheWpvaW5TZXNzaW9ucyxcbiAgZmV0Y2hQYXlqb2luU2Vzc2lvbixcbiAgZmV0Y2hSZWNlaXZlQWRkcmVzcyxcbiAgZmV0Y2hVVFhPcyxcbiAgZmV0Y2hXYWxsZXRTdW1tYXJ5LFxuICBmZXRjaFdhbGxldFN1bW1hcnlXaXRoQ2FjaGUsXG4gIGdldFNwZW5kV2FsbGV0Q29udGV4dCxcbiAgZ2V0TmV4dFJlY2VpdmVXYWxsZXRDb250ZXh0LFxuICBsb2FkVXBzdHJlYW1TZXR0aW5ncyxcbiAgbG9hZFBheWpvaW5QcmVmZXJlbmNlcyxcbiAgc2F2ZVBheWpvaW5QcmVmZXJlbmNlcyxcbiAgcGF5TGlnaHRuaW5nSW52b2ljZSxcbiAgcmVzZXJ2ZU5leHRSZWNlaXZlQWRkcmVzcyxcbiAgc2F2ZVVwc3RyZWFtU2V0dGluZ3MsXG4gIHNlbmRQYXltZW50LFxuICBnZW5lcmF0ZUJsb2NrLFxuICByZXF1ZXN0RmF1Y2V0XG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2JpdGNvaW5DbGllbnQnKTtcbmNvbnN0IHsgZm9ybWF0U2F0c0Rpc3BsYXksIGZvcm1hdEJ0Y0Zyb21TYXRzIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZm9ybWF0U2F0cycpO1xuY29uc3QgeyByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViQWRtaW5Ub2tlbkJyb3dzZXInKTtcbmNvbnN0IHsgY29weVRvQ2xpcGJvYXJkLCBwdXNoVWlOb3RpZmljYXRpb24gfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy91aU5vdGlmaWNhdGlvbnMnKTtcbmNvbnN0IHsgbG9hZEh1YlVpRmVhdHVyZUZsYWdzLCBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncyB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YlVpRmVhdHVyZUZsYWdzJyk7XG5jb25zdCB7IFNBVFNfUEVSX0JUQywgVUlfTlVNQkVSX0xPR19FWFBfVEhSRVNIT0xEIH0gPSByZXF1aXJlKCcuLi9jb25zdGFudHMnKTtcbmNvbnN0IEh1YlJlZ3Rlc3RBZG1pblRva2VuUGFuZWwgPSByZXF1aXJlKCcuL0h1YlJlZ3Rlc3RBZG1pblRva2VuUGFuZWwnKTtcbmNvbnN0IEJpdGNvaW5XYWxsZXRCcmFuY2hCYXIgPSByZXF1aXJlKCcuL0JpdGNvaW5XYWxsZXRCcmFuY2hCYXInKTtcblxuY2xhc3MgQml0Y29pbkhvbWUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICBjb25zdCB1cHN0cmVhbSA9IGxvYWRVcHN0cmVhbVNldHRpbmdzKCk7XG4gICAgY29uc3QgcGF5am9pblByZWZzID0gbG9hZFBheWpvaW5QcmVmZXJlbmNlcygpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgcmVmcmVzaGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGFkdmFuY2VkT3BlbjogZmFsc2UsXG4gICAgICBzZXR0aW5nc09wZW46IGZhbHNlLFxuICAgICAgdXBzdHJlYW1EcmFmdDogeyAuLi51cHN0cmVhbSB9LFxuICAgICAgdXBzdHJlYW0sXG4gICAgICB3YWxsZXQ6IHtcbiAgICAgICAgd2FsbGV0SWQ6ICcnLFxuICAgICAgICBmaW5nZXJwcmludDogJycsXG4gICAgICAgIHhwdWI6ICcnLFxuICAgICAgICBoYXNQcml2YXRlS2V5OiBmYWxzZSxcbiAgICAgICAgYmFsYW5jZVNhdHM6IDAsXG4gICAgICAgIGNvbmZpcm1lZFNhdHM6IDAsXG4gICAgICAgIHVuY29uZmlybWVkU2F0czogMCxcbiAgICAgICAgICBhZGRyZXNzOiAnJyxcbiAgICAgICAgICByZWNlaXZlSW5kZXg6IDBcbiAgICAgIH0sXG4gICAgICBibG9ja3M6IFtdLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIHV0eG9zOiBbXSxcbiAgICAgIHBheW1lbnRUbzogJycsXG4gICAgICBwYXltZW50QW1vdW50U2F0czogJycsXG4gICAgICBwYXltZW50TWVtbzogJycsXG4gICAgICBpbnZvaWNlQW1vdW50U2F0czogJycsXG4gICAgICBpbnZvaWNlTWVtbzogJycsXG4gICAgICBpbnZvaWNlSW5wdXQ6ICcnLFxuICAgICAgcGF5am9pbkVuYWJsZWQ6ICEhcGF5am9pblByZWZzLm9wZXJhdG9yRGVwb3NpdCxcbiAgICAgIHBheWpvaW5BbW91bnRTYXRzOiAnJyxcbiAgICAgIHBheWpvaW5MYWJlbDogJycsXG4gICAgICBwYXlqb2luTWVtbzogJycsXG4gICAgICBwYXlqb2luU2Vzc2lvbklkOiAnJyxcbiAgICAgIHBheWpvaW5SZXN1bHQ6IG51bGwsXG4gICAgICBwYXlqb2luQ2FwYWJpbGl0aWVzOiB7IGF2YWlsYWJsZTogZmFsc2UgfSxcbiAgICAgIHBheWpvaW5TZXNzaW9uc1NuYXBzaG90OiBudWxsLFxuICAgICAgYml0Y29pblN0YXR1czogeyBhdmFpbGFibGU6IGZhbHNlLCBzdGF0dXM6ICdTVEFSVElORycgfSxcbiAgICAgIGxpZ2h0bmluZ1N0YXR1czogeyBhdmFpbGFibGU6IGZhbHNlLCBzdGF0dXM6ICdVTkFWQUlMQUJMRScgfSxcbiAgICAgIGxpZ2h0bmluZ0NoYW5uZWxzOiBbXSxcbiAgICAgIGxpZ2h0bmluZ091dHB1dHM6IFtdLFxuICAgICAgY2hhbm5lbENyZWF0ZVJlbW90ZTogJycsXG4gICAgICBjaGFubmVsQ3JlYXRlQW1vdW50U2F0czogJzEwMDAwMCcsXG4gICAgICBjaGFubmVsQ3JlYXRlUHVzaE1zYXQ6ICcnLFxuICAgICAgY2hhbm5lbENyZWF0ZVJlc3VsdDogbnVsbCxcbiAgICAgIGNoYW5uZWxDcmVhdGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHBheW1lbnRSZXN1bHQ6IG51bGwsXG4gICAgICBsaWdodG5pbmdSZXN1bHQ6IG51bGwsXG4gICAgICBmYXVjZXRBZGRyZXNzOiAnJyxcbiAgICAgIGZhdWNldEFtb3VudFNhdHM6ICcxMDAwMCcsXG4gICAgICBmYXVjZXRSZXN1bHQ6IG51bGwsXG4gICAgICBsb29rdXBBZGRyZXNzOiAnJyxcbiAgICAgIGxvb2t1cFJlc3VsdDogbnVsbCxcbiAgICAgIGxvb2t1cExvYWRpbmc6IGZhbHNlLFxuICAgICAgbm9kZVBlZXJzOiBbXSxcbiAgICAgIG5vZGVOZXR3b3JrOiB7fSxcbiAgICAgIHJhd1R4SGV4OiAnJyxcbiAgICAgIHJhd1R4UmVzdWx0OiBudWxsLFxuICAgICAgdHhMb29rdXBJZDogJycsXG4gICAgICB0eExvb2t1cEVycm9yOiBudWxsLFxuICAgICAgaHViVWlGbGFnc1JldjogMFxuICAgIH07XG4gICAgdGhpcy5fb25CaXRjb2luSGFzaENoYW5nZSA9ICgpID0+IHRoaXMuX3N5bmNCaXRjb2luSGFzaFNjcm9sbCgpO1xuICB9XG5cbiAgX3N5bmNCaXRjb2luSGFzaFNjcm9sbCAoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgY29uc3QgcmF3ID0gKHdpbmRvdy5sb2NhdGlvbi5oYXNoIHx8ICcnKS5yZXBsYWNlKC9eIy8sICcnKTtcbiAgICBpZiAoIXJhdykgcmV0dXJuO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJhdyk7XG4gICAgICBpZiAoZWwpIGVsLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JyB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB0aGlzLl9vbkdsb2JhbFN0YXRlVXBkYXRlID0gdGhpcy5fb25HbG9iYWxTdGF0ZVVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdnbG9iYWxTdGF0ZVVwZGF0ZScsIHRoaXMuX29uR2xvYmFsU3RhdGVVcGRhdGUpO1xuICAgIHRoaXMuX3N5bmNCaXRjb2luSGFzaFNjcm9sbCgpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCB0aGlzLl9vbkJpdGNvaW5IYXNoQ2hhbmdlKTtcbiAgICAgIHRoaXMuX2h1YlVpRmxhZ3NVbnN1YiA9IHN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSgocykgPT4gKHsgaHViVWlGbGFnc1JldjogKHMuaHViVWlGbGFnc1JldiB8fCAwKSArIDEgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQgKCkge1xuICAgIGlmICh0aGlzLl9vbkdsb2JhbFN0YXRlVXBkYXRlKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZ2xvYmFsU3RhdGVVcGRhdGUnLCB0aGlzLl9vbkdsb2JhbFN0YXRlVXBkYXRlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIHRoaXMuX29uQml0Y29pbkhhc2hDaGFuZ2UpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuX2h1YlVpRmxhZ3NVbnN1YiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5faHViVWlGbGFnc1Vuc3ViKCk7XG4gICAgICB0aGlzLl9odWJVaUZsYWdzVW5zdWIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9vbkdsb2JhbFN0YXRlVXBkYXRlIChlKSB7XG4gICAgY29uc3QgZCA9IGUgJiYgZS5kZXRhaWw7XG4gICAgaWYgKCFkIHx8ICFkLm9wZXJhdGlvbiB8fCBkLm9wZXJhdGlvbi5wYXRoICE9PSAnL2JpdGNvaW4nIHx8ICFkLmdsb2JhbFN0YXRlIHx8ICFkLmdsb2JhbFN0YXRlLmJpdGNvaW4pIHJldHVybjtcbiAgICB0aGlzLnNldFN0YXRlKHsgYml0Y29pblN0YXR1czogZC5nbG9iYWxTdGF0ZS5iaXRjb2luIH0pO1xuICAgIC8vIEtlZXAgY2xpZW50IHdhbGxldCBmaWd1cmVzIGZyZXNoIHdoZW5ldmVyIGJpdGNvaW4gc3RhdHVzIHBhdGNoZXMgYXJyaXZlLlxuICAgIHRoaXMuX3JlZnJlc2hDbGllbnRCYWxhbmNlRnJvbUh1YlN0YXR1cyhkLmdsb2JhbFN0YXRlLmJpdGNvaW4pO1xuICB9XG5cbiAgYXN5bmMgX3JlZnJlc2hDbGllbnRCYWxhbmNlRnJvbUh1YlN0YXR1cyAoYml0Y29pblN0YXR1cyA9IG51bGwpIHtcbiAgICBpZiAodGhpcy5fcmVmcmVzaGluZ0NsaWVudEJhbGFuY2UpIHJldHVybjtcbiAgICB0aGlzLl9yZWZyZXNoaW5nQ2xpZW50QmFsYW5jZSA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGlkZW50aXR5ID0gdGhpcy5nZXRJZGVudGl0eSgpO1xuICAgICAgY29uc3Qgd2FsbGV0ID0gZ2V0U3BlbmRXYWxsZXRDb250ZXh0KGlkZW50aXR5KTtcbiAgICAgIGNvbnN0IG5ldHdvcmsgPSAoYml0Y29pblN0YXR1cyAmJiBiaXRjb2luU3RhdHVzLm5ldHdvcmspID8gU3RyaW5nKGJpdGNvaW5TdGF0dXMubmV0d29yaykudG9Mb3dlckNhc2UoKSA6ICh0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMgJiYgdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLm5ldHdvcmspID8gU3RyaW5nKHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5uZXR3b3JrKS50b0xvd2VyQ2FzZSgpIDogJyc7XG4gICAgICBjb25zdCBzdW1tYXJ5ID0gYXdhaXQgZmV0Y2hXYWxsZXRTdW1tYXJ5V2l0aENhY2hlKHRoaXMuc3RhdGUudXBzdHJlYW0sIHdhbGxldCwgeyBuZXR3b3JrIH0pLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgaWYgKCFzdW1tYXJ5IHx8IHR5cGVvZiBzdW1tYXJ5ICE9PSAnb2JqZWN0JykgcmV0dXJuO1xuXG4gICAgICBjb25zdCBiYWxhbmNlU2F0cyA9IE51bWJlcihzdW1tYXJ5LmJhbGFuY2VTYXRzICE9IG51bGwgPyBzdW1tYXJ5LmJhbGFuY2VTYXRzIDogKHN1bW1hcnkuYmFsYW5jZSB8fCAwKSk7XG4gICAgICBjb25zdCBjb25maXJtZWRTYXRzID0gTnVtYmVyKHN1bW1hcnkuY29uZmlybWVkU2F0cyAhPSBudWxsID8gc3VtbWFyeS5jb25maXJtZWRTYXRzIDogYmFsYW5jZVNhdHMpO1xuICAgICAgY29uc3QgdW5jb25maXJtZWRTYXRzID0gTnVtYmVyKHN1bW1hcnkudW5jb25maXJtZWRTYXRzIHx8IDApO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKChwcmV2KSA9PiAoe1xuICAgICAgICB3YWxsZXQ6IHtcbiAgICAgICAgICAuLi5wcmV2LndhbGxldCxcbiAgICAgICAgICBiYWxhbmNlU2F0cyxcbiAgICAgICAgICBjb25maXJtZWRTYXRzLFxuICAgICAgICAgIHVuY29uZmlybWVkU2F0c1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3JlZnJlc2hpbmdDbGllbnRCYWxhbmNlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlIChwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIGNvbnN0IHByZXZJZCA9IHByZXZQcm9wcyAmJiBwcmV2UHJvcHMuaWRlbnRpdHkgJiYgcHJldlByb3BzLmlkZW50aXR5LnhwdWI7XG4gICAgY29uc3QgbmV4dElkID0gdGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmlkZW50aXR5ICYmIHRoaXMucHJvcHMuaWRlbnRpdHkueHB1YjtcbiAgICBpZiAocHJldklkICE9PSBuZXh0SWQpIHRoaXMucmVmcmVzaCgpO1xuICAgIGlmIChwcmV2U3RhdGUucmVmcmVzaGluZyAmJiAhdGhpcy5zdGF0ZS5yZWZyZXNoaW5nKSB7XG4gICAgICB0aGlzLl9zeW5jQml0Y29pbkhhc2hTY3JvbGwoKTtcbiAgICB9XG4gIH1cblxuICBzYXRzVG9CVEMgKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZvcm1hdEJ0Y0Zyb21TYXRzKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBDb21wdXRlIExpZ2h0bmluZyBiYWxhbmNlIGZyb20gbGlzdGZ1bmRzIG91dHB1dHMgKGNsaWVudC1zaWRlIGZhbGxiYWNrIHdoZW4gc3RhdHVzIHJldHVybnMgMCkuICovXG4gIGdldExpZ2h0bmluZ0JhbGFuY2VGcm9tT3V0cHV0cyAob3V0cHV0cyA9IFtdKSB7XG4gICAgbGV0IGNvbmZpcm1lZCA9IDA7XG4gICAgbGV0IHVuY29uZmlybWVkID0gMDtcbiAgICBsZXQgaW1tYXR1cmUgPSAwO1xuICAgIGZvciAoY29uc3QgbyBvZiBvdXRwdXRzKSB7XG4gICAgICBjb25zdCBhbXQgPSBvLmFtb3VudF9tc2F0ICE9IG51bGwgPyBNYXRoLmZsb29yKE51bWJlcihvLmFtb3VudF9tc2F0KSAvIDEwMDApIDogKG8uYW1vdW50X3NhdCAhPSBudWxsID8gTnVtYmVyKG8uYW1vdW50X3NhdCkgOiAwKTtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IFN0cmluZyhvLnN0YXR1cyB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdjb25maXJtZWQnKSBjb25maXJtZWQgKz0gYW10O1xuICAgICAgZWxzZSBpZiAoc3RhdHVzID09PSAndW5jb25maXJtZWQnKSB1bmNvbmZpcm1lZCArPSBhbXQ7XG4gICAgICBlbHNlIGlmIChzdGF0dXMgPT09ICdpbW1hdHVyZScpIGltbWF0dXJlICs9IGFtdDtcbiAgICAgIGVsc2UgaWYgKHN0YXR1cyAhPT0gJ3NwZW50JykgdW5jb25maXJtZWQgKz0gYW10O1xuICAgIH1cbiAgICByZXR1cm4geyBjb25maXJtZWQsIHVuY29uZmlybWVkLCBpbW1hdHVyZSB9O1xuICB9XG5cbiAgdHJpbUhhc2ggKHZhbHVlID0gJycsIGxlZnQgPSA4LCByaWdodCA9IDgpIHtcbiAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKHZhbHVlIHx8ICcnKTtcbiAgICBpZiAodGV4dC5sZW5ndGggPD0gbGVmdCArIHJpZ2h0ICsgMSkgcmV0dXJuIHRleHQ7XG4gICAgcmV0dXJuIGAke3RleHQuc2xpY2UoMCwgbGVmdCl9Li4uJHt0ZXh0LnNsaWNlKC1yaWdodCl9YDtcbiAgfVxuXG4gIGZvcm1hdERpZmZpY3VsdHkgKHZhbHVlKSB7XG4gICAgY29uc3QgbiA9IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobikpIHJldHVybiAn4oCUJztcbiAgICBpZiAobiA+PSBVSV9OVU1CRVJfTE9HX0VYUF9USFJFU0hPTEQpIHJldHVybiBuLnRvRXhwb25lbnRpYWwoNCk7XG4gICAgcmV0dXJuIG4udG9Mb2NhbGVTdHJpbmcoKTtcbiAgfVxuXG4gIGZvcm1hdEJ5dGVzIChuKSB7XG4gICAgY29uc3QgdiA9IE51bWJlcihuKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh2KSB8fCB2IDwgMCkgcmV0dXJuICfigJQnO1xuICAgIGlmICh2IDwgMTAyNCkgcmV0dXJuIGAke01hdGgucm91bmQodil9IEJgO1xuICAgIGlmICh2IDwgMTA0ODU3NikgcmV0dXJuIGAkeyh2IC8gMTAyNCkudG9GaXhlZCgxKX0gS2lCYDtcbiAgICByZXR1cm4gYCR7KHYgLyAxMDQ4NTc2KS50b0ZpeGVkKDIpfSBNaUJgO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlQnJvYWRjYXN0UmF3VHggKCkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5wcm9wcy5hZG1pblRva2VuO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyByYXdUeFJlc3VsdDogeyBlcnJvcjogJ0FkbWluIHRva2VuIHJlcXVpcmVkLiBDb21wbGV0ZSBub2RlIHNldHVwIG9yIHJlZnJlc2ggeW91ciBzZXNzaW9uLicgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB7IC4uLnRoaXMuc3RhdGUudXBzdHJlYW0sIGFwaVRva2VuOiB0b2tlbiB9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgYnJvYWRjYXN0UmF3VHJhbnNhY3Rpb24oc2V0dGluZ3MsIHRoaXMuc3RhdGUucmF3VHhIZXgpO1xuICAgICAgY29uc3QgZXJyID0gciAmJiAoci5lcnJvciB8fCByLm1lc3NhZ2UpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgcmF3VHhSZXN1bHQ6IHsgZXJyb3I6IFN0cmluZyhlcnIpIH0gfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyByYXdUeFJlc3VsdDogciwgcmF3VHhIZXg6ICcnIH0pO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyByYXdUeFJlc3VsdDogeyBlcnJvcjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpIH0gfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlVHhMb29rdXAgKCkge1xuICAgIGNvbnN0IGlkID0gU3RyaW5nKHRoaXMuc3RhdGUudHhMb29rdXBJZCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghL15bMC05YS1mQS1GXXs2NH0kLy50ZXN0KGlkKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHR4TG9va3VwRXJyb3I6ICdFbnRlciBhIDY0LWNoYXJhY3RlciB0cmFuc2FjdGlvbiBpZCAoaGV4KS4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmID0gbG9hZEh1YlVpRmVhdHVyZUZsYWdzKCk7XG4gICAgaWYgKCFmLmJpdGNvaW5FeHBsb3Jlcikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHR4TG9va3VwRXJyb3I6ICdFbmFibGUgQml0Y29pbiDigJQgQmxvY2sgJiB0cmFuc2FjdGlvbiBkZXRhaWwgcm91dGVzIGluIEFkbWluIOKGkiBGZWF0dXJlIHZpc2liaWxpdHkgdG8gb3BlbiB0aGUgdHJhbnNhY3Rpb24gdmlldy4nXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHR4TG9va3VwRXJyb3I6IG51bGwgfSk7XG4gICAgY29uc3QgbmF2ID0gdGhpcy5wcm9wcy5uYXZpZ2F0ZTtcbiAgICBpZiAodHlwZW9mIG5hdiA9PT0gJ2Z1bmN0aW9uJykgbmF2KGAvc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoaWQpfWApO1xuICAgIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cubG9jYXRpb24uYXNzaWduKGAvc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoaWQpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlIHRvIGEgcmVsYXRpdmUgSHViIHBhdGggKG11c3Qgc3RhcnQgd2l0aCBgL2ApLiBLZWVwcyByb3cgY2xpY2sgbmF2aWdhdGlvbiBvZmZcbiAgICogYEFycmF5I21hcGAgaW5kZXggcGFyYW1ldGVycyB0aGF0IHNvbWUgc3RhdGljIHJ1bGVzIHRyZWF0IGFzIHRhaW50ZWQgZm9yIGB3aW5kb3dgIGxvY2F0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgbmF2aWdhdGVJbnRlcm5hbFBhdGggKHBhdGgpIHtcbiAgICBjb25zdCBwID0gU3RyaW5nKHBhdGggfHwgJycpO1xuICAgIGlmICghcC5zdGFydHNXaXRoKCcvJykgfHwgcC5pbmNsdWRlcygnLy8nKSkgcmV0dXJuO1xuICAgIGNvbnN0IG5hdiA9IHRoaXMucHJvcHMubmF2aWdhdGU7XG4gICAgaWYgKHR5cGVvZiBuYXYgPT09ICdmdW5jdGlvbicpIG5hdihwKTtcbiAgICBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgd2luZG93LmxvY2F0aW9uLmFzc2lnbihwKTtcbiAgfVxuXG4gIGdldElkZW50aXR5ICgpIHtcbiAgICBjb25zdCBpZGVudGl0eSA9ICh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuaWRlbnRpdHkpIHx8ICh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuYXV0aCkgfHwgbnVsbDtcbiAgICByZXR1cm4gaWRlbnRpdHkgfHwge307XG4gIH1cblxuICBhc3luYyByZWZyZXNoICgpIHtcbiAgICBjb25zdCBpZGVudGl0eSA9IHRoaXMuZ2V0SWRlbnRpdHkoKTtcbiAgICBjb25zdCBzcGVuZFdhbGxldCA9IGdldFNwZW5kV2FsbGV0Q29udGV4dChpZGVudGl0eSk7XG4gICAgY29uc3QgbmV4dFJlY2VpdmUgPSBnZXROZXh0UmVjZWl2ZVdhbGxldENvbnRleHQoaWRlbnRpdHkpO1xuICAgIGNvbnN0IHVwc3RyZWFtID0gdGhpcy5zdGF0ZS51cHN0cmVhbTtcbiAgICBjb25zdCB1cHN0cmVhbUFkbWluID0ge1xuICAgICAgLi4udXBzdHJlYW0sXG4gICAgICBodWJBZG1pblRva2VuOiB0aGlzLl9odWJBZG1pblRva2VuKCkgfHwgJydcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6ICFzcGVuZFdhbGxldC53YWxsZXRJZCwgcmVmcmVzaGluZzogdHJ1ZSwgZXJyb3I6IG51bGwgfSk7XG5cbiAgICBjb25zdCBuZXR3b3JrID0gKHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cyAmJiB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMubmV0d29yaykgPyBTdHJpbmcodGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLm5ldHdvcmspLnRvTG93ZXJDYXNlKCkgOiAnJztcbiAgICBjb25zdCBzdW1tYXJ5VGFzayA9IGZldGNoV2FsbGV0U3VtbWFyeVdpdGhDYWNoZSh1cHN0cmVhbUFkbWluLCBzcGVuZFdhbGxldCwgeyBuZXR3b3JrIH0pLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgIGNvbnN0IGV4cGxvcmVyVGFzayA9IGZldGNoRXhwbG9yZXJEYXRhKHVwc3RyZWFtQWRtaW4sIHNwZW5kV2FsbGV0LCB7XG4gICAgICBuZXR3b3JrLFxuICAgICAgYWRtaW5Ub2tlbjogdGhpcy5faHViQWRtaW5Ub2tlbigpIHx8ICcnXG4gICAgfSkuY2F0Y2goKCkgPT4gKHsgYmxvY2tzOiBbXSwgdHJhbnNhY3Rpb25zOiBbXSB9KSk7XG4gICAgY29uc3QgYml0Y29pblN0YXR1c1Rhc2sgPSBmZXRjaEJpdGNvaW5TdGF0dXModXBzdHJlYW1BZG1pbikuY2F0Y2goKCkgPT4gKHsgYXZhaWxhYmxlOiBmYWxzZSwgc3RhdHVzOiAnVU5BVkFJTEFCTEUnIH0pKTtcbiAgICBjb25zdCBsaWdodG5pbmdTdGF0dXNUYXNrID0gZmV0Y2hMaWdodG5pbmdTdGF0dXModXBzdHJlYW0pLmNhdGNoKCgpID0+ICh7IGF2YWlsYWJsZTogZmFsc2UsIHN0YXR1czogJ1VOQVZBSUxBQkxFJyB9KSk7XG4gICAgY29uc3QgbGlnaHRuaW5nQ2hhbm5lbHNUYXNrID0gZmV0Y2hMaWdodG5pbmdDaGFubmVscyh1cHN0cmVhbSkuY2F0Y2goKCkgPT4gKHsgY2hhbm5lbHM6IFtdLCBvdXRwdXRzOiBbXSB9KSk7XG4gICAgY29uc3QgdXR4b1Rhc2sgPSBmZXRjaFVUWE9zKHVwc3RyZWFtQWRtaW4sIHNwZW5kV2FsbGV0KS5jYXRjaCgoKSA9PiBbXSk7XG4gICAgY29uc3QgcGF5am9pbkNhcGFiaWxpdGllc1Rhc2sgPSBmZXRjaFBheWpvaW5DYXBhYmlsaXRpZXModXBzdHJlYW0pLmNhdGNoKCgpID0+ICh7IGF2YWlsYWJsZTogZmFsc2UgfSkpO1xuICAgIGNvbnN0IHBheWpvaW5TZXNzaW9uc1Rhc2sgPSBmZXRjaFBheWpvaW5TZXNzaW9ucyh1cHN0cmVhbSwgeyBsaW1pdDogMjUsIGluY2x1ZGVFeHBpcmVkOiBmYWxzZSB9KS5jYXRjaCgoKSA9PiBbXSk7XG4gICAgY29uc3QgcGF5am9pblNlc3Npb25UYXNrID0gdGhpcy5zdGF0ZS5wYXlqb2luU2Vzc2lvbklkXG4gICAgICA/IGZldGNoUGF5am9pblNlc3Npb24odXBzdHJlYW0sIHRoaXMuc3RhdGUucGF5am9pblNlc3Npb25JZCkuY2F0Y2goKCkgPT4gbnVsbClcbiAgICAgIDogUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIGNvbnN0IG5vZGVQZWVyc1Rhc2sgPSBmZXRjaEJpdGNvaW5QZWVycyh1cHN0cmVhbSkuY2F0Y2goKCkgPT4gW10pO1xuICAgIGNvbnN0IG5vZGVOZXR3b3JrVGFzayA9IGZldGNoQml0Y29pbk5ldHdvcmtTdW1tYXJ5KHVwc3RyZWFtKS5jYXRjaCgoKSA9PiAoe30pKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBbc3VtbWFyeSwgZXhwbG9yZXIsIGJpdGNvaW5TdGF0dXMsIGxpZ2h0bmluZ1N0YXR1cywgbGlnaHRuaW5nQ2hhbm5lbHMsIHV0eG9zLCBwYXlqb2luQ2FwYWJpbGl0aWVzLCBwYXlqb2luU2Vzc2lvbnNMaXN0LCBwYXlqb2luU2Vzc2lvbiwgbm9kZVBlZXJzLCBub2RlTmV0d29ya10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHN1bW1hcnlUYXNrLFxuICAgICAgICBleHBsb3JlclRhc2ssXG4gICAgICAgIGJpdGNvaW5TdGF0dXNUYXNrLFxuICAgICAgICBsaWdodG5pbmdTdGF0dXNUYXNrLFxuICAgICAgICBsaWdodG5pbmdDaGFubmVsc1Rhc2ssXG4gICAgICAgIHV0eG9UYXNrLFxuICAgICAgICBwYXlqb2luQ2FwYWJpbGl0aWVzVGFzayxcbiAgICAgICAgcGF5am9pblNlc3Npb25zVGFzayxcbiAgICAgICAgcGF5am9pblNlc3Npb25UYXNrLFxuICAgICAgICBub2RlUGVlcnNUYXNrLFxuICAgICAgICBub2RlTmV0d29ya1Rhc2tcbiAgICAgIF0pO1xuICAgICAgY29uc3QgbmV0d29yayA9IChiaXRjb2luU3RhdHVzICYmIGJpdGNvaW5TdGF0dXMubmV0d29yaykgPyBTdHJpbmcoYml0Y29pblN0YXR1cy5uZXR3b3JrKS50b0xvd2VyQ2FzZSgpIDogJyc7XG4gICAgICBjb25zdCBhZGRyZXNzID0gYXdhaXQgZmV0Y2hSZWNlaXZlQWRkcmVzcyh1cHN0cmVhbSwgbmV4dFJlY2VpdmUsIHsgbmV0d29yaywgaWRlbnRpdHkgfSkuY2F0Y2goKCkgPT4gJycpO1xuICAgICAgY29uc3QgbG9jYWxSZWN2ID0gZGVyaXZlQW5kU3RvcmVSZWNlaXZlQWRkcmVzcyhuZXh0UmVjZWl2ZSwgeyBuZXR3b3JrLCBpZGVudGl0eSB9KTtcbiAgICAgIGNvbnN0IHJlY2VpdmVJbmRleCA9IGxvY2FsUmVjdiAmJiBsb2NhbFJlY3YuY3VycmVudEluZGV4ICE9IG51bGxcbiAgICAgICAgPyBOdW1iZXIobG9jYWxSZWN2LmN1cnJlbnRJbmRleClcbiAgICAgICAgOiAwO1xuICAgICAgY29uc3QgYmFsYW5jZVNhdHMgPSBOdW1iZXIoc3VtbWFyeS5iYWxhbmNlU2F0cyAhPSBudWxsID8gc3VtbWFyeS5iYWxhbmNlU2F0cyA6IChzdW1tYXJ5LmJhbGFuY2UgfHwgMCkpO1xuICAgICAgY29uc3QgY29uZmlybWVkU2F0cyA9IE51bWJlcihzdW1tYXJ5LmNvbmZpcm1lZFNhdHMgIT0gbnVsbCA/IHN1bW1hcnkuY29uZmlybWVkU2F0cyA6IGJhbGFuY2VTYXRzKTtcbiAgICAgIGNvbnN0IHVuY29uZmlybWVkU2F0cyA9IE51bWJlcihzdW1tYXJ5LnVuY29uZmlybWVkU2F0cyB8fCAwKTtcbiAgICAgIGNvbnN0IGV4cGxvcmVyQmxvY2tzID0gQXJyYXkuaXNBcnJheShleHBsb3Jlci5ibG9ja3MpID8gZXhwbG9yZXIuYmxvY2tzLnNsaWNlKDAsIDEwKSA6IFtdO1xuICAgICAgY29uc3QgZXhwbG9yZXJUcmFuc2FjdGlvbnMgPSBBcnJheS5pc0FycmF5KGV4cGxvcmVyLnRyYW5zYWN0aW9ucykgPyBleHBsb3Jlci50cmFuc2FjdGlvbnMuc2xpY2UoMCwgMTApIDogW107XG4gICAgICBjb25zdCBzdGF0dXNCbG9ja3MgPSAoYml0Y29pblN0YXR1cyAmJiBBcnJheS5pc0FycmF5KGJpdGNvaW5TdGF0dXMucmVjZW50QmxvY2tzKSlcbiAgICAgICAgPyBiaXRjb2luU3RhdHVzLnJlY2VudEJsb2Nrcy5zbGljZSgwLCAxMClcbiAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IHN0YXR1c1RyYW5zYWN0aW9ucyA9IChiaXRjb2luU3RhdHVzICYmIEFycmF5LmlzQXJyYXkoYml0Y29pblN0YXR1cy5yZWNlbnRUcmFuc2FjdGlvbnMpKVxuICAgICAgICA/IGJpdGNvaW5TdGF0dXMucmVjZW50VHJhbnNhY3Rpb25zLnNsaWNlKDAsIDEwKVxuICAgICAgICA6IFtdO1xuXG4gICAgICBsZXQgcGF5am9pblNlc3Npb25zU25hcHNob3QgPSBudWxsO1xuICAgICAgY29uc3QgaHViVWkgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgICAgIGlmIChodWJVaSAmJiBodWJVaS5iaXRjb2luUGF5bWVudHMpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF5am9pblNlc3Npb25zTGlzdCkpIHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVOb3RFeHBpcmVkID0gcGF5am9pblNlc3Npb25zTGlzdC5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgYXdhaXRpbmdDb21wbGV0aW9uID0gcGF5am9pblNlc3Npb25zTGlzdC5maWx0ZXIoKHMpID0+IFN0cmluZygocyAmJiBzLnN0YXR1cykgfHwgJycpICE9PSAnc3VjY2VzcycpLmxlbmd0aDtcbiAgICAgICAgICBwYXlqb2luU2Vzc2lvbnNTbmFwc2hvdCA9IHsgYWN0aXZlTm90RXhwaXJlZCwgYXdhaXRpbmdDb21wbGV0aW9uIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICByZWZyZXNoaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIHdhbGxldDoge1xuICAgICAgICAgIC4uLnNwZW5kV2FsbGV0LFxuICAgICAgICAgIGJhbGFuY2VTYXRzLFxuICAgICAgICAgIGNvbmZpcm1lZFNhdHMsXG4gICAgICAgICAgdW5jb25maXJtZWRTYXRzLFxuICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3MgfHwgJycsXG4gICAgICAgICAgcmVjZWl2ZUluZGV4XG4gICAgICAgIH0sXG4gICAgICAgIGJsb2NrczogZXhwbG9yZXJCbG9ja3MubGVuZ3RoID8gZXhwbG9yZXJCbG9ja3MgOiBzdGF0dXNCbG9ja3MsXG4gICAgICAgIHRyYW5zYWN0aW9uczogZXhwbG9yZXJUcmFuc2FjdGlvbnMubGVuZ3RoID8gZXhwbG9yZXJUcmFuc2FjdGlvbnMgOiBzdGF0dXNUcmFuc2FjdGlvbnMsXG4gICAgICAgIGJpdGNvaW5TdGF0dXM6IGJpdGNvaW5TdGF0dXMgJiYgdHlwZW9mIGJpdGNvaW5TdGF0dXMgPT09ICdvYmplY3QnXG4gICAgICAgICAgPyBiaXRjb2luU3RhdHVzXG4gICAgICAgICAgOiB7IGF2YWlsYWJsZTogZmFsc2UsIHN0YXR1czogJ1VOQVZBSUxBQkxFJyB9LFxuICAgICAgICBsaWdodG5pbmdTdGF0dXM6IGxpZ2h0bmluZ1N0YXR1cyAmJiB0eXBlb2YgbGlnaHRuaW5nU3RhdHVzID09PSAnb2JqZWN0J1xuICAgICAgICAgID8gbGlnaHRuaW5nU3RhdHVzXG4gICAgICAgICAgOiB7IGF2YWlsYWJsZTogZmFsc2UsIHN0YXR1czogJ1VOQVZBSUxBQkxFJyB9LFxuICAgICAgICBsaWdodG5pbmdDaGFubmVsczogbGlnaHRuaW5nQ2hhbm5lbHMgJiYgQXJyYXkuaXNBcnJheShsaWdodG5pbmdDaGFubmVscy5jaGFubmVscykgPyBsaWdodG5pbmdDaGFubmVscy5jaGFubmVscyA6IFtdLFxuICAgICAgICBsaWdodG5pbmdPdXRwdXRzOiBsaWdodG5pbmdDaGFubmVscyAmJiBBcnJheS5pc0FycmF5KGxpZ2h0bmluZ0NoYW5uZWxzLm91dHB1dHMpID8gbGlnaHRuaW5nQ2hhbm5lbHMub3V0cHV0cyA6IFtdLFxuICAgICAgICB1dHhvczogQXJyYXkuaXNBcnJheSh1dHhvcykgPyB1dHhvcyA6IFtdLFxuICAgICAgICBwYXlqb2luQ2FwYWJpbGl0aWVzOiBwYXlqb2luQ2FwYWJpbGl0aWVzICYmIHR5cGVvZiBwYXlqb2luQ2FwYWJpbGl0aWVzID09PSAnb2JqZWN0J1xuICAgICAgICAgID8gcGF5am9pbkNhcGFiaWxpdGllc1xuICAgICAgICAgIDogeyBhdmFpbGFibGU6IGZhbHNlIH0sXG4gICAgICAgIHBheWpvaW5TZXNzaW9uc1NuYXBzaG90LFxuICAgICAgICBwYXlqb2luUmVzdWx0OiBwYXlqb2luU2Vzc2lvbiB8fCB0aGlzLnN0YXRlLnBheWpvaW5SZXN1bHQsXG4gICAgICAgIG5vZGVQZWVyczogQXJyYXkuaXNBcnJheShub2RlUGVlcnMpID8gbm9kZVBlZXJzIDogW10sXG4gICAgICAgIG5vZGVOZXR3b3JrOiBub2RlTmV0d29yayAmJiB0eXBlb2Ygbm9kZU5ldHdvcmsgPT09ICdvYmplY3QnID8gbm9kZU5ldHdvcmsgOiB7fVxuICAgICAgfSk7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgTnVtYmVyLmlzRmluaXRlKGJhbGFuY2VTYXRzKSkge1xuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NsaWVudEJhbGFuY2VVcGRhdGUnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICB3YWxsZXRJZDogc3BlbmRXYWxsZXQud2FsbGV0SWQsXG4gICAgICAgICAgICBiYWxhbmNlU2F0cyxcbiAgICAgICAgICAgIGNvbmZpcm1lZFNhdHMsXG4gICAgICAgICAgICB1bmNvbmZpcm1lZFNhdHNcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICByZWZyZXNoaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTmV4dFJlY2VpdmVBZGRyZXNzICgpIHtcbiAgICBjb25zdCBuZXR3b3JrID0gKHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cyAmJiB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMubmV0d29yaylcbiAgICAgID8gU3RyaW5nKHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5uZXR3b3JrKS50b0xvd2VyQ2FzZSgpXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IHJlY2VpdmVXYWxsZXQgPSBnZXROZXh0UmVjZWl2ZVdhbGxldENvbnRleHQodGhpcy5nZXRJZGVudGl0eSgpKTtcbiAgICBjb25zdCBuZXh0ID0gcmVzZXJ2ZU5leHRSZWNlaXZlQWRkcmVzcyhyZWNlaXZlV2FsbGV0LCB7IG5ldHdvcmssIGlkZW50aXR5OiB0aGlzLmdldElkZW50aXR5KCkgfSk7XG4gICAgaWYgKCFuZXh0IHx8ICFuZXh0LmN1cnJlbnRBZGRyZXNzKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcGF5bWVudFJlc3VsdDogeyBlcnJvcjogJ1VuYWJsZSB0byBkZXJpdmUgbmV4dCByZWNlaXZlIGFkZHJlc3MgZnJvbSB4cHViLicgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSgocHJldikgPT4gKHtcbiAgICAgIHdhbGxldDoge1xuICAgICAgICAuLi5wcmV2LndhbGxldCxcbiAgICAgICAgYWRkcmVzczogbmV4dC5jdXJyZW50QWRkcmVzcyxcbiAgICAgICAgcmVjZWl2ZUluZGV4OiBOdW1iZXIobmV4dC5jdXJyZW50SW5kZXggfHwgMClcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBfaHViQWRtaW5Ub2tlbiAoKSB7XG4gICAgcmV0dXJuIHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmFkbWluVG9rZW4pO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlU2VuZFBheW1lbnQgKCkge1xuICAgIGNvbnN0IHBheW1lbnRUbyA9IFN0cmluZyh0aGlzLnN0YXRlLnBheW1lbnRUbyB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IHBheW1lbnRBbW91bnRTYXRzID0gTnVtYmVyKHRoaXMuc3RhdGUucGF5bWVudEFtb3VudFNhdHMgfHwgMCk7XG4gICAgaWYgKCFwYXltZW50VG8pIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBwYXltZW50UmVzdWx0OiB7IGVycm9yOiAnUmVjaXBpZW50IGlzIHJlcXVpcmVkLicgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocGF5bWVudEFtb3VudFNhdHMpIHx8IHBheW1lbnRBbW91bnRTYXRzIDw9IDApIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBwYXltZW50UmVzdWx0OiB7IGVycm9yOiAnQW1vdW50IChzYXRzKSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhZG1pblRva2VuID0gdGhpcy5faHViQWRtaW5Ub2tlbigpO1xuICAgIGlmICghYWRtaW5Ub2tlbikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHBheW1lbnRSZXN1bHQ6IHtcbiAgICAgICAgICBlcnJvcjogJ0FkbWluIHRva2VuIHJlcXVpcmVkLiBIdWIgd2FsbGV0IHNwZW5kcyB1c2UgdGhlIHNldHVwIHRva2VuIChzYW1lIGFzIEdlbmVyYXRlIEJsb2NrIC8gYnJvYWRjYXN0KS4nXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZW5kUGF5bWVudCh0aGlzLnN0YXRlLnVwc3RyZWFtLCB0aGlzLnN0YXRlLndhbGxldCwge1xuICAgICAgICB0bzogcGF5bWVudFRvLFxuICAgICAgICBhbW91bnRTYXRzOiBwYXltZW50QW1vdW50U2F0cyxcbiAgICAgICAgbWVtbzogdGhpcy5zdGF0ZS5wYXltZW50TWVtbyxcbiAgICAgICAgYWRtaW5Ub2tlblxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHBhaWRUeGlkID0gKHJlc3VsdCAmJiByZXN1bHQucGF5bWVudCAmJiByZXN1bHQucGF5bWVudC50eGlkKSB8fCAocmVzdWx0ICYmIHJlc3VsdC50eGlkKTtcbiAgICAgIGlmIChwYWlkVHhpZCAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NsaWVudEJhbGFuY2VVcGRhdGUnKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwYXltZW50UmVzdWx0OiByZXN1bHQgfHwgeyBzdGF0dXM6ICdzdWJtaXR0ZWQnIH0sXG4gICAgICAgIHBheW1lbnRBbW91bnRTYXRzOiAnJyxcbiAgICAgICAgcGF5bWVudE1lbW86ICcnXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcGF5bWVudFJlc3VsdDogeyBlcnJvcjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpIH0gfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlTG9va3VwQWRkcmVzcyAoKSB7XG4gICAgY29uc3QgYWRkcmVzcyA9IFN0cmluZyh0aGlzLnN0YXRlLmxvb2t1cEFkZHJlc3MgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb29rdXBSZXN1bHQ6IHsgZXJyb3I6ICdBZGRyZXNzIGlzIHJlcXVpcmVkLicgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGxvb2t1cExvYWRpbmc6IHRydWUsIGxvb2t1cFJlc3VsdDogbnVsbCB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hBZGRyZXNzQmFsYW5jZSh0aGlzLnN0YXRlLnVwc3RyZWFtLCBhZGRyZXNzKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb29rdXBSZXN1bHQ6IHJlc3VsdCB8fCB7IGVycm9yOiAnTm8gYmFsYW5jZSBkYXRhIHJldHVybmVkLicgfSwgbG9va3VwTG9hZGluZzogZmFsc2UgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBsb29rdXBSZXN1bHQ6IHsgZXJyb3I6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9LFxuICAgICAgICBsb29rdXBMb2FkaW5nOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlUmVxdWVzdEZhdWNldCAoKSB7XG4gICAgY29uc3QgYWRkcmVzcyA9IFN0cmluZyh0aGlzLnN0YXRlLmZhdWNldEFkZHJlc3MgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBmYXVjZXRSZXN1bHQ6IHsgZXJyb3I6ICdBZGRyZXNzIGlzIHJlcXVpcmVkLicgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYW1vdW50U2F0cyA9IE1hdGgubWF4KDEsIE1hdGgubWluKDEwMDAwMDAsIE51bWJlcih0aGlzLnN0YXRlLmZhdWNldEFtb3VudFNhdHMgfHwgMTAwMDApIHx8IDEwMDAwKSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGZhdWNldFJlc3VsdDogbnVsbCB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxdWVzdEZhdWNldCh0aGlzLnN0YXRlLnVwc3RyZWFtLCB7IGFkZHJlc3MsIGFtb3VudFNhdHMgfSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZmF1Y2V0UmVzdWx0OiByZXN1bHQgfSk7XG4gICAgICBpZiAoIXJlc3VsdC5lcnJvciAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NsaWVudEJhbGFuY2VVcGRhdGUnKSk7XG4gICAgICB9XG4gICAgICBpZiAoIXJlc3VsdC5lcnJvciAmJiB0aGlzLnN0YXRlLndhbGxldCAmJiB0aGlzLnN0YXRlLndhbGxldC53YWxsZXRJZCkge1xuICAgICAgICBjbGVhckJhbGFuY2VDYWNoZSh0aGlzLnN0YXRlLndhbGxldC53YWxsZXRJZCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZhdWNldFJlc3VsdDogeyBlcnJvcjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpIH0gfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlQ3JlYXRlTGlnaHRuaW5nSW52b2ljZSAoKSB7XG4gICAgY29uc3QgYW1vdW50U2F0cyA9IE51bWJlcih0aGlzLnN0YXRlLmludm9pY2VBbW91bnRTYXRzIHx8IDApO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFtb3VudFNhdHMpIHx8IGFtb3VudFNhdHMgPD0gMCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpZ2h0bmluZ1Jlc3VsdDogeyBlcnJvcjogJ0ludm9pY2UgYW1vdW50IChzYXRzKSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLicgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZUxpZ2h0bmluZ0ludm9pY2UodGhpcy5zdGF0ZS51cHN0cmVhbSwgdGhpcy5zdGF0ZS53YWxsZXQsIHtcbiAgICAgICAgYW1vdW50U2F0cyxcbiAgICAgICAgbWVtbzogdGhpcy5zdGF0ZS5pbnZvaWNlTWVtb1xuICAgICAgfSk7XG4gICAgICBjb25zdCBpbnZvaWNlID0gcmVzdWx0Lmludm9pY2UgfHwgcmVzdWx0LmJvbHQxMSB8fCByZXN1bHQucmVxdWVzdCB8fCAnJztcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBsaWdodG5pbmdSZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgaW52b2ljZUlucHV0OiBpbnZvaWNlIHx8IHRoaXMuc3RhdGUuaW52b2ljZUlucHV0XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpZ2h0bmluZ1Jlc3VsdDogeyBlcnJvcjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpIH0gfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlRGVjb2RlTGlnaHRuaW5nSW52b2ljZSAoKSB7XG4gICAgY29uc3QgaW52b2ljZSA9IFN0cmluZyh0aGlzLnN0YXRlLmludm9pY2VJbnB1dCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghaW52b2ljZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxpZ2h0bmluZ1Jlc3VsdDogeyBlcnJvcjogJ1Bhc3RlIGEgTGlnaHRuaW5nIGludm9pY2UgdG8gZGVjb2RlLicgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlY29kZUxpZ2h0bmluZ0ludm9pY2UodGhpcy5zdGF0ZS51cHN0cmVhbSwgaW52b2ljZSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlnaHRuaW5nUmVzdWx0OiByZXN1bHQgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsaWdodG5pbmdSZXN1bHQ6IHsgZXJyb3I6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9IH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVBheUxpZ2h0bmluZ0ludm9pY2UgKCkge1xuICAgIGNvbnN0IGludm9pY2UgPSBTdHJpbmcodGhpcy5zdGF0ZS5pbnZvaWNlSW5wdXQgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIWludm9pY2UpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsaWdodG5pbmdSZXN1bHQ6IHsgZXJyb3I6ICdQYXN0ZSBhIExpZ2h0bmluZyBpbnZvaWNlIHRvIHBheS4nIH0gfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXlMaWdodG5pbmdJbnZvaWNlKHRoaXMuc3RhdGUudXBzdHJlYW0sIHRoaXMuc3RhdGUud2FsbGV0LCBpbnZvaWNlKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsaWdodG5pbmdSZXN1bHQ6IHJlc3VsdCB9KTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlnaHRuaW5nUmVzdWx0OiB7IGVycm9yOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfSB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVDcmVhdGVDaGFubmVsICgpIHtcbiAgICBjb25zdCByZW1vdGUgPSBTdHJpbmcodGhpcy5zdGF0ZS5jaGFubmVsQ3JlYXRlUmVtb3RlIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgYW1vdW50U2F0cyA9IE51bWJlcih0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVBbW91bnRTYXRzIHx8IDApO1xuICAgIGlmICghcmVtb3RlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2hhbm5lbENyZWF0ZVJlc3VsdDogeyBlcnJvcjogJ1JlbW90ZSAoaWRAaXA6cG9ydCkgaXMgcmVxdWlyZWQuJyB9IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXJlbW90ZS5pbmNsdWRlcygnQCcpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2hhbm5lbENyZWF0ZVJlc3VsdDogeyBlcnJvcjogJ1JlbW90ZSBtdXN0IGJlIGlkQGlwOnBvcnQgKGUuZy4gMDNhYmMuLi5AMTkyLjE2OC41MC41Ojk3MzUpLicgfSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYW1vdW50U2F0cykgfHwgYW1vdW50U2F0cyA8IDEwMDAwKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2hhbm5lbENyZWF0ZVJlc3VsdDogeyBlcnJvcjogJ0Ftb3VudCBtdXN0IGJlIGF0IGxlYXN0IDEwMDAwIHNhdHMuJyB9IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgY2hhbm5lbENyZWF0ZUxvYWRpbmc6IHRydWUsIGNoYW5uZWxDcmVhdGVSZXN1bHQ6IG51bGwgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZWF0ZUxpZ2h0bmluZ0NoYW5uZWwodGhpcy5zdGF0ZS51cHN0cmVhbSwge1xuICAgICAgICByZW1vdGUsXG4gICAgICAgIGFtb3VudFNhdHMsXG4gICAgICAgIHB1c2hNc2F0OiB0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVQdXNoTXNhdCA/IE51bWJlcih0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVQdXNoTXNhdCkgOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaGFzRXJyb3IgPSByZXN1bHQgJiYgKHJlc3VsdC5lcnJvciB8fCByZXN1bHQuZGV0YWlsKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjaGFubmVsQ3JlYXRlUmVzdWx0OiByZXN1bHQsXG4gICAgICAgIGNoYW5uZWxDcmVhdGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgLi4uKGhhc0Vycm9yID8ge30gOiB7IGNoYW5uZWxDcmVhdGVSZW1vdGU6ICcnLCBjaGFubmVsQ3JlYXRlUHVzaE1zYXQ6ICcnIH0pXG4gICAgICB9KTtcbiAgICAgIGlmICghaGFzRXJyb3IpIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY2hhbm5lbENyZWF0ZVJlc3VsdDogeyBlcnJvcjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpIH0sXG4gICAgICAgIGNoYW5uZWxDcmVhdGVMb2FkaW5nOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlR2VuZXJhdGVCbG9jayAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEJsb2NrIGdlbmVyYXRpb24gYWx3YXlzIHVzZXMgdGhlIEh1YidzIHdhbGxldDsgbm8gYWRkcmVzcyBpcyBzZW50IHNvIGNvaW5iYXNlIGdvZXMgdG8gdGhlIEh1Yi5cbiAgICAgIC8vIEFkbWluIHRva2VuIHJlcXVpcmVkIGZvciBibG9jayBnZW5lcmF0aW9uLlxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7IC4uLnRoaXMuc3RhdGUudXBzdHJlYW0sIGFwaVRva2VuOiB0aGlzLnByb3BzLmFkbWluVG9rZW4gfHwgdGhpcy5zdGF0ZS51cHN0cmVhbS5hcGlUb2tlbiB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2VuZXJhdGVCbG9jayhzZXR0aW5ncywgeyBjb3VudDogMSB9KTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBwYXltZW50UmVzdWx0OiB7IGdlbmVyYXRlZEJsb2NrOiByZXN1bHQgfSB9KTtcbiAgICAgIGlmICh0aGlzLnN0YXRlLndhbGxldCAmJiB0aGlzLnN0YXRlLndhbGxldC53YWxsZXRJZCkge1xuICAgICAgICBjbGVhckJhbGFuY2VDYWNoZSh0aGlzLnN0YXRlLndhbGxldC53YWxsZXRJZCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjbGllbnRCYWxhbmNlVXBkYXRlJykpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFzaGVzID0gcmVzdWx0ICYmIEFycmF5LmlzQXJyYXkocmVzdWx0LmJsb2NrSGFzaGVzKSA/IHJlc3VsdC5ibG9ja0hhc2hlcyA6IFtdO1xuICAgICAgICBjb25zdCB0aXAgPSBoYXNoZXMubGVuZ3RoID8gU3RyaW5nKGhhc2hlc1toYXNoZXMubGVuZ3RoIC0gMV0pIDogJyc7XG4gICAgICAgIGNvbnN0IG4gPSByZXN1bHQgJiYgcmVzdWx0LmNvdW50ICE9IG51bGwgPyBOdW1iZXIocmVzdWx0LmNvdW50KSA6IGhhc2hlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHN1YiA9IHRpcFxuICAgICAgICAgID8gYCR7TnVtYmVyLmlzRmluaXRlKG4pICYmIG4gPiAxID8gYCR7bn0gYmxvY2tzIMK3IGAgOiAnJ31UaXAgJHt0aXAuc2xpY2UoMCwgMTQpfeKApmBcbiAgICAgICAgICA6ICdDaGFpbiB0aXAgdXBkYXRlZCDigJQgY2hlY2sgQml0Y29pbiBkYXNoYm9hcmQnO1xuICAgICAgICBwdXNoVWlOb3RpZmljYXRpb24oe1xuICAgICAgICAgIGlkOiBgcmVndGVzdC1ibG9jay0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICBraW5kOiAnYml0Y29pbl9ibG9jaycsXG4gICAgICAgICAgdGl0bGU6ICdOZXcgYmxvY2sgKHJlZ3Rlc3QpJyxcbiAgICAgICAgICBzdWJ0aXRsZTogc3ViLFxuICAgICAgICAgIGhyZWY6IHRpcCA/IGAvc2VydmljZXMvYml0Y29pbi9ibG9ja3MvJHtlbmNvZGVVUklDb21wb25lbnQodGlwKX1gIDogJy9zZXJ2aWNlcy9iaXRjb2luJyxcbiAgICAgICAgICBjb3B5VGV4dDogdGlwIHx8IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcGF5bWVudFJlc3VsdDogeyBlcnJvcjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpIH0gfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlQ3JlYXRlUGF5am9pbkRlcG9zaXQgKCkge1xuICAgIGlmICghdGhpcy5zdGF0ZS5wYXlqb2luRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHBheWpvaW5SZXN1bHQ6IHsgZXJyb3I6ICdFbmFibGUgUGF5am9pbiBmaXJzdCB0byBjcmVhdGUgYW4gb3B0aW9uYWwgcGF5am9pbiBkZXBvc2l0IHJlcXVlc3QuJyB9IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZWNlaXZlV2FsbGV0ID0gZ2V0TmV4dFJlY2VpdmVXYWxsZXRDb250ZXh0KHRoaXMuZ2V0SWRlbnRpdHkoKSk7XG4gICAgICBjb25zdCBwalByZWYgPSBsb2FkUGF5am9pblByZWZlcmVuY2VzKCk7XG4gICAgICBjb25zdCB1c2VKbSA9IHBqUHJlZi5yZWNlaXZlVGFwcm9vdEpvaW5tYXJrZXQgIT09IGZhbHNlO1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGNyZWF0ZVBheWpvaW5EZXBvc2l0KHRoaXMuc3RhdGUudXBzdHJlYW0sIHJlY2VpdmVXYWxsZXQsIHtcbiAgICAgICAgLi4uKHVzZUptXG4gICAgICAgICAgPyB7IHJlY2VpdmVUZW1wbGF0ZTogJ2pvaW5tYXJrZXRfdGFwcm9vdF92MScgfVxuICAgICAgICAgIDogeyBhZGRyZXNzOiB0aGlzLnN0YXRlLndhbGxldC5hZGRyZXNzIH0pLFxuICAgICAgICBhbW91bnRTYXRzOiBOdW1iZXIodGhpcy5zdGF0ZS5wYXlqb2luQW1vdW50U2F0cyB8fCAwKSxcbiAgICAgICAgbGFiZWw6IHRoaXMuc3RhdGUucGF5am9pbkxhYmVsLFxuICAgICAgICBtZW1vOiB0aGlzLnN0YXRlLnBheWpvaW5NZW1vXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwYXlqb2luU2Vzc2lvbklkOiBzZXNzaW9uLmlkIHx8ICcnLFxuICAgICAgICBwYXlqb2luUmVzdWx0OiBzZXNzaW9uLFxuICAgICAgICBwYXlqb2luQW1vdW50U2F0czogJycsXG4gICAgICAgIHBheWpvaW5MYWJlbDogJycsXG4gICAgICAgIHBheWpvaW5NZW1vOiAnJ1xuICAgICAgfSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzaWQgPSBTdHJpbmcoc2Vzc2lvbi5pZCB8fCAnJykudHJpbSgpO1xuICAgICAgICBjb25zdCBhbXQgPSBzZXNzaW9uLmFtb3VudFNhdHMgIT0gbnVsbCAmJiBOdW1iZXIoc2Vzc2lvbi5hbW91bnRTYXRzKSA+IDBcbiAgICAgICAgICA/IGAke3Nlc3Npb24uYW1vdW50U2F0c30gc2F0c2BcbiAgICAgICAgICA6ICdhbW91bnQgb3B0aW9uYWwnO1xuICAgICAgICBpZiAoc2lkKSB7XG4gICAgICAgICAgcHVzaFVpTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIGlkOiBgcGF5am9pbi1zZXNzaW9uLSR7c2lkfWAsXG4gICAgICAgICAgICBraW5kOiAncGF5am9pbicsXG4gICAgICAgICAgICB0aXRsZTogJ1BheWpvaW4gZGVwb3NpdCBzZXNzaW9uIHJlYWR5JyxcbiAgICAgICAgICAgIHN1YnRpdGxlOiBhbXQsXG4gICAgICAgICAgICBocmVmOiBgL3BheW1lbnRzP3BheWpvaW5TZXNzaW9uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNpZCl9YCxcbiAgICAgICAgICAgIGNvcHlUZXh0OiBzZXNzaW9uLmJpcDIxVXJpIHx8IHNlc3Npb24ucHJvcG9zYWxVUkwgfHwgc2lkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcGF5am9pblJlc3VsdDogeyBlcnJvcjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpIH0gfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlUmVmcmVzaFBheWpvaW5TZXNzaW9uICgpIHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBTdHJpbmcodGhpcy5zdGF0ZS5wYXlqb2luU2Vzc2lvbklkIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFzZXNzaW9uSWQpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGZldGNoUGF5am9pblNlc3Npb24odGhpcy5zdGF0ZS51cHN0cmVhbSwgc2Vzc2lvbklkKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBwYXlqb2luUmVzdWx0OiBzZXNzaW9uIHx8IHRoaXMuc3RhdGUucGF5am9pblJlc3VsdCB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHBheWpvaW5SZXN1bHQ6IHsgZXJyb3I6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9IH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBQbGFjZWhvbGRlciBhbmQgaGludCBmb3IgYWRkcmVzcyBpbnB1dHMgYmFzZWQgb24gSHViIEJpdGNvaW4gbmV0d29yay4gKi9cbiAgZ2V0QWRkcmVzc1BsYWNlaG9sZGVyIChuZXR3b3JrKSB7XG4gICAgY29uc3QgbiA9IFN0cmluZyhuZXR3b3JrIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChuID09PSAncmVndGVzdCcpIHJldHVybiAnYmNydDEuLi4gb3IgbS80NFxcJy8wXFwnLzBcXCcvMC8wJztcbiAgICBpZiAobiA9PT0gJ3Rlc3RuZXQnIHx8IG4gPT09ICdzaWduZXQnKSByZXR1cm4gJ3RiMS4uLiBvciAyTi4uLic7XG4gICAgaWYgKG4gPT09ICdtYWlubmV0JyB8fCBuID09PSAnbWFpbicpIHJldHVybiAnYmMxLi4uIG9yIDMuLi4nO1xuICAgIHJldHVybiAnYWRkcmVzcyBmb3IgY3VycmVudCBuZXR3b3JrJztcbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gdGhpcy5zdGF0ZS53YWxsZXQ7XG4gICAgY29uc3QgaGFzVXBzdHJlYW0gPSAhISh0aGlzLnN0YXRlLnVwc3RyZWFtLmV4cGxvcmVyQmFzZVVybCB8fCB0aGlzLnN0YXRlLnVwc3RyZWFtLnBheW1lbnRzQmFzZVVybCB8fCB0aGlzLnN0YXRlLnVwc3RyZWFtLmxpZ2h0bmluZ0Jhc2VVcmwpO1xuICAgIGNvbnN0IGJpdGNvaW5SZWFkeSA9ICEhKHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cyAmJiB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMuYXZhaWxhYmxlKTtcbiAgICBjb25zdCBiaXRjb2luTmV0d29yayA9IFN0cmluZygodGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzICYmIHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5uZXR3b3JrKSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpc1JlZ3Rlc3QgPSBiaXRjb2luTmV0d29yayA9PT0gJ3JlZ3Rlc3QnO1xuICAgIGNvbnN0IGhhc0FkbWluVG9rZW4gPSAhIXJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIodGhpcy5wcm9wcy5hZG1pblRva2VuKTtcbiAgICBjb25zdCBjYW5HZW5lcmF0ZUJsb2NrcyA9IGJpdGNvaW5SZWFkeSAmJiBiaXRjb2luTmV0d29yayA9PT0gJ3JlZ3Rlc3QnO1xuICAgIGNvbnN0IGNhblNob3dHZW5lcmF0ZUJsb2NrID0gY2FuR2VuZXJhdGVCbG9ja3MgJiYgaGFzQWRtaW5Ub2tlbjtcbiAgICBjb25zdCBsaWdodG5pbmdBdmFpbGFibGUgPSAhISh0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cyAmJiB0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5hdmFpbGFibGUpO1xuICAgIGNvbnN0IGFkZHJlc3NQbGFjZWhvbGRlciA9IHRoaXMuZ2V0QWRkcmVzc1BsYWNlaG9sZGVyKGJpdGNvaW5OZXR3b3JrKTtcblxuICAgIGNvbnN0IGJjID0gdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzICYmIHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5ibG9ja2NoYWluO1xuICAgIGNvbnN0IG1wID0gdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzICYmIHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5tZW1wb29sSW5mbztcbiAgICBjb25zdCBub2RlUGVlcnMgPSBBcnJheS5pc0FycmF5KHRoaXMuc3RhdGUubm9kZVBlZXJzKSA/IHRoaXMuc3RhdGUubm9kZVBlZXJzIDogW107XG4gICAgY29uc3Qgbm4gPSB0aGlzLnN0YXRlLm5vZGVOZXR3b3JrICYmIHR5cGVvZiB0aGlzLnN0YXRlLm5vZGVOZXR3b3JrID09PSAnb2JqZWN0JyA/IHRoaXMuc3RhdGUubm9kZU5ldHdvcmsgOiB7fTtcbiAgICBjb25zdCBuaSA9IG5uLm5ldHdvcmtJbmZvICYmIHR5cGVvZiBubi5uZXR3b3JrSW5mbyA9PT0gJ29iamVjdCcgPyBubi5uZXR3b3JrSW5mbyA6IG51bGw7XG4gICAgY29uc3QgZGVwUm9vdCA9IG5uLmRlcGxveW1lbnRzICYmIHR5cGVvZiBubi5kZXBsb3ltZW50cyA9PT0gJ29iamVjdCcgPyBubi5kZXBsb3ltZW50cyA6IG51bGw7XG4gICAgY29uc3QgZGVwbG95bWVudHNJbm5lciA9IGRlcFJvb3QgJiYgZGVwUm9vdC5kZXBsb3ltZW50cyAmJiB0eXBlb2YgZGVwUm9vdC5kZXBsb3ltZW50cyA9PT0gJ29iamVjdCdcbiAgICAgID8gZGVwUm9vdC5kZXBsb3ltZW50c1xuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGRlcGxveW1lbnRFbnRyaWVzID0gZGVwbG95bWVudHNJbm5lclxuICAgICAgPyBPYmplY3QuZW50cmllcyhkZXBsb3ltZW50c0lubmVyKVxuICAgICAgOiAoZGVwUm9vdCA/IE9iamVjdC5lbnRyaWVzKGRlcFJvb3QpLmZpbHRlcigoW2tdKSA9PiBrICE9PSAnZGVwbG95bWVudHMnKSA6IFtdKTtcblxuICAgIHZvaWQgdGhpcy5zdGF0ZS5odWJVaUZsYWdzUmV2O1xuICAgIGNvbnN0IGh1YlVpID0gbG9hZEh1YlVpRmVhdHVyZUZsYWdzKCk7XG4gICAgY29uc3QgYml0Y29pblBhZ2UgPSB0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuYml0Y29pblBhZ2UgPyBTdHJpbmcodGhpcy5wcm9wcy5iaXRjb2luUGFnZSkudG9Mb3dlckNhc2UoKSA6ICdkYXNoYm9hcmQnO1xuICAgIGNvbnN0IGlzRGFzaGJvYXJkUGFnZSA9IGJpdGNvaW5QYWdlID09PSAnZGFzaGJvYXJkJztcbiAgICBjb25zdCBpc0ZhdWNldFBhZ2UgPSBiaXRjb2luUGFnZSA9PT0gJ2ZhdWNldCc7XG4gICAgY29uc3QgaXNMaWdodG5pbmdQYWdlID0gYml0Y29pblBhZ2UgPT09ICdsaWdodG5pbmcnO1xuICAgIGNvbnN0IGlzRXhwbG9yZXJQYWdlID0gYml0Y29pblBhZ2UgPT09ICdleHBsb3Jlcic7XG4gICAgY29uc3QgcGF5am9pblNuYXBzaG90ID0gdGhpcy5zdGF0ZS5wYXlqb2luU2Vzc2lvbnNTbmFwc2hvdCAmJiB0eXBlb2YgdGhpcy5zdGF0ZS5wYXlqb2luU2Vzc2lvbnNTbmFwc2hvdCA9PT0gJ29iamVjdCdcbiAgICAgID8gdGhpcy5zdGF0ZS5wYXlqb2luU2Vzc2lvbnNTbmFwc2hvdFxuICAgICAgOiB7IGFjdGl2ZU5vdEV4cGlyZWQ6IDAsIGF3YWl0aW5nQ29tcGxldGlvbjogMCB9O1xuICAgIGNvbnN0IGxpZ2h0bmluZ0Z1bmRzID0gdGhpcy5nZXRMaWdodG5pbmdCYWxhbmNlRnJvbU91dHB1dHModGhpcy5zdGF0ZS5saWdodG5pbmdPdXRwdXRzIHx8IFtdKTtcbiAgICBjb25zdCBodWJXYWxsZXRTYXRzID0gTnVtYmVyKHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cyAmJiB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMuYmFsYW5jZVNhdHMgIT0gbnVsbFxuICAgICAgPyB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMuYmFsYW5jZVNhdHNcbiAgICAgIDogTWF0aC5yb3VuZChOdW1iZXIodGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzICYmIHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5iYWxhbmNlICE9IG51bGwgPyB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMuYmFsYW5jZSA6IDApICogU0FUU19QRVJfQlRDKSk7XG4gICAgY29uc3QgY2xpZW50V2FsbGV0U2F0cyA9IE51bWJlcih3YWxsZXQgJiYgd2FsbGV0LmJhbGFuY2VTYXRzICE9IG51bGwgPyB3YWxsZXQuYmFsYW5jZVNhdHMgOiAwKTtcbiAgICBjb25zdCBzaGFyZWRTZXNzaW9uc1NhdHMgPSBOdW1iZXIobGlnaHRuaW5nRnVuZHMuY29uZmlybWVkIHx8IDApICsgTnVtYmVyKGxpZ2h0bmluZ0Z1bmRzLnVuY29uZmlybWVkIHx8IDApICsgTnVtYmVyKGxpZ2h0bmluZ0Z1bmRzLmltbWF0dXJlIHx8IDApO1xuICAgIC8qKiBBdm9pZCBzaG93aW5nIOKAnE5vIGRhdGEgeWV04oCdIG9uIGZpcnN0IHBhaW50IGJlZm9yZSByZWZyZXNoKCkgcmVzb2x2ZXMgb3Igd2hpbGUgYSByZWZyZXNoIGlzIGluIGZsaWdodC4gKi9cbiAgICBjb25zdCBleHBsb3JlckRhdGFQZW5kaW5nID1cbiAgICAgIHRoaXMuc3RhdGUucmVmcmVzaGluZyB8fFxuICAgICAgKHRoaXMuc3RhdGUubG9hZGluZyAmJiB0aGlzLnN0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDAgJiYgdGhpcy5zdGF0ZS50cmFuc2FjdGlvbnMubGVuZ3RoID09PSAwKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nZmFkZS1pbic+XG4gICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cImJpdGNvaW4taG9tZS1oZWFkaW5nXCIgYXJpYS1kZXNjcmliZWRieT1cImJpdGNvaW4taG9tZS1zdW1tYXJ5XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdzdGlja3knLFxuICAgICAgICAgICAgICB0b3A6ICc2LjVyZW0nLFxuICAgICAgICAgICAgICB6SW5kZXg6IDEyLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI2ZmZicsXG4gICAgICAgICAgICAgIHBhZGRpbmdCb3R0b206ICcwLjM1ZW0nLFxuICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nLFxuICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAwIHJnYmEoMzQsIDM2LCAzOCwgMC4xNSknXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYWxpZ25JdGVtczogJ3N0cmV0Y2gnLCBnYXA6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoMlwiIGlkPVwiYml0Y29pbi1ob21lLWhlYWRpbmdcIiBzdHlsZT17eyBtYXJnaW46IDAgfX0+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiBjb2xvcj1cIm9yYW5nZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgPEhlYWRlci5Db250ZW50PkJpdGNvaW48L0hlYWRlci5Db250ZW50PlxuICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAgPGRpdiBpZD1cImZhYnJpYy1iaXRjb2luLXJlZ3Rlc3QtdG9vbGJhclwiIGFyaWEtbGFiZWw9XCJSZWd0ZXN0OiByZWZyZXNoLCBnZW5lcmF0ZSBibG9jaywgc2hvcnRjdXRzXCIgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4V3JhcDogJ3dyYXAnLCBnYXA6ICcwLjM1ZW0nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIGJhc2ljIGljb24gb25DbGljaz17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7IHNldHRpbmdzT3BlbjogdHJ1ZSwgdXBzdHJlYW1EcmFmdDogeyAuLi50aGlzLnN0YXRlLnVwc3RyZWFtIH0gfSl9IHRpdGxlPVwiQ29uZmlndXJlIHVwc3RyZWFtIEFQSXNcIiBhcmlhLWxhYmVsPVwiQ29uZmlndXJlIHVwc3RyZWFtIEFQSXNcIj5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjb2dcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gcHJpbWFyeSBsb2FkaW5nPXt0aGlzLnN0YXRlLnJlZnJlc2hpbmd9IG9uQ2xpY2s9eygpID0+IHRoaXMucmVmcmVzaCgpfT5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgIFJlZnJlc2hcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICB7Y2FuU2hvd0dlbmVyYXRlQmxvY2sgJiYgKFxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUdlbmVyYXRlQmxvY2soKX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJNaW5lIG9uZSBibG9jazogY29pbmJhc2UgcGF5cyB0aGlzIG5vZGXigJlzIEh1YiBiaXRjb2luZCB3YWxsZXQgb25seSDigJQgbm90IHlvdXIgYnJvd3NlciB3YWxsZXQgY2hpcC4gVXNlIEZhdWNldCB0byBzZW5kIGZyb20gdGhlIEh1YiB0byB5b3VyIHJlY2VpdmUgYWRkcmVzcywgdGhlbiBtaW5lIGFnYWluIHRvIGNvbmZpcm0uXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImN1YmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZSBCbG9ja1xuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7Y2FuR2VuZXJhdGVCbG9ja3MgPyAoXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGFzPXtMaW5rfVxuICAgICAgICAgICAgICAgICAgICB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2ZhdWNldFwiXG4gICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUmVxdWVzdCByZWd0ZXN0IGNvaW5zIGZyb20gdGhlIEh1YiB3YWxsZXQgdG8geW91ciBGYWJyaWMgcmVjZWl2ZSBhZGRyZXNzICh1cGRhdGVzIHRoZSB0b3AtYmFyIGJhbGFuY2UgYWZ0ZXIgYSBjb25maXJtIGJsb2NrKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJ0aW50XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgRmF1Y2V0XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7aHViVWkuYml0Y29pblBheW1lbnRzID8gKFxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvcGF5bWVudHNcIiBiYXNpYyB0aXRsZT1cIk9wZW4gd2FsbGV0IHBheW1lbnRzIG1hbmFnZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNyZWRpdCBjYXJkIG91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICBQYXltZW50c1xuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAge2h1YlVpLmJpdGNvaW5JbnZvaWNlcyA/IChcbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vaW52b2ljZXMjZmFicmljLWludm9pY2VzLXRhYi1kZW1vXCIgYmFzaWMgdGl0bGU9XCJDcmVhdGUgYW5kIG1hbmFnZSBpbnZvaWNlc1wiPlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZmlsZSBhbHRlcm5hdGUgb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIEludm9pY2VzXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7aHViVWkuYml0Y29pblJlc291cmNlcyA/IChcbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vcmVzb3VyY2VzXCIgYmFzaWMgdGl0bGU9XCJCcm93c2UgQml0Y29pbiBIVFRQIHJlc291cmNlcyAoR0VUKSBhbmQgTDEgdmVyaWZ5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzaXRlbWFwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VzXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7aHViVWkuYml0Y29pbkNyb3dkZnVuZCA/IChcbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kc1wiIGJhc2ljIHRpdGxlPVwiVGFwcm9vdCBjcm93ZGZ1bmQgdmF1bHQsIEFDUCBkb25hdGlvbiBQU0JULCBQYXlqb2luIHRvIGNhbXBhaWduIGFkZHJlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImhlYXJ0IG91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICBDcm93ZGZ1bmRzXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7aHViVWkuYml0Y29pbkxpZ2h0bmluZyA/IChcbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2xpZ2h0bmluZ1wiIGJhc2ljIHRpdGxlPVwiRGVkaWNhdGVkIExpZ2h0bmluZyBwYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJib2x0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgTGlnaHRuaW5nXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7aHViVWkuYml0Y29pbkV4cGxvcmVyID8gKFxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pbi9ibG9ja3NcIiBiYXNpYyB0aXRsZT1cIkRlZGljYXRlZCBFeHBsb3JlciBwYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzZWFyY2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICBFeHBsb3JlclxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgIGlkPVwiYml0Y29pbi1ob21lLXN1bW1hcnlcIlxuICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nLCBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjVlbScsIG1heFdpZHRoOiAnNDJyZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN0cm9uZz5Zb3VyIGJyb3dzZXIgd2FsbGV0PC9zdHJvbmc+IChGYWJyaWMgaWRlbnRpdHkpIHBvd2VycyBpbnZvaWNlcywgY2xpZW50LXNpZ25lZCBzZW5kcywgYW5kIHRoZSBiYWxhbmNlIGNoaXAg4oCUIHNlZXsnICd9XG4gICAgICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5ncy9iaXRjb2luLXdhbGxldFwiPkJpdGNvaW4gd2FsbGV0ICZhbXA7IGRlcml2YXRpb248L0xpbms+LlxuICAgICAgICAgICAgPHN0cm9uZz4gSHViIHdhbGxldDwvc3Ryb25nPiBpcyB0aGlzIG5vZGUmYXBvcztzIDxjb2RlPmJpdGNvaW5kPC9jb2RlPnsnICd9XG4gICAgICAgICAgICAoe2lzUmVndGVzdCA/ICdtaW5pbmcgb24gcmVndGVzdCwgJyA6ICcnfWFkbWluIHNwZW5kcywgUGF5am9pbik7IGl0IGlzIG5vdCB5b3VyIGlkZW50aXR5JmFwb3M7cyBrZXkuXG4gICAgICAgICAgICB7aXNSZWd0ZXN0ID8gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5SZWd0ZXN0Ojwvc3Ryb25nPiA8c3Ryb25nPkdlbmVyYXRlIEJsb2NrPC9zdHJvbmc+IG9ubHkgaW5jcmVhc2VzIHRoZSBIdWIgd2FsbGV0OyBpdCBkb2VzIG5vdCBjcmVkaXQgeW91ciBicm93c2VyIGJhbGFuY2UuXG4gICAgICAgICAgICAgICAgVXNlIHRoZSA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2ZhdWNldFwiPkZhdWNldDwvTGluaz4gKG9yIGEgcGFpZCBpbnZvaWNlIC8gUGF5am9pbiAvIHBlZXIgcGF5bWVudCkgdG8gbW92ZSB2YWx1ZSB0byB5b3VyIHJlY2VpdmUgYWRkcmVzcywgdGhlbiBtaW5lIGEgYmxvY2sgc28gaXQgY29uZmlybXMuXG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxIdWJSZWd0ZXN0QWRtaW5Ub2tlblBhbmVsXG4gICAgICAgICAgICBuZXR3b3JrPXtiaXRjb2luTmV0d29yayB8fCAnbWFpbm5ldCd9XG4gICAgICAgICAgICBhZG1pblRva2VuUHJvcD17dGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmFkbWluVG9rZW59XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Qml0Y29pbldhbGxldEJyYW5jaEJhciBpZGVudGl0eT17KHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5pZGVudGl0eSkgfHwge319IC8+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgPFNlZ21lbnRcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgbWFyZ2luVG9wOiAnLTFweCcsXG4gICAgICAgICAgICBwYWRkaW5nOiAnMC43NWVtIDFlbScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAnbGluZWFyLWdyYWRpZW50KDkyZGVnLCAjZjdmNWVmIDAlLCAjZWJlNmQ4IDQ1JSwgI2U4ZTRkNiAxMDAlKScsXG4gICAgICAgICAgICBib3JkZXJDb2xvcjogJyNkNGNmYzAnXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cImJpdGNvaW4taG9tZS13ZWFsdGgtaGVhZGluZ1wiPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4V3JhcDogJ3dyYXAnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC42NXJlbScsIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicgfX0+XG4gICAgICAgICAgICA8c3BhbiBpZD1cImJpdGNvaW4taG9tZS13ZWFsdGgtaGVhZGluZ1wiIHN0eWxlPXt7IGZvbnRXZWlnaHQ6IDYwMCwgY29sb3I6ICcjM2QzYTMzJywgZm9udFNpemU6ICcwLjk1ZW0nIH19PldlYWx0aCBzdGFjazwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzVjNTc0YycsIGZvbnRTaXplOiAnMC44NWVtJywgbWF4V2lkdGg6ICczNnJlbScsIGxpbmVIZWlnaHQ6IDEuNCB9fT5cbiAgICAgICAgICAgICAgRmFicmljIGNvbnRyYWN0cyAmYW1wOyBkb2NzIMK3IFBheWpvaW4gZGVwb3NpdCBjb29yZGluYXRpb24gwrcgTGlnaHRuaW5nIGNoYW5uZWxzXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC40NXJlbScgfX0+XG4gICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL2RvY3VtZW50c1wiIHNpemU9XCJzbWFsbFwiIGJhc2ljIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIj5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZmlsZSBhbHRlcm5hdGUgb3V0bGluZVwiIC8+IERvY3VtZW50c1xuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAge2h1YlVpLnBlZXJzID8gKFxuICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3BlZXJzXCIgc2l6ZT1cInNtYWxsXCIgYmFzaWMgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInVzZXJzXCIgLz4gUGVlcnNcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICA8U2VnbWVudCBzdHlsZT17eyBtYXJnaW5Ub3A6ICctMXB4JywgYm9yZGVyQ29sb3I6ICcjZDllMmYzJywgYmFja2dyb3VuZDogJyNmOGZiZmYnIH19PlxuICAgICAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cIm9wZXJhdG9yLW1hbmFnZWQtZGVwb3NpdHMtaGVhZGluZ1wiPlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImgzXCIgaWQ9XCJvcGVyYXRvci1tYW5hZ2VkLWRlcG9zaXRzLWhlYWRpbmdcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nIH19PlxuICAgICAgICAgICAgICBEZXBvc2l0cyBVbmRlciBNYW5hZ2VtZW50XG4gICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzRiNWI3MycsIG1hcmdpbkJvdHRvbTogJzAuNzVlbScsIG1heFdpZHRoOiAnNTRyZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgICBDdXN0b2R5IGJvdW5kYXJ5OiBub24tYWRtaW4gdXNlciBrZXlzIHN0YXkgaW4gdGhlIGJyb3dzZXIgd2FsbGV0OyB0aGUgSHViIG1hbmFnZXMgc2hhcmVkLXNlc3Npb24gZmxvd3MgKExpZ2h0bmluZyBub2RlIGNoYW5uZWxzIGFuZCBQYXlqb2luIHJlY2VpdmVyIHNlc3Npb25zKSBhbmQgbWF5IHNpZ24gY29udHJhY3QgbWVzc2FnZXMgZm9yIGNvb3JkaW5hdGVkIHNldHRsZW1lbnQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8VGFibGUgY29tcGFjdCBjZWxsZWQgdW5zdGFja2FibGUgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgd2lkdGg9ezV9PjxzdHJvbmc+Q2xpZW50IHdhbGxldCAoc2VsZi1jdXN0b2R5KTwvc3Ryb25nPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntmb3JtYXRTYXRzRGlzcGxheShjbGllbnRXYWxsZXRTYXRzKX0gc2F0czwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+UHJpdmF0ZSBrZXlzIHJlbWFpbiB3aXRoIHVzZXIgY2xpZW50cy48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxzdHJvbmc+SHViIHdhbGxldCAob3BlcmF0b3IpPC9zdHJvbmc+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2Zvcm1hdFNhdHNEaXNwbGF5KGh1YldhbGxldFNhdHMpfSBzYXRzPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5Ob2RlIG9wZXJhdGlvbnMgKHtpc1JlZ3Rlc3QgPyAncmVndGVzdCBtaW5pbmcvJyA6ICcnfWFkbWluIHNwZW5kcy9zZXR0bGVtZW50IHN0YWdpbmcpLjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+PHN0cm9uZz5TaGFyZWQgc2Vzc2lvbnMgKG1hbmFnZWQpPC9zdHJvbmc+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2Zvcm1hdFNhdHNEaXNwbGF5KHNoYXJlZFNlc3Npb25zU2F0cyl9IHNhdHM8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICAgICAgICBMaWdodG5pbmcgbGlzdGZ1bmRzIHRvdGFsIGFjcm9zcyBjb25maXJtZWQvdW5jb25maXJtZWQvaW1tYXR1cmUgb3V0cHV0cy5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+PHN0cm9uZz5QYXlqb2luIHNlc3Npb25zPC9zdHJvbmc+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e051bWJlcihwYXlqb2luU25hcHNob3QuYWN0aXZlTm90RXhwaXJlZCB8fCAwKX0gYWN0aXZlPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgICAgICAgICAge051bWJlcihwYXlqb2luU25hcHNob3QuYXdhaXRpbmdDb21wbGV0aW9uIHx8IDApfSBhd2FpdGluZyBjb21wbGV0aW9uLlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICA8L1RhYmxlLkJvZHk+XG4gICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvbGlnaHRuaW5nXCIgc2l6ZT1cInNtYWxsXCIgYmFzaWMgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJib2x0XCIgLz4gTWFuYWdlIExpZ2h0bmluZyBjaGFubmVsc1xuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvcGF5bWVudHMjd2VhbHRoLXBheWpvaW4tYm9hcmRcIiBzaXplPVwic21hbGxcIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNoaWVsZCBhbHRlcm5hdGVcIiAvPiBNYW5hZ2UgUGF5am9pbiBzZXNzaW9uc1xuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2V0dGluZ3MvYml0Y29pbi13YWxsZXRcIiBzaXplPVwic21hbGxcIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImtleVwiIC8+IENsaWVudCB3YWxsZXQgYm91bmRhcnlcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICB7IWhhc1Vwc3RyZWFtICYmIChcbiAgICAgICAgICA8TWVzc2FnZSB3YXJuaW5nPlxuICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPlVwc3RyZWFtIEFQSXMgbm90IGNvbmZpZ3VyZWQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgPHA+T3BlbiB0aGUgc2V0dGluZ3MgY29nIGFuZCBhZGQgeW91ciBleHBsb3Jlci9wYXltZW50cy9saWdodG5pbmcgZW5kcG9pbnRzIHRvIGVuYWJsZSBsaXZlIGRhdGEgYW5kIHRyYW5zYWN0aW9ucy48L3A+XG4gICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICApfVxuXG4gICAgICAgIHtoYXNVcHN0cmVhbSAmJiAhdGhpcy5zdGF0ZS5sb2FkaW5nICYmICF0aGlzLnN0YXRlLnJlZnJlc2hpbmcgJiYgIWJpdGNvaW5SZWFkeSAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2UgaW5mbz5cbiAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5IdWIgQml0Y29pbiBiYWNrZW5kIHVuYXZhaWxhYmxlPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBmb250U2l6ZTogJzAuOWVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICAgICAgRXhwbG9yZXIgbGlzdHMgYW5kIHRoZSBIdWIgd2FsbGV0IGJhbGFuY2Ugc3RheSBlbXB0eSB1bnRpbCB0aGlzIEh1YiBjYW4gcmVhY2ggPGNvZGU+Yml0Y29pbmQ8L2NvZGU+XG4gICAgICAgICAgICAgIHtpc1JlZ3Rlc3QgPyAnIChvciBlbmFibGUgbWFuYWdlZCByZWd0ZXN0KS4nIDogJy4nfXsnICd9XG4gICAgICAgICAgICAgIFlvdXIgPHN0cm9uZz5pZGVudGl0eSB3YWxsZXQ8L3N0cm9uZz4gbWF5IHN0aWxsIHNob3cgcmVjZWl2ZSBhZGRyZXNzZXMgd2hlbiB0aGUgUGF5bWVudHMgQVBJIGlzIHVwLiBDaGVjayBzZXJ2ZXIgbG9ncyBhbmR7JyAnfVxuICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5ncy9hZG1pblwiPkFkbWluPC9MaW5rPi5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICl9XG5cbiAgICAgICAge2hhc1Vwc3RyZWFtICYmIGJpdGNvaW5SZWFkeSAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2Ugc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5PcGVyYXRvciBkZXBvc2l0cyBjaGVja2xpc3Q8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgPExpc3QgYnVsbGV0ZWQgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGZvbnRTaXplOiAnMC44OGVtJywgY29sb3I6ICcjNTU1JyB9fT5cbiAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICBTYXZlIHRoZSA8c3Ryb25nPmFkbWluIHRva2VuPC9zdHJvbmc+IChmaXJzdC10aW1lIHNldHVwIC8gU2V0dGluZ3Mg4oaSIEFkbWluKSBmb3J7JyAnfVxuICAgICAgICAgICAgICAgIHtpc1JlZ3Rlc3QgPyAncmVndGVzdCBibG9jayB0b29scyBhbmQgJyA6ICcnfWh1Yi13YWxsZXQgc2VuZHN7aXNSZWd0ZXN0ID8gJycgOiAnIGFuZCBvdGhlciBhZG1pbiBSUEMgYWN0aW9ucyd9LlxuICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPlBheWpvaW46PC9zdHJvbmc+IGVuc3VyZSA8Y29kZT5HRVQgL3NlcnZpY2VzL3BheWpvaW48L2NvZGU+IHJlcG9ydHMgYXZhaWxhYmxlIChtaXJyb3I6IDxjb2RlPi9wYXltZW50cy9wYXlqb2luPC9jb2RlPik7IGNyZWF0ZSBzZXNzaW9ucyBiZWxvdyB3aGVuIDxzdHJvbmc+Qml0Y29pbiDihpIgUGF5bWVudHM8L3N0cm9uZz4gaXMgZW5hYmxlZCBpbiBmZWF0dXJlIGZsYWdzLiBDYXBhYmlsaXRpZXMgaW5jbHVkZSA8Y29kZT5mYWJyaWNQcm90b2NvbDwvY29kZT4gKEJJUDc4IHJlY2VpdmVyIHRvZGF5OyBCSVA3NyBhc3luYyByb2FkbWFwKS5cbiAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5MaWdodG5pbmc6PC9zdHJvbmc+IFNlcnZpY2UgSGVhbHRoIHNob3VsZCBzaG93IEwyIHdoZW4gQ29yZSBMaWdodG5pbmcgaXMgY29uZmlndXJlZCAob3Igc3R1YiBpbiBkZXYpLlxuICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgIDwvTGlzdD5cbiAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICl9XG5cbiAgICAgICAge3RoaXMuc3RhdGUuZXJyb3IgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlPlxuICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkJpdGNvaW4gZGF0YSByZWZyZXNoIGZhaWxlZDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJyB9fT57dGhpcy5zdGF0ZS5lcnJvcn08L3A+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19XG4gICAgICAgICAgICAgIGxvYWRpbmc9e3RoaXMuc3RhdGUucmVmcmVzaGluZ31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUucmVmcmVzaGluZ31cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5yZWZyZXNoKCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgUmV0cnlcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgKX1cblxuICAgICAgICA8U2VnbWVudCBsb2FkaW5nPXt0aGlzLnN0YXRlLmxvYWRpbmd9PlxuICAgICAgICAgIDxIZWFkZXIgYXM9J2gzJz5TZXJ2aWNlIEhlYWx0aDwvSGVhZGVyPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT48c3Ryb25nPkJyaWRnZSAoSHViIG5vZGUpOjwvc3Ryb25nPiBzdGF0dXMsIEh1YiB3YWxsZXQgYmFsYW5jZSwgQmVhY29uLCBMaWdodG5pbmcuPC9wPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44OGVtJywgY29sb3I6ICcjNjY2JywgbWFyZ2luOiAnMCAwIDAuNjVlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPkJlYWNvbiAvIGZlZGVyYXRpb24gcHJvdmFiaWxpdHk6PC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzL2FkbWluL2JlYWNvbi1mZWRlcmF0aW9uXCI+QmVhY29uIEZlZGVyYXRpb248L0xpbms+XG4gICAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgICAgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC9lcG9jaFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5HRVQgZXBvY2g8L2E+XG4gICAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgICAgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC9tYW5pZmVzdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5HRVQgbWFuaWZlc3Q8L2E+XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxkaXY+PHN0cm9uZz5CaXRjb2luIChSUEMpOjwvc3Ryb25nPnsnICd9XG4gICAgICAgICAgICB7dGhpcy5zdGF0ZS5sb2FkaW5nIHx8IHRoaXMuc3RhdGUucmVmcmVzaGluZ1xuICAgICAgICAgICAgICA/ICdDaGVja2luZ+KApidcbiAgICAgICAgICAgICAgOiBiaXRjb2luUmVhZHlcbiAgICAgICAgICAgICAgICA/IGAke3RoaXMuc3RhdGUuYml0Y29pblN0YXR1cyAmJiB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMuc3RhdHVzID8gdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLnN0YXR1cyA6ICdhdmFpbGFibGUnfSR7Yml0Y29pbk5ldHdvcmsgPyBgICgke2JpdGNvaW5OZXR3b3JrfSlgIDogJyd9YFxuICAgICAgICAgICAgICAgIDogYHVuYXZhaWxhYmxlJHsodGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzICYmIHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5zdGF0dXMpID8gYCDigJQgJHt0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMuc3RhdHVzfWAgOiAnJ31gfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC41ZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAge2JpdGNvaW5SZWFkeSAmJiB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMgJiYgdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLm1lc3NhZ2VcbiAgICAgICAgICAgICAgPyB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMubWVzc2FnZVxuICAgICAgICAgICAgICA6IG51bGx9XG4gICAgICAgICAgICB7IWJpdGNvaW5SZWFkeSAmJiAhdGhpcy5zdGF0ZS5sb2FkaW5nICYmICF0aGlzLnN0YXRlLnJlZnJlc2hpbmcgPyAoXG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIFRoZSBodWIgaXMgbm90IHNlcnZpbmcgbGl2ZSBjaGFpbiBkYXRhIHVudGlsIDxjb2RlPmJpdGNvaW5kPC9jb2RlPiBpcyByZWFjaGFibGUgKG9yIG1hbmFnZWQgcmVndGVzdCBpcyBlbmFibGVkKS4gQmFsYW5jZXMgYmVsb3cgbWF5IGJlIHN0YWxlIG9yIHplcm8uXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtiaXRjb2luUmVhZHkgJiYgdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzICYmIHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5iYWxhbmNlICE9IG51bGwgJiYgKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHN0cm9uZz5IdWIgd2FsbGV0IGJhbGFuY2U6PC9zdHJvbmc+IHtOdW1iZXIodGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLmJhbGFuY2UgfHwgMCkudG9GaXhlZCg4KX0gQlRDeycgJ31cbiAgICAgICAgICAgICAge2lzUmVndGVzdCA/ICcocmVndGVzdCBibG9jayByZXdhcmRzIGdvIGhlcmUpJyA6ICcob24tY2hhaW4gd2FsbGV0IGJhbGFuY2UpJ31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAge2JpdGNvaW5SZWFkeSAmJiB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMgJiYgdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLmJlYWNvbiAmJiAoXG4gICAgICAgICAgICA8ZGl2PjxzdHJvbmc+QmVhY29uIGNvcmUgYmFsYW5jZTo8L3N0cm9uZz4ge3RoaXMuc2F0c1RvQlRDKHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5iZWFjb24uYmFsYW5jZVNhdHMgfHwgMCl9IEJUQyAoZXBvY2gge3RoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5iZWFjb24uY2xvY2sgfHwgMH0pPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2PjxzdHJvbmc+TGlnaHRuaW5nOjwvc3Ryb25nPiB7dGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMgJiYgdGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMuc3RhdHVzID09PSAnTk9UX0NPTkZJR1VSRUQnXG4gICAgICAgICAgICA/IChpc1JlZ3Rlc3QgPyAncnVucyB3aXRoIHJlZ3Rlc3QnIDogJ25vdCBjb25maWd1cmVkJylcbiAgICAgICAgICAgIDogKHRoaXMuc3RhdGUubGlnaHRuaW5nU3RhdHVzICYmIHRoaXMuc3RhdGUubGlnaHRuaW5nU3RhdHVzLnN0YXR1cyA9PT0gJ1NUVUInKVxuICAgICAgICAgICAgICA/ICdzdHViIChVSSB0ZXN0aW5nKSdcbiAgICAgICAgICAgICAgOiAodGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMgJiYgdGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMuc3RhdHVzID8gdGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMuc3RhdHVzIDogJ3Vua25vd24nKX08L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+e3RoaXMuc3RhdGUubGlnaHRuaW5nU3RhdHVzICYmIHRoaXMuc3RhdGUubGlnaHRuaW5nU3RhdHVzLm1lc3NhZ2UgPyB0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5tZXNzYWdlIDogJyd9PC9kaXY+XG4gICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICA8U2VnbWVudCBsb2FkaW5nPXt0aGlzLnN0YXRlLmxvYWRpbmd9PlxuICAgICAgICAgIDxIZWFkZXIgYXM9J2gzJz5Ob2RlIGNvbnNvbGU8L0hlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nIH19PlxuICAgICAgICAgICAgRGF0YSBjb21lcyBmcm9tIHRoaXMgSHViJmFwb3M7cyBCaXRjb2luIENvcmUgUlBDLlxuICAgICAgICAgIDwvcD5cblxuICAgICAgICAgIDxIZWFkZXIgYXM9J2g0Jz5EYXNoYm9hcmQ8L0hlYWRlcj5cbiAgICAgICAgICA8VGFibGUgY29tcGFjdCBjZWxsZWQgdW5zdGFja2FibGUgc2l6ZT0nc21hbGwnIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48c3Ryb25nPkNoYWluIGhlaWdodDwvc3Ryb25nPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57YmMgJiYgYmMuYmxvY2tzICE9IG51bGwgPyBiYy5ibG9ja3MgOiAodGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLmhlaWdodCAhPSBudWxsID8gdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLmhlaWdodCA6ICfigJQnKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+PHN0cm9uZz5IZWFkZXJzPC9zdHJvbmc+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntiYyAmJiBiYy5oZWFkZXJzICE9IG51bGwgPyBiYy5oZWFkZXJzIDogJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48c3Ryb25nPlZlcmlmaWNhdGlvbjwvc3Ryb25nPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIHtiYyAmJiBiYy52ZXJpZmljYXRpb25wcm9ncmVzcyAhPSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gYCR7KE51bWJlcihiYy52ZXJpZmljYXRpb25wcm9ncmVzcykgKiAxMDApLnRvRml4ZWQoMil9JWBcbiAgICAgICAgICAgICAgICAgICAgOiAn4oCUJ31cbiAgICAgICAgICAgICAgICAgIHtiYyAmJiBiYy5pbml0aWFsYmxvY2tkb3dubG9hZCA/ICcgKElCRCknIDogJyd9XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxzdHJvbmc+RGlmZmljdWx0eTwvc3Ryb25nPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57YmMgPyB0aGlzLmZvcm1hdERpZmZpY3VsdHkoYmMuZGlmZmljdWx0eSkgOiAn4oCUJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxzdHJvbmc+Q2hhaW48L3N0cm9uZz48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2JjICYmIGJjLmNoYWluID8gU3RyaW5nKGJjLmNoYWluKSA6ICfigJQnfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48c3Ryb25nPk1lZGlhbiB0aW1lPC9zdHJvbmc+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAge2JjICYmIGJjLm1lZGlhbnRpbWVcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShOdW1iZXIoYmMubWVkaWFudGltZSkgKiAxMDAwKS50b0xvY2FsZVN0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIDogJ+KAlCd9XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgeyh0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMuYml0Y29pblBydW5lZCB8fCAoYmMgJiYgYmMucHJ1bmVkKSkgPyAoXG4gICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxzdHJvbmc+UHJ1bmU8L3N0cm9uZz48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBjb2xTcGFuPXszfSBzdHlsZT17eyBmb250U2l6ZTogJzAuOTJlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICAgICAgICAgIFBydW5lZCA8Y29kZT5iaXRjb2luZDwvY29kZT4g4oCUIGJsb2NrIGZpbGVzIGJlbG93IGhlaWdodHsnICd9XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5iaXRjb2luUHJ1bmVIZWlnaHQgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMuYml0Y29pblBydW5lSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICA6IChiYyAmJiBiYy5wcnVuZWhlaWdodCAhPSBudWxsID8gYmMucHJ1bmVoZWlnaHQgOiAn4oCUJyl9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPnsnICd9XG4gICAgICAgICAgICAgICAgICAgIGFyZSBub3QgYXZhaWxhYmxlIG92ZXIgUlBDLiBUaGlzIGh1YiByZW1vdmVzIG1hdGNoaW5nIEJpdGNvaW4gYmxvY2svdHggZG9jdW1lbnRzIGZyb20gaXRzIDxlbT5sb2NhbDwvZW0+IHB1Ymxpc2hlZCBjYXRhbG9nIG9ubHk7IEZhYnJpYyA8Y29kZT5CaXRjb2luQmxvY2s8L2NvZGU+IC8gQmVhY29uIGVwb2NocyBzdGlsbCB0cmFjayB0aGUgY2hhaW4gdGlwLCBhbmQgcGVlcnMgY2FuIG9mZmVyIG9sZGVyIGJsb2NrcyB2aWEgaW52ZW50b3J5LlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgICA8L1RhYmxlPlxuXG4gICAgICAgICAgPEhlYWRlciBhcz0naDQnPk1lbXBvb2w8L0hlYWRlcj5cbiAgICAgICAgICA8VGFibGUgY29tcGFjdCBjZWxsZWQgdW5zdGFja2FibGUgc2l6ZT0nc21hbGwnIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48c3Ryb25nPlRyYW5zYWN0aW9uczwvc3Ryb25nPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMubWVtcG9vbFR4Q291bnQgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5tZW1wb29sVHhDb3VudFxuICAgICAgICAgICAgICAgICAgICA6IChtcCAmJiBtcC5zaXplICE9IG51bGwgPyBtcC5zaXplIDogJ+KAlCcpfVxuICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48c3Ryb25nPk1lbW9yeSB1c2FnZTwvc3Ryb25nPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57bXAgJiYgbXAudXNhZ2UgIT0gbnVsbCA/IHRoaXMuZm9ybWF0Qnl0ZXMobXAudXNhZ2UpIDogJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48c3Ryb25nPlRvdGFsIHZzaXplIChtZW1wb29sKTwvc3Ryb25nPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57bXAgJiYgbXAuYnl0ZXMgIT0gbnVsbCA/IHRoaXMuZm9ybWF0Qnl0ZXMobXAuYnl0ZXMpIDogJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxzdHJvbmc+VG90YWwgZmVlcyAoZXN0Lik8L3N0cm9uZz48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLm1lbXBvb2xGZWVTYXRzICE9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnNhdHNUb0JUQyh0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMubWVtcG9vbEZlZVNhdHMpfSBCVENcbiAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM4ODgnIH19Pih7Zm9ybWF0U2F0c0Rpc3BsYXkodGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLm1lbXBvb2xGZWVTYXRzKX0gc2F0cyk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6ICfigJQnfVxuICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5tZW1wb29sRmVlc1RydW5jYXRlZFxuICAgICAgICAgICAgICAgICAgICA/IDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnI2I2MCcgfX0+IChwYXJ0aWFsIHN1bSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxzdHJvbmc+TWluIHJlbGF5IGZlZTwvc3Ryb25nPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57bXAgJiYgbXAubWlucmVsYXl0eGZlZSAhPSBudWxsID8gYCR7bXAubWlucmVsYXl0eGZlZX0gQlRDL2t2QmAgOiAn4oCUJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+PHN0cm9uZz5NZW1wb29sIG1pbiBmZWU8L3N0cm9uZz48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e21wICYmIG1wLm1lbXBvb2xtaW5mZWUgIT0gbnVsbCA/IGAke21wLm1lbXBvb2xtaW5mZWV9IEJUQy9rdkJgIDogJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgICA8L1RhYmxlPlxuXG4gICAgICAgICAgPEhlYWRlciBhcz0naDQnPk5ldHdvcms8L0hlYWRlcj5cbiAgICAgICAgICA8VGFibGUgY29tcGFjdCBjZWxsZWQgdW5zdGFja2FibGUgc2l6ZT0nc21hbGwnIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48c3Ryb25nPkNvbm5lY3Rpb25zPC9zdHJvbmc+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAge25pXG4gICAgICAgICAgICAgICAgICAgID8gYCR7bmkuY29ubmVjdGlvbnMgIT0gbnVsbCA/IG5pLmNvbm5lY3Rpb25zIDogJ+KAlCd9IHRvdGFsICgke25pLmNvbm5lY3Rpb25zX2luICE9IG51bGwgPyBuaS5jb25uZWN0aW9uc19pbiA6IDB9IGluIC8gJHtuaS5jb25uZWN0aW9uc19vdXQgIT0gbnVsbCA/IG5pLmNvbm5lY3Rpb25zX291dCA6IDB9IG91dClgXG4gICAgICAgICAgICAgICAgICAgIDogJ+KAlCd9XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxzdHJvbmc+UmVsYXkgZmVlPC9zdHJvbmc+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntuaSAmJiBuaS5yZWxheWZlZSAhPSBudWxsID8gYCR7bmkucmVsYXlmZWV9IEJUQy9rdkJgIDogJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48c3Ryb25nPlVzZXIgYWdlbnQ8L3N0cm9uZz48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgY29sU3Bhbj0nMyc+e25pICYmIG5pLnN1YnZlcnNpb24gPyBTdHJpbmcobmkuc3VidmVyc2lvbikgOiAn4oCUJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxzdHJvbmc+UHJvdG9jb2wgLyB2ZXJzaW9uPC9zdHJvbmc+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIGNvbFNwYW49JzMnPlxuICAgICAgICAgICAgICAgICAge25pXG4gICAgICAgICAgICAgICAgICAgID8gYHByb3RvY29sICR7bmkucHJvdG9jb2x2ZXJzaW9uICE9IG51bGwgPyBuaS5wcm90b2NvbHZlcnNpb24gOiAn4oCUJ30gwrcgdmVyc2lvbiAke25pLnZlcnNpb24gIT0gbnVsbCA/IG5pLnZlcnNpb24gOiAn4oCUJ31gXG4gICAgICAgICAgICAgICAgICAgIDogJ+KAlCd9XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAge0FycmF5LmlzQXJyYXkodGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLnAycEFkZE5vZGVUYXJnZXRzKSAmJiB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMucDJwQWRkTm9kZVRhcmdldHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxzdHJvbmc+UGxheW5ldCBQMlA8L3N0cm9uZz48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBjb2xTcGFuPSczJz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjNTU1JyB9fT5CaXRjb2luIENvcmUgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8Y29kZT5hZGRub2RlPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM1NTUnIH19PiB0YXJnZXRzIChMMSBzeW5jKTogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLnAycEFkZE5vZGVUYXJnZXRzLm1hcCgoaCwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGtleT17U3RyaW5nKGgpICsgaX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aSA+IDAgPyAnLCAnIDogJyd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT57aH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgICA8L1RhYmxlPlxuXG4gICAgICAgICAgPEhlYWRlciBhcz0naDQnPkNvbnNlbnN1cyBkZXBsb3ltZW50czwvSGVhZGVyPlxuICAgICAgICAgIHtkZXBsb3ltZW50RW50cmllcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcxZW0nIH19Pk5vIGRlcGxveW1lbnQgZGF0YSAocmVxdWlyZXMgPGNvZGU+Z2V0ZGVwbG95bWVudGluZm88L2NvZGU+IG9uIHlvdXIgQ29yZSB2ZXJzaW9uKS48L3A+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxUYWJsZSBjb21wYWN0IGNlbGxlZCB1bnN0YWNrYWJsZSBzaXplPSdzbWFsbCcgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+RGVwbG95bWVudDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlN0YXR1czwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkhlaWdodCAvIGJpdDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICAgIDxUYWJsZS5Cb2R5PlxuICAgICAgICAgICAgICAgIHtkZXBsb3ltZW50RW50cmllcy5tYXAoKFtuYW1lLCBpbmZvXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gaW5mbyAmJiB0eXBlb2YgaW5mbyA9PT0gJ29iamVjdCcgPyBpbmZvIDoge307XG4gICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmUgPSByb3cuYWN0aXZlID09PSB0cnVlID8gJ2FjdGl2ZScgOiAocm93LmFjdGl2ZSA9PT0gZmFsc2UgPyAnaW5hY3RpdmUnIDogJ+KAlCcpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaCA9IHJvdy5oZWlnaHQgIT0gbnVsbCA/IHJvdy5oZWlnaHQgOiAocm93Lm1pbl9hY3RpdmF0aW9uX2hlaWdodCAhPSBudWxsID8gcm93Lm1pbl9hY3RpdmF0aW9uX2hlaWdodCA6ICfigJQnKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJpdCA9IHJvdy5iaXA5ICYmIHJvdy5iaXA5LmJpdCAhPSBudWxsID8gcm93LmJpcDkuYml0IDogcm93LmJpdDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3cga2V5PXtuYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48Y29kZT57bmFtZX08L2NvZGU+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPnthY3RpdmV9e3Jvdy50eXBlID8gYCDCtyAke3Jvdy50eXBlfWAgOiAnJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2h9e2JpdCAhPSBudWxsICYmIGJpdCAhPT0gJycgPyBgIMK3IGJpdCAke2JpdH1gIDogJyd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgICAgIDwvVGFibGU+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxIZWFkZXIgYXM9J2g0Jz5QZWVycyAoe25vZGVQZWVycy5sZW5ndGh9KTwvSGVhZGVyPlxuICAgICAgICAgIHtub2RlUGVlcnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW46ICcwIDAgMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgIHtiaXRjb2luUmVhZHlcbiAgICAgICAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIHtuaSAmJiBOdW1iZXIobmkuY29ubmVjdGlvbnMpID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmdldG5ldHdvcmtpbmZvPC9jb2RlPiByZXBvcnRzIHtOdW1iZXIobmkuY29ubmVjdGlvbnMpfSBQMlAgY29ubmVjdGlvbihzKSwgYnV0IHRoZSBwZWVyIHRhYmxlIGRpZCBub3QgbG9hZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8Y29kZT5HRVQgL3NlcnZpY2VzL2JpdGNvaW4vcGVlcnM8L2NvZGU+IG1heSBoYXZlIGZhaWxlZCBpbiB0aGlzIGJyb3dzZXIgdGFiKS4gVHJ5IDxzdHJvbmc+UmVmcmVzaCBwZWVyIGxpc3Q8L3N0cm9uZz4gb3IgeW91ciByZWd1bGFyIGJyb3dzZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIEJpdGNvaW4gUDJQIHBlZXJzIGluIDxjb2RlPmdldHBlZXJpbmZvPC9jb2RlPi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNSZWd0ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uIG1hbmFnZWQgcmVndGVzdCB3aXRoIDxjb2RlPmxpc3Rlbj0wPC9jb2RlPiB0aGlzIGlzIHVzdWFsIHVudGlsIGFuIG91dGJvdW5kIHBlZXIgY29ubmVjdHM7IHVzZSB0aGUgPHN0cm9uZz5QbGF5bmV0IFAyUDwvc3Ryb25nPnsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+YWRkbm9kZTwvY29kZT4gdGFyZ2V0cyBhYm92ZSBvciA8Y29kZT5ucG0gcnVuIGJpdGNvaW46YWRkbm9kZTwvY29kZT4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciB5b3UgaGF2ZSBwZWVycywgeW91IGNhbiBwdWxsIHJlZ3Rlc3QgY29pbnMgZnJvbSBhbm90aGVyIG9wZXJhdG9yJmFwb3M7cyBodWIgd2FsbGV0IOKAlCBlLmcuIG9wZW57JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2h1Yi5mYWJyaWMucHViL3NlcnZpY2VzL2JpdGNvaW4vZmF1Y2V0XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPmh1Yi5mYWJyaWMucHViL3NlcnZpY2VzL2JpdGNvaW4vZmF1Y2V0PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9YW5kIHBhc3RlIHlvdXIgcmVjZWl2ZSBhZGRyZXNzLCB0aGVuIDxzdHJvbmc+R2VuZXJhdGUgYmxvY2s8L3N0cm9uZz4gaGVyZSB0byBjb25maXJtLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnIENoZWNrIGNvbm5lY3Rpdml0eSwgZmlyZXdhbGwsIGFuZCBhZGRub2RlL2Nvbm5lY3Qgc2V0dGluZ3Mgb24gdGhpcyBDb3JlIG5vZGUuJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgQ291bGQgbm90IGxvYWQgcGVlcnMgKEJpdGNvaW4gUlBDIG9mZmxpbmUgb3IgPGNvZGU+R0VUIC9zZXJ2aWNlcy9iaXRjb2luL3BlZXJzPC9jb2RlPiBmYWlsZWQpLiBGaXggQml0Y29pbiBzdGF0dXMgZmlyc3QuXG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLnJlZnJlc2hpbmd9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUucmVmcmVzaGluZ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnJlZnJlc2goKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgICB7Yml0Y29pblJlYWR5ID8gJ1JlZnJlc2ggcGVlciBsaXN0JyA6ICdSZXRyeSd9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgb3ZlcmZsb3dYOiAnYXV0bycsIG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICAgIDxUYWJsZSBjb21wYWN0IGNlbGxlZCB1bnN0YWNrYWJsZSBzaXplPSdzbWFsbCc+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkFkZHJlc3M8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkRpcmVjdGlvbjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+UGluZyAobXMpPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5CeXRlcyBpbiAvIG91dDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+VXNlciBhZ2VudDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+SGVpZ2h0PC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAgICB7bm9kZVBlZXJzLnNsaWNlKDAsIDQwKS5tYXAoKHAsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdyBrZXk9e2Ake3AuaWQgIT0gbnVsbCA/IHAuaWQgOiBpfS0ke3AuYWRkciB8fCBpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJyB9fT57cC5hZGRyIHx8IHAuYWRkcmJpbmQgfHwgJ+KAlCd9PC9jb2RlPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57cC5pbmJvdW5kID8gJ2luYm91bmQnIDogJ291dGJvdW5kJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e3AucGluZ3RpbWUgIT0gbnVsbCA/IE51bWJlcihwLnBpbmd0aW1lKS50b0ZpeGVkKDApIDogJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAge3AuYnl0ZXNyZWN2ICE9IG51bGwgfHwgcC5ieXRlc3NlbnQgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGAke3AuYnl0ZXNyZWN2ICE9IG51bGwgPyB0aGlzLmZvcm1hdEJ5dGVzKHAuYnl0ZXNyZWN2KSA6ICfigJQnfSAvICR7cC5ieXRlc3NlbnQgIT0gbnVsbCA/IHRoaXMuZm9ybWF0Qnl0ZXMocC5ieXRlc3NlbnQpIDogJ+KAlCd9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICfigJQnfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBzdHlsZT17eyBtYXhXaWR0aDogJzE0ZW0nLCB3b3JkQnJlYWs6ICdicmVhay13b3JkJywgZm9udFNpemU6ICcwLjg1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge3Auc3VidmVyIHx8ICfigJQnfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwLnN5bmNlZF9oZWFkZXJzICE9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwLnN5bmNlZF9oZWFkZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogKHAuc3luY2VkX2Jsb2NrcyAhPSBudWxsID8gcC5zeW5jZWRfYmxvY2tzIDogKHAuc3RhcnRpbmdoZWlnaHQgIT0gbnVsbCA/IHAuc3RhcnRpbmdoZWlnaHQgOiAn4oCUJykpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L1RhYmxlLkJvZHk+XG4gICAgICAgICAgICAgIDwvVGFibGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPEhlYWRlciBhcz0naDQnPlNlYXJjaCAmYW1wOyB0b29sczwvSGVhZGVyPlxuICAgICAgICAgIDxGb3JtIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICA8Rm9ybS5Hcm91cCB3aWR0aHM9J2VxdWFsJz5cbiAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPGxhYmVsPk9wZW4gdHJhbnNhY3Rpb24gYnkgdHhpZDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nNjQtY2hhciBoZXggdHhpZCdcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnR4TG9va3VwSWR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyB0eExvb2t1cElkOiBlLnRhcmdldC52YWx1ZSwgdHhMb29rdXBFcnJvcjogbnVsbCB9KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkIHN0eWxlPXt7IGFsaWduU2VsZjogJ2ZsZXgtZW5kJyB9fT5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPSdidXR0b24nXG4gICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWJpdGNvaW5SZWFkeSB8fCAhaHViVWkuYml0Y29pbkV4cGxvcmVyfVxuICAgICAgICAgICAgICAgICAgdGl0bGU9eyFodWJVaS5iaXRjb2luRXhwbG9yZXIgPyAnRW5hYmxlIEJpdGNvaW4g4oCUIEJsb2NrICYgdHJhbnNhY3Rpb24gZGV0YWlsIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5JyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlVHhMb29rdXAoKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdzZWFyY2gnIC8+XG4gICAgICAgICAgICAgICAgICBPcGVuXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgIDwvRm9ybS5Hcm91cD5cbiAgICAgICAgICAgIHt0aGlzLnN0YXRlLnR4TG9va3VwRXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZSBzaXplPSdzbWFsbCc+e3RoaXMuc3RhdGUudHhMb29rdXBFcnJvcn08L01lc3NhZ2U+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRm9ybT5cblxuICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPkJyb2FkY2FzdCByYXcgdHJhbnNhY3Rpb248L3N0cm9uZz4g4oCUIDxjb2RlPnNlbmRyYXd0cmFuc2FjdGlvbjwvY29kZT4uIFJlcXVpcmVzIGFkbWluIHRva2VuIChzYW1lIGFzIEdlbmVyYXRlIEJsb2NrKS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICA8Rm9ybS5UZXh0QXJlYVxuICAgICAgICAgICAgICByb3dzPXs0fVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nUGFzdGUgaGV4IChubyBzcGFjZXMgcmVxdWlyZWQpJ1xuICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5yYXdUeEhleH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgcmF3VHhIZXg6IGUudGFyZ2V0LnZhbHVlLCByYXdUeFJlc3VsdDogbnVsbCB9KX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFoYXNBZG1pblRva2VufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICBjb2xvcj0nb3JhbmdlJ1xuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFiaXRjb2luUmVhZHkgfHwgIWhhc0FkbWluVG9rZW4gfHwgISh0aGlzLnN0YXRlLnJhd1R4SGV4IHx8ICcnKS50cmltKCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQnJvYWRjYXN0UmF3VHgoKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT0nc2VuZCcgLz5cbiAgICAgICAgICAgICAgQnJvYWRjYXN0XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAge3RoaXMuc3RhdGUucmF3VHhSZXN1bHQgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2VcbiAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fVxuICAgICAgICAgICAgICBuZWdhdGl2ZT17ISF0aGlzLnN0YXRlLnJhd1R4UmVzdWx0LmVycm9yfVxuICAgICAgICAgICAgICBwb3NpdGl2ZT17IXRoaXMuc3RhdGUucmF3VHhSZXN1bHQuZXJyb3J9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj57dGhpcy5zdGF0ZS5yYXdUeFJlc3VsdC5lcnJvciA/ICdCcm9hZGNhc3QgZmFpbGVkJyA6ICdCcm9hZGNhc3QgYWNjZXB0ZWQnfTwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnJhd1R4UmVzdWx0LmVycm9yID8gKFxuICAgICAgICAgICAgICAgIDxwPnt0aGlzLnN0YXRlLnJhd1R4UmVzdWx0LmVycm9yfTwvcD5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgIHR4aWR7JyAnfVxuICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUucmF3VHhSZXN1bHQudHhpZFxuICAgICAgICAgICAgICAgICAgICA/IChcbiAgICAgICAgICAgICAgICAgICAgICBodWJVaS5iaXRjb2luRXhwbG9yZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGluayB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodGhpcy5zdGF0ZS5yYXdUeFJlc3VsdC50eGlkKSl9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPnt0aGlzLnN0YXRlLnJhd1R4UmVzdWx0LnR4aWR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT57dGhpcy5zdGF0ZS5yYXdUeFJlc3VsdC50eGlkfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6ICfigJQnfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgPFNlZ21lbnQgbG9hZGluZz17dGhpcy5zdGF0ZS5sb2FkaW5nfT5cbiAgICAgICAgICA8SGVhZGVyIGFzPSdoMyc+V2FsbGV0PC9IZWFkZXI+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgPHN0cm9uZz5DbGllbnQ6PC9zdHJvbmc+IGlkZW50aXR5IGZpbmdlcnByaW50LCB4cHViLCByZWNlaXZlIGluZGV4LCBhbmQgY2xpZW50IGJhbGFuY2UgKG1hdGNoZXMgdGhlIHRvcC1iYXIgY2hpcCkuIDxzdHJvbmc+QnJpZGdlOjwvc3Ryb25nPiBIdWIgbm9kZSB3YWxsZXQg4oCUeycgJ31cbiAgICAgICAgICAgIHtpc1JlZ3Rlc3QgPyAncmVndGVzdCBibG9jayByZXdhcmRzLCAnIDogJ29uLWNoYWluIGJhbGFuY2UsICd9b3B0aW9uYWwgYWRtaW4gc3BlbmRzLCBQYXlqb2luIHJlY2VpdmVyLiA8c3Ryb25nPkRvY3VtZW50czo8L3N0cm9uZz4gcHVibGlzaGluZyBpcyBmcmVlOyBwYWlkIDxMaW5rIHRvPVwiL2RvY3VtZW50c1wiPmRpc3RyaWJ1dGU8L0xpbms+IHVzZXMgTDEgaW52b2ljZXMgdGllZCB0byB5b3VyIGlkZW50aXR5LlxuICAgICAgICAgICAgeyhodWJVaS5iaXRjb2luUGF5bWVudHMgfHwgaHViVWkuYml0Y29pbkxpZ2h0bmluZykgPyAoXG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIHsnICd9VGhpcyBIdWIgcnVuc3snICd9XG4gICAgICAgICAgICAgICAge2h1YlVpLmJpdGNvaW5QYXltZW50cyA/IChcbiAgICAgICAgICAgICAgICAgIDw+PHN0cm9uZz5vbmUgUGF5am9pbiByZWNlaXZlcjwvc3Ryb25nPiAoQklQNzgtc2hhcGVkIEhUVFAgUE9TVDsgPGNvZGU+cGo9PC9jb2RlPiBpbiBCSVAyMTsgPGNvZGU+YXN5bmNQYXlqb2luUm9hZG1hcDogQklQNzc8L2NvZGU+IGluIEpTT04gY2FwYWJpbGl0aWVzKTwvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtodWJVaS5iaXRjb2luUGF5bWVudHMgJiYgaHViVWkuYml0Y29pbkxpZ2h0bmluZyA/ICcgYW5kICcgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtodWJVaS5iaXRjb2luTGlnaHRuaW5nID8gPD48c3Ryb25nPm9uZSBMaWdodG5pbmc8L3N0cm9uZz4gc2VydmljZSBwYXRoPC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgICB7aHViVWkuYml0Y29pblBheW1lbnRzICYmICFodWJVaS5iaXRjb2luTGlnaHRuaW5nID8gJy4nIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7aHViVWkuYml0Y29pbkxpZ2h0bmluZyA/ICcuJyA6IG51bGx9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIHsnICd9VHVybiBvbiA8c3Ryb25nPkJpdGNvaW4g4oCUIFBheW1lbnRzPC9zdHJvbmc+IGFuZC9vciA8c3Ryb25nPkxpZ2h0bmluZzwvc3Ryb25nPiBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IGZvciBQYXlqb2luIGRlcG9zaXQgdG9vbGluZyBhbmQgTDIgY29udHJvbHMgb24gdGhpcyBwYWdlLlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyF3YWxsZXQuaGFzUHJpdmF0ZUtleSAmJiB3YWxsZXQud2FsbGV0SWQgJiYgKFxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Ub3A6ICcwLjI1ZW0nLCBjb2xvcjogJyMwYTYnIH19PlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9J2V5ZScgLz4gV2F0Y2gtb25seTogc2VydmVyIG5ldmVyIGhvbGRzIHlvdXIga2V5cy4gQmFsYW5jZSBpcyBkZXJpdmVkIGZyb20geHB1YiB2aWEgc2NhbnR4b3V0c2V0LlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8ZGl2PjxzdHJvbmc+TWFzdGVyIHdhbGxldDo8L3N0cm9uZz4gPGNvZGU+e3dhbGxldC53YWxsZXRJZCB8fCAnbm90IGF2YWlsYWJsZSd9PC9jb2RlPjwvZGl2PlxuICAgICAgICAgIDxkaXY+PHN0cm9uZz5JZGVudGl0eSBmaW5nZXJwcmludDo8L3N0cm9uZz4gPGNvZGU+e3dhbGxldC5maW5nZXJwcmludCB8fCAnbm90IGF2YWlsYWJsZSd9PC9jb2RlPjwvZGl2PlxuICAgICAgICAgIDxkaXY+PHN0cm9uZz5LZXlzIG9uIHNlcnZlcjo8L3N0cm9uZz4ge3dhbGxldC5oYXNQcml2YXRlS2V5ID8gJ3llcyAoc2lnbmluZyBjYXBhYmxlKScgOiAnbm8gKHdhdGNoLW9ubHksIGtleXMgbmV2ZXIgbGVhdmUgeW91ciBkZXZpY2UpJ308L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX0+PHN0cm9uZz5DbGllbnQgd2FsbGV0IGJhbGFuY2U6PC9zdHJvbmc+IHt0aGlzLnNhdHNUb0JUQyh3YWxsZXQuYmFsYW5jZVNhdHMpfSBCVEM8L2Rpdj5cbiAgICAgICAgICA8ZGl2PjxzdHJvbmc+Q29uZmlybWVkOjwvc3Ryb25nPiB7dGhpcy5zYXRzVG9CVEMod2FsbGV0LmNvbmZpcm1lZFNhdHMpfSBCVEM8L2Rpdj5cbiAgICAgICAgICA8ZGl2PjxzdHJvbmc+VW5jb25maXJtZWQ6PC9zdHJvbmc+IHt0aGlzLnNhdHNUb0JUQyh3YWxsZXQudW5jb25maXJtZWRTYXRzKX0gQlRDPC9kaXY+XG4gICAgICAgICAge3dhbGxldC5iYWxhbmNlU2F0cyA9PT0gMCAmJiBiaXRjb2luTmV0d29yayA9PT0gJ3JlZ3Rlc3QnICYmIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nLCBjb2xvcjogJyMwYTYnLCBmb250U2l6ZTogJzAuOWVtJyB9fT5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT0naW5mbyBjaXJjbGUnIC8+IEp1c3QgcmVjZWl2ZWQgZnVuZHM/IFVzZSA8c3Ryb25nPkdlbmVyYXRlIEJsb2NrPC9zdHJvbmc+IHRvIGNvbmZpcm0g4oCUIGJhbGFuY2Ugc2hvd3Mgb25seSBjb25maXJtZWQgVVRYT3MuIElmIHlvdSB1c2VkIGEgY3VzdG9tIGZhdWNldCBhZGRyZXNzIGluc3RlYWQgb2YgPHN0cm9uZz5Vc2UgbXkgcmVjZWl2ZSBhZGRyZXNzPC9zdHJvbmc+LCBmdW5kcyB3ZW50IGVsc2V3aGVyZSBhbmQgd2lsbCBub3QgYXBwZWFyIGhlcmUuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgPHN0cm9uZz5SZWNlaXZlIGFkZHJlc3M6PC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgIDxjb2RlPnt3YWxsZXQuYWRkcmVzcyB8fCAnYWRkcmVzcyB1bmF2YWlsYWJsZSd9PC9jb2RlPlxuICAgICAgICAgICAge3dhbGxldC5hZGRyZXNzID8gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICBzaXplPSdtaW5pJ1xuICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScgfX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZU5leHRSZWNlaXZlQWRkcmVzcygpfVxuICAgICAgICAgICAgICAgIHRpdGxlPSdEZXJpdmUgbmV4dCBleHRlcm5hbCBwYXltZW50IGFkZHJlc3MnXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdwbHVzJyAvPlxuICAgICAgICAgICAgICAgIE5leHRcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PjxzdHJvbmc+UmVjZWl2ZSBkZXJpdmF0aW9uIGluZGV4Ojwvc3Ryb25nPiB7d2FsbGV0LnJlY2VpdmVJbmRleH08L2Rpdj5cbiAgICAgICAgICB7aHViVWkuYml0Y29pblBheW1lbnRzID8gKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICB0b2dnbGVcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9eyEhdGhpcy5zdGF0ZS5wYXlqb2luRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gISEoZGF0YSAmJiBkYXRhLmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICBzYXZlUGF5am9pblByZWZlcmVuY2VzKHsgb3BlcmF0b3JEZXBvc2l0OiB2IH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgcGF5am9pbkVuYWJsZWQ6IHYgfSk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgbGFiZWw9J1VzZSBQYXlqb2luIGZvciBvcGVyYXRvciBkZXBvc2l0IHNlc3Npb25zIChvbiBieSBkZWZhdWx0KSdcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshKHRoaXMuc3RhdGUucGF5am9pbkNhcGFiaWxpdGllcyAmJiB0aGlzLnN0YXRlLnBheWpvaW5DYXBhYmlsaXRpZXMuYXZhaWxhYmxlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjI1ZW0nLCBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICAgIFBheWpvaW4gZW5kcG9pbnQgc3RhdHVzOnsnICd9XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57dGhpcy5zdGF0ZS5wYXlqb2luQ2FwYWJpbGl0aWVzICYmIHRoaXMuc3RhdGUucGF5am9pbkNhcGFiaWxpdGllcy5hdmFpbGFibGUgPyAnYXZhaWxhYmxlJyA6ICd1bmF2YWlsYWJsZSd9PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TZWdtZW50PlxuXG4gICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgIDxIZWFkZXIgYXM9J2gzJz5Mb29rIFVwIEFkZHJlc3MgQmFsYW5jZTwvSGVhZGVyPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9J3NlYXJjaCcgLz4gUXVlcnkgYmFsYW5jZSBmb3IgYW55IG9uLWNoYWluIGFkZHJlc3MuIDxzdHJvbmc+U2VydmVyIGRvZXMgbm90IGhvbGQga2V5czwvc3Ryb25nPiDigJQgdXNlcyA8Y29kZT5zY2FudHhvdXRzZXQ8L2NvZGU+IChVVFhPIHNjYW4pLiBXb3JrcyBvbiBwcnVuZWQgbm9kZXM7IGRvZXMgbm90IHJlcXVpcmUgPGNvZGU+dHhpbmRleDwvY29kZT4uXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxGb3JtPlxuICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxsYWJlbD5BZGRyZXNzICh7Yml0Y29pbk5ldHdvcmsgfHwgJ2FueSd9KTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcwLjVlbScsIGZsZXhXcmFwOiAnd3JhcCcsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2FkZHJlc3NQbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmxvb2t1cEFkZHJlc3N9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBsb29rdXBBZGRyZXNzOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6ICcxIDEgMTZlbScsIG1pbldpZHRoOiAnMTRlbScgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHt3YWxsZXQuYWRkcmVzcyAmJiAoXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9J2J1dHRvbidcbiAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7IGxvb2t1cEFkZHJlc3M6IHdhbGxldC5hZGRyZXNzIH0pfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT0nVXNlIHlvdXIgY3VycmVudCByZWNlaXZlIGFkZHJlc3MnXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFVzZSBteSBhZGRyZXNzXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHByaW1hcnlcbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e3RoaXMuc3RhdGUubG9va3VwTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlTG9va3VwQWRkcmVzcygpfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFiaXRjb2luUmVhZHkgfHwgISh0aGlzLnN0YXRlLmxvb2t1cEFkZHJlc3MgfHwgJycpLnRyaW0oKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdzZWFyY2gnIC8+XG4gICAgICAgICAgICAgICAgICBMb29rIFVwXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5sb29rdXBSZXN1bHQgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2VcbiAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fVxuICAgICAgICAgICAgICBuZWdhdGl2ZT17ISF0aGlzLnN0YXRlLmxvb2t1cFJlc3VsdC5lcnJvcn1cbiAgICAgICAgICAgICAgcG9zaXRpdmU9eyF0aGlzLnN0YXRlLmxvb2t1cFJlc3VsdC5lcnJvcn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmxvb2t1cFJlc3VsdC5lcnJvciA/ICdMb29rdXAgZmFpbGVkJyA6ICdBZGRyZXNzIGJhbGFuY2UgKG5vIGtleXMgb24gc2VydmVyKSd9XG4gICAgICAgICAgICAgIDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmxvb2t1cFJlc3VsdC5lcnJvciA/IChcbiAgICAgICAgICAgICAgICA8cD57dGhpcy5zdGF0ZS5sb29rdXBSZXN1bHQuZXJyb3J9PC9wPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2PjxzdHJvbmc+QmFsYW5jZTo8L3N0cm9uZz4ge3RoaXMuc2F0c1RvQlRDKHRoaXMuc3RhdGUubG9va3VwUmVzdWx0LmJhbGFuY2VTYXRzIHx8IDApfSBCVEMgKHtmb3JtYXRTYXRzRGlzcGxheSh0aGlzLnN0YXRlLmxvb2t1cFJlc3VsdC5iYWxhbmNlU2F0cyB8fCAwKX0gc2F0cyk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmxvb2t1cFJlc3VsdC5uZXR3b3JrICYmIDxkaXY+PHN0cm9uZz5OZXR3b3JrOjwvc3Ryb25nPiB7dGhpcy5zdGF0ZS5sb29rdXBSZXN1bHQubmV0d29ya308L2Rpdj59XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TZWdtZW50PlxuXG4gICAgICAgIHtodWJVaS5iaXRjb2luQ3Jvd2RmdW5kID8gKFxuICAgICAgICAgIDxTZWdtZW50IGlkPVwiZmFicmljLWJpdGNvaW4tY3Jvd2RmdW5kaW5nXCI+XG4gICAgICAgICAgICA8TWVzc2FnZSBpbmZvPlxuICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+Q3Jvd2RmdW5kczwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnIH19PlxuICAgICAgICAgICAgICAgIFRhcHJvb3QgY2FtcGFpZ24gdmF1bHRzLCBBQ1AgZG9uYXRpb24gUFNCVHMsIFBheWpvaW4gdG8gdmF1bHQsIHBheW91dCwgYW5kIHJlZnVuZCBmbG93cyBsaXZlIG9ueycgJ31cbiAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2Nyb3dkZnVuZHNcIj5Dcm93ZGZ1bmRzPC9MaW5rPlxuICAgICAgICAgICAgICAgIHsnICd9KGJvb2ttYXJrIDxjb2RlPi9zZXJ2aWNlcy9iaXRjb2luL2Nyb3dkZnVuZHM8L2NvZGU+IG9yIDxjb2RlPi9jcm93ZGZ1bmRzPC9jb2RlPikuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIHtodWJVaS5iaXRjb2luUGF5bWVudHMgPyAoXG4gICAgICAgIDxTZWdtZW50IGlkPVwiZmFicmljLWJpdGNvaW4tcGF5am9pblwiPlxuICAgICAgICAgIDxIZWFkZXIgYXM9J2gzJz5QYXlqb2luIGRlcG9zaXQ8L0hlYWRlcj5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5wYXlqb2luU2Vzc2lvbnNTbmFwc2hvdCA/IChcbiAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgIGlkPVwiZmFicmljLWJpdGNvaW4tcGF5am9pbi1zZXNzaW9ucy1zdHJpcFwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIGluZm9cbiAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC4yNXJlbScsIG1hcmdpbkJvdHRvbTogJzFyZW0nIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJsaXN0IGFsdGVybmF0ZSBvdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgPHN0cm9uZz5IdWIgZGVwb3NpdCBzZXNzaW9uczwvc3Ryb25nPlxuICAgICAgICAgICAgICB7JyAnfShub3QgZXhwaXJlZCk6IHt0aGlzLnN0YXRlLnBheWpvaW5TZXNzaW9uc1NuYXBzaG90LmFjdGl2ZU5vdEV4cGlyZWR9XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnBheWpvaW5TZXNzaW9uc1NuYXBzaG90LmF3YWl0aW5nQ29tcGxldGlvbiA+IDAgPyAoXG4gICAgICAgICAgICAgICAgPD4g4oCUIHt0aGlzLnN0YXRlLnBheWpvaW5TZXNzaW9uc1NuYXBzaG90LmF3YWl0aW5nQ29tcGxldGlvbn0gc3RpbGwgaW4gcHJvZ3Jlc3M8Lz5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIC57JyAnfVxuICAgICAgICAgICAgICA8TGluayB0bz1cIi9wYXltZW50c1wiPlBheW1lbnRzPC9MaW5rPlxuICAgICAgICAgICAgICB7JyAnfWxpc3RzIHNlc3Npb25zIGFuZCBwYXllciB0b29scy5cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgQ3JlYXRlcyBhIEJJUDIxIFVSSSB3aXRoIDxjb2RlPnBqPTwvY29kZT4gcG9pbnRpbmcgYXQgdGhpcyBIdWImYXBvcztzIHNpbmdsZSBQYXlqb2luIGVuZHBvaW50IGZvciBCSVA3OC1jb21wYXRpYmxlIHBheWpvaW4gY2xpZW50cy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICA8Rm9ybS5Hcm91cCB3aWR0aHM9J2VxdWFsJz5cbiAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPGxhYmVsPlJlcXVlc3RlZCBhbW91bnQgKHNhdHMsIG9wdGlvbmFsKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPSdudW1iZXInXG4gICAgICAgICAgICAgICAgICBtaW49JzAnXG4gICAgICAgICAgICAgICAgICBzdGVwPScxJ1xuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9JzI1MDAwJ1xuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucGF5am9pbkFtb3VudFNhdHN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBwYXlqb2luQW1vdW50U2F0czogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8bGFiZWw+TGFiZWwgKG9wdGlvbmFsKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nSW5pdGlhbCBodWIgZGVwb3NpdCdcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnBheWpvaW5MYWJlbH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IHBheWpvaW5MYWJlbDogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8bGFiZWw+TWVtbyAob3B0aW9uYWwpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSdTaG93biBpbiB3YWxsZXQgKG9wdGlvbmFsKSdcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnBheWpvaW5NZW1vfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgcGF5am9pbk1lbW86IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgIDwvRm9ybS5Hcm91cD5cbiAgICAgICAgICAgIDxCdXR0b24gcHJpbWFyeSBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUNyZWF0ZVBheWpvaW5EZXBvc2l0KCl9IGRpc2FibGVkPXshdGhpcy5zdGF0ZS5wYXlqb2luRW5hYmxlZH0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9J3NoaWVsZCBhbHRlcm5hdGUnIC8+XG4gICAgICAgICAgICAgIENyZWF0ZSBQYXlqb2luIERlcG9zaXQgUmVxdWVzdFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uIGJhc2ljIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlUmVmcmVzaFBheWpvaW5TZXNzaW9uKCl9IGRpc2FibGVkPXshdGhpcy5zdGF0ZS5wYXlqb2luU2Vzc2lvbklkfT5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT0ncmVmcmVzaCcgLz5cbiAgICAgICAgICAgICAgUmVmcmVzaCBTZXNzaW9uXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAge3RoaXMuc3RhdGUucGF5am9pblJlc3VsdCAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZVxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19XG4gICAgICAgICAgICAgIG5lZ2F0aXZlPXshIXRoaXMuc3RhdGUucGF5am9pblJlc3VsdC5lcnJvcn1cbiAgICAgICAgICAgICAgcG9zaXRpdmU9eyF0aGlzLnN0YXRlLnBheWpvaW5SZXN1bHQuZXJyb3J9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj57dGhpcy5zdGF0ZS5wYXlqb2luUmVzdWx0LmVycm9yID8gJ1BheWpvaW4gcmVxdWVzdCBmYWlsZWQnIDogJ1BheWpvaW4gc2Vzc2lvbid9PC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgeyF0aGlzLnN0YXRlLnBheWpvaW5SZXN1bHQuZXJyb3IgJiYgKHRoaXMuc3RhdGUucGF5am9pblJlc3VsdC5pZCB8fCB0aGlzLnN0YXRlLnBheWpvaW5SZXN1bHQuYmlwMjFVcmkpICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScsIGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC41ZW0nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5zdGF0ZS5wYXlqb2luUmVzdWx0LmJpcDIxVXJpfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb3B5VG9DbGlwYm9hcmQodGhpcy5zdGF0ZS5wYXlqb2luUmVzdWx0LmJpcDIxVXJpIHx8ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDb3B5IEJJUDIxIFVSSSBmb3Igd2FsbGV0IHBhc3RlXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHkgb3V0bGluZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIENvcHkgQklQMjFcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnN0YXRlLnBheWpvaW5SZXN1bHQuaWR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvcHlUb0NsaXBib2FyZChTdHJpbmcodGhpcy5zdGF0ZS5wYXlqb2luUmVzdWx0LmlkIHx8ICcnKSl9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ29weSBzZXNzaW9uIGlkXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHkgb3V0bGluZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIENvcHkgc2Vzc2lvbiBJRFxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGFzPXtMaW5rfVxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgIHRvPXt0aGlzLnN0YXRlLnBheWpvaW5SZXN1bHQuaWRcbiAgICAgICAgICAgICAgICAgICAgICA/IGAvcGF5bWVudHM/cGF5am9pblNlc3Npb249JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5zdGF0ZS5wYXlqb2luUmVzdWx0LmlkKX1gXG4gICAgICAgICAgICAgICAgICAgICAgOiAnL3BheW1lbnRzJ31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNyZWRpdCBjYXJkIG91dGxpbmVcIiAvPlxuICAgICAgICAgICAgICAgICAgICBPcGVuIFBheW1lbnRzIChzdWJtaXQgUFNCVClcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8cHJlIHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnIH19PntKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRlLnBheWpvaW5SZXN1bHQsIG51bGwsIDIpfTwvcHJlPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAge2lzRmF1Y2V0UGFnZSA/IChcbiAgICAgICAgPFNlZ21lbnQgZGF0YS1mYXVjZXQtc2VnbWVudCBpZD1cImZhYnJpYy1iaXRjb2luLWZhdWNldFwiPlxuICAgICAgICAgIDxIZWFkZXIgYXM9J2gzJz5GYXVjZXQ8L0hlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPkJyaWRnZTo8L3N0cm9uZz4gZHJhd3MgZnJvbSBCZWFjb24vSHViIHdhbGxldCAocmVndGVzdCBvbmx5KS4gTWF4IDEsMDAwLDAwMCBzYXRzIHBlciByZXF1ZXN0LlxuICAgICAgICAgICAge2JpdGNvaW5OZXR3b3JrICYmIDxzcGFuPiBVc2UgYWRkcmVzc2VzIGZvciA8c3Ryb25nPntiaXRjb2luTmV0d29ya308L3N0cm9uZz4gKGUuZy4ge2FkZHJlc3NQbGFjZWhvbGRlcn0pLjwvc3Bhbj59XG4gICAgICAgICAgICB7JyAnfUNob29zZSA8c3Ryb25nPlVzZSBteSByZWNlaXZlIGFkZHJlc3M8L3N0cm9uZz4gc28gZnVuZHMgZ28gdG8geW91ciB3YWxsZXQ7IG90aGVyd2lzZSBiYWxhbmNlIHdpbGwgbm90IHVwZGF0ZS5cbiAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IG1pbmluZyB3aXRoIDxzdHJvbmc+R2VuZXJhdGUgQmxvY2s8L3N0cm9uZz4gdG9wcyB1cCB0aGUgSHViIHdhbGxldCwgbm90IHlvdXIgYnJvd3NlciBjaGlwIOKAlCB0aGlzIGZsb3cgaXMgaG93IHlvdSB0cmFuc2ZlciBmcm9tIEh1YiB0byBpZGVudGl0eS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPk5ldHdvcms6PC9zdHJvbmc+IHtiaXRjb2luTmV0d29yayB8fCAndW5rbm93bid9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgPHN0cm9uZz5IdWIgYXZhaWxhYmxlIGJhbGFuY2U6PC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgIHtOdW1iZXIodGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzICYmIHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5iYWxhbmNlICE9IG51bGwgPyB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMuYmFsYW5jZSA6IDApLnRvRml4ZWQoOCl9IEJUQ1xuICAgICAgICAgICAge3RoaXMuc3RhdGUuYml0Y29pblN0YXR1cyAmJiB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMuYmVhY29uICYmIChcbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzFlbScsIGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgKEJlYWNvbjoge2Zvcm1hdFNhdHNEaXNwbGF5KHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5iZWFjb24uYmFsYW5jZVNhdHMgfHwgMCl9IHNhdHMpXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPGxhYmVsPlNlbmQgdG8gYWRkcmVzcyAoe2JpdGNvaW5OZXR3b3JrIHx8ICdhbnknfSk8L2xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMC41ZW0nLCBmbGV4V3JhcDogJ3dyYXAnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXthZGRyZXNzUGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5mYXVjZXRBZGRyZXNzfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgZmF1Y2V0QWRkcmVzczogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBmbGV4OiAnMSAxIDEyZW0nLCBtaW5XaWR0aDogJzE0ZW0nIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7d2FsbGV0LmFkZHJlc3MgJiYgY2FuR2VuZXJhdGVCbG9ja3MgJiYgKFxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPSdidXR0b24nXG4gICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuc2V0U3RhdGUoeyBmYXVjZXRBZGRyZXNzOiB3YWxsZXQuYWRkcmVzcyB9KX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9J0ZpbGwgd2l0aCB5b3VyIGN1cnJlbnQgcmVjZWl2ZSBhZGRyZXNzIChzYW1lIG5ldHdvcmsgYXMgSHViKSdcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgVXNlIG15IHJlY2VpdmUgYWRkcmVzc1xuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPGxhYmVsPkFtb3VudCAoc2F0cyk8L2xhYmVsPlxuICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPSdudW1iZXInXG4gICAgICAgICAgICAgICAgbWluPScxJ1xuICAgICAgICAgICAgICAgIG1heD0nMTAwMDAwMCdcbiAgICAgICAgICAgICAgICBzdGVwPScxJ1xuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScxMDAwMCdcbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5mYXVjZXRBbW91bnRTYXRzfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGZhdWNldEFtb3VudFNhdHM6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlUmVxdWVzdEZhdWNldCgpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17IWNhbkdlbmVyYXRlQmxvY2tzIHx8ICEodGhpcy5zdGF0ZS5mYXVjZXRBZGRyZXNzIHx8ICcnKS50cmltKCl9XG4gICAgICAgICAgICAgIHRpdGxlPXshY2FuR2VuZXJhdGVCbG9ja3MgPyAnQml0Y29pbiBtdXN0IGJlIGF2YWlsYWJsZSAocmVndGVzdCkgdG8gdXNlIGZhdWNldCcgOiAhKHRoaXMuc3RhdGUuZmF1Y2V0QWRkcmVzcyB8fCAnJykudHJpbSgpID8gYEVudGVyIGEgJHtiaXRjb2luTmV0d29yayB8fCAncmVndGVzdCd9IGFkZHJlc3MgKGUuZy4gJHthZGRyZXNzUGxhY2Vob2xkZXJ9KWAgOiAnU2VuZCB0ZXN0IGNvaW5zIHRvIHRoaXMgYWRkcmVzcyd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9J3RpbnQnIC8+XG4gICAgICAgICAgICAgIFJlcXVlc3QgZnJvbSBmYXVjZXRcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5mYXVjZXRSZXN1bHQgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2Ugc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fSBwb3NpdGl2ZT17IXRoaXMuc3RhdGUuZmF1Y2V0UmVzdWx0LmVycm9yfSBuZWdhdGl2ZT17ISF0aGlzLnN0YXRlLmZhdWNldFJlc3VsdC5lcnJvcn0+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj57dGhpcy5zdGF0ZS5mYXVjZXRSZXN1bHQuZXJyb3IgPyAnRmF1Y2V0IGZhaWxlZCcgOiAnRmF1Y2V0J308L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICB7IXRoaXMuc3RhdGUuZmF1Y2V0UmVzdWx0LmVycm9yICYmICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnIgPSB0aGlzLnN0YXRlLmZhdWNldFJlc3VsdDtcbiAgICAgICAgICAgICAgICBjb25zdCBmYXVjZXQgPSBmciAmJiBmci5mYXVjZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdHhpZCA9IGZhdWNldCAmJiBmYXVjZXQudHhpZDtcbiAgICAgICAgICAgICAgICBjb25zdCBhbW91bnRTYXRzID0gZmF1Y2V0ICYmIGZhdWNldC5hbW91bnRTYXRzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlc3QgPSBmYXVjZXQgJiYgZmF1Y2V0LmRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgICAgIGlmICh0eGlkIHx8IGFtb3VudFNhdHMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJywgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIHthbW91bnRTYXRzID8gYFNlbnQgJHtOdW1iZXIoYW1vdW50U2F0cykudG9Mb2NhbGVTdHJpbmcoKX0gc2F0c2AgOiAnU2VudCd9XG4gICAgICAgICAgICAgICAgICAgICAge2Rlc3QgPyBgIHRvICR7ZGVzdC5zbGljZSgwLCAxMil94oCmJHtkZXN0LnNsaWNlKC04KX1gIDogJyd9LlxuICAgICAgICAgICAgICAgICAgICAgIHt0eGlkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2Jsb2NrJywgbWFyZ2luVG9wOiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2h1YlVpLmJpdGNvaW5FeHBsb3JlciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodHhpZCkpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyB0cmFuc2FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuOWVtJyB9fT57U3RyaW5nKHR4aWQpfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgIDxwcmUgc3R5bGU9e3sgd2hpdGVTcGFjZTogJ3ByZS13cmFwJywgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsIG1hcmdpblRvcDogJzAuNWVtJyB9fT57SlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZS5mYXVjZXRSZXN1bHQsIG51bGwsIDIpfTwvcHJlPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAge2h1YlVpLmJpdGNvaW5QYXltZW50cyA/IChcbiAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgPEhlYWRlciBhcz0naDMnPlNlbmQgUGF5bWVudCAoTGF5ZXIgMSk8L0hlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206IDAgfX0+XG4gICAgICAgICAgICBUaGlzIHNlY3Rpb24gbW92ZWQgdG8gdGhlIGRlZGljYXRlZCB3YWxsZXQgdHJhbnNhY3Rpb25zIHNjcmVlbiAoaW5jbHVkZXMgZmVkZXJhdGlvbiBtdWx0aXNpZyB2YXVsdCB0b29scykuXG4gICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnM/c2NvcGU9d2FsbGV0I2ZhYnJpYy1mZWRlcmF0aW9uLXdhbGxldC1wYW5lbFwiPk9wZW4gd2FsbGV0ICZhbXA7IGZlZGVyYXRpb248L0xpbms+LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7aHViVWkuYml0Y29pbkxpZ2h0bmluZyAmJiBpc0xpZ2h0bmluZ1BhZ2UgPyAoXG4gICAgICAgIDxTZWdtZW50IGlkPVwiZmFicmljLWJpdGNvaW4tbGlnaHRuaW5nXCI+XG4gICAgICAgICAgPEhlYWRlciBhcz0naDMnPkxpZ2h0bmluZyBOb2RlIChMYXllciAyKTwvSGVhZGVyPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT48c3Ryb25nPkJyaWRnZTo8L3N0cm9uZz4gY3JlYXRlIGludm9pY2UsIGRlY29kZSwgYW5kIHBheSBnbyB0aHJvdWdoIHRoZSBIdWIgb3IgZXh0ZXJuYWwgTGlnaHRuaW5nIEFQSS48L3A+XG4gICAgICAgICAge2xpZ2h0bmluZ0F2YWlsYWJsZSAmJiB0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cyAmJiB0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5zdGF0dXMgPT09ICdSVU5OSU5HJyAmJiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8TWVzc2FnZSBwb3NpdGl2ZSBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9J2JvbHQnIC8+XG4gICAgICAgICAgICAgICAgICBMaWdodG5pbmcgbm9kZSBydW5uaW5nXG4gICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZSAmJiB0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5ub2RlLmFsaWFzXG4gICAgICAgICAgICAgICAgICAgID8gYCDigJQgJHt0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5ub2RlLmFsaWFzfWBcbiAgICAgICAgICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUubGlnaHRuaW5nQ2hhbm5lbHMubGVuZ3RofSBjaGFubmVsKHMpLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZSAmJiAodGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZS5pZCB8fCB0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5ub2RlLmFkZHJlc3MgfHwgdGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZS5iaW5kaW5nKSAmJiAoXG4gICAgICAgICAgICAgICAgPFNlZ21lbnQgc3R5bGU9e3sgcGFkZGluZzogJzAuNzVlbScsIG1hcmdpbkJvdHRvbTogJzFlbScsIGJhY2tncm91bmQ6ICdyZ2JhKDAsMCwwLDAuMDMpJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxIZWFkZXIgYXM9J2g1JyBzdHlsZT17eyBtYXJnaW46ICcwIDAgMC41ZW0gMCcgfX0+U2hhcmUgd2l0aCBvdGhlciBwZWVyczwvSGVhZGVyPlxuICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUubGlnaHRuaW5nU3RhdHVzLm5vZGUuaWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlBlZXIgSUQ6PC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuOWVtJyB9fT57dGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZS5pZH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHsodGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZS5hZGRyZXNzIHx8IHRoaXMuc3RhdGUubGlnaHRuaW5nU3RhdHVzLm5vZGUuYmluZGluZykgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPklQOlBPUlQ6PC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuOWVtJyB9fT57dGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZS5hZGRyZXNzIHx8IHRoaXMuc3RhdGUubGlnaHRuaW5nU3RhdHVzLm5vZGUuYmluZGluZ308L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5ub2RlLmlkICYmICh0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5ub2RlLmFkZHJlc3MgfHwgdGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZS5iaW5kaW5nKSAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+Q29ubmVjdCBzdHJpbmcgKGZvciBDcmVhdGUgY2hhbm5lbCk6PC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuOWVtJyB9fT57dGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZS5pZH1Ae3RoaXMuc3RhdGUubGlnaHRuaW5nU3RhdHVzLm5vZGUuYWRkcmVzcyB8fCB0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5ub2RlLmJpbmRpbmd9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7KHRoaXMuc3RhdGUubGlnaHRuaW5nU3RhdHVzLm5vZGUuaWQgfHwgdGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZS5hZGRyZXNzIHx8IHRoaXMuc3RhdGUubGlnaHRuaW5nU3RhdHVzLm5vZGUuYmluZGluZykgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT0nc21hbGwnXG4gICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj0nbGVmdCdcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvc3RQb3J0ID0gbm9kZS5hZGRyZXNzIHx8IG5vZGUuYmluZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5pZCkgcGFydHMucHVzaChub2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChob3N0UG9ydCkgcGFydHMucHVzaChob3N0UG9ydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5pZCAmJiBob3N0UG9ydCkgcGFydHMucHVzaChgJHtub2RlLmlkfUAke2hvc3RQb3J0fWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IHBhcnRzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGEudmFsdWUgPSB0ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zdHlsZS5vcGFjaXR5ID0gJzAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhLnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0nQ29weSBMaWdodG5pbmcgcGVlciBJRCBhbmQgYWRkcmVzcydcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9J2NvcHknIC8+XG4gICAgICAgICAgICAgICAgICAgICAgQ29weSB0byBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgeyFsaWdodG5pbmdBdmFpbGFibGUgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbz5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkxpZ2h0bmluZzwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgIDxwPnsodGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMgJiYgdGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubWVzc2FnZSkgfHwgJ0xpZ2h0bmluZyBydW5zIGF1dG9tYXRpY2FsbHkgd2l0aCByZWd0ZXN0LiBVc2UgcmVndGVzdCBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQuJ308L3A+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtsaWdodG5pbmdBdmFpbGFibGUgJiYgdGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMgJiYgdGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMuc3RhdHVzID09PSAnUlVOTklORycgJiYgKFxuICAgICAgICAgICAgPFNlZ21lbnQgc3R5bGU9e3sgcGFkZGluZzogJzAuNzVlbScsIG1hcmdpbkJvdHRvbTogJzFlbScsIGJhY2tncm91bmQ6ICdyZ2JhKDAsMCwwLDAuMDIpJyB9fT5cbiAgICAgICAgICAgICAgPEhlYWRlciBhcz0naDUnIHN0eWxlPXt7IG1hcmdpbjogJzAgMCAwLjVlbSAwJyB9fT5GdW5kIExpZ2h0bmluZyBub2RlPC9IZWFkZXI+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuNWVtJywgZm9udFNpemU6ICcwLjk1ZW0nIH19PlxuICAgICAgICAgICAgICAgIFNlbmQgb24tY2hhaW4gQml0Y29pbiB0byB0aGlzIGFkZHJlc3MgdG8gZnVuZCB0aGUgTGlnaHRuaW5nIG5vZGUuIFlvdSBuZWVkIGZ1bmRzIGJlZm9yZSBjcmVhdGluZyBjaGFubmVscy4gVXNlIHRoZSBGYXVjZXQgYmVsb3cgKHJlZ3Rlc3QpIG9yIFNlbmQgUGF5bWVudC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZSAmJiB0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5ub2RlLmRlcG9zaXRBZGRyZXNzICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RGVwb3NpdCBhZGRyZXNzOjwvc3Ryb25nPnsnICd9XG4gICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuOWVtJyB9fT57dGhpcy5zdGF0ZS5saWdodG5pbmdTdGF0dXMubm9kZS5kZXBvc2l0QWRkcmVzc308L2NvZGU+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHNpemU9J21pbmknXG4gICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuMjVlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZHIgPSB0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5ub2RlLmRlcG9zaXRBZGRyZXNzO1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChhZGRyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGEudmFsdWUgPSBhZGRyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhLnN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9J0NvcHkgZGVwb3NpdCBhZGRyZXNzJ1xuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdjb3B5JyAvPlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHNpemU9J21pbmknXG4gICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuMjVlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBmYXVjZXRBZGRyZXNzOiB0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5ub2RlLmRlcG9zaXRBZGRyZXNzIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZhdWNldFNlZ21lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mYXVjZXQtc2VnbWVudF0nKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZmF1Y2V0U2VnbWVudCkgZmF1Y2V0U2VnbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9J1VzZSB0aGlzIGFkZHJlc3MgaW4gdGhlIEZhdWNldCBiZWxvdydcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT0ndGludCcgLz5cbiAgICAgICAgICAgICAgICAgICAgVXNlIGluIEZhdWNldFxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmxpZ2h0bmluZ1N0YXR1cy5ub2RlICYmICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhdGUubGlnaHRuaW5nU3RhdHVzLm5vZGU7XG4gICAgICAgICAgICAgICAgY29uc3QgZnJvbVN0YXR1cyA9IHtcbiAgICAgICAgICAgICAgICAgIGNvbmZpcm1lZDogTnVtYmVyKG5vZGUuYmFsYW5jZVNhdHMgPz8gMCksXG4gICAgICAgICAgICAgICAgICB1bmNvbmZpcm1lZDogTnVtYmVyKG5vZGUuYmFsYW5jZVVuY29uZmlybWVkU2F0cyA/PyAwKSxcbiAgICAgICAgICAgICAgICAgIGltbWF0dXJlOiBOdW1iZXIobm9kZS5iYWxhbmNlSW1tYXR1cmVTYXRzID8/IDApXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBmcm9tT3V0cHV0cyA9IHRoaXMuZ2V0TGlnaHRuaW5nQmFsYW5jZUZyb21PdXRwdXRzKHRoaXMuc3RhdGUubGlnaHRuaW5nT3V0cHV0cyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzVG90YWwgPSBmcm9tU3RhdHVzLmNvbmZpcm1lZCArIGZyb21TdGF0dXMudW5jb25maXJtZWQgKyBmcm9tU3RhdHVzLmltbWF0dXJlO1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dHNUb3RhbCA9IGZyb21PdXRwdXRzLmNvbmZpcm1lZCArIGZyb21PdXRwdXRzLnVuY29uZmlybWVkICsgZnJvbU91dHB1dHMuaW1tYXR1cmU7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFsID0gb3V0cHV0c1RvdGFsID4gc3RhdHVzVG90YWwgPyBmcm9tT3V0cHV0cyA6IGZyb21TdGF0dXM7XG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWwgPSBiYWwuY29uZmlybWVkICsgYmFsLnVuY29uZmlybWVkICsgYmFsLmltbWF0dXJlO1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPk9uLWNoYWluIGJhbGFuY2U6PC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgICAgICAgIHtmb3JtYXRTYXRzRGlzcGxheShiYWwuY29uZmlybWVkKX0gc2F0cyBjb25maXJtZWRcbiAgICAgICAgICAgICAgICAgIHtiYWwudW5jb25maXJtZWQgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICArIHtmb3JtYXRTYXRzRGlzcGxheShiYWwudW5jb25maXJtZWQpfSB1bmNvbmZpcm1lZFxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge2JhbC5pbW1hdHVyZSA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICsge2Zvcm1hdFNhdHNEaXNwbGF5KGJhbC5pbW1hdHVyZSl9IGltbWF0dXJlXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7dG90YWwgPiAwICYmIChiYWwudW5jb25maXJtZWQgPiAwIHx8IGJhbC5pbW1hdHVyZSA+IDApICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJywgZm9udFdlaWdodDogNjAwIH19PlxuICAgICAgICAgICAgICAgICAgICAgID0ge2Zvcm1hdFNhdHNEaXNwbGF5KHRvdGFsKX0gc2F0cyB0b3RhbFxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge3RvdGFsIDwgMTAwMDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nLCBjb2xvcjogJyNiMDAnIH19PihuZWVkIGF0IGxlYXN0IDEwLDAwMCBzYXRzIGZvciBjaGFubmVscyk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgeyh0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMgJiYgdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLm5ldHdvcmsgPT09ICdyZWd0ZXN0JykgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogJzAuODVlbScsIGNvbG9yOiAnIzY2NicsIG1hcmdpblRvcDogJzAuMjVlbScsIG1hcmdpbkJvdHRvbTogMCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICBPbiByZWd0ZXN0OiBnZW5lcmF0ZSBibG9ja3MgYWZ0ZXIgc2VuZGluZyB0byBjb25maXJtLiBDbGljayByZWZyZXNoIHRvIHVwZGF0ZS5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KSgpfVxuICAgICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7bGlnaHRuaW5nQXZhaWxhYmxlICYmIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxIZWFkZXIgYXM9J2g0JyBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19PlxuICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL2NvbnRyYWN0c1wiIHN0eWxlPXt7IGNvbG9yOiAnaW5oZXJpdCcgfX0+XG4gICAgICAgICAgICAgICAgICBDaGFubmVscyAoe3RoaXMuc3RhdGUubGlnaHRuaW5nQ2hhbm5lbHMubGVuZ3RofSlcbiAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5saWdodG5pbmdDaGFubmVscy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5ObyBjaGFubmVscyB5ZXQuIENyZWF0ZSBvbmUgYmVsb3cgdG8gY29ubmVjdCB0byBhbm90aGVyIExpZ2h0bmluZyBub2RlLjwvcD5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VGFibGUgY2VsbGVkIGNvbXBhY3Qgc2l6ZT0nc21hbGwnPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5QZWVyPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlN0YXRlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkNhcGFjaXR5PC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPk91ciBiYWxhbmNlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlNob3J0IGNoYW5uZWwgSUQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUubGlnaHRuaW5nQ2hhbm5lbHMubWFwKChsbkNoYW5uZWwsIGxpc3RJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkRm9yUGF0aCA9IGxuQ2hhbm5lbC5jaGFubmVsX2lkIHx8IGxuQ2hhbm5lbC5mdW5kaW5nX3R4aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IChpZEZvclBhdGggIT0gbnVsbCAmJiBTdHJpbmcoaWRGb3JQYXRoKS50cmltKCkgIT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgL3NlcnZpY2VzL2JpdGNvaW4vY2hhbm5lbHMvJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGlkRm9yUGF0aCkudHJpbSgpKX1gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93S2V5ID0gcGF0aCAhPSBudWxsID8gcGF0aCA6IGBsbi1jaC0ke2xpc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17cm93S2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtwYXRoID8gKCkgPT4gdGhpcy5uYXZpZ2F0ZUludGVybmFsUGF0aChwYXRoKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nIH19Pnt0aGlzLnRyaW1IYXNoKGxuQ2hhbm5lbC5wZWVyX2lkIHx8IGxuQ2hhbm5lbC5mdW5kaW5nX3R4aWQgfHwgJycpfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57bG5DaGFubmVsLnN0YXRlIHx8ICfigJQnfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2xuQ2hhbm5lbC5hbW91bnRfbXNhdCAhPSBudWxsID8gYCR7Zm9ybWF0U2F0c0Rpc3BsYXkoTWF0aC5mbG9vcihOdW1iZXIobG5DaGFubmVsLmFtb3VudF9tc2F0KSAvIDEwMDApKX0gc2F0c2AgOiAobG5DaGFubmVsLmNoYW5uZWxfc2F0ICE9IG51bGwgPyBgJHtmb3JtYXRTYXRzRGlzcGxheShsbkNoYW5uZWwuY2hhbm5lbF9zYXQpfSBzYXRzYCA6ICfigJQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bG5DaGFubmVsLm91cl9hbW91bnRfbXNhdCAhPSBudWxsID8gYCR7Zm9ybWF0U2F0c0Rpc3BsYXkoTWF0aC5mbG9vcihOdW1iZXIobG5DaGFubmVsLm91cl9hbW91bnRfbXNhdCkgLyAxMDAwKSl9IHNhdHNgIDogJ+KAlCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjhlbScgfX0+e2xuQ2hhbm5lbC5zaG9ydF9jaGFubmVsX2lkIHx8ICfigJQnfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8SGVhZGVyIGFzPSdoNCcgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMS41ZW0nIH19PkNyZWF0ZSBjaGFubmVsPC9IZWFkZXI+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICBDb25uZWN0IHRvIGEgcGVlciBhbmQgb3BlbiBhIGNoYW5uZWwuIFBhc3RlIHRoZSA8c3Ryb25nPmNvbm5lY3Qgc3RyaW5nIChpZEBpcDpwb3J0KTwvc3Ryb25nPiBmcm9tIHRoZSBvdGhlciBub2RlJmFwb3M7cyBTaGFyZSBzZWN0aW9uIGFib3ZlLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxGb3JtPlxuICAgICAgICAgICAgICAgIDxGb3JtLkdyb3VwIHdpZHRocz0nZXF1YWwnPlxuICAgICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5SZW1vdGUgKGlkQGlwOnBvcnQpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9JzAzYWJjMTIzLi4uQDE5Mi4xNjguNTAuNTo5NzM1J1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVSZW1vdGV9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgY2hhbm5lbENyZWF0ZVJlbW90ZTogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPC9Gb3JtLkdyb3VwPlxuICAgICAgICAgICAgICAgIDxGb3JtLkdyb3VwIHdpZHRocz0nZXF1YWwnPlxuICAgICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5BbW91bnQgKHNhdHMsIG1pbiAxMDAwMCk8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgbWluPScxMDAwMCdcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nMTAwMDAwJ1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVBbW91bnRTYXRzfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGNoYW5uZWxDcmVhdGVBbW91bnRTYXRzOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+UHVzaCB0byBwZWVyIChtc2F0LCBvcHRpb25hbCk8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdudW1iZXInXG4gICAgICAgICAgICAgICAgICAgICAgbWluPScwJ1xuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScwJ1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVQdXNoTXNhdH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBjaGFubmVsQ3JlYXRlUHVzaE1zYXQ6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDwvRm9ybS5Hcm91cD5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsaWdodG5pbmdBdmFpbGFibGUgfHwgdGhpcy5zdGF0ZS5jaGFubmVsQ3JlYXRlTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQ3JlYXRlQ2hhbm5lbCgpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9J3BsdWcnIC8+XG4gICAgICAgICAgICAgICAgICBDcmVhdGUgY2hhbm5lbFxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVSZXN1bHQgJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19XG4gICAgICAgICAgICAgICAgICBuZWdhdGl2ZT17ISF0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVSZXN1bHQuZXJyb3J9XG4gICAgICAgICAgICAgICAgICBwb3NpdGl2ZT17IXRoaXMuc3RhdGUuY2hhbm5lbENyZWF0ZVJlc3VsdC5lcnJvcn1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+e3RoaXMuc3RhdGUuY2hhbm5lbENyZWF0ZVJlc3VsdC5lcnJvciA/ICdDaGFubmVsIGNyZWF0aW9uIGZhaWxlZCcgOiAnQ2hhbm5lbCBjcmVhdGVkJ308L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuY2hhbm5lbENyZWF0ZVJlc3VsdC5lcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5jaGFubmVsQ3JlYXRlUmVzdWx0LmVycm9yfVxuICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVSZXN1bHQuZGV0YWlsICYmIGAg4oCUICR7dGhpcy5zdGF0ZS5jaGFubmVsQ3JlYXRlUmVzdWx0LmRldGFpbH1gfVxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuY2hhbm5lbENyZWF0ZVJlc3VsdC5lcnJvciAmJiAvY29ubmVjdHxwZWVyfGNvbm5lY3Rpb24vaS50ZXN0KHRoaXMuc3RhdGUuY2hhbm5lbENyZWF0ZVJlc3VsdC5lcnJvcikgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogJzAuOWVtJywgY29sb3I6ICcjNjY2JywgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIEVuc3VyZSB0aGUgPHN0cm9uZz5SZW1vdGUgKGlkQGlwOnBvcnQpPC9zdHJvbmc+IGZpZWxkIGlzIGZpbGxlZCB3aXRoIHRoZSBvdGhlciBub2RlJmFwb3M7cyBjb25uZWN0IHN0cmluZyBmcm9tIHRoZWlyIFNoYXJlIHNlY3Rpb24uIFRoZSBvdGhlciBub2RlIG11c3QgYmUgcnVubmluZyBhbmQgcmVhY2hhYmxlICh1c2UgdGhlIGhvc3QmYXBvcztzIElQLCBub3QgMTI3LjAuMC4xLCB3aGVuIGNvbm5lY3RpbmcgYWNyb3NzIG1hY2hpbmVzKS5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVSZXN1bHQuZXJyb3IgJiYgL3dyb25nIGtleXxoYW5kc2hha2UvaS50ZXN0KHRoaXMuc3RhdGUuY2hhbm5lbENyZWF0ZVJlc3VsdC5lcnJvcikgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogJzAuOWVtJywgY29sb3I6ICcjNjY2JywgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+V3Jvbmcga2V5IC8gaGFuZHNoYWtlIGZhaWxlZDwvc3Ryb25nPiBtZWFucyB0aGUgbm9kZSBJRCBkb2VzbiZhcG9zO3QgbWF0Y2ggdGhlIG5vZGUgYXQgdGhhdCBhZGRyZXNzLiBVc2UgdGhlIDxzdHJvbmc+b3RoZXI8L3N0cm9uZz4gbm9kZSZhcG9zO3MgY29ubmVjdCBzdHJpbmcg4oCUIG5vdCB5b3VyIG93bi4gSWYgeW91JmFwb3M7cmUgb24gdGhlIHNhbWUgbWFjaGluZSwgZW5zdXJlIHlvdSZhcG9zO3JlIG5vdCBjb25uZWN0aW5nIHRoaXMgSHViIHRvIGl0c2VsZi5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVSZXN1bHQuZXJyb3IgJiYgL2JhZCBmaWxlIGRlc2NyaXB0b3IvaS50ZXN0KHRoaXMuc3RhdGUuY2hhbm5lbENyZWF0ZVJlc3VsdC5lcnJvcikgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogJzAuOWVtJywgY29sb3I6ICcjNjY2JywgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+QmFkIGZpbGUgZGVzY3JpcHRvcjwvc3Ryb25nPiBvZnRlbiBpbmRpY2F0ZXMgYSBDTE4gcmVzb3VyY2UgaXNzdWUuIFRyeTogcmVzdGFydCB0aGUgTGlnaHRuaW5nIG5vZGU7IGNoZWNrIDxjb2RlPnVsaW1pdCAtbjwvY29kZT4gKGZpbGUgZGVzY3JpcHRvciBsaW1pdCk7IHZlcmlmeSB0aGUgcmVtb3RlIGlzIGxpc3RlbmluZyB3aXRoIDxjb2RlPm5jIC16diBob3N0IDk3MzU8L2NvZGU+LlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuY2hhbm5lbENyZWF0ZVJlc3VsdC5lcnJvciAmJiAvVW5zdXBwb3J0ZWQgZmVhdHVyZXxmZWF0dXJlIDQ0fFdJUkVfV0FSTklOR3xwZWVyX2Rpc2Nvbm5lY3RlZC9pLnRlc3QoXG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVSZXN1bHQuZXJyb3IsIHRoaXMuc3RhdGUuY2hhbm5lbENyZWF0ZVJlc3VsdC5kZXRhaWxdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJylcbiAgICAgICAgICAgICAgICAgICkgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogJzAuOWVtJywgY29sb3I6ICcjNjY2JywgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+VW5zdXBwb3J0ZWQgZmVhdHVyZSA0NDwvc3Ryb25nPiBtZWFucyB0aGUgcmVtb3RlIG5vZGUgZG9lcyBub3Qgc3VwcG9ydCBCT0xUIDkgY2hhbm5lbF90eXBlLiBVcGdyYWRlIHRoZSByZW1vdGUgTGlnaHRuaW5nIG5vZGUgKExORCwgQ0xOLCBvciBFY2xhaXIpIHRvIGEgdmVyc2lvbiBmcm9tIDIwMjEgb3IgbGF0ZXIuXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5jaGFubmVsQ3JlYXRlUmVzdWx0LmhpbnQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogJzAuOWVtJywgY29sb3I6ICcjNjY2JywgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVSZXN1bHQuaGludH1cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVSZXN1bHQuc3RhdHVzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nLCBjb2xvcjogJyM1NTUnLCBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5TdGF0dXM6PC9zdHJvbmc+IHt0aGlzLnN0YXRlLmNoYW5uZWxDcmVhdGVSZXN1bHQuc3RhdHVzLnBlZXJDb3VudCAhPSBudWxsID8gYCR7dGhpcy5zdGF0ZS5jaGFubmVsQ3JlYXRlUmVzdWx0LnN0YXR1cy5wZWVyQ291bnR9IHBlZXJzYCA6ICfigJQnfSB7dGhpcy5zdGF0ZS5jaGFubmVsQ3JlYXRlUmVzdWx0LnN0YXR1cy5pZGxlRGlzY29ubmVjdGVkICE9IG51bGwgPyBgKCR7dGhpcy5zdGF0ZS5jaGFubmVsQ3JlYXRlUmVzdWx0LnN0YXR1cy5pZGxlRGlzY29ubmVjdGVkfSBpZGxlIGRpc2Nvbm5lY3RlZClgIDogJyd9XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLCBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+e0pTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUuY2hhbm5lbENyZWF0ZVJlc3VsdCwgbnVsbCwgMil9PC9wcmU+XG4gICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxIZWFkZXIgYXM9J2g0JyBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxLjVlbScgfX0+SW52b2ljZXMgJiBwYXltZW50czwvSGVhZGVyPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44OGVtJywgY29sb3I6ICcjNjY2JywgbWFyZ2luOiAnMCAwIDAuNzVlbScgfX0+XG4gICAgICAgICAgICBCZWxvdyBpcyA8c3Ryb25nPkxpZ2h0bmluZyAoQk9MVDExKTwvc3Ryb25nPi4gRm9yIDxzdHJvbmc+b24tY2hhaW4gcGF5bWVudCByZXF1ZXN0czwvc3Ryb25nPiBzdG9yZWQgaW4gdGhlIGJyb3dzZXIgKGFjY291bnQtdG8tYWNjb3VudCB3YWxrdGhyb3VnaCksIHVzZXsnICd9XG4gICAgICAgICAgICB7aHViVWkuYml0Y29pbkludm9pY2VzID8gKFxuICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2ludm9pY2VzI2ZhYnJpYy1pbnZvaWNlcy10YWItZGVtb1wiPkludm9pY2VzPC9MaW5rPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPHN0cm9uZz5JbnZvaWNlczwvc3Ryb25nPlxuICAgICAgICAgICAgKX0uXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxGb3JtPlxuICAgICAgICAgICAgPEZvcm0uR3JvdXAgd2lkdGhzPSdlcXVhbCc+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5DcmVhdGUgaW52b2ljZSBhbW91bnQgKHNhdHMpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9J251bWJlcidcbiAgICAgICAgICAgICAgICAgIG1pbj0nMSdcbiAgICAgICAgICAgICAgICAgIHN0ZXA9JzEnXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nNTAwJ1xuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuaW52b2ljZUFtb3VudFNhdHN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBpbnZvaWNlQW1vdW50U2F0czogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8bGFiZWw+SW52b2ljZSBtZW1vPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSdTaG93biB0byBwYXllciAob3B0aW9uYWwpJ1xuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuaW52b2ljZU1lbW99XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBpbnZvaWNlTWVtbzogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgPC9Gb3JtLkdyb3VwPlxuICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUNyZWF0ZUxpZ2h0bmluZ0ludm9pY2UoKX0gZGlzYWJsZWQ9eyFsaWdodG5pbmdBdmFpbGFibGV9PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdhZGQgY2lyY2xlJyAvPlxuICAgICAgICAgICAgICBDcmVhdGUgSW52b2ljZVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8Rm9ybS5GaWVsZCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19PlxuICAgICAgICAgICAgICA8bGFiZWw+SW52b2ljZSAoQk9MVDExKTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxGb3JtLlRleHRBcmVhXG4gICAgICAgICAgICAgICAgcm93cz17M31cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nbG5iYy4uLidcbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5pbnZvaWNlSW5wdXR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgaW52b2ljZUlucHV0OiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgIDxCdXR0b24gYmFzaWMgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVEZWNvZGVMaWdodG5pbmdJbnZvaWNlKCl9IGRpc2FibGVkPXshbGlnaHRuaW5nQXZhaWxhYmxlfT5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT0nc2VhcmNoJyAvPlxuICAgICAgICAgICAgICBEZWNvZGVcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvbiBjb2xvcj0nZ3JlZW4nIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlUGF5TGlnaHRuaW5nSW52b2ljZSgpfSBkaXNhYmxlZD17IWxpZ2h0bmluZ0F2YWlsYWJsZX0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9J2JvbHQnIC8+XG4gICAgICAgICAgICAgIFBheSBJbnZvaWNlXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAge3RoaXMuc3RhdGUubGlnaHRuaW5nUmVzdWx0ICYmIChcbiAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX1cbiAgICAgICAgICAgICAgbmVnYXRpdmU9eyEhdGhpcy5zdGF0ZS5saWdodG5pbmdSZXN1bHQuZXJyb3J9XG4gICAgICAgICAgICAgIHBvc2l0aXZlPXshdGhpcy5zdGF0ZS5saWdodG5pbmdSZXN1bHQuZXJyb3J9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj57dGhpcy5zdGF0ZS5saWdodG5pbmdSZXN1bHQuZXJyb3IgPyAnTGlnaHRuaW5nIGFjdGlvbiBmYWlsZWQnIDogJ0xpZ2h0bmluZyByZXNwb25zZSd9PC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPHByZSBzdHlsZT17eyB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLCB3b3JkQnJlYWs6ICdicmVhay13b3JkJyB9fT57SlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZS5saWdodG5pbmdSZXN1bHQsIG51bGwsIDIpfTwvcHJlPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAge2lzRXhwbG9yZXJQYWdlID8gKFxuICAgICAgICA8U2VnbWVudCBpZD1cImJpdGNvaW4tZXhwbG9yZXJcIj5cbiAgICAgICAgICA8SGVhZGVyIGFzPSdoMyc+RXhwbG9yZXI8L0hlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+PHN0cm9uZz5CcmlkZ2UgKEh1YiBub2RlKTo8L3N0cm9uZz4gYmxvY2tzIGFuZCBtZW1wb29sIHRyYW5zYWN0aW9ucy48L3A+XG4gICAgICAgICAgeyFodWJVaS5iaXRjb2luRXhwbG9yZXIgJiYgKHRoaXMuc3RhdGUuYmxvY2tzLmxlbmd0aCA+IDAgfHwgdGhpcy5zdGF0ZS50cmFuc2FjdGlvbnMubGVuZ3RoID4gMCkgPyAoXG4gICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgIEVuYWJsZSA8c3Ryb25nPkJpdGNvaW4g4oCUIEJsb2NrICZhbXA7IHRyYW5zYWN0aW9uIGRldGFpbCByb3V0ZXM8L3N0cm9uZz4gaW4gQWRtaW4g4oaSIEZlYXR1cmUgdmlzaWJpbGl0eSB0byBvcGVuIGJsb2NrIGFuZCB0eCBwYWdlcyBmcm9tIHRoZSBsaXN0cyBiZWxvdy5cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8SGVhZGVyIGFzPSdoNCc+UmVjZW50IEJsb2NrczwvSGVhZGVyPlxuICAgICAgICAgIHt0aGlzLnN0YXRlLmJsb2Nrcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICBleHBsb3JlckRhdGFQZW5kaW5nID8gKFxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICAgIDxMb2FkZXIgaW5saW5lIGFjdGl2ZSBzaXplPVwic21hbGxcIiAvPiBMb2FkaW5nIGJsb2NrIGxpc3QgZnJvbSB0aGUgSHVi4oCmXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+Tm8gYmxvY2sgZGF0YSB5ZXQuPC9wPlxuICAgICAgICAgICAgKVxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8TGlzdCBkaXZpZGVkIHJlbGF4ZWQ+XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrLCBsaXN0SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0eENvdW50ID0gYmxvY2sudHhDb3VudCAhPSBudWxsXG4gICAgICAgICAgICAgICAgICA/IE51bWJlcihibG9jay50eENvdW50KVxuICAgICAgICAgICAgICAgICAgOiAoYmxvY2sudHhfY291bnQgIT0gbnVsbCA/IE51bWJlcihibG9jay50eF9jb3VudCkgOiBudWxsKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXdhcmRTYXRzID0gYmxvY2sucmV3YXJkU2F0cyAhPSBudWxsID8gTnVtYmVyKGJsb2NrLnJld2FyZFNhdHMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbE91dFNhdHMgPSBibG9jay50b3RhbE91dFNhdHMgIT0gbnVsbCA/IE51bWJlcihibG9jay50b3RhbE91dFNhdHMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCB0eFBhcnQgPSBOdW1iZXIuaXNGaW5pdGUodHhDb3VudClcbiAgICAgICAgICAgICAgICAgID8gYCR7dHhDb3VudH0gdHgke3R4Q291bnQgPT09IDEgPyAnJyA6ICdzJ31gXG4gICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgcmV3YXJkUGFydCA9IE51bWJlci5pc0Zpbml0ZShyZXdhcmRTYXRzKSAmJiByZXdhcmRTYXRzID49IDBcbiAgICAgICAgICAgICAgICAgID8gYHJld2FyZCAke3RoaXMuc2F0c1RvQlRDKHJld2FyZFNhdHMpfSBCVENgXG4gICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3Qgdm9sdW1lUGFydCA9IE51bWJlci5pc0Zpbml0ZSh0b3RhbE91dFNhdHMpICYmIHRvdGFsT3V0U2F0cyA+PSAwXG4gICAgICAgICAgICAgICAgICA/IGB2b2x1bWUgJHt0aGlzLnNhdHNUb0JUQyh0b3RhbE91dFNhdHMpfSBCVENgXG4gICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YUJpdHMgPSBbdHhQYXJ0LCByZXdhcmRQYXJ0LCB2b2x1bWVQYXJ0XS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YSA9IG1ldGFCaXRzLmxlbmd0aCA/IGAgwrcgJHttZXRhQml0cy5qb2luKCcgwrcgJyl9YCA6ICcnO1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8TGlzdC5JdGVtIGtleT17YmxvY2suaGFzaCB8fCBibG9jay5pZCB8fCBsaXN0SW5kZXh9PlxuICAgICAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgIDxMaXN0LkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtibG9jay5oYXNoIHx8IGJsb2NrLmlkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBodWJVaS5iaXRjb2luRXhwbG9yZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89e2Avc2VydmljZXMvYml0Y29pbi9ibG9ja3MvJHtlbmNvZGVVUklDb21wb25lbnQoYmxvY2suaGFzaCB8fCBibG9jay5pZCl9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAje2Jsb2NrLmhlaWdodCAhPSBudWxsID8gYmxvY2suaGVpZ2h0IDogJ24vYSd9IC0ge3RoaXMudHJpbUhhc2goYmxvY2suaGFzaCB8fCBibG9jay5pZCB8fCAnJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiN7YmxvY2suaGVpZ2h0ICE9IG51bGwgPyBibG9jay5oZWlnaHQgOiAnbi9hJ30gLSB7dGhpcy50cmltSGFzaChibG9jay5oYXNoIHx8IGJsb2NrLmlkIHx8ICcnKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiN7YmxvY2suaGVpZ2h0ICE9IG51bGwgPyBibG9jay5oZWlnaHQgOiAnbi9hJ30gLSBoYXNoIHVuYXZhaWxhYmxlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxMaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAge2Jsb2NrLnRpbWUgPyBuZXcgRGF0ZShOdW1iZXIoYmxvY2sudGltZSkgKiAxMDAwKS50b0xvY2FsZVN0cmluZygpIDogJ3RpbWUgdW5hdmFpbGFibGUnfVxuICAgICAgICAgICAgICAgICAgICAgICAge21ldGF9XG4gICAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L0xpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9MaXN0PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICA8SGVhZGVyIGFzPSdoNCcgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5NZW1wb29sIFRyYW5zYWN0aW9ucyAoe3RoaXMuc3RhdGUudHJhbnNhY3Rpb25zLmxlbmd0aH0pPC9IZWFkZXI+XG4gICAgICAgICAge3RoaXMuc3RhdGUudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIGV4cGxvcmVyRGF0YVBlbmRpbmcgPyAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgPExvYWRlciBpbmxpbmUgYWN0aXZlIHNpemU9XCJzbWFsbFwiIC8+IExvYWRpbmcgbWVtcG9vbCB0cmFuc2FjdGlvbnPigKZcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5ObyB0cmFuc2FjdGlvbiBkYXRhIHlldC48L3A+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxMaXN0IGRpdmlkZWQgcmVsYXhlZD5cbiAgICAgICAgICAgICAge3RoaXMuc3RhdGUudHJhbnNhY3Rpb25zLm1hcCgodHgsIGxpc3RJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpZCA9IHR4LnR4aWQgfHwgdHguaWQgfHwgJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5jb25maXJtZWQgPSB0eC5jb25maXJtYXRpb25zICE9IG51bGwgPyBOdW1iZXIodHguY29uZmlybWF0aW9ucykgPT09IDAgOiB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8TGlzdC5JdGVtIGtleT17dGlkIHx8IGxpc3RJbmRleH0+XG4gICAgICAgICAgICAgICAgICAgIDxMaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPExpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAge3RpZCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHViVWkuYml0Y29pbkV4cGxvcmVyID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh0aWQpKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnRyaW1IYXNoKHRpZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt0aGlzLnRyaW1IYXNoKHRpZCl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaW1IYXNoKHRpZClcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dW5jb25maXJtZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nLCBmb250U2l6ZTogJzAuODVlbScsIGNvbG9yOiAnI2YyNzExYycgfX0+KG1lbXBvb2wpPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxMaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAge3R4LnZhbHVlICE9IG51bGwgPyBgJHt0eC52YWx1ZX0gQlRDYCA6ICh0eC5hbW91bnRTYXRzICE9IG51bGwgPyBgJHtmb3JtYXRTYXRzRGlzcGxheSh0eC5hbW91bnRTYXRzKX0gc2F0c2AgOiAnYW1vdW50IHVuYXZhaWxhYmxlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L0xpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9MaXN0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgPEJ1dHRvbiBiYXNpYyBzaXplPSdzbWFsbCcgb25DbGljaz17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7IGFkdmFuY2VkT3BlbjogIXRoaXMuc3RhdGUuYWR2YW5jZWRPcGVuIH0pfT5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9J2NvZ3MnIC8+XG4gICAgICAgICAgICB7dGhpcy5zdGF0ZS5hZHZhbmNlZE9wZW4gPyAnSGlkZScgOiAnU2hvdyd9IGFkdmFuY2VkIFVUWE8gY29udHJvbHNcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5hZHZhbmNlZE9wZW4gJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19PlxuICAgICAgICAgICAgICA8SGVhZGVyIGFzPSdoNCc+VVRYTyBkZXRhaWwgKGFkdmFuY2VkKTwvSGVhZGVyPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+PHN0cm9uZz5CcmlkZ2UgKEh1YiBub2RlKTo8L3N0cm9uZz4gVVRYT3MgZnJvbSB1cHN0cmVhbSBwYXltZW50cyBBUEkuPC9wPlxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS51dHhvcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5ObyBVVFhPIGRhdGEgcmV0dXJuZWQgYnkgdXBzdHJlYW0gcGF5bWVudHMgQVBJLjwvcD5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VGFibGUgY29tcGFjdD0ndmVyeScgY2VsbGVkPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5UeGlkPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlZvdXQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+QW1vdW50PC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkNvbmZpcm1hdGlvbnM8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUudXR4b3MubWFwKCh1dHhvLCBsaXN0SW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93IGtleT17YCR7dXR4by50eGlkIHx8IGxpc3RJbmRleH06JHt1dHhvLnZvdXQgfHwgMH1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxjb2RlPnt0aGlzLnRyaW1IYXNoKHV0eG8udHhpZCB8fCB1dHhvLmlkIHx8ICcnKX08L2NvZGU+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e3V0eG8udm91dCAhPSBudWxsID8gdXR4by52b3V0IDogJy0nfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPnt1dHhvLmFtb3VudCAhPSBudWxsID8gdXR4by5hbW91bnQgOiAodXR4by5hbW91bnRTYXRzICE9IG51bGwgPyBgJHtmb3JtYXRTYXRzRGlzcGxheSh1dHhvLmFtb3VudFNhdHMpfSBzYXRzYCA6ICctJyl9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e3V0eG8uY29uZmlybWF0aW9ucyAhPSBudWxsID8gdXR4by5jb25maXJtYXRpb25zIDogJy0nfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICA8TW9kYWwgb3Blbj17dGhpcy5zdGF0ZS5zZXR0aW5nc09wZW59IG9uQ2xvc2U9eygpID0+IHRoaXMuc2V0U3RhdGUoeyBzZXR0aW5nc09wZW46IGZhbHNlIH0pfSBzaXplPSdzbWFsbCc+XG4gICAgICAgICAgPE1vZGFsLkhlYWRlcj5CaXRjb2luIFVwc3RyZWFtIFNldHRpbmdzPC9Nb2RhbC5IZWFkZXI+XG4gICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICA8Rm9ybT5cbiAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPGxhYmVsPkV4cGxvcmVyIEFQSSBiYXNlIFVSTDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0naHR0cHM6Ly9leHBsb3Jlci5mYWJyaWMucHViJ1xuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudXBzdHJlYW1EcmFmdC5leHBsb3JlckJhc2VVcmx9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyB1cHN0cmVhbURyYWZ0OiB7IC4uLnRoaXMuc3RhdGUudXBzdHJlYW1EcmFmdCwgZXhwbG9yZXJCYXNlVXJsOiBlLnRhcmdldC52YWx1ZSB9IH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPGxhYmVsPlBheW1lbnRzIEFQSSBiYXNlIFVSTDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0naHR0cHM6Ly9wYXltZW50cy5mYWJyaWMucHViJ1xuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudXBzdHJlYW1EcmFmdC5wYXltZW50c0Jhc2VVcmx9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyB1cHN0cmVhbURyYWZ0OiB7IC4uLnRoaXMuc3RhdGUudXBzdHJlYW1EcmFmdCwgcGF5bWVudHNCYXNlVXJsOiBlLnRhcmdldC52YWx1ZSB9IH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPGxhYmVsPkxpZ2h0bmluZyBBUEkgYmFzZSBVUkw8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9J2h0dHBzOi8vbGlnaHRuaW5nLmZhYnJpYy5wdWInXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS51cHN0cmVhbURyYWZ0LmxpZ2h0bmluZ0Jhc2VVcmx9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyB1cHN0cmVhbURyYWZ0OiB7IC4uLnRoaXMuc3RhdGUudXBzdHJlYW1EcmFmdCwgbGlnaHRuaW5nQmFzZVVybDogZS50YXJnZXQudmFsdWUgfSB9KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5QYXlqb2luIEFQSSBiYXNlIFVSTDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0naHR0cHM6Ly9odWIuZmFicmljLnB1Yi9zZXJ2aWNlcy9wYXlqb2luJ1xuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudXBzdHJlYW1EcmFmdC5wYXlqb2luQmFzZVVybCB8fCAnJ31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IHVwc3RyZWFtRHJhZnQ6IHsgLi4udGhpcy5zdGF0ZS51cHN0cmVhbURyYWZ0LCBwYXlqb2luQmFzZVVybDogZS50YXJnZXQudmFsdWUgfSB9KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5BUEkgdG9rZW4gKG9wdGlvbmFsKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPSdwYXNzd29yZCdcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSdCZWFyZXIgdG9rZW4nXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS51cHN0cmVhbURyYWZ0LmFwaVRva2VufVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgdXBzdHJlYW1EcmFmdDogeyAuLi50aGlzLnN0YXRlLnVwc3RyZWFtRHJhZnQsIGFwaVRva2VuOiBlLnRhcmdldC52YWx1ZSB9IH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgPE1vZGFsLkFjdGlvbnM+XG4gICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IHRoaXMuc2V0U3RhdGUoeyBzZXR0aW5nc09wZW46IGZhbHNlIH0pfT5DYW5jZWw8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2F2ZWQgPSBzYXZlVXBzdHJlYW1TZXR0aW5ncyh0aGlzLnN0YXRlLnVwc3RyZWFtRHJhZnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyB1cHN0cmVhbTogc2F2ZWQsIHNldHRpbmdzT3BlbjogZmFsc2UgfSwgKCkgPT4gdGhpcy5yZWZyZXNoKCkpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBTYXZlXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L01vZGFsLkFjdGlvbnM+XG4gICAgICAgIDwvTW9kYWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQml0Y29pbkhvbWU7XG4iXSwibmFtZXMiOlsiX3NsaWNlZFRvQXJyYXkiLCJyIiwiZSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJsIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwibiIsImkiLCJ1IiwiYSIsImYiLCJvIiwiY2FsbCIsIm5leHQiLCJPYmplY3QiLCJkb25lIiwicHVzaCIsInZhbHVlIiwibGVuZ3RoIiwiQXJyYXkiLCJpc0FycmF5IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfbiIsIkYiLCJzIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfcmVnZW5lcmF0b3IiLCJ0b1N0cmluZ1RhZyIsImMiLCJwcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwicCIsInkiLCJHIiwidiIsImQiLCJiaW5kIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3R5cGVvZiIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX29iamVjdFNwcmVhZCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJfaW5oZXJpdHMiLCJfc2V0UHJvdG90eXBlT2YiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJDaGVja2JveCIsIkZvcm0iLCJIZWFkZXIiLCJJY29uIiwiSW5wdXQiLCJMaXN0IiwiTG9hZGVyIiwiTWVzc2FnZSIsIk1vZGFsIiwiU2VnbWVudCIsIlRhYmxlIiwiX3JlcXVpcmUzIiwiY2xlYXJCYWxhbmNlQ2FjaGUiLCJjcmVhdGVMaWdodG5pbmdDaGFubmVsIiwiY3JlYXRlTGlnaHRuaW5nSW52b2ljZSIsImNyZWF0ZVBheWpvaW5EZXBvc2l0IiwiZGVjb2RlTGlnaHRuaW5nSW52b2ljZSIsImRlcml2ZUFuZFN0b3JlUmVjZWl2ZUFkZHJlc3MiLCJmZXRjaEFkZHJlc3NCYWxhbmNlIiwiZmV0Y2hCaXRjb2luU3RhdHVzIiwiZmV0Y2hCaXRjb2luUGVlcnMiLCJmZXRjaEJpdGNvaW5OZXR3b3JrU3VtbWFyeSIsImJyb2FkY2FzdFJhd1RyYW5zYWN0aW9uIiwiZmV0Y2hFeHBsb3JlckRhdGEiLCJmZXRjaExpZ2h0bmluZ0NoYW5uZWxzIiwiZmV0Y2hMaWdodG5pbmdTdGF0dXMiLCJmZXRjaFBheWpvaW5DYXBhYmlsaXRpZXMiLCJmZXRjaFBheWpvaW5TZXNzaW9ucyIsImZldGNoUGF5am9pblNlc3Npb24iLCJmZXRjaFJlY2VpdmVBZGRyZXNzIiwiZmV0Y2hVVFhPcyIsImZldGNoV2FsbGV0U3VtbWFyeSIsImZldGNoV2FsbGV0U3VtbWFyeVdpdGhDYWNoZSIsImdldFNwZW5kV2FsbGV0Q29udGV4dCIsImdldE5leHRSZWNlaXZlV2FsbGV0Q29udGV4dCIsImxvYWRVcHN0cmVhbVNldHRpbmdzIiwibG9hZFBheWpvaW5QcmVmZXJlbmNlcyIsInNhdmVQYXlqb2luUHJlZmVyZW5jZXMiLCJwYXlMaWdodG5pbmdJbnZvaWNlIiwicmVzZXJ2ZU5leHRSZWNlaXZlQWRkcmVzcyIsInNhdmVVcHN0cmVhbVNldHRpbmdzIiwic2VuZFBheW1lbnQiLCJnZW5lcmF0ZUJsb2NrIiwicmVxdWVzdEZhdWNldCIsIl9yZXF1aXJlNCIsImZvcm1hdFNhdHNEaXNwbGF5IiwiZm9ybWF0QnRjRnJvbVNhdHMiLCJfcmVxdWlyZTUiLCJyZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIiwiX3JlcXVpcmU2IiwiY29weVRvQ2xpcGJvYXJkIiwicHVzaFVpTm90aWZpY2F0aW9uIiwiX3JlcXVpcmU3IiwibG9hZEh1YlVpRmVhdHVyZUZsYWdzIiwic3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MiLCJfcmVxdWlyZTgiLCJTQVRTX1BFUl9CVEMiLCJVSV9OVU1CRVJfTE9HX0VYUF9USFJFU0hPTEQiLCJIdWJSZWd0ZXN0QWRtaW5Ub2tlblBhbmVsIiwiQml0Y29pbldhbGxldEJyYW5jaEJhciIsIkJpdGNvaW5Ib21lIiwiX1JlYWN0JENvbXBvbmVudCIsInByb3BzIiwiX3RoaXMiLCJ1cHN0cmVhbSIsInBheWpvaW5QcmVmcyIsInN0YXRlIiwibG9hZGluZyIsInJlZnJlc2hpbmciLCJlcnJvciIsImFkdmFuY2VkT3BlbiIsInNldHRpbmdzT3BlbiIsInVwc3RyZWFtRHJhZnQiLCJ3YWxsZXQiLCJ3YWxsZXRJZCIsImZpbmdlcnByaW50IiwieHB1YiIsImhhc1ByaXZhdGVLZXkiLCJiYWxhbmNlU2F0cyIsImNvbmZpcm1lZFNhdHMiLCJ1bmNvbmZpcm1lZFNhdHMiLCJhZGRyZXNzIiwicmVjZWl2ZUluZGV4IiwiYmxvY2tzIiwidHJhbnNhY3Rpb25zIiwidXR4b3MiLCJwYXltZW50VG8iLCJwYXltZW50QW1vdW50U2F0cyIsInBheW1lbnRNZW1vIiwiaW52b2ljZUFtb3VudFNhdHMiLCJpbnZvaWNlTWVtbyIsImludm9pY2VJbnB1dCIsInBheWpvaW5FbmFibGVkIiwib3BlcmF0b3JEZXBvc2l0IiwicGF5am9pbkFtb3VudFNhdHMiLCJwYXlqb2luTGFiZWwiLCJwYXlqb2luTWVtbyIsInBheWpvaW5TZXNzaW9uSWQiLCJwYXlqb2luUmVzdWx0IiwicGF5am9pbkNhcGFiaWxpdGllcyIsImF2YWlsYWJsZSIsInBheWpvaW5TZXNzaW9uc1NuYXBzaG90IiwiYml0Y29pblN0YXR1cyIsInN0YXR1cyIsImxpZ2h0bmluZ1N0YXR1cyIsImxpZ2h0bmluZ0NoYW5uZWxzIiwibGlnaHRuaW5nT3V0cHV0cyIsImNoYW5uZWxDcmVhdGVSZW1vdGUiLCJjaGFubmVsQ3JlYXRlQW1vdW50U2F0cyIsImNoYW5uZWxDcmVhdGVQdXNoTXNhdCIsImNoYW5uZWxDcmVhdGVSZXN1bHQiLCJjaGFubmVsQ3JlYXRlTG9hZGluZyIsInBheW1lbnRSZXN1bHQiLCJsaWdodG5pbmdSZXN1bHQiLCJmYXVjZXRBZGRyZXNzIiwiZmF1Y2V0QW1vdW50U2F0cyIsImZhdWNldFJlc3VsdCIsImxvb2t1cEFkZHJlc3MiLCJsb29rdXBSZXN1bHQiLCJsb29rdXBMb2FkaW5nIiwibm9kZVBlZXJzIiwibm9kZU5ldHdvcmsiLCJyYXdUeEhleCIsInJhd1R4UmVzdWx0IiwidHhMb29rdXBJZCIsInR4TG9va3VwRXJyb3IiLCJodWJVaUZsYWdzUmV2IiwiX29uQml0Y29pbkhhc2hDaGFuZ2UiLCJfc3luY0JpdGNvaW5IYXNoU2Nyb2xsIiwid2luZG93IiwicmF3IiwibG9jYXRpb24iLCJoYXNoIiwicmVwbGFjZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImVsIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJibG9jayIsImNvbXBvbmVudERpZE1vdW50IiwiX3RoaXMyIiwicmVmcmVzaCIsIl9vbkdsb2JhbFN0YXRlVXBkYXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9odWJVaUZsYWdzVW5zdWIiLCJzZXRTdGF0ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRldGFpbCIsIm9wZXJhdGlvbiIsInBhdGgiLCJnbG9iYWxTdGF0ZSIsImJpdGNvaW4iLCJfcmVmcmVzaENsaWVudEJhbGFuY2VGcm9tSHViU3RhdHVzIiwiX3JlZnJlc2hDbGllbnRCYWxhbmNlRnJvbUh1YlN0YXR1czIiLCJfY2FsbGVlIiwiaWRlbnRpdHkiLCJuZXR3b3JrIiwic3VtbWFyeSIsIl9hcmdzIiwiX2NvbnRleHQiLCJ1bmRlZmluZWQiLCJfcmVmcmVzaGluZ0NsaWVudEJhbGFuY2UiLCJnZXRJZGVudGl0eSIsInRvTG93ZXJDYXNlIiwiYmFsYW5jZSIsInByZXYiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJwcmV2SWQiLCJuZXh0SWQiLCJzYXRzVG9CVEMiLCJnZXRMaWdodG5pbmdCYWxhbmNlRnJvbU91dHB1dHMiLCJvdXRwdXRzIiwiY29uZmlybWVkIiwidW5jb25maXJtZWQiLCJpbW1hdHVyZSIsIl9pdGVyYXRvciIsIl9zdGVwIiwiYW10IiwiYW1vdW50X21zYXQiLCJNYXRoIiwiZmxvb3IiLCJhbW91bnRfc2F0IiwiZXJyIiwidHJpbUhhc2giLCJsZWZ0IiwicmlnaHQiLCJ0ZXh0IiwiY29uY2F0IiwiZm9ybWF0RGlmZmljdWx0eSIsImlzRmluaXRlIiwidG9FeHBvbmVudGlhbCIsInRvTG9jYWxlU3RyaW5nIiwiZm9ybWF0Qnl0ZXMiLCJyb3VuZCIsInRvRml4ZWQiLCJfaGFuZGxlQnJvYWRjYXN0UmF3VHgiLCJfY2FsbGVlMiIsInRva2VuIiwic2V0dGluZ3MiLCJfdCIsIl9jb250ZXh0MiIsImFkbWluVG9rZW4iLCJhcGlUb2tlbiIsIm1lc3NhZ2UiLCJoYW5kbGVCcm9hZGNhc3RSYXdUeCIsImhhbmRsZVR4TG9va3VwIiwiaWQiLCJ0cmltIiwiYml0Y29pbkV4cGxvcmVyIiwibmF2IiwibmF2aWdhdGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJhc3NpZ24iLCJuYXZpZ2F0ZUludGVybmFsUGF0aCIsInN0YXJ0c1dpdGgiLCJpbmNsdWRlcyIsImF1dGgiLCJfcmVmcmVzaCIsIl9jYWxsZWUzIiwic3BlbmRXYWxsZXQiLCJuZXh0UmVjZWl2ZSIsInVwc3RyZWFtQWRtaW4iLCJzdW1tYXJ5VGFzayIsImV4cGxvcmVyVGFzayIsImJpdGNvaW5TdGF0dXNUYXNrIiwibGlnaHRuaW5nU3RhdHVzVGFzayIsImxpZ2h0bmluZ0NoYW5uZWxzVGFzayIsInV0eG9UYXNrIiwicGF5am9pbkNhcGFiaWxpdGllc1Rhc2siLCJwYXlqb2luU2Vzc2lvbnNUYXNrIiwicGF5am9pblNlc3Npb25UYXNrIiwibm9kZVBlZXJzVGFzayIsIm5vZGVOZXR3b3JrVGFzayIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJleHBsb3JlciIsInBheWpvaW5TZXNzaW9uc0xpc3QiLCJwYXlqb2luU2Vzc2lvbiIsIl9uZXR3b3JrIiwibG9jYWxSZWN2IiwiZXhwbG9yZXJCbG9ja3MiLCJleHBsb3JlclRyYW5zYWN0aW9ucyIsInN0YXR1c0Jsb2NrcyIsInN0YXR1c1RyYW5zYWN0aW9ucyIsImh1YlVpIiwiYWN0aXZlTm90RXhwaXJlZCIsImF3YWl0aW5nQ29tcGxldGlvbiIsIl90MiIsIl9jb250ZXh0MyIsImh1YkFkbWluVG9rZW4iLCJfaHViQWRtaW5Ub2tlbiIsImNoYW5uZWxzIiwibGltaXQiLCJpbmNsdWRlRXhwaXJlZCIsImFsbCIsImN1cnJlbnRJbmRleCIsInJlY2VudEJsb2NrcyIsInJlY2VudFRyYW5zYWN0aW9ucyIsImJpdGNvaW5QYXltZW50cyIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImhhbmRsZU5leHRSZWNlaXZlQWRkcmVzcyIsInJlY2VpdmVXYWxsZXQiLCJjdXJyZW50QWRkcmVzcyIsIl9oYW5kbGVTZW5kUGF5bWVudCIsIl9jYWxsZWU0IiwicmVzdWx0IiwicGFpZFR4aWQiLCJfdDMiLCJfY29udGV4dDQiLCJ0byIsImFtb3VudFNhdHMiLCJtZW1vIiwicGF5bWVudCIsInR4aWQiLCJoYW5kbGVTZW5kUGF5bWVudCIsIl9oYW5kbGVMb29rdXBBZGRyZXNzIiwiX2NhbGxlZTUiLCJfdDQiLCJfY29udGV4dDUiLCJoYW5kbGVMb29rdXBBZGRyZXNzIiwiX2hhbmRsZVJlcXVlc3RGYXVjZXQiLCJfY2FsbGVlNiIsIl90NSIsIl9jb250ZXh0NiIsIm1heCIsIm1pbiIsImhhbmRsZVJlcXVlc3RGYXVjZXQiLCJfaGFuZGxlQ3JlYXRlTGlnaHRuaW5nSW52b2ljZSIsIl9jYWxsZWU3IiwiaW52b2ljZSIsIl90NiIsIl9jb250ZXh0NyIsImJvbHQxMSIsInJlcXVlc3QiLCJoYW5kbGVDcmVhdGVMaWdodG5pbmdJbnZvaWNlIiwiX2hhbmRsZURlY29kZUxpZ2h0bmluZ0ludm9pY2UiLCJfY2FsbGVlOCIsIl90NyIsIl9jb250ZXh0OCIsImhhbmRsZURlY29kZUxpZ2h0bmluZ0ludm9pY2UiLCJfaGFuZGxlUGF5TGlnaHRuaW5nSW52b2ljZSIsIl9jYWxsZWU5IiwiX3Q4IiwiX2NvbnRleHQ5IiwiaGFuZGxlUGF5TGlnaHRuaW5nSW52b2ljZSIsIl9oYW5kbGVDcmVhdGVDaGFubmVsIiwiX2NhbGxlZTAiLCJyZW1vdGUiLCJoYXNFcnJvciIsIl90OSIsIl9jb250ZXh0MCIsInB1c2hNc2F0IiwiaGFuZGxlQ3JlYXRlQ2hhbm5lbCIsIl9oYW5kbGVHZW5lcmF0ZUJsb2NrIiwiX2NhbGxlZTEiLCJoYXNoZXMiLCJ0aXAiLCJzdWIiLCJfdDAiLCJfY29udGV4dDEiLCJjb3VudCIsImdlbmVyYXRlZEJsb2NrIiwiYmxvY2tIYXNoZXMiLCJEYXRlIiwibm93Iiwia2luZCIsInRpdGxlIiwic3VidGl0bGUiLCJocmVmIiwiY29weVRleHQiLCJoYW5kbGVHZW5lcmF0ZUJsb2NrIiwiX2hhbmRsZUNyZWF0ZVBheWpvaW5EZXBvc2l0IiwiX2NhbGxlZTEwIiwicGpQcmVmIiwidXNlSm0iLCJzZXNzaW9uIiwic2lkIiwiX3QxIiwiX2NvbnRleHQxMCIsInJlY2VpdmVUYXByb290Sm9pbm1hcmtldCIsInJlY2VpdmVUZW1wbGF0ZSIsImxhYmVsIiwiYmlwMjFVcmkiLCJwcm9wb3NhbFVSTCIsImhhbmRsZUNyZWF0ZVBheWpvaW5EZXBvc2l0IiwiX2hhbmRsZVJlZnJlc2hQYXlqb2luU2Vzc2lvbiIsIl9jYWxsZWUxMSIsInNlc3Npb25JZCIsIl90MTAiLCJfY29udGV4dDExIiwiaGFuZGxlUmVmcmVzaFBheWpvaW5TZXNzaW9uIiwiZ2V0QWRkcmVzc1BsYWNlaG9sZGVyIiwicmVuZGVyIiwiX3RoaXMzIiwiaGFzVXBzdHJlYW0iLCJleHBsb3JlckJhc2VVcmwiLCJwYXltZW50c0Jhc2VVcmwiLCJsaWdodG5pbmdCYXNlVXJsIiwiYml0Y29pblJlYWR5IiwiYml0Y29pbk5ldHdvcmsiLCJpc1JlZ3Rlc3QiLCJoYXNBZG1pblRva2VuIiwiY2FuR2VuZXJhdGVCbG9ja3MiLCJjYW5TaG93R2VuZXJhdGVCbG9jayIsImxpZ2h0bmluZ0F2YWlsYWJsZSIsImFkZHJlc3NQbGFjZWhvbGRlciIsImJjIiwiYmxvY2tjaGFpbiIsIm1wIiwibWVtcG9vbEluZm8iLCJubiIsIm5pIiwibmV0d29ya0luZm8iLCJkZXBSb290IiwiZGVwbG95bWVudHMiLCJkZXBsb3ltZW50c0lubmVyIiwiZGVwbG95bWVudEVudHJpZXMiLCJlbnRyaWVzIiwiX3JlZiIsIl9yZWYyIiwiayIsImJpdGNvaW5QYWdlIiwiaXNEYXNoYm9hcmRQYWdlIiwiaXNGYXVjZXRQYWdlIiwiaXNMaWdodG5pbmdQYWdlIiwiaXNFeHBsb3JlclBhZ2UiLCJwYXlqb2luU25hcHNob3QiLCJsaWdodG5pbmdGdW5kcyIsImh1YldhbGxldFNhdHMiLCJjbGllbnRXYWxsZXRTYXRzIiwic2hhcmVkU2Vzc2lvbnNTYXRzIiwiZXhwbG9yZXJEYXRhUGVuZGluZyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJzdHlsZSIsInBvc2l0aW9uIiwidG9wIiwiekluZGV4IiwiYmFja2dyb3VuZCIsInBhZGRpbmdCb3R0b20iLCJtYXJnaW5Cb3R0b20iLCJib3hTaGFkb3ciLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJnYXAiLCJhcyIsIm1hcmdpbiIsImNvbG9yIiwiQ29udGVudCIsImZsZXhXcmFwIiwiYmFzaWMiLCJpY29uIiwib25DbGljayIsInByaW1hcnkiLCJiaXRjb2luSW52b2ljZXMiLCJiaXRjb2luUmVzb3VyY2VzIiwiYml0Y29pbkNyb3dkZnVuZCIsImJpdGNvaW5MaWdodG5pbmciLCJtYXJnaW5Ub3AiLCJtYXhXaWR0aCIsImxpbmVIZWlnaHQiLCJGcmFnbWVudCIsImFkbWluVG9rZW5Qcm9wIiwicGFkZGluZyIsImJvcmRlckNvbG9yIiwianVzdGlmeUNvbnRlbnQiLCJmb250V2VpZ2h0IiwiZm9udFNpemUiLCJzaXplIiwibGFiZWxQb3NpdGlvbiIsInBlZXJzIiwiY29tcGFjdCIsImNlbGxlZCIsInVuc3RhY2thYmxlIiwiQm9keSIsIlJvdyIsIkNlbGwiLCJ3aWR0aCIsIndhcm5pbmciLCJpbmZvIiwiYnVsbGV0ZWQiLCJJdGVtIiwibmVnYXRpdmUiLCJ0eXBlIiwiZGlzYWJsZWQiLCJ0YXJnZXQiLCJyZWwiLCJiZWFjb24iLCJjbG9jayIsImhlaWdodCIsImhlYWRlcnMiLCJ2ZXJpZmljYXRpb25wcm9ncmVzcyIsImluaXRpYWxibG9ja2Rvd25sb2FkIiwiZGlmZmljdWx0eSIsImNoYWluIiwibWVkaWFudGltZSIsImJpdGNvaW5QcnVuZWQiLCJwcnVuZWQiLCJjb2xTcGFuIiwiYml0Y29pblBydW5lSGVpZ2h0IiwicHJ1bmVoZWlnaHQiLCJtZW1wb29sVHhDb3VudCIsInVzYWdlIiwiYnl0ZXMiLCJtZW1wb29sRmVlU2F0cyIsIm1lbXBvb2xGZWVzVHJ1bmNhdGVkIiwibWlucmVsYXl0eGZlZSIsIm1lbXBvb2xtaW5mZWUiLCJjb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zX2luIiwiY29ubmVjdGlvbnNfb3V0IiwicmVsYXlmZWUiLCJzdWJ2ZXJzaW9uIiwicHJvdG9jb2x2ZXJzaW9uIiwidmVyc2lvbiIsInAycEFkZE5vZGVUYXJnZXRzIiwibWFwIiwiaCIsIkhlYWRlckNlbGwiLCJfcmVmMyIsIl9yZWY0Iiwicm93IiwiYWN0aXZlIiwibWluX2FjdGl2YXRpb25faGVpZ2h0IiwiYml0IiwiYmlwOSIsIm92ZXJmbG93WCIsImFkZHIiLCJhZGRyYmluZCIsImluYm91bmQiLCJwaW5ndGltZSIsImJ5dGVzcmVjdiIsImJ5dGVzc2VudCIsIndvcmRCcmVhayIsInN1YnZlciIsInN5bmNlZF9oZWFkZXJzIiwic3luY2VkX2Jsb2NrcyIsInN0YXJ0aW5naGVpZ2h0IiwiR3JvdXAiLCJ3aWR0aHMiLCJGaWVsZCIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJhbGlnblNlbGYiLCJUZXh0QXJlYSIsInJvd3MiLCJwb3NpdGl2ZSIsIm1hcmdpbkxlZnQiLCJ0b2dnbGUiLCJjaGVja2VkIiwiZGF0YSIsImZsZXgiLCJtaW5XaWR0aCIsInN0ZXAiLCJ3aGl0ZVNwYWNlIiwiSlNPTiIsInN0cmluZ2lmeSIsImZyIiwiZmF1Y2V0IiwiZGVzdCIsImRlc3RpbmF0aW9uIiwibm9kZSIsImFsaWFzIiwiYmluZGluZyIsImhvc3RQb3J0IiwicGFydHMiLCJqb2luIiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0IiwidGEiLCJvcGFjaXR5IiwiYm9keSIsImFwcGVuZENoaWxkIiwic2VsZWN0IiwiZXhlY0NvbW1hbmQiLCJyZW1vdmVDaGlsZCIsImRlcG9zaXRBZGRyZXNzIiwiZmF1Y2V0U2VnbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJfbm9kZSRiYWxhbmNlU2F0cyIsIl9ub2RlJGJhbGFuY2VVbmNvbmZpciIsIl9ub2RlJGJhbGFuY2VJbW1hdHVyZSIsImZyb21TdGF0dXMiLCJiYWxhbmNlVW5jb25maXJtZWRTYXRzIiwiYmFsYW5jZUltbWF0dXJlU2F0cyIsImZyb21PdXRwdXRzIiwic3RhdHVzVG90YWwiLCJvdXRwdXRzVG90YWwiLCJiYWwiLCJ0b3RhbCIsImxuQ2hhbm5lbCIsImxpc3RJbmRleCIsImlkRm9yUGF0aCIsImNoYW5uZWxfaWQiLCJmdW5kaW5nX3R4aWQiLCJyb3dLZXkiLCJjdXJzb3IiLCJwZWVyX2lkIiwiY2hhbm5lbF9zYXQiLCJvdXJfYW1vdW50X21zYXQiLCJzaG9ydF9jaGFubmVsX2lkIiwiaGludCIsInBlZXJDb3VudCIsImlkbGVEaXNjb25uZWN0ZWQiLCJpbmxpbmUiLCJkaXZpZGVkIiwicmVsYXhlZCIsInR4Q291bnQiLCJ0eF9jb3VudCIsInJld2FyZFNhdHMiLCJ0b3RhbE91dFNhdHMiLCJ0eFBhcnQiLCJyZXdhcmRQYXJ0Iiwidm9sdW1lUGFydCIsIm1ldGFCaXRzIiwibWV0YSIsIkRlc2NyaXB0aW9uIiwidGltZSIsInR4IiwidGlkIiwiY29uZmlybWF0aW9ucyIsInV0eG8iLCJ2b3V0IiwiYW1vdW50Iiwib3BlbiIsIm9uQ2xvc2UiLCJwYXlqb2luQmFzZVVybCIsIkFjdGlvbnMiLCJzYXZlZCIsIkNvbXBvbmVudCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/BitcoinHome.js\n\n}')},"./components/BitcoinPaymentsHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Checkbox = _require2.Checkbox,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Label = _require2.Label,\n List = _require2.List,\n Message = _require2.Message,\n Segment = _require2.Segment,\n Table = _require2.Table;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n broadcastRawTransaction = _require3.broadcastRawTransaction,\n createPayjoinDeposit = _require3.createPayjoinDeposit,\n decodeLightningInvoice = _require3.decodeLightningInvoice,\n deriveAddressFromXpub = _require3.deriveAddressFromXpub,\n fetchLightningChannels = _require3.fetchLightningChannels,\n fetchLightningStatus = _require3.fetchLightningStatus,\n fetchPayments = _require3.fetchPayments,\n fetchPayjoinCapabilities = _require3.fetchPayjoinCapabilities,\n fetchPayjoinSessions = _require3.fetchPayjoinSessions,\n fetchReceiveAddress = _require3.fetchReceiveAddress,\n fetchTransactionHex = _require3.fetchTransactionHex,\n fetchUTXOs = _require3.fetchUTXOs,\n fetchWalletSummary = _require3.fetchWalletSummary,\n fetchWalletTransactions = _require3.fetchWalletTransactions,\n getSpendWalletContext = _require3.getSpendWalletContext,\n getNextReceiveWalletContext = _require3.getNextReceiveWalletContext,\n loadUpstreamSettings = _require3.loadUpstreamSettings,\n loadPayjoinPreferences = _require3.loadPayjoinPreferences,\n savePayjoinPreferences = _require3.savePayjoinPreferences,\n payLightningInvoice = _require3.payLightningInvoice,\n reserveNextReceiveAddress = _require3.reserveNextReceiveAddress,\n sendPayment = _require3.sendPayment,\n submitPayjoinProposal = _require3.submitPayjoinProposal,\n applyPayjoinAcpHubBoost = _require3.applyPayjoinAcpHubBoost;\nvar _require4 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require4.readHubAdminTokenFromBrowser;\nvar _require5 = __webpack_require__(/*! ../functions/payjoinBrowserWallet */ "./functions/payjoinBrowserWallet.js"),\n parseBitcoinUriForPayjoin = _require5.parseBitcoinUriForPayjoin,\n extractFabricPayjoinSessionIdFromPjUrl = _require5.extractFabricPayjoinSessionIdFromPjUrl,\n chainIndexFromDescriptor = _require5.chainIndexFromDescriptor,\n buildOriginalSignedPayjoinPsbt = _require5.buildOriginalSignedPayjoinPsbt,\n signOurPayjoinInputs = _require5.signOurPayjoinInputs,\n finalizeAndExtractHex = _require5.finalizeAndExtractHex,\n postPayjoinProposalWithDesktopFallback = _require5.postPayjoinProposalWithDesktopFallback;\nvar _require6 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require6.formatSatsDisplay;\nvar _require7 = __webpack_require__(/*! ../functions/hubIdentityUiHints */ "./functions/hubIdentityUiHints.js"),\n fabricIdentityNeedFullKeyPlain = _require7.fabricIdentityNeedFullKeyPlain;\nvar txContractLabels = __webpack_require__(/*! ../functions/txContractLabels */ "./functions/txContractLabels.js");\nvar invoiceStore = __webpack_require__(/*! ../functions/invoiceStore */ "./functions/invoiceStore.js");\nvar _require8 = __webpack_require__(/*! ../functions/uiNotifications */ "./functions/uiNotifications.js"),\n copyToClipboard = _require8.copyToClipboard,\n pushUiNotification = _require8.pushUiNotification;\nvar _require9 = __webpack_require__(/*! ../constants */ "./constants.js"),\n SATS_PER_BTC = _require9.SATS_PER_BTC;\nvar QrScannerModal = __webpack_require__(/*! ./QrScannerModal */ "./components/QrScannerModal.js");\nvar HubRegtestAdminTokenPanel = __webpack_require__(/*! ./HubRegtestAdminTokenPanel */ "./components/HubRegtestAdminTokenPanel.js");\nvar BitcoinWalletBranchBar = __webpack_require__(/*! ./BitcoinWalletBranchBar */ "./components/BitcoinWalletBranchBar.js");\nvar _require0 = __webpack_require__(/*! ../functions/federationSpendingPrefs */ "./functions/federationSpendingPrefs.js"),\n loadFederationSpendingPrefs = _require0.loadFederationSpendingPrefs,\n mergePaymentMemoWithFederation = _require0.mergePaymentMemoWithFederation;\nvar _require1 = __webpack_require__(/*! ../functions/fabricSafeLog */ "./functions/fabricSafeLog.js"),\n safeBriefMessage = _require1.safeBriefMessage;\nvar _require10 = __webpack_require__(/*! ../functions/fabricDelegationLocal */ "./functions/fabricDelegationLocal.js"),\n hasExternalSigningDelegation = _require10.hasExternalSigningDelegation;\n\n/**\n * When `refresh()` runs twice in one update (identity + query), Router props can be briefly empty;\n * the real URL still has payTo / payAmountSats — read as fallback so Make Payment prefills survive.\n */\nfunction readPaymentsDeepLinkFromLocation() {\n try {\n if (typeof window === \'undefined\') return {};\n var sp = new URLSearchParams(window.location.search);\n return {\n payTo: String(sp.get(\'payTo\') || \'\').trim(),\n payAmountSats: sp.get(\'payAmountSats\'),\n bitcoinUri: String(sp.get(\'bitcoinUri\') || \'\').trim()\n };\n } catch (_) {\n return {};\n }\n}\n\n/**\n * Props + location → partial state for Make Payment (apply before async refresh so fields are not blank while loading).\n * Prefer `window.location` over Router props so stripping query after a successful send is visible immediately\n * (Router props can lag one frame behind `setSearchParams`).\n * @param {object} props - includes payToFromQuery, payAmountSatsFromQuery, bitcoinUriFromQuery\n * @returns {Record}\n */\nfunction computeMakePaymentDeepLinkPatch(props) {\n var loc = readPaymentsDeepLinkFromLocation();\n var qBitcoinUri = String(loc.bitcoinUri || \'\').trim() || String(props && props.bitcoinUriFromQuery || \'\').trim();\n var qTo = String(loc.payTo || \'\').trim() || String(props && props.payToFromQuery || \'\').trim();\n var rawAmtProp = props && props.payAmountSatsFromQuery;\n var qAmtRaw = loc.payAmountSats != null && String(loc.payAmountSats).trim() !== \'\' ? loc.payAmountSats : rawAmtProp;\n var qAmtStr = qAmtRaw != null && String(qAmtRaw).trim() && Number.isFinite(Number(qAmtRaw)) && Number(qAmtRaw) > 0 ? String(Math.round(Number(qAmtRaw))) : \'\';\n var patch = {};\n if (qBitcoinUri) {\n patch.to = qBitcoinUri;\n patch.lightningInvoice = \'\';\n patch.decodedInvoice = null;\n } else if (qTo) {\n patch.to = qTo;\n patch.lightningInvoice = \'\';\n patch.decodedInvoice = null;\n }\n if (qAmtStr && !qBitcoinUri) {\n patch.amountSats = qAmtStr;\n }\n return patch;\n}\n\n/** Monospace deposit-session table for Payjoin receiver operations. */\nfunction buildPayjoinSessionAscii(sessions) {\n var list = Array.isArray(sessions) ? sessions : [];\n var head = \'OFFER_ID AMNT_SATS STATUS ADDR N_PROP EXPIRES\';\n var sep = \'--------------------------------------------------------------------------------\';\n var lines = [head, sep];\n for (var i = 0; i < Math.min(list.length, 16); i++) {\n var s = list[i] || {};\n var oid = String(s.id || \'-\').replace(/\\s+/g, \' \').slice(0, 14).padEnd(14);\n var amt = s.amountSats != null && Number(s.amountSats) > 0 ? String(Math.round(Number(s.amountSats))) : \'any\';\n var amtf = amt.slice(0, 10).padStart(10);\n var st = String(s.status || \'-\').slice(0, 10).padEnd(10);\n var ad = String(s.address || \'-\').slice(0, 18).padEnd(18);\n var n = Array.isArray(s.proposals) ? s.proposals.length : 0;\n var ex = \'-\';\n try {\n if (s.expiresAt) {\n var d = new Date(s.expiresAt);\n if (!Number.isNaN(d.getTime())) ex = d.toISOString().slice(5, 16).replace(\'T\', \' \');\n }\n } catch (e) {}\n ex = String(ex).slice(0, 11).padEnd(11);\n lines.push("".concat(oid, " ").concat(amtf, " ").concat(st, " ").concat(ad, " ").concat(String(n).padStart(4), " ").concat(ex));\n }\n if (list.length === 0) {\n lines.push(\'(no deposit sessions — use Request Payment above or POST /services/payjoin/sessions)\');\n }\n return lines.join(\'\\n\');\n}\nvar BitcoinPaymentsHome = /*#__PURE__*/function (_React$Component) {\n function BitcoinPaymentsHome(props) {\n var _this;\n _classCallCheck(this, BitcoinPaymentsHome);\n _this = _callSuper(this, BitcoinPaymentsHome, [props]);\n _defineProperty(_this, "_onPaymentsHashChange", function () {\n _this._syncPaymentsHashScroll();\n });\n var pjPref = loadPayjoinPreferences();\n _this.state = {\n loading: true,\n error: null,\n upstream: loadUpstreamSettings(),\n wallet: null,\n summary: {},\n receiveAddress: \'\',\n utxos: [],\n payments: [],\n to: \'\',\n amountSats: \'\',\n memo: \'\',\n result: null,\n payjoinSessions: [],\n payjoinSessionId: \'\',\n payjoinPsbt: \'\',\n payjoinResult: null,\n transactions: [],\n scanModalOpen: false,\n lightningInvoice: \'\',\n decodedInvoice: null,\n payjoinCapabilities: {\n available: false\n },\n payjoinPreferReceive: !!pjPref.paymentsReceive,\n payjoinPreferSend: !!pjPref.paymentsSend,\n payjoinReceiveUseJoinmarket: pjPref.receiveTaprootJoinmarket !== false,\n receivePayjoinAmountSats: \'\',\n payjoinReceiveBusy: false,\n payjoinReceiveResult: null,\n localPayjoinBusy: false,\n localPayjoinResult: null,\n acpPayjoinBusy: false,\n acpPayjoinResult: null,\n lightningSummary: {},\n lightningChannels: [],\n lightningOutputs: [],\n recordFederationPayment: false\n };\n return _this;\n }\n\n /** Compute Lightning managed funds from listfunds outputs. */\n _inherits(BitcoinPaymentsHome, _React$Component);\n return _createClass(BitcoinPaymentsHome, [{\n key: "getLightningBalanceFromOutputs",\n value: function getLightningBalanceFromOutputs() {\n var outputs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var confirmed = 0;\n var unconfirmed = 0;\n var immature = 0;\n var _iterator = _createForOfIteratorHelper(outputs),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var o = _step.value;\n var sats = o && o.amount_msat != null ? Math.floor(Number(o.amount_msat) / 1000) : o && o.amount_sat != null ? Number(o.amount_sat) : 0;\n var status = String(o && o.status || \'\').toLowerCase();\n if (status === \'confirmed\') confirmed += sats;else if (status === \'immature\') immature += sats;else if (status === \'spent\') {\n // ignore\n } else {\n unconfirmed += sats;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return {\n confirmed: confirmed,\n unconfirmed: unconfirmed,\n immature: immature\n };\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n this.refresh();\n var sid = String(this.props && this.props.payjoinSessionFromQuery || \'\').trim();\n if (sid) this.setState({\n payjoinSessionId: sid\n });\n this._syncPaymentsHashScroll();\n if (typeof window !== \'undefined\') {\n window.addEventListener(\'hashchange\', this._onPaymentsHashChange);\n }\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n if (typeof window !== \'undefined\') {\n window.removeEventListener(\'hashchange\', this._onPaymentsHashChange);\n }\n }\n }, {\n key: "componentDidUpdate",\n value: function componentDidUpdate(prevProps, prevState) {\n var prev = prevProps && prevProps.identity && prevProps.identity.xpub;\n var next = this.props && this.props.identity && this.props.identity.xpub;\n var identityWalletChanged = prev !== next;\n var pq = String(prevProps && prevProps.payjoinSessionFromQuery || \'\').trim();\n var nq = String(this.props && this.props.payjoinSessionFromQuery || \'\').trim();\n if (nq && nq !== pq) this.setState({\n payjoinSessionId: nq\n });\n var pPay = String(prevProps && prevProps.payToFromQuery || \'\').trim();\n var nPay = String(this.props && this.props.payToFromQuery || \'\').trim();\n var pAmt = prevProps && prevProps.payAmountSatsFromQuery;\n var nAmt = this.props && this.props.payAmountSatsFromQuery;\n var pBc = String(prevProps && prevProps.bitcoinUriFromQuery || \'\').trim();\n var nBc = String(this.props && this.props.bitcoinUriFromQuery || \'\').trim();\n var queryChanged = nPay !== pPay || nAmt !== pAmt || nBc !== pBc;\n if (identityWalletChanged || queryChanged) this.refresh();\n if (prevState.loading && !this.state.loading) {\n this._syncPaymentsHashScroll();\n }\n }\n\n /** Scroll to hash targets after navigation (SPA + new tab with #fragment). */\n }, {\n key: "_syncPaymentsHashScroll",\n value: function _syncPaymentsHashScroll() {\n if (typeof window === \'undefined\') return;\n var raw = (window.location.hash || \'\').replace(/^#/, \'\');\n if (!raw) return;\n requestAnimationFrame(function () {\n if (raw === \'wealth-payjoin-board\') {\n var _el = document.getElementById(\'wealth-payjoin-board\');\n if (_el) _el.scrollIntoView({\n behavior: \'smooth\',\n block: \'start\'\n });\n return;\n }\n var el = document.getElementById(raw);\n if (el) el.scrollIntoView({\n behavior: \'smooth\',\n block: \'start\'\n });\n });\n }\n }, {\n key: "refresh",\n value: function () {\n var _refresh = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var identity, wallet, nextReceive, upstream, network, deepLinkPatch, _yield$Promise$all, _yield$Promise$all2, summary, address, utxos, payments, payjoinSessions, transactions, payjoinCapabilities, lightningSummary, lightningChannels, invLabels, txRows, lightningChannelsList, lightningOutputsList, nextState, loc, qBitcoinUri, qTo, rawAmtProp, qAmtRaw, qAmtStr, prevBc, prevPayTo, prevPayAmt, curTo, _curTo, curAmt, pj, bu, amountStr, amountBtc, finalAmt, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n identity = this.props && this.props.identity || {};\n wallet = getSpendWalletContext(identity);\n nextReceive = getNextReceiveWalletContext(identity);\n upstream = _objectSpread(_objectSpread({}, this.state.upstream), {}, {\n hubAdminToken: readHubAdminTokenFromBrowser(this.props && this.props.adminToken) || \'\'\n });\n network = this.props.bitcoin && this.props.bitcoin.network ? String(this.props.bitcoin.network).toLowerCase() : \'regtest\';\n deepLinkPatch = computeMakePaymentDeepLinkPatch(this.props);\n this.setState(_objectSpread({\n loading: true,\n error: null,\n wallet: wallet\n }, deepLinkPatch));\n _context.p = 1;\n _context.n = 2;\n return Promise.all([fetchWalletSummary(upstream, wallet, {\n network: network\n })["catch"](function () {\n return {};\n }), fetchReceiveAddress(upstream, nextReceive, {\n network: network,\n identity: identity\n })["catch"](function () {\n return \'\';\n }), fetchUTXOs(upstream, wallet, {\n network: network\n })["catch"](function () {\n return [];\n }), fetchPayments(upstream, wallet, {\n limit: 50,\n network: network\n })["catch"](function () {\n return [];\n }), fetchPayjoinSessions(upstream, {\n limit: 50,\n includeExpired: true\n })["catch"](function () {\n return [];\n }), fetchWalletTransactions(upstream, wallet, {\n limit: 50,\n network: network\n })["catch"](function () {\n return [];\n }), fetchPayjoinCapabilities(upstream)["catch"](function () {\n return {\n available: false\n };\n }), fetchLightningStatus(upstream)["catch"](function () {\n return {};\n }), fetchLightningChannels(upstream)["catch"](function () {\n return [];\n })]);\n case 2:\n _yield$Promise$all = _context.v;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 9);\n summary = _yield$Promise$all2[0];\n address = _yield$Promise$all2[1];\n utxos = _yield$Promise$all2[2];\n payments = _yield$Promise$all2[3];\n payjoinSessions = _yield$Promise$all2[4];\n transactions = _yield$Promise$all2[5];\n payjoinCapabilities = _yield$Promise$all2[6];\n lightningSummary = _yield$Promise$all2[7];\n lightningChannels = _yield$Promise$all2[8];\n invLabels = txContractLabels.buildInvoiceTxLabels(invoiceStore.loadInvoices());\n txRows = Array.isArray(transactions) ? txContractLabels.mergeServerAndLocalLabels(transactions, invLabels) : [];\n lightningChannelsList = Array.isArray(lightningChannels) ? lightningChannels : lightningChannels && Array.isArray(lightningChannels.channels) ? lightningChannels.channels : [];\n lightningOutputsList = lightningChannels && Array.isArray(lightningChannels.outputs) ? lightningChannels.outputs : [];\n nextState = {\n loading: false,\n summary: summary,\n receiveAddress: address || \'\',\n utxos: Array.isArray(utxos) ? utxos : [],\n payments: Array.isArray(payments) ? payments : [],\n payjoinSessions: Array.isArray(payjoinSessions) ? payjoinSessions : [],\n transactions: txRows,\n payjoinCapabilities: payjoinCapabilities && _typeof(payjoinCapabilities) === \'object\' ? payjoinCapabilities : {\n available: false\n },\n lightningSummary: lightningSummary && _typeof(lightningSummary) === \'object\' ? lightningSummary : {},\n lightningChannels: lightningChannelsList,\n lightningOutputs: lightningOutputsList\n };\n loc = readPaymentsDeepLinkFromLocation();\n qBitcoinUri = String(loc.bitcoinUri || \'\').trim() || String(this.props && this.props.bitcoinUriFromQuery || \'\').trim();\n qTo = String(loc.payTo || \'\').trim() || String(this.props && this.props.payToFromQuery || \'\').trim();\n rawAmtProp = this.props && this.props.payAmountSatsFromQuery;\n qAmtRaw = loc.payAmountSats != null && String(loc.payAmountSats).trim() !== \'\' ? loc.payAmountSats : rawAmtProp;\n qAmtStr = qAmtRaw != null && String(qAmtRaw).trim() && Number.isFinite(Number(qAmtRaw)) && Number(qAmtRaw) > 0 ? String(Math.round(Number(qAmtRaw))) : \'\';\n prevBc = this._lastBitcoinUriApplied !== undefined && this._lastBitcoinUriApplied != null ? String(this._lastBitcoinUriApplied).trim() : \'\';\n prevPayTo = this._lastPayToApplied !== undefined && this._lastPayToApplied !== null ? String(this._lastPayToApplied).trim() : \'\';\n prevPayAmt = this._lastPayAmtApplied !== undefined && this._lastPayAmtApplied !== null ? String(this._lastPayAmtApplied).trim() : \'\';\n if (prevBc && !qBitcoinUri) {\n curTo = String(this.state.to || \'\').trim();\n if (curTo === prevBc) {\n nextState.to = \'\';\n nextState.lightningInvoice = \'\';\n nextState.decodedInvoice = null;\n }\n }\n if (prevPayTo && !qTo && !qBitcoinUri) {\n _curTo = String(this.state.to || \'\').trim();\n if (_curTo === prevPayTo) {\n nextState.to = \'\';\n nextState.lightningInvoice = \'\';\n nextState.decodedInvoice = null;\n }\n }\n if (prevPayAmt && !qAmtStr && !qBitcoinUri) {\n curAmt = String(this.state.amountSats || \'\').trim();\n if (curAmt === prevPayAmt) {\n nextState.amountSats = \'\';\n }\n }\n if (qBitcoinUri) {\n nextState.to = qBitcoinUri;\n nextState.lightningInvoice = \'\';\n nextState.decodedInvoice = null;\n pj = parseBitcoinUriForPayjoin(qBitcoinUri);\n if (pj && pj.amountSats != null && Number(pj.amountSats) > 0) {\n nextState.amountSats = String(Math.round(Number(pj.amountSats)));\n } else {\n try {\n bu = new URL(qBitcoinUri);\n if (bu.protocol === \'bitcoin:\') {\n amountStr = bu.searchParams.get(\'amount\');\n amountBtc = amountStr != null ? Number(amountStr) : NaN;\n if (Number.isFinite(amountBtc) && amountBtc > 0) {\n nextState.amountSats = String(Math.round(amountBtc * SATS_PER_BTC));\n }\n }\n } catch (_) {/* ignore */}\n }\n } else if (qTo) {\n nextState.to = qTo;\n nextState.lightningInvoice = \'\';\n nextState.decodedInvoice = null;\n }\n if (qAmtStr && !qBitcoinUri) {\n nextState.amountSats = qAmtStr;\n }\n this._lastBitcoinUriApplied = qBitcoinUri;\n this._lastPayToApplied = qTo;\n this._lastPayAmtApplied = qAmtStr;\n /* Regtest: prefill amount once so L1 send isn’t stuck disabled behind an empty number field (placeholder ≠ value). */\n if (network === \'regtest\' && !this._regtestSendAmountPrimed) {\n this._regtestSendAmountPrimed = true;\n finalAmt = String(nextState.amountSats != null ? nextState.amountSats : this.state.amountSats || \'\').trim();\n if (!finalAmt) nextState.amountSats = \'10000\';\n }\n this.setState(nextState, function () {\n if (typeof window === \'undefined\') return;\n var balanceSats = Number(summary.balanceSats != null ? summary.balanceSats : summary.balance || 0);\n var confirmedSats = Number(summary.confirmedSats != null ? summary.confirmedSats : balanceSats);\n var unconfirmedSats = Number(summary.unconfirmedSats || 0);\n if (Number.isFinite(balanceSats)) {\n window.dispatchEvent(new CustomEvent(\'clientBalanceUpdate\', {\n detail: {\n walletId: wallet.walletId,\n balanceSats: balanceSats,\n confirmedSats: confirmedSats,\n unconfirmedSats: unconfirmedSats\n }\n }));\n }\n });\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n this.setState({\n loading: false,\n error: _t && _t.message ? _t.message : String(_t)\n });\n case 4:\n return _context.a(2);\n }\n }, _callee, this, [[1, 3]]);\n }));\n function refresh() {\n return _refresh.apply(this, arguments);\n }\n return refresh;\n }()\n }, {\n key: "handleSend",\n value: function () {\n var _handleSend = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var wallet, to, amountSats, adminToken, memo, result, paidTxid, paid, sp, changed, _i, _arr, k, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n wallet = this.state.wallet || {};\n to = String(this.state.to || \'\').trim();\n amountSats = Number(this.state.amountSats || 0);\n if (to) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2, this.setState({\n result: {\n error: \'Recipient address is required.\'\n }\n }));\n case 1:\n if (!(!Number.isFinite(amountSats) || amountSats <= 0)) {\n _context2.n = 2;\n break;\n }\n return _context2.a(2, this.setState({\n result: {\n error: \'Amount must be > 0 sats.\'\n }\n }));\n case 2:\n adminToken = this._adminTokenForBroadcast();\n if (adminToken) {\n _context2.n = 3;\n break;\n }\n return _context2.a(2, this.setState({\n result: {\n error: \'Admin token required. Payments from this screen spend the Hub node wallet; paste your setup token in local storage (fabric.hub.adminToken) or complete first-time setup.\'\n }\n }));\n case 3:\n _context2.p = 3;\n memo = mergePaymentMemoWithFederation(this.state.memo, loadFederationSpendingPrefs(), !!this.state.recordFederationPayment);\n _context2.n = 4;\n return sendPayment(this.state.upstream, wallet, {\n to: to,\n amountSats: amountSats,\n memo: memo,\n adminToken: adminToken\n });\n case 4:\n result = _context2.v;\n paidTxid = result && result.payment && result.payment.txid || result && result.txid;\n paid = !!paidTxid;\n if (paid && typeof window !== \'undefined\') {\n window.dispatchEvent(new CustomEvent(\'clientBalanceUpdate\'));\n }\n if (paid && typeof this.props.paymentsSetSearchParams === \'function\') {\n try {\n sp = new URLSearchParams(typeof window !== \'undefined\' ? window.location.search : \'\');\n changed = false;\n for (_i = 0, _arr = [\'payTo\', \'payAmountSats\', \'bitcoinUri\']; _i < _arr.length; _i++) {\n k = _arr[_i];\n if (sp.has(k)) {\n sp["delete"](k);\n changed = true;\n }\n }\n if (changed) this.props.paymentsSetSearchParams(sp, {\n replace: true\n });\n } catch (_) {/* ignore */}\n }\n this.setState({\n result: result,\n amountSats: \'\',\n memo: \'\'\n });\n _context2.n = 5;\n return this.refresh();\n case 5:\n _context2.n = 7;\n break;\n case 6:\n _context2.p = 6;\n _t2 = _context2.v;\n this.setState({\n result: {\n error: _t2 && _t2.message ? _t2.message : String(_t2)\n }\n });\n case 7:\n return _context2.a(2);\n }\n }, _callee2, this, [[3, 6]]);\n }));\n function handleSend() {\n return _handleSend.apply(this, arguments);\n }\n return handleSend;\n }()\n }, {\n key: "handleNextReceiveAddress",\n value: function handleNextReceiveAddress() {\n var network = this.props.bitcoin && this.props.bitcoin.network ? String(this.props.bitcoin.network).toLowerCase() : \'regtest\';\n var id = this.props && this.props.identity || {};\n var receiveWallet = getNextReceiveWalletContext(id);\n var next = reserveNextReceiveAddress(receiveWallet, {\n network: network,\n identity: id\n });\n if (!next || !next.currentAddress) return;\n this.setState({\n receiveAddress: next.currentAddress\n });\n }\n }, {\n key: "handleCopyAddress",\n value: function handleCopyAddress() {\n var addr = this.state.receiveAddress;\n if (!addr) return;\n try {\n if (typeof navigator !== \'undefined\' && navigator.clipboard && navigator.clipboard.writeText) {\n navigator.clipboard.writeText(addr);\n }\n } catch (e) {}\n }\n }, {\n key: "isLightningInvoice",\n value: function isLightningInvoice(text) {\n var s = String(text || \'\').trim();\n return s.startsWith(\'lnbc\') || s.startsWith(\'lntb\') || s.startsWith(\'lnbcrt\');\n }\n }, {\n key: "handleScanResult",\n value: function handleScanResult(decodedText) {\n var text = String(decodedText || \'\').trim();\n if (!text) return;\n this.setState({\n scanModalOpen: false\n });\n if (this.isLightningInvoice(text)) {\n this.setState({\n lightningInvoice: text,\n to: \'\',\n amountSats: \'\'\n });\n this.handleDecodeInvoice(text);\n } else {\n this.setState({\n to: text,\n lightningInvoice: \'\',\n decodedInvoice: null\n });\n }\n }\n }, {\n key: "handleDecodeInvoice",\n value: function () {\n var _handleDecodeInvoice = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(invoice) {\n var inv, _ref, _d$num_satoshis, decoded, d, amountSats, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n inv = String(invoice || this.state.lightningInvoice || \'\').trim();\n if (inv) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n _context3.p = 1;\n _context3.n = 2;\n return decodeLightningInvoice(this.state.upstream, inv);\n case 2:\n decoded = _context3.v;\n d = decoded && (decoded.decoded || decoded);\n amountSats = d && ((_ref = (_d$num_satoshis = d.num_satoshis) !== null && _d$num_satoshis !== void 0 ? _d$num_satoshis : d.numSatoshis) !== null && _ref !== void 0 ? _ref : d.amount);\n this.setState({\n decodedInvoice: d,\n amountSats: amountSats != null ? String(amountSats) : this.state.amountSats\n });\n _context3.n = 4;\n break;\n case 3:\n _context3.p = 3;\n _t3 = _context3.v;\n this.setState({\n decodedInvoice: null\n });\n case 4:\n return _context3.a(2);\n }\n }, _callee3, this, [[1, 3]]);\n }));\n function handleDecodeInvoice(_x) {\n return _handleDecodeInvoice.apply(this, arguments);\n }\n return handleDecodeInvoice;\n }()\n }, {\n key: "isLikelyPayjoinBip21",\n value: function isLikelyPayjoinBip21(text) {\n var s = String(text || \'\').trim();\n var lower = s.toLowerCase();\n if (!lower.startsWith(\'bitcoin:\')) return false;\n return /[?&]pj=/.test(s) || lower.includes(\'pj=\');\n }\n }, {\n key: "handleCreatePayjoinReceiveLink",\n value: function () {\n var _handleCreatePayjoinReceiveLink = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var useJm, addr, id, receiveWallet, session, sid, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n useJm = !!this.state.payjoinReceiveUseJoinmarket;\n addr = String(this.state.receiveAddress || \'\').trim();\n if (!(!useJm && !addr)) {\n _context4.n = 1;\n break;\n }\n id = this.props && this.props.identity || {};\n this.setState({\n payjoinReceiveResult: {\n error: "Receive address is required. ".concat(fabricIdentityNeedFullKeyPlain(id), " Or refresh.")\n }\n });\n return _context4.a(2);\n case 1:\n this.setState({\n payjoinReceiveBusy: true,\n payjoinReceiveResult: null\n });\n _context4.p = 2;\n receiveWallet = getNextReceiveWalletContext(this.props && this.props.identity || {});\n _context4.n = 3;\n return createPayjoinDeposit(this.state.upstream, receiveWallet, _objectSpread(_objectSpread({}, useJm ? {\n receiveTemplate: \'joinmarket_taproot_v1\'\n } : {\n address: addr\n }), {}, {\n amountSats: Number(this.state.receivePayjoinAmountSats || 0),\n label: \'Payments receive\',\n memo: \'\'\n }));\n case 3:\n session = _context4.v;\n this.setState({\n payjoinReceiveResult: session,\n payjoinReceiveBusy: false\n });\n try {\n sid = String(session.id || \'\').trim();\n if (sid) {\n pushUiNotification({\n id: "payjoin-session-".concat(sid),\n kind: \'payjoin\',\n title: \'Payjoin receive link ready\',\n subtitle: session.amountSats ? "".concat(session.amountSats, " sats") : \'BIP21 + pj\',\n href: "/payments?payjoinSession=".concat(encodeURIComponent(sid)),\n copyText: session.bip21Uri || session.proposalURL || sid\n });\n }\n } catch (e) {/* ignore */}\n _context4.n = 4;\n return this.refresh();\n case 4:\n _context4.n = 6;\n break;\n case 5:\n _context4.p = 5;\n _t4 = _context4.v;\n this.setState({\n payjoinReceiveBusy: false,\n payjoinReceiveResult: {\n error: _t4 && _t4.message ? _t4.message : String(_t4)\n }\n });\n case 6:\n return _context4.a(2);\n }\n }, _callee4, this, [[2, 5]]);\n }));\n function handleCreatePayjoinReceiveLink() {\n return _handleCreatePayjoinReceiveLink.apply(this, arguments);\n }\n return handleCreatePayjoinReceiveLink;\n }()\n }, {\n key: "handlePayLightning",\n value: function () {\n var _handlePayLightning = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var invoice, result, _t5;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.p = _context5.n) {\n case 0:\n invoice = String(this.state.lightningInvoice || \'\').trim();\n if (invoice) {\n _context5.n = 1;\n break;\n }\n return _context5.a(2, this.setState({\n result: {\n error: \'Lightning invoice is required.\'\n }\n }));\n case 1:\n _context5.p = 1;\n _context5.n = 2;\n return payLightningInvoice(this.state.upstream, this.state.wallet || {}, invoice);\n case 2:\n result = _context5.v;\n this.setState({\n result: result && result.error ? result : {\n ok: true\n },\n lightningInvoice: \'\',\n decodedInvoice: null\n });\n _context5.n = 3;\n return this.refresh();\n case 3:\n _context5.n = 5;\n break;\n case 4:\n _context5.p = 4;\n _t5 = _context5.v;\n this.setState({\n result: {\n error: _t5 && _t5.message ? _t5.message : String(_t5)\n }\n });\n case 5:\n return _context5.a(2);\n }\n }, _callee5, this, [[1, 4]]);\n }));\n function handlePayLightning() {\n return _handlePayLightning.apply(this, arguments);\n }\n return handlePayLightning;\n }()\n }, {\n key: "_adminTokenForBroadcast",\n value: function _adminTokenForBroadcast() {\n return readHubAdminTokenFromBrowser(this.props && this.props.adminToken);\n }\n }, {\n key: "handleLocalPayjoinSend",\n value: function () {\n var _handleLocalPayjoinSend = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {\n var _this2 = this;\n var identity, w, xprv, xpub, parsed, sendAmountSats, payAddress, network, adminToken, utxos, maxChangeIdx, _iterator2, _step2, u, ci, changeIndex, changeAddress, getPrevTxHex, built, proposed, msg, isDesk, signedTwice, hex, out, txid, _t6, _t7;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.p = _context6.n) {\n case 0:\n identity = this.props && this.props.identity || {};\n w = this.state.wallet || getSpendWalletContext(identity);\n xprv = String(w.xprv || \'\').trim();\n xpub = String(w.xpub || \'\').trim();\n if (!(!xprv || !xpub)) {\n _context6.n = 1;\n break;\n }\n this.setState({\n localPayjoinResult: {\n error: "".concat(fabricIdentityNeedFullKeyPlain(identity), " Local Payjoin signing uses keys in this tab only \\u2014 they are not sent to the Hub.")\n }\n });\n return _context6.a(2);\n case 1:\n parsed = parseBitcoinUriForPayjoin(this.state.to);\n if (!(!parsed || !parsed.pjUrl)) {\n _context6.n = 2;\n break;\n }\n this.setState({\n localPayjoinResult: {\n error: \'Paste a bitcoin: URI that includes pj= (Payjoin endpoint).\'\n }\n });\n return _context6.a(2);\n case 2:\n sendAmountSats = parsed.amountSats != null ? parsed.amountSats : Math.round(Number(this.state.amountSats || 0));\n if (!(!Number.isFinite(sendAmountSats) || sendAmountSats <= 0)) {\n _context6.n = 3;\n break;\n }\n this.setState({\n localPayjoinResult: {\n error: \'Set an amount in the URI or in the Amount (sats) field.\'\n }\n });\n return _context6.a(2);\n case 3:\n payAddress = String(parsed.address || \'\').trim();\n if (payAddress) {\n _context6.n = 4;\n break;\n }\n this.setState({\n localPayjoinResult: {\n error: \'URI is missing the payee address.\'\n }\n });\n return _context6.a(2);\n case 4:\n network = this.props.bitcoin && this.props.bitcoin.network ? String(this.props.bitcoin.network).toLowerCase() : \'regtest\';\n adminToken = this._adminTokenForBroadcast();\n if (adminToken) {\n _context6.n = 5;\n break;\n }\n this.setState({\n localPayjoinResult: {\n error: \'Broadcasting requires the Hub admin token (setup token). The signed transaction is built locally; only the final hex is sent to your Hub for sendrawtransaction.\'\n }\n });\n return _context6.a(2);\n case 5:\n this.setState({\n localPayjoinBusy: true,\n localPayjoinResult: null\n });\n _context6.p = 6;\n utxos = Array.isArray(this.state.utxos) ? this.state.utxos : [];\n if (!(utxos.length === 0)) {\n _context6.n = 8;\n break;\n }\n _context6.n = 7;\n return fetchUTXOs(this.state.upstream, this.state.wallet || {}, {\n network: network\n });\n case 7:\n utxos = _context6.v;\n case 8:\n maxChangeIdx = -1;\n _iterator2 = _createForOfIteratorHelper(utxos);\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n u = _step2.value;\n ci = chainIndexFromDescriptor(u.desc);\n if (ci && ci.chain === 1) maxChangeIdx = Math.max(maxChangeIdx, ci.index);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n changeIndex = maxChangeIdx + 1;\n changeAddress = deriveAddressFromXpub(xpub, 1, changeIndex, network);\n if (changeAddress) {\n _context6.n = 9;\n break;\n }\n throw new Error(\'Could not derive a change address.\');\n case 9:\n getPrevTxHex = function getPrevTxHex(txid) {\n return fetchTransactionHex(_this2.state.upstream, txid);\n };\n _context6.n = 10;\n return buildOriginalSignedPayjoinPsbt({\n xprv: xprv,\n xpub: xpub,\n networkName: network,\n utxos: utxos,\n payAddress: payAddress,\n sendAmountSats: sendAmountSats,\n changeAddress: changeAddress,\n getPrevTxHex: getPrevTxHex\n });\n case 10:\n built = _context6.v;\n _context6.p = 11;\n _context6.n = 12;\n return postPayjoinProposalWithDesktopFallback(parsed.pjUrl, built.psbtBase64);\n case 12:\n proposed = _context6.v;\n _context6.n = 15;\n break;\n case 13:\n _context6.p = 13;\n _t6 = _context6.v;\n msg = _t6 && _t6.message ? _t6.message : String(_t6);\n isDesk = typeof window !== \'undefined\' && window.fabricDesktop && window.fabricDesktop.isDesktopShell;\n if (!(!isDesk && (/fetch/i.test(msg) || /Failed to fetch/i.test(msg) || /NetworkError/i.test(msg)))) {\n _context6.n = 14;\n break;\n }\n throw new Error("".concat(msg, " Browsers often block cross-origin Payjoin POST. Use the Fabric desktop app, or pay with an external wallet."));\n case 14:\n throw _t6;\n case 15:\n signedTwice = signOurPayjoinInputs(proposed, built.ourInputIndices, xprv, xpub, network);\n hex = finalizeAndExtractHex(signedTwice, network);\n _context6.n = 16;\n return broadcastRawTransaction(this.state.upstream, hex, {\n adminToken: adminToken\n });\n case 16:\n out = _context6.v;\n txid = out && (out.txid || out.result && out.result.txid);\n if (txid && typeof window !== \'undefined\') {\n window.dispatchEvent(new CustomEvent(\'clientBalanceUpdate\'));\n }\n this.setState({\n localPayjoinBusy: false,\n localPayjoinResult: {\n ok: true,\n txid: txid || null,\n raw: out\n }\n });\n _context6.n = 17;\n return this.refresh();\n case 17:\n _context6.n = 19;\n break;\n case 18:\n _context6.p = 18;\n _t7 = _context6.v;\n this.setState({\n localPayjoinBusy: false,\n localPayjoinResult: {\n error: _t7 && _t7.message ? _t7.message : String(_t7)\n }\n });\n case 19:\n return _context6.a(2);\n }\n }, _callee6, this, [[11, 13], [6, 18]]);\n }));\n function handleLocalPayjoinSend() {\n return _handleLocalPayjoinSend.apply(this, arguments);\n }\n return handleLocalPayjoinSend;\n }()\n /**\n * Fabric Payjoin deposit URI + SIGHASH_ALL|ANYONECANPAY + Hub wallet co-input (admin).\n * BIP21 `pj=` must target this Hub’s `/services/payjoin/sessions//proposals`.\n */\n }, {\n key: "handleAcpHubBoostPayjoin",\n value: (function () {\n var _handleAcpHubBoostPayjoin = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {\n var _this3 = this;\n var identity, w, xprv, xpub, parsed, sessionId, sendAmountSats, payAddress, network, adminToken, utxos, maxChangeIdx, _iterator3, _step3, u, ci, changeIndex, changeAddress, getPrevTxHex, built, boosted, msg, hex, out, txid, _t8;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.p = _context7.n) {\n case 0:\n identity = this.props && this.props.identity || {};\n w = this.state.wallet || getSpendWalletContext(identity);\n xprv = String(w.xprv || \'\').trim();\n xpub = String(w.xpub || \'\').trim();\n if (!(!xprv || !xpub)) {\n _context7.n = 1;\n break;\n }\n this.setState({\n acpPayjoinResult: {\n error: "".concat(fabricIdentityNeedFullKeyPlain(identity), " xprv never leaves the browser.")\n }\n });\n return _context7.a(2);\n case 1:\n parsed = parseBitcoinUriForPayjoin(this.state.to);\n if (!(!parsed || !parsed.pjUrl)) {\n _context7.n = 2;\n break;\n }\n this.setState({\n acpPayjoinResult: {\n error: \'Paste a bitcoin: URI that includes pj=.\'\n }\n });\n return _context7.a(2);\n case 2:\n sessionId = extractFabricPayjoinSessionIdFromPjUrl(parsed.pjUrl);\n if (sessionId) {\n _context7.n = 3;\n break;\n }\n this.setState({\n acpPayjoinResult: {\n error: \'For this flow, pj= must be this Hub’s payjoin proposals URL (…/payjoin/sessions//proposals). Create a session under Request Payment and paste its BIP21 URI.\'\n }\n });\n return _context7.a(2);\n case 3:\n sendAmountSats = parsed.amountSats != null ? parsed.amountSats : Math.round(Number(this.state.amountSats || 0));\n if (!(!Number.isFinite(sendAmountSats) || sendAmountSats <= 0)) {\n _context7.n = 4;\n break;\n }\n this.setState({\n acpPayjoinResult: {\n error: \'Set an amount in the URI or Amount (sats).\'\n }\n });\n return _context7.a(2);\n case 4:\n payAddress = String(parsed.address || \'\').trim();\n if (payAddress) {\n _context7.n = 5;\n break;\n }\n this.setState({\n acpPayjoinResult: {\n error: \'URI is missing the payee address.\'\n }\n });\n return _context7.a(2);\n case 5:\n network = this.props.bitcoin && this.props.bitcoin.network ? String(this.props.bitcoin.network).toLowerCase() : \'regtest\';\n adminToken = this._adminTokenForBroadcast();\n if (adminToken) {\n _context7.n = 6;\n break;\n }\n this.setState({\n acpPayjoinResult: {\n error: \'Admin token required: Hub signs an extra wallet input and you broadcast via the Hub.\'\n }\n });\n return _context7.a(2);\n case 6:\n this.setState({\n acpPayjoinBusy: true,\n acpPayjoinResult: null\n });\n _context7.p = 7;\n utxos = Array.isArray(this.state.utxos) ? this.state.utxos : [];\n if (!(utxos.length === 0)) {\n _context7.n = 9;\n break;\n }\n _context7.n = 8;\n return fetchUTXOs(this.state.upstream, this.state.wallet || {}, {\n network: network\n });\n case 8:\n utxos = _context7.v;\n case 9:\n maxChangeIdx = -1;\n _iterator3 = _createForOfIteratorHelper(utxos);\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n u = _step3.value;\n ci = chainIndexFromDescriptor(u.desc);\n if (ci && ci.chain === 1) maxChangeIdx = Math.max(maxChangeIdx, ci.index);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n changeIndex = maxChangeIdx + 1;\n changeAddress = deriveAddressFromXpub(xpub, 1, changeIndex, network);\n if (changeAddress) {\n _context7.n = 10;\n break;\n }\n throw new Error(\'Could not derive a change address.\');\n case 10:\n getPrevTxHex = function getPrevTxHex(txid) {\n return fetchTransactionHex(_this3.state.upstream, txid);\n };\n _context7.n = 11;\n return buildOriginalSignedPayjoinPsbt({\n xprv: xprv,\n xpub: xpub,\n networkName: network,\n utxos: utxos,\n payAddress: payAddress,\n sendAmountSats: sendAmountSats,\n changeAddress: changeAddress,\n getPrevTxHex: getPrevTxHex,\n anyoneCanPayAll: true\n });\n case 11:\n built = _context7.v;\n _context7.n = 12;\n return submitPayjoinProposal(this.state.upstream, sessionId, {\n psbt: built.psbtBase64\n });\n case 12:\n _context7.n = 13;\n return applyPayjoinAcpHubBoost(this.state.upstream, sessionId, adminToken, {\n psbt: built.psbtBase64\n });\n case 13:\n boosted = _context7.v;\n if (!(!boosted || boosted.status !== \'success\' || !boosted.psbtBase64)) {\n _context7.n = 14;\n break;\n }\n msg = boosted && (boosted.message || boosted.error) || \'ACP Hub boost failed\';\n throw new Error(safeBriefMessage(msg, \'ACP Hub boost failed\'));\n case 14:\n hex = finalizeAndExtractHex(boosted.psbtBase64, network);\n _context7.n = 15;\n return broadcastRawTransaction(this.state.upstream, hex, {\n adminToken: adminToken\n });\n case 15:\n out = _context7.v;\n txid = out && (out.txid || out.result && out.result.txid);\n if (txid && typeof window !== \'undefined\') {\n window.dispatchEvent(new CustomEvent(\'clientBalanceUpdate\'));\n }\n this.setState({\n acpPayjoinBusy: false,\n acpPayjoinResult: {\n ok: true,\n txid: txid || null,\n addedOutpoint: boosted.addedOutpoint,\n addedValueSats: boosted.addedValueSats,\n raw: out\n }\n });\n _context7.n = 16;\n return this.refresh();\n case 16:\n _context7.n = 18;\n break;\n case 17:\n _context7.p = 17;\n _t8 = _context7.v;\n this.setState({\n acpPayjoinBusy: false,\n acpPayjoinResult: {\n error: _t8 && _t8.message ? _t8.message : String(_t8)\n }\n });\n case 18:\n return _context7.a(2);\n }\n }, _callee7, this, [[7, 17]]);\n }));\n function handleAcpHubBoostPayjoin() {\n return _handleAcpHubBoostPayjoin.apply(this, arguments);\n }\n return handleAcpHubBoostPayjoin;\n }())\n }, {\n key: "handleSubmitPayjoinProposal",\n value: function () {\n var _handleSubmitPayjoinProposal = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {\n var sessionId, psbt, result, err, _t9;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.p = _context8.n) {\n case 0:\n sessionId = String(this.state.payjoinSessionId || \'\').trim();\n psbt = String(this.state.payjoinPsbt || \'\').trim();\n if (sessionId) {\n _context8.n = 1;\n break;\n }\n return _context8.a(2, this.setState({\n payjoinResult: {\n error: \'Payjoin session ID is required.\'\n }\n }));\n case 1:\n if (psbt) {\n _context8.n = 2;\n break;\n }\n return _context8.a(2, this.setState({\n payjoinResult: {\n error: \'PSBT is required for a Payjoin proposal.\'\n }\n }));\n case 2:\n _context8.p = 2;\n _context8.n = 3;\n return submitPayjoinProposal(this.state.upstream, sessionId, {\n psbt: psbt\n });\n case 3:\n result = _context8.v;\n this.setState({\n payjoinResult: result,\n payjoinPsbt: \'\'\n });\n try {\n err = result && (result.error || result.message);\n if (!err) {\n pushUiNotification({\n id: "payjoin-proposal-".concat(sessionId, "-").concat(Date.now()),\n kind: \'payjoin_proposal\',\n title: \'Payjoin proposal submitted\',\n subtitle: sessionId,\n href: "/payments?payjoinSession=".concat(encodeURIComponent(sessionId)),\n copyText: sessionId\n });\n }\n } catch (e) {/* ignore */}\n _context8.n = 4;\n return this.refresh();\n case 4:\n _context8.n = 6;\n break;\n case 5:\n _context8.p = 5;\n _t9 = _context8.v;\n this.setState({\n payjoinResult: {\n error: _t9 && _t9.message ? _t9.message : String(_t9)\n }\n });\n case 6:\n return _context8.a(2);\n }\n }, _callee8, this, [[2, 5]]);\n }));\n function handleSubmitPayjoinProposal() {\n return _handleSubmitPayjoinProposal.apply(this, arguments);\n }\n return handleSubmitPayjoinProposal;\n }()\n }, {\n key: "render",\n value: function render() {\n var _this4 = this,\n _ref2,\n _this$state$decodedIn;\n var transactionsOnly = !!(this.props && this.props.transactionsOnly);\n var wallet = this.state.wallet || {};\n var hasAdmin = !!readHubAdminTokenFromBrowser(this.props && this.props.adminToken);\n var summary = this.state.summary || {};\n var balanceSats = summary && Number.isFinite(summary.balanceSats) ? summary.balanceSats : summary && summary.summary && summary.summary.trusted != null ? Math.round(Number(summary.summary.trusted) * SATS_PER_BTC) : null;\n var balanceDisplay = balanceSats != null ? balanceSats >= SATS_PER_BTC ? "".concat((balanceSats / SATS_PER_BTC).toFixed(4), " BTC") : "".concat(formatSatsDisplay(balanceSats), " sats") : \'n/a\';\n var ln = this.state.lightningSummary || {};\n var lnChans = Array.isArray(this.state.lightningChannels) ? this.state.lightningChannels : [];\n var lnOutputs = Array.isArray(this.state.lightningOutputs) ? this.state.lightningOutputs : [];\n var lnManaged = this.getLightningBalanceFromOutputs(lnOutputs);\n var lnActive = !!(ln && (ln.available === true || ln.status === \'OK\' || ln.status === \'STUB\' || ln.status === \'RUNNING\'));\n var sendTo = String(this.state.to || \'\').trim();\n var sendAmt = Number(this.state.amountSats);\n var canSendOnChainBase = !this.state.lightningInvoice && sendTo.length > 0 && Number.isFinite(sendAmt) && sendAmt > 0;\n var canSendOnChain = canSendOnChainBase && hasAdmin;\n var hubBitcoin = this.props && this.props.bitcoin || {};\n var hubWalletSats = Number(hubBitcoin && hubBitcoin.balanceSats != null ? hubBitcoin.balanceSats : Math.round(Number(hubBitcoin && hubBitcoin.balance != null ? hubBitcoin.balance : 0) * SATS_PER_BTC));\n var sharedSessionSats = Number(lnManaged.confirmed || 0) + Number(lnManaged.unconfirmed || 0) + Number(lnManaged.immature || 0);\n var payjoinSessions = Array.isArray(this.state.payjoinSessions) ? this.state.payjoinSessions : [];\n var payjoinOpenCount = payjoinSessions.filter(function (s) {\n var status = String(s && s.status || \'\').toLowerCase();\n return status !== \'expired\' && status !== \'success\';\n }).length;\n var l1Height = hubBitcoin.available && hubBitcoin.height != null && Number.isFinite(Number(hubBitcoin.height)) ? Number(hubBitcoin.height) : null;\n var identityForWallet = this.props && this.props.identity || {};\n var walletCtx = getSpendWalletContext(identityForWallet);\n var btcWatchOnly = !!(walletCtx && walletCtx.xpub && !walletCtx.xprv);\n var extSigning = hasExternalSigningDelegation();\n return /*#__PURE__*/React.createElement("div", {\n className: "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, {\n loading: this.state.loading\n }, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "fabric-bitcoin-payments-h2",\n "aria-describedby": "fabric-bitcoin-payments-intro"\n }, /*#__PURE__*/React.createElement("div", {\n role: "banner",\n style: {\n position: \'sticky\',\n top: \'6.5rem\',\n zIndex: 12,\n background: \'#fff\',\n paddingBottom: \'0.35em\',\n marginBottom: \'0.25em\',\n boxShadow: \'0 1px 0 rgba(34, 36, 38, 0.15)\',\n scrollMarginTop: \'6.5rem\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexDirection: \'column\',\n alignItems: \'stretch\',\n gap: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small",\n "aria-label": "Back to Bitcoin dashboard",\n title: "Bitcoin home (status, wallet, explorer, and tools)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Bitcoin"), /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "fabric-bitcoin-payments-h2",\n style: {\n margin: 0,\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "credit card outline",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, transactionsOnly ? \'Transactions\' : \'Payments\'))), /*#__PURE__*/React.createElement("div", {\n role: "toolbar",\n "aria-label": "Related Bitcoin pages",\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.35em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/invoices#fabric-invoices-tab-demo",\n basic: true,\n size: "small",\n title: "Receiver tab and walkthrough"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate outline",\n "aria-hidden": "true"\n }), "Invoices"), !transactionsOnly ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/faucet",\n basic: true,\n size: "small",\n title: "Regtest: fund an address from the Hub wallet"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "tint",\n "aria-hidden": "true"\n }), "Faucet") : null, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/resources",\n basic: true,\n size: "small",\n title: "HTTP resources and L1 payment verification"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sitemap",\n "aria-hidden": "true"\n }), "Resources"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/crowdfunds",\n basic: true,\n size: "small",\n title: "Taproot campaign vault, ACP PSBT, Payjoin deposit to vault"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "heart outline",\n "aria-hidden": "true"\n }), "Crowdfunds")))), this.state.error && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n content: this.state.error\n }), !transactionsOnly ? /*#__PURE__*/React.createElement("div", {\n id: "fabric-bitcoin-payments-intro"\n }, /*#__PURE__*/React.createElement(Message, {\n info: true\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n color: \'#333\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Single Payjoin receiver & Lightning path")), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#555\'\n }\n }, "This Hub exposes one ", /*#__PURE__*/React.createElement("strong", null, "Payjoin"), " REST base under ", /*#__PURE__*/React.createElement("code", null, "/services/payjoin"), " (BIP78-shaped POST; ", /*#__PURE__*/React.createElement("code", null, "fabricProtocol.asyncPayjoinRoadmap"), " is BIP77; ", /*#__PURE__*/React.createElement("code", null, "/payments/payjoin"), " is an optional mirror). ", /*#__PURE__*/React.createElement("strong", null, "Lightning"), " uses the Hub\'s managed node. On-chain ", /*#__PURE__*/React.createElement("strong", null, "receive"), " and ", /*#__PURE__*/React.createElement("strong", null, "send"), " default to Payjoin-oriented flows below; turn either off with the toggles when you want a plain address or a simple broadcast."))) : null), /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Balance:"), " ", balanceDisplay, \' \', /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, "(Wallet: ", /*#__PURE__*/React.createElement("code", null, wallet.walletId ? "".concat(String(wallet.walletId).slice(0, 12), "\\u2026") : \'unavailable\'), ")")), !transactionsOnly ? /*#__PURE__*/React.createElement(BitcoinWalletBranchBar, {\n identity: this.props && this.props.identity || {}\n }) : null, !transactionsOnly && (extSigning || btcWatchOnly) && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n },\n id: "fabric-payments-key-safety"\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Keys and this screen"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#333\'\n }\n }, "Receive addresses and header balance use your Fabric identity ", /*#__PURE__*/React.createElement("strong", null, "xpub"), " (BIP44 account 0).", \' \', /*#__PURE__*/React.createElement("strong", null, "Make Payment"), " spends the ", /*#__PURE__*/React.createElement("strong", null, "Hub node wallet"), " with the setup admin token, not private keys stored in this browser. In-browser ", /*#__PURE__*/React.createElement("strong", null, "Payjoin"), " signing needs a fully unlocked local identity (xprv in this tab).", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/bitcoin-wallet"\n }, "Bitcoin wallet & derivation"), \' · \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/security"\n }, "Security & delegation"), " \\u2014 revoke desktop delegation on shared machines.")), !transactionsOnly ? /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n id: "fabric-payments-tab-demo",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Two-tab invoice payment (production walkthrough)"), /*#__PURE__*/React.createElement(List, {\n ordered: true,\n relaxed: true,\n style: {\n margin: \'0.35em 0 0\',\n color: \'#333\'\n }\n }, /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement("strong", null, "Regtest funds:"), " Fund the Hub wallet with ", /*#__PURE__*/React.createElement("strong", null, "Generate Block"), " on", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin#fabric-bitcoin-regtest-toolbar"\n }, "Bitcoin"), ". Optionally use", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/faucet"\n }, "Faucet"), \' \', "with ", /*#__PURE__*/React.createElement("strong", null, "Use my receive address"), " on Bitcoin (next external address on BIP44 account 0 under your identity). Header balance uses the same account."), /*#__PURE__*/React.createElement(List.Item, null, "Receiver tab:", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/invoices#fabric-invoices-tab-demo"\n }, "Invoices"), \' \', "(same walkthrough banner). Create an invoice; receives use BIP44 account ", /*#__PURE__*/React.createElement("strong", null, "0"), " under your Fabric identity."), /*#__PURE__*/React.createElement(List.Item, null, "With ", /*#__PURE__*/React.createElement("strong", null, "Open payer tab (prefilled)"), ", address and amount come from ", /*#__PURE__*/React.createElement("code", null, "payTo"), " / ", /*#__PURE__*/React.createElement("code", null, "payAmountSats"), " and the hash scrolls to Make Payment. Otherwise", \' \', /*#__PURE__*/React.createElement("a", {\n href: "#fabric-btc-make-payment-h4"\n }, "jump to Make Payment"), \' \', "and paste the invoice details (admin token required for Hub wallet broadcast)."), /*#__PURE__*/React.createElement(List.Item, null, "On the Invoices tab, use ", /*#__PURE__*/React.createElement("strong", null, "Confirm payment"), " with the txid on the invoice card, or verify via", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/resources"\n }, "Resources"), "."), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement("strong", null, "Documents:"), \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/documents"\n }, "Documents"), \' \', "\\u2014 ", /*#__PURE__*/React.createElement("strong", null, "Purchase"), " (HTLC) and ", /*#__PURE__*/React.createElement("strong", null, "Distribute"), " (storage contract) both settle on L1; the purchase modal accepts your paying txid or ", /*#__PURE__*/React.createElement("strong", null, "Pay from hub wallet"), " (admin token). Same verifier as above if you need txid + address + amount."), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement("strong", null, "Optional \\u2014 crowdfund:"), \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/crowdfunds"\n }, "Bitcoin \\u2192 Crowdfunds"), \' \', "creates a Taproot vault, copies an ACP outputs-only PSBT, or opens a Payjoin session that pays the vault (then pay here with the BIP21 link)."))) : null, !transactionsOnly ? /*#__PURE__*/React.createElement(HubRegtestAdminTokenPanel, {\n network: hubBitcoin && hubBitcoin.network || \'regtest\',\n adminTokenProp: this.props && this.props.adminToken\n }) : null, !transactionsOnly ? /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginBottom: \'1.25em\',\n background: \'linear-gradient(160deg, #1b1d22 0%, #252830 55%, #1e2229 100%)\',\n color: \'#e4e6eb\',\n border: \'1px solid #3d424d\',\n boxShadow: \'inset 0 1px 0 rgba(255,215,0,0.04)\'\n }\n }, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "fabric-bitcoin-wealth-stack-h3",\n "aria-describedby": "fabric-bitcoin-wealth-stack-summary"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "fabric-bitcoin-wealth-stack-h3",\n style: {\n color: \'#f0d060\',\n fontFamily: \'Georgia, "Times New Roman", serif\',\n fontWeight: 500,\n marginBottom: \'0.35em\'\n }\n }, "Bitcoin wealth stack"), /*#__PURE__*/React.createElement("p", {\n id: "fabric-bitcoin-wealth-stack-summary",\n style: {\n margin: \'0 0 0.85em\',\n opacity: 0.88,\n fontSize: \'0.92em\',\n lineHeight: 1.45\n }\n }, "Three rails for accumulating and routing value: ", /*#__PURE__*/React.createElement("strong", {\n style: {\n color: \'#9fd89f\'\n }\n }, "Fabric"), " contracts and document exchange,", \' \', "Payjoin deposit coordination (BIP78 HTTP + BIP21 ", /*#__PURE__*/React.createElement("code", null, "pj="), "; BIP77 async via ", /*#__PURE__*/React.createElement("code", null, "fabricProtocol"), " roadmap), and ", /*#__PURE__*/React.createElement("strong", {\n style: {\n color: \'#7ec8e8\'\n }\n }, "Lightning"), " channels on the Hub node. As the network grows, each rail can move real sats: documents tie to distribute / inventory flows; Payjoin sessions aggregate deposits; Lightning routes instant settlement."), l1Height != null && /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0 0 0.85em\',\n opacity: 0.92,\n fontSize: \'0.88em\',\n lineHeight: 1.45,\n color: \'#c8d0e0\'\n }\n }, /*#__PURE__*/React.createElement("strong", {\n style: {\n color: \'#f0d060\'\n }\n }, "L1 chain tip"), " (this Hub\'s ", /*#__PURE__*/React.createElement("code", null, "bitcoind"), "):", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin",\n style: {\n color: \'#8ecfff\'\n }\n }, "height ", l1Height.toLocaleString()), \' · \', "new tips appear in ", /*#__PURE__*/React.createElement("strong", null, "Activity"), " and are relayed to connected Fabric peers as a signed ", /*#__PURE__*/React.createElement("code", null, "BitcoinBlock"), " wire message."), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'grid\',\n gridTemplateColumns: \'repeat(auto-fit, minmax(200px, 1fr))\',\n gap: \'0.75rem\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n background: \'rgba(0,0,0,0.35)\',\n border: \'1px solid #3a4a3a\',\n borderRadius: 6,\n padding: \'0.65rem 0.75rem\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.7rem\',\n letterSpacing: \'0.12em\',\n color: \'#8fdf8f\',\n marginBottom: \'0.35em\'\n }\n }, "\\u2460 FABRIC"), /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.88em\'\n }\n }, "Contracts, publish / distribute, peer inventory."), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.35em\',\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/documents",\n size: "small",\n basic: true,\n inverted: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate outline"\n }), " Documents"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/contracts",\n size: "small",\n basic: true,\n inverted: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file code"\n }), " Contracts"))), /*#__PURE__*/React.createElement("div", {\n style: {\n background: \'rgba(0,0,0,0.35)\',\n border: \'1px solid #5a5a32\',\n borderRadius: 6,\n padding: \'0.65rem 0.75rem\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.7rem\',\n letterSpacing: \'0.12em\',\n color: \'#e8e070\',\n marginBottom: \'0.35em\'\n }\n }, "\\u2461 COORDINATION"), /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.88em\'\n }\n }, "Payjoin sessions with live receiver state and proposal activity."), /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.8em\',\n color: \'#aaa\',\n marginTop: \'0.35em\'\n }\n }, "Receiver: ", this.state.payjoinCapabilities && this.state.payjoinCapabilities.available ? /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "green",\n horizontal: true\n }, "up") : /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "grey",\n horizontal: true\n }, "down")), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/payments#wealth-payjoin-board",\n size: "small",\n basic: true,\n inverted: true,\n style: {\n marginTop: \'0.5em\'\n },\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield alternate"\n }), " Session board")), /*#__PURE__*/React.createElement("div", {\n style: {\n background: \'rgba(0,0,0,0.35)\',\n border: \'1px solid #2a4a5a\',\n borderRadius: 6,\n padding: \'0.65rem 0.75rem\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.7rem\',\n letterSpacing: \'0.12em\',\n color: \'#7ec8e8\',\n marginBottom: \'0.35em\'\n }\n }, "\\u2462 LIGHTNING"), /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.88em\'\n }\n }, lnActive ? /*#__PURE__*/React.createElement("span", null, "Hub LN \\xB7 ", /*#__PURE__*/React.createElement("strong", null, lnChans.length), " channel", lnChans.length === 1 ? \'\' : \'s\', " listed") : /*#__PURE__*/React.createElement("span", null, "LN status: ", /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, ln.status || \'n/a\'))), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n size: "small",\n basic: true,\n inverted: true,\n style: {\n marginTop: \'0.5em\'\n },\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt"\n }), " Bitcoin / LN"))))) : null, !transactionsOnly ? /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginBottom: \'1.25em\',\n borderColor: \'#d9e2f3\',\n background: \'#f8fbff\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n marginBottom: \'0.35em\'\n }\n }, "Deposits Under Management"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#4b5b73\',\n marginBottom: \'0.75em\',\n lineHeight: 1.45\n }\n }, "Non-admin users keep private keys in-browser. The Hub operator manages shared sessions (Payjoin receiver and Lightning/LSP channels) and may sign contract/session messages without taking custody of client keys."), /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n unstackable: true,\n size: "small",\n style: {\n marginBottom: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement(Table.Body, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n width: 6\n }, /*#__PURE__*/React.createElement("strong", null, "Client wallet (self-custody)")), /*#__PURE__*/React.createElement(Table.Cell, null, formatSatsDisplay(Number(balanceSats || 0)), " sats"), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n color: \'#666\'\n }\n }, "Keys stay with the user in this browser.")), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Hub wallet (operator)")), /*#__PURE__*/React.createElement(Table.Cell, null, formatSatsDisplay(hubWalletSats), " sats"), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n color: \'#666\'\n }\n }, "Hub node spend authority; admin token controls this surface.")), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Lightning managed liquidity")), /*#__PURE__*/React.createElement(Table.Cell, null, formatSatsDisplay(sharedSessionSats), " sats"), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n color: \'#666\'\n }\n }, "confirmed ", formatSatsDisplay(lnManaged.confirmed), " \\xB7 unconfirmed ", formatSatsDisplay(lnManaged.unconfirmed), " \\xB7 immature ", formatSatsDisplay(lnManaged.immature))), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Payjoin sessions (shared)")), /*#__PURE__*/React.createElement(Table.Cell, null, payjoinOpenCount, " open"), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n color: \'#666\'\n }\n }, payjoinSessions.length, " total sessions tracked.")))), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/lightning",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt"\n }), " Lightning channels"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/payments#wealth-payjoin-board",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield alternate"\n }), " Payjoin sessions"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings/bitcoin-wallet",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "key"\n }), " Wallet custody boundary"))) : null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "fabric-bitcoin-wallet-controls-h3"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "fabric-bitcoin-wallet-controls-h3",\n dividing: true\n }, "Wallet Controls"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'grid\',\n gridTemplateColumns: \'repeat(auto-fit, minmax(280px, 1fr))\',\n gap: \'1.5em\',\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "fabric-btc-request-payment-h4",\n "aria-describedby": "fabric-btc-request-payment-desc"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n id: "fabric-btc-request-payment-h4"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "qrcode",\n "aria-hidden": "true"\n }), "Request Payment"), /*#__PURE__*/React.createElement("p", {\n id: "fabric-btc-request-payment-desc",\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginBottom: \'0.5em\'\n }\n }, "Default: ", /*#__PURE__*/React.createElement("strong", null, "Joinmarket-style"), " Payjoin \\u2014 Hub mints a P2TR deposit (operator leaf + beacon federation reserve leaf);", \' \', /*#__PURE__*/React.createElement("code", null, "pj="), " and proposal POST follow BIP78-shaped sync semantics (see capabilities ", /*#__PURE__*/React.createElement("code", null, "fabricProtocol"), "). Use classic P2WPKH receive if you need the address line below."), /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement(Checkbox, {\n toggle: true,\n checked: !!this.state.payjoinPreferReceive,\n disabled: !(this.state.payjoinCapabilities && this.state.payjoinCapabilities.available),\n onChange: function onChange(e, data) {\n var v = !!(data && data.checked);\n savePayjoinPreferences({\n paymentsReceive: v\n });\n _this4.setState({\n payjoinPreferReceive: v\n });\n },\n label: "Use Payjoin for this receive (on by default)"\n })), /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement(Checkbox, {\n toggle: true,\n checked: !!this.state.payjoinReceiveUseJoinmarket,\n disabled: !(this.state.payjoinCapabilities && this.state.payjoinCapabilities.available),\n onChange: function onChange(e, data) {\n var v = !!(data && data.checked);\n savePayjoinPreferences({\n receiveTaprootJoinmarket: v\n });\n _this4.setState({\n payjoinReceiveUseJoinmarket: v,\n payjoinReceiveResult: null\n });\n },\n label: "Taproot Joinmarket-style receive (default \\u2014 federation leaf pluggable via hub env)"\n })), this.state.payjoinPreferReceive && this.state.payjoinCapabilities && this.state.payjoinCapabilities.available && /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Form.Input, {\n type: "number",\n min: "0",\n step: "1",\n label: "Optional amount (sats) for BIP21",\n placeholder: "0 = any amount",\n value: this.state.receivePayjoinAmountSats,\n onChange: function onChange(e) {\n return _this4.setState({\n receivePayjoinAmountSats: e.target.value,\n payjoinReceiveResult: null\n });\n }\n }), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n loading: this.state.payjoinReceiveBusy,\n disabled: !this.state.payjoinReceiveUseJoinmarket && !this.state.receiveAddress,\n onClick: function onClick() {\n return _this4.handleCreatePayjoinReceiveLink();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield alternate"\n }), "Create Payjoin receive (BIP21 + pj)"), this.state.payjoinReceiveResult && /*#__PURE__*/React.createElement(Message, {\n size: "small",\n style: {\n marginTop: \'0.5em\'\n },\n negative: !!this.state.payjoinReceiveResult.error,\n positive: !this.state.payjoinReceiveResult.error\n }, this.state.payjoinReceiveResult.error ? /*#__PURE__*/React.createElement("span", null, this.state.payjoinReceiveResult.error) : /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Session"), " ", /*#__PURE__*/React.createElement("code", null, this.state.payjoinReceiveResult.id)), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n type: "button",\n disabled: !this.state.payjoinReceiveResult.bip21Uri,\n onClick: function onClick() {\n return copyToClipboard(_this4.state.payjoinReceiveResult.bip21Uri || \'\');\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy outline"\n }), " Copy BIP21"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n size: "mini",\n primary: true,\n to: this.state.payjoinReceiveResult.id ? "/payments?payjoinSession=".concat(encodeURIComponent(this.state.payjoinReceiveResult.id)) : \'/payments\',\n style: {\n marginLeft: \'0.35em\'\n }\n }, "Open PSBT panel")))), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#888\',\n fontSize: \'0.85em\',\n marginBottom: \'0.35em\'\n }\n }, "Plain on-chain address"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n flex: \'1 1 200px\',\n wordBreak: \'break-all\',\n fontSize: \'0.85em\'\n },\n title: this.state.receiveAddress\n }, this.state.receiveAddress || \'—\'), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n icon: "copy",\n title: "Copy address",\n "aria-label": "Copy receive address",\n onClick: function onClick() {\n return _this4.handleCopyAddress();\n },\n disabled: !this.state.receiveAddress\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n icon: "refresh",\n title: "New address",\n "aria-label": "New receive address",\n onClick: function onClick() {\n return _this4.handleNextReceiveAddress();\n },\n disabled: !wallet.xpub\n })), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/invoices#fabric-invoices-tab-demo",\n basic: true,\n size: "small",\n style: {\n marginTop: \'0.5em\'\n },\n title: "Invoices walkthrough"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate outline"\n }), "Create Invoice"))), /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "fabric-btc-make-payment-h4",\n "aria-describedby": "fabric-btc-make-payment-desc"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n id: "fabric-btc-make-payment-h4"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "send",\n "aria-hidden": "true"\n }), "Make Payment"), /*#__PURE__*/React.createElement("div", {\n id: "fabric-btc-make-payment-desc"\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginBottom: \'0.5em\'\n }\n }, "On-chain send uses the ", /*#__PURE__*/React.createElement("strong", null, "Hub node wallet"), " (same as Bitcoin home \\u201CSend Payment\\u201D); your ", /*#__PURE__*/React.createElement("strong", null, "setup admin token"), " is required. For self-custody Payjoin, paste a ", /*#__PURE__*/React.createElement("code", null, "bitcoin:"), " URI with ", /*#__PURE__*/React.createElement("code", null, "pj="), " and use local signing when your identity is unlocked."), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginBottom: \'0.5em\'\n }\n }, "Send on-chain (default: prefer a ", /*#__PURE__*/React.createElement("code", null, "bitcoin:"), " URI that includes ", /*#__PURE__*/React.createElement("code", null, "pj="), " for Payjoin) or pay Lightning."), !hasAdmin ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginBottom: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Hub-wallet send is admin-gated"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "You can still use this page for receive/history, but ", /*#__PURE__*/React.createElement("strong", null, "Send On-Chain"), " requires the setup admin token. Open ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings/security"\n }, "Security & delegation"), " to confirm session identity, then add/refresh the admin token in settings.")) : null), /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement(Checkbox, {\n toggle: true,\n checked: !!this.state.payjoinPreferSend,\n onChange: function onChange(e, data) {\n var v = !!(data && data.checked);\n savePayjoinPreferences({\n paymentsSend: v\n });\n _this4.setState({\n payjoinPreferSend: v\n });\n },\n label: "Prefer Payjoin-compatible outgoing (on by default)"\n })), /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement(Checkbox, {\n checked: !!this.state.recordFederationPayment,\n onChange: function onChange(_, data) {\n return _this4.setState({\n recordFederationPayment: !!(data && data.checked)\n });\n },\n label: /*#__PURE__*/React.createElement("span", null, "Record as federation-related payment (append spending criteria from", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions?scope=wallet#fabric-federation-wallet-panel"\n }, "Wallet \\u2192 Federation"), ")")\n })), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Address or Lightning invoice"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n alignItems: \'flex-start\'\n }\n }, /*#__PURE__*/React.createElement(Form.Input, {\n placeholder: "bcrt1... or lnbc...",\n value: this.state.lightningInvoice || this.state.to,\n onChange: function onChange(e) {\n var v = e.target.value;\n if (!v) {\n _this4.setState({\n result: null,\n to: \'\',\n lightningInvoice: \'\',\n decodedInvoice: null\n });\n } else if (_this4.isLightningInvoice(v)) {\n _this4.setState({\n result: null,\n lightningInvoice: v,\n to: \'\'\n });\n _this4.handleDecodeInvoice(v);\n } else {\n _this4.setState({\n result: null,\n to: v,\n lightningInvoice: \'\',\n decodedInvoice: null\n });\n }\n },\n style: {\n flex: 1\n }\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n icon: "camera",\n title: "Scan QR code",\n "aria-label": "Scan QR code for address or Lightning invoice",\n onClick: function onClick() {\n return _this4.setState({\n scanModalOpen: true\n });\n }\n }))), this.state.decodedInvoice && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small"\n }, /*#__PURE__*/React.createElement("strong", null, "Lightning invoice:"), " ", (_ref2 = (_this$state$decodedIn = this.state.decodedInvoice.num_satoshis) !== null && _this$state$decodedIn !== void 0 ? _this$state$decodedIn : this.state.decodedInvoice.numSatoshis) !== null && _ref2 !== void 0 ? _ref2 : \'?\', " sats", this.state.decodedInvoice.description && " \\u2014 ".concat(this.state.decodedInvoice.description)), !this.state.lightningInvoice && this.state.payjoinPreferSend && this.state.to && (this.isLikelyPayjoinBip21(this.state.to) ? /*#__PURE__*/React.createElement(Message, {\n positive: true,\n size: "small"\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0 0 0.5em\'\n }\n }, "Detected a ", /*#__PURE__*/React.createElement("code", null, "bitcoin:"), " URI with ", /*#__PURE__*/React.createElement("code", null, "pj="), ". You can pay in a Payjoin-capable external wallet, coordinate PSBT manually below, or \\u2014 if your identity is unlocked \\u2014 sign locally in the app (P2WPKH UTXOs from this Hub\'s scan; PSBT goes to the receiver\'s ", /*#__PURE__*/React.createElement("code", null, "pj="), " URL only)."), this.state.wallet && this.state.wallet.xprv ? /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "green",\n size: "small",\n loading: this.state.localPayjoinBusy,\n disabled: this.state.localPayjoinBusy || this.state.acpPayjoinBusy,\n onClick: function onClick() {\n return _this4.handleLocalPayjoinSend();\n }\n }, "Payjoin (sign locally)"), extractFabricPayjoinSessionIdFromPjUrl((parseBitcoinUriForPayjoin(this.state.to) || {}).pjUrl || \'\') ? /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "violet",\n size: "small",\n title: "SIGHASH_ALL|ANYONECANPAY: Hub appends a wallet UTXO (admin token) without changing outputs \\u2014 extra sats go to fee.",\n loading: this.state.acpPayjoinBusy,\n disabled: this.state.acpPayjoinBusy || this.state.localPayjoinBusy,\n onClick: function onClick() {\n return _this4.handleAcpHubBoostPayjoin();\n }\n }, "ACP + Hub boost") : null) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#555\',\n fontSize: \'0.9em\'\n }\n }, "Unlock identity for local signing, or use an external wallet / desktop app if the payjoin host blocks browser CORS."), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.55em 0 0\',\n fontSize: \'0.88em\',\n color: \'#555\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "ACP + Hub boost"), " appears when ", /*#__PURE__*/React.createElement("code", null, "pj="), " targets this Hub\'s payjoin session. You sign with", \' \', /*#__PURE__*/React.createElement("code", null, "ANYONECANPAY|ALL"), "; the Hub (admin) adds and signs a hot-wallet input so the same outputs absorb more fee \\u2014 payjoin-style privacy plus 2013-style input stitching."), this.state.acpPayjoinResult && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.65em\',\n padding: \'0.5em 0.65em\',\n borderRadius: 4,\n background: this.state.acpPayjoinResult.error ? \'#fff6f6\' : \'#f3e5f5\',\n border: "1px solid ".concat(this.state.acpPayjoinResult.error ? \'#e0b4b4\' : \'#c6a1d8\'),\n color: \'#333\',\n fontSize: \'0.95em\'\n }\n }, this.state.acpPayjoinResult.error ? /*#__PURE__*/React.createElement("span", null, this.state.acpPayjoinResult.error) : /*#__PURE__*/React.createElement("span", null, "ACP payjoin broadcast", this.state.acpPayjoinResult.txid ? /*#__PURE__*/React.createElement(React.Fragment, null, \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(String(this.state.acpPayjoinResult.txid)))\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.9em\'\n }\n }, this.state.acpPayjoinResult.txid))) : null, this.state.acpPayjoinResult.addedOutpoint ? /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.35em\',\n fontSize: \'0.9em\'\n }\n }, "Hub added input ", /*#__PURE__*/React.createElement("code", null, this.state.acpPayjoinResult.addedOutpoint), this.state.acpPayjoinResult.addedValueSats != null ? " (".concat(formatSatsDisplay(this.state.acpPayjoinResult.addedValueSats), " sats)") : null) : null)), this.state.localPayjoinResult && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.65em\',\n padding: \'0.5em 0.65em\',\n borderRadius: 4,\n background: this.state.localPayjoinResult.error ? \'#fff6f6\' : \'#fcfff5\',\n border: "1px solid ".concat(this.state.localPayjoinResult.error ? \'#e0b4b4\' : \'#a3c293\'),\n color: \'#333\',\n fontSize: \'0.95em\'\n }\n }, this.state.localPayjoinResult.error ? /*#__PURE__*/React.createElement("span", null, this.state.localPayjoinResult.error) : /*#__PURE__*/React.createElement("span", null, "Broadcast ok", this.state.localPayjoinResult.txid ? /*#__PURE__*/React.createElement(React.Fragment, null, \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(String(this.state.localPayjoinResult.txid)))\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.9em\'\n }\n }, this.state.localPayjoinResult.txid))) : null))) : /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small"\n }, "Payjoin preference is ", /*#__PURE__*/React.createElement("strong", null, "on"), ": a bare on-chain address uses a ", /*#__PURE__*/React.createElement("strong", null, "standard"), " Hub payment (no payjoin). For Payjoin, paste a BIP21 URI that includes ", /*#__PURE__*/React.createElement("code", null, "pj="), ", or turn this toggle off for intentional plain sends.")), !this.state.lightningInvoice && /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Input, {\n label: "Amount (sats)",\n type: "number",\n min: "1",\n step: "1",\n placeholder: "1000",\n value: this.state.amountSats,\n onChange: function onChange(e) {\n _this4.setState({\n amountSats: e.target.value,\n result: null\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Memo",\n placeholder: "Optional",\n value: this.state.memo,\n onChange: function onChange(e) {\n return _this4.setState({\n memo: e.target.value\n });\n }\n })), this.state.lightningInvoice ? /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n "aria-label": "Pay Lightning invoice from Hub node",\n onClick: function onClick() {\n return _this4.handlePayLightning();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt"\n }), "Pay Lightning") : /*#__PURE__*/React.createElement(Button, {\n primary: true,\n type: "button",\n "aria-label": this.state.payjoinPreferSend && !this.isLikelyPayjoinBip21(this.state.to) ? \'Send on-chain standard transaction from Hub wallet\' : \'Send on-chain from Hub wallet\',\n onClick: function onClick() {\n return _this4.handleSend();\n },\n disabled: !canSendOnChain\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "send"\n }), this.state.payjoinPreferSend && !this.isLikelyPayjoinBip21(this.state.to) ? \'Send On-Chain (standard)\' : \'Send On-Chain\')), !this.state.lightningInvoice && !canSendOnChain && !this.state.result && /*#__PURE__*/React.createElement(Message, {\n size: "small",\n info: true,\n style: {\n marginTop: \'0.65em\'\n }\n }, !hasAdmin ? \'Admin token required to send from the Hub wallet. You can still request payment and inspect wallet history.\' : sendTo.length === 0 ? \'Enter a recipient on-chain address or paste a bitcoin: URI (with optional pj= for Payjoin).\' : \'Set a positive amount in sats to enable send.\'), this.state.result && /*#__PURE__*/React.createElement(Message, {\n size: "small",\n positive: !this.state.result.error,\n negative: !!this.state.result.error,\n style: {\n marginTop: \'0.5em\'\n }\n }, this.state.result.error ? this.state.result.error : /*#__PURE__*/React.createElement(React.Fragment, null, this.state.result.ok ? \'Payment successful.\' : \'Payment submitted.\', function () {\n var r = _this4.state.result;\n var tid = r && r.payment && r.payment.txid || r && r.txid;\n return tid ? /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(String(tid)))\n }, "View transaction")) : null;\n }()))))))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "fabric-btc-tx-client-h3",\n "aria-describedby": "fabric-btc-tx-client-desc"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "fabric-btc-tx-client-h3"\n }, "My Wallet Activity"), /*#__PURE__*/React.createElement("p", {\n id: "fabric-btc-tx-client-desc",\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Client (xpub):"), " this is your wallet history. Open any txid to inspect full details in the built-in explorer."), !hasAdmin ? /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n }\n }, "Non-admin mode: use this page like a normal Bitcoin wallet dashboard (balance + history). Hub-wallet send/broadcast actions remain admin-gated.") : null, this.state.transactions.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No transactions found for this wallet.") : /*#__PURE__*/React.createElement(Table, {\n compact: "very",\n celled: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Txid"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Contract"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Amount"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Confirmations"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Time"))), /*#__PURE__*/React.createElement(Table.Body, null, this.state.transactions.map(function (tx, idx) {\n var amt = tx.ourAmount != null ? tx.ourAmount : tx.value;\n var amtNum = Number(amt);\n var isOutgoing = Number.isFinite(amtNum) ? amtNum < 0 : false;\n var isIncoming = Number.isFinite(amtNum) ? amtNum > 0 : false;\n var time = tx.blocktime != null ? tx.blocktime : tx.time;\n var dateStr = time ? new Date(time * 1000).toLocaleString() : \'-\';\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "".concat(tx.txid || \'tx\', ":").concat(idx)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, tx.txid ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(tx.txid))\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n },\n title: tx.txid\n }, "".concat(tx.txid.slice(0, 8), "\\u2026").concat(tx.txid.slice(-8)))) : /*#__PURE__*/React.createElement("code", null, "-")), /*#__PURE__*/React.createElement(Table.Cell, null, tx.fabricContract && tx.fabricContract.label ? /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "blue",\n title: JSON.stringify(tx.fabricContract.meta || {})\n }, tx.fabricContract.label) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#999\'\n }\n }, "\\u2014")), /*#__PURE__*/React.createElement(Table.Cell, null, amt != null ? "".concat(Number(amt).toFixed(8), " BTC") : \'-\', isOutgoing ? /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "orange",\n style: {\n marginLeft: \'0.35em\'\n }\n }, "sent") : null, isIncoming ? /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "green",\n style: {\n marginLeft: \'0.35em\'\n }\n }, "received") : null), /*#__PURE__*/React.createElement(Table.Cell, null, tx.confirmations != null ? /*#__PURE__*/React.createElement(React.Fragment, null, tx.confirmations, Number(tx.confirmations) === 0 && /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "orange",\n style: {\n marginLeft: \'0.35em\'\n }\n }, "mempool")) : \'-\'), /*#__PURE__*/React.createElement(Table.Cell, null, dateStr));\n }))))), !transactionsOnly ? /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "fabric-btc-mempool-h3",\n "aria-describedby": "fabric-btc-mempool-desc"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "fabric-btc-mempool-h3"\n }, "Mempool Payments"), /*#__PURE__*/React.createElement("p", {\n id: "fabric-btc-mempool-desc",\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Bridge (Hub node):"), " mempool transactions."), this.state.payments.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No mempool payments visible.") : /*#__PURE__*/React.createElement(Table, {\n compact: "very",\n celled: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Txid"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Fee"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Value"))), /*#__PURE__*/React.createElement(Table.Body, null, this.state.payments.map(function (p, idx) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "".concat(p.txid || \'tx\', ":").concat(idx)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, p.txid ? /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(p.txid))\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n },\n title: p.txid\n }, "".concat(p.txid.slice(0, 8), "\\u2026").concat(p.txid.slice(-8)))), /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "orange",\n style: {\n marginLeft: \'0.35em\'\n }\n }, "unconfirmed")) : /*#__PURE__*/React.createElement("code", null, "-")), /*#__PURE__*/React.createElement(Table.Cell, null, p.fee != null ? p.fee : \'-\'), /*#__PURE__*/React.createElement(Table.Cell, null, p.value != null ? "".concat(p.value, " BTC") : \'-\'));\n }))))) : null, !transactionsOnly ? /*#__PURE__*/React.createElement(Segment, {\n id: "wealth-payjoin-board",\n style: {\n fontFamily: \'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace\',\n background: \'#0c0c0e\',\n color: \'#b6e7b6\',\n border: \'1px solid #2e2e32\',\n boxShadow: \'inset 0 0 40px rgba(0,40,0,0.15)\',\n scrollMarginTop: \'4.5rem\'\n }\n }, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "fabric-btc-jm-board-h4",\n "aria-describedby": "fabric-btc-jm-board-desc"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n id: "fabric-btc-jm-board-h4",\n style: {\n fontFamily: \'inherit\',\n color: \'#f5e6a6\',\n marginBottom: \'0.5em\'\n }\n }, "Payjoin deposit session dashboard"), /*#__PURE__*/React.createElement("p", {\n id: "fabric-btc-jm-board-desc",\n style: {\n color: \'#7a9e7a\',\n fontSize: \'0.82rem\',\n marginBottom: \'0.65em\'\n }\n }, "Each row is a receiver deposit endpoint with current status, amount target, and proposal activity (", /*#__PURE__*/React.createElement("code", null, "N_PROP"), "). Share the BIP21 + ", /*#__PURE__*/React.createElement("code", null, "pj="), " URI from Request Payment to collect deposits."), /*#__PURE__*/React.createElement("pre", {\n style: {\n margin: 0,\n padding: \'0.65rem 0.75rem\',\n background: \'#080809\',\n border: \'1px solid #1f2228\',\n borderRadius: 4,\n fontSize: \'0.72rem\',\n lineHeight: 1.5,\n overflow: \'auto\',\n maxHeight: \'22rem\',\n color: \'#c8e6c9\'\n }\n }, buildPayjoinSessionAscii(this.state.payjoinSessions)))) : null, !transactionsOnly ? /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "fabric-btc-pj-proposals-h3",\n "aria-describedby": "fabric-btc-pj-proposals-intro"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "fabric-btc-pj-proposals-h3"\n }, "Payjoin proposals (BIP78 receiver)"), /*#__PURE__*/React.createElement("div", {\n id: "fabric-btc-pj-proposals-intro"\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Bridge:"), " Hub Payjoin service."), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Submit a sender PSBT against an active Payjoin session generated by the deposit flow.")), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Input, {\n label: "Payjoin Session ID",\n placeholder: "session id",\n value: this.state.payjoinSessionId,\n onChange: function onChange(e) {\n return _this4.setState({\n payjoinSessionId: e.target.value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.TextArea, {\n label: "PSBT (base64)",\n rows: 3,\n placeholder: "cHNidP8...",\n value: this.state.payjoinPsbt,\n onChange: function onChange(e) {\n return _this4.setState({\n payjoinPsbt: e.target.value\n });\n }\n }), /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n return _this4.handleSubmitPayjoinProposal();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "exchange"\n }), "Submit Payjoin Proposal")), this.state.payjoinResult && /*#__PURE__*/React.createElement(Message, {\n positive: !this.state.payjoinResult.error,\n negative: !!this.state.payjoinResult.error,\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\'\n }\n }, JSON.stringify(this.state.payjoinResult, null, 2))), /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "fabric-btc-pj-sessions-h4",\n "aria-describedby": "fabric-btc-pj-sessions-desc",\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n id: "fabric-btc-pj-sessions-h4",\n style: {\n marginTop: 0\n }\n }, "Payjoin sessions & proposals"), /*#__PURE__*/React.createElement("p", {\n id: "fabric-btc-pj-sessions-desc",\n style: {\n color: \'#666\',\n marginBottom: \'0.75em\'\n }\n }, "Includes expired sessions (append ", /*#__PURE__*/React.createElement("code", null, "?includeExpired=false"), " on the API to hide them). Each row lists proposal contracts (txid when derivable from PSBT / raw tx)."), this.state.payjoinSessions.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No Payjoin sessions found.") : /*#__PURE__*/React.createElement(Table, {\n compact: "very",\n celled: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Session"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Status"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Label / memo"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Address"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Amount (sats)"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Proposals"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Actions"))), /*#__PURE__*/React.createElement(Table.Body, null, this.state.payjoinSessions.map(function (s, idx) {\n var expired = s.expiresAt && new Date(s.expiresAt).getTime() <= Date.now();\n var proposals = Array.isArray(s.proposals) ? s.proposals : [];\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "".concat(s.id || \'s\', ":").concat(idx)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, s.id || \'-\'), expired && /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "grey",\n style: {\n marginLeft: \'0.35em\'\n }\n }, "expired")), /*#__PURE__*/React.createElement(Table.Cell, null, s.status || \'-\'), /*#__PURE__*/React.createElement(Table.Cell, null, s.label || s.memo ? /*#__PURE__*/React.createElement("span", null, [s.label, s.memo].filter(Boolean).join(\' · \')) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#999\'\n }\n }, "\\u2014")), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.8em\'\n }\n }, s.address || \'-\')), /*#__PURE__*/React.createElement(Table.Cell, null, s.amountSats != null && s.amountSats > 0 ? String(s.amountSats) : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, proposals.length === 0 ? /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#999\'\n }\n }, "0") : /*#__PURE__*/React.createElement("div", {\n style: {\n maxWidth: \'28em\'\n }\n }, proposals.map(function (p, j) {\n return /*#__PURE__*/React.createElement("div", {\n key: p.id || j,\n style: {\n marginBottom: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "teal",\n style: {\n marginRight: \'0.35em\'\n }\n }, p.status || \'proposal\'), p.proposalTxid ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(p.proposalTxid))\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.75em\'\n },\n title: p.proposalTxid\n }, "".concat(p.proposalTxid.slice(0, 10), "\\u2026").concat(p.proposalTxid.slice(-8)))) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\',\n fontSize: \'0.85em\'\n }\n }, p.hasPsbt || p.hasTxhex ? \'txid pending / partial PSBT\' : \'—\'));\n }))), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement(Button.Group, {\n size: "small"\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n primary: true,\n disabled: !s.id,\n to: s.id ? "/payments?payjoinSession=".concat(encodeURIComponent(s.id)) : \'/payments\',\n title: "Fill the proposal form with this session"\n }, "Use for PSBT"), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n icon: true,\n disabled: !s.bip21Uri,\n title: "Copy BIP21 URI",\n onClick: function onClick() {\n return s.bip21Uri && copyToClipboard(s.bip21Uri);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy outline"\n })))));\n })))))) : null, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "fabric-btc-utxos-h3",\n "aria-describedby": "fabric-btc-utxos-desc"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "fabric-btc-utxos-h3"\n }, "UTXOs"), /*#__PURE__*/React.createElement("p", {\n id: "fabric-btc-utxos-desc",\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Bridge (Hub node):"), " unspent outputs for wallet."), this.state.utxos.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No UTXOs found for this wallet.") : /*#__PURE__*/React.createElement(Table, {\n compact: "very",\n celled: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Txid"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Vout"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Amount"))), /*#__PURE__*/React.createElement(Table.Body, null, this.state.utxos.map(function (u, idx) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "".concat(u.txid || \'u\', ":").concat(u.vout || 0, ":").concat(idx)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", null, u.txid || \'-\')), /*#__PURE__*/React.createElement(Table.Cell, null, u.vout != null ? u.vout : \'-\'), /*#__PURE__*/React.createElement(Table.Cell, null, u.amount != null ? u.amount : u.amountSats != null ? "".concat(formatSatsDisplay(u.amountSats), " sats") : \'-\'));\n }))))), /*#__PURE__*/React.createElement(QrScannerModal, {\n open: this.state.scanModalOpen,\n onClose: function onClose() {\n return _this4.setState({\n scanModalOpen: false\n });\n },\n onScan: function onScan(text) {\n return _this4.handleScanResult(text);\n }\n }));\n }\n }]);\n}(React.Component);\nmodule.exports = BitcoinPaymentsHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0JpdGNvaW5QYXltZW50c0hvbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBQUEsU0FBQUEsYUFBQSxJQUNiLHVLQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssV0FBQSw4QkFBQUMsRUFBQU4sQ0FBQSxFQUFBRSxDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxRQUFBQyxDQUFBLEdBQUFMLENBQUEsSUFBQUEsQ0FBQSxDQUFBTSxTQUFBLFlBQUFDLFNBQUEsR0FBQVAsQ0FBQSxHQUFBTyxTQUFBLEVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxNQUFBLENBQUFMLENBQUEsQ0FBQUMsU0FBQSxVQUFBSyxtQkFBQSxDQUFBSCxDQUFBLHVCQUFBVixDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxRQUFBRSxDQUFBLEVBQUFDLENBQUEsRUFBQUcsQ0FBQSxFQUFBSSxDQUFBLE1BQUFDLENBQUEsR0FBQVgsQ0FBQSxRQUFBWSxDQUFBLE9BQUFDLENBQUEsS0FBQUYsQ0FBQSxLQUFBYixDQUFBLEtBQUFnQixDQUFBLEVBQUFwQixDQUFBLEVBQUFxQixDQUFBLEVBQUFDLENBQUEsRUFBQU4sQ0FBQSxFQUFBTSxDQUFBLENBQUFDLElBQUEsQ0FBQXZCLENBQUEsTUFBQXNCLENBQUEsV0FBQUEsRUFBQXJCLENBQUEsRUFBQUMsQ0FBQSxXQUFBTSxDQUFBLEdBQUFQLENBQUEsRUFBQVEsQ0FBQSxNQUFBRyxDQUFBLEdBQUFaLENBQUEsRUFBQW1CLENBQUEsQ0FBQWYsQ0FBQSxHQUFBRixDQUFBLEVBQUFtQixDQUFBLGdCQUFBQyxFQUFBcEIsQ0FBQSxFQUFBRSxDQUFBLFNBQUFLLENBQUEsR0FBQVAsQ0FBQSxFQUFBVSxDQUFBLEdBQUFSLENBQUEsRUFBQUgsQ0FBQSxPQUFBaUIsQ0FB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WixDQUFDLENBQUNrTSxVQUFVLElBQUksSUFBSSxNQUFBMEIsTUFBQSxDQUFNNUUsaUJBQWlCLENBQUNoSixDQUFDLENBQUNrTSxVQUFVLENBQUMsYUFBVSxHQUFpQixDQUN2SCxDQUFDO01BQUEsQ0FDYixDQUNTLENBQ1AsQ0FFQSxDQUNGLENBQUMsZUFFVnJHLEtBQUEsQ0FBQXVhLGFBQUEsQ0FBQzFXLGNBQWM7UUFDYnNkLElBQUksRUFBRSxJQUFJLENBQUM3WSxLQUFLLENBQUNnQixhQUFjO1FBQy9COFgsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7VUFBQSxPQUFReEksTUFBSSxDQUFDaE4sUUFBUSxDQUFDO1lBQUV0QyxhQUFhLEVBQUU7VUFBTSxDQUFDLENBQUM7UUFBQSxDQUFDO1FBQ3ZEK1gsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUc5TyxJQUFJO1VBQUEsT0FBS3FHLE1BQUksQ0FBQ25HLGdCQUFnQixDQUFDRixJQUFJLENBQUM7UUFBQTtNQUFDLENBQy9DLENBQ0UsQ0FBQztJQUVWO0VBQUM7QUFBQSxFQW5xRCtCdlMsS0FBSyxDQUFDc2hCLFNBQVM7QUFzcURqREMsTUFBTSxDQUFDQyxPQUFPLEdBQUd2WixtQkFBbUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvQml0Y29pblBheW1lbnRzSG9tZS5qcz9hMjlhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5jb25zdCB7IEJ1dHRvbiwgQ2hlY2tib3gsIEZvcm0sIEhlYWRlciwgSWNvbiwgTGFiZWwsIExpc3QsIE1lc3NhZ2UsIFNlZ21lbnQsIFRhYmxlIH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3Qge1xuICBicm9hZGNhc3RSYXdUcmFuc2FjdGlvbixcbiAgY3JlYXRlUGF5am9pbkRlcG9zaXQsXG4gIGRlY29kZUxpZ2h0bmluZ0ludm9pY2UsXG4gIGRlcml2ZUFkZHJlc3NGcm9tWHB1YixcbiAgZmV0Y2hMaWdodG5pbmdDaGFubmVscyxcbiAgZmV0Y2hMaWdodG5pbmdTdGF0dXMsXG4gIGZldGNoUGF5bWVudHMsXG4gIGZldGNoUGF5am9pbkNhcGFiaWxpdGllcyxcbiAgZmV0Y2hQYXlqb2luU2Vzc2lvbnMsXG4gIGZldGNoUmVjZWl2ZUFkZHJlc3MsXG4gIGZldGNoVHJhbnNhY3Rpb25IZXgsXG4gIGZldGNoVVRYT3MsXG4gIGZldGNoV2FsbGV0U3VtbWFyeSxcbiAgZmV0Y2hXYWxsZXRUcmFuc2FjdGlvbnMsXG4gIGdldFNwZW5kV2FsbGV0Q29udGV4dCxcbiAgZ2V0TmV4dFJlY2VpdmVXYWxsZXRDb250ZXh0LFxuICBsb2FkVXBzdHJlYW1TZXR0aW5ncyxcbiAgbG9hZFBheWpvaW5QcmVmZXJlbmNlcyxcbiAgc2F2ZVBheWpvaW5QcmVmZXJlbmNlcyxcbiAgcGF5TGlnaHRuaW5nSW52b2ljZSxcbiAgcmVzZXJ2ZU5leHRSZWNlaXZlQWRkcmVzcyxcbiAgc2VuZFBheW1lbnQsXG4gIHN1Ym1pdFBheWpvaW5Qcm9wb3NhbCxcbiAgYXBwbHlQYXlqb2luQWNwSHViQm9vc3Rcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvYml0Y29pbkNsaWVudCcpO1xuY29uc3QgeyByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViQWRtaW5Ub2tlbkJyb3dzZXInKTtcbmNvbnN0IHtcbiAgcGFyc2VCaXRjb2luVXJpRm9yUGF5am9pbixcbiAgZXh0cmFjdEZhYnJpY1BheWpvaW5TZXNzaW9uSWRGcm9tUGpVcmwsXG4gIGNoYWluSW5kZXhGcm9tRGVzY3JpcHRvcixcbiAgYnVpbGRPcmlnaW5hbFNpZ25lZFBheWpvaW5Qc2J0LFxuICBzaWduT3VyUGF5am9pbklucHV0cyxcbiAgZmluYWxpemVBbmRFeHRyYWN0SGV4LFxuICBwb3N0UGF5am9pblByb3Bvc2FsV2l0aERlc2t0b3BGYWxsYmFja1xufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9wYXlqb2luQnJvd3NlcldhbGxldCcpO1xuY29uc3QgeyBmb3JtYXRTYXRzRGlzcGxheSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2Zvcm1hdFNhdHMnKTtcbmNvbnN0IHsgZmFicmljSWRlbnRpdHlOZWVkRnVsbEtleVBsYWluIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViSWRlbnRpdHlVaUhpbnRzJyk7XG5jb25zdCB0eENvbnRyYWN0TGFiZWxzID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3R4Q29udHJhY3RMYWJlbHMnKTtcbmNvbnN0IGludm9pY2VTdG9yZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9pbnZvaWNlU3RvcmUnKTtcbmNvbnN0IHsgY29weVRvQ2xpcGJvYXJkLCBwdXNoVWlOb3RpZmljYXRpb24gfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy91aU5vdGlmaWNhdGlvbnMnKTtcbmNvbnN0IHsgU0FUU19QRVJfQlRDIH0gPSByZXF1aXJlKCcuLi9jb25zdGFudHMnKTtcbmNvbnN0IFFyU2Nhbm5lck1vZGFsID0gcmVxdWlyZSgnLi9RclNjYW5uZXJNb2RhbCcpO1xuY29uc3QgSHViUmVndGVzdEFkbWluVG9rZW5QYW5lbCA9IHJlcXVpcmUoJy4vSHViUmVndGVzdEFkbWluVG9rZW5QYW5lbCcpO1xuY29uc3QgQml0Y29pbldhbGxldEJyYW5jaEJhciA9IHJlcXVpcmUoJy4vQml0Y29pbldhbGxldEJyYW5jaEJhcicpO1xuY29uc3Qge1xuICBsb2FkRmVkZXJhdGlvblNwZW5kaW5nUHJlZnMsXG4gIG1lcmdlUGF5bWVudE1lbW9XaXRoRmVkZXJhdGlvblxufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mZWRlcmF0aW9uU3BlbmRpbmdQcmVmcycpO1xuY29uc3QgeyBzYWZlQnJpZWZNZXNzYWdlIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljU2FmZUxvZycpO1xuY29uc3QgeyBoYXNFeHRlcm5hbFNpZ25pbmdEZWxlZ2F0aW9uIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljRGVsZWdhdGlvbkxvY2FsJyk7XG5cbi8qKlxuICogV2hlbiBgcmVmcmVzaCgpYCBydW5zIHR3aWNlIGluIG9uZSB1cGRhdGUgKGlkZW50aXR5ICsgcXVlcnkpLCBSb3V0ZXIgcHJvcHMgY2FuIGJlIGJyaWVmbHkgZW1wdHk7XG4gKiB0aGUgcmVhbCBVUkwgc3RpbGwgaGFzIHBheVRvIC8gcGF5QW1vdW50U2F0cyDigJQgcmVhZCBhcyBmYWxsYmFjayBzbyBNYWtlIFBheW1lbnQgcHJlZmlsbHMgc3Vydml2ZS5cbiAqL1xuZnVuY3Rpb24gcmVhZFBheW1lbnRzRGVlcExpbmtGcm9tTG9jYXRpb24gKCkge1xuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHt9O1xuICAgIGNvbnN0IHNwID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICByZXR1cm4ge1xuICAgICAgcGF5VG86IFN0cmluZyhzcC5nZXQoJ3BheVRvJykgfHwgJycpLnRyaW0oKSxcbiAgICAgIHBheUFtb3VudFNhdHM6IHNwLmdldCgncGF5QW1vdW50U2F0cycpLFxuICAgICAgYml0Y29pblVyaTogU3RyaW5nKHNwLmdldCgnYml0Y29pblVyaScpIHx8ICcnKS50cmltKClcbiAgICB9O1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKlxuICogUHJvcHMgKyBsb2NhdGlvbiDihpIgcGFydGlhbCBzdGF0ZSBmb3IgTWFrZSBQYXltZW50IChhcHBseSBiZWZvcmUgYXN5bmMgcmVmcmVzaCBzbyBmaWVsZHMgYXJlIG5vdCBibGFuayB3aGlsZSBsb2FkaW5nKS5cbiAqIFByZWZlciBgd2luZG93LmxvY2F0aW9uYCBvdmVyIFJvdXRlciBwcm9wcyBzbyBzdHJpcHBpbmcgcXVlcnkgYWZ0ZXIgYSBzdWNjZXNzZnVsIHNlbmQgaXMgdmlzaWJsZSBpbW1lZGlhdGVseVxuICogKFJvdXRlciBwcm9wcyBjYW4gbGFnIG9uZSBmcmFtZSBiZWhpbmQgYHNldFNlYXJjaFBhcmFtc2ApLlxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzIC0gaW5jbHVkZXMgcGF5VG9Gcm9tUXVlcnksIHBheUFtb3VudFNhdHNGcm9tUXVlcnksIGJpdGNvaW5VcmlGcm9tUXVlcnlcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn1cbiAqL1xuZnVuY3Rpb24gY29tcHV0ZU1ha2VQYXltZW50RGVlcExpbmtQYXRjaCAocHJvcHMpIHtcbiAgY29uc3QgbG9jID0gcmVhZFBheW1lbnRzRGVlcExpbmtGcm9tTG9jYXRpb24oKTtcbiAgY29uc3QgcUJpdGNvaW5VcmkgPSBTdHJpbmcobG9jLmJpdGNvaW5VcmkgfHwgJycpLnRyaW0oKSB8fCBTdHJpbmcoKHByb3BzICYmIHByb3BzLmJpdGNvaW5VcmlGcm9tUXVlcnkpIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IHFUbyA9IFN0cmluZyhsb2MucGF5VG8gfHwgJycpLnRyaW0oKSB8fCBTdHJpbmcoKHByb3BzICYmIHByb3BzLnBheVRvRnJvbVF1ZXJ5KSB8fCAnJykudHJpbSgpO1xuICBjb25zdCByYXdBbXRQcm9wID0gcHJvcHMgJiYgcHJvcHMucGF5QW1vdW50U2F0c0Zyb21RdWVyeTtcbiAgY29uc3QgcUFtdFJhdyA9IChsb2MucGF5QW1vdW50U2F0cyAhPSBudWxsICYmIFN0cmluZyhsb2MucGF5QW1vdW50U2F0cykudHJpbSgpICE9PSAnJylcbiAgICA/IGxvYy5wYXlBbW91bnRTYXRzXG4gICAgOiByYXdBbXRQcm9wO1xuICBjb25zdCBxQW10U3RyID0gcUFtdFJhdyAhPSBudWxsICYmIFN0cmluZyhxQW10UmF3KS50cmltKCkgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcihxQW10UmF3KSkgJiYgTnVtYmVyKHFBbXRSYXcpID4gMFxuICAgID8gU3RyaW5nKE1hdGgucm91bmQoTnVtYmVyKHFBbXRSYXcpKSlcbiAgICA6ICcnO1xuICBjb25zdCBwYXRjaCA9IHt9O1xuICBpZiAocUJpdGNvaW5VcmkpIHtcbiAgICBwYXRjaC50byA9IHFCaXRjb2luVXJpO1xuICAgIHBhdGNoLmxpZ2h0bmluZ0ludm9pY2UgPSAnJztcbiAgICBwYXRjaC5kZWNvZGVkSW52b2ljZSA9IG51bGw7XG4gIH0gZWxzZSBpZiAocVRvKSB7XG4gICAgcGF0Y2gudG8gPSBxVG87XG4gICAgcGF0Y2gubGlnaHRuaW5nSW52b2ljZSA9ICcnO1xuICAgIHBhdGNoLmRlY29kZWRJbnZvaWNlID0gbnVsbDtcbiAgfVxuICBpZiAocUFtdFN0ciAmJiAhcUJpdGNvaW5VcmkpIHtcbiAgICBwYXRjaC5hbW91bnRTYXRzID0gcUFtdFN0cjtcbiAgfVxuICByZXR1cm4gcGF0Y2g7XG59XG5cbi8qKiBNb25vc3BhY2UgZGVwb3NpdC1zZXNzaW9uIHRhYmxlIGZvciBQYXlqb2luIHJlY2VpdmVyIG9wZXJhdGlvbnMuICovXG5mdW5jdGlvbiBidWlsZFBheWpvaW5TZXNzaW9uQXNjaWkgKHNlc3Npb25zKSB7XG4gIGNvbnN0IGxpc3QgPSBBcnJheS5pc0FycmF5KHNlc3Npb25zKSA/IHNlc3Npb25zIDogW107XG4gIGNvbnN0IGhlYWQgPSAnT0ZGRVJfSUQgICAgICAgIEFNTlRfU0FUUyAgIFNUQVRVUyAgICAgIEFERFIgICAgICAgICAgICAgICAgTl9QUk9QICBFWFBJUkVTJztcbiAgY29uc3Qgc2VwID0gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJztcbiAgY29uc3QgbGluZXMgPSBbaGVhZCwgc2VwXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihsaXN0Lmxlbmd0aCwgMTYpOyBpKyspIHtcbiAgICBjb25zdCBzID0gbGlzdFtpXSB8fCB7fTtcbiAgICBjb25zdCBvaWQgPSBTdHJpbmcocy5pZCB8fCAnLScpLnJlcGxhY2UoL1xccysvZywgJyAnKS5zbGljZSgwLCAxNCkucGFkRW5kKDE0KTtcbiAgICBjb25zdCBhbXQgPSBzLmFtb3VudFNhdHMgIT0gbnVsbCAmJiBOdW1iZXIocy5hbW91bnRTYXRzKSA+IDAgPyBTdHJpbmcoTWF0aC5yb3VuZChOdW1iZXIocy5hbW91bnRTYXRzKSkpIDogJ2FueSc7XG4gICAgY29uc3QgYW10ZiA9IGFtdC5zbGljZSgwLCAxMCkucGFkU3RhcnQoMTApO1xuICAgIGNvbnN0IHN0ID0gU3RyaW5nKHMuc3RhdHVzIHx8ICctJykuc2xpY2UoMCwgMTApLnBhZEVuZCgxMCk7XG4gICAgY29uc3QgYWQgPSBTdHJpbmcocy5hZGRyZXNzIHx8ICctJykuc2xpY2UoMCwgMTgpLnBhZEVuZCgxOCk7XG4gICAgY29uc3QgbiA9IEFycmF5LmlzQXJyYXkocy5wcm9wb3NhbHMpID8gcy5wcm9wb3NhbHMubGVuZ3RoIDogMDtcbiAgICBsZXQgZXggPSAnLSc7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzLmV4cGlyZXNBdCkge1xuICAgICAgICBjb25zdCBkID0gbmV3IERhdGUocy5leHBpcmVzQXQpO1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTihkLmdldFRpbWUoKSkpIGV4ID0gZC50b0lTT1N0cmluZygpLnNsaWNlKDUsIDE2KS5yZXBsYWNlKCdUJywgJyAnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIGV4ID0gU3RyaW5nKGV4KS5zbGljZSgwLCAxMSkucGFkRW5kKDExKTtcbiAgICBsaW5lcy5wdXNoKGAke29pZH0gICR7YW10Zn0gICR7c3R9ICAke2FkfSAgJHtTdHJpbmcobikucGFkU3RhcnQoNCl9ICAke2V4fWApO1xuICB9XG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGxpbmVzLnB1c2goJyhubyBkZXBvc2l0IHNlc3Npb25zIOKAlCB1c2UgUmVxdWVzdCBQYXltZW50IGFib3ZlIG9yIFBPU1QgL3NlcnZpY2VzL3BheWpvaW4vc2Vzc2lvbnMpJyk7XG4gIH1cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5jbGFzcyBCaXRjb2luUGF5bWVudHNIb21lIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHBqUHJlZiA9IGxvYWRQYXlqb2luUHJlZmVyZW5jZXMoKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgdXBzdHJlYW06IGxvYWRVcHN0cmVhbVNldHRpbmdzKCksXG4gICAgICB3YWxsZXQ6IG51bGwsXG4gICAgICBzdW1tYXJ5OiB7fSxcbiAgICAgIHJlY2VpdmVBZGRyZXNzOiAnJyxcbiAgICAgIHV0eG9zOiBbXSxcbiAgICAgIHBheW1lbnRzOiBbXSxcbiAgICAgIHRvOiAnJyxcbiAgICAgIGFtb3VudFNhdHM6ICcnLFxuICAgICAgbWVtbzogJycsXG4gICAgICByZXN1bHQ6IG51bGwsXG4gICAgICBwYXlqb2luU2Vzc2lvbnM6IFtdLFxuICAgICAgcGF5am9pblNlc3Npb25JZDogJycsXG4gICAgICBwYXlqb2luUHNidDogJycsXG4gICAgICBwYXlqb2luUmVzdWx0OiBudWxsLFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXSxcbiAgICAgIHNjYW5Nb2RhbE9wZW46IGZhbHNlLFxuICAgICAgbGlnaHRuaW5nSW52b2ljZTogJycsXG4gICAgICBkZWNvZGVkSW52b2ljZTogbnVsbCxcbiAgICAgIHBheWpvaW5DYXBhYmlsaXRpZXM6IHsgYXZhaWxhYmxlOiBmYWxzZSB9LFxuICAgICAgcGF5am9pblByZWZlclJlY2VpdmU6ICEhcGpQcmVmLnBheW1lbnRzUmVjZWl2ZSxcbiAgICAgIHBheWpvaW5QcmVmZXJTZW5kOiAhIXBqUHJlZi5wYXltZW50c1NlbmQsXG4gICAgICBwYXlqb2luUmVjZWl2ZVVzZUpvaW5tYXJrZXQ6IHBqUHJlZi5yZWNlaXZlVGFwcm9vdEpvaW5tYXJrZXQgIT09IGZhbHNlLFxuICAgICAgcmVjZWl2ZVBheWpvaW5BbW91bnRTYXRzOiAnJyxcbiAgICAgIHBheWpvaW5SZWNlaXZlQnVzeTogZmFsc2UsXG4gICAgICBwYXlqb2luUmVjZWl2ZVJlc3VsdDogbnVsbCxcbiAgICAgIGxvY2FsUGF5am9pbkJ1c3k6IGZhbHNlLFxuICAgICAgbG9jYWxQYXlqb2luUmVzdWx0OiBudWxsLFxuICAgICAgYWNwUGF5am9pbkJ1c3k6IGZhbHNlLFxuICAgICAgYWNwUGF5am9pblJlc3VsdDogbnVsbCxcbiAgICAgIGxpZ2h0bmluZ1N1bW1hcnk6IHt9LFxuICAgICAgbGlnaHRuaW5nQ2hhbm5lbHM6IFtdLFxuICAgICAgbGlnaHRuaW5nT3V0cHV0czogW10sXG4gICAgICByZWNvcmRGZWRlcmF0aW9uUGF5bWVudDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgLyoqIENvbXB1dGUgTGlnaHRuaW5nIG1hbmFnZWQgZnVuZHMgZnJvbSBsaXN0ZnVuZHMgb3V0cHV0cy4gKi9cbiAgZ2V0TGlnaHRuaW5nQmFsYW5jZUZyb21PdXRwdXRzIChvdXRwdXRzID0gW10pIHtcbiAgICBsZXQgY29uZmlybWVkID0gMDtcbiAgICBsZXQgdW5jb25maXJtZWQgPSAwO1xuICAgIGxldCBpbW1hdHVyZSA9IDA7XG4gICAgZm9yIChjb25zdCBvIG9mIG91dHB1dHMpIHtcbiAgICAgIGNvbnN0IHNhdHMgPSBvICYmIG8uYW1vdW50X21zYXQgIT0gbnVsbFxuICAgICAgICA/IE1hdGguZmxvb3IoTnVtYmVyKG8uYW1vdW50X21zYXQpIC8gMTAwMClcbiAgICAgICAgOiAobyAmJiBvLmFtb3VudF9zYXQgIT0gbnVsbCA/IE51bWJlcihvLmFtb3VudF9zYXQpIDogMCk7XG4gICAgICBjb25zdCBzdGF0dXMgPSBTdHJpbmcoKG8gJiYgby5zdGF0dXMpIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ2NvbmZpcm1lZCcpIGNvbmZpcm1lZCArPSBzYXRzO1xuICAgICAgZWxzZSBpZiAoc3RhdHVzID09PSAnaW1tYXR1cmUnKSBpbW1hdHVyZSArPSBzYXRzO1xuICAgICAgZWxzZSBpZiAoc3RhdHVzID09PSAnc3BlbnQnKSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdW5jb25maXJtZWQgKz0gc2F0cztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgY29uZmlybWVkLCB1bmNvbmZpcm1lZCwgaW1tYXR1cmUgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgICBjb25zdCBzaWQgPSBTdHJpbmcoKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5wYXlqb2luU2Vzc2lvbkZyb21RdWVyeSkgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoc2lkKSB0aGlzLnNldFN0YXRlKHsgcGF5am9pblNlc3Npb25JZDogc2lkIH0pO1xuICAgIHRoaXMuX3N5bmNQYXltZW50c0hhc2hTY3JvbGwoKTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgdGhpcy5fb25QYXltZW50c0hhc2hDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgdGhpcy5fb25QYXltZW50c0hhc2hDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIF9vblBheW1lbnRzSGFzaENoYW5nZSA9ICgpID0+IHtcbiAgICB0aGlzLl9zeW5jUGF5bWVudHNIYXNoU2Nyb2xsKCk7XG4gIH07XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlIChwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIGNvbnN0IHByZXYgPSBwcmV2UHJvcHMgJiYgcHJldlByb3BzLmlkZW50aXR5ICYmIHByZXZQcm9wcy5pZGVudGl0eS54cHViO1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuaWRlbnRpdHkgJiYgdGhpcy5wcm9wcy5pZGVudGl0eS54cHViO1xuICAgIGNvbnN0IGlkZW50aXR5V2FsbGV0Q2hhbmdlZCA9IHByZXYgIT09IG5leHQ7XG4gICAgY29uc3QgcHEgPSBTdHJpbmcoKHByZXZQcm9wcyAmJiBwcmV2UHJvcHMucGF5am9pblNlc3Npb25Gcm9tUXVlcnkpIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgbnEgPSBTdHJpbmcoKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5wYXlqb2luU2Vzc2lvbkZyb21RdWVyeSkgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAobnEgJiYgbnEgIT09IHBxKSB0aGlzLnNldFN0YXRlKHsgcGF5am9pblNlc3Npb25JZDogbnEgfSk7XG4gICAgY29uc3QgcFBheSA9IFN0cmluZygocHJldlByb3BzICYmIHByZXZQcm9wcy5wYXlUb0Zyb21RdWVyeSkgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBuUGF5ID0gU3RyaW5nKCh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMucGF5VG9Gcm9tUXVlcnkpIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgcEFtdCA9IHByZXZQcm9wcyAmJiBwcmV2UHJvcHMucGF5QW1vdW50U2F0c0Zyb21RdWVyeTtcbiAgICBjb25zdCBuQW10ID0gdGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLnBheUFtb3VudFNhdHNGcm9tUXVlcnk7XG4gICAgY29uc3QgcEJjID0gU3RyaW5nKChwcmV2UHJvcHMgJiYgcHJldlByb3BzLmJpdGNvaW5VcmlGcm9tUXVlcnkpIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgbkJjID0gU3RyaW5nKCh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuYml0Y29pblVyaUZyb21RdWVyeSkgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBxdWVyeUNoYW5nZWQgPSBuUGF5ICE9PSBwUGF5IHx8IG5BbXQgIT09IHBBbXQgfHwgbkJjICE9PSBwQmM7XG4gICAgaWYgKGlkZW50aXR5V2FsbGV0Q2hhbmdlZCB8fCBxdWVyeUNoYW5nZWQpIHRoaXMucmVmcmVzaCgpO1xuICAgIGlmIChwcmV2U3RhdGUubG9hZGluZyAmJiAhdGhpcy5zdGF0ZS5sb2FkaW5nKSB7XG4gICAgICB0aGlzLl9zeW5jUGF5bWVudHNIYXNoU2Nyb2xsKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNjcm9sbCB0byBoYXNoIHRhcmdldHMgYWZ0ZXIgbmF2aWdhdGlvbiAoU1BBICsgbmV3IHRhYiB3aXRoICNmcmFnbWVudCkuICovXG4gIF9zeW5jUGF5bWVudHNIYXNoU2Nyb2xsICgpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICBjb25zdCByYXcgPSAod2luZG93LmxvY2F0aW9uLmhhc2ggfHwgJycpLnJlcGxhY2UoL14jLywgJycpO1xuICAgIGlmICghcmF3KSByZXR1cm47XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGlmIChyYXcgPT09ICd3ZWFsdGgtcGF5am9pbi1ib2FyZCcpIHtcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2VhbHRoLXBheWpvaW4tYm9hcmQnKTtcbiAgICAgICAgaWYgKGVsKSBlbC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocmF3KTtcbiAgICAgIGlmIChlbCkgZWwuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaCAoKSB7XG4gICAgY29uc3QgaWRlbnRpdHkgPSAodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmlkZW50aXR5KSB8fCB7fTtcbiAgICBjb25zdCB3YWxsZXQgPSBnZXRTcGVuZFdhbGxldENvbnRleHQoaWRlbnRpdHkpO1xuICAgIGNvbnN0IG5leHRSZWNlaXZlID0gZ2V0TmV4dFJlY2VpdmVXYWxsZXRDb250ZXh0KGlkZW50aXR5KTtcbiAgICBjb25zdCB1cHN0cmVhbSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUudXBzdHJlYW0sXG4gICAgICBodWJBZG1pblRva2VuOiByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5hZG1pblRva2VuKSB8fCAnJ1xuICAgIH07XG4gICAgY29uc3QgbmV0d29yayA9ICh0aGlzLnByb3BzLmJpdGNvaW4gJiYgdGhpcy5wcm9wcy5iaXRjb2luLm5ldHdvcmspID8gU3RyaW5nKHRoaXMucHJvcHMuYml0Y29pbi5uZXR3b3JrKS50b0xvd2VyQ2FzZSgpIDogJ3JlZ3Rlc3QnO1xuICAgIGNvbnN0IGRlZXBMaW5rUGF0Y2ggPSBjb21wdXRlTWFrZVBheW1lbnREZWVwTGlua1BhdGNoKHRoaXMucHJvcHMpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlLCBlcnJvcjogbnVsbCwgd2FsbGV0LCAuLi5kZWVwTGlua1BhdGNoIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFtzdW1tYXJ5LCBhZGRyZXNzLCB1dHhvcywgcGF5bWVudHMsIHBheWpvaW5TZXNzaW9ucywgdHJhbnNhY3Rpb25zLCBwYXlqb2luQ2FwYWJpbGl0aWVzLCBsaWdodG5pbmdTdW1tYXJ5LCBsaWdodG5pbmdDaGFubmVsc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGZldGNoV2FsbGV0U3VtbWFyeSh1cHN0cmVhbSwgd2FsbGV0LCB7IG5ldHdvcmsgfSkuY2F0Y2goKCkgPT4gKHt9KSksXG4gICAgICAgIGZldGNoUmVjZWl2ZUFkZHJlc3ModXBzdHJlYW0sIG5leHRSZWNlaXZlLCB7IG5ldHdvcmssIGlkZW50aXR5IH0pLmNhdGNoKCgpID0+ICcnKSxcbiAgICAgICAgZmV0Y2hVVFhPcyh1cHN0cmVhbSwgd2FsbGV0LCB7IG5ldHdvcmsgfSkuY2F0Y2goKCkgPT4gW10pLFxuICAgICAgICBmZXRjaFBheW1lbnRzKHVwc3RyZWFtLCB3YWxsZXQsIHsgbGltaXQ6IDUwLCBuZXR3b3JrIH0pLmNhdGNoKCgpID0+IFtdKSxcbiAgICAgICAgZmV0Y2hQYXlqb2luU2Vzc2lvbnModXBzdHJlYW0sIHsgbGltaXQ6IDUwLCBpbmNsdWRlRXhwaXJlZDogdHJ1ZSB9KS5jYXRjaCgoKSA9PiBbXSksXG4gICAgICAgIGZldGNoV2FsbGV0VHJhbnNhY3Rpb25zKHVwc3RyZWFtLCB3YWxsZXQsIHsgbGltaXQ6IDUwLCBuZXR3b3JrIH0pLmNhdGNoKCgpID0+IFtdKSxcbiAgICAgICAgZmV0Y2hQYXlqb2luQ2FwYWJpbGl0aWVzKHVwc3RyZWFtKS5jYXRjaCgoKSA9PiAoeyBhdmFpbGFibGU6IGZhbHNlIH0pKSxcbiAgICAgICAgZmV0Y2hMaWdodG5pbmdTdGF0dXModXBzdHJlYW0pLmNhdGNoKCgpID0+ICh7fSkpLFxuICAgICAgICBmZXRjaExpZ2h0bmluZ0NoYW5uZWxzKHVwc3RyZWFtKS5jYXRjaCgoKSA9PiBbXSlcbiAgICAgIF0pO1xuICAgICAgY29uc3QgaW52TGFiZWxzID0gdHhDb250cmFjdExhYmVscy5idWlsZEludm9pY2VUeExhYmVscyhpbnZvaWNlU3RvcmUubG9hZEludm9pY2VzKCkpO1xuICAgICAgY29uc3QgdHhSb3dzID0gQXJyYXkuaXNBcnJheSh0cmFuc2FjdGlvbnMpXG4gICAgICAgID8gdHhDb250cmFjdExhYmVscy5tZXJnZVNlcnZlckFuZExvY2FsTGFiZWxzKHRyYW5zYWN0aW9ucywgaW52TGFiZWxzKVxuICAgICAgICA6IFtdO1xuXG4gICAgICBjb25zdCBsaWdodG5pbmdDaGFubmVsc0xpc3QgPSBBcnJheS5pc0FycmF5KGxpZ2h0bmluZ0NoYW5uZWxzKVxuICAgICAgICA/IGxpZ2h0bmluZ0NoYW5uZWxzXG4gICAgICAgIDogKGxpZ2h0bmluZ0NoYW5uZWxzICYmIEFycmF5LmlzQXJyYXkobGlnaHRuaW5nQ2hhbm5lbHMuY2hhbm5lbHMpID8gbGlnaHRuaW5nQ2hhbm5lbHMuY2hhbm5lbHMgOiBbXSk7XG4gICAgICBjb25zdCBsaWdodG5pbmdPdXRwdXRzTGlzdCA9IGxpZ2h0bmluZ0NoYW5uZWxzICYmIEFycmF5LmlzQXJyYXkobGlnaHRuaW5nQ2hhbm5lbHMub3V0cHV0cylcbiAgICAgICAgPyBsaWdodG5pbmdDaGFubmVscy5vdXRwdXRzXG4gICAgICAgIDogW107XG5cbiAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIHN1bW1hcnksXG4gICAgICAgIHJlY2VpdmVBZGRyZXNzOiBhZGRyZXNzIHx8ICcnLFxuICAgICAgICB1dHhvczogQXJyYXkuaXNBcnJheSh1dHhvcykgPyB1dHhvcyA6IFtdLFxuICAgICAgICBwYXltZW50czogQXJyYXkuaXNBcnJheShwYXltZW50cykgPyBwYXltZW50cyA6IFtdLFxuICAgICAgICBwYXlqb2luU2Vzc2lvbnM6IEFycmF5LmlzQXJyYXkocGF5am9pblNlc3Npb25zKSA/IHBheWpvaW5TZXNzaW9ucyA6IFtdLFxuICAgICAgICB0cmFuc2FjdGlvbnM6IHR4Um93cyxcbiAgICAgICAgcGF5am9pbkNhcGFiaWxpdGllczogcGF5am9pbkNhcGFiaWxpdGllcyAmJiB0eXBlb2YgcGF5am9pbkNhcGFiaWxpdGllcyA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IHBheWpvaW5DYXBhYmlsaXRpZXNcbiAgICAgICAgICA6IHsgYXZhaWxhYmxlOiBmYWxzZSB9LFxuICAgICAgICBsaWdodG5pbmdTdW1tYXJ5OiBsaWdodG5pbmdTdW1tYXJ5ICYmIHR5cGVvZiBsaWdodG5pbmdTdW1tYXJ5ID09PSAnb2JqZWN0JyA/IGxpZ2h0bmluZ1N1bW1hcnkgOiB7fSxcbiAgICAgICAgbGlnaHRuaW5nQ2hhbm5lbHM6IGxpZ2h0bmluZ0NoYW5uZWxzTGlzdCxcbiAgICAgICAgbGlnaHRuaW5nT3V0cHV0czogbGlnaHRuaW5nT3V0cHV0c0xpc3RcbiAgICAgIH07XG4gICAgICBjb25zdCBsb2MgPSByZWFkUGF5bWVudHNEZWVwTGlua0Zyb21Mb2NhdGlvbigpO1xuICAgICAgY29uc3QgcUJpdGNvaW5VcmkgPSBTdHJpbmcobG9jLmJpdGNvaW5VcmkgfHwgJycpLnRyaW0oKSB8fCBTdHJpbmcoKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5iaXRjb2luVXJpRnJvbVF1ZXJ5KSB8fCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgcVRvID0gU3RyaW5nKGxvYy5wYXlUbyB8fCAnJykudHJpbSgpIHx8IFN0cmluZygodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLnBheVRvRnJvbVF1ZXJ5KSB8fCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgcmF3QW10UHJvcCA9IHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5wYXlBbW91bnRTYXRzRnJvbVF1ZXJ5O1xuICAgICAgY29uc3QgcUFtdFJhdyA9IChsb2MucGF5QW1vdW50U2F0cyAhPSBudWxsICYmIFN0cmluZyhsb2MucGF5QW1vdW50U2F0cykudHJpbSgpICE9PSAnJylcbiAgICAgICAgPyBsb2MucGF5QW1vdW50U2F0c1xuICAgICAgICA6IHJhd0FtdFByb3A7XG4gICAgICBjb25zdCBxQW10U3RyID0gcUFtdFJhdyAhPSBudWxsICYmIFN0cmluZyhxQW10UmF3KS50cmltKCkgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcihxQW10UmF3KSkgJiYgTnVtYmVyKHFBbXRSYXcpID4gMFxuICAgICAgICA/IFN0cmluZyhNYXRoLnJvdW5kKE51bWJlcihxQW10UmF3KSkpXG4gICAgICAgIDogJyc7XG5cbiAgICAgIGNvbnN0IHByZXZCYyA9IHRoaXMuX2xhc3RCaXRjb2luVXJpQXBwbGllZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2xhc3RCaXRjb2luVXJpQXBwbGllZCAhPSBudWxsXG4gICAgICAgID8gU3RyaW5nKHRoaXMuX2xhc3RCaXRjb2luVXJpQXBwbGllZCkudHJpbSgpXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCBwcmV2UGF5VG8gPSB0aGlzLl9sYXN0UGF5VG9BcHBsaWVkICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fbGFzdFBheVRvQXBwbGllZCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyh0aGlzLl9sYXN0UGF5VG9BcHBsaWVkKS50cmltKClcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IHByZXZQYXlBbXQgPSB0aGlzLl9sYXN0UGF5QW10QXBwbGllZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2xhc3RQYXlBbXRBcHBsaWVkICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKHRoaXMuX2xhc3RQYXlBbXRBcHBsaWVkKS50cmltKClcbiAgICAgICAgOiAnJztcbiAgICAgIGlmIChwcmV2QmMgJiYgIXFCaXRjb2luVXJpKSB7XG4gICAgICAgIGNvbnN0IGN1clRvID0gU3RyaW5nKHRoaXMuc3RhdGUudG8gfHwgJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKGN1clRvID09PSBwcmV2QmMpIHtcbiAgICAgICAgICBuZXh0U3RhdGUudG8gPSAnJztcbiAgICAgICAgICBuZXh0U3RhdGUubGlnaHRuaW5nSW52b2ljZSA9ICcnO1xuICAgICAgICAgIG5leHRTdGF0ZS5kZWNvZGVkSW52b2ljZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcmV2UGF5VG8gJiYgIXFUbyAmJiAhcUJpdGNvaW5VcmkpIHtcbiAgICAgICAgY29uc3QgY3VyVG8gPSBTdHJpbmcodGhpcy5zdGF0ZS50byB8fCAnJykudHJpbSgpO1xuICAgICAgICBpZiAoY3VyVG8gPT09IHByZXZQYXlUbykge1xuICAgICAgICAgIG5leHRTdGF0ZS50byA9ICcnO1xuICAgICAgICAgIG5leHRTdGF0ZS5saWdodG5pbmdJbnZvaWNlID0gJyc7XG4gICAgICAgICAgbmV4dFN0YXRlLmRlY29kZWRJbnZvaWNlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByZXZQYXlBbXQgJiYgIXFBbXRTdHIgJiYgIXFCaXRjb2luVXJpKSB7XG4gICAgICAgIGNvbnN0IGN1ckFtdCA9IFN0cmluZyh0aGlzLnN0YXRlLmFtb3VudFNhdHMgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKGN1ckFtdCA9PT0gcHJldlBheUFtdCkge1xuICAgICAgICAgIG5leHRTdGF0ZS5hbW91bnRTYXRzID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChxQml0Y29pblVyaSkge1xuICAgICAgICBuZXh0U3RhdGUudG8gPSBxQml0Y29pblVyaTtcbiAgICAgICAgbmV4dFN0YXRlLmxpZ2h0bmluZ0ludm9pY2UgPSAnJztcbiAgICAgICAgbmV4dFN0YXRlLmRlY29kZWRJbnZvaWNlID0gbnVsbDtcbiAgICAgICAgY29uc3QgcGogPSBwYXJzZUJpdGNvaW5VcmlGb3JQYXlqb2luKHFCaXRjb2luVXJpKTtcbiAgICAgICAgaWYgKHBqICYmIHBqLmFtb3VudFNhdHMgIT0gbnVsbCAmJiBOdW1iZXIocGouYW1vdW50U2F0cykgPiAwKSB7XG4gICAgICAgICAgbmV4dFN0YXRlLmFtb3VudFNhdHMgPSBTdHJpbmcoTWF0aC5yb3VuZChOdW1iZXIocGouYW1vdW50U2F0cykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYnUgPSBuZXcgVVJMKHFCaXRjb2luVXJpKTtcbiAgICAgICAgICAgIGlmIChidS5wcm90b2NvbCA9PT0gJ2JpdGNvaW46Jykge1xuICAgICAgICAgICAgICBjb25zdCBhbW91bnRTdHIgPSBidS5zZWFyY2hQYXJhbXMuZ2V0KCdhbW91bnQnKTtcbiAgICAgICAgICAgICAgY29uc3QgYW1vdW50QnRjID0gYW1vdW50U3RyICE9IG51bGwgPyBOdW1iZXIoYW1vdW50U3RyKSA6IE5hTjtcbiAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShhbW91bnRCdGMpICYmIGFtb3VudEJ0YyA+IDApIHtcbiAgICAgICAgICAgICAgICBuZXh0U3RhdGUuYW1vdW50U2F0cyA9IFN0cmluZyhNYXRoLnJvdW5kKGFtb3VudEJ0YyAqIFNBVFNfUEVSX0JUQykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoXykgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHFUbykge1xuICAgICAgICBuZXh0U3RhdGUudG8gPSBxVG87XG4gICAgICAgIG5leHRTdGF0ZS5saWdodG5pbmdJbnZvaWNlID0gJyc7XG4gICAgICAgIG5leHRTdGF0ZS5kZWNvZGVkSW52b2ljZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAocUFtdFN0ciAmJiAhcUJpdGNvaW5VcmkpIHtcbiAgICAgICAgbmV4dFN0YXRlLmFtb3VudFNhdHMgPSBxQW10U3RyO1xuICAgICAgfVxuICAgICAgdGhpcy5fbGFzdEJpdGNvaW5VcmlBcHBsaWVkID0gcUJpdGNvaW5Vcmk7XG4gICAgICB0aGlzLl9sYXN0UGF5VG9BcHBsaWVkID0gcVRvO1xuICAgICAgdGhpcy5fbGFzdFBheUFtdEFwcGxpZWQgPSBxQW10U3RyO1xuICAgICAgLyogUmVndGVzdDogcHJlZmlsbCBhbW91bnQgb25jZSBzbyBMMSBzZW5kIGlzbuKAmXQgc3R1Y2sgZGlzYWJsZWQgYmVoaW5kIGFuIGVtcHR5IG51bWJlciBmaWVsZCAocGxhY2Vob2xkZXIg4omgIHZhbHVlKS4gKi9cbiAgICAgIGlmIChuZXR3b3JrID09PSAncmVndGVzdCcgJiYgIXRoaXMuX3JlZ3Rlc3RTZW5kQW1vdW50UHJpbWVkKSB7XG4gICAgICAgIHRoaXMuX3JlZ3Rlc3RTZW5kQW1vdW50UHJpbWVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZmluYWxBbXQgPSBTdHJpbmcobmV4dFN0YXRlLmFtb3VudFNhdHMgIT0gbnVsbCA/IG5leHRTdGF0ZS5hbW91bnRTYXRzIDogdGhpcy5zdGF0ZS5hbW91bnRTYXRzIHx8ICcnKS50cmltKCk7XG4gICAgICAgIGlmICghZmluYWxBbXQpIG5leHRTdGF0ZS5hbW91bnRTYXRzID0gJzEwMDAwJztcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCAoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgICAgICBjb25zdCBiYWxhbmNlU2F0cyA9IE51bWJlcihzdW1tYXJ5LmJhbGFuY2VTYXRzICE9IG51bGwgPyBzdW1tYXJ5LmJhbGFuY2VTYXRzIDogKHN1bW1hcnkuYmFsYW5jZSB8fCAwKSk7XG4gICAgICAgIGNvbnN0IGNvbmZpcm1lZFNhdHMgPSBOdW1iZXIoc3VtbWFyeS5jb25maXJtZWRTYXRzICE9IG51bGwgPyBzdW1tYXJ5LmNvbmZpcm1lZFNhdHMgOiBiYWxhbmNlU2F0cyk7XG4gICAgICAgIGNvbnN0IHVuY29uZmlybWVkU2F0cyA9IE51bWJlcihzdW1tYXJ5LnVuY29uZmlybWVkU2F0cyB8fCAwKTtcbiAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShiYWxhbmNlU2F0cykpIHtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NsaWVudEJhbGFuY2VVcGRhdGUnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgd2FsbGV0SWQ6IHdhbGxldC53YWxsZXRJZCxcbiAgICAgICAgICAgICAgYmFsYW5jZVNhdHMsXG4gICAgICAgICAgICAgIGNvbmZpcm1lZFNhdHMsXG4gICAgICAgICAgICAgIHVuY29uZmlybWVkU2F0c1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiBmYWxzZSwgZXJyb3I6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVTZW5kICgpIHtcbiAgICBjb25zdCB3YWxsZXQgPSB0aGlzLnN0YXRlLndhbGxldCB8fCB7fTtcbiAgICBjb25zdCB0byA9IFN0cmluZyh0aGlzLnN0YXRlLnRvIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgYW1vdW50U2F0cyA9IE51bWJlcih0aGlzLnN0YXRlLmFtb3VudFNhdHMgfHwgMCk7XG4gICAgaWYgKCF0bykgcmV0dXJuIHRoaXMuc2V0U3RhdGUoeyByZXN1bHQ6IHsgZXJyb3I6ICdSZWNpcGllbnQgYWRkcmVzcyBpcyByZXF1aXJlZC4nIH0gfSk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYW1vdW50U2F0cykgfHwgYW1vdW50U2F0cyA8PSAwKSByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7IHJlc3VsdDogeyBlcnJvcjogJ0Ftb3VudCBtdXN0IGJlID4gMCBzYXRzLicgfSB9KTtcblxuICAgIGNvbnN0IGFkbWluVG9rZW4gPSB0aGlzLl9hZG1pblRva2VuRm9yQnJvYWRjYXN0KCk7XG4gICAgaWYgKCFhZG1pblRva2VuKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIGVycm9yOiAnQWRtaW4gdG9rZW4gcmVxdWlyZWQuIFBheW1lbnRzIGZyb20gdGhpcyBzY3JlZW4gc3BlbmQgdGhlIEh1YiBub2RlIHdhbGxldDsgcGFzdGUgeW91ciBzZXR1cCB0b2tlbiBpbiBsb2NhbCBzdG9yYWdlIChmYWJyaWMuaHViLmFkbWluVG9rZW4pIG9yIGNvbXBsZXRlIGZpcnN0LXRpbWUgc2V0dXAuJ1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbWVtbyA9IG1lcmdlUGF5bWVudE1lbW9XaXRoRmVkZXJhdGlvbihcbiAgICAgICAgdGhpcy5zdGF0ZS5tZW1vLFxuICAgICAgICBsb2FkRmVkZXJhdGlvblNwZW5kaW5nUHJlZnMoKSxcbiAgICAgICAgISF0aGlzLnN0YXRlLnJlY29yZEZlZGVyYXRpb25QYXltZW50XG4gICAgICApO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VuZFBheW1lbnQodGhpcy5zdGF0ZS51cHN0cmVhbSwgd2FsbGV0LCB7XG4gICAgICAgIHRvLFxuICAgICAgICBhbW91bnRTYXRzLFxuICAgICAgICBtZW1vLFxuICAgICAgICBhZG1pblRva2VuXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhaWRUeGlkID0gKHJlc3VsdCAmJiByZXN1bHQucGF5bWVudCAmJiByZXN1bHQucGF5bWVudC50eGlkKSB8fCAocmVzdWx0ICYmIHJlc3VsdC50eGlkKTtcbiAgICAgIGNvbnN0IHBhaWQgPSAhIXBhaWRUeGlkO1xuICAgICAgaWYgKHBhaWQgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjbGllbnRCYWxhbmNlVXBkYXRlJykpO1xuICAgICAgfVxuICAgICAgaWYgKHBhaWQgJiYgdHlwZW9mIHRoaXMucHJvcHMucGF5bWVudHNTZXRTZWFyY2hQYXJhbXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXModHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubG9jYXRpb24uc2VhcmNoIDogJycpO1xuICAgICAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgZm9yIChjb25zdCBrIG9mIFsncGF5VG8nLCAncGF5QW1vdW50U2F0cycsICdiaXRjb2luVXJpJ10pIHtcbiAgICAgICAgICAgIGlmIChzcC5oYXMoaykpIHtcbiAgICAgICAgICAgICAgc3AuZGVsZXRlKGspO1xuICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoYW5nZWQpIHRoaXMucHJvcHMucGF5bWVudHNTZXRTZWFyY2hQYXJhbXMoc3AsIHsgcmVwbGFjZTogdHJ1ZSB9KTtcbiAgICAgICAgfSBjYXRjaCAoXykgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJlc3VsdCwgYW1vdW50U2F0czogJycsIG1lbW86ICcnIH0pO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyByZXN1bHQ6IHsgZXJyb3I6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9IH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU5leHRSZWNlaXZlQWRkcmVzcyAoKSB7XG4gICAgY29uc3QgbmV0d29yayA9ICh0aGlzLnByb3BzLmJpdGNvaW4gJiYgdGhpcy5wcm9wcy5iaXRjb2luLm5ldHdvcmspID8gU3RyaW5nKHRoaXMucHJvcHMuYml0Y29pbi5uZXR3b3JrKS50b0xvd2VyQ2FzZSgpIDogJ3JlZ3Rlc3QnO1xuICAgIGNvbnN0IGlkID0gKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5pZGVudGl0eSkgfHwge307XG4gICAgY29uc3QgcmVjZWl2ZVdhbGxldCA9IGdldE5leHRSZWNlaXZlV2FsbGV0Q29udGV4dChpZCk7XG4gICAgY29uc3QgbmV4dCA9IHJlc2VydmVOZXh0UmVjZWl2ZUFkZHJlc3MocmVjZWl2ZVdhbGxldCwgeyBuZXR3b3JrLCBpZGVudGl0eTogaWQgfSk7XG4gICAgaWYgKCFuZXh0IHx8ICFuZXh0LmN1cnJlbnRBZGRyZXNzKSByZXR1cm47XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHJlY2VpdmVBZGRyZXNzOiBuZXh0LmN1cnJlbnRBZGRyZXNzIH0pO1xuICB9XG5cbiAgaGFuZGxlQ29weUFkZHJlc3MgKCkge1xuICAgIGNvbnN0IGFkZHIgPSB0aGlzLnN0YXRlLnJlY2VpdmVBZGRyZXNzO1xuICAgIGlmICghYWRkcikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCkge1xuICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChhZGRyKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG5cbiAgaXNMaWdodG5pbmdJbnZvaWNlICh0ZXh0KSB7XG4gICAgY29uc3QgcyA9IFN0cmluZyh0ZXh0IHx8ICcnKS50cmltKCk7XG4gICAgcmV0dXJuIHMuc3RhcnRzV2l0aCgnbG5iYycpIHx8IHMuc3RhcnRzV2l0aCgnbG50YicpIHx8IHMuc3RhcnRzV2l0aCgnbG5iY3J0Jyk7XG4gIH1cblxuICBoYW5kbGVTY2FuUmVzdWx0IChkZWNvZGVkVGV4dCkge1xuICAgIGNvbnN0IHRleHQgPSBTdHJpbmcoZGVjb2RlZFRleHQgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICB0aGlzLnNldFN0YXRlKHsgc2Nhbk1vZGFsT3BlbjogZmFsc2UgfSk7XG4gICAgaWYgKHRoaXMuaXNMaWdodG5pbmdJbnZvaWNlKHRleHQpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbGlnaHRuaW5nSW52b2ljZTogdGV4dCwgdG86ICcnLCBhbW91bnRTYXRzOiAnJyB9KTtcbiAgICAgIHRoaXMuaGFuZGxlRGVjb2RlSW52b2ljZSh0ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHRvOiB0ZXh0LCBsaWdodG5pbmdJbnZvaWNlOiAnJywgZGVjb2RlZEludm9pY2U6IG51bGwgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlRGVjb2RlSW52b2ljZSAoaW52b2ljZSkge1xuICAgIGNvbnN0IGludiA9IFN0cmluZyhpbnZvaWNlIHx8IHRoaXMuc3RhdGUubGlnaHRuaW5nSW52b2ljZSB8fCAnJykudHJpbSgpO1xuICAgIGlmICghaW52KSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBhd2FpdCBkZWNvZGVMaWdodG5pbmdJbnZvaWNlKHRoaXMuc3RhdGUudXBzdHJlYW0sIGludik7XG4gICAgICBjb25zdCBkID0gZGVjb2RlZCAmJiAoZGVjb2RlZC5kZWNvZGVkIHx8IGRlY29kZWQpO1xuICAgICAgY29uc3QgYW1vdW50U2F0cyA9IGQgJiYgKGQubnVtX3NhdG9zaGlzID8/IGQubnVtU2F0b3NoaXMgPz8gZC5hbW91bnQpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRlY29kZWRJbnZvaWNlOiBkLFxuICAgICAgICBhbW91bnRTYXRzOiBhbW91bnRTYXRzICE9IG51bGwgPyBTdHJpbmcoYW1vdW50U2F0cykgOiB0aGlzLnN0YXRlLmFtb3VudFNhdHNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBkZWNvZGVkSW52b2ljZTogbnVsbCB9KTtcbiAgICB9XG4gIH1cblxuICBpc0xpa2VseVBheWpvaW5CaXAyMSAodGV4dCkge1xuICAgIGNvbnN0IHMgPSBTdHJpbmcodGV4dCB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IGxvd2VyID0gcy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghbG93ZXIuc3RhcnRzV2l0aCgnYml0Y29pbjonKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAvWz8mXXBqPS8udGVzdChzKSB8fCBsb3dlci5pbmNsdWRlcygncGo9Jyk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVDcmVhdGVQYXlqb2luUmVjZWl2ZUxpbmsgKCkge1xuICAgIGNvbnN0IHVzZUptID0gISF0aGlzLnN0YXRlLnBheWpvaW5SZWNlaXZlVXNlSm9pbm1hcmtldDtcbiAgICBjb25zdCBhZGRyID0gU3RyaW5nKHRoaXMuc3RhdGUucmVjZWl2ZUFkZHJlc3MgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXVzZUptICYmICFhZGRyKSB7XG4gICAgICBjb25zdCBpZCA9ICh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuaWRlbnRpdHkpIHx8IHt9O1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHBheWpvaW5SZWNlaXZlUmVzdWx0OiB7XG4gICAgICAgICAgZXJyb3I6IGBSZWNlaXZlIGFkZHJlc3MgaXMgcmVxdWlyZWQuICR7ZmFicmljSWRlbnRpdHlOZWVkRnVsbEtleVBsYWluKGlkKX0gT3IgcmVmcmVzaC5gXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgcGF5am9pblJlY2VpdmVCdXN5OiB0cnVlLCBwYXlqb2luUmVjZWl2ZVJlc3VsdDogbnVsbCB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVjZWl2ZVdhbGxldCA9IGdldE5leHRSZWNlaXZlV2FsbGV0Q29udGV4dCgodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmlkZW50aXR5KSB8fCB7fSk7XG4gICAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgY3JlYXRlUGF5am9pbkRlcG9zaXQodGhpcy5zdGF0ZS51cHN0cmVhbSwgcmVjZWl2ZVdhbGxldCwge1xuICAgICAgICAuLi4odXNlSm1cbiAgICAgICAgICA/IHsgcmVjZWl2ZVRlbXBsYXRlOiAnam9pbm1hcmtldF90YXByb290X3YxJyB9XG4gICAgICAgICAgOiB7IGFkZHJlc3M6IGFkZHIgfSksXG4gICAgICAgIGFtb3VudFNhdHM6IE51bWJlcih0aGlzLnN0YXRlLnJlY2VpdmVQYXlqb2luQW1vdW50U2F0cyB8fCAwKSxcbiAgICAgICAgbGFiZWw6ICdQYXltZW50cyByZWNlaXZlJyxcbiAgICAgICAgbWVtbzogJydcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHBheWpvaW5SZWNlaXZlUmVzdWx0OiBzZXNzaW9uLCBwYXlqb2luUmVjZWl2ZUJ1c3k6IGZhbHNlIH0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2lkID0gU3RyaW5nKHNlc3Npb24uaWQgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgaWYgKHNpZCkge1xuICAgICAgICAgIHB1c2hVaU5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBpZDogYHBheWpvaW4tc2Vzc2lvbi0ke3NpZH1gLFxuICAgICAgICAgICAga2luZDogJ3BheWpvaW4nLFxuICAgICAgICAgICAgdGl0bGU6ICdQYXlqb2luIHJlY2VpdmUgbGluayByZWFkeScsXG4gICAgICAgICAgICBzdWJ0aXRsZTogc2Vzc2lvbi5hbW91bnRTYXRzID8gYCR7c2Vzc2lvbi5hbW91bnRTYXRzfSBzYXRzYCA6ICdCSVAyMSArIHBqJyxcbiAgICAgICAgICAgIGhyZWY6IGAvcGF5bWVudHM/cGF5am9pblNlc3Npb249JHtlbmNvZGVVUklDb21wb25lbnQoc2lkKX1gLFxuICAgICAgICAgICAgY29weVRleHQ6IHNlc3Npb24uYmlwMjFVcmkgfHwgc2Vzc2lvbi5wcm9wb3NhbFVSTCB8fCBzaWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwYXlqb2luUmVjZWl2ZUJ1c3k6IGZhbHNlLFxuICAgICAgICBwYXlqb2luUmVjZWl2ZVJlc3VsdDogeyBlcnJvcjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVBheUxpZ2h0bmluZyAoKSB7XG4gICAgY29uc3QgaW52b2ljZSA9IFN0cmluZyh0aGlzLnN0YXRlLmxpZ2h0bmluZ0ludm9pY2UgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIWludm9pY2UpIHJldHVybiB0aGlzLnNldFN0YXRlKHsgcmVzdWx0OiB7IGVycm9yOiAnTGlnaHRuaW5nIGludm9pY2UgaXMgcmVxdWlyZWQuJyB9IH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBheUxpZ2h0bmluZ0ludm9pY2UodGhpcy5zdGF0ZS51cHN0cmVhbSwgdGhpcy5zdGF0ZS53YWxsZXQgfHwge30sIGludm9pY2UpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHJlc3VsdDogcmVzdWx0ICYmIHJlc3VsdC5lcnJvciA/IHJlc3VsdCA6IHsgb2s6IHRydWUgfSxcbiAgICAgICAgbGlnaHRuaW5nSW52b2ljZTogJycsXG4gICAgICAgIGRlY29kZWRJbnZvaWNlOiBudWxsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcmVzdWx0OiB7IGVycm9yOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfSB9KTtcbiAgICB9XG4gIH1cblxuICBfYWRtaW5Ub2tlbkZvckJyb2FkY2FzdCAoKSB7XG4gICAgcmV0dXJuIHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmFkbWluVG9rZW4pO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlTG9jYWxQYXlqb2luU2VuZCAoKSB7XG4gICAgY29uc3QgaWRlbnRpdHkgPSAodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmlkZW50aXR5KSB8fCB7fTtcbiAgICBjb25zdCB3ID0gdGhpcy5zdGF0ZS53YWxsZXQgfHwgZ2V0U3BlbmRXYWxsZXRDb250ZXh0KGlkZW50aXR5KTtcbiAgICBjb25zdCB4cHJ2ID0gU3RyaW5nKHcueHBydiB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IHhwdWIgPSBTdHJpbmcody54cHViIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCF4cHJ2IHx8ICF4cHViKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbG9jYWxQYXlqb2luUmVzdWx0OiB7XG4gICAgICAgICAgZXJyb3I6IGAke2ZhYnJpY0lkZW50aXR5TmVlZEZ1bGxLZXlQbGFpbihpZGVudGl0eSl9IExvY2FsIFBheWpvaW4gc2lnbmluZyB1c2VzIGtleXMgaW4gdGhpcyB0YWIgb25seSDigJQgdGhleSBhcmUgbm90IHNlbnQgdG8gdGhlIEh1Yi5gXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUJpdGNvaW5VcmlGb3JQYXlqb2luKHRoaXMuc3RhdGUudG8pO1xuICAgIGlmICghcGFyc2VkIHx8ICFwYXJzZWQucGpVcmwpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2NhbFBheWpvaW5SZXN1bHQ6IHsgZXJyb3I6ICdQYXN0ZSBhIGJpdGNvaW46IFVSSSB0aGF0IGluY2x1ZGVzIHBqPSAoUGF5am9pbiBlbmRwb2ludCkuJyB9IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZW5kQW1vdW50U2F0cyA9IHBhcnNlZC5hbW91bnRTYXRzICE9IG51bGxcbiAgICAgID8gcGFyc2VkLmFtb3VudFNhdHNcbiAgICAgIDogTWF0aC5yb3VuZChOdW1iZXIodGhpcy5zdGF0ZS5hbW91bnRTYXRzIHx8IDApKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzZW5kQW1vdW50U2F0cykgfHwgc2VuZEFtb3VudFNhdHMgPD0gMCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvY2FsUGF5am9pblJlc3VsdDogeyBlcnJvcjogJ1NldCBhbiBhbW91bnQgaW4gdGhlIFVSSSBvciBpbiB0aGUgQW1vdW50IChzYXRzKSBmaWVsZC4nIH0gfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBheUFkZHJlc3MgPSBTdHJpbmcocGFyc2VkLmFkZHJlc3MgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXBheUFkZHJlc3MpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2NhbFBheWpvaW5SZXN1bHQ6IHsgZXJyb3I6ICdVUkkgaXMgbWlzc2luZyB0aGUgcGF5ZWUgYWRkcmVzcy4nIH0gfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV0d29yayA9ICh0aGlzLnByb3BzLmJpdGNvaW4gJiYgdGhpcy5wcm9wcy5iaXRjb2luLm5ldHdvcmspID8gU3RyaW5nKHRoaXMucHJvcHMuYml0Y29pbi5uZXR3b3JrKS50b0xvd2VyQ2FzZSgpIDogJ3JlZ3Rlc3QnO1xuICAgIGNvbnN0IGFkbWluVG9rZW4gPSB0aGlzLl9hZG1pblRva2VuRm9yQnJvYWRjYXN0KCk7XG4gICAgaWYgKCFhZG1pblRva2VuKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbG9jYWxQYXlqb2luUmVzdWx0OiB7XG4gICAgICAgICAgZXJyb3I6ICdCcm9hZGNhc3RpbmcgcmVxdWlyZXMgdGhlIEh1YiBhZG1pbiB0b2tlbiAoc2V0dXAgdG9rZW4pLiBUaGUgc2lnbmVkIHRyYW5zYWN0aW9uIGlzIGJ1aWx0IGxvY2FsbHk7IG9ubHkgdGhlIGZpbmFsIGhleCBpcyBzZW50IHRvIHlvdXIgSHViIGZvciBzZW5kcmF3dHJhbnNhY3Rpb24uJ1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgbG9jYWxQYXlqb2luQnVzeTogdHJ1ZSwgbG9jYWxQYXlqb2luUmVzdWx0OiBudWxsIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB1dHhvcyA9IEFycmF5LmlzQXJyYXkodGhpcy5zdGF0ZS51dHhvcykgPyB0aGlzLnN0YXRlLnV0eG9zIDogW107XG4gICAgICBpZiAodXR4b3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHV0eG9zID0gYXdhaXQgZmV0Y2hVVFhPcyh0aGlzLnN0YXRlLnVwc3RyZWFtLCB0aGlzLnN0YXRlLndhbGxldCB8fCB7fSwgeyBuZXR3b3JrIH0pO1xuICAgICAgfVxuICAgICAgbGV0IG1heENoYW5nZUlkeCA9IC0xO1xuICAgICAgZm9yIChjb25zdCB1IG9mIHV0eG9zKSB7XG4gICAgICAgIGNvbnN0IGNpID0gY2hhaW5JbmRleEZyb21EZXNjcmlwdG9yKHUuZGVzYyk7XG4gICAgICAgIGlmIChjaSAmJiBjaS5jaGFpbiA9PT0gMSkgbWF4Q2hhbmdlSWR4ID0gTWF0aC5tYXgobWF4Q2hhbmdlSWR4LCBjaS5pbmRleCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjaGFuZ2VJbmRleCA9IG1heENoYW5nZUlkeCArIDE7XG4gICAgICBjb25zdCBjaGFuZ2VBZGRyZXNzID0gZGVyaXZlQWRkcmVzc0Zyb21YcHViKHhwdWIsIDEsIGNoYW5nZUluZGV4LCBuZXR3b3JrKTtcbiAgICAgIGlmICghY2hhbmdlQWRkcmVzcykgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZGVyaXZlIGEgY2hhbmdlIGFkZHJlc3MuJyk7XG5cbiAgICAgIGNvbnN0IGdldFByZXZUeEhleCA9ICh0eGlkKSA9PiBmZXRjaFRyYW5zYWN0aW9uSGV4KHRoaXMuc3RhdGUudXBzdHJlYW0sIHR4aWQpO1xuXG4gICAgICBjb25zdCBidWlsdCA9IGF3YWl0IGJ1aWxkT3JpZ2luYWxTaWduZWRQYXlqb2luUHNidCh7XG4gICAgICAgIHhwcnYsXG4gICAgICAgIHhwdWIsXG4gICAgICAgIG5ldHdvcmtOYW1lOiBuZXR3b3JrLFxuICAgICAgICB1dHhvcyxcbiAgICAgICAgcGF5QWRkcmVzcyxcbiAgICAgICAgc2VuZEFtb3VudFNhdHMsXG4gICAgICAgIGNoYW5nZUFkZHJlc3MsXG4gICAgICAgIGdldFByZXZUeEhleFxuICAgICAgfSk7XG5cbiAgICAgIGxldCBwcm9wb3NlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb3Bvc2VkID0gYXdhaXQgcG9zdFBheWpvaW5Qcm9wb3NhbFdpdGhEZXNrdG9wRmFsbGJhY2socGFyc2VkLnBqVXJsLCBidWlsdC5wc2J0QmFzZTY0KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgbXNnID0gZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICAgIGNvbnN0IGlzRGVzayA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5mYWJyaWNEZXNrdG9wICYmIHdpbmRvdy5mYWJyaWNEZXNrdG9wLmlzRGVza3RvcFNoZWxsO1xuICAgICAgICBpZiAoIWlzRGVzayAmJiAoL2ZldGNoL2kudGVzdChtc2cpIHx8IC9GYWlsZWQgdG8gZmV0Y2gvaS50ZXN0KG1zZykgfHwgL05ldHdvcmtFcnJvci9pLnRlc3QobXNnKSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7bXNnfSBCcm93c2VycyBvZnRlbiBibG9jayBjcm9zcy1vcmlnaW4gUGF5am9pbiBQT1NULiBVc2UgdGhlIEZhYnJpYyBkZXNrdG9wIGFwcCwgb3IgcGF5IHdpdGggYW4gZXh0ZXJuYWwgd2FsbGV0LmApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNpZ25lZFR3aWNlID0gc2lnbk91clBheWpvaW5JbnB1dHMocHJvcG9zZWQsIGJ1aWx0Lm91cklucHV0SW5kaWNlcywgeHBydiwgeHB1YiwgbmV0d29yayk7XG4gICAgICBjb25zdCBoZXggPSBmaW5hbGl6ZUFuZEV4dHJhY3RIZXgoc2lnbmVkVHdpY2UsIG5ldHdvcmspO1xuICAgICAgY29uc3Qgb3V0ID0gYXdhaXQgYnJvYWRjYXN0UmF3VHJhbnNhY3Rpb24odGhpcy5zdGF0ZS51cHN0cmVhbSwgaGV4LCB7IGFkbWluVG9rZW4gfSk7XG4gICAgICBjb25zdCB0eGlkID0gb3V0ICYmIChvdXQudHhpZCB8fCAob3V0LnJlc3VsdCAmJiBvdXQucmVzdWx0LnR4aWQpKTtcbiAgICAgIGlmICh0eGlkICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2xpZW50QmFsYW5jZVVwZGF0ZScpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBsb2NhbFBheWpvaW5CdXN5OiBmYWxzZSxcbiAgICAgICAgbG9jYWxQYXlqb2luUmVzdWx0OiB7IG9rOiB0cnVlLCB0eGlkOiB0eGlkIHx8IG51bGwsIHJhdzogb3V0IH1cbiAgICAgIH0pO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBsb2NhbFBheWpvaW5CdXN5OiBmYWxzZSxcbiAgICAgICAgbG9jYWxQYXlqb2luUmVzdWx0OiB7IGVycm9yOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZhYnJpYyBQYXlqb2luIGRlcG9zaXQgVVJJICsgU0lHSEFTSF9BTEx8QU5ZT05FQ0FOUEFZICsgSHViIHdhbGxldCBjby1pbnB1dCAoYWRtaW4pLlxuICAgKiBCSVAyMSBgcGo9YCBtdXN0IHRhcmdldCB0aGlzIEh1YuKAmXMgYC9zZXJ2aWNlcy9wYXlqb2luL3Nlc3Npb25zLzxpZD4vcHJvcG9zYWxzYC5cbiAgICovXG4gIGFzeW5jIGhhbmRsZUFjcEh1YkJvb3N0UGF5am9pbiAoKSB7XG4gICAgY29uc3QgaWRlbnRpdHkgPSAodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmlkZW50aXR5KSB8fCB7fTtcbiAgICBjb25zdCB3ID0gdGhpcy5zdGF0ZS53YWxsZXQgfHwgZ2V0U3BlbmRXYWxsZXRDb250ZXh0KGlkZW50aXR5KTtcbiAgICBjb25zdCB4cHJ2ID0gU3RyaW5nKHcueHBydiB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IHhwdWIgPSBTdHJpbmcody54cHViIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCF4cHJ2IHx8ICF4cHViKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWNwUGF5am9pblJlc3VsdDoge1xuICAgICAgICAgIGVycm9yOiBgJHtmYWJyaWNJZGVudGl0eU5lZWRGdWxsS2V5UGxhaW4oaWRlbnRpdHkpfSB4cHJ2IG5ldmVyIGxlYXZlcyB0aGUgYnJvd3Nlci5gXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUJpdGNvaW5VcmlGb3JQYXlqb2luKHRoaXMuc3RhdGUudG8pO1xuICAgIGlmICghcGFyc2VkIHx8ICFwYXJzZWQucGpVcmwpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBhY3BQYXlqb2luUmVzdWx0OiB7IGVycm9yOiAnUGFzdGUgYSBiaXRjb2luOiBVUkkgdGhhdCBpbmNsdWRlcyBwaj0uJyB9IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZXNzaW9uSWQgPSBleHRyYWN0RmFicmljUGF5am9pblNlc3Npb25JZEZyb21QalVybChwYXJzZWQucGpVcmwpO1xuICAgIGlmICghc2Vzc2lvbklkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgYWNwUGF5am9pblJlc3VsdDoge1xuICAgICAgICAgIGVycm9yOiAnRm9yIHRoaXMgZmxvdywgcGo9IG11c3QgYmUgdGhpcyBIdWLigJlzIHBheWpvaW4gcHJvcG9zYWxzIFVSTCAo4oCmL3BheWpvaW4vc2Vzc2lvbnMvPGlkPi9wcm9wb3NhbHMpLiBDcmVhdGUgYSBzZXNzaW9uIHVuZGVyIFJlcXVlc3QgUGF5bWVudCBhbmQgcGFzdGUgaXRzIEJJUDIxIFVSSS4nXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZW5kQW1vdW50U2F0cyA9IHBhcnNlZC5hbW91bnRTYXRzICE9IG51bGxcbiAgICAgID8gcGFyc2VkLmFtb3VudFNhdHNcbiAgICAgIDogTWF0aC5yb3VuZChOdW1iZXIodGhpcy5zdGF0ZS5hbW91bnRTYXRzIHx8IDApKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzZW5kQW1vdW50U2F0cykgfHwgc2VuZEFtb3VudFNhdHMgPD0gMCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGFjcFBheWpvaW5SZXN1bHQ6IHsgZXJyb3I6ICdTZXQgYW4gYW1vdW50IGluIHRoZSBVUkkgb3IgQW1vdW50IChzYXRzKS4nIH0gfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBheUFkZHJlc3MgPSBTdHJpbmcocGFyc2VkLmFkZHJlc3MgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXBheUFkZHJlc3MpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBhY3BQYXlqb2luUmVzdWx0OiB7IGVycm9yOiAnVVJJIGlzIG1pc3NpbmcgdGhlIHBheWVlIGFkZHJlc3MuJyB9IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXR3b3JrID0gKHRoaXMucHJvcHMuYml0Y29pbiAmJiB0aGlzLnByb3BzLmJpdGNvaW4ubmV0d29yaykgPyBTdHJpbmcodGhpcy5wcm9wcy5iaXRjb2luLm5ldHdvcmspLnRvTG93ZXJDYXNlKCkgOiAncmVndGVzdCc7XG4gICAgY29uc3QgYWRtaW5Ub2tlbiA9IHRoaXMuX2FkbWluVG9rZW5Gb3JCcm9hZGNhc3QoKTtcbiAgICBpZiAoIWFkbWluVG9rZW4pIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBhY3BQYXlqb2luUmVzdWx0OiB7IGVycm9yOiAnQWRtaW4gdG9rZW4gcmVxdWlyZWQ6IEh1YiBzaWducyBhbiBleHRyYSB3YWxsZXQgaW5wdXQgYW5kIHlvdSBicm9hZGNhc3QgdmlhIHRoZSBIdWIuJyB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgYWNwUGF5am9pbkJ1c3k6IHRydWUsIGFjcFBheWpvaW5SZXN1bHQ6IG51bGwgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB1dHhvcyA9IEFycmF5LmlzQXJyYXkodGhpcy5zdGF0ZS51dHhvcykgPyB0aGlzLnN0YXRlLnV0eG9zIDogW107XG4gICAgICBpZiAodXR4b3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHV0eG9zID0gYXdhaXQgZmV0Y2hVVFhPcyh0aGlzLnN0YXRlLnVwc3RyZWFtLCB0aGlzLnN0YXRlLndhbGxldCB8fCB7fSwgeyBuZXR3b3JrIH0pO1xuICAgICAgfVxuICAgICAgbGV0IG1heENoYW5nZUlkeCA9IC0xO1xuICAgICAgZm9yIChjb25zdCB1IG9mIHV0eG9zKSB7XG4gICAgICAgIGNvbnN0IGNpID0gY2hhaW5JbmRleEZyb21EZXNjcmlwdG9yKHUuZGVzYyk7XG4gICAgICAgIGlmIChjaSAmJiBjaS5jaGFpbiA9PT0gMSkgbWF4Q2hhbmdlSWR4ID0gTWF0aC5tYXgobWF4Q2hhbmdlSWR4LCBjaS5pbmRleCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjaGFuZ2VJbmRleCA9IG1heENoYW5nZUlkeCArIDE7XG4gICAgICBjb25zdCBjaGFuZ2VBZGRyZXNzID0gZGVyaXZlQWRkcmVzc0Zyb21YcHViKHhwdWIsIDEsIGNoYW5nZUluZGV4LCBuZXR3b3JrKTtcbiAgICAgIGlmICghY2hhbmdlQWRkcmVzcykgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZGVyaXZlIGEgY2hhbmdlIGFkZHJlc3MuJyk7XG4gICAgICBjb25zdCBnZXRQcmV2VHhIZXggPSAodHhpZCkgPT4gZmV0Y2hUcmFuc2FjdGlvbkhleCh0aGlzLnN0YXRlLnVwc3RyZWFtLCB0eGlkKTtcblxuICAgICAgY29uc3QgYnVpbHQgPSBhd2FpdCBidWlsZE9yaWdpbmFsU2lnbmVkUGF5am9pblBzYnQoe1xuICAgICAgICB4cHJ2LFxuICAgICAgICB4cHViLFxuICAgICAgICBuZXR3b3JrTmFtZTogbmV0d29yayxcbiAgICAgICAgdXR4b3MsXG4gICAgICAgIHBheUFkZHJlc3MsXG4gICAgICAgIHNlbmRBbW91bnRTYXRzLFxuICAgICAgICBjaGFuZ2VBZGRyZXNzLFxuICAgICAgICBnZXRQcmV2VHhIZXgsXG4gICAgICAgIGFueW9uZUNhblBheUFsbDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHN1Ym1pdFBheWpvaW5Qcm9wb3NhbCh0aGlzLnN0YXRlLnVwc3RyZWFtLCBzZXNzaW9uSWQsIHsgcHNidDogYnVpbHQucHNidEJhc2U2NCB9KTtcblxuICAgICAgY29uc3QgYm9vc3RlZCA9IGF3YWl0IGFwcGx5UGF5am9pbkFjcEh1YkJvb3N0KFxuICAgICAgICB0aGlzLnN0YXRlLnVwc3RyZWFtLFxuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIGFkbWluVG9rZW4sXG4gICAgICAgIHsgcHNidDogYnVpbHQucHNidEJhc2U2NCB9XG4gICAgICApO1xuICAgICAgaWYgKCFib29zdGVkIHx8IGJvb3N0ZWQuc3RhdHVzICE9PSAnc3VjY2VzcycgfHwgIWJvb3N0ZWQucHNidEJhc2U2NCkge1xuICAgICAgICBjb25zdCBtc2cgPSAoYm9vc3RlZCAmJiAoYm9vc3RlZC5tZXNzYWdlIHx8IGJvb3N0ZWQuZXJyb3IpKSB8fCAnQUNQIEh1YiBib29zdCBmYWlsZWQnO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc2FmZUJyaWVmTWVzc2FnZShtc2csICdBQ1AgSHViIGJvb3N0IGZhaWxlZCcpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGV4ID0gZmluYWxpemVBbmRFeHRyYWN0SGV4KGJvb3N0ZWQucHNidEJhc2U2NCwgbmV0d29yayk7XG4gICAgICBjb25zdCBvdXQgPSBhd2FpdCBicm9hZGNhc3RSYXdUcmFuc2FjdGlvbih0aGlzLnN0YXRlLnVwc3RyZWFtLCBoZXgsIHsgYWRtaW5Ub2tlbiB9KTtcbiAgICAgIGNvbnN0IHR4aWQgPSBvdXQgJiYgKG91dC50eGlkIHx8IChvdXQucmVzdWx0ICYmIG91dC5yZXN1bHQudHhpZCkpO1xuICAgICAgaWYgKHR4aWQgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjbGllbnRCYWxhbmNlVXBkYXRlJykpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGFjcFBheWpvaW5CdXN5OiBmYWxzZSxcbiAgICAgICAgYWNwUGF5am9pblJlc3VsdDoge1xuICAgICAgICAgIG9rOiB0cnVlLFxuICAgICAgICAgIHR4aWQ6IHR4aWQgfHwgbnVsbCxcbiAgICAgICAgICBhZGRlZE91dHBvaW50OiBib29zdGVkLmFkZGVkT3V0cG9pbnQsXG4gICAgICAgICAgYWRkZWRWYWx1ZVNhdHM6IGJvb3N0ZWQuYWRkZWRWYWx1ZVNhdHMsXG4gICAgICAgICAgcmF3OiBvdXRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGFjcFBheWpvaW5CdXN5OiBmYWxzZSxcbiAgICAgICAgYWNwUGF5am9pblJlc3VsdDogeyBlcnJvcjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVN1Ym1pdFBheWpvaW5Qcm9wb3NhbCAoKSB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gU3RyaW5nKHRoaXMuc3RhdGUucGF5am9pblNlc3Npb25JZCB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IHBzYnQgPSBTdHJpbmcodGhpcy5zdGF0ZS5wYXlqb2luUHNidCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghc2Vzc2lvbklkKSByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7IHBheWpvaW5SZXN1bHQ6IHsgZXJyb3I6ICdQYXlqb2luIHNlc3Npb24gSUQgaXMgcmVxdWlyZWQuJyB9IH0pO1xuICAgIGlmICghcHNidCkgcmV0dXJuIHRoaXMuc2V0U3RhdGUoeyBwYXlqb2luUmVzdWx0OiB7IGVycm9yOiAnUFNCVCBpcyByZXF1aXJlZCBmb3IgYSBQYXlqb2luIHByb3Bvc2FsLicgfSB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdWJtaXRQYXlqb2luUHJvcG9zYWwodGhpcy5zdGF0ZS51cHN0cmVhbSwgc2Vzc2lvbklkLCB7IHBzYnQgfSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcGF5am9pblJlc3VsdDogcmVzdWx0LCBwYXlqb2luUHNidDogJycgfSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlcnIgPSByZXN1bHQgJiYgKHJlc3VsdC5lcnJvciB8fCByZXN1bHQubWVzc2FnZSk7XG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcHVzaFVpTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIGlkOiBgcGF5am9pbi1wcm9wb3NhbC0ke3Nlc3Npb25JZH0tJHtEYXRlLm5vdygpfWAsXG4gICAgICAgICAgICBraW5kOiAncGF5am9pbl9wcm9wb3NhbCcsXG4gICAgICAgICAgICB0aXRsZTogJ1BheWpvaW4gcHJvcG9zYWwgc3VibWl0dGVkJyxcbiAgICAgICAgICAgIHN1YnRpdGxlOiBzZXNzaW9uSWQsXG4gICAgICAgICAgICBocmVmOiBgL3BheW1lbnRzP3BheWpvaW5TZXNzaW9uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlc3Npb25JZCl9YCxcbiAgICAgICAgICAgIGNvcHlUZXh0OiBzZXNzaW9uSWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBwYXlqb2luUmVzdWx0OiB7IGVycm9yOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfSB9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uc09ubHkgPSAhISh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMudHJhbnNhY3Rpb25zT25seSk7XG4gICAgY29uc3Qgd2FsbGV0ID0gdGhpcy5zdGF0ZS53YWxsZXQgfHwge307XG4gICAgY29uc3QgaGFzQWRtaW4gPSAhIXJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmFkbWluVG9rZW4pO1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnN0YXRlLnN1bW1hcnkgfHwge307XG4gICAgY29uc3QgYmFsYW5jZVNhdHMgPSBzdW1tYXJ5ICYmIE51bWJlci5pc0Zpbml0ZShzdW1tYXJ5LmJhbGFuY2VTYXRzKSA/IHN1bW1hcnkuYmFsYW5jZVNhdHMgOiAoc3VtbWFyeSAmJiBzdW1tYXJ5LnN1bW1hcnkgJiYgc3VtbWFyeS5zdW1tYXJ5LnRydXN0ZWQgIT0gbnVsbCA/IE1hdGgucm91bmQoTnVtYmVyKHN1bW1hcnkuc3VtbWFyeS50cnVzdGVkKSAqIFNBVFNfUEVSX0JUQykgOiBudWxsKTtcbiAgICBjb25zdCBiYWxhbmNlRGlzcGxheSA9IGJhbGFuY2VTYXRzICE9IG51bGxcbiAgICAgID8gKGJhbGFuY2VTYXRzID49IFNBVFNfUEVSX0JUQyA/IGAkeyhiYWxhbmNlU2F0cyAvIFNBVFNfUEVSX0JUQykudG9GaXhlZCg0KX0gQlRDYCA6IGAke2Zvcm1hdFNhdHNEaXNwbGF5KGJhbGFuY2VTYXRzKX0gc2F0c2ApXG4gICAgICA6ICduL2EnO1xuICAgIGNvbnN0IGxuID0gdGhpcy5zdGF0ZS5saWdodG5pbmdTdW1tYXJ5IHx8IHt9O1xuICAgIGNvbnN0IGxuQ2hhbnMgPSBBcnJheS5pc0FycmF5KHRoaXMuc3RhdGUubGlnaHRuaW5nQ2hhbm5lbHMpID8gdGhpcy5zdGF0ZS5saWdodG5pbmdDaGFubmVscyA6IFtdO1xuICAgIGNvbnN0IGxuT3V0cHV0cyA9IEFycmF5LmlzQXJyYXkodGhpcy5zdGF0ZS5saWdodG5pbmdPdXRwdXRzKSA/IHRoaXMuc3RhdGUubGlnaHRuaW5nT3V0cHV0cyA6IFtdO1xuICAgIGNvbnN0IGxuTWFuYWdlZCA9IHRoaXMuZ2V0TGlnaHRuaW5nQmFsYW5jZUZyb21PdXRwdXRzKGxuT3V0cHV0cyk7XG4gICAgY29uc3QgbG5BY3RpdmUgPSAhIShsbiAmJiAobG4uYXZhaWxhYmxlID09PSB0cnVlIHx8IGxuLnN0YXR1cyA9PT0gJ09LJyB8fCBsbi5zdGF0dXMgPT09ICdTVFVCJyB8fCBsbi5zdGF0dXMgPT09ICdSVU5OSU5HJykpO1xuICAgIGNvbnN0IHNlbmRUbyA9IFN0cmluZyh0aGlzLnN0YXRlLnRvIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3Qgc2VuZEFtdCA9IE51bWJlcih0aGlzLnN0YXRlLmFtb3VudFNhdHMpO1xuICAgIGNvbnN0IGNhblNlbmRPbkNoYWluQmFzZSA9ICF0aGlzLnN0YXRlLmxpZ2h0bmluZ0ludm9pY2UgJiYgc2VuZFRvLmxlbmd0aCA+IDAgJiYgTnVtYmVyLmlzRmluaXRlKHNlbmRBbXQpICYmIHNlbmRBbXQgPiAwO1xuICAgIGNvbnN0IGNhblNlbmRPbkNoYWluID0gY2FuU2VuZE9uQ2hhaW5CYXNlICYmIGhhc0FkbWluO1xuICAgIGNvbnN0IGh1YkJpdGNvaW4gPSAodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmJpdGNvaW4pIHx8IHt9O1xuICAgIGNvbnN0IGh1YldhbGxldFNhdHMgPSBOdW1iZXIoaHViQml0Y29pbiAmJiBodWJCaXRjb2luLmJhbGFuY2VTYXRzICE9IG51bGxcbiAgICAgID8gaHViQml0Y29pbi5iYWxhbmNlU2F0c1xuICAgICAgOiBNYXRoLnJvdW5kKE51bWJlcihodWJCaXRjb2luICYmIGh1YkJpdGNvaW4uYmFsYW5jZSAhPSBudWxsID8gaHViQml0Y29pbi5iYWxhbmNlIDogMCkgKiBTQVRTX1BFUl9CVEMpKTtcbiAgICBjb25zdCBzaGFyZWRTZXNzaW9uU2F0cyA9IE51bWJlcihsbk1hbmFnZWQuY29uZmlybWVkIHx8IDApICsgTnVtYmVyKGxuTWFuYWdlZC51bmNvbmZpcm1lZCB8fCAwKSArIE51bWJlcihsbk1hbmFnZWQuaW1tYXR1cmUgfHwgMCk7XG4gICAgY29uc3QgcGF5am9pblNlc3Npb25zID0gQXJyYXkuaXNBcnJheSh0aGlzLnN0YXRlLnBheWpvaW5TZXNzaW9ucykgPyB0aGlzLnN0YXRlLnBheWpvaW5TZXNzaW9ucyA6IFtdO1xuICAgIGNvbnN0IHBheWpvaW5PcGVuQ291bnQgPSBwYXlqb2luU2Vzc2lvbnMuZmlsdGVyKChzKSA9PiB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBTdHJpbmcoKHMgJiYgcy5zdGF0dXMpIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHN0YXR1cyAhPT0gJ2V4cGlyZWQnICYmIHN0YXR1cyAhPT0gJ3N1Y2Nlc3MnO1xuICAgIH0pLmxlbmd0aDtcbiAgICBjb25zdCBsMUhlaWdodCA9IGh1YkJpdGNvaW4uYXZhaWxhYmxlICYmIGh1YkJpdGNvaW4uaGVpZ2h0ICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcihodWJCaXRjb2luLmhlaWdodCkpXG4gICAgICA/IE51bWJlcihodWJCaXRjb2luLmhlaWdodClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBpZGVudGl0eUZvcldhbGxldCA9ICh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuaWRlbnRpdHkpIHx8IHt9O1xuICAgIGNvbnN0IHdhbGxldEN0eCA9IGdldFNwZW5kV2FsbGV0Q29udGV4dChpZGVudGl0eUZvcldhbGxldCk7XG4gICAgY29uc3QgYnRjV2F0Y2hPbmx5ID0gISEod2FsbGV0Q3R4ICYmIHdhbGxldEN0eC54cHViICYmICF3YWxsZXRDdHgueHBydik7XG4gICAgY29uc3QgZXh0U2lnbmluZyA9IGhhc0V4dGVybmFsU2lnbmluZ0RlbGVnYXRpb24oKTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9J2ZhZGUtaW4nPlxuICAgICAgICA8U2VnbWVudCBsb2FkaW5nPXt0aGlzLnN0YXRlLmxvYWRpbmd9PlxuICAgICAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cImZhYnJpYy1iaXRjb2luLXBheW1lbnRzLWgyXCIgYXJpYS1kZXNjcmliZWRieT1cImZhYnJpYy1iaXRjb2luLXBheW1lbnRzLWludHJvXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHJvbGU9XCJiYW5uZXJcIlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnc3RpY2t5JyxcbiAgICAgICAgICAgICAgICB0b3A6ICc2LjVyZW0nLFxuICAgICAgICAgICAgICAgIHpJbmRleDogMTIsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNmZmYnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmdCb3R0b206ICcwLjM1ZW0nLFxuICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogJzAuMjVlbScsXG4gICAgICAgICAgICAgICAgYm94U2hhZG93OiAnMCAxcHggMCByZ2JhKDM0LCAzNiwgMzgsIDAuMTUpJyxcbiAgICAgICAgICAgICAgICBzY3JvbGxNYXJnaW5Ub3A6ICc2LjVyZW0nXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYWxpZ25JdGVtczogJ3N0cmV0Y2gnLCBnYXA6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICcwLjVlbScsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgYXJpYS1sYWJlbD1cIkJhY2sgdG8gQml0Y29pbiBkYXNoYm9hcmRcIiB0aXRsZT1cIkJpdGNvaW4gaG9tZSAoc3RhdHVzLCB3YWxsZXQsIGV4cGxvcmVyLCBhbmQgdG9vbHMpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJhcnJvdyBsZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgQml0Y29pblxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDJcIiBpZD1cImZhYnJpYy1iaXRjb2luLXBheW1lbnRzLWgyXCIgc3R5bGU9e3sgbWFyZ2luOiAwLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICcwLjM1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY3JlZGl0IGNhcmQgb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxIZWFkZXIuQ29udGVudD57dHJhbnNhY3Rpb25zT25seSA/ICdUcmFuc2FjdGlvbnMnIDogJ1BheW1lbnRzJ308L0hlYWRlci5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiByb2xlPVwidG9vbGJhclwiIGFyaWEtbGFiZWw9XCJSZWxhdGVkIEJpdGNvaW4gcGFnZXNcIiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuMzVlbScsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pbi9pbnZvaWNlcyNmYWJyaWMtaW52b2ljZXMtdGFiLWRlbW9cIiBiYXNpYyBzaXplPVwic21hbGxcIiB0aXRsZT1cIlJlY2VpdmVyIHRhYiBhbmQgd2Fsa3Rocm91Z2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImZpbGUgYWx0ZXJuYXRlIG91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICBJbnZvaWNlc1xuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICB7IXRyYW5zYWN0aW9uc09ubHkgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vZmF1Y2V0XCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgdGl0bGU9XCJSZWd0ZXN0OiBmdW5kIGFuIGFkZHJlc3MgZnJvbSB0aGUgSHViIHdhbGxldFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJ0aW50XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBGYXVjZXRcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vcmVzb3VyY2VzXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgdGl0bGU9XCJIVFRQIHJlc291cmNlcyBhbmQgTDEgcGF5bWVudCB2ZXJpZmljYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNpdGVtYXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZXNcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pbi9jcm93ZGZ1bmRzXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgdGl0bGU9XCJUYXByb290IGNhbXBhaWduIHZhdWx0LCBBQ1AgUFNCVCwgUGF5am9pbiBkZXBvc2l0IHRvIHZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJoZWFydCBvdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgQ3Jvd2RmdW5kc1xuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dGhpcy5zdGF0ZS5lcnJvciAmJiA8TWVzc2FnZSBuZWdhdGl2ZSBjb250ZW50PXt0aGlzLnN0YXRlLmVycm9yfSAvPn1cbiAgICAgICAgICAgIHshdHJhbnNhY3Rpb25zT25seSA/IChcbiAgICAgICAgICAgICAgPGRpdiBpZD1cImZhYnJpYy1iaXRjb2luLXBheW1lbnRzLWludHJvXCI+XG4gICAgICAgICAgICAgIDxNZXNzYWdlIGluZm8+XG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAwLCBjb2xvcjogJyMzMzMnIH19PlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5TaW5nbGUgUGF5am9pbiByZWNlaXZlciAmYW1wOyBMaWdodG5pbmcgcGF0aDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgY29sb3I6ICcjNTU1JyB9fT5cbiAgICAgICAgICAgICAgICAgIFRoaXMgSHViIGV4cG9zZXMgb25lIDxzdHJvbmc+UGF5am9pbjwvc3Ryb25nPiBSRVNUIGJhc2UgdW5kZXIgPGNvZGU+L3NlcnZpY2VzL3BheWpvaW48L2NvZGU+IChCSVA3OC1zaGFwZWQgUE9TVDsgPGNvZGU+ZmFicmljUHJvdG9jb2wuYXN5bmNQYXlqb2luUm9hZG1hcDwvY29kZT4gaXMgQklQNzc7IDxjb2RlPi9wYXltZW50cy9wYXlqb2luPC9jb2RlPiBpcyBhbiBvcHRpb25hbCBtaXJyb3IpLiA8c3Ryb25nPkxpZ2h0bmluZzwvc3Ryb25nPiB1c2VzIHRoZSBIdWImYXBvcztzIG1hbmFnZWQgbm9kZS5cbiAgICAgICAgICAgICAgICAgIE9uLWNoYWluIDxzdHJvbmc+cmVjZWl2ZTwvc3Ryb25nPiBhbmQgPHN0cm9uZz5zZW5kPC9zdHJvbmc+IGRlZmF1bHQgdG8gUGF5am9pbi1vcmllbnRlZCBmbG93cyBiZWxvdzsgdHVybiBlaXRoZXIgb2ZmIHdpdGggdGhlIHRvZ2dsZXMgd2hlbiB5b3Ugd2FudCBhIHBsYWluIGFkZHJlc3Mgb3IgYSBzaW1wbGUgYnJvYWRjYXN0LlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPkJhbGFuY2U6PC9zdHJvbmc+IHtiYWxhbmNlRGlzcGxheX1cbiAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJyB9fT5cbiAgICAgICAgICAgICAgKFdhbGxldDogPGNvZGU+e3dhbGxldC53YWxsZXRJZCA/IGAke1N0cmluZyh3YWxsZXQud2FsbGV0SWQpLnNsaWNlKDAsIDEyKX3igKZgIDogJ3VuYXZhaWxhYmxlJ308L2NvZGU+KVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgeyF0cmFuc2FjdGlvbnNPbmx5ID8gKFxuICAgICAgICAgICAgPEJpdGNvaW5XYWxsZXRCcmFuY2hCYXIgaWRlbnRpdHk9eyh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuaWRlbnRpdHkpIHx8IHt9fSAvPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgeyF0cmFuc2FjdGlvbnNPbmx5ICYmIChleHRTaWduaW5nIHx8IGJ0Y1dhdGNoT25seSkgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19IGlkPVwiZmFicmljLXBheW1lbnRzLWtleS1zYWZldHlcIj5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPktleXMgYW5kIHRoaXMgc2NyZWVuPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGNvbG9yOiAnIzMzMycgfX0+XG4gICAgICAgICAgICAgICAgUmVjZWl2ZSBhZGRyZXNzZXMgYW5kIGhlYWRlciBiYWxhbmNlIHVzZSB5b3VyIEZhYnJpYyBpZGVudGl0eSA8c3Ryb25nPnhwdWI8L3N0cm9uZz4gKEJJUDQ0IGFjY291bnQgMCkueycgJ31cbiAgICAgICAgICAgICAgICA8c3Ryb25nPk1ha2UgUGF5bWVudDwvc3Ryb25nPiBzcGVuZHMgdGhlIDxzdHJvbmc+SHViIG5vZGUgd2FsbGV0PC9zdHJvbmc+IHdpdGggdGhlIHNldHVwIGFkbWluIHRva2VuLCBub3QgcHJpdmF0ZSBrZXlzIHN0b3JlZCBpbiB0aGlzIGJyb3dzZXIuXG4gICAgICAgICAgICAgICAgSW4tYnJvd3NlciA8c3Ryb25nPlBheWpvaW48L3N0cm9uZz4gc2lnbmluZyBuZWVkcyBhIGZ1bGx5IHVubG9ja2VkIGxvY2FsIGlkZW50aXR5ICh4cHJ2IGluIHRoaXMgdGFiKS57JyAnfVxuICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzL2JpdGNvaW4td2FsbGV0XCI+Qml0Y29pbiB3YWxsZXQgJmFtcDsgZGVyaXZhdGlvbjwvTGluaz5cbiAgICAgICAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzL3NlY3VyaXR5XCI+U2VjdXJpdHkgJmFtcDsgZGVsZWdhdGlvbjwvTGluaz4g4oCUIHJldm9rZSBkZXNrdG9wIGRlbGVnYXRpb24gb24gc2hhcmVkIG1hY2hpbmVzLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHshdHJhbnNhY3Rpb25zT25seSA/IChcbiAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgaWQ9XCJmYWJyaWMtcGF5bWVudHMtdGFiLWRlbW9cIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPlR3by10YWIgaW52b2ljZSBwYXltZW50IChwcm9kdWN0aW9uIHdhbGt0aHJvdWdoKTwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICA8TGlzdCBvcmRlcmVkIHJlbGF4ZWQgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGNvbG9yOiAnIzMzMycgfX0+XG4gICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5SZWd0ZXN0IGZ1bmRzOjwvc3Ryb25nPiBGdW5kIHRoZSBIdWIgd2FsbGV0IHdpdGggPHN0cm9uZz5HZW5lcmF0ZSBCbG9jazwvc3Ryb25nPiBvbnsnICd9XG4gICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pbiNmYWJyaWMtYml0Y29pbi1yZWd0ZXN0LXRvb2xiYXJcIj5CaXRjb2luPC9MaW5rPlxuICAgICAgICAgICAgICAgIC4gT3B0aW9uYWxseSB1c2V7JyAnfVxuICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vZmF1Y2V0XCI+RmF1Y2V0PC9MaW5rPlxuICAgICAgICAgICAgICAgIHsnICd9d2l0aCA8c3Ryb25nPlVzZSBteSByZWNlaXZlIGFkZHJlc3M8L3N0cm9uZz4gb24gQml0Y29pbiAobmV4dCBleHRlcm5hbCBhZGRyZXNzIG9uIEJJUDQ0IGFjY291bnQgMCB1bmRlciB5b3VyIGlkZW50aXR5KS4gSGVhZGVyIGJhbGFuY2UgdXNlcyB0aGUgc2FtZSBhY2NvdW50LlxuICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICBSZWNlaXZlciB0YWI6eycgJ31cbiAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2ludm9pY2VzI2ZhYnJpYy1pbnZvaWNlcy10YWItZGVtb1wiPkludm9pY2VzPC9MaW5rPlxuICAgICAgICAgICAgICAgIHsnICd9KHNhbWUgd2Fsa3Rocm91Z2ggYmFubmVyKS4gQ3JlYXRlIGFuIGludm9pY2U7IHJlY2VpdmVzIHVzZSBCSVA0NCBhY2NvdW50IDxzdHJvbmc+MDwvc3Ryb25nPiB1bmRlciB5b3VyIEZhYnJpYyBpZGVudGl0eS5cbiAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgV2l0aCA8c3Ryb25nPk9wZW4gcGF5ZXIgdGFiIChwcmVmaWxsZWQpPC9zdHJvbmc+LCBhZGRyZXNzIGFuZCBhbW91bnQgY29tZSBmcm9tIDxjb2RlPnBheVRvPC9jb2RlPiAvIDxjb2RlPnBheUFtb3VudFNhdHM8L2NvZGU+IGFuZCB0aGUgaGFzaCBzY3JvbGxzIHRvIE1ha2UgUGF5bWVudC4gT3RoZXJ3aXNleycgJ31cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI2ZhYnJpYy1idGMtbWFrZS1wYXltZW50LWg0XCI+anVtcCB0byBNYWtlIFBheW1lbnQ8L2E+XG4gICAgICAgICAgICAgICAgeycgJ31hbmQgcGFzdGUgdGhlIGludm9pY2UgZGV0YWlscyAoYWRtaW4gdG9rZW4gcmVxdWlyZWQgZm9yIEh1YiB3YWxsZXQgYnJvYWRjYXN0KS5cbiAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgT24gdGhlIEludm9pY2VzIHRhYiwgdXNlIDxzdHJvbmc+Q29uZmlybSBwYXltZW50PC9zdHJvbmc+IHdpdGggdGhlIHR4aWQgb24gdGhlIGludm9pY2UgY2FyZCwgb3IgdmVyaWZ5IHZpYXsnICd9XG4gICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pbi9yZXNvdXJjZXNcIj5SZXNvdXJjZXM8L0xpbms+LlxuICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPkRvY3VtZW50czo8L3N0cm9uZz57JyAnfVxuICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL2RvY3VtZW50c1wiPkRvY3VtZW50czwvTGluaz5cbiAgICAgICAgICAgICAgICB7JyAnfeKAlCA8c3Ryb25nPlB1cmNoYXNlPC9zdHJvbmc+IChIVExDKSBhbmQgPHN0cm9uZz5EaXN0cmlidXRlPC9zdHJvbmc+IChzdG9yYWdlIGNvbnRyYWN0KSBib3RoIHNldHRsZSBvbiBMMTsgdGhlIHB1cmNoYXNlIG1vZGFsIGFjY2VwdHMgeW91ciBwYXlpbmcgdHhpZCBvciA8c3Ryb25nPlBheSBmcm9tIGh1YiB3YWxsZXQ8L3N0cm9uZz4gKGFkbWluIHRva2VuKS4gU2FtZSB2ZXJpZmllciBhcyBhYm92ZSBpZiB5b3UgbmVlZCB0eGlkICsgYWRkcmVzcyArIGFtb3VudC5cbiAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5PcHRpb25hbCDigJQgY3Jvd2RmdW5kOjwvc3Ryb25nPnsnICd9XG4gICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pbi9jcm93ZGZ1bmRzXCI+Qml0Y29pbiDihpIgQ3Jvd2RmdW5kczwvTGluaz5cbiAgICAgICAgICAgICAgICB7JyAnfWNyZWF0ZXMgYSBUYXByb290IHZhdWx0LCBjb3BpZXMgYW4gQUNQIG91dHB1dHMtb25seSBQU0JULCBvciBvcGVucyBhIFBheWpvaW4gc2Vzc2lvbiB0aGF0IHBheXMgdGhlIHZhdWx0ICh0aGVuIHBheSBoZXJlIHdpdGggdGhlIEJJUDIxIGxpbmspLlxuICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgIDwvTGlzdD5cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7IXRyYW5zYWN0aW9uc09ubHkgPyAoXG4gICAgICAgICAgICA8SHViUmVndGVzdEFkbWluVG9rZW5QYW5lbFxuICAgICAgICAgICAgbmV0d29yaz17KGh1YkJpdGNvaW4gJiYgaHViQml0Y29pbi5uZXR3b3JrKSB8fCAncmVndGVzdCd9XG4gICAgICAgICAgICBhZG1pblRva2VuUHJvcD17dGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmFkbWluVG9rZW59XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgeyF0cmFuc2FjdGlvbnNPbmx5ID8gKFxuICAgICAgICAgICAgPFNlZ21lbnRcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogJzEuMjVlbScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6ICdsaW5lYXItZ3JhZGllbnQoMTYwZGVnLCAjMWIxZDIyIDAlLCAjMjUyODMwIDU1JSwgIzFlMjIyOSAxMDAlKScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnI2U0ZTZlYicsXG4gICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjM2Q0MjRkJyxcbiAgICAgICAgICAgICAgYm94U2hhZG93OiAnaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyMTUsMCwwLjA0KSdcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiZmFicmljLWJpdGNvaW4td2VhbHRoLXN0YWNrLWgzXCIgYXJpYS1kZXNjcmliZWRieT1cImZhYnJpYy1iaXRjb2luLXdlYWx0aC1zdGFjay1zdW1tYXJ5XCI+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBpZD1cImZhYnJpYy1iaXRjb2luLXdlYWx0aC1zdGFjay1oM1wiIHN0eWxlPXt7IGNvbG9yOiAnI2YwZDA2MCcsIGZvbnRGYW1pbHk6ICdHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiLCBzZXJpZicsIGZvbnRXZWlnaHQ6IDUwMCwgbWFyZ2luQm90dG9tOiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICAgICAgQml0Y29pbiB3ZWFsdGggc3RhY2tcbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPHAgaWQ9XCJmYWJyaWMtYml0Y29pbi13ZWFsdGgtc3RhY2stc3VtbWFyeVwiIHN0eWxlPXt7IG1hcmdpbjogJzAgMCAwLjg1ZW0nLCBvcGFjaXR5OiAwLjg4LCBmb250U2l6ZTogJzAuOTJlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICAgIFRocmVlIHJhaWxzIGZvciBhY2N1bXVsYXRpbmcgYW5kIHJvdXRpbmcgdmFsdWU6IDxzdHJvbmcgc3R5bGU9e3sgY29sb3I6ICcjOWZkODlmJyB9fT5GYWJyaWM8L3N0cm9uZz4gY29udHJhY3RzIGFuZCBkb2N1bWVudCBleGNoYW5nZSxcbiAgICAgICAgICAgICAgeycgJ31QYXlqb2luIGRlcG9zaXQgY29vcmRpbmF0aW9uIChCSVA3OCBIVFRQICsgQklQMjEgPGNvZGU+cGo9PC9jb2RlPjsgQklQNzcgYXN5bmMgdmlhIDxjb2RlPmZhYnJpY1Byb3RvY29sPC9jb2RlPiByb2FkbWFwKSxcbiAgICAgICAgICAgICAgYW5kIDxzdHJvbmcgc3R5bGU9e3sgY29sb3I6ICcjN2VjOGU4JyB9fT5MaWdodG5pbmc8L3N0cm9uZz4gY2hhbm5lbHMgb24gdGhlIEh1YiBub2RlLlxuICAgICAgICAgICAgICBBcyB0aGUgbmV0d29yayBncm93cywgZWFjaCByYWlsIGNhbiBtb3ZlIHJlYWwgc2F0czogZG9jdW1lbnRzIHRpZSB0byBkaXN0cmlidXRlIC8gaW52ZW50b3J5IGZsb3dzOyBQYXlqb2luIHNlc3Npb25zIGFnZ3JlZ2F0ZSBkZXBvc2l0czsgTGlnaHRuaW5nIHJvdXRlcyBpbnN0YW50IHNldHRsZW1lbnQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB7bDFIZWlnaHQgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAgMCAwLjg1ZW0nLCBvcGFjaXR5OiAwLjkyLCBmb250U2l6ZTogJzAuODhlbScsIGxpbmVIZWlnaHQ6IDEuNDUsIGNvbG9yOiAnI2M4ZDBlMCcgfX0+XG4gICAgICAgICAgICAgICAgPHN0cm9uZyBzdHlsZT17eyBjb2xvcjogJyNmMGQwNjAnIH19PkwxIGNoYWluIHRpcDwvc3Ryb25nPiAodGhpcyBIdWImYXBvcztzIDxjb2RlPmJpdGNvaW5kPC9jb2RlPik6eycgJ31cbiAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgc3R5bGU9e3sgY29sb3I6ICcjOGVjZmZmJyB9fT5oZWlnaHQge2wxSGVpZ2h0LnRvTG9jYWxlU3RyaW5nKCl9PC9MaW5rPlxuICAgICAgICAgICAgICAgIHsnIMK3ICd9bmV3IHRpcHMgYXBwZWFyIGluIDxzdHJvbmc+QWN0aXZpdHk8L3N0cm9uZz4gYW5kIGFyZSByZWxheWVkIHRvIGNvbm5lY3RlZCBGYWJyaWMgcGVlcnMgYXMgYSBzaWduZWQgPGNvZGU+Qml0Y29pbkJsb2NrPC9jb2RlPiB3aXJlIG1lc3NhZ2UuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdncmlkJywgZ3JpZFRlbXBsYXRlQ29sdW1uczogJ3JlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIwMHB4LCAxZnIpKScsIGdhcDogJzAuNzVyZW0nIH19PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGJhY2tncm91bmQ6ICdyZ2JhKDAsMCwwLDAuMzUpJywgYm9yZGVyOiAnMXB4IHNvbGlkICMzYTRhM2EnLCBib3JkZXJSYWRpdXM6IDYsIHBhZGRpbmc6ICcwLjY1cmVtIDAuNzVyZW0nIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6ICcwLjdyZW0nLCBsZXR0ZXJTcGFjaW5nOiAnMC4xMmVtJywgY29sb3I6ICcjOGZkZjhmJywgbWFyZ2luQm90dG9tOiAnMC4zNWVtJyB9fT7ikaAgRkFCUklDPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzAuODhlbScgfX0+Q29udHJhY3RzLCBwdWJsaXNoIC8gZGlzdHJpYnV0ZSwgcGVlciBpbnZlbnRvcnkuPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuMzVlbScsIG1hcmdpblRvcDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL2RvY3VtZW50c1wiIHNpemU9XCJzbWFsbFwiIGJhc2ljIGludmVydGVkIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImZpbGUgYWx0ZXJuYXRlIG91dGxpbmVcIiAvPiBEb2N1bWVudHNcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvY29udHJhY3RzXCIgc2l6ZT1cInNtYWxsXCIgYmFzaWMgaW52ZXJ0ZWQgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZmlsZSBjb2RlXCIgLz4gQ29udHJhY3RzXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgYmFja2dyb3VuZDogJ3JnYmEoMCwwLDAsMC4zNSknLCBib3JkZXI6ICcxcHggc29saWQgIzVhNWEzMicsIGJvcmRlclJhZGl1czogNiwgcGFkZGluZzogJzAuNjVyZW0gMC43NXJlbScgfX0+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzAuN3JlbScsIGxldHRlclNwYWNpbmc6ICcwLjEyZW0nLCBjb2xvcjogJyNlOGUwNzAnLCBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nIH19PuKRoSBDT09SRElOQVRJT048L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMC44OGVtJyB9fT5QYXlqb2luIHNlc3Npb25zIHdpdGggbGl2ZSByZWNlaXZlciBzdGF0ZSBhbmQgcHJvcG9zYWwgYWN0aXZpdHkuPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzAuOGVtJywgY29sb3I6ICcjYWFhJywgbWFyZ2luVG9wOiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIFJlY2VpdmVyOiB7dGhpcy5zdGF0ZS5wYXlqb2luQ2FwYWJpbGl0aWVzICYmIHRoaXMuc3RhdGUucGF5am9pbkNhcGFiaWxpdGllcy5hdmFpbGFibGUgPyA8TGFiZWwgc2l6ZT1cIm1pbmlcIiBjb2xvcj1cImdyZWVuXCIgaG9yaXpvbnRhbD51cDwvTGFiZWw+IDogPExhYmVsIHNpemU9XCJtaW5pXCIgY29sb3I9XCJncmV5XCIgaG9yaXpvbnRhbD5kb3duPC9MYWJlbD59XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvcGF5bWVudHMjd2VhbHRoLXBheWpvaW4tYm9hcmRcIiBzaXplPVwic21hbGxcIiBiYXNpYyBpbnZlcnRlZCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX0gaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNoaWVsZCBhbHRlcm5hdGVcIiAvPiBTZXNzaW9uIGJvYXJkXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGJhY2tncm91bmQ6ICdyZ2JhKDAsMCwwLDAuMzUpJywgYm9yZGVyOiAnMXB4IHNvbGlkICMyYTRhNWEnLCBib3JkZXJSYWRpdXM6IDYsIHBhZGRpbmc6ICcwLjY1cmVtIDAuNzVyZW0nIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6ICcwLjdyZW0nLCBsZXR0ZXJTcGFjaW5nOiAnMC4xMmVtJywgY29sb3I6ICcjN2VjOGU4JywgbWFyZ2luQm90dG9tOiAnMC4zNWVtJyB9fT7ikaIgTElHSFROSU5HPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzAuODhlbScgfX0+XG4gICAgICAgICAgICAgICAgICB7bG5BY3RpdmUgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPkh1YiBMTiDCtyA8c3Ryb25nPntsbkNoYW5zLmxlbmd0aH08L3N0cm9uZz4gY2hhbm5lbHtsbkNoYW5zLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfSBsaXN0ZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5MTiBzdGF0dXM6IDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJyB9fT57bG4uc3RhdHVzIHx8ICduL2EnfTwvY29kZT48L3NwYW4+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW5cIiBzaXplPVwic21hbGxcIiBiYXNpYyBpbnZlcnRlZCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX0gaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJvbHRcIiAvPiBCaXRjb2luIC8gTE5cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIHshdHJhbnNhY3Rpb25zT25seSA/IChcbiAgICAgICAgICAgIDxTZWdtZW50IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEuMjVlbScsIGJvcmRlckNvbG9yOiAnI2Q5ZTJmMycsIGJhY2tncm91bmQ6ICcjZjhmYmZmJyB9fT5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuMzVlbScgfX0+RGVwb3NpdHMgVW5kZXIgTWFuYWdlbWVudDwvSGVhZGVyPlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNGI1YjczJywgbWFyZ2luQm90dG9tOiAnMC43NWVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICAgICAgTm9uLWFkbWluIHVzZXJzIGtlZXAgcHJpdmF0ZSBrZXlzIGluLWJyb3dzZXIuIFRoZSBIdWIgb3BlcmF0b3IgbWFuYWdlcyBzaGFyZWQgc2Vzc2lvbnMgKFBheWpvaW4gcmVjZWl2ZXIgYW5kIExpZ2h0bmluZy9MU1AgY2hhbm5lbHMpIGFuZCBtYXkgc2lnbiBjb250cmFjdC9zZXNzaW9uIG1lc3NhZ2VzIHdpdGhvdXQgdGFraW5nIGN1c3RvZHkgb2YgY2xpZW50IGtleXMuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8VGFibGUgY29tcGFjdCBjZWxsZWQgdW5zdGFja2FibGUgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC42NWVtJyB9fT5cbiAgICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIHdpZHRoPXs2fT48c3Ryb25nPkNsaWVudCB3YWxsZXQgKHNlbGYtY3VzdG9keSk8L3N0cm9uZz48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Zm9ybWF0U2F0c0Rpc3BsYXkoTnVtYmVyKGJhbGFuY2VTYXRzIHx8IDApKX0gc2F0czwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+S2V5cyBzdGF5IHdpdGggdGhlIHVzZXIgaW4gdGhpcyBicm93c2VyLjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+PHN0cm9uZz5IdWIgd2FsbGV0IChvcGVyYXRvcik8L3N0cm9uZz48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Zm9ybWF0U2F0c0Rpc3BsYXkoaHViV2FsbGV0U2F0cyl9IHNhdHM8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19Pkh1YiBub2RlIHNwZW5kIGF1dGhvcml0eTsgYWRtaW4gdG9rZW4gY29udHJvbHMgdGhpcyBzdXJmYWNlLjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+PHN0cm9uZz5MaWdodG5pbmcgbWFuYWdlZCBsaXF1aWRpdHk8L3N0cm9uZz48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Zm9ybWF0U2F0c0Rpc3BsYXkoc2hhcmVkU2Vzc2lvblNhdHMpfSBzYXRzPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgY29uZmlybWVkIHtmb3JtYXRTYXRzRGlzcGxheShsbk1hbmFnZWQuY29uZmlybWVkKX0gwrcgdW5jb25maXJtZWQge2Zvcm1hdFNhdHNEaXNwbGF5KGxuTWFuYWdlZC51bmNvbmZpcm1lZCl9IMK3IGltbWF0dXJlIHtmb3JtYXRTYXRzRGlzcGxheShsbk1hbmFnZWQuaW1tYXR1cmUpfVxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48c3Ryb25nPlBheWpvaW4gc2Vzc2lvbnMgKHNoYXJlZCk8L3N0cm9uZz48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57cGF5am9pbk9wZW5Db3VudH0gb3BlbjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+e3BheWpvaW5TZXNzaW9ucy5sZW5ndGh9IHRvdGFsIHNlc3Npb25zIHRyYWNrZWQuPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICA8L1RhYmxlLkJvZHk+XG4gICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvbGlnaHRuaW5nXCIgc2l6ZT1cInNtYWxsXCIgYmFzaWMgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJib2x0XCIgLz4gTGlnaHRuaW5nIGNoYW5uZWxzXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9wYXltZW50cyN3ZWFsdGgtcGF5am9pbi1ib2FyZFwiIHNpemU9XCJzbWFsbFwiIGJhc2ljIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIj5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2hpZWxkIGFsdGVybmF0ZVwiIC8+IFBheWpvaW4gc2Vzc2lvbnNcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NldHRpbmdzL2JpdGNvaW4td2FsbGV0XCIgc2l6ZT1cInNtYWxsXCIgYmFzaWMgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJrZXlcIiAvPiBXYWxsZXQgY3VzdG9keSBib3VuZGFyeVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiZmFicmljLWJpdGNvaW4td2FsbGV0LWNvbnRyb2xzLWgzXCI+XG4gICAgICAgICAgPEhlYWRlciBhcz0naDMnIGlkPVwiZmFicmljLWJpdGNvaW4td2FsbGV0LWNvbnRyb2xzLWgzXCIgZGl2aWRpbmc+V2FsbGV0IENvbnRyb2xzPC9IZWFkZXI+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZ3JpZCcsIGdyaWRUZW1wbGF0ZUNvbHVtbnM6ICdyZXBlYXQoYXV0by1maXQsIG1pbm1heCgyODBweCwgMWZyKSknLCBnYXA6ICcxLjVlbScsIG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiZmFicmljLWJ0Yy1yZXF1ZXN0LXBheW1lbnQtaDRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZmFicmljLWJ0Yy1yZXF1ZXN0LXBheW1lbnQtZGVzY1wiPlxuICAgICAgICAgICAgICA8SGVhZGVyIGFzPSdoNCcgaWQ9XCJmYWJyaWMtYnRjLXJlcXVlc3QtcGF5bWVudC1oNFwiPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9J3FyY29kZScgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICBSZXF1ZXN0IFBheW1lbnRcbiAgICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICAgIDxwIGlkPVwiZmFicmljLWJ0Yy1yZXF1ZXN0LXBheW1lbnQtZGVzY1wiIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45ZW0nLCBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgRGVmYXVsdDogPHN0cm9uZz5Kb2lubWFya2V0LXN0eWxlPC9zdHJvbmc+IFBheWpvaW4g4oCUIEh1YiBtaW50cyBhIFAyVFIgZGVwb3NpdCAob3BlcmF0b3IgbGVhZiArIGJlYWNvbiBmZWRlcmF0aW9uIHJlc2VydmUgbGVhZik7eycgJ31cbiAgICAgICAgICAgICAgICA8Y29kZT5waj08L2NvZGU+IGFuZCBwcm9wb3NhbCBQT1NUIGZvbGxvdyBCSVA3OC1zaGFwZWQgc3luYyBzZW1hbnRpY3MgKHNlZSBjYXBhYmlsaXRpZXMgPGNvZGU+ZmFicmljUHJvdG9jb2w8L2NvZGU+KS4gVXNlIGNsYXNzaWMgUDJXUEtIIHJlY2VpdmUgaWYgeW91IG5lZWQgdGhlIGFkZHJlc3MgbGluZSBiZWxvdy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNjVlbScgfX0+XG4gICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICB0b2dnbGVcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9eyEhdGhpcy5zdGF0ZS5wYXlqb2luUHJlZmVyUmVjZWl2ZX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshKHRoaXMuc3RhdGUucGF5am9pbkNhcGFiaWxpdGllcyAmJiB0aGlzLnN0YXRlLnBheWpvaW5DYXBhYmlsaXRpZXMuYXZhaWxhYmxlKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gISEoZGF0YSAmJiBkYXRhLmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICBzYXZlUGF5am9pblByZWZlcmVuY2VzKHsgcGF5bWVudHNSZWNlaXZlOiB2IH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgcGF5am9pblByZWZlclJlY2VpdmU6IHYgfSk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJVc2UgUGF5am9pbiBmb3IgdGhpcyByZWNlaXZlIChvbiBieSBkZWZhdWx0KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC42NWVtJyB9fT5cbiAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIHRvZ2dsZVxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17ISF0aGlzLnN0YXRlLnBheWpvaW5SZWNlaXZlVXNlSm9pbm1hcmtldH1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshKHRoaXMuc3RhdGUucGF5am9pbkNhcGFiaWxpdGllcyAmJiB0aGlzLnN0YXRlLnBheWpvaW5DYXBhYmlsaXRpZXMuYXZhaWxhYmxlKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gISEoZGF0YSAmJiBkYXRhLmNoZWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICBzYXZlUGF5am9pblByZWZlcmVuY2VzKHsgcmVjZWl2ZVRhcHJvb3RKb2lubWFya2V0OiB2IH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgcGF5am9pblJlY2VpdmVVc2VKb2lubWFya2V0OiB2LCBwYXlqb2luUmVjZWl2ZVJlc3VsdDogbnVsbCB9KTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIlRhcHJvb3QgSm9pbm1hcmtldC1zdHlsZSByZWNlaXZlIChkZWZhdWx0IOKAlCBmZWRlcmF0aW9uIGxlYWYgcGx1Z2dhYmxlIHZpYSBodWIgZW52KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnBheWpvaW5QcmVmZXJSZWNlaXZlICYmIHRoaXMuc3RhdGUucGF5am9pbkNhcGFiaWxpdGllcyAmJiB0aGlzLnN0YXRlLnBheWpvaW5DYXBhYmlsaXRpZXMuYXZhaWxhYmxlICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJPcHRpb25hbCBhbW91bnQgKHNhdHMpIGZvciBCSVAyMVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMCA9IGFueSBhbW91bnRcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5yZWNlaXZlUGF5am9pbkFtb3VudFNhdHN9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IHJlY2VpdmVQYXlqb2luQW1vdW50U2F0czogZS50YXJnZXQudmFsdWUsIHBheWpvaW5SZWNlaXZlUmVzdWx0OiBudWxsIH0pfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLnBheWpvaW5SZWNlaXZlQnVzeX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnN0YXRlLnBheWpvaW5SZWNlaXZlVXNlSm9pbm1hcmtldCAmJiAhdGhpcy5zdGF0ZS5yZWNlaXZlQWRkcmVzc31cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVDcmVhdGVQYXlqb2luUmVjZWl2ZUxpbmsoKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNoaWVsZCBhbHRlcm5hdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICBDcmVhdGUgUGF5am9pbiByZWNlaXZlIChCSVAyMSArIHBqKVxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5wYXlqb2luUmVjZWl2ZVJlc3VsdCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZT17ISF0aGlzLnN0YXRlLnBheWpvaW5SZWNlaXZlUmVzdWx0LmVycm9yfVxuICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlPXshdGhpcy5zdGF0ZS5wYXlqb2luUmVjZWl2ZVJlc3VsdC5lcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnBheWpvaW5SZWNlaXZlUmVzdWx0LmVycm9yID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3RoaXMuc3RhdGUucGF5am9pblJlY2VpdmVSZXN1bHQuZXJyb3J9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuMzVlbScgfX0+PHN0cm9uZz5TZXNzaW9uPC9zdHJvbmc+IDxjb2RlPnt0aGlzLnN0YXRlLnBheWpvaW5SZWNlaXZlUmVzdWx0LmlkfTwvY29kZT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5zdGF0ZS5wYXlqb2luUmVjZWl2ZVJlc3VsdC5iaXAyMVVyaX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb3B5VG9DbGlwYm9hcmQodGhpcy5zdGF0ZS5wYXlqb2luUmVjZWl2ZVJlc3VsdC5iaXAyMVVyaSB8fCAnJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY29weSBvdXRsaW5lXCIgLz4gQ29weSBCSVAyMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gc2l6ZT1cIm1pbmlcIiBwcmltYXJ5IHRvPXt0aGlzLnN0YXRlLnBheWpvaW5SZWNlaXZlUmVzdWx0LmlkID8gYC9wYXltZW50cz9wYXlqb2luU2Vzc2lvbj0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnN0YXRlLnBheWpvaW5SZWNlaXZlUmVzdWx0LmlkKX1gIDogJy9wYXltZW50cyd9IHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjM1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW4gUFNCVCBwYW5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcsIGZvbnRTaXplOiAnMC44NWVtJywgbWFyZ2luQm90dG9tOiAnMC4zNWVtJyB9fT5QbGFpbiBvbi1jaGFpbiBhZGRyZXNzPC9wPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmbGV4OiAnMSAxIDIwMHB4Jywgd29yZEJyZWFrOiAnYnJlYWstYWxsJywgZm9udFNpemU6ICcwLjg1ZW0nIH19IHRpdGxlPXt0aGlzLnN0YXRlLnJlY2VpdmVBZGRyZXNzfT5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnJlY2VpdmVBZGRyZXNzIHx8ICfigJQnfVxuICAgICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICBpY29uPVwiY29weVwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIkNvcHkgYWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ29weSByZWNlaXZlIGFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVDb3B5QWRkcmVzcygpfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aGlzLnN0YXRlLnJlY2VpdmVBZGRyZXNzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgIGljb249XCJyZWZyZXNoXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiTmV3IGFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5ldyByZWNlaXZlIGFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVOZXh0UmVjZWl2ZUFkZHJlc3MoKX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshd2FsbGV0LnhwdWJ9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vaW52b2ljZXMjZmFicmljLWludm9pY2VzLXRhYi1kZW1vXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19IHRpdGxlPVwiSW52b2ljZXMgd2Fsa3Rocm91Z2hcIj5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdmaWxlIGFsdGVybmF0ZSBvdXRsaW5lJyAvPlxuICAgICAgICAgICAgICAgIENyZWF0ZSBJbnZvaWNlXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgICAgIDxTZWdtZW50IHN0eWxlPXt7IG1hcmdpblRvcDogMCB9fT5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiZmFicmljLWJ0Yy1tYWtlLXBheW1lbnQtaDRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZmFicmljLWJ0Yy1tYWtlLXBheW1lbnQtZGVzY1wiPlxuICAgICAgICAgICAgICA8SGVhZGVyIGFzPSdoNCcgaWQ9XCJmYWJyaWMtYnRjLW1ha2UtcGF5bWVudC1oNFwiPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9J3NlbmQnIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgTWFrZSBQYXltZW50XG4gICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICA8ZGl2IGlkPVwiZmFicmljLWJ0Yy1tYWtlLXBheW1lbnQtZGVzY1wiPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJywgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgIE9uLWNoYWluIHNlbmQgdXNlcyB0aGUgPHN0cm9uZz5IdWIgbm9kZSB3YWxsZXQ8L3N0cm9uZz4gKHNhbWUgYXMgQml0Y29pbiBob21lIOKAnFNlbmQgUGF5bWVudOKAnSk7IHlvdXIgPHN0cm9uZz5zZXR1cCBhZG1pbiB0b2tlbjwvc3Ryb25nPiBpcyByZXF1aXJlZC4gRm9yIHNlbGYtY3VzdG9keSBQYXlqb2luLCBwYXN0ZSBhIDxjb2RlPmJpdGNvaW46PC9jb2RlPiBVUkkgd2l0aCA8Y29kZT5waj08L2NvZGU+IGFuZCB1c2UgbG9jYWwgc2lnbmluZyB3aGVuIHlvdXIgaWRlbnRpdHkgaXMgdW5sb2NrZWQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScsIG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICBTZW5kIG9uLWNoYWluIChkZWZhdWx0OiBwcmVmZXIgYSA8Y29kZT5iaXRjb2luOjwvY29kZT4gVVJJIHRoYXQgaW5jbHVkZXMgPGNvZGU+cGo9PC9jb2RlPiBmb3IgUGF5am9pbikgb3IgcGF5IExpZ2h0bmluZy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICB7IWhhc0FkbWluID8gKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC42NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5IdWItd2FsbGV0IHNlbmQgaXMgYWRtaW4tZ2F0ZWQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGNvbG9yOiAnIzQ0NCcgfX0+XG4gICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gc3RpbGwgdXNlIHRoaXMgcGFnZSBmb3IgcmVjZWl2ZS9oaXN0b3J5LCBidXQgPHN0cm9uZz5TZW5kIE9uLUNoYWluPC9zdHJvbmc+IHJlcXVpcmVzIHRoZSBzZXR1cCBhZG1pbiB0b2tlbi5cbiAgICAgICAgICAgICAgICAgICAgT3BlbiA8TGluayB0bz1cIi9zZXR0aW5ncy9zZWN1cml0eVwiPlNlY3VyaXR5ICZhbXA7IGRlbGVnYXRpb248L0xpbms+IHRvIGNvbmZpcm0gc2Vzc2lvbiBpZGVudGl0eSwgdGhlbiBhZGQvcmVmcmVzaCB0aGUgYWRtaW4gdG9rZW4gaW4gc2V0dGluZ3MuXG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC42NWVtJyB9fT5cbiAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIHRvZ2dsZVxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17ISF0aGlzLnN0YXRlLnBheWpvaW5QcmVmZXJTZW5kfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSAhIShkYXRhICYmIGRhdGEuY2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgICAgIHNhdmVQYXlqb2luUHJlZmVyZW5jZXMoeyBwYXltZW50c1NlbmQ6IHYgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBwYXlqb2luUHJlZmVyU2VuZDogdiB9KTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIlByZWZlciBQYXlqb2luLWNvbXBhdGlibGUgb3V0Z29pbmcgKG9uIGJ5IGRlZmF1bHQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjY1ZW0nIH19PlxuICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17ISF0aGlzLnN0YXRlLnJlY29yZEZlZGVyYXRpb25QYXltZW50fVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhfLCBkYXRhKSA9PiB0aGlzLnNldFN0YXRlKHsgcmVjb3JkRmVkZXJhdGlvblBheW1lbnQ6ICEhKGRhdGEgJiYgZGF0YS5jaGVja2VkKSB9KX1cbiAgICAgICAgICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgUmVjb3JkIGFzIGZlZGVyYXRpb24tcmVsYXRlZCBwYXltZW50IChhcHBlbmQgc3BlbmRpbmcgY3JpdGVyaWEgZnJvbXsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnM/c2NvcGU9d2FsbGV0I2ZhYnJpYy1mZWRlcmF0aW9uLXdhbGxldC1wYW5lbFwiPldhbGxldCDihpIgRmVkZXJhdGlvbjwvTGluaz4pXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+QWRkcmVzcyBvciBMaWdodG5pbmcgaW52b2ljZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMC41ZW0nLCBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJiY3J0MS4uLiBvciBsbmJjLi4uXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5saWdodG5pbmdJbnZvaWNlIHx8IHRoaXMuc3RhdGUudG99XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJlc3VsdDogbnVsbCwgdG86ICcnLCBsaWdodG5pbmdJbnZvaWNlOiAnJywgZGVjb2RlZEludm9pY2U6IG51bGwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNMaWdodG5pbmdJbnZvaWNlKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyByZXN1bHQ6IG51bGwsIGxpZ2h0bmluZ0ludm9pY2U6IHYsIHRvOiAnJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEZWNvZGVJbnZvaWNlKHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJlc3VsdDogbnVsbCwgdG86IHYsIGxpZ2h0bmluZ0ludm9pY2U6ICcnLCBkZWNvZGVkSW52b2ljZTogbnVsbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6IDEgfX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJjYW1lcmFcIlxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiU2NhbiBRUiBjb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2NhbiBRUiBjb2RlIGZvciBhZGRyZXNzIG9yIExpZ2h0bmluZyBpbnZvaWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnNldFN0YXRlKHsgc2Nhbk1vZGFsT3BlbjogdHJ1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5kZWNvZGVkSW52b2ljZSAmJiAoXG4gICAgICAgICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkxpZ2h0bmluZyBpbnZvaWNlOjwvc3Ryb25nPiB7dGhpcy5zdGF0ZS5kZWNvZGVkSW52b2ljZS5udW1fc2F0b3NoaXMgPz8gdGhpcy5zdGF0ZS5kZWNvZGVkSW52b2ljZS5udW1TYXRvc2hpcyA/PyAnPyd9IHNhdHNcbiAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuZGVjb2RlZEludm9pY2UuZGVzY3JpcHRpb24gJiYgYCDigJQgJHt0aGlzLnN0YXRlLmRlY29kZWRJbnZvaWNlLmRlc2NyaXB0aW9ufWB9XG4gICAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7IXRoaXMuc3RhdGUubGlnaHRuaW5nSW52b2ljZSAmJiB0aGlzLnN0YXRlLnBheWpvaW5QcmVmZXJTZW5kICYmIHRoaXMuc3RhdGUudG8gJiYgKFxuICAgICAgICAgICAgICAgICAgdGhpcy5pc0xpa2VseVBheWpvaW5CaXAyMSh0aGlzLnN0YXRlLnRvKSA/IChcbiAgICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UgcG9zaXRpdmUgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMCAwIDAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIERldGVjdGVkIGEgPGNvZGU+Yml0Y29pbjo8L2NvZGU+IFVSSSB3aXRoIDxjb2RlPnBqPTwvY29kZT4uIFlvdSBjYW4gcGF5IGluIGEgUGF5am9pbi1jYXBhYmxlIGV4dGVybmFsIHdhbGxldCwgY29vcmRpbmF0ZSBQU0JUIG1hbnVhbGx5IGJlbG93LCBvciDigJQgaWYgeW91ciBpZGVudGl0eSBpcyB1bmxvY2tlZCDigJQgc2lnbiBsb2NhbGx5IGluIHRoZSBhcHAgKFAyV1BLSCBVVFhPcyBmcm9tIHRoaXMgSHViJmFwb3M7cyBzY2FuOyBQU0JUIGdvZXMgdG8gdGhlIHJlY2VpdmVyJmFwb3M7cyA8Y29kZT5waj08L2NvZGU+IFVSTCBvbmx5KS5cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgeyh0aGlzLnN0YXRlLndhbGxldCAmJiB0aGlzLnN0YXRlLndhbGxldC54cHJ2KSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4V3JhcDogJ3dyYXAnLCBnYXA6ICcwLjVlbScsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJncmVlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmxvY2FsUGF5am9pbkJ1c3l9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUubG9jYWxQYXlqb2luQnVzeSB8fCB0aGlzLnN0YXRlLmFjcFBheWpvaW5CdXN5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlTG9jYWxQYXlqb2luU2VuZCgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF5am9pbiAoc2lnbiBsb2NhbGx5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2V4dHJhY3RGYWJyaWNQYXlqb2luU2Vzc2lvbklkRnJvbVBqVXJsKChwYXJzZUJpdGNvaW5VcmlGb3JQYXlqb2luKHRoaXMuc3RhdGUudG8pIHx8IHt9KS5walVybCB8fCAnJykgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInZpb2xldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJTSUdIQVNIX0FMTHxBTllPTkVDQU5QQVk6IEh1YiBhcHBlbmRzIGEgd2FsbGV0IFVUWE8gKGFkbWluIHRva2VuKSB3aXRob3V0IGNoYW5naW5nIG91dHB1dHMg4oCUIGV4dHJhIHNhdHMgZ28gdG8gZmVlLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmFjcFBheWpvaW5CdXN5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuYWNwUGF5am9pbkJ1c3kgfHwgdGhpcy5zdGF0ZS5sb2NhbFBheWpvaW5CdXN5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVBY3BIdWJCb29zdFBheWpvaW4oKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1AgKyBIdWIgYm9vc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjNTU1JywgZm9udFNpemU6ICcwLjllbScgfX0+VW5sb2NrIGlkZW50aXR5IGZvciBsb2NhbCBzaWduaW5nLCBvciB1c2UgYW4gZXh0ZXJuYWwgd2FsbGV0IC8gZGVza3RvcCBhcHAgaWYgdGhlIHBheWpvaW4gaG9zdCBibG9ja3MgYnJvd3NlciBDT1JTLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNTVlbSAwIDAnLCBmb250U2l6ZTogJzAuODhlbScsIGNvbG9yOiAnIzU1NScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkFDUCArIEh1YiBib29zdDwvc3Ryb25nPiBhcHBlYXJzIHdoZW4gPGNvZGU+cGo9PC9jb2RlPiB0YXJnZXRzIHRoaXMgSHViJmFwb3M7cyBwYXlqb2luIHNlc3Npb24uIFlvdSBzaWduIHdpdGh7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+QU5ZT05FQ0FOUEFZfEFMTDwvY29kZT47IHRoZSBIdWIgKGFkbWluKSBhZGRzIGFuZCBzaWducyBhIGhvdC13YWxsZXQgaW5wdXQgc28gdGhlIHNhbWUgb3V0cHV0cyBhYnNvcmIgbW9yZSBmZWUg4oCUIHBheWpvaW4tc3R5bGUgcHJpdmFjeSBwbHVzIDIwMTMtc3R5bGUgaW5wdXQgc3RpdGNoaW5nLlxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5hY3BQYXlqb2luUmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICcwLjY1ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcwLjVlbSAwLjY1ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0aGlzLnN0YXRlLmFjcFBheWpvaW5SZXN1bHQuZXJyb3IgPyAnI2ZmZjZmNicgOiAnI2YzZTVmNScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7dGhpcy5zdGF0ZS5hY3BQYXlqb2luUmVzdWx0LmVycm9yID8gJyNlMGI0YjQnIDogJyNjNmExZDgnfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjMzMzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzAuOTVlbSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuYWNwUGF5am9pblJlc3VsdC5lcnJvciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57dGhpcy5zdGF0ZS5hY3BQYXlqb2luUmVzdWx0LmVycm9yfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDUCBwYXlqb2luIGJyb2FkY2FzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuYWNwUGF5am9pblJlc3VsdC50eGlkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89e2Avc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHRoaXMuc3RhdGUuYWNwUGF5am9pblJlc3VsdC50eGlkKSl9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuOWVtJyB9fT57dGhpcy5zdGF0ZS5hY3BQYXlqb2luUmVzdWx0LnR4aWR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmFjcFBheWpvaW5SZXN1bHQuYWRkZWRPdXRwb2ludCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2Jsb2NrJywgbWFyZ2luVG9wOiAnMC4zNWVtJywgZm9udFNpemU6ICcwLjllbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHViIGFkZGVkIGlucHV0IDxjb2RlPnt0aGlzLnN0YXRlLmFjcFBheWpvaW5SZXN1bHQuYWRkZWRPdXRwb2ludH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuYWNwUGF5am9pblJlc3VsdC5hZGRlZFZhbHVlU2F0cyAhPSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGAgKCR7Zm9ybWF0U2F0c0Rpc3BsYXkodGhpcy5zdGF0ZS5hY3BQYXlqb2luUmVzdWx0LmFkZGVkVmFsdWVTYXRzKX0gc2F0cylgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUubG9jYWxQYXlqb2luUmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICcwLjY1ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcwLjVlbSAwLjY1ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0aGlzLnN0YXRlLmxvY2FsUGF5am9pblJlc3VsdC5lcnJvciA/ICcjZmZmNmY2JyA6ICcjZmNmZmY1JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IGAxcHggc29saWQgJHt0aGlzLnN0YXRlLmxvY2FsUGF5am9pblJlc3VsdC5lcnJvciA/ICcjZTBiNGI0JyA6ICcjYTNjMjkzJ31gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzMzMycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcwLjk1ZW0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmxvY2FsUGF5am9pblJlc3VsdC5lcnJvciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57dGhpcy5zdGF0ZS5sb2NhbFBheWpvaW5SZXN1bHQuZXJyb3J9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJvYWRjYXN0IG9rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5sb2NhbFBheWpvaW5SZXN1bHQudHhpZCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh0aGlzLnN0YXRlLmxvY2FsUGF5am9pblJlc3VsdC50eGlkKSl9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuOWVtJyB9fT57dGhpcy5zdGF0ZS5sb2NhbFBheWpvaW5SZXN1bHQudHhpZH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgUGF5am9pbiBwcmVmZXJlbmNlIGlzIDxzdHJvbmc+b248L3N0cm9uZz46IGEgYmFyZSBvbi1jaGFpbiBhZGRyZXNzIHVzZXMgYSA8c3Ryb25nPnN0YW5kYXJkPC9zdHJvbmc+IEh1YiBwYXltZW50IChubyBwYXlqb2luKS4gRm9yIFBheWpvaW4sIHBhc3RlIGEgQklQMjEgVVJJIHRoYXQgaW5jbHVkZXMgPGNvZGU+cGo9PC9jb2RlPiwgb3IgdHVybiB0aGlzIHRvZ2dsZSBvZmYgZm9yIGludGVudGlvbmFsIHBsYWluIHNlbmRzLlxuICAgICAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7IXRoaXMuc3RhdGUubGlnaHRuaW5nSW52b2ljZSAmJiAoXG4gICAgICAgICAgICAgICAgICA8Rm9ybS5Hcm91cCB3aWR0aHM9J2VxdWFsJz5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm0uSW5wdXQgbGFiZWw9J0Ftb3VudCAoc2F0cyknIHR5cGU9J251bWJlcicgbWluPScxJyBzdGVwPScxJyBwbGFjZWhvbGRlcj0nMTAwMCcgdmFsdWU9e3RoaXMuc3RhdGUuYW1vdW50U2F0c30gb25DaGFuZ2U9eyhlKSA9PiB7IHRoaXMuc2V0U3RhdGUoeyBhbW91bnRTYXRzOiBlLnRhcmdldC52YWx1ZSwgcmVzdWx0OiBudWxsIH0pOyB9fSAvPlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybS5JbnB1dCBsYWJlbD0nTWVtbycgcGxhY2Vob2xkZXI9J09wdGlvbmFsJyB2YWx1ZT17dGhpcy5zdGF0ZS5tZW1vfSBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBtZW1vOiBlLnRhcmdldC52YWx1ZSB9KX0gLz5cbiAgICAgICAgICAgICAgICAgIDwvRm9ybS5Hcm91cD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmxpZ2h0bmluZ0ludm9pY2UgPyAoXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBwcmltYXJ5IGFyaWEtbGFiZWw9XCJQYXkgTGlnaHRuaW5nIGludm9pY2UgZnJvbSBIdWIgbm9kZVwiIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlUGF5TGlnaHRuaW5nKCl9PlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdib2x0JyAvPlxuICAgICAgICAgICAgICAgICAgICBQYXkgTGlnaHRuaW5nXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBheWpvaW5QcmVmZXJTZW5kICYmICF0aGlzLmlzTGlrZWx5UGF5am9pbkJpcDIxKHRoaXMuc3RhdGUudG8pXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdTZW5kIG9uLWNoYWluIHN0YW5kYXJkIHRyYW5zYWN0aW9uIGZyb20gSHViIHdhbGxldCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ1NlbmQgb24tY2hhaW4gZnJvbSBIdWIgd2FsbGV0J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlU2VuZCgpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNhblNlbmRPbkNoYWlufVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdzZW5kJyAvPlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5wYXlqb2luUHJlZmVyU2VuZCAmJiAhdGhpcy5pc0xpa2VseVBheWpvaW5CaXAyMSh0aGlzLnN0YXRlLnRvKSA/ICdTZW5kIE9uLUNoYWluIChzdGFuZGFyZCknIDogJ1NlbmQgT24tQ2hhaW4nfVxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgICB7IXRoaXMuc3RhdGUubGlnaHRuaW5nSW52b2ljZSAmJiAhY2FuU2VuZE9uQ2hhaW4gJiYgIXRoaXMuc3RhdGUucmVzdWx0ICYmIChcbiAgICAgICAgICAgICAgICA8TWVzc2FnZSBzaXplPVwic21hbGxcIiBpbmZvIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICB7IWhhc0FkbWluXG4gICAgICAgICAgICAgICAgICAgID8gJ0FkbWluIHRva2VuIHJlcXVpcmVkIHRvIHNlbmQgZnJvbSB0aGUgSHViIHdhbGxldC4gWW91IGNhbiBzdGlsbCByZXF1ZXN0IHBheW1lbnQgYW5kIGluc3BlY3Qgd2FsbGV0IGhpc3RvcnkuJ1xuICAgICAgICAgICAgICAgICAgICA6IHNlbmRUby5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgPyAnRW50ZXIgYSByZWNpcGllbnQgb24tY2hhaW4gYWRkcmVzcyBvciBwYXN0ZSBhIGJpdGNvaW46IFVSSSAod2l0aCBvcHRpb25hbCBwaj0gZm9yIFBheWpvaW4pLidcbiAgICAgICAgICAgICAgICAgICAgOiAnU2V0IGEgcG9zaXRpdmUgYW1vdW50IGluIHNhdHMgdG8gZW5hYmxlIHNlbmQuJ31cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnJlc3VsdCAmJiAoXG4gICAgICAgICAgICAgICAgPE1lc3NhZ2Ugc2l6ZT1cInNtYWxsXCIgcG9zaXRpdmU9eyF0aGlzLnN0YXRlLnJlc3VsdC5lcnJvcn0gbmVnYXRpdmU9eyEhdGhpcy5zdGF0ZS5yZXN1bHQuZXJyb3J9IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnJlc3VsdC5lcnJvciA/IHRoaXMuc3RhdGUucmVzdWx0LmVycm9yIDogKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnJlc3VsdC5vayA/ICdQYXltZW50IHN1Y2Nlc3NmdWwuJyA6ICdQYXltZW50IHN1Ym1pdHRlZC4nfVxuICAgICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IHRoaXMuc3RhdGUucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGlkID0gKHIgJiYgci5wYXltZW50ICYmIHIucGF5bWVudC50eGlkKSB8fCAociAmJiByLnR4aWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpZCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2Jsb2NrJywgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh0aWQpKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgdHJhbnNhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8c2VjdGlvbiBhcmlhLWxhYmVsbGVkYnk9XCJmYWJyaWMtYnRjLXR4LWNsaWVudC1oM1wiIGFyaWEtZGVzY3JpYmVkYnk9XCJmYWJyaWMtYnRjLXR4LWNsaWVudC1kZXNjXCI+XG4gICAgICAgICAgPEhlYWRlciBhcz0naDMnIGlkPVwiZmFicmljLWJ0Yy10eC1jbGllbnQtaDNcIj5NeSBXYWxsZXQgQWN0aXZpdHk8L0hlYWRlcj5cbiAgICAgICAgICA8cCBpZD1cImZhYnJpYy1idGMtdHgtY2xpZW50LWRlc2NcIiBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPkNsaWVudCAoeHB1Yik6PC9zdHJvbmc+IHRoaXMgaXMgeW91ciB3YWxsZXQgaGlzdG9yeS4gT3BlbiBhbnkgdHhpZCB0byBpbnNwZWN0IGZ1bGwgZGV0YWlscyBpbiB0aGUgYnVpbHQtaW4gZXhwbG9yZXIuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIHshaGFzQWRtaW4gPyAoXG4gICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgIE5vbi1hZG1pbiBtb2RlOiB1c2UgdGhpcyBwYWdlIGxpa2UgYSBub3JtYWwgQml0Y29pbiB3YWxsZXQgZGFzaGJvYXJkIChiYWxhbmNlICsgaGlzdG9yeSkuIEh1Yi13YWxsZXQgc2VuZC9icm9hZGNhc3QgYWN0aW9ucyByZW1haW4gYWRtaW4tZ2F0ZWQuXG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3RoaXMuc3RhdGUudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+Tm8gdHJhbnNhY3Rpb25zIGZvdW5kIGZvciB0aGlzIHdhbGxldC48L3A+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxUYWJsZSBjb21wYWN0PSd2ZXJ5JyBjZWxsZWQ+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlR4aWQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Db250cmFjdDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkFtb3VudDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkNvbmZpcm1hdGlvbnM8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5UaW1lPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAge3RoaXMuc3RhdGUudHJhbnNhY3Rpb25zLm1hcCgodHgsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgYW10ID0gdHgub3VyQW1vdW50ICE9IG51bGwgPyB0eC5vdXJBbW91bnQgOiB0eC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFtdE51bSA9IE51bWJlcihhbXQpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNPdXRnb2luZyA9IE51bWJlci5pc0Zpbml0ZShhbXROdW0pID8gYW10TnVtIDwgMCA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNJbmNvbWluZyA9IE51bWJlci5pc0Zpbml0ZShhbXROdW0pID8gYW10TnVtID4gMCA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGltZSA9IHR4LmJsb2NrdGltZSAhPSBudWxsID8gdHguYmxvY2t0aW1lIDogdHgudGltZTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHIgPSB0aW1lID8gbmV3IERhdGUodGltZSAqIDEwMDApLnRvTG9jYWxlU3RyaW5nKCkgOiAnLSc7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93IGtleT17YCR7dHgudHhpZCB8fCAndHgnfToke2lkeH1gfT5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0eC50eGlkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudCh0eC50eGlkKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuODVlbScgfX0gdGl0bGU9e3R4LnR4aWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Ake3R4LnR4aWQuc2xpY2UoMCwgOCl94oCmJHt0eC50eGlkLnNsaWNlKC04KX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAge3R4LmZhYnJpY0NvbnRyYWN0ICYmIHR4LmZhYnJpY0NvbnRyYWN0LmxhYmVsID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJibHVlXCIgdGl0bGU9e0pTT04uc3RyaW5naWZ5KHR4LmZhYnJpY0NvbnRyYWN0Lm1ldGEgfHwge30pfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHguZmFicmljQ29udHJhY3QubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM5OTknIH19PuKAlDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAge2FtdCAhPSBudWxsID8gYCR7TnVtYmVyKGFtdCkudG9GaXhlZCg4KX0gQlRDYCA6ICctJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc091dGdvaW5nID8gPExhYmVsIHNpemU9XCJtaW5pXCIgY29sb3I9XCJvcmFuZ2VcIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4zNWVtJyB9fT5zZW50PC9MYWJlbD4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAge2lzSW5jb21pbmcgPyA8TGFiZWwgc2l6ZT1cIm1pbmlcIiBjb2xvcj1cImdyZWVuXCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuMzVlbScgfX0+cmVjZWl2ZWQ8L0xhYmVsPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAge3R4LmNvbmZpcm1hdGlvbnMgIT0gbnVsbCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHguY29uZmlybWF0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7TnVtYmVyKHR4LmNvbmZpcm1hdGlvbnMpID09PSAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwibWluaVwiIGNvbG9yPVwib3JhbmdlXCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXBvb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogJy0nfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57ZGF0ZVN0cn08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9TZWdtZW50PlxuXG4gICAgICAgIHshdHJhbnNhY3Rpb25zT25seSA/IChcbiAgICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8c2VjdGlvbiBhcmlhLWxhYmVsbGVkYnk9XCJmYWJyaWMtYnRjLW1lbXBvb2wtaDNcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZmFicmljLWJ0Yy1tZW1wb29sLWRlc2NcIj5cbiAgICAgICAgICA8SGVhZGVyIGFzPSdoMycgaWQ9XCJmYWJyaWMtYnRjLW1lbXBvb2wtaDNcIj5NZW1wb29sIFBheW1lbnRzPC9IZWFkZXI+XG4gICAgICAgICAgPHAgaWQ9XCJmYWJyaWMtYnRjLW1lbXBvb2wtZGVzY1wiIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT48c3Ryb25nPkJyaWRnZSAoSHViIG5vZGUpOjwvc3Ryb25nPiBtZW1wb29sIHRyYW5zYWN0aW9ucy48L3A+XG4gICAgICAgICAge3RoaXMuc3RhdGUucGF5bWVudHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5ObyBtZW1wb29sIHBheW1lbnRzIHZpc2libGUuPC9wPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8VGFibGUgY29tcGFjdD0ndmVyeScgY2VsbGVkPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5UeGlkPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+RmVlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+VmFsdWU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5wYXltZW50cy5tYXAoKHAsIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdyBrZXk9e2Ake3AudHhpZCB8fCAndHgnfToke2lkeH1gfT5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAge3AudHhpZCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChwLnR4aWQpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJyB9fSB0aXRsZT17cC50eGlkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtgJHtwLnR4aWQuc2xpY2UoMCwgOCl94oCmJHtwLnR4aWQuc2xpY2UoLTgpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwibWluaVwiIGNvbG9yPVwib3JhbmdlXCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5jb25maXJtZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+LTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntwLmZlZSAhPSBudWxsID8gcC5mZWUgOiAnLSd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57cC52YWx1ZSAhPSBudWxsID8gYCR7cC52YWx1ZX0gQlRDYCA6ICctJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIHshdHJhbnNhY3Rpb25zT25seSA/IChcbiAgICAgICAgICA8U2VnbWVudFxuICAgICAgICAgIGlkPVwid2VhbHRoLXBheWpvaW4tYm9hcmRcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBmb250RmFtaWx5OiAndWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIG1vbm9zcGFjZScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAnIzBjMGMwZScsXG4gICAgICAgICAgICBjb2xvcjogJyNiNmU3YjYnLFxuICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICMyZTJlMzInLFxuICAgICAgICAgICAgYm94U2hhZG93OiAnaW5zZXQgMCAwIDQwcHggcmdiYSgwLDQwLDAsMC4xNSknLFxuICAgICAgICAgICAgc2Nyb2xsTWFyZ2luVG9wOiAnNC41cmVtJ1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8c2VjdGlvbiBhcmlhLWxhYmVsbGVkYnk9XCJmYWJyaWMtYnRjLWptLWJvYXJkLWg0XCIgYXJpYS1kZXNjcmliZWRieT1cImZhYnJpYy1idGMtam0tYm9hcmQtZGVzY1wiPlxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIGlkPVwiZmFicmljLWJ0Yy1qbS1ib2FyZC1oNFwiIHN0eWxlPXt7IGZvbnRGYW1pbHk6ICdpbmhlcml0JywgY29sb3I6ICcjZjVlNmE2JywgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgUGF5am9pbiBkZXBvc2l0IHNlc3Npb24gZGFzaGJvYXJkXG4gICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgPHAgaWQ9XCJmYWJyaWMtYnRjLWptLWJvYXJkLWRlc2NcIiBzdHlsZT17eyBjb2xvcjogJyM3YTllN2EnLCBmb250U2l6ZTogJzAuODJyZW0nLCBtYXJnaW5Cb3R0b206ICcwLjY1ZW0nIH19PlxuICAgICAgICAgICAgRWFjaCByb3cgaXMgYSByZWNlaXZlciBkZXBvc2l0IGVuZHBvaW50IHdpdGggY3VycmVudCBzdGF0dXMsIGFtb3VudCB0YXJnZXQsIGFuZCBwcm9wb3NhbCBhY3Rpdml0eSAoPGNvZGU+Tl9QUk9QPC9jb2RlPikuXG4gICAgICAgICAgICBTaGFyZSB0aGUgQklQMjEgKyA8Y29kZT5waj08L2NvZGU+IFVSSSBmcm9tIFJlcXVlc3QgUGF5bWVudCB0byBjb2xsZWN0IGRlcG9zaXRzLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8cHJlXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcwLjY1cmVtIDAuNzVyZW0nLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnIzA4MDgwOScsXG4gICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjMWYyMjI4JyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA0LFxuICAgICAgICAgICAgICBmb250U2l6ZTogJzAuNzJyZW0nLFxuICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjUsXG4gICAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgICAgIG1heEhlaWdodDogJzIycmVtJyxcbiAgICAgICAgICAgICAgY29sb3I6ICcjYzhlNmM5J1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YnVpbGRQYXlqb2luU2Vzc2lvbkFzY2lpKHRoaXMuc3RhdGUucGF5am9pblNlc3Npb25zKX1cbiAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7IXRyYW5zYWN0aW9uc09ubHkgPyAoXG4gICAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiZmFicmljLWJ0Yy1wai1wcm9wb3NhbHMtaDNcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZmFicmljLWJ0Yy1wai1wcm9wb3NhbHMtaW50cm9cIj5cbiAgICAgICAgICA8SGVhZGVyIGFzPSdoMycgaWQ9XCJmYWJyaWMtYnRjLXBqLXByb3Bvc2Fscy1oM1wiPlBheWpvaW4gcHJvcG9zYWxzIChCSVA3OCByZWNlaXZlcik8L0hlYWRlcj5cbiAgICAgICAgICA8ZGl2IGlkPVwiZmFicmljLWJ0Yy1wai1wcm9wb3NhbHMtaW50cm9cIj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+PHN0cm9uZz5CcmlkZ2U6PC9zdHJvbmc+IEh1YiBQYXlqb2luIHNlcnZpY2UuPC9wPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICBTdWJtaXQgYSBzZW5kZXIgUFNCVCBhZ2FpbnN0IGFuIGFjdGl2ZSBQYXlqb2luIHNlc3Npb24gZ2VuZXJhdGVkIGJ5IHRoZSBkZXBvc2l0IGZsb3cuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxGb3JtPlxuICAgICAgICAgICAgPEZvcm0uSW5wdXRcbiAgICAgICAgICAgICAgbGFiZWw9J1BheWpvaW4gU2Vzc2lvbiBJRCdcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9J3Nlc3Npb24gaWQnXG4gICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnBheWpvaW5TZXNzaW9uSWR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IHBheWpvaW5TZXNzaW9uSWQ6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxGb3JtLlRleHRBcmVhXG4gICAgICAgICAgICAgIGxhYmVsPSdQU0JUIChiYXNlNjQpJ1xuICAgICAgICAgICAgICByb3dzPXszfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nY0hOaWRQOC4uLidcbiAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucGF5am9pblBzYnR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IHBheWpvaW5Qc2J0OiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlU3VibWl0UGF5am9pblByb3Bvc2FsKCl9PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdleGNoYW5nZScgLz5cbiAgICAgICAgICAgICAgU3VibWl0IFBheWpvaW4gUHJvcG9zYWxcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5wYXlqb2luUmVzdWx0ICYmIChcbiAgICAgICAgICAgIDxNZXNzYWdlIHBvc2l0aXZlPXshdGhpcy5zdGF0ZS5wYXlqb2luUmVzdWx0LmVycm9yfSBuZWdhdGl2ZT17ISF0aGlzLnN0YXRlLnBheWpvaW5SZXN1bHQuZXJyb3J9IHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgIDxwcmUgc3R5bGU9e3sgd2hpdGVTcGFjZTogJ3ByZS13cmFwJywgd29yZEJyZWFrOiAnYnJlYWstd29yZCcgfX0+e0pTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUucGF5am9pblJlc3VsdCwgbnVsbCwgMil9PC9wcmU+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8c2VjdGlvbiBhcmlhLWxhYmVsbGVkYnk9XCJmYWJyaWMtYnRjLXBqLXNlc3Npb25zLWg0XCIgYXJpYS1kZXNjcmliZWRieT1cImZhYnJpYy1idGMtcGotc2Vzc2lvbnMtZGVzY1wiIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgPEhlYWRlciBhcz0naDQnIGlkPVwiZmFicmljLWJ0Yy1wai1zZXNzaW9ucy1oNFwiIHN0eWxlPXt7IG1hcmdpblRvcDogMCB9fT5QYXlqb2luIHNlc3Npb25zICZhbXA7IHByb3Bvc2FsczwvSGVhZGVyPlxuICAgICAgICAgIDxwIGlkPVwiZmFicmljLWJ0Yy1wai1zZXNzaW9ucy1kZXNjXCIgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgIEluY2x1ZGVzIGV4cGlyZWQgc2Vzc2lvbnMgKGFwcGVuZCA8Y29kZT4/aW5jbHVkZUV4cGlyZWQ9ZmFsc2U8L2NvZGU+IG9uIHRoZSBBUEkgdG8gaGlkZSB0aGVtKS4gRWFjaCByb3cgbGlzdHMgcHJvcG9zYWwgY29udHJhY3RzICh0eGlkIHdoZW4gZGVyaXZhYmxlIGZyb20gUFNCVCAvIHJhdyB0eCkuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIHt0aGlzLnN0YXRlLnBheWpvaW5TZXNzaW9ucy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19Pk5vIFBheWpvaW4gc2Vzc2lvbnMgZm91bmQuPC9wPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8VGFibGUgY29tcGFjdD0ndmVyeScgY2VsbGVkPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5TZXNzaW9uPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+U3RhdHVzPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+TGFiZWwgLyBtZW1vPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+QWRkcmVzczwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkFtb3VudCAoc2F0cyk8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Qcm9wb3NhbHM8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5BY3Rpb25zPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAge3RoaXMuc3RhdGUucGF5am9pblNlc3Npb25zLm1hcCgocywgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBleHBpcmVkID0gcy5leHBpcmVzQXQgJiYgbmV3IERhdGUocy5leHBpcmVzQXQpLmdldFRpbWUoKSA8PSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcG9zYWxzID0gQXJyYXkuaXNBcnJheShzLnByb3Bvc2FscykgPyBzLnByb3Bvc2FscyA6IFtdO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdyBrZXk9e2Ake3MuaWQgfHwgJ3MnfToke2lkeH1gfT5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJyB9fT57cy5pZCB8fCAnLSd9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAge2V4cGlyZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cIm1pbmlcIiBjb2xvcj1cImdyZXlcIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4zNWVtJyB9fT5leHBpcmVkPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntzLnN0YXR1cyB8fCAnLSd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgeyhzLmxhYmVsIHx8IHMubWVtbykgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntbcy5sYWJlbCwgcy5tZW1vXS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzk5OScgfX0+4oCUPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+PGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjhlbScgfX0+e3MuYWRkcmVzcyB8fCAnLSd9PC9jb2RlPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57cy5hbW91bnRTYXRzICE9IG51bGwgJiYgcy5hbW91bnRTYXRzID4gMCA/IFN0cmluZyhzLmFtb3VudFNhdHMpIDogJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAge3Byb3Bvc2Fscy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzk5OScgfX0+MDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWF4V2lkdGg6ICcyOGVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvcG9zYWxzLm1hcCgocCwgaikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3AuaWQgfHwgan0gc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwidGVhbFwiIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cC5zdGF0dXMgfHwgJ3Byb3Bvc2FsJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3AucHJvcG9zYWxUeGlkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHAucHJvcG9zYWxUeGlkKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC43NWVtJyB9fSB0aXRsZT17cC5wcm9wb3NhbFR4aWR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YCR7cC5wcm9wb3NhbFR4aWQuc2xpY2UoMCwgMTApfeKApiR7cC5wcm9wb3NhbFR4aWQuc2xpY2UoLTgpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcsIGZvbnRTaXplOiAnMC44NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwLmhhc1BzYnQgfHwgcC5oYXNUeGhleCA/ICd0eGlkIHBlbmRpbmcgLyBwYXJ0aWFsIFBTQlQnIDogJ+KAlCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uLkdyb3VwIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshcy5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bz17cy5pZCA/IGAvcGF5bWVudHM/cGF5am9pblNlc3Npb249JHtlbmNvZGVVUklDb21wb25lbnQocy5pZCl9YCA6ICcvcGF5bWVudHMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRmlsbCB0aGUgcHJvcG9zYWwgZm9ybSB3aXRoIHRoaXMgc2Vzc2lvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgZm9yIFBTQlRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IXMuYmlwMjFVcml9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDb3B5IEJJUDIxIFVSSVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcy5iaXAyMVVyaSAmJiBjb3B5VG9DbGlwYm9hcmQocy5iaXAyMVVyaSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY29weSBvdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbi5Hcm91cD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8c2VjdGlvbiBhcmlhLWxhYmVsbGVkYnk9XCJmYWJyaWMtYnRjLXV0eG9zLWgzXCIgYXJpYS1kZXNjcmliZWRieT1cImZhYnJpYy1idGMtdXR4b3MtZGVzY1wiPlxuICAgICAgICAgIDxIZWFkZXIgYXM9J2gzJyBpZD1cImZhYnJpYy1idGMtdXR4b3MtaDNcIj5VVFhPczwvSGVhZGVyPlxuICAgICAgICAgIDxwIGlkPVwiZmFicmljLWJ0Yy11dHhvcy1kZXNjXCIgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PjxzdHJvbmc+QnJpZGdlIChIdWIgbm9kZSk6PC9zdHJvbmc+IHVuc3BlbnQgb3V0cHV0cyBmb3Igd2FsbGV0LjwvcD5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS51dHhvcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19Pk5vIFVUWE9zIGZvdW5kIGZvciB0aGlzIHdhbGxldC48L3A+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxUYWJsZSBjb21wYWN0PSd2ZXJ5JyBjZWxsZWQ+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlR4aWQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5Wb3V0PC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+QW1vdW50PC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAge3RoaXMuc3RhdGUudXR4b3MubWFwKCh1LCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3cga2V5PXtgJHt1LnR4aWQgfHwgJ3UnfToke3Uudm91dCB8fCAwfToke2lkeH1gfT5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+PGNvZGU+e3UudHhpZCB8fCAnLSd9PC9jb2RlPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e3Uudm91dCAhPSBudWxsID8gdS52b3V0IDogJy0nfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e3UuYW1vdW50ICE9IG51bGwgPyB1LmFtb3VudCA6ICh1LmFtb3VudFNhdHMgIT0gbnVsbCA/IGAke2Zvcm1hdFNhdHNEaXNwbGF5KHUuYW1vdW50U2F0cyl9IHNhdHNgIDogJy0nKX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9TZWdtZW50PlxuXG4gICAgICAgIDxRclNjYW5uZXJNb2RhbFxuICAgICAgICAgIG9wZW49e3RoaXMuc3RhdGUuc2Nhbk1vZGFsT3Blbn1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB0aGlzLnNldFN0YXRlKHsgc2Nhbk1vZGFsT3BlbjogZmFsc2UgfSl9XG4gICAgICAgICAgb25TY2FuPXsodGV4dCkgPT4gdGhpcy5oYW5kbGVTY2FuUmVzdWx0KHRleHQpfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJpdGNvaW5QYXltZW50c0hvbWU7XG4iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yIiwiZSIsInQiLCJyIiwiU3ltYm9sIiwibiIsIml0ZXJhdG9yIiwibyIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJwcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdHlwZW9mIiwiY29uc3RydWN0b3IiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJuZXh0IiwicHVzaCIsIkFycmF5IiwiaXNBcnJheSIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfbmV4dCIsIl90aHJvdyIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX24iLCJGIiwicyIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJSZWZlcmVuY2VFcnJvciIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwiX2luaGVyaXRzIiwiX3NldFByb3RvdHlwZU9mIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJDaGVja2JveCIsIkZvcm0iLCJIZWFkZXIiLCJJY29uIiwiTGFiZWwiLCJMaXN0IiwiTWVzc2FnZSIsIlNlZ21lbnQiLCJUYWJsZSIsIl9yZXF1aXJlMyIsImJyb2FkY2FzdFJhd1RyYW5zYWN0aW9uIiwiY3JlYXRlUGF5am9pbkRlcG9zaXQiLCJkZWNvZGVMaWdodG5pbmdJbnZvaWNlIiwiZGVyaXZlQWRkcmVzc0Zyb21YcHViIiwiZmV0Y2hMaWdodG5pbmdDaGFubmVscyIsImZldGNoTGlnaHRuaW5nU3RhdHVzIiwiZmV0Y2hQYXltZW50cyIsImZldGNoUGF5am9pbkNhcGFiaWxpdGllcyIsImZldGNoUGF5am9pblNlc3Npb25zIiwiZmV0Y2hSZWNlaXZlQWRkcmVzcyIsImZldGNoVHJhbnNhY3Rpb25IZXgiLCJmZXRjaFVUWE9zIiwiZmV0Y2hXYWxsZXRTdW1tYXJ5IiwiZmV0Y2hXYWxsZXRUcmFuc2FjdGlvbnMiLCJnZXRTcGVuZFdhbGxldENvbnRleHQiLCJnZXROZXh0UmVjZWl2ZVdhbGxldENvbnRleHQiLCJsb2FkVXBzdHJlYW1TZXR0aW5ncyIsImxvYWRQYXlqb2luUHJlZmVyZW5jZXMiLCJzYXZlUGF5am9pblByZWZlcmVuY2VzIiwicGF5TGlnaHRuaW5nSW52b2ljZSIsInJlc2VydmVOZXh0UmVjZWl2ZUFkZHJlc3MiLCJzZW5kUGF5bWVudCIsInN1Ym1pdFBheWpvaW5Qcm9wb3NhbCIsImFwcGx5UGF5am9pbkFjcEh1YkJvb3N0IiwiX3JlcXVpcmU0IiwicmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciIsIl9yZXF1aXJlNSIsInBhcnNlQml0Y29pblVyaUZvclBheWpvaW4iLCJleHRyYWN0RmFicmljUGF5am9pblNlc3Npb25JZEZyb21QalVybCIsImNoYWluSW5kZXhGcm9tRGVzY3JpcHRvciIsImJ1aWxkT3JpZ2luYWxTaWduZWRQYXlqb2luUHNidCIsInNpZ25PdXJQYXlqb2luSW5wdXRzIiwiZmluYWxpemVBbmRFeHRyYWN0SGV4IiwicG9zdFBheWpvaW5Qcm9wb3NhbFdpdGhEZXNrdG9wRmFsbGJhY2siLCJfcmVxdWlyZTYiLCJmb3JtYXRTYXRzRGlzcGxheSIsIl9yZXF1aXJlNyIsImZhYnJpY0lkZW50aXR5TmVlZEZ1bGxLZXlQbGFpbiIsInR4Q29udHJhY3RMYWJlbHMiLCJpbnZvaWNlU3RvcmUiLCJfcmVxdWlyZTgiLCJjb3B5VG9DbGlwYm9hcmQiLCJwdXNoVWlOb3RpZmljYXRpb24iLCJfcmVxdWlyZTkiLCJTQVRTX1BFUl9CVEMiLCJRclNjYW5uZXJNb2RhbCIsIkh1YlJlZ3Rlc3RBZG1pblRva2VuUGFuZWwiLCJCaXRjb2luV2FsbGV0QnJhbmNoQmFyIiwiX3JlcXVpcmUwIiwibG9hZEZlZGVyYXRpb25TcGVuZGluZ1ByZWZzIiwibWVyZ2VQYXltZW50TWVtb1dpdGhGZWRlcmF0aW9uIiwiX3JlcXVpcmUxIiwic2FmZUJyaWVmTWVzc2FnZSIsIl9yZXF1aXJlMTAiLCJoYXNFeHRlcm5hbFNpZ25pbmdEZWxlZ2F0aW9uIiwicmVhZFBheW1lbnRzRGVlcExpbmtGcm9tTG9jYXRpb24iLCJ3aW5kb3ciLCJzcCIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwicGF5VG8iLCJnZXQiLCJ0cmltIiwicGF5QW1vdW50U2F0cyIsImJpdGNvaW5VcmkiLCJfIiwiY29tcHV0ZU1ha2VQYXltZW50RGVlcExpbmtQYXRjaCIsInByb3BzIiwibG9jIiwicUJpdGNvaW5VcmkiLCJiaXRjb2luVXJpRnJvbVF1ZXJ5IiwicVRvIiwicGF5VG9Gcm9tUXVlcnkiLCJyYXdBbXRQcm9wIiwicGF5QW1vdW50U2F0c0Zyb21RdWVyeSIsInFBbXRSYXciLCJxQW10U3RyIiwiaXNGaW5pdGUiLCJNYXRoIiwicm91bmQiLCJwYXRjaCIsInRvIiwibGlnaHRuaW5nSW52b2ljZSIsImRlY29kZWRJbnZvaWNlIiwiYW1vdW50U2F0cyIsImJ1aWxkUGF5am9pblNlc3Npb25Bc2NpaSIsInNlc3Npb25zIiwibGlzdCIsImhlYWQiLCJzZXAiLCJsaW5lcyIsIm1pbiIsIm9pZCIsImlkIiwicmVwbGFjZSIsInBhZEVuZCIsImFtdCIsImFtdGYiLCJwYWRTdGFydCIsInN0Iiwic3RhdHVzIiwiYWQiLCJhZGRyZXNzIiwicHJvcG9zYWxzIiwiZXgiLCJleHBpcmVzQXQiLCJEYXRlIiwiaXNOYU4iLCJnZXRUaW1lIiwidG9JU09TdHJpbmciLCJjb25jYXQiLCJqb2luIiwiQml0Y29pblBheW1lbnRzSG9tZSIsIl9SZWFjdCRDb21wb25lbnQiLCJfdGhpcyIsIl9zeW5jUGF5bWVudHNIYXNoU2Nyb2xsIiwicGpQcmVmIiwic3RhdGUiLCJsb2FkaW5nIiwiZXJyb3IiLCJ1cHN0cmVhbSIsIndhbGxldCIsInN1bW1hcnkiLCJyZWNlaXZlQWRkcmVzcyIsInV0eG9zIiwicGF5bWVudHMiLCJtZW1vIiwicmVzdWx0IiwicGF5am9pblNlc3Npb25zIiwicGF5am9pblNlc3Npb25JZCIsInBheWpvaW5Qc2J0IiwicGF5am9pblJlc3VsdCIsInRyYW5zYWN0aW9ucyIsInNjYW5Nb2RhbE9wZW4iLCJwYXlqb2luQ2FwYWJpbGl0aWVzIiwiYXZhaWxhYmxlIiwicGF5am9pblByZWZlclJlY2VpdmUiLCJwYXltZW50c1JlY2VpdmUiLCJwYXlqb2luUHJlZmVyU2VuZCIsInBheW1lbnRzU2VuZCIsInBheWpvaW5SZWNlaXZlVXNlSm9pbm1hcmtldCIsInJlY2VpdmVUYXByb290Sm9pbm1hcmtldCIsInJlY2VpdmVQYXlqb2luQW1vdW50U2F0cyIsInBheWpvaW5SZWNlaXZlQnVzeSIsInBheWpvaW5SZWNlaXZlUmVzdWx0IiwibG9jYWxQYXlqb2luQnVzeSIsImxvY2FsUGF5am9pblJlc3VsdCIsImFjcFBheWpvaW5CdXN5IiwiYWNwUGF5am9pblJlc3VsdCIsImxpZ2h0bmluZ1N1bW1hcnkiLCJsaWdodG5pbmdDaGFubmVscyIsImxpZ2h0bmluZ091dHB1dHMiLCJyZWNvcmRGZWRlcmF0aW9uUGF5bWVudCIsImdldExpZ2h0bmluZ0JhbGFuY2VGcm9tT3V0cHV0cyIsIm91dHB1dHMiLCJ1bmRlZmluZWQiLCJjb25maXJtZWQiLCJ1bmNvbmZpcm1lZCIsImltbWF0dXJlIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJzYXRzIiwiYW1vdW50X21zYXQiLCJmbG9vciIsImFtb3VudF9zYXQiLCJ0b0xvd2VyQ2FzZSIsImVyciIsImNvbXBvbmVudERpZE1vdW50IiwicmVmcmVzaCIsInNpZCIsInBheWpvaW5TZXNzaW9uRnJvbVF1ZXJ5Iiwic2V0U3RhdGUiLCJhZGRFdmVudExpc3RlbmVyIiwiX29uUGF5bWVudHNIYXNoQ2hhbmdlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwicHJldlN0YXRlIiwicHJldiIsImlkZW50aXR5IiwieHB1YiIsImlkZW50aXR5V2FsbGV0Q2hhbmdlZCIsInBxIiwibnEiLCJwUGF5IiwiblBheSIsInBBbXQiLCJuQW10IiwicEJjIiwibkJjIiwicXVlcnlDaGFuZ2VkIiwicmF3IiwiaGFzaCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImVsIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJibG9jayIsIl9yZWZyZXNoIiwiX2NhbGxlZSIsIm5leHRSZWNlaXZlIiwibmV0d29yayIsImRlZXBMaW5rUGF0Y2giLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwiaW52TGFiZWxzIiwidHhSb3dzIiwibGlnaHRuaW5nQ2hhbm5lbHNMaXN0IiwibGlnaHRuaW5nT3V0cHV0c0xpc3QiLCJuZXh0U3RhdGUiLCJwcmV2QmMiLCJwcmV2UGF5VG8iLCJwcmV2UGF5QW10IiwiY3VyVG8iLCJfY3VyVG8iLCJjdXJBbXQiLCJwaiIsImJ1IiwiYW1vdW50U3RyIiwiYW1vdW50QnRjIiwiZmluYWxBbXQiLCJfdCIsIl9jb250ZXh0IiwiaHViQWRtaW5Ub2tlbiIsImFkbWluVG9rZW4iLCJiaXRjb2luIiwiYWxsIiwibGltaXQiLCJpbmNsdWRlRXhwaXJlZCIsImJ1aWxkSW52b2ljZVR4TGFiZWxzIiwibG9hZEludm9pY2VzIiwibWVyZ2VTZXJ2ZXJBbmRMb2NhbExhYmVscyIsImNoYW5uZWxzIiwiX2xhc3RCaXRjb2luVXJpQXBwbGllZCIsIl9sYXN0UGF5VG9BcHBsaWVkIiwiX2xhc3RQYXlBbXRBcHBsaWVkIiwiVVJMIiwicHJvdG9jb2wiLCJzZWFyY2hQYXJhbXMiLCJOYU4iLCJfcmVndGVzdFNlbmRBbW91bnRQcmltZWQiLCJiYWxhbmNlU2F0cyIsImJhbGFuY2UiLCJjb25maXJtZWRTYXRzIiwidW5jb25maXJtZWRTYXRzIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwid2FsbGV0SWQiLCJtZXNzYWdlIiwiX2hhbmRsZVNlbmQiLCJfY2FsbGVlMiIsInBhaWRUeGlkIiwicGFpZCIsImNoYW5nZWQiLCJfaSIsIl9hcnIiLCJrIiwiX3QyIiwiX2NvbnRleHQyIiwiX2FkbWluVG9rZW5Gb3JCcm9hZGNhc3QiLCJwYXltZW50IiwidHhpZCIsInBheW1lbnRzU2V0U2VhcmNoUGFyYW1zIiwiaGFzIiwiaGFuZGxlU2VuZCIsImhhbmRsZU5leHRSZWNlaXZlQWRkcmVzcyIsInJlY2VpdmVXYWxsZXQiLCJjdXJyZW50QWRkcmVzcyIsImhhbmRsZUNvcHlBZGRyZXNzIiwiYWRkciIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsImlzTGlnaHRuaW5nSW52b2ljZSIsInRleHQiLCJzdGFydHNXaXRoIiwiaGFuZGxlU2NhblJlc3VsdCIsImRlY29kZWRUZXh0IiwiaGFuZGxlRGVjb2RlSW52b2ljZSIsIl9oYW5kbGVEZWNvZGVJbnZvaWNlIiwiX2NhbGxlZTMiLCJpbnZvaWNlIiwiaW52IiwiX3JlZiIsIl9kJG51bV9zYXRvc2hpcyIsImRlY29kZWQiLCJfdDMiLCJfY29udGV4dDMiLCJudW1fc2F0b3NoaXMiLCJudW1TYXRvc2hpcyIsImFtb3VudCIsIl94IiwiaXNMaWtlbHlQYXlqb2luQmlwMjEiLCJsb3dlciIsImluY2x1ZGVzIiwiX2hhbmRsZUNyZWF0ZVBheWpvaW5SZWNlaXZlTGluayIsIl9jYWxsZWU0IiwidXNlSm0iLCJzZXNzaW9uIiwiX3Q0IiwiX2NvbnRleHQ0IiwicmVjZWl2ZVRlbXBsYXRlIiwibGFiZWwiLCJraW5kIiwidGl0bGUiLCJzdWJ0aXRsZSIsImhyZWYiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjb3B5VGV4dCIsImJpcDIxVXJpIiwicHJvcG9zYWxVUkwiLCJoYW5kbGVDcmVhdGVQYXlqb2luUmVjZWl2ZUxpbmsiLCJfaGFuZGxlUGF5TGlnaHRuaW5nIiwiX2NhbGxlZTUiLCJfdDUiLCJfY29udGV4dDUiLCJvayIsImhhbmRsZVBheUxpZ2h0bmluZyIsIl9oYW5kbGVMb2NhbFBheWpvaW5TZW5kIiwiX2NhbGxlZTYiLCJfdGhpczIiLCJ4cHJ2IiwicGFyc2VkIiwic2VuZEFtb3VudFNhdHMiLCJwYXlBZGRyZXNzIiwibWF4Q2hhbmdlSWR4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImNpIiwiY2hhbmdlSW5kZXgiLCJjaGFuZ2VBZGRyZXNzIiwiZ2V0UHJldlR4SGV4IiwiYnVpbHQiLCJwcm9wb3NlZCIsIm1zZyIsImlzRGVzayIsInNpZ25lZFR3aWNlIiwiaGV4Iiwib3V0IiwiX3Q2IiwiX3Q3IiwiX2NvbnRleHQ2IiwicGpVcmwiLCJkZXNjIiwiY2hhaW4iLCJtYXgiLCJpbmRleCIsIkVycm9yIiwibmV0d29ya05hbWUiLCJwc2J0QmFzZTY0IiwiZmFicmljRGVza3RvcCIsImlzRGVza3RvcFNoZWxsIiwib3VySW5wdXRJbmRpY2VzIiwiaGFuZGxlTG9jYWxQYXlqb2luU2VuZCIsIl9oYW5kbGVBY3BIdWJCb29zdFBheWpvaW4iLCJfY2FsbGVlNyIsIl90aGlzMyIsInNlc3Npb25JZCIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJib29zdGVkIiwiX3Q4IiwiX2NvbnRleHQ3IiwiYW55b25lQ2FuUGF5QWxsIiwicHNidCIsImFkZGVkT3V0cG9pbnQiLCJhZGRlZFZhbHVlU2F0cyIsImhhbmRsZUFjcEh1YkJvb3N0UGF5am9pbiIsIl9oYW5kbGVTdWJtaXRQYXlqb2luUHJvcG9zYWwiLCJfY2FsbGVlOCIsIl90OSIsIl9jb250ZXh0OCIsIm5vdyIsImhhbmRsZVN1Ym1pdFBheWpvaW5Qcm9wb3NhbCIsInJlbmRlciIsIl90aGlzNCIsIl9yZWYyIiwiX3RoaXMkc3RhdGUkZGVjb2RlZEluIiwidHJhbnNhY3Rpb25zT25seSIsImhhc0FkbWluIiwidHJ1c3RlZCIsImJhbGFuY2VEaXNwbGF5IiwidG9GaXhlZCIsImxuIiwibG5DaGFucyIsImxuT3V0cHV0cyIsImxuTWFuYWdlZCIsImxuQWN0aXZlIiwic2VuZFRvIiwic2VuZEFtdCIsImNhblNlbmRPbkNoYWluQmFzZSIsImNhblNlbmRPbkNoYWluIiwiaHViQml0Y29pbiIsImh1YldhbGxldFNhdHMiLCJzaGFyZWRTZXNzaW9uU2F0cyIsInBheWpvaW5PcGVuQ291bnQiLCJsMUhlaWdodCIsImhlaWdodCIsImlkZW50aXR5Rm9yV2FsbGV0Iiwid2FsbGV0Q3R4IiwiYnRjV2F0Y2hPbmx5IiwiZXh0U2lnbmluZyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJyb2xlIiwic3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsInpJbmRleCIsImJhY2tncm91bmQiLCJwYWRkaW5nQm90dG9tIiwibWFyZ2luQm90dG9tIiwiYm94U2hhZG93Iiwic2Nyb2xsTWFyZ2luVG9wIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJhbGlnbkl0ZW1zIiwiZ2FwIiwiZmxleFdyYXAiLCJhcyIsImJhc2ljIiwic2l6ZSIsIm1hcmdpbiIsIkNvbnRlbnQiLCJuZWdhdGl2ZSIsImNvbnRlbnQiLCJpbmZvIiwiY29sb3IiLCJmb250U2l6ZSIsIndhcm5pbmciLCJvcmRlcmVkIiwicmVsYXhlZCIsIkl0ZW0iLCJhZG1pblRva2VuUHJvcCIsImJvcmRlciIsImZvbnRGYW1pbHkiLCJmb250V2VpZ2h0Iiwib3BhY2l0eSIsImxpbmVIZWlnaHQiLCJ0b0xvY2FsZVN0cmluZyIsImdyaWRUZW1wbGF0ZUNvbHVtbnMiLCJib3JkZXJSYWRpdXMiLCJwYWRkaW5nIiwibGV0dGVyU3BhY2luZyIsIm1hcmdpblRvcCIsImludmVydGVkIiwiaWNvbiIsImxhYmVsUG9zaXRpb24iLCJob3Jpem9udGFsIiwiYm9yZGVyQ29sb3IiLCJjb21wYWN0IiwiY2VsbGVkIiwidW5zdGFja2FibGUiLCJCb2R5IiwiUm93IiwiQ2VsbCIsIndpZHRoIiwiZGl2aWRpbmciLCJ0b2dnbGUiLCJjaGVja2VkIiwiZGlzYWJsZWQiLCJvbkNoYW5nZSIsImRhdGEiLCJJbnB1dCIsInR5cGUiLCJzdGVwIiwicGxhY2Vob2xkZXIiLCJ0YXJnZXQiLCJwcmltYXJ5Iiwib25DbGljayIsInBvc2l0aXZlIiwibWFyZ2luTGVmdCIsImZsZXgiLCJ3b3JkQnJlYWsiLCJGaWVsZCIsImRlc2NyaXB0aW9uIiwiRnJhZ21lbnQiLCJHcm91cCIsIndpZHRocyIsInRpZCIsIkhlYWRlckNlbGwiLCJtYXAiLCJ0eCIsImlkeCIsIm91ckFtb3VudCIsImFtdE51bSIsImlzT3V0Z29pbmciLCJpc0luY29taW5nIiwidGltZSIsImJsb2NrdGltZSIsImRhdGVTdHIiLCJmYWJyaWNDb250cmFjdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJtZXRhIiwiY29uZmlybWF0aW9ucyIsImZlZSIsIm92ZXJmbG93IiwibWF4SGVpZ2h0IiwiVGV4dEFyZWEiLCJyb3dzIiwid2hpdGVTcGFjZSIsImV4cGlyZWQiLCJtYXhXaWR0aCIsImoiLCJtYXJnaW5SaWdodCIsInByb3Bvc2FsVHhpZCIsImhhc1BzYnQiLCJoYXNUeGhleCIsInZvdXQiLCJvcGVuIiwib25DbG9zZSIsIm9uU2NhbiIsIkNvbXBvbmVudCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/BitcoinPaymentsHome.js\n\n}')},"./components/BitcoinResourcesHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nvar _require = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/dist/index.js\"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ \"./node_modules/semantic-ui-react/dist/es/index.js\"),\n Button = _require2.Button,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Message = _require2.Message,\n Segment = _require2.Segment,\n Table = _require2.Table;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ \"./functions/bitcoinClient.js\"),\n getSpendWalletContext = _require3.getSpendWalletContext,\n loadUpstreamSettings = _require3.loadUpstreamSettings,\n verifyL1Payment = _require3.verifyL1Payment;\nvar BitcoinWalletBranchBar = __webpack_require__(/*! ./BitcoinWalletBranchBar */ \"./components/BitcoinWalletBranchBar.js\");\n\n/**\n * Same-origin only: browse JSON is for the local Hub, not arbitrary URLs.\n */\nfunction normalizeBrowseJsonPath(raw) {\n var path = String(raw || '').trim() || '/services/bitcoin';\n if (path.startsWith('//')) {\n throw new Error('Use a path starting with / (protocol-relative URLs are not allowed).');\n }\n if (/^https?:\\/\\//i.test(path)) {\n var u;\n try {\n u = new URL(path);\n } catch (_) {\n throw new Error('Invalid URL.');\n }\n if (typeof window !== 'undefined' && window.location && u.origin !== window.location.origin) {\n throw new Error('Cross-origin fetch is disabled. Use a path on this hub (e.g. /services/bitcoin).');\n }\n return u.pathname + u.search + u.hash;\n }\n if (!path.startsWith('/')) return \"/\".concat(path);\n return path;\n}\n\n/**\n * Operator view: canonical Bitcoin HTTP resources (GET) + L1 payment verification form.\n */\nvar BitcoinResourcesHome = /*#__PURE__*/function (_React$Component) {\n function BitcoinResourcesHome(props) {\n var _this;\n _classCallCheck(this, BitcoinResourcesHome);\n _this = _callSuper(this, BitcoinResourcesHome, [props]);\n _this.state = {\n upstream: loadUpstreamSettings(),\n wallet: null,\n verifyTxid: '',\n verifyAddress: '',\n verifyAmountSats: '',\n verifyResult: null,\n verifyLoading: false,\n fetchPath: '/services/bitcoin',\n fetchResult: null,\n fetchLoading: false,\n fetchError: null\n };\n _this._regtestVerifyAmountPrimed = false;\n return _this;\n }\n _inherits(BitcoinResourcesHome, _React$Component);\n return _createClass(BitcoinResourcesHome, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var identity = this.props && this.props.identity || {};\n var networkRaw = this.props.bitcoin && this.props.bitcoin.network;\n var network = networkRaw != null && String(networkRaw).trim() ? String(networkRaw).toLowerCase() : null;\n var next = {\n wallet: getSpendWalletContext(identity)\n };\n if (network === 'regtest' && !this._regtestVerifyAmountPrimed) {\n this._regtestVerifyAmountPrimed = true;\n if (!String(this.state.verifyAmountSats || '').trim()) {\n next.verifyAmountSats = '10000';\n }\n }\n try {\n if (typeof window !== 'undefined' && window.location && window.location.search) {\n var tx = new URLSearchParams(window.location.search).get('tx');\n if (tx && String(tx).trim()) next.verifyTxid = String(tx).trim();\n }\n } catch (_) {}\n this.setState(next);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var prev = prevProps && prevProps.identity && prevProps.identity.xpub;\n var next = this.props && this.props.identity && this.props.identity.xpub;\n if (prev !== next) {\n var identity = this.props && this.props.identity || {};\n this.setState({\n wallet: getSpendWalletContext(identity)\n });\n }\n var prevNet = prevProps && prevProps.bitcoin && prevProps.bitcoin.network;\n var nextNet = this.props && this.props.bitcoin && this.props.bitcoin.network;\n if (String(prevNet || '').toLowerCase() !== String(nextNet || '').toLowerCase()) {\n var network = nextNet != null && String(nextNet).trim() ? String(nextNet).toLowerCase() : null;\n if (network === 'regtest' && !String(this.state.verifyAmountSats || '').trim()) {\n this.setState({\n verifyAmountSats: '10000'\n });\n }\n }\n }\n }, {\n key: \"handleVerify\",\n value: function () {\n var _handleVerify = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var upstream, txid, address, amountSats, res, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n upstream = this.state.upstream;\n txid = String(this.state.verifyTxid || '').trim();\n address = String(this.state.verifyAddress || '').trim();\n amountSats = Number(this.state.verifyAmountSats || 0);\n this.setState({\n verifyLoading: true,\n verifyResult: null\n });\n _context.p = 1;\n _context.n = 2;\n return verifyL1Payment(upstream, {\n txid: txid,\n address: address,\n amountSats: amountSats\n });\n case 2:\n res = _context.v;\n this.setState({\n verifyLoading: false,\n verifyResult: res\n });\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n this.setState({\n verifyLoading: false,\n verifyResult: {\n error: _t && _t.message ? _t.message : String(_t)\n }\n });\n case 4:\n return _context.a(2);\n }\n }, _callee, this, [[1, 3]]);\n }));\n function handleVerify() {\n return _handleVerify.apply(this, arguments);\n }\n return handleVerify;\n }()\n }, {\n key: \"handleFetchJson\",\n value: function () {\n var _handleFetchJson = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var path, headers, token, res, text, body, msg, _t2, _t3;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n _context2.p = 0;\n path = normalizeBrowseJsonPath(this.state.fetchPath);\n _context2.n = 2;\n break;\n case 1:\n _context2.p = 1;\n _t2 = _context2.v;\n this.setState({\n fetchLoading: false,\n fetchResult: null,\n fetchError: _t2 && _t2.message ? _t2.message : String(_t2)\n });\n return _context2.a(2);\n case 2:\n this.setState({\n fetchLoading: true,\n fetchResult: null,\n fetchError: null\n });\n _context2.p = 3;\n headers = {\n Accept: 'application/json'\n };\n token = String(this.state.upstream && this.state.upstream.apiToken || '').trim();\n if (token) headers.Authorization = \"Bearer \".concat(token);\n _context2.n = 4;\n return fetch(path, {\n method: 'GET',\n headers: headers\n });\n case 4:\n res = _context2.v;\n _context2.n = 5;\n return res.text();\n case 5:\n text = _context2.v;\n try {\n body = JSON.parse(text);\n } catch (_) {\n body = text;\n }\n if (res.ok) {\n _context2.n = 6;\n break;\n }\n msg = body && body.message ? body.message : \"\".concat(res.status, \" \").concat(res.statusText);\n throw new Error(msg);\n case 6:\n this.setState({\n fetchLoading: false,\n fetchResult: body\n });\n _context2.n = 8;\n break;\n case 7:\n _context2.p = 7;\n _t3 = _context2.v;\n this.setState({\n fetchLoading: false,\n fetchError: _t3 && _t3.message ? _t3.message : String(_t3)\n });\n case 8:\n return _context2.a(2);\n }\n }, _callee2, this, [[3, 7], [0, 1]]);\n }));\n function handleFetchJson() {\n return _handleFetchJson.apply(this, arguments);\n }\n return handleFetchJson;\n }()\n }, {\n key: \"openPath\",\n value: function openPath(path) {\n var p = path.startsWith('/') ? path : \"/\".concat(path);\n window.open(p, '_blank', 'noopener,noreferrer');\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n var w = this.state.wallet || {};\n var walletId = w.walletId || '';\n var rows = [{\n method: 'GET',\n path: '/services/bitcoin',\n note: 'Status, health, beacon'\n }, {\n method: 'GET',\n path: '/services/bitcoin/blocks',\n note: 'Recent blocks'\n }, {\n method: 'GET',\n path: '/services/bitcoin/transactions',\n note: 'Recent transactions'\n }, {\n method: 'GET',\n path: '/services/bitcoin/wallets',\n note: 'Wallet summaries'\n }, {\n method: 'GET',\n path: '/services/bitcoin/xpub?xpub=',\n note: 'Watch-only balance (scantxoutset); optional &addresses= for mempool; no wallet id in URL'\n }, {\n method: 'GET',\n path: '/services/bitcoin/xpub/utxos?xpub=',\n note: 'Watch-only UTXOs'\n }, {\n method: 'GET',\n path: '/services/bitcoin/xpub/transactions?xpub=&limit=&addresses=',\n note: 'Watch-only tx list'\n }, {\n method: 'GET',\n path: walletId ? \"/services/bitcoin/wallets/\".concat(walletId) : '/services/bitcoin/wallets/:walletId',\n note: 'Legacy: client balance when ?xpub= and :walletId ≠ Hub wallet; prefer /xpub'\n }, {\n method: 'GET',\n path: walletId ? \"/services/bitcoin/wallets/\".concat(walletId, \"/utxos\") : '/services/bitcoin/wallets/:walletId/utxos',\n note: 'Legacy UTXOs; prefer /xpub/utxos'\n }, {\n method: 'GET',\n path: walletId ? \"/services/bitcoin/wallets/\".concat(walletId, \"/transactions\") : '/services/bitcoin/wallets/:walletId/transactions',\n note: 'Legacy txs; prefer /xpub/transactions'\n }, {\n method: 'GET',\n path: '/services/bitcoin/addresses',\n note: 'Receive address helper'\n }, {\n method: 'GET',\n path: '/payments',\n note: 'Canonical outbound payments list (legacy GET /services/bitcoin/payments)'\n }, {\n method: 'POST',\n path: '/payments',\n note: 'Canonical Hub-wallet spend POST (legacy POST /services/bitcoin/payments)'\n }, {\n method: 'GET',\n path: '/services/payjoin',\n note: 'Payjoin capabilities (+ fabricProtocol); mirror: /payments/payjoin'\n }, {\n method: 'GET',\n path: '/services/payjoin/sessions',\n note: 'List sessions'\n }, {\n method: 'POST',\n path: '/services/payjoin/sessions',\n note: 'Create deposit session (body: walletId, amountSats, address?, receiveTemplate?, federationXOnlyHex?)'\n }, {\n method: 'POST',\n path: '/services/payjoin/sessions/:sessionId/proposals',\n note: 'Submit Payjoin proposal (body: psbt / txhex)'\n }, {\n method: 'POST',\n path: '/services/payjoin/sessions/:sessionId/acp-hub-boost',\n note: 'Admin Bearer: append+sign Hub wallet input on ANYONECANPAY|ALL payer PSBT (outputs unchanged)'\n }, {\n method: 'GET',\n path: '/services/bitcoin/crowdfunding/campaigns',\n note: 'List Taproot crowdfunds (goal/min committed in tapscript; 2-of-2 payout)'\n }, {\n method: 'POST',\n path: '/services/bitcoin/crowdfunding/campaigns',\n note: 'Create campaign (admin Bearer): beneficiaryPubkeyHex, goalSats, minContributionSats, refundAfterBlocks?, title?'\n }, {\n method: 'GET',\n path: '/services/bitcoin/crowdfunding/campaigns/:id/acp-donation-psbt?amountSats=',\n note: 'Outputs-only PSBT (one output to vault); donors add inputs with SIGHASH_ALL|ANYONECANPAY'\n }, {\n method: 'GET',\n path: '/services/bitcoin/crowdfunding/campaigns/:id',\n note: 'Campaign + scantxoutset balance, goalMet, vaultUtxos[{txid,vout,amountSats}]'\n }, {\n method: 'GET',\n path: '/services/bitcoin/crowdfunding/campaigns/:id/payout-psbt?destination=&feeSats=',\n note: 'Unsigned payout PSBT when raised ≥ goal; each UTXO ≥ minContributionSats'\n }, {\n method: 'POST',\n path: '/services/bitcoin/crowdfunding/campaigns/:id/payout-sign-arbiter',\n note: 'Admin: body psbtBase64 — Hub arbiter co-signs'\n }, {\n method: 'POST',\n path: '/services/bitcoin/crowdfunding/campaigns/:id/payout-broadcast',\n note: 'body psbtBase64 — finalize 2-of-2 payout + sendrawtransaction'\n }, {\n method: 'POST',\n path: '/services/bitcoin/crowdfunding/campaigns/:id/refund-prepare',\n note: 'Admin: after CLTV height — body destinationAddress, fundedTxid, vout?, feeSats?; returns signed arbiter refund hex'\n }, {\n method: 'POST',\n path: '/sessions',\n note: 'Desktop login: create session (body: origin); off loopback, request must match that origin — Origin / Referer / Sec-Fetch-Site+Host'\n }, {\n method: 'GET',\n path: '/sessions/:sessionId',\n note: 'Poll desktop login (pending/signed once then 404). After redeem, GET /sessions/:delegationToken needs Authorization: Bearer matching the token. Electron should send Origin=hub from fabric:// `hub` when not loopback; localhost vs 127.0.0.1 same port counts as same origin'\n }, {\n method: 'GET',\n path: '/sessions/:sessionId/delegation/audit',\n note: 'Delegation audit (Bearer must equal session id): pending queue, DELEGATION_* Fabric log slice, Hub verify pubkey'\n }, {\n method: 'DELETE',\n path: '/sessions/:sessionId',\n note: 'Revoke delegation (loopback or Bearer matching id); 404 if token unknown'\n }, {\n method: 'POST',\n path: '/sessions/:sessionId/signatures',\n note: 'Desktop completes login: loopback TCP or Origin/Referer/Host matching session (LAN hub); localhost ≡ 127.0.0.1 same port'\n }, {\n method: 'GET',\n path: '/sessions',\n note: 'List delegation sessions + pendingDelegationMessages (Fabric message ids; loopback)'\n }, {\n method: 'POST',\n path: '/services/rpc',\n note: 'JSON-RPC: PostDelegationSignatureMessage, GetDelegationSignatureMessage, ResolveDelegationSignatureMessage (delegation token / session id); list sessions GET /sessions is loopback-only; Fabric log DELEGATION_SIGNATURE_*'\n }, {\n method: 'GET',\n path: '/services/lightning',\n note: 'Lightning status'\n }, {\n method: 'GET',\n path: '/services/lightning/channels',\n note: 'Channels + listfunds outputs'\n }, {\n method: 'DELETE',\n path: '/services/lightning/channels/:channelId',\n note: 'Close channel (CLN close RPC)'\n }, {\n method: 'POST',\n path: '/services/lightning/channels',\n note: 'Open channel (body: peerId/remote, amountSats, …)'\n }, {\n method: 'POST',\n path: '/services/lightning/invoices',\n note: 'Create invoice'\n }, {\n method: 'POST',\n path: '/services/lightning/payments',\n note: 'Pay invoice'\n }, {\n method: 'POST',\n path: '/services/lightning/decodes',\n note: 'Decode BOLT11'\n }, {\n method: 'GET',\n path: '/services/bitcoin/transactions/:txid?address=&amountSats=',\n note: 'L1 payment proof (same resource as raw tx; query selects proof JSON)'\n }, {\n method: 'GET',\n path: '/services/distributed/manifest',\n note: 'Distributed execution manifest; federation validator pubkeys and threshold'\n }, {\n method: 'GET',\n path: '/services/distributed/epoch',\n note: 'Beacon epoch summary JSON (L1 height/hash; optional sidechain digest; witness metadata)'\n }, {\n method: 'GET',\n path: '/services/distributed/vault',\n note: 'Federation Taproot vault address, tapscript hex, maturity policy'\n }, {\n method: 'GET',\n path: '/services/distributed/vault/utxos',\n note: 'Vault UTXOs (scantxoutset) + per-UTXO maturity hint'\n }, {\n method: 'GET',\n path: '/services/distributed/federation-registry',\n note: 'Fabric filesystem catalog: seeded federations + fabfed OP_RETURN discoveries (regtest scan default)'\n }];\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"fade-in\"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(\"section\", {\n \"aria-labelledby\": \"btc-resources-page-heading\",\n \"aria-describedby\": \"btc-resources-page-summary\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'flex',\n flexDirection: 'column',\n gap: '0.75rem',\n marginBottom: '0.25em'\n },\n role: \"banner\"\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: '0.5em',\n alignItems: 'center'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: \"/services/bitcoin\",\n basic: true,\n \"aria-label\": \"Back to Bitcoin dashboard\",\n title: \"Bitcoin home (status, wallet, explorer, and tools)\"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"arrow left\",\n \"aria-hidden\": \"true\"\n }), \"Bitcoin\"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: \"/payments\",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"credit card outline\",\n \"aria-hidden\": \"true\"\n }), \"Payments UI\"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: \"/services/bitcoin/crowdfunds\",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"heart outline\",\n \"aria-hidden\": \"true\"\n }), \"Crowdfunds\")), /*#__PURE__*/React.createElement(Header, {\n as: \"h2\",\n id: \"btc-resources-page-heading\",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"bitcoin\",\n color: \"orange\",\n \"aria-hidden\": \"true\"\n }), /*#__PURE__*/React.createElement(Header.Content, null, \"Bitcoin HTTP resources\")), /*#__PURE__*/React.createElement(\"p\", {\n id: \"btc-resources-page-summary\",\n style: {\n margin: 0,\n color: '#666',\n maxWidth: '48rem',\n lineHeight: 1.45\n }\n }, \"REST on \", /*#__PURE__*/React.createElement(\"code\", null, \"/services/bitcoin\"), \" and \", /*#__PURE__*/React.createElement(\"code\", null, \"/services/lightning\"), \": GET collections, POST to create or act, DELETE where removal is the semantics (e.g. close channel). Hub\", ' ', /*#__PURE__*/React.createElement(\"code\", null, \"POST /services/bitcoin\"), \" remains JSON-RPC for Fabric clients.\", ' ', /*#__PURE__*/React.createElement(\"strong\", null, \"Beacon / federation:\"), \" public epoch and policy JSON lives under\", ' ', /*#__PURE__*/React.createElement(\"code\", null, \"/services/distributed/\"), ' ', \"(quick-open below). How to compare L1 tips and reproduce Schnorr witnesses is summarized on\", ' ', /*#__PURE__*/React.createElement(Link, {\n to: \"/settings/admin/beacon-federation\"\n }, \"Beacon Federation\"), \".\")), /*#__PURE__*/React.createElement(BitcoinWalletBranchBar, {\n identity: this.props && this.props.identity || {}\n }))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(\"section\", {\n \"aria-labelledby\": \"btc-resources-l1-h3\",\n \"aria-describedby\": \"btc-resources-l1-desc\"\n }, /*#__PURE__*/React.createElement(Header, {\n as: \"h3\",\n id: \"btc-resources-l1-h3\"\n }, \"L1 payment verification\"), /*#__PURE__*/React.createElement(\"p\", {\n id: \"btc-resources-l1-desc\",\n style: {\n color: '#666'\n }\n }, \"Uses\", ' ', /*#__PURE__*/React.createElement(\"code\", null, \"GET /services/bitcoin/transactions/?address=&amountSats=\"), \".\"), /*#__PURE__*/React.createElement(Form, {\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n _this2.handleVerify();\n }\n }, /*#__PURE__*/React.createElement(Form.Group, {\n widths: \"equal\"\n }, /*#__PURE__*/React.createElement(Form.Input, {\n label: \"Transaction id\",\n placeholder: \"64-char hex txid\",\n value: this.state.verifyTxid,\n onChange: function onChange(e, _ref) {\n var value = _ref.value;\n return _this2.setState({\n verifyTxid: value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: \"Destination address\",\n placeholder: \"Invoice / expected receive address\",\n value: this.state.verifyAddress,\n onChange: function onChange(e, _ref2) {\n var value = _ref2.value;\n return _this2.setState({\n verifyAddress: value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: \"Minimum amount (sats)\",\n type: \"number\",\n min: 1,\n value: this.state.verifyAmountSats,\n onChange: function onChange(e, _ref3) {\n var value = _ref3.value;\n return _this2.setState({\n verifyAmountSats: value\n });\n },\n input: {\n 'aria-label': 'Minimum amount in satoshis for L1 payment verification'\n }\n })), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n type: \"submit\",\n loading: this.state.verifyLoading\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"check circle outline\"\n }), \"Verify\")), this.state.verifyResult && !this.state.verifyResult.error && this.state.verifyResult.verified === true && /*#__PURE__*/React.createElement(Message, {\n positive: true,\n style: {\n marginTop: '1em'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, \"Payment verified\"), /*#__PURE__*/React.createElement(\"pre\", {\n style: {\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all'\n }\n }, JSON.stringify(this.state.verifyResult, null, 2))), this.state.verifyResult && !this.state.verifyResult.error && this.state.verifyResult.verified === false && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n marginTop: '1em'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, \"Not verified\"), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n marginBottom: '0.65em'\n }\n }, \"This transaction does not pay at least the requested amount to the given address, or the node could not load the tx (wrong network, txindex off, or tx not seen yet).\"), /*#__PURE__*/React.createElement(\"pre\", {\n style: {\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n margin: 0\n }\n }, JSON.stringify(this.state.verifyResult, null, 2))), this.state.verifyResult && !this.state.verifyResult.error && this.state.verifyResult.verified !== true && this.state.verifyResult.verified !== false && /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n marginTop: '1em'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, \"Result\"), /*#__PURE__*/React.createElement(\"pre\", {\n style: {\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all'\n }\n }, JSON.stringify(this.state.verifyResult, null, 2))), this.state.verifyResult && this.state.verifyResult.error && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n style: {\n marginTop: '1em'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, \"Verification request failed\"), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n margin: '0.35em 0 0'\n }\n }, this.state.verifyResult.error), /*#__PURE__*/React.createElement(Button, {\n type: \"button\",\n size: \"small\",\n style: {\n marginTop: '0.75em'\n },\n loading: this.state.verifyLoading,\n disabled: this.state.verifyLoading,\n onClick: function onClick() {\n return void _this2.handleVerify();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"refresh\"\n }), \"Retry\")))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(\"section\", {\n \"aria-labelledby\": \"btc-resources-fetch-h3\",\n \"aria-describedby\": \"btc-resources-fetch-desc\"\n }, /*#__PURE__*/React.createElement(Header, {\n as: \"h3\",\n id: \"btc-resources-fetch-h3\"\n }, \"Browse JSON\"), /*#__PURE__*/React.createElement(\"p\", {\n id: \"btc-resources-fetch-desc\",\n style: {\n color: '#666'\n }\n }, \"GET a path on \", /*#__PURE__*/React.createElement(\"strong\", null, \"this hub\"), \" (default \", /*#__PURE__*/React.createElement(\"code\", null, \"/services/bitcoin\"), \"). Cross-origin and protocol-relative URLs are rejected.\"), /*#__PURE__*/React.createElement(Form, {\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n _this2.handleFetchJson();\n }\n }, /*#__PURE__*/React.createElement(Form.Input, {\n label: \"Path\",\n value: this.state.fetchPath,\n onChange: function onChange(e, _ref4) {\n var value = _ref4.value;\n return _this2.setState({\n fetchPath: value\n });\n },\n placeholder: \"/services/bitcoin\"\n }), /*#__PURE__*/React.createElement(Button, {\n type: \"submit\",\n loading: this.state.fetchLoading\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"download\"\n }), \"Fetch\")), this.state.fetchError && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n style: {\n marginTop: '1em'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, \"Request failed\"), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n margin: '0.35em 0 0'\n }\n }, this.state.fetchError), /*#__PURE__*/React.createElement(Button, {\n type: \"button\",\n size: \"small\",\n style: {\n marginTop: '0.75em'\n },\n loading: this.state.fetchLoading,\n disabled: this.state.fetchLoading,\n onClick: function onClick() {\n return void _this2.handleFetchJson();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"refresh\"\n }), \"Retry\")), this.state.fetchResult != null && /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n marginTop: '1em'\n }\n }, /*#__PURE__*/React.createElement(\"pre\", {\n style: {\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n maxHeight: '24em',\n overflow: 'auto'\n }\n }, typeof this.state.fetchResult === 'string' ? this.state.fetchResult : JSON.stringify(this.state.fetchResult, null, 2))))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(\"section\", {\n \"aria-labelledby\": \"btc-resources-quickopen-h3\"\n }, /*#__PURE__*/React.createElement(Header, {\n as: \"h3\",\n id: \"btc-resources-quickopen-h3\"\n }, \"Quick open (new tab)\"), /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n \"aria-label\": \"Bitcoin and related HTTP endpoints\"\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, \"Method\"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, \"Path\"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, \"Note\"), /*#__PURE__*/React.createElement(Table.HeaderCell, {\n collapsing: true\n }, \"Open\"))), /*#__PURE__*/React.createElement(Table.Body, null, rows.map(function (r) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: \"\".concat(r.method, \":\").concat(r.path)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, r.method), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement(\"code\", {\n style: {\n fontSize: '0.85em'\n }\n }, r.path)), /*#__PURE__*/React.createElement(Table.Cell, null, r.note), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement(Button, {\n size: \"mini\",\n basic: true,\n type: \"button\",\n disabled: r.path.includes(':') || r.method !== 'GET',\n title: r.method !== 'GET' ? 'Quick open is GET-only; use curl or an API client for POST/DELETE.' : undefined,\n onClick: function onClick() {\n return _this2.openPath(r.path.split('?')[0]);\n },\n \"aria-label\": \"Open \".concat(r.method, \" \").concat(r.path.split('?')[0], \" as JSON in new tab\")\n }, \"JSON\")));\n }))))));\n }\n }]);\n}(React.Component);\nmodule.exports = BitcoinResourcesHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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L0JpdGNvaW5SZXNvdXJjZXNIb21lLmpzPzgyMjUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHtcbiAgQnV0dG9uLFxuICBGb3JtLFxuICBIZWFkZXIsXG4gIEljb24sXG4gIE1lc3NhZ2UsXG4gIFNlZ21lbnQsXG4gIFRhYmxlXG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IHtcbiAgZ2V0U3BlbmRXYWxsZXRDb250ZXh0LFxuICBsb2FkVXBzdHJlYW1TZXR0aW5ncyxcbiAgdmVyaWZ5TDFQYXltZW50XG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2JpdGNvaW5DbGllbnQnKTtcbmNvbnN0IEJpdGNvaW5XYWxsZXRCcmFuY2hCYXIgPSByZXF1aXJlKCcuL0JpdGNvaW5XYWxsZXRCcmFuY2hCYXInKTtcblxuLyoqXG4gKiBTYW1lLW9yaWdpbiBvbmx5OiBicm93c2UgSlNPTiBpcyBmb3IgdGhlIGxvY2FsIEh1Yiwgbm90IGFyYml0cmFyeSBVUkxzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVCcm93c2VKc29uUGF0aCAocmF3KSB7XG4gIGxldCBwYXRoID0gU3RyaW5nKHJhdyB8fCAnJykudHJpbSgpIHx8ICcvc2VydmljZXMvYml0Y29pbic7XG4gIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy8vJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZSBhIHBhdGggc3RhcnRpbmcgd2l0aCAvIChwcm90b2NvbC1yZWxhdGl2ZSBVUkxzIGFyZSBub3QgYWxsb3dlZCkuJyk7XG4gIH1cbiAgaWYgKC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QocGF0aCkpIHtcbiAgICBsZXQgdTtcbiAgICB0cnkge1xuICAgICAgdSA9IG5ldyBVUkwocGF0aCk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFVSTC4nKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhdGlvbiAmJiB1Lm9yaWdpbiAhPT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDcm9zcy1vcmlnaW4gZmV0Y2ggaXMgZGlzYWJsZWQuIFVzZSBhIHBhdGggb24gdGhpcyBodWIgKGUuZy4gL3NlcnZpY2VzL2JpdGNvaW4pLicpO1xuICAgIH1cbiAgICByZXR1cm4gdS5wYXRobmFtZSArIHUuc2VhcmNoICsgdS5oYXNoO1xuICB9XG4gIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHJldHVybiBgLyR7cGF0aH1gO1xuICByZXR1cm4gcGF0aDtcbn1cblxuLyoqXG4gKiBPcGVyYXRvciB2aWV3OiBjYW5vbmljYWwgQml0Y29pbiBIVFRQIHJlc291cmNlcyAoR0VUKSArIEwxIHBheW1lbnQgdmVyaWZpY2F0aW9uIGZvcm0uXG4gKi9cbmNsYXNzIEJpdGNvaW5SZXNvdXJjZXNIb21lIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB1cHN0cmVhbTogbG9hZFVwc3RyZWFtU2V0dGluZ3MoKSxcbiAgICAgIHdhbGxldDogbnVsbCxcbiAgICAgIHZlcmlmeVR4aWQ6ICcnLFxuICAgICAgdmVyaWZ5QWRkcmVzczogJycsXG4gICAgICB2ZXJpZnlBbW91bnRTYXRzOiAnJyxcbiAgICAgIHZlcmlmeVJlc3VsdDogbnVsbCxcbiAgICAgIHZlcmlmeUxvYWRpbmc6IGZhbHNlLFxuICAgICAgZmV0Y2hQYXRoOiAnL3NlcnZpY2VzL2JpdGNvaW4nLFxuICAgICAgZmV0Y2hSZXN1bHQ6IG51bGwsXG4gICAgICBmZXRjaExvYWRpbmc6IGZhbHNlLFxuICAgICAgZmV0Y2hFcnJvcjogbnVsbFxuICAgIH07XG4gICAgdGhpcy5fcmVndGVzdFZlcmlmeUFtb3VudFByaW1lZCA9IGZhbHNlO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQgKCkge1xuICAgIGNvbnN0IGlkZW50aXR5ID0gKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5pZGVudGl0eSkgfHwge307XG4gICAgY29uc3QgbmV0d29ya1JhdyA9IHRoaXMucHJvcHMuYml0Y29pbiAmJiB0aGlzLnByb3BzLmJpdGNvaW4ubmV0d29yaztcbiAgICBjb25zdCBuZXR3b3JrID0gbmV0d29ya1JhdyAhPSBudWxsICYmIFN0cmluZyhuZXR3b3JrUmF3KS50cmltKClcbiAgICAgID8gU3RyaW5nKG5ldHdvcmtSYXcpLnRvTG93ZXJDYXNlKClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBuZXh0ID0geyB3YWxsZXQ6IGdldFNwZW5kV2FsbGV0Q29udGV4dChpZGVudGl0eSkgfTtcbiAgICBpZiAobmV0d29yayA9PT0gJ3JlZ3Rlc3QnICYmICF0aGlzLl9yZWd0ZXN0VmVyaWZ5QW1vdW50UHJpbWVkKSB7XG4gICAgICB0aGlzLl9yZWd0ZXN0VmVyaWZ5QW1vdW50UHJpbWVkID0gdHJ1ZTtcbiAgICAgIGlmICghU3RyaW5nKHRoaXMuc3RhdGUudmVyaWZ5QW1vdW50U2F0cyB8fCAnJykudHJpbSgpKSB7XG4gICAgICAgIG5leHQudmVyaWZ5QW1vdW50U2F0cyA9ICcxMDAwMCc7XG4gICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpIHtcbiAgICAgICAgY29uc3QgdHggPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgndHgnKTtcbiAgICAgICAgaWYgKHR4ICYmIFN0cmluZyh0eCkudHJpbSgpKSBuZXh0LnZlcmlmeVR4aWQgPSBTdHJpbmcodHgpLnRyaW0oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChfKSB7fVxuICAgIHRoaXMuc2V0U3RhdGUobmV4dCk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUgKHByZXZQcm9wcykge1xuICAgIGNvbnN0IHByZXYgPSBwcmV2UHJvcHMgJiYgcHJldlByb3BzLmlkZW50aXR5ICYmIHByZXZQcm9wcy5pZGVudGl0eS54cHViO1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuaWRlbnRpdHkgJiYgdGhpcy5wcm9wcy5pZGVudGl0eS54cHViO1xuICAgIGlmIChwcmV2ICE9PSBuZXh0KSB7XG4gICAgICBjb25zdCBpZGVudGl0eSA9ICh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuaWRlbnRpdHkpIHx8IHt9O1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHdhbGxldDogZ2V0U3BlbmRXYWxsZXRDb250ZXh0KGlkZW50aXR5KSB9KTtcbiAgICB9XG4gICAgY29uc3QgcHJldk5ldCA9IHByZXZQcm9wcyAmJiBwcmV2UHJvcHMuYml0Y29pbiAmJiBwcmV2UHJvcHMuYml0Y29pbi5uZXR3b3JrO1xuICAgIGNvbnN0IG5leHROZXQgPSB0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuYml0Y29pbiAmJiB0aGlzLnByb3BzLmJpdGNvaW4ubmV0d29yaztcbiAgICBpZiAoU3RyaW5nKHByZXZOZXQgfHwgJycpLnRvTG93ZXJDYXNlKCkgIT09IFN0cmluZyhuZXh0TmV0IHx8ICcnKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjb25zdCBuZXR3b3JrID0gbmV4dE5ldCAhPSBudWxsICYmIFN0cmluZyhuZXh0TmV0KS50cmltKCkgPyBTdHJpbmcobmV4dE5ldCkudG9Mb3dlckNhc2UoKSA6IG51bGw7XG4gICAgICBpZiAobmV0d29yayA9PT0gJ3JlZ3Rlc3QnICYmICFTdHJpbmcodGhpcy5zdGF0ZS52ZXJpZnlBbW91bnRTYXRzIHx8ICcnKS50cmltKCkpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZlcmlmeUFtb3VudFNhdHM6ICcxMDAwMCcgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlVmVyaWZ5ICgpIHtcbiAgICBjb25zdCB1cHN0cmVhbSA9IHRoaXMuc3RhdGUudXBzdHJlYW07XG4gICAgY29uc3QgdHhpZCA9IFN0cmluZyh0aGlzLnN0YXRlLnZlcmlmeVR4aWQgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBhZGRyZXNzID0gU3RyaW5nKHRoaXMuc3RhdGUudmVyaWZ5QWRkcmVzcyB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IGFtb3VudFNhdHMgPSBOdW1iZXIodGhpcy5zdGF0ZS52ZXJpZnlBbW91bnRTYXRzIHx8IDApO1xuICAgIHRoaXMuc2V0U3RhdGUoeyB2ZXJpZnlMb2FkaW5nOiB0cnVlLCB2ZXJpZnlSZXN1bHQ6IG51bGwgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHZlcmlmeUwxUGF5bWVudCh1cHN0cmVhbSwgeyB0eGlkLCBhZGRyZXNzLCBhbW91bnRTYXRzIH0pO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZlcmlmeUxvYWRpbmc6IGZhbHNlLCB2ZXJpZnlSZXN1bHQ6IHJlcyB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmVyaWZ5TG9hZGluZzogZmFsc2UsXG4gICAgICAgIHZlcmlmeVJlc3VsdDogeyBlcnJvcjogZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlRmV0Y2hKc29uICgpIHtcbiAgICBsZXQgcGF0aDtcbiAgICB0cnkge1xuICAgICAgcGF0aCA9IG5vcm1hbGl6ZUJyb3dzZUpzb25QYXRoKHRoaXMuc3RhdGUuZmV0Y2hQYXRoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmZXRjaExvYWRpbmc6IGZhbHNlLFxuICAgICAgICBmZXRjaFJlc3VsdDogbnVsbCxcbiAgICAgICAgZmV0Y2hFcnJvcjogZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGZldGNoTG9hZGluZzogdHJ1ZSwgZmV0Y2hSZXN1bHQ6IG51bGwsIGZldGNoRXJyb3I6IG51bGwgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7IEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH07XG4gICAgICBjb25zdCB0b2tlbiA9IFN0cmluZygodGhpcy5zdGF0ZS51cHN0cmVhbSAmJiB0aGlzLnN0YXRlLnVwc3RyZWFtLmFwaVRva2VuKSB8fCAnJykudHJpbSgpO1xuICAgICAgaWYgKHRva2VuKSBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7dG9rZW59YDtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHBhdGgsIHsgbWV0aG9kOiAnR0VUJywgaGVhZGVycyB9KTtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpO1xuICAgICAgbGV0IGJvZHk7XG4gICAgICB0cnkge1xuICAgICAgICBib2R5ID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgYm9keSA9IHRleHQ7XG4gICAgICB9XG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICBjb25zdCBtc2cgPSBib2R5ICYmIGJvZHkubWVzc2FnZSA/IGJvZHkubWVzc2FnZSA6IGAke3Jlcy5zdGF0dXN9ICR7cmVzLnN0YXR1c1RleHR9YDtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZmV0Y2hMb2FkaW5nOiBmYWxzZSwgZmV0Y2hSZXN1bHQ6IGJvZHkgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZldGNoTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGZldGNoRXJyb3I6IGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvcGVuUGF0aCAocGF0aCkge1xuICAgIGNvbnN0IHAgPSBwYXRoLnN0YXJ0c1dpdGgoJy8nKSA/IHBhdGggOiBgLyR7cGF0aH1gO1xuICAgIHdpbmRvdy5vcGVuKHAsICdfYmxhbmsnLCAnbm9vcGVuZXIsbm9yZWZlcnJlcicpO1xuICB9XG5cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB3ID0gdGhpcy5zdGF0ZS53YWxsZXQgfHwge307XG4gICAgY29uc3Qgd2FsbGV0SWQgPSB3LndhbGxldElkIHx8ICcnO1xuICAgIGNvbnN0IHJvd3MgPSBbXG4gICAgICB7IG1ldGhvZDogJ0dFVCcsIHBhdGg6ICcvc2VydmljZXMvYml0Y29pbicsIG5vdGU6ICdTdGF0dXMsIGhlYWx0aCwgYmVhY29uJyB9LFxuICAgICAgeyBtZXRob2Q6ICdHRVQnLCBwYXRoOiAnL3NlcnZpY2VzL2JpdGNvaW4vYmxvY2tzJywgbm90ZTogJ1JlY2VudCBibG9ja3MnIH0sXG4gICAgICB7IG1ldGhvZDogJ0dFVCcsIHBhdGg6ICcvc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMnLCBub3RlOiAnUmVjZW50IHRyYW5zYWN0aW9ucycgfSxcbiAgICAgIHsgbWV0aG9kOiAnR0VUJywgcGF0aDogJy9zZXJ2aWNlcy9iaXRjb2luL3dhbGxldHMnLCBub3RlOiAnV2FsbGV0IHN1bW1hcmllcycgfSxcbiAgICAgIHsgbWV0aG9kOiAnR0VUJywgcGF0aDogJy9zZXJ2aWNlcy9iaXRjb2luL3hwdWI/eHB1Yj0nLCBub3RlOiAnV2F0Y2gtb25seSBiYWxhbmNlIChzY2FudHhvdXRzZXQpOyBvcHRpb25hbCAmYWRkcmVzc2VzPSBmb3IgbWVtcG9vbDsgbm8gd2FsbGV0IGlkIGluIFVSTCcgfSxcbiAgICAgIHsgbWV0aG9kOiAnR0VUJywgcGF0aDogJy9zZXJ2aWNlcy9iaXRjb2luL3hwdWIvdXR4b3M/eHB1Yj0nLCBub3RlOiAnV2F0Y2gtb25seSBVVFhPcycgfSxcbiAgICAgIHsgbWV0aG9kOiAnR0VUJywgcGF0aDogJy9zZXJ2aWNlcy9iaXRjb2luL3hwdWIvdHJhbnNhY3Rpb25zP3hwdWI9JmxpbWl0PSZhZGRyZXNzZXM9Jywgbm90ZTogJ1dhdGNoLW9ubHkgdHggbGlzdCcgfSxcbiAgICAgIHsgbWV0aG9kOiAnR0VUJywgcGF0aDogd2FsbGV0SWQgPyBgL3NlcnZpY2VzL2JpdGNvaW4vd2FsbGV0cy8ke3dhbGxldElkfWAgOiAnL3NlcnZpY2VzL2JpdGNvaW4vd2FsbGV0cy86d2FsbGV0SWQnLCBub3RlOiAnTGVnYWN5OiBjbGllbnQgYmFsYW5jZSB3aGVuID94cHViPSBhbmQgOndhbGxldElkIOKJoCBIdWIgd2FsbGV0OyBwcmVmZXIgL3hwdWInIH0sXG4gICAgICB7IG1ldGhvZDogJ0dFVCcsIHBhdGg6IHdhbGxldElkID8gYC9zZXJ2aWNlcy9iaXRjb2luL3dhbGxldHMvJHt3YWxsZXRJZH0vdXR4b3NgIDogJy9zZXJ2aWNlcy9iaXRjb2luL3dhbGxldHMvOndhbGxldElkL3V0eG9zJywgbm90ZTogJ0xlZ2FjeSBVVFhPczsgcHJlZmVyIC94cHViL3V0eG9zJyB9LFxuICAgICAgeyBtZXRob2Q6ICdHRVQnLCBwYXRoOiB3YWxsZXRJZCA/IGAvc2VydmljZXMvYml0Y29pbi93YWxsZXRzLyR7d2FsbGV0SWR9L3RyYW5zYWN0aW9uc2AgOiAnL3NlcnZpY2VzL2JpdGNvaW4vd2FsbGV0cy86d2FsbGV0SWQvdHJhbnNhY3Rpb25zJywgbm90ZTogJ0xlZ2FjeSB0eHM7IHByZWZlciAveHB1Yi90cmFuc2FjdGlvbnMnIH0sXG4gICAgICB7IG1ldGhvZDogJ0dFVCcsIHBhdGg6ICcvc2VydmljZXMvYml0Y29pbi9hZGRyZXNzZXMnLCBub3RlOiAnUmVjZWl2ZSBhZGRyZXNzIGhlbHBlcicgfSxcbiAgICAgIHsgbWV0aG9kOiAnR0VUJywgcGF0aDogJy9wYXltZW50cycsIG5vdGU6ICdDYW5vbmljYWwgb3V0Ym91bmQgcGF5bWVudHMgbGlzdCAobGVnYWN5IEdFVCAvc2VydmljZXMvYml0Y29pbi9wYXltZW50cyknIH0sXG4gICAgICB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiAnL3BheW1lbnRzJywgbm90ZTogJ0Nhbm9uaWNhbCBIdWItd2FsbGV0IHNwZW5kIFBPU1QgKGxlZ2FjeSBQT1NUIC9zZXJ2aWNlcy9iaXRjb2luL3BheW1lbnRzKScgfSxcbiAgICAgIHsgbWV0aG9kOiAnR0VUJywgcGF0aDogJy9zZXJ2aWNlcy9wYXlqb2luJywgbm90ZTogJ1BheWpvaW4gY2FwYWJpbGl0aWVzICgrIGZhYnJpY1Byb3RvY29sKTsgbWlycm9yOiAvcGF5bWVudHMvcGF5am9pbicgfSxcbiAgICAgIHsgbWV0aG9kOiAnR0VUJywgcGF0aDogJy9zZXJ2aWNlcy9wYXlqb2luL3Nlc3Npb25zJywgbm90ZTogJ0xpc3Qgc2Vzc2lvbnMnIH0sXG4gICAgICB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiAnL3NlcnZpY2VzL3BheWpvaW4vc2Vzc2lvbnMnLCBub3RlOiAnQ3JlYXRlIGRlcG9zaXQgc2Vzc2lvbiAoYm9keTogd2FsbGV0SWQsIGFtb3VudFNhdHMsIGFkZHJlc3M/LCByZWNlaXZlVGVtcGxhdGU/LCBmZWRlcmF0aW9uWE9ubHlIZXg/KScgfSxcbiAgICAgIHsgbWV0aG9kOiAnUE9TVCcsIHBhdGg6ICcvc2VydmljZXMvcGF5am9pbi9zZXNzaW9ucy86c2Vzc2lvbklkL3Byb3Bvc2FscycsIG5vdGU6ICdTdWJtaXQgUGF5am9pbiBwcm9wb3NhbCAoYm9keTogcHNidCAvIHR4aGV4KScgfSxcbiAgICAgIHsgbWV0aG9kOiAnUE9TVCcsIHBhdGg6ICcvc2VydmljZXMvcGF5am9pbi9zZXNzaW9ucy86c2Vzc2lvbklkL2FjcC1odWItYm9vc3QnLCBub3RlOiAnQWRtaW4gQmVhcmVyOiBhcHBlbmQrc2lnbiBIdWIgd2FsbGV0IGlucHV0IG9uIEFOWU9ORUNBTlBBWXxBTEwgcGF5ZXIgUFNCVCAob3V0cHV0cyB1bmNoYW5nZWQpJyB9LFxuICAgICAgeyBtZXRob2Q6ICdHRVQnLCBwYXRoOiAnL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kaW5nL2NhbXBhaWducycsIG5vdGU6ICdMaXN0IFRhcHJvb3QgY3Jvd2RmdW5kcyAoZ29hbC9taW4gY29tbWl0dGVkIGluIHRhcHNjcmlwdDsgMi1vZi0yIHBheW91dCknIH0sXG4gICAgICB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiAnL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kaW5nL2NhbXBhaWducycsIG5vdGU6ICdDcmVhdGUgY2FtcGFpZ24gKGFkbWluIEJlYXJlcik6IGJlbmVmaWNpYXJ5UHVia2V5SGV4LCBnb2FsU2F0cywgbWluQ29udHJpYnV0aW9uU2F0cywgcmVmdW5kQWZ0ZXJCbG9ja3M/LCB0aXRsZT8nIH0sXG4gICAgICB7IG1ldGhvZDogJ0dFVCcsIHBhdGg6ICcvc2VydmljZXMvYml0Y29pbi9jcm93ZGZ1bmRpbmcvY2FtcGFpZ25zLzppZC9hY3AtZG9uYXRpb24tcHNidD9hbW91bnRTYXRzPScsIG5vdGU6ICdPdXRwdXRzLW9ubHkgUFNCVCAob25lIG91dHB1dCB0byB2YXVsdCk7IGRvbm9ycyBhZGQgaW5wdXRzIHdpdGggU0lHSEFTSF9BTEx8QU5ZT05FQ0FOUEFZJyB9LFxuICAgICAgeyBtZXRob2Q6ICdHRVQnLCBwYXRoOiAnL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kaW5nL2NhbXBhaWducy86aWQnLCBub3RlOiAnQ2FtcGFpZ24gKyBzY2FudHhvdXRzZXQgYmFsYW5jZSwgZ29hbE1ldCwgdmF1bHRVdHhvc1t7dHhpZCx2b3V0LGFtb3VudFNhdHN9XScgfSxcbiAgICAgIHsgbWV0aG9kOiAnR0VUJywgcGF0aDogJy9zZXJ2aWNlcy9iaXRjb2luL2Nyb3dkZnVuZGluZy9jYW1wYWlnbnMvOmlkL3BheW91dC1wc2J0P2Rlc3RpbmF0aW9uPSZmZWVTYXRzPScsIG5vdGU6ICdVbnNpZ25lZCBwYXlvdXQgUFNCVCB3aGVuIHJhaXNlZCDiiaUgZ29hbDsgZWFjaCBVVFhPIOKJpSBtaW5Db250cmlidXRpb25TYXRzJyB9LFxuICAgICAgeyBtZXRob2Q6ICdQT1NUJywgcGF0aDogJy9zZXJ2aWNlcy9iaXRjb2luL2Nyb3dkZnVuZGluZy9jYW1wYWlnbnMvOmlkL3BheW91dC1zaWduLWFyYml0ZXInLCBub3RlOiAnQWRtaW46IGJvZHkgcHNidEJhc2U2NCDigJQgSHViIGFyYml0ZXIgY28tc2lnbnMnIH0sXG4gICAgICB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiAnL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kaW5nL2NhbXBhaWducy86aWQvcGF5b3V0LWJyb2FkY2FzdCcsIG5vdGU6ICdib2R5IHBzYnRCYXNlNjQg4oCUIGZpbmFsaXplIDItb2YtMiBwYXlvdXQgKyBzZW5kcmF3dHJhbnNhY3Rpb24nIH0sXG4gICAgICB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiAnL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kaW5nL2NhbXBhaWducy86aWQvcmVmdW5kLXByZXBhcmUnLCBub3RlOiAnQWRtaW46IGFmdGVyIENMVFYgaGVpZ2h0IOKAlCBib2R5IGRlc3RpbmF0aW9uQWRkcmVzcywgZnVuZGVkVHhpZCwgdm91dD8sIGZlZVNhdHM/OyByZXR1cm5zIHNpZ25lZCBhcmJpdGVyIHJlZnVuZCBoZXgnIH0sXG4gICAgICB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiAnL3Nlc3Npb25zJywgbm90ZTogJ0Rlc2t0b3AgbG9naW46IGNyZWF0ZSBzZXNzaW9uIChib2R5OiBvcmlnaW4pOyBvZmYgbG9vcGJhY2ssIHJlcXVlc3QgbXVzdCBtYXRjaCB0aGF0IG9yaWdpbiDigJQgT3JpZ2luIC8gUmVmZXJlciAvIFNlYy1GZXRjaC1TaXRlK0hvc3QnIH0sXG4gICAgICB7IG1ldGhvZDogJ0dFVCcsIHBhdGg6ICcvc2Vzc2lvbnMvOnNlc3Npb25JZCcsIG5vdGU6ICdQb2xsIGRlc2t0b3AgbG9naW4gKHBlbmRpbmcvc2lnbmVkIG9uY2UgdGhlbiA0MDQpLiBBZnRlciByZWRlZW0sIEdFVCAvc2Vzc2lvbnMvOmRlbGVnYXRpb25Ub2tlbiBuZWVkcyBBdXRob3JpemF0aW9uOiBCZWFyZXIgbWF0Y2hpbmcgdGhlIHRva2VuLiBFbGVjdHJvbiBzaG91bGQgc2VuZCBPcmlnaW49aHViIGZyb20gZmFicmljOi8vIGBodWJgIHdoZW4gbm90IGxvb3BiYWNrOyBsb2NhbGhvc3QgdnMgMTI3LjAuMC4xIHNhbWUgcG9ydCBjb3VudHMgYXMgc2FtZSBvcmlnaW4nIH0sXG4gICAgICB7IG1ldGhvZDogJ0dFVCcsIHBhdGg6ICcvc2Vzc2lvbnMvOnNlc3Npb25JZC9kZWxlZ2F0aW9uL2F1ZGl0Jywgbm90ZTogJ0RlbGVnYXRpb24gYXVkaXQgKEJlYXJlciBtdXN0IGVxdWFsIHNlc3Npb24gaWQpOiBwZW5kaW5nIHF1ZXVlLCBERUxFR0FUSU9OXyogRmFicmljIGxvZyBzbGljZSwgSHViIHZlcmlmeSBwdWJrZXknIH0sXG4gICAgICB7IG1ldGhvZDogJ0RFTEVURScsIHBhdGg6ICcvc2Vzc2lvbnMvOnNlc3Npb25JZCcsIG5vdGU6ICdSZXZva2UgZGVsZWdhdGlvbiAobG9vcGJhY2sgb3IgQmVhcmVyIG1hdGNoaW5nIGlkKTsgNDA0IGlmIHRva2VuIHVua25vd24nIH0sXG4gICAgICB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiAnL3Nlc3Npb25zLzpzZXNzaW9uSWQvc2lnbmF0dXJlcycsIG5vdGU6ICdEZXNrdG9wIGNvbXBsZXRlcyBsb2dpbjogbG9vcGJhY2sgVENQIG9yIE9yaWdpbi9SZWZlcmVyL0hvc3QgbWF0Y2hpbmcgc2Vzc2lvbiAoTEFOIGh1Yik7IGxvY2FsaG9zdCDiiaEgMTI3LjAuMC4xIHNhbWUgcG9ydCcgfSxcbiAgICAgIHsgbWV0aG9kOiAnR0VUJywgcGF0aDogJy9zZXNzaW9ucycsIG5vdGU6ICdMaXN0IGRlbGVnYXRpb24gc2Vzc2lvbnMgKyBwZW5kaW5nRGVsZWdhdGlvbk1lc3NhZ2VzIChGYWJyaWMgbWVzc2FnZSBpZHM7IGxvb3BiYWNrKScgfSxcbiAgICAgIHsgbWV0aG9kOiAnUE9TVCcsIHBhdGg6ICcvc2VydmljZXMvcnBjJywgbm90ZTogJ0pTT04tUlBDOiBQb3N0RGVsZWdhdGlvblNpZ25hdHVyZU1lc3NhZ2UsIEdldERlbGVnYXRpb25TaWduYXR1cmVNZXNzYWdlLCBSZXNvbHZlRGVsZWdhdGlvblNpZ25hdHVyZU1lc3NhZ2UgKGRlbGVnYXRpb24gdG9rZW4gLyBzZXNzaW9uIGlkKTsgbGlzdCBzZXNzaW9ucyBHRVQgL3Nlc3Npb25zIGlzIGxvb3BiYWNrLW9ubHk7IEZhYnJpYyBsb2cgREVMRUdBVElPTl9TSUdOQVRVUkVfKicgfSxcbiAgICAgIHsgbWV0aG9kOiAnR0VUJywgcGF0aDogJy9zZXJ2aWNlcy9saWdodG5pbmcnLCBub3RlOiAnTGlnaHRuaW5nIHN0YXR1cycgfSxcbiAgICAgIHsgbWV0aG9kOiAnR0VUJywgcGF0aDogJy9zZXJ2aWNlcy9saWdodG5pbmcvY2hhbm5lbHMnLCBub3RlOiAnQ2hhbm5lbHMgKyBsaXN0ZnVuZHMgb3V0cHV0cycgfSxcbiAgICAgIHsgbWV0aG9kOiAnREVMRVRFJywgcGF0aDogJy9zZXJ2aWNlcy9saWdodG5pbmcvY2hhbm5lbHMvOmNoYW5uZWxJZCcsIG5vdGU6ICdDbG9zZSBjaGFubmVsIChDTE4gY2xvc2UgUlBDKScgfSxcbiAgICAgIHsgbWV0aG9kOiAnUE9TVCcsIHBhdGg6ICcvc2VydmljZXMvbGlnaHRuaW5nL2NoYW5uZWxzJywgbm90ZTogJ09wZW4gY2hhbm5lbCAoYm9keTogcGVlcklkL3JlbW90ZSwgYW1vdW50U2F0cywg4oCmKScgfSxcbiAgICAgIHsgbWV0aG9kOiAnUE9TVCcsIHBhdGg6ICcvc2VydmljZXMvbGlnaHRuaW5nL2ludm9pY2VzJywgbm90ZTogJ0NyZWF0ZSBpbnZvaWNlJyB9LFxuICAgICAgeyBtZXRob2Q6ICdQT1NUJywgcGF0aDogJy9zZXJ2aWNlcy9saWdodG5pbmcvcGF5bWVudHMnLCBub3RlOiAnUGF5IGludm9pY2UnIH0sXG4gICAgICB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiAnL3NlcnZpY2VzL2xpZ2h0bmluZy9kZWNvZGVzJywgbm90ZTogJ0RlY29kZSBCT0xUMTEnIH0sXG4gICAgICB7IG1ldGhvZDogJ0dFVCcsIHBhdGg6ICcvc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvOnR4aWQ/YWRkcmVzcz0mYW1vdW50U2F0cz0nLCBub3RlOiAnTDEgcGF5bWVudCBwcm9vZiAoc2FtZSByZXNvdXJjZSBhcyByYXcgdHg7IHF1ZXJ5IHNlbGVjdHMgcHJvb2YgSlNPTiknIH0sXG4gICAgICB7IG1ldGhvZDogJ0dFVCcsIHBhdGg6ICcvc2VydmljZXMvZGlzdHJpYnV0ZWQvbWFuaWZlc3QnLCBub3RlOiAnRGlzdHJpYnV0ZWQgZXhlY3V0aW9uIG1hbmlmZXN0OyBmZWRlcmF0aW9uIHZhbGlkYXRvciBwdWJrZXlzIGFuZCB0aHJlc2hvbGQnIH0sXG4gICAgICB7IG1ldGhvZDogJ0dFVCcsIHBhdGg6ICcvc2VydmljZXMvZGlzdHJpYnV0ZWQvZXBvY2gnLCBub3RlOiAnQmVhY29uIGVwb2NoIHN1bW1hcnkgSlNPTiAoTDEgaGVpZ2h0L2hhc2g7IG9wdGlvbmFsIHNpZGVjaGFpbiBkaWdlc3Q7IHdpdG5lc3MgbWV0YWRhdGEpJyB9LFxuICAgICAgeyBtZXRob2Q6ICdHRVQnLCBwYXRoOiAnL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL3ZhdWx0Jywgbm90ZTogJ0ZlZGVyYXRpb24gVGFwcm9vdCB2YXVsdCBhZGRyZXNzLCB0YXBzY3JpcHQgaGV4LCBtYXR1cml0eSBwb2xpY3knIH0sXG4gICAgICB7IG1ldGhvZDogJ0dFVCcsIHBhdGg6ICcvc2VydmljZXMvZGlzdHJpYnV0ZWQvdmF1bHQvdXR4b3MnLCBub3RlOiAnVmF1bHQgVVRYT3MgKHNjYW50eG91dHNldCkgKyBwZXItVVRYTyBtYXR1cml0eSBoaW50JyB9LFxuICAgICAgeyBtZXRob2Q6ICdHRVQnLCBwYXRoOiAnL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL2ZlZGVyYXRpb24tcmVnaXN0cnknLCBub3RlOiAnRmFicmljIGZpbGVzeXN0ZW0gY2F0YWxvZzogc2VlZGVkIGZlZGVyYXRpb25zICsgZmFiZmVkIE9QX1JFVFVSTiBkaXNjb3ZlcmllcyAocmVndGVzdCBzY2FuIGRlZmF1bHQpJyB9XG4gICAgXTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nZmFkZS1pbic+XG4gICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cImJ0Yy1yZXNvdXJjZXMtcGFnZS1oZWFkaW5nXCIgYXJpYS1kZXNjcmliZWRieT1cImJ0Yy1yZXNvdXJjZXMtcGFnZS1zdW1tYXJ5XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAnMC43NXJlbScsIG1hcmdpbkJvdHRvbTogJzAuMjVlbScgfX1cbiAgICAgICAgICAgIHJvbGU9XCJiYW5uZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4V3JhcDogJ3dyYXAnLCBnYXA6ICcwLjVlbScsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgYmFzaWMgYXJpYS1sYWJlbD1cIkJhY2sgdG8gQml0Y29pbiBkYXNoYm9hcmRcIiB0aXRsZT1cIkJpdGNvaW4gaG9tZSAoc3RhdHVzLCB3YWxsZXQsIGV4cGxvcmVyLCBhbmQgdG9vbHMpXCI+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIEJpdGNvaW5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3BheW1lbnRzXCIgYmFzaWM+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNyZWRpdCBjYXJkIG91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIFBheW1lbnRzIFVJXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2Nyb3dkZnVuZHNcIiBiYXNpYz5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiaGVhcnQgb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgQ3Jvd2RmdW5kc1xuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImgyXCIgaWQ9XCJidGMtcmVzb3VyY2VzLXBhZ2UtaGVhZGluZ1wiIHN0eWxlPXt7IG1hcmdpbjogMCB9fT5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiBjb2xvcj1cIm9yYW5nZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDxIZWFkZXIuQ29udGVudD5CaXRjb2luIEhUVFAgcmVzb3VyY2VzPC9IZWFkZXIuQ29udGVudD5cbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPHAgaWQ9XCJidGMtcmVzb3VyY2VzLXBhZ2Utc3VtbWFyeVwiIHN0eWxlPXt7IG1hcmdpbjogMCwgY29sb3I6ICcjNjY2JywgbWF4V2lkdGg6ICc0OHJlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICAgIFJFU1Qgb24gPGNvZGU+L3NlcnZpY2VzL2JpdGNvaW48L2NvZGU+IGFuZCA8Y29kZT4vc2VydmljZXMvbGlnaHRuaW5nPC9jb2RlPjogR0VUIGNvbGxlY3Rpb25zLCBQT1NUIHRvXG4gICAgICAgICAgICAgIGNyZWF0ZSBvciBhY3QsIERFTEVURSB3aGVyZSByZW1vdmFsIGlzIHRoZSBzZW1hbnRpY3MgKGUuZy4gY2xvc2UgY2hhbm5lbCkuIEh1YnsnICd9XG4gICAgICAgICAgICAgIDxjb2RlPlBPU1QgL3NlcnZpY2VzL2JpdGNvaW48L2NvZGU+IHJlbWFpbnMgSlNPTi1SUEMgZm9yIEZhYnJpYyBjbGllbnRzLlxuICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICA8c3Ryb25nPkJlYWNvbiAvIGZlZGVyYXRpb246PC9zdHJvbmc+IHB1YmxpYyBlcG9jaCBhbmQgcG9saWN5IEpTT04gbGl2ZXMgdW5kZXJ7JyAnfVxuICAgICAgICAgICAgICA8Y29kZT4vc2VydmljZXMvZGlzdHJpYnV0ZWQvPC9jb2RlPlxuICAgICAgICAgICAgICB7JyAnfShxdWljay1vcGVuIGJlbG93KS4gSG93IHRvIGNvbXBhcmUgTDEgdGlwcyBhbmQgcmVwcm9kdWNlIFNjaG5vcnIgd2l0bmVzc2VzIGlzIHN1bW1hcml6ZWQgb257JyAnfVxuICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5ncy9hZG1pbi9iZWFjb24tZmVkZXJhdGlvblwiPkJlYWNvbiBGZWRlcmF0aW9uPC9MaW5rPi5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Qml0Y29pbldhbGxldEJyYW5jaEJhciBpZGVudGl0eT17KHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5pZGVudGl0eSkgfHwge319IC8+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiYnRjLXJlc291cmNlcy1sMS1oM1wiIGFyaWEtZGVzY3JpYmVkYnk9XCJidGMtcmVzb3VyY2VzLWwxLWRlc2NcIj5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBpZD1cImJ0Yy1yZXNvdXJjZXMtbDEtaDNcIj5MMSBwYXltZW50IHZlcmlmaWNhdGlvbjwvSGVhZGVyPlxuICAgICAgICAgIDxwIGlkPVwiYnRjLXJlc291cmNlcy1sMS1kZXNjXCIgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgIFVzZXN7JyAnfVxuICAgICAgICAgICAgPGNvZGU+R0VUIC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8mbHQ7dHhpZCZndDs/YWRkcmVzcz0mYW1wO2Ftb3VudFNhdHM9PC9jb2RlPlxuICAgICAgICAgICAgLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8Rm9ybSBvblN1Ym1pdD17KGUpID0+IHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLmhhbmRsZVZlcmlmeSgpOyB9fT5cbiAgICAgICAgICAgIDxGb3JtLkdyb3VwIHdpZHRocz0nZXF1YWwnPlxuICAgICAgICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgICAgICAgIGxhYmVsPSdUcmFuc2FjdGlvbiBpZCdcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nNjQtY2hhciBoZXggdHhpZCdcbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52ZXJpZnlUeGlkfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiB0aGlzLnNldFN0YXRlKHsgdmVyaWZ5VHhpZDogdmFsdWUgfSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgICAgbGFiZWw9J0Rlc3RpbmF0aW9uIGFkZHJlc3MnXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9J0ludm9pY2UgLyBleHBlY3RlZCByZWNlaXZlIGFkZHJlc3MnXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmVyaWZ5QWRkcmVzc31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHsgdmFsdWUgfSkgPT4gdGhpcy5zZXRTdGF0ZSh7IHZlcmlmeUFkZHJlc3M6IHZhbHVlIH0pfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgICAgICAgIGxhYmVsPSdNaW5pbXVtIGFtb3VudCAoc2F0cyknXG4gICAgICAgICAgICAgICAgdHlwZT0nbnVtYmVyJ1xuICAgICAgICAgICAgICAgIG1pbj17MX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52ZXJpZnlBbW91bnRTYXRzfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiB0aGlzLnNldFN0YXRlKHsgdmVyaWZ5QW1vdW50U2F0czogdmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgaW5wdXQ9e3tcbiAgICAgICAgICAgICAgICAgICdhcmlhLWxhYmVsJzogJ01pbmltdW0gYW1vdW50IGluIHNhdG9zaGlzIGZvciBMMSBwYXltZW50IHZlcmlmaWNhdGlvbidcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Gb3JtLkdyb3VwPlxuICAgICAgICAgICAgPEJ1dHRvbiBwcmltYXJ5IHR5cGU9J3N1Ym1pdCcgbG9hZGluZz17dGhpcy5zdGF0ZS52ZXJpZnlMb2FkaW5nfT5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT0nY2hlY2sgY2lyY2xlIG91dGxpbmUnIC8+XG4gICAgICAgICAgICAgIFZlcmlmeVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgIHt0aGlzLnN0YXRlLnZlcmlmeVJlc3VsdCAmJiAhdGhpcy5zdGF0ZS52ZXJpZnlSZXN1bHQuZXJyb3IgJiYgdGhpcy5zdGF0ZS52ZXJpZnlSZXN1bHQudmVyaWZpZWQgPT09IHRydWUgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2UgcG9zaXRpdmUgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPlBheW1lbnQgdmVyaWZpZWQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICA8cHJlIHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+XG4gICAgICAgICAgICAgICAge0pTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUudmVyaWZ5UmVzdWx0LCBudWxsLCAyKX1cbiAgICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7dGhpcy5zdGF0ZS52ZXJpZnlSZXN1bHQgJiYgIXRoaXMuc3RhdGUudmVyaWZ5UmVzdWx0LmVycm9yICYmIHRoaXMuc3RhdGUudmVyaWZ5UmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZSB3YXJuaW5nIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5Ob3QgdmVyaWZpZWQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjY1ZW0nIH19PlxuICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNhY3Rpb24gZG9lcyBub3QgcGF5IGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgYW1vdW50IHRvIHRoZSBnaXZlbiBhZGRyZXNzLCBvciB0aGUgbm9kZSBjb3VsZCBub3QgbG9hZCB0aGUgdHggKHdyb25nIG5ldHdvcmssIHR4aW5kZXggb2ZmLCBvciB0eCBub3Qgc2VlbiB5ZXQpLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxwcmUgc3R5bGU9e3sgd2hpdGVTcGFjZTogJ3ByZS13cmFwJywgd29yZEJyZWFrOiAnYnJlYWstYWxsJywgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAgICAgIHtKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRlLnZlcmlmeVJlc3VsdCwgbnVsbCwgMil9XG4gICAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICl9XG4gICAgICAgICAge3RoaXMuc3RhdGUudmVyaWZ5UmVzdWx0ICYmICF0aGlzLnN0YXRlLnZlcmlmeVJlc3VsdC5lcnJvciAmJiB0aGlzLnN0YXRlLnZlcmlmeVJlc3VsdC52ZXJpZmllZCAhPT0gdHJ1ZSAmJiB0aGlzLnN0YXRlLnZlcmlmeVJlc3VsdC52ZXJpZmllZCAhPT0gZmFsc2UgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19PlxuICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+UmVzdWx0PC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPHByZSBzdHlsZT17eyB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PlxuICAgICAgICAgICAgICAgIHtKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRlLnZlcmlmeVJlc3VsdCwgbnVsbCwgMil9XG4gICAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICl9XG4gICAgICAgICAge3RoaXMuc3RhdGUudmVyaWZ5UmVzdWx0ICYmIHRoaXMuc3RhdGUudmVyaWZ5UmVzdWx0LmVycm9yICYmIChcbiAgICAgICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5WZXJpZmljYXRpb24gcmVxdWVzdCBmYWlsZWQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJyB9fT57dGhpcy5zdGF0ZS52ZXJpZnlSZXN1bHQuZXJyb3J9PC9wPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19XG4gICAgICAgICAgICAgICAgbG9hZGluZz17dGhpcy5zdGF0ZS52ZXJpZnlMb2FkaW5nfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLnZlcmlmeUxvYWRpbmd9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCB0aGlzLmhhbmRsZVZlcmlmeSgpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICAgIFJldHJ5XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiYnRjLXJlc291cmNlcy1mZXRjaC1oM1wiIGFyaWEtZGVzY3JpYmVkYnk9XCJidGMtcmVzb3VyY2VzLWZldGNoLWRlc2NcIj5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBpZD1cImJ0Yy1yZXNvdXJjZXMtZmV0Y2gtaDNcIj5Ccm93c2UgSlNPTjwvSGVhZGVyPlxuICAgICAgICAgIDxwIGlkPVwiYnRjLXJlc291cmNlcy1mZXRjaC1kZXNjXCIgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgIEdFVCBhIHBhdGggb24gPHN0cm9uZz50aGlzIGh1Yjwvc3Ryb25nPiAoZGVmYXVsdCA8Y29kZT4vc2VydmljZXMvYml0Y29pbjwvY29kZT4pLiBDcm9zcy1vcmlnaW4gYW5kIHByb3RvY29sLXJlbGF0aXZlIFVSTHMgYXJlIHJlamVjdGVkLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8Rm9ybSBvblN1Ym1pdD17KGUpID0+IHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLmhhbmRsZUZldGNoSnNvbigpOyB9fT5cbiAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgIGxhYmVsPSdQYXRoJ1xuICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5mZXRjaFBhdGh9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiB0aGlzLnNldFN0YXRlKHsgZmV0Y2hQYXRoOiB2YWx1ZSB9KX1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Jy9zZXJ2aWNlcy9iaXRjb2luJ1xuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxCdXR0b24gdHlwZT0nc3VibWl0JyBsb2FkaW5nPXt0aGlzLnN0YXRlLmZldGNoTG9hZGluZ30+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9J2Rvd25sb2FkJyAvPlxuICAgICAgICAgICAgICBGZXRjaFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgIHt0aGlzLnN0YXRlLmZldGNoRXJyb3IgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmUgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPlJlcXVlc3QgZmFpbGVkPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+e3RoaXMuc3RhdGUuZmV0Y2hFcnJvcn08L3A+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX1cbiAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmZldGNoTG9hZGluZ31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5mZXRjaExvYWRpbmd9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCB0aGlzLmhhbmRsZUZldGNoSnNvbigpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICAgIFJldHJ5XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICl9XG4gICAgICAgICAge3RoaXMuc3RhdGUuZmV0Y2hSZXN1bHQgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgIDxwcmUgc3R5bGU9e3sgd2hpdGVTcGFjZTogJ3ByZS13cmFwJywgd29yZEJyZWFrOiAnYnJlYWstYWxsJywgbWF4SGVpZ2h0OiAnMjRlbScsIG92ZXJmbG93OiAnYXV0bycgfX0+XG4gICAgICAgICAgICAgICAge3R5cGVvZiB0aGlzLnN0YXRlLmZldGNoUmVzdWx0ID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgPyB0aGlzLnN0YXRlLmZldGNoUmVzdWx0XG4gICAgICAgICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUuZmV0Y2hSZXN1bHQsIG51bGwsIDIpfVxuICAgICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9TZWdtZW50PlxuXG4gICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cImJ0Yy1yZXNvdXJjZXMtcXVpY2tvcGVuLWgzXCI+XG4gICAgICAgICAgPEhlYWRlciBhcz1cImgzXCIgaWQ9XCJidGMtcmVzb3VyY2VzLXF1aWNrb3Blbi1oM1wiPlF1aWNrIG9wZW4gKG5ldyB0YWIpPC9IZWFkZXI+XG4gICAgICAgICAgPFRhYmxlIGNvbXBhY3QgY2VsbGVkIGFyaWEtbGFiZWw9XCJCaXRjb2luIGFuZCByZWxhdGVkIEhUVFAgZW5kcG9pbnRzXCI+XG4gICAgICAgICAgICA8VGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPk1ldGhvZDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5QYXRoPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPk5vdGU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGwgY29sbGFwc2luZz5PcGVuPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgIHtyb3dzLm1hcCgocikgPT4gKFxuICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3cga2V5PXtgJHtyLm1ldGhvZH06JHtyLnBhdGh9YH0+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57ci5tZXRob2R9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJyB9fT57ci5wYXRofTwvY29kZT5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntyLm5vdGV9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBzaXplPSdtaW5pJ1xuICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtyLnBhdGguaW5jbHVkZXMoJzonKSB8fCByLm1ldGhvZCAhPT0gJ0dFVCd9XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3IubWV0aG9kICE9PSAnR0VUJyA/ICdRdWljayBvcGVuIGlzIEdFVC1vbmx5OyB1c2UgY3VybCBvciBhbiBBUEkgY2xpZW50IGZvciBQT1NUL0RFTEVURS4nIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMub3BlblBhdGgoci5wYXRoLnNwbGl0KCc/JylbMF0pfVxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2BPcGVuICR7ci5tZXRob2R9ICR7ci5wYXRoLnNwbGl0KCc/JylbMF19IGFzIEpTT04gaW4gbmV3IHRhYmB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBKU09OXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9TZWdtZW50PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJpdGNvaW5SZXNvdXJjZXNIb21lO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIm4iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jcmVhdGVDbGFzcyIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJCb29sZWFuIiwidmFsdWVPZiIsIl9pbmhlcml0cyIsIl9zZXRQcm90b3R5cGVPZiIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTGluayIsIl9yZXF1aXJlMiIsIkJ1dHRvbiIsIkZvcm0iLCJIZWFkZXIiLCJJY29uIiwiTWVzc2FnZSIsIlNlZ21lbnQiLCJUYWJsZSIsIl9yZXF1aXJlMyIsImdldFNwZW5kV2FsbGV0Q29udGV4dCIsImxvYWRVcHN0cmVhbVNldHRpbmdzIiwidmVyaWZ5TDFQYXltZW50IiwiQml0Y29pbldhbGxldEJyYW5jaEJhciIsIm5vcm1hbGl6ZUJyb3dzZUpzb25QYXRoIiwicmF3IiwicGF0aCIsInRyaW0iLCJzdGFydHNXaXRoIiwiRXJyb3IiLCJ0ZXN0IiwiVVJMIiwiXyIsIndpbmRvdyIsImxvY2F0aW9uIiwib3JpZ2luIiwicGF0aG5hbWUiLCJzZWFyY2giLCJoYXNoIiwiY29uY2F0IiwiQml0Y29pblJlc291cmNlc0hvbWUiLCJfUmVhY3QkQ29tcG9uZW50IiwicHJvcHMiLCJfdGhpcyIsInN0YXRlIiwidXBzdHJlYW0iLCJ3YWxsZXQiLCJ2ZXJpZnlUeGlkIiwidmVyaWZ5QWRkcmVzcyIsInZlcmlmeUFtb3VudFNhdHMiLCJ2ZXJpZnlSZXN1bHQiLCJ2ZXJpZnlMb2FkaW5nIiwiZmV0Y2hQYXRoIiwiZmV0Y2hSZXN1bHQiLCJmZXRjaExvYWRpbmciLCJmZXRjaEVycm9yIiwiX3JlZ3Rlc3RWZXJpZnlBbW91bnRQcmltZWQiLCJjb21wb25lbnREaWRNb3VudCIsImlkZW50aXR5IiwibmV0d29ya1JhdyIsImJpdGNvaW4iLCJuZXR3b3JrIiwidG9Mb3dlckNhc2UiLCJuZXh0IiwidHgiLCJVUkxTZWFyY2hQYXJhbXMiLCJnZXQiLCJzZXRTdGF0ZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZXYiLCJ4cHViIiwicHJldk5ldCIsIm5leHROZXQiLCJfaGFuZGxlVmVyaWZ5IiwiX2NhbGxlZSIsInR4aWQiLCJhZGRyZXNzIiwiYW1vdW50U2F0cyIsInJlcyIsIl90IiwiX2NvbnRleHQiLCJlcnJvciIsIm1lc3NhZ2UiLCJoYW5kbGVWZXJpZnkiLCJfaGFuZGxlRmV0Y2hKc29uIiwiX2NhbGxlZTIiLCJoZWFkZXJzIiwidG9rZW4iLCJ0ZXh0IiwiYm9keSIsIm1zZyIsIl90MiIsIl90MyIsIl9jb250ZXh0MiIsIkFjY2VwdCIsImFwaVRva2VuIiwiQXV0aG9yaXphdGlvbiIsImZldGNoIiwibWV0aG9kIiwiSlNPTiIsInBhcnNlIiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGFuZGxlRmV0Y2hKc29uIiwib3BlblBhdGgiLCJvcGVuIiwicmVuZGVyIiwiX3RoaXMyIiwid2FsbGV0SWQiLCJyb3dzIiwibm90ZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwiZ2FwIiwibWFyZ2luQm90dG9tIiwicm9sZSIsImZsZXhXcmFwIiwiYWxpZ25JdGVtcyIsImFzIiwidG8iLCJiYXNpYyIsInRpdGxlIiwibmFtZSIsImlkIiwibWFyZ2luIiwiY29sb3IiLCJDb250ZW50IiwibWF4V2lkdGgiLCJsaW5lSGVpZ2h0Iiwib25TdWJtaXQiLCJwcmV2ZW50RGVmYXVsdCIsIkdyb3VwIiwid2lkdGhzIiwiSW5wdXQiLCJsYWJlbCIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJfcmVmIiwiX3JlZjIiLCJ0eXBlIiwibWluIiwiX3JlZjMiLCJpbnB1dCIsInByaW1hcnkiLCJsb2FkaW5nIiwidmVyaWZpZWQiLCJwb3NpdGl2ZSIsIm1hcmdpblRvcCIsIndoaXRlU3BhY2UiLCJ3b3JkQnJlYWsiLCJzdHJpbmdpZnkiLCJ3YXJuaW5nIiwiaW5mbyIsIm5lZ2F0aXZlIiwic2l6ZSIsImRpc2FibGVkIiwib25DbGljayIsIl9yZWY0IiwibWF4SGVpZ2h0Iiwib3ZlcmZsb3ciLCJjb21wYWN0IiwiY2VsbGVkIiwiUm93IiwiSGVhZGVyQ2VsbCIsImNvbGxhcHNpbmciLCJCb2R5IiwibWFwIiwiQ2VsbCIsImZvbnRTaXplIiwiaW5jbHVkZXMiLCJ1bmRlZmluZWQiLCJzcGxpdCIsIkNvbXBvbmVudCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/BitcoinResourcesHome.js\n\n}")},"./components/BitcoinTransactionView.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link,\n useParams = _require.useParams;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Label = _require2.Label,\n List = _require2.List,\n Loader = _require2.Loader,\n Message = _require2.Message,\n Segment = _require2.Segment,\n Table = _require2.Table;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n fetchTransactionByHash = _require3.fetchTransactionByHash,\n loadUpstreamSettings = _require3.loadUpstreamSettings;\nvar TXHASH_REGEX = /^[a-fA-F0-9]{64}$/;\nfunction extractAddress(scriptPubKey) {\n if (!scriptPubKey || _typeof(scriptPubKey) !== \'object\') return null;\n if (scriptPubKey.address) return scriptPubKey.address;\n if (Array.isArray(scriptPubKey.addresses) && scriptPubKey.addresses.length > 0) {\n return scriptPubKey.addresses.join(\', \');\n }\n return null;\n}\nfunction formatValue(value) {\n if (value == null || !Number.isFinite(Number(value))) return \'-\';\n return "".concat(Number(value).toFixed(8), " BTC");\n}\nfunction BitcoinTransactionView() {\n var _useParams = useParams(),\n txhash = _useParams.txhash;\n var hash = (txhash || \'\').trim();\n var _React$useState = React.useState(true),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n loading = _React$useState2[0],\n setLoading = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n error = _React$useState4[0],\n setError = _React$useState4[1];\n var _React$useState5 = React.useState(null),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n tx = _React$useState6[0],\n setTx = _React$useState6[1];\n var loadTx = React.useCallback(function () {\n if (!hash) {\n setLoading(false);\n setError(\'Transaction hash is required.\');\n setTx(null);\n return;\n }\n if (!TXHASH_REGEX.test(hash)) {\n setLoading(false);\n setError(\'Invalid transaction hash. Must be 64 hex characters.\');\n setTx(null);\n return;\n }\n setLoading(true);\n setError(null);\n var upstream = loadUpstreamSettings();\n fetchTransactionByHash(upstream, hash).then(function (data) {\n if (data && data.status === \'error\') {\n setError(data.message || \'Could not load transaction.\');\n setTx(null);\n return;\n }\n if (!data || _typeof(data) !== \'object\') {\n setTx(null);\n setError(null);\n return;\n }\n setTx(data);\n })["catch"](function (err) {\n setError(err && err.message ? err.message : String(err));\n setTx(null);\n })["finally"](function () {\n return setLoading(false);\n });\n }, [hash]);\n React.useEffect(function () {\n loadTx();\n }, [loadTx]);\n var outputs = Array.isArray(tx && tx.vout) ? tx.vout : [];\n var inputs = Array.isArray(tx && tx.vin) ? tx.vin : [];\n var totalOut = outputs.reduce(function (sum, o) {\n return sum + (Number(o.value) || 0);\n }, 0);\n var isMempool = !tx || tx.blockhash == null || tx.blockhash === \'\';\n var confirmations = tx && tx.confirmations != null ? tx.confirmations : null;\n return /*#__PURE__*/React.createElement("div", {\n className: "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexDirection: \'column\',\n gap: \'0.5rem\',\n marginBottom: \'0.25em\'\n },\n role: "banner"\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small",\n "aria-label": "Back to Bitcoin dashboard",\n title: "Bitcoin home (status, wallet, explorer, and tools)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Bitcoin"), TXHASH_REGEX.test(hash) && /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/resources?tx=".concat(encodeURIComponent(hash)),\n basic: true,\n size: "small",\n title: "Open L1 payment verification for this txid"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check circle outline",\n "aria-hidden": "true"\n }), "L1 verify")), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "exchange",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Transaction")), /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'inline-flex\',\n gap: \'0.35em\',\n flexWrap: \'wrap\',\n alignItems: \'center\'\n },\n "aria-hidden": "true"\n }, isMempool && tx && /*#__PURE__*/React.createElement(Label, {\n color: "orange",\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "clock",\n "aria-hidden": "true"\n }), "Unconfirmed"), confirmations != null && confirmations > 0 && /*#__PURE__*/React.createElement(Label, {\n color: "green",\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check",\n "aria-hidden": "true"\n }), confirmations, " confirmations"))))), !hash && /*#__PURE__*/React.createElement(Message, {\n warning: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Missing transaction hash"), /*#__PURE__*/React.createElement("p", null, "Provide a valid 64-character hex transaction ID in the URL.")), !!hash && TXHASH_REGEX.test(hash) && loading && /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: "centered"\n }), /*#__PURE__*/React.createElement("p", {\n style: {\n textAlign: \'center\',\n marginTop: \'1em\',\n color: \'#666\'\n }\n }, "Loading transaction\\u2026")), !!hash && error && !loading && /*#__PURE__*/React.createElement(Message, {\n negative: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Failed to load transaction"), /*#__PURE__*/React.createElement("p", null, error), TXHASH_REGEX.test(hash) ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\',\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n onClick: function onClick() {\n return void loadTx();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/blocks",\n size: "small",\n basic: true,\n title: "Open block explorer (recent blocks and mempool)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "list"\n }), "Block Explorer")) : null), !!hash && TXHASH_REGEX.test(hash) && !loading && !error && !tx && /*#__PURE__*/React.createElement(Message, {\n warning: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Transaction not found"), /*#__PURE__*/React.createElement("p", null, "This hub\'s Bitcoin node does not have this tx in the mempool or chain (wrong network, pruning, or txindex)."), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\',\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n onClick: function onClick() {\n return void loadTx();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/blocks",\n size: "small",\n basic: true,\n title: "Open block explorer (recent blocks and mempool)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "list"\n }), "Block Explorer"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/resources?tx=".concat(encodeURIComponent(hash)),\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check circle outline"\n }), "L1 verify"))), !loading && !error && tx && /*#__PURE__*/React.createElement(React.Fragment, null, isMempool && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n icon: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "clock outline"\n }), /*#__PURE__*/React.createElement(Message.Content, null, /*#__PURE__*/React.createElement(Message.Header, null, "Waiting for confirmation"), /*#__PURE__*/React.createElement("p", null, "This transaction is not in a block yet. It can be replaced or dropped while in the mempool; depth and inclusion depend on miners and fees."))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(List, {\n divided: true\n }, /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Transaction ID"), /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.9em\'\n }\n }, tx.txid || hash))), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Confirmations"), confirmations != null ? confirmations : isMempool ? \'0 (mempool)\' : \'n/a\')), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Block"), tx.blockhash ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/blocks/".concat(encodeURIComponent(tx.blockhash))\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, tx.blockhash)) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\'\n }\n }, "Unconfirmed (in mempool)"))), tx.size != null && /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Size"), tx.size, " bytes"))), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n onClick: loadTx,\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh")), inputs.length > 0 && /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Inputs (", inputs.length, ")"), /*#__PURE__*/React.createElement(Table, {\n compact: "very",\n celled: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Previous output"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Index"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "ScriptSig"))), /*#__PURE__*/React.createElement(Table.Body, null, inputs.map(function (inp, idx) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "".concat(idx, ":").concat(inp.txid || \'\', ":").concat(inp.vout)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, inp.txid ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(inp.txid))\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, String(inp.txid).slice(0, 16), "\\u2026")) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\'\n }\n }, "Coinbase")), /*#__PURE__*/React.createElement(Table.Cell, null, inp.vout != null ? inp.vout : \'-\'), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.8em\',\n wordBreak: \'break-all\'\n }\n }, inp.scriptSig && inp.scriptSig.hex ? "".concat(inp.scriptSig.hex.slice(0, 32), "\\u2026") : \'-\')));\n })))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Outputs (", outputs.length, ")", totalOut > 0 && /*#__PURE__*/React.createElement(Header.Subheader, {\n style: {\n fontWeight: \'normal\',\n color: \'#666\'\n }\n }, "Total: ", formatValue(totalOut))), outputs.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No outputs.") : /*#__PURE__*/React.createElement(Table, {\n compact: "very",\n celled: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Index"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Value"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Address / Type"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Script (scriptPubKey)"))), /*#__PURE__*/React.createElement(Table.Body, null, outputs.map(function (out, idx) {\n var addr = extractAddress(out && out.scriptPubKey);\n var scriptType = out && out.scriptPubKey && out.scriptPubKey.type;\n var spk = out && out.scriptPubKey;\n var scriptAsm = spk && spk.asm ? spk.asm : null;\n var scriptHex = spk && spk.hex ? spk.hex : null;\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "".concat(idx, ":").concat(out && out.value)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, idx), /*#__PURE__*/React.createElement(Table.Cell, null, formatValue(out && out.value)), /*#__PURE__*/React.createElement(Table.Cell, null, addr ? /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.9em\'\n }\n }, addr) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\'\n }\n }, scriptType || \'non-standard\')), /*#__PURE__*/React.createElement(Table.Cell, null, scriptAsm ? /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.8em\',\n wordBreak: \'break-all\',\n display: \'block\'\n },\n title: scriptHex || undefined\n }, scriptAsm) : scriptHex ? /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.75em\',\n wordBreak: \'break-all\',\n display: \'block\'\n }\n }, scriptHex) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\'\n }\n }, "-")));\n })))), tx.hex && /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Raw transaction"), /*#__PURE__*/React.createElement("pre", {\n style: {\n fontSize: \'0.8em\',\n wordBreak: \'break-all\',\n overflow: \'auto\',\n maxHeight: \'20em\',\n margin: 0\n }\n }, /*#__PURE__*/React.createElement("code", null, tx.hex)))));\n}\nmodule.exports = BitcoinTransactionView;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0JpdGNvaW5UcmFuc2FjdGlvblZpZXcuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBQUEsU0FBQUEsZUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFDLGVBQUEsQ0FBQUYsQ0FBQSxLQUFBRyxxQkFBQSxDQUFBSCxDQUFBLEVBQUFDLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUosQ0FBQSxFQUFBQyxDQUFBLEtBQUFJLGdCQUFBO0FBQUEsU0FBQUEsaUJBQUEsY0FBQUMsU0FBQTtBQUFBLFNBQUFGLDRCQUFBSixDQUFBLEVBQUFPLENBQUEsUUFBQVAsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBUSxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUEsT0FBQUUsQ0FBQSxNQUFBQyxRQUFBLENBQUFDLElBQUEsQ0FBQVgsQ0FBQSxFQUFBWSxLQUFBLDZCQUFBSCxDQUFBLElBQUFULENBQUEsQ0FBQWEsV0FBQSxLQUFBSixDQUFBLEdBQUFULENBQUEsQ0FBQWEsV0FBQSxDQUFBQyxJQUFBLGFBQUFMLENBQUEsY0FBQUEsQ0FBQSxHQUFBTSxLQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsb0JBQUFTLENBQUEsK0NBQUFRLElBQUEsQ0FBQVIsQ0FBQSxJQUFBRCxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUE7QUFBQSxTQUFBQyxrQkFBQVIsQ0FBQSxFQUFBTyxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBUCxDQUFBLENBQUFrQixNQUFBLE1BQUFYLENBQUEsR0FBQVAsQ0FBQSxDQUFBa0IsTUFBQSxZQUFBakIsQ0FBQSxNQUFBa0IsQ0FBQSxHQUFBSixLQUFBLENBQUFSLENBQUEsR0FBQU4sQ0FBQSxHQUFBTSxDQUFBLEVBQUFOLENBQUEsSUFBQWtCLENBQUEsQ0FBQWxCLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFVBQUFrQixDQUFBO0FBQUEsU0FBQWhCLHNCQUFBSCxDQUFBLEVBQUFvQixDQUFBLFFBQUFYLENBQUEsV0FBQVQsQ0FBQSxn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QkFDeEduRixLQUFBLENBQUFtRSxhQUFBLGVBQU90QixFQUFFLENBQUNtRSxHQUFVLENBQ2pCLENBQ0UsQ0FFWCxDQUVELENBQUM7QUFFVjtBQUVBYSxNQUFNLENBQUNDLE9BQU8sR0FBR2pHLHNCQUFzQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29tcG9uZW50cy9CaXRjb2luVHJhbnNhY3Rpb25WaWV3LmpzPzA3NmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmssIHVzZVBhcmFtcyB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuY29uc3QgeyBCdXR0b24sIEhlYWRlciwgSWNvbiwgTGFiZWwsIExpc3QsIExvYWRlciwgTWVzc2FnZSwgU2VnbWVudCwgVGFibGUgfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCB7IGZldGNoVHJhbnNhY3Rpb25CeUhhc2gsIGxvYWRVcHN0cmVhbVNldHRpbmdzIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvYml0Y29pbkNsaWVudCcpO1xuXG5jb25zdCBUWEhBU0hfUkVHRVggPSAvXlthLWZBLUYwLTldezY0fSQvO1xuXG5mdW5jdGlvbiBleHRyYWN0QWRkcmVzcyAoc2NyaXB0UHViS2V5KSB7XG4gIGlmICghc2NyaXB0UHViS2V5IHx8IHR5cGVvZiBzY3JpcHRQdWJLZXkgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgaWYgKHNjcmlwdFB1YktleS5hZGRyZXNzKSByZXR1cm4gc2NyaXB0UHViS2V5LmFkZHJlc3M7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjcmlwdFB1YktleS5hZGRyZXNzZXMpICYmIHNjcmlwdFB1YktleS5hZGRyZXNzZXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBzY3JpcHRQdWJLZXkuYWRkcmVzc2VzLmpvaW4oJywgJyk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFZhbHVlICh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCB8fCAhTnVtYmVyLmlzRmluaXRlKE51bWJlcih2YWx1ZSkpKSByZXR1cm4gJy0nO1xuICByZXR1cm4gYCR7TnVtYmVyKHZhbHVlKS50b0ZpeGVkKDgpfSBCVENgO1xufVxuXG5mdW5jdGlvbiBCaXRjb2luVHJhbnNhY3Rpb25WaWV3ICgpIHtcbiAgY29uc3QgeyB0eGhhc2ggfSA9IHVzZVBhcmFtcygpO1xuICBjb25zdCBoYXNoID0gKHR4aGFzaCB8fCAnJykudHJpbSgpO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3R4LCBzZXRUeF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcblxuICBjb25zdCBsb2FkVHggPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFoYXNoKSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEVycm9yKCdUcmFuc2FjdGlvbiBoYXNoIGlzIHJlcXVpcmVkLicpO1xuICAgICAgc2V0VHgobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghVFhIQVNIX1JFR0VYLnRlc3QoaGFzaCkpIHtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0RXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24gaGFzaC4gTXVzdCBiZSA2NCBoZXggY2hhcmFjdGVycy4nKTtcbiAgICAgIHNldFR4KG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgc2V0RXJyb3IobnVsbCk7XG4gICAgY29uc3QgdXBzdHJlYW0gPSBsb2FkVXBzdHJlYW1TZXR0aW5ncygpO1xuXG4gICAgZmV0Y2hUcmFuc2FjdGlvbkJ5SGFzaCh1cHN0cmVhbSwgaGFzaClcbiAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgc2V0RXJyb3IoZGF0YS5tZXNzYWdlIHx8ICdDb3VsZCBub3QgbG9hZCB0cmFuc2FjdGlvbi4nKTtcbiAgICAgICAgICBzZXRUeChudWxsKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHNldFR4KG51bGwpO1xuICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRUeChkYXRhKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBzZXRFcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpKTtcbiAgICAgICAgc2V0VHgobnVsbCk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4gc2V0TG9hZGluZyhmYWxzZSkpO1xuICB9LCBbaGFzaF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbG9hZFR4KCk7XG4gIH0sIFtsb2FkVHhdKTtcblxuICBjb25zdCBvdXRwdXRzID0gQXJyYXkuaXNBcnJheSh0eCAmJiB0eC52b3V0KSA/IHR4LnZvdXQgOiBbXTtcbiAgY29uc3QgaW5wdXRzID0gQXJyYXkuaXNBcnJheSh0eCAmJiB0eC52aW4pID8gdHgudmluIDogW107XG4gIGNvbnN0IHRvdGFsT3V0ID0gb3V0cHV0cy5yZWR1Y2UoKHN1bSwgbykgPT4gc3VtICsgKE51bWJlcihvLnZhbHVlKSB8fCAwKSwgMCk7XG4gIGNvbnN0IGlzTWVtcG9vbCA9ICF0eCB8fCAodHguYmxvY2toYXNoID09IG51bGwgfHwgdHguYmxvY2toYXNoID09PSAnJyk7XG4gIGNvbnN0IGNvbmZpcm1hdGlvbnMgPSB0eCAmJiB0eC5jb25maXJtYXRpb25zICE9IG51bGwgPyB0eC5jb25maXJtYXRpb25zIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPSdmYWRlLWluJz5cbiAgICAgIDxTZWdtZW50PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAnMC41cmVtJywgbWFyZ2luQm90dG9tOiAnMC4yNWVtJyB9fVxuICAgICAgICAgIHJvbGU9XCJiYW5uZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuNWVtJywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgYXJpYS1sYWJlbD1cIkJhY2sgdG8gQml0Y29pbiBkYXNoYm9hcmRcIiB0aXRsZT1cIkJpdGNvaW4gaG9tZSAoc3RhdHVzLCB3YWxsZXQsIGV4cGxvcmVyLCBhbmQgdG9vbHMpXCI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJhcnJvdyBsZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgQml0Y29pblxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICB7VFhIQVNIX1JFR0VYLnRlc3QoaGFzaCkgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgICAgdG89e2Avc2VydmljZXMvYml0Y29pbi9yZXNvdXJjZXM/dHg9JHtlbmNvZGVVUklDb21wb25lbnQoaGFzaCl9YH1cbiAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJPcGVuIEwxIHBheW1lbnQgdmVyaWZpY2F0aW9uIGZvciB0aGlzIHR4aWRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNoZWNrIGNpcmNsZSBvdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICBMMSB2ZXJpZnlcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC41ZW0nLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImgyXCIgc3R5bGU9e3sgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZXhjaGFuZ2VcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+VHJhbnNhY3Rpb248L0hlYWRlci5Db250ZW50PlxuICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLCBnYXA6ICcwLjM1ZW0nLCBmbGV4V3JhcDogJ3dyYXAnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fSBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAge2lzTWVtcG9vbCAmJiB0eCAmJiAoXG4gICAgICAgICAgICAgICAgPExhYmVsIGNvbG9yPVwib3JhbmdlXCIgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY2xvY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgVW5jb25maXJtZWRcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7Y29uZmlybWF0aW9ucyAhPSBudWxsICYmIGNvbmZpcm1hdGlvbnMgPiAwICYmIChcbiAgICAgICAgICAgICAgICA8TGFiZWwgY29sb3I9XCJncmVlblwiIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNoZWNrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgIHtjb25maXJtYXRpb25zfSBjb25maXJtYXRpb25zXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgIHshaGFzaCAmJiAoXG4gICAgICAgIDxNZXNzYWdlIHdhcm5pbmc+XG4gICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPk1pc3NpbmcgdHJhbnNhY3Rpb24gaGFzaDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgPHA+UHJvdmlkZSBhIHZhbGlkIDY0LWNoYXJhY3RlciBoZXggdHJhbnNhY3Rpb24gSUQgaW4gdGhlIFVSTC48L3A+XG4gICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICl9XG5cbiAgICAgIHshIWhhc2ggJiYgVFhIQVNIX1JFR0VYLnRlc3QoaGFzaCkgJiYgbG9hZGluZyAmJiAoXG4gICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgIDxMb2FkZXIgYWN0aXZlIGlubGluZT1cImNlbnRlcmVkXCIgLz5cbiAgICAgICAgICA8cCBzdHlsZT17eyB0ZXh0QWxpZ246ICdjZW50ZXInLCBtYXJnaW5Ub3A6ICcxZW0nLCBjb2xvcjogJyM2NjYnIH19PkxvYWRpbmcgdHJhbnNhY3Rpb27igKY8L3A+XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgICl9XG5cbiAgICAgIHshIWhhc2ggJiYgZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZT5cbiAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+RmFpbGVkIHRvIGxvYWQgdHJhbnNhY3Rpb248L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgIDxwPntlcnJvcn08L3A+XG4gICAgICAgICAge1RYSEFTSF9SRUdFWC50ZXN0KGhhc2gpID8gKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc2l6ZT1cInNtYWxsXCIgb25DbGljaz17KCkgPT4gdm9pZCBsb2FkVHgoKX0+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICAgIFJldHJ5XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgICAgdG89XCIvc2VydmljZXMvYml0Y29pbi9ibG9ja3NcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICB0aXRsZT1cIk9wZW4gYmxvY2sgZXhwbG9yZXIgKHJlY2VudCBibG9ja3MgYW5kIG1lbXBvb2wpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJsaXN0XCIgLz5cbiAgICAgICAgICAgICAgICBCbG9jayBFeHBsb3JlclxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApfVxuXG4gICAgICB7ISFoYXNoICYmIFRYSEFTSF9SRUdFWC50ZXN0KGhhc2gpICYmICFsb2FkaW5nICYmICFlcnJvciAmJiAhdHggJiYgKFxuICAgICAgICA8TWVzc2FnZSB3YXJuaW5nPlxuICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5UcmFuc2FjdGlvbiBub3QgZm91bmQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAgVGhpcyBodWImYXBvcztzIEJpdGNvaW4gbm9kZSBkb2VzIG5vdCBoYXZlIHRoaXMgdHggaW4gdGhlIG1lbXBvb2wgb3IgY2hhaW4gKHdyb25nIG5ldHdvcmssIHBydW5pbmcsIG9yIHR4aW5kZXgpLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScsIGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMC41ZW0nLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc2l6ZT1cInNtYWxsXCIgb25DbGljaz17KCkgPT4gdm9pZCBsb2FkVHgoKX0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgUmV0cnlcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBhcz17TGlua31cbiAgICAgICAgICAgICAgdG89XCIvc2VydmljZXMvYml0Y29pbi9ibG9ja3NcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICB0aXRsZT1cIk9wZW4gYmxvY2sgZXhwbG9yZXIgKHJlY2VudCBibG9ja3MgYW5kIG1lbXBvb2wpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImxpc3RcIiAvPlxuICAgICAgICAgICAgICBCbG9jayBFeHBsb3JlclxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL3Jlc291cmNlcz90eD0ke2VuY29kZVVSSUNvbXBvbmVudChoYXNoKX1gfSBzaXplPVwic21hbGxcIiBiYXNpYz5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNoZWNrIGNpcmNsZSBvdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgTDEgdmVyaWZ5XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgKX1cblxuICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiB0eCAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge2lzTWVtcG9vbCAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZSB3YXJuaW5nIGljb24+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjbG9jayBvdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UuQ29udGVudD5cbiAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+V2FpdGluZyBmb3IgY29uZmlybWF0aW9uPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8cD5UaGlzIHRyYW5zYWN0aW9uIGlzIG5vdCBpbiBhIGJsb2NrIHlldC4gSXQgY2FuIGJlIHJlcGxhY2VkIG9yIGRyb3BwZWQgd2hpbGUgaW4gdGhlIG1lbXBvb2w7IGRlcHRoIGFuZCBpbmNsdXNpb24gZGVwZW5kIG9uIG1pbmVycyBhbmQgZmVlcy48L3A+XG4gICAgICAgICAgICAgIDwvTWVzc2FnZS5Db250ZW50PlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgICA8TGlzdCBkaXZpZGVkPlxuICAgICAgICAgICAgICA8TGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgIDxMaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+VHJhbnNhY3Rpb24gSUQ8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJywgZm9udFNpemU6ICcwLjllbScgfX0+e3R4LnR4aWQgfHwgaGFzaH08L2NvZGU+XG4gICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICA8TGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgIDxMaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+Q29uZmlybWF0aW9uczwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICB7Y29uZmlybWF0aW9ucyAhPSBudWxsID8gY29uZmlybWF0aW9ucyA6IChpc01lbXBvb2wgPyAnMCAobWVtcG9vbCknIDogJ24vYScpfVxuICAgICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPExpc3QuSGVhZGVyPkJsb2NrPC9MaXN0LkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIHt0eC5ibG9ja2hhc2ggPyAoXG4gICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vYmxvY2tzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHR4LmJsb2NraGFzaCl9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fT57dHguYmxvY2toYXNofTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjODg4JyB9fT5VbmNvbmZpcm1lZCAoaW4gbWVtcG9vbCk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAge3R4LnNpemUgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgIDxMaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxMaXN0LkhlYWRlcj5TaXplPC9MaXN0LkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAge3R4LnNpemV9IGJ5dGVzXG4gICAgICAgICAgICAgICAgICA8L0xpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvTGlzdD5cbiAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgYmFzaWMgb25DbGljaz17bG9hZFR4fSBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgUmVmcmVzaFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9TZWdtZW50PlxuXG4gICAgICAgICAge2lucHV0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIj5JbnB1dHMgKHtpbnB1dHMubGVuZ3RofSk8L0hlYWRlcj5cbiAgICAgICAgICAgICAgPFRhYmxlIGNvbXBhY3Q9XCJ2ZXJ5XCIgY2VsbGVkPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5QcmV2aW91cyBvdXRwdXQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkluZGV4PC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5TY3JpcHRTaWc8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICAgIHtpbnB1dHMubWFwKChpbnAsIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93IGtleT17YCR7aWR4fToke2lucC50eGlkIHx8ICcnfToke2lucC52b3V0fWB9PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lucC50eGlkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChpbnAudHhpZCl9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nIH19PntTdHJpbmcoaW5wLnR4aWQpLnNsaWNlKDAsIDE2KX3igKY8L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcgfX0+Q29pbmJhc2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57aW5wLnZvdXQgIT0gbnVsbCA/IGlucC52b3V0IDogJy0nfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44ZW0nLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KGlucC5zY3JpcHRTaWcgJiYgaW5wLnNjcmlwdFNpZy5oZXgpID8gYCR7aW5wLnNjcmlwdFNpZy5oZXguc2xpY2UoMCwgMzIpfeKApmAgOiAnLSd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIj5cbiAgICAgICAgICAgICAgT3V0cHV0cyAoe291dHB1dHMubGVuZ3RofSlcbiAgICAgICAgICAgICAge3RvdGFsT3V0ID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgPEhlYWRlci5TdWJoZWFkZXIgc3R5bGU9e3sgZm9udFdlaWdodDogJ25vcm1hbCcsIGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICBUb3RhbDoge2Zvcm1hdFZhbHVlKHRvdGFsT3V0KX1cbiAgICAgICAgICAgICAgICA8L0hlYWRlci5TdWJoZWFkZXI+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgIHtvdXRwdXRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5ObyBvdXRwdXRzLjwvcD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxUYWJsZSBjb21wYWN0PVwidmVyeVwiIGNlbGxlZD5cbiAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+SW5kZXg8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlZhbHVlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5BZGRyZXNzIC8gVHlwZTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+U2NyaXB0IChzY3JpcHRQdWJLZXkpPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAgICB7b3V0cHV0cy5tYXAoKG91dCwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZHIgPSBleHRyYWN0QWRkcmVzcyhvdXQgJiYgb3V0LnNjcmlwdFB1YktleSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcmlwdFR5cGUgPSBvdXQgJiYgb3V0LnNjcmlwdFB1YktleSAmJiBvdXQuc2NyaXB0UHViS2V5LnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwayA9IG91dCAmJiBvdXQuc2NyaXB0UHViS2V5O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHRBc20gPSBzcGsgJiYgc3BrLmFzbSA/IHNway5hc20gOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHRIZXggPSBzcGsgJiYgc3BrLmhleCA/IHNway5oZXggOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3cga2V5PXtgJHtpZHh9OiR7b3V0ICYmIG91dC52YWx1ZX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntpZHh9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2Zvcm1hdFZhbHVlKG91dCAmJiBvdXQudmFsdWUpfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7YWRkciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuOWVtJyB9fT57YWRkcn08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjODg4JyB9fT57c2NyaXB0VHlwZSB8fCAnbm9uLXN0YW5kYXJkJ308L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3NjcmlwdEFzbSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuOGVtJywgd29yZEJyZWFrOiAnYnJlYWstYWxsJywgZGlzcGxheTogJ2Jsb2NrJyB9fSB0aXRsZT17c2NyaXB0SGV4IHx8IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2NyaXB0QXNtfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IHNjcmlwdEhleCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuNzVlbScsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcsIGRpc3BsYXk6ICdibG9jaycgfX0+e3NjcmlwdEhleH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjODg4JyB9fT4tPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgICB7dHguaGV4ICYmIChcbiAgICAgICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIj5SYXcgdHJhbnNhY3Rpb248L0hlYWRlcj5cbiAgICAgICAgICAgICAgPHByZSBzdHlsZT17eyBmb250U2l6ZTogJzAuOGVtJywgd29yZEJyZWFrOiAnYnJlYWstYWxsJywgb3ZlcmZsb3c6ICdhdXRvJywgbWF4SGVpZ2h0OiAnMjBlbScsIG1hcmdpbjogMCB9fT5cbiAgICAgICAgICAgICAgICA8Y29kZT57dHguaGV4fTwvY29kZT5cbiAgICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJpdGNvaW5UcmFuc2FjdGlvblZpZXc7XG4iXSwibmFtZXMiOlsiX3NsaWNlZFRvQXJyYXkiLCJyIiwiZSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJhIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0IiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibGVuZ3RoIiwibiIsImwiLCJTeW1ib2wiLCJpdGVyYXRvciIsImkiLCJ1IiwiZiIsIm8iLCJuZXh0IiwiT2JqZWN0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImlzQXJyYXkiLCJfdHlwZW9mIiwicHJvdG90eXBlIiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJMaW5rIiwidXNlUGFyYW1zIiwiX3JlcXVpcmUyIiwiQnV0dG9uIiwiSGVhZGVyIiwiSWNvbiIsIkxhYmVsIiwiTGlzdCIsIkxvYWRlciIsIk1lc3NhZ2UiLCJTZWdtZW50IiwiVGFibGUiLCJfcmVxdWlyZTMiLCJmZXRjaFRyYW5zYWN0aW9uQnlIYXNoIiwibG9hZFVwc3RyZWFtU2V0dGluZ3MiLCJUWEhBU0hfUkVHRVgiLCJleHRyYWN0QWRkcmVzcyIsInNjcmlwdFB1YktleSIsImFkZHJlc3MiLCJhZGRyZXNzZXMiLCJqb2luIiwiZm9ybWF0VmFsdWUiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImNvbmNhdCIsInRvRml4ZWQiLCJCaXRjb2luVHJhbnNhY3Rpb25WaWV3IiwiX3VzZVBhcmFtcyIsInR4aGFzaCIsImhhc2giLCJ0cmltIiwiX1JlYWN0JHVzZVN0YXRlIiwidXNlU3RhdGUiLCJfUmVhY3QkdXNlU3RhdGUyIiwibG9hZGluZyIsInNldExvYWRpbmciLCJfUmVhY3QkdXNlU3RhdGUzIiwiX1JlYWN0JHVzZVN0YXRlNCIsImVycm9yIiwic2V0RXJyb3IiLCJfUmVhY3QkdXNlU3RhdGU1IiwiX1JlYWN0JHVzZVN0YXRlNiIsInR4Iiwic2V0VHgiLCJsb2FkVHgiLCJ1c2VDYWxsYmFjayIsInVwc3RyZWFtIiwidGhlbiIsImRhdGEiLCJzdGF0dXMiLCJtZXNzYWdlIiwiZXJyIiwiU3RyaW5nIiwidXNlRWZmZWN0Iiwib3V0cHV0cyIsInZvdXQiLCJpbnB1dHMiLCJ2aW4iLCJ0b3RhbE91dCIsInJlZHVjZSIsInN1bSIsImlzTWVtcG9vbCIsImJsb2NraGFzaCIsImNvbmZpcm1hdGlvbnMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImdhcCIsIm1hcmdpbkJvdHRvbSIsInJvbGUiLCJmbGV4V3JhcCIsImFsaWduSXRlbXMiLCJhcyIsInRvIiwiYmFzaWMiLCJzaXplIiwidGl0bGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJtYXJnaW4iLCJDb250ZW50IiwiY29sb3IiLCJ3YXJuaW5nIiwiYWN0aXZlIiwiaW5saW5lIiwidGV4dEFsaWduIiwibWFyZ2luVG9wIiwibmVnYXRpdmUiLCJ0eXBlIiwib25DbGljayIsIkZyYWdtZW50IiwiaWNvbiIsImRpdmlkZWQiLCJJdGVtIiwid29yZEJyZWFrIiwiZm9udFNpemUiLCJ0eGlkIiwiY29tcGFjdCIsImNlbGxlZCIsIlJvdyIsIkhlYWRlckNlbGwiLCJCb2R5IiwibWFwIiwiaW5wIiwiaWR4Iiwia2V5IiwiQ2VsbCIsInNjcmlwdFNpZyIsImhleCIsIlN1YmhlYWRlciIsImZvbnRXZWlnaHQiLCJvdXQiLCJhZGRyIiwic2NyaXB0VHlwZSIsInNwayIsInNjcmlwdEFzbSIsImFzbSIsInNjcmlwdEhleCIsInVuZGVmaW5lZCIsIm92ZXJmbG93IiwibWF4SGVpZ2h0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/BitcoinTransactionView.js\n\n}')},"./components/BitcoinTransactionsHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Input = _require2.Input,\n Label = _require2.Label,\n Message = _require2.Message,\n Segment = _require2.Segment,\n Table = _require2.Table;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n fetchPayments = _require3.fetchPayments,\n sendPayment = _require3.sendPayment,\n fetchWalletSummary = _require3.fetchWalletSummary,\n fetchWalletTransactions = _require3.fetchWalletTransactions,\n getSpendWalletContext = _require3.getSpendWalletContext,\n loadUpstreamSettings = _require3.loadUpstreamSettings;\nvar txContractLabels = __webpack_require__(/*! ../functions/txContractLabels */ "./functions/txContractLabels.js");\nvar invoiceStore = __webpack_require__(/*! ../functions/invoiceStore */ "./functions/invoiceStore.js");\nvar _require4 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require4.formatSatsDisplay;\nvar _require5 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require5.readHubAdminTokenFromBrowser;\nvar _require6 = __webpack_require__(/*! ../functions/federationSpendingPrefs */ "./functions/federationSpendingPrefs.js"),\n loadFederationSpendingPrefs = _require6.loadFederationSpendingPrefs,\n mergePaymentMemoWithFederation = _require6.mergePaymentMemoWithFederation,\n subscribeFederationSpendingPrefs = _require6.subscribeFederationSpendingPrefs;\nvar FederationWalletMultisigPanel = __webpack_require__(/*! ./FederationWalletMultisigPanel */ "./components/FederationWalletMultisigPanel.js");\nvar BitcoinTransactionsHome = /*#__PURE__*/function (_React$Component) {\n function BitcoinTransactionsHome(props) {\n var _this;\n _classCallCheck(this, BitcoinTransactionsHome);\n _this = _callSuper(this, BitcoinTransactionsHome, [props]);\n _this.state = {\n loading: true,\n error: null,\n upstream: loadUpstreamSettings(),\n wallet: {},\n summary: {},\n transactions: [],\n rawPayments: [],\n lastUpdatedAt: 0,\n paymentTo: \'\',\n paymentAmountSats: \'\',\n paymentMemo: \'\',\n paymentResult: null,\n recordFederationContext: false,\n spendingPrefsTick: 0\n };\n _this._refreshTimer = null;\n _this._fedPrefsUnsub = null;\n return _this;\n }\n _inherits(BitcoinTransactionsHome, _React$Component);\n return _createClass(BitcoinTransactionsHome, [{\n key: "componentDidMount",\n value: function () {\n var _componentDidMount = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var _this2 = this;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _context.n = 1;\n return this.refresh();\n case 1:\n this._refreshTimer = setInterval(function () {\n _this2.refresh()["catch"](function () {});\n }, 10000);\n case 2:\n return _context.a(2);\n }\n }, _callee, this);\n }));\n function componentDidMount() {\n return _componentDidMount.apply(this, arguments);\n }\n return componentDidMount;\n }()\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n if (this._refreshTimer) clearInterval(this._refreshTimer);\n this._refreshTimer = null;\n }\n }, {\n key: "componentDidUpdate",\n value: function () {\n var _componentDidUpdate = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(prevProps) {\n var prevId, nextId;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n prevId = String((prevProps && prevProps.identity || {}).id || \'\');\n nextId = String((this.props && this.props.identity || {}).id || \'\');\n if (!(prevId !== nextId)) {\n _context2.n = 1;\n break;\n }\n _context2.n = 1;\n return this.refresh();\n case 1:\n return _context2.a(2);\n }\n }, _callee2, this);\n }));\n function componentDidUpdate(_x) {\n return _componentDidUpdate.apply(this, arguments);\n }\n return componentDidUpdate;\n }()\n }, {\n key: "refresh",\n value: function () {\n var _refresh = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var identity, wallet, upstream, network, _yield$Promise$all, _yield$Promise$all2, summary, transactions, payments, invLabels, txRows, paymentRows, _t;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n identity = this.props && this.props.identity || {};\n wallet = getSpendWalletContext(identity);\n upstream = _objectSpread(_objectSpread({}, this.state.upstream), {}, {\n hubAdminToken: readHubAdminTokenFromBrowser(this.props && this.props.adminToken) || \'\'\n });\n network = this.props && this.props.bitcoin && this.props.bitcoin.network ? String(this.props.bitcoin.network).toLowerCase() : \'regtest\';\n this.setState({\n loading: true,\n error: null,\n wallet: wallet\n });\n _context3.p = 1;\n _context3.n = 2;\n return Promise.all([fetchWalletSummary(upstream, wallet, {\n network: network\n })["catch"](function () {\n return {};\n }), fetchWalletTransactions(upstream, wallet, {\n limit: 100,\n network: network\n })["catch"](function () {\n return [];\n }), fetchPayments(upstream, wallet, {\n limit: 100,\n network: network\n })["catch"](function () {\n return [];\n })]);\n case 2:\n _yield$Promise$all = _context3.v;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 3);\n summary = _yield$Promise$all2[0];\n transactions = _yield$Promise$all2[1];\n payments = _yield$Promise$all2[2];\n invLabels = txContractLabels.buildInvoiceTxLabels(invoiceStore.loadInvoices());\n txRows = Array.isArray(transactions) ? txContractLabels.mergeServerAndLocalLabels(transactions, invLabels) : [];\n paymentRows = Array.isArray(payments) ? payments : [];\n this.setState({\n loading: false,\n summary: summary && _typeof(summary) === \'object\' ? summary : {},\n transactions: txRows,\n rawPayments: paymentRows,\n lastUpdatedAt: Date.now()\n });\n _context3.n = 4;\n break;\n case 3:\n _context3.p = 3;\n _t = _context3.v;\n this.setState({\n loading: false,\n error: _t && _t.message ? _t.message : String(_t)\n });\n case 4:\n return _context3.a(2);\n }\n }, _callee3, this, [[1, 3]]);\n }));\n function refresh() {\n return _refresh.apply(this, arguments);\n }\n return refresh;\n }()\n }, {\n key: "_hubAdminToken",\n value: function _hubAdminToken() {\n return readHubAdminTokenFromBrowser(this.props && this.props.adminToken);\n }\n }, {\n key: "handleSendPayment",\n value: function () {\n var _handleSendPayment = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var paymentTo, paymentAmountSats, adminToken, prefs, memo, result, _t2;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n paymentTo = String(this.state.paymentTo || \'\').trim();\n paymentAmountSats = Number(this.state.paymentAmountSats || 0);\n if (paymentTo) {\n _context4.n = 1;\n break;\n }\n this.setState({\n paymentResult: {\n error: \'Recipient is required.\'\n }\n });\n return _context4.a(2);\n case 1:\n if (!(!Number.isFinite(paymentAmountSats) || paymentAmountSats <= 0)) {\n _context4.n = 2;\n break;\n }\n this.setState({\n paymentResult: {\n error: \'Amount (sats) must be greater than zero.\'\n }\n });\n return _context4.a(2);\n case 2:\n adminToken = this._hubAdminToken();\n if (adminToken) {\n _context4.n = 3;\n break;\n }\n this.setState({\n paymentResult: {\n error: \'Admin token required. Hub wallet spends use the setup token (same as Generate Block / broadcast).\'\n }\n });\n return _context4.a(2);\n case 3:\n _context4.p = 3;\n prefs = loadFederationSpendingPrefs();\n memo = mergePaymentMemoWithFederation(this.state.paymentMemo, prefs, !!this.state.recordFederationContext);\n _context4.n = 4;\n return sendPayment(this.state.upstream, this.state.wallet, {\n to: paymentTo,\n amountSats: paymentAmountSats,\n memo: memo,\n adminToken: adminToken\n });\n case 4:\n result = _context4.v;\n this.setState({\n paymentResult: result || {\n status: \'submitted\'\n },\n paymentAmountSats: \'\',\n paymentMemo: \'\'\n });\n _context4.n = 5;\n return this.refresh();\n case 5:\n _context4.n = 7;\n break;\n case 6:\n _context4.p = 6;\n _t2 = _context4.v;\n this.setState({\n paymentResult: {\n error: _t2 && _t2.message ? _t2.message : String(_t2)\n }\n });\n case 7:\n return _context4.a(2);\n }\n }, _callee4, this, [[3, 6]]);\n }));\n function handleSendPayment() {\n return _handleSendPayment.apply(this, arguments);\n }\n return handleSendPayment;\n }()\n }, {\n key: "render",\n value: function render() {\n var _this3 = this;\n var summary = this.state.summary || {};\n var balanceSats = Number(summary.balanceSats != null ? summary.balanceSats : summary.balance || 0);\n var confirmedSats = Number(summary.confirmedSats != null ? summary.confirmedSats : balanceSats);\n var unconfirmedSats = Number(summary.unconfirmedSats || 0);\n var lastUpdated = this.state.lastUpdatedAt ? new Date(this.state.lastUpdatedAt).toLocaleTimeString() : \'-\';\n return /*#__PURE__*/React.createElement("div", {\n className: "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, {\n loading: this.state.loading\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n gap: \'0.75em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left"\n }), "Bitcoin"), /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "exchange"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Transactions"))), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n onClick: function onClick() {\n return _this3.refresh();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh")), this.state.error ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n style: {\n marginTop: \'0.75em\'\n },\n content: this.state.error\n }) : null, /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "User wallet:"), " ", formatSatsDisplay(balanceSats), " sats"), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.2em\',\n color: \'#555\'\n }\n }, "confirmed ", formatSatsDisplay(confirmedSats), " \\xB7 unconfirmed ", formatSatsDisplay(unconfirmedSats), " \\xB7 updated ", lastUpdated))), /*#__PURE__*/React.createElement(FederationWalletMultisigPanel, {\n adminToken: this.props.adminToken,\n recordFederationContext: this.state.recordFederationContext,\n onRecordFederationContextChange: function onRecordFederationContextChange(v) {\n return _this3.setState({\n recordFederationContext: !!v\n });\n },\n spendingPrefsTick: this.state.spendingPrefsTick\n }), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Send Payment (Layer 1)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Bridge (Hub node):"), " payment is executed by the Hub node wallet."), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Recipient address"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "bcrt1... or m/44\'/0\'/0\'/0/0",\n value: this.state.paymentTo,\n onChange: function onChange(e) {\n return _this3.setState({\n paymentTo: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, {\n width: 4\n }, /*#__PURE__*/React.createElement("label", null, "Amount (sats)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "1",\n step: "1",\n placeholder: "1000",\n value: this.state.paymentAmountSats,\n onChange: function onChange(e) {\n return _this3.setState({\n paymentAmountSats: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Memo (optional)"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "Note for your records (optional)",\n value: this.state.paymentMemo,\n onChange: function onChange(e) {\n return _this3.setState({\n paymentMemo: e.target.value\n });\n }\n }))), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n onClick: function onClick() {\n return _this3.handleSendPayment();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "send"\n }), "Send")), this.state.paymentResult ? /*#__PURE__*/React.createElement(Message, {\n style: {\n marginTop: \'1em\'\n },\n negative: !!this.state.paymentResult.error,\n positive: !this.state.paymentResult.error\n }, /*#__PURE__*/React.createElement(Message.Header, null, this.state.paymentResult.error ? \'Payment failed\' : \'Payment response\'), !this.state.paymentResult.error ? function () {\n var pr = _this3.state.paymentResult;\n var txid = pr && pr.payment && pr.payment.txid || pr && pr.txid;\n return txid ? /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(String(txid)))\n }, "Open transaction details")) : null;\n }() : null, /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\'\n }\n }, JSON.stringify(this.state.paymentResult, null, 2))) : null), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "fabric-btc-tx-client-h3"\n }, "My Wallet Activity"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, "Only transactions tied to your wallet context are listed here."), this.state.transactions.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No transactions found for this wallet.") : /*#__PURE__*/React.createElement(Table, {\n compact: "very",\n celled: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Txid"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Contract"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Amount"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Confirmations"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Time"))), /*#__PURE__*/React.createElement(Table.Body, null, this.state.transactions.map(function (tx, idx) {\n var amt = tx.ourAmount != null ? tx.ourAmount : tx.value;\n var amtNum = Number(amt);\n var isOutgoing = Number.isFinite(amtNum) ? amtNum < 0 : false;\n var isIncoming = Number.isFinite(amtNum) ? amtNum > 0 : false;\n var time = tx.blocktime != null ? tx.blocktime : tx.time;\n var dateStr = time ? new Date(time * 1000).toLocaleString() : \'-\';\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "".concat(tx.txid || \'tx\', ":").concat(idx)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, tx.txid ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(tx.txid))\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n },\n title: tx.txid\n }, "".concat(tx.txid.slice(0, 8), "...").concat(tx.txid.slice(-8)))) : /*#__PURE__*/React.createElement("code", null, "-")), /*#__PURE__*/React.createElement(Table.Cell, null, tx.fabricContract && tx.fabricContract.label ? /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "blue",\n title: JSON.stringify(tx.fabricContract.meta || {})\n }, tx.fabricContract.label) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#999\'\n }\n }, "-")), /*#__PURE__*/React.createElement(Table.Cell, null, amt != null ? "".concat(Number(amt).toFixed(8), " BTC") : \'-\', isOutgoing ? /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "orange",\n style: {\n marginLeft: \'0.35em\'\n }\n }, "sent") : null, isIncoming ? /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "green",\n style: {\n marginLeft: \'0.35em\'\n }\n }, "received") : null), /*#__PURE__*/React.createElement(Table.Cell, null, tx.confirmations != null ? /*#__PURE__*/React.createElement(React.Fragment, null, tx.confirmations, Number(tx.confirmations) === 0 ? /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "orange",\n style: {\n marginLeft: \'0.35em\'\n }\n }, "mempool") : null) : \'-\'), /*#__PURE__*/React.createElement(Table.Cell, null, dateStr));\n })))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "fabric-btc-tx-live-h3"\n }, "Live Raw Transaction Stream"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, "Raw transaction feed from the Hub payment/mempool surface (auto-refresh every 10 seconds)."), this.state.rawPayments.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No live transactions currently visible.") : /*#__PURE__*/React.createElement(Table, {\n compact: "very",\n celled: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Txid"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Fee"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Value"))), /*#__PURE__*/React.createElement(Table.Body, null, this.state.rawPayments.map(function (p, idx) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "".concat(p.txid || \'tx\', ":").concat(idx)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, p.txid ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(p.txid))\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n },\n title: p.txid\n }, "".concat(p.txid.slice(0, 8), "...").concat(p.txid.slice(-8)))) : /*#__PURE__*/React.createElement("code", null, "-")), /*#__PURE__*/React.createElement(Table.Cell, null, p.fee != null ? p.fee : \'-\'), /*#__PURE__*/React.createElement(Table.Cell, null, p.value != null ? "".concat(p.value, " BTC") : \'-\'));\n })))));\n }\n }]);\n}(React.Component);\nmodule.exports = BitcoinTransactionsHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0JpdGNvaW5UcmFuc2FjdGlvbnNIb21lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBQUEsU0FBQUssZUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFDLGVBQUEsQ0FBQUYsQ0FBQSxLQUFBRyxxQkFBQSxDQUFBSCxDQUFBLEVBQUFDLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUosQ0FBQSxFQUFBQyxDQUFBLEtBQUFJLGdCQUFBO0FBQUEsU0FBQUEsaUJBQUEsY0FBQUMsU0FBQTtBQUFBLFNBQUFGLDRCQUFBSixDQUFBLEVBQUFPLENBQUEsUUFBQVAsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBUSxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUEsT0FBQUUsQ0FBQSxNQUFBQyxRQUFBLENBQUFDLElBQUEsQ0FBQVgsQ0FBQSxFQUFBWSxLQUFBLDZCQUFBSCxDQUFBLElBQUFULENBQUEsQ0FBQUgsV0FBQSxLQUFBWSxDQUFBLEdBQUFULENBQUEsQ0FBQUgsV0FBQSxDQUFBZ0IsSUFBQSxhQUFBSixDQUFBLGNBQUFBLENBQUEsR0FBQUssS0FBQSxDQUFBQyxJQUFBLENBQUFmLENBQUEsb0JBQUFTLENBQUEsK0NBQUFPLElBQUEsQ0FBQVAsQ0FBQSxJQUFBRCxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUE7QUFBQSxTQUFBQyxrQkFBQVIsQ0FBQSxFQUFBTyxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBUCxDQUFBLENBQUFpQixNQUFBLE1BQUFWLENBQUEsR0FBQVAsQ0FBQSxDQUFBaUIsTUFBQSxZQUFBaEIsQ0FBQSxNQUFBaUIsQ0FBQSxHQUFBSixLQUFBLENBQUFQLENBQUEsR0FBQU4sQ0FBQSxHQUFBTSxDQUFBLEVBQUFOLENBQUEsSUFBQWlCLENBQUEsQ0FBQWpCLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFVBQUFpQixDQUFBO0FBQUEsU0FBQWYsc0JBQUFILENBQUEsRUFBQW1CLENBQUEsUUFBQVYsQ0FBQSxXQUFBVCxDQUFBLGdDQUFBTCxNQUFBLElBQUFLLENBQUEsQ0FBQUwsTUFBQSxDQUFBQyxRQUFBLEtBQUFJLENBQUEsNEJBQUFTLENBQUEsUUFBQVIsQ0FBQSxFQUFBaUIsQ0FBQSxFQUFBRSxDQUFBLEVBQUFDLENBQUEsRUFBQWQsQ0FBQSxPQUFBZSxDQUFBLE9BQUE1QixDQUFBLGlCQUFBMEIsQ0FBQSxJQUFBWCxDQUFBLEdBQUFBLENBQUEsQ0FBQUUsSUFBQSxDQUFBWCxDQUFBLEdBQUF1QixJQUFBLFFBQUFKLENBQUEsUUFBQUssTUFBQSxDQUFBZixDQUFBLE1BQUFBLENBQUEsVUFBQWEsQ0FBQSx1QkFBQUEsQ0FBQSxJQUFBckIsQ0FBQSxHQUFBbUIsQ0FBQSxDQUFBVCxJQUFBLENBQUFGLENBQUEsR0FBQWdCLElBQUEsTUFBQWxCLENBQUEsQ0FBQW1CLElBQUEsQ0FBQXpCLENBQUEsQ0FBQTBCLEtBQUEsR0FBQXBCLENBQUEsQ0FBQVUsTUFBQSxLQUFBRSxDQUFBLEdBQUFHLENBQUEsaUJBQUF0QixDQUFBLElBQUFOLENBQUEsT0FBQXdCLENBQUEsR0FBQWxCLENBQUEseUJBQUFzQixDQUFBLFlBQUFiLENBQUEsZUFBQVksQ0FBQSxHQUFBWixDQUFBLGNBQUFlLE1BQUEsQ0FBQUgsQ0FBQSxNQUFBQSxDQUFBLDJCQUFBM0IsQ0FBQSxRQUFBd0IsQ0FBQSxhQUFBWCxDQUFBO0FBQUEsU0FBQUwsZ0JBQUFGLENBQUEsUUFBQWMsS0FBQSxDQUFBYyxPQUFBLENBQUE1QixDQUFBLFVBQUFBLENBQUE7QUFBQSxTQUFBNkIsUUFBQTVCLENBQUEsRUFBQUQsQ0FBQSxRQUFBUyxDQUFBLEdBQUFlLE1BQUEsQ0FBQU0sSUFBQSxDQUFBN0IsQ0FBQSxPQUFBdUIsTUFBQSxDQUFBTyxxQkFBQSxRQUFBckMsQ0FBQSxHQUFBOEIsTUFBQSxDQUFBTyxxQkFBQSxDQUFBOUIsQ0FBQSxHQUFBRCxDQUFBLEtBQUFOLENBQUEsR0FBQUEsQ0FBQSxDQUFBc0MsTUFBQSxXQUFBaEMsQ0FBQSxXQUFBd0IsTUFBQSxDQUFBUyx3QkFBQSxDQUFBaEMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFrQyxVQUFBLE9BQUF6QixDQUFBLENBQUFpQixJQUFBLENBQUFTLEtBQUEsQ0FBQTFCLENBQUEsRUFBQWYsQ0FBQSxZQUFBZSxDQUFBO0FBQUEsU0FBQTJCLGNBQUFuQyxDQUFBLGFBQUFELENBQUEsTUFBQUEsQ0FBQSxHQUFBcUMsU0FBQSxDQUFBcEIsTUFBQSxFQUFBakIsQ0FBQSxVQUFBUyxDQUFBLFdBQUE0QixTQUFBLENBQUFyQyxDQUFBLElBQUFxQyxTQUFBLENBQUFyQyxDQUFBLFFBQUFBLENBQUEsT0FBQTZCLE9BQUEsQ0FBQUwsTUFBQSxDQUFBZixDQUFBLE9BQUE2QixPQUFBLFdBQUF0QyxDQUFBLElBQUF1QyxlQUFBLENBQUF0QyxDQUFBLEVBQUFELENBQUEsRUFBQVMsQ0FBQSxDQUFBVCxDQUFBLFNBQUF3QixNQUFBLENBQUFnQix5QkFBQSxHQUFBaEIsTUFBQSxDQUFBaUIsZ0JBQUEsQ0FBQXhDLENBQUEsRUFBQXVCLE1BQUEsQ0FBQWdCLHlCQUFBLENBQUEvQixDQUFBLEtBQUFvQixPQUFBLENBQUFMLE1BQUEsQ0FBQWYsQ0FBQSxHQUFBNkIsT0FBQSxXQUFBdEMsQ0FBQSxJQUFBd0IsTUFBQSxDQUFBa0IsY0FBQSxDQUFBekMsQ0FBQSxFQUFBRCxDQUFBLEVBQUF3QixNQUFBLENBQUFTLHdCQUFBLENBQUF4QixDQUFBLEVBQUFULENBQUEsaUJBQUFDLENBQUE7QUFBQSxTQUFBc0MsZ0JBQUF0QyxDQUFBLEVBQUFELENBQUEsRUFBQVMsQ0FBQSxZQUFBVCxDQUFBLEdBQUEyQyxjQUFBLENBQUEzQyxDQUFBLE1BQUFDLENBQUEsR0FBQXVCLE1BQUEsQ0FBQWtCLGNBQUEsQ0FBQXpDLENBQUEsRUFBQUQsQ0FBQSxJQUFBMkIsS0FBQSxFQUFBbEIsQ0FBQSxFQUFBeUIsVUFBQSxNQUFBVSxZQUFBLE1BQUFDLFFBQUEsVUFBQTVDLENBQUEsQ0FBQUQsQ0FBQSxJQUFBUyxDQUFBLEVBQUFSLENBQUE7QUFBQSxTQUFBNkMsYUFBQSxJQUNiLHVLQUFBN0MsQ0FBQSxFQUFBUSxDQUFBLEVBQUFULENBQUEsd0JBQUFMLE1BQUEsR0FBQUEsTUFBQSxPQUFBdUIsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBSixRQUFBLGtCQUFBRixDQUFBLEdBQUFNLENBQUEsQ0FBQStDLFdBQUEsOEJBQUEzQixFQUFBcEIsQ0FBQSxFQUFBa0IsQ0FBQSxFQUFBeEIsQ0FBQSxFQUFBMEIsQ0FBQSxRQUFBNEIsQ0FBQSxHQUFBOUIsQ0FBQSxJQUFBQSxDQUFBLENBQUFwQixTQUFBLFlBQUFtRCxTQUFBLEdBQUEvQixDQUFBLEdBQUErQixTQUFBLEVBQUE1QixDQUFBLEdBQUFHLE1BQUEsQ0FBQTBCLE1BQUEsQ0FBQUYsQ0FBQSxDQUFBbEQsU0FBQSxVQUFBcUQsbUJBQUEsQ0FBQTlCLENBQUEsdUJBQUFyQixDQUFBLEVBQUFrQixDQUFBLEVBQUF4QixDQUFBLFFBQUEwQixDQUFBLEVBQUE0QixDQUFBLEVBQUEzQixDQUFBLEVBQUFDLENBQUEsTUFBQThCLENBQUEsR0FBQTFELENBQUEsUUFBQTJELENBQUEsT0FBQUMsQ0FBQSxLQUFBRixDQUFBLEtBQUFsQyxDQUFBLEtBQUFxQyxDQUFBLEVBQUF0RCxDQUFBLEVBQUFNLENBQUEsRUFBQWlELENBQUEsRUFBQWxDLENBQUEsRUFBQWtDLENBQUEsQ0FBQUMsSUFBQSxDQUFBeEQsQ0FBQSxNQUFBdUQsQ0FBQSxXQUFBQSxFQUFBL0MsQ0FBQSxFQUFBVCxDQUFBLFdBQUFvQixDQUFBLEdBQUFYLENBQUEsRUFBQXVDLENBQUEsTUFBQTNCLENBQUEsR0FBQXBCLENBQUEsRUFBQXFELENBQUEsQ0FBQXBDLENBQUEsR0FBQWxCLENBQUEsRUFBQU8sQ0FBQSxnQkFBQWlELEVBQUF4RCxDQUFBLEVBQUFrQixDQUFBLFNBQUE4QixDQUFBLEdBQUFoRCxDQUFBLEVBQUFxQixDQUFBLEdBQUFILENBQUEsRUFBQVQsQ0FBQSxPQUFBNEMsQ0FBQSxJQUFBL0IsQ0FBQSxLQUFBNUIsQ0FBQSxJQUFBZSxDQUFBLEdBQUEyQyxDQUFBLENBQUFuQyxNQUFBLEVBQUFSLENBQUEsVUFBQWYsQ0FBQSxFQUFBMEIsQ0FBQSxHQUFBZ0MsQ0FBQSxDQUFBM0MsQ0FBQSxHQUFBK0MsQ0FBQSxHQUFBRixDQUFBLENBQUFGLENBQUEsRUFBQWpDLENBQUEsR0FBQUMsQ0FBQSxLQUFBcEIsQ0FBQSxRQUFBTixDQUFBLEdBQUF5QixDQUFBLEtBQUFELENBQUEsTUFBQUcsQ0FBQSxHQUFBRCxDQUFBLEVBQUE0QixDQUFBLEdBQUE1QixDQUFBLFlBQUE0QixDQUFBLFdBQUE1QixDQUFBLE1BQUFBLENBQUEsTUFBQW5CLENBQUEsSUFBQW1CLENBQUEsT0FBQW9DLENBQUEsTUFBQTlELENBQUEsR0FBQU0sQ0FBQSxRQUFBd0QsQ0FBQSxHQUFBcEMsQ0FBQSxRQUFBNEIsQ0FBQSxNQUFBTSxDQUFBLENBQUFDLENBQUEsR0FBQXJDLENBQUEsRUFBQW9DLENBQUEsQ0FBQXBDLENBQUEsR0FBQUUsQ0FBQSxPQUFBb0MsQ0FBQSxHQUFBckMsQ0FBQSxLQUFBekIsQ0FBQSxHQUFBTSxDQUFBLFFBQUFvQixDQUFBLE1BQUFGLENBQUEsSUFBQUEsQ0FBQSxHQUFBQyxDQUFBLE1BQUFDLENBQUEsTUFBQXBCLENBQUEsRUFBQW9CLENBQUEsTUFBQUYsQ0FBQSxFQUFBb0MsQ0FBQSxDQUFBcEMsQ0FBQSxHQUFBQyxDQUFBLEVBQUE2QixDQUFBLGNBQUF0RCxDQUFBLElBQUFNLENBQUEsYUFBQU8sQ0FBQSxRQUFBOEMsQ0FBQSxPQUFBbkMsQ0FBQSxxQkFBQXhCLENBQUEsRUFBQTBELENBQUEsRUFBQWpDLENBQUEsUUFBQUcsQ0FBQSxZQUFBaEIsU0FBQSx1Q0FBQStDLENBQUEsVUFBQUQsQ0FBQSxJQUFBSSxDQUFBLENBQUFKLENBQUEsRUFBQWpDLENBQUEsR0FBQTZCLENBQUEsR0FBQUksQ0FBQSxFQUFBL0IsQ0FBQSxHQUFBRixDQUFBLEdBQUFWLENBQUEsR0FBQXVDLENBQUEsT0FBQS9DLENBQUEsR0FBQW9CLENBQUEsTUFBQWdDLENBQUEsS0FBQWpDLENBQUEsS0FBQTRCLENBQUEsR0FBQUEsQ0FBQSxRQUFBQSxDQUFBLFNBQUFNLENBQUEsQ0FBQXBDLENBQUEsUUFBQXNDLENBQUEsQ0FBQVIsQ0FBQSxFQUFBM0IsQ0FBQSxLQUFBaUMsQ0FBQSxDQUFBcEMsQ0FBQSxHQUFBRyxDQUFBLEdBQUFpQyxDQUFBLENBQUFDLENBQUEsR0FBQWxDLENBQUEsYUFBQUMsQ0FBQSxNQUFBRixDQUFBLFFBQUE0QixDQUFBLEtBQUF0RCxDQUFBLFlBQUFlLENBQUEsR0FBQVcsQ0FBQSxDQUFBMUIsQ0FBQSxXQUFBZSxDQUFBLEdBQUFBLENBQUEsQ0FBQUUsSUFBQSxDQUFBUyxDQUFBLEVBQUFDLENBQUEsVUFBQWYsU0FBQSwyQ0FBQUcsQ0FBQSxDQUFBZ0IsSUFBQSxTQUFBaEIsQ0FBQSxFQUFBWSxDQUFBLEdBQUFaLENBQUEsQ0FBQWtCLEtBQUEsRUFBQXFCLENBQUEsU0FBQUEsQ0FBQSxvQkFBQUEsQ0FBQSxLQUFBdkMsQ0FBQSxHQUFBVyxDQUFBLGVBQUFYLENBQUEsQ0FBQUUsSUFBQSxDQUFBUyxDQUFBLEdBQUE0QixDQUFBLFNBQUEzQixDQUFBLEdBQUFmLFNBQUEsdUNBQUFaLENBQUEsZ0JBQUFzRCxDQUFBLE9BQUE1QixDQUFBLEdBQUFuQixDQUFBLGNBQUFRLENBQUEsSUFBQTRDLENBQUEsR0FBQUMsQ0FBQSxDQUFBcEMsQ0FBQSxRQUFBRyxDQUFBLEdBQUFyQixDQUFBLENBQUFXLElBQUEsQ0FBQU8sQ0FBQSxFQUFBb0MsQ0FBQSxPQUFBL0MsQ0FBQSxrQkFBQUUsQ0FBQSxJQUFBVyxDQUFBLEdBQUFuQixDQUFBLEVBQUErQyxDQUFBLE1BQUEzQixDQUFBLEdBQUFaLENBQUEsY0FBQWEsQ0FBQSxtQkFBQUssS0FBQSxFQUFBbEIsQ0FBQSxFQUFBZ0IsSUFBQSxFQUFBNEIsQ0FBQSxTQUFBckQsQ0FBQSxFQUFBTixDQUFBLEVBQUEwQixDQUFBLFFBQUFDLENBQUEsUUFBQWQsQ0FBQSxnQkFBQTBDLFVBQUEsY0FBQVMsa0JBQUEsY0FBQUMsMkJBQUEsS0FBQWxELENBQUEsR0FBQWUsTUFBQSxDQUFBb0MsY0FBQSxNQUFBWixDQUFBLE1BQUE5QixDQUFBLElBQUFULENBQUEsQ0FBQUEsQ0FBQSxJQUFBUyxDQUFBLFNBQUFpQyxtQkFBQSxDQUFBMUMsQ0FBQSxPQUFBUyxDQUFBLGlDQUFBVCxDQUFBLEdBQUFZLENBQUEsR0FBQXNDLDBCQUFBLENBQUE3RCxTQUFBLEdBQUFtRCxTQUFBLENBQUFuRCxTQUFBLEdBQUEwQixNQUFBLENBQUEwQixNQUFBLENBQUFGLENBQUEsWUFBQTFCLEVBQUFyQixDQUFBLFdBQUF1QixNQUFBLENBQUFxQyxjQUFBLEdBQUFyQyxNQUFBLENBQUFxQyxjQUFBLENBQUE1RCxDQUFBLEVBQUEwRCwwQkFBQSxLQUFBMUQsQ0FBQSxDQUFBNkQsU0FBQSxHQUFBSCwwQkFBQSxFQUFBUixtQkFBQSxDQUFBbEQsQ0FBQSxFQUFBUCxDQUFBLHlCQUFBTyxDQUFBLENBQUFILFNBQUEsR0FBQTBCLE1BQUEsQ0FBQTBCLE1BQUEsQ0FBQTdCLENBQUEsR0FBQXBCLENBQUEsV0FBQXlELGlCQUFBLENBQUE1RCxTQUFBLEdBQUE2RCwwQkFBQSxFQUFBUixtQkFBQSxDQUFBOUIsQ0FBQSxpQkFBQXNDLDBCQUFBLEdBQUFSLG1CQUFBLENBQUFRLDBCQUFBLGlCQUFBRCxpQkFBQSxHQUFBQSxpQkFBQSxDQUFBSyxXQUFBLHdCQUFBWixtQkFBQSxDQUFBUSwwQkFBQSxFQUFBakUsQ0FBQSx3QkFBQXlELG1CQUFBLENBQUE5QixDQUFBLEdBQUE4QixtQkFBQSxDQUFBOUIsQ0FBQSxFQUFBM0IsQ0FBQSxnQkFBQXlELG1CQUFBLENBQUE5QixDQUFBLEVBQUFILENBQUEsaUNBQUFpQyxtQkFBQSxDQUFBOUIsQ0FBQSw4REFBQXlCLFlBQUEsWUFBQUEsYUFBQSxhQUFBa0IsQ0FBQSxFQUFBNUMsQ0FBQSxFQUFBNkMsQ0FBQSxFQUFBM0MsQ0FBQTtBQUFBLFNBQUE2QixvQkFBQWxELENBQUEsRUFBQUQsQ0FBQSxFQUFBa0IsQ0FBQSxFQUFBVCxDQUFBLFFBQUFXLENBQUEsR0FBQUksTUFBQSxDQUFBa0IsY0FBQSxRQUFBdEIsQ0FBQSx1QkFBQW5CLENBQUEsSUFBQW1CLENBQUEsUUFBQStCLG1CQUFBLFlBQUFlLG1CQUFBakUsQ0FBQSxFQUFBRCxDQUFBLEVBQUFrQixDQUFBLEVBQUFULENBQUEsYUFBQWYsRUFBQU0sQ0FBQSxFQUFBa0IsQ0FBQSxJQUFBaUMsbUJBQUEsQ0FBQWxELENBQUEsRUFBQUQsQ0FBQSxZQUFBQyxDQUFBLGdCQUFBa0UsT0FBQSxDQUFBbkUsQ0FBQSxFQUFBa0IsQ0FBQSxFQUFBakIsQ0FBQSxTQUFBRCxDQUFBLEdBQUFvQixDQUFBLEdBQUFBLENBQUEsQ0FBQW5CLENBQUEsRUFBQUQsQ0FBQSxJQUFBMkIsS0FBQSxFQUFBVCxDQUFBLEVBQUFnQixVQUFBLEdBQUF6QixDQUFBLEVBQUFtQyxZQUFBLEdBQUFuQyxDQUFBLEVBQUFvQyxRQUFBLEdBQUFwQyxDQUFBLE1BQUFSLENBQUEsQ0FBQUQsQ0FBQSxJQUFBa0IsQ0FBQSxJQUFBeEIsQ0FBQSxhQUFBQSxDQUFBLGNBQUFBLENBQUEsbUJBQUF5RCxtQkFBQSxDQUFBbEQsQ0FBQSxFQUFBRCxDQUFBLEVBQUFrQixDQUFBLEVBQUFULENBQUE7QUFBQSxTQUFBMkQsbUJBQUFsRCxDQUFBLEVBQUFULENBQUEsRUFBQVIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFOLENBQUEsRUFBQWEsQ0FBQSxFQUFBeUMsQ0FBQSxjQUFBNUIsQ0FBQSxHQUFBRixDQUFBLENBQUFYLENBQUEsRUFBQXlDLENBQUEsR0FBQTNCLENBQUEsR0FBQUQsQ0FBQSxDQUFBTyxLQUFBLFdBQUFULENBQUEsZ0JBQUFqQixDQUFBLENBQUFpQixDQUFBLEtBQUFFLENBQUEsQ0FBQUssSUFBQSxHQUFBaEIsQ0FBQSxDQUFBWSxDQUFBLElBQUFnRCxPQUFBLENBQUFDLE9BQUEsQ0FBQWpELENBQUEsRUFBQWtELElBQUEsQ0FBQXZFLENBQUEsRUFBQU4sQ0FBQTtBQUFBLFNBQUE4RSxrQkFBQXRELENBQUEsNkJBQUFULENBQUEsU0FBQVIsQ0FBQSxHQUFBb0MsU0FBQSxhQUFBZ0MsT0FBQSxXQUFBckUsQ0FBQSxFQUFBTixDQUFBLFFBQUFhLENBQUEsR0FBQVcsQ0FBQSxDQUFBaUIsS0FBQSxDQUFBMUIsQ0FBQSxFQUFBUixDQUFBLFlBQUF3RSxNQUFBdkQsQ0FBQSxJQUFBa0Qsa0JBQUEsQ0FBQTdELENBQUEsRUFBQVAsQ0FBQSxFQUFBTixDQUFBLEVBQUErRSxLQUFBLEVBQUFDLE1BQUEsVUFBQXhELENBQUEsY0FBQXdELE9BQUF4RCxDQUFBLElBQUFrRCxrQkFBQSxDQUFBN0QsQ0FBQSxFQUFBUCxDQUFBLEVBQUFOLENBQUEsRUFBQStFLEtBQUEsRUFBQUMsTUFBQSxXQUFBeEQsQ0FBQSxLQUFBdUQsS0FBQTtBQUFBLFNBQUFFLGdCQUFBcEUsQ0FBQSxFQUFBVyxDQUFBLFVBQUFYLENBQUEsWUFBQVcsQ0FBQSxhQUFBWixTQUFBO0FBQUEsU0FBQXNFLGtCQUFBM0UsQ0FBQSxFQUFBRCxDQUFBLGFBQUFTLENBQUEsTUFBQUEsQ0FBQSxHQUFBVCxDQUFBLENBQUFpQixNQUFBLEVBQUFSLENBQUEsVUFBQWYsQ0FBQSxHQUFBTSxDQUFBLENBQUFTLENBQUEsR0FBQWYsQ0FBQSxDQUFBd0MsVUFBQSxHQUFBeEMsQ0FBQSxDQUFBd0MsVUFBQSxRQUFBeEMsQ0FBQSxDQUFBa0QsWUFBQSxrQkFBQWxELENBQUEsS0FBQUEsQ0FBQSxDQUFBbUQsUUFBQSxRQUFBckIsTUFBQSxDQUFBa0IsY0FBQSxDQUFBekMsQ0FBQSxFQUFBMEMsY0FBQSxDQUFBakQsQ0FBQSxDQUFBbUYsR0FBQSxHQUFBbkYsQ0FBQTtBQUFBLFNBQUFvRixhQUFBN0UsQ0FBQSxFQUFBRCxDQUFBLEVBQUFTLENBQUEsV0FBQVQsQ0FBQSxJQUFBNEUsaUJBQUEsQ0FBQTNFLENBQUEsQ0FBQUgsU0FBQSxFQUFBRSxDQUFBLEdBQUFTLENBQUEsSUFBQW1FLGlCQUFBLENBQUEzRSxDQUFBLEVBQUFRLENBQUEsR0FBQWUsTUFBQSxDQUFBa0IsY0FBQSxDQUFBekMsQ0FBQSxpQkFBQTRDLFFBQUEsU0FBQTVDLENBQUE7QUFBQSxTQUFBMEMsZUFBQWxDLENBQUEsUUFBQVcsQ0FBQSxHQUFBMkQsWUFBQSxDQUFBdEUsQ0FBQSxnQ0FBQWhCLE9BQUEsQ0FBQTJCLENBQUEsSUFBQUEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQTJELGFBQUF0RSxDQUFBLEVBQUFULENBQUEsb0JBQUFQLE9BQUEsQ0FBQWdCLENBQUEsTUFBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFSLENBQUEsR0FBQVEsQ0FBQSxDQUFBZCxNQUFBLENBQUFxRixXQUFBLGtCQUFBL0UsQ0FBQSxRQUFBbUIsQ0FBQSxHQUFBbkIsQ0FBQSxDQUFBVSxJQUFBLENBQUFGLENBQUEsRUFBQVQsQ0FBQSxnQ0FBQVAsT0FBQSxDQUFBMkIsQ0FBQSxVQUFBQSxDQUFBLFlBQUFkLFNBQUEseUVBQUFOLENBQUEsR0FBQWlGLE1BQUEsR0FBQUMsTUFBQSxFQUFBekUsQ0FBQTtBQUFBLFNBQUEwRSxXQUFBMUUsQ0FBQSxFQUFBZixDQUFBLEVBQUFPLENBQUEsV0FBQVAsQ0FBQSxHQUFBMEYsZUFBQSxDQUFBMUYsQ0FBQSxHQUFBMkYsMEJBQUEsQ0FBQTVFLENBQUEsRUFBQTZFLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBOUYsQ0FBQSxFQUFBTyxDQUFBLFFBQUFtRixlQUFBLENBQUEzRSxDQUFBLEVBQUFaLFdBQUEsSUFBQUgsQ0FBQSxDQUFBeUMsS0FBQSxDQUFBMUIsQ0FBQSxFQUFBUixDQUFBO0FBQUEsU0FBQW9GLDJCQUFBNUUsQ0FBQSxFQUFBUixDQUFBLFFBQUFBLENBQUEsaUJBQUFSLE9BQUEsQ0FBQVEsQ0FBQSwwQkFBQUEsQ0FBQSxVQUFBQSxDQUFBLGlCQUFBQSxDQUFBLFlBQUFLLFNBQUEscUVBQUFtRixzQkFBQSxDQUFBaEYsQ0FBQTtBQUFBLFNBQUFnRix1QkFBQXhGLENBQUEsbUJBQUFBLENBQUEsWUFBQXlGLGNBQUEsc0VBQUF6RixDQUFBO0FBQUEsU0FBQXFGLDBCQUFBLGNBQUE3RSxDQUFBLElBQUFrRixPQUFBLENBQUE3RixTQUFBLENBQUE4RixPQUFBLENBQUFqRixJQUFBLENBQUE0RSxPQUFBLENBQUFDLFNBQUEsQ0FBQUcsT0FBQSxpQ0FBQWxGLENBQUEsYUFBQTZFLHlCQUFBLFlBQUFBLDBCQUFBLGFBQUE3RSxDQUFBO0FBQUEsU0FBQTJFLGdCQUFBM0UsQ0FBQSxXQUFBMkUsZUFBQSxHQUFBNUQsTUFBQSxDQUFBcUMsY0FBQSxHQUFBckMsTUFBQSxDQUFBb0MsY0FBQSxDQUFBSCxJQUFBLGVBQUFoRCxDQUFBLFdBQUFBLENBQUEsQ0FBQXFELFNBQUEsSUFBQXRDLE1BQUEsQ0FBQW9DLGNBQUEsQ0FBQW5ELENBQUEsTUFBQTJFLGVBQUEsQ0FBQTNFLENBQUE7QUFBQSxTQUFBb0YsVUFBQXBGLENBQUEsRUFBQVIsQ0FBQSw2QkFBQUEsQ0FBQSxhQUFBQSxDQUFBLFlBQUFLLFNBQUEsd0RBQUFHLENBQUEsQ0FBQVgsU0FBQSxHQUFBMEIsTUFBQSxDQUFBMEIsTUFBQSxDQUFBakQsQ0FBQSxJQUFBQSxDQUFBLENBQUFILFNBQUEsSUFBQUQsV0FBQSxJQUFBOEIsS0FBQSxFQUFBbEIsQ0FBQSxFQUFBb0MsUUFBQSxNQUFBRCxZQUFBLFdBQUFwQixNQUFBLENBQUFrQixjQUFBLENBQUFqQyxDQUFBLGlCQUFBb0MsUUFBQSxTQUFBNUMsQ0FBQSxJQUFBNkYsZUFBQSxDQUFBckYsQ0FBQSxFQUFBUixDQUFBO0FBQUEsU0FBQTZGLGdCQUFBckYsQ0FBQSxFQUFBUixDQUFBLFdBQUE2RixlQUFBLEdBQUF0RSxNQUFBLENBQUFxQyxjQUFBLEdBQUFyQyxNQUFBLENBQUFxQyxjQUFBLENBQUFKLElBQUEsZUFBQWhELENBQUEsRUFBQVIsQ0FBQSxXQUFBUSxDQUFBLENBQUFxRCxTQUFBLEdBQUE3RCxDQUFBLEVBQUFRLENBQUEsS0FBQXFGLGVBQUEsQ0FBQXJGLENBQUEsRUFBQVIsQ0FBQTtBQUNBLElBQU04RixLQUFLLEdBQUdDLG1CQUFPLENBQUMsNENBQU8sQ0FBQztBQUM5QixJQUFBQyxRQUFBLEdBQWlCRCxtQkFBTyxDQUFDLHVFQUFrQixDQUFDO0VBQXBDRSxJQUFJLEdBQUFELFFBQUEsQ0FBSkMsSUFBSTtBQUNaLElBQUFDLFNBQUEsR0FBOEVILG1CQUFPLENBQUMsNEVBQW1CLENBQUM7RUFBbEdJLE1BQU0sR0FBQUQsU0FBQSxDQUFOQyxNQUFNO0VBQUVDLElBQUksR0FBQUYsU0FBQSxDQUFKRSxJQUFJO0VBQUVDLE1BQU0sR0FBQUgsU0FBQSxDQUFORyxNQUFNO0VBQUVDLElBQUksR0FBQUosU0FBQSxDQUFKSSxJQUFJO0VBQUVDLEtBQUssR0FBQUwsU0FBQSxDQUFMSyxLQUFLO0VBQUVDLEtBQUssR0FBQU4sU0FBQSxDQUFMTSxLQUFLO0VBQUVDLE9BQU8sR0FBQVAsU0FBQSxDQUFQTyxPQUFPO0VBQUVDLE9BQU8sR0FBQVIsU0FBQSxDQUFQUSxPQUFPO0VBQUVDLEtBQUssR0FBQVQsU0FBQSxDQUFMUyxLQUFLO0FBQ3pFLElBQUFDLFNBQUEsR0FPSWIsbUJBQU8sQ0FBQyxnRUFBNEIsQ0FBQztFQU52Q2MsYUFBYSxHQUFBRCxTQUFBLENBQWJDLGFBQWE7RUFDYkMsV0FBVyxHQUFBRixTQUFBLENBQVhFLFdBQVc7RUFDWEMsa0JBQWtCLEdBQUFILFNBQUEsQ0FBbEJHLGtCQUFrQjtFQUNsQkMsdUJBQXVCLEdBQUFKLFNBQUEsQ0FBdkJJLHVCQUF1QjtFQUN2QkMscUJBQXFCLEdBQUFMLFNBQUEsQ0FBckJLLHFCQUFxQjtFQUNyQkMsb0JBQW9CLEdBQUFOLFNBQUEsQ0FBcEJNLG9CQUFvQjtBQUV0QixJQUFNQyxnQkFBZ0IsR0FBR3BCLG1CQUFPLENBQUMsc0VBQStCLENBQUM7QUFDakUsSUFBTXFCLFlBQVksR0FBR3JCLG1CQUFPLENBQUMsOERBQTJCLENBQUM7QUFDekQsSUFBQXNCLFNBQUEsR0FBOEJ0QixtQkFBTyxDQUFDLDBEQUF5QixDQUFDO0VBQXhEdUIsaUJBQWlCLEdBQUFELFNBQUEsQ0FBakJDLGlCQUFpQjtBQUN6QixJQUFBQyxTQUFBLEdBQXlDeEIsbUJBQU8sQ0FBQyw4RUFBbUMsQ0FBQztFQUE3RXlCLDRCQUE0QixHQUFBRCxTQUFBLENBQTVCQyw0QkFBNEI7QUFDcEMsSUFBQUMsU0FBQSxHQUlJMUIsbUJBQU8sQ0FBQyxvRkFBc0MsQ0FBQztFQUhqRDJCLDJCQUEyQixHQUFBRCxTQUFBLENBQTNCQywyQkFBMkI7RUFDM0JDLDhCQUE4QixHQUFBRixTQUFBLENBQTlCRSw4QkFBOEI7RUFDOUJDLGdDQUFnQyxHQUFBSCxTQUFBLENBQWhDRyxnQ0FBZ0M7QUFFbEMsSUFBTUMsNkJBQTZCLEdBQUc5QixtQkFBTyxDQUFDLHNGQUFpQyxDQUFDO0FBQUMsSUFFM0UrQix1QkFBdUIsMEJBQUFDLGdCQUFBO0VBQzNCLFNBQUFELHdCQUFhRSxLQUFLLEVBQUU7SUFBQSxJQUFBQyxLQUFBO0lBQUF2RCxlQUFBLE9BQUFvRCx1QkFBQTtJQUNsQkcsS0FBQSxHQUFBL0MsVUFBQSxPQUFBNEMsdUJBQUEsR0FBTUUsS0FBSztJQUNYQyxLQUFBLENBQUtDLEtBQUssR0FBRztNQUNYQyxPQUFPLEVBQUUsSUFBSTtNQUNiQyxLQUFLLEVBQUUsSUFBSTtNQUNYQyxRQUFRLEVBQUVuQixvQkFBb0IsQ0FBQyxDQUFDO01BQ2hDb0IsTUFBTSxFQUFFLENBQUMsQ0FBQztNQUNWQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ1hDLFlBQVksRUFBRSxFQUFFO01BQ2hCQyxXQUFXLEVBQUUsRUFBRTtNQUNmQyxhQUFhLEVBQUUsQ0FBQztNQUNoQkMsU0FBUyxFQUFFLEVBQUU7TUFDYkMsaUJBQWlCLEVBQUUsRUFBRTtNQUNyQkMsV0FBVyxFQUFFLEVBQUU7TUFDZkMsYUFBYSxFQUFFLElBQUk7TUFDbkJDLHVCQUF1QixFQUFFLEtBQUs7TUFDOUJDLGlCQUFpQixFQUFFO0lBQ3JCLENBQUM7SUFDRGYsS0FBQSxDQUFLZ0IsYUFBYSxHQUFHLElBQUk7SUFDekJoQixLQUFBLENBQUtpQixjQUFjLEdBQUcsSUFBSTtJQUFDLE9BQUFqQixLQUFBO0VBQzdCO0VBQUNyQyxTQUFBLENBQUFrQyx1QkFBQSxFQUFBQyxnQkFBQTtFQUFBLE9BQUFsRCxZQUFBLENBQUFpRCx1QkFBQTtJQUFBbEQsR0FBQTtJQUFBbEQsS0FBQTtNQUFBLElBQUF5SCxrQkFBQSxHQUFBNUUsaUJBQUEsY0FBQTFCLFlBQUEsR0FBQW1CLENBQUEsQ0FFRCxTQUFBb0YsUUFBQTtRQUFBLElBQUFDLE1BQUE7UUFBQSxPQUFBeEcsWUFBQSxHQUFBa0IsQ0FBQSxXQUFBdUYsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFySSxDQUFBO1lBQUE7Y0FBQXFJLFFBQUEsQ0FBQXJJLENBQUE7Y0FBQSxPQUNRLElBQUksQ0FBQ3NJLE9BQU8sQ0FBQyxDQUFDO1lBQUE7Y0FDcEIsSUFBSSxDQUFDTixhQUFhLEdBQUdPLFdBQVcsQ0FBQyxZQUFNO2dCQUNyQ0gsTUFBSSxDQUFDRSxPQUFPLENBQUMsQ0FBQyxTQUFNLENBQUMsWUFBTSxDQUFDLENBQUMsQ0FBQztjQUNoQyxDQUFDLEVBQUUsS0FBSyxDQUFDO1lBQUM7Y0FBQSxPQUFBRCxRQUFBLENBQUFoSixDQUFBO1VBQUE7UUFBQSxHQUFBOEksT0FBQTtNQUFBLENBQ1g7TUFBQSxTQUxLSyxpQkFBaUJBLENBQUE7UUFBQSxPQUFBTixrQkFBQSxDQUFBakgsS0FBQSxPQUFBRSxTQUFBO01BQUE7TUFBQSxPQUFqQnFILGlCQUFpQjtJQUFBO0VBQUE7SUFBQTdFLEdBQUE7SUFBQWxELEtBQUEsRUFPdkIsU0FBQWdJLG9CQUFvQkEsQ0FBQSxFQUFJO01BQ3RCLElBQUksSUFBSSxDQUFDVCxhQUFhLEVBQUVVLGFBQWEsQ0FBQyxJQUFJLENBQUNWLGFBQWEsQ0FBQztNQUN6RCxJQUFJLENBQUNBLGFBQWEsR0FBRyxJQUFJO0lBQzNCO0VBQUM7SUFBQXJFLEdBQUE7SUFBQWxELEtBQUE7TUFBQSxJQUFBa0ksbUJBQUEsR0FBQXJGLGlCQUFBLGNBQUExQixZQUFBLEdBQUFtQixDQUFBLENBRUQsU0FBQTZGLFNBQTBCQyxTQUFTO1FBQUEsSUFBQUMsTUFBQSxFQUFBQyxNQUFBO1FBQUEsT0FBQW5ILFlBQUEsR0FBQWtCLENBQUEsV0FBQWtHLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBaEosQ0FBQTtZQUFBO2NBQzNCOEksTUFBTSxHQUFHL0UsTUFBTSxDQUFDLENBQUU4RSxTQUFTLElBQUlBLFNBQVMsQ0FBQ0ksUUFBUSxJQUFLLENBQUMsQ0FBQyxFQUFFQyxFQUFFLElBQUksRUFBRSxDQUFDO2NBQ25FSCxNQUFNLEdBQUdoRixNQUFNLENBQUMsQ0FBRSxJQUFJLENBQUNnRCxLQUFLLElBQUksSUFBSSxDQUFDQSxLQUFLLENBQUNrQyxRQUFRLElBQUssQ0FBQyxDQUFDLEVBQUVDLEVBQUUsSUFBSSxFQUFFLENBQUM7Y0FBQSxNQUN2RUosTUFBTSxLQUFLQyxNQUFNO2dCQUFBQyxTQUFBLENBQUFoSixDQUFBO2dCQUFBO2NBQUE7Y0FBQWdKLFNBQUEsQ0FBQWhKLENBQUE7Y0FBQSxPQUFRLElBQUksQ0FBQ3NJLE9BQU8sQ0FBQyxDQUFDO1lBQUE7Y0FBQSxPQUFBVSxTQUFBLENBQUEzSixDQUFBO1VBQUE7UUFBQSxHQUFBdUosUUFBQTtNQUFBLENBQzVDO01BQUEsU0FKS08sa0JBQWtCQSxDQUFBQyxFQUFBO1FBQUEsT0FBQVQsbUJBQUEsQ0FBQTFILEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBbEJnSSxrQkFBa0I7SUFBQTtFQUFBO0lBQUF4RixHQUFBO0lBQUFsRCxLQUFBO01BQUEsSUFBQTRJLFFBQUEsR0FBQS9GLGlCQUFBLGNBQUExQixZQUFBLEdBQUFtQixDQUFBLENBTXhCLFNBQUF1RyxTQUFBO1FBQUEsSUFBQUwsUUFBQSxFQUFBNUIsTUFBQSxFQUFBRCxRQUFBLEVBQUFtQyxPQUFBLEVBQUFDLGtCQUFBLEVBQUFDLG1CQUFBLEVBQUFuQyxPQUFBLEVBQUFDLFlBQUEsRUFBQW1DLFFBQUEsRUFBQUMsU0FBQSxFQUFBQyxNQUFBLEVBQUFDLFdBQUEsRUFBQUMsRUFBQTtRQUFBLE9BQUFsSSxZQUFBLEdBQUFrQixDQUFBLFdBQUFpSCxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQTdILENBQUEsR0FBQTZILFNBQUEsQ0FBQS9KLENBQUE7WUFBQTtjQUNRaUosUUFBUSxHQUFJLElBQUksQ0FBQ2xDLEtBQUssSUFBSSxJQUFJLENBQUNBLEtBQUssQ0FBQ2tDLFFBQVEsSUFBSyxDQUFDLENBQUM7Y0FDcEQ1QixNQUFNLEdBQUdyQixxQkFBcUIsQ0FBQ2lELFFBQVEsQ0FBQztjQUN4QzdCLFFBQVEsR0FBQWxHLGFBQUEsQ0FBQUEsYUFBQSxLQUNULElBQUksQ0FBQytGLEtBQUssQ0FBQ0csUUFBUTtnQkFDdEI0QyxhQUFhLEVBQUV6RCw0QkFBNEIsQ0FBQyxJQUFJLENBQUNRLEtBQUssSUFBSSxJQUFJLENBQUNBLEtBQUssQ0FBQ2tELFVBQVUsQ0FBQyxJQUFJO2NBQUU7Y0FFbEZWLE9BQU8sR0FBSSxJQUFJLENBQUN4QyxLQUFLLElBQUksSUFBSSxDQUFDQSxLQUFLLENBQUNtRCxPQUFPLElBQUksSUFBSSxDQUFDbkQsS0FBSyxDQUFDbUQsT0FBTyxDQUFDWCxPQUFPLEdBQzNFeEYsTUFBTSxDQUFDLElBQUksQ0FBQ2dELEtBQUssQ0FBQ21ELE9BQU8sQ0FBQ1gsT0FBTyxDQUFDLENBQUNZLFdBQVcsQ0FBQyxDQUFDLEdBQ2hELFNBQVM7Y0FDYixJQUFJLENBQUNDLFFBQVEsQ0FBQztnQkFBRWxELE9BQU8sRUFBRSxJQUFJO2dCQUFFQyxLQUFLLEVBQUUsSUFBSTtnQkFBRUUsTUFBTSxFQUFOQTtjQUFPLENBQUMsQ0FBQztjQUFDMEMsU0FBQSxDQUFBN0gsQ0FBQTtjQUFBNkgsU0FBQSxDQUFBL0osQ0FBQTtjQUFBLE9BR0ptRCxPQUFPLENBQUNrSCxHQUFHLENBQUMsQ0FDMUR2RSxrQkFBa0IsQ0FBQ3NCLFFBQVEsRUFBRUMsTUFBTSxFQUFFO2dCQUFFa0MsT0FBTyxFQUFQQTtjQUFRLENBQUMsQ0FBQyxTQUFNLENBQUM7Z0JBQUEsT0FBTyxDQUFDLENBQUM7Y0FBQSxDQUFDLENBQUMsRUFDbkV4RCx1QkFBdUIsQ0FBQ3FCLFFBQVEsRUFBRUMsTUFBTSxFQUFFO2dCQUFFaUQsS0FBSyxFQUFFLEdBQUc7Z0JBQUVmLE9BQU8sRUFBUEE7Y0FBUSxDQUFDLENBQUMsU0FBTSxDQUFDO2dCQUFBLE9BQU0sRUFBRTtjQUFBLEVBQUMsRUFDbEYzRCxhQUFhLENBQUN3QixRQUFRLEVBQUVDLE1BQU0sRUFBRTtnQkFBRWlELEtBQUssRUFBRSxHQUFHO2dCQUFFZixPQUFPLEVBQVBBO2NBQVEsQ0FBQyxDQUFDLFNBQU0sQ0FBQztnQkFBQSxPQUFNLEVBQUU7Y0FBQSxFQUFDLENBQ3pFLENBQUM7WUFBQTtjQUFBQyxrQkFBQSxHQUFBTyxTQUFBLENBQUExSCxDQUFBO2NBQUFvSCxtQkFBQSxHQUFBNUssY0FBQSxDQUFBMkssa0JBQUE7Y0FKS2xDLE9BQU8sR0FBQW1DLG1CQUFBO2NBQUVsQyxZQUFZLEdBQUFrQyxtQkFBQTtjQUFFQyxRQUFRLEdBQUFELG1CQUFBO2NBS2hDRSxTQUFTLEdBQUd6RCxnQkFBZ0IsQ0FBQ3FFLG9CQUFvQixDQUFDcEUsWUFBWSxDQUFDcUUsWUFBWSxDQUFDLENBQUMsQ0FBQztjQUM5RVosTUFBTSxHQUFHaEssS0FBSyxDQUFDYyxPQUFPLENBQUM2RyxZQUFZLENBQUMsR0FDdENyQixnQkFBZ0IsQ0FBQ3VFLHlCQUF5QixDQUFDbEQsWUFBWSxFQUFFb0MsU0FBUyxDQUFDLEdBQ25FLEVBQUU7Y0FDQUUsV0FBVyxHQUFHakssS0FBSyxDQUFDYyxPQUFPLENBQUNnSixRQUFRLENBQUMsR0FBR0EsUUFBUSxHQUFHLEVBQUU7Y0FDM0QsSUFBSSxDQUFDVSxRQUFRLENBQUM7Z0JBQ1psRCxPQUFPLEVBQUUsS0FBSztnQkFDZEksT0FBTyxFQUFFQSxPQUFPLElBQUkvSSxPQUFBLENBQU8rSSxPQUFPLE1BQUssUUFBUSxHQUFHQSxPQUFPLEdBQUcsQ0FBQyxDQUFDO2dCQUM5REMsWUFBWSxFQUFFcUMsTUFBTTtnQkFDcEJwQyxXQUFXLEVBQUVxQyxXQUFXO2dCQUN4QnBDLGFBQWEsRUFBRWlELElBQUksQ0FBQ0MsR0FBRyxDQUFDO2NBQzFCLENBQUMsQ0FBQztjQUFDWixTQUFBLENBQUEvSixDQUFBO2NBQUE7WUFBQTtjQUFBK0osU0FBQSxDQUFBN0gsQ0FBQTtjQUFBNEgsRUFBQSxHQUFBQyxTQUFBLENBQUExSCxDQUFBO2NBRUgsSUFBSSxDQUFDK0gsUUFBUSxDQUFDO2dCQUNabEQsT0FBTyxFQUFFLEtBQUs7Z0JBQ2RDLEtBQUssRUFBRTJDLEVBQUEsSUFBU0EsRUFBQSxDQUFNYyxPQUFPLEdBQUdkLEVBQUEsQ0FBTWMsT0FBTyxHQUFHN0csTUFBTSxDQUFBK0YsRUFBTTtjQUM5RCxDQUFDLENBQUM7WUFBQztjQUFBLE9BQUFDLFNBQUEsQ0FBQTFLLENBQUE7VUFBQTtRQUFBLEdBQUFpSyxRQUFBO01BQUEsQ0FFTjtNQUFBLFNBcENLaEIsT0FBT0EsQ0FBQTtRQUFBLE9BQUFlLFFBQUEsQ0FBQXBJLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBUG1ILE9BQU87SUFBQTtFQUFBO0lBQUEzRSxHQUFBO0lBQUFsRCxLQUFBLEVBc0NiLFNBQUFvSyxjQUFjQSxDQUFBLEVBQUk7TUFDaEIsT0FBT3RFLDRCQUE0QixDQUFDLElBQUksQ0FBQ1EsS0FBSyxJQUFJLElBQUksQ0FBQ0EsS0FBSyxDQUFDa0QsVUFBVSxDQUFDO0lBQzFFO0VBQUM7SUFBQXRHLEdBQUE7SUFBQWxELEtBQUE7TUFBQSxJQUFBcUssa0JBQUEsR0FBQXhILGlCQUFBLGNBQUExQixZQUFBLEdBQUFtQixDQUFBLENBRUQsU0FBQWdJLFNBQUE7UUFBQSxJQUFBckQsU0FBQSxFQUFBQyxpQkFBQSxFQUFBc0MsVUFBQSxFQUFBZSxLQUFBLEVBQUFDLElBQUEsRUFBQUMsTUFBQSxFQUFBQyxHQUFBO1FBQUEsT0FBQXZKLFlBQUEsR0FBQWtCLENBQUEsV0FBQXNJLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBbEosQ0FBQSxHQUFBa0osU0FBQSxDQUFBcEwsQ0FBQTtZQUFBO2NBQ1EwSCxTQUFTLEdBQUczRCxNQUFNLENBQUMsSUFBSSxDQUFDa0QsS0FBSyxDQUFDUyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMyRCxJQUFJLENBQUMsQ0FBQztjQUNyRDFELGlCQUFpQixHQUFHM0QsTUFBTSxDQUFDLElBQUksQ0FBQ2lELEtBQUssQ0FBQ1UsaUJBQWlCLElBQUksQ0FBQyxDQUFDO2NBQUEsSUFDOURELFNBQVM7Z0JBQUEwRCxTQUFBLENBQUFwTCxDQUFBO2dCQUFBO2NBQUE7Y0FDWixJQUFJLENBQUNvSyxRQUFRLENBQUM7Z0JBQUV2QyxhQUFhLEVBQUU7a0JBQUVWLEtBQUssRUFBRTtnQkFBeUI7Y0FBRSxDQUFDLENBQUM7Y0FBQyxPQUFBaUUsU0FBQSxDQUFBL0wsQ0FBQTtZQUFBO2NBQUEsTUFHcEUsQ0FBQzJFLE1BQU0sQ0FBQ3NILFFBQVEsQ0FBQzNELGlCQUFpQixDQUFDLElBQUlBLGlCQUFpQixJQUFJLENBQUM7Z0JBQUF5RCxTQUFBLENBQUFwTCxDQUFBO2dCQUFBO2NBQUE7Y0FDL0QsSUFBSSxDQUFDb0ssUUFBUSxDQUFDO2dCQUFFdkMsYUFBYSxFQUFFO2tCQUFFVixLQUFLLEVBQUU7Z0JBQTJDO2NBQUUsQ0FBQyxDQUFDO2NBQUMsT0FBQWlFLFNBQUEsQ0FBQS9MLENBQUE7WUFBQTtjQUlwRjRLLFVBQVUsR0FBRyxJQUFJLENBQUNZLGNBQWMsQ0FBQyxDQUFDO2NBQUEsSUFDbkNaLFVBQVU7Z0JBQUFtQixTQUFBLENBQUFwTCxDQUFBO2dCQUFBO2NBQUE7Y0FDYixJQUFJLENBQUNvSyxRQUFRLENBQUM7Z0JBQ1p2QyxhQUFhLEVBQUU7a0JBQ2JWLEtBQUssRUFBRTtnQkFDVDtjQUNGLENBQUMsQ0FBQztjQUFDLE9BQUFpRSxTQUFBLENBQUEvTCxDQUFBO1lBQUE7Y0FBQStMLFNBQUEsQ0FBQWxKLENBQUE7Y0FLRzhJLEtBQUssR0FBR3ZFLDJCQUEyQixDQUFDLENBQUM7Y0FDckN3RSxJQUFJLEdBQUd2RSw4QkFBOEIsQ0FDekMsSUFBSSxDQUFDTyxLQUFLLENBQUNXLFdBQVcsRUFDdEJvRCxLQUFLLEVBQ0wsQ0FBQyxDQUFDLElBQUksQ0FBQy9ELEtBQUssQ0FBQ2EsdUJBQ2YsQ0FBQztjQUFBc0QsU0FBQSxDQUFBcEwsQ0FBQTtjQUFBLE9BQ29CNkYsV0FBVyxDQUFDLElBQUksQ0FBQ29CLEtBQUssQ0FBQ0csUUFBUSxFQUFFLElBQUksQ0FBQ0gsS0FBSyxDQUFDSSxNQUFNLEVBQUU7Z0JBQ3ZFa0UsRUFBRSxFQUFFN0QsU0FBUztnQkFDYjhELFVBQVUsRUFBRTdELGlCQUFpQjtnQkFDN0JzRCxJQUFJLEVBQUpBLElBQUk7Z0JBQ0poQixVQUFVLEVBQVZBO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FMSWlCLE1BQU0sR0FBQUUsU0FBQSxDQUFBL0ksQ0FBQTtjQU1aLElBQUksQ0FBQytILFFBQVEsQ0FBQztnQkFDWnZDLGFBQWEsRUFBRXFELE1BQU0sSUFBSTtrQkFBRU8sTUFBTSxFQUFFO2dCQUFZLENBQUM7Z0JBQ2hEOUQsaUJBQWlCLEVBQUUsRUFBRTtnQkFDckJDLFdBQVcsRUFBRTtjQUNmLENBQUMsQ0FBQztjQUFDd0QsU0FBQSxDQUFBcEwsQ0FBQTtjQUFBLE9BQ0csSUFBSSxDQUFDc0ksT0FBTyxDQUFDLENBQUM7WUFBQTtjQUFBOEMsU0FBQSxDQUFBcEwsQ0FBQTtjQUFBO1lBQUE7Y0FBQW9MLFNBQUEsQ0FBQWxKLENBQUE7Y0FBQWlKLEdBQUEsR0FBQUMsU0FBQSxDQUFBL0ksQ0FBQTtjQUVwQixJQUFJLENBQUMrSCxRQUFRLENBQUM7Z0JBQUV2QyxhQUFhLEVBQUU7a0JBQUVWLEtBQUssRUFBRWdFLEdBQUEsSUFBU0EsR0FBQSxDQUFNUCxPQUFPLEdBQUdPLEdBQUEsQ0FBTVAsT0FBTyxHQUFHN0csTUFBTSxDQUFBb0gsR0FBTTtnQkFBRTtjQUFFLENBQUMsQ0FBQztZQUFDO2NBQUEsT0FBQUMsU0FBQSxDQUFBL0wsQ0FBQTtVQUFBO1FBQUEsR0FBQTBMLFFBQUE7TUFBQSxDQUV2RztNQUFBLFNBNUNLVyxpQkFBaUJBLENBQUE7UUFBQSxPQUFBWixrQkFBQSxDQUFBN0osS0FBQSxPQUFBRSxTQUFBO01BQUE7TUFBQSxPQUFqQnVLLGlCQUFpQjtJQUFBO0VBQUE7SUFBQS9ILEdBQUE7SUFBQWxELEtBQUEsRUE4Q3ZCLFNBQUFrTCxNQUFNQSxDQUFBLEVBQUk7TUFBQSxJQUFBQyxNQUFBO01BQ1IsSUFBTXRFLE9BQU8sR0FBRyxJQUFJLENBQUNMLEtBQUssQ0FBQ0ssT0FBTyxJQUFJLENBQUMsQ0FBQztNQUN4QyxJQUFNdUUsV0FBVyxHQUFHN0gsTUFBTSxDQUFDc0QsT0FBTyxDQUFDdUUsV0FBVyxJQUFJLElBQUksR0FBR3ZFLE9BQU8sQ0FBQ3VFLFdBQVcsR0FBSXZFLE9BQU8sQ0FBQ3dFLE9BQU8sSUFBSSxDQUFFLENBQUM7TUFDdEcsSUFBTUMsYUFBYSxHQUFHL0gsTUFBTSxDQUFDc0QsT0FBTyxDQUFDeUUsYUFBYSxJQUFJLElBQUksR0FBR3pFLE9BQU8sQ0FBQ3lFLGFBQWEsR0FBR0YsV0FBVyxDQUFDO01BQ2pHLElBQU1HLGVBQWUsR0FBR2hJLE1BQU0sQ0FBQ3NELE9BQU8sQ0FBQzBFLGVBQWUsSUFBSSxDQUFDLENBQUM7TUFDNUQsSUFBTUMsV0FBVyxHQUFHLElBQUksQ0FBQ2hGLEtBQUssQ0FBQ1EsYUFBYSxHQUN4QyxJQUFJaUQsSUFBSSxDQUFDLElBQUksQ0FBQ3pELEtBQUssQ0FBQ1EsYUFBYSxDQUFDLENBQUN5RSxrQkFBa0IsQ0FBQyxDQUFDLEdBQ3ZELEdBQUc7TUFFUCxvQkFDRXJILEtBQUEsQ0FBQXNILGFBQUE7UUFBS0MsU0FBUyxFQUFDO01BQVMsZ0JBQ3RCdkgsS0FBQSxDQUFBc0gsYUFBQSxDQUFDMUcsT0FBTztRQUFDeUIsT0FBTyxFQUFFLElBQUksQ0FBQ0QsS0FBSyxDQUFDQztNQUFRLGdCQUNuQ3JDLEtBQUEsQ0FBQXNILGFBQUE7UUFBS0UsS0FBSyxFQUFFO1VBQUVDLE9BQU8sRUFBRSxNQUFNO1VBQUVDLFVBQVUsRUFBRSxRQUFRO1VBQUVDLGNBQWMsRUFBRSxlQUFlO1VBQUVDLEdBQUcsRUFBRSxRQUFRO1VBQUVDLFFBQVEsRUFBRTtRQUFPO01BQUUsZ0JBQ3RIN0gsS0FBQSxDQUFBc0gsYUFBQTtRQUFLRSxLQUFLLEVBQUU7VUFBRUMsT0FBTyxFQUFFLE1BQU07VUFBRUMsVUFBVSxFQUFFLFFBQVE7VUFBRUUsR0FBRyxFQUFFLE9BQU87VUFBRUMsUUFBUSxFQUFFO1FBQU87TUFBRSxnQkFDcEY3SCxLQUFBLENBQUFzSCxhQUFBLENBQUNqSCxNQUFNO1FBQUN5SCxFQUFFLEVBQUUzSCxJQUFLO1FBQUN1RyxFQUFFLEVBQUMsbUJBQW1CO1FBQUNxQixLQUFLO1FBQUNDLElBQUksRUFBQztNQUFPLGdCQUN6RGhJLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQzlHLElBQUk7UUFBQzFGLElBQUksRUFBQztNQUFZLENBQUUsQ0FBQyxXQUVwQixDQUFDLGVBQ1RrRixLQUFBLENBQUFzSCxhQUFBLENBQUMvRyxNQUFNO1FBQUN1SCxFQUFFLEVBQUMsSUFBSTtRQUFDTixLQUFLLEVBQUU7VUFBRVMsTUFBTSxFQUFFO1FBQUU7TUFBRSxnQkFDbkNqSSxLQUFBLENBQUFzSCxhQUFBLENBQUM5RyxJQUFJO1FBQUMxRixJQUFJLEVBQUM7TUFBVSxDQUFFLENBQUMsZUFDeEJrRixLQUFBLENBQUFzSCxhQUFBLENBQUMvRyxNQUFNLENBQUMySCxPQUFPLFFBQUMsY0FBNEIsQ0FDdEMsQ0FDTCxDQUFDLGVBQ05sSSxLQUFBLENBQUFzSCxhQUFBLENBQUNqSCxNQUFNO1FBQUMwSCxLQUFLO1FBQUNDLElBQUksRUFBQyxPQUFPO1FBQUNHLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUXBCLE1BQUksQ0FBQ3RELE9BQU8sQ0FBQyxDQUFDO1FBQUE7TUFBQyxnQkFDdkR6RCxLQUFBLENBQUFzSCxhQUFBLENBQUM5RyxJQUFJO1FBQUMxRixJQUFJLEVBQUM7TUFBUyxDQUFFLENBQUMsV0FFakIsQ0FDTCxDQUFDLEVBRUwsSUFBSSxDQUFDc0gsS0FBSyxDQUFDRSxLQUFLLGdCQUFHdEMsS0FBQSxDQUFBc0gsYUFBQSxDQUFDM0csT0FBTztRQUFDeUgsUUFBUTtRQUFDWixLQUFLLEVBQUU7VUFBRWEsU0FBUyxFQUFFO1FBQVMsQ0FBRTtRQUFDQyxPQUFPLEVBQUUsSUFBSSxDQUFDbEcsS0FBSyxDQUFDRTtNQUFNLENBQUUsQ0FBQyxHQUFHLElBQUksZUFFMUd0QyxLQUFBLENBQUFzSCxhQUFBLENBQUMzRyxPQUFPO1FBQUM0SCxJQUFJO1FBQUNQLElBQUksRUFBQyxPQUFPO1FBQUNSLEtBQUssRUFBRTtVQUFFYSxTQUFTLEVBQUU7UUFBUztNQUFFLGdCQUN4RHJJLEtBQUEsQ0FBQXNILGFBQUEsMkJBQUt0SCxLQUFBLENBQUFzSCxhQUFBLGlCQUFRLGNBQW9CLENBQUMsS0FBQyxFQUFDOUYsaUJBQWlCLENBQUN3RixXQUFXLENBQUMsRUFBQyxPQUFVLENBQUMsZUFDOUVoSCxLQUFBLENBQUFzSCxhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFYSxTQUFTLEVBQUUsT0FBTztVQUFFRyxLQUFLLEVBQUU7UUFBTztNQUFFLEdBQUMsWUFDdkMsRUFBQ2hILGlCQUFpQixDQUFDMEYsYUFBYSxDQUFDLEVBQUMsb0JBQWUsRUFBQzFGLGlCQUFpQixDQUFDMkYsZUFBZSxDQUFDLEVBQUMsZ0JBQVcsRUFBQ0MsV0FDeEcsQ0FDRSxDQUNGLENBQUMsZUFFVnBILEtBQUEsQ0FBQXNILGFBQUEsQ0FBQ3ZGLDZCQUE2QjtRQUM1QnFELFVBQVUsRUFBRSxJQUFJLENBQUNsRCxLQUFLLENBQUNrRCxVQUFXO1FBQ2xDbkMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDYixLQUFLLENBQUNhLHVCQUF3QjtRQUM1RHdGLCtCQUErQixFQUFFLFNBQWpDQSwrQkFBK0JBLENBQUdqTCxDQUFDO1VBQUEsT0FBS3VKLE1BQUksQ0FBQ3hCLFFBQVEsQ0FBQztZQUFFdEMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDekY7VUFBRSxDQUFDLENBQUM7UUFBQSxDQUFDO1FBQ3hGMEYsaUJBQWlCLEVBQUUsSUFBSSxDQUFDZCxLQUFLLENBQUNjO01BQWtCLENBQ2pELENBQUMsZUFFRmxELEtBQUEsQ0FBQXNILGFBQUEsQ0FBQzFHLE9BQU8scUJBQ05aLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQy9HLE1BQU07UUFBQ3VILEVBQUUsRUFBQztNQUFJLEdBQUMsd0JBQThCLENBQUMsZUFDL0M5SCxLQUFBLENBQUFzSCxhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFZ0IsS0FBSyxFQUFFLE1BQU07VUFBRUUsWUFBWSxFQUFFO1FBQVE7TUFBRSxnQkFDakQxSSxLQUFBLENBQUFzSCxhQUFBLGlCQUFRLG9CQUEwQixDQUFDLGdEQUNsQyxDQUFDLGVBQ0p0SCxLQUFBLENBQUFzSCxhQUFBLENBQUNoSCxJQUFJLHFCQUNITixLQUFBLENBQUFzSCxhQUFBLENBQUNoSCxJQUFJLENBQUNxSSxLQUFLO1FBQUNDLE1BQU0sRUFBQztNQUFPLGdCQUN4QjVJLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQ2hILElBQUksQ0FBQ3VJLEtBQUsscUJBQ1Q3SSxLQUFBLENBQUFzSCxhQUFBLGdCQUFPLG1CQUF3QixDQUFDLGVBQ2hDdEgsS0FBQSxDQUFBc0gsYUFBQSxDQUFDN0csS0FBSztRQUNKcUksV0FBVyxFQUFDLDZCQUE2QjtRQUN6Q2xOLEtBQUssRUFBRSxJQUFJLENBQUN3RyxLQUFLLENBQUNTLFNBQVU7UUFDNUJrRyxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRzdPLENBQUM7VUFBQSxPQUFLNk0sTUFBSSxDQUFDeEIsUUFBUSxDQUFDO1lBQUUxQyxTQUFTLEVBQUUzSSxDQUFDLENBQUM4TyxNQUFNLENBQUNwTjtVQUFNLENBQUMsQ0FBQztRQUFBO01BQUMsQ0FDL0QsQ0FDUyxDQUFDLGVBQ2JvRSxLQUFBLENBQUFzSCxhQUFBLENBQUNoSCxJQUFJLENBQUN1SSxLQUFLO1FBQUNJLEtBQUssRUFBRTtNQUFFLGdCQUNuQmpKLEtBQUEsQ0FBQXNILGFBQUEsZ0JBQU8sZUFBb0IsQ0FBQyxlQUM1QnRILEtBQUEsQ0FBQXNILGFBQUEsQ0FBQzdHLEtBQUs7UUFDSnlJLElBQUksRUFBQyxRQUFRO1FBQ2JDLEdBQUcsRUFBQyxHQUFHO1FBQ1BDLElBQUksRUFBQyxHQUFHO1FBQ1JOLFdBQVcsRUFBQyxNQUFNO1FBQ2xCbE4sS0FBSyxFQUFFLElBQUksQ0FBQ3dHLEtBQUssQ0FBQ1UsaUJBQWtCO1FBQ3BDaUcsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUc3TyxDQUFDO1VBQUEsT0FBSzZNLE1BQUksQ0FBQ3hCLFFBQVEsQ0FBQztZQUFFekMsaUJBQWlCLEVBQUU1SSxDQUFDLENBQUM4TyxNQUFNLENBQUNwTjtVQUFNLENBQUMsQ0FBQztRQUFBO01BQUMsQ0FDdkUsQ0FDUyxDQUFDLGVBQ2JvRSxLQUFBLENBQUFzSCxhQUFBLENBQUNoSCxJQUFJLENBQUN1SSxLQUFLLHFCQUNUN0ksS0FBQSxDQUFBc0gsYUFBQSxnQkFBTyxpQkFBc0IsQ0FBQyxlQUM5QnRILEtBQUEsQ0FBQXNILGFBQUEsQ0FBQzdHLEtBQUs7UUFDSnFJLFdBQVcsRUFBQyxrQ0FBa0M7UUFDOUNsTixLQUFLLEVBQUUsSUFBSSxDQUFDd0csS0FBSyxDQUFDVyxXQUFZO1FBQzlCZ0csUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUc3TyxDQUFDO1VBQUEsT0FBSzZNLE1BQUksQ0FBQ3hCLFFBQVEsQ0FBQztZQUFFeEMsV0FBVyxFQUFFN0ksQ0FBQyxDQUFDOE8sTUFBTSxDQUFDcE47VUFBTSxDQUFDLENBQUM7UUFBQTtNQUFDLENBQ2pFLENBQ1MsQ0FDRixDQUFDLGVBQ2JvRSxLQUFBLENBQUFzSCxhQUFBLENBQUNqSCxNQUFNO1FBQUNnSixPQUFPO1FBQUNsQixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVFwQixNQUFJLENBQUNGLGlCQUFpQixDQUFDLENBQUM7UUFBQTtNQUFDLGdCQUN0RDdHLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQzlHLElBQUk7UUFBQzFGLElBQUksRUFBQztNQUFNLENBQUUsQ0FBQyxRQUVkLENBQ0osQ0FBQyxFQUNOLElBQUksQ0FBQ3NILEtBQUssQ0FBQ1ksYUFBYSxnQkFDdkJoRCxLQUFBLENBQUFzSCxhQUFBLENBQUMzRyxPQUFPO1FBQ042RyxLQUFLLEVBQUU7VUFBRWEsU0FBUyxFQUFFO1FBQU0sQ0FBRTtRQUM1QkQsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUNoRyxLQUFLLENBQUNZLGFBQWEsQ0FBQ1YsS0FBTTtRQUMzQ2dILFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQ2xILEtBQUssQ0FBQ1ksYUFBYSxDQUFDVjtNQUFNLGdCQUUxQ3RDLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQzNHLE9BQU8sQ0FBQ0osTUFBTSxRQUFFLElBQUksQ0FBQzZCLEtBQUssQ0FBQ1ksYUFBYSxDQUFDVixLQUFLLEdBQUcsZ0JBQWdCLEdBQUcsa0JBQW1DLENBQUMsRUFDeEcsQ0FBQyxJQUFJLENBQUNGLEtBQUssQ0FBQ1ksYUFBYSxDQUFDVixLQUFLLEdBQUksWUFBTTtRQUN4QyxJQUFNaUgsRUFBRSxHQUFHeEMsTUFBSSxDQUFDM0UsS0FBSyxDQUFDWSxhQUFhO1FBQ25DLElBQU13RyxJQUFJLEdBQUlELEVBQUUsSUFBSUEsRUFBRSxDQUFDRSxPQUFPLElBQUlGLEVBQUUsQ0FBQ0UsT0FBTyxDQUFDRCxJQUFJLElBQU1ELEVBQUUsSUFBSUEsRUFBRSxDQUFDQyxJQUFLO1FBQ3JFLE9BQU9BLElBQUksZ0JBQ1R4SixLQUFBLENBQUFzSCxhQUFBO1VBQUdFLEtBQUssRUFBRTtZQUFFYSxTQUFTLEVBQUU7VUFBUTtRQUFFLGdCQUMvQnJJLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQ25ILElBQUk7VUFBQ3VHLEVBQUUsb0NBQUFnRCxNQUFBLENBQW9DQyxrQkFBa0IsQ0FBQ3pLLE1BQU0sQ0FBQ3NLLElBQUksQ0FBQyxDQUFDO1FBQUcsR0FBQywwQkFBOEIsQ0FDN0csQ0FBQyxHQUNGLElBQUk7TUFDVixDQUFDLENBQUUsQ0FBQyxHQUFHLElBQUksZUFDWHhKLEtBQUEsQ0FBQXNILGFBQUE7UUFBS0UsS0FBSyxFQUFFO1VBQUVvQyxVQUFVLEVBQUUsVUFBVTtVQUFFQyxTQUFTLEVBQUU7UUFBYTtNQUFFLEdBQUVDLElBQUksQ0FBQ0MsU0FBUyxDQUFDLElBQUksQ0FBQzNILEtBQUssQ0FBQ1ksYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQU8sQ0FDbEgsQ0FBQyxHQUNSLElBQ0csQ0FBQyxlQUVWaEQsS0FBQSxDQUFBc0gsYUFBQSxDQUFDMUcsT0FBTyxxQkFDTlosS0FBQSxDQUFBc0gsYUFBQSxDQUFDL0csTUFBTTtRQUFDdUgsRUFBRSxFQUFDLElBQUk7UUFBQ3pELEVBQUUsRUFBQztNQUF5QixHQUFDLG9CQUEwQixDQUFDLGVBQ3hFckUsS0FBQSxDQUFBc0gsYUFBQTtRQUFHRSxLQUFLLEVBQUU7VUFBRWdCLEtBQUssRUFBRSxNQUFNO1VBQUVFLFlBQVksRUFBRTtRQUFRO01BQUUsR0FBQyxnRUFFakQsQ0FBQyxFQUNILElBQUksQ0FBQ3RHLEtBQUssQ0FBQ00sWUFBWSxDQUFDeEgsTUFBTSxLQUFLLENBQUMsZ0JBQ25DOEUsS0FBQSxDQUFBc0gsYUFBQTtRQUFHRSxLQUFLLEVBQUU7VUFBRWdCLEtBQUssRUFBRTtRQUFPO01BQUUsR0FBQyx3Q0FBeUMsQ0FBQyxnQkFFdkV4SSxLQUFBLENBQUFzSCxhQUFBLENBQUN6RyxLQUFLO1FBQUNtSixPQUFPLEVBQUMsTUFBTTtRQUFDQyxNQUFNO01BQUEsZ0JBQzFCakssS0FBQSxDQUFBc0gsYUFBQSxDQUFDekcsS0FBSyxDQUFDTixNQUFNLHFCQUNYUCxLQUFBLENBQUFzSCxhQUFBLENBQUN6RyxLQUFLLENBQUNxSixHQUFHLHFCQUNSbEssS0FBQSxDQUFBc0gsYUFBQSxDQUFDekcsS0FBSyxDQUFDc0osVUFBVSxRQUFDLE1BQXNCLENBQUMsZUFDekNuSyxLQUFBLENBQUFzSCxhQUFBLENBQUN6RyxLQUFLLENBQUNzSixVQUFVLFFBQUMsVUFBMEIsQ0FBQyxlQUM3Q25LLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQ3pHLEtBQUssQ0FBQ3NKLFVBQVUsUUFBQyxRQUF3QixDQUFDLGVBQzNDbkssS0FBQSxDQUFBc0gsYUFBQSxDQUFDekcsS0FBSyxDQUFDc0osVUFBVSxRQUFDLGVBQStCLENBQUMsZUFDbERuSyxLQUFBLENBQUFzSCxhQUFBLENBQUN6RyxLQUFLLENBQUNzSixVQUFVLFFBQUMsTUFBc0IsQ0FDL0IsQ0FDQyxDQUFDLGVBQ2ZuSyxLQUFBLENBQUFzSCxhQUFBLENBQUN6RyxLQUFLLENBQUN1SixJQUFJLFFBQ1IsSUFBSSxDQUFDaEksS0FBSyxDQUFDTSxZQUFZLENBQUMySCxHQUFHLENBQUMsVUFBQ0MsRUFBRSxFQUFFQyxHQUFHLEVBQUs7UUFDeEMsSUFBTUMsR0FBRyxHQUFHRixFQUFFLENBQUNHLFNBQVMsSUFBSSxJQUFJLEdBQUdILEVBQUUsQ0FBQ0csU0FBUyxHQUFHSCxFQUFFLENBQUMxTyxLQUFLO1FBQzFELElBQU04TyxNQUFNLEdBQUd2TCxNQUFNLENBQUNxTCxHQUFHLENBQUM7UUFDMUIsSUFBTUcsVUFBVSxHQUFHeEwsTUFBTSxDQUFDc0gsUUFBUSxDQUFDaUUsTUFBTSxDQUFDLEdBQUdBLE1BQU0sR0FBRyxDQUFDLEdBQUcsS0FBSztRQUMvRCxJQUFNRSxVQUFVLEdBQUd6TCxNQUFNLENBQUNzSCxRQUFRLENBQUNpRSxNQUFNLENBQUMsR0FBR0EsTUFBTSxHQUFHLENBQUMsR0FBRyxLQUFLO1FBQy9ELElBQU1HLElBQUksR0FBR1AsRUFBRSxDQUFDUSxTQUFTLElBQUksSUFBSSxHQUFHUixFQUFFLENBQUNRLFNBQVMsR0FBR1IsRUFBRSxDQUFDTyxJQUFJO1FBQzFELElBQU1FLE9BQU8sR0FBR0YsSUFBSSxHQUFHLElBQUloRixJQUFJLENBQUNnRixJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUNHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsR0FBRztRQUNuRSxvQkFDRWhMLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQ3pHLEtBQUssQ0FBQ3FKLEdBQUc7VUFBQ3BMLEdBQUcsS0FBQTRLLE1BQUEsQ0FBS1ksRUFBRSxDQUFDZCxJQUFJLElBQUksSUFBSSxPQUFBRSxNQUFBLENBQUlhLEdBQUc7UUFBRyxnQkFDMUN2SyxLQUFBLENBQUFzSCxhQUFBLENBQUN6RyxLQUFLLENBQUNvSyxJQUFJLFFBQ1JYLEVBQUUsQ0FBQ2QsSUFBSSxnQkFDTnhKLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQ25ILElBQUk7VUFBQ3VHLEVBQUUsb0NBQUFnRCxNQUFBLENBQW9DQyxrQkFBa0IsQ0FBQ1csRUFBRSxDQUFDZCxJQUFJLENBQUM7UUFBRyxnQkFDeEV4SixLQUFBLENBQUFzSCxhQUFBO1VBQU1FLEtBQUssRUFBRTtZQUFFMEQsUUFBUSxFQUFFO1VBQVMsQ0FBRTtVQUFDQyxLQUFLLEVBQUViLEVBQUUsQ0FBQ2Q7UUFBSyxNQUFBRSxNQUFBLENBQzlDWSxFQUFFLENBQUNkLElBQUksQ0FBQzNPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQUE2TyxNQUFBLENBQU1ZLEVBQUUsQ0FBQ2QsSUFBSSxDQUFDM08sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzFDLENBQ0YsQ0FBQyxnQkFDTG1GLEtBQUEsQ0FBQXNILGFBQUEsZUFBTSxHQUFPLENBQ1AsQ0FBQyxlQUNidEgsS0FBQSxDQUFBc0gsYUFBQSxDQUFDekcsS0FBSyxDQUFDb0ssSUFBSSxRQUNSWCxFQUFFLENBQUNjLGNBQWMsSUFBSWQsRUFBRSxDQUFDYyxjQUFjLENBQUNDLEtBQUssZ0JBQzNDckwsS0FBQSxDQUFBc0gsYUFBQSxDQUFDNUcsS0FBSztVQUFDc0gsSUFBSSxFQUFDLE9BQU87VUFBQ1EsS0FBSyxFQUFDLE1BQU07VUFBQzJDLEtBQUssRUFBRXJCLElBQUksQ0FBQ0MsU0FBUyxDQUFDTyxFQUFFLENBQUNjLGNBQWMsQ0FBQ0UsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUFFLEdBQ2xGaEIsRUFBRSxDQUFDYyxjQUFjLENBQUNDLEtBQ2QsQ0FBQyxnQkFDTnJMLEtBQUEsQ0FBQXNILGFBQUE7VUFBTUUsS0FBSyxFQUFFO1lBQUVnQixLQUFLLEVBQUU7VUFBTztRQUFFLEdBQUMsR0FBTyxDQUNqQyxDQUFDLGVBQ2J4SSxLQUFBLENBQUFzSCxhQUFBLENBQUN6RyxLQUFLLENBQUNvSyxJQUFJLFFBQ1JULEdBQUcsSUFBSSxJQUFJLE1BQUFkLE1BQUEsQ0FBTXZLLE1BQU0sQ0FBQ3FMLEdBQUcsQ0FBQyxDQUFDZSxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVMsR0FBRyxFQUNuRFosVUFBVSxnQkFBRzNLLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQzVHLEtBQUs7VUFBQ3NILElBQUksRUFBQyxNQUFNO1VBQUNRLEtBQUssRUFBQyxRQUFRO1VBQUNoQixLQUFLLEVBQUU7WUFBRWdFLFVBQVUsRUFBRTtVQUFTO1FBQUUsR0FBQyxNQUFXLENBQUMsR0FBRyxJQUFJLEVBQ25HWixVQUFVLGdCQUFHNUssS0FBQSxDQUFBc0gsYUFBQSxDQUFDNUcsS0FBSztVQUFDc0gsSUFBSSxFQUFDLE1BQU07VUFBQ1EsS0FBSyxFQUFDLE9BQU87VUFBQ2hCLEtBQUssRUFBRTtZQUFFZ0UsVUFBVSxFQUFFO1VBQVM7UUFBRSxHQUFDLFVBQWUsQ0FBQyxHQUFHLElBQ3pGLENBQUMsZUFDYnhMLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQ3pHLEtBQUssQ0FBQ29LLElBQUksUUFDUlgsRUFBRSxDQUFDbUIsYUFBYSxJQUFJLElBQUksZ0JBQ3ZCekwsS0FBQSxDQUFBc0gsYUFBQSxDQUFBdEgsS0FBQSxDQUFBMEwsUUFBQSxRQUNHcEIsRUFBRSxDQUFDbUIsYUFBYSxFQUNoQnRNLE1BQU0sQ0FBQ21MLEVBQUUsQ0FBQ21CLGFBQWEsQ0FBQyxLQUFLLENBQUMsZ0JBQzdCekwsS0FBQSxDQUFBc0gsYUFBQSxDQUFDNUcsS0FBSztVQUFDc0gsSUFBSSxFQUFDLE1BQU07VUFBQ1EsS0FBSyxFQUFDLFFBQVE7VUFBQ2hCLEtBQUssRUFBRTtZQUFFZ0UsVUFBVSxFQUFFO1VBQVM7UUFBRSxHQUFDLFNBQWMsQ0FBQyxHQUNoRixJQUNKLENBQUMsR0FDRCxHQUNNLENBQUMsZUFDYnhMLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQ3pHLEtBQUssQ0FBQ29LLElBQUksUUFBRUYsT0FBb0IsQ0FDeEIsQ0FBQztNQUVoQixDQUFDLENBQ1MsQ0FDUCxDQUVGLENBQUMsZUFFVi9LLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQzFHLE9BQU8scUJBQ05aLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQy9HLE1BQU07UUFBQ3VILEVBQUUsRUFBQyxJQUFJO1FBQUN6RCxFQUFFLEVBQUM7TUFBdUIsR0FBQyw2QkFBbUMsQ0FBQyxlQUMvRXJFLEtBQUEsQ0FBQXNILGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVnQixLQUFLLEVBQUUsTUFBTTtVQUFFRSxZQUFZLEVBQUU7UUFBUTtNQUFFLEdBQUMsNEZBRWpELENBQUMsRUFDSCxJQUFJLENBQUN0RyxLQUFLLENBQUNPLFdBQVcsQ0FBQ3pILE1BQU0sS0FBSyxDQUFDLGdCQUNsQzhFLEtBQUEsQ0FBQXNILGFBQUE7UUFBR0UsS0FBSyxFQUFFO1VBQUVnQixLQUFLLEVBQUU7UUFBTztNQUFFLEdBQUMseUNBQTBDLENBQUMsZ0JBRXhFeEksS0FBQSxDQUFBc0gsYUFBQSxDQUFDekcsS0FBSztRQUFDbUosT0FBTyxFQUFDLE1BQU07UUFBQ0MsTUFBTTtNQUFBLGdCQUMxQmpLLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQ3pHLEtBQUssQ0FBQ04sTUFBTSxxQkFDWFAsS0FBQSxDQUFBc0gsYUFBQSxDQUFDekcsS0FBSyxDQUFDcUosR0FBRyxxQkFDUmxLLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQ3pHLEtBQUssQ0FBQ3NKLFVBQVUsUUFBQyxNQUFzQixDQUFDLGVBQ3pDbkssS0FBQSxDQUFBc0gsYUFBQSxDQUFDekcsS0FBSyxDQUFDc0osVUFBVSxRQUFDLEtBQXFCLENBQUMsZUFDeENuSyxLQUFBLENBQUFzSCxhQUFBLENBQUN6RyxLQUFLLENBQUNzSixVQUFVLFFBQUMsT0FBdUIsQ0FDaEMsQ0FDQyxDQUFDLGVBQ2ZuSyxLQUFBLENBQUFzSCxhQUFBLENBQUN6RyxLQUFLLENBQUN1SixJQUFJLFFBQ1IsSUFBSSxDQUFDaEksS0FBSyxDQUFDTyxXQUFXLENBQUMwSCxHQUFHLENBQUMsVUFBQ2hOLENBQUMsRUFBRWtOLEdBQUc7UUFBQSxvQkFDakN2SyxLQUFBLENBQUFzSCxhQUFBLENBQUN6RyxLQUFLLENBQUNxSixHQUFHO1VBQUNwTCxHQUFHLEtBQUE0SyxNQUFBLENBQUtyTSxDQUFDLENBQUNtTSxJQUFJLElBQUksSUFBSSxPQUFBRSxNQUFBLENBQUlhLEdBQUc7UUFBRyxnQkFDekN2SyxLQUFBLENBQUFzSCxhQUFBLENBQUN6RyxLQUFLLENBQUNvSyxJQUFJLFFBQ1I1TixDQUFDLENBQUNtTSxJQUFJLGdCQUNMeEosS0FBQSxDQUFBc0gsYUFBQSxDQUFDbkgsSUFBSTtVQUFDdUcsRUFBRSxvQ0FBQWdELE1BQUEsQ0FBb0NDLGtCQUFrQixDQUFDdE0sQ0FBQyxDQUFDbU0sSUFBSSxDQUFDO1FBQUcsZ0JBQ3ZFeEosS0FBQSxDQUFBc0gsYUFBQTtVQUFNRSxLQUFLLEVBQUU7WUFBRTBELFFBQVEsRUFBRTtVQUFTLENBQUU7VUFBQ0MsS0FBSyxFQUFFOU4sQ0FBQyxDQUFDbU07UUFBSyxNQUFBRSxNQUFBLENBQzdDck0sQ0FBQyxDQUFDbU0sSUFBSSxDQUFDM08sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBQTZPLE1BQUEsQ0FBTXJNLENBQUMsQ0FBQ21NLElBQUksQ0FBQzNPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN4QyxDQUNGLENBQUMsZ0JBQ0xtRixLQUFBLENBQUFzSCxhQUFBLGVBQU0sR0FBTyxDQUNQLENBQUMsZUFDYnRILEtBQUEsQ0FBQXNILGFBQUEsQ0FBQ3pHLEtBQUssQ0FBQ29LLElBQUksUUFBRTVOLENBQUMsQ0FBQ3NPLEdBQUcsSUFBSSxJQUFJLEdBQUd0TyxDQUFDLENBQUNzTyxHQUFHLEdBQUcsR0FBZ0IsQ0FBQyxlQUN0RDNMLEtBQUEsQ0FBQXNILGFBQUEsQ0FBQ3pHLEtBQUssQ0FBQ29LLElBQUksUUFBRTVOLENBQUMsQ0FBQ3pCLEtBQUssSUFBSSxJQUFJLE1BQUE4TixNQUFBLENBQU1yTSxDQUFDLENBQUN6QixLQUFLLFlBQVMsR0FBZ0IsQ0FDekQsQ0FBQztNQUFBLENBQ2IsQ0FDUyxDQUNQLENBRUYsQ0FDTixDQUFDO0lBRVY7RUFBQztBQUFBLEVBdFZtQ29FLEtBQUssQ0FBQzRMLFNBQVM7QUF5VnJEQyxNQUFNLENBQUNDLE9BQU8sR0FBRzlKLHVCQUF1QiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29tcG9uZW50cy9CaXRjb2luVHJhbnNhY3Rpb25zSG9tZS5qcz8xMWI4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5jb25zdCB7IEJ1dHRvbiwgRm9ybSwgSGVhZGVyLCBJY29uLCBJbnB1dCwgTGFiZWwsIE1lc3NhZ2UsIFNlZ21lbnQsIFRhYmxlIH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3Qge1xuICBmZXRjaFBheW1lbnRzLFxuICBzZW5kUGF5bWVudCxcbiAgZmV0Y2hXYWxsZXRTdW1tYXJ5LFxuICBmZXRjaFdhbGxldFRyYW5zYWN0aW9ucyxcbiAgZ2V0U3BlbmRXYWxsZXRDb250ZXh0LFxuICBsb2FkVXBzdHJlYW1TZXR0aW5nc1xufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9iaXRjb2luQ2xpZW50Jyk7XG5jb25zdCB0eENvbnRyYWN0TGFiZWxzID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3R4Q29udHJhY3RMYWJlbHMnKTtcbmNvbnN0IGludm9pY2VTdG9yZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9pbnZvaWNlU3RvcmUnKTtcbmNvbnN0IHsgZm9ybWF0U2F0c0Rpc3BsYXkgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mb3JtYXRTYXRzJyk7XG5jb25zdCB7IHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJBZG1pblRva2VuQnJvd3NlcicpO1xuY29uc3Qge1xuICBsb2FkRmVkZXJhdGlvblNwZW5kaW5nUHJlZnMsXG4gIG1lcmdlUGF5bWVudE1lbW9XaXRoRmVkZXJhdGlvbixcbiAgc3Vic2NyaWJlRmVkZXJhdGlvblNwZW5kaW5nUHJlZnNcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmVkZXJhdGlvblNwZW5kaW5nUHJlZnMnKTtcbmNvbnN0IEZlZGVyYXRpb25XYWxsZXRNdWx0aXNpZ1BhbmVsID0gcmVxdWlyZSgnLi9GZWRlcmF0aW9uV2FsbGV0TXVsdGlzaWdQYW5lbCcpO1xuXG5jbGFzcyBCaXRjb2luVHJhbnNhY3Rpb25zSG9tZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgdXBzdHJlYW06IGxvYWRVcHN0cmVhbVNldHRpbmdzKCksXG4gICAgICB3YWxsZXQ6IHt9LFxuICAgICAgc3VtbWFyeToge30sXG4gICAgICB0cmFuc2FjdGlvbnM6IFtdLFxuICAgICAgcmF3UGF5bWVudHM6IFtdLFxuICAgICAgbGFzdFVwZGF0ZWRBdDogMCxcbiAgICAgIHBheW1lbnRUbzogJycsXG4gICAgICBwYXltZW50QW1vdW50U2F0czogJycsXG4gICAgICBwYXltZW50TWVtbzogJycsXG4gICAgICBwYXltZW50UmVzdWx0OiBudWxsLFxuICAgICAgcmVjb3JkRmVkZXJhdGlvbkNvbnRleHQ6IGZhbHNlLFxuICAgICAgc3BlbmRpbmdQcmVmc1RpY2s6IDBcbiAgICB9O1xuICAgIHRoaXMuX3JlZnJlc2hUaW1lciA9IG51bGw7XG4gICAgdGhpcy5fZmVkUHJlZnNVbnN1YiA9IG51bGw7XG4gIH1cblxuICBhc3luYyBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgdGhpcy5fcmVmcmVzaFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoKCkuY2F0Y2goKCkgPT4ge30pO1xuICAgIH0sIDEwMDAwKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICBpZiAodGhpcy5fcmVmcmVzaFRpbWVyKSBjbGVhckludGVydmFsKHRoaXMuX3JlZnJlc2hUaW1lcik7XG4gICAgdGhpcy5fcmVmcmVzaFRpbWVyID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGNvbXBvbmVudERpZFVwZGF0ZSAocHJldlByb3BzKSB7XG4gICAgY29uc3QgcHJldklkID0gU3RyaW5nKCgocHJldlByb3BzICYmIHByZXZQcm9wcy5pZGVudGl0eSkgfHwge30pLmlkIHx8ICcnKTtcbiAgICBjb25zdCBuZXh0SWQgPSBTdHJpbmcoKCh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuaWRlbnRpdHkpIHx8IHt9KS5pZCB8fCAnJyk7XG4gICAgaWYgKHByZXZJZCAhPT0gbmV4dElkKSBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2ggKCkge1xuICAgIGNvbnN0IGlkZW50aXR5ID0gKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5pZGVudGl0eSkgfHwge307XG4gICAgY29uc3Qgd2FsbGV0ID0gZ2V0U3BlbmRXYWxsZXRDb250ZXh0KGlkZW50aXR5KTtcbiAgICBjb25zdCB1cHN0cmVhbSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUudXBzdHJlYW0sXG4gICAgICBodWJBZG1pblRva2VuOiByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5hZG1pblRva2VuKSB8fCAnJ1xuICAgIH07XG4gICAgY29uc3QgbmV0d29yayA9ICh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuYml0Y29pbiAmJiB0aGlzLnByb3BzLmJpdGNvaW4ubmV0d29yaylcbiAgICAgID8gU3RyaW5nKHRoaXMucHJvcHMuYml0Y29pbi5uZXR3b3JrKS50b0xvd2VyQ2FzZSgpXG4gICAgICA6ICdyZWd0ZXN0JztcbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSwgZXJyb3I6IG51bGwsIHdhbGxldCB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBbc3VtbWFyeSwgdHJhbnNhY3Rpb25zLCBwYXltZW50c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGZldGNoV2FsbGV0U3VtbWFyeSh1cHN0cmVhbSwgd2FsbGV0LCB7IG5ldHdvcmsgfSkuY2F0Y2goKCkgPT4gKHt9KSksXG4gICAgICAgIGZldGNoV2FsbGV0VHJhbnNhY3Rpb25zKHVwc3RyZWFtLCB3YWxsZXQsIHsgbGltaXQ6IDEwMCwgbmV0d29yayB9KS5jYXRjaCgoKSA9PiBbXSksXG4gICAgICAgIGZldGNoUGF5bWVudHModXBzdHJlYW0sIHdhbGxldCwgeyBsaW1pdDogMTAwLCBuZXR3b3JrIH0pLmNhdGNoKCgpID0+IFtdKVxuICAgICAgXSk7XG4gICAgICBjb25zdCBpbnZMYWJlbHMgPSB0eENvbnRyYWN0TGFiZWxzLmJ1aWxkSW52b2ljZVR4TGFiZWxzKGludm9pY2VTdG9yZS5sb2FkSW52b2ljZXMoKSk7XG4gICAgICBjb25zdCB0eFJvd3MgPSBBcnJheS5pc0FycmF5KHRyYW5zYWN0aW9ucylcbiAgICAgICAgPyB0eENvbnRyYWN0TGFiZWxzLm1lcmdlU2VydmVyQW5kTG9jYWxMYWJlbHModHJhbnNhY3Rpb25zLCBpbnZMYWJlbHMpXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBwYXltZW50Um93cyA9IEFycmF5LmlzQXJyYXkocGF5bWVudHMpID8gcGF5bWVudHMgOiBbXTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgc3VtbWFyeTogc3VtbWFyeSAmJiB0eXBlb2Ygc3VtbWFyeSA9PT0gJ29iamVjdCcgPyBzdW1tYXJ5IDoge30sXG4gICAgICAgIHRyYW5zYWN0aW9uczogdHhSb3dzLFxuICAgICAgICByYXdQYXltZW50czogcGF5bWVudFJvd3MsXG4gICAgICAgIGxhc3RVcGRhdGVkQXQ6IERhdGUubm93KClcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9odWJBZG1pblRva2VuICgpIHtcbiAgICByZXR1cm4gcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3Nlcih0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuYWRtaW5Ub2tlbik7XG4gIH1cblxuICBhc3luYyBoYW5kbGVTZW5kUGF5bWVudCAoKSB7XG4gICAgY29uc3QgcGF5bWVudFRvID0gU3RyaW5nKHRoaXMuc3RhdGUucGF5bWVudFRvIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgcGF5bWVudEFtb3VudFNhdHMgPSBOdW1iZXIodGhpcy5zdGF0ZS5wYXltZW50QW1vdW50U2F0cyB8fCAwKTtcbiAgICBpZiAoIXBheW1lbnRUbykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHBheW1lbnRSZXN1bHQ6IHsgZXJyb3I6ICdSZWNpcGllbnQgaXMgcmVxdWlyZWQuJyB9IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYXltZW50QW1vdW50U2F0cykgfHwgcGF5bWVudEFtb3VudFNhdHMgPD0gMCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHBheW1lbnRSZXN1bHQ6IHsgZXJyb3I6ICdBbW91bnQgKHNhdHMpIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyB9IH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFkbWluVG9rZW4gPSB0aGlzLl9odWJBZG1pblRva2VuKCk7XG4gICAgaWYgKCFhZG1pblRva2VuKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcGF5bWVudFJlc3VsdDoge1xuICAgICAgICAgIGVycm9yOiAnQWRtaW4gdG9rZW4gcmVxdWlyZWQuIEh1YiB3YWxsZXQgc3BlbmRzIHVzZSB0aGUgc2V0dXAgdG9rZW4gKHNhbWUgYXMgR2VuZXJhdGUgQmxvY2sgLyBicm9hZGNhc3QpLidcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByZWZzID0gbG9hZEZlZGVyYXRpb25TcGVuZGluZ1ByZWZzKCk7XG4gICAgICBjb25zdCBtZW1vID0gbWVyZ2VQYXltZW50TWVtb1dpdGhGZWRlcmF0aW9uKFxuICAgICAgICB0aGlzLnN0YXRlLnBheW1lbnRNZW1vLFxuICAgICAgICBwcmVmcyxcbiAgICAgICAgISF0aGlzLnN0YXRlLnJlY29yZEZlZGVyYXRpb25Db250ZXh0XG4gICAgICApO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2VuZFBheW1lbnQodGhpcy5zdGF0ZS51cHN0cmVhbSwgdGhpcy5zdGF0ZS53YWxsZXQsIHtcbiAgICAgICAgdG86IHBheW1lbnRUbyxcbiAgICAgICAgYW1vdW50U2F0czogcGF5bWVudEFtb3VudFNhdHMsXG4gICAgICAgIG1lbW8sXG4gICAgICAgIGFkbWluVG9rZW5cbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHBheW1lbnRSZXN1bHQ6IHJlc3VsdCB8fCB7IHN0YXR1czogJ3N1Ym1pdHRlZCcgfSxcbiAgICAgICAgcGF5bWVudEFtb3VudFNhdHM6ICcnLFxuICAgICAgICBwYXltZW50TWVtbzogJydcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBwYXltZW50UmVzdWx0OiB7IGVycm9yOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfSB9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnN0YXRlLnN1bW1hcnkgfHwge307XG4gICAgY29uc3QgYmFsYW5jZVNhdHMgPSBOdW1iZXIoc3VtbWFyeS5iYWxhbmNlU2F0cyAhPSBudWxsID8gc3VtbWFyeS5iYWxhbmNlU2F0cyA6IChzdW1tYXJ5LmJhbGFuY2UgfHwgMCkpO1xuICAgIGNvbnN0IGNvbmZpcm1lZFNhdHMgPSBOdW1iZXIoc3VtbWFyeS5jb25maXJtZWRTYXRzICE9IG51bGwgPyBzdW1tYXJ5LmNvbmZpcm1lZFNhdHMgOiBiYWxhbmNlU2F0cyk7XG4gICAgY29uc3QgdW5jb25maXJtZWRTYXRzID0gTnVtYmVyKHN1bW1hcnkudW5jb25maXJtZWRTYXRzIHx8IDApO1xuICAgIGNvbnN0IGxhc3RVcGRhdGVkID0gdGhpcy5zdGF0ZS5sYXN0VXBkYXRlZEF0XG4gICAgICA/IG5ldyBEYXRlKHRoaXMuc3RhdGUubGFzdFVwZGF0ZWRBdCkudG9Mb2NhbGVUaW1lU3RyaW5nKClcbiAgICAgIDogJy0nO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmFkZS1pblwiPlxuICAgICAgICA8U2VnbWVudCBsb2FkaW5nPXt0aGlzLnN0YXRlLmxvYWRpbmd9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJywgZ2FwOiAnMC43NWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC41ZW0nLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiAvPlxuICAgICAgICAgICAgICAgIEJpdGNvaW5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoMlwiIHN0eWxlPXt7IG1hcmdpbjogMCB9fT5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZXhjaGFuZ2VcIiAvPlxuICAgICAgICAgICAgICAgIDxIZWFkZXIuQ29udGVudD5UcmFuc2FjdGlvbnM8L0hlYWRlci5Db250ZW50PlxuICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPEJ1dHRvbiBiYXNpYyBzaXplPVwic21hbGxcIiBvbkNsaWNrPXsoKSA9PiB0aGlzLnJlZnJlc2goKX0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgUmVmcmVzaFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5lcnJvciA/IDxNZXNzYWdlIG5lZ2F0aXZlIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX0gY29udGVudD17dGhpcy5zdGF0ZS5lcnJvcn0gLz4gOiBudWxsfVxuXG4gICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjg1ZW0nIH19PlxuICAgICAgICAgICAgPGRpdj48c3Ryb25nPlVzZXIgd2FsbGV0Ojwvc3Ryb25nPiB7Zm9ybWF0U2F0c0Rpc3BsYXkoYmFsYW5jZVNhdHMpfSBzYXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMmVtJywgY29sb3I6ICcjNTU1JyB9fT5cbiAgICAgICAgICAgICAgY29uZmlybWVkIHtmb3JtYXRTYXRzRGlzcGxheShjb25maXJtZWRTYXRzKX0gwrcgdW5jb25maXJtZWQge2Zvcm1hdFNhdHNEaXNwbGF5KHVuY29uZmlybWVkU2F0cyl9IMK3IHVwZGF0ZWQge2xhc3RVcGRhdGVkfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgPEZlZGVyYXRpb25XYWxsZXRNdWx0aXNpZ1BhbmVsXG4gICAgICAgICAgYWRtaW5Ub2tlbj17dGhpcy5wcm9wcy5hZG1pblRva2VufVxuICAgICAgICAgIHJlY29yZEZlZGVyYXRpb25Db250ZXh0PXt0aGlzLnN0YXRlLnJlY29yZEZlZGVyYXRpb25Db250ZXh0fVxuICAgICAgICAgIG9uUmVjb3JkRmVkZXJhdGlvbkNvbnRleHRDaGFuZ2U9eyh2KSA9PiB0aGlzLnNldFN0YXRlKHsgcmVjb3JkRmVkZXJhdGlvbkNvbnRleHQ6ICEhdiB9KX1cbiAgICAgICAgICBzcGVuZGluZ1ByZWZzVGljaz17dGhpcy5zdGF0ZS5zcGVuZGluZ1ByZWZzVGlja31cbiAgICAgICAgLz5cblxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIj5TZW5kIFBheW1lbnQgKExheWVyIDEpPC9IZWFkZXI+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgPHN0cm9uZz5CcmlkZ2UgKEh1YiBub2RlKTo8L3N0cm9uZz4gcGF5bWVudCBpcyBleGVjdXRlZCBieSB0aGUgSHViIG5vZGUgd2FsbGV0LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8Rm9ybT5cbiAgICAgICAgICAgIDxGb3JtLkdyb3VwIHdpZHRocz1cImVxdWFsXCI+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5SZWNpcGllbnQgYWRkcmVzczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImJjcnQxLi4uIG9yIG0vNDQnLzAnLzAnLzAvMFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5wYXltZW50VG99XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBwYXltZW50VG86IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPEZvcm0uRmllbGQgd2lkdGg9ezR9PlxuICAgICAgICAgICAgICAgIDxsYWJlbD5BbW91bnQgKHNhdHMpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjEwMDBcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucGF5bWVudEFtb3VudFNhdHN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBwYXltZW50QW1vdW50U2F0czogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8bGFiZWw+TWVtbyAob3B0aW9uYWwpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTm90ZSBmb3IgeW91ciByZWNvcmRzIChvcHRpb25hbClcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucGF5bWVudE1lbW99XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBwYXltZW50TWVtbzogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgPC9Gb3JtLkdyb3VwPlxuICAgICAgICAgICAgPEJ1dHRvbiBwcmltYXJ5IG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlU2VuZFBheW1lbnQoKX0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzZW5kXCIgLz5cbiAgICAgICAgICAgICAgU2VuZFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgIHt0aGlzLnN0YXRlLnBheW1lbnRSZXN1bHQgPyAoXG4gICAgICAgICAgICA8TWVzc2FnZVxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19XG4gICAgICAgICAgICAgIG5lZ2F0aXZlPXshIXRoaXMuc3RhdGUucGF5bWVudFJlc3VsdC5lcnJvcn1cbiAgICAgICAgICAgICAgcG9zaXRpdmU9eyF0aGlzLnN0YXRlLnBheW1lbnRSZXN1bHQuZXJyb3J9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj57dGhpcy5zdGF0ZS5wYXltZW50UmVzdWx0LmVycm9yID8gJ1BheW1lbnQgZmFpbGVkJyA6ICdQYXltZW50IHJlc3BvbnNlJ308L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICB7IXRoaXMuc3RhdGUucGF5bWVudFJlc3VsdC5lcnJvciA/ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHIgPSB0aGlzLnN0YXRlLnBheW1lbnRSZXN1bHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdHhpZCA9IChwciAmJiBwci5wYXltZW50ICYmIHByLnBheW1lbnQudHhpZCkgfHwgKHByICYmIHByLnR4aWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0eGlkID8gKFxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICA8TGluayB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodHhpZCkpfWB9Pk9wZW4gdHJhbnNhY3Rpb24gZGV0YWlsczwvTGluaz5cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICApIDogbnVsbDtcbiAgICAgICAgICAgICAgfSkoKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxwcmUgc3R5bGU9e3sgd2hpdGVTcGFjZTogJ3ByZS13cmFwJywgd29yZEJyZWFrOiAnYnJlYWstd29yZCcgfX0+e0pTT04uc3RyaW5naWZ5KHRoaXMuc3RhdGUucGF5bWVudFJlc3VsdCwgbnVsbCwgMil9PC9wcmU+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBpZD1cImZhYnJpYy1idGMtdHgtY2xpZW50LWgzXCI+TXkgV2FsbGV0IEFjdGl2aXR5PC9IZWFkZXI+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgT25seSB0cmFuc2FjdGlvbnMgdGllZCB0byB5b3VyIHdhbGxldCBjb250ZXh0IGFyZSBsaXN0ZWQgaGVyZS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAge3RoaXMuc3RhdGUudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+Tm8gdHJhbnNhY3Rpb25zIGZvdW5kIGZvciB0aGlzIHdhbGxldC48L3A+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxUYWJsZSBjb21wYWN0PVwidmVyeVwiIGNlbGxlZD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+VHhpZDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkNvbnRyYWN0PC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+QW1vdW50PC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+Q29uZmlybWF0aW9uczwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlRpbWU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS50cmFuc2FjdGlvbnMubWFwKCh0eCwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhbXQgPSB0eC5vdXJBbW91bnQgIT0gbnVsbCA/IHR4Lm91ckFtb3VudCA6IHR4LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYW10TnVtID0gTnVtYmVyKGFtdCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc091dGdvaW5nID0gTnVtYmVyLmlzRmluaXRlKGFtdE51bSkgPyBhbXROdW0gPCAwIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0luY29taW5nID0gTnVtYmVyLmlzRmluaXRlKGFtdE51bSkgPyBhbXROdW0gPiAwIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0aW1lID0gdHguYmxvY2t0aW1lICE9IG51bGwgPyB0eC5ibG9ja3RpbWUgOiB0eC50aW1lO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0ciA9IHRpbWUgPyBuZXcgRGF0ZSh0aW1lICogMTAwMCkudG9Mb2NhbGVTdHJpbmcoKSA6ICctJztcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3cga2V5PXtgJHt0eC50eGlkIHx8ICd0eCd9OiR7aWR4fWB9PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAge3R4LnR4aWQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHR4LnR4aWQpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJyB9fSB0aXRsZT17dHgudHhpZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YCR7dHgudHhpZC5zbGljZSgwLCA4KX0uLi4ke3R4LnR4aWQuc2xpY2UoLTgpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogPGNvZGU+LTwvY29kZT59XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAge3R4LmZhYnJpY0NvbnRyYWN0ICYmIHR4LmZhYnJpY0NvbnRyYWN0LmxhYmVsID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJibHVlXCIgdGl0bGU9e0pTT04uc3RyaW5naWZ5KHR4LmZhYnJpY0NvbnRyYWN0Lm1ldGEgfHwge30pfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHguZmFicmljQ29udHJhY3QubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjOTk5JyB9fT4tPC9zcGFuPn1cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7YW10ICE9IG51bGwgPyBgJHtOdW1iZXIoYW10KS50b0ZpeGVkKDgpfSBCVENgIDogJy0nfVxuICAgICAgICAgICAgICAgICAgICAgICAge2lzT3V0Z29pbmcgPyA8TGFiZWwgc2l6ZT1cIm1pbmlcIiBjb2xvcj1cIm9yYW5nZVwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjM1ZW0nIH19PnNlbnQ8L0xhYmVsPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNJbmNvbWluZyA/IDxMYWJlbCBzaXplPVwibWluaVwiIGNvbG9yPVwiZ3JlZW5cIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4zNWVtJyB9fT5yZWNlaXZlZDwvTGFiZWw+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dHguY29uZmlybWF0aW9ucyAhPSBudWxsID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eC5jb25maXJtYXRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtOdW1iZXIodHguY29uZmlybWF0aW9ucykgPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cIm1pbmlcIiBjb2xvcj1cIm9yYW5nZVwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjM1ZW0nIH19Pm1lbXBvb2w8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiAnLSd9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntkYXRlU3RyfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L1RhYmxlLkJvZHk+XG4gICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBpZD1cImZhYnJpYy1idGMtdHgtbGl2ZS1oM1wiPkxpdmUgUmF3IFRyYW5zYWN0aW9uIFN0cmVhbTwvSGVhZGVyPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgIFJhdyB0cmFuc2FjdGlvbiBmZWVkIGZyb20gdGhlIEh1YiBwYXltZW50L21lbXBvb2wgc3VyZmFjZSAoYXV0by1yZWZyZXNoIGV2ZXJ5IDEwIHNlY29uZHMpLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5yYXdQYXltZW50cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19Pk5vIGxpdmUgdHJhbnNhY3Rpb25zIGN1cnJlbnRseSB2aXNpYmxlLjwvcD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFRhYmxlIGNvbXBhY3Q9XCJ2ZXJ5XCIgY2VsbGVkPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5UeGlkPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+RmVlPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+VmFsdWU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5yYXdQYXltZW50cy5tYXAoKHAsIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdyBrZXk9e2Ake3AudHhpZCB8fCAndHgnfToke2lkeH1gfT5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAge3AudHhpZCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHAudHhpZCl9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJyB9fSB0aXRsZT17cC50eGlkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YCR7cC50eGlkLnNsaWNlKDAsIDgpfS4uLiR7cC50eGlkLnNsaWNlKC04KX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IDxjb2RlPi08L2NvZGU+fVxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntwLmZlZSAhPSBudWxsID8gcC5mZWUgOiAnLSd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57cC52YWx1ZSAhPSBudWxsID8gYCR7cC52YWx1ZX0gQlRDYCA6ICctJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQml0Y29pblRyYW5zYWN0aW9uc0hvbWU7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3NsaWNlZFRvQXJyYXkiLCJyIiwiZSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJhIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0IiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbmd0aCIsIm4iLCJsIiwiaSIsInUiLCJmIiwibmV4dCIsIk9iamVjdCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJpc0FycmF5Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3JlZ2VuZXJhdG9yIiwidG9TdHJpbmdUYWciLCJjIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsInAiLCJ5IiwiRyIsInYiLCJkIiwiYmluZCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJfaW5oZXJpdHMiLCJfc2V0UHJvdG90eXBlT2YiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJGb3JtIiwiSGVhZGVyIiwiSWNvbiIsIklucHV0IiwiTGFiZWwiLCJNZXNzYWdlIiwiU2VnbWVudCIsIlRhYmxlIiwiX3JlcXVpcmUzIiwiZmV0Y2hQYXltZW50cyIsInNlbmRQYXltZW50IiwiZmV0Y2hXYWxsZXRTdW1tYXJ5IiwiZmV0Y2hXYWxsZXRUcmFuc2FjdGlvbnMiLCJnZXRTcGVuZFdhbGxldENvbnRleHQiLCJsb2FkVXBzdHJlYW1TZXR0aW5ncyIsInR4Q29udHJhY3RMYWJlbHMiLCJpbnZvaWNlU3RvcmUiLCJfcmVxdWlyZTQiLCJmb3JtYXRTYXRzRGlzcGxheSIsIl9yZXF1aXJlNSIsInJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIiLCJfcmVxdWlyZTYiLCJsb2FkRmVkZXJhdGlvblNwZW5kaW5nUHJlZnMiLCJtZXJnZVBheW1lbnRNZW1vV2l0aEZlZGVyYXRpb24iLCJzdWJzY3JpYmVGZWRlcmF0aW9uU3BlbmRpbmdQcmVmcyIsIkZlZGVyYXRpb25XYWxsZXRNdWx0aXNpZ1BhbmVsIiwiQml0Y29pblRyYW5zYWN0aW9uc0hvbWUiLCJfUmVhY3QkQ29tcG9uZW50IiwicHJvcHMiLCJfdGhpcyIsInN0YXRlIiwibG9hZGluZyIsImVycm9yIiwidXBzdHJlYW0iLCJ3YWxsZXQiLCJzdW1tYXJ5IiwidHJhbnNhY3Rpb25zIiwicmF3UGF5bWVudHMiLCJsYXN0VXBkYXRlZEF0IiwicGF5bWVudFRvIiwicGF5bWVudEFtb3VudFNhdHMiLCJwYXltZW50TWVtbyIsInBheW1lbnRSZXN1bHQiLCJyZWNvcmRGZWRlcmF0aW9uQ29udGV4dCIsInNwZW5kaW5nUHJlZnNUaWNrIiwiX3JlZnJlc2hUaW1lciIsIl9mZWRQcmVmc1Vuc3ViIiwiX2NvbXBvbmVudERpZE1vdW50IiwiX2NhbGxlZSIsIl90aGlzMiIsIl9jb250ZXh0IiwicmVmcmVzaCIsInNldEludGVydmFsIiwiY29tcG9uZW50RGlkTW91bnQiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImNsZWFySW50ZXJ2YWwiLCJfY29tcG9uZW50RGlkVXBkYXRlIiwiX2NhbGxlZTIiLCJwcmV2UHJvcHMiLCJwcmV2SWQiLCJuZXh0SWQiLCJfY29udGV4dDIiLCJpZGVudGl0eSIsImlkIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiX3giLCJfcmVmcmVzaCIsIl9jYWxsZWUzIiwibmV0d29yayIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJwYXltZW50cyIsImludkxhYmVscyIsInR4Um93cyIsInBheW1lbnRSb3dzIiwiX3QiLCJfY29udGV4dDMiLCJodWJBZG1pblRva2VuIiwiYWRtaW5Ub2tlbiIsImJpdGNvaW4iLCJ0b0xvd2VyQ2FzZSIsInNldFN0YXRlIiwiYWxsIiwibGltaXQiLCJidWlsZEludm9pY2VUeExhYmVscyIsImxvYWRJbnZvaWNlcyIsIm1lcmdlU2VydmVyQW5kTG9jYWxMYWJlbHMiLCJEYXRlIiwibm93IiwibWVzc2FnZSIsIl9odWJBZG1pblRva2VuIiwiX2hhbmRsZVNlbmRQYXltZW50IiwiX2NhbGxlZTQiLCJwcmVmcyIsIm1lbW8iLCJyZXN1bHQiLCJfdDIiLCJfY29udGV4dDQiLCJ0cmltIiwiaXNGaW5pdGUiLCJ0byIsImFtb3VudFNhdHMiLCJzdGF0dXMiLCJoYW5kbGVTZW5kUGF5bWVudCIsInJlbmRlciIsIl90aGlzMyIsImJhbGFuY2VTYXRzIiwiYmFsYW5jZSIsImNvbmZpcm1lZFNhdHMiLCJ1bmNvbmZpcm1lZFNhdHMiLCJsYXN0VXBkYXRlZCIsInRvTG9jYWxlVGltZVN0cmluZyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJnYXAiLCJmbGV4V3JhcCIsImFzIiwiYmFzaWMiLCJzaXplIiwibWFyZ2luIiwiQ29udGVudCIsIm9uQ2xpY2siLCJuZWdhdGl2ZSIsIm1hcmdpblRvcCIsImNvbnRlbnQiLCJpbmZvIiwiY29sb3IiLCJvblJlY29yZEZlZGVyYXRpb25Db250ZXh0Q2hhbmdlIiwibWFyZ2luQm90dG9tIiwiR3JvdXAiLCJ3aWR0aHMiLCJGaWVsZCIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJ0YXJnZXQiLCJ3aWR0aCIsInR5cGUiLCJtaW4iLCJzdGVwIiwicHJpbWFyeSIsInBvc2l0aXZlIiwicHIiLCJ0eGlkIiwicGF5bWVudCIsImNvbmNhdCIsImVuY29kZVVSSUNvbXBvbmVudCIsIndoaXRlU3BhY2UiLCJ3b3JkQnJlYWsiLCJKU09OIiwic3RyaW5naWZ5IiwiY29tcGFjdCIsImNlbGxlZCIsIlJvdyIsIkhlYWRlckNlbGwiLCJCb2R5IiwibWFwIiwidHgiLCJpZHgiLCJhbXQiLCJvdXJBbW91bnQiLCJhbXROdW0iLCJpc091dGdvaW5nIiwiaXNJbmNvbWluZyIsInRpbWUiLCJibG9ja3RpbWUiLCJkYXRlU3RyIiwidG9Mb2NhbGVTdHJpbmciLCJDZWxsIiwiZm9udFNpemUiLCJ0aXRsZSIsImZhYnJpY0NvbnRyYWN0IiwibGFiZWwiLCJtZXRhIiwidG9GaXhlZCIsIm1hcmdpbkxlZnQiLCJjb25maXJtYXRpb25zIiwiRnJhZ21lbnQiLCJmZWUiLCJDb21wb25lbnQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/BitcoinTransactionsHome.js\n\n}')},"./components/BitcoinWalletBranchBar.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Icon = _require2.Icon,\n Message = _require2.Message;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n getBitcoinBip44AccountForIdentity = _require3.getBitcoinBip44AccountForIdentity;\n\n/**\n * Fabric identity is the master; Bitcoin receive/change follow the active BIP44 account (matches Fabric account index when enabled).\n */\nfunction BitcoinWalletBranchBar(_ref) {\n var identity = _ref.identity;\n var masterXpub = identity && (identity.masterXpub || identity.xpub) ? String(identity.masterXpub || identity.xpub) : \'\';\n var accountXpub = identity && identity.masterXpub && identity.xpub && identity.xpub !== identity.masterXpub ? String(identity.xpub) : \'\';\n var acct = getBitcoinBip44AccountForIdentity(identity || {});\n return /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n },\n id: "fabric-bitcoin-wallet-context-bar"\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'flex-start\',\n gap: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n flex: \'1 1 18rem\',\n minWidth: 0\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n fontWeight: 600,\n color: \'#333\',\n marginBottom: \'0.25em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "key",\n "aria-hidden": "true"\n }), " Fabric identity (master)"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0 0 0.35em\',\n color: \'#555\',\n fontSize: \'0.9em\',\n lineHeight: 1.45\n }\n }, "Your node identity is the root. On-chain receives, spends, and Hub wallet balance all use", \' \', /*#__PURE__*/React.createElement("strong", null, "BIP44 account ", acct), \' \', "(", /*#__PURE__*/React.createElement("code", {\n style: {\n whiteSpace: \'nowrap\'\n }\n }, "m/44\'/0\'/".concat(acct, "\'")), "): external chain ", /*#__PURE__*/React.createElement("code", null, "0/*"), " for deposits, internal ", /*#__PURE__*/React.createElement("code", null, "1/*"), " for change. Issued receive addresses stay in local storage. Details:", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/bitcoin-wallet"\n }, "Settings \\u2192 Bitcoin wallet"), "."), masterXpub ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n color: \'#666\',\n fontSize: \'0.85em\',\n wordBreak: \'break-all\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Master xpub:"), \' \', /*#__PURE__*/React.createElement("code", null, masterXpub.slice(0, 18), "\\u2026", masterXpub.slice(-10))) : /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n color: \'#888\',\n fontSize: \'0.88em\'\n }\n }, "Open ", /*#__PURE__*/React.createElement("strong", null, "Identity"), " (top bar) or ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), " \\u2192 ", /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), " to unlock and derive receive addresses. Switch Fabric account in the identity dialog when using multi-account mode."), accountXpub ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#666\',\n fontSize: \'0.85em\',\n wordBreak: \'break-all\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Account xpub:"), \' \', /*#__PURE__*/React.createElement("code", null, accountXpub.slice(0, 18), "\\u2026", accountXpub.slice(-10))) : null)));\n}\nmodule.exports = BitcoinWalletBranchBar;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0JpdGNvaW5XYWxsZXRCcmFuY2hCYXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBTUEsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLDRDQUFPLENBQUM7QUFDOUIsSUFBQUMsUUFBQSxHQUFpQkQsbUJBQU8sQ0FBQyx1RUFBa0IsQ0FBQztFQUFwQ0UsSUFBSSxHQUFBRCxRQUFBLENBQUpDLElBQUk7QUFDWixJQUFBQyxTQUFBLEdBQTBCSCxtQkFBTyxDQUFDLDRFQUFtQixDQUFDO0VBQTlDSSxJQUFJLEdBQUFELFNBQUEsQ0FBSkMsSUFBSTtFQUFFQyxPQUFPLEdBQUFGLFNBQUEsQ0FBUEUsT0FBTztBQUNyQixJQUFBQyxTQUFBLEdBQThDTixtQkFBTyxDQUFDLGdFQUE0QixDQUFDO0VBQTNFTyxpQ0FBaUMsR0FBQUQsU0FBQSxDQUFqQ0MsaUNBQWlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQSxTQUFTQyxzQkFBc0JBLENBQUFDLElBQUEsRUFBZ0I7RUFBQSxJQUFaQyxRQUFRLEdBQUFELElBQUEsQ0FBUkMsUUFBUTtFQUN6QyxJQUFNQyxVQUFVLEdBQUdELFFBQVEsS0FBS0EsUUFBUSxDQUFDQyxVQUFVLElBQUlELFFBQVEsQ0FBQ0UsSUFBSSxDQUFDLEdBQ2pFQyxNQUFNLENBQUNILFFBQVEsQ0FBQ0MsVUFBVSxJQUFJRCxRQUFRLENBQUNFLElBQUksQ0FBQyxHQUM1QyxFQUFFO0VBQ04sSUFBTUUsV0FBVyxHQUFHSixRQUFRLElBQUlBLFFBQVEsQ0FBQ0MsVUFBVSxJQUFJRCxRQUFRLENBQUNFLElBQUksSUFBSUYsUUFBUSxDQUFDRSxJQUFJLEtBQUtGLFFBQVEsQ0FBQ0MsVUFBVSxHQUN6R0UsTUFBTSxDQUFDSCxRQUFRLENBQUNFLElBQUksQ0FBQyxHQUNyQixFQUFFO0VBQ04sSUFBTUcsSUFBSSxHQUFHUixpQ0FBaUMsQ0FBQ0csUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBRTlELG9CQUNFWCxLQUFBLENBQUFpQixhQUFBLENB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U0FBUyxFQUFFO0lBQVk7RUFBRSxnQkFDNUZ0QyxLQUFBLENBQUFpQixhQUFBLGlCQUFRLGVBQXFCLENBQUMsRUFBQyxHQUFHLGVBQ2xDakIsS0FBQSxDQUFBaUIsYUFBQSxlQUNHRixXQUFXLENBQUN3QixLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFDLFFBQUMsRUFBQ3hCLFdBQVcsQ0FBQ3dCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FDN0MsQ0FDTCxDQUFDLEdBQ0YsSUFDRCxDQUNGLENBQ0UsQ0FBQztBQUVkO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHaEMsc0JBQXNCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0JpdGNvaW5XYWxsZXRCcmFuY2hCYXIuanM/OWZhYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluayB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuY29uc3QgeyBJY29uLCBNZXNzYWdlIH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3QgeyBnZXRCaXRjb2luQmlwNDRBY2NvdW50Rm9ySWRlbnRpdHkgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9iaXRjb2luQ2xpZW50Jyk7XG5cbi8qKlxuICogRmFicmljIGlkZW50aXR5IGlzIHRoZSBtYXN0ZXI7IEJpdGNvaW4gcmVjZWl2ZS9jaGFuZ2UgZm9sbG93IHRoZSBhY3RpdmUgQklQNDQgYWNjb3VudCAobWF0Y2hlcyBGYWJyaWMgYWNjb3VudCBpbmRleCB3aGVuIGVuYWJsZWQpLlxuICovXG5mdW5jdGlvbiBCaXRjb2luV2FsbGV0QnJhbmNoQmFyICh7IGlkZW50aXR5IH0pIHtcbiAgY29uc3QgbWFzdGVyWHB1YiA9IGlkZW50aXR5ICYmIChpZGVudGl0eS5tYXN0ZXJYcHViIHx8IGlkZW50aXR5LnhwdWIpXG4gICAgPyBTdHJpbmcoaWRlbnRpdHkubWFzdGVyWHB1YiB8fCBpZGVudGl0eS54cHViKVxuICAgIDogJyc7XG4gIGNvbnN0IGFjY291bnRYcHViID0gaWRlbnRpdHkgJiYgaWRlbnRpdHkubWFzdGVyWHB1YiAmJiBpZGVudGl0eS54cHViICYmIGlkZW50aXR5LnhwdWIgIT09IGlkZW50aXR5Lm1hc3RlclhwdWJcbiAgICA/IFN0cmluZyhpZGVudGl0eS54cHViKVxuICAgIDogJyc7XG4gIGNvbnN0IGFjY3QgPSBnZXRCaXRjb2luQmlwNDRBY2NvdW50Rm9ySWRlbnRpdHkoaWRlbnRpdHkgfHwge30pO1xuXG4gIHJldHVybiAoXG4gICAgPE1lc3NhZ2VcbiAgICAgIGluZm9cbiAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19XG4gICAgICBpZD1cImZhYnJpYy1iaXRjb2luLXdhbGxldC1jb250ZXh0LWJhclwiXG4gICAgPlxuICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JywgZ2FwOiAnMC43NWVtJyB9fT5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBmbGV4OiAnMSAxIDE4cmVtJywgbWluV2lkdGg6IDAgfX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250V2VpZ2h0OiA2MDAsIGNvbG9yOiAnIzMzMycsIG1hcmdpbkJvdHRvbTogJzAuMjVlbScgfX0+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwia2V5XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gRmFicmljIGlkZW50aXR5IChtYXN0ZXIpXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMCAwIDAuMzVlbScsIGNvbG9yOiAnIzU1NScsIGZvbnRTaXplOiAnMC45ZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgWW91ciBub2RlIGlkZW50aXR5IGlzIHRoZSByb290LiBPbi1jaGFpbiByZWNlaXZlcywgc3BlbmRzLCBhbmQgSHViIHdhbGxldCBiYWxhbmNlIGFsbCB1c2V7JyAnfVxuICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgQklQNDQgYWNjb3VudCB7YWNjdH1cbiAgICAgICAgICAgIDwvc3Ryb25nPnsnICd9XG4gICAgICAgICAgICAoPGNvZGUgc3R5bGU9e3sgd2hpdGVTcGFjZTogJ25vd3JhcCcgfX0+e2BtLzQ0Jy8wJy8ke2FjY3R9J2B9PC9jb2RlPik6IGV4dGVybmFsIGNoYWluIDxjb2RlPjAvKjwvY29kZT4gZm9yIGRlcG9zaXRzLCBpbnRlcm5hbCA8Y29kZT4xLyo8L2NvZGU+IGZvciBjaGFuZ2UuXG4gICAgICAgICAgICBJc3N1ZWQgcmVjZWl2ZSBhZGRyZXNzZXMgc3RheSBpbiBsb2NhbCBzdG9yYWdlLiBEZXRhaWxzOnsnICd9XG4gICAgICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5ncy9iaXRjb2luLXdhbGxldFwiPlNldHRpbmdzIOKGkiBCaXRjb2luIHdhbGxldDwvTGluaz4uXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIHttYXN0ZXJYcHViID8gKFxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAwLCBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuODVlbScsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+XG4gICAgICAgICAgICAgIDxzdHJvbmc+TWFzdGVyIHhwdWI6PC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgICAgPGNvZGU+XG4gICAgICAgICAgICAgICAge21hc3RlclhwdWIuc2xpY2UoMCwgMTgpfeKApnttYXN0ZXJYcHViLnNsaWNlKC0xMCl9XG4gICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAwLCBjb2xvcjogJyM4ODgnLCBmb250U2l6ZTogJzAuODhlbScgfX0+XG4gICAgICAgICAgICAgIE9wZW4gPHN0cm9uZz5JZGVudGl0eTwvc3Ryb25nPiAodG9wIGJhcikgb3IgPExpbmsgdG89XCIvc2V0dGluZ3NcIj5TZXR0aW5nczwvTGluaz4g4oaSIDxzdHJvbmc+RmFicmljIGlkZW50aXR5PC9zdHJvbmc+IHRvIHVubG9jayBhbmQgZGVyaXZlIHJlY2VpdmUgYWRkcmVzc2VzLiBTd2l0Y2ggRmFicmljIGFjY291bnQgaW4gdGhlIGlkZW50aXR5IGRpYWxvZyB3aGVuIHVzaW5nIG11bHRpLWFjY291bnQgbW9kZS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHthY2NvdW50WHB1YiA/IChcbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuODVlbScsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+XG4gICAgICAgICAgICAgIDxzdHJvbmc+QWNjb3VudCB4cHViOjwvc3Ryb25nPnsnICd9XG4gICAgICAgICAgICAgIDxjb2RlPlxuICAgICAgICAgICAgICAgIHthY2NvdW50WHB1Yi5zbGljZSgwLCAxOCl94oCme2FjY291bnRYcHViLnNsaWNlKC0xMCl9XG4gICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L01lc3NhZ2U+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQml0Y29pbldhbGxldEJyYW5jaEJhcjtcbiJdLCJuYW1lcyI6WyJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJJY29uIiwiTWVzc2FnZSIsIl9yZXF1aXJlMyIsImdldEJpdGNvaW5CaXA0NEFjY291bnRGb3JJZGVudGl0eSIsIkJpdGNvaW5XYWxsZXRCcmFuY2hCYXIiLCJfcmVmIiwiaWRlbnRpdHkiLCJtYXN0ZXJYcHViIiwieHB1YiIsIlN0cmluZyIsImFjY291bnRYcHViIiwiYWNjdCIsImNyZWF0ZUVsZW1lbnQiLCJpbmZvIiwic2l6ZSIsInN0eWxlIiwibWFyZ2luQm90dG9tIiwiaWQiLCJkaXNwbGF5IiwiZmxleFdyYXAiLCJhbGlnbkl0ZW1zIiwiZ2FwIiwiZmxleCIsIm1pbldpZHRoIiwiZm9udFdlaWdodCIsImNvbG9yIiwibmFtZSIsIm1hcmdpbiIsImZvbnRTaXplIiwibGluZUhlaWdodCIsIndoaXRlU3BhY2UiLCJjb25jYXQiLCJ0byIsIndvcmRCcmVhayIsInNsaWNlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/BitcoinWalletBranchBar.js\n\n}')},"./components/BottomPanel.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require2.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require2.subscribeHubUiFeatureFlags;\nvar _require3 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Segment = _require3.Segment,\n Icon = _require3.Icon;\nvar BottomPanel = /*#__PURE__*/function (_React$Component) {\n function BottomPanel(props) {\n var _this;\n _classCallCheck(this, BottomPanel);\n _this = _callSuper(this, BottomPanel, [props]);\n _this.state = {\n now: new Date(),\n hubUiTick: 0\n };\n _this._timer = null;\n _this._hubUiUnsub = null;\n return _possibleConstructorReturn(_this, _this);\n }\n _inherits(BottomPanel, _React$Component);\n return _createClass(BottomPanel, [{\n key: "componentDidMount",\n value: function componentDidMount() {\n var _this2 = this;\n this._timer = setInterval(function () {\n _this2.setState({\n now: new Date()\n });\n }, 1000);\n this._hubUiUnsub = subscribeHubUiFeatureFlags(function () {\n _this2.setState(function (s) {\n return {\n hubUiTick: (s.hubUiTick || 0) + 1\n };\n });\n });\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n if (this._timer) {\n clearInterval(this._timer);\n this._timer = null;\n }\n if (typeof this._hubUiUnsub === \'function\') {\n this._hubUiUnsub();\n this._hubUiUnsub = null;\n }\n }\n }, {\n key: "render",\n value: function render() {\n var _this$state = this.state,\n now = _this$state.now,\n hubUiTick = _this$state.hubUiTick;\n void hubUiTick;\n var uf = loadHubUiFeatureFlags();\n var peerFooterLink = !!uf.peers;\n var timeText = now.toLocaleTimeString();\n var iso = now.toISOString();\n var formatPubkey = function formatPubkey(value) {\n if (!value) return \'\';\n var s = String(value);\n if (s.length <= 24) return s;\n var head = s.slice(0, 12);\n var tail = s.slice(-12);\n return "".concat(head, "\\u2026").concat(tail);\n };\n var rawPubkey = this.props.pubkey;\n var pubkeyText = formatPubkey(rawPubkey);\n var publicHubVisitor = !!(this.props && this.props.publicHubVisitor);\n return /*#__PURE__*/React.createElement(Segment, {\n role: "contentinfo",\n "aria-label": "Hub status footer",\n style: {\n flexShrink: 0,\n marginTop: \'1em\',\n marginBottom: 0,\n marginLeft: 0,\n marginRight: 0,\n zIndex: 15,\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n gap: \'0.75em\',\n flexWrap: \'wrap\',\n borderTop: \'1px solid rgba(0, 0, 0, 0.08)\',\n background: \'rgba(255, 255, 255, 0.97)\',\n backdropFilter: \'blur(10px)\',\n WebkitBackdropFilter: \'blur(10px)\',\n boxShadow: \'0 -2px 12px rgba(0, 0, 0, 0.06)\',\n paddingTop: \'0.65em\',\n paddingBottom: \'max(0.65em, env(safe-area-inset-bottom, 0px))\',\n paddingLeft: \'max(1em, env(safe-area-inset-left, 0px))\',\n paddingRight: \'max(1em, env(safe-area-inset-right, 0px))\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n flex: \'1 1 auto\',\n minWidth: 0,\n color: \'#666\'\n }\n }, pubkeyText ? /*#__PURE__*/React.createElement("span", {\n title: rawPubkey\n }, peerFooterLink && !publicHubVisitor ? /*#__PURE__*/React.createElement(Link, {\n to: "/peers/".concat(encodeURIComponent(rawPubkey)),\n style: {\n color: \'inherit\',\n textDecoration: \'none\'\n }\n }, /*#__PURE__*/React.createElement("code", null, pubkeyText)) : /*#__PURE__*/React.createElement("code", {\n title: publicHubVisitor ? \'Hub node identity (sign in to use peer tools)\' : \'Open Peers from the top bar\'\n }, pubkeyText)) : /*#__PURE__*/React.createElement("code", null, "hub.fabric.pub")), /*#__PURE__*/React.createElement("div", {\n style: {\n flex: \'0 0 auto\',\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.35em\',\n color: \'#999\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "clock outline",\n size: "small"\n }), /*#__PURE__*/React.createElement("abbr", {\n className: "timestamp",\n title: iso,\n style: {\n textDecoration: \'none\',\n cursor: \'default\'\n }\n }, timeText)));\n }\n }]);\n}(React.Component);\nmodule.exports = BottomPanel;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0JvdHRvbVBhbmVsLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBQUEsU0FBQUssZ0JBQUFDLENBQUEsRUFBQUMsQ0FBQSxVQUFBRCxDQUFBLFlBQUFDLENBQUEsYUFBQUMsU0FBQTtBQUFBLFNBQUFDLGtCQUFBQyxDQUFBLEVBQUFDLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFELENBQUEsQ0FBQUUsTUFBQSxFQUFBRCxDQUFBLFVBQUFaLENBQUEsR0FBQVcsQ0FBQSxDQUFBQyxDQUFBLEdBQUFaLENBQUEsQ0FBQWMsVUFBQSxHQUFBZCxDQUFBLENBQUFjLFVBQUEsUUFBQWQsQ0FBQSxDQUFBZSxZQUFBLGtCQUFBZixDQUFBLEtBQUFBLENBQUEsQ0FBQWdCLFFBQUEsUUFBQUMsTUFBQSxDQUFBQyxjQUFBLENBQUFSLENBQUEsRUFBQVMsY0FBQSxDQUFBbkIsQ0FBQSxDQUFBb0IsR0FBQSxHQUFBcEIsQ0FBQTtBQUFBLFNBQUFxQixhQUFBWCxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBRCxDQUFBLElBQUFGLGlCQUFBLENBQUFDLENBQUEsQ0FBQU4sU0FBQSxFQUFBTyxDQUFBLEdBQUFDLENBQUEsSUFBQUgsaUJBQUEsQ0FBQUMsQ0FBQSxFQUFBRSxDQUFBLEdBQUFLLE1BQUEsQ0FBQUMsY0FBQSxDQUFBUixDQUFBLGlCQUFBTSxRQUFBLFNBQUFOLENBQUE7QUFBQSxTQUFBUyxlQUFBUCxDQUFBLFFBQUFVLENBQUEsR0FBQUMsWUFBQSxDQUFBWCxDQUFBLGdDQUFBYixPQUFBLENBQUF1QixDQUFBLElBQUFBLENBQUEsR0FBQUEsQ0FBQTtBQUFBLFNBQUFDLGFBQUFYLENBQUEsRUFBQUQsQ0FBQSxvQkFBQVosT0FBQSxDQUFBYSxDQUFBLE1BQUFBLENBQUEsU0FBQUEsQ0FBQSxNQUFBRixDQUFBLEdBQUFFLENBQUEsQ0FBQVgsTUFBQSxDQUFBdUIsV0FBQSxrQkFBQWQsQ0FBQSxRQUFBWSxDQUFBLEdBQUFaLENBQUEsQ0FBQWUsSUFBQSxDQUFBYixDQUFBLEVBQUFELENBQUEsZ0NBQUFaLE9BQUEsQ0FBQXVCLENBQUEsVUFBQUEsQ0FBQSxZQUFBZCxTQUFBLHlFQUFBRyxDQUFBLEdBQUFlLE1BQUEsR0FBQUMsTUFBQSxFQUFBZixDQUFBO0FBQUEsU0FBQWdCLFdBQUFoQixDQUFBLEVBQUFaLENBQUEsRUFBQVUsQ0FBQSxXQUFBVixDQUFBLEdBQUE2QixlQUFBLENBQUE3QixDQUFBLEdBQUE4QiwwQkFBQSxDQUFBbEIsQ0FBQSxFQUFBbUIseUJBQUEsS0FBQUMsT0FBQSxDQUFBQyxTQUFBLENBQUFqQyxDQUFBLEVBQUFVLENBQUEsUUFBQW1CLGVBQUEsQ0FBQWpCLENBQUEsRUFBQVQsV0FBQSxJQUFBSCxDQUFBLENBQUFrQyxLQUFBLENBQUF0QixDQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBb0IsMkJBQUFsQixDQUFBLEVBQUFGLENBQUEsUUFBQUEsQ0FBQSxpQkFBQVgsT0FBQSxDQUFBVyxDQUFBLDBCQUFBQSxDQUFBLFVBQUFBLENBQUEsaUJBQUFBLENBQUEsWUFBQUYsU0FBQSxxRUFBQTJCLHNCQUFBLENBQUF2QixDQUFBO0FBQUEsU0FBQXVCLHVCQUFBekIsQ0FBQSxtQkFBQUEsQ0FBQSxZQUFBMEIsY0FBQSxzRUFBQTFCLENBQUE7QUFBQSxTQUFBcUIsMEJBQUEsY0FBQW5CLENBQUEsSUFBQXlCLE9BQUEsQ0FBQWpDLFNBQUEsQ0FBQWtDLE9BQUEsQ0FBQWIsSUFBQSxDQUFBTyxPQUFBLENBQUFDLFNBQUEsQ0FBQUksT0FBQSxpQ0FBQXpCLENBQUEsYUFBQW1CLHlCQUFBLFlBQUFBLDBCQUFBLGFBQUFuQixDQUFBO0FBQUEsU0FBQWlCLGdCQUFBakIsQ0FBQSxXQUFBaUIsZUFBQSxHQUFBWixNQUFBLENBQUFzQixjQUFBLEdBQUF0QixNQUFBLENBQUF1QixjQUFBLENBQUFDLElBQUEsZUFBQTdCLENBQUEsV0FBQUEsQ0FBQSxDQUFBOEIsU0FBQSxJQUFBekIsTUFBQSxDQUFBdUIsY0FBQSxDQUFBNUIsQ0FBQSxNQUFBaUIsZUFBQSxDQUFBakIsQ0FBQTtBQUFBLFNBQUErQixVQUFBL0IsQ0FBQSxFQUFBRixDQUFBLDZCQUFBQSxDQUFBLGFBQUFBLENBQUEsWUFBQUYsU0FBQSx3REFBQUksQ0FBQSxDQUFBUixTQUFBLEdBQUFhLE1BQUEsQ0FBQTJCLE1BQUEsQ0FBQWxDLENBQUEsSUFBQUEsQ0FBQSxDQUFBTixTQUFBLElBQUFELFdBQUEsSUFBQTBDLEtBQUEsRUFBQWpDLENBQUEsRUFBQUksUUFBQSxNQUFBRCxZQUFBLFdBQUFFLE1BQUEsQ0FBQUMsY0FBQSxDQUFBTixDQUFBLGlCQUFBSSxRQUFBLFNBQUFOLENBQUEsSUFBQW9DLGVBQUEsQ0FBQWxDLENBQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFvQyxnQkFBQWxDLENBQUEsRUFBQUYsQ0FBQSxXQUFBb0MsZUFBQSxHQUFBN0IsTUFBQSxDQUFBc0IsY0FBQSxHQUFBdEIsTUFBQSxDQUFBc0IsY0FBQSxDQUFBRSxJQUFBLGVBQUE3QixDQUFBLEVBQUFGLENBQUEsV0FBQUUsQ0FBQSxDQUFBOEIsU0FBQSxHQUFBaEMsQ0FBQSxFQUFBRSxDQUFBLEtBQUFrQyxlQUFBLENBQUFsQyxDQUFBLEVBQUFGLENBQUE7QUFFYixJQUFNcUMsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLDRDQUFPLENBQUM7QUFDOUIsSUFBQUMsUUFBQSxHQUFpQkQsbUJBQU8sQ0FBQyx1RUFBa0IsQ0FBQztFQUFwQ0UsSUFBSSxHQUFBRCxRQUFBLENBQUpDLElBQUk7QUFDWixJQUFBQyxTQUFBLEdBR0lILG1CQUFPLENBQUMsd0VBQWdDLENBQUM7RUFGM0NJLHFCQUFxQixHQUFBRCxTQUFBLENBQXJCQyxxQkFBcUI7RUFDckJDLDBCQUEwQixHQUFBRixTQUFBLENBQTFCRSwwQkFBMEI7QUFFNUIsSUFBQUMsU0FBQSxHQUdJTixtQkFBTyxDQUFDLDRFQUFtQixDQUFDO0VBRjlCTyxPQUFPLEdBQUFELFNBQUEsQ0FBUEMsT0FBTztFQUNQQyxJQUFJLEdBQUFGLFNBQUEsQ0FBSkUsSUFBSTtBQUMyQixJQUUzQkMsV0FBVywwQkFBQUMsZ0JBQUE7RUFDZixTQUFBRCxZQUFhRSxLQUFLLEVBQUU7SUFBQSxJQUFBQyxLQUFBO0lBQUF2RCxlQUFBLE9BQUFvRCxXQUFBO0lBQ2xCRyxLQUFBLEdBQUFoQyxVQUFBLE9BQUE2QixXQUFBLEdBQU1FLEtBQUs7SUFFWEMsS0FBQSxDQUFLQyxLQUFLLEdBQUc7TUFDWEMsR0FBRyxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO01BQ2ZDLFNBQVMsRUFBRTtJQUNiLENBQUM7SUFFREosS0FBQSxDQUFLSyxNQUFNLEdBQUcsSUFBSTtJQUNsQkwsS0FBQSxDQUFLTSxXQUFXLEdBQUcsSUFBSTtJQUV2QixPQUFBcEMsMEJBQUEsQ0FBQThCLEtBQUEsRUFBQUEsS0FBQTtFQUNGO0VBQUNqQixTQUFBLENBQUFjLFdBQUEsRUFBQUMsZ0JBQUE7RUFBQSxPQUFBckMsWUFBQSxDQUFBb0MsV0FBQTtJQUFBckMsR0FBQTtJQUFBeUIsS0FBQSxFQUVELFNBQUFzQixpQkFBaUJBLENBQUEsRUFBSTtNQUFBLElBQUFDLE1BQUE7TUFDbkIsSUFBSSxDQUFDSCxNQUFNLEdBQUdJLFdBQVcsQ0FBQyxZQUFNO1FBQzlCRCxNQUFJLENBQUNFLFFBQVEsQ0FBQztVQUFFUixHQUFHLEVBQUUsSUFBSUMsSUFBSSxDQUFDO1FBQUUsQ0FBQyxDQUFDO01BQ3BDLENBQUMsRUFBRSxJQUFJLENBQUM7TUFDUixJQUFJLENBQUNHLFdBQVcsR0FBR2IsMEJBQTBCLENBQUMsWUFBTTtRQUNsRGUsTUFBSSxDQUFDRSxRQUFRLENBQUMsVUFBQ0MsQ0FBQztVQUFBLE9BQU07WUFBRVAsU0FBUyxFQUFFLENBQUNPLENBQUMsQ0FBQ1AsU0FBUyxJQUFJLENBQUMsSUFBSTtVQUFFLENBQUM7UUFBQSxDQUFDLENBQUM7TUFDL0QsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBNUMsR0FBQTtJQUFBeUIsS0FBQSxFQUVELFNBQUEyQixvQkFBb0JBLENBQUEsRUFBSTtNQUN0QixJQUFJLElBQUksQ0FBQ1AsTUFBTSxFQUFFO1FBQ2ZRLGFBQWEsQ0FBQyxJQUFJLENBQUNSLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUNBLE1BQU0sR0FBRyxJQUFJO01BQ3BCO01BQ0EsSUFBSSxPQUFPLElBQUksQ0FBQ0MsV0FBVyxLQUFLLFVBQVUsRUFBRTtRQUMxQyxJQUFJLENBQUNBLFdBQVcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQ0EsV0FBVyxHQUFHLElBQUk7TUFDekI7SUFDRjtFQUFDO0lBQUE5QyxHQUFBO0lBQUF5QixLQUFBLEVBRUQsU0FBQTZCLE1BQU1BLENBQUEsRUFBSTtNQUNSLElBQUFDLFdBQUEsR0FBMkIsSUFBSSxDQUFDZCxLQUFLO1FBQTdCQyxHQUFHLEdBQUFhLFdBQUEsQ0FBSGIsR0FBRztRQUFFRSxTQUFTLEdBQUFXLFdBQUEsQ0FBVFgsU0FBUztNQUN0QixLQUFLQSxTQUFTO01BQ2QsSUFBTVksRUFBRSxHQUFHeEIscUJBQXFCLENBQUMsQ0FBQztNQUNsQyxJQUFNeUIsY0FBYyxHQUFHLENBQUMsQ0FBQ0QsRUFBRSxDQUFDRSxLQUFLO01BQ2pDLElBQU1DLFFBQVEsR0FBR2pCLEdBQUcsQ0FBQ2tCLGtCQUFrQixDQUFDLENBQUM7TUFDekMsSUFBTUMsR0FBRyxHQUFHbkIsR0FBRyxDQUFDb0IsV0FBVyxDQUFDLENBQUM7TUFFN0IsSUFBTUMsWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQUl0QyxLQUFLLEVBQUs7UUFDOUIsSUFBSSxDQUFDQSxLQUFLLEVBQUUsT0FBTyxFQUFFO1FBQ3JCLElBQU0wQixDQUFDLEdBQUc3QyxNQUFNLENBQUNtQixLQUFLLENBQUM7UUFDdkIsSUFBSTBCLENBQUMsQ0FBQzFELE1BQU0sSUFBSSxFQUFFLEVBQUUsT0FBTzBELENBQUM7UUFDNUIsSUFBTWEsSUFBSSxHQUFHYixDQUFDLENBQUNjLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzNCLElBQU1DLElBQUksR0FBR2YsQ0FBQyxDQUFDYyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekIsVUFBQUUsTUFBQSxDQUFVSCxJQUFJLFlBQUFHLE1BQUEsQ0FBSUQsSUFBSTtNQUN4QixDQUFDO01BRUQsSUFBTUUsU0FBUyxHQUFHLElBQUksQ0FBQzdCLEtBQUssQ0FBQzhCLE1BQU07TUFDbkMsSUFBTUMsVUFBVSxHQUFHUCxZQUFZLENBQUNLLFNBQVMsQ0FBQztNQUMxQyxJQUFNRyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDaEMsS0FBSyxJQUFJLElBQUksQ0FBQ0EsS0FBSyxDQUFDZ0MsZ0JBQWdCLENBQUM7TUFFdEUsb0JBQ0U1QyxLQUFBLENBQUE2QyxhQUFBLENBQUNyQyxPQUFPO1FBQ05zQyxJQUFJLEVBQUMsYUFBYTtRQUNsQixjQUFXLG1CQUFtQjtRQUM5QkMsS0FBSyxFQUFFO1VBQ0xDLFVBQVUsRUFBRSxDQUFDO1VBQ2JDLFNBQVMsRUFBRSxLQUFLO1VBQ2hCQyxZQUFZLEVBQUUsQ0FBQztVQUNmQyxVQUFVLEVBQUUsQ0FBQztVQUNiQyxXQUFXLEVBQUUsQ0FBQztVQUNkQyxNQUFNLEVBQUUsRUFBRTtVQUNWQyxPQUFPLEVBQUUsTUFBTTtVQUNmQyxVQUFVLEVBQUUsUUFBUTtVQUNwQkMsY0FBYyxFQUFFLGVBQWU7VUFDL0JDLEdBQUcsRUFBRSxRQUFRO1VBQ2JDLFFBQVEsRUFBRSxNQUFNO1VBQ2hCQyxTQUFTLEVBQUUsK0JBQStCO1VBQzFDQyxVQUFVLEVBQUUsMkJBQTJCO1VBQ3ZDQyxjQUFjLEVBQUUsWUFBWTtVQUM1QkMsb0JBQW9CLEVBQUUsWUFBWTtVQUNsQ0MsU0FBUyxFQUFFLGlDQUFpQztVQUM1Q0MsVUFBVSxFQUFFLFFBQVE7VUFDcEJDLGFBQWEsRUFBRSwrQ0FBK0M7VUFDOURDLFdBQVcsRUFBRSwwQ0FBMEM7VUFDdkRDLFlBQVksRUFBRTtRQUNoQjtNQUFFLGdCQUVGbkUsS0FBQSxDQUFBNkMsYUFBQTtRQUFLRSxLQUFLLEVBQUU7VUFBRXFCLElBQUksRUFBRSxVQUFVO1VBQUVDLFFBQVEsRUFBRSxDQUFDO1VBQUVDLEtBQUssRUFBRTtRQUFPO01BQUUsR0FDMUQzQixVQUFVLGdCQUNUM0MsS0FBQSxDQUFBNkMsYUFBQTtRQUFNMEIsS0FBSyxFQUFFOUI7TUFBVSxHQUNwQlgsY0FBYyxJQUFJLENBQUNjLGdCQUFnQixnQkFDbEM1QyxLQUFBLENBQUE2QyxhQUFBLENBQUMxQyxJQUFJO1FBQ0hxRSxFQUFFLFlBQUFoQyxNQUFBLENBQVlpQyxrQkFBa0IsQ0FBQ2hDLFNBQVMsQ0FBQyxDQUFHO1FBQzlDTSxLQUFLLEVBQUU7VUFBRXVCLEtBQUssRUFBRSxTQUFTO1VBQUVJLGNBQWMsRUFBRTtRQUFPO01BQUUsZ0JBRXBEMUUsS0FBQSxDQUFBNkMsYUFBQSxlQUFPRixVQUFpQixDQUNwQixDQUFDLGdCQUVQM0MsS0FBQSxDQUFBNkMsYUFBQTtRQUFNMEIsS0FBSyxFQUFFM0IsZ0JBQWdCLEdBQUcsK0NBQStDLEdBQUc7TUFBOEIsR0FDN0dELFVBQ0csQ0FFSixDQUFDLGdCQUVQM0MsS0FBQSxDQUFBNkMsYUFBQSxlQUFNLGdCQUFvQixDQUV6QixDQUFDLGVBQ043QyxLQUFBLENBQUE2QyxhQUFBO1FBQ0VFLEtBQUssRUFBRTtVQUNMcUIsSUFBSSxFQUFFLFVBQVU7VUFDaEJkLE9BQU8sRUFBRSxNQUFNO1VBQ2ZDLFVBQVUsRUFBRSxRQUFRO1VBQ3BCRSxHQUFHLEVBQUUsUUFBUTtVQUNiYSxLQUFLLEVBQUU7UUFDVDtNQUFFLGdCQUVGdEUsS0FBQSxDQUFBNkMsYUFBQSxDQUFDcEMsSUFBSTtRQUFDa0UsSUFBSSxFQUFDLGVBQWU7UUFBQ0MsSUFBSSxFQUFDO01BQU8sQ0FBRSxDQUFDLGVBQzFDNUUsS0FBQSxDQUFBNkMsYUFBQTtRQUNFZ0MsU0FBUyxFQUFDLFdBQVc7UUFDckJOLEtBQUssRUFBRXJDLEdBQUk7UUFDWGEsS0FBSyxFQUFFO1VBQUUyQixjQUFjLEVBQUUsTUFBTTtVQUFFSSxNQUFNLEVBQUU7UUFBVTtNQUFFLEdBRXBEOUMsUUFDRyxDQUNILENBQ0UsQ0FBQztJQUVkO0VBQUM7QUFBQSxFQTNIdUJoQyxLQUFLLENBQUMrRSxTQUFTO0FBOEh6Q0MsTUFBTSxDQUFDQyxPQUFPLEdBQUd2RSxXQUFXIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0JvdHRvbVBhbmVsLmpzPzM0NDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHtcbiAgbG9hZEh1YlVpRmVhdHVyZUZsYWdzLFxuICBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFnc1xufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJVaUZlYXR1cmVGbGFncycpO1xuY29uc3Qge1xuICBTZWdtZW50LFxuICBJY29uXG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcblxuY2xhc3MgQm90dG9tUGFuZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbm93OiBuZXcgRGF0ZSgpLFxuICAgICAgaHViVWlUaWNrOiAwXG4gICAgfTtcblxuICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcbiAgICB0aGlzLl9odWJVaVVuc3ViID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQgKCkge1xuICAgIHRoaXMuX3RpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IG5vdzogbmV3IERhdGUoKSB9KTtcbiAgICB9LCAxMDAwKTtcbiAgICB0aGlzLl9odWJVaVVuc3ViID0gc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgocykgPT4gKHsgaHViVWlUaWNrOiAocy5odWJVaVRpY2sgfHwgMCkgKyAxIH0pKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICBpZiAodGhpcy5fdGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpO1xuICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuX2h1YlVpVW5zdWIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX2h1YlVpVW5zdWIoKTtcbiAgICAgIHRoaXMuX2h1YlVpVW5zdWIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgeyBub3csIGh1YlVpVGljayB9ID0gdGhpcy5zdGF0ZTtcbiAgICB2b2lkIGh1YlVpVGljaztcbiAgICBjb25zdCB1ZiA9IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuICAgIGNvbnN0IHBlZXJGb290ZXJMaW5rID0gISF1Zi5wZWVycztcbiAgICBjb25zdCB0aW1lVGV4dCA9IG5vdy50b0xvY2FsZVRpbWVTdHJpbmcoKTtcbiAgICBjb25zdCBpc28gPSBub3cudG9JU09TdHJpbmcoKTtcblxuICAgIGNvbnN0IGZvcm1hdFB1YmtleSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgICAgY29uc3QgcyA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICBpZiAocy5sZW5ndGggPD0gMjQpIHJldHVybiBzO1xuICAgICAgY29uc3QgaGVhZCA9IHMuc2xpY2UoMCwgMTIpO1xuICAgICAgY29uc3QgdGFpbCA9IHMuc2xpY2UoLTEyKTtcbiAgICAgIHJldHVybiBgJHtoZWFkfeKApiR7dGFpbH1gO1xuICAgIH07XG5cbiAgICBjb25zdCByYXdQdWJrZXkgPSB0aGlzLnByb3BzLnB1YmtleTtcbiAgICBjb25zdCBwdWJrZXlUZXh0ID0gZm9ybWF0UHVia2V5KHJhd1B1YmtleSk7XG4gICAgY29uc3QgcHVibGljSHViVmlzaXRvciA9ICEhKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5wdWJsaWNIdWJWaXNpdG9yKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U2VnbWVudFxuICAgICAgICByb2xlPVwiY29udGVudGluZm9cIlxuICAgICAgICBhcmlhLWxhYmVsPVwiSHViIHN0YXR1cyBmb290ZXJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgbWFyZ2luVG9wOiAnMWVtJyxcbiAgICAgICAgICBtYXJnaW5Cb3R0b206IDAsXG4gICAgICAgICAgbWFyZ2luTGVmdDogMCxcbiAgICAgICAgICBtYXJnaW5SaWdodDogMCxcbiAgICAgICAgICB6SW5kZXg6IDE1LFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgICAgICAgIGdhcDogJzAuNzVlbScsXG4gICAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgICBib3JkZXJUb3A6ICcxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA4KScsXG4gICAgICAgICAgYmFja2dyb3VuZDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC45NyknLFxuICAgICAgICAgIGJhY2tkcm9wRmlsdGVyOiAnYmx1cigxMHB4KScsXG4gICAgICAgICAgV2Via2l0QmFja2Ryb3BGaWx0ZXI6ICdibHVyKDEwcHgpJyxcbiAgICAgICAgICBib3hTaGFkb3c6ICcwIC0ycHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMDYpJyxcbiAgICAgICAgICBwYWRkaW5nVG9wOiAnMC42NWVtJyxcbiAgICAgICAgICBwYWRkaW5nQm90dG9tOiAnbWF4KDAuNjVlbSwgZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDBweCkpJyxcbiAgICAgICAgICBwYWRkaW5nTGVmdDogJ21heCgxZW0sIGVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCwgMHB4KSknLFxuICAgICAgICAgIHBhZGRpbmdSaWdodDogJ21heCgxZW0sIGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQsIDBweCkpJ1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGZsZXg6ICcxIDEgYXV0bycsIG1pbldpZHRoOiAwLCBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgIHtwdWJrZXlUZXh0ID8gKFxuICAgICAgICAgICAgPHNwYW4gdGl0bGU9e3Jhd1B1YmtleX0+XG4gICAgICAgICAgICAgIHtwZWVyRm9vdGVyTGluayAmJiAhcHVibGljSHViVmlzaXRvciA/IChcbiAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgdG89e2AvcGVlcnMvJHtlbmNvZGVVUklDb21wb25lbnQocmF3UHVia2V5KX1gfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICdpbmhlcml0JywgdGV4dERlY29yYXRpb246ICdub25lJyB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxjb2RlPntwdWJrZXlUZXh0fTwvY29kZT5cbiAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPGNvZGUgdGl0bGU9e3B1YmxpY0h1YlZpc2l0b3IgPyAnSHViIG5vZGUgaWRlbnRpdHkgKHNpZ24gaW4gdG8gdXNlIHBlZXIgdG9vbHMpJyA6ICdPcGVuIFBlZXJzIGZyb20gdGhlIHRvcCBiYXInfT5cbiAgICAgICAgICAgICAgICAgIHtwdWJrZXlUZXh0fVxuICAgICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGNvZGU+aHViLmZhYnJpYy5wdWI8L2NvZGU+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZmxleDogJzAgMCBhdXRvJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgZ2FwOiAnMC4zNWVtJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzk5OSdcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPEljb24gbmFtZT1cImNsb2NrIG91dGxpbmVcIiBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICAgIDxhYmJyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0aW1lc3RhbXBcIlxuICAgICAgICAgICAgdGl0bGU9e2lzb31cbiAgICAgICAgICAgIHN0eWxlPXt7IHRleHREZWNvcmF0aW9uOiAnbm9uZScsIGN1cnNvcjogJ2RlZmF1bHQnIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RpbWVUZXh0fVxuICAgICAgICAgIDwvYWJicj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1NlZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJvdHRvbVBhbmVsO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9jbGFzc0NhbGxDaGVjayIsImEiLCJuIiwiVHlwZUVycm9yIiwiX2RlZmluZVByb3BlcnRpZXMiLCJlIiwiciIsInQiLCJsZW5ndGgiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiaSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlN0cmluZyIsIk51bWJlciIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiYXBwbHkiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJCb29sZWFuIiwidmFsdWVPZiIsInNldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJiaW5kIiwiX19wcm90b19fIiwiX2luaGVyaXRzIiwiY3JlYXRlIiwidmFsdWUiLCJfc2V0UHJvdG90eXBlT2YiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJsb2FkSHViVWlGZWF0dXJlRmxhZ3MiLCJzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncyIsIl9yZXF1aXJlMyIsIlNlZ21lbnQiLCJJY29uIiwiQm90dG9tUGFuZWwiLCJfUmVhY3QkQ29tcG9uZW50IiwicHJvcHMiLCJfdGhpcyIsInN0YXRlIiwibm93IiwiRGF0ZSIsImh1YlVpVGljayIsIl90aW1lciIsIl9odWJVaVVuc3ViIiwiY29tcG9uZW50RGlkTW91bnQiLCJfdGhpczIiLCJzZXRJbnRlcnZhbCIsInNldFN0YXRlIiwicyIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiY2xlYXJJbnRlcnZhbCIsInJlbmRlciIsIl90aGlzJHN0YXRlIiwidWYiLCJwZWVyRm9vdGVyTGluayIsInBlZXJzIiwidGltZVRleHQiLCJ0b0xvY2FsZVRpbWVTdHJpbmciLCJpc28iLCJ0b0lTT1N0cmluZyIsImZvcm1hdFB1YmtleSIsImhlYWQiLCJzbGljZSIsInRhaWwiLCJjb25jYXQiLCJyYXdQdWJrZXkiLCJwdWJrZXkiLCJwdWJrZXlUZXh0IiwicHVibGljSHViVmlzaXRvciIsImNyZWF0ZUVsZW1lbnQiLCJyb2xlIiwic3R5bGUiLCJmbGV4U2hyaW5rIiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwiekluZGV4IiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsImdhcCIsImZsZXhXcmFwIiwiYm9yZGVyVG9wIiwiYmFja2dyb3VuZCIsImJhY2tkcm9wRmlsdGVyIiwiV2Via2l0QmFja2Ryb3BGaWx0ZXIiLCJib3hTaGFkb3ciLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwiZmxleCIsIm1pbldpZHRoIiwiY29sb3IiLCJ0aXRsZSIsInRvIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidGV4dERlY29yYXRpb24iLCJuYW1lIiwic2l6ZSIsImNsYXNzTmFtZSIsImN1cnNvciIsIkNvbXBvbmVudCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/BottomPanel.js\n\n}')},"./components/Bridge.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n// Dependencies\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nvar WebSocket = __webpack_require__(/*! isomorphic-ws */ \"./node_modules/isomorphic-ws/browser.js\");\nvar _require = __webpack_require__(/*! fast-json-patch */ \"./node_modules/fast-json-patch/index.mjs\"),\n applyPatch = _require.applyPatch;\nvar Actor = __webpack_require__(/*! @fabric/core/types/actor */ \"./node_modules/@fabric/core/types/actor.js\");\n\n// Native WebRTC (no PeerJS)\n// Uses RTCPeerConnection + existing hub WebSocket as signaling channel.\n\n// Semantic UI\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ \"./node_modules/semantic-ui-react/dist/es/index.js\"),\n Label = _require2.Label;\n\n// Fabric Types\nvar Message = __webpack_require__(/*! @fabric/core/types/message */ \"./node_modules/@fabric/core/types/message.js\");\nvar Key = __webpack_require__(/*! @fabric/core/types/key */ \"./node_modules/@fabric/core/types/key.js\");\nvar _require3 = __webpack_require__(/*! @fabric/core/constants */ \"./node_modules/@fabric/core/constants.js\"),\n P2P_PEER_GOSSIP = _require3.P2P_PEER_GOSSIP,\n P2P_PEERING_OFFER = _require3.P2P_PEERING_OFFER,\n P2P_CHAT_MESSAGE = _require3.P2P_CHAT_MESSAGE,\n P2P_PEER_ALIAS = _require3.P2P_PEER_ALIAS,\n P2P_FILE_SEND = _require3.P2P_FILE_SEND,\n MAGIC_BYTES = _require3.MAGIC_BYTES;\nvar fabricBridgeEnvelope = __webpack_require__(/*! ../functions/fabricBridgeEnvelope */ \"./functions/fabricBridgeEnvelope.js\");\nvar _require4 = __webpack_require__(/*! ../functions/uiNotifications */ \"./functions/uiNotifications.js\"),\n pushUiNotification = _require4.pushUiNotification;\nvar _require5 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ \"./functions/hubUiFeatureFlags.js\"),\n loadHubUiFeatureFlags = _require5.loadHubUiFeatureFlags;\nvar _require6 = __webpack_require__(/*! ../functions/fabricDocumentOfferEnvelope */ \"./functions/fabricDocumentOfferEnvelope.js\"),\n isDocumentInventoryDocumentsOfferResponse = _require6.isDocumentInventoryDocumentsOfferResponse,\n isDocumentInventoryResponseType = _require6.isDocumentInventoryResponseType;\nvar _require7 = __webpack_require__(/*! ../functions/formatSats */ \"./functions/formatSats.js\"),\n formatSatsDisplay = _require7.formatSatsDisplay;\nvar _require8 = __webpack_require__(/*! ../functions/toast */ \"./functions/toast.js\"),\n toast = _require8.toast;\nvar _require9 = __webpack_require__(/*! ../functions/messageTypes */ \"./functions/messageTypes.js\"),\n DELEGATION_SIGNATURE_REQUEST = _require9.DELEGATION_SIGNATURE_REQUEST,\n isDelegationSignatureRequestActivity = _require9.isDelegationSignatureRequestActivity,\n DOCUMENT_OFFER = _require9.DOCUMENT_OFFER;\nvar _require0 = __webpack_require__(/*! ../functions/federationContractInvite */ \"./functions/federationContractInvite.js\"),\n parseFederationContractInvite = _require0.parseFederationContractInvite,\n parseFederationContractInviteResponse = _require0.parseFederationContractInviteResponse;\nvar _require1 = __webpack_require__(/*! ../functions/peerIdentity */ \"./functions/peerIdentity.js\"),\n extractPeerXpub = _require1.extractPeerXpub,\n shortenPublicId = _require1.shortenPublicId,\n normalizePeerAddressInput = _require1.normalizePeerAddressInput;\nvar _require10 = __webpack_require__(/*! ../functions/isLikelyBip32ExtendedKey */ \"./functions/isLikelyBip32ExtendedKey.js\"),\n isLikelyBip32ExtendedKey = _require10.isLikelyBip32ExtendedKey;\nvar _require11 = __webpack_require__(/*! ../functions/fabricDelegationLocal */ \"./functions/fabricDelegationLocal.js\"),\n DELEGATION_STORAGE_KEY = _require11.DELEGATION_STORAGE_KEY;\nvar _require12 = __webpack_require__(/*! ../functions/hubNetworkStatus */ \"./functions/hubNetworkStatus.js\"),\n isHubNetworkStatusShape = _require12.isHubNetworkStatusShape;\nvar _require13 = __webpack_require__(/*! ../functions/documentPublishSync */ \"./functions/documentPublishSync.js\"),\n needsCreateDocumentBeforePublish = _require13.needsCreateDocumentBeforePublish,\n mergePublishedDocumentsFromHubStatus = _require13.mergePublishedDocumentsFromHubStatus;\nvar _require14 = __webpack_require__(/*! ../functions/fabricSafeLog */ \"./functions/fabricSafeLog.js\"),\n safeIdentityErr = _require14.safeIdentityErr,\n safeDebugStatePreview = _require14.safeDebugStatePreview,\n safeUrlForLog = _require14.safeUrlForLog;\nvar _require15 = __webpack_require__(/*! ../functions/hubIdentityUiHints */ \"./functions/hubIdentityUiHints.js\"),\n fabricIdentityChatDisabledReasonPlain = _require15.fabricIdentityChatDisabledReasonPlain,\n fabricIdentityPeerDisabledReasonPlain = _require15.fabricIdentityPeerDisabledReasonPlain;\nvar _require16 = __webpack_require__(/*! ../functions/fabricBrowserState */ \"./functions/fabricBrowserState.js\"),\n fabricBrowserStateStore = _require16.store,\n readStorageJSON = _require16.readStorageJSON;\nvar BridgeMessageCollection = __webpack_require__(/*! ../types/bridgeMessageCollection */ \"./types/bridgeMessageCollection.js\");\nvar _require17 = __webpack_require__(/*! ../functions/fabricTransportSession */ \"./functions/fabricTransportSession.js\"),\n HUB_FABRIC_SESSION_ID = _require17.HUB_FABRIC_SESSION_ID,\n SESSION_KIND_HUB = _require17.SESSION_KIND_HUB,\n SESSION_KIND_WEBRTC = _require17.SESSION_KIND_WEBRTC,\n fabricWireBodyIntegrityOk = _require17.fabricWireBodyIntegrityOk,\n FABRIC_WIRE_HEADER_SIZE = _require17.HEADER_SIZE,\n BRIDGE_INBOUND_WIRE_MAX_BYTES = _require17.BRIDGE_INBOUND_WIRE_MAX_BYTES,\n FabricTransportSession = _require17.FabricTransportSession;\nvar _require18 = __webpack_require__(/*! ../functions/fabricChatNormalize */ \"./functions/fabricChatNormalize.js\"),\n chatTextOf = _require18.chatTextOf,\n normalizeP2pChatMessage = _require18.normalizeP2pChatMessage;\nvar COLLAB_INVITE_PREFIX = '[COLLAB_INVITATION] ';\n\n/**\n * Describe inbound/outbound payloads for debug logs without printing raw bytes or bodies (privacy).\n * @param {*} data\n * @returns {object}\n */\nfunction fabricDebugDescribePayload(data) {\n if (data == null) return {\n kind: 'null'\n };\n if (typeof data === 'string') return {\n kind: 'string',\n length: data.length\n };\n if (data instanceof ArrayBuffer) return {\n kind: 'ArrayBuffer',\n byteLength: data.byteLength\n };\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView && ArrayBuffer.isView(data)) {\n return {\n kind: 'TypedArray',\n byteLength: data.byteLength\n };\n }\n try {\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer && Buffer.isBuffer(data)) {\n return {\n kind: 'Buffer',\n length: data.length\n };\n }\n } catch (e) {}\n try {\n if (typeof Blob !== 'undefined' && data instanceof Blob) return {\n kind: 'Blob',\n size: data.size\n };\n } catch (e) {}\n if (_typeof(data) === 'object') {\n var o = {\n kind: 'object'\n };\n if (Object.prototype.hasOwnProperty.call(data, 'type')) o.type = data.type;\n if (typeof data.data === 'string') o.dataStringLength = data.data.length;else if (data.data && typeof data.data.byteLength === 'number') o.dataByteLength = data.data.byteLength;\n return o;\n }\n return {\n kind: _typeof(data)\n };\n}\n\n/**\n * Manages a WebSocket connection to a remote server.\n */\nvar Bridge = /*#__PURE__*/function (_React$Component) {\n function Bridge(props) {\n var _this;\n _classCallCheck(this, Bridge);\n _this = _callSuper(this, Bridge, [props]);\n\n // Settings\n _defineProperty(_this, \"handlePathChange\", function () {\n var newPath = window.location.pathname;\n if (newPath !== _this.state.currentPath) {\n // Unsubscribe from old path\n _this.unsubscribe(_this.state.currentPath);\n // Update current path\n _this.setState({\n currentPath: newPath\n });\n // Subscribe to new path\n _this.subscribe(newPath);\n }\n });\n _this.settings = Object.assign({\n host: window.location.hostname,\n port: window.location.port || (window.location.protocol === 'https:' ? 443 : 80),\n secure: window.location.protocol === 'https:',\n debug: false,\n tickrate: 250,\n signingKey: props.auth ? new Key(props.auth) : null,\n maxWebrtcPeers: 5,\n // Maximum number of WebRTC peer connections to maintain\n webrtcPeerDiscoveryDelay: 2000,\n // Delay before discovering peers (ms)\n webrtcHeartbeatIntervalMs: 30000,\n // Re-register peer presence on heartbeat\n webrtcDiscoveryIntervalMs: 15000,\n // Periodically rediscover active peers\n webrtcGossipIntervalMs: 25000,\n // Gossip peer list to WebRTC neighbors for cross-cluster discovery\n webrtcPeeringOfferIntervalMs: 30000,\n // Publish peering offer when below max peers\n webrtcConnectTimeoutMs: 15000,\n // Abort stale outbound connect attempts\n webrtcCandidateMaxAgeMs: 120000 // Ignore stale peer registrations when discovering candidates\n }, props);\n\n // Optional override via a single hub address string.\n // Accepts: \"host:port\", \"http(s)://host:port\", \"ws(s)://host:port\"\n if (_this.settings && typeof _this.settings.hubAddress === 'string' && _this.settings.hubAddress.trim()) {\n _this._applyHubAddressString(_this.settings.hubAddress);\n }\n _this.state = {\n data: null,\n error: null,\n networkStatus: null,\n lastNetworkStatus: null,\n subscriptions: new Set(),\n isConnected: false,\n webrtcConnected: false,\n currentPath: window.location.pathname\n };\n\n // Global state for JSON-PATCH updates\n _this.globalState = {\n conversations: {},\n messages: {},\n documents: {},\n distributeProposals: {},\n peerTopologyGossip: {\n byReporter: {}\n }\n };\n\n // Canonical browser-side Fabric state store (offline-first baseline).\n _this._fabricStore = fabricBrowserStateStore();\n var restoredUnified = _this._fabricStore.GET('/');\n if (restoredUnified && _typeof(restoredUnified) === 'object') {\n _this.globalState = _objectSpread(_objectSpread(_objectSpread({}, _this.globalState), restoredUnified), {}, {\n conversations: _objectSpread(_objectSpread({}, _this.globalState.conversations || {}), restoredUnified && restoredUnified.conversations || {}),\n messages: _objectSpread(_objectSpread({}, _this.globalState.messages || {}), restoredUnified && restoredUnified.messages || {}),\n documents: _objectSpread(_objectSpread({}, _this.globalState.documents || {}), restoredUnified && restoredUnified.documents || {}),\n distributeProposals: _objectSpread(_objectSpread({}, _this.globalState.distributeProposals || {}), restoredUnified && restoredUnified.distributeProposals || {}),\n peerTopologyGossip: _objectSpread(_objectSpread({}, _this.globalState.peerTopologyGossip || {}), restoredUnified && restoredUnified.peerTopologyGossip || {})\n });\n }\n _this.attempts = 1;\n _this.messageQueue = [];\n _this.webrtcMessageQueue = [];\n _this.peerMessageQueue = [];\n _this.chatSubmissionQueue = [];\n _this.pendingHubChatQueue = []; // Chat messages sent while hub was offline; flush to bridge when reconnected\n _this._pendingClaimCallbacks = new Map(); // documentId -> { resolve, reject }\n /** Hub file id (sha) passed to CreatePurchaseInvoice — correlates error responses to the UI modal. */\n _this._pendingCreatePurchaseInvoiceBackendIds = new Set();\n /** Same for CreateDistributeInvoice (pay-to-distribute step 1). */\n _this._pendingCreateDistributeInvoiceBackendIds = new Set();\n _this.queue = [];\n _this.ws = null;\n _this._heartbeat = null;\n _this._isConnected = false; // Internal connection state\n\n // Chat routing controls\n _this.disableFabricP2P = false;\n _this.disableHubChat = false;\n _this.preferWebRTCChat = false;\n\n // WebRTC properties (native RTCPeerConnection)\n _this.peerId = null;\n _this.webrtcPeers = new Map(); // Track all WebRTC peer connections (metadata)\n _this._webrtcConnected = false;\n _this._webrtcReady = false;\n _this._peerDiscoveryTimer = null; // Timer for peer discovery after startup\n _this._connectingPeers = new Set(); // Track peers we're currently connecting to\n _this._pendingPeerCandidates = []; // Candidates received before WebRTC is ready\n _this._lastWebRTCPublishAt = 0;\n _this._lastWebRTCDiscoverAt = 0;\n _this._lastWebRTCGossipAt = 0;\n _this._lastPeeringOfferAt = 0;\n _this._jsonRpcQueue = []; // JSON-RPC payloads to send once WebSocket is open\n /** Monotonic id for {@link Bridge#callHubJsonRpc} HTTP POST /services/rpc. */\n _this._hubJsonRpcSeq = 0;\n _this._rtcPeers = new Map(); // peerId -> { pc, dc, status, initiator, metadata }\n _this._rtcPendingIce = new Map(); // peerId -> [RTCIceCandidateInit]\n _this._webrtcConnectTimers = new Map(); // peerId -> timeout handle\n _this._rtcSessionCounter = 0;\n _this._lastWebRTCChatDeliveryCount = null;\n _this._lastWebRTCChatSentAt = 0;\n _this._lastWebRTCRecipientPeerIds = [];\n /** Throttle identity unlock UI opens when several guarded actions fire in one burst. */\n _this._lastIdentityUnlockUiNotifyAt = 0;\n\n /** Per Fabric transport leg: hub WebSocket + each WebRTC peer — Tree, chain, reputation. */\n _this._fabricTransportSessions = new Map();\n /** After hub wire misbehavior exhaustion, skip auto-reconnect (operator must refresh). */\n _this._fabricHubReconnectSuspended = false;\n _this._peerListUiRefreshTimer = null;\n _this._walletBalanceBaseline = new Set();\n _this._lastWalletBalanceTotal = Object.create(null);\n _this._lastWalletConfirmedSats = Object.create(null);\n _this._lastWalletUnconfirmedSats = Object.create(null);\n _this._l1InvoiceActivityKeys = new Set();\n _this._onClientBalanceUpdate = _this._onClientBalanceUpdate.bind(_this);\n\n // Track backing SHA ids that should be published once CreateDocument succeeds.\n /** Hub document file id (sha) when a PublishDocument JSONCall is in flight. */\n _this._pendingPublishDocumentBackendIds = new Set();\n /** When publish first runs CreateDocument, correlate generic RPC errors to the document row. */\n _this._lastPublishCreateContext = null; // { sha: string, actorId: string, sentAt: number }\n /** AcceptDistributeProposal in flight — correlate hub errors to hosting UI. */\n _this._pendingAcceptDistributeContext = null; // { backendId: string, proposalId: string, sentAt: number }\n /** SendDistributeProposal in flight — correlate typed hub result to document detail UI. */\n _this._pendingSendDistributeProposalContext = null; // { backendId: string, peerKey: string, sentAt: number }\n _this._pendingPublishBySha = new Set();\n /** @type {Map} Incomplete P2P_FILE_SEND transfers keyed by transferId */\n _this._p2pFileReceivers = new Map();\n\n // Initialize key if provided\n if (props.key) {\n _this.key = new Key(props.key);\n }\n\n // Restore local browser-backed state.\n var restoredPeerQueue = _this._readJSONFromStorage('fabric:peerMessageQueue', []);\n if (Array.isArray(restoredPeerQueue)) _this.peerMessageQueue = restoredPeerQueue;\n\n // Merge legacy `fabric:messages` with hub messages already restored from `fabric:state` (unified wins).\n var unifiedMessages = _this.globalState.messages && _typeof(_this.globalState.messages) === 'object' ? _objectSpread({}, _this.globalState.messages) : {};\n var restoredLegacyMessages = _this._readJSONFromStorage('fabric:messages', null);\n var legacyMessages = restoredLegacyMessages && _typeof(restoredLegacyMessages) === 'object' ? restoredLegacyMessages : {};\n var mergedChat = _objectSpread(_objectSpread({}, legacyMessages), unifiedMessages);\n _this._messageCollection = new BridgeMessageCollection({\n data: mergedChat\n });\n _this.globalState.messages = _this._messageCollection.exportMap();\n\n // Restore documents (unified store: all docs with content; publish adds ref to hub index)\n var docs = {};\n var restoredDocs = _this._readJSONFromStorage('fabric:documents', null);\n if (restoredDocs && _typeof(restoredDocs) === 'object') Object.assign(docs, restoredDocs);\n\n // Migrate from legacy localDocuments into documents.\n var legacyDocs = _this._readJSONFromStorage('fabric:localDocuments', null);\n if (legacyDocs && _typeof(legacyDocs) === 'object') {\n Object.assign(docs, legacyDocs);\n _this._removeStorageKey('fabric:localDocuments');\n }\n if (Object.keys(docs).length > 0) {\n _this.globalState.documents = _objectSpread(_objectSpread({}, _this.globalState.documents || {}), docs);\n }\n var restoredProposals = _this._readJSONFromStorage('fabric:distributeProposals', null);\n if (restoredProposals && _typeof(restoredProposals) === 'object') {\n _this.globalState.distributeProposals = restoredProposals;\n }\n _this._persistGlobalState();\n return _possibleConstructorReturn(_this, _this);\n }\n _inherits(Bridge, _React$Component);\n return _createClass(Bridge, [{\n key: \"authority\",\n get: function get() {\n if (this.settings && this.settings.authority) return this.settings.authority;\n return (this.settings.secure ? \"wss\" : \"ws\") + \"://\".concat(this.settings.host, \":\").concat(this.settings.port);\n }\n }, {\n key: \"networkStatus\",\n get: function get() {\n return this.state.networkStatus || null;\n }\n }, {\n key: \"lastNetworkStatus\",\n get: function get() {\n return this.state.lastNetworkStatus || null;\n }\n\n /**\n * Get a list of WebRTC peers connected to this browser client.\n * @returns {Array} Array of WebRTC peer objects with id, status, direction, connectedAt\n */\n }, {\n key: \"localWebrtcPeers\",\n get: function get() {\n var _this2 = this;\n var peers = Array.from(this.webrtcPeers.values()).map(function (p) {\n var id = p && p.id != null ? String(p.id) : '';\n var sess = id && _this2._fabricTransportSessions && _this2._fabricTransportSessions.get(id);\n return {\n id: p.id,\n status: p.status,\n direction: p.direction,\n connectedAt: p.connectedAt,\n error: p.error,\n lastSeen: p.lastSeen,\n score: sess && sess.score != null ? sess.score : 100,\n misbehavior: sess && sess.misbehavior != null ? sess.misbehavior : 0\n };\n });\n\n // Also include peers that are currently connecting\n var _iterator = _createForOfIteratorHelper(this._connectingPeers),\n _step;\n try {\n var _loop = function _loop() {\n var peerId = _step.value;\n if (!peers.find(function (p) {\n return p.id === peerId;\n })) {\n peers.push({\n id: peerId,\n status: 'connecting',\n direction: 'outbound',\n connectedAt: null\n });\n }\n };\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n _loop();\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return peers;\n }\n\n /**\n * Get the WebRTC mesh status summary.\n * @returns {Object} Summary of WebRTC mesh state\n */\n }, {\n key: \"webrtcMeshStatus\",\n get: function get() {\n var connected = this.getWebRTCPeerCount();\n var connecting = this._connectingPeers ? this._connectingPeers.size : 0;\n var maxPeers = this.settings.maxWebrtcPeers || 5;\n return {\n peerId: this.peerId,\n ready: this._webrtcReady,\n connected: connected,\n connecting: connecting,\n maxPeers: maxPeers,\n slotsAvailable: Math.max(0, maxPeers - connected - connecting)\n };\n }\n\n /**\n * Lightweight debug telemetry for browser-level WebRTC chat sends.\n * @returns {{lastDeliveredTo:number|null,lastSentAt:number}}\n */\n }, {\n key: \"webrtcChatDebugStatus\",\n get: function get() {\n var connectedPeerIds = Array.from(this.webrtcPeers.values()).filter(function (peer) {\n return peer && peer.status === 'connected' && peer.id;\n }).map(function (peer) {\n return peer.id;\n });\n return {\n lastDeliveredTo: Number.isFinite(this._lastWebRTCChatDeliveryCount) ? this._lastWebRTCChatDeliveryCount : null,\n lastSentAt: this._lastWebRTCChatSentAt || 0,\n peerId: this.peerId || null,\n connectedPeerIds: connectedPeerIds,\n lastRecipientPeerIds: Array.isArray(this._lastWebRTCRecipientPeerIds) ? this._lastWebRTCRecipientPeerIds.slice() : []\n };\n }\n\n /**\n * Enable or disable WebRTC-only chat mode.\n * When enabled, chat messages are sent over the WebRTC mesh instead of the hub/Fabric P2P paths.\n * @param {boolean} enabled\n */\n }, {\n key: \"setWebRTCChatOnly\",\n value: function setWebRTCChatOnly(enabled) {\n var flag = !!enabled;\n this.preferWebRTCChat = flag;\n this.disableFabricP2P = flag;\n this.disableHubChat = flag;\n }\n\n /**\n * Send a WebRTC signaling payload to another browser via the Hub RPC.\n */\n }, {\n key: \"sendWebRTCSignal\",\n value: function sendWebRTCSignal(toPeerId, signal) {\n if (!this.peerId) return;\n this._sendJSONRPC({\n method: 'SendWebRTCSignal',\n params: [{\n fromPeerId: this.peerId,\n toPeerId: toPeerId,\n signal: signal\n }]\n });\n }\n }, {\n key: \"_hubReportWebRTCPeerConnected\",\n value: function _hubReportWebRTCPeerConnected(remotePeerId, direction) {\n if (!this.peerId || !remotePeerId) return;\n try {\n this._sendJSONRPC({\n method: 'WebRTCPeerConnected',\n params: [{\n selfPeerId: this.peerId,\n remotePeerId: String(remotePeerId),\n direction: direction || null\n }]\n });\n } catch (_) {/* ignore */}\n }\n }, {\n key: \"_hubReportWebRTCPeerDisconnected\",\n value: function _hubReportWebRTCPeerDisconnected(remotePeerId) {\n if (!this.peerId || !remotePeerId) return;\n try {\n this._sendJSONRPC({\n method: 'WebRTCPeerDisconnected',\n params: [{\n selfPeerId: this.peerId,\n remotePeerId: String(remotePeerId)\n }]\n });\n } catch (_) {/* ignore */}\n }\n }, {\n key: \"_newRTCSessionId\",\n value: function _newRTCSessionId(peerId) {\n this._rtcSessionCounter += 1;\n return \"\".concat(this.peerId || 'bridge', \":\").concat(peerId, \":\").concat(Date.now().toString(36), \":\").concat(this._rtcSessionCounter.toString(36));\n }\n }, {\n key: \"_nextRTCSignalRevision\",\n value: function _nextRTCSignalRevision(entry) {\n entry.localSignalRevision = (entry.localSignalRevision || 0) + 1;\n return entry.localSignalRevision;\n }\n }, {\n key: \"_withRTCSignalMeta\",\n value: function _withRTCSignalMeta(entry, signal) {\n var overrides = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var existing = signal && signal._fabric && _typeof(signal._fabric) === 'object' ? signal._fabric : {};\n var revision = this._nextRTCSignalRevision(entry);\n return _objectSpread(_objectSpread({}, signal), {}, {\n _fabric: _objectSpread(_objectSpread({\n protocol: 'fabric-webrtc-v2',\n sessionId: entry.localSessionId || null,\n targetSessionId: entry.remoteSessionId || null,\n revision: revision\n }, existing), overrides)\n });\n }\n }, {\n key: \"_getRTCSignalMeta\",\n value: function _getRTCSignalMeta(signal) {\n if (!signal || _typeof(signal) !== 'object') return null;\n var meta = signal._fabric;\n if (!meta || _typeof(meta) !== 'object') return null;\n return {\n protocol: typeof meta.protocol === 'string' ? meta.protocol : null,\n sessionId: typeof meta.sessionId === 'string' ? meta.sessionId : null,\n targetSessionId: typeof meta.targetSessionId === 'string' ? meta.targetSessionId : null,\n revision: Number.isFinite(meta.revision) ? Number(meta.revision) : null\n };\n }\n\n /**\n * Create a native RTCPeerConnection wired to our signaling helpers.\n */\n }, {\n key: \"_createRTCPeerConnection\",\n value: function _createRTCPeerConnection(peerId, entry) {\n var _this3 = this;\n var config = {\n iceServers: [{\n urls: 'stun:stun.l.google.com:19302'\n }]\n };\n var pc = new RTCPeerConnection(config);\n pc.onicecandidate = function (ev) {\n if (ev.candidate) {\n var signal = _this3._withRTCSignalMeta(entry, {\n type: 'ice-candidate',\n candidate: ev.candidate.toJSON()\n });\n _this3.sendWebRTCSignal(peerId, signal);\n }\n };\n pc.onconnectionstatechange = function () {\n if (_this3.settings.debug) {\n console.debug('[BRIDGE]', 'RTCPeerConnection state for', peerId, pc.connectionState);\n }\n if (pc.connectionState === 'failed' || pc.connectionState === 'closed' || pc.connectionState === 'disconnected') {\n _this3.disconnectWebRTCPeer(peerId);\n }\n };\n pc.oniceconnectionstatechange = function () {\n if (_this3.settings.debug) {\n console.debug('[BRIDGE]', 'ICE state for', peerId, pc.iceConnectionState);\n }\n };\n return pc;\n }\n }, {\n key: \"_attachDataChannelHandlers\",\n value: function _attachDataChannelHandlers(peerId, dc) {\n var _this4 = this;\n dc.onopen = function () {\n if (_this4.settings.debug) {\n console.debug('[BRIDGE]', 'WebRTC data channel open to', peerId);\n }\n var entry = _this4._rtcPeers.get(peerId);\n if (entry) entry.dc = dc;\n var existing = _this4.webrtcPeers.get(peerId) || {};\n _this4.webrtcPeers.set(peerId, Object.assign({}, existing, {\n id: peerId,\n status: 'connected',\n direction: entry && entry.initiator ? 'outbound' : 'inbound',\n connectedAt: existing.connectedAt || Date.now(),\n lastSeen: Date.now(),\n connection: dc\n }));\n _this4._connectingPeers[\"delete\"](peerId);\n if (_this4._webrtcConnectTimers.has(peerId)) {\n clearTimeout(_this4._webrtcConnectTimers.get(peerId));\n _this4._webrtcConnectTimers[\"delete\"](peerId);\n }\n _this4._webrtcConnected = true;\n _this4.setState({\n webrtcConnected: true\n });\n _this4._webrtcRewardPeer(peerId, 3, 'data-channel-open');\n _this4._hubReportWebRTCPeerConnected(peerId, entry && entry.initiator ? 'outbound' : 'inbound');\n // Gossip our peer list to the new peer so cross-cluster discovery can begin\n setTimeout(function () {\n return _this4._sendWebRTCPeerGossip(peerId);\n }, 500);\n };\n dc.onmessage = function (ev) {\n _this4.handleWebRTCPeerMessage(peerId, ev.data);\n };\n dc.onclose = function () {\n if (_this4.settings.debug) {\n console.debug('[BRIDGE]', 'WebRTC data channel closed for', peerId);\n }\n _this4.disconnectWebRTCPeer(peerId);\n };\n dc.onerror = function (err) {\n console.error('[BRIDGE]', 'WebRTC data channel error for', peerId, safeIdentityErr(err));\n };\n }\n\n /**\n * Handle an incoming native WebRTC signaling message from another browser.\n * @param {string} fromPeerId\n * @param {Object} signal\n */\n }, {\n key: \"handleIncomingWebRTCSignal\",\n value: function handleIncomingWebRTCSignal(fromPeerId, signal) {\n var _this5 = this;\n if (!signal || _typeof(signal) !== 'object') return;\n var entry = this._rtcPeers.get(fromPeerId);\n if (!entry) {\n entry = {\n pc: null,\n dc: null,\n status: 'new',\n initiator: false,\n metadata: {},\n makingOffer: false,\n ignoreOffer: false,\n localSessionId: this._newRTCSessionId(fromPeerId),\n remoteSessionId: null,\n localSignalRevision: 0,\n remoteSignalRevision: 0,\n // Deterministic role assignment avoids symmetric \"offer glare\".\n // Lower peerId acts as polite peer and resolves collisions.\n polite: this.peerId ? this.peerId < fromPeerId : true\n };\n var _pc = this._createRTCPeerConnection(fromPeerId, entry);\n entry.pc = _pc;\n this._rtcPeers.set(fromPeerId, entry);\n _pc.ondatachannel = function (ev) {\n var dc = ev.channel;\n _this5._attachDataChannelHandlers(fromPeerId, dc);\n entry.dc = dc;\n };\n }\n var _entry = entry,\n pc = _entry.pc;\n if (!entry.signalQueue) entry.signalQueue = Promise.resolve();\n entry.signalQueue = entry.signalQueue.then(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var meta, offerDescription, offerCollision, answer, answerSignal, queued, _iterator2, _step2, cand, candInit, queue;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n meta = _this5._getRTCSignalMeta(signal);\n if (!(!meta || meta.protocol !== 'fabric-webrtc-v2' || !meta.sessionId)) {\n _context.n = 1;\n break;\n }\n console.debug('[BRIDGE]', 'Dropping unversioned/stale WebRTC signal from', fromPeerId);\n return _context.a(2);\n case 1:\n if (!(meta.targetSessionId && meta.targetSessionId !== entry.localSessionId)) {\n _context.n = 2;\n break;\n }\n return _context.a(2);\n case 2:\n if (!(signal.type === 'offer' && signal.sdp)) {\n _context.n = 13;\n break;\n }\n if (!(entry.remoteSessionId && meta.sessionId === entry.remoteSessionId && Number.isFinite(meta.revision) && meta.revision <= entry.remoteSignalRevision)) {\n _context.n = 3;\n break;\n }\n console.debug('[BRIDGE]', 'Dropping stale WebRTC offer revision from', fromPeerId);\n return _context.a(2);\n case 3:\n if (!entry.remoteSessionId || entry.remoteSessionId !== meta.sessionId) {\n entry.remoteSessionId = meta.sessionId;\n entry.remoteSignalRevision = 0;\n _this5._rtcPendingIce[\"delete\"](fromPeerId);\n }\n if (Number.isFinite(meta.revision)) {\n entry.remoteSignalRevision = Math.max(entry.remoteSignalRevision || 0, meta.revision);\n }\n offerDescription = new RTCSessionDescription(signal.sdp);\n if (!(pc.currentRemoteDescription && pc.currentRemoteDescription.sdp === offerDescription.sdp)) {\n _context.n = 4;\n break;\n }\n console.debug('[BRIDGE]', 'Ignoring duplicate WebRTC offer from', fromPeerId);\n return _context.a(2);\n case 4:\n offerCollision = entry.makingOffer || pc.signalingState !== 'stable';\n entry.ignoreOffer = !entry.polite && offerCollision;\n if (!entry.ignoreOffer) {\n _context.n = 5;\n break;\n }\n console.debug('[BRIDGE]', 'Ignoring colliding offer from impolite side:', fromPeerId);\n return _context.a(2);\n case 5:\n if (!(offerCollision && pc.signalingState !== 'stable')) {\n _context.n = 7;\n break;\n }\n _context.n = 6;\n return Promise.all([pc.setLocalDescription({\n type: 'rollback'\n }), pc.setRemoteDescription(offerDescription)]);\n case 6:\n _context.n = 8;\n break;\n case 7:\n _context.n = 8;\n return pc.setRemoteDescription(offerDescription);\n case 8:\n if (!(pc.signalingState !== 'have-remote-offer')) {\n _context.n = 9;\n break;\n }\n console.debug('[BRIDGE]', 'Skipping answer for', fromPeerId, 'in state', pc.signalingState);\n return _context.a(2);\n case 9:\n _context.n = 10;\n return pc.createAnswer();\n case 10:\n answer = _context.v;\n if (!(pc.signalingState !== 'have-remote-offer')) {\n _context.n = 11;\n break;\n }\n console.debug('[BRIDGE]', 'Answer became stale for', fromPeerId, 'in state', pc.signalingState);\n return _context.a(2);\n case 11:\n _context.n = 12;\n return pc.setLocalDescription(answer);\n case 12:\n answerSignal = _this5._withRTCSignalMeta(entry, {\n type: 'answer',\n sdp: pc.localDescription\n }, {\n targetSessionId: entry.remoteSessionId\n });\n _this5.sendWebRTCSignal(fromPeerId, answerSignal);\n queued = _this5._rtcPendingIce.get(fromPeerId);\n if (queued && queued.length) {\n _iterator2 = _createForOfIteratorHelper(queued);\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n cand = _step2.value;\n pc.addIceCandidate(new RTCIceCandidate(cand))[\"catch\"](function (err) {\n console.error('[BRIDGE]', 'Error adding queued ICE candidate from', fromPeerId, safeIdentityErr(err));\n });\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n _this5._rtcPendingIce[\"delete\"](fromPeerId);\n }\n _context.n = 22;\n break;\n case 13:\n if (!(signal.type === 'answer' && signal.sdp)) {\n _context.n = 18;\n break;\n }\n if (!(entry.remoteSessionId && meta.sessionId !== entry.remoteSessionId)) {\n _context.n = 14;\n break;\n }\n console.debug('[BRIDGE]', 'Dropping answer from stale remote session for', fromPeerId);\n return _context.a(2);\n case 14:\n if (!entry.remoteSessionId) {\n entry.remoteSessionId = meta.sessionId;\n }\n if (!(Number.isFinite(meta.revision) && meta.revision <= (entry.remoteSignalRevision || 0))) {\n _context.n = 15;\n break;\n }\n console.debug('[BRIDGE]', 'Dropping stale WebRTC answer revision from', fromPeerId);\n return _context.a(2);\n case 15:\n if (Number.isFinite(meta.revision)) {\n entry.remoteSignalRevision = Math.max(entry.remoteSignalRevision || 0, meta.revision);\n }\n if (!(pc.signalingState !== 'have-local-offer')) {\n _context.n = 16;\n break;\n }\n console.debug('[BRIDGE]', 'Ignoring unexpected WebRTC answer from', fromPeerId, 'in state', pc.signalingState);\n return _context.a(2);\n case 16:\n _context.n = 17;\n return pc.setRemoteDescription(new RTCSessionDescription(signal.sdp));\n case 17:\n _context.n = 22;\n break;\n case 18:\n if (!(signal.type === 'ice-candidate' && signal.candidate)) {\n _context.n = 22;\n break;\n }\n if (!(entry.remoteSessionId && meta.sessionId !== entry.remoteSessionId)) {\n _context.n = 19;\n break;\n }\n console.debug('[BRIDGE]', 'Dropping ICE from stale remote session for', fromPeerId);\n return _context.a(2);\n case 19:\n if (!entry.remoteSessionId) entry.remoteSessionId = meta.sessionId;\n candInit = signal.candidate;\n if (!pc.remoteDescription) {\n _context.n = 21;\n break;\n }\n _context.n = 20;\n return pc.addIceCandidate(new RTCIceCandidate(candInit));\n case 20:\n _context.n = 22;\n break;\n case 21:\n queue = _this5._rtcPendingIce.get(fromPeerId) || [];\n queue.push(candInit);\n _this5._rtcPendingIce.set(fromPeerId, queue);\n case 22:\n return _context.a(2);\n }\n }, _callee);\n })))[\"catch\"](function (err) {\n var msg = err && err.message ? err.message : String(err);\n if (msg.includes('Called in wrong state') || msg.includes('wrong signalingState')) {\n console.debug('[BRIDGE]', 'Ignoring stale WebRTC signal from', fromPeerId, msg);\n return;\n }\n if (signal.type === 'offer') {\n console.error('[BRIDGE]', 'Error handling WebRTC offer from', fromPeerId, msg);\n return;\n }\n if (signal.type === 'answer') {\n console.error('[BRIDGE]', 'Error handling WebRTC answer from', fromPeerId, msg);\n return;\n }\n console.error('[BRIDGE]', 'Error handling WebRTC signal from', fromPeerId, msg);\n });\n }\n\n /**\n * Route server-relayed WebRTC signaling payloads.\n * Returns true when a payload is accepted for local processing.\n * @param {Object} result\n * @returns {boolean}\n */\n }, {\n key: \"_handleWebRTCSignalResult\",\n value: function _handleWebRTCSignalResult(result) {\n if (!result || _typeof(result) !== 'object') return false;\n if (result.type !== 'WebRTCSignal') return false;\n if (!result.signal || !result.fromPeerId) return false;\n\n // Hub relays signaling to all browser clients. Only the intended recipient\n // should process the payload.\n if (result.toPeerId && this.peerId && result.toPeerId !== this.peerId) {\n return false;\n }\n this.handleIncomingWebRTCSignal(result.fromPeerId, result.signal);\n return true;\n }\n\n /**\n * Return the display name for a peer (nickname if set, else actorId).\n * Used in chat to show user-friendly names.\n * @param {string} actorId - Peer id or address from chat.actor.id\n * @returns {string} Nickname if set, otherwise actorId\n */\n }, {\n key: \"getPeerDisplayName\",\n value: function getPeerDisplayName(actorId) {\n var _this$state, _this$state2;\n if (!actorId || typeof actorId !== 'string') return actorId || 'unknown';\n // Mesh-advertised alias (P2P_PEER_ALIAS) preferred over node-local nickname.\n if (this._peerAliasById && this._peerAliasById[actorId]) {\n var meshAlias = String(this._peerAliasById[actorId]).trim();\n if (meshAlias) return meshAlias;\n }\n var ns = ((_this$state = this.state) === null || _this$state === void 0 ? void 0 : _this$state.networkStatus) || ((_this$state2 = this.state) === null || _this$state2 === void 0 ? void 0 : _this$state2.lastNetworkStatus);\n var peers = Array.isArray(ns === null || ns === void 0 ? void 0 : ns.peers) ? ns.peers : [];\n var peer = peers.find(function (p) {\n return p && (p.id === actorId || p.address === actorId);\n });\n var meshFromPeer = peer && (peer.alias || peer.nickname) && String(peer.alias || peer.nickname).trim();\n if (meshFromPeer) return meshFromPeer;\n var nickname = peer && peer.nickname && String(peer.nickname).trim();\n if (nickname) return nickname;\n var xFromFabric = peer && extractPeerXpub(peer);\n if (xFromFabric) return shortenPublicId(xFromFabric, 12, 10);\n if (isLikelyBip32ExtendedKey(actorId)) return shortenPublicId(actorId, 12, 10);\n var wrtc = Array.isArray(ns === null || ns === void 0 ? void 0 : ns.webrtcPeers) ? ns.webrtcPeers : [];\n var w = wrtc.find(function (p) {\n if (!p || _typeof(p) !== 'object') return false;\n if (p.id === actorId) return true;\n var m = p.metadata && _typeof(p.metadata) === 'object' ? p.metadata : {};\n return !!(m.fabricPeerId && String(m.fabricPeerId) === actorId);\n });\n var wx = w && w.metadata && _typeof(w.metadata) === 'object' && w.metadata.xpub ? String(w.metadata.xpub).trim() : '';\n if (wx && isLikelyBip32ExtendedKey(wx)) return shortenPublicId(wx, 12, 10);\n return actorId;\n }\n\n /**\n * Return the hub node's pubkey for display (e.g. in footer).\n * Reads from networkStatus.network or top-level status fields.\n * @returns {string} pubkey, id, or address from network status, or empty string\n */\n }, {\n key: \"getNodePubkey\",\n value: function getNodePubkey() {\n var _this$state3, _this$state4;\n var ns = ((_this$state3 = this.state) === null || _this$state3 === void 0 ? void 0 : _this$state3.networkStatus) || ((_this$state4 = this.state) === null || _this$state4 === void 0 ? void 0 : _this$state4.lastNetworkStatus);\n if (!ns || _typeof(ns) !== 'object') return '';\n var network = ns.network;\n if (network && _typeof(network) === 'object') {\n // Prefer extended public key as the primary node identifier.\n var v = network.xpub || network.pubkey || network.id || network.address;\n if (v) return String(v);\n }\n // Fall back to top-level fields commonly exposed by GetNetworkStatus,\n // including xpub for the node's long-lived identity.\n return ns.xpub || ns.pubkey || ns.id || ns.address || '';\n }\n\n // Global state management methods\n }, {\n key: \"getGlobalState\",\n value: function getGlobalState() {\n return this.globalState;\n }\n }, {\n key: \"updateGlobalState\",\n value: function updateGlobalState(patchMessage) {\n try {\n var next = null;\n if (this._fabricStore && typeof this._fabricStore.PATCH === 'function') {\n next = this._fabricStore.PATCH(patchMessage);\n } else {\n var jsonPatch = [patchMessage];\n var result = applyPatch(this.globalState, jsonPatch, true, false);\n next = result && result.newDocument;\n }\n if (next) {\n this.globalState = next;\n\n // Persist messages when patch touches /messages\n var path = patchMessage && patchMessage.path;\n if (typeof path === 'string' && (path === '/messages' || path.startsWith('/messages/'))) {\n this._persistMessages();\n }\n if (typeof path === 'string' && (path === '/documents' || path.startsWith('/documents/'))) {\n this._persistDocuments();\n }\n\n // Emit a custom event to notify components of state changes\n var event = new CustomEvent('globalStateUpdate', {\n detail: {\n operation: patchMessage,\n globalState: this.globalState\n }\n });\n window.dispatchEvent(event);\n\n // Keep `networkStatus` in sync when the hub pushes wallet-safe Bitcoin fields (`/bitcoin`).\n if (typeof path === 'string' && path === '/bitcoin' && patchMessage.value && _typeof(patchMessage.value) === 'object') {\n this.setState(function (prev) {\n var merge = function merge(ns) {\n if (!ns || _typeof(ns) !== 'object') return ns;\n var prevBtc = ns.bitcoin && _typeof(ns.bitcoin) === 'object' ? ns.bitcoin : {};\n return _objectSpread(_objectSpread({}, ns), {}, {\n bitcoin: _objectSpread(_objectSpread({}, prevBtc), patchMessage.value)\n });\n };\n return {\n networkStatus: merge(prev.networkStatus),\n lastNetworkStatus: merge(prev.lastNetworkStatus)\n };\n });\n }\n } else {\n console.error('[BRIDGE]', 'Failed to apply JSON-Patch.');\n }\n } catch (error) {\n console.error('[BRIDGE]', 'Error updating global state:', safeIdentityErr(error));\n }\n }\n }, {\n key: \"_hasLocalStorage\",\n value: function _hasLocalStorage() {\n try {\n // Accessing window.localStorage can throw under opaque origins (SSR/build contexts).\n return typeof window !== 'undefined' && !!window.localStorage;\n } catch (e) {\n return false;\n }\n }\n }, {\n key: \"_readJSONFromStorage\",\n value: function _readJSONFromStorage(key) {\n var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (!this._hasLocalStorage()) return fallback;\n try {\n var raw = window.localStorage.getItem(key);\n if (!raw) return fallback;\n return JSON.parse(raw);\n } catch (e) {\n console.warn('[BRIDGE]', \"Could not read \".concat(key, \" from storage:\"), safeIdentityErr(e));\n return fallback;\n }\n }\n }, {\n key: \"_writeJSONToStorage\",\n value: function _writeJSONToStorage(key, value) {\n if (!this._hasLocalStorage()) return false;\n try {\n window.localStorage.setItem(key, JSON.stringify(value));\n return true;\n } catch (e) {\n console.warn('[BRIDGE]', \"Could not persist \".concat(key, \":\"), safeIdentityErr(e));\n return false;\n }\n }\n }, {\n key: \"_removeStorageKey\",\n value: function _removeStorageKey(key) {\n if (!this._hasLocalStorage()) return false;\n try {\n window.localStorage.removeItem(key);\n return true;\n } catch (e) {\n console.warn('[BRIDGE]', \"Could not remove \".concat(key, \" from storage:\"), safeIdentityErr(e));\n return false;\n }\n }\n }, {\n key: \"_persistGlobalState\",\n value: function _persistGlobalState() {\n if (!this._fabricStore || typeof this._fabricStore.PUT !== 'function') return;\n try {\n var prev = this._fabricStore.GET('/');\n var base = prev && _typeof(prev) === 'object' && !Array.isArray(prev) ? prev : {};\n this._fabricStore.PUT('/', _objectSpread(_objectSpread({}, base), this.globalState), {\n persist: true\n });\n } catch (e) {}\n }\n }, {\n key: \"_persistDocuments\",\n value: function _persistDocuments() {\n var docs = this.globalState.documents || {};\n this._writeJSONToStorage('fabric:documents', docs);\n if (this._fabricStore && typeof this._fabricStore.PUT === 'function') {\n try {\n this._fabricStore.PUT('/documents', docs, {\n persist: true\n });\n } catch (e) {}\n }\n }\n\n /**\n * Parse chat content as a Distribute Proposal. Returns proposal object or null.\n * Proposals are sent as P2P_CHAT_MESSAGE with JSON content: { type: 'DistributeProposal', documentId, amountSats, config, ... }\n */\n }, {\n key: \"_parseDistributeProposal\",\n value: function _parseDistributeProposal(content, chatEnvelope) {\n if (!content || typeof content !== 'string') return null;\n try {\n var _parsed$document, _parsed$document2;\n var parsed = JSON.parse(content);\n if (!parsed || parsed.type !== 'DistributeProposal') return null;\n var documentId = parsed.documentId || ((_parsed$document = parsed.document) === null || _parsed$document === void 0 ? void 0 : _parsed$document.id) || ((_parsed$document2 = parsed.document) === null || _parsed$document2 === void 0 ? void 0 : _parsed$document2.sha256);\n var amountSats = Number(parsed.amountSats || 0);\n if (!documentId || !Number.isFinite(amountSats) || amountSats <= 0) return null;\n var senderAddress = chatEnvelope && chatEnvelope.actor && chatEnvelope.actor.id || null;\n var created = chatEnvelope && chatEnvelope.object && chatEnvelope.object.created || chatEnvelope && chatEnvelope.created || Date.now();\n return {\n id: \"proposal:\".concat(created, \":\").concat(senderAddress || 'unknown'),\n documentId: documentId,\n amountSats: amountSats,\n config: parsed.config || {},\n document: parsed.document || null,\n documentName: parsed.documentName || parsed.document && parsed.document.name || documentId,\n senderAddress: senderAddress,\n receivedAt: created,\n status: 'pending'\n };\n } catch (e) {\n return null;\n }\n }\n }, {\n key: \"_storeDistributeProposal\",\n value: function _storeDistributeProposal(proposal) {\n if (!proposal || !proposal.id) return;\n this.globalState.distributeProposals = this.globalState.distributeProposals || {};\n this.globalState.distributeProposals[proposal.id] = proposal;\n this._writeJSONToStorage('fabric:distributeProposals', this.globalState.distributeProposals);\n if (this._fabricStore && typeof this._fabricStore.PUT === 'function') {\n try {\n this._fabricStore.PUT('/distributeProposals', this.globalState.distributeProposals, {\n persist: true\n });\n } catch (e) {}\n }\n window.dispatchEvent(new CustomEvent('distributeProposalReceived', {\n detail: {\n proposal: proposal\n }\n }));\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/distributeProposals/\".concat(proposal.id),\n value: proposal\n },\n globalState: this.globalState\n }\n }));\n }\n\n /**\n * Parse chat content as HTLC_KEY_REVEAL (AES decryption key = HTLC preimage).\n * @returns {{ settlementId?: string, documentId: string, preimageHex: string, paymentHashHex?: string }|null}\n */\n }, {\n key: \"_parseHtlcKeyReveal\",\n value: function _parseHtlcKeyReveal(content) {\n if (!content || typeof content !== 'string') return null;\n var trimmed = content.trim();\n if (!trimmed.startsWith('{')) return null;\n try {\n var parsed = JSON.parse(trimmed);\n if (!parsed || parsed.type !== 'HTLC_KEY_REVEAL') return null;\n var documentId = parsed.documentId ? String(parsed.documentId) : '';\n var preimageHex = String(parsed.preimageHex || '').trim().replace(/^0x/i, '');\n if (!documentId || !/^[0-9a-fA-F]{64}$/.test(preimageHex)) return null;\n return {\n settlementId: parsed.settlementId ? String(parsed.settlementId) : undefined,\n documentId: documentId,\n preimageHex: preimageHex.toLowerCase(),\n paymentHashHex: parsed.paymentHashHex ? String(parsed.paymentHashHex).toLowerCase() : undefined\n };\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Apply HTLC_KEY_REVEAL: auto-unlock pending ciphertext when document id matches.\n * @returns {boolean} true when consumed (even if unlock deferred/failed)\n */\n }, {\n key: \"_handleHtlcKeyReveal\",\n value: function _handleHtlcKeyReveal(content) {\n var _this6 = this;\n var reveal = this._parseHtlcKeyReveal(content);\n if (!reveal) return false;\n var docs = this.globalState.documents || {};\n var targetId = reveal.documentId;\n if (!docs[targetId] || !docs[targetId].htlcPendingDecrypt) {\n var alt = Object.keys(docs).find(function (k) {\n var d = docs[k];\n return d && d.htlcPendingDecrypt && (String(d.id) === reveal.documentId || String(d.sha256 || '') === reveal.documentId || String(k) === reveal.documentId);\n });\n if (alt) targetId = alt;\n }\n var run = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var result, _t;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n _context2.p = 0;\n _context2.n = 1;\n return _this6.unlockHtlcEncryptedDocument(targetId, reveal.preimageHex);\n case 1:\n result = _context2.v;\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('htlcKeyRevealApplied', {\n detail: {\n documentId: targetId,\n settlementId: reveal.settlementId,\n ok: !!(result && result.ok),\n error: result && result.error\n }\n }));\n }\n _context2.n = 3;\n break;\n case 2:\n _context2.p = 2;\n _t = _context2.v;\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('htlcKeyRevealApplied', {\n detail: {\n documentId: targetId,\n settlementId: reveal.settlementId,\n ok: false,\n error: _t && _t.message ? _t.message : String(_t)\n }\n }));\n }\n case 3:\n return _context2.a(2);\n }\n }, _callee2, null, [[0, 2]]);\n }));\n return function run() {\n return _ref2.apply(this, arguments);\n };\n }();\n // Ciphertext may arrive slightly after the reveal; retry briefly.\n var tryUnlock = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var doc;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n doc = _this6.globalState.documents && _this6.globalState.documents[targetId];\n if (!(doc && doc.htlcPendingDecrypt)) {\n _context4.n = 2;\n break;\n }\n _context4.n = 1;\n return run();\n case 1:\n return _context4.a(2);\n case 2:\n setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var again;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n again = _this6.globalState.documents && _this6.globalState.documents[targetId];\n if (!(again && again.htlcPendingDecrypt)) {\n _context3.n = 2;\n break;\n }\n _context3.n = 1;\n return run();\n case 1:\n _context3.n = 3;\n break;\n case 2:\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('htlcKeyRevealApplied', {\n detail: {\n documentId: targetId,\n settlementId: reveal.settlementId,\n ok: false,\n error: 'No pending HTLC ciphertext for this document yet.'\n }\n }));\n }\n case 3:\n return _context3.a(2);\n }\n }, _callee3);\n })), 800);\n case 3:\n return _context4.a(2);\n }\n }, _callee4);\n }));\n return function tryUnlock() {\n return _ref3.apply(this, arguments);\n };\n }();\n tryUnlock();\n return true;\n }\n\n /**\n * Structured federation invite / response in P2P chat JSON (v1).\n * @param {string} content\n * @param {object|null} chatEnvelope\n * @returns {boolean} true when handled (do not also treat as plain chat)\n */\n }, {\n key: \"_tryDispatchFederationContractInviteFromChat\",\n value: function _tryDispatchFederationContractInviteFromChat(content, chatEnvelope) {\n if (typeof window === 'undefined') return false;\n var inv = parseFederationContractInvite(content);\n if (inv) {\n var toPeerId = chatEnvelope && chatEnvelope.actor && chatEnvelope.actor.id ? String(chatEnvelope.actor.id) : '';\n window.dispatchEvent(new CustomEvent('fabric:federationContractInvite', {\n detail: Object.assign({}, inv, {\n toPeerId: toPeerId\n })\n }));\n return true;\n }\n var res = parseFederationContractInviteResponse(content);\n if (res) {\n var fromPeerId = chatEnvelope && chatEnvelope.actor && chatEnvelope.actor.id ? String(chatEnvelope.actor.id) : '';\n window.dispatchEvent(new CustomEvent('fabric:federationContractInviteResponse', {\n detail: Object.assign({}, res, {\n fromPeerId: fromPeerId\n })\n }));\n return true;\n }\n return false;\n }\n\n /**\n * Collaboration invite in P2P chat (prefix + JSON payload), emitted by hubCollaboration relay.\n * Dispatches a modal event and bell notification with accept/reject URLs.\n * @param {string} content\n * @param {object|null} chatEnvelope\n * @returns {boolean}\n */\n }, {\n key: \"_tryDispatchCollaborationInviteFromChat\",\n value: function _tryDispatchCollaborationInviteFromChat(content, chatEnvelope) {\n if (typeof window === 'undefined' || typeof content !== 'string' || !content.startsWith(COLLAB_INVITE_PREFIX)) return false;\n try {\n var payload = JSON.parse(content.slice(COLLAB_INVITE_PREFIX.length));\n if (!payload || !payload.invitationId || !payload.acceptUrl || !payload.declineUrl) return false;\n var fromPeerId = chatEnvelope && chatEnvelope.actor && chatEnvelope.actor.id ? String(chatEnvelope.actor.id) : '';\n var peerIdentity = payload && payload.recipientPeerIdentity ? String(payload.recipientPeerIdentity) : '';\n var detail = Object.assign({}, payload, {\n fromPeerId: fromPeerId\n });\n window.dispatchEvent(new CustomEvent('fabric:collaborationInvitation', {\n detail: detail\n }));\n try {\n toast.info('Collaboration invite received', {\n header: peerIdentity ? \"Invite for \".concat(peerIdentity) : 'Collaboration'\n });\n } catch (e) {/* ignore */}\n try {\n pushUiNotification({\n id: \"collab-invite-\".concat(String(payload.invitationId)),\n kind: 'collaboration_invite',\n title: 'Collaboration invite',\n subtitle: fromPeerId ? \"From peer \".concat(fromPeerId) : peerIdentity ? \"Invite for \".concat(peerIdentity) : 'Review and respond',\n href: '/settings/collaboration',\n copyText: \"\".concat(String(payload.acceptUrl), \"\\n\").concat(String(payload.declineUrl))\n });\n } catch (e) {/* ignore */}\n return true;\n } catch (e) {\n return false;\n }\n }\n\n /** @returns {import('@fabric/core/types/key')|null} Key with private for document encrypt/decrypt */\n }, {\n key: \"_getDocumentKey\",\n value: function _getDocumentKey() {\n var key = this.settings.signingKey || this.key;\n if (!key || typeof key.encrypt !== 'function' || typeof key.decrypt !== 'function') return null;\n if (key[\"private\"] == null) return null;\n return key;\n }\n\n /** @returns {boolean} True if we have a key for document encryption (required for adding files). */\n }, {\n key: \"hasDocumentEncryptionKey\",\n value: function hasDocumentEncryptionKey() {\n return !!this._getDocumentKey();\n }\n }, {\n key: \"_encryptContent\",\n value: function _encryptContent(contentBase64) {\n var key = this._getDocumentKey();\n if (!key) return null;\n try {\n return key.encrypt(contentBase64);\n } catch (e) {\n console.warn('[BRIDGE]', 'Document encrypt failed:', safeIdentityErr(e));\n return null;\n }\n }\n }, {\n key: \"_decryptContent\",\n value: function _decryptContent(contentEncrypted) {\n var key = this._getDocumentKey();\n if (!key || !contentEncrypted) return null;\n try {\n return key.decrypt(contentEncrypted);\n } catch (e) {\n console.warn('[BRIDGE]', 'Document decrypt failed:', safeIdentityErr(e));\n return null;\n }\n }\n\n /**\n * Resolve the current identity key for this Bridge instance.\n * Prefers the signing key (auth) and falls back to the legacy `this.key` when present.\n * @returns {import('@fabric/core/types/key')|null}\n */\n }, {\n key: \"_getIdentityKey\",\n value: function _getIdentityKey() {\n var key = this.settings.signingKey || this.key;\n if (!key || !key.id) return null;\n return key;\n }\n\n /**\n * Resolve the stable identity id for this Bridge instance.\n * @returns {string|null}\n */\n }, {\n key: \"_getIdentityId\",\n value: function _getIdentityId() {\n // Prefer an extended public key (xpub) as the stable public identifier,\n // falling back to shorter ids only when necessary.\n var auth = this.props && this.props.auth;\n if (auth) {\n if (auth.xpub) return auth.xpub;\n if (auth.id) return auth.id;\n }\n var key = this._getIdentityKey();\n if (!key) return null;\n if (key.xpub) return key.xpub;\n return key.id || null;\n }\n\n /**\n * True when a private signing identity is available in-memory.\n * @returns {boolean}\n */\n }, {\n key: \"_hasUnlockedIdentity\",\n value: function _hasUnlockedIdentity() {\n var auth = this.props && this.props.auth;\n if (auth && auth.xprv) return true;\n var key = this._getIdentityKey();\n if (key && key.xprv) return true;\n return false;\n }\n\n /**\n * Whether chat-capable identity material is currently available.\n * @returns {boolean}\n */\n }, {\n key: \"hasUnlockedIdentity\",\n value: function hasUnlockedIdentity() {\n return this._hasUnlockedIdentity();\n }\n }, {\n key: \"_notifyIdentityUnlockRequired\",\n value: function _notifyIdentityUnlockRequired(message) {\n var auth = this.props && this.props.auth;\n var resolved = typeof message === 'string' && message.trim() ? message : fabricIdentityChatDisabledReasonPlain(auth);\n try {\n window.dispatchEvent(new CustomEvent('fabric:chatWarning', {\n detail: {\n reason: 'identity-locked',\n message: resolved\n }\n }));\n } catch (e) {}\n if (this.props && typeof this.props.onRequireUnlock === 'function') {\n var now = Date.now();\n if (this._lastIdentityUnlockUiNotifyAt && now - this._lastIdentityUnlockUiNotifyAt < 2500) {\n return;\n }\n this._lastIdentityUnlockUiNotifyAt = now;\n try {\n this.props.onRequireUnlock();\n } catch (e) {}\n }\n }\n\n /**\n * Find a document row when the route id may differ from the map key (opaque id vs content hash).\n * @param {string} logicalId\n * @returns {{ key: string, doc: object }|null}\n */\n }, {\n key: \"_resolveDocumentRow\",\n value: function _resolveDocumentRow(logicalId) {\n if (!logicalId || !this.globalState || !this.globalState.documents) return null;\n var id = String(logicalId).trim();\n if (!id) return null;\n var map = this.globalState.documents;\n if (map[id]) return {\n key: id,\n doc: map[id]\n };\n var lower = id.toLowerCase();\n if (map[lower]) return {\n key: lower,\n doc: map[lower]\n };\n for (var _i = 0, _Object$entries = Object.entries(map); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n k = _Object$entries$_i[0],\n d = _Object$entries$_i[1];\n if (!d || _typeof(d) !== 'object') continue;\n var did = d.id != null ? String(d.id) : '';\n var sha = d.sha256 != null ? String(d.sha256) : d.sha != null ? String(d.sha) : '';\n if (did === id || sha === id || did.toLowerCase() === lower || sha.toLowerCase() === lower) {\n return {\n key: k,\n doc: d\n };\n }\n }\n return null;\n }\n\n /**\n * Return document content (base64) for display or upload. Decrypts if stored encrypted.\n * @param {string} id - Document id\n * @returns {string|null} contentBase64 or null\n */\n }, {\n key: \"getDecryptedDocumentContent\",\n value: function getDecryptedDocumentContent(id) {\n if (!id) return null;\n var row = this._resolveDocumentRow(id);\n if (!row || !row.doc) return null;\n var doc = row.doc;\n // For encrypted documents, only ever return plaintext when we have a live document key.\n if (doc.contentEncrypted) {\n var decrypted = this._decryptContent(doc.contentEncrypted);\n return decrypted || null;\n }\n // For unencrypted documents, stored as plain contentBase64.\n if (doc.contentBase64) return doc.contentBase64;\n return null;\n }\n\n /** Normalize incoming doc for storage: encrypt content if we have a key, store only encrypted or plain.\n * If we already have a local alias for this document (by sha256), prefer that id over a backend sha id.\n */\n }, {\n key: \"_storeDocument\",\n value: function _storeDocument(id, doc) {\n if (!doc || !id) return;\n this.globalState.documents = this.globalState.documents || {};\n var targetId = id;\n var sha = doc.sha256 || doc.sha || null;\n\n // If hub sends us a sha-based id but we previously created a local Actor id with the same sha,\n // re-use the local Actor id so URLs remain opaque.\n if (sha && id === sha) {\n for (var _i2 = 0, _Object$entries2 = Object.entries(this.globalState.documents); _i2 < _Object$entries2.length; _i2++) {\n var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),\n localId = _Object$entries2$_i[0],\n existingDoc = _Object$entries2$_i[1];\n if (existingDoc && (existingDoc.sha256 === sha || existingDoc.sha === sha) && localId !== id) {\n targetId = localId;\n break;\n }\n }\n }\n var existing = this.globalState.documents[targetId] || {};\n var merged = _objectSpread(_objectSpread(_objectSpread({}, existing), doc), {}, {\n id: targetId\n });\n var hasContent = merged.contentBase64 != null;\n var encrypted = hasContent ? this._encryptContent(merged.contentBase64) : null;\n var toStore = _objectSpread({}, merged);\n if (encrypted != null) {\n toStore.contentEncrypted = encrypted;\n delete toStore.contentBase64;\n } else if (!hasContent && merged.contentEncrypted != null) {\n toStore.contentEncrypted = merged.contentEncrypted;\n delete toStore.contentBase64;\n }\n this.globalState.documents[targetId] = toStore;\n\n // Clean up any old sha-only entry if we moved to a local alias id.\n if (targetId !== id && this.globalState.documents[id]) {\n delete this.globalState.documents[id];\n }\n }\n }, {\n key: \"_pruneP2pFileReceivers\",\n value: function _pruneP2pFileReceivers() {\n var TTL = 10 * 60 * 1000;\n var now = Date.now();\n var _iterator3 = _createForOfIteratorHelper(this._p2pFileReceivers),\n _step3;\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var _step3$value = _slicedToArray(_step3.value, 2),\n k = _step3$value[0],\n v = _step3$value[1];\n if (!v || now - (v.startedAt || 0) > TTL) this._p2pFileReceivers[\"delete\"](k);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n }, {\n key: \"_resolveDocumentTargetId\",\n value: function _resolveDocumentTargetId(rawId, meta) {\n var targetId = rawId;\n var sha = meta && (meta.sha256 || meta.sha);\n this.globalState.documents = this.globalState.documents || {};\n if (sha && rawId === sha) {\n for (var _i3 = 0, _Object$entries3 = Object.entries(this.globalState.documents); _i3 < _Object$entries3.length; _i3++) {\n var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i3], 2),\n localId = _Object$entries3$_i[0],\n existingDoc = _Object$entries3$_i[1];\n if (existingDoc && (existingDoc.sha256 === sha || existingDoc.sha === sha) && localId !== rawId) {\n targetId = localId;\n break;\n }\n }\n }\n return targetId;\n }\n }, {\n key: \"_decodeBase64ToUint8\",\n value: function _decodeBase64ToUint8(b64) {\n var bin = atob(b64);\n var u = new Uint8Array(bin.length);\n for (var i = 0; i < bin.length; i++) u[i] = bin.charCodeAt(i);\n return u;\n }\n }, {\n key: \"_uint8ToBase64\",\n value: function _uint8ToBase64(u8) {\n var bin = '';\n for (var i = 0; i < u8.length; i++) bin += String.fromCharCode(u8[i]);\n return btoa(bin);\n }\n }, {\n key: \"_bytesToHex\",\n value: function _bytesToHex(buf) {\n var u8 = buf instanceof Uint8Array ? buf : new Uint8Array(buf);\n var s = '';\n for (var i = 0; i < u8.length; i++) {\n var h = u8[i].toString(16);\n s += h.length === 1 ? \"0\".concat(h) : h;\n }\n return s;\n }\n }, {\n key: \"_hexToUint8\",\n value: function _hexToUint8(hex) {\n var s = String(hex).trim().toLowerCase();\n if (!/^[0-9a-f]{64}$/.test(s)) return null;\n var u = new Uint8Array(32);\n for (var i = 0; i < 32; i++) u[i] = parseInt(s.slice(i * 2, i * 2 + 2), 16);\n return u;\n }\n }, {\n key: \"_handleP2pFileChunk\",\n value: function _handleP2pFileChunk(doc, part) {\n var _this7 = this;\n var transferId = String(part.transferId || '');\n var index = Number(part.index);\n var total = Number(part.total);\n if (!transferId || !Number.isFinite(index) || !Number.isFinite(total) || total < 1 || index < 0 || index >= total) {\n console.warn('[BRIDGE] Invalid P2P file part metadata');\n return;\n }\n this._pruneP2pFileReceivers();\n var state = this._p2pFileReceivers.get(transferId);\n if (!state) {\n state = {\n transferId: transferId,\n total: total,\n chunks: new Array(total),\n received: 0,\n startedAt: Date.now(),\n meta: null,\n htlcFileV1: null\n };\n this._p2pFileReceivers.set(transferId, state);\n }\n if (state.total !== total) {\n console.warn('[BRIDGE] P2P file part total mismatch');\n return;\n }\n if (state.chunks[index]) return;\n if (index === 0) {\n state.meta = {\n id: doc.id,\n name: doc.name,\n mime: doc.mime,\n size: doc.size,\n sha256: doc.sha256,\n created: doc.created,\n target: doc.target,\n htlcSettlement: doc.htlcSettlement,\n deliveryFabricId: doc.deliveryFabricId,\n fileRelayTtl: doc.fileRelayTtl\n };\n if (doc.htlcFileV1 && Number(doc.htlcFileV1.v) === 1 && doc.htlcFileV1.iv && doc.htlcFileV1.paymentHashHex) {\n state.htlcFileV1 = doc.htlcFileV1;\n }\n }\n state.chunks[index] = doc.contentBase64;\n state.received++;\n if (state.received < state.total) return;\n this._p2pFileReceivers[\"delete\"](transferId);\n var pieces = state.chunks.map(function (b64) {\n return _this7._decodeBase64ToUint8(b64);\n });\n var len = pieces.reduce(function (a, u) {\n return a + u.length;\n }, 0);\n var merged = new Uint8Array(len);\n var o = 0;\n var _iterator4 = _createForOfIteratorHelper(pieces),\n _step4;\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var u = _step4.value;\n merged.set(u, o);\n o += u.length;\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n var rawId = state.meta.id;\n var targetId = this._resolveDocumentTargetId(rawId, state.meta);\n if (state.htlcFileV1) {\n var h = state.htlcFileV1;\n this.globalState.documents = this.globalState.documents || {};\n var existing = this.globalState.documents[targetId] || {};\n this.globalState.documents[targetId] = _objectSpread(_objectSpread(_objectSpread({}, existing), state.meta), {}, {\n id: targetId,\n htlcPendingDecrypt: true,\n htlcPaymentHashHex: String(h.paymentHashHex).toLowerCase(),\n htlcIvBase64: h.iv,\n htlcCiphertextBase64: this._uint8ToBase64(merged),\n receivedFromPeer: true\n });\n delete this.globalState.documents[targetId].contentBase64;\n if (targetId !== rawId && this.globalState.documents[rawId]) delete this.globalState.documents[rawId];\n this._persistDocuments();\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/documents/\".concat(targetId),\n value: this.globalState.documents[targetId]\n },\n globalState: this.globalState\n }\n }));\n return;\n }\n var contentBase64 = this._uint8ToBase64(merged);\n this._storeDocument(targetId, _objectSpread(_objectSpread({}, state.meta), {}, {\n id: rawId,\n contentBase64: contentBase64,\n receivedFromPeer: true\n }));\n this._persistDocuments();\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/documents/\".concat(targetId),\n value: this.globalState.documents[targetId]\n },\n globalState: this.globalState\n }\n }));\n }\n\n /**\n * After inventory HTLC phase 2, ciphertext is stored locally until the buyer supplies the\n * same 32-byte preimage used for the on-chain hashlock (content key K for sealed docs).\n * Prefer automatic unlock via HTLC_KEY_REVEAL after payment verification.\n * @param {string} documentId\n * @param {string} preimageHex - 64 hex chars\n * @returns {Promise<{ ok: boolean, error?: string }>}\n */\n }, {\n key: \"unlockHtlcEncryptedDocument\",\n value: (function () {\n var _unlockHtlcEncryptedDocument = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(documentId, preimageHex) {\n var id, doc, preimageU8, hashBuf, hashHex, expected, iv, ct, key, plain, contentBase64, cleaned, _t2, _t3;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.p = _context5.n) {\n case 0:\n if (!(typeof crypto === 'undefined' || !crypto.subtle)) {\n _context5.n = 1;\n break;\n }\n return _context5.a(2, {\n ok: false,\n error: 'Web Crypto API not available in this context.'\n });\n case 1:\n id = documentId;\n doc = this.globalState.documents && this.globalState.documents[id];\n if (!(!doc || !doc.htlcPendingDecrypt)) {\n _context5.n = 2;\n break;\n }\n return _context5.a(2, {\n ok: false,\n error: 'Document is not waiting for an HTLC preimage.'\n });\n case 2:\n preimageU8 = this._hexToUint8(preimageHex);\n if (preimageU8) {\n _context5.n = 3;\n break;\n }\n return _context5.a(2, {\n ok: false,\n error: 'Preimage must be 64 hex characters (32 bytes).'\n });\n case 3:\n _context5.n = 4;\n return crypto.subtle.digest('SHA-256', preimageU8);\n case 4:\n hashBuf = _context5.v;\n hashHex = this._bytesToHex(new Uint8Array(hashBuf)).toLowerCase();\n expected = String(doc.htlcPaymentHashHex || '').toLowerCase();\n if (!(!expected || hashHex !== expected)) {\n _context5.n = 5;\n break;\n }\n return _context5.a(2, {\n ok: false,\n error: 'Preimage does not match the HTLC payment hash for this transfer.'\n });\n case 5:\n _context5.p = 5;\n iv = this._decodeBase64ToUint8(doc.htlcIvBase64);\n ct = this._decodeBase64ToUint8(doc.htlcCiphertextBase64);\n _context5.n = 7;\n break;\n case 6:\n _context5.p = 6;\n _t2 = _context5.v;\n return _context5.a(2, {\n ok: false,\n error: 'Stored ciphertext or IV is invalid.'\n });\n case 7:\n _context5.n = 8;\n return crypto.subtle.importKey('raw', preimageU8, {\n name: 'AES-GCM'\n }, false, ['decrypt']);\n case 8:\n key = _context5.v;\n _context5.p = 9;\n _context5.n = 10;\n return crypto.subtle.decrypt({\n name: 'AES-GCM',\n iv: iv,\n tagLength: 128\n }, key, ct);\n case 10:\n plain = _context5.v;\n _context5.n = 12;\n break;\n case 11:\n _context5.p = 11;\n _t3 = _context5.v;\n return _context5.a(2, {\n ok: false,\n error: 'Decryption failed (wrong key or corrupted ciphertext).'\n });\n case 12:\n contentBase64 = this._uint8ToBase64(new Uint8Array(plain));\n cleaned = _objectSpread({}, doc);\n delete cleaned.htlcPendingDecrypt;\n delete cleaned.htlcPaymentHashHex;\n delete cleaned.htlcIvBase64;\n delete cleaned.htlcCiphertextBase64;\n this._storeDocument(id, _objectSpread(_objectSpread({}, cleaned), {}, {\n contentBase64: contentBase64,\n receivedFromPeer: true\n }));\n this._persistDocuments();\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/documents/\".concat(id),\n value: this.globalState.documents[id]\n },\n globalState: this.globalState\n }\n }));\n return _context5.a(2, {\n ok: true\n });\n }\n }, _callee5, this, [[9, 11], [5, 6]]);\n }));\n function unlockHtlcEncryptedDocument(_x, _x2) {\n return _unlockHtlcEncryptedDocument.apply(this, arguments);\n }\n return unlockHtlcEncryptedDocument;\n }())\n }, {\n key: \"_persistMessages\",\n value: function _persistMessages() {\n var messages = this.globalState.messages || {};\n var keys = Object.keys(messages).filter(function (k) {\n var m = messages[k];\n return !(m && isDelegationSignatureRequestActivity(m));\n });\n var filtered = {};\n var _iterator5 = _createForOfIteratorHelper(keys),\n _step5;\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var k = _step5.value;\n filtered[k] = messages[k];\n }\n // Cap at 500 messages to avoid localStorage bloat\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n var toStore = keys.length > 500 ? Object.fromEntries(keys.sort(function (a, b) {\n var ta = filtered[a] && filtered[a].object && filtered[a].object.created || 0;\n var tb = filtered[b] && filtered[b].object && filtered[b].object.created || 0;\n return ta - tb;\n }).slice(-500).map(function (k) {\n return [k, filtered[k]];\n })) : filtered;\n if (!this._messageCollection) this._messageCollection = new BridgeMessageCollection();\n this._messageCollection.loadMap(toStore);\n this.globalState.messages = this._messageCollection.exportMap();\n this._writeJSONToStorage('fabric:messages', this.globalState.messages);\n if (this._fabricStore && typeof this._fabricStore.PUT === 'function') {\n try {\n this._fabricStore.PUT('/messages', this.globalState.messages, {\n persist: true\n });\n } catch (e) {}\n }\n }\n }, {\n key: \"_onClientBalanceUpdate\",\n value: function _onClientBalanceUpdate(ev) {\n try {\n var d = ev && ev.detail;\n if (!d) return;\n var walletId = String(d.walletId || 'default');\n var balanceSats = Math.round(Number(d.balanceSats));\n if (!Number.isFinite(balanceSats)) return;\n var confirmedRaw = d.confirmedSats;\n var unconfirmedRaw = d.unconfirmedSats;\n var hasSplit = confirmedRaw != null && unconfirmedRaw != null;\n var conf = hasSplit ? Math.round(Number(confirmedRaw)) : balanceSats;\n var unconf = hasSplit ? Math.round(Number(unconfirmedRaw)) : 0;\n var confSafe = Number.isFinite(conf) ? conf : balanceSats;\n var unconfSafe = Number.isFinite(unconf) ? unconf : 0;\n var hint = d.hintTxid ? String(d.hintTxid).trim() : '';\n if (!this._walletBalanceBaseline.has(walletId)) {\n this._walletBalanceBaseline.add(walletId);\n this._lastWalletBalanceTotal[walletId] = balanceSats;\n this._lastWalletConfirmedSats[walletId] = confSafe;\n this._lastWalletUnconfirmedSats[walletId] = unconfSafe;\n return;\n }\n var prevTotal = this._lastWalletBalanceTotal[walletId];\n var prevC = this._lastWalletConfirmedSats[walletId];\n var prevU = this._lastWalletUnconfirmedSats[walletId];\n if (!Number.isFinite(prevTotal)) {\n this._lastWalletBalanceTotal[walletId] = balanceSats;\n this._lastWalletConfirmedSats[walletId] = confSafe;\n this._lastWalletUnconfirmedSats[walletId] = unconfSafe;\n return;\n }\n var dUnconf = 0;\n var dConf = 0;\n if (hasSplit) {\n dUnconf = unconfSafe - (Number.isFinite(prevU) ? prevU : 0);\n dConf = confSafe - (Number.isFinite(prevC) ? prevC : 0);\n }\n if (hasSplit && dUnconf > 0) {\n this._appendPrivateWalletReceiveNotice({\n phase: 'mempool',\n deltaSats: dUnconf,\n balanceSats: balanceSats,\n confirmedSats: confSafe,\n unconfirmedSats: unconfSafe,\n walletId: walletId,\n txid: hint\n });\n }\n if (hasSplit && dConf > 0) {\n this._appendPrivateWalletReceiveNotice({\n phase: 'confirmed',\n deltaSats: dConf,\n balanceSats: balanceSats,\n confirmedSats: confSafe,\n unconfirmedSats: unconfSafe,\n walletId: walletId,\n txid: hint\n });\n }\n var totalIncreased = balanceSats > prevTotal;\n if (totalIncreased && (!hasSplit || dUnconf <= 0 && dConf <= 0)) {\n this._appendPrivateWalletReceiveNotice({\n phase: 'aggregate',\n deltaSats: balanceSats - prevTotal,\n balanceSats: balanceSats,\n confirmedSats: confSafe,\n unconfirmedSats: unconfSafe,\n walletId: walletId,\n txid: hint\n });\n }\n this._lastWalletBalanceTotal[walletId] = balanceSats;\n this._lastWalletConfirmedSats[walletId] = confSafe;\n this._lastWalletUnconfirmedSats[walletId] = unconfSafe;\n } catch (e) {/* ignore */}\n }\n\n /**\n * Local-only activity + toast + in-app notification list on Activities (bell, top bar).\n * @param {object} p\n * @param {'mempool'|'confirmed'|'aggregate'} p.phase\n */\n }, {\n key: \"_appendPrivateWalletReceiveNotice\",\n value: function _appendPrivateWalletReceiveNotice(p) {\n if (typeof window === 'undefined' || !p) return;\n var _p$phase = p.phase,\n phase = _p$phase === void 0 ? 'aggregate' : _p$phase,\n deltaSats = p.deltaSats,\n balanceSats = p.balanceSats,\n confirmedSats = p.confirmedSats,\n unconfirmedSats = p.unconfirmedSats,\n walletId = p.walletId,\n txid = p.txid;\n var d = Math.round(Number(deltaSats));\n if (!Number.isFinite(d) || d <= 0) return;\n var id = \"client-wallet-\".concat(phase, \"-\").concat(Date.now(), \"-\").concat(Math.random().toString(36).slice(2, 10));\n var created = new Date().toISOString();\n var totalLabel = formatSatsDisplay(balanceSats);\n var confU = \"\".concat(formatSatsDisplay(confirmedSats), \" conf \\xB7 \").concat(formatSatsDisplay(unconfirmedSats), \" unconf\");\n var content;\n var title;\n var subtitle;\n var toastHeader;\n var toastMsg;\n var kind;\n if (phase === 'mempool') {\n content = \"Unconfirmed +\".concat(formatSatsDisplay(d), \" sats to your wallet (mempool). \").concat(confU, \". Total ~\").concat(totalLabel, \".\");\n title = 'Incoming (mempool)';\n subtitle = \"+\".concat(formatSatsDisplay(d), \" unconfirmed \\xB7 \").concat(totalLabel, \" total\");\n toastHeader = 'Wallet';\n toastMsg = \"+\".concat(formatSatsDisplay(d), \" unconfirmed (mempool)\");\n kind = 'wallet_receive_mempool';\n } else if (phase === 'confirmed') {\n content = \"Confirmed +\".concat(formatSatsDisplay(d), \" sats. \").concat(confU, \". Total \").concat(totalLabel, \".\");\n title = 'Incoming confirmed';\n subtitle = \"+\".concat(formatSatsDisplay(d), \" confirmed \\xB7 \").concat(formatSatsDisplay(confirmedSats), \" conf\");\n toastHeader = 'Wallet';\n toastMsg = \"+\".concat(formatSatsDisplay(d), \" confirmed on-chain\");\n kind = 'wallet_receive_confirmed';\n } else {\n content = \"Your wallet balance increased by +\".concat(formatSatsDisplay(d), \" (\").concat(totalLabel, \" total).\");\n title = 'Incoming payment';\n subtitle = \"+\".concat(formatSatsDisplay(d), \" \\xB7 \").concat(totalLabel, \" balance\");\n toastHeader = 'Wallet';\n toastMsg = \"+\".concat(formatSatsDisplay(d), \" received\");\n kind = 'wallet_receive';\n }\n this.globalState.messages = this.globalState.messages || {};\n this.globalState.messages[id] = {\n type: 'CLIENT_NOTICE',\n object: {\n content: content,\n created: created,\n txid: txid || undefined,\n kind: kind,\n phase: phase,\n localOnly: true\n }\n };\n this._persistMessages();\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/messages/\".concat(id),\n value: this.globalState.messages[id]\n },\n globalState: this.globalState\n }\n }));\n try {\n toast.success(toastMsg, {\n header: toastHeader,\n duration: 5500\n });\n } catch (e) {/* ignore */}\n try {\n var uf = loadHubUiFeatureFlags();\n pushUiNotification({\n id: \"wallet-\".concat(phase, \"-\").concat(walletId, \"-\").concat(Date.now()),\n kind: kind,\n title: title,\n subtitle: subtitle,\n href: uf.bitcoinPayments ? '/payments' : undefined,\n copyText: txid || undefined\n });\n } catch (e) {/* ignore */}\n }\n\n /**\n * Invoice L1 verify flow (see Invoice.js) — private CLIENT_NOTICE + toast + Activities in-app list.\n */\n }, {\n key: \"applyL1InvoicePaymentActivity\",\n value: function applyL1InvoicePaymentActivity(detail) {\n if (typeof window === 'undefined' || !detail || _typeof(detail) !== 'object') return;\n var txid = String(detail.txid || '').trim();\n if (!txid) return;\n var kind = detail.kind === 'confirmed' ? 'confirmed' : 'unconfirmed';\n var dedupeKey = \"\".concat(kind, \":\").concat(txid);\n if (this._l1InvoiceActivityKeys.has(dedupeKey)) return;\n this._l1InvoiceActivityKeys.add(dedupeKey);\n var label = detail.label ? String(detail.label) : 'Invoice';\n var created = new Date().toISOString();\n var content = kind === 'confirmed' ? \"L1 invoice payment confirmed\".concat(detail.confirmations ? \" (\".concat(detail.confirmations, \" confirmations)\") : '', \": \").concat(label) : \"L1 invoice payment seen (mempool): \".concat(label);\n var id = \"client-l1-inv-\".concat(kind, \"-\").concat(txid.slice(0, 18));\n this.globalState.messages = this.globalState.messages || {};\n this.globalState.messages[id] = {\n type: 'CLIENT_NOTICE',\n object: {\n content: content,\n created: created,\n txid: txid,\n kind: 'l1_invoice',\n localOnly: true\n }\n };\n this._persistMessages();\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/messages/\".concat(id),\n value: this.globalState.messages[id]\n },\n globalState: this.globalState\n }\n }));\n try {\n toast.success(kind === 'confirmed' ? 'Invoice paid on-chain' : 'Invoice payment detected', {\n duration: 5000,\n header: label.length > 36 ? \"\".concat(label.slice(0, 36), \"\\u2026\") : label\n });\n } catch (e) {/* ignore */}\n try {\n var uf = loadHubUiFeatureFlags();\n pushUiNotification({\n id: \"l1-inv-\".concat(dedupeKey),\n kind: 'l1_invoice',\n title: kind === 'confirmed' ? 'Invoice confirmed' : 'Invoice in mempool',\n subtitle: \"\".concat(label, \" \\xB7 \").concat(txid.slice(0, 14), \"\\u2026\"),\n href: uf.bitcoinExplorer ? \"/services/bitcoin/transactions/\".concat(encodeURIComponent(txid)) : undefined,\n copyText: txid\n });\n } catch (e) {/* ignore */}\n }\n\n /**\n * Activity stream row for Hub delegation signing (same panel as public chat; channel #delegation).\n */\n }, {\n key: \"_emitDelegationSignRequestActivity\",\n value: function _emitDelegationSignRequestActivity(_ref5) {\n var messageId = _ref5.messageId,\n preview = _ref5.preview,\n purpose = _ref5.purpose;\n if (!messageId) return;\n var id = \"delegation-\".concat(messageId);\n var actorId = this._getIdentityId() || 'local';\n var created = Date.now();\n this.globalState.messages = this.globalState.messages || {};\n this.globalState.messages[id] = {\n type: DELEGATION_SIGNATURE_REQUEST,\n actor: {\n id: actorId\n },\n object: {\n content: typeof preview === 'string' ? preview : '',\n purpose: typeof purpose === 'string' ? purpose : 'sign',\n messageId: messageId,\n created: created,\n channel: 'delegation',\n status: 'pending'\n },\n status: 'pending'\n };\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/messages/\".concat(id),\n value: this.globalState.messages[id]\n },\n globalState: this.globalState\n }\n }));\n try {\n var pv = typeof preview === 'string' ? preview : '';\n pushUiNotification({\n id: \"delegation-req-\".concat(messageId),\n kind: 'delegation',\n title: 'Signature request',\n subtitle: pv && pv.slice(0, 120) || 'Open Security & delegation to respond.',\n href: '/settings/security',\n copyText: String(messageId)\n });\n } catch (e) {/* ignore */}\n }\n }, {\n key: \"_resolveDelegationSignRequestActivity\",\n value: function _resolveDelegationSignRequestActivity(messageId, resolution) {\n if (!messageId) return;\n var id = \"delegation-\".concat(messageId);\n var cur = this.globalState.messages && this.globalState.messages[id];\n if (!cur || !isDelegationSignatureRequestActivity(cur)) return;\n var status = resolution === 'approved' ? 'approved' : resolution === 'timeout' ? 'timeout' : 'rejected';\n this.globalState.messages[id] = Object.assign({}, cur, {\n status: 'resolved',\n object: Object.assign({}, cur.object, {\n status: status,\n resolvedAt: Date.now()\n })\n });\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'replace',\n path: \"/messages/\".concat(id),\n value: this.globalState.messages[id]\n },\n globalState: this.globalState\n }\n }));\n try {\n var label = status === 'approved' ? 'Signature approved' : status === 'timeout' ? 'Signature request timed out' : 'Signature request rejected';\n pushUiNotification({\n id: \"delegation-done-\".concat(messageId),\n kind: 'delegation_resolved',\n title: label,\n subtitle: String(messageId),\n href: '/settings/security'\n });\n } catch (e) {/* ignore */}\n }\n\n /**\n * Add a document to the unified store. Content is encrypted with the user's keypair when available.\n * @param {Object} doc - { id, name, mime, size, sha256, contentBase64, created? }\n */\n }, {\n key: \"addLocalDocument\",\n value: function addLocalDocument(doc) {\n if (!doc || !doc.id || !doc.contentBase64) return;\n // Require an encryption key for adding documents: keep local storage encrypted-only.\n if (!this._getDocumentKey()) {\n console.warn('[BRIDGE]', 'Rejecting addLocalDocument: no document encryption key available.');\n return;\n }\n var created = doc.created || new Date().toISOString();\n var encrypted = this._encryptContent(doc.contentBase64);\n this.globalState.documents = this.globalState.documents || {};\n var toStore = _objectSpread(_objectSpread({}, doc), {}, {\n created: created,\n contentBase64: undefined\n });\n if (encrypted != null) {\n toStore.contentEncrypted = encrypted;\n }\n this.globalState.documents[doc.id] = toStore;\n this._persistDocuments();\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/documents/\".concat(doc.id),\n value: this.globalState.documents[doc.id]\n },\n globalState: this.globalState\n }\n }));\n }\n\n /**\n * Remove a document from local state (e.g. after publishing).\n * @param {string} id - Document id\n */\n }, {\n key: \"removeLocalDocument\",\n value: function removeLocalDocument(id) {\n if (!id || !this.globalState.documents) return;\n delete this.globalState.documents[id];\n this._persistDocuments();\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'remove',\n path: \"/documents/\".concat(id)\n },\n globalState: this.globalState\n }\n }));\n }\n\n /**\n * Clear all local documents (e.g. on logout / destroy identity). Persists empty store.\n */\n }, {\n key: \"clearAllDocuments\",\n value: function clearAllDocuments() {\n this.globalState.documents = {};\n this._persistDocuments();\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'replace',\n path: '/documents',\n value: {}\n },\n globalState: this.globalState\n }\n }));\n }\n\n /**\n * Clear any decrypted content from documents while preserving encrypted blobs.\n * Used when locking the identity so that previously viewed plaintext is not retained in memory/localStorage.\n */\n }, {\n key: \"clearDecryptedDocuments\",\n value: function clearDecryptedDocuments() {\n if (!this.globalState.documents) return;\n var changed = false;\n var docs = this.globalState.documents;\n for (var _i4 = 0, _Object$keys = Object.keys(docs); _i4 < _Object$keys.length; _i4++) {\n var id = _Object$keys[_i4];\n var doc = docs[id];\n if (!doc || !doc.contentEncrypted) continue;\n if (doc.contentBase64 != null) {\n delete doc.contentBase64;\n changed = true;\n }\n }\n if (!changed) return;\n this._persistDocuments();\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'replace',\n path: '/documents',\n value: this.globalState.documents\n },\n globalState: this.globalState\n }\n }));\n }\n }, {\n key: \"resetGlobalState\",\n value: function resetGlobalState() {\n this.globalState = {\n conversations: {},\n messages: {},\n users: {},\n documents: {},\n peerTopologyGossip: {\n byReporter: {}\n }\n };\n }\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.start();\n\n // Subscribe to initial path\n this.subscribe(this.state.currentPath);\n window.addEventListener('clientBalanceUpdate', this._onClientBalanceUpdate);\n\n // Listen for path changes\n window.addEventListener('popstate', this.handlePathChange);\n\n // Call onStateUpdate prop if provided for backward compatibility\n if (this.props.onStateUpdate && typeof this.props.onStateUpdate === 'function') {\n this.props.onStateUpdate(this.state);\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n // Update signing key when auth changes (e.g. user unlocks identity)\n if (prevProps.auth !== this.props.auth) {\n this.settings.signingKey = this.props.auth ? new Key(this.props.auth) : null;\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.stop();\n window.removeEventListener('clientBalanceUpdate', this._onClientBalanceUpdate);\n window.removeEventListener('popstate', this.handlePathChange);\n }\n }, {\n key: \"_parseHubAddressString\",\n value: function _parseHubAddressString(input) {\n try {\n var raw = input == null ? '' : String(input).trim();\n if (!raw) return null;\n var hasScheme = /^[a-zA-Z][a-zA-Z0-9+.-]*:\\/\\//.test(raw);\n var baseScheme = this.settings && this.settings.secure ? 'https://' : 'http://';\n var url = new URL(hasScheme ? raw : baseScheme + raw);\n var proto = (url.protocol || '').replace(':', '');\n var secure = proto === 'https' || proto === 'wss';\n var host = url.hostname;\n var port = url.port ? Number(url.port) : secure ? 443 : 80;\n if (!host || !port || Number.isNaN(port)) return null;\n var authority = (secure ? 'wss' : 'ws') + \"://\".concat(host, \":\").concat(port);\n return {\n host: host,\n port: port,\n secure: secure,\n authority: authority,\n raw: raw\n };\n } catch (e) {\n return null;\n }\n }\n\n /**\n * Append optional WS token for hub `settings.websocket` auth (MESSAGE_TRANSPORT.md).\n * Set `window.FABRIC_WS_CLIENT_TOKEN` before Bridge connects when FABRIC_WS_REQUIRE_TOKEN is on.\n */\n }, {\n key: \"_websocketUrlWithAuth\",\n value: function _websocketUrlWithAuth(path) {\n var base = \"\".concat(this.authority).concat(path);\n var token = '';\n try {\n token = typeof window !== 'undefined' && window.FABRIC_WS_CLIENT_TOKEN ? String(window.FABRIC_WS_CLIENT_TOKEN).trim() : '';\n } catch (e) {}\n if (!token) return base;\n var sep = base.indexOf('?') >= 0 ? '&' : '?';\n return \"\".concat(base).concat(sep, \"token=\").concat(encodeURIComponent(token));\n }\n\n /**\n * Same-origin POST /services/rpc headers: optional `FABRIC_WS_CLIENT_TOKEN` as Bearer so HTTP JSON-RPC\n * satisfies hub `websocket.clientToken` checks when WebSockets use query auth (MESSAGE_TRANSPORT.md).\n * @returns {{ 'Content-Type': string, Accept: string, Authorization?: string }}\n */\n }, {\n key: \"_hubJsonRpcHttpHeaders\",\n value: function _hubJsonRpcHttpHeaders() {\n var headers = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n };\n var token = '';\n try {\n token = typeof window !== 'undefined' && window.FABRIC_WS_CLIENT_TOKEN ? String(window.FABRIC_WS_CLIENT_TOKEN).trim() : '';\n } catch (e) {}\n if (token) headers.Authorization = \"Bearer \".concat(token);\n return headers;\n }\n }, {\n key: \"_applyHubAddressString\",\n value: function _applyHubAddressString(input) {\n var parsed = this._parseHubAddressString(input);\n if (!parsed) return false;\n this.settings.host = parsed.host;\n this.settings.port = parsed.port;\n this.settings.secure = parsed.secure;\n this.settings.authority = parsed.authority;\n this.settings.hubAddress = parsed.raw;\n return true;\n }\n }, {\n key: \"_sendSubscribe\",\n value: function _sendSubscribe(path) {\n if (!path) return;\n var message = Message.fromVector(['SUBSCRIBE', path]);\n var messageBuffer = message.toBuffer();\n this.sendSignedMessage(messageBuffer);\n }\n }, {\n key: \"_resubscribeAll\",\n value: function _resubscribeAll() {\n var _this8 = this;\n try {\n var subs = this.state && this.state.subscriptions ? Array.from(this.state.subscriptions) : [];\n subs.forEach(function (p) {\n return _this8._sendSubscribe(p);\n });\n } catch (e) {}\n }\n }, {\n key: \"setHubAddress\",\n value: function setHubAddress(hubAddress) {\n var ok = this._applyHubAddressString(hubAddress);\n if (!ok) {\n console.warn('[BRIDGE]', 'Invalid hub address:', safeUrlForLog(hubAddress));\n return false;\n }\n\n // Fully restart so WebSocket + WebRTC signaling use the new host/port.\n try {\n this.stop();\n } catch (e) {}\n try {\n this.start();\n } catch (e) {}\n return true;\n }\n }, {\n key: \"connect\",\n value: function connect(path) {\n var _this9 = this;\n // Clean up any existing WebSocket before creating a new one\n if (this.ws) {\n try {\n this.ws.onopen = null;\n this.ws.onmessage = null;\n this.ws.onerror = null;\n this.ws.onclose = null;\n if (this.ws.readyState === WebSocket.OPEN || this.ws.readyState === WebSocket.CONNECTING) {\n this.ws.close();\n }\n } catch (e) {\n console.warn('[BRIDGE]', 'Error cleaning up previous WebSocket:', safeIdentityErr(e));\n }\n this.ws = null;\n }\n var wsUrl = this._websocketUrlWithAuth(path);\n if (this.settings.debug) {\n console.debug('[BRIDGE]', 'Opening connection to:', wsUrl);\n }\n this.ws = new WebSocket(wsUrl);\n this.ws.binaryType = 'arraybuffer';\n\n // Attach Event Handlers\n this.ws.onopen = function () {\n if (_this9.settings.debug) {\n console.debug('[BRIDGE]', 'Connection established');\n }\n _this9._isConnected = true; // Set internal state immediately\n _this9.setState({\n isConnected: true\n }, function () {\n // Call onStateUpdate prop if provided for backward compatibility\n if (_this9.props.onStateUpdate && typeof _this9.props.onStateUpdate === 'function') {\n _this9.props.onStateUpdate(_this9.state);\n }\n });\n _this9.onSocketOpen();\n\n // Process any queued messages\n while (_this9.messageQueue.length > 0) {\n var message = _this9.messageQueue.shift();\n try {\n _this9.ws.send(message);\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending queued message:', safeIdentityErr(error));\n // Re-queue the message if send fails\n _this9.messageQueue.unshift(message);\n break;\n }\n }\n\n // Flush any queued JSON-RPC payloads that were enqueued before the\n // WebSocket finished opening (for example, early WebRTC registration).\n if (Array.isArray(_this9._jsonRpcQueue) && _this9._jsonRpcQueue.length > 0) {\n if (_this9.settings.debug) {\n console.debug('[BRIDGE]', 'Flushing queued JSON-RPC payloads:', _this9._jsonRpcQueue.length);\n }\n var queue = _this9._jsonRpcQueue.slice();\n _this9._jsonRpcQueue = [];\n var _iterator6 = _createForOfIteratorHelper(queue),\n _step6;\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var payload = _step6.value;\n _this9._sendJSONRPCNow(payload);\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n }\n };\n this.ws.onmessage = this.onSocketMessage.bind(this);\n this.ws.onerror = function (error) {\n var url = _this9.ws && _this9.ws.url ? _this9.ws.url : '(no url)';\n var kind = error && _typeof(error) === 'object' && error.type ? error.type : error && error.message || error;\n console.error('[BRIDGE]', 'WebSocket error:', url, kind, safeIdentityErr(error));\n _this9._isConnected = false;\n _this9.setState({\n error: safeIdentityErr(error),\n isConnected: false\n }, function () {\n // Call onStateUpdate prop if provided for backward compatibility\n if (_this9.props.onStateUpdate && typeof _this9.props.onStateUpdate === 'function') {\n _this9.props.onStateUpdate(_this9.state);\n }\n });\n };\n this.ws.onclose = function (event) {\n if (_this9.settings.debug) {\n console.debug('[BRIDGE]', 'WebSocket closed:', event.code, event.reason);\n }\n _this9._isConnected = false;\n _this9.setState({\n isConnected: false\n }, function () {\n // Call onStateUpdate prop if provided for backward compatibility\n if (_this9.props.onStateUpdate && typeof _this9.props.onStateUpdate === 'function') {\n _this9.props.onStateUpdate(_this9.state);\n }\n });\n if (_this9._fabricHubReconnectSuspended) {\n if (_this9.settings.debug) {\n console.debug('[BRIDGE]', 'Hub reconnect suspended (fabric transport penalty); clear in UI or reload.');\n }\n return;\n }\n\n // Attempt to reconnect after a delay\n if (_this9.attempts < 5) {\n var delay = _this9.generateInterval(_this9.attempts);\n console.debug('[BRIDGE]', \"Reconnecting in \".concat(delay, \"ms (attempt \").concat(_this9.attempts, \")\"));\n setTimeout(function () {\n _this9.attempts++;\n _this9.connect(path);\n }, delay);\n } else {\n console.error('[BRIDGE]', 'Max reconnection attempts reached');\n }\n };\n }\n }, {\n key: \"generateInterval\",\n value: function generateInterval(attempts) {\n return Math.min(30, Math.pow(2, attempts) - 1) * 1000;\n }\n\n /**\n * Initialize WebRTC identity (native WebRTC).\n * Generates a stable peerId for this browser session and marks WebRTC ready.\n */\n }, {\n key: \"initializeWebRTC\",\n value: function initializeWebRTC() {\n var _this0 = this;\n if (this.peerId) return;\n var sessionId = this.key ? this.key.id.slice(-8) : Math.random().toString(36).substr(2, 8);\n this.peerId = \"fabric-bridge-\".concat(sessionId);\n this._webrtcReady = true;\n if (this.settings.debug) {\n console.debug('[BRIDGE]', 'Initialized native WebRTC with peerId:', this.peerId);\n }\n\n // Publish our presence to the Hub so other peers can discover us.\n this.publishWebRTCOffer();\n\n // Schedule initial peer discovery.\n if (this._peerDiscoveryTimer) clearTimeout(this._peerDiscoveryTimer);\n this._peerDiscoveryTimer = setTimeout(function () {\n _this0.discoverAndConnectToPeers();\n }, this.settings.webrtcPeerDiscoveryDelay);\n }\n\n // PeerJS-specific WebRTC helpers removed; native WebRTC helpers are defined below.\n\n /**\n * Handle messages received via WebRTC\n */\n }, {\n key: \"handleWebRTCMessage\",\n value: function handleWebRTCMessage(data) {\n var sourcePeerId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n try {\n console.debug('[BRIDGE]', 'Processing WebRTC message:', fabricDebugDescribePayload(data));\n var transport = sourcePeerId != null && String(sourcePeerId) ? {\n sessionId: String(sourcePeerId),\n kind: SESSION_KIND_WEBRTC\n } : {\n sessionId: HUB_FABRIC_SESSION_ID,\n kind: SESSION_KIND_HUB\n };\n\n // Handle our structured WebRTC messages\n if (data && _typeof(data) === 'object' && data.type === 'fabric-message') {\n // Decode the base64 data back to Buffer\n var _messageData = Buffer.from(data.data, 'base64');\n this.onSocketMessage({\n data: _messageData,\n _fabricTransport: transport\n });\n return;\n }\n\n // Handle other data formats for compatibility\n var messageData;\n if (typeof data === 'string') {\n messageData = Buffer.from(data, 'utf8');\n } else if (data instanceof ArrayBuffer) {\n messageData = Buffer.from(data);\n } else {\n messageData = Buffer.from(JSON.stringify(data));\n }\n\n // Process the message using the existing WebSocket message handler\n this.onSocketMessage({\n data: messageData,\n _fabricTransport: transport\n });\n } catch (error) {\n console.error('[BRIDGE]', 'Error handling WebRTC message:', safeIdentityErr(error));\n }\n }\n\n /**\n * Publish our WebRTC presence/offer to the Bridge.\n * This notifies the server that we're available for peer connections.\n */\n }, {\n key: \"publishWebRTCOffer\",\n value: function publishWebRTCOffer() {\n if (!this.peerId) {\n console.warn('[BRIDGE]', 'Cannot publish WebRTC offer: no peer ID');\n return;\n }\n if (this.settings.debug) {\n console.debug('[BRIDGE]', 'Publishing WebRTC offer with peer ID:', this.peerId);\n }\n\n // Send our peer info to the server via WebSocket RPC\n var meta = {\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n capabilities: ['data-channel']\n };\n var key = this._getIdentityKey();\n if (key && key.xpub && isLikelyBip32ExtendedKey(String(key.xpub))) {\n meta.xpub = String(key.xpub).trim();\n }\n var ns = this.state && (this.state.networkStatus || this.state.lastNetworkStatus);\n var fp = ns && ns.fabricPeerId != null ? String(ns.fabricPeerId).trim() : '';\n if (fp) meta.fabricPeerId = fp;\n try {\n var pkHex = typeof this.getHtlcRefundPublicKeyHex === 'function' ? this.getHtlcRefundPublicKeyHex() : null;\n if (pkHex && /^[0-9a-fA-F]{66}$/.test(String(pkHex).trim())) {\n meta.publicKeyHex = String(pkHex).trim().toLowerCase();\n } else if (key && key.pubkey && /^[0-9a-fA-F]{64,66}$/.test(String(key.pubkey).trim())) {\n meta.publicKeyHex = String(key.pubkey).trim().toLowerCase();\n }\n } catch (_) {}\n var payload = {\n method: 'RegisterWebRTCPeer',\n params: [{\n peerId: this.peerId,\n timestamp: Date.now(),\n metadata: meta\n }]\n };\n this._sendJSONRPC(payload);\n this._lastWebRTCPublishAt = Date.now();\n }\n\n /**\n * Request peer candidates from the Bridge and connect to available peers.\n * Respects the maxWebrtcPeers setting.\n */\n }, {\n key: \"discoverAndConnectToPeers\",\n value: function discoverAndConnectToPeers() {\n // Discovery only needs our logical peerId registered with the hub; it\n // does not require that a specific WebRTC connection is already open.\n if (!this.peerId) {\n console.warn('[BRIDGE]', 'Cannot discover peers: no WebRTC peerId');\n return;\n }\n var currentConnections = this.webrtcPeers.size;\n var maxPeers = this.settings.maxWebrtcPeers || 5;\n if (currentConnections >= maxPeers) {\n if (this.settings.debug) {\n console.debug('[BRIDGE]', \"Already at max WebRTC peers (\".concat(currentConnections, \"/\").concat(maxPeers, \")\"));\n }\n return;\n }\n\n // Request peer list from the server\n var payload = {\n method: 'ListWebRTCPeers',\n params: [{\n excludeSelf: true,\n peerId: this.peerId\n }]\n };\n\n // Store callback for when we receive the response\n this._pendingPeerDiscovery = true;\n this._lastWebRTCDiscoverAt = Date.now();\n this._sendJSONRPC(payload);\n }\n\n /**\n * Handle the response from ListWebRTCPeers and initiate connections.\n * @param {Array} candidates - Array of peer candidate objects\n */\n }, {\n key: \"handlePeerCandidates\",\n value: function handlePeerCandidates(candidates) {\n var _this1 = this;\n // If WebRTC identity isn't ready yet, stash candidates and process them once\n // initialization completes.\n if (!this.peerId || !this._webrtcReady) {\n var _this$_pendingPeerCan;\n if (this.settings.debug) {\n console.debug('[BRIDGE]', 'Deferring WebRTC peer candidates until WebRTC is ready');\n }\n if (!Array.isArray(this._pendingPeerCandidates)) this._pendingPeerCandidates = [];\n (_this$_pendingPeerCan = this._pendingPeerCandidates).push.apply(_this$_pendingPeerCan, _toConsumableArray(candidates));\n return;\n }\n if (!Array.isArray(candidates)) {\n console.warn('[BRIDGE]', 'Invalid peer candidates:', _typeof(candidates));\n return;\n }\n var currentConnections = this.getWebRTCPeerCount() + this._connectingPeers.size;\n var maxPeers = this.settings.maxWebrtcPeers || 5;\n var slotsAvailable = Math.max(0, maxPeers - currentConnections);\n if (slotsAvailable === 0) {\n if (this.settings.debug) {\n console.debug('[BRIDGE]', 'No slots available for new WebRTC peers');\n }\n return;\n }\n var now = Date.now();\n var maxCandidateAgeMs = Number(this.settings.webrtcCandidateMaxAgeMs || 120000);\n var staleCandidateCount = 0;\n\n // Filter out ourselves, stale registrations, and already connected/connecting peers.\n var eligiblePeers = candidates.filter(function (candidate) {\n var peerId = candidate.id || candidate.peerId;\n if (!peerId) return false;\n if (peerId === _this1.peerId) return false;\n if (_this1.webrtcPeers.has(peerId)) return false;\n if (_this1._connectingPeers.has(peerId)) return false;\n var seenAt = Number(candidate.lastSeen || candidate.registeredAt || candidate.connectedAt || 0);\n if (maxCandidateAgeMs > 0 && Number.isFinite(seenAt) && seenAt > 0) {\n if (now - seenAt > maxCandidateAgeMs) {\n staleCandidateCount++;\n return false;\n }\n }\n return true;\n });\n if (staleCandidateCount > 0) {\n console.debug('[BRIDGE]', 'Ignoring stale WebRTC candidates:', staleCandidateCount);\n }\n\n // Prefer freshest candidates first so stale hub registrations do not\n // consume all available connection slots.\n eligiblePeers.sort(function (a, b) {\n var bSeen = Number(b.lastSeen || b.registeredAt || b.connectedAt || 0);\n var aSeen = Number(a.lastSeen || a.registeredAt || a.connectedAt || 0);\n return bSeen - aSeen;\n });\n\n // Connect to peers up to available slots.\n var peersToConnect = eligiblePeers.slice(0, slotsAvailable);\n var _iterator7 = _createForOfIteratorHelper(peersToConnect),\n _step7;\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var candidate = _step7.value;\n var peerId = candidate.id || candidate.peerId;\n this.connectToWebRTCPeer(peerId, candidate);\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n }\n\n /**\n * Merge P2P_PEER_GOSSIP into client global state for Peers topology UI (second-hop view).\n * @param {object} parsed - payload with actor.id and object.peers[]\n * @param {string} [fallbackReporterId] - WebRTC channel peer id when actor is missing\n */\n }, {\n key: \"_recordPeerGossipTopology\",\n value: function _recordPeerGossipTopology(parsed, fallbackReporterId) {\n try {\n var reporter = parsed && parsed.actor && parsed.actor.id ? String(parsed.actor.id) : fallbackReporterId ? String(fallbackReporterId) : '';\n var peers = Array.isArray(parsed && parsed.object && parsed.object.peers) ? parsed.object.peers : [];\n if (!reporter || peers.length === 0) return;\n var neighborIds = _toConsumableArray(new Set(peers.map(function (p) {\n if (!p || _typeof(p) !== 'object') return '';\n return String(p.id != null ? p.id : p.peerId != null ? p.peerId : '').trim();\n }).filter(Boolean)));\n if (neighborIds.length === 0) return;\n this.globalState.peerTopologyGossip = this.globalState.peerTopologyGossip || {\n byReporter: {}\n };\n this.globalState.peerTopologyGossip.byReporter[reporter] = {\n at: Date.now(),\n neighbors: neighborIds\n };\n var cutoff = Date.now() - 20 * 60 * 1000;\n var br = this.globalState.peerTopologyGossip.byReporter;\n for (var _i5 = 0, _Object$keys2 = Object.keys(br); _i5 < _Object$keys2.length; _i5++) {\n var k = _Object$keys2[_i5];\n if (br[k] && typeof br[k].at === 'number' && br[k].at < cutoff) delete br[k];\n }\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'replace',\n path: '/peerTopologyGossip',\n value: this.globalState.peerTopologyGossip\n },\n globalState: this.globalState\n }\n }));\n } catch (e) {\n console.debug('[BRIDGE] _recordPeerGossipTopology:', safeIdentityErr(e));\n }\n }\n\n /**\n * Initiate a WebRTC connection to a specific peer.\n * @param {string} peerId - The remote browser peer ID to connect to\n * @param {Object} metadata - Optional metadata about the peer\n */\n }, {\n key: \"connectToWebRTCPeer\",\n value: function connectToWebRTCPeer(peerId) {\n var _this10 = this;\n var metadata = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.peerId || !this._webrtcReady) {\n console.debug('[BRIDGE]', 'Cannot connect to peer yet: WebRTC identity not ready');\n return;\n }\n if (this.webrtcPeers.has(peerId) || this._connectingPeers.has(peerId)) {\n console.debug('[BRIDGE]', 'Already connected/connecting to peer:', peerId);\n return;\n }\n if (this.settings.debug) {\n console.debug('[BRIDGE]', 'Initiating native WebRTC connection to peer:', peerId);\n }\n this._connectingPeers.add(peerId);\n try {\n var entry = {\n pc: null,\n dc: null,\n status: 'connecting',\n initiator: true,\n metadata: metadata,\n makingOffer: false,\n ignoreOffer: false,\n localSessionId: this._newRTCSessionId(peerId),\n remoteSessionId: null,\n localSignalRevision: 0,\n remoteSignalRevision: 0,\n polite: this.peerId ? this.peerId < peerId : true\n };\n var pc = this._createRTCPeerConnection(peerId, entry);\n var dc = pc.createDataChannel('fabric-peer', {\n ordered: true\n });\n this._attachDataChannelHandlers(peerId, dc);\n entry.pc = pc;\n entry.dc = dc;\n this._rtcPeers.set(peerId, entry);\n this.webrtcPeers.set(peerId, {\n id: peerId,\n status: 'connecting',\n direction: 'outbound',\n connectedAt: null,\n lastSeen: Date.now(),\n connection: dc,\n metadata: metadata\n });\n entry.makingOffer = true;\n pc.createOffer().then(function (offer) {\n return pc.setLocalDescription(offer);\n }).then(function () {\n entry.makingOffer = false;\n if (pc.signalingState === 'closed') return;\n var offerSignal = _this10._withRTCSignalMeta(entry, {\n type: 'offer',\n sdp: pc.localDescription\n }, {\n targetSessionId: null\n });\n _this10.sendWebRTCSignal(peerId, offerSignal);\n })[\"catch\"](function (err) {\n entry.makingOffer = false;\n console.error('[BRIDGE]', 'Error creating WebRTC offer to', peerId, safeIdentityErr(err));\n _this10.disconnectWebRTCPeer(peerId);\n });\n var connectTimeoutMs = Number(this.settings.webrtcConnectTimeoutMs || 15000);\n var timer = setTimeout(function () {\n var info = _this10.webrtcPeers.get(peerId);\n if (info && info.status === 'connected') return;\n if (_this10.settings.debug) {\n console.debug('[BRIDGE]', 'Timing out stale WebRTC connect attempt:', peerId);\n }\n _this10.disconnectWebRTCPeer(peerId);\n }, connectTimeoutMs);\n this._webrtcConnectTimers.set(peerId, timer);\n } catch (error) {\n console.error('[BRIDGE]', 'Failed to initiate native WebRTC connection to peer:', peerId, safeIdentityErr(error));\n this.disconnectWebRTCPeer(peerId);\n }\n }\n }, {\n key: \"_resetHubFabricTransportSession\",\n value: function _resetHubFabricTransportSession() {\n this._fabricTransportSessions.set(HUB_FABRIC_SESSION_ID, new FabricTransportSession(HUB_FABRIC_SESSION_ID, SESSION_KIND_HUB));\n }\n\n /**\n * @param {string} sessionId\n * @param {'hub_websocket'|'webrtc_mesh'} kind\n * @returns {FabricTransportSession|null}\n */\n }, {\n key: \"_getFabricTransportSession\",\n value: function _getFabricTransportSession(sessionId, kind) {\n var id = sessionId != null ? String(sessionId) : '';\n if (!id) return null;\n var s = this._fabricTransportSessions.get(id);\n if (!s) {\n s = new FabricTransportSession(id, kind);\n this._fabricTransportSessions.set(id, s);\n }\n return s;\n }\n }, {\n key: \"_fabricRewardTransport\",\n value: function _fabricRewardTransport(sessionId, kind, delta, _reason) {\n var s = this._getFabricTransportSession(sessionId, kind);\n if (!s) return;\n s.reward(delta);\n this._notifyPeerListUiRefresh();\n }\n }, {\n key: \"_fabricPenalizeTransport\",\n value: function _fabricPenalizeTransport(sessionId, kind, penalty, reason) {\n var s = this._getFabricTransportSession(sessionId, kind);\n if (!s) return;\n var _s$penalize = s.penalize(penalty),\n disconnect = _s$penalize.disconnect;\n if (this.settings.debug) {\n console.debug('[BRIDGE]', 'Fabric transport penalized:', sessionId, kind, reason, 'score', s.score, 'misbehavior', s.misbehavior);\n }\n if (disconnect) {\n if (kind === SESSION_KIND_HUB && sessionId === HUB_FABRIC_SESSION_ID) {\n try {\n toast.warning(\"Disconnected from hub\".concat(reason ? \" (\".concat(reason, \")\") : '', \". Fabric transport reputation exhausted (score \").concat(s.score, \").\"), {\n header: 'Hub'\n });\n } catch (_) {/* ignore */}\n this._fabricDisconnectHubTransport(reason || 'transport-reputation');\n } else {\n try {\n toast.warning(\"Disconnected browser mesh peer\".concat(reason ? \" (\".concat(reason, \")\") : '', \". Reputation exhausted (score \").concat(s.score, \", misbehavior \").concat(s.misbehavior, \").\"), {\n header: 'Mesh peer'\n });\n } catch (_) {/* ignore */}\n this.disconnectWebRTCPeer(sessionId);\n }\n return;\n }\n this._notifyPeerListUiRefresh();\n }\n }, {\n key: \"_fabricDisconnectHubTransport\",\n value: function _fabricDisconnectHubTransport(reason) {\n this._fabricHubReconnectSuspended = true;\n if (!this.ws) return;\n try {\n if (this.ws.readyState === WebSocket.OPEN || this.ws.readyState === WebSocket.CONNECTING) {\n this.ws.close(4002, String(reason || 'fabric-transport').slice(0, 120));\n }\n } catch (e) {\n console.warn('[BRIDGE]', 'Error closing WebSocket after transport penalty:', safeIdentityErr(e));\n }\n }\n\n /**\n * @param {string} peerId\n * @returns {{ score: number, misbehavior: number }}\n */\n }, {\n key: \"getWebRTCPeerReputation\",\n value: function getWebRTCPeerReputation(peerId) {\n var id = peerId != null ? String(peerId) : '';\n var s = id ? this._fabricTransportSessions.get(id) : null;\n if (!s) return {\n score: 100,\n misbehavior: 0\n };\n return {\n score: Number(s.score) || 0,\n misbehavior: Number(s.misbehavior) || 0\n };\n }\n }, {\n key: \"_notifyPeerListUiRefresh\",\n value: function _notifyPeerListUiRefresh() {\n var _this11 = this;\n if (typeof window === 'undefined') return;\n if (this._peerListUiRefreshTimer) return;\n this._peerListUiRefreshTimer = setTimeout(function () {\n _this11._peerListUiRefreshTimer = null;\n try {\n var ns = _this11.state.networkStatus || _this11.state.lastNetworkStatus;\n window.dispatchEvent(new CustomEvent('networkStatusUpdate', {\n detail: {\n networkStatus: ns\n }\n }));\n } catch (_) {/* ignore */}\n }, 200);\n }\n }, {\n key: \"_webrtcRewardPeer\",\n value: function _webrtcRewardPeer(peerId, delta, reason) {\n this._fabricRewardTransport(peerId, SESSION_KIND_WEBRTC, delta, reason);\n }\n }, {\n key: \"_webrtcPenalizePeer\",\n value: function _webrtcPenalizePeer(peerId, penalty, reason) {\n this._fabricPenalizeTransport(peerId, SESSION_KIND_WEBRTC, penalty, reason);\n }\n\n /**\n * Handle messages received from a WebRTC peer (not the server).\n * @param {string} peerId - The peer ID that sent the message\n * @param {*} data - The message data\n */\n }, {\n key: \"handleWebRTCPeerMessage\",\n value: function handleWebRTCPeerMessage(peerId, data) {\n var _this12 = this;\n try {\n var WEBRTC_MAX_TEXT = 256 * 1024;\n var WEBRTC_MAX_BINARY = 8 * 1024 * 1024;\n if (typeof data === 'string' && data.length > WEBRTC_MAX_TEXT) {\n this._webrtcPenalizePeer(peerId, 50, 'oversized-text-frame');\n return;\n }\n if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n if (data.byteLength > WEBRTC_MAX_BINARY) {\n this._webrtcPenalizePeer(peerId, 50, 'oversized-binary-frame');\n return;\n }\n this.onSocketMessage({\n data: data,\n _fabricTransport: {\n sessionId: peerId,\n kind: SESSION_KIND_WEBRTC\n }\n });\n return;\n }\n if (typeof Uint8Array !== 'undefined' && data instanceof Uint8Array) {\n var u8 = data;\n if (u8.byteLength > WEBRTC_MAX_BINARY) {\n this._webrtcPenalizePeer(peerId, 50, 'oversized-binary-frame');\n return;\n }\n this.onSocketMessage({\n data: u8.buffer.slice(u8.byteOffset, u8.byteOffset + u8.byteLength),\n _fabricTransport: {\n sessionId: peerId,\n kind: SESSION_KIND_WEBRTC\n }\n });\n return;\n }\n if (typeof Blob !== 'undefined' && data instanceof Blob) {\n if (typeof data.size === 'number' && data.size > WEBRTC_MAX_BINARY) {\n this._webrtcPenalizePeer(peerId, 50, 'oversized-binary-frame');\n return;\n }\n data.arrayBuffer().then(function (ab) {\n if (ab.byteLength > WEBRTC_MAX_BINARY) {\n _this12._webrtcPenalizePeer(peerId, 50, 'oversized-binary-frame');\n return;\n }\n _this12.onSocketMessage({\n data: ab,\n _fabricTransport: {\n sessionId: peerId,\n kind: SESSION_KIND_WEBRTC\n }\n });\n })[\"catch\"](function (err) {\n return console.error('[BRIDGE]', 'WebRTC Blob read failed:', safeIdentityErr(err));\n });\n return;\n }\n var payload = data;\n // RTCDataChannel text frames arrive as strings; normalize to object when possible.\n if (typeof payload === 'string') {\n var trimmed = payload.trim();\n if (trimmed) {\n try {\n payload = JSON.parse(trimmed);\n } catch (parseError) {\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n this._webrtcPenalizePeer(peerId, 12, 'invalid-json');\n return;\n }\n payload = data;\n }\n }\n }\n\n // Emit event for application-level handling\n var event = new CustomEvent('webrtcPeerMessage', {\n detail: {\n peerId: peerId,\n data: payload\n }\n });\n window.dispatchEvent(event);\n\n // Handle specific message types\n if (payload && _typeof(payload) === 'object') {\n switch (payload.type) {\n case 'ping':\n this.sendToWebRTCPeer(peerId, {\n type: 'pong',\n timestamp: Date.now()\n });\n this._webrtcRewardPeer(peerId, 1, 'answered-ping');\n break;\n // Opcode (0x61) + wire/friendly names + legacy WebRTC alias.\n case P2P_PEER_GOSSIP:\n case 'P2P_PEER_GOSSIP':\n case 'PeerGossip':\n case 'webrtc-peer-gossip':\n {\n var peers = Array.isArray(payload.object && payload.object.peers) ? payload.object.peers : Array.isArray(payload.peers) ? payload.peers : [];\n if (peers.length > 128) {\n this._webrtcPenalizePeer(peerId, 30, 'gossip-list-oversized');\n break;\n }\n if (peers.some(function (p) {\n return !p || p.id == null && p.peerId == null;\n })) {\n this._webrtcPenalizePeer(peerId, 25, 'gossip-malformed-entry');\n break;\n }\n if (peers.length > 0) {\n this._recordPeerGossipTopology({\n actor: payload.actor || {\n id: peerId\n },\n object: {\n peers: peers\n }\n }, peerId);\n var candidates = peers.map(function (p) {\n return {\n id: p.id || p.peerId,\n peerId: p.id || p.peerId,\n lastSeen: p.lastSeen || p.registeredAt || Date.now(),\n registeredAt: p.registeredAt || p.lastSeen || Date.now(),\n source: 'gossip'\n };\n }).filter(function (c) {\n return c.id && c.id !== _this12.peerId;\n });\n if (candidates.length > 0) {\n this.handlePeerCandidates(candidates);\n }\n this._webrtcRewardPeer(peerId, 1, 'valid-gossip');\n }\n break;\n }\n case P2P_PEERING_OFFER:\n case 'P2P_PEERING_OFFER':\n case 'PeeringOffer':\n {\n var obj = payload.object || payload;\n var slots = Number(obj.slots || obj.needed || 1);\n var transport = obj.transport || 'webrtc';\n if (transport === 'webrtc' && slots > 0 && this.peerId) {\n var offererId = payload.actor && payload.actor.id || peerId;\n if (offererId !== this.peerId && !this.webrtcPeers.has(offererId) && !this._connectingPeers.has(offererId)) {\n console.debug('[BRIDGE]', 'Received', Message.canonicalTypeName(P2P_PEERING_OFFER), 'from', peerId, '- attempting connect');\n this.handlePeerCandidates([{\n id: offererId,\n peerId: offererId,\n lastSeen: Date.now(),\n source: 'peeringOffer'\n }]);\n }\n this._webrtcRewardPeer(peerId, 1, 'peering-offer');\n }\n break;\n }\n case 'pong':\n {\n // Update last seen for the peer\n var peerInfo = this.webrtcPeers.get(peerId);\n if (peerInfo) {\n peerInfo.lastSeen = Date.now();\n this.webrtcPeers.set(peerId, peerInfo);\n }\n this._webrtcRewardPeer(peerId, 1, 'pong');\n break;\n }\n case 'fabric-message':\n {\n // Signed Fabric Message (base64); relay with original preserved for onion routing.\n var base64 = payload.data;\n if (typeof base64 !== 'string' || !base64.length) {\n this._webrtcPenalizePeer(peerId, 20, 'fabric-message-empty');\n break;\n }\n if (base64.length > Math.floor(1.5 * 1024 * 1024)) {\n this._webrtcPenalizePeer(peerId, 40, 'fabric-message-oversized');\n break;\n }\n if (base64 && this._isConnected && this.ws && this.ws.readyState === 1) {\n var envelope = {\n original: base64,\n originalType: 'fabric-message',\n hops: [{\n from: peerId,\n at: Date.now()\n }]\n };\n this._sendJSONRPC({\n method: 'RelayFromWebRTC',\n params: [{\n fromPeerId: peerId,\n envelope: envelope\n }]\n });\n }\n this.handleWebRTCMessage(payload, peerId);\n this._webrtcRewardPeer(peerId, 1, 'fabric-message');\n break;\n }\n case 'P2P_DISTRIBUTE_PROPOSAL':\n {\n var _obj = payload.object || payload;\n var proposal = null;\n if (_obj.documentId && Number.isFinite(Number(_obj.amountSats))) {\n var senderAddress = payload.actor && payload.actor.id || null;\n var created = _obj.created || payload.created || Date.now();\n proposal = {\n id: \"proposal:\".concat(created, \":\").concat(senderAddress || 'unknown'),\n documentId: _obj.documentId,\n amountSats: Number(_obj.amountSats),\n config: _obj.config || {},\n document: _obj.document || null,\n documentName: _obj.documentName || _obj.document && _obj.document.name || _obj.documentId,\n senderAddress: senderAddress,\n receivedAt: created,\n status: 'pending'\n };\n } else {\n proposal = this._parseDistributeProposal(typeof _obj.content === 'string' ? _obj.content : JSON.stringify(_obj), payload);\n }\n if (proposal) {\n this._storeDistributeProposal(proposal);\n }\n break;\n }\n case 'P2P_PEER_ALIAS':\n case P2P_PEER_ALIAS:\n {\n var name = payload.object && payload.object.name != null ? String(payload.object.name).trim() : payload.name != null ? String(payload.name).trim() : '';\n var aliasText = name || (typeof payload === 'string' ? payload.trim() : '');\n if (aliasText) {\n this._peerAliasById = this._peerAliasById || {};\n // Trust the WebRTC session peer id, not forgeable JSON actor.id.\n var signerId = peerId;\n this._peerAliasById[signerId] = aliasText.slice(0, 64);\n if (this._isConnected && this.ws && this.ws.readyState === 1) {\n this._sendJSONRPC({\n method: 'RelayFromWebRTC',\n params: [{\n fromPeerId: peerId,\n envelope: {\n original: aliasText.slice(0, 64),\n originalType: Message.canonicalTypeName(P2P_PEER_ALIAS),\n hops: [{\n from: peerId,\n at: Date.now()\n }]\n }\n }]\n });\n }\n this._webrtcRewardPeer(peerId, 1, 'peer-alias');\n }\n break;\n }\n case 'P2P_CHAT_MESSAGE':\n case P2P_CHAT_MESSAGE:\n {\n var normalized = normalizeP2pChatMessage(payload, {\n defaultActorId: peerId\n });\n var text = chatTextOf(normalized || payload);\n var _trimmed = typeof text === 'string' ? text.trim() : '';\n if (this._handleHtlcKeyReveal(_trimmed)) break;\n var _proposal = this._parseDistributeProposal(_trimmed, payload);\n if (_proposal) {\n this._storeDistributeProposal(_proposal);\n break;\n }\n if (!_trimmed || !normalized) break;\n var _created = normalized.object && normalized.object.created || Date.now();\n var actorId = normalized.actor && normalized.actor.id || peerId;\n var incomingClientId = normalized.object && normalized.object.clientId || null;\n\n // Create a local chat representation for the UI\n try {\n var clientId = incomingClientId || function () {\n var clientActor = new Actor({\n content: {\n type: Message.canonicalTypeName(P2P_CHAT_MESSAGE),\n address: peerId,\n text: _trimmed,\n created: _created\n }\n });\n return clientActor.id;\n }();\n if (clientId && this.globalState && this.globalState.messages && this.globalState.messages[clientId]) {\n break;\n }\n var chat = Object.assign({}, normalized, {\n actor: {\n id: actorId\n },\n object: Object.assign({}, normalized.object, {\n clientId: clientId\n }),\n target: peerId,\n status: 'received',\n transport: 'webrtc',\n delivery: {\n via: 'mesh',\n fromPeerId: peerId\n }\n });\n this.globalState.messages = this.globalState.messages || {};\n this.globalState.messages[clientId] = chat;\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/messages/\".concat(clientId),\n value: chat\n },\n globalState: this.globalState\n }\n }));\n this._persistMessages();\n\n // Relay chat in the envelope shape Hub / P2P_RELAY receivers expect.\n if (this._isConnected && this.ws && this.ws.readyState === 1) {\n var _envelope = {\n original: JSON.stringify({\n type: Message.canonicalTypeName(P2P_CHAT_MESSAGE),\n actor: {\n id: actorId\n },\n object: {\n content: _trimmed,\n created: _created,\n clientId: clientId\n }\n }),\n originalType: Message.canonicalTypeName(P2P_CHAT_MESSAGE),\n hops: [{\n from: peerId,\n at: Date.now()\n }]\n };\n this._sendJSONRPC({\n method: 'RelayFromWebRTC',\n params: [{\n fromPeerId: peerId,\n envelope: _envelope\n }]\n });\n }\n this._webrtcRewardPeer(peerId, 1, 'chat');\n } catch (e) {\n console.warn('[BRIDGE]', 'Could not create local WebRTC chat message:', safeIdentityErr(e));\n }\n break;\n }\n default:\n // Pass through to the general WebRTC message handler\n this.handleWebRTCMessage(payload, peerId);\n }\n }\n } catch (error) {\n console.error('[BRIDGE]', 'Error handling WebRTC peer message:', safeIdentityErr(error));\n }\n }\n\n /**\n * Send a message to a specific WebRTC peer.\n * @param {string} peerId - The peer ID to send to\n * @param {*} data - The data to send\n * @returns {boolean} True if sent successfully\n */\n }, {\n key: \"sendToWebRTCPeer\",\n value: function sendToWebRTCPeer(peerId, data) {\n var peerInfo = this.webrtcPeers.get(peerId);\n if (!peerInfo || !peerInfo.connection || peerInfo.status !== 'connected') {\n console.warn('[BRIDGE]', 'Cannot send to WebRTC peer:', peerId, '- not connected');\n return false;\n }\n try {\n if (data && typeof data.toBuffer === 'function') {\n var buf = data.toBuffer();\n var ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n peerInfo.connection.send(ab);\n return true;\n }\n if (typeof Buffer !== 'undefined' && Buffer.isBuffer && Buffer.isBuffer(data)) {\n var _ab = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);\n peerInfo.connection.send(_ab);\n return true;\n }\n if (typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) {\n peerInfo.connection.send(data);\n return true;\n }\n var outbound = data && _typeof(data) === 'object' ? JSON.stringify(data) : data;\n peerInfo.connection.send(outbound);\n return true;\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending to WebRTC peer:', peerId, safeIdentityErr(error));\n return false;\n }\n }\n\n /**\n * Broadcast a message to all connected WebRTC peers.\n * @param {*} data - The data to broadcast\n * @returns {number} Number of peers the message was sent to\n */\n }, {\n key: \"broadcastToWebRTCPeers\",\n value: function broadcastToWebRTCPeers(data) {\n var recipients = this.broadcastToWebRTCPeersWithRecipients(data);\n return recipients.length;\n }\n\n /**\n * Broadcast a message to all connected WebRTC peers and return recipient IDs.\n * @param {*} data - The data to broadcast\n * @returns {string[]} Peer IDs that accepted the send\n */\n }, {\n key: \"broadcastToWebRTCPeersWithRecipients\",\n value: function broadcastToWebRTCPeersWithRecipients(data) {\n var recipients = [];\n var _iterator8 = _createForOfIteratorHelper(this.webrtcPeers),\n _step8;\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var _step8$value = _slicedToArray(_step8.value, 2),\n peerId = _step8$value[0],\n peerInfo = _step8$value[1];\n if (peerInfo.status === 'connected' && this.sendToWebRTCPeer(peerId, data)) {\n recipients.push(peerId);\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n return recipients;\n }\n\n /**\n * Build the peer list for gossip (self + connected peers).\n * Used so clusters connected to different bridge instances can discover one another.\n */\n }, {\n key: \"_buildWebRTCPeerGossipPayload\",\n value: function _buildWebRTCPeerGossipPayload() {\n var now = Date.now();\n var peers = [];\n if (this.peerId) {\n peers.push({\n id: this.peerId,\n lastSeen: now,\n registeredAt: now\n });\n }\n var _iterator9 = _createForOfIteratorHelper(this.webrtcPeers),\n _step9;\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var _step9$value = _slicedToArray(_step9.value, 2),\n id = _step9$value[0],\n info = _step9$value[1];\n if (info && info.status === 'connected' && id && id !== this.peerId) {\n peers.push({\n id: id,\n lastSeen: info.lastSeen || info.connectedAt || now,\n registeredAt: info.registeredAt || info.connectedAt || now\n });\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n return {\n // JSON / WebRTC app frames use the wire name; AMP opcode remains P2P_PEER_GOSSIP (0x61).\n type: Message.canonicalTypeName(P2P_PEER_GOSSIP),\n actor: {\n id: this.peerId\n },\n object: {\n peers: peers,\n timestamp: now,\n relayTtl: 8\n },\n timestamp: now\n };\n }\n\n /**\n * Build a peering offer payload (peer needs more connections).\n * Gossiped until fulfilled.\n */\n }, {\n key: \"_buildPeeringOfferPayload\",\n value: function _buildPeeringOfferPayload() {\n var slots = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n return {\n type: Message.canonicalTypeName(P2P_PEERING_OFFER),\n actor: {\n id: this.peerId\n },\n object: {\n slots: slots,\n transport: 'webrtc',\n timestamp: Date.now(),\n relayTtl: 8\n },\n timestamp: Date.now()\n };\n }\n\n /**\n * Send our known peer list to a specific WebRTC peer (gossip for cross-cluster discovery).\n */\n }, {\n key: \"_sendWebRTCPeerGossip\",\n value: function _sendWebRTCPeerGossip(toPeerId) {\n if (!toPeerId || !this.peerId) return false;\n var payload = this._buildWebRTCPeerGossipPayload();\n return this.sendToWebRTCPeer(toPeerId, payload);\n }\n\n /**\n * Broadcast our peer list to all connected WebRTC peers.\n * Enables clusters on different Hubs to discover each other when at least one cross-cluster link exists.\n */\n }, {\n key: \"_broadcastWebRTCPeerGossip\",\n value: function _broadcastWebRTCPeerGossip() {\n var count = this.broadcastToWebRTCPeersWithRecipients(this._buildWebRTCPeerGossipPayload()).length;\n if (count > 0) {\n this._lastWebRTCGossipAt = Date.now();\n }\n }\n\n /**\n * Broadcast a peering offer to all connected WebRTC peers.\n * Gossiped until fulfilled; recipients may connect if they have capacity.\n */\n }, {\n key: \"_broadcastPeeringOffer\",\n value: function _broadcastPeeringOffer() {\n var slots = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n var count = this.broadcastToWebRTCPeersWithRecipients(this._buildPeeringOfferPayload(slots)).length;\n if (count > 0) {\n this._lastPeeringOfferAt = Date.now();\n }\n }\n\n /**\n * Disconnect from a specific WebRTC peer by ID.\n * @param {string} peerId - The peer ID to disconnect\n */\n }, {\n key: \"disconnectWebRTCPeer\",\n value: function disconnectWebRTCPeer(peerId) {\n if (!peerId) return;\n var existingInfo = this.webrtcPeers.get(peerId);\n if (existingInfo && existingInfo.status === 'connected') {\n this._hubReportWebRTCPeerDisconnected(peerId);\n }\n if (this._webrtcConnectTimers && this._webrtcConnectTimers.has(peerId)) {\n clearTimeout(this._webrtcConnectTimers.get(peerId));\n this._webrtcConnectTimers[\"delete\"](peerId);\n }\n var peerInfo = this.webrtcPeers.get(peerId);\n var rtcEntry = this._rtcPeers.get(peerId);\n if (peerInfo && peerInfo.connection) {\n try {\n peerInfo.connection.close();\n } catch (error) {\n console.warn('[BRIDGE]', 'Error closing WebRTC connection for peer:', peerId, safeIdentityErr(error));\n }\n }\n if (rtcEntry && rtcEntry.dc && rtcEntry.dc !== (peerInfo && peerInfo.connection)) {\n try {\n rtcEntry.dc.close();\n } catch (error) {\n console.warn('[BRIDGE]', 'Error closing WebRTC data channel for peer:', peerId, safeIdentityErr(error));\n }\n }\n if (rtcEntry && rtcEntry.pc) {\n try {\n rtcEntry.pc.close();\n } catch (error) {\n console.warn('[BRIDGE]', 'Error closing RTCPeerConnection for peer:', peerId, safeIdentityErr(error));\n }\n }\n this.webrtcPeers[\"delete\"](peerId);\n this._rtcPeers[\"delete\"](peerId);\n this._rtcPendingIce[\"delete\"](peerId);\n if (this._fabricTransportSessions && this._fabricTransportSessions.has(peerId)) {\n this._fabricTransportSessions[\"delete\"](peerId);\n }\n if (this._connectingPeers && this._connectingPeers.has(peerId)) {\n this._connectingPeers[\"delete\"](peerId);\n }\n this._webrtcConnected = this.getWebRTCPeerCount() > 0;\n this.setState({\n webrtcConnected: this._webrtcConnected\n });\n\n // No JSON-RPC notification here; normal close handlers will emit if needed.\n try {\n this.forceUpdate();\n } catch (e) {}\n }\n\n /**\n * Disconnect from all tracked WebRTC peers.\n */\n }, {\n key: \"disconnectAllWebRTCPeers\",\n value: function disconnectAllWebRTCPeers() {\n try {\n var _iterator0 = _createForOfIteratorHelper(this.webrtcPeers),\n _step0;\n try {\n for (_iterator0.s(); !(_step0 = _iterator0.n()).done;) {\n var _step0$value = _slicedToArray(_step0.value, 2),\n peerId = _step0$value[0],\n peerInfo = _step0$value[1];\n if (peerInfo && peerInfo.status === 'connected') {\n this._hubReportWebRTCPeerDisconnected(peerId);\n }\n }\n } catch (err) {\n _iterator0.e(err);\n } finally {\n _iterator0.f();\n }\n } catch (e) {}\n try {\n var _iterator1 = _createForOfIteratorHelper(this.webrtcPeers),\n _step1;\n try {\n for (_iterator1.s(); !(_step1 = _iterator1.n()).done;) {\n var _step1$value = _slicedToArray(_step1.value, 2),\n _peerId = _step1$value[0],\n _peerInfo = _step1$value[1];\n if (_peerInfo && _peerInfo.connection) {\n try {\n _peerInfo.connection.close();\n } catch (error) {\n console.warn('[BRIDGE]', 'Error closing WebRTC connection for peer:', _peerId, safeIdentityErr(error));\n }\n }\n }\n } catch (err) {\n _iterator1.e(err);\n } finally {\n _iterator1.f();\n }\n } catch (e) {}\n this.webrtcPeers.clear();\n this._rtcPeers.clear();\n this._rtcPendingIce.clear();\n if (this._fabricTransportSessions) {\n var hub = this._fabricTransportSessions.get(HUB_FABRIC_SESSION_ID);\n this._fabricTransportSessions.clear();\n if (hub) this._fabricTransportSessions.set(HUB_FABRIC_SESSION_ID, hub);\n }\n if (this._connectingPeers && this._connectingPeers.size) {\n this._connectingPeers.clear();\n }\n if (this._webrtcConnectTimers && this._webrtcConnectTimers.size) {\n var _iterator10 = _createForOfIteratorHelper(this._webrtcConnectTimers.values()),\n _step10;\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var timer = _step10.value;\n clearTimeout(timer);\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n this._webrtcConnectTimers.clear();\n }\n this._webrtcConnected = false;\n this.setState({\n webrtcConnected: false\n });\n try {\n this.forceUpdate();\n } catch (e) {}\n this._notifyPeerListUiRefresh();\n }\n\n /**\n * Get the count of active WebRTC peer connections.\n * @returns {number} Number of connected peers\n */\n }, {\n key: \"getWebRTCPeerCount\",\n value: function getWebRTCPeerCount() {\n var count = 0;\n var _iterator11 = _createForOfIteratorHelper(this.webrtcPeers.values()),\n _step11;\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var peerInfo = _step11.value;\n if (peerInfo.status === 'connected') count++;\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n return count;\n }\n\n /**\n * Low-level helper to encode and send a JSON-RPC payload on an open WebSocket.\n * Caller MUST ensure the socket is open.\n * @param {Object} payload - The JSON-RPC payload\n */\n }, {\n key: \"_sendJSONRPCNow\",\n value: function _sendJSONRPCNow(payload) {\n try {\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.ws.send(message.toBuffer());\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending JSON-RPC:', safeIdentityErr(error));\n }\n }\n\n /**\n * Send a JSON-RPC message via WebSocket.\n * If the WebSocket is not yet connected, queue the payload to be sent on open.\n * @param {Object} payload - The JSON-RPC payload\n */\n }, {\n key: \"_sendJSONRPC\",\n value: function _sendJSONRPC(payload) {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n console.debug('[BRIDGE]', 'Queueing JSON-RPC (WebSocket not connected yet)');\n this._jsonRpcQueue.push(payload);\n return;\n }\n this._sendJSONRPCNow(payload);\n }\n\n /**\n * Call Hub JSON-RPC over HTTP POST /services/rpc (same method set as WebSocket JSONCall).\n * @param {string} method - e.g. ListCollaborationGroups\n * @param {object} [params] - Single object becomes JSON-RPC params[0]\n * @returns {Promise<{ result: * }|{ error: string }>}\n */\n }, {\n key: \"callHubJsonRpc\",\n value: (function () {\n var _callHubJsonRpc = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(method) {\n var params,\n origin,\n id,\n res,\n body,\n msg,\n _args6 = arguments,\n _t4;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.p = _context6.n) {\n case 0:\n params = _args6.length > 1 && _args6[1] !== undefined ? _args6[1] : {};\n if (!(typeof window === 'undefined')) {\n _context6.n = 1;\n break;\n }\n return _context6.a(2, {\n error: 'callHubJsonRpc requires window'\n });\n case 1:\n origin = window.location.origin;\n this._hubJsonRpcSeq = (this._hubJsonRpcSeq || 0) + 1;\n id = this._hubJsonRpcSeq;\n _context6.p = 2;\n _context6.n = 3;\n return fetch(\"\".concat(origin, \"/services/rpc\"), {\n method: 'POST',\n headers: this._hubJsonRpcHttpHeaders(),\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: id,\n method: String(method || ''),\n params: [params && _typeof(params) === 'object' ? params : {}]\n }),\n credentials: 'same-origin',\n cache: 'no-store'\n });\n case 3:\n res = _context6.v;\n _context6.n = 5;\n break;\n case 4:\n _context6.p = 4;\n _t4 = _context6.v;\n return _context6.a(2, {\n error: _t4 && _t4.message ? _t4.message : String(_t4)\n });\n case 5:\n _context6.n = 6;\n return res.json()[\"catch\"](function () {\n return {};\n });\n case 6:\n body = _context6.v;\n if (res.ok) {\n _context6.n = 7;\n break;\n }\n return _context6.a(2, {\n error: body && (body.error || body.message) || \"HTTP \".concat(res.status)\n });\n case 7:\n if (!(body && body.error)) {\n _context6.n = 8;\n break;\n }\n msg = body.error.message || body.error.data || JSON.stringify(body.error);\n return _context6.a(2, {\n error: String(msg || 'RPC error')\n });\n case 8:\n return _context6.a(2, {\n result: body && Object.prototype.hasOwnProperty.call(body, 'result') ? body.result : null\n });\n }\n }, _callee6, this, [[2, 4]]);\n }));\n function callHubJsonRpc(_x3) {\n return _callHubJsonRpc.apply(this, arguments);\n }\n return callHubJsonRpc;\n }())\n }, {\n key: \"addJob\",\n value: function addJob(type, data) {\n this.queue.push({\n type: type,\n data: data\n });\n }\n }, {\n key: \"takeJob\",\n value: function takeJob() {\n if (!this.queue.length) return;\n var job = this.queue.shift();\n if (!job) return;\n switch (job.type) {\n default:\n console.warn('[BRIDGE]', 'Unhandled Bridge job type:', job.type);\n break;\n case 'MessageChunk':\n // console.debug('[BRIDGE]', 'MessageChunk:', job.data);\n break;\n case 'MessageEnd':\n // console.debug('[BRIDGE]', 'MessageEnd:', job.data);\n break;\n case 'MessageStart':\n // console.debug('[BRIDGE]', 'MessageStart:', job.data);\n break;\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$state5 = this.state,\n data = _this$state5.data,\n error = _this$state5.error,\n isConnected = _this$state5.isConnected,\n webrtcConnected = _this$state5.webrtcConnected;\n if (error && this.settings.debug) {\n return /*#__PURE__*/React.createElement(\"div\", null, \"Error: \", error);\n }\n if (!data && this.settings.debug) {\n return /*#__PURE__*/React.createElement(\"div\", null, \"Loading...\");\n }\n return /*#__PURE__*/React.createElement(\"fabric-bridge\", null, this.settings.debug ? /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(\"h1\", null, \"Connection Status:\"), /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(\"strong\", null, \"WebSocket:\"), \" \", isConnected ? '✅ Connected' : '❌ Disconnected'), /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(\"strong\", null, \"WebRTC:\"), \" \", webrtcConnected ? '✅ Connected' : '❌ Disconnected', this.peerId && \" (\".concat(this.peerId, \")\")), /*#__PURE__*/React.createElement(\"h1\", null, \"Data Received:\"), /*#__PURE__*/React.createElement(\"pre\", null, safeDebugStatePreview(data))) : null);\n }\n }, {\n key: \"start\",\n value: function start() {\n this.connect('/');\n // Initialize WebRTC connection\n this.initializeWebRTC();\n // Start heartbeat interval\n if (this._heartbeat) clearInterval(this._heartbeat);\n this._heartbeat = setInterval(this.tick.bind(this), this.settings.tickrate);\n }\n }, {\n key: \"stop\",\n value: function stop() {\n if (this._heartbeat) {\n clearInterval(this._heartbeat);\n this._heartbeat = null;\n }\n\n // Clean up peer discovery timer\n if (this._peerDiscoveryTimer) {\n clearTimeout(this._peerDiscoveryTimer);\n this._peerDiscoveryTimer = null;\n }\n if (this._peerListUiRefreshTimer) {\n clearTimeout(this._peerListUiRefreshTimer);\n this._peerListUiRefreshTimer = null;\n }\n\n // Clean up WebSocket\n if (this.ws) {\n try {\n this.ws.onopen = null;\n this.ws.onmessage = null;\n this.ws.onerror = null;\n this.ws.onclose = null;\n if (this.ws.readyState === WebSocket.OPEN || this.ws.readyState === WebSocket.CONNECTING) {\n this.ws.close();\n }\n } catch (e) {\n console.warn('[BRIDGE]', 'Error cleaning up WebSocket on stop:', safeIdentityErr(e));\n }\n this.ws = null;\n }\n\n // Clean up all WebRTC peer connections\n var _iterator12 = _createForOfIteratorHelper(this.webrtcPeers),\n _step12;\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var _step12$value = _slicedToArray(_step12.value, 2),\n peerId = _step12$value[0],\n peerInfo = _step12$value[1];\n try {\n if (peerInfo.connection) {\n peerInfo.connection.close();\n }\n } catch (e) {\n console.warn('[BRIDGE]', 'Error closing WebRTC peer connection:', peerId, safeIdentityErr(e));\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n this.webrtcPeers.clear();\n this._connectingPeers.clear();\n\n // Clean up native RTCPeerConnection instances.\n var _iterator13 = _createForOfIteratorHelper(this._rtcPeers.entries()),\n _step13;\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var _step13$value = _slicedToArray(_step13.value, 2),\n _peerId2 = _step13$value[0],\n entry = _step13$value[1];\n try {\n if (entry && entry.dc && typeof entry.dc.close === 'function') entry.dc.close();\n } catch (e) {}\n try {\n if (entry && entry.pc && typeof entry.pc.close === 'function') entry.pc.close();\n } catch (e) {\n console.warn('[BRIDGE]', 'Error closing RTCPeerConnection:', _peerId2, safeIdentityErr(e));\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n this._rtcPeers.clear();\n this._rtcPendingIce.clear();\n this._webrtcConnected = false;\n this._webrtcReady = false;\n this.setState({\n webrtcConnected: false\n });\n }\n }, {\n key: \"tick\",\n value: function tick() {\n var now = Date.now();\n var heartbeatMs = Number(this.settings.webrtcHeartbeatIntervalMs || 30000);\n var discoveryMs = Number(this.settings.webrtcDiscoveryIntervalMs || 15000);\n if (this.peerId && this._webrtcReady && this.ws && this.ws.readyState === WebSocket.OPEN && (!this._lastWebRTCPublishAt || now - this._lastWebRTCPublishAt >= heartbeatMs)) {\n this.publishWebRTCOffer();\n }\n if (this.peerId && this._webrtcReady && this.ws && this.ws.readyState === WebSocket.OPEN && (!this._lastWebRTCDiscoverAt || now - this._lastWebRTCDiscoverAt >= discoveryMs)) {\n this.discoverAndConnectToPeers();\n }\n var gossipMs = Number(this.settings.webrtcGossipIntervalMs || 25000);\n var connectedCount = this.getWebRTCPeerCount();\n if (this.peerId && connectedCount > 0 && (!this._lastWebRTCGossipAt || now - this._lastWebRTCGossipAt >= gossipMs)) {\n this._broadcastWebRTCPeerGossip();\n }\n var offerMs = Number(this.settings.webrtcPeeringOfferIntervalMs || 30000);\n var maxPeers = Number(this.settings.maxWebrtcPeers || 5);\n var slotsNeeded = maxPeers - connectedCount - this._connectingPeers.size;\n if (this.peerId && this._webrtcReady && slotsNeeded > 0 && connectedCount > 0 && (!this._lastPeeringOfferAt || now - this._lastPeeringOfferAt >= offerMs)) {\n this._broadcastPeeringOffer(Math.max(1, slotsNeeded));\n }\n this.takeJob();\n }\n\n /**\n * Signs arbitrary text with the component's signing key (BIP340 Schnorr).\n * @param {string} text - The text to sign\n * @returns {{ signature: string, publicKey: string }|null} - Signature hex and public key hex, or null if not configured\n */\n }, {\n key: \"signArbitraryText\",\n value: function signArbitraryText(text) {\n if (!this.settings.signingKey || !this.settings.signingKey[\"private\"]) {\n console.warn('[BRIDGE]', 'No signing key with private key configured');\n return null;\n }\n try {\n var textStr = String(text);\n var sig = this.settings.signingKey.sign(textStr);\n var pubHex = '';\n try {\n pubHex = this.settings.signingKey.pubkey || this.settings.signingKey.xpub || '';\n } catch (e) {}\n return {\n signature: Buffer.isBuffer(sig) ? sig.toString('hex') : String(sig),\n publicKey: pubHex\n };\n } catch (error) {\n console.error('[BRIDGE]', 'Error signing text:', safeIdentityErr(error));\n return null;\n }\n }\n\n /**\n * External signing: post a `DELEGATION_SIGNATURE_REQUEST` Fabric message (JSON-RPC) and poll until the desktop resolves it.\n * Requires delegation JSON in localStorage (`fabricDelegationLocal` key; set after desktop browser login).\n * @param {string} text\n * @returns {Promise<{ signature: string, publicKey: string }|null>}\n */\n }, {\n key: \"signArbitraryTextDelegated\",\n value: (function () {\n var _signArbitraryTextDelegated = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(text) {\n var _this13 = this;\n var d, token, origin, jsonRpcSeq, rpc, postResult, messageId, deadline, pj;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.n) {\n case 0:\n if (!(typeof window === 'undefined')) {\n _context8.n = 1;\n break;\n }\n return _context8.a(2, null);\n case 1:\n d = readStorageJSON(DELEGATION_STORAGE_KEY, null);\n if (d) {\n _context8.n = 2;\n break;\n }\n return _context8.a(2, null);\n case 2:\n token = d && d.token;\n if (!(!token && d && d.externalSigning === false)) {\n _context8.n = 3;\n break;\n }\n return _context8.a(2, null);\n case 3:\n if (token) {\n _context8.n = 4;\n break;\n }\n return _context8.a(2, null);\n case 4:\n origin = window.location.origin;\n jsonRpcSeq = 0;\n rpc = /*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(method, params) {\n var res, body;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.n) {\n case 0:\n jsonRpcSeq += 1;\n _context7.n = 1;\n return fetch(\"\".concat(origin, \"/services/rpc\"), {\n method: 'POST',\n headers: _this13._hubJsonRpcHttpHeaders(),\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: jsonRpcSeq,\n method: method,\n params: [params]\n }),\n cache: 'no-store'\n });\n case 1:\n res = _context7.v;\n _context7.n = 2;\n return res.json()[\"catch\"](function () {\n return {};\n });\n case 2:\n body = _context7.v;\n if (!(body && body.error)) {\n _context7.n = 3;\n break;\n }\n return _context7.a(2, {\n rpcError: body.error.message || 'RPC error'\n });\n case 3:\n return _context7.a(2, body && body.result != null ? body.result : null);\n }\n }, _callee7);\n }));\n return function rpc(_x5, _x6) {\n return _ref6.apply(this, arguments);\n };\n }();\n _context8.n = 5;\n return rpc('PostDelegationSignatureMessage', {\n sessionToken: token,\n message: String(text),\n purpose: 'arbitrary'\n });\n case 5:\n postResult = _context8.v;\n if (!(!postResult || postResult.rpcError || !postResult.ok || !postResult.messageId)) {\n _context8.n = 6;\n break;\n }\n return _context8.a(2, null);\n case 6:\n messageId = postResult.messageId;\n this._emitDelegationSignRequestActivity({\n messageId: messageId,\n preview: postResult.preview || String(text).slice(0, 400),\n purpose: postResult.purpose || 'arbitrary'\n });\n deadline = Date.now() + 5 * 60 * 1000;\n case 7:\n if (!(Date.now() < deadline)) {\n _context8.n = 15;\n break;\n }\n _context8.n = 8;\n return new Promise(function (res) {\n return setTimeout(res, 500);\n });\n case 8:\n _context8.n = 9;\n return rpc('GetDelegationSignatureMessage', {\n sessionToken: token,\n messageId: messageId\n });\n case 9:\n pj = _context8.v;\n if (!(!pj || pj.rpcError)) {\n _context8.n = 10;\n break;\n }\n return _context8.a(3, 7);\n case 10:\n if (!(pj.ok === false)) {\n _context8.n = 11;\n break;\n }\n return _context8.a(3, 7);\n case 11:\n if (!(pj.status === 'pending')) {\n _context8.n = 12;\n break;\n }\n return _context8.a(3, 7);\n case 12:\n if (!(pj.status === 'rejected')) {\n _context8.n = 13;\n break;\n }\n this._resolveDelegationSignRequestActivity(messageId, 'rejected');\n return _context8.a(2, null);\n case 13:\n if (!(pj.status === 'approved' && pj.signature)) {\n _context8.n = 14;\n break;\n }\n this._resolveDelegationSignRequestActivity(messageId, 'approved');\n return _context8.a(2, {\n signature: pj.signature,\n publicKey: pj.pubkeyHex\n });\n case 14:\n _context8.n = 7;\n break;\n case 15:\n this._resolveDelegationSignRequestActivity(messageId, 'timeout');\n return _context8.a(2, null);\n }\n }, _callee8, this);\n }));\n function signArbitraryTextDelegated(_x4) {\n return _signArbitraryTextDelegated.apply(this, arguments);\n }\n return signArbitraryTextDelegated;\n }()\n /**\n * Verifies a Schnorr signature for arbitrary text.\n * @param {string} text - The original message\n * @param {string} signatureHex - The signature (64-byte hex)\n * @param {string} publicKeyHex - The compressed public key (33-byte hex)\n * @returns {boolean|null} - True if valid, false if invalid, null on error\n */\n /**\n * Compressed secp256k1 public key (hex) for the local identity — used as buyer refund key in inventory P2TR HTLCs.\n * @returns {string|null}\n */\n )\n }, {\n key: \"getHtlcRefundPublicKeyHex\",\n value: function getHtlcRefundPublicKeyHex() {\n var k = this.settings.signingKey;\n if (!k || !k[\"public\"] || typeof k[\"public\"].encodeCompressed !== 'function') return null;\n try {\n return k[\"public\"].encodeCompressed('hex');\n } catch (e) {\n return null;\n }\n }\n }, {\n key: \"verifyArbitraryText\",\n value: function verifyArbitraryText(text, signatureHex, publicKeyHex) {\n if (!text || !signatureHex || !publicKeyHex) return null;\n try {\n var key = new Key({\n \"public\": publicKeyHex.trim()\n });\n var sig = Buffer.from(signatureHex.trim(), 'hex');\n if (sig.length !== 64) return false;\n return key.verifySchnorr(text, sig);\n } catch (error) {\n console.error('[BRIDGE]', 'Error verifying text:', safeIdentityErr(error));\n return null;\n }\n }\n\n /**\n * True when the Bridge has a key that can produce Schnorr signatures (xprv / private material).\n * Watch-only and desktop-delegated identities use xpub-only {@link Key} — JSONCall may be sent unsigned.\n */\n }, {\n key: \"_canSignOutgoing\",\n value: function _canSignOutgoing() {\n var k = this.settings.signingKey || this.key;\n return !!(k && k[\"private\"]);\n }\n\n /** True when Fabric wire `JSONCall` envelopes can be Schnorr-signed in this browser (has private key). */\n }, {\n key: \"hasLocalWireSigningKey\",\n value: function hasLocalWireSigningKey() {\n return this._canSignOutgoing();\n }\n\n /**\n * Signs a message with the component's signing key when a private key is available.\n * Without a private key, returns the buffer unchanged (Hub accepts unsigned JSONCall for many read paths).\n * @param {Buffer} message - The message to sign\n * @returns {Buffer|Message} - Signed Fabric Message, or original buffer when unsigned\n */\n }, {\n key: \"signMessage\",\n value: function signMessage(message) {\n var signingKey = this.settings.signingKey || this.key;\n if (!signingKey) {\n if (this.settings.debug) console.debug('[BRIDGE]', 'No signing key — sending unsigned');\n return message;\n }\n if (!this._canSignOutgoing()) {\n if (this.settings.debug) {\n console.debug('[BRIDGE]', 'Watch-only or delegated identity (public key only) — sending unsigned');\n }\n return message;\n }\n var fabricMessage = Message.fromBuffer(message);\n if (!fabricMessage) {\n console.warn('[BRIDGE]', 'Could not create Fabric Message from buffer');\n return message;\n }\n try {\n return fabricMessage.signWithKey(signingKey);\n } catch (error) {\n console.warn('[BRIDGE]', 'Signing failed, sending unsigned:', safeIdentityErr(error));\n return message;\n }\n }\n\n /**\n * Publish a signed Fabric wire Message over the browser mesh and Hub fan-out.\n * Prefer binary RTCDataChannel; RelayFromWebRTC carries author-signed bytes to Fabric TCP.\n * Does not use HTTP.\n * @param {Buffer|object} message Message instance or AMP buffer\n * @param {{ originalType?: string }} [opts]\n * @returns {{ meshRecipients: string[], relayedToHub: boolean }}\n */\n }, {\n key: \"relaySignedFabricWire\",\n value: function relaySignedFabricWire(message) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var buf = null;\n if (message && typeof message.toBuffer === 'function') {\n buf = message.toBuffer();\n } else if (typeof Buffer !== 'undefined' && Buffer.isBuffer && Buffer.isBuffer(message)) {\n buf = message;\n } else if (typeof message === 'string' && /^[0-9a-fA-F]+$/.test(message) && message.length % 2 === 0) {\n buf = Buffer.from(message, 'hex');\n } else if (typeof message === 'string') {\n buf = Buffer.from(message, 'base64');\n }\n if (!buf || !buf.length) {\n return {\n meshRecipients: [],\n relayedToHub: false\n };\n }\n var originalType = opts.originalType || 'fabric-message';\n var meshRecipients = this.broadcastToWebRTCPeersWithRecipients(buf);\n var relayedToHub = false;\n if (this._isConnected && this.ws && this.ws.readyState === 1 && this.peerId) {\n try {\n this._sendJSONRPC({\n method: 'RelayFromWebRTC',\n params: [{\n fromPeerId: this.peerId,\n envelope: {\n original: buf.toString('base64'),\n originalType: originalType,\n hops: [{\n from: this.peerId,\n at: Date.now()\n }]\n }\n }]\n });\n relayedToHub = true;\n } catch (e) {\n console.warn('[BRIDGE]', 'relaySignedFabricWire Hub relay failed:', safeIdentityErr(e));\n }\n }\n return {\n meshRecipients: meshRecipients,\n relayedToHub: relayedToHub\n };\n }\n\n /**\n * Sends a Fabric wire message over WebSocket (or WebRTC). Signs via `signMessage` when\n * `_canSignOutgoing()`; otherwise sends the same buffer unsigned (watch-only / delegated clients).\n * @param {Buffer} message - The message to send\n * @param {Boolean} preferWebRTC - Whether to prefer WebRTC over WebSocket\n */\n }, {\n key: \"sendSignedMessage\",\n value: function sendSignedMessage(message) {\n var preferWebRTC = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var signedMessage = this.signMessage(message);\n var signedBuffer = signedMessage.toBuffer ? signedMessage.toBuffer() : signedMessage;\n this.sendMessage(signedBuffer, preferWebRTC);\n }\n }, {\n key: \"sendMessage\",\n value: function sendMessage(message) {\n var preferWebRTC = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n // Prefer browser mesh + Hub RelayFromWebRTC (no HTTP) when requested.\n if (preferWebRTC && this._webrtcConnected) {\n try {\n var buf = message;\n if (message && typeof message.toBuffer === 'function') buf = message.toBuffer();\n var result = this.relaySignedFabricWire(buf, {\n originalType: 'fabric-message'\n });\n if (result.meshRecipients.length || result.relayedToHub) {\n console.debug('[BRIDGE]', 'Message sent via WebRTC mesh', result);\n return;\n }\n } catch (error) {\n console.warn('[BRIDGE]', 'WebRTC send failed, falling back to WebSocket:', safeIdentityErr(error));\n }\n }\n\n // Fallback to WebSocket\n if (!this._isConnected || !this.ws || this.ws.readyState !== WebSocket.OPEN) {\n this.messageQueue.push(message);\n return;\n }\n try {\n this.ws.send(message);\n console.debug('[BRIDGE]', 'Message sent via WebSocket');\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending message via WebSocket:', safeIdentityErr(error));\n // Queue the message if send fails\n this.messageQueue.push(message);\n }\n }\n\n /**\n * Subscribe to state changes at a specific path\n * @param {String} path - The path to subscribe to (e.g. '/services/bitcoin')\n */\n }, {\n key: \"subscribe\",\n value: function subscribe(path) {\n if (this.state.subscriptions.has(path)) {\n if (this.settings.debug) console.debug('[BRIDGE]', 'Already subscribed to:', path);\n return;\n }\n this._sendSubscribe(path);\n this.state.subscriptions.add(path);\n console.debug('[BRIDGE]', 'Subscribed to:', path);\n }\n\n /**\n * Unsubscribe from state changes at a specific path\n * @param {String} path - The path to unsubscribe from\n */\n }, {\n key: \"unsubscribe\",\n value: function unsubscribe(path) {\n if (!this.state.subscriptions.has(path)) {\n console.debug('[BRIDGE]', 'Not subscribed to:', path);\n return;\n }\n var message = Message.fromVector(['UNSUBSCRIBE', path]);\n var messageBuffer = message.toBuffer();\n this.sendSignedMessage(messageBuffer);\n this.state.subscriptions[\"delete\"](path);\n console.debug('[BRIDGE]', 'Unsubscribed from:', path);\n }\n\n /**\n * Get the current connection status for both WebSocket and WebRTC\n * @returns {Object} Connection status object\n */\n }, {\n key: \"getConnectionStatus\",\n value: function getConnectionStatus() {\n return {\n websocket: {\n connected: this._isConnected,\n readyState: this.ws ? this.ws.readyState : null\n },\n webrtc: {\n connected: this._webrtcConnected,\n peerId: this.peerId,\n serverConnection: this.webrtcConnection ? this.webrtcConnection.peer : null\n },\n preferredProtocol: this._webrtcConnected ? 'webrtc' : 'websocket'\n };\n }\n\n /**\n * Send a message preferring WebRTC if available\n * @param {Buffer|String} message - The message to send\n */\n }, {\n key: \"sendViaWebRTC\",\n value: function sendViaWebRTC(message) {\n this.sendMessage(message, true);\n }\n\n /**\n * Send a message preferring WebSocket\n * @param {Buffer|String} message - The message to send\n */\n }, {\n key: \"sendViaWebSocket\",\n value: function sendViaWebSocket(message) {\n this.sendMessage(message, false);\n }\n\n /**\n * Reconnect WebRTC if connection is lost\n */\n }, {\n key: \"reconnectWebRTC\",\n value: function reconnectWebRTC() {\n if (!this.peerId || !this._webrtcReady) {\n console.debug('[BRIDGE]', 'Reinitializing WebRTC identity...');\n this.initializeWebRTC();\n return;\n }\n console.debug('[BRIDGE]', 'Rediscovering WebRTC peers...');\n this.discoverAndConnectToPeers();\n }\n }, {\n key: \"onSocketMessage\",\n value: function () {\n var _onSocketMessage = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9(msg) {\n var _this14 = this;\n var buffer, arrayBuffer, transportMeta, tSessionId, tKind, message, sess, text, wireB64, alias, name, id, jsonCall, result, p, addr, fabricId, keys, _iterator14, _step14, k, _iterator15, _step15, doc, _id, docId, pending, purchaseDid, purchaseErrDid, distDid, distErrDid, accDid, ctx, failDid, _ctx, did, backendDocId, contractId, targetId, _i6, _Object$entries4, _Object$entries4$_i, localId, existingDoc, existing, parsed, bridgeEnv, payload, _localId, recipient, match, pid, _doc, _targetId, _name, signerId, peers, candidates, obj, slots, transport, offererId, peerId, items, keysToTouch, _i7, _Object$keys3, _k, ex, _iterator16, _step16, _k2, _existing, inventory, next, relayRaw, envelope, original, originalType, buf, firstHop, relId, relKind, _parsed, _peers, _candidates, _parsed2, _obj2, _transport, _slots, _offererId, _parsed3, _peerId3, _items, _keysToTouch, _i8, _Object$keys4, _k3, _ex, _iterator17, _step17, _k4, _existing2, _inventory, chat, _parsed4, normalizedChat, content, proposal, relayOfferPrefix, env, created, _id2, clientId, rawChat, _chat, _content, _proposal2, offerPrefix, _env, _created2, _id3, _clientId, bodyRaw, patchData, _t5, _t6, _t7, _t8, _t9, _t0, _t1, _t10, _t11;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.p = _context9.n) {\n case 0:\n _context9.p = 0;\n if (!(!msg || !msg.data)) {\n _context9.n = 1;\n break;\n }\n console.debug('[BRIDGE]', 'Invalid message format:', msg);\n return _context9.a(2);\n case 1:\n if (!Buffer.isBuffer(msg.data)) {\n _context9.n = 2;\n break;\n }\n buffer = msg.data;\n _context9.n = 8;\n break;\n case 2:\n if (!(msg.data instanceof Uint8Array)) {\n _context9.n = 3;\n break;\n }\n buffer = Buffer.from(msg.data.buffer, msg.data.byteOffset, msg.data.byteLength);\n _context9.n = 8;\n break;\n case 3:\n if (!(msg.data instanceof ArrayBuffer)) {\n _context9.n = 4;\n break;\n }\n buffer = Buffer.from(msg.data);\n _context9.n = 8;\n break;\n case 4:\n if (!(typeof Blob !== 'undefined' && msg.data instanceof Blob)) {\n _context9.n = 6;\n break;\n }\n _context9.n = 5;\n return msg.data.arrayBuffer();\n case 5:\n arrayBuffer = _context9.v;\n buffer = Buffer.from(arrayBuffer);\n _context9.n = 8;\n break;\n case 6:\n if (!(typeof msg.data === 'string')) {\n _context9.n = 7;\n break;\n }\n buffer = Buffer.from(msg.data);\n _context9.n = 8;\n break;\n case 7:\n console.debug('[BRIDGE]', 'Unsupported message data type:', _typeof(msg.data));\n return _context9.a(2);\n case 8:\n if (Buffer.isBuffer(buffer)) {\n _context9.n = 9;\n break;\n }\n console.debug('[BRIDGE]', 'Failed to create valid buffer from message data');\n return _context9.a(2);\n case 9:\n transportMeta = msg && msg._fabricTransport || {\n sessionId: HUB_FABRIC_SESSION_ID,\n kind: SESSION_KIND_HUB\n };\n tSessionId = transportMeta.sessionId;\n tKind = transportMeta.kind;\n if (!(buffer.length > BRIDGE_INBOUND_WIRE_MAX_BYTES)) {\n _context9.n = 10;\n break;\n }\n this._fabricPenalizeTransport(tSessionId, tKind, 50, 'oversized-wire-frame');\n return _context9.a(2);\n case 10:\n if (!(buffer.length < FABRIC_WIRE_HEADER_SIZE)) {\n _context9.n = 11;\n break;\n }\n this._fabricPenalizeTransport(tSessionId, tKind, 35, 'truncated-wire-header');\n return _context9.a(2);\n case 11:\n _context9.p = 11;\n message = Message.fromBuffer(buffer);\n _context9.n = 13;\n break;\n case 12:\n _context9.p = 12;\n _t5 = _context9.v;\n if (this.settings.debug) {\n console.debug('[BRIDGE]', 'Message.fromBuffer failed:', safeIdentityErr(_t5));\n }\n this._fabricPenalizeTransport(tSessionId, tKind, 40, 'wire-parse-error');\n return _context9.a(2);\n case 13:\n if (message) {\n _context9.n = 14;\n break;\n }\n this._fabricPenalizeTransport(tSessionId, tKind, 35, 'wire-null-message');\n return _context9.a(2);\n case 14:\n if (fabricWireBodyIntegrityOk(message)) {\n _context9.n = 15;\n break;\n }\n this._fabricPenalizeTransport(tSessionId, tKind, 45, 'body-hash-mismatch');\n return _context9.a(2);\n case 15:\n sess = this._getFabricTransportSession(tSessionId, tKind);\n if (sess) sess.commitWireMessage(message);\n\n // Handle message based on type\n _t6 = message.type;\n _context9.n = _t6 === 'P2P_CHAT_MESSAGE' ? 17 : _t6 === 'CONTRACT_MESSAGE' ? 18 : _t6 === 'P2P_CONTRACT_MESSAGE' ? 18 : _t6 === 'P2P_PEER_ALIAS' ? 19 : _t6 === 'P2P_MESSAGE_RECEIPT' ? 20 : _t6 === 'Pong' ? 21 : _t6 === 'P2P_PING' ? 22 : _t6 === 'P2P_PONG' ? 22 : _t6 === 'JSONCall' ? 23 : _t6 === 'JSON_CALL' ? 23 : _t6 === 'GENERIC_MESSAGE' ? 40 : _t6 === 'GenericMessage' ? 40 : _t6 === 'P2P_BASE_MESSAGE' ? 40 : _t6 === 'P2P_FORWARD' ? 52 : _t6 === 'P2P_RELAY' ? 53 : _t6 === 'CHAT_MESSAGE' ? 68 : _t6 === 'ChatMessage' ? 68 : _t6 === 'JSONPatch' ? 76 : _t6 === 'MessageStart' ? 80 : _t6 === 'MessageChunk' ? 80 : _t6 === 'HelpMsgUser' ? 80 : _t6 === 'HelpMsgAdmin' ? 80 : _t6 === 'IngestFile' ? 80 : _t6 === 'IngestDocument' ? 80 : _t6 === 'takenJob' ? 80 : _t6 === 'completedJob' ? 80 : 16;\n break;\n case 16:\n console.debug('[BRIDGE]', 'Unhandled message type:', message.type);\n return _context9.a(3, 81);\n case 17:\n // First-class mesh chat: body = UTF-8 text. Route through WebRTC chat handler shape.\n text = message.raw && message.raw.data ? message.raw.data.toString('utf8') : typeof message.data === 'string' ? message.data : String(message.body || '');\n if (tKind === SESSION_KIND_WEBRTC && tSessionId) {\n this.handleWebRTCPeerMessage(tSessionId, {\n type: 'P2P_CHAT_MESSAGE',\n actor: {\n id: tSessionId\n },\n object: {\n content: text,\n created: Date.now()\n }\n });\n }\n return _context9.a(3, 81);\n case 18:\n // Author-signed contract frames (GroupChat, MessageReceipt, …).\n // Fan into Hub → Fabric TCP via RelayFromWebRTC without hub re-signing.\n if (tKind === SESSION_KIND_WEBRTC && tSessionId && this._isConnected && this.ws && this.ws.readyState === 1) {\n try {\n wireB64 = Buffer.from(buffer).toString('base64');\n this._sendJSONRPC({\n method: 'RelayFromWebRTC',\n params: [{\n fromPeerId: tSessionId,\n envelope: {\n original: wireB64,\n originalType: 'CONTRACT_MESSAGE',\n hops: [{\n from: tSessionId,\n at: Date.now()\n }]\n }\n }]\n });\n this._webrtcRewardPeer(tSessionId, 2, 'contract-message');\n } catch (e) {\n console.warn('[BRIDGE]', 'CONTRACT_MESSAGE WebRTC relay failed:', safeIdentityErr(e));\n }\n }\n try {\n window.dispatchEvent(new CustomEvent('fabric:contractMessage', {\n detail: {\n message: message,\n wireBase64: Buffer.from(buffer).toString('base64'),\n fromPeerId: tKind === SESSION_KIND_WEBRTC ? tSessionId : null,\n transport: tKind\n }\n }));\n } catch (_) {/* ignore */}\n return _context9.a(3, 81);\n case 19:\n alias = message.raw && message.raw.data ? message.raw.data.toString('utf8') : typeof message.data === 'string' ? message.data : String(message.body || '');\n name = String(alias || '').trim().slice(0, 64);\n if (name) {\n this._peerAliasById = this._peerAliasById || {};\n // WebRTC: map to the transport peer. Hub wire: map to AMP author only —\n // never fall back to the local identity (that rebinds remote aliases onto us).\n id = null;\n if (tKind === SESSION_KIND_WEBRTC && tSessionId) {\n id = tSessionId;\n } else if (message.author) {\n id = String(message.author).toLowerCase();\n }\n if (id) this._peerAliasById[id] = name;\n if (tKind === SESSION_KIND_WEBRTC && tSessionId) {\n this.handleWebRTCPeerMessage(tSessionId, {\n type: 'P2P_PEER_ALIAS',\n actor: {\n id: tSessionId\n },\n object: {\n name: name\n }\n });\n }\n }\n return _context9.a(3, 81);\n case 20:\n return _context9.a(3, 81);\n case 21:\n return _context9.a(3, 81);\n case 22:\n return _context9.a(3, 81);\n case 23:\n _context9.p = 23;\n jsonCall = JSON.parse(message.body);\n if (!(jsonCall.method === 'JSONCallResult')) {\n _context9.n = 37;\n break;\n }\n result = Array.isArray(jsonCall.params) && jsonCall.params.length > 0 ? jsonCall.params[jsonCall.params.length - 1] : jsonCall.result || null;\n if (result && _typeof(result) === 'object' && result.status === 'error' && typeof result.message === 'string' && result.message && !result.type && result.documentId == null && result.contractId == null) {\n toast.error(String(result.message), {\n header: 'Hub',\n duration: 6000\n });\n }\n\n // Full GetNetworkStatus / ListPeers payloads (and hub pushes). Match {@link isHubNetworkStatusShape}\n // so we do not drop valid status when `network` is absent or the hub shape drifts slightly.\n if (result && _typeof(result) === 'object' && !result.type && isHubNetworkStatusShape(result)) {\n this.applyHubNetworkStatusPayload(result);\n }\n\n // WebRTC peer discovery response (does not touch networkStatus)\n if (result && _typeof(result) === 'object' && result.type === 'ListWebRTCPeersResult' && Array.isArray(result.peers)) {\n if (this.settings.debug) {\n console.debug('[BRIDGE]', 'Received WebRTC peer candidates:', result.peers.length);\n }\n this.handlePeerCandidates(result.peers);\n }\n // Native WebRTC signaling messages\n this._handleWebRTCSignalResult(result);\n // Handle non-network results used by routed pages / detail views\n if (result && _typeof(result) === 'object' && result.type === 'GetPeerResult' && result.peer) {\n p = result.peer;\n addr = p.address;\n fabricId = p.id;\n if (addr || fabricId) {\n this.globalState.peers = this.globalState.peers || {};\n keys = _toConsumableArray(new Set([addr, fabricId].filter(Boolean)));\n _iterator14 = _createForOfIteratorHelper(keys);\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n k = _step14.value;\n this.globalState.peers[k] = _objectSpread(_objectSpread({}, this.globalState.peers[k] || {}), p);\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/peers/\".concat(keys[0]),\n value: this.globalState.peers[keys[0]]\n },\n globalState: this.globalState\n }\n }));\n }\n }\n // Documents RPC results\n if (!(result && _typeof(result) === 'object' && result.type === 'ListDocumentsResult' && Array.isArray(result.documents))) {\n _context9.n = 32;\n break;\n }\n this.globalState.documents = this.globalState.documents || {};\n _iterator15 = _createForOfIteratorHelper(result.documents);\n _context9.p = 24;\n _iterator15.s();\n case 25:\n if ((_step15 = _iterator15.n()).done) {\n _context9.n = 28;\n break;\n }\n doc = _step15.value;\n if (!(!doc || !doc.id)) {\n _context9.n = 26;\n break;\n }\n return _context9.a(3, 27);\n case 26:\n this._storeDocument(doc.id, _objectSpread(_objectSpread({}, this.globalState.documents[doc.id] || {}), doc));\n case 27:\n _context9.n = 25;\n break;\n case 28:\n _context9.n = 30;\n break;\n case 29:\n _context9.p = 29;\n _t7 = _context9.v;\n _iterator15.e(_t7);\n case 30:\n _context9.p = 30;\n _iterator15.f();\n return _context9.f(30);\n case 31:\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'replace',\n path: \"/documents\",\n value: this.globalState.documents\n },\n globalState: this.globalState\n }\n }));\n case 32:\n if (result && _typeof(result) === 'object' && result.type === 'RefreshDocumentMarketResult') {\n window.dispatchEvent(new CustomEvent('documentMarketRefresh', {\n detail: result\n }));\n try {\n this.sendListDocumentsRequest();\n } catch (_) {}\n }\n if (result && _typeof(result) === 'object' && result.type === 'GetDocumentResult') {\n if (result.document && result.document.id) {\n _id = result.document.id;\n this._storeDocument(_id, result.document);\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/documents/\".concat(_id),\n value: result.document\n },\n globalState: this.globalState\n }\n }));\n } else if (result.documentId) {\n window.dispatchEvent(new CustomEvent('documentLoadFailed', {\n detail: {\n documentId: String(result.documentId),\n message: result.message && String(result.message) || 'Document not found.'\n }\n }));\n }\n }\n if (result && _typeof(result) === 'object' && result.type === 'ConfirmInventoryHtlcPaymentResult') {\n window.dispatchEvent(new CustomEvent('inventoryHtlcConfirmResult', {\n detail: result\n }));\n }\n this.mergeCreateDocumentRpcResult(result);\n if (result && _typeof(result) === 'object' && (result.type === 'ClaimPurchaseResult' || result.status === 'error' && result.documentId)) {\n docId = result.documentId;\n pending = this._pendingClaimCallbacks && docId && this._pendingClaimCallbacks.get(docId);\n if (pending) {\n this._pendingClaimCallbacks[\"delete\"](docId);\n if (result.document) {\n pending.resolve({\n document: result.document\n });\n } else {\n pending.resolve({\n error: result && result.message || 'Claim failed'\n });\n }\n }\n }\n if (result && _typeof(result) === 'object' && result.type === 'CreatePurchaseInvoiceResult' && result.documentId) {\n purchaseDid = String(result.documentId);\n if (this._pendingCreatePurchaseInvoiceBackendIds) {\n this._pendingCreatePurchaseInvoiceBackendIds[\"delete\"](purchaseDid);\n }\n window.dispatchEvent(new CustomEvent('purchaseInvoiceReady', {\n detail: {\n documentId: purchaseDid,\n address: result.address,\n amountSats: result.amountSats,\n contentHash: result.contentHash,\n network: result.network\n }\n }));\n } else if (result && _typeof(result) === 'object' && result.status === 'error' && result.documentId != null && String(result.documentId) !== '' && this._pendingCreatePurchaseInvoiceBackendIds && this._pendingCreatePurchaseInvoiceBackendIds.has(String(result.documentId))) {\n purchaseErrDid = String(result.documentId);\n this._pendingCreatePurchaseInvoiceBackendIds[\"delete\"](purchaseErrDid);\n window.dispatchEvent(new CustomEvent('purchaseInvoiceFailed', {\n detail: {\n documentId: purchaseErrDid,\n message: String(result.message || 'Could not create purchase invoice')\n }\n }));\n }\n if (result && _typeof(result) === 'object' && result.type === 'CreateDistributeInvoiceResult' && result.documentId) {\n distDid = String(result.documentId);\n if (this._pendingCreateDistributeInvoiceBackendIds) {\n this._pendingCreateDistributeInvoiceBackendIds[\"delete\"](distDid);\n }\n window.dispatchEvent(new CustomEvent('distributeInvoiceReady', {\n detail: {\n documentId: distDid,\n address: result.address,\n amountSats: result.amountSats,\n config: result.config,\n network: result.network\n }\n }));\n } else if (result && _typeof(result) === 'object' && result.status === 'error' && result.documentId != null && String(result.documentId) !== '' && this._pendingCreateDistributeInvoiceBackendIds && this._pendingCreateDistributeInvoiceBackendIds.has(String(result.documentId))) {\n distErrDid = String(result.documentId);\n this._pendingCreateDistributeInvoiceBackendIds[\"delete\"](distErrDid);\n window.dispatchEvent(new CustomEvent('distributeInvoiceFailed', {\n detail: {\n documentId: distErrDid,\n message: String(result.message || 'Could not create distribute invoice')\n }\n }));\n }\n if (result && _typeof(result) === 'object' && result.type === 'AcceptDistributeProposalResult' && result.documentId) {\n accDid = String(result.documentId);\n if (this._pendingAcceptDistributeContext && this._pendingAcceptDistributeContext.backendId === accDid) {\n this._pendingAcceptDistributeContext = null;\n }\n window.dispatchEvent(new CustomEvent('distributeInvoiceReady', {\n detail: {\n documentId: accDid,\n address: result.address,\n amountSats: result.amountSats,\n config: result.config,\n network: result.network,\n fromProposal: true\n }\n }));\n } else if (result && _typeof(result) === 'object' && result.status === 'error' && result.documentId != null && String(result.documentId) !== '' && this._pendingAcceptDistributeContext && String(result.documentId) === this._pendingAcceptDistributeContext.backendId) {\n ctx = this._pendingAcceptDistributeContext;\n this._pendingAcceptDistributeContext = null;\n failDid = String(result.documentId);\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('acceptDistributeProposalFailed', {\n detail: {\n documentId: failDid,\n proposalId: ctx.proposalId,\n message: String(result.message || 'Could not accept proposal')\n }\n }));\n }\n } catch (_) {}\n }\n if (result && _typeof(result) === 'object' && result.type === 'SendDistributeProposalResult') {\n _ctx = this._pendingSendDistributeProposalContext;\n if (_ctx) {\n this._pendingSendDistributeProposalContext = null;\n did = String(result.documentId != null && String(result.documentId) !== '' ? result.documentId : _ctx.backendId);\n if (result.status === 'success') {\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('distributeProposalSent', {\n detail: {\n documentId: did,\n proposalId: result.proposalId != null ? String(result.proposalId) : '',\n peerKey: _ctx.peerKey\n }\n }));\n }\n } catch (_) {}\n } else {\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('distributeProposalFailed', {\n detail: {\n documentId: did,\n message: String(result.message || 'Could not send hosting offer')\n }\n }));\n }\n } catch (_) {}\n }\n }\n }\n this.mergePublishDocumentRpcResult(result);\n if (result && _typeof(result) === 'object' && result.type === 'CreateExecutionContractResult' && result.contract) {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('executionContractCreated', {\n detail: {\n contract: result.contract,\n id: result.id || result.contract.id\n }\n }));\n }\n }\n if (!(result && _typeof(result) === 'object' && result.type === 'CreateStorageContractResult' && result.contract && result.contract.document)) {\n _context9.n = 36;\n break;\n }\n backendDocId = result.contract.document; // sha-based id\n contractId = result.id || result.contract.id;\n if (!(backendDocId && contractId)) {\n _context9.n = 36;\n break;\n }\n this.globalState.documents = this.globalState.documents || {};\n targetId = backendDocId; // Prefer local alias by sha256 when present.\n _i6 = 0, _Object$entries4 = Object.entries(this.globalState.documents);\n case 33:\n if (!(_i6 < _Object$entries4.length)) {\n _context9.n = 35;\n break;\n }\n _Object$entries4$_i = _slicedToArray(_Object$entries4[_i6], 2), localId = _Object$entries4$_i[0], existingDoc = _Object$entries4$_i[1];\n if (!(existingDoc && (existingDoc.sha256 === backendDocId || existingDoc.sha === backendDocId))) {\n _context9.n = 34;\n break;\n }\n targetId = localId;\n return _context9.a(3, 35);\n case 34:\n _i6++;\n _context9.n = 33;\n break;\n case 35:\n existing = this.globalState.documents[targetId] || {};\n this.globalState.documents[targetId] = _objectSpread(_objectSpread({}, existing), {}, {\n storageContractId: contractId\n });\n if (targetId !== backendDocId && this.globalState.documents[backendDocId]) {\n delete this.globalState.documents[backendDocId];\n }\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/documents/\".concat(targetId),\n value: this.globalState.documents[targetId]\n },\n globalState: this.globalState\n }\n }));\n\n // Notify that payment is bonded; proposals can update to show the contract.\n window.dispatchEvent(new CustomEvent('storageContractBonded', {\n detail: {\n documentId: backendDocId,\n contractId: contractId,\n targetId: targetId\n }\n }));\n case 36:\n if (result && _typeof(result) === 'object' && result.type === 'CreateStorageContractFailed') {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('storageContractBondFailed', {\n detail: {\n documentId: result.documentId,\n message: result.message && String(result.message) || 'Create storage contract failed.'\n }\n }));\n }\n }\n if (typeof this.props.responseCapture === 'function') {\n this.props.responseCapture({\n type: 'GenericMessage',\n content: message.body\n });\n }\n case 37:\n _context9.n = 39;\n break;\n case 38:\n _context9.p = 38;\n _t8 = _context9.v;\n console.debug('[BRIDGE]', 'JSONCall body is not valid JSON, skipping parse');\n case 39:\n return _context9.a(3, 81);\n case 40:\n _context9.p = 40;\n parsed = JSON.parse(message.body);\n bridgeEnv = fabricBridgeEnvelope.tryParse(parsed);\n if (bridgeEnv && typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('fabricBridgeEnvelope', {\n detail: bridgeEnv\n }));\n }\n if (!(parsed && parsed.type === 'Tombstone' && parsed.object && typeof window !== 'undefined')) {\n _context9.n = 41;\n break;\n }\n window.dispatchEvent(new CustomEvent('fabric:tombstone', {\n detail: {\n messageId: parsed.object.activityMessageId || null,\n documentId: parsed.object.documentId || null\n }\n }));\n return _context9.a(3, 81);\n case 41:\n if (!(parsed && (parsed.type === 'TrackedApplicationContractPublish' || parsed.type === 'TrackedApplicationContractAccepted' || parsed.type === 'TrackedApplicationContractRejected') && typeof window !== 'undefined')) {\n _context9.n = 42;\n break;\n }\n window.dispatchEvent(new CustomEvent('fabric:trackedApplicationContract', {\n detail: {\n type: parsed.type,\n object: parsed.object || null\n }\n }));\n return _context9.a(3, 81);\n case 42:\n if (!(parsed && parsed.type === 'CollaborationInvitation' && parsed.object && typeof window !== 'undefined')) {\n _context9.n = 43;\n break;\n }\n payload = parsed.object;\n _localId = this._getIdentityId() || '';\n recipient = payload && payload.recipientFabricPeerId ? String(payload.recipientFabricPeerId) : '';\n match = !recipient || _localId && recipient === _localId || this.peerId && recipient === this.peerId;\n if (match) {\n window.dispatchEvent(new CustomEvent('fabric:collaborationInvitation', {\n detail: payload\n }));\n try {\n pid = payload && payload.recipientPeerIdentity ? String(payload.recipientPeerIdentity) : '';\n pushUiNotification({\n id: \"collab-invite-\".concat(String(payload.invitationId || Date.now())),\n kind: 'collaboration_invite',\n title: 'Collaboration invite',\n subtitle: pid ? \"Invite for \".concat(pid) : 'Review and respond',\n href: '/settings/collaboration',\n copyText: \"\".concat(String(payload.acceptUrl || ''), \"\\n\").concat(String(payload.declineUrl || '')).trim()\n });\n } catch (e) {/* ignore */}\n }\n return _context9.a(3, 81);\n case 43:\n if (!(parsed && parsed.type === DOCUMENT_OFFER && typeof window !== 'undefined')) {\n _context9.n = 44;\n break;\n }\n window.dispatchEvent(new CustomEvent('fabric:documentOffer', {\n detail: parsed\n }));\n return _context9.a(3, 81);\n case 44:\n if (!(parsed && Message.typeEquals(parsed.type, P2P_FILE_SEND) && parsed.object)) {\n _context9.n = 45;\n break;\n }\n _doc = parsed.object;\n if (_doc.id && _doc.contentBase64) {\n if (_doc.part && _doc.part.transferId != null && _doc.part.total != null) {\n this._handleP2pFileChunk(_doc, _doc.part);\n } else {\n _targetId = this._resolveDocumentTargetId(_doc.id, _doc);\n this._storeDocument(_targetId, _objectSpread(_objectSpread({}, _doc), {}, {\n receivedFromPeer: true\n }));\n this._persistDocuments();\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/documents/\".concat(_targetId),\n value: this.globalState.documents[_targetId]\n },\n globalState: this.globalState\n }\n }));\n }\n }\n return _context9.a(3, 81);\n case 45:\n if (!(parsed && Message.typeEquals(parsed.type, P2P_PEER_ALIAS))) {\n _context9.n = 46;\n break;\n }\n _name = parsed.object && parsed.object.name != null ? String(parsed.object.name).trim() : '';\n signerId = parsed.actor && parsed.actor.id ? String(parsed.actor.id) : null;\n if (_name && signerId) {\n this._peerAliasById = this._peerAliasById || {};\n this._peerAliasById[signerId] = _name.slice(0, 64);\n }\n return _context9.a(3, 81);\n case 46:\n if (!(parsed && Message.typeEquals(parsed.type, P2P_PEER_GOSSIP) && Array.isArray(parsed.object && parsed.object.peers))) {\n _context9.n = 47;\n break;\n }\n this._recordPeerGossipTopology(parsed, null);\n peers = parsed.object.peers;\n candidates = peers.map(function (p) {\n return {\n id: p.id || p.peerId,\n peerId: p.id || p.peerId,\n lastSeen: p.lastSeen || p.registeredAt || Date.now(),\n registeredAt: p.registeredAt || p.lastSeen || Date.now(),\n source: 'gossip'\n };\n }).filter(function (c) {\n return c.id && c.id !== _this14.peerId;\n });\n if (candidates.length > 0) this.handlePeerCandidates(candidates);\n return _context9.a(3, 81);\n case 47:\n if (!(parsed && Message.typeEquals(parsed.type, P2P_PEERING_OFFER) && parsed.object)) {\n _context9.n = 48;\n break;\n }\n obj = parsed.object;\n slots = Number(obj.slots || obj.needed || 1);\n transport = obj.transport || 'webrtc';\n if (transport === 'webrtc' && slots > 0 && this.peerId) {\n offererId = parsed.actor && parsed.actor.id;\n if (offererId && offererId !== this.peerId && !this.webrtcPeers.has(offererId) && !this._connectingPeers.has(offererId)) {\n this.handlePeerCandidates([{\n id: offererId,\n peerId: offererId,\n lastSeen: Date.now(),\n source: 'peeringOffer'\n }]);\n }\n }\n return _context9.a(3, 81);\n case 48:\n if (!isDocumentInventoryDocumentsOfferResponse(parsed)) {\n _context9.n = 49;\n break;\n }\n peerId = parsed.actor && parsed.actor.id;\n items = Array.isArray(parsed.object.items) ? parsed.object.items : [];\n if (peerId) {\n this.globalState.peers = this.globalState.peers || {};\n keysToTouch = new Set([peerId]);\n for (_i7 = 0, _Object$keys3 = Object.keys(this.globalState.peers); _i7 < _Object$keys3.length; _i7++) {\n _k = _Object$keys3[_i7];\n ex = this.globalState.peers[_k];\n if (ex && ex.id === peerId) keysToTouch.add(_k);\n }\n _iterator16 = _createForOfIteratorHelper(keysToTouch);\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n _k2 = _step16.value;\n _existing = this.globalState.peers[_k2] || {};\n inventory = _existing.inventory || {};\n next = _objectSpread(_objectSpread({}, _existing), {}, {\n inventory: _objectSpread(_objectSpread({}, inventory), {}, {\n documents: items\n })\n });\n this.globalState.peers[_k2] = next;\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/peers/\".concat(peerId),\n value: this.globalState.peers[peerId]\n },\n globalState: this.globalState\n }\n }));\n }\n return _context9.a(3, 81);\n case 49:\n _context9.n = 51;\n break;\n case 50:\n _context9.p = 50;\n _t9 = _context9.v;\n case 51:\n this.props.responseCapture({\n type: 'GenericMessage',\n content: message.body\n });\n return _context9.a(3, 81);\n case 52:\n // Directed onion is TCP Peer–terminated (@fabric/core Peer#sendOnion).\n // Do not peel into the browser mesh or wrap in P2P_RELAY flood — that\n // would expose hop metadata and defeat IP-hiding routes.\n console.warn('[BRIDGE] Ignoring P2P_FORWARD on WebSocket (use Hub SendOnion / desktop Peer)');\n return _context9.a(3, 81);\n case 53:\n _context9.p = 53;\n // Peer-mesh layout: body = raw inner Message bytes (magic + header + body).\n relayRaw = message.raw && Buffer.isBuffer(message.raw.data) ? message.raw.data : null;\n if (!(relayRaw && relayRaw.length >= FABRIC_WIRE_HEADER_SIZE && relayRaw.readUInt32BE(0) === MAGIC_BYTES)) {\n _context9.n = 54;\n break;\n }\n this.onSocketMessage({\n data: relayRaw,\n _fabricTransport: {\n sessionId: HUB_FABRIC_SESSION_ID,\n kind: SESSION_KIND_HUB\n }\n });\n return _context9.a(3, 81);\n case 54:\n // Hub↔browser layout: JSON { original, originalType, hops }.\n envelope = JSON.parse(message.body);\n original = envelope && envelope.original;\n originalType = envelope && envelope.originalType;\n if (!(!original || !originalType)) {\n _context9.n = 55;\n break;\n }\n return _context9.a(3, 81);\n case 55:\n if (!(originalType === 'fabric-message')) {\n _context9.n = 56;\n break;\n }\n buf = Buffer.from(original, 'base64');\n firstHop = envelope && Array.isArray(envelope.hops) && envelope.hops[0] && envelope.hops[0].from;\n relId = firstHop != null ? String(firstHop) : HUB_FABRIC_SESSION_ID;\n relKind = firstHop != null ? SESSION_KIND_WEBRTC : SESSION_KIND_HUB;\n this.onSocketMessage({\n data: buf,\n _fabricTransport: {\n sessionId: relId,\n kind: relKind\n }\n });\n return _context9.a(3, 81);\n case 56:\n if (!Message.typeEquals(originalType, P2P_PEER_GOSSIP)) {\n _context9.n = 57;\n break;\n }\n _parsed = typeof original === 'string' ? JSON.parse(original) : original;\n this._recordPeerGossipTopology(_parsed, null);\n _peers = Array.isArray(_parsed && _parsed.object && _parsed.object.peers) ? _parsed.object.peers : [];\n _candidates = _peers.map(function (p) {\n return {\n id: p.id || p.peerId,\n peerId: p.id || p.peerId,\n lastSeen: p.lastSeen || p.registeredAt || Date.now(),\n registeredAt: p.registeredAt || p.lastSeen || Date.now(),\n source: 'gossip'\n };\n }).filter(function (c) {\n return c.id && c.id !== _this14.peerId;\n });\n if (_candidates.length > 0) this.handlePeerCandidates(_candidates);\n return _context9.a(3, 81);\n case 57:\n if (!Message.typeEquals(originalType, P2P_PEERING_OFFER)) {\n _context9.n = 58;\n break;\n }\n _parsed2 = typeof original === 'string' ? JSON.parse(original) : original;\n _obj2 = _parsed2 && _parsed2.object || {};\n _transport = _obj2.transport || 'webrtc';\n _slots = Number(_obj2.slots || _obj2.needed || 1);\n if (_transport === 'webrtc' && _slots > 0 && this.peerId) {\n _offererId = _parsed2 && _parsed2.actor && _parsed2.actor.id;\n if (_offererId && _offererId !== this.peerId && !this.webrtcPeers.has(_offererId) && !this._connectingPeers.has(_offererId)) {\n this.handlePeerCandidates([{\n id: _offererId,\n peerId: _offererId,\n lastSeen: Date.now(),\n source: 'peeringOffer'\n }]);\n }\n }\n return _context9.a(3, 81);\n case 58:\n if (!isDocumentInventoryResponseType(originalType)) {\n _context9.n = 59;\n break;\n }\n _parsed3 = typeof original === 'string' ? JSON.parse(original) : original;\n if (isDocumentInventoryDocumentsOfferResponse(_parsed3)) {\n _peerId3 = _parsed3.actor && _parsed3.actor.id;\n _items = Array.isArray(_parsed3.object.items) ? _parsed3.object.items : [];\n if (_peerId3) {\n this.globalState.peers = this.globalState.peers || {};\n _keysToTouch = new Set([_peerId3]);\n for (_i8 = 0, _Object$keys4 = Object.keys(this.globalState.peers); _i8 < _Object$keys4.length; _i8++) {\n _k3 = _Object$keys4[_i8];\n _ex = this.globalState.peers[_k3];\n if (_ex && _ex.id === _peerId3) _keysToTouch.add(_k3);\n }\n _iterator17 = _createForOfIteratorHelper(_keysToTouch);\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n _k4 = _step17.value;\n _existing2 = this.globalState.peers[_k4] || {};\n _inventory = _existing2.inventory || {};\n this.globalState.peers[_k4] = _objectSpread(_objectSpread({}, _existing2), {}, {\n inventory: _objectSpread(_objectSpread({}, _inventory), {}, {\n documents: _items\n })\n });\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/peers/\".concat(_peerId3),\n value: this.globalState.peers[_peerId3]\n },\n globalState: this.globalState\n }\n }));\n }\n }\n return _context9.a(3, 81);\n case 59:\n chat = null;\n if (Message.typeEquals(originalType, P2P_CHAT_MESSAGE)) {\n if (typeof original === 'string') {\n try {\n _parsed4 = JSON.parse(original);\n chat = _parsed4 && _typeof(_parsed4) === 'object' ? _parsed4 : {\n type: Message.canonicalTypeName(P2P_CHAT_MESSAGE),\n text: String(original)\n };\n } catch (_) {\n // Mesh body is UTF-8 text only (WebRTC → Hub RelayFromWebRTC).\n chat = {\n type: Message.canonicalTypeName(P2P_CHAT_MESSAGE),\n text: original\n };\n }\n } else {\n chat = original;\n }\n }\n normalizedChat = normalizeP2pChatMessage(chat);\n if (normalizedChat) {\n _context9.n = 60;\n break;\n }\n return _context9.a(3, 81);\n case 60:\n content = chatTextOf(normalizedChat);\n if (!this._handleHtlcKeyReveal(content)) {\n _context9.n = 61;\n break;\n }\n return _context9.a(3, 81);\n case 61:\n proposal = this._parseDistributeProposal(content, normalizedChat);\n if (!proposal) {\n _context9.n = 62;\n break;\n }\n this._storeDistributeProposal(proposal);\n return _context9.a(3, 81);\n case 62:\n if (!this._tryDispatchFederationContractInviteFromChat(content, normalizedChat)) {\n _context9.n = 63;\n break;\n }\n return _context9.a(3, 81);\n case 63:\n if (!this._tryDispatchCollaborationInviteFromChat(content, normalizedChat)) {\n _context9.n = 64;\n break;\n }\n return _context9.a(3, 81);\n case 64:\n relayOfferPrefix = \"[\".concat(DOCUMENT_OFFER, \"] \");\n if (typeof content === 'string' && content.startsWith(relayOfferPrefix) && typeof window !== 'undefined') {\n try {\n env = JSON.parse(content.slice(relayOfferPrefix.length));\n if (env && env.type === DOCUMENT_OFFER) {\n window.dispatchEvent(new CustomEvent('fabric:documentOffer', {\n detail: env\n }));\n }\n } catch (_) {/* ignore */}\n }\n if (content.trim()) {\n _context9.n = 65;\n break;\n }\n return _context9.a(3, 81);\n case 65:\n created = normalizedChat.object && normalizedChat.object.created || chat.created || Date.now();\n _id2 = normalizedChat.object && normalizedChat.object.id || \"chat:\".concat(created, \":\").concat(normalizedChat.actor && normalizedChat.actor.id || 'unknown');\n this.globalState.messages = this.globalState.messages || {};\n clientId = normalizedChat.object && normalizedChat.object.clientId;\n if (clientId && this.globalState.messages[clientId]) {\n delete this.globalState.messages[clientId];\n }\n this.globalState.messages[_id2] = Object.assign({}, normalizedChat, {\n transport: 'relay',\n delivery: {\n via: 'bridge',\n hops: envelope.hops || []\n }\n });\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/messages/\".concat(_id2),\n value: this.globalState.messages[_id2]\n },\n globalState: this.globalState\n }\n }));\n this._persistMessages();\n _context9.n = 67;\n break;\n case 66:\n _context9.p = 66;\n _t0 = _context9.v;\n console.error('[BRIDGE]', 'Could not parse P2P_RELAY envelope:', safeIdentityErr(_t0));\n case 67:\n return _context9.a(3, 81);\n case 68:\n _context9.p = 68;\n rawChat = JSON.parse(message.body);\n _chat = normalizeP2pChatMessage(rawChat) || rawChat;\n _content = chatTextOf(_chat);\n if (!this._handleHtlcKeyReveal(_content)) {\n _context9.n = 69;\n break;\n }\n return _context9.a(3, 81);\n case 69:\n // Check for Distribute Proposal (structured JSON in chat content)\n _proposal2 = this._parseDistributeProposal(_content, _chat);\n if (!_proposal2) {\n _context9.n = 70;\n break;\n }\n this._storeDistributeProposal(_proposal2);\n return _context9.a(3, 81);\n case 70:\n if (!this._tryDispatchFederationContractInviteFromChat(_content, _chat)) {\n _context9.n = 71;\n break;\n }\n return _context9.a(3, 81);\n case 71:\n if (!this._tryDispatchCollaborationInviteFromChat(_content, _chat)) {\n _context9.n = 72;\n break;\n }\n return _context9.a(3, 81);\n case 72:\n offerPrefix = \"[\".concat(DOCUMENT_OFFER, \"] \");\n if (typeof _content === 'string' && _content.startsWith(offerPrefix) && typeof window !== 'undefined') {\n try {\n _env = JSON.parse(_content.slice(offerPrefix.length));\n if (_env && _env.type === DOCUMENT_OFFER) {\n window.dispatchEvent(new CustomEvent('fabric:documentOffer', {\n detail: _env\n }));\n }\n } catch (_) {/* ignore malformed demo line */}\n }\n if (_content.trim()) {\n _context9.n = 73;\n break;\n }\n return _context9.a(3, 81);\n case 73:\n _created2 = _chat && _chat.object && _chat.object.created || _chat && _chat.created || Date.now();\n _id3 = _chat && _chat.object && _chat.object.id || \"chat:\".concat(_created2, \":\").concat(_chat && _chat.actor && _chat.actor.id || 'unknown');\n this.globalState.messages = this.globalState.messages || {};\n if (this.settings && this.settings.debug) {\n try {\n // Lightweight audit log so we can see exactly how chat identities\n // are flowing into the browser.\n console.log('[BRIDGE:CHAT]', JSON.stringify({\n actorId: _chat && _chat.actor && _chat.actor.id,\n clientId: _chat && _chat.object && _chat.object.clientId,\n channel: _chat && _chat.object && _chat.object.channel,\n created: _created2\n }));\n } catch (e) {\n console.log('[BRIDGE:CHAT]', 'parse failed', safeIdentityErr(e));\n }\n }\n\n // If this message has a clientId, remove the pending optimistic entry we stored earlier\n _clientId = _chat && _chat.object && _chat.object.clientId;\n if (_clientId && this.globalState.messages[_clientId]) {\n delete this.globalState.messages[_clientId];\n }\n this.globalState.messages[_id3] = _chat;\n\n // Notify UI of new chat message (re-use existing globalStateUpdate channel).\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/messages/\".concat(_id3),\n value: _chat\n },\n globalState: this.globalState\n }\n }));\n this._persistMessages();\n _context9.n = 75;\n break;\n case 74:\n _context9.p = 74;\n _t1 = _context9.v;\n console.error('[BRIDGE]', 'Could not parse ChatMessage body:', safeIdentityErr(_t1));\n case 75:\n return _context9.a(3, 81);\n case 76:\n _context9.p = 76;\n bodyRaw = message.body != null ? message.body : message.data != null && typeof message.data === 'string' ? message.data : message.data != null && (Buffer.isBuffer(message.data) || typeof Uint8Array !== 'undefined' && message.data instanceof Uint8Array) ? Buffer.from(message.data).toString('utf8') : null;\n if (!(bodyRaw == null)) {\n _context9.n = 77;\n break;\n }\n console.error('[BRIDGE]', 'JSONPatch message has no body/data');\n return _context9.a(3, 81);\n case 77:\n patchData = JSON.parse(bodyRaw); // Update global state\n this.updateGlobalState(patchData);\n\n // Emit as PATCH format for components\n this.props.responseCapture({\n type: 'PATCH',\n path: patchData.path,\n value: patchData.value\n });\n _context9.n = 79;\n break;\n case 78:\n _context9.p = 78;\n _t10 = _context9.v;\n console.error('[BRIDGE]', 'Could not parse JSONPatch message body:', safeIdentityErr(_t10));\n case 79:\n return _context9.a(3, 81);\n case 80:\n this.props.responseCapture(message.toObject());\n return _context9.a(3, 81);\n case 81:\n // Update component state with message data\n this.setState({\n data: message.toObject()\n }, function () {\n // Call onStateUpdate prop if provided for backward compatibility\n if (_this14.props.onStateUpdate && typeof _this14.props.onStateUpdate === 'function') {\n _this14.props.onStateUpdate(_this14.state);\n }\n });\n _context9.n = 83;\n break;\n case 82:\n _context9.p = 82;\n _t11 = _context9.v;\n console.error('[BRIDGE]', 'Error processing message:', safeIdentityErr(_t11));\n this.setState({\n error: safeIdentityErr(_t11)\n }, function () {\n // Call onStateUpdate prop if provided for backward compatibility\n if (_this14.props.onStateUpdate && typeof _this14.props.onStateUpdate === 'function') {\n _this14.props.onStateUpdate(_this14.state);\n }\n });\n case 83:\n return _context9.a(2);\n }\n }, _callee9, this, [[76, 78], [68, 74], [53, 66], [40, 50], [24, 29, 30, 31], [23, 38], [11, 12], [0, 82]]);\n }));\n function onSocketMessage(_x7) {\n return _onSocketMessage.apply(this, arguments);\n }\n return onSocketMessage;\n }()\n }, {\n key: \"onSocketOpen\",\n value: function () {\n var _onSocketOpen = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0() {\n var now, message, messageBuffer;\n return _regenerator().w(function (_context0) {\n while (1) switch (_context0.n) {\n case 0:\n this._fabricHubReconnectSuspended = false;\n this._resetHubFabricTransportSession();\n this.attempts = 1;\n now = Date.now();\n this.sendNetworkStatusRequest();\n this._resubscribeAll();\n this._flushChatSubmissionQueue();\n this._flushPendingHubChatQueue();\n this._flushPeerMessageQueue();\n message = Message.fromVector(['Ping', now.toString()]);\n messageBuffer = message.toBuffer();\n this.sendSignedMessage(messageBuffer);\n case 1:\n return _context0.a(2);\n }\n }, _callee0, this);\n }));\n function onSocketOpen() {\n return _onSocketOpen.apply(this, arguments);\n }\n return onSocketOpen;\n }()\n /**\n * Send network status request (backward compatibility)\n */\n }, {\n key: \"sendNetworkStatusRequest\",\n value: function sendNetworkStatusRequest() {\n var message = Message.fromVector(['JSONCall', JSON.stringify({\n method: 'GetNetworkStatus',\n params: []\n })]);\n var buffer = message.toBuffer();\n if (this.settings.debug) {\n console.debug('[BRIDGE]', 'Sending network status request, bytes:', buffer && buffer.length);\n }\n this.sendSignedMessage(buffer);\n }\n\n /**\n * Apply a {@link GetNetworkStatus} / push payload (same as WebSocket JSONCallResult path).\n * Used by HTTP `/services/rpc` fallbacks when the UI needs catalog + peers without waiting on WS.\n * @param {object} result\n * @returns {boolean} true when applied\n */\n }, {\n key: \"applyHubNetworkStatusPayload\",\n value: function applyHubNetworkStatusPayload(result) {\n var _this15 = this;\n if (!result || _typeof(result) !== 'object' || result.type || !isHubNetworkStatusShape(result)) {\n return false;\n }\n this.setState({\n networkStatus: result,\n lastNetworkStatus: result\n }, function () {\n try {\n _this15._flushPeerMessageQueue();\n } catch (_) {}\n try {\n if (typeof window !== 'undefined') {\n window.__FABRIC_LAST_NETWORK_STATUS__ = result;\n window.dispatchEvent(new CustomEvent('networkStatusUpdate', {\n detail: {\n networkStatus: result\n }\n }));\n }\n } catch (_) {}\n });\n var published = result.publishedDocuments;\n if (published && _typeof(published) === 'object' && this.globalState && this.globalState.documents) {\n var changed = mergePublishedDocumentsFromHubStatus(this.globalState.documents, published);\n if (changed) {\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'replace',\n path: '/documents',\n value: this.globalState.documents\n },\n globalState: this.globalState\n }\n }));\n }\n } catch (_) {}\n }\n }\n var hubMessages = result.messages;\n if (hubMessages && _typeof(hubMessages) === 'object' && this.globalState) {\n var current = this.globalState.messages && _typeof(this.globalState.messages) === 'object' ? this.globalState.messages : {};\n var merged = _objectSpread(_objectSpread({}, current), hubMessages);\n this.globalState.messages = merged;\n this._persistMessages();\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'replace',\n path: '/messages',\n value: this.globalState.messages\n },\n globalState: this.globalState\n }\n }));\n }\n } catch (_) {}\n }\n return true;\n }\n\n /**\n * Merge `ListDocuments` JSON-RPC result into {@link globalState.documents} (same as WebSocket path).\n * @param {object} result\n * @returns {boolean} true when merged\n */\n }, {\n key: \"mergeListDocumentsRpcResult\",\n value: function mergeListDocumentsRpcResult(result) {\n if (!result || _typeof(result) !== 'object' || result.type !== 'ListDocumentsResult' || !Array.isArray(result.documents)) {\n return false;\n }\n this.globalState.documents = this.globalState.documents || {};\n var _iterator18 = _createForOfIteratorHelper(result.documents),\n _step18;\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var doc = _step18.value;\n if (!doc || !doc.id) continue;\n this._storeDocument(doc.id, _objectSpread(_objectSpread({}, this.globalState.documents[doc.id] || {}), doc));\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'replace',\n path: \"/documents\",\n value: this.globalState.documents\n },\n globalState: this.globalState\n }\n }));\n }\n } catch (_) {}\n return true;\n }\n\n /**\n * Request an updated peer list from the hub.\n * This uses the ListPeers JSONCall method, which returns\n * the same status shape as GetNetworkStatus (including peers).\n */\n }, {\n key: \"sendListPeersRequest\",\n value: function sendListPeersRequest() {\n var message = Message.fromVector(['JSONCall', JSON.stringify({\n method: 'ListPeers',\n params: []\n })]);\n var buffer = message.toBuffer();\n if (this.settings.debug) {\n console.debug('[BRIDGE]', 'Sending ListPeers request, bytes:', buffer && buffer.length);\n }\n this.sendSignedMessage(buffer);\n }\n\n /**\n * Send a request to add a peer.\n * @param {Object} peer - Peer descriptor (e.g. { address }).\n */\n }, {\n key: \"sendAddPeerRequest\",\n value: function sendAddPeerRequest() {\n var _this16 = this;\n var peer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var raw = typeof peer === 'string' ? peer : peer && peer.address || '';\n var normalizedAddr = normalizePeerAddressInput(raw);\n if (!normalizedAddr) {\n console.warn('[BRIDGE] sendAddPeerRequest: no address provided');\n return;\n }\n try {\n var payload = {\n method: 'AddPeer',\n params: [{\n address: normalizedAddr\n }]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n var buffer = message.toBuffer();\n this.sendSignedMessage(buffer);\n\n // After requesting a new peer, refresh the peer list so\n // the UI reflects the updated peer set.\n setTimeout(function () {\n try {\n _this16.sendListPeersRequest();\n } catch (refreshError) {\n console.error('[BRIDGE]', 'Error refreshing peer list after AddPeer:', safeIdentityErr(refreshError));\n }\n }, 1000);\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending AddPeer request:', safeIdentityErr(error));\n }\n }\n\n /**\n * Request to disconnect a peer by address.\n * @param {string|{ address: string }} address - Peer address or object with address.\n */\n }, {\n key: \"sendRemovePeerRequest\",\n value: function sendRemovePeerRequest(idOrAddress) {\n var _this17 = this;\n var resolved = _typeof(idOrAddress) === 'object' && idOrAddress ? idOrAddress.id || idOrAddress.address : idOrAddress;\n if (!resolved) return;\n try {\n var payload = {\n method: 'RemovePeer',\n params: [resolved]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n setTimeout(function () {\n try {\n _this17.sendListPeersRequest();\n } catch (e) {\n console.error('[BRIDGE]', 'Error refreshing peer list after RemovePeer:', safeIdentityErr(e));\n }\n }, 500);\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending RemovePeer request:', safeIdentityErr(error));\n }\n }\n\n /**\n * Submit a chat message for broadcast: store locally first, queue for hub, then relay to all clients and Fabric nodes.\n * @param {string} text - Message text.\n */\n }, {\n key: \"submitChatMessage\",\n value: function submitChatMessage(text) {\n var trimmed = typeof text === 'string' ? text.trim() : '';\n if (!trimmed) return false;\n if (!this._hasUnlockedIdentity()) {\n console.warn('[BRIDGE]', 'submitChatMessage called without an unlocked identity; message will not be sent.');\n this._notifyIdentityUnlockRequired();\n return false;\n }\n var identityId = this._getIdentityId();\n var clientId = \"pending-\".concat(Date.now(), \"-\").concat(Math.random().toString(36).slice(2, 10));\n var created = Date.now();\n var actorId = identityId;\n var chat = {\n type: 'P2P_CHAT_MESSAGE',\n actor: {\n id: actorId\n },\n object: {\n content: trimmed,\n created: created,\n clientId: clientId\n },\n // Unified flow: optimistic entry remains pending until canonical hub echo.\n status: 'pending'\n };\n this.globalState.messages = this.globalState.messages || {};\n this.globalState.messages[clientId] = chat;\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/messages/\".concat(clientId),\n value: chat\n },\n globalState: this.globalState\n }\n }));\n this._persistMessages();\n\n // In WebRTC-only mode, do not depend on WebSocket queue state.\n // Send immediately over mesh (and skip hub RPC in sendSubmitChatMessageRequest).\n if (this.preferWebRTCChat) {\n this.sendSubmitChatMessageRequest({\n text: trimmed,\n created: created,\n clientId: clientId,\n actor: actorId ? {\n id: actorId\n } : undefined\n });\n return true;\n }\n this.chatSubmissionQueue.push({\n text: trimmed,\n clientId: clientId,\n actorId: actorId,\n created: created\n });\n this._flushChatSubmissionQueue();\n return true;\n }\n }, {\n key: \"_flushChatSubmissionQueue\",\n value: function _flushChatSubmissionQueue() {\n var hubConnected = this._isConnected && this.ws && this.ws.readyState === 1;\n while (this.chatSubmissionQueue.length > 0) {\n var item = this.chatSubmissionQueue.shift();\n if (!item) continue;\n if (hubConnected) {\n this.sendSubmitChatMessageRequest({\n text: item.text,\n created: item.created,\n clientId: item.clientId,\n actor: item.actorId ? {\n id: item.actorId\n } : undefined\n });\n } else {\n // Hub down: deliver to WebRTC-connected peers now, and queue for bridge when it reconnects\n this._broadcastChatToWebRTCPeersOnly({\n text: item.text,\n created: item.created,\n clientId: item.clientId,\n actor: item.actorId ? {\n id: item.actorId\n } : undefined\n });\n this.pendingHubChatQueue.push({\n text: item.text,\n created: item.created,\n clientId: item.clientId,\n actorId: item.actorId\n });\n }\n }\n }\n\n /**\n * When the Hub reconnects, send any chat messages that were queued while it was offline.\n */\n }, {\n key: \"_flushPendingHubChatQueue\",\n value: function _flushPendingHubChatQueue() {\n if (!this._isConnected || !this.ws || this.ws.readyState !== 1) return;\n while (this.pendingHubChatQueue.length > 0) {\n var item = this.pendingHubChatQueue.shift();\n if (!item) continue;\n this.sendSubmitChatMessageRequest({\n text: item.text,\n created: item.created,\n clientId: item.clientId,\n actor: item.actorId ? {\n id: item.actorId\n } : undefined\n });\n }\n }\n\n /**\n * Broadcast a chat message to connected WebRTC peers only (no Hub).\n * Used when the Hub is disconnected so messages still reach other browser peers.\n */\n }, {\n key: \"_broadcastChatToWebRTCPeersOnly\",\n value: function _broadcastChatToWebRTCPeersOnly(body) {\n var text = typeof body === 'string' ? body : body && body.text || '';\n if (!text) return;\n var created = body && body.created ? body.created : Date.now();\n var clientId = body && body.clientId;\n var actorId = this._getIdentityId() || body && body.actor && body.actor.id || null;\n // Prefer first-class AMP UTF-8 body on the data channel when we can sign.\n var payload = text;\n try {\n var signingKey = this.settings.signingKey || this.key;\n if (typeof Message !== 'undefined' && Message.fromVector && signingKey) {\n var msg = Message.fromVector(['P2P_CHAT_MESSAGE', String(text)]);\n if (typeof msg.signWithKey === 'function') msg.signWithKey(signingKey);\n payload = msg;\n } else {\n payload = {\n type: 'P2P_CHAT_MESSAGE',\n actor: actorId ? {\n id: actorId\n } : {\n id: null\n },\n object: {\n content: text,\n created: created,\n clientId: clientId\n }\n };\n }\n } catch (_) {\n payload = {\n type: 'P2P_CHAT_MESSAGE',\n actor: actorId ? {\n id: actorId\n } : {\n id: null\n },\n object: {\n content: text,\n created: created,\n clientId: clientId\n }\n };\n }\n var recipients = this.broadcastToWebRTCPeersWithRecipients(payload);\n var deliveredTo = recipients.length;\n this._lastWebRTCChatDeliveryCount = deliveredTo;\n this._lastWebRTCChatSentAt = Date.now();\n this._lastWebRTCRecipientPeerIds = recipients;\n if (deliveredTo > 0) {\n console.debug('[BRIDGE]', 'Chat delivered to WebRTC peers (hub offline):', deliveredTo, recipients);\n }\n if (clientId && this.globalState && this.globalState.messages && this.globalState.messages[clientId]) {\n try {\n var _msg = this.globalState.messages[clientId];\n _msg.transport = _msg.transport || 'webrtc';\n _msg.delivery = Object.assign({}, _msg.delivery || {}, {\n via: 'mesh',\n deliveredTo: deliveredTo\n });\n this.globalState.messages[clientId] = _msg;\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'replace',\n path: \"/messages/\".concat(clientId),\n value: _msg\n },\n globalState: this.globalState\n }\n }));\n this._persistMessages();\n } catch (e) {}\n }\n }\n\n /**\n * Send SubmitChatMessage JSONCall to hub (broadcast to all clients + Fabric nodes).\n * @param {Object} body - { text, clientId?, actor? }\n */\n }, {\n key: \"sendSubmitChatMessageRequest\",\n value: function sendSubmitChatMessageRequest(body) {\n var text = typeof body === 'string' ? body : body && body.text || '';\n if (!text) return;\n if (!this._hasUnlockedIdentity()) {\n console.warn('[BRIDGE]', 'sendSubmitChatMessageRequest called without an unlocked identity; message will not be sent.');\n this._notifyIdentityUnlockRequired();\n return;\n }\n var created = body && body.created ? body.created : Date.now();\n var clientId = body && body.clientId;\n var actorId = this._getIdentityId() || null;\n\n // In WebRTC mode, also fan out over the mesh, but keep the hub RPC as\n // the canonical network propagation path.\n if (this.preferWebRTCChat) {\n var payload = {\n type: 'P2P_CHAT_MESSAGE',\n actor: actorId ? {\n id: actorId\n } : {\n id: null\n },\n object: {\n content: text,\n created: created,\n clientId: clientId\n }\n };\n try {\n var signingKey = this.settings.signingKey || this.key;\n if (typeof Message !== 'undefined' && Message.fromVector && signingKey) {\n var msg = Message.fromVector(['P2P_CHAT_MESSAGE', String(text)]);\n if (typeof msg.signWithKey === 'function') msg.signWithKey(signingKey);\n payload = msg;\n }\n } catch (_) {/* keep JSON fallback for mesh UI */}\n var recipients = this.broadcastToWebRTCPeersWithRecipients(payload);\n var deliveredTo = recipients.length;\n this._lastWebRTCChatDeliveryCount = deliveredTo;\n this._lastWebRTCChatSentAt = Date.now();\n this._lastWebRTCRecipientPeerIds = recipients;\n\n // Mark the locally-pending message with explicit WebRTC delivery details.\n if (clientId && this.globalState && this.globalState.messages && this.globalState.messages[clientId]) {\n try {\n var _msg2 = this.globalState.messages[clientId];\n _msg2.transport = 'webrtc';\n _msg2.delivery = Object.assign({}, _msg2.delivery || {}, {\n via: 'mesh',\n deliveredTo: deliveredTo\n });\n this.globalState.messages[clientId] = _msg2;\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'replace',\n path: \"/messages/\".concat(clientId),\n value: _msg2\n },\n globalState: this.globalState\n }\n }));\n this._persistMessages();\n } catch (e) {}\n }\n console.debug('[BRIDGE]', 'WebRTC chat broadcast delivery count:', deliveredTo);\n }\n\n // Always also submit via hub so the message is on the canonical broadcast path.\n try {\n var rpcBody = _typeof(body) === 'object' ? Object.assign({}, body, {\n created: created,\n clientId: clientId,\n actor: body.actor || (actorId ? {\n id: actorId\n } : undefined)\n }) : {\n text: text,\n created: created,\n clientId: clientId,\n actor: actorId ? {\n id: actorId\n } : undefined\n };\n var _payload = {\n method: 'SubmitChatMessage',\n params: [rpcBody]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(_payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending SubmitChatMessage:', safeIdentityErr(error));\n }\n }\n\n /**\n * Ask the hub to remove an activity row and/or unpublish a document (admin token required server-side).\n * Uses HTTP POST `/services/rpc` so the caller can await success or surface `status: 'error'` from the hub\n * (WebSocket JSONCall alone does not return a result to the client).\n * @param {string} [messageId] - Hub `globalState.messages` key (omit for unpublish-only).\n * @param {string} [adminToken] - Hub admin token (from setup / localStorage).\n * @param {string} [documentId] - optional published document id to remove from the hub catalog.\n * @returns {Promise<{ ok: boolean, message?: string, result?: object }>}\n */\n }, {\n key: \"emitTombstone\",\n value: (function () {\n var _emitTombstone = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee1(messageId, adminToken, documentId) {\n var mid, token, docId, isOpts, id, d, rpcParams, rpcOrigin, res, body, msg, result, _t12, _t13;\n return _regenerator().w(function (_context1) {\n while (1) switch (_context1.p = _context1.n) {\n case 0:\n isOpts = messageId !== null && _typeof(messageId) === 'object' && !Array.isArray(messageId) && (Object.prototype.hasOwnProperty.call(messageId, 'messageId') || Object.prototype.hasOwnProperty.call(messageId, 'documentId') || Object.prototype.hasOwnProperty.call(messageId, 'adminToken'));\n if (isOpts) {\n mid = messageId.messageId;\n token = messageId.adminToken;\n docId = messageId.documentId;\n } else {\n mid = messageId;\n token = adminToken;\n docId = documentId;\n }\n id = typeof mid === 'string' ? mid.trim() : '';\n d = typeof docId === 'string' ? docId.trim() : '';\n if (!(!id && !d)) {\n _context1.n = 1;\n break;\n }\n return _context1.a(2, {\n ok: false,\n message: 'messageId or documentId required'\n });\n case 1:\n rpcParams = {\n messageId: id || undefined,\n documentId: d || undefined,\n adminToken: token || null\n };\n _context1.p = 2;\n rpcOrigin = typeof window !== 'undefined' && window.location && window.location.origin ? window.location.origin : '';\n _context1.n = 3;\n return fetch(\"\".concat(rpcOrigin, \"/services/rpc\"), {\n method: 'POST',\n headers: this._hubJsonRpcHttpHeaders(),\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'EmitTombstone',\n params: [rpcParams]\n })\n });\n case 3:\n res = _context1.v;\n body = {};\n _context1.p = 4;\n _context1.n = 5;\n return res.json();\n case 5:\n body = _context1.v;\n _context1.n = 7;\n break;\n case 6:\n _context1.p = 6;\n _t12 = _context1.v;\n case 7:\n if (res.ok) {\n _context1.n = 8;\n break;\n }\n msg = body && body.error && body.error.message || res.statusText || \"HTTP \".concat(res.status);\n return _context1.a(2, {\n ok: false,\n message: msg\n });\n case 8:\n if (!(body && body.error)) {\n _context1.n = 9;\n break;\n }\n return _context1.a(2, {\n ok: false,\n message: body.error.message || 'RPC error'\n });\n case 9:\n result = body && body.result != null ? body.result : null;\n if (!(result && result.status === 'error')) {\n _context1.n = 10;\n break;\n }\n return _context1.a(2, {\n ok: false,\n message: result.message || 'Operation failed'\n });\n case 10:\n if (!(result && result.status === 'success')) {\n _context1.n = 11;\n break;\n }\n return _context1.a(2, {\n ok: true,\n result: result\n });\n case 11:\n return _context1.a(2, {\n ok: false,\n message: result && result.message || 'Unexpected response from hub'\n });\n case 12:\n _context1.p = 12;\n _t13 = _context1.v;\n console.error('[BRIDGE]', 'emitTombstone error:', safeIdentityErr(_t13));\n return _context1.a(2, {\n ok: false,\n message: _t13 && _t13.message ? _t13.message : String(_t13)\n });\n }\n }, _callee1, this, [[4, 6], [2, 12]]);\n }));\n function emitTombstone(_x8, _x9, _x0) {\n return _emitTombstone.apply(this, arguments);\n }\n return emitTombstone;\n }()\n /**\n * Enqueue a peer-to-peer chat message for the given address.\n * Messages are persisted and retried when the peer is connected.\n * @param {Object} job - { address, text, created, clientId? }\n */\n )\n }, {\n key: \"_enqueuePeerMessage\",\n value: function _enqueuePeerMessage(job) {\n if (!job || !job.address || !job.text) return;\n\n // Ensure a created timestamp and a stable clientId for local tracking.\n var created = job.created || Date.now();\n // Use a Fabric Actor ID as the clientId, so queued messages have\n // a stable, content-derived identifier.\n var clientActor = new Actor({\n content: {\n type: 'P2P_CHAT_MESSAGE',\n address: job.address,\n text: job.text,\n created: created\n }\n });\n var clientId = job.clientId || clientActor.id;\n job.created = created;\n job.clientId = clientId;\n\n // Create a local chat representation so queued messages are visible in the UI.\n try {\n var identityId = this._getIdentityId();\n if (!identityId) {\n console.warn('[BRIDGE]', 'enqueuePeerMessage called without an unlocked identity; job will not be queued.');\n return;\n }\n var actorId = identityId;\n job.actorId = actorId;\n var chat = {\n type: 'P2P_CHAT_MESSAGE',\n actor: {\n id: actorId\n },\n object: {\n content: job.text,\n created: created,\n clientId: clientId\n },\n // Top-level target for ActivityStreams-style compatibility.\n target: job.address,\n status: 'queued'\n };\n this.globalState.messages = this.globalState.messages || {};\n this.globalState.messages[clientId] = chat;\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/messages/\".concat(clientId),\n value: chat\n },\n globalState: this.globalState\n }\n }));\n this._persistMessages();\n } catch (e) {\n console.warn('[BRIDGE]', 'Could not create local queued peer chat message:', safeIdentityErr(e));\n }\n\n // Add to in-memory queue and persist.\n this.peerMessageQueue = this.peerMessageQueue || [];\n this.peerMessageQueue.push(job);\n this._writeJSONToStorage('fabric:peerMessageQueue', this.peerMessageQueue);\n }\n\n /**\n * Attempt to send any queued messages for peers that are currently connected.\n * Uses the latest networkStatus.peers from the hub.\n */\n }, {\n key: \"_flushPeerMessageQueue\",\n value: function _flushPeerMessageQueue() {\n var _this18 = this;\n if (!this._isConnected || !this.ws || this.ws.readyState !== WebSocket.OPEN) return;\n var networkStatus = this.state && this.state.networkStatus;\n var peers = Array.isArray(networkStatus && networkStatus.peers) ? networkStatus.peers : [];\n if (!this.peerMessageQueue || !this.peerMessageQueue.length) return;\n var remaining = [];\n var _iterator19 = _createForOfIteratorHelper(this.peerMessageQueue),\n _step19;\n try {\n var _loop2 = function _loop2() {\n var job = _step19.value;\n if (!job || !job.address || !job.text) return 0; // continue\n var isConnected = peers.some(function (p) {\n return p && p.status === 'connected' && (p.id === job.address || p.address === job.address);\n });\n if (!isConnected) {\n remaining.push(job);\n return 0; // continue\n }\n try {\n var body = {\n text: job.text,\n clientId: job.clientId\n };\n if (job.actorId) {\n body.actor = {\n id: job.actorId\n };\n }\n var payload = {\n method: 'SendPeerMessage',\n params: [job.address, body]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n _this18.sendSignedMessage(message.toBuffer());\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending queued peer message:', safeIdentityErr(error));\n remaining.push(job);\n }\n },\n _ret;\n for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n _ret = _loop2();\n if (_ret === 0) continue;\n }\n } catch (err) {\n _iterator19.e(err);\n } finally {\n _iterator19.f();\n }\n this.peerMessageQueue = remaining;\n if (this.peerMessageQueue.length) {\n this._writeJSONToStorage('fabric:peerMessageQueue', this.peerMessageQueue);\n } else {\n this._removeStorageKey('fabric:peerMessageQueue');\n }\n }\n\n /**\n * Send a chat message to a peer (queued if the peer is not currently connected).\n * @param {string|{ address: string }} address - Peer address or object with address.\n * @param {string|{ text: string }} body - Message text or object with text.\n */\n }, {\n key: \"sendPeerMessageRequest\",\n value: function sendPeerMessageRequest(idOrAddress, body) {\n var resolved = _typeof(idOrAddress) === 'object' && idOrAddress ? idOrAddress.id || idOrAddress.address : idOrAddress;\n var resolvedText = typeof body === 'string' ? body : body && body.text || '';\n if (!resolved || !resolvedText) return;\n if (!this._hasUnlockedIdentity()) {\n console.warn('[BRIDGE]', 'sendPeerMessageRequest called without an unlocked identity; message will not be sent.');\n this._notifyIdentityUnlockRequired(fabricIdentityPeerDisabledReasonPlain(this.props && this.props.auth));\n return;\n }\n var created = Date.now();\n // When WebRTC-only chat is enabled, send peer messages over the mesh\n // instead of via the Fabric P2P SendPeerMessage RPC.\n if (this.preferWebRTCChat) {\n var actorId = this._getIdentityId() || null;\n var clientId = null;\n // Create a local \"sent\" chat message for this peer.\n try {\n var clientActor = new Actor({\n content: {\n type: 'P2P_CHAT_MESSAGE',\n address: resolved,\n text: resolvedText,\n created: created\n }\n });\n clientId = clientActor.id;\n var chat = {\n type: 'P2P_CHAT_MESSAGE',\n actor: {\n id: actorId || resolved\n },\n object: {\n content: resolvedText,\n created: created,\n clientId: clientId\n },\n target: resolved,\n status: 'pending',\n transport: 'webrtc',\n delivery: {\n via: 'mesh',\n deliveredTo: 0\n }\n };\n this.globalState.messages = this.globalState.messages || {};\n this.globalState.messages[clientId] = chat;\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/messages/\".concat(clientId),\n value: chat\n },\n globalState: this.globalState\n }\n }));\n this._persistMessages();\n } catch (e) {}\n var payload = {\n type: 'P2P_CHAT_MESSAGE',\n actor: actorId ? {\n id: actorId\n } : {\n id: null\n },\n object: {\n content: resolvedText,\n created: created,\n clientId: clientId || null\n }\n };\n // For now, broadcast to all WebRTC peers; peers can choose how to display.\n var recipients = this.broadcastToWebRTCPeersWithRecipients(payload);\n var deliveredTo = recipients.length;\n this._lastWebRTCRecipientPeerIds = recipients;\n this._lastWebRTCChatDeliveryCount = deliveredTo;\n this._lastWebRTCChatSentAt = Date.now();\n try {\n var messages = this.globalState && this.globalState.messages;\n if (messages) {\n var candidate = Object.values(messages).find(function (m) {\n var obj = m && m.object;\n return obj && obj.content === resolvedText && obj.created === created;\n });\n if (candidate) {\n candidate.status = deliveredTo > 0 ? 'sent' : 'pending';\n candidate.delivery = Object.assign({}, candidate.delivery || {}, {\n via: 'mesh',\n deliveredTo: deliveredTo\n });\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'replace',\n path: \"/messages/\".concat(candidate.object.clientId),\n value: candidate\n },\n globalState: this.globalState\n }\n }));\n this._persistMessages();\n }\n }\n } catch (e) {}\n console.debug('[BRIDGE]', 'WebRTC peer chat delivery count:', deliveredTo);\n return;\n }\n this._enqueuePeerMessage({\n address: resolved,\n text: resolvedText,\n created: created\n });\n this._flushPeerMessageQueue();\n }\n\n /**\n * Set a node-local nickname for a peer (stored server-side).\n * @param {string} address\n * @param {string} nickname\n */\n }, {\n key: \"sendSetPeerNicknameRequest\",\n value: function sendSetPeerNicknameRequest(idOrAddress, nickname) {\n var _this19 = this;\n var resolved = _typeof(idOrAddress) === 'object' && idOrAddress ? idOrAddress.id || idOrAddress.address : idOrAddress;\n if (!resolved) return;\n var clean = nickname == null ? '' : String(nickname).trim().slice(0, 64);\n try {\n var selfId = this._getIdentityId && this._getIdentityId();\n if (clean && selfId && (resolved === selfId || resolved === 'self' || resolved === 'me')) {\n this._peerAliasById = this._peerAliasById || {};\n this._peerAliasById[selfId] = clean;\n var signingKey = this.settings.signingKey || this.key;\n var aliasPayload = {\n type: 'P2P_PEER_ALIAS',\n actor: {\n id: selfId\n },\n object: {\n name: clean\n }\n };\n if (Message && Message.fromVector && signingKey) {\n var msg = Message.fromVector(['P2P_PEER_ALIAS', clean]);\n if (typeof msg.signWithKey === 'function') msg.signWithKey(signingKey);\n aliasPayload = msg;\n }\n this.broadcastToWebRTCPeersWithRecipients(aliasPayload);\n }\n } catch (_) {/* best-effort mesh alias */}\n try {\n var payload = {\n method: 'SetPeerNickname',\n params: [resolved, clean]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n // Ensure UI updates even if push misses for some reason\n setTimeout(function () {\n try {\n _this19.sendListPeersRequest();\n } catch (e) {}\n }, 250);\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending SetPeerNickname request:', safeIdentityErr(error));\n }\n }\n\n /**\n * Request rich peer details from the hub (used by `/peers/:id` page).\n * @param {string|{id,address}} idOrAddress - Peer id (public key) or address\n */\n }, {\n key: \"sendGetPeerRequest\",\n value: function sendGetPeerRequest(idOrAddress) {\n var resolved = _typeof(idOrAddress) === 'object' && idOrAddress ? idOrAddress.id || idOrAddress.address : idOrAddress;\n if (!resolved) return;\n try {\n var payload = {\n method: 'GetPeer',\n params: [resolved]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending GetPeer request:', safeIdentityErr(error));\n }\n }\n\n /**\n * Ask a connected Fabric TCP peer to run a ChainSyncRequest handshake (inventory + BitcoinBlock replay).\n * @param {string|{id?:string,address?:string}} idOrAddress\n */\n }, {\n key: \"sendFabricPeerResyncRequest\",\n value: function sendFabricPeerResyncRequest(idOrAddress) {\n var _this20 = this;\n var resolved = _typeof(idOrAddress) === 'object' && idOrAddress ? idOrAddress.address || idOrAddress.id : idOrAddress;\n if (!resolved) return;\n try {\n var payload = {\n method: 'RequestFabricPeerResync',\n params: [{\n address: resolved,\n id: resolved\n }]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n setTimeout(function () {\n try {\n if (typeof _this20.sendNetworkStatusRequest === 'function') _this20.sendNetworkStatusRequest();\n } catch (e) {}\n }, 400);\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending RequestFabricPeerResync:', safeIdentityErr(error));\n }\n }\n\n /**\n * Operator: send `P2P_FLUSH_CHAIN` to connected peers above the hub's trusted registry score.\n * @param {{ snapshotBlockHash: string, network?: string, label?: string }} object\n * @param {string} adminToken - hub admin token (required by JSON-RPC)\n */\n }, {\n key: \"sendFlushChainToTrustedPeersRequest\",\n value: function sendFlushChainToTrustedPeersRequest(object, adminToken) {\n var _this21 = this;\n var snap = object && object.snapshotBlockHash ? String(object.snapshotBlockHash).trim() : '';\n if (!/^[0-9a-fA-F]{64}$/.test(snap)) {\n console.warn('[BRIDGE] sendFlushChainToTrustedPeersRequest: snapshotBlockHash must be 64 hex');\n return;\n }\n var token = adminToken != null ? String(adminToken).trim() : '';\n if (!token) {\n console.warn('[BRIDGE] sendFlushChainToTrustedPeersRequest: adminToken required');\n return;\n }\n try {\n var param = {\n snapshotBlockHash: snap.toLowerCase(),\n adminToken: token\n };\n if (object.network != null && String(object.network).trim()) param.network = String(object.network).trim();\n if (object.label != null && String(object.label).trim()) param.label = String(object.label).trim();\n var payload = {\n method: 'SendFlushChainToTrustedPeers',\n params: [param]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n setTimeout(function () {\n try {\n if (typeof _this21.sendNetworkStatusRequest === 'function') _this21.sendNetworkStatusRequest();\n } catch (e) {}\n }, 400);\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending SendFlushChainToTrustedPeers:', safeIdentityErr(error));\n }\n }\n }, {\n key: \"sendListDocumentsRequest\",\n value: function sendListDocumentsRequest() {\n try {\n var payload = {\n method: 'ListDocuments',\n params: []\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending ListDocuments request:', safeIdentityErr(error));\n try {\n pushUiNotification({\n id: \"list-documents-\".concat(Date.now()),\n kind: 'error',\n title: 'Could not refresh document list',\n subtitle: error && error.message ? error.message : String(error),\n href: '/documents'\n });\n } catch (_) {}\n }\n }\n }, {\n key: \"sendRefreshDocumentMarketRequest\",\n value: function sendRefreshDocumentMarketRequest() {\n try {\n var payload = {\n method: 'RefreshDocumentMarket',\n params: []\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending RefreshDocumentMarket request:', safeIdentityErr(error));\n }\n }\n }, {\n key: \"sendGetDocumentRequest\",\n value: function sendGetDocumentRequest(id) {\n var resolved = _typeof(id) === 'object' && id && id.id ? id.id : id;\n if (!resolved) return;\n try {\n var payload = {\n method: 'GetDocument',\n params: [resolved]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending GetDocument request:', safeIdentityErr(error));\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('documentLoadFailed', {\n detail: {\n documentId: String(resolved),\n message: error && error.message ? error.message : 'Could not request document from hub.'\n }\n }));\n }\n } catch (_) {}\n }\n }\n\n /**\n * Apply a hub `GetDocument` JSON-RPC / JSONCallResult payload into local document state.\n * Used when the document detail view falls back to HTTP `/services/rpc` (e.g. WS path delayed).\n * @param {object} result - `{ type: 'GetDocumentResult', document?, documentId?, message? }`\n * @returns {boolean} true when handled (success or not-found)\n */\n }, {\n key: \"mergeGetDocumentRpcResult\",\n value: function mergeGetDocumentRpcResult(result) {\n if (!result || _typeof(result) !== 'object' || result.type !== 'GetDocumentResult') return false;\n if (result.document && result.document.id) {\n var did = result.document.id;\n this._storeDocument(did, result.document);\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/documents/\".concat(did),\n value: this.globalState.documents[did]\n },\n globalState: this.globalState\n }\n }));\n }\n } catch (_) {}\n return true;\n }\n if (result.documentId != null && String(result.documentId) !== '') {\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('documentLoadFailed', {\n detail: {\n documentId: String(result.documentId),\n message: result.message && String(result.message) || 'Document not found.'\n }\n }));\n }\n } catch (_) {}\n return true;\n }\n return false;\n }\n\n /**\n * Apply hub `PublishDocument` result (WebSocket JSONCallResult or HTTP /services/rpc fallback).\n * @param {object} result\n * @returns {boolean} true when recognized\n */\n }, {\n key: \"mergePublishDocumentRpcResult\",\n value: function mergePublishDocumentRpcResult(result) {\n if (!result || _typeof(result) !== 'object') return false;\n if (result.type === 'PublishDocumentResult' && result.document && result.document.id) {\n var backendId = result.document.id;\n var sha = result.document.sha256 || backendId;\n if (this._pendingPublishDocumentBackendIds) {\n this._pendingPublishDocumentBackendIds[\"delete\"](String(backendId));\n }\n this.globalState.documents = this.globalState.documents || {};\n var targetId = backendId;\n if (sha) {\n for (var _i9 = 0, _Object$entries5 = Object.entries(this.globalState.documents); _i9 < _Object$entries5.length; _i9++) {\n var _Object$entries5$_i = _slicedToArray(_Object$entries5[_i9], 2),\n localId = _Object$entries5$_i[0],\n existingDoc = _Object$entries5$_i[1];\n if (existingDoc && (existingDoc.sha256 === sha || existingDoc.sha === sha)) {\n targetId = localId;\n break;\n }\n }\n }\n var existing = this.globalState.documents[targetId] || {};\n this.globalState.documents[targetId] = _objectSpread(_objectSpread(_objectSpread({}, existing), result.document), {}, {\n id: targetId,\n published: result.document.published || existing.published || true\n });\n if (targetId !== backendId && this.globalState.documents[backendId]) {\n delete this.globalState.documents[backendId];\n }\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/documents/\".concat(targetId),\n value: this.globalState.documents[targetId]\n },\n globalState: this.globalState\n }\n }));\n }\n } catch (_) {}\n return true;\n }\n if (result.status === 'error' && result.documentId != null && String(result.documentId) !== '' && this._pendingPublishDocumentBackendIds && this._pendingPublishDocumentBackendIds.has(String(result.documentId))) {\n var pubErrDid = String(result.documentId);\n this._pendingPublishDocumentBackendIds[\"delete\"](pubErrDid);\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('publishDocumentFailed', {\n detail: {\n documentId: pubErrDid,\n message: String(result.message || 'Publish failed')\n }\n }));\n }\n } catch (_) {}\n return true;\n }\n if (result.status === 'error' && result.message && !result.type && !(Object.prototype.hasOwnProperty.call(result, 'documentId') && result.documentId != null && String(result.documentId) !== '')) {\n var ctx = this._lastPublishCreateContext;\n if (ctx && Date.now() - ctx.sentAt < 25000) {\n this._lastPublishCreateContext = null;\n if (this._pendingPublishBySha) this._pendingPublishBySha[\"delete\"](ctx.sha);\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('publishDocumentFailed', {\n detail: {\n documentId: ctx.actorId,\n message: String(result.message)\n }\n }));\n }\n } catch (_) {}\n }\n return true;\n }\n return false;\n }\n\n /**\n * Apply hub `CreateDocument` result (WebSocket JSONCallResult or HTTP /services/rpc fallback).\n * @param {object} result\n * @returns {boolean} true when recognized\n */\n }, {\n key: \"mergeCreateDocumentRpcResult\",\n value: function mergeCreateDocumentRpcResult(result) {\n if (!result || _typeof(result) !== 'object' || result.type !== 'CreateDocumentResult' || !result.document || !result.document.id) {\n return false;\n }\n var backendId = result.document.id;\n var sha = result.document.sha256 || backendId;\n if (this._lastPublishCreateContext && sha && this._lastPublishCreateContext.sha === sha) {\n this._lastPublishCreateContext = null;\n }\n this._storeDocument(backendId, _objectSpread(_objectSpread({}, this.globalState.documents[backendId] || {}), result.document));\n if (sha && this._pendingPublishBySha && this._pendingPublishBySha.has(sha)) {\n try {\n this.sendPublishDocumentRequest(sha);\n } finally {\n this._pendingPublishBySha[\"delete\"](sha);\n }\n }\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('globalStateUpdate', {\n detail: {\n operation: {\n op: 'add',\n path: \"/documents/\".concat(backendId),\n value: this.globalState.documents[backendId]\n },\n globalState: this.globalState\n }\n }));\n }\n } catch (_) {}\n return true;\n }\n\n /**\n * Apply hub `CreateDistributeInvoice` JSON-RPC result (same events as WebSocket path).\n * @param {object} result\n * @returns {boolean} true when recognized\n */\n }, {\n key: \"mergeCreateDistributeInvoiceRpcResult\",\n value: function mergeCreateDistributeInvoiceRpcResult(result) {\n if (!result || _typeof(result) !== 'object') return false;\n if (result.type === 'CreateDistributeInvoiceResult' && result.documentId) {\n var distDid = String(result.documentId);\n if (this._pendingCreateDistributeInvoiceBackendIds) {\n this._pendingCreateDistributeInvoiceBackendIds[\"delete\"](distDid);\n }\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('distributeInvoiceReady', {\n detail: {\n documentId: distDid,\n address: result.address,\n amountSats: result.amountSats,\n config: result.config,\n network: result.network\n }\n }));\n }\n } catch (_) {}\n return true;\n }\n if (result.status === 'error' && result.documentId != null && String(result.documentId) !== '') {\n var distErrDid = String(result.documentId);\n if (this._pendingCreateDistributeInvoiceBackendIds) {\n this._pendingCreateDistributeInvoiceBackendIds[\"delete\"](distErrDid);\n }\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('distributeInvoiceFailed', {\n detail: {\n documentId: distErrDid,\n message: String(result.message || 'Could not create distribute invoice')\n }\n }));\n }\n } catch (_) {}\n return true;\n }\n return false;\n }\n }, {\n key: \"sendCreateDocumentRequest\",\n value: function sendCreateDocumentRequest(doc) {\n var _this22 = this;\n if (!doc || _typeof(doc) !== 'object') return;\n if (!this._canSignOutgoing()) {\n var sha = doc.sha256 ? String(doc.sha256) : doc.id ? String(doc.id) : '';\n if (sha && this._pendingPublishBySha) this._pendingPublishBySha[\"delete\"](sha);\n if (this._lastPublishCreateContext && sha && this._lastPublishCreateContext.sha === sha) {\n var actorId = this._lastPublishCreateContext.actorId;\n this._lastPublishCreateContext = null;\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('publishDocumentFailed', {\n detail: {\n documentId: String(actorId || sha),\n message: 'Unlock your Fabric identity — CreateDocument must be Schnorr-signed on the wire.'\n }\n }));\n }\n } catch (_) {}\n }\n try {\n pushUiNotification({\n id: \"create-document-\".concat(Date.now()),\n kind: 'error',\n title: 'Create document blocked',\n subtitle: 'Unlock your Fabric identity to upload or publish.',\n href: '/documents'\n });\n } catch (_) {}\n return;\n }\n try {\n var contentBase64 = doc.contentBase64 || (doc.id ? this.getDecryptedDocumentContent(doc.id) : null);\n var payloadDoc = contentBase64 ? _objectSpread(_objectSpread({}, doc), {}, {\n contentBase64: contentBase64\n }) : doc;\n var payload = {\n method: 'CreateDocument',\n params: [payloadDoc]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n // Fallback for delayed/lost WS responses: perform same-origin HTTP JSON-RPC CreateDocument.\n setTimeout(function () {\n try {\n var origin = typeof window !== 'undefined' && window.location && window.location.origin ? window.location.origin : '';\n if (!origin) return;\n fetch(\"\".concat(origin, \"/services/rpc\"), {\n method: 'POST',\n headers: _this22._hubJsonRpcHttpHeaders(),\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'CreateDocument',\n params: [payloadDoc]\n })\n }).then(function (r) {\n return r.json()[\"catch\"](function () {\n return null;\n });\n }).then(function (body) {\n if (!body || body.result == null) return;\n _this22.mergeCreateDocumentRpcResult(body.result);\n })[\"catch\"](function () {});\n } catch (_) {}\n }, 2500);\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending CreateDocument request:', safeIdentityErr(error));\n var _sha = doc.sha256 ? String(doc.sha256) : doc.id ? String(doc.id) : '';\n if (_sha && this._pendingPublishBySha) {\n this._pendingPublishBySha[\"delete\"](_sha);\n }\n if (this._lastPublishCreateContext && _sha && this._lastPublishCreateContext.sha === _sha) {\n var _actorId = this._lastPublishCreateContext.actorId;\n this._lastPublishCreateContext = null;\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('publishDocumentFailed', {\n detail: {\n documentId: String(_actorId || _sha),\n message: error && error.message ? error.message : String(error)\n }\n }));\n }\n } catch (_) {}\n }\n try {\n pushUiNotification({\n id: \"create-document-\".concat(Date.now()),\n kind: 'error',\n title: 'Create document failed',\n subtitle: error && error.message ? error.message : String(error),\n href: '/documents'\n });\n } catch (_) {}\n }\n }\n\n /**\n * Publish a document. When doc needs CreateDocument first, queues publish for after.\n * @param {string} id - Document id\n * @param {Object} [opts] - Optional { purchasePriceSats } for HTLC purchase price\n */\n }, {\n key: \"sendPublishDocumentRequest\",\n value: function sendPublishDocumentRequest(id) {\n var _this23 = this;\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var logical = _typeof(id) === 'object' && id && id.id ? id.id : id;\n if (!logical) return;\n if (!this._canSignOutgoing()) {\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('publishDocumentFailed', {\n detail: {\n documentId: String(logical),\n message: 'Unlock your Fabric identity — PublishDocument must be Schnorr-signed on the wire.'\n }\n }));\n }\n } catch (_) {}\n return;\n }\n var row = this._resolveDocumentRow(logical);\n var doc = row && row.doc;\n\n // If this is a local-only document (opaque id) with a backing sha256 and not yet published,\n // first ensure the hub has the full content via CreateDocument, then publish.\n // When `logical` is already the content hash (second hop after CreateDocument), skip re-upload.\n if (needsCreateDocumentBeforePublish(logical, doc)) {\n var sha = doc.sha256;\n var contentBase64 = this.getDecryptedDocumentContent(logical);\n if (!contentBase64) {\n // Fallback: after reload we may have metadata-only local rows while hub already has documents/.json.\n // Try direct publish by sha instead of failing early on missing local plaintext bytes.\n console.warn('[BRIDGE]', 'Missing local content for create-before-publish; trying direct publish by sha:', logical);\n } else {\n var createDoc = {\n id: sha,\n sha256: sha,\n name: doc.name,\n mime: doc.mime,\n size: doc.size,\n contentBase64: contentBase64\n };\n this._lastPublishCreateContext = {\n sha: String(sha),\n actorId: String(logical),\n sentAt: Date.now()\n };\n this.sendCreateDocumentRequest(createDoc);\n if (this._pendingPublishBySha) {\n this._pendingPublishBySha.add(sha);\n }\n return;\n }\n }\n var resolved = logical;\n if (doc && doc.sha256) {\n resolved = doc.sha256;\n }\n try {\n var params = _typeof(opts) === 'object' && opts && Number.isFinite(Number(opts.purchasePriceSats)) ? [{\n id: resolved,\n purchasePriceSats: Number(opts.purchasePriceSats)\n }] : [resolved];\n var backendKey = String(resolved);\n if (this._pendingPublishDocumentBackendIds) {\n this._pendingPublishDocumentBackendIds.add(backendKey);\n }\n var payload = {\n method: 'PublishDocument',\n params: params\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n // WebSocket delivery can be delayed/lost; fallback to same-origin HTTP JSON-RPC while pending.\n setTimeout(function () {\n try {\n if (!_this23._pendingPublishDocumentBackendIds || !_this23._pendingPublishDocumentBackendIds.has(backendKey)) return;\n var origin = typeof window !== 'undefined' && window.location && window.location.origin ? window.location.origin : '';\n if (!origin) return;\n fetch(\"\".concat(origin, \"/services/rpc\"), {\n method: 'POST',\n headers: _this23._hubJsonRpcHttpHeaders(),\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: Date.now(),\n method: 'PublishDocument',\n params: params\n })\n }).then(function (r) {\n return r.json()[\"catch\"](function () {\n return null;\n });\n }).then(function (body) {\n if (!body || body.result == null) return;\n _this23.mergePublishDocumentRpcResult(body.result);\n })[\"catch\"](function () {});\n } catch (_) {}\n }, 3500);\n } catch (error) {\n if (this._pendingPublishDocumentBackendIds) {\n this._pendingPublishDocumentBackendIds[\"delete\"](String(resolved));\n }\n console.error('[BRIDGE]', 'Error sending PublishDocument request:', safeIdentityErr(error));\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('publishDocumentFailed', {\n detail: {\n documentId: String(logical),\n message: error && error.message ? error.message : String(error)\n }\n }));\n }\n } catch (_) {}\n }\n }\n\n /**\n * Request an HTLC purchase invoice for a published document.\n * When result arrives, Bridge dispatches 'purchaseInvoiceReady' event.\n * @param {string} id - Document id\n */\n }, {\n key: \"sendCreatePurchaseInvoiceRequest\",\n value: function sendCreatePurchaseInvoiceRequest(id) {\n var logical = _typeof(id) === 'object' && id && id.id ? id.id : id;\n if (!logical) return;\n var doc = this.globalState && this.globalState.documents && this.globalState.documents[logical];\n var backendId = doc && doc.sha256 ? doc.sha256 : logical;\n var backendKey = String(backendId);\n if (!this._canSignOutgoing()) {\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('purchaseInvoiceFailed', {\n detail: {\n documentId: backendKey,\n message: 'Unlock your Fabric identity — CreatePurchaseInvoice must be Schnorr-signed on the wire.'\n }\n }));\n }\n } catch (_) {}\n return;\n }\n if (this._pendingCreatePurchaseInvoiceBackendIds) {\n this._pendingCreatePurchaseInvoiceBackendIds.add(backendKey);\n }\n try {\n var payload = {\n method: 'CreatePurchaseInvoice',\n params: [{\n documentId: backendId\n }]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n if (this._pendingCreatePurchaseInvoiceBackendIds) {\n this._pendingCreatePurchaseInvoiceBackendIds[\"delete\"](backendKey);\n }\n console.error('[BRIDGE]', 'Error sending CreatePurchaseInvoice request:', safeIdentityErr(error));\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('purchaseInvoiceFailed', {\n detail: {\n documentId: backendKey,\n message: error && error.message ? error.message : String(error)\n }\n }));\n }\n } catch (_) {}\n }\n }\n\n /**\n * Claim an HTLC purchase after payment. Returns document with content on success.\n * @param {string} id - Document id\n * @param {string} txid - Payment transaction id\n * @returns {Promise<{document?: Object, error?: string}>}\n */\n }, {\n key: \"sendClaimPurchaseRequest\",\n value: (function () {\n var _sendClaimPurchaseRequest = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee10(id, txid) {\n var _this24 = this;\n var logical, doc, backendId;\n return _regenerator().w(function (_context10) {\n while (1) switch (_context10.n) {\n case 0:\n logical = _typeof(id) === 'object' && id && id.id ? id.id : id;\n if (!(!logical || !txid)) {\n _context10.n = 1;\n break;\n }\n return _context10.a(2, {\n error: 'documentId and txid required'\n });\n case 1:\n if (this._canSignOutgoing()) {\n _context10.n = 2;\n break;\n }\n return _context10.a(2, {\n error: 'Unlock your Fabric identity — ClaimPurchase must be Schnorr-signed on the wire.'\n });\n case 2:\n doc = this.globalState && this.globalState.documents && this.globalState.documents[logical];\n backendId = doc && doc.sha256 ? doc.sha256 : logical;\n return _context10.a(2, new Promise(function (resolve) {\n _this24._pendingClaimCallbacks.set(backendId, {\n resolve: resolve\n });\n try {\n var payload = {\n method: 'ClaimPurchase',\n params: [{\n documentId: backendId,\n txid: txid\n }]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n _this24.sendSignedMessage(message.toBuffer());\n } catch (error) {\n _this24._pendingClaimCallbacks[\"delete\"](backendId);\n resolve({\n error: error && error.message ? error.message : String(error)\n });\n }\n }));\n }\n }, _callee10, this);\n }));\n function sendClaimPurchaseRequest(_x1, _x10) {\n return _sendClaimPurchaseRequest.apply(this, arguments);\n }\n return sendClaimPurchaseRequest;\n }()\n /**\n * Request a pay-to-distribute invoice (step 1 of distribute flow).\n * When result arrives, Bridge dispatches 'distributeInvoiceReady' event.\n * @param {string} id - Document id\n * @param {Object} config - { amountSats, durationYears?, challengeCadence?, responseDeadline? }\n */\n )\n }, {\n key: \"sendCreateDistributeInvoiceRequest\",\n value: function sendCreateDistributeInvoiceRequest(id) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var logical = _typeof(id) === 'object' && id && id.id ? id.id : id;\n if (!logical) return;\n var doc = this.globalState && this.globalState.documents && this.globalState.documents[logical];\n var backendId = logical;\n if (doc && doc.sha256) backendId = doc.sha256;\n var backendKey = String(backendId);\n if (!this._canSignOutgoing()) {\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('distributeInvoiceFailed', {\n detail: {\n documentId: backendKey,\n message: 'Unlock your Fabric identity — CreateDistributeInvoice must be Schnorr-signed on the wire.'\n }\n }));\n }\n } catch (_) {}\n return;\n }\n if (this._pendingCreateDistributeInvoiceBackendIds) {\n this._pendingCreateDistributeInvoiceBackendIds.add(backendKey);\n }\n try {\n var payload = {\n method: 'CreateDistributeInvoice',\n params: [_objectSpread({\n documentId: backendId\n }, config)]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n if (this._pendingCreateDistributeInvoiceBackendIds) {\n this._pendingCreateDistributeInvoiceBackendIds[\"delete\"](backendKey);\n }\n console.error('[BRIDGE]', 'Error sending CreateDistributeInvoice request:', safeIdentityErr(error));\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('distributeInvoiceFailed', {\n detail: {\n documentId: backendKey,\n message: error && error.message ? error.message : String(error)\n }\n }));\n }\n } catch (_) {}\n }\n }\n\n /**\n * Send a distribute proposal to a peer (offer to pay them to host a file).\n * @param {string} peerAddress - Peer id or address\n * @param {Object} proposal - { documentId, amountSats, config?, document?, documentName? }\n */\n }, {\n key: \"sendSendDistributeProposalRequest\",\n value: function sendSendDistributeProposalRequest(peerAddress, proposal) {\n if (!peerAddress || !proposal || _typeof(proposal) !== 'object') return;\n var documentId = proposal.documentId;\n var amountSats = Number(proposal.amountSats);\n if (!documentId || !Number.isFinite(amountSats) || amountSats <= 0) return;\n if (!this._canSignOutgoing()) {\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('distributeProposalFailed', {\n detail: {\n documentId: String(documentId),\n message: 'Unlock your Fabric identity — hosting offers must be Schnorr-signed on the wire.'\n }\n }));\n }\n } catch (_) {}\n return;\n }\n var peerKey = _typeof(peerAddress) === 'object' && peerAddress ? String(peerAddress.id || peerAddress.address || peerAddress) : String(peerAddress);\n if (!peerKey) return;\n this._pendingSendDistributeProposalContext = {\n backendId: String(documentId),\n peerKey: peerKey,\n sentAt: Date.now()\n };\n try {\n var payload = {\n method: 'SendDistributeProposal',\n params: [peerKey, proposal]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n this._pendingSendDistributeProposalContext = null;\n console.error('[BRIDGE]', 'Error sending SendDistributeProposal request:', safeIdentityErr(error));\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('distributeProposalFailed', {\n detail: {\n documentId: String(documentId),\n message: error && error.message ? error.message : String(error)\n }\n }));\n }\n } catch (_) {}\n try {\n pushUiNotification({\n id: \"distribute-proposal-\".concat(Date.now()),\n kind: 'error',\n title: 'Hosting offer not sent',\n subtitle: error && error.message ? error.message : String(error),\n href: '/documents'\n });\n } catch (_) {}\n }\n }\n\n /**\n * Accept a distribute proposal (host flow): create invoice and send to proposer.\n * @param {Object} proposal - { id, documentId, amountSats, config, senderAddress }\n */\n }, {\n key: \"sendAcceptDistributeProposalRequest\",\n value: function sendAcceptDistributeProposalRequest(proposal) {\n if (!proposal || !proposal.documentId || !proposal.senderAddress) return;\n var doc = this.globalState && this.globalState.documents && this.globalState.documents[proposal.documentId];\n var backendId = proposal.documentId;\n if (doc && doc.sha256) backendId = doc.sha256;\n var backendKey = String(backendId);\n var proposalId = proposal.id != null ? String(proposal.id) : '';\n this._pendingAcceptDistributeContext = {\n backendId: backendKey,\n proposalId: proposalId,\n sentAt: Date.now()\n };\n try {\n var payload = {\n method: 'AcceptDistributeProposal',\n params: [{\n proposalId: proposal.id,\n documentId: backendId,\n amountSats: proposal.amountSats,\n config: proposal.config,\n senderAddress: proposal.senderAddress\n }]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n this._pendingAcceptDistributeContext = null;\n console.error('[BRIDGE]', 'Error sending AcceptDistributeProposal request:', safeIdentityErr(error));\n try {\n if (typeof window !== 'undefined' && proposalId) {\n window.dispatchEvent(new CustomEvent('acceptDistributeProposalFailed', {\n detail: {\n documentId: backendKey,\n proposalId: proposalId,\n message: error && error.message ? error.message : String(error)\n }\n }));\n }\n } catch (_) {}\n }\n }\n\n /**\n * Create an Execution contract (sandboxed opcode program stored on the hub).\n * Uses the same signing rules as other JSONCalls: unsigned when identity is public-key only\n * (e.g. desktop delegation); Hub policy applies.\n * @param {Object} config - `{ name?: string, program: { steps: [...] } }`\n */\n }, {\n key: \"sendCreateExecutionContractRequest\",\n value: function sendCreateExecutionContractRequest() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!config.program || _typeof(config.program) !== 'object') return;\n try {\n var actorId = this._getIdentityId();\n var payloadConfig = {\n name: config.name,\n program: config.program,\n actorId: actorId\n };\n var payload = {\n method: 'CreateExecutionContract',\n params: [payloadConfig]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending CreateExecutionContract:', safeIdentityErr(error));\n }\n }\n\n /**\n * Run a persisted Execution contract on the hub (returns trace/stack in JSONCallResult).\n * Read-heavy path: safe to send unsigned for watch-only clients if the Hub allows it.\n * @param {string} contractId\n */\n }, {\n key: \"sendRunExecutionContractRequest\",\n value: function sendRunExecutionContractRequest(contractId) {\n var id = String(contractId || '').trim();\n if (!id) return;\n try {\n var payload = {\n method: 'RunExecutionContract',\n params: [{\n contractId: id\n }]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending RunExecutionContract:', safeIdentityErr(error));\n }\n }\n\n /**\n * Request a long-term storage contract for a document, paid in Bitcoin (L1).\n * When txid is provided, completes the pay-to-distribute flow (step 2).\n *\n * @param {string} id - Document id (Actor ID).\n * @param {Object} config - Distribution configuration (amount, duration, cadence, deadline, txid?).\n */\n }, {\n key: \"sendDistributeDocumentRequest\",\n value: function sendDistributeDocumentRequest(id) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var logical = _typeof(id) === 'object' && id && id.id ? id.id : id;\n if (!logical) return;\n if (!this._canSignOutgoing()) {\n var docEarly = this.globalState && this.globalState.documents && this.globalState.documents[logical];\n var bid = docEarly && docEarly.sha256 ? String(docEarly.sha256) : String(logical);\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('storageContractBondFailed', {\n detail: {\n documentId: bid,\n message: 'Unlock your Fabric identity — CreateStorageContract must be Schnorr-signed on the wire.'\n }\n }));\n }\n } catch (_) {}\n return;\n }\n var backendId = logical;\n var doc = this.globalState && this.globalState.documents && this.globalState.documents[logical];\n if (doc && doc.sha256) {\n backendId = doc.sha256;\n }\n try {\n var actorId = this._getIdentityId();\n var payloadConfig = {\n documentId: backendId,\n amountSats: config.amountSats,\n durationYears: config.durationYears,\n challengeCadence: config.challengeCadence,\n responseDeadline: config.responseDeadline,\n actorId: actorId\n };\n if (config.desiredCopies != null) {\n var dc = Math.max(1, Math.round(Number(config.desiredCopies)));\n if (Number.isFinite(dc)) payloadConfig.desiredCopies = dc;\n }\n if (config.txid) payloadConfig.txid = String(config.txid).trim();\n var payload = {\n method: 'CreateStorageContract',\n params: [payloadConfig]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending DistributeDocument request:', safeIdentityErr(error));\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('storageContractBondFailed', {\n detail: {\n documentId: String(backendId),\n message: error && error.message ? error.message : String(error)\n }\n }));\n }\n } catch (_) {}\n }\n }\n\n /**\n * POST /services/rpc with positional params (same as WebSocket JSONCall).\n * {@link Bridge#callHubJsonRpc} wraps a single object — not suitable for RequestPeerInventory.\n * @param {Array} positionalParams — e.g. [idOrAddress, 'documents', opts]\n * @returns {Promise<{ ok: boolean, result?: *, error?: * }>}\n */\n }, {\n key: \"_invokeHubRpcWithArrayParams\",\n value: (function () {\n var _invokeHubRpcWithArrayParams2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee11(method, positionalParams) {\n var origin, id, res, body, msg, result, _t14;\n return _regenerator().w(function (_context11) {\n while (1) switch (_context11.p = _context11.n) {\n case 0:\n if (!(typeof window === 'undefined')) {\n _context11.n = 1;\n break;\n }\n return _context11.a(2, {\n ok: false,\n error: 'no window'\n });\n case 1:\n origin = window.location.origin;\n this._hubJsonRpcSeq = (this._hubJsonRpcSeq || 0) + 1;\n id = this._hubJsonRpcSeq;\n _context11.p = 2;\n _context11.n = 3;\n return fetch(\"\".concat(origin, \"/services/rpc\"), {\n method: 'POST',\n headers: this._hubJsonRpcHttpHeaders(),\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: id,\n method: String(method || ''),\n params: Array.isArray(positionalParams) ? positionalParams : []\n }),\n credentials: 'same-origin',\n cache: 'no-store'\n });\n case 3:\n res = _context11.v;\n _context11.n = 5;\n break;\n case 4:\n _context11.p = 4;\n _t14 = _context11.v;\n return _context11.a(2, {\n ok: false,\n error: _t14 && _t14.message ? _t14.message : String(_t14)\n });\n case 5:\n _context11.n = 6;\n return res.json()[\"catch\"](function () {\n return {};\n });\n case 6:\n body = _context11.v;\n if (res.ok) {\n _context11.n = 7;\n break;\n }\n return _context11.a(2, {\n ok: false,\n error: body && (body.error || body.message) || \"HTTP \".concat(res.status)\n });\n case 7:\n if (!(body && body.error)) {\n _context11.n = 8;\n break;\n }\n msg = body.error.message || body.error.data || JSON.stringify(body.error);\n return _context11.a(2, {\n ok: false,\n error: String(msg || 'RPC error')\n });\n case 8:\n result = Object.prototype.hasOwnProperty.call(body, 'result') ? body.result : null;\n return _context11.a(2, {\n ok: true,\n result: result\n });\n }\n }, _callee11, this, [[2, 4]]);\n }));\n function _invokeHubRpcWithArrayParams(_x11, _x12) {\n return _invokeHubRpcWithArrayParams2.apply(this, arguments);\n }\n return _invokeHubRpcWithArrayParams;\n }()\n /**\n * Same hub handler as WS JSONCall, when the Bridge WebSocket is not yet open —\n * otherwise {@link Bridge#sendMessage} queues the message and inventory never fires until later.\n * @private\n */\n )\n }, {\n key: \"_requestPeerInventoryHttpFallback\",\n value: (function () {\n var _requestPeerInventoryHttpFallback2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee12(idOrAddress, kind, options) {\n var params, out, r;\n return _regenerator().w(function (_context12) {\n while (1) switch (_context12.n) {\n case 0:\n params = options && _typeof(options) === 'object' && Object.keys(options).length > 0 ? [idOrAddress, kind, options] : [idOrAddress, kind];\n _context12.n = 1;\n return this._invokeHubRpcWithArrayParams('RequestPeerInventory', params);\n case 1:\n out = _context12.v;\n if (out.ok) {\n _context12.n = 2;\n break;\n }\n if (this.settings && this.settings.debug) {\n console.debug('[BRIDGE]', 'RequestPeerInventory HTTP fallback:', out.error || 'failed');\n } else {\n console.warn('[BRIDGE]', 'RequestPeerInventory:', out.error || 'HTTP fallback failed');\n }\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('fabric:peerInventoryRequestResult', {\n detail: {\n status: 'error',\n message: String(out.error || 'HTTP request failed')\n }\n }));\n }\n } catch (_) {}\n return _context12.a(2);\n case 2:\n r = out.result;\n if (r && _typeof(r) === 'object' && r.status === 'error' && r.message) {\n console.warn('[BRIDGE]', 'RequestPeerInventory:', String(r.message));\n }\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('fabric:peerInventoryRequestResult', {\n detail: _objectSpread(_objectSpread({}, r && _typeof(r) === 'object' ? r : {}), {}, {\n via: 'http'\n })\n }));\n }\n } catch (_) {}\n case 3:\n return _context12.a(2);\n }\n }, _callee12, this);\n }));\n function _requestPeerInventoryHttpFallback(_x13, _x14, _x15) {\n return _requestPeerInventoryHttpFallback2.apply(this, arguments);\n }\n return _requestPeerInventoryHttpFallback;\n }()\n /**\n * Request a peer's inventory (e.g., list of documents) via the hub JSON-RPC.\n * @param {string|{id,address}} idOrAddress - Direct Fabric connection (next hop); use with `options.inventoryTarget` when that hop is a relay.\n * @param {string} kind - Inventory kind, defaults to 'documents'.\n * @param {Object} [options] - Optional `{ buyerRefundPublicKey, htlcLocktimeBlocks?, htlcAmountSats?, inventoryTarget?, inventoryRelayTtl? }`.\n * `inventoryTarget` = seller’s Fabric id when `idOrAddress` is only the relay. `inventoryRelayTtl` caps relay hops (default 6, max 16).\n */\n )\n }, {\n key: \"sendPeerInventoryRequest\",\n value: function sendPeerInventoryRequest(idOrAddress) {\n var kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'documents';\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n try {\n var params = options && _typeof(options) === 'object' && Object.keys(options).length > 0 ? [idOrAddress, kind, options] : [idOrAddress, kind];\n var payload = {\n method: 'RequestPeerInventory',\n params: params\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n var wsReady = this._isConnected && this.ws && this.ws.readyState === WebSocket.OPEN;\n if (!wsReady) {\n void this._requestPeerInventoryHttpFallback(idOrAddress, kind || 'documents', options);\n return;\n }\n this.sendSignedMessage(message.toBuffer());\n try {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent('fabric:peerInventoryRequestResult', {\n detail: {\n status: 'success',\n via: 'ws'\n }\n }));\n }\n } catch (_) {}\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending RequestPeerInventory:', safeIdentityErr(error));\n }\n }\n\n /**\n * After funding an inventory HTLC P2TR output, confirm with the seller hub to start phase 2 (document transfer).\n * @param {string} settlementId\n * @param {string} txid\n */\n }, {\n key: \"sendConfirmInventoryHtlcPayment\",\n value: function sendConfirmInventoryHtlcPayment(settlementId, txid) {\n var sid = String(settlementId || '').trim();\n var tx = String(txid || '').trim();\n if (!sid || !tx) return;\n try {\n var payload = {\n method: 'ConfirmInventoryHtlcPayment',\n params: [{\n settlementId: sid,\n txid: tx\n }]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending ConfirmInventoryHtlcPayment:', safeIdentityErr(error));\n }\n }\n\n /**\n * Send a file to a peer. Document must have contentBase64 (from local or fetched).\n * @param {string|{id,address}} idOrAddress - Peer id or address\n * @param {Object} doc - { id, name, mime, size, sha256?, contentBase64 }\n */\n }, {\n key: \"sendSendPeerFileRequest\",\n value: function sendSendPeerFileRequest(idOrAddress, doc) {\n var resolved = _typeof(idOrAddress) === 'object' && idOrAddress ? idOrAddress.id || idOrAddress.address : idOrAddress;\n if (!resolved || !doc || _typeof(doc) !== 'object') return;\n var contentBase64 = doc.contentBase64 || (doc.id ? this.getDecryptedDocumentContent(doc.id) : null);\n if (!contentBase64) return;\n try {\n var payloadDoc = _objectSpread(_objectSpread({}, doc), {}, {\n contentBase64: contentBase64\n });\n var payload = {\n method: 'SendPeerFile',\n params: [resolved, payloadDoc]\n };\n var message = Message.fromVector(['JSONCall', JSON.stringify(payload)]);\n this.sendSignedMessage(message.toBuffer());\n } catch (error) {\n console.error('[BRIDGE]', 'Error sending SendPeerFile request:', safeIdentityErr(error));\n }\n }\n }]);\n}(React.Component);\nmodule.exports = Bridge;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QztBQUFBLEVBdDJNa0IzSCxLQUFLLENBQUNncUMsU0FBUztBQXkyTXBDQyxNQUFNLENBQUNDLE9BQU8sR0FBRzFrQyxNQUFNIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0JyaWRnZS5qcz9mYmU5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gRGVwZW5kZW5jaWVzXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCBXZWJTb2NrZXQgPSByZXF1aXJlKCdpc29tb3JwaGljLXdzJyk7XG5jb25zdCB7IGFwcGx5UGF0Y2ggfSA9IHJlcXVpcmUoJ2Zhc3QtanNvbi1wYXRjaCcpO1xuY29uc3QgQWN0b3IgPSByZXF1aXJlKCdAZmFicmljL2NvcmUvdHlwZXMvYWN0b3InKTtcblxuLy8gTmF0aXZlIFdlYlJUQyAobm8gUGVlckpTKVxuLy8gVXNlcyBSVENQZWVyQ29ubmVjdGlvbiArIGV4aXN0aW5nIGh1YiBXZWJTb2NrZXQgYXMgc2lnbmFsaW5nIGNoYW5uZWwuXG5cbi8vIFNlbWFudGljIFVJXG5jb25zdCB7XG4gIExhYmVsXG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcblxuLy8gRmFicmljIFR5cGVzXG5jb25zdCBNZXNzYWdlID0gcmVxdWlyZSgnQGZhYnJpYy9jb3JlL3R5cGVzL21lc3NhZ2UnKTtcbmNvbnN0IEtleSA9IHJlcXVpcmUoJ0BmYWJyaWMvY29yZS90eXBlcy9rZXknKTtcbmNvbnN0IHsgUDJQX1BFRVJfR09TU0lQLCBQMlBfUEVFUklOR19PRkZFUiwgUDJQX0NIQVRfTUVTU0FHRSwgUDJQX1BFRVJfQUxJQVMsIFAyUF9GSUxFX1NFTkQsIE1BR0lDX0JZVEVTIH0gPSByZXF1aXJlKCdAZmFicmljL2NvcmUvY29uc3RhbnRzJyk7XG5jb25zdCBmYWJyaWNCcmlkZ2VFbnZlbG9wZSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNCcmlkZ2VFbnZlbG9wZScpO1xuY29uc3QgeyBwdXNoVWlOb3RpZmljYXRpb24gfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy91aU5vdGlmaWNhdGlvbnMnKTtcbmNvbnN0IHsgbG9hZEh1YlVpRmVhdHVyZUZsYWdzIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViVWlGZWF0dXJlRmxhZ3MnKTtcbmNvbnN0IHtcbiAgaXNEb2N1bWVudEludmVudG9yeURvY3VtZW50c09mZmVyUmVzcG9uc2UsXG4gIGlzRG9jdW1lbnRJbnZlbnRvcnlSZXNwb25zZVR5cGVcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljRG9jdW1lbnRPZmZlckVudmVsb3BlJyk7XG5jb25zdCB7IGZvcm1hdFNhdHNEaXNwbGF5IH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZm9ybWF0U2F0cycpO1xuY29uc3QgeyB0b2FzdCB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3RvYXN0Jyk7XG5jb25zdCB7IERFTEVHQVRJT05fU0lHTkFUVVJFX1JFUVVFU1QsIGlzRGVsZWdhdGlvblNpZ25hdHVyZVJlcXVlc3RBY3Rpdml0eSwgRE9DVU1FTlRfT0ZGRVIgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9tZXNzYWdlVHlwZXMnKTtcbmNvbnN0IHsgcGFyc2VGZWRlcmF0aW9uQ29udHJhY3RJbnZpdGUsIHBhcnNlRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlUmVzcG9uc2UgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mZWRlcmF0aW9uQ29udHJhY3RJbnZpdGUnKTtcbmNvbnN0IHsgZXh0cmFjdFBlZXJYcHViLCBzaG9ydGVuUHVibGljSWQsIG5vcm1hbGl6ZVBlZXJBZGRyZXNzSW5wdXQgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9wZWVySWRlbnRpdHknKTtcbmNvbnN0IHsgaXNMaWtlbHlCaXAzMkV4dGVuZGVkS2V5IH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaXNMaWtlbHlCaXAzMkV4dGVuZGVkS2V5Jyk7XG5jb25zdCB7IERFTEVHQVRJT05fU1RPUkFHRV9LRVkgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNEZWxlZ2F0aW9uTG9jYWwnKTtcbmNvbnN0IHsgaXNIdWJOZXR3b3JrU3RhdHVzU2hhcGUgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJOZXR3b3JrU3RhdHVzJyk7XG5jb25zdCB7XG4gIG5lZWRzQ3JlYXRlRG9jdW1lbnRCZWZvcmVQdWJsaXNoLFxuICBtZXJnZVB1Ymxpc2hlZERvY3VtZW50c0Zyb21IdWJTdGF0dXNcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZG9jdW1lbnRQdWJsaXNoU3luYycpO1xuY29uc3QgeyBzYWZlSWRlbnRpdHlFcnIsIHNhZmVEZWJ1Z1N0YXRlUHJldmlldywgc2FmZVVybEZvckxvZyB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY1NhZmVMb2cnKTtcbmNvbnN0IHtcbiAgZmFicmljSWRlbnRpdHlDaGF0RGlzYWJsZWRSZWFzb25QbGFpbixcbiAgZmFicmljSWRlbnRpdHlQZWVyRGlzYWJsZWRSZWFzb25QbGFpblxufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJJZGVudGl0eVVpSGludHMnKTtcbmNvbnN0IHsgc3RvcmU6IGZhYnJpY0Jyb3dzZXJTdGF0ZVN0b3JlLCByZWFkU3RvcmFnZUpTT04gfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNCcm93c2VyU3RhdGUnKTtcbmNvbnN0IEJyaWRnZU1lc3NhZ2VDb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vdHlwZXMvYnJpZGdlTWVzc2FnZUNvbGxlY3Rpb24nKTtcbmNvbnN0IHtcbiAgSFVCX0ZBQlJJQ19TRVNTSU9OX0lELFxuICBTRVNTSU9OX0tJTkRfSFVCLFxuICBTRVNTSU9OX0tJTkRfV0VCUlRDLFxuICBmYWJyaWNXaXJlQm9keUludGVncml0eU9rLFxuICBIRUFERVJfU0laRTogRkFCUklDX1dJUkVfSEVBREVSX1NJWkUsXG4gIEJSSURHRV9JTkJPVU5EX1dJUkVfTUFYX0JZVEVTLFxuICBGYWJyaWNUcmFuc3BvcnRTZXNzaW9uXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY1RyYW5zcG9ydFNlc3Npb24nKTtcbmNvbnN0IHsgY2hhdFRleHRPZiwgbm9ybWFsaXplUDJwQ2hhdE1lc3NhZ2UgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNDaGF0Tm9ybWFsaXplJyk7XG5cbmNvbnN0IENPTExBQl9JTlZJVEVfUFJFRklYID0gJ1tDT0xMQUJfSU5WSVRBVElPTl0gJztcblxuLyoqXG4gKiBEZXNjcmliZSBpbmJvdW5kL291dGJvdW5kIHBheWxvYWRzIGZvciBkZWJ1ZyBsb2dzIHdpdGhvdXQgcHJpbnRpbmcgcmF3IGJ5dGVzIG9yIGJvZGllcyAocHJpdmFjeSkuXG4gKiBAcGFyYW0geyp9IGRhdGFcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGZhYnJpY0RlYnVnRGVzY3JpYmVQYXlsb2FkIChkYXRhKSB7XG4gIGlmIChkYXRhID09IG51bGwpIHJldHVybiB7IGtpbmQ6ICdudWxsJyB9O1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSByZXR1cm4geyBraW5kOiAnc3RyaW5nJywgbGVuZ3RoOiBkYXRhLmxlbmd0aCB9O1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSByZXR1cm4geyBraW5kOiAnQXJyYXlCdWZmZXInLCBieXRlTGVuZ3RoOiBkYXRhLmJ5dGVMZW5ndGggfTtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQXJyYXlCdWZmZXIuaXNWaWV3ICYmIEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgIHJldHVybiB7IGtpbmQ6ICdUeXBlZEFycmF5JywgYnl0ZUxlbmd0aDogZGF0YS5ieXRlTGVuZ3RoIH07XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQnVmZmVyLmlzQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgcmV0dXJuIHsga2luZDogJ0J1ZmZlcicsIGxlbmd0aDogZGF0YS5sZW5ndGggfTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhIGluc3RhbmNlb2YgQmxvYikgcmV0dXJuIHsga2luZDogJ0Jsb2InLCBzaXplOiBkYXRhLnNpemUgfTtcbiAgfSBjYXRjaCAoZSkge31cbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IG8gPSB7IGtpbmQ6ICdvYmplY3QnIH07XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCAndHlwZScpKSBvLnR5cGUgPSBkYXRhLnR5cGU7XG4gICAgaWYgKHR5cGVvZiBkYXRhLmRhdGEgPT09ICdzdHJpbmcnKSBvLmRhdGFTdHJpbmdMZW5ndGggPSBkYXRhLmRhdGEubGVuZ3RoO1xuICAgIGVsc2UgaWYgKGRhdGEuZGF0YSAmJiB0eXBlb2YgZGF0YS5kYXRhLmJ5dGVMZW5ndGggPT09ICdudW1iZXInKSBvLmRhdGFCeXRlTGVuZ3RoID0gZGF0YS5kYXRhLmJ5dGVMZW5ndGg7XG4gICAgcmV0dXJuIG87XG4gIH1cbiAgcmV0dXJuIHsga2luZDogdHlwZW9mIGRhdGEgfTtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24gdG8gYSByZW1vdGUgc2VydmVyLlxuICovXG5jbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAvLyBTZXR0aW5nc1xuICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGhvc3Q6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHdpbmRvdy5sb2NhdGlvbi5wb3J0IHx8ICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApLFxuICAgICAgc2VjdXJlOiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09ICdodHRwczonLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgICAgdGlja3JhdGU6IDI1MCxcbiAgICAgIHNpZ25pbmdLZXk6IHByb3BzLmF1dGggPyBuZXcgS2V5KHByb3BzLmF1dGgpIDogbnVsbCxcbiAgICAgIG1heFdlYnJ0Y1BlZXJzOiA1LCAvLyBNYXhpbXVtIG51bWJlciBvZiBXZWJSVEMgcGVlciBjb25uZWN0aW9ucyB0byBtYWludGFpblxuICAgICAgd2VicnRjUGVlckRpc2NvdmVyeURlbGF5OiAyMDAwLCAvLyBEZWxheSBiZWZvcmUgZGlzY292ZXJpbmcgcGVlcnMgKG1zKVxuICAgICAgd2VicnRjSGVhcnRiZWF0SW50ZXJ2YWxNczogMzAwMDAsIC8vIFJlLXJlZ2lzdGVyIHBlZXIgcHJlc2VuY2Ugb24gaGVhcnRiZWF0XG4gICAgICB3ZWJydGNEaXNjb3ZlcnlJbnRlcnZhbE1zOiAxNTAwMCwgLy8gUGVyaW9kaWNhbGx5IHJlZGlzY292ZXIgYWN0aXZlIHBlZXJzXG4gICAgICB3ZWJydGNHb3NzaXBJbnRlcnZhbE1zOiAyNTAwMCwgLy8gR29zc2lwIHBlZXIgbGlzdCB0byBXZWJSVEMgbmVpZ2hib3JzIGZvciBjcm9zcy1jbHVzdGVyIGRpc2NvdmVyeVxuICAgICAgd2VicnRjUGVlcmluZ09mZmVySW50ZXJ2YWxNczogMzAwMDAsIC8vIFB1Ymxpc2ggcGVlcmluZyBvZmZlciB3aGVuIGJlbG93IG1heCBwZWVyc1xuICAgICAgd2VicnRjQ29ubmVjdFRpbWVvdXRNczogMTUwMDAsIC8vIEFib3J0IHN0YWxlIG91dGJvdW5kIGNvbm5lY3QgYXR0ZW1wdHNcbiAgICAgIHdlYnJ0Y0NhbmRpZGF0ZU1heEFnZU1zOiAxMjAwMDAgLy8gSWdub3JlIHN0YWxlIHBlZXIgcmVnaXN0cmF0aW9ucyB3aGVuIGRpc2NvdmVyaW5nIGNhbmRpZGF0ZXNcbiAgICB9LCBwcm9wcyk7XG5cbiAgICAvLyBPcHRpb25hbCBvdmVycmlkZSB2aWEgYSBzaW5nbGUgaHViIGFkZHJlc3Mgc3RyaW5nLlxuICAgIC8vIEFjY2VwdHM6IFwiaG9zdDpwb3J0XCIsIFwiaHR0cChzKTovL2hvc3Q6cG9ydFwiLCBcIndzKHMpOi8vaG9zdDpwb3J0XCJcbiAgICBpZiAodGhpcy5zZXR0aW5ncyAmJiB0eXBlb2YgdGhpcy5zZXR0aW5ncy5odWJBZGRyZXNzID09PSAnc3RyaW5nJyAmJiB0aGlzLnNldHRpbmdzLmh1YkFkZHJlc3MudHJpbSgpKSB7XG4gICAgICB0aGlzLl9hcHBseUh1YkFkZHJlc3NTdHJpbmcodGhpcy5zZXR0aW5ncy5odWJBZGRyZXNzKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZGF0YTogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgbmV0d29ya1N0YXR1czogbnVsbCxcbiAgICAgIGxhc3ROZXR3b3JrU3RhdHVzOiBudWxsLFxuICAgICAgc3Vic2NyaXB0aW9uczogbmV3IFNldCgpLFxuICAgICAgaXNDb25uZWN0ZWQ6IGZhbHNlLFxuICAgICAgd2VicnRjQ29ubmVjdGVkOiBmYWxzZSxcbiAgICAgIGN1cnJlbnRQYXRoOiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWVcbiAgICB9O1xuXG4gICAgLy8gR2xvYmFsIHN0YXRlIGZvciBKU09OLVBBVENIIHVwZGF0ZXNcbiAgICB0aGlzLmdsb2JhbFN0YXRlID0ge1xuICAgICAgY29udmVyc2F0aW9uczoge30sXG4gICAgICBtZXNzYWdlczoge30sXG4gICAgICBkb2N1bWVudHM6IHt9LFxuICAgICAgZGlzdHJpYnV0ZVByb3Bvc2Fsczoge30sXG4gICAgICBwZWVyVG9wb2xvZ3lHb3NzaXA6IHsgYnlSZXBvcnRlcjoge30gfVxuICAgIH07XG5cbiAgICAvLyBDYW5vbmljYWwgYnJvd3Nlci1zaWRlIEZhYnJpYyBzdGF0ZSBzdG9yZSAob2ZmbGluZS1maXJzdCBiYXNlbGluZSkuXG4gICAgdGhpcy5fZmFicmljU3RvcmUgPSBmYWJyaWNCcm93c2VyU3RhdGVTdG9yZSgpO1xuICAgIGNvbnN0IHJlc3RvcmVkVW5pZmllZCA9IHRoaXMuX2ZhYnJpY1N0b3JlLkdFVCgnLycpO1xuICAgIGlmIChyZXN0b3JlZFVuaWZpZWQgJiYgdHlwZW9mIHJlc3RvcmVkVW5pZmllZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuZ2xvYmFsU3RhdGUgPSB7XG4gICAgICAgIC4uLnRoaXMuZ2xvYmFsU3RhdGUsXG4gICAgICAgIC4uLnJlc3RvcmVkVW5pZmllZCxcbiAgICAgICAgY29udmVyc2F0aW9uczoge1xuICAgICAgICAgIC4uLih0aGlzLmdsb2JhbFN0YXRlLmNvbnZlcnNhdGlvbnMgfHwge30pLFxuICAgICAgICAgIC4uLigocmVzdG9yZWRVbmlmaWVkICYmIHJlc3RvcmVkVW5pZmllZC5jb252ZXJzYXRpb25zKSB8fCB7fSlcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICAuLi4odGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyB8fCB7fSksXG4gICAgICAgICAgLi4uKChyZXN0b3JlZFVuaWZpZWQgJiYgcmVzdG9yZWRVbmlmaWVkLm1lc3NhZ2VzKSB8fCB7fSlcbiAgICAgICAgfSxcbiAgICAgICAgZG9jdW1lbnRzOiB7XG4gICAgICAgICAgLi4uKHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzIHx8IHt9KSxcbiAgICAgICAgICAuLi4oKHJlc3RvcmVkVW5pZmllZCAmJiByZXN0b3JlZFVuaWZpZWQuZG9jdW1lbnRzKSB8fCB7fSlcbiAgICAgICAgfSxcbiAgICAgICAgZGlzdHJpYnV0ZVByb3Bvc2Fsczoge1xuICAgICAgICAgIC4uLih0aGlzLmdsb2JhbFN0YXRlLmRpc3RyaWJ1dGVQcm9wb3NhbHMgfHwge30pLFxuICAgICAgICAgIC4uLigocmVzdG9yZWRVbmlmaWVkICYmIHJlc3RvcmVkVW5pZmllZC5kaXN0cmlidXRlUHJvcG9zYWxzKSB8fCB7fSlcbiAgICAgICAgfSxcbiAgICAgICAgcGVlclRvcG9sb2d5R29zc2lwOiB7XG4gICAgICAgICAgLi4uKHRoaXMuZ2xvYmFsU3RhdGUucGVlclRvcG9sb2d5R29zc2lwIHx8IHt9KSxcbiAgICAgICAgICAuLi4oKHJlc3RvcmVkVW5pZmllZCAmJiByZXN0b3JlZFVuaWZpZWQucGVlclRvcG9sb2d5R29zc2lwKSB8fCB7fSlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmF0dGVtcHRzID0gMTtcbiAgICB0aGlzLm1lc3NhZ2VRdWV1ZSA9IFtdO1xuICAgIHRoaXMud2VicnRjTWVzc2FnZVF1ZXVlID0gW107XG4gICAgdGhpcy5wZWVyTWVzc2FnZVF1ZXVlID0gW107XG4gICAgdGhpcy5jaGF0U3VibWlzc2lvblF1ZXVlID0gW107XG4gICAgdGhpcy5wZW5kaW5nSHViQ2hhdFF1ZXVlID0gW107IC8vIENoYXQgbWVzc2FnZXMgc2VudCB3aGlsZSBodWIgd2FzIG9mZmxpbmU7IGZsdXNoIHRvIGJyaWRnZSB3aGVuIHJlY29ubmVjdGVkXG4gICAgdGhpcy5fcGVuZGluZ0NsYWltQ2FsbGJhY2tzID0gbmV3IE1hcCgpOyAvLyBkb2N1bWVudElkIC0+IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAvKiogSHViIGZpbGUgaWQgKHNoYSkgcGFzc2VkIHRvIENyZWF0ZVB1cmNoYXNlSW52b2ljZSDigJQgY29ycmVsYXRlcyBlcnJvciByZXNwb25zZXMgdG8gdGhlIFVJIG1vZGFsLiAqL1xuICAgIHRoaXMuX3BlbmRpbmdDcmVhdGVQdXJjaGFzZUludm9pY2VCYWNrZW5kSWRzID0gbmV3IFNldCgpO1xuICAgIC8qKiBTYW1lIGZvciBDcmVhdGVEaXN0cmlidXRlSW52b2ljZSAocGF5LXRvLWRpc3RyaWJ1dGUgc3RlcCAxKS4gKi9cbiAgICB0aGlzLl9wZW5kaW5nQ3JlYXRlRGlzdHJpYnV0ZUludm9pY2VCYWNrZW5kSWRzID0gbmV3IFNldCgpO1xuICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICB0aGlzLndzID0gbnVsbDtcbiAgICB0aGlzLl9oZWFydGJlYXQgPSBudWxsO1xuICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gZmFsc2U7ICAvLyBJbnRlcm5hbCBjb25uZWN0aW9uIHN0YXRlXG5cbiAgICAvLyBDaGF0IHJvdXRpbmcgY29udHJvbHNcbiAgICB0aGlzLmRpc2FibGVGYWJyaWNQMlAgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVIdWJDaGF0ID0gZmFsc2U7XG4gICAgdGhpcy5wcmVmZXJXZWJSVENDaGF0ID0gZmFsc2U7XG5cbiAgICAvLyBXZWJSVEMgcHJvcGVydGllcyAobmF0aXZlIFJUQ1BlZXJDb25uZWN0aW9uKVxuICAgIHRoaXMucGVlcklkID0gbnVsbDtcbiAgICB0aGlzLndlYnJ0Y1BlZXJzID0gbmV3IE1hcCgpOyAvLyBUcmFjayBhbGwgV2ViUlRDIHBlZXIgY29ubmVjdGlvbnMgKG1ldGFkYXRhKVxuICAgIHRoaXMuX3dlYnJ0Y0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dlYnJ0Y1JlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5fcGVlckRpc2NvdmVyeVRpbWVyID0gbnVsbDsgLy8gVGltZXIgZm9yIHBlZXIgZGlzY292ZXJ5IGFmdGVyIHN0YXJ0dXBcbiAgICB0aGlzLl9jb25uZWN0aW5nUGVlcnMgPSBuZXcgU2V0KCk7IC8vIFRyYWNrIHBlZXJzIHdlJ3JlIGN1cnJlbnRseSBjb25uZWN0aW5nIHRvXG4gICAgdGhpcy5fcGVuZGluZ1BlZXJDYW5kaWRhdGVzID0gW107IC8vIENhbmRpZGF0ZXMgcmVjZWl2ZWQgYmVmb3JlIFdlYlJUQyBpcyByZWFkeVxuICAgIHRoaXMuX2xhc3RXZWJSVENQdWJsaXNoQXQgPSAwO1xuICAgIHRoaXMuX2xhc3RXZWJSVENEaXNjb3ZlckF0ID0gMDtcbiAgICB0aGlzLl9sYXN0V2ViUlRDR29zc2lwQXQgPSAwO1xuICAgIHRoaXMuX2xhc3RQZWVyaW5nT2ZmZXJBdCA9IDA7XG4gICAgdGhpcy5fanNvblJwY1F1ZXVlID0gW107IC8vIEpTT04tUlBDIHBheWxvYWRzIHRvIHNlbmQgb25jZSBXZWJTb2NrZXQgaXMgb3BlblxuICAgIC8qKiBNb25vdG9uaWMgaWQgZm9yIHtAbGluayBCcmlkZ2UjY2FsbEh1Ykpzb25ScGN9IEhUVFAgUE9TVCAvc2VydmljZXMvcnBjLiAqL1xuICAgIHRoaXMuX2h1Ykpzb25ScGNTZXEgPSAwO1xuICAgIHRoaXMuX3J0Y1BlZXJzID0gbmV3IE1hcCgpOyAvLyBwZWVySWQgLT4geyBwYywgZGMsIHN0YXR1cywgaW5pdGlhdG9yLCBtZXRhZGF0YSB9XG4gICAgdGhpcy5fcnRjUGVuZGluZ0ljZSA9IG5ldyBNYXAoKTsgLy8gcGVlcklkIC0+IFtSVENJY2VDYW5kaWRhdGVJbml0XVxuICAgIHRoaXMuX3dlYnJ0Y0Nvbm5lY3RUaW1lcnMgPSBuZXcgTWFwKCk7IC8vIHBlZXJJZCAtPiB0aW1lb3V0IGhhbmRsZVxuICAgIHRoaXMuX3J0Y1Nlc3Npb25Db3VudGVyID0gMDtcbiAgICB0aGlzLl9sYXN0V2ViUlRDQ2hhdERlbGl2ZXJ5Q291bnQgPSBudWxsO1xuICAgIHRoaXMuX2xhc3RXZWJSVENDaGF0U2VudEF0ID0gMDtcbiAgICB0aGlzLl9sYXN0V2ViUlRDUmVjaXBpZW50UGVlcklkcyA9IFtdO1xuICAgIC8qKiBUaHJvdHRsZSBpZGVudGl0eSB1bmxvY2sgVUkgb3BlbnMgd2hlbiBzZXZlcmFsIGd1YXJkZWQgYWN0aW9ucyBmaXJlIGluIG9uZSBidXJzdC4gKi9cbiAgICB0aGlzLl9sYXN0SWRlbnRpdHlVbmxvY2tVaU5vdGlmeUF0ID0gMDtcblxuICAgIC8qKiBQZXIgRmFicmljIHRyYW5zcG9ydCBsZWc6IGh1YiBXZWJTb2NrZXQgKyBlYWNoIFdlYlJUQyBwZWVyIOKAlCBUcmVlLCBjaGFpbiwgcmVwdXRhdGlvbi4gKi9cbiAgICB0aGlzLl9mYWJyaWNUcmFuc3BvcnRTZXNzaW9ucyA9IG5ldyBNYXAoKTtcbiAgICAvKiogQWZ0ZXIgaHViIHdpcmUgbWlzYmVoYXZpb3IgZXhoYXVzdGlvbiwgc2tpcCBhdXRvLXJlY29ubmVjdCAob3BlcmF0b3IgbXVzdCByZWZyZXNoKS4gKi9cbiAgICB0aGlzLl9mYWJyaWNIdWJSZWNvbm5lY3RTdXNwZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9wZWVyTGlzdFVpUmVmcmVzaFRpbWVyID0gbnVsbDtcblxuICAgIHRoaXMuX3dhbGxldEJhbGFuY2VCYXNlbGluZSA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLl9sYXN0V2FsbGV0QmFsYW5jZVRvdGFsID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9sYXN0V2FsbGV0Q29uZmlybWVkU2F0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fbGFzdFdhbGxldFVuY29uZmlybWVkU2F0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fbDFJbnZvaWNlQWN0aXZpdHlLZXlzID0gbmV3IFNldCgpO1xuICAgIHRoaXMuX29uQ2xpZW50QmFsYW5jZVVwZGF0ZSA9IHRoaXMuX29uQ2xpZW50QmFsYW5jZVVwZGF0ZS5iaW5kKHRoaXMpO1xuXG4gICAgLy8gVHJhY2sgYmFja2luZyBTSEEgaWRzIHRoYXQgc2hvdWxkIGJlIHB1Ymxpc2hlZCBvbmNlIENyZWF0ZURvY3VtZW50IHN1Y2NlZWRzLlxuICAgIC8qKiBIdWIgZG9jdW1lbnQgZmlsZSBpZCAoc2hhKSB3aGVuIGEgUHVibGlzaERvY3VtZW50IEpTT05DYWxsIGlzIGluIGZsaWdodC4gKi9cbiAgICB0aGlzLl9wZW5kaW5nUHVibGlzaERvY3VtZW50QmFja2VuZElkcyA9IG5ldyBTZXQoKTtcbiAgICAvKiogV2hlbiBwdWJsaXNoIGZpcnN0IHJ1bnMgQ3JlYXRlRG9jdW1lbnQsIGNvcnJlbGF0ZSBnZW5lcmljIFJQQyBlcnJvcnMgdG8gdGhlIGRvY3VtZW50IHJvdy4gKi9cbiAgICB0aGlzLl9sYXN0UHVibGlzaENyZWF0ZUNvbnRleHQgPSBudWxsOyAvLyB7IHNoYTogc3RyaW5nLCBhY3RvcklkOiBzdHJpbmcsIHNlbnRBdDogbnVtYmVyIH1cbiAgICAvKiogQWNjZXB0RGlzdHJpYnV0ZVByb3Bvc2FsIGluIGZsaWdodCDigJQgY29ycmVsYXRlIGh1YiBlcnJvcnMgdG8gaG9zdGluZyBVSS4gKi9cbiAgICB0aGlzLl9wZW5kaW5nQWNjZXB0RGlzdHJpYnV0ZUNvbnRleHQgPSBudWxsOyAvLyB7IGJhY2tlbmRJZDogc3RyaW5nLCBwcm9wb3NhbElkOiBzdHJpbmcsIHNlbnRBdDogbnVtYmVyIH1cbiAgICAvKiogU2VuZERpc3RyaWJ1dGVQcm9wb3NhbCBpbiBmbGlnaHQg4oCUIGNvcnJlbGF0ZSB0eXBlZCBodWIgcmVzdWx0IHRvIGRvY3VtZW50IGRldGFpbCBVSS4gKi9cbiAgICB0aGlzLl9wZW5kaW5nU2VuZERpc3RyaWJ1dGVQcm9wb3NhbENvbnRleHQgPSBudWxsOyAvLyB7IGJhY2tlbmRJZDogc3RyaW5nLCBwZWVyS2V5OiBzdHJpbmcsIHNlbnRBdDogbnVtYmVyIH1cbiAgICB0aGlzLl9wZW5kaW5nUHVibGlzaEJ5U2hhID0gbmV3IFNldCgpO1xuICAgIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgb2JqZWN0Pn0gSW5jb21wbGV0ZSBQMlBfRklMRV9TRU5EIHRyYW5zZmVycyBrZXllZCBieSB0cmFuc2ZlcklkICovXG4gICAgdGhpcy5fcDJwRmlsZVJlY2VpdmVycyA9IG5ldyBNYXAoKTtcblxuICAgIC8vIEluaXRpYWxpemUga2V5IGlmIHByb3ZpZGVkXG4gICAgaWYgKHByb3BzLmtleSkge1xuICAgICAgdGhpcy5rZXkgPSBuZXcgS2V5KHByb3BzLmtleSk7XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBsb2NhbCBicm93c2VyLWJhY2tlZCBzdGF0ZS5cbiAgICBjb25zdCByZXN0b3JlZFBlZXJRdWV1ZSA9IHRoaXMuX3JlYWRKU09ORnJvbVN0b3JhZ2UoJ2ZhYnJpYzpwZWVyTWVzc2FnZVF1ZXVlJywgW10pO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3RvcmVkUGVlclF1ZXVlKSkgdGhpcy5wZWVyTWVzc2FnZVF1ZXVlID0gcmVzdG9yZWRQZWVyUXVldWU7XG5cbiAgICAvLyBNZXJnZSBsZWdhY3kgYGZhYnJpYzptZXNzYWdlc2Agd2l0aCBodWIgbWVzc2FnZXMgYWxyZWFkeSByZXN0b3JlZCBmcm9tIGBmYWJyaWM6c3RhdGVgICh1bmlmaWVkIHdpbnMpLlxuICAgIGNvbnN0IHVuaWZpZWRNZXNzYWdlcyA9XG4gICAgICB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzICYmIHR5cGVvZiB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzID09PSAnb2JqZWN0J1xuICAgICAgICA/IHsgLi4udGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyB9XG4gICAgICAgIDoge307XG4gICAgY29uc3QgcmVzdG9yZWRMZWdhY3lNZXNzYWdlcyA9IHRoaXMuX3JlYWRKU09ORnJvbVN0b3JhZ2UoJ2ZhYnJpYzptZXNzYWdlcycsIG51bGwpO1xuICAgIGNvbnN0IGxlZ2FjeU1lc3NhZ2VzID1cbiAgICAgIHJlc3RvcmVkTGVnYWN5TWVzc2FnZXMgJiYgdHlwZW9mIHJlc3RvcmVkTGVnYWN5TWVzc2FnZXMgPT09ICdvYmplY3QnID8gcmVzdG9yZWRMZWdhY3lNZXNzYWdlcyA6IHt9O1xuICAgIGNvbnN0IG1lcmdlZENoYXQgPSB7IC4uLmxlZ2FjeU1lc3NhZ2VzLCAuLi51bmlmaWVkTWVzc2FnZXMgfTtcbiAgICB0aGlzLl9tZXNzYWdlQ29sbGVjdGlvbiA9IG5ldyBCcmlkZ2VNZXNzYWdlQ29sbGVjdGlvbih7IGRhdGE6IG1lcmdlZENoYXQgfSk7XG4gICAgdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyA9IHRoaXMuX21lc3NhZ2VDb2xsZWN0aW9uLmV4cG9ydE1hcCgpO1xuXG4gICAgLy8gUmVzdG9yZSBkb2N1bWVudHMgKHVuaWZpZWQgc3RvcmU6IGFsbCBkb2NzIHdpdGggY29udGVudDsgcHVibGlzaCBhZGRzIHJlZiB0byBodWIgaW5kZXgpXG4gICAgY29uc3QgZG9jcyA9IHt9O1xuICAgIGNvbnN0IHJlc3RvcmVkRG9jcyA9IHRoaXMuX3JlYWRKU09ORnJvbVN0b3JhZ2UoJ2ZhYnJpYzpkb2N1bWVudHMnLCBudWxsKTtcbiAgICBpZiAocmVzdG9yZWREb2NzICYmIHR5cGVvZiByZXN0b3JlZERvY3MgPT09ICdvYmplY3QnKSBPYmplY3QuYXNzaWduKGRvY3MsIHJlc3RvcmVkRG9jcyk7XG5cbiAgICAvLyBNaWdyYXRlIGZyb20gbGVnYWN5IGxvY2FsRG9jdW1lbnRzIGludG8gZG9jdW1lbnRzLlxuICAgIGNvbnN0IGxlZ2FjeURvY3MgPSB0aGlzLl9yZWFkSlNPTkZyb21TdG9yYWdlKCdmYWJyaWM6bG9jYWxEb2N1bWVudHMnLCBudWxsKTtcbiAgICBpZiAobGVnYWN5RG9jcyAmJiB0eXBlb2YgbGVnYWN5RG9jcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZG9jcywgbGVnYWN5RG9jcyk7XG4gICAgICB0aGlzLl9yZW1vdmVTdG9yYWdlS2V5KCdmYWJyaWM6bG9jYWxEb2N1bWVudHMnKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoZG9jcykubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMgPSB7IC4uLih0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyB8fCB7fSksIC4uLmRvY3MgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN0b3JlZFByb3Bvc2FscyA9IHRoaXMuX3JlYWRKU09ORnJvbVN0b3JhZ2UoJ2ZhYnJpYzpkaXN0cmlidXRlUHJvcG9zYWxzJywgbnVsbCk7XG4gICAgaWYgKHJlc3RvcmVkUHJvcG9zYWxzICYmIHR5cGVvZiByZXN0b3JlZFByb3Bvc2FscyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuZ2xvYmFsU3RhdGUuZGlzdHJpYnV0ZVByb3Bvc2FscyA9IHJlc3RvcmVkUHJvcG9zYWxzO1xuICAgIH1cblxuICAgIHRoaXMuX3BlcnNpc3RHbG9iYWxTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQgYXV0aG9yaXR5ICgpIHtcbiAgICBpZiAodGhpcy5zZXR0aW5ncyAmJiB0aGlzLnNldHRpbmdzLmF1dGhvcml0eSkgcmV0dXJuIHRoaXMuc2V0dGluZ3MuYXV0aG9yaXR5O1xuICAgIHJldHVybiAoKHRoaXMuc2V0dGluZ3Muc2VjdXJlKSA/IGB3c3NgIDogYHdzYCkgKyBgOi8vJHt0aGlzLnNldHRpbmdzLmhvc3R9OiR7dGhpcy5zZXR0aW5ncy5wb3J0fWA7XG4gIH1cblxuICBnZXQgbmV0d29ya1N0YXR1cyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUubmV0d29ya1N0YXR1cyB8fCBudWxsO1xuICB9XG5cbiAgZ2V0IGxhc3ROZXR3b3JrU3RhdHVzICgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5sYXN0TmV0d29ya1N0YXR1cyB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGxpc3Qgb2YgV2ViUlRDIHBlZXJzIGNvbm5lY3RlZCB0byB0aGlzIGJyb3dzZXIgY2xpZW50LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFycmF5IG9mIFdlYlJUQyBwZWVyIG9iamVjdHMgd2l0aCBpZCwgc3RhdHVzLCBkaXJlY3Rpb24sIGNvbm5lY3RlZEF0XG4gICAqL1xuICBnZXQgbG9jYWxXZWJydGNQZWVycyAoKSB7XG4gICAgY29uc3QgcGVlcnMgPSBBcnJheS5mcm9tKHRoaXMud2VicnRjUGVlcnMudmFsdWVzKCkpLm1hcCgocCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSBwICYmIHAuaWQgIT0gbnVsbCA/IFN0cmluZyhwLmlkKSA6ICcnO1xuICAgICAgY29uc3Qgc2VzcyA9IGlkICYmIHRoaXMuX2ZhYnJpY1RyYW5zcG9ydFNlc3Npb25zICYmIHRoaXMuX2ZhYnJpY1RyYW5zcG9ydFNlc3Npb25zLmdldChpZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcC5pZCxcbiAgICAgICAgc3RhdHVzOiBwLnN0YXR1cyxcbiAgICAgICAgZGlyZWN0aW9uOiBwLmRpcmVjdGlvbixcbiAgICAgICAgY29ubmVjdGVkQXQ6IHAuY29ubmVjdGVkQXQsXG4gICAgICAgIGVycm9yOiBwLmVycm9yLFxuICAgICAgICBsYXN0U2VlbjogcC5sYXN0U2VlbixcbiAgICAgICAgc2NvcmU6IHNlc3MgJiYgc2Vzcy5zY29yZSAhPSBudWxsID8gc2Vzcy5zY29yZSA6IDEwMCxcbiAgICAgICAgbWlzYmVoYXZpb3I6IHNlc3MgJiYgc2Vzcy5taXNiZWhhdmlvciAhPSBudWxsID8gc2Vzcy5taXNiZWhhdmlvciA6IDBcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBbHNvIGluY2x1ZGUgcGVlcnMgdGhhdCBhcmUgY3VycmVudGx5IGNvbm5lY3RpbmdcbiAgICBmb3IgKGNvbnN0IHBlZXJJZCBvZiB0aGlzLl9jb25uZWN0aW5nUGVlcnMpIHtcbiAgICAgIGlmICghcGVlcnMuZmluZChwID0+IHAuaWQgPT09IHBlZXJJZCkpIHtcbiAgICAgICAgcGVlcnMucHVzaCh7XG4gICAgICAgICAgaWQ6IHBlZXJJZCxcbiAgICAgICAgICBzdGF0dXM6ICdjb25uZWN0aW5nJyxcbiAgICAgICAgICBkaXJlY3Rpb246ICdvdXRib3VuZCcsXG4gICAgICAgICAgY29ubmVjdGVkQXQ6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgV2ViUlRDIG1lc2ggc3RhdHVzIHN1bW1hcnkuXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFN1bW1hcnkgb2YgV2ViUlRDIG1lc2ggc3RhdGVcbiAgICovXG4gIGdldCB3ZWJydGNNZXNoU3RhdHVzICgpIHtcbiAgICBjb25zdCBjb25uZWN0ZWQgPSB0aGlzLmdldFdlYlJUQ1BlZXJDb3VudCgpO1xuICAgIGNvbnN0IGNvbm5lY3RpbmcgPSB0aGlzLl9jb25uZWN0aW5nUGVlcnMgPyB0aGlzLl9jb25uZWN0aW5nUGVlcnMuc2l6ZSA6IDA7XG4gICAgY29uc3QgbWF4UGVlcnMgPSB0aGlzLnNldHRpbmdzLm1heFdlYnJ0Y1BlZXJzIHx8IDU7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlZXJJZDogdGhpcy5wZWVySWQsXG4gICAgICByZWFkeTogdGhpcy5fd2VicnRjUmVhZHksXG4gICAgICBjb25uZWN0ZWQsXG4gICAgICBjb25uZWN0aW5nLFxuICAgICAgbWF4UGVlcnMsXG4gICAgICBzbG90c0F2YWlsYWJsZTogTWF0aC5tYXgoMCwgbWF4UGVlcnMgLSBjb25uZWN0ZWQgLSBjb25uZWN0aW5nKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTGlnaHR3ZWlnaHQgZGVidWcgdGVsZW1ldHJ5IGZvciBicm93c2VyLWxldmVsIFdlYlJUQyBjaGF0IHNlbmRzLlxuICAgKiBAcmV0dXJucyB7e2xhc3REZWxpdmVyZWRUbzpudW1iZXJ8bnVsbCxsYXN0U2VudEF0Om51bWJlcn19XG4gICAqL1xuICBnZXQgd2VicnRjQ2hhdERlYnVnU3RhdHVzICgpIHtcbiAgICBjb25zdCBjb25uZWN0ZWRQZWVySWRzID0gQXJyYXkuZnJvbSh0aGlzLndlYnJ0Y1BlZXJzLnZhbHVlcygpKVxuICAgICAgLmZpbHRlcigocGVlcikgPT4gcGVlciAmJiBwZWVyLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcgJiYgcGVlci5pZClcbiAgICAgIC5tYXAoKHBlZXIpID0+IHBlZXIuaWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhc3REZWxpdmVyZWRUbzogTnVtYmVyLmlzRmluaXRlKHRoaXMuX2xhc3RXZWJSVENDaGF0RGVsaXZlcnlDb3VudClcbiAgICAgICAgPyB0aGlzLl9sYXN0V2ViUlRDQ2hhdERlbGl2ZXJ5Q291bnRcbiAgICAgICAgOiBudWxsLFxuICAgICAgbGFzdFNlbnRBdDogdGhpcy5fbGFzdFdlYlJUQ0NoYXRTZW50QXQgfHwgMCxcbiAgICAgIHBlZXJJZDogdGhpcy5wZWVySWQgfHwgbnVsbCxcbiAgICAgIGNvbm5lY3RlZFBlZXJJZHMsXG4gICAgICBsYXN0UmVjaXBpZW50UGVlcklkczogQXJyYXkuaXNBcnJheSh0aGlzLl9sYXN0V2ViUlRDUmVjaXBpZW50UGVlcklkcylcbiAgICAgICAgPyB0aGlzLl9sYXN0V2ViUlRDUmVjaXBpZW50UGVlcklkcy5zbGljZSgpXG4gICAgICAgIDogW11cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIFdlYlJUQy1vbmx5IGNoYXQgbW9kZS5cbiAgICogV2hlbiBlbmFibGVkLCBjaGF0IG1lc3NhZ2VzIGFyZSBzZW50IG92ZXIgdGhlIFdlYlJUQyBtZXNoIGluc3RlYWQgb2YgdGhlIGh1Yi9GYWJyaWMgUDJQIHBhdGhzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWRcbiAgICovXG4gIHNldFdlYlJUQ0NoYXRPbmx5IChlbmFibGVkKSB7XG4gICAgY29uc3QgZmxhZyA9ICEhZW5hYmxlZDtcbiAgICB0aGlzLnByZWZlcldlYlJUQ0NoYXQgPSBmbGFnO1xuICAgIHRoaXMuZGlzYWJsZUZhYnJpY1AyUCA9IGZsYWc7XG4gICAgdGhpcy5kaXNhYmxlSHViQ2hhdCA9IGZsYWc7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIFdlYlJUQyBzaWduYWxpbmcgcGF5bG9hZCB0byBhbm90aGVyIGJyb3dzZXIgdmlhIHRoZSBIdWIgUlBDLlxuICAgKi9cbiAgc2VuZFdlYlJUQ1NpZ25hbCAodG9QZWVySWQsIHNpZ25hbCkge1xuICAgIGlmICghdGhpcy5wZWVySWQpIHJldHVybjtcblxuICAgIHRoaXMuX3NlbmRKU09OUlBDKHtcbiAgICAgIG1ldGhvZDogJ1NlbmRXZWJSVENTaWduYWwnLFxuICAgICAgcGFyYW1zOiBbe1xuICAgICAgICBmcm9tUGVlcklkOiB0aGlzLnBlZXJJZCxcbiAgICAgICAgdG9QZWVySWQsXG4gICAgICAgIHNpZ25hbFxuICAgICAgfV1cbiAgICB9KTtcbiAgfVxuXG4gIF9odWJSZXBvcnRXZWJSVENQZWVyQ29ubmVjdGVkIChyZW1vdGVQZWVySWQsIGRpcmVjdGlvbikge1xuICAgIGlmICghdGhpcy5wZWVySWQgfHwgIXJlbW90ZVBlZXJJZCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9zZW5kSlNPTlJQQyh7XG4gICAgICAgIG1ldGhvZDogJ1dlYlJUQ1BlZXJDb25uZWN0ZWQnLFxuICAgICAgICBwYXJhbXM6IFt7XG4gICAgICAgICAgc2VsZlBlZXJJZDogdGhpcy5wZWVySWQsXG4gICAgICAgICAgcmVtb3RlUGVlcklkOiBTdHJpbmcocmVtb3RlUGVlcklkKSxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvbiB8fCBudWxsXG4gICAgICAgIH1dXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfKSB7IC8qIGlnbm9yZSAqLyB9XG4gIH1cblxuICBfaHViUmVwb3J0V2ViUlRDUGVlckRpc2Nvbm5lY3RlZCAocmVtb3RlUGVlcklkKSB7XG4gICAgaWYgKCF0aGlzLnBlZXJJZCB8fCAhcmVtb3RlUGVlcklkKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX3NlbmRKU09OUlBDKHtcbiAgICAgICAgbWV0aG9kOiAnV2ViUlRDUGVlckRpc2Nvbm5lY3RlZCcsXG4gICAgICAgIHBhcmFtczogW3tcbiAgICAgICAgICBzZWxmUGVlcklkOiB0aGlzLnBlZXJJZCxcbiAgICAgICAgICByZW1vdGVQZWVySWQ6IFN0cmluZyhyZW1vdGVQZWVySWQpXG4gICAgICAgIH1dXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfKSB7IC8qIGlnbm9yZSAqLyB9XG4gIH1cblxuICBfbmV3UlRDU2Vzc2lvbklkIChwZWVySWQpIHtcbiAgICB0aGlzLl9ydGNTZXNzaW9uQ291bnRlciArPSAxO1xuICAgIHJldHVybiBgJHt0aGlzLnBlZXJJZCB8fCAnYnJpZGdlJ306JHtwZWVySWR9OiR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9OiR7dGhpcy5fcnRjU2Vzc2lvbkNvdW50ZXIudG9TdHJpbmcoMzYpfWA7XG4gIH1cblxuICBfbmV4dFJUQ1NpZ25hbFJldmlzaW9uIChlbnRyeSkge1xuICAgIGVudHJ5LmxvY2FsU2lnbmFsUmV2aXNpb24gPSAoZW50cnkubG9jYWxTaWduYWxSZXZpc2lvbiB8fCAwKSArIDE7XG4gICAgcmV0dXJuIGVudHJ5LmxvY2FsU2lnbmFsUmV2aXNpb247XG4gIH1cblxuICBfd2l0aFJUQ1NpZ25hbE1ldGEgKGVudHJ5LCBzaWduYWwsIG92ZXJyaWRlcyA9IHt9KSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSAoc2lnbmFsICYmIHNpZ25hbC5fZmFicmljICYmIHR5cGVvZiBzaWduYWwuX2ZhYnJpYyA9PT0gJ29iamVjdCcpID8gc2lnbmFsLl9mYWJyaWMgOiB7fTtcbiAgICBjb25zdCByZXZpc2lvbiA9IHRoaXMuX25leHRSVENTaWduYWxSZXZpc2lvbihlbnRyeSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNpZ25hbCxcbiAgICAgIF9mYWJyaWM6IHtcbiAgICAgICAgcHJvdG9jb2w6ICdmYWJyaWMtd2VicnRjLXYyJyxcbiAgICAgICAgc2Vzc2lvbklkOiBlbnRyeS5sb2NhbFNlc3Npb25JZCB8fCBudWxsLFxuICAgICAgICB0YXJnZXRTZXNzaW9uSWQ6IGVudHJ5LnJlbW90ZVNlc3Npb25JZCB8fCBudWxsLFxuICAgICAgICByZXZpc2lvbixcbiAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgIC4uLm92ZXJyaWRlc1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBfZ2V0UlRDU2lnbmFsTWV0YSAoc2lnbmFsKSB7XG4gICAgaWYgKCFzaWduYWwgfHwgdHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG1ldGEgPSBzaWduYWwuX2ZhYnJpYztcbiAgICBpZiAoIW1ldGEgfHwgdHlwZW9mIG1ldGEgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvdG9jb2w6IHR5cGVvZiBtZXRhLnByb3RvY29sID09PSAnc3RyaW5nJyA/IG1ldGEucHJvdG9jb2wgOiBudWxsLFxuICAgICAgc2Vzc2lvbklkOiB0eXBlb2YgbWV0YS5zZXNzaW9uSWQgPT09ICdzdHJpbmcnID8gbWV0YS5zZXNzaW9uSWQgOiBudWxsLFxuICAgICAgdGFyZ2V0U2Vzc2lvbklkOiB0eXBlb2YgbWV0YS50YXJnZXRTZXNzaW9uSWQgPT09ICdzdHJpbmcnID8gbWV0YS50YXJnZXRTZXNzaW9uSWQgOiBudWxsLFxuICAgICAgcmV2aXNpb246IE51bWJlci5pc0Zpbml0ZShtZXRhLnJldmlzaW9uKSA/IE51bWJlcihtZXRhLnJldmlzaW9uKSA6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5hdGl2ZSBSVENQZWVyQ29ubmVjdGlvbiB3aXJlZCB0byBvdXIgc2lnbmFsaW5nIGhlbHBlcnMuXG4gICAqL1xuICBfY3JlYXRlUlRDUGVlckNvbm5lY3Rpb24gKHBlZXJJZCwgZW50cnkpIHtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBpY2VTZXJ2ZXJzOiBbXG4gICAgICAgIHsgdXJsczogJ3N0dW46c3R1bi5sLmdvb2dsZS5jb206MTkzMDInIH1cbiAgICAgIF1cbiAgICB9O1xuXG4gICAgY29uc3QgcGMgPSBuZXcgUlRDUGVlckNvbm5lY3Rpb24oY29uZmlnKTtcblxuICAgIHBjLm9uaWNlY2FuZGlkYXRlID0gKGV2KSA9PiB7XG4gICAgICBpZiAoZXYuY2FuZGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuX3dpdGhSVENTaWduYWxNZXRhKGVudHJ5LCB7XG4gICAgICAgICAgdHlwZTogJ2ljZS1jYW5kaWRhdGUnLFxuICAgICAgICAgIGNhbmRpZGF0ZTogZXYuY2FuZGlkYXRlLnRvSlNPTigpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbmRXZWJSVENTaWduYWwocGVlcklkLCBzaWduYWwpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwYy5vbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ1JUQ1BlZXJDb25uZWN0aW9uIHN0YXRlIGZvcicsIHBlZXJJZCwgcGMuY29ubmVjdGlvblN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYy5jb25uZWN0aW9uU3RhdGUgPT09ICdmYWlsZWQnIHx8IHBjLmNvbm5lY3Rpb25TdGF0ZSA9PT0gJ2Nsb3NlZCcgfHwgcGMuY29ubmVjdGlvblN0YXRlID09PSAnZGlzY29ubmVjdGVkJykge1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RXZWJSVENQZWVyKHBlZXJJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHBjLm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnSUNFIHN0YXRlIGZvcicsIHBlZXJJZCwgcGMuaWNlQ29ubmVjdGlvblN0YXRlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHBjO1xuICB9XG5cbiAgX2F0dGFjaERhdGFDaGFubmVsSGFuZGxlcnMgKHBlZXJJZCwgZGMpIHtcbiAgICBkYy5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbQlJJREdFXScsICdXZWJSVEMgZGF0YSBjaGFubmVsIG9wZW4gdG8nLCBwZWVySWQpO1xuICAgICAgfVxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLl9ydGNQZWVycy5nZXQocGVlcklkKTtcbiAgICAgIGlmIChlbnRyeSkgZW50cnkuZGMgPSBkYztcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy53ZWJydGNQZWVycy5nZXQocGVlcklkKSB8fCB7fTtcbiAgICAgIHRoaXMud2VicnRjUGVlcnMuc2V0KHBlZXJJZCwgT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIHtcbiAgICAgICAgaWQ6IHBlZXJJZCxcbiAgICAgICAgc3RhdHVzOiAnY29ubmVjdGVkJyxcbiAgICAgICAgZGlyZWN0aW9uOiAoZW50cnkgJiYgZW50cnkuaW5pdGlhdG9yKSA/ICdvdXRib3VuZCcgOiAnaW5ib3VuZCcsXG4gICAgICAgIGNvbm5lY3RlZEF0OiBleGlzdGluZy5jb25uZWN0ZWRBdCB8fCBEYXRlLm5vdygpLFxuICAgICAgICBsYXN0U2VlbjogRGF0ZS5ub3coKSxcbiAgICAgICAgY29ubmVjdGlvbjogZGNcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuX2Nvbm5lY3RpbmdQZWVycy5kZWxldGUocGVlcklkKTtcbiAgICAgIGlmICh0aGlzLl93ZWJydGNDb25uZWN0VGltZXJzLmhhcyhwZWVySWQpKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl93ZWJydGNDb25uZWN0VGltZXJzLmdldChwZWVySWQpKTtcbiAgICAgICAgdGhpcy5fd2VicnRjQ29ubmVjdFRpbWVycy5kZWxldGUocGVlcklkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3dlYnJ0Y0Nvbm5lY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgd2VicnRjQ29ubmVjdGVkOiB0cnVlIH0pO1xuICAgICAgdGhpcy5fd2VicnRjUmV3YXJkUGVlcihwZWVySWQsIDMsICdkYXRhLWNoYW5uZWwtb3BlbicpO1xuICAgICAgdGhpcy5faHViUmVwb3J0V2ViUlRDUGVlckNvbm5lY3RlZChwZWVySWQsIChlbnRyeSAmJiBlbnRyeS5pbml0aWF0b3IpID8gJ291dGJvdW5kJyA6ICdpbmJvdW5kJyk7XG4gICAgICAvLyBHb3NzaXAgb3VyIHBlZXIgbGlzdCB0byB0aGUgbmV3IHBlZXIgc28gY3Jvc3MtY2x1c3RlciBkaXNjb3ZlcnkgY2FuIGJlZ2luXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3NlbmRXZWJSVENQZWVyR29zc2lwKHBlZXJJZCksIDUwMCk7XG4gICAgfTtcblxuICAgIGRjLm9ubWVzc2FnZSA9IChldikgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVXZWJSVENQZWVyTWVzc2FnZShwZWVySWQsIGV2LmRhdGEpO1xuICAgIH07XG5cbiAgICBkYy5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnV2ViUlRDIGRhdGEgY2hhbm5lbCBjbG9zZWQgZm9yJywgcGVlcklkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlzY29ubmVjdFdlYlJUQ1BlZXIocGVlcklkKTtcbiAgICB9O1xuXG4gICAgZGMub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ1dlYlJUQyBkYXRhIGNoYW5uZWwgZXJyb3IgZm9yJywgcGVlcklkLCBzYWZlSWRlbnRpdHlFcnIoZXJyKSk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gaW5jb21pbmcgbmF0aXZlIFdlYlJUQyBzaWduYWxpbmcgbWVzc2FnZSBmcm9tIGFub3RoZXIgYnJvd3Nlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZyb21QZWVySWRcbiAgICogQHBhcmFtIHtPYmplY3R9IHNpZ25hbFxuICAgKi9cbiAgaGFuZGxlSW5jb21pbmdXZWJSVENTaWduYWwgKGZyb21QZWVySWQsIHNpZ25hbCkge1xuICAgIGlmICghc2lnbmFsIHx8IHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnKSByZXR1cm47XG5cbiAgICBsZXQgZW50cnkgPSB0aGlzLl9ydGNQZWVycy5nZXQoZnJvbVBlZXJJZCk7XG5cbiAgICBpZiAoIWVudHJ5KSB7XG4gICAgICBlbnRyeSA9IHtcbiAgICAgICAgcGM6IG51bGwsXG4gICAgICAgIGRjOiBudWxsLFxuICAgICAgICBzdGF0dXM6ICduZXcnLFxuICAgICAgICBpbml0aWF0b3I6IGZhbHNlLFxuICAgICAgICBtZXRhZGF0YToge30sXG4gICAgICAgIG1ha2luZ09mZmVyOiBmYWxzZSxcbiAgICAgICAgaWdub3JlT2ZmZXI6IGZhbHNlLFxuICAgICAgICBsb2NhbFNlc3Npb25JZDogdGhpcy5fbmV3UlRDU2Vzc2lvbklkKGZyb21QZWVySWQpLFxuICAgICAgICByZW1vdGVTZXNzaW9uSWQ6IG51bGwsXG4gICAgICAgIGxvY2FsU2lnbmFsUmV2aXNpb246IDAsXG4gICAgICAgIHJlbW90ZVNpZ25hbFJldmlzaW9uOiAwLFxuICAgICAgICAvLyBEZXRlcm1pbmlzdGljIHJvbGUgYXNzaWdubWVudCBhdm9pZHMgc3ltbWV0cmljIFwib2ZmZXIgZ2xhcmVcIi5cbiAgICAgICAgLy8gTG93ZXIgcGVlcklkIGFjdHMgYXMgcG9saXRlIHBlZXIgYW5kIHJlc29sdmVzIGNvbGxpc2lvbnMuXG4gICAgICAgIHBvbGl0ZTogdGhpcy5wZWVySWQgPyB0aGlzLnBlZXJJZCA8IGZyb21QZWVySWQgOiB0cnVlXG4gICAgICB9O1xuICAgICAgY29uc3QgcGMgPSB0aGlzLl9jcmVhdGVSVENQZWVyQ29ubmVjdGlvbihmcm9tUGVlcklkLCBlbnRyeSk7XG4gICAgICBlbnRyeS5wYyA9IHBjO1xuICAgICAgdGhpcy5fcnRjUGVlcnMuc2V0KGZyb21QZWVySWQsIGVudHJ5KTtcblxuICAgICAgcGMub25kYXRhY2hhbm5lbCA9IChldikgPT4ge1xuICAgICAgICBjb25zdCBkYyA9IGV2LmNoYW5uZWw7XG4gICAgICAgIHRoaXMuX2F0dGFjaERhdGFDaGFubmVsSGFuZGxlcnMoZnJvbVBlZXJJZCwgZGMpO1xuICAgICAgICBlbnRyeS5kYyA9IGRjO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBjIH0gPSBlbnRyeTtcbiAgICBpZiAoIWVudHJ5LnNpZ25hbFF1ZXVlKSBlbnRyeS5zaWduYWxRdWV1ZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgZW50cnkuc2lnbmFsUXVldWUgPSBlbnRyeS5zaWduYWxRdWV1ZS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9nZXRSVENTaWduYWxNZXRhKHNpZ25hbCk7XG4gICAgICBpZiAoIW1ldGEgfHwgbWV0YS5wcm90b2NvbCAhPT0gJ2ZhYnJpYy13ZWJydGMtdjInIHx8ICFtZXRhLnNlc3Npb25JZCkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbQlJJREdFXScsICdEcm9wcGluZyB1bnZlcnNpb25lZC9zdGFsZSBXZWJSVEMgc2lnbmFsIGZyb20nLCBmcm9tUGVlcklkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobWV0YS50YXJnZXRTZXNzaW9uSWQgJiYgbWV0YS50YXJnZXRTZXNzaW9uSWQgIT09IGVudHJ5LmxvY2FsU2Vzc2lvbklkKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkIHdoZW4gb3RoZXIgcGVlcnMgY29udGludWUgc2lnbmFsaW5nIHN0YWxlIHNlc3Npb25zLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwudHlwZSA9PT0gJ29mZmVyJyAmJiBzaWduYWwuc2RwKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBlbnRyeS5yZW1vdGVTZXNzaW9uSWQgJiZcbiAgICAgICAgICBtZXRhLnNlc3Npb25JZCA9PT0gZW50cnkucmVtb3RlU2Vzc2lvbklkICYmXG4gICAgICAgICAgTnVtYmVyLmlzRmluaXRlKG1ldGEucmV2aXNpb24pICYmXG4gICAgICAgICAgbWV0YS5yZXZpc2lvbiA8PSBlbnRyeS5yZW1vdGVTaWduYWxSZXZpc2lvblxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbQlJJREdFXScsICdEcm9wcGluZyBzdGFsZSBXZWJSVEMgb2ZmZXIgcmV2aXNpb24gZnJvbScsIGZyb21QZWVySWQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZW50cnkucmVtb3RlU2Vzc2lvbklkIHx8IGVudHJ5LnJlbW90ZVNlc3Npb25JZCAhPT0gbWV0YS5zZXNzaW9uSWQpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdGVTZXNzaW9uSWQgPSBtZXRhLnNlc3Npb25JZDtcbiAgICAgICAgICBlbnRyeS5yZW1vdGVTaWduYWxSZXZpc2lvbiA9IDA7XG4gICAgICAgICAgdGhpcy5fcnRjUGVuZGluZ0ljZS5kZWxldGUoZnJvbVBlZXJJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG1ldGEucmV2aXNpb24pKSB7XG4gICAgICAgICAgZW50cnkucmVtb3RlU2lnbmFsUmV2aXNpb24gPSBNYXRoLm1heChlbnRyeS5yZW1vdGVTaWduYWxSZXZpc2lvbiB8fCAwLCBtZXRhLnJldmlzaW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZmVyRGVzY3JpcHRpb24gPSBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKHNpZ25hbC5zZHApO1xuXG4gICAgICAgIGlmIChwYy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gJiYgcGMuY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCA9PT0gb2ZmZXJEZXNjcmlwdGlvbi5zZHApIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbQlJJREdFXScsICdJZ25vcmluZyBkdXBsaWNhdGUgV2ViUlRDIG9mZmVyIGZyb20nLCBmcm9tUGVlcklkKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvZmZlckNvbGxpc2lvbiA9IGVudHJ5Lm1ha2luZ09mZmVyIHx8IHBjLnNpZ25hbGluZ1N0YXRlICE9PSAnc3RhYmxlJztcblxuICAgICAgICBlbnRyeS5pZ25vcmVPZmZlciA9ICFlbnRyeS5wb2xpdGUgJiYgb2ZmZXJDb2xsaXNpb247XG4gICAgICAgIGlmIChlbnRyeS5pZ25vcmVPZmZlcikge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ0lnbm9yaW5nIGNvbGxpZGluZyBvZmZlciBmcm9tIGltcG9saXRlIHNpZGU6JywgZnJvbVBlZXJJZCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9mZmVyQ29sbGlzaW9uICYmIHBjLnNpZ25hbGluZ1N0YXRlICE9PSAnc3RhYmxlJykge1xuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIHBjLnNldExvY2FsRGVzY3JpcHRpb24oeyB0eXBlOiAncm9sbGJhY2snIH0pLFxuICAgICAgICAgICAgcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24ob2ZmZXJEZXNjcmlwdGlvbilcbiAgICAgICAgICBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihvZmZlckRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYy5zaWduYWxpbmdTdGF0ZSAhPT0gJ2hhdmUtcmVtb3RlLW9mZmVyJykge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ1NraXBwaW5nIGFuc3dlciBmb3InLCBmcm9tUGVlcklkLCAnaW4gc3RhdGUnLCBwYy5zaWduYWxpbmdTdGF0ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgcGMuY3JlYXRlQW5zd2VyKCk7XG4gICAgICAgIGlmIChwYy5zaWduYWxpbmdTdGF0ZSAhPT0gJ2hhdmUtcmVtb3RlLW9mZmVyJykge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ0Fuc3dlciBiZWNhbWUgc3RhbGUgZm9yJywgZnJvbVBlZXJJZCwgJ2luIHN0YXRlJywgcGMuc2lnbmFsaW5nU3RhdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKGFuc3dlcik7XG5cbiAgICAgICAgY29uc3QgYW5zd2VyU2lnbmFsID0gdGhpcy5fd2l0aFJUQ1NpZ25hbE1ldGEoZW50cnksIHtcbiAgICAgICAgICB0eXBlOiAnYW5zd2VyJyxcbiAgICAgICAgICBzZHA6IHBjLmxvY2FsRGVzY3JpcHRpb25cbiAgICAgICAgfSwge1xuICAgICAgICAgIHRhcmdldFNlc3Npb25JZDogZW50cnkucmVtb3RlU2Vzc2lvbklkXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbmRXZWJSVENTaWduYWwoZnJvbVBlZXJJZCwgYW5zd2VyU2lnbmFsKTtcblxuICAgICAgICBjb25zdCBxdWV1ZWQgPSB0aGlzLl9ydGNQZW5kaW5nSWNlLmdldChmcm9tUGVlcklkKTtcbiAgICAgICAgaWYgKHF1ZXVlZCAmJiBxdWV1ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjYW5kIG9mIHF1ZXVlZCkge1xuICAgICAgICAgICAgcGMuYWRkSWNlQ2FuZGlkYXRlKG5ldyBSVENJY2VDYW5kaWRhdGUoY2FuZCkpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIGFkZGluZyBxdWV1ZWQgSUNFIGNhbmRpZGF0ZSBmcm9tJywgZnJvbVBlZXJJZCwgc2FmZUlkZW50aXR5RXJyKGVycikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX3J0Y1BlbmRpbmdJY2UuZGVsZXRlKGZyb21QZWVySWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNpZ25hbC50eXBlID09PSAnYW5zd2VyJyAmJiBzaWduYWwuc2RwKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBlbnRyeS5yZW1vdGVTZXNzaW9uSWQgJiZcbiAgICAgICAgICBtZXRhLnNlc3Npb25JZCAhPT0gZW50cnkucmVtb3RlU2Vzc2lvbklkXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ0Ryb3BwaW5nIGFuc3dlciBmcm9tIHN0YWxlIHJlbW90ZSBzZXNzaW9uIGZvcicsIGZyb21QZWVySWQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZW50cnkucmVtb3RlU2Vzc2lvbklkKSB7XG4gICAgICAgICAgZW50cnkucmVtb3RlU2Vzc2lvbklkID0gbWV0YS5zZXNzaW9uSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgTnVtYmVyLmlzRmluaXRlKG1ldGEucmV2aXNpb24pICYmXG4gICAgICAgICAgbWV0YS5yZXZpc2lvbiA8PSAoZW50cnkucmVtb3RlU2lnbmFsUmV2aXNpb24gfHwgMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnRHJvcHBpbmcgc3RhbGUgV2ViUlRDIGFuc3dlciByZXZpc2lvbiBmcm9tJywgZnJvbVBlZXJJZCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUobWV0YS5yZXZpc2lvbikpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdGVTaWduYWxSZXZpc2lvbiA9IE1hdGgubWF4KGVudHJ5LnJlbW90ZVNpZ25hbFJldmlzaW9uIHx8IDAsIG1ldGEucmV2aXNpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBjLnNpZ25hbGluZ1N0YXRlICE9PSAnaGF2ZS1sb2NhbC1vZmZlcicpIHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbQlJJREdFXScsICdJZ25vcmluZyB1bmV4cGVjdGVkIFdlYlJUQyBhbnN3ZXIgZnJvbScsIGZyb21QZWVySWQsICdpbiBzdGF0ZScsIHBjLnNpZ25hbGluZ1N0YXRlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKHNpZ25hbC5zZHApKTtcbiAgICAgIH0gZWxzZSBpZiAoc2lnbmFsLnR5cGUgPT09ICdpY2UtY2FuZGlkYXRlJyAmJiBzaWduYWwuY2FuZGlkYXRlKSB7XG4gICAgICAgIGlmIChlbnRyeS5yZW1vdGVTZXNzaW9uSWQgJiYgbWV0YS5zZXNzaW9uSWQgIT09IGVudHJ5LnJlbW90ZVNlc3Npb25JZCkge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ0Ryb3BwaW5nIElDRSBmcm9tIHN0YWxlIHJlbW90ZSBzZXNzaW9uIGZvcicsIGZyb21QZWVySWQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVudHJ5LnJlbW90ZVNlc3Npb25JZCkgZW50cnkucmVtb3RlU2Vzc2lvbklkID0gbWV0YS5zZXNzaW9uSWQ7XG5cbiAgICAgICAgY29uc3QgY2FuZEluaXQgPSBzaWduYWwuY2FuZGlkYXRlO1xuICAgICAgICBpZiAocGMucmVtb3RlRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICBhd2FpdCBwYy5hZGRJY2VDYW5kaWRhdGUobmV3IFJUQ0ljZUNhbmRpZGF0ZShjYW5kSW5pdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHF1ZXVlID0gdGhpcy5fcnRjUGVuZGluZ0ljZS5nZXQoZnJvbVBlZXJJZCkgfHwgW107XG4gICAgICAgICAgcXVldWUucHVzaChjYW5kSW5pdCk7XG4gICAgICAgICAgdGhpcy5fcnRjUGVuZGluZ0ljZS5zZXQoZnJvbVBlZXJJZCwgcXVldWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IGVyciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICBpZiAobXNnLmluY2x1ZGVzKCdDYWxsZWQgaW4gd3Jvbmcgc3RhdGUnKSB8fCBtc2cuaW5jbHVkZXMoJ3dyb25nIHNpZ25hbGluZ1N0YXRlJykpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnSWdub3Jpbmcgc3RhbGUgV2ViUlRDIHNpZ25hbCBmcm9tJywgZnJvbVBlZXJJZCwgbXNnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsLnR5cGUgPT09ICdvZmZlcicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3IgaGFuZGxpbmcgV2ViUlRDIG9mZmVyIGZyb20nLCBmcm9tUGVlcklkLCBtc2cpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwudHlwZSA9PT0gJ2Fuc3dlcicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3IgaGFuZGxpbmcgV2ViUlRDIGFuc3dlciBmcm9tJywgZnJvbVBlZXJJZCwgbXNnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdFcnJvciBoYW5kbGluZyBXZWJSVEMgc2lnbmFsIGZyb20nLCBmcm9tUGVlcklkLCBtc2cpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvdXRlIHNlcnZlci1yZWxheWVkIFdlYlJUQyBzaWduYWxpbmcgcGF5bG9hZHMuXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIGEgcGF5bG9hZCBpcyBhY2NlcHRlZCBmb3IgbG9jYWwgcHJvY2Vzc2luZy5cbiAgICogQHBhcmFtIHtPYmplY3R9IHJlc3VsdFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIF9oYW5kbGVXZWJSVENTaWduYWxSZXN1bHQgKHJlc3VsdCkge1xuICAgIGlmICghcmVzdWx0IHx8IHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHJlc3VsdC50eXBlICE9PSAnV2ViUlRDU2lnbmFsJykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghcmVzdWx0LnNpZ25hbCB8fCAhcmVzdWx0LmZyb21QZWVySWQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIEh1YiByZWxheXMgc2lnbmFsaW5nIHRvIGFsbCBicm93c2VyIGNsaWVudHMuIE9ubHkgdGhlIGludGVuZGVkIHJlY2lwaWVudFxuICAgIC8vIHNob3VsZCBwcm9jZXNzIHRoZSBwYXlsb2FkLlxuICAgIGlmIChyZXN1bHQudG9QZWVySWQgJiYgdGhpcy5wZWVySWQgJiYgcmVzdWx0LnRvUGVlcklkICE9PSB0aGlzLnBlZXJJZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlSW5jb21pbmdXZWJSVENTaWduYWwocmVzdWx0LmZyb21QZWVySWQsIHJlc3VsdC5zaWduYWwpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZGlzcGxheSBuYW1lIGZvciBhIHBlZXIgKG5pY2tuYW1lIGlmIHNldCwgZWxzZSBhY3RvcklkKS5cbiAgICogVXNlZCBpbiBjaGF0IHRvIHNob3cgdXNlci1mcmllbmRseSBuYW1lcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFjdG9ySWQgLSBQZWVyIGlkIG9yIGFkZHJlc3MgZnJvbSBjaGF0LmFjdG9yLmlkXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IE5pY2tuYW1lIGlmIHNldCwgb3RoZXJ3aXNlIGFjdG9ySWRcbiAgICovXG4gIGdldFBlZXJEaXNwbGF5TmFtZSAoYWN0b3JJZCkge1xuICAgIGlmICghYWN0b3JJZCB8fCB0eXBlb2YgYWN0b3JJZCAhPT0gJ3N0cmluZycpIHJldHVybiBhY3RvcklkIHx8ICd1bmtub3duJztcbiAgICAvLyBNZXNoLWFkdmVydGlzZWQgYWxpYXMgKFAyUF9QRUVSX0FMSUFTKSBwcmVmZXJyZWQgb3ZlciBub2RlLWxvY2FsIG5pY2tuYW1lLlxuICAgIGlmICh0aGlzLl9wZWVyQWxpYXNCeUlkICYmIHRoaXMuX3BlZXJBbGlhc0J5SWRbYWN0b3JJZF0pIHtcbiAgICAgIGNvbnN0IG1lc2hBbGlhcyA9IFN0cmluZyh0aGlzLl9wZWVyQWxpYXNCeUlkW2FjdG9ySWRdKS50cmltKCk7XG4gICAgICBpZiAobWVzaEFsaWFzKSByZXR1cm4gbWVzaEFsaWFzO1xuICAgIH1cbiAgICBjb25zdCBucyA9IHRoaXMuc3RhdGU/Lm5ldHdvcmtTdGF0dXMgfHwgdGhpcy5zdGF0ZT8ubGFzdE5ldHdvcmtTdGF0dXM7XG4gICAgY29uc3QgcGVlcnMgPSBBcnJheS5pc0FycmF5KG5zPy5wZWVycykgPyBucy5wZWVycyA6IFtdO1xuICAgIGNvbnN0IHBlZXIgPSBwZWVycy5maW5kKChwKSA9PiBwICYmIChwLmlkID09PSBhY3RvcklkIHx8IHAuYWRkcmVzcyA9PT0gYWN0b3JJZCkpO1xuICAgIGNvbnN0IG1lc2hGcm9tUGVlciA9IHBlZXIgJiYgKHBlZXIuYWxpYXMgfHwgcGVlci5uaWNrbmFtZSkgJiYgU3RyaW5nKHBlZXIuYWxpYXMgfHwgcGVlci5uaWNrbmFtZSkudHJpbSgpO1xuICAgIGlmIChtZXNoRnJvbVBlZXIpIHJldHVybiBtZXNoRnJvbVBlZXI7XG4gICAgY29uc3Qgbmlja25hbWUgPSBwZWVyICYmIHBlZXIubmlja25hbWUgJiYgU3RyaW5nKHBlZXIubmlja25hbWUpLnRyaW0oKTtcbiAgICBpZiAobmlja25hbWUpIHJldHVybiBuaWNrbmFtZTtcbiAgICBjb25zdCB4RnJvbUZhYnJpYyA9IHBlZXIgJiYgZXh0cmFjdFBlZXJYcHViKHBlZXIpO1xuICAgIGlmICh4RnJvbUZhYnJpYykgcmV0dXJuIHNob3J0ZW5QdWJsaWNJZCh4RnJvbUZhYnJpYywgMTIsIDEwKTtcbiAgICBpZiAoaXNMaWtlbHlCaXAzMkV4dGVuZGVkS2V5KGFjdG9ySWQpKSByZXR1cm4gc2hvcnRlblB1YmxpY0lkKGFjdG9ySWQsIDEyLCAxMCk7XG4gICAgY29uc3Qgd3J0YyA9IEFycmF5LmlzQXJyYXkobnM/LndlYnJ0Y1BlZXJzKSA/IG5zLndlYnJ0Y1BlZXJzIDogW107XG4gICAgY29uc3QgdyA9IHdydGMuZmluZCgocCkgPT4ge1xuICAgICAgaWYgKCFwIHx8IHR5cGVvZiBwICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHAuaWQgPT09IGFjdG9ySWQpIHJldHVybiB0cnVlO1xuICAgICAgY29uc3QgbSA9IHAubWV0YWRhdGEgJiYgdHlwZW9mIHAubWV0YWRhdGEgPT09ICdvYmplY3QnID8gcC5tZXRhZGF0YSA6IHt9O1xuICAgICAgcmV0dXJuICEhKG0uZmFicmljUGVlcklkICYmIFN0cmluZyhtLmZhYnJpY1BlZXJJZCkgPT09IGFjdG9ySWQpO1xuICAgIH0pO1xuICAgIGNvbnN0IHd4ID0gdyAmJiB3Lm1ldGFkYXRhICYmIHR5cGVvZiB3Lm1ldGFkYXRhID09PSAnb2JqZWN0JyAmJiB3Lm1ldGFkYXRhLnhwdWJcbiAgICAgID8gU3RyaW5nKHcubWV0YWRhdGEueHB1YikudHJpbSgpXG4gICAgICA6ICcnO1xuICAgIGlmICh3eCAmJiBpc0xpa2VseUJpcDMyRXh0ZW5kZWRLZXkod3gpKSByZXR1cm4gc2hvcnRlblB1YmxpY0lkKHd4LCAxMiwgMTApO1xuICAgIHJldHVybiBhY3RvcklkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgaHViIG5vZGUncyBwdWJrZXkgZm9yIGRpc3BsYXkgKGUuZy4gaW4gZm9vdGVyKS5cbiAgICogUmVhZHMgZnJvbSBuZXR3b3JrU3RhdHVzLm5ldHdvcmsgb3IgdG9wLWxldmVsIHN0YXR1cyBmaWVsZHMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHB1YmtleSwgaWQsIG9yIGFkZHJlc3MgZnJvbSBuZXR3b3JrIHN0YXR1cywgb3IgZW1wdHkgc3RyaW5nXG4gICAqL1xuICBnZXROb2RlUHVia2V5ICgpIHtcbiAgICBjb25zdCBucyA9IHRoaXMuc3RhdGU/Lm5ldHdvcmtTdGF0dXMgfHwgdGhpcy5zdGF0ZT8ubGFzdE5ldHdvcmtTdGF0dXM7XG4gICAgaWYgKCFucyB8fCB0eXBlb2YgbnMgIT09ICdvYmplY3QnKSByZXR1cm4gJyc7XG4gICAgY29uc3QgbmV0d29yayA9IG5zLm5ldHdvcms7XG4gICAgaWYgKG5ldHdvcmsgJiYgdHlwZW9mIG5ldHdvcmsgPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBQcmVmZXIgZXh0ZW5kZWQgcHVibGljIGtleSBhcyB0aGUgcHJpbWFyeSBub2RlIGlkZW50aWZpZXIuXG4gICAgICBjb25zdCB2ID0gbmV0d29yay54cHViIHx8IG5ldHdvcmsucHVia2V5IHx8IG5ldHdvcmsuaWQgfHwgbmV0d29yay5hZGRyZXNzO1xuICAgICAgaWYgKHYpIHJldHVybiBTdHJpbmcodik7XG4gICAgfVxuICAgIC8vIEZhbGwgYmFjayB0byB0b3AtbGV2ZWwgZmllbGRzIGNvbW1vbmx5IGV4cG9zZWQgYnkgR2V0TmV0d29ya1N0YXR1cyxcbiAgICAvLyBpbmNsdWRpbmcgeHB1YiBmb3IgdGhlIG5vZGUncyBsb25nLWxpdmVkIGlkZW50aXR5LlxuICAgIHJldHVybiBucy54cHViIHx8IG5zLnB1YmtleSB8fCBucy5pZCB8fCBucy5hZGRyZXNzIHx8ICcnO1xuICB9XG5cbiAgLy8gR2xvYmFsIHN0YXRlIG1hbmFnZW1lbnQgbWV0aG9kc1xuICBnZXRHbG9iYWxTdGF0ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2xvYmFsU3RhdGU7XG4gIH1cblxuICB1cGRhdGVHbG9iYWxTdGF0ZSAocGF0Y2hNZXNzYWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBuZXh0ID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLl9mYWJyaWNTdG9yZSAmJiB0eXBlb2YgdGhpcy5fZmFicmljU3RvcmUuUEFUQ0ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbmV4dCA9IHRoaXMuX2ZhYnJpY1N0b3JlLlBBVENIKHBhdGNoTWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBqc29uUGF0Y2ggPSBbcGF0Y2hNZXNzYWdlXTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXBwbHlQYXRjaCh0aGlzLmdsb2JhbFN0YXRlLCBqc29uUGF0Y2gsIHRydWUsIGZhbHNlKTtcbiAgICAgICAgbmV4dCA9IHJlc3VsdCAmJiByZXN1bHQubmV3RG9jdW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgIHRoaXMuZ2xvYmFsU3RhdGUgPSBuZXh0O1xuXG4gICAgICAgIC8vIFBlcnNpc3QgbWVzc2FnZXMgd2hlbiBwYXRjaCB0b3VjaGVzIC9tZXNzYWdlc1xuICAgICAgICBjb25zdCBwYXRoID0gcGF0Y2hNZXNzYWdlICYmIHBhdGNoTWVzc2FnZS5wYXRoO1xuICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnICYmIChwYXRoID09PSAnL21lc3NhZ2VzJyB8fCBwYXRoLnN0YXJ0c1dpdGgoJy9tZXNzYWdlcy8nKSkpIHtcbiAgICAgICAgICB0aGlzLl9wZXJzaXN0TWVzc2FnZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnICYmIChwYXRoID09PSAnL2RvY3VtZW50cycgfHwgcGF0aC5zdGFydHNXaXRoKCcvZG9jdW1lbnRzLycpKSkge1xuICAgICAgICAgIHRoaXMuX3BlcnNpc3REb2N1bWVudHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVtaXQgYSBjdXN0b20gZXZlbnQgdG8gbm90aWZ5IGNvbXBvbmVudHMgb2Ygc3RhdGUgY2hhbmdlc1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBvcGVyYXRpb246IHBhdGNoTWVzc2FnZSxcbiAgICAgICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cbiAgICAgICAgLy8gS2VlcCBgbmV0d29ya1N0YXR1c2AgaW4gc3luYyB3aGVuIHRoZSBodWIgcHVzaGVzIHdhbGxldC1zYWZlIEJpdGNvaW4gZmllbGRzIChgL2JpdGNvaW5gKS5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJyAmJiBwYXRoID09PSAnL2JpdGNvaW4nICYmIHBhdGNoTWVzc2FnZS52YWx1ZSAmJiB0eXBlb2YgcGF0Y2hNZXNzYWdlLnZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoKHByZXYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlID0gKG5zKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghbnMgfHwgdHlwZW9mIG5zICE9PSAnb2JqZWN0JykgcmV0dXJuIG5zO1xuICAgICAgICAgICAgICBjb25zdCBwcmV2QnRjID0gbnMuYml0Y29pbiAmJiB0eXBlb2YgbnMuYml0Y29pbiA9PT0gJ29iamVjdCcgPyBucy5iaXRjb2luIDoge307XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLm5zLCBiaXRjb2luOiB7IC4uLnByZXZCdGMsIC4uLnBhdGNoTWVzc2FnZS52YWx1ZSB9IH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgbmV0d29ya1N0YXR1czogbWVyZ2UocHJldi5uZXR3b3JrU3RhdHVzKSxcbiAgICAgICAgICAgICAgbGFzdE5ldHdvcmtTdGF0dXM6IG1lcmdlKHByZXYubGFzdE5ldHdvcmtTdGF0dXMpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdGYWlsZWQgdG8gYXBwbHkgSlNPTi1QYXRjaC4nKTtcbiAgICAgIH1cblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdFcnJvciB1cGRhdGluZyBnbG9iYWwgc3RhdGU6Jywgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgX2hhc0xvY2FsU3RvcmFnZSAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFjY2Vzc2luZyB3aW5kb3cubG9jYWxTdG9yYWdlIGNhbiB0aHJvdyB1bmRlciBvcGFxdWUgb3JpZ2lucyAoU1NSL2J1aWxkIGNvbnRleHRzKS5cbiAgICAgIHJldHVybiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgISF3aW5kb3cubG9jYWxTdG9yYWdlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgX3JlYWRKU09ORnJvbVN0b3JhZ2UgKGtleSwgZmFsbGJhY2sgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLl9oYXNMb2NhbFN0b3JhZ2UoKSkgcmV0dXJuIGZhbGxiYWNrO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgIGlmICghcmF3KSByZXR1cm4gZmFsbGJhY2s7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCBgQ291bGQgbm90IHJlYWQgJHtrZXl9IGZyb20gc3RvcmFnZTpgLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cbiAgfVxuXG4gIF93cml0ZUpTT05Ub1N0b3JhZ2UgKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoIXRoaXMuX2hhc0xvY2FsU3RvcmFnZSgpKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tCUklER0VdJywgYENvdWxkIG5vdCBwZXJzaXN0ICR7a2V5fTpgLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIF9yZW1vdmVTdG9yYWdlS2V5IChrZXkpIHtcbiAgICBpZiAoIXRoaXMuX2hhc0xvY2FsU3RvcmFnZSgpKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdbQlJJREdFXScsIGBDb3VsZCBub3QgcmVtb3ZlICR7a2V5fSBmcm9tIHN0b3JhZ2U6YCwgc2FmZUlkZW50aXR5RXJyKGUpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBfcGVyc2lzdEdsb2JhbFN0YXRlICgpIHtcbiAgICBpZiAoIXRoaXMuX2ZhYnJpY1N0b3JlIHx8IHR5cGVvZiB0aGlzLl9mYWJyaWNTdG9yZS5QVVQgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJldiA9IHRoaXMuX2ZhYnJpY1N0b3JlLkdFVCgnLycpO1xuICAgICAgY29uc3QgYmFzZSA9XG4gICAgICAgIHByZXYgJiYgdHlwZW9mIHByZXYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHByZXYpXG4gICAgICAgICAgPyBwcmV2XG4gICAgICAgICAgOiB7fTtcbiAgICAgIHRoaXMuX2ZhYnJpY1N0b3JlLlBVVCgnLycsIHsgLi4uYmFzZSwgLi4udGhpcy5nbG9iYWxTdGF0ZSB9LCB7IHBlcnNpc3Q6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuXG4gIF9wZXJzaXN0RG9jdW1lbnRzICgpIHtcbiAgICBjb25zdCBkb2NzID0gdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMgfHwge307XG4gICAgdGhpcy5fd3JpdGVKU09OVG9TdG9yYWdlKCdmYWJyaWM6ZG9jdW1lbnRzJywgZG9jcyk7XG4gICAgaWYgKHRoaXMuX2ZhYnJpY1N0b3JlICYmIHR5cGVvZiB0aGlzLl9mYWJyaWNTdG9yZS5QVVQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2ZhYnJpY1N0b3JlLlBVVCgnL2RvY3VtZW50cycsIGRvY3MsIHsgcGVyc2lzdDogdHJ1ZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGNoYXQgY29udGVudCBhcyBhIERpc3RyaWJ1dGUgUHJvcG9zYWwuIFJldHVybnMgcHJvcG9zYWwgb2JqZWN0IG9yIG51bGwuXG4gICAqIFByb3Bvc2FscyBhcmUgc2VudCBhcyBQMlBfQ0hBVF9NRVNTQUdFIHdpdGggSlNPTiBjb250ZW50OiB7IHR5cGU6ICdEaXN0cmlidXRlUHJvcG9zYWwnLCBkb2N1bWVudElkLCBhbW91bnRTYXRzLCBjb25maWcsIC4uLiB9XG4gICAqL1xuICBfcGFyc2VEaXN0cmlidXRlUHJvcG9zYWwgKGNvbnRlbnQsIGNoYXRFbnZlbG9wZSkge1xuICAgIGlmICghY29udGVudCB8fCB0eXBlb2YgY29udGVudCAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgaWYgKCFwYXJzZWQgfHwgcGFyc2VkLnR5cGUgIT09ICdEaXN0cmlidXRlUHJvcG9zYWwnKSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IGRvY3VtZW50SWQgPSBwYXJzZWQuZG9jdW1lbnRJZCB8fCBwYXJzZWQuZG9jdW1lbnQ/LmlkIHx8IHBhcnNlZC5kb2N1bWVudD8uc2hhMjU2O1xuICAgICAgY29uc3QgYW1vdW50U2F0cyA9IE51bWJlcihwYXJzZWQuYW1vdW50U2F0cyB8fCAwKTtcbiAgICAgIGlmICghZG9jdW1lbnRJZCB8fCAhTnVtYmVyLmlzRmluaXRlKGFtb3VudFNhdHMpIHx8IGFtb3VudFNhdHMgPD0gMCkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBzZW5kZXJBZGRyZXNzID0gKGNoYXRFbnZlbG9wZSAmJiBjaGF0RW52ZWxvcGUuYWN0b3IgJiYgY2hhdEVudmVsb3BlLmFjdG9yLmlkKSB8fCBudWxsO1xuICAgICAgY29uc3QgY3JlYXRlZCA9IChjaGF0RW52ZWxvcGUgJiYgY2hhdEVudmVsb3BlLm9iamVjdCAmJiBjaGF0RW52ZWxvcGUub2JqZWN0LmNyZWF0ZWQpIHx8IChjaGF0RW52ZWxvcGUgJiYgY2hhdEVudmVsb3BlLmNyZWF0ZWQpIHx8IERhdGUubm93KCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogYHByb3Bvc2FsOiR7Y3JlYXRlZH06JHtzZW5kZXJBZGRyZXNzIHx8ICd1bmtub3duJ31gLFxuICAgICAgICBkb2N1bWVudElkLFxuICAgICAgICBhbW91bnRTYXRzLFxuICAgICAgICBjb25maWc6IHBhcnNlZC5jb25maWcgfHwge30sXG4gICAgICAgIGRvY3VtZW50OiBwYXJzZWQuZG9jdW1lbnQgfHwgbnVsbCxcbiAgICAgICAgZG9jdW1lbnROYW1lOiBwYXJzZWQuZG9jdW1lbnROYW1lIHx8IChwYXJzZWQuZG9jdW1lbnQgJiYgcGFyc2VkLmRvY3VtZW50Lm5hbWUpIHx8IGRvY3VtZW50SWQsXG4gICAgICAgIHNlbmRlckFkZHJlc3MsXG4gICAgICAgIHJlY2VpdmVkQXQ6IGNyZWF0ZWQsXG4gICAgICAgIHN0YXR1czogJ3BlbmRpbmcnXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9zdG9yZURpc3RyaWJ1dGVQcm9wb3NhbCAocHJvcG9zYWwpIHtcbiAgICBpZiAoIXByb3Bvc2FsIHx8ICFwcm9wb3NhbC5pZCkgcmV0dXJuO1xuICAgIHRoaXMuZ2xvYmFsU3RhdGUuZGlzdHJpYnV0ZVByb3Bvc2FscyA9IHRoaXMuZ2xvYmFsU3RhdGUuZGlzdHJpYnV0ZVByb3Bvc2FscyB8fCB7fTtcbiAgICB0aGlzLmdsb2JhbFN0YXRlLmRpc3RyaWJ1dGVQcm9wb3NhbHNbcHJvcG9zYWwuaWRdID0gcHJvcG9zYWw7XG4gICAgdGhpcy5fd3JpdGVKU09OVG9TdG9yYWdlKCdmYWJyaWM6ZGlzdHJpYnV0ZVByb3Bvc2FscycsIHRoaXMuZ2xvYmFsU3RhdGUuZGlzdHJpYnV0ZVByb3Bvc2Fscyk7XG4gICAgaWYgKHRoaXMuX2ZhYnJpY1N0b3JlICYmIHR5cGVvZiB0aGlzLl9mYWJyaWNTdG9yZS5QVVQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuX2ZhYnJpY1N0b3JlLlBVVCgnL2Rpc3RyaWJ1dGVQcm9wb3NhbHMnLCB0aGlzLmdsb2JhbFN0YXRlLmRpc3RyaWJ1dGVQcm9wb3NhbHMsIHsgcGVyc2lzdDogdHJ1ZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZGlzdHJpYnV0ZVByb3Bvc2FsUmVjZWl2ZWQnLCB7IGRldGFpbDogeyBwcm9wb3NhbCB9IH0pKTtcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIG9wZXJhdGlvbjogeyBvcDogJ2FkZCcsIHBhdGg6IGAvZGlzdHJpYnV0ZVByb3Bvc2Fscy8ke3Byb3Bvc2FsLmlkfWAsIHZhbHVlOiBwcm9wb3NhbCB9LFxuICAgICAgICBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZVxuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBjaGF0IGNvbnRlbnQgYXMgSFRMQ19LRVlfUkVWRUFMIChBRVMgZGVjcnlwdGlvbiBrZXkgPSBIVExDIHByZWltYWdlKS5cbiAgICogQHJldHVybnMge3sgc2V0dGxlbWVudElkPzogc3RyaW5nLCBkb2N1bWVudElkOiBzdHJpbmcsIHByZWltYWdlSGV4OiBzdHJpbmcsIHBheW1lbnRIYXNoSGV4Pzogc3RyaW5nIH18bnVsbH1cbiAgICovXG4gIF9wYXJzZUh0bGNLZXlSZXZlYWwgKGNvbnRlbnQpIHtcbiAgICBpZiAoIWNvbnRlbnQgfHwgdHlwZW9mIGNvbnRlbnQgIT09ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB0cmltbWVkID0gY29udGVudC50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkLnN0YXJ0c1dpdGgoJ3snKSkgcmV0dXJuIG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodHJpbW1lZCk7XG4gICAgICBpZiAoIXBhcnNlZCB8fCBwYXJzZWQudHlwZSAhPT0gJ0hUTENfS0VZX1JFVkVBTCcpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgZG9jdW1lbnRJZCA9IHBhcnNlZC5kb2N1bWVudElkID8gU3RyaW5nKHBhcnNlZC5kb2N1bWVudElkKSA6ICcnO1xuICAgICAgY29uc3QgcHJlaW1hZ2VIZXggPSBTdHJpbmcocGFyc2VkLnByZWltYWdlSGV4IHx8ICcnKS50cmltKCkucmVwbGFjZSgvXjB4L2ksICcnKTtcbiAgICAgIGlmICghZG9jdW1lbnRJZCB8fCAhL15bMC05YS1mQS1GXXs2NH0kLy50ZXN0KHByZWltYWdlSGV4KSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0bGVtZW50SWQ6IHBhcnNlZC5zZXR0bGVtZW50SWQgPyBTdHJpbmcocGFyc2VkLnNldHRsZW1lbnRJZCkgOiB1bmRlZmluZWQsXG4gICAgICAgIGRvY3VtZW50SWQsXG4gICAgICAgIHByZWltYWdlSGV4OiBwcmVpbWFnZUhleC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBwYXltZW50SGFzaEhleDogcGFyc2VkLnBheW1lbnRIYXNoSGV4ID8gU3RyaW5nKHBhcnNlZC5wYXltZW50SGFzaEhleCkudG9Mb3dlckNhc2UoKSA6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgSFRMQ19LRVlfUkVWRUFMOiBhdXRvLXVubG9jayBwZW5kaW5nIGNpcGhlcnRleHQgd2hlbiBkb2N1bWVudCBpZCBtYXRjaGVzLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSB3aGVuIGNvbnN1bWVkIChldmVuIGlmIHVubG9jayBkZWZlcnJlZC9mYWlsZWQpXG4gICAqL1xuICBfaGFuZGxlSHRsY0tleVJldmVhbCAoY29udGVudCkge1xuICAgIGNvbnN0IHJldmVhbCA9IHRoaXMuX3BhcnNlSHRsY0tleVJldmVhbChjb250ZW50KTtcbiAgICBpZiAoIXJldmVhbCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRvY3MgPSB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyB8fCB7fTtcbiAgICBsZXQgdGFyZ2V0SWQgPSByZXZlYWwuZG9jdW1lbnRJZDtcbiAgICBpZiAoIWRvY3NbdGFyZ2V0SWRdIHx8ICFkb2NzW3RhcmdldElkXS5odGxjUGVuZGluZ0RlY3J5cHQpIHtcbiAgICAgIGNvbnN0IGFsdCA9IE9iamVjdC5rZXlzKGRvY3MpLmZpbmQoKGspID0+IHtcbiAgICAgICAgY29uc3QgZCA9IGRvY3Nba107XG4gICAgICAgIHJldHVybiBkICYmIGQuaHRsY1BlbmRpbmdEZWNyeXB0ICYmIChcbiAgICAgICAgICBTdHJpbmcoZC5pZCkgPT09IHJldmVhbC5kb2N1bWVudElkIHx8XG4gICAgICAgICAgU3RyaW5nKGQuc2hhMjU2IHx8ICcnKSA9PT0gcmV2ZWFsLmRvY3VtZW50SWQgfHxcbiAgICAgICAgICBTdHJpbmcoaykgPT09IHJldmVhbC5kb2N1bWVudElkXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGlmIChhbHQpIHRhcmdldElkID0gYWx0O1xuICAgIH1cbiAgICBjb25zdCBydW4gPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnVubG9ja0h0bGNFbmNyeXB0ZWREb2N1bWVudCh0YXJnZXRJZCwgcmV2ZWFsLnByZWltYWdlSGV4KTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdodGxjS2V5UmV2ZWFsQXBwbGllZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBkb2N1bWVudElkOiB0YXJnZXRJZCxcbiAgICAgICAgICAgICAgc2V0dGxlbWVudElkOiByZXZlYWwuc2V0dGxlbWVudElkLFxuICAgICAgICAgICAgICBvazogISEocmVzdWx0ICYmIHJlc3VsdC5vayksXG4gICAgICAgICAgICAgIGVycm9yOiByZXN1bHQgJiYgcmVzdWx0LmVycm9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnaHRsY0tleVJldmVhbEFwcGxpZWQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgZG9jdW1lbnRJZDogdGFyZ2V0SWQsXG4gICAgICAgICAgICAgIHNldHRsZW1lbnRJZDogcmV2ZWFsLnNldHRsZW1lbnRJZCxcbiAgICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgICBlcnJvcjogZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIENpcGhlcnRleHQgbWF5IGFycml2ZSBzbGlnaHRseSBhZnRlciB0aGUgcmV2ZWFsOyByZXRyeSBicmllZmx5LlxuICAgIGNvbnN0IHRyeVVubG9jayA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzICYmIHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW3RhcmdldElkXTtcbiAgICAgIGlmIChkb2MgJiYgZG9jLmh0bGNQZW5kaW5nRGVjcnlwdCkge1xuICAgICAgICBhd2FpdCBydW4oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFnYWluID0gdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMgJiYgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHNbdGFyZ2V0SWRdO1xuICAgICAgICBpZiAoYWdhaW4gJiYgYWdhaW4uaHRsY1BlbmRpbmdEZWNyeXB0KSBhd2FpdCBydW4oKTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2h0bGNLZXlSZXZlYWxBcHBsaWVkJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGRvY3VtZW50SWQ6IHRhcmdldElkLFxuICAgICAgICAgICAgICBzZXR0bGVtZW50SWQ6IHJldmVhbC5zZXR0bGVtZW50SWQsXG4gICAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXJyb3I6ICdObyBwZW5kaW5nIEhUTEMgY2lwaGVydGV4dCBmb3IgdGhpcyBkb2N1bWVudCB5ZXQuJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSwgODAwKTtcbiAgICB9O1xuICAgIHRyeVVubG9jaygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cnVjdHVyZWQgZmVkZXJhdGlvbiBpbnZpdGUgLyByZXNwb25zZSBpbiBQMlAgY2hhdCBKU09OICh2MSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50XG4gICAqIEBwYXJhbSB7b2JqZWN0fG51bGx9IGNoYXRFbnZlbG9wZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSB3aGVuIGhhbmRsZWQgKGRvIG5vdCBhbHNvIHRyZWF0IGFzIHBsYWluIGNoYXQpXG4gICAqL1xuICBfdHJ5RGlzcGF0Y2hGZWRlcmF0aW9uQ29udHJhY3RJbnZpdGVGcm9tQ2hhdCAoY29udGVudCwgY2hhdEVudmVsb3BlKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaW52ID0gcGFyc2VGZWRlcmF0aW9uQ29udHJhY3RJbnZpdGUoY29udGVudCk7XG4gICAgaWYgKGludikge1xuICAgICAgY29uc3QgdG9QZWVySWQgPSBjaGF0RW52ZWxvcGUgJiYgY2hhdEVudmVsb3BlLmFjdG9yICYmIGNoYXRFbnZlbG9wZS5hY3Rvci5pZFxuICAgICAgICA/IFN0cmluZyhjaGF0RW52ZWxvcGUuYWN0b3IuaWQpXG4gICAgICAgIDogJyc7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2ZhYnJpYzpmZWRlcmF0aW9uQ29udHJhY3RJbnZpdGUnLCB7XG4gICAgICAgIGRldGFpbDogT2JqZWN0LmFzc2lnbih7fSwgaW52LCB7IHRvUGVlcklkIH0pXG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgcmVzID0gcGFyc2VGZWRlcmF0aW9uQ29udHJhY3RJbnZpdGVSZXNwb25zZShjb250ZW50KTtcbiAgICBpZiAocmVzKSB7XG4gICAgICBjb25zdCBmcm9tUGVlcklkID0gY2hhdEVudmVsb3BlICYmIGNoYXRFbnZlbG9wZS5hY3RvciAmJiBjaGF0RW52ZWxvcGUuYWN0b3IuaWRcbiAgICAgICAgPyBTdHJpbmcoY2hhdEVudmVsb3BlLmFjdG9yLmlkKVxuICAgICAgICA6ICcnO1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdmYWJyaWM6ZmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlUmVzcG9uc2UnLCB7XG4gICAgICAgIGRldGFpbDogT2JqZWN0LmFzc2lnbih7fSwgcmVzLCB7IGZyb21QZWVySWQgfSlcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFib3JhdGlvbiBpbnZpdGUgaW4gUDJQIGNoYXQgKHByZWZpeCArIEpTT04gcGF5bG9hZCksIGVtaXR0ZWQgYnkgaHViQ29sbGFib3JhdGlvbiByZWxheS5cbiAgICogRGlzcGF0Y2hlcyBhIG1vZGFsIGV2ZW50IGFuZCBiZWxsIG5vdGlmaWNhdGlvbiB3aXRoIGFjY2VwdC9yZWplY3QgVVJMcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnRcbiAgICogQHBhcmFtIHtvYmplY3R8bnVsbH0gY2hhdEVudmVsb3BlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgX3RyeURpc3BhdGNoQ29sbGFib3JhdGlvbkludml0ZUZyb21DaGF0IChjb250ZW50LCBjaGF0RW52ZWxvcGUpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGNvbnRlbnQgIT09ICdzdHJpbmcnIHx8ICFjb250ZW50LnN0YXJ0c1dpdGgoQ09MTEFCX0lOVklURV9QUkVGSVgpKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKGNvbnRlbnQuc2xpY2UoQ09MTEFCX0lOVklURV9QUkVGSVgubGVuZ3RoKSk7XG4gICAgICBpZiAoIXBheWxvYWQgfHwgIXBheWxvYWQuaW52aXRhdGlvbklkIHx8ICFwYXlsb2FkLmFjY2VwdFVybCB8fCAhcGF5bG9hZC5kZWNsaW5lVXJsKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBmcm9tUGVlcklkID0gY2hhdEVudmVsb3BlICYmIGNoYXRFbnZlbG9wZS5hY3RvciAmJiBjaGF0RW52ZWxvcGUuYWN0b3IuaWRcbiAgICAgICAgPyBTdHJpbmcoY2hhdEVudmVsb3BlLmFjdG9yLmlkKVxuICAgICAgICA6ICcnO1xuICAgICAgY29uc3QgcGVlcklkZW50aXR5ID0gcGF5bG9hZCAmJiBwYXlsb2FkLnJlY2lwaWVudFBlZXJJZGVudGl0eVxuICAgICAgICA/IFN0cmluZyhwYXlsb2FkLnJlY2lwaWVudFBlZXJJZGVudGl0eSlcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IGRldGFpbCA9IE9iamVjdC5hc3NpZ24oe30sIHBheWxvYWQsIHsgZnJvbVBlZXJJZCB9KTtcbiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZmFicmljOmNvbGxhYm9yYXRpb25JbnZpdGF0aW9uJywgeyBkZXRhaWwgfSkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdG9hc3QuaW5mbygnQ29sbGFib3JhdGlvbiBpbnZpdGUgcmVjZWl2ZWQnLCB7XG4gICAgICAgICAgaGVhZGVyOiBwZWVySWRlbnRpdHkgPyBgSW52aXRlIGZvciAke3BlZXJJZGVudGl0eX1gIDogJ0NvbGxhYm9yYXRpb24nXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgdHJ5IHtcbiAgICAgICAgcHVzaFVpTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICBpZDogYGNvbGxhYi1pbnZpdGUtJHtTdHJpbmcocGF5bG9hZC5pbnZpdGF0aW9uSWQpfWAsXG4gICAgICAgICAga2luZDogJ2NvbGxhYm9yYXRpb25faW52aXRlJyxcbiAgICAgICAgICB0aXRsZTogJ0NvbGxhYm9yYXRpb24gaW52aXRlJyxcbiAgICAgICAgICBzdWJ0aXRsZTogZnJvbVBlZXJJZFxuICAgICAgICAgICAgPyBgRnJvbSBwZWVyICR7ZnJvbVBlZXJJZH1gXG4gICAgICAgICAgICA6IChwZWVySWRlbnRpdHkgPyBgSW52aXRlIGZvciAke3BlZXJJZGVudGl0eX1gIDogJ1JldmlldyBhbmQgcmVzcG9uZCcpLFxuICAgICAgICAgIGhyZWY6ICcvc2V0dGluZ3MvY29sbGFib3JhdGlvbicsXG4gICAgICAgICAgY29weVRleHQ6IGAke1N0cmluZyhwYXlsb2FkLmFjY2VwdFVybCl9XFxuJHtTdHJpbmcocGF5bG9hZC5kZWNsaW5lVXJsKX1gXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KCdAZmFicmljL2NvcmUvdHlwZXMva2V5Jyl8bnVsbH0gS2V5IHdpdGggcHJpdmF0ZSBmb3IgZG9jdW1lbnQgZW5jcnlwdC9kZWNyeXB0ICovXG4gIF9nZXREb2N1bWVudEtleSAoKSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5zZXR0aW5ncy5zaWduaW5nS2V5IHx8IHRoaXMua2V5O1xuICAgIGlmICgha2V5IHx8IHR5cGVvZiBrZXkuZW5jcnlwdCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Yga2V5LmRlY3J5cHQgIT09ICdmdW5jdGlvbicpIHJldHVybiBudWxsO1xuICAgIGlmIChrZXkucHJpdmF0ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHdlIGhhdmUgYSBrZXkgZm9yIGRvY3VtZW50IGVuY3J5cHRpb24gKHJlcXVpcmVkIGZvciBhZGRpbmcgZmlsZXMpLiAqL1xuICBoYXNEb2N1bWVudEVuY3J5cHRpb25LZXkgKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2dldERvY3VtZW50S2V5KCk7XG4gIH1cblxuICBfZW5jcnlwdENvbnRlbnQgKGNvbnRlbnRCYXNlNjQpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLl9nZXREb2N1bWVudEtleSgpO1xuICAgIGlmICgha2V5KSByZXR1cm4gbnVsbDtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGtleS5lbmNyeXB0KGNvbnRlbnRCYXNlNjQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnRG9jdW1lbnQgZW5jcnlwdCBmYWlsZWQ6Jywgc2FmZUlkZW50aXR5RXJyKGUpKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9kZWNyeXB0Q29udGVudCAoY29udGVudEVuY3J5cHRlZCkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuX2dldERvY3VtZW50S2V5KCk7XG4gICAgaWYgKCFrZXkgfHwgIWNvbnRlbnRFbmNyeXB0ZWQpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ga2V5LmRlY3J5cHQoY29udGVudEVuY3J5cHRlZCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdbQlJJREdFXScsICdEb2N1bWVudCBkZWNyeXB0IGZhaWxlZDonLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGN1cnJlbnQgaWRlbnRpdHkga2V5IGZvciB0aGlzIEJyaWRnZSBpbnN0YW5jZS5cbiAgICogUHJlZmVycyB0aGUgc2lnbmluZyBrZXkgKGF1dGgpIGFuZCBmYWxscyBiYWNrIHRvIHRoZSBsZWdhY3kgYHRoaXMua2V5YCB3aGVuIHByZXNlbnQuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ0BmYWJyaWMvY29yZS90eXBlcy9rZXknKXxudWxsfVxuICAgKi9cbiAgX2dldElkZW50aXR5S2V5ICgpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLnNldHRpbmdzLnNpZ25pbmdLZXkgfHwgdGhpcy5rZXk7XG4gICAgaWYgKCFrZXkgfHwgIWtleS5pZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBzdGFibGUgaWRlbnRpdHkgaWQgZm9yIHRoaXMgQnJpZGdlIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9XG4gICAqL1xuICBfZ2V0SWRlbnRpdHlJZCAoKSB7XG4gICAgLy8gUHJlZmVyIGFuIGV4dGVuZGVkIHB1YmxpYyBrZXkgKHhwdWIpIGFzIHRoZSBzdGFibGUgcHVibGljIGlkZW50aWZpZXIsXG4gICAgLy8gZmFsbGluZyBiYWNrIHRvIHNob3J0ZXIgaWRzIG9ubHkgd2hlbiBuZWNlc3NhcnkuXG4gICAgY29uc3QgYXV0aCA9IHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5hdXRoO1xuICAgIGlmIChhdXRoKSB7XG4gICAgICBpZiAoYXV0aC54cHViKSByZXR1cm4gYXV0aC54cHViO1xuICAgICAgaWYgKGF1dGguaWQpIHJldHVybiBhdXRoLmlkO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRoaXMuX2dldElkZW50aXR5S2V5KCk7XG4gICAgaWYgKCFrZXkpIHJldHVybiBudWxsO1xuICAgIGlmIChrZXkueHB1YikgcmV0dXJuIGtleS54cHViO1xuICAgIHJldHVybiBrZXkuaWQgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnVlIHdoZW4gYSBwcml2YXRlIHNpZ25pbmcgaWRlbnRpdHkgaXMgYXZhaWxhYmxlIGluLW1lbW9yeS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBfaGFzVW5sb2NrZWRJZGVudGl0eSAoKSB7XG4gICAgY29uc3QgYXV0aCA9IHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5hdXRoO1xuICAgIGlmIChhdXRoICYmIGF1dGgueHBydikgcmV0dXJuIHRydWU7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5fZ2V0SWRlbnRpdHlLZXkoKTtcbiAgICBpZiAoa2V5ICYmIGtleS54cHJ2KSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBjaGF0LWNhcGFibGUgaWRlbnRpdHkgbWF0ZXJpYWwgaXMgY3VycmVudGx5IGF2YWlsYWJsZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBoYXNVbmxvY2tlZElkZW50aXR5ICgpIHtcbiAgICByZXR1cm4gdGhpcy5faGFzVW5sb2NrZWRJZGVudGl0eSgpO1xuICB9XG5cbiAgX25vdGlmeUlkZW50aXR5VW5sb2NrUmVxdWlyZWQgKG1lc3NhZ2UpIHtcbiAgICBjb25zdCBhdXRoID0gdGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmF1dGg7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS50cmltKClcbiAgICAgID8gbWVzc2FnZVxuICAgICAgOiBmYWJyaWNJZGVudGl0eUNoYXREaXNhYmxlZFJlYXNvblBsYWluKGF1dGgpO1xuICAgIHRyeSB7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2ZhYnJpYzpjaGF0V2FybmluZycsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgcmVhc29uOiAnaWRlbnRpdHktbG9ja2VkJyxcbiAgICAgICAgICBtZXNzYWdlOiByZXNvbHZlZFxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSBjYXRjaCAoZSkge31cblxuICAgIGlmICh0aGlzLnByb3BzICYmIHR5cGVvZiB0aGlzLnByb3BzLm9uUmVxdWlyZVVubG9jayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIGlmICh0aGlzLl9sYXN0SWRlbnRpdHlVbmxvY2tVaU5vdGlmeUF0ICYmIG5vdyAtIHRoaXMuX2xhc3RJZGVudGl0eVVubG9ja1VpTm90aWZ5QXQgPCAyNTAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xhc3RJZGVudGl0eVVubG9ja1VpTm90aWZ5QXQgPSBub3c7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnByb3BzLm9uUmVxdWlyZVVubG9jaygpO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIGRvY3VtZW50IHJvdyB3aGVuIHRoZSByb3V0ZSBpZCBtYXkgZGlmZmVyIGZyb20gdGhlIG1hcCBrZXkgKG9wYXF1ZSBpZCB2cyBjb250ZW50IGhhc2gpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9naWNhbElkXG4gICAqIEByZXR1cm5zIHt7IGtleTogc3RyaW5nLCBkb2M6IG9iamVjdCB9fG51bGx9XG4gICAqL1xuICBfcmVzb2x2ZURvY3VtZW50Um93IChsb2dpY2FsSWQpIHtcbiAgICBpZiAoIWxvZ2ljYWxJZCB8fCAhdGhpcy5nbG9iYWxTdGF0ZSB8fCAhdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGlkID0gU3RyaW5nKGxvZ2ljYWxJZCkudHJpbSgpO1xuICAgIGlmICghaWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG1hcCA9IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzO1xuICAgIGlmIChtYXBbaWRdKSByZXR1cm4geyBrZXk6IGlkLCBkb2M6IG1hcFtpZF0gfTtcbiAgICBjb25zdCBsb3dlciA9IGlkLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG1hcFtsb3dlcl0pIHJldHVybiB7IGtleTogbG93ZXIsIGRvYzogbWFwW2xvd2VyXSB9O1xuICAgIGZvciAoY29uc3QgW2ssIGRdIG9mIE9iamVjdC5lbnRyaWVzKG1hcCkpIHtcbiAgICAgIGlmICghZCB8fCB0eXBlb2YgZCAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgZGlkID0gZC5pZCAhPSBudWxsID8gU3RyaW5nKGQuaWQpIDogJyc7XG4gICAgICBjb25zdCBzaGEgPSBkLnNoYTI1NiAhPSBudWxsID8gU3RyaW5nKGQuc2hhMjU2KSA6IChkLnNoYSAhPSBudWxsID8gU3RyaW5nKGQuc2hhKSA6ICcnKTtcbiAgICAgIGlmIChkaWQgPT09IGlkIHx8IHNoYSA9PT0gaWQgfHwgZGlkLnRvTG93ZXJDYXNlKCkgPT09IGxvd2VyIHx8IHNoYS50b0xvd2VyQ2FzZSgpID09PSBsb3dlcikge1xuICAgICAgICByZXR1cm4geyBrZXk6IGssIGRvYzogZCB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gZG9jdW1lbnQgY29udGVudCAoYmFzZTY0KSBmb3IgZGlzcGxheSBvciB1cGxvYWQuIERlY3J5cHRzIGlmIHN0b3JlZCBlbmNyeXB0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIERvY3VtZW50IGlkXG4gICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gY29udGVudEJhc2U2NCBvciBudWxsXG4gICAqL1xuICBnZXREZWNyeXB0ZWREb2N1bWVudENvbnRlbnQgKGlkKSB7XG4gICAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5fcmVzb2x2ZURvY3VtZW50Um93KGlkKTtcbiAgICBpZiAoIXJvdyB8fCAhcm93LmRvYykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZG9jID0gcm93LmRvYztcbiAgICAvLyBGb3IgZW5jcnlwdGVkIGRvY3VtZW50cywgb25seSBldmVyIHJldHVybiBwbGFpbnRleHQgd2hlbiB3ZSBoYXZlIGEgbGl2ZSBkb2N1bWVudCBrZXkuXG4gICAgaWYgKGRvYy5jb250ZW50RW5jcnlwdGVkKSB7XG4gICAgICBjb25zdCBkZWNyeXB0ZWQgPSB0aGlzLl9kZWNyeXB0Q29udGVudChkb2MuY29udGVudEVuY3J5cHRlZCk7XG4gICAgICByZXR1cm4gZGVjcnlwdGVkIHx8IG51bGw7XG4gICAgfVxuICAgIC8vIEZvciB1bmVuY3J5cHRlZCBkb2N1bWVudHMsIHN0b3JlZCBhcyBwbGFpbiBjb250ZW50QmFzZTY0LlxuICAgIGlmIChkb2MuY29udGVudEJhc2U2NCkgcmV0dXJuIGRvYy5jb250ZW50QmFzZTY0O1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqIE5vcm1hbGl6ZSBpbmNvbWluZyBkb2MgZm9yIHN0b3JhZ2U6IGVuY3J5cHQgY29udGVudCBpZiB3ZSBoYXZlIGEga2V5LCBzdG9yZSBvbmx5IGVuY3J5cHRlZCBvciBwbGFpbi5cbiAgICogSWYgd2UgYWxyZWFkeSBoYXZlIGEgbG9jYWwgYWxpYXMgZm9yIHRoaXMgZG9jdW1lbnQgKGJ5IHNoYTI1NiksIHByZWZlciB0aGF0IGlkIG92ZXIgYSBiYWNrZW5kIHNoYSBpZC5cbiAgICovXG4gIF9zdG9yZURvY3VtZW50IChpZCwgZG9jKSB7XG4gICAgaWYgKCFkb2MgfHwgIWlkKSByZXR1cm47XG4gICAgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMgPSB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyB8fCB7fTtcblxuICAgIGxldCB0YXJnZXRJZCA9IGlkO1xuICAgIGNvbnN0IHNoYSA9IGRvYy5zaGEyNTYgfHwgZG9jLnNoYSB8fCBudWxsO1xuXG4gICAgLy8gSWYgaHViIHNlbmRzIHVzIGEgc2hhLWJhc2VkIGlkIGJ1dCB3ZSBwcmV2aW91c2x5IGNyZWF0ZWQgYSBsb2NhbCBBY3RvciBpZCB3aXRoIHRoZSBzYW1lIHNoYSxcbiAgICAvLyByZS11c2UgdGhlIGxvY2FsIEFjdG9yIGlkIHNvIFVSTHMgcmVtYWluIG9wYXF1ZS5cbiAgICBpZiAoc2hhICYmIGlkID09PSBzaGEpIHtcbiAgICAgIGZvciAoY29uc3QgW2xvY2FsSWQsIGV4aXN0aW5nRG9jXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cykpIHtcbiAgICAgICAgaWYgKGV4aXN0aW5nRG9jICYmIChleGlzdGluZ0RvYy5zaGEyNTYgPT09IHNoYSB8fCBleGlzdGluZ0RvYy5zaGEgPT09IHNoYSkgJiYgbG9jYWxJZCAhPT0gaWQpIHtcbiAgICAgICAgICB0YXJnZXRJZCA9IGxvY2FsSWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW3RhcmdldElkXSB8fCB7fTtcbiAgICBjb25zdCBtZXJnZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi5kb2MsIGlkOiB0YXJnZXRJZCB9O1xuICAgIGNvbnN0IGhhc0NvbnRlbnQgPSBtZXJnZWQuY29udGVudEJhc2U2NCAhPSBudWxsO1xuICAgIGNvbnN0IGVuY3J5cHRlZCA9IGhhc0NvbnRlbnQgPyB0aGlzLl9lbmNyeXB0Q29udGVudChtZXJnZWQuY29udGVudEJhc2U2NCkgOiBudWxsO1xuICAgIGNvbnN0IHRvU3RvcmUgPSB7IC4uLm1lcmdlZCB9O1xuICAgIGlmIChlbmNyeXB0ZWQgIT0gbnVsbCkge1xuICAgICAgdG9TdG9yZS5jb250ZW50RW5jcnlwdGVkID0gZW5jcnlwdGVkO1xuICAgICAgZGVsZXRlIHRvU3RvcmUuY29udGVudEJhc2U2NDtcbiAgICB9IGVsc2UgaWYgKCFoYXNDb250ZW50ICYmIG1lcmdlZC5jb250ZW50RW5jcnlwdGVkICE9IG51bGwpIHtcbiAgICAgIHRvU3RvcmUuY29udGVudEVuY3J5cHRlZCA9IG1lcmdlZC5jb250ZW50RW5jcnlwdGVkO1xuICAgICAgZGVsZXRlIHRvU3RvcmUuY29udGVudEJhc2U2NDtcbiAgICB9XG4gICAgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHNbdGFyZ2V0SWRdID0gdG9TdG9yZTtcblxuICAgIC8vIENsZWFuIHVwIGFueSBvbGQgc2hhLW9ubHkgZW50cnkgaWYgd2UgbW92ZWQgdG8gYSBsb2NhbCBhbGlhcyBpZC5cbiAgICBpZiAodGFyZ2V0SWQgIT09IGlkICYmIHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW2lkXSkge1xuICAgICAgZGVsZXRlIHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW2lkXTtcbiAgICB9XG4gIH1cblxuICBfcHJ1bmVQMnBGaWxlUmVjZWl2ZXJzICgpIHtcbiAgICBjb25zdCBUVEwgPSAxMCAqIDYwICogMTAwMDtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMuX3AycEZpbGVSZWNlaXZlcnMpIHtcbiAgICAgIGlmICghdiB8fCBub3cgLSAodi5zdGFydGVkQXQgfHwgMCkgPiBUVEwpIHRoaXMuX3AycEZpbGVSZWNlaXZlcnMuZGVsZXRlKGspO1xuICAgIH1cbiAgfVxuXG4gIF9yZXNvbHZlRG9jdW1lbnRUYXJnZXRJZCAocmF3SWQsIG1ldGEpIHtcbiAgICBsZXQgdGFyZ2V0SWQgPSByYXdJZDtcbiAgICBjb25zdCBzaGEgPSBtZXRhICYmIChtZXRhLnNoYTI1NiB8fCBtZXRhLnNoYSk7XG4gICAgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMgPSB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyB8fCB7fTtcbiAgICBpZiAoc2hhICYmIHJhd0lkID09PSBzaGEpIHtcbiAgICAgIGZvciAoY29uc3QgW2xvY2FsSWQsIGV4aXN0aW5nRG9jXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cykpIHtcbiAgICAgICAgaWYgKGV4aXN0aW5nRG9jICYmIChleGlzdGluZ0RvYy5zaGEyNTYgPT09IHNoYSB8fCBleGlzdGluZ0RvYy5zaGEgPT09IHNoYSkgJiYgbG9jYWxJZCAhPT0gcmF3SWQpIHtcbiAgICAgICAgICB0YXJnZXRJZCA9IGxvY2FsSWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldElkO1xuICB9XG5cbiAgX2RlY29kZUJhc2U2NFRvVWludDggKGI2NCkge1xuICAgIGNvbnN0IGJpbiA9IGF0b2IoYjY0KTtcbiAgICBjb25zdCB1ID0gbmV3IFVpbnQ4QXJyYXkoYmluLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW4ubGVuZ3RoOyBpKyspIHVbaV0gPSBiaW4uY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gdTtcbiAgfVxuXG4gIF91aW50OFRvQmFzZTY0ICh1OCkge1xuICAgIGxldCBiaW4gPSAnJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHU4Lmxlbmd0aDsgaSsrKSBiaW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1OFtpXSk7XG4gICAgcmV0dXJuIGJ0b2EoYmluKTtcbiAgfVxuXG4gIF9ieXRlc1RvSGV4IChidWYpIHtcbiAgICBjb25zdCB1OCA9IGJ1ZiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgPyBidWYgOiBuZXcgVWludDhBcnJheShidWYpO1xuICAgIGxldCBzID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1OC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaCA9IHU4W2ldLnRvU3RyaW5nKDE2KTtcbiAgICAgIHMgKz0gaC5sZW5ndGggPT09IDEgPyBgMCR7aH1gIDogaDtcbiAgICB9XG4gICAgcmV0dXJuIHM7XG4gIH1cblxuICBfaGV4VG9VaW50OCAoaGV4KSB7XG4gICAgY29uc3QgcyA9IFN0cmluZyhoZXgpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghL15bMC05YS1mXXs2NH0kLy50ZXN0KHMpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB1ID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzI7IGkrKykgdVtpXSA9IHBhcnNlSW50KHMuc2xpY2UoaSAqIDIsIGkgKiAyICsgMiksIDE2KTtcbiAgICByZXR1cm4gdTtcbiAgfVxuXG4gIF9oYW5kbGVQMnBGaWxlQ2h1bmsgKGRvYywgcGFydCkge1xuICAgIGNvbnN0IHRyYW5zZmVySWQgPSBTdHJpbmcocGFydC50cmFuc2ZlcklkIHx8ICcnKTtcbiAgICBjb25zdCBpbmRleCA9IE51bWJlcihwYXJ0LmluZGV4KTtcbiAgICBjb25zdCB0b3RhbCA9IE51bWJlcihwYXJ0LnRvdGFsKTtcbiAgICBpZiAoIXRyYW5zZmVySWQgfHwgIU51bWJlci5pc0Zpbml0ZShpbmRleCkgfHwgIU51bWJlci5pc0Zpbml0ZSh0b3RhbCkgfHwgdG90YWwgPCAxIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+PSB0b3RhbCkge1xuICAgICAgY29uc29sZS53YXJuKCdbQlJJREdFXSBJbnZhbGlkIFAyUCBmaWxlIHBhcnQgbWV0YWRhdGEnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fcHJ1bmVQMnBGaWxlUmVjZWl2ZXJzKCk7XG4gICAgbGV0IHN0YXRlID0gdGhpcy5fcDJwRmlsZVJlY2VpdmVycy5nZXQodHJhbnNmZXJJZCk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgc3RhdGUgPSB7XG4gICAgICAgIHRyYW5zZmVySWQsXG4gICAgICAgIHRvdGFsLFxuICAgICAgICBjaHVua3M6IG5ldyBBcnJheSh0b3RhbCksXG4gICAgICAgIHJlY2VpdmVkOiAwLFxuICAgICAgICBzdGFydGVkQXQ6IERhdGUubm93KCksXG4gICAgICAgIG1ldGE6IG51bGwsXG4gICAgICAgIGh0bGNGaWxlVjE6IG51bGxcbiAgICAgIH07XG4gICAgICB0aGlzLl9wMnBGaWxlUmVjZWl2ZXJzLnNldCh0cmFuc2ZlcklkLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS50b3RhbCAhPT0gdG90YWwpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0gUDJQIGZpbGUgcGFydCB0b3RhbCBtaXNtYXRjaCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuY2h1bmtzW2luZGV4XSkgcmV0dXJuO1xuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgc3RhdGUubWV0YSA9IHtcbiAgICAgICAgaWQ6IGRvYy5pZCxcbiAgICAgICAgbmFtZTogZG9jLm5hbWUsXG4gICAgICAgIG1pbWU6IGRvYy5taW1lLFxuICAgICAgICBzaXplOiBkb2Muc2l6ZSxcbiAgICAgICAgc2hhMjU2OiBkb2Muc2hhMjU2LFxuICAgICAgICBjcmVhdGVkOiBkb2MuY3JlYXRlZCxcbiAgICAgICAgdGFyZ2V0OiBkb2MudGFyZ2V0LFxuICAgICAgICBodGxjU2V0dGxlbWVudDogZG9jLmh0bGNTZXR0bGVtZW50LFxuICAgICAgICBkZWxpdmVyeUZhYnJpY0lkOiBkb2MuZGVsaXZlcnlGYWJyaWNJZCxcbiAgICAgICAgZmlsZVJlbGF5VHRsOiBkb2MuZmlsZVJlbGF5VHRsXG4gICAgICB9O1xuICAgICAgaWYgKGRvYy5odGxjRmlsZVYxICYmIE51bWJlcihkb2MuaHRsY0ZpbGVWMS52KSA9PT0gMSAmJiBkb2MuaHRsY0ZpbGVWMS5pdiAmJiBkb2MuaHRsY0ZpbGVWMS5wYXltZW50SGFzaEhleCkge1xuICAgICAgICBzdGF0ZS5odGxjRmlsZVYxID0gZG9jLmh0bGNGaWxlVjE7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRlLmNodW5rc1tpbmRleF0gPSBkb2MuY29udGVudEJhc2U2NDtcbiAgICBzdGF0ZS5yZWNlaXZlZCsrO1xuICAgIGlmIChzdGF0ZS5yZWNlaXZlZCA8IHN0YXRlLnRvdGFsKSByZXR1cm47XG5cbiAgICB0aGlzLl9wMnBGaWxlUmVjZWl2ZXJzLmRlbGV0ZSh0cmFuc2ZlcklkKTtcbiAgICBjb25zdCBwaWVjZXMgPSBzdGF0ZS5jaHVua3MubWFwKChiNjQpID0+IHRoaXMuX2RlY29kZUJhc2U2NFRvVWludDgoYjY0KSk7XG4gICAgY29uc3QgbGVuID0gcGllY2VzLnJlZHVjZSgoYSwgdSkgPT4gYSArIHUubGVuZ3RoLCAwKTtcbiAgICBjb25zdCBtZXJnZWQgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIGxldCBvID0gMDtcbiAgICBmb3IgKGNvbnN0IHUgb2YgcGllY2VzKSB7XG4gICAgICBtZXJnZWQuc2V0KHUsIG8pO1xuICAgICAgbyArPSB1Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCByYXdJZCA9IHN0YXRlLm1ldGEuaWQ7XG4gICAgY29uc3QgdGFyZ2V0SWQgPSB0aGlzLl9yZXNvbHZlRG9jdW1lbnRUYXJnZXRJZChyYXdJZCwgc3RhdGUubWV0YSk7XG5cbiAgICBpZiAoc3RhdGUuaHRsY0ZpbGVWMSkge1xuICAgICAgY29uc3QgaCA9IHN0YXRlLmh0bGNGaWxlVjE7XG4gICAgICB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyA9IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzIHx8IHt9O1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1t0YXJnZXRJZF0gfHwge307XG4gICAgICB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1t0YXJnZXRJZF0gPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICAuLi5zdGF0ZS5tZXRhLFxuICAgICAgICBpZDogdGFyZ2V0SWQsXG4gICAgICAgIGh0bGNQZW5kaW5nRGVjcnlwdDogdHJ1ZSxcbiAgICAgICAgaHRsY1BheW1lbnRIYXNoSGV4OiBTdHJpbmcoaC5wYXltZW50SGFzaEhleCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgaHRsY0l2QmFzZTY0OiBoLml2LFxuICAgICAgICBodGxjQ2lwaGVydGV4dEJhc2U2NDogdGhpcy5fdWludDhUb0Jhc2U2NChtZXJnZWQpLFxuICAgICAgICByZWNlaXZlZEZyb21QZWVyOiB0cnVlXG4gICAgICB9O1xuICAgICAgZGVsZXRlIHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW3RhcmdldElkXS5jb250ZW50QmFzZTY0O1xuICAgICAgaWYgKHRhcmdldElkICE9PSByYXdJZCAmJiB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1tyYXdJZF0pIGRlbGV0ZSB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1tyYXdJZF07XG4gICAgICB0aGlzLl9wZXJzaXN0RG9jdW1lbnRzKCk7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBvcGVyYXRpb246IHsgb3A6ICdhZGQnLCBwYXRoOiBgL2RvY3VtZW50cy8ke3RhcmdldElkfWAsIHZhbHVlOiB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1t0YXJnZXRJZF0gfSxcbiAgICAgICAgICBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZVxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudEJhc2U2NCA9IHRoaXMuX3VpbnQ4VG9CYXNlNjQobWVyZ2VkKTtcbiAgICB0aGlzLl9zdG9yZURvY3VtZW50KHRhcmdldElkLCB7IC4uLnN0YXRlLm1ldGEsIGlkOiByYXdJZCwgY29udGVudEJhc2U2NCwgcmVjZWl2ZWRGcm9tUGVlcjogdHJ1ZSB9KTtcbiAgICB0aGlzLl9wZXJzaXN0RG9jdW1lbnRzKCk7XG4gICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdnbG9iYWxTdGF0ZVVwZGF0ZScsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBvcGVyYXRpb246IHsgb3A6ICdhZGQnLCBwYXRoOiBgL2RvY3VtZW50cy8ke3RhcmdldElkfWAsIHZhbHVlOiB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1t0YXJnZXRJZF0gfSxcbiAgICAgICAgZ2xvYmFsU3RhdGU6IHRoaXMuZ2xvYmFsU3RhdGVcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXIgaW52ZW50b3J5IEhUTEMgcGhhc2UgMiwgY2lwaGVydGV4dCBpcyBzdG9yZWQgbG9jYWxseSB1bnRpbCB0aGUgYnV5ZXIgc3VwcGxpZXMgdGhlXG4gICAqIHNhbWUgMzItYnl0ZSBwcmVpbWFnZSB1c2VkIGZvciB0aGUgb24tY2hhaW4gaGFzaGxvY2sgKGNvbnRlbnQga2V5IEsgZm9yIHNlYWxlZCBkb2NzKS5cbiAgICogUHJlZmVyIGF1dG9tYXRpYyB1bmxvY2sgdmlhIEhUTENfS0VZX1JFVkVBTCBhZnRlciBwYXltZW50IHZlcmlmaWNhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRvY3VtZW50SWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWltYWdlSGV4IC0gNjQgaGV4IGNoYXJzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgb2s6IGJvb2xlYW4sIGVycm9yPzogc3RyaW5nIH0+fVxuICAgKi9cbiAgYXN5bmMgdW5sb2NrSHRsY0VuY3J5cHRlZERvY3VtZW50IChkb2N1bWVudElkLCBwcmVpbWFnZUhleCkge1xuICAgIGlmICh0eXBlb2YgY3J5cHRvID09PSAndW5kZWZpbmVkJyB8fCAhY3J5cHRvLnN1YnRsZSkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ1dlYiBDcnlwdG8gQVBJIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBjb250ZXh0LicgfTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSBkb2N1bWVudElkO1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzICYmIHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW2lkXTtcbiAgICBpZiAoIWRvYyB8fCAhZG9jLmh0bGNQZW5kaW5nRGVjcnlwdCkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ0RvY3VtZW50IGlzIG5vdCB3YWl0aW5nIGZvciBhbiBIVExDIHByZWltYWdlLicgfTtcbiAgICB9XG4gICAgY29uc3QgcHJlaW1hZ2VVOCA9IHRoaXMuX2hleFRvVWludDgocHJlaW1hZ2VIZXgpO1xuICAgIGlmICghcHJlaW1hZ2VVOCkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ1ByZWltYWdlIG11c3QgYmUgNjQgaGV4IGNoYXJhY3RlcnMgKDMyIGJ5dGVzKS4nIH07XG4gICAgfVxuICAgIGNvbnN0IGhhc2hCdWYgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIHByZWltYWdlVTgpO1xuICAgIGNvbnN0IGhhc2hIZXggPSB0aGlzLl9ieXRlc1RvSGV4KG5ldyBVaW50OEFycmF5KGhhc2hCdWYpKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGV4cGVjdGVkID0gU3RyaW5nKGRvYy5odGxjUGF5bWVudEhhc2hIZXggfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFleHBlY3RlZCB8fCBoYXNoSGV4ICE9PSBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ1ByZWltYWdlIGRvZXMgbm90IG1hdGNoIHRoZSBIVExDIHBheW1lbnQgaGFzaCBmb3IgdGhpcyB0cmFuc2Zlci4nIH07XG4gICAgfVxuICAgIGxldCBpdjtcbiAgICBsZXQgY3Q7XG4gICAgdHJ5IHtcbiAgICAgIGl2ID0gdGhpcy5fZGVjb2RlQmFzZTY0VG9VaW50OChkb2MuaHRsY0l2QmFzZTY0KTtcbiAgICAgIGN0ID0gdGhpcy5fZGVjb2RlQmFzZTY0VG9VaW50OChkb2MuaHRsY0NpcGhlcnRleHRCYXNlNjQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdTdG9yZWQgY2lwaGVydGV4dCBvciBJViBpcyBpbnZhbGlkLicgfTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoJ3JhdycsIHByZWltYWdlVTgsIHsgbmFtZTogJ0FFUy1HQ00nIH0sIGZhbHNlLCBbJ2RlY3J5cHQnXSk7XG4gICAgbGV0IHBsYWluO1xuICAgIHRyeSB7XG4gICAgICBwbGFpbiA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7IG5hbWU6ICdBRVMtR0NNJywgaXYsIHRhZ0xlbmd0aDogMTI4IH0sIGtleSwgY3QpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdEZWNyeXB0aW9uIGZhaWxlZCAod3Jvbmcga2V5IG9yIGNvcnJ1cHRlZCBjaXBoZXJ0ZXh0KS4nIH07XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnRCYXNlNjQgPSB0aGlzLl91aW50OFRvQmFzZTY0KG5ldyBVaW50OEFycmF5KHBsYWluKSk7XG4gICAgY29uc3QgY2xlYW5lZCA9IHsgLi4uZG9jIH07XG4gICAgZGVsZXRlIGNsZWFuZWQuaHRsY1BlbmRpbmdEZWNyeXB0O1xuICAgIGRlbGV0ZSBjbGVhbmVkLmh0bGNQYXltZW50SGFzaEhleDtcbiAgICBkZWxldGUgY2xlYW5lZC5odGxjSXZCYXNlNjQ7XG4gICAgZGVsZXRlIGNsZWFuZWQuaHRsY0NpcGhlcnRleHRCYXNlNjQ7XG4gICAgdGhpcy5fc3RvcmVEb2N1bWVudChpZCwgeyAuLi5jbGVhbmVkLCBjb250ZW50QmFzZTY0LCByZWNlaXZlZEZyb21QZWVyOiB0cnVlIH0pO1xuICAgIHRoaXMuX3BlcnNpc3REb2N1bWVudHMoKTtcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIG9wZXJhdGlvbjogeyBvcDogJ2FkZCcsIHBhdGg6IGAvZG9jdW1lbnRzLyR7aWR9YCwgdmFsdWU6IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW2lkXSB9LFxuICAgICAgICBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZVxuICAgICAgfVxuICAgIH0pKTtcbiAgICByZXR1cm4geyBvazogdHJ1ZSB9O1xuICB9XG5cbiAgX3BlcnNpc3RNZXNzYWdlcyAoKSB7XG4gICAgY29uc3QgbWVzc2FnZXMgPSB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzIHx8IHt9O1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhtZXNzYWdlcykuZmlsdGVyKChrKSA9PiB7XG4gICAgICBjb25zdCBtID0gbWVzc2FnZXNba107XG4gICAgICByZXR1cm4gIShtICYmIGlzRGVsZWdhdGlvblNpZ25hdHVyZVJlcXVlc3RBY3Rpdml0eShtKSk7XG4gICAgfSk7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykgZmlsdGVyZWRba10gPSBtZXNzYWdlc1trXTtcbiAgICAvLyBDYXAgYXQgNTAwIG1lc3NhZ2VzIHRvIGF2b2lkIGxvY2FsU3RvcmFnZSBibG9hdFxuICAgIGNvbnN0IHRvU3RvcmUgPSBrZXlzLmxlbmd0aCA+IDUwMFxuICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoa2V5cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGEgPSAoZmlsdGVyZWRbYV0gJiYgZmlsdGVyZWRbYV0ub2JqZWN0ICYmIGZpbHRlcmVkW2FdLm9iamVjdC5jcmVhdGVkKSB8fCAwO1xuICAgICAgICAgIGNvbnN0IHRiID0gKGZpbHRlcmVkW2JdICYmIGZpbHRlcmVkW2JdLm9iamVjdCAmJiBmaWx0ZXJlZFtiXS5vYmplY3QuY3JlYXRlZCkgfHwgMDtcbiAgICAgICAgICByZXR1cm4gdGEgLSB0YjtcbiAgICAgICAgfSkuc2xpY2UoLTUwMCkubWFwKChrKSA9PiBbaywgZmlsdGVyZWRba11dKSlcbiAgICAgIDogZmlsdGVyZWQ7XG4gICAgaWYgKCF0aGlzLl9tZXNzYWdlQ29sbGVjdGlvbikgdGhpcy5fbWVzc2FnZUNvbGxlY3Rpb24gPSBuZXcgQnJpZGdlTWVzc2FnZUNvbGxlY3Rpb24oKTtcbiAgICB0aGlzLl9tZXNzYWdlQ29sbGVjdGlvbi5sb2FkTWFwKHRvU3RvcmUpO1xuICAgIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXMgPSB0aGlzLl9tZXNzYWdlQ29sbGVjdGlvbi5leHBvcnRNYXAoKTtcbiAgICB0aGlzLl93cml0ZUpTT05Ub1N0b3JhZ2UoJ2ZhYnJpYzptZXNzYWdlcycsIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXMpO1xuICAgIGlmICh0aGlzLl9mYWJyaWNTdG9yZSAmJiB0eXBlb2YgdGhpcy5fZmFicmljU3RvcmUuUFVUID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9mYWJyaWNTdG9yZS5QVVQoJy9tZXNzYWdlcycsIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXMsIHsgcGVyc2lzdDogdHJ1ZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICB9XG5cbiAgX29uQ2xpZW50QmFsYW5jZVVwZGF0ZSAoZXYpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZCA9IGV2ICYmIGV2LmRldGFpbDtcbiAgICAgIGlmICghZCkgcmV0dXJuO1xuICAgICAgY29uc3Qgd2FsbGV0SWQgPSBTdHJpbmcoZC53YWxsZXRJZCB8fCAnZGVmYXVsdCcpO1xuICAgICAgY29uc3QgYmFsYW5jZVNhdHMgPSBNYXRoLnJvdW5kKE51bWJlcihkLmJhbGFuY2VTYXRzKSk7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShiYWxhbmNlU2F0cykpIHJldHVybjtcbiAgICAgIGNvbnN0IGNvbmZpcm1lZFJhdyA9IGQuY29uZmlybWVkU2F0cztcbiAgICAgIGNvbnN0IHVuY29uZmlybWVkUmF3ID0gZC51bmNvbmZpcm1lZFNhdHM7XG4gICAgICBjb25zdCBoYXNTcGxpdCA9IGNvbmZpcm1lZFJhdyAhPSBudWxsICYmIHVuY29uZmlybWVkUmF3ICE9IG51bGw7XG4gICAgICBjb25zdCBjb25mID0gaGFzU3BsaXRcbiAgICAgICAgPyBNYXRoLnJvdW5kKE51bWJlcihjb25maXJtZWRSYXcpKVxuICAgICAgICA6IGJhbGFuY2VTYXRzO1xuICAgICAgY29uc3QgdW5jb25mID0gaGFzU3BsaXQgPyBNYXRoLnJvdW5kKE51bWJlcih1bmNvbmZpcm1lZFJhdykpIDogMDtcbiAgICAgIGNvbnN0IGNvbmZTYWZlID0gTnVtYmVyLmlzRmluaXRlKGNvbmYpID8gY29uZiA6IGJhbGFuY2VTYXRzO1xuICAgICAgY29uc3QgdW5jb25mU2FmZSA9IE51bWJlci5pc0Zpbml0ZSh1bmNvbmYpID8gdW5jb25mIDogMDtcbiAgICAgIGNvbnN0IGhpbnQgPSBkLmhpbnRUeGlkID8gU3RyaW5nKGQuaGludFR4aWQpLnRyaW0oKSA6ICcnO1xuXG4gICAgICBpZiAoIXRoaXMuX3dhbGxldEJhbGFuY2VCYXNlbGluZS5oYXMod2FsbGV0SWQpKSB7XG4gICAgICAgIHRoaXMuX3dhbGxldEJhbGFuY2VCYXNlbGluZS5hZGQod2FsbGV0SWQpO1xuICAgICAgICB0aGlzLl9sYXN0V2FsbGV0QmFsYW5jZVRvdGFsW3dhbGxldElkXSA9IGJhbGFuY2VTYXRzO1xuICAgICAgICB0aGlzLl9sYXN0V2FsbGV0Q29uZmlybWVkU2F0c1t3YWxsZXRJZF0gPSBjb25mU2FmZTtcbiAgICAgICAgdGhpcy5fbGFzdFdhbGxldFVuY29uZmlybWVkU2F0c1t3YWxsZXRJZF0gPSB1bmNvbmZTYWZlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBwcmV2VG90YWwgPSB0aGlzLl9sYXN0V2FsbGV0QmFsYW5jZVRvdGFsW3dhbGxldElkXTtcbiAgICAgIGNvbnN0IHByZXZDID0gdGhpcy5fbGFzdFdhbGxldENvbmZpcm1lZFNhdHNbd2FsbGV0SWRdO1xuICAgICAgY29uc3QgcHJldlUgPSB0aGlzLl9sYXN0V2FsbGV0VW5jb25maXJtZWRTYXRzW3dhbGxldElkXTtcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHByZXZUb3RhbCkpIHtcbiAgICAgICAgdGhpcy5fbGFzdFdhbGxldEJhbGFuY2VUb3RhbFt3YWxsZXRJZF0gPSBiYWxhbmNlU2F0cztcbiAgICAgICAgdGhpcy5fbGFzdFdhbGxldENvbmZpcm1lZFNhdHNbd2FsbGV0SWRdID0gY29uZlNhZmU7XG4gICAgICAgIHRoaXMuX2xhc3RXYWxsZXRVbmNvbmZpcm1lZFNhdHNbd2FsbGV0SWRdID0gdW5jb25mU2FmZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgZFVuY29uZiA9IDA7XG4gICAgICBsZXQgZENvbmYgPSAwO1xuICAgICAgaWYgKGhhc1NwbGl0KSB7XG4gICAgICAgIGRVbmNvbmYgPSB1bmNvbmZTYWZlIC0gKE51bWJlci5pc0Zpbml0ZShwcmV2VSkgPyBwcmV2VSA6IDApO1xuICAgICAgICBkQ29uZiA9IGNvbmZTYWZlIC0gKE51bWJlci5pc0Zpbml0ZShwcmV2QykgPyBwcmV2QyA6IDApO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzU3BsaXQgJiYgZFVuY29uZiA+IDApIHtcbiAgICAgICAgdGhpcy5fYXBwZW5kUHJpdmF0ZVdhbGxldFJlY2VpdmVOb3RpY2Uoe1xuICAgICAgICAgIHBoYXNlOiAnbWVtcG9vbCcsXG4gICAgICAgICAgZGVsdGFTYXRzOiBkVW5jb25mLFxuICAgICAgICAgIGJhbGFuY2VTYXRzLFxuICAgICAgICAgIGNvbmZpcm1lZFNhdHM6IGNvbmZTYWZlLFxuICAgICAgICAgIHVuY29uZmlybWVkU2F0czogdW5jb25mU2FmZSxcbiAgICAgICAgICB3YWxsZXRJZCxcbiAgICAgICAgICB0eGlkOiBoaW50XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGhhc1NwbGl0ICYmIGRDb25mID4gMCkge1xuICAgICAgICB0aGlzLl9hcHBlbmRQcml2YXRlV2FsbGV0UmVjZWl2ZU5vdGljZSh7XG4gICAgICAgICAgcGhhc2U6ICdjb25maXJtZWQnLFxuICAgICAgICAgIGRlbHRhU2F0czogZENvbmYsXG4gICAgICAgICAgYmFsYW5jZVNhdHMsXG4gICAgICAgICAgY29uZmlybWVkU2F0czogY29uZlNhZmUsXG4gICAgICAgICAgdW5jb25maXJtZWRTYXRzOiB1bmNvbmZTYWZlLFxuICAgICAgICAgIHdhbGxldElkLFxuICAgICAgICAgIHR4aWQ6IGhpbnRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvdGFsSW5jcmVhc2VkID0gYmFsYW5jZVNhdHMgPiBwcmV2VG90YWw7XG4gICAgICBpZiAodG90YWxJbmNyZWFzZWQgJiYgKCFoYXNTcGxpdCB8fCAoZFVuY29uZiA8PSAwICYmIGRDb25mIDw9IDApKSkge1xuICAgICAgICB0aGlzLl9hcHBlbmRQcml2YXRlV2FsbGV0UmVjZWl2ZU5vdGljZSh7XG4gICAgICAgICAgcGhhc2U6ICdhZ2dyZWdhdGUnLFxuICAgICAgICAgIGRlbHRhU2F0czogYmFsYW5jZVNhdHMgLSBwcmV2VG90YWwsXG4gICAgICAgICAgYmFsYW5jZVNhdHMsXG4gICAgICAgICAgY29uZmlybWVkU2F0czogY29uZlNhZmUsXG4gICAgICAgICAgdW5jb25maXJtZWRTYXRzOiB1bmNvbmZTYWZlLFxuICAgICAgICAgIHdhbGxldElkLFxuICAgICAgICAgIHR4aWQ6IGhpbnRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xhc3RXYWxsZXRCYWxhbmNlVG90YWxbd2FsbGV0SWRdID0gYmFsYW5jZVNhdHM7XG4gICAgICB0aGlzLl9sYXN0V2FsbGV0Q29uZmlybWVkU2F0c1t3YWxsZXRJZF0gPSBjb25mU2FmZTtcbiAgICAgIHRoaXMuX2xhc3RXYWxsZXRVbmNvbmZpcm1lZFNhdHNbd2FsbGV0SWRdID0gdW5jb25mU2FmZTtcbiAgICB9IGNhdGNoIChlKSB7IC8qIGlnbm9yZSAqLyB9XG4gIH1cblxuICAvKipcbiAgICogTG9jYWwtb25seSBhY3Rpdml0eSArIHRvYXN0ICsgaW4tYXBwIG5vdGlmaWNhdGlvbiBsaXN0IG9uIEFjdGl2aXRpZXMgKGJlbGwsIHRvcCBiYXIpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcFxuICAgKiBAcGFyYW0geydtZW1wb29sJ3wnY29uZmlybWVkJ3wnYWdncmVnYXRlJ30gcC5waGFzZVxuICAgKi9cbiAgX2FwcGVuZFByaXZhdGVXYWxsZXRSZWNlaXZlTm90aWNlIChwKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFwKSByZXR1cm47XG4gICAgY29uc3Qge1xuICAgICAgcGhhc2UgPSAnYWdncmVnYXRlJyxcbiAgICAgIGRlbHRhU2F0cyxcbiAgICAgIGJhbGFuY2VTYXRzLFxuICAgICAgY29uZmlybWVkU2F0cyxcbiAgICAgIHVuY29uZmlybWVkU2F0cyxcbiAgICAgIHdhbGxldElkLFxuICAgICAgdHhpZFxuICAgIH0gPSBwO1xuICAgIGNvbnN0IGQgPSBNYXRoLnJvdW5kKE51bWJlcihkZWx0YVNhdHMpKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShkKSB8fCBkIDw9IDApIHJldHVybjtcblxuICAgIGNvbnN0IGlkID0gYGNsaWVudC13YWxsZXQtJHtwaGFzZX0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xuICAgIGNvbnN0IGNyZWF0ZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgdG90YWxMYWJlbCA9IGZvcm1hdFNhdHNEaXNwbGF5KGJhbGFuY2VTYXRzKTtcbiAgICBjb25zdCBjb25mVSA9IGAke2Zvcm1hdFNhdHNEaXNwbGF5KGNvbmZpcm1lZFNhdHMpfSBjb25mIMK3ICR7Zm9ybWF0U2F0c0Rpc3BsYXkodW5jb25maXJtZWRTYXRzKX0gdW5jb25mYDtcbiAgICBsZXQgY29udGVudDtcbiAgICBsZXQgdGl0bGU7XG4gICAgbGV0IHN1YnRpdGxlO1xuICAgIGxldCB0b2FzdEhlYWRlcjtcbiAgICBsZXQgdG9hc3RNc2c7XG4gICAgbGV0IGtpbmQ7XG4gICAgaWYgKHBoYXNlID09PSAnbWVtcG9vbCcpIHtcbiAgICAgIGNvbnRlbnQgPSBgVW5jb25maXJtZWQgKyR7Zm9ybWF0U2F0c0Rpc3BsYXkoZCl9IHNhdHMgdG8geW91ciB3YWxsZXQgKG1lbXBvb2wpLiAke2NvbmZVfS4gVG90YWwgfiR7dG90YWxMYWJlbH0uYDtcbiAgICAgIHRpdGxlID0gJ0luY29taW5nIChtZW1wb29sKSc7XG4gICAgICBzdWJ0aXRsZSA9IGArJHtmb3JtYXRTYXRzRGlzcGxheShkKX0gdW5jb25maXJtZWQgwrcgJHt0b3RhbExhYmVsfSB0b3RhbGA7XG4gICAgICB0b2FzdEhlYWRlciA9ICdXYWxsZXQnO1xuICAgICAgdG9hc3RNc2cgPSBgKyR7Zm9ybWF0U2F0c0Rpc3BsYXkoZCl9IHVuY29uZmlybWVkIChtZW1wb29sKWA7XG4gICAgICBraW5kID0gJ3dhbGxldF9yZWNlaXZlX21lbXBvb2wnO1xuICAgIH0gZWxzZSBpZiAocGhhc2UgPT09ICdjb25maXJtZWQnKSB7XG4gICAgICBjb250ZW50ID0gYENvbmZpcm1lZCArJHtmb3JtYXRTYXRzRGlzcGxheShkKX0gc2F0cy4gJHtjb25mVX0uIFRvdGFsICR7dG90YWxMYWJlbH0uYDtcbiAgICAgIHRpdGxlID0gJ0luY29taW5nIGNvbmZpcm1lZCc7XG4gICAgICBzdWJ0aXRsZSA9IGArJHtmb3JtYXRTYXRzRGlzcGxheShkKX0gY29uZmlybWVkIMK3ICR7Zm9ybWF0U2F0c0Rpc3BsYXkoY29uZmlybWVkU2F0cyl9IGNvbmZgO1xuICAgICAgdG9hc3RIZWFkZXIgPSAnV2FsbGV0JztcbiAgICAgIHRvYXN0TXNnID0gYCske2Zvcm1hdFNhdHNEaXNwbGF5KGQpfSBjb25maXJtZWQgb24tY2hhaW5gO1xuICAgICAga2luZCA9ICd3YWxsZXRfcmVjZWl2ZV9jb25maXJtZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gYFlvdXIgd2FsbGV0IGJhbGFuY2UgaW5jcmVhc2VkIGJ5ICske2Zvcm1hdFNhdHNEaXNwbGF5KGQpfSAoJHt0b3RhbExhYmVsfSB0b3RhbCkuYDtcbiAgICAgIHRpdGxlID0gJ0luY29taW5nIHBheW1lbnQnO1xuICAgICAgc3VidGl0bGUgPSBgKyR7Zm9ybWF0U2F0c0Rpc3BsYXkoZCl9IMK3ICR7dG90YWxMYWJlbH0gYmFsYW5jZWA7XG4gICAgICB0b2FzdEhlYWRlciA9ICdXYWxsZXQnO1xuICAgICAgdG9hc3RNc2cgPSBgKyR7Zm9ybWF0U2F0c0Rpc3BsYXkoZCl9IHJlY2VpdmVkYDtcbiAgICAgIGtpbmQgPSAnd2FsbGV0X3JlY2VpdmUnO1xuICAgIH1cblxuICAgIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXMgPSB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzIHx8IHt9O1xuICAgIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNbaWRdID0ge1xuICAgICAgdHlwZTogJ0NMSUVOVF9OT1RJQ0UnLFxuICAgICAgb2JqZWN0OiB7XG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIGNyZWF0ZWQsXG4gICAgICAgIHR4aWQ6IHR4aWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICBraW5kLFxuICAgICAgICBwaGFzZSxcbiAgICAgICAgbG9jYWxPbmx5OiB0cnVlXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLl9wZXJzaXN0TWVzc2FnZXMoKTtcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIG9wZXJhdGlvbjogeyBvcDogJ2FkZCcsIHBhdGg6IGAvbWVzc2FnZXMvJHtpZH1gLCB2YWx1ZTogdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlc1tpZF0gfSxcbiAgICAgICAgZ2xvYmFsU3RhdGU6IHRoaXMuZ2xvYmFsU3RhdGVcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgdHJ5IHtcbiAgICAgIHRvYXN0LnN1Y2Nlc3ModG9hc3RNc2csIHtcbiAgICAgICAgaGVhZGVyOiB0b2FzdEhlYWRlcixcbiAgICAgICAgZHVyYXRpb246IDU1MDBcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgdWYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgICAgIHB1c2hVaU5vdGlmaWNhdGlvbih7XG4gICAgICAgIGlkOiBgd2FsbGV0LSR7cGhhc2V9LSR7d2FsbGV0SWR9LSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICBraW5kLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgc3VidGl0bGUsXG4gICAgICAgIGhyZWY6IHVmLmJpdGNvaW5QYXltZW50cyA/ICcvcGF5bWVudHMnIDogdW5kZWZpbmVkLFxuICAgICAgICBjb3B5VGV4dDogdHhpZCB8fCB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZvaWNlIEwxIHZlcmlmeSBmbG93IChzZWUgSW52b2ljZS5qcykg4oCUIHByaXZhdGUgQ0xJRU5UX05PVElDRSArIHRvYXN0ICsgQWN0aXZpdGllcyBpbi1hcHAgbGlzdC5cbiAgICovXG4gIGFwcGx5TDFJbnZvaWNlUGF5bWVudEFjdGl2aXR5IChkZXRhaWwpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWRldGFpbCB8fCB0eXBlb2YgZGV0YWlsICE9PSAnb2JqZWN0JykgcmV0dXJuO1xuICAgIGNvbnN0IHR4aWQgPSBTdHJpbmcoZGV0YWlsLnR4aWQgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXR4aWQpIHJldHVybjtcbiAgICBjb25zdCBraW5kID0gZGV0YWlsLmtpbmQgPT09ICdjb25maXJtZWQnID8gJ2NvbmZpcm1lZCcgOiAndW5jb25maXJtZWQnO1xuICAgIGNvbnN0IGRlZHVwZUtleSA9IGAke2tpbmR9OiR7dHhpZH1gO1xuICAgIGlmICh0aGlzLl9sMUludm9pY2VBY3Rpdml0eUtleXMuaGFzKGRlZHVwZUtleSkpIHJldHVybjtcbiAgICB0aGlzLl9sMUludm9pY2VBY3Rpdml0eUtleXMuYWRkKGRlZHVwZUtleSk7XG4gICAgY29uc3QgbGFiZWwgPSBkZXRhaWwubGFiZWwgPyBTdHJpbmcoZGV0YWlsLmxhYmVsKSA6ICdJbnZvaWNlJztcbiAgICBjb25zdCBjcmVhdGVkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBraW5kID09PSAnY29uZmlybWVkJ1xuICAgICAgPyBgTDEgaW52b2ljZSBwYXltZW50IGNvbmZpcm1lZCR7ZGV0YWlsLmNvbmZpcm1hdGlvbnMgPyBgICgke2RldGFpbC5jb25maXJtYXRpb25zfSBjb25maXJtYXRpb25zKWAgOiAnJ306ICR7bGFiZWx9YFxuICAgICAgOiBgTDEgaW52b2ljZSBwYXltZW50IHNlZW4gKG1lbXBvb2wpOiAke2xhYmVsfWA7XG4gICAgY29uc3QgaWQgPSBgY2xpZW50LWwxLWludi0ke2tpbmR9LSR7dHhpZC5zbGljZSgwLCAxOCl9YDtcbiAgICB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzID0gdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyB8fCB7fTtcbiAgICB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzW2lkXSA9IHtcbiAgICAgIHR5cGU6ICdDTElFTlRfTk9USUNFJyxcbiAgICAgIG9iamVjdDoge1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBjcmVhdGVkLFxuICAgICAgICB0eGlkLFxuICAgICAgICBraW5kOiAnbDFfaW52b2ljZScsXG4gICAgICAgIGxvY2FsT25seTogdHJ1ZVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5fcGVyc2lzdE1lc3NhZ2VzKCk7XG4gICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdnbG9iYWxTdGF0ZVVwZGF0ZScsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBvcGVyYXRpb246IHsgb3A6ICdhZGQnLCBwYXRoOiBgL21lc3NhZ2VzLyR7aWR9YCwgdmFsdWU6IHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNbaWRdIH0sXG4gICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICB9XG4gICAgfSkpO1xuICAgIHRyeSB7XG4gICAgICB0b2FzdC5zdWNjZXNzKGtpbmQgPT09ICdjb25maXJtZWQnID8gJ0ludm9pY2UgcGFpZCBvbi1jaGFpbicgOiAnSW52b2ljZSBwYXltZW50IGRldGVjdGVkJywge1xuICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgaGVhZGVyOiBsYWJlbC5sZW5ndGggPiAzNiA/IGAke2xhYmVsLnNsaWNlKDAsIDM2KX3igKZgIDogbGFiZWxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgdWYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgICAgIHB1c2hVaU5vdGlmaWNhdGlvbih7XG4gICAgICAgIGlkOiBgbDEtaW52LSR7ZGVkdXBlS2V5fWAsXG4gICAgICAgIGtpbmQ6ICdsMV9pbnZvaWNlJyxcbiAgICAgICAgdGl0bGU6IGtpbmQgPT09ICdjb25maXJtZWQnID8gJ0ludm9pY2UgY29uZmlybWVkJyA6ICdJbnZvaWNlIGluIG1lbXBvb2wnLFxuICAgICAgICBzdWJ0aXRsZTogYCR7bGFiZWx9IMK3ICR7dHhpZC5zbGljZSgwLCAxNCl94oCmYCxcbiAgICAgICAgaHJlZjogdWYuYml0Y29pbkV4cGxvcmVyID8gYC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudCh0eGlkKX1gIDogdW5kZWZpbmVkLFxuICAgICAgICBjb3B5VGV4dDogdHhpZFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2aXR5IHN0cmVhbSByb3cgZm9yIEh1YiBkZWxlZ2F0aW9uIHNpZ25pbmcgKHNhbWUgcGFuZWwgYXMgcHVibGljIGNoYXQ7IGNoYW5uZWwgI2RlbGVnYXRpb24pLlxuICAgKi9cbiAgX2VtaXREZWxlZ2F0aW9uU2lnblJlcXVlc3RBY3Rpdml0eSAoeyBtZXNzYWdlSWQsIHByZXZpZXcsIHB1cnBvc2UgfSkge1xuICAgIGlmICghbWVzc2FnZUlkKSByZXR1cm47XG4gICAgY29uc3QgaWQgPSBgZGVsZWdhdGlvbi0ke21lc3NhZ2VJZH1gO1xuICAgIGNvbnN0IGFjdG9ySWQgPSB0aGlzLl9nZXRJZGVudGl0eUlkKCkgfHwgJ2xvY2FsJztcbiAgICBjb25zdCBjcmVhdGVkID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzID0gdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyB8fCB7fTtcbiAgICB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzW2lkXSA9IHtcbiAgICAgIHR5cGU6IERFTEVHQVRJT05fU0lHTkFUVVJFX1JFUVVFU1QsXG4gICAgICBhY3RvcjogeyBpZDogYWN0b3JJZCB9LFxuICAgICAgb2JqZWN0OiB7XG4gICAgICAgIGNvbnRlbnQ6IHR5cGVvZiBwcmV2aWV3ID09PSAnc3RyaW5nJyA/IHByZXZpZXcgOiAnJyxcbiAgICAgICAgcHVycG9zZTogdHlwZW9mIHB1cnBvc2UgPT09ICdzdHJpbmcnID8gcHVycG9zZSA6ICdzaWduJyxcbiAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICBjcmVhdGVkLFxuICAgICAgICBjaGFubmVsOiAnZGVsZWdhdGlvbicsXG4gICAgICAgIHN0YXR1czogJ3BlbmRpbmcnXG4gICAgICB9LFxuICAgICAgc3RhdHVzOiAncGVuZGluZydcbiAgICB9O1xuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAnYWRkJywgcGF0aDogYC9tZXNzYWdlcy8ke2lkfWAsIHZhbHVlOiB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzW2lkXSB9LFxuICAgICAgICBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZVxuICAgICAgfVxuICAgIH0pKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcHYgPSB0eXBlb2YgcHJldmlldyA9PT0gJ3N0cmluZycgPyBwcmV2aWV3IDogJyc7XG4gICAgICBwdXNoVWlOb3RpZmljYXRpb24oe1xuICAgICAgICBpZDogYGRlbGVnYXRpb24tcmVxLSR7bWVzc2FnZUlkfWAsXG4gICAgICAgIGtpbmQ6ICdkZWxlZ2F0aW9uJyxcbiAgICAgICAgdGl0bGU6ICdTaWduYXR1cmUgcmVxdWVzdCcsXG4gICAgICAgIHN1YnRpdGxlOiAocHYgJiYgcHYuc2xpY2UoMCwgMTIwKSkgfHwgJ09wZW4gU2VjdXJpdHkgJiBkZWxlZ2F0aW9uIHRvIHJlc3BvbmQuJyxcbiAgICAgICAgaHJlZjogJy9zZXR0aW5ncy9zZWN1cml0eScsXG4gICAgICAgIGNvcHlUZXh0OiBTdHJpbmcobWVzc2FnZUlkKVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICB9XG5cbiAgX3Jlc29sdmVEZWxlZ2F0aW9uU2lnblJlcXVlc3RBY3Rpdml0eSAobWVzc2FnZUlkLCByZXNvbHV0aW9uKSB7XG4gICAgaWYgKCFtZXNzYWdlSWQpIHJldHVybjtcbiAgICBjb25zdCBpZCA9IGBkZWxlZ2F0aW9uLSR7bWVzc2FnZUlkfWA7XG4gICAgY29uc3QgY3VyID0gdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyAmJiB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzW2lkXTtcbiAgICBpZiAoIWN1ciB8fCAhaXNEZWxlZ2F0aW9uU2lnbmF0dXJlUmVxdWVzdEFjdGl2aXR5KGN1cikpIHJldHVybjtcbiAgICBjb25zdCBzdGF0dXMgPSByZXNvbHV0aW9uID09PSAnYXBwcm92ZWQnXG4gICAgICA/ICdhcHByb3ZlZCdcbiAgICAgIDogcmVzb2x1dGlvbiA9PT0gJ3RpbWVvdXQnXG4gICAgICAgID8gJ3RpbWVvdXQnXG4gICAgICAgIDogJ3JlamVjdGVkJztcbiAgICB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzW2lkXSA9IE9iamVjdC5hc3NpZ24oe30sIGN1ciwge1xuICAgICAgc3RhdHVzOiAncmVzb2x2ZWQnLFxuICAgICAgb2JqZWN0OiBPYmplY3QuYXNzaWduKHt9LCBjdXIub2JqZWN0LCB7XG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgcmVzb2x2ZWRBdDogRGF0ZS5ub3coKVxuICAgICAgfSlcbiAgICB9KTtcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIG9wZXJhdGlvbjogeyBvcDogJ3JlcGxhY2UnLCBwYXRoOiBgL21lc3NhZ2VzLyR7aWR9YCwgdmFsdWU6IHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNbaWRdIH0sXG4gICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICB9XG4gICAgfSkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsYWJlbCA9IHN0YXR1cyA9PT0gJ2FwcHJvdmVkJ1xuICAgICAgICA/ICdTaWduYXR1cmUgYXBwcm92ZWQnXG4gICAgICAgIDogc3RhdHVzID09PSAndGltZW91dCdcbiAgICAgICAgICA/ICdTaWduYXR1cmUgcmVxdWVzdCB0aW1lZCBvdXQnXG4gICAgICAgICAgOiAnU2lnbmF0dXJlIHJlcXVlc3QgcmVqZWN0ZWQnO1xuICAgICAgcHVzaFVpTm90aWZpY2F0aW9uKHtcbiAgICAgICAgaWQ6IGBkZWxlZ2F0aW9uLWRvbmUtJHttZXNzYWdlSWR9YCxcbiAgICAgICAga2luZDogJ2RlbGVnYXRpb25fcmVzb2x2ZWQnLFxuICAgICAgICB0aXRsZTogbGFiZWwsXG4gICAgICAgIHN1YnRpdGxlOiBTdHJpbmcobWVzc2FnZUlkKSxcbiAgICAgICAgaHJlZjogJy9zZXR0aW5ncy9zZWN1cml0eSdcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkb2N1bWVudCB0byB0aGUgdW5pZmllZCBzdG9yZS4gQ29udGVudCBpcyBlbmNyeXB0ZWQgd2l0aCB0aGUgdXNlcidzIGtleXBhaXIgd2hlbiBhdmFpbGFibGUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkb2MgLSB7IGlkLCBuYW1lLCBtaW1lLCBzaXplLCBzaGEyNTYsIGNvbnRlbnRCYXNlNjQsIGNyZWF0ZWQ/IH1cbiAgICovXG4gIGFkZExvY2FsRG9jdW1lbnQgKGRvYykge1xuICAgIGlmICghZG9jIHx8ICFkb2MuaWQgfHwgIWRvYy5jb250ZW50QmFzZTY0KSByZXR1cm47XG4gICAgLy8gUmVxdWlyZSBhbiBlbmNyeXB0aW9uIGtleSBmb3IgYWRkaW5nIGRvY3VtZW50czoga2VlcCBsb2NhbCBzdG9yYWdlIGVuY3J5cHRlZC1vbmx5LlxuICAgIGlmICghdGhpcy5fZ2V0RG9jdW1lbnRLZXkoKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbQlJJREdFXScsICdSZWplY3RpbmcgYWRkTG9jYWxEb2N1bWVudDogbm8gZG9jdW1lbnQgZW5jcnlwdGlvbiBrZXkgYXZhaWxhYmxlLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdGVkID0gZG9jLmNyZWF0ZWQgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgIGNvbnN0IGVuY3J5cHRlZCA9IHRoaXMuX2VuY3J5cHRDb250ZW50KGRvYy5jb250ZW50QmFzZTY0KTtcbiAgICB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyA9IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzIHx8IHt9O1xuICAgIGNvbnN0IHRvU3RvcmUgPSB7XG4gICAgICAuLi5kb2MsXG4gICAgICBjcmVhdGVkLFxuICAgICAgY29udGVudEJhc2U2NDogdW5kZWZpbmVkXG4gICAgfTtcbiAgICBpZiAoZW5jcnlwdGVkICE9IG51bGwpIHtcbiAgICAgIHRvU3RvcmUuY29udGVudEVuY3J5cHRlZCA9IGVuY3J5cHRlZDtcbiAgICB9XG4gICAgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHNbZG9jLmlkXSA9IHRvU3RvcmU7XG4gICAgdGhpcy5fcGVyc2lzdERvY3VtZW50cygpO1xuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAnYWRkJywgcGF0aDogYC9kb2N1bWVudHMvJHtkb2MuaWR9YCwgdmFsdWU6IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW2RvYy5pZF0gfSxcbiAgICAgICAgZ2xvYmFsU3RhdGU6IHRoaXMuZ2xvYmFsU3RhdGVcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgZG9jdW1lbnQgZnJvbSBsb2NhbCBzdGF0ZSAoZS5nLiBhZnRlciBwdWJsaXNoaW5nKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gRG9jdW1lbnQgaWRcbiAgICovXG4gIHJlbW92ZUxvY2FsRG9jdW1lbnQgKGlkKSB7XG4gICAgaWYgKCFpZCB8fCAhdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMpIHJldHVybjtcbiAgICBkZWxldGUgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHNbaWRdO1xuICAgIHRoaXMuX3BlcnNpc3REb2N1bWVudHMoKTtcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIG9wZXJhdGlvbjogeyBvcDogJ3JlbW92ZScsIHBhdGg6IGAvZG9jdW1lbnRzLyR7aWR9YCB9LFxuICAgICAgICBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZVxuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgbG9jYWwgZG9jdW1lbnRzIChlLmcuIG9uIGxvZ291dCAvIGRlc3Ryb3kgaWRlbnRpdHkpLiBQZXJzaXN0cyBlbXB0eSBzdG9yZS5cbiAgICovXG4gIGNsZWFyQWxsRG9jdW1lbnRzICgpIHtcbiAgICB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyA9IHt9O1xuICAgIHRoaXMuX3BlcnNpc3REb2N1bWVudHMoKTtcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIG9wZXJhdGlvbjogeyBvcDogJ3JlcGxhY2UnLCBwYXRoOiAnL2RvY3VtZW50cycsIHZhbHVlOiB7fSB9LFxuICAgICAgICBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZVxuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbnkgZGVjcnlwdGVkIGNvbnRlbnQgZnJvbSBkb2N1bWVudHMgd2hpbGUgcHJlc2VydmluZyBlbmNyeXB0ZWQgYmxvYnMuXG4gICAqIFVzZWQgd2hlbiBsb2NraW5nIHRoZSBpZGVudGl0eSBzbyB0aGF0IHByZXZpb3VzbHkgdmlld2VkIHBsYWludGV4dCBpcyBub3QgcmV0YWluZWQgaW4gbWVtb3J5L2xvY2FsU3RvcmFnZS5cbiAgICovXG4gIGNsZWFyRGVjcnlwdGVkRG9jdW1lbnRzICgpIHtcbiAgICBpZiAoIXRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzKSByZXR1cm47XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBjb25zdCBkb2NzID0gdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHM7XG4gICAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyhkb2NzKSkge1xuICAgICAgY29uc3QgZG9jID0gZG9jc1tpZF07XG4gICAgICBpZiAoIWRvYyB8fCAhZG9jLmNvbnRlbnRFbmNyeXB0ZWQpIGNvbnRpbnVlO1xuICAgICAgaWYgKGRvYy5jb250ZW50QmFzZTY0ICE9IG51bGwpIHtcbiAgICAgICAgZGVsZXRlIGRvYy5jb250ZW50QmFzZTY0O1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjaGFuZ2VkKSByZXR1cm47XG4gICAgdGhpcy5fcGVyc2lzdERvY3VtZW50cygpO1xuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAncmVwbGFjZScsIHBhdGg6ICcvZG9jdW1lbnRzJywgdmFsdWU6IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzIH0sXG4gICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgcmVzZXRHbG9iYWxTdGF0ZSAoKSB7XG4gICAgdGhpcy5nbG9iYWxTdGF0ZSA9IHtcbiAgICAgIGNvbnZlcnNhdGlvbnM6IHt9LFxuICAgICAgbWVzc2FnZXM6IHt9LFxuICAgICAgdXNlcnM6IHt9LFxuICAgICAgZG9jdW1lbnRzOiB7fSxcbiAgICAgIHBlZXJUb3BvbG9neUdvc3NpcDogeyBieVJlcG9ydGVyOiB7fSB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICB0aGlzLnN0YXJ0KCk7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gaW5pdGlhbCBwYXRoXG4gICAgdGhpcy5zdWJzY3JpYmUodGhpcy5zdGF0ZS5jdXJyZW50UGF0aCk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpZW50QmFsYW5jZVVwZGF0ZScsIHRoaXMuX29uQ2xpZW50QmFsYW5jZVVwZGF0ZSk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHBhdGggY2hhbmdlc1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHRoaXMuaGFuZGxlUGF0aENoYW5nZSk7XG5cbiAgICAvLyBDYWxsIG9uU3RhdGVVcGRhdGUgcHJvcCBpZiBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIGlmICh0aGlzLnByb3BzLm9uU3RhdGVVcGRhdGUgJiYgdHlwZW9mIHRoaXMucHJvcHMub25TdGF0ZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5wcm9wcy5vblN0YXRlVXBkYXRlKHRoaXMuc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSAocHJldlByb3BzKSB7XG4gICAgLy8gVXBkYXRlIHNpZ25pbmcga2V5IHdoZW4gYXV0aCBjaGFuZ2VzIChlLmcuIHVzZXIgdW5sb2NrcyBpZGVudGl0eSlcbiAgICBpZiAocHJldlByb3BzLmF1dGggIT09IHRoaXMucHJvcHMuYXV0aCkge1xuICAgICAgdGhpcy5zZXR0aW5ncy5zaWduaW5nS2V5ID0gdGhpcy5wcm9wcy5hdXRoID8gbmV3IEtleSh0aGlzLnByb3BzLmF1dGgpIDogbnVsbDtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCAoKSB7XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWVudEJhbGFuY2VVcGRhdGUnLCB0aGlzLl9vbkNsaWVudEJhbGFuY2VVcGRhdGUpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIHRoaXMuaGFuZGxlUGF0aENoYW5nZSk7XG4gIH1cblxuICBfcGFyc2VIdWJBZGRyZXNzU3RyaW5nIChpbnB1dCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXcgPSBpbnB1dCA9PSBudWxsID8gJycgOiBTdHJpbmcoaW5wdXQpLnRyaW0oKTtcbiAgICAgIGlmICghcmF3KSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgaGFzU2NoZW1lID0gL15bYS16QS1aXVthLXpBLVowLTkrLi1dKjpcXC9cXC8vLnRlc3QocmF3KTtcbiAgICAgIGNvbnN0IGJhc2VTY2hlbWUgPSB0aGlzLnNldHRpbmdzICYmIHRoaXMuc2V0dGluZ3Muc2VjdXJlID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJztcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoaGFzU2NoZW1lID8gcmF3IDogKGJhc2VTY2hlbWUgKyByYXcpKTtcblxuICAgICAgY29uc3QgcHJvdG8gPSAodXJsLnByb3RvY29sIHx8ICcnKS5yZXBsYWNlKCc6JywgJycpO1xuICAgICAgY29uc3Qgc2VjdXJlID0gcHJvdG8gPT09ICdodHRwcycgfHwgcHJvdG8gPT09ICd3c3MnO1xuICAgICAgY29uc3QgaG9zdCA9IHVybC5ob3N0bmFtZTtcbiAgICAgIGNvbnN0IHBvcnQgPSB1cmwucG9ydCA/IE51bWJlcih1cmwucG9ydCkgOiAoc2VjdXJlID8gNDQzIDogODApO1xuICAgICAgaWYgKCFob3N0IHx8ICFwb3J0IHx8IE51bWJlci5pc05hTihwb3J0KSkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IGF1dGhvcml0eSA9IChzZWN1cmUgPyAnd3NzJyA6ICd3cycpICsgYDovLyR7aG9zdH06JHtwb3J0fWA7XG4gICAgICByZXR1cm4geyBob3N0LCBwb3J0LCBzZWN1cmUsIGF1dGhvcml0eSwgcmF3OiByYXcgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kIG9wdGlvbmFsIFdTIHRva2VuIGZvciBodWIgYHNldHRpbmdzLndlYnNvY2tldGAgYXV0aCAoTUVTU0FHRV9UUkFOU1BPUlQubWQpLlxuICAgKiBTZXQgYHdpbmRvdy5GQUJSSUNfV1NfQ0xJRU5UX1RPS0VOYCBiZWZvcmUgQnJpZGdlIGNvbm5lY3RzIHdoZW4gRkFCUklDX1dTX1JFUVVJUkVfVE9LRU4gaXMgb24uXG4gICAqL1xuICBfd2Vic29ja2V0VXJsV2l0aEF1dGggKHBhdGgpIHtcbiAgICBjb25zdCBiYXNlID0gYCR7dGhpcy5hdXRob3JpdHl9JHtwYXRofWA7XG4gICAgbGV0IHRva2VuID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIHRva2VuID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5GQUJSSUNfV1NfQ0xJRU5UX1RPS0VOKVxuICAgICAgICA/IFN0cmluZyh3aW5kb3cuRkFCUklDX1dTX0NMSUVOVF9UT0tFTikudHJpbSgpXG4gICAgICAgIDogJyc7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICBpZiAoIXRva2VuKSByZXR1cm4gYmFzZTtcbiAgICBjb25zdCBzZXAgPSBiYXNlLmluZGV4T2YoJz8nKSA+PSAwID8gJyYnIDogJz8nO1xuICAgIHJldHVybiBgJHtiYXNlfSR7c2VwfXRva2VuPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRva2VuKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbWUtb3JpZ2luIFBPU1QgL3NlcnZpY2VzL3JwYyBoZWFkZXJzOiBvcHRpb25hbCBgRkFCUklDX1dTX0NMSUVOVF9UT0tFTmAgYXMgQmVhcmVyIHNvIEhUVFAgSlNPTi1SUENcbiAgICogc2F0aXNmaWVzIGh1YiBgd2Vic29ja2V0LmNsaWVudFRva2VuYCBjaGVja3Mgd2hlbiBXZWJTb2NrZXRzIHVzZSBxdWVyeSBhdXRoIChNRVNTQUdFX1RSQU5TUE9SVC5tZCkuXG4gICAqIEByZXR1cm5zIHt7ICdDb250ZW50LVR5cGUnOiBzdHJpbmcsIEFjY2VwdDogc3RyaW5nLCBBdXRob3JpemF0aW9uPzogc3RyaW5nIH19XG4gICAqL1xuICBfaHViSnNvblJwY0h0dHBIZWFkZXJzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0geyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICAgIGxldCB0b2tlbiA9ICcnO1xuICAgIHRyeSB7XG4gICAgICB0b2tlbiA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuRkFCUklDX1dTX0NMSUVOVF9UT0tFTilcbiAgICAgICAgPyBTdHJpbmcod2luZG93LkZBQlJJQ19XU19DTElFTlRfVE9LRU4pLnRyaW0oKVxuICAgICAgICA6ICcnO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgaWYgKHRva2VuKSBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7dG9rZW59YDtcbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIF9hcHBseUh1YkFkZHJlc3NTdHJpbmcgKGlucHV0KSB7XG4gICAgY29uc3QgcGFyc2VkID0gdGhpcy5fcGFyc2VIdWJBZGRyZXNzU3RyaW5nKGlucHV0KTtcbiAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuaG9zdCA9IHBhcnNlZC5ob3N0O1xuICAgIHRoaXMuc2V0dGluZ3MucG9ydCA9IHBhcnNlZC5wb3J0O1xuICAgIHRoaXMuc2V0dGluZ3Muc2VjdXJlID0gcGFyc2VkLnNlY3VyZTtcbiAgICB0aGlzLnNldHRpbmdzLmF1dGhvcml0eSA9IHBhcnNlZC5hdXRob3JpdHk7XG4gICAgdGhpcy5zZXR0aW5ncy5odWJBZGRyZXNzID0gcGFyc2VkLnJhdztcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIF9zZW5kU3Vic2NyaWJlIChwYXRoKSB7XG4gICAgaWYgKCFwYXRoKSByZXR1cm47XG4gICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ1NVQlNDUklCRScsIHBhdGhdKTtcbiAgICBjb25zdCBtZXNzYWdlQnVmZmVyID0gbWVzc2FnZS50b0J1ZmZlcigpO1xuICAgIHRoaXMuc2VuZFNpZ25lZE1lc3NhZ2UobWVzc2FnZUJ1ZmZlcik7XG4gIH1cblxuICBfcmVzdWJzY3JpYmVBbGwgKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdWJzID0gdGhpcy5zdGF0ZSAmJiB0aGlzLnN0YXRlLnN1YnNjcmlwdGlvbnMgPyBBcnJheS5mcm9tKHRoaXMuc3RhdGUuc3Vic2NyaXB0aW9ucykgOiBbXTtcbiAgICAgIHN1YnMuZm9yRWFjaCgocCkgPT4gdGhpcy5fc2VuZFN1YnNjcmliZShwKSk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuXG4gIHNldEh1YkFkZHJlc3MgKGh1YkFkZHJlc3MpIHtcbiAgICBjb25zdCBvayA9IHRoaXMuX2FwcGx5SHViQWRkcmVzc1N0cmluZyhodWJBZGRyZXNzKTtcbiAgICBpZiAoIW9rKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tCUklER0VdJywgJ0ludmFsaWQgaHViIGFkZHJlc3M6Jywgc2FmZVVybEZvckxvZyhodWJBZGRyZXNzKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRnVsbHkgcmVzdGFydCBzbyBXZWJTb2NrZXQgKyBXZWJSVEMgc2lnbmFsaW5nIHVzZSB0aGUgbmV3IGhvc3QvcG9ydC5cbiAgICB0cnkgeyB0aGlzLnN0b3AoKTsgfSBjYXRjaCAoZSkge31cbiAgICB0cnkgeyB0aGlzLnN0YXJ0KCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVQYXRoQ2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IG5ld1BhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgaWYgKG5ld1BhdGggIT09IHRoaXMuc3RhdGUuY3VycmVudFBhdGgpIHtcbiAgICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gb2xkIHBhdGhcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUodGhpcy5zdGF0ZS5jdXJyZW50UGF0aCk7XG4gICAgICAvLyBVcGRhdGUgY3VycmVudCBwYXRoXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY3VycmVudFBhdGg6IG5ld1BhdGggfSk7XG4gICAgICAvLyBTdWJzY3JpYmUgdG8gbmV3IHBhdGhcbiAgICAgIHRoaXMuc3Vic2NyaWJlKG5ld1BhdGgpO1xuICAgIH1cbiAgfTtcblxuICBjb25uZWN0IChwYXRoKSB7XG4gICAgLy8gQ2xlYW4gdXAgYW55IGV4aXN0aW5nIFdlYlNvY2tldCBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lXG4gICAgaWYgKHRoaXMud3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMud3Mub25vcGVuID0gbnVsbDtcbiAgICAgICAgdGhpcy53cy5vbm1lc3NhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLndzLm9uZXJyb3IgPSBudWxsO1xuICAgICAgICB0aGlzLndzLm9uY2xvc2UgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy53cy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTiB8fCB0aGlzLndzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XG4gICAgICAgICAgdGhpcy53cy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnRXJyb3IgY2xlYW5pbmcgdXAgcHJldmlvdXMgV2ViU29ja2V0OicsIHNhZmVJZGVudGl0eUVycihlKSk7XG4gICAgICB9XG4gICAgICB0aGlzLndzID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB3c1VybCA9IHRoaXMuX3dlYnNvY2tldFVybFdpdGhBdXRoKHBhdGgpO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbQlJJREdFXScsICdPcGVuaW5nIGNvbm5lY3Rpb24gdG86Jywgd3NVcmwpO1xuICAgIH1cbiAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCh3c1VybCk7XG4gICAgdGhpcy53cy5iaW5hcnlUeXBlID0gJ2FycmF5YnVmZmVyJztcblxuICAgIC8vIEF0dGFjaCBFdmVudCBIYW5kbGVyc1xuICAgIHRoaXMud3Mub25vcGVuID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnQ29ubmVjdGlvbiBlc3RhYmxpc2hlZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNDb25uZWN0ZWQgPSB0cnVlOyAgLy8gU2V0IGludGVybmFsIHN0YXRlIGltbWVkaWF0ZWx5XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaXNDb25uZWN0ZWQ6IHRydWUgfSwgKCkgPT4ge1xuICAgICAgICAvLyBDYWxsIG9uU3RhdGVVcGRhdGUgcHJvcCBpZiBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vblN0YXRlVXBkYXRlICYmIHR5cGVvZiB0aGlzLnByb3BzLm9uU3RhdGVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLnByb3BzLm9uU3RhdGVVcGRhdGUodGhpcy5zdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5vblNvY2tldE9wZW4oKTtcblxuICAgICAgLy8gUHJvY2VzcyBhbnkgcXVldWVkIG1lc3NhZ2VzXG4gICAgICB3aGlsZSAodGhpcy5tZXNzYWdlUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlUXVldWUuc2hpZnQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLndzLnNlbmQobWVzc2FnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3Igc2VuZGluZyBxdWV1ZWQgbWVzc2FnZTonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICAgICAgICAvLyBSZS1xdWV1ZSB0aGUgbWVzc2FnZSBpZiBzZW5kIGZhaWxzXG4gICAgICAgICAgdGhpcy5tZXNzYWdlUXVldWUudW5zaGlmdChtZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBGbHVzaCBhbnkgcXVldWVkIEpTT04tUlBDIHBheWxvYWRzIHRoYXQgd2VyZSBlbnF1ZXVlZCBiZWZvcmUgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgZmluaXNoZWQgb3BlbmluZyAoZm9yIGV4YW1wbGUsIGVhcmx5IFdlYlJUQyByZWdpc3RyYXRpb24pLlxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5fanNvblJwY1F1ZXVlKSAmJiB0aGlzLl9qc29uUnBjUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5kZWJ1Zykge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ0ZsdXNoaW5nIHF1ZXVlZCBKU09OLVJQQyBwYXlsb2FkczonLCB0aGlzLl9qc29uUnBjUXVldWUubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBxdWV1ZSA9IHRoaXMuX2pzb25ScGNRdWV1ZS5zbGljZSgpO1xuICAgICAgICB0aGlzLl9qc29uUnBjUXVldWUgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwYXlsb2FkIG9mIHF1ZXVlKSB7XG4gICAgICAgICAgdGhpcy5fc2VuZEpTT05SUENOb3cocGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy53cy5vbm1lc3NhZ2UgPSB0aGlzLm9uU29ja2V0TWVzc2FnZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy53cy5vbmVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLndzICYmIHRoaXMud3MudXJsID8gdGhpcy53cy51cmwgOiAnKG5vIHVybCknO1xuICAgICAgY29uc3Qga2luZCA9IGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgZXJyb3IudHlwZVxuICAgICAgICA/IGVycm9yLnR5cGVcbiAgICAgICAgOiAoZXJyb3IgJiYgZXJyb3IubWVzc2FnZSkgfHwgZXJyb3I7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdXZWJTb2NrZXQgZXJyb3I6JywgdXJsLCBraW5kLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3I6IHNhZmVJZGVudGl0eUVycihlcnJvciksIGlzQ29ubmVjdGVkOiBmYWxzZSB9LCAoKSA9PiB7XG4gICAgICAgIC8vIENhbGwgb25TdGF0ZVVwZGF0ZSBwcm9wIGlmIHByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uU3RhdGVVcGRhdGUgJiYgdHlwZW9mIHRoaXMucHJvcHMub25TdGF0ZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRoaXMucHJvcHMub25TdGF0ZVVwZGF0ZSh0aGlzLnN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMud3Mub25jbG9zZSA9IChldmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnV2ViU29ja2V0IGNsb3NlZDonLCBldmVudC5jb2RlLCBldmVudC5yZWFzb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBpc0Nvbm5lY3RlZDogZmFsc2UgfSwgKCkgPT4ge1xuICAgICAgICAvLyBDYWxsIG9uU3RhdGVVcGRhdGUgcHJvcCBpZiBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vblN0YXRlVXBkYXRlICYmIHR5cGVvZiB0aGlzLnByb3BzLm9uU3RhdGVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLnByb3BzLm9uU3RhdGVVcGRhdGUodGhpcy5zdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5fZmFicmljSHViUmVjb25uZWN0U3VzcGVuZGVkKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRlYnVnKSB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnSHViIHJlY29ubmVjdCBzdXNwZW5kZWQgKGZhYnJpYyB0cmFuc3BvcnQgcGVuYWx0eSk7IGNsZWFyIGluIFVJIG9yIHJlbG9hZC4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEF0dGVtcHQgdG8gcmVjb25uZWN0IGFmdGVyIGEgZGVsYXlcbiAgICAgIGlmICh0aGlzLmF0dGVtcHRzIDwgNSkge1xuICAgICAgICBjb25zdCBkZWxheSA9IHRoaXMuZ2VuZXJhdGVJbnRlcnZhbCh0aGlzLmF0dGVtcHRzKTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCBgUmVjb25uZWN0aW5nIGluICR7ZGVsYXl9bXMgKGF0dGVtcHQgJHt0aGlzLmF0dGVtcHRzfSlgKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5hdHRlbXB0cysrO1xuICAgICAgICAgIHRoaXMuY29ubmVjdChwYXRoKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnTWF4IHJlY29ubmVjdGlvbiBhdHRlbXB0cyByZWFjaGVkJyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdlbmVyYXRlSW50ZXJ2YWwgKGF0dGVtcHRzKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKDMwLCAoTWF0aC5wb3coMiwgYXR0ZW1wdHMpIC0gMSkpICogMTAwMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIFdlYlJUQyBpZGVudGl0eSAobmF0aXZlIFdlYlJUQykuXG4gICAqIEdlbmVyYXRlcyBhIHN0YWJsZSBwZWVySWQgZm9yIHRoaXMgYnJvd3NlciBzZXNzaW9uIGFuZCBtYXJrcyBXZWJSVEMgcmVhZHkuXG4gICAqL1xuICBpbml0aWFsaXplV2ViUlRDICgpIHtcbiAgICBpZiAodGhpcy5wZWVySWQpIHJldHVybjtcblxuICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMua2V5ID8gdGhpcy5rZXkuaWQuc2xpY2UoLTgpIDogTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDgpO1xuICAgIHRoaXMucGVlcklkID0gYGZhYnJpYy1icmlkZ2UtJHtzZXNzaW9uSWR9YDtcbiAgICB0aGlzLl93ZWJydGNSZWFkeSA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5kZWJ1Zykge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnSW5pdGlhbGl6ZWQgbmF0aXZlIFdlYlJUQyB3aXRoIHBlZXJJZDonLCB0aGlzLnBlZXJJZCk7XG4gICAgfVxuXG4gICAgLy8gUHVibGlzaCBvdXIgcHJlc2VuY2UgdG8gdGhlIEh1YiBzbyBvdGhlciBwZWVycyBjYW4gZGlzY292ZXIgdXMuXG4gICAgdGhpcy5wdWJsaXNoV2ViUlRDT2ZmZXIoKTtcblxuICAgIC8vIFNjaGVkdWxlIGluaXRpYWwgcGVlciBkaXNjb3ZlcnkuXG4gICAgaWYgKHRoaXMuX3BlZXJEaXNjb3ZlcnlUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMuX3BlZXJEaXNjb3ZlcnlUaW1lcik7XG4gICAgdGhpcy5fcGVlckRpc2NvdmVyeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRpc2NvdmVyQW5kQ29ubmVjdFRvUGVlcnMoKTtcbiAgICB9LCB0aGlzLnNldHRpbmdzLndlYnJ0Y1BlZXJEaXNjb3ZlcnlEZWxheSk7XG4gIH1cblxuICAvLyBQZWVySlMtc3BlY2lmaWMgV2ViUlRDIGhlbHBlcnMgcmVtb3ZlZDsgbmF0aXZlIFdlYlJUQyBoZWxwZXJzIGFyZSBkZWZpbmVkIGJlbG93LlxuXG4gIC8qKlxuICAgKiBIYW5kbGUgbWVzc2FnZXMgcmVjZWl2ZWQgdmlhIFdlYlJUQ1xuICAgKi9cbiAgaGFuZGxlV2ViUlRDTWVzc2FnZSAoZGF0YSwgc291cmNlUGVlcklkID0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbQlJJREdFXScsICdQcm9jZXNzaW5nIFdlYlJUQyBtZXNzYWdlOicsIGZhYnJpY0RlYnVnRGVzY3JpYmVQYXlsb2FkKGRhdGEpKTtcblxuICAgICAgY29uc3QgdHJhbnNwb3J0ID0gc291cmNlUGVlcklkICE9IG51bGwgJiYgU3RyaW5nKHNvdXJjZVBlZXJJZClcbiAgICAgICAgPyB7IHNlc3Npb25JZDogU3RyaW5nKHNvdXJjZVBlZXJJZCksIGtpbmQ6IFNFU1NJT05fS0lORF9XRUJSVEMgfVxuICAgICAgICA6IHsgc2Vzc2lvbklkOiBIVUJfRkFCUklDX1NFU1NJT05fSUQsIGtpbmQ6IFNFU1NJT05fS0lORF9IVUIgfTtcblxuICAgICAgLy8gSGFuZGxlIG91ciBzdHJ1Y3R1cmVkIFdlYlJUQyBtZXNzYWdlc1xuICAgICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEudHlwZSA9PT0gJ2ZhYnJpYy1tZXNzYWdlJykge1xuICAgICAgICAvLyBEZWNvZGUgdGhlIGJhc2U2NCBkYXRhIGJhY2sgdG8gQnVmZmVyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VEYXRhID0gQnVmZmVyLmZyb20oZGF0YS5kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICAgIHRoaXMub25Tb2NrZXRNZXNzYWdlKHsgZGF0YTogbWVzc2FnZURhdGEsIF9mYWJyaWNUcmFuc3BvcnQ6IHRyYW5zcG9ydCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgb3RoZXIgZGF0YSBmb3JtYXRzIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICBsZXQgbWVzc2FnZURhdGE7XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbWVzc2FnZURhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAndXRmOCcpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgbWVzc2FnZURhdGEgPSBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2VEYXRhID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzIHRoZSBtZXNzYWdlIHVzaW5nIHRoZSBleGlzdGluZyBXZWJTb2NrZXQgbWVzc2FnZSBoYW5kbGVyXG4gICAgICB0aGlzLm9uU29ja2V0TWVzc2FnZSh7IGRhdGE6IG1lc3NhZ2VEYXRhLCBfZmFicmljVHJhbnNwb3J0OiB0cmFuc3BvcnQgfSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3IgaGFuZGxpbmcgV2ViUlRDIG1lc3NhZ2U6Jywgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2ggb3VyIFdlYlJUQyBwcmVzZW5jZS9vZmZlciB0byB0aGUgQnJpZGdlLlxuICAgKiBUaGlzIG5vdGlmaWVzIHRoZSBzZXJ2ZXIgdGhhdCB3ZSdyZSBhdmFpbGFibGUgZm9yIHBlZXIgY29ubmVjdGlvbnMuXG4gICAqL1xuICBwdWJsaXNoV2ViUlRDT2ZmZXIgKCkge1xuICAgIGlmICghdGhpcy5wZWVySWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnQ2Fubm90IHB1Ymxpc2ggV2ViUlRDIG9mZmVyOiBubyBwZWVyIElEJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ1B1Ymxpc2hpbmcgV2ViUlRDIG9mZmVyIHdpdGggcGVlciBJRDonLCB0aGlzLnBlZXJJZCk7XG4gICAgfVxuXG4gICAgLy8gU2VuZCBvdXIgcGVlciBpbmZvIHRvIHRoZSBzZXJ2ZXIgdmlhIFdlYlNvY2tldCBSUENcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgdXNlckFnZW50OiB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyA/IG5hdmlnYXRvci51c2VyQWdlbnQgOiAndW5rbm93bicsXG4gICAgICBjYXBhYmlsaXRpZXM6IFsnZGF0YS1jaGFubmVsJ11cbiAgICB9O1xuICAgIGNvbnN0IGtleSA9IHRoaXMuX2dldElkZW50aXR5S2V5KCk7XG4gICAgaWYgKGtleSAmJiBrZXkueHB1YiAmJiBpc0xpa2VseUJpcDMyRXh0ZW5kZWRLZXkoU3RyaW5nKGtleS54cHViKSkpIHtcbiAgICAgIG1ldGEueHB1YiA9IFN0cmluZyhrZXkueHB1YikudHJpbSgpO1xuICAgIH1cbiAgICBjb25zdCBucyA9IHRoaXMuc3RhdGUgJiYgKHRoaXMuc3RhdGUubmV0d29ya1N0YXR1cyB8fCB0aGlzLnN0YXRlLmxhc3ROZXR3b3JrU3RhdHVzKTtcbiAgICBjb25zdCBmcCA9IG5zICYmIG5zLmZhYnJpY1BlZXJJZCAhPSBudWxsID8gU3RyaW5nKG5zLmZhYnJpY1BlZXJJZCkudHJpbSgpIDogJyc7XG4gICAgaWYgKGZwKSBtZXRhLmZhYnJpY1BlZXJJZCA9IGZwO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBrSGV4ID0gdHlwZW9mIHRoaXMuZ2V0SHRsY1JlZnVuZFB1YmxpY0tleUhleCA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZ2V0SHRsY1JlZnVuZFB1YmxpY0tleUhleCgpIDogbnVsbDtcbiAgICAgIGlmIChwa0hleCAmJiAvXlswLTlhLWZBLUZdezY2fSQvLnRlc3QoU3RyaW5nKHBrSGV4KS50cmltKCkpKSB7XG4gICAgICAgIG1ldGEucHVibGljS2V5SGV4ID0gU3RyaW5nKHBrSGV4KS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICYmIGtleS5wdWJrZXkgJiYgL15bMC05YS1mQS1GXXs2NCw2Nn0kLy50ZXN0KFN0cmluZyhrZXkucHVia2V5KS50cmltKCkpKSB7XG4gICAgICAgIG1ldGEucHVibGljS2V5SGV4ID0gU3RyaW5nKGtleS5wdWJrZXkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHt9XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgbWV0aG9kOiAnUmVnaXN0ZXJXZWJSVENQZWVyJyxcbiAgICAgIHBhcmFtczogW3tcbiAgICAgICAgcGVlcklkOiB0aGlzLnBlZXJJZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBtZXRhZGF0YTogbWV0YVxuICAgICAgfV1cbiAgICB9O1xuXG4gICAgdGhpcy5fc2VuZEpTT05SUEMocGF5bG9hZCk7XG4gICAgdGhpcy5fbGFzdFdlYlJUQ1B1Ymxpc2hBdCA9IERhdGUubm93KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBwZWVyIGNhbmRpZGF0ZXMgZnJvbSB0aGUgQnJpZGdlIGFuZCBjb25uZWN0IHRvIGF2YWlsYWJsZSBwZWVycy5cbiAgICogUmVzcGVjdHMgdGhlIG1heFdlYnJ0Y1BlZXJzIHNldHRpbmcuXG4gICAqL1xuICBkaXNjb3ZlckFuZENvbm5lY3RUb1BlZXJzICgpIHtcbiAgICAvLyBEaXNjb3Zlcnkgb25seSBuZWVkcyBvdXIgbG9naWNhbCBwZWVySWQgcmVnaXN0ZXJlZCB3aXRoIHRoZSBodWI7IGl0XG4gICAgLy8gZG9lcyBub3QgcmVxdWlyZSB0aGF0IGEgc3BlY2lmaWMgV2ViUlRDIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBvcGVuLlxuICAgIGlmICghdGhpcy5wZWVySWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnQ2Fubm90IGRpc2NvdmVyIHBlZXJzOiBubyBXZWJSVEMgcGVlcklkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudENvbm5lY3Rpb25zID0gdGhpcy53ZWJydGNQZWVycy5zaXplO1xuICAgIGNvbnN0IG1heFBlZXJzID0gdGhpcy5zZXR0aW5ncy5tYXhXZWJydGNQZWVycyB8fCA1O1xuXG4gICAgaWYgKGN1cnJlbnRDb25uZWN0aW9ucyA+PSBtYXhQZWVycykge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCBgQWxyZWFkeSBhdCBtYXggV2ViUlRDIHBlZXJzICgke2N1cnJlbnRDb25uZWN0aW9uc30vJHttYXhQZWVyc30pYCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVxdWVzdCBwZWVyIGxpc3QgZnJvbSB0aGUgc2VydmVyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIG1ldGhvZDogJ0xpc3RXZWJSVENQZWVycycsXG4gICAgICBwYXJhbXM6IFt7IGV4Y2x1ZGVTZWxmOiB0cnVlLCBwZWVySWQ6IHRoaXMucGVlcklkIH1dXG4gICAgfTtcblxuICAgIC8vIFN0b3JlIGNhbGxiYWNrIGZvciB3aGVuIHdlIHJlY2VpdmUgdGhlIHJlc3BvbnNlXG4gICAgdGhpcy5fcGVuZGluZ1BlZXJEaXNjb3ZlcnkgPSB0cnVlO1xuICAgIHRoaXMuX2xhc3RXZWJSVENEaXNjb3ZlckF0ID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9zZW5kSlNPTlJQQyhwYXlsb2FkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgdGhlIHJlc3BvbnNlIGZyb20gTGlzdFdlYlJUQ1BlZXJzIGFuZCBpbml0aWF0ZSBjb25uZWN0aW9ucy5cbiAgICogQHBhcmFtIHtBcnJheX0gY2FuZGlkYXRlcyAtIEFycmF5IG9mIHBlZXIgY2FuZGlkYXRlIG9iamVjdHNcbiAgICovXG4gIGhhbmRsZVBlZXJDYW5kaWRhdGVzIChjYW5kaWRhdGVzKSB7XG4gICAgLy8gSWYgV2ViUlRDIGlkZW50aXR5IGlzbid0IHJlYWR5IHlldCwgc3Rhc2ggY2FuZGlkYXRlcyBhbmQgcHJvY2VzcyB0aGVtIG9uY2VcbiAgICAvLyBpbml0aWFsaXphdGlvbiBjb21wbGV0ZXMuXG4gICAgaWYgKCF0aGlzLnBlZXJJZCB8fCAhdGhpcy5fd2VicnRjUmVhZHkpIHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ0RlZmVycmluZyBXZWJSVEMgcGVlciBjYW5kaWRhdGVzIHVudGlsIFdlYlJUQyBpcyByZWFkeScpO1xuICAgICAgfVxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuX3BlbmRpbmdQZWVyQ2FuZGlkYXRlcykpIHRoaXMuX3BlbmRpbmdQZWVyQ2FuZGlkYXRlcyA9IFtdO1xuICAgICAgdGhpcy5fcGVuZGluZ1BlZXJDYW5kaWRhdGVzLnB1c2goLi4uY2FuZGlkYXRlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNhbmRpZGF0ZXMpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tCUklER0VdJywgJ0ludmFsaWQgcGVlciBjYW5kaWRhdGVzOicsIHR5cGVvZiBjYW5kaWRhdGVzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Q29ubmVjdGlvbnMgPSB0aGlzLmdldFdlYlJUQ1BlZXJDb3VudCgpICsgdGhpcy5fY29ubmVjdGluZ1BlZXJzLnNpemU7XG4gICAgY29uc3QgbWF4UGVlcnMgPSB0aGlzLnNldHRpbmdzLm1heFdlYnJ0Y1BlZXJzIHx8IDU7XG4gICAgY29uc3Qgc2xvdHNBdmFpbGFibGUgPSBNYXRoLm1heCgwLCBtYXhQZWVycyAtIGN1cnJlbnRDb25uZWN0aW9ucyk7XG5cbiAgICBpZiAoc2xvdHNBdmFpbGFibGUgPT09IDApIHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ05vIHNsb3RzIGF2YWlsYWJsZSBmb3IgbmV3IFdlYlJUQyBwZWVycycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgbWF4Q2FuZGlkYXRlQWdlTXMgPSBOdW1iZXIodGhpcy5zZXR0aW5ncy53ZWJydGNDYW5kaWRhdGVNYXhBZ2VNcyB8fCAxMjAwMDApO1xuICAgIGxldCBzdGFsZUNhbmRpZGF0ZUNvdW50ID0gMDtcblxuICAgIC8vIEZpbHRlciBvdXQgb3Vyc2VsdmVzLCBzdGFsZSByZWdpc3RyYXRpb25zLCBhbmQgYWxyZWFkeSBjb25uZWN0ZWQvY29ubmVjdGluZyBwZWVycy5cbiAgICBjb25zdCBlbGlnaWJsZVBlZXJzID0gY2FuZGlkYXRlcy5maWx0ZXIoY2FuZGlkYXRlID0+IHtcbiAgICAgIGNvbnN0IHBlZXJJZCA9IGNhbmRpZGF0ZS5pZCB8fCBjYW5kaWRhdGUucGVlcklkO1xuICAgICAgaWYgKCFwZWVySWQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChwZWVySWQgPT09IHRoaXMucGVlcklkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAodGhpcy53ZWJydGNQZWVycy5oYXMocGVlcklkKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHRoaXMuX2Nvbm5lY3RpbmdQZWVycy5oYXMocGVlcklkKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3Qgc2VlbkF0ID0gTnVtYmVyKGNhbmRpZGF0ZS5sYXN0U2VlbiB8fCBjYW5kaWRhdGUucmVnaXN0ZXJlZEF0IHx8IGNhbmRpZGF0ZS5jb25uZWN0ZWRBdCB8fCAwKTtcbiAgICAgIGlmIChtYXhDYW5kaWRhdGVBZ2VNcyA+IDAgJiYgTnVtYmVyLmlzRmluaXRlKHNlZW5BdCkgJiYgc2VlbkF0ID4gMCkge1xuICAgICAgICBpZiAoKG5vdyAtIHNlZW5BdCkgPiBtYXhDYW5kaWRhdGVBZ2VNcykge1xuICAgICAgICAgIHN0YWxlQ2FuZGlkYXRlQ291bnQrKztcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0YWxlQ2FuZGlkYXRlQ291bnQgPiAwKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbQlJJREdFXScsICdJZ25vcmluZyBzdGFsZSBXZWJSVEMgY2FuZGlkYXRlczonLCBzdGFsZUNhbmRpZGF0ZUNvdW50KTtcbiAgICB9XG5cbiAgICAvLyBQcmVmZXIgZnJlc2hlc3QgY2FuZGlkYXRlcyBmaXJzdCBzbyBzdGFsZSBodWIgcmVnaXN0cmF0aW9ucyBkbyBub3RcbiAgICAvLyBjb25zdW1lIGFsbCBhdmFpbGFibGUgY29ubmVjdGlvbiBzbG90cy5cbiAgICBlbGlnaWJsZVBlZXJzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGJTZWVuID0gTnVtYmVyKGIubGFzdFNlZW4gfHwgYi5yZWdpc3RlcmVkQXQgfHwgYi5jb25uZWN0ZWRBdCB8fCAwKTtcbiAgICAgIGNvbnN0IGFTZWVuID0gTnVtYmVyKGEubGFzdFNlZW4gfHwgYS5yZWdpc3RlcmVkQXQgfHwgYS5jb25uZWN0ZWRBdCB8fCAwKTtcbiAgICAgIHJldHVybiBiU2VlbiAtIGFTZWVuO1xuICAgIH0pO1xuXG4gICAgLy8gQ29ubmVjdCB0byBwZWVycyB1cCB0byBhdmFpbGFibGUgc2xvdHMuXG4gICAgY29uc3QgcGVlcnNUb0Nvbm5lY3QgPSBlbGlnaWJsZVBlZXJzLnNsaWNlKDAsIHNsb3RzQXZhaWxhYmxlKTtcblxuICAgIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIHBlZXJzVG9Db25uZWN0KSB7XG4gICAgICBjb25zdCBwZWVySWQgPSBjYW5kaWRhdGUuaWQgfHwgY2FuZGlkYXRlLnBlZXJJZDtcbiAgICAgIHRoaXMuY29ubmVjdFRvV2ViUlRDUGVlcihwZWVySWQsIGNhbmRpZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIFAyUF9QRUVSX0dPU1NJUCBpbnRvIGNsaWVudCBnbG9iYWwgc3RhdGUgZm9yIFBlZXJzIHRvcG9sb2d5IFVJIChzZWNvbmQtaG9wIHZpZXcpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyc2VkIC0gcGF5bG9hZCB3aXRoIGFjdG9yLmlkIGFuZCBvYmplY3QucGVlcnNbXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZhbGxiYWNrUmVwb3J0ZXJJZF0gLSBXZWJSVEMgY2hhbm5lbCBwZWVyIGlkIHdoZW4gYWN0b3IgaXMgbWlzc2luZ1xuICAgKi9cbiAgX3JlY29yZFBlZXJHb3NzaXBUb3BvbG9neSAocGFyc2VkLCBmYWxsYmFja1JlcG9ydGVySWQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVwb3J0ZXIgPSAocGFyc2VkICYmIHBhcnNlZC5hY3RvciAmJiBwYXJzZWQuYWN0b3IuaWQpXG4gICAgICAgID8gU3RyaW5nKHBhcnNlZC5hY3Rvci5pZClcbiAgICAgICAgOiAoZmFsbGJhY2tSZXBvcnRlcklkID8gU3RyaW5nKGZhbGxiYWNrUmVwb3J0ZXJJZCkgOiAnJyk7XG4gICAgICBjb25zdCBwZWVycyA9IEFycmF5LmlzQXJyYXkocGFyc2VkICYmIHBhcnNlZC5vYmplY3QgJiYgcGFyc2VkLm9iamVjdC5wZWVycylcbiAgICAgICAgPyBwYXJzZWQub2JqZWN0LnBlZXJzXG4gICAgICAgIDogW107XG4gICAgICBpZiAoIXJlcG9ydGVyIHx8IHBlZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgY29uc3QgbmVpZ2hib3JJZHMgPSBbLi4ubmV3IFNldChwZWVycy5tYXAoKHApID0+IHtcbiAgICAgICAgaWYgKCFwIHx8IHR5cGVvZiBwICE9PSAnb2JqZWN0JykgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gU3RyaW5nKHAuaWQgIT0gbnVsbCA/IHAuaWQgOiAocC5wZWVySWQgIT0gbnVsbCA/IHAucGVlcklkIDogJycpKS50cmltKCk7XG4gICAgICB9KS5maWx0ZXIoQm9vbGVhbikpXTtcbiAgICAgIGlmIChuZWlnaGJvcklkcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHRoaXMuZ2xvYmFsU3RhdGUucGVlclRvcG9sb2d5R29zc2lwID0gdGhpcy5nbG9iYWxTdGF0ZS5wZWVyVG9wb2xvZ3lHb3NzaXAgfHwgeyBieVJlcG9ydGVyOiB7fSB9O1xuICAgICAgdGhpcy5nbG9iYWxTdGF0ZS5wZWVyVG9wb2xvZ3lHb3NzaXAuYnlSZXBvcnRlcltyZXBvcnRlcl0gPSB7XG4gICAgICAgIGF0OiBEYXRlLm5vdygpLFxuICAgICAgICBuZWlnaGJvcnM6IG5laWdoYm9ySWRzXG4gICAgICB9O1xuICAgICAgY29uc3QgY3V0b2ZmID0gRGF0ZS5ub3coKSAtIDIwICogNjAgKiAxMDAwO1xuICAgICAgY29uc3QgYnIgPSB0aGlzLmdsb2JhbFN0YXRlLnBlZXJUb3BvbG9neUdvc3NpcC5ieVJlcG9ydGVyO1xuICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGJyKSkge1xuICAgICAgICBpZiAoYnJba10gJiYgdHlwZW9mIGJyW2tdLmF0ID09PSAnbnVtYmVyJyAmJiBicltrXS5hdCA8IGN1dG9mZikgZGVsZXRlIGJyW2tdO1xuICAgICAgfVxuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdnbG9iYWxTdGF0ZVVwZGF0ZScsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAncmVwbGFjZScsIHBhdGg6ICcvcGVlclRvcG9sb2d5R29zc2lwJywgdmFsdWU6IHRoaXMuZ2xvYmFsU3RhdGUucGVlclRvcG9sb2d5R29zc2lwIH0sXG4gICAgICAgICAgZ2xvYmFsU3RhdGU6IHRoaXMuZ2xvYmFsU3RhdGVcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdIF9yZWNvcmRQZWVyR29zc2lwVG9wb2xvZ3k6Jywgc2FmZUlkZW50aXR5RXJyKGUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGUgYSBXZWJSVEMgY29ubmVjdGlvbiB0byBhIHNwZWNpZmljIHBlZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwZWVySWQgLSBUaGUgcmVtb3RlIGJyb3dzZXIgcGVlciBJRCB0byBjb25uZWN0IHRvXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtZXRhZGF0YSAtIE9wdGlvbmFsIG1ldGFkYXRhIGFib3V0IHRoZSBwZWVyXG4gICAqL1xuICBjb25uZWN0VG9XZWJSVENQZWVyIChwZWVySWQsIG1ldGFkYXRhID0ge30pIHtcbiAgICBpZiAoIXRoaXMucGVlcklkIHx8ICF0aGlzLl93ZWJydGNSZWFkeSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnQ2Fubm90IGNvbm5lY3QgdG8gcGVlciB5ZXQ6IFdlYlJUQyBpZGVudGl0eSBub3QgcmVhZHknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53ZWJydGNQZWVycy5oYXMocGVlcklkKSB8fCB0aGlzLl9jb25uZWN0aW5nUGVlcnMuaGFzKHBlZXJJZCkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ0FscmVhZHkgY29ubmVjdGVkL2Nvbm5lY3RpbmcgdG8gcGVlcjonLCBwZWVySWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNldHRpbmdzLmRlYnVnKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbQlJJREdFXScsICdJbml0aWF0aW5nIG5hdGl2ZSBXZWJSVEMgY29ubmVjdGlvbiB0byBwZWVyOicsIHBlZXJJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29ubmVjdGluZ1BlZXJzLmFkZChwZWVySWQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICBwYzogbnVsbCxcbiAgICAgICAgZGM6IG51bGwsXG4gICAgICAgIHN0YXR1czogJ2Nvbm5lY3RpbmcnLFxuICAgICAgICBpbml0aWF0b3I6IHRydWUsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICBtYWtpbmdPZmZlcjogZmFsc2UsXG4gICAgICAgIGlnbm9yZU9mZmVyOiBmYWxzZSxcbiAgICAgICAgbG9jYWxTZXNzaW9uSWQ6IHRoaXMuX25ld1JUQ1Nlc3Npb25JZChwZWVySWQpLFxuICAgICAgICByZW1vdGVTZXNzaW9uSWQ6IG51bGwsXG4gICAgICAgIGxvY2FsU2lnbmFsUmV2aXNpb246IDAsXG4gICAgICAgIHJlbW90ZVNpZ25hbFJldmlzaW9uOiAwLFxuICAgICAgICBwb2xpdGU6IHRoaXMucGVlcklkID8gdGhpcy5wZWVySWQgPCBwZWVySWQgOiB0cnVlXG4gICAgICB9O1xuICAgICAgY29uc3QgcGMgPSB0aGlzLl9jcmVhdGVSVENQZWVyQ29ubmVjdGlvbihwZWVySWQsIGVudHJ5KTtcbiAgICAgIGNvbnN0IGRjID0gcGMuY3JlYXRlRGF0YUNoYW5uZWwoJ2ZhYnJpYy1wZWVyJywgeyBvcmRlcmVkOiB0cnVlIH0pO1xuICAgICAgdGhpcy5fYXR0YWNoRGF0YUNoYW5uZWxIYW5kbGVycyhwZWVySWQsIGRjKTtcbiAgICAgIGVudHJ5LnBjID0gcGM7XG4gICAgICBlbnRyeS5kYyA9IGRjO1xuICAgICAgdGhpcy5fcnRjUGVlcnMuc2V0KHBlZXJJZCwgZW50cnkpO1xuICAgICAgdGhpcy53ZWJydGNQZWVycy5zZXQocGVlcklkLCB7XG4gICAgICAgIGlkOiBwZWVySWQsXG4gICAgICAgIHN0YXR1czogJ2Nvbm5lY3RpbmcnLFxuICAgICAgICBkaXJlY3Rpb246ICdvdXRib3VuZCcsXG4gICAgICAgIGNvbm5lY3RlZEF0OiBudWxsLFxuICAgICAgICBsYXN0U2VlbjogRGF0ZS5ub3coKSxcbiAgICAgICAgY29ubmVjdGlvbjogZGMsXG4gICAgICAgIG1ldGFkYXRhXG4gICAgICB9KTtcblxuICAgICAgZW50cnkubWFraW5nT2ZmZXIgPSB0cnVlO1xuICAgICAgcGMuY3JlYXRlT2ZmZXIoKS50aGVuKG9mZmVyID0+IHBjLnNldExvY2FsRGVzY3JpcHRpb24ob2ZmZXIpKS50aGVuKCgpID0+IHtcbiAgICAgICAgZW50cnkubWFraW5nT2ZmZXIgPSBmYWxzZTtcbiAgICAgICAgaWYgKHBjLnNpZ25hbGluZ1N0YXRlID09PSAnY2xvc2VkJykgcmV0dXJuO1xuICAgICAgICBjb25zdCBvZmZlclNpZ25hbCA9IHRoaXMuX3dpdGhSVENTaWduYWxNZXRhKGVudHJ5LCB7XG4gICAgICAgICAgdHlwZTogJ29mZmVyJyxcbiAgICAgICAgICBzZHA6IHBjLmxvY2FsRGVzY3JpcHRpb25cbiAgICAgICAgfSwge1xuICAgICAgICAgIHRhcmdldFNlc3Npb25JZDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZW5kV2ViUlRDU2lnbmFsKHBlZXJJZCwgb2ZmZXJTaWduYWwpO1xuICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgZW50cnkubWFraW5nT2ZmZXIgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3IgY3JlYXRpbmcgV2ViUlRDIG9mZmVyIHRvJywgcGVlcklkLCBzYWZlSWRlbnRpdHlFcnIoZXJyKSk7XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdFdlYlJUQ1BlZXIocGVlcklkKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb25uZWN0VGltZW91dE1zID0gTnVtYmVyKHRoaXMuc2V0dGluZ3Mud2VicnRjQ29ubmVjdFRpbWVvdXRNcyB8fCAxNTAwMCk7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmZvID0gdGhpcy53ZWJydGNQZWVycy5nZXQocGVlcklkKTtcbiAgICAgICAgaWYgKGluZm8gJiYgaW5mby5zdGF0dXMgPT09ICdjb25uZWN0ZWQnKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmRlYnVnKSB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnVGltaW5nIG91dCBzdGFsZSBXZWJSVEMgY29ubmVjdCBhdHRlbXB0OicsIHBlZXJJZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNjb25uZWN0V2ViUlRDUGVlcihwZWVySWQpO1xuICAgICAgfSwgY29ubmVjdFRpbWVvdXRNcyk7XG4gICAgICB0aGlzLl93ZWJydGNDb25uZWN0VGltZXJzLnNldChwZWVySWQsIHRpbWVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRmFpbGVkIHRvIGluaXRpYXRlIG5hdGl2ZSBXZWJSVEMgY29ubmVjdGlvbiB0byBwZWVyOicsIHBlZXJJZCwgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgICB0aGlzLmRpc2Nvbm5lY3RXZWJSVENQZWVyKHBlZXJJZCk7XG4gICAgfVxuICB9XG5cbiAgX3Jlc2V0SHViRmFicmljVHJhbnNwb3J0U2Vzc2lvbiAoKSB7XG4gICAgdGhpcy5fZmFicmljVHJhbnNwb3J0U2Vzc2lvbnMuc2V0KFxuICAgICAgSFVCX0ZBQlJJQ19TRVNTSU9OX0lELFxuICAgICAgbmV3IEZhYnJpY1RyYW5zcG9ydFNlc3Npb24oSFVCX0ZBQlJJQ19TRVNTSU9OX0lELCBTRVNTSU9OX0tJTkRfSFVCKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZFxuICAgKiBAcGFyYW0geydodWJfd2Vic29ja2V0J3wnd2VicnRjX21lc2gnfSBraW5kXG4gICAqIEByZXR1cm5zIHtGYWJyaWNUcmFuc3BvcnRTZXNzaW9ufG51bGx9XG4gICAqL1xuICBfZ2V0RmFicmljVHJhbnNwb3J0U2Vzc2lvbiAoc2Vzc2lvbklkLCBraW5kKSB7XG4gICAgY29uc3QgaWQgPSBzZXNzaW9uSWQgIT0gbnVsbCA/IFN0cmluZyhzZXNzaW9uSWQpIDogJyc7XG4gICAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XG4gICAgbGV0IHMgPSB0aGlzLl9mYWJyaWNUcmFuc3BvcnRTZXNzaW9ucy5nZXQoaWQpO1xuICAgIGlmICghcykge1xuICAgICAgcyA9IG5ldyBGYWJyaWNUcmFuc3BvcnRTZXNzaW9uKGlkLCBraW5kKTtcbiAgICAgIHRoaXMuX2ZhYnJpY1RyYW5zcG9ydFNlc3Npb25zLnNldChpZCwgcyk7XG4gICAgfVxuICAgIHJldHVybiBzO1xuICB9XG5cbiAgX2ZhYnJpY1Jld2FyZFRyYW5zcG9ydCAoc2Vzc2lvbklkLCBraW5kLCBkZWx0YSwgX3JlYXNvbikge1xuICAgIGNvbnN0IHMgPSB0aGlzLl9nZXRGYWJyaWNUcmFuc3BvcnRTZXNzaW9uKHNlc3Npb25JZCwga2luZCk7XG4gICAgaWYgKCFzKSByZXR1cm47XG4gICAgcy5yZXdhcmQoZGVsdGEpO1xuICAgIHRoaXMuX25vdGlmeVBlZXJMaXN0VWlSZWZyZXNoKCk7XG4gIH1cblxuICBfZmFicmljUGVuYWxpemVUcmFuc3BvcnQgKHNlc3Npb25JZCwga2luZCwgcGVuYWx0eSwgcmVhc29uKSB7XG4gICAgY29uc3QgcyA9IHRoaXMuX2dldEZhYnJpY1RyYW5zcG9ydFNlc3Npb24oc2Vzc2lvbklkLCBraW5kKTtcbiAgICBpZiAoIXMpIHJldHVybjtcbiAgICBjb25zdCB7IGRpc2Nvbm5lY3QgfSA9IHMucGVuYWxpemUocGVuYWx0eSk7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ0ZhYnJpYyB0cmFuc3BvcnQgcGVuYWxpemVkOicsIHNlc3Npb25JZCwga2luZCwgcmVhc29uLCAnc2NvcmUnLCBzLnNjb3JlLCAnbWlzYmVoYXZpb3InLCBzLm1pc2JlaGF2aW9yKTtcbiAgICB9XG4gICAgaWYgKGRpc2Nvbm5lY3QpIHtcbiAgICAgIGlmIChraW5kID09PSBTRVNTSU9OX0tJTkRfSFVCICYmIHNlc3Npb25JZCA9PT0gSFVCX0ZBQlJJQ19TRVNTSU9OX0lEKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdG9hc3Qud2FybmluZyhcbiAgICAgICAgICAgIGBEaXNjb25uZWN0ZWQgZnJvbSBodWIke3JlYXNvbiA/IGAgKCR7cmVhc29ufSlgIDogJyd9LiBGYWJyaWMgdHJhbnNwb3J0IHJlcHV0YXRpb24gZXhoYXVzdGVkIChzY29yZSAke3Muc2NvcmV9KS5gLFxuICAgICAgICAgICAgeyBoZWFkZXI6ICdIdWInIH1cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChfKSB7IC8qIGlnbm9yZSAqLyB9XG4gICAgICAgIHRoaXMuX2ZhYnJpY0Rpc2Nvbm5lY3RIdWJUcmFuc3BvcnQocmVhc29uIHx8ICd0cmFuc3BvcnQtcmVwdXRhdGlvbicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b2FzdC53YXJuaW5nKFxuICAgICAgICAgICAgYERpc2Nvbm5lY3RlZCBicm93c2VyIG1lc2ggcGVlciR7cmVhc29uID8gYCAoJHtyZWFzb259KWAgOiAnJ30uIFJlcHV0YXRpb24gZXhoYXVzdGVkIChzY29yZSAke3Muc2NvcmV9LCBtaXNiZWhhdmlvciAke3MubWlzYmVoYXZpb3J9KS5gLFxuICAgICAgICAgICAgeyBoZWFkZXI6ICdNZXNoIHBlZXInIH1cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChfKSB7IC8qIGlnbm9yZSAqLyB9XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdFdlYlJUQ1BlZXIoc2Vzc2lvbklkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fbm90aWZ5UGVlckxpc3RVaVJlZnJlc2goKTtcbiAgfVxuXG4gIF9mYWJyaWNEaXNjb25uZWN0SHViVHJhbnNwb3J0IChyZWFzb24pIHtcbiAgICB0aGlzLl9mYWJyaWNIdWJSZWNvbm5lY3RTdXNwZW5kZWQgPSB0cnVlO1xuICAgIGlmICghdGhpcy53cykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy53cy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTiB8fCB0aGlzLndzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XG4gICAgICAgIHRoaXMud3MuY2xvc2UoNDAwMiwgU3RyaW5nKHJlYXNvbiB8fCAnZmFicmljLXRyYW5zcG9ydCcpLnNsaWNlKDAsIDEyMCkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnRXJyb3IgY2xvc2luZyBXZWJTb2NrZXQgYWZ0ZXIgdHJhbnNwb3J0IHBlbmFsdHk6Jywgc2FmZUlkZW50aXR5RXJyKGUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBlZXJJZFxuICAgKiBAcmV0dXJucyB7eyBzY29yZTogbnVtYmVyLCBtaXNiZWhhdmlvcjogbnVtYmVyIH19XG4gICAqL1xuICBnZXRXZWJSVENQZWVyUmVwdXRhdGlvbiAocGVlcklkKSB7XG4gICAgY29uc3QgaWQgPSBwZWVySWQgIT0gbnVsbCA/IFN0cmluZyhwZWVySWQpIDogJyc7XG4gICAgY29uc3QgcyA9IGlkID8gdGhpcy5fZmFicmljVHJhbnNwb3J0U2Vzc2lvbnMuZ2V0KGlkKSA6IG51bGw7XG4gICAgaWYgKCFzKSByZXR1cm4geyBzY29yZTogMTAwLCBtaXNiZWhhdmlvcjogMCB9O1xuICAgIHJldHVybiB7IHNjb3JlOiBOdW1iZXIocy5zY29yZSkgfHwgMCwgbWlzYmVoYXZpb3I6IE51bWJlcihzLm1pc2JlaGF2aW9yKSB8fCAwIH07XG4gIH1cblxuICBfbm90aWZ5UGVlckxpc3RVaVJlZnJlc2ggKCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIGlmICh0aGlzLl9wZWVyTGlzdFVpUmVmcmVzaFRpbWVyKSByZXR1cm47XG4gICAgdGhpcy5fcGVlckxpc3RVaVJlZnJlc2hUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcGVlckxpc3RVaVJlZnJlc2hUaW1lciA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBucyA9IHRoaXMuc3RhdGUubmV0d29ya1N0YXR1cyB8fCB0aGlzLnN0YXRlLmxhc3ROZXR3b3JrU3RhdHVzO1xuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ25ldHdvcmtTdGF0dXNVcGRhdGUnLCB7IGRldGFpbDogeyBuZXR3b3JrU3RhdHVzOiBucyB9IH0pKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHsgLyogaWdub3JlICovIH1cbiAgICB9LCAyMDApO1xuICB9XG5cbiAgX3dlYnJ0Y1Jld2FyZFBlZXIgKHBlZXJJZCwgZGVsdGEsIHJlYXNvbikge1xuICAgIHRoaXMuX2ZhYnJpY1Jld2FyZFRyYW5zcG9ydChwZWVySWQsIFNFU1NJT05fS0lORF9XRUJSVEMsIGRlbHRhLCByZWFzb24pO1xuICB9XG5cbiAgX3dlYnJ0Y1BlbmFsaXplUGVlciAocGVlcklkLCBwZW5hbHR5LCByZWFzb24pIHtcbiAgICB0aGlzLl9mYWJyaWNQZW5hbGl6ZVRyYW5zcG9ydChwZWVySWQsIFNFU1NJT05fS0lORF9XRUJSVEMsIHBlbmFsdHksIHJlYXNvbik7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG1lc3NhZ2VzIHJlY2VpdmVkIGZyb20gYSBXZWJSVEMgcGVlciAobm90IHRoZSBzZXJ2ZXIpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGVlcklkIC0gVGhlIHBlZXIgSUQgdGhhdCBzZW50IHRoZSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7Kn0gZGF0YSAtIFRoZSBtZXNzYWdlIGRhdGFcbiAgICovXG4gIGhhbmRsZVdlYlJUQ1BlZXJNZXNzYWdlIChwZWVySWQsIGRhdGEpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgV0VCUlRDX01BWF9URVhUID0gMjU2ICogMTAyNDtcbiAgICAgIGNvbnN0IFdFQlJUQ19NQVhfQklOQVJZID0gOCAqIDEwMjQgKiAxMDI0O1xuXG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnICYmIGRhdGEubGVuZ3RoID4gV0VCUlRDX01BWF9URVhUKSB7XG4gICAgICAgIHRoaXMuX3dlYnJ0Y1BlbmFsaXplUGVlcihwZWVySWQsIDUwLCAnb3ZlcnNpemVkLXRleHQtZnJhbWUnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA+IFdFQlJUQ19NQVhfQklOQVJZKSB7XG4gICAgICAgICAgdGhpcy5fd2VicnRjUGVuYWxpemVQZWVyKHBlZXJJZCwgNTAsICdvdmVyc2l6ZWQtYmluYXJ5LWZyYW1lJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Tb2NrZXRNZXNzYWdlKHtcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIF9mYWJyaWNUcmFuc3BvcnQ6IHsgc2Vzc2lvbklkOiBwZWVySWQsIGtpbmQ6IFNFU1NJT05fS0lORF9XRUJSVEMgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICBjb25zdCB1OCA9IGRhdGE7XG4gICAgICAgIGlmICh1OC5ieXRlTGVuZ3RoID4gV0VCUlRDX01BWF9CSU5BUlkpIHtcbiAgICAgICAgICB0aGlzLl93ZWJydGNQZW5hbGl6ZVBlZXIocGVlcklkLCA1MCwgJ292ZXJzaXplZC1iaW5hcnktZnJhbWUnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblNvY2tldE1lc3NhZ2Uoe1xuICAgICAgICAgIGRhdGE6IHU4LmJ1ZmZlci5zbGljZSh1OC5ieXRlT2Zmc2V0LCB1OC5ieXRlT2Zmc2V0ICsgdTguYnl0ZUxlbmd0aCksXG4gICAgICAgICAgX2ZhYnJpY1RyYW5zcG9ydDogeyBzZXNzaW9uSWQ6IHBlZXJJZCwga2luZDogU0VTU0lPTl9LSU5EX1dFQlJUQyB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIGRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YS5zaXplID09PSAnbnVtYmVyJyAmJiBkYXRhLnNpemUgPiBXRUJSVENfTUFYX0JJTkFSWSkge1xuICAgICAgICAgIHRoaXMuX3dlYnJ0Y1BlbmFsaXplUGVlcihwZWVySWQsIDUwLCAnb3ZlcnNpemVkLWJpbmFyeS1mcmFtZScpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmFycmF5QnVmZmVyKCkudGhlbigoYWIpID0+IHtcbiAgICAgICAgICBpZiAoYWIuYnl0ZUxlbmd0aCA+IFdFQlJUQ19NQVhfQklOQVJZKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJydGNQZW5hbGl6ZVBlZXIocGVlcklkLCA1MCwgJ292ZXJzaXplZC1iaW5hcnktZnJhbWUnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vblNvY2tldE1lc3NhZ2Uoe1xuICAgICAgICAgICAgZGF0YTogYWIsXG4gICAgICAgICAgICBfZmFicmljVHJhbnNwb3J0OiB7IHNlc3Npb25JZDogcGVlcklkLCBraW5kOiBTRVNTSU9OX0tJTkRfV0VCUlRDIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnV2ViUlRDIEJsb2IgcmVhZCBmYWlsZWQ6Jywgc2FmZUlkZW50aXR5RXJyKGVycikpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcGF5bG9hZCA9IGRhdGE7XG4gICAgICAvLyBSVENEYXRhQ2hhbm5lbCB0ZXh0IGZyYW1lcyBhcnJpdmUgYXMgc3RyaW5nczsgbm9ybWFsaXplIHRvIG9iamVjdCB3aGVuIHBvc3NpYmxlLlxuICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCB0cmltbWVkID0gcGF5bG9hZC50cmltKCk7XG4gICAgICAgIGlmICh0cmltbWVkKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBheWxvYWQgPSBKU09OLnBhcnNlKHRyaW1tZWQpO1xuICAgICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0cmltbWVkLnN0YXJ0c1dpdGgoJ3snKSB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoJ1snKSkge1xuICAgICAgICAgICAgICB0aGlzLl93ZWJydGNQZW5hbGl6ZVBlZXIocGVlcklkLCAxMiwgJ2ludmFsaWQtanNvbicpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXlsb2FkID0gZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRW1pdCBldmVudCBmb3IgYXBwbGljYXRpb24tbGV2ZWwgaGFuZGxpbmdcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCd3ZWJydGNQZWVyTWVzc2FnZScsIHtcbiAgICAgICAgZGV0YWlsOiB7IHBlZXJJZCwgZGF0YTogcGF5bG9hZCB9XG4gICAgICB9KTtcbiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblxuICAgICAgLy8gSGFuZGxlIHNwZWNpZmljIG1lc3NhZ2UgdHlwZXNcbiAgICAgIGlmIChwYXlsb2FkICYmIHR5cGVvZiBwYXlsb2FkID09PSAnb2JqZWN0Jykge1xuICAgICAgICBzd2l0Y2ggKHBheWxvYWQudHlwZSkge1xuICAgICAgICAgIGNhc2UgJ3BpbmcnOlxuICAgICAgICAgICAgdGhpcy5zZW5kVG9XZWJSVENQZWVyKHBlZXJJZCwgeyB0eXBlOiAncG9uZycsIHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9KTtcbiAgICAgICAgICAgIHRoaXMuX3dlYnJ0Y1Jld2FyZFBlZXIocGVlcklkLCAxLCAnYW5zd2VyZWQtcGluZycpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gT3Bjb2RlICgweDYxKSArIHdpcmUvZnJpZW5kbHkgbmFtZXMgKyBsZWdhY3kgV2ViUlRDIGFsaWFzLlxuICAgICAgICAgIGNhc2UgUDJQX1BFRVJfR09TU0lQOlxuICAgICAgICAgIGNhc2UgJ1AyUF9QRUVSX0dPU1NJUCc6XG4gICAgICAgICAgY2FzZSAnUGVlckdvc3NpcCc6XG4gICAgICAgICAgY2FzZSAnd2VicnRjLXBlZXItZ29zc2lwJzoge1xuICAgICAgICAgICAgY29uc3QgcGVlcnMgPSBBcnJheS5pc0FycmF5KHBheWxvYWQub2JqZWN0ICYmIHBheWxvYWQub2JqZWN0LnBlZXJzKVxuICAgICAgICAgICAgICA/IHBheWxvYWQub2JqZWN0LnBlZXJzXG4gICAgICAgICAgICAgIDogKEFycmF5LmlzQXJyYXkocGF5bG9hZC5wZWVycykgPyBwYXlsb2FkLnBlZXJzIDogW10pO1xuICAgICAgICAgICAgaWYgKHBlZXJzLmxlbmd0aCA+IDEyOCkge1xuICAgICAgICAgICAgICB0aGlzLl93ZWJydGNQZW5hbGl6ZVBlZXIocGVlcklkLCAzMCwgJ2dvc3NpcC1saXN0LW92ZXJzaXplZCcpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwZWVycy5zb21lKChwKSA9PiAhcCB8fCAocC5pZCA9PSBudWxsICYmIHAucGVlcklkID09IG51bGwpKSkge1xuICAgICAgICAgICAgICB0aGlzLl93ZWJydGNQZW5hbGl6ZVBlZXIocGVlcklkLCAyNSwgJ2dvc3NpcC1tYWxmb3JtZWQtZW50cnknKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGVlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLl9yZWNvcmRQZWVyR29zc2lwVG9wb2xvZ3koXG4gICAgICAgICAgICAgICAgeyBhY3RvcjogcGF5bG9hZC5hY3RvciB8fCB7IGlkOiBwZWVySWQgfSwgb2JqZWN0OiB7IHBlZXJzIH0gfSxcbiAgICAgICAgICAgICAgICBwZWVySWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IHBlZXJzLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogcC5pZCB8fCBwLnBlZXJJZCxcbiAgICAgICAgICAgICAgICBwZWVySWQ6IHAuaWQgfHwgcC5wZWVySWQsXG4gICAgICAgICAgICAgICAgbGFzdFNlZW46IHAubGFzdFNlZW4gfHwgcC5yZWdpc3RlcmVkQXQgfHwgRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICByZWdpc3RlcmVkQXQ6IHAucmVnaXN0ZXJlZEF0IHx8IHAubGFzdFNlZW4gfHwgRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICBzb3VyY2U6ICdnb3NzaXAnXG4gICAgICAgICAgICAgIH0pKS5maWx0ZXIoKGMpID0+IGMuaWQgJiYgYy5pZCAhPT0gdGhpcy5wZWVySWQpO1xuICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQZWVyQ2FuZGlkYXRlcyhjYW5kaWRhdGVzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLl93ZWJydGNSZXdhcmRQZWVyKHBlZXJJZCwgMSwgJ3ZhbGlkLWdvc3NpcCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgUDJQX1BFRVJJTkdfT0ZGRVI6XG4gICAgICAgICAgY2FzZSAnUDJQX1BFRVJJTkdfT0ZGRVInOlxuICAgICAgICAgIGNhc2UgJ1BlZXJpbmdPZmZlcic6IHtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHBheWxvYWQub2JqZWN0IHx8IHBheWxvYWQ7XG4gICAgICAgICAgICBjb25zdCBzbG90cyA9IE51bWJlcihvYmouc2xvdHMgfHwgb2JqLm5lZWRlZCB8fCAxKTtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zcG9ydCA9IG9iai50cmFuc3BvcnQgfHwgJ3dlYnJ0Yyc7XG4gICAgICAgICAgICBpZiAodHJhbnNwb3J0ID09PSAnd2VicnRjJyAmJiBzbG90cyA+IDAgJiYgdGhpcy5wZWVySWQpIHtcbiAgICAgICAgICAgICAgY29uc3Qgb2ZmZXJlcklkID0gKHBheWxvYWQuYWN0b3IgJiYgcGF5bG9hZC5hY3Rvci5pZCkgfHwgcGVlcklkO1xuICAgICAgICAgICAgICBpZiAob2ZmZXJlcklkICE9PSB0aGlzLnBlZXJJZCAmJiAhdGhpcy53ZWJydGNQZWVycy5oYXMob2ZmZXJlcklkKSAmJiAhdGhpcy5fY29ubmVjdGluZ1BlZXJzLmhhcyhvZmZlcmVySWQpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnUmVjZWl2ZWQnLCBNZXNzYWdlLmNhbm9uaWNhbFR5cGVOYW1lKFAyUF9QRUVSSU5HX09GRkVSKSwgJ2Zyb20nLCBwZWVySWQsICctIGF0dGVtcHRpbmcgY29ubmVjdCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGVlckNhbmRpZGF0ZXMoW3sgaWQ6IG9mZmVyZXJJZCwgcGVlcklkOiBvZmZlcmVySWQsIGxhc3RTZWVuOiBEYXRlLm5vdygpLCBzb3VyY2U6ICdwZWVyaW5nT2ZmZXInIH1dKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLl93ZWJydGNSZXdhcmRQZWVyKHBlZXJJZCwgMSwgJ3BlZXJpbmctb2ZmZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdwb25nJzoge1xuICAgICAgICAgICAgLy8gVXBkYXRlIGxhc3Qgc2VlbiBmb3IgdGhlIHBlZXJcbiAgICAgICAgICAgIGNvbnN0IHBlZXJJbmZvID0gdGhpcy53ZWJydGNQZWVycy5nZXQocGVlcklkKTtcbiAgICAgICAgICAgIGlmIChwZWVySW5mbykge1xuICAgICAgICAgICAgICBwZWVySW5mby5sYXN0U2VlbiA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgIHRoaXMud2VicnRjUGVlcnMuc2V0KHBlZXJJZCwgcGVlckluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fd2VicnRjUmV3YXJkUGVlcihwZWVySWQsIDEsICdwb25nJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAnZmFicmljLW1lc3NhZ2UnOiB7XG4gICAgICAgICAgICAvLyBTaWduZWQgRmFicmljIE1lc3NhZ2UgKGJhc2U2NCk7IHJlbGF5IHdpdGggb3JpZ2luYWwgcHJlc2VydmVkIGZvciBvbmlvbiByb3V0aW5nLlxuICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gcGF5bG9hZC5kYXRhO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlNjQgIT09ICdzdHJpbmcnIHx8ICFiYXNlNjQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3dlYnJ0Y1BlbmFsaXplUGVlcihwZWVySWQsIDIwLCAnZmFicmljLW1lc3NhZ2UtZW1wdHknKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYmFzZTY0Lmxlbmd0aCA+IE1hdGguZmxvb3IoMS41ICogMTAyNCAqIDEwMjQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3dlYnJ0Y1BlbmFsaXplUGVlcihwZWVySWQsIDQwLCAnZmFicmljLW1lc3NhZ2Utb3ZlcnNpemVkJyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJhc2U2NCAmJiB0aGlzLl9pc0Nvbm5lY3RlZCAmJiB0aGlzLndzICYmIHRoaXMud3MucmVhZHlTdGF0ZSA9PT0gMSkge1xuICAgICAgICAgICAgICBjb25zdCBlbnZlbG9wZSA9IHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbDogYmFzZTY0LFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsVHlwZTogJ2ZhYnJpYy1tZXNzYWdlJyxcbiAgICAgICAgICAgICAgICBob3BzOiBbeyBmcm9tOiBwZWVySWQsIGF0OiBEYXRlLm5vdygpIH1dXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHRoaXMuX3NlbmRKU09OUlBDKHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdSZWxheUZyb21XZWJSVEMnLFxuICAgICAgICAgICAgICAgIHBhcmFtczogW3sgZnJvbVBlZXJJZDogcGVlcklkLCBlbnZlbG9wZSB9XVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlV2ViUlRDTWVzc2FnZShwYXlsb2FkLCBwZWVySWQpO1xuICAgICAgICAgICAgdGhpcy5fd2VicnRjUmV3YXJkUGVlcihwZWVySWQsIDEsICdmYWJyaWMtbWVzc2FnZScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ1AyUF9ESVNUUklCVVRFX1BST1BPU0FMJzoge1xuICAgICAgICAgICAgY29uc3Qgb2JqID0gcGF5bG9hZC5vYmplY3QgfHwgcGF5bG9hZDtcbiAgICAgICAgICAgIGxldCBwcm9wb3NhbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAob2JqLmRvY3VtZW50SWQgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcihvYmouYW1vdW50U2F0cykpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNlbmRlckFkZHJlc3MgPSAocGF5bG9hZC5hY3RvciAmJiBwYXlsb2FkLmFjdG9yLmlkKSB8fCBudWxsO1xuICAgICAgICAgICAgICBjb25zdCBjcmVhdGVkID0gKG9iai5jcmVhdGVkIHx8IHBheWxvYWQuY3JlYXRlZCkgfHwgRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgcHJvcG9zYWwgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IGBwcm9wb3NhbDoke2NyZWF0ZWR9OiR7c2VuZGVyQWRkcmVzcyB8fCAndW5rbm93bid9YCxcbiAgICAgICAgICAgICAgICBkb2N1bWVudElkOiBvYmouZG9jdW1lbnRJZCxcbiAgICAgICAgICAgICAgICBhbW91bnRTYXRzOiBOdW1iZXIob2JqLmFtb3VudFNhdHMpLFxuICAgICAgICAgICAgICAgIGNvbmZpZzogb2JqLmNvbmZpZyB8fCB7fSxcbiAgICAgICAgICAgICAgICBkb2N1bWVudDogb2JqLmRvY3VtZW50IHx8IG51bGwsXG4gICAgICAgICAgICAgICAgZG9jdW1lbnROYW1lOiBvYmouZG9jdW1lbnROYW1lIHx8IChvYmouZG9jdW1lbnQgJiYgb2JqLmRvY3VtZW50Lm5hbWUpIHx8IG9iai5kb2N1bWVudElkLFxuICAgICAgICAgICAgICAgIHNlbmRlckFkZHJlc3MsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWRBdDogY3JlYXRlZCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6ICdwZW5kaW5nJ1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJvcG9zYWwgPSB0aGlzLl9wYXJzZURpc3RyaWJ1dGVQcm9wb3NhbChcbiAgICAgICAgICAgICAgICB0eXBlb2Ygb2JqLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gb2JqLmNvbnRlbnQgOiBKU09OLnN0cmluZ2lmeShvYmopLFxuICAgICAgICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wb3NhbCkge1xuICAgICAgICAgICAgICB0aGlzLl9zdG9yZURpc3RyaWJ1dGVQcm9wb3NhbChwcm9wb3NhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAnUDJQX1BFRVJfQUxJQVMnOlxuICAgICAgICAgIGNhc2UgUDJQX1BFRVJfQUxJQVM6IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSAocGF5bG9hZC5vYmplY3QgJiYgcGF5bG9hZC5vYmplY3QubmFtZSAhPSBudWxsKVxuICAgICAgICAgICAgICA/IFN0cmluZyhwYXlsb2FkLm9iamVjdC5uYW1lKS50cmltKClcbiAgICAgICAgICAgICAgOiAocGF5bG9hZC5uYW1lICE9IG51bGwgPyBTdHJpbmcocGF5bG9hZC5uYW1lKS50cmltKCkgOiAnJyk7XG4gICAgICAgICAgICBjb25zdCBhbGlhc1RleHQgPSBuYW1lIHx8ICh0eXBlb2YgcGF5bG9hZCA9PT0gJ3N0cmluZycgPyBwYXlsb2FkLnRyaW0oKSA6ICcnKTtcbiAgICAgICAgICAgIGlmIChhbGlhc1RleHQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcGVlckFsaWFzQnlJZCA9IHRoaXMuX3BlZXJBbGlhc0J5SWQgfHwge307XG4gICAgICAgICAgICAgIC8vIFRydXN0IHRoZSBXZWJSVEMgc2Vzc2lvbiBwZWVyIGlkLCBub3QgZm9yZ2VhYmxlIEpTT04gYWN0b3IuaWQuXG4gICAgICAgICAgICAgIGNvbnN0IHNpZ25lcklkID0gcGVlcklkO1xuICAgICAgICAgICAgICB0aGlzLl9wZWVyQWxpYXNCeUlkW3NpZ25lcklkXSA9IGFsaWFzVGV4dC5zbGljZSgwLCA2NCk7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9pc0Nvbm5lY3RlZCAmJiB0aGlzLndzICYmIHRoaXMud3MucmVhZHlTdGF0ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbmRKU09OUlBDKHtcbiAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1JlbGF5RnJvbVdlYlJUQycsXG4gICAgICAgICAgICAgICAgICBwYXJhbXM6IFt7XG4gICAgICAgICAgICAgICAgICAgIGZyb21QZWVySWQ6IHBlZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgZW52ZWxvcGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbDogYWxpYXNUZXh0LnNsaWNlKDAsIDY0KSxcbiAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFR5cGU6IE1lc3NhZ2UuY2Fub25pY2FsVHlwZU5hbWUoUDJQX1BFRVJfQUxJQVMpLFxuICAgICAgICAgICAgICAgICAgICAgIGhvcHM6IFt7IGZyb206IHBlZXJJZCwgYXQ6IERhdGUubm93KCkgfV1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLl93ZWJydGNSZXdhcmRQZWVyKHBlZXJJZCwgMSwgJ3BlZXItYWxpYXMnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdQMlBfQ0hBVF9NRVNTQUdFJzpcbiAgICAgICAgICBjYXNlIFAyUF9DSEFUX01FU1NBR0U6IHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQMnBDaGF0TWVzc2FnZShwYXlsb2FkLCB7IGRlZmF1bHRBY3RvcklkOiBwZWVySWQgfSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gY2hhdFRleHRPZihub3JtYWxpemVkIHx8IHBheWxvYWQpO1xuICAgICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJyA/IHRleHQudHJpbSgpIDogJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5faGFuZGxlSHRsY0tleVJldmVhbCh0cmltbWVkKSkgYnJlYWs7XG4gICAgICAgICAgICBjb25zdCBwcm9wb3NhbCA9IHRoaXMuX3BhcnNlRGlzdHJpYnV0ZVByb3Bvc2FsKHRyaW1tZWQsIHBheWxvYWQpO1xuICAgICAgICAgICAgaWYgKHByb3Bvc2FsKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3N0b3JlRGlzdHJpYnV0ZVByb3Bvc2FsKHByb3Bvc2FsKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRyaW1tZWQgfHwgIW5vcm1hbGl6ZWQpIGJyZWFrO1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlZCA9IChub3JtYWxpemVkLm9iamVjdCAmJiBub3JtYWxpemVkLm9iamVjdC5jcmVhdGVkKSB8fCBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY29uc3QgYWN0b3JJZCA9IChub3JtYWxpemVkLmFjdG9yICYmIG5vcm1hbGl6ZWQuYWN0b3IuaWQpIHx8IHBlZXJJZDtcbiAgICAgICAgICAgIGNvbnN0IGluY29taW5nQ2xpZW50SWQgPSAobm9ybWFsaXplZC5vYmplY3QgJiYgbm9ybWFsaXplZC5vYmplY3QuY2xpZW50SWQpIHx8IG51bGw7XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIGxvY2FsIGNoYXQgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBVSVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgY2xpZW50SWQgPSBpbmNvbWluZ0NsaWVudElkIHx8ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpZW50QWN0b3IgPSBuZXcgQWN0b3Ioe1xuICAgICAgICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXNzYWdlLmNhbm9uaWNhbFR5cGVOYW1lKFAyUF9DSEFUX01FU1NBR0UpLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBwZWVySWQsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRyaW1tZWQsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50QWN0b3IuaWQ7XG4gICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgaWYgKGNsaWVudElkICYmIHRoaXMuZ2xvYmFsU3RhdGUgJiYgdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyAmJiB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzW2NsaWVudElkXSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgY2hhdCA9IE9iamVjdC5hc3NpZ24oe30sIG5vcm1hbGl6ZWQsIHtcbiAgICAgICAgICAgICAgICBhY3RvcjogeyBpZDogYWN0b3JJZCB9LFxuICAgICAgICAgICAgICAgIG9iamVjdDogT2JqZWN0LmFzc2lnbih7fSwgbm9ybWFsaXplZC5vYmplY3QsIHsgY2xpZW50SWQgfSksXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBwZWVySWQsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiAncmVjZWl2ZWQnLFxuICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogJ3dlYnJ0YycsXG4gICAgICAgICAgICAgICAgZGVsaXZlcnk6IHtcbiAgICAgICAgICAgICAgICAgIHZpYTogJ21lc2gnLFxuICAgICAgICAgICAgICAgICAgZnJvbVBlZXJJZDogcGVlcklkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzID0gdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyB8fCB7fTtcbiAgICAgICAgICAgICAgdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlc1tjbGllbnRJZF0gPSBjaGF0O1xuXG4gICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICBvcGVyYXRpb246IHsgb3A6ICdhZGQnLCBwYXRoOiBgL21lc3NhZ2VzLyR7Y2xpZW50SWR9YCwgdmFsdWU6IGNoYXQgfSxcbiAgICAgICAgICAgICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHRoaXMuX3BlcnNpc3RNZXNzYWdlcygpO1xuXG4gICAgICAgICAgICAgIC8vIFJlbGF5IGNoYXQgaW4gdGhlIGVudmVsb3BlIHNoYXBlIEh1YiAvIFAyUF9SRUxBWSByZWNlaXZlcnMgZXhwZWN0LlxuICAgICAgICAgICAgICBpZiAodGhpcy5faXNDb25uZWN0ZWQgJiYgdGhpcy53cyAmJiB0aGlzLndzLnJlYWR5U3RhdGUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnZlbG9wZSA9IHtcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IE1lc3NhZ2UuY2Fub25pY2FsVHlwZU5hbWUoUDJQX0NIQVRfTUVTU0FHRSksXG4gICAgICAgICAgICAgICAgICAgIGFjdG9yOiB7IGlkOiBhY3RvcklkIH0sXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRyaW1tZWQsXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCxcbiAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJZFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVHlwZTogTWVzc2FnZS5jYW5vbmljYWxUeXBlTmFtZShQMlBfQ0hBVF9NRVNTQUdFKSxcbiAgICAgICAgICAgICAgICAgIGhvcHM6IFt7IGZyb206IHBlZXJJZCwgYXQ6IERhdGUubm93KCkgfV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbmRKU09OUlBDKHtcbiAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1JlbGF5RnJvbVdlYlJUQycsXG4gICAgICAgICAgICAgICAgICBwYXJhbXM6IFt7IGZyb21QZWVySWQ6IHBlZXJJZCwgZW52ZWxvcGUgfV1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLl93ZWJydGNSZXdhcmRQZWVyKHBlZXJJZCwgMSwgJ2NoYXQnKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdbQlJJREdFXScsICdDb3VsZCBub3QgY3JlYXRlIGxvY2FsIFdlYlJUQyBjaGF0IG1lc3NhZ2U6Jywgc2FmZUlkZW50aXR5RXJyKGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gUGFzcyB0aHJvdWdoIHRvIHRoZSBnZW5lcmFsIFdlYlJUQyBtZXNzYWdlIGhhbmRsZXJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlV2ViUlRDTWVzc2FnZShwYXlsb2FkLCBwZWVySWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIGhhbmRsaW5nIFdlYlJUQyBwZWVyIG1lc3NhZ2U6Jywgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBtZXNzYWdlIHRvIGEgc3BlY2lmaWMgV2ViUlRDIHBlZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwZWVySWQgLSBUaGUgcGVlciBJRCB0byBzZW5kIHRvXG4gICAqIEBwYXJhbSB7Kn0gZGF0YSAtIFRoZSBkYXRhIHRvIHNlbmRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgc2VudCBzdWNjZXNzZnVsbHlcbiAgICovXG4gIHNlbmRUb1dlYlJUQ1BlZXIgKHBlZXJJZCwgZGF0YSkge1xuICAgIGNvbnN0IHBlZXJJbmZvID0gdGhpcy53ZWJydGNQZWVycy5nZXQocGVlcklkKTtcbiAgICBpZiAoIXBlZXJJbmZvIHx8ICFwZWVySW5mby5jb25uZWN0aW9uIHx8IHBlZXJJbmZvLnN0YXR1cyAhPT0gJ2Nvbm5lY3RlZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnQ2Fubm90IHNlbmQgdG8gV2ViUlRDIHBlZXI6JywgcGVlcklkLCAnLSBub3QgY29ubmVjdGVkJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhLnRvQnVmZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IGRhdGEudG9CdWZmZXIoKTtcbiAgICAgICAgY29uc3QgYWIgPSBidWYuYnVmZmVyLnNsaWNlKGJ1Zi5ieXRlT2Zmc2V0LCBidWYuYnl0ZU9mZnNldCArIGJ1Zi5ieXRlTGVuZ3RoKTtcbiAgICAgICAgcGVlckluZm8uY29ubmVjdGlvbi5zZW5kKGFiKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQnVmZmVyLmlzQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgICBjb25zdCBhYiA9IGRhdGEuYnVmZmVyLnNsaWNlKGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlT2Zmc2V0ICsgZGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgcGVlckluZm8uY29ubmVjdGlvbi5zZW5kKGFiKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcGVlckluZm8uY29ubmVjdGlvbi5zZW5kKGRhdGEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG91dGJvdW5kID0gKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKVxuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gICAgICAgIDogZGF0YTtcbiAgICAgIHBlZXJJbmZvLmNvbm5lY3Rpb24uc2VuZChvdXRib3VuZCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3Igc2VuZGluZyB0byBXZWJSVEMgcGVlcjonLCBwZWVySWQsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCcm9hZGNhc3QgYSBtZXNzYWdlIHRvIGFsbCBjb25uZWN0ZWQgV2ViUlRDIHBlZXJzLlxuICAgKiBAcGFyYW0geyp9IGRhdGEgLSBUaGUgZGF0YSB0byBicm9hZGNhc3RcbiAgICogQHJldHVybnMge251bWJlcn0gTnVtYmVyIG9mIHBlZXJzIHRoZSBtZXNzYWdlIHdhcyBzZW50IHRvXG4gICAqL1xuICBicm9hZGNhc3RUb1dlYlJUQ1BlZXJzIChkYXRhKSB7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHRoaXMuYnJvYWRjYXN0VG9XZWJSVENQZWVyc1dpdGhSZWNpcGllbnRzKGRhdGEpO1xuICAgIHJldHVybiByZWNpcGllbnRzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCcm9hZGNhc3QgYSBtZXNzYWdlIHRvIGFsbCBjb25uZWN0ZWQgV2ViUlRDIHBlZXJzIGFuZCByZXR1cm4gcmVjaXBpZW50IElEcy5cbiAgICogQHBhcmFtIHsqfSBkYXRhIC0gVGhlIGRhdGEgdG8gYnJvYWRjYXN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gUGVlciBJRHMgdGhhdCBhY2NlcHRlZCB0aGUgc2VuZFxuICAgKi9cbiAgYnJvYWRjYXN0VG9XZWJSVENQZWVyc1dpdGhSZWNpcGllbnRzIChkYXRhKSB7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IFtdO1xuICAgIGZvciAoY29uc3QgW3BlZXJJZCwgcGVlckluZm9dIG9mIHRoaXMud2VicnRjUGVlcnMpIHtcbiAgICAgIGlmIChwZWVySW5mby5zdGF0dXMgPT09ICdjb25uZWN0ZWQnICYmIHRoaXMuc2VuZFRvV2ViUlRDUGVlcihwZWVySWQsIGRhdGEpKSB7XG4gICAgICAgIHJlY2lwaWVudHMucHVzaChwZWVySWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVjaXBpZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgcGVlciBsaXN0IGZvciBnb3NzaXAgKHNlbGYgKyBjb25uZWN0ZWQgcGVlcnMpLlxuICAgKiBVc2VkIHNvIGNsdXN0ZXJzIGNvbm5lY3RlZCB0byBkaWZmZXJlbnQgYnJpZGdlIGluc3RhbmNlcyBjYW4gZGlzY292ZXIgb25lIGFub3RoZXIuXG4gICAqL1xuICBfYnVpbGRXZWJSVENQZWVyR29zc2lwUGF5bG9hZCAoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwZWVycyA9IFtdO1xuICAgIGlmICh0aGlzLnBlZXJJZCkge1xuICAgICAgcGVlcnMucHVzaCh7IGlkOiB0aGlzLnBlZXJJZCwgbGFzdFNlZW46IG5vdywgcmVnaXN0ZXJlZEF0OiBub3cgfSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2lkLCBpbmZvXSBvZiB0aGlzLndlYnJ0Y1BlZXJzKSB7XG4gICAgICBpZiAoaW5mbyAmJiBpbmZvLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcgJiYgaWQgJiYgaWQgIT09IHRoaXMucGVlcklkKSB7XG4gICAgICAgIHBlZXJzLnB1c2goe1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIGxhc3RTZWVuOiBpbmZvLmxhc3RTZWVuIHx8IGluZm8uY29ubmVjdGVkQXQgfHwgbm93LFxuICAgICAgICAgIHJlZ2lzdGVyZWRBdDogaW5mby5yZWdpc3RlcmVkQXQgfHwgaW5mby5jb25uZWN0ZWRBdCB8fCBub3dcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAvLyBKU09OIC8gV2ViUlRDIGFwcCBmcmFtZXMgdXNlIHRoZSB3aXJlIG5hbWU7IEFNUCBvcGNvZGUgcmVtYWlucyBQMlBfUEVFUl9HT1NTSVAgKDB4NjEpLlxuICAgICAgdHlwZTogTWVzc2FnZS5jYW5vbmljYWxUeXBlTmFtZShQMlBfUEVFUl9HT1NTSVApLFxuICAgICAgYWN0b3I6IHsgaWQ6IHRoaXMucGVlcklkIH0sXG4gICAgICBvYmplY3Q6IHsgcGVlcnMsIHRpbWVzdGFtcDogbm93LCByZWxheVR0bDogOCB9LFxuICAgICAgdGltZXN0YW1wOiBub3dcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgcGVlcmluZyBvZmZlciBwYXlsb2FkIChwZWVyIG5lZWRzIG1vcmUgY29ubmVjdGlvbnMpLlxuICAgKiBHb3NzaXBlZCB1bnRpbCBmdWxmaWxsZWQuXG4gICAqL1xuICBfYnVpbGRQZWVyaW5nT2ZmZXJQYXlsb2FkIChzbG90cyA9IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogTWVzc2FnZS5jYW5vbmljYWxUeXBlTmFtZShQMlBfUEVFUklOR19PRkZFUiksXG4gICAgICBhY3RvcjogeyBpZDogdGhpcy5wZWVySWQgfSxcbiAgICAgIG9iamVjdDogeyBzbG90cywgdHJhbnNwb3J0OiAnd2VicnRjJywgdGltZXN0YW1wOiBEYXRlLm5vdygpLCByZWxheVR0bDogOCB9LFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIG91ciBrbm93biBwZWVyIGxpc3QgdG8gYSBzcGVjaWZpYyBXZWJSVEMgcGVlciAoZ29zc2lwIGZvciBjcm9zcy1jbHVzdGVyIGRpc2NvdmVyeSkuXG4gICAqL1xuICBfc2VuZFdlYlJUQ1BlZXJHb3NzaXAgKHRvUGVlcklkKSB7XG4gICAgaWYgKCF0b1BlZXJJZCB8fCAhdGhpcy5wZWVySWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5fYnVpbGRXZWJSVENQZWVyR29zc2lwUGF5bG9hZCgpO1xuICAgIHJldHVybiB0aGlzLnNlbmRUb1dlYlJUQ1BlZXIodG9QZWVySWQsIHBheWxvYWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJyb2FkY2FzdCBvdXIgcGVlciBsaXN0IHRvIGFsbCBjb25uZWN0ZWQgV2ViUlRDIHBlZXJzLlxuICAgKiBFbmFibGVzIGNsdXN0ZXJzIG9uIGRpZmZlcmVudCBIdWJzIHRvIGRpc2NvdmVyIGVhY2ggb3RoZXIgd2hlbiBhdCBsZWFzdCBvbmUgY3Jvc3MtY2x1c3RlciBsaW5rIGV4aXN0cy5cbiAgICovXG4gIF9icm9hZGNhc3RXZWJSVENQZWVyR29zc2lwICgpIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuYnJvYWRjYXN0VG9XZWJSVENQZWVyc1dpdGhSZWNpcGllbnRzKHRoaXMuX2J1aWxkV2ViUlRDUGVlckdvc3NpcFBheWxvYWQoKSkubGVuZ3RoO1xuICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgIHRoaXMuX2xhc3RXZWJSVENHb3NzaXBBdCA9IERhdGUubm93KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJyb2FkY2FzdCBhIHBlZXJpbmcgb2ZmZXIgdG8gYWxsIGNvbm5lY3RlZCBXZWJSVEMgcGVlcnMuXG4gICAqIEdvc3NpcGVkIHVudGlsIGZ1bGZpbGxlZDsgcmVjaXBpZW50cyBtYXkgY29ubmVjdCBpZiB0aGV5IGhhdmUgY2FwYWNpdHkuXG4gICAqL1xuICBfYnJvYWRjYXN0UGVlcmluZ09mZmVyIChzbG90cyA9IDEpIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuYnJvYWRjYXN0VG9XZWJSVENQZWVyc1dpdGhSZWNpcGllbnRzKHRoaXMuX2J1aWxkUGVlcmluZ09mZmVyUGF5bG9hZChzbG90cykpLmxlbmd0aDtcbiAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICB0aGlzLl9sYXN0UGVlcmluZ09mZmVyQXQgPSBEYXRlLm5vdygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjb25uZWN0IGZyb20gYSBzcGVjaWZpYyBXZWJSVEMgcGVlciBieSBJRC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBlZXJJZCAtIFRoZSBwZWVyIElEIHRvIGRpc2Nvbm5lY3RcbiAgICovXG4gIGRpc2Nvbm5lY3RXZWJSVENQZWVyIChwZWVySWQpIHtcbiAgICBpZiAoIXBlZXJJZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmZvID0gdGhpcy53ZWJydGNQZWVycy5nZXQocGVlcklkKTtcbiAgICBpZiAoZXhpc3RpbmdJbmZvICYmIGV4aXN0aW5nSW5mby5zdGF0dXMgPT09ICdjb25uZWN0ZWQnKSB7XG4gICAgICB0aGlzLl9odWJSZXBvcnRXZWJSVENQZWVyRGlzY29ubmVjdGVkKHBlZXJJZCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3dlYnJ0Y0Nvbm5lY3RUaW1lcnMgJiYgdGhpcy5fd2VicnRjQ29ubmVjdFRpbWVycy5oYXMocGVlcklkKSkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3dlYnJ0Y0Nvbm5lY3RUaW1lcnMuZ2V0KHBlZXJJZCkpO1xuICAgICAgdGhpcy5fd2VicnRjQ29ubmVjdFRpbWVycy5kZWxldGUocGVlcklkKTtcbiAgICB9XG5cbiAgICBjb25zdCBwZWVySW5mbyA9IHRoaXMud2VicnRjUGVlcnMuZ2V0KHBlZXJJZCk7XG4gICAgY29uc3QgcnRjRW50cnkgPSB0aGlzLl9ydGNQZWVycy5nZXQocGVlcklkKTtcblxuICAgIGlmIChwZWVySW5mbyAmJiBwZWVySW5mby5jb25uZWN0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwZWVySW5mby5jb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tCUklER0VdJywgJ0Vycm9yIGNsb3NpbmcgV2ViUlRDIGNvbm5lY3Rpb24gZm9yIHBlZXI6JywgcGVlcklkLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocnRjRW50cnkgJiYgcnRjRW50cnkuZGMgJiYgcnRjRW50cnkuZGMgIT09IChwZWVySW5mbyAmJiBwZWVySW5mby5jb25uZWN0aW9uKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcnRjRW50cnkuZGMuY2xvc2UoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnRXJyb3IgY2xvc2luZyBXZWJSVEMgZGF0YSBjaGFubmVsIGZvciBwZWVyOicsIHBlZXJJZCwgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJ0Y0VudHJ5ICYmIHJ0Y0VudHJ5LnBjKSB7XG4gICAgICB0cnkge1xuICAgICAgICBydGNFbnRyeS5wYy5jbG9zZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbQlJJREdFXScsICdFcnJvciBjbG9zaW5nIFJUQ1BlZXJDb25uZWN0aW9uIGZvciBwZWVyOicsIHBlZXJJZCwgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy53ZWJydGNQZWVycy5kZWxldGUocGVlcklkKTtcbiAgICB0aGlzLl9ydGNQZWVycy5kZWxldGUocGVlcklkKTtcbiAgICB0aGlzLl9ydGNQZW5kaW5nSWNlLmRlbGV0ZShwZWVySWQpO1xuICAgIGlmICh0aGlzLl9mYWJyaWNUcmFuc3BvcnRTZXNzaW9ucyAmJiB0aGlzLl9mYWJyaWNUcmFuc3BvcnRTZXNzaW9ucy5oYXMocGVlcklkKSkge1xuICAgICAgdGhpcy5fZmFicmljVHJhbnNwb3J0U2Vzc2lvbnMuZGVsZXRlKHBlZXJJZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25uZWN0aW5nUGVlcnMgJiYgdGhpcy5fY29ubmVjdGluZ1BlZXJzLmhhcyhwZWVySWQpKSB7XG4gICAgICB0aGlzLl9jb25uZWN0aW5nUGVlcnMuZGVsZXRlKHBlZXJJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5fd2VicnRjQ29ubmVjdGVkID0gdGhpcy5nZXRXZWJSVENQZWVyQ291bnQoKSA+IDA7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHdlYnJ0Y0Nvbm5lY3RlZDogdGhpcy5fd2VicnRjQ29ubmVjdGVkIH0pO1xuXG4gICAgLy8gTm8gSlNPTi1SUEMgbm90aWZpY2F0aW9uIGhlcmU7IG5vcm1hbCBjbG9zZSBoYW5kbGVycyB3aWxsIGVtaXQgaWYgbmVlZGVkLlxuICAgIHRyeSB7XG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjb25uZWN0IGZyb20gYWxsIHRyYWNrZWQgV2ViUlRDIHBlZXJzLlxuICAgKi9cbiAgZGlzY29ubmVjdEFsbFdlYlJUQ1BlZXJzICgpIHtcbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBbcGVlcklkLCBwZWVySW5mb10gb2YgdGhpcy53ZWJydGNQZWVycykge1xuICAgICAgICBpZiAocGVlckluZm8gJiYgcGVlckluZm8uc3RhdHVzID09PSAnY29ubmVjdGVkJykge1xuICAgICAgICAgIHRoaXMuX2h1YlJlcG9ydFdlYlJUQ1BlZXJEaXNjb25uZWN0ZWQocGVlcklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBbcGVlcklkLCBwZWVySW5mb10gb2YgdGhpcy53ZWJydGNQZWVycykge1xuICAgICAgICBpZiAocGVlckluZm8gJiYgcGVlckluZm8uY29ubmVjdGlvbikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwZWVySW5mby5jb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnRXJyb3IgY2xvc2luZyBXZWJSVEMgY29ubmVjdGlvbiBmb3IgcGVlcjonLCBwZWVySWQsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICB0aGlzLndlYnJ0Y1BlZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5fcnRjUGVlcnMuY2xlYXIoKTtcbiAgICB0aGlzLl9ydGNQZW5kaW5nSWNlLmNsZWFyKCk7XG4gICAgaWYgKHRoaXMuX2ZhYnJpY1RyYW5zcG9ydFNlc3Npb25zKSB7XG4gICAgICBjb25zdCBodWIgPSB0aGlzLl9mYWJyaWNUcmFuc3BvcnRTZXNzaW9ucy5nZXQoSFVCX0ZBQlJJQ19TRVNTSU9OX0lEKTtcbiAgICAgIHRoaXMuX2ZhYnJpY1RyYW5zcG9ydFNlc3Npb25zLmNsZWFyKCk7XG4gICAgICBpZiAoaHViKSB0aGlzLl9mYWJyaWNUcmFuc3BvcnRTZXNzaW9ucy5zZXQoSFVCX0ZBQlJJQ19TRVNTSU9OX0lELCBodWIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29ubmVjdGluZ1BlZXJzICYmIHRoaXMuX2Nvbm5lY3RpbmdQZWVycy5zaXplKSB7XG4gICAgICB0aGlzLl9jb25uZWN0aW5nUGVlcnMuY2xlYXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3dlYnJ0Y0Nvbm5lY3RUaW1lcnMgJiYgdGhpcy5fd2VicnRjQ29ubmVjdFRpbWVycy5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IHRpbWVyIG9mIHRoaXMuX3dlYnJ0Y0Nvbm5lY3RUaW1lcnMudmFsdWVzKCkpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3dlYnJ0Y0Nvbm5lY3RUaW1lcnMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLl93ZWJydGNDb25uZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnNldFN0YXRlKHsgd2VicnRjQ29ubmVjdGVkOiBmYWxzZSB9KTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0aGlzLl9ub3RpZnlQZWVyTGlzdFVpUmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY291bnQgb2YgYWN0aXZlIFdlYlJUQyBwZWVyIGNvbm5lY3Rpb25zLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBOdW1iZXIgb2YgY29ubmVjdGVkIHBlZXJzXG4gICAqL1xuICBnZXRXZWJSVENQZWVyQ291bnQgKCkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgZm9yIChjb25zdCBwZWVySW5mbyBvZiB0aGlzLndlYnJ0Y1BlZXJzLnZhbHVlcygpKSB7XG4gICAgICBpZiAocGVlckluZm8uc3RhdHVzID09PSAnY29ubmVjdGVkJykgY291bnQrKztcbiAgICB9XG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIExvdy1sZXZlbCBoZWxwZXIgdG8gZW5jb2RlIGFuZCBzZW5kIGEgSlNPTi1SUEMgcGF5bG9hZCBvbiBhbiBvcGVuIFdlYlNvY2tldC5cbiAgICogQ2FsbGVyIE1VU1QgZW5zdXJlIHRoZSBzb2NrZXQgaXMgb3Blbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IHBheWxvYWQgLSBUaGUgSlNPTi1SUEMgcGF5bG9hZFxuICAgKi9cbiAgX3NlbmRKU09OUlBDTm93IChwYXlsb2FkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLmZyb21WZWN0b3IoWydKU09OQ2FsbCcsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXSk7XG4gICAgICB0aGlzLndzLnNlbmQobWVzc2FnZS50b0J1ZmZlcigpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3Igc2VuZGluZyBKU09OLVJQQzonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIEpTT04tUlBDIG1lc3NhZ2UgdmlhIFdlYlNvY2tldC5cbiAgICogSWYgdGhlIFdlYlNvY2tldCBpcyBub3QgeWV0IGNvbm5lY3RlZCwgcXVldWUgdGhlIHBheWxvYWQgdG8gYmUgc2VudCBvbiBvcGVuLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZCAtIFRoZSBKU09OLVJQQyBwYXlsb2FkXG4gICAqL1xuICBfc2VuZEpTT05SUEMgKHBheWxvYWQpIHtcbiAgICBpZiAoIXRoaXMud3MgfHwgdGhpcy53cy5yZWFkeVN0YXRlICE9PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnUXVldWVpbmcgSlNPTi1SUEMgKFdlYlNvY2tldCBub3QgY29ubmVjdGVkIHlldCknKTtcbiAgICAgIHRoaXMuX2pzb25ScGNRdWV1ZS5wdXNoKHBheWxvYWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3NlbmRKU09OUlBDTm93KHBheWxvYWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgSHViIEpTT04tUlBDIG92ZXIgSFRUUCBQT1NUIC9zZXJ2aWNlcy9ycGMgKHNhbWUgbWV0aG9kIHNldCBhcyBXZWJTb2NrZXQgSlNPTkNhbGwpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIC0gZS5nLiBMaXN0Q29sbGFib3JhdGlvbkdyb3Vwc1xuICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gLSBTaW5nbGUgb2JqZWN0IGJlY29tZXMgSlNPTi1SUEMgcGFyYW1zWzBdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgcmVzdWx0OiAqIH18eyBlcnJvcjogc3RyaW5nIH0+fVxuICAgKi9cbiAgYXN5bmMgY2FsbEh1Ykpzb25ScGMgKG1ldGhvZCwgcGFyYW1zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB7IGVycm9yOiAnY2FsbEh1Ykpzb25ScGMgcmVxdWlyZXMgd2luZG93JyB9O1xuICAgIGNvbnN0IG9yaWdpbiA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgdGhpcy5faHViSnNvblJwY1NlcSA9ICh0aGlzLl9odWJKc29uUnBjU2VxIHx8IDApICsgMTtcbiAgICBjb25zdCBpZCA9IHRoaXMuX2h1Ykpzb25ScGNTZXE7XG4gICAgbGV0IHJlcztcbiAgICB0cnkge1xuICAgICAgcmVzID0gYXdhaXQgZmV0Y2goYCR7b3JpZ2lufS9zZXJ2aWNlcy9ycGNgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB0aGlzLl9odWJKc29uUnBjSHR0cEhlYWRlcnMoKSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIG1ldGhvZDogU3RyaW5nKG1ldGhvZCB8fCAnJyksXG4gICAgICAgICAgcGFyYW1zOiBbcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnID8gcGFyYW1zIDoge31dXG4gICAgICAgIH0pLFxuICAgICAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICAgICAgY2FjaGU6ICduby1zdG9yZSdcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiBlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSB9O1xuICAgIH1cbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgcmV0dXJuIHsgZXJyb3I6IChib2R5ICYmIChib2R5LmVycm9yIHx8IGJvZHkubWVzc2FnZSkpIHx8IGBIVFRQICR7cmVzLnN0YXR1c31gIH07XG4gICAgfVxuICAgIGlmIChib2R5ICYmIGJvZHkuZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGJvZHkuZXJyb3IubWVzc2FnZSB8fCBib2R5LmVycm9yLmRhdGEgfHwgSlNPTi5zdHJpbmdpZnkoYm9keS5lcnJvcik7XG4gICAgICByZXR1cm4geyBlcnJvcjogU3RyaW5nKG1zZyB8fCAnUlBDIGVycm9yJykgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcmVzdWx0OiBib2R5ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAncmVzdWx0JykgPyBib2R5LnJlc3VsdCA6IG51bGwgfTtcbiAgfVxuXG4gIGFkZEpvYiAodHlwZSwgZGF0YSkge1xuICAgIHRoaXMucXVldWUucHVzaCh7IHR5cGUsIGRhdGEgfSk7XG4gIH1cblxuICB0YWtlSm9iICgpIHtcbiAgICBpZiAoIXRoaXMucXVldWUubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3Qgam9iID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgIGlmICgham9iKSByZXR1cm47XG5cbiAgICBzd2l0Y2ggKGpvYi50eXBlKSB7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLndhcm4oJ1tCUklER0VdJywgJ1VuaGFuZGxlZCBCcmlkZ2Ugam9iIHR5cGU6Jywgam9iLnR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ01lc3NhZ2VDaHVuayc6XG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ01lc3NhZ2VDaHVuazonLCBqb2IuZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnTWVzc2FnZUVuZCc6XG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ01lc3NhZ2VFbmQ6Jywgam9iLmRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ01lc3NhZ2VTdGFydCc6XG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ01lc3NhZ2VTdGFydDonLCBqb2IuZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgeyBkYXRhLCBlcnJvciwgaXNDb25uZWN0ZWQsIHdlYnJ0Y0Nvbm5lY3RlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGlmIChlcnJvciAmJiB0aGlzLnNldHRpbmdzLmRlYnVnKSB7XG4gICAgICByZXR1cm4gPGRpdj5FcnJvcjoge2Vycm9yfTwvZGl2PjtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGEgJiYgdGhpcy5zZXR0aW5ncy5kZWJ1Zykge1xuICAgICAgcmV0dXJuIDxkaXY+TG9hZGluZy4uLjwvZGl2PjtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGZhYnJpYy1icmlkZ2U+XG4gICAgICAgIHt0aGlzLnNldHRpbmdzLmRlYnVnID8gKFxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDE+Q29ubmVjdGlvbiBTdGF0dXM6PC9oMT5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxzdHJvbmc+V2ViU29ja2V0Ojwvc3Ryb25nPiB7aXNDb25uZWN0ZWQgPyAn4pyFIENvbm5lY3RlZCcgOiAn4p2MIERpc2Nvbm5lY3RlZCd9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxzdHJvbmc+V2ViUlRDOjwvc3Ryb25nPiB7d2VicnRjQ29ubmVjdGVkID8gJ+KchSBDb25uZWN0ZWQnIDogJ+KdjCBEaXNjb25uZWN0ZWQnfVxuICAgICAgICAgICAgICB7dGhpcy5wZWVySWQgJiYgYCAoJHt0aGlzLnBlZXJJZH0pYH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGgxPkRhdGEgUmVjZWl2ZWQ6PC9oMT5cbiAgICAgICAgICAgIDxwcmU+e3NhZmVEZWJ1Z1N0YXRlUHJldmlldyhkYXRhKX08L3ByZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2ZhYnJpYy1icmlkZ2U+XG4gICAgKTtcbiAgfVxuXG4gIHN0YXJ0ICgpIHtcbiAgICB0aGlzLmNvbm5lY3QoJy8nKTtcbiAgICAvLyBJbml0aWFsaXplIFdlYlJUQyBjb25uZWN0aW9uXG4gICAgdGhpcy5pbml0aWFsaXplV2ViUlRDKCk7XG4gICAgLy8gU3RhcnQgaGVhcnRiZWF0IGludGVydmFsXG4gICAgaWYgKHRoaXMuX2hlYXJ0YmVhdCkgY2xlYXJJbnRlcnZhbCh0aGlzLl9oZWFydGJlYXQpO1xuICAgIHRoaXMuX2hlYXJ0YmVhdCA9IHNldEludGVydmFsKHRoaXMudGljay5iaW5kKHRoaXMpLCB0aGlzLnNldHRpbmdzLnRpY2tyYXRlKTtcbiAgfVxuXG4gIHN0b3AgKCkge1xuICAgIGlmICh0aGlzLl9oZWFydGJlYXQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faGVhcnRiZWF0KTtcbiAgICAgIHRoaXMuX2hlYXJ0YmVhdCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgcGVlciBkaXNjb3ZlcnkgdGltZXJcbiAgICBpZiAodGhpcy5fcGVlckRpc2NvdmVyeVRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcGVlckRpc2NvdmVyeVRpbWVyKTtcbiAgICAgIHRoaXMuX3BlZXJEaXNjb3ZlcnlUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLl9wZWVyTGlzdFVpUmVmcmVzaFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcGVlckxpc3RVaVJlZnJlc2hUaW1lcik7XG4gICAgICB0aGlzLl9wZWVyTGlzdFVpUmVmcmVzaFRpbWVyID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDbGVhbiB1cCBXZWJTb2NrZXRcbiAgICBpZiAodGhpcy53cykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy53cy5vbm9wZW4gPSBudWxsO1xuICAgICAgICB0aGlzLndzLm9ubWVzc2FnZSA9IG51bGw7XG4gICAgICAgIHRoaXMud3Mub25lcnJvciA9IG51bGw7XG4gICAgICAgIHRoaXMud3Mub25jbG9zZSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLndzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOIHx8IHRoaXMud3MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNPTk5FQ1RJTkcpIHtcbiAgICAgICAgICB0aGlzLndzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbQlJJREdFXScsICdFcnJvciBjbGVhbmluZyB1cCBXZWJTb2NrZXQgb24gc3RvcDonLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgICAgfVxuICAgICAgdGhpcy53cyA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgYWxsIFdlYlJUQyBwZWVyIGNvbm5lY3Rpb25zXG4gICAgZm9yIChjb25zdCBbcGVlcklkLCBwZWVySW5mb10gb2YgdGhpcy53ZWJydGNQZWVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHBlZXJJbmZvLmNvbm5lY3Rpb24pIHtcbiAgICAgICAgICBwZWVySW5mby5jb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbQlJJREdFXScsICdFcnJvciBjbG9zaW5nIFdlYlJUQyBwZWVyIGNvbm5lY3Rpb246JywgcGVlcklkLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLndlYnJ0Y1BlZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5fY29ubmVjdGluZ1BlZXJzLmNsZWFyKCk7XG5cbiAgICAvLyBDbGVhbiB1cCBuYXRpdmUgUlRDUGVlckNvbm5lY3Rpb24gaW5zdGFuY2VzLlxuICAgIGZvciAoY29uc3QgW3BlZXJJZCwgZW50cnldIG9mIHRoaXMuX3J0Y1BlZXJzLmVudHJpZXMoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGVudHJ5ICYmIGVudHJ5LmRjICYmIHR5cGVvZiBlbnRyeS5kYy5jbG9zZSA9PT0gJ2Z1bmN0aW9uJykgZW50cnkuZGMuY2xvc2UoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZW50cnkgJiYgZW50cnkucGMgJiYgdHlwZW9mIGVudHJ5LnBjLmNsb3NlID09PSAnZnVuY3Rpb24nKSBlbnRyeS5wYy5jbG9zZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tCUklER0VdJywgJ0Vycm9yIGNsb3NpbmcgUlRDUGVlckNvbm5lY3Rpb246JywgcGVlcklkLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9ydGNQZWVycy5jbGVhcigpO1xuICAgIHRoaXMuX3J0Y1BlbmRpbmdJY2UuY2xlYXIoKTtcblxuICAgIHRoaXMuX3dlYnJ0Y0Nvbm5lY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3dlYnJ0Y1JlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHdlYnJ0Y0Nvbm5lY3RlZDogZmFsc2UgfSk7XG4gIH1cblxuICB0aWNrICgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGhlYXJ0YmVhdE1zID0gTnVtYmVyKHRoaXMuc2V0dGluZ3Mud2VicnRjSGVhcnRiZWF0SW50ZXJ2YWxNcyB8fCAzMDAwMCk7XG4gICAgY29uc3QgZGlzY292ZXJ5TXMgPSBOdW1iZXIodGhpcy5zZXR0aW5ncy53ZWJydGNEaXNjb3ZlcnlJbnRlcnZhbE1zIHx8IDE1MDAwKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMucGVlcklkICYmXG4gICAgICB0aGlzLl93ZWJydGNSZWFkeSAmJlxuICAgICAgdGhpcy53cyAmJlxuICAgICAgdGhpcy53cy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTiAmJlxuICAgICAgKCF0aGlzLl9sYXN0V2ViUlRDUHVibGlzaEF0IHx8ICgobm93IC0gdGhpcy5fbGFzdFdlYlJUQ1B1Ymxpc2hBdCkgPj0gaGVhcnRiZWF0TXMpKVxuICAgICkge1xuICAgICAgdGhpcy5wdWJsaXNoV2ViUlRDT2ZmZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBlZXJJZCAmJlxuICAgICAgdGhpcy5fd2VicnRjUmVhZHkgJiZcbiAgICAgIHRoaXMud3MgJiZcbiAgICAgIHRoaXMud3MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4gJiZcbiAgICAgICghdGhpcy5fbGFzdFdlYlJUQ0Rpc2NvdmVyQXQgfHwgKChub3cgLSB0aGlzLl9sYXN0V2ViUlRDRGlzY292ZXJBdCkgPj0gZGlzY292ZXJ5TXMpKVxuICAgICkge1xuICAgICAgdGhpcy5kaXNjb3ZlckFuZENvbm5lY3RUb1BlZXJzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZ29zc2lwTXMgPSBOdW1iZXIodGhpcy5zZXR0aW5ncy53ZWJydGNHb3NzaXBJbnRlcnZhbE1zIHx8IDI1MDAwKTtcbiAgICBjb25zdCBjb25uZWN0ZWRDb3VudCA9IHRoaXMuZ2V0V2ViUlRDUGVlckNvdW50KCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wZWVySWQgJiZcbiAgICAgIGNvbm5lY3RlZENvdW50ID4gMCAmJlxuICAgICAgKCF0aGlzLl9sYXN0V2ViUlRDR29zc2lwQXQgfHwgKChub3cgLSB0aGlzLl9sYXN0V2ViUlRDR29zc2lwQXQpID49IGdvc3NpcE1zKSlcbiAgICApIHtcbiAgICAgIHRoaXMuX2Jyb2FkY2FzdFdlYlJUQ1BlZXJHb3NzaXAoKTtcbiAgICB9XG5cbiAgICBjb25zdCBvZmZlck1zID0gTnVtYmVyKHRoaXMuc2V0dGluZ3Mud2VicnRjUGVlcmluZ09mZmVySW50ZXJ2YWxNcyB8fCAzMDAwMCk7XG4gICAgY29uc3QgbWF4UGVlcnMgPSBOdW1iZXIodGhpcy5zZXR0aW5ncy5tYXhXZWJydGNQZWVycyB8fCA1KTtcbiAgICBjb25zdCBzbG90c05lZWRlZCA9IG1heFBlZXJzIC0gY29ubmVjdGVkQ291bnQgLSB0aGlzLl9jb25uZWN0aW5nUGVlcnMuc2l6ZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLnBlZXJJZCAmJlxuICAgICAgdGhpcy5fd2VicnRjUmVhZHkgJiZcbiAgICAgIHNsb3RzTmVlZGVkID4gMCAmJlxuICAgICAgY29ubmVjdGVkQ291bnQgPiAwICYmXG4gICAgICAoIXRoaXMuX2xhc3RQZWVyaW5nT2ZmZXJBdCB8fCAoKG5vdyAtIHRoaXMuX2xhc3RQZWVyaW5nT2ZmZXJBdCkgPj0gb2ZmZXJNcykpXG4gICAgKSB7XG4gICAgICB0aGlzLl9icm9hZGNhc3RQZWVyaW5nT2ZmZXIoTWF0aC5tYXgoMSwgc2xvdHNOZWVkZWQpKTtcbiAgICB9XG5cbiAgICB0aGlzLnRha2VKb2IoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWducyBhcmJpdHJhcnkgdGV4dCB3aXRoIHRoZSBjb21wb25lbnQncyBzaWduaW5nIGtleSAoQklQMzQwIFNjaG5vcnIpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIHNpZ25cbiAgICogQHJldHVybnMge3sgc2lnbmF0dXJlOiBzdHJpbmcsIHB1YmxpY0tleTogc3RyaW5nIH18bnVsbH0gLSBTaWduYXR1cmUgaGV4IGFuZCBwdWJsaWMga2V5IGhleCwgb3IgbnVsbCBpZiBub3QgY29uZmlndXJlZFxuICAgKi9cbiAgc2lnbkFyYml0cmFyeVRleHQgKHRleHQpIHtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3Muc2lnbmluZ0tleSB8fCAhdGhpcy5zZXR0aW5ncy5zaWduaW5nS2V5LnByaXZhdGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnTm8gc2lnbmluZyBrZXkgd2l0aCBwcml2YXRlIGtleSBjb25maWd1cmVkJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRleHRTdHIgPSBTdHJpbmcodGV4dCk7XG4gICAgICBjb25zdCBzaWcgPSB0aGlzLnNldHRpbmdzLnNpZ25pbmdLZXkuc2lnbih0ZXh0U3RyKTtcbiAgICAgIGxldCBwdWJIZXggPSAnJztcbiAgICAgIHRyeSB7XG4gICAgICAgIHB1YkhleCA9IHRoaXMuc2V0dGluZ3Muc2lnbmluZ0tleS5wdWJrZXkgfHwgdGhpcy5zZXR0aW5ncy5zaWduaW5nS2V5LnhwdWIgfHwgJyc7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2lnbmF0dXJlOiBCdWZmZXIuaXNCdWZmZXIoc2lnKSA/IHNpZy50b1N0cmluZygnaGV4JykgOiBTdHJpbmcoc2lnKSxcbiAgICAgICAgcHVibGljS2V5OiBwdWJIZXhcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIHNpZ25pbmcgdGV4dDonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBzaWduaW5nOiBwb3N0IGEgYERFTEVHQVRJT05fU0lHTkFUVVJFX1JFUVVFU1RgIEZhYnJpYyBtZXNzYWdlIChKU09OLVJQQykgYW5kIHBvbGwgdW50aWwgdGhlIGRlc2t0b3AgcmVzb2x2ZXMgaXQuXG4gICAqIFJlcXVpcmVzIGRlbGVnYXRpb24gSlNPTiBpbiBsb2NhbFN0b3JhZ2UgKGBmYWJyaWNEZWxlZ2F0aW9uTG9jYWxgIGtleTsgc2V0IGFmdGVyIGRlc2t0b3AgYnJvd3NlciBsb2dpbikuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgc2lnbmF0dXJlOiBzdHJpbmcsIHB1YmxpY0tleTogc3RyaW5nIH18bnVsbD59XG4gICAqL1xuICBhc3luYyBzaWduQXJiaXRyYXJ5VGV4dERlbGVnYXRlZCAodGV4dCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZCA9IHJlYWRTdG9yYWdlSlNPTihERUxFR0FUSU9OX1NUT1JBR0VfS0VZLCBudWxsKTtcbiAgICBpZiAoIWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHRva2VuID0gZCAmJiBkLnRva2VuO1xuICAgIGlmICghdG9rZW4gJiYgZCAmJiBkLmV4dGVybmFsU2lnbmluZyA9PT0gZmFsc2UpIHJldHVybiBudWxsO1xuICAgIGlmICghdG9rZW4pIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG9yaWdpbiA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgbGV0IGpzb25ScGNTZXEgPSAwO1xuICAgIGNvbnN0IHJwYyA9IGFzeW5jIChtZXRob2QsIHBhcmFtcykgPT4ge1xuICAgICAganNvblJwY1NlcSArPSAxO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7b3JpZ2lufS9zZXJ2aWNlcy9ycGNgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB0aGlzLl9odWJKc29uUnBjSHR0cEhlYWRlcnMoKSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGpzb25ycGM6ICcyLjAnLFxuICAgICAgICAgIGlkOiBqc29uUnBjU2VxLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBwYXJhbXM6IFtwYXJhbXNdXG4gICAgICAgIH0pLFxuICAgICAgICBjYWNoZTogJ25vLXN0b3JlJ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICAgIGlmIChib2R5ICYmIGJvZHkuZXJyb3IpIHJldHVybiB7IHJwY0Vycm9yOiBib2R5LmVycm9yLm1lc3NhZ2UgfHwgJ1JQQyBlcnJvcicgfTtcbiAgICAgIHJldHVybiBib2R5ICYmIGJvZHkucmVzdWx0ICE9IG51bGwgPyBib2R5LnJlc3VsdCA6IG51bGw7XG4gICAgfTtcbiAgICBjb25zdCBwb3N0UmVzdWx0ID0gYXdhaXQgcnBjKCdQb3N0RGVsZWdhdGlvblNpZ25hdHVyZU1lc3NhZ2UnLCB7XG4gICAgICBzZXNzaW9uVG9rZW46IHRva2VuLFxuICAgICAgbWVzc2FnZTogU3RyaW5nKHRleHQpLFxuICAgICAgcHVycG9zZTogJ2FyYml0cmFyeSdcbiAgICB9KTtcbiAgICBpZiAoIXBvc3RSZXN1bHQgfHwgcG9zdFJlc3VsdC5ycGNFcnJvciB8fCAhcG9zdFJlc3VsdC5vayB8fCAhcG9zdFJlc3VsdC5tZXNzYWdlSWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHBvc3RSZXN1bHQubWVzc2FnZUlkO1xuICAgIHRoaXMuX2VtaXREZWxlZ2F0aW9uU2lnblJlcXVlc3RBY3Rpdml0eSh7XG4gICAgICBtZXNzYWdlSWQsXG4gICAgICBwcmV2aWV3OiBwb3N0UmVzdWx0LnByZXZpZXcgfHwgU3RyaW5nKHRleHQpLnNsaWNlKDAsIDQwMCksXG4gICAgICBwdXJwb3NlOiBwb3N0UmVzdWx0LnB1cnBvc2UgfHwgJ2FyYml0cmFyeSdcbiAgICB9KTtcbiAgICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyA1ICogNjAgKiAxMDAwO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXMpID0+IHNldFRpbWVvdXQocmVzLCA1MDApKTtcbiAgICAgIGNvbnN0IHBqID0gYXdhaXQgcnBjKCdHZXREZWxlZ2F0aW9uU2lnbmF0dXJlTWVzc2FnZScsIHtcbiAgICAgICAgc2Vzc2lvblRva2VuOiB0b2tlbixcbiAgICAgICAgbWVzc2FnZUlkXG4gICAgICB9KTtcbiAgICAgIGlmICghcGogfHwgcGoucnBjRXJyb3IpIGNvbnRpbnVlO1xuICAgICAgaWYgKHBqLm9rID09PSBmYWxzZSkgY29udGludWU7XG4gICAgICBpZiAocGouc3RhdHVzID09PSAncGVuZGluZycpIGNvbnRpbnVlO1xuICAgICAgaWYgKHBqLnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgICB0aGlzLl9yZXNvbHZlRGVsZWdhdGlvblNpZ25SZXF1ZXN0QWN0aXZpdHkobWVzc2FnZUlkLCAncmVqZWN0ZWQnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAocGouc3RhdHVzID09PSAnYXBwcm92ZWQnICYmIHBqLnNpZ25hdHVyZSkge1xuICAgICAgICB0aGlzLl9yZXNvbHZlRGVsZWdhdGlvblNpZ25SZXF1ZXN0QWN0aXZpdHkobWVzc2FnZUlkLCAnYXBwcm92ZWQnKTtcbiAgICAgICAgcmV0dXJuIHsgc2lnbmF0dXJlOiBwai5zaWduYXR1cmUsIHB1YmxpY0tleTogcGoucHVia2V5SGV4IH07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3Jlc29sdmVEZWxlZ2F0aW9uU2lnblJlcXVlc3RBY3Rpdml0eShtZXNzYWdlSWQsICd0aW1lb3V0Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgYSBTY2hub3JyIHNpZ25hdHVyZSBmb3IgYXJiaXRyYXJ5IHRleHQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIG9yaWdpbmFsIG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZUhleCAtIFRoZSBzaWduYXR1cmUgKDY0LWJ5dGUgaGV4KVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHVibGljS2V5SGV4IC0gVGhlIGNvbXByZXNzZWQgcHVibGljIGtleSAoMzMtYnl0ZSBoZXgpXG4gICAqIEByZXR1cm5zIHtib29sZWFufG51bGx9IC0gVHJ1ZSBpZiB2YWxpZCwgZmFsc2UgaWYgaW52YWxpZCwgbnVsbCBvbiBlcnJvclxuICAgKi9cbiAgLyoqXG4gICAqIENvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmxpYyBrZXkgKGhleCkgZm9yIHRoZSBsb2NhbCBpZGVudGl0eSDigJQgdXNlZCBhcyBidXllciByZWZ1bmQga2V5IGluIGludmVudG9yeSBQMlRSIEhUTENzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9XG4gICAqL1xuICBnZXRIdGxjUmVmdW5kUHVibGljS2V5SGV4ICgpIHtcbiAgICBjb25zdCBrID0gdGhpcy5zZXR0aW5ncy5zaWduaW5nS2V5O1xuICAgIGlmICghayB8fCAhay5wdWJsaWMgfHwgdHlwZW9mIGsucHVibGljLmVuY29kZUNvbXByZXNzZWQgIT09ICdmdW5jdGlvbicpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gay5wdWJsaWMuZW5jb2RlQ29tcHJlc3NlZCgnaGV4Jyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmVyaWZ5QXJiaXRyYXJ5VGV4dCAodGV4dCwgc2lnbmF0dXJlSGV4LCBwdWJsaWNLZXlIZXgpIHtcbiAgICBpZiAoIXRleHQgfHwgIXNpZ25hdHVyZUhleCB8fCAhcHVibGljS2V5SGV4KSByZXR1cm4gbnVsbDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qga2V5ID0gbmV3IEtleSh7IHB1YmxpYzogcHVibGljS2V5SGV4LnRyaW0oKSB9KTtcbiAgICAgIGNvbnN0IHNpZyA9IEJ1ZmZlci5mcm9tKHNpZ25hdHVyZUhleC50cmltKCksICdoZXgnKTtcbiAgICAgIGlmIChzaWcubGVuZ3RoICE9PSA2NCkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIGtleS52ZXJpZnlTY2hub3JyKHRleHQsIHNpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIHZlcmlmeWluZyB0ZXh0OicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRydWUgd2hlbiB0aGUgQnJpZGdlIGhhcyBhIGtleSB0aGF0IGNhbiBwcm9kdWNlIFNjaG5vcnIgc2lnbmF0dXJlcyAoeHBydiAvIHByaXZhdGUgbWF0ZXJpYWwpLlxuICAgKiBXYXRjaC1vbmx5IGFuZCBkZXNrdG9wLWRlbGVnYXRlZCBpZGVudGl0aWVzIHVzZSB4cHViLW9ubHkge0BsaW5rIEtleX0g4oCUIEpTT05DYWxsIG1heSBiZSBzZW50IHVuc2lnbmVkLlxuICAgKi9cbiAgX2NhblNpZ25PdXRnb2luZyAoKSB7XG4gICAgY29uc3QgayA9IHRoaXMuc2V0dGluZ3Muc2lnbmluZ0tleSB8fCB0aGlzLmtleTtcbiAgICByZXR1cm4gISEoayAmJiBrLnByaXZhdGUpO1xuICB9XG5cbiAgLyoqIFRydWUgd2hlbiBGYWJyaWMgd2lyZSBgSlNPTkNhbGxgIGVudmVsb3BlcyBjYW4gYmUgU2Nobm9yci1zaWduZWQgaW4gdGhpcyBicm93c2VyIChoYXMgcHJpdmF0ZSBrZXkpLiAqL1xuICBoYXNMb2NhbFdpcmVTaWduaW5nS2V5ICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FuU2lnbk91dGdvaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbnMgYSBtZXNzYWdlIHdpdGggdGhlIGNvbXBvbmVudCdzIHNpZ25pbmcga2V5IHdoZW4gYSBwcml2YXRlIGtleSBpcyBhdmFpbGFibGUuXG4gICAqIFdpdGhvdXQgYSBwcml2YXRlIGtleSwgcmV0dXJucyB0aGUgYnVmZmVyIHVuY2hhbmdlZCAoSHViIGFjY2VwdHMgdW5zaWduZWQgSlNPTkNhbGwgZm9yIG1hbnkgcmVhZCBwYXRocykuXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gc2lnblxuICAgKiBAcmV0dXJucyB7QnVmZmVyfE1lc3NhZ2V9IC0gU2lnbmVkIEZhYnJpYyBNZXNzYWdlLCBvciBvcmlnaW5hbCBidWZmZXIgd2hlbiB1bnNpZ25lZFxuICAgKi9cbiAgc2lnbk1lc3NhZ2UgKG1lc3NhZ2UpIHtcbiAgICBjb25zdCBzaWduaW5nS2V5ID0gdGhpcy5zZXR0aW5ncy5zaWduaW5nS2V5IHx8IHRoaXMua2V5O1xuICAgIGlmICghc2lnbmluZ0tleSkge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ05vIHNpZ25pbmcga2V5IOKAlCBzZW5kaW5nIHVuc2lnbmVkJyk7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2NhblNpZ25PdXRnb2luZygpKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbQlJJREdFXScsICdXYXRjaC1vbmx5IG9yIGRlbGVnYXRlZCBpZGVudGl0eSAocHVibGljIGtleSBvbmx5KSDigJQgc2VuZGluZyB1bnNpZ25lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgY29uc3QgZmFicmljTWVzc2FnZSA9IE1lc3NhZ2UuZnJvbUJ1ZmZlcihtZXNzYWdlKTtcbiAgICBpZiAoIWZhYnJpY01lc3NhZ2UpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnQ291bGQgbm90IGNyZWF0ZSBGYWJyaWMgTWVzc2FnZSBmcm9tIGJ1ZmZlcicpO1xuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmYWJyaWNNZXNzYWdlLnNpZ25XaXRoS2V5KHNpZ25pbmdLZXkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tCUklER0VdJywgJ1NpZ25pbmcgZmFpbGVkLCBzZW5kaW5nIHVuc2lnbmVkOicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2ggYSBzaWduZWQgRmFicmljIHdpcmUgTWVzc2FnZSBvdmVyIHRoZSBicm93c2VyIG1lc2ggYW5kIEh1YiBmYW4tb3V0LlxuICAgKiBQcmVmZXIgYmluYXJ5IFJUQ0RhdGFDaGFubmVsOyBSZWxheUZyb21XZWJSVEMgY2FycmllcyBhdXRob3Itc2lnbmVkIGJ5dGVzIHRvIEZhYnJpYyBUQ1AuXG4gICAqIERvZXMgbm90IHVzZSBIVFRQLlxuICAgKiBAcGFyYW0ge0J1ZmZlcnxvYmplY3R9IG1lc3NhZ2UgTWVzc2FnZSBpbnN0YW5jZSBvciBBTVAgYnVmZmVyXG4gICAqIEBwYXJhbSB7eyBvcmlnaW5hbFR5cGU/OiBzdHJpbmcgfX0gW29wdHNdXG4gICAqIEByZXR1cm5zIHt7IG1lc2hSZWNpcGllbnRzOiBzdHJpbmdbXSwgcmVsYXllZFRvSHViOiBib29sZWFuIH19XG4gICAqL1xuICByZWxheVNpZ25lZEZhYnJpY1dpcmUgKG1lc3NhZ2UsIG9wdHMgPSB7fSkge1xuICAgIGxldCBidWYgPSBudWxsO1xuICAgIGlmIChtZXNzYWdlICYmIHR5cGVvZiBtZXNzYWdlLnRvQnVmZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBidWYgPSBtZXNzYWdlLnRvQnVmZmVyKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBCdWZmZXIuaXNCdWZmZXIgJiYgQnVmZmVyLmlzQnVmZmVyKG1lc3NhZ2UpKSB7XG4gICAgICBidWYgPSBtZXNzYWdlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIC9eWzAtOWEtZkEtRl0rJC8udGVzdChtZXNzYWdlKSAmJiBtZXNzYWdlLmxlbmd0aCAlIDIgPT09IDApIHtcbiAgICAgIGJ1ZiA9IEJ1ZmZlci5mcm9tKG1lc3NhZ2UsICdoZXgnKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmID0gQnVmZmVyLmZyb20obWVzc2FnZSwgJ2Jhc2U2NCcpO1xuICAgIH1cbiAgICBpZiAoIWJ1ZiB8fCAhYnVmLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHsgbWVzaFJlY2lwaWVudHM6IFtdLCByZWxheWVkVG9IdWI6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxUeXBlID0gb3B0cy5vcmlnaW5hbFR5cGUgfHwgJ2ZhYnJpYy1tZXNzYWdlJztcbiAgICBjb25zdCBtZXNoUmVjaXBpZW50cyA9IHRoaXMuYnJvYWRjYXN0VG9XZWJSVENQZWVyc1dpdGhSZWNpcGllbnRzKGJ1Zik7XG4gICAgbGV0IHJlbGF5ZWRUb0h1YiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLl9pc0Nvbm5lY3RlZCAmJiB0aGlzLndzICYmIHRoaXMud3MucmVhZHlTdGF0ZSA9PT0gMSAmJiB0aGlzLnBlZXJJZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5fc2VuZEpTT05SUEMoe1xuICAgICAgICAgIG1ldGhvZDogJ1JlbGF5RnJvbVdlYlJUQycsXG4gICAgICAgICAgcGFyYW1zOiBbe1xuICAgICAgICAgICAgZnJvbVBlZXJJZDogdGhpcy5wZWVySWQsXG4gICAgICAgICAgICBlbnZlbG9wZToge1xuICAgICAgICAgICAgICBvcmlnaW5hbDogYnVmLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICAgICAgb3JpZ2luYWxUeXBlLFxuICAgICAgICAgICAgICBob3BzOiBbeyBmcm9tOiB0aGlzLnBlZXJJZCwgYXQ6IERhdGUubm93KCkgfV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XVxuICAgICAgICB9KTtcbiAgICAgICAgcmVsYXllZFRvSHViID0gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbQlJJREdFXScsICdyZWxheVNpZ25lZEZhYnJpY1dpcmUgSHViIHJlbGF5IGZhaWxlZDonLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBtZXNoUmVjaXBpZW50cywgcmVsYXllZFRvSHViIH07XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBGYWJyaWMgd2lyZSBtZXNzYWdlIG92ZXIgV2ViU29ja2V0IChvciBXZWJSVEMpLiBTaWducyB2aWEgYHNpZ25NZXNzYWdlYCB3aGVuXG4gICAqIGBfY2FuU2lnbk91dGdvaW5nKClgOyBvdGhlcndpc2Ugc2VuZHMgdGhlIHNhbWUgYnVmZmVyIHVuc2lnbmVkICh3YXRjaC1vbmx5IC8gZGVsZWdhdGVkIGNsaWVudHMpLlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIHNlbmRcbiAgICogQHBhcmFtIHtCb29sZWFufSBwcmVmZXJXZWJSVEMgLSBXaGV0aGVyIHRvIHByZWZlciBXZWJSVEMgb3ZlciBXZWJTb2NrZXRcbiAgICovXG4gIHNlbmRTaWduZWRNZXNzYWdlIChtZXNzYWdlLCBwcmVmZXJXZWJSVEMgPSBmYWxzZSkge1xuICAgIGNvbnN0IHNpZ25lZE1lc3NhZ2UgPSB0aGlzLnNpZ25NZXNzYWdlKG1lc3NhZ2UpO1xuICAgIGNvbnN0IHNpZ25lZEJ1ZmZlciA9IHNpZ25lZE1lc3NhZ2UudG9CdWZmZXIgPyBzaWduZWRNZXNzYWdlLnRvQnVmZmVyKCkgOiBzaWduZWRNZXNzYWdlO1xuXG4gICAgdGhpcy5zZW5kTWVzc2FnZShzaWduZWRCdWZmZXIsIHByZWZlcldlYlJUQyk7XG4gIH1cblxuICBzZW5kTWVzc2FnZSAobWVzc2FnZSwgcHJlZmVyV2ViUlRDID0gZmFsc2UpIHtcbiAgICAvLyBQcmVmZXIgYnJvd3NlciBtZXNoICsgSHViIFJlbGF5RnJvbVdlYlJUQyAobm8gSFRUUCkgd2hlbiByZXF1ZXN0ZWQuXG4gICAgaWYgKHByZWZlcldlYlJUQyAmJiB0aGlzLl93ZWJydGNDb25uZWN0ZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBidWYgPSBtZXNzYWdlO1xuICAgICAgICBpZiAobWVzc2FnZSAmJiB0eXBlb2YgbWVzc2FnZS50b0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgYnVmID0gbWVzc2FnZS50b0J1ZmZlcigpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnJlbGF5U2lnbmVkRmFicmljV2lyZShidWYsIHsgb3JpZ2luYWxUeXBlOiAnZmFicmljLW1lc3NhZ2UnIH0pO1xuICAgICAgICBpZiAocmVzdWx0Lm1lc2hSZWNpcGllbnRzLmxlbmd0aCB8fCByZXN1bHQucmVsYXllZFRvSHViKSB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnTWVzc2FnZSBzZW50IHZpYSBXZWJSVEMgbWVzaCcsIHJlc3VsdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tCUklER0VdJywgJ1dlYlJUQyBzZW5kIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIFdlYlNvY2tldDonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBXZWJTb2NrZXRcbiAgICBpZiAoIXRoaXMuX2lzQ29ubmVjdGVkIHx8ICF0aGlzLndzIHx8IHRoaXMud3MucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIHRoaXMubWVzc2FnZVF1ZXVlLnB1c2gobWVzc2FnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud3Muc2VuZChtZXNzYWdlKTtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ01lc3NhZ2Ugc2VudCB2aWEgV2ViU29ja2V0Jyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIHNlbmRpbmcgbWVzc2FnZSB2aWEgV2ViU29ja2V0OicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgICAgLy8gUXVldWUgdGhlIG1lc3NhZ2UgaWYgc2VuZCBmYWlsc1xuICAgICAgdGhpcy5tZXNzYWdlUXVldWUucHVzaChtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHN0YXRlIGNoYW5nZXMgYXQgYSBzcGVjaWZpYyBwYXRoXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gc3Vic2NyaWJlIHRvIChlLmcuICcvc2VydmljZXMvYml0Y29pbicpXG4gICAqL1xuICBzdWJzY3JpYmUgKHBhdGgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5zdWJzY3JpcHRpb25zLmhhcyhwYXRoKSkge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ0FscmVhZHkgc3Vic2NyaWJlZCB0bzonLCBwYXRoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zZW5kU3Vic2NyaWJlKHBhdGgpO1xuXG4gICAgdGhpcy5zdGF0ZS5zdWJzY3JpcHRpb25zLmFkZChwYXRoKTtcbiAgICBjb25zb2xlLmRlYnVnKCdbQlJJREdFXScsICdTdWJzY3JpYmVkIHRvOicsIHBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gc3RhdGUgY2hhbmdlcyBhdCBhIHNwZWNpZmljIHBhdGhcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB1bnN1YnNjcmliZSBmcm9tXG4gICAqL1xuICB1bnN1YnNjcmliZSAocGF0aCkge1xuICAgIGlmICghdGhpcy5zdGF0ZS5zdWJzY3JpcHRpb25zLmhhcyhwYXRoKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnTm90IHN1YnNjcmliZWQgdG86JywgcGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ1VOU1VCU0NSSUJFJywgcGF0aF0pO1xuICAgIGNvbnN0IG1lc3NhZ2VCdWZmZXIgPSBtZXNzYWdlLnRvQnVmZmVyKCk7XG4gICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlQnVmZmVyKTtcblxuICAgIHRoaXMuc3RhdGUuc3Vic2NyaXB0aW9ucy5kZWxldGUocGF0aCk7XG4gICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnVW5zdWJzY3JpYmVkIGZyb206JywgcGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gc3RhdHVzIGZvciBib3RoIFdlYlNvY2tldCBhbmQgV2ViUlRDXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IENvbm5lY3Rpb24gc3RhdHVzIG9iamVjdFxuICAgKi9cbiAgZ2V0Q29ubmVjdGlvblN0YXR1cyAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdlYnNvY2tldDoge1xuICAgICAgICBjb25uZWN0ZWQ6IHRoaXMuX2lzQ29ubmVjdGVkLFxuICAgICAgICByZWFkeVN0YXRlOiB0aGlzLndzID8gdGhpcy53cy5yZWFkeVN0YXRlIDogbnVsbFxuICAgICAgfSxcbiAgICAgIHdlYnJ0Yzoge1xuICAgICAgICBjb25uZWN0ZWQ6IHRoaXMuX3dlYnJ0Y0Nvbm5lY3RlZCxcbiAgICAgICAgcGVlcklkOiB0aGlzLnBlZXJJZCxcbiAgICAgICAgc2VydmVyQ29ubmVjdGlvbjogdGhpcy53ZWJydGNDb25uZWN0aW9uID8gdGhpcy53ZWJydGNDb25uZWN0aW9uLnBlZXIgOiBudWxsXG4gICAgICB9LFxuICAgICAgcHJlZmVycmVkUHJvdG9jb2w6IHRoaXMuX3dlYnJ0Y0Nvbm5lY3RlZCA/ICd3ZWJydGMnIDogJ3dlYnNvY2tldCdcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBtZXNzYWdlIHByZWZlcnJpbmcgV2ViUlRDIGlmIGF2YWlsYWJsZVxuICAgKiBAcGFyYW0ge0J1ZmZlcnxTdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBzZW5kXG4gICAqL1xuICBzZW5kVmlhV2ViUlRDIChtZXNzYWdlKSB7XG4gICAgdGhpcy5zZW5kTWVzc2FnZShtZXNzYWdlLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgbWVzc2FnZSBwcmVmZXJyaW5nIFdlYlNvY2tldFxuICAgKiBAcGFyYW0ge0J1ZmZlcnxTdHJpbmd9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBzZW5kXG4gICAqL1xuICBzZW5kVmlhV2ViU29ja2V0IChtZXNzYWdlKSB7XG4gICAgdGhpcy5zZW5kTWVzc2FnZShtZXNzYWdlLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25uZWN0IFdlYlJUQyBpZiBjb25uZWN0aW9uIGlzIGxvc3RcbiAgICovXG4gIHJlY29ubmVjdFdlYlJUQyAoKSB7XG4gICAgaWYgKCF0aGlzLnBlZXJJZCB8fCAhdGhpcy5fd2VicnRjUmVhZHkpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ1JlaW5pdGlhbGl6aW5nIFdlYlJUQyBpZGVudGl0eS4uLicpO1xuICAgICAgdGhpcy5pbml0aWFsaXplV2ViUlRDKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnUmVkaXNjb3ZlcmluZyBXZWJSVEMgcGVlcnMuLi4nKTtcbiAgICB0aGlzLmRpc2NvdmVyQW5kQ29ubmVjdFRvUGVlcnMoKTtcbiAgfVxuXG4gIGFzeW5jIG9uU29ja2V0TWVzc2FnZSAobXNnKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIG1lc3NhZ2UgZGF0YVxuICAgICAgaWYgKCFtc2cgfHwgIW1zZy5kYXRhKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ0ludmFsaWQgbWVzc2FnZSBmb3JtYXQ6JywgbXNnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IG1lc3NhZ2UgZGF0YSB0eXBlc1xuICAgICAgbGV0IGJ1ZmZlcjtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIobXNnLmRhdGEpKSB7XG4gICAgICAgIGJ1ZmZlciA9IG1zZy5kYXRhO1xuICAgICAgfSBlbHNlIGlmIChtc2cuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20obXNnLmRhdGEuYnVmZmVyLCBtc2cuZGF0YS5ieXRlT2Zmc2V0LCBtc2cuZGF0YS5ieXRlTGVuZ3RoKTtcbiAgICAgIH0gZWxzZSBpZiAobXNnLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShtc2cuZGF0YSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBtc2cuZGF0YSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBtc2cuZGF0YS5hcnJheUJ1ZmZlcigpO1xuICAgICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlcik7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBtc2cuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20obXNnLmRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnVW5zdXBwb3J0ZWQgbWVzc2FnZSBkYXRhIHR5cGU6JywgdHlwZW9mIG1zZy5kYXRhKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBidWZmZXJcbiAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcikpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnRmFpbGVkIHRvIGNyZWF0ZSB2YWxpZCBidWZmZXIgZnJvbSBtZXNzYWdlIGRhdGEnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc3BvcnRNZXRhID0gKG1zZyAmJiBtc2cuX2ZhYnJpY1RyYW5zcG9ydCkgfHwge1xuICAgICAgICBzZXNzaW9uSWQ6IEhVQl9GQUJSSUNfU0VTU0lPTl9JRCxcbiAgICAgICAga2luZDogU0VTU0lPTl9LSU5EX0hVQlxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRTZXNzaW9uSWQgPSB0cmFuc3BvcnRNZXRhLnNlc3Npb25JZDtcbiAgICAgIGNvbnN0IHRLaW5kID0gdHJhbnNwb3J0TWV0YS5raW5kO1xuXG4gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA+IEJSSURHRV9JTkJPVU5EX1dJUkVfTUFYX0JZVEVTKSB7XG4gICAgICAgIHRoaXMuX2ZhYnJpY1BlbmFsaXplVHJhbnNwb3J0KHRTZXNzaW9uSWQsIHRLaW5kLCA1MCwgJ292ZXJzaXplZC13aXJlLWZyYW1lJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgRkFCUklDX1dJUkVfSEVBREVSX1NJWkUpIHtcbiAgICAgICAgdGhpcy5fZmFicmljUGVuYWxpemVUcmFuc3BvcnQodFNlc3Npb25JZCwgdEtpbmQsIDM1LCAndHJ1bmNhdGVkLXdpcmUtaGVhZGVyJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IG1lc3NhZ2U7XG4gICAgICB0cnkge1xuICAgICAgICBtZXNzYWdlID0gTWVzc2FnZS5mcm9tQnVmZmVyKGJ1ZmZlcik7XG4gICAgICB9IGNhdGNoIChwYXJzZUVycikge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5kZWJ1Zykge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ01lc3NhZ2UuZnJvbUJ1ZmZlciBmYWlsZWQ6Jywgc2FmZUlkZW50aXR5RXJyKHBhcnNlRXJyKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmFicmljUGVuYWxpemVUcmFuc3BvcnQodFNlc3Npb25JZCwgdEtpbmQsIDQwLCAnd2lyZS1wYXJzZS1lcnJvcicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5fZmFicmljUGVuYWxpemVUcmFuc3BvcnQodFNlc3Npb25JZCwgdEtpbmQsIDM1LCAnd2lyZS1udWxsLW1lc3NhZ2UnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFmYWJyaWNXaXJlQm9keUludGVncml0eU9rKG1lc3NhZ2UpKSB7XG4gICAgICAgIHRoaXMuX2ZhYnJpY1BlbmFsaXplVHJhbnNwb3J0KHRTZXNzaW9uSWQsIHRLaW5kLCA0NSwgJ2JvZHktaGFzaC1taXNtYXRjaCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlc3MgPSB0aGlzLl9nZXRGYWJyaWNUcmFuc3BvcnRTZXNzaW9uKHRTZXNzaW9uSWQsIHRLaW5kKTtcbiAgICAgIGlmIChzZXNzKSBzZXNzLmNvbW1pdFdpcmVNZXNzYWdlKG1lc3NhZ2UpO1xuXG4gICAgICAvLyBIYW5kbGUgbWVzc2FnZSBiYXNlZCBvbiB0eXBlXG4gICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ1VuaGFuZGxlZCBtZXNzYWdlIHR5cGU6JywgbWVzc2FnZS50eXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUDJQX0NIQVRfTUVTU0FHRSc6IHtcbiAgICAgICAgICAvLyBGaXJzdC1jbGFzcyBtZXNoIGNoYXQ6IGJvZHkgPSBVVEYtOCB0ZXh0LiBSb3V0ZSB0aHJvdWdoIFdlYlJUQyBjaGF0IGhhbmRsZXIgc2hhcGUuXG4gICAgICAgICAgY29uc3QgdGV4dCA9IG1lc3NhZ2UucmF3ICYmIG1lc3NhZ2UucmF3LmRhdGFcbiAgICAgICAgICAgID8gbWVzc2FnZS5yYXcuZGF0YS50b1N0cmluZygndXRmOCcpXG4gICAgICAgICAgICA6ICh0eXBlb2YgbWVzc2FnZS5kYXRhID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UuZGF0YSA6IFN0cmluZyhtZXNzYWdlLmJvZHkgfHwgJycpKTtcbiAgICAgICAgICBpZiAodEtpbmQgPT09IFNFU1NJT05fS0lORF9XRUJSVEMgJiYgdFNlc3Npb25JZCkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVXZWJSVENQZWVyTWVzc2FnZSh0U2Vzc2lvbklkLCB7XG4gICAgICAgICAgICAgIHR5cGU6ICdQMlBfQ0hBVF9NRVNTQUdFJyxcbiAgICAgICAgICAgICAgYWN0b3I6IHsgaWQ6IHRTZXNzaW9uSWQgfSxcbiAgICAgICAgICAgICAgb2JqZWN0OiB7IGNvbnRlbnQ6IHRleHQsIGNyZWF0ZWQ6IERhdGUubm93KCkgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0NPTlRSQUNUX01FU1NBR0UnOlxuICAgICAgICBjYXNlICdQMlBfQ09OVFJBQ1RfTUVTU0FHRSc6IHtcbiAgICAgICAgICAvLyBBdXRob3Itc2lnbmVkIGNvbnRyYWN0IGZyYW1lcyAoR3JvdXBDaGF0LCBNZXNzYWdlUmVjZWlwdCwg4oCmKS5cbiAgICAgICAgICAvLyBGYW4gaW50byBIdWIg4oaSIEZhYnJpYyBUQ1AgdmlhIFJlbGF5RnJvbVdlYlJUQyB3aXRob3V0IGh1YiByZS1zaWduaW5nLlxuICAgICAgICAgIGlmICh0S2luZCA9PT0gU0VTU0lPTl9LSU5EX1dFQlJUQyAmJiB0U2Vzc2lvbklkICYmIHRoaXMuX2lzQ29ubmVjdGVkICYmIHRoaXMud3MgJiYgdGhpcy53cy5yZWFkeVN0YXRlID09PSAxKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCB3aXJlQjY0ID0gQnVmZmVyLmZyb20oYnVmZmVyKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NlbmRKU09OUlBDKHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdSZWxheUZyb21XZWJSVEMnLFxuICAgICAgICAgICAgICAgIHBhcmFtczogW3tcbiAgICAgICAgICAgICAgICAgIGZyb21QZWVySWQ6IHRTZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICBlbnZlbG9wZToge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbDogd2lyZUI2NCxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxUeXBlOiAnQ09OVFJBQ1RfTUVTU0FHRScsXG4gICAgICAgICAgICAgICAgICAgIGhvcHM6IFt7IGZyb206IHRTZXNzaW9uSWQsIGF0OiBEYXRlLm5vdygpIH1dXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMuX3dlYnJ0Y1Jld2FyZFBlZXIodFNlc3Npb25JZCwgMiwgJ2NvbnRyYWN0LW1lc3NhZ2UnKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdbQlJJREdFXScsICdDT05UUkFDVF9NRVNTQUdFIFdlYlJUQyByZWxheSBmYWlsZWQ6Jywgc2FmZUlkZW50aXR5RXJyKGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZmFicmljOmNvbnRyYWN0TWVzc2FnZScsIHtcbiAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICB3aXJlQmFzZTY0OiBCdWZmZXIuZnJvbShidWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgICAgICAgICBmcm9tUGVlcklkOiB0S2luZCA9PT0gU0VTU0lPTl9LSU5EX1dFQlJUQyA/IHRTZXNzaW9uSWQgOiBudWxsLFxuICAgICAgICAgICAgICAgIHRyYW5zcG9ydDogdEtpbmRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gY2F0Y2ggKF8pIHsgLyogaWdub3JlICovIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdQMlBfUEVFUl9BTElBUyc6IHtcbiAgICAgICAgICBjb25zdCBhbGlhcyA9IG1lc3NhZ2UucmF3ICYmIG1lc3NhZ2UucmF3LmRhdGFcbiAgICAgICAgICAgID8gbWVzc2FnZS5yYXcuZGF0YS50b1N0cmluZygndXRmOCcpXG4gICAgICAgICAgICA6ICh0eXBlb2YgbWVzc2FnZS5kYXRhID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UuZGF0YSA6IFN0cmluZyhtZXNzYWdlLmJvZHkgfHwgJycpKTtcbiAgICAgICAgICBjb25zdCBuYW1lID0gU3RyaW5nKGFsaWFzIHx8ICcnKS50cmltKCkuc2xpY2UoMCwgNjQpO1xuICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9wZWVyQWxpYXNCeUlkID0gdGhpcy5fcGVlckFsaWFzQnlJZCB8fCB7fTtcbiAgICAgICAgICAgIC8vIFdlYlJUQzogbWFwIHRvIHRoZSB0cmFuc3BvcnQgcGVlci4gSHViIHdpcmU6IG1hcCB0byBBTVAgYXV0aG9yIG9ubHkg4oCUXG4gICAgICAgICAgICAvLyBuZXZlciBmYWxsIGJhY2sgdG8gdGhlIGxvY2FsIGlkZW50aXR5ICh0aGF0IHJlYmluZHMgcmVtb3RlIGFsaWFzZXMgb250byB1cykuXG4gICAgICAgICAgICBsZXQgaWQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRLaW5kID09PSBTRVNTSU9OX0tJTkRfV0VCUlRDICYmIHRTZXNzaW9uSWQpIHtcbiAgICAgICAgICAgICAgaWQgPSB0U2Vzc2lvbklkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmF1dGhvcikge1xuICAgICAgICAgICAgICBpZCA9IFN0cmluZyhtZXNzYWdlLmF1dGhvcikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpZCkgdGhpcy5fcGVlckFsaWFzQnlJZFtpZF0gPSBuYW1lO1xuICAgICAgICAgICAgaWYgKHRLaW5kID09PSBTRVNTSU9OX0tJTkRfV0VCUlRDICYmIHRTZXNzaW9uSWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVXZWJSVENQZWVyTWVzc2FnZSh0U2Vzc2lvbklkLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1AyUF9QRUVSX0FMSUFTJyxcbiAgICAgICAgICAgICAgICBhY3RvcjogeyBpZDogdFNlc3Npb25JZCB9LFxuICAgICAgICAgICAgICAgIG9iamVjdDogeyBuYW1lIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1AyUF9NRVNTQUdFX1JFQ0VJUFQnOlxuICAgICAgICAgIC8vIFNlcnZlciBhY2sgZm9yIGEgZGVsaXZlcmVkIGluYm91bmQgbWVzc2FnZTsgSlNPTkNhbGwgcGF0aCBkb2VzIG5vdCByZXF1aXJlIGNsaWVudCBoYW5kbGluZy5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUG9uZyc6XG4gICAgICAgICAgLy8gS2VlcGFsaXZlIHJlc3BvbnNlIGZyb20gaHViOyBubyBhY3Rpb24gbmVlZGVkIGJleW9uZCBhY2tub3dsZWRnaW5nIHJlY2VpcHQuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1AyUF9QSU5HJzpcbiAgICAgICAgY2FzZSAnUDJQX1BPTkcnOlxuICAgICAgICAgIC8vIFBlZXIgaGVhcnRiZWF0IGZyYW1lcyBhcmUgaGFuZGxlZCBieSB0aGUgdHJhbnNwb3J0L3Nlc3Npb24gbGF5ZXI7IG5vIFVJIGFjdGlvbiByZXF1aXJlZC5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gV2lyZSBvcGNvZGUgZGVjb2RlcyB0byBKU09OX0NBTEw7IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ0pTT05DYWxsJywg4oCmXSkgdXNlcyBmcmllbmRseSBhbGlhcy5cbiAgICAgICAgY2FzZSAnSlNPTkNhbGwnOlxuICAgICAgICBjYXNlICdKU09OX0NBTEwnOlxuICAgICAgICAgIC8vIFBhcnNlIEpTT05DYWxsIGFuZCBoYW5kbGUgSlNPTkNhbGxSZXN1bHQgcmVzcG9uc2VzXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGpzb25DYWxsID0gSlNPTi5wYXJzZShtZXNzYWdlLmJvZHkpO1xuICAgICAgICAgICAgaWYgKGpzb25DYWxsLm1ldGhvZCA9PT0gJ0pTT05DYWxsUmVzdWx0Jykge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBBcnJheS5pc0FycmF5KGpzb25DYWxsLnBhcmFtcykgJiYganNvbkNhbGwucGFyYW1zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGpzb25DYWxsLnBhcmFtc1tqc29uQ2FsbC5wYXJhbXMubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICA6IChqc29uQ2FsbC5yZXN1bHQgfHwgbnVsbCk7XG5cbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQuc3RhdHVzID09PSAnZXJyb3InICYmIHR5cGVvZiByZXN1bHQubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgcmVzdWx0Lm1lc3NhZ2UgJiZcbiAgICAgICAgICAgICAgICAhcmVzdWx0LnR5cGUgJiYgcmVzdWx0LmRvY3VtZW50SWQgPT0gbnVsbCAmJiByZXN1bHQuY29udHJhY3RJZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdG9hc3QuZXJyb3IoU3RyaW5nKHJlc3VsdC5tZXNzYWdlKSwgeyBoZWFkZXI6ICdIdWInLCBkdXJhdGlvbjogNjAwMCB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIEZ1bGwgR2V0TmV0d29ya1N0YXR1cyAvIExpc3RQZWVycyBwYXlsb2FkcyAoYW5kIGh1YiBwdXNoZXMpLiBNYXRjaCB7QGxpbmsgaXNIdWJOZXR3b3JrU3RhdHVzU2hhcGV9XG4gICAgICAgICAgICAgIC8vIHNvIHdlIGRvIG5vdCBkcm9wIHZhbGlkIHN0YXR1cyB3aGVuIGBuZXR3b3JrYCBpcyBhYnNlbnQgb3IgdGhlIGh1YiBzaGFwZSBkcmlmdHMgc2xpZ2h0bHkuXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgIXJlc3VsdC50eXBlICYmIGlzSHViTmV0d29ya1N0YXR1c1NoYXBlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5SHViTmV0d29ya1N0YXR1c1BheWxvYWQocmVzdWx0KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFdlYlJUQyBwZWVyIGRpc2NvdmVyeSByZXNwb25zZSAoZG9lcyBub3QgdG91Y2ggbmV0d29ya1N0YXR1cylcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQudHlwZSA9PT0gJ0xpc3RXZWJSVENQZWVyc1Jlc3VsdCcgJiYgQXJyYXkuaXNBcnJheShyZXN1bHQucGVlcnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ1JlY2VpdmVkIFdlYlJUQyBwZWVyIGNhbmRpZGF0ZXM6JywgcmVzdWx0LnBlZXJzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGVlckNhbmRpZGF0ZXMocmVzdWx0LnBlZXJzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBOYXRpdmUgV2ViUlRDIHNpZ25hbGluZyBtZXNzYWdlc1xuICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVXZWJSVENTaWduYWxSZXN1bHQocmVzdWx0KTtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIG5vbi1uZXR3b3JrIHJlc3VsdHMgdXNlZCBieSByb3V0ZWQgcGFnZXMgLyBkZXRhaWwgdmlld3NcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQudHlwZSA9PT0gJ0dldFBlZXJSZXN1bHQnICYmIHJlc3VsdC5wZWVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHJlc3VsdC5wZWVyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkZHIgPSBwLmFkZHJlc3M7XG4gICAgICAgICAgICAgICAgY29uc3QgZmFicmljSWQgPSBwLmlkO1xuICAgICAgICAgICAgICAgIGlmIChhZGRyIHx8IGZhYnJpY0lkKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmdsb2JhbFN0YXRlLnBlZXJzID0gdGhpcy5nbG9iYWxTdGF0ZS5wZWVycyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBbLi4ubmV3IFNldChbYWRkciwgZmFicmljSWRdLmZpbHRlcihCb29sZWFuKSldO1xuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nbG9iYWxTdGF0ZS5wZWVyc1trXSA9IHsgLi4uKHRoaXMuZ2xvYmFsU3RhdGUucGVlcnNba10gfHwge30pLCAuLi5wIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IHsgb3A6ICdhZGQnLCBwYXRoOiBgL3BlZXJzLyR7a2V5c1swXX1gLCB2YWx1ZTogdGhpcy5nbG9iYWxTdGF0ZS5wZWVyc1trZXlzWzBdXSB9LFxuICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gRG9jdW1lbnRzIFJQQyByZXN1bHRzXG4gICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0LnR5cGUgPT09ICdMaXN0RG9jdW1lbnRzUmVzdWx0JyAmJiBBcnJheS5pc0FycmF5KHJlc3VsdC5kb2N1bWVudHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMgPSB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyB8fCB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRvYyBvZiByZXN1bHQuZG9jdW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWRvYyB8fCAhZG9jLmlkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JlRG9jdW1lbnQoZG9jLmlkLCB7IC4uLih0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1tkb2MuaWRdIHx8IHt9KSwgLi4uZG9jIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogeyBvcDogJ3JlcGxhY2UnLCBwYXRoOiBgL2RvY3VtZW50c2AsIHZhbHVlOiB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyB9LFxuICAgICAgICAgICAgICAgICAgICBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC50eXBlID09PSAnUmVmcmVzaERvY3VtZW50TWFya2V0UmVzdWx0Jykge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZG9jdW1lbnRNYXJrZXRSZWZyZXNoJywgeyBkZXRhaWw6IHJlc3VsdCB9KSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZExpc3REb2N1bWVudHNSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC50eXBlID09PSAnR2V0RG9jdW1lbnRSZXN1bHQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kb2N1bWVudCAmJiByZXN1bHQuZG9jdW1lbnQuaWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gcmVzdWx0LmRvY3VtZW50LmlkO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmVEb2N1bWVudChpZCwgcmVzdWx0LmRvY3VtZW50KTtcbiAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogeyBvcDogJ2FkZCcsIHBhdGg6IGAvZG9jdW1lbnRzLyR7aWR9YCwgdmFsdWU6IHJlc3VsdC5kb2N1bWVudCB9LFxuICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5kb2N1bWVudElkKSB7XG4gICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2RvY3VtZW50TG9hZEZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRJZDogU3RyaW5nKHJlc3VsdC5kb2N1bWVudElkKSxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAocmVzdWx0Lm1lc3NhZ2UgJiYgU3RyaW5nKHJlc3VsdC5tZXNzYWdlKSkgfHwgJ0RvY3VtZW50IG5vdCBmb3VuZC4nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQudHlwZSA9PT0gJ0NvbmZpcm1JbnZlbnRvcnlIdGxjUGF5bWVudFJlc3VsdCcpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2ludmVudG9yeUh0bGNDb25maXJtUmVzdWx0JywgeyBkZXRhaWw6IHJlc3VsdCB9KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5tZXJnZUNyZWF0ZURvY3VtZW50UnBjUmVzdWx0KHJlc3VsdCk7XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgKHJlc3VsdC50eXBlID09PSAnQ2xhaW1QdXJjaGFzZVJlc3VsdCcgfHwgKHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicgJiYgcmVzdWx0LmRvY3VtZW50SWQpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvY0lkID0gcmVzdWx0LmRvY3VtZW50SWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcGVuZGluZyA9IHRoaXMuX3BlbmRpbmdDbGFpbUNhbGxiYWNrcyAmJiBkb2NJZCAmJiB0aGlzLl9wZW5kaW5nQ2xhaW1DYWxsYmFja3MuZ2V0KGRvY0lkKTtcbiAgICAgICAgICAgICAgICBpZiAocGVuZGluZykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NsYWltQ2FsbGJhY2tzLmRlbGV0ZShkb2NJZCk7XG4gICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmcucmVzb2x2ZSh7IGRvY3VtZW50OiByZXN1bHQuZG9jdW1lbnQgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLnJlc29sdmUoeyBlcnJvcjogKHJlc3VsdCAmJiByZXN1bHQubWVzc2FnZSkgfHwgJ0NsYWltIGZhaWxlZCcgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0LnR5cGUgPT09ICdDcmVhdGVQdXJjaGFzZUludm9pY2VSZXN1bHQnICYmIHJlc3VsdC5kb2N1bWVudElkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHVyY2hhc2VEaWQgPSBTdHJpbmcocmVzdWx0LmRvY3VtZW50SWQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nQ3JlYXRlUHVyY2hhc2VJbnZvaWNlQmFja2VuZElkcykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NyZWF0ZVB1cmNoYXNlSW52b2ljZUJhY2tlbmRJZHMuZGVsZXRlKHB1cmNoYXNlRGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdwdXJjaGFzZUludm9pY2VSZWFkeScsIHtcbiAgICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudElkOiBwdXJjaGFzZURpZCxcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogcmVzdWx0LmFkZHJlc3MsXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudFNhdHM6IHJlc3VsdC5hbW91bnRTYXRzLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50SGFzaDogcmVzdWx0LmNvbnRlbnRIYXNoLFxuICAgICAgICAgICAgICAgICAgICBuZXR3b3JrOiByZXN1bHQubmV0d29ya1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICByZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhdHVzID09PSAnZXJyb3InICYmXG4gICAgICAgICAgICAgICAgcmVzdWx0LmRvY3VtZW50SWQgIT0gbnVsbCAmJiBTdHJpbmcocmVzdWx0LmRvY3VtZW50SWQpICE9PSAnJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdDcmVhdGVQdXJjaGFzZUludm9pY2VCYWNrZW5kSWRzICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NyZWF0ZVB1cmNoYXNlSW52b2ljZUJhY2tlbmRJZHMuaGFzKFN0cmluZyhyZXN1bHQuZG9jdW1lbnRJZCkpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHB1cmNoYXNlRXJyRGlkID0gU3RyaW5nKHJlc3VsdC5kb2N1bWVudElkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nQ3JlYXRlUHVyY2hhc2VJbnZvaWNlQmFja2VuZElkcy5kZWxldGUocHVyY2hhc2VFcnJEaWQpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncHVyY2hhc2VJbnZvaWNlRmFpbGVkJywge1xuICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50SWQ6IHB1cmNoYXNlRXJyRGlkLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBTdHJpbmcocmVzdWx0Lm1lc3NhZ2UgfHwgJ0NvdWxkIG5vdCBjcmVhdGUgcHVyY2hhc2UgaW52b2ljZScpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0LnR5cGUgPT09ICdDcmVhdGVEaXN0cmlidXRlSW52b2ljZVJlc3VsdCcgJiYgcmVzdWx0LmRvY3VtZW50SWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0RGlkID0gU3RyaW5nKHJlc3VsdC5kb2N1bWVudElkKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0NyZWF0ZURpc3RyaWJ1dGVJbnZvaWNlQmFja2VuZElkcykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NyZWF0ZURpc3RyaWJ1dGVJbnZvaWNlQmFja2VuZElkcy5kZWxldGUoZGlzdERpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZGlzdHJpYnV0ZUludm9pY2VSZWFkeScsIHtcbiAgICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudElkOiBkaXN0RGlkLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiByZXN1bHQuYWRkcmVzcyxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50U2F0czogcmVzdWx0LmFtb3VudFNhdHMsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZzogcmVzdWx0LmNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgbmV0d29yazogcmVzdWx0Lm5ldHdvcmtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgcmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9PT0gJ2Vycm9yJyAmJlxuICAgICAgICAgICAgICAgIHJlc3VsdC5kb2N1bWVudElkICE9IG51bGwgJiYgU3RyaW5nKHJlc3VsdC5kb2N1bWVudElkKSAhPT0gJycgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nQ3JlYXRlRGlzdHJpYnV0ZUludm9pY2VCYWNrZW5kSWRzICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NyZWF0ZURpc3RyaWJ1dGVJbnZvaWNlQmFja2VuZElkcy5oYXMoU3RyaW5nKHJlc3VsdC5kb2N1bWVudElkKSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdEVyckRpZCA9IFN0cmluZyhyZXN1bHQuZG9jdW1lbnRJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NyZWF0ZURpc3RyaWJ1dGVJbnZvaWNlQmFja2VuZElkcy5kZWxldGUoZGlzdEVyckRpZCk7XG4gICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkaXN0cmlidXRlSW52b2ljZUZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudElkOiBkaXN0RXJyRGlkLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBTdHJpbmcocmVzdWx0Lm1lc3NhZ2UgfHwgJ0NvdWxkIG5vdCBjcmVhdGUgZGlzdHJpYnV0ZSBpbnZvaWNlJylcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQudHlwZSA9PT0gJ0FjY2VwdERpc3RyaWJ1dGVQcm9wb3NhbFJlc3VsdCcgJiYgcmVzdWx0LmRvY3VtZW50SWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY2NEaWQgPSBTdHJpbmcocmVzdWx0LmRvY3VtZW50SWQpO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdBY2NlcHREaXN0cmlidXRlQ29udGV4dCAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0FjY2VwdERpc3RyaWJ1dGVDb250ZXh0LmJhY2tlbmRJZCA9PT0gYWNjRGlkXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nQWNjZXB0RGlzdHJpYnV0ZUNvbnRleHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rpc3RyaWJ1dGVJbnZvaWNlUmVhZHknLCB7XG4gICAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRJZDogYWNjRGlkLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiByZXN1bHQuYWRkcmVzcyxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50U2F0czogcmVzdWx0LmFtb3VudFNhdHMsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZzogcmVzdWx0LmNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgbmV0d29yazogcmVzdWx0Lm5ldHdvcmssXG4gICAgICAgICAgICAgICAgICAgIGZyb21Qcm9wb3NhbDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICByZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhdHVzID09PSAnZXJyb3InICYmXG4gICAgICAgICAgICAgICAgcmVzdWx0LmRvY3VtZW50SWQgIT0gbnVsbCAmJiBTdHJpbmcocmVzdWx0LmRvY3VtZW50SWQpICE9PSAnJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdBY2NlcHREaXN0cmlidXRlQ29udGV4dCAmJlxuICAgICAgICAgICAgICAgIFN0cmluZyhyZXN1bHQuZG9jdW1lbnRJZCkgPT09IHRoaXMuX3BlbmRpbmdBY2NlcHREaXN0cmlidXRlQ29udGV4dC5iYWNrZW5kSWRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fcGVuZGluZ0FjY2VwdERpc3RyaWJ1dGVDb250ZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdBY2NlcHREaXN0cmlidXRlQ29udGV4dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbERpZCA9IFN0cmluZyhyZXN1bHQuZG9jdW1lbnRJZCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2FjY2VwdERpc3RyaWJ1dGVQcm9wb3NhbEZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50SWQ6IGZhaWxEaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wb3NhbElkOiBjdHgucHJvcG9zYWxJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFN0cmluZyhyZXN1bHQubWVzc2FnZSB8fCAnQ291bGQgbm90IGFjY2VwdCBwcm9wb3NhbCcpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC50eXBlID09PSAnU2VuZERpc3RyaWJ1dGVQcm9wb3NhbFJlc3VsdCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9wZW5kaW5nU2VuZERpc3RyaWJ1dGVQcm9wb3NhbENvbnRleHQ7XG4gICAgICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1NlbmREaXN0cmlidXRlUHJvcG9zYWxDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZCA9IFN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5kb2N1bWVudElkICE9IG51bGwgJiYgU3RyaW5nKHJlc3VsdC5kb2N1bWVudElkKSAhPT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQuZG9jdW1lbnRJZFxuICAgICAgICAgICAgICAgICAgICAgIDogY3R4LmJhY2tlbmRJZFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZGlzdHJpYnV0ZVByb3Bvc2FsU2VudCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRJZDogZGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bvc2FsSWQ6IHJlc3VsdC5wcm9wb3NhbElkICE9IG51bGwgPyBTdHJpbmcocmVzdWx0LnByb3Bvc2FsSWQpIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcktleTogY3R4LnBlZXJLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rpc3RyaWJ1dGVQcm9wb3NhbEZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRJZDogZGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFN0cmluZyhyZXN1bHQubWVzc2FnZSB8fCAnQ291bGQgbm90IHNlbmQgaG9zdGluZyBvZmZlcicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMubWVyZ2VQdWJsaXNoRG9jdW1lbnRScGNSZXN1bHQocmVzdWx0KTtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQudHlwZSA9PT0gJ0NyZWF0ZUV4ZWN1dGlvbkNvbnRyYWN0UmVzdWx0JyAmJiByZXN1bHQuY29udHJhY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZXhlY3V0aW9uQ29udHJhY3RDcmVhdGVkJywge1xuICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHsgY29udHJhY3Q6IHJlc3VsdC5jb250cmFjdCwgaWQ6IHJlc3VsdC5pZCB8fCByZXN1bHQuY29udHJhY3QuaWQgfVxuICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC50eXBlID09PSAnQ3JlYXRlU3RvcmFnZUNvbnRyYWN0UmVzdWx0JyAmJiByZXN1bHQuY29udHJhY3QgJiYgcmVzdWx0LmNvbnRyYWN0LmRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFja2VuZERvY0lkID0gcmVzdWx0LmNvbnRyYWN0LmRvY3VtZW50OyAvLyBzaGEtYmFzZWQgaWRcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cmFjdElkID0gcmVzdWx0LmlkIHx8IHJlc3VsdC5jb250cmFjdC5pZDtcbiAgICAgICAgICAgICAgICBpZiAoYmFja2VuZERvY0lkICYmIGNvbnRyYWN0SWQpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzID0gdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMgfHwge307XG5cbiAgICAgICAgICAgICAgICAgIGxldCB0YXJnZXRJZCA9IGJhY2tlbmREb2NJZDtcbiAgICAgICAgICAgICAgICAgIC8vIFByZWZlciBsb2NhbCBhbGlhcyBieSBzaGEyNTYgd2hlbiBwcmVzZW50LlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbbG9jYWxJZCwgZXhpc3RpbmdEb2NdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdEb2MgJiYgKGV4aXN0aW5nRG9jLnNoYTI1NiA9PT0gYmFja2VuZERvY0lkIHx8IGV4aXN0aW5nRG9jLnNoYSA9PT0gYmFja2VuZERvY0lkKSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldElkID0gbG9jYWxJZDtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW3RhcmdldElkXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW3RhcmdldElkXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VDb250cmFjdElkOiBjb250cmFjdElkXG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0SWQgIT09IGJhY2tlbmREb2NJZCAmJiB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1tiYWNrZW5kRG9jSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1tiYWNrZW5kRG9jSWRdO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IHsgb3A6ICdhZGQnLCBwYXRoOiBgL2RvY3VtZW50cy8ke3RhcmdldElkfWAsIHZhbHVlOiB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1t0YXJnZXRJZF0gfSxcbiAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgIC8vIE5vdGlmeSB0aGF0IHBheW1lbnQgaXMgYm9uZGVkOyBwcm9wb3NhbHMgY2FuIHVwZGF0ZSB0byBzaG93IHRoZSBjb250cmFjdC5cbiAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnc3RvcmFnZUNvbnRyYWN0Qm9uZGVkJywge1xuICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHsgZG9jdW1lbnRJZDogYmFja2VuZERvY0lkLCBjb250cmFjdElkLCB0YXJnZXRJZCB9XG4gICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0LnR5cGUgPT09ICdDcmVhdGVTdG9yYWdlQ29udHJhY3RGYWlsZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3N0b3JhZ2VDb250cmFjdEJvbmRGYWlsZWQnLCB7XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50SWQ6IHJlc3VsdC5kb2N1bWVudElkLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IChyZXN1bHQubWVzc2FnZSAmJiBTdHJpbmcocmVzdWx0Lm1lc3NhZ2UpKSB8fCAnQ3JlYXRlIHN0b3JhZ2UgY29udHJhY3QgZmFpbGVkLidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMucmVzcG9uc2VDYXB0dXJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5yZXNwb25zZUNhcHR1cmUoe1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ0dlbmVyaWNNZXNzYWdlJyxcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UuYm9keVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnSlNPTkNhbGwgYm9keSBpcyBub3QgdmFsaWQgSlNPTiwgc2tpcHBpbmcgcGFyc2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0dFTkVSSUNfTUVTU0FHRSc6XG4gICAgICAgIGNhc2UgJ0dlbmVyaWNNZXNzYWdlJzpcbiAgICAgICAgY2FzZSAnUDJQX0JBU0VfTUVTU0FHRSc6XG4gICAgICAgICAgLy8gR0VORVJJQ19NRVNTQUdFICgxNTEwMykgaXMgdGhlIGxpdmUgdHJhbnNpdGlvbmFsIGNhcnJpZXI7IFAyUF9CQVNFX01FU1NBR0VcbiAgICAgICAgICAvLyByZW1haW5zIGFjY2VwdGVkIGZvciBwcmUtZml4IC8gUGVlck1lc3NhZ2UgZnJhbWVzIHRoYXQgY2FycmllZCB0aGUgc2FtZSBKU09OLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKG1lc3NhZ2UuYm9keSk7XG4gICAgICAgICAgICBjb25zdCBicmlkZ2VFbnYgPSBmYWJyaWNCcmlkZ2VFbnZlbG9wZS50cnlQYXJzZShwYXJzZWQpO1xuICAgICAgICAgICAgaWYgKGJyaWRnZUVudiAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2ZhYnJpY0JyaWRnZUVudmVsb3BlJywgeyBkZXRhaWw6IGJyaWRnZUVudiB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyc2VkICYmIHBhcnNlZC50eXBlID09PSAnVG9tYnN0b25lJyAmJiBwYXJzZWQub2JqZWN0ICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZmFicmljOnRvbWJzdG9uZScsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogcGFyc2VkLm9iamVjdC5hY3Rpdml0eU1lc3NhZ2VJZCB8fCBudWxsLFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnRJZDogcGFyc2VkLm9iamVjdC5kb2N1bWVudElkIHx8IG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyc2VkICYmIChcbiAgICAgICAgICAgICAgcGFyc2VkLnR5cGUgPT09ICdUcmFja2VkQXBwbGljYXRpb25Db250cmFjdFB1Ymxpc2gnIHx8XG4gICAgICAgICAgICAgIHBhcnNlZC50eXBlID09PSAnVHJhY2tlZEFwcGxpY2F0aW9uQ29udHJhY3RBY2NlcHRlZCcgfHxcbiAgICAgICAgICAgICAgcGFyc2VkLnR5cGUgPT09ICdUcmFja2VkQXBwbGljYXRpb25Db250cmFjdFJlamVjdGVkJ1xuICAgICAgICAgICAgKSAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2ZhYnJpYzp0cmFja2VkQXBwbGljYXRpb25Db250cmFjdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgdHlwZTogcGFyc2VkLnR5cGUsIG9iamVjdDogcGFyc2VkLm9iamVjdCB8fCBudWxsIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJzZWQgJiYgcGFyc2VkLnR5cGUgPT09ICdDb2xsYWJvcmF0aW9uSW52aXRhdGlvbicgJiYgcGFyc2VkLm9iamVjdCAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gcGFyc2VkLm9iamVjdDtcbiAgICAgICAgICAgICAgY29uc3QgbG9jYWxJZCA9IHRoaXMuX2dldElkZW50aXR5SWQoKSB8fCAnJztcbiAgICAgICAgICAgICAgY29uc3QgcmVjaXBpZW50ID0gcGF5bG9hZCAmJiBwYXlsb2FkLnJlY2lwaWVudEZhYnJpY1BlZXJJZCA/IFN0cmluZyhwYXlsb2FkLnJlY2lwaWVudEZhYnJpY1BlZXJJZCkgOiAnJztcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPVxuICAgICAgICAgICAgICAgICFyZWNpcGllbnQgfHxcbiAgICAgICAgICAgICAgICAobG9jYWxJZCAmJiByZWNpcGllbnQgPT09IGxvY2FsSWQpIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMucGVlcklkICYmIHJlY2lwaWVudCA9PT0gdGhpcy5wZWVySWQpO1xuICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2ZhYnJpYzpjb2xsYWJvcmF0aW9uSW52aXRhdGlvbicsIHsgZGV0YWlsOiBwYXlsb2FkIH0pKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGlkID0gcGF5bG9hZCAmJiBwYXlsb2FkLnJlY2lwaWVudFBlZXJJZGVudGl0eSA/IFN0cmluZyhwYXlsb2FkLnJlY2lwaWVudFBlZXJJZGVudGl0eSkgOiAnJztcbiAgICAgICAgICAgICAgICAgIHB1c2hVaU5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBgY29sbGFiLWludml0ZS0ke1N0cmluZyhwYXlsb2FkLmludml0YXRpb25JZCB8fCBEYXRlLm5vdygpKX1gLFxuICAgICAgICAgICAgICAgICAgICBraW5kOiAnY29sbGFib3JhdGlvbl9pbnZpdGUnLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ0NvbGxhYm9yYXRpb24gaW52aXRlJyxcbiAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU6IHBpZCA/IGBJbnZpdGUgZm9yICR7cGlkfWAgOiAnUmV2aWV3IGFuZCByZXNwb25kJyxcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogJy9zZXR0aW5ncy9jb2xsYWJvcmF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgY29weVRleHQ6IGAke1N0cmluZyhwYXlsb2FkLmFjY2VwdFVybCB8fCAnJyl9XFxuJHtTdHJpbmcocGF5bG9hZC5kZWNsaW5lVXJsIHx8ICcnKX1gLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcnNlZCAmJiBwYXJzZWQudHlwZSA9PT0gRE9DVU1FTlRfT0ZGRVIgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdmYWJyaWM6ZG9jdW1lbnRPZmZlcicsIHsgZGV0YWlsOiBwYXJzZWQgfSkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJzZWQgJiYgTWVzc2FnZS50eXBlRXF1YWxzKHBhcnNlZC50eXBlLCBQMlBfRklMRV9TRU5EKSAmJiBwYXJzZWQub2JqZWN0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRvYyA9IHBhcnNlZC5vYmplY3Q7XG4gICAgICAgICAgICAgIGlmIChkb2MuaWQgJiYgZG9jLmNvbnRlbnRCYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZG9jLnBhcnQgJiYgZG9jLnBhcnQudHJhbnNmZXJJZCAhPSBudWxsICYmIGRvYy5wYXJ0LnRvdGFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZVAycEZpbGVDaHVuayhkb2MsIGRvYy5wYXJ0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0SWQgPSB0aGlzLl9yZXNvbHZlRG9jdW1lbnRUYXJnZXRJZChkb2MuaWQsIGRvYyk7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZURvY3VtZW50KHRhcmdldElkLCB7IC4uLmRvYywgcmVjZWl2ZWRGcm9tUGVlcjogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BlcnNpc3REb2N1bWVudHMoKTtcbiAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogeyBvcDogJ2FkZCcsIHBhdGg6IGAvZG9jdW1lbnRzLyR7dGFyZ2V0SWR9YCwgdmFsdWU6IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW3RhcmdldElkXSB9LFxuICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFAyUF9QRUVSX0FMSUFTIGZyb20gRmFicmljIFAyUCAoSHViIEdlbmVyaWNNZXNzYWdlIGZhbi1vdXQpXG4gICAgICAgICAgICBpZiAocGFyc2VkICYmIE1lc3NhZ2UudHlwZUVxdWFscyhwYXJzZWQudHlwZSwgUDJQX1BFRVJfQUxJQVMpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSAocGFyc2VkLm9iamVjdCAmJiBwYXJzZWQub2JqZWN0Lm5hbWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICA/IFN0cmluZyhwYXJzZWQub2JqZWN0Lm5hbWUpLnRyaW0oKVxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGNvbnN0IHNpZ25lcklkID0gKHBhcnNlZC5hY3RvciAmJiBwYXJzZWQuYWN0b3IuaWQpID8gU3RyaW5nKHBhcnNlZC5hY3Rvci5pZCkgOiBudWxsO1xuICAgICAgICAgICAgICBpZiAobmFtZSAmJiBzaWduZXJJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJBbGlhc0J5SWQgPSB0aGlzLl9wZWVyQWxpYXNCeUlkIHx8IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMuX3BlZXJBbGlhc0J5SWRbc2lnbmVySWRdID0gbmFtZS5zbGljZSgwLCA2NCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFAyUF9QRUVSX0dPU1NJUCBmcm9tIEZhYnJpYyBQMlAgKGJyb2FkY2FzdCBieSBIdWIpXG4gICAgICAgICAgICBpZiAocGFyc2VkICYmIE1lc3NhZ2UudHlwZUVxdWFscyhwYXJzZWQudHlwZSwgUDJQX1BFRVJfR09TU0lQKSAmJiBBcnJheS5pc0FycmF5KHBhcnNlZC5vYmplY3QgJiYgcGFyc2VkLm9iamVjdC5wZWVycykpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcmVjb3JkUGVlckdvc3NpcFRvcG9sb2d5KHBhcnNlZCwgbnVsbCk7XG4gICAgICAgICAgICAgIGNvbnN0IHBlZXJzID0gcGFyc2VkLm9iamVjdC5wZWVycztcbiAgICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IHBlZXJzLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogcC5pZCB8fCBwLnBlZXJJZCxcbiAgICAgICAgICAgICAgICBwZWVySWQ6IHAuaWQgfHwgcC5wZWVySWQsXG4gICAgICAgICAgICAgICAgbGFzdFNlZW46IHAubGFzdFNlZW4gfHwgcC5yZWdpc3RlcmVkQXQgfHwgRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICByZWdpc3RlcmVkQXQ6IHAucmVnaXN0ZXJlZEF0IHx8IHAubGFzdFNlZW4gfHwgRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICBzb3VyY2U6ICdnb3NzaXAnXG4gICAgICAgICAgICAgIH0pKS5maWx0ZXIoKGMpID0+IGMuaWQgJiYgYy5pZCAhPT0gdGhpcy5wZWVySWQpO1xuICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPiAwKSB0aGlzLmhhbmRsZVBlZXJDYW5kaWRhdGVzKGNhbmRpZGF0ZXMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUDJQX1BFRVJJTkdfT0ZGRVIgZnJvbSBGYWJyaWMgUDJQIChicm9hZGNhc3QgYnkgSHViKVxuICAgICAgICAgICAgaWYgKHBhcnNlZCAmJiBNZXNzYWdlLnR5cGVFcXVhbHMocGFyc2VkLnR5cGUsIFAyUF9QRUVSSU5HX09GRkVSKSAmJiBwYXJzZWQub2JqZWN0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHBhcnNlZC5vYmplY3Q7XG4gICAgICAgICAgICAgIGNvbnN0IHNsb3RzID0gTnVtYmVyKG9iai5zbG90cyB8fCBvYmoubmVlZGVkIHx8IDEpO1xuICAgICAgICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSBvYmoudHJhbnNwb3J0IHx8ICd3ZWJydGMnO1xuICAgICAgICAgICAgICBpZiAodHJhbnNwb3J0ID09PSAnd2VicnRjJyAmJiBzbG90cyA+IDAgJiYgdGhpcy5wZWVySWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZlcmVySWQgPSBwYXJzZWQuYWN0b3IgJiYgcGFyc2VkLmFjdG9yLmlkO1xuICAgICAgICAgICAgICAgIGlmIChvZmZlcmVySWQgJiYgb2ZmZXJlcklkICE9PSB0aGlzLnBlZXJJZCAmJiAhdGhpcy53ZWJydGNQZWVycy5oYXMob2ZmZXJlcklkKSAmJiAhdGhpcy5fY29ubmVjdGluZ1BlZXJzLmhhcyhvZmZlcmVySWQpKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBlZXJDYW5kaWRhdGVzKFt7IGlkOiBvZmZlcmVySWQsIHBlZXJJZDogb2ZmZXJlcklkLCBsYXN0U2VlbjogRGF0ZS5ub3coKSwgc291cmNlOiAncGVlcmluZ09mZmVyJyB9XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJbnZlbnRvcnkgcmVzcG9uc2VzIGZyb20gcGVlcnMgZm9yIGRvY3VtZW50cywgc3RvcmVkIHVuZGVyIGdsb2JhbFN0YXRlLnBlZXJzW3BlZXJJZF0uaW52ZW50b3J5LmRvY3VtZW50cy5cbiAgICAgICAgICAgIGlmIChpc0RvY3VtZW50SW52ZW50b3J5RG9jdW1lbnRzT2ZmZXJSZXNwb25zZShwYXJzZWQpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBlZXJJZCA9IHBhcnNlZC5hY3RvciAmJiBwYXJzZWQuYWN0b3IuaWQ7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuaXNBcnJheShwYXJzZWQub2JqZWN0Lml0ZW1zKSA/IHBhcnNlZC5vYmplY3QuaXRlbXMgOiBbXTtcbiAgICAgICAgICAgICAgaWYgKHBlZXJJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2xvYmFsU3RhdGUucGVlcnMgPSB0aGlzLmdsb2JhbFN0YXRlLnBlZXJzIHx8IHt9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXNUb1RvdWNoID0gbmV3IFNldChbcGVlcklkXSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMuZ2xvYmFsU3RhdGUucGVlcnMpKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBleCA9IHRoaXMuZ2xvYmFsU3RhdGUucGVlcnNba107XG4gICAgICAgICAgICAgICAgICBpZiAoZXggJiYgZXguaWQgPT09IHBlZXJJZCkga2V5c1RvVG91Y2guYWRkKGspO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2Yga2V5c1RvVG91Y2gpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5nbG9iYWxTdGF0ZS5wZWVyc1trXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGludmVudG9yeSA9IGV4aXN0aW5nLmludmVudG9yeSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICAgICAgICAgICAgICBpbnZlbnRvcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5pbnZlbnRvcnksXG4gICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRzOiBpdGVtc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgdGhpcy5nbG9iYWxTdGF0ZS5wZWVyc1trXSA9IG5leHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAnYWRkJywgcGF0aDogYC9wZWVycy8ke3BlZXJJZH1gLCB2YWx1ZTogdGhpcy5nbG9iYWxTdGF0ZS5wZWVyc1twZWVySWRdIH0sXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogbm90IEpTT04gb3Igbm90IGZpbGUgbWVzc2FnZSAqLyB9XG4gICAgICAgICAgdGhpcy5wcm9wcy5yZXNwb25zZUNhcHR1cmUoe1xuICAgICAgICAgICAgdHlwZTogJ0dlbmVyaWNNZXNzYWdlJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UuYm9keVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQMlBfRk9SV0FSRCc6XG4gICAgICAgICAgLy8gRGlyZWN0ZWQgb25pb24gaXMgVENQIFBlZXLigJN0ZXJtaW5hdGVkIChAZmFicmljL2NvcmUgUGVlciNzZW5kT25pb24pLlxuICAgICAgICAgIC8vIERvIG5vdCBwZWVsIGludG8gdGhlIGJyb3dzZXIgbWVzaCBvciB3cmFwIGluIFAyUF9SRUxBWSBmbG9vZCDigJQgdGhhdFxuICAgICAgICAgIC8vIHdvdWxkIGV4cG9zZSBob3AgbWV0YWRhdGEgYW5kIGRlZmVhdCBJUC1oaWRpbmcgcm91dGVzLlxuICAgICAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0gSWdub3JpbmcgUDJQX0ZPUldBUkQgb24gV2ViU29ja2V0ICh1c2UgSHViIFNlbmRPbmlvbiAvIGRlc2t0b3AgUGVlciknKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnUDJQX1JFTEFZJzpcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gUGVlci1tZXNoIGxheW91dDogYm9keSA9IHJhdyBpbm5lciBNZXNzYWdlIGJ5dGVzIChtYWdpYyArIGhlYWRlciArIGJvZHkpLlxuICAgICAgICAgICAgY29uc3QgcmVsYXlSYXcgPSBtZXNzYWdlLnJhdyAmJiBCdWZmZXIuaXNCdWZmZXIobWVzc2FnZS5yYXcuZGF0YSlcbiAgICAgICAgICAgICAgPyBtZXNzYWdlLnJhdy5kYXRhXG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcmVsYXlSYXcgJiZcbiAgICAgICAgICAgICAgcmVsYXlSYXcubGVuZ3RoID49IEZBQlJJQ19XSVJFX0hFQURFUl9TSVpFICYmXG4gICAgICAgICAgICAgIHJlbGF5UmF3LnJlYWRVSW50MzJCRSgwKSA9PT0gTUFHSUNfQllURVNcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLm9uU29ja2V0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogcmVsYXlSYXcsXG4gICAgICAgICAgICAgICAgX2ZhYnJpY1RyYW5zcG9ydDogeyBzZXNzaW9uSWQ6IEhVQl9GQUJSSUNfU0VTU0lPTl9JRCwga2luZDogU0VTU0lPTl9LSU5EX0hVQiB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEh1YuKGlGJyb3dzZXIgbGF5b3V0OiBKU09OIHsgb3JpZ2luYWwsIG9yaWdpbmFsVHlwZSwgaG9wcyB9LlxuICAgICAgICAgICAgY29uc3QgZW52ZWxvcGUgPSBKU09OLnBhcnNlKG1lc3NhZ2UuYm9keSk7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGVudmVsb3BlICYmIGVudmVsb3BlLm9yaWdpbmFsO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxUeXBlID0gZW52ZWxvcGUgJiYgZW52ZWxvcGUub3JpZ2luYWxUeXBlO1xuICAgICAgICAgICAgaWYgKCFvcmlnaW5hbCB8fCAhb3JpZ2luYWxUeXBlKSBicmVhaztcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbFR5cGUgPT09ICdmYWJyaWMtbWVzc2FnZScpIHtcbiAgICAgICAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20ob3JpZ2luYWwsICdiYXNlNjQnKTtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RIb3AgPSBlbnZlbG9wZSAmJiBBcnJheS5pc0FycmF5KGVudmVsb3BlLmhvcHMpICYmIGVudmVsb3BlLmhvcHNbMF0gJiYgZW52ZWxvcGUuaG9wc1swXS5mcm9tO1xuICAgICAgICAgICAgICBjb25zdCByZWxJZCA9IGZpcnN0SG9wICE9IG51bGwgPyBTdHJpbmcoZmlyc3RIb3ApIDogSFVCX0ZBQlJJQ19TRVNTSU9OX0lEO1xuICAgICAgICAgICAgICBjb25zdCByZWxLaW5kID0gZmlyc3RIb3AgIT0gbnVsbCA/IFNFU1NJT05fS0lORF9XRUJSVEMgOiBTRVNTSU9OX0tJTkRfSFVCO1xuICAgICAgICAgICAgICB0aGlzLm9uU29ja2V0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogYnVmLFxuICAgICAgICAgICAgICAgIF9mYWJyaWNUcmFuc3BvcnQ6IHsgc2Vzc2lvbklkOiByZWxJZCwga2luZDogcmVsS2luZCB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNZXNzYWdlLnR5cGVFcXVhbHMob3JpZ2luYWxUeXBlLCBQMlBfUEVFUl9HT1NTSVApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHR5cGVvZiBvcmlnaW5hbCA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKG9yaWdpbmFsKSA6IG9yaWdpbmFsO1xuICAgICAgICAgICAgICB0aGlzLl9yZWNvcmRQZWVyR29zc2lwVG9wb2xvZ3kocGFyc2VkLCBudWxsKTtcbiAgICAgICAgICAgICAgY29uc3QgcGVlcnMgPSBBcnJheS5pc0FycmF5KHBhcnNlZCAmJiBwYXJzZWQub2JqZWN0ICYmIHBhcnNlZC5vYmplY3QucGVlcnMpID8gcGFyc2VkLm9iamVjdC5wZWVycyA6IFtdO1xuICAgICAgICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gcGVlcnMubWFwKChwKSA9PiAoe1xuICAgICAgICAgICAgICAgIGlkOiBwLmlkIHx8IHAucGVlcklkLFxuICAgICAgICAgICAgICAgIHBlZXJJZDogcC5pZCB8fCBwLnBlZXJJZCxcbiAgICAgICAgICAgICAgICBsYXN0U2VlbjogcC5sYXN0U2VlbiB8fCBwLnJlZ2lzdGVyZWRBdCB8fCBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRBdDogcC5yZWdpc3RlcmVkQXQgfHwgcC5sYXN0U2VlbiB8fCBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ2dvc3NpcCdcbiAgICAgICAgICAgICAgfSkpLmZpbHRlcigoYykgPT4gYy5pZCAmJiBjLmlkICE9PSB0aGlzLnBlZXJJZCk7XG4gICAgICAgICAgICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA+IDApIHRoaXMuaGFuZGxlUGVlckNhbmRpZGF0ZXMoY2FuZGlkYXRlcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1lc3NhZ2UudHlwZUVxdWFscyhvcmlnaW5hbFR5cGUsIFAyUF9QRUVSSU5HX09GRkVSKSkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSB0eXBlb2Ygb3JpZ2luYWwgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShvcmlnaW5hbCkgOiBvcmlnaW5hbDtcbiAgICAgICAgICAgICAgY29uc3Qgb2JqID0gKHBhcnNlZCAmJiBwYXJzZWQub2JqZWN0KSB8fCB7fTtcbiAgICAgICAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0gb2JqLnRyYW5zcG9ydCB8fCAnd2VicnRjJztcbiAgICAgICAgICAgICAgY29uc3Qgc2xvdHMgPSBOdW1iZXIob2JqLnNsb3RzIHx8IG9iai5uZWVkZWQgfHwgMSk7XG4gICAgICAgICAgICAgIGlmICh0cmFuc3BvcnQgPT09ICd3ZWJydGMnICYmIHNsb3RzID4gMCAmJiB0aGlzLnBlZXJJZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZmVyZXJJZCA9IHBhcnNlZCAmJiBwYXJzZWQuYWN0b3IgJiYgcGFyc2VkLmFjdG9yLmlkO1xuICAgICAgICAgICAgICAgIGlmIChvZmZlcmVySWQgJiYgb2ZmZXJlcklkICE9PSB0aGlzLnBlZXJJZCAmJiAhdGhpcy53ZWJydGNQZWVycy5oYXMob2ZmZXJlcklkKSAmJiAhdGhpcy5fY29ubmVjdGluZ1BlZXJzLmhhcyhvZmZlcmVySWQpKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBlZXJDYW5kaWRhdGVzKFt7IGlkOiBvZmZlcmVySWQsIHBlZXJJZDogb2ZmZXJlcklkLCBsYXN0U2VlbjogRGF0ZS5ub3coKSwgc291cmNlOiAncGVlcmluZ09mZmVyJyB9XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRG9jdW1lbnRJbnZlbnRvcnlSZXNwb25zZVR5cGUob3JpZ2luYWxUeXBlKSkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSB0eXBlb2Ygb3JpZ2luYWwgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShvcmlnaW5hbCkgOiBvcmlnaW5hbDtcbiAgICAgICAgICAgICAgaWYgKGlzRG9jdW1lbnRJbnZlbnRvcnlEb2N1bWVudHNPZmZlclJlc3BvbnNlKHBhcnNlZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwZWVySWQgPSBwYXJzZWQuYWN0b3IgJiYgcGFyc2VkLmFjdG9yLmlkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuaXNBcnJheShwYXJzZWQub2JqZWN0Lml0ZW1zKSA/IHBhcnNlZC5vYmplY3QuaXRlbXMgOiBbXTtcbiAgICAgICAgICAgICAgICBpZiAocGVlcklkKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmdsb2JhbFN0YXRlLnBlZXJzID0gdGhpcy5nbG9iYWxTdGF0ZS5wZWVycyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXNUb1RvdWNoID0gbmV3IFNldChbcGVlcklkXSk7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy5nbG9iYWxTdGF0ZS5wZWVycykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXggPSB0aGlzLmdsb2JhbFN0YXRlLnBlZXJzW2tdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXggJiYgZXguaWQgPT09IHBlZXJJZCkga2V5c1RvVG91Y2guYWRkKGspO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIGtleXNUb1RvdWNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5nbG9iYWxTdGF0ZS5wZWVyc1trXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52ZW50b3J5ID0gZXhpc3RpbmcuaW52ZW50b3J5IHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdsb2JhbFN0YXRlLnBlZXJzW2tdID0ge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICAgICAgICAgICAgICAgIGludmVudG9yeTogeyAuLi5pbnZlbnRvcnksIGRvY3VtZW50czogaXRlbXMgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdnbG9iYWxTdGF0ZVVwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAnYWRkJywgcGF0aDogYC9wZWVycy8ke3BlZXJJZH1gLCB2YWx1ZTogdGhpcy5nbG9iYWxTdGF0ZS5wZWVyc1twZWVySWRdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU3RhdGU6IHRoaXMuZ2xvYmFsU3RhdGVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjaGF0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChNZXNzYWdlLnR5cGVFcXVhbHMob3JpZ2luYWxUeXBlLCBQMlBfQ0hBVF9NRVNTQUdFKSkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIG9yaWdpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKG9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgIGNoYXQgPSAocGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgICAgICAgICA/IHBhcnNlZFxuICAgICAgICAgICAgICAgICAgICA6IHsgdHlwZTogTWVzc2FnZS5jYW5vbmljYWxUeXBlTmFtZShQMlBfQ0hBVF9NRVNTQUdFKSwgdGV4dDogU3RyaW5nKG9yaWdpbmFsKSB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgICAgICAgIC8vIE1lc2ggYm9keSBpcyBVVEYtOCB0ZXh0IG9ubHkgKFdlYlJUQyDihpIgSHViIFJlbGF5RnJvbVdlYlJUQykuXG4gICAgICAgICAgICAgICAgICBjaGF0ID0geyB0eXBlOiBNZXNzYWdlLmNhbm9uaWNhbFR5cGVOYW1lKFAyUF9DSEFUX01FU1NBR0UpLCB0ZXh0OiBvcmlnaW5hbCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGF0ID0gb3JpZ2luYWw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRDaGF0ID0gbm9ybWFsaXplUDJwQ2hhdE1lc3NhZ2UoY2hhdCk7XG4gICAgICAgICAgICBpZiAoIW5vcm1hbGl6ZWRDaGF0KSBicmVhaztcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBjaGF0VGV4dE9mKG5vcm1hbGl6ZWRDaGF0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9oYW5kbGVIdGxjS2V5UmV2ZWFsKGNvbnRlbnQpKSBicmVhaztcbiAgICAgICAgICAgIGNvbnN0IHByb3Bvc2FsID0gdGhpcy5fcGFyc2VEaXN0cmlidXRlUHJvcG9zYWwoY29udGVudCwgbm9ybWFsaXplZENoYXQpO1xuICAgICAgICAgICAgaWYgKHByb3Bvc2FsKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3N0b3JlRGlzdHJpYnV0ZVByb3Bvc2FsKHByb3Bvc2FsKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdHJ5RGlzcGF0Y2hGZWRlcmF0aW9uQ29udHJhY3RJbnZpdGVGcm9tQ2hhdChjb250ZW50LCBub3JtYWxpemVkQ2hhdCkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdHJ5RGlzcGF0Y2hDb2xsYWJvcmF0aW9uSW52aXRlRnJvbUNoYXQoY29udGVudCwgbm9ybWFsaXplZENoYXQpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVsYXlPZmZlclByZWZpeCA9IGBbJHtET0NVTUVOVF9PRkZFUn1dIGA7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnICYmIGNvbnRlbnQuc3RhcnRzV2l0aChyZWxheU9mZmVyUHJlZml4KSAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudiA9IEpTT04ucGFyc2UoY29udGVudC5zbGljZShyZWxheU9mZmVyUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIGlmIChlbnYgJiYgZW52LnR5cGUgPT09IERPQ1VNRU5UX09GRkVSKSB7XG4gICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2ZhYnJpYzpkb2N1bWVudE9mZmVyJywgeyBkZXRhaWw6IGVudiB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChfKSB7IC8qIGlnbm9yZSAqLyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNvbnRlbnQudHJpbSgpKSBicmVhaztcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSAobm9ybWFsaXplZENoYXQub2JqZWN0ICYmIG5vcm1hbGl6ZWRDaGF0Lm9iamVjdC5jcmVhdGVkKSB8fCBjaGF0LmNyZWF0ZWQgfHwgRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gKG5vcm1hbGl6ZWRDaGF0Lm9iamVjdCAmJiBub3JtYWxpemVkQ2hhdC5vYmplY3QuaWQpIHx8XG4gICAgICAgICAgICAgIGBjaGF0OiR7Y3JlYXRlZH06JHsobm9ybWFsaXplZENoYXQuYWN0b3IgJiYgbm9ybWFsaXplZENoYXQuYWN0b3IuaWQpIHx8ICd1bmtub3duJ31gO1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyA9IHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXMgfHwge307XG4gICAgICAgICAgICBjb25zdCBjbGllbnRJZCA9IG5vcm1hbGl6ZWRDaGF0Lm9iamVjdCAmJiBub3JtYWxpemVkQ2hhdC5vYmplY3QuY2xpZW50SWQ7XG4gICAgICAgICAgICBpZiAoY2xpZW50SWQgJiYgdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlc1tjbGllbnRJZF0pIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNbY2xpZW50SWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlc1tpZF0gPSBPYmplY3QuYXNzaWduKHt9LCBub3JtYWxpemVkQ2hhdCwge1xuICAgICAgICAgICAgICB0cmFuc3BvcnQ6ICdyZWxheScsXG4gICAgICAgICAgICAgIGRlbGl2ZXJ5OiB7IHZpYTogJ2JyaWRnZScsIGhvcHM6IGVudmVsb3BlLmhvcHMgfHwgW10gfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb246IHsgb3A6ICdhZGQnLCBwYXRoOiBgL21lc3NhZ2VzLyR7aWR9YCwgdmFsdWU6IHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNbaWRdIH0sXG4gICAgICAgICAgICAgICAgZ2xvYmFsU3RhdGU6IHRoaXMuZ2xvYmFsU3RhdGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdGhpcy5fcGVyc2lzdE1lc3NhZ2VzKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnQ291bGQgbm90IHBhcnNlIFAyUF9SRUxBWSBlbnZlbG9wZTonLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQ0hBVF9NRVNTQUdFJzpcbiAgICAgICAgY2FzZSAnQ2hhdE1lc3NhZ2UnOlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByYXdDaGF0ID0gSlNPTi5wYXJzZShtZXNzYWdlLmJvZHkpO1xuICAgICAgICAgICAgY29uc3QgY2hhdCA9IG5vcm1hbGl6ZVAycENoYXRNZXNzYWdlKHJhd0NoYXQpIHx8IHJhd0NoYXQ7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gY2hhdFRleHRPZihjaGF0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9oYW5kbGVIdGxjS2V5UmV2ZWFsKGNvbnRlbnQpKSBicmVhaztcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBEaXN0cmlidXRlIFByb3Bvc2FsIChzdHJ1Y3R1cmVkIEpTT04gaW4gY2hhdCBjb250ZW50KVxuICAgICAgICAgICAgY29uc3QgcHJvcG9zYWwgPSB0aGlzLl9wYXJzZURpc3RyaWJ1dGVQcm9wb3NhbChjb250ZW50LCBjaGF0KTtcbiAgICAgICAgICAgIGlmIChwcm9wb3NhbCkge1xuICAgICAgICAgICAgICB0aGlzLl9zdG9yZURpc3RyaWJ1dGVQcm9wb3NhbChwcm9wb3NhbCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3RyeURpc3BhdGNoRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlRnJvbUNoYXQoY29udGVudCwgY2hhdCkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdHJ5RGlzcGF0Y2hDb2xsYWJvcmF0aW9uSW52aXRlRnJvbUNoYXQoY29udGVudCwgY2hhdCkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9mZmVyUHJlZml4ID0gYFske0RPQ1VNRU5UX09GRkVSfV0gYDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycgJiYgY29udGVudC5zdGFydHNXaXRoKG9mZmVyUHJlZml4KSAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudiA9IEpTT04ucGFyc2UoY29udGVudC5zbGljZShvZmZlclByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICBpZiAoZW52ICYmIGVudi50eXBlID09PSBET0NVTUVOVF9PRkZFUikge1xuICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdmYWJyaWM6ZG9jdW1lbnRPZmZlcicsIHsgZGV0YWlsOiBlbnYgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoXykgeyAvKiBpZ25vcmUgbWFsZm9ybWVkIGRlbW8gbGluZSAqLyB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghY29udGVudC50cmltKCkpIGJyZWFrO1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVkID0gKGNoYXQgJiYgY2hhdC5vYmplY3QgJiYgY2hhdC5vYmplY3QuY3JlYXRlZCkgfHwgKGNoYXQgJiYgY2hhdC5jcmVhdGVkKSB8fCBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY29uc3QgaWQgPSAoY2hhdCAmJiBjaGF0Lm9iamVjdCAmJiBjaGF0Lm9iamVjdC5pZCkgfHxcbiAgICAgICAgICAgICAgYGNoYXQ6JHtjcmVhdGVkfTokeyhjaGF0ICYmIGNoYXQuYWN0b3IgJiYgY2hhdC5hY3Rvci5pZCkgfHwgJ3Vua25vd24nfWA7XG4gICAgICAgICAgICB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzID0gdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MgJiYgdGhpcy5zZXR0aW5ncy5kZWJ1Zykge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIExpZ2h0d2VpZ2h0IGF1ZGl0IGxvZyBzbyB3ZSBjYW4gc2VlIGV4YWN0bHkgaG93IGNoYXQgaWRlbnRpdGllc1xuICAgICAgICAgICAgICAgIC8vIGFyZSBmbG93aW5nIGludG8gdGhlIGJyb3dzZXIuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tCUklER0U6Q0hBVF0nLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICBhY3RvcklkOiBjaGF0ICYmIGNoYXQuYWN0b3IgJiYgY2hhdC5hY3Rvci5pZCxcbiAgICAgICAgICAgICAgICAgIGNsaWVudElkOiBjaGF0ICYmIGNoYXQub2JqZWN0ICYmIGNoYXQub2JqZWN0LmNsaWVudElkLFxuICAgICAgICAgICAgICAgICAgY2hhbm5lbDogY2hhdCAmJiBjaGF0Lm9iamVjdCAmJiBjaGF0Lm9iamVjdC5jaGFubmVsLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbQlJJREdFOkNIQVRdJywgJ3BhcnNlIGZhaWxlZCcsIHNhZmVJZGVudGl0eUVycihlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdGhpcyBtZXNzYWdlIGhhcyBhIGNsaWVudElkLCByZW1vdmUgdGhlIHBlbmRpbmcgb3B0aW1pc3RpYyBlbnRyeSB3ZSBzdG9yZWQgZWFybGllclxuICAgICAgICAgICAgY29uc3QgY2xpZW50SWQgPSBjaGF0ICYmIGNoYXQub2JqZWN0ICYmIGNoYXQub2JqZWN0LmNsaWVudElkO1xuICAgICAgICAgICAgaWYgKGNsaWVudElkICYmIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNbY2xpZW50SWRdKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzW2NsaWVudElkXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlc1tpZF0gPSBjaGF0O1xuXG4gICAgICAgICAgICAvLyBOb3RpZnkgVUkgb2YgbmV3IGNoYXQgbWVzc2FnZSAocmUtdXNlIGV4aXN0aW5nIGdsb2JhbFN0YXRlVXBkYXRlIGNoYW5uZWwpLlxuICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdnbG9iYWxTdGF0ZVVwZGF0ZScsIHtcbiAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAnYWRkJywgcGF0aDogYC9tZXNzYWdlcy8ke2lkfWAsIHZhbHVlOiBjaGF0IH0sXG4gICAgICAgICAgICAgICAgZ2xvYmFsU3RhdGU6IHRoaXMuZ2xvYmFsU3RhdGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdGhpcy5fcGVyc2lzdE1lc3NhZ2VzKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnQ291bGQgbm90IHBhcnNlIENoYXRNZXNzYWdlIGJvZHk6Jywgc2FmZUlkZW50aXR5RXJyKGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0pTT05QYXRjaCc6XG4gICAgICAgICAgLy8gSGFuZGxlIEpTT05QYXRjaCBtZXNzYWdlcyAoY2Fub25pY2FsIHBhdGgpLiBCb2R5IG1heSBiZSBtZXNzYWdlLmJvZHkgb3IgbWVzc2FnZS5kYXRhIChGYWJyaWMgTWVzc2FnZS5mcm9tUmF3IHNldHMgZGF0YTsgYm9keSBnZXR0ZXIgdXNlcyByYXcuZGF0YSkuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlSYXcgPSBtZXNzYWdlLmJvZHkgIT0gbnVsbCA/IG1lc3NhZ2UuYm9keSA6IChtZXNzYWdlLmRhdGEgIT0gbnVsbCAmJiB0eXBlb2YgbWVzc2FnZS5kYXRhID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UuZGF0YSA6IChtZXNzYWdlLmRhdGEgIT0gbnVsbCAmJiAoQnVmZmVyLmlzQnVmZmVyKG1lc3NhZ2UuZGF0YSkgfHwgKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBtZXNzYWdlLmRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkgPyBCdWZmZXIuZnJvbShtZXNzYWdlLmRhdGEpLnRvU3RyaW5nKCd1dGY4JykgOiBudWxsKSk7XG4gICAgICAgICAgICBpZiAoYm9keVJhdyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0pTT05QYXRjaCBtZXNzYWdlIGhhcyBubyBib2R5L2RhdGEnKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXRjaERhdGEgPSBKU09OLnBhcnNlKGJvZHlSYXcpO1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgZ2xvYmFsIHN0YXRlXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUdsb2JhbFN0YXRlKHBhdGNoRGF0YSk7XG5cbiAgICAgICAgICAgIC8vIEVtaXQgYXMgUEFUQ0ggZm9ybWF0IGZvciBjb21wb25lbnRzXG4gICAgICAgICAgICB0aGlzLnByb3BzLnJlc3BvbnNlQ2FwdHVyZSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdQQVRDSCcsXG4gICAgICAgICAgICAgIHBhdGg6IHBhdGNoRGF0YS5wYXRoLFxuICAgICAgICAgICAgICB2YWx1ZTogcGF0Y2hEYXRhLnZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdDb3VsZCBub3QgcGFyc2UgSlNPTlBhdGNoIG1lc3NhZ2UgYm9keTonLCBzYWZlSWRlbnRpdHlFcnIocGFyc2VFcnJvcikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTWVzc2FnZVN0YXJ0JzpcbiAgICAgICAgY2FzZSAnTWVzc2FnZUNodW5rJzpcbiAgICAgICAgY2FzZSAnSGVscE1zZ1VzZXInOlxuICAgICAgICBjYXNlICdIZWxwTXNnQWRtaW4nOlxuICAgICAgICBjYXNlICdJbmdlc3RGaWxlJzpcbiAgICAgICAgY2FzZSAnSW5nZXN0RG9jdW1lbnQnOlxuICAgICAgICBjYXNlICd0YWtlbkpvYic6XG4gICAgICAgIGNhc2UgJ2NvbXBsZXRlZEpvYic6XG4gICAgICAgICAgdGhpcy5wcm9wcy5yZXNwb25zZUNhcHR1cmUobWVzc2FnZS50b09iamVjdCgpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIGNvbXBvbmVudCBzdGF0ZSB3aXRoIG1lc3NhZ2UgZGF0YVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGRhdGE6IG1lc3NhZ2UudG9PYmplY3QoKSB9LCAoKSA9PiB7XG4gICAgICAgIC8vIENhbGwgb25TdGF0ZVVwZGF0ZSBwcm9wIGlmIHByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uU3RhdGVVcGRhdGUgJiYgdHlwZW9mIHRoaXMucHJvcHMub25TdGF0ZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRoaXMucHJvcHMub25TdGF0ZVVwZGF0ZSh0aGlzLnN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIHByb2Nlc3NpbmcgbWVzc2FnZTonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlcnJvcjogc2FmZUlkZW50aXR5RXJyKGVycm9yKSB9LCAoKSA9PiB7XG4gICAgICAgIC8vIENhbGwgb25TdGF0ZVVwZGF0ZSBwcm9wIGlmIHByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uU3RhdGVVcGRhdGUgJiYgdHlwZW9mIHRoaXMucHJvcHMub25TdGF0ZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRoaXMucHJvcHMub25TdGF0ZVVwZGF0ZSh0aGlzLnN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25Tb2NrZXRPcGVuICgpIHtcbiAgICB0aGlzLl9mYWJyaWNIdWJSZWNvbm5lY3RTdXNwZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZXNldEh1YkZhYnJpY1RyYW5zcG9ydFNlc3Npb24oKTtcbiAgICB0aGlzLmF0dGVtcHRzID0gMTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5zZW5kTmV0d29ya1N0YXR1c1JlcXVlc3QoKTtcbiAgICB0aGlzLl9yZXN1YnNjcmliZUFsbCgpO1xuICAgIHRoaXMuX2ZsdXNoQ2hhdFN1Ym1pc3Npb25RdWV1ZSgpO1xuICAgIHRoaXMuX2ZsdXNoUGVuZGluZ0h1YkNoYXRRdWV1ZSgpO1xuICAgIHRoaXMuX2ZsdXNoUGVlck1lc3NhZ2VRdWV1ZSgpO1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ1BpbmcnLCBub3cudG9TdHJpbmcoKV0pO1xuICAgIGNvbnN0IG1lc3NhZ2VCdWZmZXIgPSBtZXNzYWdlLnRvQnVmZmVyKCk7XG4gICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlQnVmZmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIG5ldHdvcmsgc3RhdHVzIHJlcXVlc3QgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAqL1xuICBzZW5kTmV0d29ya1N0YXR1c1JlcXVlc3QgKCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLmZyb21WZWN0b3IoWydKU09OQ2FsbCcsIEpTT04uc3RyaW5naWZ5KHsgbWV0aG9kOiAnR2V0TmV0d29ya1N0YXR1cycsIHBhcmFtczogW10gfSldKTtcbiAgICBjb25zdCBidWZmZXIgPSBtZXNzYWdlLnRvQnVmZmVyKCk7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuZGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tCUklER0VdJywgJ1NlbmRpbmcgbmV0d29yayBzdGF0dXMgcmVxdWVzdCwgYnl0ZXM6JywgYnVmZmVyICYmIGJ1ZmZlci5sZW5ndGgpO1xuICAgIH1cbiAgICB0aGlzLnNlbmRTaWduZWRNZXNzYWdlKGJ1ZmZlcik7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYSB7QGxpbmsgR2V0TmV0d29ya1N0YXR1c30gLyBwdXNoIHBheWxvYWQgKHNhbWUgYXMgV2ViU29ja2V0IEpTT05DYWxsUmVzdWx0IHBhdGgpLlxuICAgKiBVc2VkIGJ5IEhUVFAgYC9zZXJ2aWNlcy9ycGNgIGZhbGxiYWNrcyB3aGVuIHRoZSBVSSBuZWVkcyBjYXRhbG9nICsgcGVlcnMgd2l0aG91dCB3YWl0aW5nIG9uIFdTLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVzdWx0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIHdoZW4gYXBwbGllZFxuICAgKi9cbiAgYXBwbHlIdWJOZXR3b3JrU3RhdHVzUGF5bG9hZCAocmVzdWx0KSB7XG4gICAgaWYgKCFyZXN1bHQgfHwgdHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcgfHwgcmVzdWx0LnR5cGUgfHwgIWlzSHViTmV0d29ya1N0YXR1c1NoYXBlKHJlc3VsdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IG5ldHdvcmtTdGF0dXM6IHJlc3VsdCwgbGFzdE5ldHdvcmtTdGF0dXM6IHJlc3VsdCB9LCAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9mbHVzaFBlZXJNZXNzYWdlUXVldWUoKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB3aW5kb3cuX19GQUJSSUNfTEFTVF9ORVRXT1JLX1NUQVRVU19fID0gcmVzdWx0O1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbmV0d29ya1N0YXR1c1VwZGF0ZScsIHsgZGV0YWlsOiB7IG5ldHdvcmtTdGF0dXM6IHJlc3VsdCB9IH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoXykge31cbiAgICB9KTtcbiAgICBjb25zdCBwdWJsaXNoZWQgPSByZXN1bHQucHVibGlzaGVkRG9jdW1lbnRzO1xuICAgIGlmIChwdWJsaXNoZWQgJiYgdHlwZW9mIHB1Ymxpc2hlZCA9PT0gJ29iamVjdCcgJiYgdGhpcy5nbG9iYWxTdGF0ZSAmJiB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cykge1xuICAgICAgY29uc3QgY2hhbmdlZCA9IG1lcmdlUHVibGlzaGVkRG9jdW1lbnRzRnJvbUh1YlN0YXR1cyh0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cywgcHVibGlzaGVkKTtcbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHsgb3BlcmF0aW9uOiB7IG9wOiAncmVwbGFjZScsIHBhdGg6ICcvZG9jdW1lbnRzJywgdmFsdWU6IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzIH0sIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGh1Yk1lc3NhZ2VzID0gcmVzdWx0Lm1lc3NhZ2VzO1xuICAgIGlmIChodWJNZXNzYWdlcyAmJiB0eXBlb2YgaHViTWVzc2FnZXMgPT09ICdvYmplY3QnICYmIHRoaXMuZ2xvYmFsU3RhdGUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzICYmIHR5cGVvZiB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzID09PSAnb2JqZWN0J1xuICAgICAgICA/IHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNcbiAgICAgICAgOiB7fTtcbiAgICAgIGNvbnN0IG1lcmdlZCA9IHsgLi4uY3VycmVudCwgLi4uaHViTWVzc2FnZXMgfTtcbiAgICAgIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXMgPSBtZXJnZWQ7XG4gICAgICB0aGlzLl9wZXJzaXN0TWVzc2FnZXMoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgb3BlcmF0aW9uOiB7IG9wOiAncmVwbGFjZScsIHBhdGg6ICcvbWVzc2FnZXMnLCB2YWx1ZTogdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyB9LCBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZSB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBgTGlzdERvY3VtZW50c2AgSlNPTi1SUEMgcmVzdWx0IGludG8ge0BsaW5rIGdsb2JhbFN0YXRlLmRvY3VtZW50c30gKHNhbWUgYXMgV2ViU29ja2V0IHBhdGgpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVzdWx0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIHdoZW4gbWVyZ2VkXG4gICAqL1xuICBtZXJnZUxpc3REb2N1bWVudHNScGNSZXN1bHQgKHJlc3VsdCkge1xuICAgIGlmICghcmVzdWx0IHx8IHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnIHx8IHJlc3VsdC50eXBlICE9PSAnTGlzdERvY3VtZW50c1Jlc3VsdCcgfHwgIUFycmF5LmlzQXJyYXkocmVzdWx0LmRvY3VtZW50cykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMgPSB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyB8fCB7fTtcbiAgICBmb3IgKGNvbnN0IGRvYyBvZiByZXN1bHQuZG9jdW1lbnRzKSB7XG4gICAgICBpZiAoIWRvYyB8fCAhZG9jLmlkKSBjb250aW51ZTtcbiAgICAgIHRoaXMuX3N0b3JlRG9jdW1lbnQoZG9jLmlkLCB7IC4uLih0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1tkb2MuaWRdIHx8IHt9KSwgLi4uZG9jIH0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBvcGVyYXRpb246IHsgb3A6ICdyZXBsYWNlJywgcGF0aDogYC9kb2N1bWVudHNgLCB2YWx1ZTogdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMgfSxcbiAgICAgICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoXykge31cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IGFuIHVwZGF0ZWQgcGVlciBsaXN0IGZyb20gdGhlIGh1Yi5cbiAgICogVGhpcyB1c2VzIHRoZSBMaXN0UGVlcnMgSlNPTkNhbGwgbWV0aG9kLCB3aGljaCByZXR1cm5zXG4gICAqIHRoZSBzYW1lIHN0YXR1cyBzaGFwZSBhcyBHZXROZXR3b3JrU3RhdHVzIChpbmNsdWRpbmcgcGVlcnMpLlxuICAgKi9cbiAgc2VuZExpc3RQZWVyc1JlcXVlc3QgKCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLmZyb21WZWN0b3IoWydKU09OQ2FsbCcsIEpTT04uc3RyaW5naWZ5KHsgbWV0aG9kOiAnTGlzdFBlZXJzJywgcGFyYW1zOiBbXSB9KV0pO1xuICAgIGNvbnN0IGJ1ZmZlciA9IG1lc3NhZ2UudG9CdWZmZXIoKTtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5kZWJ1Zykge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnU2VuZGluZyBMaXN0UGVlcnMgcmVxdWVzdCwgYnl0ZXM6JywgYnVmZmVyICYmIGJ1ZmZlci5sZW5ndGgpO1xuICAgIH1cbiAgICB0aGlzLnNlbmRTaWduZWRNZXNzYWdlKGJ1ZmZlcik7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIHJlcXVlc3QgdG8gYWRkIGEgcGVlci5cbiAgICogQHBhcmFtIHtPYmplY3R9IHBlZXIgLSBQZWVyIGRlc2NyaXB0b3IgKGUuZy4geyBhZGRyZXNzIH0pLlxuICAgKi9cbiAgc2VuZEFkZFBlZXJSZXF1ZXN0IChwZWVyID0ge30pIHtcbiAgICBjb25zdCByYXcgPSB0eXBlb2YgcGVlciA9PT0gJ3N0cmluZycgPyBwZWVyIDogKHBlZXIgJiYgcGVlci5hZGRyZXNzKSB8fCAnJztcbiAgICBjb25zdCBub3JtYWxpemVkQWRkciA9IG5vcm1hbGl6ZVBlZXJBZGRyZXNzSW5wdXQocmF3KTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRBZGRyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tCUklER0VdIHNlbmRBZGRQZWVyUmVxdWVzdDogbm8gYWRkcmVzcyBwcm92aWRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBtZXRob2Q6ICdBZGRQZWVyJyxcbiAgICAgICAgcGFyYW1zOiBbeyBhZGRyZXNzOiBub3JtYWxpemVkQWRkciB9XVxuICAgICAgfTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ0pTT05DYWxsJywgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCldKTtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IG1lc3NhZ2UudG9CdWZmZXIoKTtcbiAgICAgIHRoaXMuc2VuZFNpZ25lZE1lc3NhZ2UoYnVmZmVyKTtcblxuICAgICAgLy8gQWZ0ZXIgcmVxdWVzdGluZyBhIG5ldyBwZWVyLCByZWZyZXNoIHRoZSBwZWVyIGxpc3Qgc29cbiAgICAgIC8vIHRoZSBVSSByZWZsZWN0cyB0aGUgdXBkYXRlZCBwZWVyIHNldC5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuc2VuZExpc3RQZWVyc1JlcXVlc3QoKTtcbiAgICAgICAgfSBjYXRjaCAocmVmcmVzaEVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3IgcmVmcmVzaGluZyBwZWVyIGxpc3QgYWZ0ZXIgQWRkUGVlcjonLCBzYWZlSWRlbnRpdHlFcnIocmVmcmVzaEVycm9yKSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMDApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdFcnJvciBzZW5kaW5nIEFkZFBlZXIgcmVxdWVzdDonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCB0byBkaXNjb25uZWN0IGEgcGVlciBieSBhZGRyZXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ3x7IGFkZHJlc3M6IHN0cmluZyB9fSBhZGRyZXNzIC0gUGVlciBhZGRyZXNzIG9yIG9iamVjdCB3aXRoIGFkZHJlc3MuXG4gICAqL1xuICBzZW5kUmVtb3ZlUGVlclJlcXVlc3QgKGlkT3JBZGRyZXNzKSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSB0eXBlb2YgaWRPckFkZHJlc3MgPT09ICdvYmplY3QnICYmIGlkT3JBZGRyZXNzID8gKGlkT3JBZGRyZXNzLmlkIHx8IGlkT3JBZGRyZXNzLmFkZHJlc3MpIDogaWRPckFkZHJlc3M7XG4gICAgaWYgKCFyZXNvbHZlZCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0geyBtZXRob2Q6ICdSZW1vdmVQZWVyJywgcGFyYW1zOiBbcmVzb2x2ZWRdIH07XG4gICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tVmVjdG9yKFsnSlNPTkNhbGwnLCBKU09OLnN0cmluZ2lmeShwYXlsb2FkKV0pO1xuICAgICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlLnRvQnVmZmVyKCkpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5zZW5kTGlzdFBlZXJzUmVxdWVzdCgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3IgcmVmcmVzaGluZyBwZWVyIGxpc3QgYWZ0ZXIgUmVtb3ZlUGVlcjonLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgICAgICB9XG4gICAgICB9LCA1MDApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdFcnJvciBzZW5kaW5nIFJlbW92ZVBlZXIgcmVxdWVzdDonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3VibWl0IGEgY2hhdCBtZXNzYWdlIGZvciBicm9hZGNhc3Q6IHN0b3JlIGxvY2FsbHkgZmlyc3QsIHF1ZXVlIGZvciBodWIsIHRoZW4gcmVsYXkgdG8gYWxsIGNsaWVudHMgYW5kIEZhYnJpYyBub2Rlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBNZXNzYWdlIHRleHQuXG4gICAqL1xuICBzdWJtaXRDaGF0TWVzc2FnZSAodGV4dCkge1xuICAgIGNvbnN0IHRyaW1tZWQgPSB0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgPyB0ZXh0LnRyaW0oKSA6ICcnO1xuICAgIGlmICghdHJpbW1lZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKCF0aGlzLl9oYXNVbmxvY2tlZElkZW50aXR5KCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnc3VibWl0Q2hhdE1lc3NhZ2UgY2FsbGVkIHdpdGhvdXQgYW4gdW5sb2NrZWQgaWRlbnRpdHk7IG1lc3NhZ2Ugd2lsbCBub3QgYmUgc2VudC4nKTtcbiAgICAgIHRoaXMuX25vdGlmeUlkZW50aXR5VW5sb2NrUmVxdWlyZWQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaWRlbnRpdHlJZCA9IHRoaXMuX2dldElkZW50aXR5SWQoKTtcblxuICAgIGNvbnN0IGNsaWVudElkID0gYHBlbmRpbmctJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xuICAgIGNvbnN0IGNyZWF0ZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGFjdG9ySWQgPSBpZGVudGl0eUlkO1xuICAgIGNvbnN0IGNoYXQgPSB7XG4gICAgICB0eXBlOiAnUDJQX0NIQVRfTUVTU0FHRScsXG4gICAgICBhY3RvcjogeyBpZDogYWN0b3JJZCB9LFxuICAgICAgb2JqZWN0OiB7IGNvbnRlbnQ6IHRyaW1tZWQsIGNyZWF0ZWQsIGNsaWVudElkIH0sXG4gICAgICAvLyBVbmlmaWVkIGZsb3c6IG9wdGltaXN0aWMgZW50cnkgcmVtYWlucyBwZW5kaW5nIHVudGlsIGNhbm9uaWNhbCBodWIgZWNoby5cbiAgICAgIHN0YXR1czogJ3BlbmRpbmcnXG4gICAgfTtcblxuICAgIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXMgPSB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzIHx8IHt9O1xuICAgIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNbY2xpZW50SWRdID0gY2hhdDtcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIG9wZXJhdGlvbjogeyBvcDogJ2FkZCcsIHBhdGg6IGAvbWVzc2FnZXMvJHtjbGllbnRJZH1gLCB2YWx1ZTogY2hhdCB9LFxuICAgICAgICBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZVxuICAgICAgfVxuICAgIH0pKTtcbiAgICB0aGlzLl9wZXJzaXN0TWVzc2FnZXMoKTtcblxuICAgIC8vIEluIFdlYlJUQy1vbmx5IG1vZGUsIGRvIG5vdCBkZXBlbmQgb24gV2ViU29ja2V0IHF1ZXVlIHN0YXRlLlxuICAgIC8vIFNlbmQgaW1tZWRpYXRlbHkgb3ZlciBtZXNoIChhbmQgc2tpcCBodWIgUlBDIGluIHNlbmRTdWJtaXRDaGF0TWVzc2FnZVJlcXVlc3QpLlxuICAgIGlmICh0aGlzLnByZWZlcldlYlJUQ0NoYXQpIHtcbiAgICAgIHRoaXMuc2VuZFN1Ym1pdENoYXRNZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgIHRleHQ6IHRyaW1tZWQsXG4gICAgICAgIGNyZWF0ZWQsXG4gICAgICAgIGNsaWVudElkLFxuICAgICAgICBhY3RvcjogYWN0b3JJZCA/IHsgaWQ6IGFjdG9ySWQgfSA6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYXRTdWJtaXNzaW9uUXVldWUucHVzaCh7IHRleHQ6IHRyaW1tZWQsIGNsaWVudElkLCBhY3RvcklkLCBjcmVhdGVkIH0pO1xuICAgIHRoaXMuX2ZsdXNoQ2hhdFN1Ym1pc3Npb25RdWV1ZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgX2ZsdXNoQ2hhdFN1Ym1pc3Npb25RdWV1ZSAoKSB7XG4gICAgY29uc3QgaHViQ29ubmVjdGVkID0gdGhpcy5faXNDb25uZWN0ZWQgJiYgdGhpcy53cyAmJiB0aGlzLndzLnJlYWR5U3RhdGUgPT09IDE7XG4gICAgd2hpbGUgKHRoaXMuY2hhdFN1Ym1pc3Npb25RdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5jaGF0U3VibWlzc2lvblF1ZXVlLnNoaWZ0KCk7XG4gICAgICBpZiAoIWl0ZW0pIGNvbnRpbnVlO1xuICAgICAgaWYgKGh1YkNvbm5lY3RlZCkge1xuICAgICAgICB0aGlzLnNlbmRTdWJtaXRDaGF0TWVzc2FnZVJlcXVlc3Qoe1xuICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICBjcmVhdGVkOiBpdGVtLmNyZWF0ZWQsXG4gICAgICAgICAgY2xpZW50SWQ6IGl0ZW0uY2xpZW50SWQsXG4gICAgICAgICAgYWN0b3I6IGl0ZW0uYWN0b3JJZCA/IHsgaWQ6IGl0ZW0uYWN0b3JJZCB9IDogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSHViIGRvd246IGRlbGl2ZXIgdG8gV2ViUlRDLWNvbm5lY3RlZCBwZWVycyBub3csIGFuZCBxdWV1ZSBmb3IgYnJpZGdlIHdoZW4gaXQgcmVjb25uZWN0c1xuICAgICAgICB0aGlzLl9icm9hZGNhc3RDaGF0VG9XZWJSVENQZWVyc09ubHkoe1xuICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICBjcmVhdGVkOiBpdGVtLmNyZWF0ZWQsXG4gICAgICAgICAgY2xpZW50SWQ6IGl0ZW0uY2xpZW50SWQsXG4gICAgICAgICAgYWN0b3I6IGl0ZW0uYWN0b3JJZCA/IHsgaWQ6IGl0ZW0uYWN0b3JJZCB9IDogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBlbmRpbmdIdWJDaGF0UXVldWUucHVzaCh7XG4gICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgIGNyZWF0ZWQ6IGl0ZW0uY3JlYXRlZCxcbiAgICAgICAgICBjbGllbnRJZDogaXRlbS5jbGllbnRJZCxcbiAgICAgICAgICBhY3RvcklkOiBpdGVtLmFjdG9ySWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIEh1YiByZWNvbm5lY3RzLCBzZW5kIGFueSBjaGF0IG1lc3NhZ2VzIHRoYXQgd2VyZSBxdWV1ZWQgd2hpbGUgaXQgd2FzIG9mZmxpbmUuXG4gICAqL1xuICBfZmx1c2hQZW5kaW5nSHViQ2hhdFF1ZXVlICgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQ29ubmVjdGVkIHx8ICF0aGlzLndzIHx8IHRoaXMud3MucmVhZHlTdGF0ZSAhPT0gMSkgcmV0dXJuO1xuICAgIHdoaWxlICh0aGlzLnBlbmRpbmdIdWJDaGF0UXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMucGVuZGluZ0h1YkNoYXRRdWV1ZS5zaGlmdCgpO1xuICAgICAgaWYgKCFpdGVtKSBjb250aW51ZTtcbiAgICAgIHRoaXMuc2VuZFN1Ym1pdENoYXRNZXNzYWdlUmVxdWVzdCh7XG4gICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgY3JlYXRlZDogaXRlbS5jcmVhdGVkLFxuICAgICAgICBjbGllbnRJZDogaXRlbS5jbGllbnRJZCxcbiAgICAgICAgYWN0b3I6IGl0ZW0uYWN0b3JJZCA/IHsgaWQ6IGl0ZW0uYWN0b3JJZCB9IDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnJvYWRjYXN0IGEgY2hhdCBtZXNzYWdlIHRvIGNvbm5lY3RlZCBXZWJSVEMgcGVlcnMgb25seSAobm8gSHViKS5cbiAgICogVXNlZCB3aGVuIHRoZSBIdWIgaXMgZGlzY29ubmVjdGVkIHNvIG1lc3NhZ2VzIHN0aWxsIHJlYWNoIG90aGVyIGJyb3dzZXIgcGVlcnMuXG4gICAqL1xuICBfYnJvYWRjYXN0Q2hhdFRvV2ViUlRDUGVlcnNPbmx5IChib2R5KSB7XG4gICAgY29uc3QgdGV4dCA9IHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyA/IGJvZHkgOiAoYm9keSAmJiBib2R5LnRleHQpIHx8ICcnO1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgIGNvbnN0IGNyZWF0ZWQgPSBib2R5ICYmIGJvZHkuY3JlYXRlZCA/IGJvZHkuY3JlYXRlZCA6IERhdGUubm93KCk7XG4gICAgY29uc3QgY2xpZW50SWQgPSBib2R5ICYmIGJvZHkuY2xpZW50SWQ7XG4gICAgY29uc3QgYWN0b3JJZCA9IHRoaXMuX2dldElkZW50aXR5SWQoKSB8fCAoYm9keSAmJiBib2R5LmFjdG9yICYmIGJvZHkuYWN0b3IuaWQpIHx8IG51bGw7XG4gICAgLy8gUHJlZmVyIGZpcnN0LWNsYXNzIEFNUCBVVEYtOCBib2R5IG9uIHRoZSBkYXRhIGNoYW5uZWwgd2hlbiB3ZSBjYW4gc2lnbi5cbiAgICBsZXQgcGF5bG9hZCA9IHRleHQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNpZ25pbmdLZXkgPSB0aGlzLnNldHRpbmdzLnNpZ25pbmdLZXkgfHwgdGhpcy5rZXk7XG4gICAgICBpZiAodHlwZW9mIE1lc3NhZ2UgIT09ICd1bmRlZmluZWQnICYmIE1lc3NhZ2UuZnJvbVZlY3RvciAmJiBzaWduaW5nS2V5KSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ1AyUF9DSEFUX01FU1NBR0UnLCBTdHJpbmcodGV4dCldKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtc2cuc2lnbldpdGhLZXkgPT09ICdmdW5jdGlvbicpIG1zZy5zaWduV2l0aEtleShzaWduaW5nS2V5KTtcbiAgICAgICAgcGF5bG9hZCA9IG1zZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBheWxvYWQgPSB7XG4gICAgICAgICAgdHlwZTogJ1AyUF9DSEFUX01FU1NBR0UnLFxuICAgICAgICAgIGFjdG9yOiBhY3RvcklkID8geyBpZDogYWN0b3JJZCB9IDogeyBpZDogbnVsbCB9LFxuICAgICAgICAgIG9iamVjdDogeyBjb250ZW50OiB0ZXh0LCBjcmVhdGVkLCBjbGllbnRJZCB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcGF5bG9hZCA9IHtcbiAgICAgICAgdHlwZTogJ1AyUF9DSEFUX01FU1NBR0UnLFxuICAgICAgICBhY3RvcjogYWN0b3JJZCA/IHsgaWQ6IGFjdG9ySWQgfSA6IHsgaWQ6IG51bGwgfSxcbiAgICAgICAgb2JqZWN0OiB7IGNvbnRlbnQ6IHRleHQsIGNyZWF0ZWQsIGNsaWVudElkIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0aGlzLmJyb2FkY2FzdFRvV2ViUlRDUGVlcnNXaXRoUmVjaXBpZW50cyhwYXlsb2FkKTtcbiAgICBjb25zdCBkZWxpdmVyZWRUbyA9IHJlY2lwaWVudHMubGVuZ3RoO1xuICAgIHRoaXMuX2xhc3RXZWJSVENDaGF0RGVsaXZlcnlDb3VudCA9IGRlbGl2ZXJlZFRvO1xuICAgIHRoaXMuX2xhc3RXZWJSVENDaGF0U2VudEF0ID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9sYXN0V2ViUlRDUmVjaXBpZW50UGVlcklkcyA9IHJlY2lwaWVudHM7XG4gICAgaWYgKGRlbGl2ZXJlZFRvID4gMCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnQ2hhdCBkZWxpdmVyZWQgdG8gV2ViUlRDIHBlZXJzIChodWIgb2ZmbGluZSk6JywgZGVsaXZlcmVkVG8sIHJlY2lwaWVudHMpO1xuICAgIH1cbiAgICBpZiAoY2xpZW50SWQgJiYgdGhpcy5nbG9iYWxTdGF0ZSAmJiB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzICYmIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNbY2xpZW50SWRdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtc2cgPSB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzW2NsaWVudElkXTtcbiAgICAgICAgbXNnLnRyYW5zcG9ydCA9IG1zZy50cmFuc3BvcnQgfHwgJ3dlYnJ0Yyc7XG4gICAgICAgIG1zZy5kZWxpdmVyeSA9IE9iamVjdC5hc3NpZ24oe30sIG1zZy5kZWxpdmVyeSB8fCB7fSwgeyB2aWE6ICdtZXNoJywgZGVsaXZlcmVkVG8gfSk7XG4gICAgICAgIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNbY2xpZW50SWRdID0gbXNnO1xuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAncmVwbGFjZScsIHBhdGg6IGAvbWVzc2FnZXMvJHtjbGllbnRJZH1gLCB2YWx1ZTogbXNnIH0sXG4gICAgICAgICAgICBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLl9wZXJzaXN0TWVzc2FnZXMoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgU3VibWl0Q2hhdE1lc3NhZ2UgSlNPTkNhbGwgdG8gaHViIChicm9hZGNhc3QgdG8gYWxsIGNsaWVudHMgKyBGYWJyaWMgbm9kZXMpLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYm9keSAtIHsgdGV4dCwgY2xpZW50SWQ/LCBhY3Rvcj8gfVxuICAgKi9cbiAgc2VuZFN1Ym1pdENoYXRNZXNzYWdlUmVxdWVzdCAoYm9keSkge1xuICAgIGNvbnN0IHRleHQgPSB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBib2R5IDogKGJvZHkgJiYgYm9keS50ZXh0KSB8fCAnJztcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuX2hhc1VubG9ja2VkSWRlbnRpdHkoKSkge1xuICAgICAgY29uc29sZS53YXJuKCdbQlJJREdFXScsICdzZW5kU3VibWl0Q2hhdE1lc3NhZ2VSZXF1ZXN0IGNhbGxlZCB3aXRob3V0IGFuIHVubG9ja2VkIGlkZW50aXR5OyBtZXNzYWdlIHdpbGwgbm90IGJlIHNlbnQuJyk7XG4gICAgICB0aGlzLl9ub3RpZnlJZGVudGl0eVVubG9ja1JlcXVpcmVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNyZWF0ZWQgPSBib2R5ICYmIGJvZHkuY3JlYXRlZCA/IGJvZHkuY3JlYXRlZCA6IERhdGUubm93KCk7XG4gICAgY29uc3QgY2xpZW50SWQgPSBib2R5ICYmIGJvZHkuY2xpZW50SWQ7XG4gICAgY29uc3QgYWN0b3JJZCA9IHRoaXMuX2dldElkZW50aXR5SWQoKSB8fCBudWxsO1xuXG4gICAgLy8gSW4gV2ViUlRDIG1vZGUsIGFsc28gZmFuIG91dCBvdmVyIHRoZSBtZXNoLCBidXQga2VlcCB0aGUgaHViIFJQQyBhc1xuICAgIC8vIHRoZSBjYW5vbmljYWwgbmV0d29yayBwcm9wYWdhdGlvbiBwYXRoLlxuICAgIGlmICh0aGlzLnByZWZlcldlYlJUQ0NoYXQpIHtcbiAgICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgICB0eXBlOiAnUDJQX0NIQVRfTUVTU0FHRScsXG4gICAgICAgIGFjdG9yOiBhY3RvcklkID8geyBpZDogYWN0b3JJZCB9IDogeyBpZDogbnVsbCB9LFxuICAgICAgICBvYmplY3Q6IHsgY29udGVudDogdGV4dCwgY3JlYXRlZCwgY2xpZW50SWQgfVxuICAgICAgfTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNpZ25pbmdLZXkgPSB0aGlzLnNldHRpbmdzLnNpZ25pbmdLZXkgfHwgdGhpcy5rZXk7XG4gICAgICAgIGlmICh0eXBlb2YgTWVzc2FnZSAhPT0gJ3VuZGVmaW5lZCcgJiYgTWVzc2FnZS5mcm9tVmVjdG9yICYmIHNpZ25pbmdLZXkpIHtcbiAgICAgICAgICBjb25zdCBtc2cgPSBNZXNzYWdlLmZyb21WZWN0b3IoWydQMlBfQ0hBVF9NRVNTQUdFJywgU3RyaW5nKHRleHQpXSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBtc2cuc2lnbldpdGhLZXkgPT09ICdmdW5jdGlvbicpIG1zZy5zaWduV2l0aEtleShzaWduaW5nS2V5KTtcbiAgICAgICAgICBwYXlsb2FkID0gbXNnO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7IC8qIGtlZXAgSlNPTiBmYWxsYmFjayBmb3IgbWVzaCBVSSAqLyB9XG4gICAgICBjb25zdCByZWNpcGllbnRzID0gdGhpcy5icm9hZGNhc3RUb1dlYlJUQ1BlZXJzV2l0aFJlY2lwaWVudHMocGF5bG9hZCk7XG4gICAgICBjb25zdCBkZWxpdmVyZWRUbyA9IHJlY2lwaWVudHMubGVuZ3RoO1xuICAgICAgdGhpcy5fbGFzdFdlYlJUQ0NoYXREZWxpdmVyeUNvdW50ID0gZGVsaXZlcmVkVG87XG4gICAgICB0aGlzLl9sYXN0V2ViUlRDQ2hhdFNlbnRBdCA9IERhdGUubm93KCk7XG4gICAgICB0aGlzLl9sYXN0V2ViUlRDUmVjaXBpZW50UGVlcklkcyA9IHJlY2lwaWVudHM7XG5cbiAgICAgIC8vIE1hcmsgdGhlIGxvY2FsbHktcGVuZGluZyBtZXNzYWdlIHdpdGggZXhwbGljaXQgV2ViUlRDIGRlbGl2ZXJ5IGRldGFpbHMuXG4gICAgICBpZiAoY2xpZW50SWQgJiYgdGhpcy5nbG9iYWxTdGF0ZSAmJiB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzICYmIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNbY2xpZW50SWRdKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbXNnID0gdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlc1tjbGllbnRJZF07XG4gICAgICAgICAgbXNnLnRyYW5zcG9ydCA9ICd3ZWJydGMnO1xuICAgICAgICAgIG1zZy5kZWxpdmVyeSA9IE9iamVjdC5hc3NpZ24oe30sIG1zZy5kZWxpdmVyeSB8fCB7fSwge1xuICAgICAgICAgICAgdmlhOiAnbWVzaCcsXG4gICAgICAgICAgICBkZWxpdmVyZWRUb1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNbY2xpZW50SWRdID0gbXNnO1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAncmVwbGFjZScsIHBhdGg6IGAvbWVzc2FnZXMvJHtjbGllbnRJZH1gLCB2YWx1ZTogbXNnIH0sXG4gICAgICAgICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHRoaXMuX3BlcnNpc3RNZXNzYWdlcygpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnV2ViUlRDIGNoYXQgYnJvYWRjYXN0IGRlbGl2ZXJ5IGNvdW50OicsIGRlbGl2ZXJlZFRvKTtcbiAgICB9XG5cbiAgICAvLyBBbHdheXMgYWxzbyBzdWJtaXQgdmlhIGh1YiBzbyB0aGUgbWVzc2FnZSBpcyBvbiB0aGUgY2Fub25pY2FsIGJyb2FkY2FzdCBwYXRoLlxuICAgIHRyeSB7XG4gICAgICBjb25zdCBycGNCb2R5ID0gdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnXG4gICAgICAgID8gT2JqZWN0LmFzc2lnbih7fSwgYm9keSwge1xuICAgICAgICAgICAgY3JlYXRlZCxcbiAgICAgICAgICAgIGNsaWVudElkLFxuICAgICAgICAgICAgYWN0b3I6IChib2R5LmFjdG9yIHx8IChhY3RvcklkID8geyBpZDogYWN0b3JJZCB9IDogdW5kZWZpbmVkKSlcbiAgICAgICAgICB9KVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICBjcmVhdGVkLFxuICAgICAgICAgICAgY2xpZW50SWQsXG4gICAgICAgICAgICBhY3RvcjogYWN0b3JJZCA/IHsgaWQ6IGFjdG9ySWQgfSA6IHVuZGVmaW5lZFxuICAgICAgICAgIH07XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBtZXRob2Q6ICdTdWJtaXRDaGF0TWVzc2FnZScsXG4gICAgICAgIHBhcmFtczogW3JwY0JvZHldXG4gICAgICB9O1xuICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ0pTT05DYWxsJywgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCldKTtcbiAgICAgIHRoaXMuc2VuZFNpZ25lZE1lc3NhZ2UobWVzc2FnZS50b0J1ZmZlcigpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3Igc2VuZGluZyBTdWJtaXRDaGF0TWVzc2FnZTonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXNrIHRoZSBodWIgdG8gcmVtb3ZlIGFuIGFjdGl2aXR5IHJvdyBhbmQvb3IgdW5wdWJsaXNoIGEgZG9jdW1lbnQgKGFkbWluIHRva2VuIHJlcXVpcmVkIHNlcnZlci1zaWRlKS5cbiAgICogVXNlcyBIVFRQIFBPU1QgYC9zZXJ2aWNlcy9ycGNgIHNvIHRoZSBjYWxsZXIgY2FuIGF3YWl0IHN1Y2Nlc3Mgb3Igc3VyZmFjZSBgc3RhdHVzOiAnZXJyb3InYCBmcm9tIHRoZSBodWJcbiAgICogKFdlYlNvY2tldCBKU09OQ2FsbCBhbG9uZSBkb2VzIG5vdCByZXR1cm4gYSByZXN1bHQgdG8gdGhlIGNsaWVudCkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZUlkXSAtIEh1YiBgZ2xvYmFsU3RhdGUubWVzc2FnZXNgIGtleSAob21pdCBmb3IgdW5wdWJsaXNoLW9ubHkpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FkbWluVG9rZW5dIC0gSHViIGFkbWluIHRva2VuIChmcm9tIHNldHVwIC8gbG9jYWxTdG9yYWdlKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkb2N1bWVudElkXSAtIG9wdGlvbmFsIHB1Ymxpc2hlZCBkb2N1bWVudCBpZCB0byByZW1vdmUgZnJvbSB0aGUgaHViIGNhdGFsb2cuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHsgb2s6IGJvb2xlYW4sIG1lc3NhZ2U/OiBzdHJpbmcsIHJlc3VsdD86IG9iamVjdCB9Pn1cbiAgICovXG4gIGFzeW5jIGVtaXRUb21ic3RvbmUgKG1lc3NhZ2VJZCwgYWRtaW5Ub2tlbiwgZG9jdW1lbnRJZCkge1xuICAgIGxldCBtaWQsIHRva2VuLCBkb2NJZDtcbiAgICBjb25zdCBpc09wdHMgPSBtZXNzYWdlSWQgIT09IG51bGwgJiYgdHlwZW9mIG1lc3NhZ2VJZCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkobWVzc2FnZUlkKSAmJlxuICAgICAgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlSWQsICdtZXNzYWdlSWQnKSB8fFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWVzc2FnZUlkLCAnZG9jdW1lbnRJZCcpIHx8XG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtZXNzYWdlSWQsICdhZG1pblRva2VuJykpO1xuICAgIGlmIChpc09wdHMpIHtcbiAgICAgIG1pZCA9IG1lc3NhZ2VJZC5tZXNzYWdlSWQ7XG4gICAgICB0b2tlbiA9IG1lc3NhZ2VJZC5hZG1pblRva2VuO1xuICAgICAgZG9jSWQgPSBtZXNzYWdlSWQuZG9jdW1lbnRJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWlkID0gbWVzc2FnZUlkO1xuICAgICAgdG9rZW4gPSBhZG1pblRva2VuO1xuICAgICAgZG9jSWQgPSBkb2N1bWVudElkO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IHR5cGVvZiBtaWQgPT09ICdzdHJpbmcnID8gbWlkLnRyaW0oKSA6ICcnO1xuICAgIGNvbnN0IGQgPSB0eXBlb2YgZG9jSWQgPT09ICdzdHJpbmcnID8gZG9jSWQudHJpbSgpIDogJyc7XG4gICAgaWYgKCFpZCAmJiAhZCkgcmV0dXJuIHsgb2s6IGZhbHNlLCBtZXNzYWdlOiAnbWVzc2FnZUlkIG9yIGRvY3VtZW50SWQgcmVxdWlyZWQnIH07XG5cbiAgICBjb25zdCBycGNQYXJhbXMgPSB7XG4gICAgICBtZXNzYWdlSWQ6IGlkIHx8IHVuZGVmaW5lZCxcbiAgICAgIGRvY3VtZW50SWQ6IGQgfHwgdW5kZWZpbmVkLFxuICAgICAgYWRtaW5Ub2tlbjogdG9rZW4gfHwgbnVsbFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcnBjT3JpZ2luID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgICAgPyB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtycGNPcmlnaW59L3NlcnZpY2VzL3JwY2AsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuX2h1Ykpzb25ScGNIdHRwSGVhZGVycygpLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICAgICAgaWQ6IERhdGUubm93KCksXG4gICAgICAgICAgbWV0aG9kOiAnRW1pdFRvbWJzdG9uZScsXG4gICAgICAgICAgcGFyYW1zOiBbcnBjUGFyYW1zXVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICBsZXQgYm9keSA9IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgYm9keSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgY29uc3QgbXNnID0gKGJvZHkgJiYgYm9keS5lcnJvciAmJiBib2R5LmVycm9yLm1lc3NhZ2UpIHx8IHJlcy5zdGF0dXNUZXh0IHx8IGBIVFRQICR7cmVzLnN0YXR1c31gO1xuICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIG1lc3NhZ2U6IG1zZyB9O1xuICAgICAgfVxuICAgICAgaWYgKGJvZHkgJiYgYm9keS5lcnJvcikge1xuICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIG1lc3NhZ2U6IGJvZHkuZXJyb3IubWVzc2FnZSB8fCAnUlBDIGVycm9yJyB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYm9keSAmJiBib2R5LnJlc3VsdCAhPSBudWxsID8gYm9keS5yZXN1bHQgOiBudWxsO1xuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgbWVzc2FnZTogcmVzdWx0Lm1lc3NhZ2UgfHwgJ09wZXJhdGlvbiBmYWlsZWQnIH07XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgICAgICByZXR1cm4geyBvazogdHJ1ZSwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIG1lc3NhZ2U6IChyZXN1bHQgJiYgcmVzdWx0Lm1lc3NhZ2UpIHx8ICdVbmV4cGVjdGVkIHJlc3BvbnNlIGZyb20gaHViJyB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdlbWl0VG9tYnN0b25lIGVycm9yOicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBtZXNzYWdlOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5xdWV1ZSBhIHBlZXItdG8tcGVlciBjaGF0IG1lc3NhZ2UgZm9yIHRoZSBnaXZlbiBhZGRyZXNzLlxuICAgKiBNZXNzYWdlcyBhcmUgcGVyc2lzdGVkIGFuZCByZXRyaWVkIHdoZW4gdGhlIHBlZXIgaXMgY29ubmVjdGVkLlxuICAgKiBAcGFyYW0ge09iamVjdH0gam9iIC0geyBhZGRyZXNzLCB0ZXh0LCBjcmVhdGVkLCBjbGllbnRJZD8gfVxuICAgKi9cbiAgX2VucXVldWVQZWVyTWVzc2FnZSAoam9iKSB7XG4gICAgaWYgKCFqb2IgfHwgIWpvYi5hZGRyZXNzIHx8ICFqb2IudGV4dCkgcmV0dXJuO1xuXG4gICAgLy8gRW5zdXJlIGEgY3JlYXRlZCB0aW1lc3RhbXAgYW5kIGEgc3RhYmxlIGNsaWVudElkIGZvciBsb2NhbCB0cmFja2luZy5cbiAgICBjb25zdCBjcmVhdGVkID0gam9iLmNyZWF0ZWQgfHwgRGF0ZS5ub3coKTtcbiAgICAvLyBVc2UgYSBGYWJyaWMgQWN0b3IgSUQgYXMgdGhlIGNsaWVudElkLCBzbyBxdWV1ZWQgbWVzc2FnZXMgaGF2ZVxuICAgIC8vIGEgc3RhYmxlLCBjb250ZW50LWRlcml2ZWQgaWRlbnRpZmllci5cbiAgICBjb25zdCBjbGllbnRBY3RvciA9IG5ldyBBY3Rvcih7XG4gICAgICBjb250ZW50OiB7XG4gICAgICAgIHR5cGU6ICdQMlBfQ0hBVF9NRVNTQUdFJyxcbiAgICAgICAgYWRkcmVzczogam9iLmFkZHJlc3MsXG4gICAgICAgIHRleHQ6IGpvYi50ZXh0LFxuICAgICAgICBjcmVhdGVkXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50SWQgPSBqb2IuY2xpZW50SWQgfHwgY2xpZW50QWN0b3IuaWQ7XG4gICAgam9iLmNyZWF0ZWQgPSBjcmVhdGVkO1xuICAgIGpvYi5jbGllbnRJZCA9IGNsaWVudElkO1xuXG4gICAgLy8gQ3JlYXRlIGEgbG9jYWwgY2hhdCByZXByZXNlbnRhdGlvbiBzbyBxdWV1ZWQgbWVzc2FnZXMgYXJlIHZpc2libGUgaW4gdGhlIFVJLlxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpZGVudGl0eUlkID0gdGhpcy5fZ2V0SWRlbnRpdHlJZCgpO1xuICAgICAgaWYgKCFpZGVudGl0eUlkKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnZW5xdWV1ZVBlZXJNZXNzYWdlIGNhbGxlZCB3aXRob3V0IGFuIHVubG9ja2VkIGlkZW50aXR5OyBqb2Igd2lsbCBub3QgYmUgcXVldWVkLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBhY3RvcklkID0gaWRlbnRpdHlJZDtcbiAgICAgIGpvYi5hY3RvcklkID0gYWN0b3JJZDtcbiAgICAgIGNvbnN0IGNoYXQgPSB7XG4gICAgICAgIHR5cGU6ICdQMlBfQ0hBVF9NRVNTQUdFJyxcbiAgICAgICAgYWN0b3I6IHsgaWQ6IGFjdG9ySWQgfSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgY29udGVudDogam9iLnRleHQsXG4gICAgICAgICAgY3JlYXRlZCxcbiAgICAgICAgICBjbGllbnRJZFxuICAgICAgICB9LFxuICAgICAgICAvLyBUb3AtbGV2ZWwgdGFyZ2V0IGZvciBBY3Rpdml0eVN0cmVhbXMtc3R5bGUgY29tcGF0aWJpbGl0eS5cbiAgICAgICAgdGFyZ2V0OiBqb2IuYWRkcmVzcyxcbiAgICAgICAgc3RhdHVzOiAncXVldWVkJ1xuICAgICAgfTtcblxuICAgICAgdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyA9IHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXMgfHwge307XG4gICAgICB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzW2NsaWVudElkXSA9IGNoYXQ7XG5cbiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIG9wZXJhdGlvbjogeyBvcDogJ2FkZCcsIHBhdGg6IGAvbWVzc2FnZXMvJHtjbGllbnRJZH1gLCB2YWx1ZTogY2hhdCB9LFxuICAgICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuX3BlcnNpc3RNZXNzYWdlcygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnQ291bGQgbm90IGNyZWF0ZSBsb2NhbCBxdWV1ZWQgcGVlciBjaGF0IG1lc3NhZ2U6Jywgc2FmZUlkZW50aXR5RXJyKGUpKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdG8gaW4tbWVtb3J5IHF1ZXVlIGFuZCBwZXJzaXN0LlxuICAgIHRoaXMucGVlck1lc3NhZ2VRdWV1ZSA9IHRoaXMucGVlck1lc3NhZ2VRdWV1ZSB8fCBbXTtcbiAgICB0aGlzLnBlZXJNZXNzYWdlUXVldWUucHVzaChqb2IpO1xuICAgIHRoaXMuX3dyaXRlSlNPTlRvU3RvcmFnZSgnZmFicmljOnBlZXJNZXNzYWdlUXVldWUnLCB0aGlzLnBlZXJNZXNzYWdlUXVldWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gc2VuZCBhbnkgcXVldWVkIG1lc3NhZ2VzIGZvciBwZWVycyB0aGF0IGFyZSBjdXJyZW50bHkgY29ubmVjdGVkLlxuICAgKiBVc2VzIHRoZSBsYXRlc3QgbmV0d29ya1N0YXR1cy5wZWVycyBmcm9tIHRoZSBodWIuXG4gICAqL1xuICBfZmx1c2hQZWVyTWVzc2FnZVF1ZXVlICgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQ29ubmVjdGVkIHx8ICF0aGlzLndzIHx8IHRoaXMud3MucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHJldHVybjtcblxuICAgIGNvbnN0IG5ldHdvcmtTdGF0dXMgPSB0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUubmV0d29ya1N0YXR1cztcbiAgICBjb25zdCBwZWVycyA9IEFycmF5LmlzQXJyYXkobmV0d29ya1N0YXR1cyAmJiBuZXR3b3JrU3RhdHVzLnBlZXJzKSA/IG5ldHdvcmtTdGF0dXMucGVlcnMgOiBbXTtcbiAgICBpZiAoIXRoaXMucGVlck1lc3NhZ2VRdWV1ZSB8fCAhdGhpcy5wZWVyTWVzc2FnZVF1ZXVlLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVtYWluaW5nID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGpvYiBvZiB0aGlzLnBlZXJNZXNzYWdlUXVldWUpIHtcbiAgICAgIGlmICgham9iIHx8ICFqb2IuYWRkcmVzcyB8fCAham9iLnRleHQpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgaXNDb25uZWN0ZWQgPSBwZWVycy5zb21lKChwKSA9PiBwICYmIHAuc3RhdHVzID09PSAnY29ubmVjdGVkJyAmJiAocC5pZCA9PT0gam9iLmFkZHJlc3MgfHwgcC5hZGRyZXNzID09PSBqb2IuYWRkcmVzcykpO1xuXG4gICAgICBpZiAoIWlzQ29ubmVjdGVkKSB7XG4gICAgICAgIHJlbWFpbmluZy5wdXNoKGpvYik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgIHRleHQ6IGpvYi50ZXh0LFxuICAgICAgICAgIGNsaWVudElkOiBqb2IuY2xpZW50SWRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGpvYi5hY3RvcklkKSB7XG4gICAgICAgICAgYm9keS5hY3RvciA9IHsgaWQ6IGpvYi5hY3RvcklkIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHsgbWV0aG9kOiAnU2VuZFBlZXJNZXNzYWdlJywgcGFyYW1zOiBbam9iLmFkZHJlc3MsIGJvZHldIH07XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLmZyb21WZWN0b3IoWydKU09OQ2FsbCcsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXSk7XG4gICAgICAgIHRoaXMuc2VuZFNpZ25lZE1lc3NhZ2UobWVzc2FnZS50b0J1ZmZlcigpKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIHNlbmRpbmcgcXVldWVkIHBlZXIgbWVzc2FnZTonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICAgICAgcmVtYWluaW5nLnB1c2goam9iKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBlZXJNZXNzYWdlUXVldWUgPSByZW1haW5pbmc7XG4gICAgaWYgKHRoaXMucGVlck1lc3NhZ2VRdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3dyaXRlSlNPTlRvU3RvcmFnZSgnZmFicmljOnBlZXJNZXNzYWdlUXVldWUnLCB0aGlzLnBlZXJNZXNzYWdlUXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZW1vdmVTdG9yYWdlS2V5KCdmYWJyaWM6cGVlck1lc3NhZ2VRdWV1ZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgY2hhdCBtZXNzYWdlIHRvIGEgcGVlciAocXVldWVkIGlmIHRoZSBwZWVyIGlzIG5vdCBjdXJyZW50bHkgY29ubmVjdGVkKS5cbiAgICogQHBhcmFtIHtzdHJpbmd8eyBhZGRyZXNzOiBzdHJpbmcgfX0gYWRkcmVzcyAtIFBlZXIgYWRkcmVzcyBvciBvYmplY3Qgd2l0aCBhZGRyZXNzLlxuICAgKiBAcGFyYW0ge3N0cmluZ3x7IHRleHQ6IHN0cmluZyB9fSBib2R5IC0gTWVzc2FnZSB0ZXh0IG9yIG9iamVjdCB3aXRoIHRleHQuXG4gICAqL1xuICBzZW5kUGVlck1lc3NhZ2VSZXF1ZXN0IChpZE9yQWRkcmVzcywgYm9keSkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gdHlwZW9mIGlkT3JBZGRyZXNzID09PSAnb2JqZWN0JyAmJiBpZE9yQWRkcmVzcyA/IChpZE9yQWRkcmVzcy5pZCB8fCBpZE9yQWRkcmVzcy5hZGRyZXNzKSA6IGlkT3JBZGRyZXNzO1xuICAgIGNvbnN0IHJlc29sdmVkVGV4dCA9IHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyA/IGJvZHkgOiAoYm9keSAmJiBib2R5LnRleHQpIHx8ICcnO1xuICAgIGlmICghcmVzb2x2ZWQgfHwgIXJlc29sdmVkVGV4dCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5faGFzVW5sb2NrZWRJZGVudGl0eSgpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tCUklER0VdJywgJ3NlbmRQZWVyTWVzc2FnZVJlcXVlc3QgY2FsbGVkIHdpdGhvdXQgYW4gdW5sb2NrZWQgaWRlbnRpdHk7IG1lc3NhZ2Ugd2lsbCBub3QgYmUgc2VudC4nKTtcbiAgICAgIHRoaXMuX25vdGlmeUlkZW50aXR5VW5sb2NrUmVxdWlyZWQoZmFicmljSWRlbnRpdHlQZWVyRGlzYWJsZWRSZWFzb25QbGFpbih0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuYXV0aCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjcmVhdGVkID0gRGF0ZS5ub3coKTtcbiAgICAvLyBXaGVuIFdlYlJUQy1vbmx5IGNoYXQgaXMgZW5hYmxlZCwgc2VuZCBwZWVyIG1lc3NhZ2VzIG92ZXIgdGhlIG1lc2hcbiAgICAvLyBpbnN0ZWFkIG9mIHZpYSB0aGUgRmFicmljIFAyUCBTZW5kUGVlck1lc3NhZ2UgUlBDLlxuICAgIGlmICh0aGlzLnByZWZlcldlYlJUQ0NoYXQpIHtcbiAgICAgIGNvbnN0IGFjdG9ySWQgPSB0aGlzLl9nZXRJZGVudGl0eUlkKCkgfHwgbnVsbDtcbiAgICAgIGxldCBjbGllbnRJZCA9IG51bGw7XG4gICAgICAvLyBDcmVhdGUgYSBsb2NhbCBcInNlbnRcIiBjaGF0IG1lc3NhZ2UgZm9yIHRoaXMgcGVlci5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdG9yID0gbmV3IEFjdG9yKHtcbiAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICB0eXBlOiAnUDJQX0NIQVRfTUVTU0FHRScsXG4gICAgICAgICAgICBhZGRyZXNzOiByZXNvbHZlZCxcbiAgICAgICAgICAgIHRleHQ6IHJlc29sdmVkVGV4dCxcbiAgICAgICAgICAgIGNyZWF0ZWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjbGllbnRJZCA9IGNsaWVudEFjdG9yLmlkO1xuICAgICAgICBjb25zdCBjaGF0ID0ge1xuICAgICAgICAgIHR5cGU6ICdQMlBfQ0hBVF9NRVNTQUdFJyxcbiAgICAgICAgICBhY3RvcjogeyBpZDogYWN0b3JJZCB8fCByZXNvbHZlZCB9LFxuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgY29udGVudDogcmVzb2x2ZWRUZXh0LFxuICAgICAgICAgICAgY3JlYXRlZCxcbiAgICAgICAgICAgIGNsaWVudElkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0YXJnZXQ6IHJlc29sdmVkLFxuICAgICAgICAgIHN0YXR1czogJ3BlbmRpbmcnLFxuICAgICAgICAgIHRyYW5zcG9ydDogJ3dlYnJ0YycsXG4gICAgICAgICAgZGVsaXZlcnk6IHtcbiAgICAgICAgICAgIHZpYTogJ21lc2gnLFxuICAgICAgICAgICAgZGVsaXZlcmVkVG86IDBcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5nbG9iYWxTdGF0ZS5tZXNzYWdlcyA9IHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXMgfHwge307XG4gICAgICAgIHRoaXMuZ2xvYmFsU3RhdGUubWVzc2FnZXNbY2xpZW50SWRdID0gY2hhdDtcblxuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dsb2JhbFN0YXRlVXBkYXRlJywge1xuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAnYWRkJywgcGF0aDogYC9tZXNzYWdlcy8ke2NsaWVudElkfWAsIHZhbHVlOiBjaGF0IH0sXG4gICAgICAgICAgICBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLl9wZXJzaXN0TWVzc2FnZXMoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIHR5cGU6ICdQMlBfQ0hBVF9NRVNTQUdFJyxcbiAgICAgICAgYWN0b3I6IGFjdG9ySWQgPyB7IGlkOiBhY3RvcklkIH0gOiB7IGlkOiBudWxsIH0sXG4gICAgICAgIG9iamVjdDogeyBjb250ZW50OiByZXNvbHZlZFRleHQsIGNyZWF0ZWQsIGNsaWVudElkOiBjbGllbnRJZCB8fCBudWxsIH1cbiAgICAgIH07XG4gICAgICAvLyBGb3Igbm93LCBicm9hZGNhc3QgdG8gYWxsIFdlYlJUQyBwZWVyczsgcGVlcnMgY2FuIGNob29zZSBob3cgdG8gZGlzcGxheS5cbiAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0aGlzLmJyb2FkY2FzdFRvV2ViUlRDUGVlcnNXaXRoUmVjaXBpZW50cyhwYXlsb2FkKTtcbiAgICAgIGNvbnN0IGRlbGl2ZXJlZFRvID0gcmVjaXBpZW50cy5sZW5ndGg7XG4gICAgICB0aGlzLl9sYXN0V2ViUlRDUmVjaXBpZW50UGVlcklkcyA9IHJlY2lwaWVudHM7XG4gICAgICB0aGlzLl9sYXN0V2ViUlRDQ2hhdERlbGl2ZXJ5Q291bnQgPSBkZWxpdmVyZWRUbztcbiAgICAgIHRoaXMuX2xhc3RXZWJSVENDaGF0U2VudEF0ID0gRGF0ZS5ub3coKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5nbG9iYWxTdGF0ZSAmJiB0aGlzLmdsb2JhbFN0YXRlLm1lc3NhZ2VzO1xuICAgICAgICBpZiAobWVzc2FnZXMpIHtcbiAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBPYmplY3QudmFsdWVzKG1lc3NhZ2VzKS5maW5kKChtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvYmogPSBtICYmIG0ub2JqZWN0O1xuICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBvYmouY29udGVudCA9PT0gcmVzb2x2ZWRUZXh0ICYmIG9iai5jcmVhdGVkID09PSBjcmVhdGVkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChjYW5kaWRhdGUpIHtcbiAgICAgICAgICAgIGNhbmRpZGF0ZS5zdGF0dXMgPSBkZWxpdmVyZWRUbyA+IDAgPyAnc2VudCcgOiAncGVuZGluZyc7XG4gICAgICAgICAgICBjYW5kaWRhdGUuZGVsaXZlcnkgPSBPYmplY3QuYXNzaWduKHt9LCBjYW5kaWRhdGUuZGVsaXZlcnkgfHwge30sIHtcbiAgICAgICAgICAgICAgdmlhOiAnbWVzaCcsXG4gICAgICAgICAgICAgIGRlbGl2ZXJlZFRvXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogeyBvcDogJ3JlcGxhY2UnLCBwYXRoOiBgL21lc3NhZ2VzLyR7Y2FuZGlkYXRlLm9iamVjdC5jbGllbnRJZH1gLCB2YWx1ZTogY2FuZGlkYXRlIH0sXG4gICAgICAgICAgICAgICAgZ2xvYmFsU3RhdGU6IHRoaXMuZ2xvYmFsU3RhdGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdGhpcy5fcGVyc2lzdE1lc3NhZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnV2ViUlRDIHBlZXIgY2hhdCBkZWxpdmVyeSBjb3VudDonLCBkZWxpdmVyZWRUbyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VucXVldWVQZWVyTWVzc2FnZSh7IGFkZHJlc3M6IHJlc29sdmVkLCB0ZXh0OiByZXNvbHZlZFRleHQsIGNyZWF0ZWQgfSk7XG4gICAgdGhpcy5fZmx1c2hQZWVyTWVzc2FnZVF1ZXVlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbm9kZS1sb2NhbCBuaWNrbmFtZSBmb3IgYSBwZWVyIChzdG9yZWQgc2VydmVyLXNpZGUpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbmlja25hbWVcbiAgICovXG4gIHNlbmRTZXRQZWVyTmlja25hbWVSZXF1ZXN0IChpZE9yQWRkcmVzcywgbmlja25hbWUpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHR5cGVvZiBpZE9yQWRkcmVzcyA9PT0gJ29iamVjdCcgJiYgaWRPckFkZHJlc3MgPyAoaWRPckFkZHJlc3MuaWQgfHwgaWRPckFkZHJlc3MuYWRkcmVzcykgOiBpZE9yQWRkcmVzcztcbiAgICBpZiAoIXJlc29sdmVkKSByZXR1cm47XG4gICAgY29uc3QgY2xlYW4gPSBuaWNrbmFtZSA9PSBudWxsID8gJycgOiBTdHJpbmcobmlja25hbWUpLnRyaW0oKS5zbGljZSgwLCA2NCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNlbGZJZCA9IHRoaXMuX2dldElkZW50aXR5SWQgJiYgdGhpcy5fZ2V0SWRlbnRpdHlJZCgpO1xuICAgICAgaWYgKGNsZWFuICYmIHNlbGZJZCAmJiAocmVzb2x2ZWQgPT09IHNlbGZJZCB8fCByZXNvbHZlZCA9PT0gJ3NlbGYnIHx8IHJlc29sdmVkID09PSAnbWUnKSkge1xuICAgICAgICB0aGlzLl9wZWVyQWxpYXNCeUlkID0gdGhpcy5fcGVlckFsaWFzQnlJZCB8fCB7fTtcbiAgICAgICAgdGhpcy5fcGVlckFsaWFzQnlJZFtzZWxmSWRdID0gY2xlYW47XG4gICAgICAgIGNvbnN0IHNpZ25pbmdLZXkgPSB0aGlzLnNldHRpbmdzLnNpZ25pbmdLZXkgfHwgdGhpcy5rZXk7XG4gICAgICAgIGxldCBhbGlhc1BheWxvYWQgPSB7IHR5cGU6ICdQMlBfUEVFUl9BTElBUycsIGFjdG9yOiB7IGlkOiBzZWxmSWQgfSwgb2JqZWN0OiB7IG5hbWU6IGNsZWFuIH0gfTtcbiAgICAgICAgaWYgKE1lc3NhZ2UgJiYgTWVzc2FnZS5mcm9tVmVjdG9yICYmIHNpZ25pbmdLZXkpIHtcbiAgICAgICAgICBjb25zdCBtc2cgPSBNZXNzYWdlLmZyb21WZWN0b3IoWydQMlBfUEVFUl9BTElBUycsIGNsZWFuXSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBtc2cuc2lnbldpdGhLZXkgPT09ICdmdW5jdGlvbicpIG1zZy5zaWduV2l0aEtleShzaWduaW5nS2V5KTtcbiAgICAgICAgICBhbGlhc1BheWxvYWQgPSBtc2c7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5icm9hZGNhc3RUb1dlYlJUQ1BlZXJzV2l0aFJlY2lwaWVudHMoYWxpYXNQYXlsb2FkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChfKSB7IC8qIGJlc3QtZWZmb3J0IG1lc2ggYWxpYXMgKi8gfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0geyBtZXRob2Q6ICdTZXRQZWVyTmlja25hbWUnLCBwYXJhbXM6IFtyZXNvbHZlZCwgY2xlYW5dIH07XG4gICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tVmVjdG9yKFsnSlNPTkNhbGwnLCBKU09OLnN0cmluZ2lmeShwYXlsb2FkKV0pO1xuICAgICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlLnRvQnVmZmVyKCkpO1xuICAgICAgLy8gRW5zdXJlIFVJIHVwZGF0ZXMgZXZlbiBpZiBwdXNoIG1pc3NlcyBmb3Igc29tZSByZWFzb25cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0cnkgeyB0aGlzLnNlbmRMaXN0UGVlcnNSZXF1ZXN0KCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9LCAyNTApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdFcnJvciBzZW5kaW5nIFNldFBlZXJOaWNrbmFtZSByZXF1ZXN0OicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHJpY2ggcGVlciBkZXRhaWxzIGZyb20gdGhlIGh1YiAodXNlZCBieSBgL3BlZXJzLzppZGAgcGFnZSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfHtpZCxhZGRyZXNzfX0gaWRPckFkZHJlc3MgLSBQZWVyIGlkIChwdWJsaWMga2V5KSBvciBhZGRyZXNzXG4gICAqL1xuICBzZW5kR2V0UGVlclJlcXVlc3QgKGlkT3JBZGRyZXNzKSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSB0eXBlb2YgaWRPckFkZHJlc3MgPT09ICdvYmplY3QnICYmIGlkT3JBZGRyZXNzID8gKGlkT3JBZGRyZXNzLmlkIHx8IGlkT3JBZGRyZXNzLmFkZHJlc3MpIDogaWRPckFkZHJlc3M7XG4gICAgaWYgKCFyZXNvbHZlZCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0geyBtZXRob2Q6ICdHZXRQZWVyJywgcGFyYW1zOiBbcmVzb2x2ZWRdIH07XG4gICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tVmVjdG9yKFsnSlNPTkNhbGwnLCBKU09OLnN0cmluZ2lmeShwYXlsb2FkKV0pO1xuICAgICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlLnRvQnVmZmVyKCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdFcnJvciBzZW5kaW5nIEdldFBlZXIgcmVxdWVzdDonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXNrIGEgY29ubmVjdGVkIEZhYnJpYyBUQ1AgcGVlciB0byBydW4gYSBDaGFpblN5bmNSZXF1ZXN0IGhhbmRzaGFrZSAoaW52ZW50b3J5ICsgQml0Y29pbkJsb2NrIHJlcGxheSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfHtpZD86c3RyaW5nLGFkZHJlc3M/OnN0cmluZ319IGlkT3JBZGRyZXNzXG4gICAqL1xuICBzZW5kRmFicmljUGVlclJlc3luY1JlcXVlc3QgKGlkT3JBZGRyZXNzKSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSB0eXBlb2YgaWRPckFkZHJlc3MgPT09ICdvYmplY3QnICYmIGlkT3JBZGRyZXNzXG4gICAgICA/IChpZE9yQWRkcmVzcy5hZGRyZXNzIHx8IGlkT3JBZGRyZXNzLmlkKVxuICAgICAgOiBpZE9yQWRkcmVzcztcbiAgICBpZiAoIXJlc29sdmVkKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIG1ldGhvZDogJ1JlcXVlc3RGYWJyaWNQZWVyUmVzeW5jJyxcbiAgICAgICAgcGFyYW1zOiBbeyBhZGRyZXNzOiByZXNvbHZlZCwgaWQ6IHJlc29sdmVkIH1dXG4gICAgICB9O1xuICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ0pTT05DYWxsJywgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCldKTtcbiAgICAgIHRoaXMuc2VuZFNpZ25lZE1lc3NhZ2UobWVzc2FnZS50b0J1ZmZlcigpKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZW5kTmV0d29ya1N0YXR1c1JlcXVlc3QgPT09ICdmdW5jdGlvbicpIHRoaXMuc2VuZE5ldHdvcmtTdGF0dXNSZXF1ZXN0KCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9LCA0MDApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdFcnJvciBzZW5kaW5nIFJlcXVlc3RGYWJyaWNQZWVyUmVzeW5jOicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVyYXRvcjogc2VuZCBgUDJQX0ZMVVNIX0NIQUlOYCB0byBjb25uZWN0ZWQgcGVlcnMgYWJvdmUgdGhlIGh1YidzIHRydXN0ZWQgcmVnaXN0cnkgc2NvcmUuXG4gICAqIEBwYXJhbSB7eyBzbmFwc2hvdEJsb2NrSGFzaDogc3RyaW5nLCBuZXR3b3JrPzogc3RyaW5nLCBsYWJlbD86IHN0cmluZyB9fSBvYmplY3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkbWluVG9rZW4gLSBodWIgYWRtaW4gdG9rZW4gKHJlcXVpcmVkIGJ5IEpTT04tUlBDKVxuICAgKi9cbiAgc2VuZEZsdXNoQ2hhaW5Ub1RydXN0ZWRQZWVyc1JlcXVlc3QgKG9iamVjdCwgYWRtaW5Ub2tlbikge1xuICAgIGNvbnN0IHNuYXAgPSBvYmplY3QgJiYgb2JqZWN0LnNuYXBzaG90QmxvY2tIYXNoID8gU3RyaW5nKG9iamVjdC5zbmFwc2hvdEJsb2NrSGFzaCkudHJpbSgpIDogJyc7XG4gICAgaWYgKCEvXlswLTlhLWZBLUZdezY0fSQvLnRlc3Qoc25hcCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0gc2VuZEZsdXNoQ2hhaW5Ub1RydXN0ZWRQZWVyc1JlcXVlc3Q6IHNuYXBzaG90QmxvY2tIYXNoIG11c3QgYmUgNjQgaGV4Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gYWRtaW5Ub2tlbiAhPSBudWxsID8gU3RyaW5nKGFkbWluVG9rZW4pLnRyaW0oKSA6ICcnO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0gc2VuZEZsdXNoQ2hhaW5Ub1RydXN0ZWRQZWVyc1JlcXVlc3Q6IGFkbWluVG9rZW4gcmVxdWlyZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtID0ge1xuICAgICAgICBzbmFwc2hvdEJsb2NrSGFzaDogc25hcC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBhZG1pblRva2VuOiB0b2tlblxuICAgICAgfTtcbiAgICAgIGlmIChvYmplY3QubmV0d29yayAhPSBudWxsICYmIFN0cmluZyhvYmplY3QubmV0d29yaykudHJpbSgpKSBwYXJhbS5uZXR3b3JrID0gU3RyaW5nKG9iamVjdC5uZXR3b3JrKS50cmltKCk7XG4gICAgICBpZiAob2JqZWN0LmxhYmVsICE9IG51bGwgJiYgU3RyaW5nKG9iamVjdC5sYWJlbCkudHJpbSgpKSBwYXJhbS5sYWJlbCA9IFN0cmluZyhvYmplY3QubGFiZWwpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIG1ldGhvZDogJ1NlbmRGbHVzaENoYWluVG9UcnVzdGVkUGVlcnMnLFxuICAgICAgICBwYXJhbXM6IFtwYXJhbV1cbiAgICAgIH07XG4gICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tVmVjdG9yKFsnSlNPTkNhbGwnLCBKU09OLnN0cmluZ2lmeShwYXlsb2FkKV0pO1xuICAgICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlLnRvQnVmZmVyKCkpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlbmROZXR3b3JrU3RhdHVzUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5zZW5kTmV0d29ya1N0YXR1c1JlcXVlc3QoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH0sIDQwMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIHNlbmRpbmcgU2VuZEZsdXNoQ2hhaW5Ub1RydXN0ZWRQZWVyczonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICB9XG4gIH1cblxuICBzZW5kTGlzdERvY3VtZW50c1JlcXVlc3QgKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0geyBtZXRob2Q6ICdMaXN0RG9jdW1lbnRzJywgcGFyYW1zOiBbXSB9O1xuICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ0pTT05DYWxsJywgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCldKTtcbiAgICAgIHRoaXMuc2VuZFNpZ25lZE1lc3NhZ2UobWVzc2FnZS50b0J1ZmZlcigpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3Igc2VuZGluZyBMaXN0RG9jdW1lbnRzIHJlcXVlc3Q6Jywgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgICB0cnkge1xuICAgICAgICBwdXNoVWlOb3RpZmljYXRpb24oe1xuICAgICAgICAgIGlkOiBgbGlzdC1kb2N1bWVudHMtJHtEYXRlLm5vdygpfWAsXG4gICAgICAgICAga2luZDogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0NvdWxkIG5vdCByZWZyZXNoIGRvY3VtZW50IGxpc3QnLFxuICAgICAgICAgIHN1YnRpdGxlOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgaHJlZjogJy9kb2N1bWVudHMnXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge31cbiAgICB9XG4gIH1cblxuICBzZW5kUmVmcmVzaERvY3VtZW50TWFya2V0UmVxdWVzdCAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7IG1ldGhvZDogJ1JlZnJlc2hEb2N1bWVudE1hcmtldCcsIHBhcmFtczogW10gfTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLmZyb21WZWN0b3IoWydKU09OQ2FsbCcsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXSk7XG4gICAgICB0aGlzLnNlbmRTaWduZWRNZXNzYWdlKG1lc3NhZ2UudG9CdWZmZXIoKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIHNlbmRpbmcgUmVmcmVzaERvY3VtZW50TWFya2V0IHJlcXVlc3Q6Jywgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgc2VuZEdldERvY3VtZW50UmVxdWVzdCAoaWQpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHR5cGVvZiBpZCA9PT0gJ29iamVjdCcgJiYgaWQgJiYgaWQuaWQgPyBpZC5pZCA6IGlkO1xuICAgIGlmICghcmVzb2x2ZWQpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHsgbWV0aG9kOiAnR2V0RG9jdW1lbnQnLCBwYXJhbXM6IFtyZXNvbHZlZF0gfTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLmZyb21WZWN0b3IoWydKU09OQ2FsbCcsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXSk7XG4gICAgICB0aGlzLnNlbmRTaWduZWRNZXNzYWdlKG1lc3NhZ2UudG9CdWZmZXIoKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIHNlbmRpbmcgR2V0RG9jdW1lbnQgcmVxdWVzdDonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZG9jdW1lbnRMb2FkRmFpbGVkJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGRvY3VtZW50SWQ6IFN0cmluZyhyZXNvbHZlZCksXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogJ0NvdWxkIG5vdCByZXF1ZXN0IGRvY3VtZW50IGZyb20gaHViLidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGEgaHViIGBHZXREb2N1bWVudGAgSlNPTi1SUEMgLyBKU09OQ2FsbFJlc3VsdCBwYXlsb2FkIGludG8gbG9jYWwgZG9jdW1lbnQgc3RhdGUuXG4gICAqIFVzZWQgd2hlbiB0aGUgZG9jdW1lbnQgZGV0YWlsIHZpZXcgZmFsbHMgYmFjayB0byBIVFRQIGAvc2VydmljZXMvcnBjYCAoZS5nLiBXUyBwYXRoIGRlbGF5ZWQpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVzdWx0IC0gYHsgdHlwZTogJ0dldERvY3VtZW50UmVzdWx0JywgZG9jdW1lbnQ/LCBkb2N1bWVudElkPywgbWVzc2FnZT8gfWBcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgd2hlbiBoYW5kbGVkIChzdWNjZXNzIG9yIG5vdC1mb3VuZClcbiAgICovXG4gIG1lcmdlR2V0RG9jdW1lbnRScGNSZXN1bHQgKHJlc3VsdCkge1xuICAgIGlmICghcmVzdWx0IHx8IHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnIHx8IHJlc3VsdC50eXBlICE9PSAnR2V0RG9jdW1lbnRSZXN1bHQnKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHJlc3VsdC5kb2N1bWVudCAmJiByZXN1bHQuZG9jdW1lbnQuaWQpIHtcbiAgICAgIGNvbnN0IGRpZCA9IHJlc3VsdC5kb2N1bWVudC5pZDtcbiAgICAgIHRoaXMuX3N0b3JlRG9jdW1lbnQoZGlkLCByZXN1bHQuZG9jdW1lbnQpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdnbG9iYWxTdGF0ZVVwZGF0ZScsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBvcGVyYXRpb246IHsgb3A6ICdhZGQnLCBwYXRoOiBgL2RvY3VtZW50cy8ke2RpZH1gLCB2YWx1ZTogdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHNbZGlkXSB9LFxuICAgICAgICAgICAgICBnbG9iYWxTdGF0ZTogdGhpcy5nbG9iYWxTdGF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LmRvY3VtZW50SWQgIT0gbnVsbCAmJiBTdHJpbmcocmVzdWx0LmRvY3VtZW50SWQpICE9PSAnJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkb2N1bWVudExvYWRGYWlsZWQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgZG9jdW1lbnRJZDogU3RyaW5nKHJlc3VsdC5kb2N1bWVudElkKSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogKHJlc3VsdC5tZXNzYWdlICYmIFN0cmluZyhyZXN1bHQubWVzc2FnZSkpIHx8ICdEb2N1bWVudCBub3QgZm91bmQuJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgaHViIGBQdWJsaXNoRG9jdW1lbnRgIHJlc3VsdCAoV2ViU29ja2V0IEpTT05DYWxsUmVzdWx0IG9yIEhUVFAgL3NlcnZpY2VzL3JwYyBmYWxsYmFjaykuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZXN1bHRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgd2hlbiByZWNvZ25pemVkXG4gICAqL1xuICBtZXJnZVB1Ymxpc2hEb2N1bWVudFJwY1Jlc3VsdCAocmVzdWx0KSB7XG4gICAgaWYgKCFyZXN1bHQgfHwgdHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocmVzdWx0LnR5cGUgPT09ICdQdWJsaXNoRG9jdW1lbnRSZXN1bHQnICYmIHJlc3VsdC5kb2N1bWVudCAmJiByZXN1bHQuZG9jdW1lbnQuaWQpIHtcbiAgICAgIGNvbnN0IGJhY2tlbmRJZCA9IHJlc3VsdC5kb2N1bWVudC5pZDtcbiAgICAgIGNvbnN0IHNoYSA9IHJlc3VsdC5kb2N1bWVudC5zaGEyNTYgfHwgYmFja2VuZElkO1xuICAgICAgaWYgKHRoaXMuX3BlbmRpbmdQdWJsaXNoRG9jdW1lbnRCYWNrZW5kSWRzKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdQdWJsaXNoRG9jdW1lbnRCYWNrZW5kSWRzLmRlbGV0ZShTdHJpbmcoYmFja2VuZElkKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyA9IHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzIHx8IHt9O1xuICAgICAgbGV0IHRhcmdldElkID0gYmFja2VuZElkO1xuICAgICAgaWYgKHNoYSkge1xuICAgICAgICBmb3IgKGNvbnN0IFtsb2NhbElkLCBleGlzdGluZ0RvY10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMpKSB7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nRG9jICYmIChleGlzdGluZ0RvYy5zaGEyNTYgPT09IHNoYSB8fCBleGlzdGluZ0RvYy5zaGEgPT09IHNoYSkpIHtcbiAgICAgICAgICAgIHRhcmdldElkID0gbG9jYWxJZDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1t0YXJnZXRJZF0gfHwge307XG4gICAgICB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1t0YXJnZXRJZF0gPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICAuLi5yZXN1bHQuZG9jdW1lbnQsXG4gICAgICAgIGlkOiB0YXJnZXRJZCxcbiAgICAgICAgcHVibGlzaGVkOiByZXN1bHQuZG9jdW1lbnQucHVibGlzaGVkIHx8IGV4aXN0aW5nLnB1Ymxpc2hlZCB8fCB0cnVlXG4gICAgICB9O1xuICAgICAgaWYgKHRhcmdldElkICE9PSBiYWNrZW5kSWQgJiYgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHNbYmFja2VuZElkXSkge1xuICAgICAgICBkZWxldGUgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHNbYmFja2VuZElkXTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAnYWRkJywgcGF0aDogYC9kb2N1bWVudHMvJHt0YXJnZXRJZH1gLCB2YWx1ZTogdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHNbdGFyZ2V0SWRdIH0sXG4gICAgICAgICAgICAgIGdsb2JhbFN0YXRlOiB0aGlzLmdsb2JhbFN0YXRlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicgJiZcbiAgICAgIHJlc3VsdC5kb2N1bWVudElkICE9IG51bGwgJiZcbiAgICAgIFN0cmluZyhyZXN1bHQuZG9jdW1lbnRJZCkgIT09ICcnICYmXG4gICAgICB0aGlzLl9wZW5kaW5nUHVibGlzaERvY3VtZW50QmFja2VuZElkcyAmJlxuICAgICAgdGhpcy5fcGVuZGluZ1B1Ymxpc2hEb2N1bWVudEJhY2tlbmRJZHMuaGFzKFN0cmluZyhyZXN1bHQuZG9jdW1lbnRJZCkpXG4gICAgKSB7XG4gICAgICBjb25zdCBwdWJFcnJEaWQgPSBTdHJpbmcocmVzdWx0LmRvY3VtZW50SWQpO1xuICAgICAgdGhpcy5fcGVuZGluZ1B1Ymxpc2hEb2N1bWVudEJhY2tlbmRJZHMuZGVsZXRlKHB1YkVyckRpZCk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3B1Ymxpc2hEb2N1bWVudEZhaWxlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBkb2N1bWVudElkOiBwdWJFcnJEaWQsIG1lc3NhZ2U6IFN0cmluZyhyZXN1bHQubWVzc2FnZSB8fCAnUHVibGlzaCBmYWlsZWQnKSB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicgJiZcbiAgICAgIHJlc3VsdC5tZXNzYWdlICYmXG4gICAgICAhcmVzdWx0LnR5cGUgJiZcbiAgICAgICEoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwgJ2RvY3VtZW50SWQnKSAmJiByZXN1bHQuZG9jdW1lbnRJZCAhPSBudWxsICYmIFN0cmluZyhyZXN1bHQuZG9jdW1lbnRJZCkgIT09ICcnKVxuICAgICkge1xuICAgICAgY29uc3QgY3R4ID0gdGhpcy5fbGFzdFB1Ymxpc2hDcmVhdGVDb250ZXh0O1xuICAgICAgaWYgKGN0eCAmJiAoRGF0ZS5ub3coKSAtIGN0eC5zZW50QXQpIDwgMjUwMDApIHtcbiAgICAgICAgdGhpcy5fbGFzdFB1Ymxpc2hDcmVhdGVDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdQdWJsaXNoQnlTaGEpIHRoaXMuX3BlbmRpbmdQdWJsaXNoQnlTaGEuZGVsZXRlKGN0eC5zaGEpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdwdWJsaXNoRG9jdW1lbnRGYWlsZWQnLCB7XG4gICAgICAgICAgICAgIGRldGFpbDogeyBkb2N1bWVudElkOiBjdHguYWN0b3JJZCwgbWVzc2FnZTogU3RyaW5nKHJlc3VsdC5tZXNzYWdlKSB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBodWIgYENyZWF0ZURvY3VtZW50YCByZXN1bHQgKFdlYlNvY2tldCBKU09OQ2FsbFJlc3VsdCBvciBIVFRQIC9zZXJ2aWNlcy9ycGMgZmFsbGJhY2spLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVzdWx0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIHdoZW4gcmVjb2duaXplZFxuICAgKi9cbiAgbWVyZ2VDcmVhdGVEb2N1bWVudFJwY1Jlc3VsdCAocmVzdWx0KSB7XG4gICAgaWYgKCFyZXN1bHQgfHwgdHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcgfHwgcmVzdWx0LnR5cGUgIT09ICdDcmVhdGVEb2N1bWVudFJlc3VsdCcgfHwgIXJlc3VsdC5kb2N1bWVudCB8fCAhcmVzdWx0LmRvY3VtZW50LmlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGJhY2tlbmRJZCA9IHJlc3VsdC5kb2N1bWVudC5pZDtcbiAgICBjb25zdCBzaGEgPSByZXN1bHQuZG9jdW1lbnQuc2hhMjU2IHx8IGJhY2tlbmRJZDtcbiAgICBpZiAodGhpcy5fbGFzdFB1Ymxpc2hDcmVhdGVDb250ZXh0ICYmIHNoYSAmJiB0aGlzLl9sYXN0UHVibGlzaENyZWF0ZUNvbnRleHQuc2hhID09PSBzaGEpIHtcbiAgICAgIHRoaXMuX2xhc3RQdWJsaXNoQ3JlYXRlQ29udGV4dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX3N0b3JlRG9jdW1lbnQoYmFja2VuZElkLCB7IC4uLih0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1tiYWNrZW5kSWRdIHx8IHt9KSwgLi4ucmVzdWx0LmRvY3VtZW50IH0pO1xuICAgIGlmIChzaGEgJiYgdGhpcy5fcGVuZGluZ1B1Ymxpc2hCeVNoYSAmJiB0aGlzLl9wZW5kaW5nUHVibGlzaEJ5U2hhLmhhcyhzaGEpKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnNlbmRQdWJsaXNoRG9jdW1lbnRSZXF1ZXN0KHNoYSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLl9wZW5kaW5nUHVibGlzaEJ5U2hhLmRlbGV0ZShzaGEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBvcGVyYXRpb246IHsgb3A6ICdhZGQnLCBwYXRoOiBgL2RvY3VtZW50cy8ke2JhY2tlbmRJZH1gLCB2YWx1ZTogdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHNbYmFja2VuZElkXSB9LFxuICAgICAgICAgICAgZ2xvYmFsU3RhdGU6IHRoaXMuZ2xvYmFsU3RhdGVcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChfKSB7fVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGh1YiBgQ3JlYXRlRGlzdHJpYnV0ZUludm9pY2VgIEpTT04tUlBDIHJlc3VsdCAoc2FtZSBldmVudHMgYXMgV2ViU29ja2V0IHBhdGgpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVzdWx0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIHdoZW4gcmVjb2duaXplZFxuICAgKi9cbiAgbWVyZ2VDcmVhdGVEaXN0cmlidXRlSW52b2ljZVJwY1Jlc3VsdCAocmVzdWx0KSB7XG4gICAgaWYgKCFyZXN1bHQgfHwgdHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocmVzdWx0LnR5cGUgPT09ICdDcmVhdGVEaXN0cmlidXRlSW52b2ljZVJlc3VsdCcgJiYgcmVzdWx0LmRvY3VtZW50SWQpIHtcbiAgICAgIGNvbnN0IGRpc3REaWQgPSBTdHJpbmcocmVzdWx0LmRvY3VtZW50SWQpO1xuICAgICAgaWYgKHRoaXMuX3BlbmRpbmdDcmVhdGVEaXN0cmlidXRlSW52b2ljZUJhY2tlbmRJZHMpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0NyZWF0ZURpc3RyaWJ1dGVJbnZvaWNlQmFja2VuZElkcy5kZWxldGUoZGlzdERpZCk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rpc3RyaWJ1dGVJbnZvaWNlUmVhZHknLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgZG9jdW1lbnRJZDogZGlzdERpZCxcbiAgICAgICAgICAgICAgYWRkcmVzczogcmVzdWx0LmFkZHJlc3MsXG4gICAgICAgICAgICAgIGFtb3VudFNhdHM6IHJlc3VsdC5hbW91bnRTYXRzLFxuICAgICAgICAgICAgICBjb25maWc6IHJlc3VsdC5jb25maWcsXG4gICAgICAgICAgICAgIG5ldHdvcms6IHJlc3VsdC5uZXR3b3JrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicgJiZcbiAgICAgIHJlc3VsdC5kb2N1bWVudElkICE9IG51bGwgJiZcbiAgICAgIFN0cmluZyhyZXN1bHQuZG9jdW1lbnRJZCkgIT09ICcnXG4gICAgKSB7XG4gICAgICBjb25zdCBkaXN0RXJyRGlkID0gU3RyaW5nKHJlc3VsdC5kb2N1bWVudElkKTtcbiAgICAgIGlmICh0aGlzLl9wZW5kaW5nQ3JlYXRlRGlzdHJpYnV0ZUludm9pY2VCYWNrZW5kSWRzKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdDcmVhdGVEaXN0cmlidXRlSW52b2ljZUJhY2tlbmRJZHMuZGVsZXRlKGRpc3RFcnJEaWQpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkaXN0cmlidXRlSW52b2ljZUZhaWxlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBkb2N1bWVudElkOiBkaXN0RXJyRGlkLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBTdHJpbmcocmVzdWx0Lm1lc3NhZ2UgfHwgJ0NvdWxkIG5vdCBjcmVhdGUgZGlzdHJpYnV0ZSBpbnZvaWNlJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2VuZENyZWF0ZURvY3VtZW50UmVxdWVzdCAoZG9jKSB7XG4gICAgaWYgKCFkb2MgfHwgdHlwZW9mIGRvYyAhPT0gJ29iamVjdCcpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuX2NhblNpZ25PdXRnb2luZygpKSB7XG4gICAgICBjb25zdCBzaGEgPSBkb2Muc2hhMjU2ID8gU3RyaW5nKGRvYy5zaGEyNTYpIDogKGRvYy5pZCA/IFN0cmluZyhkb2MuaWQpIDogJycpO1xuICAgICAgaWYgKHNoYSAmJiB0aGlzLl9wZW5kaW5nUHVibGlzaEJ5U2hhKSB0aGlzLl9wZW5kaW5nUHVibGlzaEJ5U2hhLmRlbGV0ZShzaGEpO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLl9sYXN0UHVibGlzaENyZWF0ZUNvbnRleHQgJiZcbiAgICAgICAgc2hhICYmXG4gICAgICAgIHRoaXMuX2xhc3RQdWJsaXNoQ3JlYXRlQ29udGV4dC5zaGEgPT09IHNoYVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGFjdG9ySWQgPSB0aGlzLl9sYXN0UHVibGlzaENyZWF0ZUNvbnRleHQuYWN0b3JJZDtcbiAgICAgICAgdGhpcy5fbGFzdFB1Ymxpc2hDcmVhdGVDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncHVibGlzaERvY3VtZW50RmFpbGVkJywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudElkOiBTdHJpbmcoYWN0b3JJZCB8fCBzaGEpLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVbmxvY2sgeW91ciBGYWJyaWMgaWRlbnRpdHkg4oCUIENyZWF0ZURvY3VtZW50IG11c3QgYmUgU2Nobm9yci1zaWduZWQgb24gdGhlIHdpcmUuJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgcHVzaFVpTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICBpZDogYGNyZWF0ZS1kb2N1bWVudC0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICBraW5kOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQ3JlYXRlIGRvY3VtZW50IGJsb2NrZWQnLFxuICAgICAgICAgIHN1YnRpdGxlOiAnVW5sb2NrIHlvdXIgRmFicmljIGlkZW50aXR5IHRvIHVwbG9hZCBvciBwdWJsaXNoLicsXG4gICAgICAgICAgaHJlZjogJy9kb2N1bWVudHMnXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnRCYXNlNjQgPSBkb2MuY29udGVudEJhc2U2NCB8fCAoZG9jLmlkID8gdGhpcy5nZXREZWNyeXB0ZWREb2N1bWVudENvbnRlbnQoZG9jLmlkKSA6IG51bGwpO1xuICAgICAgY29uc3QgcGF5bG9hZERvYyA9IGNvbnRlbnRCYXNlNjQgPyB7IC4uLmRvYywgY29udGVudEJhc2U2NCB9IDogZG9jO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHsgbWV0aG9kOiAnQ3JlYXRlRG9jdW1lbnQnLCBwYXJhbXM6IFtwYXlsb2FkRG9jXSB9O1xuICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ0pTT05DYWxsJywgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCldKTtcbiAgICAgIHRoaXMuc2VuZFNpZ25lZE1lc3NhZ2UobWVzc2FnZS50b0J1ZmZlcigpKTtcbiAgICAgIC8vIEZhbGxiYWNrIGZvciBkZWxheWVkL2xvc3QgV1MgcmVzcG9uc2VzOiBwZXJmb3JtIHNhbWUtb3JpZ2luIEhUVFAgSlNPTi1SUEMgQ3JlYXRlRG9jdW1lbnQuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBvcmlnaW4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgICAgICAgPyB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICAgIGlmICghb3JpZ2luKSByZXR1cm47XG4gICAgICAgICAgZmV0Y2goYCR7b3JpZ2lufS9zZXJ2aWNlcy9ycGNgLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuX2h1Ykpzb25ScGNIdHRwSGVhZGVycygpLFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBqc29ucnBjOiAnMi4wJywgaWQ6IERhdGUubm93KCksIG1ldGhvZDogJ0NyZWF0ZURvY3VtZW50JywgcGFyYW1zOiBbcGF5bG9hZERvY10gfSlcbiAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKHIpID0+IHIuanNvbigpLmNhdGNoKCgpID0+IG51bGwpKVxuICAgICAgICAgICAgLnRoZW4oKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFib2R5IHx8IGJvZHkucmVzdWx0ID09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgICAgdGhpcy5tZXJnZUNyZWF0ZURvY3VtZW50UnBjUmVzdWx0KGJvZHkucmVzdWx0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgfSwgMjUwMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIHNlbmRpbmcgQ3JlYXRlRG9jdW1lbnQgcmVxdWVzdDonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICAgIGNvbnN0IHNoYSA9IGRvYy5zaGEyNTYgPyBTdHJpbmcoZG9jLnNoYTI1NikgOiAoZG9jLmlkID8gU3RyaW5nKGRvYy5pZCkgOiAnJyk7XG4gICAgICBpZiAoc2hhICYmIHRoaXMuX3BlbmRpbmdQdWJsaXNoQnlTaGEpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZ1B1Ymxpc2hCeVNoYS5kZWxldGUoc2hhKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fbGFzdFB1Ymxpc2hDcmVhdGVDb250ZXh0ICYmXG4gICAgICAgIHNoYSAmJlxuICAgICAgICB0aGlzLl9sYXN0UHVibGlzaENyZWF0ZUNvbnRleHQuc2hhID09PSBzaGFcbiAgICAgICkge1xuICAgICAgICBjb25zdCBhY3RvcklkID0gdGhpcy5fbGFzdFB1Ymxpc2hDcmVhdGVDb250ZXh0LmFjdG9ySWQ7XG4gICAgICAgIHRoaXMuX2xhc3RQdWJsaXNoQ3JlYXRlQ29udGV4dCA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3B1Ymxpc2hEb2N1bWVudEZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRJZDogU3RyaW5nKGFjdG9ySWQgfHwgc2hhKSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHB1c2hVaU5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgaWQ6IGBjcmVhdGUtZG9jdW1lbnQtJHtEYXRlLm5vdygpfWAsXG4gICAgICAgICAga2luZDogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0NyZWF0ZSBkb2N1bWVudCBmYWlsZWQnLFxuICAgICAgICAgIHN1YnRpdGxlOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgaHJlZjogJy9kb2N1bWVudHMnXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoXykge31cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaCBhIGRvY3VtZW50LiBXaGVuIGRvYyBuZWVkcyBDcmVhdGVEb2N1bWVudCBmaXJzdCwgcXVldWVzIHB1Ymxpc2ggZm9yIGFmdGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBEb2N1bWVudCBpZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gT3B0aW9uYWwgeyBwdXJjaGFzZVByaWNlU2F0cyB9IGZvciBIVExDIHB1cmNoYXNlIHByaWNlXG4gICAqL1xuICBzZW5kUHVibGlzaERvY3VtZW50UmVxdWVzdCAoaWQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGxvZ2ljYWwgPSB0eXBlb2YgaWQgPT09ICdvYmplY3QnICYmIGlkICYmIGlkLmlkID8gaWQuaWQgOiBpZDtcbiAgICBpZiAoIWxvZ2ljYWwpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5fY2FuU2lnbk91dGdvaW5nKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncHVibGlzaERvY3VtZW50RmFpbGVkJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGRvY3VtZW50SWQ6IFN0cmluZyhsb2dpY2FsKSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1VubG9jayB5b3VyIEZhYnJpYyBpZGVudGl0eSDigJQgUHVibGlzaERvY3VtZW50IG11c3QgYmUgU2Nobm9yci1zaWduZWQgb24gdGhlIHdpcmUuJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByb3cgPSB0aGlzLl9yZXNvbHZlRG9jdW1lbnRSb3cobG9naWNhbCk7XG4gICAgY29uc3QgZG9jID0gcm93ICYmIHJvdy5kb2M7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgbG9jYWwtb25seSBkb2N1bWVudCAob3BhcXVlIGlkKSB3aXRoIGEgYmFja2luZyBzaGEyNTYgYW5kIG5vdCB5ZXQgcHVibGlzaGVkLFxuICAgIC8vIGZpcnN0IGVuc3VyZSB0aGUgaHViIGhhcyB0aGUgZnVsbCBjb250ZW50IHZpYSBDcmVhdGVEb2N1bWVudCwgdGhlbiBwdWJsaXNoLlxuICAgIC8vIFdoZW4gYGxvZ2ljYWxgIGlzIGFscmVhZHkgdGhlIGNvbnRlbnQgaGFzaCAoc2Vjb25kIGhvcCBhZnRlciBDcmVhdGVEb2N1bWVudCksIHNraXAgcmUtdXBsb2FkLlxuICAgIGlmIChuZWVkc0NyZWF0ZURvY3VtZW50QmVmb3JlUHVibGlzaChsb2dpY2FsLCBkb2MpKSB7XG4gICAgICBjb25zdCBzaGEgPSBkb2Muc2hhMjU2O1xuICAgICAgY29uc3QgY29udGVudEJhc2U2NCA9IHRoaXMuZ2V0RGVjcnlwdGVkRG9jdW1lbnRDb250ZW50KGxvZ2ljYWwpO1xuICAgICAgaWYgKCFjb250ZW50QmFzZTY0KSB7XG4gICAgICAgIC8vIEZhbGxiYWNrOiBhZnRlciByZWxvYWQgd2UgbWF5IGhhdmUgbWV0YWRhdGEtb25seSBsb2NhbCByb3dzIHdoaWxlIGh1YiBhbHJlYWR5IGhhcyBkb2N1bWVudHMvPHNoYT4uanNvbi5cbiAgICAgICAgLy8gVHJ5IGRpcmVjdCBwdWJsaXNoIGJ5IHNoYSBpbnN0ZWFkIG9mIGZhaWxpbmcgZWFybHkgb24gbWlzc2luZyBsb2NhbCBwbGFpbnRleHQgYnl0ZXMuXG4gICAgICAgIGNvbnNvbGUud2FybignW0JSSURHRV0nLCAnTWlzc2luZyBsb2NhbCBjb250ZW50IGZvciBjcmVhdGUtYmVmb3JlLXB1Ymxpc2g7IHRyeWluZyBkaXJlY3QgcHVibGlzaCBieSBzaGE6JywgbG9naWNhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjcmVhdGVEb2MgPSB7XG4gICAgICAgICAgaWQ6IHNoYSxcbiAgICAgICAgICBzaGEyNTY6IHNoYSxcbiAgICAgICAgICBuYW1lOiBkb2MubmFtZSxcbiAgICAgICAgICBtaW1lOiBkb2MubWltZSxcbiAgICAgICAgICBzaXplOiBkb2Muc2l6ZSxcbiAgICAgICAgICBjb250ZW50QmFzZTY0XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2xhc3RQdWJsaXNoQ3JlYXRlQ29udGV4dCA9IHsgc2hhOiBTdHJpbmcoc2hhKSwgYWN0b3JJZDogU3RyaW5nKGxvZ2ljYWwpLCBzZW50QXQ6IERhdGUubm93KCkgfTtcbiAgICAgICAgdGhpcy5zZW5kQ3JlYXRlRG9jdW1lbnRSZXF1ZXN0KGNyZWF0ZURvYyk7XG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nUHVibGlzaEJ5U2hhKSB7XG4gICAgICAgICAgdGhpcy5fcGVuZGluZ1B1Ymxpc2hCeVNoYS5hZGQoc2hhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVkID0gbG9naWNhbDtcbiAgICBpZiAoZG9jICYmIGRvYy5zaGEyNTYpIHtcbiAgICAgIHJlc29sdmVkID0gZG9jLnNoYTI1NjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1zID0gdHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmIG9wdHMgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcihvcHRzLnB1cmNoYXNlUHJpY2VTYXRzKSlcbiAgICAgICAgPyBbeyBpZDogcmVzb2x2ZWQsIHB1cmNoYXNlUHJpY2VTYXRzOiBOdW1iZXIob3B0cy5wdXJjaGFzZVByaWNlU2F0cykgfV1cbiAgICAgICAgOiBbcmVzb2x2ZWRdO1xuICAgICAgY29uc3QgYmFja2VuZEtleSA9IFN0cmluZyhyZXNvbHZlZCk7XG4gICAgICBpZiAodGhpcy5fcGVuZGluZ1B1Ymxpc2hEb2N1bWVudEJhY2tlbmRJZHMpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZ1B1Ymxpc2hEb2N1bWVudEJhY2tlbmRJZHMuYWRkKGJhY2tlbmRLZXkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF5bG9hZCA9IHsgbWV0aG9kOiAnUHVibGlzaERvY3VtZW50JywgcGFyYW1zIH07XG4gICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tVmVjdG9yKFsnSlNPTkNhbGwnLCBKU09OLnN0cmluZ2lmeShwYXlsb2FkKV0pO1xuICAgICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlLnRvQnVmZmVyKCkpO1xuICAgICAgLy8gV2ViU29ja2V0IGRlbGl2ZXJ5IGNhbiBiZSBkZWxheWVkL2xvc3Q7IGZhbGxiYWNrIHRvIHNhbWUtb3JpZ2luIEhUVFAgSlNPTi1SUEMgd2hpbGUgcGVuZGluZy5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLl9wZW5kaW5nUHVibGlzaERvY3VtZW50QmFja2VuZElkcyB8fFxuICAgICAgICAgICAgIXRoaXMuX3BlbmRpbmdQdWJsaXNoRG9jdW1lbnRCYWNrZW5kSWRzLmhhcyhiYWNrZW5kS2V5KVxuICAgICAgICAgICkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICAgICAgICA/IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgaWYgKCFvcmlnaW4pIHJldHVybjtcbiAgICAgICAgICBmZXRjaChgJHtvcmlnaW59L3NlcnZpY2VzL3JwY2AsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5faHViSnNvblJwY0h0dHBIZWFkZXJzKCksXG4gICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGpzb25ycGM6ICcyLjAnLCBpZDogRGF0ZS5ub3coKSwgbWV0aG9kOiAnUHVibGlzaERvY3VtZW50JywgcGFyYW1zIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChyKSA9PiByLmpzb24oKS5jYXRjaCgoKSA9PiBudWxsKSlcbiAgICAgICAgICAgIC50aGVuKChib2R5KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghYm9keSB8fCBib2R5LnJlc3VsdCA9PSBudWxsKSByZXR1cm47XG4gICAgICAgICAgICAgIHRoaXMubWVyZ2VQdWJsaXNoRG9jdW1lbnRScGNSZXN1bHQoYm9keS5yZXN1bHQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICB9LCAzNTAwKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRoaXMuX3BlbmRpbmdQdWJsaXNoRG9jdW1lbnRCYWNrZW5kSWRzKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdQdWJsaXNoRG9jdW1lbnRCYWNrZW5kSWRzLmRlbGV0ZShTdHJpbmcocmVzb2x2ZWQpKTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIHNlbmRpbmcgUHVibGlzaERvY3VtZW50IHJlcXVlc3Q6Jywgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3B1Ymxpc2hEb2N1bWVudEZhaWxlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBkb2N1bWVudElkOiBTdHJpbmcobG9naWNhbCksXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoXykge31cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBhbiBIVExDIHB1cmNoYXNlIGludm9pY2UgZm9yIGEgcHVibGlzaGVkIGRvY3VtZW50LlxuICAgKiBXaGVuIHJlc3VsdCBhcnJpdmVzLCBCcmlkZ2UgZGlzcGF0Y2hlcyAncHVyY2hhc2VJbnZvaWNlUmVhZHknIGV2ZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBEb2N1bWVudCBpZFxuICAgKi9cbiAgc2VuZENyZWF0ZVB1cmNoYXNlSW52b2ljZVJlcXVlc3QgKGlkKSB7XG4gICAgY29uc3QgbG9naWNhbCA9IHR5cGVvZiBpZCA9PT0gJ29iamVjdCcgJiYgaWQgJiYgaWQuaWQgPyBpZC5pZCA6IGlkO1xuICAgIGlmICghbG9naWNhbCkgcmV0dXJuO1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2xvYmFsU3RhdGUgJiYgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMgJiYgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHNbbG9naWNhbF07XG4gICAgY29uc3QgYmFja2VuZElkID0gKGRvYyAmJiBkb2Muc2hhMjU2KSA/IGRvYy5zaGEyNTYgOiBsb2dpY2FsO1xuICAgIGNvbnN0IGJhY2tlbmRLZXkgPSBTdHJpbmcoYmFja2VuZElkKTtcbiAgICBpZiAoIXRoaXMuX2NhblNpZ25PdXRnb2luZygpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3B1cmNoYXNlSW52b2ljZUZhaWxlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBkb2N1bWVudElkOiBiYWNrZW5kS2V5LFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnVW5sb2NrIHlvdXIgRmFicmljIGlkZW50aXR5IOKAlCBDcmVhdGVQdXJjaGFzZUludm9pY2UgbXVzdCBiZSBTY2hub3JyLXNpZ25lZCBvbiB0aGUgd2lyZS4nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcGVuZGluZ0NyZWF0ZVB1cmNoYXNlSW52b2ljZUJhY2tlbmRJZHMpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdDcmVhdGVQdXJjaGFzZUludm9pY2VCYWNrZW5kSWRzLmFkZChiYWNrZW5kS2V5KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7IG1ldGhvZDogJ0NyZWF0ZVB1cmNoYXNlSW52b2ljZScsIHBhcmFtczogW3sgZG9jdW1lbnRJZDogYmFja2VuZElkIH1dIH07XG4gICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tVmVjdG9yKFsnSlNPTkNhbGwnLCBKU09OLnN0cmluZ2lmeShwYXlsb2FkKV0pO1xuICAgICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlLnRvQnVmZmVyKCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodGhpcy5fcGVuZGluZ0NyZWF0ZVB1cmNoYXNlSW52b2ljZUJhY2tlbmRJZHMpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0NyZWF0ZVB1cmNoYXNlSW52b2ljZUJhY2tlbmRJZHMuZGVsZXRlKGJhY2tlbmRLZXkpO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3Igc2VuZGluZyBDcmVhdGVQdXJjaGFzZUludm9pY2UgcmVxdWVzdDonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgncHVyY2hhc2VJbnZvaWNlRmFpbGVkJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IGRvY3VtZW50SWQ6IGJhY2tlbmRLZXksIG1lc3NhZ2U6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGFpbSBhbiBIVExDIHB1cmNoYXNlIGFmdGVyIHBheW1lbnQuIFJldHVybnMgZG9jdW1lbnQgd2l0aCBjb250ZW50IG9uIHN1Y2Nlc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIERvY3VtZW50IGlkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eGlkIC0gUGF5bWVudCB0cmFuc2FjdGlvbiBpZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7ZG9jdW1lbnQ/OiBPYmplY3QsIGVycm9yPzogc3RyaW5nfT59XG4gICAqL1xuICBhc3luYyBzZW5kQ2xhaW1QdXJjaGFzZVJlcXVlc3QgKGlkLCB0eGlkKSB7XG4gICAgY29uc3QgbG9naWNhbCA9IHR5cGVvZiBpZCA9PT0gJ29iamVjdCcgJiYgaWQgJiYgaWQuaWQgPyBpZC5pZCA6IGlkO1xuICAgIGlmICghbG9naWNhbCB8fCAhdHhpZCkgcmV0dXJuIHsgZXJyb3I6ICdkb2N1bWVudElkIGFuZCB0eGlkIHJlcXVpcmVkJyB9O1xuICAgIGlmICghdGhpcy5fY2FuU2lnbk91dGdvaW5nKCkpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiAnVW5sb2NrIHlvdXIgRmFicmljIGlkZW50aXR5IOKAlCBDbGFpbVB1cmNoYXNlIG11c3QgYmUgU2Nobm9yci1zaWduZWQgb24gdGhlIHdpcmUuJyB9O1xuICAgIH1cbiAgICBjb25zdCBkb2MgPSB0aGlzLmdsb2JhbFN0YXRlICYmIHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzICYmIHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW2xvZ2ljYWxdO1xuICAgIGNvbnN0IGJhY2tlbmRJZCA9IChkb2MgJiYgZG9jLnNoYTI1NikgPyBkb2Muc2hhMjU2IDogbG9naWNhbDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuX3BlbmRpbmdDbGFpbUNhbGxiYWNrcy5zZXQoYmFja2VuZElkLCB7IHJlc29sdmUgfSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0geyBtZXRob2Q6ICdDbGFpbVB1cmNoYXNlJywgcGFyYW1zOiBbeyBkb2N1bWVudElkOiBiYWNrZW5kSWQsIHR4aWQgfV0gfTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ0pTT05DYWxsJywgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCldKTtcbiAgICAgICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlLnRvQnVmZmVyKCkpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0NsYWltQ2FsbGJhY2tzLmRlbGV0ZShiYWNrZW5kSWQpO1xuICAgICAgICByZXNvbHZlKHsgZXJyb3I6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IGEgcGF5LXRvLWRpc3RyaWJ1dGUgaW52b2ljZSAoc3RlcCAxIG9mIGRpc3RyaWJ1dGUgZmxvdykuXG4gICAqIFdoZW4gcmVzdWx0IGFycml2ZXMsIEJyaWRnZSBkaXNwYXRjaGVzICdkaXN0cmlidXRlSW52b2ljZVJlYWR5JyBldmVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gRG9jdW1lbnQgaWRcbiAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAtIHsgYW1vdW50U2F0cywgZHVyYXRpb25ZZWFycz8sIGNoYWxsZW5nZUNhZGVuY2U/LCByZXNwb25zZURlYWRsaW5lPyB9XG4gICAqL1xuICBzZW5kQ3JlYXRlRGlzdHJpYnV0ZUludm9pY2VSZXF1ZXN0IChpZCwgY29uZmlnID0ge30pIHtcbiAgICBjb25zdCBsb2dpY2FsID0gdHlwZW9mIGlkID09PSAnb2JqZWN0JyAmJiBpZCAmJiBpZC5pZCA/IGlkLmlkIDogaWQ7XG4gICAgaWYgKCFsb2dpY2FsKSByZXR1cm47XG4gICAgY29uc3QgZG9jID0gdGhpcy5nbG9iYWxTdGF0ZSAmJiB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyAmJiB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1tsb2dpY2FsXTtcbiAgICBsZXQgYmFja2VuZElkID0gbG9naWNhbDtcbiAgICBpZiAoZG9jICYmIGRvYy5zaGEyNTYpIGJhY2tlbmRJZCA9IGRvYy5zaGEyNTY7XG4gICAgY29uc3QgYmFja2VuZEtleSA9IFN0cmluZyhiYWNrZW5kSWQpO1xuICAgIGlmICghdGhpcy5fY2FuU2lnbk91dGdvaW5nKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZGlzdHJpYnV0ZUludm9pY2VGYWlsZWQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgZG9jdW1lbnRJZDogYmFja2VuZEtleSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1VubG9jayB5b3VyIEZhYnJpYyBpZGVudGl0eSDigJQgQ3JlYXRlRGlzdHJpYnV0ZUludm9pY2UgbXVzdCBiZSBTY2hub3JyLXNpZ25lZCBvbiB0aGUgd2lyZS4nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcGVuZGluZ0NyZWF0ZURpc3RyaWJ1dGVJbnZvaWNlQmFja2VuZElkcykge1xuICAgICAgdGhpcy5fcGVuZGluZ0NyZWF0ZURpc3RyaWJ1dGVJbnZvaWNlQmFja2VuZElkcy5hZGQoYmFja2VuZEtleSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0geyBtZXRob2Q6ICdDcmVhdGVEaXN0cmlidXRlSW52b2ljZScsIHBhcmFtczogW3sgZG9jdW1lbnRJZDogYmFja2VuZElkLCAuLi5jb25maWcgfV0gfTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLmZyb21WZWN0b3IoWydKU09OQ2FsbCcsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXSk7XG4gICAgICB0aGlzLnNlbmRTaWduZWRNZXNzYWdlKG1lc3NhZ2UudG9CdWZmZXIoKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0aGlzLl9wZW5kaW5nQ3JlYXRlRGlzdHJpYnV0ZUludm9pY2VCYWNrZW5kSWRzKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdDcmVhdGVEaXN0cmlidXRlSW52b2ljZUJhY2tlbmRJZHMuZGVsZXRlKGJhY2tlbmRLZXkpO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3Igc2VuZGluZyBDcmVhdGVEaXN0cmlidXRlSW52b2ljZSByZXF1ZXN0OicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdkaXN0cmlidXRlSW52b2ljZUZhaWxlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBkb2N1bWVudElkOiBiYWNrZW5kS2V5LCBtZXNzYWdlOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoXykge31cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIGRpc3RyaWJ1dGUgcHJvcG9zYWwgdG8gYSBwZWVyIChvZmZlciB0byBwYXkgdGhlbSB0byBob3N0IGEgZmlsZSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwZWVyQWRkcmVzcyAtIFBlZXIgaWQgb3IgYWRkcmVzc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcG9zYWwgLSB7IGRvY3VtZW50SWQsIGFtb3VudFNhdHMsIGNvbmZpZz8sIGRvY3VtZW50PywgZG9jdW1lbnROYW1lPyB9XG4gICAqL1xuICBzZW5kU2VuZERpc3RyaWJ1dGVQcm9wb3NhbFJlcXVlc3QgKHBlZXJBZGRyZXNzLCBwcm9wb3NhbCkge1xuICAgIGlmICghcGVlckFkZHJlc3MgfHwgIXByb3Bvc2FsIHx8IHR5cGVvZiBwcm9wb3NhbCAhPT0gJ29iamVjdCcpIHJldHVybjtcbiAgICBjb25zdCBkb2N1bWVudElkID0gcHJvcG9zYWwuZG9jdW1lbnRJZDtcbiAgICBjb25zdCBhbW91bnRTYXRzID0gTnVtYmVyKHByb3Bvc2FsLmFtb3VudFNhdHMpO1xuICAgIGlmICghZG9jdW1lbnRJZCB8fCAhTnVtYmVyLmlzRmluaXRlKGFtb3VudFNhdHMpIHx8IGFtb3VudFNhdHMgPD0gMCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5fY2FuU2lnbk91dGdvaW5nKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZGlzdHJpYnV0ZVByb3Bvc2FsRmFpbGVkJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGRvY3VtZW50SWQ6IFN0cmluZyhkb2N1bWVudElkKSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1VubG9jayB5b3VyIEZhYnJpYyBpZGVudGl0eSDigJQgaG9zdGluZyBvZmZlcnMgbXVzdCBiZSBTY2hub3JyLXNpZ25lZCBvbiB0aGUgd2lyZS4nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwZWVyS2V5ID0gdHlwZW9mIHBlZXJBZGRyZXNzID09PSAnb2JqZWN0JyAmJiBwZWVyQWRkcmVzc1xuICAgICAgPyBTdHJpbmcocGVlckFkZHJlc3MuaWQgfHwgcGVlckFkZHJlc3MuYWRkcmVzcyB8fCBwZWVyQWRkcmVzcylcbiAgICAgIDogU3RyaW5nKHBlZXJBZGRyZXNzKTtcbiAgICBpZiAoIXBlZXJLZXkpIHJldHVybjtcbiAgICB0aGlzLl9wZW5kaW5nU2VuZERpc3RyaWJ1dGVQcm9wb3NhbENvbnRleHQgPSB7XG4gICAgICBiYWNrZW5kSWQ6IFN0cmluZyhkb2N1bWVudElkKSxcbiAgICAgIHBlZXJLZXksXG4gICAgICBzZW50QXQ6IERhdGUubm93KClcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0geyBtZXRob2Q6ICdTZW5kRGlzdHJpYnV0ZVByb3Bvc2FsJywgcGFyYW1zOiBbcGVlcktleSwgcHJvcG9zYWxdIH07XG4gICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tVmVjdG9yKFsnSlNPTkNhbGwnLCBKU09OLnN0cmluZ2lmeShwYXlsb2FkKV0pO1xuICAgICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlLnRvQnVmZmVyKCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLl9wZW5kaW5nU2VuZERpc3RyaWJ1dGVQcm9wb3NhbENvbnRleHQgPSBudWxsO1xuICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3Igc2VuZGluZyBTZW5kRGlzdHJpYnV0ZVByb3Bvc2FsIHJlcXVlc3Q6Jywgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Rpc3RyaWJ1dGVQcm9wb3NhbEZhaWxlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBkb2N1bWVudElkOiBTdHJpbmcoZG9jdW1lbnRJZCksXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIHRyeSB7XG4gICAgICAgIHB1c2hVaU5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgaWQ6IGBkaXN0cmlidXRlLXByb3Bvc2FsLSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICAgIGtpbmQ6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdIb3N0aW5nIG9mZmVyIG5vdCBzZW50JyxcbiAgICAgICAgICBzdWJ0aXRsZTogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgIGhyZWY6ICcvZG9jdW1lbnRzJ1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VwdCBhIGRpc3RyaWJ1dGUgcHJvcG9zYWwgKGhvc3QgZmxvdyk6IGNyZWF0ZSBpbnZvaWNlIGFuZCBzZW5kIHRvIHByb3Bvc2VyLlxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcG9zYWwgLSB7IGlkLCBkb2N1bWVudElkLCBhbW91bnRTYXRzLCBjb25maWcsIHNlbmRlckFkZHJlc3MgfVxuICAgKi9cbiAgc2VuZEFjY2VwdERpc3RyaWJ1dGVQcm9wb3NhbFJlcXVlc3QgKHByb3Bvc2FsKSB7XG4gICAgaWYgKCFwcm9wb3NhbCB8fCAhcHJvcG9zYWwuZG9jdW1lbnRJZCB8fCAhcHJvcG9zYWwuc2VuZGVyQWRkcmVzcykgcmV0dXJuO1xuICAgIGNvbnN0IGRvYyA9IHRoaXMuZ2xvYmFsU3RhdGUgJiYgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHMgJiYgdGhpcy5nbG9iYWxTdGF0ZS5kb2N1bWVudHNbcHJvcG9zYWwuZG9jdW1lbnRJZF07XG4gICAgbGV0IGJhY2tlbmRJZCA9IHByb3Bvc2FsLmRvY3VtZW50SWQ7XG4gICAgaWYgKGRvYyAmJiBkb2Muc2hhMjU2KSBiYWNrZW5kSWQgPSBkb2Muc2hhMjU2O1xuICAgIGNvbnN0IGJhY2tlbmRLZXkgPSBTdHJpbmcoYmFja2VuZElkKTtcbiAgICBjb25zdCBwcm9wb3NhbElkID0gcHJvcG9zYWwuaWQgIT0gbnVsbCA/IFN0cmluZyhwcm9wb3NhbC5pZCkgOiAnJztcbiAgICB0aGlzLl9wZW5kaW5nQWNjZXB0RGlzdHJpYnV0ZUNvbnRleHQgPSB7XG4gICAgICBiYWNrZW5kSWQ6IGJhY2tlbmRLZXksXG4gICAgICBwcm9wb3NhbElkLFxuICAgICAgc2VudEF0OiBEYXRlLm5vdygpXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgbWV0aG9kOiAnQWNjZXB0RGlzdHJpYnV0ZVByb3Bvc2FsJyxcbiAgICAgICAgcGFyYW1zOiBbe1xuICAgICAgICAgIHByb3Bvc2FsSWQ6IHByb3Bvc2FsLmlkLFxuICAgICAgICAgIGRvY3VtZW50SWQ6IGJhY2tlbmRJZCxcbiAgICAgICAgICBhbW91bnRTYXRzOiBwcm9wb3NhbC5hbW91bnRTYXRzLFxuICAgICAgICAgIGNvbmZpZzogcHJvcG9zYWwuY29uZmlnLFxuICAgICAgICAgIHNlbmRlckFkZHJlc3M6IHByb3Bvc2FsLnNlbmRlckFkZHJlc3NcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tVmVjdG9yKFsnSlNPTkNhbGwnLCBKU09OLnN0cmluZ2lmeShwYXlsb2FkKV0pO1xuICAgICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlLnRvQnVmZmVyKCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLl9wZW5kaW5nQWNjZXB0RGlzdHJpYnV0ZUNvbnRleHQgPSBudWxsO1xuICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3Igc2VuZGluZyBBY2NlcHREaXN0cmlidXRlUHJvcG9zYWwgcmVxdWVzdDonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiBwcm9wb3NhbElkKSB7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdhY2NlcHREaXN0cmlidXRlUHJvcG9zYWxGYWlsZWQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgZG9jdW1lbnRJZDogYmFja2VuZEtleSxcbiAgICAgICAgICAgICAgcHJvcG9zYWxJZCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gRXhlY3V0aW9uIGNvbnRyYWN0IChzYW5kYm94ZWQgb3Bjb2RlIHByb2dyYW0gc3RvcmVkIG9uIHRoZSBodWIpLlxuICAgKiBVc2VzIHRoZSBzYW1lIHNpZ25pbmcgcnVsZXMgYXMgb3RoZXIgSlNPTkNhbGxzOiB1bnNpZ25lZCB3aGVuIGlkZW50aXR5IGlzIHB1YmxpYy1rZXkgb25seVxuICAgKiAoZS5nLiBkZXNrdG9wIGRlbGVnYXRpb24pOyBIdWIgcG9saWN5IGFwcGxpZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgLSBgeyBuYW1lPzogc3RyaW5nLCBwcm9ncmFtOiB7IHN0ZXBzOiBbLi4uXSB9IH1gXG4gICAqL1xuICBzZW5kQ3JlYXRlRXhlY3V0aW9uQ29udHJhY3RSZXF1ZXN0IChjb25maWcgPSB7fSkge1xuICAgIGlmICghY29uZmlnLnByb2dyYW0gfHwgdHlwZW9mIGNvbmZpZy5wcm9ncmFtICE9PSAnb2JqZWN0JykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhY3RvcklkID0gdGhpcy5fZ2V0SWRlbnRpdHlJZCgpO1xuICAgICAgY29uc3QgcGF5bG9hZENvbmZpZyA9IHtcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgIHByb2dyYW06IGNvbmZpZy5wcm9ncmFtLFxuICAgICAgICBhY3RvcklkXG4gICAgICB9O1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHsgbWV0aG9kOiAnQ3JlYXRlRXhlY3V0aW9uQ29udHJhY3QnLCBwYXJhbXM6IFtwYXlsb2FkQ29uZmlnXSB9O1xuICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ0pTT05DYWxsJywgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCldKTtcbiAgICAgIHRoaXMuc2VuZFNpZ25lZE1lc3NhZ2UobWVzc2FnZS50b0J1ZmZlcigpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3Igc2VuZGluZyBDcmVhdGVFeGVjdXRpb25Db250cmFjdDonLCBzYWZlSWRlbnRpdHlFcnIoZXJyb3IpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVuIGEgcGVyc2lzdGVkIEV4ZWN1dGlvbiBjb250cmFjdCBvbiB0aGUgaHViIChyZXR1cm5zIHRyYWNlL3N0YWNrIGluIEpTT05DYWxsUmVzdWx0KS5cbiAgICogUmVhZC1oZWF2eSBwYXRoOiBzYWZlIHRvIHNlbmQgdW5zaWduZWQgZm9yIHdhdGNoLW9ubHkgY2xpZW50cyBpZiB0aGUgSHViIGFsbG93cyBpdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRyYWN0SWRcbiAgICovXG4gIHNlbmRSdW5FeGVjdXRpb25Db250cmFjdFJlcXVlc3QgKGNvbnRyYWN0SWQpIHtcbiAgICBjb25zdCBpZCA9IFN0cmluZyhjb250cmFjdElkIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFpZCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0geyBtZXRob2Q6ICdSdW5FeGVjdXRpb25Db250cmFjdCcsIHBhcmFtczogW3sgY29udHJhY3RJZDogaWQgfV0gfTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLmZyb21WZWN0b3IoWydKU09OQ2FsbCcsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXSk7XG4gICAgICB0aGlzLnNlbmRTaWduZWRNZXNzYWdlKG1lc3NhZ2UudG9CdWZmZXIoKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIHNlbmRpbmcgUnVuRXhlY3V0aW9uQ29udHJhY3Q6Jywgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgYSBsb25nLXRlcm0gc3RvcmFnZSBjb250cmFjdCBmb3IgYSBkb2N1bWVudCwgcGFpZCBpbiBCaXRjb2luIChMMSkuXG4gICAqIFdoZW4gdHhpZCBpcyBwcm92aWRlZCwgY29tcGxldGVzIHRoZSBwYXktdG8tZGlzdHJpYnV0ZSBmbG93IChzdGVwIDIpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBEb2N1bWVudCBpZCAoQWN0b3IgSUQpLlxuICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIC0gRGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gKGFtb3VudCwgZHVyYXRpb24sIGNhZGVuY2UsIGRlYWRsaW5lLCB0eGlkPykuXG4gICAqL1xuICBzZW5kRGlzdHJpYnV0ZURvY3VtZW50UmVxdWVzdCAoaWQsIGNvbmZpZyA9IHt9KSB7XG4gICAgY29uc3QgbG9naWNhbCA9IHR5cGVvZiBpZCA9PT0gJ29iamVjdCcgJiYgaWQgJiYgaWQuaWQgPyBpZC5pZCA6IGlkO1xuICAgIGlmICghbG9naWNhbCkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLl9jYW5TaWduT3V0Z29pbmcoKSkge1xuICAgICAgY29uc3QgZG9jRWFybHkgPSB0aGlzLmdsb2JhbFN0YXRlICYmIHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzICYmIHRoaXMuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzW2xvZ2ljYWxdO1xuICAgICAgY29uc3QgYmlkID0gKGRvY0Vhcmx5ICYmIGRvY0Vhcmx5LnNoYTI1NikgPyBTdHJpbmcoZG9jRWFybHkuc2hhMjU2KSA6IFN0cmluZyhsb2dpY2FsKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnc3RvcmFnZUNvbnRyYWN0Qm9uZEZhaWxlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICBkb2N1bWVudElkOiBiaWQsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdVbmxvY2sgeW91ciBGYWJyaWMgaWRlbnRpdHkg4oCUIENyZWF0ZVN0b3JhZ2VDb250cmFjdCBtdXN0IGJlIFNjaG5vcnItc2lnbmVkIG9uIHRoZSB3aXJlLidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGJhY2tlbmRJZCA9IGxvZ2ljYWw7XG4gICAgY29uc3QgZG9jID0gdGhpcy5nbG9iYWxTdGF0ZSAmJiB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50cyAmJiB0aGlzLmdsb2JhbFN0YXRlLmRvY3VtZW50c1tsb2dpY2FsXTtcbiAgICBpZiAoZG9jICYmIGRvYy5zaGEyNTYpIHtcbiAgICAgIGJhY2tlbmRJZCA9IGRvYy5zaGEyNTY7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFjdG9ySWQgPSB0aGlzLl9nZXRJZGVudGl0eUlkKCk7XG4gICAgICBjb25zdCBwYXlsb2FkQ29uZmlnID0ge1xuICAgICAgICBkb2N1bWVudElkOiBiYWNrZW5kSWQsXG4gICAgICAgIGFtb3VudFNhdHM6IGNvbmZpZy5hbW91bnRTYXRzLFxuICAgICAgICBkdXJhdGlvblllYXJzOiBjb25maWcuZHVyYXRpb25ZZWFycyxcbiAgICAgICAgY2hhbGxlbmdlQ2FkZW5jZTogY29uZmlnLmNoYWxsZW5nZUNhZGVuY2UsXG4gICAgICAgIHJlc3BvbnNlRGVhZGxpbmU6IGNvbmZpZy5yZXNwb25zZURlYWRsaW5lLFxuICAgICAgICBhY3RvcklkXG4gICAgICB9O1xuICAgICAgaWYgKGNvbmZpZy5kZXNpcmVkQ29waWVzICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgZGMgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKE51bWJlcihjb25maWcuZGVzaXJlZENvcGllcykpKTtcbiAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShkYykpIHBheWxvYWRDb25maWcuZGVzaXJlZENvcGllcyA9IGRjO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy50eGlkKSBwYXlsb2FkQ29uZmlnLnR4aWQgPSBTdHJpbmcoY29uZmlnLnR4aWQpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7IG1ldGhvZDogJ0NyZWF0ZVN0b3JhZ2VDb250cmFjdCcsIHBhcmFtczogW3BheWxvYWRDb25maWddIH07XG4gICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tVmVjdG9yKFsnSlNPTkNhbGwnLCBKU09OLnN0cmluZ2lmeShwYXlsb2FkKV0pO1xuICAgICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlLnRvQnVmZmVyKCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdFcnJvciBzZW5kaW5nIERpc3RyaWJ1dGVEb2N1bWVudCByZXF1ZXN0OicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdzdG9yYWdlQ29udHJhY3RCb25kRmFpbGVkJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGRvY3VtZW50SWQ6IFN0cmluZyhiYWNrZW5kSWQpLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBPU1QgL3NlcnZpY2VzL3JwYyB3aXRoIHBvc2l0aW9uYWwgcGFyYW1zIChzYW1lIGFzIFdlYlNvY2tldCBKU09OQ2FsbCkuXG4gICAqIHtAbGluayBCcmlkZ2UjY2FsbEh1Ykpzb25ScGN9IHdyYXBzIGEgc2luZ2xlIG9iamVjdCDigJQgbm90IHN1aXRhYmxlIGZvciBSZXF1ZXN0UGVlckludmVudG9yeS5cbiAgICogQHBhcmFtIHtBcnJheX0gcG9zaXRpb25hbFBhcmFtcyDigJQgZS5nLiBbaWRPckFkZHJlc3MsICdkb2N1bWVudHMnLCBvcHRzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7IG9rOiBib29sZWFuLCByZXN1bHQ/OiAqLCBlcnJvcj86ICogfT59XG4gICAqL1xuICBhc3luYyBfaW52b2tlSHViUnBjV2l0aEFycmF5UGFyYW1zIChtZXRob2QsIHBvc2l0aW9uYWxQYXJhbXMpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdubyB3aW5kb3cnIH07XG4gICAgY29uc3Qgb3JpZ2luID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB0aGlzLl9odWJKc29uUnBjU2VxID0gKHRoaXMuX2h1Ykpzb25ScGNTZXEgfHwgMCkgKyAxO1xuICAgIGNvbnN0IGlkID0gdGhpcy5faHViSnNvblJwY1NlcTtcbiAgICBsZXQgcmVzO1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBhd2FpdCBmZXRjaChgJHtvcmlnaW59L3NlcnZpY2VzL3JwY2AsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuX2h1Ykpzb25ScGNIdHRwSGVhZGVycygpLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgbWV0aG9kOiBTdHJpbmcobWV0aG9kIHx8ICcnKSxcbiAgICAgICAgICBwYXJhbXM6IEFycmF5LmlzQXJyYXkocG9zaXRpb25hbFBhcmFtcykgPyBwb3NpdGlvbmFsUGFyYW1zIDogW11cbiAgICAgICAgfSksXG4gICAgICAgIGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLFxuICAgICAgICBjYWNoZTogJ25vLXN0b3JlJ1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkgfTtcbiAgICB9XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlcy5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IChib2R5ICYmIChib2R5LmVycm9yIHx8IGJvZHkubWVzc2FnZSkpIHx8IGBIVFRQICR7cmVzLnN0YXR1c31gIH07XG4gICAgfVxuICAgIGlmIChib2R5ICYmIGJvZHkuZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGJvZHkuZXJyb3IubWVzc2FnZSB8fCBib2R5LmVycm9yLmRhdGEgfHwgSlNPTi5zdHJpbmdpZnkoYm9keS5lcnJvcik7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBTdHJpbmcobXNnIHx8ICdSUEMgZXJyb3InKSB9O1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYm9keSwgJ3Jlc3VsdCcpID8gYm9keS5yZXN1bHQgOiBudWxsO1xuICAgIHJldHVybiB7IG9rOiB0cnVlLCByZXN1bHQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW1lIGh1YiBoYW5kbGVyIGFzIFdTIEpTT05DYWxsLCB3aGVuIHRoZSBCcmlkZ2UgV2ViU29ja2V0IGlzIG5vdCB5ZXQgb3BlbiDigJRcbiAgICogb3RoZXJ3aXNlIHtAbGluayBCcmlkZ2Ujc2VuZE1lc3NhZ2V9IHF1ZXVlcyB0aGUgbWVzc2FnZSBhbmQgaW52ZW50b3J5IG5ldmVyIGZpcmVzIHVudGlsIGxhdGVyLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYXN5bmMgX3JlcXVlc3RQZWVySW52ZW50b3J5SHR0cEZhbGxiYWNrIChpZE9yQWRkcmVzcywga2luZCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHBhcmFtcyA9IChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAwKVxuICAgICAgPyBbaWRPckFkZHJlc3MsIGtpbmQsIG9wdGlvbnNdXG4gICAgICA6IFtpZE9yQWRkcmVzcywga2luZF07XG4gICAgY29uc3Qgb3V0ID0gYXdhaXQgdGhpcy5faW52b2tlSHViUnBjV2l0aEFycmF5UGFyYW1zKCdSZXF1ZXN0UGVlckludmVudG9yeScsIHBhcmFtcyk7XG4gICAgaWYgKCFvdXQub2spIHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzICYmIHRoaXMuc2V0dGluZ3MuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW0JSSURHRV0nLCAnUmVxdWVzdFBlZXJJbnZlbnRvcnkgSFRUUCBmYWxsYmFjazonLCBvdXQuZXJyb3IgfHwgJ2ZhaWxlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbQlJJREdFXScsICdSZXF1ZXN0UGVlckludmVudG9yeTonLCBvdXQuZXJyb3IgfHwgJ0hUVFAgZmFsbGJhY2sgZmFpbGVkJyk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2ZhYnJpYzpwZWVySW52ZW50b3J5UmVxdWVzdFJlc3VsdCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6IFN0cmluZyhvdXQuZXJyb3IgfHwgJ0hUVFAgcmVxdWVzdCBmYWlsZWQnKSB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByID0gb3V0LnJlc3VsdDtcbiAgICBpZiAociAmJiB0eXBlb2YgciA9PT0gJ29iamVjdCcgJiYgci5zdGF0dXMgPT09ICdlcnJvcicgJiYgci5tZXNzYWdlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tCUklER0VdJywgJ1JlcXVlc3RQZWVySW52ZW50b3J5OicsIFN0cmluZyhyLm1lc3NhZ2UpKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2ZhYnJpYzpwZWVySW52ZW50b3J5UmVxdWVzdFJlc3VsdCcsIHtcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIC4uLihyICYmIHR5cGVvZiByID09PSAnb2JqZWN0JyA/IHIgOiB7fSksXG4gICAgICAgICAgICB2aWE6ICdodHRwJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHt9XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBhIHBlZXIncyBpbnZlbnRvcnkgKGUuZy4sIGxpc3Qgb2YgZG9jdW1lbnRzKSB2aWEgdGhlIGh1YiBKU09OLVJQQy5cbiAgICogQHBhcmFtIHtzdHJpbmd8e2lkLGFkZHJlc3N9fSBpZE9yQWRkcmVzcyAtIERpcmVjdCBGYWJyaWMgY29ubmVjdGlvbiAobmV4dCBob3ApOyB1c2Ugd2l0aCBgb3B0aW9ucy5pbnZlbnRvcnlUYXJnZXRgIHdoZW4gdGhhdCBob3AgaXMgYSByZWxheS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtpbmQgLSBJbnZlbnRvcnkga2luZCwgZGVmYXVsdHMgdG8gJ2RvY3VtZW50cycuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBPcHRpb25hbCBgeyBidXllclJlZnVuZFB1YmxpY0tleSwgaHRsY0xvY2t0aW1lQmxvY2tzPywgaHRsY0Ftb3VudFNhdHM/LCBpbnZlbnRvcnlUYXJnZXQ/LCBpbnZlbnRvcnlSZWxheVR0bD8gfWAuXG4gICAqICAgYGludmVudG9yeVRhcmdldGAgPSBzZWxsZXLigJlzIEZhYnJpYyBpZCB3aGVuIGBpZE9yQWRkcmVzc2AgaXMgb25seSB0aGUgcmVsYXkuIGBpbnZlbnRvcnlSZWxheVR0bGAgY2FwcyByZWxheSBob3BzIChkZWZhdWx0IDYsIG1heCAxNikuXG4gICAqL1xuICBzZW5kUGVlckludmVudG9yeVJlcXVlc3QgKGlkT3JBZGRyZXNzLCBraW5kID0gJ2RvY3VtZW50cycsIG9wdGlvbnMgPSB7fSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMClcbiAgICAgICAgPyBbaWRPckFkZHJlc3MsIGtpbmQsIG9wdGlvbnNdXG4gICAgICAgIDogW2lkT3JBZGRyZXNzLCBraW5kXTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7IG1ldGhvZDogJ1JlcXVlc3RQZWVySW52ZW50b3J5JywgcGFyYW1zIH07XG4gICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tVmVjdG9yKFsnSlNPTkNhbGwnLCBKU09OLnN0cmluZ2lmeShwYXlsb2FkKV0pO1xuICAgICAgY29uc3Qgd3NSZWFkeSA9IHRoaXMuX2lzQ29ubmVjdGVkICYmIHRoaXMud3MgJiYgdGhpcy53cy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTjtcbiAgICAgIGlmICghd3NSZWFkeSkge1xuICAgICAgICB2b2lkIHRoaXMuX3JlcXVlc3RQZWVySW52ZW50b3J5SHR0cEZhbGxiYWNrKGlkT3JBZGRyZXNzLCBraW5kIHx8ICdkb2N1bWVudHMnLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZW5kU2lnbmVkTWVzc2FnZShtZXNzYWdlLnRvQnVmZmVyKCkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdmYWJyaWM6cGVlckludmVudG9yeVJlcXVlc3RSZXN1bHQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc3RhdHVzOiAnc3VjY2VzcycsIHZpYTogJ3dzJyB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7fVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQlJJREdFXScsICdFcnJvciBzZW5kaW5nIFJlcXVlc3RQZWVySW52ZW50b3J5OicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBmdW5kaW5nIGFuIGludmVudG9yeSBIVExDIFAyVFIgb3V0cHV0LCBjb25maXJtIHdpdGggdGhlIHNlbGxlciBodWIgdG8gc3RhcnQgcGhhc2UgMiAoZG9jdW1lbnQgdHJhbnNmZXIpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2V0dGxlbWVudElkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eGlkXG4gICAqL1xuICBzZW5kQ29uZmlybUludmVudG9yeUh0bGNQYXltZW50IChzZXR0bGVtZW50SWQsIHR4aWQpIHtcbiAgICBjb25zdCBzaWQgPSBTdHJpbmcoc2V0dGxlbWVudElkIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgdHggPSBTdHJpbmcodHhpZCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghc2lkIHx8ICF0eCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0geyBtZXRob2Q6ICdDb25maXJtSW52ZW50b3J5SHRsY1BheW1lbnQnLCBwYXJhbXM6IFt7IHNldHRsZW1lbnRJZDogc2lkLCB0eGlkOiB0eCB9XSB9O1xuICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbVZlY3RvcihbJ0pTT05DYWxsJywgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCldKTtcbiAgICAgIHRoaXMuc2VuZFNpZ25lZE1lc3NhZ2UobWVzc2FnZS50b0J1ZmZlcigpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0JSSURHRV0nLCAnRXJyb3Igc2VuZGluZyBDb25maXJtSW52ZW50b3J5SHRsY1BheW1lbnQ6Jywgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBmaWxlIHRvIGEgcGVlci4gRG9jdW1lbnQgbXVzdCBoYXZlIGNvbnRlbnRCYXNlNjQgKGZyb20gbG9jYWwgb3IgZmV0Y2hlZCkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfHtpZCxhZGRyZXNzfX0gaWRPckFkZHJlc3MgLSBQZWVyIGlkIG9yIGFkZHJlc3NcbiAgICogQHBhcmFtIHtPYmplY3R9IGRvYyAtIHsgaWQsIG5hbWUsIG1pbWUsIHNpemUsIHNoYTI1Nj8sIGNvbnRlbnRCYXNlNjQgfVxuICAgKi9cbiAgc2VuZFNlbmRQZWVyRmlsZVJlcXVlc3QgKGlkT3JBZGRyZXNzLCBkb2MpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHR5cGVvZiBpZE9yQWRkcmVzcyA9PT0gJ29iamVjdCcgJiYgaWRPckFkZHJlc3MgPyAoaWRPckFkZHJlc3MuaWQgfHwgaWRPckFkZHJlc3MuYWRkcmVzcykgOiBpZE9yQWRkcmVzcztcbiAgICBpZiAoIXJlc29sdmVkIHx8ICFkb2MgfHwgdHlwZW9mIGRvYyAhPT0gJ29iamVjdCcpIHJldHVybjtcbiAgICBjb25zdCBjb250ZW50QmFzZTY0ID0gZG9jLmNvbnRlbnRCYXNlNjQgfHwgKGRvYy5pZCA/IHRoaXMuZ2V0RGVjcnlwdGVkRG9jdW1lbnRDb250ZW50KGRvYy5pZCkgOiBudWxsKTtcbiAgICBpZiAoIWNvbnRlbnRCYXNlNjQpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZERvYyA9IHsgLi4uZG9jLCBjb250ZW50QmFzZTY0IH07XG4gICAgICBjb25zdCBwYXlsb2FkID0geyBtZXRob2Q6ICdTZW5kUGVlckZpbGUnLCBwYXJhbXM6IFtyZXNvbHZlZCwgcGF5bG9hZERvY10gfTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBNZXNzYWdlLmZyb21WZWN0b3IoWydKU09OQ2FsbCcsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXSk7XG4gICAgICB0aGlzLnNlbmRTaWduZWRNZXNzYWdlKG1lc3NhZ2UudG9CdWZmZXIoKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tCUklER0VdJywgJ0Vycm9yIHNlbmRpbmcgU2VuZFBlZXJGaWxlIHJlcXVlc3Q6Jywgc2FmZUlkZW50aXR5RXJyKGVycm9yKSk7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQnJpZGdlO1xuIl0sIm5hbWVzIjpbIl90b0NvbnN1bWFibGVBcnJheSIsInIiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiVHlwZUVycm9yIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImZyb20iLCJpc0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfc2xpY2VkVG9BcnJheSIsImUiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfbm9uSXRlcmFibGVSZXN0IiwibCIsInQiLCJuIiwiaSIsInUiLCJhIiwiZiIsIm8iLCJjYWxsIiwibmV4dCIsIk9iamVjdCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJsZW5ndGgiLCJfcmVnZW5lcmF0b3IiLCJ0b1N0cmluZ1RhZyIsImMiLCJwcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwicCIsInkiLCJHIiwidiIsImQiLCJiaW5kIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfbiIsIkYiLCJzIiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9vYmplY3RTcHJlYWQiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJfdHlwZW9mIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJfaW5oZXJpdHMiLCJfc2V0UHJvdG90eXBlT2YiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIlJlYWN0IiwicmVxdWlyZSIsIldlYlNvY2tldCIsIl9yZXF1aXJlIiwiYXBwbHlQYXRjaCIsIkFjdG9yIiwiX3JlcXVpcmUyIiwiTGFiZWwiLCJNZXNzYWdlIiwiS2V5IiwiX3JlcXVpcmUzIiwiUDJQX1BFRVJfR09TU0lQIiwiUDJQX1BFRVJJTkdfT0ZGRVIiLCJQMlBfQ0hBVF9NRVNTQUdFIiwiUDJQX1BFRVJfQUxJQVMiLCJQMlBfRklMRV9TRU5EIiwiTUFHSUNfQllURVMiLCJmYWJyaWNCcmlkZ2VFbnZlbG9wZSIsIl9yZXF1aXJlNCIsInB1c2hVaU5vdGlmaWNhdGlvbiIsIl9yZXF1aXJlNSIsImxvYWRIdWJVaUZlYXR1cmVGbGFncyIsIl9yZXF1aXJlNiIsImlzRG9jdW1lbnRJbnZlbnRvcnlEb2N1bWVudHNPZmZlclJlc3BvbnNlIiwiaXNEb2N1bWVudEludmVudG9yeVJlc3BvbnNlVHlwZSIsIl9yZXF1aXJlNyIsImZvcm1hdFNhdHNEaXNwbGF5IiwiX3JlcXVpcmU4IiwidG9hc3QiLCJfcmVxdWlyZTkiLCJERUxFR0FUSU9OX1NJR05BVFVSRV9SRVFVRVNUIiwiaXNEZWxlZ2F0aW9uU2lnbmF0dXJlUmVxdWVzdEFjdGl2aXR5IiwiRE9DVU1FTlRfT0ZGRVIiLCJfcmVxdWlyZTAiLCJwYXJzZUZlZGVyYXRpb25Db250cmFjdEludml0ZSIsInBhcnNlRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlUmVzcG9uc2UiLCJfcmVxdWlyZTEiLCJleHRyYWN0UGVlclhwdWIiLCJzaG9ydGVuUHVibGljSWQiLCJub3JtYWxpemVQZWVyQWRkcmVzc0lucHV0IiwiX3JlcXVpcmUxMCIsImlzTGlrZWx5QmlwMzJFeHRlbmRlZEtleSIsIl9yZXF1aXJlMTEiLCJERUxFR0FUSU9OX1NUT1JBR0VfS0VZIiwiX3JlcXVpcmUxMiIsImlzSHViTmV0d29ya1N0YXR1c1NoYXBlIiwiX3JlcXVpcmUxMyIsIm5lZWRzQ3JlYXRlRG9jdW1lbnRCZWZvcmVQdWJsaXNoIiwibWVyZ2VQdWJsaXNoZWREb2N1bWVudHNGcm9tSHViU3RhdHVzIiwiX3JlcXVpcmUxNCIsInNhZmVJZGVudGl0eUVyciIsInNhZmVEZWJ1Z1N0YXRlUHJldmlldyIsInNhZmVVcmxGb3JMb2ciLCJfcmVxdWlyZTE1IiwiZmFicmljSWRlbnRpdHlDaGF0RGlzYWJsZWRSZWFzb25QbGFpbiIsImZhYnJpY0lkZW50aXR5UGVlckRpc2FibGVkUmVhc29uUGxhaW4iLCJfcmVxdWlyZTE2IiwiZmFicmljQnJvd3NlclN0YXRlU3RvcmUiLCJzdG9yZSIsInJlYWRTdG9yYWdlSlNPTiIsIkJyaWRnZU1lc3NhZ2VDb2xsZWN0aW9uIiwiX3JlcXVpcmUxNyIsIkhVQl9GQUJSSUNfU0VTU0lPTl9JRCIsIlNFU1NJT05fS0lORF9IVUIiLCJTRVNTSU9OX0tJTkRfV0VCUlRDIiwiZmFicmljV2lyZUJvZHlJbnRlZ3JpdHlPayIsIkZBQlJJQ19XSVJFX0hFQURFUl9TSVpFIiwiSEVBREVSX1NJWkUiLCJCUklER0VfSU5CT1VORF9XSVJFX01BWF9CWVRFUyIsIkZhYnJpY1RyYW5zcG9ydFNlc3Npb24iLCJfcmVxdWlyZTE4IiwiY2hhdFRleHRPZiIsIm5vcm1hbGl6ZVAycENoYXRNZXNzYWdlIiwiQ09MTEFCX0lOVklURV9QUkVGSVgiLCJmYWJyaWNEZWJ1Z0Rlc2NyaWJlUGF5bG9hZCIsImRhdGEiLCJraW5kIiwiQXJyYXlCdWZmZXIiLCJieXRlTGVuZ3RoIiwiaXNWaWV3IiwiQnVmZmVyIiwiaXNCdWZmZXIiLCJCbG9iIiwic2l6ZSIsImhhc093blByb3BlcnR5IiwidHlwZSIsImRhdGFTdHJpbmdMZW5ndGgiLCJkYXRhQnl0ZUxlbmd0aCIsIkJyaWRnZSIsIl9SZWFjdCRDb21wb25lbnQiLCJwcm9wcyIsIl90aGlzIiwibmV3UGF0aCIsIndpbmRvdyIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJzdGF0ZSIsImN1cnJlbnRQYXRoIiwidW5zdWJzY3JpYmUiLCJzZXRTdGF0ZSIsInN1YnNjcmliZSIsInNldHRpbmdzIiwiYXNzaWduIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInByb3RvY29sIiwic2VjdXJlIiwiZGVidWciLCJ0aWNrcmF0ZSIsInNpZ25pbmdLZXkiLCJhdXRoIiwibWF4V2VicnRjUGVlcnMiLCJ3ZWJydGNQZWVyRGlzY292ZXJ5RGVsYXkiLCJ3ZWJydGNIZWFydGJlYXRJbnRlcnZhbE1zIiwid2VicnRjRGlzY292ZXJ5SW50ZXJ2YWxNcyIsIndlYnJ0Y0dvc3NpcEludGVydmFsTXMiLCJ3ZWJydGNQZWVyaW5nT2ZmZXJJbnRlcnZhbE1zIiwid2VicnRjQ29ubmVjdFRpbWVvdXRNcyIsIndlYnJ0Y0NhbmRpZGF0ZU1heEFnZU1zIiwiaHViQWRkcmVzcyIsInRyaW0iLCJfYXBwbHlIdWJBZGRyZXNzU3RyaW5nIiwiZXJyb3IiLCJuZXR3b3JrU3RhdHVzIiwibGFzdE5ldHdvcmtTdGF0dXMiLCJzdWJzY3JpcHRpb25zIiwiU2V0IiwiaXNDb25uZWN0ZWQiLCJ3ZWJydGNDb25uZWN0ZWQiLCJnbG9iYWxTdGF0ZSIsImNvbnZlcnNhdGlvbnMiLCJtZXNzYWdlcyIsImRvY3VtZW50cyIsImRpc3RyaWJ1dGVQcm9wb3NhbHMiLCJwZWVyVG9wb2xvZ3lHb3NzaXAiLCJieVJlcG9ydGVyIiwiX2ZhYnJpY1N0b3JlIiwicmVzdG9yZWRVbmlmaWVkIiwiR0VUIiwiYXR0ZW1wdHMiLCJtZXNzYWdlUXVldWUiLCJ3ZWJydGNNZXNzYWdlUXVldWUiLCJwZWVyTWVzc2FnZVF1ZXVlIiwiY2hhdFN1Ym1pc3Npb25RdWV1ZSIsInBlbmRpbmdIdWJDaGF0UXVldWUiLCJfcGVuZGluZ0NsYWltQ2FsbGJhY2tzIiwiTWFwIiwiX3BlbmRpbmdDcmVhdGVQdXJjaGFzZUludm9pY2VCYWNrZW5kSWRzIiwiX3BlbmRpbmdDcmVhdGVEaXN0cmlidXRlSW52b2ljZUJhY2tlbmRJZHMiLCJxdWV1ZSIsIndzIiwiX2hlYXJ0YmVhdCIsIl9pc0Nvbm5lY3RlZCIsImRpc2FibGVGYWJyaWNQMlAiLCJkaXNhYmxlSHViQ2hhdCIsInByZWZlcldlYlJUQ0NoYXQiLCJwZWVySWQiLCJ3ZWJydGNQZWVycyIsIl93ZWJydGNDb25uZWN0ZWQiLCJfd2VicnRjUmVhZHkiLCJfcGVlckRpc2NvdmVyeVRpbWVyIiwiX2Nvbm5lY3RpbmdQZWVycyIsIl9wZW5kaW5nUGVlckNhbmRpZGF0ZXMiLCJfbGFzdFdlYlJUQ1B1Ymxpc2hBdCIsIl9sYXN0V2ViUlRDRGlzY292ZXJBdCIsIl9sYXN0V2ViUlRDR29zc2lwQXQiLCJfbGFzdFBlZXJpbmdPZmZlckF0IiwiX2pzb25ScGNRdWV1ZSIsIl9odWJKc29uUnBjU2VxIiwiX3J0Y1BlZXJzIiwiX3J0Y1BlbmRpbmdJY2UiLCJfd2VicnRjQ29ubmVjdFRpbWVycyIsIl9ydGNTZXNzaW9uQ291bnRlciIsIl9sYXN0V2ViUlRDQ2hhdERlbGl2ZXJ5Q291bnQiLCJfbGFzdFdlYlJUQ0NoYXRTZW50QXQiLCJfbGFzdFdlYlJUQ1JlY2lwaWVudFBlZXJJZHMiLCJfbGFzdElkZW50aXR5VW5sb2NrVWlOb3RpZnlBdCIsIl9mYWJyaWNUcmFuc3BvcnRTZXNzaW9ucyIsIl9mYWJyaWNIdWJSZWNvbm5lY3RTdXNwZW5kZWQiLCJfcGVlckxpc3RVaVJlZnJlc2hUaW1lciIsIl93YWxsZXRCYWxhbmNlQmFzZWxpbmUiLCJfbGFzdFdhbGxldEJhbGFuY2VUb3RhbCIsIl9sYXN0V2FsbGV0Q29uZmlybWVkU2F0cyIsIl9sYXN0V2FsbGV0VW5jb25maXJtZWRTYXRzIiwiX2wxSW52b2ljZUFjdGl2aXR5S2V5cyIsIl9vbkNsaWVudEJhbGFuY2VVcGRhdGUiLCJfcGVuZGluZ1B1Ymxpc2hEb2N1bWVudEJhY2tlbmRJZHMiLCJfbGFzdFB1Ymxpc2hDcmVhdGVDb250ZXh0IiwiX3BlbmRpbmdBY2NlcHREaXN0cmlidXRlQ29udGV4dCIsIl9wZW5kaW5nU2VuZERpc3RyaWJ1dGVQcm9wb3NhbENvbnRleHQiLCJfcGVuZGluZ1B1Ymxpc2hCeVNoYSIsIl9wMnBGaWxlUmVjZWl2ZXJzIiwicmVzdG9yZWRQZWVyUXVldWUiLCJfcmVhZEpTT05Gcm9tU3RvcmFnZSIsInVuaWZpZWRNZXNzYWdlcyIsInJlc3RvcmVkTGVnYWN5TWVzc2FnZXMiLCJsZWdhY3lNZXNzYWdlcyIsIm1lcmdlZENoYXQiLCJfbWVzc2FnZUNvbGxlY3Rpb24iLCJleHBvcnRNYXAiLCJkb2NzIiwicmVzdG9yZWREb2NzIiwibGVnYWN5RG9jcyIsIl9yZW1vdmVTdG9yYWdlS2V5IiwicmVzdG9yZWRQcm9wb3NhbHMiLCJfcGVyc2lzdEdsb2JhbFN0YXRlIiwiZ2V0IiwiYXV0aG9yaXR5IiwiY29uY2F0IiwiX3RoaXMyIiwicGVlcnMiLCJ2YWx1ZXMiLCJtYXAiLCJpZCIsInNlc3MiLCJzdGF0dXMiLCJkaXJlY3Rpb24iLCJjb25uZWN0ZWRBdCIsImxhc3RTZWVuIiwic2NvcmUiLCJtaXNiZWhhdmlvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwiX2xvb3AiLCJmaW5kIiwiZXJyIiwiY29ubmVjdGVkIiwiZ2V0V2ViUlRDUGVlckNvdW50IiwiY29ubmVjdGluZyIsIm1heFBlZXJzIiwicmVhZHkiLCJzbG90c0F2YWlsYWJsZSIsIk1hdGgiLCJtYXgiLCJjb25uZWN0ZWRQZWVySWRzIiwicGVlciIsImxhc3REZWxpdmVyZWRUbyIsImlzRmluaXRlIiwibGFzdFNlbnRBdCIsImxhc3RSZWNpcGllbnRQZWVySWRzIiwic2V0V2ViUlRDQ2hhdE9ubHkiLCJlbmFibGVkIiwiZmxhZyIsInNlbmRXZWJSVENTaWduYWwiLCJ0b1BlZXJJZCIsInNpZ25hbCIsIl9zZW5kSlNPTlJQQyIsIm1ldGhvZCIsInBhcmFtcyIsImZyb21QZWVySWQiLCJfaHViUmVwb3J0V2ViUlRDUGVlckNvbm5lY3RlZCIsInJlbW90ZVBlZXJJZCIsInNlbGZQZWVySWQiLCJfIiwiX2h1YlJlcG9ydFdlYlJUQ1BlZXJEaXNjb25uZWN0ZWQiLCJfbmV3UlRDU2Vzc2lvbklkIiwiRGF0ZSIsIm5vdyIsIl9uZXh0UlRDU2lnbmFsUmV2aXNpb24iLCJlbnRyeSIsImxvY2FsU2lnbmFsUmV2aXNpb24iLCJfd2l0aFJUQ1NpZ25hbE1ldGEiLCJvdmVycmlkZXMiLCJ1bmRlZmluZWQiLCJleGlzdGluZyIsIl9mYWJyaWMiLCJyZXZpc2lvbiIsInNlc3Npb25JZCIsImxvY2FsU2Vzc2lvbklkIiwidGFyZ2V0U2Vzc2lvbklkIiwicmVtb3RlU2Vzc2lvbklkIiwiX2dldFJUQ1NpZ25hbE1ldGEiLCJtZXRhIiwiX2NyZWF0ZVJUQ1BlZXJDb25uZWN0aW9uIiwiX3RoaXMzIiwiY29uZmlnIiwiaWNlU2VydmVycyIsInVybHMiLCJwYyIsIlJUQ1BlZXJDb25uZWN0aW9uIiwib25pY2VjYW5kaWRhdGUiLCJldiIsImNhbmRpZGF0ZSIsInRvSlNPTiIsIm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiY29uc29sZSIsImNvbm5lY3Rpb25TdGF0ZSIsImRpc2Nvbm5lY3RXZWJSVENQZWVyIiwib25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UiLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJfYXR0YWNoRGF0YUNoYW5uZWxIYW5kbGVycyIsImRjIiwiX3RoaXM0Iiwib25vcGVuIiwic2V0IiwiaW5pdGlhdG9yIiwiY29ubmVjdGlvbiIsImhhcyIsImNsZWFyVGltZW91dCIsIl93ZWJydGNSZXdhcmRQZWVyIiwic2V0VGltZW91dCIsIl9zZW5kV2ViUlRDUGVlckdvc3NpcCIsIm9ubWVzc2FnZSIsImhhbmRsZVdlYlJUQ1BlZXJNZXNzYWdlIiwib25jbG9zZSIsIm9uZXJyb3IiLCJoYW5kbGVJbmNvbWluZ1dlYlJUQ1NpZ25hbCIsIl90aGlzNSIsIm1ldGFkYXRhIiwibWFraW5nT2ZmZXIiLCJpZ25vcmVPZmZlciIsInJlbW90ZVNpZ25hbFJldmlzaW9uIiwicG9saXRlIiwib25kYXRhY2hhbm5lbCIsImNoYW5uZWwiLCJfZW50cnkiLCJzaWduYWxRdWV1ZSIsIl9jYWxsZWUiLCJvZmZlckRlc2NyaXB0aW9uIiwib2ZmZXJDb2xsaXNpb24iLCJhbnN3ZXIiLCJhbnN3ZXJTaWduYWwiLCJxdWV1ZWQiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiY2FuZCIsImNhbmRJbml0IiwiX2NvbnRleHQiLCJzZHAiLCJSVENTZXNzaW9uRGVzY3JpcHRpb24iLCJjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24iLCJzaWduYWxpbmdTdGF0ZSIsImFsbCIsInNldExvY2FsRGVzY3JpcHRpb24iLCJzZXRSZW1vdGVEZXNjcmlwdGlvbiIsImNyZWF0ZUFuc3dlciIsImxvY2FsRGVzY3JpcHRpb24iLCJhZGRJY2VDYW5kaWRhdGUiLCJSVENJY2VDYW5kaWRhdGUiLCJyZW1vdGVEZXNjcmlwdGlvbiIsIm1zZyIsIm1lc3NhZ2UiLCJpbmNsdWRlcyIsIl9oYW5kbGVXZWJSVENTaWduYWxSZXN1bHQiLCJyZXN1bHQiLCJnZXRQZWVyRGlzcGxheU5hbWUiLCJhY3RvcklkIiwiX3RoaXMkc3RhdGUiLCJfdGhpcyRzdGF0ZTIiLCJfcGVlckFsaWFzQnlJZCIsIm1lc2hBbGlhcyIsIm5zIiwiYWRkcmVzcyIsIm1lc2hGcm9tUGVlciIsImFsaWFzIiwibmlja25hbWUiLCJ4RnJvbUZhYnJpYyIsIndydGMiLCJmYWJyaWNQZWVySWQiLCJ3eCIsInhwdWIiLCJnZXROb2RlUHVia2V5IiwiX3RoaXMkc3RhdGUzIiwiX3RoaXMkc3RhdGU0IiwibmV0d29yayIsInB1YmtleSIsImdldEdsb2JhbFN0YXRlIiwidXBkYXRlR2xvYmFsU3RhdGUiLCJwYXRjaE1lc3NhZ2UiLCJQQVRDSCIsImpzb25QYXRjaCIsIm5ld0RvY3VtZW50IiwicGF0aCIsInN0YXJ0c1dpdGgiLCJfcGVyc2lzdE1lc3NhZ2VzIiwiX3BlcnNpc3REb2N1bWVudHMiLCJldmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwib3BlcmF0aW9uIiwiZGlzcGF0Y2hFdmVudCIsInByZXYiLCJtZXJnZSIsInByZXZCdGMiLCJiaXRjb2luIiwiX2hhc0xvY2FsU3RvcmFnZSIsImxvY2FsU3RvcmFnZSIsImZhbGxiYWNrIiwicmF3IiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsIndhcm4iLCJfd3JpdGVKU09OVG9TdG9yYWdlIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsInJlbW92ZUl0ZW0iLCJQVVQiLCJiYXNlIiwicGVyc2lzdCIsIl9wYXJzZURpc3RyaWJ1dGVQcm9wb3NhbCIsImNvbnRlbnQiLCJjaGF0RW52ZWxvcGUiLCJfcGFyc2VkJGRvY3VtZW50IiwiX3BhcnNlZCRkb2N1bWVudDIiLCJwYXJzZWQiLCJkb2N1bWVudElkIiwiZG9jdW1lbnQiLCJzaGEyNTYiLCJhbW91bnRTYXRzIiwic2VuZGVyQWRkcmVzcyIsImFjdG9yIiwiY3JlYXRlZCIsIm9iamVjdCIsImRvY3VtZW50TmFtZSIsInJlY2VpdmVkQXQiLCJfc3RvcmVEaXN0cmlidXRlUHJvcG9zYWwiLCJwcm9wb3NhbCIsIm9wIiwiX3BhcnNlSHRsY0tleVJldmVhbCIsInRyaW1tZWQiLCJwcmVpbWFnZUhleCIsInJlcGxhY2UiLCJzZXR0bGVtZW50SWQiLCJ0b0xvd2VyQ2FzZSIsInBheW1lbnRIYXNoSGV4IiwiX2hhbmRsZUh0bGNLZXlSZXZlYWwiLCJfdGhpczYiLCJyZXZlYWwiLCJ0YXJnZXRJZCIsImh0bGNQZW5kaW5nRGVjcnlwdCIsImFsdCIsImsiLCJydW4iLCJfcmVmMiIsIl9jYWxsZWUyIiwiX3QiLCJfY29udGV4dDIiLCJ1bmxvY2tIdGxjRW5jcnlwdGVkRG9jdW1lbnQiLCJvayIsInRyeVVubG9jayIsIl9yZWYzIiwiX2NhbGxlZTQiLCJkb2MiLCJfY29udGV4dDQiLCJfY2FsbGVlMyIsImFnYWluIiwiX2NvbnRleHQzIiwiX3RyeURpc3BhdGNoRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlRnJvbUNoYXQiLCJpbnYiLCJyZXMiLCJfdHJ5RGlzcGF0Y2hDb2xsYWJvcmF0aW9uSW52aXRlRnJvbUNoYXQiLCJwYXlsb2FkIiwiaW52aXRhdGlvbklkIiwiYWNjZXB0VXJsIiwiZGVjbGluZVVybCIsInBlZXJJZGVudGl0eSIsInJlY2lwaWVudFBlZXJJZGVudGl0eSIsImluZm8iLCJoZWFkZXIiLCJ0aXRsZSIsInN1YnRpdGxlIiwiaHJlZiIsImNvcHlUZXh0IiwiX2dldERvY3VtZW50S2V5IiwiZW5jcnlwdCIsImRlY3J5cHQiLCJoYXNEb2N1bWVudEVuY3J5cHRpb25LZXkiLCJfZW5jcnlwdENvbnRlbnQiLCJjb250ZW50QmFzZTY0IiwiX2RlY3J5cHRDb250ZW50IiwiY29udGVudEVuY3J5cHRlZCIsIl9nZXRJZGVudGl0eUtleSIsIl9nZXRJZGVudGl0eUlkIiwiX2hhc1VubG9ja2VkSWRlbnRpdHkiLCJ4cHJ2IiwiaGFzVW5sb2NrZWRJZGVudGl0eSIsIl9ub3RpZnlJZGVudGl0eVVubG9ja1JlcXVpcmVkIiwicmVzb2x2ZWQiLCJyZWFzb24iLCJvblJlcXVpcmVVbmxvY2siLCJfcmVzb2x2ZURvY3VtZW50Um93IiwibG9naWNhbElkIiwibG93ZXIiLCJfaSIsIl9PYmplY3QkZW50cmllcyIsImVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJkaWQiLCJzaGEiLCJnZXREZWNyeXB0ZWREb2N1bWVudENvbnRlbnQiLCJyb3ciLCJkZWNyeXB0ZWQiLCJfc3RvcmVEb2N1bWVudCIsIl9pMiIsIl9PYmplY3QkZW50cmllczIiLCJfT2JqZWN0JGVudHJpZXMyJF9pIiwibG9jYWxJZCIsImV4aXN0aW5nRG9jIiwibWVyZ2VkIiwiaGFzQ29udGVudCIsImVuY3J5cHRlZCIsInRvU3RvcmUiLCJfcHJ1bmVQMnBGaWxlUmVjZWl2ZXJzIiwiVFRMIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIl9zdGVwMyR2YWx1ZSIsInN0YXJ0ZWRBdCIsIl9yZXNvbHZlRG9jdW1lbnRUYXJnZXRJZCIsInJhd0lkIiwiX2kzIiwiX09iamVjdCRlbnRyaWVzMyIsIl9PYmplY3QkZW50cmllczMkX2kiLCJfZGVjb2RlQmFzZTY0VG9VaW50OCIsImI2NCIsImJpbiIsImF0b2IiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIl91aW50OFRvQmFzZTY0IiwidTgiLCJmcm9tQ2hhckNvZGUiLCJidG9hIiwiX2J5dGVzVG9IZXgiLCJidWYiLCJoIiwiX2hleFRvVWludDgiLCJoZXgiLCJwYXJzZUludCIsIl9oYW5kbGVQMnBGaWxlQ2h1bmsiLCJwYXJ0IiwiX3RoaXM3IiwidHJhbnNmZXJJZCIsImluZGV4IiwidG90YWwiLCJjaHVua3MiLCJyZWNlaXZlZCIsImh0bGNGaWxlVjEiLCJtaW1lIiwidGFyZ2V0IiwiaHRsY1NldHRsZW1lbnQiLCJkZWxpdmVyeUZhYnJpY0lkIiwiZmlsZVJlbGF5VHRsIiwiaXYiLCJwaWVjZXMiLCJsZW4iLCJyZWR1Y2UiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwiaHRsY1BheW1lbnRIYXNoSGV4IiwiaHRsY0l2QmFzZTY0IiwiaHRsY0NpcGhlcnRleHRCYXNlNjQiLCJyZWNlaXZlZEZyb21QZWVyIiwiX3VubG9ja0h0bGNFbmNyeXB0ZWREb2N1bWVudCIsIl9jYWxsZWU1IiwicHJlaW1hZ2VVOCIsImhhc2hCdWYiLCJoYXNoSGV4IiwiZXhwZWN0ZWQiLCJjdCIsInBsYWluIiwiY2xlYW5lZCIsIl90MiIsIl90MyIsIl9jb250ZXh0NSIsImNyeXB0byIsInN1YnRsZSIsImRpZ2VzdCIsImltcG9ydEtleSIsInRhZ0xlbmd0aCIsIl94IiwiX3gyIiwiZmlsdGVyZWQiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwiZnJvbUVudHJpZXMiLCJzb3J0IiwiYiIsInRhIiwidGIiLCJsb2FkTWFwIiwid2FsbGV0SWQiLCJiYWxhbmNlU2F0cyIsInJvdW5kIiwiY29uZmlybWVkUmF3IiwiY29uZmlybWVkU2F0cyIsInVuY29uZmlybWVkUmF3IiwidW5jb25maXJtZWRTYXRzIiwiaGFzU3BsaXQiLCJjb25mIiwidW5jb25mIiwiY29uZlNhZmUiLCJ1bmNvbmZTYWZlIiwiaGludCIsImhpbnRUeGlkIiwiYWRkIiwicHJldlRvdGFsIiwicHJldkMiLCJwcmV2VSIsImRVbmNvbmYiLCJkQ29uZiIsIl9hcHBlbmRQcml2YXRlV2FsbGV0UmVjZWl2ZU5vdGljZSIsInBoYXNlIiwiZGVsdGFTYXRzIiwidHhpZCIsInRvdGFsSW5jcmVhc2VkIiwiX3AkcGhhc2UiLCJyYW5kb20iLCJ0b0lTT1N0cmluZyIsInRvdGFsTGFiZWwiLCJjb25mVSIsInRvYXN0SGVhZGVyIiwidG9hc3RNc2ciLCJsb2NhbE9ubHkiLCJzdWNjZXNzIiwiZHVyYXRpb24iLCJ1ZiIsImJpdGNvaW5QYXltZW50cyIsImFwcGx5TDFJbnZvaWNlUGF5bWVudEFjdGl2aXR5IiwiZGVkdXBlS2V5IiwibGFiZWwiLCJjb25maXJtYXRpb25zIiwiYml0Y29pbkV4cGxvcmVyIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiX2VtaXREZWxlZ2F0aW9uU2lnblJlcXVlc3RBY3Rpdml0eSIsIl9yZWY1IiwibWVzc2FnZUlkIiwicHJldmlldyIsInB1cnBvc2UiLCJwdiIsIl9yZXNvbHZlRGVsZWdhdGlvblNpZ25SZXF1ZXN0QWN0aXZpdHkiLCJyZXNvbHV0aW9uIiwiY3VyIiwicmVzb2x2ZWRBdCIsImFkZExvY2FsRG9jdW1lbnQiLCJyZW1vdmVMb2NhbERvY3VtZW50IiwiY2xlYXJBbGxEb2N1bWVudHMiLCJjbGVhckRlY3J5cHRlZERvY3VtZW50cyIsImNoYW5nZWQiLCJfaTQiLCJfT2JqZWN0JGtleXMiLCJyZXNldEdsb2JhbFN0YXRlIiwidXNlcnMiLCJjb21wb25lbnREaWRNb3VudCIsInN0YXJ0IiwiYWRkRXZlbnRMaXN0ZW5lciIsImhhbmRsZVBhdGhDaGFuZ2UiLCJvblN0YXRlVXBkYXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJzdG9wIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9wYXJzZUh1YkFkZHJlc3NTdHJpbmciLCJpbnB1dCIsImhhc1NjaGVtZSIsImJhc2VTY2hlbWUiLCJ1cmwiLCJVUkwiLCJwcm90byIsImlzTmFOIiwiX3dlYnNvY2tldFVybFdpdGhBdXRoIiwidG9rZW4iLCJGQUJSSUNfV1NfQ0xJRU5UX1RPS0VOIiwic2VwIiwiaW5kZXhPZiIsIl9odWJKc29uUnBjSHR0cEhlYWRlcnMiLCJoZWFkZXJzIiwiQWNjZXB0IiwiQXV0aG9yaXphdGlvbiIsIl9zZW5kU3Vic2NyaWJlIiwiZnJvbVZlY3RvciIsIm1lc3NhZ2VCdWZmZXIiLCJ0b0J1ZmZlciIsInNlbmRTaWduZWRNZXNzYWdlIiwiX3Jlc3Vic2NyaWJlQWxsIiwiX3RoaXM4Iiwic3VicyIsInNldEh1YkFkZHJlc3MiLCJjb25uZWN0IiwiX3RoaXM5IiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJDT05ORUNUSU5HIiwiY2xvc2UiLCJ3c1VybCIsImJpbmFyeVR5cGUiLCJvblNvY2tldE9wZW4iLCJzaGlmdCIsInNlbmQiLCJ1bnNoaWZ0IiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsIl9zZW5kSlNPTlJQQ05vdyIsIm9uU29ja2V0TWVzc2FnZSIsImNvZGUiLCJkZWxheSIsImdlbmVyYXRlSW50ZXJ2YWwiLCJtaW4iLCJwb3ciLCJpbml0aWFsaXplV2ViUlRDIiwiX3RoaXMwIiwic3Vic3RyIiwicHVibGlzaFdlYlJUQ09mZmVyIiwiZGlzY292ZXJBbmRDb25uZWN0VG9QZWVycyIsImhhbmRsZVdlYlJUQ01lc3NhZ2UiLCJzb3VyY2VQZWVySWQiLCJ0cmFuc3BvcnQiLCJtZXNzYWdlRGF0YSIsIl9mYWJyaWNUcmFuc3BvcnQiLCJ1c2VyQWdlbnQiLCJuYXZpZ2F0b3IiLCJjYXBhYmlsaXRpZXMiLCJmcCIsInBrSGV4IiwiZ2V0SHRsY1JlZnVuZFB1YmxpY0tleUhleCIsInB1YmxpY0tleUhleCIsInRpbWVzdGFtcCIsImN1cnJlbnRDb25uZWN0aW9ucyIsImV4Y2x1ZGVTZWxmIiwiX3BlbmRpbmdQZWVyRGlzY292ZXJ5IiwiaGFuZGxlUGVlckNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiX3RoaXMxIiwiX3RoaXMkX3BlbmRpbmdQZWVyQ2FuIiwibWF4Q2FuZGlkYXRlQWdlTXMiLCJzdGFsZUNhbmRpZGF0ZUNvdW50IiwiZWxpZ2libGVQZWVycyIsInNlZW5BdCIsInJlZ2lzdGVyZWRBdCIsImJTZWVuIiwiYVNlZW4iLCJwZWVyc1RvQ29ubmVjdCIsIl9pdGVyYXRvcjciLCJfc3RlcDciLCJjb25uZWN0VG9XZWJSVENQZWVyIiwiX3JlY29yZFBlZXJHb3NzaXBUb3BvbG9neSIsImZhbGxiYWNrUmVwb3J0ZXJJZCIsInJlcG9ydGVyIiwibmVpZ2hib3JJZHMiLCJhdCIsIm5laWdoYm9ycyIsImN1dG9mZiIsImJyIiwiX2k1IiwiX09iamVjdCRrZXlzMiIsIl90aGlzMTAiLCJjcmVhdGVEYXRhQ2hhbm5lbCIsIm9yZGVyZWQiLCJjcmVhdGVPZmZlciIsIm9mZmVyIiwib2ZmZXJTaWduYWwiLCJjb25uZWN0VGltZW91dE1zIiwidGltZXIiLCJfcmVzZXRIdWJGYWJyaWNUcmFuc3BvcnRTZXNzaW9uIiwiX2dldEZhYnJpY1RyYW5zcG9ydFNlc3Npb24iLCJfZmFicmljUmV3YXJkVHJhbnNwb3J0IiwiZGVsdGEiLCJfcmVhc29uIiwicmV3YXJkIiwiX25vdGlmeVBlZXJMaXN0VWlSZWZyZXNoIiwiX2ZhYnJpY1BlbmFsaXplVHJhbnNwb3J0IiwicGVuYWx0eSIsIl9zJHBlbmFsaXplIiwicGVuYWxpemUiLCJkaXNjb25uZWN0Iiwid2FybmluZyIsIl9mYWJyaWNEaXNjb25uZWN0SHViVHJhbnNwb3J0IiwiZ2V0V2ViUlRDUGVlclJlcHV0YXRpb24iLCJfdGhpczExIiwiX3dlYnJ0Y1BlbmFsaXplUGVlciIsIl90aGlzMTIiLCJXRUJSVENfTUFYX1RFWFQiLCJXRUJSVENfTUFYX0JJTkFSWSIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJhcnJheUJ1ZmZlciIsImFiIiwicGFyc2VFcnJvciIsInNlbmRUb1dlYlJUQ1BlZXIiLCJzb21lIiwic291cmNlIiwib2JqIiwic2xvdHMiLCJuZWVkZWQiLCJvZmZlcmVySWQiLCJjYW5vbmljYWxUeXBlTmFtZSIsInBlZXJJbmZvIiwiYmFzZTY0IiwiZmxvb3IiLCJlbnZlbG9wZSIsIm9yaWdpbmFsIiwib3JpZ2luYWxUeXBlIiwiaG9wcyIsImFsaWFzVGV4dCIsInNpZ25lcklkIiwibm9ybWFsaXplZCIsImRlZmF1bHRBY3RvcklkIiwidGV4dCIsImluY29taW5nQ2xpZW50SWQiLCJjbGllbnRJZCIsImNsaWVudEFjdG9yIiwiY2hhdCIsImRlbGl2ZXJ5IiwidmlhIiwib3V0Ym91bmQiLCJicm9hZGNhc3RUb1dlYlJUQ1BlZXJzIiwicmVjaXBpZW50cyIsImJyb2FkY2FzdFRvV2ViUlRDUGVlcnNXaXRoUmVjaXBpZW50cyIsIl9pdGVyYXRvcjgiLCJfc3RlcDgiLCJfc3RlcDgkdmFsdWUiLCJfYnVpbGRXZWJSVENQZWVyR29zc2lwUGF5bG9hZCIsIl9pdGVyYXRvcjkiLCJfc3RlcDkiLCJfc3RlcDkkdmFsdWUiLCJyZWxheVR0bCIsIl9idWlsZFBlZXJpbmdPZmZlclBheWxvYWQiLCJfYnJvYWRjYXN0V2ViUlRDUGVlckdvc3NpcCIsImNvdW50IiwiX2Jyb2FkY2FzdFBlZXJpbmdPZmZlciIsImV4aXN0aW5nSW5mbyIsInJ0Y0VudHJ5IiwiZm9yY2VVcGRhdGUiLCJkaXNjb25uZWN0QWxsV2ViUlRDUGVlcnMiLCJfaXRlcmF0b3IwIiwiX3N0ZXAwIiwiX3N0ZXAwJHZhbHVlIiwiX2l0ZXJhdG9yMSIsIl9zdGVwMSIsIl9zdGVwMSR2YWx1ZSIsImNsZWFyIiwiaHViIiwiX2l0ZXJhdG9yMTAiLCJfc3RlcDEwIiwiX2l0ZXJhdG9yMTEiLCJfc3RlcDExIiwiX2NhbGxIdWJKc29uUnBjIiwiX2NhbGxlZTYiLCJvcmlnaW4iLCJib2R5IiwiX2FyZ3M2IiwiX3Q0IiwiX2NvbnRleHQ2IiwiZmV0Y2giLCJqc29ucnBjIiwiY3JlZGVudGlhbHMiLCJjYWNoZSIsImpzb24iLCJjYWxsSHViSnNvblJwYyIsIl94MyIsImFkZEpvYiIsInRha2VKb2IiLCJqb2IiLCJyZW5kZXIiLCJfdGhpcyRzdGF0ZTUiLCJjcmVhdGVFbGVtZW50IiwiY2xlYXJJbnRlcnZhbCIsInNldEludGVydmFsIiwidGljayIsIl9pdGVyYXRvcjEyIiwiX3N0ZXAxMiIsIl9zdGVwMTIkdmFsdWUiLCJfaXRlcmF0b3IxMyIsIl9zdGVwMTMiLCJfc3RlcDEzJHZhbHVlIiwiaGVhcnRiZWF0TXMiLCJkaXNjb3ZlcnlNcyIsImdvc3NpcE1zIiwiY29ubmVjdGVkQ291bnQiLCJvZmZlck1zIiwic2xvdHNOZWVkZWQiLCJzaWduQXJiaXRyYXJ5VGV4dCIsInRleHRTdHIiLCJzaWciLCJzaWduIiwicHViSGV4Iiwic2lnbmF0dXJlIiwicHVibGljS2V5IiwiX3NpZ25BcmJpdHJhcnlUZXh0RGVsZWdhdGVkIiwiX2NhbGxlZTgiLCJfdGhpczEzIiwianNvblJwY1NlcSIsInJwYyIsInBvc3RSZXN1bHQiLCJkZWFkbGluZSIsInBqIiwiX2NvbnRleHQ4IiwiZXh0ZXJuYWxTaWduaW5nIiwiX3JlZjYiLCJfY2FsbGVlNyIsIl9jb250ZXh0NyIsInJwY0Vycm9yIiwiX3g1IiwiX3g2Iiwic2Vzc2lvblRva2VuIiwicHVia2V5SGV4Iiwic2lnbkFyYml0cmFyeVRleHREZWxlZ2F0ZWQiLCJfeDQiLCJlbmNvZGVDb21wcmVzc2VkIiwidmVyaWZ5QXJiaXRyYXJ5VGV4dCIsInNpZ25hdHVyZUhleCIsInZlcmlmeVNjaG5vcnIiLCJfY2FuU2lnbk91dGdvaW5nIiwiaGFzTG9jYWxXaXJlU2lnbmluZ0tleSIsInNpZ25NZXNzYWdlIiwiZmFicmljTWVzc2FnZSIsImZyb21CdWZmZXIiLCJzaWduV2l0aEtleSIsInJlbGF5U2lnbmVkRmFicmljV2lyZSIsIm9wdHMiLCJtZXNoUmVjaXBpZW50cyIsInJlbGF5ZWRUb0h1YiIsInByZWZlcldlYlJUQyIsInNpZ25lZE1lc3NhZ2UiLCJzaWduZWRCdWZmZXIiLCJzZW5kTWVzc2FnZSIsImdldENvbm5lY3Rpb25TdGF0dXMiLCJ3ZWJzb2NrZXQiLCJ3ZWJydGMiLCJzZXJ2ZXJDb25uZWN0aW9uIiwid2VicnRjQ29ubmVjdGlvbiIsInByZWZlcnJlZFByb3RvY29sIiwic2VuZFZpYVdlYlJUQyIsInNlbmRWaWFXZWJTb2NrZXQiLCJyZWNvbm5lY3RXZWJSVEMiLCJfb25Tb2NrZXRNZXNzYWdlIiwiX2NhbGxlZTkiLCJfdGhpczE0IiwidHJhbnNwb3J0TWV0YSIsInRTZXNzaW9uSWQiLCJ0S2luZCIsIndpcmVCNjQiLCJqc29uQ2FsbCIsImFkZHIiLCJmYWJyaWNJZCIsIl9pdGVyYXRvcjE0IiwiX3N0ZXAxNCIsIl9pdGVyYXRvcjE1IiwiX3N0ZXAxNSIsIl9pZCIsImRvY0lkIiwicGVuZGluZyIsInB1cmNoYXNlRGlkIiwicHVyY2hhc2VFcnJEaWQiLCJkaXN0RGlkIiwiZGlzdEVyckRpZCIsImFjY0RpZCIsImN0eCIsImZhaWxEaWQiLCJfY3R4IiwiYmFja2VuZERvY0lkIiwiY29udHJhY3RJZCIsIl9pNiIsIl9PYmplY3QkZW50cmllczQiLCJfT2JqZWN0JGVudHJpZXM0JF9pIiwiYnJpZGdlRW52IiwiX2xvY2FsSWQiLCJyZWNpcGllbnQiLCJtYXRjaCIsInBpZCIsIl9kb2MiLCJfdGFyZ2V0SWQiLCJfbmFtZSIsIml0ZW1zIiwia2V5c1RvVG91Y2giLCJfaTciLCJfT2JqZWN0JGtleXMzIiwiX2siLCJleCIsIl9pdGVyYXRvcjE2IiwiX3N0ZXAxNiIsIl9rMiIsIl9leGlzdGluZyIsImludmVudG9yeSIsInJlbGF5UmF3IiwiZmlyc3RIb3AiLCJyZWxJZCIsInJlbEtpbmQiLCJfcGFyc2VkIiwiX3BlZXJzIiwiX2NhbmRpZGF0ZXMiLCJfcGFyc2VkMiIsIl9vYmoyIiwiX3RyYW5zcG9ydCIsIl9zbG90cyIsIl9vZmZlcmVySWQiLCJfcGFyc2VkMyIsIl9wZWVySWQzIiwiX2l0ZW1zIiwiX2tleXNUb1RvdWNoIiwiX2k4IiwiX09iamVjdCRrZXlzNCIsIl9rMyIsIl9leCIsIl9pdGVyYXRvcjE3IiwiX3N0ZXAxNyIsIl9rNCIsIl9leGlzdGluZzIiLCJfaW52ZW50b3J5IiwiX3BhcnNlZDQiLCJub3JtYWxpemVkQ2hhdCIsInJlbGF5T2ZmZXJQcmVmaXgiLCJlbnYiLCJfaWQyIiwicmF3Q2hhdCIsIl9jaGF0IiwiX2NvbnRlbnQiLCJfcHJvcG9zYWwyIiwib2ZmZXJQcmVmaXgiLCJfZW52IiwiX2NyZWF0ZWQyIiwiX2lkMyIsIl9jbGllbnRJZCIsImJvZHlSYXciLCJwYXRjaERhdGEiLCJfdDUiLCJfdDYiLCJfdDciLCJfdDgiLCJfdDkiLCJfdDAiLCJfdDEiLCJfdDEwIiwiX3QxMSIsIl9jb250ZXh0OSIsImNvbW1pdFdpcmVNZXNzYWdlIiwid2lyZUJhc2U2NCIsImF1dGhvciIsImFwcGx5SHViTmV0d29ya1N0YXR1c1BheWxvYWQiLCJzZW5kTGlzdERvY3VtZW50c1JlcXVlc3QiLCJtZXJnZUNyZWF0ZURvY3VtZW50UnBjUmVzdWx0IiwiY29udGVudEhhc2giLCJiYWNrZW5kSWQiLCJmcm9tUHJvcG9zYWwiLCJwcm9wb3NhbElkIiwicGVlcktleSIsIm1lcmdlUHVibGlzaERvY3VtZW50UnBjUmVzdWx0IiwiY29udHJhY3QiLCJzdG9yYWdlQ29udHJhY3RJZCIsInJlc3BvbnNlQ2FwdHVyZSIsInRyeVBhcnNlIiwiYWN0aXZpdHlNZXNzYWdlSWQiLCJyZWNpcGllbnRGYWJyaWNQZWVySWQiLCJ0eXBlRXF1YWxzIiwicmVhZFVJbnQzMkJFIiwibG9nIiwidG9PYmplY3QiLCJfeDciLCJfb25Tb2NrZXRPcGVuIiwiX2NhbGxlZTAiLCJfY29udGV4dDAiLCJzZW5kTmV0d29ya1N0YXR1c1JlcXVlc3QiLCJfZmx1c2hDaGF0U3VibWlzc2lvblF1ZXVlIiwiX2ZsdXNoUGVuZGluZ0h1YkNoYXRRdWV1ZSIsIl9mbHVzaFBlZXJNZXNzYWdlUXVldWUiLCJfdGhpczE1IiwiX19GQUJSSUNfTEFTVF9ORVRXT1JLX1NUQVRVU19fIiwicHVibGlzaGVkIiwicHVibGlzaGVkRG9jdW1lbnRzIiwiaHViTWVzc2FnZXMiLCJjdXJyZW50IiwibWVyZ2VMaXN0RG9jdW1lbnRzUnBjUmVzdWx0IiwiX2l0ZXJhdG9yMTgiLCJfc3RlcDE4Iiwic2VuZExpc3RQZWVyc1JlcXVlc3QiLCJzZW5kQWRkUGVlclJlcXVlc3QiLCJfdGhpczE2Iiwibm9ybWFsaXplZEFkZHIiLCJyZWZyZXNoRXJyb3IiLCJzZW5kUmVtb3ZlUGVlclJlcXVlc3QiLCJpZE9yQWRkcmVzcyIsIl90aGlzMTciLCJzdWJtaXRDaGF0TWVzc2FnZSIsImlkZW50aXR5SWQiLCJzZW5kU3VibWl0Q2hhdE1lc3NhZ2VSZXF1ZXN0IiwiaHViQ29ubmVjdGVkIiwiaXRlbSIsIl9icm9hZGNhc3RDaGF0VG9XZWJSVENQZWVyc09ubHkiLCJkZWxpdmVyZWRUbyIsInJwY0JvZHkiLCJfZW1pdFRvbWJzdG9uZSIsIl9jYWxsZWUxIiwiYWRtaW5Ub2tlbiIsIm1pZCIsImlzT3B0cyIsInJwY1BhcmFtcyIsInJwY09yaWdpbiIsIl90MTIiLCJfdDEzIiwiX2NvbnRleHQxIiwic3RhdHVzVGV4dCIsImVtaXRUb21ic3RvbmUiLCJfeDgiLCJfeDkiLCJfeDAiLCJfZW5xdWV1ZVBlZXJNZXNzYWdlIiwiX3RoaXMxOCIsInJlbWFpbmluZyIsIl9pdGVyYXRvcjE5IiwiX3N0ZXAxOSIsIl9sb29wMiIsIl9yZXQiLCJzZW5kUGVlck1lc3NhZ2VSZXF1ZXN0IiwicmVzb2x2ZWRUZXh0Iiwic2VuZFNldFBlZXJOaWNrbmFtZVJlcXVlc3QiLCJfdGhpczE5IiwiY2xlYW4iLCJzZWxmSWQiLCJhbGlhc1BheWxvYWQiLCJzZW5kR2V0UGVlclJlcXVlc3QiLCJzZW5kRmFicmljUGVlclJlc3luY1JlcXVlc3QiLCJfdGhpczIwIiwic2VuZEZsdXNoQ2hhaW5Ub1RydXN0ZWRQZWVyc1JlcXVlc3QiLCJfdGhpczIxIiwic25hcCIsInNuYXBzaG90QmxvY2tIYXNoIiwicGFyYW0iLCJzZW5kUmVmcmVzaERvY3VtZW50TWFya2V0UmVxdWVzdCIsInNlbmRHZXREb2N1bWVudFJlcXVlc3QiLCJtZXJnZUdldERvY3VtZW50UnBjUmVzdWx0IiwiX2k5IiwiX09iamVjdCRlbnRyaWVzNSIsIl9PYmplY3QkZW50cmllczUkX2kiLCJwdWJFcnJEaWQiLCJzZW50QXQiLCJzZW5kUHVibGlzaERvY3VtZW50UmVxdWVzdCIsIm1lcmdlQ3JlYXRlRGlzdHJpYnV0ZUludm9pY2VScGNSZXN1bHQiLCJzZW5kQ3JlYXRlRG9jdW1lbnRSZXF1ZXN0IiwiX3RoaXMyMiIsInBheWxvYWREb2MiLCJfdGhpczIzIiwibG9naWNhbCIsImNyZWF0ZURvYyIsInB1cmNoYXNlUHJpY2VTYXRzIiwiYmFja2VuZEtleSIsInNlbmRDcmVhdGVQdXJjaGFzZUludm9pY2VSZXF1ZXN0IiwiX3NlbmRDbGFpbVB1cmNoYXNlUmVxdWVzdCIsIl9jYWxsZWUxMCIsIl90aGlzMjQiLCJfY29udGV4dDEwIiwic2VuZENsYWltUHVyY2hhc2VSZXF1ZXN0IiwiX3gxIiwiX3gxMCIsInNlbmRDcmVhdGVEaXN0cmlidXRlSW52b2ljZVJlcXVlc3QiLCJzZW5kU2VuZERpc3RyaWJ1dGVQcm9wb3NhbFJlcXVlc3QiLCJwZWVyQWRkcmVzcyIsInNlbmRBY2NlcHREaXN0cmlidXRlUHJvcG9zYWxSZXF1ZXN0Iiwic2VuZENyZWF0ZUV4ZWN1dGlvbkNvbnRyYWN0UmVxdWVzdCIsInByb2dyYW0iLCJwYXlsb2FkQ29uZmlnIiwic2VuZFJ1bkV4ZWN1dGlvbkNvbnRyYWN0UmVxdWVzdCIsInNlbmREaXN0cmlidXRlRG9jdW1lbnRSZXF1ZXN0IiwiZG9jRWFybHkiLCJiaWQiLCJkdXJhdGlvblllYXJzIiwiY2hhbGxlbmdlQ2FkZW5jZSIsInJlc3BvbnNlRGVhZGxpbmUiLCJkZXNpcmVkQ29waWVzIiwiX2ludm9rZUh1YlJwY1dpdGhBcnJheVBhcmFtczIiLCJfY2FsbGVlMTEiLCJwb3NpdGlvbmFsUGFyYW1zIiwiX3QxNCIsIl9jb250ZXh0MTEiLCJfaW52b2tlSHViUnBjV2l0aEFycmF5UGFyYW1zIiwiX3gxMSIsIl94MTIiLCJfcmVxdWVzdFBlZXJJbnZlbnRvcnlIdHRwRmFsbGJhY2syIiwiX2NhbGxlZTEyIiwib3B0aW9ucyIsIm91dCIsIl9jb250ZXh0MTIiLCJfcmVxdWVzdFBlZXJJbnZlbnRvcnlIdHRwRmFsbGJhY2siLCJfeDEzIiwiX3gxNCIsIl94MTUiLCJzZW5kUGVlckludmVudG9yeVJlcXVlc3QiLCJ3c1JlYWR5Iiwic2VuZENvbmZpcm1JbnZlbnRvcnlIdGxjUGF5bWVudCIsInNpZCIsInR4Iiwic2VuZFNlbmRQZWVyRmlsZVJlcXVlc3QiLCJDb21wb25lbnQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/Bridge.js\n\n}")},"./components/ChannelView.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link,\n useParams = _require.useParams;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Label = _require2.Label,\n List = _require2.List,\n Loader = _require2.Loader,\n Message = _require2.Message,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n fetchLightningChannels = _require3.fetchLightningChannels,\n loadUpstreamSettings = _require3.loadUpstreamSettings;\nvar _require4 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require4.formatSatsDisplay;\nvar CHANNEL_NOT_FOUND = \'Channel not found.\';\nfunction trimHash() {\n var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'\';\n var left = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 8;\n var right = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 8;\n var text = String(value || \'\');\n if (text.length <= left + right + 1) return text;\n return "".concat(text.slice(0, left), "\\u2026").concat(text.slice(-right));\n}\nfunction ChannelView() {\n var _useParams = useParams(),\n id = _useParams.id;\n var channelId = (id || \'\').trim();\n var _React$useState = React.useState(true),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n loading = _React$useState2[0],\n setLoading = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n error = _React$useState4[0],\n setError = _React$useState4[1];\n var _React$useState5 = React.useState(null),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n channel = _React$useState6[0],\n setChannel = _React$useState6[1];\n var _React$useState7 = React.useState(false),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n closeLoading = _React$useState8[0],\n setCloseLoading = _React$useState8[1];\n var _React$useState9 = React.useState(null),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n closeError = _React$useState0[0],\n setCloseError = _React$useState0[1];\n var loadChannel = React.useCallback(function () {\n if (!channelId) {\n setLoading(false);\n setError(null);\n setChannel(null);\n return;\n }\n setLoading(true);\n setError(null);\n var upstream = loadUpstreamSettings();\n fetchLightningChannels(upstream).then(function (res) {\n var channels = Array.isArray(res.channels) ? res.channels : [];\n var match = channels.find(function (ch) {\n return ch.channel_id && String(ch.channel_id) === channelId || ch.funding_txid && String(ch.funding_txid) === channelId;\n });\n if (match) {\n setChannel(match);\n setError(null);\n } else {\n setChannel(null);\n setError(CHANNEL_NOT_FOUND);\n }\n })["catch"](function (err) {\n setChannel(null);\n setError(err && err.message ? err.message : \'Failed to load channel.\');\n })["finally"](function () {\n return setLoading(false);\n });\n }, [channelId]);\n React.useEffect(function () {\n loadChannel();\n }, [loadChannel]);\n var handleClose = function handleClose() {\n if (!channel || !channel.channel_id) return;\n setCloseLoading(true);\n setCloseError(null);\n var upstream = loadUpstreamSettings();\n var baseUrl = (upstream.lightningBaseUrl || \'/services/lightning\').replace(/\\/+$/, \'\');\n var cid = encodeURIComponent(String(channel.channel_id));\n var url = "".concat(baseUrl, "/channels/").concat(cid);\n var headers = {\n Accept: \'application/json\'\n };\n var token = String(upstream.apiToken || \'\').trim();\n if (token) headers.Authorization = "Bearer ".concat(token);\n fetch(url, {\n method: \'DELETE\',\n headers: headers\n }).then(function (r) {\n return r.json();\n }).then(function (data) {\n if (data && data.status === \'error\') throw new Error(data.message || data.error || \'Close failed\');\n loadChannel();\n })["catch"](function (err) {\n setCloseError(err && err.message ? err.message : \'Failed to close channel.\');\n })["finally"](function () {\n return setCloseLoading(false);\n });\n };\n var capacitySats = channel && (channel.amount_msat != null || channel.channel_sat != null) ? channel.amount_msat != null ? Math.floor(Number(channel.amount_msat) / 1000) : Number(channel.channel_sat) : null;\n var ourSats = channel && channel.our_amount_msat != null ? Math.floor(Number(channel.our_amount_msat) / 1000) : null;\n var canClose = channel && channel.channel_id && (channel.state === \'CHANNELD_NORMAL\' || channel.state === \'CHANNELD_AWAITING_LOCKIN\');\n return /*#__PURE__*/React.createElement("div", {\n className: "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.75em\',\n flexWrap: \'wrap\',\n marginBottom: \'0.25em\'\n },\n role: "banner"\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small",\n "aria-label": "Back to Bitcoin dashboard (Lightning section)",\n title: "Bitcoin home \\u2014 Lightning and other tools"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Bitcoin / LN"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\',\n flex: \'1 1 auto\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt",\n color: "yellow",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Lightning Channel")), channel && channel.state && /*#__PURE__*/React.createElement(Label, {\n color: channel.state === \'CHANNELD_NORMAL\' ? \'green\' : \'orange\',\n size: "small",\n title: "Channel state",\n "aria-hidden": "true"\n }, channel.state)))), !channelId && /*#__PURE__*/React.createElement(Message, {\n warning: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Missing channel ID"), /*#__PURE__*/React.createElement("p", null, "Provide a channel ID in the URL.")), !!channelId && loading && /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: "centered"\n }), /*#__PURE__*/React.createElement("p", {\n style: {\n textAlign: \'center\',\n marginTop: \'1em\',\n color: \'#666\'\n }\n }, "Loading channel\\u2026")), !!channelId && error && !loading && error === CHANNEL_NOT_FOUND && /*#__PURE__*/React.createElement(Message, {\n warning: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Channel not found"), /*#__PURE__*/React.createElement("p", null, "No channel with this id appears in the Hub\'s Lightning list. It may have closed, or use funding txid if you opened from a transaction link."), /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.5em\',\n fontSize: \'0.9em\',\n color: \'#555\'\n }\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, channelId)), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\',\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n onClick: function onClick() {\n return void loadChannel();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), "Bitcoin / LN"))), !!channelId && error && !loading && error !== CHANNEL_NOT_FOUND && /*#__PURE__*/React.createElement(Message, {\n negative: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Failed to load channels"), /*#__PURE__*/React.createElement("p", null, error), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\',\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n onClick: function onClick() {\n return void loadChannel();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), "Bitcoin / LN"))), !loading && !error && channel && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(List, {\n divided: true\n }, /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Channel ID"), /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.9em\'\n }\n }, channel.channel_id || \'—\'))), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Peer"), /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.9em\'\n }\n }, channel.peer_id ? trimHash(channel.peer_id, 12, 12) : \'—\'))), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Short channel ID"), /*#__PURE__*/React.createElement("code", null, channel.short_channel_id || \'—\'))), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "State"), channel.state || \'—\')), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Capacity"), capacitySats != null ? "".concat(formatSatsDisplay(capacitySats), " sats") : \'—\')), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Our balance"), ourSats != null ? "".concat(formatSatsDisplay(ourSats), " sats") : \'—\')), channel.funding_txid && /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Funding transaction"), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n as: Link,\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(channel.funding_txid)),\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), "View transaction")))), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n onClick: loadChannel,\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh")), canClose && /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Close channel"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5em\'\n }\n }, "Closing cooperatively returns funds to your wallet after the closing transaction confirms."), closeError && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginBottom: \'0.5em\'\n }\n }, closeError), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "red",\n loading: closeLoading,\n disabled: closeLoading,\n onClick: handleClose\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "close"\n }), "Close channel"))));\n}\nmodule.exports = ChannelView;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQWdHLGFBQUEsQ0FBQ3pGLE1BQU07SUFBQ2tHLEVBQUUsRUFBQztFQUFJLEdBQUMsZUFBcUIsQ0FBQyxlQUN0Q3pHLEtBQUEsQ0FBQWdHLGFBQUE7SUFBR0UsS0FBSyxFQUFFO01BQUVjLEtBQUssRUFBRSxNQUFNO01BQUVULFlBQVksRUFBRTtJQUFRO0VBQUUsR0FBQyw0RkFFakQsQ0FBQyxFQUNIbkQsVUFBVSxpQkFDVHBELEtBQUEsQ0FBQWdHLGFBQUEsQ0FBQ3BGLE9BQU87SUFBQytHLFFBQVE7SUFBQ2YsSUFBSSxFQUFDLE9BQU87SUFBQ1YsS0FBSyxFQUFFO01BQUVLLFlBQVksRUFBRTtJQUFRO0VBQUUsR0FDN0RuRCxVQUNNLENBQ1YsZUFDRHBELEtBQUEsQ0FBQWdHLGFBQUEsQ0FBQzFGLE1BQU07SUFDTG1ILElBQUksRUFBQyxRQUFRO0lBQ2JULEtBQUssRUFBQyxLQUFLO0lBQ1g1RSxPQUFPLEVBQUVZLFlBQWE7SUFDdEJpRixRQUFRLEVBQUVqRixZQUFhO0lBQ3ZCMEUsT0FBTyxFQUFFdEQ7RUFBWSxnQkFFckJwRSxLQUFBLENBQUFnRyxhQUFBLENBQUN4RixJQUFJO0lBQUMzQixJQUFJLEVBQUM7RUFBTyxDQUFFLENBQUMsaUJBRWYsQ0FDRCxDQUVYLENBRUQsQ0FBQztBQUVWO0FBRUFxSixNQUFNLENBQUNDLE9BQU8sR0FBR3ZHLFdBQVciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvQ2hhbm5lbFZpZXcuanM/ZDE2MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluaywgdXNlUGFyYW1zIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5jb25zdCB7IEJ1dHRvbiwgSGVhZGVyLCBJY29uLCBMYWJlbCwgTGlzdCwgTG9hZGVyLCBNZXNzYWdlLCBTZWdtZW50IH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3QgeyBmZXRjaExpZ2h0bmluZ0NoYW5uZWxzLCBsb2FkVXBzdHJlYW1TZXR0aW5ncyB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2JpdGNvaW5DbGllbnQnKTtcbmNvbnN0IHsgZm9ybWF0U2F0c0Rpc3BsYXkgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mb3JtYXRTYXRzJyk7XG5cbmNvbnN0IENIQU5ORUxfTk9UX0ZPVU5EID0gJ0NoYW5uZWwgbm90IGZvdW5kLic7XG5cbmZ1bmN0aW9uIHRyaW1IYXNoICh2YWx1ZSA9ICcnLCBsZWZ0ID0gOCwgcmlnaHQgPSA4KSB7XG4gIGNvbnN0IHRleHQgPSBTdHJpbmcodmFsdWUgfHwgJycpO1xuICBpZiAodGV4dC5sZW5ndGggPD0gbGVmdCArIHJpZ2h0ICsgMSkgcmV0dXJuIHRleHQ7XG4gIHJldHVybiBgJHt0ZXh0LnNsaWNlKDAsIGxlZnQpfeKApiR7dGV4dC5zbGljZSgtcmlnaHQpfWA7XG59XG5cbmZ1bmN0aW9uIENoYW5uZWxWaWV3ICgpIHtcbiAgY29uc3QgeyBpZCB9ID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IGNoYW5uZWxJZCA9IChpZCB8fCAnJykudHJpbSgpO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2NoYW5uZWwsIHNldENoYW5uZWxdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtjbG9zZUxvYWRpbmcsIHNldENsb3NlTG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtjbG9zZUVycm9yLCBzZXRDbG9zZUVycm9yXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuXG4gIGNvbnN0IGxvYWRDaGFubmVsID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghY2hhbm5lbElkKSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgc2V0Q2hhbm5lbChudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICBzZXRFcnJvcihudWxsKTtcbiAgICBjb25zdCB1cHN0cmVhbSA9IGxvYWRVcHN0cmVhbVNldHRpbmdzKCk7XG4gICAgZmV0Y2hMaWdodG5pbmdDaGFubmVscyh1cHN0cmVhbSlcbiAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbm5lbHMgPSBBcnJheS5pc0FycmF5KHJlcy5jaGFubmVscykgPyByZXMuY2hhbm5lbHMgOiBbXTtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjaGFubmVscy5maW5kKFxuICAgICAgICAgIChjaCkgPT5cbiAgICAgICAgICAgIChjaC5jaGFubmVsX2lkICYmIFN0cmluZyhjaC5jaGFubmVsX2lkKSA9PT0gY2hhbm5lbElkKSB8fFxuICAgICAgICAgICAgKGNoLmZ1bmRpbmdfdHhpZCAmJiBTdHJpbmcoY2guZnVuZGluZ190eGlkKSA9PT0gY2hhbm5lbElkKVxuICAgICAgICApO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICBzZXRDaGFubmVsKG1hdGNoKTtcbiAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRDaGFubmVsKG51bGwpO1xuICAgICAgICAgIHNldEVycm9yKENIQU5ORUxfTk9UX0ZPVU5EKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHNldENoYW5uZWwobnVsbCk7XG4gICAgICAgIHNldEVycm9yKGVyciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlIDogJ0ZhaWxlZCB0byBsb2FkIGNoYW5uZWwuJyk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4gc2V0TG9hZGluZyhmYWxzZSkpO1xuICB9LCBbY2hhbm5lbElkXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBsb2FkQ2hhbm5lbCgpO1xuICB9LCBbbG9hZENoYW5uZWxdKTtcblxuICBjb25zdCBoYW5kbGVDbG9zZSA9ICgpID0+IHtcbiAgICBpZiAoIWNoYW5uZWwgfHwgIWNoYW5uZWwuY2hhbm5lbF9pZCkgcmV0dXJuO1xuICAgIHNldENsb3NlTG9hZGluZyh0cnVlKTtcbiAgICBzZXRDbG9zZUVycm9yKG51bGwpO1xuICAgIGNvbnN0IHVwc3RyZWFtID0gbG9hZFVwc3RyZWFtU2V0dGluZ3MoKTtcbiAgICBjb25zdCBiYXNlVXJsID0gKHVwc3RyZWFtLmxpZ2h0bmluZ0Jhc2VVcmwgfHwgJy9zZXJ2aWNlcy9saWdodG5pbmcnKS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgICBjb25zdCBjaWQgPSBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGNoYW5uZWwuY2hhbm5lbF9pZCkpO1xuICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L2NoYW5uZWxzLyR7Y2lkfWA7XG4gICAgY29uc3QgaGVhZGVycyA9IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfTtcbiAgICBjb25zdCB0b2tlbiA9IFN0cmluZyh1cHN0cmVhbS5hcGlUb2tlbiB8fCAnJykudHJpbSgpO1xuICAgIGlmICh0b2tlbikgaGVhZGVycy5BdXRob3JpemF0aW9uID0gYEJlYXJlciAke3Rva2VufWA7XG4gICAgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgaGVhZGVyc1xuICAgIH0pXG4gICAgICAudGhlbigocikgPT4gci5qc29uKCkpXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnN0YXR1cyA9PT0gJ2Vycm9yJykgdGhyb3cgbmV3IEVycm9yKGRhdGEubWVzc2FnZSB8fCBkYXRhLmVycm9yIHx8ICdDbG9zZSBmYWlsZWQnKTtcbiAgICAgICAgbG9hZENoYW5uZWwoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBzZXRDbG9zZUVycm9yKGVyciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlIDogJ0ZhaWxlZCB0byBjbG9zZSBjaGFubmVsLicpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHNldENsb3NlTG9hZGluZyhmYWxzZSkpO1xuICB9O1xuXG4gIGNvbnN0IGNhcGFjaXR5U2F0cyA9IGNoYW5uZWwgJiYgKGNoYW5uZWwuYW1vdW50X21zYXQgIT0gbnVsbCB8fCBjaGFubmVsLmNoYW5uZWxfc2F0ICE9IG51bGwpXG4gICAgPyAoY2hhbm5lbC5hbW91bnRfbXNhdCAhPSBudWxsID8gTWF0aC5mbG9vcihOdW1iZXIoY2hhbm5lbC5hbW91bnRfbXNhdCkgLyAxMDAwKSA6IE51bWJlcihjaGFubmVsLmNoYW5uZWxfc2F0KSlcbiAgICA6IG51bGw7XG4gIGNvbnN0IG91clNhdHMgPSBjaGFubmVsICYmIGNoYW5uZWwub3VyX2Ftb3VudF9tc2F0ICE9IG51bGxcbiAgICA/IE1hdGguZmxvb3IoTnVtYmVyKGNoYW5uZWwub3VyX2Ftb3VudF9tc2F0KSAvIDEwMDApXG4gICAgOiBudWxsO1xuICBjb25zdCBjYW5DbG9zZSA9IGNoYW5uZWwgJiYgY2hhbm5lbC5jaGFubmVsX2lkICYmIChjaGFubmVsLnN0YXRlID09PSAnQ0hBTk5FTERfTk9STUFMJyB8fCBjaGFubmVsLnN0YXRlID09PSAnQ0hBTk5FTERfQVdBSVRJTkdfTE9DS0lOJyk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT0nZmFkZS1pbic+XG4gICAgICA8U2VnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzAuNzVlbScsIGZsZXhXcmFwOiAnd3JhcCcsIG1hcmdpbkJvdHRvbTogJzAuMjVlbScgfX1cbiAgICAgICAgICByb2xlPVwiYmFubmVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW5cIiBiYXNpYyBzaXplPVwic21hbGxcIiBhcmlhLWxhYmVsPVwiQmFjayB0byBCaXRjb2luIGRhc2hib2FyZCAoTGlnaHRuaW5nIHNlY3Rpb24pXCIgdGl0bGU9XCJCaXRjb2luIGhvbWUg4oCUIExpZ2h0bmluZyBhbmQgb3RoZXIgdG9vbHNcIj5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJhcnJvdyBsZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIEJpdGNvaW4gLyBMTlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC41ZW0nLCBmbGV4V3JhcDogJ3dyYXAnLCBmbGV4OiAnMSAxIGF1dG8nIH19PlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImgyXCIgc3R5bGU9e3sgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYm9sdFwiIGNvbG9yPVwieWVsbG93XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgPEhlYWRlci5Db250ZW50PkxpZ2h0bmluZyBDaGFubmVsPC9IZWFkZXIuQ29udGVudD5cbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAge2NoYW5uZWwgJiYgY2hhbm5lbC5zdGF0ZSAmJiAoXG4gICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgIGNvbG9yPXtjaGFubmVsLnN0YXRlID09PSAnQ0hBTk5FTERfTk9STUFMJyA/ICdncmVlbicgOiAnb3JhbmdlJ31cbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2hhbm5lbCBzdGF0ZVwiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtjaGFubmVsLnN0YXRlfVxuICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgIHshY2hhbm5lbElkICYmIChcbiAgICAgICAgPE1lc3NhZ2Ugd2FybmluZz5cbiAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+TWlzc2luZyBjaGFubmVsIElEPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICA8cD5Qcm92aWRlIGEgY2hhbm5lbCBJRCBpbiB0aGUgVVJMLjwvcD5cbiAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgKX1cblxuICAgICAgeyEhY2hhbm5lbElkICYmIGxvYWRpbmcgJiYgKFxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8TG9hZGVyIGFjdGl2ZSBpbmxpbmU9XCJjZW50ZXJlZFwiIC8+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgdGV4dEFsaWduOiAnY2VudGVyJywgbWFyZ2luVG9wOiAnMWVtJywgY29sb3I6ICcjNjY2JyB9fT5Mb2FkaW5nIGNoYW5uZWzigKY8L3A+XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgICl9XG5cbiAgICAgIHshIWNoYW5uZWxJZCAmJiBlcnJvciAmJiAhbG9hZGluZyAmJiBlcnJvciA9PT0gQ0hBTk5FTF9OT1RfRk9VTkQgJiYgKFxuICAgICAgICA8TWVzc2FnZSB3YXJuaW5nPlxuICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5DaGFubmVsIG5vdCBmb3VuZDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICBObyBjaGFubmVsIHdpdGggdGhpcyBpZCBhcHBlYXJzIGluIHRoZSBIdWImYXBvcztzIExpZ2h0bmluZyBsaXN0LiBJdCBtYXkgaGF2ZSBjbG9zZWQsIG9yIHVzZSBmdW5kaW5nIHR4aWQgaWYgeW91IG9wZW5lZCBmcm9tIGEgdHJhbnNhY3Rpb24gbGluay5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nLCBmb250U2l6ZTogJzAuOWVtJywgY29sb3I6ICcjNTU1JyB9fT5cbiAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e2NoYW5uZWxJZH08L2NvZGU+XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJywgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcwLjVlbScsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBzaXplPVwic21hbGxcIiBvbkNsaWNrPXsoKSA9PiB2b2lkIGxvYWRDaGFubmVsKCl9PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicmVmcmVzaFwiIC8+XG4gICAgICAgICAgICAgIFJldHJ5XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW5cIiBzaXplPVwic21hbGxcIiBiYXNpYz5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiAvPlxuICAgICAgICAgICAgICBCaXRjb2luIC8gTE5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApfVxuXG4gICAgICB7ISFjaGFubmVsSWQgJiYgZXJyb3IgJiYgIWxvYWRpbmcgJiYgZXJyb3IgIT09IENIQU5ORUxfTk9UX0ZPVU5EICYmIChcbiAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmU+XG4gICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkZhaWxlZCB0byBsb2FkIGNoYW5uZWxzPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICA8cD57ZXJyb3J9PC9wPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJywgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcwLjVlbScsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBzaXplPVwic21hbGxcIiBvbkNsaWNrPXsoKSA9PiB2b2lkIGxvYWRDaGFubmVsKCl9PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicmVmcmVzaFwiIC8+XG4gICAgICAgICAgICAgIFJldHJ5XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW5cIiBzaXplPVwic21hbGxcIiBiYXNpYz5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiAvPlxuICAgICAgICAgICAgICBCaXRjb2luIC8gTE5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApfVxuXG4gICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIGNoYW5uZWwgJiYgKFxuICAgICAgICA8PlxuICAgICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgICAgPExpc3QgZGl2aWRlZD5cbiAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPExpc3QuSGVhZGVyPkNoYW5uZWwgSUQ8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJywgZm9udFNpemU6ICcwLjllbScgfX0+e2NoYW5uZWwuY2hhbm5lbF9pZCB8fCAn4oCUJ308L2NvZGU+XG4gICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICA8TGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgIDxMaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+UGVlcjwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuOWVtJyB9fT57Y2hhbm5lbC5wZWVyX2lkID8gdHJpbUhhc2goY2hhbm5lbC5wZWVyX2lkLCAxMiwgMTIpIDogJ+KAlCd9PC9jb2RlPlxuICAgICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPExpc3QuSGVhZGVyPlNob3J0IGNoYW5uZWwgSUQ8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPGNvZGU+e2NoYW5uZWwuc2hvcnRfY2hhbm5lbF9pZCB8fCAn4oCUJ308L2NvZGU+XG4gICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICA8TGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgIDxMaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+U3RhdGU8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAge2NoYW5uZWwuc3RhdGUgfHwgJ+KAlCd9XG4gICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICA8TGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgIDxMaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+Q2FwYWNpdHk8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAge2NhcGFjaXR5U2F0cyAhPSBudWxsID8gYCR7Zm9ybWF0U2F0c0Rpc3BsYXkoY2FwYWNpdHlTYXRzKX0gc2F0c2AgOiAn4oCUJ31cbiAgICAgICAgICAgICAgICA8L0xpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgPExpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxMaXN0LkhlYWRlcj5PdXIgYmFsYW5jZTwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICB7b3VyU2F0cyAhPSBudWxsID8gYCR7Zm9ybWF0U2F0c0Rpc3BsYXkob3VyU2F0cyl9IHNhdHNgIDogJ+KAlCd9XG4gICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICB7Y2hhbm5lbC5mdW5kaW5nX3R4aWQgJiYgKFxuICAgICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+RnVuZGluZyB0cmFuc2FjdGlvbjwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cIm1pbmlcIiBhcz17TGlua30gdG89e2Avc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoY2hhbm5lbC5mdW5kaW5nX3R4aWQpfWB9IGJhc2ljPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJiaXRjb2luXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBWaWV3IHRyYW5zYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0xpc3Q+XG4gICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIGJhc2ljIG9uQ2xpY2s9e2xvYWRDaGFubmVsfSBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgUmVmcmVzaFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9TZWdtZW50PlxuXG4gICAgICAgICAge2NhbkNsb3NlICYmIChcbiAgICAgICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIj5DbG9zZSBjaGFubmVsPC9IZWFkZXI+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICBDbG9zaW5nIGNvb3BlcmF0aXZlbHkgcmV0dXJucyBmdW5kcyB0byB5b3VyIHdhbGxldCBhZnRlciB0aGUgY2xvc2luZyB0cmFuc2FjdGlvbiBjb25maXJtcy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICB7Y2xvc2VFcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmUgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAge2Nsb3NlRXJyb3J9XG4gICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJyZWRcIlxuICAgICAgICAgICAgICAgIGxvYWRpbmc9e2Nsb3NlTG9hZGluZ31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y2xvc2VMb2FkaW5nfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNsb3NlXCIgLz5cbiAgICAgICAgICAgICAgICBDbG9zZSBjaGFubmVsXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDaGFubmVsVmlldztcbiJdLCJuYW1lcyI6WyJfc2xpY2VkVG9BcnJheSIsInIiLCJlIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInQiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJsZW5ndGgiLCJuIiwibCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaSIsInUiLCJmIiwibyIsIm5leHQiLCJPYmplY3QiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiaXNBcnJheSIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTGluayIsInVzZVBhcmFtcyIsIl9yZXF1aXJlMiIsIkJ1dHRvbiIsIkhlYWRlciIsIkljb24iLCJMYWJlbCIsIkxpc3QiLCJMb2FkZXIiLCJNZXNzYWdlIiwiU2VnbWVudCIsIl9yZXF1aXJlMyIsImZldGNoTGlnaHRuaW5nQ2hhbm5lbHMiLCJsb2FkVXBzdHJlYW1TZXR0aW5ncyIsIl9yZXF1aXJlNCIsImZvcm1hdFNhdHNEaXNwbGF5IiwiQ0hBTk5FTF9OT1RfRk9VTkQiLCJ0cmltSGFzaCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImxlZnQiLCJyaWdodCIsInRleHQiLCJTdHJpbmciLCJjb25jYXQiLCJDaGFubmVsVmlldyIsIl91c2VQYXJhbXMiLCJpZCIsImNoYW5uZWxJZCIsInRyaW0iLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsIl9SZWFjdCR1c2VTdGF0ZTMiLCJfUmVhY3QkdXNlU3RhdGU0IiwiZXJyb3IiLCJzZXRFcnJvciIsIl9SZWFjdCR1c2VTdGF0ZTUiLCJfUmVhY3QkdXNlU3RhdGU2IiwiY2hhbm5lbCIsInNldENoYW5uZWwiLCJfUmVhY3QkdXNlU3RhdGU3IiwiX1JlYWN0JHVzZVN0YXRlOCIsImNsb3NlTG9hZGluZyIsInNldENsb3NlTG9hZGluZyIsIl9SZWFjdCR1c2VTdGF0ZTkiLCJfUmVhY3QkdXNlU3RhdGUwIiwiY2xvc2VFcnJvciIsInNldENsb3NlRXJyb3IiLCJsb2FkQ2hhbm5lbCIsInVzZUNhbGxiYWNrIiwidXBzdHJlYW0iLCJ0aGVuIiwicmVzIiwiY2hhbm5lbHMiLCJtYXRjaCIsImZpbmQiLCJjaCIsImNoYW5uZWxfaWQiLCJmdW5kaW5nX3R4aWQiLCJlcnIiLCJtZXNzYWdlIiwidXNlRWZmZWN0IiwiaGFuZGxlQ2xvc2UiLCJiYXNlVXJsIiwibGlnaHRuaW5nQmFzZVVybCIsInJlcGxhY2UiLCJjaWQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ1cmwiLCJoZWFkZXJzIiwiQWNjZXB0IiwidG9rZW4iLCJhcGlUb2tlbiIsIkF1dGhvcml6YXRpb24iLCJmZXRjaCIsIm1ldGhvZCIsImpzb24iLCJkYXRhIiwic3RhdHVzIiwiRXJyb3IiLCJjYXBhY2l0eVNhdHMiLCJhbW91bnRfbXNhdCIsImNoYW5uZWxfc2F0IiwiTWF0aCIsImZsb29yIiwiTnVtYmVyIiwib3VyU2F0cyIsIm91cl9hbW91bnRfbXNhdCIsImNhbkNsb3NlIiwic3RhdGUiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImdhcCIsImZsZXhXcmFwIiwibWFyZ2luQm90dG9tIiwicm9sZSIsImFzIiwidG8iLCJiYXNpYyIsInNpemUiLCJ0aXRsZSIsImZsZXgiLCJtYXJnaW4iLCJjb2xvciIsIkNvbnRlbnQiLCJ3YXJuaW5nIiwiYWN0aXZlIiwiaW5saW5lIiwidGV4dEFsaWduIiwibWFyZ2luVG9wIiwiZm9udFNpemUiLCJ3b3JkQnJlYWsiLCJ0eXBlIiwib25DbGljayIsIm5lZ2F0aXZlIiwiRnJhZ21lbnQiLCJkaXZpZGVkIiwiSXRlbSIsInBlZXJfaWQiLCJzaG9ydF9jaGFubmVsX2lkIiwiZGlzYWJsZWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/ChannelView.js\n\n}')},"./components/ChatInput.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Input = _require.Input,\n Button = _require.Button;\nfunction ChatInput(props) {\n var value = props.value,\n _onChange = props.onChange,\n onSubmit = props.onSubmit,\n placeholder = props.placeholder,\n title = props.title,\n disabled = props.disabled,\n inputId = props.inputId,\n ariaDescribedBy = props.ariaDescribedBy;\n var handleKeyDown = function handleKeyDown(e) {\n if (e.key === \'Enter\' && !e.shiftKey) {\n e.preventDefault();\n var text = (value || \'\').trim();\n if (text && typeof onSubmit === \'function\') onSubmit(text);\n }\n };\n var handleSubmit = function handleSubmit() {\n var text = (value || \'\').trim();\n if (text && typeof onSubmit === \'function\') onSubmit(text);\n };\n return /*#__PURE__*/React.createElement(Input, {\n fluid: true,\n action: true,\n value: value || \'\',\n onChange: function onChange(e) {\n return typeof _onChange === \'function\' && _onChange(e.target.value);\n },\n onKeyDown: handleKeyDown,\n placeholder: placeholder || \'Type a message…\',\n title: title,\n disabled: !!disabled\n }, /*#__PURE__*/React.createElement("input", {\n id: inputId || undefined,\n "aria-describedby": ariaDescribedBy || undefined\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n icon: "send",\n color: "teal",\n "aria-label": "Send message",\n title: "Send message",\n disabled: !!disabled || !(value || \'\').trim(),\n onClick: handleSubmit\n }));\n}\nmodule.exports = ChatInput;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvQ2hhdElucHV0LmpzPzYxYzkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IElucHV0LCBCdXR0b24gfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5cbmZ1bmN0aW9uIENoYXRJbnB1dCAocHJvcHMpIHtcbiAgY29uc3QgeyB2YWx1ZSwgb25DaGFuZ2UsIG9uU3VibWl0LCBwbGFjZWhvbGRlciwgdGl0bGUsIGRpc2FibGVkLCBpbnB1dElkLCBhcmlhRGVzY3JpYmVkQnkgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZSkgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgdGV4dCA9ICh2YWx1ZSB8fCAnJykudHJpbSgpO1xuICAgICAgaWYgKHRleHQgJiYgdHlwZW9mIG9uU3VibWl0ID09PSAnZnVuY3Rpb24nKSBvblN1Ym1pdCh0ZXh0KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSAodmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAodGV4dCAmJiB0eXBlb2Ygb25TdWJtaXQgPT09ICdmdW5jdGlvbicpIG9uU3VibWl0KHRleHQpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPElucHV0XG4gICAgICBmbHVpZFxuICAgICAgYWN0aW9uXG4gICAgICB2YWx1ZT17dmFsdWUgfHwgJyd9XG4gICAgICBvbkNoYW5nZT17KGUpID0+IHR5cGVvZiBvbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJiBvbkNoYW5nZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXIgfHwgJ1R5cGUgYSBtZXNzYWdl4oCmJ31cbiAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgIGRpc2FibGVkPXshIWRpc2FibGVkfVxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD17aW5wdXRJZCB8fCB1bmRlZmluZWR9XG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e2FyaWFEZXNjcmliZWRCeSB8fCB1bmRlZmluZWR9XG4gICAgICAvPlxuICAgICAgPEJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgaWNvbj1cInNlbmRcIlxuICAgICAgICBjb2xvcj1cInRlYWxcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiU2VuZCBtZXNzYWdlXCJcbiAgICAgICAgdGl0bGU9XCJTZW5kIG1lc3NhZ2VcIlxuICAgICAgICBkaXNhYmxlZD17ISFkaXNhYmxlZCB8fCAhKHZhbHVlIHx8ICcnKS50cmltKCl9XG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH1cbiAgICAgIC8+XG4gICAgPC9JbnB1dD5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDaGF0SW5wdXQ7XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJJbnB1dCIsIkJ1dHRvbiIsIkNoYXRJbnB1dCIsInByb3BzIiwidmFsdWUiLCJvbkNoYW5nZSIsIm9uU3VibWl0IiwicGxhY2Vob2xkZXIiLCJ0aXRsZSIsImRpc2FibGVkIiwiaW5wdXRJZCIsImFyaWFEZXNjcmliZWRCeSIsImhhbmRsZUtleURvd24iLCJlIiwia2V5Iiwic2hpZnRLZXkiLCJwcmV2ZW50RGVmYXVsdCIsInRleHQiLCJ0cmltIiwiaGFuZGxlU3VibWl0IiwiY3JlYXRlRWxlbWVudCIsImZsdWlkIiwiYWN0aW9uIiwidGFyZ2V0Iiwib25LZXlEb3duIiwiaWQiLCJ1bmRlZmluZWQiLCJ0eXBlIiwiaWNvbiIsImNvbG9yIiwib25DbGljayIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/ChatInput.js\n\n}')},"./components/CollaborationHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Divider = _require2.Divider,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Label = _require2.Label,\n Message = _require2.Message,\n Segment = _require2.Segment,\n Table = _require2.Table;\nvar _require3 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require3.readHubAdminTokenFromBrowser;\n\n/**\n * Hub operator UI: contacts, groups (nested members + multisig preview), invitations.\n * Uses {@link Bridge#callHubJsonRpc} → POST /services/rpc (admin token on each call).\n */\nfunction CollaborationHome(_ref) {\n var bridgeRef = _ref.bridgeRef,\n adminToken = _ref.adminToken;\n var token = readHubAdminTokenFromBrowser(adminToken);\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n error = _React$useState2[0],\n setError = _React$useState2[1];\n var _React$useState3 = React.useState(false),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n busy = _React$useState4[0],\n setBusy = _React$useState4[1];\n var _React$useState5 = React.useState([]),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n contacts = _React$useState6[0],\n setContacts = _React$useState6[1];\n var _React$useState7 = React.useState([]),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n groups = _React$useState8[0],\n setGroups = _React$useState8[1];\n var _React$useState9 = React.useState([]),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n invitations = _React$useState0[0],\n setInvitations = _React$useState0[1];\n var _React$useState1 = React.useState([]),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n peers = _React$useState10[0],\n setPeers = _React$useState10[1];\n var _React$useState11 = React.useState(\'\'),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n newEmail = _React$useState12[0],\n setNewEmail = _React$useState12[1];\n var _React$useState13 = React.useState(\'\'),\n _React$useState14 = _slicedToArray(_React$useState13, 2),\n newPeerId = _React$useState14[0],\n setNewPeerId = _React$useState14[1];\n var _React$useState15 = React.useState(\'\'),\n _React$useState16 = _slicedToArray(_React$useState15, 2),\n newPub = _React$useState16[0],\n setNewPub = _React$useState16[1];\n var _React$useState17 = React.useState(\'\'),\n _React$useState18 = _slicedToArray(_React$useState17, 2),\n groupName = _React$useState18[0],\n setGroupName = _React$useState18[1];\n var _React$useState19 = React.useState(1),\n _React$useState20 = _slicedToArray(_React$useState19, 2),\n groupThreshold = _React$useState20[0],\n setGroupThreshold = _React$useState20[1];\n var _React$useState21 = React.useState(\'\'),\n _React$useState22 = _slicedToArray(_React$useState21, 2),\n inviteEmail = _React$useState22[0],\n setInviteEmail = _React$useState22[1];\n var _React$useState23 = React.useState(\'\'),\n _React$useState24 = _slicedToArray(_React$useState23, 2),\n invitePeerIdentity = _React$useState24[0],\n setInvitePeerIdentity = _React$useState24[1];\n var _React$useState25 = React.useState(\'\'),\n _React$useState26 = _slicedToArray(_React$useState25, 2),\n inviteGroupId = _React$useState26[0],\n setInviteGroupId = _React$useState26[1];\n var _React$useState27 = React.useState(\'\'),\n _React$useState28 = _slicedToArray(_React$useState27, 2),\n copyState = _React$useState28[0],\n setCopyState = _React$useState28[1];\n var _React$useState29 = React.useState(\'\'),\n _React$useState30 = _slicedToArray(_React$useState29, 2),\n memberGroupId = _React$useState30[0],\n setMemberGroupId = _React$useState30[1];\n var _React$useState31 = React.useState(\'\'),\n _React$useState32 = _slicedToArray(_React$useState31, 2),\n memberPub = _React$useState32[0],\n setMemberPub = _React$useState32[1];\n var _React$useState33 = React.useState(null),\n _React$useState34 = _slicedToArray(_React$useState33, 2),\n preview = _React$useState34[0],\n setPreview = _React$useState34[1];\n var _React$useState35 = React.useState(\'\'),\n _React$useState36 = _slicedToArray(_React$useState35, 2),\n previewGroupId = _React$useState36[0],\n setPreviewGroupId = _React$useState36[1];\n var _React$useState37 = React.useState(\'\'),\n _React$useState38 = _slicedToArray(_React$useState37, 2),\n federationApplyStatus = _React$useState38[0],\n setFederationApplyStatus = _React$useState38[1];\n var rpc = React.useCallback(/*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(method) {\n var params,\n b,\n out,\n _args = arguments;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n params = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};\n b = bridgeRef && bridgeRef.current;\n if (!(!b || typeof b.callHubJsonRpc !== \'function\')) {\n _context.n = 1;\n break;\n }\n throw new Error(\'Bridge is not ready yet.\');\n case 1:\n _context.n = 2;\n return b.callHubJsonRpc(method, Object.assign({}, params, {\n adminToken: token\n }));\n case 2:\n out = _context.v;\n if (!out.error) {\n _context.n = 3;\n break;\n }\n throw new Error(out.error);\n case 3:\n return _context.a(2, out.result);\n }\n }, _callee);\n }));\n return function (_x) {\n return _ref2.apply(this, arguments);\n };\n }(), [bridgeRef, token]);\n var copyText = React.useCallback(/*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(key, value) {\n var _t;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n if (!(typeof navigator === \'undefined\' || !navigator.clipboard || typeof navigator.clipboard.writeText !== \'function\')) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2);\n case 1:\n _context2.p = 1;\n _context2.n = 2;\n return navigator.clipboard.writeText(String(value || \'\'));\n case 2:\n setCopyState(key);\n if (typeof window !== \'undefined\') {\n window.setTimeout(function () {\n return setCopyState(\'\');\n }, 1500);\n }\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t = _context2.v;\n case 4:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3]]);\n }));\n return function (_x2, _x3) {\n return _ref3.apply(this, arguments);\n };\n }(), []);\n var refresh = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var _yield$Promise$all, _yield$Promise$all2, c, g, i, ns, _t2;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n if (token) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n setError(null);\n setBusy(true);\n _context3.p = 2;\n _context3.n = 3;\n return Promise.all([rpc(\'ListCollaborationContacts\', {}), rpc(\'ListCollaborationGroups\', {}), rpc(\'ListCollaborationInvitations\', {}), rpc(\'ListPeers\', {})]);\n case 3:\n _yield$Promise$all = _context3.v;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 4);\n c = _yield$Promise$all2[0];\n g = _yield$Promise$all2[1];\n i = _yield$Promise$all2[2];\n ns = _yield$Promise$all2[3];\n setContacts(Array.isArray(c && c.contacts) ? c.contacts : []);\n setGroups(Array.isArray(g && g.groups) ? g.groups : []);\n setInvitations(Array.isArray(i && i.invitations) ? i.invitations : []);\n setPeers(Array.isArray(ns && ns.peers) ? ns.peers : []);\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t2 = _context3.v;\n setError(_t2 && _t2.message ? _t2.message : String(_t2));\n case 5:\n _context3.p = 5;\n setBusy(false);\n return _context3.f(5);\n case 6:\n return _context3.a(2);\n }\n }, _callee3, null, [[2, 4, 5, 6]]);\n })), [rpc, token]);\n React.useEffect(function () {\n if (!token) return;\n refresh();\n }, [token, refresh]);\n var groupMap = React.useMemo(function () {\n var out = {};\n var _iterator = _createForOfIteratorHelper(groups || []),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var g = _step.value;\n if (g && g.id) out[String(g.id)] = g;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return out;\n }, [groups]);\n var inviteStatusMeta = React.useCallback(function (inv) {\n var now = Date.now();\n var exp = Number(inv && inv.expiresAt);\n var expired = Number.isFinite(exp) && exp > 0 && now > exp && String(inv.status || \'\') === \'pending\';\n var raw = expired ? \'expired\' : String(inv && inv.status || \'pending\').toLowerCase();\n if (raw === \'accepted\') return {\n text: \'accepted\',\n color: \'green\'\n };\n if (raw === \'declined\') return {\n text: \'declined\',\n color: \'red\'\n };\n if (raw === \'expired\') return {\n text: \'expired\',\n color: \'grey\'\n };\n return {\n text: \'pending\',\n color: \'blue\'\n };\n }, []);\n var formatTs = React.useCallback(function (ts) {\n var n = Number(ts);\n if (!Number.isFinite(n) || n <= 0) return \'—\';\n try {\n return new Date(n).toLocaleString();\n } catch (_) {\n return \'—\';\n }\n }, []);\n if (!token) {\n return /*#__PURE__*/React.createElement(Segment, {\n style: {\n maxWidth: 720,\n margin: \'1em auto\'\n }\n }, /*#__PURE__*/React.createElement(Message, {\n warning: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Admin token required"), /*#__PURE__*/React.createElement("p", null, "Save the hub admin token from first-time setup, then open ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings/admin"\n }, "Admin"), ".")));\n }\n return /*#__PURE__*/React.createElement(Segment, {\n style: {\n maxWidth: 960,\n margin: \'1em auto\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n id: "collaboration-page-heading"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Collaboration", /*#__PURE__*/React.createElement(Header.Subheader, null, "Contacts, multisig-oriented groups, email invitations")))), error ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n onDismiss: function onDismiss() {\n return setError(null);\n },\n content: error\n }) : null, /*#__PURE__*/React.createElement(Button, {\n primary: true,\n icon: "refresh",\n content: "Refresh",\n loading: busy,\n disabled: busy,\n onClick: function onClick() {\n return refresh();\n }\n }), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Contacts"), /*#__PURE__*/React.createElement(Form, {\n onSubmit: (/*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(e) {\n var body, _t3;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n e.preventDefault();\n setBusy(true);\n setError(null);\n _context4.p = 1;\n body = {};\n if (newEmail.trim()) body.email = newEmail.trim();\n if (newPeerId.trim()) body.fabricPeerId = newPeerId.trim();\n if (newPub.trim()) body.publicKeyHex = newPub.trim();\n if (!(!body.email && !body.fabricPeerId)) {\n _context4.n = 2;\n break;\n }\n throw new Error(\'Enter an email and/or pick a Fabric peer id.\');\n case 2:\n _context4.n = 3;\n return rpc(\'AddCollaborationContact\', body);\n case 3:\n setNewEmail(\'\');\n setNewPeerId(\'\');\n setNewPub(\'\');\n _context4.n = 4;\n return refresh();\n case 4:\n _context4.n = 6;\n break;\n case 5:\n _context4.p = 5;\n _t3 = _context4.v;\n setError(_t3.message || String(_t3));\n case 6:\n _context4.p = 6;\n setBusy(false);\n return _context4.f(6);\n case 7:\n return _context4.a(2);\n }\n }, _callee4, null, [[1, 5, 6, 7]]);\n }));\n return function (_x4) {\n return _ref5.apply(this, arguments);\n };\n }())\n }, /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Input, {\n id: "collab-input-contact-email",\n label: "Email",\n placeholder: "friend@example.com",\n value: newEmail,\n onChange: function onChange(e, d) {\n return setNewEmail(d.value);\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n id: "collab-input-contact-peerid",\n label: "Fabric peer id (from list)",\n placeholder: "id1\\u2026 or webrtc:\\u2026",\n value: newPeerId,\n onChange: function onChange(e, d) {\n return setNewPeerId(d.value);\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n id: "collab-input-contact-pubkey",\n label: "Public key hex (optional)",\n placeholder: "02\\u2026 or x-only 64 hex",\n value: newPub,\n onChange: function onChange(e, d) {\n return setNewPub(d.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Button, {\n id: "collab-btn-contact-add",\n primary: true,\n type: "submit",\n loading: busy,\n disabled: busy\n }, "Add contact")), /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Label"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Email"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Fabric id"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Pubkey (x-only / hex)"), /*#__PURE__*/React.createElement(Table.HeaderCell, null))), /*#__PURE__*/React.createElement(Table.Body, null, (contacts || []).map(function (c) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: c.id\n }, /*#__PURE__*/React.createElement(Table.Cell, null, c.label || \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, c.email || \'—\'), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n wordBreak: \'break-all\'\n }\n }, c.fabricPeerId || \'—\'), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n wordBreak: \'break-all\'\n }\n }, c.publicKeyHex || \'—\'), /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n negative: true,\n type: "button",\n disabled: busy,\n onClick: /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var _t4;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.p = _context5.n) {\n case 0:\n setBusy(true);\n setError(null);\n _context5.p = 1;\n _context5.n = 2;\n return rpc(\'RemoveCollaborationContact\', {\n id: c.id\n });\n case 2:\n _context5.n = 3;\n return refresh();\n case 3:\n _context5.n = 5;\n break;\n case 4:\n _context5.p = 4;\n _t4 = _context5.v;\n setError(_t4.message || String(_t4));\n case 5:\n _context5.p = 5;\n setBusy(false);\n return _context5.f(5);\n case 6:\n return _context5.a(2);\n }\n }, _callee5, null, [[1, 4, 5, 6]]);\n }))\n }, "Remove")));\n }))), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, "Known peers (for paste):", \' \', (peers || []).slice(0, 12).map(function (p) {\n return /*#__PURE__*/React.createElement("code", {\n key: String(p.id),\n style: {\n marginRight: \'0.5em\'\n }\n }, String(p.id).slice(0, 18), "\\u2026");\n }), !peers || peers.length === 0 ? /*#__PURE__*/React.createElement("em", null, "none yet") : null), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Groups"), /*#__PURE__*/React.createElement(Form, {\n onSubmit: (/*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(e) {\n var _t5;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.p = _context6.n) {\n case 0:\n e.preventDefault();\n setBusy(true);\n setError(null);\n _context6.p = 1;\n _context6.n = 2;\n return rpc(\'CreateCollaborationGroup\', {\n name: groupName.trim(),\n threshold: Number(groupThreshold) || 1\n });\n case 2:\n setGroupName(\'\');\n setGroupThreshold(1);\n _context6.n = 3;\n return refresh();\n case 3:\n _context6.n = 5;\n break;\n case 4:\n _context6.p = 4;\n _t5 = _context6.v;\n setError(_t5.message || String(_t5));\n case 5:\n _context6.p = 5;\n setBusy(false);\n return _context6.f(5);\n case 6:\n return _context6.a(2);\n }\n }, _callee6, null, [[1, 4, 5, 6]]);\n }));\n return function (_x5) {\n return _ref7.apply(this, arguments);\n };\n }())\n }, /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement("div", {\n id: "collab-input-group-name"\n }, /*#__PURE__*/React.createElement(Form.Input, {\n label: "Name",\n value: groupName,\n onChange: function onChange(e, d) {\n return setGroupName(d.value);\n },\n required: true\n })), /*#__PURE__*/React.createElement(Form.Input, {\n id: "collab-input-group-threshold",\n label: "Threshold (m-of-n when keys resolve)",\n type: "number",\n min: 1,\n value: groupThreshold,\n onChange: function onChange(e, d) {\n return setGroupThreshold(Number(d.value) || 1);\n }\n })), /*#__PURE__*/React.createElement("span", {\n id: "collab-btn-group-create"\n }, /*#__PURE__*/React.createElement(Form.Button, {\n primary: true,\n type: "submit",\n loading: busy,\n disabled: busy\n }, "Create group"))), /*#__PURE__*/React.createElement(Form, {\n style: {\n marginTop: \'1em\'\n },\n onSubmit: (/*#__PURE__*/function () {\n var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(e) {\n var _t6;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.p = _context7.n) {\n case 0:\n e.preventDefault();\n if (!(!memberGroupId.trim() || !memberPub.trim())) {\n _context7.n = 1;\n break;\n }\n return _context7.a(2);\n case 1:\n setBusy(true);\n setError(null);\n _context7.p = 2;\n _context7.n = 3;\n return rpc(\'AddCollaborationGroupMember\', {\n groupId: memberGroupId.trim(),\n type: \'pubkey\',\n publicKeyHex: memberPub.trim()\n });\n case 3:\n setMemberPub(\'\');\n _context7.n = 4;\n return refresh();\n case 4:\n _context7.n = 6;\n break;\n case 5:\n _context7.p = 5;\n _t6 = _context7.v;\n setError(_t6.message || String(_t6));\n case 6:\n _context7.p = 6;\n setBusy(false);\n return _context7.f(6);\n case 7:\n return _context7.a(2);\n }\n }, _callee7, null, [[2, 5, 6, 7]]);\n }));\n return function (_x6) {\n return _ref8.apply(this, arguments);\n };\n }())\n }, /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Input, {\n id: "collab-input-member-groupid",\n label: "Group id",\n placeholder: "grp_\\u2026",\n value: memberGroupId,\n onChange: function onChange(e, d) {\n return setMemberGroupId(d.value);\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n id: "collab-input-member-pubkey",\n label: "Member secp256k1 pubkey (hex)",\n value: memberPub,\n onChange: function onChange(e, d) {\n return setMemberPub(d.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Button, {\n id: "collab-btn-member-add",\n type: "submit",\n loading: busy,\n disabled: busy\n }, "Add pubkey member")), /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n size: "small",\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Name"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Id"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "m"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Members"), /*#__PURE__*/React.createElement(Table.HeaderCell, null))), /*#__PURE__*/React.createElement(Table.Body, null, (groups || []).map(function (g) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: g.id\n }, /*#__PURE__*/React.createElement(Table.Cell, null, g.name), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n wordBreak: \'break-all\'\n }\n }, g.id), /*#__PURE__*/React.createElement(Table.Cell, null, g.threshold), /*#__PURE__*/React.createElement(Table.Cell, null, g.memberCount), /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, /*#__PURE__*/React.createElement(Button, {\n id: "collab-btn-preview-".concat(g.id),\n size: "mini",\n type: "button",\n disabled: busy,\n onClick: /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {\n var pr, pv, _t7;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.p = _context8.n) {\n case 0:\n setBusy(true);\n setError(null);\n _context8.p = 1;\n _context8.n = 2;\n return rpc(\'GetCollaborationGroupMultisigPreview\', {\n groupId: g.id\n });\n case 2:\n pr = _context8.v;\n pv = pr && pr.preview ? pr.preview : pr;\n setPreview(pv);\n setPreviewGroupId(g.id);\n setFederationApplyStatus(\'\');\n _context8.n = 4;\n break;\n case 3:\n _context8.p = 3;\n _t7 = _context8.v;\n setError(_t7.message || String(_t7));\n case 4:\n _context8.p = 4;\n setBusy(false);\n return _context8.f(4);\n case 5:\n return _context8.a(2);\n }\n }, _callee8, null, [[1, 3, 4, 5]]);\n }))\n }, "Preview")));\n }))), preview && previewGroupId ? /*#__PURE__*/React.createElement(Message, {\n info: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Multisig preview for ", previewGroupId), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0.55em\'\n }\n }, "Readiness:", \' \', Array.isArray(preview.missing) && preview.missing.length > 0 ? /*#__PURE__*/React.createElement(Label, {\n color: "orange",\n size: "small"\n }, "Missing keys (", preview.missing.length, ")") : /*#__PURE__*/React.createElement(Label, {\n color: "green",\n size: "small"\n }, "Ready"), \' \', /*#__PURE__*/React.createElement(Label, {\n size: "small"\n }, Number(preview.threshold || 0), "-of-", Number(preview.uniquePubkeys || 0))), preview.receiveReady && preview.receiveAddress ? /*#__PURE__*/React.createElement(Message, {\n positive: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Your group can now receive funds!"), /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.35em\',\n marginBottom: \'0.45em\'\n }\n }, "Taproot receive address: ", /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, preview.receiveAddress)), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n type: "button",\n basic: true,\n onClick: function onClick() {\n return copyText(\'receiveAddress\', preview.receiveAddress);\n }\n }, copyState === \'receiveAddress\' ? \'Copied address\' : \'Copy receive address\')) : null, preview.federationPolicy && preview.federationPolicy.ready ? /*#__PURE__*/React.createElement(Message, null, /*#__PURE__*/React.createElement(Message.Header, null, "Federation integration"), /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.35em\',\n marginBottom: \'0.5em\'\n }\n }, "This group can be reused as your distributed federation validator set. Vault address from the same signer policy:", \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, preview.federationPolicy.vaultAddress || \'—\')), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n type: "button",\n primary: true,\n disabled: busy,\n onClick: /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {\n var validators, thresholdNum, out, _t8;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.p = _context9.n) {\n case 0:\n setBusy(true);\n setError(null);\n setFederationApplyStatus(\'\');\n _context9.p = 1;\n validators = Array.isArray(preview.federationPolicy.validatorsCompressedSorted) ? preview.federationPolicy.validatorsCompressedSorted : [];\n thresholdNum = Number(preview.federationPolicy.threshold || preview.threshold || 1);\n if (validators.length) {\n _context9.n = 2;\n break;\n }\n throw new Error(\'No validators available in this group preview.\');\n case 2:\n _context9.n = 3;\n return rpc(\'SetDistributedFederationPolicy\', {\n validators: validators,\n threshold: thresholdNum\n });\n case 3:\n out = _context9.v;\n if (!(out && out.status === \'error\')) {\n _context9.n = 4;\n break;\n }\n throw new Error(out.message || \'Could not save federation policy.\');\n case 4:\n setFederationApplyStatus("Saved federation policy (".concat(thresholdNum, "-of-").concat(validators.length, ") from group ").concat(previewGroupId, "."));\n _context9.n = 6;\n break;\n case 5:\n _context9.p = 5;\n _t8 = _context9.v;\n setError(_t8 && _t8.message ? _t8.message : String(_t8));\n case 6:\n _context9.p = 6;\n setBusy(false);\n return _context9.f(6);\n case 7:\n return _context9.a(2);\n }\n }, _callee9, null, [[1, 5, 6, 7]]);\n }))\n }, "Use this group as federation policy"), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n type: "button",\n basic: true,\n onClick: function onClick() {\n return copyText(\'federationValidators\', JSON.stringify(preview.federationPolicy.validatorsCompressedSorted || [], null, 2));\n }\n }, copyState === \'federationValidators\' ? \'Copied validators\' : \'Copy federation validators\'), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings/federation",\n size: "mini",\n basic: true,\n type: "button"\n }, "Open federation settings"), federationApplyStatus ? /*#__PURE__*/React.createElement(Message, {\n positive: true,\n size: "small",\n style: {\n marginTop: \'0.75em\',\n marginBottom: 0\n },\n content: federationApplyStatus\n }) : null) : null, /*#__PURE__*/React.createElement("pre", {\n id: "collab-multisig-preview-json",\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-all\'\n }\n }, JSON.stringify(preview, null, 2))) : null, /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Invitations"), /*#__PURE__*/React.createElement(Form, {\n onSubmit: (/*#__PURE__*/function () {\n var _ref1 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0(e) {\n var body, _t9;\n return _regenerator().w(function (_context0) {\n while (1) switch (_context0.p = _context0.n) {\n case 0:\n e.preventDefault();\n setBusy(true);\n setError(null);\n _context0.p = 1;\n body = {};\n if (inviteEmail.trim()) body.email = inviteEmail.trim();\n if (invitePeerIdentity.trim()) body.recipientPeerIdentity = invitePeerIdentity.trim();\n if (inviteGroupId.trim()) body.groupId = inviteGroupId.trim();\n if (!(!body.email && !body.recipientPeerIdentity)) {\n _context0.n = 2;\n break;\n }\n throw new Error(\'Enter invite email and/or recipient peer identity (id1...).\');\n case 2:\n _context0.n = 3;\n return rpc(\'CreateCollaborationInvitation\', body);\n case 3:\n setInviteEmail(\'\');\n setInvitePeerIdentity(\'\');\n setInviteGroupId(\'\');\n _context0.n = 4;\n return refresh();\n case 4:\n _context0.n = 6;\n break;\n case 5:\n _context0.p = 5;\n _t9 = _context0.v;\n setError(_t9.message || String(_t9));\n case 6:\n _context0.p = 6;\n setBusy(false);\n return _context0.f(6);\n case 7:\n return _context0.a(2);\n }\n }, _callee0, null, [[1, 5, 6, 7]]);\n }));\n return function (_x7) {\n return _ref1.apply(this, arguments);\n };\n }())\n }, /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Input, {\n id: "collab-input-invite-email",\n label: "Email (optional)",\n placeholder: "invitee@example.com",\n value: inviteEmail,\n onChange: function onChange(e, d) {\n return setInviteEmail(d.value);\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n id: "collab-input-invite-peer",\n label: "Recipient peer identity (id1..., optional)",\n placeholder: "id1...",\n value: invitePeerIdentity,\n onChange: function onChange(e, d) {\n return setInvitePeerIdentity(d.value);\n }\n }), /*#__PURE__*/React.createElement(Form.Select, {\n id: "collab-input-invite-group",\n label: "Attach group (optional)",\n placeholder: "Select group",\n value: inviteGroupId,\n onChange: function onChange(e, d) {\n return setInviteGroupId(String(d.value || \'\'));\n },\n options: [{\n key: \'_none\',\n value: \'\',\n text: \'No group attached\'\n }].concat(_toConsumableArray((groups || []).map(function (g) {\n return {\n key: g.id,\n value: g.id,\n text: "".concat(g.name, " (").concat(g.id, ")")\n };\n })))\n })), /*#__PURE__*/React.createElement(Form.Button, {\n id: "collab-btn-invite-send",\n primary: true,\n type: "submit",\n loading: busy,\n disabled: busy\n }, "Send invitation")), /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Email"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Recipient peer"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Group"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Status"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Expires"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Id"), /*#__PURE__*/React.createElement(Table.HeaderCell, null))), /*#__PURE__*/React.createElement(Table.Body, null, (invitations || []).map(function (inv) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: inv.id\n }, /*#__PURE__*/React.createElement(Table.Cell, null, inv.email || \'—\'), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n wordBreak: \'break-all\'\n }\n }, inv.recipientPeerIdentity || \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, inv.groupId ? groupMap[inv.groupId] && groupMap[inv.groupId].name || inv.groupId : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, function () {\n var m = inviteStatusMeta(inv);\n return /*#__PURE__*/React.createElement(Label, {\n color: m.color,\n size: "mini"\n }, m.text);\n }()), /*#__PURE__*/React.createElement(Table.Cell, null, formatTs(inv.expiresAt)), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n wordBreak: \'break-all\'\n }\n }, inv.id), /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n negative: true,\n type: "button",\n disabled: busy,\n onClick: /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee1() {\n var _t0;\n return _regenerator().w(function (_context1) {\n while (1) switch (_context1.p = _context1.n) {\n case 0:\n setBusy(true);\n setError(null);\n _context1.p = 1;\n _context1.n = 2;\n return rpc(\'RemoveCollaborationInvitation\', {\n id: inv.id\n });\n case 2:\n _context1.n = 3;\n return refresh();\n case 3:\n _context1.n = 5;\n break;\n case 4:\n _context1.p = 4;\n _t0 = _context1.v;\n setError(_t0.message || String(_t0));\n case 5:\n _context1.p = 5;\n setBusy(false);\n return _context1.f(5);\n case 6:\n return _context1.a(2);\n }\n }, _callee1, null, [[1, 4, 5, 6]]);\n }))\n }, "Remove")));\n }))), preview && previewGroupId ? /*#__PURE__*/React.createElement(Message, null, /*#__PURE__*/React.createElement(Message.Header, null, "Execution handoff"), /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.4em\'\n }\n }, "Use this group preview as the input for contract execution policy authoring on the", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/contracts"\n }, "Contracts"), " page."), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n type: "button",\n basic: true,\n onClick: function onClick() {\n return copyText(\'preview\', JSON.stringify(preview, null, 2));\n }\n }, copyState === \'preview\' ? \'Copied preview\' : \'Copy preview JSON\'), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n type: "button",\n basic: true,\n onClick: function onClick() {\n return copyText(\'fingerprint\', preview.policyFingerprint || \'\');\n },\n disabled: !preview.policyFingerprint\n }, copyState === \'fingerprint\' ? \'Copied fingerprint\' : \'Copy policy fingerprint\'), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n type: "button",\n basic: true,\n onClick: function onClick() {\n return copyText(\'descriptor\', preview.receiveDescriptor || \'\');\n },\n disabled: !preview.receiveDescriptor\n }, copyState === \'descriptor\' ? \'Copied descriptor\' : \'Copy Taproot descriptor\')) : null);\n}\nmodule.exports = CollaborationHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZDtBQUVBa00sTUFBTSxDQUFDQyxPQUFPLEdBQUduUSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvQ29sbGFib3JhdGlvbkhvbWUuanM/M2U2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluayB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuY29uc3Qge1xuICBCdXR0b24sXG4gIERpdmlkZXIsXG4gIEZvcm0sXG4gIEhlYWRlcixcbiAgSWNvbixcbiAgTGFiZWwsXG4gIE1lc3NhZ2UsXG4gIFNlZ21lbnQsXG4gIFRhYmxlXG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IHsgcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YkFkbWluVG9rZW5Ccm93c2VyJyk7XG5cbi8qKlxuICogSHViIG9wZXJhdG9yIFVJOiBjb250YWN0cywgZ3JvdXBzIChuZXN0ZWQgbWVtYmVycyArIG11bHRpc2lnIHByZXZpZXcpLCBpbnZpdGF0aW9ucy5cbiAqIFVzZXMge0BsaW5rIEJyaWRnZSNjYWxsSHViSnNvblJwY30g4oaSIFBPU1QgL3NlcnZpY2VzL3JwYyAoYWRtaW4gdG9rZW4gb24gZWFjaCBjYWxsKS5cbiAqL1xuZnVuY3Rpb24gQ29sbGFib3JhdGlvbkhvbWUgKHsgYnJpZGdlUmVmLCBhZG1pblRva2VuIH0pIHtcbiAgY29uc3QgdG9rZW4gPSByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKGFkbWluVG9rZW4pO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbYnVzeSwgc2V0QnVzeV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtjb250YWN0cywgc2V0Q29udGFjdHNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICBjb25zdCBbZ3JvdXBzLCBzZXRHcm91cHNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICBjb25zdCBbaW52aXRhdGlvbnMsIHNldEludml0YXRpb25zXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgY29uc3QgW3BlZXJzLCBzZXRQZWVyc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtuZXdFbWFpbCwgc2V0TmV3RW1haWxdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbbmV3UGVlcklkLCBzZXROZXdQZWVySWRdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbbmV3UHViLCBzZXROZXdQdWJdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbZ3JvdXBOYW1lLCBzZXRHcm91cE5hbWVdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbZ3JvdXBUaHJlc2hvbGQsIHNldEdyb3VwVGhyZXNob2xkXSA9IFJlYWN0LnVzZVN0YXRlKDEpO1xuICBjb25zdCBbaW52aXRlRW1haWwsIHNldEludml0ZUVtYWlsXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2ludml0ZVBlZXJJZGVudGl0eSwgc2V0SW52aXRlUGVlcklkZW50aXR5XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2ludml0ZUdyb3VwSWQsIHNldEludml0ZUdyb3VwSWRdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbY29weVN0YXRlLCBzZXRDb3B5U3RhdGVdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbbWVtYmVyR3JvdXBJZCwgc2V0TWVtYmVyR3JvdXBJZF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFttZW1iZXJQdWIsIHNldE1lbWJlclB1Yl0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbcHJldmlld0dyb3VwSWQsIHNldFByZXZpZXdHcm91cElkXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2ZlZGVyYXRpb25BcHBseVN0YXR1cywgc2V0RmVkZXJhdGlvbkFwcGx5U3RhdHVzXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcblxuICBjb25zdCBycGMgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAobWV0aG9kLCBwYXJhbXMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IGIgPSBicmlkZ2VSZWYgJiYgYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFiIHx8IHR5cGVvZiBiLmNhbGxIdWJKc29uUnBjICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JyaWRnZSBpcyBub3QgcmVhZHkgeWV0LicpO1xuICAgIH1cbiAgICBjb25zdCBvdXQgPSBhd2FpdCBiLmNhbGxIdWJKc29uUnBjKG1ldGhvZCwgT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zLCB7IGFkbWluVG9rZW46IHRva2VuIH0pKTtcbiAgICBpZiAob3V0LmVycm9yKSB0aHJvdyBuZXcgRXJyb3Iob3V0LmVycm9yKTtcbiAgICByZXR1cm4gb3V0LnJlc3VsdDtcbiAgfSwgW2JyaWRnZVJlZiwgdG9rZW5dKTtcblxuICBjb25zdCBjb3B5VGV4dCA9IFJlYWN0LnVzZUNhbGxiYWNrKGFzeW5jIChrZXksIHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnIHx8ICFuYXZpZ2F0b3IuY2xpcGJvYXJkIHx8IHR5cGVvZiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChTdHJpbmcodmFsdWUgfHwgJycpKTtcbiAgICAgIHNldENvcHlTdGF0ZShrZXkpO1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHNldENvcHlTdGF0ZSgnJyksIDE1MDApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHt9XG4gIH0sIFtdKTtcblxuICBjb25zdCByZWZyZXNoID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghdG9rZW4pIHJldHVybjtcbiAgICBzZXRFcnJvcihudWxsKTtcbiAgICBzZXRCdXN5KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBbYywgZywgaSwgbnNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBycGMoJ0xpc3RDb2xsYWJvcmF0aW9uQ29udGFjdHMnLCB7fSksXG4gICAgICAgIHJwYygnTGlzdENvbGxhYm9yYXRpb25Hcm91cHMnLCB7fSksXG4gICAgICAgIHJwYygnTGlzdENvbGxhYm9yYXRpb25JbnZpdGF0aW9ucycsIHt9KSxcbiAgICAgICAgcnBjKCdMaXN0UGVlcnMnLCB7fSlcbiAgICAgIF0pO1xuICAgICAgc2V0Q29udGFjdHMoQXJyYXkuaXNBcnJheShjICYmIGMuY29udGFjdHMpID8gYy5jb250YWN0cyA6IFtdKTtcbiAgICAgIHNldEdyb3VwcyhBcnJheS5pc0FycmF5KGcgJiYgZy5ncm91cHMpID8gZy5ncm91cHMgOiBbXSk7XG4gICAgICBzZXRJbnZpdGF0aW9ucyhBcnJheS5pc0FycmF5KGkgJiYgaS5pbnZpdGF0aW9ucykgPyBpLmludml0YXRpb25zIDogW10pO1xuICAgICAgc2V0UGVlcnMoQXJyYXkuaXNBcnJheShucyAmJiBucy5wZWVycykgPyBucy5wZWVycyA6IFtdKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXRFcnJvcihlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldEJ1c3koZmFsc2UpO1xuICAgIH1cbiAgfSwgW3JwYywgdG9rZW5dKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghdG9rZW4pIHJldHVybjtcbiAgICByZWZyZXNoKCk7XG4gIH0sIFt0b2tlbiwgcmVmcmVzaF0pO1xuXG4gIGNvbnN0IGdyb3VwTWFwID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgb3V0ID0ge307XG4gICAgZm9yIChjb25zdCBnIG9mIGdyb3VwcyB8fCBbXSkge1xuICAgICAgaWYgKGcgJiYgZy5pZCkgb3V0W1N0cmluZyhnLmlkKV0gPSBnO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9LCBbZ3JvdXBzXSk7XG5cbiAgY29uc3QgaW52aXRlU3RhdHVzTWV0YSA9IFJlYWN0LnVzZUNhbGxiYWNrKChpbnYpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGV4cCA9IE51bWJlcihpbnYgJiYgaW52LmV4cGlyZXNBdCk7XG4gICAgY29uc3QgZXhwaXJlZCA9IE51bWJlci5pc0Zpbml0ZShleHApICYmIGV4cCA+IDAgJiYgbm93ID4gZXhwICYmIFN0cmluZyhpbnYuc3RhdHVzIHx8ICcnKSA9PT0gJ3BlbmRpbmcnO1xuICAgIGNvbnN0IHJhdyA9IGV4cGlyZWQgPyAnZXhwaXJlZCcgOiBTdHJpbmcoKGludiAmJiBpbnYuc3RhdHVzKSB8fCAncGVuZGluZycpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHJhdyA9PT0gJ2FjY2VwdGVkJykgcmV0dXJuIHsgdGV4dDogJ2FjY2VwdGVkJywgY29sb3I6ICdncmVlbicgfTtcbiAgICBpZiAocmF3ID09PSAnZGVjbGluZWQnKSByZXR1cm4geyB0ZXh0OiAnZGVjbGluZWQnLCBjb2xvcjogJ3JlZCcgfTtcbiAgICBpZiAocmF3ID09PSAnZXhwaXJlZCcpIHJldHVybiB7IHRleHQ6ICdleHBpcmVkJywgY29sb3I6ICdncmV5JyB9O1xuICAgIHJldHVybiB7IHRleHQ6ICdwZW5kaW5nJywgY29sb3I6ICdibHVlJyB9O1xuICB9LCBbXSk7XG5cbiAgY29uc3QgZm9ybWF0VHMgPSBSZWFjdC51c2VDYWxsYmFjaygodHMpID0+IHtcbiAgICBjb25zdCBuID0gTnVtYmVyKHRzKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuKSB8fCBuIDw9IDApIHJldHVybiAn4oCUJztcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuICfigJQnO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGlmICghdG9rZW4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFNlZ21lbnQgc3R5bGU9e3sgbWF4V2lkdGg6IDcyMCwgbWFyZ2luOiAnMWVtIGF1dG8nIH19PlxuICAgICAgICA8TWVzc2FnZSB3YXJuaW5nPlxuICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5BZG1pbiB0b2tlbiByZXF1aXJlZDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgPHA+U2F2ZSB0aGUgaHViIGFkbWluIHRva2VuIGZyb20gZmlyc3QtdGltZSBzZXR1cCwgdGhlbiBvcGVuIDxMaW5rIHRvPVwiL3NldHRpbmdzL2FkbWluXCI+QWRtaW48L0xpbms+LjwvcD5cbiAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgPC9TZWdtZW50PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTZWdtZW50IHN0eWxlPXt7IG1heFdpZHRoOiA5NjAsIG1hcmdpbjogJzFlbSBhdXRvJyB9fT5cbiAgICAgIDxkaXYgaWQ9XCJjb2xsYWJvcmF0aW9uLXBhZ2UtaGVhZGluZ1wiPlxuICAgICAgICA8SGVhZGVyIGFzPVwiaDJcIj5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwidXNlcnNcIiAvPlxuICAgICAgICAgIDxIZWFkZXIuQ29udGVudD5cbiAgICAgICAgICAgIENvbGxhYm9yYXRpb25cbiAgICAgICAgICAgIDxIZWFkZXIuU3ViaGVhZGVyPkNvbnRhY3RzLCBtdWx0aXNpZy1vcmllbnRlZCBncm91cHMsIGVtYWlsIGludml0YXRpb25zPC9IZWFkZXIuU3ViaGVhZGVyPlxuICAgICAgICAgIDwvSGVhZGVyLkNvbnRlbnQ+XG4gICAgICAgIDwvSGVhZGVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHtlcnJvciA/IChcbiAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmUgb25EaXNtaXNzPXsoKSA9PiBzZXRFcnJvcihudWxsKX0gY29udGVudD17ZXJyb3J9IC8+XG4gICAgICApIDogbnVsbH1cblxuICAgICAgPEJ1dHRvbiBwcmltYXJ5IGljb249XCJyZWZyZXNoXCIgY29udGVudD1cIlJlZnJlc2hcIiBsb2FkaW5nPXtidXN5fSBkaXNhYmxlZD17YnVzeX0gb25DbGljaz17KCkgPT4gcmVmcmVzaCgpfSAvPlxuXG4gICAgICA8RGl2aWRlciAvPlxuXG4gICAgICA8SGVhZGVyIGFzPVwiaDNcIj5Db250YWN0czwvSGVhZGVyPlxuICAgICAgPEZvcm1cbiAgICAgICAgb25TdWJtaXQ9e2FzeW5jIChlKSA9PiB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB7fTtcbiAgICAgICAgICAgIGlmIChuZXdFbWFpbC50cmltKCkpIGJvZHkuZW1haWwgPSBuZXdFbWFpbC50cmltKCk7XG4gICAgICAgICAgICBpZiAobmV3UGVlcklkLnRyaW0oKSkgYm9keS5mYWJyaWNQZWVySWQgPSBuZXdQZWVySWQudHJpbSgpO1xuICAgICAgICAgICAgaWYgKG5ld1B1Yi50cmltKCkpIGJvZHkucHVibGljS2V5SGV4ID0gbmV3UHViLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICghYm9keS5lbWFpbCAmJiAhYm9keS5mYWJyaWNQZWVySWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbnRlciBhbiBlbWFpbCBhbmQvb3IgcGljayBhIEZhYnJpYyBwZWVyIGlkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgcnBjKCdBZGRDb2xsYWJvcmF0aW9uQ29udGFjdCcsIGJvZHkpO1xuICAgICAgICAgICAgc2V0TmV3RW1haWwoJycpO1xuICAgICAgICAgICAgc2V0TmV3UGVlcklkKCcnKTtcbiAgICAgICAgICAgIHNldE5ld1B1YignJyk7XG4gICAgICAgICAgICBhd2FpdCByZWZyZXNoKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNldEJ1c3koZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPEZvcm0uR3JvdXAgd2lkdGhzPVwiZXF1YWxcIj5cbiAgICAgICAgICA8Rm9ybS5JbnB1dCBpZD1cImNvbGxhYi1pbnB1dC1jb250YWN0LWVtYWlsXCIgbGFiZWw9XCJFbWFpbFwiIHBsYWNlaG9sZGVyPVwiZnJpZW5kQGV4YW1wbGUuY29tXCIgdmFsdWU9e25ld0VtYWlsfSBvbkNoYW5nZT17KGUsIGQpID0+IHNldE5ld0VtYWlsKGQudmFsdWUpfSAvPlxuICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICBpZD1cImNvbGxhYi1pbnB1dC1jb250YWN0LXBlZXJpZFwiXG4gICAgICAgICAgICBsYWJlbD1cIkZhYnJpYyBwZWVyIGlkIChmcm9tIGxpc3QpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiaWQx4oCmIG9yIHdlYnJ0YzrigKZcIlxuICAgICAgICAgICAgdmFsdWU9e25ld1BlZXJJZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgZCkgPT4gc2V0TmV3UGVlcklkKGQudmFsdWUpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEZvcm0uSW5wdXQgaWQ9XCJjb2xsYWItaW5wdXQtY29udGFjdC1wdWJrZXlcIiBsYWJlbD1cIlB1YmxpYyBrZXkgaGV4IChvcHRpb25hbClcIiBwbGFjZWhvbGRlcj1cIjAy4oCmIG9yIHgtb25seSA2NCBoZXhcIiB2YWx1ZT17bmV3UHVifSBvbkNoYW5nZT17KGUsIGQpID0+IHNldE5ld1B1YihkLnZhbHVlKX0gLz5cbiAgICAgICAgPC9Gb3JtLkdyb3VwPlxuICAgICAgICA8Rm9ybS5CdXR0b24gaWQ9XCJjb2xsYWItYnRuLWNvbnRhY3QtYWRkXCIgcHJpbWFyeSB0eXBlPVwic3VibWl0XCIgbG9hZGluZz17YnVzeX0gZGlzYWJsZWQ9e2J1c3l9PkFkZCBjb250YWN0PC9Gb3JtLkJ1dHRvbj5cbiAgICAgIDwvRm9ybT5cbiAgICAgIDxUYWJsZSBjb21wYWN0IGNlbGxlZCBzaXplPVwic21hbGxcIj5cbiAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+TGFiZWw8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5FbWFpbDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkZhYnJpYyBpZDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlB1YmtleSAoeC1vbmx5IC8gaGV4KTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsIC8+XG4gICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICB7KGNvbnRhY3RzIHx8IFtdKS5tYXAoKGMpID0+IChcbiAgICAgICAgICAgIDxUYWJsZS5Sb3cga2V5PXtjLmlkfT5cbiAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2MubGFiZWwgfHwgJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Yy5lbWFpbCB8fCAn4oCUJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5DZWxsIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e2MuZmFicmljUGVlcklkIHx8ICfigJQnfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fT57Yy5wdWJsaWNLZXlIZXggfHwgJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBjb2xsYXBzaW5nPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtidXN5fVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRCdXN5KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBycGMoJ1JlbW92ZUNvbGxhYm9yYXRpb25Db250YWN0JywgeyBpZDogYy5pZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlIHx8IFN0cmluZyhlcnIpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBSZW1vdmVcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgIDwvVGFibGU+XG4gICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJyB9fT5cbiAgICAgICAgS25vd24gcGVlcnMgKGZvciBwYXN0ZSk6eycgJ31cbiAgICAgICAgeyhwZWVycyB8fCBbXSkuc2xpY2UoMCwgMTIpLm1hcCgocCkgPT4gKFxuICAgICAgICAgIDxjb2RlIGtleT17U3RyaW5nKHAuaWQpfSBzdHlsZT17eyBtYXJnaW5SaWdodDogJzAuNWVtJyB9fT57U3RyaW5nKHAuaWQpLnNsaWNlKDAsIDE4KX3igKY8L2NvZGU+XG4gICAgICAgICkpfVxuICAgICAgICB7KCFwZWVycyB8fCBwZWVycy5sZW5ndGggPT09IDApID8gPGVtPm5vbmUgeWV0PC9lbT4gOiBudWxsfVxuICAgICAgPC9wPlxuXG4gICAgICA8RGl2aWRlciAvPlxuXG4gICAgICA8SGVhZGVyIGFzPVwiaDNcIj5Hcm91cHM8L0hlYWRlcj5cbiAgICAgIDxGb3JtXG4gICAgICAgIG9uU3VibWl0PXthc3luYyAoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBzZXRCdXN5KHRydWUpO1xuICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBycGMoJ0NyZWF0ZUNvbGxhYm9yYXRpb25Hcm91cCcsIHtcbiAgICAgICAgICAgICAgbmFtZTogZ3JvdXBOYW1lLnRyaW0oKSxcbiAgICAgICAgICAgICAgdGhyZXNob2xkOiBOdW1iZXIoZ3JvdXBUaHJlc2hvbGQpIHx8IDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0R3JvdXBOYW1lKCcnKTtcbiAgICAgICAgICAgIHNldEdyb3VwVGhyZXNob2xkKDEpO1xuICAgICAgICAgICAgYXdhaXQgcmVmcmVzaCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgfHwgU3RyaW5nKGVycikpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxGb3JtLkdyb3VwIHdpZHRocz1cImVxdWFsXCI+XG4gICAgICAgICAgPGRpdiBpZD1cImNvbGxhYi1pbnB1dC1ncm91cC1uYW1lXCI+XG4gICAgICAgICAgICA8Rm9ybS5JbnB1dCBsYWJlbD1cIk5hbWVcIiB2YWx1ZT17Z3JvdXBOYW1lfSBvbkNoYW5nZT17KGUsIGQpID0+IHNldEdyb3VwTmFtZShkLnZhbHVlKX0gcmVxdWlyZWQgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgICAgaWQ9XCJjb2xsYWItaW5wdXQtZ3JvdXAtdGhyZXNob2xkXCJcbiAgICAgICAgICAgIGxhYmVsPVwiVGhyZXNob2xkIChtLW9mLW4gd2hlbiBrZXlzIHJlc29sdmUpXCJcbiAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgbWluPXsxfVxuICAgICAgICAgICAgdmFsdWU9e2dyb3VwVGhyZXNob2xkfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCBkKSA9PiBzZXRHcm91cFRocmVzaG9sZChOdW1iZXIoZC52YWx1ZSkgfHwgMSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Gb3JtLkdyb3VwPlxuICAgICAgICA8c3BhbiBpZD1cImNvbGxhYi1idG4tZ3JvdXAtY3JlYXRlXCI+XG4gICAgICAgICAgPEZvcm0uQnV0dG9uIHByaW1hcnkgdHlwZT1cInN1Ym1pdFwiIGxvYWRpbmc9e2J1c3l9IGRpc2FibGVkPXtidXN5fT5DcmVhdGUgZ3JvdXA8L0Zvcm0uQnV0dG9uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L0Zvcm0+XG5cbiAgICAgIDxGb3JtXG4gICAgICAgIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX1cbiAgICAgICAgb25TdWJtaXQ9e2FzeW5jIChlKSA9PiB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmICghbWVtYmVyR3JvdXBJZC50cmltKCkgfHwgIW1lbWJlclB1Yi50cmltKCkpIHJldHVybjtcbiAgICAgICAgICBzZXRCdXN5KHRydWUpO1xuICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBycGMoJ0FkZENvbGxhYm9yYXRpb25Hcm91cE1lbWJlcicsIHtcbiAgICAgICAgICAgICAgZ3JvdXBJZDogbWVtYmVyR3JvdXBJZC50cmltKCksXG4gICAgICAgICAgICAgIHR5cGU6ICdwdWJrZXknLFxuICAgICAgICAgICAgICBwdWJsaWNLZXlIZXg6IG1lbWJlclB1Yi50cmltKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2V0TWVtYmVyUHViKCcnKTtcbiAgICAgICAgICAgIGF3YWl0IHJlZnJlc2goKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlIHx8IFN0cmluZyhlcnIpKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0QnVzeShmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8Rm9ybS5Hcm91cCB3aWR0aHM9XCJlcXVhbFwiPlxuICAgICAgICAgIDxGb3JtLklucHV0IGlkPVwiY29sbGFiLWlucHV0LW1lbWJlci1ncm91cGlkXCIgbGFiZWw9XCJHcm91cCBpZFwiIHBsYWNlaG9sZGVyPVwiZ3JwX+KAplwiIHZhbHVlPXttZW1iZXJHcm91cElkfSBvbkNoYW5nZT17KGUsIGQpID0+IHNldE1lbWJlckdyb3VwSWQoZC52YWx1ZSl9IC8+XG4gICAgICAgICAgPEZvcm0uSW5wdXQgaWQ9XCJjb2xsYWItaW5wdXQtbWVtYmVyLXB1YmtleVwiIGxhYmVsPVwiTWVtYmVyIHNlY3AyNTZrMSBwdWJrZXkgKGhleClcIiB2YWx1ZT17bWVtYmVyUHVifSBvbkNoYW5nZT17KGUsIGQpID0+IHNldE1lbWJlclB1YihkLnZhbHVlKX0gLz5cbiAgICAgICAgPC9Gb3JtLkdyb3VwPlxuICAgICAgICA8Rm9ybS5CdXR0b24gaWQ9XCJjb2xsYWItYnRuLW1lbWJlci1hZGRcIiB0eXBlPVwic3VibWl0XCIgbG9hZGluZz17YnVzeX0gZGlzYWJsZWQ9e2J1c3l9PkFkZCBwdWJrZXkgbWVtYmVyPC9Gb3JtLkJ1dHRvbj5cbiAgICAgIDwvRm9ybT5cblxuICAgICAgPFRhYmxlIGNvbXBhY3QgY2VsbGVkIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgIDxUYWJsZS5IZWFkZXI+XG4gICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPk5hbWU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5JZDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPm08L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5NZW1iZXJzPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGwgLz5cbiAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICAgIDxUYWJsZS5Cb2R5PlxuICAgICAgICAgIHsoZ3JvdXBzIHx8IFtdKS5tYXAoKGcpID0+IChcbiAgICAgICAgICAgIDxUYWJsZS5Sb3cga2V5PXtnLmlkfT5cbiAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2cubmFtZX08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5DZWxsIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e2cuaWR9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Zy50aHJlc2hvbGR9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Zy5tZW1iZXJDb3VudH08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5DZWxsIGNvbGxhcHNpbmc+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgaWQ9e2Bjb2xsYWItYnRuLXByZXZpZXctJHtnLmlkfWB9XG4gICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtidXN5fVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRCdXN5KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwciA9IGF3YWl0IHJwYygnR2V0Q29sbGFib3JhdGlvbkdyb3VwTXVsdGlzaWdQcmV2aWV3JywgeyBncm91cElkOiBnLmlkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB2ID0gcHIgJiYgcHIucHJldmlldyA/IHByLnByZXZpZXcgOiBwcjtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRQcmV2aWV3KHB2KTtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRQcmV2aWV3R3JvdXBJZChnLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRGZWRlcmF0aW9uQXBwbHlTdGF0dXMoJycpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0QnVzeShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgUHJldmlld1xuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgPC9UYWJsZT5cbiAgICAgIHtwcmV2aWV3ICYmIHByZXZpZXdHcm91cElkID8gKFxuICAgICAgICA8TWVzc2FnZSBpbmZvPlxuICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5NdWx0aXNpZyBwcmV2aWV3IGZvciB7cHJldmlld0dyb3VwSWR9PC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwLjU1ZW0nIH19PlxuICAgICAgICAgICAgUmVhZGluZXNzOnsnICd9XG4gICAgICAgICAgICB7QXJyYXkuaXNBcnJheShwcmV2aWV3Lm1pc3NpbmcpICYmIHByZXZpZXcubWlzc2luZy5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICA8TGFiZWwgY29sb3I9XCJvcmFuZ2VcIiBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgICBNaXNzaW5nIGtleXMgKHtwcmV2aWV3Lm1pc3NpbmcubGVuZ3RofSlcbiAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMYWJlbCBjb2xvcj1cImdyZWVuXCIgc2l6ZT1cInNtYWxsXCI+UmVhZHk8L0xhYmVsPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICA8TGFiZWwgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgIHtOdW1iZXIocHJldmlldy50aHJlc2hvbGQgfHwgMCl9LW9mLXtOdW1iZXIocHJldmlldy51bmlxdWVQdWJrZXlzIHx8IDApfVxuICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAge3ByZXZpZXcucmVjZWl2ZVJlYWR5ICYmIHByZXZpZXcucmVjZWl2ZUFkZHJlc3MgPyAoXG4gICAgICAgICAgICA8TWVzc2FnZSBwb3NpdGl2ZT5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPllvdXIgZ3JvdXAgY2FuIG5vdyByZWNlaXZlIGZ1bmRzITwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMzVlbScsIG1hcmdpbkJvdHRvbTogJzAuNDVlbScgfX0+XG4gICAgICAgICAgICAgICAgVGFwcm9vdCByZWNlaXZlIGFkZHJlc3M6IDxjb2RlIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e3ByZXZpZXcucmVjZWl2ZUFkZHJlc3N9PC9jb2RlPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb3B5VGV4dCgncmVjZWl2ZUFkZHJlc3MnLCBwcmV2aWV3LnJlY2VpdmVBZGRyZXNzKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtjb3B5U3RhdGUgPT09ICdyZWNlaXZlQWRkcmVzcycgPyAnQ29waWVkIGFkZHJlc3MnIDogJ0NvcHkgcmVjZWl2ZSBhZGRyZXNzJ31cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3ByZXZpZXcuZmVkZXJhdGlvblBvbGljeSAmJiBwcmV2aWV3LmZlZGVyYXRpb25Qb2xpY3kucmVhZHkgPyAoXG4gICAgICAgICAgICA8TWVzc2FnZT5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkZlZGVyYXRpb24gaW50ZWdyYXRpb248L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjM1ZW0nLCBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgVGhpcyBncm91cCBjYW4gYmUgcmV1c2VkIGFzIHlvdXIgZGlzdHJpYnV0ZWQgZmVkZXJhdGlvbiB2YWxpZGF0b3Igc2V0LlxuICAgICAgICAgICAgICAgIFZhdWx0IGFkZHJlc3MgZnJvbSB0aGUgc2FtZSBzaWduZXIgcG9saWN5OnsnICd9XG4gICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fT57cHJldmlldy5mZWRlcmF0aW9uUG9saWN5LnZhdWx0QWRkcmVzcyB8fCAn4oCUJ308L2NvZGU+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2J1c3l9XG4gICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0QnVzeSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgICAgc2V0RmVkZXJhdGlvbkFwcGx5U3RhdHVzKCcnKTtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBBcnJheS5pc0FycmF5KHByZXZpZXcuZmVkZXJhdGlvblBvbGljeS52YWxpZGF0b3JzQ29tcHJlc3NlZFNvcnRlZClcbiAgICAgICAgICAgICAgICAgICAgICA/IHByZXZpZXcuZmVkZXJhdGlvblBvbGljeS52YWxpZGF0b3JzQ29tcHJlc3NlZFNvcnRlZFxuICAgICAgICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRocmVzaG9sZE51bSA9IE51bWJlcihwcmV2aWV3LmZlZGVyYXRpb25Qb2xpY3kudGhyZXNob2xkIHx8IHByZXZpZXcudGhyZXNob2xkIHx8IDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRvcnMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ05vIHZhbGlkYXRvcnMgYXZhaWxhYmxlIGluIHRoaXMgZ3JvdXAgcHJldmlldy4nKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0ID0gYXdhaXQgcnBjKCdTZXREaXN0cmlidXRlZEZlZGVyYXRpb25Qb2xpY3knLCB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyxcbiAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQ6IHRocmVzaG9sZE51bVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dCAmJiBvdXQuc3RhdHVzID09PSAnZXJyb3InKSB0aHJvdyBuZXcgRXJyb3Iob3V0Lm1lc3NhZ2UgfHwgJ0NvdWxkIG5vdCBzYXZlIGZlZGVyYXRpb24gcG9saWN5LicpO1xuICAgICAgICAgICAgICAgICAgICBzZXRGZWRlcmF0aW9uQXBwbHlTdGF0dXMoYFNhdmVkIGZlZGVyYXRpb24gcG9saWN5ICgke3RocmVzaG9sZE51bX0tb2YtJHt2YWxpZGF0b3JzLmxlbmd0aH0pIGZyb20gZ3JvdXAgJHtwcmV2aWV3R3JvdXBJZH0uYCk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSk7XG4gICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgVXNlIHRoaXMgZ3JvdXAgYXMgZmVkZXJhdGlvbiBwb2xpY3lcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb3B5VGV4dCgnZmVkZXJhdGlvblZhbGlkYXRvcnMnLCBKU09OLnN0cmluZ2lmeShwcmV2aWV3LmZlZGVyYXRpb25Qb2xpY3kudmFsaWRhdG9yc0NvbXByZXNzZWRTb3J0ZWQgfHwgW10sIG51bGwsIDIpKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtjb3B5U3RhdGUgPT09ICdmZWRlcmF0aW9uVmFsaWRhdG9ycycgPyAnQ29waWVkIHZhbGlkYXRvcnMnIDogJ0NvcHkgZmVkZXJhdGlvbiB2YWxpZGF0b3JzJ31cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBhcz17TGlua31cbiAgICAgICAgICAgICAgICB0bz1cIi9zZXR0aW5ncy9mZWRlcmF0aW9uXCJcbiAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIE9wZW4gZmVkZXJhdGlvbiBzZXR0aW5nc1xuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAge2ZlZGVyYXRpb25BcHBseVN0YXR1cyA/IChcbiAgICAgICAgICAgICAgICA8TWVzc2FnZSBwb3NpdGl2ZSBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBtYXJnaW5Cb3R0b206IDAgfX0gY29udGVudD17ZmVkZXJhdGlvbkFwcGx5U3RhdHVzfSAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8cHJlIGlkPVwiY29sbGFiLW11bHRpc2lnLXByZXZpZXctanNvblwiIHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e0pTT04uc3RyaW5naWZ5KHByZXZpZXcsIG51bGwsIDIpfTwvcHJlPlxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApIDogbnVsbH1cblxuICAgICAgPERpdmlkZXIgLz5cblxuICAgICAgPEhlYWRlciBhcz1cImgzXCI+SW52aXRhdGlvbnM8L0hlYWRlcj5cbiAgICAgIDxGb3JtXG4gICAgICAgIG9uU3VibWl0PXthc3luYyAoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBzZXRCdXN5KHRydWUpO1xuICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0ge307XG4gICAgICAgICAgICBpZiAoaW52aXRlRW1haWwudHJpbSgpKSBib2R5LmVtYWlsID0gaW52aXRlRW1haWwudHJpbSgpO1xuICAgICAgICAgICAgaWYgKGludml0ZVBlZXJJZGVudGl0eS50cmltKCkpIGJvZHkucmVjaXBpZW50UGVlcklkZW50aXR5ID0gaW52aXRlUGVlcklkZW50aXR5LnRyaW0oKTtcbiAgICAgICAgICAgIGlmIChpbnZpdGVHcm91cElkLnRyaW0oKSkgYm9keS5ncm91cElkID0gaW52aXRlR3JvdXBJZC50cmltKCk7XG4gICAgICAgICAgICBpZiAoIWJvZHkuZW1haWwgJiYgIWJvZHkucmVjaXBpZW50UGVlcklkZW50aXR5KSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRW50ZXIgaW52aXRlIGVtYWlsIGFuZC9vciByZWNpcGllbnQgcGVlciBpZGVudGl0eSAoaWQxLi4uKS4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHJwYygnQ3JlYXRlQ29sbGFib3JhdGlvbkludml0YXRpb24nLCBib2R5KTtcbiAgICAgICAgICAgIHNldEludml0ZUVtYWlsKCcnKTtcbiAgICAgICAgICAgIHNldEludml0ZVBlZXJJZGVudGl0eSgnJyk7XG4gICAgICAgICAgICBzZXRJbnZpdGVHcm91cElkKCcnKTtcbiAgICAgICAgICAgIGF3YWl0IHJlZnJlc2goKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlIHx8IFN0cmluZyhlcnIpKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0QnVzeShmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8Rm9ybS5Hcm91cCB3aWR0aHM9XCJlcXVhbFwiPlxuICAgICAgICAgIDxGb3JtLklucHV0IGlkPVwiY29sbGFiLWlucHV0LWludml0ZS1lbWFpbFwiIGxhYmVsPVwiRW1haWwgKG9wdGlvbmFsKVwiIHBsYWNlaG9sZGVyPVwiaW52aXRlZUBleGFtcGxlLmNvbVwiIHZhbHVlPXtpbnZpdGVFbWFpbH0gb25DaGFuZ2U9eyhlLCBkKSA9PiBzZXRJbnZpdGVFbWFpbChkLnZhbHVlKX0gLz5cbiAgICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgICAgaWQ9XCJjb2xsYWItaW5wdXQtaW52aXRlLXBlZXJcIlxuICAgICAgICAgICAgbGFiZWw9XCJSZWNpcGllbnQgcGVlciBpZGVudGl0eSAoaWQxLi4uLCBvcHRpb25hbClcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJpZDEuLi5cIlxuICAgICAgICAgICAgdmFsdWU9e2ludml0ZVBlZXJJZGVudGl0eX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgZCkgPT4gc2V0SW52aXRlUGVlcklkZW50aXR5KGQudmFsdWUpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEZvcm0uU2VsZWN0XG4gICAgICAgICAgICBpZD1cImNvbGxhYi1pbnB1dC1pbnZpdGUtZ3JvdXBcIlxuICAgICAgICAgICAgbGFiZWw9XCJBdHRhY2ggZ3JvdXAgKG9wdGlvbmFsKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBncm91cFwiXG4gICAgICAgICAgICB2YWx1ZT17aW52aXRlR3JvdXBJZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgZCkgPT4gc2V0SW52aXRlR3JvdXBJZChTdHJpbmcoZC52YWx1ZSB8fCAnJykpfVxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IGtleTogJ19ub25lJywgdmFsdWU6ICcnLCB0ZXh0OiAnTm8gZ3JvdXAgYXR0YWNoZWQnIH0sXG4gICAgICAgICAgICAgIC4uLihncm91cHMgfHwgW10pLm1hcCgoZykgPT4gKHsga2V5OiBnLmlkLCB2YWx1ZTogZy5pZCwgdGV4dDogYCR7Zy5uYW1lfSAoJHtnLmlkfSlgIH0pKVxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Zvcm0uR3JvdXA+XG4gICAgICAgIDxGb3JtLkJ1dHRvbiBpZD1cImNvbGxhYi1idG4taW52aXRlLXNlbmRcIiBwcmltYXJ5IHR5cGU9XCJzdWJtaXRcIiBsb2FkaW5nPXtidXN5fSBkaXNhYmxlZD17YnVzeX0+U2VuZCBpbnZpdGF0aW9uPC9Gb3JtLkJ1dHRvbj5cbiAgICAgIDwvRm9ybT5cbiAgICAgIDxUYWJsZSBjb21wYWN0IGNlbGxlZCBzaXplPVwic21hbGxcIj5cbiAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+RW1haWw8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5SZWNpcGllbnQgcGVlcjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkdyb3VwPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+U3RhdHVzPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+RXhwaXJlczwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPklkPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGwgLz5cbiAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICAgIDxUYWJsZS5Cb2R5PlxuICAgICAgICAgIHsoaW52aXRhdGlvbnMgfHwgW10pLm1hcCgoaW52KSA9PiAoXG4gICAgICAgICAgICA8VGFibGUuUm93IGtleT17aW52LmlkfT5cbiAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2ludi5lbWFpbCB8fCAn4oCUJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5DZWxsIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e2ludi5yZWNpcGllbnRQZWVySWRlbnRpdHkgfHwgJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57aW52Lmdyb3VwSWQgPyAoKGdyb3VwTWFwW2ludi5ncm91cElkXSAmJiBncm91cE1hcFtpbnYuZ3JvdXBJZF0ubmFtZSkgfHwgaW52Lmdyb3VwSWQpIDogJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSBpbnZpdGVTdGF0dXNNZXRhKGludik7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gPExhYmVsIGNvbG9yPXttLmNvbG9yfSBzaXplPVwibWluaVwiPnttLnRleHR9PC9MYWJlbD47XG4gICAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Zm9ybWF0VHMoaW52LmV4cGlyZXNBdCl9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PntpbnYuaWR9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBjb2xsYXBzaW5nPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtidXN5fVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRCdXN5KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBycGMoJ1JlbW92ZUNvbGxhYm9yYXRpb25JbnZpdGF0aW9uJywgeyBpZDogaW52LmlkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgfHwgU3RyaW5nKGVycikpO1xuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgIHNldEJ1c3koZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFJlbW92ZVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgPC9UYWJsZT5cbiAgICAgIHtwcmV2aWV3ICYmIHByZXZpZXdHcm91cElkID8gKFxuICAgICAgICA8TWVzc2FnZT5cbiAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+RXhlY3V0aW9uIGhhbmRvZmY8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNGVtJyB9fT5cbiAgICAgICAgICAgIFVzZSB0aGlzIGdyb3VwIHByZXZpZXcgYXMgdGhlIGlucHV0IGZvciBjb250cmFjdCBleGVjdXRpb24gcG9saWN5IGF1dGhvcmluZyBvbiB0aGV7JyAnfVxuICAgICAgICAgICAgPExpbmsgdG89XCIvY29udHJhY3RzXCI+Q29udHJhY3RzPC9MaW5rPiBwYWdlLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb3B5VGV4dCgncHJldmlldycsIEpTT04uc3RyaW5naWZ5KHByZXZpZXcsIG51bGwsIDIpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y29weVN0YXRlID09PSAncHJldmlldycgPyAnQ29waWVkIHByZXZpZXcnIDogJ0NvcHkgcHJldmlldyBKU09OJ31cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb3B5VGV4dCgnZmluZ2VycHJpbnQnLCBwcmV2aWV3LnBvbGljeUZpbmdlcnByaW50IHx8ICcnKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshcHJldmlldy5wb2xpY3lGaW5nZXJwcmludH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y29weVN0YXRlID09PSAnZmluZ2VycHJpbnQnID8gJ0NvcGllZCBmaW5nZXJwcmludCcgOiAnQ29weSBwb2xpY3kgZmluZ2VycHJpbnQnfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvcHlUZXh0KCdkZXNjcmlwdG9yJywgcHJldmlldy5yZWNlaXZlRGVzY3JpcHRvciB8fCAnJyl9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXByZXZpZXcucmVjZWl2ZURlc2NyaXB0b3J9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2NvcHlTdGF0ZSA9PT0gJ2Rlc2NyaXB0b3InID8gJ0NvcGllZCBkZXNjcmlwdG9yJyA6ICdDb3B5IFRhcHJvb3QgZGVzY3JpcHRvcid9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvU2VnbWVudD5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb2xsYWJvcmF0aW9uSG9tZTtcbiJdLCJuYW1lcyI6WyJfdG9Db25zdW1hYmxlQXJyYXkiLCJyIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIlR5cGVFcnJvciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJmcm9tIiwiaXNBcnJheSIsIl9hcnJheUxpa2VUb0FycmF5IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJlIiwidCIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX3JlZ2VuZXJhdG9yIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJwIiwieSIsIkciLCJ2IiwiZCIsImJpbmQiLCJsIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfbm9uSXRlcmFibGVSZXN0IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsInRlc3QiLCJwdXNoIiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJMaW5rIiwiX3JlcXVpcmUyIiwiQnV0dG9uIiwiRGl2aWRlciIsIkZvcm0iLCJIZWFkZXIiLCJJY29uIiwiTGFiZWwiLCJNZXNzYWdlIiwiU2VnbWVudCIsIlRhYmxlIiwiX3JlcXVpcmUzIiwicmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciIsIkNvbGxhYm9yYXRpb25Ib21lIiwiX3JlZiIsImJyaWRnZVJlZiIsImFkbWluVG9rZW4iLCJ0b2tlbiIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsImVycm9yIiwic2V0RXJyb3IiLCJfUmVhY3QkdXNlU3RhdGUzIiwiX1JlYWN0JHVzZVN0YXRlNCIsImJ1c3kiLCJzZXRCdXN5IiwiX1JlYWN0JHVzZVN0YXRlNSIsIl9SZWFjdCR1c2VTdGF0ZTYiLCJjb250YWN0cyIsInNldENvbnRhY3RzIiwiX1JlYWN0JHVzZVN0YXRlNyIsIl9SZWFjdCR1c2VTdGF0ZTgiLCJncm91cHMiLCJzZXRHcm91cHMiLCJfUmVhY3QkdXNlU3RhdGU5IiwiX1JlYWN0JHVzZVN0YXRlMCIsImludml0YXRpb25zIiwic2V0SW52aXRhdGlvbnMiLCJfUmVhY3QkdXNlU3RhdGUxIiwiX1JlYWN0JHVzZVN0YXRlMTAiLCJwZWVycyIsInNldFBlZXJzIiwiX1JlYWN0JHVzZVN0YXRlMTEiLCJfUmVhY3QkdXNlU3RhdGUxMiIsIm5ld0VtYWlsIiwic2V0TmV3RW1haWwiLCJfUmVhY3QkdXNlU3RhdGUxMyIsIl9SZWFjdCR1c2VTdGF0ZTE0IiwibmV3UGVlcklkIiwic2V0TmV3UGVlcklkIiwiX1JlYWN0JHVzZVN0YXRlMTUiLCJfUmVhY3QkdXNlU3RhdGUxNiIsIm5ld1B1YiIsInNldE5ld1B1YiIsIl9SZWFjdCR1c2VTdGF0ZTE3IiwiX1JlYWN0JHVzZVN0YXRlMTgiLCJncm91cE5hbWUiLCJzZXRHcm91cE5hbWUiLCJfUmVhY3QkdXNlU3RhdGUxOSIsIl9SZWFjdCR1c2VTdGF0ZTIwIiwiZ3JvdXBUaHJlc2hvbGQiLCJzZXRHcm91cFRocmVzaG9sZCIsIl9SZWFjdCR1c2VTdGF0ZTIxIiwiX1JlYWN0JHVzZVN0YXRlMjIiLCJpbnZpdGVFbWFpbCIsInNldEludml0ZUVtYWlsIiwiX1JlYWN0JHVzZVN0YXRlMjMiLCJfUmVhY3QkdXNlU3RhdGUyNCIsImludml0ZVBlZXJJZGVudGl0eSIsInNldEludml0ZVBlZXJJZGVudGl0eSIsIl9SZWFjdCR1c2VTdGF0ZTI1IiwiX1JlYWN0JHVzZVN0YXRlMjYiLCJpbnZpdGVHcm91cElkIiwic2V0SW52aXRlR3JvdXBJZCIsIl9SZWFjdCR1c2VTdGF0ZTI3IiwiX1JlYWN0JHVzZVN0YXRlMjgiLCJjb3B5U3RhdGUiLCJzZXRDb3B5U3RhdGUiLCJfUmVhY3QkdXNlU3RhdGUyOSIsIl9SZWFjdCR1c2VTdGF0ZTMwIiwibWVtYmVyR3JvdXBJZCIsInNldE1lbWJlckdyb3VwSWQiLCJfUmVhY3QkdXNlU3RhdGUzMSIsIl9SZWFjdCR1c2VTdGF0ZTMyIiwibWVtYmVyUHViIiwic2V0TWVtYmVyUHViIiwiX1JlYWN0JHVzZVN0YXRlMzMiLCJfUmVhY3QkdXNlU3RhdGUzNCIsInByZXZpZXciLCJzZXRQcmV2aWV3IiwiX1JlYWN0JHVzZVN0YXRlMzUiLCJfUmVhY3QkdXNlU3RhdGUzNiIsInByZXZpZXdHcm91cElkIiwic2V0UHJldmlld0dyb3VwSWQiLCJfUmVhY3QkdXNlU3RhdGUzNyIsIl9SZWFjdCR1c2VTdGF0ZTM4IiwiZmVkZXJhdGlvbkFwcGx5U3RhdHVzIiwic2V0RmVkZXJhdGlvbkFwcGx5U3RhdHVzIiwicnBjIiwidXNlQ2FsbGJhY2siLCJfcmVmMiIsIl9jYWxsZWUiLCJtZXRob2QiLCJwYXJhbXMiLCJiIiwib3V0IiwiX2FyZ3MiLCJfY29udGV4dCIsInVuZGVmaW5lZCIsImN1cnJlbnQiLCJjYWxsSHViSnNvblJwYyIsIkVycm9yIiwiYXNzaWduIiwicmVzdWx0IiwiX3giLCJjb3B5VGV4dCIsIl9yZWYzIiwiX2NhbGxlZTIiLCJrZXkiLCJfdCIsIl9jb250ZXh0MiIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsIlN0cmluZyIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJfeDIiLCJfeDMiLCJyZWZyZXNoIiwiX2NhbGxlZTMiLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwiZyIsIm5zIiwiX3QyIiwiX2NvbnRleHQzIiwiYWxsIiwibWVzc2FnZSIsInVzZUVmZmVjdCIsImdyb3VwTWFwIiwidXNlTWVtbyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiaWQiLCJlcnIiLCJpbnZpdGVTdGF0dXNNZXRhIiwiaW52Iiwibm93IiwiRGF0ZSIsImV4cCIsIk51bWJlciIsImV4cGlyZXNBdCIsImV4cGlyZWQiLCJpc0Zpbml0ZSIsInN0YXR1cyIsInJhdyIsInRvTG93ZXJDYXNlIiwidGV4dCIsImNvbG9yIiwiZm9ybWF0VHMiLCJ0cyIsInRvTG9jYWxlU3RyaW5nIiwiXyIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsIm1heFdpZHRoIiwibWFyZ2luIiwid2FybmluZyIsInRvIiwiYXMiLCJDb250ZW50IiwiU3ViaGVhZGVyIiwibmVnYXRpdmUiLCJvbkRpc21pc3MiLCJjb250ZW50IiwicHJpbWFyeSIsImljb24iLCJsb2FkaW5nIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwib25TdWJtaXQiLCJfcmVmNSIsIl9jYWxsZWU0IiwiYm9keSIsIl90MyIsIl9jb250ZXh0NCIsInByZXZlbnREZWZhdWx0IiwidHJpbSIsImVtYWlsIiwiZmFicmljUGVlcklkIiwicHVibGljS2V5SGV4IiwiX3g0IiwiR3JvdXAiLCJ3aWR0aHMiLCJJbnB1dCIsImxhYmVsIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsInR5cGUiLCJjb21wYWN0IiwiY2VsbGVkIiwic2l6ZSIsIlJvdyIsIkhlYWRlckNlbGwiLCJCb2R5IiwibWFwIiwiQ2VsbCIsIndvcmRCcmVhayIsImNvbGxhcHNpbmciLCJfY2FsbGVlNSIsIl90NCIsIl9jb250ZXh0NSIsImZvbnRTaXplIiwibWFyZ2luUmlnaHQiLCJfcmVmNyIsIl9jYWxsZWU2IiwiX3Q1IiwiX2NvbnRleHQ2IiwidGhyZXNob2xkIiwiX3g1IiwicmVxdWlyZWQiLCJtaW4iLCJtYXJnaW5Ub3AiLCJfcmVmOCIsIl9jYWxsZWU3IiwiX3Q2IiwiX2NvbnRleHQ3IiwiZ3JvdXBJZCIsIl94NiIsIm1lbWJlckNvdW50IiwiY29uY2F0IiwiX2NhbGxlZTgiLCJwciIsInB2IiwiX3Q3IiwiX2NvbnRleHQ4IiwiaW5mbyIsIm1pc3NpbmciLCJ1bmlxdWVQdWJrZXlzIiwicmVjZWl2ZVJlYWR5IiwicmVjZWl2ZUFkZHJlc3MiLCJwb3NpdGl2ZSIsIm1hcmdpbkJvdHRvbSIsImJhc2ljIiwiZmVkZXJhdGlvblBvbGljeSIsInJlYWR5IiwidmF1bHRBZGRyZXNzIiwiX2NhbGxlZTkiLCJ2YWxpZGF0b3JzIiwidGhyZXNob2xkTnVtIiwiX3Q4IiwiX2NvbnRleHQ5IiwidmFsaWRhdG9yc0NvbXByZXNzZWRTb3J0ZWQiLCJKU09OIiwic3RyaW5naWZ5Iiwid2hpdGVTcGFjZSIsIl9yZWYxIiwiX2NhbGxlZTAiLCJfdDkiLCJfY29udGV4dDAiLCJyZWNpcGllbnRQZWVySWRlbnRpdHkiLCJfeDciLCJTZWxlY3QiLCJvcHRpb25zIiwiX2NhbGxlZTEiLCJfdDAiLCJfY29udGV4dDEiLCJwb2xpY3lGaW5nZXJwcmludCIsInJlY2VpdmVEZXNjcmlwdG9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/CollaborationHome.js\n\n}')},"./components/CollaborationInviteModal.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Modal = _require.Modal,\n Button = _require.Button,\n Header = _require.Header,\n Icon = _require.Icon,\n Message = _require.Message;\nvar _require2 = __webpack_require__(/*! ../functions/toast */ "./functions/toast.js"),\n toast = _require2.toast;\nfunction CollaborationInviteModal(props) {\n var open = !!(props && props.open);\n var detail = props && props.detail;\n var onClose = props && typeof props.onClose === \'function\' ? props.onClose : function () {};\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n busy = _React$useState2[0],\n setBusy = _React$useState2[1];\n var _React$useState3 = React.useState(\'\'),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n error = _React$useState4[0],\n setError = _React$useState4[1];\n var respond = React.useCallback(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(action) {\n var url, res, body, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n if (detail) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n url = action === \'accept\' ? detail.acceptUrl : detail.declineUrl;\n if (url) {\n _context.n = 2;\n break;\n }\n setError("Missing ".concat(action, " URL."));\n return _context.a(2);\n case 2:\n setBusy(true);\n setError(\'\');\n _context.p = 3;\n _context.n = 4;\n return fetch(String(url), {\n method: \'GET\',\n headers: {\n Accept: \'application/json\'\n }\n });\n case 4:\n res = _context.v;\n _context.n = 5;\n return res.json()["catch"](function () {\n return {};\n });\n case 5:\n body = _context.v;\n if (!(!res.ok || body && body.status === \'error\')) {\n _context.n = 6;\n break;\n }\n throw new Error(body && body.message || "".concat(action, " failed (").concat(res.status, ")"));\n case 6:\n toast.success(action === \'accept\' ? \'Invitation accepted.\' : \'Invitation declined.\', {\n header: \'Collaboration\'\n });\n onClose();\n _context.n = 8;\n break;\n case 7:\n _context.p = 7;\n _t = _context.v;\n setError(_t && _t.message ? _t.message : String(_t));\n case 8:\n _context.p = 8;\n setBusy(false);\n return _context.f(8);\n case 9:\n return _context.a(2);\n }\n }, _callee, null, [[3, 7, 8, 9]]);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }(), [detail, onClose]);\n if (!open || !detail) return null;\n var recipientPeerIdentity = detail.recipientPeerIdentity ? String(detail.recipientPeerIdentity) : \'\';\n var groupId = detail.groupId ? String(detail.groupId) : \'\';\n var fromPeerId = detail.fromPeerId ? String(detail.fromPeerId) : \'\';\n return /*#__PURE__*/React.createElement(Modal, {\n open: open,\n onClose: onClose,\n size: "small",\n closeIcon: true,\n "aria-labelledby": "collaboration-invite-heading"\n }, /*#__PURE__*/React.createElement(Header, {\n icon: true,\n id: "collaboration-invite-heading"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users"\n }), "Collaboration invitation"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: 0\n }\n }, "A connected peer invited this identity to collaborate.", recipientPeerIdentity ? " Recipient peer: ".concat(recipientPeerIdentity, ".") : \'\', groupId ? " Group: ".concat(groupId, ".") : \'\'), fromPeerId ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "From peer: ", /*#__PURE__*/React.createElement("code", null, fromPeerId)) : null, error ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n content: error\n }) : null), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n disabled: busy,\n onClick: function onClick() {\n return respond(\'decline\');\n }\n }, "Reject"), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n loading: busy,\n disabled: busy,\n onClick: function onClick() {\n return respond(\'accept\');\n }\n }, "Accept")));\n}\nmodule.exports = CollaborationInviteModal;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0NvbGxhYm9yYXRpb25JbnZpdGVNb2RhbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFBQSxTQUFBQSxhQUFBLElBQ2IsdUtBQUFDLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxXQUFBLDhCQUFBQyxFQUFBTixDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLFFBQUFDLENBQUEsR0FBQUwsQ0FBQSxJQUFBQSxDQUFBLENBQUFNLFNBQUEsWUFBQUMsU0FBQSxHQUFBUCxDQUFBLEdBQUFPLFNBQUEsRUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLE1BQUEsQ0FBQUwsQ0FBQSxDQUFBQyxTQUFBLFVBQUFLLG1CQUFBLENBQUFILENBQUEsdUJBQUFWLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLFFBQUFFLENBQUEsRUFBQUMsQ0FBQSxFQUFBRyxDQUFBLEVBQUFJLENBQUEsTUFBQUMsQ0FBQSxHQUFBWCxDQUFBLFFBQUFZLENBQUEsT0FBQUMsQ0FBQSxLQUFBRixDQUFBLEtBQUFiLENBQUEsS0FBQWdCLENBQUEsRUFBQXBCLENBQUEsRUFBQXFCLENBQUEsRUFBQUMsQ0FBQSxFQUFBTixDQUFBLEVBQUFNLENBQUEsQ0FBQUMsSUFBQSxDQUFBdkIsQ0FBQSxNQUFBc0IsQ0FBQSxXQUFBQSxFQUFBckIsQ0FBQSxFQUFBQyxDQUFBLFdBQUFNLENBQUEsR0FBQVAsQ0FBQSxFQUFBUSxDQUFBLE1BQUFHLENBQUEsR0FBQVosQ0FBQSxFQUFBbUIsQ0FBQSxDQUFBZixDQUFBLEdBQUFGLENBQUEsRUFBQW1CLENBQUEsZ0JBQUFDLEVBQUFwQixDQUFBLEVBQUFFLENBQUEsU0FBQUssQ0FBQSxHQUFBUCxDQUFBLEVBQUFVLENBQUEsR0FBQVIsQ0FBQSxFQUFBSCxDQUFBLE9BQUFp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QUMsYUFDaEIsZUFBQTdELEtBQUEsQ0FBQXFELGFBQUEsZUFBT0QsVUFBaUIsQ0FDbEMsQ0FBQyxHQUNGLElBQUksRUFDUDlCLEtBQUssZ0JBQUd0QixLQUFBLENBQUFxRCxhQUFBLENBQUM5QyxPQUFPO0lBQUN1RCxRQUFRO0lBQUNDLE9BQU8sRUFBRXpDO0VBQU0sQ0FBRSxDQUFDLEdBQUcsSUFDbkMsQ0FBQyxlQUNoQnRCLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQ2xELEtBQUssQ0FBQzZELE9BQU8scUJBQ1poRSxLQUFBLENBQUFxRCxhQUFBLENBQUNqRCxNQUFNO0lBQUM2RCxLQUFLO0lBQUNDLFFBQVEsRUFBRWhELElBQUs7SUFBQ2lELE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO01BQUEsT0FBUTNDLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFBQTtFQUFDLEdBQUMsUUFFekQsQ0FBQyxlQUNUeEIsS0FBQSxDQUFBcUQsYUFBQSxDQUFDakQsTUFBTTtJQUFDZ0UsT0FBTztJQUFDQyxPQUFPLEVBQUVuRCxJQUFLO0lBQUNnRCxRQUFRLEVBQUVoRCxJQUFLO0lBQUNpRCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtNQUFBLE9BQVEzQyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQUE7RUFBQyxHQUFDLFFBRXpFLENBQ0ssQ0FDVixDQUFDO0FBRVo7QUFFQThDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHN0Qsd0JBQXdCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0NvbGxhYm9yYXRpb25JbnZpdGVNb2RhbC5qcz9iODgyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBNb2RhbCwgQnV0dG9uLCBIZWFkZXIsIEljb24sIE1lc3NhZ2UgfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCB7IHRvYXN0IH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvdG9hc3QnKTtcblxuZnVuY3Rpb24gQ29sbGFib3JhdGlvbkludml0ZU1vZGFsIChwcm9wcykge1xuICBjb25zdCBvcGVuID0gISEocHJvcHMgJiYgcHJvcHMub3Blbik7XG4gIGNvbnN0IGRldGFpbCA9IHByb3BzICYmIHByb3BzLmRldGFpbDtcbiAgY29uc3Qgb25DbG9zZSA9IHByb3BzICYmIHR5cGVvZiBwcm9wcy5vbkNsb3NlID09PSAnZnVuY3Rpb24nID8gcHJvcHMub25DbG9zZSA6ICgpID0+IHt9O1xuXG4gIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG5cbiAgY29uc3QgcmVzcG9uZCA9IFJlYWN0LnVzZUNhbGxiYWNrKGFzeW5jIChhY3Rpb24pID0+IHtcbiAgICBpZiAoIWRldGFpbCkgcmV0dXJuO1xuICAgIGNvbnN0IHVybCA9IGFjdGlvbiA9PT0gJ2FjY2VwdCcgPyBkZXRhaWwuYWNjZXB0VXJsIDogZGV0YWlsLmRlY2xpbmVVcmw7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHNldEVycm9yKGBNaXNzaW5nICR7YWN0aW9ufSBVUkwuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgc2V0RXJyb3IoJycpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChTdHJpbmcodXJsKSwgeyBtZXRob2Q6ICdHRVQnLCBoZWFkZXJzOiB7IEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0gfSk7XG4gICAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICAgIGlmICghcmVzLm9rIHx8IChib2R5ICYmIGJvZHkuc3RhdHVzID09PSAnZXJyb3InKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKGJvZHkgJiYgYm9keS5tZXNzYWdlKSB8fCBgJHthY3Rpb259IGZhaWxlZCAoJHtyZXMuc3RhdHVzfSlgKTtcbiAgICAgIH1cbiAgICAgIHRvYXN0LnN1Y2Nlc3MoYWN0aW9uID09PSAnYWNjZXB0JyA/ICdJbnZpdGF0aW9uIGFjY2VwdGVkLicgOiAnSW52aXRhdGlvbiBkZWNsaW5lZC4nLCB7IGhlYWRlcjogJ0NvbGxhYm9yYXRpb24nIH0pO1xuICAgICAgb25DbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldEVycm9yKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0QnVzeShmYWxzZSk7XG4gICAgfVxuICB9LCBbZGV0YWlsLCBvbkNsb3NlXSk7XG5cbiAgaWYgKCFvcGVuIHx8ICFkZXRhaWwpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHJlY2lwaWVudFBlZXJJZGVudGl0eSA9IGRldGFpbC5yZWNpcGllbnRQZWVySWRlbnRpdHkgPyBTdHJpbmcoZGV0YWlsLnJlY2lwaWVudFBlZXJJZGVudGl0eSkgOiAnJztcbiAgY29uc3QgZ3JvdXBJZCA9IGRldGFpbC5ncm91cElkID8gU3RyaW5nKGRldGFpbC5ncm91cElkKSA6ICcnO1xuICBjb25zdCBmcm9tUGVlcklkID0gZGV0YWlsLmZyb21QZWVySWQgPyBTdHJpbmcoZGV0YWlsLmZyb21QZWVySWQpIDogJyc7XG5cbiAgcmV0dXJuIChcbiAgICA8TW9kYWwgb3Blbj17b3Blbn0gb25DbG9zZT17b25DbG9zZX0gc2l6ZT1cInNtYWxsXCIgY2xvc2VJY29uIGFyaWEtbGFiZWxsZWRieT1cImNvbGxhYm9yYXRpb24taW52aXRlLWhlYWRpbmdcIj5cbiAgICAgIDxIZWFkZXIgaWNvbiBpZD1cImNvbGxhYm9yYXRpb24taW52aXRlLWhlYWRpbmdcIj5cbiAgICAgICAgPEljb24gbmFtZT1cInVzZXJzXCIgLz5cbiAgICAgICAgQ29sbGFib3JhdGlvbiBpbnZpdGF0aW9uXG4gICAgICA8L0hlYWRlcj5cbiAgICAgIDxNb2RhbC5Db250ZW50PlxuICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+XG4gICAgICAgICAgQSBjb25uZWN0ZWQgcGVlciBpbnZpdGVkIHRoaXMgaWRlbnRpdHkgdG8gY29sbGFib3JhdGUuXG4gICAgICAgICAge3JlY2lwaWVudFBlZXJJZGVudGl0eSA/IGAgUmVjaXBpZW50IHBlZXI6ICR7cmVjaXBpZW50UGVlcklkZW50aXR5fS5gIDogJyd9XG4gICAgICAgICAge2dyb3VwSWQgPyBgIEdyb3VwOiAke2dyb3VwSWR9LmAgOiAnJ31cbiAgICAgICAgPC9wPlxuICAgICAgICB7ZnJvbVBlZXJJZCA/IChcbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgRnJvbSBwZWVyOiA8Y29kZT57ZnJvbVBlZXJJZH08L2NvZGU+XG4gICAgICAgICAgPC9wPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge2Vycm9yID8gPE1lc3NhZ2UgbmVnYXRpdmUgY29udGVudD17ZXJyb3J9IC8+IDogbnVsbH1cbiAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgIDxNb2RhbC5BY3Rpb25zPlxuICAgICAgICA8QnV0dG9uIGJhc2ljIGRpc2FibGVkPXtidXN5fSBvbkNsaWNrPXsoKSA9PiByZXNwb25kKCdkZWNsaW5lJyl9PlxuICAgICAgICAgIFJlamVjdFxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPEJ1dHRvbiBwcmltYXJ5IGxvYWRpbmc9e2J1c3l9IGRpc2FibGVkPXtidXN5fSBvbkNsaWNrPXsoKSA9PiByZXNwb25kKCdhY2NlcHQnKX0+XG4gICAgICAgICAgQWNjZXB0XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9Nb2RhbC5BY3Rpb25zPlxuICAgIDwvTW9kYWw+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29sbGFib3JhdGlvbkludml0ZU1vZGFsO1xuIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIlN5bWJvbCIsIm4iLCJpdGVyYXRvciIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsIm5leHQiLCJwdXNoIiwiaXNBcnJheSIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTW9kYWwiLCJCdXR0b24iLCJIZWFkZXIiLCJJY29uIiwiTWVzc2FnZSIsIl9yZXF1aXJlMiIsInRvYXN0IiwiQ29sbGFib3JhdGlvbkludml0ZU1vZGFsIiwicHJvcHMiLCJvcGVuIiwiZGV0YWlsIiwib25DbG9zZSIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsImJ1c3kiLCJzZXRCdXN5IiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJlcnJvciIsInNldEVycm9yIiwicmVzcG9uZCIsInVzZUNhbGxiYWNrIiwiX3JlZiIsIl9jYWxsZWUiLCJhY3Rpb24iLCJ1cmwiLCJyZXMiLCJib2R5IiwiX3QiLCJfY29udGV4dCIsImFjY2VwdFVybCIsImRlY2xpbmVVcmwiLCJjb25jYXQiLCJmZXRjaCIsIlN0cmluZyIsIm1ldGhvZCIsImhlYWRlcnMiLCJBY2NlcHQiLCJqc29uIiwib2siLCJzdGF0dXMiLCJFcnJvciIsIm1lc3NhZ2UiLCJzdWNjZXNzIiwiaGVhZGVyIiwiX3giLCJyZWNpcGllbnRQZWVySWRlbnRpdHkiLCJncm91cElkIiwiZnJvbVBlZXJJZCIsImNyZWF0ZUVsZW1lbnQiLCJzaXplIiwiY2xvc2VJY29uIiwiaWNvbiIsImlkIiwiQ29udGVudCIsInN0eWxlIiwibWFyZ2luVG9wIiwiY29sb3IiLCJuZWdhdGl2ZSIsImNvbnRlbnQiLCJBY3Rpb25zIiwiYmFzaWMiLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJwcmltYXJ5IiwibG9hZGluZyIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/CollaborationInviteModal.js\n\n}')},"./components/ContractView.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n useParams = _require.useParams,\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Segment = _require2.Segment,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Button = _require2.Button,\n Loader = _require2.Loader,\n Table = _require2.Table,\n Label = _require2.Label,\n Message = _require2.Message,\n Step = _require2.Step;\nvar _require3 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require3.formatSatsDisplay;\nvar _require4 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n loadUpstreamSettings = _require4.loadUpstreamSettings,\n fetchTransactionByHash = _require4.fetchTransactionByHash,\n verifyL1Payment = _require4.verifyL1Payment;\nvar _require5 = __webpack_require__(/*! ../functions/fabricExecutionMachine */ "./functions/fabricExecutionMachine.js"),\n runExecutionProgram = _require5.runExecutionProgram;\nvar _require6 = __webpack_require__(/*! ../functions/executionRunCommitment */ "./functions/executionRunCommitment.js"),\n computeExecutionRunCommitmentHex = _require6.computeExecutionRunCommitmentHex;\nvar _require7 = __webpack_require__(/*! ../functions/contractGraphDot */ "./functions/contractGraphDot.js"),\n contractToDot = _require7.contractToDot;\nvar GraphDocumentPreview = __webpack_require__(/*! ./GraphDocumentPreview */ "./components/GraphDocumentPreview.js");\nvar _require8 = __webpack_require__(/*! ../functions/hubRpcHints */ "./functions/hubRpcHints.js"),\n describeHubRpcFailure = _require8.describeHubRpcFailure;\nvar DistributedFederationPanel = __webpack_require__(/*! ./DistributedFederationPanel */ "./components/DistributedFederationPanel.js");\nvar _require9 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require9.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require9.subscribeHubUiFeatureFlags;\nfunction fetchJsonRpcResult(_x, _x2) {\n return _fetchJsonRpcResult.apply(this, arguments);\n}\nfunction _fetchJsonRpcResult() {\n _fetchJsonRpcResult = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(method, params) {\n var res, body, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n _context4.n = 1;\n return fetch(\'/services/rpc\', {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n },\n body: JSON.stringify({\n jsonrpc: \'2.0\',\n id: 1,\n method: method,\n params: params\n })\n });\n case 1:\n res = _context4.v;\n body = {};\n _context4.p = 2;\n _context4.n = 3;\n return res.json();\n case 3:\n body = _context4.v;\n _context4.n = 5;\n break;\n case 4:\n _context4.p = 4;\n _t4 = _context4.v;\n throw new Error(\'Hub returned non-JSON (check network or hub logs)\');\n case 5:\n if (res.ok) {\n _context4.n = 6;\n break;\n }\n throw new Error(body && body.error && body.error.message || res.statusText || "HTTP ".concat(res.status));\n case 6:\n if (!(body && body.error)) {\n _context4.n = 7;\n break;\n }\n throw new Error(body.error.message || \'RPC error\');\n case 7:\n return _context4.a(2, body && body.result != null ? body.result : null);\n }\n }, _callee4, null, [[2, 4]]);\n }));\n return _fetchJsonRpcResult.apply(this, arguments);\n}\nfunction ContractView(props) {\n var params = useParams();\n var id = params && params.id ? params.id : \'\';\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n contract = _React$useState2[0],\n setContract = _React$useState2[1];\n var _React$useState3 = React.useState(false),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n loading = _React$useState4[0],\n setLoading = _React$useState4[1];\n var _React$useState5 = React.useState(null),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n error = _React$useState6[0],\n setError = _React$useState6[1];\n var _React$useState7 = React.useState(null),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n payTxMeta = _React$useState8[0],\n setPayTxMeta = _React$useState8[1];\n var _React$useState9 = React.useState(null),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n localRun = _React$useState0[0],\n setLocalRun = _React$useState0[1];\n var _React$useState1 = React.useState(null),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n hubRun = _React$useState10[0],\n setHubRun = _React$useState10[1];\n var _React$useState11 = React.useState(false),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n hubRunLoading = _React$useState12[0],\n setHubRunLoading = _React$useState12[1];\n var _React$useState13 = React.useState(null),\n _React$useState14 = _slicedToArray(_React$useState13, 2),\n hubRunError = _React$useState14[0],\n setHubRunError = _React$useState14[1];\n var _React$useState15 = React.useState({\n loading: true,\n regtest: false,\n available: false\n }),\n _React$useState16 = _slicedToArray(_React$useState15, 2),\n bitcoinNet = _React$useState16[0],\n setBitcoinNet = _React$useState16[1];\n var _React$useState17 = React.useState(false),\n _React$useState18 = _slicedToArray(_React$useState17, 2),\n anchorLoading = _React$useState18[0],\n setAnchorLoading = _React$useState18[1];\n var _React$useState19 = React.useState(null),\n _React$useState20 = _slicedToArray(_React$useState19, 2),\n anchorError = _React$useState20[0],\n setAnchorError = _React$useState20[1];\n var _React$useState21 = React.useState(null),\n _React$useState22 = _slicedToArray(_React$useState21, 2),\n anchorTxid = _React$useState22[0],\n setAnchorTxid = _React$useState22[1];\n var _React$useState23 = React.useState(null),\n _React$useState24 = _slicedToArray(_React$useState23, 2),\n bondVerify = _React$useState24[0],\n setBondVerify = _React$useState24[1];\n var _React$useState25 = React.useState(false),\n _React$useState26 = _slicedToArray(_React$useState25, 2),\n commitmentCopied = _React$useState26[0],\n setCommitmentCopied = _React$useState26[1];\n var adminToken = props && props.adminToken ? String(props.adminToken) : \'\';\n var _React$useState27 = React.useState(0),\n _React$useState28 = _slicedToArray(_React$useState27, 2),\n hubUiTick = _React$useState28[0],\n setHubUiTick = _React$useState28[1];\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setHubUiTick(function (t) {\n return t + 1;\n });\n });\n }, []);\n void hubUiTick;\n var uf = loadHubUiFeatureFlags();\n var copyRunCommitmentHex = React.useCallback(function () {\n var hex = hubRun && hubRun.runCommitmentHex ? String(hubRun.runCommitmentHex) : \'\';\n if (!hex) return;\n if (typeof navigator === \'undefined\' || !navigator.clipboard || typeof navigator.clipboard.writeText !== \'function\') {\n return;\n }\n setCommitmentCopied(false);\n navigator.clipboard.writeText(hex).then(function () {\n setCommitmentCopied(true);\n window.setTimeout(function () {\n return setCommitmentCopied(false);\n }, 2000);\n })["catch"](function () {});\n }, [hubRun]);\n React.useEffect(function () {\n var cancelled = false;\n var ac = typeof AbortController !== \'undefined\' ? new AbortController() : null;\n var timeoutId;\n if (typeof window !== \'undefined\' && ac) {\n timeoutId = window.setTimeout(function () {\n try {\n ac.abort();\n } catch (_) {}\n }, 15000);\n }\n fetch(\'/services/bitcoin\', _objectSpread({\n headers: {\n Accept: \'application/json\'\n }\n }, ac ? {\n signal: ac.signal\n } : {})).then(function (r) {\n return r.json()["catch"](function () {\n return {};\n });\n }).then(function (body) {\n if (cancelled) return;\n var net = body && (body.network || body.chain);\n var available = !!(body && body.available !== false && body.status !== \'error\');\n setBitcoinNet({\n loading: false,\n available: available,\n regtest: String(net || \'\').toLowerCase() === \'regtest\'\n });\n })["catch"](function () {\n if (!cancelled) setBitcoinNet({\n loading: false,\n available: false,\n regtest: false\n });\n })["finally"](function () {\n if (typeof window !== \'undefined\' && timeoutId != null) {\n window.clearTimeout(timeoutId);\n }\n });\n return function () {\n cancelled = true;\n if (ac) {\n try {\n ac.abort();\n } catch (_) {}\n }\n if (typeof window !== \'undefined\' && timeoutId != null) {\n window.clearTimeout(timeoutId);\n }\n };\n }, []);\n var reloadContract = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var res, body, c, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n if (id) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n setLoading(true);\n setError(null);\n _context.p = 2;\n _context.n = 3;\n return fetch("/contracts/".concat(encodeURIComponent(id)), {\n method: \'GET\'\n });\n case 3:\n res = _context.v;\n _context.n = 4;\n return res.json();\n case 4:\n body = _context.v;\n if (!(!res.ok || !body || body.status === \'error\')) {\n _context.n = 5;\n break;\n }\n setError(body && body.message || \'Failed to load contract.\');\n setContract(null);\n return _context.a(2);\n case 5:\n c = body.contract || body.result || body;\n setContract(c || null);\n _context.n = 7;\n break;\n case 6:\n _context.p = 6;\n _t = _context.v;\n setError(_t && _t.message ? _t.message : \'Failed to load contract.\');\n case 7:\n _context.p = 7;\n setLoading(false);\n return _context.f(7);\n case 8:\n return _context.a(2);\n }\n }, _callee, null, [[2, 6, 7, 8]]);\n })), [id]);\n React.useEffect(function () {\n setLocalRun(null);\n setHubRun(null);\n setHubRunError(null);\n setHubRunLoading(false);\n setAnchorTxid(null);\n setAnchorError(null);\n setAnchorLoading(false);\n setCommitmentCopied(false);\n }, [id]);\n React.useEffect(function () {\n void reloadContract();\n }, [reloadContract]);\n React.useEffect(function () {\n var txid = contract && contract.txid ? String(contract.txid).trim() : \'\';\n if (!txid) {\n setPayTxMeta(null);\n return;\n }\n var cancelled = false;\n setPayTxMeta({\n loading: true\n });\n var upstream = loadUpstreamSettings();\n fetchTransactionByHash(upstream, txid).then(function (data) {\n if (cancelled) return;\n if (data && data.status === \'error\') {\n setPayTxMeta({\n loading: false,\n error: data.message || \'Could not load transaction.\'\n });\n return;\n }\n if (!data || _typeof(data) !== \'object\') {\n setPayTxMeta({\n loading: false,\n error: \'Transaction not found on this hub.\'\n });\n return;\n }\n setPayTxMeta({\n loading: false,\n tx: data\n });\n })["catch"](function (e) {\n if (!cancelled) setPayTxMeta({\n loading: false,\n error: e && e.message ? e.message : String(e)\n });\n });\n return function () {\n cancelled = true;\n };\n }, [contract && contract.txid]);\n React.useEffect(function () {\n var txid = contract && contract.txid ? String(contract.txid).trim() : \'\';\n var addr = contract && contract.invoiceAddress ? String(contract.invoiceAddress).trim() : \'\';\n var sats = contract && contract.invoiceAmountSats != null ? Number(contract.invoiceAmountSats) : NaN;\n if (!txid || !addr || !Number.isFinite(sats) || sats <= 0) {\n setBondVerify(null);\n return;\n }\n var cancelled = false;\n setBondVerify({\n loading: true\n });\n var upstream = loadUpstreamSettings();\n verifyL1Payment(upstream, {\n txid: txid,\n address: addr,\n amountSats: Math.round(sats)\n }).then(function (data) {\n if (cancelled) return;\n setBondVerify({\n loading: false,\n data: data\n });\n })["catch"](function (e) {\n if (cancelled) return;\n setBondVerify({\n loading: false,\n error: e && e.message ? e.message : String(e)\n });\n });\n return function () {\n cancelled = true;\n };\n }, [contract && contract.txid, contract && contract.invoiceAddress, contract && contract.invoiceAmountSats]);\n var created = contract && contract.created ? new Date(contract.created).toLocaleString() : \'\';\n var isExecution = !!(contract && contract.type === \'ExecutionContract\');\n var hasExecProgram = !!(contract && contract.program != null && _typeof(contract.program) === \'object\');\n var runLocalExecution = React.useCallback(function () {\n if (!contract || !contract.program || _typeof(contract.program) !== \'object\') return;\n setLocalRun(runExecutionProgram(contract.program));\n }, [contract]);\n var runHubExecution = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var result, raw, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n if (id) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2);\n case 1:\n if (!(!contract || contract.program == null || _typeof(contract.program) !== \'object\')) {\n _context2.n = 2;\n break;\n }\n setHubRunError(\'No program on this contract; cannot run on the hub.\');\n return _context2.a(2);\n case 2:\n setHubRunLoading(true);\n setHubRunError(null);\n setHubRun(null);\n setCommitmentCopied(false);\n _context2.p = 3;\n _context2.n = 4;\n return fetchJsonRpcResult(\'RunExecutionContract\', [{\n contractId: id\n }]);\n case 4:\n result = _context2.v;\n if (!(result && result.status === \'error\')) {\n _context2.n = 5;\n break;\n }\n setHubRunError(describeHubRpcFailure(result.message || \'Run failed\', \'\'));\n return _context2.a(2);\n case 5:\n if (!(result == null)) {\n _context2.n = 6;\n break;\n }\n setHubRunError(\'Empty response from hub\');\n return _context2.a(2);\n case 6:\n setHubRun(result);\n setAnchorTxid(null);\n setAnchorError(null);\n if (result && result.fabricMessageWireHex && typeof window !== \'undefined\') {\n try {\n window.dispatchEvent(new CustomEvent(\'fabric:delegationSignRequest\', {\n detail: {\n wireHex: result.fabricMessageWireHex,\n delegationSignRequest: result.delegationSignRequest || null,\n source: \'RunExecutionContract\'\n }\n }));\n } catch (_) {}\n }\n _context2.n = 8;\n break;\n case 7:\n _context2.p = 7;\n _t2 = _context2.v;\n raw = _t2 && _t2.message ? _t2.message : String(_t2);\n setHubRunError(describeHubRpcFailure(raw, \'Check hub reachability and JSON-RPC (/services/rpc).\'));\n case 8:\n _context2.p = 8;\n setHubRunLoading(false);\n return _context2.f(8);\n case 9:\n return _context2.a(2);\n }\n }, _callee2, null, [[3, 7, 8, 9]]);\n })), [id, contract]);\n var anchorCommitment = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var out, raw, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n if (!(!hubRun || !hubRun.runCommitmentHex || !adminToken)) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n setAnchorLoading(true);\n setAnchorError(null);\n setAnchorTxid(null);\n _context3.p = 2;\n _context3.n = 3;\n return fetchJsonRpcResult(\'AnchorExecutionRunCommitment\', [{\n commitmentHex: hubRun.runCommitmentHex,\n adminToken: adminToken\n }]);\n case 3:\n out = _context3.v;\n if (!(out && out.status === \'error\')) {\n _context3.n = 4;\n break;\n }\n setAnchorError(describeHubRpcFailure(out.message || \'Anchor failed\', \'\'));\n return _context3.a(2);\n case 4:\n if (out && out.txid) setAnchorTxid(String(out.txid));else setAnchorError(\'No txid in response\');\n _context3.n = 6;\n break;\n case 5:\n _context3.p = 5;\n _t3 = _context3.v;\n raw = _t3 && _t3.message ? _t3.message : String(_t3);\n setAnchorError(describeHubRpcFailure(raw, \'Regtest + admin token required; check hub wallet and /services/rpc.\'));\n case 6:\n _context3.p = 6;\n setAnchorLoading(false);\n return _context3.f(6);\n case 7:\n return _context3.a(2);\n }\n }, _callee3, null, [[2, 5, 6, 7]]);\n })), [hubRun, adminToken]);\n var localCommitmentHex = React.useMemo(function () {\n if (!localRun || !id) return null;\n try {\n return computeExecutionRunCommitmentHex(id, localRun);\n } catch (_) {\n return null;\n }\n }, [localRun, id]);\n var contractDot = React.useMemo(function () {\n if (!contract) return \'\';\n try {\n return contractToDot(contract, hubRun);\n } catch (_) {\n return \'\';\n }\n }, [contract, hubRun]);\n return /*#__PURE__*/React.createElement("fabric-contract-detail", {\n "class": "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.75em\',\n flexWrap: \'wrap\',\n marginBottom: \'0.25em\'\n },\n role: "banner"\n }, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n as: Link,\n to: "/contracts",\n "aria-label": "Back to contracts list"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Contracts"), /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n style: {\n margin: 0,\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Header.Content, null, "Contract", id && error && !loading && /*#__PURE__*/React.createElement(Header.Subheader, {\n style: {\n marginTop: \'0.35em\',\n fontWeight: \'normal\'\n }\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.85em\'\n }\n }, id))), contract && !isExecution && /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "purple"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cloud",\n "aria-hidden": "true"\n }), "Storage"), contract && isExecution && /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "teal"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "code",\n "aria-hidden": "true"\n }), "Execution"))), /*#__PURE__*/React.createElement(Segment, null, loading && /*#__PURE__*/React.createElement("div", {\n style: {\n minHeight: \'20vh\',\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: "centered"\n })), !loading && error && /*#__PURE__*/React.createElement(Message, {\n negative: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Could not load contract"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, error), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.85em\',\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n type: "button",\n onClick: function onClick() {\n return void reloadContract();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry"), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n as: Link,\n to: "/contracts"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "list"\n }), "Contracts list")), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.85em 0 0\',\n fontSize: \'0.9em\',\n color: \'#555\'\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: "/contracts"\n }, "Execution contracts"), " and the live ", /*#__PURE__*/React.createElement("strong", null, "Federation guarantees"), " panel are on the main contracts page.")), !loading && !error && contract && contractDot ? /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Contract graph"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.75em\'\n }\n }, "Derived from this contract\'s fields (storage vs execution). Same Graphviz preview as DOT documents \\u2014 no private payload beyond what this page already shows."), /*#__PURE__*/React.createElement(GraphDocumentPreview, {\n dotSource: contractDot,\n skipIdentityGate: true\n }), /*#__PURE__*/React.createElement("details", {\n style: {\n marginTop: \'0.75rem\'\n }\n }, /*#__PURE__*/React.createElement("summary", {\n style: {\n cursor: \'pointer\',\n color: \'#555\'\n }\n }, "DOT source"), /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n fontSize: \'0.75rem\',\n background: \'#f7f7f7\',\n padding: \'0.5rem\',\n borderRadius: 4\n }\n }, contractDot))) : null, !loading && !error && contract && isExecution && (!contractDot || !String(contractDot).trim()) && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Contract graph"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#666\'\n }\n }, "No DOT preview was generated for this execution contract. You can still run locally or on the hub below.")), !loading && !error && contract && isExecution && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Distributed execution and Bitcoin L1"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "This flow is designed so peers can agree on a ", /*#__PURE__*/React.createElement("strong", null, "program"), ", verify ", /*#__PURE__*/React.createElement("strong", null, "runs"), " deterministically, and relate hub state to ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin"), ":"), /*#__PURE__*/React.createElement("ul", {\n style: {\n margin: \'0.5em 0 0\',\n paddingLeft: \'1.25em\',\n color: \'#555\'\n }\n }, /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("strong", null, "Registry (when Bitcoin is on):"), " L1 pays the hub invoice for a fixed ", /*#__PURE__*/React.createElement("code", null, "programDigest"), " before ", /*#__PURE__*/React.createElement("code", null, "CreateExecutionContract"), " accepts the publish."), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("strong", null, "Run integrity:"), " the hub interpreter returns ", /*#__PURE__*/React.createElement("code", null, "runCommitmentHex"), " (hash of the canonical trace). ", /*#__PURE__*/React.createElement("strong", null, "Run locally"), " in the browser should match; mismatch means different inputs or code paths."), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("strong", null, "L1 checkpoint (regtest demo):"), " after a successful hub run, an admin can broadcast ", /*#__PURE__*/React.createElement("strong", null, "OP_RETURN"), " carrying that digest using the hub wallet (see below)."), uf.sidechain ? /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("strong", null, "Federation (sidechain + beacon):"), " enforced by this hub only for ", /*#__PURE__*/React.createElement("code", null, "SubmitSidechainStatePatch"), " and beacon epoch ", /*#__PURE__*/React.createElement("code", null, "federationWitness"), " fields \\u2014 see", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/admin/beacon-federation"\n }, "Beacon Federation"), \' \', "and the live policy panel below (not used for registry publish or hub runs).") : null), uf.sidechain ? /*#__PURE__*/React.createElement(DistributedFederationPanel, {\n marginBottom: "0"\n }) : null), (contract.invoiceAddress || contract.invoiceAmountSats != null) && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "L1 registry payment"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "This execution contract was published with a verified on-chain payment to the hub invoice address (same L1 check as storage distribute bonds).")), bondVerify && bondVerify.loading && /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Verifying registry payment"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, "Checking L1 proof against the registry invoice\\u2026")), bondVerify && !bondVerify.loading && bondVerify.error && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n marginBottom: \'1em\'\n },\n content: bondVerify.error\n }), bondVerify && !bondVerify.loading && bondVerify.data && /*#__PURE__*/React.createElement(Message, {\n positive: !!bondVerify.data.verified,\n negative: !bondVerify.data.verified,\n style: {\n marginBottom: \'1em\'\n },\n header: bondVerify.data.verified ? \'Registry payment verified on-chain\' : \'L1 proof check did not pass\',\n content: bondVerify.data.verified ? "Matched at least ".concat(formatSatsDisplay(contract.invoiceAmountSats), " sats to the invoice address. Confirmations: ").concat(bondVerify.data.confirmations != null ? bondVerify.data.confirmations : \'n/a\').concat(bondVerify.data.inMempool ? \' (still in mempool)\' : \'\', ".") : \'Inspect the funding transaction or mempool; the hub may still list the contract if verification is temporarily unavailable.\'\n }), !hasExecProgram && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "No executable program"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#555\'\n }\n }, "This execution contract record has no ", /*#__PURE__*/React.createElement("code", null, "program"), " object (legacy row, truncated API, or bad publish). Open the hub ", /*#__PURE__*/React.createElement("code", null, "contracts/.json"), " store or republish from the contracts list.")), /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Execution program"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Run the same sandboxed interpreter the hub used at publish time. ", /*#__PURE__*/React.createElement("strong", null, "Run on hub"), " calls ", /*#__PURE__*/React.createElement("code", null, "RunExecutionContract"), " via ", /*#__PURE__*/React.createElement("code", null, "POST /services/rpc"), " (same methods as WebSocket JSON-RPC). Compare the returned ", /*#__PURE__*/React.createElement("code", null, "runCommitmentHex"), " with ", /*#__PURE__*/React.createElement("strong", null, "Run locally"), "; anchor on regtest after a successful hub run when offered below."), /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'1em\',\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n disabled: !hasExecProgram,\n title: hasExecProgram ? undefined : \'No program JSON on this contract\',\n onClick: runLocalExecution\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "play"\n }), "Run locally"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n loading: hubRunLoading,\n disabled: hubRunLoading || !hasExecProgram,\n title: hasExecProgram ? undefined : \'No program JSON on this contract\',\n onClick: runHubExecution\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "server"\n }), "Run on hub")), hubRunError && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Run on hub failed"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, hubRunError), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n loading: hubRunLoading,\n disabled: hubRunLoading,\n onClick: function onClick() {\n return void runHubExecution();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry"))), hubRun && !hubRunError && hubRun.delegationSignRequestError && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Delegation signing wire not built"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, String(hubRun.delegationSignRequestError)), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n fontSize: \'0.9em\',\n color: \'#666\'\n }\n }, "The hub run finished, but no ", /*#__PURE__*/React.createElement("code", null, "fabricMessageWireHex"), " was produced for the delegation modal. Check the raw hub result below.")), hubRun && !hubRunError && !hubRun.runCommitmentHex && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "No run commitment digest"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#666\'\n }\n }, "The hub returned a run result without ", /*#__PURE__*/React.createElement("code", null, "runCommitmentHex"), " (commitment computation may have failed on the server).")), localRun && /*#__PURE__*/React.createElement(Message, {\n positive: localRun.ok,\n negative: !localRun.ok,\n header: localRun.ok ? \'Local run finished\' : \'Local run failed\',\n content: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n fontSize: \'0.8em\',\n margin: 0\n }\n }, JSON.stringify(localRun, null, 2)), !localRun.ok && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n onClick: runLocalExecution\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Run locally again"))),\n style: {\n marginBottom: \'1em\'\n }\n }), hubRun && hubRun.runCommitmentHex && /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Run commitment (digest)"), hubRun.ok === false && /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.5em\',\n color: \'#8a6d3b\'\n }\n }, "This hub run did not finish successfully (", /*#__PURE__*/React.createElement("code", null, "ok: false"), "). The digest is still shown for comparison; OP_RETURN anchor is only offered after a successful run."), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\',\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'center\',\n gap: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n wordBreak: \'break-all\',\n fontFamily: \'monospace\',\n fontSize: \'0.85em\',\n margin: 0,\n flex: \'1 1 12rem\'\n }\n }, hubRun.runCommitmentHex), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n icon: true,\n onClick: copyRunCommitmentHex,\n title: "Copy commitment hex",\n "aria-label": "Copy run commitment digest hex"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy outline"\n })), commitmentCopied && /*#__PURE__*/React.createElement("span", {\n style: {\n fontSize: \'0.85em\',\n color: \'#276749\'\n }\n }, "Copied")), !localCommitmentHex && /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.75em\',\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, "Use ", /*#__PURE__*/React.createElement("strong", null, "Run locally"), " above to compare this digest with the same interpreter in your browser."), localCommitmentHex && /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.75em\',\n color: localCommitmentHex === hubRun.runCommitmentHex ? \'#276749\' : \'#b00\'\n }\n }, localCommitmentHex === hubRun.runCommitmentHex ? \'Matches local run commitment.\' : \'Local run commitment differs — re-run locally after loading the same program.\'), bitcoinNet.loading && hubRun.ok && /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.75em\',\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, "Checking ", /*#__PURE__*/React.createElement("code", null, "/services/bitcoin"), " for regtest anchoring options\\u2026"), !bitcoinNet.loading && bitcoinNet.regtest && bitcoinNet.available && hubRun.ok && !adminToken && /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.75em\',\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, "Complete first-time setup and keep your admin token in this browser to anchor on regtest, or open", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), "."), !bitcoinNet.loading && bitcoinNet.regtest && bitcoinNet.available && adminToken && hubRun.ok && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "orange",\n loading: anchorLoading,\n disabled: anchorLoading,\n onClick: anchorCommitment\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), "Anchor commitment on regtest (OP_RETURN)"), /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.75em\',\n color: \'#888\',\n fontSize: \'0.85em\'\n }\n }, "Uses admin token + Hub wallet (mine a block first if needed).")), !bitcoinNet.loading && (!bitcoinNet.regtest || !bitcoinNet.available) && hubRun.ok && /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.75em\',\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, "OP_RETURN anchoring for run commitments is only enabled when this hub\'s Bitcoin service is available on regtest."), anchorError && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n compact: true,\n size: "small",\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Anchor failed"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, anchorError), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n style: {\n marginTop: \'0.5em\'\n },\n loading: anchorLoading,\n disabled: anchorLoading,\n onClick: function onClick() {\n return void anchorCommitment();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry")), anchorTxid && /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.75em\'\n }\n }, uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n as: Link,\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(anchorTxid))\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "external"\n }), "View anchor tx ", anchorTxid.slice(0, 18), "\\u2026") : /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.85em\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility to open the tx viewer"\n }, anchorTxid))), hubRun && Array.isArray(hubRun.trace) && hubRun.trace.length > 0 && !hubRun.trace.some(function (t) {\n return t && t.truncated;\n }) && /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Execution trace (hub)"), /*#__PURE__*/React.createElement(Step.Group, {\n ordered: true,\n fluid: true,\n size: "small"\n }, hubRun.trace.map(function (t, i) {\n return /*#__PURE__*/React.createElement(Step, {\n key: i,\n completed: hubRun.ok\n }, /*#__PURE__*/React.createElement(Step.Content, null, /*#__PURE__*/React.createElement(Step.Title, null, "Step ", t.pc != null ? t.pc + 1 : i + 1, t.op ? " \\xB7 ".concat(t.op) : \'\'), /*#__PURE__*/React.createElement(Step.Description, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.75em\',\n wordBreak: \'break-all\'\n }\n }, JSON.stringify(t)))));\n }))), hubRun && /*#__PURE__*/React.createElement(Message, {\n positive: hubRun.ok,\n negative: !hubRun.ok,\n header: "Hub run result (raw JSON)",\n content: /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n fontSize: \'0.8em\',\n margin: 0\n }\n }, JSON.stringify(hubRun, null, 2)),\n style: {\n marginBottom: \'1em\'\n }\n }), /*#__PURE__*/React.createElement(Table, {\n definition: true\n }, /*#__PURE__*/React.createElement(Table.Body, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n width: 3\n }, "ID"), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", null, contract.id))), contract.name && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Name"), /*#__PURE__*/React.createElement(Table.Cell, null, contract.name)), contract.validatedSteps != null && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Validated steps"), /*#__PURE__*/React.createElement(Table.Cell, null, contract.validatedSteps)), contract.programDigest && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Program digest"), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, contract.programDigest))), contract.invoiceAddress && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Registry invoice"), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, contract.invoiceAddress))), contract.invoiceAmountSats != null && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Invoice amount"), /*#__PURE__*/React.createElement(Table.Cell, null, formatSatsDisplay(contract.invoiceAmountSats), " sats")), contract.txid && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Registry tx"), /*#__PURE__*/React.createElement(Table.Cell, null, uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n as: Link,\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(contract.txid))\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), String(contract.txid).slice(0, 16), "\\u2026") : /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility to open the tx viewer"\n }, contract.txid), payTxMeta && payTxMeta.loading && /*#__PURE__*/React.createElement(Label, {\n size: "small",\n style: {\n marginLeft: \'0.5em\'\n },\n basic: true\n }, "Loading\\u2026"), payTxMeta && payTxMeta.tx && (payTxMeta.tx.blockhash == null || payTxMeta.tx.blockhash === \'\') && /*#__PURE__*/React.createElement(Label, {\n color: "orange",\n size: "small",\n style: {\n marginLeft: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "clock"\n }), "Mempool"), payTxMeta && payTxMeta.tx && payTxMeta.tx.confirmations != null && Number(payTxMeta.tx.confirmations) > 0 && /*#__PURE__*/React.createElement(Label, {\n color: "green",\n size: "small",\n style: {\n marginLeft: \'0.5em\'\n }\n }, payTxMeta.tx.confirmations, " confirmation", Number(payTxMeta.tx.confirmations) === 1 ? \'\' : \'s\'), payTxMeta && payTxMeta.error && !payTxMeta.loading && /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "grey",\n style: {\n marginLeft: \'0.5em\'\n },\n title: payTxMeta.error\n }, "Tx status n/a"))), created && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Created"), /*#__PURE__*/React.createElement(Table.Cell, null, created)), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Program"), /*#__PURE__*/React.createElement(Table.Cell, null, hasExecProgram ? /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n fontSize: \'0.8em\',\n margin: 0\n }\n }, JSON.stringify(contract.program, null, 2)) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\'\n }\n }, "No program object in this contract record.")))))), !loading && !error && contract && !isExecution && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Details"), (contract.invoiceAddress || contract.invoiceAmountSats != null) && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Bitcoin-bonded distribute flow"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "This record includes the ", /*#__PURE__*/React.createElement("strong", null, "CreateDistributeInvoice"), " destination and amount the hub checked when ", /*#__PURE__*/React.createElement("strong", null, "CreateStorageContract"), " ran. The section below re-runs the same L1 proof as ", /*#__PURE__*/React.createElement("code", null, "GET /services/bitcoin/transactions/:txid?address=&amountSats="), ".")), bondVerify && bondVerify.loading && /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Verifying bond"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, "Checking L1 payment proof against the distribute invoice\\u2026")), bondVerify && !bondVerify.loading && bondVerify.error && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n marginBottom: \'1em\'\n },\n content: bondVerify.error\n }), bondVerify && !bondVerify.loading && bondVerify.data && /*#__PURE__*/React.createElement(Message, {\n positive: !!bondVerify.data.verified,\n negative: !bondVerify.data.verified,\n style: {\n marginBottom: \'1em\'\n },\n header: bondVerify.data.verified ? \'Bitcoin bond verified on-chain\' : \'L1 proof check did not pass\',\n content: bondVerify.data.verified ? "Matched at least ".concat(formatSatsDisplay(contract.invoiceAmountSats), " sats to the invoice address. Confirmations: ").concat(bondVerify.data.confirmations != null ? bondVerify.data.confirmations : \'n/a\').concat(bondVerify.data.inMempool ? \' (still in mempool)\' : \'\', ".") : \'Inspect the payment transaction or regtest mempool. Older contracts may lack invoice fields; the row below still links the bonding tx when present.\'\n }), !contract.invoiceAddress && contract.txid && /*#__PURE__*/React.createElement(Message, {\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Legacy storage contract"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#555\'\n }\n }, "No invoice address on file (created before this build). Use the payment tx link for manual inspection; new bonds persist ", /*#__PURE__*/React.createElement("code", null, "invoiceAddress"), " / ", /*#__PURE__*/React.createElement("code", null, "invoiceAmountSats"), " for automatic proof.")), /*#__PURE__*/React.createElement(Table, {\n definition: true\n }, /*#__PURE__*/React.createElement(Table.Body, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n width: 3\n }, "ID"), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", null, contract.id))), contract.invoiceAddress && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Distribute invoice"), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, contract.invoiceAddress))), contract.invoiceAmountSats != null && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Invoice amount"), /*#__PURE__*/React.createElement(Table.Cell, null, formatSatsDisplay(contract.invoiceAmountSats), " sats")), contract.document && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Document"), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", null, contract.document), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n as: Link,\n to: "/documents/".concat(encodeURIComponent(contract.document)),\n style: {\n marginLeft: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate"\n }), "View"))), contract.txid && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Payment tx"), /*#__PURE__*/React.createElement(Table.Cell, null, uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n as: Link,\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(contract.txid))\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), String(contract.txid).slice(0, 16), "\\u2026") : /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility to open the tx viewer"\n }, contract.txid), payTxMeta && payTxMeta.loading && /*#__PURE__*/React.createElement(Label, {\n size: "small",\n style: {\n marginLeft: \'0.5em\'\n },\n basic: true\n }, "Loading\\u2026"), payTxMeta && payTxMeta.tx && (payTxMeta.tx.blockhash == null || payTxMeta.tx.blockhash === \'\') && /*#__PURE__*/React.createElement(Label, {\n color: "orange",\n size: "small",\n style: {\n marginLeft: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "clock"\n }), "Mempool (unconfirmed)"), payTxMeta && payTxMeta.tx && payTxMeta.tx.confirmations != null && Number(payTxMeta.tx.confirmations) > 0 && /*#__PURE__*/React.createElement(Label, {\n color: "green",\n size: "small",\n style: {\n marginLeft: \'0.5em\'\n }\n }, payTxMeta.tx.confirmations, " confirmation", Number(payTxMeta.tx.confirmations) === 1 ? \'\' : \'s\'), payTxMeta && payTxMeta.error && !payTxMeta.loading && /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "grey",\n style: {\n marginLeft: \'0.5em\'\n },\n title: payTxMeta.error\n }, "Tx status n/a"))), contract.amountSats != null && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Amount"), /*#__PURE__*/React.createElement(Table.Cell, null, formatSatsDisplay(contract.amountSats), " sats")), contract.desiredCopies != null && contract.desiredCopies > 1 && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Desired copies"), /*#__PURE__*/React.createElement(Table.Cell, null, contract.desiredCopies)), contract.durationYears != null && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Duration"), /*#__PURE__*/React.createElement(Table.Cell, null, contract.durationYears, " years")), contract.challengeCadence && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Challenge cadence"), /*#__PURE__*/React.createElement(Table.Cell, null, contract.challengeCadence)), contract.responseDeadline && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Response deadline"), /*#__PURE__*/React.createElement(Table.Cell, null, contract.responseDeadline)), created && /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, "Created"), /*#__PURE__*/React.createElement(Table.Cell, null, created))))), !loading && !error && !contract && /*#__PURE__*/React.createElement("div", {\n style: {\n color: \'#666\'\n }\n }, "No contract data."))));\n}\nmodule.exports = ContractView;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBLENBQUF1TSxhQUFBLENBQUM1TCxLQUFLLENBQUNtUSxJQUFJLFFBQUU1TSxRQUFRLENBQUNvTixnQkFBNkIsQ0FDMUMsQ0FDWixFQUNBcE4sUUFBUSxDQUFDcU4sZ0JBQWdCLGlCQUN4QnZSLEtBQUEsQ0FBQXVNLGFBQUEsQ0FBQzVMLEtBQUssQ0FBQ2tRLEdBQUcscUJBQ1I3USxLQUFBLENBQUF1TSxhQUFBLENBQUM1TCxLQUFLLENBQUNtUSxJQUFJLFFBQUMsbUJBQTZCLENBQUMsZUFDMUM5USxLQUFBLENBQUF1TSxhQUFBLENBQUM1TCxLQUFLLENBQUNtUSxJQUFJLFFBQUU1TSxRQUFRLENBQUNxTixnQkFBNkIsQ0FDMUMsQ0FDWixFQUNBOUcsT0FBTyxpQkFDTnpLLEtBQUEsQ0FBQXVNLGFBQUEsQ0FBQzVMLEtBQUssQ0FBQ2tRLEdBQUcscUJBQ1I3USxLQUFBLENBQUF1TSxhQUFBLENBQUM1TCxLQUFLLENBQUNtUSxJQUFJLFFBQUMsU0FBbUIsQ0FBQyxlQUNoQzlRLEtBQUEsQ0FBQXVNLGFBQUEsQ0FBQzVMLEtBQUssQ0FBQ21RLElBQUksUUFBRXJHLE9BQW9CLENBQ3hCLENBRUgsQ0FDUCxDQUNPLENBQ2pCLEVBQ0EsQ0FBQ25HLE9BQU8sSUFBSSxDQUFDZixLQUFLLElBQUksQ0FBQ1csUUFBUSxpQkFDOUJsRSxLQUFBLENBQUF1TSxhQUFBO0lBQUtDLEtBQUssRUFBRTtNQUFFa0IsS0FBSyxFQUFFO0lBQU87RUFBRSxHQUFDLG1CQUFzQixDQUVoRCxDQUNGLENBQ2EsQ0FBQztBQUU3QjtBQUVBOEQsTUFBTSxDQUFDQyxPQUFPLEdBQUc1TixZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0NvbnRyYWN0Vmlldy5qcz9mMmIwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyB1c2VQYXJhbXMsIExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHsgU2VnbWVudCwgSGVhZGVyLCBJY29uLCBCdXR0b24sIExvYWRlciwgVGFibGUsIExhYmVsLCBNZXNzYWdlLCBTdGVwIH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3QgeyBmb3JtYXRTYXRzRGlzcGxheSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2Zvcm1hdFNhdHMnKTtcbmNvbnN0IHsgbG9hZFVwc3RyZWFtU2V0dGluZ3MsIGZldGNoVHJhbnNhY3Rpb25CeUhhc2gsIHZlcmlmeUwxUGF5bWVudCB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2JpdGNvaW5DbGllbnQnKTtcbmNvbnN0IHsgcnVuRXhlY3V0aW9uUHJvZ3JhbSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0V4ZWN1dGlvbk1hY2hpbmUnKTtcbmNvbnN0IHsgY29tcHV0ZUV4ZWN1dGlvblJ1bkNvbW1pdG1lbnRIZXggfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9leGVjdXRpb25SdW5Db21taXRtZW50Jyk7XG5jb25zdCB7IGNvbnRyYWN0VG9Eb3QgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9jb250cmFjdEdyYXBoRG90Jyk7XG5jb25zdCBHcmFwaERvY3VtZW50UHJldmlldyA9IHJlcXVpcmUoJy4vR3JhcGhEb2N1bWVudFByZXZpZXcnKTtcbmNvbnN0IHsgZGVzY3JpYmVIdWJScGNGYWlsdXJlIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViUnBjSGludHMnKTtcbmNvbnN0IERpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsID0gcmVxdWlyZSgnLi9EaXN0cmlidXRlZEZlZGVyYXRpb25QYW5lbCcpO1xuY29uc3Qge1xuICBsb2FkSHViVWlGZWF0dXJlRmxhZ3MsXG4gIHN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YlVpRmVhdHVyZUZsYWdzJyk7XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoSnNvblJwY1Jlc3VsdCAobWV0aG9kLCBwYXJhbXMpIHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9zZXJ2aWNlcy9ycGMnLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsganNvbnJwYzogJzIuMCcsIGlkOiAxLCBtZXRob2QsIHBhcmFtcyB9KVxuICB9KTtcbiAgbGV0IGJvZHkgPSB7fTtcbiAgdHJ5IHtcbiAgICBib2R5ID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHRocm93IG5ldyBFcnJvcignSHViIHJldHVybmVkIG5vbi1KU09OIChjaGVjayBuZXR3b3JrIG9yIGh1YiBsb2dzKScpO1xuICB9XG4gIGlmICghcmVzLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKChib2R5ICYmIGJvZHkuZXJyb3IgJiYgYm9keS5lcnJvci5tZXNzYWdlKSB8fCByZXMuc3RhdHVzVGV4dCB8fCBgSFRUUCAke3Jlcy5zdGF0dXN9YCk7XG4gIH1cbiAgaWYgKGJvZHkgJiYgYm9keS5lcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihib2R5LmVycm9yLm1lc3NhZ2UgfHwgJ1JQQyBlcnJvcicpO1xuICB9XG4gIHJldHVybiBib2R5ICYmIGJvZHkucmVzdWx0ICE9IG51bGwgPyBib2R5LnJlc3VsdCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIENvbnRyYWN0VmlldyAocHJvcHMpIHtcbiAgY29uc3QgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IGlkID0gcGFyYW1zICYmIHBhcmFtcy5pZCA/IHBhcmFtcy5pZCA6ICcnO1xuXG4gIGNvbnN0IFtjb250cmFjdCwgc2V0Q29udHJhY3RdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3BheVR4TWV0YSwgc2V0UGF5VHhNZXRhXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9jYWxSdW4sIHNldExvY2FsUnVuXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbaHViUnVuLCBzZXRIdWJSdW5dID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtodWJSdW5Mb2FkaW5nLCBzZXRIdWJSdW5Mb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2h1YlJ1bkVycm9yLCBzZXRIdWJSdW5FcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2JpdGNvaW5OZXQsIHNldEJpdGNvaW5OZXRdID0gUmVhY3QudXNlU3RhdGUoeyBsb2FkaW5nOiB0cnVlLCByZWd0ZXN0OiBmYWxzZSwgYXZhaWxhYmxlOiBmYWxzZSB9KTtcbiAgY29uc3QgW2FuY2hvckxvYWRpbmcsIHNldEFuY2hvckxvYWRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYW5jaG9yRXJyb3IsIHNldEFuY2hvckVycm9yXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbYW5jaG9yVHhpZCwgc2V0QW5jaG9yVHhpZF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2JvbmRWZXJpZnksIHNldEJvbmRWZXJpZnldID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtjb21taXRtZW50Q29waWVkLCBzZXRDb21taXRtZW50Q29waWVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBhZG1pblRva2VuID0gcHJvcHMgJiYgcHJvcHMuYWRtaW5Ub2tlbiA/IFN0cmluZyhwcm9wcy5hZG1pblRva2VuKSA6ICcnO1xuXG4gIGNvbnN0IFtodWJVaVRpY2ssIHNldEh1YlVpVGlja10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzKCgpID0+IHNldEh1YlVpVGljaygodCkgPT4gdCArIDEpKSwgW10pO1xuICB2b2lkIGh1YlVpVGljaztcbiAgY29uc3QgdWYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcblxuICBjb25zdCBjb3B5UnVuQ29tbWl0bWVudEhleCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBoZXggPSBodWJSdW4gJiYgaHViUnVuLnJ1bkNvbW1pdG1lbnRIZXggPyBTdHJpbmcoaHViUnVuLnJ1bkNvbW1pdG1lbnRIZXgpIDogJyc7XG4gICAgaWYgKCFoZXgpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgIW5hdmlnYXRvci5jbGlwYm9hcmQgfHwgdHlwZW9mIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldENvbW1pdG1lbnRDb3BpZWQoZmFsc2UpO1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGhleCkudGhlbigoKSA9PiB7XG4gICAgICBzZXRDb21taXRtZW50Q29waWVkKHRydWUpO1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gc2V0Q29tbWl0bWVudENvcGllZChmYWxzZSksIDIwMDApO1xuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfSwgW2h1YlJ1bl0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGFjID0gdHlwZW9mIEFib3J0Q29udHJvbGxlciAhPT0gJ3VuZGVmaW5lZCcgPyBuZXcgQWJvcnRDb250cm9sbGVyKCkgOiBudWxsO1xuICAgIGxldCB0aW1lb3V0SWQ7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGFjKSB7XG4gICAgICB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYWMuYWJvcnQoKTtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIH0sIDE1MDAwKTtcbiAgICB9XG4gICAgZmV0Y2goJy9zZXJ2aWNlcy9iaXRjb2luJywge1xuICAgICAgaGVhZGVyczogeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgLi4uKGFjID8geyBzaWduYWw6IGFjLnNpZ25hbCB9IDoge30pXG4gICAgfSlcbiAgICAgIC50aGVuKChyKSA9PiByLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKSlcbiAgICAgIC50aGVuKChib2R5KSA9PiB7XG4gICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgY29uc3QgbmV0ID0gYm9keSAmJiAoYm9keS5uZXR3b3JrIHx8IGJvZHkuY2hhaW4pO1xuICAgICAgICBjb25zdCBhdmFpbGFibGUgPSAhIShib2R5ICYmIGJvZHkuYXZhaWxhYmxlICE9PSBmYWxzZSAmJiBib2R5LnN0YXR1cyAhPT0gJ2Vycm9yJyk7XG4gICAgICAgIHNldEJpdGNvaW5OZXQoe1xuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGF2YWlsYWJsZSxcbiAgICAgICAgICByZWd0ZXN0OiBTdHJpbmcobmV0IHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAncmVndGVzdCdcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHNldEJpdGNvaW5OZXQoeyBsb2FkaW5nOiBmYWxzZSwgYXZhaWxhYmxlOiBmYWxzZSwgcmVndGVzdDogZmFsc2UgfSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGltZW91dElkICE9IG51bGwpIHtcbiAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgaWYgKGFjKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYWMuYWJvcnQoKTtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0aW1lb3V0SWQgIT0gbnVsbCkge1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IHJlbG9hZENvbnRyYWN0ID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghaWQpIHJldHVybjtcbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgL2NvbnRyYWN0cy8ke2VuY29kZVVSSUNvbXBvbmVudChpZCl9YCwgeyBtZXRob2Q6ICdHRVQnIH0pO1xuICAgICAgY29uc3QgYm9keSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICBpZiAoIXJlcy5vayB8fCAhYm9keSB8fCBib2R5LnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICBzZXRFcnJvcigoYm9keSAmJiBib2R5Lm1lc3NhZ2UpIHx8ICdGYWlsZWQgdG8gbG9hZCBjb250cmFjdC4nKTtcbiAgICAgICAgc2V0Q29udHJhY3QobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGMgPSBib2R5LmNvbnRyYWN0IHx8IGJvZHkucmVzdWx0IHx8IGJvZHk7XG4gICAgICBzZXRDb250cmFjdChjIHx8IG51bGwpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldEVycm9yKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogJ0ZhaWxlZCB0byBsb2FkIGNvbnRyYWN0LicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtpZF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TG9jYWxSdW4obnVsbCk7XG4gICAgc2V0SHViUnVuKG51bGwpO1xuICAgIHNldEh1YlJ1bkVycm9yKG51bGwpO1xuICAgIHNldEh1YlJ1bkxvYWRpbmcoZmFsc2UpO1xuICAgIHNldEFuY2hvclR4aWQobnVsbCk7XG4gICAgc2V0QW5jaG9yRXJyb3IobnVsbCk7XG4gICAgc2V0QW5jaG9yTG9hZGluZyhmYWxzZSk7XG4gICAgc2V0Q29tbWl0bWVudENvcGllZChmYWxzZSk7XG4gIH0sIFtpZF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdm9pZCByZWxvYWRDb250cmFjdCgpO1xuICB9LCBbcmVsb2FkQ29udHJhY3RdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHR4aWQgPSBjb250cmFjdCAmJiBjb250cmFjdC50eGlkID8gU3RyaW5nKGNvbnRyYWN0LnR4aWQpLnRyaW0oKSA6ICcnO1xuICAgIGlmICghdHhpZCkge1xuICAgICAgc2V0UGF5VHhNZXRhKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgc2V0UGF5VHhNZXRhKHsgbG9hZGluZzogdHJ1ZSB9KTtcbiAgICBjb25zdCB1cHN0cmVhbSA9IGxvYWRVcHN0cmVhbVNldHRpbmdzKCk7XG4gICAgZmV0Y2hUcmFuc2FjdGlvbkJ5SGFzaCh1cHN0cmVhbSwgdHhpZClcbiAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICBzZXRQYXlUeE1ldGEoeyBsb2FkaW5nOiBmYWxzZSwgZXJyb3I6IGRhdGEubWVzc2FnZSB8fCAnQ291bGQgbm90IGxvYWQgdHJhbnNhY3Rpb24uJyB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHNldFBheVR4TWV0YSh7IGxvYWRpbmc6IGZhbHNlLCBlcnJvcjogJ1RyYW5zYWN0aW9uIG5vdCBmb3VuZCBvbiB0aGlzIGh1Yi4nIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRQYXlUeE1ldGEoeyBsb2FkaW5nOiBmYWxzZSwgdHg6IGRhdGEgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGlmICghY2FuY2VsbGVkKSBzZXRQYXlUeE1ldGEoeyBsb2FkaW5nOiBmYWxzZSwgZXJyb3I6IGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpIH0pO1xuICAgICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHsgY2FuY2VsbGVkID0gdHJ1ZTsgfTtcbiAgfSwgW2NvbnRyYWN0ICYmIGNvbnRyYWN0LnR4aWRdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHR4aWQgPSBjb250cmFjdCAmJiBjb250cmFjdC50eGlkID8gU3RyaW5nKGNvbnRyYWN0LnR4aWQpLnRyaW0oKSA6ICcnO1xuICAgIGNvbnN0IGFkZHIgPSBjb250cmFjdCAmJiBjb250cmFjdC5pbnZvaWNlQWRkcmVzcyA/IFN0cmluZyhjb250cmFjdC5pbnZvaWNlQWRkcmVzcykudHJpbSgpIDogJyc7XG4gICAgY29uc3Qgc2F0cyA9IGNvbnRyYWN0ICYmIGNvbnRyYWN0Lmludm9pY2VBbW91bnRTYXRzICE9IG51bGwgPyBOdW1iZXIoY29udHJhY3QuaW52b2ljZUFtb3VudFNhdHMpIDogTmFOO1xuICAgIGlmICghdHhpZCB8fCAhYWRkciB8fCAhTnVtYmVyLmlzRmluaXRlKHNhdHMpIHx8IHNhdHMgPD0gMCkge1xuICAgICAgc2V0Qm9uZFZlcmlmeShudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIHNldEJvbmRWZXJpZnkoeyBsb2FkaW5nOiB0cnVlIH0pO1xuICAgIGNvbnN0IHVwc3RyZWFtID0gbG9hZFVwc3RyZWFtU2V0dGluZ3MoKTtcbiAgICB2ZXJpZnlMMVBheW1lbnQodXBzdHJlYW0sIHsgdHhpZCwgYWRkcmVzczogYWRkciwgYW1vdW50U2F0czogTWF0aC5yb3VuZChzYXRzKSB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXRCb25kVmVyaWZ5KHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgc2V0Qm9uZFZlcmlmeSh7IGxvYWRpbmc6IGZhbHNlLCBlcnJvcjogZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkgfSk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4geyBjYW5jZWxsZWQgPSB0cnVlOyB9O1xuICB9LCBbY29udHJhY3QgJiYgY29udHJhY3QudHhpZCwgY29udHJhY3QgJiYgY29udHJhY3QuaW52b2ljZUFkZHJlc3MsIGNvbnRyYWN0ICYmIGNvbnRyYWN0Lmludm9pY2VBbW91bnRTYXRzXSk7XG5cbiAgY29uc3QgY3JlYXRlZCA9IGNvbnRyYWN0ICYmIGNvbnRyYWN0LmNyZWF0ZWQgPyBuZXcgRGF0ZShjb250cmFjdC5jcmVhdGVkKS50b0xvY2FsZVN0cmluZygpIDogJyc7XG4gIGNvbnN0IGlzRXhlY3V0aW9uID0gISEoY29udHJhY3QgJiYgY29udHJhY3QudHlwZSA9PT0gJ0V4ZWN1dGlvbkNvbnRyYWN0Jyk7XG4gIGNvbnN0IGhhc0V4ZWNQcm9ncmFtID0gISEoY29udHJhY3QgJiYgY29udHJhY3QucHJvZ3JhbSAhPSBudWxsICYmIHR5cGVvZiBjb250cmFjdC5wcm9ncmFtID09PSAnb2JqZWN0Jyk7XG5cbiAgY29uc3QgcnVuTG9jYWxFeGVjdXRpb24gPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFjb250cmFjdCB8fCAhY29udHJhY3QucHJvZ3JhbSB8fCB0eXBlb2YgY29udHJhY3QucHJvZ3JhbSAhPT0gJ29iamVjdCcpIHJldHVybjtcbiAgICBzZXRMb2NhbFJ1bihydW5FeGVjdXRpb25Qcm9ncmFtKGNvbnRyYWN0LnByb2dyYW0pKTtcbiAgfSwgW2NvbnRyYWN0XSk7XG5cbiAgY29uc3QgcnVuSHViRXhlY3V0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghaWQpIHJldHVybjtcbiAgICBpZiAoIWNvbnRyYWN0IHx8IGNvbnRyYWN0LnByb2dyYW0gPT0gbnVsbCB8fCB0eXBlb2YgY29udHJhY3QucHJvZ3JhbSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHNldEh1YlJ1bkVycm9yKCdObyBwcm9ncmFtIG9uIHRoaXMgY29udHJhY3Q7IGNhbm5vdCBydW4gb24gdGhlIGh1Yi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0SHViUnVuTG9hZGluZyh0cnVlKTtcbiAgICBzZXRIdWJSdW5FcnJvcihudWxsKTtcbiAgICBzZXRIdWJSdW4obnVsbCk7XG4gICAgc2V0Q29tbWl0bWVudENvcGllZChmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoSnNvblJwY1Jlc3VsdCgnUnVuRXhlY3V0aW9uQ29udHJhY3QnLCBbeyBjb250cmFjdElkOiBpZCB9XSk7XG4gICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgc2V0SHViUnVuRXJyb3IoZGVzY3JpYmVIdWJScGNGYWlsdXJlKHJlc3VsdC5tZXNzYWdlIHx8ICdSdW4gZmFpbGVkJywgJycpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgIHNldEh1YlJ1bkVycm9yKCdFbXB0eSByZXNwb25zZSBmcm9tIGh1YicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRIdWJSdW4ocmVzdWx0KTtcbiAgICAgIHNldEFuY2hvclR4aWQobnVsbCk7XG4gICAgICBzZXRBbmNob3JFcnJvcihudWxsKTtcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmZhYnJpY01lc3NhZ2VXaXJlSGV4ICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdmYWJyaWM6ZGVsZWdhdGlvblNpZ25SZXF1ZXN0Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIHdpcmVIZXg6IHJlc3VsdC5mYWJyaWNNZXNzYWdlV2lyZUhleCxcbiAgICAgICAgICAgICAgZGVsZWdhdGlvblNpZ25SZXF1ZXN0OiByZXN1bHQuZGVsZWdhdGlvblNpZ25SZXF1ZXN0IHx8IG51bGwsXG4gICAgICAgICAgICAgIHNvdXJjZTogJ1J1bkV4ZWN1dGlvbkNvbnRyYWN0J1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCByYXcgPSBlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIHNldEh1YlJ1bkVycm9yKGRlc2NyaWJlSHViUnBjRmFpbHVyZShyYXcsICdDaGVjayBodWIgcmVhY2hhYmlsaXR5IGFuZCBKU09OLVJQQyAoL3NlcnZpY2VzL3JwYykuJykpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRIdWJSdW5Mb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtpZCwgY29udHJhY3RdKTtcblxuICBjb25zdCBhbmNob3JDb21taXRtZW50ID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghaHViUnVuIHx8ICFodWJSdW4ucnVuQ29tbWl0bWVudEhleCB8fCAhYWRtaW5Ub2tlbikgcmV0dXJuO1xuICAgIHNldEFuY2hvckxvYWRpbmcodHJ1ZSk7XG4gICAgc2V0QW5jaG9yRXJyb3IobnVsbCk7XG4gICAgc2V0QW5jaG9yVHhpZChudWxsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3V0ID0gYXdhaXQgZmV0Y2hKc29uUnBjUmVzdWx0KCdBbmNob3JFeGVjdXRpb25SdW5Db21taXRtZW50JywgW1xuICAgICAgICB7IGNvbW1pdG1lbnRIZXg6IGh1YlJ1bi5ydW5Db21taXRtZW50SGV4LCBhZG1pblRva2VuIH1cbiAgICAgIF0pO1xuICAgICAgaWYgKG91dCAmJiBvdXQuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgIHNldEFuY2hvckVycm9yKGRlc2NyaWJlSHViUnBjRmFpbHVyZShvdXQubWVzc2FnZSB8fCAnQW5jaG9yIGZhaWxlZCcsICcnKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChvdXQgJiYgb3V0LnR4aWQpIHNldEFuY2hvclR4aWQoU3RyaW5nKG91dC50eGlkKSk7XG4gICAgICBlbHNlIHNldEFuY2hvckVycm9yKCdObyB0eGlkIGluIHJlc3BvbnNlJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgcmF3ID0gZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBzZXRBbmNob3JFcnJvcihkZXNjcmliZUh1YlJwY0ZhaWx1cmUocmF3LCAnUmVndGVzdCArIGFkbWluIHRva2VuIHJlcXVpcmVkOyBjaGVjayBodWIgd2FsbGV0IGFuZCAvc2VydmljZXMvcnBjLicpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0QW5jaG9yTG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbaHViUnVuLCBhZG1pblRva2VuXSk7XG5cbiAgY29uc3QgbG9jYWxDb21taXRtZW50SGV4ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFsb2NhbFJ1biB8fCAhaWQpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY29tcHV0ZUV4ZWN1dGlvblJ1bkNvbW1pdG1lbnRIZXgoaWQsIGxvY2FsUnVuKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIFtsb2NhbFJ1biwgaWRdKTtcblxuICBjb25zdCBjb250cmFjdERvdCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY29udHJhY3QpIHJldHVybiAnJztcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNvbnRyYWN0VG9Eb3QoY29udHJhY3QsIGh1YlJ1bik7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSwgW2NvbnRyYWN0LCBodWJSdW5dKTtcblxuICByZXR1cm4gKFxuICAgIDxmYWJyaWMtY29udHJhY3QtZGV0YWlsIGNsYXNzPSdmYWRlLWluJz5cbiAgICAgIDxTZWdtZW50PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC43NWVtJywgZmxleFdyYXA6ICd3cmFwJywgbWFyZ2luQm90dG9tOiAnMC4yNWVtJyB9fVxuICAgICAgICAgIHJvbGU9XCJiYW5uZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPEJ1dHRvbiBiYXNpYyBzaXplPVwic21hbGxcIiBhcz17TGlua30gdG89XCIvY29udHJhY3RzXCIgYXJpYS1sYWJlbD1cIkJhY2sgdG8gY29udHJhY3RzIGxpc3RcIj5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJhcnJvdyBsZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIENvbnRyYWN0c1xuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoMlwiIHN0eWxlPXt7IG1hcmdpbjogMCwgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC41ZW0nLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAgPEhlYWRlci5Db250ZW50PlxuICAgICAgICAgICAgICBDb250cmFjdFxuICAgICAgICAgICAgICB7aWQgJiYgZXJyb3IgJiYgIWxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICAgIDxIZWFkZXIuU3ViaGVhZGVyIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMzVlbScsIGZvbnRXZWlnaHQ6ICdub3JtYWwnIH19PlxuICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJywgZm9udFNpemU6ICcwLjg1ZW0nIH19PntpZH08L2NvZGU+XG4gICAgICAgICAgICAgICAgPC9IZWFkZXIuU3ViaGVhZGVyPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9IZWFkZXIuQ29udGVudD5cbiAgICAgICAgICAgIHtjb250cmFjdCAmJiAhaXNFeGVjdXRpb24gJiYgKFxuICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJwdXJwbGVcIj5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY2xvdWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIFN0b3JhZ2VcbiAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7Y29udHJhY3QgJiYgaXNFeGVjdXRpb24gJiYgKFxuICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJ0ZWFsXCI+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvZGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIEV4ZWN1dGlvblxuICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtaW5IZWlnaHQ6ICcyMHZoJywgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAgICA8TG9hZGVyIGFjdGl2ZSBpbmxpbmU9XCJjZW50ZXJlZFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHshbG9hZGluZyAmJiBlcnJvciAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZT5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkNvdWxkIG5vdCBsb2FkIGNvbnRyYWN0PC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+e2Vycm9yfTwvcD5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjg1ZW0nLCBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiB2b2lkIHJlbG9hZENvbnRyYWN0KCl9PlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICAgICAgUmV0cnlcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIGJhc2ljIGFzPXtMaW5rfSB0bz1cIi9jb250cmFjdHNcIj5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJsaXN0XCIgLz5cbiAgICAgICAgICAgICAgICAgIENvbnRyYWN0cyBsaXN0XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjg1ZW0gMCAwJywgZm9udFNpemU6ICcwLjllbScsIGNvbG9yOiAnIzU1NScgfX0+XG4gICAgICAgICAgICAgICAgPExpbmsgdG89XCIvY29udHJhY3RzXCI+RXhlY3V0aW9uIGNvbnRyYWN0czwvTGluaz4gYW5kIHRoZSBsaXZlIDxzdHJvbmc+RmVkZXJhdGlvbiBndWFyYW50ZWVzPC9zdHJvbmc+IHBhbmVsIGFyZSBvbiB0aGUgbWFpbiBjb250cmFjdHMgcGFnZS5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICl9XG4gICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBjb250cmFjdCAmJiBjb250cmFjdERvdCA/IChcbiAgICAgICAgICAgIDxTZWdtZW50IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiPkNvbnRyYWN0IGdyYXBoPC9IZWFkZXI+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgICAgRGVyaXZlZCBmcm9tIHRoaXMgY29udHJhY3QmYXBvcztzIGZpZWxkcyAoc3RvcmFnZSB2cyBleGVjdXRpb24pLiBTYW1lIEdyYXBodml6IHByZXZpZXcgYXMgRE9UIGRvY3VtZW50cyDigJQgbm8gcHJpdmF0ZSBwYXlsb2FkIGJleW9uZCB3aGF0IHRoaXMgcGFnZSBhbHJlYWR5IHNob3dzLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxHcmFwaERvY3VtZW50UHJldmlldyBkb3RTb3VyY2U9e2NvbnRyYWN0RG90fSBza2lwSWRlbnRpdHlHYXRlIC8+XG4gICAgICAgICAgICAgIDxkZXRhaWxzIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVyZW0nIH19PlxuICAgICAgICAgICAgICAgIDxzdW1tYXJ5IHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInLCBjb2xvcjogJyM1NTUnIH19PkRPVCBzb3VyY2U8L3N1bW1hcnk+XG4gICAgICAgICAgICAgICAgPHByZSBzdHlsZT17eyB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLCBmb250U2l6ZTogJzAuNzVyZW0nLCBiYWNrZ3JvdW5kOiAnI2Y3ZjdmNycsIHBhZGRpbmc6ICcwLjVyZW0nLCBib3JkZXJSYWRpdXM6IDQgfX0+e2NvbnRyYWN0RG90fTwvcHJlPlxuICAgICAgICAgICAgICA8L2RldGFpbHM+XG4gICAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgeyFsb2FkaW5nICYmICFlcnJvciAmJiBjb250cmFjdCAmJiBpc0V4ZWN1dGlvbiAmJiAoIWNvbnRyYWN0RG90IHx8ICFTdHJpbmcoY29udHJhY3REb3QpLnRyaW0oKSkgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+Q29udHJhY3QgZ3JhcGg8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgICAgICBObyBET1QgcHJldmlldyB3YXMgZ2VuZXJhdGVkIGZvciB0aGlzIGV4ZWN1dGlvbiBjb250cmFjdC4gWW91IGNhbiBzdGlsbCBydW4gbG9jYWxseSBvciBvbiB0aGUgaHViIGJlbG93LlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIGNvbnRyYWN0ICYmIGlzRXhlY3V0aW9uICYmIChcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5EaXN0cmlidXRlZCBleGVjdXRpb24gYW5kIEJpdGNvaW4gTDE8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyM0NDQnIH19PlxuICAgICAgICAgICAgICAgICAgVGhpcyBmbG93IGlzIGRlc2lnbmVkIHNvIHBlZXJzIGNhbiBhZ3JlZSBvbiBhIDxzdHJvbmc+cHJvZ3JhbTwvc3Ryb25nPiwgdmVyaWZ5IDxzdHJvbmc+cnVuczwvc3Ryb25nPiBkZXRlcm1pbmlzdGljYWxseSwgYW5kIHJlbGF0ZSBodWIgc3RhdGUgdG8gPHN0cm9uZz5CaXRjb2luPC9zdHJvbmc+OlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8dWwgc3R5bGU9e3sgbWFyZ2luOiAnMC41ZW0gMCAwJywgcGFkZGluZ0xlZnQ6ICcxLjI1ZW0nLCBjb2xvcjogJyM1NTUnIH19PlxuICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlJlZ2lzdHJ5ICh3aGVuIEJpdGNvaW4gaXMgb24pOjwvc3Ryb25nPiBMMSBwYXlzIHRoZSBodWIgaW52b2ljZSBmb3IgYSBmaXhlZCA8Y29kZT5wcm9ncmFtRGlnZXN0PC9jb2RlPiBiZWZvcmUgPGNvZGU+Q3JlYXRlRXhlY3V0aW9uQ29udHJhY3Q8L2NvZGU+IGFjY2VwdHMgdGhlIHB1Ymxpc2guXG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlJ1biBpbnRlZ3JpdHk6PC9zdHJvbmc+IHRoZSBodWIgaW50ZXJwcmV0ZXIgcmV0dXJucyA8Y29kZT5ydW5Db21taXRtZW50SGV4PC9jb2RlPiAoaGFzaCBvZiB0aGUgY2Fub25pY2FsIHRyYWNlKS4gPHN0cm9uZz5SdW4gbG9jYWxseTwvc3Ryb25nPiBpbiB0aGUgYnJvd3NlciBzaG91bGQgbWF0Y2g7IG1pc21hdGNoIG1lYW5zIGRpZmZlcmVudCBpbnB1dHMgb3IgY29kZSBwYXRocy5cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+TDEgY2hlY2twb2ludCAocmVndGVzdCBkZW1vKTo8L3N0cm9uZz4gYWZ0ZXIgYSBzdWNjZXNzZnVsIGh1YiBydW4sIGFuIGFkbWluIGNhbiBicm9hZGNhc3QgPHN0cm9uZz5PUF9SRVRVUk48L3N0cm9uZz4gY2FycnlpbmcgdGhhdCBkaWdlc3QgdXNpbmcgdGhlIGh1YiB3YWxsZXQgKHNlZSBiZWxvdykuXG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAge3VmLnNpZGVjaGFpbiA/IChcbiAgICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RmVkZXJhdGlvbiAoc2lkZWNoYWluICsgYmVhY29uKTo8L3N0cm9uZz4gZW5mb3JjZWQgYnkgdGhpcyBodWIgb25seSBmb3IgPGNvZGU+U3VibWl0U2lkZWNoYWluU3RhdGVQYXRjaDwvY29kZT4gYW5kIGJlYWNvbiBlcG9jaCA8Y29kZT5mZWRlcmF0aW9uV2l0bmVzczwvY29kZT4gZmllbGRzIOKAlCBzZWV7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzL2FkbWluL2JlYWNvbi1mZWRlcmF0aW9uXCI+QmVhY29uIEZlZGVyYXRpb248L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgeycgJ31hbmQgdGhlIGxpdmUgcG9saWN5IHBhbmVsIGJlbG93IChub3QgdXNlZCBmb3IgcmVnaXN0cnkgcHVibGlzaCBvciBodWIgcnVucykuXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIHt1Zi5zaWRlY2hhaW4gPyA8RGlzdHJpYnV0ZWRGZWRlcmF0aW9uUGFuZWwgbWFyZ2luQm90dG9tPVwiMFwiIC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICB7KGNvbnRyYWN0Lmludm9pY2VBZGRyZXNzIHx8IGNvbnRyYWN0Lmludm9pY2VBbW91bnRTYXRzICE9IG51bGwpICYmIChcbiAgICAgICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+TDEgcmVnaXN0cnkgcGF5bWVudDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgY29sb3I6ICcjNDQ0JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgVGhpcyBleGVjdXRpb24gY29udHJhY3Qgd2FzIHB1Ymxpc2hlZCB3aXRoIGEgdmVyaWZpZWQgb24tY2hhaW4gcGF5bWVudCB0byB0aGUgaHViIGludm9pY2UgYWRkcmVzcyAoc2FtZSBMMSBjaGVjayBhcyBzdG9yYWdlIGRpc3RyaWJ1dGUgYm9uZHMpLlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2JvbmRWZXJpZnkgJiYgYm9uZFZlcmlmeS5sb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+VmVyaWZ5aW5nIHJlZ2lzdHJ5IHBheW1lbnQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+Q2hlY2tpbmcgTDEgcHJvb2YgYWdhaW5zdCB0aGUgcmVnaXN0cnkgaW52b2ljZeKApjwvcD5cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtib25kVmVyaWZ5ICYmICFib25kVmVyaWZ5LmxvYWRpbmcgJiYgYm9uZFZlcmlmeS5lcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19IGNvbnRlbnQ9e2JvbmRWZXJpZnkuZXJyb3J9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtib25kVmVyaWZ5ICYmICFib25kVmVyaWZ5LmxvYWRpbmcgJiYgYm9uZFZlcmlmeS5kYXRhICYmIChcbiAgICAgICAgICAgICAgICA8TWVzc2FnZVxuICAgICAgICAgICAgICAgICAgcG9zaXRpdmU9eyEhYm9uZFZlcmlmeS5kYXRhLnZlcmlmaWVkfVxuICAgICAgICAgICAgICAgICAgbmVnYXRpdmU9eyFib25kVmVyaWZ5LmRhdGEudmVyaWZpZWR9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19XG4gICAgICAgICAgICAgICAgICBoZWFkZXI9e2JvbmRWZXJpZnkuZGF0YS52ZXJpZmllZCA/ICdSZWdpc3RyeSBwYXltZW50IHZlcmlmaWVkIG9uLWNoYWluJyA6ICdMMSBwcm9vZiBjaGVjayBkaWQgbm90IHBhc3MnfVxuICAgICAgICAgICAgICAgICAgY29udGVudD17XG4gICAgICAgICAgICAgICAgICAgIGJvbmRWZXJpZnkuZGF0YS52ZXJpZmllZFxuICAgICAgICAgICAgICAgICAgICAgID8gYE1hdGNoZWQgYXQgbGVhc3QgJHtmb3JtYXRTYXRzRGlzcGxheShjb250cmFjdC5pbnZvaWNlQW1vdW50U2F0cyl9IHNhdHMgdG8gdGhlIGludm9pY2UgYWRkcmVzcy4gQ29uZmlybWF0aW9uczogJHtib25kVmVyaWZ5LmRhdGEuY29uZmlybWF0aW9ucyAhPSBudWxsID8gYm9uZFZlcmlmeS5kYXRhLmNvbmZpcm1hdGlvbnMgOiAnbi9hJ30ke2JvbmRWZXJpZnkuZGF0YS5pbk1lbXBvb2wgPyAnIChzdGlsbCBpbiBtZW1wb29sKScgOiAnJ30uYFxuICAgICAgICAgICAgICAgICAgICAgIDogJ0luc3BlY3QgdGhlIGZ1bmRpbmcgdHJhbnNhY3Rpb24gb3IgbWVtcG9vbDsgdGhlIGh1YiBtYXkgc3RpbGwgbGlzdCB0aGUgY29udHJhY3QgaWYgdmVyaWZpY2F0aW9uIGlzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLidcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7IWhhc0V4ZWNQcm9ncmFtICYmIChcbiAgICAgICAgICAgICAgICA8TWVzc2FnZSB3YXJuaW5nIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+Tm8gZXhlY3V0YWJsZSBwcm9ncmFtPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyM1NTUnIH19PlxuICAgICAgICAgICAgICAgICAgICBUaGlzIGV4ZWN1dGlvbiBjb250cmFjdCByZWNvcmQgaGFzIG5vIDxjb2RlPnByb2dyYW08L2NvZGU+IG9iamVjdCAobGVnYWN5IHJvdywgdHJ1bmNhdGVkIEFQSSwgb3IgYmFkIHB1Ymxpc2gpLiBPcGVuIHRoZSBodWIgPGNvZGU+Y29udHJhY3RzLyZsdDtpZCZndDsuanNvbjwvY29kZT4gc3RvcmUgb3IgcmVwdWJsaXNoIGZyb20gdGhlIGNvbnRyYWN0cyBsaXN0LlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImgzXCI+RXhlY3V0aW9uIHByb2dyYW08L0hlYWRlcj5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgICAgICBSdW4gdGhlIHNhbWUgc2FuZGJveGVkIGludGVycHJldGVyIHRoZSBodWIgdXNlZCBhdCBwdWJsaXNoIHRpbWUuIDxzdHJvbmc+UnVuIG9uIGh1Yjwvc3Ryb25nPiBjYWxscyA8Y29kZT5SdW5FeGVjdXRpb25Db250cmFjdDwvY29kZT4gdmlhIDxjb2RlPlBPU1QgL3NlcnZpY2VzL3JwYzwvY29kZT4gKHNhbWUgbWV0aG9kcyBhcyBXZWJTb2NrZXQgSlNPTi1SUEMpLlxuICAgICAgICAgICAgICAgIENvbXBhcmUgdGhlIHJldHVybmVkIDxjb2RlPnJ1bkNvbW1pdG1lbnRIZXg8L2NvZGU+IHdpdGggPHN0cm9uZz5SdW4gbG9jYWxseTwvc3Ryb25nPjsgYW5jaG9yIG9uIHJlZ3Rlc3QgYWZ0ZXIgYSBzdWNjZXNzZnVsIGh1YiBydW4gd2hlbiBvZmZlcmVkIGJlbG93LlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJywgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcwLjVlbScsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWhhc0V4ZWNQcm9ncmFtfVxuICAgICAgICAgICAgICAgICAgdGl0bGU9e2hhc0V4ZWNQcm9ncmFtID8gdW5kZWZpbmVkIDogJ05vIHByb2dyYW0gSlNPTiBvbiB0aGlzIGNvbnRyYWN0J31cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3J1bkxvY2FsRXhlY3V0aW9ufVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJwbGF5XCIgLz5cbiAgICAgICAgICAgICAgICAgIFJ1biBsb2NhbGx5XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgbG9hZGluZz17aHViUnVuTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtodWJSdW5Mb2FkaW5nIHx8ICFoYXNFeGVjUHJvZ3JhbX1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtoYXNFeGVjUHJvZ3JhbSA/IHVuZGVmaW5lZCA6ICdObyBwcm9ncmFtIEpTT04gb24gdGhpcyBjb250cmFjdCd9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtydW5IdWJFeGVjdXRpb259XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNlcnZlclwiIC8+XG4gICAgICAgICAgICAgICAgICBSdW4gb24gaHViXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB7aHViUnVuRXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+UnVuIG9uIGh1YiBmYWlsZWQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+e2h1YlJ1bkVycm9yfTwvcD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz17aHViUnVuTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aHViUnVuTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIHJ1bkh1YkV4ZWN1dGlvbigpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIFJldHJ5XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7aHViUnVuICYmICFodWJSdW5FcnJvciAmJiBodWJSdW4uZGVsZWdhdGlvblNpZ25SZXF1ZXN0RXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5EZWxlZ2F0aW9uIHNpZ25pbmcgd2lyZSBub3QgYnVpbHQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+e1N0cmluZyhodWJSdW4uZGVsZWdhdGlvblNpZ25SZXF1ZXN0RXJyb3IpfTwvcD5cbiAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNWVtIDAgMCcsIGZvbnRTaXplOiAnMC45ZW0nLCBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICAgICAgICBUaGUgaHViIHJ1biBmaW5pc2hlZCwgYnV0IG5vIDxjb2RlPmZhYnJpY01lc3NhZ2VXaXJlSGV4PC9jb2RlPiB3YXMgcHJvZHVjZWQgZm9yIHRoZSBkZWxlZ2F0aW9uIG1vZGFsLiBDaGVjayB0aGUgcmF3IGh1YiByZXN1bHQgYmVsb3cuXG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7aHViUnVuICYmICFodWJSdW5FcnJvciAmJiAhaHViUnVuLnJ1bkNvbW1pdG1lbnRIZXggJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5ObyBydW4gY29tbWl0bWVudCBkaWdlc3Q8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICAgIFRoZSBodWIgcmV0dXJuZWQgYSBydW4gcmVzdWx0IHdpdGhvdXQgPGNvZGU+cnVuQ29tbWl0bWVudEhleDwvY29kZT4gKGNvbW1pdG1lbnQgY29tcHV0YXRpb24gbWF5IGhhdmUgZmFpbGVkIG9uIHRoZSBzZXJ2ZXIpLlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2xvY2FsUnVuICYmIChcbiAgICAgICAgICAgICAgICA8TWVzc2FnZVxuICAgICAgICAgICAgICAgICAgcG9zaXRpdmU9e2xvY2FsUnVuLm9rfVxuICAgICAgICAgICAgICAgICAgbmVnYXRpdmU9eyFsb2NhbFJ1bi5va31cbiAgICAgICAgICAgICAgICAgIGhlYWRlcj17bG9jYWxSdW4ub2sgPyAnTG9jYWwgcnVuIGZpbmlzaGVkJyA6ICdMb2NhbCBydW4gZmFpbGVkJ31cbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9e1xuICAgICAgICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT17eyB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLCBmb250U2l6ZTogJzAuOGVtJywgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge0pTT04uc3RyaW5naWZ5KGxvY2FsUnVuLCBudWxsLCAyKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgICB7IWxvY2FsUnVuLm9rICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc2l6ZT1cInNtYWxsXCIgYmFzaWMgb25DbGljaz17cnVuTG9jYWxFeGVjdXRpb259PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW4gbG9jYWxseSBhZ2FpblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2h1YlJ1biAmJiBodWJSdW4ucnVuQ29tbWl0bWVudEhleCAmJiAoXG4gICAgICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPlJ1biBjb21taXRtZW50IChkaWdlc3QpPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIHtodWJSdW4ub2sgPT09IGZhbHNlICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nLCBjb2xvcjogJyM4YTZkM2InIH19PlxuICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaHViIHJ1biBkaWQgbm90IGZpbmlzaCBzdWNjZXNzZnVsbHkgKDxjb2RlPm9rOiBmYWxzZTwvY29kZT4pLiBUaGUgZGlnZXN0IGlzIHN0aWxsIHNob3duIGZvciBjb21wYXJpc29uOyBPUF9SRVRVUk4gYW5jaG9yIGlzIG9ubHkgb2ZmZXJlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgcnVuLlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScsIGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJywgZm9udEZhbWlseTogJ21vbm9zcGFjZScsIGZvbnRTaXplOiAnMC44NWVtJywgbWFyZ2luOiAwLCBmbGV4OiAnMSAxIDEycmVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICB7aHViUnVuLnJ1bkNvbW1pdG1lbnRIZXh9XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17Y29weVJ1bkNvbW1pdG1lbnRIZXh9XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDb3B5IGNvbW1pdG1lbnQgaGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ29weSBydW4gY29tbWl0bWVudCBkaWdlc3QgaGV4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjb3B5IG91dGxpbmVcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAge2NvbW1pdG1lbnRDb3BpZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJywgY29sb3I6ICcjMjc2NzQ5JyB9fT5Db3BpZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIHshbG9jYWxDb21taXRtZW50SGV4ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJywgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgVXNlIDxzdHJvbmc+UnVuIGxvY2FsbHk8L3N0cm9uZz4gYWJvdmUgdG8gY29tcGFyZSB0aGlzIGRpZ2VzdCB3aXRoIHRoZSBzYW1lIGludGVycHJldGVyIGluIHlvdXIgYnJvd3Nlci5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHtsb2NhbENvbW1pdG1lbnRIZXggJiYgKFxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBjb2xvcjogbG9jYWxDb21taXRtZW50SGV4ID09PSBodWJSdW4ucnVuQ29tbWl0bWVudEhleCA/ICcjMjc2NzQ5JyA6ICcjYjAwJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICB7bG9jYWxDb21taXRtZW50SGV4ID09PSBodWJSdW4ucnVuQ29tbWl0bWVudEhleFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnTWF0Y2hlcyBsb2NhbCBydW4gY29tbWl0bWVudC4nXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdMb2NhbCBydW4gY29tbWl0bWVudCBkaWZmZXJzIOKAlCByZS1ydW4gbG9jYWxseSBhZnRlciBsb2FkaW5nIHRoZSBzYW1lIHByb2dyYW0uJ31cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHtiaXRjb2luTmV0LmxvYWRpbmcgJiYgaHViUnVuLm9rICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJywgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgQ2hlY2tpbmcgPGNvZGU+L3NlcnZpY2VzL2JpdGNvaW48L2NvZGU+IGZvciByZWd0ZXN0IGFuY2hvcmluZyBvcHRpb25z4oCmXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7IWJpdGNvaW5OZXQubG9hZGluZyAmJiBiaXRjb2luTmV0LnJlZ3Rlc3QgJiYgYml0Y29pbk5ldC5hdmFpbGFibGUgJiYgaHViUnVuLm9rICYmICFhZG1pblRva2VuICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJywgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGUgZmlyc3QtdGltZSBzZXR1cCBhbmQga2VlcCB5b3VyIGFkbWluIHRva2VuIGluIHRoaXMgYnJvd3NlciB0byBhbmNob3Igb24gcmVndGVzdCwgb3Igb3BlbnsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3NcIj5TZXR0aW5nczwvTGluaz4uXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7IWJpdGNvaW5OZXQubG9hZGluZyAmJiBiaXRjb2luTmV0LnJlZ3Rlc3QgJiYgYml0Y29pbk5ldC5hdmFpbGFibGUgJiYgYWRtaW5Ub2tlbiAmJiBodWJSdW4ub2sgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cIm9yYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nPXthbmNob3JMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2FuY2hvckxvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXthbmNob3JDb21taXRtZW50fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJiaXRjb2luXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIEFuY2hvciBjb21taXRtZW50IG9uIHJlZ3Rlc3QgKE9QX1JFVFVSTilcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC43NWVtJywgY29sb3I6ICcjODg4JywgZm9udFNpemU6ICcwLjg1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlcyBhZG1pbiB0b2tlbiArIEh1YiB3YWxsZXQgKG1pbmUgYSBibG9jayBmaXJzdCBpZiBuZWVkZWQpLlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgeyFiaXRjb2luTmV0LmxvYWRpbmcgJiYgKCFiaXRjb2luTmV0LnJlZ3Rlc3QgfHwgIWJpdGNvaW5OZXQuYXZhaWxhYmxlKSAmJiBodWJSdW4ub2sgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICBPUF9SRVRVUk4gYW5jaG9yaW5nIGZvciBydW4gY29tbWl0bWVudHMgaXMgb25seSBlbmFibGVkIHdoZW4gdGhpcyBodWImYXBvcztzIEJpdGNvaW4gc2VydmljZSBpcyBhdmFpbGFibGUgb24gcmVndGVzdC5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHthbmNob3JFcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlIGNvbXBhY3Qgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+QW5jaG9yIGZhaWxlZDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+e2FuY2hvckVycm9yfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2FuY2hvckxvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17YW5jaG9yTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgYW5jaG9yQ29tbWl0bWVudCgpfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJldHJ5XG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7YW5jaG9yVHhpZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAge3VmLmJpdGNvaW5FeHBsb3JlciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgYXM9e0xpbmt9IHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGFuY2hvclR4aWQpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZXh0ZXJuYWxcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IGFuY2hvciB0eCB7YW5jaG9yVHhpZC5zbGljZSgwLCAxOCl94oCmXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJywgZm9udFNpemU6ICcwLjg1ZW0nIH19IHRpdGxlPVwiRW5hYmxlIEJpdGNvaW4g4oCUIEJsb2NrICYgdHJhbnNhY3Rpb24gZGV0YWlsIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IHRvIG9wZW4gdGhlIHR4IHZpZXdlclwiPnthbmNob3JUeGlkfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2h1YlJ1biAmJiBBcnJheS5pc0FycmF5KGh1YlJ1bi50cmFjZSkgJiYgaHViUnVuLnRyYWNlLmxlbmd0aCA+IDAgJiYgIWh1YlJ1bi50cmFjZS5zb21lKCh0KSA9PiB0ICYmIHQudHJ1bmNhdGVkKSAmJiAoXG4gICAgICAgICAgICAgICAgPFNlZ21lbnQgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiPkV4ZWN1dGlvbiB0cmFjZSAoaHViKTwvSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFN0ZXAuR3JvdXAgb3JkZXJlZCBmbHVpZCBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgICAgICAge2h1YlJ1bi50cmFjZS5tYXAoKHQsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8U3RlcCBrZXk9e2l9IGNvbXBsZXRlZD17aHViUnVuLm9rfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGVwLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGVwLlRpdGxlPlN0ZXAge3QucGMgIT0gbnVsbCA/IHQucGMgKyAxIDogaSArIDF9e3Qub3AgPyBgIMK3ICR7dC5vcH1gIDogJyd9PC9TdGVwLlRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U3RlcC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuNzVlbScsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e0pTT04uc3RyaW5naWZ5KHQpfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGVwLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGVwLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TdGVwPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvU3RlcC5Hcm91cD5cbiAgICAgICAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtodWJSdW4gJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgICAgICBwb3NpdGl2ZT17aHViUnVuLm9rfVxuICAgICAgICAgICAgICAgICAgbmVnYXRpdmU9eyFodWJSdW4ub2t9XG4gICAgICAgICAgICAgICAgICBoZWFkZXI9XCJIdWIgcnVuIHJlc3VsdCAocmF3IEpTT04pXCJcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9e1xuICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsIGZvbnRTaXplOiAnMC44ZW0nLCBtYXJnaW46IDAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAge0pTT04uc3RyaW5naWZ5KGh1YlJ1biwgbnVsbCwgMil9XG4gICAgICAgICAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxUYWJsZSBkZWZpbml0aW9uPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5Cb2R5PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgd2lkdGg9ezN9PklEPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48Y29kZT57Y29udHJhY3QuaWR9PC9jb2RlPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAge2NvbnRyYWN0Lm5hbWUgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPk5hbWU8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2NvbnRyYWN0Lm5hbWV9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7Y29udHJhY3QudmFsaWRhdGVkU3RlcHMgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+VmFsaWRhdGVkIHN0ZXBzPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntjb250cmFjdC52YWxpZGF0ZWRTdGVwc308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHtjb250cmFjdC5wcm9ncmFtRGlnZXN0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5Qcm9ncmFtIGRpZ2VzdDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19Pntjb250cmFjdC5wcm9ncmFtRGlnZXN0fTwvY29kZT48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHtjb250cmFjdC5pbnZvaWNlQWRkcmVzcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+UmVnaXN0cnkgaW52b2ljZTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19Pntjb250cmFjdC5pbnZvaWNlQWRkcmVzc308L2NvZGU+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7Y29udHJhY3QuaW52b2ljZUFtb3VudFNhdHMgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+SW52b2ljZSBhbW91bnQ8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2Zvcm1hdFNhdHNEaXNwbGF5KGNvbnRyYWN0Lmludm9pY2VBbW91bnRTYXRzKX0gc2F0czwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge2NvbnRyYWN0LnR4aWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlJlZ2lzdHJ5IHR4PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAge3VmLmJpdGNvaW5FeHBsb3JlciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiBhcz17TGlua30gdG89e2Avc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoY29udHJhY3QudHhpZCl9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmcoY29udHJhY3QudHhpZCkuc2xpY2UoMCwgMTYpfeKAplxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0gdGl0bGU9XCJFbmFibGUgQml0Y29pbiDigJQgQmxvY2sgJiB0cmFuc2FjdGlvbiBkZXRhaWwgcm91dGVzIGluIEFkbWluIOKGkiBGZWF0dXJlIHZpc2liaWxpdHkgdG8gb3BlbiB0aGUgdHggdmlld2VyXCI+e2NvbnRyYWN0LnR4aWR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXlUeE1ldGEgJiYgcGF5VHhNZXRhLmxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fSBiYXNpYz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkaW5n4oCmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAge3BheVR4TWV0YSAmJiBwYXlUeE1ldGEudHggJiYgKHBheVR4TWV0YS50eC5ibG9ja2hhc2ggPT0gbnVsbCB8fCBwYXlUeE1ldGEudHguYmxvY2toYXNoID09PSAnJykgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY29sb3I9XCJvcmFuZ2VcIiBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjbG9ja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtcG9vbFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXlUeE1ldGEgJiYgcGF5VHhNZXRhLnR4ICYmIHBheVR4TWV0YS50eC5jb25maXJtYXRpb25zICE9IG51bGwgJiYgTnVtYmVyKHBheVR4TWV0YS50eC5jb25maXJtYXRpb25zKSA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY29sb3I9XCJncmVlblwiIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BheVR4TWV0YS50eC5jb25maXJtYXRpb25zfSBjb25maXJtYXRpb257TnVtYmVyKHBheVR4TWV0YS50eC5jb25maXJtYXRpb25zKSA9PT0gMSA/ICcnIDogJ3MnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXlUeE1ldGEgJiYgcGF5VHhNZXRhLmVycm9yICYmICFwYXlUeE1ldGEubG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwic21hbGxcIiBjb2xvcj1cImdyZXlcIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nIH19IHRpdGxlPXtwYXlUeE1ldGEuZXJyb3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR4IHN0YXR1cyBuL2FcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7Y3JlYXRlZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+Q3JlYXRlZDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Y3JlYXRlZH08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlByb2dyYW08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIHtoYXNFeGVjUHJvZ3JhbSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmUgc3R5bGU9e3sgd2hpdGVTcGFjZTogJ3ByZS13cmFwJywgZm9udFNpemU6ICcwLjhlbScsIG1hcmdpbjogMCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge0pTT04uc3RyaW5naWZ5KGNvbnRyYWN0LnByb2dyYW0sIG51bGwsIDIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcgfX0+Tm8gcHJvZ3JhbSBvYmplY3QgaW4gdGhpcyBjb250cmFjdCByZWNvcmQuPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7IWxvYWRpbmcgJiYgIWVycm9yICYmIGNvbnRyYWN0ICYmICFpc0V4ZWN1dGlvbiAmJiAoXG4gICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiPkRldGFpbHM8L0hlYWRlcj5cbiAgICAgICAgICAgICAgeyhjb250cmFjdC5pbnZvaWNlQWRkcmVzcyB8fCBjb250cmFjdC5pbnZvaWNlQW1vdW50U2F0cyAhPSBudWxsKSAmJiAoXG4gICAgICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkJpdGNvaW4tYm9uZGVkIGRpc3RyaWJ1dGUgZmxvdzwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgY29sb3I6ICcjNDQ0JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgVGhpcyByZWNvcmQgaW5jbHVkZXMgdGhlIDxzdHJvbmc+Q3JlYXRlRGlzdHJpYnV0ZUludm9pY2U8L3N0cm9uZz4gZGVzdGluYXRpb24gYW5kIGFtb3VudCB0aGUgaHViIGNoZWNrZWQgd2hlbiA8c3Ryb25nPkNyZWF0ZVN0b3JhZ2VDb250cmFjdDwvc3Ryb25nPiByYW4uXG4gICAgICAgICAgICAgICAgICAgIFRoZSBzZWN0aW9uIGJlbG93IHJlLXJ1bnMgdGhlIHNhbWUgTDEgcHJvb2YgYXMgPGNvZGU+R0VUIC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy86dHhpZD9hZGRyZXNzPSZhbXA7YW1vdW50U2F0cz08L2NvZGU+LlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2JvbmRWZXJpZnkgJiYgYm9uZFZlcmlmeS5sb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+VmVyaWZ5aW5nIGJvbmQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+Q2hlY2tpbmcgTDEgcGF5bWVudCBwcm9vZiBhZ2FpbnN0IHRoZSBkaXN0cmlidXRlIGludm9pY2XigKY8L3A+XG4gICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7Ym9uZFZlcmlmeSAmJiAhYm9uZFZlcmlmeS5sb2FkaW5nICYmIGJvbmRWZXJpZnkuZXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fSBjb250ZW50PXtib25kVmVyaWZ5LmVycm9yfSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7Ym9uZFZlcmlmeSAmJiAhYm9uZFZlcmlmeS5sb2FkaW5nICYmIGJvbmRWZXJpZnkuZGF0YSAmJiAoXG4gICAgICAgICAgICAgICAgPE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgIHBvc2l0aXZlPXshIWJvbmRWZXJpZnkuZGF0YS52ZXJpZmllZH1cbiAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlPXshYm9uZFZlcmlmeS5kYXRhLnZlcmlmaWVkfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fVxuICAgICAgICAgICAgICAgICAgaGVhZGVyPXtib25kVmVyaWZ5LmRhdGEudmVyaWZpZWQgPyAnQml0Y29pbiBib25kIHZlcmlmaWVkIG9uLWNoYWluJyA6ICdMMSBwcm9vZiBjaGVjayBkaWQgbm90IHBhc3MnfVxuICAgICAgICAgICAgICAgICAgY29udGVudD17XG4gICAgICAgICAgICAgICAgICAgIGJvbmRWZXJpZnkuZGF0YS52ZXJpZmllZFxuICAgICAgICAgICAgICAgICAgICAgID8gYE1hdGNoZWQgYXQgbGVhc3QgJHtmb3JtYXRTYXRzRGlzcGxheShjb250cmFjdC5pbnZvaWNlQW1vdW50U2F0cyl9IHNhdHMgdG8gdGhlIGludm9pY2UgYWRkcmVzcy4gQ29uZmlybWF0aW9uczogJHtib25kVmVyaWZ5LmRhdGEuY29uZmlybWF0aW9ucyAhPSBudWxsID8gYm9uZFZlcmlmeS5kYXRhLmNvbmZpcm1hdGlvbnMgOiAnbi9hJ30ke2JvbmRWZXJpZnkuZGF0YS5pbk1lbXBvb2wgPyAnIChzdGlsbCBpbiBtZW1wb29sKScgOiAnJ30uYFxuICAgICAgICAgICAgICAgICAgICAgIDogJ0luc3BlY3QgdGhlIHBheW1lbnQgdHJhbnNhY3Rpb24gb3IgcmVndGVzdCBtZW1wb29sLiBPbGRlciBjb250cmFjdHMgbWF5IGxhY2sgaW52b2ljZSBmaWVsZHM7IHRoZSByb3cgYmVsb3cgc3RpbGwgbGlua3MgdGhlIGJvbmRpbmcgdHggd2hlbiBwcmVzZW50LidcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7IWNvbnRyYWN0Lmludm9pY2VBZGRyZXNzICYmIGNvbnRyYWN0LnR4aWQgJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+TGVnYWN5IHN0b3JhZ2UgY29udHJhY3Q8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGNvbG9yOiAnIzU1NScgfX0+XG4gICAgICAgICAgICAgICAgICAgIE5vIGludm9pY2UgYWRkcmVzcyBvbiBmaWxlIChjcmVhdGVkIGJlZm9yZSB0aGlzIGJ1aWxkKS4gVXNlIHRoZSBwYXltZW50IHR4IGxpbmsgZm9yIG1hbnVhbCBpbnNwZWN0aW9uOyBuZXcgYm9uZHMgcGVyc2lzdCA8Y29kZT5pbnZvaWNlQWRkcmVzczwvY29kZT4gLyA8Y29kZT5pbnZvaWNlQW1vdW50U2F0czwvY29kZT4gZm9yIGF1dG9tYXRpYyBwcm9vZi5cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxUYWJsZSBkZWZpbml0aW9uPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5Cb2R5PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgd2lkdGg9ezN9PklEPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48Y29kZT57Y29udHJhY3QuaWR9PC9jb2RlPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAge2NvbnRyYWN0Lmludm9pY2VBZGRyZXNzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5EaXN0cmlidXRlIGludm9pY2U8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19Pntjb250cmFjdC5pbnZvaWNlQWRkcmVzc308L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7Y29udHJhY3QuaW52b2ljZUFtb3VudFNhdHMgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+SW52b2ljZSBhbW91bnQ8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2Zvcm1hdFNhdHNEaXNwbGF5KGNvbnRyYWN0Lmludm9pY2VBbW91bnRTYXRzKX0gc2F0czwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge2NvbnRyYWN0LmRvY3VtZW50ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5Eb2N1bWVudDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPntjb250cmFjdC5kb2N1bWVudH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJtaW5pXCIgYXM9e0xpbmt9IHRvPXtgL2RvY3VtZW50cy8ke2VuY29kZVVSSUNvbXBvbmVudChjb250cmFjdC5kb2N1bWVudCl9YH0gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImZpbGUgYWx0ZXJuYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgVmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7Y29udHJhY3QudHhpZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+UGF5bWVudCB0eDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt1Zi5iaXRjb2luRXhwbG9yZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgYXM9e0xpbmt9IHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRyYWN0LnR4aWQpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJiaXRjb2luXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nKGNvbnRyYWN0LnR4aWQpLnNsaWNlKDAsIDE2KX3igKZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19IHRpdGxlPVwiRW5hYmxlIEJpdGNvaW4g4oCUIEJsb2NrICYgdHJhbnNhY3Rpb24gZGV0YWlsIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IHRvIG9wZW4gdGhlIHR4IHZpZXdlclwiPntjb250cmFjdC50eGlkfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7cGF5VHhNZXRhICYmIHBheVR4TWV0YS5sb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScgfX0gYmFzaWM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9hZGluZ+KAplxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXlUeE1ldGEgJiYgcGF5VHhNZXRhLnR4ICYmIChwYXlUeE1ldGEudHguYmxvY2toYXNoID09IG51bGwgfHwgcGF5VHhNZXRhLnR4LmJsb2NraGFzaCA9PT0gJycpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIGNvbG9yPVwib3JhbmdlXCIgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY2xvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbXBvb2wgKHVuY29uZmlybWVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXlUeE1ldGEgJiYgcGF5VHhNZXRhLnR4ICYmIHBheVR4TWV0YS50eC5jb25maXJtYXRpb25zICE9IG51bGwgJiYgTnVtYmVyKHBheVR4TWV0YS50eC5jb25maXJtYXRpb25zKSA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY29sb3I9XCJncmVlblwiIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3BheVR4TWV0YS50eC5jb25maXJtYXRpb25zfSBjb25maXJtYXRpb257TnVtYmVyKHBheVR4TWV0YS50eC5jb25maXJtYXRpb25zKSA9PT0gMSA/ICcnIDogJ3MnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtwYXlUeE1ldGEgJiYgcGF5VHhNZXRhLmVycm9yICYmICFwYXlUeE1ldGEubG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwic21hbGxcIiBjb2xvcj1cImdyZXlcIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nIH19IHRpdGxlPXtwYXlUeE1ldGEuZXJyb3J9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR4IHN0YXR1cyBuL2FcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7Y29udHJhY3QuYW1vdW50U2F0cyAhPSBudWxsICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5BbW91bnQ8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2Zvcm1hdFNhdHNEaXNwbGF5KGNvbnRyYWN0LmFtb3VudFNhdHMpfSBzYXRzPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICB7Y29udHJhY3QuZGVzaXJlZENvcGllcyAhPSBudWxsICYmIGNvbnRyYWN0LmRlc2lyZWRDb3BpZXMgPiAxICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5EZXNpcmVkIGNvcGllczwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Y29udHJhY3QuZGVzaXJlZENvcGllc308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHtjb250cmFjdC5kdXJhdGlvblllYXJzICE9IG51bGwgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPkR1cmF0aW9uPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntjb250cmFjdC5kdXJhdGlvblllYXJzfSB5ZWFyczwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge2NvbnRyYWN0LmNoYWxsZW5nZUNhZGVuY2UgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPkNoYWxsZW5nZSBjYWRlbmNlPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntjb250cmFjdC5jaGFsbGVuZ2VDYWRlbmNlfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge2NvbnRyYWN0LnJlc3BvbnNlRGVhZGxpbmUgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlJlc3BvbnNlIGRlYWRsaW5lPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntjb250cmFjdC5yZXNwb25zZURlYWRsaW5lfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge2NyZWF0ZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPkNyZWF0ZWQ8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2NyZWF0ZWR9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHshbG9hZGluZyAmJiAhZXJyb3IgJiYgIWNvbnRyYWN0ICYmIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5ObyBjb250cmFjdCBkYXRhLjwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgIDwvU2VnbWVudD5cbiAgICA8L2ZhYnJpYy1jb250cmFjdC1kZXRhaWw+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29udHJhY3RWaWV3O1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIm4iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibmV4dCIsImlzQXJyYXkiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJ1c2VQYXJhbXMiLCJMaW5rIiwiX3JlcXVpcmUyIiwiU2VnbWVudCIsIkhlYWRlciIsIkljb24iLCJCdXR0b24iLCJMb2FkZXIiLCJUYWJsZSIsIkxhYmVsIiwiTWVzc2FnZSIsIlN0ZXAiLCJfcmVxdWlyZTMiLCJmb3JtYXRTYXRzRGlzcGxheSIsIl9yZXF1aXJlNCIsImxvYWRVcHN0cmVhbVNldHRpbmdzIiwiZmV0Y2hUcmFuc2FjdGlvbkJ5SGFzaCIsInZlcmlmeUwxUGF5bWVudCIsIl9yZXF1aXJlNSIsInJ1bkV4ZWN1dGlvblByb2dyYW0iLCJfcmVxdWlyZTYiLCJjb21wdXRlRXhlY3V0aW9uUnVuQ29tbWl0bWVudEhleCIsIl9yZXF1aXJlNyIsImNvbnRyYWN0VG9Eb3QiLCJHcmFwaERvY3VtZW50UHJldmlldyIsIl9yZXF1aXJlOCIsImRlc2NyaWJlSHViUnBjRmFpbHVyZSIsIkRpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsIiwiX3JlcXVpcmU5IiwibG9hZEh1YlVpRmVhdHVyZUZsYWdzIiwic3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MiLCJmZXRjaEpzb25ScGNSZXN1bHQiLCJfeCIsIl94MiIsIl9mZXRjaEpzb25ScGNSZXN1bHQiLCJfY2FsbGVlNCIsIm1ldGhvZCIsInBhcmFtcyIsInJlcyIsImJvZHkiLCJfdDQiLCJfY29udGV4dDQiLCJmZXRjaCIsImhlYWRlcnMiLCJBY2NlcHQiLCJKU09OIiwic3RyaW5naWZ5IiwianNvbnJwYyIsImlkIiwianNvbiIsIkVycm9yIiwib2siLCJlcnJvciIsIm1lc3NhZ2UiLCJzdGF0dXNUZXh0IiwiY29uY2F0Iiwic3RhdHVzIiwicmVzdWx0IiwiQ29udHJhY3RWaWV3IiwicHJvcHMiLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJjb250cmFjdCIsInNldENvbnRyYWN0IiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsIl9SZWFjdCR1c2VTdGF0ZTUiLCJfUmVhY3QkdXNlU3RhdGU2Iiwic2V0RXJyb3IiLCJfUmVhY3QkdXNlU3RhdGU3IiwiX1JlYWN0JHVzZVN0YXRlOCIsInBheVR4TWV0YSIsInNldFBheVR4TWV0YSIsIl9SZWFjdCR1c2VTdGF0ZTkiLCJfUmVhY3QkdXNlU3RhdGUwIiwibG9jYWxSdW4iLCJzZXRMb2NhbFJ1biIsIl9SZWFjdCR1c2VTdGF0ZTEiLCJfUmVhY3QkdXNlU3RhdGUxMCIsImh1YlJ1biIsInNldEh1YlJ1biIsIl9SZWFjdCR1c2VTdGF0ZTExIiwiX1JlYWN0JHVzZVN0YXRlMTIiLCJodWJSdW5Mb2FkaW5nIiwic2V0SHViUnVuTG9hZGluZyIsIl9SZWFjdCR1c2VTdGF0ZTEzIiwiX1JlYWN0JHVzZVN0YXRlMTQiLCJodWJSdW5FcnJvciIsInNldEh1YlJ1bkVycm9yIiwiX1JlYWN0JHVzZVN0YXRlMTUiLCJyZWd0ZXN0IiwiYXZhaWxhYmxlIiwiX1JlYWN0JHVzZVN0YXRlMTYiLCJiaXRjb2luTmV0Iiwic2V0Qml0Y29pbk5ldCIsIl9SZWFjdCR1c2VTdGF0ZTE3IiwiX1JlYWN0JHVzZVN0YXRlMTgiLCJhbmNob3JMb2FkaW5nIiwic2V0QW5jaG9yTG9hZGluZyIsIl9SZWFjdCR1c2VTdGF0ZTE5IiwiX1JlYWN0JHVzZVN0YXRlMjAiLCJhbmNob3JFcnJvciIsInNldEFuY2hvckVycm9yIiwiX1JlYWN0JHVzZVN0YXRlMjEiLCJfUmVhY3QkdXNlU3RhdGUyMiIsImFuY2hvclR4aWQiLCJzZXRBbmNob3JUeGlkIiwiX1JlYWN0JHVzZVN0YXRlMjMiLCJfUmVhY3QkdXNlU3RhdGUyNCIsImJvbmRWZXJpZnkiLCJzZXRCb25kVmVyaWZ5IiwiX1JlYWN0JHVzZVN0YXRlMjUiLCJfUmVhY3QkdXNlU3RhdGUyNiIsImNvbW1pdG1lbnRDb3BpZWQiLCJzZXRDb21taXRtZW50Q29waWVkIiwiYWRtaW5Ub2tlbiIsIl9SZWFjdCR1c2VTdGF0ZTI3IiwiX1JlYWN0JHVzZVN0YXRlMjgiLCJodWJVaVRpY2siLCJzZXRIdWJVaVRpY2siLCJ1c2VFZmZlY3QiLCJ1ZiIsImNvcHlSdW5Db21taXRtZW50SGV4IiwidXNlQ2FsbGJhY2siLCJoZXgiLCJydW5Db21taXRtZW50SGV4IiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0Iiwid2luZG93Iiwic2V0VGltZW91dCIsImNhbmNlbGxlZCIsImFjIiwiQWJvcnRDb250cm9sbGVyIiwidGltZW91dElkIiwiYWJvcnQiLCJfIiwic2lnbmFsIiwibmV0IiwibmV0d29yayIsImNoYWluIiwidG9Mb3dlckNhc2UiLCJjbGVhclRpbWVvdXQiLCJyZWxvYWRDb250cmFjdCIsIl9jYWxsZWUiLCJfdCIsIl9jb250ZXh0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidHhpZCIsInRyaW0iLCJ1cHN0cmVhbSIsImRhdGEiLCJ0eCIsImFkZHIiLCJpbnZvaWNlQWRkcmVzcyIsInNhdHMiLCJpbnZvaWNlQW1vdW50U2F0cyIsIk5hTiIsImlzRmluaXRlIiwiYWRkcmVzcyIsImFtb3VudFNhdHMiLCJNYXRoIiwicm91bmQiLCJjcmVhdGVkIiwiRGF0ZSIsInRvTG9jYWxlU3RyaW5nIiwiaXNFeGVjdXRpb24iLCJ0eXBlIiwiaGFzRXhlY1Byb2dyYW0iLCJwcm9ncmFtIiwicnVuTG9jYWxFeGVjdXRpb24iLCJydW5IdWJFeGVjdXRpb24iLCJfY2FsbGVlMiIsInJhdyIsIl90MiIsIl9jb250ZXh0MiIsImNvbnRyYWN0SWQiLCJmYWJyaWNNZXNzYWdlV2lyZUhleCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsIndpcmVIZXgiLCJkZWxlZ2F0aW9uU2lnblJlcXVlc3QiLCJzb3VyY2UiLCJhbmNob3JDb21taXRtZW50IiwiX2NhbGxlZTMiLCJvdXQiLCJfdDMiLCJfY29udGV4dDMiLCJjb21taXRtZW50SGV4IiwibG9jYWxDb21taXRtZW50SGV4IiwidXNlTWVtbyIsImNvbnRyYWN0RG90IiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJnYXAiLCJmbGV4V3JhcCIsIm1hcmdpbkJvdHRvbSIsInJvbGUiLCJiYXNpYyIsInNpemUiLCJhcyIsInRvIiwibWFyZ2luIiwiQ29udGVudCIsIlN1YmhlYWRlciIsIm1hcmdpblRvcCIsImZvbnRXZWlnaHQiLCJ3b3JkQnJlYWsiLCJmb250U2l6ZSIsImNvbG9yIiwibWluSGVpZ2h0IiwianVzdGlmeUNvbnRlbnQiLCJhY3RpdmUiLCJpbmxpbmUiLCJuZWdhdGl2ZSIsIm9uQ2xpY2siLCJkb3RTb3VyY2UiLCJza2lwSWRlbnRpdHlHYXRlIiwiY3Vyc29yIiwid2hpdGVTcGFjZSIsImJhY2tncm91bmQiLCJwYWRkaW5nIiwiYm9yZGVyUmFkaXVzIiwiaW5mbyIsIkZyYWdtZW50IiwicGFkZGluZ0xlZnQiLCJzaWRlY2hhaW4iLCJ3YXJuaW5nIiwiY29udGVudCIsInBvc2l0aXZlIiwidmVyaWZpZWQiLCJoZWFkZXIiLCJjb25maXJtYXRpb25zIiwiaW5NZW1wb29sIiwicHJpbWFyeSIsImRpc2FibGVkIiwidGl0bGUiLCJ1bmRlZmluZWQiLCJkZWxlZ2F0aW9uU2lnblJlcXVlc3RFcnJvciIsImZvbnRGYW1pbHkiLCJmbGV4IiwiaWNvbiIsIm1hcmdpbkxlZnQiLCJjb21wYWN0IiwiYml0Y29pbkV4cGxvcmVyIiwidHJhY2UiLCJzb21lIiwidHJ1bmNhdGVkIiwiR3JvdXAiLCJvcmRlcmVkIiwiZmx1aWQiLCJtYXAiLCJrZXkiLCJjb21wbGV0ZWQiLCJUaXRsZSIsInBjIiwib3AiLCJEZXNjcmlwdGlvbiIsImRlZmluaXRpb24iLCJCb2R5IiwiUm93IiwiQ2VsbCIsIndpZHRoIiwidmFsaWRhdGVkU3RlcHMiLCJwcm9ncmFtRGlnZXN0IiwiYmxvY2toYXNoIiwiZG9jdW1lbnQiLCJkZXNpcmVkQ29waWVzIiwiZHVyYXRpb25ZZWFycyIsImNoYWxsZW5nZUNhZGVuY2UiLCJyZXNwb25zZURlYWRsaW5lIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/ContractView.js\n\n}')},"./components/ContractsHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link,\n useNavigate = _require.useNavigate;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Segment = _require2.Segment,\n Header = _require2.Header,\n List = _require2.List,\n Icon = _require2.Icon,\n Label = _require2.Label,\n Loader = _require2.Loader,\n Button = _require2.Button,\n ButtonGroup = _require2.ButtonGroup,\n Table = _require2.Table,\n Form = _require2.Form,\n TextArea = _require2.TextArea,\n Message = _require2.Message,\n Step = _require2.Step,\n Menu = _require2.Menu;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n fetchLightningChannels = _require3.fetchLightningChannels,\n loadUpstreamSettings = _require3.loadUpstreamSettings,\n fetchCrowdfundingCampaigns = _require3.fetchCrowdfundingCampaigns;\nvar _require4 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require4.formatSatsDisplay;\nvar _require5 = __webpack_require__(/*! ../functions/sidechainHubClient */ "./functions/sidechainHubClient.js"),\n hubJsonRpc = _require5.hubJsonRpc;\nvar _require6 = __webpack_require__(/*! ../functions/hubRpcHints */ "./functions/hubRpcHints.js"),\n describeHubRpcFailure = _require6.describeHubRpcFailure;\nvar DistributedFederationPanel = __webpack_require__(/*! ./DistributedFederationPanel */ "./components/DistributedFederationPanel.js");\nvar TrackedApplicationContractsPanel = __webpack_require__(/*! ./TrackedApplicationContractsPanel */ "./components/TrackedApplicationContractsPanel.js");\nvar _require7 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require7.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require7.subscribeHubUiFeatureFlags;\nvar _require8 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require8.readHubAdminTokenFromBrowser;\nvar HubPagination = __webpack_require__(/*! ./HubPagination */ "./components/HubPagination.js");\nvar _require9 = __webpack_require__(/*! ../functions/hubListPagination */ "./functions/hubListPagination.js"),\n useHubListPagination = _require9.useHubListPagination;\nvar FILTER_ALL = \'all\';\nvar FILTER_NEW = \'new\';\nvar FILTER_PARTIAL = \'partial\';\nvar FILTER_COMPLETE = \'complete\';\n\n/** Minimal valid program — replace `steps` with your real execution contract. */\nvar DEFAULT_EMPTY_EXEC_PROGRAM = JSON.stringify({\n version: 1,\n steps: []\n}, null, 2);\nvar DEFAULT_REGISTRY_FEE_SATS = 1000;\nvar EXEC_REGISTRY_DRAFT_STORAGE_KEY = \'fabric.execRegistryDraft.v1\';\nfunction trimHash() {\n var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \'\';\n var left = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 8;\n var right = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 8;\n var text = String(value || \'\');\n if (text.length <= left + right + 1) return text;\n return "".concat(text.slice(0, left), "\\u2026").concat(text.slice(-right));\n}\nfunction normalizeOptionalInputText(value) {\n var text = String(value == null ? \'\' : value);\n // Defensive cleanup for historical drafts/UI states that serialized "undefined".\n if (text === \'undefined\') return \'\';\n if (text.startsWith(\'undefined\') && text.length > \'undefined\'.length) {\n return text.slice(\'undefined\'.length);\n }\n return text;\n}\n\n/**\n * Hub contracts home — storage bonds, execution registry, tracked application\n * ARC publishes, crowdfunds, and Lightning channel visibility.\n * Route: `/contracts` (also exported historically as `ContractList`).\n */\nfunction ContractsHome() {\n var navigate = useNavigate();\n var _React$useState = React.useState(0),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n setUiTick = _React$useState2[1];\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setUiTick(function (t) {\n return t + 1;\n });\n });\n }, []);\n var uf = loadHubUiFeatureFlags();\n var hasAdmin = !!readHubAdminTokenFromBrowser();\n var _React$useState3 = React.useState([]),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n contracts = _React$useState4[0],\n setContracts = _React$useState4[1];\n var _React$useState5 = React.useState([]),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n crowdfundCampaigns = _React$useState6[0],\n setCrowdfundCampaigns = _React$useState6[1];\n var _React$useState7 = React.useState([]),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n lightningChannels = _React$useState8[0],\n setLightningChannels = _React$useState8[1];\n var _React$useState9 = React.useState(false),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n loading = _React$useState0[0],\n setLoading = _React$useState0[1];\n var _React$useState1 = React.useState(null),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n error = _React$useState10[0],\n setError = _React$useState10[1];\n var _React$useState11 = React.useState(FILTER_ALL),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n filter = _React$useState12[0],\n setFilter = _React$useState12[1];\n var _React$useState13 = React.useState(\'\'),\n _React$useState14 = _slicedToArray(_React$useState13, 2),\n execName = _React$useState14[0],\n setExecName = _React$useState14[1];\n var _React$useState15 = React.useState(DEFAULT_EMPTY_EXEC_PROGRAM),\n _React$useState16 = _slicedToArray(_React$useState15, 2),\n execJson = _React$useState16[0],\n setExecJson = _React$useState16[1];\n var _React$useState17 = React.useState(false),\n _React$useState18 = _slicedToArray(_React$useState17, 2),\n execBusy = _React$useState18[0],\n setExecBusy = _React$useState18[1];\n var _React$useState19 = React.useState(null),\n _React$useState20 = _slicedToArray(_React$useState19, 2),\n execFeedback = _React$useState20[0],\n setExecFeedback = _React$useState20[1];\n var _React$useState21 = React.useState(false),\n _React$useState22 = _slicedToArray(_React$useState21, 2),\n execBitcoinOn = _React$useState22[0],\n setExecBitcoinOn = _React$useState22[1];\n var _React$useState23 = React.useState(true),\n _React$useState24 = _slicedToArray(_React$useState23, 2),\n execBitcoinLoading = _React$useState24[0],\n setExecBitcoinLoading = _React$useState24[1];\n var _React$useState25 = React.useState(String(DEFAULT_REGISTRY_FEE_SATS)),\n _React$useState26 = _slicedToArray(_React$useState25, 2),\n execAmountSats = _React$useState26[0],\n setExecAmountSats = _React$useState26[1];\n var _React$useState27 = React.useState(null),\n _React$useState28 = _slicedToArray(_React$useState27, 2),\n execRegistryInvoice = _React$useState28[0],\n setExecRegistryInvoice = _React$useState28[1];\n var _React$useState29 = React.useState(\'\'),\n _React$useState30 = _slicedToArray(_React$useState29, 2),\n execTxid = _React$useState30[0],\n setExecTxid = _React$useState30[1];\n var _React$useState31 = React.useState(false),\n _React$useState32 = _slicedToArray(_React$useState31, 2),\n execInvoiceBusy = _React$useState32[0],\n setExecInvoiceBusy = _React$useState32[1];\n var _React$useState33 = React.useState(false),\n _React$useState34 = _slicedToArray(_React$useState33, 2),\n registryAddressCopied = _React$useState34[0],\n setRegistryAddressCopied = _React$useState34[1];\n React.useEffect(function () {\n if (typeof window === \'undefined\' || !window.sessionStorage) return;\n try {\n var raw = window.sessionStorage.getItem(EXEC_REGISTRY_DRAFT_STORAGE_KEY);\n if (!raw) return;\n var draft = JSON.parse(raw);\n if (!draft || _typeof(draft) !== \'object\') return;\n if (typeof draft.execName === \'string\') setExecName(normalizeOptionalInputText(draft.execName));\n if (typeof draft.execJson === \'string\' && draft.execJson.trim()) setExecJson(draft.execJson);\n if (draft.execAmountSats != null) setExecAmountSats(String(draft.execAmountSats));\n if (typeof draft.execTxid === \'string\') setExecTxid(normalizeOptionalInputText(draft.execTxid));\n if (draft.execRegistryInvoice && _typeof(draft.execRegistryInvoice) === \'object\' && draft.execRegistryInvoice.programDigest && draft.execRegistryInvoice.address) {\n setExecRegistryInvoice({\n programDigest: String(draft.execRegistryInvoice.programDigest),\n address: String(draft.execRegistryInvoice.address),\n amountSats: Number(draft.execRegistryInvoice.amountSats) || DEFAULT_REGISTRY_FEE_SATS,\n network: draft.execRegistryInvoice.network != null ? String(draft.execRegistryInvoice.network).trim() : undefined\n });\n }\n } catch (_) {}\n }, []);\n React.useEffect(function () {\n if (typeof window === \'undefined\' || !window.sessionStorage) return;\n try {\n var draft = {\n execName: normalizeOptionalInputText(execName),\n execJson: String(execJson || \'\'),\n execAmountSats: String(execAmountSats || \'\'),\n execTxid: String(execTxid || \'\'),\n execRegistryInvoice: execRegistryInvoice || null\n };\n var hasContent = !!(draft.execName.trim() || draft.execTxid.trim() || draft.execJson && draft.execJson !== DEFAULT_EMPTY_EXEC_PROGRAM || draft.execRegistryInvoice);\n if (!hasContent) {\n window.sessionStorage.removeItem(EXEC_REGISTRY_DRAFT_STORAGE_KEY);\n return;\n }\n window.sessionStorage.setItem(EXEC_REGISTRY_DRAFT_STORAGE_KEY, JSON.stringify(draft));\n } catch (_) {}\n }, [execName, execJson, execAmountSats, execTxid, execRegistryInvoice]);\n var copyRegistryInvoiceAddress = React.useCallback(function () {\n var a = execRegistryInvoice && execRegistryInvoice.address;\n if (!a) return;\n if (typeof navigator === \'undefined\' || !navigator.clipboard || typeof navigator.clipboard.writeText !== \'function\') return;\n setRegistryAddressCopied(false);\n navigator.clipboard.writeText(String(a)).then(function () {\n setRegistryAddressCopied(true);\n if (typeof window !== \'undefined\') {\n window.setTimeout(function () {\n return setRegistryAddressCopied(false);\n }, 2000);\n }\n })["catch"](function () {});\n }, [execRegistryInvoice]);\n var loadContracts = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var opts,\n background,\n upstream,\n _yield$Promise$allSet,\n _yield$Promise$allSet2,\n contractsSettled,\n lightningSettled,\n crowdfundSettled,\n lightningRes,\n channels,\n raw,\n list,\n reason,\n contractsRes,\n body,\n _list,\n _args = arguments,\n _t,\n _t2;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n opts = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};\n background = !!opts.background;\n if (!background) {\n setLoading(true);\n setError(null);\n }\n _context.p = 1;\n upstream = loadUpstreamSettings();\n _context.n = 2;\n return Promise.allSettled([fetch(\'/contracts\', {\n method: \'GET\'\n }), fetchLightningChannels(upstream)["catch"](function () {\n return {\n channels: [],\n outputs: []\n };\n }), fetchCrowdfundingCampaigns(upstream)["catch"](function () {\n return [];\n })]);\n case 2:\n _yield$Promise$allSet = _context.v;\n _yield$Promise$allSet2 = _slicedToArray(_yield$Promise$allSet, 3);\n contractsSettled = _yield$Promise$allSet2[0];\n lightningSettled = _yield$Promise$allSet2[1];\n crowdfundSettled = _yield$Promise$allSet2[2];\n if (lightningSettled.status === \'fulfilled\') {\n lightningRes = lightningSettled.value;\n channels = lightningRes && Array.isArray(lightningRes.channels) ? lightningRes.channels : [];\n setLightningChannels(channels);\n } else {\n setLightningChannels([]);\n }\n if (crowdfundSettled.status === \'fulfilled\') {\n raw = crowdfundSettled.value;\n list = Array.isArray(raw) ? raw : [];\n setCrowdfundCampaigns(list);\n } else {\n setCrowdfundCampaigns([]);\n }\n if (!(contractsSettled.status !== \'fulfilled\')) {\n _context.n = 3;\n break;\n }\n reason = contractsSettled.reason;\n setError(reason && reason.message ? reason.message : \'Failed to load contracts.\');\n setContracts([]);\n _context.n = 7;\n break;\n case 3:\n contractsRes = contractsSettled.value;\n _context.p = 4;\n _context.n = 5;\n return contractsRes.json();\n case 5:\n body = _context.v;\n if (!contractsRes.ok || !body || body.status === \'error\') {\n setError(body && body.message || \'Failed to load contracts.\');\n setContracts([]);\n } else {\n _list = Array.isArray(body.contracts) ? body.contracts : body.result || [];\n setContracts(_list || []);\n if (background) setError(null);\n }\n _context.n = 7;\n break;\n case 6:\n _context.p = 6;\n _t = _context.v;\n setError(_t && _t.message ? _t.message : \'Invalid contracts response.\');\n setContracts([]);\n case 7:\n _context.n = 9;\n break;\n case 8:\n _context.p = 8;\n _t2 = _context.v;\n setError(_t2 && _t2.message ? _t2.message : \'Failed to load contracts.\');\n case 9:\n _context.p = 9;\n if (!background) setLoading(false);\n return _context.f(9);\n case 10:\n return _context.a(2);\n }\n }, _callee, null, [[4, 6], [1, 8, 9, 10]]);\n })), []);\n React.useEffect(function () {\n loadContracts();\n }, [loadContracts]);\n React.useEffect(function () {\n var cancelled = false;\n var ac = typeof AbortController !== \'undefined\' ? new AbortController() : null;\n var timeoutId;\n if (typeof window !== \'undefined\' && ac) {\n timeoutId = window.setTimeout(function () {\n try {\n ac.abort();\n } catch (_) {}\n }, 15000);\n }\n setExecBitcoinLoading(true);\n fetch(\'/services/bitcoin\', _objectSpread({\n headers: {\n Accept: \'application/json\'\n }\n }, ac ? {\n signal: ac.signal\n } : {})).then(function (r) {\n return r.json()["catch"](function () {\n return {};\n });\n }).then(function (body) {\n if (cancelled) return;\n var available = !!(body && body.available !== false && body.status !== \'error\');\n setExecBitcoinOn(available);\n setExecBitcoinLoading(false);\n })["catch"](function () {\n if (!cancelled) {\n setExecBitcoinOn(false);\n setExecBitcoinLoading(false);\n }\n })["finally"](function () {\n if (typeof window !== \'undefined\' && timeoutId != null) {\n window.clearTimeout(timeoutId);\n }\n });\n return function () {\n cancelled = true;\n if (ac) {\n try {\n ac.abort();\n } catch (_) {}\n }\n if (typeof window !== \'undefined\' && timeoutId != null) {\n window.clearTimeout(timeoutId);\n }\n };\n }, []);\n React.useEffect(function () {\n var onCreated = function onCreated() {\n void loadContracts({\n background: true\n });\n };\n if (typeof window !== \'undefined\') {\n window.addEventListener(\'executionContractCreated\', onCreated);\n return function () {\n return window.removeEventListener(\'executionContractCreated\', onCreated);\n };\n }\n return undefined;\n }, [loadContracts]);\n var storageContracts = React.useMemo(function () {\n return contracts.filter(function (c) {\n if (!c) return false;\n if (c.type === \'ExecutionContract\') return false;\n if (c.type === \'StorageContract\') return true;\n return !!c.document;\n });\n }, [contracts]);\n var executionContracts = React.useMemo(function () {\n var list = contracts.filter(function (c) {\n return c && c.type === \'ExecutionContract\';\n });\n return list.slice().sort(function (a, b) {\n var ta = a && a.created ? Date.parse(a.created) : NaN;\n var tb = b && b.created ? Date.parse(b.created) : NaN;\n if (Number.isFinite(tb) && Number.isFinite(ta) && tb !== ta) return tb - ta;\n if (Number.isFinite(tb) && !Number.isFinite(ta)) return 1;\n if (!Number.isFinite(tb) && Number.isFinite(ta)) return -1;\n return String(b && b.id || \'\').localeCompare(String(a && a.id || \'\'));\n });\n }, [contracts]);\n\n // Group storage contracts by document to compute accepted count vs desired\n var contractsByDoc = React.useMemo(function () {\n var map = {};\n var _iterator = _createForOfIteratorHelper(storageContracts),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var c = _step.value;\n if (!c || !c.document) continue;\n var docId = c.document;\n if (!map[docId]) map[docId] = [];\n map[docId].push(c);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return map;\n }, [storageContracts]);\n var filteredContracts = React.useMemo(function () {\n return storageContracts.filter(function (c) {\n if (!c || !c.document) return false;\n var docContracts = contractsByDoc[c.document] || [];\n var acceptedCount = docContracts.length;\n var desired = Math.max(1, Number(c.desiredCopies || 1));\n if (filter === FILTER_ALL) return true;\n if (filter === FILTER_NEW) return acceptedCount === 1;\n if (filter === FILTER_PARTIAL) return acceptedCount >= 1 && acceptedCount < desired;\n if (filter === FILTER_COMPLETE) return acceptedCount >= desired;\n return true;\n });\n }, [storageContracts, contractsByDoc, filter]);\n var storageContractsResetKey = "".concat(filter, ":").concat(filteredContracts.length, ":").concat(filteredContracts[0] && filteredContracts[0].id, ":").concat(filteredContracts[filteredContracts.length - 1] && filteredContracts[filteredContracts.length - 1].id);\n var _useHubListPagination = useHubListPagination(filteredContracts, storageContractsResetKey),\n storageContractsSlice = _useHubListPagination.slice,\n storageListActivePage = _useHubListPagination.page,\n storageTotalPages = _useHubListPagination.totalPages,\n storageRangeFrom = _useHubListPagination.rangeFrom,\n storageRangeTo = _useHubListPagination.rangeTo,\n storageListTotal = _useHubListPagination.total,\n setStorageListPage = _useHubListPagination.setPage;\n var executionResetKey = "".concat(executionContracts.length, ":").concat(executionContracts[0] && executionContracts[0].id, ":").concat(executionContracts[executionContracts.length - 1] && executionContracts[executionContracts.length - 1].id);\n var _useHubListPagination2 = useHubListPagination(executionContracts, executionResetKey),\n executionContractsSlice = _useHubListPagination2.slice,\n executionListActivePage = _useHubListPagination2.page,\n executionTotalPages = _useHubListPagination2.totalPages,\n executionRangeFrom = _useHubListPagination2.rangeFrom,\n executionRangeTo = _useHubListPagination2.rangeTo,\n executionListTotal = _useHubListPagination2.total,\n setExecutionListPage = _useHubListPagination2.setPage;\n var requestExecutionRegistryInvoice = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var program, amountSats, nameOpt, out, r, _t3, _t4;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n setExecFeedback(null);\n if (!execBitcoinLoading) {\n _context2.n = 1;\n break;\n }\n setExecFeedback({\n negative: true,\n content: \'Still checking Bitcoin service; try again in a moment.\'\n });\n return _context2.a(2);\n case 1:\n _context2.p = 1;\n program = JSON.parse(execJson);\n _context2.n = 3;\n break;\n case 2:\n _context2.p = 2;\n _t3 = _context2.v;\n setExecFeedback({\n negative: true,\n content: \'Program must be valid JSON. Fix the text or use Reset program template.\'\n });\n return _context2.a(2);\n case 3:\n amountSats = Number(execAmountSats);\n if (!(!Number.isFinite(amountSats) || amountSats <= 0)) {\n _context2.n = 4;\n break;\n }\n setExecFeedback({\n negative: true,\n content: \'Enter a positive registry fee in sats.\'\n });\n return _context2.a(2);\n case 4:\n nameOpt = execName.trim() || undefined;\n setExecInvoiceBusy(true);\n _context2.p = 5;\n _context2.n = 6;\n return hubJsonRpc(\'CreateExecutionRegistryInvoice\', [{\n program: program,\n amountSats: amountSats,\n name: nameOpt\n }]);\n case 6:\n out = _context2.v;\n if (out.ok) {\n _context2.n = 7;\n break;\n }\n setExecFeedback({\n negative: true,\n content: describeHubRpcFailure(out.error, \'Check hub reachability and Bitcoin status.\')\n });\n return _context2.a(2);\n case 7:\n r = out.result;\n if (!(r && r.status === \'error\')) {\n _context2.n = 8;\n break;\n }\n setExecFeedback({\n negative: true,\n content: r.message || \'Hub rejected the registry invoice request.\'\n });\n return _context2.a(2);\n case 8:\n if (!(r && r.type === \'CreateExecutionRegistryInvoiceResult\' && r.programDigest && r.address)) {\n _context2.n = 9;\n break;\n }\n setExecRegistryInvoice({\n programDigest: r.programDigest,\n address: r.address,\n amountSats: r.amountSats,\n network: r.network != null ? String(r.network).trim() : undefined\n });\n setExecTxid(\'\');\n setRegistryAddressCopied(false);\n setExecFeedback(null);\n return _context2.a(2);\n case 9:\n setExecFeedback({\n negative: true,\n content: \'Unexpected response from hub for registry invoice.\'\n });\n _context2.n = 11;\n break;\n case 10:\n _context2.p = 10;\n _t4 = _context2.v;\n setExecFeedback({\n negative: true,\n content: _t4 && _t4.message ? _t4.message : String(_t4)\n });\n case 11:\n _context2.p = 11;\n setExecInvoiceBusy(false);\n return _context2.f(11);\n case 12:\n return _context2.a(2);\n }\n }, _callee2, null, [[5, 10, 11, 12], [1, 2]]);\n })), [execJson, execAmountSats, execName, execBitcoinLoading]);\n var submitExecutionContract = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var program, nameOpt, tid, payload, out, r, msg, needsPayHelp, payHint, cid, _t5, _t6;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n setExecFeedback(null);\n _context3.p = 1;\n program = JSON.parse(execJson);\n _context3.n = 3;\n break;\n case 2:\n _context3.p = 2;\n _t5 = _context3.v;\n setExecFeedback({\n negative: true,\n content: \'Program must be valid JSON. Fix the text or use Reset program template.\'\n });\n return _context3.a(2);\n case 3:\n if (!execBitcoinLoading) {\n _context3.n = 4;\n break;\n }\n setExecFeedback({\n negative: true,\n content: \'Still checking Bitcoin service; wait a moment before publishing.\'\n });\n return _context3.a(2);\n case 4:\n nameOpt = execName.trim() || undefined;\n if (!execBitcoinOn) {\n _context3.n = 6;\n break;\n }\n if (!(!execRegistryInvoice || !execRegistryInvoice.programDigest)) {\n _context3.n = 5;\n break;\n }\n setExecFeedback({\n negative: true,\n content: \'Request a registry invoice first (step 1), pay it on-chain, then enter the txid.\'\n });\n return _context3.a(2);\n case 5:\n tid = String(execTxid || \'\').trim();\n if (tid) {\n _context3.n = 6;\n break;\n }\n setExecFeedback({\n negative: true,\n content: \'Enter the Bitcoin transaction id that pays the registry invoice.\'\n });\n return _context3.a(2);\n case 6:\n payload = execBitcoinOn ? {\n name: nameOpt,\n program: program,\n txid: String(execTxid || \'\').trim(),\n programDigest: execRegistryInvoice.programDigest\n } : {\n name: nameOpt,\n program: program\n };\n setExecBusy(true);\n _context3.p = 7;\n _context3.n = 8;\n return hubJsonRpc(\'CreateExecutionContract\', [payload]);\n case 8:\n out = _context3.v;\n if (out.ok) {\n _context3.n = 9;\n break;\n }\n setExecFeedback({\n negative: true,\n content: describeHubRpcFailure(out.error, \'Check that this origin can reach the hub and try again.\')\n });\n return _context3.a(2);\n case 9:\n r = out.result;\n if (!(r && r.status === \'error\')) {\n _context3.n = 10;\n break;\n }\n msg = r.message || \'Hub rejected publish.\';\n needsPayHelp = /bitcoin is enabled|l1 payment verification failed|registry invoice|pay the invoice/i.test(msg);\n payHint = loadHubUiFeatureFlags().bitcoinPayments ? /*#__PURE__*/React.createElement("span", null, "Pay from ", /*#__PURE__*/React.createElement(Link, {\n to: "/payments"\n }, "Payments"), " (regtest + admin token) or another wallet, then paste the funding txid and publish again.") : /*#__PURE__*/React.createElement("span", null, "Pay from another wallet, or enable ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin \\u2014 Payments"), " in Admin \\u2192 Feature visibility and use Payments (regtest + admin token), then paste the funding txid and publish again.");\n setExecFeedback({\n negative: true,\n content: needsPayHelp ? /*#__PURE__*/React.createElement("span", null, msg, \' \', payHint) : /*#__PURE__*/React.createElement("span", null, msg, \' \', "If you requested a registry invoice and edited the program JSON afterward, request a new invoice so the digest matches.")\n });\n return _context3.a(2);\n case 10:\n if (r && r.type === \'CreateExecutionContractResult\' && (r.contract || r.id)) {\n cid = r.id || r.contract && r.contract.id;\n setExecName(\'\');\n setExecRegistryInvoice(null);\n setExecTxid(\'\');\n if (typeof window !== \'undefined\' && window.sessionStorage) {\n try {\n window.sessionStorage.removeItem(EXEC_REGISTRY_DRAFT_STORAGE_KEY);\n } catch (_) {}\n }\n setRegistryAddressCopied(false);\n setExecFeedback({\n positive: true,\n content: /*#__PURE__*/React.createElement("span", null, "Execution contract published to the hub registry.", cid ? /*#__PURE__*/React.createElement(React.Fragment, null, \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/contracts/".concat(encodeURIComponent(cid))\n }, "Open detail"), \' \', "to run on the hub.") : null)\n });\n if (typeof window !== \'undefined\') {\n window.dispatchEvent(new CustomEvent(\'executionContractCreated\', {\n detail: {\n contract: r.contract || null,\n id: cid\n }\n }));\n }\n } else {\n setExecFeedback({\n negative: true,\n content: \'Unexpected response from hub.\'\n });\n }\n _context3.n = 12;\n break;\n case 11:\n _context3.p = 11;\n _t6 = _context3.v;\n setExecFeedback({\n negative: true,\n content: _t6 && _t6.message ? _t6.message : String(_t6)\n });\n case 12:\n _context3.p = 12;\n setExecBusy(false);\n return _context3.f(12);\n case 13:\n return _context3.a(2);\n }\n }, _callee3, null, [[7, 11, 12, 13], [1, 2]]);\n })), [execJson, execName, execBitcoinOn, execBitcoinLoading, execRegistryInvoice, execTxid]);\n var registryStep = !execBitcoinOn ? 2 : !execRegistryInvoice ? 0 : !String(execTxid || \'\').trim() ? 1 : 2;\n var scrollToSection = React.useCallback(function (id) {\n if (typeof document === \'undefined\') return;\n var el = document.getElementById(id);\n if (el && typeof el.scrollIntoView === \'function\') {\n el.scrollIntoView({\n behavior: \'smooth\',\n block: \'start\'\n });\n }\n }, []);\n return /*#__PURE__*/React.createElement("fabric-contracts", {\n "class": "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "contracts-page-heading"\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.75em\',\n flexWrap: \'wrap\',\n marginBottom: \'0.35em\'\n },\n role: "banner"\n }, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n as: Link,\n to: "/",\n "aria-label": "Back to home"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Home"), /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "contracts-page-heading",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Header.Content, null, "Contracts")), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n type: "button",\n loading: loading,\n disabled: loading,\n onClick: function onClick() {\n return void loadContracts();\n },\n "aria-label": "Refresh contracts",\n title: "Refresh lists"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh")), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0 0 0.75em\',\n maxWidth: \'48rem\',\n lineHeight: 1.55,\n color: \'#555\'\n }\n }, "Hub contracts span ", /*#__PURE__*/React.createElement("strong", null, "application namespaces"), " (Beacon-tracked ", /*#__PURE__*/React.createElement("code", null, "CONTRACT_PUBLISH"), "),", \' \', /*#__PURE__*/React.createElement("strong", null, "storage"), " bonds, ", /*#__PURE__*/React.createElement("strong", null, "execution"), " registry programs, Taproot", \' \', /*#__PURE__*/React.createElement("strong", null, "crowdfunds"), ", and optional Lightning channels. Bitcoin enforces the L1 legs when the hub Bitcoin service is up."), /*#__PURE__*/React.createElement(Menu, {\n secondary: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\',\n flexWrap: \'wrap\'\n },\n "aria-label": "Contracts sections"\n }, /*#__PURE__*/React.createElement(Menu.Item, {\n link: true,\n onClick: function onClick() {\n return scrollToSection(\'contracts-application-h4\');\n },\n content: "Application"\n }), /*#__PURE__*/React.createElement(Menu.Item, {\n link: true,\n onClick: function onClick() {\n return scrollToSection(\'contracts-storage-h4\');\n },\n content: "Storage"\n }), /*#__PURE__*/React.createElement(Menu.Item, {\n link: true,\n onClick: function onClick() {\n return scrollToSection(\'contracts-execution-h4\');\n },\n content: "Execution"\n }), /*#__PURE__*/React.createElement(Menu.Item, {\n link: true,\n onClick: function onClick() {\n return scrollToSection(\'contracts-crowdfund-h4\');\n },\n content: "Crowdfunds"\n }), uf.bitcoinLightning ? /*#__PURE__*/React.createElement(Menu.Item, {\n link: true,\n onClick: function onClick() {\n return scrollToSection(\'contracts-lightning-h4\');\n },\n content: "Lightning"\n }) : null, /*#__PURE__*/React.createElement(Menu.Item, {\n as: Link,\n to: "/settings/admin/beacon-federation",\n content: "Beacon Federation"\n })), /*#__PURE__*/React.createElement("div", {\n id: "contracts-summary",\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.45em\',\n marginBottom: \'1em\'\n },\n "aria-live": "polite"\n }, /*#__PURE__*/React.createElement(Label, {\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file code outline"\n }), "Application (see below)"), /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "purple",\n basic: loading\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cloud"\n }), "Storage ", loading ? \'…\' : storageContracts.length), /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "teal",\n basic: loading\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "microchip"\n }), "Execution ", loading ? \'…\' : executionContracts.length), /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "red",\n basic: loading\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "heart"\n }), "Crowdfunds ", loading ? \'…\' : crowdfundCampaigns.length), uf.bitcoinLightning ? /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "yellow",\n basic: loading\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt"\n }), "Channels ", loading ? \'…\' : lightningChannels.length) : null)), /*#__PURE__*/React.createElement(Segment, null, loading && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n },\n role: "status"\n }, /*#__PURE__*/React.createElement(Message.Header, null, /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: true,\n size: "tiny",\n style: {\n marginRight: \'0.5em\'\n }\n }), "Loading contract catalogs\\u2026"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "Fetching storage / execution contracts, crowdfunds", uf.bitcoinLightning ? \', and Lightning channels\' : \'\', ". Section chrome stays visible below.")), error && /*#__PURE__*/React.createElement(Message, {\n negative: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Could not load contracts"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, error), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n type: "button",\n onClick: function onClick() {\n return void loadContracts();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry"))), /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "contracts-application-h4",\n style: {\n marginBottom: \'1.25em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n id: "contracts-application-h4",\n dividing: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sitemap",\n "aria-hidden": "true"\n }), "Application contracts (ARC)"), /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n fontWeight: 600,\n color: \'#333\'\n }\n }, "Beacon-tracked namespaces"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "Inbound ", /*#__PURE__*/React.createElement("code", null, "CONTRACT_PUBLISH"), " offers become pending application contracts. Accepting one includes it in the Beacon ", /*#__PURE__*/React.createElement("code", null, "contracts.stateDigest"), " for the next epoch and can provision a contract-namespace sidechain. Manage co-signing and the Taproot federation vault on", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/admin/beacon-federation"\n }, "Beacon Federation"), ".")), /*#__PURE__*/React.createElement(TrackedApplicationContractsPanel, {\n embedded: true\n })), /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "contracts-crowdfund-h4",\n "aria-describedby": "contracts-crowdfund-intro"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n id: "contracts-crowdfund-h4",\n dividing: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "heart outline",\n color: "red",\n "aria-hidden": "true"\n }), "Crowdfunds"), /*#__PURE__*/React.createElement("div", {\n id: "contracts-crowdfund-intro"\n }, /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n fontWeight: 600,\n color: \'#333\'\n }\n }, "Hub-local vault campaigns"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "Crowdfunds use Taproot scripts on this node\'s Bitcoin connection; they are listed here for visibility alongside storage and execution contracts. Manage campaigns, ACP PSBT, Payjoin, payout, and refund from", \' \', uf.bitcoinCrowdfund ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/crowdfunds"\n }, "Crowdfunds") : /*#__PURE__*/React.createElement("span", null, "Crowdfunds (enable ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin \\u2014 Crowdfund"), " in Admin \\u2192 Feature visibility)"), "."))), /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true,\n style: {\n marginBottom: \'1.25em\'\n }\n }, crowdfundCampaigns.map(function (row) {\n if (!row) return null;\n var cid = String(row.campaignId || \'\').trim();\n var title = row.title || cid || \'Campaign\';\n return /*#__PURE__*/React.createElement(List.Item, {\n key: cid || title\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'center\',\n gap: \'0.35em\'\n }\n }, uf.bitcoinCrowdfund ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/crowdfunds"\n }, title) : /*#__PURE__*/React.createElement("span", null, title), /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "red",\n style: {\n marginLeft: \'0.15em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "heart"\n }), "Crowdfunds"), cid ? /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.8em\',\n color: \'#666\'\n },\n title: "Campaign id"\n }, cid) : null), /*#__PURE__*/React.createElement(List.Description, {\n style: {\n color: \'#666\'\n }\n }, row.address ? /*#__PURE__*/React.createElement("span", {\n style: {\n wordBreak: \'break-all\'\n }\n }, "Vault ", /*#__PURE__*/React.createElement("code", null, row.address)) : \'Vault address pending\', row.goalSats != null ? /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.5em\'\n }\n }, "\\xB7 goal ", formatSatsDisplay(row.goalSats), " sats") : null)));\n }), crowdfundCampaigns.length === 0 && /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Description, {\n style: {\n color: \'#666\'\n }\n }, "No Taproot crowdfund campaigns on this hub yet.", uf.bitcoinCrowdfund ? /*#__PURE__*/React.createElement(React.Fragment, null, " Open ", /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/crowdfunds"\n }, "Crowdfunds"), " to create one.") : /*#__PURE__*/React.createElement(React.Fragment, null, " Enable ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin \\u2014 Crowdfund"), " in Admin \\u2192 Feature visibility to add campaigns.")))))), /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "contracts-storage-h4",\n "aria-describedby": "contracts-storage-intro"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n id: "contracts-storage-h4"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cloud",\n "aria-hidden": "true"\n }), "Storage Contracts"), /*#__PURE__*/React.createElement("div", {\n id: "contracts-storage-intro"\n }, /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n fontWeight: 600,\n color: \'#333\'\n }\n }, "L1 bond vs execution anchor"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "Storage contracts are created after a verified payment to the distribute invoice (", /*#__PURE__*/React.createElement("code", null, "CreateDistributeInvoice"), " \\u2192 pay \\u2192 ", /*#__PURE__*/React.createElement("code", null, "CreateStorageContract"), "). Execution contracts use an L1 registry fee when Bitcoin is enabled (see below); after publish you can run on the hub and on regtest anchor the run commitment (OP_RETURN) with an admin token from the contract detail page."))), /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'1em\',\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, "Filter:"), /*#__PURE__*/React.createElement(ButtonGroup, {\n size: "small"\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n active: filter === FILTER_ALL,\n onClick: function onClick() {\n return setFilter(FILTER_ALL);\n }\n }, "All"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n active: filter === FILTER_NEW,\n onClick: function onClick() {\n return setFilter(FILTER_NEW);\n },\n title: "First copy bonded"\n }, "New"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n active: filter === FILTER_PARTIAL,\n onClick: function onClick() {\n return setFilter(FILTER_PARTIAL);\n },\n title: "Some copies bonded, not all"\n }, "Partial"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n active: filter === FILTER_COMPLETE,\n onClick: function onClick() {\n return setFilter(FILTER_COMPLETE);\n },\n title: "All desired copies bonded"\n }, "Complete"))), /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true\n }, storageContractsSlice.map(function (c) {\n if (!c || !c.id) return null;\n var created = c.created ? new Date(c.created).toLocaleString() : \'\';\n var docContracts = contractsByDoc[c.document] || [];\n var acceptedCount = docContracts.length;\n var desired = Math.max(1, Number(c.desiredCopies || 1));\n var status = acceptedCount >= desired ? \'complete\' : acceptedCount === 1 ? \'new\' : \'partial\';\n var statusLabel = status === \'complete\' ? \'Complete\' : status === \'new\' ? \'New\' : \'Partial\';\n var statusColor = status === \'complete\' ? \'green\' : status === \'new\' ? \'blue\' : \'orange\';\n return /*#__PURE__*/React.createElement(List.Item, {\n key: c.id\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, /*#__PURE__*/React.createElement(Link, {\n to: "/contracts/".concat(encodeURIComponent(c.id))\n }, c.name || c.id), /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "purple",\n style: {\n marginLeft: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cloud"\n }), "Storage"), /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: statusColor,\n style: {\n marginLeft: \'0.25em\'\n }\n }, statusLabel), desired > 1 && /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n basic: true,\n style: {\n marginLeft: \'0.25em\'\n }\n }, acceptedCount, "/", desired, " copies")), /*#__PURE__*/React.createElement(List.Description, {\n style: {\n color: \'#666\'\n }\n }, c.document ? "Document: ".concat(c.document) : \'Document storage contract\', created ? " \\u2014 ".concat(created) : \'\', c.txid && /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.5em\'\n }\n }, uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n as: Link,\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(c.txid)),\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), "Tx") : /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility to open the tx viewer"\n }, c.txid)))));\n }), filteredContracts.length === 0 && !loading && !error && /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Description, {\n style: {\n color: \'#666\'\n }\n }, storageContracts.length === 0 && executionContracts.length === 0 && crowdfundCampaigns.length === 0 ? \'No contracts yet.\' : "No storage contracts match \\"".concat(filter, "\\"."))))), storageListTotal > 0 && /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontSize: \'0.88em\'\n }\n }, "Showing ", storageRangeFrom, "\\u2013", storageRangeTo, " of ", storageListTotal), /*#__PURE__*/React.createElement(HubPagination, {\n activePage: storageListActivePage,\n totalPages: storageTotalPages,\n onPageChange: function onPageChange(e, d) {\n return setStorageListPage(d.activePage);\n },\n disabled: loading,\n style: {\n marginTop: 0,\n flex: \'1 1 auto\',\n minWidth: 0\n }\n }))), /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "contracts-execution-h4",\n "aria-describedby": "contracts-execution-desc"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n dividing: true,\n id: "contracts-execution-h4",\n style: {\n marginTop: \'1.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "microchip",\n "aria-hidden": "true"\n }), "Execution contracts"), /*#__PURE__*/React.createElement("p", {\n id: "contracts-execution-desc",\n style: {\n color: \'#666\',\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Registry:"), " execution contracts are listed hub-wide. When this hub\'s Bitcoin service is available, publishing requires a real L1 payment: request a ", /*#__PURE__*/React.createElement("code", null, "CreateExecutionRegistryInvoice"), " address, pay at least the quoted sats, then submit the funding ", /*#__PURE__*/React.createElement("code", null, "txid"), " with ", /*#__PURE__*/React.createElement("code", null, "CreateExecutionContract"), " (same ", /*#__PURE__*/React.createElement("code", null, "POST /services/rpc"), " surface as ", /*#__PURE__*/React.createElement("strong", null, "Run on hub"), " on the detail page). Without Bitcoin (local dev), the hub still accepts free registration so you can iterate on programs."), /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "L1, deterministic runs, and network state"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Registry"), " ties a ", /*#__PURE__*/React.createElement("code", null, "programDigest"), " to an on-chain payment when Bitcoin is enabled.", /*#__PURE__*/React.createElement("strong", null, " Runs"), " produce a ", /*#__PURE__*/React.createElement("code", null, "runCommitmentHex"), " anyone can re-check (browser vs hub); regtest can ", /*#__PURE__*/React.createElement("strong", null, "OP_RETURN"), "-anchor that digest. The hub ", /*#__PURE__*/React.createElement("strong", null, "Beacon"), " records epochs against Bitcoin block hash/height; ", /*#__PURE__*/React.createElement("strong", null, "sidechain"), " state can advance via patches and follow L1 reorgs. Reproducible epoch witnesses, ", /*#__PURE__*/React.createElement("strong", null, "Beacon Federation"), " docs, and live manifest / epoch JSON links are in the federation panel below (avoid duplicating the same shortcuts here).")), uf.sidechain ? /*#__PURE__*/React.createElement(DistributedFederationPanel, null) : null, execBitcoinLoading && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Checking Bitcoin"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "Waiting for ", /*#__PURE__*/React.createElement("code", null, "/services/bitcoin"), " so we know whether registry publish requires an L1 invoice and txid.")), !execBitcoinLoading && execBitcoinOn && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "L1-backed registry active"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "Use ", /*#__PURE__*/React.createElement("strong", null, "Request registry invoice"), ", pay on-chain (e.g. from", \' \', uf.bitcoinPayments ? /*#__PURE__*/React.createElement(Link, {\n to: "/payments"\n }, "Payments") : /*#__PURE__*/React.createElement("span", null, "Payments (enable Bitcoin \\u2014 Payments in Admin \\u2192 Feature visibility)"), \' \', "with admin token on regtest), then paste the txid and ", /*#__PURE__*/React.createElement("strong", null, "Publish to registry"), "."), !hasAdmin ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n color: \'#444\'\n }\n }, "This browser is currently in non-admin mode, so Hub-wallet funding steps are blocked. Keep using invoice + txid flow with an operator wallet, or load the setup token first.") : null), !execBitcoinLoading && !execBitcoinOn && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "No Bitcoin service"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "Publishing skips L1 verification until the hub exposes a working ", /*#__PURE__*/React.createElement("code", null, "/services/bitcoin"), " connection.")), execFeedback && /*#__PURE__*/React.createElement(Message, {\n positive: !!execFeedback.positive,\n negative: !!execFeedback.negative,\n info: !!execFeedback.info,\n content: execFeedback.content,\n onDismiss: function onDismiss() {\n return setExecFeedback(null);\n },\n style: {\n marginBottom: \'1em\'\n }\n }), /*#__PURE__*/React.createElement(Form, {\n style: {\n marginBottom: \'1.25em\'\n },\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n void submitExecutionContract();\n }\n }, execBitcoinOn && /*#__PURE__*/React.createElement(Step.Group, {\n size: "small",\n fluid: true,\n unstackable: true,\n style: {\n marginBottom: \'1em\',\n overflowX: \'auto\'\n }\n }, /*#__PURE__*/React.createElement(Step, {\n completed: registryStep > 0,\n active: registryStep === 0\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file code outline"\n }), /*#__PURE__*/React.createElement(Step.Content, null, /*#__PURE__*/React.createElement(Step.Title, null, "Program"), /*#__PURE__*/React.createElement(Step.Description, null, "Edit JSON, then request invoice"))), /*#__PURE__*/React.createElement(Step, {\n completed: registryStep > 1,\n active: registryStep === 1\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), /*#__PURE__*/React.createElement(Step.Content, null, /*#__PURE__*/React.createElement(Step.Title, null, "Pay L1"), /*#__PURE__*/React.createElement(Step.Description, null, "Fund the registry address"))), /*#__PURE__*/React.createElement(Step, {\n completed: false,\n active: registryStep === 2\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check"\n }), /*#__PURE__*/React.createElement(Step.Content, null, /*#__PURE__*/React.createElement(Step.Title, null, "Publish"), /*#__PURE__*/React.createElement(Step.Description, null, "Submit txid to the hub")))), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-exec-name"\n }, "Name (optional)"), /*#__PURE__*/React.createElement(Form.Input, {\n id: "fabric-exec-name",\n value: normalizeOptionalInputText(execName),\n onChange: function onChange(e, d) {\n return setExecName(normalizeOptionalInputText(d && d.value));\n },\n placeholder: "e.g. Ping demo"\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-exec-program-json"\n }, "Program (JSON)"), /*#__PURE__*/React.createElement(TextArea, {\n id: "fabric-exec-program-json",\n value: execJson,\n onChange: function onChange(e, d) {\n return setExecJson(d.value);\n },\n rows: 14,\n style: {\n fontFamily: \'monospace\',\n fontSize: \'0.85em\'\n }\n })), execBitcoinOn && /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-exec-registry-fee-sats"\n }, "Registry fee (sats)"), /*#__PURE__*/React.createElement(Form.Input, {\n id: "fabric-exec-registry-fee-sats",\n type: "number",\n min: 1,\n step: 1,\n value: execAmountSats,\n onChange: function onChange(e, d) {\n return setExecAmountSats(d.value);\n },\n placeholder: String(DEFAULT_REGISTRY_FEE_SATS),\n "aria-label": "Execution registry invoice amount in satoshis"\n })), execBitcoinOn && execRegistryInvoice && /*#__PURE__*/React.createElement(Message, {\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Pending registry invoice"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "Pay at least the quoted sats to the hub address below, then paste the funding transaction id."), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n wordBreak: \'break-all\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Pay \\u2265"), " ", formatSatsDisplay(execRegistryInvoice.amountSats), " sats to", \' \', /*#__PURE__*/React.createElement("code", null, execRegistryInvoice.address), \' \', "(network: ", String(execRegistryInvoice.network || \'—\').trim() || \'—\', ")."), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\',\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'center\',\n gap: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n icon: true,\n onClick: copyRegistryInvoiceAddress,\n title: "Copy payment address",\n "aria-label": "Copy registry invoice payment address"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy outline"\n })), registryAddressCopied && /*#__PURE__*/React.createElement("span", {\n style: {\n fontSize: \'0.85em\',\n color: \'#276749\'\n }\n }, "Copied")), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.75em 0 0\',\n fontSize: \'0.85em\',\n color: \'#555\'\n }\n }, "Program digest: ", /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, execRegistryInvoice.programDigest)), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n fontSize: \'0.8em\',\n color: \'#777\'\n }\n }, "If you edit the program JSON after this invoice, request a new invoice so the digest still matches.")), execBitcoinOn && /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-exec-registry-txid"\n }, "Funding txid (after you pay the invoice)"), /*#__PURE__*/React.createElement(Form.Input, {\n id: "fabric-exec-registry-txid",\n value: normalizeOptionalInputText(execTxid),\n onChange: function onChange(e, d) {\n return setExecTxid(normalizeOptionalInputText(d && d.value));\n },\n placeholder: "64-character transaction id"\n })), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n alignItems: \'center\'\n }\n }, execBitcoinOn && /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "blue",\n loading: execInvoiceBusy,\n disabled: execInvoiceBusy || execBusy || execBitcoinLoading,\n title: execBitcoinLoading ? \'Wait until Bitcoin status is known\' : undefined,\n onClick: function onClick() {\n return void requestExecutionRegistryInvoice();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), "Request registry invoice"), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n type: "submit",\n loading: execBusy,\n disabled: execBusy || execInvoiceBusy || execBitcoinLoading,\n title: execBitcoinLoading ? \'Wait until Bitcoin status is known\' : undefined\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "plus"\n }), execBitcoinOn ? \'Publish to registry\' : \'Publish to registry (no L1)\'), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n disabled: execBusy || execInvoiceBusy,\n onClick: function onClick() {\n setExecJson(DEFAULT_EMPTY_EXEC_PROGRAM);\n setExecFeedback(null);\n setExecRegistryInvoice(null);\n setExecTxid(\'\');\n setRegistryAddressCopied(false);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "undo"\n }), "Reset program template"))), /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true\n }, executionContractsSlice.map(function (c) {\n if (!c || !c.id) return null;\n var created = c.created ? new Date(c.created).toLocaleString() : \'\';\n var stepCount = c.program && Array.isArray(c.program.steps) ? c.program.steps.length : null;\n var stepSummary = stepCount != null ? "".concat(stepCount, " step").concat(stepCount === 1 ? \'\' : \'s\') : \'Program\';\n return /*#__PURE__*/React.createElement(List.Item, {\n key: c.id\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'center\',\n gap: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: "/contracts/".concat(encodeURIComponent(c.id))\n }, c.name || c.id), /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "teal",\n style: {\n marginLeft: \'0.15em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "code"\n }), "Execution"), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n as: Link,\n to: "/contracts/".concat(encodeURIComponent(c.id)),\n title: "Open detail \\u2014 run locally or on hub"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "angle double right"\n }), "Open")), /*#__PURE__*/React.createElement(List.Description, {\n style: {\n color: \'#666\'\n }\n }, stepSummary, created ? " \\u2014 ".concat(created) : \'\', c.txid && /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.5em\'\n }\n }, uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n as: Link,\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(c.txid)),\n basic: true,\n title: "Open registry funding transaction on this hub"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), "Tx") : /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility to open the tx viewer"\n }, c.txid)))));\n }), executionContracts.length === 0 && /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Description, {\n style: {\n color: \'#666\'\n }\n }, "No execution contracts on this hub yet. Publish from the form above", execBitcoinOn ? \' (registry invoice + funding txid when Bitcoin is on)\' : \'\', ".")))), executionListTotal > 0 && /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontSize: \'0.88em\'\n }\n }, "Showing ", executionRangeFrom, "\\u2013", executionRangeTo, " of ", executionListTotal), /*#__PURE__*/React.createElement(HubPagination, {\n activePage: executionListActivePage,\n totalPages: executionTotalPages,\n onPageChange: function onPageChange(e, d) {\n return setExecutionListPage(d.activePage);\n },\n disabled: loading,\n style: {\n marginTop: 0,\n flex: \'1 1 auto\',\n minWidth: 0\n }\n }))), uf.bitcoinLightning ? /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "contracts-lightning-h4"\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'1.5em\',\n paddingTop: \'1em\',\n borderTop: \'1px solid rgba(34, 36, 38, 0.15)\',\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n flexWrap: \'wrap\',\n gap: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n id: "contracts-lightning-h4",\n style: {\n margin: 0\n },\n dividing: false\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt",\n color: "yellow",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Lightning Channels")), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small",\n title: "Open Bitcoin / Lightning dashboard"\n }, "Manage")), lightningChannels.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No Lightning channels. Open a channel from the Bitcoin page.") : /*#__PURE__*/React.createElement(Table, {\n celled: true,\n compact: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Peer"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "State"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Capacity"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Our balance"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Short channel ID"))), /*#__PURE__*/React.createElement(Table.Body, null, lightningChannels.map(function (ch, idx) {\n var chId = ch.channel_id || ch.funding_txid || idx;\n var toUrl = "/services/bitcoin/channels/".concat(encodeURIComponent(chId));\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: chId,\n style: {\n cursor: uf.bitcoinLightning ? \'pointer\' : \'default\'\n },\n onClick: function onClick() {\n if (uf.bitcoinLightning) navigate(toUrl);\n }\n }, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, trimHash(ch.peer_id || ch.funding_txid || \'\'))), /*#__PURE__*/React.createElement(Table.Cell, null, ch.state || \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, ch.amount_msat != null ? "".concat(formatSatsDisplay(Math.floor(Number(ch.amount_msat) / 1000)), " sats") : ch.channel_sat != null ? "".concat(formatSatsDisplay(ch.channel_sat), " sats") : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, ch.our_amount_msat != null ? "".concat(formatSatsDisplay(Math.floor(Number(ch.our_amount_msat) / 1000)), " sats") : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.8em\'\n }\n }, ch.short_channel_id || \'—\')));\n })))) : null)));\n}\nmodule.exports = ContractsHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FDTyxDQUFDO0FBRXZCO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHeFUsYUFBYSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29tcG9uZW50cy9Db250cmFjdHNIb21lLmpzP2FmOWUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmssIHVzZU5hdmlnYXRlIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5jb25zdCB7XG4gIFNlZ21lbnQsXG4gIEhlYWRlcixcbiAgTGlzdCxcbiAgSWNvbixcbiAgTGFiZWwsXG4gIExvYWRlcixcbiAgQnV0dG9uLFxuICBCdXR0b25Hcm91cCxcbiAgVGFibGUsXG4gIEZvcm0sXG4gIFRleHRBcmVhLFxuICBNZXNzYWdlLFxuICBTdGVwLFxuICBNZW51XG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IHsgZmV0Y2hMaWdodG5pbmdDaGFubmVscywgbG9hZFVwc3RyZWFtU2V0dGluZ3MsIGZldGNoQ3Jvd2RmdW5kaW5nQ2FtcGFpZ25zIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvYml0Y29pbkNsaWVudCcpO1xuY29uc3QgeyBmb3JtYXRTYXRzRGlzcGxheSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2Zvcm1hdFNhdHMnKTtcbmNvbnN0IHsgaHViSnNvblJwYyB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3NpZGVjaGFpbkh1YkNsaWVudCcpO1xuY29uc3QgeyBkZXNjcmliZUh1YlJwY0ZhaWx1cmUgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJScGNIaW50cycpO1xuY29uc3QgRGlzdHJpYnV0ZWRGZWRlcmF0aW9uUGFuZWwgPSByZXF1aXJlKCcuL0Rpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsJyk7XG5jb25zdCBUcmFja2VkQXBwbGljYXRpb25Db250cmFjdHNQYW5lbCA9IHJlcXVpcmUoJy4vVHJhY2tlZEFwcGxpY2F0aW9uQ29udHJhY3RzUGFuZWwnKTtcbmNvbnN0IHtcbiAgbG9hZEh1YlVpRmVhdHVyZUZsYWdzLFxuICBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFnc1xufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJVaUZlYXR1cmVGbGFncycpO1xuY29uc3QgeyByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViQWRtaW5Ub2tlbkJyb3dzZXInKTtcbmNvbnN0IEh1YlBhZ2luYXRpb24gPSByZXF1aXJlKCcuL0h1YlBhZ2luYXRpb24nKTtcbmNvbnN0IHsgdXNlSHViTGlzdFBhZ2luYXRpb24gfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJMaXN0UGFnaW5hdGlvbicpO1xuXG5jb25zdCBGSUxURVJfQUxMID0gJ2FsbCc7XG5jb25zdCBGSUxURVJfTkVXID0gJ25ldyc7XG5jb25zdCBGSUxURVJfUEFSVElBTCA9ICdwYXJ0aWFsJztcbmNvbnN0IEZJTFRFUl9DT01QTEVURSA9ICdjb21wbGV0ZSc7XG5cbi8qKiBNaW5pbWFsIHZhbGlkIHByb2dyYW0g4oCUIHJlcGxhY2UgYHN0ZXBzYCB3aXRoIHlvdXIgcmVhbCBleGVjdXRpb24gY29udHJhY3QuICovXG5jb25zdCBERUZBVUxUX0VNUFRZX0VYRUNfUFJPR1JBTSA9IEpTT04uc3RyaW5naWZ5KHsgdmVyc2lvbjogMSwgc3RlcHM6IFtdIH0sIG51bGwsIDIpO1xuXG5jb25zdCBERUZBVUxUX1JFR0lTVFJZX0ZFRV9TQVRTID0gMTAwMDtcbmNvbnN0IEVYRUNfUkVHSVNUUllfRFJBRlRfU1RPUkFHRV9LRVkgPSAnZmFicmljLmV4ZWNSZWdpc3RyeURyYWZ0LnYxJztcblxuZnVuY3Rpb24gdHJpbUhhc2ggKHZhbHVlID0gJycsIGxlZnQgPSA4LCByaWdodCA9IDgpIHtcbiAgY29uc3QgdGV4dCA9IFN0cmluZyh2YWx1ZSB8fCAnJyk7XG4gIGlmICh0ZXh0Lmxlbmd0aCA8PSBsZWZ0ICsgcmlnaHQgKyAxKSByZXR1cm4gdGV4dDtcbiAgcmV0dXJuIGAke3RleHQuc2xpY2UoMCwgbGVmdCl94oCmJHt0ZXh0LnNsaWNlKC1yaWdodCl9YDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplT3B0aW9uYWxJbnB1dFRleHQgKHZhbHVlKSB7XG4gIGNvbnN0IHRleHQgPSBTdHJpbmcodmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xuICAvLyBEZWZlbnNpdmUgY2xlYW51cCBmb3IgaGlzdG9yaWNhbCBkcmFmdHMvVUkgc3RhdGVzIHRoYXQgc2VyaWFsaXplZCBcInVuZGVmaW5lZFwiLlxuICBpZiAodGV4dCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiAnJztcbiAgaWYgKHRleHQuc3RhcnRzV2l0aCgndW5kZWZpbmVkJykgJiYgdGV4dC5sZW5ndGggPiAndW5kZWZpbmVkJy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGV4dC5zbGljZSgndW5kZWZpbmVkJy5sZW5ndGgpO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufVxuXG4vKipcbiAqIEh1YiBjb250cmFjdHMgaG9tZSDigJQgc3RvcmFnZSBib25kcywgZXhlY3V0aW9uIHJlZ2lzdHJ5LCB0cmFja2VkIGFwcGxpY2F0aW9uXG4gKiBBUkMgcHVibGlzaGVzLCBjcm93ZGZ1bmRzLCBhbmQgTGlnaHRuaW5nIGNoYW5uZWwgdmlzaWJpbGl0eS5cbiAqIFJvdXRlOiBgL2NvbnRyYWN0c2AgKGFsc28gZXhwb3J0ZWQgaGlzdG9yaWNhbGx5IGFzIGBDb250cmFjdExpc3RgKS5cbiAqL1xuZnVuY3Rpb24gQ29udHJhY3RzSG9tZSAoKSB7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgWywgc2V0VWlUaWNrXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncygoKSA9PiBzZXRVaVRpY2soKHQpID0+IHQgKyAxKSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdWYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgY29uc3QgaGFzQWRtaW4gPSAhIXJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIoKTtcbiAgY29uc3QgW2NvbnRyYWN0cywgc2V0Q29udHJhY3RzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgY29uc3QgW2Nyb3dkZnVuZENhbXBhaWducywgc2V0Q3Jvd2RmdW5kQ2FtcGFpZ25zXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgY29uc3QgW2xpZ2h0bmluZ0NoYW5uZWxzLCBzZXRMaWdodG5pbmdDaGFubmVsc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2ZpbHRlciwgc2V0RmlsdGVyXSA9IFJlYWN0LnVzZVN0YXRlKEZJTFRFUl9BTEwpO1xuICBjb25zdCBbZXhlY05hbWUsIHNldEV4ZWNOYW1lXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2V4ZWNKc29uLCBzZXRFeGVjSnNvbl0gPSBSZWFjdC51c2VTdGF0ZShERUZBVUxUX0VNUFRZX0VYRUNfUFJPR1JBTSk7XG4gIGNvbnN0IFtleGVjQnVzeSwgc2V0RXhlY0J1c3ldID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZXhlY0ZlZWRiYWNrLCBzZXRFeGVjRmVlZGJhY2tdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtleGVjQml0Y29pbk9uLCBzZXRFeGVjQml0Y29pbk9uXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2V4ZWNCaXRjb2luTG9hZGluZywgc2V0RXhlY0JpdGNvaW5Mb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXhlY0Ftb3VudFNhdHMsIHNldEV4ZWNBbW91bnRTYXRzXSA9IFJlYWN0LnVzZVN0YXRlKFN0cmluZyhERUZBVUxUX1JFR0lTVFJZX0ZFRV9TQVRTKSk7XG4gIGNvbnN0IFtleGVjUmVnaXN0cnlJbnZvaWNlLCBzZXRFeGVjUmVnaXN0cnlJbnZvaWNlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbZXhlY1R4aWQsIHNldEV4ZWNUeGlkXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2V4ZWNJbnZvaWNlQnVzeSwgc2V0RXhlY0ludm9pY2VCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3JlZ2lzdHJ5QWRkcmVzc0NvcGllZCwgc2V0UmVnaXN0cnlBZGRyZXNzQ29waWVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93LnNlc3Npb25TdG9yYWdlKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdyA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKEVYRUNfUkVHSVNUUllfRFJBRlRfU1RPUkFHRV9LRVkpO1xuICAgICAgaWYgKCFyYXcpIHJldHVybjtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gSlNPTi5wYXJzZShyYXcpO1xuICAgICAgaWYgKCFkcmFmdCB8fCB0eXBlb2YgZHJhZnQgIT09ICdvYmplY3QnKSByZXR1cm47XG4gICAgICBpZiAodHlwZW9mIGRyYWZ0LmV4ZWNOYW1lID09PSAnc3RyaW5nJykgc2V0RXhlY05hbWUobm9ybWFsaXplT3B0aW9uYWxJbnB1dFRleHQoZHJhZnQuZXhlY05hbWUpKTtcbiAgICAgIGlmICh0eXBlb2YgZHJhZnQuZXhlY0pzb24gPT09ICdzdHJpbmcnICYmIGRyYWZ0LmV4ZWNKc29uLnRyaW0oKSkgc2V0RXhlY0pzb24oZHJhZnQuZXhlY0pzb24pO1xuICAgICAgaWYgKGRyYWZ0LmV4ZWNBbW91bnRTYXRzICE9IG51bGwpIHNldEV4ZWNBbW91bnRTYXRzKFN0cmluZyhkcmFmdC5leGVjQW1vdW50U2F0cykpO1xuICAgICAgaWYgKHR5cGVvZiBkcmFmdC5leGVjVHhpZCA9PT0gJ3N0cmluZycpIHNldEV4ZWNUeGlkKG5vcm1hbGl6ZU9wdGlvbmFsSW5wdXRUZXh0KGRyYWZ0LmV4ZWNUeGlkKSk7XG4gICAgICBpZiAoXG4gICAgICAgIGRyYWZ0LmV4ZWNSZWdpc3RyeUludm9pY2UgJiZcbiAgICAgICAgdHlwZW9mIGRyYWZ0LmV4ZWNSZWdpc3RyeUludm9pY2UgPT09ICdvYmplY3QnICYmXG4gICAgICAgIGRyYWZ0LmV4ZWNSZWdpc3RyeUludm9pY2UucHJvZ3JhbURpZ2VzdCAmJlxuICAgICAgICBkcmFmdC5leGVjUmVnaXN0cnlJbnZvaWNlLmFkZHJlc3NcbiAgICAgICkge1xuICAgICAgICBzZXRFeGVjUmVnaXN0cnlJbnZvaWNlKHtcbiAgICAgICAgICBwcm9ncmFtRGlnZXN0OiBTdHJpbmcoZHJhZnQuZXhlY1JlZ2lzdHJ5SW52b2ljZS5wcm9ncmFtRGlnZXN0KSxcbiAgICAgICAgICBhZGRyZXNzOiBTdHJpbmcoZHJhZnQuZXhlY1JlZ2lzdHJ5SW52b2ljZS5hZGRyZXNzKSxcbiAgICAgICAgICBhbW91bnRTYXRzOiBOdW1iZXIoZHJhZnQuZXhlY1JlZ2lzdHJ5SW52b2ljZS5hbW91bnRTYXRzKSB8fCBERUZBVUxUX1JFR0lTVFJZX0ZFRV9TQVRTLFxuICAgICAgICAgIG5ldHdvcms6IGRyYWZ0LmV4ZWNSZWdpc3RyeUludm9pY2UubmV0d29yayAhPSBudWxsXG4gICAgICAgICAgICA/IFN0cmluZyhkcmFmdC5leGVjUmVnaXN0cnlJbnZvaWNlLm5ldHdvcmspLnRyaW0oKVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoXykge31cbiAgfSwgW10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZHJhZnQgPSB7XG4gICAgICAgIGV4ZWNOYW1lOiBub3JtYWxpemVPcHRpb25hbElucHV0VGV4dChleGVjTmFtZSksXG4gICAgICAgIGV4ZWNKc29uOiBTdHJpbmcoZXhlY0pzb24gfHwgJycpLFxuICAgICAgICBleGVjQW1vdW50U2F0czogU3RyaW5nKGV4ZWNBbW91bnRTYXRzIHx8ICcnKSxcbiAgICAgICAgZXhlY1R4aWQ6IFN0cmluZyhleGVjVHhpZCB8fCAnJyksXG4gICAgICAgIGV4ZWNSZWdpc3RyeUludm9pY2U6IGV4ZWNSZWdpc3RyeUludm9pY2UgfHwgbnVsbFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhc0NvbnRlbnQgPSAhIShcbiAgICAgICAgZHJhZnQuZXhlY05hbWUudHJpbSgpIHx8XG4gICAgICAgIGRyYWZ0LmV4ZWNUeGlkLnRyaW0oKSB8fFxuICAgICAgICAoZHJhZnQuZXhlY0pzb24gJiYgZHJhZnQuZXhlY0pzb24gIT09IERFRkFVTFRfRU1QVFlfRVhFQ19QUk9HUkFNKSB8fFxuICAgICAgICBkcmFmdC5leGVjUmVnaXN0cnlJbnZvaWNlXG4gICAgICApO1xuICAgICAgaWYgKCFoYXNDb250ZW50KSB7XG4gICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKEVYRUNfUkVHSVNUUllfRFJBRlRfU1RPUkFHRV9LRVkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShFWEVDX1JFR0lTVFJZX0RSQUZUX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShkcmFmdCkpO1xuICAgIH0gY2F0Y2ggKF8pIHt9XG4gIH0sIFtleGVjTmFtZSwgZXhlY0pzb24sIGV4ZWNBbW91bnRTYXRzLCBleGVjVHhpZCwgZXhlY1JlZ2lzdHJ5SW52b2ljZV0pO1xuXG4gIGNvbnN0IGNvcHlSZWdpc3RyeUludm9pY2VBZGRyZXNzID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBleGVjUmVnaXN0cnlJbnZvaWNlICYmIGV4ZWNSZWdpc3RyeUludm9pY2UuYWRkcmVzcztcbiAgICBpZiAoIWEpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgIW5hdmlnYXRvci5jbGlwYm9hcmQgfHwgdHlwZW9mIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0ICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG4gICAgc2V0UmVnaXN0cnlBZGRyZXNzQ29waWVkKGZhbHNlKTtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChTdHJpbmcoYSkpLnRoZW4oKCkgPT4ge1xuICAgICAgc2V0UmVnaXN0cnlBZGRyZXNzQ29waWVkKHRydWUpO1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHNldFJlZ2lzdHJ5QWRkcmVzc0NvcGllZChmYWxzZSksIDIwMDApO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfSwgW2V4ZWNSZWdpc3RyeUludm9pY2VdKTtcblxuICBjb25zdCBsb2FkQ29udHJhY3RzID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKG9wdHMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSAhIW9wdHMuYmFja2dyb3VuZDtcbiAgICBpZiAoIWJhY2tncm91bmQpIHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICBzZXRFcnJvcihudWxsKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVwc3RyZWFtID0gbG9hZFVwc3RyZWFtU2V0dGluZ3MoKTtcbiAgICAgIGNvbnN0IFtjb250cmFjdHNTZXR0bGVkLCBsaWdodG5pbmdTZXR0bGVkLCBjcm93ZGZ1bmRTZXR0bGVkXSA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICAgIGZldGNoKCcvY29udHJhY3RzJywgeyBtZXRob2Q6ICdHRVQnIH0pLFxuICAgICAgICBmZXRjaExpZ2h0bmluZ0NoYW5uZWxzKHVwc3RyZWFtKS5jYXRjaCgoKSA9PiAoeyBjaGFubmVsczogW10sIG91dHB1dHM6IFtdIH0pKSxcbiAgICAgICAgZmV0Y2hDcm93ZGZ1bmRpbmdDYW1wYWlnbnModXBzdHJlYW0pLmNhdGNoKCgpID0+IFtdKVxuICAgICAgXSk7XG5cbiAgICAgIGlmIChsaWdodG5pbmdTZXR0bGVkLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgICAgY29uc3QgbGlnaHRuaW5nUmVzID0gbGlnaHRuaW5nU2V0dGxlZC52YWx1ZTtcbiAgICAgICAgY29uc3QgY2hhbm5lbHMgPSBsaWdodG5pbmdSZXMgJiYgQXJyYXkuaXNBcnJheShsaWdodG5pbmdSZXMuY2hhbm5lbHMpID8gbGlnaHRuaW5nUmVzLmNoYW5uZWxzIDogW107XG4gICAgICAgIHNldExpZ2h0bmluZ0NoYW5uZWxzKGNoYW5uZWxzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldExpZ2h0bmluZ0NoYW5uZWxzKFtdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNyb3dkZnVuZFNldHRsZWQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgICBjb25zdCByYXcgPSBjcm93ZGZ1bmRTZXR0bGVkLnZhbHVlO1xuICAgICAgICBjb25zdCBsaXN0ID0gQXJyYXkuaXNBcnJheShyYXcpID8gcmF3IDogW107XG4gICAgICAgIHNldENyb3dkZnVuZENhbXBhaWducyhsaXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENyb3dkZnVuZENhbXBhaWducyhbXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb250cmFjdHNTZXR0bGVkLnN0YXR1cyAhPT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgICAgY29uc3QgcmVhc29uID0gY29udHJhY3RzU2V0dGxlZC5yZWFzb247XG4gICAgICAgIHNldEVycm9yKHJlYXNvbiAmJiByZWFzb24ubWVzc2FnZSA/IHJlYXNvbi5tZXNzYWdlIDogJ0ZhaWxlZCB0byBsb2FkIGNvbnRyYWN0cy4nKTtcbiAgICAgICAgc2V0Q29udHJhY3RzKFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0c1JlcyA9IGNvbnRyYWN0c1NldHRsZWQudmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGNvbnRyYWN0c1Jlcy5qc29uKCk7XG4gICAgICAgICAgaWYgKCFjb250cmFjdHNSZXMub2sgfHwgIWJvZHkgfHwgYm9keS5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIHNldEVycm9yKChib2R5ICYmIGJvZHkubWVzc2FnZSkgfHwgJ0ZhaWxlZCB0byBsb2FkIGNvbnRyYWN0cy4nKTtcbiAgICAgICAgICAgIHNldENvbnRyYWN0cyhbXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBBcnJheS5pc0FycmF5KGJvZHkuY29udHJhY3RzKSA/IGJvZHkuY29udHJhY3RzIDogKGJvZHkucmVzdWx0IHx8IFtdKTtcbiAgICAgICAgICAgIHNldENvbnRyYWN0cyhsaXN0IHx8IFtdKTtcbiAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kKSBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyKSB7XG4gICAgICAgICAgc2V0RXJyb3IocGFyc2VFcnIgJiYgcGFyc2VFcnIubWVzc2FnZSA/IHBhcnNlRXJyLm1lc3NhZ2UgOiAnSW52YWxpZCBjb250cmFjdHMgcmVzcG9uc2UuJyk7XG4gICAgICAgICAgc2V0Q29udHJhY3RzKFtdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldEVycm9yKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogJ0ZhaWxlZCB0byBsb2FkIGNvbnRyYWN0cy4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKCFiYWNrZ3JvdW5kKSBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxvYWRDb250cmFjdHMoKTtcbiAgfSwgW2xvYWRDb250cmFjdHNdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBhYyA9IHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09ICd1bmRlZmluZWQnID8gbmV3IEFib3J0Q29udHJvbGxlcigpIDogbnVsbDtcbiAgICBsZXQgdGltZW91dElkO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiBhYykge1xuICAgICAgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGFjLmFib3J0KCk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICB9LCAxNTAwMCk7XG4gICAgfVxuICAgIHNldEV4ZWNCaXRjb2luTG9hZGluZyh0cnVlKTtcbiAgICBmZXRjaCgnL3NlcnZpY2VzL2JpdGNvaW4nLCB7XG4gICAgICBoZWFkZXJzOiB7IEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAuLi4oYWMgPyB7IHNpZ25hbDogYWMuc2lnbmFsIH0gOiB7fSlcbiAgICB9KVxuICAgICAgLnRoZW4oKHIpID0+IHIuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpKVxuICAgICAgLnRoZW4oKGJvZHkpID0+IHtcbiAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBhdmFpbGFibGUgPSAhIShib2R5ICYmIGJvZHkuYXZhaWxhYmxlICE9PSBmYWxzZSAmJiBib2R5LnN0YXR1cyAhPT0gJ2Vycm9yJyk7XG4gICAgICAgIHNldEV4ZWNCaXRjb2luT24oYXZhaWxhYmxlKTtcbiAgICAgICAgc2V0RXhlY0JpdGNvaW5Mb2FkaW5nKGZhbHNlKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICBpZiAoIWNhbmNlbGxlZCkge1xuICAgICAgICAgIHNldEV4ZWNCaXRjb2luT24oZmFsc2UpO1xuICAgICAgICAgIHNldEV4ZWNCaXRjb2luTG9hZGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0aW1lb3V0SWQgIT0gbnVsbCkge1xuICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICBpZiAoYWMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhYy5hYm9ydCgpO1xuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHRpbWVvdXRJZCAhPSBudWxsKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvbkNyZWF0ZWQgPSAoKSA9PiB7XG4gICAgICB2b2lkIGxvYWRDb250cmFjdHMoeyBiYWNrZ3JvdW5kOiB0cnVlIH0pO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXhlY3V0aW9uQ29udHJhY3RDcmVhdGVkJywgb25DcmVhdGVkKTtcbiAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXhlY3V0aW9uQ29udHJhY3RDcmVhdGVkJywgb25DcmVhdGVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2xvYWRDb250cmFjdHNdKTtcblxuICBjb25zdCBzdG9yYWdlQ29udHJhY3RzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGNvbnRyYWN0cy5maWx0ZXIoKGMpID0+IHtcbiAgICAgIGlmICghYykgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGMudHlwZSA9PT0gJ0V4ZWN1dGlvbkNvbnRyYWN0JykgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGMudHlwZSA9PT0gJ1N0b3JhZ2VDb250cmFjdCcpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuICEhYy5kb2N1bWVudDtcbiAgICB9KTtcbiAgfSwgW2NvbnRyYWN0c10pO1xuXG4gIGNvbnN0IGV4ZWN1dGlvbkNvbnRyYWN0cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGxpc3QgPSBjb250cmFjdHMuZmlsdGVyKChjKSA9PiBjICYmIGMudHlwZSA9PT0gJ0V4ZWN1dGlvbkNvbnRyYWN0Jyk7XG4gICAgcmV0dXJuIGxpc3Quc2xpY2UoKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCB0YSA9IGEgJiYgYS5jcmVhdGVkID8gRGF0ZS5wYXJzZShhLmNyZWF0ZWQpIDogTmFOO1xuICAgICAgY29uc3QgdGIgPSBiICYmIGIuY3JlYXRlZCA/IERhdGUucGFyc2UoYi5jcmVhdGVkKSA6IE5hTjtcbiAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodGIpICYmIE51bWJlci5pc0Zpbml0ZSh0YSkgJiYgdGIgIT09IHRhKSByZXR1cm4gdGIgLSB0YTtcbiAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodGIpICYmICFOdW1iZXIuaXNGaW5pdGUodGEpKSByZXR1cm4gMTtcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHRiKSAmJiBOdW1iZXIuaXNGaW5pdGUodGEpKSByZXR1cm4gLTE7XG4gICAgICByZXR1cm4gU3RyaW5nKChiICYmIGIuaWQpIHx8ICcnKS5sb2NhbGVDb21wYXJlKFN0cmluZygoYSAmJiBhLmlkKSB8fCAnJykpO1xuICAgIH0pO1xuICB9LCBbY29udHJhY3RzXSk7XG5cbiAgLy8gR3JvdXAgc3RvcmFnZSBjb250cmFjdHMgYnkgZG9jdW1lbnQgdG8gY29tcHV0ZSBhY2NlcHRlZCBjb3VudCB2cyBkZXNpcmVkXG4gIGNvbnN0IGNvbnRyYWN0c0J5RG9jID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgbWFwID0ge307XG4gICAgZm9yIChjb25zdCBjIG9mIHN0b3JhZ2VDb250cmFjdHMpIHtcbiAgICAgIGlmICghYyB8fCAhYy5kb2N1bWVudCkgY29udGludWU7XG4gICAgICBjb25zdCBkb2NJZCA9IGMuZG9jdW1lbnQ7XG4gICAgICBpZiAoIW1hcFtkb2NJZF0pIG1hcFtkb2NJZF0gPSBbXTtcbiAgICAgIG1hcFtkb2NJZF0ucHVzaChjKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbiAgfSwgW3N0b3JhZ2VDb250cmFjdHNdKTtcblxuICBjb25zdCBmaWx0ZXJlZENvbnRyYWN0cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBzdG9yYWdlQ29udHJhY3RzLmZpbHRlcigoYykgPT4ge1xuICAgICAgaWYgKCFjIHx8ICFjLmRvY3VtZW50KSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBkb2NDb250cmFjdHMgPSBjb250cmFjdHNCeURvY1tjLmRvY3VtZW50XSB8fCBbXTtcbiAgICAgIGNvbnN0IGFjY2VwdGVkQ291bnQgPSBkb2NDb250cmFjdHMubGVuZ3RoO1xuICAgICAgY29uc3QgZGVzaXJlZCA9IE1hdGgubWF4KDEsIE51bWJlcihjLmRlc2lyZWRDb3BpZXMgfHwgMSkpO1xuICAgICAgaWYgKGZpbHRlciA9PT0gRklMVEVSX0FMTCkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAoZmlsdGVyID09PSBGSUxURVJfTkVXKSByZXR1cm4gYWNjZXB0ZWRDb3VudCA9PT0gMTtcbiAgICAgIGlmIChmaWx0ZXIgPT09IEZJTFRFUl9QQVJUSUFMKSByZXR1cm4gYWNjZXB0ZWRDb3VudCA+PSAxICYmIGFjY2VwdGVkQ291bnQgPCBkZXNpcmVkO1xuICAgICAgaWYgKGZpbHRlciA9PT0gRklMVEVSX0NPTVBMRVRFKSByZXR1cm4gYWNjZXB0ZWRDb3VudCA+PSBkZXNpcmVkO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH0sIFtzdG9yYWdlQ29udHJhY3RzLCBjb250cmFjdHNCeURvYywgZmlsdGVyXSk7XG5cbiAgY29uc3Qgc3RvcmFnZUNvbnRyYWN0c1Jlc2V0S2V5ID0gYCR7ZmlsdGVyfToke2ZpbHRlcmVkQ29udHJhY3RzLmxlbmd0aH06JHtmaWx0ZXJlZENvbnRyYWN0c1swXSAmJiBmaWx0ZXJlZENvbnRyYWN0c1swXS5pZH06JHtmaWx0ZXJlZENvbnRyYWN0c1tmaWx0ZXJlZENvbnRyYWN0cy5sZW5ndGggLSAxXSAmJiBmaWx0ZXJlZENvbnRyYWN0c1tmaWx0ZXJlZENvbnRyYWN0cy5sZW5ndGggLSAxXS5pZH1gO1xuICBjb25zdCB7XG4gICAgc2xpY2U6IHN0b3JhZ2VDb250cmFjdHNTbGljZSxcbiAgICBwYWdlOiBzdG9yYWdlTGlzdEFjdGl2ZVBhZ2UsXG4gICAgdG90YWxQYWdlczogc3RvcmFnZVRvdGFsUGFnZXMsXG4gICAgcmFuZ2VGcm9tOiBzdG9yYWdlUmFuZ2VGcm9tLFxuICAgIHJhbmdlVG86IHN0b3JhZ2VSYW5nZVRvLFxuICAgIHRvdGFsOiBzdG9yYWdlTGlzdFRvdGFsLFxuICAgIHNldFBhZ2U6IHNldFN0b3JhZ2VMaXN0UGFnZVxuICB9ID0gdXNlSHViTGlzdFBhZ2luYXRpb24oZmlsdGVyZWRDb250cmFjdHMsIHN0b3JhZ2VDb250cmFjdHNSZXNldEtleSk7XG5cbiAgY29uc3QgZXhlY3V0aW9uUmVzZXRLZXkgPSBgJHtleGVjdXRpb25Db250cmFjdHMubGVuZ3RofToke2V4ZWN1dGlvbkNvbnRyYWN0c1swXSAmJiBleGVjdXRpb25Db250cmFjdHNbMF0uaWR9OiR7ZXhlY3V0aW9uQ29udHJhY3RzW2V4ZWN1dGlvbkNvbnRyYWN0cy5sZW5ndGggLSAxXSAmJiBleGVjdXRpb25Db250cmFjdHNbZXhlY3V0aW9uQ29udHJhY3RzLmxlbmd0aCAtIDFdLmlkfWA7XG4gIGNvbnN0IHtcbiAgICBzbGljZTogZXhlY3V0aW9uQ29udHJhY3RzU2xpY2UsXG4gICAgcGFnZTogZXhlY3V0aW9uTGlzdEFjdGl2ZVBhZ2UsXG4gICAgdG90YWxQYWdlczogZXhlY3V0aW9uVG90YWxQYWdlcyxcbiAgICByYW5nZUZyb206IGV4ZWN1dGlvblJhbmdlRnJvbSxcbiAgICByYW5nZVRvOiBleGVjdXRpb25SYW5nZVRvLFxuICAgIHRvdGFsOiBleGVjdXRpb25MaXN0VG90YWwsXG4gICAgc2V0UGFnZTogc2V0RXhlY3V0aW9uTGlzdFBhZ2VcbiAgfSA9IHVzZUh1Ykxpc3RQYWdpbmF0aW9uKGV4ZWN1dGlvbkNvbnRyYWN0cywgZXhlY3V0aW9uUmVzZXRLZXkpO1xuXG4gIGNvbnN0IHJlcXVlc3RFeGVjdXRpb25SZWdpc3RyeUludm9pY2UgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0RXhlY0ZlZWRiYWNrKG51bGwpO1xuICAgIGlmIChleGVjQml0Y29pbkxvYWRpbmcpIHtcbiAgICAgIHNldEV4ZWNGZWVkYmFjayh7IG5lZ2F0aXZlOiB0cnVlLCBjb250ZW50OiAnU3RpbGwgY2hlY2tpbmcgQml0Y29pbiBzZXJ2aWNlOyB0cnkgYWdhaW4gaW4gYSBtb21lbnQuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHByb2dyYW07XG4gICAgdHJ5IHtcbiAgICAgIHByb2dyYW0gPSBKU09OLnBhcnNlKGV4ZWNKc29uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXRFeGVjRmVlZGJhY2soe1xuICAgICAgICBuZWdhdGl2ZTogdHJ1ZSxcbiAgICAgICAgY29udGVudDogJ1Byb2dyYW0gbXVzdCBiZSB2YWxpZCBKU09OLiBGaXggdGhlIHRleHQgb3IgdXNlIFJlc2V0IHByb2dyYW0gdGVtcGxhdGUuJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFtb3VudFNhdHMgPSBOdW1iZXIoZXhlY0Ftb3VudFNhdHMpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFtb3VudFNhdHMpIHx8IGFtb3VudFNhdHMgPD0gMCkge1xuICAgICAgc2V0RXhlY0ZlZWRiYWNrKHsgbmVnYXRpdmU6IHRydWUsIGNvbnRlbnQ6ICdFbnRlciBhIHBvc2l0aXZlIHJlZ2lzdHJ5IGZlZSBpbiBzYXRzLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5hbWVPcHQgPSBleGVjTmFtZS50cmltKCkgfHwgdW5kZWZpbmVkO1xuICAgIHNldEV4ZWNJbnZvaWNlQnVzeSh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3V0ID0gYXdhaXQgaHViSnNvblJwYygnQ3JlYXRlRXhlY3V0aW9uUmVnaXN0cnlJbnZvaWNlJywgW3sgcHJvZ3JhbSwgYW1vdW50U2F0cywgbmFtZTogbmFtZU9wdCB9XSk7XG4gICAgICBpZiAoIW91dC5vaykge1xuICAgICAgICBzZXRFeGVjRmVlZGJhY2soe1xuICAgICAgICAgIG5lZ2F0aXZlOiB0cnVlLFxuICAgICAgICAgIGNvbnRlbnQ6IGRlc2NyaWJlSHViUnBjRmFpbHVyZShvdXQuZXJyb3IsICdDaGVjayBodWIgcmVhY2hhYmlsaXR5IGFuZCBCaXRjb2luIHN0YXR1cy4nKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgciA9IG91dC5yZXN1bHQ7XG4gICAgICBpZiAociAmJiByLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICBzZXRFeGVjRmVlZGJhY2soeyBuZWdhdGl2ZTogdHJ1ZSwgY29udGVudDogci5tZXNzYWdlIHx8ICdIdWIgcmVqZWN0ZWQgdGhlIHJlZ2lzdHJ5IGludm9pY2UgcmVxdWVzdC4nIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAociAmJiByLnR5cGUgPT09ICdDcmVhdGVFeGVjdXRpb25SZWdpc3RyeUludm9pY2VSZXN1bHQnICYmIHIucHJvZ3JhbURpZ2VzdCAmJiByLmFkZHJlc3MpIHtcbiAgICAgICAgc2V0RXhlY1JlZ2lzdHJ5SW52b2ljZSh7XG4gICAgICAgICAgcHJvZ3JhbURpZ2VzdDogci5wcm9ncmFtRGlnZXN0LFxuICAgICAgICAgIGFkZHJlc3M6IHIuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnRTYXRzOiByLmFtb3VudFNhdHMsXG4gICAgICAgICAgbmV0d29yazogci5uZXR3b3JrICE9IG51bGwgPyBTdHJpbmcoci5uZXR3b3JrKS50cmltKCkgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHNldEV4ZWNUeGlkKCcnKTtcbiAgICAgICAgc2V0UmVnaXN0cnlBZGRyZXNzQ29waWVkKGZhbHNlKTtcbiAgICAgICAgc2V0RXhlY0ZlZWRiYWNrKG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRFeGVjRmVlZGJhY2soeyBuZWdhdGl2ZTogdHJ1ZSwgY29udGVudDogJ1VuZXhwZWN0ZWQgcmVzcG9uc2UgZnJvbSBodWIgZm9yIHJlZ2lzdHJ5IGludm9pY2UuJyB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXRFeGVjRmVlZGJhY2soeyBuZWdhdGl2ZTogdHJ1ZSwgY29udGVudDogZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldEV4ZWNJbnZvaWNlQnVzeShmYWxzZSk7XG4gICAgfVxuICB9LCBbZXhlY0pzb24sIGV4ZWNBbW91bnRTYXRzLCBleGVjTmFtZSwgZXhlY0JpdGNvaW5Mb2FkaW5nXSk7XG5cbiAgY29uc3Qgc3VibWl0RXhlY3V0aW9uQ29udHJhY3QgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0RXhlY0ZlZWRiYWNrKG51bGwpO1xuICAgIGxldCBwcm9ncmFtO1xuICAgIHRyeSB7XG4gICAgICBwcm9ncmFtID0gSlNPTi5wYXJzZShleGVjSnNvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0RXhlY0ZlZWRiYWNrKHtcbiAgICAgICAgbmVnYXRpdmU6IHRydWUsXG4gICAgICAgIGNvbnRlbnQ6ICdQcm9ncmFtIG11c3QgYmUgdmFsaWQgSlNPTi4gRml4IHRoZSB0ZXh0IG9yIHVzZSBSZXNldCBwcm9ncmFtIHRlbXBsYXRlLidcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXhlY0JpdGNvaW5Mb2FkaW5nKSB7XG4gICAgICBzZXRFeGVjRmVlZGJhY2soe1xuICAgICAgICBuZWdhdGl2ZTogdHJ1ZSxcbiAgICAgICAgY29udGVudDogJ1N0aWxsIGNoZWNraW5nIEJpdGNvaW4gc2VydmljZTsgd2FpdCBhIG1vbWVudCBiZWZvcmUgcHVibGlzaGluZy4nXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmFtZU9wdCA9IGV4ZWNOYW1lLnRyaW0oKSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKGV4ZWNCaXRjb2luT24pIHtcbiAgICAgIGlmICghZXhlY1JlZ2lzdHJ5SW52b2ljZSB8fCAhZXhlY1JlZ2lzdHJ5SW52b2ljZS5wcm9ncmFtRGlnZXN0KSB7XG4gICAgICAgIHNldEV4ZWNGZWVkYmFjayh7XG4gICAgICAgICAgbmVnYXRpdmU6IHRydWUsXG4gICAgICAgICAgY29udGVudDogJ1JlcXVlc3QgYSByZWdpc3RyeSBpbnZvaWNlIGZpcnN0IChzdGVwIDEpLCBwYXkgaXQgb24tY2hhaW4sIHRoZW4gZW50ZXIgdGhlIHR4aWQuJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdGlkID0gU3RyaW5nKGV4ZWNUeGlkIHx8ICcnKS50cmltKCk7XG4gICAgICBpZiAoIXRpZCkge1xuICAgICAgICBzZXRFeGVjRmVlZGJhY2soe1xuICAgICAgICAgIG5lZ2F0aXZlOiB0cnVlLFxuICAgICAgICAgIGNvbnRlbnQ6ICdFbnRlciB0aGUgQml0Y29pbiB0cmFuc2FjdGlvbiBpZCB0aGF0IHBheXMgdGhlIHJlZ2lzdHJ5IGludm9pY2UuJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSBleGVjQml0Y29pbk9uXG4gICAgICA/IHtcbiAgICAgICAgbmFtZTogbmFtZU9wdCxcbiAgICAgICAgcHJvZ3JhbSxcbiAgICAgICAgdHhpZDogU3RyaW5nKGV4ZWNUeGlkIHx8ICcnKS50cmltKCksXG4gICAgICAgIHByb2dyYW1EaWdlc3Q6IGV4ZWNSZWdpc3RyeUludm9pY2UucHJvZ3JhbURpZ2VzdFxuICAgICAgfVxuICAgICAgOiB7IG5hbWU6IG5hbWVPcHQsIHByb2dyYW0gfTtcblxuICAgIHNldEV4ZWNCdXN5KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdXQgPSBhd2FpdCBodWJKc29uUnBjKCdDcmVhdGVFeGVjdXRpb25Db250cmFjdCcsIFtwYXlsb2FkXSk7XG4gICAgICBpZiAoIW91dC5vaykge1xuICAgICAgICBzZXRFeGVjRmVlZGJhY2soe1xuICAgICAgICAgIG5lZ2F0aXZlOiB0cnVlLFxuICAgICAgICAgIGNvbnRlbnQ6IGRlc2NyaWJlSHViUnBjRmFpbHVyZShvdXQuZXJyb3IsICdDaGVjayB0aGF0IHRoaXMgb3JpZ2luIGNhbiByZWFjaCB0aGUgaHViIGFuZCB0cnkgYWdhaW4uJylcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHIgPSBvdXQucmVzdWx0O1xuICAgICAgaWYgKHIgJiYgci5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgY29uc3QgbXNnID0gci5tZXNzYWdlIHx8ICdIdWIgcmVqZWN0ZWQgcHVibGlzaC4nO1xuICAgICAgICBjb25zdCBuZWVkc1BheUhlbHAgPSAvYml0Y29pbiBpcyBlbmFibGVkfGwxIHBheW1lbnQgdmVyaWZpY2F0aW9uIGZhaWxlZHxyZWdpc3RyeSBpbnZvaWNlfHBheSB0aGUgaW52b2ljZS9pLnRlc3QobXNnKTtcbiAgICAgICAgY29uc3QgcGF5SGludCA9IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpLmJpdGNvaW5QYXltZW50cyA/IChcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIFBheSBmcm9tIDxMaW5rIHRvPVwiL3BheW1lbnRzXCI+UGF5bWVudHM8L0xpbms+IChyZWd0ZXN0ICsgYWRtaW4gdG9rZW4pIG9yIGFub3RoZXIgd2FsbGV0LCB0aGVuIHBhc3RlIHRoZSBmdW5kaW5nIHR4aWQgYW5kIHB1Ymxpc2ggYWdhaW4uXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgUGF5IGZyb20gYW5vdGhlciB3YWxsZXQsIG9yIGVuYWJsZSA8c3Ryb25nPkJpdGNvaW4g4oCUIFBheW1lbnRzPC9zdHJvbmc+IGluIEFkbWluIOKGkiBGZWF0dXJlIHZpc2liaWxpdHkgYW5kIHVzZSBQYXltZW50cyAocmVndGVzdCArIGFkbWluIHRva2VuKSwgdGhlbiBwYXN0ZSB0aGUgZnVuZGluZyB0eGlkIGFuZCBwdWJsaXNoIGFnYWluLlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKTtcbiAgICAgICAgc2V0RXhlY0ZlZWRiYWNrKHtcbiAgICAgICAgICBuZWdhdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBjb250ZW50OiBuZWVkc1BheUhlbHAgPyAoXG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAge21zZ317JyAnfVxuICAgICAgICAgICAgICB7cGF5SGludH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIHttc2d9eycgJ31cbiAgICAgICAgICAgICAgSWYgeW91IHJlcXVlc3RlZCBhIHJlZ2lzdHJ5IGludm9pY2UgYW5kIGVkaXRlZCB0aGUgcHJvZ3JhbSBKU09OIGFmdGVyd2FyZCwgcmVxdWVzdCBhIG5ldyBpbnZvaWNlIHNvIHRoZSBkaWdlc3QgbWF0Y2hlcy5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAociAmJiByLnR5cGUgPT09ICdDcmVhdGVFeGVjdXRpb25Db250cmFjdFJlc3VsdCcgJiYgKHIuY29udHJhY3QgfHwgci5pZCkpIHtcbiAgICAgICAgY29uc3QgY2lkID0gci5pZCB8fCAoci5jb250cmFjdCAmJiByLmNvbnRyYWN0LmlkKTtcbiAgICAgICAgc2V0RXhlY05hbWUoJycpO1xuICAgICAgICBzZXRFeGVjUmVnaXN0cnlJbnZvaWNlKG51bGwpO1xuICAgICAgICBzZXRFeGVjVHhpZCgnJyk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oRVhFQ19SRUdJU1RSWV9EUkFGVF9TVE9SQUdFX0tFWSk7XG4gICAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgfVxuICAgICAgICBzZXRSZWdpc3RyeUFkZHJlc3NDb3BpZWQoZmFsc2UpO1xuICAgICAgICBzZXRFeGVjRmVlZGJhY2soe1xuICAgICAgICAgIHBvc2l0aXZlOiB0cnVlLFxuICAgICAgICAgIGNvbnRlbnQ6IChcbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICBFeGVjdXRpb24gY29udHJhY3QgcHVibGlzaGVkIHRvIHRoZSBodWIgcmVnaXN0cnkuXG4gICAgICAgICAgICAgIHtjaWQgPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICA8TGluayB0bz17YC9jb250cmFjdHMvJHtlbmNvZGVVUklDb21wb25lbnQoY2lkKX1gfT5PcGVuIGRldGFpbDwvTGluaz5cbiAgICAgICAgICAgICAgICAgIHsnICd9dG8gcnVuIG9uIHRoZSBodWIuXG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIClcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZXhlY3V0aW9uQ29udHJhY3RDcmVhdGVkJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IGNvbnRyYWN0OiByLmNvbnRyYWN0IHx8IG51bGwsIGlkOiBjaWQgfVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0RXhlY0ZlZWRiYWNrKHsgbmVnYXRpdmU6IHRydWUsIGNvbnRlbnQ6ICdVbmV4cGVjdGVkIHJlc3BvbnNlIGZyb20gaHViLicgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0RXhlY0ZlZWRiYWNrKHsgbmVnYXRpdmU6IHRydWUsIGNvbnRlbnQ6IGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRFeGVjQnVzeShmYWxzZSk7XG4gICAgfVxuICB9LCBbZXhlY0pzb24sIGV4ZWNOYW1lLCBleGVjQml0Y29pbk9uLCBleGVjQml0Y29pbkxvYWRpbmcsIGV4ZWNSZWdpc3RyeUludm9pY2UsIGV4ZWNUeGlkXSk7XG5cbiAgY29uc3QgcmVnaXN0cnlTdGVwID0gIWV4ZWNCaXRjb2luT25cbiAgICA/IDJcbiAgICA6ICghZXhlY1JlZ2lzdHJ5SW52b2ljZSA/IDAgOiAoIVN0cmluZyhleGVjVHhpZCB8fCAnJykudHJpbSgpID8gMSA6IDIpKTtcblxuICBjb25zdCBzY3JvbGxUb1NlY3Rpb24gPSBSZWFjdC51c2VDYWxsYmFjaygoaWQpID0+IHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlbCAmJiB0eXBlb2YgZWwuc2Nyb2xsSW50b1ZpZXcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVsLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JyB9KTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxmYWJyaWMtY29udHJhY3RzIGNsYXNzPSdmYWRlLWluJz5cbiAgICAgIDxTZWdtZW50PlxuICAgICAgICA8c2VjdGlvbiBhcmlhLWxhYmVsbGVkYnk9XCJjb250cmFjdHMtcGFnZS1oZWFkaW5nXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC43NWVtJywgZmxleFdyYXA6ICd3cmFwJywgbWFyZ2luQm90dG9tOiAnMC4zNWVtJyB9fVxuICAgICAgICAgICAgcm9sZT1cImJhbm5lclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEJ1dHRvbiBiYXNpYyBzaXplPVwic21hbGxcIiBhcz17TGlua30gdG89XCIvXCIgYXJpYS1sYWJlbD1cIkJhY2sgdG8gaG9tZVwiPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYXJyb3cgbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIEhvbWVcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImgyXCIgaWQ9XCJjb250cmFjdHMtcGFnZS1oZWFkaW5nXCIgc3R5bGU9e3sgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+Q29udHJhY3RzPC9IZWFkZXIuQ29udGVudD5cbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgbG9hZENvbnRyYWN0cygpfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVmcmVzaCBjb250cmFjdHNcIlxuICAgICAgICAgICAgICB0aXRsZT1cIlJlZnJlc2ggbGlzdHNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicmVmcmVzaFwiIC8+XG4gICAgICAgICAgICAgIFJlZnJlc2hcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAgMCAwLjc1ZW0nLCBtYXhXaWR0aDogJzQ4cmVtJywgbGluZUhlaWdodDogMS41NSwgY29sb3I6ICcjNTU1JyB9fT5cbiAgICAgICAgICAgIEh1YiBjb250cmFjdHMgc3BhbiA8c3Ryb25nPmFwcGxpY2F0aW9uIG5hbWVzcGFjZXM8L3N0cm9uZz4gKEJlYWNvbi10cmFja2VkIDxjb2RlPkNPTlRSQUNUX1BVQkxJU0g8L2NvZGU+KSxcbiAgICAgICAgICAgIHsnICd9PHN0cm9uZz5zdG9yYWdlPC9zdHJvbmc+IGJvbmRzLCA8c3Ryb25nPmV4ZWN1dGlvbjwvc3Ryb25nPiByZWdpc3RyeSBwcm9ncmFtcywgVGFwcm9vdHsnICd9XG4gICAgICAgICAgICA8c3Ryb25nPmNyb3dkZnVuZHM8L3N0cm9uZz4sIGFuZCBvcHRpb25hbCBMaWdodG5pbmcgY2hhbm5lbHMuIEJpdGNvaW4gZW5mb3JjZXMgdGhlIEwxIGxlZ3Mgd2hlbiB0aGUgaHViIEJpdGNvaW4gc2VydmljZSBpcyB1cC5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPE1lbnUgc2Vjb25kYXJ5IHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScsIGZsZXhXcmFwOiAnd3JhcCcgfX0gYXJpYS1sYWJlbD1cIkNvbnRyYWN0cyBzZWN0aW9uc1wiPlxuICAgICAgICAgICAgPE1lbnUuSXRlbVxuICAgICAgICAgICAgICBsaW5rXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNjcm9sbFRvU2VjdGlvbignY29udHJhY3RzLWFwcGxpY2F0aW9uLWg0Jyl9XG4gICAgICAgICAgICAgIGNvbnRlbnQ9XCJBcHBsaWNhdGlvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPE1lbnUuSXRlbVxuICAgICAgICAgICAgICBsaW5rXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNjcm9sbFRvU2VjdGlvbignY29udHJhY3RzLXN0b3JhZ2UtaDQnKX1cbiAgICAgICAgICAgICAgY29udGVudD1cIlN0b3JhZ2VcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxNZW51Lkl0ZW1cbiAgICAgICAgICAgICAgbGlua1xuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzY3JvbGxUb1NlY3Rpb24oJ2NvbnRyYWN0cy1leGVjdXRpb24taDQnKX1cbiAgICAgICAgICAgICAgY29udGVudD1cIkV4ZWN1dGlvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPE1lbnUuSXRlbVxuICAgICAgICAgICAgICBsaW5rXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNjcm9sbFRvU2VjdGlvbignY29udHJhY3RzLWNyb3dkZnVuZC1oNCcpfVxuICAgICAgICAgICAgICBjb250ZW50PVwiQ3Jvd2RmdW5kc1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3VmLmJpdGNvaW5MaWdodG5pbmcgPyAoXG4gICAgICAgICAgICAgIDxNZW51Lkl0ZW1cbiAgICAgICAgICAgICAgICBsaW5rXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2Nyb2xsVG9TZWN0aW9uKCdjb250cmFjdHMtbGlnaHRuaW5nLWg0Jyl9XG4gICAgICAgICAgICAgICAgY29udGVudD1cIkxpZ2h0bmluZ1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDxNZW51Lkl0ZW1cbiAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgIHRvPVwiL3NldHRpbmdzL2FkbWluL2JlYWNvbi1mZWRlcmF0aW9uXCJcbiAgICAgICAgICAgICAgY29udGVudD1cIkJlYWNvbiBGZWRlcmF0aW9uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9NZW51PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPVwiY29udHJhY3RzLXN1bW1hcnlcIlxuICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4V3JhcDogJ3dyYXAnLCBnYXA6ICcwLjQ1ZW0nLCBtYXJnaW5Cb3R0b206ICcxZW0nIH19XG4gICAgICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxMYWJlbCBzaXplPVwic21hbGxcIiBiYXNpYz5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImZpbGUgY29kZSBvdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgQXBwbGljYXRpb24gKHNlZSBiZWxvdylcbiAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICA8TGFiZWwgc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJwdXJwbGVcIiBiYXNpYz17bG9hZGluZ30+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjbG91ZFwiIC8+XG4gICAgICAgICAgICAgIFN0b3JhZ2Uge2xvYWRpbmcgPyAn4oCmJyA6IHN0b3JhZ2VDb250cmFjdHMubGVuZ3RofVxuICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgIDxMYWJlbCBzaXplPVwic21hbGxcIiBjb2xvcj1cInRlYWxcIiBiYXNpYz17bG9hZGluZ30+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJtaWNyb2NoaXBcIiAvPlxuICAgICAgICAgICAgICBFeGVjdXRpb24ge2xvYWRpbmcgPyAn4oCmJyA6IGV4ZWN1dGlvbkNvbnRyYWN0cy5sZW5ndGh9XG4gICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgPExhYmVsIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwicmVkXCIgYmFzaWM9e2xvYWRpbmd9PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiaGVhcnRcIiAvPlxuICAgICAgICAgICAgICBDcm93ZGZ1bmRzIHtsb2FkaW5nID8gJ+KApicgOiBjcm93ZGZ1bmRDYW1wYWlnbnMubGVuZ3RofVxuICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgIHt1Zi5iaXRjb2luTGlnaHRuaW5nID8gKFxuICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJ5ZWxsb3dcIiBiYXNpYz17bG9hZGluZ30+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJvbHRcIiAvPlxuICAgICAgICAgICAgICAgIENoYW5uZWxzIHtsb2FkaW5nID8gJ+KApicgOiBsaWdodG5pbmdDaGFubmVscy5sZW5ndGh9XG4gICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgIHtsb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fSByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8TG9hZGVyIGFjdGl2ZSBpbmxpbmUgc2l6ZT1cInRpbnlcIiBzdHlsZT17eyBtYXJnaW5SaWdodDogJzAuNWVtJyB9fSAvPlxuICAgICAgICAgICAgICAgIExvYWRpbmcgY29udHJhY3QgY2F0YWxvZ3PigKZcbiAgICAgICAgICAgICAgPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGNvbG9yOiAnIzQ0NCcgfX0+XG4gICAgICAgICAgICAgICAgRmV0Y2hpbmcgc3RvcmFnZSAvIGV4ZWN1dGlvbiBjb250cmFjdHMsIGNyb3dkZnVuZHNcbiAgICAgICAgICAgICAgICB7dWYuYml0Y29pbkxpZ2h0bmluZyA/ICcsIGFuZCBMaWdodG5pbmcgY2hhbm5lbHMnIDogJyd9LiBTZWN0aW9uIGNocm9tZSBzdGF5cyB2aXNpYmxlIGJlbG93LlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmU+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5Db3VsZCBub3QgbG9hZCBjb250cmFjdHM8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJyB9fT57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuODVlbScgfX0+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdm9pZCBsb2FkQ29udHJhY3RzKCl9PlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICAgICAgUmV0cnlcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cImNvbnRyYWN0cy1hcHBsaWNhdGlvbi1oNFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEuMjVlbScgfX0+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIiBpZD1cImNvbnRyYWN0cy1hcHBsaWNhdGlvbi1oNFwiIGRpdmlkaW5nPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2l0ZW1hcFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIEFwcGxpY2F0aW9uIGNvbnRyYWN0cyAoQVJDKVxuICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogMCwgZm9udFdlaWdodDogNjAwLCBjb2xvcjogJyMzMzMnIH19PkJlYWNvbi10cmFja2VkIG5hbWVzcGFjZXM8L3A+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyM0NDQnIH19PlxuICAgICAgICAgICAgICAgIEluYm91bmQgPGNvZGU+Q09OVFJBQ1RfUFVCTElTSDwvY29kZT4gb2ZmZXJzIGJlY29tZSBwZW5kaW5nIGFwcGxpY2F0aW9uIGNvbnRyYWN0cy4gQWNjZXB0aW5nIG9uZVxuICAgICAgICAgICAgICAgIGluY2x1ZGVzIGl0IGluIHRoZSBCZWFjb24gPGNvZGU+Y29udHJhY3RzLnN0YXRlRGlnZXN0PC9jb2RlPiBmb3IgdGhlIG5leHQgZXBvY2ggYW5kIGNhbiBwcm92aXNpb24gYVxuICAgICAgICAgICAgICAgIGNvbnRyYWN0LW5hbWVzcGFjZSBzaWRlY2hhaW4uIE1hbmFnZSBjby1zaWduaW5nIGFuZCB0aGUgVGFwcm9vdCBmZWRlcmF0aW9uIHZhdWx0IG9ueycgJ31cbiAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5ncy9hZG1pbi9iZWFjb24tZmVkZXJhdGlvblwiPkJlYWNvbiBGZWRlcmF0aW9uPC9MaW5rPi5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgPFRyYWNrZWRBcHBsaWNhdGlvbkNvbnRyYWN0c1BhbmVsIGVtYmVkZGVkIC8+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cImNvbnRyYWN0cy1jcm93ZGZ1bmQtaDRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiY29udHJhY3RzLWNyb3dkZnVuZC1pbnRyb1wiPlxuICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIiBpZD1cImNvbnRyYWN0cy1jcm93ZGZ1bmQtaDRcIiBkaXZpZGluZz5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiaGVhcnQgb3V0bGluZVwiIGNvbG9yPVwicmVkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICBDcm93ZGZ1bmRzXG4gICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICA8ZGl2IGlkPVwiY29udHJhY3RzLWNyb3dkZnVuZC1pbnRyb1wiPlxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogMCwgZm9udFdlaWdodDogNjAwLCBjb2xvcjogJyMzMzMnIH19Pkh1Yi1sb2NhbCB2YXVsdCBjYW1wYWlnbnM8L3A+XG4gICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgY29sb3I6ICcjNDQ0JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgQ3Jvd2RmdW5kcyB1c2UgVGFwcm9vdCBzY3JpcHRzIG9uIHRoaXMgbm9kZSZhcG9zO3MgQml0Y29pbiBjb25uZWN0aW9uOyB0aGV5IGFyZSBsaXN0ZWQgaGVyZSBmb3IgdmlzaWJpbGl0eSBhbG9uZ3NpZGUgc3RvcmFnZSBhbmQgZXhlY3V0aW9uIGNvbnRyYWN0cy5cbiAgICAgICAgICAgICAgICAgICAgTWFuYWdlIGNhbXBhaWducywgQUNQIFBTQlQsIFBheWpvaW4sIHBheW91dCwgYW5kIHJlZnVuZCBmcm9teycgJ31cbiAgICAgICAgICAgICAgICAgICAge3VmLmJpdGNvaW5Dcm93ZGZ1bmQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pbi9jcm93ZGZ1bmRzXCI+Q3Jvd2RmdW5kczwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Dcm93ZGZ1bmRzIChlbmFibGUgPHN0cm9uZz5CaXRjb2luIOKAlCBDcm93ZGZ1bmQ8L3N0cm9uZz4gaW4gQWRtaW4g4oaSIEZlYXR1cmUgdmlzaWJpbGl0eSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICl9LlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxMaXN0IGRpdmlkZWQgcmVsYXhlZCBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxLjI1ZW0nIH19PlxuICAgICAgICAgICAgICAgIHtjcm93ZGZ1bmRDYW1wYWlnbnMubWFwKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghcm93KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNpZCA9IFN0cmluZyhyb3cuY2FtcGFpZ25JZCB8fCAnJykudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSByb3cudGl0bGUgfHwgY2lkIHx8ICdDYW1wYWlnbic7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8TGlzdC5JdGVtIGtleT17Y2lkIHx8IHRpdGxlfT5cbiAgICAgICAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3QuSGVhZGVyIHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt1Zi5iaXRjb2luQ3Jvd2RmdW5kID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kc1wiPnt0aXRsZX08L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3RpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJtaW5pXCIgY29sb3I9XCJyZWRcIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4xNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiaGVhcnRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyb3dkZnVuZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2NpZCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuOGVtJywgY29sb3I6ICcjNjY2JyB9fSB0aXRsZT1cIkNhbXBhaWduIGlkXCI+e2NpZH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0LkRlc2NyaXB0aW9uIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtyb3cuYWRkcmVzcyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PlZhdWx0IDxjb2RlPntyb3cuYWRkcmVzc308L2NvZGU+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWYXVsdCBhZGRyZXNzIHBlbmRpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtyb3cuZ29hbFNhdHMgIT0gbnVsbCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nIH19PsK3IGdvYWwge2Zvcm1hdFNhdHNEaXNwbGF5KHJvdy5nb2FsU2F0cyl9IHNhdHM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAge2Nyb3dkZnVuZENhbXBhaWducy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPExpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8TGlzdC5EZXNjcmlwdGlvbiBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgTm8gVGFwcm9vdCBjcm93ZGZ1bmQgY2FtcGFpZ25zIG9uIHRoaXMgaHViIHlldC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt1Zi5iaXRjb2luQ3Jvd2RmdW5kID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8PiBPcGVuIDxMaW5rIHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kc1wiPkNyb3dkZnVuZHM8L0xpbms+IHRvIGNyZWF0ZSBvbmUuPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8PiBFbmFibGUgPHN0cm9uZz5CaXRjb2luIOKAlCBDcm93ZGZ1bmQ8L3N0cm9uZz4gaW4gQWRtaW4g4oaSIEZlYXR1cmUgdmlzaWJpbGl0eSB0byBhZGQgY2FtcGFpZ25zLjwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L0xpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9MaXN0PlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiY29udHJhY3RzLXN0b3JhZ2UtaDRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiY29udHJhY3RzLXN0b3JhZ2UtaW50cm9cIj5cbiAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgaWQ9XCJjb250cmFjdHMtc3RvcmFnZS1oNFwiPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjbG91ZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgU3RvcmFnZSBDb250cmFjdHNcbiAgICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICAgIDxkaXYgaWQ9XCJjb250cmFjdHMtc3RvcmFnZS1pbnRyb1wiPlxuICAgICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAwLCBmb250V2VpZ2h0OiA2MDAsIGNvbG9yOiAnIzMzMycgfX0+TDEgYm9uZCB2cyBleGVjdXRpb24gYW5jaG9yPC9wPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyM0NDQnIH19PlxuICAgICAgICAgICAgICAgICAgU3RvcmFnZSBjb250cmFjdHMgYXJlIGNyZWF0ZWQgYWZ0ZXIgYSB2ZXJpZmllZCBwYXltZW50IHRvIHRoZSBkaXN0cmlidXRlIGludm9pY2UgKDxjb2RlPkNyZWF0ZURpc3RyaWJ1dGVJbnZvaWNlPC9jb2RlPiDihpIgcGF5IOKGkiA8Y29kZT5DcmVhdGVTdG9yYWdlQ29udHJhY3Q8L2NvZGU+KS5cbiAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbiBjb250cmFjdHMgdXNlIGFuIEwxIHJlZ2lzdHJ5IGZlZSB3aGVuIEJpdGNvaW4gaXMgZW5hYmxlZCAoc2VlIGJlbG93KTsgYWZ0ZXIgcHVibGlzaCB5b3UgY2FuIHJ1biBvbiB0aGUgaHViIGFuZCBvbiByZWd0ZXN0IGFuY2hvciB0aGUgcnVuIGNvbW1pdG1lbnQgKE9QX1JFVFVSTikgd2l0aCBhbiBhZG1pbiB0b2tlbiBmcm9tIHRoZSBjb250cmFjdCBkZXRhaWwgcGFnZS5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJywgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC41ZW0nLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45ZW0nIH19PkZpbHRlcjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbkdyb3VwIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlPXtmaWx0ZXIgPT09IEZJTFRFUl9BTEx9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEZpbHRlcihGSUxURVJfQUxMKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQWxsXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZT17ZmlsdGVyID09PSBGSUxURVJfTkVXfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRGaWx0ZXIoRklMVEVSX05FVyl9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRmlyc3QgY29weSBib25kZWRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBOZXdcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlPXtmaWx0ZXIgPT09IEZJTFRFUl9QQVJUSUFMfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRGaWx0ZXIoRklMVEVSX1BBUlRJQUwpfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlNvbWUgY29waWVzIGJvbmRlZCwgbm90IGFsbFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIFBhcnRpYWxcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlPXtmaWx0ZXIgPT09IEZJTFRFUl9DT01QTEVURX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RmlsdGVyKEZJTFRFUl9DT01QTEVURSl9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQWxsIGRlc2lyZWQgY29waWVzIGJvbmRlZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIENvbXBsZXRlXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L0J1dHRvbkdyb3VwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPExpc3QgZGl2aWRlZCByZWxheGVkPlxuICAgICAgICAgICAgICB7c3RvcmFnZUNvbnRyYWN0c1NsaWNlLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYyB8fCAhYy5pZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgY3JlYXRlZCA9IGMuY3JlYXRlZCA/IG5ldyBEYXRlKGMuY3JlYXRlZCkudG9Mb2NhbGVTdHJpbmcoKSA6ICcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvY0NvbnRyYWN0cyA9IGNvbnRyYWN0c0J5RG9jW2MuZG9jdW1lbnRdIHx8IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjY2VwdGVkQ291bnQgPSBkb2NDb250cmFjdHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlc2lyZWQgPSBNYXRoLm1heCgxLCBOdW1iZXIoYy5kZXNpcmVkQ29waWVzIHx8IDEpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhY2NlcHRlZENvdW50ID49IGRlc2lyZWQgPyAnY29tcGxldGUnIDogYWNjZXB0ZWRDb3VudCA9PT0gMSA/ICduZXcnIDogJ3BhcnRpYWwnO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0xhYmVsID0gc3RhdHVzID09PSAnY29tcGxldGUnID8gJ0NvbXBsZXRlJyA6IHN0YXR1cyA9PT0gJ25ldycgPyAnTmV3JyA6ICdQYXJ0aWFsJztcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0dXNDb2xvciA9IHN0YXR1cyA9PT0gJ2NvbXBsZXRlJyA/ICdncmVlbicgOiBzdGF0dXMgPT09ICduZXcnID8gJ2JsdWUnIDogJ29yYW5nZSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxMaXN0Lkl0ZW0ga2V5PXtjLmlkfT5cbiAgICAgICAgICAgICAgICAgICAgPExpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGluayB0bz17YC9jb250cmFjdHMvJHtlbmNvZGVVUklDb21wb25lbnQoYy5pZCl9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjLm5hbWUgfHwgYy5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwibWluaVwiIGNvbG9yPVwicHVycGxlXCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNsb3VkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwibWluaVwiIGNvbG9yPXtzdGF0dXNDb2xvcn0gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuMjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0dXNMYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZGVzaXJlZCA+IDEgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cIm1pbmlcIiBiYXNpYyBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4yNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YWNjZXB0ZWRDb3VudH0ve2Rlc2lyZWR9IGNvcGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxMaXN0LkRlc2NyaXB0aW9uIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Yy5kb2N1bWVudCA/IGBEb2N1bWVudDogJHtjLmRvY3VtZW50fWAgOiAnRG9jdW1lbnQgc3RvcmFnZSBjb250cmFjdCd9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y3JlYXRlZCA/IGAg4oCUICR7Y3JlYXRlZH1gIDogJyd9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Yy50eGlkICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dWYuYml0Y29pbkV4cGxvcmVyID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBzaXplPVwibWluaVwiIGFzPXtMaW5rfSB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChjLnR4aWQpfWB9IGJhc2ljPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYml0Y29pblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nIH19IHRpdGxlPVwiRW5hYmxlIEJpdGNvaW4g4oCUIEJsb2NrICYgdHJhbnNhY3Rpb24gZGV0YWlsIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IHRvIG9wZW4gdGhlIHR4IHZpZXdlclwiPntjLnR4aWR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L0xpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICB7ZmlsdGVyZWRDb250cmFjdHMubGVuZ3RoID09PSAwICYmICFsb2FkaW5nICYmICFlcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgIDxMaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxMaXN0LkRlc2NyaXB0aW9uIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAge3N0b3JhZ2VDb250cmFjdHMubGVuZ3RoID09PSAwICYmIGV4ZWN1dGlvbkNvbnRyYWN0cy5sZW5ndGggPT09IDAgJiYgY3Jvd2RmdW5kQ2FtcGFpZ25zLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnTm8gY29udHJhY3RzIHlldC4nXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBObyBzdG9yYWdlIGNvbnRyYWN0cyBtYXRjaCBcIiR7ZmlsdGVyfVwiLmB9XG4gICAgICAgICAgICAgICAgICAgIDwvTGlzdC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9MaXN0PlxuICAgICAgICAgICAge3N0b3JhZ2VMaXN0VG90YWwgPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgICAgICAgICAgICAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgICAgICAgICAgICAgICAgZ2FwOiAnMC41ZW0nLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnMC43NWVtJ1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuODhlbScgfX0+XG4gICAgICAgICAgICAgICAgICBTaG93aW5nIHtzdG9yYWdlUmFuZ2VGcm9tfeKAk3tzdG9yYWdlUmFuZ2VUb30gb2Yge3N0b3JhZ2VMaXN0VG90YWx9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxIdWJQYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgICBhY3RpdmVQYWdlPXtzdG9yYWdlTGlzdEFjdGl2ZVBhZ2V9XG4gICAgICAgICAgICAgICAgICB0b3RhbFBhZ2VzPXtzdG9yYWdlVG90YWxQYWdlc31cbiAgICAgICAgICAgICAgICAgIG9uUGFnZUNoYW5nZT17KGUsIGQpID0+IHNldFN0b3JhZ2VMaXN0UGFnZShkLmFjdGl2ZVBhZ2UpfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6IDAsIGZsZXg6ICcxIDEgYXV0bycsIG1pbldpZHRoOiAwIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiY29udHJhY3RzLWV4ZWN1dGlvbi1oNFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJjb250cmFjdHMtZXhlY3V0aW9uLWRlc2NcIj5cbiAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgZGl2aWRpbmcgaWQ9XCJjb250cmFjdHMtZXhlY3V0aW9uLWg0XCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMS41ZW0nIH19PlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJtaWNyb2NoaXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIEV4ZWN1dGlvbiBjb250cmFjdHNcbiAgICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICAgIDxwIGlkPVwiY29udHJhY3RzLWV4ZWN1dGlvbi1kZXNjXCIgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPlJlZ2lzdHJ5Ojwvc3Ryb25nPiBleGVjdXRpb24gY29udHJhY3RzIGFyZSBsaXN0ZWQgaHViLXdpZGUuIFdoZW4gdGhpcyBodWImYXBvcztzIEJpdGNvaW4gc2VydmljZSBpcyBhdmFpbGFibGUsIHB1Ymxpc2hpbmcgcmVxdWlyZXMgYSByZWFsIEwxIHBheW1lbnQ6IHJlcXVlc3QgYSA8Y29kZT5DcmVhdGVFeGVjdXRpb25SZWdpc3RyeUludm9pY2U8L2NvZGU+IGFkZHJlc3MsIHBheSBhdCBsZWFzdCB0aGUgcXVvdGVkIHNhdHMsIHRoZW4gc3VibWl0IHRoZSBmdW5kaW5nIDxjb2RlPnR4aWQ8L2NvZGU+IHdpdGggPGNvZGU+Q3JlYXRlRXhlY3V0aW9uQ29udHJhY3Q8L2NvZGU+IChzYW1lIDxjb2RlPlBPU1QgL3NlcnZpY2VzL3JwYzwvY29kZT4gc3VyZmFjZSBhcyA8c3Ryb25nPlJ1biBvbiBodWI8L3N0cm9uZz4gb24gdGhlIGRldGFpbCBwYWdlKS5cbiAgICAgICAgICAgICAgICBXaXRob3V0IEJpdGNvaW4gKGxvY2FsIGRldiksIHRoZSBodWIgc3RpbGwgYWNjZXB0cyBmcmVlIHJlZ2lzdHJhdGlvbiBzbyB5b3UgY2FuIGl0ZXJhdGUgb24gcHJvZ3JhbXMuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5MMSwgZGV0ZXJtaW5pc3RpYyBydW5zLCBhbmQgbmV0d29yayBzdGF0ZTwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGNvbG9yOiAnIzQ0NCcgfX0+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPlJlZ2lzdHJ5PC9zdHJvbmc+IHRpZXMgYSA8Y29kZT5wcm9ncmFtRGlnZXN0PC9jb2RlPiB0byBhbiBvbi1jaGFpbiBwYXltZW50IHdoZW4gQml0Y29pbiBpcyBlbmFibGVkLlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz4gUnVuczwvc3Ryb25nPiBwcm9kdWNlIGEgPGNvZGU+cnVuQ29tbWl0bWVudEhleDwvY29kZT4gYW55b25lIGNhbiByZS1jaGVjayAoYnJvd3NlciB2cyBodWIpOyByZWd0ZXN0IGNhbiA8c3Ryb25nPk9QX1JFVFVSTjwvc3Ryb25nPi1hbmNob3IgdGhhdCBkaWdlc3QuXG4gICAgICAgICAgICAgICAgICBUaGUgaHViIDxzdHJvbmc+QmVhY29uPC9zdHJvbmc+IHJlY29yZHMgZXBvY2hzIGFnYWluc3QgQml0Y29pbiBibG9jayBoYXNoL2hlaWdodDsgPHN0cm9uZz5zaWRlY2hhaW48L3N0cm9uZz4gc3RhdGUgY2FuIGFkdmFuY2UgdmlhIHBhdGNoZXMgYW5kIGZvbGxvdyBMMSByZW9yZ3MuXG4gICAgICAgICAgICAgICAgICBSZXByb2R1Y2libGUgZXBvY2ggd2l0bmVzc2VzLCA8c3Ryb25nPkJlYWNvbiBGZWRlcmF0aW9uPC9zdHJvbmc+IGRvY3MsIGFuZCBsaXZlIG1hbmlmZXN0IC8gZXBvY2ggSlNPTiBsaW5rcyBhcmUgaW4gdGhlIGZlZGVyYXRpb24gcGFuZWwgYmVsb3cgKGF2b2lkIGR1cGxpY2F0aW5nIHRoZSBzYW1lIHNob3J0Y3V0cyBoZXJlKS5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAge3VmLnNpZGVjaGFpbiA/IDxEaXN0cmlidXRlZEZlZGVyYXRpb25QYW5lbCAvPiA6IG51bGx9XG4gICAgICAgICAgICAgIHtleGVjQml0Y29pbkxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5DaGVja2luZyBCaXRjb2luPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyM0NDQnIH19PlxuICAgICAgICAgICAgICAgICAgICBXYWl0aW5nIGZvciA8Y29kZT4vc2VydmljZXMvYml0Y29pbjwvY29kZT4gc28gd2Uga25vdyB3aGV0aGVyIHJlZ2lzdHJ5IHB1Ymxpc2ggcmVxdWlyZXMgYW4gTDEgaW52b2ljZSBhbmQgdHhpZC5cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHshZXhlY0JpdGNvaW5Mb2FkaW5nICYmIGV4ZWNCaXRjb2luT24gJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5MMS1iYWNrZWQgcmVnaXN0cnkgYWN0aXZlPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyM0NDQnIH19PlxuICAgICAgICAgICAgICAgICAgICBVc2UgPHN0cm9uZz5SZXF1ZXN0IHJlZ2lzdHJ5IGludm9pY2U8L3N0cm9uZz4sIHBheSBvbi1jaGFpbiAoZS5nLiBmcm9teycgJ31cbiAgICAgICAgICAgICAgICAgICAge3VmLmJpdGNvaW5QYXltZW50cyA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9wYXltZW50c1wiPlBheW1lbnRzPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlBheW1lbnRzIChlbmFibGUgQml0Y29pbiDigJQgUGF5bWVudHMgaW4gQWRtaW4g4oaSIEZlYXR1cmUgdmlzaWJpbGl0eSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIHsnICd9d2l0aCBhZG1pbiB0b2tlbiBvbiByZWd0ZXN0KSwgdGhlbiBwYXN0ZSB0aGUgdHhpZCBhbmQgPHN0cm9uZz5QdWJsaXNoIHRvIHJlZ2lzdHJ5PC9zdHJvbmc+LlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgeyFoYXNBZG1pbiA/IChcbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC41ZW0gMCAwJywgY29sb3I6ICcjNDQ0JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGJyb3dzZXIgaXMgY3VycmVudGx5IGluIG5vbi1hZG1pbiBtb2RlLCBzbyBIdWItd2FsbGV0IGZ1bmRpbmcgc3RlcHMgYXJlIGJsb2NrZWQuXG4gICAgICAgICAgICAgICAgICAgICAgS2VlcCB1c2luZyBpbnZvaWNlICsgdHhpZCBmbG93IHdpdGggYW4gb3BlcmF0b3Igd2FsbGV0LCBvciBsb2FkIHRoZSBzZXR1cCB0b2tlbiBmaXJzdC5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7IWV4ZWNCaXRjb2luTG9hZGluZyAmJiAhZXhlY0JpdGNvaW5PbiAmJiAoXG4gICAgICAgICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPk5vIEJpdGNvaW4gc2VydmljZTwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgY29sb3I6ICcjNDQ0JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgUHVibGlzaGluZyBza2lwcyBMMSB2ZXJpZmljYXRpb24gdW50aWwgdGhlIGh1YiBleHBvc2VzIGEgd29ya2luZyA8Y29kZT4vc2VydmljZXMvYml0Y29pbjwvY29kZT4gY29ubmVjdGlvbi5cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtleGVjRmVlZGJhY2sgJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgICAgICBwb3NpdGl2ZT17ISFleGVjRmVlZGJhY2sucG9zaXRpdmV9XG4gICAgICAgICAgICAgICAgICBuZWdhdGl2ZT17ISFleGVjRmVlZGJhY2submVnYXRpdmV9XG4gICAgICAgICAgICAgICAgICBpbmZvPXshIWV4ZWNGZWVkYmFjay5pbmZvfVxuICAgICAgICAgICAgICAgICAgY29udGVudD17ZXhlY0ZlZWRiYWNrLmNvbnRlbnR9XG4gICAgICAgICAgICAgICAgICBvbkRpc21pc3M9eygpID0+IHNldEV4ZWNGZWVkYmFjayhudWxsKX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Rm9ybVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEuMjVlbScgfX1cbiAgICAgICAgICAgICAgICBvblN1Ym1pdD17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgIHZvaWQgc3VibWl0RXhlY3V0aW9uQ29udHJhY3QoKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2V4ZWNCaXRjb2luT24gJiYgKFxuICAgICAgICAgICAgICAgICAgPFN0ZXAuR3JvdXAgc2l6ZT1cInNtYWxsXCIgZmx1aWQgdW5zdGFja2FibGUgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJywgb3ZlcmZsb3dYOiAnYXV0bycgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxTdGVwIGNvbXBsZXRlZD17cmVnaXN0cnlTdGVwID4gMH0gYWN0aXZlPXtyZWdpc3RyeVN0ZXAgPT09IDB9PlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJmaWxlIGNvZGUgb3V0bGluZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFN0ZXAuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGVwLlRpdGxlPlByb2dyYW08L1N0ZXAuVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RlcC5EZXNjcmlwdGlvbj5FZGl0IEpTT04sIHRoZW4gcmVxdWVzdCBpbnZvaWNlPC9TdGVwLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU3RlcC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8L1N0ZXA+XG4gICAgICAgICAgICAgICAgICAgIDxTdGVwIGNvbXBsZXRlZD17cmVnaXN0cnlTdGVwID4gMX0gYWN0aXZlPXtyZWdpc3RyeVN0ZXAgPT09IDF9PlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJiaXRjb2luXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U3RlcC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0ZXAuVGl0bGU+UGF5IEwxPC9TdGVwLlRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0ZXAuRGVzY3JpcHRpb24+RnVuZCB0aGUgcmVnaXN0cnkgYWRkcmVzczwvU3RlcC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1N0ZXAuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9TdGVwPlxuICAgICAgICAgICAgICAgICAgICA8U3RlcCBjb21wbGV0ZWQ9e2ZhbHNlfSBhY3RpdmU9e3JlZ2lzdHJ5U3RlcCA9PT0gMn0+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNoZWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U3RlcC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0ZXAuVGl0bGU+UHVibGlzaDwvU3RlcC5UaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTdGVwLkRlc2NyaXB0aW9uPlN1Ym1pdCB0eGlkIHRvIHRoZSBodWI8L1N0ZXAuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TdGVwLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvU3RlcD5cbiAgICAgICAgICAgICAgICAgIDwvU3RlcC5Hcm91cD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJmYWJyaWMtZXhlYy1uYW1lXCI+TmFtZSAob3B0aW9uYWwpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiZmFicmljLWV4ZWMtbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtub3JtYWxpemVPcHRpb25hbElucHV0VGV4dChleGVjTmFtZSl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgZCkgPT4gc2V0RXhlY05hbWUobm9ybWFsaXplT3B0aW9uYWxJbnB1dFRleHQoZCAmJiBkLnZhbHVlKSl9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBQaW5nIGRlbW9cIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImZhYnJpYy1leGVjLXByb2dyYW0tanNvblwiPlByb2dyYW0gKEpTT04pPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxUZXh0QXJlYVxuICAgICAgICAgICAgICAgICAgICBpZD1cImZhYnJpYy1leGVjLXByb2dyYW0tanNvblwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtleGVjSnNvbn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCBkKSA9PiBzZXRFeGVjSnNvbihkLnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgcm93cz17MTR9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnLCBmb250U2l6ZTogJzAuODVlbScgfX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIHtleGVjQml0Y29pbk9uICYmIChcbiAgICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImZhYnJpYy1leGVjLXJlZ2lzdHJ5LWZlZS1zYXRzXCI+UmVnaXN0cnkgZmVlIChzYXRzKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJmYWJyaWMtZXhlYy1yZWdpc3RyeS1mZWUtc2F0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgbWluPXsxfVxuICAgICAgICAgICAgICAgICAgICAgIHN0ZXA9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2V4ZWNBbW91bnRTYXRzfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgZCkgPT4gc2V0RXhlY0Ftb3VudFNhdHMoZC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e1N0cmluZyhERUZBVUxUX1JFR0lTVFJZX0ZFRV9TQVRTKX1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRXhlY3V0aW9uIHJlZ2lzdHJ5IGludm9pY2UgYW1vdW50IGluIHNhdG9zaGlzXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtleGVjQml0Y29pbk9uICYmIGV4ZWNSZWdpc3RyeUludm9pY2UgJiYgKFxuICAgICAgICAgICAgICAgICAgPE1lc3NhZ2Ugc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPlBlbmRpbmcgcmVnaXN0cnkgaW52b2ljZTwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyM0NDQnIH19PlxuICAgICAgICAgICAgICAgICAgICAgIFBheSBhdCBsZWFzdCB0aGUgcXVvdGVkIHNhdHMgdG8gdGhlIGh1YiBhZGRyZXNzIGJlbG93LCB0aGVuIHBhc3RlIHRoZSBmdW5kaW5nIHRyYW5zYWN0aW9uIGlkLlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNWVtIDAgMCcsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5QYXkg4omlPC9zdHJvbmc+IHtmb3JtYXRTYXRzRGlzcGxheShleGVjUmVnaXN0cnlJbnZvaWNlLmFtb3VudFNhdHMpfSBzYXRzIHRveycgJ31cbiAgICAgICAgICAgICAgICAgICAgICA8Y29kZT57ZXhlY1JlZ2lzdHJ5SW52b2ljZS5hZGRyZXNzfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICB7JyAnfShuZXR3b3JrOiB7U3RyaW5nKGV4ZWNSZWdpc3RyeUludm9pY2UubmV0d29yayB8fCAn4oCUJykudHJpbSgpIHx8ICfigJQnfSkuXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScsIGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17Y29weVJlZ2lzdHJ5SW52b2ljZUFkZHJlc3N9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNvcHkgcGF5bWVudCBhZGRyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDb3B5IHJlZ2lzdHJ5IGludm9pY2UgcGF5bWVudCBhZGRyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY29weSBvdXRsaW5lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICB7cmVnaXN0cnlBZGRyZXNzQ29waWVkICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJywgY29sb3I6ICcjMjc2NzQ5JyB9fT5Db3BpZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNzVlbSAwIDAnLCBmb250U2l6ZTogJzAuODVlbScsIGNvbG9yOiAnIzU1NScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbSBkaWdlc3Q6IDxjb2RlIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e2V4ZWNSZWdpc3RyeUludm9pY2UucHJvZ3JhbURpZ2VzdH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC41ZW0gMCAwJywgZm9udFNpemU6ICcwLjhlbScsIGNvbG9yOiAnIzc3NycgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGVkaXQgdGhlIHByb2dyYW0gSlNPTiBhZnRlciB0aGlzIGludm9pY2UsIHJlcXVlc3QgYSBuZXcgaW52b2ljZSBzbyB0aGUgZGlnZXN0IHN0aWxsIG1hdGNoZXMuXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtleGVjQml0Y29pbk9uICYmIChcbiAgICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImZhYnJpYy1leGVjLXJlZ2lzdHJ5LXR4aWRcIj5GdW5kaW5nIHR4aWQgKGFmdGVyIHlvdSBwYXkgdGhlIGludm9pY2UpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm0uSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImZhYnJpYy1leGVjLXJlZ2lzdHJ5LXR4aWRcIlxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtub3JtYWxpemVPcHRpb25hbElucHV0VGV4dChleGVjVHhpZCl9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCBkKSA9PiBzZXRFeGVjVHhpZChub3JtYWxpemVPcHRpb25hbElucHV0VGV4dChkICYmIGQudmFsdWUpKX1cbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjY0LWNoYXJhY3RlciB0cmFuc2FjdGlvbiBpZFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC41ZW0nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgIHtleGVjQml0Y29pbk9uICYmIChcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiYmx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZXhlY0ludm9pY2VCdXN5fVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtleGVjSW52b2ljZUJ1c3kgfHwgZXhlY0J1c3kgfHwgZXhlY0JpdGNvaW5Mb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtleGVjQml0Y29pbkxvYWRpbmcgPyAnV2FpdCB1bnRpbCBCaXRjb2luIHN0YXR1cyBpcyBrbm93bicgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCByZXF1ZXN0RXhlY3V0aW9uUmVnaXN0cnlJbnZvaWNlKCl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYml0Y29pblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdCByZWdpc3RyeSBpbnZvaWNlXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZXhlY0J1c3l9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtleGVjQnVzeSB8fCBleGVjSW52b2ljZUJ1c3kgfHwgZXhlY0JpdGNvaW5Mb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17ZXhlY0JpdGNvaW5Mb2FkaW5nID8gJ1dhaXQgdW50aWwgQml0Y29pbiBzdGF0dXMgaXMga25vd24nIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicGx1c1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIHtleGVjQml0Y29pbk9uID8gJ1B1Ymxpc2ggdG8gcmVnaXN0cnknIDogJ1B1Ymxpc2ggdG8gcmVnaXN0cnkgKG5vIEwxKSd9XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtleGVjQnVzeSB8fCBleGVjSW52b2ljZUJ1c3l9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRFeGVjSnNvbihERUZBVUxUX0VNUFRZX0VYRUNfUFJPR1JBTSk7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RXhlY0ZlZWRiYWNrKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldEV4ZWNSZWdpc3RyeUludm9pY2UobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RXhlY1R4aWQoJycpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldFJlZ2lzdHJ5QWRkcmVzc0NvcGllZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJ1bmRvXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgUmVzZXQgcHJvZ3JhbSB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgICAgPExpc3QgZGl2aWRlZCByZWxheGVkPlxuICAgICAgICAgICAgICAgIHtleGVjdXRpb25Db250cmFjdHNTbGljZS5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghYyB8fCAhYy5pZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjcmVhdGVkID0gYy5jcmVhdGVkID8gbmV3IERhdGUoYy5jcmVhdGVkKS50b0xvY2FsZVN0cmluZygpIDogJyc7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdGVwQ291bnQgPSBjLnByb2dyYW0gJiYgQXJyYXkuaXNBcnJheShjLnByb2dyYW0uc3RlcHMpID8gYy5wcm9ncmFtLnN0ZXBzLmxlbmd0aCA6IG51bGw7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdGVwU3VtbWFyeSA9IHN0ZXBDb3VudCAhPSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gYCR7c3RlcENvdW50fSBzdGVwJHtzdGVwQ291bnQgPT09IDEgPyAnJyA6ICdzJ31gXG4gICAgICAgICAgICAgICAgICAgIDogJ1Byb2dyYW0nO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPExpc3QuSXRlbSBrZXk9e2MuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxMaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXIgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4V3JhcDogJ3dyYXAnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89e2AvY29udHJhY3RzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGMuaWQpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjLm5hbWUgfHwgYy5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cIm1pbmlcIiBjb2xvcj1cInRlYWxcIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4xNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY29kZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhlY3V0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcz17TGlua31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bz17YC9jb250cmFjdHMvJHtlbmNvZGVVUklDb21wb25lbnQoYy5pZCl9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIk9wZW4gZGV0YWlsIOKAlCBydW4gbG9jYWxseSBvciBvbiBodWJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImFuZ2xlIGRvdWJsZSByaWdodFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlzdC5EZXNjcmlwdGlvbiBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RlcFN1bW1hcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVkID8gYCDigJQgJHtjcmVhdGVkfWAgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2MudHhpZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1Zi5iaXRjb2luRXhwbG9yZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG89e2Avc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoYy50eGlkKX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJPcGVuIHJlZ2lzdHJ5IGZ1bmRpbmcgdHJhbnNhY3Rpb24gb24gdGhpcyBodWJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nIH19IHRpdGxlPVwiRW5hYmxlIEJpdGNvaW4g4oCUIEJsb2NrICYgdHJhbnNhY3Rpb24gZGV0YWlsIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IHRvIG9wZW4gdGhlIHR4IHZpZXdlclwiPntjLnR4aWR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0xpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICB7ZXhlY3V0aW9uQ29udHJhY3RzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgICA8TGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgIDxMaXN0LkRlc2NyaXB0aW9uIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICBObyBleGVjdXRpb24gY29udHJhY3RzIG9uIHRoaXMgaHViIHlldC4gUHVibGlzaCBmcm9tIHRoZSBmb3JtIGFib3ZlXG4gICAgICAgICAgICAgICAgICAgICAgICB7ZXhlY0JpdGNvaW5PbiA/ICcgKHJlZ2lzdHJ5IGludm9pY2UgKyBmdW5kaW5nIHR4aWQgd2hlbiBCaXRjb2luIGlzIG9uKScgOiAnJ30uXG4gICAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L0xpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvTGlzdD5cbiAgICAgICAgICAgICAge2V4ZWN1dGlvbkxpc3RUb3RhbCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgICAgICAgICAgICAgICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgICAgICAgICAgICAgICAgIGdhcDogJzAuNWVtJyxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnMC43NWVtJ1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuODhlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgIFNob3dpbmcge2V4ZWN1dGlvblJhbmdlRnJvbX3igJN7ZXhlY3V0aW9uUmFuZ2VUb30gb2Yge2V4ZWN1dGlvbkxpc3RUb3RhbH1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxIdWJQYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZVBhZ2U9e2V4ZWN1dGlvbkxpc3RBY3RpdmVQYWdlfVxuICAgICAgICAgICAgICAgICAgICB0b3RhbFBhZ2VzPXtleGVjdXRpb25Ub3RhbFBhZ2VzfVxuICAgICAgICAgICAgICAgICAgICBvblBhZ2VDaGFuZ2U9eyhlLCBkKSA9PiBzZXRFeGVjdXRpb25MaXN0UGFnZShkLmFjdGl2ZVBhZ2UpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17bG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAwLCBmbGV4OiAnMSAxIGF1dG8nLCBtaW5XaWR0aDogMCB9fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIHt1Zi5iaXRjb2luTGlnaHRuaW5nID8gKFxuICAgICAgICAgICAgICA8c2VjdGlvbiBhcmlhLWxhYmVsbGVkYnk9XCJjb250cmFjdHMtbGlnaHRuaW5nLWg0XCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnMS41ZW0nLFxuICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogJzFlbScsXG4gICAgICAgICAgICAgICAgICBib3JkZXJUb3A6ICcxcHggc29saWQgcmdiYSgzNCwgMzYsIDM4LCAwLjE1KScsXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgICAgICAgICAgICAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgICAgICAgICAgICAgICAgZ2FwOiAnMC41ZW0nXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIGlkPVwiY29udHJhY3RzLWxpZ2h0bmluZy1oNFwiIHN0eWxlPXt7IG1hcmdpbjogMCB9fSBkaXZpZGluZz17ZmFsc2V9PlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJvbHRcIiBjb2xvcj1cInllbGxvd1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+TGlnaHRuaW5nIENoYW5uZWxzPC9IZWFkZXIuQ29udGVudD5cbiAgICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgdGl0bGU9XCJPcGVuIEJpdGNvaW4gLyBMaWdodG5pbmcgZGFzaGJvYXJkXCI+XG4gICAgICAgICAgICAgICAgICBNYW5hZ2VcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIHtsaWdodG5pbmdDaGFubmVscy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5ObyBMaWdodG5pbmcgY2hhbm5lbHMuIE9wZW4gYSBjaGFubmVsIGZyb20gdGhlIEJpdGNvaW4gcGFnZS48L3A+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFRhYmxlIGNlbGxlZCBjb21wYWN0IHNpemU9J3NtYWxsJz5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+UGVlcjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5TdGF0ZTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5DYXBhY2l0eTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5PdXIgYmFsYW5jZTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5TaG9ydCBjaGFubmVsIElEPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHtsaWdodG5pbmdDaGFubmVscy5tYXAoKGNoLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaElkID0gY2guY2hhbm5lbF9pZCB8fCBjaC5mdW5kaW5nX3R4aWQgfHwgaWR4O1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvVXJsID0gYC9zZXJ2aWNlcy9iaXRjb2luL2NoYW5uZWxzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGNoSWQpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjaElkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjdXJzb3I6IHVmLmJpdGNvaW5MaWdodG5pbmcgPyAncG9pbnRlcicgOiAnZGVmYXVsdCcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4geyBpZiAodWYuYml0Y29pbkxpZ2h0bmluZykgbmF2aWdhdGUodG9VcmwpOyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuODVlbScgfX0+e3RyaW1IYXNoKGNoLnBlZXJfaWQgfHwgY2guZnVuZGluZ190eGlkIHx8ICcnKX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2NoLnN0YXRlIHx8ICfigJQnfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NoLmFtb3VudF9tc2F0ICE9IG51bGwgPyBgJHtmb3JtYXRTYXRzRGlzcGxheShNYXRoLmZsb29yKE51bWJlcihjaC5hbW91bnRfbXNhdCkgLyAxMDAwKSl9IHNhdHNgIDogKGNoLmNoYW5uZWxfc2F0ICE9IG51bGwgPyBgJHtmb3JtYXRTYXRzRGlzcGxheShjaC5jaGFubmVsX3NhdCl9IHNhdHNgIDogJ+KAlCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjaC5vdXJfYW1vdW50X21zYXQgIT0gbnVsbCA/IGAke2Zvcm1hdFNhdHNEaXNwbGF5KE1hdGguZmxvb3IoTnVtYmVyKGNoLm91cl9hbW91bnRfbXNhdCkgLyAxMDAwKSl9IHNhdHNgIDogJ+KAlCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjhlbScgfX0+e2NoLnNob3J0X2NoYW5uZWxfaWQgfHwgJ+KAlCd9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgIDwvU2VnbWVudD5cbiAgICA8L2ZhYnJpYy1jb250cmFjdHM+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29udHJhY3RzSG9tZTtcblxuIl0sIm5hbWVzIjpbIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIm93bktleXMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwiX3R5cGVvZiIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3JlZ2VuZXJhdG9yIiwidG9TdHJpbmdUYWciLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsInAiLCJ5IiwiRyIsInYiLCJkIiwiYmluZCIsImwiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfbmV4dCIsIl90aHJvdyIsImNvbnN0cnVjdG9yIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJMaW5rIiwidXNlTmF2aWdhdGUiLCJfcmVxdWlyZTIiLCJTZWdtZW50IiwiSGVhZGVyIiwiTGlzdCIsIkljb24iLCJMYWJlbCIsIkxvYWRlciIsIkJ1dHRvbiIsIkJ1dHRvbkdyb3VwIiwiVGFibGUiLCJGb3JtIiwiVGV4dEFyZWEiLCJNZXNzYWdlIiwiU3RlcCIsIk1lbnUiLCJfcmVxdWlyZTMiLCJmZXRjaExpZ2h0bmluZ0NoYW5uZWxzIiwibG9hZFVwc3RyZWFtU2V0dGluZ3MiLCJmZXRjaENyb3dkZnVuZGluZ0NhbXBhaWducyIsIl9yZXF1aXJlNCIsImZvcm1hdFNhdHNEaXNwbGF5IiwiX3JlcXVpcmU1IiwiaHViSnNvblJwYyIsIl9yZXF1aXJlNiIsImRlc2NyaWJlSHViUnBjRmFpbHVyZSIsIkRpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsIiwiVHJhY2tlZEFwcGxpY2F0aW9uQ29udHJhY3RzUGFuZWwiLCJfcmVxdWlyZTciLCJsb2FkSHViVWlGZWF0dXJlRmxhZ3MiLCJzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncyIsIl9yZXF1aXJlOCIsInJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIiLCJIdWJQYWdpbmF0aW9uIiwiX3JlcXVpcmU5IiwidXNlSHViTGlzdFBhZ2luYXRpb24iLCJGSUxURVJfQUxMIiwiRklMVEVSX05FVyIsIkZJTFRFUl9QQVJUSUFMIiwiRklMVEVSX0NPTVBMRVRFIiwiREVGQVVMVF9FTVBUWV9FWEVDX1BST0dSQU0iLCJKU09OIiwic3RyaW5naWZ5IiwidmVyc2lvbiIsInN0ZXBzIiwiREVGQVVMVF9SRUdJU1RSWV9GRUVfU0FUUyIsIkVYRUNfUkVHSVNUUllfRFJBRlRfU1RPUkFHRV9LRVkiLCJ0cmltSGFzaCIsInVuZGVmaW5lZCIsImxlZnQiLCJyaWdodCIsInRleHQiLCJjb25jYXQiLCJub3JtYWxpemVPcHRpb25hbElucHV0VGV4dCIsInN0YXJ0c1dpdGgiLCJDb250cmFjdHNIb21lIiwibmF2aWdhdGUiLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJzZXRVaVRpY2siLCJ1c2VFZmZlY3QiLCJ1ZiIsImhhc0FkbWluIiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJjb250cmFjdHMiLCJzZXRDb250cmFjdHMiLCJfUmVhY3QkdXNlU3RhdGU1IiwiX1JlYWN0JHVzZVN0YXRlNiIsImNyb3dkZnVuZENhbXBhaWducyIsInNldENyb3dkZnVuZENhbXBhaWducyIsIl9SZWFjdCR1c2VTdGF0ZTciLCJfUmVhY3QkdXNlU3RhdGU4IiwibGlnaHRuaW5nQ2hhbm5lbHMiLCJzZXRMaWdodG5pbmdDaGFubmVscyIsIl9SZWFjdCR1c2VTdGF0ZTkiLCJfUmVhY3QkdXNlU3RhdGUwIiwibG9hZGluZyIsInNldExvYWRpbmciLCJfUmVhY3QkdXNlU3RhdGUxIiwiX1JlYWN0JHVzZVN0YXRlMTAiLCJlcnJvciIsInNldEVycm9yIiwiX1JlYWN0JHVzZVN0YXRlMTEiLCJfUmVhY3QkdXNlU3RhdGUxMiIsInNldEZpbHRlciIsIl9SZWFjdCR1c2VTdGF0ZTEzIiwiX1JlYWN0JHVzZVN0YXRlMTQiLCJleGVjTmFtZSIsInNldEV4ZWNOYW1lIiwiX1JlYWN0JHVzZVN0YXRlMTUiLCJfUmVhY3QkdXNlU3RhdGUxNiIsImV4ZWNKc29uIiwic2V0RXhlY0pzb24iLCJfUmVhY3QkdXNlU3RhdGUxNyIsIl9SZWFjdCR1c2VTdGF0ZTE4IiwiZXhlY0J1c3kiLCJzZXRFeGVjQnVzeSIsIl9SZWFjdCR1c2VTdGF0ZTE5IiwiX1JlYWN0JHVzZVN0YXRlMjAiLCJleGVjRmVlZGJhY2siLCJzZXRFeGVjRmVlZGJhY2siLCJfUmVhY3QkdXNlU3RhdGUyMSIsIl9SZWFjdCR1c2VTdGF0ZTIyIiwiZXhlY0JpdGNvaW5PbiIsInNldEV4ZWNCaXRjb2luT24iLCJfUmVhY3QkdXNlU3RhdGUyMyIsIl9SZWFjdCR1c2VTdGF0ZTI0IiwiZXhlY0JpdGNvaW5Mb2FkaW5nIiwic2V0RXhlY0JpdGNvaW5Mb2FkaW5nIiwiX1JlYWN0JHVzZVN0YXRlMjUiLCJfUmVhY3QkdXNlU3RhdGUyNiIsImV4ZWNBbW91bnRTYXRzIiwic2V0RXhlY0Ftb3VudFNhdHMiLCJfUmVhY3QkdXNlU3RhdGUyNyIsIl9SZWFjdCR1c2VTdGF0ZTI4IiwiZXhlY1JlZ2lzdHJ5SW52b2ljZSIsInNldEV4ZWNSZWdpc3RyeUludm9pY2UiLCJfUmVhY3QkdXNlU3RhdGUyOSIsIl9SZWFjdCR1c2VTdGF0ZTMwIiwiZXhlY1R4aWQiLCJzZXRFeGVjVHhpZCIsIl9SZWFjdCR1c2VTdGF0ZTMxIiwiX1JlYWN0JHVzZVN0YXRlMzIiLCJleGVjSW52b2ljZUJ1c3kiLCJzZXRFeGVjSW52b2ljZUJ1c3kiLCJfUmVhY3QkdXNlU3RhdGUzMyIsIl9SZWFjdCR1c2VTdGF0ZTM0IiwicmVnaXN0cnlBZGRyZXNzQ29waWVkIiwic2V0UmVnaXN0cnlBZGRyZXNzQ29waWVkIiwid2luZG93Iiwic2Vzc2lvblN0b3JhZ2UiLCJyYXciLCJnZXRJdGVtIiwiZHJhZnQiLCJwYXJzZSIsInRyaW0iLCJwcm9ncmFtRGlnZXN0IiwiYWRkcmVzcyIsImFtb3VudFNhdHMiLCJuZXR3b3JrIiwiXyIsImhhc0NvbnRlbnQiLCJyZW1vdmVJdGVtIiwic2V0SXRlbSIsImNvcHlSZWdpc3RyeUludm9pY2VBZGRyZXNzIiwidXNlQ2FsbGJhY2siLCJuYXZpZ2F0b3IiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJzZXRUaW1lb3V0IiwibG9hZENvbnRyYWN0cyIsIl9jYWxsZWUiLCJvcHRzIiwiYmFja2dyb3VuZCIsInVwc3RyZWFtIiwiX3lpZWxkJFByb21pc2UkYWxsU2V0IiwiX3lpZWxkJFByb21pc2UkYWxsU2V0MiIsImNvbnRyYWN0c1NldHRsZWQiLCJsaWdodG5pbmdTZXR0bGVkIiwiY3Jvd2RmdW5kU2V0dGxlZCIsImxpZ2h0bmluZ1JlcyIsImNoYW5uZWxzIiwibGlzdCIsInJlYXNvbiIsImNvbnRyYWN0c1JlcyIsImJvZHkiLCJfbGlzdCIsIl9hcmdzIiwiX3QiLCJfdDIiLCJfY29udGV4dCIsImFsbFNldHRsZWQiLCJmZXRjaCIsIm1ldGhvZCIsIm91dHB1dHMiLCJzdGF0dXMiLCJtZXNzYWdlIiwianNvbiIsIm9rIiwicmVzdWx0IiwiY2FuY2VsbGVkIiwiYWMiLCJBYm9ydENvbnRyb2xsZXIiLCJ0aW1lb3V0SWQiLCJhYm9ydCIsImhlYWRlcnMiLCJBY2NlcHQiLCJzaWduYWwiLCJhdmFpbGFibGUiLCJjbGVhclRpbWVvdXQiLCJvbkNyZWF0ZWQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInN0b3JhZ2VDb250cmFjdHMiLCJ1c2VNZW1vIiwidHlwZSIsImRvY3VtZW50IiwiZXhlY3V0aW9uQ29udHJhY3RzIiwic29ydCIsImIiLCJ0YSIsImNyZWF0ZWQiLCJEYXRlIiwiTmFOIiwidGIiLCJpc0Zpbml0ZSIsImlkIiwibG9jYWxlQ29tcGFyZSIsImNvbnRyYWN0c0J5RG9jIiwibWFwIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJkb2NJZCIsImVyciIsImZpbHRlcmVkQ29udHJhY3RzIiwiZG9jQ29udHJhY3RzIiwiYWNjZXB0ZWRDb3VudCIsImRlc2lyZWQiLCJNYXRoIiwibWF4IiwiZGVzaXJlZENvcGllcyIsInN0b3JhZ2VDb250cmFjdHNSZXNldEtleSIsIl91c2VIdWJMaXN0UGFnaW5hdGlvbiIsInN0b3JhZ2VDb250cmFjdHNTbGljZSIsInN0b3JhZ2VMaXN0QWN0aXZlUGFnZSIsInBhZ2UiLCJzdG9yYWdlVG90YWxQYWdlcyIsInRvdGFsUGFnZXMiLCJzdG9yYWdlUmFuZ2VGcm9tIiwicmFuZ2VGcm9tIiwic3RvcmFnZVJhbmdlVG8iLCJyYW5nZVRvIiwic3RvcmFnZUxpc3RUb3RhbCIsInRvdGFsIiwic2V0U3RvcmFnZUxpc3RQYWdlIiwic2V0UGFnZSIsImV4ZWN1dGlvblJlc2V0S2V5IiwiX3VzZUh1Ykxpc3RQYWdpbmF0aW9uMiIsImV4ZWN1dGlvbkNvbnRyYWN0c1NsaWNlIiwiZXhlY3V0aW9uTGlzdEFjdGl2ZVBhZ2UiLCJleGVjdXRpb25Ub3RhbFBhZ2VzIiwiZXhlY3V0aW9uUmFuZ2VGcm9tIiwiZXhlY3V0aW9uUmFuZ2VUbyIsImV4ZWN1dGlvbkxpc3RUb3RhbCIsInNldEV4ZWN1dGlvbkxpc3RQYWdlIiwicmVxdWVzdEV4ZWN1dGlvblJlZ2lzdHJ5SW52b2ljZSIsIl9jYWxsZWUyIiwicHJvZ3JhbSIsIm5hbWVPcHQiLCJvdXQiLCJfdDMiLCJfdDQiLCJfY29udGV4dDIiLCJuZWdhdGl2ZSIsImNvbnRlbnQiLCJzdWJtaXRFeGVjdXRpb25Db250cmFjdCIsIl9jYWxsZWUzIiwidGlkIiwicGF5bG9hZCIsIm1zZyIsIm5lZWRzUGF5SGVscCIsInBheUhpbnQiLCJjaWQiLCJfdDUiLCJfdDYiLCJfY29udGV4dDMiLCJ0eGlkIiwiYml0Y29pblBheW1lbnRzIiwiY3JlYXRlRWxlbWVudCIsInRvIiwiY29udHJhY3QiLCJwb3NpdGl2ZSIsIkZyYWdtZW50IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwicmVnaXN0cnlTdGVwIiwic2Nyb2xsVG9TZWN0aW9uIiwiZWwiLCJnZXRFbGVtZW50QnlJZCIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJibG9jayIsInN0eWxlIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJnYXAiLCJmbGV4V3JhcCIsIm1hcmdpbkJvdHRvbSIsInJvbGUiLCJiYXNpYyIsInNpemUiLCJhcyIsIm1hcmdpbiIsIkNvbnRlbnQiLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJ0aXRsZSIsIm1heFdpZHRoIiwibGluZUhlaWdodCIsImNvbG9yIiwic2Vjb25kYXJ5IiwiSXRlbSIsImxpbmsiLCJiaXRjb2luTGlnaHRuaW5nIiwiaW5mbyIsImFjdGl2ZSIsImlubGluZSIsIm1hcmdpblJpZ2h0IiwibWFyZ2luVG9wIiwiZGl2aWRpbmciLCJmb250V2VpZ2h0IiwiZW1iZWRkZWQiLCJiaXRjb2luQ3Jvd2RmdW5kIiwiZGl2aWRlZCIsInJlbGF4ZWQiLCJyb3ciLCJjYW1wYWlnbklkIiwia2V5IiwibWFyZ2luTGVmdCIsImZvbnRTaXplIiwiRGVzY3JpcHRpb24iLCJ3b3JkQnJlYWsiLCJnb2FsU2F0cyIsInRvTG9jYWxlU3RyaW5nIiwic3RhdHVzTGFiZWwiLCJzdGF0dXNDb2xvciIsImJpdGNvaW5FeHBsb3JlciIsImp1c3RpZnlDb250ZW50IiwiYWN0aXZlUGFnZSIsIm9uUGFnZUNoYW5nZSIsImZsZXgiLCJtaW5XaWR0aCIsInNpZGVjaGFpbiIsIndhcm5pbmciLCJvbkRpc21pc3MiLCJvblN1Ym1pdCIsInByZXZlbnREZWZhdWx0IiwiR3JvdXAiLCJmbHVpZCIsInVuc3RhY2thYmxlIiwib3ZlcmZsb3dYIiwiY29tcGxldGVkIiwiVGl0bGUiLCJGaWVsZCIsImh0bWxGb3IiLCJJbnB1dCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJyb3dzIiwiZm9udEZhbWlseSIsIm1pbiIsInN0ZXAiLCJpY29uIiwicHJpbWFyeSIsInN0ZXBDb3VudCIsInN0ZXBTdW1tYXJ5IiwicGFkZGluZ1RvcCIsImJvcmRlclRvcCIsImNlbGxlZCIsImNvbXBhY3QiLCJSb3ciLCJIZWFkZXJDZWxsIiwiQm9keSIsImNoIiwiaWR4IiwiY2hJZCIsImNoYW5uZWxfaWQiLCJmdW5kaW5nX3R4aWQiLCJ0b1VybCIsImN1cnNvciIsIkNlbGwiLCJwZWVyX2lkIiwic3RhdGUiLCJhbW91bnRfbXNhdCIsImZsb29yIiwiY2hhbm5lbF9zYXQiLCJvdXJfYW1vdW50X21zYXQiLCJzaG9ydF9jaGFubmVsX2lkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/ContractsHome.js\n\n}')},"./components/CrowdfundingHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Input = _require2.Input,\n Label = _require2.Label,\n List = _require2.List,\n Message = _require2.Message,\n Modal = _require2.Modal,\n Segment = _require2.Segment,\n Table = _require2.Table;\nvar QRCode = __webpack_require__(/*! qrcode */ "./node_modules/qrcode/lib/browser.js");\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n broadcastRawTransaction = _require3.broadcastRawTransaction,\n createCrowdfundingCampaign = _require3.createCrowdfundingCampaign,\n createPayjoinDeposit = _require3.createPayjoinDeposit,\n fetchBitcoinStatus = _require3.fetchBitcoinStatus,\n fetchCrowdfundingCampaigns = _require3.fetchCrowdfundingCampaigns,\n fetchCrowdfundingCampaign = _require3.fetchCrowdfundingCampaign,\n fetchCrowdfundingAcpDonationPsbt = _require3.fetchCrowdfundingAcpDonationPsbt,\n fetchCrowdfundingPayoutPsbt = _require3.fetchCrowdfundingPayoutPsbt,\n postCrowdfundingPayoutSignArbiter = _require3.postCrowdfundingPayoutSignArbiter,\n postCrowdfundingPayoutBroadcast = _require3.postCrowdfundingPayoutBroadcast,\n postCrowdfundingRefundPrepare = _require3.postCrowdfundingRefundPrepare,\n getCrowdfundingBeneficiaryPubkeyHex = _require3.getCrowdfundingBeneficiaryPubkeyHex,\n getCrowdfundingBeneficiaryPayoutAddress = _require3.getCrowdfundingBeneficiaryPayoutAddress,\n signCrowdfundingPayoutPsbtBeneficiary = _require3.signCrowdfundingPayoutPsbtBeneficiary,\n getNextReceiveWalletContext = _require3.getNextReceiveWalletContext,\n loadUpstreamSettings = _require3.loadUpstreamSettings,\n loadPayjoinPreferences = _require3.loadPayjoinPreferences,\n buildCrowdfundFunderBitcoinUri = _require3.buildCrowdfundFunderBitcoinUri,\n buildCrowdfundPaymentsDeepLink = _require3.buildCrowdfundPaymentsDeepLink,\n crowdfundCampaignApiUrl = _require3.crowdfundCampaignApiUrl;\nvar _require4 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require4.formatSatsDisplay,\n formatBtcFromSats = _require4.formatBtcFromSats;\nvar _require5 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require5.readHubAdminTokenFromBrowser;\nvar _require6 = __webpack_require__(/*! ../functions/uiNotifications */ "./functions/uiNotifications.js"),\n copyToClipboard = _require6.copyToClipboard,\n pushUiNotification = _require6.pushUiNotification;\nvar _require7 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require7.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require7.subscribeHubUiFeatureFlags;\nvar _require8 = __webpack_require__(/*! ../constants */ "./constants.js"),\n SATS_PER_BTC = _require8.SATS_PER_BTC;\nvar CrowdfundingHome = /*#__PURE__*/function (_React$Component) {\n function CrowdfundingHome(props) {\n var _this;\n _classCallCheck(this, CrowdfundingHome);\n _this = _callSuper(this, CrowdfundingHome, [props]);\n var upstream = loadUpstreamSettings();\n var payjoinPrefs = loadPayjoinPreferences();\n _this.state = {\n loading: true,\n refreshing: false,\n upstream: upstream,\n payjoinEnabled: !!payjoinPrefs.operatorDeposit,\n bitcoinStatus: {\n available: false,\n status: \'STARTING\'\n },\n crowdfundingCampaigns: [],\n cfTitle: \'\',\n cfGoalSats: \'500000\',\n cfMinSats: \'10000\',\n cfBeneficiaryHex: \'\',\n cfBusy: false,\n cfError: null,\n cfSuccess: null,\n cfAcpAmountSats: \'10000\',\n cfPayjoinAmountSats: \'25000\',\n cfPayjoinBip21: \'\',\n cfPayjoinSessionId: \'\',\n cfVaultStats: {},\n cfRefundAfterBlocks: \'1008\',\n cfShareAmountSats: \'10000\',\n cfQrDataUrl: \'\',\n cfQrOpen: false,\n cfQrUri: \'\',\n cfPayoutModal: null,\n cfPayoutDest: \'\',\n cfPayoutFeeSats: \'2000\',\n cfPayoutPsbt: \'\',\n cfPayoutBusy: false,\n cfPayoutErr: null,\n cfPayoutTxid: null,\n cfPayoutHint: null,\n cfRefundModal: null,\n cfRefundDest: \'\',\n cfRefundFundedTxid: \'\',\n cfRefundVout: \'\',\n cfRefundFeeSats: \'2000\',\n cfRefundBusy: false,\n cfRefundErr: null,\n cfRefundTxHex: \'\',\n cfRefundTxid: null,\n hubUiFlagsRev: 0\n };\n return _this;\n }\n _inherits(CrowdfundingHome, _React$Component);\n return _createClass(CrowdfundingHome, [{\n key: "componentDidMount",\n value: function componentDidMount() {\n var _this2 = this;\n this.refresh();\n // A short follow-up refresh smooths over startup races where the first\n // fetch happens before wallet/index state is fully ready.\n this._delayedRefreshTimer = setTimeout(function () {\n _this2.refresh();\n }, 1200);\n this._hubUiFlagsUnsub = subscribeHubUiFeatureFlags(function () {\n _this2.setState(function (s) {\n return {\n hubUiFlagsRev: (s.hubUiFlagsRev || 0) + 1\n };\n });\n });\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n if (this._delayedRefreshTimer) clearTimeout(this._delayedRefreshTimer);\n if (typeof this._hubUiFlagsUnsub === \'function\') this._hubUiFlagsUnsub();\n }\n }, {\n key: "getIdentity",\n value: function getIdentity() {\n var i = this.props && this.props.identity || {};\n var a = this.props && this.props.auth || {};\n var bridge = this.props && this.props.bridgeRef && this.props.bridgeRef.current;\n var bridgeAuth = {};\n var bridgeKey = {};\n try {\n bridgeAuth = bridge && bridge.props && bridge.props.auth || {};\n bridgeKey = bridge && typeof bridge._getIdentityKey === \'function\' && bridge._getIdentityKey() || {};\n } catch (e) {}\n return _objectSpread(_objectSpread(_objectSpread({}, a), i), {}, {\n xprv: i.xprv || a.xprv || bridgeAuth.xprv || bridgeKey.xprv,\n xpub: i.xpub || a.xpub || bridgeAuth.xpub || bridgeKey.xpub\n });\n }\n }, {\n key: "getAddressPlaceholder",\n value: function getAddressPlaceholder(network) {\n var n = String(network || \'\').toLowerCase();\n if (n === \'regtest\') return "bcrt1... or m/44\'/0\'/0\'/0/0";\n if (n === \'testnet\' || n === \'signet\') return \'tb1... or 2N...\';\n if (n === \'mainnet\' || n === \'main\') return \'bc1... or 3...\';\n return \'address for current network\';\n }\n }, {\n key: "satsToBTC",\n value: function satsToBTC(value) {\n return formatBtcFromSats(value);\n }\n }, {\n key: "refresh",\n value: function () {\n var _refresh = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var upstream, bitcoinStatus, crowdfundingCampaigns, campaignsNorm, cfVaultStats, detailRows, _iterator, _step, x, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n upstream = loadUpstreamSettings();\n this.setState({\n refreshing: true,\n upstream: upstream\n });\n _context2.p = 1;\n _context2.n = 2;\n return fetchBitcoinStatus(upstream)["catch"](function () {\n return {\n available: false\n };\n });\n case 2:\n bitcoinStatus = _context2.v;\n _context2.n = 3;\n return fetchCrowdfundingCampaigns(upstream)["catch"](function () {\n return [];\n });\n case 3:\n crowdfundingCampaigns = _context2.v;\n campaignsNorm = Array.isArray(crowdfundingCampaigns) ? crowdfundingCampaigns : [];\n cfVaultStats = {};\n if (!(campaignsNorm.length > 0 && bitcoinStatus && bitcoinStatus.available)) {\n _context2.n = 5;\n break;\n }\n _context2.n = 4;\n return Promise.all(campaignsNorm.map(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(c) {\n var id, d, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n id = c && String(c.campaignId || \'\').trim();\n if (id) {\n _context.n = 1;\n break;\n }\n return _context.a(2, null);\n case 1:\n _context.p = 1;\n _context.n = 2;\n return fetchCrowdfundingCampaign(upstream, id);\n case 2:\n d = _context.v;\n return _context.a(2, {\n id: id,\n balanceSats: Number(d.balanceSats) || 0,\n unspentCount: Number(d.unspentCount) || 0,\n goalMet: !!d.goalMet,\n vaultUtxos: Array.isArray(d.vaultUtxos) ? d.vaultUtxos : []\n });\n case 3:\n _context.p = 3;\n _t = _context.v;\n return _context.a(2, {\n id: id,\n error: _t && _t.message ? _t.message : \'unavailable\'\n });\n }\n }, _callee, null, [[1, 3]]);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }()));\n case 4:\n detailRows = _context2.v;\n _iterator = _createForOfIteratorHelper(detailRows);\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n x = _step.value;\n if (x && x.id) cfVaultStats[x.id] = x;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n case 5:\n this.setState({\n loading: false,\n refreshing: false,\n bitcoinStatus: bitcoinStatus && _typeof(bitcoinStatus) === \'object\' ? bitcoinStatus : {\n available: false\n },\n crowdfundingCampaigns: campaignsNorm,\n cfVaultStats: cfVaultStats\n });\n _context2.n = 7;\n break;\n case 6:\n _context2.p = 6;\n _t2 = _context2.v;\n this.setState({\n loading: false,\n refreshing: false\n });\n case 7:\n return _context2.a(2);\n }\n }, _callee2, this, [[1, 6]]);\n }));\n function refresh() {\n return _refresh.apply(this, arguments);\n }\n return refresh;\n }()\n }, {\n key: "_bip21ForRow",\n value: function _bip21ForRow(row) {\n var addr = String(row && row.address || \'\').trim();\n var minC = Math.round(Number(row && row.minContributionSats || 0)) || 546;\n var share = Math.round(Number(this.state.cfShareAmountSats || 0));\n var sats = Number.isFinite(share) && share >= minC ? share : minC;\n return buildCrowdfundFunderBitcoinUri(addr, sats / SATS_PER_BTC);\n }\n }, {\n key: "_paymentsLinkForRow",\n value: function _paymentsLinkForRow(row) {\n var addr = String(row && row.address || \'\').trim();\n var minC = Math.round(Number(row && row.minContributionSats || 0)) || 546;\n var share = Math.round(Number(this.state.cfShareAmountSats || 0));\n var sats = Number.isFinite(share) && share >= minC ? share : minC;\n return buildCrowdfundPaymentsDeepLink({\n payTo: addr,\n amountSats: sats\n });\n }\n }, {\n key: "handleCfShowBip21Qr",\n value: function handleCfShowBip21Qr(row) {\n var _this3 = this;\n var uri = this._bip21ForRow(row);\n if (!uri) return;\n QRCode.toDataURL(uri, {\n width: 220,\n margin: 1,\n errorCorrectionLevel: \'M\'\n }, function (err, url) {\n if (err) return;\n _this3.setState({\n cfQrDataUrl: url,\n cfQrOpen: true,\n cfQrUri: uri\n });\n });\n }\n }, {\n key: "_closeCfQr",\n value: function _closeCfQr() {\n this.setState({\n cfQrOpen: false,\n cfQrDataUrl: \'\',\n cfQrUri: \'\'\n });\n }\n }, {\n key: "handleCfFillBeneficiaryFromWallet",\n value: function handleCfFillBeneficiaryFromWallet() {\n var hex = getCrowdfundingBeneficiaryPubkeyHex(this.getIdentity());\n if (!hex) {\n if (this.props && typeof this.props.onRequireUnlock === \'function\') {\n try {\n this.props.onRequireUnlock();\n } catch (e) {}\n }\n this.setState({\n cfError: \'Unlock identity so we can derive your payment wallet pubkey at m/44\\\'/0\\\'/0\\\'/0/0.\',\n cfSuccess: null\n });\n return;\n }\n this.setState({\n cfBeneficiaryHex: hex,\n cfError: null,\n cfSuccess: null\n });\n }\n }, {\n key: "handleCfFillPayoutAddressFromWallet",\n value: function handleCfFillPayoutAddressFromWallet() {\n var bitcoinNetwork = String(this.state.bitcoinStatus && this.state.bitcoinStatus.network || \'\').toLowerCase() || \'regtest\';\n var addr = getCrowdfundingBeneficiaryPayoutAddress(this.getIdentity(), bitcoinNetwork);\n if (!addr) {\n if (this.props && typeof this.props.onRequireUnlock === \'function\') {\n try {\n this.props.onRequireUnlock();\n } catch (e) {}\n }\n this.setState({\n cfPayoutErr: \'Cannot derive payout address from wallet context. Unlock identity (or enter any destination manually).\'\n });\n return;\n }\n this.setState({\n cfPayoutDest: addr,\n cfPayoutErr: null\n });\n }\n }, {\n key: "handleCfPayoutBeneficiarySign",\n value: function handleCfPayoutBeneficiarySign() {\n var psbt = String(this.state.cfPayoutPsbt || \'\').trim();\n if (!psbt) return;\n var bitcoinNetwork = String(this.state.bitcoinStatus && this.state.bitcoinStatus.network || \'\').toLowerCase() || \'regtest\';\n this.setState({\n cfPayoutBusy: true,\n cfPayoutErr: null\n });\n try {\n var nextB64 = signCrowdfundingPayoutPsbtBeneficiary(psbt, this.getIdentity(), bitcoinNetwork);\n this.setState({\n cfPayoutBusy: false,\n cfPayoutPsbt: nextB64\n });\n } catch (error) {\n this.setState({\n cfPayoutBusy: false,\n cfPayoutErr: error && error.message ? error.message : String(error)\n });\n }\n }\n }, {\n key: "handleCrowdfundingCreate",\n value: function () {\n var _handleCrowdfundingCreate = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var admin, ben, goalSats, minSats, refundAfterBlocks, res, camp, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n admin = readHubAdminTokenFromBrowser(this.props.adminToken);\n if (admin) {\n _context3.n = 1;\n break;\n }\n this.setState({\n cfError: \'Save the Hub admin token (Settings / Bitcoin home) to create Taproot campaigns.\',\n cfSuccess: null\n });\n return _context3.a(2);\n case 1:\n ben = String(this.state.cfBeneficiaryHex || \'\').trim().toLowerCase();\n if (/^(02|03)[0-9a-f]{64}$/.test(ben)) {\n _context3.n = 2;\n break;\n }\n this.setState({\n cfError: \'Beneficiary must be a compressed secp256k1 pubkey hex (02 or 03 + 64 hex).\',\n cfSuccess: null\n });\n return _context3.a(2);\n case 2:\n goalSats = Math.round(Number(this.state.cfGoalSats || 0));\n minSats = Math.round(Number(this.state.cfMinSats || 0));\n if (!(!Number.isFinite(goalSats) || goalSats < 1000 || !Number.isFinite(minSats) || minSats < 546)) {\n _context3.n = 3;\n break;\n }\n this.setState({\n cfError: \'Goal must be ≥ 1000 sats; minimum contribution ≥ 546.\',\n cfSuccess: null\n });\n return _context3.a(2);\n case 3:\n if (!(minSats > goalSats)) {\n _context3.n = 4;\n break;\n }\n this.setState({\n cfError: \'Minimum contribution cannot exceed goal.\',\n cfSuccess: null\n });\n return _context3.a(2);\n case 4:\n refundAfterBlocks = Math.round(Number(this.state.cfRefundAfterBlocks || 1008));\n if (!Number.isFinite(refundAfterBlocks) || refundAfterBlocks < 48) refundAfterBlocks = 1008;\n this.setState({\n cfBusy: true,\n cfError: null,\n cfSuccess: null\n });\n _context3.p = 5;\n _context3.n = 6;\n return createCrowdfundingCampaign(this.state.upstream, {\n title: String(this.state.cfTitle || \'Crowdfund\').trim().slice(0, 200) || \'Crowdfund\',\n goalSats: goalSats,\n minContributionSats: minSats,\n beneficiaryPubkeyHex: ben,\n refundAfterBlocks: refundAfterBlocks\n }, admin);\n case 6:\n res = _context3.v;\n camp = res && res.campaign ? res.campaign : null;\n this.setState({\n cfBusy: false,\n cfSuccess: camp ? "Campaign ".concat(camp.campaignId, " \\u2014 vault ").concat(camp.address) : \'Campaign created.\',\n cfTitle: \'\'\n });\n _context3.n = 7;\n return this.refresh();\n case 7:\n _context3.n = 9;\n break;\n case 8:\n _context3.p = 8;\n _t3 = _context3.v;\n this.setState({\n cfBusy: false,\n cfError: _t3 && _t3.message ? _t3.message : String(_t3)\n });\n case 9:\n return _context3.a(2);\n }\n }, _callee3, this, [[5, 8]]);\n }));\n function handleCrowdfundingCreate() {\n return _handleCrowdfundingCreate.apply(this, arguments);\n }\n return handleCrowdfundingCreate;\n }()\n }, {\n key: "handleCrowdfundingCopyAcpPsbt",\n value: function () {\n var _handleCrowdfundingCopyAcpPsbt = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(campaignId) {\n var id, amt, data, b64, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n id = String(campaignId || \'\').trim();\n amt = Math.round(Number(this.state.cfAcpAmountSats || 0));\n if (id) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2);\n case 1:\n if (!(!Number.isFinite(amt) || amt < 546)) {\n _context4.n = 2;\n break;\n }\n this.setState({\n cfError: \'Set ACP leg amount (sats) ≥ 546.\',\n cfSuccess: null\n });\n return _context4.a(2);\n case 2:\n _context4.p = 2;\n _context4.n = 3;\n return fetchCrowdfundingAcpDonationPsbt(this.state.upstream, id, amt);\n case 3:\n data = _context4.v;\n b64 = data && data.psbtBase64 ? String(data.psbtBase64) : \'\';\n if (b64) {\n _context4.n = 4;\n break;\n }\n throw new Error(\'Hub did not return psbtBase64.\');\n case 4:\n _context4.n = 5;\n return copyToClipboard(b64);\n case 5:\n this.setState({\n cfError: null,\n cfSuccess: "Copied outputs-only PSBT (".concat(amt, " sats to campaign). Add inputs; sign with SIGHASH_ALL|ANYONECANPAY (0x81).")\n });\n pushUiNotification({\n id: "cf-acp-".concat(id, "-").concat(amt),\n kind: \'bitcoin\',\n title: \'ACP crowdfund PSBT copied\',\n subtitle: "".concat(amt, " sats output to campaign ").concat(id.slice(0, 8), "\\u2026")\n });\n _context4.n = 7;\n break;\n case 6:\n _context4.p = 6;\n _t4 = _context4.v;\n this.setState({\n cfError: _t4 && _t4.message ? _t4.message : String(_t4),\n cfSuccess: null\n });\n case 7:\n return _context4.a(2);\n }\n }, _callee4, this, [[2, 6]]);\n }));\n function handleCrowdfundingCopyAcpPsbt(_x2) {\n return _handleCrowdfundingCopyAcpPsbt.apply(this, arguments);\n }\n return handleCrowdfundingCopyAcpPsbt;\n }()\n }, {\n key: "handleCrowdfundingPayjoinToVault",\n value: function () {\n var _handleCrowdfundingPayjoinToVault = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(campaign) {\n var c, addr, cid, amountSats, receiveWallet, session, uri, nav, _t5;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.p = _context5.n) {\n case 0:\n if (this.state.payjoinEnabled) {\n _context5.n = 1;\n break;\n }\n this.setState({\n cfError: \'Enable Payjoin (above) for deposit sessions.\',\n cfSuccess: null\n });\n return _context5.a(2);\n case 1:\n c = campaign || {};\n addr = String(c.address || \'\').trim();\n cid = String(c.campaignId || \'\').trim();\n if (addr) {\n _context5.n = 2;\n break;\n }\n this.setState({\n cfError: \'Campaign has no address.\',\n cfSuccess: null\n });\n return _context5.a(2);\n case 2:\n amountSats = Math.round(Number(this.state.cfPayjoinAmountSats || 0));\n if (!(!Number.isFinite(amountSats) || amountSats < 1)) {\n _context5.n = 3;\n break;\n }\n this.setState({\n cfError: \'Set Payjoin request amount (sats) for the BIP21 link.\',\n cfSuccess: null\n });\n return _context5.a(2);\n case 3:\n _context5.p = 3;\n receiveWallet = getNextReceiveWalletContext(this.getIdentity());\n _context5.n = 4;\n return createPayjoinDeposit(this.state.upstream, receiveWallet, {\n address: addr,\n amountSats: amountSats,\n label: String(c.title || \'Crowdfund\').slice(0, 80),\n memo: "crowdfund:".concat(cid)\n });\n case 4:\n session = _context5.v;\n uri = String(session.bip21Uri || \'\').trim();\n this.setState({\n cfError: null,\n cfSuccess: uri ? \'Payjoin session points at the campaign vault. Opening Payments with the BIP21 URI…\' : \'Payjoin session created.\',\n cfPayjoinBip21: uri,\n cfPayjoinSessionId: String(session.id || \'\').trim()\n });\n if (uri) {\n try {\n pushUiNotification({\n id: "cf-pj-".concat(session.id || cid),\n kind: \'payjoin\',\n title: \'Payjoin → crowdfund vault\',\n subtitle: "".concat(amountSats, " sats"),\n href: "/payments?bitcoinUri=".concat(encodeURIComponent(uri)),\n copyText: uri\n });\n } catch (e) {/* ignore */}\n nav = this.props.navigate;\n if (typeof nav === \'function\') {\n nav("/payments?bitcoinUri=".concat(encodeURIComponent(uri)));\n }\n }\n _context5.n = 5;\n return this.refresh();\n case 5:\n _context5.n = 7;\n break;\n case 6:\n _context5.p = 6;\n _t5 = _context5.v;\n this.setState({\n cfError: _t5 && _t5.message ? _t5.message : String(_t5),\n cfSuccess: null\n });\n case 7:\n return _context5.a(2);\n }\n }, _callee5, this, [[3, 6]]);\n }));\n function handleCrowdfundingPayjoinToVault(_x3) {\n return _handleCrowdfundingPayjoinToVault.apply(this, arguments);\n }\n return handleCrowdfundingPayjoinToVault;\n }()\n }, {\n key: "_closeCfPayoutModal",\n value: function _closeCfPayoutModal() {\n this.setState({\n cfPayoutModal: null,\n cfPayoutDest: \'\',\n cfPayoutFeeSats: \'2000\',\n cfPayoutPsbt: \'\',\n cfPayoutBusy: false,\n cfPayoutErr: null,\n cfPayoutTxid: null,\n cfPayoutHint: null\n });\n }\n }, {\n key: "handleCfPayoutBuildPsbt",\n value: function () {\n var _handleCfPayoutBuildPsbt = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {\n var row, dest, feeSats, res, b64, _t6;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.p = _context6.n) {\n case 0:\n row = this.state.cfPayoutModal;\n if (!(!row || !row.campaignId)) {\n _context6.n = 1;\n break;\n }\n return _context6.a(2);\n case 1:\n dest = String(this.state.cfPayoutDest || \'\').trim();\n feeSats = Math.max(1, Math.round(Number(this.state.cfPayoutFeeSats || 1000)));\n if (dest) {\n _context6.n = 2;\n break;\n }\n this.setState({\n cfPayoutErr: \'Enter a beneficiary payout address (bech32), or use Fill from wallet.\'\n });\n return _context6.a(2);\n case 2:\n this.setState({\n cfPayoutBusy: true,\n cfPayoutErr: null,\n cfPayoutTxid: null,\n cfPayoutHint: null,\n cfPayoutPsbt: \'\'\n });\n _context6.p = 3;\n _context6.n = 4;\n return fetchCrowdfundingPayoutPsbt(this.state.upstream, row.campaignId, {\n destination: dest,\n feeSats: feeSats\n });\n case 4:\n res = _context6.v;\n b64 = res && res.psbtBase64 ? String(res.psbtBase64) : \'\';\n if (b64) {\n _context6.n = 5;\n break;\n }\n throw new Error(\'Hub did not return psbtBase64.\');\n case 5:\n this.setState({\n cfPayoutBusy: false,\n cfPayoutPsbt: b64,\n cfPayoutHint: res && res.next ? String(res.next) : null\n });\n _context6.n = 7;\n break;\n case 6:\n _context6.p = 6;\n _t6 = _context6.v;\n this.setState({\n cfPayoutBusy: false,\n cfPayoutPsbt: \'\',\n cfPayoutErr: _t6 && _t6.message ? _t6.message : String(_t6)\n });\n case 7:\n return _context6.a(2);\n }\n }, _callee6, this, [[3, 6]]);\n }));\n function handleCfPayoutBuildPsbt() {\n return _handleCfPayoutBuildPsbt.apply(this, arguments);\n }\n return handleCfPayoutBuildPsbt;\n }()\n }, {\n key: "handleCfPayoutArbiterSign",\n value: function () {\n var _handleCfPayoutArbiterSign = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {\n var row, psbt, admin, res, nextB64, _t7;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.p = _context7.n) {\n case 0:\n row = this.state.cfPayoutModal;\n psbt = String(this.state.cfPayoutPsbt || \'\').trim();\n if (!(!row || !row.campaignId || !psbt)) {\n _context7.n = 1;\n break;\n }\n return _context7.a(2);\n case 1:\n admin = readHubAdminTokenFromBrowser(this.props.adminToken);\n if (admin) {\n _context7.n = 2;\n break;\n }\n this.setState({\n cfPayoutErr: \'Admin token required for Hub arbiter co-sign.\'\n });\n return _context7.a(2);\n case 2:\n this.setState({\n cfPayoutBusy: true,\n cfPayoutErr: null\n });\n _context7.p = 3;\n _context7.n = 4;\n return postCrowdfundingPayoutSignArbiter(this.state.upstream, row.campaignId, psbt, admin);\n case 4:\n res = _context7.v;\n nextB64 = res && res.psbtBase64 ? String(res.psbtBase64) : \'\';\n if (nextB64) {\n _context7.n = 5;\n break;\n }\n throw new Error(\'No psbtBase64 after arbiter sign.\');\n case 5:\n this.setState({\n cfPayoutBusy: false,\n cfPayoutPsbt: nextB64\n });\n _context7.n = 7;\n break;\n case 6:\n _context7.p = 6;\n _t7 = _context7.v;\n this.setState({\n cfPayoutBusy: false,\n cfPayoutErr: _t7 && _t7.message ? _t7.message : String(_t7)\n });\n case 7:\n return _context7.a(2);\n }\n }, _callee7, this, [[3, 6]]);\n }));\n function handleCfPayoutArbiterSign() {\n return _handleCfPayoutArbiterSign.apply(this, arguments);\n }\n return handleCfPayoutArbiterSign;\n }()\n }, {\n key: "handleCfPayoutBroadcast",\n value: function () {\n var _handleCfPayoutBroadcast = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {\n var row, psbt, res, txid, _t8;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.p = _context8.n) {\n case 0:\n row = this.state.cfPayoutModal;\n psbt = String(this.state.cfPayoutPsbt || \'\').trim();\n if (!(!row || !row.campaignId || !psbt)) {\n _context8.n = 1;\n break;\n }\n return _context8.a(2);\n case 1:\n this.setState({\n cfPayoutBusy: true,\n cfPayoutErr: null\n });\n _context8.p = 2;\n _context8.n = 3;\n return postCrowdfundingPayoutBroadcast(this.state.upstream, row.campaignId, psbt);\n case 3:\n res = _context8.v;\n txid = res && res.txid ? String(res.txid) : \'\';\n if (txid) {\n _context8.n = 4;\n break;\n }\n throw new Error(\'No txid after broadcast.\');\n case 4:\n this.setState({\n cfPayoutBusy: false,\n cfPayoutTxid: txid\n });\n _context8.n = 5;\n return this.refresh();\n case 5:\n _context8.n = 7;\n break;\n case 6:\n _context8.p = 6;\n _t8 = _context8.v;\n this.setState({\n cfPayoutBusy: false,\n cfPayoutErr: _t8 && _t8.message ? _t8.message : String(_t8)\n });\n case 7:\n return _context8.a(2);\n }\n }, _callee8, this, [[2, 6]]);\n }));\n function handleCfPayoutBroadcast() {\n return _handleCfPayoutBroadcast.apply(this, arguments);\n }\n return handleCfPayoutBroadcast;\n }()\n }, {\n key: "_closeCfRefundModal",\n value: function _closeCfRefundModal() {\n this.setState({\n cfRefundModal: null,\n cfRefundDest: \'\',\n cfRefundFundedTxid: \'\',\n cfRefundVout: \'\',\n cfRefundFeeSats: \'2000\',\n cfRefundBusy: false,\n cfRefundErr: null,\n cfRefundTxHex: \'\',\n cfRefundTxid: null\n });\n }\n }, {\n key: "handleCfRefundPrepare",\n value: function () {\n var _handleCfRefundPrepare = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {\n var row, admin, dest, fundedTxid, feeSats, voutRaw, voutOpt, res, hex, txid, _t9;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.p = _context9.n) {\n case 0:\n row = this.state.cfRefundModal;\n if (!(!row || !row.campaignId)) {\n _context9.n = 1;\n break;\n }\n return _context9.a(2);\n case 1:\n admin = readHubAdminTokenFromBrowser(this.props.adminToken);\n if (admin) {\n _context9.n = 2;\n break;\n }\n this.setState({\n cfRefundErr: \'Admin token required for arbiter refund.\'\n });\n return _context9.a(2);\n case 2:\n dest = String(this.state.cfRefundDest || \'\').trim();\n fundedTxid = String(this.state.cfRefundFundedTxid || \'\').trim();\n feeSats = Math.max(1, Math.round(Number(this.state.cfRefundFeeSats || 1000)));\n voutRaw = String(this.state.cfRefundVout || \'\').trim();\n if (voutRaw !== \'\' && Number.isFinite(Number(voutRaw))) voutOpt = Number(voutRaw);\n if (!(!dest || !fundedTxid)) {\n _context9.n = 3;\n break;\n }\n this.setState({\n cfRefundErr: \'Destination address and funding txid (vault UTXO) are required.\'\n });\n return _context9.a(2);\n case 3:\n this.setState({\n cfRefundBusy: true,\n cfRefundErr: null,\n cfRefundTxHex: \'\',\n cfRefundTxid: null\n });\n _context9.p = 4;\n _context9.n = 5;\n return postCrowdfundingRefundPrepare(this.state.upstream, row.campaignId, {\n destinationAddress: dest,\n fundedTxid: fundedTxid,\n feeSats: feeSats,\n vout: voutOpt\n }, admin);\n case 5:\n res = _context9.v;\n hex = res && res.txHex ? String(res.txHex) : \'\';\n txid = res && res.txid ? String(res.txid) : \'\';\n if (hex) {\n _context9.n = 6;\n break;\n }\n throw new Error(\'Hub did not return txHex.\');\n case 6:\n this.setState({\n cfRefundBusy: false,\n cfRefundTxHex: hex,\n cfRefundTxid: txid || null\n });\n _context9.n = 8;\n break;\n case 7:\n _context9.p = 7;\n _t9 = _context9.v;\n this.setState({\n cfRefundBusy: false,\n cfRefundErr: _t9 && _t9.message ? _t9.message : String(_t9)\n });\n case 8:\n return _context9.a(2);\n }\n }, _callee9, this, [[4, 7]]);\n }));\n function handleCfRefundPrepare() {\n return _handleCfRefundPrepare.apply(this, arguments);\n }\n return handleCfRefundPrepare;\n }()\n }, {\n key: "handleCfRefundBroadcast",\n value: function () {\n var _handleCfRefundBroadcast = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0() {\n var hex, admin, out, txid, _t0;\n return _regenerator().w(function (_context0) {\n while (1) switch (_context0.p = _context0.n) {\n case 0:\n hex = String(this.state.cfRefundTxHex || \'\').trim();\n if (hex) {\n _context0.n = 1;\n break;\n }\n return _context0.a(2);\n case 1:\n admin = readHubAdminTokenFromBrowser(this.props.adminToken);\n if (admin) {\n _context0.n = 2;\n break;\n }\n this.setState({\n cfRefundErr: \'Admin token required to broadcast.\'\n });\n return _context0.a(2);\n case 2:\n this.setState({\n cfRefundBusy: true,\n cfRefundErr: null\n });\n _context0.p = 3;\n _context0.n = 4;\n return broadcastRawTransaction(this.state.upstream, hex, {\n adminToken: admin\n });\n case 4:\n out = _context0.v;\n txid = out && (out.txid || out.result) ? String(out.txid || out.result) : \'\';\n if (txid) {\n _context0.n = 5;\n break;\n }\n throw new Error(\'Broadcast did not return txid.\');\n case 5:\n this.setState({\n cfRefundBusy: false,\n cfRefundTxid: txid\n });\n _context0.n = 6;\n return this.refresh();\n case 6:\n _context0.n = 8;\n break;\n case 7:\n _context0.p = 7;\n _t0 = _context0.v;\n this.setState({\n cfRefundBusy: false,\n cfRefundErr: _t0 && _t0.message ? _t0.message : String(_t0)\n });\n case 8:\n return _context0.a(2);\n }\n }, _callee0, this, [[3, 7]]);\n }));\n function handleCfRefundBroadcast() {\n return _handleCfRefundBroadcast.apply(this, arguments);\n }\n return handleCfRefundBroadcast;\n }()\n }, {\n key: "render",\n value: function render() {\n var _this4 = this;\n void this.state.hubUiFlagsRev;\n var hubUi = loadHubUiFeatureFlags();\n var bitcoinNetwork = String(this.state.bitcoinStatus && this.state.bitcoinStatus.network || \'\').toLowerCase();\n var hasAdminToken = !!readHubAdminTokenFromBrowser(this.props.adminToken);\n var addressPlaceholder = this.getAddressPlaceholder(bitcoinNetwork);\n var bc = this.state.bitcoinStatus && this.state.bitcoinStatus.blockchain;\n var chainHeight = bc && bc.blocks != null ? Number(bc.blocks) : this.state.bitcoinStatus && this.state.bitcoinStatus.height != null ? Number(this.state.bitcoinStatus.height) : null;\n return /*#__PURE__*/React.createElement("div", {\n className: "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'center\',\n gap: \'0.5em\',\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "heart outline",\n color: "red",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Crowdfunds")), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n loading: this.state.refreshing,\n onClick: function onClick() {\n return _this4.refresh();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), "Bitcoin"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/contracts",\n basic: true,\n title: "Storage, execution, and Taproot crowdfunds on this hub"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file code"\n }), "Contracts"), hubUi.bitcoinPayments ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/payments",\n basic: true\n }, "Payments") : null), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Taproot campaign vaults on this Hub. Campaigns are stored locally on this node (not synced to other hubs).")), /*#__PURE__*/React.createElement(Segment, {\n id: "fabric-bitcoin-crowdfunding"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Crowdfund \\xB7 ACP \\xB7 Payjoin to vault"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Step A \\u2014 ACP:"), " outputs-only PSBT paying the campaign vault; donors add UTXOs and sign with", \' \', /*#__PURE__*/React.createElement("code", null, "SIGHASH_ALL|ANYONECANPAY"), " (0x81), merge until fees clear, broadcast.", \' \', /*#__PURE__*/React.createElement("strong", null, "Step B \\u2014 Payjoin:"), " a BIP78 deposit session uses the ", /*#__PURE__*/React.createElement("em", null, "same"), " vault address so payers can use", \' \', hubUi.bitcoinPayments ? /*#__PURE__*/React.createElement(Link, {\n to: "/payments#fabric-btc-make-payment-h4"\n }, "Payments") : /*#__PURE__*/React.createElement("strong", null, "Payments"), \' \', "(e.g. local Payjoin or ", /*#__PURE__*/React.createElement("strong", null, "ACP + Hub boost"), ").", \' \', /*#__PURE__*/React.createElement("strong", null, "Step C \\u2014 Payout:"), " when raised \\u2265 goal, beneficiary signs the unsigned payout PSBT, then Hub arbiter co-signs (admin), then broadcast.", \' \', /*#__PURE__*/React.createElement("strong", null, "Step D \\u2014 Refund:"), " after the refund CLTV height (see table), the Hub arbiter can sweep a vault UTXO to a destination you choose (admin): prepare returns a ", /*#__PURE__*/React.createElement("strong", null, "signed"), " raw tx \\u2014 copy hex or broadcast from the modal.", \' \', "If the goal was met, prefer ", /*#__PURE__*/React.createElement("strong", null, "Payout"), " so the beneficiary receives funds via the 2-of-2 path.", \' \', "Vault balance, UTXO hints, and goal status refresh with ", /*#__PURE__*/React.createElement("strong", null, "Refresh"), " above."), /*#__PURE__*/React.createElement("div", {\n style: {\n maxWidth: \'22em\',\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("label", {\n style: {\n display: \'block\',\n fontWeight: 600,\n marginBottom: \'0.35em\'\n },\n htmlFor: "fabric-cf-share-sats"\n }, "Default for funder links \\u2014 BIP21 / Payments (sats)"), /*#__PURE__*/React.createElement(Input, {\n id: "fabric-cf-share-sats",\n type: "number",\n min: "546",\n step: "1",\n value: this.state.cfShareAmountSats,\n onChange: function onChange(e) {\n return _this4.setState({\n cfShareAmountSats: e.target.value\n });\n },\n "aria-label": "Default amount in sats for BIP21, QR, and Open Payments links"\n }), /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.25em\',\n fontSize: \'0.82em\',\n color: \'#888\'\n }\n }, "Must be at least each campaign\'s min per UTXO (below). Used for Copy BIP21, QR, and Open Payments.")), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Title"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "Regtest demo campaign",\n value: this.state.cfTitle,\n onChange: function onChange(e) {\n return _this4.setState({\n cfTitle: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Goal (sats)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "1000",\n step: "1",\n value: this.state.cfGoalSats,\n onChange: function onChange(e) {\n return _this4.setState({\n cfGoalSats: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Min per vault UTXO (sats)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "546",\n step: "1",\n value: this.state.cfMinSats,\n onChange: function onChange(e) {\n return _this4.setState({\n cfMinSats: e.target.value\n });\n }\n }), /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.25em\',\n fontSize: \'0.82em\',\n color: \'#888\'\n }\n }, "Each separate output sent to the vault must be at least this (policy enforced when building payout)."))), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Refund path delay (+blocks from tip at create)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "48",\n step: "1",\n value: this.state.cfRefundAfterBlocks,\n onChange: function onChange(e) {\n return _this4.setState({\n cfRefundAfterBlocks: e.target.value\n });\n },\n style: {\n maxWidth: \'12em\'\n }\n }), /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.25em\',\n fontSize: \'0.82em\',\n color: \'#888\'\n }\n }, "Absolute CLTV height = chain tip at create + this value (minimum 48; default 1008 \\u2248 one week on mainnet cadence).")), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Beneficiary compressed pubkey hex (02/03\\u2026)"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Input, {\n placeholder: "033\\u2026",\n value: this.state.cfBeneficiaryHex,\n onChange: function onChange(e) {\n return _this4.setState({\n cfBeneficiaryHex: e.target.value.trim()\n });\n },\n style: {\n flex: \'1 1 20em\',\n minWidth: \'16em\',\n fontFamily: \'monospace\',\n fontSize: \'0.9em\'\n }\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n onClick: function onClick() {\n return _this4.handleCfFillBeneficiaryFromWallet();\n }\n }, "Fill from unlocked wallet"))), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.65em\',\n alignItems: \'center\',\n marginBottom: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement(Form.Field, {\n style: {\n marginBottom: 0\n }\n }, /*#__PURE__*/React.createElement("label", {\n style: {\n display: \'block\'\n }\n }, "ACP output leg (sats)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "546",\n step: "1",\n value: this.state.cfAcpAmountSats,\n onChange: function onChange(e) {\n return _this4.setState({\n cfAcpAmountSats: e.target.value\n });\n },\n style: {\n width: \'10em\'\n }\n })), /*#__PURE__*/React.createElement(Form.Field, {\n style: {\n marginBottom: 0\n }\n }, /*#__PURE__*/React.createElement("label", {\n style: {\n display: \'block\'\n }\n }, "Payjoin request (sats)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "1",\n step: "1",\n value: this.state.cfPayjoinAmountSats,\n onChange: function onChange(e) {\n return _this4.setState({\n cfPayjoinAmountSats: e.target.value\n });\n },\n style: {\n width: \'10em\'\n }\n }))), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n type: "button",\n loading: this.state.cfBusy,\n disabled: this.state.cfBusy || !hasAdminToken,\n onClick: function onClick() {\n return _this4.handleCrowdfundingCreate();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "plus"\n }), "Create Taproot campaign"), !hasAdminToken && /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.75em\',\n color: \'#888\',\n fontSize: \'0.9em\'\n }\n }, "Admin token required to create.")), (this.state.cfError || this.state.cfSuccess) && /*#__PURE__*/React.createElement(Message, {\n style: {\n marginTop: \'1em\'\n },\n negative: !!this.state.cfError,\n positive: !this.state.cfError && !!this.state.cfSuccess\n }, this.state.cfError ? /*#__PURE__*/React.createElement("span", null, this.state.cfError) : /*#__PURE__*/React.createElement("span", null, this.state.cfSuccess)), this.state.cfPayjoinBip21 && /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n type: "button",\n onClick: function onClick() {\n return copyToClipboard(_this4.state.cfPayjoinBip21);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy outline"\n }), "Copy crowdfund BIP21"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n size: "small",\n primary: true,\n to: "/payments?bitcoinUri=".concat(encodeURIComponent(this.state.cfPayjoinBip21))\n }, "Open Payments (prefill)"), this.state.cfPayjoinSessionId && /*#__PURE__*/React.createElement("span", {\n style: {\n fontSize: \'0.88em\',\n color: \'#555\'\n }\n }, "Session ", /*#__PURE__*/React.createElement("code", null, this.state.cfPayjoinSessionId.slice(0, 12), "\\u2026")))), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1.25em\'\n }\n }, "Campaigns"), (this.state.loading || this.state.refreshing) && (!this.state.crowdfundingCampaigns || this.state.crowdfundingCampaigns.length === 0) ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#888\'\n }\n }, "Loading campaigns...") : !this.state.crowdfundingCampaigns || this.state.crowdfundingCampaigns.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#888\'\n }\n }, "No campaigns yet. Create one above when Bitcoin is available (admin token required).") : /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n unstackable: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Title / id"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Vault address"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Raised"), /*#__PURE__*/React.createElement(Table.HeaderCell, {\n textAlign: "center"\n }, "UTXOs"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Refund CLTV"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Goal"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Actions"))), /*#__PURE__*/React.createElement(Table.Body, null, this.state.crowdfundingCampaigns.map(function (row) {\n var cid = String(row.campaignId || \'\');\n var addr = String(row.address || \'\');\n var shortAddr = addr.length > 22 ? "".concat(addr.slice(0, 14), "\\u2026").concat(addr.slice(-8)) : addr;\n var st = cid ? _this4.state.cfVaultStats[cid] || null : null;\n var goalNum = Number(row.goalSats) || 0;\n var balNum = st && !st.error ? Number(st.balanceSats) : 0;\n var pct = goalNum > 0 && st && !st.error ? Math.min(100, Math.round(balNum / goalNum * 100)) : null;\n var rt = row.refundLocktimeHeight;\n var refundEta = rt != null && chainHeight != null && Number.isFinite(chainHeight) ? rt <= chainHeight ? \'active\' : rt - chainHeight : null;\n var canPayout = !!(st && !st.error && st.goalMet);\n var refundUnlocked = refundEta === \'active\';\n var canRefundUi = refundUnlocked && hasAdminToken;\n var refundTitle = !refundUnlocked ? rt != null && chainHeight != null && typeof refundEta === \'number\' ? "Refund unlocks in ~".concat(refundEta, " blocks (height ").concat(rt, ")") : \'Refund unlocks after CLTV height (refresh for chain tip)\' : !hasAdminToken ? \'Admin token required for arbiter refund\' : \'After CLTV: arbiter-signed refund (vault UTXO → destination)\';\n var payoutTitle = !st ? \'Refresh (toolbar) to load vault balance from the node\' : st.error ? String(st.error) : !st.goalMet ? \'Payout unlocks when raised ≥ goal\' : \'Build payout PSBT (beneficiary signs, then arbiter, then broadcast)\';\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: cid || addr\n }, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, row.title || \'—\')), /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.82em\',\n color: \'#666\',\n fontFamily: \'monospace\'\n }\n }, cid)), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n fontFamily: \'monospace\',\n fontSize: \'0.85em\',\n wordBreak: \'break-all\'\n },\n title: addr\n }, /*#__PURE__*/React.createElement("div", null, shortAddr), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.35em\',\n marginTop: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n type: "button",\n disabled: !addr,\n onClick: function onClick() {\n return copyToClipboard(addr);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy outline"\n }), "Copy address"), cid ? /*#__PURE__*/React.createElement(Button, {\n as: "a",\n size: "mini",\n basic: true,\n href: crowdfundCampaignApiUrl(_this4.state.upstream, cid) || "#",\n target: "_blank",\n rel: "noopener noreferrer",\n title: "Campaign JSON + live balance"\n }, "API") : null, /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n type: "button",\n disabled: !addr,\n onClick: function onClick() {\n return copyToClipboard(_this4._bip21ForRow(row));\n }\n }, "Copy BIP21"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n size: "mini",\n basic: true,\n to: _this4._paymentsLinkForRow(row),\n disabled: !addr || !hubUi.bitcoinPayments,\n title: hubUi.bitcoinPayments ? \'Open Payments with campaign BIP21 prefill\' : \'Enable Bitcoin Payments in Admin feature visibility first\'\n }, "Open Payments"), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n type: "button",\n disabled: !addr,\n onClick: function onClick() {\n return _this4.handleCfShowBip21Qr(row);\n }\n }, "QR"))), /*#__PURE__*/React.createElement(Table.Cell, null, st && st.error ? /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#a33\',\n fontSize: \'0.88em\'\n },\n title: st.error\n }, "\\u2014") : st ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, formatSatsDisplay(st.balanceSats || 0), " sats"), pct != null ? /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.8em\',\n color: \'#888\'\n }\n }, pct, "% of goal") : null, st.goalMet ? /*#__PURE__*/React.createElement(Label, {\n size: "tiny",\n color: "green",\n style: {\n marginTop: \'0.35em\'\n }\n }, "Goal met") : null) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#aaa\'\n },\n title: "Use Refresh above"\n }, "\\u2026")), /*#__PURE__*/React.createElement(Table.Cell, {\n textAlign: "center"\n }, st && !st.error ? st.unspentCount != null ? st.unspentCount : \'—\' : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n fontSize: \'0.85em\'\n }\n }, rt != null ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, "height ", rt), refundEta === \'active\' ? /*#__PURE__*/React.createElement("div", {\n style: {\n color: \'#2185d0\'\n }\n }, "Refund path active") : refundEta != null && typeof refundEta === \'number\' ? /*#__PURE__*/React.createElement("div", {\n style: {\n color: \'#888\'\n }\n }, refundEta, " blocks to CLTV") : null) : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, formatSatsDisplay(row.goalSats), " sats", /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.8em\',\n color: \'#888\'\n }\n }, "min ", formatSatsDisplay(row.minContributionSats))), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexDirection: \'column\',\n gap: \'0.35em\',\n alignItems: \'flex-start\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n type: "button",\n disabled: !cid,\n onClick: function onClick() {\n return _this4.handleCrowdfundingCopyAcpPsbt(cid);\n }\n }, "Copy ACP PSBT"), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n primary: true,\n type: "button",\n disabled: !cid || !addr || !hubUi.bitcoinPayments,\n title: hubUi.bitcoinPayments ? \'Create a Payjoin session for this vault\' : \'Enable Bitcoin Payments in Admin feature visibility first\',\n onClick: function onClick() {\n return _this4.handleCrowdfundingPayjoinToVault(row);\n }\n }, "Payjoin \\u2192 vault"), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n type: "button",\n color: "green",\n basic: true,\n disabled: !cid || !canPayout,\n title: payoutTitle,\n onClick: function onClick() {\n return _this4.setState({\n cfPayoutModal: row,\n cfPayoutDest: \'\',\n cfPayoutFeeSats: \'2000\',\n cfPayoutPsbt: \'\',\n cfPayoutBusy: false,\n cfPayoutErr: null,\n cfPayoutTxid: null,\n cfPayoutHint: null\n });\n }\n }, "Payout\\u2026"), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n type: "button",\n color: "orange",\n basic: true,\n disabled: !cid || !canRefundUi,\n title: refundTitle,\n onClick: function onClick() {\n var stNow = cid ? _this4.state.cfVaultStats[cid] || null : null;\n var u0 = stNow && Array.isArray(stNow.vaultUtxos) && stNow.vaultUtxos[0] ? stNow.vaultUtxos[0] : null;\n _this4.setState({\n cfRefundModal: row,\n cfRefundDest: \'\',\n cfRefundFundedTxid: u0 ? String(u0.txid) : \'\',\n cfRefundVout: u0 && u0.vout != null ? String(u0.vout) : \'\',\n cfRefundFeeSats: \'2000\',\n cfRefundBusy: false,\n cfRefundErr: null,\n cfRefundTxHex: \'\',\n cfRefundTxid: null\n });\n }\n }, "Refund\\u2026"))));\n }))), /*#__PURE__*/React.createElement(Modal, {\n open: !!this.state.cfPayoutModal,\n onClose: function onClose() {\n return _this4._closeCfPayoutModal();\n },\n size: "small",\n closeIcon: true\n }, /*#__PURE__*/React.createElement(Modal.Header, null, "Payout campaign", this.state.cfPayoutModal && this.state.cfPayoutModal.title ? " \\u2014 ".concat(this.state.cfPayoutModal.title) : \'\'), /*#__PURE__*/React.createElement(Modal.Content, null, this.state.cfPayoutModal && this.state.cfPayoutModal.campaignId ? /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.88em\',\n color: \'#666\',\n wordBreak: \'break-all\'\n }\n }, /*#__PURE__*/React.createElement("code", null, this.state.cfPayoutModal.campaignId)) : null, /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-crowdfunding-payout-dest"\n }, "Beneficiary payout address (bech32)"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Input, {\n id: "fabric-crowdfunding-payout-dest",\n placeholder: addressPlaceholder,\n value: this.state.cfPayoutDest,\n onChange: function onChange(e) {\n return _this4.setState({\n cfPayoutDest: e.target.value\n });\n },\n style: {\n flex: \'1 1 18em\',\n minWidth: \'14em\'\n },\n "aria-label": "Beneficiary payout address (bech32)"\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n onClick: function onClick() {\n return _this4.handleCfFillPayoutAddressFromWallet();\n }\n }, "Fill from wallet (0/0)")), /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.25em\',\n fontSize: \'0.82em\',\n color: \'#888\'\n }\n }, "Same BIP44 external index 0 as the campaign beneficiary key \\u2014 convenient default; you may use any destination.")), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-crowdfunding-payout-fee"\n }, "Fee (sats)"), /*#__PURE__*/React.createElement(Input, {\n id: "fabric-crowdfunding-payout-fee",\n type: "number",\n min: "1",\n step: "1",\n value: this.state.cfPayoutFeeSats,\n onChange: function onChange(e) {\n return _this4.setState({\n cfPayoutFeeSats: e.target.value\n });\n },\n style: {\n maxWidth: \'10em\'\n },\n "aria-label": "Payout transaction fee in sats"\n }))), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n type: "button",\n loading: this.state.cfPayoutBusy && !this.state.cfPayoutPsbt,\n disabled: this.state.cfPayoutBusy || !this.state.cfPayoutModal,\n onClick: function onClick() {\n return _this4.handleCfPayoutBuildPsbt();\n }\n }, "Build unsigned payout PSBT"), this.state.cfPayoutErr && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n style: {\n marginTop: \'1em\'\n }\n }, this.state.cfPayoutErr), this.state.cfPayoutHint && /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n marginTop: \'1em\'\n }\n }, this.state.cfPayoutHint), this.state.cfPayoutPsbt ? /*#__PURE__*/React.createElement(Message, {\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: \'0.75em\'\n }\n }, "Beneficiary signs all inputs with their key first. Then Hub arbiter co-sign (admin token), then broadcast."), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n type: "button",\n onClick: function onClick() {\n return copyToClipboard(_this4.state.cfPayoutPsbt);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy outline"\n }), "Copy PSBT"), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n color: "blue",\n type: "button",\n disabled: this.state.cfPayoutBusy,\n title: "Sign all inputs with m/44\'/0\'/0\'/0/0 (must match campaign beneficiary pubkey)",\n onClick: function onClick() {\n return _this4.handleCfPayoutBeneficiarySign();\n }\n }, "Sign with unlocked wallet"), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n type: "button",\n disabled: this.state.cfPayoutBusy || !hasAdminToken,\n title: hasAdminToken ? \'Apply Hub arbiter Schnorr signatures\' : \'Admin token required\',\n onClick: function onClick() {\n return _this4.handleCfPayoutArbiterSign();\n }\n }, "Arbiter co-sign"), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n positive: true,\n type: "button",\n disabled: this.state.cfPayoutBusy,\n onClick: function onClick() {\n return _this4.handleCfPayoutBroadcast();\n }\n }, "Broadcast"))) : null, this.state.cfPayoutTxid ? /*#__PURE__*/React.createElement(Message, {\n positive: true,\n style: {\n marginTop: \'1em\'\n }\n }, "Broadcast", \' \', hubUi.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(this.state.cfPayoutTxid))\n }, this.state.cfPayoutTxid) : /*#__PURE__*/React.createElement("code", null, this.state.cfPayoutTxid)) : null), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: function onClick() {\n return _this4._closeCfPayoutModal();\n }\n }, "Close"))), /*#__PURE__*/React.createElement(Modal, {\n open: !!this.state.cfRefundModal,\n onClose: function onClose() {\n return _this4._closeCfRefundModal();\n },\n size: "small",\n closeIcon: true\n }, /*#__PURE__*/React.createElement(Modal.Header, null, "Arbiter refund (after CLTV)", this.state.cfRefundModal && this.state.cfRefundModal.title ? " \\u2014 ".concat(this.state.cfRefundModal.title) : \'\'), /*#__PURE__*/React.createElement(Modal.Content, null, this.state.cfRefundModal && this.state.cfRefundModal.campaignId ? /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.88em\',\n color: \'#666\',\n wordBreak: \'break-all\'\n }\n }, /*#__PURE__*/React.createElement("code", null, this.state.cfRefundModal.campaignId)) : null, /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, "Hub identity signs the refund tapleaf. Use only when the campaign should not pay out via the 2-of-2 path (e.g. goal not met and contributors should receive funds at the address you enter)."), function () {\n var mid = _this4.state.cfRefundModal && _this4.state.cfRefundModal.campaignId ? String(_this4.state.cfRefundModal.campaignId) : \'\';\n var stR = mid ? _this4.state.cfVaultStats[mid] || null : null;\n var ux = stR && Array.isArray(stR.vaultUtxos) ? stR.vaultUtxos : [];\n if (ux.length === 0) return null;\n return /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'1em\',\n fontSize: \'0.88em\',\n color: \'#555\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Vault UTXOs"), " (from node scan; pick one for funding txid / vout):", /*#__PURE__*/React.createElement(List, {\n relaxed: true,\n divided: true,\n style: {\n marginTop: \'0.5em\'\n }\n }, ux.slice(0, 8).map(function (u, i) {\n return /*#__PURE__*/React.createElement(List.Item, {\n key: "".concat(u.txid, ":").concat(u.vout, ":").concat(i)\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.82em\'\n }\n }, u.txid), \' \', "vout ", u.vout != null ? u.vout : \'—\', u.amountSats != null ? " \\xB7 ".concat(formatSatsDisplay(u.amountSats), " sats") : \'\', /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n type: "button",\n style: {\n marginLeft: \'0.5em\'\n },\n onClick: function onClick() {\n return _this4.setState({\n cfRefundFundedTxid: String(u.txid),\n cfRefundVout: u.vout != null ? String(u.vout) : \'\'\n });\n }\n }, "Use")));\n })));\n }(), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Refund destination (bech32)"), /*#__PURE__*/React.createElement(Input, {\n placeholder: addressPlaceholder,\n value: this.state.cfRefundDest,\n onChange: function onChange(e) {\n return _this4.setState({\n cfRefundDest: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Funding txid (payment into vault)"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "64 hex chars",\n value: this.state.cfRefundFundedTxid,\n onChange: function onChange(e) {\n return _this4.setState({\n cfRefundFundedTxid: e.target.value.trim()\n });\n },\n style: {\n fontFamily: \'monospace\',\n fontSize: \'0.88em\'\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Output index (vout)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "0",\n step: "1",\n placeholder: "auto if omitted",\n value: this.state.cfRefundVout,\n onChange: function onChange(e) {\n return _this4.setState({\n cfRefundVout: e.target.value\n });\n },\n style: {\n maxWidth: \'8em\'\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Fee (sats)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "1",\n step: "1",\n value: this.state.cfRefundFeeSats,\n onChange: function onChange(e) {\n return _this4.setState({\n cfRefundFeeSats: e.target.value\n });\n },\n style: {\n maxWidth: \'10em\'\n }\n }))), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n type: "button",\n loading: this.state.cfRefundBusy && !this.state.cfRefundTxHex,\n disabled: this.state.cfRefundBusy || !this.state.cfRefundModal,\n onClick: function onClick() {\n return _this4.handleCfRefundPrepare();\n }\n }, "Prepare signed refund tx"), this.state.cfRefundErr && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n style: {\n marginTop: \'1em\'\n }\n }, this.state.cfRefundErr), this.state.cfRefundTxHex ? /*#__PURE__*/React.createElement(Message, {\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: \'0.75em\'\n }\n }, "Signed raw transaction. Broadcast with admin token, or paste into ", /*#__PURE__*/React.createElement("code", null, "sendrawtransaction"), "."), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n type: "button",\n onClick: function onClick() {\n return copyToClipboard(_this4.state.cfRefundTxHex);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy outline"\n }), "Copy hex"), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n positive: true,\n type: "button",\n disabled: this.state.cfRefundBusy || !hasAdminToken,\n title: hasAdminToken ? \'POST /services/bitcoin/broadcast\' : \'Admin token required\',\n onClick: function onClick() {\n return _this4.handleCfRefundBroadcast();\n }\n }, "Broadcast"))) : null, this.state.cfRefundTxid ? /*#__PURE__*/React.createElement(Message, {\n positive: true,\n style: {\n marginTop: \'1em\'\n }\n }, "Txid", \' \', hubUi.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(this.state.cfRefundTxid))\n }, this.state.cfRefundTxid) : /*#__PURE__*/React.createElement("code", null, this.state.cfRefundTxid)) : null), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: function onClick() {\n return _this4._closeCfRefundModal();\n }\n }, "Close")))), /*#__PURE__*/React.createElement(Modal, {\n open: this.state.cfQrOpen,\n onClose: function onClose() {\n return _this4._closeCfQr();\n },\n size: "tiny"\n }, /*#__PURE__*/React.createElement(Modal.Header, null, "Bitcoin URI (BIP21)"), /*#__PURE__*/React.createElement(Modal.Content, {\n style: {\n textAlign: \'center\'\n }\n }, this.state.cfQrDataUrl ? /*#__PURE__*/React.createElement("img", {\n src: this.state.cfQrDataUrl,\n alt: "QR code",\n style: {\n maxWidth: \'100%\'\n }\n }) : null, this.state.cfQrUri ? /*#__PURE__*/React.createElement("p", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.85em\',\n marginTop: \'0.75em\'\n }\n }, this.state.cfQrUri) : null), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: function onClick() {\n return _this4._closeCfQr();\n }\n }, "Close"))));\n }\n }]);\n}(React.Component);\nmodule.exports = CrowdfundingHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFNBQVMsRUFBRTtRQUFTO01BQUUsR0FDM0MsSUFBSSxDQUFDMVEsS0FBSyxDQUFDdUIsV0FBVyxnQkFDckJoRixLQUFBLENBQUF1UixhQUFBO1FBQUs2RSxHQUFHLEVBQUUsSUFBSSxDQUFDM1MsS0FBSyxDQUFDdUIsV0FBWTtRQUFDcVIsR0FBRyxFQUFDLFNBQVM7UUFBQzVFLEtBQUssRUFBRTtVQUFFYyxRQUFRLEVBQUU7UUFBTztNQUFFLENBQUUsQ0FBQyxHQUM3RSxJQUFJLEVBQ1AsSUFBSSxDQUFDOU8sS0FBSyxDQUFDeUIsT0FBTyxnQkFDakJsRixLQUFBLENBQUF1UixhQUFBO1FBQUdFLEtBQUssRUFBRTtVQUFFMEQsU0FBUyxFQUFFLFdBQVc7VUFBRW5DLFFBQVEsRUFBRSxRQUFRO1VBQUVELFNBQVMsRUFBRTtRQUFTO01BQUUsR0FBRSxJQUFJLENBQUN0UCxLQUFLLENBQUN5QixPQUFXLENBQUMsR0FDckcsSUFDUyxDQUFDLGVBQ2hCbEYsS0FBQSxDQUFBdVIsYUFBQSxDQUFDMVEsS0FBSyxDQUFDK1UsT0FBTyxxQkFDWjVWLEtBQUEsQ0FBQXVSLGFBQUEsQ0FBQ2xSLE1BQU07UUFBQ3FTLElBQUksRUFBQyxRQUFRO1FBQUNQLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUXJCLE1BQUksQ0FBQ2pHLFVBQVUsQ0FBQyxDQUFDO1FBQUE7TUFBQyxHQUFDLE9BQWEsQ0FDeEQsQ0FDVixDQUNKLENBQUM7SUFFVjtFQUFDO0FBQUEsRUFod0M0QjdLLEtBQUssQ0FBQ3NXLFNBQVM7QUFtd0M5Q0MsTUFBTSxDQUFDQyxPQUFPLEdBQUdyVCxnQkFBZ0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvQ3Jvd2RmdW5kaW5nSG9tZS5qcz82MzhmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5jb25zdCB7XG4gIEJ1dHRvbixcbiAgRm9ybSxcbiAgSGVhZGVyLFxuICBJY29uLFxuICBJbnB1dCxcbiAgTGFiZWwsXG4gIExpc3QsXG4gIE1lc3NhZ2UsXG4gIE1vZGFsLFxuICBTZWdtZW50LFxuICBUYWJsZVxufSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCBRUkNvZGUgPSByZXF1aXJlKCdxcmNvZGUnKTtcblxuY29uc3Qge1xuICBicm9hZGNhc3RSYXdUcmFuc2FjdGlvbixcbiAgY3JlYXRlQ3Jvd2RmdW5kaW5nQ2FtcGFpZ24sXG4gIGNyZWF0ZVBheWpvaW5EZXBvc2l0LFxuICBmZXRjaEJpdGNvaW5TdGF0dXMsXG4gIGZldGNoQ3Jvd2RmdW5kaW5nQ2FtcGFpZ25zLFxuICBmZXRjaENyb3dkZnVuZGluZ0NhbXBhaWduLFxuICBmZXRjaENyb3dkZnVuZGluZ0FjcERvbmF0aW9uUHNidCxcbiAgZmV0Y2hDcm93ZGZ1bmRpbmdQYXlvdXRQc2J0LFxuICBwb3N0Q3Jvd2RmdW5kaW5nUGF5b3V0U2lnbkFyYml0ZXIsXG4gIHBvc3RDcm93ZGZ1bmRpbmdQYXlvdXRCcm9hZGNhc3QsXG4gIHBvc3RDcm93ZGZ1bmRpbmdSZWZ1bmRQcmVwYXJlLFxuICBnZXRDcm93ZGZ1bmRpbmdCZW5lZmljaWFyeVB1YmtleUhleCxcbiAgZ2V0Q3Jvd2RmdW5kaW5nQmVuZWZpY2lhcnlQYXlvdXRBZGRyZXNzLFxuICBzaWduQ3Jvd2RmdW5kaW5nUGF5b3V0UHNidEJlbmVmaWNpYXJ5LFxuICBnZXROZXh0UmVjZWl2ZVdhbGxldENvbnRleHQsXG4gIGxvYWRVcHN0cmVhbVNldHRpbmdzLFxuICBsb2FkUGF5am9pblByZWZlcmVuY2VzLFxuICBidWlsZENyb3dkZnVuZEZ1bmRlckJpdGNvaW5VcmksXG4gIGJ1aWxkQ3Jvd2RmdW5kUGF5bWVudHNEZWVwTGluayxcbiAgY3Jvd2RmdW5kQ2FtcGFpZ25BcGlVcmxcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvYml0Y29pbkNsaWVudCcpO1xuY29uc3QgeyBmb3JtYXRTYXRzRGlzcGxheSwgZm9ybWF0QnRjRnJvbVNhdHMgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mb3JtYXRTYXRzJyk7XG5jb25zdCB7IHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJBZG1pblRva2VuQnJvd3NlcicpO1xuY29uc3QgeyBjb3B5VG9DbGlwYm9hcmQsIHB1c2hVaU5vdGlmaWNhdGlvbiB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3VpTm90aWZpY2F0aW9ucycpO1xuY29uc3QgeyBsb2FkSHViVWlGZWF0dXJlRmxhZ3MsIHN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViVWlGZWF0dXJlRmxhZ3MnKTtcbmNvbnN0IHsgU0FUU19QRVJfQlRDIH0gPSByZXF1aXJlKCcuLi9jb25zdGFudHMnKTtcblxuY2xhc3MgQ3Jvd2RmdW5kaW5nSG9tZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB1cHN0cmVhbSA9IGxvYWRVcHN0cmVhbVNldHRpbmdzKCk7XG4gICAgY29uc3QgcGF5am9pblByZWZzID0gbG9hZFBheWpvaW5QcmVmZXJlbmNlcygpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgcmVmcmVzaGluZzogZmFsc2UsXG4gICAgICB1cHN0cmVhbSxcbiAgICAgIHBheWpvaW5FbmFibGVkOiAhIXBheWpvaW5QcmVmcy5vcGVyYXRvckRlcG9zaXQsXG4gICAgICBiaXRjb2luU3RhdHVzOiB7IGF2YWlsYWJsZTogZmFsc2UsIHN0YXR1czogJ1NUQVJUSU5HJyB9LFxuICAgICAgY3Jvd2RmdW5kaW5nQ2FtcGFpZ25zOiBbXSxcbiAgICAgIGNmVGl0bGU6ICcnLFxuICAgICAgY2ZHb2FsU2F0czogJzUwMDAwMCcsXG4gICAgICBjZk1pblNhdHM6ICcxMDAwMCcsXG4gICAgICBjZkJlbmVmaWNpYXJ5SGV4OiAnJyxcbiAgICAgIGNmQnVzeTogZmFsc2UsXG4gICAgICBjZkVycm9yOiBudWxsLFxuICAgICAgY2ZTdWNjZXNzOiBudWxsLFxuICAgICAgY2ZBY3BBbW91bnRTYXRzOiAnMTAwMDAnLFxuICAgICAgY2ZQYXlqb2luQW1vdW50U2F0czogJzI1MDAwJyxcbiAgICAgIGNmUGF5am9pbkJpcDIxOiAnJyxcbiAgICAgIGNmUGF5am9pblNlc3Npb25JZDogJycsXG4gICAgICBjZlZhdWx0U3RhdHM6IHt9LFxuICAgICAgY2ZSZWZ1bmRBZnRlckJsb2NrczogJzEwMDgnLFxuICAgICAgY2ZTaGFyZUFtb3VudFNhdHM6ICcxMDAwMCcsXG4gICAgICBjZlFyRGF0YVVybDogJycsXG4gICAgICBjZlFyT3BlbjogZmFsc2UsXG4gICAgICBjZlFyVXJpOiAnJyxcbiAgICAgIGNmUGF5b3V0TW9kYWw6IG51bGwsXG4gICAgICBjZlBheW91dERlc3Q6ICcnLFxuICAgICAgY2ZQYXlvdXRGZWVTYXRzOiAnMjAwMCcsXG4gICAgICBjZlBheW91dFBzYnQ6ICcnLFxuICAgICAgY2ZQYXlvdXRCdXN5OiBmYWxzZSxcbiAgICAgIGNmUGF5b3V0RXJyOiBudWxsLFxuICAgICAgY2ZQYXlvdXRUeGlkOiBudWxsLFxuICAgICAgY2ZQYXlvdXRIaW50OiBudWxsLFxuICAgICAgY2ZSZWZ1bmRNb2RhbDogbnVsbCxcbiAgICAgIGNmUmVmdW5kRGVzdDogJycsXG4gICAgICBjZlJlZnVuZEZ1bmRlZFR4aWQ6ICcnLFxuICAgICAgY2ZSZWZ1bmRWb3V0OiAnJyxcbiAgICAgIGNmUmVmdW5kRmVlU2F0czogJzIwMDAnLFxuICAgICAgY2ZSZWZ1bmRCdXN5OiBmYWxzZSxcbiAgICAgIGNmUmVmdW5kRXJyOiBudWxsLFxuICAgICAgY2ZSZWZ1bmRUeEhleDogJycsXG4gICAgICBjZlJlZnVuZFR4aWQ6IG51bGwsXG4gICAgICBodWJVaUZsYWdzUmV2OiAwXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAvLyBBIHNob3J0IGZvbGxvdy11cCByZWZyZXNoIHNtb290aHMgb3ZlciBzdGFydHVwIHJhY2VzIHdoZXJlIHRoZSBmaXJzdFxuICAgIC8vIGZldGNoIGhhcHBlbnMgYmVmb3JlIHdhbGxldC9pbmRleCBzdGF0ZSBpcyBmdWxseSByZWFkeS5cbiAgICB0aGlzLl9kZWxheWVkUmVmcmVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9LCAxMjAwKTtcbiAgICB0aGlzLl9odWJVaUZsYWdzVW5zdWIgPSBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncygoKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKChzKSA9PiAoeyBodWJVaUZsYWdzUmV2OiAocy5odWJVaUZsYWdzUmV2IHx8IDApICsgMSB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCAoKSB7XG4gICAgaWYgKHRoaXMuX2RlbGF5ZWRSZWZyZXNoVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLl9kZWxheWVkUmVmcmVzaFRpbWVyKTtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2h1YlVpRmxhZ3NVbnN1YiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5faHViVWlGbGFnc1Vuc3ViKCk7XG4gIH1cblxuICBnZXRJZGVudGl0eSAoKSB7XG4gICAgY29uc3QgaSA9ICh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuaWRlbnRpdHkpIHx8IHt9O1xuICAgIGNvbnN0IGEgPSAodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmF1dGgpIHx8IHt9O1xuICAgIGNvbnN0IGJyaWRnZSA9IHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5icmlkZ2VSZWYgJiYgdGhpcy5wcm9wcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICBsZXQgYnJpZGdlQXV0aCA9IHt9O1xuICAgIGxldCBicmlkZ2VLZXkgPSB7fTtcbiAgICB0cnkge1xuICAgICAgYnJpZGdlQXV0aCA9IChicmlkZ2UgJiYgYnJpZGdlLnByb3BzICYmIGJyaWRnZS5wcm9wcy5hdXRoKSB8fCB7fTtcbiAgICAgIGJyaWRnZUtleSA9IChicmlkZ2UgJiYgdHlwZW9mIGJyaWRnZS5fZ2V0SWRlbnRpdHlLZXkgPT09ICdmdW5jdGlvbicgJiYgYnJpZGdlLl9nZXRJZGVudGl0eUtleSgpKSB8fCB7fTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiB7XG4gICAgICAuLi5hLFxuICAgICAgLi4uaSxcbiAgICAgIHhwcnY6IGkueHBydiB8fCBhLnhwcnYgfHwgYnJpZGdlQXV0aC54cHJ2IHx8IGJyaWRnZUtleS54cHJ2LFxuICAgICAgeHB1YjogaS54cHViIHx8IGEueHB1YiB8fCBicmlkZ2VBdXRoLnhwdWIgfHwgYnJpZGdlS2V5LnhwdWJcbiAgICB9O1xuICB9XG5cbiAgZ2V0QWRkcmVzc1BsYWNlaG9sZGVyIChuZXR3b3JrKSB7XG4gICAgY29uc3QgbiA9IFN0cmluZyhuZXR3b3JrIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChuID09PSAncmVndGVzdCcpIHJldHVybiBcImJjcnQxLi4uIG9yIG0vNDQnLzAnLzAnLzAvMFwiO1xuICAgIGlmIChuID09PSAndGVzdG5ldCcgfHwgbiA9PT0gJ3NpZ25ldCcpIHJldHVybiAndGIxLi4uIG9yIDJOLi4uJztcbiAgICBpZiAobiA9PT0gJ21haW5uZXQnIHx8IG4gPT09ICdtYWluJykgcmV0dXJuICdiYzEuLi4gb3IgMy4uLic7XG4gICAgcmV0dXJuICdhZGRyZXNzIGZvciBjdXJyZW50IG5ldHdvcmsnO1xuICB9XG5cbiAgc2F0c1RvQlRDICh2YWx1ZSkge1xuICAgIHJldHVybiBmb3JtYXRCdGNGcm9tU2F0cyh2YWx1ZSk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoICgpIHtcbiAgICBjb25zdCB1cHN0cmVhbSA9IGxvYWRVcHN0cmVhbVNldHRpbmdzKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHJlZnJlc2hpbmc6IHRydWUsIHVwc3RyZWFtIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiaXRjb2luU3RhdHVzID0gYXdhaXQgZmV0Y2hCaXRjb2luU3RhdHVzKHVwc3RyZWFtKS5jYXRjaCgoKSA9PiAoeyBhdmFpbGFibGU6IGZhbHNlIH0pKTtcbiAgICAgIGNvbnN0IGNyb3dkZnVuZGluZ0NhbXBhaWducyA9IGF3YWl0IGZldGNoQ3Jvd2RmdW5kaW5nQ2FtcGFpZ25zKHVwc3RyZWFtKS5jYXRjaCgoKSA9PiBbXSk7XG4gICAgICBjb25zdCBjYW1wYWlnbnNOb3JtID0gQXJyYXkuaXNBcnJheShjcm93ZGZ1bmRpbmdDYW1wYWlnbnMpID8gY3Jvd2RmdW5kaW5nQ2FtcGFpZ25zIDogW107XG4gICAgICBsZXQgY2ZWYXVsdFN0YXRzID0ge307XG4gICAgICBpZiAoY2FtcGFpZ25zTm9ybS5sZW5ndGggPiAwICYmIGJpdGNvaW5TdGF0dXMgJiYgYml0Y29pblN0YXR1cy5hdmFpbGFibGUpIHtcbiAgICAgICAgY29uc3QgZGV0YWlsUm93cyA9IGF3YWl0IFByb21pc2UuYWxsKGNhbXBhaWduc05vcm0ubWFwKGFzeW5jIChjKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBjICYmIFN0cmluZyhjLmNhbXBhaWduSWQgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgICBpZiAoIWlkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZCA9IGF3YWl0IGZldGNoQ3Jvd2RmdW5kaW5nQ2FtcGFpZ24odXBzdHJlYW0sIGlkKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBiYWxhbmNlU2F0czogTnVtYmVyKGQuYmFsYW5jZVNhdHMpIHx8IDAsXG4gICAgICAgICAgICAgIHVuc3BlbnRDb3VudDogTnVtYmVyKGQudW5zcGVudENvdW50KSB8fCAwLFxuICAgICAgICAgICAgICBnb2FsTWV0OiAhIWQuZ29hbE1ldCxcbiAgICAgICAgICAgICAgdmF1bHRVdHhvczogQXJyYXkuaXNBcnJheShkLnZhdWx0VXR4b3MpID8gZC52YXVsdFV0eG9zIDogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4geyBpZCwgZXJyb3I6IGVyciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlIDogJ3VuYXZhaWxhYmxlJyB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICBmb3IgKGNvbnN0IHggb2YgZGV0YWlsUm93cykge1xuICAgICAgICAgIGlmICh4ICYmIHguaWQpIGNmVmF1bHRTdGF0c1t4LmlkXSA9IHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcmVmcmVzaGluZzogZmFsc2UsXG4gICAgICAgIGJpdGNvaW5TdGF0dXM6IGJpdGNvaW5TdGF0dXMgJiYgdHlwZW9mIGJpdGNvaW5TdGF0dXMgPT09ICdvYmplY3QnID8gYml0Y29pblN0YXR1cyA6IHsgYXZhaWxhYmxlOiBmYWxzZSB9LFxuICAgICAgICBjcm93ZGZ1bmRpbmdDYW1wYWlnbnM6IGNhbXBhaWduc05vcm0sXG4gICAgICAgIGNmVmF1bHRTdGF0c1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlLCByZWZyZXNoaW5nOiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBfYmlwMjFGb3JSb3cgKHJvdykge1xuICAgIGNvbnN0IGFkZHIgPSBTdHJpbmcocm93ICYmIHJvdy5hZGRyZXNzIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgbWluQyA9IE1hdGgucm91bmQoTnVtYmVyKHJvdyAmJiByb3cubWluQ29udHJpYnV0aW9uU2F0cyB8fCAwKSkgfHwgNTQ2O1xuICAgIGNvbnN0IHNoYXJlID0gTWF0aC5yb3VuZChOdW1iZXIodGhpcy5zdGF0ZS5jZlNoYXJlQW1vdW50U2F0cyB8fCAwKSk7XG4gICAgY29uc3Qgc2F0cyA9IE51bWJlci5pc0Zpbml0ZShzaGFyZSkgJiYgc2hhcmUgPj0gbWluQyA/IHNoYXJlIDogbWluQztcbiAgICByZXR1cm4gYnVpbGRDcm93ZGZ1bmRGdW5kZXJCaXRjb2luVXJpKGFkZHIsIHNhdHMgLyBTQVRTX1BFUl9CVEMpO1xuICB9XG5cbiAgX3BheW1lbnRzTGlua0ZvclJvdyAocm93KSB7XG4gICAgY29uc3QgYWRkciA9IFN0cmluZyhyb3cgJiYgcm93LmFkZHJlc3MgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBtaW5DID0gTWF0aC5yb3VuZChOdW1iZXIocm93ICYmIHJvdy5taW5Db250cmlidXRpb25TYXRzIHx8IDApKSB8fCA1NDY7XG4gICAgY29uc3Qgc2hhcmUgPSBNYXRoLnJvdW5kKE51bWJlcih0aGlzLnN0YXRlLmNmU2hhcmVBbW91bnRTYXRzIHx8IDApKTtcbiAgICBjb25zdCBzYXRzID0gTnVtYmVyLmlzRmluaXRlKHNoYXJlKSAmJiBzaGFyZSA+PSBtaW5DID8gc2hhcmUgOiBtaW5DO1xuICAgIHJldHVybiBidWlsZENyb3dkZnVuZFBheW1lbnRzRGVlcExpbmsoeyBwYXlUbzogYWRkciwgYW1vdW50U2F0czogc2F0cyB9KTtcbiAgfVxuXG4gIGhhbmRsZUNmU2hvd0JpcDIxUXIgKHJvdykge1xuICAgIGNvbnN0IHVyaSA9IHRoaXMuX2JpcDIxRm9yUm93KHJvdyk7XG4gICAgaWYgKCF1cmkpIHJldHVybjtcbiAgICBRUkNvZGUudG9EYXRhVVJMKHVyaSwgeyB3aWR0aDogMjIwLCBtYXJnaW46IDEsIGVycm9yQ29ycmVjdGlvbkxldmVsOiAnTScgfSwgKGVyciwgdXJsKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm47XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2ZRckRhdGFVcmw6IHVybCwgY2ZRck9wZW46IHRydWUsIGNmUXJVcmk6IHVyaSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9jbG9zZUNmUXIgKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBjZlFyT3BlbjogZmFsc2UsIGNmUXJEYXRhVXJsOiAnJywgY2ZRclVyaTogJycgfSk7XG4gIH1cblxuICBoYW5kbGVDZkZpbGxCZW5lZmljaWFyeUZyb21XYWxsZXQgKCkge1xuICAgIGNvbnN0IGhleCA9IGdldENyb3dkZnVuZGluZ0JlbmVmaWNpYXJ5UHVia2V5SGV4KHRoaXMuZ2V0SWRlbnRpdHkoKSk7XG4gICAgaWYgKCFoZXgpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzICYmIHR5cGVvZiB0aGlzLnByb3BzLm9uUmVxdWlyZVVubG9jayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0cnkgeyB0aGlzLnByb3BzLm9uUmVxdWlyZVVubG9jaygpOyB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGNmRXJyb3I6ICdVbmxvY2sgaWRlbnRpdHkgc28gd2UgY2FuIGRlcml2ZSB5b3VyIHBheW1lbnQgd2FsbGV0IHB1YmtleSBhdCBtLzQ0XFwnLzBcXCcvMFxcJy8wLzAuJyxcbiAgICAgICAgY2ZTdWNjZXNzOiBudWxsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGNmQmVuZWZpY2lhcnlIZXg6IGhleCwgY2ZFcnJvcjogbnVsbCwgY2ZTdWNjZXNzOiBudWxsIH0pO1xuICB9XG5cbiAgaGFuZGxlQ2ZGaWxsUGF5b3V0QWRkcmVzc0Zyb21XYWxsZXQgKCkge1xuICAgIGNvbnN0IGJpdGNvaW5OZXR3b3JrID0gU3RyaW5nKCh0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMgJiYgdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLm5ldHdvcmspIHx8ICcnKS50b0xvd2VyQ2FzZSgpIHx8ICdyZWd0ZXN0JztcbiAgICBjb25zdCBhZGRyID0gZ2V0Q3Jvd2RmdW5kaW5nQmVuZWZpY2lhcnlQYXlvdXRBZGRyZXNzKHRoaXMuZ2V0SWRlbnRpdHkoKSwgYml0Y29pbk5ldHdvcmspO1xuICAgIGlmICghYWRkcikge1xuICAgICAgaWYgKHRoaXMucHJvcHMgJiYgdHlwZW9mIHRoaXMucHJvcHMub25SZXF1aXJlVW5sb2NrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7IHRoaXMucHJvcHMub25SZXF1aXJlVW5sb2NrKCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY2ZQYXlvdXRFcnI6ICdDYW5ub3QgZGVyaXZlIHBheW91dCBhZGRyZXNzIGZyb20gd2FsbGV0IGNvbnRleHQuIFVubG9jayBpZGVudGl0eSAob3IgZW50ZXIgYW55IGRlc3RpbmF0aW9uIG1hbnVhbGx5KS4nXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGNmUGF5b3V0RGVzdDogYWRkciwgY2ZQYXlvdXRFcnI6IG51bGwgfSk7XG4gIH1cblxuICBoYW5kbGVDZlBheW91dEJlbmVmaWNpYXJ5U2lnbiAoKSB7XG4gICAgY29uc3QgcHNidCA9IFN0cmluZyh0aGlzLnN0YXRlLmNmUGF5b3V0UHNidCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghcHNidCkgcmV0dXJuO1xuICAgIGNvbnN0IGJpdGNvaW5OZXR3b3JrID0gU3RyaW5nKCh0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMgJiYgdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLm5ldHdvcmspIHx8ICcnKS50b0xvd2VyQ2FzZSgpIHx8ICdyZWd0ZXN0JztcbiAgICB0aGlzLnNldFN0YXRlKHsgY2ZQYXlvdXRCdXN5OiB0cnVlLCBjZlBheW91dEVycjogbnVsbCB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbmV4dEI2NCA9IHNpZ25Dcm93ZGZ1bmRpbmdQYXlvdXRQc2J0QmVuZWZpY2lhcnkocHNidCwgdGhpcy5nZXRJZGVudGl0eSgpLCBiaXRjb2luTmV0d29yayk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2ZQYXlvdXRCdXN5OiBmYWxzZSwgY2ZQYXlvdXRQc2J0OiBuZXh0QjY0IH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY2ZQYXlvdXRCdXN5OiBmYWxzZSxcbiAgICAgICAgY2ZQYXlvdXRFcnI6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlQ3Jvd2RmdW5kaW5nQ3JlYXRlICgpIHtcbiAgICBjb25zdCBhZG1pbiA9IHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIodGhpcy5wcm9wcy5hZG1pblRva2VuKTtcbiAgICBpZiAoIWFkbWluKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY2ZFcnJvcjogJ1NhdmUgdGhlIEh1YiBhZG1pbiB0b2tlbiAoU2V0dGluZ3MgLyBCaXRjb2luIGhvbWUpIHRvIGNyZWF0ZSBUYXByb290IGNhbXBhaWducy4nLFxuICAgICAgICBjZlN1Y2Nlc3M6IG51bGxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiZW4gPSBTdHJpbmcodGhpcy5zdGF0ZS5jZkJlbmVmaWNpYXJ5SGV4IHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIS9eKDAyfDAzKVswLTlhLWZdezY0fSQvLnRlc3QoYmVuKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNmRXJyb3I6ICdCZW5lZmljaWFyeSBtdXN0IGJlIGEgY29tcHJlc3NlZCBzZWNwMjU2azEgcHVia2V5IGhleCAoMDIgb3IgMDMgKyA2NCBoZXgpLicsIGNmU3VjY2VzczogbnVsbCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZ29hbFNhdHMgPSBNYXRoLnJvdW5kKE51bWJlcih0aGlzLnN0YXRlLmNmR29hbFNhdHMgfHwgMCkpO1xuICAgIGNvbnN0IG1pblNhdHMgPSBNYXRoLnJvdW5kKE51bWJlcih0aGlzLnN0YXRlLmNmTWluU2F0cyB8fCAwKSk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZ29hbFNhdHMpIHx8IGdvYWxTYXRzIDwgMTAwMCB8fCAhTnVtYmVyLmlzRmluaXRlKG1pblNhdHMpIHx8IG1pblNhdHMgPCA1NDYpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjZkVycm9yOiAnR29hbCBtdXN0IGJlIOKJpSAxMDAwIHNhdHM7IG1pbmltdW0gY29udHJpYnV0aW9uIOKJpSA1NDYuJywgY2ZTdWNjZXNzOiBudWxsIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobWluU2F0cyA+IGdvYWxTYXRzKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2ZFcnJvcjogJ01pbmltdW0gY29udHJpYnV0aW9uIGNhbm5vdCBleGNlZWQgZ29hbC4nLCBjZlN1Y2Nlc3M6IG51bGwgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByZWZ1bmRBZnRlckJsb2NrcyA9IE1hdGgucm91bmQoTnVtYmVyKHRoaXMuc3RhdGUuY2ZSZWZ1bmRBZnRlckJsb2NrcyB8fCAxMDA4KSk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmVmdW5kQWZ0ZXJCbG9ja3MpIHx8IHJlZnVuZEFmdGVyQmxvY2tzIDwgNDgpIHJlZnVuZEFmdGVyQmxvY2tzID0gMTAwODtcbiAgICB0aGlzLnNldFN0YXRlKHsgY2ZCdXN5OiB0cnVlLCBjZkVycm9yOiBudWxsLCBjZlN1Y2Nlc3M6IG51bGwgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNyZWF0ZUNyb3dkZnVuZGluZ0NhbXBhaWduKHRoaXMuc3RhdGUudXBzdHJlYW0sIHtcbiAgICAgICAgdGl0bGU6IFN0cmluZyh0aGlzLnN0YXRlLmNmVGl0bGUgfHwgJ0Nyb3dkZnVuZCcpLnRyaW0oKS5zbGljZSgwLCAyMDApIHx8ICdDcm93ZGZ1bmQnLFxuICAgICAgICBnb2FsU2F0cyxcbiAgICAgICAgbWluQ29udHJpYnV0aW9uU2F0czogbWluU2F0cyxcbiAgICAgICAgYmVuZWZpY2lhcnlQdWJrZXlIZXg6IGJlbixcbiAgICAgICAgcmVmdW5kQWZ0ZXJCbG9ja3NcbiAgICAgIH0sIGFkbWluKTtcbiAgICAgIGNvbnN0IGNhbXAgPSByZXMgJiYgcmVzLmNhbXBhaWduID8gcmVzLmNhbXBhaWduIDogbnVsbDtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjZkJ1c3k6IGZhbHNlLFxuICAgICAgICBjZlN1Y2Nlc3M6IGNhbXBcbiAgICAgICAgICA/IGBDYW1wYWlnbiAke2NhbXAuY2FtcGFpZ25JZH0g4oCUIHZhdWx0ICR7Y2FtcC5hZGRyZXNzfWBcbiAgICAgICAgICA6ICdDYW1wYWlnbiBjcmVhdGVkLicsXG4gICAgICAgIGNmVGl0bGU6ICcnXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY2ZCdXN5OiBmYWxzZSxcbiAgICAgICAgY2ZFcnJvcjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVDcm93ZGZ1bmRpbmdDb3B5QWNwUHNidCAoY2FtcGFpZ25JZCkge1xuICAgIGNvbnN0IGlkID0gU3RyaW5nKGNhbXBhaWduSWQgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBhbXQgPSBNYXRoLnJvdW5kKE51bWJlcih0aGlzLnN0YXRlLmNmQWNwQW1vdW50U2F0cyB8fCAwKSk7XG4gICAgaWYgKCFpZCkgcmV0dXJuO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFtdCkgfHwgYW10IDwgNTQ2KSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2ZFcnJvcjogJ1NldCBBQ1AgbGVnIGFtb3VudCAoc2F0cykg4omlIDU0Ni4nLCBjZlN1Y2Nlc3M6IG51bGwgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hDcm93ZGZ1bmRpbmdBY3BEb25hdGlvblBzYnQodGhpcy5zdGF0ZS51cHN0cmVhbSwgaWQsIGFtdCk7XG4gICAgICBjb25zdCBiNjQgPSBkYXRhICYmIGRhdGEucHNidEJhc2U2NCA/IFN0cmluZyhkYXRhLnBzYnRCYXNlNjQpIDogJyc7XG4gICAgICBpZiAoIWI2NCkgdGhyb3cgbmV3IEVycm9yKCdIdWIgZGlkIG5vdCByZXR1cm4gcHNidEJhc2U2NC4nKTtcbiAgICAgIGF3YWl0IGNvcHlUb0NsaXBib2FyZChiNjQpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGNmRXJyb3I6IG51bGwsXG4gICAgICAgIGNmU3VjY2VzczogYENvcGllZCBvdXRwdXRzLW9ubHkgUFNCVCAoJHthbXR9IHNhdHMgdG8gY2FtcGFpZ24pLiBBZGQgaW5wdXRzOyBzaWduIHdpdGggU0lHSEFTSF9BTEx8QU5ZT05FQ0FOUEFZICgweDgxKS5gXG4gICAgICB9KTtcbiAgICAgIHB1c2hVaU5vdGlmaWNhdGlvbih7XG4gICAgICAgIGlkOiBgY2YtYWNwLSR7aWR9LSR7YW10fWAsXG4gICAgICAgIGtpbmQ6ICdiaXRjb2luJyxcbiAgICAgICAgdGl0bGU6ICdBQ1AgY3Jvd2RmdW5kIFBTQlQgY29waWVkJyxcbiAgICAgICAgc3VidGl0bGU6IGAke2FtdH0gc2F0cyBvdXRwdXQgdG8gY2FtcGFpZ24gJHtpZC5zbGljZSgwLCA4KX3igKZgXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGNmRXJyb3I6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgY2ZTdWNjZXNzOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVDcm93ZGZ1bmRpbmdQYXlqb2luVG9WYXVsdCAoY2FtcGFpZ24pIHtcbiAgICBpZiAoIXRoaXMuc3RhdGUucGF5am9pbkVuYWJsZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjZkVycm9yOiAnRW5hYmxlIFBheWpvaW4gKGFib3ZlKSBmb3IgZGVwb3NpdCBzZXNzaW9ucy4nLCBjZlN1Y2Nlc3M6IG51bGwgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGMgPSBjYW1wYWlnbiB8fCB7fTtcbiAgICBjb25zdCBhZGRyID0gU3RyaW5nKGMuYWRkcmVzcyB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IGNpZCA9IFN0cmluZyhjLmNhbXBhaWduSWQgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIWFkZHIpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjZkVycm9yOiAnQ2FtcGFpZ24gaGFzIG5vIGFkZHJlc3MuJywgY2ZTdWNjZXNzOiBudWxsIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhbW91bnRTYXRzID0gTWF0aC5yb3VuZChOdW1iZXIodGhpcy5zdGF0ZS5jZlBheWpvaW5BbW91bnRTYXRzIHx8IDApKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShhbW91bnRTYXRzKSB8fCBhbW91bnRTYXRzIDwgMSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNmRXJyb3I6ICdTZXQgUGF5am9pbiByZXF1ZXN0IGFtb3VudCAoc2F0cykgZm9yIHRoZSBCSVAyMSBsaW5rLicsIGNmU3VjY2VzczogbnVsbCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlY2VpdmVXYWxsZXQgPSBnZXROZXh0UmVjZWl2ZVdhbGxldENvbnRleHQodGhpcy5nZXRJZGVudGl0eSgpKTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBjcmVhdGVQYXlqb2luRGVwb3NpdCh0aGlzLnN0YXRlLnVwc3RyZWFtLCByZWNlaXZlV2FsbGV0LCB7XG4gICAgICAgIGFkZHJlc3M6IGFkZHIsXG4gICAgICAgIGFtb3VudFNhdHMsXG4gICAgICAgIGxhYmVsOiBTdHJpbmcoYy50aXRsZSB8fCAnQ3Jvd2RmdW5kJykuc2xpY2UoMCwgODApLFxuICAgICAgICBtZW1vOiBgY3Jvd2RmdW5kOiR7Y2lkfWBcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdXJpID0gU3RyaW5nKHNlc3Npb24uYmlwMjFVcmkgfHwgJycpLnRyaW0oKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjZkVycm9yOiBudWxsLFxuICAgICAgICBjZlN1Y2Nlc3M6IHVyaVxuICAgICAgICAgID8gJ1BheWpvaW4gc2Vzc2lvbiBwb2ludHMgYXQgdGhlIGNhbXBhaWduIHZhdWx0LiBPcGVuaW5nIFBheW1lbnRzIHdpdGggdGhlIEJJUDIxIFVSSeKApidcbiAgICAgICAgICA6ICdQYXlqb2luIHNlc3Npb24gY3JlYXRlZC4nLFxuICAgICAgICBjZlBheWpvaW5CaXAyMTogdXJpLFxuICAgICAgICBjZlBheWpvaW5TZXNzaW9uSWQ6IFN0cmluZyhzZXNzaW9uLmlkIHx8ICcnKS50cmltKClcbiAgICAgIH0pO1xuICAgICAgaWYgKHVyaSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHB1c2hVaU5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBpZDogYGNmLXBqLSR7c2Vzc2lvbi5pZCB8fCBjaWR9YCxcbiAgICAgICAgICAgIGtpbmQ6ICdwYXlqb2luJyxcbiAgICAgICAgICAgIHRpdGxlOiAnUGF5am9pbiDihpIgY3Jvd2RmdW5kIHZhdWx0JyxcbiAgICAgICAgICAgIHN1YnRpdGxlOiBgJHthbW91bnRTYXRzfSBzYXRzYCxcbiAgICAgICAgICAgIGhyZWY6IGAvcGF5bWVudHM/Yml0Y29pblVyaT0ke2VuY29kZVVSSUNvbXBvbmVudCh1cmkpfWAsXG4gICAgICAgICAgICBjb3B5VGV4dDogdXJpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICAgICAgY29uc3QgbmF2ID0gdGhpcy5wcm9wcy5uYXZpZ2F0ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBuYXYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBuYXYoYC9wYXltZW50cz9iaXRjb2luVXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVyaSl9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY2ZFcnJvcjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICBjZlN1Y2Nlc3M6IG51bGxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9jbG9zZUNmUGF5b3V0TW9kYWwgKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY2ZQYXlvdXRNb2RhbDogbnVsbCxcbiAgICAgIGNmUGF5b3V0RGVzdDogJycsXG4gICAgICBjZlBheW91dEZlZVNhdHM6ICcyMDAwJyxcbiAgICAgIGNmUGF5b3V0UHNidDogJycsXG4gICAgICBjZlBheW91dEJ1c3k6IGZhbHNlLFxuICAgICAgY2ZQYXlvdXRFcnI6IG51bGwsXG4gICAgICBjZlBheW91dFR4aWQ6IG51bGwsXG4gICAgICBjZlBheW91dEhpbnQ6IG51bGxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUNmUGF5b3V0QnVpbGRQc2J0ICgpIHtcbiAgICBjb25zdCByb3cgPSB0aGlzLnN0YXRlLmNmUGF5b3V0TW9kYWw7XG4gICAgaWYgKCFyb3cgfHwgIXJvdy5jYW1wYWlnbklkKSByZXR1cm47XG4gICAgY29uc3QgZGVzdCA9IFN0cmluZyh0aGlzLnN0YXRlLmNmUGF5b3V0RGVzdCB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IGZlZVNhdHMgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKE51bWJlcih0aGlzLnN0YXRlLmNmUGF5b3V0RmVlU2F0cyB8fCAxMDAwKSkpO1xuICAgIGlmICghZGVzdCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGNmUGF5b3V0RXJyOiAnRW50ZXIgYSBiZW5lZmljaWFyeSBwYXlvdXQgYWRkcmVzcyAoYmVjaDMyKSwgb3IgdXNlIEZpbGwgZnJvbSB3YWxsZXQuJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY2ZQYXlvdXRCdXN5OiB0cnVlLFxuICAgICAgY2ZQYXlvdXRFcnI6IG51bGwsXG4gICAgICBjZlBheW91dFR4aWQ6IG51bGwsXG4gICAgICBjZlBheW91dEhpbnQ6IG51bGwsXG4gICAgICBjZlBheW91dFBzYnQ6ICcnXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoQ3Jvd2RmdW5kaW5nUGF5b3V0UHNidCh0aGlzLnN0YXRlLnVwc3RyZWFtLCByb3cuY2FtcGFpZ25JZCwge1xuICAgICAgICBkZXN0aW5hdGlvbjogZGVzdCxcbiAgICAgICAgZmVlU2F0c1xuICAgICAgfSk7XG4gICAgICBjb25zdCBiNjQgPSByZXMgJiYgcmVzLnBzYnRCYXNlNjQgPyBTdHJpbmcocmVzLnBzYnRCYXNlNjQpIDogJyc7XG4gICAgICBpZiAoIWI2NCkgdGhyb3cgbmV3IEVycm9yKCdIdWIgZGlkIG5vdCByZXR1cm4gcHNidEJhc2U2NC4nKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjZlBheW91dEJ1c3k6IGZhbHNlLFxuICAgICAgICBjZlBheW91dFBzYnQ6IGI2NCxcbiAgICAgICAgY2ZQYXlvdXRIaW50OiByZXMgJiYgcmVzLm5leHQgPyBTdHJpbmcocmVzLm5leHQpIDogbnVsbFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjZlBheW91dEJ1c3k6IGZhbHNlLFxuICAgICAgICBjZlBheW91dFBzYnQ6ICcnLFxuICAgICAgICBjZlBheW91dEVycjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYW5kbGVDZlBheW91dEFyYml0ZXJTaWduICgpIHtcbiAgICBjb25zdCByb3cgPSB0aGlzLnN0YXRlLmNmUGF5b3V0TW9kYWw7XG4gICAgY29uc3QgcHNidCA9IFN0cmluZyh0aGlzLnN0YXRlLmNmUGF5b3V0UHNidCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghcm93IHx8ICFyb3cuY2FtcGFpZ25JZCB8fCAhcHNidCkgcmV0dXJuO1xuICAgIGNvbnN0IGFkbWluID0gcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3Nlcih0aGlzLnByb3BzLmFkbWluVG9rZW4pO1xuICAgIGlmICghYWRtaW4pIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjZlBheW91dEVycjogJ0FkbWluIHRva2VuIHJlcXVpcmVkIGZvciBIdWIgYXJiaXRlciBjby1zaWduLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBjZlBheW91dEJ1c3k6IHRydWUsIGNmUGF5b3V0RXJyOiBudWxsIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBwb3N0Q3Jvd2RmdW5kaW5nUGF5b3V0U2lnbkFyYml0ZXIoXG4gICAgICAgIHRoaXMuc3RhdGUudXBzdHJlYW0sXG4gICAgICAgIHJvdy5jYW1wYWlnbklkLFxuICAgICAgICBwc2J0LFxuICAgICAgICBhZG1pblxuICAgICAgKTtcbiAgICAgIGNvbnN0IG5leHRCNjQgPSByZXMgJiYgcmVzLnBzYnRCYXNlNjQgPyBTdHJpbmcocmVzLnBzYnRCYXNlNjQpIDogJyc7XG4gICAgICBpZiAoIW5leHRCNjQpIHRocm93IG5ldyBFcnJvcignTm8gcHNidEJhc2U2NCBhZnRlciBhcmJpdGVyIHNpZ24uJyk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2ZQYXlvdXRCdXN5OiBmYWxzZSwgY2ZQYXlvdXRQc2J0OiBuZXh0QjY0IH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY2ZQYXlvdXRCdXN5OiBmYWxzZSxcbiAgICAgICAgY2ZQYXlvdXRFcnI6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFuZGxlQ2ZQYXlvdXRCcm9hZGNhc3QgKCkge1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuc3RhdGUuY2ZQYXlvdXRNb2RhbDtcbiAgICBjb25zdCBwc2J0ID0gU3RyaW5nKHRoaXMuc3RhdGUuY2ZQYXlvdXRQc2J0IHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFyb3cgfHwgIXJvdy5jYW1wYWlnbklkIHx8ICFwc2J0KSByZXR1cm47XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGNmUGF5b3V0QnVzeTogdHJ1ZSwgY2ZQYXlvdXRFcnI6IG51bGwgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHBvc3RDcm93ZGZ1bmRpbmdQYXlvdXRCcm9hZGNhc3QodGhpcy5zdGF0ZS51cHN0cmVhbSwgcm93LmNhbXBhaWduSWQsIHBzYnQpO1xuICAgICAgY29uc3QgdHhpZCA9IHJlcyAmJiByZXMudHhpZCA/IFN0cmluZyhyZXMudHhpZCkgOiAnJztcbiAgICAgIGlmICghdHhpZCkgdGhyb3cgbmV3IEVycm9yKCdObyB0eGlkIGFmdGVyIGJyb2FkY2FzdC4nKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjZlBheW91dEJ1c3k6IGZhbHNlLCBjZlBheW91dFR4aWQ6IHR4aWQgfSk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGNmUGF5b3V0QnVzeTogZmFsc2UsXG4gICAgICAgIGNmUGF5b3V0RXJyOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9jbG9zZUNmUmVmdW5kTW9kYWwgKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY2ZSZWZ1bmRNb2RhbDogbnVsbCxcbiAgICAgIGNmUmVmdW5kRGVzdDogJycsXG4gICAgICBjZlJlZnVuZEZ1bmRlZFR4aWQ6ICcnLFxuICAgICAgY2ZSZWZ1bmRWb3V0OiAnJyxcbiAgICAgIGNmUmVmdW5kRmVlU2F0czogJzIwMDAnLFxuICAgICAgY2ZSZWZ1bmRCdXN5OiBmYWxzZSxcbiAgICAgIGNmUmVmdW5kRXJyOiBudWxsLFxuICAgICAgY2ZSZWZ1bmRUeEhleDogJycsXG4gICAgICBjZlJlZnVuZFR4aWQ6IG51bGxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUNmUmVmdW5kUHJlcGFyZSAoKSB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5zdGF0ZS5jZlJlZnVuZE1vZGFsO1xuICAgIGlmICghcm93IHx8ICFyb3cuY2FtcGFpZ25JZCkgcmV0dXJuO1xuICAgIGNvbnN0IGFkbWluID0gcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3Nlcih0aGlzLnByb3BzLmFkbWluVG9rZW4pO1xuICAgIGlmICghYWRtaW4pIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjZlJlZnVuZEVycjogJ0FkbWluIHRva2VuIHJlcXVpcmVkIGZvciBhcmJpdGVyIHJlZnVuZC4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZXN0ID0gU3RyaW5nKHRoaXMuc3RhdGUuY2ZSZWZ1bmREZXN0IHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgZnVuZGVkVHhpZCA9IFN0cmluZyh0aGlzLnN0YXRlLmNmUmVmdW5kRnVuZGVkVHhpZCB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IGZlZVNhdHMgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKE51bWJlcih0aGlzLnN0YXRlLmNmUmVmdW5kRmVlU2F0cyB8fCAxMDAwKSkpO1xuICAgIGNvbnN0IHZvdXRSYXcgPSBTdHJpbmcodGhpcy5zdGF0ZS5jZlJlZnVuZFZvdXQgfHwgJycpLnRyaW0oKTtcbiAgICBsZXQgdm91dE9wdDtcbiAgICBpZiAodm91dFJhdyAhPT0gJycgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcih2b3V0UmF3KSkpIHZvdXRPcHQgPSBOdW1iZXIodm91dFJhdyk7XG4gICAgaWYgKCFkZXN0IHx8ICFmdW5kZWRUeGlkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2ZSZWZ1bmRFcnI6ICdEZXN0aW5hdGlvbiBhZGRyZXNzIGFuZCBmdW5kaW5nIHR4aWQgKHZhdWx0IFVUWE8pIGFyZSByZXF1aXJlZC4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgY2ZSZWZ1bmRCdXN5OiB0cnVlLCBjZlJlZnVuZEVycjogbnVsbCwgY2ZSZWZ1bmRUeEhleDogJycsIGNmUmVmdW5kVHhpZDogbnVsbCB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgcG9zdENyb3dkZnVuZGluZ1JlZnVuZFByZXBhcmUoXG4gICAgICAgIHRoaXMuc3RhdGUudXBzdHJlYW0sXG4gICAgICAgIHJvdy5jYW1wYWlnbklkLFxuICAgICAgICB7IGRlc3RpbmF0aW9uQWRkcmVzczogZGVzdCwgZnVuZGVkVHhpZCwgZmVlU2F0cywgdm91dDogdm91dE9wdCB9LFxuICAgICAgICBhZG1pblxuICAgICAgKTtcbiAgICAgIGNvbnN0IGhleCA9IHJlcyAmJiByZXMudHhIZXggPyBTdHJpbmcocmVzLnR4SGV4KSA6ICcnO1xuICAgICAgY29uc3QgdHhpZCA9IHJlcyAmJiByZXMudHhpZCA/IFN0cmluZyhyZXMudHhpZCkgOiAnJztcbiAgICAgIGlmICghaGV4KSB0aHJvdyBuZXcgRXJyb3IoJ0h1YiBkaWQgbm90IHJldHVybiB0eEhleC4nKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjZlJlZnVuZEJ1c3k6IGZhbHNlLFxuICAgICAgICBjZlJlZnVuZFR4SGV4OiBoZXgsXG4gICAgICAgIGNmUmVmdW5kVHhpZDogdHhpZCB8fCBudWxsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGNmUmVmdW5kQnVzeTogZmFsc2UsXG4gICAgICAgIGNmUmVmdW5kRXJyOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUNmUmVmdW5kQnJvYWRjYXN0ICgpIHtcbiAgICBjb25zdCBoZXggPSBTdHJpbmcodGhpcy5zdGF0ZS5jZlJlZnVuZFR4SGV4IHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFoZXgpIHJldHVybjtcbiAgICBjb25zdCBhZG1pbiA9IHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIodGhpcy5wcm9wcy5hZG1pblRva2VuKTtcbiAgICBpZiAoIWFkbWluKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2ZSZWZ1bmRFcnI6ICdBZG1pbiB0b2tlbiByZXF1aXJlZCB0byBicm9hZGNhc3QuJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGNmUmVmdW5kQnVzeTogdHJ1ZSwgY2ZSZWZ1bmRFcnI6IG51bGwgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dCA9IGF3YWl0IGJyb2FkY2FzdFJhd1RyYW5zYWN0aW9uKHRoaXMuc3RhdGUudXBzdHJlYW0sIGhleCwgeyBhZG1pblRva2VuOiBhZG1pbiB9KTtcbiAgICAgIGNvbnN0IHR4aWQgPSBvdXQgJiYgKG91dC50eGlkIHx8IG91dC5yZXN1bHQpID8gU3RyaW5nKG91dC50eGlkIHx8IG91dC5yZXN1bHQpIDogJyc7XG4gICAgICBpZiAoIXR4aWQpIHRocm93IG5ldyBFcnJvcignQnJvYWRjYXN0IGRpZCBub3QgcmV0dXJuIHR4aWQuJyk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgY2ZSZWZ1bmRCdXN5OiBmYWxzZSwgY2ZSZWZ1bmRUeGlkOiB0eGlkIH0pO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjZlJlZnVuZEJ1c3k6IGZhbHNlLFxuICAgICAgICBjZlJlZnVuZEVycjogZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmVuZGVyICgpIHtcbiAgICB2b2lkIHRoaXMuc3RhdGUuaHViVWlGbGFnc1JldjtcbiAgICBjb25zdCBodWJVaSA9IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuICAgIGNvbnN0IGJpdGNvaW5OZXR3b3JrID0gU3RyaW5nKCh0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMgJiYgdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLm5ldHdvcmspIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGhhc0FkbWluVG9rZW4gPSAhIXJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIodGhpcy5wcm9wcy5hZG1pblRva2VuKTtcbiAgICBjb25zdCBhZGRyZXNzUGxhY2Vob2xkZXIgPSB0aGlzLmdldEFkZHJlc3NQbGFjZWhvbGRlcihiaXRjb2luTmV0d29yayk7XG4gICAgY29uc3QgYmMgPSB0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMgJiYgdGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzLmJsb2NrY2hhaW47XG4gICAgY29uc3QgY2hhaW5IZWlnaHQgPSBiYyAmJiBiYy5ibG9ja3MgIT0gbnVsbFxuICAgICAgPyBOdW1iZXIoYmMuYmxvY2tzKVxuICAgICAgOiAodGhpcy5zdGF0ZS5iaXRjb2luU3RhdHVzICYmIHRoaXMuc3RhdGUuYml0Y29pblN0YXR1cy5oZWlnaHQgIT0gbnVsbFxuICAgICAgICA/IE51bWJlcih0aGlzLnN0YXRlLmJpdGNvaW5TdGF0dXMuaGVpZ2h0KVxuICAgICAgICA6IG51bGwpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmFkZS1pblwiPlxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzAuNWVtJywgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoMlwiIHN0eWxlPXt7IG1hcmdpbjogMCB9fT5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImhlYXJ0IG91dGxpbmVcIiBjb2xvcj1cInJlZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDxIZWFkZXIuQ29udGVudD5Dcm93ZGZ1bmRzPC9IZWFkZXIuQ29udGVudD5cbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPEJ1dHRvbiBwcmltYXJ5IGxvYWRpbmc9e3RoaXMuc3RhdGUucmVmcmVzaGluZ30gb25DbGljaz17KCkgPT4gdGhpcy5yZWZyZXNoKCl9PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicmVmcmVzaFwiIC8+XG4gICAgICAgICAgICAgIFJlZnJlc2hcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pblwiIGJhc2ljPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYml0Y29pblwiIC8+XG4gICAgICAgICAgICAgIEJpdGNvaW5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvY29udHJhY3RzXCIgYmFzaWMgdGl0bGU9XCJTdG9yYWdlLCBleGVjdXRpb24sIGFuZCBUYXByb290IGNyb3dkZnVuZHMgb24gdGhpcyBodWJcIj5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImZpbGUgY29kZVwiIC8+XG4gICAgICAgICAgICAgIENvbnRyYWN0c1xuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICB7aHViVWkuYml0Y29pblBheW1lbnRzID8gKFxuICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9wYXltZW50c1wiIGJhc2ljPlBheW1lbnRzPC9CdXR0b24+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlRhcHJvb3QgY2FtcGFpZ24gdmF1bHRzIG9uIHRoaXMgSHViLiBDYW1wYWlnbnMgYXJlIHN0b3JlZCBsb2NhbGx5IG9uIHRoaXMgbm9kZSAobm90IHN5bmNlZCB0byBvdGhlciBodWJzKS48L3A+XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgPFNlZ21lbnQgaWQ9XCJmYWJyaWMtYml0Y29pbi1jcm93ZGZ1bmRpbmdcIj5cbiAgICAgICAgICA8SGVhZGVyIGFzPSdoMyc+Q3Jvd2RmdW5kIMK3IEFDUCDCtyBQYXlqb2luIHRvIHZhdWx0PC9IZWFkZXI+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgIDxzdHJvbmc+U3RlcCBBIOKAlCBBQ1A6PC9zdHJvbmc+IG91dHB1dHMtb25seSBQU0JUIHBheWluZyB0aGUgY2FtcGFpZ24gdmF1bHQ7IGRvbm9ycyBhZGQgVVRYT3MgYW5kIHNpZ24gd2l0aHsnICd9XG4gICAgICAgICAgICA8Y29kZT5TSUdIQVNIX0FMTHxBTllPTkVDQU5QQVk8L2NvZGU+ICgweDgxKSwgbWVyZ2UgdW50aWwgZmVlcyBjbGVhciwgYnJvYWRjYXN0LlxuICAgICAgICAgICAgeycgJ308c3Ryb25nPlN0ZXAgQiDigJQgUGF5am9pbjo8L3N0cm9uZz4gYSBCSVA3OCBkZXBvc2l0IHNlc3Npb24gdXNlcyB0aGUgPGVtPnNhbWU8L2VtPiB2YXVsdCBhZGRyZXNzIHNvIHBheWVycyBjYW4gdXNleycgJ31cbiAgICAgICAgICAgIHtodWJVaS5iaXRjb2luUGF5bWVudHMgPyAoXG4gICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3BheW1lbnRzI2ZhYnJpYy1idGMtbWFrZS1wYXltZW50LWg0XCI+UGF5bWVudHM8L0xpbms+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8c3Ryb25nPlBheW1lbnRzPC9zdHJvbmc+XG4gICAgICAgICAgICApfXsnICd9KGUuZy4gbG9jYWwgUGF5am9pbiBvciA8c3Ryb25nPkFDUCArIEh1YiBib29zdDwvc3Ryb25nPikuXG4gICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgPHN0cm9uZz5TdGVwIEMg4oCUIFBheW91dDo8L3N0cm9uZz4gd2hlbiByYWlzZWQg4omlIGdvYWwsIGJlbmVmaWNpYXJ5IHNpZ25zIHRoZSB1bnNpZ25lZCBwYXlvdXQgUFNCVCwgdGhlbiBIdWIgYXJiaXRlciBjby1zaWducyAoYWRtaW4pLCB0aGVuIGJyb2FkY2FzdC5cbiAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICA8c3Ryb25nPlN0ZXAgRCDigJQgUmVmdW5kOjwvc3Ryb25nPiBhZnRlciB0aGUgcmVmdW5kIENMVFYgaGVpZ2h0IChzZWUgdGFibGUpLCB0aGUgSHViIGFyYml0ZXIgY2FuIHN3ZWVwIGEgdmF1bHQgVVRYTyB0byBhIGRlc3RpbmF0aW9uIHlvdSBjaG9vc2UgKGFkbWluKTogcHJlcGFyZSByZXR1cm5zIGEgPHN0cm9uZz5zaWduZWQ8L3N0cm9uZz4gcmF3IHR4IOKAlCBjb3B5IGhleCBvciBicm9hZGNhc3QgZnJvbSB0aGUgbW9kYWwuXG4gICAgICAgICAgICB7JyAnfUlmIHRoZSBnb2FsIHdhcyBtZXQsIHByZWZlciA8c3Ryb25nPlBheW91dDwvc3Ryb25nPiBzbyB0aGUgYmVuZWZpY2lhcnkgcmVjZWl2ZXMgZnVuZHMgdmlhIHRoZSAyLW9mLTIgcGF0aC5cbiAgICAgICAgICAgIHsnICd9VmF1bHQgYmFsYW5jZSwgVVRYTyBoaW50cywgYW5kIGdvYWwgc3RhdHVzIHJlZnJlc2ggd2l0aCA8c3Ryb25nPlJlZnJlc2g8L3N0cm9uZz4gYWJvdmUuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWF4V2lkdGg6ICcyMmVtJywgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogJzAuMzVlbScgfX0gaHRtbEZvcj1cImZhYnJpYy1jZi1zaGFyZS1zYXRzXCI+RGVmYXVsdCBmb3IgZnVuZGVyIGxpbmtzIOKAlCBCSVAyMSAvIFBheW1lbnRzIChzYXRzKTwvbGFiZWw+XG4gICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJmYWJyaWMtY2Ytc2hhcmUtc2F0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBtaW49XCI1NDZcIlxuICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmNmU2hhcmVBbW91bnRTYXRzfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBjZlNoYXJlQW1vdW50U2F0czogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWZhdWx0IGFtb3VudCBpbiBzYXRzIGZvciBCSVAyMSwgUVIsIGFuZCBPcGVuIFBheW1lbnRzIGxpbmtzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Ub3A6ICcwLjI1ZW0nLCBmb250U2l6ZTogJzAuODJlbScsIGNvbG9yOiAnIzg4OCcgfX0+XG4gICAgICAgICAgICAgIE11c3QgYmUgYXQgbGVhc3QgZWFjaCBjYW1wYWlnbiZhcG9zO3MgbWluIHBlciBVVFhPIChiZWxvdykuIFVzZWQgZm9yIENvcHkgQklQMjEsIFFSLCBhbmQgT3BlbiBQYXltZW50cy5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Rm9ybT5cbiAgICAgICAgICAgIDxGb3JtLkdyb3VwIHdpZHRocz1cImVxdWFsXCI+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5UaXRsZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlJlZ3Rlc3QgZGVtbyBjYW1wYWlnblwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5jZlRpdGxlfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgY2ZUaXRsZTogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8bGFiZWw+R29hbCAoc2F0cyk8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxMDAwXCJcbiAgICAgICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmNmR29hbFNhdHN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBjZkdvYWxTYXRzOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5NaW4gcGVyIHZhdWx0IFVUWE8gKHNhdHMpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiNTQ2XCJcbiAgICAgICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmNmTWluU2F0c31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGNmTWluU2F0czogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Ub3A6ICcwLjI1ZW0nLCBmb250U2l6ZTogJzAuODJlbScsIGNvbG9yOiAnIzg4OCcgfX0+XG4gICAgICAgICAgICAgICAgICBFYWNoIHNlcGFyYXRlIG91dHB1dCBzZW50IHRvIHRoZSB2YXVsdCBtdXN0IGJlIGF0IGxlYXN0IHRoaXMgKHBvbGljeSBlbmZvcmNlZCB3aGVuIGJ1aWxkaW5nIHBheW91dCkuXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICA8L0Zvcm0uR3JvdXA+XG4gICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPGxhYmVsPlJlZnVuZCBwYXRoIGRlbGF5ICgrYmxvY2tzIGZyb20gdGlwIGF0IGNyZWF0ZSk8L2xhYmVsPlxuICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICBtaW49XCI0OFwiXG4gICAgICAgICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmNmUmVmdW5kQWZ0ZXJCbG9ja3N9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgY2ZSZWZ1bmRBZnRlckJsb2NrczogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgbWF4V2lkdGg6ICcxMmVtJyB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Ub3A6ICcwLjI1ZW0nLCBmb250U2l6ZTogJzAuODJlbScsIGNvbG9yOiAnIzg4OCcgfX0+XG4gICAgICAgICAgICAgICAgQWJzb2x1dGUgQ0xUViBoZWlnaHQgPSBjaGFpbiB0aXAgYXQgY3JlYXRlICsgdGhpcyB2YWx1ZSAobWluaW11bSA0ODsgZGVmYXVsdCAxMDA4IOKJiCBvbmUgd2VlayBvbiBtYWlubmV0IGNhZGVuY2UpLlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPGxhYmVsPkJlbmVmaWNpYXJ5IGNvbXByZXNzZWQgcHVia2V5IGhleCAoMDIvMDPigKYpPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjAzM+KAplwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5jZkJlbmVmaWNpYXJ5SGV4fVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgY2ZCZW5lZmljaWFyeUhleDogZS50YXJnZXQudmFsdWUudHJpbSgpIH0pfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogJzEgMSAyMGVtJywgbWluV2lkdGg6ICcxNmVtJywgZm9udEZhbWlseTogJ21vbm9zcGFjZScsIGZvbnRTaXplOiAnMC45ZW0nIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBiYXNpYyBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUNmRmlsbEJlbmVmaWNpYXJ5RnJvbVdhbGxldCgpfT5cbiAgICAgICAgICAgICAgICAgIEZpbGwgZnJvbSB1bmxvY2tlZCB3YWxsZXRcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC42NWVtJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIG1hcmdpbkJvdHRvbTogJzAuNjVlbScgfX0+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogMCB9fT5cbiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e3sgZGlzcGxheTogJ2Jsb2NrJyB9fT5BQ1Agb3V0cHV0IGxlZyAoc2F0cyk8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBtaW49XCI1NDZcIlxuICAgICAgICAgICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuY2ZBY3BBbW91bnRTYXRzfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgY2ZBY3BBbW91bnRTYXRzOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiAnMTBlbScgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogMCB9fT5cbiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e3sgZGlzcGxheTogJ2Jsb2NrJyB9fT5QYXlqb2luIHJlcXVlc3QgKHNhdHMpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5jZlBheWpvaW5BbW91bnRTYXRzfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgY2ZQYXlqb2luQW1vdW50U2F0czogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogJzEwZW0nIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHByaW1hcnlcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGxvYWRpbmc9e3RoaXMuc3RhdGUuY2ZCdXN5fVxuICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5jZkJ1c3kgfHwgIWhhc0FkbWluVG9rZW59XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQ3Jvd2RmdW5kaW5nQ3JlYXRlKCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJwbHVzXCIgLz5cbiAgICAgICAgICAgICAgQ3JlYXRlIFRhcHJvb3QgY2FtcGFpZ25cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgeyFoYXNBZG1pblRva2VuICYmIChcbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNzVlbScsIGNvbG9yOiAnIzg4OCcsIGZvbnRTaXplOiAnMC45ZW0nIH19PkFkbWluIHRva2VuIHJlcXVpcmVkIHRvIGNyZWF0ZS48L3NwYW4+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICB7KHRoaXMuc3RhdGUuY2ZFcnJvciB8fCB0aGlzLnN0YXRlLmNmU3VjY2VzcykgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2VcbiAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fVxuICAgICAgICAgICAgICBuZWdhdGl2ZT17ISF0aGlzLnN0YXRlLmNmRXJyb3J9XG4gICAgICAgICAgICAgIHBvc2l0aXZlPXshdGhpcy5zdGF0ZS5jZkVycm9yICYmICEhdGhpcy5zdGF0ZS5jZlN1Y2Nlc3N9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNmRXJyb3IgPyA8c3Bhbj57dGhpcy5zdGF0ZS5jZkVycm9yfTwvc3Bhbj4gOiA8c3Bhbj57dGhpcy5zdGF0ZS5jZlN1Y2Nlc3N9PC9zcGFuPn1cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApfVxuICAgICAgICAgIHt0aGlzLnN0YXRlLmNmUGF5am9pbkJpcDIxICYmIChcbiAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuNWVtJywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiBiYXNpYyB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gY29weVRvQ2xpcGJvYXJkKHRoaXMuc3RhdGUuY2ZQYXlqb2luQmlwMjEpfT5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjb3B5IG91dGxpbmVcIiAvPlxuICAgICAgICAgICAgICAgICAgQ29weSBjcm93ZGZ1bmQgQklQMjFcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBhcz17TGlua31cbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICB0bz17YC9wYXltZW50cz9iaXRjb2luVXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuc3RhdGUuY2ZQYXlqb2luQmlwMjEpfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgT3BlbiBQYXltZW50cyAocHJlZmlsbClcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5jZlBheWpvaW5TZXNzaW9uSWQgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6ICcwLjg4ZW0nLCBjb2xvcjogJyM1NTUnIH19PlxuICAgICAgICAgICAgICAgICAgICBTZXNzaW9uIDxjb2RlPnt0aGlzLnN0YXRlLmNmUGF5am9pblNlc3Npb25JZC5zbGljZSgwLCAxMil94oCmPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMS4yNWVtJyB9fT5DYW1wYWlnbnM8L0hlYWRlcj5cbiAgICAgICAgICB7KHRoaXMuc3RhdGUubG9hZGluZyB8fCB0aGlzLnN0YXRlLnJlZnJlc2hpbmcpICYmICghdGhpcy5zdGF0ZS5jcm93ZGZ1bmRpbmdDYW1wYWlnbnMgfHwgdGhpcy5zdGF0ZS5jcm93ZGZ1bmRpbmdDYW1wYWlnbnMubGVuZ3RoID09PSAwKSA/IChcbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcgfX0+TG9hZGluZyBjYW1wYWlnbnMuLi48L3A+XG4gICAgICAgICAgKSA6ICghdGhpcy5zdGF0ZS5jcm93ZGZ1bmRpbmdDYW1wYWlnbnMgfHwgdGhpcy5zdGF0ZS5jcm93ZGZ1bmRpbmdDYW1wYWlnbnMubGVuZ3RoID09PSAwKSA/IChcbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcgfX0+Tm8gY2FtcGFpZ25zIHlldC4gQ3JlYXRlIG9uZSBhYm92ZSB3aGVuIEJpdGNvaW4gaXMgYXZhaWxhYmxlIChhZG1pbiB0b2tlbiByZXF1aXJlZCkuPC9wPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8VGFibGUgY29tcGFjdCBjZWxsZWQgdW5zdGFja2FibGU+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlRpdGxlIC8gaWQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5WYXVsdCBhZGRyZXNzPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+UmFpc2VkPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGwgdGV4dEFsaWduPVwiY2VudGVyXCI+VVRYT3M8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5SZWZ1bmQgQ0xUVjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkdvYWw8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5BY3Rpb25zPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuY3Jvd2RmdW5kaW5nQ2FtcGFpZ25zLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjaWQgPSBTdHJpbmcocm93LmNhbXBhaWduSWQgfHwgJycpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYWRkciA9IFN0cmluZyhyb3cuYWRkcmVzcyB8fCAnJyk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzaG9ydEFkZHIgPSBhZGRyLmxlbmd0aCA+IDIyID8gYCR7YWRkci5zbGljZSgwLCAxNCl94oCmJHthZGRyLnNsaWNlKC04KX1gIDogYWRkcjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ID0gY2lkID8gKHRoaXMuc3RhdGUuY2ZWYXVsdFN0YXRzW2NpZF0gfHwgbnVsbCkgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZ29hbE51bSA9IE51bWJlcihyb3cuZ29hbFNhdHMpIHx8IDA7XG4gICAgICAgICAgICAgICAgICBjb25zdCBiYWxOdW0gPSBzdCAmJiAhc3QuZXJyb3IgPyBOdW1iZXIoc3QuYmFsYW5jZVNhdHMpIDogMDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBjdCA9IGdvYWxOdW0gPiAwICYmIHN0ICYmICFzdC5lcnJvclxuICAgICAgICAgICAgICAgICAgICA/IE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgoYmFsTnVtIC8gZ29hbE51bSkgKiAxMDApKVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICBjb25zdCBydCA9IHJvdy5yZWZ1bmRMb2NrdGltZUhlaWdodDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZnVuZEV0YSA9IHJ0ICE9IG51bGwgJiYgY2hhaW5IZWlnaHQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoY2hhaW5IZWlnaHQpXG4gICAgICAgICAgICAgICAgICAgID8gKHJ0IDw9IGNoYWluSGVpZ2h0ID8gJ2FjdGl2ZScgOiBydCAtIGNoYWluSGVpZ2h0KVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjYW5QYXlvdXQgPSAhIShzdCAmJiAhc3QuZXJyb3IgJiYgc3QuZ29hbE1ldCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZWZ1bmRVbmxvY2tlZCA9IHJlZnVuZEV0YSA9PT0gJ2FjdGl2ZSc7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjYW5SZWZ1bmRVaSA9IHJlZnVuZFVubG9ja2VkICYmIGhhc0FkbWluVG9rZW47XG4gICAgICAgICAgICAgICAgICBjb25zdCByZWZ1bmRUaXRsZSA9ICFyZWZ1bmRVbmxvY2tlZFxuICAgICAgICAgICAgICAgICAgICA/IChydCAhPSBudWxsICYmIGNoYWluSGVpZ2h0ICE9IG51bGwgJiYgdHlwZW9mIHJlZnVuZEV0YSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICA/IGBSZWZ1bmQgdW5sb2NrcyBpbiB+JHtyZWZ1bmRFdGF9IGJsb2NrcyAoaGVpZ2h0ICR7cnR9KWBcbiAgICAgICAgICAgICAgICAgICAgICA6ICdSZWZ1bmQgdW5sb2NrcyBhZnRlciBDTFRWIGhlaWdodCAocmVmcmVzaCBmb3IgY2hhaW4gdGlwKScpXG4gICAgICAgICAgICAgICAgICAgIDogIWhhc0FkbWluVG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICA/ICdBZG1pbiB0b2tlbiByZXF1aXJlZCBmb3IgYXJiaXRlciByZWZ1bmQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnQWZ0ZXIgQ0xUVjogYXJiaXRlci1zaWduZWQgcmVmdW5kICh2YXVsdCBVVFhPIOKGkiBkZXN0aW5hdGlvbiknO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGF5b3V0VGl0bGUgPSAhc3RcbiAgICAgICAgICAgICAgICAgICAgPyAnUmVmcmVzaCAodG9vbGJhcikgdG8gbG9hZCB2YXVsdCBiYWxhbmNlIGZyb20gdGhlIG5vZGUnXG4gICAgICAgICAgICAgICAgICAgIDogc3QuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICA/IFN0cmluZyhzdC5lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICA6ICFzdC5nb2FsTWV0XG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdQYXlvdXQgdW5sb2NrcyB3aGVuIHJhaXNlZCDiiaUgZ29hbCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ0J1aWxkIHBheW91dCBQU0JUIChiZW5lZmljaWFyeSBzaWducywgdGhlbiBhcmJpdGVyLCB0aGVuIGJyb2FkY2FzdCknO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdyBrZXk9e2NpZCB8fCBhZGRyfT5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHN0cm9uZz57cm93LnRpdGxlIHx8ICfigJQnfTwvc3Ryb25nPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzAuODJlbScsIGNvbG9yOiAnIzY2NicsIGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnIH19PntjaWR9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIHN0eWxlPXt7IGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnLCBmb250U2l6ZTogJzAuODVlbScsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0gdGl0bGU9e2FkZHJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57c2hvcnRBZGRyfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuMzVlbScsIG1hcmdpblRvcDogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWFkZHJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY29weVRvQ2xpcGJvYXJkKGFkZHIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHkgb3V0bGluZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weSBhZGRyZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2lkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzPVwiYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17Y3Jvd2RmdW5kQ2FtcGFpZ25BcGlVcmwodGhpcy5zdGF0ZS51cHN0cmVhbSwgY2lkKSB8fCBgI2B9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNhbXBhaWduIEpTT04gKyBsaXZlIGJhbGFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshYWRkcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb3B5VG9DbGlwYm9hcmQodGhpcy5fYmlwMjFGb3JSb3cocm93KSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5IEJJUDIxXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG89e3RoaXMuX3BheW1lbnRzTGlua0ZvclJvdyhyb3cpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshYWRkciB8fCAhaHViVWkuYml0Y29pblBheW1lbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtodWJVaS5iaXRjb2luUGF5bWVudHMgPyAnT3BlbiBQYXltZW50cyB3aXRoIGNhbXBhaWduIEJJUDIxIHByZWZpbGwnIDogJ0VuYWJsZSBCaXRjb2luIFBheW1lbnRzIGluIEFkbWluIGZlYXR1cmUgdmlzaWJpbGl0eSBmaXJzdCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuIFBheW1lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFhZGRyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQ2ZTaG93QmlwMjFRcihyb3cpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUVJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7c3QgJiYgc3QuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyNhMzMnLCBmb250U2l6ZTogJzAuODhlbScgfX0gdGl0bGU9e3N0LmVycm9yfT7igJQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e2Zvcm1hdFNhdHNEaXNwbGF5KHN0LmJhbGFuY2VTYXRzIHx8IDApfSBzYXRzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwY3QgIT0gbnVsbCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMC44ZW0nLCBjb2xvcjogJyM4ODgnIH19PntwY3R9JSBvZiBnb2FsPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3QuZ29hbE1ldCA/IDxMYWJlbCBzaXplPVwidGlueVwiIGNvbG9yPVwiZ3JlZW5cIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjM1ZW0nIH19PkdvYWwgbWV0PC9MYWJlbD4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyNhYWEnIH19IHRpdGxlPVwiVXNlIFJlZnJlc2ggYWJvdmVcIj7igKY8L3NwYW4+fVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCB0ZXh0QWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzdCAmJiAhc3QuZXJyb3IgPyAoc3QudW5zcGVudENvdW50ICE9IG51bGwgPyBzdC51bnNwZW50Q291bnQgOiAn4oCUJykgOiAn4oCUJ31cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge3J0ICE9IG51bGwgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5oZWlnaHQge3J0fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtyZWZ1bmRFdGEgPT09ICdhY3RpdmUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDxkaXYgc3R5bGU9e3sgY29sb3I6ICcjMjE4NWQwJyB9fT5SZWZ1bmQgcGF0aCBhY3RpdmU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVmdW5kRXRhICE9IG51bGwgJiYgdHlwZW9mIHJlZnVuZEV0YSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA8ZGl2IHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcgfX0+e3JlZnVuZEV0YX0gYmxvY2tzIHRvIENMVFY8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiAn4oCUJ31cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0U2F0c0Rpc3BsYXkocm93LmdvYWxTYXRzKX0gc2F0c1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzAuOGVtJywgY29sb3I6ICcjODg4JyB9fT5taW4ge2Zvcm1hdFNhdHNEaXNwbGF5KHJvdy5taW5Db250cmlidXRpb25TYXRzKX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogJzAuMzVlbScsIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNpZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUNyb3dkZnVuZGluZ0NvcHlBY3BQc2J0KGNpZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5IEFDUCBQU0JUXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjaWQgfHwgIWFkZHIgfHwgIWh1YlVpLmJpdGNvaW5QYXltZW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17aHViVWkuYml0Y29pblBheW1lbnRzID8gJ0NyZWF0ZSBhIFBheWpvaW4gc2Vzc2lvbiBmb3IgdGhpcyB2YXVsdCcgOiAnRW5hYmxlIEJpdGNvaW4gUGF5bWVudHMgaW4gQWRtaW4gZmVhdHVyZSB2aXNpYmlsaXR5IGZpcnN0J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUNyb3dkZnVuZGluZ1BheWpvaW5Ub1ZhdWx0KHJvdyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXlqb2luIOKGkiB2YXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImdyZWVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNpZCB8fCAhY2FuUGF5b3V0fVxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3BheW91dFRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZlBheW91dE1vZGFsOiByb3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZlBheW91dERlc3Q6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZQYXlvdXRGZWVTYXRzOiAnMjAwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZlBheW91dFBzYnQ6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZQYXlvdXRCdXN5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmUGF5b3V0RXJyOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZQYXlvdXRUeGlkOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZQYXlvdXRIaW50OiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXlvdXTigKZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwib3JhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY2lkIHx8ICFjYW5SZWZ1bmRVaX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17cmVmdW5kVGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ROb3cgPSBjaWQgPyAodGhpcy5zdGF0ZS5jZlZhdWx0U3RhdHNbY2lkXSB8fCBudWxsKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1MCA9IHN0Tm93ICYmIEFycmF5LmlzQXJyYXkoc3ROb3cudmF1bHRVdHhvcykgJiYgc3ROb3cudmF1bHRVdHhvc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHN0Tm93LnZhdWx0VXR4b3NbMF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmUmVmdW5kTW9kYWw6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZSZWZ1bmREZXN0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZSZWZ1bmRGdW5kZWRUeGlkOiB1MCA/IFN0cmluZyh1MC50eGlkKSA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZlJlZnVuZFZvdXQ6IHUwICYmIHUwLnZvdXQgIT0gbnVsbCA/IFN0cmluZyh1MC52b3V0KSA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZlJlZnVuZEZlZVNhdHM6ICcyMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZSZWZ1bmRCdXN5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZSZWZ1bmRFcnI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmUmVmdW5kVHhIZXg6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZlJlZnVuZFR4aWQ6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZ1bmTigKZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxNb2RhbFxuICAgICAgICAgICAgb3Blbj17ISF0aGlzLnN0YXRlLmNmUGF5b3V0TW9kYWx9XG4gICAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB0aGlzLl9jbG9zZUNmUGF5b3V0TW9kYWwoKX1cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBjbG9zZUljb25cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8TW9kYWwuSGVhZGVyPlxuICAgICAgICAgICAgICBQYXlvdXQgY2FtcGFpZ25cbiAgICAgICAgICAgICAge3RoaXMuc3RhdGUuY2ZQYXlvdXRNb2RhbCAmJiB0aGlzLnN0YXRlLmNmUGF5b3V0TW9kYWwudGl0bGVcbiAgICAgICAgICAgICAgICA/IGAg4oCUICR7dGhpcy5zdGF0ZS5jZlBheW91dE1vZGFsLnRpdGxlfWBcbiAgICAgICAgICAgICAgICA6ICcnfVxuICAgICAgICAgICAgPC9Nb2RhbC5IZWFkZXI+XG4gICAgICAgICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgICAgICAge3RoaXMuc3RhdGUuY2ZQYXlvdXRNb2RhbCAmJiB0aGlzLnN0YXRlLmNmUGF5b3V0TW9kYWwuY2FtcGFpZ25JZFxuICAgICAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg4ZW0nLCBjb2xvcjogJyM2NjYnLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PlxuICAgICAgICAgICAgICAgICAgICA8Y29kZT57dGhpcy5zdGF0ZS5jZlBheW91dE1vZGFsLmNhbXBhaWduSWR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImZhYnJpYy1jcm93ZGZ1bmRpbmctcGF5b3V0LWRlc3RcIj5CZW5lZmljaWFyeSBwYXlvdXQgYWRkcmVzcyAoYmVjaDMyKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMC41ZW0nLCBmbGV4V3JhcDogJ3dyYXAnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJmYWJyaWMtY3Jvd2RmdW5kaW5nLXBheW91dC1kZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17YWRkcmVzc1BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmNmUGF5b3V0RGVzdH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBjZlBheW91dERlc3Q6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6ICcxIDEgMThlbScsIG1pbldpZHRoOiAnMTRlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQmVuZWZpY2lhcnkgcGF5b3V0IGFkZHJlc3MgKGJlY2gzMilcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBiYXNpYyBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUNmRmlsbFBheW91dEFkZHJlc3NGcm9tV2FsbGV0KCl9PlxuICAgICAgICAgICAgICAgICAgICAgIEZpbGwgZnJvbSB3YWxsZXQgKDAvMClcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdibG9jaycsIG1hcmdpblRvcDogJzAuMjVlbScsIGZvbnRTaXplOiAnMC44MmVtJywgY29sb3I6ICcjODg4JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgU2FtZSBCSVA0NCBleHRlcm5hbCBpbmRleCAwIGFzIHRoZSBjYW1wYWlnbiBiZW5lZmljaWFyeSBrZXkg4oCUIGNvbnZlbmllbnQgZGVmYXVsdDsgeW91IG1heSB1c2UgYW55IGRlc3RpbmF0aW9uLlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiZmFicmljLWNyb3dkZnVuZGluZy1wYXlvdXQtZmVlXCI+RmVlIChzYXRzKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJmYWJyaWMtY3Jvd2RmdW5kaW5nLXBheW91dC1mZWVcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuY2ZQYXlvdXRGZWVTYXRzfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBjZlBheW91dEZlZVNhdHM6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXhXaWR0aDogJzEwZW0nIH19XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQYXlvdXQgdHJhbnNhY3Rpb24gZmVlIGluIHNhdHNcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHByaW1hcnlcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmNmUGF5b3V0QnVzeSAmJiAhdGhpcy5zdGF0ZS5jZlBheW91dFBzYnR9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuY2ZQYXlvdXRCdXN5IHx8ICF0aGlzLnN0YXRlLmNmUGF5b3V0TW9kYWx9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVDZlBheW91dEJ1aWxkUHNidCgpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQnVpbGQgdW5zaWduZWQgcGF5b3V0IFBTQlRcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNmUGF5b3V0RXJyICYmIChcbiAgICAgICAgICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZSBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19PlxuICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuY2ZQYXlvdXRFcnJ9XG4gICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5jZlBheW91dEhpbnQgJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNmUGF5b3V0SGludH1cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNmUGF5b3V0UHNidFxuICAgICAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICAgICAgPE1lc3NhZ2Ugc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICBCZW5lZmljaWFyeSBzaWducyBhbGwgaW5wdXRzIHdpdGggdGhlaXIga2V5IGZpcnN0LiBUaGVuIEh1YiBhcmJpdGVyIGNvLXNpZ24gKGFkbWluIHRva2VuKSwgdGhlbiBicm9hZGNhc3QuXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuNWVtJywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvcHlUb0NsaXBib2FyZCh0aGlzLnN0YXRlLmNmUGF5b3V0UHNidCl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHkgb3V0bGluZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICBDb3B5IFBTQlRcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJibHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuY2ZQYXlvdXRCdXN5fVxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJTaWduIGFsbCBpbnB1dHMgd2l0aCBtLzQ0Jy8wJy8wJy8wLzAgKG11c3QgbWF0Y2ggY2FtcGFpZ24gYmVuZWZpY2lhcnkgcHVia2V5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUNmUGF5b3V0QmVuZWZpY2lhcnlTaWduKCl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgU2lnbiB3aXRoIHVubG9ja2VkIHdhbGxldFxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmNmUGF5b3V0QnVzeSB8fCAhaGFzQWRtaW5Ub2tlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtoYXNBZG1pblRva2VuID8gJ0FwcGx5IEh1YiBhcmJpdGVyIFNjaG5vcnIgc2lnbmF0dXJlcycgOiAnQWRtaW4gdG9rZW4gcmVxdWlyZWQnfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVDZlBheW91dEFyYml0ZXJTaWduKCl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQXJiaXRlciBjby1zaWduXG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmNmUGF5b3V0QnVzeX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQ2ZQYXlvdXRCcm9hZGNhc3QoKX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBCcm9hZGNhc3RcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBudWxsfVxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5jZlBheW91dFR4aWRcbiAgICAgICAgICAgICAgICA/IChcbiAgICAgICAgICAgICAgICAgIDxNZXNzYWdlIHBvc2l0aXZlIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgIEJyb2FkY2FzdHsnICd9XG4gICAgICAgICAgICAgICAgICAgIHtodWJVaS5iaXRjb2luRXhwbG9yZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89e2Avc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5zdGF0ZS5jZlBheW91dFR4aWQpfWB9Pnt0aGlzLnN0YXRlLmNmUGF5b3V0VHhpZH08L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3RoaXMuc3RhdGUuY2ZQYXlvdXRUeGlkfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IG51bGx9XG4gICAgICAgICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICA8TW9kYWwuQWN0aW9ucz5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5fY2xvc2VDZlBheW91dE1vZGFsKCl9PkNsb3NlPC9CdXR0b24+XG4gICAgICAgICAgICA8L01vZGFsLkFjdGlvbnM+XG4gICAgICAgICAgPC9Nb2RhbD5cbiAgICAgICAgICA8TW9kYWxcbiAgICAgICAgICAgIG9wZW49eyEhdGhpcy5zdGF0ZS5jZlJlZnVuZE1vZGFsfVxuICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gdGhpcy5fY2xvc2VDZlJlZnVuZE1vZGFsKCl9XG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgY2xvc2VJY29uXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE1vZGFsLkhlYWRlcj5cbiAgICAgICAgICAgICAgQXJiaXRlciByZWZ1bmQgKGFmdGVyIENMVFYpXG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNmUmVmdW5kTW9kYWwgJiYgdGhpcy5zdGF0ZS5jZlJlZnVuZE1vZGFsLnRpdGxlXG4gICAgICAgICAgICAgICAgPyBgIOKAlCAke3RoaXMuc3RhdGUuY2ZSZWZ1bmRNb2RhbC50aXRsZX1gXG4gICAgICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICAgIDwvTW9kYWwuSGVhZGVyPlxuICAgICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNmUmVmdW5kTW9kYWwgJiYgdGhpcy5zdGF0ZS5jZlJlZnVuZE1vZGFsLmNhbXBhaWduSWRcbiAgICAgICAgICAgICAgICA/IChcbiAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44OGVtJywgY29sb3I6ICcjNjY2Jywgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPGNvZGU+e3RoaXMuc3RhdGUuY2ZSZWZ1bmRNb2RhbC5jYW1wYWlnbklkfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IG51bGx9XG4gICAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICBIdWIgaWRlbnRpdHkgc2lnbnMgdGhlIHJlZnVuZCB0YXBsZWFmLiBVc2Ugb25seSB3aGVuIHRoZSBjYW1wYWlnbiBzaG91bGQgbm90IHBheSBvdXQgdmlhIHRoZSAyLW9mLTIgcGF0aFxuICAgICAgICAgICAgICAgIChlLmcuIGdvYWwgbm90IG1ldCBhbmQgY29udHJpYnV0b3JzIHNob3VsZCByZWNlaXZlIGZ1bmRzIGF0IHRoZSBhZGRyZXNzIHlvdSBlbnRlcikuXG4gICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWlkID0gdGhpcy5zdGF0ZS5jZlJlZnVuZE1vZGFsICYmIHRoaXMuc3RhdGUuY2ZSZWZ1bmRNb2RhbC5jYW1wYWlnbklkXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyh0aGlzLnN0YXRlLmNmUmVmdW5kTW9kYWwuY2FtcGFpZ25JZClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RSID0gbWlkID8gKHRoaXMuc3RhdGUuY2ZWYXVsdFN0YXRzW21pZF0gfHwgbnVsbCkgOiBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHV4ID0gc3RSICYmIEFycmF5LmlzQXJyYXkoc3RSLnZhdWx0VXR4b3MpID8gc3RSLnZhdWx0VXR4b3MgOiBbXTtcbiAgICAgICAgICAgICAgICBpZiAodXgubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nLCBmb250U2l6ZTogJzAuODhlbScsIGNvbG9yOiAnIzU1NScgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+VmF1bHQgVVRYT3M8L3N0cm9uZz4gKGZyb20gbm9kZSBzY2FuOyBwaWNrIG9uZSBmb3IgZnVuZGluZyB0eGlkIC8gdm91dCk6XG4gICAgICAgICAgICAgICAgICAgIDxMaXN0IHJlbGF4ZWQgZGl2aWRlZCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAge3V4LnNsaWNlKDAsIDgpLm1hcCgodSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3QuSXRlbSBrZXk9e2Ake3UudHhpZH06JHt1LnZvdXR9OiR7aX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuODJlbScgfX0+e3UudHhpZH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeycgJ312b3V0IHt1LnZvdXQgIT0gbnVsbCA/IHUudm91dCA6ICfigJQnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1LmFtb3VudFNhdHMgIT0gbnVsbCA/IGAgwrcgJHtmb3JtYXRTYXRzRGlzcGxheSh1LmFtb3VudFNhdHMpfSBzYXRzYCA6ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZlJlZnVuZEZ1bmRlZFR4aWQ6IFN0cmluZyh1LnR4aWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZlJlZnVuZFZvdXQ6IHUudm91dCAhPSBudWxsID8gU3RyaW5nKHUudm91dCkgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvTGlzdD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgIDxGb3JtPlxuICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsPlJlZnVuZCBkZXN0aW5hdGlvbiAoYmVjaDMyKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2FkZHJlc3NQbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuY2ZSZWZ1bmREZXN0fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBjZlJlZnVuZERlc3Q6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+RnVuZGluZyB0eGlkIChwYXltZW50IGludG8gdmF1bHQpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjY0IGhleCBjaGFyc1wiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmNmUmVmdW5kRnVuZGVkVHhpZH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgY2ZSZWZ1bmRGdW5kZWRUeGlkOiBlLnRhcmdldC52YWx1ZS50cmltKCkgfSl9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnLCBmb250U2l6ZTogJzAuODhlbScgfX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsPk91dHB1dCBpbmRleCAodm91dCk8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImF1dG8gaWYgb21pdHRlZFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmNmUmVmdW5kVm91dH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgY2ZSZWZ1bmRWb3V0OiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWF4V2lkdGg6ICc4ZW0nIH19XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD5GZWUgKHNhdHMpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuY2ZSZWZ1bmRGZWVTYXRzfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBjZlJlZnVuZEZlZVNhdHM6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXhXaWR0aDogJzEwZW0nIH19XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGxvYWRpbmc9e3RoaXMuc3RhdGUuY2ZSZWZ1bmRCdXN5ICYmICF0aGlzLnN0YXRlLmNmUmVmdW5kVHhIZXh9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuY2ZSZWZ1bmRCdXN5IHx8ICF0aGlzLnN0YXRlLmNmUmVmdW5kTW9kYWx9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVDZlJlZnVuZFByZXBhcmUoKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFByZXBhcmUgc2lnbmVkIHJlZnVuZCB0eFxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAge3RoaXMuc3RhdGUuY2ZSZWZ1bmRFcnIgJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5jZlJlZnVuZEVycn1cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNmUmVmdW5kVHhIZXhcbiAgICAgICAgICAgICAgICA/IChcbiAgICAgICAgICAgICAgICAgIDxNZXNzYWdlIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgU2lnbmVkIHJhdyB0cmFuc2FjdGlvbi4gQnJvYWRjYXN0IHdpdGggYWRtaW4gdG9rZW4sIG9yIHBhc3RlIGludG8gPGNvZGU+c2VuZHJhd3RyYW5zYWN0aW9uPC9jb2RlPi5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC41ZW0nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY29weVRvQ2xpcGJvYXJkKHRoaXMuc3RhdGUuY2ZSZWZ1bmRUeEhleCl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHkgb3V0bGluZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICBDb3B5IGhleFxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5jZlJlZnVuZEJ1c3kgfHwgIWhhc0FkbWluVG9rZW59XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17aGFzQWRtaW5Ub2tlbiA/ICdQT1NUIC9zZXJ2aWNlcy9iaXRjb2luL2Jyb2FkY2FzdCcgOiAnQWRtaW4gdG9rZW4gcmVxdWlyZWQnfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVDZlJlZnVuZEJyb2FkY2FzdCgpfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIEJyb2FkY2FzdFxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IG51bGx9XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNmUmVmdW5kVHhpZFxuICAgICAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UgcG9zaXRpdmUgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgVHhpZHsnICd9XG4gICAgICAgICAgICAgICAgICAgIHtodWJVaS5iaXRjb2luRXhwbG9yZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89e2Avc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5zdGF0ZS5jZlJlZnVuZFR4aWQpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuY2ZSZWZ1bmRUeGlkfVxuICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICA8Y29kZT57dGhpcy5zdGF0ZS5jZlJlZnVuZFR4aWR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgICAgICAgIDxNb2RhbC5BY3Rpb25zPlxuICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLl9jbG9zZUNmUmVmdW5kTW9kYWwoKX0+Q2xvc2U8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvTW9kYWwuQWN0aW9ucz5cbiAgICAgICAgICA8L01vZGFsPlxuICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgIDxNb2RhbCBvcGVuPXt0aGlzLnN0YXRlLmNmUXJPcGVufSBvbkNsb3NlPXsoKSA9PiB0aGlzLl9jbG9zZUNmUXIoKX0gc2l6ZT1cInRpbnlcIj5cbiAgICAgICAgICA8TW9kYWwuSGVhZGVyPkJpdGNvaW4gVVJJIChCSVAyMSk8L01vZGFsLkhlYWRlcj5cbiAgICAgICAgICA8TW9kYWwuQ29udGVudCBzdHlsZT17eyB0ZXh0QWxpZ246ICdjZW50ZXInIH19PlxuICAgICAgICAgICAge3RoaXMuc3RhdGUuY2ZRckRhdGFVcmwgPyAoXG4gICAgICAgICAgICAgIDxpbWcgc3JjPXt0aGlzLnN0YXRlLmNmUXJEYXRhVXJsfSBhbHQ9XCJRUiBjb2RlXCIgc3R5bGU9e3sgbWF4V2lkdGg6ICcxMDAlJyB9fSAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7dGhpcy5zdGF0ZS5jZlFyVXJpID8gKFxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuODVlbScsIG1hcmdpblRvcDogJzAuNzVlbScgfX0+e3RoaXMuc3RhdGUuY2ZRclVyaX08L3A+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgPE1vZGFsLkFjdGlvbnM+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLl9jbG9zZUNmUXIoKX0+Q2xvc2U8L0J1dHRvbj5cbiAgICAgICAgICA8L01vZGFsLkFjdGlvbnM+XG4gICAgICAgIDwvTW9kYWw+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ3Jvd2RmdW5kaW5nSG9tZTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfcmVnZW5lcmF0b3IiLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwiR2VuZXJhdG9yIiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsInAiLCJ5IiwiRyIsInYiLCJkIiwiYmluZCIsImwiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydGllcyIsImtleSIsIl9jcmVhdGVDbGFzcyIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJCb29sZWFuIiwidmFsdWVPZiIsIl9pbmhlcml0cyIsIl9zZXRQcm90b3R5cGVPZiIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTGluayIsIl9yZXF1aXJlMiIsIkJ1dHRvbiIsIkZvcm0iLCJIZWFkZXIiLCJJY29uIiwiSW5wdXQiLCJMYWJlbCIsIkxpc3QiLCJNZXNzYWdlIiwiTW9kYWwiLCJTZWdtZW50IiwiVGFibGUiLCJRUkNvZGUiLCJfcmVxdWlyZTMiLCJicm9hZGNhc3RSYXdUcmFuc2FjdGlvbiIsImNyZWF0ZUNyb3dkZnVuZGluZ0NhbXBhaWduIiwiY3JlYXRlUGF5am9pbkRlcG9zaXQiLCJmZXRjaEJpdGNvaW5TdGF0dXMiLCJmZXRjaENyb3dkZnVuZGluZ0NhbXBhaWducyIsImZldGNoQ3Jvd2RmdW5kaW5nQ2FtcGFpZ24iLCJmZXRjaENyb3dkZnVuZGluZ0FjcERvbmF0aW9uUHNidCIsImZldGNoQ3Jvd2RmdW5kaW5nUGF5b3V0UHNidCIsInBvc3RDcm93ZGZ1bmRpbmdQYXlvdXRTaWduQXJiaXRlciIsInBvc3RDcm93ZGZ1bmRpbmdQYXlvdXRCcm9hZGNhc3QiLCJwb3N0Q3Jvd2RmdW5kaW5nUmVmdW5kUHJlcGFyZSIsImdldENyb3dkZnVuZGluZ0JlbmVmaWNpYXJ5UHVia2V5SGV4IiwiZ2V0Q3Jvd2RmdW5kaW5nQmVuZWZpY2lhcnlQYXlvdXRBZGRyZXNzIiwic2lnbkNyb3dkZnVuZGluZ1BheW91dFBzYnRCZW5lZmljaWFyeSIsImdldE5leHRSZWNlaXZlV2FsbGV0Q29udGV4dCIsImxvYWRVcHN0cmVhbVNldHRpbmdzIiwibG9hZFBheWpvaW5QcmVmZXJlbmNlcyIsImJ1aWxkQ3Jvd2RmdW5kRnVuZGVyQml0Y29pblVyaSIsImJ1aWxkQ3Jvd2RmdW5kUGF5bWVudHNEZWVwTGluayIsImNyb3dkZnVuZENhbXBhaWduQXBpVXJsIiwiX3JlcXVpcmU0IiwiZm9ybWF0U2F0c0Rpc3BsYXkiLCJmb3JtYXRCdGNGcm9tU2F0cyIsIl9yZXF1aXJlNSIsInJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIiLCJfcmVxdWlyZTYiLCJjb3B5VG9DbGlwYm9hcmQiLCJwdXNoVWlOb3RpZmljYXRpb24iLCJfcmVxdWlyZTciLCJsb2FkSHViVWlGZWF0dXJlRmxhZ3MiLCJzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncyIsIl9yZXF1aXJlOCIsIlNBVFNfUEVSX0JUQyIsIkNyb3dkZnVuZGluZ0hvbWUiLCJfUmVhY3QkQ29tcG9uZW50IiwicHJvcHMiLCJfdGhpcyIsInVwc3RyZWFtIiwicGF5am9pblByZWZzIiwic3RhdGUiLCJsb2FkaW5nIiwicmVmcmVzaGluZyIsInBheWpvaW5FbmFibGVkIiwib3BlcmF0b3JEZXBvc2l0IiwiYml0Y29pblN0YXR1cyIsImF2YWlsYWJsZSIsInN0YXR1cyIsImNyb3dkZnVuZGluZ0NhbXBhaWducyIsImNmVGl0bGUiLCJjZkdvYWxTYXRzIiwiY2ZNaW5TYXRzIiwiY2ZCZW5lZmljaWFyeUhleCIsImNmQnVzeSIsImNmRXJyb3IiLCJjZlN1Y2Nlc3MiLCJjZkFjcEFtb3VudFNhdHMiLCJjZlBheWpvaW5BbW91bnRTYXRzIiwiY2ZQYXlqb2luQmlwMjEiLCJjZlBheWpvaW5TZXNzaW9uSWQiLCJjZlZhdWx0U3RhdHMiLCJjZlJlZnVuZEFmdGVyQmxvY2tzIiwiY2ZTaGFyZUFtb3VudFNhdHMiLCJjZlFyRGF0YVVybCIsImNmUXJPcGVuIiwiY2ZRclVyaSIsImNmUGF5b3V0TW9kYWwiLCJjZlBheW91dERlc3QiLCJjZlBheW91dEZlZVNhdHMiLCJjZlBheW91dFBzYnQiLCJjZlBheW91dEJ1c3kiLCJjZlBheW91dEVyciIsImNmUGF5b3V0VHhpZCIsImNmUGF5b3V0SGludCIsImNmUmVmdW5kTW9kYWwiLCJjZlJlZnVuZERlc3QiLCJjZlJlZnVuZEZ1bmRlZFR4aWQiLCJjZlJlZnVuZFZvdXQiLCJjZlJlZnVuZEZlZVNhdHMiLCJjZlJlZnVuZEJ1c3kiLCJjZlJlZnVuZEVyciIsImNmUmVmdW5kVHhIZXgiLCJjZlJlZnVuZFR4aWQiLCJodWJVaUZsYWdzUmV2IiwiY29tcG9uZW50RGlkTW91bnQiLCJfdGhpczIiLCJyZWZyZXNoIiwiX2RlbGF5ZWRSZWZyZXNoVGltZXIiLCJzZXRUaW1lb3V0IiwiX2h1YlVpRmxhZ3NVbnN1YiIsInNldFN0YXRlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjbGVhclRpbWVvdXQiLCJnZXRJZGVudGl0eSIsImlkZW50aXR5IiwiYXV0aCIsImJyaWRnZSIsImJyaWRnZVJlZiIsImN1cnJlbnQiLCJicmlkZ2VBdXRoIiwiYnJpZGdlS2V5IiwiX2dldElkZW50aXR5S2V5IiwieHBydiIsInhwdWIiLCJnZXRBZGRyZXNzUGxhY2Vob2xkZXIiLCJuZXR3b3JrIiwidG9Mb3dlckNhc2UiLCJzYXRzVG9CVEMiLCJfcmVmcmVzaCIsIl9jYWxsZWUyIiwiY2FtcGFpZ25zTm9ybSIsImRldGFpbFJvd3MiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIngiLCJfdDIiLCJfY29udGV4dDIiLCJhbGwiLCJtYXAiLCJfcmVmIiwiX2NhbGxlZSIsImlkIiwiX3QiLCJfY29udGV4dCIsImNhbXBhaWduSWQiLCJ0cmltIiwiYmFsYW5jZVNhdHMiLCJ1bnNwZW50Q291bnQiLCJnb2FsTWV0IiwidmF1bHRVdHhvcyIsImVycm9yIiwibWVzc2FnZSIsIl94IiwiZXJyIiwiX2JpcDIxRm9yUm93Iiwicm93IiwiYWRkciIsImFkZHJlc3MiLCJtaW5DIiwiTWF0aCIsInJvdW5kIiwibWluQ29udHJpYnV0aW9uU2F0cyIsInNoYXJlIiwic2F0cyIsImlzRmluaXRlIiwiX3BheW1lbnRzTGlua0ZvclJvdyIsInBheVRvIiwiYW1vdW50U2F0cyIsImhhbmRsZUNmU2hvd0JpcDIxUXIiLCJfdGhpczMiLCJ1cmkiLCJ0b0RhdGFVUkwiLCJ3aWR0aCIsIm1hcmdpbiIsImVycm9yQ29ycmVjdGlvbkxldmVsIiwidXJsIiwiX2Nsb3NlQ2ZRciIsImhhbmRsZUNmRmlsbEJlbmVmaWNpYXJ5RnJvbVdhbGxldCIsImhleCIsIm9uUmVxdWlyZVVubG9jayIsImhhbmRsZUNmRmlsbFBheW91dEFkZHJlc3NGcm9tV2FsbGV0IiwiYml0Y29pbk5ldHdvcmsiLCJoYW5kbGVDZlBheW91dEJlbmVmaWNpYXJ5U2lnbiIsInBzYnQiLCJuZXh0QjY0IiwiX2hhbmRsZUNyb3dkZnVuZGluZ0NyZWF0ZSIsIl9jYWxsZWUzIiwiYWRtaW4iLCJiZW4iLCJnb2FsU2F0cyIsIm1pblNhdHMiLCJyZWZ1bmRBZnRlckJsb2NrcyIsInJlcyIsImNhbXAiLCJfdDMiLCJfY29udGV4dDMiLCJhZG1pblRva2VuIiwidGl0bGUiLCJiZW5lZmljaWFyeVB1YmtleUhleCIsImNhbXBhaWduIiwiY29uY2F0IiwiaGFuZGxlQ3Jvd2RmdW5kaW5nQ3JlYXRlIiwiX2hhbmRsZUNyb3dkZnVuZGluZ0NvcHlBY3BQc2J0IiwiX2NhbGxlZTQiLCJhbXQiLCJkYXRhIiwiYjY0IiwiX3Q0IiwiX2NvbnRleHQ0IiwicHNidEJhc2U2NCIsIkVycm9yIiwia2luZCIsInN1YnRpdGxlIiwiaGFuZGxlQ3Jvd2RmdW5kaW5nQ29weUFjcFBzYnQiLCJfeDIiLCJfaGFuZGxlQ3Jvd2RmdW5kaW5nUGF5am9pblRvVmF1bHQiLCJfY2FsbGVlNSIsImNpZCIsInJlY2VpdmVXYWxsZXQiLCJzZXNzaW9uIiwibmF2IiwiX3Q1IiwiX2NvbnRleHQ1IiwibGFiZWwiLCJtZW1vIiwiYmlwMjFVcmkiLCJocmVmIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY29weVRleHQiLCJuYXZpZ2F0ZSIsImhhbmRsZUNyb3dkZnVuZGluZ1BheWpvaW5Ub1ZhdWx0IiwiX3gzIiwiX2Nsb3NlQ2ZQYXlvdXRNb2RhbCIsIl9oYW5kbGVDZlBheW91dEJ1aWxkUHNidCIsIl9jYWxsZWU2IiwiZGVzdCIsImZlZVNhdHMiLCJfdDYiLCJfY29udGV4dDYiLCJtYXgiLCJkZXN0aW5hdGlvbiIsImhhbmRsZUNmUGF5b3V0QnVpbGRQc2J0IiwiX2hhbmRsZUNmUGF5b3V0QXJiaXRlclNpZ24iLCJfY2FsbGVlNyIsIl90NyIsIl9jb250ZXh0NyIsImhhbmRsZUNmUGF5b3V0QXJiaXRlclNpZ24iLCJfaGFuZGxlQ2ZQYXlvdXRCcm9hZGNhc3QiLCJfY2FsbGVlOCIsInR4aWQiLCJfdDgiLCJfY29udGV4dDgiLCJoYW5kbGVDZlBheW91dEJyb2FkY2FzdCIsIl9jbG9zZUNmUmVmdW5kTW9kYWwiLCJfaGFuZGxlQ2ZSZWZ1bmRQcmVwYXJlIiwiX2NhbGxlZTkiLCJmdW5kZWRUeGlkIiwidm91dFJhdyIsInZvdXRPcHQiLCJfdDkiLCJfY29udGV4dDkiLCJkZXN0aW5hdGlvbkFkZHJlc3MiLCJ2b3V0IiwidHhIZXgiLCJoYW5kbGVDZlJlZnVuZFByZXBhcmUiLCJfaGFuZGxlQ2ZSZWZ1bmRCcm9hZGNhc3QiLCJfY2FsbGVlMCIsIm91dCIsIl90MCIsIl9jb250ZXh0MCIsInJlc3VsdCIsImhhbmRsZUNmUmVmdW5kQnJvYWRjYXN0IiwicmVuZGVyIiwiX3RoaXM0IiwiaHViVWkiLCJoYXNBZG1pblRva2VuIiwiYWRkcmVzc1BsYWNlaG9sZGVyIiwiYmMiLCJibG9ja2NoYWluIiwiY2hhaW5IZWlnaHQiLCJibG9ja3MiLCJoZWlnaHQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJkaXNwbGF5IiwiZmxleFdyYXAiLCJhbGlnbkl0ZW1zIiwiZ2FwIiwibWFyZ2luQm90dG9tIiwiYXMiLCJjb2xvciIsIkNvbnRlbnQiLCJwcmltYXJ5Iiwib25DbGljayIsInRvIiwiYmFzaWMiLCJiaXRjb2luUGF5bWVudHMiLCJtYXhXaWR0aCIsImZvbnRXZWlnaHQiLCJodG1sRm9yIiwidHlwZSIsIm1pbiIsInN0ZXAiLCJvbkNoYW5nZSIsInRhcmdldCIsIm1hcmdpblRvcCIsImZvbnRTaXplIiwiR3JvdXAiLCJ3aWR0aHMiLCJGaWVsZCIsInBsYWNlaG9sZGVyIiwiZmxleCIsIm1pbldpZHRoIiwiZm9udEZhbWlseSIsImRpc2FibGVkIiwibWFyZ2luTGVmdCIsIm5lZ2F0aXZlIiwicG9zaXRpdmUiLCJpbmZvIiwic2l6ZSIsImNvbXBhY3QiLCJjZWxsZWQiLCJ1bnN0YWNrYWJsZSIsIlJvdyIsIkhlYWRlckNlbGwiLCJ0ZXh0QWxpZ24iLCJCb2R5Iiwic2hvcnRBZGRyIiwic3QiLCJnb2FsTnVtIiwiYmFsTnVtIiwicGN0IiwicnQiLCJyZWZ1bmRMb2NrdGltZUhlaWdodCIsInJlZnVuZEV0YSIsImNhblBheW91dCIsInJlZnVuZFVubG9ja2VkIiwiY2FuUmVmdW5kVWkiLCJyZWZ1bmRUaXRsZSIsInBheW91dFRpdGxlIiwiQ2VsbCIsIndvcmRCcmVhayIsInJlbCIsImZsZXhEaXJlY3Rpb24iLCJzdE5vdyIsInUwIiwib3BlbiIsIm9uQ2xvc2UiLCJjbG9zZUljb24iLCJiaXRjb2luRXhwbG9yZXIiLCJBY3Rpb25zIiwid2FybmluZyIsIm1pZCIsInN0UiIsInV4IiwicmVsYXhlZCIsImRpdmlkZWQiLCJJdGVtIiwic3JjIiwiYWx0IiwiQ29tcG9uZW50IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/CrowdfundingHome.js\n\n}')},"./components/DelegationSigningModal.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Shared signing queue for delegated Hub signatures + Electron fabric://login approval.\n * — Web: pending rows come from global state (Bridge) + localStorage delegation token.\n * — Electron: polls GET /sessions (loopback); fabric://login uses IPC + pullPendingLoginPrompt.\n */\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Modal = _require.Modal,\n Button = _require.Button,\n Header = _require.Header,\n Icon = _require.Icon;\nvar _require2 = __webpack_require__(/*! ../functions/toast */ "./functions/toast.js"),\n toast = _require2.toast;\nvar _require3 = __webpack_require__(/*! ../functions/messageTypes */ "./functions/messageTypes.js"),\n isDelegationSignatureRequestActivity = _require3.isDelegationSignatureRequestActivity;\nvar _require4 = __webpack_require__(/*! ../functions/fabricMessageEnvelope */ "./functions/fabricMessageEnvelope.js"),\n DEFAULT_SIGN_PROMPT = _require4.DEFAULT_SIGN_PROMPT;\nvar _require5 = __webpack_require__(/*! ../functions/fabricProtocolUrl */ "./functions/fabricProtocolUrl.js"),\n fabricMessageSummaryFromHex = _require5.fabricMessageSummaryFromHex;\nvar _require6 = __webpack_require__(/*! ../functions/fabricDelegationLocal */ "./functions/fabricDelegationLocal.js"),\n DELEGATION_STORAGE_KEY = _require6.DELEGATION_STORAGE_KEY;\nvar _require7 = __webpack_require__(/*! ../functions/fabricSafeLog */ "./functions/fabricSafeLog.js"),\n safeIdentityErr = _require7.safeIdentityErr;\nvar _require8 = __webpack_require__(/*! ../functions/fabricBrowserState */ "./functions/fabricBrowserState.js"),\n readStorageJSON = _require8.readStorageJSON;\nvar DelegationSigningModal = /*#__PURE__*/function (_React$Component) {\n function DelegationSigningModal(props) {\n var _this;\n _classCallCheck(this, DelegationSigningModal);\n _this = _callSuper(this, DelegationSigningModal, [props]);\n _this.state = {\n current: null,\n busy: false,\n loginPrompt: null,\n loginBusy: false\n };\n _this._openIds = new Set();\n _this._seenLoginSessionIds = new Set();\n _this._loginUnsub = null;\n _this._pollTimer = null;\n _this._onGlobal = _this._onGlobal.bind(_this);\n _this._onDelegationSignRequest = _this._onDelegationSignRequest.bind(_this);\n return _this;\n }\n _inherits(DelegationSigningModal, _React$Component);\n return _createClass(DelegationSigningModal, [{\n key: "componentDidMount",\n value: function componentDidMount() {\n var _this2 = this;\n if (typeof window === \'undefined\') return;\n window.addEventListener(\'globalStateUpdate\', this._onGlobal);\n window.addEventListener(\'fabric:delegationSignRequest\', this._onDelegationSignRequest);\n var br = this.props.bridgeRef && this.props.bridgeRef.current;\n if (br && typeof br.getGlobalState === \'function\') {\n var gs = br.getGlobalState();\n if (gs && gs.messages) this._ingestMessages(gs.messages);\n }\n if (window.fabricDesktop && window.fabricDesktop.isDesktopShell) {\n this._pollTimer = setInterval(function () {\n return void _this2._pollLoopbackSessions();\n }, 2000);\n void this._pollLoopbackSessions();\n void this._pullPendingLoginPrompt();\n if (typeof window.fabricDesktop.onLoginPrompt === \'function\') {\n this._loginUnsub = window.fabricDesktop.onLoginPrompt(function (payload) {\n _this2._maybeSetLoginPrompt(payload);\n });\n }\n }\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n if (typeof window !== \'undefined\') {\n window.removeEventListener(\'globalStateUpdate\', this._onGlobal);\n window.removeEventListener(\'fabric:delegationSignRequest\', this._onDelegationSignRequest);\n }\n if (this._pollTimer) clearInterval(this._pollTimer);\n if (typeof this._loginUnsub === \'function\') this._loginUnsub();\n }\n }, {\n key: "_onDelegationSignRequest",\n value: function _onDelegationSignRequest(ev) {\n var d = ev && ev.detail;\n if (!d || typeof d.wireHex !== \'string\') return;\n var fm = fabricMessageSummaryFromHex(d.wireHex);\n if (!fm.ok) return;\n this._maybeSetLoginPrompt({\n kind: \'fabricMessage\',\n sessionId: null,\n hubBase: typeof window !== \'undefined\' ? window.location.origin : \'\',\n fabricMessageHex: fm.hex,\n fabricMessageSummary: fm.summary,\n fabricMessageOnly: true,\n delegationSource: d.source || \'event\'\n });\n }\n }, {\n key: "_pullPendingLoginPrompt",\n value: function () {\n var _pullPendingLoginPrompt2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var pull, payload, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n pull = window.fabricDesktop && typeof window.fabricDesktop.pullPendingLoginPrompt === \'function\' ? window.fabricDesktop.pullPendingLoginPrompt : null;\n if (pull) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n _context.p = 1;\n _context.n = 2;\n return pull();\n case 2:\n payload = _context.v;\n this._maybeSetLoginPrompt(payload);\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n case 4:\n return _context.a(2);\n }\n }, _callee, this, [[1, 3]]);\n }));\n function _pullPendingLoginPrompt() {\n return _pullPendingLoginPrompt2.apply(this, arguments);\n }\n return _pullPendingLoginPrompt;\n }()\n }, {\n key: "_maybeSetLoginPrompt",\n value: function _maybeSetLoginPrompt(payload) {\n if (!payload) return;\n if (payload.fabricMessageOnly && payload.fabricMessageHex) {\n var _sid = "msg:".concat(String(payload.fabricMessageHex).slice(0, 48));\n if (this._seenLoginSessionIds.has(_sid)) return;\n this._seenLoginSessionIds.add(_sid);\n this.setState(function (s) {\n if (s.loginPrompt && s.loginPrompt.fabricMessageHex === payload.fabricMessageHex) return null;\n return {\n loginPrompt: payload\n };\n });\n return;\n }\n if (!payload.sessionId) return;\n var sid = String(payload.sessionId);\n if (this._seenLoginSessionIds.has(sid)) return;\n this._seenLoginSessionIds.add(sid);\n this.setState(function (s) {\n if (s.loginPrompt && String(s.loginPrompt.sessionId) === sid) return null;\n return {\n loginPrompt: payload\n };\n });\n }\n }, {\n key: "_completeLogin",\n value: function () {\n var _completeLogin2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(approve) {\n var loginPrompt, hubBase, sessionId, res, data, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n loginPrompt = this.state.loginPrompt;\n if (loginPrompt) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2);\n case 1:\n if (!loginPrompt.fabricMessageOnly) {\n _context2.n = 2;\n break;\n }\n this.setState({\n loginPrompt: null\n });\n return _context2.a(2);\n case 2:\n if (loginPrompt.sessionId) {\n _context2.n = 3;\n break;\n }\n return _context2.a(2);\n case 3:\n if (approve) {\n _context2.n = 4;\n break;\n }\n this.setState({\n loginPrompt: null\n });\n return _context2.a(2);\n case 4:\n hubBase = String(loginPrompt.hubBase || window.location.origin).replace(/\\/$/, \'\');\n sessionId = encodeURIComponent(String(loginPrompt.sessionId).trim());\n this.setState({\n loginBusy: true\n });\n _context2.p = 5;\n _context2.n = 6;\n return fetch("".concat(hubBase, "/sessions/").concat(sessionId, "/signatures"), {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n },\n body: JSON.stringify({}),\n cache: \'no-store\'\n });\n case 6:\n res = _context2.v;\n _context2.n = 7;\n return res.json()["catch"](function () {\n return {};\n });\n case 7:\n data = _context2.v;\n if (!res.ok || !data.ok) {\n toast.error(\'Could not complete browser login.\');\n console.error(\'[DESKTOP:UI] sessions/.../signatures failed:\', res.status, data);\n } else {\n toast.success(\'Browser login signed.\');\n }\n _context2.n = 9;\n break;\n case 8:\n _context2.p = 8;\n _t2 = _context2.v;\n toast.error(safeIdentityErr(_t2) || \'Login signing failed.\');\n case 9:\n _context2.p = 9;\n this.setState({\n loginPrompt: null,\n loginBusy: false\n });\n return _context2.f(9);\n case 10:\n return _context2.a(2);\n }\n }, _callee2, this, [[5, 8, 9, 10]]);\n }));\n function _completeLogin(_x) {\n return _completeLogin2.apply(this, arguments);\n }\n return _completeLogin;\n }()\n }, {\n key: "_getDelegationToken",\n value: function _getDelegationToken() {\n try {\n var d = readStorageJSON(DELEGATION_STORAGE_KEY, null);\n if (!d) return null;\n return d && d.token ? String(d.token) : null;\n } catch (_) {\n return null;\n }\n }\n }, {\n key: "_onGlobal",\n value: function _onGlobal(event) {\n var gs = event && event.detail && event.detail.globalState;\n if (!gs || !gs.messages) return;\n this._ingestMessages(gs.messages);\n }\n }, {\n key: "_ingestMessages",\n value: function _ingestMessages(messages) {\n if (this.state.loginPrompt || this.state.loginBusy) return;\n var token = this._getDelegationToken();\n if (!token) return;\n if (this.state.current || this.state.busy) return;\n for (var _i = 0, _Object$keys = Object.keys(messages); _i < _Object$keys.length; _i++) {\n var k = _Object$keys[_i];\n var m = messages[k];\n if (!m || !isDelegationSignatureRequestActivity(m)) continue;\n var o = m.object || {};\n if ((o.status || m.status) !== \'pending\') continue;\n var mid = o.messageId;\n if (!mid || this._openIds.has(mid)) continue;\n this._openIds.add(mid);\n this.setState({\n current: {\n sessionId: token,\n messageId: mid,\n preview: typeof o.content === \'string\' ? o.content : \'\',\n purpose: typeof o.purpose === \'string\' ? o.purpose : \'sign\',\n origin: typeof window !== \'undefined\' ? window.location.origin : \'\'\n }\n });\n return;\n }\n }\n }, {\n key: "_pollLoopbackSessions",\n value: function () {\n var _pollLoopbackSessions2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var _this3 = this;\n var origin, res, j, pendingItems, _iterator, _step, s, sid, arr, _iterator2, _step2, p, first, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n if (!(typeof window === \'undefined\')) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n if (!(this.state.loginPrompt || this.state.loginBusy)) {\n _context3.n = 2;\n break;\n }\n return _context3.a(2);\n case 2:\n if (!(this.state.current || this.state.busy)) {\n _context3.n = 3;\n break;\n }\n return _context3.a(2);\n case 3:\n origin = window.location.origin;\n _context3.p = 4;\n _context3.n = 5;\n return fetch("".concat(origin, "/sessions"), {\n headers: {\n Accept: \'application/json\'\n },\n cache: \'no-store\'\n });\n case 5:\n res = _context3.v;\n _context3.n = 7;\n break;\n case 6:\n _context3.p = 6;\n _t3 = _context3.v;\n return _context3.a(2);\n case 7:\n _context3.n = 8;\n return res.json()["catch"](function () {\n return {};\n });\n case 8:\n j = _context3.v;\n if (!(!res.ok || !j.ok || !Array.isArray(j.sessions))) {\n _context3.n = 9;\n break;\n }\n return _context3.a(2);\n case 9:\n pendingItems = [];\n _iterator = _createForOfIteratorHelper(j.sessions);\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n s = _step.value;\n sid = s && s.tokenId ? String(s.tokenId) : \'\';\n arr = s && Array.isArray(s.pendingDelegationMessages) ? s.pendingDelegationMessages : [];\n _iterator2 = _createForOfIteratorHelper(arr);\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n p = _step2.value;\n if (p && p.messageId && sid) {\n pendingItems.push({\n sessionId: sid,\n messageId: p.messageId,\n preview: p.preview,\n purpose: p.purpose || \'sign\',\n origin: p.origin || s.origin || \'\'\n });\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n if (!(pendingItems.length === 0)) {\n _context3.n = 10;\n break;\n }\n return _context3.a(2);\n case 10:\n first = pendingItems.find(function (p) {\n return !_this3._openIds.has(p.messageId);\n });\n if (first) {\n _context3.n = 11;\n break;\n }\n return _context3.a(2);\n case 11:\n this._openIds.add(first.messageId);\n this.setState({\n current: first\n });\n case 12:\n return _context3.a(2);\n }\n }, _callee3, this, [[4, 6]]);\n }));\n function _pollLoopbackSessions() {\n return _pollLoopbackSessions2.apply(this, arguments);\n }\n return _pollLoopbackSessions;\n }()\n }, {\n key: "_resolve",\n value: function () {\n var _resolve2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(status) {\n var current, origin, mid, ok, r, j2, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n current = this.state.current;\n if (!(!current || !current.sessionId || !current.messageId)) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2);\n case 1:\n this.setState({\n busy: true\n });\n origin = typeof window !== \'undefined\' ? window.location.origin : \'\';\n mid = current.messageId;\n ok = false;\n _context4.p = 2;\n _context4.n = 3;\n return fetch("".concat(origin, "/services/rpc"), {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n },\n body: JSON.stringify({\n jsonrpc: \'2.0\',\n id: Date.now(),\n method: \'ResolveDelegationSignatureMessage\',\n params: [{\n sessionId: current.sessionId,\n messageId: mid,\n status: status\n }]\n }),\n cache: \'no-store\'\n });\n case 3:\n r = _context4.v;\n _context4.n = 4;\n return r.json()["catch"](function () {\n return {};\n });\n case 4:\n j2 = _context4.v;\n ok = r.ok && j2 && !j2.error && j2.result && j2.result.ok;\n if (ok && status === \'approved\') toast.success(\'Signature request approved.\');else if (ok) toast.warning(\'Signature request rejected.\');else toast.error(j2 && j2.error && j2.error.message || \'Delegation resolution failed.\');\n _context4.n = 6;\n break;\n case 5:\n _context4.p = 5;\n _t4 = _context4.v;\n toast.error(_t4 && _t4.message ? _t4.message : \'Delegation resolution failed.\');\n case 6:\n _context4.p = 6;\n if (!ok) this._openIds["delete"](mid);\n this.setState({\n current: null,\n busy: false\n });\n return _context4.f(6);\n case 7:\n return _context4.a(2);\n }\n }, _callee4, this, [[2, 5, 6, 7]]);\n }));\n function _resolve(_x2) {\n return _resolve2.apply(this, arguments);\n }\n return _resolve;\n }()\n }, {\n key: "render",\n value: function render() {\n var _this4 = this;\n var _this$state = this.state,\n current = _this$state.current,\n busy = _this$state.busy,\n loginPrompt = _this$state.loginPrompt,\n loginBusy = _this$state.loginBusy;\n var isDesktop = typeof window !== \'undefined\' && window.fabricDesktop && window.fabricDesktop.isDesktopShell;\n var showLogin = !!(isDesktop && loginPrompt);\n if (showLogin) {\n var messageToSign = loginPrompt && typeof loginPrompt.message === \'string\' ? loginPrompt.message : \'\';\n var loginPreview = messageToSign.length > 1200 ? "".concat(messageToSign.slice(0, 1200), "\\u2026") : messageToSign;\n var loginOrigin = loginPrompt && typeof loginPrompt.origin === \'string\' ? loginPrompt.origin : \'\';\n var loginNonce = loginPrompt && typeof loginPrompt.nonce === \'string\' ? loginPrompt.nonce : \'\';\n var fs = loginPrompt && loginPrompt.fabricMessageSummary ? loginPrompt.fabricMessageSummary : null;\n var messageOnly = !!(loginPrompt && loginPrompt.fabricMessageOnly);\n var promptLine = fs && fs.envelopeMeta && fs.envelopeMeta.prompt || DEFAULT_SIGN_PROMPT;\n var fromContract = loginPrompt && loginPrompt.delegationSource === \'RunExecutionContract\';\n return /*#__PURE__*/React.createElement(Modal, {\n size: "small",\n open: true,\n onClose: function onClose() {\n return !loginBusy && _this4._completeLogin(false);\n },\n closeOnDimmerClick: !loginBusy,\n closeOnEscape: !loginBusy\n }, /*#__PURE__*/React.createElement(Header, {\n icon: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sign-in"\n }), messageOnly ? \'Fabric message\' : \'Fabric Hub — browser login\'), /*#__PURE__*/React.createElement(Modal.Content, null, fs ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'1em\'\n }\n }, fromContract ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginBottom: \'0.5em\'\n }\n }, "From execution contract (hub run)") : null, /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: \'0.65em\',\n fontSize: \'1.02em\'\n }\n }, promptLine), /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Fabric Message"), " (wire format)"), fs.envelopeMeta && fs.envelopeMeta.signersCount > 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.88em\',\n color: \'#555\'\n }\n }, "Co-signers / parties to notify: ", /*#__PURE__*/React.createElement("strong", null, fs.envelopeMeta.signersCount), " (multisig-ready)") : null, /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.92em\',\n color: \'#444\'\n }\n }, "Type ", /*#__PURE__*/React.createElement("code", null, fs.typeName), fs.byteLength ? " \\xB7 ".concat(fs.byteLength, " bytes") : \'\'), fs.authorHex ? /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.85em\',\n color: \'#666\',\n wordBreak: \'break-all\'\n }\n }, "Author ", /*#__PURE__*/React.createElement("code", null, fs.authorHex.length > 48 ? "".concat(fs.authorHex.slice(0, 48), "\\u2026") : fs.authorHex)) : null, /*#__PURE__*/React.createElement("pre", {\n style: {\n maxHeight: \'28vh\',\n overflow: \'auto\',\n fontSize: \'0.82em\',\n padding: \'0.65em\',\n background: \'#f4f4f4\',\n borderRadius: 4,\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\'\n }\n }, fs.bodyPreview || \'(no body)\')) : null, !messageOnly ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: \'0.75em\'\n }\n }, "A browser tab is asking to link this Hub identity for external signing."), loginOrigin ? /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("strong", null, "Origin"), \': \', loginOrigin) : null, loginNonce ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Nonce"), \': \', loginNonce.length > 16 ? "".concat(loginNonce.slice(0, 16), "\\u2026") : loginNonce) : null, /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.75em\',\n marginBottom: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Message you will sign"), " (BIP340 Schnorr over UTF-8 bytes):"), /*#__PURE__*/React.createElement("pre", {\n style: {\n maxHeight: \'40vh\',\n overflow: \'auto\',\n fontSize: \'0.85em\',\n padding: \'0.75em\',\n background: \'#f7f7f7\',\n borderRadius: 4,\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\'\n }\n }, loginPreview || \'(empty)\')) : /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.95em\'\n }\n }, "Opaque link ", /*#__PURE__*/React.createElement("code", null, \'fabric:\'), " or legacy ", /*#__PURE__*/React.createElement("code", null, "fabric://message?hex=\\u2026"), ". No browser login session.")), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n disabled: loginBusy,\n onClick: function onClick() {\n return _this4._completeLogin(false);\n }\n }, messageOnly ? \'Close\' : \'Cancel\'), !messageOnly ? /*#__PURE__*/React.createElement(Button, {\n primary: true,\n disabled: loginBusy,\n loading: loginBusy,\n onClick: function onClick() {\n return void _this4._completeLogin(true);\n }\n }, "Sign & approve") : null));\n }\n return /*#__PURE__*/React.createElement(Modal, {\n size: "small",\n open: !!current,\n onClose: function onClose() {\n return !busy && void _this4._resolve(\'rejected\');\n },\n closeOnDimmerClick: !busy,\n closeOnEscape: !busy\n }, /*#__PURE__*/React.createElement(Header, {\n icon: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "key"\n }), "Delegation signature"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement("p", {\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\'\n }\n }, current && typeof current.preview === \'string\' ? String(current.preview).slice(0, 800) : \'(empty message)\'), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.92em\',\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Purpose"), \': \', current && current.purpose ? String(current.purpose) : \'sign\', /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("strong", null, "Origin"), \': \', current && current.origin ? String(current.origin) : \'—\')), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n disabled: busy,\n onClick: function onClick() {\n return void _this4._resolve(\'rejected\');\n }\n }, "Reject"), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n disabled: busy,\n loading: busy,\n onClick: function onClick() {\n return void _this4._resolve(\'approved\');\n }\n }, "Approve")));\n }\n }]);\n}(React.Component);\nmodule.exports = DelegationSigningModal;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0RlbGVnYXRpb25TaWduaW5nTW9kYWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBQUEsU0FBQUssMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBUCxNQUFBLElBQUFLLENBQUEsQ0FBQUwsTUFBQSxDQUFBQyxRQUFBLEtBQUFJLENBQUEscUJBQUFFLENBQUEsUUFBQUMsS0FBQSxDQUFBQyxPQUFBLENBQUFKLENBQUEsTUFBQUUsQ0FBQSxHQUFBRywyQkFBQSxDQUFBTCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBTSxNQUFBLElBQUFKLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFLLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFBLEVBQUEsV0FBQUgsRUFBQSxJQUFBUCxDQUFBLENBQUFNLE1BQUEsS0FBQUssSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQVosQ0FBQSxDQUFBTyxFQUFBLFVBQUFOLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxVQUFBQSxDQUFBLEtBQUFhLENBQUEsRUFBQUwsQ0FBQSxnQkFBQU0sU0FBQSxpSkFBQXBCLENBQUEsRUFBQXFCLENBQUEsT0FBQUMsQ0FBQSxnQkFBQVAsQ0FBQSxXQUFBQSxFQUFBLElBQUFQLENBQUEsR0FB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LEdBQUdqRixNQUFNLENBQUN3QyxPQUFPLENBQUN5QyxNQUFNLENBQUMsR0FBRyxHQUNsRixDQUNVLENBQUMsZUFDaEJuRSxLQUFBLENBQUFnTCxhQUFBLENBQUM3SyxLQUFLLENBQUN1TSxPQUFPLHFCQUNaMU0sS0FBQSxDQUFBZ0wsYUFBQSxDQUFDNUssTUFBTTtRQUFDdU0sUUFBUSxFQUFFaEwsSUFBSztRQUFDaUwsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7VUFBQSxPQUFRLEtBQUszQyxNQUFJLENBQUNILFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFBQTtNQUFDLEdBQUMsUUFFL0QsQ0FBQyxlQUNUOUosS0FBQSxDQUFBZ0wsYUFBQSxDQUFDNUssTUFBTTtRQUFDeU0sT0FBTztRQUFDRixRQUFRLEVBQUVoTCxJQUFLO1FBQUNtTCxPQUFPLEVBQUVuTCxJQUFLO1FBQUNpTCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVEsS0FBSzNDLE1BQUksQ0FBQ0gsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUFBO01BQUMsR0FBQyxTQUV0RixDQUNLLENBQ1YsQ0FBQztJQUVaO0VBQUM7QUFBQSxFQWpaa0M5SixLQUFLLENBQUMrTSxTQUFTO0FBb1pwREMsTUFBTSxDQUFDQyxPQUFPLEdBQUc1TCxzQkFBc0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvRGVsZWdhdGlvblNpZ25pbmdNb2RhbC5qcz8xYjAzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTaGFyZWQgc2lnbmluZyBxdWV1ZSBmb3IgZGVsZWdhdGVkIEh1YiBzaWduYXR1cmVzICsgRWxlY3Ryb24gZmFicmljOi8vbG9naW4gYXBwcm92YWwuXG4gKiDigJQgV2ViOiBwZW5kaW5nIHJvd3MgY29tZSBmcm9tIGdsb2JhbCBzdGF0ZSAoQnJpZGdlKSArIGxvY2FsU3RvcmFnZSBkZWxlZ2F0aW9uIHRva2VuLlxuICog4oCUIEVsZWN0cm9uOiBwb2xscyBHRVQgL3Nlc3Npb25zIChsb29wYmFjayk7IGZhYnJpYzovL2xvZ2luIHVzZXMgSVBDICsgcHVsbFBlbmRpbmdMb2dpblByb21wdC5cbiAqL1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IE1vZGFsLCBCdXR0b24sIEhlYWRlciwgSWNvbiB9ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IHsgdG9hc3QgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy90b2FzdCcpO1xuY29uc3QgeyBpc0RlbGVnYXRpb25TaWduYXR1cmVSZXF1ZXN0QWN0aXZpdHkgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9tZXNzYWdlVHlwZXMnKTtcbmNvbnN0IHsgREVGQVVMVF9TSUdOX1BST01QVCB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY01lc3NhZ2VFbnZlbG9wZScpO1xuY29uc3QgeyBmYWJyaWNNZXNzYWdlU3VtbWFyeUZyb21IZXggfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNQcm90b2NvbFVybCcpO1xuY29uc3QgeyBERUxFR0FUSU9OX1NUT1JBR0VfS0VZIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljRGVsZWdhdGlvbkxvY2FsJyk7XG5jb25zdCB7IHNhZmVJZGVudGl0eUVyciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY1NhZmVMb2cnKTtcbmNvbnN0IHsgcmVhZFN0b3JhZ2VKU09OIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljQnJvd3NlclN0YXRlJyk7XG5cbmNsYXNzIERlbGVnYXRpb25TaWduaW5nTW9kYWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGN1cnJlbnQ6IG51bGwsXG4gICAgICBidXN5OiBmYWxzZSxcbiAgICAgIGxvZ2luUHJvbXB0OiBudWxsLFxuICAgICAgbG9naW5CdXN5OiBmYWxzZVxuICAgIH07XG4gICAgdGhpcy5fb3BlbklkcyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLl9zZWVuTG9naW5TZXNzaW9uSWRzID0gbmV3IFNldCgpO1xuICAgIHRoaXMuX2xvZ2luVW5zdWIgPSBudWxsO1xuICAgIHRoaXMuX3BvbGxUaW1lciA9IG51bGw7XG4gICAgdGhpcy5fb25HbG9iYWwgPSB0aGlzLl9vbkdsb2JhbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29uRGVsZWdhdGlvblNpZ25SZXF1ZXN0ID0gdGhpcy5fb25EZWxlZ2F0aW9uU2lnblJlcXVlc3QuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZ2xvYmFsU3RhdGVVcGRhdGUnLCB0aGlzLl9vbkdsb2JhbCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZhYnJpYzpkZWxlZ2F0aW9uU2lnblJlcXVlc3QnLCB0aGlzLl9vbkRlbGVnYXRpb25TaWduUmVxdWVzdCk7XG4gICAgY29uc3QgYnIgPSB0aGlzLnByb3BzLmJyaWRnZVJlZiAmJiB0aGlzLnByb3BzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgIGlmIChiciAmJiB0eXBlb2YgYnIuZ2V0R2xvYmFsU3RhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGdzID0gYnIuZ2V0R2xvYmFsU3RhdGUoKTtcbiAgICAgIGlmIChncyAmJiBncy5tZXNzYWdlcykgdGhpcy5faW5nZXN0TWVzc2FnZXMoZ3MubWVzc2FnZXMpO1xuICAgIH1cbiAgICBpZiAod2luZG93LmZhYnJpY0Rlc2t0b3AgJiYgd2luZG93LmZhYnJpY0Rlc2t0b3AuaXNEZXNrdG9wU2hlbGwpIHtcbiAgICAgIHRoaXMuX3BvbGxUaW1lciA9IHNldEludGVydmFsKCgpID0+IHZvaWQgdGhpcy5fcG9sbExvb3BiYWNrU2Vzc2lvbnMoKSwgMjAwMCk7XG4gICAgICB2b2lkIHRoaXMuX3BvbGxMb29wYmFja1Nlc3Npb25zKCk7XG4gICAgICB2b2lkIHRoaXMuX3B1bGxQZW5kaW5nTG9naW5Qcm9tcHQoKTtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93LmZhYnJpY0Rlc2t0b3Aub25Mb2dpblByb21wdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLl9sb2dpblVuc3ViID0gd2luZG93LmZhYnJpY0Rlc2t0b3Aub25Mb2dpblByb21wdCgocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIHRoaXMuX21heWJlU2V0TG9naW5Qcm9tcHQocGF5bG9hZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdnbG9iYWxTdGF0ZVVwZGF0ZScsIHRoaXMuX29uR2xvYmFsKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmYWJyaWM6ZGVsZWdhdGlvblNpZ25SZXF1ZXN0JywgdGhpcy5fb25EZWxlZ2F0aW9uU2lnblJlcXVlc3QpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcG9sbFRpbWVyKSBjbGVhckludGVydmFsKHRoaXMuX3BvbGxUaW1lcik7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9sb2dpblVuc3ViID09PSAnZnVuY3Rpb24nKSB0aGlzLl9sb2dpblVuc3ViKCk7XG4gIH1cblxuICBfb25EZWxlZ2F0aW9uU2lnblJlcXVlc3QgKGV2KSB7XG4gICAgY29uc3QgZCA9IGV2ICYmIGV2LmRldGFpbDtcbiAgICBpZiAoIWQgfHwgdHlwZW9mIGQud2lyZUhleCAhPT0gJ3N0cmluZycpIHJldHVybjtcbiAgICBjb25zdCBmbSA9IGZhYnJpY01lc3NhZ2VTdW1tYXJ5RnJvbUhleChkLndpcmVIZXgpO1xuICAgIGlmICghZm0ub2spIHJldHVybjtcbiAgICB0aGlzLl9tYXliZVNldExvZ2luUHJvbXB0KHtcbiAgICAgIGtpbmQ6ICdmYWJyaWNNZXNzYWdlJyxcbiAgICAgIHNlc3Npb25JZDogbnVsbCxcbiAgICAgIGh1YkJhc2U6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA6ICcnLFxuICAgICAgZmFicmljTWVzc2FnZUhleDogZm0uaGV4LFxuICAgICAgZmFicmljTWVzc2FnZVN1bW1hcnk6IGZtLnN1bW1hcnksXG4gICAgICBmYWJyaWNNZXNzYWdlT25seTogdHJ1ZSxcbiAgICAgIGRlbGVnYXRpb25Tb3VyY2U6IGQuc291cmNlIHx8ICdldmVudCdcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9wdWxsUGVuZGluZ0xvZ2luUHJvbXB0ICgpIHtcbiAgICBjb25zdCBwdWxsID0gd2luZG93LmZhYnJpY0Rlc2t0b3AgJiYgdHlwZW9mIHdpbmRvdy5mYWJyaWNEZXNrdG9wLnB1bGxQZW5kaW5nTG9naW5Qcm9tcHQgPT09ICdmdW5jdGlvbidcbiAgICAgID8gd2luZG93LmZhYnJpY0Rlc2t0b3AucHVsbFBlbmRpbmdMb2dpblByb21wdFxuICAgICAgOiBudWxsO1xuICAgIGlmICghcHVsbCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcHVsbCgpO1xuICAgICAgdGhpcy5fbWF5YmVTZXRMb2dpblByb21wdChwYXlsb2FkKTtcbiAgICB9IGNhdGNoIChfKSB7fVxuICB9XG5cbiAgX21heWJlU2V0TG9naW5Qcm9tcHQgKHBheWxvYWQpIHtcbiAgICBpZiAoIXBheWxvYWQpIHJldHVybjtcbiAgICBpZiAocGF5bG9hZC5mYWJyaWNNZXNzYWdlT25seSAmJiBwYXlsb2FkLmZhYnJpY01lc3NhZ2VIZXgpIHtcbiAgICAgIGNvbnN0IHNpZCA9IGBtc2c6JHtTdHJpbmcocGF5bG9hZC5mYWJyaWNNZXNzYWdlSGV4KS5zbGljZSgwLCA0OCl9YDtcbiAgICAgIGlmICh0aGlzLl9zZWVuTG9naW5TZXNzaW9uSWRzLmhhcyhzaWQpKSByZXR1cm47XG4gICAgICB0aGlzLl9zZWVuTG9naW5TZXNzaW9uSWRzLmFkZChzaWQpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSgocykgPT4ge1xuICAgICAgICBpZiAocy5sb2dpblByb21wdCAmJiBzLmxvZ2luUHJvbXB0LmZhYnJpY01lc3NhZ2VIZXggPT09IHBheWxvYWQuZmFicmljTWVzc2FnZUhleCkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB7IGxvZ2luUHJvbXB0OiBwYXlsb2FkIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFwYXlsb2FkLnNlc3Npb25JZCkgcmV0dXJuO1xuICAgIGNvbnN0IHNpZCA9IFN0cmluZyhwYXlsb2FkLnNlc3Npb25JZCk7XG4gICAgaWYgKHRoaXMuX3NlZW5Mb2dpblNlc3Npb25JZHMuaGFzKHNpZCkpIHJldHVybjtcbiAgICB0aGlzLl9zZWVuTG9naW5TZXNzaW9uSWRzLmFkZChzaWQpO1xuICAgIHRoaXMuc2V0U3RhdGUoKHMpID0+IHtcbiAgICAgIGlmIChzLmxvZ2luUHJvbXB0ICYmIFN0cmluZyhzLmxvZ2luUHJvbXB0LnNlc3Npb25JZCkgPT09IHNpZCkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4geyBsb2dpblByb21wdDogcGF5bG9hZCB9O1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgX2NvbXBsZXRlTG9naW4gKGFwcHJvdmUpIHtcbiAgICBjb25zdCB7IGxvZ2luUHJvbXB0IH0gPSB0aGlzLnN0YXRlO1xuICAgIGlmICghbG9naW5Qcm9tcHQpIHJldHVybjtcbiAgICBpZiAobG9naW5Qcm9tcHQuZmFicmljTWVzc2FnZU9ubHkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2dpblByb21wdDogbnVsbCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFsb2dpblByb21wdC5zZXNzaW9uSWQpIHJldHVybjtcbiAgICBpZiAoIWFwcHJvdmUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2dpblByb21wdDogbnVsbCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaHViQmFzZSA9IFN0cmluZyhsb2dpblByb21wdC5odWJCYXNlIHx8IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhsb2dpblByb21wdC5zZXNzaW9uSWQpLnRyaW0oKSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGxvZ2luQnVzeTogdHJ1ZSB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7aHViQmFzZX0vc2Vzc2lvbnMvJHtzZXNzaW9uSWR9L3NpZ25hdHVyZXNgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHt9KSxcbiAgICAgICAgY2FjaGU6ICduby1zdG9yZSdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgICBpZiAoIXJlcy5vayB8fCAhZGF0YS5vaykge1xuICAgICAgICB0b2FzdC5lcnJvcignQ291bGQgbm90IGNvbXBsZXRlIGJyb3dzZXIgbG9naW4uJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tERVNLVE9QOlVJXSBzZXNzaW9ucy8uLi4vc2lnbmF0dXJlcyBmYWlsZWQ6JywgcmVzLnN0YXR1cywgZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b2FzdC5zdWNjZXNzKCdCcm93c2VyIGxvZ2luIHNpZ25lZC4nKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0b2FzdC5lcnJvcihzYWZlSWRlbnRpdHlFcnIoZSkgfHwgJ0xvZ2luIHNpZ25pbmcgZmFpbGVkLicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbG9naW5Qcm9tcHQ6IG51bGwsIGxvZ2luQnVzeTogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgX2dldERlbGVnYXRpb25Ub2tlbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGQgPSByZWFkU3RvcmFnZUpTT04oREVMRUdBVElPTl9TVE9SQUdFX0tFWSwgbnVsbCk7XG4gICAgICBpZiAoIWQpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIGQgJiYgZC50b2tlbiA/IFN0cmluZyhkLnRva2VuKSA6IG51bGw7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgX29uR2xvYmFsIChldmVudCkge1xuICAgIGNvbnN0IGdzID0gZXZlbnQgJiYgZXZlbnQuZGV0YWlsICYmIGV2ZW50LmRldGFpbC5nbG9iYWxTdGF0ZTtcbiAgICBpZiAoIWdzIHx8ICFncy5tZXNzYWdlcykgcmV0dXJuO1xuICAgIHRoaXMuX2luZ2VzdE1lc3NhZ2VzKGdzLm1lc3NhZ2VzKTtcbiAgfVxuXG4gIF9pbmdlc3RNZXNzYWdlcyAobWVzc2FnZXMpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5sb2dpblByb21wdCB8fCB0aGlzLnN0YXRlLmxvZ2luQnVzeSkgcmV0dXJuO1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5fZ2V0RGVsZWdhdGlvblRva2VuKCk7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuO1xuICAgIGlmICh0aGlzLnN0YXRlLmN1cnJlbnQgfHwgdGhpcy5zdGF0ZS5idXN5KSByZXR1cm47XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKG1lc3NhZ2VzKSkge1xuICAgICAgY29uc3QgbSA9IG1lc3NhZ2VzW2tdO1xuICAgICAgaWYgKCFtIHx8ICFpc0RlbGVnYXRpb25TaWduYXR1cmVSZXF1ZXN0QWN0aXZpdHkobSkpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgbyA9IG0ub2JqZWN0IHx8IHt9O1xuICAgICAgaWYgKChvLnN0YXR1cyB8fCBtLnN0YXR1cykgIT09ICdwZW5kaW5nJykgY29udGludWU7XG4gICAgICBjb25zdCBtaWQgPSBvLm1lc3NhZ2VJZDtcbiAgICAgIGlmICghbWlkIHx8IHRoaXMuX29wZW5JZHMuaGFzKG1pZCkpIGNvbnRpbnVlO1xuICAgICAgdGhpcy5fb3Blbklkcy5hZGQobWlkKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBjdXJyZW50OiB7XG4gICAgICAgICAgc2Vzc2lvbklkOiB0b2tlbixcbiAgICAgICAgICBtZXNzYWdlSWQ6IG1pZCxcbiAgICAgICAgICBwcmV2aWV3OiB0eXBlb2Ygby5jb250ZW50ID09PSAnc3RyaW5nJyA/IG8uY29udGVudCA6ICcnLFxuICAgICAgICAgIHB1cnBvc2U6IHR5cGVvZiBvLnB1cnBvc2UgPT09ICdzdHJpbmcnID8gby5wdXJwb3NlIDogJ3NpZ24nLFxuICAgICAgICAgIG9yaWdpbjogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubG9jYXRpb24ub3JpZ2luIDogJydcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX3BvbGxMb29wYmFja1Nlc3Npb25zICgpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICBpZiAodGhpcy5zdGF0ZS5sb2dpblByb21wdCB8fCB0aGlzLnN0YXRlLmxvZ2luQnVzeSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnN0YXRlLmN1cnJlbnQgfHwgdGhpcy5zdGF0ZS5idXN5KSByZXR1cm47XG4gICAgY29uc3Qgb3JpZ2luID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICBsZXQgcmVzO1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBhd2FpdCBmZXRjaChgJHtvcmlnaW59L3Nlc3Npb25zYCwgeyBoZWFkZXJzOiB7IEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0sIGNhY2hlOiAnbm8tc3RvcmUnIH0pO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaiA9IGF3YWl0IHJlcy5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgaWYgKCFyZXMub2sgfHwgIWoub2sgfHwgIUFycmF5LmlzQXJyYXkoai5zZXNzaW9ucykpIHJldHVybjtcbiAgICBjb25zdCBwZW5kaW5nSXRlbXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHMgb2Ygai5zZXNzaW9ucykge1xuICAgICAgY29uc3Qgc2lkID0gcyAmJiBzLnRva2VuSWQgPyBTdHJpbmcocy50b2tlbklkKSA6ICcnO1xuICAgICAgY29uc3QgYXJyID0gcyAmJiBBcnJheS5pc0FycmF5KHMucGVuZGluZ0RlbGVnYXRpb25NZXNzYWdlcykgPyBzLnBlbmRpbmdEZWxlZ2F0aW9uTWVzc2FnZXMgOiBbXTtcbiAgICAgIGZvciAoY29uc3QgcCBvZiBhcnIpIHtcbiAgICAgICAgaWYgKHAgJiYgcC5tZXNzYWdlSWQgJiYgc2lkKSB7XG4gICAgICAgICAgcGVuZGluZ0l0ZW1zLnB1c2goe1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBzaWQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IHAubWVzc2FnZUlkLFxuICAgICAgICAgICAgcHJldmlldzogcC5wcmV2aWV3LFxuICAgICAgICAgICAgcHVycG9zZTogcC5wdXJwb3NlIHx8ICdzaWduJyxcbiAgICAgICAgICAgIG9yaWdpbjogcC5vcmlnaW4gfHwgcy5vcmlnaW4gfHwgJydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGVuZGluZ0l0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGZpcnN0ID0gcGVuZGluZ0l0ZW1zLmZpbmQoKHApID0+ICF0aGlzLl9vcGVuSWRzLmhhcyhwLm1lc3NhZ2VJZCkpO1xuICAgIGlmICghZmlyc3QpIHJldHVybjtcbiAgICB0aGlzLl9vcGVuSWRzLmFkZChmaXJzdC5tZXNzYWdlSWQpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBjdXJyZW50OiBmaXJzdCB9KTtcbiAgfVxuXG4gIGFzeW5jIF9yZXNvbHZlIChzdGF0dXMpIHtcbiAgICBjb25zdCB7IGN1cnJlbnQgfSA9IHRoaXMuc3RhdGU7XG4gICAgaWYgKCFjdXJyZW50IHx8ICFjdXJyZW50LnNlc3Npb25JZCB8fCAhY3VycmVudC5tZXNzYWdlSWQpIHJldHVybjtcbiAgICB0aGlzLnNldFN0YXRlKHsgYnVzeTogdHJ1ZSB9KTtcbiAgICBjb25zdCBvcmlnaW4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gOiAnJztcbiAgICBjb25zdCBtaWQgPSBjdXJyZW50Lm1lc3NhZ2VJZDtcbiAgICBsZXQgb2sgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IGZldGNoKGAke29yaWdpbn0vc2VydmljZXMvcnBjYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICAgICAgaWQ6IERhdGUubm93KCksXG4gICAgICAgICAgbWV0aG9kOiAnUmVzb2x2ZURlbGVnYXRpb25TaWduYXR1cmVNZXNzYWdlJyxcbiAgICAgICAgICBwYXJhbXM6IFt7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IGN1cnJlbnQuc2Vzc2lvbklkLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBtaWQsXG4gICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICB9XVxuICAgICAgICB9KSxcbiAgICAgICAgY2FjaGU6ICduby1zdG9yZSdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgajIgPSBhd2FpdCByLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICAgIG9rID0gci5vayAmJiBqMiAmJiAhajIuZXJyb3IgJiYgajIucmVzdWx0ICYmIGoyLnJlc3VsdC5vaztcbiAgICAgIGlmIChvayAmJiBzdGF0dXMgPT09ICdhcHByb3ZlZCcpIHRvYXN0LnN1Y2Nlc3MoJ1NpZ25hdHVyZSByZXF1ZXN0IGFwcHJvdmVkLicpO1xuICAgICAgZWxzZSBpZiAob2spIHRvYXN0Lndhcm5pbmcoJ1NpZ25hdHVyZSByZXF1ZXN0IHJlamVjdGVkLicpO1xuICAgICAgZWxzZSB0b2FzdC5lcnJvcigoajIgJiYgajIuZXJyb3IgJiYgajIuZXJyb3IubWVzc2FnZSkgfHwgJ0RlbGVnYXRpb24gcmVzb2x1dGlvbiBmYWlsZWQuJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdG9hc3QuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiAnRGVsZWdhdGlvbiByZXNvbHV0aW9uIGZhaWxlZC4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKCFvaykgdGhpcy5fb3Blbklkcy5kZWxldGUobWlkKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjdXJyZW50OiBudWxsLCBidXN5OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgY3VycmVudCwgYnVzeSwgbG9naW5Qcm9tcHQsIGxvZ2luQnVzeSB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpc0Rlc2t0b3AgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZmFicmljRGVza3RvcCAmJiB3aW5kb3cuZmFicmljRGVza3RvcC5pc0Rlc2t0b3BTaGVsbDtcbiAgICBjb25zdCBzaG93TG9naW4gPSAhIShpc0Rlc2t0b3AgJiYgbG9naW5Qcm9tcHQpO1xuXG4gICAgaWYgKHNob3dMb2dpbikge1xuICAgICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IGxvZ2luUHJvbXB0ICYmIHR5cGVvZiBsb2dpblByb21wdC5tZXNzYWdlID09PSAnc3RyaW5nJyA/IGxvZ2luUHJvbXB0Lm1lc3NhZ2UgOiAnJztcbiAgICAgIGNvbnN0IGxvZ2luUHJldmlldyA9IG1lc3NhZ2VUb1NpZ24ubGVuZ3RoID4gMTIwMCA/IGAke21lc3NhZ2VUb1NpZ24uc2xpY2UoMCwgMTIwMCl94oCmYCA6IG1lc3NhZ2VUb1NpZ247XG4gICAgICBjb25zdCBsb2dpbk9yaWdpbiA9IGxvZ2luUHJvbXB0ICYmIHR5cGVvZiBsb2dpblByb21wdC5vcmlnaW4gPT09ICdzdHJpbmcnID8gbG9naW5Qcm9tcHQub3JpZ2luIDogJyc7XG4gICAgICBjb25zdCBsb2dpbk5vbmNlID0gbG9naW5Qcm9tcHQgJiYgdHlwZW9mIGxvZ2luUHJvbXB0Lm5vbmNlID09PSAnc3RyaW5nJyA/IGxvZ2luUHJvbXB0Lm5vbmNlIDogJyc7XG4gICAgICBjb25zdCBmcyA9IGxvZ2luUHJvbXB0ICYmIGxvZ2luUHJvbXB0LmZhYnJpY01lc3NhZ2VTdW1tYXJ5ID8gbG9naW5Qcm9tcHQuZmFicmljTWVzc2FnZVN1bW1hcnkgOiBudWxsO1xuICAgICAgY29uc3QgbWVzc2FnZU9ubHkgPSAhIShsb2dpblByb21wdCAmJiBsb2dpblByb21wdC5mYWJyaWNNZXNzYWdlT25seSk7XG4gICAgICBjb25zdCBwcm9tcHRMaW5lID0gKGZzICYmIGZzLmVudmVsb3BlTWV0YSAmJiBmcy5lbnZlbG9wZU1ldGEucHJvbXB0KSB8fCBERUZBVUxUX1NJR05fUFJPTVBUO1xuICAgICAgY29uc3QgZnJvbUNvbnRyYWN0ID0gbG9naW5Qcm9tcHQgJiYgbG9naW5Qcm9tcHQuZGVsZWdhdGlvblNvdXJjZSA9PT0gJ1J1bkV4ZWN1dGlvbkNvbnRyYWN0JztcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPE1vZGFsXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBvcGVuXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gIWxvZ2luQnVzeSAmJiB0aGlzLl9jb21wbGV0ZUxvZ2luKGZhbHNlKX1cbiAgICAgICAgICBjbG9zZU9uRGltbWVyQ2xpY2s9eyFsb2dpbkJ1c3l9XG4gICAgICAgICAgY2xvc2VPbkVzY2FwZT17IWxvZ2luQnVzeX1cbiAgICAgICAgPlxuICAgICAgICAgIDxIZWFkZXIgaWNvbj5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzaWduLWluXCIgLz5cbiAgICAgICAgICAgIHttZXNzYWdlT25seSA/ICdGYWJyaWMgbWVzc2FnZScgOiAnRmFicmljIEh1YiDigJQgYnJvd3NlciBsb2dpbid9XG4gICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICB7ZnMgPyAoXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICB7ZnJvbUNvbnRyYWN0ID8gKFxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScsIG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5Gcm9tIGV4ZWN1dGlvbiBjb250cmFjdCAoaHViIHJ1bik8L3A+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC42NWVtJywgZm9udFNpemU6ICcxLjAyZW0nIH19Pntwcm9tcHRMaW5lfTwvcD5cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5GYWJyaWMgTWVzc2FnZTwvc3Ryb25nPiAod2lyZSBmb3JtYXQpXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIHtmcy5lbnZlbG9wZU1ldGEgJiYgZnMuZW52ZWxvcGVNZXRhLnNpZ25lcnNDb3VudCA+IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogJzAuODhlbScsIGNvbG9yOiAnIzU1NScgfX0+XG4gICAgICAgICAgICAgICAgICAgIENvLXNpZ25lcnMgLyBwYXJ0aWVzIHRvIG5vdGlmeTogPHN0cm9uZz57ZnMuZW52ZWxvcGVNZXRhLnNpZ25lcnNDb3VudH08L3N0cm9uZz4gKG11bHRpc2lnLXJlYWR5KVxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiAnMC45MmVtJywgY29sb3I6ICcjNDQ0JyB9fT5cbiAgICAgICAgICAgICAgICAgIFR5cGUgPGNvZGU+e2ZzLnR5cGVOYW1lfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgIHtmcy5ieXRlTGVuZ3RoID8gYCDCtyAke2ZzLmJ5dGVMZW5ndGh9IGJ5dGVzYCA6ICcnfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICB7ZnMuYXV0aG9ySGV4ID8gKFxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nLCBjb2xvcjogJyM2NjYnLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PlxuICAgICAgICAgICAgICAgICAgICBBdXRob3IgPGNvZGU+e2ZzLmF1dGhvckhleC5sZW5ndGggPiA0OCA/IGAke2ZzLmF1dGhvckhleC5zbGljZSgwLCA0OCl94oCmYCA6IGZzLmF1dGhvckhleH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPHByZVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAnMjh2aCcsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMC44MmVtJyxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzAuNjVlbScsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjZjRmNGY0JyxcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA0LFxuICAgICAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLFxuICAgICAgICAgICAgICAgICAgICB3b3JkQnJlYWs6ICdicmVhay13b3JkJ1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7ZnMuYm9keVByZXZpZXcgfHwgJyhubyBib2R5KSd9XG4gICAgICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7IW1lc3NhZ2VPbmx5ID8gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICBBIGJyb3dzZXIgdGFiIGlzIGFza2luZyB0byBsaW5rIHRoaXMgSHViIGlkZW50aXR5IGZvciBleHRlcm5hbCBzaWduaW5nLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICB7bG9naW5PcmlnaW4gPyA8cD48c3Ryb25nPk9yaWdpbjwvc3Ryb25nPnsnOiAnfXtsb2dpbk9yaWdpbn08L3A+IDogbnVsbH1cbiAgICAgICAgICAgICAgICB7bG9naW5Ob25jZSA/IChcbiAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPk5vbmNlPC9zdHJvbmc+eyc6ICd9e2xvZ2luTm9uY2UubGVuZ3RoID4gMTYgPyBgJHtsb2dpbk5vbmNlLnNsaWNlKDAsIDE2KX3igKZgIDogbG9naW5Ob25jZX1cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5NZXNzYWdlIHlvdSB3aWxsIHNpZ248L3N0cm9uZz4gKEJJUDM0MCBTY2hub3JyIG92ZXIgVVRGLTggYnl0ZXMpOlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8cHJlXG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6ICc0MHZoJyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcwLjg1ZW0nLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMC43NWVtJyxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNmN2Y3ZjcnLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDQsXG4gICAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsXG4gICAgICAgICAgICAgICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtsb2dpblByZXZpZXcgfHwgJyhlbXB0eSknfVxuICAgICAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45NWVtJyB9fT5cbiAgICAgICAgICAgICAgICBPcGFxdWUgbGluayA8Y29kZT57J2ZhYnJpYzo8aGV4Pid9PC9jb2RlPiBvciBsZWdhY3kgPGNvZGU+ZmFicmljOi8vbWVzc2FnZT9oZXg94oCmPC9jb2RlPi4gTm8gYnJvd3NlciBsb2dpbiBzZXNzaW9uLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgICAgICA8TW9kYWwuQWN0aW9ucz5cbiAgICAgICAgICAgIDxCdXR0b24gZGlzYWJsZWQ9e2xvZ2luQnVzeX0gb25DbGljaz17KCkgPT4gdGhpcy5fY29tcGxldGVMb2dpbihmYWxzZSl9PlxuICAgICAgICAgICAgICB7bWVzc2FnZU9ubHkgPyAnQ2xvc2UnIDogJ0NhbmNlbCd9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIHshbWVzc2FnZU9ubHkgPyAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2xvZ2luQnVzeX1cbiAgICAgICAgICAgICAgICBsb2FkaW5nPXtsb2dpbkJ1c3l9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCB0aGlzLl9jb21wbGV0ZUxvZ2luKHRydWUpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgU2lnbiAmYW1wOyBhcHByb3ZlXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9Nb2RhbC5BY3Rpb25zPlxuICAgICAgICA8L01vZGFsPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGFsXG4gICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIG9wZW49eyEhY3VycmVudH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gIWJ1c3kgJiYgdm9pZCB0aGlzLl9yZXNvbHZlKCdyZWplY3RlZCcpfVxuICAgICAgICBjbG9zZU9uRGltbWVyQ2xpY2s9eyFidXN5fVxuICAgICAgICBjbG9zZU9uRXNjYXBlPXshYnVzeX1cbiAgICAgID5cbiAgICAgICAgPEhlYWRlciBpY29uPlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJrZXlcIiAvPlxuICAgICAgICAgIERlbGVnYXRpb24gc2lnbmF0dXJlXG4gICAgICAgIDwvSGVhZGVyPlxuICAgICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgICA8cCBzdHlsZT17eyB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLCB3b3JkQnJlYWs6ICdicmVhay13b3JkJyB9fT5cbiAgICAgICAgICAgIHtjdXJyZW50ICYmIHR5cGVvZiBjdXJyZW50LnByZXZpZXcgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgID8gU3RyaW5nKGN1cnJlbnQucHJldmlldykuc2xpY2UoMCwgODAwKVxuICAgICAgICAgICAgICA6ICcoZW1wdHkgbWVzc2FnZSknfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOTJlbScsIG1hcmdpblRvcDogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPlB1cnBvc2U8L3N0cm9uZz57JzogJ317Y3VycmVudCAmJiBjdXJyZW50LnB1cnBvc2UgPyBTdHJpbmcoY3VycmVudC5wdXJwb3NlKSA6ICdzaWduJ31cbiAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgPHN0cm9uZz5PcmlnaW48L3N0cm9uZz57JzogJ317Y3VycmVudCAmJiBjdXJyZW50Lm9yaWdpbiA/IFN0cmluZyhjdXJyZW50Lm9yaWdpbikgOiAn4oCUJ31cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgICAgPE1vZGFsLkFjdGlvbnM+XG4gICAgICAgICAgPEJ1dHRvbiBkaXNhYmxlZD17YnVzeX0gb25DbGljaz17KCkgPT4gdm9pZCB0aGlzLl9yZXNvbHZlKCdyZWplY3RlZCcpfT5cbiAgICAgICAgICAgIFJlamVjdFxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b24gcHJpbWFyeSBkaXNhYmxlZD17YnVzeX0gbG9hZGluZz17YnVzeX0gb25DbGljaz17KCkgPT4gdm9pZCB0aGlzLl9yZXNvbHZlKCdhcHByb3ZlZCcpfT5cbiAgICAgICAgICAgIEFwcHJvdmVcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9Nb2RhbC5BY3Rpb25zPlxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsZWdhdGlvblNpZ25pbmdNb2RhbDtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfcmVnZW5lcmF0b3IiLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwiR2VuZXJhdG9yIiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsInAiLCJ5IiwiRyIsInYiLCJkIiwiYmluZCIsImwiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJSZWZlcmVuY2VFcnJvciIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwiX2luaGVyaXRzIiwiX3NldFByb3RvdHlwZU9mIiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJNb2RhbCIsIkJ1dHRvbiIsIkhlYWRlciIsIkljb24iLCJfcmVxdWlyZTIiLCJ0b2FzdCIsIl9yZXF1aXJlMyIsImlzRGVsZWdhdGlvblNpZ25hdHVyZVJlcXVlc3RBY3Rpdml0eSIsIl9yZXF1aXJlNCIsIkRFRkFVTFRfU0lHTl9QUk9NUFQiLCJfcmVxdWlyZTUiLCJmYWJyaWNNZXNzYWdlU3VtbWFyeUZyb21IZXgiLCJfcmVxdWlyZTYiLCJERUxFR0FUSU9OX1NUT1JBR0VfS0VZIiwiX3JlcXVpcmU3Iiwic2FmZUlkZW50aXR5RXJyIiwiX3JlcXVpcmU4IiwicmVhZFN0b3JhZ2VKU09OIiwiRGVsZWdhdGlvblNpZ25pbmdNb2RhbCIsIl9SZWFjdCRDb21wb25lbnQiLCJwcm9wcyIsIl90aGlzIiwic3RhdGUiLCJjdXJyZW50IiwiYnVzeSIsImxvZ2luUHJvbXB0IiwibG9naW5CdXN5IiwiX29wZW5JZHMiLCJTZXQiLCJfc2VlbkxvZ2luU2Vzc2lvbklkcyIsIl9sb2dpblVuc3ViIiwiX3BvbGxUaW1lciIsIl9vbkdsb2JhbCIsIl9vbkRlbGVnYXRpb25TaWduUmVxdWVzdCIsImNvbXBvbmVudERpZE1vdW50IiwiX3RoaXMyIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImJyIiwiYnJpZGdlUmVmIiwiZ2V0R2xvYmFsU3RhdGUiLCJncyIsIm1lc3NhZ2VzIiwiX2luZ2VzdE1lc3NhZ2VzIiwiZmFicmljRGVza3RvcCIsImlzRGVza3RvcFNoZWxsIiwic2V0SW50ZXJ2YWwiLCJfcG9sbExvb3BiYWNrU2Vzc2lvbnMiLCJfcHVsbFBlbmRpbmdMb2dpblByb21wdCIsIm9uTG9naW5Qcm9tcHQiLCJwYXlsb2FkIiwiX21heWJlU2V0TG9naW5Qcm9tcHQiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjbGVhckludGVydmFsIiwiZXYiLCJkZXRhaWwiLCJ3aXJlSGV4IiwiZm0iLCJvayIsImtpbmQiLCJzZXNzaW9uSWQiLCJodWJCYXNlIiwibG9jYXRpb24iLCJvcmlnaW4iLCJmYWJyaWNNZXNzYWdlSGV4IiwiaGV4IiwiZmFicmljTWVzc2FnZVN1bW1hcnkiLCJzdW1tYXJ5IiwiZmFicmljTWVzc2FnZU9ubHkiLCJkZWxlZ2F0aW9uU291cmNlIiwic291cmNlIiwiX3B1bGxQZW5kaW5nTG9naW5Qcm9tcHQyIiwiX2NhbGxlZSIsInB1bGwiLCJfdCIsIl9jb250ZXh0IiwicHVsbFBlbmRpbmdMb2dpblByb21wdCIsInNpZCIsImNvbmNhdCIsImhhcyIsImFkZCIsInNldFN0YXRlIiwiX2NvbXBsZXRlTG9naW4yIiwiX2NhbGxlZTIiLCJhcHByb3ZlIiwicmVzIiwiZGF0YSIsIl90MiIsIl9jb250ZXh0MiIsInJlcGxhY2UiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ0cmltIiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjYWNoZSIsImpzb24iLCJlcnJvciIsImNvbnNvbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiX2NvbXBsZXRlTG9naW4iLCJfeCIsIl9nZXREZWxlZ2F0aW9uVG9rZW4iLCJ0b2tlbiIsIl8iLCJldmVudCIsImdsb2JhbFN0YXRlIiwiX2kiLCJfT2JqZWN0JGtleXMiLCJrZXlzIiwiayIsIm9iamVjdCIsIm1pZCIsIm1lc3NhZ2VJZCIsInByZXZpZXciLCJjb250ZW50IiwicHVycG9zZSIsIl9wb2xsTG9vcGJhY2tTZXNzaW9uczIiLCJfY2FsbGVlMyIsIl90aGlzMyIsImoiLCJwZW5kaW5nSXRlbXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImFyciIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJmaXJzdCIsIl90MyIsIl9jb250ZXh0MyIsInNlc3Npb25zIiwidG9rZW5JZCIsInBlbmRpbmdEZWxlZ2F0aW9uTWVzc2FnZXMiLCJwdXNoIiwiZXJyIiwiZmluZCIsIl9yZXNvbHZlMiIsIl9jYWxsZWU0IiwiajIiLCJfdDQiLCJfY29udGV4dDQiLCJqc29ucnBjIiwiaWQiLCJEYXRlIiwibm93IiwicGFyYW1zIiwicmVzdWx0Iiwid2FybmluZyIsIm1lc3NhZ2UiLCJfcmVzb2x2ZSIsIl94MiIsInJlbmRlciIsIl90aGlzNCIsIl90aGlzJHN0YXRlIiwiaXNEZXNrdG9wIiwic2hvd0xvZ2luIiwibWVzc2FnZVRvU2lnbiIsImxvZ2luUHJldmlldyIsImxvZ2luT3JpZ2luIiwibG9naW5Ob25jZSIsIm5vbmNlIiwiZnMiLCJtZXNzYWdlT25seSIsInByb21wdExpbmUiLCJlbnZlbG9wZU1ldGEiLCJwcm9tcHQiLCJmcm9tQ29udHJhY3QiLCJjcmVhdGVFbGVtZW50Iiwic2l6ZSIsIm9wZW4iLCJvbkNsb3NlIiwiY2xvc2VPbkRpbW1lckNsaWNrIiwiY2xvc2VPbkVzY2FwZSIsImljb24iLCJDb250ZW50Iiwic3R5bGUiLCJtYXJnaW5Cb3R0b20iLCJjb2xvciIsImZvbnRTaXplIiwic2lnbmVyc0NvdW50IiwidHlwZU5hbWUiLCJieXRlTGVuZ3RoIiwiYXV0aG9ySGV4Iiwid29yZEJyZWFrIiwibWF4SGVpZ2h0Iiwib3ZlcmZsb3ciLCJwYWRkaW5nIiwiYmFja2dyb3VuZCIsImJvcmRlclJhZGl1cyIsIndoaXRlU3BhY2UiLCJib2R5UHJldmlldyIsIkZyYWdtZW50IiwibWFyZ2luVG9wIiwiQWN0aW9ucyIsImRpc2FibGVkIiwib25DbGljayIsInByaW1hcnkiLCJsb2FkaW5nIiwiQ29tcG9uZW50IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/DelegationSigningModal.js\n\n}')},"./components/DistributeProposalsList.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n// Dependencies\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\n\n// Semantic UI\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Input = _require2.Input,\n Label = _require2.Label,\n List = _require2.List,\n Message = _require2.Message,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require3.formatSatsDisplay;\nfunction DistributeProposalsList(props) {\n var bridgeRef = props.bridgeRef;\n var _React$useState = React.useState({}),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n proposalsState = _React$useState2[0],\n setProposalsState = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n acceptingId = _React$useState4[0],\n setAcceptingId = _React$useState4[1];\n var _React$useState5 = React.useState({}),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n txidByProposal = _React$useState6[0],\n setTxidByProposal = _React$useState6[1];\n var _React$useState7 = React.useState({}),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n invoiceByProposal = _React$useState8[0],\n setInvoiceByProposal = _React$useState8[1];\n var _React$useState9 = React.useState({}),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n contractByProposal = _React$useState0[0],\n setContractByProposal = _React$useState0[1];\n var _React$useState1 = React.useState(null),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n bondFail = _React$useState10[0],\n setBondFail = _React$useState10[1];\n var _React$useState11 = React.useState(null),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n acceptFail = _React$useState12[0],\n setAcceptFail = _React$useState12[1];\n var pendingAcceptRef = React.useRef({});\n React.useEffect(function () {\n var handler = function handler(event) {\n var gs = event && event.detail && event.detail.globalState;\n if (gs && gs.distributeProposals) setProposalsState(gs.distributeProposals);\n };\n window.addEventListener(\'globalStateUpdate\', handler);\n return function () {\n return window.removeEventListener(\'globalStateUpdate\', handler);\n };\n }, []);\n React.useEffect(function () {\n var bridgeInstance = bridgeRef && bridgeRef.current;\n if (bridgeInstance && bridgeInstance.globalState && bridgeInstance.globalState.distributeProposals) {\n setProposalsState(bridgeInstance.globalState.distributeProposals);\n }\n }, [bridgeRef]);\n\n // When payment is bonded, update proposals to show the contract.\n React.useEffect(function () {\n var handler = function handler(e) {\n var detail = e && e.detail;\n if (!detail || !detail.contractId || !detail.documentId) return;\n var docId = detail.documentId;\n var contractId = detail.contractId;\n setProposalsState(function (prev) {\n var next = _objectSpread({}, prev);\n var updated = false;\n var _loop = function _loop() {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n pid = _Object$entries$_i[0],\n p = _Object$entries$_i[1];\n if (!p) return 1; // continue\n var matches = p.documentId === docId || p.document && (p.document.sha256 === docId || p.document.id === docId);\n if (matches) {\n next[pid] = _objectSpread(_objectSpread({}, p), {}, {\n status: \'bonded\'\n });\n setContractByProposal(function (c) {\n return _objectSpread(_objectSpread({}, c), {}, _defineProperty({}, pid, contractId));\n });\n updated = true;\n }\n };\n for (var _i = 0, _Object$entries = Object.entries(next); _i < _Object$entries.length; _i++) {\n if (_loop()) continue;\n }\n return updated ? next : prev;\n });\n };\n window.addEventListener(\'storageContractBonded\', handler);\n return function () {\n return window.removeEventListener(\'storageContractBonded\', handler);\n };\n }, []);\n React.useEffect(function () {\n var handler = function handler(e) {\n var detail = e && e.detail;\n if (!detail || !detail.documentId) return;\n var docId = detail.documentId;\n var gs = bridgeRef && bridgeRef.current && bridgeRef.current.globalState;\n var map = gs && gs.distributeProposals || {};\n var pid = Object.keys(map).find(function (id) {\n var p = map[id];\n if (!p) return false;\n return p.documentId === docId || p.document && (p.document.sha256 === docId || p.document.id === docId);\n });\n if (pid) setBondFail({\n proposalId: pid,\n message: detail.message || \'Contract creation failed.\'\n });\n };\n window.addEventListener(\'storageContractBondFailed\', handler);\n return function () {\n return window.removeEventListener(\'storageContractBondFailed\', handler);\n };\n }, [bridgeRef]);\n React.useEffect(function () {\n var handler = function handler(e) {\n var d = e && e.detail;\n if (!d || !d.proposalId) return;\n setAcceptingId(null);\n try {\n if (d.documentId && pendingAcceptRef.current) {\n delete pendingAcceptRef.current[d.documentId];\n }\n } catch (_) {}\n setAcceptFail({\n proposalId: String(d.proposalId),\n message: String(d.message || \'Accept failed\')\n });\n };\n window.addEventListener(\'acceptDistributeProposalFailed\', handler);\n return function () {\n return window.removeEventListener(\'acceptDistributeProposalFailed\', handler);\n };\n }, []);\n\n // Listen for distributeInvoiceReady when we accept a proposal (host flow)\n React.useEffect(function () {\n var handler = function handler(e) {\n var detail = e && e.detail;\n if (!detail || !detail.fromProposal) return;\n var docId = detail.documentId;\n var proposalId = pendingAcceptRef.current[docId];\n if (!proposalId) {\n proposalId = Object.keys(proposalsState).find(function (id) {\n var p = proposalsState[id];\n if (!p) return false;\n return p.documentId === docId || p.document && (p.document.sha256 === docId || p.document.id === docId);\n });\n }\n if (proposalId) {\n delete pendingAcceptRef.current[docId];\n setInvoiceByProposal(function (prev) {\n return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, proposalId, {\n address: detail.address,\n amountSats: detail.amountSats,\n network: detail.network\n }));\n });\n }\n };\n window.addEventListener(\'distributeInvoiceReady\', handler);\n return function () {\n return window.removeEventListener(\'distributeInvoiceReady\', handler);\n };\n }, [proposalsState]);\n var pendingProposals = Object.values(proposalsState || {}).filter(function (p) {\n return p && (p.status === \'pending\' || p.status === \'accepted\');\n });\n var bondedProposals = Object.values(proposalsState || {}).filter(function (p) {\n return p && p.status === \'bonded\';\n });\n var handleAccept = function handleAccept(proposal) {\n if (!bridgeRef || !bridgeRef.current) return;\n var bridgeInstance = bridgeRef.current;\n if (typeof bridgeInstance.sendAcceptDistributeProposalRequest !== \'function\') return;\n var doc = bridgeInstance.globalState && bridgeInstance.globalState.documents && bridgeInstance.globalState.documents[proposal.documentId];\n var backendId = doc && doc.sha256 || proposal.documentId;\n pendingAcceptRef.current[backendId] = proposal.id;\n setAcceptFail(function (prev) {\n return prev && prev.proposalId === proposal.id ? null : prev;\n });\n setAcceptingId(proposal.id);\n bridgeInstance.sendAcceptDistributeProposalRequest(proposal);\n setTimeout(function () {\n return setAcceptingId(null);\n }, 3000);\n };\n var handleReject = function handleReject(proposal) {\n setAcceptFail(function (prev) {\n return prev && prev.proposalId === proposal.id ? null : prev;\n });\n if (!bridgeRef || !bridgeRef.current) return;\n var gs = bridgeRef.current.globalState || {};\n gs.distributeProposals = gs.distributeProposals || {};\n var updated = _objectSpread(_objectSpread({}, proposal), {}, {\n status: \'rejected\'\n });\n gs.distributeProposals[proposal.id] = updated;\n if (typeof bridgeRef.current._writeJSONToStorage === \'function\') {\n bridgeRef.current._writeJSONToStorage(\'fabric:distributeProposals\', gs.distributeProposals);\n }\n window.dispatchEvent(new CustomEvent(\'globalStateUpdate\', {\n detail: {\n operation: {\n op: \'add\',\n path: "/distributeProposals/".concat(proposal.id),\n value: updated\n },\n globalState: gs\n }\n }));\n };\n var handleConfirmPayment = function handleConfirmPayment(proposal, txid) {\n if (!bridgeRef || !bridgeRef.current || !txid || !txid.trim()) return;\n var bridgeInstance = bridgeRef.current;\n if (typeof bridgeInstance.sendDistributeDocumentRequest !== \'function\') return;\n var docId = proposal.documentId;\n var invoice = invoiceByProposal[proposal.id];\n setBondFail(function (prev) {\n return prev && prev.proposalId === proposal.id ? null : prev;\n });\n bridgeInstance.sendDistributeDocumentRequest(docId, {\n amountSats: invoice ? invoice.amountSats : proposal.amountSats,\n durationYears: proposal.durationYears,\n challengeCadence: proposal.challengeCadence,\n responseDeadline: proposal.responseDeadline,\n desiredCopies: proposal.desiredCopies,\n txid: txid.trim()\n });\n setTxidByProposal(function (prev) {\n var next = _objectSpread({}, prev);\n delete next[proposal.id];\n return next;\n });\n var gs = bridgeInstance.globalState || {};\n gs.distributeProposals = gs.distributeProposals || {};\n var updated = _objectSpread(_objectSpread({}, proposal), {}, {\n status: \'accepted\'\n });\n gs.distributeProposals[proposal.id] = updated;\n window.dispatchEvent(new CustomEvent(\'globalStateUpdate\', {\n detail: {\n operation: {\n op: \'add\',\n path: "/distributeProposals/".concat(proposal.id),\n value: updated\n },\n globalState: gs\n }\n }));\n };\n var hasProposals = pendingProposals.length > 0 || bondedProposals.length > 0;\n var bridge = bridgeRef && bridgeRef.current;\n var wireLocal = !!(bridge && typeof bridge.hasLocalWireSigningKey === \'function\' && bridge.hasLocalWireSigningKey());\n return /*#__PURE__*/React.createElement(Segment, {\n basic: !!props.embedded,\n style: props.embedded ? {\n padding: 0\n } : undefined\n }, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "distribute-hosting-heading",\n "aria-describedby": "distribute-hosting-summary"\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'center\',\n gap: \'0.5em\',\n marginBottom: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "distribute-hosting-heading",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "handshake",\n "aria-hidden": "true"\n }), "Hosting proposals"), /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'inline-flex\',\n flexWrap: \'wrap\',\n gap: \'0.35em\'\n },\n "aria-hidden": "true"\n }, pendingProposals.length > 0 && /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "orange"\n }, pendingProposals.length, " pending"), bondedProposals.length > 0 && /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "green"\n }, bondedProposals.length, " bonded"))), /*#__PURE__*/React.createElement("p", {\n id: "distribute-hosting-summary",\n style: {\n color: \'#666\',\n marginBottom: \'1em\'\n }\n }, "Peers want to pay you to host their files. Accept to create a payment invoice and begin receiving payments."), bridge && !wireLocal && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n },\n id: "distribute-hosting-external-signing"\n }, /*#__PURE__*/React.createElement(Message.Header, null, "External signing mode"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#333\'\n }\n }, "This browser has no local Fabric private key, so storage-contract requests go to the Hub without a client Schnorr signature on the wire envelope. Approve any delegation prompts in the desktop app or shell. When you are done on a shared machine, end the session under", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/security"\n }, "Security & delegation"), "."))), /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true\n }, pendingProposals.map(function (proposal) {\n var invoice = invoiceByProposal[proposal.id];\n var hasInvoice = !!invoice;\n var txid = txidByProposal[proposal.id] || \'\';\n var isAccepting = acceptingId === proposal.id;\n return /*#__PURE__*/React.createElement(List.Item, {\n key: proposal.id\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, proposal.documentName || proposal.documentId, /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "orange",\n style: {\n marginLeft: \'0.5em\'\n }\n }, formatSatsDisplay(proposal.amountSats), " sats")), /*#__PURE__*/React.createElement(List.Description, null, "From ", proposal.senderAddress ? "".concat(String(proposal.senderAddress).slice(0, 12), "\\u2026") : \'unknown\'), !hasInvoice ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\'\n }\n }, acceptFail && acceptFail.proposalId === proposal.id && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginBottom: \'0.65em\'\n },\n onDismiss: function onDismiss() {\n return setAcceptFail(function (prev) {\n return prev && prev.proposalId === proposal.id ? null : prev;\n });\n }\n }, acceptFail.message), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n primary: true,\n loading: isAccepting,\n disabled: isAccepting,\n onClick: function onClick() {\n return handleAccept(proposal);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check"\n }), "Accept"), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n onClick: function onClick() {\n return handleReject(proposal);\n }\n }, "Reject")) : /*#__PURE__*/React.createElement(Message, {\n size: "small",\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Invoice sent to proposer"), bondFail && bondFail.proposalId === proposal.id && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n },\n onDismiss: function onDismiss() {\n return setBondFail(function (prev) {\n return prev && prev.proposalId === proposal.id ? null : prev;\n });\n },\n content: bondFail.message\n }), /*#__PURE__*/React.createElement("p", null, "Address: ", /*#__PURE__*/React.createElement("code", null, invoice.address), /*#__PURE__*/React.createElement("br", null), "Amount: ", formatSatsDisplay(invoice.amountSats), " sats"), /*#__PURE__*/React.createElement("p", null, "When the proposer pays, enter the transaction ID below:"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "Transaction ID (txid)",\n value: txid,\n onChange: function onChange(e) {\n return setTxidByProposal(function (prev) {\n return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, proposal.id, e.target.value));\n });\n },\n style: {\n marginBottom: \'0.5em\',\n fontFamily: \'monospace\',\n width: \'100%\'\n }\n }), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n primary: true,\n onClick: function onClick() {\n return handleConfirmPayment(proposal, txid);\n },\n disabled: !txid.trim()\n }, "Confirm payment & create contract"))));\n })), bondedProposals.length > 0 && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "distribute-bonded-heading",\n "aria-describedby": "distribute-bonded-summary",\n style: {\n marginTop: \'1.5em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n id: "distribute-bonded-heading",\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check circle",\n color: "green",\n "aria-hidden": "true"\n }), "Bonded (payment confirmed)"), /*#__PURE__*/React.createElement("p", {\n id: "distribute-bonded-summary",\n style: {\n color: \'#666\',\n marginBottom: \'0.75em\',\n fontSize: \'0.9em\'\n }\n }, "These offers have been paid. Storage contracts are active."), /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true,\n "aria-label": "Bonded hosting proposals"\n }, bondedProposals.map(function (proposal) {\n var contractId = contractByProposal[proposal.id];\n return /*#__PURE__*/React.createElement(List.Item, {\n key: proposal.id\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, proposal.documentName || proposal.documentId, /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "green",\n style: {\n marginLeft: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check"\n }), "Bonded")), /*#__PURE__*/React.createElement(List.Description, null, "From ", proposal.senderAddress ? "".concat(String(proposal.senderAddress).slice(0, 12), "\\u2026") : \'unknown\', proposal.amountSats ? " \\u2014 ".concat(formatSatsDisplay(proposal.amountSats), " sats") : \'\'), contractId && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n as: Link,\n to: "/contracts/".concat(encodeURIComponent(contractId)),\n primary: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate"\n }), "View contract"))));\n })))), !hasProposals && /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#888\',\n fontStyle: \'italic\',\n marginTop: \'0.5em\'\n }\n }, "No offers yet."));\n}\nmodule.exports = DistributeProposalsList;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0Rpc3RyaWJ1dGVQcm9wb3NhbHNMaXN0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQUEsU0FBQUEsUUFBQUMsQ0FBQSxzQ0FBQUQsT0FBQSx3QkFBQUUsTUFBQSx1QkFBQUEsTUFBQSxDQUFBQyxRQUFBLGFBQUFGLENBQUEsa0JBQUFBLENBQUEsZ0JBQUFBLENBQUEsV0FBQUEsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBRCxDQUFBLENBQUFHLFdBQUEsS0FBQUYsTUFBQSxJQUFBRCxDQUFBLEtBQUFDLE1BQUEsQ0FBQUcsU0FBQSxxQkFBQUosQ0FBQSxLQUFBRCxPQUFBLENBQUFDLENBQUE7QUFBQSxTQUFBSyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFYLENBQUEsR0FBQVMsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQVAsQ0FBQSxHQUFBQSxDQUFBLENBQUFZLE1BQUEsV0FBQUwsQ0FBQSxXQUFBRSxNQUFBLENBQUFJLHdCQUFBLENBQUFQLENBQUEsRUFBQUMsQ0FBQSxFQUFBTyxVQUFBLE9BQUFOLENBQUEsQ0FBQU8sSUFBQSxDQUFBQyxLQUFBLENBQUFSLENBQUEsRUFBQVIsQ0FBQSxZQUFBUSxDQUFBO0FBQUEsU0FBQVMsY0FBQVgsQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVcsU0FBQSxDQUFBQyxNQUFBLEVBQUFaLENBQUEsVUFBQUMsQ0FBQSxXQUFBVSxTQUFBLENBQUFYLENBQUEsSUFBQVcsU0FBQSxDQUFBWCxDQUFBLFFBQUFBLENBQUEsT0FBQUYsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsT0FBQVksT0FBQSxXQUFBYixDQUFBLElBQUFjLGVBQUEsQ0FBQWYsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENB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Yy9odWIvLi9jb21wb25lbnRzL0Rpc3RyaWJ1dGVQcm9wb3NhbHNMaXN0LmpzPzFkMTkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBEZXBlbmRlbmNpZXNcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluayB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuXG4vLyBTZW1hbnRpYyBVSVxuY29uc3Qge1xuICBCdXR0b24sXG4gIEhlYWRlcixcbiAgSWNvbixcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBMaXN0LFxuICBNZXNzYWdlLFxuICBTZWdtZW50XG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IHsgZm9ybWF0U2F0c0Rpc3BsYXkgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mb3JtYXRTYXRzJyk7XG5cbmZ1bmN0aW9uIERpc3RyaWJ1dGVQcm9wb3NhbHNMaXN0IChwcm9wcykge1xuICBjb25zdCBicmlkZ2VSZWYgPSBwcm9wcy5icmlkZ2VSZWY7XG4gIGNvbnN0IFtwcm9wb3NhbHNTdGF0ZSwgc2V0UHJvcG9zYWxzU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICBjb25zdCBbYWNjZXB0aW5nSWQsIHNldEFjY2VwdGluZ0lkXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbdHhpZEJ5UHJvcG9zYWwsIHNldFR4aWRCeVByb3Bvc2FsXSA9IFJlYWN0LnVzZVN0YXRlKHt9KTtcbiAgY29uc3QgW2ludm9pY2VCeVByb3Bvc2FsLCBzZXRJbnZvaWNlQnlQcm9wb3NhbF0gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gIGNvbnN0IFtjb250cmFjdEJ5UHJvcG9zYWwsIHNldENvbnRyYWN0QnlQcm9wb3NhbF0gPSBSZWFjdC51c2VTdGF0ZSh7fSk7XG4gIGNvbnN0IFtib25kRmFpbCwgc2V0Qm9uZEZhaWxdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFthY2NlcHRGYWlsLCBzZXRBY2NlcHRGYWlsXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBwZW5kaW5nQWNjZXB0UmVmID0gUmVhY3QudXNlUmVmKHt9KTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGdzID0gZXZlbnQgJiYgZXZlbnQuZGV0YWlsICYmIGV2ZW50LmRldGFpbC5nbG9iYWxTdGF0ZTtcbiAgICAgIGlmIChncyAmJiBncy5kaXN0cmlidXRlUHJvcG9zYWxzKSBzZXRQcm9wb3NhbHNTdGF0ZShncy5kaXN0cmlidXRlUHJvcG9zYWxzKTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdnbG9iYWxTdGF0ZVVwZGF0ZScsIGhhbmRsZXIpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZ2xvYmFsU3RhdGVVcGRhdGUnLCBoYW5kbGVyKTtcbiAgfSwgW10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSBicmlkZ2VSZWYgJiYgYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgaWYgKGJyaWRnZUluc3RhbmNlICYmIGJyaWRnZUluc3RhbmNlLmdsb2JhbFN0YXRlICYmIGJyaWRnZUluc3RhbmNlLmdsb2JhbFN0YXRlLmRpc3RyaWJ1dGVQcm9wb3NhbHMpIHtcbiAgICAgIHNldFByb3Bvc2Fsc1N0YXRlKGJyaWRnZUluc3RhbmNlLmdsb2JhbFN0YXRlLmRpc3RyaWJ1dGVQcm9wb3NhbHMpO1xuICAgIH1cbiAgfSwgW2JyaWRnZVJlZl0pO1xuXG4gIC8vIFdoZW4gcGF5bWVudCBpcyBib25kZWQsIHVwZGF0ZSBwcm9wb3NhbHMgdG8gc2hvdyB0aGUgY29udHJhY3QuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IChlKSA9PiB7XG4gICAgICBjb25zdCBkZXRhaWwgPSBlICYmIGUuZGV0YWlsO1xuICAgICAgaWYgKCFkZXRhaWwgfHwgIWRldGFpbC5jb250cmFjdElkIHx8ICFkZXRhaWwuZG9jdW1lbnRJZCkgcmV0dXJuO1xuICAgICAgY29uc3QgZG9jSWQgPSBkZXRhaWwuZG9jdW1lbnRJZDtcbiAgICAgIGNvbnN0IGNvbnRyYWN0SWQgPSBkZXRhaWwuY29udHJhY3RJZDtcbiAgICAgIHNldFByb3Bvc2Fsc1N0YXRlKChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLnByZXYgfTtcbiAgICAgICAgbGV0IHVwZGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBbcGlkLCBwXSBvZiBPYmplY3QuZW50cmllcyhuZXh0KSkge1xuICAgICAgICAgIGlmICghcCkgY29udGludWU7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHAuZG9jdW1lbnRJZCA9PT0gZG9jSWQgfHxcbiAgICAgICAgICAgIChwLmRvY3VtZW50ICYmIChwLmRvY3VtZW50LnNoYTI1NiA9PT0gZG9jSWQgfHwgcC5kb2N1bWVudC5pZCA9PT0gZG9jSWQpKTtcbiAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgbmV4dFtwaWRdID0geyAuLi5wLCBzdGF0dXM6ICdib25kZWQnIH07XG4gICAgICAgICAgICBzZXRDb250cmFjdEJ5UHJvcG9zYWwoKGMpID0+ICh7IC4uLmMsIFtwaWRdOiBjb250cmFjdElkIH0pKTtcbiAgICAgICAgICAgIHVwZGF0ZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXBkYXRlZCA/IG5leHQgOiBwcmV2O1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZUNvbnRyYWN0Qm9uZGVkJywgaGFuZGxlcik7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdG9yYWdlQ29udHJhY3RCb25kZWQnLCBoYW5kbGVyKTtcbiAgfSwgW10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IChlKSA9PiB7XG4gICAgICBjb25zdCBkZXRhaWwgPSBlICYmIGUuZGV0YWlsO1xuICAgICAgaWYgKCFkZXRhaWwgfHwgIWRldGFpbC5kb2N1bWVudElkKSByZXR1cm47XG4gICAgICBjb25zdCBkb2NJZCA9IGRldGFpbC5kb2N1bWVudElkO1xuICAgICAgY29uc3QgZ3MgPSBicmlkZ2VSZWYgJiYgYnJpZGdlUmVmLmN1cnJlbnQgJiYgYnJpZGdlUmVmLmN1cnJlbnQuZ2xvYmFsU3RhdGU7XG4gICAgICBjb25zdCBtYXAgPSAoZ3MgJiYgZ3MuZGlzdHJpYnV0ZVByb3Bvc2FscykgfHwge307XG4gICAgICBjb25zdCBwaWQgPSBPYmplY3Qua2V5cyhtYXApLmZpbmQoKGlkKSA9PiB7XG4gICAgICAgIGNvbnN0IHAgPSBtYXBbaWRdO1xuICAgICAgICBpZiAoIXApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHAuZG9jdW1lbnRJZCA9PT0gZG9jSWQgfHxcbiAgICAgICAgICAocC5kb2N1bWVudCAmJiAocC5kb2N1bWVudC5zaGEyNTYgPT09IGRvY0lkIHx8IHAuZG9jdW1lbnQuaWQgPT09IGRvY0lkKSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChwaWQpIHNldEJvbmRGYWlsKHsgcHJvcG9zYWxJZDogcGlkLCBtZXNzYWdlOiBkZXRhaWwubWVzc2FnZSB8fCAnQ29udHJhY3QgY3JlYXRpb24gZmFpbGVkLicgfSk7XG4gICAgfTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZUNvbnRyYWN0Qm9uZEZhaWxlZCcsIGhhbmRsZXIpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RvcmFnZUNvbnRyYWN0Qm9uZEZhaWxlZCcsIGhhbmRsZXIpO1xuICB9LCBbYnJpZGdlUmVmXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IGQgPSBlICYmIGUuZGV0YWlsO1xuICAgICAgaWYgKCFkIHx8ICFkLnByb3Bvc2FsSWQpIHJldHVybjtcbiAgICAgIHNldEFjY2VwdGluZ0lkKG51bGwpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGQuZG9jdW1lbnRJZCAmJiBwZW5kaW5nQWNjZXB0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBkZWxldGUgcGVuZGluZ0FjY2VwdFJlZi5jdXJyZW50W2QuZG9jdW1lbnRJZF07XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICBzZXRBY2NlcHRGYWlsKHsgcHJvcG9zYWxJZDogU3RyaW5nKGQucHJvcG9zYWxJZCksIG1lc3NhZ2U6IFN0cmluZyhkLm1lc3NhZ2UgfHwgJ0FjY2VwdCBmYWlsZWQnKSB9KTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdhY2NlcHREaXN0cmlidXRlUHJvcG9zYWxGYWlsZWQnLCBoYW5kbGVyKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FjY2VwdERpc3RyaWJ1dGVQcm9wb3NhbEZhaWxlZCcsIGhhbmRsZXIpO1xuICB9LCBbXSk7XG5cbiAgLy8gTGlzdGVuIGZvciBkaXN0cmlidXRlSW52b2ljZVJlYWR5IHdoZW4gd2UgYWNjZXB0IGEgcHJvcG9zYWwgKGhvc3QgZmxvdylcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IGRldGFpbCA9IGUgJiYgZS5kZXRhaWw7XG4gICAgICBpZiAoIWRldGFpbCB8fCAhZGV0YWlsLmZyb21Qcm9wb3NhbCkgcmV0dXJuO1xuICAgICAgY29uc3QgZG9jSWQgPSBkZXRhaWwuZG9jdW1lbnRJZDtcbiAgICAgIGxldCBwcm9wb3NhbElkID0gcGVuZGluZ0FjY2VwdFJlZi5jdXJyZW50W2RvY0lkXTtcbiAgICAgIGlmICghcHJvcG9zYWxJZCkge1xuICAgICAgICBwcm9wb3NhbElkID0gT2JqZWN0LmtleXMocHJvcG9zYWxzU3RhdGUpLmZpbmQoKGlkKSA9PiB7XG4gICAgICAgICAgY29uc3QgcCA9IHByb3Bvc2Fsc1N0YXRlW2lkXTtcbiAgICAgICAgICBpZiAoIXApIHJldHVybiBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gcC5kb2N1bWVudElkID09PSBkb2NJZCB8fFxuICAgICAgICAgICAgKHAuZG9jdW1lbnQgJiYgKHAuZG9jdW1lbnQuc2hhMjU2ID09PSBkb2NJZCB8fCBwLmRvY3VtZW50LmlkID09PSBkb2NJZCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wb3NhbElkKSB7XG4gICAgICAgIGRlbGV0ZSBwZW5kaW5nQWNjZXB0UmVmLmN1cnJlbnRbZG9jSWRdO1xuICAgICAgICBzZXRJbnZvaWNlQnlQcm9wb3NhbCgocHJldikgPT4gKHtcbiAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgIFtwcm9wb3NhbElkXToge1xuICAgICAgICAgICAgYWRkcmVzczogZGV0YWlsLmFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnRTYXRzOiBkZXRhaWwuYW1vdW50U2F0cyxcbiAgICAgICAgICAgIG5ldHdvcms6IGRldGFpbC5uZXR3b3JrXG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZGlzdHJpYnV0ZUludm9pY2VSZWFkeScsIGhhbmRsZXIpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGlzdHJpYnV0ZUludm9pY2VSZWFkeScsIGhhbmRsZXIpO1xuICB9LCBbcHJvcG9zYWxzU3RhdGVdKTtcblxuICBjb25zdCBwZW5kaW5nUHJvcG9zYWxzID0gT2JqZWN0LnZhbHVlcyhwcm9wb3NhbHNTdGF0ZSB8fCB7fSkuZmlsdGVyKFxuICAgIChwKSA9PiBwICYmIChwLnN0YXR1cyA9PT0gJ3BlbmRpbmcnIHx8IHAuc3RhdHVzID09PSAnYWNjZXB0ZWQnKVxuICApO1xuICBjb25zdCBib25kZWRQcm9wb3NhbHMgPSBPYmplY3QudmFsdWVzKHByb3Bvc2Fsc1N0YXRlIHx8IHt9KS5maWx0ZXIoXG4gICAgKHApID0+IHAgJiYgcC5zdGF0dXMgPT09ICdib25kZWQnXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlQWNjZXB0ID0gKHByb3Bvc2FsKSA9PiB7XG4gICAgaWYgKCFicmlkZ2VSZWYgfHwgIWJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSBicmlkZ2VSZWYuY3VycmVudDtcbiAgICBpZiAodHlwZW9mIGJyaWRnZUluc3RhbmNlLnNlbmRBY2NlcHREaXN0cmlidXRlUHJvcG9zYWxSZXF1ZXN0ICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG4gICAgY29uc3QgZG9jID0gYnJpZGdlSW5zdGFuY2UuZ2xvYmFsU3RhdGUgJiYgYnJpZGdlSW5zdGFuY2UuZ2xvYmFsU3RhdGUuZG9jdW1lbnRzICYmIGJyaWRnZUluc3RhbmNlLmdsb2JhbFN0YXRlLmRvY3VtZW50c1twcm9wb3NhbC5kb2N1bWVudElkXTtcbiAgICBjb25zdCBiYWNrZW5kSWQgPSAoZG9jICYmIGRvYy5zaGEyNTYpIHx8IHByb3Bvc2FsLmRvY3VtZW50SWQ7XG4gICAgcGVuZGluZ0FjY2VwdFJlZi5jdXJyZW50W2JhY2tlbmRJZF0gPSBwcm9wb3NhbC5pZDtcbiAgICBzZXRBY2NlcHRGYWlsKChwcmV2KSA9PiAocHJldiAmJiBwcmV2LnByb3Bvc2FsSWQgPT09IHByb3Bvc2FsLmlkID8gbnVsbCA6IHByZXYpKTtcbiAgICBzZXRBY2NlcHRpbmdJZChwcm9wb3NhbC5pZCk7XG4gICAgYnJpZGdlSW5zdGFuY2Uuc2VuZEFjY2VwdERpc3RyaWJ1dGVQcm9wb3NhbFJlcXVlc3QocHJvcG9zYWwpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0QWNjZXB0aW5nSWQobnVsbCksIDMwMDApO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlamVjdCA9IChwcm9wb3NhbCkgPT4ge1xuICAgIHNldEFjY2VwdEZhaWwoKHByZXYpID0+IChwcmV2ICYmIHByZXYucHJvcG9zYWxJZCA9PT0gcHJvcG9zYWwuaWQgPyBudWxsIDogcHJldikpO1xuICAgIGlmICghYnJpZGdlUmVmIHx8ICFicmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIGNvbnN0IGdzID0gYnJpZGdlUmVmLmN1cnJlbnQuZ2xvYmFsU3RhdGUgfHwge307XG4gICAgZ3MuZGlzdHJpYnV0ZVByb3Bvc2FscyA9IGdzLmRpc3RyaWJ1dGVQcm9wb3NhbHMgfHwge307XG4gICAgY29uc3QgdXBkYXRlZCA9IHsgLi4ucHJvcG9zYWwsIHN0YXR1czogJ3JlamVjdGVkJyB9O1xuICAgIGdzLmRpc3RyaWJ1dGVQcm9wb3NhbHNbcHJvcG9zYWwuaWRdID0gdXBkYXRlZDtcbiAgICBpZiAodHlwZW9mIGJyaWRnZVJlZi5jdXJyZW50Ll93cml0ZUpTT05Ub1N0b3JhZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGJyaWRnZVJlZi5jdXJyZW50Ll93cml0ZUpTT05Ub1N0b3JhZ2UoJ2ZhYnJpYzpkaXN0cmlidXRlUHJvcG9zYWxzJywgZ3MuZGlzdHJpYnV0ZVByb3Bvc2Fscyk7XG4gICAgfVxuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAnYWRkJywgcGF0aDogYC9kaXN0cmlidXRlUHJvcG9zYWxzLyR7cHJvcG9zYWwuaWR9YCwgdmFsdWU6IHVwZGF0ZWQgfSxcbiAgICAgICAgZ2xvYmFsU3RhdGU6IGdzXG4gICAgICB9XG4gICAgfSkpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1QYXltZW50ID0gKHByb3Bvc2FsLCB0eGlkKSA9PiB7XG4gICAgaWYgKCFicmlkZ2VSZWYgfHwgIWJyaWRnZVJlZi5jdXJyZW50IHx8ICF0eGlkIHx8ICF0eGlkLnRyaW0oKSkgcmV0dXJuO1xuICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5zZW5kRGlzdHJpYnV0ZURvY3VtZW50UmVxdWVzdCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuO1xuICAgIGNvbnN0IGRvY0lkID0gcHJvcG9zYWwuZG9jdW1lbnRJZDtcbiAgICBjb25zdCBpbnZvaWNlID0gaW52b2ljZUJ5UHJvcG9zYWxbcHJvcG9zYWwuaWRdO1xuICAgIHNldEJvbmRGYWlsKChwcmV2KSA9PiAocHJldiAmJiBwcmV2LnByb3Bvc2FsSWQgPT09IHByb3Bvc2FsLmlkID8gbnVsbCA6IHByZXYpKTtcbiAgICBicmlkZ2VJbnN0YW5jZS5zZW5kRGlzdHJpYnV0ZURvY3VtZW50UmVxdWVzdChkb2NJZCwge1xuICAgICAgYW1vdW50U2F0czogaW52b2ljZSA/IGludm9pY2UuYW1vdW50U2F0cyA6IHByb3Bvc2FsLmFtb3VudFNhdHMsXG4gICAgICBkdXJhdGlvblllYXJzOiBwcm9wb3NhbC5kdXJhdGlvblllYXJzLFxuICAgICAgY2hhbGxlbmdlQ2FkZW5jZTogcHJvcG9zYWwuY2hhbGxlbmdlQ2FkZW5jZSxcbiAgICAgIHJlc3BvbnNlRGVhZGxpbmU6IHByb3Bvc2FsLnJlc3BvbnNlRGVhZGxpbmUsXG4gICAgICBkZXNpcmVkQ29waWVzOiBwcm9wb3NhbC5kZXNpcmVkQ29waWVzLFxuICAgICAgdHhpZDogdHhpZC50cmltKClcbiAgICB9KTtcbiAgICBzZXRUeGlkQnlQcm9wb3NhbCgocHJldikgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xuICAgICAgZGVsZXRlIG5leHRbcHJvcG9zYWwuaWRdO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gICAgY29uc3QgZ3MgPSBicmlkZ2VJbnN0YW5jZS5nbG9iYWxTdGF0ZSB8fCB7fTtcbiAgICBncy5kaXN0cmlidXRlUHJvcG9zYWxzID0gZ3MuZGlzdHJpYnV0ZVByb3Bvc2FscyB8fCB7fTtcbiAgICBjb25zdCB1cGRhdGVkID0geyAuLi5wcm9wb3NhbCwgc3RhdHVzOiAnYWNjZXB0ZWQnIH07XG4gICAgZ3MuZGlzdHJpYnV0ZVByb3Bvc2Fsc1twcm9wb3NhbC5pZF0gPSB1cGRhdGVkO1xuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZ2xvYmFsU3RhdGVVcGRhdGUnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgb3BlcmF0aW9uOiB7IG9wOiAnYWRkJywgcGF0aDogYC9kaXN0cmlidXRlUHJvcG9zYWxzLyR7cHJvcG9zYWwuaWR9YCwgdmFsdWU6IHVwZGF0ZWQgfSxcbiAgICAgICAgZ2xvYmFsU3RhdGU6IGdzXG4gICAgICB9XG4gICAgfSkpO1xuICB9O1xuXG4gIGNvbnN0IGhhc1Byb3Bvc2FscyA9IHBlbmRpbmdQcm9wb3NhbHMubGVuZ3RoID4gMCB8fCBib25kZWRQcm9wb3NhbHMubGVuZ3RoID4gMDtcbiAgY29uc3QgYnJpZGdlID0gYnJpZGdlUmVmICYmIGJyaWRnZVJlZi5jdXJyZW50O1xuICBjb25zdCB3aXJlTG9jYWwgPSAhIShicmlkZ2UgJiYgdHlwZW9mIGJyaWRnZS5oYXNMb2NhbFdpcmVTaWduaW5nS2V5ID09PSAnZnVuY3Rpb24nICYmIGJyaWRnZS5oYXNMb2NhbFdpcmVTaWduaW5nS2V5KCkpO1xuXG4gIHJldHVybiAoXG4gICAgPFNlZ21lbnQgYmFzaWM9eyEhcHJvcHMuZW1iZWRkZWR9IHN0eWxlPXtwcm9wcy5lbWJlZGRlZCA/IHsgcGFkZGluZzogMCB9IDogdW5kZWZpbmVkfT5cbiAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cImRpc3RyaWJ1dGUtaG9zdGluZy1oZWFkaW5nXCIgYXJpYS1kZXNjcmliZWRieT1cImRpc3RyaWJ1dGUtaG9zdGluZy1zdW1tYXJ5XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgZ2FwOiAnMC41ZW0nLFxuICAgICAgICAgICAgbWFyZ2luQm90dG9tOiAnMC4zNWVtJ1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBpZD1cImRpc3RyaWJ1dGUtaG9zdGluZy1oZWFkaW5nXCIgc3R5bGU9e3sgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImhhbmRzaGFrZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICBIb3N0aW5nIHByb3Bvc2Fsc1xuICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuMzVlbScgfX0gYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICB7cGVuZGluZ1Byb3Bvc2Fscy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwib3JhbmdlXCI+e3BlbmRpbmdQcm9wb3NhbHMubGVuZ3RofSBwZW5kaW5nPC9MYWJlbD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7Ym9uZGVkUHJvcG9zYWxzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJncmVlblwiPntib25kZWRQcm9wb3NhbHMubGVuZ3RofSBib25kZWQ8L0xhYmVsPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCBpZD1cImRpc3RyaWJ1dGUtaG9zdGluZy1zdW1tYXJ5XCIgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICBQZWVycyB3YW50IHRvIHBheSB5b3UgdG8gaG9zdCB0aGVpciBmaWxlcy4gQWNjZXB0IHRvIGNyZWF0ZSBhIHBheW1lbnQgaW52b2ljZSBhbmQgYmVnaW4gcmVjZWl2aW5nIHBheW1lbnRzLlxuICAgICAgICA8L3A+XG4gICAgICAgIHticmlkZ2UgJiYgIXdpcmVMb2NhbCAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19IGlkPVwiZGlzdHJpYnV0ZS1ob3N0aW5nLWV4dGVybmFsLXNpZ25pbmdcIj5cbiAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5FeHRlcm5hbCBzaWduaW5nIG1vZGU8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGNvbG9yOiAnIzMzMycgfX0+XG4gICAgICAgICAgICAgIFRoaXMgYnJvd3NlciBoYXMgbm8gbG9jYWwgRmFicmljIHByaXZhdGUga2V5LCBzbyBzdG9yYWdlLWNvbnRyYWN0IHJlcXVlc3RzIGdvIHRvIHRoZSBIdWIgd2l0aG91dCBhIGNsaWVudCBTY2hub3JyIHNpZ25hdHVyZSBvbiB0aGUgd2lyZSBlbnZlbG9wZS5cbiAgICAgICAgICAgICAgQXBwcm92ZSBhbnkgZGVsZWdhdGlvbiBwcm9tcHRzIGluIHRoZSBkZXNrdG9wIGFwcCBvciBzaGVsbC4gV2hlbiB5b3UgYXJlIGRvbmUgb24gYSBzaGFyZWQgbWFjaGluZSwgZW5kIHRoZSBzZXNzaW9uIHVuZGVyeycgJ31cbiAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3Mvc2VjdXJpdHlcIj5TZWN1cml0eSAmYW1wOyBkZWxlZ2F0aW9uPC9MaW5rPi5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICl9XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8TGlzdCBkaXZpZGVkIHJlbGF4ZWQ+XG4gICAgICAgIHtwZW5kaW5nUHJvcG9zYWxzLm1hcCgocHJvcG9zYWwpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnZvaWNlID0gaW52b2ljZUJ5UHJvcG9zYWxbcHJvcG9zYWwuaWRdO1xuICAgICAgICAgIGNvbnN0IGhhc0ludm9pY2UgPSAhIWludm9pY2U7XG4gICAgICAgICAgY29uc3QgdHhpZCA9IHR4aWRCeVByb3Bvc2FsW3Byb3Bvc2FsLmlkXSB8fCAnJztcbiAgICAgICAgICBjb25zdCBpc0FjY2VwdGluZyA9IGFjY2VwdGluZ0lkID09PSBwcm9wb3NhbC5pZDtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPExpc3QuSXRlbSBrZXk9e3Byb3Bvc2FsLmlkfT5cbiAgICAgICAgICAgICAgPExpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICB7cHJvcG9zYWwuZG9jdW1lbnROYW1lIHx8IHByb3Bvc2FsLmRvY3VtZW50SWR9XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cIm1pbmlcIiBjb2xvcj1cIm9yYW5nZVwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgIHtmb3JtYXRTYXRzRGlzcGxheShwcm9wb3NhbC5hbW91bnRTYXRzKX0gc2F0c1xuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxMaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgRnJvbSB7cHJvcG9zYWwuc2VuZGVyQWRkcmVzcyA/IGAke1N0cmluZyhwcm9wb3NhbC5zZW5kZXJBZGRyZXNzKS5zbGljZSgwLCAxMil94oCmYCA6ICd1bmtub3duJ31cbiAgICAgICAgICAgICAgICA8L0xpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgeyFoYXNJbnZvaWNlID8gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgIHthY2NlcHRGYWlsICYmIGFjY2VwdEZhaWwucHJvcG9zYWxJZCA9PT0gcHJvcG9zYWwuaWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNjVlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRGlzbWlzcz17KCkgPT4gc2V0QWNjZXB0RmFpbCgocHJldikgPT4gKHByZXYgJiYgcHJldi5wcm9wb3NhbElkID09PSBwcm9wb3NhbC5pZCA/IG51bGwgOiBwcmV2KSl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2FjY2VwdEZhaWwubWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nPXtpc0FjY2VwdGluZ31cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNBY2NlcHRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQWNjZXB0KHByb3Bvc2FsKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjaGVja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgQWNjZXB0XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVJlamVjdChwcm9wb3NhbCl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBSZWplY3RcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPE1lc3NhZ2Ugc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+SW52b2ljZSBzZW50IHRvIHByb3Bvc2VyPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAge2JvbmRGYWlsICYmIGJvbmRGYWlsLnByb3Bvc2FsSWQgPT09IHByb3Bvc2FsLmlkICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgbmVnYXRpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkRpc21pc3M9eygpID0+IHNldEJvbmRGYWlsKChwcmV2KSA9PiAocHJldiAmJiBwcmV2LnByb3Bvc2FsSWQgPT09IHByb3Bvc2FsLmlkID8gbnVsbCA6IHByZXYpKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9e2JvbmRGYWlsLm1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgQWRkcmVzczogPGNvZGU+e2ludm9pY2UuYWRkcmVzc308L2NvZGU+PGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgQW1vdW50OiB7Zm9ybWF0U2F0c0Rpc3BsYXkoaW52b2ljZS5hbW91bnRTYXRzKX0gc2F0c1xuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwPldoZW4gdGhlIHByb3Bvc2VyIHBheXMsIGVudGVyIHRoZSB0cmFuc2FjdGlvbiBJRCBiZWxvdzo8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHJhbnNhY3Rpb24gSUQgKHR4aWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dHhpZH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFR4aWRCeVByb3Bvc2FsKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBbcHJvcG9zYWwuaWRdOiBlLnRhcmdldC52YWx1ZSB9KSl9XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC41ZW0nLCBmb250RmFtaWx5OiAnbW9ub3NwYWNlJywgd2lkdGg6ICcxMDAlJyB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ29uZmlybVBheW1lbnQocHJvcG9zYWwsIHR4aWQpfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshdHhpZC50cmltKCl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBDb25maXJtIHBheW1lbnQgJiBjcmVhdGUgY29udHJhY3RcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvTGlzdD5cblxuICAgICAge2JvbmRlZFByb3Bvc2Fscy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiZGlzdHJpYnV0ZS1ib25kZWQtaGVhZGluZ1wiXG4gICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiZGlzdHJpYnV0ZS1ib25kZWQtc3VtbWFyeVwiXG4gICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxLjVlbScgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIiBpZD1cImRpc3RyaWJ1dGUtYm9uZGVkLWhlYWRpbmdcIiBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjaGVjayBjaXJjbGVcIiBjb2xvcj1cImdyZWVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgQm9uZGVkIChwYXltZW50IGNvbmZpcm1lZClcbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPHAgaWQ9XCJkaXN0cmlidXRlLWJvbmRlZC1zdW1tYXJ5XCIgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC43NWVtJywgZm9udFNpemU6ICcwLjllbScgfX0+XG4gICAgICAgICAgICAgIFRoZXNlIG9mZmVycyBoYXZlIGJlZW4gcGFpZC4gU3RvcmFnZSBjb250cmFjdHMgYXJlIGFjdGl2ZS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8TGlzdCBkaXZpZGVkIHJlbGF4ZWQgYXJpYS1sYWJlbD1cIkJvbmRlZCBob3N0aW5nIHByb3Bvc2Fsc1wiPlxuICAgICAgICAgICAge2JvbmRlZFByb3Bvc2Fscy5tYXAoKHByb3Bvc2FsKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRyYWN0SWQgPSBjb250cmFjdEJ5UHJvcG9zYWxbcHJvcG9zYWwuaWRdO1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxMaXN0Lkl0ZW0ga2V5PXtwcm9wb3NhbC5pZH0+XG4gICAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAge3Byb3Bvc2FsLmRvY3VtZW50TmFtZSB8fCBwcm9wb3NhbC5kb2N1bWVudElkfVxuICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwibWluaVwiIGNvbG9yPVwiZ3JlZW5cIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNoZWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIEJvbmRlZFxuICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxMaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIEZyb20ge3Byb3Bvc2FsLnNlbmRlckFkZHJlc3MgPyBgJHtTdHJpbmcocHJvcG9zYWwuc2VuZGVyQWRkcmVzcykuc2xpY2UoMCwgMTIpfeKApmAgOiAndW5rbm93bid9XG4gICAgICAgICAgICAgICAgICAgICAge3Byb3Bvc2FsLmFtb3VudFNhdHMgPyBgIOKAlCAke2Zvcm1hdFNhdHNEaXNwbGF5KHByb3Bvc2FsLmFtb3VudFNhdHMpfSBzYXRzYCA6ICcnfVxuICAgICAgICAgICAgICAgICAgICA8L0xpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIHtjb250cmFjdElkICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvPXtgL2NvbnRyYWN0cy8ke2VuY29kZVVSSUNvbXBvbmVudChjb250cmFjdElkKX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJmaWxlIGFsdGVybmF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgY29udHJhY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L0xpc3Q+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8Lz5cbiAgICAgICl9XG5cbiAgICAgIHshaGFzUHJvcG9zYWxzICYmIChcbiAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjODg4JywgZm9udFN0eWxlOiAnaXRhbGljJywgbWFyZ2luVG9wOiAnMC41ZW0nIH19Pk5vIG9mZmVycyB5ZXQuPC9wPlxuICAgICAgKX1cbiAgICA8L1NlZ21lbnQ+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGlzdHJpYnV0ZVByb3Bvc2Fsc0xpc3Q7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsIm4iLCJsIiwidSIsImYiLCJuZXh0IiwiZG9uZSIsImlzQXJyYXkiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJIZWFkZXIiLCJJY29uIiwiSW5wdXQiLCJMYWJlbCIsIkxpc3QiLCJNZXNzYWdlIiwiU2VnbWVudCIsIl9yZXF1aXJlMyIsImZvcm1hdFNhdHNEaXNwbGF5IiwiRGlzdHJpYnV0ZVByb3Bvc2Fsc0xpc3QiLCJwcm9wcyIsImJyaWRnZVJlZiIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsInByb3Bvc2Fsc1N0YXRlIiwic2V0UHJvcG9zYWxzU3RhdGUiLCJfUmVhY3QkdXNlU3RhdGUzIiwiX1JlYWN0JHVzZVN0YXRlNCIsImFjY2VwdGluZ0lkIiwic2V0QWNjZXB0aW5nSWQiLCJfUmVhY3QkdXNlU3RhdGU1IiwiX1JlYWN0JHVzZVN0YXRlNiIsInR4aWRCeVByb3Bvc2FsIiwic2V0VHhpZEJ5UHJvcG9zYWwiLCJfUmVhY3QkdXNlU3RhdGU3IiwiX1JlYWN0JHVzZVN0YXRlOCIsImludm9pY2VCeVByb3Bvc2FsIiwic2V0SW52b2ljZUJ5UHJvcG9zYWwiLCJfUmVhY3QkdXNlU3RhdGU5IiwiX1JlYWN0JHVzZVN0YXRlMCIsImNvbnRyYWN0QnlQcm9wb3NhbCIsInNldENvbnRyYWN0QnlQcm9wb3NhbCIsIl9SZWFjdCR1c2VTdGF0ZTEiLCJfUmVhY3QkdXNlU3RhdGUxMCIsImJvbmRGYWlsIiwic2V0Qm9uZEZhaWwiLCJfUmVhY3QkdXNlU3RhdGUxMSIsIl9SZWFjdCR1c2VTdGF0ZTEyIiwiYWNjZXB0RmFpbCIsInNldEFjY2VwdEZhaWwiLCJwZW5kaW5nQWNjZXB0UmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaGFuZGxlciIsImV2ZW50IiwiZ3MiLCJkZXRhaWwiLCJnbG9iYWxTdGF0ZSIsImRpc3RyaWJ1dGVQcm9wb3NhbHMiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImJyaWRnZUluc3RhbmNlIiwiY3VycmVudCIsImNvbnRyYWN0SWQiLCJkb2N1bWVudElkIiwiZG9jSWQiLCJwcmV2IiwidXBkYXRlZCIsIl9sb29wIiwiX09iamVjdCRlbnRyaWVzJF9pIiwiX09iamVjdCRlbnRyaWVzIiwiX2kiLCJwaWQiLCJwIiwibWF0Y2hlcyIsImRvY3VtZW50Iiwic2hhMjU2IiwiaWQiLCJzdGF0dXMiLCJjIiwiZW50cmllcyIsIm1hcCIsImZpbmQiLCJwcm9wb3NhbElkIiwibWVzc2FnZSIsImQiLCJfIiwiZnJvbVByb3Bvc2FsIiwiYWRkcmVzcyIsImFtb3VudFNhdHMiLCJuZXR3b3JrIiwicGVuZGluZ1Byb3Bvc2FscyIsInZhbHVlcyIsImJvbmRlZFByb3Bvc2FscyIsImhhbmRsZUFjY2VwdCIsInByb3Bvc2FsIiwic2VuZEFjY2VwdERpc3RyaWJ1dGVQcm9wb3NhbFJlcXVlc3QiLCJkb2MiLCJkb2N1bWVudHMiLCJiYWNrZW5kSWQiLCJzZXRUaW1lb3V0IiwiaGFuZGxlUmVqZWN0IiwiX3dyaXRlSlNPTlRvU3RvcmFnZSIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsIm9wZXJhdGlvbiIsIm9wIiwicGF0aCIsImNvbmNhdCIsImhhbmRsZUNvbmZpcm1QYXltZW50IiwidHhpZCIsInRyaW0iLCJzZW5kRGlzdHJpYnV0ZURvY3VtZW50UmVxdWVzdCIsImludm9pY2UiLCJkdXJhdGlvblllYXJzIiwiY2hhbGxlbmdlQ2FkZW5jZSIsInJlc3BvbnNlRGVhZGxpbmUiLCJkZXNpcmVkQ29waWVzIiwiaGFzUHJvcG9zYWxzIiwiYnJpZGdlIiwid2lyZUxvY2FsIiwiaGFzTG9jYWxXaXJlU2lnbmluZ0tleSIsImNyZWF0ZUVsZW1lbnQiLCJiYXNpYyIsImVtYmVkZGVkIiwic3R5bGUiLCJwYWRkaW5nIiwidW5kZWZpbmVkIiwiZGlzcGxheSIsImZsZXhXcmFwIiwiYWxpZ25JdGVtcyIsImdhcCIsIm1hcmdpbkJvdHRvbSIsImFzIiwibWFyZ2luIiwic2l6ZSIsImNvbG9yIiwid2FybmluZyIsInRvIiwiZGl2aWRlZCIsInJlbGF4ZWQiLCJoYXNJbnZvaWNlIiwiaXNBY2NlcHRpbmciLCJJdGVtIiwia2V5IiwiQ29udGVudCIsImRvY3VtZW50TmFtZSIsIm1hcmdpbkxlZnQiLCJEZXNjcmlwdGlvbiIsInNlbmRlckFkZHJlc3MiLCJtYXJnaW5Ub3AiLCJuZWdhdGl2ZSIsIm9uRGlzbWlzcyIsInByaW1hcnkiLCJsb2FkaW5nIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwiY29udGVudCIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJ0YXJnZXQiLCJmb250RmFtaWx5Iiwid2lkdGgiLCJGcmFnbWVudCIsImZvbnRTaXplIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZm9udFN0eWxlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/DistributeProposalsList.js\n\n}')},"./components/DistributedFederationPanel.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Message = _require2.Message,\n Icon = _require2.Icon,\n Button = _require2.Button;\nvar _require3 = __webpack_require__(/*! ../functions/distributedManifestClient */ "./functions/distributedManifestClient.js"),\n fetchDistributedHubPolicy = _require3.fetchDistributedHubPolicy,\n federationSummaryFromManifest = _require3.federationSummaryFromManifest,\n beaconEpochWitnessDetail = _require3.beaconEpochWitnessDetail;\n\n/**\n * Operator-facing summary of federation policy from live hub endpoints.\n * Clarifies what the hub enforces vs execution-contract registry/run (L1 + deterministic commitment only).\n */\nfunction DistributedFederationPanel(props) {\n var size = props && props.size ? props.size : \'small\';\n var style = props && props.style ? props.style : undefined;\n var marginBottom = props && props.marginBottom != null ? props.marginBottom : \'1em\';\n var hideSidechainNavLink = !!(props && props.hideSidechainNavLink);\n var _React$useState = React.useState(true),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n loading = _React$useState2[0],\n setLoading = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n manifest = _React$useState4[0],\n setManifest = _React$useState4[1];\n var _React$useState5 = React.useState(null),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n epoch = _React$useState6[0],\n setEpoch = _React$useState6[1];\n var _React$useState7 = React.useState([]),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n warnings = _React$useState8[0],\n setWarnings = _React$useState8[1];\n var _React$useState9 = React.useState(false),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n hubIdCopied = _React$useState0[0],\n setHubIdCopied = _React$useState0[1];\n var hubFabricPeerId = manifest && manifest.hubFabricPeerId ? String(manifest.hubFabricPeerId).trim() : \'\';\n var copyHubFabricPeerId = React.useCallback(function () {\n if (!hubFabricPeerId) return;\n if (typeof navigator === \'undefined\' || !navigator.clipboard || typeof navigator.clipboard.writeText !== \'function\') return;\n setHubIdCopied(false);\n navigator.clipboard.writeText(hubFabricPeerId).then(function () {\n setHubIdCopied(true);\n if (typeof window !== \'undefined\') {\n window.setTimeout(function () {\n return setHubIdCopied(false);\n }, 2000);\n }\n })["catch"](function () {});\n }, [hubFabricPeerId]);\n React.useEffect(function () {\n var cancelled = false;\n setLoading(true);\n fetchDistributedHubPolicy().then(function (r) {\n if (cancelled) return;\n setManifest(r.manifest);\n setEpoch(r.epoch);\n setWarnings(Array.isArray(r.warnings) ? r.warnings : []);\n setLoading(false);\n })["catch"](function (e) {\n if (cancelled) return;\n setManifest(null);\n setEpoch(null);\n setWarnings([e && e.message ? e.message : String(e)]);\n setLoading(false);\n });\n return function () {\n cancelled = true;\n };\n }, []);\n var fed = federationSummaryFromManifest(manifest);\n var beacon = beaconEpochWitnessDetail(epoch);\n var hubInValidatorSet = !!(fed.active && hubFabricPeerId && fed.validators.some(function (v) {\n return String(v).toLowerCase() === hubFabricPeerId.toLowerCase();\n }));\n if (loading) {\n return /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: size,\n style: _objectSpread(_objectSpread({}, style), {}, {\n marginBottom: marginBottom\n }),\n role: "region",\n "aria-label": "Federation policy loading"\n }, /*#__PURE__*/React.createElement(Message.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "circle notched",\n loading: true,\n "aria-hidden": "true"\n }), \' \', "Federation policy (this hub)"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "Loading ", /*#__PURE__*/React.createElement("code", null, "/services/distributed/manifest"), ", ", /*#__PURE__*/React.createElement("code", null, "/services/distributed/epoch"), ", and federation vault JSON\\u2026"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.75em 0 0\',\n fontSize: \'0.9em\',\n color: \'#666\'\n }\n }, !hideSidechainNavLink ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Link, {\n to: "/sidechains"\n }, "Statechain"), \' · \') : null, /*#__PURE__*/React.createElement(Link, {\n to: "/settings/admin/beacon-federation"\n }, "Beacon Federation"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/manifest",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Distributed manifest"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/epoch",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Beacon epoch (JSON)"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/vault",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Vault")));\n }\n var warnOnly = warnings.length > 0 && !manifest && !epoch;\n if (warnOnly) {\n return /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: size,\n style: _objectSpread(_objectSpread({}, style), {}, {\n marginBottom: marginBottom\n }),\n role: "region",\n "aria-label": "Federation policy error"\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Federation policy (this hub)"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, "Could not load distributed endpoints: ", warnings.join(\'; \'), "."));\n }\n var witnessLine = !beacon.hasBeacon ? \'Beacon epoch summary not available from this hub (epoch endpoint missing or empty).\' : beacon.lastWitnessPresent ? "Latest recorded beacon epoch carries a federation witness (".concat(beacon.signatureCount, " signature(s) in the last message).") : \'Latest recorded beacon epoch has no federation witness (expected when no validators are configured, or the hub key is not in the set).\';\n var scopeLine = /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("strong", null, "Execution contracts:"), " registry publish and ", /*#__PURE__*/React.createElement("code", null, "RunExecutionContract"), " use L1 invoice verification (when Bitcoin is on). Runs emit forward ", /*#__PURE__*/React.createElement("code", null, "FabricProgramRun"), " digests (", /*#__PURE__*/React.createElement("code", null, "programHash"), " + ", /*#__PURE__*/React.createElement("code", null, "runCommitmentHex"), ") plus legacy ", /*#__PURE__*/React.createElement("code", null, "executionRunCommitmentHex"), "; they do ", /*#__PURE__*/React.createElement("strong", null, "not"), " use federation witnesses.");\n var body;\n if (fed.active) {\n body = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Federation active on this hub:"), \' \', /*#__PURE__*/React.createElement("strong", null, fed.threshold, "-of-", fed.count), " Schnorr threshold over the configured compressed secp256k1 validator pubkeys.", /*#__PURE__*/React.createElement("code", null, "SubmitSidechainStatePatch"), " requires a valid ", /*#__PURE__*/React.createElement("code", null, "federationWitness"), " over the patch signing string (admin token does not bypass when validators are configured). The beacon adds a ", /*#__PURE__*/React.createElement("code", null, "federationWitness"), " on new epochs when the hub\'s pubkey is in that set, and on startup the hub checks stored epochs against the same threshold (see ", /*#__PURE__*/React.createElement("code", null, "verifyFederationWitnessOnMessage"), ")."), hubFabricPeerId ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n color: \'#444\',\n fontSize: \'0.9em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Hub Fabric peer id:"), \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, hubFabricPeerId), \' \', /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "mini",\n basic: true,\n icon: "copy",\n "aria-label": "Copy hub Fabric peer id",\n title: "Copy pubkey",\n onClick: function onClick() {\n return copyHubFabricPeerId();\n }\n }), hubIdCopied ? /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.35em\',\n color: \'#2185d0\'\n }\n }, "Copied") : null), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: hubInValidatorSet ? \'#2a6a2a\' : \'#8a6d3b\',\n fontSize: \'0.95em\'\n }\n }, hubInValidatorSet ? \'This id is in the validator list, so new beacon epochs can attach its Schnorr signature to federationWitness.\' : \'This id is not in the validator list; the beacon will not attach federationWitness until it is included in FABRIC_DISTRIBUTED_FEDERATION_VALIDATORS (or settings.distributed.federation.validators).\')) : null, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n color: \'#555\',\n fontSize: \'0.95em\'\n }\n }, witnessLine), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n color: \'#555\',\n fontSize: \'0.95em\'\n }\n }, scopeLine));\n } else {\n body = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Federation not configured"), " (distributed manifest has no validator pubkeys).", /*#__PURE__*/React.createElement("code", null, "SubmitSidechainStatePatch"), " requires a valid ", /*#__PURE__*/React.createElement("strong", null, "admin token"), " only. Beacon epochs are still anchored to Bitcoin; the hub signs each epoch ", /*#__PURE__*/React.createElement("code", null, "Message"), " with its identity key, but no k-of-n ", /*#__PURE__*/React.createElement("code", null, "federationWitness"), " is produced until validators and threshold are configured."), hubFabricPeerId ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n color: \'#444\',\n fontSize: \'0.9em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Hub Fabric peer id"), " (compressed pubkey hex \\u2014 include when you enable federation):", \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, hubFabricPeerId), \' \', /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "mini",\n basic: true,\n icon: "copy",\n "aria-label": "Copy hub Fabric peer id",\n title: "Copy pubkey",\n onClick: function onClick() {\n return copyHubFabricPeerId();\n }\n }), hubIdCopied ? /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.35em\',\n color: \'#2185d0\'\n }\n }, "Copied") : null) : null, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n color: \'#555\',\n fontSize: \'0.95em\'\n }\n }, witnessLine), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n color: \'#555\',\n fontSize: \'0.95em\'\n }\n }, scopeLine));\n }\n return /*#__PURE__*/React.createElement(Message, {\n info: fed.active,\n warning: !fed.active,\n size: size,\n style: _objectSpread(_objectSpread({}, style), {}, {\n marginBottom: marginBottom\n }),\n role: "region",\n "aria-label": "Federation guarantees for this hub"\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Federation guarantees (this hub)"), warnings.length > 0 && (manifest || epoch) ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, "Partial load: ", warnings.join(\'; \'), ".") : null, body, manifest && manifest.federationVault && manifest.federationVault.address ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.55em 0 0\',\n color: \'#2c5c2c\',\n fontSize: \'0.95em\',\n lineHeight: 1.45\n }\n }, /*#__PURE__*/React.createElement("strong", null, "L1 federation vault (Taproot):"), \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, manifest.federationVault.address), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/vault",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Vault JSON"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/vault/utxos",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "UTXOs"), manifest.federationVault.depositMaturityBlocks != null ? /*#__PURE__*/React.createElement("span", null, \' \', "\\u2014 default maturity policy: ", /*#__PURE__*/React.createElement("strong", null, manifest.federationVault.depositMaturityBlocks), " confirmations before treating deposits as matured for withdrawal planning.") : null, /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.4em\',\n fontSize: \'0.88em\',\n color: \'#555\'\n }\n }, "Withdraw via ", /*#__PURE__*/React.createElement("code", null, "PrepareFederationVaultWithdrawalPsbt"), " on ", /*#__PURE__*/React.createElement("code", null, "POST /services/rpc"), " (admin token): pass ", /*#__PURE__*/React.createElement("code", null, "fundedTxHex"), " and ", /*#__PURE__*/React.createElement("code", null, "destinationAddress"), "; validators co-sign the returned PSBT off-node.")) : manifest && manifest.federationVault && manifest.federationVault.status === \'no_validators\' ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.55em 0 0\',\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "On-chain vault:"), " add validator pubkeys to derive a deterministic Taproot deposit address (", /*#__PURE__*/React.createElement("code", null, "GET /services/distributed/vault"), ").") : null, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.6em 0 0\',\n fontSize: \'0.82em\',\n color: \'#777\'\n }\n }, "The distributed manifest\'s validator list and threshold match what this hub enforces for ", /*#__PURE__*/React.createElement("code", null, "SubmitSidechainStatePatch"), " (environment and settings), including when the beacon has not attached yet. Beacon epochs use the same style of witness over a deterministic signing string; sidechain patches use ", /*#__PURE__*/React.createElement("code", null, "signingStringForSidechainStatePatch"), " \\u2014 both verifiable offline with ", /*#__PURE__*/React.createElement("code", null, "@fabric/core"), "."), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.75em 0 0\',\n fontSize: \'0.9em\',\n color: \'#666\'\n }\n }, !hideSidechainNavLink ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Link, {\n to: "/sidechains"\n }, "Statechain"), \' · \') : null, /*#__PURE__*/React.createElement(Link, {\n to: "/settings/admin/beacon-federation"\n }, "Beacon Federation"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/manifest",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Distributed manifest"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/epoch",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Beacon epoch (JSON)"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/vault",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Federation vault"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/vault/utxos",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Vault UTXOs")));\n}\nmodule.exports = DistributedFederationPanel;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0Rpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBQUEsU0FBQUssUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBWCxDQUFBLEdBQUFTLE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFQLENBQUEsR0FBQUEsQ0FBQSxDQUFBWSxNQUFBLFdBQUFMLENBQUEsV0FBQUUsTUFBQSxDQUFBSSx3QkFBQSxDQUFBUCxDQUFBLEVBQUFDLENBQUEsRUFBQU8sVUFBQSxPQUFBTixDQUFBLENBQUFPLElBQUEsQ0FBQUMsS0FBQSxDQUFBUixDQUFBLEVBQUFSLENBQUEsWUFBQVEsQ0FBQTtBQUFBLFNBQUFTLGNBQUFYLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFXLFNBQUEsQ0FBQUMsTUFBQSxFQUFBWixDQUFBLFVBQUFDLENBQUEsV0FBQVUsU0FBQSxDQUFBWCxDQUFBLElBQUFXLFNBQUEsQ0FBQVgsQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFZLE9BQUEsV0FBQWIsQ0FBQSxJQUFBYyxlQUFBLENBQUFmLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFB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RSxFQUFFLEVBQUM7RUFBYSxHQUFDLFlBQWdCLENBQUMsRUFDdkMsS0FDYSxDQUFDLEdBQ2YsSUFBSSxlQUNSckUsS0FBQSxDQUFBNkQsYUFBQSxDQUFDMUQsSUFBSTtJQUFDa0UsRUFBRSxFQUFDO0VBQW1DLEdBQUMsbUJBQXVCLENBQUMsRUFDcEUsS0FBSyxlQUNOckUsS0FBQSxDQUFBNkQsYUFBQTtJQUFHUyxJQUFJLEVBQUMsZ0NBQWdDO0lBQUNDLE1BQU0sRUFBQyxRQUFRO0lBQUNDLEdBQUcsRUFBQztFQUFxQixHQUFDLHNCQUF1QixDQUFDLEVBQzFHLEtBQUssZUFDTnhFLEtBQUEsQ0FBQTZELGFBQUE7SUFBR1MsSUFBSSxFQUFDLDZCQUE2QjtJQUFDQyxNQUFNLEVBQUMsUUFBUTtJQUFDQyxHQUFHLEVBQUM7RUFBcUIsR0FBQyxxQkFBc0IsQ0FBQyxFQUN0RyxLQUFLLGVBQ054RSxLQUFBLENBQUE2RCxhQUFBO0lBQUdTLElBQUksRUFBQyw2QkFBNkI7SUFBQ0MsTUFBTSxFQUFDLFFBQVE7SUFBQ0MsR0FBRyxFQUFDO0VBQXFCLEdBQUMsa0JBQW1CLENBQUMsRUFDbkcsS0FBSyxlQUNOeEUsS0FBQSxDQUFBNkQsYUFBQTtJQUFHUyxJQUFJLEVBQUMsbUNBQW1DO0lBQUNDLE1BQU0sRUFBQyxRQUFRO0lBQUNDLEdBQUcsRUFBQztFQUFxQixHQUFDLGFBQWMsQ0FDbkcsQ0FDSSxDQUFDO0FBRWQ7QUFFQTRCLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHekYsMEJBQTBCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0Rpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsLmpzPzc1YzIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHsgTWVzc2FnZSwgSWNvbiwgQnV0dG9uIH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3Qge1xuICBmZXRjaERpc3RyaWJ1dGVkSHViUG9saWN5LFxuICBmZWRlcmF0aW9uU3VtbWFyeUZyb21NYW5pZmVzdCxcbiAgYmVhY29uRXBvY2hXaXRuZXNzRGV0YWlsXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2Rpc3RyaWJ1dGVkTWFuaWZlc3RDbGllbnQnKTtcblxuLyoqXG4gKiBPcGVyYXRvci1mYWNpbmcgc3VtbWFyeSBvZiBmZWRlcmF0aW9uIHBvbGljeSBmcm9tIGxpdmUgaHViIGVuZHBvaW50cy5cbiAqIENsYXJpZmllcyB3aGF0IHRoZSBodWIgZW5mb3JjZXMgdnMgZXhlY3V0aW9uLWNvbnRyYWN0IHJlZ2lzdHJ5L3J1biAoTDEgKyBkZXRlcm1pbmlzdGljIGNvbW1pdG1lbnQgb25seSkuXG4gKi9cbmZ1bmN0aW9uIERpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsIChwcm9wcykge1xuICBjb25zdCBzaXplID0gcHJvcHMgJiYgcHJvcHMuc2l6ZSA/IHByb3BzLnNpemUgOiAnc21hbGwnO1xuICBjb25zdCBzdHlsZSA9IHByb3BzICYmIHByb3BzLnN0eWxlID8gcHJvcHMuc3R5bGUgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IG1hcmdpbkJvdHRvbSA9IHByb3BzICYmIHByb3BzLm1hcmdpbkJvdHRvbSAhPSBudWxsID8gcHJvcHMubWFyZ2luQm90dG9tIDogJzFlbSc7XG4gIGNvbnN0IGhpZGVTaWRlY2hhaW5OYXZMaW5rID0gISEocHJvcHMgJiYgcHJvcHMuaGlkZVNpZGVjaGFpbk5hdkxpbmspO1xuXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbbWFuaWZlc3QsIHNldE1hbmlmZXN0XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbZXBvY2gsIHNldEVwb2NoXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbd2FybmluZ3MsIHNldFdhcm5pbmdzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgY29uc3QgW2h1YklkQ29waWVkLCBzZXRIdWJJZENvcGllZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgaHViRmFicmljUGVlcklkID0gbWFuaWZlc3QgJiYgbWFuaWZlc3QuaHViRmFicmljUGVlcklkXG4gICAgPyBTdHJpbmcobWFuaWZlc3QuaHViRmFicmljUGVlcklkKS50cmltKClcbiAgICA6ICcnO1xuXG4gIGNvbnN0IGNvcHlIdWJGYWJyaWNQZWVySWQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFodWJGYWJyaWNQZWVySWQpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gJ3VuZGVmaW5lZCcgfHwgIW5hdmlnYXRvci5jbGlwYm9hcmQgfHwgdHlwZW9mIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0ICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG4gICAgc2V0SHViSWRDb3BpZWQoZmFsc2UpO1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGh1YkZhYnJpY1BlZXJJZCkudGhlbigoKSA9PiB7XG4gICAgICBzZXRIdWJJZENvcGllZCh0cnVlKTtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiBzZXRIdWJJZENvcGllZChmYWxzZSksIDIwMDApO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfSwgW2h1YkZhYnJpY1BlZXJJZF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgZmV0Y2hEaXN0cmlidXRlZEh1YlBvbGljeSgpXG4gICAgICAudGhlbigocikgPT4ge1xuICAgICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICAgIHNldE1hbmlmZXN0KHIubWFuaWZlc3QpO1xuICAgICAgICBzZXRFcG9jaChyLmVwb2NoKTtcbiAgICAgICAgc2V0V2FybmluZ3MoQXJyYXkuaXNBcnJheShyLndhcm5pbmdzKSA/IHIud2FybmluZ3MgOiBbXSk7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICAgIHNldE1hbmlmZXN0KG51bGwpO1xuICAgICAgICBzZXRFcG9jaChudWxsKTtcbiAgICAgICAgc2V0V2FybmluZ3MoW2UgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpXSk7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHsgY2FuY2VsbGVkID0gdHJ1ZTsgfTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGZlZCA9IGZlZGVyYXRpb25TdW1tYXJ5RnJvbU1hbmlmZXN0KG1hbmlmZXN0KTtcbiAgY29uc3QgYmVhY29uID0gYmVhY29uRXBvY2hXaXRuZXNzRGV0YWlsKGVwb2NoKTtcbiAgY29uc3QgaHViSW5WYWxpZGF0b3JTZXQgPSAhIShmZWQuYWN0aXZlICYmIGh1YkZhYnJpY1BlZXJJZCAmJiBmZWQudmFsaWRhdG9ycy5zb21lKFxuICAgICh2KSA9PiBTdHJpbmcodikudG9Mb3dlckNhc2UoKSA9PT0gaHViRmFicmljUGVlcklkLnRvTG93ZXJDYXNlKClcbiAgKSk7XG5cbiAgaWYgKGxvYWRpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VcbiAgICAgICAgaW5mb1xuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBzdHlsZT17eyAuLi5zdHlsZSwgbWFyZ2luQm90dG9tIH19XG4gICAgICAgIHJvbGU9XCJyZWdpb25cIlxuICAgICAgICBhcmlhLWxhYmVsPVwiRmVkZXJhdGlvbiBwb2xpY3kgbG9hZGluZ1wiXG4gICAgICA+XG4gICAgICAgIDxNZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwiY2lyY2xlIG5vdGNoZWRcIiBsb2FkaW5nIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgeycgJ31cbiAgICAgICAgICBGZWRlcmF0aW9uIHBvbGljeSAodGhpcyBodWIpXG4gICAgICAgIDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyM0NDQnIH19PlxuICAgICAgICAgIExvYWRpbmcgPGNvZGU+L3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL21hbmlmZXN0PC9jb2RlPiwgPGNvZGU+L3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL2Vwb2NoPC9jb2RlPiwgYW5kIGZlZGVyYXRpb24gdmF1bHQgSlNPTuKAplxuICAgICAgICA8L3A+XG4gICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNzVlbSAwIDAnLCBmb250U2l6ZTogJzAuOWVtJywgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICB7IWhpZGVTaWRlY2hhaW5OYXZMaW5rID8gKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICA8TGluayB0bz1cIi9zaWRlY2hhaW5zXCI+U3RhdGVjaGFpbjwvTGluaz5cbiAgICAgICAgICAgICAgeycgwrcgJ31cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3MvYWRtaW4vYmVhY29uLWZlZGVyYXRpb25cIj5CZWFjb24gRmVkZXJhdGlvbjwvTGluaz5cbiAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgIDxhIGhyZWY9XCIvc2VydmljZXMvZGlzdHJpYnV0ZWQvbWFuaWZlc3RcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+RGlzdHJpYnV0ZWQgbWFuaWZlc3Q8L2E+XG4gICAgICAgICAgeycgwrcgJ31cbiAgICAgICAgICA8YSBocmVmPVwiL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL2Vwb2NoXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPkJlYWNvbiBlcG9jaCAoSlNPTik8L2E+XG4gICAgICAgICAgeycgwrcgJ31cbiAgICAgICAgICA8YSBocmVmPVwiL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL3ZhdWx0XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlZhdWx0PC9hPlxuICAgICAgICA8L3A+XG4gICAgICA8L01lc3NhZ2U+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHdhcm5Pbmx5ID0gd2FybmluZ3MubGVuZ3RoID4gMCAmJiAhbWFuaWZlc3QgJiYgIWVwb2NoO1xuICBpZiAod2Fybk9ubHkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2UgbmVnYXRpdmUgc2l6ZT17c2l6ZX0gc3R5bGU9e3sgLi4uc3R5bGUsIG1hcmdpbkJvdHRvbSB9fSByb2xlPVwicmVnaW9uXCIgYXJpYS1sYWJlbD1cIkZlZGVyYXRpb24gcG9saWN5IGVycm9yXCI+XG4gICAgICAgIDxNZXNzYWdlLkhlYWRlcj5GZWRlcmF0aW9uIHBvbGljeSAodGhpcyBodWIpPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGNvbG9yOiAnIzQ0NCcgfX0+XG4gICAgICAgICAgQ291bGQgbm90IGxvYWQgZGlzdHJpYnV0ZWQgZW5kcG9pbnRzOiB7d2FybmluZ3Muam9pbignOyAnKX0uXG4gICAgICAgIDwvcD5cbiAgICAgIDwvTWVzc2FnZT5cbiAgICApO1xuICB9XG5cbiAgY29uc3Qgd2l0bmVzc0xpbmUgPSAhYmVhY29uLmhhc0JlYWNvblxuICAgID8gJ0JlYWNvbiBlcG9jaCBzdW1tYXJ5IG5vdCBhdmFpbGFibGUgZnJvbSB0aGlzIGh1YiAoZXBvY2ggZW5kcG9pbnQgbWlzc2luZyBvciBlbXB0eSkuJ1xuICAgIDogYmVhY29uLmxhc3RXaXRuZXNzUHJlc2VudFxuICAgICAgPyBgTGF0ZXN0IHJlY29yZGVkIGJlYWNvbiBlcG9jaCBjYXJyaWVzIGEgZmVkZXJhdGlvbiB3aXRuZXNzICgke2JlYWNvbi5zaWduYXR1cmVDb3VudH0gc2lnbmF0dXJlKHMpIGluIHRoZSBsYXN0IG1lc3NhZ2UpLmBcbiAgICAgIDogJ0xhdGVzdCByZWNvcmRlZCBiZWFjb24gZXBvY2ggaGFzIG5vIGZlZGVyYXRpb24gd2l0bmVzcyAoZXhwZWN0ZWQgd2hlbiBubyB2YWxpZGF0b3JzIGFyZSBjb25maWd1cmVkLCBvciB0aGUgaHViIGtleSBpcyBub3QgaW4gdGhlIHNldCkuJztcblxuICBjb25zdCBzY29wZUxpbmUgPSAoXG4gICAgPHNwYW4+XG4gICAgICA8c3Ryb25nPkV4ZWN1dGlvbiBjb250cmFjdHM6PC9zdHJvbmc+IHJlZ2lzdHJ5IHB1Ymxpc2ggYW5kIDxjb2RlPlJ1bkV4ZWN1dGlvbkNvbnRyYWN0PC9jb2RlPiB1c2UgTDEgaW52b2ljZSB2ZXJpZmljYXRpb24gKHdoZW4gQml0Y29pbiBpcyBvbikuIFJ1bnMgZW1pdCBmb3J3YXJkIDxjb2RlPkZhYnJpY1Byb2dyYW1SdW48L2NvZGU+IGRpZ2VzdHMgKDxjb2RlPnByb2dyYW1IYXNoPC9jb2RlPiArIDxjb2RlPnJ1bkNvbW1pdG1lbnRIZXg8L2NvZGU+KSBwbHVzIGxlZ2FjeSA8Y29kZT5leGVjdXRpb25SdW5Db21taXRtZW50SGV4PC9jb2RlPjsgdGhleSBkbyA8c3Ryb25nPm5vdDwvc3Ryb25nPiB1c2UgZmVkZXJhdGlvbiB3aXRuZXNzZXMuXG4gICAgPC9zcGFuPlxuICApO1xuXG4gIGxldCBib2R5O1xuICBpZiAoZmVkLmFjdGl2ZSkge1xuICAgIGJvZHkgPSAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyM0NDQnIH19PlxuICAgICAgICAgIDxzdHJvbmc+RmVkZXJhdGlvbiBhY3RpdmUgb24gdGhpcyBodWI6PC9zdHJvbmc+eycgJ31cbiAgICAgICAgICA8c3Ryb25nPntmZWQudGhyZXNob2xkfS1vZi17ZmVkLmNvdW50fTwvc3Ryb25nPiBTY2hub3JyIHRocmVzaG9sZCBvdmVyIHRoZSBjb25maWd1cmVkIGNvbXByZXNzZWQgc2VjcDI1NmsxIHZhbGlkYXRvciBwdWJrZXlzLlxuICAgICAgICAgIDxjb2RlPlN1Ym1pdFNpZGVjaGFpblN0YXRlUGF0Y2g8L2NvZGU+IHJlcXVpcmVzIGEgdmFsaWQgPGNvZGU+ZmVkZXJhdGlvbldpdG5lc3M8L2NvZGU+IG92ZXIgdGhlIHBhdGNoIHNpZ25pbmcgc3RyaW5nIChhZG1pbiB0b2tlbiBkb2VzIG5vdCBieXBhc3Mgd2hlbiB2YWxpZGF0b3JzIGFyZSBjb25maWd1cmVkKS5cbiAgICAgICAgICBUaGUgYmVhY29uIGFkZHMgYSA8Y29kZT5mZWRlcmF0aW9uV2l0bmVzczwvY29kZT4gb24gbmV3IGVwb2NocyB3aGVuIHRoZSBodWImYXBvcztzIHB1YmtleSBpcyBpbiB0aGF0IHNldCwgYW5kIG9uIHN0YXJ0dXAgdGhlIGh1YiBjaGVja3Mgc3RvcmVkIGVwb2NocyBhZ2FpbnN0IHRoZSBzYW1lIHRocmVzaG9sZCAoc2VlIDxjb2RlPnZlcmlmeUZlZGVyYXRpb25XaXRuZXNzT25NZXNzYWdlPC9jb2RlPikuXG4gICAgICAgIDwvcD5cbiAgICAgICAge2h1YkZhYnJpY1BlZXJJZCA/IChcbiAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjVlbSAwIDAnLCBjb2xvcjogJyM0NDQnLCBmb250U2l6ZTogJzAuOWVtJyB9fT5cbiAgICAgICAgICAgICAgPHN0cm9uZz5IdWIgRmFicmljIHBlZXIgaWQ6PC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fT57aHViRmFicmljUGVlcklkfTwvY29kZT5cbiAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgIGljb249XCJjb3B5XCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ29weSBodWIgRmFicmljIHBlZXIgaWRcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiQ29weSBwdWJrZXlcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvcHlIdWJGYWJyaWNQZWVySWQoKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge2h1YklkQ29waWVkID8gPHNwYW4gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuMzVlbScsIGNvbG9yOiAnIzIxODVkMCcgfX0+Q29waWVkPC9zcGFuPiA6IG51bGx9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgY29sb3I6IGh1YkluVmFsaWRhdG9yU2V0ID8gJyMyYTZhMmEnIDogJyM4YTZkM2InLCBmb250U2l6ZTogJzAuOTVlbScgfX0+XG4gICAgICAgICAgICAgIHtodWJJblZhbGlkYXRvclNldFxuICAgICAgICAgICAgICAgID8gJ1RoaXMgaWQgaXMgaW4gdGhlIHZhbGlkYXRvciBsaXN0LCBzbyBuZXcgYmVhY29uIGVwb2NocyBjYW4gYXR0YWNoIGl0cyBTY2hub3JyIHNpZ25hdHVyZSB0byBmZWRlcmF0aW9uV2l0bmVzcy4nXG4gICAgICAgICAgICAgICAgOiAnVGhpcyBpZCBpcyBub3QgaW4gdGhlIHZhbGlkYXRvciBsaXN0OyB0aGUgYmVhY29uIHdpbGwgbm90IGF0dGFjaCBmZWRlcmF0aW9uV2l0bmVzcyB1bnRpbCBpdCBpcyBpbmNsdWRlZCBpbiBGQUJSSUNfRElTVFJJQlVURURfRkVERVJBVElPTl9WQUxJREFUT1JTIChvciBzZXR0aW5ncy5kaXN0cmlidXRlZC5mZWRlcmF0aW9uLnZhbGlkYXRvcnMpLid9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNWVtIDAgMCcsIGNvbG9yOiAnIzU1NScsIGZvbnRTaXplOiAnMC45NWVtJyB9fT5cbiAgICAgICAgICB7d2l0bmVzc0xpbmV9XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC41ZW0gMCAwJywgY29sb3I6ICcjNTU1JywgZm9udFNpemU6ICcwLjk1ZW0nIH19PlxuICAgICAgICAgIHtzY29wZUxpbmV9XG4gICAgICAgIDwvcD5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBib2R5ID0gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgY29sb3I6ICcjNDQ0JyB9fT5cbiAgICAgICAgICA8c3Ryb25nPkZlZGVyYXRpb24gbm90IGNvbmZpZ3VyZWQ8L3N0cm9uZz4gKGRpc3RyaWJ1dGVkIG1hbmlmZXN0IGhhcyBubyB2YWxpZGF0b3IgcHVia2V5cykuXG4gICAgICAgICAgPGNvZGU+U3VibWl0U2lkZWNoYWluU3RhdGVQYXRjaDwvY29kZT4gcmVxdWlyZXMgYSB2YWxpZCA8c3Ryb25nPmFkbWluIHRva2VuPC9zdHJvbmc+IG9ubHkuXG4gICAgICAgICAgQmVhY29uIGVwb2NocyBhcmUgc3RpbGwgYW5jaG9yZWQgdG8gQml0Y29pbjsgdGhlIGh1YiBzaWducyBlYWNoIGVwb2NoIDxjb2RlPk1lc3NhZ2U8L2NvZGU+IHdpdGggaXRzIGlkZW50aXR5IGtleSwgYnV0IG5vIGstb2YtbiA8Y29kZT5mZWRlcmF0aW9uV2l0bmVzczwvY29kZT4gaXMgcHJvZHVjZWQgdW50aWwgdmFsaWRhdG9ycyBhbmQgdGhyZXNob2xkIGFyZSBjb25maWd1cmVkLlxuICAgICAgICA8L3A+XG4gICAgICAgIHtodWJGYWJyaWNQZWVySWQgPyAoXG4gICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC41ZW0gMCAwJywgY29sb3I6ICcjNDQ0JywgZm9udFNpemU6ICcwLjllbScgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPkh1YiBGYWJyaWMgcGVlciBpZDwvc3Ryb25nPiAoY29tcHJlc3NlZCBwdWJrZXkgaGV4IOKAlCBpbmNsdWRlIHdoZW4geW91IGVuYWJsZSBmZWRlcmF0aW9uKTpcbiAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PntodWJGYWJyaWNQZWVySWR9PC9jb2RlPlxuICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgaWNvbj1cImNvcHlcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ29weSBodWIgRmFicmljIHBlZXIgaWRcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkNvcHkgcHVia2V5XCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY29weUh1YkZhYnJpY1BlZXJJZCgpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtodWJJZENvcGllZCA/IDxzcGFuIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjM1ZW0nLCBjb2xvcjogJyMyMTg1ZDAnIH19PkNvcGllZDwvc3Bhbj4gOiBudWxsfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNWVtIDAgMCcsIGNvbG9yOiAnIzU1NScsIGZvbnRTaXplOiAnMC45NWVtJyB9fT5cbiAgICAgICAgICB7d2l0bmVzc0xpbmV9XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC41ZW0gMCAwJywgY29sb3I6ICcjNTU1JywgZm9udFNpemU6ICcwLjk1ZW0nIH19PlxuICAgICAgICAgIHtzY29wZUxpbmV9XG4gICAgICAgIDwvcD5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPE1lc3NhZ2VcbiAgICAgIGluZm89e2ZlZC5hY3RpdmV9XG4gICAgICB3YXJuaW5nPXshZmVkLmFjdGl2ZX1cbiAgICAgIHNpemU9e3NpemV9XG4gICAgICBzdHlsZT17eyAuLi5zdHlsZSwgbWFyZ2luQm90dG9tIH19XG4gICAgICByb2xlPVwicmVnaW9uXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJGZWRlcmF0aW9uIGd1YXJhbnRlZXMgZm9yIHRoaXMgaHViXCJcbiAgICA+XG4gICAgICA8TWVzc2FnZS5IZWFkZXI+RmVkZXJhdGlvbiBndWFyYW50ZWVzICh0aGlzIGh1Yik8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAge3dhcm5pbmdzLmxlbmd0aCA+IDAgJiYgKG1hbmlmZXN0IHx8IGVwb2NoKSA/IChcbiAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45ZW0nIH19PlxuICAgICAgICAgIFBhcnRpYWwgbG9hZDoge3dhcm5pbmdzLmpvaW4oJzsgJyl9LlxuICAgICAgICA8L3A+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHtib2R5fVxuICAgICAge21hbmlmZXN0ICYmIG1hbmlmZXN0LmZlZGVyYXRpb25WYXVsdCAmJiBtYW5pZmVzdC5mZWRlcmF0aW9uVmF1bHQuYWRkcmVzcyA/IChcbiAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC41NWVtIDAgMCcsIGNvbG9yOiAnIzJjNWMyYycsIGZvbnRTaXplOiAnMC45NWVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICA8c3Ryb25nPkwxIGZlZGVyYXRpb24gdmF1bHQgKFRhcHJvb3QpOjwvc3Ryb25nPnsnICd9XG4gICAgICAgICAgPGNvZGUgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fT57bWFuaWZlc3QuZmVkZXJhdGlvblZhdWx0LmFkZHJlc3N9PC9jb2RlPlxuICAgICAgICAgIHsnIMK3ICd9XG4gICAgICAgICAgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC92YXVsdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5WYXVsdCBKU09OPC9hPlxuICAgICAgICAgIHsnIMK3ICd9XG4gICAgICAgICAgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC92YXVsdC91dHhvc1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5VVFhPczwvYT5cbiAgICAgICAgICB7bWFuaWZlc3QuZmVkZXJhdGlvblZhdWx0LmRlcG9zaXRNYXR1cml0eUJsb2NrcyAhPSBudWxsID8gKFxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgIOKAlCBkZWZhdWx0IG1hdHVyaXR5IHBvbGljeTogPHN0cm9uZz57bWFuaWZlc3QuZmVkZXJhdGlvblZhdWx0LmRlcG9zaXRNYXR1cml0eUJsb2Nrc308L3N0cm9uZz4gY29uZmlybWF0aW9ucyBiZWZvcmUgdHJlYXRpbmcgZGVwb3NpdHMgYXMgbWF0dXJlZCBmb3Igd2l0aGRyYXdhbCBwbGFubmluZy5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Ub3A6ICcwLjRlbScsIGZvbnRTaXplOiAnMC44OGVtJywgY29sb3I6ICcjNTU1JyB9fT5cbiAgICAgICAgICAgIFdpdGhkcmF3IHZpYSA8Y29kZT5QcmVwYXJlRmVkZXJhdGlvblZhdWx0V2l0aGRyYXdhbFBzYnQ8L2NvZGU+IG9uIDxjb2RlPlBPU1QgL3NlcnZpY2VzL3JwYzwvY29kZT4gKGFkbWluIHRva2VuKTogcGFzcyA8Y29kZT5mdW5kZWRUeEhleDwvY29kZT4gYW5kIDxjb2RlPmRlc3RpbmF0aW9uQWRkcmVzczwvY29kZT47IHZhbGlkYXRvcnMgY28tc2lnbiB0aGUgcmV0dXJuZWQgUFNCVCBvZmYtbm9kZS5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICkgOiBtYW5pZmVzdCAmJiBtYW5pZmVzdC5mZWRlcmF0aW9uVmF1bHQgJiYgbWFuaWZlc3QuZmVkZXJhdGlvblZhdWx0LnN0YXR1cyA9PT0gJ25vX3ZhbGlkYXRvcnMnID8gKFxuICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjU1ZW0gMCAwJywgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScgfX0+XG4gICAgICAgICAgPHN0cm9uZz5Pbi1jaGFpbiB2YXVsdDo8L3N0cm9uZz4gYWRkIHZhbGlkYXRvciBwdWJrZXlzIHRvIGRlcml2ZSBhIGRldGVybWluaXN0aWMgVGFwcm9vdCBkZXBvc2l0IGFkZHJlc3MgKDxjb2RlPkdFVCAvc2VydmljZXMvZGlzdHJpYnV0ZWQvdmF1bHQ8L2NvZGU+KS5cbiAgICAgICAgPC9wPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjZlbSAwIDAnLCBmb250U2l6ZTogJzAuODJlbScsIGNvbG9yOiAnIzc3NycgfX0+XG4gICAgICAgIFRoZSBkaXN0cmlidXRlZCBtYW5pZmVzdCZhcG9zO3MgdmFsaWRhdG9yIGxpc3QgYW5kIHRocmVzaG9sZCBtYXRjaCB3aGF0IHRoaXMgaHViIGVuZm9yY2VzIGZvciA8Y29kZT5TdWJtaXRTaWRlY2hhaW5TdGF0ZVBhdGNoPC9jb2RlPiAoZW52aXJvbm1lbnQgYW5kIHNldHRpbmdzKSwgaW5jbHVkaW5nIHdoZW4gdGhlIGJlYWNvbiBoYXMgbm90IGF0dGFjaGVkIHlldC5cbiAgICAgICAgQmVhY29uIGVwb2NocyB1c2UgdGhlIHNhbWUgc3R5bGUgb2Ygd2l0bmVzcyBvdmVyIGEgZGV0ZXJtaW5pc3RpYyBzaWduaW5nIHN0cmluZzsgc2lkZWNoYWluIHBhdGNoZXMgdXNlIDxjb2RlPnNpZ25pbmdTdHJpbmdGb3JTaWRlY2hhaW5TdGF0ZVBhdGNoPC9jb2RlPiDigJQgYm90aCB2ZXJpZmlhYmxlIG9mZmxpbmUgd2l0aCA8Y29kZT5AZmFicmljL2NvcmU8L2NvZGU+LlxuICAgICAgPC9wPlxuICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC43NWVtIDAgMCcsIGZvbnRTaXplOiAnMC45ZW0nLCBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICB7IWhpZGVTaWRlY2hhaW5OYXZMaW5rID8gKFxuICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NpZGVjaGFpbnNcIj5TdGF0ZWNoYWluPC9MaW5rPlxuICAgICAgICAgICAgeycgwrcgJ31cbiAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3MvYWRtaW4vYmVhY29uLWZlZGVyYXRpb25cIj5CZWFjb24gRmVkZXJhdGlvbjwvTGluaz5cbiAgICAgICAgeycgwrcgJ31cbiAgICAgICAgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC9tYW5pZmVzdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5EaXN0cmlidXRlZCBtYW5pZmVzdDwvYT5cbiAgICAgICAgeycgwrcgJ31cbiAgICAgICAgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC9lcG9jaFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5CZWFjb24gZXBvY2ggKEpTT04pPC9hPlxuICAgICAgICB7JyDCtyAnfVxuICAgICAgICA8YSBocmVmPVwiL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL3ZhdWx0XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPkZlZGVyYXRpb24gdmF1bHQ8L2E+XG4gICAgICAgIHsnIMK3ICd9XG4gICAgICAgIDxhIGhyZWY9XCIvc2VydmljZXMvZGlzdHJpYnV0ZWQvdmF1bHQvdXR4b3NcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+VmF1bHQgVVRYT3M8L2E+XG4gICAgICA8L3A+XG4gICAgPC9NZXNzYWdlPlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJhIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJuIiwibCIsInUiLCJmIiwibmV4dCIsImRvbmUiLCJpc0FycmF5IiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJMaW5rIiwiX3JlcXVpcmUyIiwiTWVzc2FnZSIsIkljb24iLCJCdXR0b24iLCJfcmVxdWlyZTMiLCJmZXRjaERpc3RyaWJ1dGVkSHViUG9saWN5IiwiZmVkZXJhdGlvblN1bW1hcnlGcm9tTWFuaWZlc3QiLCJiZWFjb25FcG9jaFdpdG5lc3NEZXRhaWwiLCJEaXN0cmlidXRlZEZlZGVyYXRpb25QYW5lbCIsInByb3BzIiwic2l6ZSIsInN0eWxlIiwidW5kZWZpbmVkIiwibWFyZ2luQm90dG9tIiwiaGlkZVNpZGVjaGFpbk5hdkxpbmsiLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsIl9SZWFjdCR1c2VTdGF0ZTMiLCJfUmVhY3QkdXNlU3RhdGU0IiwibWFuaWZlc3QiLCJzZXRNYW5pZmVzdCIsIl9SZWFjdCR1c2VTdGF0ZTUiLCJfUmVhY3QkdXNlU3RhdGU2IiwiZXBvY2giLCJzZXRFcG9jaCIsIl9SZWFjdCR1c2VTdGF0ZTciLCJfUmVhY3QkdXNlU3RhdGU4Iiwid2FybmluZ3MiLCJzZXRXYXJuaW5ncyIsIl9SZWFjdCR1c2VTdGF0ZTkiLCJfUmVhY3QkdXNlU3RhdGUwIiwiaHViSWRDb3BpZWQiLCJzZXRIdWJJZENvcGllZCIsImh1YkZhYnJpY1BlZXJJZCIsInRyaW0iLCJjb3B5SHViRmFicmljUGVlcklkIiwidXNlQ2FsbGJhY2siLCJuYXZpZ2F0b3IiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJ0aGVuIiwid2luZG93Iiwic2V0VGltZW91dCIsInVzZUVmZmVjdCIsImNhbmNlbGxlZCIsIm1lc3NhZ2UiLCJmZWQiLCJiZWFjb24iLCJodWJJblZhbGlkYXRvclNldCIsImFjdGl2ZSIsInZhbGlkYXRvcnMiLCJzb21lIiwidiIsInRvTG93ZXJDYXNlIiwiY3JlYXRlRWxlbWVudCIsImluZm8iLCJyb2xlIiwiSGVhZGVyIiwibWFyZ2luIiwiY29sb3IiLCJmb250U2l6ZSIsIkZyYWdtZW50IiwidG8iLCJocmVmIiwidGFyZ2V0IiwicmVsIiwid2Fybk9ubHkiLCJuZWdhdGl2ZSIsImpvaW4iLCJ3aXRuZXNzTGluZSIsImhhc0JlYWNvbiIsImxhc3RXaXRuZXNzUHJlc2VudCIsImNvbmNhdCIsInNpZ25hdHVyZUNvdW50Iiwic2NvcGVMaW5lIiwiYm9keSIsInRocmVzaG9sZCIsImNvdW50Iiwid29yZEJyZWFrIiwidHlwZSIsImJhc2ljIiwiaWNvbiIsInRpdGxlIiwib25DbGljayIsIm1hcmdpbkxlZnQiLCJ3YXJuaW5nIiwiZmVkZXJhdGlvblZhdWx0IiwiYWRkcmVzcyIsImxpbmVIZWlnaHQiLCJkZXBvc2l0TWF0dXJpdHlCbG9ja3MiLCJkaXNwbGF5IiwibWFyZ2luVG9wIiwic3RhdHVzIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/DistributedFederationPanel.js\n\n}')},"./components/DocumentList.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n// Dependencies\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link,\n useNavigate = _require.useNavigate;\n\n// Semantic UI\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Divider = _require2.Divider,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Input = _require2.Input,\n Label = _require2.Label,\n List = _require2.List,\n Loader = _require2.Loader,\n Message = _require2.Message,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! @noble/hashes/sha2.js */ "./node_modules/@noble/hashes/sha2.js"),\n sha256Hash = _require3.sha256;\n\n// Fabric Types\nvar Actor = __webpack_require__(/*! @fabric/core/types/actor */ "./node_modules/@fabric/core/types/actor.js");\nvar DistributeProposalsList = __webpack_require__(/*! ./DistributeProposalsList */ "./components/DistributeProposalsList.js");\nvar _require4 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require4.formatSatsDisplay;\nvar _require5 = __webpack_require__(/*! ../functions/hubNetworkStatus */ "./functions/hubNetworkStatus.js"),\n isHubNetworkStatusShape = _require5.isHubNetworkStatusShape,\n bridgeWebSocketLoadingHint = _require5.bridgeWebSocketLoadingHint;\nvar _require6 = __webpack_require__(/*! ../functions/hydrateHubNetworkStatusViaHttp */ "./functions/hydrateHubNetworkStatusViaHttp.js"),\n hydrateHubNetworkStatusViaHttp = _require6.hydrateHubNetworkStatusViaHttp;\nvar _require7 = __webpack_require__(/*! ../functions/hubIdentityUiHints */ "./functions/hubIdentityUiHints.js"),\n classifyHubBrowserIdentity = _require7.classifyHubBrowserIdentity;\nvar _require8 = __webpack_require__(/*! ../functions/hubServerFeatureFlags */ "./functions/hubServerFeatureFlags.js"),\n loadServerFeatureFlags = _require8.loadServerFeatureFlags;\nvar HubPagination = __webpack_require__(/*! ./HubPagination */ "./components/HubPagination.js");\nvar _require9 = __webpack_require__(/*! ../functions/hubListPagination */ "./functions/hubListPagination.js"),\n useHubListPagination = _require9.useHubListPagination;\nvar _require0 = __webpack_require__(/*! ../functions/sortDocumentsByHostOfferThenPrice */ "./functions/sortDocumentsByHostOfferThenPrice.js"),\n compareDocumentsByHostOfferThenPurchasePrice = _require0.compareDocumentsByHostOfferThenPurchasePrice;\nfunction shortHexId(value) {\n var s = String(value || \'\');\n if (!s) return \'\';\n if (s.length <= 20) return s;\n return "".concat(s.slice(0, 10), "\\u2026").concat(s.slice(-8));\n}\nfunction base64FromArrayBuffer(buffer) {\n var bytes = new Uint8Array(buffer);\n var binary = \'\';\n var chunkSize = 0x8000;\n for (var i = 0; i < bytes.length; i += chunkSize) {\n binary += String.fromCharCode.apply(null, bytes.subarray(i, i + chunkSize));\n }\n return btoa(binary);\n}\nfunction sha256Hex(buffer) {\n var bytes = sha256Hash(new Uint8Array(buffer));\n return Array.from(bytes).map(function (b) {\n return b.toString(16).padStart(2, \'0\');\n }).join(\'\');\n}\nfunction textToBase64(str) {\n var bytes = new TextEncoder().encode(str);\n var binary = \'\';\n var chunkSize = 0x8000;\n for (var i = 0; i < bytes.length; i += chunkSize) {\n binary += String.fromCharCode.apply(null, bytes.subarray(i, i + chunkSize));\n }\n return btoa(binary);\n}\nfunction jsonRpcErrText(err) {\n if (!err || _typeof(err) !== \'object\') return \'rejected\';\n if (err.message != null) return String(err.message);\n if (err.data != null) return String(err.data);\n return \'rejected\';\n}\nfunction DocumentsPage(props) {\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n file = _React$useState2[0],\n setFile = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n meta = _React$useState4[0],\n setMeta = _React$useState4[1];\n var _React$useState5 = React.useState(false),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n busy = _React$useState6[0],\n setBusy = _React$useState6[1];\n var _React$useState7 = React.useState(null),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n error = _React$useState8[0],\n setError = _React$useState8[1];\n var _React$useState9 = React.useState(\'\'),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n createDocName = _React$useState0[0],\n setCreateDocName = _React$useState0[1];\n var _React$useState1 = React.useState(\'\'),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n createDocContent = _React$useState10[0],\n setCreateDocContent = _React$useState10[1];\n var _React$useState11 = React.useState(false),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n showCreateDoc = _React$useState12[0],\n setShowCreateDoc = _React$useState12[1];\n var _React$useState13 = React.useState(null),\n _React$useState14 = _slicedToArray(_React$useState13, 2),\n recentDocId = _React$useState14[0],\n setRecentDocId = _React$useState14[1];\n var _React$useState15 = React.useState(0),\n _React$useState16 = _slicedToArray(_React$useState15, 2),\n setNetworkStatusTick = _React$useState16[1];\n var _React$useState17 = React.useState(null),\n _React$useState18 = _slicedToArray(_React$useState17, 2),\n catalogHttpFallbackError = _React$useState18[0],\n setCatalogHttpFallbackError = _React$useState18[1];\n var _React$useState19 = React.useState({}),\n _React$useState20 = _slicedToArray(_React$useState19, 2),\n docsState = _React$useState20[0],\n setDocsState = _React$useState20[1];\n var _React$useState21 = React.useState({}),\n _React$useState22 = _slicedToArray(_React$useState21, 2),\n distributeProposalsState = _React$useState22[0],\n setDistributeProposalsState = _React$useState22[1];\n var navigate = useNavigate();\n React.useEffect(function () {\n var bump = function bump() {\n return setNetworkStatusTick(function (t) {\n return t + 1;\n });\n };\n if (typeof window === \'undefined\') return undefined;\n window.addEventListener(\'networkStatusUpdate\', bump);\n return function () {\n return window.removeEventListener(\'networkStatusUpdate\', bump);\n };\n }, []);\n\n // Pull published index from hub networkStatus (global store = source of truth for published state).\n var bridgeRef = props.bridgeRef;\n var current = bridgeRef && bridgeRef.current;\n var hasEncryptionKey = !!(current && typeof current.hasDocumentEncryptionKey === \'function\' && current.hasDocumentEncryptionKey());\n var networkStatus = current && (current.networkStatus || current.lastNetworkStatus);\n var hasNetworkSnapshot = isHubNetworkStatusShape(networkStatus);\n React.useEffect(function () {\n if (hasNetworkSnapshot) setCatalogHttpFallbackError(null);\n }, [hasNetworkSnapshot]);\n var publishedRaw = networkStatus && networkStatus.publishedDocuments;\n var indexed = !hasNetworkSnapshot ? null : publishedRaw && _typeof(publishedRaw) === \'object\' ? publishedRaw : {};\n var fabricPeerId = networkStatus && networkStatus.fabricPeerId ? String(networkStatus.fabricPeerId) : null;\n var documentMarket = networkStatus && networkStatus.documentMarket && _typeof(networkStatus.documentMarket) === \'object\' ? networkStatus.documentMarket : null;\n var documentMarketAccumulate = !!(documentMarket && documentMarket.accumulatePeerInventories);\n var serverFlags = loadServerFeatureFlags(current);\n var distributeEnabled = !!serverFlags.distribute;\n var documentsLoadingSubtext = !current ? \'Connecting to the hub (WebSocket bridge)…\' : bridgeWebSocketLoadingHint(current) || \'Waiting for network status from the hub (published catalog).\';\n React.useEffect(function () {\n var handler = function handler(event) {\n var gs = event && event.detail && event.detail.globalState;\n if (gs && gs.documents) setDocsState(gs.documents);\n };\n window.addEventListener(\'globalStateUpdate\', handler);\n return function () {\n return window.removeEventListener(\'globalStateUpdate\', handler);\n };\n }, []);\n React.useEffect(function () {\n var bridgeInstance = bridgeRef && bridgeRef.current;\n if (bridgeInstance && bridgeInstance.globalState && bridgeInstance.globalState.documents) {\n setDocsState(bridgeInstance.globalState.documents);\n }\n }, [bridgeRef]);\n\n // Briefly highlight the most recently added document.\n React.useEffect(function () {\n if (!recentDocId) return;\n var timer = setTimeout(function () {\n return setRecentDocId(null);\n }, 1500);\n return function () {\n return clearTimeout(timer);\n };\n }, [recentDocId]);\n React.useEffect(function () {\n if (typeof props.onListDocuments !== \'function\') return undefined;\n var cancelled = false;\n queueMicrotask(function () {\n if (!cancelled) props.onListDocuments();\n });\n return function () {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // When WebSocket snapshots are slow, hydrate catalog + hub document index via HTTP (same origin).\n React.useEffect(function () {\n if (hasNetworkSnapshot) return undefined;\n var cancelled = false;\n var t = setTimeout(function () {\n if (cancelled) return;\n var bridge = props.bridgeRef && props.bridgeRef.current;\n var origin = typeof window !== \'undefined\' && window.location && window.location.origin ? window.location.origin : \'\';\n if (!bridge || !origin) return;\n if (typeof bridge.applyHubNetworkStatusPayload !== \'function\' || typeof bridge.mergeListDocumentsRpcResult !== \'function\') {\n return;\n }\n var headers = {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n };\n var parseRpc = function parseRpc(r) {\n return r.json()["catch"](function () {\n return null;\n });\n };\n Promise.all([hydrateHubNetworkStatusViaHttp(bridge, origin).then(function (applied) {\n return {\n appliedViaHydrate: applied\n };\n }), fetch("".concat(origin, "/services/rpc"), {\n method: \'POST\',\n headers: headers,\n body: JSON.stringify({\n jsonrpc: \'2.0\',\n id: 2,\n method: \'ListDocuments\',\n params: []\n })\n }).then(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(r) {\n var _t, _t2, _t3;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _t = r.ok;\n _t2 = r.status;\n _context.n = 1;\n return parseRpc(r);\n case 1:\n _t3 = _context.v;\n return _context.a(2, {\n ok: _t,\n status: _t2,\n body: _t3\n });\n }\n }, _callee);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }())]).then(function (_ref2) {\n var _ref3 = _slicedToArray(_ref2, 2),\n ns = _ref3[0],\n list = _ref3[1];\n if (cancelled) return;\n var nsApplied = !!(ns && ns.appliedViaHydrate);\n var listBody = list && list.body;\n var listApplied = false;\n if (listBody && listBody.result && typeof bridge.mergeListDocumentsRpcResult === \'function\') {\n listApplied = !!bridge.mergeListDocumentsRpcResult(listBody.result);\n }\n var listErr = listBody && listBody.error;\n var httpBad = !list || !list.ok;\n var parts = [];\n if (listErr) parts.push("Document list: ".concat(jsonRpcErrText(listErr)));\n if (!listErr && list && !list.ok) parts.push("Document list: HTTP ".concat(list.status));\n if (!nsApplied && !listApplied) {\n parts.push(\'Network status: could not hydrate via HTTP (hub down or unexpected GetNetworkStatus shape)\');\n }\n if (parts.length) {\n setCatalogHttpFallbackError(parts.join(\' · \'));\n } else if (!listErr && listBody && !listApplied && listBody.result == null) {\n setCatalogHttpFallbackError(httpBad ? \'Hub did not return JSON-RPC results for catalog hydration. Check /services/rpc.\' : \'Hub returned empty responses for the document list.\');\n } else if (!listErr && !listApplied && listBody && listBody.result != null) {\n setCatalogHttpFallbackError(\'Document list response could not be merged (unexpected shape).\');\n }\n })["catch"](function (err) {\n if (cancelled) return;\n setCatalogHttpFallbackError(err && err.message ? err.message : \'Network error while loading catalog from hub.\');\n });\n }, 2500);\n return function () {\n cancelled = true;\n clearTimeout(t);\n };\n }, [hasNetworkSnapshot, props.bridgeRef]);\n\n // Unified model: all docs in documents store; hub index = published refs\n var allDocs = Object.values(docsState || {}).filter(function (d) {\n return d && d.id;\n });\n var docsById = {};\n\n // Start with all local documents (private by default).\n var _iterator = _createForOfIteratorHelper(allDocs),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var d = _step.value;\n docsById[d.id] = _objectSpread(_objectSpread({}, d), {}, {\n isLocal: d.source === \'peer\' ? false : d.local !== false\n });\n }\n\n // Merge in published index entries and mark them as published.\n // Prefer existing local Actor IDs (opaque ids) that share the same sha256,\n // so the same document doesn\'t appear twice (once by Actor id, once by sha).\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n if (indexed && _typeof(indexed) === \'object\') {\n var _loop = function _loop() {\n var value = _Object$values[_i];\n if (!value || !value.id) return 1; // continue\n var sha = value.sha256 || value.id;\n var targetId = value.id;\n if (sha) {\n var localMatch = allDocs.find(function (d) {\n var dSha = d.sha256 || d.sha || d.id;\n return dSha === sha;\n });\n if (localMatch && localMatch.id) {\n targetId = localMatch.id;\n }\n }\n var existing = docsById[targetId] || {};\n docsById[targetId] = _objectSpread(_objectSpread(_objectSpread({}, existing), value), {}, {\n id: targetId,\n isPublished: true\n });\n };\n for (var _i = 0, _Object$values = Object.values(indexed); _i < _Object$values.length; _i++) {\n if (_loop()) continue;\n }\n }\n var docs = Object.values(docsById).filter(function (d) {\n return d && d.id;\n }).sort(function (a, b) {\n return compareDocumentsByHostOfferThenPurchasePrice(a, b, distributeProposalsState);\n });\n var docsResetKey = "".concat(docs.length, ":").concat(docs[0] && docs[0].id, ":").concat(docs[docs.length - 1] && docs[docs.length - 1].id);\n var _useHubListPagination = useHubListPagination(docs, docsResetKey),\n docsSlice = _useHubListPagination.slice,\n docsListActivePage = _useHubListPagination.page,\n docsTotalPages = _useHubListPagination.totalPages,\n docsRangeFrom = _useHubListPagination.rangeFrom,\n docsRangeTo = _useHubListPagination.rangeTo,\n docsListTotal = _useHubListPagination.total,\n setDocsListPage = _useHubListPagination.setPage;\n var onPickFile = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(f) {\n var buffer, sha256, contentBase64, payload, actor, _meta, _t4;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n setError(null);\n setFile(f);\n setMeta(null);\n if (!(!f || !hasEncryptionKey)) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2);\n case 1:\n _context2.p = 1;\n setBusy(true);\n _context2.n = 2;\n return f.arrayBuffer();\n case 2:\n buffer = _context2.v;\n sha256 = sha256Hex(buffer);\n contentBase64 = base64FromArrayBuffer(buffer); // Wrap file metadata in a Fabric Actor so the public document ID\n // is an opaque Actor id, not the raw sha256 hash.\n payload = {\n sha256: sha256,\n name: f.name,\n mime: f.type || \'application/octet-stream\',\n size: f.size\n };\n actor = new Actor({\n content: payload\n });\n _meta = {\n id: actor.id,\n sha256: sha256,\n name: payload.name,\n mime: payload.mime,\n size: payload.size,\n contentBase64: contentBase64\n };\n if (typeof props.onAddLocalDocument === \'function\') {\n props.onAddLocalDocument(_meta);\n }\n if (typeof props.onCreateDocument === \'function\') {\n props.onCreateDocument(_meta);\n }\n setRecentDocId(_meta.id);\n setFile(null);\n // Navigate directly to the new document detail view\n navigate("/documents/".concat(encodeURIComponent(_meta.id)));\n _context2.n = 4;\n break;\n case 3:\n _context2.p = 3;\n _t4 = _context2.v;\n setError(_t4 && _t4.message ? _t4.message : String(_t4));\n case 4:\n _context2.p = 4;\n setBusy(false);\n return _context2.f(4);\n case 5:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 3, 4, 5]]);\n }));\n return function onPickFile(_x2) {\n return _ref4.apply(this, arguments);\n };\n }();\n var onCreateDocument = function onCreateDocument() {\n if (!hasEncryptionKey || !createDocContent.trim()) return;\n setError(null);\n try {\n var text = createDocContent.trim();\n var encoder = new TextEncoder();\n var buffer = encoder.encode(text);\n var sha256 = sha256Hex(buffer);\n var contentBase64 = textToBase64(text);\n var name = (createDocName || \'Untitled\').trim() || \'Untitled\';\n var payload = {\n sha256: sha256,\n name: name,\n mime: \'text/plain\',\n size: buffer.length\n };\n var actor = new Actor({\n content: payload\n });\n var _meta2 = {\n id: actor.id,\n sha256: sha256,\n name: payload.name,\n mime: payload.mime,\n size: payload.size,\n contentBase64: contentBase64\n };\n if (typeof props.onAddLocalDocument === \'function\') {\n props.onAddLocalDocument(_meta2);\n }\n if (typeof props.onCreateDocument === \'function\') {\n props.onCreateDocument(_meta2);\n }\n setRecentDocId(_meta2.id);\n setCreateDocName(\'\');\n setCreateDocContent(\'\');\n setShowCreateDoc(false);\n // Navigate directly to the new document detail view\n navigate("/documents/".concat(encodeURIComponent(_meta2.id)));\n } catch (e) {\n setError(e && e.message ? e.message : String(e));\n }\n };\n return /*#__PURE__*/React.createElement("fabric-documents", {\n "class": "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.75em\',\n flexWrap: \'wrap\',\n marginBottom: \'0.25em\'\n },\n role: "banner"\n }, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n as: Link,\n to: "/",\n "aria-label": "Back to home"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Home"), /*#__PURE__*/React.createElement("div", {\n style: {\n position: \'relative\',\n margin: 0,\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "documents-page-heading",\n style: {\n margin: 0\n }\n }, "Documents"), /*#__PURE__*/React.createElement("span", {\n style: {\n position: \'absolute\',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: \'hidden\',\n clip: \'rect(0, 0, 0, 0)\',\n whiteSpace: \'nowrap\',\n border: 0\n }\n }, docs.length, " documents in this hub node"), /*#__PURE__*/React.createElement(Label, {\n size: "small",\n title: "Documents in this hub node",\n style: {\n verticalAlign: \'middle\'\n },\n "aria-hidden": "true"\n }, docs.length))), /*#__PURE__*/React.createElement(Divider, null), catalogHttpFallbackError && !hasNetworkSnapshot && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n },\n onDismiss: function onDismiss() {\n return setCatalogHttpFallbackError(null);\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Could not fully load hub catalog over HTTP"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#333\'\n }\n }, catalogHttpFallbackError), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n fontSize: \'0.9em\',\n color: \'#666\'\n }\n }, "The WebSocket session may still sync in a moment \\u2014 or reload the page. JSON-RPC:", \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, "/services/rpc"))), !hasEncryptionKey && function () {\n var idMode = classifyHubBrowserIdentity(props.identity || {});\n var title = idMode === \'watch_only\' ? \'Signing key not loaded (watch-only)\' : idMode === \'password_locked\' ? \'Private key not loaded\' : \'Private key not loaded\';\n return /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n fontWeight: 600,\n color: \'#333\'\n }\n }, title), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\'\n }\n }, idMode === \'watch_only\' ? /*#__PURE__*/React.createElement(React.Fragment, null, "This browser only has a public key. To create or upload ", /*#__PURE__*/React.createElement("strong", null, "encrypted"), " documents, import a full key: top-bar identity menu or ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), " \\u2192 ", /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), ".", \' \') : idMode === \'password_locked\' ? /*#__PURE__*/React.createElement(React.Fragment, null, "Use the top-bar ", /*#__PURE__*/React.createElement("strong", null, "Locked"), " control (encryption password) or ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), " \\u2192 ", /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), ", then ", /*#__PURE__*/React.createElement("strong", null, "Unlock private key"), ", to create or upload encrypted documents.", \' \') : /*#__PURE__*/React.createElement(React.Fragment, null, "Create or restore a key: ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), " \\u2192 ", /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), " or ", /*#__PURE__*/React.createElement("strong", null, "Log in"), " in the top bar. Then you can create or upload encrypted documents.", \' \'), /*#__PURE__*/React.createElement(Link, {\n to: "/settings/bitcoin-wallet"\n }, "Bitcoin wallet & derivation"), " explains how the same identity drives Hub L1 addresses. For local dev use the same phrase as the hub (", /*#__PURE__*/React.createElement("code", null, "FABRIC_SEED"), " if set, else ", /*#__PURE__*/React.createElement("code", null, "FABRIC_MNEMONIC"), "): ", /*#__PURE__*/React.createElement("code", null, "window.FABRIC_DEV_BROWSER_SEED"), " in ", /*#__PURE__*/React.createElement("code", null, "assets/config.local.js"), ", optional ", /*#__PURE__*/React.createElement("code", null, "window.FABRIC_DEV_BROWSER_PASSPHRASE"), " for BIP39 extension, or hub ", /*#__PURE__*/React.createElement("code", null, "FABRIC_DEV_PUSH_BROWSER_IDENTITY=1"), " (never on exposed hosts). For RPC-only automation see ", /*#__PURE__*/React.createElement("code", null, "npm run test:e2e-document-purchase"), "."));\n }(), hasEncryptionKey && /*#__PURE__*/React.createElement(Segment, {\n loading: busy\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Add content"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Select a file or create a document from text. ", /*#__PURE__*/React.createElement("strong", null, "Publish"), " with a price seals content (ciphertext-at-rest); buyers pay an L1 HTLC that reveals the decryption key (Peers inventory or Claim & Unlock).", distributeEnabled ? /*#__PURE__*/React.createElement(React.Fragment, null, \' \', /*#__PURE__*/React.createElement("strong", null, "Distribute"), " (optional storage bonds) needs an on-chain invoice \\u2014 open a document and follow ", /*#__PURE__*/React.createElement("strong", null, "Distribute"), ", then pay from", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin"\n }, "Bitcoin"), ".") : null), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return setShowCreateDoc(function (v) {\n return !v;\n });\n },\n style: {\n marginBottom: showCreateDoc ? \'1em\' : 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: showCreateDoc ? \'minus\' : \'plus\'\n }), "Create Document"), showCreateDoc && /*#__PURE__*/React.createElement(Form, {\n style: {\n marginTop: \'0.75em\',\n maxWidth: 560\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Name"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "Document name",\n value: createDocName,\n onChange: function onChange(e) {\n return setCreateDocName(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Content"), /*#__PURE__*/React.createElement(Form.TextArea, {\n placeholder: "Enter your text here\\u2026",\n value: createDocContent,\n onChange: function onChange(e) {\n return setCreateDocContent(e.target.value);\n },\n rows: 6,\n style: {\n fontFamily: \'monospace\'\n }\n })), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n primary: true,\n onClick: onCreateDocument,\n disabled: !createDocContent.trim()\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "save"\n }), "Create"), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n onClick: function onClick() {\n setShowCreateDoc(false);\n setCreateDocName(\'\');\n setCreateDocContent(\'\');\n }\n }, "Cancel")), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: showCreateDoc ? \'1em\' : 0\n }\n }, /*#__PURE__*/React.createElement("label", {\n style: {\n display: \'block\',\n marginBottom: \'0.5em\',\n color: \'#666\'\n }\n }, "Or add a file:"), /*#__PURE__*/React.createElement(Input, {\n type: "file",\n onChange: function onChange(e) {\n return onPickFile(e && e.target && e.target.files ? e.target.files[0] : null);\n },\n disabled: busy || !hasEncryptionKey\n })), error && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n style: {\n marginTop: \'1em\'\n },\n onDismiss: function onDismiss() {\n return setError(null);\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Could not add document"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, error))), distributeEnabled ? /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "gift"\n }), "Offers"), /*#__PURE__*/React.createElement(DistributeProposalsList, {\n bridgeRef: props.bridgeRef,\n embedded: true\n })) : null, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Documents"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n icon: true,\n labelPosition: "left",\n basic: true,\n onClick: function onClick() {\n return typeof props.onListDocuments === \'function\' && props.onListDocuments();\n },\n disabled: busy\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh"), documentMarketAccumulate && /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n icon: true,\n labelPosition: "left",\n basic: true,\n onClick: function onClick() {\n var bridge = props.bridgeRef && props.bridgeRef.current;\n if (bridge && typeof bridge.sendRefreshDocumentMarketRequest === \'function\') {\n bridge.sendRefreshDocumentMarketRequest();\n }\n },\n disabled: busy,\n title: "Request document inventories from connected Fabric peers"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "exchange"\n }), "Query peer inventories"), documentMarketAccumulate && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Document Market"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, "This hub accumulates peer inventories", documentMarket.republishWithMarkup ? " and republishes held files at +".concat(Number(documentMarket.markupBps) / 100, "%") + (Number(documentMarket.markupSats) > 0 ? " + ".concat(documentMarket.markupSats, " sats") : \'\') + \' markup\' : \'\', ". Outbound inventory still lists only files this node can deliver.", documentMarket.offerCount != null ? " ".concat(documentMarket.offerCount, " remote offer").concat(documentMarket.offerCount === 1 ? \'\' : \'s\', " stored.") : \'\')), !hasNetworkSnapshot && allDocs.length === 0 ? /*#__PURE__*/React.createElement(Segment, {\n placeholder: true,\n style: {\n marginTop: \'1em\',\n minHeight: \'20vh\',\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'center\'\n }\n }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: "centered"\n }), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1em\',\n textAlign: \'center\'\n }\n }, "Loading documents\\u2026", /*#__PURE__*/React.createElement(Header.Subheader, null, documentsLoadingSubtext)))) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true,\n style: {\n marginTop: \'1em\'\n }\n }, docsSlice.map(function (doc) {\n var labels = [];\n if (doc.isPublished) {\n labels.push(/*#__PURE__*/React.createElement(Label, {\n key: "published",\n size: "mini",\n color: "blue",\n style: {\n marginLeft: \'0.5em\'\n },\n title: "Published to hub"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bullhorn"\n }), "Published"));\n } else if (doc.isLocal) {\n labels.push(/*#__PURE__*/React.createElement(Label, {\n key: "local",\n size: "mini",\n color: "grey",\n style: {\n marginLeft: \'0.5em\'\n },\n title: "Private (local to this browser)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "lock"\n }), "Private"));\n }\n if (doc.contentEncrypted) {\n labels.push(/*#__PURE__*/React.createElement(Label, {\n key: "encrypted",\n size: "mini",\n color: "green",\n style: {\n marginLeft: \'0.25em\'\n },\n title: "Encrypted with your key"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield"\n }), "Encrypted"));\n }\n var isBitcoinBlockDoc = doc.mime === \'application/x-fabric-bitcoin-block+json\' || String(doc.name || \'\').startsWith(\'Bitcoin block \');\n if (isBitcoinBlockDoc) {\n labels.push(/*#__PURE__*/React.createElement(Label, {\n key: "bitcoin-block",\n size: "mini",\n color: "orange",\n style: {\n marginLeft: \'0.25em\'\n },\n title: "Auto-published L1 block summary from this hub"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cube"\n }), "L1 block"));\n }\n var isBitcoinTxDoc = doc.mime === \'application/x-fabric-bitcoin-transaction+json\' || String(doc.name || \'\').startsWith(\'Bitcoin tx \');\n if (isBitcoinTxDoc) {\n labels.push(/*#__PURE__*/React.createElement(Label, {\n key: "bitcoin-tx",\n size: "mini",\n color: "orange",\n style: {\n marginLeft: \'0.25em\'\n },\n title: "Auto-published L1 transaction from an indexed block (optional; pruned nodes may drop from local inventory)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "exchange"\n }), "L1 tx"));\n }\n if (doc.storageContractId) {\n labels.push(/*#__PURE__*/React.createElement(Label, {\n key: "storage",\n as: Link,\n to: "/contracts/".concat(encodeURIComponent(doc.storageContractId)),\n size: "mini",\n color: "purple",\n style: {\n marginLeft: \'0.25em\'\n },\n title: "Pay-to-distribute storage contract (L1 bonded)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cloud"\n }), "Storage"));\n }\n if (doc.storageContractId && doc.storageL1Status && _typeof(doc.storageL1Status) === \'object\') {\n var st = doc.storageL1Status;\n var conf = st.confirmations != null ? Number(st.confirmations) : null;\n var payColor = \'grey\';\n var payText = \'\';\n var payTitle = \'Storage contract funding tx (from hub / bitcoind)\';\n if (conf != null && !Number.isNaN(conf) && conf > 0) {\n payColor = \'green\';\n payText = "".concat(conf, " confirmation").concat(conf === 1 ? \'\' : \'s\');\n } else if (st.inMempool) {\n payColor = \'yellow\';\n payText = \'Mempool\';\n payTitle = \'Funding tx in mempool (0 confirmations)\';\n } else if (conf === 0) {\n payColor = \'yellow\';\n payText = \'0 confirmations\';\n } else {\n payText = \'L1 n/a\';\n payTitle = \'Could not load tx from Bitcoin RPC\';\n }\n labels.push(/*#__PURE__*/React.createElement(Label, {\n key: "storage-l1",\n size: "mini",\n color: payColor,\n style: {\n marginLeft: \'0.25em\'\n },\n title: payTitle\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), payText));\n }\n if (doc.source === \'peer\' && !doc.isPublished && !doc.isLocal) {\n labels.push(/*#__PURE__*/React.createElement(Label, {\n key: "peer-offer",\n size: "mini",\n color: "teal",\n style: {\n marginLeft: \'0.25em\'\n },\n title: "Listed by a connected peer; this hub does not hold the file yet"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "share alternate"\n }), "Peer offer"));\n }\n if (doc.bestPeerPriceSats != null && Number(doc.bestPeerPriceSats) >= 0 && doc.source !== \'peer\') {\n labels.push(/*#__PURE__*/React.createElement(Label, {\n key: "peer-price",\n size: "mini",\n basic: true,\n style: {\n marginLeft: \'0.25em\'\n },\n title: "Cheapest remote inventory price"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "exchange"\n }), "peer ", formatSatsDisplay(doc.bestPeerPriceSats), " sats"));\n }\n if (doc.isPublished && doc.purchasePriceSats != null && Number(doc.purchasePriceSats) > 0) {\n labels.push(/*#__PURE__*/React.createElement(Label, {\n key: "priced",\n size: "mini",\n color: "orange",\n style: {\n marginLeft: \'0.25em\'\n },\n title: "Listed L1 price (inventory HTLC)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), formatSatsDisplay(doc.purchasePriceSats), " sats"));\n }\n var isRecent = recentDocId && recentDocId === doc.id;\n var itemStyle = isRecent ? {\n background: \'#f5f8ff\',\n transform: \'scale(1.01)\',\n transition: \'background 0.4s ease, transform 0.2s ease\'\n } : {\n transition: \'background 0.4s ease, transform 0.2s ease\'\n };\n return /*#__PURE__*/React.createElement(List.Item, {\n key: doc.id,\n style: itemStyle\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, /*#__PURE__*/React.createElement(Link, {\n to: "/documents/".concat(encodeURIComponent(doc.id))\n }, doc.name || doc.id), labels), /*#__PURE__*/React.createElement(List.Description, {\n style: {\n color: \'#666\'\n }\n }, doc.mime || \'application/octet-stream\', " \\u2014 ", doc.size != null ? "".concat(doc.size, " bytes") : \'\', doc.created ? " \\u2014 ".concat(new Date(doc.created).toLocaleString()) : \'\', (doc.lineage || doc.id) && /*#__PURE__*/React.createElement("span", {\n title: "Fabric document id for the content creator (lineage)"\n }, \' — \', "author ", /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.92em\'\n }\n }, shortHexId(doc.lineage || doc.id))), doc.isPublished && fabricPeerId && /*#__PURE__*/React.createElement("span", {\n title: "Fabric peer id of the hub hosting the published index"\n }, \' — \', "publisher ", /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.92em\'\n }\n }, shortHexId(fabricPeerId))), !doc.storageContractId && doc.isPublished && /*#__PURE__*/React.createElement("span", {\n title: "Published but no bonded storage contract yet"\n }, " \\u2014 not replicated"))));\n }), docs.length === 0 && /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Description, {\n style: {\n color: \'#666\'\n }\n }, "No documents yet.")))), docsListTotal > 0 && /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontSize: \'0.88em\'\n }\n }, "Showing ", docsRangeFrom, "\\u2013", docsRangeTo, " of ", docsListTotal), /*#__PURE__*/React.createElement(HubPagination, {\n activePage: docsListActivePage,\n totalPages: docsTotalPages,\n onPageChange: function onPageChange(e, d) {\n return setDocsListPage(d.activePage);\n },\n disabled: busy,\n style: {\n marginTop: 0,\n flex: \'1 1 auto\',\n minWidth: 0\n }\n }))))));\n}\nmodule.exports = DocumentsPage;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZTtJQUMzQjhILFlBQVksRUFBRSxTQUFkQSxZQUFZQSxDQUFHOWEsQ0FBQyxFQUFFMEQsQ0FBQztNQUFBLE9BQUs4UCxlQUFlLENBQUM5UCxDQUFDLENBQUNtWCxVQUFVLENBQUM7SUFBQSxDQUFDO0lBQ3REakQsUUFBUSxFQUFFeE4sSUFBSztJQUNmNEssS0FBSyxFQUFFO01BQUVrQyxTQUFTLEVBQUUsQ0FBQztNQUFFNkQsSUFBSSxFQUFFLFVBQVU7TUFBRUMsUUFBUSxFQUFFO0lBQUU7RUFBRSxDQUN4RCxDQUNFLENBRUwsQ0FFRyxDQUNGLENBQ08sQ0FBQztBQUV2QjtBQUVBQyxNQUFNLENBQUNDLE9BQU8sR0FBRzNSLGFBQWEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvRG9jdW1lbnRMaXN0LmpzPzk3MWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBEZXBlbmRlbmNpZXNcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluaywgdXNlTmF2aWdhdGUgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcblxuLy8gU2VtYW50aWMgVUlcbmNvbnN0IHtcbiAgQnV0dG9uLFxuICBEaXZpZGVyLFxuICBGb3JtLFxuICBIZWFkZXIsXG4gIEljb24sXG4gIElucHV0LFxuICBMYWJlbCxcbiAgTGlzdCxcbiAgTG9hZGVyLFxuICBNZXNzYWdlLFxuICBTZWdtZW50XG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcblxuY29uc3QgeyBzaGEyNTY6IHNoYTI1Nkhhc2ggfSA9IHJlcXVpcmUoJ0Bub2JsZS9oYXNoZXMvc2hhMi5qcycpO1xuXG4vLyBGYWJyaWMgVHlwZXNcbmNvbnN0IEFjdG9yID0gcmVxdWlyZSgnQGZhYnJpYy9jb3JlL3R5cGVzL2FjdG9yJyk7XG5jb25zdCBEaXN0cmlidXRlUHJvcG9zYWxzTGlzdCA9IHJlcXVpcmUoJy4vRGlzdHJpYnV0ZVByb3Bvc2Fsc0xpc3QnKTtcbmNvbnN0IHsgZm9ybWF0U2F0c0Rpc3BsYXkgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mb3JtYXRTYXRzJyk7XG5jb25zdCB7IGlzSHViTmV0d29ya1N0YXR1c1NoYXBlLCBicmlkZ2VXZWJTb2NrZXRMb2FkaW5nSGludCB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1Yk5ldHdvcmtTdGF0dXMnKTtcbmNvbnN0IHsgaHlkcmF0ZUh1Yk5ldHdvcmtTdGF0dXNWaWFIdHRwIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHlkcmF0ZUh1Yk5ldHdvcmtTdGF0dXNWaWFIdHRwJyk7XG5jb25zdCB7IGNsYXNzaWZ5SHViQnJvd3NlcklkZW50aXR5IH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViSWRlbnRpdHlVaUhpbnRzJyk7XG5jb25zdCB7IGxvYWRTZXJ2ZXJGZWF0dXJlRmxhZ3MgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJTZXJ2ZXJGZWF0dXJlRmxhZ3MnKTtcbmNvbnN0IEh1YlBhZ2luYXRpb24gPSByZXF1aXJlKCcuL0h1YlBhZ2luYXRpb24nKTtcbmNvbnN0IHsgdXNlSHViTGlzdFBhZ2luYXRpb24gfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJMaXN0UGFnaW5hdGlvbicpO1xuY29uc3QgeyBjb21wYXJlRG9jdW1lbnRzQnlIb3N0T2ZmZXJUaGVuUHVyY2hhc2VQcmljZSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3NvcnREb2N1bWVudHNCeUhvc3RPZmZlclRoZW5QcmljZScpO1xuXG5mdW5jdGlvbiBzaG9ydEhleElkICh2YWx1ZSkge1xuICBjb25zdCBzID0gU3RyaW5nKHZhbHVlIHx8ICcnKTtcbiAgaWYgKCFzKSByZXR1cm4gJyc7XG4gIGlmIChzLmxlbmd0aCA8PSAyMCkgcmV0dXJuIHM7XG4gIHJldHVybiBgJHtzLnNsaWNlKDAsIDEwKX3igKYke3Muc2xpY2UoLTgpfWA7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NEZyb21BcnJheUJ1ZmZlciAoYnVmZmVyKSB7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgbGV0IGJpbmFyeSA9ICcnO1xuICBjb25zdCBjaHVua1NpemUgPSAweDgwMDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IGNodW5rU2l6ZSkge1xuICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGJ5dGVzLnN1YmFycmF5KGksIGkgKyBjaHVua1NpemUpKTtcbiAgfVxuICByZXR1cm4gYnRvYShiaW5hcnkpO1xufVxuXG5mdW5jdGlvbiBzaGEyNTZIZXggKGJ1ZmZlcikge1xuICBjb25zdCBieXRlcyA9IHNoYTI1Nkhhc2gobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSk7XG4gIHJldHVybiBBcnJheS5mcm9tKGJ5dGVzKS5tYXAoKGIpID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiB0ZXh0VG9CYXNlNjQgKHN0cikge1xuICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIpO1xuICBsZXQgYmluYXJ5ID0gJyc7XG4gIGNvbnN0IGNodW5rU2l6ZSA9IDB4ODAwMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gY2h1bmtTaXplKSB7XG4gICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYnl0ZXMuc3ViYXJyYXkoaSwgaSArIGNodW5rU2l6ZSkpO1xuICB9XG4gIHJldHVybiBidG9hKGJpbmFyeSk7XG59XG5cbmZ1bmN0aW9uIGpzb25ScGNFcnJUZXh0IChlcnIpIHtcbiAgaWYgKCFlcnIgfHwgdHlwZW9mIGVyciAhPT0gJ29iamVjdCcpIHJldHVybiAncmVqZWN0ZWQnO1xuICBpZiAoZXJyLm1lc3NhZ2UgIT0gbnVsbCkgcmV0dXJuIFN0cmluZyhlcnIubWVzc2FnZSk7XG4gIGlmIChlcnIuZGF0YSAhPSBudWxsKSByZXR1cm4gU3RyaW5nKGVyci5kYXRhKTtcbiAgcmV0dXJuICdyZWplY3RlZCc7XG59XG5cbmZ1bmN0aW9uIERvY3VtZW50c1BhZ2UgKHByb3BzKSB7XG4gIGNvbnN0IFtmaWxlLCBzZXRGaWxlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbWV0YSwgc2V0TWV0YV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2J1c3ksIHNldEJ1c3ldID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbY3JlYXRlRG9jTmFtZSwgc2V0Q3JlYXRlRG9jTmFtZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtjcmVhdGVEb2NDb250ZW50LCBzZXRDcmVhdGVEb2NDb250ZW50XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3Nob3dDcmVhdGVEb2MsIHNldFNob3dDcmVhdGVEb2NdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcmVjZW50RG9jSWQsIHNldFJlY2VudERvY0lkXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbLCBzZXROZXR3b3JrU3RhdHVzVGlja10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2NhdGFsb2dIdHRwRmFsbGJhY2tFcnJvciwgc2V0Q2F0YWxvZ0h0dHBGYWxsYmFja0Vycm9yXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbZG9jc1N0YXRlLCBzZXREb2NzU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICBjb25zdCBbZGlzdHJpYnV0ZVByb3Bvc2Fsc1N0YXRlLCBzZXREaXN0cmlidXRlUHJvcG9zYWxzU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuXG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGJ1bXAgPSAoKSA9PiBzZXROZXR3b3JrU3RhdHVzVGljaygodCkgPT4gdCArIDEpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbmV0d29ya1N0YXR1c1VwZGF0ZScsIGJ1bXApO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbmV0d29ya1N0YXR1c1VwZGF0ZScsIGJ1bXApO1xuICB9LCBbXSk7XG5cbiAgLy8gUHVsbCBwdWJsaXNoZWQgaW5kZXggZnJvbSBodWIgbmV0d29ya1N0YXR1cyAoZ2xvYmFsIHN0b3JlID0gc291cmNlIG9mIHRydXRoIGZvciBwdWJsaXNoZWQgc3RhdGUpLlxuICBjb25zdCBicmlkZ2VSZWYgPSBwcm9wcy5icmlkZ2VSZWY7XG4gIGNvbnN0IGN1cnJlbnQgPSBicmlkZ2VSZWYgJiYgYnJpZGdlUmVmLmN1cnJlbnQ7XG4gIGNvbnN0IGhhc0VuY3J5cHRpb25LZXkgPSAhIShjdXJyZW50ICYmIHR5cGVvZiBjdXJyZW50Lmhhc0RvY3VtZW50RW5jcnlwdGlvbktleSA9PT0gJ2Z1bmN0aW9uJyAmJiBjdXJyZW50Lmhhc0RvY3VtZW50RW5jcnlwdGlvbktleSgpKTtcbiAgY29uc3QgbmV0d29ya1N0YXR1cyA9IGN1cnJlbnQgJiYgKGN1cnJlbnQubmV0d29ya1N0YXR1cyB8fCBjdXJyZW50Lmxhc3ROZXR3b3JrU3RhdHVzKTtcbiAgY29uc3QgaGFzTmV0d29ya1NuYXBzaG90ID0gaXNIdWJOZXR3b3JrU3RhdHVzU2hhcGUobmV0d29ya1N0YXR1cyk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaGFzTmV0d29ya1NuYXBzaG90KSBzZXRDYXRhbG9nSHR0cEZhbGxiYWNrRXJyb3IobnVsbCk7XG4gIH0sIFtoYXNOZXR3b3JrU25hcHNob3RdKTtcbiAgY29uc3QgcHVibGlzaGVkUmF3ID0gbmV0d29ya1N0YXR1cyAmJiBuZXR3b3JrU3RhdHVzLnB1Ymxpc2hlZERvY3VtZW50cztcbiAgY29uc3QgaW5kZXhlZCA9ICFoYXNOZXR3b3JrU25hcHNob3RcbiAgICA/IG51bGxcbiAgICA6IChwdWJsaXNoZWRSYXcgJiYgdHlwZW9mIHB1Ymxpc2hlZFJhdyA9PT0gJ29iamVjdCcgPyBwdWJsaXNoZWRSYXcgOiB7fSk7XG4gIGNvbnN0IGZhYnJpY1BlZXJJZCA9IG5ldHdvcmtTdGF0dXMgJiYgbmV0d29ya1N0YXR1cy5mYWJyaWNQZWVySWQgPyBTdHJpbmcobmV0d29ya1N0YXR1cy5mYWJyaWNQZWVySWQpIDogbnVsbDtcbiAgY29uc3QgZG9jdW1lbnRNYXJrZXQgPSBuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMuZG9jdW1lbnRNYXJrZXQgJiYgdHlwZW9mIG5ldHdvcmtTdGF0dXMuZG9jdW1lbnRNYXJrZXQgPT09ICdvYmplY3QnXG4gICAgPyBuZXR3b3JrU3RhdHVzLmRvY3VtZW50TWFya2V0XG4gICAgOiBudWxsO1xuICBjb25zdCBkb2N1bWVudE1hcmtldEFjY3VtdWxhdGUgPSAhIShkb2N1bWVudE1hcmtldCAmJiBkb2N1bWVudE1hcmtldC5hY2N1bXVsYXRlUGVlckludmVudG9yaWVzKTtcbiAgY29uc3Qgc2VydmVyRmxhZ3MgPSBsb2FkU2VydmVyRmVhdHVyZUZsYWdzKGN1cnJlbnQpO1xuICBjb25zdCBkaXN0cmlidXRlRW5hYmxlZCA9ICEhc2VydmVyRmxhZ3MuZGlzdHJpYnV0ZTtcblxuICBjb25zdCBkb2N1bWVudHNMb2FkaW5nU3VidGV4dCA9ICFjdXJyZW50XG4gICAgPyAnQ29ubmVjdGluZyB0byB0aGUgaHViIChXZWJTb2NrZXQgYnJpZGdlKeKApidcbiAgICA6IChicmlkZ2VXZWJTb2NrZXRMb2FkaW5nSGludChjdXJyZW50KSB8fCAnV2FpdGluZyBmb3IgbmV0d29yayBzdGF0dXMgZnJvbSB0aGUgaHViIChwdWJsaXNoZWQgY2F0YWxvZykuJyk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBncyA9IGV2ZW50ICYmIGV2ZW50LmRldGFpbCAmJiBldmVudC5kZXRhaWwuZ2xvYmFsU3RhdGU7XG4gICAgICBpZiAoZ3MgJiYgZ3MuZG9jdW1lbnRzKSBzZXREb2NzU3RhdGUoZ3MuZG9jdW1lbnRzKTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdnbG9iYWxTdGF0ZVVwZGF0ZScsIGhhbmRsZXIpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZ2xvYmFsU3RhdGVVcGRhdGUnLCBoYW5kbGVyKTtcbiAgfSwgW10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSBicmlkZ2VSZWYgJiYgYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgaWYgKGJyaWRnZUluc3RhbmNlICYmIGJyaWRnZUluc3RhbmNlLmdsb2JhbFN0YXRlICYmIGJyaWRnZUluc3RhbmNlLmdsb2JhbFN0YXRlLmRvY3VtZW50cykge1xuICAgICAgc2V0RG9jc1N0YXRlKGJyaWRnZUluc3RhbmNlLmdsb2JhbFN0YXRlLmRvY3VtZW50cyk7XG4gICAgfVxuICB9LCBbYnJpZGdlUmVmXSk7XG5cbiAgLy8gQnJpZWZseSBoaWdobGlnaHQgdGhlIG1vc3QgcmVjZW50bHkgYWRkZWQgZG9jdW1lbnQuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFyZWNlbnREb2NJZCkgcmV0dXJuO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBzZXRSZWNlbnREb2NJZChudWxsKSwgMTUwMCk7XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lcik7XG4gIH0sIFtyZWNlbnREb2NJZF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5vbkxpc3REb2N1bWVudHMgIT09ICdmdW5jdGlvbicpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmICghY2FuY2VsbGVkKSBwcm9wcy5vbkxpc3REb2N1bWVudHMoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4geyBjYW5jZWxsZWQgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtdKTtcblxuICAvLyBXaGVuIFdlYlNvY2tldCBzbmFwc2hvdHMgYXJlIHNsb3csIGh5ZHJhdGUgY2F0YWxvZyArIGh1YiBkb2N1bWVudCBpbmRleCB2aWEgSFRUUCAoc2FtZSBvcmlnaW4pLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChoYXNOZXR3b3JrU25hcHNob3QpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgIGNvbnN0IGJyaWRnZSA9IHByb3BzLmJyaWRnZVJlZiAmJiBwcm9wcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IG9yaWdpbiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICAgID8gd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgICA6ICcnO1xuICAgICAgaWYgKCFicmlkZ2UgfHwgIW9yaWdpbikgcmV0dXJuO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgYnJpZGdlLmFwcGx5SHViTmV0d29ya1N0YXR1c1BheWxvYWQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIGJyaWRnZS5tZXJnZUxpc3REb2N1bWVudHNScGNSZXN1bHQgIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBoZWFkZXJzID0geyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9O1xuICAgICAgY29uc3QgcGFyc2VScGMgPSAocikgPT4gci5qc29uKCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgIGh5ZHJhdGVIdWJOZXR3b3JrU3RhdHVzVmlhSHR0cChicmlkZ2UsIG9yaWdpbikudGhlbigoYXBwbGllZCkgPT4gKHsgYXBwbGllZFZpYUh5ZHJhdGU6IGFwcGxpZWQgfSkpLFxuICAgICAgICBmZXRjaChgJHtvcmlnaW59L3NlcnZpY2VzL3JwY2AsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsganNvbnJwYzogJzIuMCcsIGlkOiAyLCBtZXRob2Q6ICdMaXN0RG9jdW1lbnRzJywgcGFyYW1zOiBbXSB9KVxuICAgICAgICB9KS50aGVuKGFzeW5jIChyKSA9PiAoeyBvazogci5vaywgc3RhdHVzOiByLnN0YXR1cywgYm9keTogYXdhaXQgcGFyc2VScGMocikgfSkpXG4gICAgICBdKVxuICAgICAgICAudGhlbigoW25zLCBsaXN0XSkgPT4ge1xuICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBuc0FwcGxpZWQgPSAhIShucyAmJiBucy5hcHBsaWVkVmlhSHlkcmF0ZSk7XG4gICAgICAgICAgY29uc3QgbGlzdEJvZHkgPSBsaXN0ICYmIGxpc3QuYm9keTtcbiAgICAgICAgICBsZXQgbGlzdEFwcGxpZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAobGlzdEJvZHkgJiYgbGlzdEJvZHkucmVzdWx0ICYmIHR5cGVvZiBicmlkZ2UubWVyZ2VMaXN0RG9jdW1lbnRzUnBjUmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBsaXN0QXBwbGllZCA9ICEhYnJpZGdlLm1lcmdlTGlzdERvY3VtZW50c1JwY1Jlc3VsdChsaXN0Qm9keS5yZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBsaXN0RXJyID0gbGlzdEJvZHkgJiYgbGlzdEJvZHkuZXJyb3I7XG4gICAgICAgICAgY29uc3QgaHR0cEJhZCA9ICFsaXN0IHx8ICFsaXN0Lm9rO1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gW107XG4gICAgICAgICAgaWYgKGxpc3RFcnIpIHBhcnRzLnB1c2goYERvY3VtZW50IGxpc3Q6ICR7anNvblJwY0VyclRleHQobGlzdEVycil9YCk7XG4gICAgICAgICAgaWYgKCFsaXN0RXJyICYmIGxpc3QgJiYgIWxpc3Qub2spIHBhcnRzLnB1c2goYERvY3VtZW50IGxpc3Q6IEhUVFAgJHtsaXN0LnN0YXR1c31gKTtcbiAgICAgICAgICBpZiAoIW5zQXBwbGllZCAmJiAhbGlzdEFwcGxpZWQpIHtcbiAgICAgICAgICAgIHBhcnRzLnB1c2goJ05ldHdvcmsgc3RhdHVzOiBjb3VsZCBub3QgaHlkcmF0ZSB2aWEgSFRUUCAoaHViIGRvd24gb3IgdW5leHBlY3RlZCBHZXROZXR3b3JrU3RhdHVzIHNoYXBlKScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRDYXRhbG9nSHR0cEZhbGxiYWNrRXJyb3IocGFydHMuam9pbignIMK3ICcpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFsaXN0RXJyICYmIGxpc3RCb2R5ICYmICFsaXN0QXBwbGllZCAmJiBsaXN0Qm9keS5yZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0Q2F0YWxvZ0h0dHBGYWxsYmFja0Vycm9yKFxuICAgICAgICAgICAgICBodHRwQmFkXG4gICAgICAgICAgICAgICAgPyAnSHViIGRpZCBub3QgcmV0dXJuIEpTT04tUlBDIHJlc3VsdHMgZm9yIGNhdGFsb2cgaHlkcmF0aW9uLiBDaGVjayAvc2VydmljZXMvcnBjLidcbiAgICAgICAgICAgICAgICA6ICdIdWIgcmV0dXJuZWQgZW1wdHkgcmVzcG9uc2VzIGZvciB0aGUgZG9jdW1lbnQgbGlzdC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWxpc3RFcnIgJiYgIWxpc3RBcHBsaWVkICYmIGxpc3RCb2R5ICYmIGxpc3RCb2R5LnJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzZXRDYXRhbG9nSHR0cEZhbGxiYWNrRXJyb3IoJ0RvY3VtZW50IGxpc3QgcmVzcG9uc2UgY291bGQgbm90IGJlIG1lcmdlZCAodW5leHBlY3RlZCBzaGFwZSkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICBzZXRDYXRhbG9nSHR0cEZhbGxiYWNrRXJyb3IoXG4gICAgICAgICAgICAoZXJyICYmIGVyci5tZXNzYWdlKSA/IGVyci5tZXNzYWdlIDogJ05ldHdvcmsgZXJyb3Igd2hpbGUgbG9hZGluZyBjYXRhbG9nIGZyb20gaHViLidcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9LCAyNTAwKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dCh0KTtcbiAgICB9O1xuICB9LCBbaGFzTmV0d29ya1NuYXBzaG90LCBwcm9wcy5icmlkZ2VSZWZdKTtcblxuICAvLyBVbmlmaWVkIG1vZGVsOiBhbGwgZG9jcyBpbiBkb2N1bWVudHMgc3RvcmU7IGh1YiBpbmRleCA9IHB1Ymxpc2hlZCByZWZzXG4gIGNvbnN0IGFsbERvY3MgPSBPYmplY3QudmFsdWVzKGRvY3NTdGF0ZSB8fCB7fSkuZmlsdGVyKChkKSA9PiBkICYmIGQuaWQpO1xuICBjb25zdCBkb2NzQnlJZCA9IHt9O1xuXG4gIC8vIFN0YXJ0IHdpdGggYWxsIGxvY2FsIGRvY3VtZW50cyAocHJpdmF0ZSBieSBkZWZhdWx0KS5cbiAgZm9yIChjb25zdCBkIG9mIGFsbERvY3MpIHtcbiAgICBkb2NzQnlJZFtkLmlkXSA9IHtcbiAgICAgIC4uLmQsXG4gICAgICBpc0xvY2FsOiBkLnNvdXJjZSA9PT0gJ3BlZXInID8gZmFsc2UgOiAoZC5sb2NhbCAhPT0gZmFsc2UpXG4gICAgfTtcbiAgfVxuXG4gIC8vIE1lcmdlIGluIHB1Ymxpc2hlZCBpbmRleCBlbnRyaWVzIGFuZCBtYXJrIHRoZW0gYXMgcHVibGlzaGVkLlxuICAvLyBQcmVmZXIgZXhpc3RpbmcgbG9jYWwgQWN0b3IgSURzIChvcGFxdWUgaWRzKSB0aGF0IHNoYXJlIHRoZSBzYW1lIHNoYTI1NixcbiAgLy8gc28gdGhlIHNhbWUgZG9jdW1lbnQgZG9lc24ndCBhcHBlYXIgdHdpY2UgKG9uY2UgYnkgQWN0b3IgaWQsIG9uY2UgYnkgc2hhKS5cbiAgaWYgKGluZGV4ZWQgJiYgdHlwZW9mIGluZGV4ZWQgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKGluZGV4ZWQpKSB7XG4gICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pZCkgY29udGludWU7XG4gICAgICBjb25zdCBzaGEgPSB2YWx1ZS5zaGEyNTYgfHwgdmFsdWUuaWQ7XG5cbiAgICAgIGxldCB0YXJnZXRJZCA9IHZhbHVlLmlkO1xuXG4gICAgICBpZiAoc2hhKSB7XG4gICAgICAgIGNvbnN0IGxvY2FsTWF0Y2ggPSBhbGxEb2NzLmZpbmQoKGQpID0+IHtcbiAgICAgICAgICBjb25zdCBkU2hhID0gZC5zaGEyNTYgfHwgZC5zaGEgfHwgZC5pZDtcbiAgICAgICAgICByZXR1cm4gZFNoYSA9PT0gc2hhO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGxvY2FsTWF0Y2ggJiYgbG9jYWxNYXRjaC5pZCkge1xuICAgICAgICAgIHRhcmdldElkID0gbG9jYWxNYXRjaC5pZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBleGlzdGluZyA9IGRvY3NCeUlkW3RhcmdldElkXSB8fCB7fTtcbiAgICAgIGRvY3NCeUlkW3RhcmdldElkXSA9IHsgLi4uZXhpc3RpbmcsIC4uLnZhbHVlLCBpZDogdGFyZ2V0SWQsIGlzUHVibGlzaGVkOiB0cnVlIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jcyA9IE9iamVjdC52YWx1ZXMoZG9jc0J5SWQpXG4gICAgLmZpbHRlcigoZCkgPT4gZCAmJiBkLmlkKVxuICAgIC5zb3J0KChhLCBiKSA9PiBjb21wYXJlRG9jdW1lbnRzQnlIb3N0T2ZmZXJUaGVuUHVyY2hhc2VQcmljZShhLCBiLCBkaXN0cmlidXRlUHJvcG9zYWxzU3RhdGUpKTtcblxuICBjb25zdCBkb2NzUmVzZXRLZXkgPSBgJHtkb2NzLmxlbmd0aH06JHtkb2NzWzBdICYmIGRvY3NbMF0uaWR9OiR7ZG9jc1tkb2NzLmxlbmd0aCAtIDFdICYmIGRvY3NbZG9jcy5sZW5ndGggLSAxXS5pZH1gO1xuICBjb25zdCB7XG4gICAgc2xpY2U6IGRvY3NTbGljZSxcbiAgICBwYWdlOiBkb2NzTGlzdEFjdGl2ZVBhZ2UsXG4gICAgdG90YWxQYWdlczogZG9jc1RvdGFsUGFnZXMsXG4gICAgcmFuZ2VGcm9tOiBkb2NzUmFuZ2VGcm9tLFxuICAgIHJhbmdlVG86IGRvY3NSYW5nZVRvLFxuICAgIHRvdGFsOiBkb2NzTGlzdFRvdGFsLFxuICAgIHNldFBhZ2U6IHNldERvY3NMaXN0UGFnZVxuICB9ID0gdXNlSHViTGlzdFBhZ2luYXRpb24oZG9jcywgZG9jc1Jlc2V0S2V5KTtcblxuICBjb25zdCBvblBpY2tGaWxlID0gYXN5bmMgKGYpID0+IHtcbiAgICBzZXRFcnJvcihudWxsKTtcbiAgICBzZXRGaWxlKGYpO1xuICAgIHNldE1ldGEobnVsbCk7XG4gICAgaWYgKCFmIHx8ICFoYXNFbmNyeXB0aW9uS2V5KSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBmLmFycmF5QnVmZmVyKCk7XG4gICAgICBjb25zdCBzaGEyNTYgPSBzaGEyNTZIZXgoYnVmZmVyKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRCYXNlNjQgPSBiYXNlNjRGcm9tQXJyYXlCdWZmZXIoYnVmZmVyKTtcbiAgICAgIC8vIFdyYXAgZmlsZSBtZXRhZGF0YSBpbiBhIEZhYnJpYyBBY3RvciBzbyB0aGUgcHVibGljIGRvY3VtZW50IElEXG4gICAgICAvLyBpcyBhbiBvcGFxdWUgQWN0b3IgaWQsIG5vdCB0aGUgcmF3IHNoYTI1NiBoYXNoLlxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgc2hhMjU2LFxuICAgICAgICBuYW1lOiBmLm5hbWUsXG4gICAgICAgIG1pbWU6IGYudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyxcbiAgICAgICAgc2l6ZTogZi5zaXplXG4gICAgICB9O1xuICAgICAgY29uc3QgYWN0b3IgPSBuZXcgQWN0b3IoeyBjb250ZW50OiBwYXlsb2FkIH0pO1xuICAgICAgY29uc3QgbWV0YSA9IHtcbiAgICAgICAgaWQ6IGFjdG9yLmlkLFxuICAgICAgICBzaGEyNTYsXG4gICAgICAgIG5hbWU6IHBheWxvYWQubmFtZSxcbiAgICAgICAgbWltZTogcGF5bG9hZC5taW1lLFxuICAgICAgICBzaXplOiBwYXlsb2FkLnNpemUsXG4gICAgICAgIGNvbnRlbnRCYXNlNjRcbiAgICAgIH07XG4gICAgICBpZiAodHlwZW9mIHByb3BzLm9uQWRkTG9jYWxEb2N1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9wcy5vbkFkZExvY2FsRG9jdW1lbnQobWV0YSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHByb3BzLm9uQ3JlYXRlRG9jdW1lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJvcHMub25DcmVhdGVEb2N1bWVudChtZXRhKTtcbiAgICAgIH1cbiAgICAgIHNldFJlY2VudERvY0lkKG1ldGEuaWQpO1xuICAgICAgc2V0RmlsZShudWxsKTtcbiAgICAgIC8vIE5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoZSBuZXcgZG9jdW1lbnQgZGV0YWlsIHZpZXdcbiAgICAgIG5hdmlnYXRlKGAvZG9jdW1lbnRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG1ldGEuaWQpfWApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldEVycm9yKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0QnVzeShmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ3JlYXRlRG9jdW1lbnQgPSAoKSA9PiB7XG4gICAgaWYgKCFoYXNFbmNyeXB0aW9uS2V5IHx8ICFjcmVhdGVEb2NDb250ZW50LnRyaW0oKSkgcmV0dXJuO1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZXh0ID0gY3JlYXRlRG9jQ29udGVudC50cmltKCk7XG4gICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICBjb25zdCBidWZmZXIgPSBlbmNvZGVyLmVuY29kZSh0ZXh0KTtcbiAgICAgIGNvbnN0IHNoYTI1NiA9IHNoYTI1NkhleChidWZmZXIpO1xuICAgICAgY29uc3QgY29udGVudEJhc2U2NCA9IHRleHRUb0Jhc2U2NCh0ZXh0KTtcbiAgICAgIGNvbnN0IG5hbWUgPSAoY3JlYXRlRG9jTmFtZSB8fCAnVW50aXRsZWQnKS50cmltKCkgfHwgJ1VudGl0bGVkJztcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIHNoYTI1NixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbWltZTogJ3RleHQvcGxhaW4nLFxuICAgICAgICBzaXplOiBidWZmZXIubGVuZ3RoXG4gICAgICB9O1xuICAgICAgY29uc3QgYWN0b3IgPSBuZXcgQWN0b3IoeyBjb250ZW50OiBwYXlsb2FkIH0pO1xuICAgICAgY29uc3QgbWV0YSA9IHtcbiAgICAgICAgaWQ6IGFjdG9yLmlkLFxuICAgICAgICBzaGEyNTYsXG4gICAgICAgIG5hbWU6IHBheWxvYWQubmFtZSxcbiAgICAgICAgbWltZTogcGF5bG9hZC5taW1lLFxuICAgICAgICBzaXplOiBwYXlsb2FkLnNpemUsXG4gICAgICAgIGNvbnRlbnRCYXNlNjRcbiAgICAgIH07XG4gICAgICBpZiAodHlwZW9mIHByb3BzLm9uQWRkTG9jYWxEb2N1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9wcy5vbkFkZExvY2FsRG9jdW1lbnQobWV0YSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHByb3BzLm9uQ3JlYXRlRG9jdW1lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJvcHMub25DcmVhdGVEb2N1bWVudChtZXRhKTtcbiAgICAgIH1cbiAgICAgIHNldFJlY2VudERvY0lkKG1ldGEuaWQpO1xuICAgICAgc2V0Q3JlYXRlRG9jTmFtZSgnJyk7XG4gICAgICBzZXRDcmVhdGVEb2NDb250ZW50KCcnKTtcbiAgICAgIHNldFNob3dDcmVhdGVEb2MoZmFsc2UpO1xuICAgICAgLy8gTmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIG5ldyBkb2N1bWVudCBkZXRhaWwgdmlld1xuICAgICAgbmF2aWdhdGUoYC9kb2N1bWVudHMvJHtlbmNvZGVVUklDb21wb25lbnQobWV0YS5pZCl9YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0RXJyb3IoZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxmYWJyaWMtZG9jdW1lbnRzIGNsYXNzPSdmYWRlLWluJz5cbiAgICAgIDxTZWdtZW50PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC43NWVtJywgZmxleFdyYXA6ICd3cmFwJywgbWFyZ2luQm90dG9tOiAnMC4yNWVtJyB9fVxuICAgICAgICAgIHJvbGU9XCJiYW5uZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPEJ1dHRvbiBiYXNpYyBzaXplPVwic21hbGxcIiBhcz17TGlua30gdG89XCIvXCIgYXJpYS1sYWJlbD1cIkJhY2sgdG8gaG9tZVwiPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgSG9tZVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGdhcDogJzAuNWVtJyxcbiAgICAgICAgICAgICAgZmxleFdyYXA6ICd3cmFwJ1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDJcIiBpZD1cImRvY3VtZW50cy1wYWdlLWhlYWRpbmdcIiBzdHlsZT17eyBtYXJnaW46IDAgfX0+XG4gICAgICAgICAgICAgIERvY3VtZW50c1xuICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAxLFxuICAgICAgICAgICAgICAgIGhlaWdodDogMSxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIG1hcmdpbjogLTEsXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgIGNsaXA6ICdyZWN0KDAsIDAsIDAsIDApJyxcbiAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICAgICAgICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2RvY3MubGVuZ3RofSBkb2N1bWVudHMgaW4gdGhpcyBodWIgbm9kZVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiRG9jdW1lbnRzIGluIHRoaXMgaHViIG5vZGVcIlxuICAgICAgICAgICAgICBzdHlsZT17eyB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyB9fVxuICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7ZG9jcy5sZW5ndGh9XG4gICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8RGl2aWRlciAvPlxuXG4gICAgICAgIHtjYXRhbG9nSHR0cEZhbGxiYWNrRXJyb3IgJiYgIWhhc05ldHdvcmtTbmFwc2hvdCAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2VcbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19XG4gICAgICAgICAgICBvbkRpc21pc3M9eygpID0+IHNldENhdGFsb2dIdHRwRmFsbGJhY2tFcnJvcihudWxsKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+Q291bGQgbm90IGZ1bGx5IGxvYWQgaHViIGNhdGFsb2cgb3ZlciBIVFRQPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyMzMzMnIH19PntjYXRhbG9nSHR0cEZhbGxiYWNrRXJyb3J9PC9wPlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGZvbnRTaXplOiAnMC45ZW0nLCBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICBUaGUgV2ViU29ja2V0IHNlc3Npb24gbWF5IHN0aWxsIHN5bmMgaW4gYSBtb21lbnQg4oCUIG9yIHJlbG9hZCB0aGUgcGFnZS4gSlNPTi1SUEM6eycgJ31cbiAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nIH19Pi9zZXJ2aWNlcy9ycGM8L2NvZGU+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICApfVxuXG4gICAgICAgIHshaGFzRW5jcnlwdGlvbktleSAmJiAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkTW9kZSA9IGNsYXNzaWZ5SHViQnJvd3NlcklkZW50aXR5KHByb3BzLmlkZW50aXR5IHx8IHt9KTtcbiAgICAgICAgICBjb25zdCB0aXRsZSA9IGlkTW9kZSA9PT0gJ3dhdGNoX29ubHknXG4gICAgICAgICAgICA/ICdTaWduaW5nIGtleSBub3QgbG9hZGVkICh3YXRjaC1vbmx5KSdcbiAgICAgICAgICAgIDogaWRNb2RlID09PSAncGFzc3dvcmRfbG9ja2VkJ1xuICAgICAgICAgICAgICA/ICdQcml2YXRlIGtleSBub3QgbG9hZGVkJ1xuICAgICAgICAgICAgICA6ICdQcml2YXRlIGtleSBub3QgbG9hZGVkJztcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46IDAsIGZvbnRXZWlnaHQ6IDYwMCwgY29sb3I6ICcjMzMzJyB9fT57dGl0bGV9PC9wPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgY29sb3I6ICcjNDQ0JyB9fT5cbiAgICAgICAgICAgICAgICB7aWRNb2RlID09PSAnd2F0Y2hfb25seScgPyAoXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICBUaGlzIGJyb3dzZXIgb25seSBoYXMgYSBwdWJsaWMga2V5LiBUbyBjcmVhdGUgb3IgdXBsb2FkIDxzdHJvbmc+ZW5jcnlwdGVkPC9zdHJvbmc+IGRvY3VtZW50cywgaW1wb3J0IGEgZnVsbCBrZXk6IHRvcC1iYXIgaWRlbnRpdHkgbWVudSBvciA8TGluayB0bz1cIi9zZXR0aW5nc1wiPlNldHRpbmdzPC9MaW5rPiDihpIgPHN0cm9uZz5GYWJyaWMgaWRlbnRpdHk8L3N0cm9uZz4ueycgJ31cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICkgOiBpZE1vZGUgPT09ICdwYXNzd29yZF9sb2NrZWQnID8gKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSB0b3AtYmFyIDxzdHJvbmc+TG9ja2VkPC9zdHJvbmc+IGNvbnRyb2wgKGVuY3J5cHRpb24gcGFzc3dvcmQpIG9yIDxMaW5rIHRvPVwiL3NldHRpbmdzXCI+U2V0dGluZ3M8L0xpbms+IOKGkiA8c3Ryb25nPkZhYnJpYyBpZGVudGl0eTwvc3Ryb25nPiwgdGhlbiA8c3Ryb25nPlVubG9jayBwcml2YXRlIGtleTwvc3Ryb25nPiwgdG8gY3JlYXRlIG9yIHVwbG9hZCBlbmNyeXB0ZWQgZG9jdW1lbnRzLnsnICd9XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIG9yIHJlc3RvcmUgYSBrZXk6IDxMaW5rIHRvPVwiL3NldHRpbmdzXCI+U2V0dGluZ3M8L0xpbms+IOKGkiA8c3Ryb25nPkZhYnJpYyBpZGVudGl0eTwvc3Ryb25nPiBvciA8c3Ryb25nPkxvZyBpbjwvc3Ryb25nPiBpbiB0aGUgdG9wIGJhci4gVGhlbiB5b3UgY2FuIGNyZWF0ZSBvciB1cGxvYWQgZW5jcnlwdGVkIGRvY3VtZW50cy57JyAnfVxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5ncy9iaXRjb2luLXdhbGxldFwiPkJpdGNvaW4gd2FsbGV0ICZhbXA7IGRlcml2YXRpb248L0xpbms+IGV4cGxhaW5zIGhvdyB0aGUgc2FtZSBpZGVudGl0eSBkcml2ZXMgSHViIEwxIGFkZHJlc3Nlcy5cbiAgICAgICAgICAgICAgICBGb3IgbG9jYWwgZGV2IHVzZSB0aGUgc2FtZSBwaHJhc2UgYXMgdGhlIGh1YiAoPGNvZGU+RkFCUklDX1NFRUQ8L2NvZGU+IGlmIHNldCwgZWxzZSA8Y29kZT5GQUJSSUNfTU5FTU9OSUM8L2NvZGU+KTogPGNvZGU+d2luZG93LkZBQlJJQ19ERVZfQlJPV1NFUl9TRUVEPC9jb2RlPiBpbiA8Y29kZT5hc3NldHMvY29uZmlnLmxvY2FsLmpzPC9jb2RlPiwgb3B0aW9uYWwgPGNvZGU+d2luZG93LkZBQlJJQ19ERVZfQlJPV1NFUl9QQVNTUEhSQVNFPC9jb2RlPiBmb3IgQklQMzkgZXh0ZW5zaW9uLCBvciBodWIgPGNvZGU+RkFCUklDX0RFVl9QVVNIX0JST1dTRVJfSURFTlRJVFk9MTwvY29kZT4gKG5ldmVyIG9uIGV4cG9zZWQgaG9zdHMpLiBGb3IgUlBDLW9ubHkgYXV0b21hdGlvbiBzZWUgPGNvZGU+bnBtIHJ1biB0ZXN0OmUyZS1kb2N1bWVudC1wdXJjaGFzZTwvY29kZT4uXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApO1xuICAgICAgICB9KSgpfVxuXG4gICAgICAgIHtoYXNFbmNyeXB0aW9uS2V5ICYmIChcbiAgICAgICAgICA8U2VnbWVudCBsb2FkaW5nPXtidXN5fT5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiPkFkZCBjb250ZW50PC9IZWFkZXI+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICBTZWxlY3QgYSBmaWxlIG9yIGNyZWF0ZSBhIGRvY3VtZW50IGZyb20gdGV4dC4gPHN0cm9uZz5QdWJsaXNoPC9zdHJvbmc+IHdpdGggYSBwcmljZSBzZWFscyBjb250ZW50IChjaXBoZXJ0ZXh0LWF0LXJlc3QpO1xuICAgICAgICAgICAgICBidXllcnMgcGF5IGFuIEwxIEhUTEMgdGhhdCByZXZlYWxzIHRoZSBkZWNyeXB0aW9uIGtleSAoUGVlcnMgaW52ZW50b3J5IG9yIENsYWltICZhbXA7IFVubG9jaykuXG4gICAgICAgICAgICAgIHtkaXN0cmlidXRlRW5hYmxlZCA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgeycgJ308c3Ryb25nPkRpc3RyaWJ1dGU8L3N0cm9uZz4gKG9wdGlvbmFsIHN0b3JhZ2UgYm9uZHMpIG5lZWRzIGFuIG9uLWNoYWluIGludm9pY2Ug4oCUIG9wZW4gYSBkb2N1bWVudCBhbmQgZm9sbG93IDxzdHJvbmc+RGlzdHJpYnV0ZTwvc3Ryb25nPiwgdGhlbiBwYXkgZnJvbXsnICd9XG4gICAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCI+Qml0Y29pbjwvTGluaz4uXG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2hvd0NyZWF0ZURvYygodikgPT4gIXYpfVxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206IHNob3dDcmVhdGVEb2MgPyAnMWVtJyA6IDAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT17c2hvd0NyZWF0ZURvYyA/ICdtaW51cycgOiAncGx1cyd9IC8+XG4gICAgICAgICAgICAgIENyZWF0ZSBEb2N1bWVudFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICB7c2hvd0NyZWF0ZURvYyAmJiAoXG4gICAgICAgICAgICAgIDxGb3JtIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScsIG1heFdpZHRoOiA1NjAgfX0+XG4gICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+TmFtZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEb2N1bWVudCBuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NyZWF0ZURvY05hbWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0Q3JlYXRlRG9jTmFtZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD5Db250ZW50PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxGb3JtLlRleHRBcmVhXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgeW91ciB0ZXh0IGhlcmXigKZcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y3JlYXRlRG9jQ29udGVudH1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRDcmVhdGVEb2NDb250ZW50KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgcm93cz17Nn1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZm9udEZhbWlseTogJ21vbm9zcGFjZScgfX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgcHJpbWFyeSBvbkNsaWNrPXtvbkNyZWF0ZURvY3VtZW50fSBkaXNhYmxlZD17IWNyZWF0ZURvY0NvbnRlbnQudHJpbSgpfT5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzYXZlXCIgLz5cbiAgICAgICAgICAgICAgICAgIENyZWF0ZVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgYmFzaWMgb25DbGljaz17KCkgPT4geyBzZXRTaG93Q3JlYXRlRG9jKGZhbHNlKTsgc2V0Q3JlYXRlRG9jTmFtZSgnJyk7IHNldENyZWF0ZURvY0NvbnRlbnQoJycpOyB9fT5cbiAgICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6IHNob3dDcmVhdGVEb2MgPyAnMWVtJyA6IDAgfX0+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Cb3R0b206ICcwLjVlbScsIGNvbG9yOiAnIzY2NicgfX0+T3IgYWRkIGEgZmlsZTo8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IG9uUGlja0ZpbGUoZSAmJiBlLnRhcmdldCAmJiBlLnRhcmdldC5maWxlcyA/IGUudGFyZ2V0LmZpbGVzWzBdIDogbnVsbCl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2J1c3kgfHwgIWhhc0VuY3J5cHRpb25LZXl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtlcnJvciAmJiAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgICAgbmVnYXRpdmVcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19XG4gICAgICAgICAgICAgICAgb25EaXNtaXNzPXsoKSA9PiBzZXRFcnJvcihudWxsKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5Db3VsZCBub3QgYWRkIGRvY3VtZW50PC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJyB9fT57ZXJyb3J9PC9wPlxuICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKX1cblxuICAgICAgICB7ZGlzdHJpYnV0ZUVuYWJsZWQgPyAoXG4gICAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIj5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImdpZnRcIiAvPlxuICAgICAgICAgICAgICBPZmZlcnNcbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPERpc3RyaWJ1dGVQcm9wb3NhbHNMaXN0IGJyaWRnZVJlZj17cHJvcHMuYnJpZGdlUmVmfSBlbWJlZGRlZCAvPlxuICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgPEhlYWRlciBhcz1cImgzXCI+RG9jdW1lbnRzPC9IZWFkZXI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHR5cGVvZiBwcm9wcy5vbkxpc3REb2N1bWVudHMgPT09ICdmdW5jdGlvbicgJiYgcHJvcHMub25MaXN0RG9jdW1lbnRzKCl9XG4gICAgICAgICAgICBkaXNhYmxlZD17YnVzeX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwicmVmcmVzaFwiIC8+XG4gICAgICAgICAgICBSZWZyZXNoXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAge2RvY3VtZW50TWFya2V0QWNjdW11bGF0ZSAmJiAoXG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZSA9IHByb3BzLmJyaWRnZVJlZiAmJiBwcm9wcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICBpZiAoYnJpZGdlICYmIHR5cGVvZiBicmlkZ2Uuc2VuZFJlZnJlc2hEb2N1bWVudE1hcmtldFJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgIGJyaWRnZS5zZW5kUmVmcmVzaERvY3VtZW50TWFya2V0UmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2J1c3l9XG4gICAgICAgICAgICAgIHRpdGxlPVwiUmVxdWVzdCBkb2N1bWVudCBpbnZlbnRvcmllcyBmcm9tIGNvbm5lY3RlZCBGYWJyaWMgcGVlcnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZXhjaGFuZ2VcIiAvPlxuICAgICAgICAgICAgICBRdWVyeSBwZWVyIGludmVudG9yaWVzXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtkb2N1bWVudE1hcmtldEFjY3VtdWxhdGUgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19PlxuICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+RG9jdW1lbnQgTWFya2V0PC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+XG4gICAgICAgICAgICAgICAgVGhpcyBodWIgYWNjdW11bGF0ZXMgcGVlciBpbnZlbnRvcmllc1xuICAgICAgICAgICAgICAgIHtkb2N1bWVudE1hcmtldC5yZXB1Ymxpc2hXaXRoTWFya3VwXG4gICAgICAgICAgICAgICAgICA/IGAgYW5kIHJlcHVibGlzaGVzIGhlbGQgZmlsZXMgYXQgKyR7TnVtYmVyKGRvY3VtZW50TWFya2V0Lm1hcmt1cEJwcykgLyAxMDB9JWBcbiAgICAgICAgICAgICAgICAgICAgKyAoTnVtYmVyKGRvY3VtZW50TWFya2V0Lm1hcmt1cFNhdHMpID4gMCA/IGAgKyAke2RvY3VtZW50TWFya2V0Lm1hcmt1cFNhdHN9IHNhdHNgIDogJycpXG4gICAgICAgICAgICAgICAgICAgICsgJyBtYXJrdXAnXG4gICAgICAgICAgICAgICAgICA6ICcnfVxuICAgICAgICAgICAgICAgIC4gT3V0Ym91bmQgaW52ZW50b3J5IHN0aWxsIGxpc3RzIG9ubHkgZmlsZXMgdGhpcyBub2RlIGNhbiBkZWxpdmVyLlxuICAgICAgICAgICAgICAgIHtkb2N1bWVudE1hcmtldC5vZmZlckNvdW50ICE9IG51bGwgPyBgICR7ZG9jdW1lbnRNYXJrZXQub2ZmZXJDb3VudH0gcmVtb3RlIG9mZmVyJHtkb2N1bWVudE1hcmtldC5vZmZlckNvdW50ID09PSAxID8gJycgOiAncyd9IHN0b3JlZC5gIDogJyd9XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApfVxuICAgICAgICAgIHsoIWhhc05ldHdvcmtTbmFwc2hvdCAmJiBhbGxEb2NzLmxlbmd0aCA9PT0gMCkgPyAoXG4gICAgICAgICAgICA8U2VnbWVudFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nLCBtaW5IZWlnaHQ6ICcyMHZoJywgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPExvYWRlciBhY3RpdmUgaW5saW5lPVwiY2VudGVyZWRcIiAvPlxuICAgICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScsIHRleHRBbGlnbjogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICBMb2FkaW5nIGRvY3VtZW50c+KAplxuICAgICAgICAgICAgICAgICAgPEhlYWRlci5TdWJoZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIHtkb2N1bWVudHNMb2FkaW5nU3VidGV4dH1cbiAgICAgICAgICAgICAgICAgIDwvSGVhZGVyLlN1YmhlYWRlcj5cbiAgICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICA8TGlzdCBkaXZpZGVkIHJlbGF4ZWQgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAge2RvY3NTbGljZS5tYXAoKGRvYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVscyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChkb2MuaXNQdWJsaXNoZWQpIHtcbiAgICAgICAgICAgICAgICAgIGxhYmVscy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9XCJwdWJsaXNoZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImJsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlB1Ymxpc2hlZCB0byBodWJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJ1bGxob3JuXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBQdWJsaXNoZWRcbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkb2MuaXNMb2NhbCkge1xuICAgICAgICAgICAgICAgICAgbGFiZWxzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIGtleT1cImxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJncmV5XCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nIH19XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJQcml2YXRlIChsb2NhbCB0byB0aGlzIGJyb3dzZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJsb2NrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBQcml2YXRlXG4gICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkb2MuY29udGVudEVuY3J5cHRlZCkge1xuICAgICAgICAgICAgICAgICAgbGFiZWxzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIGtleT1cImVuY3J5cHRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiZ3JlZW5cIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjI1ZW0nIH19XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJFbmNyeXB0ZWQgd2l0aCB5b3VyIGtleVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2hpZWxkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBFbmNyeXB0ZWRcbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNCaXRjb2luQmxvY2tEb2MgPSBkb2MubWltZSA9PT0gJ2FwcGxpY2F0aW9uL3gtZmFicmljLWJpdGNvaW4tYmxvY2sranNvbidcbiAgICAgICAgICAgICAgICAgIHx8IFN0cmluZyhkb2MubmFtZSB8fCAnJykuc3RhcnRzV2l0aCgnQml0Y29pbiBibG9jayAnKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNCaXRjb2luQmxvY2tEb2MpIHtcbiAgICAgICAgICAgICAgICAgIGxhYmVscy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9XCJiaXRjb2luLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJvcmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjI1ZW0nIH19XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBdXRvLXB1Ymxpc2hlZCBMMSBibG9jayBzdW1tYXJ5IGZyb20gdGhpcyBodWJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImN1YmVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIEwxIGJsb2NrXG4gICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQml0Y29pblR4RG9jID0gZG9jLm1pbWUgPT09ICdhcHBsaWNhdGlvbi94LWZhYnJpYy1iaXRjb2luLXRyYW5zYWN0aW9uK2pzb24nXG4gICAgICAgICAgICAgICAgICB8fCBTdHJpbmcoZG9jLm5hbWUgfHwgJycpLnN0YXJ0c1dpdGgoJ0JpdGNvaW4gdHggJyk7XG4gICAgICAgICAgICAgICAgaWYgKGlzQml0Y29pblR4RG9jKSB7XG4gICAgICAgICAgICAgICAgICBsYWJlbHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAga2V5PVwiYml0Y29pbi10eFwiXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwib3JhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4yNWVtJyB9fVxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQXV0by1wdWJsaXNoZWQgTDEgdHJhbnNhY3Rpb24gZnJvbSBhbiBpbmRleGVkIGJsb2NrIChvcHRpb25hbDsgcHJ1bmVkIG5vZGVzIG1heSBkcm9wIGZyb20gbG9jYWwgaW52ZW50b3J5KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZXhjaGFuZ2VcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIEwxIHR4XG4gICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkb2Muc3RvcmFnZUNvbnRyYWN0SWQpIHtcbiAgICAgICAgICAgICAgICAgIGxhYmVscy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9XCJzdG9yYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICBhcz17TGlua31cbiAgICAgICAgICAgICAgICAgICAgICB0bz17YC9jb250cmFjdHMvJHtlbmNvZGVVUklDb21wb25lbnQoZG9jLnN0b3JhZ2VDb250cmFjdElkKX1gfVxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInB1cnBsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuMjVlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlBheS10by1kaXN0cmlidXRlIHN0b3JhZ2UgY29udHJhY3QgKEwxIGJvbmRlZClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNsb3VkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlXG4gICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkb2Muc3RvcmFnZUNvbnRyYWN0SWQgJiYgZG9jLnN0b3JhZ2VMMVN0YXR1cyAmJiB0eXBlb2YgZG9jLnN0b3JhZ2VMMVN0YXR1cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ID0gZG9jLnN0b3JhZ2VMMVN0YXR1cztcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmYgPSBzdC5jb25maXJtYXRpb25zICE9IG51bGwgPyBOdW1iZXIoc3QuY29uZmlybWF0aW9ucykgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgbGV0IHBheUNvbG9yID0gJ2dyZXknO1xuICAgICAgICAgICAgICAgICAgbGV0IHBheVRleHQgPSAnJztcbiAgICAgICAgICAgICAgICAgIGxldCBwYXlUaXRsZSA9ICdTdG9yYWdlIGNvbnRyYWN0IGZ1bmRpbmcgdHggKGZyb20gaHViIC8gYml0Y29pbmQpJztcbiAgICAgICAgICAgICAgICAgIGlmIChjb25mICE9IG51bGwgJiYgIU51bWJlci5pc05hTihjb25mKSAmJiBjb25mID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBwYXlDb2xvciA9ICdncmVlbic7XG4gICAgICAgICAgICAgICAgICAgIHBheVRleHQgPSBgJHtjb25mfSBjb25maXJtYXRpb24ke2NvbmYgPT09IDEgPyAnJyA6ICdzJ31gO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdC5pbk1lbXBvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5Q29sb3IgPSAneWVsbG93JztcbiAgICAgICAgICAgICAgICAgICAgcGF5VGV4dCA9ICdNZW1wb29sJztcbiAgICAgICAgICAgICAgICAgICAgcGF5VGl0bGUgPSAnRnVuZGluZyB0eCBpbiBtZW1wb29sICgwIGNvbmZpcm1hdGlvbnMpJztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwYXlDb2xvciA9ICd5ZWxsb3cnO1xuICAgICAgICAgICAgICAgICAgICBwYXlUZXh0ID0gJzAgY29uZmlybWF0aW9ucyc7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXlUZXh0ID0gJ0wxIG4vYSc7XG4gICAgICAgICAgICAgICAgICAgIHBheVRpdGxlID0gJ0NvdWxkIG5vdCBsb2FkIHR4IGZyb20gQml0Y29pbiBSUEMnO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgbGFiZWxzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIGtleT1cInN0b3JhZ2UtbDFcIlxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17cGF5Q29sb3J9XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuMjVlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17cGF5VGl0bGV9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYml0Y29pblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAge3BheVRleHR9XG4gICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkb2Muc291cmNlID09PSAncGVlcicgJiYgIWRvYy5pc1B1Ymxpc2hlZCAmJiAhZG9jLmlzTG9jYWwpIHtcbiAgICAgICAgICAgICAgICAgIGxhYmVscy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9XCJwZWVyLW9mZmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJ0ZWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4yNWVtJyB9fVxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiTGlzdGVkIGJ5IGEgY29ubmVjdGVkIHBlZXI7IHRoaXMgaHViIGRvZXMgbm90IGhvbGQgdGhlIGZpbGUgeWV0XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzaGFyZSBhbHRlcm5hdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIFBlZXIgb2ZmZXJcbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGRvYy5iZXN0UGVlclByaWNlU2F0cyAhPSBudWxsICYmIE51bWJlcihkb2MuYmVzdFBlZXJQcmljZVNhdHMpID49IDAgJiYgZG9jLnNvdXJjZSAhPT0gJ3BlZXInKSB7XG4gICAgICAgICAgICAgICAgICBsYWJlbHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAga2V5PVwicGVlci1wcmljZVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuMjVlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNoZWFwZXN0IHJlbW90ZSBpbnZlbnRvcnkgcHJpY2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImV4Y2hhbmdlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBwZWVyIHtmb3JtYXRTYXRzRGlzcGxheShkb2MuYmVzdFBlZXJQcmljZVNhdHMpfSBzYXRzXG4gICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkb2MuaXNQdWJsaXNoZWQgJiYgZG9jLnB1cmNoYXNlUHJpY2VTYXRzICE9IG51bGwgJiYgTnVtYmVyKGRvYy5wdXJjaGFzZVByaWNlU2F0cykgPiAwKSB7XG4gICAgICAgICAgICAgICAgICBsYWJlbHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAga2V5PVwicHJpY2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJvcmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjI1ZW0nIH19XG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJMaXN0ZWQgTDEgcHJpY2UgKGludmVudG9yeSBIVExDKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYml0Y29pblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAge2Zvcm1hdFNhdHNEaXNwbGF5KGRvYy5wdXJjaGFzZVByaWNlU2F0cyl9IHNhdHNcbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZWNlbnQgPSByZWNlbnREb2NJZCAmJiByZWNlbnREb2NJZCA9PT0gZG9jLmlkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TdHlsZSA9IGlzUmVjZW50XG4gICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI2Y1ZjhmZicsXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMS4wMSknLFxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdiYWNrZ3JvdW5kIDAuNHMgZWFzZSwgdHJhbnNmb3JtIDAuMnMgZWFzZSdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQgMC40cyBlYXNlLCB0cmFuc2Zvcm0gMC4ycyBlYXNlJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxMaXN0Lkl0ZW0ga2V5PXtkb2MuaWR9IHN0eWxlPXtpdGVtU3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgIDxMaXN0LkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL2RvY3VtZW50cy8ke2VuY29kZVVSSUNvbXBvbmVudChkb2MuaWQpfWB9Pntkb2MubmFtZSB8fCBkb2MuaWR9PC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAge2xhYmVsc31cbiAgICAgICAgICAgICAgICAgICAgICA8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxMaXN0LkRlc2NyaXB0aW9uIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZG9jLm1pbWUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSd9IOKAlCB7ZG9jLnNpemUgIT0gbnVsbCA/IGAke2RvYy5zaXplfSBieXRlc2AgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIHtkb2MuY3JlYXRlZCA/IGAg4oCUICR7bmV3IERhdGUoZG9jLmNyZWF0ZWQpLnRvTG9jYWxlU3RyaW5nKCl9YCA6ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgeyhkb2MubGluZWFnZSB8fCBkb2MuaWQpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9XCJGYWJyaWMgZG9jdW1lbnQgaWQgZm9yIHRoZSBjb250ZW50IGNyZWF0b3IgKGxpbmVhZ2UpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeycg4oCUICd9YXV0aG9yIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC45MmVtJyB9fT57c2hvcnRIZXhJZChkb2MubGluZWFnZSB8fCBkb2MuaWQpfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtkb2MuaXNQdWJsaXNoZWQgJiYgZmFicmljUGVlcklkICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdGl0bGU9XCJGYWJyaWMgcGVlciBpZCBvZiB0aGUgaHViIGhvc3RpbmcgdGhlIHB1Ymxpc2hlZCBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnIOKAlCAnfXB1Ymxpc2hlciA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuOTJlbScgfX0+e3Nob3J0SGV4SWQoZmFicmljUGVlcklkKX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7IWRvYy5zdG9yYWdlQ29udHJhY3RJZCAmJiBkb2MuaXNQdWJsaXNoZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT1cIlB1Ymxpc2hlZCBidXQgbm8gYm9uZGVkIHN0b3JhZ2UgY29udHJhY3QgeWV0XCI+IOKAlCBub3QgcmVwbGljYXRlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L0xpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICB7ZG9jcy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8TGlzdC5EZXNjcmlwdGlvbiBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19Pk5vIGRvY3VtZW50cyB5ZXQuPC9MaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0xpc3Q+XG4gICAgICAgICAgICB7ZG9jc0xpc3RUb3RhbCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICAgICAgICAgICAgICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgICAgICAgICAgICAgICBnYXA6ICcwLjVlbScsXG4gICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICcwLjc1ZW0nXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC44OGVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIFNob3dpbmcge2RvY3NSYW5nZUZyb2194oCTe2RvY3NSYW5nZVRvfSBvZiB7ZG9jc0xpc3RUb3RhbH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPEh1YlBhZ2luYXRpb25cbiAgICAgICAgICAgICAgICAgIGFjdGl2ZVBhZ2U9e2RvY3NMaXN0QWN0aXZlUGFnZX1cbiAgICAgICAgICAgICAgICAgIHRvdGFsUGFnZXM9e2RvY3NUb3RhbFBhZ2VzfVxuICAgICAgICAgICAgICAgICAgb25QYWdlQ2hhbmdlPXsoZSwgZCkgPT4gc2V0RG9jc0xpc3RQYWdlKGQuYWN0aXZlUGFnZSl9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17YnVzeX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpblRvcDogMCwgZmxleDogJzEgMSBhdXRvJywgbWluV2lkdGg6IDAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICA8L1NlZ21lbnQ+XG4gICAgPC9mYWJyaWMtZG9jdW1lbnRzPlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERvY3VtZW50c1BhZ2U7XG4iXSwibmFtZXMiOlsib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImkiLCJfdG9QcmltaXRpdmUiLCJfdHlwZW9mIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsImYiLCJhIiwidSIsIm5leHQiLCJfcmVnZW5lcmF0b3IiLCJ0b1N0cmluZ1RhZyIsImMiLCJwcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwicCIsInkiLCJHIiwidiIsImQiLCJiaW5kIiwibCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJ1c2VOYXZpZ2F0ZSIsIl9yZXF1aXJlMiIsIkJ1dHRvbiIsIkRpdmlkZXIiLCJGb3JtIiwiSGVhZGVyIiwiSWNvbiIsIklucHV0IiwiTGFiZWwiLCJMaXN0IiwiTG9hZGVyIiwiTWVzc2FnZSIsIlNlZ21lbnQiLCJfcmVxdWlyZTMiLCJzaGEyNTZIYXNoIiwic2hhMjU2IiwiQWN0b3IiLCJEaXN0cmlidXRlUHJvcG9zYWxzTGlzdCIsIl9yZXF1aXJlNCIsImZvcm1hdFNhdHNEaXNwbGF5IiwiX3JlcXVpcmU1IiwiaXNIdWJOZXR3b3JrU3RhdHVzU2hhcGUiLCJicmlkZ2VXZWJTb2NrZXRMb2FkaW5nSGludCIsIl9yZXF1aXJlNiIsImh5ZHJhdGVIdWJOZXR3b3JrU3RhdHVzVmlhSHR0cCIsIl9yZXF1aXJlNyIsImNsYXNzaWZ5SHViQnJvd3NlcklkZW50aXR5IiwiX3JlcXVpcmU4IiwibG9hZFNlcnZlckZlYXR1cmVGbGFncyIsIkh1YlBhZ2luYXRpb24iLCJfcmVxdWlyZTkiLCJ1c2VIdWJMaXN0UGFnaW5hdGlvbiIsIl9yZXF1aXJlMCIsImNvbXBhcmVEb2N1bWVudHNCeUhvc3RPZmZlclRoZW5QdXJjaGFzZVByaWNlIiwic2hvcnRIZXhJZCIsImNvbmNhdCIsImJhc2U2NEZyb21BcnJheUJ1ZmZlciIsImJ1ZmZlciIsImJ5dGVzIiwiVWludDhBcnJheSIsImJpbmFyeSIsImNodW5rU2l6ZSIsImZyb21DaGFyQ29kZSIsInN1YmFycmF5IiwiYnRvYSIsInNoYTI1NkhleCIsIm1hcCIsImIiLCJwYWRTdGFydCIsImpvaW4iLCJ0ZXh0VG9CYXNlNjQiLCJzdHIiLCJUZXh0RW5jb2RlciIsImVuY29kZSIsImpzb25ScGNFcnJUZXh0IiwiZXJyIiwibWVzc2FnZSIsImRhdGEiLCJEb2N1bWVudHNQYWdlIiwicHJvcHMiLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJmaWxlIiwic2V0RmlsZSIsIl9SZWFjdCR1c2VTdGF0ZTMiLCJfUmVhY3QkdXNlU3RhdGU0IiwibWV0YSIsInNldE1ldGEiLCJfUmVhY3QkdXNlU3RhdGU1IiwiX1JlYWN0JHVzZVN0YXRlNiIsImJ1c3kiLCJzZXRCdXN5IiwiX1JlYWN0JHVzZVN0YXRlNyIsIl9SZWFjdCR1c2VTdGF0ZTgiLCJlcnJvciIsInNldEVycm9yIiwiX1JlYWN0JHVzZVN0YXRlOSIsIl9SZWFjdCR1c2VTdGF0ZTAiLCJjcmVhdGVEb2NOYW1lIiwic2V0Q3JlYXRlRG9jTmFtZSIsIl9SZWFjdCR1c2VTdGF0ZTEiLCJfUmVhY3QkdXNlU3RhdGUxMCIsImNyZWF0ZURvY0NvbnRlbnQiLCJzZXRDcmVhdGVEb2NDb250ZW50IiwiX1JlYWN0JHVzZVN0YXRlMTEiLCJfUmVhY3QkdXNlU3RhdGUxMiIsInNob3dDcmVhdGVEb2MiLCJzZXRTaG93Q3JlYXRlRG9jIiwiX1JlYWN0JHVzZVN0YXRlMTMiLCJfUmVhY3QkdXNlU3RhdGUxNCIsInJlY2VudERvY0lkIiwic2V0UmVjZW50RG9jSWQiLCJfUmVhY3QkdXNlU3RhdGUxNSIsIl9SZWFjdCR1c2VTdGF0ZTE2Iiwic2V0TmV0d29ya1N0YXR1c1RpY2siLCJfUmVhY3QkdXNlU3RhdGUxNyIsIl9SZWFjdCR1c2VTdGF0ZTE4IiwiY2F0YWxvZ0h0dHBGYWxsYmFja0Vycm9yIiwic2V0Q2F0YWxvZ0h0dHBGYWxsYmFja0Vycm9yIiwiX1JlYWN0JHVzZVN0YXRlMTkiLCJfUmVhY3QkdXNlU3RhdGUyMCIsImRvY3NTdGF0ZSIsInNldERvY3NTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIxIiwiX1JlYWN0JHVzZVN0YXRlMjIiLCJkaXN0cmlidXRlUHJvcG9zYWxzU3RhdGUiLCJzZXREaXN0cmlidXRlUHJvcG9zYWxzU3RhdGUiLCJuYXZpZ2F0ZSIsInVzZUVmZmVjdCIsImJ1bXAiLCJ3aW5kb3ciLCJ1bmRlZmluZWQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImJyaWRnZVJlZiIsImN1cnJlbnQiLCJoYXNFbmNyeXB0aW9uS2V5IiwiaGFzRG9jdW1lbnRFbmNyeXB0aW9uS2V5IiwibmV0d29ya1N0YXR1cyIsImxhc3ROZXR3b3JrU3RhdHVzIiwiaGFzTmV0d29ya1NuYXBzaG90IiwicHVibGlzaGVkUmF3IiwicHVibGlzaGVkRG9jdW1lbnRzIiwiaW5kZXhlZCIsImZhYnJpY1BlZXJJZCIsImRvY3VtZW50TWFya2V0IiwiZG9jdW1lbnRNYXJrZXRBY2N1bXVsYXRlIiwiYWNjdW11bGF0ZVBlZXJJbnZlbnRvcmllcyIsInNlcnZlckZsYWdzIiwiZGlzdHJpYnV0ZUVuYWJsZWQiLCJkaXN0cmlidXRlIiwiZG9jdW1lbnRzTG9hZGluZ1N1YnRleHQiLCJoYW5kbGVyIiwiZXZlbnQiLCJncyIsImRldGFpbCIsImdsb2JhbFN0YXRlIiwiZG9jdW1lbnRzIiwiYnJpZGdlSW5zdGFuY2UiLCJ0aW1lciIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJvbkxpc3REb2N1bWVudHMiLCJjYW5jZWxsZWQiLCJxdWV1ZU1pY3JvdGFzayIsImJyaWRnZSIsIm9yaWdpbiIsImxvY2F0aW9uIiwiYXBwbHlIdWJOZXR3b3JrU3RhdHVzUGF5bG9hZCIsIm1lcmdlTGlzdERvY3VtZW50c1JwY1Jlc3VsdCIsImhlYWRlcnMiLCJBY2NlcHQiLCJwYXJzZVJwYyIsImpzb24iLCJhbGwiLCJhcHBsaWVkIiwiYXBwbGllZFZpYUh5ZHJhdGUiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwianNvbnJwYyIsImlkIiwicGFyYW1zIiwiX3JlZiIsIl9jYWxsZWUiLCJfdCIsIl90MiIsIl90MyIsIl9jb250ZXh0Iiwib2siLCJzdGF0dXMiLCJfeCIsIl9yZWYyIiwiX3JlZjMiLCJucyIsImxpc3QiLCJuc0FwcGxpZWQiLCJsaXN0Qm9keSIsImxpc3RBcHBsaWVkIiwicmVzdWx0IiwibGlzdEVyciIsImh0dHBCYWQiLCJwYXJ0cyIsImFsbERvY3MiLCJ2YWx1ZXMiLCJkb2NzQnlJZCIsIl9pdGVyYXRvciIsIl9zdGVwIiwiaXNMb2NhbCIsInNvdXJjZSIsImxvY2FsIiwiX2xvb3AiLCJfT2JqZWN0JHZhbHVlcyIsIl9pIiwic2hhIiwidGFyZ2V0SWQiLCJsb2NhbE1hdGNoIiwiZmluZCIsImRTaGEiLCJleGlzdGluZyIsImlzUHVibGlzaGVkIiwiZG9jcyIsInNvcnQiLCJkb2NzUmVzZXRLZXkiLCJfdXNlSHViTGlzdFBhZ2luYXRpb24iLCJkb2NzU2xpY2UiLCJkb2NzTGlzdEFjdGl2ZVBhZ2UiLCJwYWdlIiwiZG9jc1RvdGFsUGFnZXMiLCJ0b3RhbFBhZ2VzIiwiZG9jc1JhbmdlRnJvbSIsInJhbmdlRnJvbSIsImRvY3NSYW5nZVRvIiwicmFuZ2VUbyIsImRvY3NMaXN0VG90YWwiLCJ0b3RhbCIsInNldERvY3NMaXN0UGFnZSIsInNldFBhZ2UiLCJvblBpY2tGaWxlIiwiX3JlZjQiLCJfY2FsbGVlMiIsImNvbnRlbnRCYXNlNjQiLCJwYXlsb2FkIiwiYWN0b3IiLCJfbWV0YSIsIl90NCIsIl9jb250ZXh0MiIsImFycmF5QnVmZmVyIiwibWltZSIsInR5cGUiLCJzaXplIiwiY29udGVudCIsIm9uQWRkTG9jYWxEb2N1bWVudCIsIm9uQ3JlYXRlRG9jdW1lbnQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJfeDIiLCJ0cmltIiwidGV4dCIsImVuY29kZXIiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImdhcCIsImZsZXhXcmFwIiwibWFyZ2luQm90dG9tIiwicm9sZSIsImJhc2ljIiwiYXMiLCJ0byIsInBvc2l0aW9uIiwibWFyZ2luIiwid2lkdGgiLCJoZWlnaHQiLCJwYWRkaW5nIiwib3ZlcmZsb3ciLCJjbGlwIiwid2hpdGVTcGFjZSIsImJvcmRlciIsInRpdGxlIiwidmVydGljYWxBbGlnbiIsIndhcm5pbmciLCJvbkRpc21pc3MiLCJjb2xvciIsImZvbnRTaXplIiwiaWRNb2RlIiwiaWRlbnRpdHkiLCJpbmZvIiwiZm9udFdlaWdodCIsIkZyYWdtZW50IiwibG9hZGluZyIsImljb24iLCJsYWJlbFBvc2l0aW9uIiwib25DbGljayIsIm1hcmdpblRvcCIsIm1heFdpZHRoIiwiRmllbGQiLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwidGFyZ2V0IiwiVGV4dEFyZWEiLCJyb3dzIiwiZm9udEZhbWlseSIsInByaW1hcnkiLCJkaXNhYmxlZCIsImZpbGVzIiwibmVnYXRpdmUiLCJlbWJlZGRlZCIsInNlbmRSZWZyZXNoRG9jdW1lbnRNYXJrZXRSZXF1ZXN0IiwicmVwdWJsaXNoV2l0aE1hcmt1cCIsIm1hcmt1cEJwcyIsIm1hcmt1cFNhdHMiLCJvZmZlckNvdW50IiwibWluSGVpZ2h0IiwianVzdGlmeUNvbnRlbnQiLCJhY3RpdmUiLCJpbmxpbmUiLCJ0ZXh0QWxpZ24iLCJTdWJoZWFkZXIiLCJkaXZpZGVkIiwicmVsYXhlZCIsImRvYyIsImxhYmVscyIsImtleSIsIm1hcmdpbkxlZnQiLCJjb250ZW50RW5jcnlwdGVkIiwiaXNCaXRjb2luQmxvY2tEb2MiLCJzdGFydHNXaXRoIiwiaXNCaXRjb2luVHhEb2MiLCJzdG9yYWdlQ29udHJhY3RJZCIsInN0b3JhZ2VMMVN0YXR1cyIsInN0IiwiY29uZiIsImNvbmZpcm1hdGlvbnMiLCJwYXlDb2xvciIsInBheVRleHQiLCJwYXlUaXRsZSIsImlzTmFOIiwiaW5NZW1wb29sIiwiYmVzdFBlZXJQcmljZVNhdHMiLCJwdXJjaGFzZVByaWNlU2F0cyIsImlzUmVjZW50IiwiaXRlbVN0eWxlIiwiYmFja2dyb3VuZCIsInRyYW5zZm9ybSIsInRyYW5zaXRpb24iLCJJdGVtIiwiQ29udGVudCIsIkRlc2NyaXB0aW9uIiwiY3JlYXRlZCIsIkRhdGUiLCJ0b0xvY2FsZVN0cmluZyIsImxpbmVhZ2UiLCJhY3RpdmVQYWdlIiwib25QYWdlQ2hhbmdlIiwiZmxleCIsIm1pbldpZHRoIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/DocumentList.js\n\n}')},"./components/DocumentView.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n// Dependencies\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link,\n useParams = _require.useParams,\n useLocation = _require.useLocation,\n useNavigate = _require.useNavigate;\n\n// Semantic UI\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Card = _require2.Card,\n Divider = _require2.Divider,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Label = _require2.Label,\n List = _require2.List,\n Loader = _require2.Loader,\n Message = _require2.Message,\n Modal = _require2.Modal,\n Input = _require2.Input,\n Segment = _require2.Segment,\n Form = _require2.Form,\n Dropdown = _require2.Dropdown;\nvar Invoice = __webpack_require__(/*! ./Invoice */ "./components/Invoice.js");\nvar GraphDocumentPreview = __webpack_require__(/*! ./GraphDocumentPreview */ "./components/GraphDocumentPreview.js");\nvar _require3 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require3.formatSatsDisplay;\nvar _require4 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n loadUpstreamSettings = _require4.loadUpstreamSettings,\n fetchTransactionByHash = _require4.fetchTransactionByHash,\n sendBridgePayment = _require4.sendBridgePayment;\nvar _require5 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require5.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require5.subscribeHubUiFeatureFlags;\nvar _require6 = __webpack_require__(/*! ../functions/hydrateHubNetworkStatusViaHttp */ "./functions/hydrateHubNetworkStatusViaHttp.js"),\n hydrateHubNetworkStatusViaHttp = _require6.hydrateHubNetworkStatusViaHttp;\nvar _require7 = __webpack_require__(/*! ../functions/hubIdentityUiHints */ "./functions/hubIdentityUiHints.js"),\n classifyHubBrowserIdentity = _require7.classifyHubBrowserIdentity,\n fabricIdentityNeedFullKeyPlain = _require7.fabricIdentityNeedFullKeyPlain;\nvar _require8 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require8.readHubAdminTokenFromBrowser;\nvar _require9 = __webpack_require__(/*! ../functions/hubServerFeatureFlags */ "./functions/hubServerFeatureFlags.js"),\n loadServerFeatureFlags = _require9.loadServerFeatureFlags;\nvar DEFAULT_PUBLISH_PRICE_SATS = \'25\';\nvar TXID_HEX_64 = /^[a-fA-F0-9]{64}$/;\nfunction shortHexId(value) {\n var s = String(value || \'\');\n if (!s) return \'—\';\n if (s.length <= 20) return s;\n return "".concat(s.slice(0, 10), "\\u2026").concat(s.slice(-8));\n}\n\n/** Resolve a document from Bridge `globalState.documents` by route id or content hash (case-insensitive hex). */\nfunction pickDocumentFromMap(documents, rawId) {\n if (!documents || rawId == null || rawId === \'\') return null;\n var id = String(rawId).trim();\n if (!id) return null;\n if (documents[id]) return documents[id];\n var lower = id.toLowerCase();\n if (documents[lower]) return documents[lower];\n for (var _i = 0, _Object$values = Object.values(documents); _i < _Object$values.length; _i++) {\n var d = _Object$values[_i];\n if (!d || _typeof(d) !== \'object\') continue;\n var did = d.id != null ? String(d.id) : \'\';\n var sha = d.sha256 != null ? String(d.sha256) : d.sha != null ? String(d.sha) : \'\';\n if (did === id || sha === id) return d;\n if (did.toLowerCase() === lower || sha.toLowerCase() === lower) return d;\n }\n return null;\n}\n\n/** Fabric TCP peers from GetNetworkStatus (excludes bridge/WebRTC signaling rows). */\nfunction fabricTcpPeersFromNetworkStatus(ns) {\n var peers = Array.isArray(ns && ns.peers) ? ns.peers : [];\n return peers.filter(function (p) {\n if (!p || _typeof(p) !== \'object\') return false;\n var pid = String(p.id || \'\');\n var address = String(p.address || \'\');\n var hasWebRTCMetadata = !!(p.metadata && Array.isArray(p.metadata.capabilities));\n if (pid.startsWith(\'fabric-bridge-\') || address.startsWith(\'fabric-bridge-\')) return false;\n if (hasWebRTCMetadata && p.status === \'registered\') return false;\n return true;\n });\n}\nfunction getAdminTokenFromProps(props) {\n var t = props && props.adminToken;\n if (t && String(t).trim()) return String(t).trim();\n return readHubAdminTokenFromBrowser();\n}\nfunction DocumentDetail(props) {\n var _props$bridgeRef, _props$bridgeRef2, _ref5, _props$bridgeRef3, _props$bridgeRef4;\n var params = useParams();\n var location = useLocation();\n var navigate = useNavigate();\n var encodedParam = params && params.id ? params.id : \'\';\n var hash = location && location.hash ? location.hash.replace(/^#/, \'\') : \'\';\n var rawId = encodedParam || hash;\n var id = rawId ? decodeURIComponent(rawId) : \'\';\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n doc = _React$useState2[0],\n setDoc = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n decryptedContent = _React$useState4[0],\n setDecryptedContent = _React$useState4[1];\n var _React$useState5 = React.useState(false),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n unlocked = _React$useState6[0],\n setUnlocked = _React$useState6[1];\n var _React$useState7 = React.useState(false),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n autoTriedDecrypt = _React$useState8[0],\n setAutoTriedDecrypt = _React$useState8[1];\n var _React$useState9 = React.useState(false),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n shareOpen = _React$useState0[0],\n setShareOpen = _React$useState0[1];\n var _React$useState1 = React.useState(false),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n isPublishing = _React$useState10[0],\n setIsPublishing = _React$useState10[1];\n var _React$useState11 = React.useState(null),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n publishError = _React$useState12[0],\n setPublishError = _React$useState12[1];\n var _React$useState13 = React.useState(false),\n _React$useState14 = _slicedToArray(_React$useState13, 2),\n distributeOpen = _React$useState14[0],\n setDistributeOpen = _React$useState14[1];\n var _React$useState15 = React.useState(false),\n _React$useState16 = _slicedToArray(_React$useState15, 2),\n distributeBusy = _React$useState16[0],\n setDistributeBusy = _React$useState16[1];\n var _React$useState17 = React.useState(\'\'),\n _React$useState18 = _slicedToArray(_React$useState17, 2),\n distributeAmountSats = _React$useState18[0],\n setDistributeAmountSats = _React$useState18[1];\n var _React$useState19 = React.useState(1),\n _React$useState20 = _slicedToArray(_React$useState19, 2),\n distributeDesiredCopies = _React$useState20[0],\n setDistributeDesiredCopies = _React$useState20[1];\n var _React$useState21 = React.useState(4),\n _React$useState22 = _slicedToArray(_React$useState21, 2),\n distributeDurationYears = _React$useState22[0],\n setDistributeDurationYears = _React$useState22[1];\n var _React$useState23 = React.useState(\'daily\'),\n _React$useState24 = _slicedToArray(_React$useState23, 2),\n distributeCadence = _React$useState24[0],\n setDistributeCadence = _React$useState24[1];\n var _React$useState25 = React.useState(\'10s\'),\n _React$useState26 = _slicedToArray(_React$useState25, 2),\n distributeDeadline = _React$useState26[0],\n setDistributeDeadline = _React$useState26[1];\n var _React$useState27 = React.useState(null),\n _React$useState28 = _slicedToArray(_React$useState27, 2),\n distributeError = _React$useState28[0],\n setDistributeError = _React$useState28[1];\n var _React$useState29 = React.useState(null),\n _React$useState30 = _slicedToArray(_React$useState29, 2),\n distributeInvoice = _React$useState30[0],\n setDistributeInvoice = _React$useState30[1];\n var _React$useState31 = React.useState(\'\'),\n _React$useState32 = _slicedToArray(_React$useState31, 2),\n distributeTxid = _React$useState32[0],\n setDistributeTxid = _React$useState32[1];\n var _React$useState33 = React.useState(null),\n _React$useState34 = _slicedToArray(_React$useState33, 2),\n distributeSuccessContractId = _React$useState34[0],\n setDistributeSuccessContractId = _React$useState34[1];\n var _React$useState35 = React.useState(null),\n _React$useState36 = _slicedToArray(_React$useState35, 2),\n distributeTxChain = _React$useState36[0],\n setDistributeTxChain = _React$useState36[1];\n var _React$useState37 = React.useState(false),\n _React$useState38 = _slicedToArray(_React$useState37, 2),\n distributeBridgeBusy = _React$useState38[0],\n setDistributeBridgeBusy = _React$useState38[1];\n var _React$useState39 = React.useState(\'\'),\n _React$useState40 = _slicedToArray(_React$useState39, 2),\n peerOfferKey = _React$useState40[0],\n setPeerOfferKey = _React$useState40[1];\n var _React$useState41 = React.useState(false),\n _React$useState42 = _slicedToArray(_React$useState41, 2),\n peerOfferBusy = _React$useState42[0],\n setPeerOfferBusy = _React$useState42[1];\n var _React$useState43 = React.useState(null),\n _React$useState44 = _slicedToArray(_React$useState43, 2),\n peerOfferError = _React$useState44[0],\n setPeerOfferError = _React$useState44[1];\n var _React$useState45 = React.useState(null),\n _React$useState46 = _slicedToArray(_React$useState45, 2),\n peerOfferSuccess = _React$useState46[0],\n setPeerOfferSuccess = _React$useState46[1];\n var _React$useState47 = React.useState(0),\n _React$useState48 = _slicedToArray(_React$useState47, 2),\n peerListTick = _React$useState48[0],\n setPeerListTick = _React$useState48[1];\n var _React$useState49 = React.useState(DEFAULT_PUBLISH_PRICE_SATS),\n _React$useState50 = _slicedToArray(_React$useState49, 2),\n publishPriceSats = _React$useState50[0],\n setPublishPriceSats = _React$useState50[1];\n var _React$useState51 = React.useState(false),\n _React$useState52 = _slicedToArray(_React$useState51, 2),\n purchaseOpen = _React$useState52[0],\n setPurchaseOpen = _React$useState52[1];\n var _React$useState53 = React.useState(null),\n _React$useState54 = _slicedToArray(_React$useState53, 2),\n purchaseInvoice = _React$useState54[0],\n setPurchaseInvoice = _React$useState54[1];\n var _React$useState55 = React.useState(\'\'),\n _React$useState56 = _slicedToArray(_React$useState55, 2),\n purchaseTxid = _React$useState56[0],\n setPurchaseTxid = _React$useState56[1];\n var _React$useState57 = React.useState(false),\n _React$useState58 = _slicedToArray(_React$useState57, 2),\n purchaseBusy = _React$useState58[0],\n setPurchaseBusy = _React$useState58[1];\n var _React$useState59 = React.useState(false),\n _React$useState60 = _slicedToArray(_React$useState59, 2),\n purchaseBridgeBusy = _React$useState60[0],\n setPurchaseBridgeBusy = _React$useState60[1];\n var _React$useState61 = React.useState(null),\n _React$useState62 = _slicedToArray(_React$useState61, 2),\n purchaseError = _React$useState62[0],\n setPurchaseError = _React$useState62[1];\n var _React$useState63 = React.useState(null),\n _React$useState64 = _slicedToArray(_React$useState63, 2),\n purchasedContent = _React$useState64[0],\n setPurchasedContent = _React$useState64[1];\n var _React$useState65 = React.useState(null),\n _React$useState66 = _slicedToArray(_React$useState65, 2),\n contractPayTx = _React$useState66[0],\n setContractPayTx = _React$useState66[1];\n var _React$useState67 = React.useState(\'\'),\n _React$useState68 = _slicedToArray(_React$useState67, 2),\n htlcPreimageHex = _React$useState68[0],\n setHtlcPreimageHex = _React$useState68[1];\n var _React$useState69 = React.useState(false),\n _React$useState70 = _slicedToArray(_React$useState69, 2),\n htlcUnlockBusy = _React$useState70[0],\n setHtlcUnlockBusy = _React$useState70[1];\n var _React$useState71 = React.useState(null),\n _React$useState72 = _slicedToArray(_React$useState71, 2),\n htlcUnlockError = _React$useState72[0],\n setHtlcUnlockError = _React$useState72[1];\n var _React$useState73 = React.useState(false),\n _React$useState74 = _slicedToArray(_React$useState73, 2),\n tombstoneOpen = _React$useState74[0],\n setTombstoneOpen = _React$useState74[1];\n var _React$useState75 = React.useState(false),\n _React$useState76 = _slicedToArray(_React$useState75, 2),\n tombstoneBusy = _React$useState76[0],\n setTombstoneBusy = _React$useState76[1];\n var _React$useState77 = React.useState(null),\n _React$useState78 = _slicedToArray(_React$useState77, 2),\n tombstoneError = _React$useState78[0],\n setTombstoneError = _React$useState78[1];\n var _React$useState79 = React.useState(null),\n _React$useState80 = _slicedToArray(_React$useState79, 2),\n loadError = _React$useState80[0],\n setLoadError = _React$useState80[1];\n var _React$useState81 = React.useState(0),\n _React$useState82 = _slicedToArray(_React$useState81, 2),\n hubUiTick = _React$useState82[0],\n setHubUiTick = _React$useState82[1];\n var _React$useState83 = React.useState(0),\n _React$useState84 = _slicedToArray(_React$useState83, 2),\n upstreamRev = _React$useState84[0],\n setUpstreamRev = _React$useState84[1];\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setHubUiTick(function (t) {\n return t + 1;\n });\n });\n }, []);\n void hubUiTick;\n var uf = loadHubUiFeatureFlags();\n var upstreamSettings = React.useMemo(function () {\n return loadUpstreamSettings();\n }, [upstreamRev]);\n React.useEffect(function () {\n var bump = function bump() {\n return setUpstreamRev(function (n) {\n return n + 1;\n });\n };\n if (typeof window === \'undefined\') return undefined;\n window.addEventListener(\'fabricBitcoinUpstreamChanged\', bump);\n var onStorage = function onStorage(ev) {\n if (ev && ev.key === \'fabric.bitcoin.upstream\') bump();\n };\n window.addEventListener(\'storage\', onStorage);\n return function () {\n window.removeEventListener(\'fabricBitcoinUpstreamChanged\', bump);\n window.removeEventListener(\'storage\', onStorage);\n };\n }, []);\n React.useEffect(function () {\n setLoadError(null);\n }, [id]);\n React.useEffect(function () {\n if (!id || typeof props.onGetDocument !== \'function\') return undefined;\n // Defer until after other DocumentView effects (e.g. globalStateUpdate listener) have run.\n var cancelled = false;\n queueMicrotask(function () {\n if (!cancelled) props.onGetDocument(id);\n });\n return function () {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n // If WebSocket GetDocument never merges into Bridge state, fall back to same-origin HTTP JSON-RPC (read-only).\n React.useEffect(function () {\n if (!id || doc) return undefined;\n var cancelled = false;\n var timer = setTimeout(function () {\n if (cancelled) return;\n var bridge = props.bridgeRef && props.bridgeRef.current;\n var gs = bridge && typeof bridge.getGlobalState === \'function\' ? bridge.getGlobalState() : null;\n if (pickDocumentFromMap(gs && gs.documents, id)) return;\n var origin = typeof window !== \'undefined\' && window.location && window.location.origin ? window.location.origin : \'\';\n if (!origin || !bridge || typeof bridge.mergeGetDocumentRpcResult !== \'function\') return;\n fetch("".concat(origin, "/services/rpc"), {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n },\n body: JSON.stringify({\n jsonrpc: \'2.0\',\n id: Date.now(),\n method: \'GetDocument\',\n params: [id]\n })\n }).then(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(r) {\n var body, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n body = null;\n _context.p = 1;\n _context.n = 2;\n return r.json();\n case 2:\n body = _context.v;\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n body = null;\n case 4:\n return _context.a(2, {\n ok: r.ok,\n status: r.status,\n body: body\n });\n }\n }, _callee, null, [[1, 3]]);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }()).then(function (_ref2) {\n var ok = _ref2.ok,\n status = _ref2.status,\n body = _ref2.body;\n if (cancelled) return;\n var fail = function fail(message) {\n if (typeof window === \'undefined\') return;\n window.dispatchEvent(new CustomEvent(\'documentLoadFailed\', {\n detail: {\n documentId: String(id),\n message: message\n }\n }));\n };\n if (!body || _typeof(body) !== \'object\') {\n if (!ok) fail("Could not load document (HTTP ".concat(status || \'error\', ")."));\n return;\n }\n if (body.error) {\n var err = body.error;\n var msg = err && (err.message != null || err.data != null) ? String(err.message != null ? err.message : err.data) : \'Hub refused the document request.\';\n fail(msg);\n return;\n }\n if (body.result == null) {\n if (!ok) fail("Could not load document (HTTP ".concat(status || \'error\', ")."));\n return;\n }\n var applied = bridge.mergeGetDocumentRpcResult(body.result);\n if (!applied && body.result && body.result.type === \'GetDocumentResult\') {\n fail(body.result.message && String(body.result.message) || \'Document could not be loaded from the hub.\');\n }\n })["catch"](function (err) {\n if (cancelled) return;\n if (typeof window === \'undefined\') return;\n window.dispatchEvent(new CustomEvent(\'documentLoadFailed\', {\n detail: {\n documentId: String(id),\n message: err && err.message ? err.message : \'Network error while loading document from hub.\'\n }\n }));\n });\n }, 2000);\n return function () {\n cancelled = true;\n clearTimeout(timer);\n };\n }, [id, doc, props.bridgeRef]);\n React.useEffect(function () {\n var handler = function handler(e) {\n var d = e && e.detail;\n if (!d || d.documentId == null) return;\n var docId = String(d.documentId);\n var match = docId === String(id) || doc && (doc.sha256 === docId || doc.sha === docId);\n if (!match) return;\n setLoadError(d.message || \'Document not found.\');\n };\n if (typeof window !== \'undefined\') {\n window.addEventListener(\'documentLoadFailed\', handler);\n return function () {\n return window.removeEventListener(\'documentLoadFailed\', handler);\n };\n }\n return undefined;\n }, [id, doc]);\n React.useEffect(function () {\n if (!id || doc) return undefined;\n var t = setTimeout(function () {\n setLoadError(function (prev) {\n return prev || \'No response from hub while loading this document. Check your connection or try Refresh.\';\n });\n }, 22000);\n return function () {\n return clearTimeout(t);\n };\n }, [id, doc]);\n React.useEffect(function () {\n setPublishPriceSats(DEFAULT_PUBLISH_PRICE_SATS);\n setPublishError(null);\n }, [id]);\n React.useEffect(function () {\n setPeerOfferKey(\'\');\n setPeerOfferBusy(false);\n setPeerOfferError(null);\n setPeerOfferSuccess(null);\n }, [id]);\n React.useEffect(function () {\n setHtlcPreimageHex(\'\');\n setHtlcUnlockError(null);\n setHtlcUnlockBusy(false);\n }, [id, doc === null || doc === void 0 ? void 0 : doc.htlcPendingDecrypt]);\n\n // Listen for pay-to-distribute invoice; show payment step when it matches this document\n React.useEffect(function () {\n var handler = function handler(e) {\n var detail = e && e.detail;\n if (!detail || !detail.documentId) return;\n var docId = detail.documentId;\n var match = docId === id || doc && (doc.sha256 === docId || doc.sha === docId);\n if (match) {\n setDistributeInvoice({\n address: detail.address,\n amountSats: detail.amountSats,\n config: detail.config,\n network: detail.network\n });\n setDistributeTxid(\'\');\n setDistributeBusy(false);\n setDistributeError(null);\n }\n };\n window.addEventListener(\'distributeInvoiceReady\', handler);\n return function () {\n return window.removeEventListener(\'distributeInvoiceReady\', handler);\n };\n }, [id, doc]);\n React.useEffect(function () {\n var handler = function handler(e) {\n var detail = e && e.detail;\n if (!detail || !detail.documentId) return;\n var docId = detail.documentId;\n var match = docId === id || doc && (doc.sha256 === docId || doc.sha === docId);\n if (!match) return;\n setDistributeBusy(false);\n setDistributeInvoice(null);\n setDistributeError(String(detail.message || \'Could not create distribute invoice\'));\n };\n window.addEventListener(\'distributeInvoiceFailed\', handler);\n return function () {\n return window.removeEventListener(\'distributeInvoiceFailed\', handler);\n };\n }, [id, doc]);\n\n // If CreateDistributeInvoice never returns over WebSocket, retry via same-origin HTTP JSON-RPC.\n React.useEffect(function () {\n if (!distributeOpen || distributeInvoice || distributeSuccessContractId || !distributeBusy) return undefined;\n var cancelled = false;\n var t = setTimeout(function () {\n if (cancelled) return;\n var bridge = props.bridgeRef && props.bridgeRef.current;\n var backendId = doc && doc.sha256 ? String(doc.sha256) : String(id);\n if (!bridge || typeof bridge.mergeCreateDistributeInvoiceRpcResult !== \'function\' || !backendId) return;\n var amount = parseInt(distributeAmountSats, 10);\n if (!Number.isFinite(amount) || amount <= 0) return;\n var origin = typeof window !== \'undefined\' && window.location && window.location.origin ? window.location.origin : \'\';\n if (!origin) return;\n var config = {\n documentId: backendId,\n amountSats: amount,\n desiredCopies: Math.max(1, parseInt(distributeDesiredCopies, 10) || 1),\n durationYears: distributeDurationYears,\n challengeCadence: distributeCadence,\n responseDeadline: distributeDeadline\n };\n fetch("".concat(origin, "/services/rpc"), {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n },\n body: JSON.stringify({\n jsonrpc: \'2.0\',\n id: Date.now(),\n method: \'CreateDistributeInvoice\',\n params: [config]\n })\n }).then(function (r) {\n return r.json();\n }).then(function (body) {\n if (cancelled || !body || body.result == null) return;\n bridge.mergeCreateDistributeInvoiceRpcResult(body.result);\n })["catch"](function () {});\n }, 2500);\n return function () {\n cancelled = true;\n clearTimeout(t);\n };\n }, [distributeOpen, distributeInvoice, distributeSuccessContractId, distributeBusy, id, doc, distributeAmountSats, distributeDesiredCopies, distributeDurationYears, distributeCadence, distributeDeadline, props.bridgeRef]);\n\n // Waiting for CreateDistributeInvoice (step 1) — avoid stuck loading if the hub never answers\n React.useEffect(function () {\n if (!distributeOpen || distributeInvoice || distributeSuccessContractId || !distributeBusy) return undefined;\n var t = setTimeout(function () {\n setDistributeBusy(false);\n setDistributeError(function (prev) {\n return prev || \'Timed out waiting for a distribute invoice from the hub. Check Bitcoin and try Request invoice again.\';\n });\n }, 45000);\n return function () {\n return clearTimeout(t);\n };\n }, [distributeOpen, distributeInvoice, distributeSuccessContractId, distributeBusy]);\n\n // When payment is bonded (contract created), show success in the distribute modal\n React.useEffect(function () {\n var handler = function handler(e) {\n var detail = e && e.detail;\n if (!detail || !detail.contractId || !detail.documentId) return;\n var docId = detail.documentId;\n var match = docId === id || doc && (doc.sha256 === docId || doc.sha === docId);\n if (match && distributeOpen) {\n setDistributeSuccessContractId(detail.contractId);\n setDistributeBusy(false);\n }\n };\n window.addEventListener(\'storageContractBonded\', handler);\n return function () {\n return window.removeEventListener(\'storageContractBonded\', handler);\n };\n }, [id, doc, distributeOpen]);\n React.useEffect(function () {\n var handler = function handler(e) {\n var detail = e && e.detail;\n if (!detail || !detail.documentId) return;\n var docId = detail.documentId;\n var match = docId === id || doc && (doc.sha256 === docId || doc.sha === docId);\n if (!match || !distributeOpen) return;\n setDistributeBusy(false);\n setDistributeError(detail.message || \'Create storage contract failed.\');\n };\n window.addEventListener(\'storageContractBondFailed\', handler);\n return function () {\n return window.removeEventListener(\'storageContractBondFailed\', handler);\n };\n }, [id, doc, distributeOpen]);\n\n // Timeout fallback if storageContractBonded never arrives\n React.useEffect(function () {\n if (!distributeBusy || distributeSuccessContractId) return;\n var timeout = setTimeout(function () {\n setDistributeBusy(false);\n setDistributeError(\'Contract creation is taking longer than expected. Check the contract list or try again.\');\n }, 15000);\n return function () {\n return clearTimeout(timeout);\n };\n }, [distributeBusy, distributeSuccessContractId]);\n React.useEffect(function () {\n var bump = function bump() {\n return setPeerListTick(function (t) {\n return t + 1;\n });\n };\n if (typeof window === \'undefined\') return undefined;\n window.addEventListener(\'networkStatusUpdate\', bump);\n window.addEventListener(\'globalStateUpdate\', bump);\n return function () {\n window.removeEventListener(\'networkStatusUpdate\', bump);\n window.removeEventListener(\'globalStateUpdate\', bump);\n };\n }, []);\n React.useEffect(function () {\n var handler = function handler(e) {\n var d = e && e.detail;\n if (!d || d.documentId == null) return;\n var docId = String(d.documentId);\n var match = docId === String(id) || doc && (doc.sha256 === docId || doc.sha === docId);\n if (!match) return;\n setPeerOfferBusy(false);\n setPeerOfferError(null);\n var pid = d.proposalId ? String(d.proposalId) : \'\';\n setPeerOfferSuccess(pid ? "Hosting offer sent (".concat(shortHexId(pid), "). When the peer accepts, pay their invoice to bond storage.") : \'Hosting offer sent. When the peer accepts, pay their invoice to bond storage.\');\n };\n window.addEventListener(\'distributeProposalSent\', handler);\n return function () {\n return window.removeEventListener(\'distributeProposalSent\', handler);\n };\n }, [id, doc]);\n React.useEffect(function () {\n var handler = function handler(e) {\n var d = e && e.detail;\n if (!d || d.documentId == null) return;\n var docId = String(d.documentId);\n var match = docId === String(id) || doc && (doc.sha256 === docId || doc.sha === docId);\n if (!match) return;\n setPeerOfferBusy(false);\n setPeerOfferSuccess(null);\n setPeerOfferError(String(d.message || \'Could not send hosting offer\'));\n };\n window.addEventListener(\'distributeProposalFailed\', handler);\n return function () {\n return window.removeEventListener(\'distributeProposalFailed\', handler);\n };\n }, [id, doc]);\n React.useEffect(function () {\n if (!peerOfferBusy) return undefined;\n var t = setTimeout(function () {\n setPeerOfferBusy(false);\n setPeerOfferError(function (prev) {\n return prev || \'Timed out waiting for a response from the hub.\';\n });\n }, 45000);\n return function () {\n return clearTimeout(t);\n };\n }, [peerOfferBusy]);\n\n // Listen for HTLC purchase invoice\n React.useEffect(function () {\n var handler = function handler(e) {\n var detail = e && e.detail;\n if (!detail || !detail.documentId) return;\n var docId = detail.documentId;\n var match = docId === id || doc && (doc.sha256 === docId || doc.sha === docId);\n if (match && purchaseOpen) {\n setPurchaseInvoice({\n address: detail.address,\n amountSats: detail.amountSats,\n contentHash: detail.contentHash,\n network: detail.network\n });\n setPurchaseTxid(\'\');\n setPurchaseError(null);\n }\n };\n window.addEventListener(\'purchaseInvoiceReady\', handler);\n return function () {\n return window.removeEventListener(\'purchaseInvoiceReady\', handler);\n };\n }, [id, doc, purchaseOpen]);\n React.useEffect(function () {\n var handler = function handler(e) {\n var detail = e && e.detail;\n if (!detail || !detail.documentId) return;\n var docId = detail.documentId;\n var match = docId === id || doc && (doc.sha256 === docId || doc.sha === docId);\n if (match && purchaseOpen) {\n setPurchaseInvoice(null);\n setPurchaseError(String(detail.message || \'Could not create purchase invoice\'));\n }\n };\n window.addEventListener(\'purchaseInvoiceFailed\', handler);\n return function () {\n return window.removeEventListener(\'purchaseInvoiceFailed\', handler);\n };\n }, [id, doc, purchaseOpen]);\n\n // If the hub never answers, avoid an infinite "Requesting invoice…" state.\n React.useEffect(function () {\n if (!purchaseOpen || purchaseInvoice || purchasedContent) return undefined;\n var t = setTimeout(function () {\n setPurchaseError(function (prev) {\n return prev || \'Timed out waiting for a purchase invoice from the hub. Check Bitcoin, publish status, and list price, then close and try Purchase again.\';\n });\n }, 45000);\n return function () {\n return clearTimeout(t);\n };\n }, [purchaseOpen, purchaseInvoice, purchasedContent]);\n React.useEffect(function () {\n var handler = function handler(event) {\n var gs = event && event.detail && event.detail.globalState;\n if (!gs || !gs.documents) return;\n var candidate = pickDocumentFromMap(gs.documents, id);\n if (candidate) {\n setLoadError(null);\n setDoc(candidate);\n setDecryptedContent(null);\n setUnlocked(false);\n if (candidate.published) {\n setIsPublishing(false);\n }\n }\n };\n window.addEventListener(\'globalStateUpdate\', handler);\n return function () {\n return window.removeEventListener(\'globalStateUpdate\', handler);\n };\n }, [id]);\n\n // On mount, hydrate from existing Bridge globalState so locally-added documents\n // are immediately visible without waiting for another event.\n React.useEffect(function () {\n try {\n var bridgeRef = props.bridgeRef;\n var current = bridgeRef && bridgeRef.current;\n if (!current || typeof current.getGlobalState !== \'function\') return;\n var gs = current.getGlobalState();\n if (!gs || !gs.documents) return;\n var candidate = pickDocumentFromMap(gs.documents, id);\n if (candidate) {\n setLoadError(null);\n setDoc(candidate);\n setDecryptedContent(null);\n setUnlocked(false);\n }\n } catch (e) {}\n }, [id, props.bridgeRef]);\n\n // Stop "publishing…" state once the document has a published timestamp,\n // or after a safety timeout if the hub reports an error.\n React.useEffect(function () {\n var _bridge$networkStatus, _bridge$lastNetworkSt;\n var bridge = props.bridgeRef && props.bridgeRef.current;\n var publishedDocs = bridge && (((_bridge$networkStatus = bridge.networkStatus) === null || _bridge$networkStatus === void 0 ? void 0 : _bridge$networkStatus.publishedDocuments) || ((_bridge$lastNetworkSt = bridge.lastNetworkStatus) === null || _bridge$lastNetworkSt === void 0 ? void 0 : _bridge$lastNetworkSt.publishedDocuments));\n var pub = !!(doc && (doc.published || publishedDocs && (publishedDocs[doc.id] || doc.sha256 && publishedDocs[doc.sha256])));\n if (doc && pub) {\n setIsPublishing(false);\n setPublishError(null);\n return;\n }\n if (!isPublishing) return;\n var timeout = setTimeout(function () {\n setIsPublishing(false);\n setPublishError(function (prev) {\n return prev || \'No publish confirmation from the hub yet. Check your connection or try again.\';\n });\n }, 10000);\n return function () {\n return clearTimeout(timeout);\n };\n }, [doc, doc === null || doc === void 0 ? void 0 : doc.published, doc === null || doc === void 0 ? void 0 : doc.id, doc === null || doc === void 0 ? void 0 : doc.sha256, isPublishing, props.bridgeRef, peerListTick]);\n\n // If the WebSocket drops the publish result, resync catalog + document row over HTTP (same-origin RPC).\n React.useEffect(function () {\n if (!isPublishing || !doc) return undefined;\n var backendId = String(doc.sha256 || doc.id || id || \'\').trim();\n if (!backendId) return undefined;\n var cancelled = false;\n var timer = setTimeout(function () {\n if (cancelled) return;\n var bridge = props.bridgeRef && props.bridgeRef.current;\n var origin = typeof window !== \'undefined\' && window.location && window.location.origin ? window.location.origin : \'\';\n if (!bridge || !origin) return;\n _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var r, body, _t2, _t3;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n _context2.p = 0;\n _context2.n = 1;\n return hydrateHubNetworkStatusViaHttp(bridge, origin);\n case 1:\n _context2.n = 3;\n break;\n case 2:\n _context2.p = 2;\n _t2 = _context2.v;\n case 3:\n if (!cancelled) {\n _context2.n = 4;\n break;\n }\n return _context2.a(2);\n case 4:\n _context2.p = 4;\n _context2.n = 5;\n return fetch("".concat(origin, "/services/rpc"), {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n },\n body: JSON.stringify({\n jsonrpc: \'2.0\',\n id: Date.now(),\n method: \'GetDocument\',\n params: [backendId]\n })\n });\n case 5:\n r = _context2.v;\n _context2.n = 6;\n return r.json()["catch"](function () {\n return null;\n });\n case 6:\n body = _context2.v;\n if (!(cancelled || !body || body.result == null || typeof bridge.mergeGetDocumentRpcResult !== \'function\')) {\n _context2.n = 7;\n break;\n }\n return _context2.a(2);\n case 7:\n bridge.mergeGetDocumentRpcResult(body.result);\n _context2.n = 9;\n break;\n case 8:\n _context2.p = 8;\n _t3 = _context2.v;\n case 9:\n return _context2.a(2);\n }\n }, _callee2, null, [[4, 8], [0, 2]]);\n }))();\n }, 3500);\n return function () {\n cancelled = true;\n clearTimeout(timer);\n };\n }, [isPublishing, doc, id, props.bridgeRef]);\n React.useEffect(function () {\n var handler = function handler(e) {\n var d = e && e.detail;\n if (!d || d.documentId == null || String(d.documentId) === \'\') return;\n var docId = String(d.documentId);\n var match = docId === id || doc && (doc.sha256 === docId || doc.sha === docId);\n if (!match) return;\n setIsPublishing(false);\n setPublishError(String(d.message || \'Publish failed\'));\n };\n if (typeof window !== \'undefined\') {\n window.addEventListener(\'publishDocumentFailed\', handler);\n return function () {\n return window.removeEventListener(\'publishDocumentFailed\', handler);\n };\n }\n return undefined;\n }, [id, doc]);\n\n // Decrypt only when user clicks Unlock (for encrypted docs)\n var handleUnlock = React.useCallback(function () {\n if (!doc || decryptedContent !== null) return;\n if (!props.hasDocumentKey) {\n if (typeof props.onRequestUnlock === \'function\') {\n props.onRequestUnlock();\n }\n return;\n }\n var raw = doc.contentBase64 || typeof props.onGetDecryptedContent === \'function\' && props.onGetDecryptedContent(id);\n if (raw) setDecryptedContent(raw);\n setUnlocked(true);\n }, [doc, id, decryptedContent, props.hasDocumentKey, props.onGetDecryptedContent, props.onRequestUnlock]);\n var handleHtlcPreimageUnlock = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var r, _t4;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n if (!(!doc || !doc.htlcPendingDecrypt || typeof props.onUnlockHtlcDocument !== \'function\')) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n setHtlcUnlockBusy(true);\n setHtlcUnlockError(null);\n _context3.p = 2;\n _context3.n = 3;\n return props.onUnlockHtlcDocument(id, htlcPreimageHex.trim());\n case 3:\n r = _context3.v;\n if (!r || !r.ok) {\n setHtlcUnlockError(r && r.error || \'Unlock failed.\');\n } else {\n setHtlcPreimageHex(\'\');\n setUnlocked(false);\n setDecryptedContent(null);\n }\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t4 = _context3.v;\n setHtlcUnlockError(_t4 && _t4.message || \'Unlock failed.\');\n case 5:\n _context3.p = 5;\n setHtlcUnlockBusy(false);\n return _context3.f(5);\n case 6:\n return _context3.a(2);\n }\n }, _callee3, null, [[2, 4, 5, 6]]);\n })), [doc, id, htlcPreimageHex, props.onUnlockHtlcDocument]);\n var isEncrypted = !!(doc && doc.contentEncrypted);\n var isHtlcPendingDecrypt = !!(doc && doc.htlcPendingDecrypt);\n var name = doc && doc.name || id;\n var mime = doc && doc.mime || \'application/octet-stream\';\n var created = doc && doc.created ? new Date(doc.created).toLocaleString() : \'\';\n // Published state: prefer hub global store (publishedDocuments) over doc.published\n var publishedDocs = ((_props$bridgeRef = props.bridgeRef) === null || _props$bridgeRef === void 0 || (_props$bridgeRef = _props$bridgeRef.current) === null || _props$bridgeRef === void 0 || (_props$bridgeRef = _props$bridgeRef.networkStatus) === null || _props$bridgeRef === void 0 ? void 0 : _props$bridgeRef.publishedDocuments) || ((_props$bridgeRef2 = props.bridgeRef) === null || _props$bridgeRef2 === void 0 || (_props$bridgeRef2 = _props$bridgeRef2.current) === null || _props$bridgeRef2 === void 0 || (_props$bridgeRef2 = _props$bridgeRef2.lastNetworkStatus) === null || _props$bridgeRef2 === void 0 ? void 0 : _props$bridgeRef2.publishedDocuments);\n var isPublishedInStore = !!(doc && (doc.published || publishedDocs && (publishedDocs[id] || doc.sha256 && publishedDocs[doc.sha256])));\n var publishedTs = (doc === null || doc === void 0 ? void 0 : doc.published) || publishedDocs && ((_ref5 = publishedDocs[id] || (doc === null || doc === void 0 ? void 0 : doc.sha256) && publishedDocs[doc.sha256]) === null || _ref5 === void 0 ? void 0 : _ref5.published);\n var publishedAt = publishedTs ? new Date(publishedTs).toLocaleString() : \'\';\n var storageContractId = doc && doc.storageContractId;\n var docPurchasePriceSats = doc && doc.purchasePriceSats;\n var canPurchase = !!(doc && isPublishedInStore && docPurchasePriceSats && docPurchasePriceSats > 0);\n /** Encrypted body (not HTLC preimage flow) requires an unlocked identity key to publish or decrypt. */\n var needsIdentityKeyForEncryptedBody = !!(doc && isEncrypted && !isHtlcPendingDecrypt && !props.hasDocumentKey);\n var fabricPeerId = ((_props$bridgeRef3 = props.bridgeRef) === null || _props$bridgeRef3 === void 0 || (_props$bridgeRef3 = _props$bridgeRef3.current) === null || _props$bridgeRef3 === void 0 || (_props$bridgeRef3 = _props$bridgeRef3.networkStatus) === null || _props$bridgeRef3 === void 0 ? void 0 : _props$bridgeRef3.fabricPeerId) || ((_props$bridgeRef4 = props.bridgeRef) === null || _props$bridgeRef4 === void 0 || (_props$bridgeRef4 = _props$bridgeRef4.current) === null || _props$bridgeRef4 === void 0 || (_props$bridgeRef4 = _props$bridgeRef4.lastNetworkStatus) === null || _props$bridgeRef4 === void 0 ? void 0 : _props$bridgeRef4.fabricPeerId) || null;\n var bridgeForWire = props.bridgeRef && props.bridgeRef.current;\n var serverFlags = loadServerFeatureFlags(bridgeForWire);\n var distributeEnabled = !!serverFlags.distribute;\n var documentPurchaseEnabled = serverFlags.documentPurchase !== false;\n var distributeModalNoLocalWire = !!(bridgeForWire && typeof bridgeForWire.hasLocalWireSigningKey === \'function\' && !bridgeForWire.hasLocalWireSigningKey());\n /** Publish / pay-to-distribute require an unlocked Fabric identity so JSON-RPC is Schnorr-signed and local bytes are available. */\n var needsIdentityUnlock = !props.hasDocumentKey;\n var authorDocId = doc && (doc.lineage || doc.id) ? String(doc.lineage || doc.id) : \'\';\n var fabricPeersForOffer = React.useMemo(function () {\n var cur = props.bridgeRef && props.bridgeRef.current;\n var ns = cur && (cur.networkStatus || cur.lastNetworkStatus);\n return fabricTcpPeersFromNetworkStatus(ns);\n }, [props.bridgeRef, peerListTick]);\n var fabricPeerDropdownOptions = React.useMemo(function () {\n return fabricPeersForOffer.map(function (p) {\n var addr = String(p.address || \'\').trim();\n var pid = String(p.id || \'\').trim();\n var value = pid || addr;\n var text = addr && pid && addr !== pid ? "".concat(addr, " (").concat(shortHexId(pid), ")") : addr || shortHexId(pid) || value;\n return {\n key: value,\n text: text,\n value: value\n };\n }).filter(function (o) {\n return o.value;\n });\n }, [fabricPeersForOffer]);\n var adminTokenResolved = String(readHubAdminTokenFromBrowser(props.adminToken)).trim();\n var canAdminUnpublish = !!(adminTokenResolved && doc && isPublishedInStore && id);\n var handleConfirmTombstone = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var token, bridge, canonicalDocId, r, refresh, _t5;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n if (id) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2);\n case 1:\n token = String(readHubAdminTokenFromBrowser(props.adminToken)).trim();\n if (token) {\n _context4.n = 2;\n break;\n }\n setTombstoneError(\'Admin token required.\');\n return _context4.a(2);\n case 2:\n bridge = props.bridgeRef && props.bridgeRef.current;\n if (!(!bridge || typeof bridge.emitTombstone !== \'function\')) {\n _context4.n = 3;\n break;\n }\n setTombstoneError(\'Bridge is not ready.\');\n return _context4.a(2);\n case 3:\n // Hub published catalog keys documents by content hash; URL may use lineage / actor id.\n canonicalDocId = doc && doc.sha256 ? String(doc.sha256).trim() : String(id).trim();\n setTombstoneBusy(true);\n setTombstoneError(null);\n _context4.p = 4;\n _context4.n = 5;\n return bridge.emitTombstone({\n documentId: canonicalDocId,\n adminToken: token\n });\n case 5:\n r = _context4.v;\n if (!(!r || !r.ok)) {\n _context4.n = 6;\n break;\n }\n setTombstoneError(r && r.message ? r.message : \'Unpublish failed. Check admin token and that the document is still in the hub published catalog.\');\n return _context4.a(2);\n case 6:\n setTombstoneOpen(false);\n refresh = function refresh() {\n if (bridge && typeof bridge.sendNetworkStatusRequest === \'function\') {\n bridge.sendNetworkStatusRequest();\n }\n if (typeof props.onGetDocument === \'function\') props.onGetDocument(id);\n };\n setTimeout(refresh, 400);\n _context4.n = 8;\n break;\n case 7:\n _context4.p = 7;\n _t5 = _context4.v;\n setTombstoneError(_t5 && _t5.message ? _t5.message : \'Unpublish failed.\');\n case 8:\n _context4.p = 8;\n setTombstoneBusy(false);\n return _context4.f(8);\n case 9:\n return _context4.a(2);\n }\n }, _callee4, null, [[4, 7, 8, 9]]);\n })), [id, props.adminToken, props.bridgeRef, props.onGetDocument]);\n\n // Never expose decrypted content when we don\'t currently have a document key,\n // even if contentBase64 is still present on the doc from a prior unlock.\n var rawContentBase64 = doc && (doc.contentBase64 || decryptedContent);\n var contentBase64 = props.hasDocumentKey ? rawContentBase64 : null;\n var downloadHref = null;\n if (contentBase64) {\n downloadHref = "data:".concat(mime, ";base64,").concat(contentBase64);\n }\n\n // Basic type helpers\n var looksText = mime && mime.startsWith(\'text/\') || /\\.(md|txt|json|js|ts|html|css|log|dot|gv)$/i.test(name || \'\');\n var looksImage = mime && mime.startsWith(\'image/\') || /\\.(png|jpe?g|gif|webp|svg)$/i.test(name || \'\');\n\n // Text preview (only when it looks like text)\n var text = null;\n if (contentBase64 && looksText && props.hasDocumentKey) {\n try {\n text = atob(contentBase64);\n } catch (e) {}\n }\n var showGraphPreview = !!(text != null && props.hasDocumentKey && typeof GraphDocumentPreview.looksLikeDotSource === \'function\' && GraphDocumentPreview.looksLikeDotSource(text, mime, name));\n\n // Image preview (data URL)\n var imageSrc = contentBase64 && looksImage ? "data:".concat(mime, ";base64,").concat(contentBase64) : null;\n\n // If the application is already unlocked and Bridge can decrypt, try once automatically so\n // the user doesn\'t have to click "Unlock" again just to view a document.\n React.useEffect(function () {\n if (!doc) return;\n if (!isEncrypted) return;\n if (contentBase64) return; // already have cleartext\n if (decryptedContent !== null) return;\n if (autoTriedDecrypt) return;\n if (typeof props.onGetDecryptedContent !== \'function\') return;\n setAutoTriedDecrypt(true);\n try {\n var raw = props.onGetDecryptedContent(id);\n if (raw) {\n setDecryptedContent(raw);\n setUnlocked(true);\n }\n } catch (e) {}\n }, [doc, id, isEncrypted, contentBase64, decryptedContent, autoTriedDecrypt, props.onGetDecryptedContent]);\n\n // When document key becomes unavailable (identity locked), drop any decrypted\n // content held in component state so the UI reflects the locked status.\n React.useEffect(function () {\n if (!props.hasDocumentKey) {\n setDecryptedContent(null);\n setAutoTriedDecrypt(false);\n }\n }, [props.hasDocumentKey]);\n\n // Storage contract L1 payment: load contract txid and mempool / confirmation depth\n React.useEffect(function () {\n var cid = doc && doc.storageContractId ? String(doc.storageContractId).trim() : \'\';\n if (!cid) {\n setContractPayTx(null);\n return;\n }\n var cancelled = false;\n setContractPayTx({\n loading: true\n });\n _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var res, body, c, txid, data, _t6;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.p = _context5.n) {\n case 0:\n _context5.p = 0;\n _context5.n = 1;\n return fetch("/contracts/".concat(encodeURIComponent(cid)), {\n method: \'GET\'\n });\n case 1:\n res = _context5.v;\n _context5.n = 2;\n return res.json();\n case 2:\n body = _context5.v;\n if (!cancelled) {\n _context5.n = 3;\n break;\n }\n return _context5.a(2);\n case 3:\n if (!(!res.ok || !body || body.status === \'error\')) {\n _context5.n = 4;\n break;\n }\n setContractPayTx({\n loading: false,\n error: body && body.message || \'Could not load contract.\'\n });\n return _context5.a(2);\n case 4:\n c = body.contract || body.result || body;\n txid = c && c.txid ? String(c.txid).trim() : \'\';\n if (txid) {\n _context5.n = 5;\n break;\n }\n setContractPayTx({\n loading: false,\n txid: null\n });\n return _context5.a(2);\n case 5:\n _context5.n = 6;\n return fetchTransactionByHash(upstreamSettings, txid);\n case 6:\n data = _context5.v;\n if (!cancelled) {\n _context5.n = 7;\n break;\n }\n return _context5.a(2);\n case 7:\n if (!(data && data.status === \'error\')) {\n _context5.n = 8;\n break;\n }\n setContractPayTx({\n loading: false,\n txid: txid,\n error: data.message || \'Could not load transaction.\'\n });\n return _context5.a(2);\n case 8:\n if (!(!data || _typeof(data) !== \'object\')) {\n _context5.n = 9;\n break;\n }\n setContractPayTx({\n loading: false,\n txid: txid,\n error: \'Transaction not found on this hub (or not indexed yet).\'\n });\n return _context5.a(2);\n case 9:\n setContractPayTx({\n loading: false,\n txid: txid,\n tx: data\n });\n _context5.n = 11;\n break;\n case 10:\n _context5.p = 10;\n _t6 = _context5.v;\n if (!cancelled) {\n setContractPayTx({\n loading: false,\n error: _t6 && _t6.message ? _t6.message : String(_t6)\n });\n }\n case 11:\n return _context5.a(2);\n }\n }, _callee5, null, [[0, 10]]);\n }))();\n return function () {\n cancelled = true;\n };\n }, [doc && doc.storageContractId, upstreamSettings]);\n\n // Distribute modal: poll funding tx depth while invoice step is open\n React.useEffect(function () {\n if (!distributeOpen || distributeSuccessContractId) {\n setDistributeTxChain(null);\n return;\n }\n var tx = String(distributeTxid || \'\').trim();\n if (!TXID_HEX_64.test(tx)) {\n setDistributeTxChain(null);\n return;\n }\n if (!distributeInvoice) {\n setDistributeTxChain(null);\n return;\n }\n var cancelled = false;\n var tick = /*#__PURE__*/function () {\n var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {\n var data, _t7;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.p = _context6.n) {\n case 0:\n _context6.p = 0;\n _context6.n = 1;\n return fetchTransactionByHash(upstreamSettings, tx);\n case 1:\n data = _context6.v;\n if (!cancelled) {\n _context6.n = 2;\n break;\n }\n return _context6.a(2);\n case 2:\n if (!(data && data.status === \'error\')) {\n _context6.n = 3;\n break;\n }\n setDistributeTxChain({\n loading: false,\n error: data.message || \'Tx not found\'\n });\n return _context6.a(2);\n case 3:\n setDistributeTxChain({\n loading: false,\n tx: data\n });\n _context6.n = 5;\n break;\n case 4:\n _context6.p = 4;\n _t7 = _context6.v;\n if (!cancelled) {\n setDistributeTxChain({\n loading: false,\n error: _t7 && _t7.message ? _t7.message : String(_t7)\n });\n }\n case 5:\n return _context6.a(2);\n }\n }, _callee6, null, [[0, 4]]);\n }));\n return function tick() {\n return _ref8.apply(this, arguments);\n };\n }();\n setDistributeTxChain({\n loading: true\n });\n tick();\n var iv = setInterval(tick, 12000);\n return function () {\n cancelled = true;\n clearInterval(iv);\n };\n }, [distributeOpen, distributeInvoice, distributeTxid, distributeSuccessContractId, upstreamSettings]);\n\n // URLs for sharing: canonical (path param) and hash-only (keeps id client-side).\n var shareUrlHash = \'\';\n var shareUrlCanonical = \'\';\n if (id && typeof window !== \'undefined\' && window.location) {\n var origin = window.location.origin;\n shareUrlHash = "".concat(origin, "/documents#").concat(encodeURIComponent(id));\n shareUrlCanonical = "".concat(origin, "/documents/").concat(encodeURIComponent(id));\n }\n var cadenceOptions = [{\n key: \'hourly\',\n value: \'hourly\',\n text: \'Hourly\'\n }, {\n key: \'daily\',\n value: \'daily\',\n text: \'Daily\'\n }, {\n key: \'weekly\',\n value: \'weekly\',\n text: \'Weekly\'\n }, {\n key: \'monthly\',\n value: \'monthly\',\n text: \'Monthly\'\n }];\n var deadlineOptions = [{\n key: \'1s\',\n value: \'1s\',\n text: \'1 second\'\n }, {\n key: \'5s\',\n value: \'5s\',\n text: \'5 seconds\'\n }, {\n key: \'10s\',\n value: \'10s\',\n text: \'10 seconds\'\n }, {\n key: \'30s\',\n value: \'30s\',\n text: \'30 seconds\'\n }, {\n key: \'60s\',\n value: \'60s\',\n text: \'60 seconds\'\n }, {\n key: \'10m\',\n value: \'10m\',\n text: \'10 minutes\'\n }, {\n key: \'60m\',\n value: \'60m\',\n text: \'60 minutes\'\n }];\n var hubAdminTokenPresent = !!getAdminTokenFromProps(props);\n var handlePayDistributeFromBridge = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {\n var token, to, amountSats, _distributeInvoice$co, _distributeInvoice$co2, _distributeInvoice$co3, res, txid, config, _t8;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.p = _context7.n) {\n case 0:\n if (!(!distributeInvoice || !id)) {\n _context7.n = 1;\n break;\n }\n return _context7.a(2);\n case 1:\n if (props.hasDocumentKey) {\n _context7.n = 2;\n break;\n }\n setDistributeError("".concat(fabricIdentityNeedFullKeyPlain(props.identity || {}), " Distribute bonding from this browser needs an unlocked signing session."));\n return _context7.a(2);\n case 2:\n token = getAdminTokenFromProps(props);\n if (token) {\n _context7.n = 3;\n break;\n }\n setDistributeError(\'Admin token required to pay from the hub wallet.\');\n return _context7.a(2);\n case 3:\n to = String(distributeInvoice.address || \'\').trim();\n amountSats = Math.round(Number(distributeInvoice.amountSats));\n if (!(!to || !Number.isFinite(amountSats) || amountSats <= 0)) {\n _context7.n = 4;\n break;\n }\n setDistributeError(\'Invalid distribute invoice (address or amount).\');\n return _context7.a(2);\n case 4:\n setDistributeBridgeBusy(true);\n setDistributeError(null);\n _context7.p = 5;\n _context7.n = 6;\n return sendBridgePayment(upstreamSettings, {\n to: to,\n amountSats: amountSats,\n memo: "Distribute ".concat(String(id).slice(0, 16))\n }, token);\n case 6:\n res = _context7.v;\n txid = res && res.payment && res.payment.txid ? String(res.payment.txid).trim() : \'\';\n if (txid) {\n _context7.n = 7;\n break;\n }\n throw new Error(res && res.message || \'Hub wallet did not return a txid.\');\n case 7:\n setDistributeTxid(txid);\n if (!(typeof props.onDistributeDocument !== \'function\')) {\n _context7.n = 8;\n break;\n }\n throw new Error(\'Distribute is not available on this hub.\');\n case 8:\n setDistributeBusy(true);\n config = {\n amountSats: distributeInvoice.amountSats,\n durationYears: ((_distributeInvoice$co = distributeInvoice.config) === null || _distributeInvoice$co === void 0 ? void 0 : _distributeInvoice$co.durationYears) || distributeDurationYears,\n challengeCadence: ((_distributeInvoice$co2 = distributeInvoice.config) === null || _distributeInvoice$co2 === void 0 ? void 0 : _distributeInvoice$co2.challengeCadence) || distributeCadence,\n responseDeadline: ((_distributeInvoice$co3 = distributeInvoice.config) === null || _distributeInvoice$co3 === void 0 ? void 0 : _distributeInvoice$co3.responseDeadline) || distributeDeadline,\n txid: txid\n };\n _context7.n = 9;\n return Promise.resolve(props.onDistributeDocument(id, config));\n case 9:\n _context7.n = 11;\n break;\n case 10:\n _context7.p = 10;\n _t8 = _context7.v;\n setDistributeBusy(false);\n setDistributeError(_t8 && _t8.message ? _t8.message : String(_t8));\n case 11:\n _context7.p = 11;\n setDistributeBridgeBusy(false);\n return _context7.f(11);\n case 12:\n return _context7.a(2);\n }\n }, _callee7, null, [[5, 10, 11, 12]]);\n })), [distributeInvoice, id, distributeDurationYears, distributeCadence, distributeDeadline, props.onDistributeDocument, props.adminToken, props.hasDocumentKey, upstreamSettings]);\n var handlePayPurchaseFromBridge = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {\n var token, to, amountSats, res, txid, out, _t9;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.p = _context8.n) {\n case 0:\n if (!(!purchaseInvoice || !id)) {\n _context8.n = 1;\n break;\n }\n return _context8.a(2);\n case 1:\n if (props.hasDocumentKey) {\n _context8.n = 2;\n break;\n }\n setPurchaseError("".concat(fabricIdentityNeedFullKeyPlain(props.identity || {}), " Purchase bonding from this browser needs an unlocked signing session."));\n return _context8.a(2);\n case 2:\n token = getAdminTokenFromProps(props);\n if (token) {\n _context8.n = 3;\n break;\n }\n setPurchaseError(\'Admin token required to pay from the hub wallet.\');\n return _context8.a(2);\n case 3:\n to = String(purchaseInvoice.address || \'\').trim();\n amountSats = Math.round(Number(purchaseInvoice.amountSats));\n if (!(!to || !Number.isFinite(amountSats) || amountSats <= 0)) {\n _context8.n = 4;\n break;\n }\n setPurchaseError(\'Invalid purchase invoice (address or amount).\');\n return _context8.a(2);\n case 4:\n if (!(typeof props.onClaimPurchase !== \'function\')) {\n _context8.n = 5;\n break;\n }\n setPurchaseError(\'Claim is not available on this hub.\');\n return _context8.a(2);\n case 5:\n setPurchaseBridgeBusy(true);\n setPurchaseError(null);\n _context8.p = 6;\n _context8.n = 7;\n return sendBridgePayment(upstreamSettings, {\n to: to,\n amountSats: amountSats,\n memo: "Purchase ".concat(String(id).slice(0, 16))\n }, token);\n case 7:\n res = _context8.v;\n txid = res && res.payment && res.payment.txid ? String(res.payment.txid).trim() : \'\';\n if (txid) {\n _context8.n = 8;\n break;\n }\n throw new Error(res && res.message || \'Hub wallet did not return a txid.\');\n case 8:\n setPurchaseTxid(txid);\n setPurchaseBusy(true);\n _context8.n = 9;\n return Promise.resolve(props.onClaimPurchase(id, txid));\n case 9:\n out = _context8.v;\n if (out && out.document) {\n setPurchasedContent(out.document);\n } else {\n setPurchaseError(out && out.error || \'Claim failed after hub wallet payment.\');\n }\n _context8.n = 11;\n break;\n case 10:\n _context8.p = 10;\n _t9 = _context8.v;\n setPurchaseError(_t9 && _t9.message ? _t9.message : String(_t9));\n case 11:\n _context8.p = 11;\n setPurchaseBusy(false);\n setPurchaseBridgeBusy(false);\n return _context8.f(11);\n case 12:\n return _context8.a(2);\n }\n }, _callee8, null, [[6, 10, 11, 12]]);\n })), [purchaseInvoice, id, props.onClaimPurchase, props.adminToken, props.hasDocumentKey, upstreamSettings]);\n return /*#__PURE__*/React.createElement("fabric-document-detail", {\n "class": "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'flex-start\',\n gap: \'0.75em\',\n flexWrap: \'wrap\',\n marginBottom: \'0.25em\'\n },\n role: "banner"\n }, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n as: Link,\n to: "/documents",\n "aria-label": "Back to documents list"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Documents"), /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n style: {\n margin: 0,\n flex: \'1 1 10rem\',\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Header.Content, {\n style: {\n wordBreak: \'break-word\'\n }\n }, name), isEncrypted && /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "green",\n title: "Encrypted with your key"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "lock",\n "aria-hidden": "true"\n }), "Encrypted"), doc && isPublishedInStore && /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "blue",\n title: publishedAt ? "Published: ".concat(publishedAt) : \'Published\'\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bullhorn",\n "aria-hidden": "true"\n }), "Published"), doc && doc.source === \'peer\' && !isPublishedInStore && /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "teal",\n title: "Remote inventory listing; this hub does not hold the file"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "share alternate",\n "aria-hidden": "true"\n }), "Peer offer"), storageContractId && /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "purple",\n title: "This document has an active storage contract",\n style: {\n cursor: \'pointer\'\n },\n onClick: function onClick() {\n if (storageContractId) {\n navigate("/contracts/".concat(encodeURIComponent(storageContractId)));\n }\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cloud",\n "aria-hidden": "true"\n }), "Distributed"))), /*#__PURE__*/React.createElement(Divider, null), doc && /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n marginBottom: \'1.25em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Storage & availability"), /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: \'0.75em\',\n color: \'rgba(0,0,0,0.7)\'\n }\n }, "How this document exists on your node and on the hub. ", /*#__PURE__*/React.createElement("strong", null, "Author"), " is the creator\\u2019s document id (lineage);", /*#__PURE__*/React.createElement("strong", null, " publisher"), " is the Fabric peer id of the hub that hosts the published listing.", /*#__PURE__*/React.createElement("strong", null, " Publish"), " with a price seals content (ciphertext-at-rest); buyers pay an L1 HTLC that reveals the decryption key.", distributeEnabled ? /*#__PURE__*/React.createElement(React.Fragment, null, " ", /*#__PURE__*/React.createElement("strong", null, " Distribute"), " (optional) bonds multi-node storage contracts.") : null), /*#__PURE__*/React.createElement(List, {\n relaxed: true\n }, /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Icon, {\n name: "hdd",\n color: "grey",\n verticalAlign: "middle"\n }), /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Local copy"), /*#__PURE__*/React.createElement(List.Description, null, "This browser holds metadata", doc.sha256 ? " (content hash ".concat(String(doc.sha256).slice(0, 16), "\\u2026)") : \'\', "."))), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Icon, {\n name: "bullhorn",\n color: isPublishedInStore ? \'blue\' : \'grey\',\n verticalAlign: "middle"\n }), /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Published to hub index"), /*#__PURE__*/React.createElement(List.Description, null, isPublishedInStore ? publishedAt ? "Visible in the network store since ".concat(publishedAt, ".").concat(fabricPeerId ? " Publisher (Fabric peer): ".concat(shortHexId(fabricPeerId), ".") : \'\') : "Listed in the hub published index.".concat(fabricPeerId ? " Publisher: ".concat(shortHexId(fabricPeerId), ".") : \'\') : \'Not published — only you see it until you publish.\'))), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Icon, {\n name: "cloud",\n color: storageContractId ? \'purple\' : \'grey\',\n verticalAlign: "middle"\n }), /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Network storage contract"), /*#__PURE__*/React.createElement(List.Description, null, storageContractId ? /*#__PURE__*/React.createElement("span", null, "Active contract", \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n cursor: \'pointer\',\n textDecoration: \'underline\'\n },\n role: "button",\n tabIndex: 0,\n onClick: function onClick() {\n return navigate("/contracts/".concat(encodeURIComponent(storageContractId)));\n },\n onKeyDown: function onKeyDown(e) {\n if (e.key === \'Enter\') navigate("/contracts/".concat(encodeURIComponent(storageContractId)));\n }\n }, String(storageContractId).slice(0, 12), "\\u2026"), \' \', "(pay-to-distribute bonded storage).", contractPayTx && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\'\n }\n }, contractPayTx.loading && /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontSize: \'0.92em\'\n }\n }, "Checking L1 payment transaction\\u2026"), !contractPayTx.loading && contractPayTx.txid && contractPayTx.tx && (contractPayTx.tx.blockhash == null || contractPayTx.tx.blockhash === \'\') && Number(contractPayTx.tx.confirmations || 0) === 0 && /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.92em\'\n }\n }, /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "orange"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "clock"\n }), "Mempool"), \' \', uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(contractPayTx.txid))\n }, "Payment transaction") : /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\',\n wordBreak: \'break-all\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility for the tx viewer"\n }, contractPayTx.txid), /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\'\n }\n }, " \\u2014 awaiting confirmation")), !contractPayTx.loading && contractPayTx.txid && contractPayTx.tx && contractPayTx.tx.confirmations != null && Number(contractPayTx.tx.confirmations) > 0 && /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.92em\'\n }\n }, /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "green"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check"\n }), contractPayTx.tx.confirmations, " confirmation", Number(contractPayTx.tx.confirmations) === 1 ? \'\' : \'s\'), \' \', uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(contractPayTx.txid))\n }, "View payment transaction") : /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\',\n wordBreak: \'break-all\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility for the tx viewer"\n }, contractPayTx.txid)), !contractPayTx.loading && contractPayTx.error && contractPayTx.txid && /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.92em\',\n color: \'#666\'\n }\n }, uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(contractPayTx.txid))\n }, "Payment transaction") : /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\',\n wordBreak: \'break-all\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility for the tx viewer"\n }, contractPayTx.txid), /*#__PURE__*/React.createElement("span", null, " \\u2014 ", contractPayTx.error)), !contractPayTx.loading && contractPayTx.error && !contractPayTx.txid && /*#__PURE__*/React.createElement("span", {\n style: {\n fontSize: \'0.92em\',\n color: \'#888\'\n }\n }, contractPayTx.error), !contractPayTx.loading && contractPayTx.txid === null && !contractPayTx.error && /*#__PURE__*/React.createElement("span", {\n style: {\n fontSize: \'0.92em\',\n color: \'#888\'\n }\n }, "No payment tx id on contract yet."))) : \'No storage contract — use Distribute to bond L1 payment for replicated storage.\'))), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Icon, {\n name: "bitcoin",\n color: docPurchasePriceSats > 0 ? \'orange\' : \'grey\',\n verticalAlign: "middle"\n }), /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Paid access (inventory HTLC)"), /*#__PURE__*/React.createElement(List.Description, null, docPurchasePriceSats > 0 ? "Buyers pay ".concat(formatSatsDisplay(docPurchasePriceSats), " sats via P2TR HTLC to unlock content (Fabric protocol; not a Lightning invoice).") : \'No list price — document is free to fetch once published.\'))))), doc && Array.isArray(doc.offers) && doc.offers.length > 0 && /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "exchange"\n }), "Peer offers"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginTop: 0\n }\n }, "Inventory listings for this content id. This hub only fulfills sales when it holds the file locally; remote rows are cost basis for optional markup republish."), doc.costBasisSats != null && /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0 0 0.75em\'\n }\n }, "Cost basis: ", /*#__PURE__*/React.createElement("strong", null, formatSatsDisplay(doc.costBasisSats), " sats"), docPurchasePriceSats > 0 ? " \\xB7 listed at ".concat(formatSatsDisplay(docPurchasePriceSats), " sats") : \'\'), /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true\n }, doc.offers.map(function (offer, idx) {\n var key = offer.id || "".concat(offer.peerPubkey || offer.peerAddress || \'peer\', "-").concat(idx);\n var who = offer.local ? offer.peerAlias || \'this node\' : offer.peerAlias || (offer.peerPubkey ? "".concat(String(offer.peerPubkey).slice(0, 8), "\\u2026").concat(String(offer.peerPubkey).slice(-4)) : offer.peerAddress || \'peer\');\n var sats = offer.purchasePriceSats != null ? Number(offer.purchasePriceSats) : null;\n return /*#__PURE__*/React.createElement(List.Item, {\n key: key\n }, /*#__PURE__*/React.createElement(List.Icon, {\n name: offer.local ? \'home\' : \'share alternate\',\n color: offer.local ? \'blue\' : \'teal\'\n }), /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, who, idx === 0 ? /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "olive",\n style: {\n marginLeft: \'0.5em\'\n }\n }, "lowest") : null, offer.local ? /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n style: {\n marginLeft: \'0.35em\'\n }\n }, "local") : null), /*#__PURE__*/React.createElement(List.Description, null, sats != null && Number.isFinite(sats) ? sats === 0 ? \'free\' : "".concat(formatSatsDisplay(sats), " sats") : \'unset\', offer.peerAddress ? " \\xB7 ".concat(offer.peerAddress) : \'\')));\n }))), doc && /*#__PURE__*/React.createElement(Card, {\n fluid: true\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, "Document"), /*#__PURE__*/React.createElement(Card.Meta, null, created), /*#__PURE__*/React.createElement(Card.Description, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "ID:"), " ", /*#__PURE__*/React.createElement("code", null, id)), /*#__PURE__*/React.createElement("div", {\n title: "Fabric document id for the content creator (original lineage)"\n }, /*#__PURE__*/React.createElement("strong", null, "Author:"), " ", /*#__PURE__*/React.createElement("code", null, authorDocId || \'—\')), /*#__PURE__*/React.createElement("div", {\n title: "Fabric peer id of the hub hosting this document in its published index"\n }, /*#__PURE__*/React.createElement("strong", null, "Publisher:"), \' \', isPublishedInStore && fabricPeerId ? /*#__PURE__*/React.createElement("code", null, fabricPeerId) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\'\n }\n }, "\\u2014 (listed hub peer id when published)")), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "MIME:"), " ", mime), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Size:"), " ", doc && doc.size != null ? "".concat(doc.size, " bytes") : \'\'), isHtlcPendingDecrypt && /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "HTLC-encrypted delivery"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0.75em\',\n fontSize: \'0.95em\'\n }\n }, "This file was sent after an inventory HTLC was funded. Enter the same 32-byte preimage that appears in the seller\'s on-chain claim witness (Taproot hashlock). Binding depends on how the document was listed:"), /*#__PURE__*/React.createElement("ul", {\n style: {\n margin: \'0 0 0.75em 1.25em\',\n padding: 0,\n fontSize: \'0.95em\'\n }\n }, /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("strong", null, "Priced / sealed:"), " preimage is the AES content key", \' \', /*#__PURE__*/React.createElement("code", null, "K"), "; payment hash is ", /*#__PURE__*/React.createElement("code", null, "SHA256(K)"), "."), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("strong", null, "Legacy unsealed:"), " preimage is", \' \', /*#__PURE__*/React.createElement("code", null, "SHA256"), " of the ", /*#__PURE__*/React.createElement("em", null, "unsigned"), " Fabric", \' \', /*#__PURE__*/React.createElement("code", null, "DocumentPublish"), " envelope (signature field all zeros \\u2014 not a signed gossip frame). Payment hash / invoice", \' \', /*#__PURE__*/React.createElement("code", null, "contentHash"), " is ", /*#__PURE__*/React.createElement("code", null, "SHA256(preimage)"), ".")), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0 0 0.75em\',\n fontSize: \'0.9em\',\n color: \'#666\'\n }\n }, "Canonical helpers: ", /*#__PURE__*/React.createElement("code", null, "@fabric/core/functions/documentPaymentHash"), \' \', "(", /*#__PURE__*/React.createElement("code", null, "resolveDocumentContentHashHex"), ") and", \' \', /*#__PURE__*/React.createElement("code", null, "publishedDocumentEnvelope"), "."), doc.htlcPaymentHashHex && /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.88em\',\n marginBottom: \'0.5em\',\n wordBreak: \'break-all\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Payment hash (verify on-chain / invoice):"), " ", /*#__PURE__*/React.createElement("code", null, doc.htlcPaymentHashHex)), /*#__PURE__*/React.createElement(Input, {\n fluid: true,\n placeholder: "Preimage (64 hex characters)",\n value: htlcPreimageHex,\n onChange: function onChange(e, d) {\n return setHtlcPreimageHex((d && d.value) != null ? d.value : e.target.value);\n },\n style: {\n marginBottom: \'0.5em\'\n }\n }), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n primary: true,\n loading: htlcUnlockBusy,\n disabled: !TXID_HEX_64.test(htlcPreimageHex.trim()),\n title: "Preimage is 32 bytes (64 hex characters), same length as a txid",\n onClick: handleHtlcPreimageUnlock\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "key"\n }), "Decrypt with preimage"), htlcUnlockError && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\',\n color: \'#9f3a38\',\n fontSize: \'0.9em\'\n }\n }, htlcUnlockError)), isEncrypted && !contentBase64 && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n onClick: handleUnlock,\n title: "Decrypt and show content"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "unlock"\n }), "Unlock")), needsIdentityUnlock && function () {\n var idMode = classifyHubBrowserIdentity(props.identity || {});\n var header = idMode === \'watch_only\' ? \'Signing key required\' : idMode === \'password_locked\' ? \'Unlock Fabric identity\' : \'Fabric identity required\';\n return /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, header), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0.5em\',\n fontSize: \'0.95em\'\n }\n }, idMode === \'watch_only\' ? /*#__PURE__*/React.createElement(React.Fragment, null, "This browser only has a ", /*#__PURE__*/React.createElement("strong", null, "watch-only"), " identity (public key). ", /*#__PURE__*/React.createElement("strong", null, "Publish"), ", ", /*#__PURE__*/React.createElement("strong", null, "Purchase"), ", and ", /*#__PURE__*/React.createElement("strong", null, "Distribute"), " need a full key: open the top-bar identity menu or", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), \' → \', /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), " to import a signing key or use desktop signing.") : idMode === \'password_locked\' ? /*#__PURE__*/React.createElement(React.Fragment, null, "Use the top-bar ", /*#__PURE__*/React.createElement("strong", null, "Locked"), " control (encryption password) or", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), \' → \', /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), ". ", /*#__PURE__*/React.createElement("strong", null, "Publish"), ", ", /*#__PURE__*/React.createElement("strong", null, "Purchase"), " (HTLC invoice/claim), and ", /*#__PURE__*/React.createElement("strong", null, "Distribute"), " only run while unlocked so hub requests are Schnorr-signed and document bytes are available.") : /*#__PURE__*/React.createElement(React.Fragment, null, "Create or restore a key: ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), \' → \', /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), ", or ", /*#__PURE__*/React.createElement("strong", null, "Log in"), " in the top bar.", \' \', /*#__PURE__*/React.createElement("strong", null, "Publish"), ", ", /*#__PURE__*/React.createElement("strong", null, "Purchase"), ", and ", /*#__PURE__*/React.createElement("strong", null, "Distribute"), " require Schnorr signing from this browser when you use those flows here."), \' \', "Pay-to-distribute and hub-wallet ", /*#__PURE__*/React.createElement("strong", null, "Pay Now"), " use ", /*#__PURE__*/React.createElement("strong", null, "real Bitcoin transactions"), ": ", /*#__PURE__*/React.createElement("strong", null, "Pay Now"), " and ", /*#__PURE__*/React.createElement("strong", null, "Pay from hub wallet"), " broadcast via this hub\'s ", /*#__PURE__*/React.createElement("code", null, "bitcoind"), " (admin token where required); you can also pay from any external wallet and paste the txid.", needsIdentityKeyForEncryptedBody ? \' Encrypted documents also need unlock to preview or download.\' : \'\', \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/bitcoin-wallet"\n }, "Bitcoin wallet & derivation"), " ties this identity to L1 receive/send paths."), typeof props.onRequestUnlock === \'function\' && /*#__PURE__*/React.createElement(Button, {\n size: "small",\n type: "button",\n onClick: function onClick() {\n return props.onRequestUnlock();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "key"\n }), "Open Fabric identity"));\n }())), /*#__PURE__*/React.createElement(Card.Content, {\n extra: true\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return typeof props.onGetDocument === \'function\' && props.onGetDocument(id);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh"), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: !doc || !isPublishedInStore,\n color: doc && isPublishedInStore ? \'blue\' : undefined,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n if (doc && isPublishedInStore) return;\n if (!id || typeof props.onPublishDocument !== \'function\') return;\n setPublishError(null);\n setIsPublishing(true);\n var price = parseInt(publishPriceSats, 10);\n props.onPublishDocument(id, price > 0 ? {\n purchasePriceSats: price\n } : undefined);\n },\n disabled: !doc || isPublishing || !!isPublishedInStore || needsIdentityUnlock,\n title: needsIdentityUnlock ? \'Unlock your identity to publish (signed hub request)\' : doc && isPublishedInStore ? \'Document is published\' : \'Publish this document ID to the hub global store\'\n }, /*#__PURE__*/React.createElement(Icon, {\n name: isPublishing ? \'spinner\' : doc && isPublishedInStore ? \'check\' : \'bullhorn\',\n loading: isPublishing\n }), isPublishing ? \'Publishing…\' : doc && isPublishedInStore ? \'Published\' : \'Publish\'), !isPublishedInStore && /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "0",\n placeholder: "Price (sats)",\n value: publishPriceSats,\n onChange: function onChange(e) {\n return setPublishPriceSats(e.target.value);\n },\n style: {\n width: 110\n },\n disabled: needsIdentityUnlock,\n title: needsIdentityUnlock ? \'Unlock identity to set list price when publishing\' : "List price when publishing (default ".concat(DEFAULT_PUBLISH_PRICE_SATS, " sats; HTLC purchase)")\n }), canPurchase && documentPurchaseEnabled && /*#__PURE__*/React.createElement(Button, {\n size: "small",\n color: "orange",\n icon: true,\n labelPosition: "left",\n disabled: needsIdentityUnlock,\n onClick: function onClick() {\n if (needsIdentityUnlock) return;\n setPurchaseOpen(true);\n setPurchaseInvoice(null);\n setPurchaseTxid(\'\');\n setPurchaseError(null);\n setPurchasedContent(null);\n if (typeof props.onRequestPurchaseInvoice === \'function\') {\n props.onRequestPurchaseInvoice(id);\n }\n },\n title: needsIdentityUnlock ? \'Unlock identity to request a purchase invoice (signed hub request)\' : \'Purchase this document (HTLC: pay to unlock with sha256(sha256(content)))\'\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), "Purchase (", formatSatsDisplay(docPurchasePriceSats), " sats)"), distributeEnabled || storageContractId ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: !storageContractId,\n color: storageContractId ? \'purple\' : undefined,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n if (storageContractId) {\n navigate("/contracts/".concat(encodeURIComponent(storageContractId)));\n return;\n }\n if (!distributeEnabled) return;\n if (id) {\n setDistributeError(null);\n setDistributeOpen(true);\n }\n },\n disabled: !id || needsIdentityUnlock || !storageContractId && !distributeEnabled,\n title: needsIdentityUnlock ? \'Unlock your identity to start pay-to-distribute (signed requests, real L1 bond)\' : storageContractId ? \'View storage contract\' : \'Distribute this document across other nodes\'\n }, /*#__PURE__*/React.createElement(Icon, {\n name: storageContractId ? \'cloud\' : \'cloud upload\'\n }), storageContractId ? \'Distributed\' : \'Distribute\') : null, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return id && setShareOpen(true);\n },\n disabled: !id,\n title: "Share a link to this document"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "share alternate"\n }), "Share"), canAdminUnpublish && /*#__PURE__*/React.createElement(Button, {\n size: "small",\n color: "red",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n if (needsIdentityUnlock) return;\n setTombstoneError(null);\n setTombstoneOpen(true);\n },\n disabled: needsIdentityUnlock,\n title: needsIdentityUnlock ? \'Unlock your identity before removing this document from the hub catalog\' : \'Remove this document from the hub published catalog (requires admin token)\'\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "trash"\n }), "Unpublish"), downloadHref && /*#__PURE__*/React.createElement(Button, {\n size: "small",\n primary: true,\n as: "a",\n href: downloadHref,\n download: name\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "download"\n }), "Download")), publishError ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginTop: \'0.75em\'\n },\n onDismiss: function onDismiss() {\n return setPublishError(null);\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Publish did not complete"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n fontSize: \'0.95em\'\n }\n }, publishError)) : null)), /*#__PURE__*/React.createElement(Modal, {\n size: "small",\n open: shareOpen,\n onClose: function onClose() {\n return setShareOpen(false);\n }\n }, /*#__PURE__*/React.createElement(Header, {\n icon: "share alternate",\n content: "Share document"\n }), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "This link keeps the document ID on the client side using the URL hash."), /*#__PURE__*/React.createElement(Input, {\n fluid: true,\n readOnly: true,\n value: shareUrlHash,\n onFocus: function onFocus(e) {\n return e.target.select();\n },\n action: {\n icon: \'copy\',\n title: \'Copy to clipboard\',\n onClick: function onClick() {\n try {\n if (shareUrlHash && navigator && navigator.clipboard) {\n navigator.clipboard.writeText(shareUrlHash);\n }\n } catch (e) {}\n }\n }\n }), shareUrlCanonical && /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.75em\',\n fontSize: \'0.85em\',\n color: \'#888\'\n }\n }, "Permanent URL: ", /*#__PURE__*/React.createElement("code", null, shareUrlCanonical))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n onClick: function onClick() {\n return setShareOpen(false);\n }\n }, "Close"))), /*#__PURE__*/React.createElement(Modal, {\n size: "small",\n open: tombstoneOpen,\n onClose: function onClose() {\n if (tombstoneBusy) return;\n setTombstoneOpen(false);\n setTombstoneError(null);\n }\n }, /*#__PURE__*/React.createElement(Header, {\n icon: "trash",\n content: "Unpublish document (admin)"\n }), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "This removes the document from the hub\'s ", /*#__PURE__*/React.createElement("strong", null, "published catalog"), " so it no longer appears in the network index. The hub may still keep the stored file under ", /*#__PURE__*/React.createElement("code", null, "documents/"), "; this action is the same as", \' \', /*#__PURE__*/React.createElement("code", null, "EmitTombstone"), " with ", /*#__PURE__*/React.createElement("code", null, "documentId"), "."), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Document id:"), " ", /*#__PURE__*/React.createElement("code", null, id)), tombstoneError && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small"\n }, /*#__PURE__*/React.createElement("p", null, tombstoneError))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n onClick: function onClick() {\n if (!tombstoneBusy) {\n setTombstoneOpen(false);\n setTombstoneError(null);\n }\n }\n }, "Cancel"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n negative: true,\n loading: tombstoneBusy,\n disabled: tombstoneBusy,\n onClick: handleConfirmTombstone\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "trash"\n }), "Remove from hub index"))), /*#__PURE__*/React.createElement(Modal, {\n size: "small",\n open: distributeEnabled && distributeOpen,\n onClose: function onClose() {\n if (distributeBusy || distributeBridgeBusy || peerOfferBusy) return;\n setDistributeOpen(false);\n setDistributeError(null);\n setDistributeInvoice(null);\n setDistributeTxid(\'\');\n setDistributeSuccessContractId(null);\n setDistributeBridgeBusy(false);\n setPeerOfferKey(\'\');\n setPeerOfferBusy(false);\n setPeerOfferError(null);\n setPeerOfferSuccess(null);\n }\n }, /*#__PURE__*/React.createElement(Header, {\n icon: "cloud upload",\n content: "Pay to distribute"\n }), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Pay Bitcoin (L1) to have other nodes store this document under a long-term contract. By default, storage is requested for 4 years with periodic random challenges. Payment is a ", /*#__PURE__*/React.createElement("strong", null, "real on-chain transaction"), " to the invoice address; the hub verifies it before recording the storage contract."), needsIdentityUnlock && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Identity locked"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#333\'\n }\n }, "Close this dialog, unlock your identity in the top bar, then open Distribute again.")), !!props.hasDocumentKey && distributeModalNoLocalWire && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "No local signing key in this browser"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#333\'\n }\n }, "Invoice and contract steps still reach the Hub over your session; pay the distribute address from any wallet you trust. If you use desktop delegation, confirm prompts in the Hub app and revoke under", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/security"\n }, "Security & delegation"), " on shared computers.")), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n marginBottom: \'1em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Label, {\n color: !distributeInvoice && !distributeSuccessContractId ? \'blue\' : \'grey\',\n size: "small"\n }, "1. Request invoice"), /*#__PURE__*/React.createElement(Label, {\n color: distributeInvoice && !distributeSuccessContractId ? \'blue\' : \'grey\',\n size: "small"\n }, "2. Pay"), /*#__PURE__*/React.createElement(Label, {\n color: distributeSuccessContractId ? \'green\' : \'grey\',\n size: "small"\n }, "3. ", distributeSuccessContractId ? \'Done\' : \'Confirm\')), distributeSuccessContractId ? /*#__PURE__*/React.createElement(Segment, {\n color: "green",\n style: {\n textAlign: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check circle",\n size: "big",\n color: "green"\n }), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'0.5em\'\n }\n }, "Storage contract created"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'1em\'\n }\n }, "Your payment has been bonded. The document is now distributed."), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n as: Link,\n to: "/contracts/".concat(encodeURIComponent(distributeSuccessContractId)),\n onClick: function onClick() {\n setDistributeOpen(false);\n setDistributeSuccessContractId(null);\n setDistributeInvoice(null);\n setDistributeTxid(\'\');\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate"\n }), "View contract")) : !distributeInvoice ? /*#__PURE__*/React.createElement(Form, {\n id: "fabric-document-distribute-form",\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n if (!id || distributeBusy || peerOfferBusy || needsIdentityUnlock) return;\n var amount = parseInt(distributeAmountSats, 10);\n if (!Number.isFinite(amount) || amount <= 0) {\n setDistributeError(\'Enter a positive amount in sats.\');\n return;\n }\n setDistributeError(null);\n setDistributeBusy(true);\n var config = {\n amountSats: amount,\n desiredCopies: Math.max(1, parseInt(distributeDesiredCopies, 10) || 1),\n durationYears: distributeDurationYears,\n challengeCadence: distributeCadence,\n responseDeadline: distributeDeadline\n };\n if (typeof props.onRequestDistributeInvoice === \'function\') {\n props.onRequestDistributeInvoice(id, config);\n } else {\n setDistributeError(\'Distribute is not available on this hub.\');\n setDistributeBusy(false);\n }\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Amount (sats)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "1",\n placeholder: "e.g. 100000",\n value: distributeAmountSats,\n onChange: function onChange(e) {\n return setDistributeAmountSats(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "# of desired copies"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "1",\n max: "100",\n value: distributeDesiredCopies,\n onChange: function onChange(e) {\n var v = parseInt(e.target.value, 10);\n if (Number.isFinite(v) && v >= 1) setDistributeDesiredCopies(v);\n },\n title: "How many copies you want stored across the network"\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Duration"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "1",\n max: "10",\n value: distributeDurationYears,\n onChange: function onChange(e) {\n var v = parseInt(e.target.value, 10);\n if (Number.isFinite(v)) setDistributeDurationYears(v);\n },\n label: {\n basic: true,\n content: \'years\'\n },\n labelPosition: "right"\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Challenge frequency"), /*#__PURE__*/React.createElement(Dropdown, {\n selection: true,\n options: cadenceOptions,\n value: distributeCadence,\n onChange: function onChange(_, data) {\n return setDistributeCadence(data.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Response deadline"), /*#__PURE__*/React.createElement(Dropdown, {\n selection: true,\n options: deadlineOptions,\n value: distributeDeadline,\n onChange: function onChange(_, data) {\n return setDistributeDeadline(data.value);\n }\n })), /*#__PURE__*/React.createElement(Divider, {\n section: true\n }), /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Offer a connected Fabric peer"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#333\'\n }\n }, "Sends a private P2P hosting offer (same channel as incoming proposals on", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/documents"\n }, "Documents"), "). The peer accepts from their list and returns a Bitcoin invoice; you pay that invoice to bond storage. The hub must already have the file under its content hash \\u2014 create or open the document once so it is stored on the hub."), fabricPeerDropdownOptions.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.75em 0 0\',\n color: \'#666\'\n }\n }, "No Fabric TCP peers in the latest hub snapshot. Connect a peer under", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/peers"\n }, "Peers"), ".") : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Form.Field, {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("label", null, "Peer"), /*#__PURE__*/React.createElement(Dropdown, {\n placeholder: "Select peer (must be connected on the hub)",\n selection: true,\n search: true,\n options: fabricPeerDropdownOptions,\n value: peerOfferKey,\n onChange: function onChange(e, _ref1) {\n var value = _ref1.value;\n setPeerOfferKey(String(value || \'\'));\n setPeerOfferError(null);\n setPeerOfferSuccess(null);\n }\n })), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n color: "blue",\n loading: peerOfferBusy,\n disabled: peerOfferBusy || distributeBusy || distributeBridgeBusy || needsIdentityUnlock || !peerOfferKey || typeof props.onSendDistributeProposal !== \'function\',\n onClick: function onClick() {\n var amount = parseInt(distributeAmountSats, 10);\n if (!Number.isFinite(amount) || amount <= 0) {\n setPeerOfferError(\'Enter a positive amount in sats above first.\');\n return;\n }\n var backendId = doc && doc.sha256 ? String(doc.sha256) : String(id);\n if (!backendId || typeof props.onSendDistributeProposal !== \'function\') return;\n setPeerOfferBusy(true);\n setPeerOfferError(null);\n setPeerOfferSuccess(null);\n var config = {\n desiredCopies: Math.max(1, parseInt(distributeDesiredCopies, 10) || 1),\n durationYears: distributeDurationYears,\n challengeCadence: distributeCadence,\n responseDeadline: distributeDeadline,\n actorId: doc && doc.id ? String(doc.id) : null\n };\n props.onSendDistributeProposal(peerOfferKey, {\n documentId: backendId,\n amountSats: amount,\n config: config,\n documentName: doc && doc.name || name,\n document: doc ? {\n id: doc.id,\n sha256: doc.sha256,\n name: doc.name,\n mime: doc.mime,\n size: doc.size\n } : null\n });\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "send"\n }), "Send hosting offer"), typeof props.onSendDistributeProposal !== \'function\' && /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.5em\',\n color: \'#888\',\n fontSize: \'0.9em\'\n }\n }, "This session does not expose peer proposals (bridge not ready)."), peerOfferError && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginTop: \'0.75em\'\n },\n content: peerOfferError\n }), peerOfferSuccess && /*#__PURE__*/React.createElement(Message, {\n positive: true,\n size: "small",\n style: {\n marginTop: \'0.75em\'\n },\n content: peerOfferSuccess\n }))), distributeError && /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.75em\',\n color: \'#b00\'\n }\n }, distributeError)) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Invoice, {\n address: distributeInvoice.address,\n amountSats: distributeInvoice.amountSats,\n network: distributeInvoice.network,\n label: "Storage contract payment",\n identity: props.identity || {},\n compact: true,\n requireUnlockedIdentityForHubPay: true,\n identityUnlocked: !!props.hasDocumentKey,\n onPaid: function onPaid(txid) {\n setDistributeTxid(txid);\n if (txid && id && typeof props.onDistributeDocument === \'function\') {\n var _distributeInvoice$co4, _distributeInvoice$co5, _distributeInvoice$co6;\n setDistributeBusy(true);\n var config = {\n amountSats: distributeInvoice.amountSats,\n durationYears: ((_distributeInvoice$co4 = distributeInvoice.config) === null || _distributeInvoice$co4 === void 0 ? void 0 : _distributeInvoice$co4.durationYears) || distributeDurationYears,\n challengeCadence: ((_distributeInvoice$co5 = distributeInvoice.config) === null || _distributeInvoice$co5 === void 0 ? void 0 : _distributeInvoice$co5.challengeCadence) || distributeCadence,\n responseDeadline: ((_distributeInvoice$co6 = distributeInvoice.config) === null || _distributeInvoice$co6 === void 0 ? void 0 : _distributeInvoice$co6.responseDeadline) || distributeDeadline,\n txid: txid\n };\n Promise.resolve(props.onDistributeDocument(id, config))["catch"](function (err) {\n setDistributeBusy(false);\n setDistributeError(err && err.message ? err.message : \'Distribution request failed.\');\n });\n }\n }\n }), hubAdminTokenPresent && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'1em\',\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.75em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "orange",\n loading: distributeBridgeBusy,\n disabled: distributeBridgeBusy || distributeBusy || !!distributeSuccessContractId || needsIdentityUnlock,\n onClick: handlePayDistributeFromBridge,\n title: "POST /services/bitcoin sendpayment \\u2014 hub bitcoind broadcasts; admin token + unlocked identity required in this browser"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "server"\n }), "Pay from hub wallet & bond"), /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n maxWidth: \'28em\'\n }\n }, \'One step: spend from this hub\\\'s bitcoind wallet, then call \', /*#__PURE__*/React.createElement("code", null, "CreateStorageContract"), \' with the returned txid (same as Confirm below). Regtest: mine a block if verification is slow.\')), /*#__PURE__*/React.createElement(Form.Field, {\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("label", null, "Or paste txid (if you paid from an external wallet)"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "txid from your wallet",\n value: distributeTxid,\n onChange: function onChange(e) {\n return setDistributeTxid(e.target.value);\n }\n })), TXID_HEX_64.test(String(distributeTxid || \'\').trim()) && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\',\n fontSize: \'0.9em\'\n }\n }, uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(String(distributeTxid).trim()))\n }, "Open transaction") : /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\',\n wordBreak: \'break-all\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility for the tx viewer"\n }, String(distributeTxid).trim()), /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\'\n }\n }, \' \', "\\u2014 on-chain sends often appear in the mempool first; mine a block on regtest to confirm."), distributeTxChain && !distributeSuccessContractId && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.35em\',\n color: \'#555\'\n }\n }, distributeTxChain.loading && /*#__PURE__*/React.createElement("span", null, "Checking depth\\u2026"), !distributeTxChain.loading && distributeTxChain.tx && (distributeTxChain.tx.blockhash == null || distributeTxChain.tx.blockhash === \'\') && Number(distributeTxChain.tx.confirmations || 0) === 0 && /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("strong", null, "Mempool"), " \\u2014 0 confirmations"), !distributeTxChain.loading && distributeTxChain.tx && Number(distributeTxChain.tx.confirmations || 0) > 0 && /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("strong", null, distributeTxChain.tx.confirmations), " confirmation", Number(distributeTxChain.tx.confirmations) === 1 ? \'\' : \'s\'), !distributeTxChain.loading && distributeTxChain.error && /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\'\n }\n }, distributeTxChain.error), !distributeTxChain.loading && !distributeTxChain.tx && !distributeTxChain.error && /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\'\n }\n }, "Not visible on this hub yet \\u2014 will retry."))))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n onClick: function onClick() {\n if (distributeBusy || distributeBridgeBusy || peerOfferBusy) return;\n setDistributeOpen(false);\n setDistributeError(null);\n setDistributeInvoice(null);\n setDistributeTxid(\'\');\n setDistributeSuccessContractId(null);\n setDistributeBridgeBusy(false);\n setPeerOfferKey(\'\');\n setPeerOfferBusy(false);\n setPeerOfferError(null);\n setPeerOfferSuccess(null);\n }\n }, distributeSuccessContractId ? \'Close\' : distributeInvoice ? \'Previous\' : \'Cancel\'), distributeSuccessContractId ? /*#__PURE__*/React.createElement(Button, {\n primary: true,\n as: Link,\n to: "/contracts/".concat(encodeURIComponent(distributeSuccessContractId)),\n onClick: function onClick() {\n setDistributeOpen(false);\n setDistributeSuccessContractId(null);\n setDistributeInvoice(null);\n setDistributeTxid(\'\');\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate"\n }), "View contract") : !distributeInvoice ? /*#__PURE__*/React.createElement(Button, {\n primary: true,\n type: "submit",\n form: "fabric-document-distribute-form",\n loading: distributeBusy,\n disabled: distributeBusy || peerOfferBusy || needsIdentityUnlock,\n title: needsIdentityUnlock ? \'Unlock identity to request a distribute invoice\' : undefined\n }, "Request invoice") : /*#__PURE__*/React.createElement(Button, {\n primary: true,\n loading: distributeBusy,\n disabled: !distributeTxid.trim() || distributeBusy || distributeBridgeBusy,\n onClick: function onClick() {\n var _distributeInvoice$co7, _distributeInvoice$co8, _distributeInvoice$co9;\n var tx = distributeTxid.trim();\n if (!tx || !id || typeof props.onDistributeDocument !== \'function\') return;\n setDistributeBusy(true);\n var config = {\n amountSats: distributeInvoice.amountSats,\n durationYears: ((_distributeInvoice$co7 = distributeInvoice.config) === null || _distributeInvoice$co7 === void 0 ? void 0 : _distributeInvoice$co7.durationYears) || distributeDurationYears,\n challengeCadence: ((_distributeInvoice$co8 = distributeInvoice.config) === null || _distributeInvoice$co8 === void 0 ? void 0 : _distributeInvoice$co8.challengeCadence) || distributeCadence,\n responseDeadline: ((_distributeInvoice$co9 = distributeInvoice.config) === null || _distributeInvoice$co9 === void 0 ? void 0 : _distributeInvoice$co9.responseDeadline) || distributeDeadline,\n txid: tx\n };\n Promise.resolve(props.onDistributeDocument(id, config))["catch"](function (err) {\n setDistributeBusy(false);\n setDistributeError(err && err.message ? err.message : \'Distribution request failed.\');\n });\n // Success: storageContractBonded will fire and set distributeSuccessContractId\n }\n }, "Confirm & Distribute"))), /*#__PURE__*/React.createElement(Modal, {\n size: "small",\n open: purchaseOpen,\n onClose: function onClose() {\n if (purchaseBusy || purchaseBridgeBusy) return;\n setPurchaseOpen(false);\n setPurchaseInvoice(null);\n setPurchaseTxid(\'\');\n setPurchaseError(null);\n setPurchasedContent(null);\n setPurchaseBridgeBusy(false);\n }\n }, /*#__PURE__*/React.createElement(Header, {\n icon: "bitcoin",\n content: "Purchase document (HTLC)"\n }), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Pay the on-chain invoice. For priced sealed documents the hub stores ciphertext-at-rest; after L1 payment verification it reveals the AES decryption key (HTLC preimage). Same-hub ", /*#__PURE__*/React.createElement("strong", null, "Claim & Unlock"), " returns plaintext; peer inventory HTLC delivers ciphertext then auto-unlocks via ", /*#__PURE__*/React.createElement("code", null, "HTLC_KEY_REVEAL"), "."), needsIdentityUnlock && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: \'0.75em\'\n }\n }, "Unlock your identity to complete this flow from this browser."), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#888\',\n fontSize: \'0.9em\',\n marginTop: \'0.35em\'\n }\n }, "If ", /*#__PURE__*/React.createElement("strong", null, "Claim & Unlock"), " fails immediately after you broadcast, the payment may still be unconfirmed \\u2014 on regtest use ", /*#__PURE__*/React.createElement("strong", null, "Generate Block"), " on", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin"\n }, "Bitcoin"), ".", uf.bitcoinResources ? /*#__PURE__*/React.createElement(React.Fragment, null, \' \', "For a raw L1 proof (txid + address + sats), use", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/resources"\n }, "Bitcoin \\u2192 Resources"), ".") : /*#__PURE__*/React.createElement(React.Fragment, null, \' \', "Enable ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin \\u2014 HTTP resources"), " in Admin for the interactive payment verifier.")), purchasedContent ? /*#__PURE__*/React.createElement(Segment, {\n color: "green"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check circle",\n size: "big",\n color: "green"\n }), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'0.5em\'\n }\n }, "Document unlocked"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'1em\'\n }\n }, "Content hash verified. You can now view or download."), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n as: "a",\n href: "data:".concat(purchasedContent.mime || \'application/octet-stream\', ";base64,").concat(purchasedContent.contentBase64),\n download: purchasedContent.name || \'document\'\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "download"\n }), "Download")) : !purchaseInvoice ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\'\n }\n }, !purchaseError && /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#888\'\n }\n }, "Requesting invoice\\u2026"), purchaseError && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Message, {\n negative: true\n }, purchaseError), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginTop: \'0.75em\'\n }\n }, "Typical causes: Bitcoin unavailable on the hub, document not published, or no list price / floor. Use ", /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin"\n }, "Bitcoin"), " and confirm this document shows ", /*#__PURE__*/React.createElement("strong", null, "Published"), " with a purchase price."))) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Invoice, {\n address: purchaseInvoice.address,\n amountSats: purchaseInvoice.amountSats,\n network: purchaseInvoice.network,\n label: "Document purchase (HTLC)",\n identity: props.identity || {},\n compact: true,\n requireUnlockedIdentityForHubPay: true,\n identityUnlocked: !!props.hasDocumentKey,\n onPaid: function onPaid(txid) {\n setPurchaseTxid(txid);\n if (txid && id && typeof props.onClaimPurchase === \'function\') {\n setPurchaseBusy(true);\n setPurchaseError(null);\n Promise.resolve(props.onClaimPurchase(id, txid)).then(function (res) {\n if (res && res.document) {\n setPurchasedContent(res.document);\n } else {\n setPurchaseError(res && res.error || \'Claim failed\');\n }\n })["catch"](function (err) {\n return setPurchaseError(err && err.message ? err.message : String(err));\n })["finally"](function () {\n return setPurchaseBusy(false);\n });\n }\n }\n }), hubAdminTokenPresent && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'1em\',\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.75em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "orange",\n loading: purchaseBridgeBusy,\n disabled: purchaseBridgeBusy || purchaseBusy || !!purchasedContent || needsIdentityUnlock,\n onClick: handlePayPurchaseFromBridge,\n title: "POST /services/bitcoin sendpayment \\u2014 hub bitcoind broadcasts; admin token + unlocked identity in this browser"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "server"\n }), "Pay from hub wallet & unlock"), /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n maxWidth: \'28em\'\n }\n }, \'Spend from this hub\\\'s bitcoind wallet, then claim with the returned txid. Regtest: mine a block if verification is slow.\')), /*#__PURE__*/React.createElement(Form.Field, {\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("label", null, "Or paste txid (if you paid from an external wallet)"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "txid from your wallet",\n value: purchaseTxid,\n onChange: function onChange(e) {\n return setPurchaseTxid(e.target.value);\n }\n })), purchaseError && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n style: {\n marginTop: \'1em\'\n }\n }, purchaseError))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n onClick: function onClick() {\n if (purchaseBusy || purchaseBridgeBusy) return;\n setPurchaseOpen(false);\n setPurchaseInvoice(null);\n setPurchaseTxid(\'\');\n setPurchaseError(null);\n setPurchasedContent(null);\n setPurchaseBridgeBusy(false);\n }\n }, purchasedContent ? \'Close\' : \'Cancel\'), !purchasedContent && purchaseInvoice && /*#__PURE__*/React.createElement(Button, {\n primary: true,\n loading: purchaseBusy,\n disabled: !purchaseTxid.trim() || purchaseBusy || purchaseBridgeBusy,\n onClick: function onClick() {\n var tx = purchaseTxid.trim();\n if (!tx || !id || typeof props.onClaimPurchase !== \'function\') return;\n setPurchaseBusy(true);\n setPurchaseError(null);\n Promise.resolve(props.onClaimPurchase(id, tx)).then(function (res) {\n if (res && res.document) setPurchasedContent(res.document);else setPurchaseError(res && res.error || \'Claim failed\');\n })["catch"](function (err) {\n return setPurchaseError(err && err.message ? err.message : String(err));\n })["finally"](function () {\n return setPurchaseBusy(false);\n });\n }\n }, "Claim & Unlock"))), !doc && loadError && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Could not load document"), /*#__PURE__*/React.createElement("p", null, loadError), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/documents",\n style: {\n marginTop: \'0.75em\'\n },\n "aria-label": "Back to documents list"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Documents"), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n style: {\n marginTop: \'0.75em\',\n marginLeft: \'0.5em\'\n },\n onClick: function onClick() {\n setLoadError(null);\n if (typeof props.onGetDocument === \'function\' && id) props.onGetDocument(id);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry")), !doc && !loadError && /*#__PURE__*/React.createElement(Segment, {\n placeholder: true,\n secondary: true,\n style: {\n marginTop: \'1em\',\n minHeight: \'20vh\',\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'center\'\n }\n }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: "centered"\n }), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1em\',\n textAlign: \'center\'\n }\n }, "Loading document\\u2026", /*#__PURE__*/React.createElement(Header.Subheader, null, "Fetching document details from hub.")))), doc && isEncrypted && !contentBase64 && /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Contents"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, props.hasDocumentKey ? \'Encrypted. Click Unlock above to decrypt and view.\' : /*#__PURE__*/React.createElement(React.Fragment, null, "Encrypted. Unlock your identity to view this document (", /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), " \\u2192 ", /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), " or the top-bar ", /*#__PURE__*/React.createElement("strong", null, "Locked"), " control)."))), doc && imageSrc && /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Preview"), /*#__PURE__*/React.createElement("div", {\n style: {\n textAlign: \'center\'\n }\n }, /*#__PURE__*/React.createElement("img", {\n src: imageSrc,\n alt: name,\n style: {\n maxWidth: \'100%\',\n maxHeight: 520,\n borderRadius: 6,\n boxShadow: \'0 1px 3px rgba(0,0,0,0.15)\'\n }\n }))), doc && text != null && /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Contents"), showGraphPreview ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(GraphDocumentPreview, {\n dotSource: text,\n hasDocumentKey: props.hasDocumentKey\n }), /*#__PURE__*/React.createElement("details", {\n style: {\n marginTop: \'0.75rem\'\n }\n }, /*#__PURE__*/React.createElement("summary", {\n style: {\n cursor: \'pointer\',\n color: \'#555\'\n }\n }, "DOT source"), /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n background: \'#f7f7f7\',\n padding: \'0.75em\',\n borderRadius: 6,\n maxHeight: 320,\n overflow: \'auto\',\n marginTop: \'0.5rem\'\n }\n }, text))) : /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n background: \'#f7f7f7\',\n padding: \'0.75em\',\n borderRadius: 6,\n maxHeight: 520,\n overflow: \'auto\'\n }\n }, text)), doc && !imageSrc && text == null && contentBase64 && /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Contents"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "A preview is not available for this file type. Use the Download button above to view it with a native application."))));\n}\nmodule.exports = DocumentDetail;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBRUFwVCxHQUFHLElBQUksQ0FBQ3VVLFFBQVEsSUFBSW5CLElBQUksSUFBSSxJQUFJLElBQUl0QyxhQUFhLGlCQUNoRHpXLEtBQUEsQ0FBQStjLGFBQUEsQ0FBQzViLE9BQU87SUFBQzBpQixTQUFTO0lBQUM3RyxLQUFLLEVBQUU7TUFBRTRCLFNBQVMsRUFBRTtJQUFNO0VBQUUsZ0JBQzdDNWUsS0FBQSxDQUFBK2MsYUFBQSxDQUFDcGMsTUFBTTtJQUFDOGMsRUFBRSxFQUFDO0VBQUksR0FBQyxVQUFnQixDQUFDLGVBQ2pDemQsS0FBQSxDQUFBK2MsYUFBQTtJQUFHQyxLQUFLLEVBQUU7TUFBRWMsS0FBSyxFQUFFO0lBQU87RUFBRSxHQUFDLG9IQUUxQixDQUNJLENBRUosQ0FDYSxDQUFDO0FBRTdCO0FBRUE4RyxNQUFNLENBQUNDLE9BQU8sR0FBR2xnQixjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0RvY3VtZW50Vmlldy5qcz8wNzE0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gRGVwZW5kZW5jaWVzXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmssIHVzZVBhcmFtcywgdXNlTG9jYXRpb24sIHVzZU5hdmlnYXRlIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5cbi8vIFNlbWFudGljIFVJXG5jb25zdCB7XG4gIEJ1dHRvbixcbiAgQ2FyZCxcbiAgRGl2aWRlcixcbiAgSGVhZGVyLFxuICBJY29uLFxuICBMYWJlbCxcbiAgTGlzdCxcbiAgTG9hZGVyLFxuICBNZXNzYWdlLFxuICBNb2RhbCxcbiAgSW5wdXQsXG4gIFNlZ21lbnQsXG4gIEZvcm0sXG4gIERyb3Bkb3duXG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IEludm9pY2UgPSByZXF1aXJlKCcuL0ludm9pY2UnKTtcbmNvbnN0IEdyYXBoRG9jdW1lbnRQcmV2aWV3ID0gcmVxdWlyZSgnLi9HcmFwaERvY3VtZW50UHJldmlldycpO1xuY29uc3QgeyBmb3JtYXRTYXRzRGlzcGxheSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2Zvcm1hdFNhdHMnKTtcbmNvbnN0IHsgbG9hZFVwc3RyZWFtU2V0dGluZ3MsIGZldGNoVHJhbnNhY3Rpb25CeUhhc2gsIHNlbmRCcmlkZ2VQYXltZW50IH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvYml0Y29pbkNsaWVudCcpO1xuY29uc3Qge1xuICBsb2FkSHViVWlGZWF0dXJlRmxhZ3MsXG4gIHN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YlVpRmVhdHVyZUZsYWdzJyk7XG5jb25zdCB7IGh5ZHJhdGVIdWJOZXR3b3JrU3RhdHVzVmlhSHR0cCB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h5ZHJhdGVIdWJOZXR3b3JrU3RhdHVzVmlhSHR0cCcpO1xuY29uc3Qge1xuICBjbGFzc2lmeUh1YkJyb3dzZXJJZGVudGl0eSxcbiAgZmFicmljSWRlbnRpdHlOZWVkRnVsbEtleVBsYWluXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YklkZW50aXR5VWlIaW50cycpO1xuY29uc3QgeyByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViQWRtaW5Ub2tlbkJyb3dzZXInKTtcbmNvbnN0IHsgbG9hZFNlcnZlckZlYXR1cmVGbGFncyB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YlNlcnZlckZlYXR1cmVGbGFncycpO1xuXG5jb25zdCBERUZBVUxUX1BVQkxJU0hfUFJJQ0VfU0FUUyA9ICcyNSc7XG5jb25zdCBUWElEX0hFWF82NCA9IC9eW2EtZkEtRjAtOV17NjR9JC87XG5cbmZ1bmN0aW9uIHNob3J0SGV4SWQgKHZhbHVlKSB7XG4gIGNvbnN0IHMgPSBTdHJpbmcodmFsdWUgfHwgJycpO1xuICBpZiAoIXMpIHJldHVybiAn4oCUJztcbiAgaWYgKHMubGVuZ3RoIDw9IDIwKSByZXR1cm4gcztcbiAgcmV0dXJuIGAke3Muc2xpY2UoMCwgMTApfeKApiR7cy5zbGljZSgtOCl9YDtcbn1cblxuLyoqIFJlc29sdmUgYSBkb2N1bWVudCBmcm9tIEJyaWRnZSBgZ2xvYmFsU3RhdGUuZG9jdW1lbnRzYCBieSByb3V0ZSBpZCBvciBjb250ZW50IGhhc2ggKGNhc2UtaW5zZW5zaXRpdmUgaGV4KS4gKi9cbmZ1bmN0aW9uIHBpY2tEb2N1bWVudEZyb21NYXAgKGRvY3VtZW50cywgcmF3SWQpIHtcbiAgaWYgKCFkb2N1bWVudHMgfHwgcmF3SWQgPT0gbnVsbCB8fCByYXdJZCA9PT0gJycpIHJldHVybiBudWxsO1xuICBjb25zdCBpZCA9IFN0cmluZyhyYXdJZCkudHJpbSgpO1xuICBpZiAoIWlkKSByZXR1cm4gbnVsbDtcbiAgaWYgKGRvY3VtZW50c1tpZF0pIHJldHVybiBkb2N1bWVudHNbaWRdO1xuICBjb25zdCBsb3dlciA9IGlkLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChkb2N1bWVudHNbbG93ZXJdKSByZXR1cm4gZG9jdW1lbnRzW2xvd2VyXTtcbiAgZm9yIChjb25zdCBkIG9mIE9iamVjdC52YWx1ZXMoZG9jdW1lbnRzKSkge1xuICAgIGlmICghZCB8fCB0eXBlb2YgZCAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGRpZCA9IGQuaWQgIT0gbnVsbCA/IFN0cmluZyhkLmlkKSA6ICcnO1xuICAgIGNvbnN0IHNoYSA9IGQuc2hhMjU2ICE9IG51bGwgPyBTdHJpbmcoZC5zaGEyNTYpIDogKGQuc2hhICE9IG51bGwgPyBTdHJpbmcoZC5zaGEpIDogJycpO1xuICAgIGlmIChkaWQgPT09IGlkIHx8IHNoYSA9PT0gaWQpIHJldHVybiBkO1xuICAgIGlmIChkaWQudG9Mb3dlckNhc2UoKSA9PT0gbG93ZXIgfHwgc2hhLnRvTG93ZXJDYXNlKCkgPT09IGxvd2VyKSByZXR1cm4gZDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIEZhYnJpYyBUQ1AgcGVlcnMgZnJvbSBHZXROZXR3b3JrU3RhdHVzIChleGNsdWRlcyBicmlkZ2UvV2ViUlRDIHNpZ25hbGluZyByb3dzKS4gKi9cbmZ1bmN0aW9uIGZhYnJpY1RjcFBlZXJzRnJvbU5ldHdvcmtTdGF0dXMgKG5zKSB7XG4gIGNvbnN0IHBlZXJzID0gQXJyYXkuaXNBcnJheShucyAmJiBucy5wZWVycykgPyBucy5wZWVycyA6IFtdO1xuICByZXR1cm4gcGVlcnMuZmlsdGVyKChwKSA9PiB7XG4gICAgaWYgKCFwIHx8IHR5cGVvZiBwICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHBpZCA9IFN0cmluZyhwLmlkIHx8ICcnKTtcbiAgICBjb25zdCBhZGRyZXNzID0gU3RyaW5nKHAuYWRkcmVzcyB8fCAnJyk7XG4gICAgY29uc3QgaGFzV2ViUlRDTWV0YWRhdGEgPSAhIShwLm1ldGFkYXRhICYmIEFycmF5LmlzQXJyYXkocC5tZXRhZGF0YS5jYXBhYmlsaXRpZXMpKTtcbiAgICBpZiAocGlkLnN0YXJ0c1dpdGgoJ2ZhYnJpYy1icmlkZ2UtJykgfHwgYWRkcmVzcy5zdGFydHNXaXRoKCdmYWJyaWMtYnJpZGdlLScpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGhhc1dlYlJUQ01ldGFkYXRhICYmIHAuc3RhdHVzID09PSAncmVnaXN0ZXJlZCcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEFkbWluVG9rZW5Gcm9tUHJvcHMgKHByb3BzKSB7XG4gIGNvbnN0IHQgPSBwcm9wcyAmJiBwcm9wcy5hZG1pblRva2VuO1xuICBpZiAodCAmJiBTdHJpbmcodCkudHJpbSgpKSByZXR1cm4gU3RyaW5nKHQpLnRyaW0oKTtcbiAgcmV0dXJuIHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIoKTtcbn1cblxuZnVuY3Rpb24gRG9jdW1lbnREZXRhaWwgKHByb3BzKSB7XG4gIGNvbnN0IHBhcmFtcyA9IHVzZVBhcmFtcygpO1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgZW5jb2RlZFBhcmFtID0gcGFyYW1zICYmIHBhcmFtcy5pZCA/IHBhcmFtcy5pZCA6ICcnO1xuICBjb25zdCBoYXNoID0gbG9jYXRpb24gJiYgbG9jYXRpb24uaGFzaCA/IGxvY2F0aW9uLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJztcbiAgY29uc3QgcmF3SWQgPSBlbmNvZGVkUGFyYW0gfHwgaGFzaDtcbiAgY29uc3QgaWQgPSByYXdJZCA/IGRlY29kZVVSSUNvbXBvbmVudChyYXdJZCkgOiAnJztcblxuICBjb25zdCBbZG9jLCBzZXREb2NdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtkZWNyeXB0ZWRDb250ZW50LCBzZXREZWNyeXB0ZWRDb250ZW50XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbdW5sb2NrZWQsIHNldFVubG9ja2VkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2F1dG9UcmllZERlY3J5cHQsIHNldEF1dG9UcmllZERlY3J5cHRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hhcmVPcGVuLCBzZXRTaGFyZU9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNQdWJsaXNoaW5nLCBzZXRJc1B1Ymxpc2hpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcHVibGlzaEVycm9yLCBzZXRQdWJsaXNoRXJyb3JdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtkaXN0cmlidXRlT3Blbiwgc2V0RGlzdHJpYnV0ZU9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZGlzdHJpYnV0ZUJ1c3ksIHNldERpc3RyaWJ1dGVCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Rpc3RyaWJ1dGVBbW91bnRTYXRzLCBzZXREaXN0cmlidXRlQW1vdW50U2F0c10gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtkaXN0cmlidXRlRGVzaXJlZENvcGllcywgc2V0RGlzdHJpYnV0ZURlc2lyZWRDb3BpZXNdID0gUmVhY3QudXNlU3RhdGUoMSk7XG4gIGNvbnN0IFtkaXN0cmlidXRlRHVyYXRpb25ZZWFycywgc2V0RGlzdHJpYnV0ZUR1cmF0aW9uWWVhcnNdID0gUmVhY3QudXNlU3RhdGUoNCk7XG4gIGNvbnN0IFtkaXN0cmlidXRlQ2FkZW5jZSwgc2V0RGlzdHJpYnV0ZUNhZGVuY2VdID0gUmVhY3QudXNlU3RhdGUoJ2RhaWx5Jyk7XG4gIGNvbnN0IFtkaXN0cmlidXRlRGVhZGxpbmUsIHNldERpc3RyaWJ1dGVEZWFkbGluZV0gPSBSZWFjdC51c2VTdGF0ZSgnMTBzJyk7XG4gIGNvbnN0IFtkaXN0cmlidXRlRXJyb3IsIHNldERpc3RyaWJ1dGVFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcblxuICBjb25zdCBbZGlzdHJpYnV0ZUludm9pY2UsIHNldERpc3RyaWJ1dGVJbnZvaWNlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbZGlzdHJpYnV0ZVR4aWQsIHNldERpc3RyaWJ1dGVUeGlkXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2Rpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZCwgc2V0RGlzdHJpYnV0ZVN1Y2Nlc3NDb250cmFjdElkXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbZGlzdHJpYnV0ZVR4Q2hhaW4sIHNldERpc3RyaWJ1dGVUeENoYWluXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbZGlzdHJpYnV0ZUJyaWRnZUJ1c3ksIHNldERpc3RyaWJ1dGVCcmlkZ2VCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3BlZXJPZmZlcktleSwgc2V0UGVlck9mZmVyS2V5XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3BlZXJPZmZlckJ1c3ksIHNldFBlZXJPZmZlckJ1c3ldID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcGVlck9mZmVyRXJyb3IsIHNldFBlZXJPZmZlckVycm9yXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbcGVlck9mZmVyU3VjY2Vzcywgc2V0UGVlck9mZmVyU3VjY2Vzc10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3BlZXJMaXN0VGljaywgc2V0UGVlckxpc3RUaWNrXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IFtwdWJsaXNoUHJpY2VTYXRzLCBzZXRQdWJsaXNoUHJpY2VTYXRzXSA9IFJlYWN0LnVzZVN0YXRlKERFRkFVTFRfUFVCTElTSF9QUklDRV9TQVRTKTtcbiAgY29uc3QgW3B1cmNoYXNlT3Blbiwgc2V0UHVyY2hhc2VPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3B1cmNoYXNlSW52b2ljZSwgc2V0UHVyY2hhc2VJbnZvaWNlXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbcHVyY2hhc2VUeGlkLCBzZXRQdXJjaGFzZVR4aWRdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbcHVyY2hhc2VCdXN5LCBzZXRQdXJjaGFzZUJ1c3ldID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcHVyY2hhc2VCcmlkZ2VCdXN5LCBzZXRQdXJjaGFzZUJyaWRnZUJ1c3ldID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcHVyY2hhc2VFcnJvciwgc2V0UHVyY2hhc2VFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3B1cmNoYXNlZENvbnRlbnQsIHNldFB1cmNoYXNlZENvbnRlbnRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtjb250cmFjdFBheVR4LCBzZXRDb250cmFjdFBheVR4XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuXG4gIGNvbnN0IFtodGxjUHJlaW1hZ2VIZXgsIHNldEh0bGNQcmVpbWFnZUhleF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtodGxjVW5sb2NrQnVzeSwgc2V0SHRsY1VubG9ja0J1c3ldID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaHRsY1VubG9ja0Vycm9yLCBzZXRIdGxjVW5sb2NrRXJyb3JdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFt0b21ic3RvbmVPcGVuLCBzZXRUb21ic3RvbmVPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3RvbWJzdG9uZUJ1c3ksIHNldFRvbWJzdG9uZUJ1c3ldID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdG9tYnN0b25lRXJyb3IsIHNldFRvbWJzdG9uZUVycm9yXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtodWJVaVRpY2ssIHNldEh1YlVpVGlja10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3Vwc3RyZWFtUmV2LCBzZXRVcHN0cmVhbVJldl0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzKCgpID0+IHNldEh1YlVpVGljaygodCkgPT4gdCArIDEpKSwgW10pO1xuICB2b2lkIGh1YlVpVGljaztcbiAgY29uc3QgdWYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcblxuICBjb25zdCB1cHN0cmVhbVNldHRpbmdzID0gUmVhY3QudXNlTWVtbygoKSA9PiBsb2FkVXBzdHJlYW1TZXR0aW5ncygpLCBbdXBzdHJlYW1SZXZdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGJ1bXAgPSAoKSA9PiBzZXRVcHN0cmVhbVJldigobikgPT4gbiArIDEpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZmFicmljQml0Y29pblVwc3RyZWFtQ2hhbmdlZCcsIGJ1bXApO1xuICAgIGNvbnN0IG9uU3RvcmFnZSA9IChldikgPT4ge1xuICAgICAgaWYgKGV2ICYmIGV2LmtleSA9PT0gJ2ZhYnJpYy5iaXRjb2luLnVwc3RyZWFtJykgYnVtcCgpO1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBvblN0b3JhZ2UpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZmFicmljQml0Y29pblVwc3RyZWFtQ2hhbmdlZCcsIGJ1bXApO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBvblN0b3JhZ2UpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldExvYWRFcnJvcihudWxsKTtcbiAgfSwgW2lkXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlkIHx8IHR5cGVvZiBwcm9wcy5vbkdldERvY3VtZW50ICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIC8vIERlZmVyIHVudGlsIGFmdGVyIG90aGVyIERvY3VtZW50VmlldyBlZmZlY3RzIChlLmcuIGdsb2JhbFN0YXRlVXBkYXRlIGxpc3RlbmVyKSBoYXZlIHJ1bi5cbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgaWYgKCFjYW5jZWxsZWQpIHByb3BzLm9uR2V0RG9jdW1lbnQoaWQpO1xuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7IGNhbmNlbGxlZCA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2lkXSk7XG5cbiAgLy8gSWYgV2ViU29ja2V0IEdldERvY3VtZW50IG5ldmVyIG1lcmdlcyBpbnRvIEJyaWRnZSBzdGF0ZSwgZmFsbCBiYWNrIHRvIHNhbWUtb3JpZ2luIEhUVFAgSlNPTi1SUEMgKHJlYWQtb25seSkuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpZCB8fCBkb2MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICBjb25zdCBicmlkZ2UgPSBwcm9wcy5icmlkZ2VSZWYgJiYgcHJvcHMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBncyA9IGJyaWRnZSAmJiB0eXBlb2YgYnJpZGdlLmdldEdsb2JhbFN0YXRlID09PSAnZnVuY3Rpb24nID8gYnJpZGdlLmdldEdsb2JhbFN0YXRlKCkgOiBudWxsO1xuICAgICAgaWYgKHBpY2tEb2N1bWVudEZyb21NYXAoZ3MgJiYgZ3MuZG9jdW1lbnRzLCBpZCkpIHJldHVybjtcbiAgICAgIGNvbnN0IG9yaWdpbiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICAgID8gd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgICA6ICcnO1xuICAgICAgaWYgKCFvcmlnaW4gfHwgIWJyaWRnZSB8fCB0eXBlb2YgYnJpZGdlLm1lcmdlR2V0RG9jdW1lbnRScGNSZXN1bHQgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICAgIGZldGNoKGAke29yaWdpbn0vc2VydmljZXMvcnBjYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICAgICAgaWQ6IERhdGUubm93KCksXG4gICAgICAgICAgbWV0aG9kOiAnR2V0RG9jdW1lbnQnLFxuICAgICAgICAgIHBhcmFtczogW2lkXVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgICAgLnRoZW4oYXN5bmMgKHIpID0+IHtcbiAgICAgICAgICBsZXQgYm9keSA9IG51bGw7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGJvZHkgPSBhd2FpdCByLmpzb24oKTtcbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICBib2R5ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgb2s6IHIub2ssIHN0YXR1czogci5zdGF0dXMsIGJvZHkgfTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHsgb2ssIHN0YXR1cywgYm9keSB9KSA9PiB7XG4gICAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IGZhaWwgPSAobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2RvY3VtZW50TG9hZEZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgZGV0YWlsOiB7IGRvY3VtZW50SWQ6IFN0cmluZyhpZCksIG1lc3NhZ2UgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKCFvaykgZmFpbChgQ291bGQgbm90IGxvYWQgZG9jdW1lbnQgKEhUVFAgJHtzdGF0dXMgfHwgJ2Vycm9yJ30pLmApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYm9keS5lcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gYm9keS5lcnJvcjtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGVyciAmJiAoZXJyLm1lc3NhZ2UgIT0gbnVsbCB8fCBlcnIuZGF0YSAhPSBudWxsKVxuICAgICAgICAgICAgICA/IFN0cmluZyhlcnIubWVzc2FnZSAhPSBudWxsID8gZXJyLm1lc3NhZ2UgOiBlcnIuZGF0YSlcbiAgICAgICAgICAgICAgOiAnSHViIHJlZnVzZWQgdGhlIGRvY3VtZW50IHJlcXVlc3QuJztcbiAgICAgICAgICAgIGZhaWwobXNnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGJvZHkucmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghb2spIGZhaWwoYENvdWxkIG5vdCBsb2FkIGRvY3VtZW50IChIVFRQICR7c3RhdHVzIHx8ICdlcnJvcid9KS5gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYXBwbGllZCA9IGJyaWRnZS5tZXJnZUdldERvY3VtZW50UnBjUmVzdWx0KGJvZHkucmVzdWx0KTtcbiAgICAgICAgICBpZiAoIWFwcGxpZWQgJiYgYm9keS5yZXN1bHQgJiYgYm9keS5yZXN1bHQudHlwZSA9PT0gJ0dldERvY3VtZW50UmVzdWx0Jykge1xuICAgICAgICAgICAgZmFpbChcbiAgICAgICAgICAgICAgKGJvZHkucmVzdWx0Lm1lc3NhZ2UgJiYgU3RyaW5nKGJvZHkucmVzdWx0Lm1lc3NhZ2UpKSB8fCAnRG9jdW1lbnQgY291bGQgbm90IGJlIGxvYWRlZCBmcm9tIHRoZSBodWIuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZG9jdW1lbnRMb2FkRmFpbGVkJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGRvY3VtZW50SWQ6IFN0cmluZyhpZCksXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IChlcnIgJiYgZXJyLm1lc3NhZ2UpID8gZXJyLm1lc3NhZ2UgOiAnTmV0d29yayBlcnJvciB3aGlsZSBsb2FkaW5nIGRvY3VtZW50IGZyb20gaHViLidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH0sIDIwMDApO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9O1xuICB9LCBbaWQsIGRvYywgcHJvcHMuYnJpZGdlUmVmXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IGQgPSBlICYmIGUuZGV0YWlsO1xuICAgICAgaWYgKCFkIHx8IGQuZG9jdW1lbnRJZCA9PSBudWxsKSByZXR1cm47XG4gICAgICBjb25zdCBkb2NJZCA9IFN0cmluZyhkLmRvY3VtZW50SWQpO1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2NJZCA9PT0gU3RyaW5nKGlkKSB8fCAoZG9jICYmIChkb2Muc2hhMjU2ID09PSBkb2NJZCB8fCBkb2Muc2hhID09PSBkb2NJZCkpO1xuICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuO1xuICAgICAgc2V0TG9hZEVycm9yKGQubWVzc2FnZSB8fCAnRG9jdW1lbnQgbm90IGZvdW5kLicpO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZG9jdW1lbnRMb2FkRmFpbGVkJywgaGFuZGxlcik7XG4gICAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RvY3VtZW50TG9hZEZhaWxlZCcsIGhhbmRsZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LCBbaWQsIGRvY10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpZCB8fCBkb2MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0TG9hZEVycm9yKChwcmV2KSA9PiBwcmV2IHx8ICdObyByZXNwb25zZSBmcm9tIGh1YiB3aGlsZSBsb2FkaW5nIHRoaXMgZG9jdW1lbnQuIENoZWNrIHlvdXIgY29ubmVjdGlvbiBvciB0cnkgUmVmcmVzaC4nKTtcbiAgICB9LCAyMjAwMCk7XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0KTtcbiAgfSwgW2lkLCBkb2NdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFB1Ymxpc2hQcmljZVNhdHMoREVGQVVMVF9QVUJMSVNIX1BSSUNFX1NBVFMpO1xuICAgIHNldFB1Ymxpc2hFcnJvcihudWxsKTtcbiAgfSwgW2lkXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRQZWVyT2ZmZXJLZXkoJycpO1xuICAgIHNldFBlZXJPZmZlckJ1c3koZmFsc2UpO1xuICAgIHNldFBlZXJPZmZlckVycm9yKG51bGwpO1xuICAgIHNldFBlZXJPZmZlclN1Y2Nlc3MobnVsbCk7XG4gIH0sIFtpZF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0SHRsY1ByZWltYWdlSGV4KCcnKTtcbiAgICBzZXRIdGxjVW5sb2NrRXJyb3IobnVsbCk7XG4gICAgc2V0SHRsY1VubG9ja0J1c3koZmFsc2UpO1xuICB9LCBbaWQsIGRvYz8uaHRsY1BlbmRpbmdEZWNyeXB0XSk7XG5cbiAgLy8gTGlzdGVuIGZvciBwYXktdG8tZGlzdHJpYnV0ZSBpbnZvaWNlOyBzaG93IHBheW1lbnQgc3RlcCB3aGVuIGl0IG1hdGNoZXMgdGhpcyBkb2N1bWVudFxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgZGV0YWlsID0gZSAmJiBlLmRldGFpbDtcbiAgICAgIGlmICghZGV0YWlsIHx8ICFkZXRhaWwuZG9jdW1lbnRJZCkgcmV0dXJuO1xuICAgICAgY29uc3QgZG9jSWQgPSBkZXRhaWwuZG9jdW1lbnRJZDtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jSWQgPT09IGlkIHx8IChkb2MgJiYgKGRvYy5zaGEyNTYgPT09IGRvY0lkIHx8IGRvYy5zaGEgPT09IGRvY0lkKSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgc2V0RGlzdHJpYnV0ZUludm9pY2Uoe1xuICAgICAgICAgIGFkZHJlc3M6IGRldGFpbC5hZGRyZXNzLFxuICAgICAgICAgIGFtb3VudFNhdHM6IGRldGFpbC5hbW91bnRTYXRzLFxuICAgICAgICAgIGNvbmZpZzogZGV0YWlsLmNvbmZpZyxcbiAgICAgICAgICBuZXR3b3JrOiBkZXRhaWwubmV0d29ya1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0RGlzdHJpYnV0ZVR4aWQoJycpO1xuICAgICAgICBzZXREaXN0cmlidXRlQnVzeShmYWxzZSk7XG4gICAgICAgIHNldERpc3RyaWJ1dGVFcnJvcihudWxsKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkaXN0cmlidXRlSW52b2ljZVJlYWR5JywgaGFuZGxlcik7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkaXN0cmlidXRlSW52b2ljZVJlYWR5JywgaGFuZGxlcik7XG4gIH0sIFtpZCwgZG9jXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IGRldGFpbCA9IGUgJiYgZS5kZXRhaWw7XG4gICAgICBpZiAoIWRldGFpbCB8fCAhZGV0YWlsLmRvY3VtZW50SWQpIHJldHVybjtcbiAgICAgIGNvbnN0IGRvY0lkID0gZGV0YWlsLmRvY3VtZW50SWQ7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY0lkID09PSBpZCB8fCAoZG9jICYmIChkb2Muc2hhMjU2ID09PSBkb2NJZCB8fCBkb2Muc2hhID09PSBkb2NJZCkpO1xuICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuO1xuICAgICAgc2V0RGlzdHJpYnV0ZUJ1c3koZmFsc2UpO1xuICAgICAgc2V0RGlzdHJpYnV0ZUludm9pY2UobnVsbCk7XG4gICAgICBzZXREaXN0cmlidXRlRXJyb3IoU3RyaW5nKGRldGFpbC5tZXNzYWdlIHx8ICdDb3VsZCBub3QgY3JlYXRlIGRpc3RyaWJ1dGUgaW52b2ljZScpKTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkaXN0cmlidXRlSW52b2ljZUZhaWxlZCcsIGhhbmRsZXIpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGlzdHJpYnV0ZUludm9pY2VGYWlsZWQnLCBoYW5kbGVyKTtcbiAgfSwgW2lkLCBkb2NdKTtcblxuICAvLyBJZiBDcmVhdGVEaXN0cmlidXRlSW52b2ljZSBuZXZlciByZXR1cm5zIG92ZXIgV2ViU29ja2V0LCByZXRyeSB2aWEgc2FtZS1vcmlnaW4gSFRUUCBKU09OLVJQQy5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRpc3RyaWJ1dGVPcGVuIHx8IGRpc3RyaWJ1dGVJbnZvaWNlIHx8IGRpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZCB8fCAhZGlzdHJpYnV0ZUJ1c3kpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgIGNvbnN0IGJyaWRnZSA9IHByb3BzLmJyaWRnZVJlZiAmJiBwcm9wcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IGJhY2tlbmRJZCA9IChkb2MgJiYgZG9jLnNoYTI1NikgPyBTdHJpbmcoZG9jLnNoYTI1NikgOiBTdHJpbmcoaWQpO1xuICAgICAgaWYgKCFicmlkZ2UgfHwgdHlwZW9mIGJyaWRnZS5tZXJnZUNyZWF0ZURpc3RyaWJ1dGVJbnZvaWNlUnBjUmVzdWx0ICE9PSAnZnVuY3Rpb24nIHx8ICFiYWNrZW5kSWQpIHJldHVybjtcbiAgICAgIGNvbnN0IGFtb3VudCA9IHBhcnNlSW50KGRpc3RyaWJ1dGVBbW91bnRTYXRzLCAxMCk7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShhbW91bnQpIHx8IGFtb3VudCA8PSAwKSByZXR1cm47XG4gICAgICBjb25zdCBvcmlnaW4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgICA/IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgICAgOiAnJztcbiAgICAgIGlmICghb3JpZ2luKSByZXR1cm47XG4gICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgIGRvY3VtZW50SWQ6IGJhY2tlbmRJZCxcbiAgICAgICAgYW1vdW50U2F0czogYW1vdW50LFxuICAgICAgICBkZXNpcmVkQ29waWVzOiBNYXRoLm1heCgxLCBwYXJzZUludChkaXN0cmlidXRlRGVzaXJlZENvcGllcywgMTApIHx8IDEpLFxuICAgICAgICBkdXJhdGlvblllYXJzOiBkaXN0cmlidXRlRHVyYXRpb25ZZWFycyxcbiAgICAgICAgY2hhbGxlbmdlQ2FkZW5jZTogZGlzdHJpYnV0ZUNhZGVuY2UsXG4gICAgICAgIHJlc3BvbnNlRGVhZGxpbmU6IGRpc3RyaWJ1dGVEZWFkbGluZVxuICAgICAgfTtcbiAgICAgIGZldGNoKGAke29yaWdpbn0vc2VydmljZXMvcnBjYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICAgICAgaWQ6IERhdGUubm93KCksXG4gICAgICAgICAgbWV0aG9kOiAnQ3JlYXRlRGlzdHJpYnV0ZUludm9pY2UnLFxuICAgICAgICAgIHBhcmFtczogW2NvbmZpZ11cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICAgIC50aGVuKChyKSA9PiByLmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGJvZHkpID0+IHtcbiAgICAgICAgICBpZiAoY2FuY2VsbGVkIHx8ICFib2R5IHx8IGJvZHkucmVzdWx0ID09IG51bGwpIHJldHVybjtcbiAgICAgICAgICBicmlkZ2UubWVyZ2VDcmVhdGVEaXN0cmlidXRlSW52b2ljZVJwY1Jlc3VsdChib2R5LnJlc3VsdCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgfSwgMjUwMCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICBjbGVhclRpbWVvdXQodCk7XG4gICAgfTtcbiAgfSwgW1xuICAgIGRpc3RyaWJ1dGVPcGVuLFxuICAgIGRpc3RyaWJ1dGVJbnZvaWNlLFxuICAgIGRpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZCxcbiAgICBkaXN0cmlidXRlQnVzeSxcbiAgICBpZCxcbiAgICBkb2MsXG4gICAgZGlzdHJpYnV0ZUFtb3VudFNhdHMsXG4gICAgZGlzdHJpYnV0ZURlc2lyZWRDb3BpZXMsXG4gICAgZGlzdHJpYnV0ZUR1cmF0aW9uWWVhcnMsXG4gICAgZGlzdHJpYnV0ZUNhZGVuY2UsXG4gICAgZGlzdHJpYnV0ZURlYWRsaW5lLFxuICAgIHByb3BzLmJyaWRnZVJlZlxuICBdKTtcblxuICAvLyBXYWl0aW5nIGZvciBDcmVhdGVEaXN0cmlidXRlSW52b2ljZSAoc3RlcCAxKSDigJQgYXZvaWQgc3R1Y2sgbG9hZGluZyBpZiB0aGUgaHViIG5ldmVyIGFuc3dlcnNcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRpc3RyaWJ1dGVPcGVuIHx8IGRpc3RyaWJ1dGVJbnZvaWNlIHx8IGRpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZCB8fCAhZGlzdHJpYnV0ZUJ1c3kpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0RGlzdHJpYnV0ZUJ1c3koZmFsc2UpO1xuICAgICAgc2V0RGlzdHJpYnV0ZUVycm9yKChwcmV2KSA9PiBwcmV2IHx8ICdUaW1lZCBvdXQgd2FpdGluZyBmb3IgYSBkaXN0cmlidXRlIGludm9pY2UgZnJvbSB0aGUgaHViLiBDaGVjayBCaXRjb2luIGFuZCB0cnkgUmVxdWVzdCBpbnZvaWNlIGFnYWluLicpO1xuICAgIH0sIDQ1MDAwKTtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHQpO1xuICB9LCBbZGlzdHJpYnV0ZU9wZW4sIGRpc3RyaWJ1dGVJbnZvaWNlLCBkaXN0cmlidXRlU3VjY2Vzc0NvbnRyYWN0SWQsIGRpc3RyaWJ1dGVCdXN5XSk7XG5cbiAgLy8gV2hlbiBwYXltZW50IGlzIGJvbmRlZCAoY29udHJhY3QgY3JlYXRlZCksIHNob3cgc3VjY2VzcyBpbiB0aGUgZGlzdHJpYnV0ZSBtb2RhbFxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgZGV0YWlsID0gZSAmJiBlLmRldGFpbDtcbiAgICAgIGlmICghZGV0YWlsIHx8ICFkZXRhaWwuY29udHJhY3RJZCB8fCAhZGV0YWlsLmRvY3VtZW50SWQpIHJldHVybjtcbiAgICAgIGNvbnN0IGRvY0lkID0gZGV0YWlsLmRvY3VtZW50SWQ7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY0lkID09PSBpZCB8fCAoZG9jICYmIChkb2Muc2hhMjU2ID09PSBkb2NJZCB8fCBkb2Muc2hhID09PSBkb2NJZCkpO1xuICAgICAgaWYgKG1hdGNoICYmIGRpc3RyaWJ1dGVPcGVuKSB7XG4gICAgICAgIHNldERpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZChkZXRhaWwuY29udHJhY3RJZCk7XG4gICAgICAgIHNldERpc3RyaWJ1dGVCdXN5KGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlQ29udHJhY3RCb25kZWQnLCBoYW5kbGVyKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2VDb250cmFjdEJvbmRlZCcsIGhhbmRsZXIpO1xuICB9LCBbaWQsIGRvYywgZGlzdHJpYnV0ZU9wZW5dKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgZGV0YWlsID0gZSAmJiBlLmRldGFpbDtcbiAgICAgIGlmICghZGV0YWlsIHx8ICFkZXRhaWwuZG9jdW1lbnRJZCkgcmV0dXJuO1xuICAgICAgY29uc3QgZG9jSWQgPSBkZXRhaWwuZG9jdW1lbnRJZDtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jSWQgPT09IGlkIHx8IChkb2MgJiYgKGRvYy5zaGEyNTYgPT09IGRvY0lkIHx8IGRvYy5zaGEgPT09IGRvY0lkKSk7XG4gICAgICBpZiAoIW1hdGNoIHx8ICFkaXN0cmlidXRlT3BlbikgcmV0dXJuO1xuICAgICAgc2V0RGlzdHJpYnV0ZUJ1c3koZmFsc2UpO1xuICAgICAgc2V0RGlzdHJpYnV0ZUVycm9yKGRldGFpbC5tZXNzYWdlIHx8ICdDcmVhdGUgc3RvcmFnZSBjb250cmFjdCBmYWlsZWQuJyk7XG4gICAgfTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZUNvbnRyYWN0Qm9uZEZhaWxlZCcsIGhhbmRsZXIpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RvcmFnZUNvbnRyYWN0Qm9uZEZhaWxlZCcsIGhhbmRsZXIpO1xuICB9LCBbaWQsIGRvYywgZGlzdHJpYnV0ZU9wZW5dKTtcblxuICAvLyBUaW1lb3V0IGZhbGxiYWNrIGlmIHN0b3JhZ2VDb250cmFjdEJvbmRlZCBuZXZlciBhcnJpdmVzXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkaXN0cmlidXRlQnVzeSB8fCBkaXN0cmlidXRlU3VjY2Vzc0NvbnRyYWN0SWQpIHJldHVybjtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXREaXN0cmlidXRlQnVzeShmYWxzZSk7XG4gICAgICBzZXREaXN0cmlidXRlRXJyb3IoJ0NvbnRyYWN0IGNyZWF0aW9uIGlzIHRha2luZyBsb25nZXIgdGhhbiBleHBlY3RlZC4gQ2hlY2sgdGhlIGNvbnRyYWN0IGxpc3Qgb3IgdHJ5IGFnYWluLicpO1xuICAgIH0sIDE1MDAwKTtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB9LCBbZGlzdHJpYnV0ZUJ1c3ksIGRpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYnVtcCA9ICgpID0+IHNldFBlZXJMaXN0VGljaygodCkgPT4gdCArIDEpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbmV0d29ya1N0YXR1c1VwZGF0ZScsIGJ1bXApO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdnbG9iYWxTdGF0ZVVwZGF0ZScsIGJ1bXApO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbmV0d29ya1N0YXR1c1VwZGF0ZScsIGJ1bXApO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2dsb2JhbFN0YXRlVXBkYXRlJywgYnVtcCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IChlKSA9PiB7XG4gICAgICBjb25zdCBkID0gZSAmJiBlLmRldGFpbDtcbiAgICAgIGlmICghZCB8fCBkLmRvY3VtZW50SWQgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgY29uc3QgZG9jSWQgPSBTdHJpbmcoZC5kb2N1bWVudElkKTtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jSWQgPT09IFN0cmluZyhpZCkgfHwgKGRvYyAmJiAoZG9jLnNoYTI1NiA9PT0gZG9jSWQgfHwgZG9jLnNoYSA9PT0gZG9jSWQpKTtcbiAgICAgIGlmICghbWF0Y2gpIHJldHVybjtcbiAgICAgIHNldFBlZXJPZmZlckJ1c3koZmFsc2UpO1xuICAgICAgc2V0UGVlck9mZmVyRXJyb3IobnVsbCk7XG4gICAgICBjb25zdCBwaWQgPSBkLnByb3Bvc2FsSWQgPyBTdHJpbmcoZC5wcm9wb3NhbElkKSA6ICcnO1xuICAgICAgc2V0UGVlck9mZmVyU3VjY2VzcyhcbiAgICAgICAgcGlkXG4gICAgICAgICAgPyBgSG9zdGluZyBvZmZlciBzZW50ICgke3Nob3J0SGV4SWQocGlkKX0pLiBXaGVuIHRoZSBwZWVyIGFjY2VwdHMsIHBheSB0aGVpciBpbnZvaWNlIHRvIGJvbmQgc3RvcmFnZS5gXG4gICAgICAgICAgOiAnSG9zdGluZyBvZmZlciBzZW50LiBXaGVuIHRoZSBwZWVyIGFjY2VwdHMsIHBheSB0aGVpciBpbnZvaWNlIHRvIGJvbmQgc3RvcmFnZS4nXG4gICAgICApO1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Rpc3RyaWJ1dGVQcm9wb3NhbFNlbnQnLCBoYW5kbGVyKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Rpc3RyaWJ1dGVQcm9wb3NhbFNlbnQnLCBoYW5kbGVyKTtcbiAgfSwgW2lkLCBkb2NdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgZCA9IGUgJiYgZS5kZXRhaWw7XG4gICAgICBpZiAoIWQgfHwgZC5kb2N1bWVudElkID09IG51bGwpIHJldHVybjtcbiAgICAgIGNvbnN0IGRvY0lkID0gU3RyaW5nKGQuZG9jdW1lbnRJZCk7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY0lkID09PSBTdHJpbmcoaWQpIHx8IChkb2MgJiYgKGRvYy5zaGEyNTYgPT09IGRvY0lkIHx8IGRvYy5zaGEgPT09IGRvY0lkKSk7XG4gICAgICBpZiAoIW1hdGNoKSByZXR1cm47XG4gICAgICBzZXRQZWVyT2ZmZXJCdXN5KGZhbHNlKTtcbiAgICAgIHNldFBlZXJPZmZlclN1Y2Nlc3MobnVsbCk7XG4gICAgICBzZXRQZWVyT2ZmZXJFcnJvcihTdHJpbmcoZC5tZXNzYWdlIHx8ICdDb3VsZCBub3Qgc2VuZCBob3N0aW5nIG9mZmVyJykpO1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Rpc3RyaWJ1dGVQcm9wb3NhbEZhaWxlZCcsIGhhbmRsZXIpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGlzdHJpYnV0ZVByb3Bvc2FsRmFpbGVkJywgaGFuZGxlcik7XG4gIH0sIFtpZCwgZG9jXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXBlZXJPZmZlckJ1c3kpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0UGVlck9mZmVyQnVzeShmYWxzZSk7XG4gICAgICBzZXRQZWVyT2ZmZXJFcnJvcigocHJldikgPT4gcHJldiB8fCAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSB0aGUgaHViLicpO1xuICAgIH0sIDQ1MDAwKTtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHQpO1xuICB9LCBbcGVlck9mZmVyQnVzeV0pO1xuXG4gIC8vIExpc3RlbiBmb3IgSFRMQyBwdXJjaGFzZSBpbnZvaWNlXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IChlKSA9PiB7XG4gICAgICBjb25zdCBkZXRhaWwgPSBlICYmIGUuZGV0YWlsO1xuICAgICAgaWYgKCFkZXRhaWwgfHwgIWRldGFpbC5kb2N1bWVudElkKSByZXR1cm47XG4gICAgICBjb25zdCBkb2NJZCA9IGRldGFpbC5kb2N1bWVudElkO1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2NJZCA9PT0gaWQgfHwgKGRvYyAmJiAoZG9jLnNoYTI1NiA9PT0gZG9jSWQgfHwgZG9jLnNoYSA9PT0gZG9jSWQpKTtcbiAgICAgIGlmIChtYXRjaCAmJiBwdXJjaGFzZU9wZW4pIHtcbiAgICAgICAgc2V0UHVyY2hhc2VJbnZvaWNlKHtcbiAgICAgICAgICBhZGRyZXNzOiBkZXRhaWwuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnRTYXRzOiBkZXRhaWwuYW1vdW50U2F0cyxcbiAgICAgICAgICBjb250ZW50SGFzaDogZGV0YWlsLmNvbnRlbnRIYXNoLFxuICAgICAgICAgIG5ldHdvcms6IGRldGFpbC5uZXR3b3JrXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRQdXJjaGFzZVR4aWQoJycpO1xuICAgICAgICBzZXRQdXJjaGFzZUVycm9yKG51bGwpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3B1cmNoYXNlSW52b2ljZVJlYWR5JywgaGFuZGxlcik7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwdXJjaGFzZUludm9pY2VSZWFkeScsIGhhbmRsZXIpO1xuICB9LCBbaWQsIGRvYywgcHVyY2hhc2VPcGVuXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVyID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IGRldGFpbCA9IGUgJiYgZS5kZXRhaWw7XG4gICAgICBpZiAoIWRldGFpbCB8fCAhZGV0YWlsLmRvY3VtZW50SWQpIHJldHVybjtcbiAgICAgIGNvbnN0IGRvY0lkID0gZGV0YWlsLmRvY3VtZW50SWQ7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY0lkID09PSBpZCB8fCAoZG9jICYmIChkb2Muc2hhMjU2ID09PSBkb2NJZCB8fCBkb2Muc2hhID09PSBkb2NJZCkpO1xuICAgICAgaWYgKG1hdGNoICYmIHB1cmNoYXNlT3Blbikge1xuICAgICAgICBzZXRQdXJjaGFzZUludm9pY2UobnVsbCk7XG4gICAgICAgIHNldFB1cmNoYXNlRXJyb3IoU3RyaW5nKGRldGFpbC5tZXNzYWdlIHx8ICdDb3VsZCBub3QgY3JlYXRlIHB1cmNoYXNlIGludm9pY2UnKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncHVyY2hhc2VJbnZvaWNlRmFpbGVkJywgaGFuZGxlcik7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwdXJjaGFzZUludm9pY2VGYWlsZWQnLCBoYW5kbGVyKTtcbiAgfSwgW2lkLCBkb2MsIHB1cmNoYXNlT3Blbl0pO1xuXG4gIC8vIElmIHRoZSBodWIgbmV2ZXIgYW5zd2VycywgYXZvaWQgYW4gaW5maW5pdGUgXCJSZXF1ZXN0aW5nIGludm9pY2XigKZcIiBzdGF0ZS5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXB1cmNoYXNlT3BlbiB8fCBwdXJjaGFzZUludm9pY2UgfHwgcHVyY2hhc2VkQ29udGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRQdXJjaGFzZUVycm9yKChwcmV2KSA9PiBwcmV2IHx8ICdUaW1lZCBvdXQgd2FpdGluZyBmb3IgYSBwdXJjaGFzZSBpbnZvaWNlIGZyb20gdGhlIGh1Yi4gQ2hlY2sgQml0Y29pbiwgcHVibGlzaCBzdGF0dXMsIGFuZCBsaXN0IHByaWNlLCB0aGVuIGNsb3NlIGFuZCB0cnkgUHVyY2hhc2UgYWdhaW4uJyk7XG4gICAgfSwgNDUwMDApO1xuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodCk7XG4gIH0sIFtwdXJjaGFzZU9wZW4sIHB1cmNoYXNlSW52b2ljZSwgcHVyY2hhc2VkQ29udGVudF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IChldmVudCkgPT4ge1xuICAgICAgY29uc3QgZ3MgPSBldmVudCAmJiBldmVudC5kZXRhaWwgJiYgZXZlbnQuZGV0YWlsLmdsb2JhbFN0YXRlO1xuICAgICAgaWYgKCFncyB8fCAhZ3MuZG9jdW1lbnRzKSByZXR1cm47XG4gICAgICBjb25zdCBjYW5kaWRhdGUgPSBwaWNrRG9jdW1lbnRGcm9tTWFwKGdzLmRvY3VtZW50cywgaWQpO1xuICAgICAgaWYgKGNhbmRpZGF0ZSkge1xuICAgICAgICBzZXRMb2FkRXJyb3IobnVsbCk7XG4gICAgICAgIHNldERvYyhjYW5kaWRhdGUpO1xuICAgICAgICBzZXREZWNyeXB0ZWRDb250ZW50KG51bGwpO1xuICAgICAgICBzZXRVbmxvY2tlZChmYWxzZSk7XG4gICAgICAgIGlmIChjYW5kaWRhdGUucHVibGlzaGVkKSB7XG4gICAgICAgICAgc2V0SXNQdWJsaXNoaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2dsb2JhbFN0YXRlVXBkYXRlJywgaGFuZGxlcik7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdnbG9iYWxTdGF0ZVVwZGF0ZScsIGhhbmRsZXIpO1xuICB9LCBbaWRdKTtcblxuICAvLyBPbiBtb3VudCwgaHlkcmF0ZSBmcm9tIGV4aXN0aW5nIEJyaWRnZSBnbG9iYWxTdGF0ZSBzbyBsb2NhbGx5LWFkZGVkIGRvY3VtZW50c1xuICAvLyBhcmUgaW1tZWRpYXRlbHkgdmlzaWJsZSB3aXRob3V0IHdhaXRpbmcgZm9yIGFub3RoZXIgZXZlbnQuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJyaWRnZVJlZiA9IHByb3BzLmJyaWRnZVJlZjtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBicmlkZ2VSZWYgJiYgYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoIWN1cnJlbnQgfHwgdHlwZW9mIGN1cnJlbnQuZ2V0R2xvYmFsU3RhdGUgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICAgIGNvbnN0IGdzID0gY3VycmVudC5nZXRHbG9iYWxTdGF0ZSgpO1xuICAgICAgaWYgKCFncyB8fCAhZ3MuZG9jdW1lbnRzKSByZXR1cm47XG4gICAgICBjb25zdCBjYW5kaWRhdGUgPSBwaWNrRG9jdW1lbnRGcm9tTWFwKGdzLmRvY3VtZW50cywgaWQpO1xuICAgICAgaWYgKGNhbmRpZGF0ZSkge1xuICAgICAgICBzZXRMb2FkRXJyb3IobnVsbCk7XG4gICAgICAgIHNldERvYyhjYW5kaWRhdGUpO1xuICAgICAgICBzZXREZWNyeXB0ZWRDb250ZW50KG51bGwpO1xuICAgICAgICBzZXRVbmxvY2tlZChmYWxzZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfSwgW2lkLCBwcm9wcy5icmlkZ2VSZWZdKTtcblxuICAvLyBTdG9wIFwicHVibGlzaGluZ+KAplwiIHN0YXRlIG9uY2UgdGhlIGRvY3VtZW50IGhhcyBhIHB1Ymxpc2hlZCB0aW1lc3RhbXAsXG4gIC8vIG9yIGFmdGVyIGEgc2FmZXR5IHRpbWVvdXQgaWYgdGhlIGh1YiByZXBvcnRzIGFuIGVycm9yLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGJyaWRnZSA9IHByb3BzLmJyaWRnZVJlZiAmJiBwcm9wcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICBjb25zdCBwdWJsaXNoZWREb2NzID0gYnJpZGdlICYmIChicmlkZ2UubmV0d29ya1N0YXR1cz8ucHVibGlzaGVkRG9jdW1lbnRzIHx8IGJyaWRnZS5sYXN0TmV0d29ya1N0YXR1cz8ucHVibGlzaGVkRG9jdW1lbnRzKTtcbiAgICBjb25zdCBwdWIgPSAhIShkb2MgJiYgKGRvYy5wdWJsaXNoZWQgfHwgKHB1Ymxpc2hlZERvY3MgJiYgKHB1Ymxpc2hlZERvY3NbZG9jLmlkXSB8fCAoZG9jLnNoYTI1NiAmJiBwdWJsaXNoZWREb2NzW2RvYy5zaGEyNTZdKSkpKSk7XG4gICAgaWYgKGRvYyAmJiBwdWIpIHtcbiAgICAgIHNldElzUHVibGlzaGluZyhmYWxzZSk7XG4gICAgICBzZXRQdWJsaXNoRXJyb3IobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNQdWJsaXNoaW5nKSByZXR1cm47XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0SXNQdWJsaXNoaW5nKGZhbHNlKTtcbiAgICAgIHNldFB1Ymxpc2hFcnJvcigocHJldikgPT4gcHJldiB8fCAnTm8gcHVibGlzaCBjb25maXJtYXRpb24gZnJvbSB0aGUgaHViIHlldC4gQ2hlY2sgeW91ciBjb25uZWN0aW9uIG9yIHRyeSBhZ2Fpbi4nKTtcbiAgICB9LCAxMDAwMCk7XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfSwgW2RvYywgZG9jPy5wdWJsaXNoZWQsIGRvYz8uaWQsIGRvYz8uc2hhMjU2LCBpc1B1Ymxpc2hpbmcsIHByb3BzLmJyaWRnZVJlZiwgcGVlckxpc3RUaWNrXSk7XG5cbiAgLy8gSWYgdGhlIFdlYlNvY2tldCBkcm9wcyB0aGUgcHVibGlzaCByZXN1bHQsIHJlc3luYyBjYXRhbG9nICsgZG9jdW1lbnQgcm93IG92ZXIgSFRUUCAoc2FtZS1vcmlnaW4gUlBDKS5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzUHVibGlzaGluZyB8fCAhZG9jKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGJhY2tlbmRJZCA9IFN0cmluZyhkb2Muc2hhMjU2IHx8IGRvYy5pZCB8fCBpZCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghYmFja2VuZElkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgY29uc3QgYnJpZGdlID0gcHJvcHMuYnJpZGdlUmVmICYmIHByb3BzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgY29uc3Qgb3JpZ2luID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgICAgPyB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICAgIDogJyc7XG4gICAgICBpZiAoIWJyaWRnZSB8fCAhb3JpZ2luKSByZXR1cm47XG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGh5ZHJhdGVIdWJOZXR3b3JrU3RhdHVzVmlhSHR0cChicmlkZ2UsIG9yaWdpbik7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByID0gYXdhaXQgZmV0Y2goYCR7b3JpZ2lufS9zZXJ2aWNlcy9ycGNgLCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICAgICAgICAgIGlkOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICBtZXRob2Q6ICdHZXREb2N1bWVudCcsXG4gICAgICAgICAgICAgIHBhcmFtczogW2JhY2tlbmRJZF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IHIuanNvbigpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgIGlmIChjYW5jZWxsZWQgfHwgIWJvZHkgfHwgYm9keS5yZXN1bHQgPT0gbnVsbCB8fCB0eXBlb2YgYnJpZGdlLm1lcmdlR2V0RG9jdW1lbnRScGNSZXN1bHQgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICAgICAgICBicmlkZ2UubWVyZ2VHZXREb2N1bWVudFJwY1Jlc3VsdChib2R5LnJlc3VsdCk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICB9KSgpO1xuICAgIH0sIDM1MDApO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9O1xuICB9LCBbaXNQdWJsaXNoaW5nLCBkb2MsIGlkLCBwcm9wcy5icmlkZ2VSZWZdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgZCA9IGUgJiYgZS5kZXRhaWw7XG4gICAgICBpZiAoIWQgfHwgZC5kb2N1bWVudElkID09IG51bGwgfHwgU3RyaW5nKGQuZG9jdW1lbnRJZCkgPT09ICcnKSByZXR1cm47XG4gICAgICBjb25zdCBkb2NJZCA9IFN0cmluZyhkLmRvY3VtZW50SWQpO1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2NJZCA9PT0gaWQgfHwgKGRvYyAmJiAoZG9jLnNoYTI1NiA9PT0gZG9jSWQgfHwgZG9jLnNoYSA9PT0gZG9jSWQpKTtcbiAgICAgIGlmICghbWF0Y2gpIHJldHVybjtcbiAgICAgIHNldElzUHVibGlzaGluZyhmYWxzZSk7XG4gICAgICBzZXRQdWJsaXNoRXJyb3IoU3RyaW5nKGQubWVzc2FnZSB8fCAnUHVibGlzaCBmYWlsZWQnKSk7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwdWJsaXNoRG9jdW1lbnRGYWlsZWQnLCBoYW5kbGVyKTtcbiAgICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHVibGlzaERvY3VtZW50RmFpbGVkJywgaGFuZGxlcik7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtpZCwgZG9jXSk7XG5cbiAgLy8gRGVjcnlwdCBvbmx5IHdoZW4gdXNlciBjbGlja3MgVW5sb2NrIChmb3IgZW5jcnlwdGVkIGRvY3MpXG4gIGNvbnN0IGhhbmRsZVVubG9jayA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWRvYyB8fCBkZWNyeXB0ZWRDb250ZW50ICE9PSBudWxsKSByZXR1cm47XG4gICAgaWYgKCFwcm9wcy5oYXNEb2N1bWVudEtleSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vblJlcXVlc3RVbmxvY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJvcHMub25SZXF1ZXN0VW5sb2NrKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJhdyA9IGRvYy5jb250ZW50QmFzZTY0IHx8ICh0eXBlb2YgcHJvcHMub25HZXREZWNyeXB0ZWRDb250ZW50ID09PSAnZnVuY3Rpb24nICYmIHByb3BzLm9uR2V0RGVjcnlwdGVkQ29udGVudChpZCkpO1xuICAgIGlmIChyYXcpIHNldERlY3J5cHRlZENvbnRlbnQocmF3KTtcbiAgICBzZXRVbmxvY2tlZCh0cnVlKTtcbiAgfSwgW2RvYywgaWQsIGRlY3J5cHRlZENvbnRlbnQsIHByb3BzLmhhc0RvY3VtZW50S2V5LCBwcm9wcy5vbkdldERlY3J5cHRlZENvbnRlbnQsIHByb3BzLm9uUmVxdWVzdFVubG9ja10pO1xuXG4gIGNvbnN0IGhhbmRsZUh0bGNQcmVpbWFnZVVubG9jayA9IFJlYWN0LnVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWRvYyB8fCAhZG9jLmh0bGNQZW5kaW5nRGVjcnlwdCB8fCB0eXBlb2YgcHJvcHMub25VbmxvY2tIdGxjRG9jdW1lbnQgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICBzZXRIdGxjVW5sb2NrQnVzeSh0cnVlKTtcbiAgICBzZXRIdGxjVW5sb2NrRXJyb3IobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBwcm9wcy5vblVubG9ja0h0bGNEb2N1bWVudChpZCwgaHRsY1ByZWltYWdlSGV4LnRyaW0oKSk7XG4gICAgICBpZiAoIXIgfHwgIXIub2spIHtcbiAgICAgICAgc2V0SHRsY1VubG9ja0Vycm9yKChyICYmIHIuZXJyb3IpIHx8ICdVbmxvY2sgZmFpbGVkLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0SHRsY1ByZWltYWdlSGV4KCcnKTtcbiAgICAgICAgc2V0VW5sb2NrZWQoZmFsc2UpO1xuICAgICAgICBzZXREZWNyeXB0ZWRDb250ZW50KG51bGwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldEh0bGNVbmxvY2tFcnJvcigoZSAmJiBlLm1lc3NhZ2UpIHx8ICdVbmxvY2sgZmFpbGVkLicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRIdGxjVW5sb2NrQnVzeShmYWxzZSk7XG4gICAgfVxuICB9LCBbZG9jLCBpZCwgaHRsY1ByZWltYWdlSGV4LCBwcm9wcy5vblVubG9ja0h0bGNEb2N1bWVudF0pO1xuXG4gIGNvbnN0IGlzRW5jcnlwdGVkID0gISEoZG9jICYmIGRvYy5jb250ZW50RW5jcnlwdGVkKTtcbiAgY29uc3QgaXNIdGxjUGVuZGluZ0RlY3J5cHQgPSAhIShkb2MgJiYgZG9jLmh0bGNQZW5kaW5nRGVjcnlwdCk7XG4gIGNvbnN0IG5hbWUgPSAoZG9jICYmIGRvYy5uYW1lKSB8fCBpZDtcbiAgY29uc3QgbWltZSA9IChkb2MgJiYgZG9jLm1pbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuICBjb25zdCBjcmVhdGVkID0gZG9jICYmIGRvYy5jcmVhdGVkID8gbmV3IERhdGUoZG9jLmNyZWF0ZWQpLnRvTG9jYWxlU3RyaW5nKCkgOiAnJztcbiAgLy8gUHVibGlzaGVkIHN0YXRlOiBwcmVmZXIgaHViIGdsb2JhbCBzdG9yZSAocHVibGlzaGVkRG9jdW1lbnRzKSBvdmVyIGRvYy5wdWJsaXNoZWRcbiAgY29uc3QgcHVibGlzaGVkRG9jcyA9IHByb3BzLmJyaWRnZVJlZj8uY3VycmVudD8ubmV0d29ya1N0YXR1cz8ucHVibGlzaGVkRG9jdW1lbnRzIHx8IHByb3BzLmJyaWRnZVJlZj8uY3VycmVudD8ubGFzdE5ldHdvcmtTdGF0dXM/LnB1Ymxpc2hlZERvY3VtZW50cztcbiAgY29uc3QgaXNQdWJsaXNoZWRJblN0b3JlID0gISEoZG9jICYmIChkb2MucHVibGlzaGVkIHx8IChwdWJsaXNoZWREb2NzICYmIChwdWJsaXNoZWREb2NzW2lkXSB8fCAoZG9jLnNoYTI1NiAmJiBwdWJsaXNoZWREb2NzW2RvYy5zaGEyNTZdKSkpKSk7XG4gIGNvbnN0IHB1Ymxpc2hlZFRzID0gZG9jPy5wdWJsaXNoZWQgfHwgKHB1Ymxpc2hlZERvY3MgJiYgKHB1Ymxpc2hlZERvY3NbaWRdIHx8IChkb2M/LnNoYTI1NiAmJiBwdWJsaXNoZWREb2NzW2RvYy5zaGEyNTZdKSk/LnB1Ymxpc2hlZCk7XG4gIGNvbnN0IHB1Ymxpc2hlZEF0ID0gcHVibGlzaGVkVHMgPyBuZXcgRGF0ZShwdWJsaXNoZWRUcykudG9Mb2NhbGVTdHJpbmcoKSA6ICcnO1xuICBjb25zdCBzdG9yYWdlQ29udHJhY3RJZCA9IGRvYyAmJiBkb2Muc3RvcmFnZUNvbnRyYWN0SWQ7XG4gIGNvbnN0IGRvY1B1cmNoYXNlUHJpY2VTYXRzID0gZG9jICYmIGRvYy5wdXJjaGFzZVByaWNlU2F0cztcbiAgY29uc3QgY2FuUHVyY2hhc2UgPSAhIShkb2MgJiYgaXNQdWJsaXNoZWRJblN0b3JlICYmIGRvY1B1cmNoYXNlUHJpY2VTYXRzICYmIGRvY1B1cmNoYXNlUHJpY2VTYXRzID4gMCk7XG4gIC8qKiBFbmNyeXB0ZWQgYm9keSAobm90IEhUTEMgcHJlaW1hZ2UgZmxvdykgcmVxdWlyZXMgYW4gdW5sb2NrZWQgaWRlbnRpdHkga2V5IHRvIHB1Ymxpc2ggb3IgZGVjcnlwdC4gKi9cbiAgY29uc3QgbmVlZHNJZGVudGl0eUtleUZvckVuY3J5cHRlZEJvZHkgPSAhIShkb2MgJiYgaXNFbmNyeXB0ZWQgJiYgIWlzSHRsY1BlbmRpbmdEZWNyeXB0ICYmICFwcm9wcy5oYXNEb2N1bWVudEtleSk7XG4gIGNvbnN0IGZhYnJpY1BlZXJJZCA9IHByb3BzLmJyaWRnZVJlZj8uY3VycmVudD8ubmV0d29ya1N0YXR1cz8uZmFicmljUGVlcklkXG4gICAgfHwgcHJvcHMuYnJpZGdlUmVmPy5jdXJyZW50Py5sYXN0TmV0d29ya1N0YXR1cz8uZmFicmljUGVlcklkXG4gICAgfHwgbnVsbDtcbiAgY29uc3QgYnJpZGdlRm9yV2lyZSA9IHByb3BzLmJyaWRnZVJlZiAmJiBwcm9wcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgY29uc3Qgc2VydmVyRmxhZ3MgPSBsb2FkU2VydmVyRmVhdHVyZUZsYWdzKGJyaWRnZUZvcldpcmUpO1xuICBjb25zdCBkaXN0cmlidXRlRW5hYmxlZCA9ICEhc2VydmVyRmxhZ3MuZGlzdHJpYnV0ZTtcbiAgY29uc3QgZG9jdW1lbnRQdXJjaGFzZUVuYWJsZWQgPSBzZXJ2ZXJGbGFncy5kb2N1bWVudFB1cmNoYXNlICE9PSBmYWxzZTtcbiAgY29uc3QgZGlzdHJpYnV0ZU1vZGFsTm9Mb2NhbFdpcmUgPSAhIShicmlkZ2VGb3JXaXJlICYmIHR5cGVvZiBicmlkZ2VGb3JXaXJlLmhhc0xvY2FsV2lyZVNpZ25pbmdLZXkgPT09ICdmdW5jdGlvbicgJiYgIWJyaWRnZUZvcldpcmUuaGFzTG9jYWxXaXJlU2lnbmluZ0tleSgpKTtcbiAgLyoqIFB1Ymxpc2ggLyBwYXktdG8tZGlzdHJpYnV0ZSByZXF1aXJlIGFuIHVubG9ja2VkIEZhYnJpYyBpZGVudGl0eSBzbyBKU09OLVJQQyBpcyBTY2hub3JyLXNpZ25lZCBhbmQgbG9jYWwgYnl0ZXMgYXJlIGF2YWlsYWJsZS4gKi9cbiAgY29uc3QgbmVlZHNJZGVudGl0eVVubG9jayA9ICFwcm9wcy5oYXNEb2N1bWVudEtleTtcbiAgY29uc3QgYXV0aG9yRG9jSWQgPSBkb2MgJiYgKGRvYy5saW5lYWdlIHx8IGRvYy5pZCkgPyBTdHJpbmcoZG9jLmxpbmVhZ2UgfHwgZG9jLmlkKSA6ICcnO1xuXG4gIGNvbnN0IGZhYnJpY1BlZXJzRm9yT2ZmZXIgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBjdXIgPSBwcm9wcy5icmlkZ2VSZWYgJiYgcHJvcHMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgbnMgPSBjdXIgJiYgKGN1ci5uZXR3b3JrU3RhdHVzIHx8IGN1ci5sYXN0TmV0d29ya1N0YXR1cyk7XG4gICAgcmV0dXJuIGZhYnJpY1RjcFBlZXJzRnJvbU5ldHdvcmtTdGF0dXMobnMpO1xuICB9LCBbcHJvcHMuYnJpZGdlUmVmLCBwZWVyTGlzdFRpY2tdKTtcblxuICBjb25zdCBmYWJyaWNQZWVyRHJvcGRvd25PcHRpb25zID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGZhYnJpY1BlZXJzRm9yT2ZmZXIubWFwKChwKSA9PiB7XG4gICAgICBjb25zdCBhZGRyID0gU3RyaW5nKHAuYWRkcmVzcyB8fCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgcGlkID0gU3RyaW5nKHAuaWQgfHwgJycpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGlkIHx8IGFkZHI7XG4gICAgICBjb25zdCB0ZXh0ID0gKGFkZHIgJiYgcGlkICYmIGFkZHIgIT09IHBpZClcbiAgICAgICAgPyBgJHthZGRyfSAoJHtzaG9ydEhleElkKHBpZCl9KWBcbiAgICAgICAgOiAoYWRkciB8fCBzaG9ydEhleElkKHBpZCkgfHwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHsga2V5OiB2YWx1ZSwgdGV4dCwgdmFsdWUgfTtcbiAgICB9KS5maWx0ZXIoKG8pID0+IG8udmFsdWUpO1xuICB9LCBbZmFicmljUGVlcnNGb3JPZmZlcl0pO1xuXG4gIGNvbnN0IGFkbWluVG9rZW5SZXNvbHZlZCA9IFN0cmluZyhcbiAgICByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKHByb3BzLmFkbWluVG9rZW4pXG4gICkudHJpbSgpO1xuICBjb25zdCBjYW5BZG1pblVucHVibGlzaCA9ICEhKGFkbWluVG9rZW5SZXNvbHZlZCAmJiBkb2MgJiYgaXNQdWJsaXNoZWRJblN0b3JlICYmIGlkKTtcblxuICBjb25zdCBoYW5kbGVDb25maXJtVG9tYnN0b25lID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghaWQpIHJldHVybjtcbiAgICBjb25zdCB0b2tlbiA9IFN0cmluZyhcbiAgICAgIHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIocHJvcHMuYWRtaW5Ub2tlbilcbiAgICApLnRyaW0oKTtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICBzZXRUb21ic3RvbmVFcnJvcignQWRtaW4gdG9rZW4gcmVxdWlyZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJyaWRnZSA9IHByb3BzLmJyaWRnZVJlZiAmJiBwcm9wcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICBpZiAoIWJyaWRnZSB8fCB0eXBlb2YgYnJpZGdlLmVtaXRUb21ic3RvbmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHNldFRvbWJzdG9uZUVycm9yKCdCcmlkZ2UgaXMgbm90IHJlYWR5LicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBIdWIgcHVibGlzaGVkIGNhdGFsb2cga2V5cyBkb2N1bWVudHMgYnkgY29udGVudCBoYXNoOyBVUkwgbWF5IHVzZSBsaW5lYWdlIC8gYWN0b3IgaWQuXG4gICAgY29uc3QgY2Fub25pY2FsRG9jSWQgPSAoZG9jICYmIGRvYy5zaGEyNTYpID8gU3RyaW5nKGRvYy5zaGEyNTYpLnRyaW0oKSA6IFN0cmluZyhpZCkudHJpbSgpO1xuICAgIHNldFRvbWJzdG9uZUJ1c3kodHJ1ZSk7XG4gICAgc2V0VG9tYnN0b25lRXJyb3IobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBicmlkZ2UuZW1pdFRvbWJzdG9uZSh7IGRvY3VtZW50SWQ6IGNhbm9uaWNhbERvY0lkLCBhZG1pblRva2VuOiB0b2tlbiB9KTtcbiAgICAgIGlmICghciB8fCAhci5vaykge1xuICAgICAgICBzZXRUb21ic3RvbmVFcnJvcigociAmJiByLm1lc3NhZ2UpID8gci5tZXNzYWdlIDogJ1VucHVibGlzaCBmYWlsZWQuIENoZWNrIGFkbWluIHRva2VuIGFuZCB0aGF0IHRoZSBkb2N1bWVudCBpcyBzdGlsbCBpbiB0aGUgaHViIHB1Ymxpc2hlZCBjYXRhbG9nLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRUb21ic3RvbmVPcGVuKGZhbHNlKTtcbiAgICAgIGNvbnN0IHJlZnJlc2ggPSAoKSA9PiB7XG4gICAgICAgIGlmIChicmlkZ2UgJiYgdHlwZW9mIGJyaWRnZS5zZW5kTmV0d29ya1N0YXR1c1JlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBicmlkZ2Uuc2VuZE5ldHdvcmtTdGF0dXNSZXF1ZXN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vbkdldERvY3VtZW50ID09PSAnZnVuY3Rpb24nKSBwcm9wcy5vbkdldERvY3VtZW50KGlkKTtcbiAgICAgIH07XG4gICAgICBzZXRUaW1lb3V0KHJlZnJlc2gsIDQwMCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0VG9tYnN0b25lRXJyb3IoKGUgJiYgZS5tZXNzYWdlKSA/IGUubWVzc2FnZSA6ICdVbnB1Ymxpc2ggZmFpbGVkLicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRUb21ic3RvbmVCdXN5KGZhbHNlKTtcbiAgICB9XG4gIH0sIFtpZCwgcHJvcHMuYWRtaW5Ub2tlbiwgcHJvcHMuYnJpZGdlUmVmLCBwcm9wcy5vbkdldERvY3VtZW50XSk7XG5cbiAgLy8gTmV2ZXIgZXhwb3NlIGRlY3J5cHRlZCBjb250ZW50IHdoZW4gd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBkb2N1bWVudCBrZXksXG4gIC8vIGV2ZW4gaWYgY29udGVudEJhc2U2NCBpcyBzdGlsbCBwcmVzZW50IG9uIHRoZSBkb2MgZnJvbSBhIHByaW9yIHVubG9jay5cbiAgY29uc3QgcmF3Q29udGVudEJhc2U2NCA9IGRvYyAmJiAoZG9jLmNvbnRlbnRCYXNlNjQgfHwgZGVjcnlwdGVkQ29udGVudCk7XG4gIGNvbnN0IGNvbnRlbnRCYXNlNjQgPSBwcm9wcy5oYXNEb2N1bWVudEtleSA/IHJhd0NvbnRlbnRCYXNlNjQgOiBudWxsO1xuICBsZXQgZG93bmxvYWRIcmVmID0gbnVsbDtcbiAgaWYgKGNvbnRlbnRCYXNlNjQpIHtcbiAgICBkb3dubG9hZEhyZWYgPSBgZGF0YToke21pbWV9O2Jhc2U2NCwke2NvbnRlbnRCYXNlNjR9YDtcbiAgfVxuXG4gIC8vIEJhc2ljIHR5cGUgaGVscGVyc1xuICBjb25zdCBsb29rc1RleHQgPSAobWltZSAmJiBtaW1lLnN0YXJ0c1dpdGgoJ3RleHQvJykpIHx8IC9cXC4obWR8dHh0fGpzb258anN8dHN8aHRtbHxjc3N8bG9nfGRvdHxndikkL2kudGVzdChuYW1lIHx8ICcnKTtcbiAgY29uc3QgbG9va3NJbWFnZSA9IChtaW1lICYmIG1pbWUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHx8IC9cXC4ocG5nfGpwZT9nfGdpZnx3ZWJwfHN2ZykkL2kudGVzdChuYW1lIHx8ICcnKTtcblxuICAvLyBUZXh0IHByZXZpZXcgKG9ubHkgd2hlbiBpdCBsb29rcyBsaWtlIHRleHQpXG4gIGxldCB0ZXh0ID0gbnVsbDtcbiAgaWYgKGNvbnRlbnRCYXNlNjQgJiYgbG9va3NUZXh0ICYmIHByb3BzLmhhc0RvY3VtZW50S2V5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRleHQgPSBhdG9iKGNvbnRlbnRCYXNlNjQpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cblxuICBjb25zdCBzaG93R3JhcGhQcmV2aWV3ID0gISEodGV4dCAhPSBudWxsICYmIHByb3BzLmhhc0RvY3VtZW50S2V5ICYmXG4gICAgdHlwZW9mIEdyYXBoRG9jdW1lbnRQcmV2aWV3Lmxvb2tzTGlrZURvdFNvdXJjZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIEdyYXBoRG9jdW1lbnRQcmV2aWV3Lmxvb2tzTGlrZURvdFNvdXJjZSh0ZXh0LCBtaW1lLCBuYW1lKSk7XG5cbiAgLy8gSW1hZ2UgcHJldmlldyAoZGF0YSBVUkwpXG4gIGNvbnN0IGltYWdlU3JjID0gKGNvbnRlbnRCYXNlNjQgJiYgbG9va3NJbWFnZSkgPyBgZGF0YToke21pbWV9O2Jhc2U2NCwke2NvbnRlbnRCYXNlNjR9YCA6IG51bGw7XG5cbiAgLy8gSWYgdGhlIGFwcGxpY2F0aW9uIGlzIGFscmVhZHkgdW5sb2NrZWQgYW5kIEJyaWRnZSBjYW4gZGVjcnlwdCwgdHJ5IG9uY2UgYXV0b21hdGljYWxseSBzb1xuICAvLyB0aGUgdXNlciBkb2Vzbid0IGhhdmUgdG8gY2xpY2sgXCJVbmxvY2tcIiBhZ2FpbiBqdXN0IHRvIHZpZXcgYSBkb2N1bWVudC5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRvYykgcmV0dXJuO1xuICAgIGlmICghaXNFbmNyeXB0ZWQpIHJldHVybjtcbiAgICBpZiAoY29udGVudEJhc2U2NCkgcmV0dXJuOyAvLyBhbHJlYWR5IGhhdmUgY2xlYXJ0ZXh0XG4gICAgaWYgKGRlY3J5cHRlZENvbnRlbnQgIT09IG51bGwpIHJldHVybjtcbiAgICBpZiAoYXV0b1RyaWVkRGVjcnlwdCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgcHJvcHMub25HZXREZWNyeXB0ZWRDb250ZW50ICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG5cbiAgICBzZXRBdXRvVHJpZWREZWNyeXB0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXcgPSBwcm9wcy5vbkdldERlY3J5cHRlZENvbnRlbnQoaWQpO1xuICAgICAgaWYgKHJhdykge1xuICAgICAgICBzZXREZWNyeXB0ZWRDb250ZW50KHJhdyk7XG4gICAgICAgIHNldFVubG9ja2VkKHRydWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH0sIFtkb2MsIGlkLCBpc0VuY3J5cHRlZCwgY29udGVudEJhc2U2NCwgZGVjcnlwdGVkQ29udGVudCwgYXV0b1RyaWVkRGVjcnlwdCwgcHJvcHMub25HZXREZWNyeXB0ZWRDb250ZW50XSk7XG5cbiAgLy8gV2hlbiBkb2N1bWVudCBrZXkgYmVjb21lcyB1bmF2YWlsYWJsZSAoaWRlbnRpdHkgbG9ja2VkKSwgZHJvcCBhbnkgZGVjcnlwdGVkXG4gIC8vIGNvbnRlbnQgaGVsZCBpbiBjb21wb25lbnQgc3RhdGUgc28gdGhlIFVJIHJlZmxlY3RzIHRoZSBsb2NrZWQgc3RhdHVzLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcHJvcHMuaGFzRG9jdW1lbnRLZXkpIHtcbiAgICAgIHNldERlY3J5cHRlZENvbnRlbnQobnVsbCk7XG4gICAgICBzZXRBdXRvVHJpZWREZWNyeXB0KGZhbHNlKTtcbiAgICB9XG4gIH0sIFtwcm9wcy5oYXNEb2N1bWVudEtleV0pO1xuXG4gIC8vIFN0b3JhZ2UgY29udHJhY3QgTDEgcGF5bWVudDogbG9hZCBjb250cmFjdCB0eGlkIGFuZCBtZW1wb29sIC8gY29uZmlybWF0aW9uIGRlcHRoXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY2lkID0gZG9jICYmIGRvYy5zdG9yYWdlQ29udHJhY3RJZCA/IFN0cmluZyhkb2Muc3RvcmFnZUNvbnRyYWN0SWQpLnRyaW0oKSA6ICcnO1xuICAgIGlmICghY2lkKSB7XG4gICAgICBzZXRDb250cmFjdFBheVR4KG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgc2V0Q29udHJhY3RQYXlUeCh7IGxvYWRpbmc6IHRydWUgfSk7XG4gICAgKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAvY29udHJhY3RzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGNpZCl9YCwgeyBtZXRob2Q6ICdHRVQnIH0pO1xuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICBpZiAoIXJlcy5vayB8fCAhYm9keSB8fCBib2R5LnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIHNldENvbnRyYWN0UGF5VHgoe1xuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogKGJvZHkgJiYgYm9keS5tZXNzYWdlKSB8fCAnQ291bGQgbm90IGxvYWQgY29udHJhY3QuJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjID0gYm9keS5jb250cmFjdCB8fCBib2R5LnJlc3VsdCB8fCBib2R5O1xuICAgICAgICBjb25zdCB0eGlkID0gYyAmJiBjLnR4aWQgPyBTdHJpbmcoYy50eGlkKS50cmltKCkgOiAnJztcbiAgICAgICAgaWYgKCF0eGlkKSB7XG4gICAgICAgICAgc2V0Q29udHJhY3RQYXlUeCh7IGxvYWRpbmc6IGZhbHNlLCB0eGlkOiBudWxsIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hUcmFuc2FjdGlvbkJ5SGFzaCh1cHN0cmVhbVNldHRpbmdzLCB0eGlkKTtcbiAgICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIHNldENvbnRyYWN0UGF5VHgoe1xuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICB0eGlkLFxuICAgICAgICAgICAgZXJyb3I6IGRhdGEubWVzc2FnZSB8fCAnQ291bGQgbm90IGxvYWQgdHJhbnNhY3Rpb24uJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgc2V0Q29udHJhY3RQYXlUeCh7XG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHR4aWQsXG4gICAgICAgICAgICBlcnJvcjogJ1RyYW5zYWN0aW9uIG5vdCBmb3VuZCBvbiB0aGlzIGh1YiAob3Igbm90IGluZGV4ZWQgeWV0KS4nXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldENvbnRyYWN0UGF5VHgoeyBsb2FkaW5nOiBmYWxzZSwgdHhpZCwgdHg6IGRhdGEgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgc2V0Q29udHJhY3RQYXlUeCh7XG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICByZXR1cm4gKCkgPT4geyBjYW5jZWxsZWQgPSB0cnVlOyB9O1xuICB9LCBbZG9jICYmIGRvYy5zdG9yYWdlQ29udHJhY3RJZCwgdXBzdHJlYW1TZXR0aW5nc10pO1xuXG4gIC8vIERpc3RyaWJ1dGUgbW9kYWw6IHBvbGwgZnVuZGluZyB0eCBkZXB0aCB3aGlsZSBpbnZvaWNlIHN0ZXAgaXMgb3BlblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZGlzdHJpYnV0ZU9wZW4gfHwgZGlzdHJpYnV0ZVN1Y2Nlc3NDb250cmFjdElkKSB7XG4gICAgICBzZXREaXN0cmlidXRlVHhDaGFpbihudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdHggPSBTdHJpbmcoZGlzdHJpYnV0ZVR4aWQgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIVRYSURfSEVYXzY0LnRlc3QodHgpKSB7XG4gICAgICBzZXREaXN0cmlidXRlVHhDaGFpbihudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFkaXN0cmlidXRlSW52b2ljZSkge1xuICAgICAgc2V0RGlzdHJpYnV0ZVR4Q2hhaW4obnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgICBjb25zdCB0aWNrID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZldGNoVHJhbnNhY3Rpb25CeUhhc2godXBzdHJlYW1TZXR0aW5ncywgdHgpO1xuICAgICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgc2V0RGlzdHJpYnV0ZVR4Q2hhaW4oeyBsb2FkaW5nOiBmYWxzZSwgZXJyb3I6IGRhdGEubWVzc2FnZSB8fCAnVHggbm90IGZvdW5kJyB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2V0RGlzdHJpYnV0ZVR4Q2hhaW4oeyBsb2FkaW5nOiBmYWxzZSwgdHg6IGRhdGEgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgc2V0RGlzdHJpYnV0ZVR4Q2hhaW4oeyBsb2FkaW5nOiBmYWxzZSwgZXJyb3I6IGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBzZXREaXN0cmlidXRlVHhDaGFpbih7IGxvYWRpbmc6IHRydWUgfSk7XG4gICAgdGljaygpO1xuICAgIGNvbnN0IGl2ID0gc2V0SW50ZXJ2YWwodGljaywgMTIwMDApO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgY2xlYXJJbnRlcnZhbChpdik7XG4gICAgfTtcbiAgfSwgW2Rpc3RyaWJ1dGVPcGVuLCBkaXN0cmlidXRlSW52b2ljZSwgZGlzdHJpYnV0ZVR4aWQsIGRpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZCwgdXBzdHJlYW1TZXR0aW5nc10pO1xuXG4gIC8vIFVSTHMgZm9yIHNoYXJpbmc6IGNhbm9uaWNhbCAocGF0aCBwYXJhbSkgYW5kIGhhc2gtb25seSAoa2VlcHMgaWQgY2xpZW50LXNpZGUpLlxuICBsZXQgc2hhcmVVcmxIYXNoID0gJyc7XG4gIGxldCBzaGFyZVVybENhbm9uaWNhbCA9ICcnO1xuICBpZiAoaWQgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uKSB7XG4gICAgY29uc3QgeyBvcmlnaW4gfSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICBzaGFyZVVybEhhc2ggPSBgJHtvcmlnaW59L2RvY3VtZW50cyMke2VuY29kZVVSSUNvbXBvbmVudChpZCl9YDtcbiAgICBzaGFyZVVybENhbm9uaWNhbCA9IGAke29yaWdpbn0vZG9jdW1lbnRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGlkKX1gO1xuICB9XG5cbiAgY29uc3QgY2FkZW5jZU9wdGlvbnMgPSBbXG4gICAgeyBrZXk6ICdob3VybHknLCB2YWx1ZTogJ2hvdXJseScsIHRleHQ6ICdIb3VybHknIH0sXG4gICAgeyBrZXk6ICdkYWlseScsIHZhbHVlOiAnZGFpbHknLCB0ZXh0OiAnRGFpbHknIH0sXG4gICAgeyBrZXk6ICd3ZWVrbHknLCB2YWx1ZTogJ3dlZWtseScsIHRleHQ6ICdXZWVrbHknIH0sXG4gICAgeyBrZXk6ICdtb250aGx5JywgdmFsdWU6ICdtb250aGx5JywgdGV4dDogJ01vbnRobHknIH1cbiAgXTtcblxuICBjb25zdCBkZWFkbGluZU9wdGlvbnMgPSBbXG4gICAgeyBrZXk6ICcxcycsIHZhbHVlOiAnMXMnLCB0ZXh0OiAnMSBzZWNvbmQnIH0sXG4gICAgeyBrZXk6ICc1cycsIHZhbHVlOiAnNXMnLCB0ZXh0OiAnNSBzZWNvbmRzJyB9LFxuICAgIHsga2V5OiAnMTBzJywgdmFsdWU6ICcxMHMnLCB0ZXh0OiAnMTAgc2Vjb25kcycgfSxcbiAgICB7IGtleTogJzMwcycsIHZhbHVlOiAnMzBzJywgdGV4dDogJzMwIHNlY29uZHMnIH0sXG4gICAgeyBrZXk6ICc2MHMnLCB2YWx1ZTogJzYwcycsIHRleHQ6ICc2MCBzZWNvbmRzJyB9LFxuICAgIHsga2V5OiAnMTBtJywgdmFsdWU6ICcxMG0nLCB0ZXh0OiAnMTAgbWludXRlcycgfSxcbiAgICB7IGtleTogJzYwbScsIHZhbHVlOiAnNjBtJywgdGV4dDogJzYwIG1pbnV0ZXMnIH1cbiAgXTtcblxuICBjb25zdCBodWJBZG1pblRva2VuUHJlc2VudCA9ICEhZ2V0QWRtaW5Ub2tlbkZyb21Qcm9wcyhwcm9wcyk7XG5cbiAgY29uc3QgaGFuZGxlUGF5RGlzdHJpYnV0ZUZyb21CcmlkZ2UgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFkaXN0cmlidXRlSW52b2ljZSB8fCAhaWQpIHJldHVybjtcbiAgICBpZiAoIXByb3BzLmhhc0RvY3VtZW50S2V5KSB7XG4gICAgICBzZXREaXN0cmlidXRlRXJyb3IoXG4gICAgICAgIGAke2ZhYnJpY0lkZW50aXR5TmVlZEZ1bGxLZXlQbGFpbihwcm9wcy5pZGVudGl0eSB8fCB7fSl9IERpc3RyaWJ1dGUgYm9uZGluZyBmcm9tIHRoaXMgYnJvd3NlciBuZWVkcyBhbiB1bmxvY2tlZCBzaWduaW5nIHNlc3Npb24uYFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdG9rZW4gPSBnZXRBZG1pblRva2VuRnJvbVByb3BzKHByb3BzKTtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICBzZXREaXN0cmlidXRlRXJyb3IoJ0FkbWluIHRva2VuIHJlcXVpcmVkIHRvIHBheSBmcm9tIHRoZSBodWIgd2FsbGV0LicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0byA9IFN0cmluZyhkaXN0cmlidXRlSW52b2ljZS5hZGRyZXNzIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgYW1vdW50U2F0cyA9IE1hdGgucm91bmQoTnVtYmVyKGRpc3RyaWJ1dGVJbnZvaWNlLmFtb3VudFNhdHMpKTtcbiAgICBpZiAoIXRvIHx8ICFOdW1iZXIuaXNGaW5pdGUoYW1vdW50U2F0cykgfHwgYW1vdW50U2F0cyA8PSAwKSB7XG4gICAgICBzZXREaXN0cmlidXRlRXJyb3IoJ0ludmFsaWQgZGlzdHJpYnV0ZSBpbnZvaWNlIChhZGRyZXNzIG9yIGFtb3VudCkuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldERpc3RyaWJ1dGVCcmlkZ2VCdXN5KHRydWUpO1xuICAgIHNldERpc3RyaWJ1dGVFcnJvcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VuZEJyaWRnZVBheW1lbnQodXBzdHJlYW1TZXR0aW5ncywge1xuICAgICAgICB0byxcbiAgICAgICAgYW1vdW50U2F0cyxcbiAgICAgICAgbWVtbzogYERpc3RyaWJ1dGUgJHtTdHJpbmcoaWQpLnNsaWNlKDAsIDE2KX1gXG4gICAgICB9LCB0b2tlbik7XG4gICAgICBjb25zdCB0eGlkID0gcmVzICYmIHJlcy5wYXltZW50ICYmIHJlcy5wYXltZW50LnR4aWQgPyBTdHJpbmcocmVzLnBheW1lbnQudHhpZCkudHJpbSgpIDogJyc7XG4gICAgICBpZiAoIXR4aWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKChyZXMgJiYgcmVzLm1lc3NhZ2UpIHx8ICdIdWIgd2FsbGV0IGRpZCBub3QgcmV0dXJuIGEgdHhpZC4nKTtcbiAgICAgIH1cbiAgICAgIHNldERpc3RyaWJ1dGVUeGlkKHR4aWQpO1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vbkRpc3RyaWJ1dGVEb2N1bWVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc3RyaWJ1dGUgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGh1Yi4nKTtcbiAgICAgIH1cbiAgICAgIHNldERpc3RyaWJ1dGVCdXN5KHRydWUpO1xuICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICBhbW91bnRTYXRzOiBkaXN0cmlidXRlSW52b2ljZS5hbW91bnRTYXRzLFxuICAgICAgICBkdXJhdGlvblllYXJzOiBkaXN0cmlidXRlSW52b2ljZS5jb25maWc/LmR1cmF0aW9uWWVhcnMgfHwgZGlzdHJpYnV0ZUR1cmF0aW9uWWVhcnMsXG4gICAgICAgIGNoYWxsZW5nZUNhZGVuY2U6IGRpc3RyaWJ1dGVJbnZvaWNlLmNvbmZpZz8uY2hhbGxlbmdlQ2FkZW5jZSB8fCBkaXN0cmlidXRlQ2FkZW5jZSxcbiAgICAgICAgcmVzcG9uc2VEZWFkbGluZTogZGlzdHJpYnV0ZUludm9pY2UuY29uZmlnPy5yZXNwb25zZURlYWRsaW5lIHx8IGRpc3RyaWJ1dGVEZWFkbGluZSxcbiAgICAgICAgdHhpZFxuICAgICAgfTtcbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShwcm9wcy5vbkRpc3RyaWJ1dGVEb2N1bWVudChpZCwgY29uZmlnKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzZXREaXN0cmlidXRlQnVzeShmYWxzZSk7XG4gICAgICBzZXREaXN0cmlidXRlRXJyb3IoKGVyciAmJiBlcnIubWVzc2FnZSkgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0RGlzdHJpYnV0ZUJyaWRnZUJ1c3koZmFsc2UpO1xuICAgIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAtLSBvbkRpc3RyaWJ1dGVEb2N1bWVudCBpZGVudGl0eSBpcyBzdGFibGUgZW5vdWdoIGZvciBodWIgc2hlbGxcbiAgfSwgW1xuICAgIGRpc3RyaWJ1dGVJbnZvaWNlLFxuICAgIGlkLFxuICAgIGRpc3RyaWJ1dGVEdXJhdGlvblllYXJzLFxuICAgIGRpc3RyaWJ1dGVDYWRlbmNlLFxuICAgIGRpc3RyaWJ1dGVEZWFkbGluZSxcbiAgICBwcm9wcy5vbkRpc3RyaWJ1dGVEb2N1bWVudCxcbiAgICBwcm9wcy5hZG1pblRva2VuLFxuICAgIHByb3BzLmhhc0RvY3VtZW50S2V5LFxuICAgIHVwc3RyZWFtU2V0dGluZ3NcbiAgXSk7XG5cbiAgY29uc3QgaGFuZGxlUGF5UHVyY2hhc2VGcm9tQnJpZGdlID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghcHVyY2hhc2VJbnZvaWNlIHx8ICFpZCkgcmV0dXJuO1xuICAgIGlmICghcHJvcHMuaGFzRG9jdW1lbnRLZXkpIHtcbiAgICAgIHNldFB1cmNoYXNlRXJyb3IoXG4gICAgICAgIGAke2ZhYnJpY0lkZW50aXR5TmVlZEZ1bGxLZXlQbGFpbihwcm9wcy5pZGVudGl0eSB8fCB7fSl9IFB1cmNoYXNlIGJvbmRpbmcgZnJvbSB0aGlzIGJyb3dzZXIgbmVlZHMgYW4gdW5sb2NrZWQgc2lnbmluZyBzZXNzaW9uLmBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gZ2V0QWRtaW5Ub2tlbkZyb21Qcm9wcyhwcm9wcyk7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgc2V0UHVyY2hhc2VFcnJvcignQWRtaW4gdG9rZW4gcmVxdWlyZWQgdG8gcGF5IGZyb20gdGhlIGh1YiB3YWxsZXQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRvID0gU3RyaW5nKHB1cmNoYXNlSW52b2ljZS5hZGRyZXNzIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgYW1vdW50U2F0cyA9IE1hdGgucm91bmQoTnVtYmVyKHB1cmNoYXNlSW52b2ljZS5hbW91bnRTYXRzKSk7XG4gICAgaWYgKCF0byB8fCAhTnVtYmVyLmlzRmluaXRlKGFtb3VudFNhdHMpIHx8IGFtb3VudFNhdHMgPD0gMCkge1xuICAgICAgc2V0UHVyY2hhc2VFcnJvcignSW52YWxpZCBwdXJjaGFzZSBpbnZvaWNlIChhZGRyZXNzIG9yIGFtb3VudCkuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcHJvcHMub25DbGFpbVB1cmNoYXNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzZXRQdXJjaGFzZUVycm9yKCdDbGFpbSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgaHViLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRQdXJjaGFzZUJyaWRnZUJ1c3kodHJ1ZSk7XG4gICAgc2V0UHVyY2hhc2VFcnJvcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VuZEJyaWRnZVBheW1lbnQodXBzdHJlYW1TZXR0aW5ncywge1xuICAgICAgICB0byxcbiAgICAgICAgYW1vdW50U2F0cyxcbiAgICAgICAgbWVtbzogYFB1cmNoYXNlICR7U3RyaW5nKGlkKS5zbGljZSgwLCAxNil9YFxuICAgICAgfSwgdG9rZW4pO1xuICAgICAgY29uc3QgdHhpZCA9IHJlcyAmJiByZXMucGF5bWVudCAmJiByZXMucGF5bWVudC50eGlkID8gU3RyaW5nKHJlcy5wYXltZW50LnR4aWQpLnRyaW0oKSA6ICcnO1xuICAgICAgaWYgKCF0eGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigocmVzICYmIHJlcy5tZXNzYWdlKSB8fCAnSHViIHdhbGxldCBkaWQgbm90IHJldHVybiBhIHR4aWQuJyk7XG4gICAgICB9XG4gICAgICBzZXRQdXJjaGFzZVR4aWQodHhpZCk7XG4gICAgICBzZXRQdXJjaGFzZUJ1c3kodHJ1ZSk7XG4gICAgICBjb25zdCBvdXQgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUocHJvcHMub25DbGFpbVB1cmNoYXNlKGlkLCB0eGlkKSk7XG4gICAgICBpZiAob3V0ICYmIG91dC5kb2N1bWVudCkge1xuICAgICAgICBzZXRQdXJjaGFzZWRDb250ZW50KG91dC5kb2N1bWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRQdXJjaGFzZUVycm9yKChvdXQgJiYgb3V0LmVycm9yKSB8fCAnQ2xhaW0gZmFpbGVkIGFmdGVyIGh1YiB3YWxsZXQgcGF5bWVudC4nKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNldFB1cmNoYXNlRXJyb3IoKGVyciAmJiBlcnIubWVzc2FnZSkgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0UHVyY2hhc2VCdXN5KGZhbHNlKTtcbiAgICAgIHNldFB1cmNoYXNlQnJpZGdlQnVzeShmYWxzZSk7XG4gICAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtwdXJjaGFzZUludm9pY2UsIGlkLCBwcm9wcy5vbkNsYWltUHVyY2hhc2UsIHByb3BzLmFkbWluVG9rZW4sIHByb3BzLmhhc0RvY3VtZW50S2V5LCB1cHN0cmVhbVNldHRpbmdzXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZmFicmljLWRvY3VtZW50LWRldGFpbCBjbGFzcz0nZmFkZS1pbic+XG4gICAgICA8U2VnbWVudD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnLCBnYXA6ICcwLjc1ZW0nLCBmbGV4V3JhcDogJ3dyYXAnLCBtYXJnaW5Cb3R0b206ICcwLjI1ZW0nIH19XG4gICAgICAgICAgcm9sZT1cImJhbm5lclwiXG4gICAgICAgID5cbiAgICAgICAgICA8QnV0dG9uIGJhc2ljIHNpemU9XCJzbWFsbFwiIGFzPXtMaW5rfSB0bz1cIi9kb2N1bWVudHNcIiBhcmlhLWxhYmVsPVwiQmFjayB0byBkb2N1bWVudHMgbGlzdFwiPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgRG9jdW1lbnRzXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEhlYWRlclxuICAgICAgICAgICAgYXM9XCJoMlwiXG4gICAgICAgICAgICBzdHlsZT17eyBtYXJnaW46IDAsIGZsZXg6ICcxIDEgMTByZW0nLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICcwLjVlbScsIGZsZXhXcmFwOiAnd3JhcCcgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstd29yZCcgfX0+e25hbWV9PC9IZWFkZXIuQ29udGVudD5cbiAgICAgICAgICAgIHtpc0VuY3J5cHRlZCAmJiAoXG4gICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwic21hbGxcIiBjb2xvcj1cImdyZWVuXCIgdGl0bGU9XCJFbmNyeXB0ZWQgd2l0aCB5b3VyIGtleVwiPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJsb2NrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICBFbmNyeXB0ZWRcbiAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZG9jICYmIGlzUHVibGlzaGVkSW5TdG9yZSAmJiAoXG4gICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwic21hbGxcIiBjb2xvcj1cImJsdWVcIiB0aXRsZT17cHVibGlzaGVkQXQgPyBgUHVibGlzaGVkOiAke3B1Ymxpc2hlZEF0fWAgOiAnUHVibGlzaGVkJ30+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJ1bGxob3JuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICBQdWJsaXNoZWRcbiAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZG9jICYmIGRvYy5zb3VyY2UgPT09ICdwZWVyJyAmJiAhaXNQdWJsaXNoZWRJblN0b3JlICYmIChcbiAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwidGVhbFwiIHRpdGxlPVwiUmVtb3RlIGludmVudG9yeSBsaXN0aW5nOyB0aGlzIGh1YiBkb2VzIG5vdCBob2xkIHRoZSBmaWxlXCI+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNoYXJlIGFsdGVybmF0ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgUGVlciBvZmZlclxuICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtzdG9yYWdlQ29udHJhY3RJZCAmJiAoXG4gICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwdXJwbGVcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVGhpcyBkb2N1bWVudCBoYXMgYW4gYWN0aXZlIHN0b3JhZ2UgY29udHJhY3RcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0b3JhZ2VDb250cmFjdElkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRlKGAvY29udHJhY3RzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHN0b3JhZ2VDb250cmFjdElkKX1gKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNsb3VkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICBEaXN0cmlidXRlZFxuICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpdmlkZXIgLz5cblxuICAgICAgICB7ZG9jICYmIChcbiAgICAgICAgICA8TWVzc2FnZSBpbmZvIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzEuMjVlbScgfX0+XG4gICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+U3RvcmFnZSAmYW1wOyBhdmFpbGFiaWxpdHk8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC43NWVtJywgY29sb3I6ICdyZ2JhKDAsMCwwLDAuNyknIH19PlxuICAgICAgICAgICAgICBIb3cgdGhpcyBkb2N1bWVudCBleGlzdHMgb24geW91ciBub2RlIGFuZCBvbiB0aGUgaHViLiA8c3Ryb25nPkF1dGhvcjwvc3Ryb25nPiBpcyB0aGUgY3JlYXRvcuKAmXMgZG9jdW1lbnQgaWQgKGxpbmVhZ2UpO1xuICAgICAgICAgICAgICA8c3Ryb25nPiBwdWJsaXNoZXI8L3N0cm9uZz4gaXMgdGhlIEZhYnJpYyBwZWVyIGlkIG9mIHRoZSBodWIgdGhhdCBob3N0cyB0aGUgcHVibGlzaGVkIGxpc3RpbmcuXG4gICAgICAgICAgICAgIDxzdHJvbmc+IFB1Ymxpc2g8L3N0cm9uZz4gd2l0aCBhIHByaWNlIHNlYWxzIGNvbnRlbnQgKGNpcGhlcnRleHQtYXQtcmVzdCk7IGJ1eWVycyBwYXkgYW4gTDEgSFRMQyB0aGF0IHJldmVhbHMgdGhlIGRlY3J5cHRpb24ga2V5LlxuICAgICAgICAgICAgICB7ZGlzdHJpYnV0ZUVuYWJsZWQgPyA8PiA8c3Ryb25nPiBEaXN0cmlidXRlPC9zdHJvbmc+IChvcHRpb25hbCkgYm9uZHMgbXVsdGktbm9kZSBzdG9yYWdlIGNvbnRyYWN0cy48Lz4gOiBudWxsfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPExpc3QgcmVsYXhlZD5cbiAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICA8TGlzdC5JY29uIG5hbWU9XCJoZGRcIiBjb2xvcj1cImdyZXlcIiB2ZXJ0aWNhbEFsaWduPVwibWlkZGxlXCIgLz5cbiAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPExpc3QuSGVhZGVyPkxvY2FsIGNvcHk8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPExpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIFRoaXMgYnJvd3NlciBob2xkcyBtZXRhZGF0YXtkb2Muc2hhMjU2ID8gYCAoY29udGVudCBoYXNoICR7U3RyaW5nKGRvYy5zaGEyNTYpLnNsaWNlKDAsIDE2KX3igKYpYCA6ICcnfS5cbiAgICAgICAgICAgICAgICAgIDwvTGlzdC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICA8L0xpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgPExpc3QuSWNvbiBuYW1lPVwiYnVsbGhvcm5cIiBjb2xvcj17aXNQdWJsaXNoZWRJblN0b3JlID8gJ2JsdWUnIDogJ2dyZXknfSB2ZXJ0aWNhbEFsaWduPVwibWlkZGxlXCIgLz5cbiAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPExpc3QuSGVhZGVyPlB1Ymxpc2hlZCB0byBodWIgaW5kZXg8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPExpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIHtpc1B1Ymxpc2hlZEluU3RvcmVcbiAgICAgICAgICAgICAgICAgICAgICA/IChwdWJsaXNoZWRBdFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgVmlzaWJsZSBpbiB0aGUgbmV0d29yayBzdG9yZSBzaW5jZSAke3B1Ymxpc2hlZEF0fS4ke2ZhYnJpY1BlZXJJZCA/IGAgUHVibGlzaGVyIChGYWJyaWMgcGVlcik6ICR7c2hvcnRIZXhJZChmYWJyaWNQZWVySWQpfS5gIDogJyd9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgTGlzdGVkIGluIHRoZSBodWIgcHVibGlzaGVkIGluZGV4LiR7ZmFicmljUGVlcklkID8gYCBQdWJsaXNoZXI6ICR7c2hvcnRIZXhJZChmYWJyaWNQZWVySWQpfS5gIDogJyd9YClcbiAgICAgICAgICAgICAgICAgICAgICA6ICdOb3QgcHVibGlzaGVkIOKAlCBvbmx5IHlvdSBzZWUgaXQgdW50aWwgeW91IHB1Ymxpc2guJ31cbiAgICAgICAgICAgICAgICAgIDwvTGlzdC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICA8L0xpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgPExpc3QuSWNvbiBuYW1lPVwiY2xvdWRcIiBjb2xvcj17c3RvcmFnZUNvbnRyYWN0SWQgPyAncHVycGxlJyA6ICdncmV5J30gdmVydGljYWxBbGlnbj1cIm1pZGRsZVwiIC8+XG4gICAgICAgICAgICAgICAgPExpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxMaXN0LkhlYWRlcj5OZXR3b3JrIHN0b3JhZ2UgY29udHJhY3Q8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPExpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIHtzdG9yYWdlQ29udHJhY3RJZCA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2ZSBjb250cmFjdHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJywgdGV4dERlY29yYXRpb246ICd1bmRlcmxpbmUnIH19IHJvbGU9XCJidXR0b25cIiB0YWJJbmRleD17MH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGUoYC9jb250cmFjdHMvJHtlbmNvZGVVUklDb21wb25lbnQoc3RvcmFnZUNvbnRyYWN0SWQpfWApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7IGlmIChlLmtleSA9PT0gJ0VudGVyJykgbmF2aWdhdGUoYC9jb250cmFjdHMvJHtlbmNvZGVVUklDb21wb25lbnQoc3RvcmFnZUNvbnRyYWN0SWQpfWApOyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nKHN0b3JhZ2VDb250cmFjdElkKS5zbGljZSgwLCAxMil94oCmXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7JyAnfShwYXktdG8tZGlzdHJpYnV0ZSBib25kZWQgc3RvcmFnZSkuXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29udHJhY3RQYXlUeCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb250cmFjdFBheVR4LmxvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjkyZW0nIH19PkNoZWNraW5nIEwxIHBheW1lbnQgdHJhbnNhY3Rpb27igKY8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IWNvbnRyYWN0UGF5VHgubG9hZGluZyAmJiBjb250cmFjdFBheVR4LnR4aWQgJiYgY29udHJhY3RQYXlUeC50eFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNvbnRyYWN0UGF5VHgudHguYmxvY2toYXNoID09IG51bGwgfHwgY29udHJhY3RQYXlUeC50eC5ibG9ja2hhc2ggPT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTnVtYmVyKGNvbnRyYWN0UGF5VHgudHguY29uZmlybWF0aW9ucyB8fCAwKSA9PT0gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMC45MmVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwib3JhbmdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNsb2NrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW1wb29sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1Zi5iaXRjb2luRXhwbG9yZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89e2Avc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoY29udHJhY3RQYXlUeC50eGlkKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBheW1lbnQgdHJhbnNhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19IHRpdGxlPVwiRW5hYmxlIEJpdGNvaW4g4oCUIEJsb2NrICYgdHJhbnNhY3Rpb24gZGV0YWlsIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IGZvciB0aGUgdHggdmlld2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29udHJhY3RQYXlUeC50eGlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT4g4oCUIGF3YWl0aW5nIGNvbmZpcm1hdGlvbjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFjb250cmFjdFBheVR4LmxvYWRpbmcgJiYgY29udHJhY3RQYXlUeC50eGlkICYmIGNvbnRyYWN0UGF5VHgudHhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvbnRyYWN0UGF5VHgudHguY29uZmlybWF0aW9ucyAhPSBudWxsICYmIE51bWJlcihjb250cmFjdFBheVR4LnR4LmNvbmZpcm1hdGlvbnMpID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMC45MmVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwiZ3JlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY2hlY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb250cmFjdFBheVR4LnR4LmNvbmZpcm1hdGlvbnN9IGNvbmZpcm1hdGlvbntOdW1iZXIoY29udHJhY3RQYXlUeC50eC5jb25maXJtYXRpb25zKSA9PT0gMSA/ICcnIDogJ3MnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dWYuYml0Y29pbkV4cGxvcmVyID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRyYWN0UGF5VHgudHhpZCl9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IHBheW1lbnQgdHJhbnNhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19IHRpdGxlPVwiRW5hYmxlIEJpdGNvaW4g4oCUIEJsb2NrICYgdHJhbnNhY3Rpb24gZGV0YWlsIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IGZvciB0aGUgdHggdmlld2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29udHJhY3RQYXlUeC50eGlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFjb250cmFjdFBheVR4LmxvYWRpbmcgJiYgY29udHJhY3RQYXlUeC5lcnJvciAmJiBjb250cmFjdFBheVR4LnR4aWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzAuOTJlbScsIGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1Zi5iaXRjb2luRXhwbG9yZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89e2Avc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoY29udHJhY3RQYXlUeC50eGlkKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBheW1lbnQgdHJhbnNhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19IHRpdGxlPVwiRW5hYmxlIEJpdGNvaW4g4oCUIEJsb2NrICYgdHJhbnNhY3Rpb24gZGV0YWlsIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IGZvciB0aGUgdHggdmlld2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29udHJhY3RQYXlUeC50eGlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IOKAlCB7Y29udHJhY3RQYXlUeC5lcnJvcn08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHshY29udHJhY3RQYXlUeC5sb2FkaW5nICYmIGNvbnRyYWN0UGF5VHguZXJyb3IgJiYgIWNvbnRyYWN0UGF5VHgudHhpZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogJzAuOTJlbScsIGNvbG9yOiAnIzg4OCcgfX0+e2NvbnRyYWN0UGF5VHguZXJyb3J9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFjb250cmFjdFBheVR4LmxvYWRpbmcgJiYgY29udHJhY3RQYXlUeC50eGlkID09PSBudWxsICYmICFjb250cmFjdFBheVR4LmVycm9yICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAnMC45MmVtJywgY29sb3I6ICcjODg4JyB9fT5ObyBwYXltZW50IHR4IGlkIG9uIGNvbnRyYWN0IHlldC48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAnTm8gc3RvcmFnZSBjb250cmFjdCDigJQgdXNlIERpc3RyaWJ1dGUgdG8gYm9uZCBMMSBwYXltZW50IGZvciByZXBsaWNhdGVkIHN0b3JhZ2UuJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9MaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICA8TGlzdC5JY29uIG5hbWU9XCJiaXRjb2luXCIgY29sb3I9e2RvY1B1cmNoYXNlUHJpY2VTYXRzID4gMCA/ICdvcmFuZ2UnIDogJ2dyZXknfSB2ZXJ0aWNhbEFsaWduPVwibWlkZGxlXCIgLz5cbiAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPExpc3QuSGVhZGVyPlBhaWQgYWNjZXNzIChpbnZlbnRvcnkgSFRMQyk8L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPExpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIHtkb2NQdXJjaGFzZVByaWNlU2F0cyA+IDBcbiAgICAgICAgICAgICAgICAgICAgICA/IGBCdXllcnMgcGF5ICR7Zm9ybWF0U2F0c0Rpc3BsYXkoZG9jUHVyY2hhc2VQcmljZVNhdHMpfSBzYXRzIHZpYSBQMlRSIEhUTEMgdG8gdW5sb2NrIGNvbnRlbnQgKEZhYnJpYyBwcm90b2NvbDsgbm90IGEgTGlnaHRuaW5nIGludm9pY2UpLmBcbiAgICAgICAgICAgICAgICAgICAgICA6ICdObyBsaXN0IHByaWNlIOKAlCBkb2N1bWVudCBpcyBmcmVlIHRvIGZldGNoIG9uY2UgcHVibGlzaGVkLid9XG4gICAgICAgICAgICAgICAgICA8L0xpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgPC9MaXN0PlxuICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgKX1cblxuICAgICAgICB7ZG9jICYmIEFycmF5LmlzQXJyYXkoZG9jLm9mZmVycykgJiYgZG9jLm9mZmVycy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZXhjaGFuZ2VcIiAvPlxuICAgICAgICAgICAgICBQZWVyIG9mZmVyc1xuICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Ub3A6IDAgfX0+XG4gICAgICAgICAgICAgIEludmVudG9yeSBsaXN0aW5ncyBmb3IgdGhpcyBjb250ZW50IGlkLiBUaGlzIGh1YiBvbmx5IGZ1bGZpbGxzIHNhbGVzIHdoZW4gaXQgaG9sZHMgdGhlIGZpbGUgbG9jYWxseTtcbiAgICAgICAgICAgICAgcmVtb3RlIHJvd3MgYXJlIGNvc3QgYmFzaXMgZm9yIG9wdGlvbmFsIG1hcmt1cCByZXB1Ymxpc2guXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB7ZG9jLmNvc3RCYXNpc1NhdHMgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAgMCAwLjc1ZW0nIH19PlxuICAgICAgICAgICAgICAgIENvc3QgYmFzaXM6IDxzdHJvbmc+e2Zvcm1hdFNhdHNEaXNwbGF5KGRvYy5jb3N0QmFzaXNTYXRzKX0gc2F0czwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIHtkb2NQdXJjaGFzZVByaWNlU2F0cyA+IDAgPyBgIMK3IGxpc3RlZCBhdCAke2Zvcm1hdFNhdHNEaXNwbGF5KGRvY1B1cmNoYXNlUHJpY2VTYXRzKX0gc2F0c2AgOiAnJ31cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxMaXN0IGRpdmlkZWQgcmVsYXhlZD5cbiAgICAgICAgICAgICAge2RvYy5vZmZlcnMubWFwKChvZmZlciwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gb2ZmZXIuaWQgfHwgYCR7b2ZmZXIucGVlclB1YmtleSB8fCBvZmZlci5wZWVyQWRkcmVzcyB8fCAncGVlcid9LSR7aWR4fWA7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2hvID0gb2ZmZXIubG9jYWxcbiAgICAgICAgICAgICAgICAgID8gKG9mZmVyLnBlZXJBbGlhcyB8fCAndGhpcyBub2RlJylcbiAgICAgICAgICAgICAgICAgIDogKG9mZmVyLnBlZXJBbGlhcyB8fCAob2ZmZXIucGVlclB1YmtleVxuICAgICAgICAgICAgICAgICAgICA/IGAke1N0cmluZyhvZmZlci5wZWVyUHVia2V5KS5zbGljZSgwLCA4KX3igKYke1N0cmluZyhvZmZlci5wZWVyUHVia2V5KS5zbGljZSgtNCl9YFxuICAgICAgICAgICAgICAgICAgICA6IChvZmZlci5wZWVyQWRkcmVzcyB8fCAncGVlcicpKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2F0cyA9IG9mZmVyLnB1cmNoYXNlUHJpY2VTYXRzICE9IG51bGwgPyBOdW1iZXIob2ZmZXIucHVyY2hhc2VQcmljZVNhdHMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPExpc3QuSXRlbSBrZXk9e2tleX0+XG4gICAgICAgICAgICAgICAgICAgIDxMaXN0Lkljb24gbmFtZT17b2ZmZXIubG9jYWwgPyAnaG9tZScgOiAnc2hhcmUgYWx0ZXJuYXRlJ30gY29sb3I9e29mZmVyLmxvY2FsID8gJ2JsdWUnIDogJ3RlYWwnfSAvPlxuICAgICAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgIDxMaXN0LkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt3aG99XG4gICAgICAgICAgICAgICAgICAgICAgICB7aWR4ID09PSAwID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cIm1pbmlcIiBjb2xvcj1cIm9saXZlXCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fT5sb3dlc3Q8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICB7b2ZmZXIubG9jYWwgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwibWluaVwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjM1ZW0nIH19PmxvY2FsPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPExpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB7c2F0cyAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzYXRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IChzYXRzID09PSAwID8gJ2ZyZWUnIDogYCR7Zm9ybWF0U2F0c0Rpc3BsYXkoc2F0cyl9IHNhdHNgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd1bnNldCd9XG4gICAgICAgICAgICAgICAgICAgICAgICB7b2ZmZXIucGVlckFkZHJlc3MgPyBgIMK3ICR7b2ZmZXIucGVlckFkZHJlc3N9YCA6ICcnfVxuICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvTGlzdD5cbiAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICl9XG5cbiAgICAgICAge2RvYyAmJiAoXG4gICAgICAgIDxDYXJkIGZsdWlkPlxuICAgICAgICAgIDxDYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICA8Q2FyZC5IZWFkZXI+RG9jdW1lbnQ8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgIDxDYXJkLk1ldGE+e2NyZWF0ZWR9PC9DYXJkLk1ldGE+XG4gICAgICAgICAgICA8Q2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgPGRpdj48c3Ryb25nPklEOjwvc3Ryb25nPiA8Y29kZT57aWR9PC9jb2RlPjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHRpdGxlPVwiRmFicmljIGRvY3VtZW50IGlkIGZvciB0aGUgY29udGVudCBjcmVhdG9yIChvcmlnaW5hbCBsaW5lYWdlKVwiPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+QXV0aG9yOjwvc3Ryb25nPiA8Y29kZT57YXV0aG9yRG9jSWQgfHwgJ+KAlCd9PC9jb2RlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiB0aXRsZT1cIkZhYnJpYyBwZWVyIGlkIG9mIHRoZSBodWIgaG9zdGluZyB0aGlzIGRvY3VtZW50IGluIGl0cyBwdWJsaXNoZWQgaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPlB1Ymxpc2hlcjo8L3N0cm9uZz57JyAnfVxuICAgICAgICAgICAgICAgIHtpc1B1Ymxpc2hlZEluU3RvcmUgJiYgZmFicmljUGVlcklkXG4gICAgICAgICAgICAgICAgICA/IDxjb2RlPntmYWJyaWNQZWVySWR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgOiA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM4ODgnIH19PuKAlCAobGlzdGVkIGh1YiBwZWVyIGlkIHdoZW4gcHVibGlzaGVkKTwvc3Bhbj59XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2PjxzdHJvbmc+TUlNRTo8L3N0cm9uZz4ge21pbWV9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+PHN0cm9uZz5TaXplOjwvc3Ryb25nPiB7ZG9jICYmIGRvYy5zaXplICE9IG51bGwgPyBgJHtkb2Muc2l6ZX0gYnl0ZXNgIDogJyd9PC9kaXY+XG4gICAgICAgICAgICAgIHtpc0h0bGNQZW5kaW5nRGVjcnlwdCAmJiAoXG4gICAgICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkhUTEMtZW5jcnlwdGVkIGRlbGl2ZXJ5PC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNWVtIDAgMC43NWVtJywgZm9udFNpemU6ICcwLjk1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgd2FzIHNlbnQgYWZ0ZXIgYW4gaW52ZW50b3J5IEhUTEMgd2FzIGZ1bmRlZC4gRW50ZXIgdGhlIHNhbWVcbiAgICAgICAgICAgICAgICAgICAgMzItYnl0ZSBwcmVpbWFnZSB0aGF0IGFwcGVhcnMgaW4gdGhlIHNlbGxlciZhcG9zO3Mgb24tY2hhaW4gY2xhaW0gd2l0bmVzc1xuICAgICAgICAgICAgICAgICAgICAoVGFwcm9vdCBoYXNobG9jaykuIEJpbmRpbmcgZGVwZW5kcyBvbiBob3cgdGhlIGRvY3VtZW50IHdhcyBsaXN0ZWQ6XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICA8dWwgc3R5bGU9e3sgbWFyZ2luOiAnMCAwIDAuNzVlbSAxLjI1ZW0nLCBwYWRkaW5nOiAwLCBmb250U2l6ZTogJzAuOTVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlByaWNlZCAvIHNlYWxlZDo8L3N0cm9uZz4gcHJlaW1hZ2UgaXMgdGhlIEFFUyBjb250ZW50IGtleXsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGU+SzwvY29kZT47IHBheW1lbnQgaGFzaCBpcyA8Y29kZT5TSEEyNTYoSyk8L2NvZGU+LlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5MZWdhY3kgdW5zZWFsZWQ6PC9zdHJvbmc+IHByZWltYWdlIGlzeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5TSEEyNTY8L2NvZGU+IG9mIHRoZSA8ZW0+dW5zaWduZWQ8L2VtPiBGYWJyaWN7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPkRvY3VtZW50UHVibGlzaDwvY29kZT4gZW52ZWxvcGUgKHNpZ25hdHVyZSBmaWVsZCBhbGwgemVyb3Mg4oCUIG5vdCBhXG4gICAgICAgICAgICAgICAgICAgICAgc2lnbmVkIGdvc3NpcCBmcmFtZSkuIFBheW1lbnQgaGFzaCAvIGludm9pY2V7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPmNvbnRlbnRIYXNoPC9jb2RlPiBpcyA8Y29kZT5TSEEyNTYocHJlaW1hZ2UpPC9jb2RlPi5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwIDAgMC43NWVtJywgZm9udFNpemU6ICcwLjllbScsIGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICAgIENhbm9uaWNhbCBoZWxwZXJzOiA8Y29kZT5AZmFicmljL2NvcmUvZnVuY3Rpb25zL2RvY3VtZW50UGF5bWVudEhhc2g8L2NvZGU+eycgJ31cbiAgICAgICAgICAgICAgICAgICAgKDxjb2RlPnJlc29sdmVEb2N1bWVudENvbnRlbnRIYXNoSGV4PC9jb2RlPikgYW5keycgJ31cbiAgICAgICAgICAgICAgICAgICAgPGNvZGU+cHVibGlzaGVkRG9jdW1lbnRFbnZlbG9wZTwvY29kZT4uXG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICB7ZG9jLmh0bGNQYXltZW50SGFzaEhleCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg4ZW0nLCBtYXJnaW5Cb3R0b206ICcwLjVlbScsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5QYXltZW50IGhhc2ggKHZlcmlmeSBvbi1jaGFpbiAvIGludm9pY2UpOjwvc3Ryb25nPiA8Y29kZT57ZG9jLmh0bGNQYXltZW50SGFzaEhleH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICBmbHVpZFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlByZWltYWdlICg2NCBoZXggY2hhcmFjdGVycylcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17aHRsY1ByZWltYWdlSGV4fVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIGQpID0+IHNldEh0bGNQcmVpbWFnZUhleCgoZCAmJiBkLnZhbHVlKSAhPSBudWxsID8gZC52YWx1ZSA6IGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2h0bGNVbmxvY2tCdXN5fVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IVRYSURfSEVYXzY0LnRlc3QoaHRsY1ByZWltYWdlSGV4LnRyaW0oKSl9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUHJlaW1hZ2UgaXMgMzIgYnl0ZXMgKDY0IGhleCBjaGFyYWN0ZXJzKSwgc2FtZSBsZW5ndGggYXMgYSB0eGlkXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlSHRsY1ByZWltYWdlVW5sb2NrfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwia2V5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgRGVjcnlwdCB3aXRoIHByZWltYWdlXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIHtodGxjVW5sb2NrRXJyb3IgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJywgY29sb3I6ICcjOWYzYTM4JywgZm9udFNpemU6ICcwLjllbScgfX0+e2h0bGNVbmxvY2tFcnJvcn08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7aXNFbmNyeXB0ZWQgJiYgIWNvbnRlbnRCYXNlNjQgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiBvbkNsaWNrPXtoYW5kbGVVbmxvY2t9IHRpdGxlPVwiRGVjcnlwdCBhbmQgc2hvdyBjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJ1bmxvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICBVbmxvY2tcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7bmVlZHNJZGVudGl0eVVubG9jayAmJiAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkTW9kZSA9IGNsYXNzaWZ5SHViQnJvd3NlcklkZW50aXR5KHByb3BzLmlkZW50aXR5IHx8IHt9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSBpZE1vZGUgPT09ICd3YXRjaF9vbmx5J1xuICAgICAgICAgICAgICAgICAgPyAnU2lnbmluZyBrZXkgcmVxdWlyZWQnXG4gICAgICAgICAgICAgICAgICA6IGlkTW9kZSA9PT0gJ3Bhc3N3b3JkX2xvY2tlZCdcbiAgICAgICAgICAgICAgICAgICAgPyAnVW5sb2NrIEZhYnJpYyBpZGVudGl0eSdcbiAgICAgICAgICAgICAgICAgICAgOiAnRmFicmljIGlkZW50aXR5IHJlcXVpcmVkJztcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+e2hlYWRlcn08L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwLjVlbScsIGZvbnRTaXplOiAnMC45NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICB7aWRNb2RlID09PSAnd2F0Y2hfb25seScgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGJyb3dzZXIgb25seSBoYXMgYSA8c3Ryb25nPndhdGNoLW9ubHk8L3N0cm9uZz4gaWRlbnRpdHkgKHB1YmxpYyBrZXkpLiA8c3Ryb25nPlB1Ymxpc2g8L3N0cm9uZz4sIDxzdHJvbmc+UHVyY2hhc2U8L3N0cm9uZz4sIGFuZCA8c3Ryb25nPkRpc3RyaWJ1dGU8L3N0cm9uZz4gbmVlZCBhIGZ1bGwga2V5OiBvcGVuIHRoZSB0b3AtYmFyIGlkZW50aXR5IG1lbnUgb3J7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5nc1wiPlNldHRpbmdzPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7JyDihpIgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5GYWJyaWMgaWRlbnRpdHk8L3N0cm9uZz4gdG8gaW1wb3J0IGEgc2lnbmluZyBrZXkgb3IgdXNlIGRlc2t0b3Agc2lnbmluZy5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiBpZE1vZGUgPT09ICdwYXNzd29yZF9sb2NrZWQnID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSB0b3AtYmFyIDxzdHJvbmc+TG9ja2VkPC9zdHJvbmc+IGNvbnRyb2wgKGVuY3J5cHRpb24gcGFzc3dvcmQpIG9yeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3NcIj5TZXR0aW5nczwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeycg4oaSICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RmFicmljIGlkZW50aXR5PC9zdHJvbmc+LiA8c3Ryb25nPlB1Ymxpc2g8L3N0cm9uZz4sIDxzdHJvbmc+UHVyY2hhc2U8L3N0cm9uZz4gKEhUTEMgaW52b2ljZS9jbGFpbSksIGFuZCA8c3Ryb25nPkRpc3RyaWJ1dGU8L3N0cm9uZz4gb25seSBydW4gd2hpbGUgdW5sb2NrZWQgc28gaHViIHJlcXVlc3RzIGFyZSBTY2hub3JyLXNpZ25lZCBhbmQgZG9jdW1lbnQgYnl0ZXMgYXJlIGF2YWlsYWJsZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGUgb3IgcmVzdG9yZSBhIGtleTogPExpbmsgdG89XCIvc2V0dGluZ3NcIj5TZXR0aW5nczwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeycg4oaSICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RmFicmljIGlkZW50aXR5PC9zdHJvbmc+LCBvciA8c3Ryb25nPkxvZyBpbjwvc3Ryb25nPiBpbiB0aGUgdG9wIGJhci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5QdWJsaXNoPC9zdHJvbmc+LCA8c3Ryb25nPlB1cmNoYXNlPC9zdHJvbmc+LCBhbmQgPHN0cm9uZz5EaXN0cmlidXRlPC9zdHJvbmc+IHJlcXVpcmUgU2Nobm9yciBzaWduaW5nIGZyb20gdGhpcyBicm93c2VyIHdoZW4geW91IHVzZSB0aG9zZSBmbG93cyBoZXJlLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgIFBheS10by1kaXN0cmlidXRlIGFuZCBodWItd2FsbGV0IDxzdHJvbmc+UGF5IE5vdzwvc3Ryb25nPiB1c2UgPHN0cm9uZz5yZWFsIEJpdGNvaW4gdHJhbnNhY3Rpb25zPC9zdHJvbmc+OiA8c3Ryb25nPlBheSBOb3c8L3N0cm9uZz4gYW5kIDxzdHJvbmc+UGF5IGZyb20gaHViIHdhbGxldDwvc3Ryb25nPiBicm9hZGNhc3QgdmlhIHRoaXMgaHViJmFwb3M7cyA8Y29kZT5iaXRjb2luZDwvY29kZT4gKGFkbWluIHRva2VuIHdoZXJlIHJlcXVpcmVkKTsgeW91IGNhbiBhbHNvIHBheSBmcm9tIGFueSBleHRlcm5hbCB3YWxsZXQgYW5kIHBhc3RlIHRoZSB0eGlkLlxuICAgICAgICAgICAgICAgICAgICAgIHtuZWVkc0lkZW50aXR5S2V5Rm9yRW5jcnlwdGVkQm9keSA/ICcgRW5jcnlwdGVkIGRvY3VtZW50cyBhbHNvIG5lZWQgdW5sb2NrIHRvIHByZXZpZXcgb3IgZG93bmxvYWQuJyA6ICcnfXsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3MvYml0Y29pbi13YWxsZXRcIj5CaXRjb2luIHdhbGxldCAmYW1wOyBkZXJpdmF0aW9uPC9MaW5rPiB0aWVzIHRoaXMgaWRlbnRpdHkgdG8gTDEgcmVjZWl2ZS9zZW5kIHBhdGhzLlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIHt0eXBlb2YgcHJvcHMub25SZXF1ZXN0VW5sb2NrID09PSAnZnVuY3Rpb24nICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBwcm9wcy5vblJlcXVlc3RVbmxvY2soKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwia2V5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIE9wZW4gRmFicmljIGlkZW50aXR5XG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgIDwvQ2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICA8L0NhcmQuQ29udGVudD5cbiAgICAgICAgICA8Q2FyZC5Db250ZW50IGV4dHJhPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHR5cGVvZiBwcm9wcy5vbkdldERvY3VtZW50ID09PSAnZnVuY3Rpb24nICYmIHByb3BzLm9uR2V0RG9jdW1lbnQoaWQpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICAgIFJlZnJlc2hcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIGJhc2ljPXshZG9jIHx8ICFpc1B1Ymxpc2hlZEluU3RvcmV9XG4gICAgICAgICAgICAgICAgY29sb3I9e2RvYyAmJiBpc1B1Ymxpc2hlZEluU3RvcmUgPyAnYmx1ZScgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZG9jICYmIGlzUHVibGlzaGVkSW5TdG9yZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgaWYgKCFpZCB8fCB0eXBlb2YgcHJvcHMub25QdWJsaXNoRG9jdW1lbnQgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIHNldFB1Ymxpc2hFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICAgIHNldElzUHVibGlzaGluZyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByaWNlID0gcGFyc2VJbnQocHVibGlzaFByaWNlU2F0cywgMTApO1xuICAgICAgICAgICAgICAgICAgcHJvcHMub25QdWJsaXNoRG9jdW1lbnQoaWQsIHByaWNlID4gMCA/IHsgcHVyY2hhc2VQcmljZVNhdHM6IHByaWNlIH0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFkb2MgfHwgaXNQdWJsaXNoaW5nIHx8ICEhaXNQdWJsaXNoZWRJblN0b3JlIHx8IG5lZWRzSWRlbnRpdHlVbmxvY2t9XG4gICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgbmVlZHNJZGVudGl0eVVubG9ja1xuICAgICAgICAgICAgICAgICAgICA/ICdVbmxvY2sgeW91ciBpZGVudGl0eSB0byBwdWJsaXNoIChzaWduZWQgaHViIHJlcXVlc3QpJ1xuICAgICAgICAgICAgICAgICAgICA6IChkb2MgJiYgaXNQdWJsaXNoZWRJblN0b3JlID8gJ0RvY3VtZW50IGlzIHB1Ymxpc2hlZCcgOiAnUHVibGlzaCB0aGlzIGRvY3VtZW50IElEIHRvIHRoZSBodWIgZ2xvYmFsIHN0b3JlJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICAgICAgbmFtZT17aXNQdWJsaXNoaW5nID8gJ3NwaW5uZXInIDogKGRvYyAmJiBpc1B1Ymxpc2hlZEluU3RvcmUgPyAnY2hlY2snIDogJ2J1bGxob3JuJyl9XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nPXtpc1B1Ymxpc2hpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB7aXNQdWJsaXNoaW5nID8gJ1B1Ymxpc2hpbmfigKYnIDogKGRvYyAmJiBpc1B1Ymxpc2hlZEluU3RvcmUgPyAnUHVibGlzaGVkJyA6ICdQdWJsaXNoJyl9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICB7IWlzUHVibGlzaGVkSW5TdG9yZSAmJiAoXG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQcmljZSAoc2F0cylcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3B1Ymxpc2hQcmljZVNhdHN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFB1Ymxpc2hQcmljZVNhdHMoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IDExMCB9fVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e25lZWRzSWRlbnRpdHlVbmxvY2t9XG4gICAgICAgICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgICAgICAgIG5lZWRzSWRlbnRpdHlVbmxvY2tcbiAgICAgICAgICAgICAgICAgICAgICA/ICdVbmxvY2sgaWRlbnRpdHkgdG8gc2V0IGxpc3QgcHJpY2Ugd2hlbiBwdWJsaXNoaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgIDogYExpc3QgcHJpY2Ugd2hlbiBwdWJsaXNoaW5nIChkZWZhdWx0ICR7REVGQVVMVF9QVUJMSVNIX1BSSUNFX1NBVFN9IHNhdHM7IEhUTEMgcHVyY2hhc2UpYFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtjYW5QdXJjaGFzZSAmJiBkb2N1bWVudFB1cmNoYXNlRW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIGNvbG9yPVwib3JhbmdlXCJcbiAgICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtuZWVkc0lkZW50aXR5VW5sb2NrfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmVlZHNJZGVudGl0eVVubG9jaykgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBzZXRQdXJjaGFzZU9wZW4odHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFB1cmNoYXNlSW52b2ljZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UHVyY2hhc2VUeGlkKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UHVyY2hhc2VFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UHVyY2hhc2VkQ29udGVudChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vblJlcXVlc3RQdXJjaGFzZUludm9pY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vblJlcXVlc3RQdXJjaGFzZUludm9pY2UoaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgICBuZWVkc0lkZW50aXR5VW5sb2NrXG4gICAgICAgICAgICAgICAgICAgICAgPyAnVW5sb2NrIGlkZW50aXR5IHRvIHJlcXVlc3QgYSBwdXJjaGFzZSBpbnZvaWNlIChzaWduZWQgaHViIHJlcXVlc3QpJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJ1B1cmNoYXNlIHRoaXMgZG9jdW1lbnQgKEhUTEM6IHBheSB0byB1bmxvY2sgd2l0aCBzaGEyNTYoc2hhMjU2KGNvbnRlbnQpKSknXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiAvPlxuICAgICAgICAgICAgICAgICAgUHVyY2hhc2UgKHtmb3JtYXRTYXRzRGlzcGxheShkb2NQdXJjaGFzZVByaWNlU2F0cyl9IHNhdHMpXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtkaXN0cmlidXRlRW5hYmxlZCB8fCBzdG9yYWdlQ29udHJhY3RJZCA/IChcbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgYmFzaWM9eyFzdG9yYWdlQ29udHJhY3RJZH1cbiAgICAgICAgICAgICAgICAgIGNvbG9yPXtzdG9yYWdlQ29udHJhY3RJZCA/ICdwdXJwbGUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcmFnZUNvbnRyYWN0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZShgL2NvbnRyYWN0cy8ke2VuY29kZVVSSUNvbXBvbmVudChzdG9yYWdlQ29udHJhY3RJZCl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGlzdHJpYnV0ZUVuYWJsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RGlzdHJpYnV0ZUVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVPcGVuKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFpZCB8fCBuZWVkc0lkZW50aXR5VW5sb2NrIHx8ICghc3RvcmFnZUNvbnRyYWN0SWQgJiYgIWRpc3RyaWJ1dGVFbmFibGVkKX1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgICAgbmVlZHNJZGVudGl0eVVubG9ja1xuICAgICAgICAgICAgICAgICAgICAgID8gJ1VubG9jayB5b3VyIGlkZW50aXR5IHRvIHN0YXJ0IHBheS10by1kaXN0cmlidXRlIChzaWduZWQgcmVxdWVzdHMsIHJlYWwgTDEgYm9uZCknXG4gICAgICAgICAgICAgICAgICAgICAgOiAoc3RvcmFnZUNvbnRyYWN0SWQgPyAnVmlldyBzdG9yYWdlIGNvbnRyYWN0JyA6ICdEaXN0cmlidXRlIHRoaXMgZG9jdW1lbnQgYWNyb3NzIG90aGVyIG5vZGVzJylcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPXtzdG9yYWdlQ29udHJhY3RJZCA/ICdjbG91ZCcgOiAnY2xvdWQgdXBsb2FkJ30gLz5cbiAgICAgICAgICAgICAgICAgIHtzdG9yYWdlQ29udHJhY3RJZCA/ICdEaXN0cmlidXRlZCcgOiAnRGlzdHJpYnV0ZSd9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaWQgJiYgc2V0U2hhcmVPcGVuKHRydWUpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshaWR9XG4gICAgICAgICAgICAgICAgdGl0bGU9XCJTaGFyZSBhIGxpbmsgdG8gdGhpcyBkb2N1bWVudFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2hhcmUgYWx0ZXJuYXRlXCIgLz5cbiAgICAgICAgICAgICAgICBTaGFyZVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAge2NhbkFkbWluVW5wdWJsaXNoICYmIChcbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJyZWRcIlxuICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRzSWRlbnRpdHlVbmxvY2spIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgc2V0VG9tYnN0b25lRXJyb3IobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRvbWJzdG9uZU9wZW4odHJ1ZSk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e25lZWRzSWRlbnRpdHlVbmxvY2t9XG4gICAgICAgICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgICAgICAgIG5lZWRzSWRlbnRpdHlVbmxvY2tcbiAgICAgICAgICAgICAgICAgICAgICA/ICdVbmxvY2sgeW91ciBpZGVudGl0eSBiZWZvcmUgcmVtb3ZpbmcgdGhpcyBkb2N1bWVudCBmcm9tIHRoZSBodWIgY2F0YWxvZydcbiAgICAgICAgICAgICAgICAgICAgICA6ICdSZW1vdmUgdGhpcyBkb2N1bWVudCBmcm9tIHRoZSBodWIgcHVibGlzaGVkIGNhdGFsb2cgKHJlcXVpcmVzIGFkbWluIHRva2VuKSdcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwidHJhc2hcIiAvPlxuICAgICAgICAgICAgICAgICAgVW5wdWJsaXNoXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtkb3dubG9hZEhyZWYgJiYgKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICBhcz1cImFcIlxuICAgICAgICAgICAgICAgICAgaHJlZj17ZG93bmxvYWRIcmVmfVxuICAgICAgICAgICAgICAgICAgZG93bmxvYWQ9e25hbWV9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImRvd25sb2FkXCIgLz5cbiAgICAgICAgICAgICAgICAgIERvd25sb2FkXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtwdWJsaXNoRXJyb3IgPyAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgICAgbmVnYXRpdmVcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX1cbiAgICAgICAgICAgICAgICBvbkRpc21pc3M9eygpID0+IHNldFB1Ymxpc2hFcnJvcihudWxsKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5QdWJsaXNoIGRpZCBub3QgY29tcGxldGU8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBmb250U2l6ZTogJzAuOTVlbScgfX0+e3B1Ymxpc2hFcnJvcn08L3A+XG4gICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvQ2FyZC5Db250ZW50PlxuICAgICAgICA8L0NhcmQ+XG4gICAgICAgICl9XG5cbiAgICAgICAgPE1vZGFsXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBvcGVuPXtzaGFyZU9wZW59XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hhcmVPcGVuKGZhbHNlKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxIZWFkZXIgaWNvbj1cInNoYXJlIGFsdGVybmF0ZVwiIGNvbnRlbnQ9XCJTaGFyZSBkb2N1bWVudFwiIC8+XG4gICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICBUaGlzIGxpbmsga2VlcHMgdGhlIGRvY3VtZW50IElEIG9uIHRoZSBjbGllbnQgc2lkZSB1c2luZyB0aGUgVVJMIGhhc2guXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgZmx1aWRcbiAgICAgICAgICAgICAgcmVhZE9ubHlcbiAgICAgICAgICAgICAgdmFsdWU9e3NoYXJlVXJsSGFzaH1cbiAgICAgICAgICAgICAgb25Gb2N1cz17KGUpID0+IGUudGFyZ2V0LnNlbGVjdCgpfVxuICAgICAgICAgICAgICBhY3Rpb249e3tcbiAgICAgICAgICAgICAgICBpY29uOiAnY29weScsXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdDb3B5IHRvIGNsaXBib2FyZCcsXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoYXJlVXJsSGFzaCAmJiBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLmNsaXBib2FyZCkge1xuICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNoYXJlVXJsSGFzaCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtzaGFyZVVybENhbm9uaWNhbCAmJiAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScsIGZvbnRTaXplOiAnMC44NWVtJywgY29sb3I6ICcjODg4JyB9fT5cbiAgICAgICAgICAgICAgICBQZXJtYW5lbnQgVVJMOiA8Y29kZT57c2hhcmVVcmxDYW5vbmljYWx9PC9jb2RlPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgICAgICA8TW9kYWwuQWN0aW9ucz5cbiAgICAgICAgICAgIDxCdXR0b24gYmFzaWMgb25DbGljaz17KCkgPT4gc2V0U2hhcmVPcGVuKGZhbHNlKX0+XG4gICAgICAgICAgICAgIENsb3NlXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L01vZGFsLkFjdGlvbnM+XG4gICAgICAgIDwvTW9kYWw+XG5cbiAgICAgICAgPE1vZGFsXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBvcGVuPXt0b21ic3RvbmVPcGVufVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIGlmICh0b21ic3RvbmVCdXN5KSByZXR1cm47XG4gICAgICAgICAgICBzZXRUb21ic3RvbmVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgIHNldFRvbWJzdG9uZUVycm9yKG51bGwpO1xuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8SGVhZGVyIGljb249XCJ0cmFzaFwiIGNvbnRlbnQ9XCJVbnB1Ymxpc2ggZG9jdW1lbnQgKGFkbWluKVwiIC8+XG4gICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIGRvY3VtZW50IGZyb20gdGhlIGh1YiZhcG9zO3MgPHN0cm9uZz5wdWJsaXNoZWQgY2F0YWxvZzwvc3Ryb25nPiBzbyBpdCBubyBsb25nZXIgYXBwZWFycyBpbiB0aGUgbmV0d29yayBpbmRleC5cbiAgICAgICAgICAgICAgVGhlIGh1YiBtYXkgc3RpbGwga2VlcCB0aGUgc3RvcmVkIGZpbGUgdW5kZXIgPGNvZGU+ZG9jdW1lbnRzLzwvY29kZT47IHRoaXMgYWN0aW9uIGlzIHRoZSBzYW1lIGFzeycgJ31cbiAgICAgICAgICAgICAgPGNvZGU+RW1pdFRvbWJzdG9uZTwvY29kZT4gd2l0aCA8Y29kZT5kb2N1bWVudElkPC9jb2RlPi5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgIDxzdHJvbmc+RG9jdW1lbnQgaWQ6PC9zdHJvbmc+IDxjb2RlPntpZH08L2NvZGU+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB7dG9tYnN0b25lRXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZSBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgICA8cD57dG9tYnN0b25lRXJyb3J9PC9wPlxuICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgICAgICA8TW9kYWwuQWN0aW9ucz5cbiAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cImJ1dHRvblwiIGJhc2ljIG9uQ2xpY2s9eygpID0+IHsgaWYgKCF0b21ic3RvbmVCdXN5KSB7IHNldFRvbWJzdG9uZU9wZW4oZmFsc2UpOyBzZXRUb21ic3RvbmVFcnJvcihudWxsKTsgfSB9fT5cbiAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG5lZ2F0aXZlXG4gICAgICAgICAgICAgIGxvYWRpbmc9e3RvbWJzdG9uZUJ1c3l9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0b21ic3RvbmVCdXN5fVxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb25maXJtVG9tYnN0b25lfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwidHJhc2hcIiAvPlxuICAgICAgICAgICAgICBSZW1vdmUgZnJvbSBodWIgaW5kZXhcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvTW9kYWwuQWN0aW9ucz5cbiAgICAgICAgPC9Nb2RhbD5cblxuICAgICAgICA8TW9kYWxcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIG9wZW49e2Rpc3RyaWJ1dGVFbmFibGVkICYmIGRpc3RyaWJ1dGVPcGVufVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIGlmIChkaXN0cmlidXRlQnVzeSB8fCBkaXN0cmlidXRlQnJpZGdlQnVzeSB8fCBwZWVyT2ZmZXJCdXN5KSByZXR1cm47XG4gICAgICAgICAgICBzZXREaXN0cmlidXRlT3BlbihmYWxzZSk7XG4gICAgICAgICAgICBzZXREaXN0cmlidXRlRXJyb3IobnVsbCk7XG4gICAgICAgICAgICBzZXREaXN0cmlidXRlSW52b2ljZShudWxsKTtcbiAgICAgICAgICAgIHNldERpc3RyaWJ1dGVUeGlkKCcnKTtcbiAgICAgICAgICAgIHNldERpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZChudWxsKTtcbiAgICAgICAgICAgIHNldERpc3RyaWJ1dGVCcmlkZ2VCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgIHNldFBlZXJPZmZlcktleSgnJyk7XG4gICAgICAgICAgICBzZXRQZWVyT2ZmZXJCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgIHNldFBlZXJPZmZlckVycm9yKG51bGwpO1xuICAgICAgICAgICAgc2V0UGVlck9mZmVyU3VjY2VzcyhudWxsKTtcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPEhlYWRlciBpY29uPVwiY2xvdWQgdXBsb2FkXCIgY29udGVudD1cIlBheSB0byBkaXN0cmlidXRlXCIgLz5cbiAgICAgICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgIFBheSBCaXRjb2luIChMMSkgdG8gaGF2ZSBvdGhlciBub2RlcyBzdG9yZSB0aGlzIGRvY3VtZW50IHVuZGVyIGEgbG9uZy10ZXJtIGNvbnRyYWN0LlxuICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBzdG9yYWdlIGlzIHJlcXVlc3RlZCBmb3IgNCB5ZWFycyB3aXRoIHBlcmlvZGljIHJhbmRvbSBjaGFsbGVuZ2VzLlxuICAgICAgICAgICAgICBQYXltZW50IGlzIGEgPHN0cm9uZz5yZWFsIG9uLWNoYWluIHRyYW5zYWN0aW9uPC9zdHJvbmc+IHRvIHRoZSBpbnZvaWNlIGFkZHJlc3M7IHRoZSBodWIgdmVyaWZpZXMgaXQgYmVmb3JlIHJlY29yZGluZyB0aGUgc3RvcmFnZSBjb250cmFjdC5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIHtuZWVkc0lkZW50aXR5VW5sb2NrICYmIChcbiAgICAgICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5JZGVudGl0eSBsb2NrZWQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyMzMzMnIH19PlxuICAgICAgICAgICAgICAgICAgQ2xvc2UgdGhpcyBkaWFsb2csIHVubG9jayB5b3VyIGlkZW50aXR5IGluIHRoZSB0b3AgYmFyLCB0aGVuIG9wZW4gRGlzdHJpYnV0ZSBhZ2Fpbi5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ISFwcm9wcy5oYXNEb2N1bWVudEtleSAmJiBkaXN0cmlidXRlTW9kYWxOb0xvY2FsV2lyZSAmJiAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+Tm8gbG9jYWwgc2lnbmluZyBrZXkgaW4gdGhpcyBicm93c2VyPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgY29sb3I6ICcjMzMzJyB9fT5cbiAgICAgICAgICAgICAgICAgIEludm9pY2UgYW5kIGNvbnRyYWN0IHN0ZXBzIHN0aWxsIHJlYWNoIHRoZSBIdWIgb3ZlciB5b3VyIHNlc3Npb247IHBheSB0aGUgZGlzdHJpYnV0ZSBhZGRyZXNzIGZyb20gYW55IHdhbGxldCB5b3UgdHJ1c3QuXG4gICAgICAgICAgICAgICAgICBJZiB5b3UgdXNlIGRlc2t0b3AgZGVsZWdhdGlvbiwgY29uZmlybSBwcm9tcHRzIGluIHRoZSBIdWIgYXBwIGFuZCByZXZva2UgdW5kZXJ7JyAnfVxuICAgICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3Mvc2VjdXJpdHlcIj5TZWN1cml0eSAmYW1wOyBkZWxlZ2F0aW9uPC9MaW5rPiBvbiBzaGFyZWQgY29tcHV0ZXJzLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHsvKiBTdGVwIGluZGljYXRvcjogMSBSZXF1ZXN0IGludm9pY2UsIDIgUGF5LCAzIENvbmZpcm0gLyBTdWNjZXNzICovfVxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzAuNWVtJywgbWFyZ2luQm90dG9tOiAnMWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgY29sb3I9eyFkaXN0cmlidXRlSW52b2ljZSAmJiAhZGlzdHJpYnV0ZVN1Y2Nlc3NDb250cmFjdElkID8gJ2JsdWUnIDogJ2dyZXknfVxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAxLiBSZXF1ZXN0IGludm9pY2VcbiAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgY29sb3I9e2Rpc3RyaWJ1dGVJbnZvaWNlICYmICFkaXN0cmlidXRlU3VjY2Vzc0NvbnRyYWN0SWQgPyAnYmx1ZScgOiAnZ3JleSd9XG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDIuIFBheVxuICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICBjb2xvcj17ZGlzdHJpYnV0ZVN1Y2Nlc3NDb250cmFjdElkID8gJ2dyZWVuJyA6ICdncmV5J31cbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgMy4ge2Rpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZCA/ICdEb25lJyA6ICdDb25maXJtJ31cbiAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge2Rpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZCA/IChcbiAgICAgICAgICAgICAgPFNlZ21lbnQgY29sb3I9XCJncmVlblwiIHN0eWxlPXt7IHRleHRBbGlnbjogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNoZWNrIGNpcmNsZVwiIHNpemU9XCJiaWdcIiBjb2xvcj1cImdyZWVuXCIgLz5cbiAgICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICBTdG9yYWdlIGNvbnRyYWN0IGNyZWF0ZWRcbiAgICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgICAgICAgWW91ciBwYXltZW50IGhhcyBiZWVuIGJvbmRlZC4gVGhlIGRvY3VtZW50IGlzIG5vdyBkaXN0cmlidXRlZC5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgICAgICB0bz17YC9jb250cmFjdHMvJHtlbmNvZGVVUklDb21wb25lbnQoZGlzdHJpYnV0ZVN1Y2Nlc3NDb250cmFjdElkKX1gfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXREaXN0cmlidXRlT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0RGlzdHJpYnV0ZUludm9pY2UobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVUeGlkKCcnKTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImZpbGUgYWx0ZXJuYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgIFZpZXcgY29udHJhY3RcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICAgICAgKSA6ICFkaXN0cmlidXRlSW52b2ljZSA/IChcbiAgICAgICAgICAgICAgPEZvcm1cbiAgICAgICAgICAgICAgICBpZD1cImZhYnJpYy1kb2N1bWVudC1kaXN0cmlidXRlLWZvcm1cIlxuICAgICAgICAgICAgICAgIG9uU3VibWl0PXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFpZCB8fCBkaXN0cmlidXRlQnVzeSB8fCBwZWVyT2ZmZXJCdXN5IHx8IG5lZWRzSWRlbnRpdHlVbmxvY2spIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFtb3VudCA9IHBhcnNlSW50KGRpc3RyaWJ1dGVBbW91bnRTYXRzLCAxMCk7XG4gICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShhbW91bnQpIHx8IGFtb3VudCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVFcnJvcignRW50ZXIgYSBwb3NpdGl2ZSBhbW91bnQgaW4gc2F0cy4nKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2V0RGlzdHJpYnV0ZUVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgICAgc2V0RGlzdHJpYnV0ZUJ1c3kodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFtb3VudFNhdHM6IGFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgZGVzaXJlZENvcGllczogTWF0aC5tYXgoMSwgcGFyc2VJbnQoZGlzdHJpYnV0ZURlc2lyZWRDb3BpZXMsIDEwKSB8fCAxKSxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25ZZWFyczogZGlzdHJpYnV0ZUR1cmF0aW9uWWVhcnMsXG4gICAgICAgICAgICAgICAgICAgIGNoYWxsZW5nZUNhZGVuY2U6IGRpc3RyaWJ1dGVDYWRlbmNlLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZURlYWRsaW5lOiBkaXN0cmlidXRlRGVhZGxpbmVcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BzLm9uUmVxdWVzdERpc3RyaWJ1dGVJbnZvaWNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm9uUmVxdWVzdERpc3RyaWJ1dGVJbnZvaWNlKGlkLCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RGlzdHJpYnV0ZUVycm9yKCdEaXN0cmlidXRlIGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBodWIuJyk7XG4gICAgICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+QW1vdW50IChzYXRzKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gMTAwMDAwXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3RyaWJ1dGVBbW91bnRTYXRzfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldERpc3RyaWJ1dGVBbW91bnRTYXRzKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsPiMgb2YgZGVzaXJlZCBjb3BpZXM8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3RyaWJ1dGVEZXNpcmVkQ29waWVzfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gcGFyc2VJbnQoZS50YXJnZXQudmFsdWUsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHYpICYmIHYgPj0gMSkgc2V0RGlzdHJpYnV0ZURlc2lyZWRDb3BpZXModik7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiSG93IG1hbnkgY29waWVzIHlvdSB3YW50IHN0b3JlZCBhY3Jvc3MgdGhlIG5ldHdvcmtcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+RHVyYXRpb248L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZGlzdHJpYnV0ZUR1cmF0aW9uWWVhcnN9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBwYXJzZUludChlLnRhcmdldC52YWx1ZSwgMTApO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUodikpIHNldERpc3RyaWJ1dGVEdXJhdGlvblllYXJzKHYpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17eyBiYXNpYzogdHJ1ZSwgY29udGVudDogJ3llYXJzJyB9fVxuICAgICAgICAgICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+Q2hhbGxlbmdlIGZyZXF1ZW5jeTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e2NhZGVuY2VPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZGlzdHJpYnV0ZUNhZGVuY2V9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoXywgZGF0YSkgPT4gc2V0RGlzdHJpYnV0ZUNhZGVuY2UoZGF0YS52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD5SZXNwb25zZSBkZWFkbGluZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e2RlYWRsaW5lT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3RyaWJ1dGVEZWFkbGluZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhfLCBkYXRhKSA9PiBzZXREaXN0cmlidXRlRGVhZGxpbmUoZGF0YS52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8RGl2aWRlciBzZWN0aW9uIC8+XG4gICAgICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5PZmZlciBhIGNvbm5lY3RlZCBGYWJyaWMgcGVlcjwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgY29sb3I6ICcjMzMzJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgU2VuZHMgYSBwcml2YXRlIFAyUCBob3N0aW5nIG9mZmVyIChzYW1lIGNoYW5uZWwgYXMgaW5jb21pbmcgcHJvcG9zYWxzIG9ueycgJ31cbiAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89XCIvZG9jdW1lbnRzXCI+RG9jdW1lbnRzPC9MaW5rPikuIFRoZSBwZWVyIGFjY2VwdHMgZnJvbSB0aGVpciBsaXN0IGFuZCByZXR1cm5zIGEgQml0Y29pbiBpbnZvaWNlOyB5b3UgcGF5IHRoYXQgaW52b2ljZSB0byBib25kIHN0b3JhZ2UuXG4gICAgICAgICAgICAgICAgICAgIFRoZSBodWIgbXVzdCBhbHJlYWR5IGhhdmUgdGhlIGZpbGUgdW5kZXIgaXRzIGNvbnRlbnQgaGFzaCDigJQgY3JlYXRlIG9yIG9wZW4gdGhlIGRvY3VtZW50IG9uY2Ugc28gaXQgaXMgc3RvcmVkIG9uIHRoZSBodWIuXG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICB7ZmFicmljUGVlckRyb3Bkb3duT3B0aW9ucy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNzVlbSAwIDAnLCBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICAgICAgICAgIE5vIEZhYnJpYyBUQ1AgcGVlcnMgaW4gdGhlIGxhdGVzdCBodWIgc25hcHNob3QuIENvbm5lY3QgYSBwZWVyIHVuZGVyeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9wZWVyc1wiPlBlZXJzPC9MaW5rPi5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybS5GaWVsZCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlBlZXI8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHBlZXIgKG11c3QgYmUgY29ubmVjdGVkIG9uIHRoZSBodWIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtmYWJyaWNQZWVyRHJvcGRvd25PcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cGVlck9mZmVyS2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHsgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBlZXJPZmZlcktleShTdHJpbmcodmFsdWUgfHwgJycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQZWVyT2ZmZXJFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQZWVyT2ZmZXJTdWNjZXNzKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJibHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e3BlZXJPZmZlckJ1c3l9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJPZmZlckJ1c3kgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZUJ1c3kgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZUJyaWRnZUJ1c3kgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNJZGVudGl0eVVubG9jayB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAhcGVlck9mZmVyS2V5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vblNlbmREaXN0cmlidXRlUHJvcG9zYWwgIT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW1vdW50ID0gcGFyc2VJbnQoZGlzdHJpYnV0ZUFtb3VudFNhdHMsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYW1vdW50KSB8fCBhbW91bnQgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBlZXJPZmZlckVycm9yKCdFbnRlciBhIHBvc2l0aXZlIGFtb3VudCBpbiBzYXRzIGFib3ZlIGZpcnN0LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYWNrZW5kSWQgPSAoZG9jICYmIGRvYy5zaGEyNTYpID8gU3RyaW5nKGRvYy5zaGEyNTYpIDogU3RyaW5nKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFiYWNrZW5kSWQgfHwgdHlwZW9mIHByb3BzLm9uU2VuZERpc3RyaWJ1dGVQcm9wb3NhbCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQZWVyT2ZmZXJCdXN5KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQZWVyT2ZmZXJFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGVlck9mZmVyU3VjY2VzcyhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRDb3BpZXM6IE1hdGgubWF4KDEsIHBhcnNlSW50KGRpc3RyaWJ1dGVEZXNpcmVkQ29waWVzLCAxMCkgfHwgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25ZZWFyczogZGlzdHJpYnV0ZUR1cmF0aW9uWWVhcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGxlbmdlQ2FkZW5jZTogZGlzdHJpYnV0ZUNhZGVuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VEZWFkbGluZTogZGlzdHJpYnV0ZURlYWRsaW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdG9ySWQ6IChkb2MgJiYgZG9jLmlkKSA/IFN0cmluZyhkb2MuaWQpIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vblNlbmREaXN0cmlidXRlUHJvcG9zYWwocGVlck9mZmVyS2V5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRJZDogYmFja2VuZElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudFNhdHM6IGFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnROYW1lOiAoZG9jICYmIGRvYy5uYW1lKSB8fCBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50OiBkb2NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBpZDogZG9jLmlkLCBzaGEyNTY6IGRvYy5zaGEyNTYsIG5hbWU6IGRvYy5uYW1lLCBtaW1lOiBkb2MubWltZSwgc2l6ZTogZG9jLnNpemUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICBTZW5kIGhvc3Rpbmcgb2ZmZXJcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICB7dHlwZW9mIHByb3BzLm9uU2VuZERpc3RyaWJ1dGVQcm9wb3NhbCAhPT0gJ2Z1bmN0aW9uJyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScsIGNvbG9yOiAnIzg4OCcsIGZvbnRTaXplOiAnMC45ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNlc3Npb24gZG9lcyBub3QgZXhwb3NlIHBlZXIgcHJvcG9zYWxzIChicmlkZ2Ugbm90IHJlYWR5KS5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIHtwZWVyT2ZmZXJFcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZSBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19IGNvbnRlbnQ9e3BlZXJPZmZlckVycm9yfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAge3BlZXJPZmZlclN1Y2Nlc3MgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UgcG9zaXRpdmUgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fSBjb250ZW50PXtwZWVyT2ZmZXJTdWNjZXNzfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAge2Rpc3RyaWJ1dGVFcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBjb2xvcjogJyNiMDAnIH19PlxuICAgICAgICAgICAgICAgICAgICB7ZGlzdHJpYnV0ZUVycm9yfVxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPEludm9pY2VcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3M9e2Rpc3RyaWJ1dGVJbnZvaWNlLmFkZHJlc3N9XG4gICAgICAgICAgICAgICAgICBhbW91bnRTYXRzPXtkaXN0cmlidXRlSW52b2ljZS5hbW91bnRTYXRzfVxuICAgICAgICAgICAgICAgICAgbmV0d29yaz17ZGlzdHJpYnV0ZUludm9pY2UubmV0d29ya31cbiAgICAgICAgICAgICAgICAgIGxhYmVsPVwiU3RvcmFnZSBjb250cmFjdCBwYXltZW50XCJcbiAgICAgICAgICAgICAgICAgIGlkZW50aXR5PXtwcm9wcy5pZGVudGl0eSB8fCB7fX1cbiAgICAgICAgICAgICAgICAgIGNvbXBhY3RcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVVbmxvY2tlZElkZW50aXR5Rm9ySHViUGF5XG4gICAgICAgICAgICAgICAgICBpZGVudGl0eVVubG9ja2VkPXshIXByb3BzLmhhc0RvY3VtZW50S2V5fVxuICAgICAgICAgICAgICAgICAgb25QYWlkPXsodHhpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXREaXN0cmlidXRlVHhpZCh0eGlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR4aWQgJiYgaWQgJiYgdHlwZW9mIHByb3BzLm9uRGlzdHJpYnV0ZURvY3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RGlzdHJpYnV0ZUJ1c3kodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW1vdW50U2F0czogZGlzdHJpYnV0ZUludm9pY2UuYW1vdW50U2F0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uWWVhcnM6IGRpc3RyaWJ1dGVJbnZvaWNlLmNvbmZpZz8uZHVyYXRpb25ZZWFycyB8fCBkaXN0cmlidXRlRHVyYXRpb25ZZWFycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxsZW5nZUNhZGVuY2U6IGRpc3RyaWJ1dGVJbnZvaWNlLmNvbmZpZz8uY2hhbGxlbmdlQ2FkZW5jZSB8fCBkaXN0cmlidXRlQ2FkZW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlRGVhZGxpbmU6IGRpc3RyaWJ1dGVJbnZvaWNlLmNvbmZpZz8ucmVzcG9uc2VEZWFkbGluZSB8fCBkaXN0cmlidXRlRGVhZGxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eGlkXG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUocHJvcHMub25EaXN0cmlidXRlRG9jdW1lbnQoaWQsIGNvbmZpZykpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXREaXN0cmlidXRlQnVzeShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyICYmIGVyci5tZXNzYWdlKSA/IGVyci5tZXNzYWdlIDogJ0Rpc3RyaWJ1dGlvbiByZXF1ZXN0IGZhaWxlZC4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtodWJBZG1pblRva2VuUHJlc2VudCAmJiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScsIGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC43NWVtJywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cIm9yYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZGlzdHJpYnV0ZUJyaWRnZUJ1c3l9XG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZUJyaWRnZUJ1c3kgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVCdXN5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhIWRpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNJZGVudGl0eVVubG9ja1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVQYXlEaXN0cmlidXRlRnJvbUJyaWRnZX1cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlBPU1QgL3NlcnZpY2VzL2JpdGNvaW4gc2VuZHBheW1lbnQg4oCUIGh1YiBiaXRjb2luZCBicm9hZGNhc3RzOyBhZG1pbiB0b2tlbiArIHVubG9ja2VkIGlkZW50aXR5IHJlcXVpcmVkIGluIHRoaXMgYnJvd3NlclwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2VydmVyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBQYXkgZnJvbSBodWIgd2FsbGV0ICYgYm9uZFxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScsIG1heFdpZHRoOiAnMjhlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgeydPbmUgc3RlcDogc3BlbmQgZnJvbSB0aGlzIGh1YlxcJ3MgYml0Y29pbmQgd2FsbGV0LCB0aGVuIGNhbGwgJ31cbiAgICAgICAgICAgICAgICAgICAgICA8Y29kZT5DcmVhdGVTdG9yYWdlQ29udHJhY3Q8L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgeycgd2l0aCB0aGUgcmV0dXJuZWQgdHhpZCAoc2FtZSBhcyBDb25maXJtIGJlbG93KS4gUmVndGVzdDogbWluZSBhIGJsb2NrIGlmIHZlcmlmaWNhdGlvbiBpcyBzbG93Lid9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPEZvcm0uRmllbGQgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD5PciBwYXN0ZSB0eGlkIChpZiB5b3UgcGFpZCBmcm9tIGFuIGV4dGVybmFsIHdhbGxldCk8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwidHhpZCBmcm9tIHlvdXIgd2FsbGV0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3RyaWJ1dGVUeGlkfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldERpc3RyaWJ1dGVUeGlkKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIHtUWElEX0hFWF82NC50ZXN0KFN0cmluZyhkaXN0cmlidXRlVHhpZCB8fCAnJykudHJpbSgpKSAmJiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJywgZm9udFNpemU6ICcwLjllbScgfX0+XG4gICAgICAgICAgICAgICAgICAgIHt1Zi5iaXRjb2luRXhwbG9yZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89e2Avc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGRpc3RyaWJ1dGVUeGlkKS50cmltKCkpfWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgT3BlbiB0cmFuc2FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuODVlbScsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0gdGl0bGU9XCJFbmFibGUgQml0Y29pbiDigJQgQmxvY2sgJiB0cmFuc2FjdGlvbiBkZXRhaWwgcm91dGVzIGluIEFkbWluIOKGkiBGZWF0dXJlIHZpc2liaWxpdHkgZm9yIHRoZSB0eCB2aWV3ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmcoZGlzdHJpYnV0ZVR4aWQpLnRyaW0oKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgeycgJ33igJQgb24tY2hhaW4gc2VuZHMgb2Z0ZW4gYXBwZWFyIGluIHRoZSBtZW1wb29sIGZpcnN0OyBtaW5lIGEgYmxvY2sgb24gcmVndGVzdCB0byBjb25maXJtLlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHtkaXN0cmlidXRlVHhDaGFpbiAmJiAhZGlzdHJpYnV0ZVN1Y2Nlc3NDb250cmFjdElkICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMzVlbScsIGNvbG9yOiAnIzU1NScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZGlzdHJpYnV0ZVR4Q2hhaW4ubG9hZGluZyAmJiA8c3Bhbj5DaGVja2luZyBkZXB0aOKApjwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICAgICAgICB7IWRpc3RyaWJ1dGVUeENoYWluLmxvYWRpbmcgJiYgZGlzdHJpYnV0ZVR4Q2hhaW4udHhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGRpc3RyaWJ1dGVUeENoYWluLnR4LmJsb2NraGFzaCA9PSBudWxsIHx8IGRpc3RyaWJ1dGVUeENoYWluLnR4LmJsb2NraGFzaCA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmIE51bWJlcihkaXN0cmlidXRlVHhDaGFpbi50eC5jb25maXJtYXRpb25zIHx8IDApID09PSAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PHN0cm9uZz5NZW1wb29sPC9zdHJvbmc+IOKAlCAwIGNvbmZpcm1hdGlvbnM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgeyFkaXN0cmlidXRlVHhDaGFpbi5sb2FkaW5nICYmIGRpc3RyaWJ1dGVUeENoYWluLnR4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmIE51bWJlcihkaXN0cmlidXRlVHhDaGFpbi50eC5jb25maXJtYXRpb25zIHx8IDApID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e2Rpc3RyaWJ1dGVUeENoYWluLnR4LmNvbmZpcm1hdGlvbnN9PC9zdHJvbmc+IGNvbmZpcm1hdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtOdW1iZXIoZGlzdHJpYnV0ZVR4Q2hhaW4udHguY29uZmlybWF0aW9ucykgPT09IDEgPyAnJyA6ICdzJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHshZGlzdHJpYnV0ZVR4Q2hhaW4ubG9hZGluZyAmJiBkaXN0cmlidXRlVHhDaGFpbi5lcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcgfX0+e2Rpc3RyaWJ1dGVUeENoYWluLmVycm9yfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICB7IWRpc3RyaWJ1dGVUeENoYWluLmxvYWRpbmcgJiYgIWRpc3RyaWJ1dGVUeENoYWluLnR4ICYmICFkaXN0cmlidXRlVHhDaGFpbi5lcnJvciAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcgfX0+Tm90IHZpc2libGUgb24gdGhpcyBodWIgeWV0IOKAlCB3aWxsIHJldHJ5Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgICAgICAgIDxNb2RhbC5BY3Rpb25zPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3RyaWJ1dGVCdXN5IHx8IGRpc3RyaWJ1dGVCcmlkZ2VCdXN5IHx8IHBlZXJPZmZlckJ1c3kpIHJldHVybjtcbiAgICAgICAgICAgICAgICBzZXREaXN0cmlidXRlT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2V0RGlzdHJpYnV0ZUVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVJbnZvaWNlKG51bGwpO1xuICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVUeGlkKCcnKTtcbiAgICAgICAgICAgICAgICBzZXREaXN0cmlidXRlU3VjY2Vzc0NvbnRyYWN0SWQobnVsbCk7XG4gICAgICAgICAgICAgICAgc2V0RGlzdHJpYnV0ZUJyaWRnZUJ1c3koZmFsc2UpO1xuICAgICAgICAgICAgICAgIHNldFBlZXJPZmZlcktleSgnJyk7XG4gICAgICAgICAgICAgICAgc2V0UGVlck9mZmVyQnVzeShmYWxzZSk7XG4gICAgICAgICAgICAgICAgc2V0UGVlck9mZmVyRXJyb3IobnVsbCk7XG4gICAgICAgICAgICAgICAgc2V0UGVlck9mZmVyU3VjY2VzcyhudWxsKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZCA/ICdDbG9zZScgOiBkaXN0cmlidXRlSW52b2ljZSA/ICdQcmV2aW91cycgOiAnQ2FuY2VsJ31cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAge2Rpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZCA/IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHByaW1hcnlcbiAgICAgICAgICAgICAgICBhcz17TGlua31cbiAgICAgICAgICAgICAgICB0bz17YC9jb250cmFjdHMvJHtlbmNvZGVVUklDb21wb25lbnQoZGlzdHJpYnV0ZVN1Y2Nlc3NDb250cmFjdElkKX1gfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZChudWxsKTtcbiAgICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVJbnZvaWNlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgc2V0RGlzdHJpYnV0ZVR4aWQoJycpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZmlsZSBhbHRlcm5hdGVcIiAvPlxuICAgICAgICAgICAgICAgIFZpZXcgY29udHJhY3RcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApIDogIWRpc3RyaWJ1dGVJbnZvaWNlID8gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgIGZvcm09XCJmYWJyaWMtZG9jdW1lbnQtZGlzdHJpYnV0ZS1mb3JtXCJcbiAgICAgICAgICAgICAgICBsb2FkaW5nPXtkaXN0cmlidXRlQnVzeX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzdHJpYnV0ZUJ1c3kgfHwgcGVlck9mZmVyQnVzeSB8fCBuZWVkc0lkZW50aXR5VW5sb2NrfVxuICAgICAgICAgICAgICAgIHRpdGxlPXtuZWVkc0lkZW50aXR5VW5sb2NrID8gJ1VubG9jayBpZGVudGl0eSB0byByZXF1ZXN0IGEgZGlzdHJpYnV0ZSBpbnZvaWNlJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFJlcXVlc3QgaW52b2ljZVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgbG9hZGluZz17ZGlzdHJpYnV0ZUJ1c3l9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFkaXN0cmlidXRlVHhpZC50cmltKCkgfHwgZGlzdHJpYnV0ZUJ1c3kgfHwgZGlzdHJpYnV0ZUJyaWRnZUJ1c3l9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHggPSBkaXN0cmlidXRlVHhpZC50cmltKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoIXR4IHx8ICFpZCB8fCB0eXBlb2YgcHJvcHMub25EaXN0cmlidXRlRG9jdW1lbnQgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVCdXN5KHRydWUpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBhbW91bnRTYXRzOiBkaXN0cmlidXRlSW52b2ljZS5hbW91bnRTYXRzLFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvblllYXJzOiBkaXN0cmlidXRlSW52b2ljZS5jb25maWc/LmR1cmF0aW9uWWVhcnMgfHwgZGlzdHJpYnV0ZUR1cmF0aW9uWWVhcnMsXG4gICAgICAgICAgICAgICAgICAgIGNoYWxsZW5nZUNhZGVuY2U6IGRpc3RyaWJ1dGVJbnZvaWNlLmNvbmZpZz8uY2hhbGxlbmdlQ2FkZW5jZSB8fCBkaXN0cmlidXRlQ2FkZW5jZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VEZWFkbGluZTogZGlzdHJpYnV0ZUludm9pY2UuY29uZmlnPy5yZXNwb25zZURlYWRsaW5lIHx8IGRpc3RyaWJ1dGVEZWFkbGluZSxcbiAgICAgICAgICAgICAgICAgICAgdHhpZDogdHhcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUocHJvcHMub25EaXN0cmlidXRlRG9jdW1lbnQoaWQsIGNvbmZpZykpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RGlzdHJpYnV0ZUJ1c3koZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldERpc3RyaWJ1dGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnIgJiYgZXJyLm1lc3NhZ2UpID8gZXJyLm1lc3NhZ2UgOiAnRGlzdHJpYnV0aW9uIHJlcXVlc3QgZmFpbGVkLidcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3M6IHN0b3JhZ2VDb250cmFjdEJvbmRlZCB3aWxsIGZpcmUgYW5kIHNldCBkaXN0cmlidXRlU3VjY2Vzc0NvbnRyYWN0SWRcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ29uZmlybSAmIERpc3RyaWJ1dGVcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvTW9kYWwuQWN0aW9ucz5cbiAgICAgICAgPC9Nb2RhbD5cblxuICAgICAgICA8TW9kYWxcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIG9wZW49e3B1cmNoYXNlT3Blbn1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBpZiAocHVyY2hhc2VCdXN5IHx8IHB1cmNoYXNlQnJpZGdlQnVzeSkgcmV0dXJuO1xuICAgICAgICAgICAgc2V0UHVyY2hhc2VPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgIHNldFB1cmNoYXNlSW52b2ljZShudWxsKTtcbiAgICAgICAgICAgIHNldFB1cmNoYXNlVHhpZCgnJyk7XG4gICAgICAgICAgICBzZXRQdXJjaGFzZUVycm9yKG51bGwpO1xuICAgICAgICAgICAgc2V0UHVyY2hhc2VkQ29udGVudChudWxsKTtcbiAgICAgICAgICAgIHNldFB1cmNoYXNlQnJpZGdlQnVzeShmYWxzZSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxIZWFkZXIgaWNvbj1cImJpdGNvaW5cIiBjb250ZW50PVwiUHVyY2hhc2UgZG9jdW1lbnQgKEhUTEMpXCIgLz5cbiAgICAgICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgIFBheSB0aGUgb24tY2hhaW4gaW52b2ljZS4gRm9yIHByaWNlZCBzZWFsZWQgZG9jdW1lbnRzIHRoZSBodWIgc3RvcmVzIGNpcGhlcnRleHQtYXQtcmVzdDsgYWZ0ZXIgTDEgcGF5bWVudCB2ZXJpZmljYXRpb24gaXQgcmV2ZWFscyB0aGUgQUVTIGRlY3J5cHRpb24ga2V5IChIVExDIHByZWltYWdlKS4gU2FtZS1odWIgPHN0cm9uZz5DbGFpbSAmYW1wOyBVbmxvY2s8L3N0cm9uZz4gcmV0dXJucyBwbGFpbnRleHQ7IHBlZXIgaW52ZW50b3J5IEhUTEMgZGVsaXZlcnMgY2lwaGVydGV4dCB0aGVuIGF1dG8tdW5sb2NrcyB2aWEgPGNvZGU+SFRMQ19LRVlfUkVWRUFMPC9jb2RlPi5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIHtuZWVkc0lkZW50aXR5VW5sb2NrICYmIChcbiAgICAgICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19PlxuICAgICAgICAgICAgICAgIFVubG9jayB5b3VyIGlkZW50aXR5IHRvIGNvbXBsZXRlIHRoaXMgZmxvdyBmcm9tIHRoaXMgYnJvd3Nlci5cbiAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcsIGZvbnRTaXplOiAnMC45ZW0nLCBtYXJnaW5Ub3A6ICcwLjM1ZW0nIH19PlxuICAgICAgICAgICAgICBJZiA8c3Ryb25nPkNsYWltICZhbXA7IFVubG9jazwvc3Ryb25nPiBmYWlscyBpbW1lZGlhdGVseSBhZnRlciB5b3UgYnJvYWRjYXN0LCB0aGUgcGF5bWVudCBtYXkgc3RpbGwgYmUgdW5jb25maXJtZWQg4oCUIG9uIHJlZ3Rlc3QgdXNlIDxzdHJvbmc+R2VuZXJhdGUgQmxvY2s8L3N0cm9uZz4gb257JyAnfVxuICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCI+Qml0Y29pbjwvTGluaz4uXG4gICAgICAgICAgICAgIHt1Zi5iaXRjb2luUmVzb3VyY2VzID8gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICB7JyAnfUZvciBhIHJhdyBMMSBwcm9vZiAodHhpZCArIGFkZHJlc3MgKyBzYXRzKSwgdXNleycgJ31cbiAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vcmVzb3VyY2VzXCI+Qml0Y29pbiDihpIgUmVzb3VyY2VzPC9MaW5rPi5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgeycgJ31FbmFibGUgPHN0cm9uZz5CaXRjb2luIOKAlCBIVFRQIHJlc291cmNlczwvc3Ryb25nPiBpbiBBZG1pbiBmb3IgdGhlIGludGVyYWN0aXZlIHBheW1lbnQgdmVyaWZpZXIuXG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB7cHVyY2hhc2VkQ29udGVudCA/IChcbiAgICAgICAgICAgICAgPFNlZ21lbnQgY29sb3I9XCJncmVlblwiPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjaGVjayBjaXJjbGVcIiBzaXplPVwiYmlnXCIgY29sb3I9XCJncmVlblwiIC8+XG4gICAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PkRvY3VtZW50IHVubG9ja2VkPC9IZWFkZXI+XG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5Db250ZW50IGhhc2ggdmVyaWZpZWQuIFlvdSBjYW4gbm93IHZpZXcgb3IgZG93bmxvYWQuPC9wPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHByaW1hcnlcbiAgICAgICAgICAgICAgICAgIGFzPVwiYVwiXG4gICAgICAgICAgICAgICAgICBocmVmPXtgZGF0YToke3B1cmNoYXNlZENvbnRlbnQubWltZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ307YmFzZTY0LCR7cHVyY2hhc2VkQ29udGVudC5jb250ZW50QmFzZTY0fWB9XG4gICAgICAgICAgICAgICAgICBkb3dubG9hZD17cHVyY2hhc2VkQ29udGVudC5uYW1lIHx8ICdkb2N1bWVudCd9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImRvd25sb2FkXCIgLz5cbiAgICAgICAgICAgICAgICAgIERvd25sb2FkXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgICAgICkgOiAhcHVyY2hhc2VJbnZvaWNlID8gKFxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICB7IXB1cmNoYXNlRXJyb3IgJiYgPHAgc3R5bGU9e3sgY29sb3I6ICcjODg4JyB9fT5SZXF1ZXN0aW5nIGludm9pY2XigKY8L3A+fVxuICAgICAgICAgICAgICAgIHtwdXJjaGFzZUVycm9yICYmIChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlPntwdXJjaGFzZUVycm9yfTwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScsIG1hcmdpblRvcDogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgVHlwaWNhbCBjYXVzZXM6IEJpdGNvaW4gdW5hdmFpbGFibGUgb24gdGhlIGh1YiwgZG9jdW1lbnQgbm90IHB1Ymxpc2hlZCwgb3Igbm8gbGlzdCBwcmljZSAvIGZsb29yLiBVc2UgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pblwiPkJpdGNvaW48L0xpbms+IGFuZCBjb25maXJtIHRoaXMgZG9jdW1lbnQgc2hvd3MgPHN0cm9uZz5QdWJsaXNoZWQ8L3N0cm9uZz4gd2l0aCBhIHB1cmNoYXNlIHByaWNlLlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPEludm9pY2VcbiAgICAgICAgICAgICAgICAgIGFkZHJlc3M9e3B1cmNoYXNlSW52b2ljZS5hZGRyZXNzfVxuICAgICAgICAgICAgICAgICAgYW1vdW50U2F0cz17cHVyY2hhc2VJbnZvaWNlLmFtb3VudFNhdHN9XG4gICAgICAgICAgICAgICAgICBuZXR3b3JrPXtwdXJjaGFzZUludm9pY2UubmV0d29ya31cbiAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRG9jdW1lbnQgcHVyY2hhc2UgKEhUTEMpXCJcbiAgICAgICAgICAgICAgICAgIGlkZW50aXR5PXtwcm9wcy5pZGVudGl0eSB8fCB7fX1cbiAgICAgICAgICAgICAgICAgIGNvbXBhY3RcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVVbmxvY2tlZElkZW50aXR5Rm9ySHViUGF5XG4gICAgICAgICAgICAgICAgICBpZGVudGl0eVVubG9ja2VkPXshIXByb3BzLmhhc0RvY3VtZW50S2V5fVxuICAgICAgICAgICAgICAgICAgb25QYWlkPXsodHhpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRQdXJjaGFzZVR4aWQodHhpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eGlkICYmIGlkICYmIHR5cGVvZiBwcm9wcy5vbkNsYWltUHVyY2hhc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRQdXJjaGFzZUJ1c3kodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0UHVyY2hhc2VFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUocHJvcHMub25DbGFpbVB1cmNoYXNlKGlkLCB0eGlkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRQdXJjaGFzZWRDb250ZW50KHJlcy5kb2N1bWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UHVyY2hhc2VFcnJvcigocmVzICYmIHJlcy5lcnJvcikgfHwgJ0NsYWltIGZhaWxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHNldFB1cmNoYXNlRXJyb3IoZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiBzZXRQdXJjaGFzZUJ1c3koZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIHtodWJBZG1pblRva2VuUHJlc2VudCAmJiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScsIGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC43NWVtJywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cIm9yYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz17cHVyY2hhc2VCcmlkZ2VCdXN5fVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1cmNoYXNlQnJpZGdlQnVzeSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcHVyY2hhc2VCdXN5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhIXB1cmNoYXNlZENvbnRlbnQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRzSWRlbnRpdHlVbmxvY2tcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUGF5UHVyY2hhc2VGcm9tQnJpZGdlfVxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUE9TVCAvc2VydmljZXMvYml0Y29pbiBzZW5kcGF5bWVudCDigJQgaHViIGJpdGNvaW5kIGJyb2FkY2FzdHM7IGFkbWluIHRva2VuICsgdW5sb2NrZWQgaWRlbnRpdHkgaW4gdGhpcyBicm93c2VyXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzZXJ2ZXJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIFBheSBmcm9tIGh1YiB3YWxsZXQgJiB1bmxvY2tcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45ZW0nLCBtYXhXaWR0aDogJzI4ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIHsnU3BlbmQgZnJvbSB0aGlzIGh1YlxcJ3MgYml0Y29pbmQgd2FsbGV0LCB0aGVuIGNsYWltIHdpdGggdGhlIHJldHVybmVkIHR4aWQuIFJlZ3Rlc3Q6IG1pbmUgYSBibG9jayBpZiB2ZXJpZmljYXRpb24gaXMgc2xvdy4nfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+T3IgcGFzdGUgdHhpZCAoaWYgeW91IHBhaWQgZnJvbSBhbiBleHRlcm5hbCB3YWxsZXQpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInR4aWQgZnJvbSB5b3VyIHdhbGxldFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwdXJjaGFzZVR4aWR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0UHVyY2hhc2VUeGlkKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIHtwdXJjaGFzZUVycm9yICYmIDxNZXNzYWdlIG5lZ2F0aXZlIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+e3B1cmNoYXNlRXJyb3J9PC9NZXNzYWdlPn1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgICAgICA8TW9kYWwuQWN0aW9ucz5cbiAgICAgICAgICAgIDxCdXR0b24gYmFzaWMgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocHVyY2hhc2VCdXN5IHx8IHB1cmNoYXNlQnJpZGdlQnVzeSkgcmV0dXJuO1xuICAgICAgICAgICAgICBzZXRQdXJjaGFzZU9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICBzZXRQdXJjaGFzZUludm9pY2UobnVsbCk7XG4gICAgICAgICAgICAgIHNldFB1cmNoYXNlVHhpZCgnJyk7XG4gICAgICAgICAgICAgIHNldFB1cmNoYXNlRXJyb3IobnVsbCk7XG4gICAgICAgICAgICAgIHNldFB1cmNoYXNlZENvbnRlbnQobnVsbCk7XG4gICAgICAgICAgICAgIHNldFB1cmNoYXNlQnJpZGdlQnVzeShmYWxzZSk7XG4gICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAge3B1cmNoYXNlZENvbnRlbnQgPyAnQ2xvc2UnIDogJ0NhbmNlbCd9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIHshcHVyY2hhc2VkQ29udGVudCAmJiBwdXJjaGFzZUludm9pY2UgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgIGxvYWRpbmc9e3B1cmNoYXNlQnVzeX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IXB1cmNoYXNlVHhpZC50cmltKCkgfHwgcHVyY2hhc2VCdXN5IHx8IHB1cmNoYXNlQnJpZGdlQnVzeX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0eCA9IHB1cmNoYXNlVHhpZC50cmltKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoIXR4IHx8ICFpZCB8fCB0eXBlb2YgcHJvcHMub25DbGFpbVB1cmNoYXNlICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBzZXRQdXJjaGFzZUJ1c3kodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICBzZXRQdXJjaGFzZUVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHByb3BzLm9uQ2xhaW1QdXJjaGFzZShpZCwgdHgpKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuZG9jdW1lbnQpIHNldFB1cmNoYXNlZENvbnRlbnQocmVzLmRvY3VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIHNldFB1cmNoYXNlRXJyb3IoKHJlcyAmJiByZXMuZXJyb3IpIHx8ICdDbGFpbSBmYWlsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHNldFB1cmNoYXNlRXJyb3IoZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSkpXG4gICAgICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHNldFB1cmNoYXNlQnVzeShmYWxzZSkpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDbGFpbSAmIFVubG9ja1xuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9Nb2RhbC5BY3Rpb25zPlxuICAgICAgICA8L01vZGFsPlxuXG4gICAgICAgIHshZG9jICYmIGxvYWRFcnJvciAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmUgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5cbiAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5Db3VsZCBub3QgbG9hZCBkb2N1bWVudDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICA8cD57bG9hZEVycm9yfTwvcD5cbiAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL2RvY3VtZW50c1wiIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX0gYXJpYS1sYWJlbD1cIkJhY2sgdG8gZG9jdW1lbnRzIGxpc3RcIj5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICBEb2N1bWVudHNcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBtYXJnaW5MZWZ0OiAnMC41ZW0nIH19XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRMb2FkRXJyb3IobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vbkdldERvY3VtZW50ID09PSAnZnVuY3Rpb24nICYmIGlkKSBwcm9wcy5vbkdldERvY3VtZW50KGlkKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICBSZXRyeVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICApfVxuICAgICAgICB7IWRvYyAmJiAhbG9hZEVycm9yICYmIChcbiAgICAgICAgICA8U2VnbWVudFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgIHNlY29uZGFyeVxuICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJywgbWluSGVpZ2h0OiAnMjB2aCcsIGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxMb2FkZXIgYWN0aXZlIGlubGluZT1cImNlbnRlcmVkXCIgLz5cbiAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJywgdGV4dEFsaWduOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICBMb2FkaW5nIGRvY3VtZW504oCmXG4gICAgICAgICAgICAgICAgPEhlYWRlci5TdWJoZWFkZXI+XG4gICAgICAgICAgICAgICAgICBGZXRjaGluZyBkb2N1bWVudCBkZXRhaWxzIGZyb20gaHViLlxuICAgICAgICAgICAgICAgIDwvSGVhZGVyLlN1YmhlYWRlcj5cbiAgICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICl9XG5cbiAgICAgICAge2RvYyAmJiBpc0VuY3J5cHRlZCAmJiAhY29udGVudEJhc2U2NCAmJiAoXG4gICAgICAgICAgPFNlZ21lbnQgc2Vjb25kYXJ5IHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIj5Db250ZW50czwvSGVhZGVyPlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgICAge3Byb3BzLmhhc0RvY3VtZW50S2V5XG4gICAgICAgICAgICAgICAgPyAnRW5jcnlwdGVkLiBDbGljayBVbmxvY2sgYWJvdmUgdG8gZGVjcnlwdCBhbmQgdmlldy4nXG4gICAgICAgICAgICAgICAgOiAoXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICBFbmNyeXB0ZWQuIFVubG9jayB5b3VyIGlkZW50aXR5IHRvIHZpZXcgdGhpcyBkb2N1bWVudCAoXG4gICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzXCI+U2V0dGluZ3M8L0xpbms+IOKGkiA8c3Ryb25nPkZhYnJpYyBpZGVudGl0eTwvc3Ryb25nPiBvciB0aGUgdG9wLWJhciA8c3Ryb25nPkxvY2tlZDwvc3Ryb25nPiBjb250cm9sKS5cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICApfVxuXG4gICAgICAgIHtkb2MgJiYgaW1hZ2VTcmMgJiYgKFxuICAgICAgICAgIDxTZWdtZW50IHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIj5QcmV2aWV3PC9IZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHRleHRBbGlnbjogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBzcmM9e2ltYWdlU3JjfVxuICAgICAgICAgICAgICAgIGFsdD17bmFtZX1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXhXaWR0aDogJzEwMCUnLCBtYXhIZWlnaHQ6IDUyMCwgYm9yZGVyUmFkaXVzOiA2LCBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLDAsMCwwLjE1KScgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKX1cblxuICAgICAgICB7ZG9jICYmIHRleHQgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgPFNlZ21lbnQgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiPkNvbnRlbnRzPC9IZWFkZXI+XG4gICAgICAgICAgICB7c2hvd0dyYXBoUHJldmlldyA/IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8R3JhcGhEb2N1bWVudFByZXZpZXcgZG90U291cmNlPXt0ZXh0fSBoYXNEb2N1bWVudEtleT17cHJvcHMuaGFzRG9jdW1lbnRLZXl9IC8+XG4gICAgICAgICAgICAgICAgPGRldGFpbHMgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NXJlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8c3VtbWFyeSBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJywgY29sb3I6ICcjNTU1JyB9fT5ET1Qgc291cmNlPC9zdW1tYXJ5PlxuICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT17eyB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLCBiYWNrZ3JvdW5kOiAnI2Y3ZjdmNycsIHBhZGRpbmc6ICcwLjc1ZW0nLCBib3JkZXJSYWRpdXM6IDYsIG1heEhlaWdodDogMzIwLCBvdmVyZmxvdzogJ2F1dG8nLCBtYXJnaW5Ub3A6ICcwLjVyZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICB7dGV4dH1cbiAgICAgICAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgICAgICAgIDwvZGV0YWlscz5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8cHJlIHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsIGJhY2tncm91bmQ6ICcjZjdmN2Y3JywgcGFkZGluZzogJzAuNzVlbScsIGJvcmRlclJhZGl1czogNiwgbWF4SGVpZ2h0OiA1MjAsIG92ZXJmbG93OiAnYXV0bycgfX0+XG4gICAgICAgICAgICAgICAge3RleHR9XG4gICAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICl9XG5cbiAgICAgICAge2RvYyAmJiAhaW1hZ2VTcmMgJiYgdGV4dCA9PSBudWxsICYmIGNvbnRlbnRCYXNlNjQgJiYgKFxuICAgICAgICAgIDxTZWdtZW50IHNlY29uZGFyeSBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19PlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImgzXCI+Q29udGVudHM8L0hlYWRlcj5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgIEEgcHJldmlldyBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGZpbGUgdHlwZS4gVXNlIHRoZSBEb3dubG9hZCBidXR0b24gYWJvdmUgdG8gdmlldyBpdCB3aXRoIGEgbmF0aXZlIGFwcGxpY2F0aW9uLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKX1cbiAgICAgIDwvU2VnbWVudD5cbiAgICA8L2ZhYnJpYy1kb2N1bWVudC1kZXRhaWw+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRG9jdW1lbnREZXRhaWw7XG4iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yIiwiZSIsInQiLCJyIiwiU3ltYm9sIiwibiIsIml0ZXJhdG9yIiwibyIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJwcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibmV4dCIsInB1c2giLCJpc0FycmF5IiwiX3R5cGVvZiIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTGluayIsInVzZVBhcmFtcyIsInVzZUxvY2F0aW9uIiwidXNlTmF2aWdhdGUiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJDYXJkIiwiRGl2aWRlciIsIkhlYWRlciIsIkljb24iLCJMYWJlbCIsIkxpc3QiLCJMb2FkZXIiLCJNZXNzYWdlIiwiTW9kYWwiLCJJbnB1dCIsIlNlZ21lbnQiLCJGb3JtIiwiRHJvcGRvd24iLCJJbnZvaWNlIiwiR3JhcGhEb2N1bWVudFByZXZpZXciLCJfcmVxdWlyZTMiLCJmb3JtYXRTYXRzRGlzcGxheSIsIl9yZXF1aXJlNCIsImxvYWRVcHN0cmVhbVNldHRpbmdzIiwiZmV0Y2hUcmFuc2FjdGlvbkJ5SGFzaCIsInNlbmRCcmlkZ2VQYXltZW50IiwiX3JlcXVpcmU1IiwibG9hZEh1YlVpRmVhdHVyZUZsYWdzIiwic3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MiLCJfcmVxdWlyZTYiLCJoeWRyYXRlSHViTmV0d29ya1N0YXR1c1ZpYUh0dHAiLCJfcmVxdWlyZTciLCJjbGFzc2lmeUh1YkJyb3dzZXJJZGVudGl0eSIsImZhYnJpY0lkZW50aXR5TmVlZEZ1bGxLZXlQbGFpbiIsIl9yZXF1aXJlOCIsInJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIiLCJfcmVxdWlyZTkiLCJsb2FkU2VydmVyRmVhdHVyZUZsYWdzIiwiREVGQVVMVF9QVUJMSVNIX1BSSUNFX1NBVFMiLCJUWElEX0hFWF82NCIsInNob3J0SGV4SWQiLCJzIiwiU3RyaW5nIiwiY29uY2F0IiwicGlja0RvY3VtZW50RnJvbU1hcCIsImRvY3VtZW50cyIsInJhd0lkIiwiaWQiLCJ0cmltIiwibG93ZXIiLCJ0b0xvd2VyQ2FzZSIsIl9pIiwiX09iamVjdCR2YWx1ZXMiLCJ2YWx1ZXMiLCJkaWQiLCJzaGEiLCJzaGEyNTYiLCJmYWJyaWNUY3BQZWVyc0Zyb21OZXR3b3JrU3RhdHVzIiwibnMiLCJwZWVycyIsImZpbHRlciIsInBpZCIsImFkZHJlc3MiLCJoYXNXZWJSVENNZXRhZGF0YSIsIm1ldGFkYXRhIiwiY2FwYWJpbGl0aWVzIiwic3RhcnRzV2l0aCIsInN0YXR1cyIsImdldEFkbWluVG9rZW5Gcm9tUHJvcHMiLCJwcm9wcyIsImFkbWluVG9rZW4iLCJEb2N1bWVudERldGFpbCIsIl9wcm9wcyRicmlkZ2VSZWYiLCJfcHJvcHMkYnJpZGdlUmVmMiIsIl9yZWY1IiwiX3Byb3BzJGJyaWRnZVJlZjMiLCJfcHJvcHMkYnJpZGdlUmVmNCIsInBhcmFtcyIsImxvY2F0aW9uIiwibmF2aWdhdGUiLCJlbmNvZGVkUGFyYW0iLCJoYXNoIiwicmVwbGFjZSIsImRlY29kZVVSSUNvbXBvbmVudCIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsImRvYyIsInNldERvYyIsIl9SZWFjdCR1c2VTdGF0ZTMiLCJfUmVhY3QkdXNlU3RhdGU0IiwiZGVjcnlwdGVkQ29udGVudCIsInNldERlY3J5cHRlZENvbnRlbnQiLCJfUmVhY3QkdXNlU3RhdGU1IiwiX1JlYWN0JHVzZVN0YXRlNiIsInVubG9ja2VkIiwic2V0VW5sb2NrZWQiLCJfUmVhY3QkdXNlU3RhdGU3IiwiX1JlYWN0JHVzZVN0YXRlOCIsImF1dG9UcmllZERlY3J5cHQiLCJzZXRBdXRvVHJpZWREZWNyeXB0IiwiX1JlYWN0JHVzZVN0YXRlOSIsIl9SZWFjdCR1c2VTdGF0ZTAiLCJzaGFyZU9wZW4iLCJzZXRTaGFyZU9wZW4iLCJfUmVhY3QkdXNlU3RhdGUxIiwiX1JlYWN0JHVzZVN0YXRlMTAiLCJpc1B1Ymxpc2hpbmciLCJzZXRJc1B1Ymxpc2hpbmciLCJfUmVhY3QkdXNlU3RhdGUxMSIsIl9SZWFjdCR1c2VTdGF0ZTEyIiwicHVibGlzaEVycm9yIiwic2V0UHVibGlzaEVycm9yIiwiX1JlYWN0JHVzZVN0YXRlMTMiLCJfUmVhY3QkdXNlU3RhdGUxNCIsImRpc3RyaWJ1dGVPcGVuIiwic2V0RGlzdHJpYnV0ZU9wZW4iLCJfUmVhY3QkdXNlU3RhdGUxNSIsIl9SZWFjdCR1c2VTdGF0ZTE2IiwiZGlzdHJpYnV0ZUJ1c3kiLCJzZXREaXN0cmlidXRlQnVzeSIsIl9SZWFjdCR1c2VTdGF0ZTE3IiwiX1JlYWN0JHVzZVN0YXRlMTgiLCJkaXN0cmlidXRlQW1vdW50U2F0cyIsInNldERpc3RyaWJ1dGVBbW91bnRTYXRzIiwiX1JlYWN0JHVzZVN0YXRlMTkiLCJfUmVhY3QkdXNlU3RhdGUyMCIsImRpc3RyaWJ1dGVEZXNpcmVkQ29waWVzIiwic2V0RGlzdHJpYnV0ZURlc2lyZWRDb3BpZXMiLCJfUmVhY3QkdXNlU3RhdGUyMSIsIl9SZWFjdCR1c2VTdGF0ZTIyIiwiZGlzdHJpYnV0ZUR1cmF0aW9uWWVhcnMiLCJzZXREaXN0cmlidXRlRHVyYXRpb25ZZWFycyIsIl9SZWFjdCR1c2VTdGF0ZTIzIiwiX1JlYWN0JHVzZVN0YXRlMjQiLCJkaXN0cmlidXRlQ2FkZW5jZSIsInNldERpc3RyaWJ1dGVDYWRlbmNlIiwiX1JlYWN0JHVzZVN0YXRlMjUiLCJfUmVhY3QkdXNlU3RhdGUyNiIsImRpc3RyaWJ1dGVEZWFkbGluZSIsInNldERpc3RyaWJ1dGVEZWFkbGluZSIsIl9SZWFjdCR1c2VTdGF0ZTI3IiwiX1JlYWN0JHVzZVN0YXRlMjgiLCJkaXN0cmlidXRlRXJyb3IiLCJzZXREaXN0cmlidXRlRXJyb3IiLCJfUmVhY3QkdXNlU3RhdGUyOSIsIl9SZWFjdCR1c2VTdGF0ZTMwIiwiZGlzdHJpYnV0ZUludm9pY2UiLCJzZXREaXN0cmlidXRlSW52b2ljZSIsIl9SZWFjdCR1c2VTdGF0ZTMxIiwiX1JlYWN0JHVzZVN0YXRlMzIiLCJkaXN0cmlidXRlVHhpZCIsInNldERpc3RyaWJ1dGVUeGlkIiwiX1JlYWN0JHVzZVN0YXRlMzMiLCJfUmVhY3QkdXNlU3RhdGUzNCIsImRpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZCIsInNldERpc3RyaWJ1dGVTdWNjZXNzQ29udHJhY3RJZCIsIl9SZWFjdCR1c2VTdGF0ZTM1IiwiX1JlYWN0JHVzZVN0YXRlMzYiLCJkaXN0cmlidXRlVHhDaGFpbiIsInNldERpc3RyaWJ1dGVUeENoYWluIiwiX1JlYWN0JHVzZVN0YXRlMzciLCJfUmVhY3QkdXNlU3RhdGUzOCIsImRpc3RyaWJ1dGVCcmlkZ2VCdXN5Iiwic2V0RGlzdHJpYnV0ZUJyaWRnZUJ1c3kiLCJfUmVhY3QkdXNlU3RhdGUzOSIsIl9SZWFjdCR1c2VTdGF0ZTQwIiwicGVlck9mZmVyS2V5Iiwic2V0UGVlck9mZmVyS2V5IiwiX1JlYWN0JHVzZVN0YXRlNDEiLCJfUmVhY3QkdXNlU3RhdGU0MiIsInBlZXJPZmZlckJ1c3kiLCJzZXRQZWVyT2ZmZXJCdXN5IiwiX1JlYWN0JHVzZVN0YXRlNDMiLCJfUmVhY3QkdXNlU3RhdGU0NCIsInBlZXJPZmZlckVycm9yIiwic2V0UGVlck9mZmVyRXJyb3IiLCJfUmVhY3QkdXNlU3RhdGU0NSIsIl9SZWFjdCR1c2VTdGF0ZTQ2IiwicGVlck9mZmVyU3VjY2VzcyIsInNldFBlZXJPZmZlclN1Y2Nlc3MiLCJfUmVhY3QkdXNlU3RhdGU0NyIsIl9SZWFjdCR1c2VTdGF0ZTQ4IiwicGVlckxpc3RUaWNrIiwic2V0UGVlckxpc3RUaWNrIiwiX1JlYWN0JHVzZVN0YXRlNDkiLCJfUmVhY3QkdXNlU3RhdGU1MCIsInB1Ymxpc2hQcmljZVNhdHMiLCJzZXRQdWJsaXNoUHJpY2VTYXRzIiwiX1JlYWN0JHVzZVN0YXRlNTEiLCJfUmVhY3QkdXNlU3RhdGU1MiIsInB1cmNoYXNlT3BlbiIsInNldFB1cmNoYXNlT3BlbiIsIl9SZWFjdCR1c2VTdGF0ZTUzIiwiX1JlYWN0JHVzZVN0YXRlNTQiLCJwdXJjaGFzZUludm9pY2UiLCJzZXRQdXJjaGFzZUludm9pY2UiLCJfUmVhY3QkdXNlU3RhdGU1NSIsIl9SZWFjdCR1c2VTdGF0ZTU2IiwicHVyY2hhc2VUeGlkIiwic2V0UHVyY2hhc2VUeGlkIiwiX1JlYWN0JHVzZVN0YXRlNTciLCJfUmVhY3QkdXNlU3RhdGU1OCIsInB1cmNoYXNlQnVzeSIsInNldFB1cmNoYXNlQnVzeSIsIl9SZWFjdCR1c2VTdGF0ZTU5IiwiX1JlYWN0JHVzZVN0YXRlNjAiLCJwdXJjaGFzZUJyaWRnZUJ1c3kiLCJzZXRQdXJjaGFzZUJyaWRnZUJ1c3kiLCJfUmVhY3QkdXNlU3RhdGU2MSIsIl9SZWFjdCR1c2VTdGF0ZTYyIiwicHVyY2hhc2VFcnJvciIsInNldFB1cmNoYXNlRXJyb3IiLCJfUmVhY3QkdXNlU3RhdGU2MyIsIl9SZWFjdCR1c2VTdGF0ZTY0IiwicHVyY2hhc2VkQ29udGVudCIsInNldFB1cmNoYXNlZENvbnRlbnQiLCJfUmVhY3QkdXNlU3RhdGU2NSIsIl9SZWFjdCR1c2VTdGF0ZTY2IiwiY29udHJhY3RQYXlUeCIsInNldENvbnRyYWN0UGF5VHgiLCJfUmVhY3QkdXNlU3RhdGU2NyIsIl9SZWFjdCR1c2VTdGF0ZTY4IiwiaHRsY1ByZWltYWdlSGV4Iiwic2V0SHRsY1ByZWltYWdlSGV4IiwiX1JlYWN0JHVzZVN0YXRlNjkiLCJfUmVhY3QkdXNlU3RhdGU3MCIsImh0bGNVbmxvY2tCdXN5Iiwic2V0SHRsY1VubG9ja0J1c3kiLCJfUmVhY3QkdXNlU3RhdGU3MSIsIl9SZWFjdCR1c2VTdGF0ZTcyIiwiaHRsY1VubG9ja0Vycm9yIiwic2V0SHRsY1VubG9ja0Vycm9yIiwiX1JlYWN0JHVzZVN0YXRlNzMiLCJfUmVhY3QkdXNlU3RhdGU3NCIsInRvbWJzdG9uZU9wZW4iLCJzZXRUb21ic3RvbmVPcGVuIiwiX1JlYWN0JHVzZVN0YXRlNzUiLCJfUmVhY3QkdXNlU3RhdGU3NiIsInRvbWJzdG9uZUJ1c3kiLCJzZXRUb21ic3RvbmVCdXN5IiwiX1JlYWN0JHVzZVN0YXRlNzciLCJfUmVhY3QkdXNlU3RhdGU3OCIsInRvbWJzdG9uZUVycm9yIiwic2V0VG9tYnN0b25lRXJyb3IiLCJfUmVhY3QkdXNlU3RhdGU3OSIsIl9SZWFjdCR1c2VTdGF0ZTgwIiwibG9hZEVycm9yIiwic2V0TG9hZEVycm9yIiwiX1JlYWN0JHVzZVN0YXRlODEiLCJfUmVhY3QkdXNlU3RhdGU4MiIsImh1YlVpVGljayIsInNldEh1YlVpVGljayIsIl9SZWFjdCR1c2VTdGF0ZTgzIiwiX1JlYWN0JHVzZVN0YXRlODQiLCJ1cHN0cmVhbVJldiIsInNldFVwc3RyZWFtUmV2IiwidXNlRWZmZWN0IiwidWYiLCJ1cHN0cmVhbVNldHRpbmdzIiwidXNlTWVtbyIsImJ1bXAiLCJ3aW5kb3ciLCJ1bmRlZmluZWQiLCJhZGRFdmVudExpc3RlbmVyIiwib25TdG9yYWdlIiwiZXYiLCJrZXkiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25HZXREb2N1bWVudCIsImNhbmNlbGxlZCIsInF1ZXVlTWljcm90YXNrIiwidGltZXIiLCJzZXRUaW1lb3V0IiwiYnJpZGdlIiwiYnJpZGdlUmVmIiwiY3VycmVudCIsImdzIiwiZ2V0R2xvYmFsU3RhdGUiLCJvcmlnaW4iLCJtZXJnZUdldERvY3VtZW50UnBjUmVzdWx0IiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJqc29ucnBjIiwiRGF0ZSIsIm5vdyIsIl9yZWYiLCJfY2FsbGVlIiwiX3QiLCJfY29udGV4dCIsImpzb24iLCJvayIsIl94IiwiX3JlZjIiLCJmYWlsIiwibWVzc2FnZSIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50SWQiLCJlcnJvciIsImVyciIsIm1zZyIsImRhdGEiLCJyZXN1bHQiLCJhcHBsaWVkIiwidHlwZSIsImNsZWFyVGltZW91dCIsImhhbmRsZXIiLCJkb2NJZCIsIm1hdGNoIiwicHJldiIsImh0bGNQZW5kaW5nRGVjcnlwdCIsImFtb3VudFNhdHMiLCJjb25maWciLCJuZXR3b3JrIiwiYmFja2VuZElkIiwibWVyZ2VDcmVhdGVEaXN0cmlidXRlSW52b2ljZVJwY1Jlc3VsdCIsImFtb3VudCIsInBhcnNlSW50IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJkZXNpcmVkQ29waWVzIiwiTWF0aCIsIm1heCIsImR1cmF0aW9uWWVhcnMiLCJjaGFsbGVuZ2VDYWRlbmNlIiwicmVzcG9uc2VEZWFkbGluZSIsImNvbnRyYWN0SWQiLCJ0aW1lb3V0IiwicHJvcG9zYWxJZCIsImNvbnRlbnRIYXNoIiwiZXZlbnQiLCJnbG9iYWxTdGF0ZSIsImNhbmRpZGF0ZSIsInB1Ymxpc2hlZCIsIl9icmlkZ2UkbmV0d29ya1N0YXR1cyIsIl9icmlkZ2UkbGFzdE5ldHdvcmtTdCIsInB1Ymxpc2hlZERvY3MiLCJuZXR3b3JrU3RhdHVzIiwicHVibGlzaGVkRG9jdW1lbnRzIiwibGFzdE5ldHdvcmtTdGF0dXMiLCJwdWIiLCJfY2FsbGVlMiIsIl90MiIsIl90MyIsIl9jb250ZXh0MiIsImhhbmRsZVVubG9jayIsInVzZUNhbGxiYWNrIiwiaGFzRG9jdW1lbnRLZXkiLCJvblJlcXVlc3RVbmxvY2siLCJyYXciLCJjb250ZW50QmFzZTY0Iiwib25HZXREZWNyeXB0ZWRDb250ZW50IiwiaGFuZGxlSHRsY1ByZWltYWdlVW5sb2NrIiwiX2NhbGxlZTMiLCJfdDQiLCJfY29udGV4dDMiLCJvblVubG9ja0h0bGNEb2N1bWVudCIsImlzRW5jcnlwdGVkIiwiY29udGVudEVuY3J5cHRlZCIsImlzSHRsY1BlbmRpbmdEZWNyeXB0IiwibWltZSIsImNyZWF0ZWQiLCJ0b0xvY2FsZVN0cmluZyIsImlzUHVibGlzaGVkSW5TdG9yZSIsInB1Ymxpc2hlZFRzIiwicHVibGlzaGVkQXQiLCJzdG9yYWdlQ29udHJhY3RJZCIsImRvY1B1cmNoYXNlUHJpY2VTYXRzIiwicHVyY2hhc2VQcmljZVNhdHMiLCJjYW5QdXJjaGFzZSIsIm5lZWRzSWRlbnRpdHlLZXlGb3JFbmNyeXB0ZWRCb2R5IiwiZmFicmljUGVlcklkIiwiYnJpZGdlRm9yV2lyZSIsInNlcnZlckZsYWdzIiwiZGlzdHJpYnV0ZUVuYWJsZWQiLCJkaXN0cmlidXRlIiwiZG9jdW1lbnRQdXJjaGFzZUVuYWJsZWQiLCJkb2N1bWVudFB1cmNoYXNlIiwiZGlzdHJpYnV0ZU1vZGFsTm9Mb2NhbFdpcmUiLCJoYXNMb2NhbFdpcmVTaWduaW5nS2V5IiwibmVlZHNJZGVudGl0eVVubG9jayIsImF1dGhvckRvY0lkIiwibGluZWFnZSIsImZhYnJpY1BlZXJzRm9yT2ZmZXIiLCJjdXIiLCJmYWJyaWNQZWVyRHJvcGRvd25PcHRpb25zIiwibWFwIiwiYWRkciIsInRleHQiLCJhZG1pblRva2VuUmVzb2x2ZWQiLCJjYW5BZG1pblVucHVibGlzaCIsImhhbmRsZUNvbmZpcm1Ub21ic3RvbmUiLCJfY2FsbGVlNCIsInRva2VuIiwiY2Fub25pY2FsRG9jSWQiLCJyZWZyZXNoIiwiX3Q1IiwiX2NvbnRleHQ0IiwiZW1pdFRvbWJzdG9uZSIsInNlbmROZXR3b3JrU3RhdHVzUmVxdWVzdCIsInJhd0NvbnRlbnRCYXNlNjQiLCJkb3dubG9hZEhyZWYiLCJsb29rc1RleHQiLCJsb29rc0ltYWdlIiwiYXRvYiIsInNob3dHcmFwaFByZXZpZXciLCJsb29rc0xpa2VEb3RTb3VyY2UiLCJpbWFnZVNyYyIsImNpZCIsImxvYWRpbmciLCJfY2FsbGVlNSIsInJlcyIsInR4aWQiLCJfdDYiLCJfY29udGV4dDUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjb250cmFjdCIsInR4IiwidGljayIsIl9yZWY4IiwiX2NhbGxlZTYiLCJfdDciLCJfY29udGV4dDYiLCJpdiIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsInNoYXJlVXJsSGFzaCIsInNoYXJlVXJsQ2Fub25pY2FsIiwiY2FkZW5jZU9wdGlvbnMiLCJkZWFkbGluZU9wdGlvbnMiLCJodWJBZG1pblRva2VuUHJlc2VudCIsImhhbmRsZVBheURpc3RyaWJ1dGVGcm9tQnJpZGdlIiwiX2NhbGxlZTciLCJ0byIsIl9kaXN0cmlidXRlSW52b2ljZSRjbyIsIl9kaXN0cmlidXRlSW52b2ljZSRjbzIiLCJfZGlzdHJpYnV0ZUludm9pY2UkY28zIiwiX3Q4IiwiX2NvbnRleHQ3IiwiaWRlbnRpdHkiLCJyb3VuZCIsIm1lbW8iLCJwYXltZW50IiwiRXJyb3IiLCJvbkRpc3RyaWJ1dGVEb2N1bWVudCIsImhhbmRsZVBheVB1cmNoYXNlRnJvbUJyaWRnZSIsIl9jYWxsZWU4Iiwib3V0IiwiX3Q5IiwiX2NvbnRleHQ4Iiwib25DbGFpbVB1cmNoYXNlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImdhcCIsImZsZXhXcmFwIiwibWFyZ2luQm90dG9tIiwicm9sZSIsImJhc2ljIiwic2l6ZSIsImFzIiwibWFyZ2luIiwiZmxleCIsIkNvbnRlbnQiLCJ3b3JkQnJlYWsiLCJjb2xvciIsInRpdGxlIiwic291cmNlIiwiY3Vyc29yIiwib25DbGljayIsImluZm8iLCJGcmFnbWVudCIsInJlbGF4ZWQiLCJJdGVtIiwidmVydGljYWxBbGlnbiIsIkRlc2NyaXB0aW9uIiwidGV4dERlY29yYXRpb24iLCJ0YWJJbmRleCIsIm9uS2V5RG93biIsIm1hcmdpblRvcCIsImZvbnRTaXplIiwiYmxvY2toYXNoIiwiY29uZmlybWF0aW9ucyIsImJpdGNvaW5FeHBsb3JlciIsIm9mZmVycyIsImNvc3RCYXNpc1NhdHMiLCJkaXZpZGVkIiwib2ZmZXIiLCJpZHgiLCJwZWVyUHVia2V5IiwicGVlckFkZHJlc3MiLCJ3aG8iLCJsb2NhbCIsInBlZXJBbGlhcyIsInNhdHMiLCJtYXJnaW5MZWZ0IiwiZmx1aWQiLCJNZXRhIiwicGFkZGluZyIsImh0bGNQYXltZW50SGFzaEhleCIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJ0YXJnZXQiLCJwcmltYXJ5IiwiZGlzYWJsZWQiLCJpZE1vZGUiLCJoZWFkZXIiLCJleHRyYSIsImljb24iLCJsYWJlbFBvc2l0aW9uIiwib25QdWJsaXNoRG9jdW1lbnQiLCJwcmljZSIsIm1pbiIsIndpZHRoIiwib25SZXF1ZXN0UHVyY2hhc2VJbnZvaWNlIiwiaHJlZiIsImRvd25sb2FkIiwibmVnYXRpdmUiLCJvbkRpc21pc3MiLCJvcGVuIiwib25DbG9zZSIsImNvbnRlbnQiLCJyZWFkT25seSIsIm9uRm9jdXMiLCJzZWxlY3QiLCJhY3Rpb24iLCJuYXZpZ2F0b3IiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJBY3Rpb25zIiwid2FybmluZyIsInRleHRBbGlnbiIsIm9uU3VibWl0IiwicHJldmVudERlZmF1bHQiLCJvblJlcXVlc3REaXN0cmlidXRlSW52b2ljZSIsIkZpZWxkIiwibGFiZWwiLCJzZWxlY3Rpb24iLCJvcHRpb25zIiwiXyIsInNlY3Rpb24iLCJzZWFyY2giLCJfcmVmMSIsIm9uU2VuZERpc3RyaWJ1dGVQcm9wb3NhbCIsImFjdG9ySWQiLCJkb2N1bWVudE5hbWUiLCJwb3NpdGl2ZSIsImNvbXBhY3QiLCJyZXF1aXJlVW5sb2NrZWRJZGVudGl0eUZvckh1YlBheSIsImlkZW50aXR5VW5sb2NrZWQiLCJvblBhaWQiLCJfZGlzdHJpYnV0ZUludm9pY2UkY280IiwiX2Rpc3RyaWJ1dGVJbnZvaWNlJGNvNSIsIl9kaXN0cmlidXRlSW52b2ljZSRjbzYiLCJtYXhXaWR0aCIsImZvcm0iLCJfZGlzdHJpYnV0ZUludm9pY2UkY283IiwiX2Rpc3RyaWJ1dGVJbnZvaWNlJGNvOCIsIl9kaXN0cmlidXRlSW52b2ljZSRjbzkiLCJiaXRjb2luUmVzb3VyY2VzIiwic2Vjb25kYXJ5IiwibWluSGVpZ2h0IiwianVzdGlmeUNvbnRlbnQiLCJhY3RpdmUiLCJpbmxpbmUiLCJTdWJoZWFkZXIiLCJzcmMiLCJhbHQiLCJtYXhIZWlnaHQiLCJib3JkZXJSYWRpdXMiLCJib3hTaGFkb3ciLCJkb3RTb3VyY2UiLCJ3aGl0ZVNwYWNlIiwiYmFja2dyb3VuZCIsIm92ZXJmbG93IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/DocumentView.js\n\n}')},"./components/FaucetHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Input = _require2.Input,\n Message = _require2.Message,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n fetchBitcoinStatus = _require3.fetchBitcoinStatus,\n fetchReceiveAddress = _require3.fetchReceiveAddress,\n fetchUTXOs = _require3.fetchUTXOs,\n getNextReceiveWalletContext = _require3.getNextReceiveWalletContext,\n loadUpstreamSettings = _require3.loadUpstreamSettings,\n _requestFaucet = _require3.requestFaucet,\n clearBalanceCache = _require3.clearBalanceCache;\nvar _require4 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require4.readHubAdminTokenFromBrowser;\nvar _require5 = __webpack_require__(/*! ../functions/bitcoinSpendBounds */ "./functions/bitcoinSpendBounds.js"),\n computeHubWalletSpendHints = _require5.computeHubWalletSpendHints;\nvar _require6 = __webpack_require__(/*! ../functions/fundLocalKeyFromHubFaucet */ "./functions/fundLocalKeyFromHubFaucet.js"),\n fundLocalKeyFromHubFaucet = _require6.fundLocalKeyFromHubFaucet;\nvar _require7 = __webpack_require__(/*! ../constants */ "./constants.js"),\n SATS_PER_BTC = _require7.SATS_PER_BTC;\nfunction hubWalletSatsFromDetail(detail) {\n if (!detail || _typeof(detail) !== \'object\' || !detail.available) return null;\n if (detail.balanceSats != null && Number.isFinite(Number(detail.balanceSats))) {\n return Math.round(Number(detail.balanceSats));\n }\n var b = Number(detail.balance != null ? detail.balance : NaN);\n if (Number.isFinite(b)) return Math.round(b * SATS_PER_BTC);\n return 0;\n}\nvar FaucetHome = /*#__PURE__*/function (_React$Component) {\n function FaucetHome(props) {\n var _this;\n _classCallCheck(this, FaucetHome);\n _this = _callSuper(this, FaucetHome, [props]);\n _this.state = {\n loading: false,\n resolvingAddress: false,\n upstream: loadUpstreamSettings(),\n sendTo: \'\',\n amountSats: \'10000\',\n faucetResult: null,\n faucetNotice: \'\',\n faucetLastStatus: null,\n hubBitcoinDetail: null,\n hubBitcoinLoading: false,\n hubBitcoinError: null,\n hubWalletUtxos: null,\n hubUtxosError: null,\n fundMyBusy: false\n };\n return _this;\n }\n _inherits(FaucetHome, _React$Component);\n return _createClass(FaucetHome, [{\n key: "componentDidMount",\n value: function componentDidMount() {\n void this.refreshHubWalletStatus();\n }\n }, {\n key: "fundMyWallet",\n value: function () {\n var _fundMyWallet = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var _this2 = this;\n var identity, hubDetail, network, amountSats, funded, message, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n identity = this.props && this.props.identity || {};\n if (identity.xpub) {\n _context.n = 1;\n break;\n }\n this.setState({\n faucetResult: {\n error: \'Unlock or create a local identity first (Identity panel).\'\n },\n faucetNotice: \'\'\n });\n return _context.a(2);\n case 1:\n hubDetail = this.state.hubBitcoinDetail;\n network = hubDetail && hubDetail.network ? String(hubDetail.network).toLowerCase() : this.props && this.props.bitcoin && this.props.bitcoin.network ? String(this.props.bitcoin.network).toLowerCase() : \'regtest\';\n if (!(network !== \'regtest\')) {\n _context.n = 2;\n break;\n }\n this.setState({\n faucetResult: {\n error: \'Faucet is regtest-only.\'\n },\n faucetNotice: \'\'\n });\n return _context.a(2);\n case 2:\n amountSats = Math.round(Number(this.state.amountSats || 10000));\n this.setState({\n fundMyBusy: true,\n loading: true,\n faucetResult: null,\n faucetNotice: \'Funding your local receive address from the Hub faucet…\'\n });\n _context.p = 3;\n _context.n = 4;\n return fundLocalKeyFromHubFaucet({\n identity: identity,\n adminToken: this.props && this.props.adminToken,\n amountSats: Number.isFinite(amountSats) && amountSats > 0 ? amountSats : 10000,\n network: network,\n mineConfirm: true\n });\n case 4:\n funded = _context.v;\n this.setState({\n fundMyBusy: false,\n loading: false,\n sendTo: funded.address,\n faucetResult: {\n ok: true,\n address: funded.address,\n amountSats: funded.amountSats,\n txid: funded.txid,\n mined: funded.mined\n },\n faucetNotice: funded.mined && funded.mined.error ? "Faucet sent ".concat(funded.amountSats, " sats to your local key. Confirm with Generate block (admin) if the top-bar balance is still zero.") : "Funded your local key with ".concat(funded.amountSats.toLocaleString(), " sats") + (funded.txid ? " (".concat(funded.txid.slice(0, 12), "\\u2026)") : \'\') + (funded.mined && !funded.mined.error ? \' and mined a confirmation.\' : \'.\'),\n faucetLastStatus: {\n ok: true,\n when: Date.now(),\n address: funded.address,\n amountSats: funded.amountSats,\n txid: funded.txid || \'\',\n error: \'\'\n }\n }, function () {\n void _this2.refreshHubWalletStatus();\n });\n _context.n = 6;\n break;\n case 5:\n _context.p = 5;\n _t = _context.v;\n message = _t && _t.message ? _t.message : String(_t);\n this.setState({\n fundMyBusy: false,\n loading: false,\n faucetResult: {\n error: message\n },\n faucetNotice: \'\',\n faucetLastStatus: {\n ok: false,\n when: Date.now(),\n address: String(this.state.sendTo || \'\'),\n amountSats: amountSats,\n txid: \'\',\n error: message\n }\n });\n case 6:\n return _context.a(2);\n }\n }, _callee, this, [[3, 5]]);\n }));\n function fundMyWallet() {\n return _fundMyWallet.apply(this, arguments);\n }\n return fundMyWallet;\n }()\n }, {\n key: "refreshHubWalletStatus",\n value: function () {\n var _refreshHubWalletStatus = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var upstream, detail, d, hubWalletUtxos, hubUtxosError, list, _t2, _t3;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n upstream = _objectSpread(_objectSpread({}, loadUpstreamSettings()), {}, {\n hubAdminToken: readHubAdminTokenFromBrowser(this.props && this.props.adminToken) || \'\'\n });\n this.setState({\n hubBitcoinLoading: true,\n hubBitcoinError: null,\n upstream: upstream\n });\n _context2.p = 1;\n _context2.n = 2;\n return fetchBitcoinStatus(upstream);\n case 2:\n detail = _context2.v;\n d = detail && _typeof(detail) === \'object\' ? detail : null;\n hubWalletUtxos = [];\n hubUtxosError = null;\n if (!(d && d.available && d.walletName)) {\n _context2.n = 6;\n break;\n }\n _context2.p = 3;\n _context2.n = 4;\n return fetchUTXOs(upstream, {\n walletId: String(d.walletName)\n }, {});\n case 4:\n list = _context2.v;\n hubWalletUtxos = Array.isArray(list) ? list : [];\n _context2.n = 6;\n break;\n case 5:\n _context2.p = 5;\n _t2 = _context2.v;\n hubUtxosError = _t2 && _t2.message ? _t2.message : String(_t2);\n hubWalletUtxos = [];\n case 6:\n this.setState({\n hubBitcoinLoading: false,\n hubBitcoinDetail: d,\n hubBitcoinError: null,\n hubWalletUtxos: hubWalletUtxos,\n hubUtxosError: hubUtxosError\n });\n _context2.n = 8;\n break;\n case 7:\n _context2.p = 7;\n _t3 = _context2.v;\n this.setState({\n hubBitcoinLoading: false,\n hubBitcoinDetail: null,\n hubBitcoinError: _t3 && _t3.message ? _t3.message : String(_t3),\n hubWalletUtxos: [],\n hubUtxosError: null\n });\n case 8:\n return _context2.a(2);\n }\n }, _callee2, this, [[3, 5], [1, 7]]);\n }));\n function refreshHubWalletStatus() {\n return _refreshHubWalletStatus.apply(this, arguments);\n }\n return refreshHubWalletStatus;\n }()\n }, {\n key: "useMyAddress",\n value: function () {\n var _useMyAddress = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var identity, wallet, network, address, _t4;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n this.setState({\n resolvingAddress: true\n });\n _context3.p = 1;\n identity = this.props && this.props.identity || {};\n wallet = getNextReceiveWalletContext(identity);\n network = this.props && this.props.bitcoin && this.props.bitcoin.network ? String(this.props.bitcoin.network).toLowerCase() : \'regtest\';\n _context3.n = 2;\n return fetchReceiveAddress(this.state.upstream, wallet, {\n network: network,\n identity: identity\n });\n case 2:\n address = _context3.v;\n this.setState({\n sendTo: String(address || \'\'),\n resolvingAddress: false\n });\n _context3.n = 4;\n break;\n case 3:\n _context3.p = 3;\n _t4 = _context3.v;\n this.setState({\n resolvingAddress: false,\n faucetResult: {\n error: _t4 && _t4.message ? _t4.message : String(_t4)\n }\n });\n case 4:\n return _context3.a(2);\n }\n }, _callee3, this, [[1, 3]]);\n }));\n function useMyAddress() {\n return _useMyAddress.apply(this, arguments);\n }\n return useMyAddress;\n }()\n }, {\n key: "requestFaucet",\n value: function () {\n var _requestFaucet2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var _this3 = this;\n var address, amountSats, hubDetail, hubSatsPre, utxoList, netPre, hintsPre, result, normalized, hasExplicitError, txid, faucetResult, txidText, message, _t5;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n address = String(this.state.sendTo || \'\').trim();\n amountSats = Math.round(Number(this.state.amountSats || 0));\n if (!this.state.resolvingAddress) {\n _context4.n = 1;\n break;\n }\n this.setState({\n faucetResult: {\n error: \'Still resolving your receive address. Please wait a moment and try again.\'\n },\n faucetNotice: \'\',\n faucetLastStatus: {\n ok: false,\n when: Date.now(),\n address: \'\',\n amountSats: null,\n txid: \'\',\n error: \'Still resolving your receive address. Please wait a moment and try again.\'\n }\n });\n return _context4.a(2);\n case 1:\n if (address) {\n _context4.n = 2;\n break;\n }\n this.setState({\n faucetResult: {\n error: \'Recipient address is required.\'\n },\n faucetNotice: \'\',\n faucetLastStatus: {\n ok: false,\n when: Date.now(),\n address: \'\',\n amountSats: null,\n txid: \'\',\n error: \'Recipient address is required.\'\n }\n });\n return _context4.a(2);\n case 2:\n if (!(!Number.isFinite(amountSats) || amountSats <= 0)) {\n _context4.n = 3;\n break;\n }\n this.setState({\n faucetResult: {\n error: \'Amount (sats) must be greater than zero.\'\n },\n faucetNotice: \'\',\n faucetLastStatus: {\n ok: false,\n when: Date.now(),\n address: address,\n amountSats: amountSats,\n txid: \'\',\n error: \'Amount (sats) must be greater than zero.\'\n }\n });\n return _context4.a(2);\n case 3:\n hubDetail = this.state.hubBitcoinDetail;\n hubSatsPre = hubWalletSatsFromDetail(hubDetail);\n utxoList = Array.isArray(this.state.hubWalletUtxos) ? this.state.hubWalletUtxos : [];\n netPre = hubDetail && hubDetail.network ? String(hubDetail.network).toLowerCase() : \'regtest\';\n hintsPre = computeHubWalletSpendHints({\n balanceSats: hubSatsPre != null ? hubSatsPre : 0,\n utxos: utxoList,\n mempoolInfo: hubDetail && hubDetail.mempoolInfo,\n network: netPre,\n faucetCapSats: 1000000,\n targetAmountSats: amountSats\n });\n if (!(amountSats < hintsPre.minRecipientSats)) {\n _context4.n = 4;\n break;\n }\n this.setState({\n faucetResult: {\n error: "Amount is below the typical dust floor (".concat(hintsPre.minRecipientSats, " sats). Use at least that many sats so the output is relayable.")\n },\n faucetNotice: \'\',\n faucetLastStatus: {\n ok: false,\n when: Date.now(),\n address: address,\n amountSats: amountSats,\n txid: \'\',\n error: "Below dust floor (".concat(hintsPre.minRecipientSats, " sats).")\n }\n });\n return _context4.a(2);\n case 4:\n if (!(hintsPre.canPayTarget === false)) {\n _context4.n = 5;\n break;\n }\n this.setState({\n faucetResult: {\n error: \'This amount plus fees cannot be covered by the hub UTXO set (fragmentation or fee market). Try a smaller amount, Use max affordable, or consolidate the hub wallet on the node.\'\n },\n faucetNotice: \'\',\n faucetLastStatus: {\n ok: false,\n when: Date.now(),\n address: address,\n amountSats: amountSats,\n txid: \'\',\n error: \'UTXO / fee simulation: cannot pay this amount.\'\n }\n });\n return _context4.a(2);\n case 5:\n this.setState({\n loading: true,\n faucetResult: null,\n faucetNotice: "Submitting faucet request for ".concat(amountSats, " sats...")\n });\n _context4.p = 6;\n _context4.n = 7;\n return _requestFaucet(this.state.upstream || loadUpstreamSettings(), {\n address: address,\n amountSats: amountSats\n });\n case 7:\n result = _context4.v;\n normalized = result && _typeof(result) === \'object\' ? result : {};\n hasExplicitError = !!normalized.error;\n txid = normalized.txid || normalized.transactionId || normalized.id;\n faucetResult = hasExplicitError ? {\n error: String(normalized.error)\n } : {\n ok: true,\n txid: txid ? String(txid) : undefined,\n address: address,\n amountSats: amountSats,\n network: normalized.network || this.props && this.props.bitcoin && this.props.bitcoin.network || \'regtest\'\n };\n txidText = faucetResult && faucetResult.txid ? " Txid: ".concat(String(faucetResult.txid), ".") : \'\';\n this.setState({\n loading: false,\n faucetResult: faucetResult,\n faucetNotice: faucetResult && faucetResult.error ? \'\' : "Faucet request accepted.".concat(txidText),\n faucetLastStatus: {\n ok: !faucetResult.error,\n when: Date.now(),\n address: address,\n amountSats: amountSats,\n txid: faucetResult && faucetResult.txid ? String(faucetResult.txid) : \'\',\n error: faucetResult && faucetResult.error ? String(faucetResult.error) : \'\'\n }\n }, function () {\n if (!faucetResult.error) {\n void _this3.refreshHubWalletStatus();\n try {\n var identity = _this3.props && _this3.props.identity || {};\n var wallet = getNextReceiveWalletContext(identity);\n if (wallet && wallet.walletId) clearBalanceCache(wallet.walletId);\n } catch (_) {}\n if (typeof window !== \'undefined\') {\n window.dispatchEvent(new CustomEvent(\'clientBalanceUpdate\'));\n }\n }\n });\n _context4.n = 9;\n break;\n case 8:\n _context4.p = 8;\n _t5 = _context4.v;\n message = _t5 && _t5.message ? _t5.message : String(_t5);\n this.setState({\n loading: false,\n faucetResult: {\n error: message\n },\n faucetNotice: \'\',\n faucetLastStatus: {\n ok: false,\n when: Date.now(),\n address: address,\n amountSats: amountSats,\n txid: \'\',\n error: message\n }\n });\n case 9:\n return _context4.a(2);\n }\n }, _callee4, this, [[6, 8]]);\n }));\n function requestFaucet() {\n return _requestFaucet2.apply(this, arguments);\n }\n return requestFaucet;\n }()\n }, {\n key: "render",\n value: function render() {\n var _this4 = this;\n var detail = this.state.hubBitcoinDetail;\n var wsBitcoin = this.props && this.props.bitcoin || {};\n var bitcoinNetwork = detail && detail.network ? String(detail.network).toLowerCase() : wsBitcoin.network ? String(wsBitcoin.network).toLowerCase() : \'regtest\';\n var hubSats = hubWalletSatsFromDetail(detail);\n var hubBtc = hubSats != null ? hubSats / SATS_PER_BTC : null;\n var chainHeight = detail && detail.height != null ? detail.height : wsBitcoin.height != null ? wsBitcoin.height : null;\n var amountSatsNum = Math.round(Number(this.state.amountSats || 0));\n var utxoListRender = Array.isArray(this.state.hubWalletUtxos) ? this.state.hubWalletUtxos : [];\n var spendHints = computeHubWalletSpendHints({\n balanceSats: hubSats != null ? hubSats : 0,\n utxos: utxoListRender,\n mempoolInfo: detail && detail.mempoolInfo,\n network: bitcoinNetwork,\n faucetCapSats: 1000000,\n targetAmountSats: Number.isFinite(amountSatsNum) && amountSatsNum > 0 ? amountSatsNum : null\n });\n var maxAffordableSats = hubSats != null && Number.isFinite(hubSats) ? spendHints.maxAffordableSats : null;\n var suggestedFaucetSats = maxAffordableSats != null && maxAffordableSats > 0 ? Math.min(1000000, Math.max(1, maxAffordableSats)) : null;\n var amountExceedsHub = maxAffordableSats != null && Number.isFinite(amountSatsNum) && amountSatsNum > maxAffordableSats;\n var recipientBelowDust = Number.isFinite(amountSatsNum) && amountSatsNum > 0 && amountSatsNum < spendHints.minRecipientSats;\n var fragmentationBlocksPay = spendHints.hadUtxoList && spendHints.canPayTarget === false && Number.isFinite(amountSatsNum) && amountSatsNum > 0;\n var hubReady = !!(detail && detail.available);\n var faucetAllowed = bitcoinNetwork === \'regtest\';\n return /*#__PURE__*/React.createElement("div", {\n className: "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, {\n loading: this.state.loading\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left"\n }), "Bitcoin"), /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "tint"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Faucet"))), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginTop: \'0.6em\',\n marginBottom: 0\n }\n }, "Regtest faucet moves coins from the Hub / Beacon wallet onto ", /*#__PURE__*/React.createElement("strong", null, "your local key"), " receive address so the top-bar balance updates. Desktop auto-funds once per session when the Hub faucet is funded."), faucetAllowed ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n primary: true,\n type: "button",\n size: "large",\n disabled: this.state.loading || this.state.fundMyBusy || this.state.resolvingAddress || !hubReady,\n onClick: function onClick() {\n return void _this4.fundMyWallet();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "tint"\n }), this.state.fundMyBusy ? \'Funding local key…\' : \'Fund my local key\'), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginTop: \'0.5em\',\n marginBottom: 0,\n fontSize: \'0.95em\'\n }\n }, "One click: resolve your receive address \\u2192 Hub faucet \\u2192 mine a confirmation (when admin token is present).")) : null, faucetAllowed ? /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Playnet past subsidy \\u2014 use the network"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n lineHeight: 1.45\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Bitcoin P2P"), " (regtest ", /*#__PURE__*/React.createElement("code", null, ":18444"), ") and ", /*#__PURE__*/React.createElement("strong", null, "Fabric TCP"), " (", /*#__PURE__*/React.createElement("code", null, ":7777"), ") are different layers. Under ", /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin"\n }, "Bitcoin"), " \\u2192 ", /*#__PURE__*/React.createElement("strong", null, "Network"), ", wait for outbound P2P connections to your configured", \' \', /*#__PURE__*/React.createElement("code", null, "addnode"), " targets so you share the same chain as other playnet nodes. Under ", /*#__PURE__*/React.createElement(Link, {\n to: "/peers"\n }, "Peers"), ", use ", /*#__PURE__*/React.createElement("strong", null, "Add primary hub"), " (", /*#__PURE__*/React.createElement("code", null, "hub.fabric.pub:7777"), ") for block gossip and discovery. If ", /*#__PURE__*/React.createElement("strong", null, "this"), " hub\'s wallet cannot fund you, open the public regtest faucet in another tab \\u2014", \' \', /*#__PURE__*/React.createElement("a", {\n href: "https://hub.fabric.pub/services/bitcoin/faucet",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "hub.fabric.pub/services/bitcoin/faucet"), \' — \', "paste the same receive address as ", /*#__PURE__*/React.createElement("strong", null, "Use my address"), " here, then use ", /*#__PURE__*/React.createElement("strong", null, "Generate block"), " on", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin#fabric-bitcoin-regtest-toolbar"\n }, "your Bitcoin"), " dashboard so the payment confirms.")) : null), /*#__PURE__*/React.createElement(Segment, {\n id: "fabric-bitcoin-faucet-hub-wallet",\n loading: this.state.hubBitcoinLoading,\n "aria-busy": this.state.hubBitcoinLoading ? \'true\' : \'false\'\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'center\',\n gap: \'0.5em\',\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n margin: 0,\n flex: \'1 1 auto\'\n }\n }, "Hub wallet (faucet source)"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n size: "small",\n disabled: this.state.hubBitcoinLoading,\n onClick: function onClick() {\n return void _this4.refreshHubWalletStatus();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh")), this.state.hubBitcoinError ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginTop: 0\n }\n }, "Could not load hub Bitcoin status: ", this.state.hubBitcoinError) : null, this.state.hubUtxosError ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: 0\n }\n }, "Could not load hub UTXO list (limits fragmentation checks): ", this.state.hubUtxosError) : null, !this.state.hubBitcoinError && !this.state.hubBitcoinLoading && !detail ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: 0\n }\n }, "No status loaded yet. Choose Refresh.") : null, hubReady ? /*#__PURE__*/React.createElement("div", {\n style: {\n lineHeight: 1.6\n }\n }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Network:"), " ", bitcoinNetwork || \'—\', chainHeight != null ? /*#__PURE__*/React.createElement("span", null, \' \', "\\xB7 ", /*#__PURE__*/React.createElement("strong", null, "Height:"), " ", chainHeight) : null), hubSats != null ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Trusted balance (hub bitcoind):"), \' \', hubBtc != null ? hubBtc.toFixed(8) : \'0.00000000\', " BTC (", hubSats.toLocaleString(), " sats)", suggestedFaucetSats != null ? /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.35em\',\n color: \'#555\',\n fontSize: \'0.95em\'\n }\n }, "On shared regtest / playnet, the hub wallet may be low if other nodes mined; pull at most", \' \', /*#__PURE__*/React.createElement("strong", null, suggestedFaucetSats.toLocaleString(), " sats"), spendHints.hadUtxoList ? /*#__PURE__*/React.createElement(React.Fragment, null, \' \', "(~", spendHints.satPerVbyte, " sat/vB, ", spendHints.utxoCount, " UTXO", spendHints.utxoCount === 1 ? \'\' : \'s\', ", fee reserve ~", spendHints.feeReserveSats.toLocaleString(), \' \', "sats).") : /*#__PURE__*/React.createElement(React.Fragment, null, \' \', "(~", spendHints.satPerVbyte, " sat/vB, fee reserve ~", spendHints.feeReserveSats.toLocaleString(), " sats; refresh after UTXO list loads for tighter bounds).")) : hubSats != null && hubSats <= spendHints.feeReserveSats ? /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.35em\',\n color: \'#8a6d3b\',\n fontSize: \'0.95em\'\n }\n }, "Balance is too low for a safe faucet send after fees \\u2014 publish or trade on the network instead of draining this hub.") : null) : null, detail && detail.mempoolTxCount != null && Number(detail.mempoolTxCount) > 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n color: \'#666\',\n fontSize: \'0.95em\'\n }\n }, "Mempool: ", detail.mempoolTxCount, " tx", faucetAllowed ? \' — unconfirmed sends (including faucet) confirm after you mine a block.\' : \'\') : null, faucetAllowed ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n color: \'#666\',\n fontSize: \'0.95em\'\n }\n }, "If the hub wallet is empty, open", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin#fabric-bitcoin-regtest-toolbar"\n }, "Bitcoin \\u2192 Regtest toolbar"), \' \', "and use ", /*#__PURE__*/React.createElement("strong", null, "Generate block"), " (admin) so coinbase pays into the hub wallet, then return here.") : /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: \'0.75em\'\n }\n }, "Faucet is only available on ", /*#__PURE__*/React.createElement("strong", null, "regtest"), ". This hub reports ", /*#__PURE__*/React.createElement("strong", null, bitcoinNetwork || \'unknown\'), ".")) : null, !hubReady && detail && !this.state.hubBitcoinLoading ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: 0\n }\n }, "Bitcoin service is not available on this hub", detail.status ? " (".concat(detail.status, ")") : \'\', ".", detail.message ? " ".concat(detail.message) : \'\') : null), /*#__PURE__*/React.createElement(Segment, null, this.state.faucetNotice ? /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: 0\n }\n }, this.state.faucetNotice) : null, this.state.faucetLastStatus ? /*#__PURE__*/React.createElement(Message, {\n size: "small",\n positive: !!this.state.faucetLastStatus.ok,\n negative: !this.state.faucetLastStatus.ok,\n style: {\n marginTop: this.state.faucetNotice ? \'0.5em\' : 0\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Last faucet request:"), \' \', this.state.faucetLastStatus.ok ? \'accepted\' : \'failed\', this.state.faucetLastStatus.amountSats != null ? " \\xB7 ".concat(this.state.faucetLastStatus.amountSats, " sats") : \'\', this.state.faucetLastStatus.address ? " \\xB7 ".concat(this.state.faucetLastStatus.address) : \'\'), this.state.faucetLastStatus.txid ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n wordBreak: \'break-all\'\n }\n }, "Txid: ", this.state.faucetLastStatus.txid) : null, this.state.faucetLastStatus.error ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, "Error: ", this.state.faucetLastStatus.error) : null) : null, amountExceedsHub && faucetAllowed ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: 0\n }\n }, "Request (", Number.isFinite(amountSatsNum) ? amountSatsNum.toLocaleString() : \'—\', " sats) is above what this hub can afford after fees and dust reserve (", maxAffordableSats.toLocaleString(), " sats max). Lower the amount or use", \' \', /*#__PURE__*/React.createElement("strong", null, "Use max affordable"), ".") : null, recipientBelowDust && faucetAllowed ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: 0\n }\n }, "Amount is below the relay dust floor (", spendHints.minRecipientSats, " sats). Enter at least that many sats.") : null, fragmentationBlocksPay && faucetAllowed ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: 0\n }\n }, "With the current UTXO set and fee rate, this amount is unlikely to build without merging inputs (largest coin", \' \', spendHints.largestUtxoSats.toLocaleString(), " sats). Use a smaller amount or consolidate on the node.") : null, /*#__PURE__*/React.createElement(Form, {\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n void _this4.requestFaucet();\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Send to address (", bitcoinNetwork || \'any\', ")"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "bcrt1... or m/44\'/0\'/0\'/0/0",\n value: this.state.sendTo,\n onChange: function onChange(e) {\n return _this4.setState({\n sendTo: e.target.value\n });\n },\n action: {\n content: this.state.resolvingAddress ? \'Loading…\' : \'Use my address\',\n disabled: this.state.resolvingAddress || this.state.loading,\n onClick: function onClick() {\n return _this4.useMyAddress();\n }\n }\n })), /*#__PURE__*/React.createElement(Form.Field, {\n width: 4\n }, /*#__PURE__*/React.createElement("label", null, "Amount (sats)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "1",\n step: "1",\n value: this.state.amountSats,\n onChange: function onChange(e) {\n return _this4.setState({\n amountSats: e.target.value\n });\n },\n action: suggestedFaucetSats != null ? {\n content: "Use max affordable (".concat(suggestedFaucetSats.toLocaleString(), ")"),\n disabled: this.state.loading || this.state.resolvingAddress,\n onClick: function onClick() {\n return _this4.setState({\n amountSats: String(suggestedFaucetSats),\n faucetResult: null,\n faucetNotice: \'\'\n });\n }\n } : undefined\n })), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n type: "button",\n disabled: this.state.loading || this.state.resolvingAddress,\n onClick: function onClick() {\n return _this4.requestFaucet();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "tint"\n }), "Request from faucet")), this.state.faucetResult ? /*#__PURE__*/React.createElement(Message, {\n negative: !!this.state.faucetResult.error,\n positive: !this.state.faucetResult.error,\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\',\n margin: 0\n }\n }, JSON.stringify(this.state.faucetResult, null, 2))) : null));\n }\n }]);\n}(React.Component);\nmodule.exports = FaucetHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxDQUFDLElBQUksQ0FBQzFJLEtBQUssQ0FBQ00sWUFBWSxDQUFDdUIsS0FBTTtRQUFDc0gsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDbkosS0FBSyxDQUFDTSxZQUFZLENBQUN1QixLQUFNO1FBQUNtRixLQUFLLEVBQUU7VUFBRWEsU0FBUyxFQUFFO1FBQU07TUFBRSxnQkFDeEh2SyxLQUFBLENBQUF3SixhQUFBO1FBQUtFLEtBQUssRUFBRTtVQUFFK0MsVUFBVSxFQUFFLFVBQVU7VUFBRVgsU0FBUyxFQUFFLFlBQVk7VUFBRTFCLE1BQU0sRUFBRTtRQUFFO01BQUUsR0FBRXNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDLElBQUksQ0FBQ2pLLEtBQUssQ0FBQ00sWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQU8sQ0FDNUgsQ0FBQyxHQUNSLElBQ0csQ0FDTixDQUFDO0lBRVY7RUFBQztBQUFBLEVBMW5Cc0JoRCxLQUFLLENBQUM0TSxTQUFTO0FBNm5CeENDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHeEssVUFBVSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29tcG9uZW50cy9GYXVjZXRIb21lLmpzPzc4MmUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHsgQnV0dG9uLCBGb3JtLCBIZWFkZXIsIEljb24sIElucHV0LCBNZXNzYWdlLCBTZWdtZW50IH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3Qge1xuICBmZXRjaEJpdGNvaW5TdGF0dXMsXG4gIGZldGNoUmVjZWl2ZUFkZHJlc3MsXG4gIGZldGNoVVRYT3MsXG4gIGdldE5leHRSZWNlaXZlV2FsbGV0Q29udGV4dCxcbiAgbG9hZFVwc3RyZWFtU2V0dGluZ3MsXG4gIHJlcXVlc3RGYXVjZXQsXG4gIGNsZWFyQmFsYW5jZUNhY2hlXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2JpdGNvaW5DbGllbnQnKTtcbmNvbnN0IHsgcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YkFkbWluVG9rZW5Ccm93c2VyJyk7XG5jb25zdCB7IGNvbXB1dGVIdWJXYWxsZXRTcGVuZEhpbnRzIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvYml0Y29pblNwZW5kQm91bmRzJyk7XG5jb25zdCB7IGZ1bmRMb2NhbEtleUZyb21IdWJGYXVjZXQgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mdW5kTG9jYWxLZXlGcm9tSHViRmF1Y2V0Jyk7XG5jb25zdCB7IFNBVFNfUEVSX0JUQyB9ID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzJyk7XG5cbmZ1bmN0aW9uIGh1YldhbGxldFNhdHNGcm9tRGV0YWlsIChkZXRhaWwpIHtcbiAgaWYgKCFkZXRhaWwgfHwgdHlwZW9mIGRldGFpbCAhPT0gJ29iamVjdCcgfHwgIWRldGFpbC5hdmFpbGFibGUpIHJldHVybiBudWxsO1xuICBpZiAoZGV0YWlsLmJhbGFuY2VTYXRzICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcihkZXRhaWwuYmFsYW5jZVNhdHMpKSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKE51bWJlcihkZXRhaWwuYmFsYW5jZVNhdHMpKTtcbiAgfVxuICBjb25zdCBiID0gTnVtYmVyKGRldGFpbC5iYWxhbmNlICE9IG51bGwgPyBkZXRhaWwuYmFsYW5jZSA6IE5hTik7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoYikpIHJldHVybiBNYXRoLnJvdW5kKGIgKiBTQVRTX1BFUl9CVEMpO1xuICByZXR1cm4gMDtcbn1cblxuY2xhc3MgRmF1Y2V0SG9tZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICByZXNvbHZpbmdBZGRyZXNzOiBmYWxzZSxcbiAgICAgIHVwc3RyZWFtOiBsb2FkVXBzdHJlYW1TZXR0aW5ncygpLFxuICAgICAgc2VuZFRvOiAnJyxcbiAgICAgIGFtb3VudFNhdHM6ICcxMDAwMCcsXG4gICAgICBmYXVjZXRSZXN1bHQ6IG51bGwsXG4gICAgICBmYXVjZXROb3RpY2U6ICcnLFxuICAgICAgZmF1Y2V0TGFzdFN0YXR1czogbnVsbCxcbiAgICAgIGh1YkJpdGNvaW5EZXRhaWw6IG51bGwsXG4gICAgICBodWJCaXRjb2luTG9hZGluZzogZmFsc2UsXG4gICAgICBodWJCaXRjb2luRXJyb3I6IG51bGwsXG4gICAgICBodWJXYWxsZXRVdHhvczogbnVsbCxcbiAgICAgIGh1YlV0eG9zRXJyb3I6IG51bGwsXG4gICAgICBmdW5kTXlCdXN5OiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCAoKSB7XG4gICAgdm9pZCB0aGlzLnJlZnJlc2hIdWJXYWxsZXRTdGF0dXMoKTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmRNeVdhbGxldCAoKSB7XG4gICAgY29uc3QgaWRlbnRpdHkgPSAodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmlkZW50aXR5KSB8fCB7fTtcbiAgICBpZiAoIWlkZW50aXR5LnhwdWIpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmYXVjZXRSZXN1bHQ6IHsgZXJyb3I6ICdVbmxvY2sgb3IgY3JlYXRlIGEgbG9jYWwgaWRlbnRpdHkgZmlyc3QgKElkZW50aXR5IHBhbmVsKS4nIH0sXG4gICAgICAgIGZhdWNldE5vdGljZTogJydcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBodWJEZXRhaWwgPSB0aGlzLnN0YXRlLmh1YkJpdGNvaW5EZXRhaWw7XG4gICAgY29uc3QgbmV0d29yayA9IGh1YkRldGFpbCAmJiBodWJEZXRhaWwubmV0d29ya1xuICAgICAgPyBTdHJpbmcoaHViRGV0YWlsLm5ldHdvcmspLnRvTG93ZXJDYXNlKClcbiAgICAgIDogKCh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuYml0Y29pbiAmJiB0aGlzLnByb3BzLmJpdGNvaW4ubmV0d29yaylcbiAgICAgICAgPyBTdHJpbmcodGhpcy5wcm9wcy5iaXRjb2luLm5ldHdvcmspLnRvTG93ZXJDYXNlKClcbiAgICAgICAgOiAncmVndGVzdCcpO1xuICAgIGlmIChuZXR3b3JrICE9PSAncmVndGVzdCcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmYXVjZXRSZXN1bHQ6IHsgZXJyb3I6ICdGYXVjZXQgaXMgcmVndGVzdC1vbmx5LicgfSxcbiAgICAgICAgZmF1Y2V0Tm90aWNlOiAnJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFtb3VudFNhdHMgPSBNYXRoLnJvdW5kKE51bWJlcih0aGlzLnN0YXRlLmFtb3VudFNhdHMgfHwgMTAwMDApKTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGZ1bmRNeUJ1c3k6IHRydWUsXG4gICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgZmF1Y2V0UmVzdWx0OiBudWxsLFxuICAgICAgZmF1Y2V0Tm90aWNlOiAnRnVuZGluZyB5b3VyIGxvY2FsIHJlY2VpdmUgYWRkcmVzcyBmcm9tIHRoZSBIdWIgZmF1Y2V04oCmJ1xuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmdW5kZWQgPSBhd2FpdCBmdW5kTG9jYWxLZXlGcm9tSHViRmF1Y2V0KHtcbiAgICAgICAgaWRlbnRpdHksXG4gICAgICAgIGFkbWluVG9rZW46IHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5hZG1pblRva2VuLFxuICAgICAgICBhbW91bnRTYXRzOiBOdW1iZXIuaXNGaW5pdGUoYW1vdW50U2F0cykgJiYgYW1vdW50U2F0cyA+IDAgPyBhbW91bnRTYXRzIDogMTAwMDAsXG4gICAgICAgIG5ldHdvcmssXG4gICAgICAgIG1pbmVDb25maXJtOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmdW5kTXlCdXN5OiBmYWxzZSxcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIHNlbmRUbzogZnVuZGVkLmFkZHJlc3MsXG4gICAgICAgIGZhdWNldFJlc3VsdDoge1xuICAgICAgICAgIG9rOiB0cnVlLFxuICAgICAgICAgIGFkZHJlc3M6IGZ1bmRlZC5hZGRyZXNzLFxuICAgICAgICAgIGFtb3VudFNhdHM6IGZ1bmRlZC5hbW91bnRTYXRzLFxuICAgICAgICAgIHR4aWQ6IGZ1bmRlZC50eGlkLFxuICAgICAgICAgIG1pbmVkOiBmdW5kZWQubWluZWRcbiAgICAgICAgfSxcbiAgICAgICAgZmF1Y2V0Tm90aWNlOiBmdW5kZWQubWluZWQgJiYgZnVuZGVkLm1pbmVkLmVycm9yXG4gICAgICAgICAgPyBgRmF1Y2V0IHNlbnQgJHtmdW5kZWQuYW1vdW50U2F0c30gc2F0cyB0byB5b3VyIGxvY2FsIGtleS4gQ29uZmlybSB3aXRoIEdlbmVyYXRlIGJsb2NrIChhZG1pbikgaWYgdGhlIHRvcC1iYXIgYmFsYW5jZSBpcyBzdGlsbCB6ZXJvLmBcbiAgICAgICAgICA6IGBGdW5kZWQgeW91ciBsb2NhbCBrZXkgd2l0aCAke2Z1bmRlZC5hbW91bnRTYXRzLnRvTG9jYWxlU3RyaW5nKCl9IHNhdHNgICtcbiAgICAgICAgICAgIChmdW5kZWQudHhpZCA/IGAgKCR7ZnVuZGVkLnR4aWQuc2xpY2UoMCwgMTIpfeKApilgIDogJycpICtcbiAgICAgICAgICAgIChmdW5kZWQubWluZWQgJiYgIWZ1bmRlZC5taW5lZC5lcnJvciA/ICcgYW5kIG1pbmVkIGEgY29uZmlybWF0aW9uLicgOiAnLicpLFxuICAgICAgICBmYXVjZXRMYXN0U3RhdHVzOiB7XG4gICAgICAgICAgb2s6IHRydWUsXG4gICAgICAgICAgd2hlbjogRGF0ZS5ub3coKSxcbiAgICAgICAgICBhZGRyZXNzOiBmdW5kZWQuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnRTYXRzOiBmdW5kZWQuYW1vdW50U2F0cyxcbiAgICAgICAgICB0eGlkOiBmdW5kZWQudHhpZCB8fCAnJyxcbiAgICAgICAgICBlcnJvcjogJydcbiAgICAgICAgfVxuICAgICAgfSwgKCkgPT4ge1xuICAgICAgICB2b2lkIHRoaXMucmVmcmVzaEh1YldhbGxldFN0YXR1cygpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZnVuZE15QnVzeTogZmFsc2UsXG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBmYXVjZXRSZXN1bHQ6IHsgZXJyb3I6IG1lc3NhZ2UgfSxcbiAgICAgICAgZmF1Y2V0Tm90aWNlOiAnJyxcbiAgICAgICAgZmF1Y2V0TGFzdFN0YXR1czoge1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICB3aGVuOiBEYXRlLm5vdygpLFxuICAgICAgICAgIGFkZHJlc3M6IFN0cmluZyh0aGlzLnN0YXRlLnNlbmRUbyB8fCAnJyksXG4gICAgICAgICAgYW1vdW50U2F0czogYW1vdW50U2F0cyxcbiAgICAgICAgICB0eGlkOiAnJyxcbiAgICAgICAgICBlcnJvcjogbWVzc2FnZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZWZyZXNoSHViV2FsbGV0U3RhdHVzICgpIHtcbiAgICBjb25zdCB1cHN0cmVhbSA9IHtcbiAgICAgIC4uLmxvYWRVcHN0cmVhbVNldHRpbmdzKCksXG4gICAgICBodWJBZG1pblRva2VuOiByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5hZG1pblRva2VuKSB8fCAnJ1xuICAgIH07XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGh1YkJpdGNvaW5Mb2FkaW5nOiB0cnVlLCBodWJCaXRjb2luRXJyb3I6IG51bGwsIHVwc3RyZWFtIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZXRhaWwgPSBhd2FpdCBmZXRjaEJpdGNvaW5TdGF0dXModXBzdHJlYW0pO1xuICAgICAgY29uc3QgZCA9IGRldGFpbCAmJiB0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyA/IGRldGFpbCA6IG51bGw7XG4gICAgICBsZXQgaHViV2FsbGV0VXR4b3MgPSBbXTtcbiAgICAgIGxldCBodWJVdHhvc0Vycm9yID0gbnVsbDtcbiAgICAgIGlmIChkICYmIGQuYXZhaWxhYmxlICYmIGQud2FsbGV0TmFtZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBmZXRjaFVUWE9zKHVwc3RyZWFtLCB7IHdhbGxldElkOiBTdHJpbmcoZC53YWxsZXROYW1lKSB9LCB7fSk7XG4gICAgICAgICAgaHViV2FsbGV0VXR4b3MgPSBBcnJheS5pc0FycmF5KGxpc3QpID8gbGlzdCA6IFtdO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaHViVXR4b3NFcnJvciA9IGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgICAgIGh1YldhbGxldFV0eG9zID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBodWJCaXRjb2luTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGh1YkJpdGNvaW5EZXRhaWw6IGQsXG4gICAgICAgIGh1YkJpdGNvaW5FcnJvcjogbnVsbCxcbiAgICAgICAgaHViV2FsbGV0VXR4b3MsXG4gICAgICAgIGh1YlV0eG9zRXJyb3JcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaHViQml0Y29pbkxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBodWJCaXRjb2luRGV0YWlsOiBudWxsLFxuICAgICAgICBodWJCaXRjb2luRXJyb3I6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgaHViV2FsbGV0VXR4b3M6IFtdLFxuICAgICAgICBodWJVdHhvc0Vycm9yOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1c2VNeUFkZHJlc3MgKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyByZXNvbHZpbmdBZGRyZXNzOiB0cnVlIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpZGVudGl0eSA9ICh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuaWRlbnRpdHkpIHx8IHt9O1xuICAgICAgY29uc3Qgd2FsbGV0ID0gZ2V0TmV4dFJlY2VpdmVXYWxsZXRDb250ZXh0KGlkZW50aXR5KTtcbiAgICAgIGNvbnN0IG5ldHdvcmsgPSAodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmJpdGNvaW4gJiYgdGhpcy5wcm9wcy5iaXRjb2luLm5ldHdvcmspXG4gICAgICAgID8gU3RyaW5nKHRoaXMucHJvcHMuYml0Y29pbi5uZXR3b3JrKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIDogJ3JlZ3Rlc3QnO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGF3YWl0IGZldGNoUmVjZWl2ZUFkZHJlc3ModGhpcy5zdGF0ZS51cHN0cmVhbSwgd2FsbGV0LCB7IG5ldHdvcmssIGlkZW50aXR5IH0pO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNlbmRUbzogU3RyaW5nKGFkZHJlc3MgfHwgJycpLCByZXNvbHZpbmdBZGRyZXNzOiBmYWxzZSB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHJlc29sdmluZ0FkZHJlc3M6IGZhbHNlLFxuICAgICAgICBmYXVjZXRSZXN1bHQ6IHsgZXJyb3I6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZXF1ZXN0RmF1Y2V0ICgpIHtcbiAgICBjb25zdCBhZGRyZXNzID0gU3RyaW5nKHRoaXMuc3RhdGUuc2VuZFRvIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgYW1vdW50U2F0cyA9IE1hdGgucm91bmQoTnVtYmVyKHRoaXMuc3RhdGUuYW1vdW50U2F0cyB8fCAwKSk7XG4gICAgaWYgKHRoaXMuc3RhdGUucmVzb2x2aW5nQWRkcmVzcykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZhdWNldFJlc3VsdDogeyBlcnJvcjogJ1N0aWxsIHJlc29sdmluZyB5b3VyIHJlY2VpdmUgYWRkcmVzcy4gUGxlYXNlIHdhaXQgYSBtb21lbnQgYW5kIHRyeSBhZ2Fpbi4nIH0sXG4gICAgICAgIGZhdWNldE5vdGljZTogJycsXG4gICAgICAgIGZhdWNldExhc3RTdGF0dXM6IHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgd2hlbjogRGF0ZS5ub3coKSxcbiAgICAgICAgICBhZGRyZXNzOiAnJyxcbiAgICAgICAgICBhbW91bnRTYXRzOiBudWxsLFxuICAgICAgICAgIHR4aWQ6ICcnLFxuICAgICAgICAgIGVycm9yOiAnU3RpbGwgcmVzb2x2aW5nIHlvdXIgcmVjZWl2ZSBhZGRyZXNzLiBQbGVhc2Ugd2FpdCBhIG1vbWVudCBhbmQgdHJ5IGFnYWluLidcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYWRkcmVzcykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZhdWNldFJlc3VsdDogeyBlcnJvcjogJ1JlY2lwaWVudCBhZGRyZXNzIGlzIHJlcXVpcmVkLicgfSxcbiAgICAgICAgZmF1Y2V0Tm90aWNlOiAnJyxcbiAgICAgICAgZmF1Y2V0TGFzdFN0YXR1czoge1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICB3aGVuOiBEYXRlLm5vdygpLFxuICAgICAgICAgIGFkZHJlc3M6ICcnLFxuICAgICAgICAgIGFtb3VudFNhdHM6IG51bGwsXG4gICAgICAgICAgdHhpZDogJycsXG4gICAgICAgICAgZXJyb3I6ICdSZWNpcGllbnQgYWRkcmVzcyBpcyByZXF1aXJlZC4nXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShhbW91bnRTYXRzKSB8fCBhbW91bnRTYXRzIDw9IDApIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBmYXVjZXRSZXN1bHQ6IHsgZXJyb3I6ICdBbW91bnQgKHNhdHMpIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJyB9LFxuICAgICAgICBmYXVjZXROb3RpY2U6ICcnLFxuICAgICAgICBmYXVjZXRMYXN0U3RhdHVzOiB7XG4gICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgIHdoZW46IERhdGUubm93KCksXG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnRTYXRzLFxuICAgICAgICAgIHR4aWQ6ICcnLFxuICAgICAgICAgIGVycm9yOiAnQW1vdW50IChzYXRzKSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLidcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGh1YkRldGFpbCA9IHRoaXMuc3RhdGUuaHViQml0Y29pbkRldGFpbDtcbiAgICBjb25zdCBodWJTYXRzUHJlID0gaHViV2FsbGV0U2F0c0Zyb21EZXRhaWwoaHViRGV0YWlsKTtcbiAgICBjb25zdCB1dHhvTGlzdCA9IEFycmF5LmlzQXJyYXkodGhpcy5zdGF0ZS5odWJXYWxsZXRVdHhvcykgPyB0aGlzLnN0YXRlLmh1YldhbGxldFV0eG9zIDogW107XG4gICAgY29uc3QgbmV0UHJlID0gaHViRGV0YWlsICYmIGh1YkRldGFpbC5uZXR3b3JrID8gU3RyaW5nKGh1YkRldGFpbC5uZXR3b3JrKS50b0xvd2VyQ2FzZSgpIDogJ3JlZ3Rlc3QnO1xuICAgIGNvbnN0IGhpbnRzUHJlID0gY29tcHV0ZUh1YldhbGxldFNwZW5kSGludHMoe1xuICAgICAgYmFsYW5jZVNhdHM6IGh1YlNhdHNQcmUgIT0gbnVsbCA/IGh1YlNhdHNQcmUgOiAwLFxuICAgICAgdXR4b3M6IHV0eG9MaXN0LFxuICAgICAgbWVtcG9vbEluZm86IGh1YkRldGFpbCAmJiBodWJEZXRhaWwubWVtcG9vbEluZm8sXG4gICAgICBuZXR3b3JrOiBuZXRQcmUsXG4gICAgICBmYXVjZXRDYXBTYXRzOiAxMDAwMDAwLFxuICAgICAgdGFyZ2V0QW1vdW50U2F0czogYW1vdW50U2F0c1xuICAgIH0pO1xuICAgIGlmIChhbW91bnRTYXRzIDwgaGludHNQcmUubWluUmVjaXBpZW50U2F0cykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZhdWNldFJlc3VsdDoge1xuICAgICAgICAgIGVycm9yOiBgQW1vdW50IGlzIGJlbG93IHRoZSB0eXBpY2FsIGR1c3QgZmxvb3IgKCR7aGludHNQcmUubWluUmVjaXBpZW50U2F0c30gc2F0cykuIFVzZSBhdCBsZWFzdCB0aGF0IG1hbnkgc2F0cyBzbyB0aGUgb3V0cHV0IGlzIHJlbGF5YWJsZS5gXG4gICAgICAgIH0sXG4gICAgICAgIGZhdWNldE5vdGljZTogJycsXG4gICAgICAgIGZhdWNldExhc3RTdGF0dXM6IHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgd2hlbjogRGF0ZS5ub3coKSxcbiAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgIGFtb3VudFNhdHMsXG4gICAgICAgICAgdHhpZDogJycsXG4gICAgICAgICAgZXJyb3I6IGBCZWxvdyBkdXN0IGZsb29yICgke2hpbnRzUHJlLm1pblJlY2lwaWVudFNhdHN9IHNhdHMpLmBcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChoaW50c1ByZS5jYW5QYXlUYXJnZXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZmF1Y2V0UmVzdWx0OiB7XG4gICAgICAgICAgZXJyb3I6ICdUaGlzIGFtb3VudCBwbHVzIGZlZXMgY2Fubm90IGJlIGNvdmVyZWQgYnkgdGhlIGh1YiBVVFhPIHNldCAoZnJhZ21lbnRhdGlvbiBvciBmZWUgbWFya2V0KS4gVHJ5IGEgc21hbGxlciBhbW91bnQsIFVzZSBtYXggYWZmb3JkYWJsZSwgb3IgY29uc29saWRhdGUgdGhlIGh1YiB3YWxsZXQgb24gdGhlIG5vZGUuJ1xuICAgICAgICB9LFxuICAgICAgICBmYXVjZXROb3RpY2U6ICcnLFxuICAgICAgICBmYXVjZXRMYXN0U3RhdHVzOiB7XG4gICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgIHdoZW46IERhdGUubm93KCksXG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnRTYXRzLFxuICAgICAgICAgIHR4aWQ6ICcnLFxuICAgICAgICAgIGVycm9yOiAnVVRYTyAvIGZlZSBzaW11bGF0aW9uOiBjYW5ub3QgcGF5IHRoaXMgYW1vdW50LidcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgIGZhdWNldFJlc3VsdDogbnVsbCxcbiAgICAgIGZhdWNldE5vdGljZTogYFN1Ym1pdHRpbmcgZmF1Y2V0IHJlcXVlc3QgZm9yICR7YW1vdW50U2F0c30gc2F0cy4uLmBcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxdWVzdEZhdWNldCh0aGlzLnN0YXRlLnVwc3RyZWFtIHx8IGxvYWRVcHN0cmVhbVNldHRpbmdzKCksIHsgYWRkcmVzcywgYW1vdW50U2F0cyB9KTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnKSA/IHJlc3VsdCA6IHt9O1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRFcnJvciA9ICEhbm9ybWFsaXplZC5lcnJvcjtcbiAgICAgIGNvbnN0IHR4aWQgPSBub3JtYWxpemVkLnR4aWQgfHwgbm9ybWFsaXplZC50cmFuc2FjdGlvbklkIHx8IG5vcm1hbGl6ZWQuaWQ7XG4gICAgICBjb25zdCBmYXVjZXRSZXN1bHQgPSBoYXNFeHBsaWNpdEVycm9yXG4gICAgICAgID8geyBlcnJvcjogU3RyaW5nKG5vcm1hbGl6ZWQuZXJyb3IpIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBvazogdHJ1ZSxcbiAgICAgICAgICAgIHR4aWQ6IHR4aWQgPyBTdHJpbmcodHhpZCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgYW1vdW50U2F0cyxcbiAgICAgICAgICAgIG5ldHdvcms6IG5vcm1hbGl6ZWQubmV0d29yayB8fCAodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmJpdGNvaW4gJiYgdGhpcy5wcm9wcy5iaXRjb2luLm5ldHdvcmspIHx8ICdyZWd0ZXN0J1xuICAgICAgICAgIH07XG4gICAgICBjb25zdCB0eGlkVGV4dCA9IGZhdWNldFJlc3VsdCAmJiBmYXVjZXRSZXN1bHQudHhpZCA/IGAgVHhpZDogJHtTdHJpbmcoZmF1Y2V0UmVzdWx0LnR4aWQpfS5gIDogJyc7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGZhdWNldFJlc3VsdCxcbiAgICAgICAgZmF1Y2V0Tm90aWNlOiBmYXVjZXRSZXN1bHQgJiYgZmF1Y2V0UmVzdWx0LmVycm9yXG4gICAgICAgICAgPyAnJ1xuICAgICAgICAgIDogYEZhdWNldCByZXF1ZXN0IGFjY2VwdGVkLiR7dHhpZFRleHR9YCxcbiAgICAgICAgZmF1Y2V0TGFzdFN0YXR1czoge1xuICAgICAgICAgIG9rOiAhZmF1Y2V0UmVzdWx0LmVycm9yLFxuICAgICAgICAgIHdoZW46IERhdGUubm93KCksXG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnRTYXRzLFxuICAgICAgICAgIHR4aWQ6IGZhdWNldFJlc3VsdCAmJiBmYXVjZXRSZXN1bHQudHhpZCA/IFN0cmluZyhmYXVjZXRSZXN1bHQudHhpZCkgOiAnJyxcbiAgICAgICAgICBlcnJvcjogZmF1Y2V0UmVzdWx0ICYmIGZhdWNldFJlc3VsdC5lcnJvciA/IFN0cmluZyhmYXVjZXRSZXN1bHQuZXJyb3IpIDogJydcbiAgICAgICAgfVxuICAgICAgfSwgKCkgPT4ge1xuICAgICAgICBpZiAoIWZhdWNldFJlc3VsdC5lcnJvcikge1xuICAgICAgICAgIHZvaWQgdGhpcy5yZWZyZXNoSHViV2FsbGV0U3RhdHVzKCk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGlkZW50aXR5ID0gKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5pZGVudGl0eSkgfHwge307XG4gICAgICAgICAgICBjb25zdCB3YWxsZXQgPSBnZXROZXh0UmVjZWl2ZVdhbGxldENvbnRleHQoaWRlbnRpdHkpO1xuICAgICAgICAgICAgaWYgKHdhbGxldCAmJiB3YWxsZXQud2FsbGV0SWQpIGNsZWFyQmFsYW5jZUNhY2hlKHdhbGxldC53YWxsZXRJZCk7XG4gICAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2xpZW50QmFsYW5jZVVwZGF0ZScpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBmYXVjZXRSZXN1bHQ6IHsgZXJyb3I6IG1lc3NhZ2UgfSxcbiAgICAgICAgZmF1Y2V0Tm90aWNlOiAnJyxcbiAgICAgICAgZmF1Y2V0TGFzdFN0YXR1czoge1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICB3aGVuOiBEYXRlLm5vdygpLFxuICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50U2F0cyxcbiAgICAgICAgICB0eGlkOiAnJyxcbiAgICAgICAgICBlcnJvcjogbWVzc2FnZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IGRldGFpbCA9IHRoaXMuc3RhdGUuaHViQml0Y29pbkRldGFpbDtcbiAgICBjb25zdCB3c0JpdGNvaW4gPSAodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmJpdGNvaW4pIHx8IHt9O1xuICAgIGNvbnN0IGJpdGNvaW5OZXR3b3JrID0gZGV0YWlsICYmIGRldGFpbC5uZXR3b3JrXG4gICAgICA/IFN0cmluZyhkZXRhaWwubmV0d29yaykudG9Mb3dlckNhc2UoKVxuICAgICAgOiAod3NCaXRjb2luLm5ldHdvcmsgPyBTdHJpbmcod3NCaXRjb2luLm5ldHdvcmspLnRvTG93ZXJDYXNlKCkgOiAncmVndGVzdCcpO1xuICAgIGNvbnN0IGh1YlNhdHMgPSBodWJXYWxsZXRTYXRzRnJvbURldGFpbChkZXRhaWwpO1xuICAgIGNvbnN0IGh1YkJ0YyA9IGh1YlNhdHMgIT0gbnVsbCA/IGh1YlNhdHMgLyBTQVRTX1BFUl9CVEMgOiBudWxsO1xuICAgIGNvbnN0IGNoYWluSGVpZ2h0ID0gZGV0YWlsICYmIGRldGFpbC5oZWlnaHQgIT0gbnVsbCA/IGRldGFpbC5oZWlnaHQgOiAod3NCaXRjb2luLmhlaWdodCAhPSBudWxsID8gd3NCaXRjb2luLmhlaWdodCA6IG51bGwpO1xuICAgIGNvbnN0IGFtb3VudFNhdHNOdW0gPSBNYXRoLnJvdW5kKE51bWJlcih0aGlzLnN0YXRlLmFtb3VudFNhdHMgfHwgMCkpO1xuICAgIGNvbnN0IHV0eG9MaXN0UmVuZGVyID0gQXJyYXkuaXNBcnJheSh0aGlzLnN0YXRlLmh1YldhbGxldFV0eG9zKSA/IHRoaXMuc3RhdGUuaHViV2FsbGV0VXR4b3MgOiBbXTtcbiAgICBjb25zdCBzcGVuZEhpbnRzID0gY29tcHV0ZUh1YldhbGxldFNwZW5kSGludHMoe1xuICAgICAgYmFsYW5jZVNhdHM6IGh1YlNhdHMgIT0gbnVsbCA/IGh1YlNhdHMgOiAwLFxuICAgICAgdXR4b3M6IHV0eG9MaXN0UmVuZGVyLFxuICAgICAgbWVtcG9vbEluZm86IGRldGFpbCAmJiBkZXRhaWwubWVtcG9vbEluZm8sXG4gICAgICBuZXR3b3JrOiBiaXRjb2luTmV0d29yayxcbiAgICAgIGZhdWNldENhcFNhdHM6IDEwMDAwMDAsXG4gICAgICB0YXJnZXRBbW91bnRTYXRzOiBOdW1iZXIuaXNGaW5pdGUoYW1vdW50U2F0c051bSkgJiYgYW1vdW50U2F0c051bSA+IDAgPyBhbW91bnRTYXRzTnVtIDogbnVsbFxuICAgIH0pO1xuICAgIGNvbnN0IG1heEFmZm9yZGFibGVTYXRzID1cbiAgICAgIGh1YlNhdHMgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoaHViU2F0cykgPyBzcGVuZEhpbnRzLm1heEFmZm9yZGFibGVTYXRzIDogbnVsbDtcbiAgICBjb25zdCBzdWdnZXN0ZWRGYXVjZXRTYXRzID1cbiAgICAgIG1heEFmZm9yZGFibGVTYXRzICE9IG51bGwgJiYgbWF4QWZmb3JkYWJsZVNhdHMgPiAwXG4gICAgICAgID8gTWF0aC5taW4oMTAwMDAwMCwgTWF0aC5tYXgoMSwgbWF4QWZmb3JkYWJsZVNhdHMpKVxuICAgICAgICA6IG51bGw7XG4gICAgY29uc3QgYW1vdW50RXhjZWVkc0h1YiA9XG4gICAgICBtYXhBZmZvcmRhYmxlU2F0cyAhPSBudWxsICYmXG4gICAgICBOdW1iZXIuaXNGaW5pdGUoYW1vdW50U2F0c051bSkgJiZcbiAgICAgIGFtb3VudFNhdHNOdW0gPiBtYXhBZmZvcmRhYmxlU2F0cztcbiAgICBjb25zdCByZWNpcGllbnRCZWxvd0R1c3QgPVxuICAgICAgTnVtYmVyLmlzRmluaXRlKGFtb3VudFNhdHNOdW0pICYmXG4gICAgICBhbW91bnRTYXRzTnVtID4gMCAmJlxuICAgICAgYW1vdW50U2F0c051bSA8IHNwZW5kSGludHMubWluUmVjaXBpZW50U2F0cztcbiAgICBjb25zdCBmcmFnbWVudGF0aW9uQmxvY2tzUGF5ID1cbiAgICAgIHNwZW5kSGludHMuaGFkVXR4b0xpc3QgJiZcbiAgICAgIHNwZW5kSGludHMuY2FuUGF5VGFyZ2V0ID09PSBmYWxzZSAmJlxuICAgICAgTnVtYmVyLmlzRmluaXRlKGFtb3VudFNhdHNOdW0pICYmXG4gICAgICBhbW91bnRTYXRzTnVtID4gMDtcbiAgICBjb25zdCBodWJSZWFkeSA9ICEhKGRldGFpbCAmJiBkZXRhaWwuYXZhaWxhYmxlKTtcbiAgICBjb25zdCBmYXVjZXRBbGxvd2VkID0gYml0Y29pbk5ldHdvcmsgPT09ICdyZWd0ZXN0JztcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZhZGUtaW5cIj5cbiAgICAgICAgPFNlZ21lbnQgbG9hZGluZz17dGhpcy5zdGF0ZS5sb2FkaW5nfT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW5cIiBiYXNpYyBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiAvPlxuICAgICAgICAgICAgICBCaXRjb2luXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoMlwiIHN0eWxlPXt7IG1hcmdpbjogMCB9fT5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInRpbnRcIiAvPlxuICAgICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+RmF1Y2V0PC9IZWFkZXIuQ29udGVudD5cbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpblRvcDogJzAuNmVtJywgbWFyZ2luQm90dG9tOiAwIH19PlxuICAgICAgICAgICAgUmVndGVzdCBmYXVjZXQgbW92ZXMgY29pbnMgZnJvbSB0aGUgSHViIC8gQmVhY29uIHdhbGxldCBvbnRvIDxzdHJvbmc+eW91ciBsb2NhbCBrZXk8L3N0cm9uZz4gcmVjZWl2ZVxuICAgICAgICAgICAgYWRkcmVzcyBzbyB0aGUgdG9wLWJhciBiYWxhbmNlIHVwZGF0ZXMuIERlc2t0b3AgYXV0by1mdW5kcyBvbmNlIHBlciBzZXNzaW9uIHdoZW4gdGhlIEh1YiBmYXVjZXQgaXMgZnVuZGVkLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICB7ZmF1Y2V0QWxsb3dlZCA/IChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC44NWVtJyB9fT5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHByaW1hcnlcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmxvYWRpbmcgfHwgdGhpcy5zdGF0ZS5mdW5kTXlCdXN5IHx8IHRoaXMuc3RhdGUucmVzb2x2aW5nQWRkcmVzcyB8fCAhaHViUmVhZHl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCB0aGlzLmZ1bmRNeVdhbGxldCgpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInRpbnRcIiAvPlxuICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmZ1bmRNeUJ1c3kgPyAnRnVuZGluZyBsb2NhbCBrZXnigKYnIDogJ0Z1bmQgbXkgbG9jYWwga2V5J31cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpblRvcDogJzAuNWVtJywgbWFyZ2luQm90dG9tOiAwLCBmb250U2l6ZTogJzAuOTVlbScgfX0+XG4gICAgICAgICAgICAgICAgT25lIGNsaWNrOiByZXNvbHZlIHlvdXIgcmVjZWl2ZSBhZGRyZXNzIOKGkiBIdWIgZmF1Y2V0IOKGkiBtaW5lIGEgY29uZmlybWF0aW9uICh3aGVuIGFkbWluIHRva2VuIGlzIHByZXNlbnQpLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7ZmF1Y2V0QWxsb3dlZCA/IChcbiAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPlBsYXluZXQgcGFzdCBzdWJzaWR5IOKAlCB1c2UgdGhlIG5ldHdvcms8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPkJpdGNvaW4gUDJQPC9zdHJvbmc+IChyZWd0ZXN0IDxjb2RlPjoxODQ0NDwvY29kZT4pIGFuZCA8c3Ryb25nPkZhYnJpYyBUQ1A8L3N0cm9uZz4gKDxjb2RlPjo3Nzc3PC9jb2RlPikgYXJlIGRpZmZlcmVudCBsYXllcnMuXG4gICAgICAgICAgICAgICAgVW5kZXIgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pblwiPkJpdGNvaW48L0xpbms+IOKGkiA8c3Ryb25nPk5ldHdvcms8L3N0cm9uZz4sIHdhaXQgZm9yIG91dGJvdW5kIFAyUCBjb25uZWN0aW9ucyB0byB5b3VyIGNvbmZpZ3VyZWR7JyAnfVxuICAgICAgICAgICAgICAgIDxjb2RlPmFkZG5vZGU8L2NvZGU+IHRhcmdldHMgc28geW91IHNoYXJlIHRoZSBzYW1lIGNoYWluIGFzIG90aGVyIHBsYXluZXQgbm9kZXMuXG4gICAgICAgICAgICAgICAgVW5kZXIgPExpbmsgdG89XCIvcGVlcnNcIj5QZWVyczwvTGluaz4sIHVzZSA8c3Ryb25nPkFkZCBwcmltYXJ5IGh1Yjwvc3Ryb25nPiAoPGNvZGU+aHViLmZhYnJpYy5wdWI6Nzc3NzwvY29kZT4pIGZvciBibG9jayBnb3NzaXAgYW5kIGRpc2NvdmVyeS5cbiAgICAgICAgICAgICAgICBJZiA8c3Ryb25nPnRoaXM8L3N0cm9uZz4gaHViJmFwb3M7cyB3YWxsZXQgY2Fubm90IGZ1bmQgeW91LCBvcGVuIHRoZSBwdWJsaWMgcmVndGVzdCBmYXVjZXQgaW4gYW5vdGhlciB0YWIg4oCUeycgJ31cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9odWIuZmFicmljLnB1Yi9zZXJ2aWNlcy9iaXRjb2luL2ZhdWNldFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5odWIuZmFicmljLnB1Yi9zZXJ2aWNlcy9iaXRjb2luL2ZhdWNldDwvYT5cbiAgICAgICAgICAgICAgICB7JyDigJQgJ31wYXN0ZSB0aGUgc2FtZSByZWNlaXZlIGFkZHJlc3MgYXMgPHN0cm9uZz5Vc2UgbXkgYWRkcmVzczwvc3Ryb25nPiBoZXJlLCB0aGVuIHVzZSA8c3Ryb25nPkdlbmVyYXRlIGJsb2NrPC9zdHJvbmc+IG9ueycgJ31cbiAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luI2ZhYnJpYy1iaXRjb2luLXJlZ3Rlc3QtdG9vbGJhclwiPnlvdXIgQml0Y29pbjwvTGluaz4gZGFzaGJvYXJkIHNvIHRoZSBwYXltZW50IGNvbmZpcm1zLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgPFNlZ21lbnRcbiAgICAgICAgICBpZD1cImZhYnJpYy1iaXRjb2luLWZhdWNldC1odWItd2FsbGV0XCJcbiAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmh1YkJpdGNvaW5Mb2FkaW5nfVxuICAgICAgICAgIGFyaWEtYnVzeT17dGhpcy5zdGF0ZS5odWJCaXRjb2luTG9hZGluZyA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzAuNWVtJywgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiIHN0eWxlPXt7IG1hcmdpbjogMCwgZmxleDogJzEgMSBhdXRvJyB9fT5cbiAgICAgICAgICAgICAgSHViIHdhbGxldCAoZmF1Y2V0IHNvdXJjZSlcbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaHViQml0Y29pbkxvYWRpbmd9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgdGhpcy5yZWZyZXNoSHViV2FsbGV0U3RhdHVzKCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgUmVmcmVzaFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3RoaXMuc3RhdGUuaHViQml0Y29pbkVycm9yID8gKFxuICAgICAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmUgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlxuICAgICAgICAgICAgICBDb3VsZCBub3QgbG9hZCBodWIgQml0Y29pbiBzdGF0dXM6IHt0aGlzLnN0YXRlLmh1YkJpdGNvaW5FcnJvcn1cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5odWJVdHhvc0Vycm9yID8gKFxuICAgICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+XG4gICAgICAgICAgICAgIENvdWxkIG5vdCBsb2FkIGh1YiBVVFhPIGxpc3QgKGxpbWl0cyBmcmFnbWVudGF0aW9uIGNoZWNrcyk6IHt0aGlzLnN0YXRlLmh1YlV0eG9zRXJyb3J9XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgeyF0aGlzLnN0YXRlLmh1YkJpdGNvaW5FcnJvciAmJiAhdGhpcy5zdGF0ZS5odWJCaXRjb2luTG9hZGluZyAmJiAhZGV0YWlsID8gKFxuICAgICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+XG4gICAgICAgICAgICAgIE5vIHN0YXR1cyBsb2FkZWQgeWV0LiBDaG9vc2UgUmVmcmVzaC5cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7aHViUmVhZHkgPyAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGxpbmVIZWlnaHQ6IDEuNiB9fT5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPk5ldHdvcms6PC9zdHJvbmc+IHtiaXRjb2luTmV0d29yayB8fCAn4oCUJ31cbiAgICAgICAgICAgICAgICB7Y2hhaW5IZWlnaHQgIT0gbnVsbCA/IChcbiAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICDCtyA8c3Ryb25nPkhlaWdodDo8L3N0cm9uZz4ge2NoYWluSGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAge2h1YlNhdHMgIT0gbnVsbCA/IChcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPlRydXN0ZWQgYmFsYW5jZSAoaHViIGJpdGNvaW5kKTo8L3N0cm9uZz57JyAnfVxuICAgICAgICAgICAgICAgICAge2h1YkJ0YyAhPSBudWxsID8gaHViQnRjLnRvRml4ZWQoOCkgOiAnMC4wMDAwMDAwMCd9IEJUQyAoe2h1YlNhdHMudG9Mb2NhbGVTdHJpbmcoKX0gc2F0cylcbiAgICAgICAgICAgICAgICAgIHtzdWdnZXN0ZWRGYXVjZXRTYXRzICE9IG51bGwgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdibG9jaycsIG1hcmdpblRvcDogJzAuMzVlbScsIGNvbG9yOiAnIzU1NScsIGZvbnRTaXplOiAnMC45NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICBPbiBzaGFyZWQgcmVndGVzdCAvIHBsYXluZXQsIHRoZSBodWIgd2FsbGV0IG1heSBiZSBsb3cgaWYgb3RoZXIgbm9kZXMgbWluZWQ7IHB1bGwgYXQgbW9zdHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57c3VnZ2VzdGVkRmF1Y2V0U2F0cy50b0xvY2FsZVN0cmluZygpfSBzYXRzPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAge3NwZW5kSGludHMuaGFkVXR4b0xpc3QgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAofntzcGVuZEhpbnRzLnNhdFBlclZieXRlfSBzYXQvdkIsIHtzcGVuZEhpbnRzLnV0eG9Db3VudH0gVVRYT1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7c3BlbmRIaW50cy51dHhvQ291bnQgPT09IDEgPyAnJyA6ICdzJ30sIGZlZSByZXNlcnZlIH57c3BlbmRIaW50cy5mZWVSZXNlcnZlU2F0cy50b0xvY2FsZVN0cmluZygpfXsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNhdHMpLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICh+e3NwZW5kSGludHMuc2F0UGVyVmJ5dGV9IHNhdC92QiwgZmVlIHJlc2VydmUgfntzcGVuZEhpbnRzLmZlZVJlc2VydmVTYXRzLnRvTG9jYWxlU3RyaW5nKCl9IHNhdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2ggYWZ0ZXIgVVRYTyBsaXN0IGxvYWRzIGZvciB0aWdodGVyIGJvdW5kcykuXG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApIDogaHViU2F0cyAhPSBudWxsICYmIGh1YlNhdHMgPD0gc3BlbmRIaW50cy5mZWVSZXNlcnZlU2F0cyA/IChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2Jsb2NrJywgbWFyZ2luVG9wOiAnMC4zNWVtJywgY29sb3I6ICcjOGE2ZDNiJywgZm9udFNpemU6ICcwLjk1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIEJhbGFuY2UgaXMgdG9vIGxvdyBmb3IgYSBzYWZlIGZhdWNldCBzZW5kIGFmdGVyIGZlZXMg4oCUIHB1Ymxpc2ggb3IgdHJhZGUgb24gdGhlIG5ldHdvcmsgaW5zdGVhZCBvZlxuICAgICAgICAgICAgICAgICAgICAgIGRyYWluaW5nIHRoaXMgaHViLlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtkZXRhaWwgJiYgZGV0YWlsLm1lbXBvb2xUeENvdW50ICE9IG51bGwgJiYgTnVtYmVyKGRldGFpbC5tZW1wb29sVHhDb3VudCkgPiAwID8gKFxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNWVtIDAgMCcsIGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIE1lbXBvb2w6IHtkZXRhaWwubWVtcG9vbFR4Q291bnR9IHR4XG4gICAgICAgICAgICAgICAgICB7ZmF1Y2V0QWxsb3dlZFxuICAgICAgICAgICAgICAgICAgICA/ICcg4oCUIHVuY29uZmlybWVkIHNlbmRzIChpbmNsdWRpbmcgZmF1Y2V0KSBjb25maXJtIGFmdGVyIHlvdSBtaW5lIGEgYmxvY2suJ1xuICAgICAgICAgICAgICAgICAgICA6ICcnfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtmYXVjZXRBbGxvd2VkID8gKFxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNWVtIDAgMCcsIGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIElmIHRoZSBodWIgd2FsbGV0IGlzIGVtcHR5LCBvcGVueycgJ31cbiAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4jZmFicmljLWJpdGNvaW4tcmVndGVzdC10b29sYmFyXCI+Qml0Y29pbiDihpIgUmVndGVzdCB0b29sYmFyPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgeycgJ31hbmQgdXNlIDxzdHJvbmc+R2VuZXJhdGUgYmxvY2s8L3N0cm9uZz4gKGFkbWluKSBzbyBjb2luYmFzZSBwYXlzIGludG8gdGhlIGh1YiB3YWxsZXQsIHRoZW4gcmV0dXJuIGhlcmUuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIEZhdWNldCBpcyBvbmx5IGF2YWlsYWJsZSBvbiA8c3Ryb25nPnJlZ3Rlc3Q8L3N0cm9uZz4uIFRoaXMgaHViIHJlcG9ydHMgPHN0cm9uZz57Yml0Y29pbk5ldHdvcmsgfHwgJ3Vua25vd24nfTwvc3Ryb25nPi5cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7IWh1YlJlYWR5ICYmIGRldGFpbCAmJiAhdGhpcy5zdGF0ZS5odWJCaXRjb2luTG9hZGluZyA/IChcbiAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlxuICAgICAgICAgICAgICBCaXRjb2luIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGh1YlxuICAgICAgICAgICAgICB7ZGV0YWlsLnN0YXR1cyA/IGAgKCR7ZGV0YWlsLnN0YXR1c30pYCA6ICcnfS5cbiAgICAgICAgICAgICAge2RldGFpbC5tZXNzYWdlID8gYCAke2RldGFpbC5tZXNzYWdlfWAgOiAnJ31cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5mYXVjZXROb3RpY2UgPyAoXG4gICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpblRvcDogMCB9fT5cbiAgICAgICAgICAgICAge3RoaXMuc3RhdGUuZmF1Y2V0Tm90aWNlfVxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHt0aGlzLnN0YXRlLmZhdWNldExhc3RTdGF0dXMgPyAoXG4gICAgICAgICAgICA8TWVzc2FnZVxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBwb3NpdGl2ZT17ISF0aGlzLnN0YXRlLmZhdWNldExhc3RTdGF0dXMub2t9XG4gICAgICAgICAgICAgIG5lZ2F0aXZlPXshdGhpcy5zdGF0ZS5mYXVjZXRMYXN0U3RhdHVzLm9rfVxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6IHRoaXMuc3RhdGUuZmF1Y2V0Tm90aWNlID8gJzAuNWVtJyA6IDAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+TGFzdCBmYXVjZXQgcmVxdWVzdDo8L3N0cm9uZz57JyAnfVxuICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmZhdWNldExhc3RTdGF0dXMub2sgPyAnYWNjZXB0ZWQnIDogJ2ZhaWxlZCd9XG4gICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuZmF1Y2V0TGFzdFN0YXR1cy5hbW91bnRTYXRzICE9IG51bGxcbiAgICAgICAgICAgICAgICAgID8gYCDCtyAke3RoaXMuc3RhdGUuZmF1Y2V0TGFzdFN0YXR1cy5hbW91bnRTYXRzfSBzYXRzYFxuICAgICAgICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5mYXVjZXRMYXN0U3RhdHVzLmFkZHJlc3NcbiAgICAgICAgICAgICAgICAgID8gYCDCtyAke3RoaXMuc3RhdGUuZmF1Y2V0TGFzdFN0YXR1cy5hZGRyZXNzfWBcbiAgICAgICAgICAgICAgICAgIDogJyd9XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAge3RoaXMuc3RhdGUuZmF1Y2V0TGFzdFN0YXR1cy50eGlkID8gKFxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PlxuICAgICAgICAgICAgICAgICAgVHhpZDoge3RoaXMuc3RhdGUuZmF1Y2V0TGFzdFN0YXR1cy50eGlkfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmZhdWNldExhc3RTdGF0dXMuZXJyb3IgPyAoXG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+XG4gICAgICAgICAgICAgICAgICBFcnJvcjoge3RoaXMuc3RhdGUuZmF1Y2V0TGFzdFN0YXR1cy5lcnJvcn1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHthbW91bnRFeGNlZWRzSHViICYmIGZhdWNldEFsbG93ZWQgPyAoXG4gICAgICAgICAgICA8TWVzc2FnZSB3YXJuaW5nIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpblRvcDogMCB9fT5cbiAgICAgICAgICAgICAgUmVxdWVzdCAoe051bWJlci5pc0Zpbml0ZShhbW91bnRTYXRzTnVtKSA/IGFtb3VudFNhdHNOdW0udG9Mb2NhbGVTdHJpbmcoKSA6ICfigJQnfSBzYXRzKSBpcyBhYm92ZSB3aGF0IHRoaXMgaHViXG4gICAgICAgICAgICAgIGNhbiBhZmZvcmQgYWZ0ZXIgZmVlcyBhbmQgZHVzdCByZXNlcnZlICh7bWF4QWZmb3JkYWJsZVNhdHMudG9Mb2NhbGVTdHJpbmcoKX0gc2F0cyBtYXgpLiBMb3dlciB0aGUgYW1vdW50IG9yIHVzZXsnICd9XG4gICAgICAgICAgICAgIDxzdHJvbmc+VXNlIG1heCBhZmZvcmRhYmxlPC9zdHJvbmc+LlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHtyZWNpcGllbnRCZWxvd0R1c3QgJiYgZmF1Y2V0QWxsb3dlZCA/IChcbiAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlxuICAgICAgICAgICAgICBBbW91bnQgaXMgYmVsb3cgdGhlIHJlbGF5IGR1c3QgZmxvb3IgKHtzcGVuZEhpbnRzLm1pblJlY2lwaWVudFNhdHN9IHNhdHMpLiBFbnRlciBhdCBsZWFzdCB0aGF0IG1hbnkgc2F0cy5cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7ZnJhZ21lbnRhdGlvbkJsb2Nrc1BheSAmJiBmYXVjZXRBbGxvd2VkID8gKFxuICAgICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+XG4gICAgICAgICAgICAgIFdpdGggdGhlIGN1cnJlbnQgVVRYTyBzZXQgYW5kIGZlZSByYXRlLCB0aGlzIGFtb3VudCBpcyB1bmxpa2VseSB0byBidWlsZCB3aXRob3V0IG1lcmdpbmcgaW5wdXRzIChsYXJnZXN0IGNvaW57JyAnfVxuICAgICAgICAgICAgICB7c3BlbmRIaW50cy5sYXJnZXN0VXR4b1NhdHMudG9Mb2NhbGVTdHJpbmcoKX0gc2F0cykuIFVzZSBhIHNtYWxsZXIgYW1vdW50IG9yIGNvbnNvbGlkYXRlIG9uIHRoZSBub2RlLlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxGb3JtXG4gICAgICAgICAgICBvblN1Ym1pdD17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICB2b2lkIHRoaXMucmVxdWVzdEZhdWNldCgpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPGxhYmVsPlNlbmQgdG8gYWRkcmVzcyAoe2JpdGNvaW5OZXR3b3JrIHx8ICdhbnknfSk8L2xhYmVsPlxuICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImJjcnQxLi4uIG9yIG0vNDQnLzAnLzAnLzAvMFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuc2VuZFRvfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IHNlbmRUbzogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgYWN0aW9uPXt7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLnN0YXRlLnJlc29sdmluZ0FkZHJlc3MgPyAnTG9hZGluZ+KApicgOiAnVXNlIG15IGFkZHJlc3MnLFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuc3RhdGUucmVzb2x2aW5nQWRkcmVzcyB8fCB0aGlzLnN0YXRlLmxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB0aGlzLnVzZU15QWRkcmVzcygpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgIDxGb3JtLkZpZWxkIHdpZHRoPXs0fT5cbiAgICAgICAgICAgICAgPGxhYmVsPkFtb3VudCAoc2F0cyk8L2xhYmVsPlxuICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuYW1vdW50U2F0c31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBhbW91bnRTYXRzOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICBhY3Rpb249e1xuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkRmF1Y2V0U2F0cyAhPSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogYFVzZSBtYXggYWZmb3JkYWJsZSAoJHtzdWdnZXN0ZWRGYXVjZXRTYXRzLnRvTG9jYWxlU3RyaW5nKCl9KWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5zdGF0ZS5sb2FkaW5nIHx8IHRoaXMuc3RhdGUucmVzb2x2aW5nQWRkcmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudFNhdHM6IFN0cmluZyhzdWdnZXN0ZWRGYXVjZXRTYXRzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXVjZXRSZXN1bHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF1Y2V0Tm90aWNlOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHByaW1hcnlcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmxvYWRpbmcgfHwgdGhpcy5zdGF0ZS5yZXNvbHZpbmdBZGRyZXNzfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnJlcXVlc3RGYXVjZXQoKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInRpbnRcIiAvPlxuICAgICAgICAgICAgICBSZXF1ZXN0IGZyb20gZmF1Y2V0XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAge3RoaXMuc3RhdGUuZmF1Y2V0UmVzdWx0ID8gKFxuICAgICAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmU9eyEhdGhpcy5zdGF0ZS5mYXVjZXRSZXN1bHQuZXJyb3J9IHBvc2l0aXZlPXshdGhpcy5zdGF0ZS5mYXVjZXRSZXN1bHQuZXJyb3J9IHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgIDxwcmUgc3R5bGU9e3sgd2hpdGVTcGFjZTogJ3ByZS13cmFwJywgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsIG1hcmdpbjogMCB9fT57SlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZS5mYXVjZXRSZXN1bHQsIG51bGwsIDIpfTwvcHJlPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRmF1Y2V0SG9tZTtcbiJdLCJuYW1lcyI6WyJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3JlZ2VuZXJhdG9yIiwiU3ltYm9sIiwibiIsIml0ZXJhdG9yIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfbmV4dCIsIl90aHJvdyIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiX3RvUHJpbWl0aXZlIiwiX3R5cGVvZiIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJSZWZlcmVuY2VFcnJvciIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwiX2luaGVyaXRzIiwiX3NldFByb3RvdHlwZU9mIiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJMaW5rIiwiX3JlcXVpcmUyIiwiQnV0dG9uIiwiRm9ybSIsIkhlYWRlciIsIkljb24iLCJJbnB1dCIsIk1lc3NhZ2UiLCJTZWdtZW50IiwiX3JlcXVpcmUzIiwiZmV0Y2hCaXRjb2luU3RhdHVzIiwiZmV0Y2hSZWNlaXZlQWRkcmVzcyIsImZldGNoVVRYT3MiLCJnZXROZXh0UmVjZWl2ZVdhbGxldENvbnRleHQiLCJsb2FkVXBzdHJlYW1TZXR0aW5ncyIsInJlcXVlc3RGYXVjZXQiLCJjbGVhckJhbGFuY2VDYWNoZSIsIl9yZXF1aXJlNCIsInJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIiLCJfcmVxdWlyZTUiLCJjb21wdXRlSHViV2FsbGV0U3BlbmRIaW50cyIsIl9yZXF1aXJlNiIsImZ1bmRMb2NhbEtleUZyb21IdWJGYXVjZXQiLCJfcmVxdWlyZTciLCJTQVRTX1BFUl9CVEMiLCJodWJXYWxsZXRTYXRzRnJvbURldGFpbCIsImRldGFpbCIsImF2YWlsYWJsZSIsImJhbGFuY2VTYXRzIiwiaXNGaW5pdGUiLCJNYXRoIiwicm91bmQiLCJiIiwiYmFsYW5jZSIsIk5hTiIsIkZhdWNldEhvbWUiLCJfUmVhY3QkQ29tcG9uZW50IiwicHJvcHMiLCJfdGhpcyIsInN0YXRlIiwibG9hZGluZyIsInJlc29sdmluZ0FkZHJlc3MiLCJ1cHN0cmVhbSIsInNlbmRUbyIsImFtb3VudFNhdHMiLCJmYXVjZXRSZXN1bHQiLCJmYXVjZXROb3RpY2UiLCJmYXVjZXRMYXN0U3RhdHVzIiwiaHViQml0Y29pbkRldGFpbCIsImh1YkJpdGNvaW5Mb2FkaW5nIiwiaHViQml0Y29pbkVycm9yIiwiaHViV2FsbGV0VXR4b3MiLCJodWJVdHhvc0Vycm9yIiwiZnVuZE15QnVzeSIsImNvbXBvbmVudERpZE1vdW50IiwicmVmcmVzaEh1YldhbGxldFN0YXR1cyIsIl9mdW5kTXlXYWxsZXQiLCJfY2FsbGVlIiwiX3RoaXMyIiwiaWRlbnRpdHkiLCJodWJEZXRhaWwiLCJuZXR3b3JrIiwiZnVuZGVkIiwibWVzc2FnZSIsIl90IiwiX2NvbnRleHQiLCJ4cHViIiwic2V0U3RhdGUiLCJlcnJvciIsInRvTG93ZXJDYXNlIiwiYml0Y29pbiIsImFkbWluVG9rZW4iLCJtaW5lQ29uZmlybSIsImFkZHJlc3MiLCJvayIsInR4aWQiLCJtaW5lZCIsImNvbmNhdCIsInRvTG9jYWxlU3RyaW5nIiwic2xpY2UiLCJ3aGVuIiwiRGF0ZSIsIm5vdyIsImZ1bmRNeVdhbGxldCIsIl9yZWZyZXNoSHViV2FsbGV0U3RhdHVzIiwiX2NhbGxlZTIiLCJsaXN0IiwiX3QyIiwiX3QzIiwiX2NvbnRleHQyIiwiaHViQWRtaW5Ub2tlbiIsIndhbGxldE5hbWUiLCJ3YWxsZXRJZCIsIkFycmF5IiwiaXNBcnJheSIsIl91c2VNeUFkZHJlc3MiLCJfY2FsbGVlMyIsIndhbGxldCIsIl90NCIsIl9jb250ZXh0MyIsInVzZU15QWRkcmVzcyIsIl9yZXF1ZXN0RmF1Y2V0MiIsIl9jYWxsZWU0IiwiX3RoaXMzIiwiaHViU2F0c1ByZSIsInV0eG9MaXN0IiwibmV0UHJlIiwiaGludHNQcmUiLCJyZXN1bHQiLCJub3JtYWxpemVkIiwiaGFzRXhwbGljaXRFcnJvciIsInR4aWRUZXh0IiwiX3Q1IiwiX2NvbnRleHQ0IiwidHJpbSIsInV0eG9zIiwibWVtcG9vbEluZm8iLCJmYXVjZXRDYXBTYXRzIiwidGFyZ2V0QW1vdW50U2F0cyIsIm1pblJlY2lwaWVudFNhdHMiLCJjYW5QYXlUYXJnZXQiLCJ0cmFuc2FjdGlvbklkIiwiaWQiLCJ1bmRlZmluZWQiLCJfIiwid2luZG93IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwicmVuZGVyIiwiX3RoaXM0Iiwid3NCaXRjb2luIiwiYml0Y29pbk5ldHdvcmsiLCJodWJTYXRzIiwiaHViQnRjIiwiY2hhaW5IZWlnaHQiLCJoZWlnaHQiLCJhbW91bnRTYXRzTnVtIiwidXR4b0xpc3RSZW5kZXIiLCJzcGVuZEhpbnRzIiwibWF4QWZmb3JkYWJsZVNhdHMiLCJzdWdnZXN0ZWRGYXVjZXRTYXRzIiwibWluIiwibWF4IiwiYW1vdW50RXhjZWVkc0h1YiIsInJlY2lwaWVudEJlbG93RHVzdCIsImZyYWdtZW50YXRpb25CbG9ja3NQYXkiLCJoYWRVdHhvTGlzdCIsImh1YlJlYWR5IiwiZmF1Y2V0QWxsb3dlZCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwiZ2FwIiwiZmxleFdyYXAiLCJhcyIsInRvIiwiYmFzaWMiLCJzaXplIiwibmFtZSIsIm1hcmdpbiIsIkNvbnRlbnQiLCJjb2xvciIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsInByaW1hcnkiLCJ0eXBlIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwiZm9udFNpemUiLCJpbmZvIiwibGluZUhlaWdodCIsImhyZWYiLCJ0YXJnZXQiLCJyZWwiLCJmbGV4IiwibmVnYXRpdmUiLCJ3YXJuaW5nIiwidG9GaXhlZCIsIkZyYWdtZW50Iiwic2F0UGVyVmJ5dGUiLCJ1dHhvQ291bnQiLCJmZWVSZXNlcnZlU2F0cyIsIm1lbXBvb2xUeENvdW50Iiwic3RhdHVzIiwicG9zaXRpdmUiLCJ3b3JkQnJlYWsiLCJsYXJnZXN0VXR4b1NhdHMiLCJvblN1Ym1pdCIsInByZXZlbnREZWZhdWx0IiwiRmllbGQiLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwiYWN0aW9uIiwiY29udGVudCIsIndpZHRoIiwic3RlcCIsIndoaXRlU3BhY2UiLCJKU09OIiwic3RyaW5naWZ5IiwiQ29tcG9uZW50IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/FaucetHome.js\n\n}')},"./components/FeaturesPage.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Marketing / tour at `/features` (gated by Feature visibility). Splash FrontPage “Learn more” uses `#front-page-features`; keep grids aligned.\n */\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Container = _require2.Container,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! ../locales/en */ "./locales/en/index.js"),\n BRAND_NAME = _require3.BRAND_NAME,\n BRAND_TAGLINE = _require3.BRAND_TAGLINE,\n PITCH_CTA_TEXT = _require3.PITCH_CTA_TEXT;\nvar _require4 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require4.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require4.subscribeHubUiFeatureFlags;\nvar _require5 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require5.readHubAdminTokenFromBrowser;\nvar _require6 = __webpack_require__(/*! ../functions/hubIdentityUiHints */ "./functions/hubIdentityUiHints.js"),\n featuresPageIdentityButtonLabelFromStorage = _require6.featuresPageIdentityButtonLabelFromStorage;\nvar _require7 = __webpack_require__(/*! ../functions/fabricBrowserState */ "./functions/fabricBrowserState.js"),\n readStorageJSON = _require7.readStorageJSON;\nfunction FeaturesPage() {\n var _React$useState = React.useState(0),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n hubUiTick = _React$useState2[0],\n setHubUiTick = _React$useState2[1];\n var _React$useState3 = React.useState(\'Log in\'),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n identityButtonLabel = _React$useState4[0],\n setIdentityButtonLabel = _React$useState4[1];\n var refreshIdentityButtonLabel = React.useCallback(function () {\n if (typeof window === \'undefined\') {\n setIdentityButtonLabel(\'Log in\');\n return;\n }\n var sessionUnlocked = null;\n try {\n var unlockedRaw = window.sessionStorage && window.sessionStorage.getItem(\'fabric.identity.unlocked\');\n if (unlockedRaw) sessionUnlocked = JSON.parse(unlockedRaw);\n } catch (_) {\n sessionUnlocked = null;\n }\n var local = null;\n try {\n local = readStorageJSON(\'fabric.identity.local\', null);\n } catch (_) {\n local = null;\n }\n setIdentityButtonLabel(featuresPageIdentityButtonLabelFromStorage(local, sessionUnlocked));\n }, []);\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setHubUiTick(function (t) {\n return t + 1;\n });\n });\n }, []);\n React.useEffect(function () {\n refreshIdentityButtonLabel();\n if (typeof window === \'undefined\') return undefined;\n var onStorage = function onStorage() {\n return refreshIdentityButtonLabel();\n };\n window.addEventListener(\'storage\', onStorage);\n return function () {\n return window.removeEventListener(\'storage\', onStorage);\n };\n }, [refreshIdentityButtonLabel]);\n void hubUiTick;\n var uf = loadHubUiFeatureFlags();\n var hasAdminToken = !!readHubAdminTokenFromBrowser();\n var showPeersShortcut = uf.peers && hasAdminToken;\n return /*#__PURE__*/React.createElement("fabric-hub-features", {\n className: "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/",\n basic: true,\n size: "small",\n "aria-label": "Back to home"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Home"), /*#__PURE__*/React.createElement(Header, {\n as: "h1",\n id: "features-page-heading",\n style: {\n marginTop: \'0.75em\'\n }\n }, "Features"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n maxWidth: \'42rem\',\n lineHeight: 1.45\n }\n }, /*#__PURE__*/React.createElement("strong", null, BRAND_NAME), " \\u2014 ", BRAND_TAGLINE, ". Identity and signing use standard Bitcoin cryptography (secp256k1; BIP32/BIP39-style keys in the browser). ", /*#__PURE__*/React.createElement("strong", null, "Distributed storage"), " (publish, distribute, encrypted documents) and ", /*#__PURE__*/React.createElement("strong", null, "distributed execution"), " (deterministic programs, optional L1-backed registry) live under Documents and Contracts. The", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin"\n }, "Bitcoin"), " dashboard stays available; Notifications, the activity log, Features, block/tx explorer, and other areas follow toggles in", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/admin"\n }, "Admin"), " \\u2192 Feature visibility. The shortcuts below match home and the ", /*#__PURE__*/React.createElement("strong", null, "More"), " menu when those routes are enabled.")), /*#__PURE__*/React.createElement("div", {\n className: "ui vertical stripe segment"\n }, /*#__PURE__*/React.createElement(Container, {\n text: true\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n style: {\n fontSize: \'2em\',\n textAlign: \'center\'\n }\n }, PITCH_CTA_TEXT), /*#__PURE__*/React.createElement("div", {\n className: "ui three column stackable grid",\n style: {\n marginTop: \'2em\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n className: "column"\n }, /*#__PURE__*/React.createElement("div", {\n className: "ui segment"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n textAlign: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield",\n size: "large",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Security")), /*#__PURE__*/React.createElement("p", {\n style: {\n textAlign: \'center\'\n }\n }, "Portable browser identity (standard secp256k1 / BIP32-style keys), unlock/lock, end-to-end encryption for documents, and optional desktop delegation in", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/security"\n }, "Security & delegation"), "."))), /*#__PURE__*/React.createElement("div", {\n className: "column"\n }, /*#__PURE__*/React.createElement("div", {\n className: "ui segment"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n textAlign: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users",\n size: "large",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Collaboration")), /*#__PURE__*/React.createElement("p", {\n style: {\n textAlign: \'center\'\n }\n }, "Fabric peers, WebRTC mesh, chat, and document workflows (publish, distribute, optional encrypted inventory).", uf.sidechain ? /*#__PURE__*/React.createElement(React.Fragment, null, " Global ", /*#__PURE__*/React.createElement(Link, {\n to: "/sidechains"\n }, "Sidechain"), " state and ") : /*#__PURE__*/React.createElement(React.Fragment, null, " Global sidechain state (enable Sidechain in Admin \\u2192 Feature visibility) and "), /*#__PURE__*/React.createElement(Link, {\n to: "/contracts"\n }, "Contracts"), " (storage + execution) tie into the same hub."))), /*#__PURE__*/React.createElement("div", {\n className: "column"\n }, /*#__PURE__*/React.createElement("div", {\n className: "ui segment"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n textAlign: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin",\n size: "large",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Bitcoin")), /*#__PURE__*/React.createElement("p", {\n style: {\n textAlign: \'center\'\n }\n }, "Regtest tooling, invoices, Payjoin-oriented payments, and Lightning when enabled. Beacon epochs bind hub state to L1; execution runs use a deterministic commitment separate from federation witnesses", uf.sidechain ? /*#__PURE__*/React.createElement(React.Fragment, null, " \\u2014 see ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings/admin/beacon-federation"\n }, "Beacon Federation"), ".") : /*#__PURE__*/React.createElement(React.Fragment, null, " \\u2014 enable Sidechain in Admin \\u2192 Feature visibility for the Beacon Federation walkthrough."))))))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n color: "blue",\n icon: true,\n labelPosition: "left",\n type: "button",\n title: "Open the same Fabric identity manager as the top bar (create, import, unlock)",\n "aria-label": "Fabric identity \\u2014 ".concat(identityButtonLabel),\n onClick: function onClick() {\n if (typeof window !== \'undefined\') {\n window.dispatchEvent(new CustomEvent(\'fabricOpenIdentityManager\'));\n }\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "user",\n "aria-hidden": "true"\n }), identityButtonLabel), showPeersShortcut ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/peers",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sitemap",\n "aria-hidden": "true"\n }), "Peers") : null, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/documents",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file outline",\n "aria-hidden": "true"\n }), "Documents"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/contracts",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file code",\n "aria-hidden": "true"\n }), "Contracts"), uf.activities ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/notifications",\n basic: true,\n icon: true,\n labelPosition: "left",\n title: "Wallet, Payjoin, and hub toasts (bell in the top bar)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bell outline",\n "aria-hidden": "true"\n }), "Notifications") : null, uf.activities ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/activities",\n basic: true,\n icon: true,\n labelPosition: "left",\n title: "Hub message log, chat, Bitcoin blocks"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "comments",\n "aria-hidden": "true"\n }), "Activity log") : null, uf.sidechain ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/sidechains",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "random",\n "aria-hidden": "true"\n }), "Sidechain") : null, uf.sidechain ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings/admin/beacon-federation",\n basic: true,\n icon: true,\n labelPosition: "left",\n title: "L1-bound beacon epochs, manifest, federation witnesses"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "star",\n "aria-hidden": "true"\n }), "Beacon Federation") : null, uf.sidechain ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/federations",\n basic: true,\n icon: true,\n labelPosition: "left",\n title: "Multi-sig validator policy (k-of-n)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users",\n "aria-hidden": "true"\n }), "Federations") : null, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin",\n "aria-hidden": "true"\n }), "Bitcoin"), uf.bitcoinPayments ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/payments",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "credit card outline",\n "aria-hidden": "true"\n }), "Payments") : null, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/invoices#fabric-invoices-tab-demo",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate outline",\n "aria-hidden": "true"\n }), "Invoices"), uf.bitcoinLightning ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin#fabric-bitcoin-lightning",\n basic: true,\n icon: true,\n labelPosition: "left",\n title: "Invoices, decode, pay via Hub Lightning bridge"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt",\n "aria-hidden": "true"\n }), "Lightning") : null, uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/blocks",\n basic: true,\n icon: true,\n labelPosition: "left",\n title: "Block explorer \\u2014 recent blocks and mempool"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "search",\n "aria-hidden": "true"\n }), "Explorer") : null, uf.bitcoinResources ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/resources",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "code",\n "aria-hidden": "true"\n }), "Resources") : null, uf.bitcoinCrowdfund ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/crowdfunds",\n basic: true,\n icon: true,\n labelPosition: "left",\n title: "Taproot vault, ACP donation PSBT, Payjoin to campaign"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "heart outline",\n "aria-hidden": "true"\n }), "Crowdfunds") : null, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings/admin",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "settings",\n "aria-hidden": "true"\n }), "Admin"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "setting",\n "aria-hidden": "true"\n }), "Settings"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings/security",\n basic: true,\n icon: true,\n labelPosition: "left",\n title: "Unlock, delegation, same destination as Log in"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield",\n "aria-hidden": "true"\n }), "Security & delegation"))));\n}\nmodule.exports = FeaturesPage;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0ZlYXR1cmVzUGFnZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFGQSxTQUFBQSxlQUFBQyxDQUFBLEVBQUFDLENBQUEsV0FBQUMsZUFBQSxDQUFBRixDQUFBLEtBQUFHLHFCQUFBLENBQUFILENBQUEsRUFBQUMsQ0FBQSxLQUFBRywyQkFBQSxDQUFBSixDQUFBLEVBQUFDLENBQUEsS0FBQUksZ0JBQUE7QUFBQSxTQUFBQSxpQkFBQSxjQUFBQyxTQUFBO0FBQUEsU0FBQUYsNEJBQUFKLENBQUEsRUFBQU8sQ0FBQSxRQUFBUCxDQUFBLDJCQUFBQSxDQUFBLFNBQUFRLGlCQUFBLENBQUFSLENBQUEsRUFBQU8sQ0FBQSxPQUFBRSxDQUFBLE1BQUFDLFFBQUEsQ0FBQUMsSUFBQSxDQUFBWCxDQUFBLEVBQUFZLEtBQUEsNkJBQUFILENBQUEsSUFBQVQsQ0FBQSxDQUFBYSxXQUFBLEtBQUFKLENBQUEsR0FBQVQsQ0FBQSxDQUFBYSxXQUFBLENBQUFDLElBQUEsYUFBQUwsQ0FBQSxjQUFBQSxDQUFBLEdBQUFNLEtBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxvQkFBQVMsQ0FBQSwrQ0FBQVEsSUFBQSxDQUFBUixDQUFBLElBQUFELGlCQUFBLENBQUFSLENBQUEsRUFBQU8sQ0FBQTtBQUFBLFNBQUFDLGtCQUFBUixDQUFBLEVBQUFPLENBQUEsYUFBQUEsQ0FBQSxJQUFBQSxDQUFBLEdBQUFQLENBQUEsQ0FBQWtCLE1BQUEsTUFBQVgsQ0FBQSxHQUFBUCxDQUFBLENBQUFrQixNQUFBLFlBQUFqQixDQUFBLE1BQUFrQixDQUFBLEdBQUFKLEtBQUEsQ0FBQVIsQ0FBQSxHQUFBTixDQUFBLEdBQUFNLENBQUEsRUFBQU4sQ0FBQSxJQUFBa0IsQ0FBQSxDQUFBbEIsQ0FBQSxJQUFBRCxDQUFBLENBQUFDLENBQUEsVUFBQWtCLENBQUE7QUFBQSxTQUFBaEIsc0JBQUFILENBQUEsRUFBQW9CLENBQUEsUUFBQVgsQ0FBQSxXQUFBVCxDQUFBLGdDQUFBcUIsTUFBQSxJQUFBckIsQ0FBQSxDQUFBcUIsTUFBQSxDQUFBQyxRQUFBLEtBQUF0QixDQUFBLDRCQUFBUyxDQUFBLFFBQUFSLENBQUEsRUFBQWtCLENBQUEsRUFBQUksQ0FBQSxFQUFBQyxDQUFBLEVBQUFqQixDQUFBLE9BQUFrQixDQUFBLE9BQUFDLENBQUEsaUJBQUFILENBQUEsSUFBQWQsQ0FBQSxHQUFBQSxDQUFBLENBQUFFLElBQUEsQ0FBQVgsQ0FBQSxHQUFBMkIsSUFBQSxRQUFBUCxDQUFBLFFBQUFRLE1BQUEsQ0FBQW5CLENBQUEsTUFBQUEsQ0FBQSxVQUFBZ0IsQ0FBQSx1QkFBQUEsQ0FBQSxJQUFBeEIsQ0FBQSxHQUFBc0IsQ0FBQSxDQUFBWixJQUFBLENBQUFGLENBQUEsR0FBQW9CLElBQUEsTUFBQXRCLENBQUEsQ0FBQXVCLElBQUEsQ0FBQTdCLENBQUEsQ0FBQThCLEtBQUEsR0FBQXhCLENBQUEsQ0FBQVcsTUFBQSxLQUFBRSxDQUFBLEdBQUFLLENBQUEsaUJBQUF6QixDQUFBLElBQUEwQixDQUFBLE9BQUFQLENBQUEsR0FBQW5CLENBQUEseUJBQUF5QixDQUFBLFlBQUFoQixDQUFBLGVBQUFlLENBQUEsR0FBQWYsQ0FBQSxjQUFBbUIsTUFBQSxDQUFBSixDQUFBLE1BQUFBLENBQUEsMkJBQUFFLENBQUEsUUFBQVAsQ0FBQSxhQUFBWixDQUFBO0FBQUEsU0FBQUwsZ0JBQUFGLENBQUEsUUFBQWUsS0FBQSxDQUFBaUIsT0FBQSxDQUFBaEMsQ0FBQSxVQUFBQSxDQUFBO0FBSUEsSUFBTWlDLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyw0Q0FBTyxDQUFDO0FBQzlCLElBQUFDLFFBQUEsR0FBaUJELG1CQUFPLENBQUMsdUVBQWtCLENBQUM7RUFBcENFLElBQUksR0FBQUQsUUFBQSxDQUFKQyxJQUFJO0FBQ1osSUFBQUMsU0FBQSxHQUFxREgsbUJBQU8sQ0FBQyw0RUFBbUIsQ0FBQztFQUF6RUksTUFBTSxHQUFBRCxTQUFBLENBQU5DLE1BQU07RUFBRUMsU0FBUyxHQUFBRixTQUFBLENBQVRFLFNBQVM7RUFBRUMsTUFBTSxHQUFBSCxTQUFBLENBQU5HLE1BQU07RUFBRUMsSUFBSSxHQUFBSixTQUFBLENBQUpJLElBQUk7RUFBRUMsT0FBTyxHQUFBTCxTQUFBLENBQVBLLE9BQU87QUFDaEQsSUFBQUMsU0FBQSxHQUlJVCxtQkFBTyxDQUFDLDRDQUFlLENBQUM7RUFIMUJVLFVBQVUsR0FBQUQsU0FBQSxDQUFWQyxVQUFVO0VBQ1ZDLGFBQWEsR0FBQUYsU0FBQSxDQUFiRSxhQUFhO0VBQ2JDLGNBQWMsR0FBQUgsU0FBQSxDQUFkRyxjQUFjO0FBRWhCLElBQUFDLFNBQUEsR0FHSWIsbUJBQU8sQ0FBQyx3RUFBZ0MsQ0FBQztFQUYzQ2MscUJBQXFCLEdBQUFELFNBQUEsQ0FBckJDLHFCQUFxQjtFQUNyQkMsMEJBQTBCLEdBQUFGLFNBQUEsQ0FBMUJFLDBCQUEwQjtBQUU1QixJQUFBQyxTQUFBLEdBQXlDaEIsbUJBQU8sQ0FBQyw4RUFBbUMsQ0FBQztFQUE3RWlCLDRCQUE0QixHQUFBRCxTQUFBLENBQTVCQyw0QkFBNEI7QUFDcEMsSUFBQUMsU0FBQSxHQUF1RGxCLG1CQUFPLENBQUMsMEVBQWlDLENBQUM7RUFBekZtQiwwQ0FBMEMsR0FBQUQsU0FBQSxDQUExQ0MsMENBQTBDO0FBQ2xELElBQUFDLFNBQUEsR0FBNEJwQixtQkFBTyxDQUFDLDBFQUFpQyxDQUFDO0VBQTlEcUIsZUFBZSxHQUFBRCxTQUFBLENBQWZDLGVBQWU7QUFFdkIsU0FBU0MsWUFBWUEsQ0FBQSxFQUFJO0VBQ3ZCLElBQUFDLGVBQUEsR0FBa0N4QixLQUFLLENBQUN5QixRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQUFDLGdCQUFBLEdBQUE1RCxjQUFBLENBQUEwRCxlQUFBO0lBQTVDRyxTQUFTLEdBQUFELGdCQUFBO0lBQUVFLFlBQVksR0FBQUYsZ0JBQUE7RUFDOUIsSUFBQUcsZ0JBQUEsR0FBc0Q3QixLQUFLLENBQUN5QixRQUFRLENBQUMsUUFBUSxDQUFDO0lBQUFLLGdCQUFBLEdBQUFoRSxjQUFBLENBQUErRCxnQkFBQTtJQUF2RUUsbUJBQW1CLEdBQUFELGdCQUFBO0lBQUVFLHNCQUFzQixHQUFBRixnQkFBQTtFQUVsRCxJQUFNRywwQkFBMEIsR0FBR2pDLEtBQUssQ0FBQ2tDLFdBQVcsQ0FBQyxZQUFNO0lBQ3pELElBQUksT0FBT0MsTUFBTSxLQUFLLFdBQVcsRUFBRTtNQUNqQ0gsc0JBQXNCLENBQUMsUUFBUSxDQUFDO01BQ2hDO0lBQ0Y7SUFDQSxJQUFJSSxlQUFlLEdBQUcsSUFBSTtJQUMxQixJQUFJO01BQ0YsSUFBTUMsV0FBVyxHQUFHRixNQUFNLENBQUNHLGNBQWMsSUFBSUgsTUFBTSxDQUFDRyxjQUFjLENBQUNDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQztNQUN0RyxJQUFJRixXQUFXLEVBQUVELGVBQWUsR0FBR0ksSUFBSSxDQUFDQyxLQUFLLENBQUNKLFdBQVcsQ0FBQztJQUM1RCxDQUFDLENBQUMsT0FBT0ssQ0FBQyxFQUFFO01BQ1ZOLGVBQWUsR0FBRyxJQUFJO0lBQ3hCO0lBQ0EsSUFBSU8sS0FBSyxHQUFHLElBQUk7SUFDaEIsSUFBSTtNQUNGQSxLQUFLLEdBQUdyQixlQUFlLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDO0lBQ3hELENBQUMsQ0FBQyxPQUFPb0IsQ0FBQyxFQUFFO01BQ1ZDLEtBQUssR0FBRyxJQUFJO0lBQ2Q7SUFDQVgsc0JBQXNCLENBQUNaLDBDQUEwQyxDQUFDdUIsS0FBSyxFQUFFUCxlQUFlLENBQUMsQ0FBQztFQUM1RixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU5wQyxLQUFLLENBQUM0QyxTQUFTLENBQUM7SUFBQSxPQUFNNUIsMEJBQTBCLENBQUM7TUFBQSxPQUFNWSxZQUFZLENBQUMsVUFBQ3BELENBQUM7UUFBQSxPQUFLQSxDQUFDLEdBQUcsQ0FBQztNQUFBLEVBQUM7SUFBQSxFQUFDO0VBQUEsR0FBRSxFQUFFLENBQUM7RUFDdkZ3QixLQUFLLENBQUM0QyxTQUFTLENBQUMsWUFBTTtJQUNwQlgsMEJBQTBCLENBQUMsQ0FBQztJQUM1QixJQUFJLE9BQU9FLE1BQU0sS0FBSyxXQUFXLEVBQUUsT0FBT1UsU0FBUztJQUNuRCxJQUFNQyxTQUFTLEdBQUcsU0FBWkEsU0FBU0EsQ0FBQTtNQUFBLE9BQVNiLDBCQUEwQixDQUFDLENBQUM7SUFBQTtJQUNwREUsTUFBTSxDQUFDWSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUVELFNBQVMsQ0FBQztJQUM3QyxPQUFPO01BQUEsT0FBTVgsTUFBTSxDQUFDYSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUVGLFNBQVMsQ0FBQztJQUFBO0VBQy9ELENBQUMsRUFBRSxDQUFDYiwwQkFBMEIsQ0FBQyxDQUFDO0VBQ2hDLEtBQUtOLFNBQVM7RUFDZCxJQUFNc0IsRUFBRSxHQUFHbEMscUJBQXFCLENBQUMsQ0FBQztFQUNsQyxJQUFNbUMsYUFBYSxHQUFHLENBQUMsQ0FBQ2hDLDRCQUE0QixDQUFDLENBQUM7RUFDdEQsSUFBTWlDLGlCQUFpQixHQUFHRixFQUFFLENBQUNHLEtBQUssSUFBSUYsYUFBYTtFQUVuRCxvQkFDRWxELEtBQUEsQ0FBQXFELGFBQUE7SUFBcUJDLFNBQVMsRUFBQztFQUFTLGdCQUN0Q3RELEtBQUEsQ0FBQXFELGFBQUEsQ0FBQzVDLE9BQU8scUJBQ05ULEtBQUEsQ0FBQXFELGFBQUEsQ0FBQ2hELE1BQU07SUFBQ2tELEVBQUUsRUFBRXBELElBQUs7SUFBQ3FELEVBQUUsRUFBQyxHQUFHO0lBQUNDLEtBQUs7SUFBQ0MsSUFBSSxFQUFDLE9BQU87SUFBQyxjQUFXO0VBQWMsZ0JBQ25FMUQsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLFlBQVk7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLFFBRXZDLENBQUMsZUFDVG1CLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQzlDLE1BQU07SUFBQ2dELEVBQUUsRUFBQyxJQUFJO0lBQUNJLEVBQUUsRUFBQyx1QkFBdUI7SUFBQ0MsS0FBSyxFQUFFO01BQUVDLFNBQVMsRUFBRTtJQUFTO0VBQUUsR0FBQyxVQUVuRSxDQUFDLGVBQ1Q3RCxLQUFBLENBQUFxRCxhQUFBO0lBQUdPLEtBQUssRUFBRTtNQUFFRSxLQUFLLEVBQUUsTUFBTTtNQUFFQyxRQUFRLEVBQUUsT0FBTztNQUFFQyxVQUFVLEVBQUU7SUFBSztFQUFFLGdCQUMvRGhFLEtBQUEsQ0FBQXFELGFBQUEsaUJBQVMxQyxVQUFtQixDQUFDLFlBQUcsRUFBQ0MsYUFBYSxFQUFDLCtHQUE2RyxlQUFBWixLQUFBLENBQUFxRCxhQUFBLGlCQUFRLHFCQUEyQixDQUFDLG9EQUFnRCxlQUFBckQsS0FBQSxDQUFBcUQsYUFBQSxpQkFBUSx1QkFBNkIsQ0FBQyxrR0FBOEYsRUFBQyxHQUFHLGVBQ3hYckQsS0FBQSxDQUFBcUQsYUFBQSxDQUFDbEQsSUFBSTtJQUFDcUQsRUFBRSxFQUFDO0VBQW1CLEdBQUMsU0FBYSxDQUFDLCtIQUEySCxFQUFDLEdBQUcsZUFDMUt4RCxLQUFBLENBQUFxRCxhQUFBLENBQUNsRCxJQUFJO0lBQUNxRCxFQUFFLEVBQUM7RUFBaUIsR0FBQyxPQUFXLENBQUMsdUVBQThELGVBQUF4RCxLQUFBLENBQUFxRCxhQUFBLGlCQUFRLE1BQVksQ0FBQyx3Q0FDekgsQ0FDSSxDQUFDLGVBRVZyRCxLQUFBLENBQUFxRCxhQUFBO0lBQUtDLFNBQVMsRUFBQztFQUE0QixnQkFDekN0RCxLQUFBLENBQUFxRCxhQUFBLENBQUMvQyxTQUFTO0lBQUMyRCxJQUFJO0VBQUEsZ0JBQ2JqRSxLQUFBLENBQUFxRCxhQUFBLENBQUM5QyxNQUFNO0lBQUNnRCxFQUFFLEVBQUMsSUFBSTtJQUFDSyxLQUFLLEVBQUU7TUFBRU0sUUFBUSxFQUFFLEtBQUs7TUFBRUMsU0FBUyxFQUFFO0lBQVM7RUFBRSxHQUM3RHRELGNBQ0ssQ0FBQyxlQUNUYixLQUFBLENBQUFxRCxhQUFBO0lBQUtDLFNBQVMsRUFBQyxnQ0FBZ0M7SUFBQ00sS0FBSyxFQUFFO01BQUVDLFNBQVMsRUFBRTtJQUFNO0VBQUUsZ0JBQzFFN0QsS0FBQSxDQUFBcUQsYUFBQTtJQUFLQyxTQUFTLEVBQUM7RUFBUSxnQkFDckJ0RCxLQUFBLENBQUFxRCxhQUFBO0lBQUtDLFNBQVMsRUFBQztFQUFZLGdCQUN6QnRELEtBQUEsQ0FBQXFELGFBQUEsQ0FBQzlDLE1BQU07SUFBQ2dELEVBQUUsRUFBQyxJQUFJO0lBQUNLLEtBQUssRUFBRTtNQUFFTyxTQUFTLEVBQUU7SUFBUztFQUFFLGdCQUM3Q25FLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQzdDLElBQUk7SUFBQzNCLElBQUksRUFBQyxRQUFRO0lBQUM2RSxJQUFJLEVBQUMsT0FBTztJQUFDLGVBQVk7RUFBTSxDQUFFLENBQUMsZUFDdEQxRCxLQUFBLENBQUFxRCxhQUFBLENBQUM5QyxNQUFNLENBQUM2RCxPQUFPLFFBQUMsVUFBd0IsQ0FDbEMsQ0FBQyxlQUNUcEUsS0FBQSxDQUFBcUQsYUFBQTtJQUFHTyxLQUFLLEVBQUU7TUFBRU8sU0FBUyxFQUFFO0lBQVM7RUFBRSxHQUFDLHlKQUNzSCxFQUFDLEdBQUcsZUFDM0puRSxLQUFBLENBQUFxRCxhQUFBLENBQUNsRCxJQUFJO0lBQUNxRCxFQUFFLEVBQUM7RUFBb0IsR0FBQyx1QkFBK0IsQ0FBQyxLQUM3RCxDQUNBLENBQ0YsQ0FBQyxlQUNOeEQsS0FBQSxDQUFBcUQsYUFBQTtJQUFLQyxTQUFTLEVBQUM7RUFBUSxnQkFDckJ0RCxLQUFBLENBQUFxRCxhQUFBO0lBQUtDLFNBQVMsRUFBQztFQUFZLGdCQUN6QnRELEtBQUEsQ0FBQXFELGFBQUEsQ0FBQzlDLE1BQU07SUFBQ2dELEVBQUUsRUFBQyxJQUFJO0lBQUNLLEtBQUssRUFBRTtNQUFFTyxTQUFTLEVBQUU7SUFBUztFQUFFLGdCQUM3Q25FLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQzdDLElBQUk7SUFBQzNCLElBQUksRUFBQyxPQUFPO0lBQUM2RSxJQUFJLEVBQUMsT0FBTztJQUFDLGVBQVk7RUFBTSxDQUFFLENBQUMsZUFDckQxRCxLQUFBLENBQUFxRCxhQUFBLENBQUM5QyxNQUFNLENBQUM2RCxPQUFPLFFBQUMsZUFBNkIsQ0FDdkMsQ0FBQyxlQUNUcEUsS0FBQSxDQUFBcUQsYUFBQTtJQUFHTyxLQUFLLEVBQUU7TUFBRU8sU0FBUyxFQUFFO0lBQVM7RUFBRSxHQUFDLDhHQUVqQyxFQUFDbEIsRUFBRSxDQUFDb0IsU0FBUyxnQkFDWHJFLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQXJELEtBQUEsQ0FBQXNFLFFBQUEsUUFBRSxVQUFRLGVBQUF0RSxLQUFBLENBQUFxRCxhQUFBLENBQUNsRCxJQUFJO0lBQUNxRCxFQUFFLEVBQUM7RUFBYSxHQUFDLFdBQWUsQ0FBQyxlQUFhLENBQUMsZ0JBRS9EeEQsS0FBQSxDQUFBcUQsYUFBQSxDQUFBckQsS0FBQSxDQUFBc0UsUUFBQSxRQUFFLG9GQUErRSxDQUNsRixlQUNEdEUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDbEQsSUFBSTtJQUFDcUQsRUFBRSxFQUFDO0VBQVksR0FBQyxXQUFlLENBQUMsaURBQ3JDLENBQ0EsQ0FDRixDQUFDLGVBQ054RCxLQUFBLENBQUFxRCxhQUFBO0lBQUtDLFNBQVMsRUFBQztFQUFRLGdCQUNyQnRELEtBQUEsQ0FBQXFELGFBQUE7SUFBS0MsU0FBUyxFQUFDO0VBQVksZ0JBQ3pCdEQsS0FBQSxDQUFBcUQsYUFBQSxDQUFDOUMsTUFBTTtJQUFDZ0QsRUFBRSxFQUFDLElBQUk7SUFBQ0ssS0FBSyxFQUFFO01BQUVPLFNBQVMsRUFBRTtJQUFTO0VBQUUsZ0JBQzdDbkUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLFNBQVM7SUFBQzZFLElBQUksRUFBQyxPQUFPO0lBQUMsZUFBWTtFQUFNLENBQUUsQ0FBQyxlQUN2RDFELEtBQUEsQ0FBQXFELGFBQUEsQ0FBQzlDLE1BQU0sQ0FBQzZELE9BQU8sUUFBQyxTQUF1QixDQUNqQyxDQUFDLGVBQ1RwRSxLQUFBLENBQUFxRCxhQUFBO0lBQUdPLEtBQUssRUFBRTtNQUFFTyxTQUFTLEVBQUU7SUFBUztFQUFFLEdBQUMsd01BRWpDLEVBQUNsQixFQUFFLENBQUNvQixTQUFTLGdCQUNYckUsS0FBQSxDQUFBcUQsYUFBQSxDQUFBckQsS0FBQSxDQUFBc0UsUUFBQSxRQUFFLGNBQU8sZUFBQXRFLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQ2xELElBQUk7SUFBQ3FELEVBQUUsRUFBQztFQUFtQyxHQUFDLG1CQUF1QixDQUFDLEtBQUcsQ0FBQyxnQkFFbEZ4RCxLQUFBLENBQUFxRCxhQUFBLENBQUFyRCxLQUFBLENBQUFzRSxRQUFBLFFBQUUsb0dBQTBGLENBRTdGLENBQ0EsQ0FDRixDQUNGLENBQ0ksQ0FDUixDQUFDLGVBRU50RSxLQUFBLENBQUFxRCxhQUFBLENBQUM1QyxPQUFPLHFCQUNOVCxLQUFBLENBQUFxRCxhQUFBO0lBQUtPLEtBQUssRUFBRTtNQUFFVyxPQUFPLEVBQUUsTUFBTTtNQUFFQyxRQUFRLEVBQUUsTUFBTTtNQUFFQyxHQUFHLEVBQUUsT0FBTztNQUFFQyxVQUFVLEVBQUU7SUFBUztFQUFFLGdCQUNwRjFFLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQ2hELE1BQU07SUFDTHlELEtBQUssRUFBQyxNQUFNO0lBQ1phLElBQUk7SUFDSkMsYUFBYSxFQUFDLE1BQU07SUFDcEJDLElBQUksRUFBQyxRQUFRO0lBQ2JDLEtBQUssRUFBQywrRUFBK0U7SUFDckYsd0NBQUFDLE1BQUEsQ0FBaUNoRCxtQkFBbUIsQ0FBRztJQUN2RGlELE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBLEVBQVE7TUFDYixJQUFJLE9BQU83QyxNQUFNLEtBQUssV0FBVyxFQUFFO1FBQ2pDQSxNQUFNLENBQUM4QyxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDLENBQUM7TUFDcEU7SUFDRjtFQUFFLGdCQUVGbEYsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLE1BQU07SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLEVBQ3RDa0QsbUJBQ0ssQ0FBQyxFQUNSb0IsaUJBQWlCLGdCQUNoQm5ELEtBQUEsQ0FBQXFELGFBQUEsQ0FBQ2hELE1BQU07SUFBQ2tELEVBQUUsRUFBRXBELElBQUs7SUFBQ3FELEVBQUUsRUFBQyxRQUFRO0lBQUNDLEtBQUs7SUFBQ2tCLElBQUk7SUFBQ0MsYUFBYSxFQUFDO0VBQU0sZ0JBQzNENUUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLFNBQVM7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLFNBRXBDLENBQUMsR0FDUCxJQUFJLGVBQ1JtQixLQUFBLENBQUFxRCxhQUFBLENBQUNoRCxNQUFNO0lBQUNrRCxFQUFFLEVBQUVwRCxJQUFLO0lBQUNxRCxFQUFFLEVBQUMsWUFBWTtJQUFDQyxLQUFLO0lBQUNrQixJQUFJO0lBQUNDLGFBQWEsRUFBQztFQUFNLGdCQUMvRDVFLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQzdDLElBQUk7SUFBQzNCLElBQUksRUFBQyxjQUFjO0lBQUMsZUFBWTtFQUFNLENBQUUsQ0FBQyxhQUV6QyxDQUFDLGVBQ1RtQixLQUFBLENBQUFxRCxhQUFBLENBQUNoRCxNQUFNO0lBQUNrRCxFQUFFLEVBQUVwRCxJQUFLO0lBQUNxRCxFQUFFLEVBQUMsWUFBWTtJQUFDQyxLQUFLO0lBQUNrQixJQUFJO0lBQUNDLGFBQWEsRUFBQztFQUFNLGdCQUMvRDVFLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQzdDLElBQUk7SUFBQzNCLElBQUksRUFBQyxXQUFXO0lBQUMsZUFBWTtFQUFNLENBQUUsQ0FBQyxhQUV0QyxDQUFDLEVBQ1JvRSxFQUFFLENBQUNrQyxVQUFVLGdCQUNabkYsS0FBQSxDQUFBcUQsYUFBQSxDQUFDaEQsTUFBTTtJQUFDa0QsRUFBRSxFQUFFcEQsSUFBSztJQUFDcUQsRUFBRSxFQUFDLGdCQUFnQjtJQUFDQyxLQUFLO0lBQUNrQixJQUFJO0lBQUNDLGFBQWEsRUFBQyxNQUFNO0lBQUNFLEtBQUssRUFBQztFQUF1RCxnQkFDakk5RSxLQUFBLENBQUFxRCxhQUFBLENBQUM3QyxJQUFJO0lBQUMzQixJQUFJLEVBQUMsY0FBYztJQUFDLGVBQVk7RUFBTSxDQUFFLENBQUMsaUJBRXpDLENBQUMsR0FDUCxJQUFJLEVBQ1BvRSxFQUFFLENBQUNrQyxVQUFVLGdCQUNabkYsS0FBQSxDQUFBcUQsYUFBQSxDQUFDaEQsTUFBTTtJQUFDa0QsRUFBRSxFQUFFcEQsSUFBSztJQUFDcUQsRUFBRSxFQUFDLGFBQWE7SUFBQ0MsS0FBSztJQUFDa0IsSUFBSTtJQUFDQyxhQUFhLEVBQUMsTUFBTTtJQUFDRSxLQUFLLEVBQUM7RUFBdUMsZ0JBQzlHOUUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLFVBQVU7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLGdCQUVyQyxDQUFDLEdBQ1AsSUFBSSxFQUNQb0UsRUFBRSxDQUFDb0IsU0FBUyxnQkFDWHJFLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQ2hELE1BQU07SUFBQ2tELEVBQUUsRUFBRXBELElBQUs7SUFBQ3FELEVBQUUsRUFBQyxhQUFhO0lBQUNDLEtBQUs7SUFBQ2tCLElBQUk7SUFBQ0MsYUFBYSxFQUFDO0VBQU0sZ0JBQ2hFNUUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLFFBQVE7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLGFBRW5DLENBQUMsR0FDUCxJQUFJLEVBQ1BvRSxFQUFFLENBQUNvQixTQUFTLGdCQUNYckUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDaEQsTUFBTTtJQUNMa0QsRUFBRSxFQUFFcEQsSUFBSztJQUNUcUQsRUFBRSxFQUFDLG1DQUFtQztJQUN0Q0MsS0FBSztJQUNMa0IsSUFBSTtJQUNKQyxhQUFhLEVBQUMsTUFBTTtJQUNwQkUsS0FBSyxFQUFDO0VBQXdELGdCQUU5RDlFLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQzdDLElBQUk7SUFBQzNCLElBQUksRUFBQyxNQUFNO0lBQUMsZUFBWTtFQUFNLENBQUUsQ0FBQyxxQkFFakMsQ0FBQyxHQUNQLElBQUksRUFDUG9FLEVBQUUsQ0FBQ29CLFNBQVMsZ0JBQ1hyRSxLQUFBLENBQUFxRCxhQUFBLENBQUNoRCxNQUFNO0lBQUNrRCxFQUFFLEVBQUVwRCxJQUFLO0lBQUNxRCxFQUFFLEVBQUMsY0FBYztJQUFDQyxLQUFLO0lBQUNrQixJQUFJO0lBQUNDLGFBQWEsRUFBQyxNQUFNO0lBQUNFLEtBQUssRUFBQztFQUFxQyxnQkFDN0c5RSxLQUFBLENBQUFxRCxhQUFBLENBQUM3QyxJQUFJO0lBQUMzQixJQUFJLEVBQUMsT0FBTztJQUFDLGVBQVk7RUFBTSxDQUFFLENBQUMsZUFFbEMsQ0FBQyxHQUNQLElBQUksZUFDUm1CLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQ2hELE1BQU07SUFBQ2tELEVBQUUsRUFBRXBELElBQUs7SUFBQ3FELEVBQUUsRUFBQyxtQkFBbUI7SUFBQ0MsS0FBSztJQUFDa0IsSUFBSTtJQUFDQyxhQUFhLEVBQUM7RUFBTSxnQkFDdEU1RSxLQUFBLENBQUFxRCxhQUFBLENBQUM3QyxJQUFJO0lBQUMzQixJQUFJLEVBQUMsU0FBUztJQUFDLGVBQVk7RUFBTSxDQUFFLENBQUMsV0FFcEMsQ0FBQyxFQUNSb0UsRUFBRSxDQUFDbUMsZUFBZSxnQkFDakJwRixLQUFBLENBQUFxRCxhQUFBLENBQUNoRCxNQUFNO0lBQUNrRCxFQUFFLEVBQUVwRCxJQUFLO0lBQUNxRCxFQUFFLEVBQUMsV0FBVztJQUFDQyxLQUFLO0lBQUNrQixJQUFJO0lBQUNDLGFBQWEsRUFBQztFQUFNLGdCQUM5RDVFLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQzdDLElBQUk7SUFBQzNCLElBQUksRUFBQyxxQkFBcUI7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLFlBRWhELENBQUMsR0FDUCxJQUFJLGVBQ1JtQixLQUFBLENBQUFxRCxhQUFBLENBQUNoRCxNQUFNO0lBQUNrRCxFQUFFLEVBQUVwRCxJQUFLO0lBQUNxRCxFQUFFLEVBQUMscURBQXFEO0lBQUNDLEtBQUs7SUFBQ2tCLElBQUk7SUFBQ0MsYUFBYSxFQUFDO0VBQU0sZ0JBQ3hHNUUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLHdCQUF3QjtJQUFDLGVBQVk7RUFBTSxDQUFFLENBQUMsWUFFbkQsQ0FBQyxFQUNSb0UsRUFBRSxDQUFDb0MsZ0JBQWdCLGdCQUNsQnJGLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQ2hELE1BQU07SUFBQ2tELEVBQUUsRUFBRXBELElBQUs7SUFBQ3FELEVBQUUsRUFBQyw0Q0FBNEM7SUFBQ0MsS0FBSztJQUFDa0IsSUFBSTtJQUFDQyxhQUFhLEVBQUMsTUFBTTtJQUFDRSxLQUFLLEVBQUM7RUFBZ0QsZ0JBQ3RKOUUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLE1BQU07SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLGFBRWpDLENBQUMsR0FDUCxJQUFJLEVBQ1BvRSxFQUFFLENBQUNxQyxlQUFlLGdCQUNqQnRGLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQ2hELE1BQU07SUFBQ2tELEVBQUUsRUFBRXBELElBQUs7SUFBQ3FELEVBQUUsRUFBQywwQkFBMEI7SUFBQ0MsS0FBSztJQUFDa0IsSUFBSTtJQUFDQyxhQUFhLEVBQUMsTUFBTTtJQUFDRSxLQUFLLEVBQUM7RUFBNEMsZ0JBQ2hJOUUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLFFBQVE7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLFlBRW5DLENBQUMsR0FDUCxJQUFJLEVBQ1BvRSxFQUFFLENBQUNzQyxnQkFBZ0IsZ0JBQ2xCdkYsS0FBQSxDQUFBcUQsYUFBQSxDQUFDaEQsTUFBTTtJQUFDa0QsRUFBRSxFQUFFcEQsSUFBSztJQUFDcUQsRUFBRSxFQUFDLDZCQUE2QjtJQUFDQyxLQUFLO0lBQUNrQixJQUFJO0lBQUNDLGFBQWEsRUFBQztFQUFNLGdCQUNoRjVFLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQzdDLElBQUk7SUFBQzNCLElBQUksRUFBQyxNQUFNO0lBQUMsZUFBWTtFQUFNLENBQUUsQ0FBQyxhQUVqQyxDQUFDLEdBQ1AsSUFBSSxFQUNQb0UsRUFBRSxDQUFDdUMsZ0JBQWdCLGdCQUNsQnhGLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQ2hELE1BQU07SUFBQ2tELEVBQUUsRUFBRXBELElBQUs7SUFBQ3FELEVBQUUsRUFBQyw4QkFBOEI7SUFBQ0MsS0FBSztJQUFDa0IsSUFBSTtJQUFDQyxhQUFhLEVBQUMsTUFBTTtJQUFDRSxLQUFLLEVBQUM7RUFBdUQsZ0JBQy9JOUUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLGVBQWU7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLGNBRTFDLENBQUMsR0FDUCxJQUFJLGVBQ1JtQixLQUFBLENBQUFxRCxhQUFBLENBQUNoRCxNQUFNO0lBQUNrRCxFQUFFLEVBQUVwRCxJQUFLO0lBQUNxRCxFQUFFLEVBQUMsaUJBQWlCO0lBQUNDLEtBQUs7SUFBQ2tCLElBQUk7SUFBQ0MsYUFBYSxFQUFDO0VBQU0sZ0JBQ3BFNUUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLFVBQVU7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLFNBRXJDLENBQUMsZUFDVG1CLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQ2hELE1BQU07SUFBQ2tELEVBQUUsRUFBRXBELElBQUs7SUFBQ3FELEVBQUUsRUFBQyxXQUFXO0lBQUNDLEtBQUs7SUFBQ2tCLElBQUk7SUFBQ0MsYUFBYSxFQUFDO0VBQU0sZ0JBQzlENUUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLFNBQVM7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLFlBRXBDLENBQUMsZUFDVG1CLEtBQUEsQ0FBQXFELGFBQUEsQ0FBQ2hELE1BQU07SUFBQ2tELEVBQUUsRUFBRXBELElBQUs7SUFBQ3FELEVBQUUsRUFBQyxvQkFBb0I7SUFBQ0MsS0FBSztJQUFDa0IsSUFBSTtJQUFDQyxhQUFhLEVBQUMsTUFBTTtJQUFDRSxLQUFLLEVBQUM7RUFBZ0QsZ0JBQzlIOUUsS0FBQSxDQUFBcUQsYUFBQSxDQUFDN0MsSUFBSTtJQUFDM0IsSUFBSSxFQUFDLFFBQVE7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUFDLHlCQUVuQyxDQUNMLENBQ0UsQ0FDVSxDQUFDO0FBRTFCO0FBRUE0RyxNQUFNLENBQUNDLE9BQU8sR0FBR25FLFlBQVkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvRmVhdHVyZXNQYWdlLmpzPzE0ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE1hcmtldGluZyAvIHRvdXIgYXQgYC9mZWF0dXJlc2AgKGdhdGVkIGJ5IEZlYXR1cmUgdmlzaWJpbGl0eSkuIFNwbGFzaCBGcm9udFBhZ2Ug4oCcTGVhcm4gbW9yZeKAnSB1c2VzIGAjZnJvbnQtcGFnZS1mZWF0dXJlc2A7IGtlZXAgZ3JpZHMgYWxpZ25lZC5cbiAqL1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHsgQnV0dG9uLCBDb250YWluZXIsIEhlYWRlciwgSWNvbiwgU2VnbWVudCB9ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IHtcbiAgQlJBTkRfTkFNRSxcbiAgQlJBTkRfVEFHTElORSxcbiAgUElUQ0hfQ1RBX1RFWFRcbn0gPSByZXF1aXJlKCcuLi9sb2NhbGVzL2VuJyk7XG5jb25zdCB7XG4gIGxvYWRIdWJVaUZlYXR1cmVGbGFncyxcbiAgc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3Ncbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViVWlGZWF0dXJlRmxhZ3MnKTtcbmNvbnN0IHsgcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YkFkbWluVG9rZW5Ccm93c2VyJyk7XG5jb25zdCB7IGZlYXR1cmVzUGFnZUlkZW50aXR5QnV0dG9uTGFiZWxGcm9tU3RvcmFnZSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YklkZW50aXR5VWlIaW50cycpO1xuY29uc3QgeyByZWFkU3RvcmFnZUpTT04gfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNCcm93c2VyU3RhdGUnKTtcblxuZnVuY3Rpb24gRmVhdHVyZXNQYWdlICgpIHtcbiAgY29uc3QgW2h1YlVpVGljaywgc2V0SHViVWlUaWNrXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICBjb25zdCBbaWRlbnRpdHlCdXR0b25MYWJlbCwgc2V0SWRlbnRpdHlCdXR0b25MYWJlbF0gPSBSZWFjdC51c2VTdGF0ZSgnTG9nIGluJyk7XG5cbiAgY29uc3QgcmVmcmVzaElkZW50aXR5QnV0dG9uTGFiZWwgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBzZXRJZGVudGl0eUJ1dHRvbkxhYmVsKCdMb2cgaW4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHNlc3Npb25VbmxvY2tlZCA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVubG9ja2VkUmF3ID0gd2luZG93LnNlc3Npb25TdG9yYWdlICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmYWJyaWMuaWRlbnRpdHkudW5sb2NrZWQnKTtcbiAgICAgIGlmICh1bmxvY2tlZFJhdykgc2Vzc2lvblVubG9ja2VkID0gSlNPTi5wYXJzZSh1bmxvY2tlZFJhdyk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgc2Vzc2lvblVubG9ja2VkID0gbnVsbDtcbiAgICB9XG4gICAgbGV0IGxvY2FsID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgbG9jYWwgPSByZWFkU3RvcmFnZUpTT04oJ2ZhYnJpYy5pZGVudGl0eS5sb2NhbCcsIG51bGwpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIGxvY2FsID0gbnVsbDtcbiAgICB9XG4gICAgc2V0SWRlbnRpdHlCdXR0b25MYWJlbChmZWF0dXJlc1BhZ2VJZGVudGl0eUJ1dHRvbkxhYmVsRnJvbVN0b3JhZ2UobG9jYWwsIHNlc3Npb25VbmxvY2tlZCkpO1xuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzKCgpID0+IHNldEh1YlVpVGljaygodCkgPT4gdCArIDEpKSwgW10pO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlZnJlc2hJZGVudGl0eUJ1dHRvbkxhYmVsKCk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IG9uU3RvcmFnZSA9ICgpID0+IHJlZnJlc2hJZGVudGl0eUJ1dHRvbkxhYmVsKCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBvblN0b3JhZ2UpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIG9uU3RvcmFnZSk7XG4gIH0sIFtyZWZyZXNoSWRlbnRpdHlCdXR0b25MYWJlbF0pO1xuICB2b2lkIGh1YlVpVGljaztcbiAgY29uc3QgdWYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgY29uc3QgaGFzQWRtaW5Ub2tlbiA9ICEhcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlcigpO1xuICBjb25zdCBzaG93UGVlcnNTaG9ydGN1dCA9IHVmLnBlZXJzICYmIGhhc0FkbWluVG9rZW47XG5cbiAgcmV0dXJuIChcbiAgICA8ZmFicmljLWh1Yi1mZWF0dXJlcyBjbGFzc05hbWU9XCJmYWRlLWluXCI+XG4gICAgICA8U2VnbWVudD5cbiAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgYXJpYS1sYWJlbD1cIkJhY2sgdG8gaG9tZVwiPlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJhcnJvdyBsZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICBIb21lXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8SGVhZGVyIGFzPVwiaDFcIiBpZD1cImZlYXR1cmVzLXBhZ2UtaGVhZGluZ1wiIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX0+XG4gICAgICAgICAgRmVhdHVyZXNcbiAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1heFdpZHRoOiAnNDJyZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgIDxzdHJvbmc+e0JSQU5EX05BTUV9PC9zdHJvbmc+IOKAlCB7QlJBTkRfVEFHTElORX0uIElkZW50aXR5IGFuZCBzaWduaW5nIHVzZSBzdGFuZGFyZCBCaXRjb2luIGNyeXB0b2dyYXBoeSAoc2VjcDI1NmsxOyBCSVAzMi9CSVAzOS1zdHlsZSBrZXlzIGluIHRoZSBicm93c2VyKS4gPHN0cm9uZz5EaXN0cmlidXRlZCBzdG9yYWdlPC9zdHJvbmc+IChwdWJsaXNoLCBkaXN0cmlidXRlLCBlbmNyeXB0ZWQgZG9jdW1lbnRzKSBhbmQgPHN0cm9uZz5kaXN0cmlidXRlZCBleGVjdXRpb248L3N0cm9uZz4gKGRldGVybWluaXN0aWMgcHJvZ3JhbXMsIG9wdGlvbmFsIEwxLWJhY2tlZCByZWdpc3RyeSkgbGl2ZSB1bmRlciBEb2N1bWVudHMgYW5kIENvbnRyYWN0cy4gVGhleycgJ31cbiAgICAgICAgICA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCI+Qml0Y29pbjwvTGluaz4gZGFzaGJvYXJkIHN0YXlzIGF2YWlsYWJsZTsgTm90aWZpY2F0aW9ucywgdGhlIGFjdGl2aXR5IGxvZywgRmVhdHVyZXMsIGJsb2NrL3R4IGV4cGxvcmVyLCBhbmQgb3RoZXIgYXJlYXMgZm9sbG93IHRvZ2dsZXMgaW57JyAnfVxuICAgICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzL2FkbWluXCI+QWRtaW48L0xpbms+IOKGkiBGZWF0dXJlIHZpc2liaWxpdHkuIFRoZSBzaG9ydGN1dHMgYmVsb3cgbWF0Y2ggaG9tZSBhbmQgdGhlIDxzdHJvbmc+TW9yZTwvc3Ryb25nPiBtZW51IHdoZW4gdGhvc2Ugcm91dGVzIGFyZSBlbmFibGVkLlxuICAgICAgICA8L3A+XG4gICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidWkgdmVydGljYWwgc3RyaXBlIHNlZ21lbnRcIj5cbiAgICAgICAgPENvbnRhaW5lciB0ZXh0PlxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoMlwiIHN0eWxlPXt7IGZvbnRTaXplOiAnMmVtJywgdGV4dEFsaWduOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgIHtQSVRDSF9DVEFfVEVYVH1cbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVpIHRocmVlIGNvbHVtbiBzdGFja2FibGUgZ3JpZFwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzJlbScgfX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbHVtblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVpIHNlZ21lbnRcIj5cbiAgICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBzdHlsZT17eyB0ZXh0QWxpZ246ICdjZW50ZXInIH19PlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNoaWVsZFwiIHNpemU9XCJsYXJnZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+U2VjdXJpdHk8L0hlYWRlci5Db250ZW50PlxuICAgICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IHRleHRBbGlnbjogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICBQb3J0YWJsZSBicm93c2VyIGlkZW50aXR5IChzdGFuZGFyZCBzZWNwMjU2azEgLyBCSVAzMi1zdHlsZSBrZXlzKSwgdW5sb2NrL2xvY2ssIGVuZC10by1lbmQgZW5jcnlwdGlvbiBmb3IgZG9jdW1lbnRzLCBhbmQgb3B0aW9uYWwgZGVza3RvcCBkZWxlZ2F0aW9uIGlueycgJ31cbiAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzL3NlY3VyaXR5XCI+U2VjdXJpdHkgJmFtcDsgZGVsZWdhdGlvbjwvTGluaz4uXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1aSBzZWdtZW50XCI+XG4gICAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImgzXCIgc3R5bGU9e3sgdGV4dEFsaWduOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJ1c2Vyc1wiIHNpemU9XCJsYXJnZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+Q29sbGFib3JhdGlvbjwvSGVhZGVyLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgdGV4dEFsaWduOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgIEZhYnJpYyBwZWVycywgV2ViUlRDIG1lc2gsIGNoYXQsIGFuZCBkb2N1bWVudCB3b3JrZmxvd3MgKHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIG9wdGlvbmFsIGVuY3J5cHRlZCBpbnZlbnRvcnkpLlxuICAgICAgICAgICAgICAgICAge3VmLnNpZGVjaGFpbiA/IChcbiAgICAgICAgICAgICAgICAgICAgPD4gR2xvYmFsIDxMaW5rIHRvPVwiL3NpZGVjaGFpbnNcIj5TaWRlY2hhaW48L0xpbms+IHN0YXRlIGFuZCA8Lz5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDw+IEdsb2JhbCBzaWRlY2hhaW4gc3RhdGUgKGVuYWJsZSBTaWRlY2hhaW4gaW4gQWRtaW4g4oaSIEZlYXR1cmUgdmlzaWJpbGl0eSkgYW5kIDwvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL2NvbnRyYWN0c1wiPkNvbnRyYWN0czwvTGluaz4gKHN0b3JhZ2UgKyBleGVjdXRpb24pIHRpZSBpbnRvIHRoZSBzYW1lIGh1Yi5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbHVtblwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVpIHNlZ21lbnRcIj5cbiAgICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBzdHlsZT17eyB0ZXh0QWxpZ246ICdjZW50ZXInIH19PlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiBzaXplPVwibGFyZ2VcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgPEhlYWRlci5Db250ZW50PkJpdGNvaW48L0hlYWRlci5Db250ZW50PlxuICAgICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IHRleHRBbGlnbjogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICBSZWd0ZXN0IHRvb2xpbmcsIGludm9pY2VzLCBQYXlqb2luLW9yaWVudGVkIHBheW1lbnRzLCBhbmQgTGlnaHRuaW5nIHdoZW4gZW5hYmxlZC4gQmVhY29uIGVwb2NocyBiaW5kIGh1YiBzdGF0ZSB0byBMMTsgZXhlY3V0aW9uIHJ1bnMgdXNlIGEgZGV0ZXJtaW5pc3RpYyBjb21taXRtZW50IHNlcGFyYXRlIGZyb20gZmVkZXJhdGlvbiB3aXRuZXNzZXNcbiAgICAgICAgICAgICAgICAgIHt1Zi5zaWRlY2hhaW4gPyAoXG4gICAgICAgICAgICAgICAgICAgIDw+IOKAlCBzZWUgPExpbmsgdG89XCIvc2V0dGluZ3MvYWRtaW4vYmVhY29uLWZlZGVyYXRpb25cIj5CZWFjb24gRmVkZXJhdGlvbjwvTGluaz4uPC8+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8PiDigJQgZW5hYmxlIFNpZGVjaGFpbiBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IGZvciB0aGUgQmVhY29uIEZlZGVyYXRpb24gd2Fsa3Rocm91Z2guPC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9Db250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFNlZ21lbnQ+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4V3JhcDogJ3dyYXAnLCBnYXA6ICcwLjVlbScsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwiYmx1ZVwiXG4gICAgICAgICAgICBpY29uXG4gICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRpdGxlPVwiT3BlbiB0aGUgc2FtZSBGYWJyaWMgaWRlbnRpdHkgbWFuYWdlciBhcyB0aGUgdG9wIGJhciAoY3JlYXRlLCBpbXBvcnQsIHVubG9jaylcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17YEZhYnJpYyBpZGVudGl0eSDigJQgJHtpZGVudGl0eUJ1dHRvbkxhYmVsfWB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZmFicmljT3BlbklkZW50aXR5TWFuYWdlcicpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwidXNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICB7aWRlbnRpdHlCdXR0b25MYWJlbH1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICB7c2hvd1BlZXJzU2hvcnRjdXQgPyAoXG4gICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9wZWVyc1wiIGJhc2ljIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIj5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNpdGVtYXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICBQZWVyc1xuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvZG9jdW1lbnRzXCIgYmFzaWMgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImZpbGUgb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICBEb2N1bWVudHNcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9jb250cmFjdHNcIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCI+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwiZmlsZSBjb2RlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIENvbnRyYWN0c1xuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIHt1Zi5hY3Rpdml0aWVzID8gKFxuICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvbm90aWZpY2F0aW9uc1wiIGJhc2ljIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIiB0aXRsZT1cIldhbGxldCwgUGF5am9pbiwgYW5kIGh1YiB0b2FzdHMgKGJlbGwgaW4gdGhlIHRvcCBiYXIpXCI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJiZWxsIG91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICBOb3RpZmljYXRpb25zXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dWYuYWN0aXZpdGllcyA/IChcbiAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL2FjdGl2aXRpZXNcIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCIgdGl0bGU9XCJIdWIgbWVzc2FnZSBsb2csIGNoYXQsIEJpdGNvaW4gYmxvY2tzXCI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjb21tZW50c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIEFjdGl2aXR5IGxvZ1xuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3VmLnNpZGVjaGFpbiA/IChcbiAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NpZGVjaGFpbnNcIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyYW5kb21cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICBTaWRlY2hhaW5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHt1Zi5zaWRlY2hhaW4gPyAoXG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGFzPXtMaW5rfVxuICAgICAgICAgICAgICB0bz1cIi9zZXR0aW5ncy9hZG1pbi9iZWFjb24tZmVkZXJhdGlvblwiXG4gICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkwxLWJvdW5kIGJlYWNvbiBlcG9jaHMsIG1hbmlmZXN0LCBmZWRlcmF0aW9uIHdpdG5lc3Nlc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzdGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgQmVhY29uIEZlZGVyYXRpb25cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHt1Zi5zaWRlY2hhaW4gPyAoXG4gICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9mZWRlcmF0aW9uc1wiIGJhc2ljIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIiB0aXRsZT1cIk11bHRpLXNpZyB2YWxpZGF0b3IgcG9saWN5IChrLW9mLW4pXCI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJ1c2Vyc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIEZlZGVyYXRpb25zXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgYmFzaWMgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgQml0Y29pblxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIHt1Zi5iaXRjb2luUGF5bWVudHMgPyAoXG4gICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9wYXltZW50c1wiIGJhc2ljIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIj5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNyZWRpdCBjYXJkIG91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICBQYXltZW50c1xuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pbi9pbnZvaWNlcyNmYWJyaWMtaW52b2ljZXMtdGFiLWRlbW9cIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCI+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwiZmlsZSBhbHRlcm5hdGUgb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICBJbnZvaWNlc1xuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIHt1Zi5iaXRjb2luTGlnaHRuaW5nID8gKFxuICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pbiNmYWJyaWMtYml0Y29pbi1saWdodG5pbmdcIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCIgdGl0bGU9XCJJbnZvaWNlcywgZGVjb2RlLCBwYXkgdmlhIEh1YiBMaWdodG5pbmcgYnJpZGdlXCI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJib2x0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgTGlnaHRuaW5nXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dWYuYml0Y29pbkV4cGxvcmVyID8gKFxuICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pbi9ibG9ja3NcIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCIgdGl0bGU9XCJCbG9jayBleHBsb3JlciDigJQgcmVjZW50IGJsb2NrcyBhbmQgbWVtcG9vbFwiPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2VhcmNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgRXhwbG9yZXJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHt1Zi5iaXRjb2luUmVzb3VyY2VzID8gKFxuICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pbi9yZXNvdXJjZXNcIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjb2RlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgUmVzb3VyY2VzXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dWYuYml0Y29pbkNyb3dkZnVuZCA/IChcbiAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kc1wiIGJhc2ljIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIiB0aXRsZT1cIlRhcHJvb3QgdmF1bHQsIEFDUCBkb25hdGlvbiBQU0JULCBQYXlqb2luIHRvIGNhbXBhaWduXCI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJoZWFydCBvdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgQ3Jvd2RmdW5kc1xuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2V0dGluZ3MvYWRtaW5cIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCI+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwic2V0dGluZ3NcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgQWRtaW5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXR0aW5nc1wiIGJhc2ljIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIj5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzZXR0aW5nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIFNldHRpbmdzXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2V0dGluZ3Mvc2VjdXJpdHlcIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCIgdGl0bGU9XCJVbmxvY2ssIGRlbGVnYXRpb24sIHNhbWUgZGVzdGluYXRpb24gYXMgTG9nIGluXCI+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwic2hpZWxkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIFNlY3VyaXR5ICYgZGVsZWdhdGlvblxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU2VnbWVudD5cbiAgICA8L2ZhYnJpYy1odWItZmVhdHVyZXM+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRmVhdHVyZXNQYWdlO1xuIl0sIm5hbWVzIjpbIl9zbGljZWRUb0FycmF5IiwiciIsImUiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwiYSIsIl9hcnJheUxpa2VUb0FycmF5IiwidCIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbmd0aCIsIm4iLCJsIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpIiwidSIsImYiLCJvIiwibmV4dCIsIk9iamVjdCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJpc0FycmF5IiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJMaW5rIiwiX3JlcXVpcmUyIiwiQnV0dG9uIiwiQ29udGFpbmVyIiwiSGVhZGVyIiwiSWNvbiIsIlNlZ21lbnQiLCJfcmVxdWlyZTMiLCJCUkFORF9OQU1FIiwiQlJBTkRfVEFHTElORSIsIlBJVENIX0NUQV9URVhUIiwiX3JlcXVpcmU0IiwibG9hZEh1YlVpRmVhdHVyZUZsYWdzIiwic3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MiLCJfcmVxdWlyZTUiLCJyZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIiwiX3JlcXVpcmU2IiwiZmVhdHVyZXNQYWdlSWRlbnRpdHlCdXR0b25MYWJlbEZyb21TdG9yYWdlIiwiX3JlcXVpcmU3IiwicmVhZFN0b3JhZ2VKU09OIiwiRmVhdHVyZXNQYWdlIiwiX1JlYWN0JHVzZVN0YXRlIiwidXNlU3RhdGUiLCJfUmVhY3QkdXNlU3RhdGUyIiwiaHViVWlUaWNrIiwic2V0SHViVWlUaWNrIiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJpZGVudGl0eUJ1dHRvbkxhYmVsIiwic2V0SWRlbnRpdHlCdXR0b25MYWJlbCIsInJlZnJlc2hJZGVudGl0eUJ1dHRvbkxhYmVsIiwidXNlQ2FsbGJhY2siLCJ3aW5kb3ciLCJzZXNzaW9uVW5sb2NrZWQiLCJ1bmxvY2tlZFJhdyIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsIkpTT04iLCJwYXJzZSIsIl8iLCJsb2NhbCIsInVzZUVmZmVjdCIsInVuZGVmaW5lZCIsIm9uU3RvcmFnZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidWYiLCJoYXNBZG1pblRva2VuIiwic2hvd1BlZXJzU2hvcnRjdXQiLCJwZWVycyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJhcyIsInRvIiwiYmFzaWMiLCJzaXplIiwiaWQiLCJzdHlsZSIsIm1hcmdpblRvcCIsImNvbG9yIiwibWF4V2lkdGgiLCJsaW5lSGVpZ2h0IiwidGV4dCIsImZvbnRTaXplIiwidGV4dEFsaWduIiwiQ29udGVudCIsInNpZGVjaGFpbiIsIkZyYWdtZW50IiwiZGlzcGxheSIsImZsZXhXcmFwIiwiZ2FwIiwiYWxpZ25JdGVtcyIsImljb24iLCJsYWJlbFBvc2l0aW9uIiwidHlwZSIsInRpdGxlIiwiY29uY2F0Iiwib25DbGljayIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImFjdGl2aXRpZXMiLCJiaXRjb2luUGF5bWVudHMiLCJiaXRjb2luTGlnaHRuaW5nIiwiYml0Y29pbkV4cGxvcmVyIiwiYml0Y29pblJlc291cmNlcyIsImJpdGNvaW5Dcm93ZGZ1bmQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/FeaturesPage.js\n\n}')},"./components/FederationCoSignerSessionPanel.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Dropdown = _require2.Dropdown,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Message = _require2.Message,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! ../functions/federationContractInvite */ "./functions/federationContractInvite.js"),\n buildFederationContractInviteJson = _require3.buildFederationContractInviteJson,\n normalizeProposedPolicy = _require3.normalizeProposedPolicy,\n normalizeSpendingTerms = _require3.normalizeSpendingTerms;\nvar DRAFT_KEY = \'fabric.federation.coSignerSessionDraft\';\nfunction readDraft() {\n if (typeof window === \'undefined\') return null;\n try {\n var raw = window.localStorage.getItem(DRAFT_KEY);\n if (!raw) return null;\n var p = JSON.parse(raw);\n return p && _typeof(p) === \'object\' ? p : null;\n } catch (e) {\n return null;\n }\n}\nfunction writeDraft(obj) {\n if (typeof window === \'undefined\') return;\n try {\n window.localStorage.setItem(DRAFT_KEY, JSON.stringify(obj));\n } catch (e) {/* ignore */}\n}\nfunction fabricPeersFromBridge(bridge) {\n var ns = bridge && bridge.networkStatus;\n var peers = ns && Array.isArray(ns.peers) ? ns.peers : [];\n return peers.filter(function (peer) {\n if (!peer || _typeof(peer) !== \'object\') return false;\n var id = String(peer.id || \'\');\n var address = String(peer.address || \'\');\n if (id.startsWith(\'fabric-bridge-\') || address.startsWith(\'fabric-bridge-\')) return false;\n return !!(peer.id || peer.address);\n });\n}\nfunction peerSendTarget(peer) {\n if (!peer) return \'\';\n return String(peer.address || peer.id || \'\').trim();\n}\n\n/**\n * @param {{\n * bridgeRef: object,\n * validatorRows: string[],\n * setValidatorRows: function,\n * normalizePubkeyRows: function,\n * threshold: string,\n * PUBKEY_RE: RegExp\n * }} props\n */\nfunction FederationCoSignerSessionPanel(props) {\n var bridgeRef = props && props.bridgeRef;\n var validatorRows = props && props.validatorRows || [];\n var setValidatorRows = props && props.setValidatorRows;\n var normalizePubkeyRows = props && props.normalizePubkeyRows;\n var thresholdStr = props && props.threshold != null ? String(props.threshold) : \'1\';\n var PUBKEY_RE = props && props.PUBKEY_RE;\n var _React$useState = React.useState(0),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n tick = _React$useState2[0],\n setTick = _React$useState2[1];\n var _React$useState3 = React.useState(\'percent\'),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n spendMode = _React$useState4[0],\n setSpendMode = _React$useState4[1];\n var _React$useState5 = React.useState(\'10\'),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n spendValue = _React$useState6[0],\n setSpendValue = _React$useState6[1];\n var _React$useState7 = React.useState(\'\'),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n termsSummary = _React$useState8[0],\n setTermsSummary = _React$useState8[1];\n var _React$useState9 = React.useState(\'\'),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n shortNote = _React$useState0[0],\n setShortNote = _React$useState0[1];\n var _React$useState1 = React.useState(\'\'),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n peerChoice = _React$useState10[0],\n setPeerChoice = _React$useState10[1];\n var _React$useState11 = React.useState(false),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n busy = _React$useState12[0],\n setBusy = _React$useState12[1];\n var _React$useState13 = React.useState(null),\n _React$useState14 = _slicedToArray(_React$useState13, 2),\n msg = _React$useState14[0],\n setMsg = _React$useState14[1];\n React.useEffect(function () {\n var d = readDraft();\n if (d) {\n if (d.spendMode === \'percent\' || d.spendMode === \'sats\') setSpendMode(d.spendMode);\n if (d.spendValue != null) setSpendValue(String(d.spendValue));\n if (d.termsSummary) setTermsSummary(String(d.termsSummary));\n if (d.shortNote) setShortNote(String(d.shortNote));\n }\n }, []);\n React.useEffect(function () {\n writeDraft({\n spendMode: spendMode,\n spendValue: spendValue,\n termsSummary: termsSummary,\n shortNote: shortNote,\n savedAt: Date.now()\n });\n }, [spendMode, spendValue, termsSummary, shortNote]);\n React.useEffect(function () {\n var bump = function bump() {\n return setTick(function (t) {\n return t + 1;\n });\n };\n if (typeof window === \'undefined\') return undefined;\n window.addEventListener(\'networkStatusUpdate\', bump);\n return function () {\n return window.removeEventListener(\'networkStatusUpdate\', bump);\n };\n }, []);\n var bridge = bridgeRef && bridgeRef.current;\n var fabricPeers = fabricPeersFromBridge(bridge);\n void tick;\n var openIdentityModal = function openIdentityModal() {\n if (typeof window === \'undefined\') return;\n window.dispatchEvent(new CustomEvent(\'fabricOpenIdentityManager\'));\n };\n var insertMyWirePubkey = function insertMyWirePubkey() {\n setMsg(null);\n if (!bridge || typeof bridge.getHtlcRefundPublicKeyHex !== \'function\') {\n setMsg(\'Bridge is not ready.\');\n return;\n }\n if (!bridge.hasLocalWireSigningKey || !bridge.hasLocalWireSigningKey()) {\n setMsg(\'Unlock your identity first (Log in & unlock).\');\n return;\n }\n var pk = bridge.getHtlcRefundPublicKeyHex();\n if (!pk || !(PUBKEY_RE && PUBKEY_RE.test(pk))) {\n setMsg(\'Could not read a compressed secp256k1 pubkey from this session.\');\n return;\n }\n var lower = pk.toLowerCase();\n setValidatorRows(function (rows) {\n var cur = normalizePubkeyRows(rows);\n if (cur.some(function (k) {\n return k.toLowerCase() === lower;\n })) {\n setMsg(\'Your wire pubkey is already listed.\');\n return rows;\n }\n return [].concat(_toConsumableArray(cur), [pk]);\n });\n setMsg(\'Inserted this browser’s wire signing pubkey as a validator row.\');\n };\n var publishToPeers = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var lines, thr, proposedPolicy, sv, spendingTerms, ns, inviterHubId, targets, _iterator, _step, p, t, g, inviteId, publishSessionId, json, n, _i, _targets, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n setMsg(null);\n if (!(!bridge || typeof bridge.sendPeerMessageRequest !== \'function\')) {\n _context.n = 1;\n break;\n }\n setMsg(\'Bridge is not ready.\');\n return _context.a(2);\n case 1:\n if (!(!bridge.hasLocalWireSigningKey || !bridge.hasLocalWireSigningKey())) {\n _context.n = 2;\n break;\n }\n setMsg(\'Unlock your identity to send P2P invites.\');\n return _context.a(2);\n case 2:\n lines = normalizePubkeyRows(validatorRows);\n if (!(lines.length === 0)) {\n _context.n = 3;\n break;\n }\n setMsg(\'Add at least one validator public key before publishing.\');\n return _context.a(2);\n case 3:\n if (!lines.some(function (k) {\n return !(PUBKEY_RE && PUBKEY_RE.test(k));\n })) {\n _context.n = 4;\n break;\n }\n setMsg(\'Fix invalid validator rows (need 02/03 + 64 hex).\');\n return _context.a(2);\n case 4:\n thr = Number(thresholdStr);\n if (!Number.isFinite(thr) || thr < 1) thr = 1;\n if (thr > lines.length) thr = lines.length;\n proposedPolicy = normalizeProposedPolicy({\n validators: lines,\n threshold: thr\n });\n if (proposedPolicy) {\n _context.n = 5;\n break;\n }\n setMsg(\'Could not build proposed policy.\');\n return _context.a(2);\n case 5:\n sv = Number(spendValue);\n spendingTerms = normalizeSpendingTerms({\n mode: spendMode,\n value: sv\n });\n if (spendingTerms) {\n _context.n = 6;\n break;\n }\n setMsg(\'Enter a valid spending limit (percent 0–100 or sats ≥ 0).\');\n return _context.a(2);\n case 6:\n ns = bridge.networkStatus;\n inviterHubId = ns && ns.fabricPeerId != null ? String(ns.fabricPeerId) : \'\';\n targets = [];\n if (peerChoice === \'__all__\') {\n _iterator = _createForOfIteratorHelper(fabricPeers);\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n p = _step.value;\n t = peerSendTarget(p);\n if (t) targets.push(t);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } else if (peerChoice) {\n targets.push(peerChoice);\n }\n if (!(targets.length === 0)) {\n _context.n = 7;\n break;\n }\n setMsg(\'Pick a connected peer or “All Fabric peers” to publish the session.\');\n return _context.a(2);\n case 7:\n g = typeof globalThis !== \'undefined\' && globalThis.crypto ? globalThis.crypto : null;\n inviteId = g && g.randomUUID ? g.randomUUID() : function () {\n var a = new Uint8Array(8);\n if (g && g.getRandomValues) g.getRandomValues(a);\n return "fed-".concat(Date.now(), "-").concat(Array.from(a, function (b) {\n return b.toString(16).padStart(2, \'0\');\n }).join(\'\'));\n }();\n publishSessionId = inviteId;\n json = buildFederationContractInviteJson({\n inviteId: inviteId,\n inviterHubId: inviterHubId || null,\n contractId: null,\n note: shortNote.trim() || null,\n spendingTerms: spendingTerms,\n termsSummary: termsSummary.trim() || null,\n proposedPolicy: proposedPolicy,\n publishSessionId: publishSessionId\n });\n setBusy(true);\n try {\n n = 0;\n for (_i = 0, _targets = targets; _i < _targets.length; _i++) {\n _t = _targets[_i];\n bridge.sendPeerMessageRequest(_t, json);\n n++;\n }\n setMsg("Published pending federation session to ".concat(n, " peer(s). Co-signers will see a hub notification, then can review and accept."));\n } catch (e) {\n setMsg(e && e.message ? e.message : String(e));\n } finally {\n setBusy(false);\n }\n case 8:\n return _context.a(2);\n }\n }, _callee);\n }));\n return function publishToPeers() {\n return _ref.apply(this, arguments);\n };\n }();\n var peerOptions = [{\n key: \'x\',\n value: \'\',\n text: \'Select peer…\'\n }].concat(_toConsumableArray(fabricPeers.map(function (p, i) {\n var t = peerSendTarget(p);\n var nick = p.nickname ? String(p.nickname) : \'\';\n return {\n key: "".concat(t, "-").concat(i),\n value: t,\n text: nick ? "".concat(nick, " (").concat(t.slice(0, 14), "\\u2026)") : t\n };\n })), [{\n key: \'all\',\n value: \'__all__\',\n text: \'All connected Fabric peers\'\n }]);\n return /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: \'1rem\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "paper plane",\n color: "violet"\n }), "Co-signer session (publish)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n lineHeight: 1.5,\n marginBottom: \'0.85rem\'\n }\n }, "Draft a ", /*#__PURE__*/React.createElement("strong", null, "pending federation"), " with UI-visible spending rules, then publish over P2P chat so other operators can join the same session from their phone or browser. They get an in-app notification first; accepting opens a detail modal and only then sends their pubkey back."), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5rem\',\n marginBottom: \'1rem\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n as: Link,\n to: "/settings/security",\n basic: true,\n icon: true,\n labelPosition: "left"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sign in"\n }), "Log in (security)"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: openIdentityModal\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "user secret"\n }), "Unlock identity\\u2026"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n icon: true,\n labelPosition: "left",\n onClick: insertMyWirePubkey\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "key"\n }), "Import my wire pubkey")), /*#__PURE__*/React.createElement(Form, {\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n }\n }, /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fed-cosign-spend-mode"\n }, "Spending limit type"), /*#__PURE__*/React.createElement(Dropdown, {\n id: "fed-cosign-spend-mode",\n selection: true,\n options: [{\n value: \'percent\',\n text: \'Percent of treasury\'\n }, {\n value: \'sats\',\n text: \'Exact sats\'\n }],\n value: spendMode,\n onChange: function onChange(_, d) {\n return setSpendMode(String(d.value));\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fed-cosign-spend-value"\n }, spendMode === \'percent\' ? \'Percent (0–100)\' : \'Sats\'), /*#__PURE__*/React.createElement(Form.Input, {\n id: "fed-cosign-spend-value",\n type: "number",\n min: 0,\n max: spendMode === \'percent\' ? 100 : undefined,\n step: spendMode === \'percent\' ? 1 : 1,\n value: spendValue,\n onChange: function onChange(e) {\n return setSpendValue(e.target.value);\n }\n }))), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fed-cosign-terms"\n }, "Contract terms (shown to co-signers)"), /*#__PURE__*/React.createElement(Form.TextArea, {\n id: "fed-cosign-terms",\n rows: 4,\n placeholder: "Human-readable agreement: roles, review windows, emergency contacts, etc.",\n value: termsSummary,\n onChange: function onChange(e) {\n return setTermsSummary(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fed-cosign-note"\n }, "Short note (optional, P2P invite)"), /*#__PURE__*/React.createElement(Form.Input, {\n id: "fed-cosign-note",\n placeholder: "e.g. Regtest treasury \\u2014 please review by Friday",\n value: shortNote,\n onChange: function onChange(e) {\n return setShortNote(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fed-cosign-peer"\n }, "Send session to"), /*#__PURE__*/React.createElement(Dropdown, {\n id: "fed-cosign-peer",\n selection: true,\n search: true,\n placeholder: fabricPeers.length ? \'Choose peer or broadcast\' : \'No Fabric peers yet — open Peers\',\n options: peerOptions,\n value: peerChoice || undefined,\n onChange: function onChange(_, d) {\n return setPeerChoice(d.value != null ? String(d.value) : \'\');\n }\n })), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "violet",\n icon: true,\n labelPosition: "left",\n loading: busy,\n disabled: busy,\n onClick: function onClick() {\n return void publishToPeers();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "send"\n }), "Publish pending federation")), msg ? /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'1rem\'\n },\n onDismiss: function onDismiss() {\n return setMsg(null);\n }\n }, msg) : null);\n}\nmodule.exports = FederationCoSignerSessionPanel;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0ZlZGVyYXRpb25Db1NpZ25lclNlc3Npb25QYW5lbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFBQSxTQUFBQSxhQUFBLElBQ2IsdUtBQUFDLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxXQUFBLDhCQUFBQyxFQUFBTixDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLFFBQUFDLENBQUEsR0FBQUwsQ0FBQSxJQUFBQSxDQUFBLENBQUFNLFNBQUEsWUFBQUMsU0FBQSxHQUFBUCxDQUFBLEdBQUFPLFNBQUEsRUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLE1BQUEsQ0FBQUwsQ0FBQSxDQUFBQyxTQUFBLFVBQUFLLG1CQUFBLENBQUFILENBQUEsdUJBQUFWLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLFFBQUFFLENBQUEsRUFBQUMsQ0FBQSxFQUFBRyxDQUFBLEVBQUFJLENBQUEsTUFBQUMsQ0FBQSxHQUFBWCxDQUFBLFFBQUFZLENBQUEsT0FBQUMsQ0FBQSxLQUFBRixDQUFBLEtBQUFiLENBQUEsS0FBQWdCLENBQUEsRUFBQXBCLENBQUEsRUFBQXFCLENBQUEsRUFBQUMsQ0FBQSxFQUFBTixDQUFBLEVBQUFNLENBQUEsQ0FBQUMsSUFBQSxDQUFBdkIsQ0FBQSxNQUFBc0IsQ0FBQSxXQUFBQSxFQUFBckIsQ0FBQSxFQUFBQyxDQUFBLFdBQUFNLENBQUEsR0FBQVAsQ0FBQSxFQUFBUSxDQUFBLE1BQUFHLENBQUEsR0FBQVosQ0FBQSxFQUFBbUIsQ0FBQSxDQUFBZixDQUFBLEdBQUFGLENBQUEsRUFBQW1CLENBQUEsZ0JBQUFDLEVBQUFwQixDQUFBLEVBQUFFLENBQUEsU0FBQUssQ0FBQSxHQUFBUCxDQUFBLEVBQUFVLENBQUEsR0FBQVIsQ0FBQSxFQUFBSCxDQUFB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QUk7SUFBQ0MsSUFBSSxFQUFDLE9BQU87SUFBQ3JDLEtBQUssRUFBRTtNQUFFQyxTQUFTLEVBQUU7SUFBTyxDQUFFO0lBQUNxQyxTQUFTLEVBQUUsU0FBWEEsU0FBU0EsQ0FBQTtNQUFBLE9BQVE1RyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQUE7RUFBQyxHQUNwRkQsR0FDTSxDQUFDLEdBQ1IsSUFDRyxDQUFDO0FBRWQ7QUFFQThHLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHdkosOEJBQThCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0ZlZGVyYXRpb25Db1NpZ25lclNlc3Npb25QYW5lbC5qcz83OTVmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5jb25zdCB7XG4gIEJ1dHRvbixcbiAgRHJvcGRvd24sXG4gIEZvcm0sXG4gIEhlYWRlcixcbiAgSWNvbixcbiAgTWVzc2FnZSxcbiAgU2VnbWVudFxufSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCB7XG4gIGJ1aWxkRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlSnNvbixcbiAgbm9ybWFsaXplUHJvcG9zZWRQb2xpY3ksXG4gIG5vcm1hbGl6ZVNwZW5kaW5nVGVybXNcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlJyk7XG5cbmNvbnN0IERSQUZUX0tFWSA9ICdmYWJyaWMuZmVkZXJhdGlvbi5jb1NpZ25lclNlc3Npb25EcmFmdCc7XG5cbmZ1bmN0aW9uIHJlYWREcmFmdCAoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKERSQUZUX0tFWSk7XG4gICAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHAgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgcmV0dXJuIHAgJiYgdHlwZW9mIHAgPT09ICdvYmplY3QnID8gcCA6IG51bGw7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZURyYWZ0IChvYmopIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gIHRyeSB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKERSQUZUX0tFWSwgSlNPTi5zdHJpbmdpZnkob2JqKSk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbn1cblxuZnVuY3Rpb24gZmFicmljUGVlcnNGcm9tQnJpZGdlIChicmlkZ2UpIHtcbiAgY29uc3QgbnMgPSBicmlkZ2UgJiYgYnJpZGdlLm5ldHdvcmtTdGF0dXM7XG4gIGNvbnN0IHBlZXJzID0gbnMgJiYgQXJyYXkuaXNBcnJheShucy5wZWVycykgPyBucy5wZWVycyA6IFtdO1xuICByZXR1cm4gcGVlcnMuZmlsdGVyKChwZWVyKSA9PiB7XG4gICAgaWYgKCFwZWVyIHx8IHR5cGVvZiBwZWVyICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGlkID0gU3RyaW5nKHBlZXIuaWQgfHwgJycpO1xuICAgIGNvbnN0IGFkZHJlc3MgPSBTdHJpbmcocGVlci5hZGRyZXNzIHx8ICcnKTtcbiAgICBpZiAoaWQuc3RhcnRzV2l0aCgnZmFicmljLWJyaWRnZS0nKSB8fCBhZGRyZXNzLnN0YXJ0c1dpdGgoJ2ZhYnJpYy1icmlkZ2UtJykpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gISEocGVlci5pZCB8fCBwZWVyLmFkZHJlc3MpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGVlclNlbmRUYXJnZXQgKHBlZXIpIHtcbiAgaWYgKCFwZWVyKSByZXR1cm4gJyc7XG4gIHJldHVybiBTdHJpbmcocGVlci5hZGRyZXNzIHx8IHBlZXIuaWQgfHwgJycpLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3tcbiAqICAgYnJpZGdlUmVmOiBvYmplY3QsXG4gKiAgIHZhbGlkYXRvclJvd3M6IHN0cmluZ1tdLFxuICogICBzZXRWYWxpZGF0b3JSb3dzOiBmdW5jdGlvbixcbiAqICAgbm9ybWFsaXplUHVia2V5Um93czogZnVuY3Rpb24sXG4gKiAgIHRocmVzaG9sZDogc3RyaW5nLFxuICogICBQVUJLRVlfUkU6IFJlZ0V4cFxuICogfX0gcHJvcHNcbiAqL1xuZnVuY3Rpb24gRmVkZXJhdGlvbkNvU2lnbmVyU2Vzc2lvblBhbmVsIChwcm9wcykge1xuICBjb25zdCBicmlkZ2VSZWYgPSBwcm9wcyAmJiBwcm9wcy5icmlkZ2VSZWY7XG4gIGNvbnN0IHZhbGlkYXRvclJvd3MgPSAocHJvcHMgJiYgcHJvcHMudmFsaWRhdG9yUm93cykgfHwgW107XG4gIGNvbnN0IHNldFZhbGlkYXRvclJvd3MgPSBwcm9wcyAmJiBwcm9wcy5zZXRWYWxpZGF0b3JSb3dzO1xuICBjb25zdCBub3JtYWxpemVQdWJrZXlSb3dzID0gcHJvcHMgJiYgcHJvcHMubm9ybWFsaXplUHVia2V5Um93cztcbiAgY29uc3QgdGhyZXNob2xkU3RyID0gcHJvcHMgJiYgcHJvcHMudGhyZXNob2xkICE9IG51bGwgPyBTdHJpbmcocHJvcHMudGhyZXNob2xkKSA6ICcxJztcbiAgY29uc3QgUFVCS0VZX1JFID0gcHJvcHMgJiYgcHJvcHMuUFVCS0VZX1JFO1xuXG4gIGNvbnN0IFt0aWNrLCBzZXRUaWNrXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICBjb25zdCBbc3BlbmRNb2RlLCBzZXRTcGVuZE1vZGVdID0gUmVhY3QudXNlU3RhdGUoJ3BlcmNlbnQnKTtcbiAgY29uc3QgW3NwZW5kVmFsdWUsIHNldFNwZW5kVmFsdWVdID0gUmVhY3QudXNlU3RhdGUoJzEwJyk7XG4gIGNvbnN0IFt0ZXJtc1N1bW1hcnksIHNldFRlcm1zU3VtbWFyeV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzaG9ydE5vdGUsIHNldFNob3J0Tm90ZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtwZWVyQ2hvaWNlLCBzZXRQZWVyQ2hvaWNlXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2J1c3ksIHNldEJ1c3ldID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbXNnLCBzZXRNc2ddID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkID0gcmVhZERyYWZ0KCk7XG4gICAgaWYgKGQpIHtcbiAgICAgIGlmIChkLnNwZW5kTW9kZSA9PT0gJ3BlcmNlbnQnIHx8IGQuc3BlbmRNb2RlID09PSAnc2F0cycpIHNldFNwZW5kTW9kZShkLnNwZW5kTW9kZSk7XG4gICAgICBpZiAoZC5zcGVuZFZhbHVlICE9IG51bGwpIHNldFNwZW5kVmFsdWUoU3RyaW5nKGQuc3BlbmRWYWx1ZSkpO1xuICAgICAgaWYgKGQudGVybXNTdW1tYXJ5KSBzZXRUZXJtc1N1bW1hcnkoU3RyaW5nKGQudGVybXNTdW1tYXJ5KSk7XG4gICAgICBpZiAoZC5zaG9ydE5vdGUpIHNldFNob3J0Tm90ZShTdHJpbmcoZC5zaG9ydE5vdGUpKTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdyaXRlRHJhZnQoe1xuICAgICAgc3BlbmRNb2RlLFxuICAgICAgc3BlbmRWYWx1ZSxcbiAgICAgIHRlcm1zU3VtbWFyeSxcbiAgICAgIHNob3J0Tm90ZSxcbiAgICAgIHNhdmVkQXQ6IERhdGUubm93KClcbiAgICB9KTtcbiAgfSwgW3NwZW5kTW9kZSwgc3BlbmRWYWx1ZSwgdGVybXNTdW1tYXJ5LCBzaG9ydE5vdGVdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGJ1bXAgPSAoKSA9PiBzZXRUaWNrKCh0KSA9PiB0ICsgMSk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCduZXR3b3JrU3RhdHVzVXBkYXRlJywgYnVtcCk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCduZXR3b3JrU3RhdHVzVXBkYXRlJywgYnVtcCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBicmlkZ2UgPSBicmlkZ2VSZWYgJiYgYnJpZGdlUmVmLmN1cnJlbnQ7XG4gIGNvbnN0IGZhYnJpY1BlZXJzID0gZmFicmljUGVlcnNGcm9tQnJpZGdlKGJyaWRnZSk7XG4gIHZvaWQgdGljaztcblxuICBjb25zdCBvcGVuSWRlbnRpdHlNb2RhbCA9ICgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2ZhYnJpY09wZW5JZGVudGl0eU1hbmFnZXInKSk7XG4gIH07XG5cbiAgY29uc3QgaW5zZXJ0TXlXaXJlUHVia2V5ID0gKCkgPT4ge1xuICAgIHNldE1zZyhudWxsKTtcbiAgICBpZiAoIWJyaWRnZSB8fCB0eXBlb2YgYnJpZGdlLmdldEh0bGNSZWZ1bmRQdWJsaWNLZXlIZXggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHNldE1zZygnQnJpZGdlIGlzIG5vdCByZWFkeS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFicmlkZ2UuaGFzTG9jYWxXaXJlU2lnbmluZ0tleSB8fCAhYnJpZGdlLmhhc0xvY2FsV2lyZVNpZ25pbmdLZXkoKSkge1xuICAgICAgc2V0TXNnKCdVbmxvY2sgeW91ciBpZGVudGl0eSBmaXJzdCAoTG9nIGluICYgdW5sb2NrKS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGsgPSBicmlkZ2UuZ2V0SHRsY1JlZnVuZFB1YmxpY0tleUhleCgpO1xuICAgIGlmICghcGsgfHwgIShQVUJLRVlfUkUgJiYgUFVCS0VZX1JFLnRlc3QocGspKSkge1xuICAgICAgc2V0TXNnKCdDb3VsZCBub3QgcmVhZCBhIGNvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmtleSBmcm9tIHRoaXMgc2Vzc2lvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbG93ZXIgPSBway50b0xvd2VyQ2FzZSgpO1xuICAgIHNldFZhbGlkYXRvclJvd3MoKHJvd3MpID0+IHtcbiAgICAgIGNvbnN0IGN1ciA9IG5vcm1hbGl6ZVB1YmtleVJvd3Mocm93cyk7XG4gICAgICBpZiAoY3VyLnNvbWUoKGspID0+IGsudG9Mb3dlckNhc2UoKSA9PT0gbG93ZXIpKSB7XG4gICAgICAgIHNldE1zZygnWW91ciB3aXJlIHB1YmtleSBpcyBhbHJlYWR5IGxpc3RlZC4nKTtcbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgICB9XG4gICAgICByZXR1cm4gWy4uLmN1ciwgcGtdO1xuICAgIH0pO1xuICAgIHNldE1zZygnSW5zZXJ0ZWQgdGhpcyBicm93c2Vy4oCZcyB3aXJlIHNpZ25pbmcgcHVia2V5IGFzIGEgdmFsaWRhdG9yIHJvdy4nKTtcbiAgfTtcblxuICBjb25zdCBwdWJsaXNoVG9QZWVycyA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRNc2cobnVsbCk7XG4gICAgaWYgKCFicmlkZ2UgfHwgdHlwZW9mIGJyaWRnZS5zZW5kUGVlck1lc3NhZ2VSZXF1ZXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzZXRNc2coJ0JyaWRnZSBpcyBub3QgcmVhZHkuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYnJpZGdlLmhhc0xvY2FsV2lyZVNpZ25pbmdLZXkgfHwgIWJyaWRnZS5oYXNMb2NhbFdpcmVTaWduaW5nS2V5KCkpIHtcbiAgICAgIHNldE1zZygnVW5sb2NrIHlvdXIgaWRlbnRpdHkgdG8gc2VuZCBQMlAgaW52aXRlcy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGluZXMgPSBub3JtYWxpemVQdWJrZXlSb3dzKHZhbGlkYXRvclJvd3MpO1xuICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHNldE1zZygnQWRkIGF0IGxlYXN0IG9uZSB2YWxpZGF0b3IgcHVibGljIGtleSBiZWZvcmUgcHVibGlzaGluZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGxpbmVzLnNvbWUoKGspID0+ICEoUFVCS0VZX1JFICYmIFBVQktFWV9SRS50ZXN0KGspKSkpIHtcbiAgICAgIHNldE1zZygnRml4IGludmFsaWQgdmFsaWRhdG9yIHJvd3MgKG5lZWQgMDIvMDMgKyA2NCBoZXgpLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGhyID0gTnVtYmVyKHRocmVzaG9sZFN0cik7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGhyKSB8fCB0aHIgPCAxKSB0aHIgPSAxO1xuICAgIGlmICh0aHIgPiBsaW5lcy5sZW5ndGgpIHRociA9IGxpbmVzLmxlbmd0aDtcbiAgICBjb25zdCBwcm9wb3NlZFBvbGljeSA9IG5vcm1hbGl6ZVByb3Bvc2VkUG9saWN5KHsgdmFsaWRhdG9yczogbGluZXMsIHRocmVzaG9sZDogdGhyIH0pO1xuICAgIGlmICghcHJvcG9zZWRQb2xpY3kpIHtcbiAgICAgIHNldE1zZygnQ291bGQgbm90IGJ1aWxkIHByb3Bvc2VkIHBvbGljeS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3YgPSBOdW1iZXIoc3BlbmRWYWx1ZSk7XG4gICAgY29uc3Qgc3BlbmRpbmdUZXJtcyA9IG5vcm1hbGl6ZVNwZW5kaW5nVGVybXMoe1xuICAgICAgbW9kZTogc3BlbmRNb2RlLFxuICAgICAgdmFsdWU6IHN2XG4gICAgfSk7XG4gICAgaWYgKCFzcGVuZGluZ1Rlcm1zKSB7XG4gICAgICBzZXRNc2coJ0VudGVyIGEgdmFsaWQgc3BlbmRpbmcgbGltaXQgKHBlcmNlbnQgMOKAkzEwMCBvciBzYXRzIOKJpSAwKS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBucyA9IGJyaWRnZS5uZXR3b3JrU3RhdHVzO1xuICAgIGNvbnN0IGludml0ZXJIdWJJZCA9IG5zICYmIG5zLmZhYnJpY1BlZXJJZCAhPSBudWxsID8gU3RyaW5nKG5zLmZhYnJpY1BlZXJJZCkgOiAnJztcblxuICAgIGNvbnN0IHRhcmdldHMgPSBbXTtcbiAgICBpZiAocGVlckNob2ljZSA9PT0gJ19fYWxsX18nKSB7XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgZmFicmljUGVlcnMpIHtcbiAgICAgICAgY29uc3QgdCA9IHBlZXJTZW5kVGFyZ2V0KHApO1xuICAgICAgICBpZiAodCkgdGFyZ2V0cy5wdXNoKHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocGVlckNob2ljZSkge1xuICAgICAgdGFyZ2V0cy5wdXNoKHBlZXJDaG9pY2UpO1xuICAgIH1cbiAgICBpZiAodGFyZ2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHNldE1zZygnUGljayBhIGNvbm5lY3RlZCBwZWVyIG9yIOKAnEFsbCBGYWJyaWMgcGVlcnPigJ0gdG8gcHVibGlzaCB0aGUgc2Vzc2lvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBnID0gKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzLmNyeXB0bykgPyBnbG9iYWxUaGlzLmNyeXB0byA6IG51bGw7XG4gICAgY29uc3QgaW52aXRlSWQgPSBnICYmIGcucmFuZG9tVVVJRFxuICAgICAgPyBnLnJhbmRvbVVVSUQoKVxuICAgICAgOiAoKCkgPT4ge1xuICAgICAgICBjb25zdCBhID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gICAgICAgIGlmIChnICYmIGcuZ2V0UmFuZG9tVmFsdWVzKSBnLmdldFJhbmRvbVZhbHVlcyhhKTtcbiAgICAgICAgcmV0dXJuIGBmZWQtJHtEYXRlLm5vdygpfS0ke0FycmF5LmZyb20oYSwgKGIpID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWA7XG4gICAgICB9KSgpO1xuICAgIGNvbnN0IHB1Ymxpc2hTZXNzaW9uSWQgPSBpbnZpdGVJZDtcbiAgICBjb25zdCBqc29uID0gYnVpbGRGZWRlcmF0aW9uQ29udHJhY3RJbnZpdGVKc29uKHtcbiAgICAgIGludml0ZUlkLFxuICAgICAgaW52aXRlckh1YklkOiBpbnZpdGVySHViSWQgfHwgbnVsbCxcbiAgICAgIGNvbnRyYWN0SWQ6IG51bGwsXG4gICAgICBub3RlOiBzaG9ydE5vdGUudHJpbSgpIHx8IG51bGwsXG4gICAgICBzcGVuZGluZ1Rlcm1zLFxuICAgICAgdGVybXNTdW1tYXJ5OiB0ZXJtc1N1bW1hcnkudHJpbSgpIHx8IG51bGwsXG4gICAgICBwcm9wb3NlZFBvbGljeSxcbiAgICAgIHB1Ymxpc2hTZXNzaW9uSWRcbiAgICB9KTtcblxuICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBuID0gMDtcbiAgICAgIGZvciAoY29uc3QgdCBvZiB0YXJnZXRzKSB7XG4gICAgICAgIGJyaWRnZS5zZW5kUGVlck1lc3NhZ2VSZXF1ZXN0KHQsIGpzb24pO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICBzZXRNc2coYFB1Ymxpc2hlZCBwZW5kaW5nIGZlZGVyYXRpb24gc2Vzc2lvbiB0byAke259IHBlZXIocykuIENvLXNpZ25lcnMgd2lsbCBzZWUgYSBodWIgbm90aWZpY2F0aW9uLCB0aGVuIGNhbiByZXZpZXcgYW5kIGFjY2VwdC5gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXRNc2coZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGVlck9wdGlvbnMgPSBbXG4gICAgeyBrZXk6ICd4JywgdmFsdWU6ICcnLCB0ZXh0OiAnU2VsZWN0IHBlZXLigKYnIH0sXG4gICAgLi4uZmFicmljUGVlcnMubWFwKChwLCBpKSA9PiB7XG4gICAgICBjb25zdCB0ID0gcGVlclNlbmRUYXJnZXQocCk7XG4gICAgICBjb25zdCBuaWNrID0gcC5uaWNrbmFtZSA/IFN0cmluZyhwLm5pY2tuYW1lKSA6ICcnO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBgJHt0fS0ke2l9YCxcbiAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgIHRleHQ6IG5pY2sgPyBgJHtuaWNrfSAoJHt0LnNsaWNlKDAsIDE0KX3igKYpYCA6IHRcbiAgICAgIH07XG4gICAgfSksXG4gICAgeyBrZXk6ICdhbGwnLCB2YWx1ZTogJ19fYWxsX18nLCB0ZXh0OiAnQWxsIGNvbm5lY3RlZCBGYWJyaWMgcGVlcnMnIH1cbiAgXTtcblxuICByZXR1cm4gKFxuICAgIDxTZWdtZW50IHN0eWxlPXt7IG1hcmdpblRvcDogJzFyZW0nIH19PlxuICAgICAgPEhlYWRlciBhcz1cImgzXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlxuICAgICAgICA8SWNvbiBuYW1lPVwicGFwZXIgcGxhbmVcIiBjb2xvcj1cInZpb2xldFwiIC8+XG4gICAgICAgIENvLXNpZ25lciBzZXNzaW9uIChwdWJsaXNoKVxuICAgICAgPC9IZWFkZXI+XG4gICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBsaW5lSGVpZ2h0OiAxLjUsIG1hcmdpbkJvdHRvbTogJzAuODVyZW0nIH19PlxuICAgICAgICBEcmFmdCBhIDxzdHJvbmc+cGVuZGluZyBmZWRlcmF0aW9uPC9zdHJvbmc+IHdpdGggVUktdmlzaWJsZSBzcGVuZGluZyBydWxlcywgdGhlbiBwdWJsaXNoIG92ZXIgUDJQIGNoYXQgc28gb3RoZXIgb3BlcmF0b3JzIGNhblxuICAgICAgICBqb2luIHRoZSBzYW1lIHNlc3Npb24gZnJvbSB0aGVpciBwaG9uZSBvciBicm93c2VyLiBUaGV5IGdldCBhbiBpbi1hcHAgbm90aWZpY2F0aW9uIGZpcnN0OyBhY2NlcHRpbmcgb3BlbnMgYSBkZXRhaWwgbW9kYWwgYW5kXG4gICAgICAgIG9ubHkgdGhlbiBzZW5kcyB0aGVpciBwdWJrZXkgYmFjay5cbiAgICAgIDwvcD5cblxuICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuNXJlbScsIG1hcmdpbkJvdHRvbTogJzFyZW0nIH19PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgdG89XCIvc2V0dGluZ3Mvc2VjdXJpdHlcIlxuICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgaWNvblxuICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJzaWduIGluXCIgLz5cbiAgICAgICAgICBMb2cgaW4gKHNlY3VyaXR5KVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYmFzaWMgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiIG9uQ2xpY2s9e29wZW5JZGVudGl0eU1vZGFsfT5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwidXNlciBzZWNyZXRcIiAvPlxuICAgICAgICAgIFVubG9jayBpZGVudGl0eeKAplxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcHJpbWFyeSBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCIgb25DbGljaz17aW5zZXJ0TXlXaXJlUHVia2V5fT5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwia2V5XCIgLz5cbiAgICAgICAgICBJbXBvcnQgbXkgd2lyZSBwdWJrZXlcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPEZvcm0gb25TdWJtaXQ9eyhlKSA9PiB7IGUucHJldmVudERlZmF1bHQoKTsgfX0+XG4gICAgICAgIDxGb3JtLkdyb3VwIHdpZHRocz1cImVxdWFsXCI+XG4gICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImZlZC1jb3NpZ24tc3BlbmQtbW9kZVwiPlNwZW5kaW5nIGxpbWl0IHR5cGU8L2xhYmVsPlxuICAgICAgICAgICAgPERyb3Bkb3duXG4gICAgICAgICAgICAgIGlkPVwiZmVkLWNvc2lnbi1zcGVuZC1tb2RlXCJcbiAgICAgICAgICAgICAgc2VsZWN0aW9uXG4gICAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgICB7IHZhbHVlOiAncGVyY2VudCcsIHRleHQ6ICdQZXJjZW50IG9mIHRyZWFzdXJ5JyB9LFxuICAgICAgICAgICAgICAgIHsgdmFsdWU6ICdzYXRzJywgdGV4dDogJ0V4YWN0IHNhdHMnIH1cbiAgICAgICAgICAgICAgXX1cbiAgICAgICAgICAgICAgdmFsdWU9e3NwZW5kTW9kZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhfLCBkKSA9PiBzZXRTcGVuZE1vZGUoU3RyaW5nKGQudmFsdWUpKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJmZWQtY29zaWduLXNwZW5kLXZhbHVlXCI+e3NwZW5kTW9kZSA9PT0gJ3BlcmNlbnQnID8gJ1BlcmNlbnQgKDDigJMxMDApJyA6ICdTYXRzJ308L2xhYmVsPlxuICAgICAgICAgICAgPEZvcm0uSW5wdXRcbiAgICAgICAgICAgICAgaWQ9XCJmZWQtY29zaWduLXNwZW5kLXZhbHVlXCJcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgIG1pbj17MH1cbiAgICAgICAgICAgICAgbWF4PXtzcGVuZE1vZGUgPT09ICdwZXJjZW50JyA/IDEwMCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgc3RlcD17c3BlbmRNb2RlID09PSAncGVyY2VudCcgPyAxIDogMX1cbiAgICAgICAgICAgICAgdmFsdWU9e3NwZW5kVmFsdWV9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U3BlbmRWYWx1ZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgPC9Gb3JtLkdyb3VwPlxuICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImZlZC1jb3NpZ24tdGVybXNcIj5Db250cmFjdCB0ZXJtcyAoc2hvd24gdG8gY28tc2lnbmVycyk8L2xhYmVsPlxuICAgICAgICAgIDxGb3JtLlRleHRBcmVhXG4gICAgICAgICAgICBpZD1cImZlZC1jb3NpZ24tdGVybXNcIlxuICAgICAgICAgICAgcm93cz17NH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSHVtYW4tcmVhZGFibGUgYWdyZWVtZW50OiByb2xlcywgcmV2aWV3IHdpbmRvd3MsIGVtZXJnZW5jeSBjb250YWN0cywgZXRjLlwiXG4gICAgICAgICAgICB2YWx1ZT17dGVybXNTdW1tYXJ5fVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRUZXJtc1N1bW1hcnkoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJmZWQtY29zaWduLW5vdGVcIj5TaG9ydCBub3RlIChvcHRpb25hbCwgUDJQIGludml0ZSk8L2xhYmVsPlxuICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICBpZD1cImZlZC1jb3NpZ24tbm90ZVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gUmVndGVzdCB0cmVhc3VyeSDigJQgcGxlYXNlIHJldmlldyBieSBGcmlkYXlcIlxuICAgICAgICAgICAgdmFsdWU9e3Nob3J0Tm90ZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2hvcnROb3RlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiZmVkLWNvc2lnbi1wZWVyXCI+U2VuZCBzZXNzaW9uIHRvPC9sYWJlbD5cbiAgICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICAgIGlkPVwiZmVkLWNvc2lnbi1wZWVyXCJcbiAgICAgICAgICAgIHNlbGVjdGlvblxuICAgICAgICAgICAgc2VhcmNoXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17ZmFicmljUGVlcnMubGVuZ3RoID8gJ0Nob29zZSBwZWVyIG9yIGJyb2FkY2FzdCcgOiAnTm8gRmFicmljIHBlZXJzIHlldCDigJQgb3BlbiBQZWVycyd9XG4gICAgICAgICAgICBvcHRpb25zPXtwZWVyT3B0aW9uc31cbiAgICAgICAgICAgIHZhbHVlPXtwZWVyQ2hvaWNlIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoXywgZCkgPT4gc2V0UGVlckNob2ljZShkLnZhbHVlICE9IG51bGwgPyBTdHJpbmcoZC52YWx1ZSkgOiAnJyl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY29sb3I9XCJ2aW9sZXRcIlxuICAgICAgICAgIGljb25cbiAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgbG9hZGluZz17YnVzeX1cbiAgICAgICAgICBkaXNhYmxlZD17YnVzeX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIHB1Ymxpc2hUb1BlZXJzKCl9XG4gICAgICAgID5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwic2VuZFwiIC8+XG4gICAgICAgICAgUHVibGlzaCBwZW5kaW5nIGZlZGVyYXRpb25cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L0Zvcm0+XG5cbiAgICAgIHttc2cgPyAoXG4gICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMXJlbScgfX0gb25EaXNtaXNzPXsoKSA9PiBzZXRNc2cobnVsbCl9PlxuICAgICAgICAgIHttc2d9XG4gICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvU2VnbWVudD5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGZWRlcmF0aW9uQ29TaWduZXJTZXNzaW9uUGFuZWw7XG4iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yIiwiZSIsInQiLCJyIiwiU3ltYm9sIiwibiIsIml0ZXJhdG9yIiwibyIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJwcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9uIiwiRiIsInMiLCJuZXh0IiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsImZyb20iLCJfYXJyYXlMaWtlVG9BcnJheSIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX25vbkl0ZXJhYmxlUmVzdCIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJ0ZXN0IiwicHVzaCIsIl90eXBlb2YiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJEcm9wZG93biIsIkZvcm0iLCJIZWFkZXIiLCJJY29uIiwiTWVzc2FnZSIsIlNlZ21lbnQiLCJfcmVxdWlyZTMiLCJidWlsZEZlZGVyYXRpb25Db250cmFjdEludml0ZUpzb24iLCJub3JtYWxpemVQcm9wb3NlZFBvbGljeSIsIm5vcm1hbGl6ZVNwZW5kaW5nVGVybXMiLCJEUkFGVF9LRVkiLCJyZWFkRHJhZnQiLCJ3aW5kb3ciLCJyYXciLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiSlNPTiIsInBhcnNlIiwid3JpdGVEcmFmdCIsIm9iaiIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJmYWJyaWNQZWVyc0Zyb21CcmlkZ2UiLCJicmlkZ2UiLCJucyIsIm5ldHdvcmtTdGF0dXMiLCJwZWVycyIsImZpbHRlciIsInBlZXIiLCJpZCIsIlN0cmluZyIsImFkZHJlc3MiLCJzdGFydHNXaXRoIiwicGVlclNlbmRUYXJnZXQiLCJ0cmltIiwiRmVkZXJhdGlvbkNvU2lnbmVyU2Vzc2lvblBhbmVsIiwicHJvcHMiLCJicmlkZ2VSZWYiLCJ2YWxpZGF0b3JSb3dzIiwic2V0VmFsaWRhdG9yUm93cyIsIm5vcm1hbGl6ZVB1YmtleVJvd3MiLCJ0aHJlc2hvbGRTdHIiLCJ0aHJlc2hvbGQiLCJQVUJLRVlfUkUiLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJ0aWNrIiwic2V0VGljayIsIl9SZWFjdCR1c2VTdGF0ZTMiLCJfUmVhY3QkdXNlU3RhdGU0Iiwic3BlbmRNb2RlIiwic2V0U3BlbmRNb2RlIiwiX1JlYWN0JHVzZVN0YXRlNSIsIl9SZWFjdCR1c2VTdGF0ZTYiLCJzcGVuZFZhbHVlIiwic2V0U3BlbmRWYWx1ZSIsIl9SZWFjdCR1c2VTdGF0ZTciLCJfUmVhY3QkdXNlU3RhdGU4IiwidGVybXNTdW1tYXJ5Iiwic2V0VGVybXNTdW1tYXJ5IiwiX1JlYWN0JHVzZVN0YXRlOSIsIl9SZWFjdCR1c2VTdGF0ZTAiLCJzaG9ydE5vdGUiLCJzZXRTaG9ydE5vdGUiLCJfUmVhY3QkdXNlU3RhdGUxIiwiX1JlYWN0JHVzZVN0YXRlMTAiLCJwZWVyQ2hvaWNlIiwic2V0UGVlckNob2ljZSIsIl9SZWFjdCR1c2VTdGF0ZTExIiwiX1JlYWN0JHVzZVN0YXRlMTIiLCJidXN5Iiwic2V0QnVzeSIsIl9SZWFjdCR1c2VTdGF0ZTEzIiwiX1JlYWN0JHVzZVN0YXRlMTQiLCJtc2ciLCJzZXRNc2ciLCJ1c2VFZmZlY3QiLCJzYXZlZEF0IiwiRGF0ZSIsIm5vdyIsImJ1bXAiLCJ1bmRlZmluZWQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImN1cnJlbnQiLCJmYWJyaWNQZWVycyIsIm9wZW5JZGVudGl0eU1vZGFsIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiaW5zZXJ0TXlXaXJlUHVia2V5IiwiZ2V0SHRsY1JlZnVuZFB1YmxpY0tleUhleCIsImhhc0xvY2FsV2lyZVNpZ25pbmdLZXkiLCJwayIsImxvd2VyIiwidG9Mb3dlckNhc2UiLCJyb3dzIiwiY3VyIiwic29tZSIsImsiLCJjb25jYXQiLCJwdWJsaXNoVG9QZWVycyIsIl9yZWYiLCJfY2FsbGVlIiwibGluZXMiLCJ0aHIiLCJwcm9wb3NlZFBvbGljeSIsInN2Iiwic3BlbmRpbmdUZXJtcyIsImludml0ZXJIdWJJZCIsInRhcmdldHMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImciLCJpbnZpdGVJZCIsInB1Ymxpc2hTZXNzaW9uSWQiLCJqc29uIiwiX2kiLCJfdGFyZ2V0cyIsIl90IiwiX2NvbnRleHQiLCJzZW5kUGVlck1lc3NhZ2VSZXF1ZXN0IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJ2YWxpZGF0b3JzIiwibW9kZSIsImZhYnJpY1BlZXJJZCIsImVyciIsImdsb2JhbFRoaXMiLCJjcnlwdG8iLCJyYW5kb21VVUlEIiwiVWludDhBcnJheSIsImdldFJhbmRvbVZhbHVlcyIsImIiLCJwYWRTdGFydCIsImpvaW4iLCJjb250cmFjdElkIiwibm90ZSIsIm1lc3NhZ2UiLCJwZWVyT3B0aW9ucyIsImtleSIsInRleHQiLCJtYXAiLCJuaWNrIiwibmlja25hbWUiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJhcyIsImNvbG9yIiwibGluZUhlaWdodCIsIm1hcmdpbkJvdHRvbSIsImRpc3BsYXkiLCJmbGV4V3JhcCIsImdhcCIsInR5cGUiLCJ0byIsImJhc2ljIiwiaWNvbiIsImxhYmVsUG9zaXRpb24iLCJvbkNsaWNrIiwicHJpbWFyeSIsIm9uU3VibWl0IiwicHJldmVudERlZmF1bHQiLCJHcm91cCIsIndpZHRocyIsIkZpZWxkIiwiaHRtbEZvciIsInNlbGVjdGlvbiIsIm9wdGlvbnMiLCJvbkNoYW5nZSIsIl8iLCJJbnB1dCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ0YXJnZXQiLCJUZXh0QXJlYSIsInBsYWNlaG9sZGVyIiwic2VhcmNoIiwibG9hZGluZyIsImRpc2FibGVkIiwiaW5mbyIsInNpemUiLCJvbkRpc21pc3MiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/FederationCoSignerSessionPanel.js\n\n}')},"./components/FederationContractInviteModal.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Modal = _require2.Modal,\n Button = _require2.Button,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Message = _require2.Message,\n List = _require2.List,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! ../functions/federationContractInvite */ "./functions/federationContractInvite.js"),\n buildFederationContractInviteResponseJson = _require3.buildFederationContractInviteResponseJson,\n normalizeProposedPolicy = _require3.normalizeProposedPolicy,\n normalizeSpendingTerms = _require3.normalizeSpendingTerms,\n formatFederationInviteSpendingSummary = _require3.formatFederationInviteSpendingSummary;\nfunction FederationContractInviteModal(props) {\n var open = !!(props && props.open);\n var detail = props && props.detail;\n var onClose = props && typeof props.onClose === \'function\' ? props.onClose : function () {};\n var onSendPeerMessage = props && typeof props.onSendPeerMessage === \'function\' ? props.onSendPeerMessage : null;\n var getResponderPubkey = props && typeof props.getResponderPubkey === \'function\' ? props.getResponderPubkey : function () {\n return \'\';\n };\n var sendResponse = React.useCallback(function (accept) {\n if (!detail || !detail.toPeerId || !onSendPeerMessage) {\n onClose();\n return;\n }\n var pk = getResponderPubkey() || null;\n var json = buildFederationContractInviteResponseJson({\n inviteId: detail.inviteId,\n accept: accept,\n responderPubkey: pk\n });\n onSendPeerMessage(detail.toPeerId, json);\n onClose();\n }, [detail, getResponderPubkey, onClose, onSendPeerMessage]);\n if (!open || !detail) return null;\n var note = detail.note ? String(detail.note) : \'\';\n var contractId = detail.contractId ? String(detail.contractId) : \'\';\n var spendingTerms = normalizeSpendingTerms(detail.spendingTerms);\n var proposedPolicy = normalizeProposedPolicy(detail.proposedPolicy);\n var termsSummary = detail.termsSummary ? String(detail.termsSummary).trim() : \'\';\n var capLine = formatFederationInviteSpendingSummary(detail);\n var previewPk = getResponderPubkey() || \'\';\n var pkLooksValidator = /^0[23][0-9a-fA-F]{64}$/.test(previewPk);\n return /*#__PURE__*/React.createElement(Modal, {\n open: open,\n onClose: onClose,\n size: "small",\n closeIcon: true,\n "aria-labelledby": "federation-invite-heading"\n }, /*#__PURE__*/React.createElement(Header, {\n icon: true,\n id: "federation-invite-heading"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users"\n }), "Federation contract invite"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: 0\n }\n }, "Another hub invited this identity to join a ", /*#__PURE__*/React.createElement("strong", null, "distributed federation"), " (sidechain patches / beacon witnesses). Review every field below before you accept \\u2014 accepting sends your ", /*#__PURE__*/React.createElement("strong", null, "compressed secp256k1 pubkey"), " to the inviter."), contractId ? /*#__PURE__*/React.createElement("p", null, "Referenced execution contract id: ", /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, contractId), \' \', "(see ", /*#__PURE__*/React.createElement(Link, {\n to: "/contracts/".concat(encodeURIComponent(contractId))\n }, "contract"), ").") : null, spendingTerms || capLine ? /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n marginTop: \'0.75rem\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: 0\n }\n }, "Spending limit (UI terms)"), capLine ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.25em 0\',\n fontWeight: 600\n }\n }, capLine) : null, spendingTerms ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.25em 0\',\n color: \'#555\',\n fontSize: \'0.9em\'\n }\n }, "Mode: ", /*#__PURE__*/React.createElement("code", null, spendingTerms.mode), \' · \', "Value: ", /*#__PURE__*/React.createElement("code", null, spendingTerms.value), spendingTerms.mode === \'percent\' ? \'%\' : \' sats\') : null) : null, termsSummary ? /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: \'0.75rem\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: 0\n }\n }, "Agreement text"), /*#__PURE__*/React.createElement("pre", {\n style: {\n margin: 0,\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\',\n fontFamily: \'inherit\',\n fontSize: \'0.9em\',\n lineHeight: 1.45,\n maxHeight: \'14rem\',\n overflow: \'auto\'\n }\n }, termsSummary)) : null, proposedPolicy ? /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: \'0.75rem\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: 0\n }\n }, "Proposed validator set"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.25em 0 0.5em\',\n color: \'#555\'\n }\n }, "Threshold: ", /*#__PURE__*/React.createElement("strong", null, proposedPolicy.threshold), " of ", /*#__PURE__*/React.createElement("strong", null, proposedPolicy.validators.length)), /*#__PURE__*/React.createElement(List, {\n relaxed: true,\n size: "small",\n style: {\n fontFamily: \'monospace\',\n fontSize: \'0.82em\'\n }\n }, proposedPolicy.validators.map(function (v, i) {\n return /*#__PURE__*/React.createElement(List.Item, {\n key: i\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, "Signer ".concat(i + 1)), /*#__PURE__*/React.createElement("span", {\n style: {\n wordBreak: \'break-all\'\n }\n }, v)));\n }))) : null, note ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#444\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Note:"), " ", note) : null, /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'0.75rem\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n lineHeight: 1.45\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Reject"), " sends a decline without your pubkey.", \' \', /*#__PURE__*/React.createElement("strong", null, "Accept"), " only if you agree with the terms above and trust the inviter\\u2019s peer connection."), previewPk ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.65em 0 0\',\n fontSize: \'0.88em\',\n lineHeight: 1.45\n }\n }, "Pubkey that would be shared:", \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, previewPk), !pkLooksValidator ? /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#a5673f\'\n }\n }, " \\u2014 unlock a full identity if this is not a 33-byte hex key.") : null) : /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.65em 0 0\',\n fontSize: \'0.88em\',\n color: \'#8a6d3b\'\n }\n }, "No wire pubkey available \\u2014 open ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings/security"\n }, "Security"), " and unlock before accepting."))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n return sendResponse(false);\n },\n basic: true\n }, "Reject"), /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n return sendResponse(true);\n },\n primary: true,\n disabled: !pkLooksValidator\n }, "Accept (send pubkey)")));\n}\nmodule.exports = FederationContractInviteModal;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0ZlZGVyYXRpb25Db250cmFjdEludml0ZU1vZGFsLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQU1BLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyw0Q0FBTyxDQUFDO0FBQzlCLElBQUFDLFFBQUEsR0FBaUJELG1CQUFPLENBQUMsdUVBQWtCLENBQUM7RUFBcENFLElBQUksR0FBQUQsUUFBQSxDQUFKQyxJQUFJO0FBQ1osSUFBQUMsU0FBQSxHQUFnRUgsbUJBQU8sQ0FBQyw0RUFBbUIsQ0FBQztFQUFwRkksS0FBSyxHQUFBRCxTQUFBLENBQUxDLEtBQUs7RUFBRUMsTUFBTSxHQUFBRixTQUFBLENBQU5FLE1BQU07RUFBRUMsTUFBTSxHQUFBSCxTQUFBLENBQU5HLE1BQU07RUFBRUMsSUFBSSxHQUFBSixTQUFBLENBQUpJLElBQUk7RUFBRUMsT0FBTyxHQUFBTCxTQUFBLENBQVBLLE9BQU87RUFBRUMsSUFBSSxHQUFBTixTQUFBLENBQUpNLElBQUk7RUFBRUMsT0FBTyxHQUFBUCxTQUFBLENBQVBPLE9BQU87QUFDM0QsSUFBQUMsU0FBQSxHQUtJWCxtQkFBTyxDQUFDLHNGQUF1QyxDQUFDO0VBSmxEWSx5Q0FBeUMsR0FBQUQsU0FBQSxDQUF6Q0MseUNBQXlDO0VBQ3pDQyx1QkFBdUIsR0FBQUYsU0FBQSxDQUF2QkUsdUJBQXVCO0VBQ3ZCQyxzQkFBc0IsR0FBQUgsU0FBQSxDQUF0Qkcsc0JBQXNCO0VBQ3RCQyxxQ0FBcUMsR0FBQUosU0FBQSxDQUFyQ0kscUNBQXFDO0FBR3ZDLFNBQVNDLDZCQUE2QkEsQ0FBRUMsS0FBSyxFQUFFO0VBQzdDLElBQU1DLElBQUksR0FBRyxDQUFDLEVBQUVELEtBQUssSUFBSUEsS0FBSyxDQUFDQyxJQUFJLENBQUM7RUFDcEMsSUFBTUMsTUFBTSxHQUFHRixLQUFLLElBQUlBLEtBQUssQ0FBQ0UsTUFBTTtFQUNwQyxJQUFNQyxPQUFPLEdBQUdILEtBQUssSUFBSSxPQUFPQSxLQUFLLENBQUNHLE9BQU8sS0FB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RSxPQUFPLHFCQUNaL0UsS0FBQSxDQUFBMkMsYUFBQSxDQUFDckMsTUFBTTtJQUFDMEUsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7TUFBQSxPQUFReEQsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUFBLENBQUM7SUFBQ3lELEtBQUs7RUFBQSxHQUFDLFFBRTFDLENBQUMsZUFDVGpGLEtBQUEsQ0FBQTJDLGFBQUEsQ0FBQ3JDLE1BQU07SUFBQzBFLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO01BQUEsT0FBUXhELFlBQVksQ0FBQyxJQUFJLENBQUM7SUFBQSxDQUFDO0lBQUMwRCxPQUFPO0lBQUNDLFFBQVEsRUFBRSxDQUFDMUM7RUFBaUIsR0FBQyxzQkFFeEUsQ0FDSyxDQUNWLENBQUM7QUFFWjtBQUVBMkMsTUFBTSxDQUFDQyxPQUFPLEdBQUdwRSw2QkFBNkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlTW9kYWwuanM/OTAwMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluayB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuY29uc3QgeyBNb2RhbCwgQnV0dG9uLCBIZWFkZXIsIEljb24sIE1lc3NhZ2UsIExpc3QsIFNlZ21lbnQgfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCB7XG4gIGJ1aWxkRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlUmVzcG9uc2VKc29uLFxuICBub3JtYWxpemVQcm9wb3NlZFBvbGljeSxcbiAgbm9ybWFsaXplU3BlbmRpbmdUZXJtcyxcbiAgZm9ybWF0RmVkZXJhdGlvbkludml0ZVNwZW5kaW5nU3VtbWFyeVxufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mZWRlcmF0aW9uQ29udHJhY3RJbnZpdGUnKTtcblxuZnVuY3Rpb24gRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlTW9kYWwgKHByb3BzKSB7XG4gIGNvbnN0IG9wZW4gPSAhIShwcm9wcyAmJiBwcm9wcy5vcGVuKTtcbiAgY29uc3QgZGV0YWlsID0gcHJvcHMgJiYgcHJvcHMuZGV0YWlsO1xuICBjb25zdCBvbkNsb3NlID0gcHJvcHMgJiYgdHlwZW9mIHByb3BzLm9uQ2xvc2UgPT09ICdmdW5jdGlvbicgPyBwcm9wcy5vbkNsb3NlIDogKCkgPT4ge307XG4gIGNvbnN0IG9uU2VuZFBlZXJNZXNzYWdlID0gcHJvcHMgJiYgdHlwZW9mIHByb3BzLm9uU2VuZFBlZXJNZXNzYWdlID09PSAnZnVuY3Rpb24nID8gcHJvcHMub25TZW5kUGVlck1lc3NhZ2UgOiBudWxsO1xuICBjb25zdCBnZXRSZXNwb25kZXJQdWJrZXkgPSBwcm9wcyAmJiB0eXBlb2YgcHJvcHMuZ2V0UmVzcG9uZGVyUHVia2V5ID09PSAnZnVuY3Rpb24nID8gcHJvcHMuZ2V0UmVzcG9uZGVyUHVia2V5IDogKCkgPT4gJyc7XG5cbiAgY29uc3Qgc2VuZFJlc3BvbnNlID0gUmVhY3QudXNlQ2FsbGJhY2soKGFjY2VwdCkgPT4ge1xuICAgIGlmICghZGV0YWlsIHx8ICFkZXRhaWwudG9QZWVySWQgfHwgIW9uU2VuZFBlZXJNZXNzYWdlKSB7XG4gICAgICBvbkNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBrID0gZ2V0UmVzcG9uZGVyUHVia2V5KCkgfHwgbnVsbDtcbiAgICBjb25zdCBqc29uID0gYnVpbGRGZWRlcmF0aW9uQ29udHJhY3RJbnZpdGVSZXNwb25zZUpzb24oe1xuICAgICAgaW52aXRlSWQ6IGRldGFpbC5pbnZpdGVJZCxcbiAgICAgIGFjY2VwdCxcbiAgICAgIHJlc3BvbmRlclB1YmtleTogcGtcbiAgICB9KTtcbiAgICBvblNlbmRQZWVyTWVzc2FnZShkZXRhaWwudG9QZWVySWQsIGpzb24pO1xuICAgIG9uQ2xvc2UoKTtcbiAgfSwgW2RldGFpbCwgZ2V0UmVzcG9uZGVyUHVia2V5LCBvbkNsb3NlLCBvblNlbmRQZWVyTWVzc2FnZV0pO1xuXG4gIGlmICghb3BlbiB8fCAhZGV0YWlsKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBub3RlID0gZGV0YWlsLm5vdGUgPyBTdHJpbmcoZGV0YWlsLm5vdGUpIDogJyc7XG4gIGNvbnN0IGNvbnRyYWN0SWQgPSBkZXRhaWwuY29udHJhY3RJZCA/IFN0cmluZyhkZXRhaWwuY29udHJhY3RJZCkgOiAnJztcbiAgY29uc3Qgc3BlbmRpbmdUZXJtcyA9IG5vcm1hbGl6ZVNwZW5kaW5nVGVybXMoZGV0YWlsLnNwZW5kaW5nVGVybXMpO1xuICBjb25zdCBwcm9wb3NlZFBvbGljeSA9IG5vcm1hbGl6ZVByb3Bvc2VkUG9saWN5KGRldGFpbC5wcm9wb3NlZFBvbGljeSk7XG4gIGNvbnN0IHRlcm1zU3VtbWFyeSA9IGRldGFpbC50ZXJtc1N1bW1hcnkgPyBTdHJpbmcoZGV0YWlsLnRlcm1zU3VtbWFyeSkudHJpbSgpIDogJyc7XG4gIGNvbnN0IGNhcExpbmUgPSBmb3JtYXRGZWRlcmF0aW9uSW52aXRlU3BlbmRpbmdTdW1tYXJ5KGRldGFpbCk7XG4gIGNvbnN0IHByZXZpZXdQayA9IGdldFJlc3BvbmRlclB1YmtleSgpIHx8ICcnO1xuICBjb25zdCBwa0xvb2tzVmFsaWRhdG9yID0gL14wWzIzXVswLTlhLWZBLUZdezY0fSQvLnRlc3QocHJldmlld1BrKTtcblxuICByZXR1cm4gKFxuICAgIDxNb2RhbCBvcGVuPXtvcGVufSBvbkNsb3NlPXtvbkNsb3NlfSBzaXplPVwic21hbGxcIiBjbG9zZUljb24gYXJpYS1sYWJlbGxlZGJ5PVwiZmVkZXJhdGlvbi1pbnZpdGUtaGVhZGluZ1wiPlxuICAgICAgPEhlYWRlciBpY29uIGlkPVwiZmVkZXJhdGlvbi1pbnZpdGUtaGVhZGluZ1wiPlxuICAgICAgICA8SWNvbiBuYW1lPVwidXNlcnNcIiAvPlxuICAgICAgICBGZWRlcmF0aW9uIGNvbnRyYWN0IGludml0ZVxuICAgICAgPC9IZWFkZXI+XG4gICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlxuICAgICAgICAgIEFub3RoZXIgaHViIGludml0ZWQgdGhpcyBpZGVudGl0eSB0byBqb2luIGEgPHN0cm9uZz5kaXN0cmlidXRlZCBmZWRlcmF0aW9uPC9zdHJvbmc+IChzaWRlY2hhaW4gcGF0Y2hlcyAvIGJlYWNvbiB3aXRuZXNzZXMpLlxuICAgICAgICAgIFJldmlldyBldmVyeSBmaWVsZCBiZWxvdyBiZWZvcmUgeW91IGFjY2VwdCDigJQgYWNjZXB0aW5nIHNlbmRzIHlvdXIgPHN0cm9uZz5jb21wcmVzc2VkIHNlY3AyNTZrMSBwdWJrZXk8L3N0cm9uZz4gdG8gdGhlIGludml0ZXIuXG4gICAgICAgIDwvcD5cbiAgICAgICAge2NvbnRyYWN0SWQgPyAoXG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICBSZWZlcmVuY2VkIGV4ZWN1dGlvbiBjb250cmFjdCBpZDogPGNvZGUgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fT57Y29udHJhY3RJZH08L2NvZGU+XG4gICAgICAgICAgICB7JyAnfShzZWUgPExpbmsgdG89e2AvY29udHJhY3RzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRyYWN0SWQpfWB9PmNvbnRyYWN0PC9MaW5rPikuXG4gICAgICAgICAgPC9wPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7KHNwZW5kaW5nVGVybXMgfHwgY2FwTGluZSkgPyAoXG4gICAgICAgICAgPFNlZ21lbnQgc2Vjb25kYXJ5IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVyZW0nIH19PlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlNwZW5kaW5nIGxpbWl0IChVSSB0ZXJtcyk8L0hlYWRlcj5cbiAgICAgICAgICAgIHtjYXBMaW5lID8gPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4yNWVtIDAnLCBmb250V2VpZ2h0OiA2MDAgfX0+e2NhcExpbmV9PC9wPiA6IG51bGx9XG4gICAgICAgICAgICB7c3BlbmRpbmdUZXJtcyA/IChcbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4yNWVtIDAnLCBjb2xvcjogJyM1NTUnLCBmb250U2l6ZTogJzAuOWVtJyB9fT5cbiAgICAgICAgICAgICAgICBNb2RlOiA8Y29kZT57c3BlbmRpbmdUZXJtcy5tb2RlfTwvY29kZT5cbiAgICAgICAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgICAgICAgIFZhbHVlOiA8Y29kZT57c3BlbmRpbmdUZXJtcy52YWx1ZX08L2NvZGU+XG4gICAgICAgICAgICAgICAge3NwZW5kaW5nVGVybXMubW9kZSA9PT0gJ3BlcmNlbnQnID8gJyUnIDogJyBzYXRzJ31cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7dGVybXNTdW1tYXJ5ID8gKFxuICAgICAgICAgIDxTZWdtZW50IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVyZW0nIH19PlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PkFncmVlbWVudCB0ZXh0PC9IZWFkZXI+XG4gICAgICAgICAgICA8cHJlXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsXG4gICAgICAgICAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXG4gICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ2luaGVyaXQnLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMC45ZW0nLFxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuNDUsXG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiAnMTRyZW0nLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnYXV0bydcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3Rlcm1zU3VtbWFyeX1cbiAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAge3Byb3Bvc2VkUG9saWN5ID8gKFxuICAgICAgICAgIDxTZWdtZW50IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVyZW0nIH19PlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlByb3Bvc2VkIHZhbGlkYXRvciBzZXQ8L0hlYWRlcj5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMjVlbSAwIDAuNWVtJywgY29sb3I6ICcjNTU1JyB9fT5cbiAgICAgICAgICAgICAgVGhyZXNob2xkOiA8c3Ryb25nPntwcm9wb3NlZFBvbGljeS50aHJlc2hvbGR9PC9zdHJvbmc+IG9mIDxzdHJvbmc+e3Byb3Bvc2VkUG9saWN5LnZhbGlkYXRvcnMubGVuZ3RofTwvc3Ryb25nPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPExpc3QgcmVsYXhlZCBzaXplPVwic21hbGxcIiBzdHlsZT17eyBmb250RmFtaWx5OiAnbW9ub3NwYWNlJywgZm9udFNpemU6ICcwLjgyZW0nIH19PlxuICAgICAgICAgICAgICB7cHJvcG9zZWRQb2xpY3kudmFsaWRhdG9ycy5tYXAoKHYsIGkpID0+IChcbiAgICAgICAgICAgICAgICA8TGlzdC5JdGVtIGtleT17aX0+XG4gICAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+e2BTaWduZXIgJHtpICsgMX1gfTwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e3Z9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9MaXN0LkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9MaXN0PlxuICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAge25vdGUgPyA8cCBzdHlsZT17eyBjb2xvcjogJyM0NDQnIH19PjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4ge25vdGV9PC9wPiA6IG51bGx9XG5cbiAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1cmVtJyB9fT5cbiAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46IDAsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPlJlamVjdDwvc3Ryb25nPiBzZW5kcyBhIGRlY2xpbmUgd2l0aG91dCB5b3VyIHB1YmtleS57JyAnfVxuICAgICAgICAgICAgPHN0cm9uZz5BY2NlcHQ8L3N0cm9uZz4gb25seSBpZiB5b3UgYWdyZWUgd2l0aCB0aGUgdGVybXMgYWJvdmUgYW5kIHRydXN0IHRoZSBpbnZpdGVy4oCZcyBwZWVyIGNvbm5lY3Rpb24uXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIHtwcmV2aWV3UGsgPyAoXG4gICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjY1ZW0gMCAwJywgZm9udFNpemU6ICcwLjg4ZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgICBQdWJrZXkgdGhhdCB3b3VsZCBiZSBzaGFyZWQ6eycgJ31cbiAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fT57cHJldmlld1BrfTwvY29kZT5cbiAgICAgICAgICAgICAgeyFwa0xvb2tzVmFsaWRhdG9yID8gKFxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnI2E1NjczZicgfX0+IOKAlCB1bmxvY2sgYSBmdWxsIGlkZW50aXR5IGlmIHRoaXMgaXMgbm90IGEgMzMtYnl0ZSBoZXgga2V5Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNjVlbSAwIDAnLCBmb250U2l6ZTogJzAuODhlbScsIGNvbG9yOiAnIzhhNmQzYicgfX0+XG4gICAgICAgICAgICAgIE5vIHdpcmUgcHVia2V5IGF2YWlsYWJsZSDigJQgb3BlbiA8TGluayB0bz1cIi9zZXR0aW5ncy9zZWN1cml0eVwiPlNlY3VyaXR5PC9MaW5rPiBhbmQgdW5sb2NrIGJlZm9yZSBhY2NlcHRpbmcuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgICAgPE1vZGFsLkFjdGlvbnM+XG4gICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4gc2VuZFJlc3BvbnNlKGZhbHNlKX0gYmFzaWM+XG4gICAgICAgICAgUmVqZWN0XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IHNlbmRSZXNwb25zZSh0cnVlKX0gcHJpbWFyeSBkaXNhYmxlZD17IXBrTG9va3NWYWxpZGF0b3J9PlxuICAgICAgICAgIEFjY2VwdCAoc2VuZCBwdWJrZXkpXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9Nb2RhbC5BY3Rpb25zPlxuICAgIDwvTW9kYWw+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlTW9kYWw7XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJMaW5rIiwiX3JlcXVpcmUyIiwiTW9kYWwiLCJCdXR0b24iLCJIZWFkZXIiLCJJY29uIiwiTWVzc2FnZSIsIkxpc3QiLCJTZWdtZW50IiwiX3JlcXVpcmUzIiwiYnVpbGRGZWRlcmF0aW9uQ29udHJhY3RJbnZpdGVSZXNwb25zZUpzb24iLCJub3JtYWxpemVQcm9wb3NlZFBvbGljeSIsIm5vcm1hbGl6ZVNwZW5kaW5nVGVybXMiLCJmb3JtYXRGZWRlcmF0aW9uSW52aXRlU3BlbmRpbmdTdW1tYXJ5IiwiRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlTW9kYWwiLCJwcm9wcyIsIm9wZW4iLCJkZXRhaWwiLCJvbkNsb3NlIiwib25TZW5kUGVlck1lc3NhZ2UiLCJnZXRSZXNwb25kZXJQdWJrZXkiLCJzZW5kUmVzcG9uc2UiLCJ1c2VDYWxsYmFjayIsImFjY2VwdCIsInRvUGVlcklkIiwicGsiLCJqc29uIiwiaW52aXRlSWQiLCJyZXNwb25kZXJQdWJrZXkiLCJub3RlIiwiU3RyaW5nIiwiY29udHJhY3RJZCIsInNwZW5kaW5nVGVybXMiLCJwcm9wb3NlZFBvbGljeSIsInRlcm1zU3VtbWFyeSIsInRyaW0iLCJjYXBMaW5lIiwicHJldmlld1BrIiwicGtMb29rc1ZhbGlkYXRvciIsInRlc3QiLCJjcmVhdGVFbGVtZW50Iiwic2l6ZSIsImNsb3NlSWNvbiIsImljb24iLCJpZCIsIm5hbWUiLCJDb250ZW50Iiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJ3b3JkQnJlYWsiLCJ0byIsImNvbmNhdCIsImVuY29kZVVSSUNvbXBvbmVudCIsInNlY29uZGFyeSIsImFzIiwibWFyZ2luIiwiZm9udFdlaWdodCIsImNvbG9yIiwiZm9udFNpemUiLCJtb2RlIiwidmFsdWUiLCJ3aGl0ZVNwYWNlIiwiZm9udEZhbWlseSIsImxpbmVIZWlnaHQiLCJtYXhIZWlnaHQiLCJvdmVyZmxvdyIsInRocmVzaG9sZCIsInZhbGlkYXRvcnMiLCJsZW5ndGgiLCJyZWxheGVkIiwibWFwIiwidiIsImkiLCJJdGVtIiwia2V5IiwiaW5mbyIsIkFjdGlvbnMiLCJvbkNsaWNrIiwiYmFzaWMiLCJwcmltYXJ5IiwiZGlzYWJsZWQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/FederationContractInviteModal.js\n\n}')},"./components/FederationInviteNotificationBanner.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require.Button,\n Icon = _require.Icon,\n Message = _require.Message;\nvar _require2 = __webpack_require__(/*! ../functions/federationContractInvite */ "./functions/federationContractInvite.js"),\n formatFederationInviteSpendingSummary = _require2.formatFederationInviteSpendingSummary;\n\n/**\n * In-app notice for incoming federation invites (review before opening security modal).\n * @param {{ detail: object|null, onReview: function, onDismiss: function }} props\n */\nfunction FederationInviteNotificationBanner(props) {\n var detail = props && props.detail;\n var onReview = props && typeof props.onReview === \'function\' ? props.onReview : function () {};\n var onDismiss = props && typeof props.onDismiss === \'function\' ? props.onDismiss : function () {};\n if (!detail || !detail.inviteId) return null;\n var cap = formatFederationInviteSpendingSummary(detail);\n return /*#__PURE__*/React.createElement("div", {\n role: "status",\n "aria-live": "polite",\n style: {\n margin: \'0 -1em 0.65rem -1em\',\n padding: \'0 0.5rem\'\n }\n }, /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n margin: 0,\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n gap: \'0.65rem\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n flex: \'1 1 12rem\',\n lineHeight: 1.45,\n fontSize: \'0.93rem\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Federation co-signer invite"), \' — \', "review terms before you accept (your compressed pubkey is only sent if you approve).", cap ? /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.35em\',\n color: \'#555\'\n }\n }, cap) : null), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.35rem\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n size: "small",\n onClick: function onClick() {\n return onReview();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "eye"\n }), "Review & sign"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n size: "small",\n onClick: function onClick() {\n return onDismiss();\n }\n }, "Dismiss"))));\n}\nmodule.exports = FederationInviteNotificationBanner;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0ZlZGVyYXRpb25JbnZpdGVOb3RpZmljYXRpb25CYW5uZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBTUEsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLDRDQUFPLENBQUM7QUFDOUIsSUFBQUMsUUFBQSxHQUFrQ0QsbUJBQU8sQ0FBQyw0RUFBbUIsQ0FBQztFQUF0REUsTUFBTSxHQUFBRCxRQUFBLENBQU5DLE1BQU07RUFBRUMsSUFBSSxHQUFBRixRQUFBLENBQUpFLElBQUk7RUFBRUMsT0FBTyxHQUFBSCxRQUFBLENBQVBHLE9BQU87QUFDN0IsSUFBQUMsU0FBQSxHQUFrREwsbUJBQU8sQ0FBQyxzRkFBdUMsQ0FBQztFQUExRk0scUNBQXFDLEdBQUFELFNBQUEsQ0FBckNDLHFDQUFxQzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxrQ0FBa0NBLENBQUVDLEtBQUssRUFBRTtFQUNsRCxJQUFNQyxNQUFNLEdBQUdELEtBQUssSUFBSUEsS0FBSyxDQUFDQyxNQUFNO0VBQ3BDLElBQU1DLFFBQVEsR0FBR0YsS0FBSyxJQUFJLE9BQU9BLEtBQUssQ0FBQ0UsUUFBUSxLQUFLLFVBQVUsR0FBR0YsS0FBSyxDQUFDRSxRQUFRLEdBQUcsWUFBTSxDQUFDLENBQUM7RUFDMUYsSUFBTUMsU0FBUyxHQUFHSCxLQUFLLElBQUksT0FBT0EsS0FBSyxDQUFDRyxTQUFTLEtBQUssVUFBVSxHQUFHSCxLQUFLLENBQUNHLFNBQVMsR0FBRyxZQUFNLENBQUMsQ0FBQztFQUM3RixJQUFJLENBQUNGLE1BQU0sSUFBSSxDQUFDQSxNQUFNLENBQUNHLFFBQVEsRUFBRSxPQUFPLElBQUk7RUFFNUMsSUFBTUMsR0FBRyxHQUFHUCxxQ0FBcUMsQ0FBQ0csTUFBTSxDQUFDO0VBRXpELG9CQUNFVixLQUFBLENBQUFlLGFBQUE7SUFDRUMsSUFBSSxFQUFDLFFBQVE7SUFDYixhQUFVLFFBQVE7SUFDbEJDLEtBQUssRUFBRTtNQUNMQyxNQUFNLEVBQUUscUJBQXFCO01BQzdCQyxPQUFPLEVBQUU7SUFDWDtFQUFFLGdCQUVGbkIsS0FBQSxDQUFBZSxhQUFBLENBQUNWLE9BQU87SUFDTmUsT0FBTztJQUNQSCxLQUFLLEVBQUU7TUFDTEMsTUFBTSxFQUFFLENBQUM7TUFDVEcsT0FBTyxFQUFFLE1BQU07TUFDZkMsUUFBUSxFQUFFLE1BQU07TUFDaEJDLFVBQVUsRUFBRSxRQUFRO01BQ3BCQyxjQUFjLEVBQUUsZUFBZTtNQUMvQkMsR0FBRyxFQUFFO0lBQ1A7RUFBRSxnQkFFRnpCLEtBQUEsQ0FBQWUsYUFBQTtJQUFLRSxLQUFLLEVBQUU7TUFBRVMsSUFBSSxFQUFFLFdBQVc7TUFBRUMsVUFBVSxFQUFFLElBQUk7TUFBRUMsUUFBUSxFQUFFO0lBQVU7RUFBRSxnQkFDdkU1QixLQUFBLENBQUFlLGFBQUEsaUJBQVEsNkJBQW1DLENBQUMsRUFDM0MsS0FBSyxFQUFDLHNGQUVQLEVBQUNELEdBQUcsZ0JBQ0ZkLEtBQUEsQ0FBQWUsYUFBQTtJQUFNRSxLQUFLLEVBQUU7TUFBRUksT0FBTyxFQUFFLE9BQU87TUFBRVEsU0FBUyxFQUFFLFFBQVE7TUFBRUMsS0FBSyxFQUFFO0lBQU87RUFBRSxHQUFFaEIsR0FBVSxDQUFDLEdBQ2pGLElBQ0QsQ0FBQyxlQUNOZCxLQUFBLENBQUFlLGFBQUE7SUFBS0UsS0FBSyxFQUFFO01BQUVJLE9BQU8sRUFBRSxNQUFNO01BQUVDLFFBQVEsRUFBRSxNQUFNO01BQUVHLEdBQUcsRUFBRTtJQUFVO0VBQUUsZ0JBQ2hFekIsS0FBQSxDQUFBZSxhQUFBLENBQUNaLE1BQU07SUFBQzRCLElBQUksRUFBQyxRQUFRO0lBQUNDLE9BQU87SUFBQ0MsSUFBSSxFQUFDLE9BQU87SUFBQ0MsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7TUFBQSxPQUFRdkIsUUFBUSxDQUFDLENBQUM7SUFBQTtFQUFDLGdCQUNuRVgsS0FBQSxDQUFBZSxhQUFBLENBQUNYLElBQUk7SUFBQytCLElBQUksRUFBQztFQUFLLENBQUUsQ0FBQyxpQkFFYixDQUFDLGVBQ1RuQyxLQUFBLENBQUFlLGFBQUEsQ0FBQ1osTUFBTTtJQUFDNEIsSUFBSSxFQUFDLFFBQVE7SUFBQ0ssS0FBSztJQUFDSCxJQUFJLEVBQUMsT0FBTztJQUFDQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtNQUFBLE9BQVF0QixTQUFTLENBQUMsQ0FBQztJQUFBO0VBQUMsR0FBQyxTQUU3RCxDQUNMLENBQ0UsQ0FDTixDQUFDO0FBRVY7QUFFQXlCLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHOUIsa0NBQWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0ZlZGVyYXRpb25JbnZpdGVOb3RpZmljYXRpb25CYW5uZXIuanM/ZTFjNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgQnV0dG9uLCBJY29uLCBNZXNzYWdlIH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3QgeyBmb3JtYXRGZWRlcmF0aW9uSW52aXRlU3BlbmRpbmdTdW1tYXJ5IH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlJyk7XG5cbi8qKlxuICogSW4tYXBwIG5vdGljZSBmb3IgaW5jb21pbmcgZmVkZXJhdGlvbiBpbnZpdGVzIChyZXZpZXcgYmVmb3JlIG9wZW5pbmcgc2VjdXJpdHkgbW9kYWwpLlxuICogQHBhcmFtIHt7IGRldGFpbDogb2JqZWN0fG51bGwsIG9uUmV2aWV3OiBmdW5jdGlvbiwgb25EaXNtaXNzOiBmdW5jdGlvbiB9fSBwcm9wc1xuICovXG5mdW5jdGlvbiBGZWRlcmF0aW9uSW52aXRlTm90aWZpY2F0aW9uQmFubmVyIChwcm9wcykge1xuICBjb25zdCBkZXRhaWwgPSBwcm9wcyAmJiBwcm9wcy5kZXRhaWw7XG4gIGNvbnN0IG9uUmV2aWV3ID0gcHJvcHMgJiYgdHlwZW9mIHByb3BzLm9uUmV2aWV3ID09PSAnZnVuY3Rpb24nID8gcHJvcHMub25SZXZpZXcgOiAoKSA9PiB7fTtcbiAgY29uc3Qgb25EaXNtaXNzID0gcHJvcHMgJiYgdHlwZW9mIHByb3BzLm9uRGlzbWlzcyA9PT0gJ2Z1bmN0aW9uJyA/IHByb3BzLm9uRGlzbWlzcyA6ICgpID0+IHt9O1xuICBpZiAoIWRldGFpbCB8fCAhZGV0YWlsLmludml0ZUlkKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjYXAgPSBmb3JtYXRGZWRlcmF0aW9uSW52aXRlU3BlbmRpbmdTdW1tYXJ5KGRldGFpbCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByb2xlPVwic3RhdHVzXCJcbiAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBtYXJnaW46ICcwIC0xZW0gMC42NXJlbSAtMWVtJyxcbiAgICAgICAgcGFkZGluZzogJzAgMC41cmVtJ1xuICAgICAgfX1cbiAgICA+XG4gICAgICA8TWVzc2FnZVxuICAgICAgICB3YXJuaW5nXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgICAgICAgZ2FwOiAnMC42NXJlbSdcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBmbGV4OiAnMSAxIDEycmVtJywgbGluZUhlaWdodDogMS40NSwgZm9udFNpemU6ICcwLjkzcmVtJyB9fT5cbiAgICAgICAgICA8c3Ryb25nPkZlZGVyYXRpb24gY28tc2lnbmVyIGludml0ZTwvc3Ryb25nPlxuICAgICAgICAgIHsnIOKAlCAnfVxuICAgICAgICAgIHJldmlldyB0ZXJtcyBiZWZvcmUgeW91IGFjY2VwdCAoeW91ciBjb21wcmVzc2VkIHB1YmtleSBpcyBvbmx5IHNlbnQgaWYgeW91IGFwcHJvdmUpLlxuICAgICAgICAgIHtjYXAgPyAoXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Ub3A6ICcwLjM1ZW0nLCBjb2xvcjogJyM1NTUnIH19PntjYXB9PC9zcGFuPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuMzVyZW0nIH19PlxuICAgICAgICAgIDxCdXR0b24gdHlwZT1cImJ1dHRvblwiIHByaW1hcnkgc2l6ZT1cInNtYWxsXCIgb25DbGljaz17KCkgPT4gb25SZXZpZXcoKX0+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwiZXllXCIgLz5cbiAgICAgICAgICAgIFJldmlldyAmYW1wOyBzaWduXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgb25DbGljaz17KCkgPT4gb25EaXNtaXNzKCl9PlxuICAgICAgICAgICAgRGlzbWlzc1xuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvTWVzc2FnZT5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGZWRlcmF0aW9uSW52aXRlTm90aWZpY2F0aW9uQmFubmVyO1xuIl0sIm5hbWVzIjpbIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiQnV0dG9uIiwiSWNvbiIsIk1lc3NhZ2UiLCJfcmVxdWlyZTIiLCJmb3JtYXRGZWRlcmF0aW9uSW52aXRlU3BlbmRpbmdTdW1tYXJ5IiwiRmVkZXJhdGlvbkludml0ZU5vdGlmaWNhdGlvbkJhbm5lciIsInByb3BzIiwiZGV0YWlsIiwib25SZXZpZXciLCJvbkRpc21pc3MiLCJpbnZpdGVJZCIsImNhcCIsImNyZWF0ZUVsZW1lbnQiLCJyb2xlIiwic3R5bGUiLCJtYXJnaW4iLCJwYWRkaW5nIiwid2FybmluZyIsImRpc3BsYXkiLCJmbGV4V3JhcCIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsImdhcCIsImZsZXgiLCJsaW5lSGVpZ2h0IiwiZm9udFNpemUiLCJtYXJnaW5Ub3AiLCJjb2xvciIsInR5cGUiLCJwcmltYXJ5Iiwic2l6ZSIsIm9uQ2xpY2siLCJuYW1lIiwiYmFzaWMiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/FederationInviteNotificationBanner.js\n\n}')},"./components/FederationSpendingCriteriaDraft.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Checkbox = _require.Checkbox,\n Form = _require.Form,\n Button = _require.Button,\n Icon = _require.Icon,\n Message = _require.Message;\nvar _require2 = __webpack_require__(/*! ../functions/federationSpendingPrefs */ "./functions/federationSpendingPrefs.js"),\n loadFederationSpendingPrefs = _require2.loadFederationSpendingPrefs,\n saveFederationSpendingPrefs = _require2.saveFederationSpendingPrefs,\n subscribeFederationSpendingPrefs = _require2.subscribeFederationSpendingPrefs;\n\n/**\n * Optional human-readable spending rules draft (this browser only).\n * @param {{ compact?: boolean }} props\n */\nfunction FederationSpendingCriteriaDraft(props) {\n var compact = !!(props && props.compact);\n var _React$useState = React.useState(function () {\n return loadFederationSpendingPrefs();\n }),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n prefs = _React$useState2[0],\n setPrefs = _React$useState2[1];\n var _React$useState3 = React.useState(function () {\n return loadFederationSpendingPrefs().spendingCriteriaDraft;\n }),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n draft = _React$useState4[0],\n setDraft = _React$useState4[1];\n var _React$useState5 = React.useState(function () {\n var p = loadFederationSpendingPrefs();\n return !!p.draftingUiOpen || String(p.spendingCriteriaDraft || \'\').trim().length > 0;\n }),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n open = _React$useState6[0],\n setOpen = _React$useState6[1];\n React.useEffect(function () {\n return subscribeFederationSpendingPrefs(function () {\n var p = loadFederationSpendingPrefs();\n setPrefs(p);\n setDraft(p.spendingCriteriaDraft);\n if (p.draftingUiOpen) setOpen(true);\n });\n }, []);\n var persistOpen = function persistOpen(nextOpen) {\n setOpen(nextOpen);\n var p = saveFederationSpendingPrefs({\n draftingUiOpen: nextOpen\n });\n setPrefs(p);\n };\n var saveDraft = function saveDraft() {\n var p = saveFederationSpendingPrefs({\n spendingCriteriaDraft: draft\n });\n setPrefs(p);\n };\n var clearDraft = function clearDraft() {\n setDraft(\'\');\n var p = saveFederationSpendingPrefs({\n spendingCriteriaDraft: \'\'\n });\n setPrefs(p);\n };\n return /*#__PURE__*/React.createElement("div", {\n style: compact ? {\n marginTop: \'0.5em\'\n } : {\n marginTop: \'1rem\'\n }\n }, /*#__PURE__*/React.createElement(Checkbox, {\n toggle: !compact,\n checked: open,\n onChange: function onChange(_, d) {\n return persistOpen(!!(d && d.checked));\n },\n label: compact ? \'Show spending criteria draft (saved in this browser)\' : \'Write an optional spending criteria draft (saved in this browser only)\'\n }), open ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n lineHeight: 1.45\n }\n }, "This text is ", /*#__PURE__*/React.createElement("strong", null, "not"), " enforced by the hub. It is copied into payment memos when you choose \\u201CRecord as federation-related payment\\u201D on wallet screens, so your group sees the same intent in logs.")), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.TextArea, {\n label: "Spending criteria (plain language)",\n placeholder: \'Examples: “Any spend over 0.01 BTC needs 2 approvals within 48h.”\\n\' + \'“Treasury pays only from the federation vault PSBT flow.”\\n\' + \'“Emergency key held by ops@…”\',\n rows: compact ? 4 : 6,\n value: draft,\n onChange: function onChange(e) {\n return setDraft(e.target.value);\n },\n style: {\n fontFamily: \'inherit\',\n lineHeight: 1.45\n }\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n primary: true,\n icon: true,\n labelPosition: "left",\n onClick: saveDraft\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "save"\n }), "Save draft"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n onClick: clearDraft,\n disabled: !String(draft || \'\').trim() && !String(prefs.spendingCriteriaDraft || \'\').trim()\n }, "Clear"))) : null);\n}\nmodule.exports = FederationSpendingCriteriaDraft;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0ZlZGVyYXRpb25TcGVuZGluZ0NyaXRlcmlhRHJhZnQuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBQUEsU0FBQUEsZUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFDLGVBQUEsQ0FBQUYsQ0FBQSxLQUFBRyxxQkFBQSxDQUFBSCxDQUFBLEVBQUFDLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUosQ0FBQSxFQUFBQyxDQUFBLEtBQUFJLGdCQUFBO0FBQUEsU0FBQUEsaUJBQUEsY0FBQUMsU0FBQTtBQUFBLFNBQUFGLDRCQUFBSixDQUFBLEVBQUFPLENBQUEsUUFBQVAsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBUSxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUEsT0FBQUUsQ0FBQSxNQUFBQyxRQUFBLENBQUFDLElBQUEsQ0FBQVgsQ0FBQSxFQUFBWSxLQUFBLDZCQUFBSCxDQUFBLElBQUFULENBQUEsQ0FBQWEsV0FBQSxLQUFBSixDQUFBLEdBQUFULENBQUEsQ0FBQWEsV0FBQSxDQUFBQyxJQUFBLGFBQUFMLENBQUEsY0FBQUEsQ0FBQSxHQUFBTSxLQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsb0JBQUFTLENBQUEsK0NBQUFRLElBQUEsQ0FBQVIsQ0FBQSxJQUFBRCxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUE7QUFBQSxTQUFBQyxrQkFBQVIsQ0FBQSxFQUFBTyxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBUCxDQUFBLENBQUFrQixNQUFBLE1BQUFYLENBQUEsR0FBQVAsQ0FBQSxDQUFBa0IsTUFBQSxZQUFBakIsQ0FBQSxNQUFBa0IsQ0FBQSxHQUFBSixLQUFBLENBQUFSLENBQUEsR0FBQU4sQ0FBQSxHQUFBTSxDQUFBLEVBQUFOLENBQUEsSUFBQWtCLENBQUEsQ0FBQWxCLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFVBQUFrQixDQUFBO0FBQUEsU0FBQWhCLHNCQUFBSCxDQUFBLEVBQUFvQixDQUFBLFFBQUFYLENBQUEsV0FB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LEdBQUcsQ0FBQyxHQUFHLENBQUU7SUFDdEJoQixLQUFLLEVBQUV5QixLQUFNO0lBQ2JvQixRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRzNFLENBQUM7TUFBQSxPQUFLd0QsUUFBUSxDQUFDeEQsQ0FBQyxDQUFDdUYsTUFBTSxDQUFDekQsS0FBSyxDQUFDO0lBQUEsQ0FBQztJQUMxQ3lDLEtBQUssRUFBRTtNQUFFaUIsVUFBVSxFQUFFLFNBQVM7TUFBRUwsVUFBVSxFQUFFO0lBQUs7RUFBRSxDQUNwRCxDQUFDLGVBQ0ZuRCxLQUFBLENBQUFzQyxhQUFBLENBQUNqQyxNQUFNO0lBQUNvRCxJQUFJLEVBQUMsUUFBUTtJQUFDVCxJQUFJLEVBQUMsT0FBTztJQUFDVSxPQUFPO0lBQUNDLElBQUk7SUFBQ0MsYUFBYSxFQUFDLE1BQU07SUFBQ0MsT0FBTyxFQUFFekI7RUFBVSxnQkFDdEZwQyxLQUFBLENBQUFzQyxhQUFBLENBQUNoQyxJQUFJO0lBQUN6QixJQUFJLEVBQUM7RUFBTSxDQUFFLENBQUMsY0FFZCxDQUFDLGVBQ1RtQixLQUFBLENBQUFzQyxhQUFBLENBQUNqQyxNQUFNO0lBQUNvRCxJQUFJLEVBQUMsUUFBUTtJQUFDVCxJQUFJLEVBQUMsT0FBTztJQUFDYyxLQUFLO0lBQUNELE9BQU8sRUFBRXhCLFVBQVc7SUFBQzBCLFFBQVEsRUFBRSxDQUFDbkMsTUFBTSxDQUFDTCxLQUFLLElBQUksRUFBRSxDQUFDLENBQUNNLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQ0QsTUFBTSxDQUFDVixLQUFLLENBQUNHLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxDQUFDUSxJQUFJLENBQUM7RUFBRSxHQUFDLE9BRWxKLENBQ0osQ0FDSCxDQUFDLEdBQ0osSUFDRCxDQUFDO0FBRVY7QUFFQW1DLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHckQsK0JBQStCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0ZlZGVyYXRpb25TcGVuZGluZ0NyaXRlcmlhRHJhZnQuanM/MjhjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgQ2hlY2tib3gsIEZvcm0sIEJ1dHRvbiwgSWNvbiwgTWVzc2FnZSB9ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IHtcbiAgbG9hZEZlZGVyYXRpb25TcGVuZGluZ1ByZWZzLFxuICBzYXZlRmVkZXJhdGlvblNwZW5kaW5nUHJlZnMsXG4gIHN1YnNjcmliZUZlZGVyYXRpb25TcGVuZGluZ1ByZWZzXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZlZGVyYXRpb25TcGVuZGluZ1ByZWZzJyk7XG5cbi8qKlxuICogT3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgc3BlbmRpbmcgcnVsZXMgZHJhZnQgKHRoaXMgYnJvd3NlciBvbmx5KS5cbiAqIEBwYXJhbSB7eyBjb21wYWN0PzogYm9vbGVhbiB9fSBwcm9wc1xuICovXG5mdW5jdGlvbiBGZWRlcmF0aW9uU3BlbmRpbmdDcml0ZXJpYURyYWZ0IChwcm9wcykge1xuICBjb25zdCBjb21wYWN0ID0gISEocHJvcHMgJiYgcHJvcHMuY29tcGFjdCk7XG4gIGNvbnN0IFtwcmVmcywgc2V0UHJlZnNdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gbG9hZEZlZGVyYXRpb25TcGVuZGluZ1ByZWZzKCkpO1xuICBjb25zdCBbZHJhZnQsIHNldERyYWZ0XSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IGxvYWRGZWRlcmF0aW9uU3BlbmRpbmdQcmVmcygpLnNwZW5kaW5nQ3JpdGVyaWFEcmFmdCk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICBjb25zdCBwID0gbG9hZEZlZGVyYXRpb25TcGVuZGluZ1ByZWZzKCk7XG4gICAgcmV0dXJuICEhcC5kcmFmdGluZ1VpT3BlbiB8fCBTdHJpbmcocC5zcGVuZGluZ0NyaXRlcmlhRHJhZnQgfHwgJycpLnRyaW0oKS5sZW5ndGggPiAwO1xuICB9KTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBzdWJzY3JpYmVGZWRlcmF0aW9uU3BlbmRpbmdQcmVmcygoKSA9PiB7XG4gICAgICBjb25zdCBwID0gbG9hZEZlZGVyYXRpb25TcGVuZGluZ1ByZWZzKCk7XG4gICAgICBzZXRQcmVmcyhwKTtcbiAgICAgIHNldERyYWZ0KHAuc3BlbmRpbmdDcml0ZXJpYURyYWZ0KTtcbiAgICAgIGlmIChwLmRyYWZ0aW5nVWlPcGVuKSBzZXRPcGVuKHRydWUpO1xuICAgIH0pO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgcGVyc2lzdE9wZW4gPSAobmV4dE9wZW4pID0+IHtcbiAgICBzZXRPcGVuKG5leHRPcGVuKTtcbiAgICBjb25zdCBwID0gc2F2ZUZlZGVyYXRpb25TcGVuZGluZ1ByZWZzKHsgZHJhZnRpbmdVaU9wZW46IG5leHRPcGVuIH0pO1xuICAgIHNldFByZWZzKHApO1xuICB9O1xuXG4gIGNvbnN0IHNhdmVEcmFmdCA9ICgpID0+IHtcbiAgICBjb25zdCBwID0gc2F2ZUZlZGVyYXRpb25TcGVuZGluZ1ByZWZzKHsgc3BlbmRpbmdDcml0ZXJpYURyYWZ0OiBkcmFmdCB9KTtcbiAgICBzZXRQcmVmcyhwKTtcbiAgfTtcblxuICBjb25zdCBjbGVhckRyYWZ0ID0gKCkgPT4ge1xuICAgIHNldERyYWZ0KCcnKTtcbiAgICBjb25zdCBwID0gc2F2ZUZlZGVyYXRpb25TcGVuZGluZ1ByZWZzKHsgc3BlbmRpbmdDcml0ZXJpYURyYWZ0OiAnJyB9KTtcbiAgICBzZXRQcmVmcyhwKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e2NvbXBhY3QgPyB7IG1hcmdpblRvcDogJzAuNWVtJyB9IDogeyBtYXJnaW5Ub3A6ICcxcmVtJyB9fT5cbiAgICAgIDxDaGVja2JveFxuICAgICAgICB0b2dnbGU9eyFjb21wYWN0fVxuICAgICAgICBjaGVja2VkPXtvcGVufVxuICAgICAgICBvbkNoYW5nZT17KF8sIGQpID0+IHBlcnNpc3RPcGVuKCEhKGQgJiYgZC5jaGVja2VkKSl9XG4gICAgICAgIGxhYmVsPXtcbiAgICAgICAgICBjb21wYWN0XG4gICAgICAgICAgICA/ICdTaG93IHNwZW5kaW5nIGNyaXRlcmlhIGRyYWZ0IChzYXZlZCBpbiB0aGlzIGJyb3dzZXIpJ1xuICAgICAgICAgICAgOiAnV3JpdGUgYW4gb3B0aW9uYWwgc3BlbmRpbmcgY3JpdGVyaWEgZHJhZnQgKHNhdmVkIGluIHRoaXMgYnJvd3NlciBvbmx5KSdcbiAgICAgICAgfVxuICAgICAgLz5cbiAgICAgIHtvcGVuID8gKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX0+XG4gICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nIH19PlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAwLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgICBUaGlzIHRleHQgaXMgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gZW5mb3JjZWQgYnkgdGhlIGh1Yi4gSXQgaXMgY29waWVkIGludG8gcGF5bWVudCBtZW1vcyB3aGVuIHlvdSBjaG9vc2VcbiAgICAgICAgICAgICAg4oCcUmVjb3JkIGFzIGZlZGVyYXRpb24tcmVsYXRlZCBwYXltZW504oCdIG9uIHdhbGxldCBzY3JlZW5zLCBzbyB5b3VyIGdyb3VwIHNlZXMgdGhlIHNhbWUgaW50ZW50IGluIGxvZ3MuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgIDxGb3JtPlxuICAgICAgICAgICAgPEZvcm0uVGV4dEFyZWFcbiAgICAgICAgICAgICAgbGFiZWw9XCJTcGVuZGluZyBjcml0ZXJpYSAocGxhaW4gbGFuZ3VhZ2UpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e1xuICAgICAgICAgICAgICAgICdFeGFtcGxlczog4oCcQW55IHNwZW5kIG92ZXIgMC4wMSBCVEMgbmVlZHMgMiBhcHByb3ZhbHMgd2l0aGluIDQ4aC7igJ1cXG4nICtcbiAgICAgICAgICAgICAgICAn4oCcVHJlYXN1cnkgcGF5cyBvbmx5IGZyb20gdGhlIGZlZGVyYXRpb24gdmF1bHQgUFNCVCBmbG93LuKAnVxcbicgK1xuICAgICAgICAgICAgICAgICfigJxFbWVyZ2VuY3kga2V5IGhlbGQgYnkgb3BzQOKApuKAnSdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByb3dzPXtjb21wYWN0ID8gNCA6IDZ9XG4gICAgICAgICAgICAgIHZhbHVlPXtkcmFmdH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXREcmFmdChlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIHN0eWxlPXt7IGZvbnRGYW1pbHk6ICdpbmhlcml0JywgbGluZUhlaWdodDogMS40NSB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cImJ1dHRvblwiIHNpemU9XCJzbWFsbFwiIHByaW1hcnkgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiIG9uQ2xpY2s9e3NhdmVEcmFmdH0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzYXZlXCIgLz5cbiAgICAgICAgICAgICAgU2F2ZSBkcmFmdFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBzaXplPVwic21hbGxcIiBiYXNpYyBvbkNsaWNrPXtjbGVhckRyYWZ0fSBkaXNhYmxlZD17IVN0cmluZyhkcmFmdCB8fCAnJykudHJpbSgpICYmICFTdHJpbmcocHJlZnMuc3BlbmRpbmdDcml0ZXJpYURyYWZ0IHx8ICcnKS50cmltKCl9PlxuICAgICAgICAgICAgICBDbGVhclxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Gb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZlZGVyYXRpb25TcGVuZGluZ0NyaXRlcmlhRHJhZnQ7XG4iXSwibmFtZXMiOlsiX3NsaWNlZFRvQXJyYXkiLCJyIiwiZSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJhIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0IiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibGVuZ3RoIiwibiIsImwiLCJTeW1ib2wiLCJpdGVyYXRvciIsImkiLCJ1IiwiZiIsIm8iLCJuZXh0IiwiT2JqZWN0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImlzQXJyYXkiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkNoZWNrYm94IiwiRm9ybSIsIkJ1dHRvbiIsIkljb24iLCJNZXNzYWdlIiwiX3JlcXVpcmUyIiwibG9hZEZlZGVyYXRpb25TcGVuZGluZ1ByZWZzIiwic2F2ZUZlZGVyYXRpb25TcGVuZGluZ1ByZWZzIiwic3Vic2NyaWJlRmVkZXJhdGlvblNwZW5kaW5nUHJlZnMiLCJGZWRlcmF0aW9uU3BlbmRpbmdDcml0ZXJpYURyYWZ0IiwicHJvcHMiLCJjb21wYWN0IiwiX1JlYWN0JHVzZVN0YXRlIiwidXNlU3RhdGUiLCJfUmVhY3QkdXNlU3RhdGUyIiwicHJlZnMiLCJzZXRQcmVmcyIsIl9SZWFjdCR1c2VTdGF0ZTMiLCJzcGVuZGluZ0NyaXRlcmlhRHJhZnQiLCJfUmVhY3QkdXNlU3RhdGU0IiwiZHJhZnQiLCJzZXREcmFmdCIsIl9SZWFjdCR1c2VTdGF0ZTUiLCJwIiwiZHJhZnRpbmdVaU9wZW4iLCJTdHJpbmciLCJ0cmltIiwiX1JlYWN0JHVzZVN0YXRlNiIsIm9wZW4iLCJzZXRPcGVuIiwidXNlRWZmZWN0IiwicGVyc2lzdE9wZW4iLCJuZXh0T3BlbiIsInNhdmVEcmFmdCIsImNsZWFyRHJhZnQiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJ0b2dnbGUiLCJjaGVja2VkIiwib25DaGFuZ2UiLCJfIiwiZCIsImxhYmVsIiwiaW5mbyIsInNpemUiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW4iLCJsaW5lSGVpZ2h0IiwiVGV4dEFyZWEiLCJwbGFjZWhvbGRlciIsInJvd3MiLCJ0YXJnZXQiLCJmb250RmFtaWx5IiwidHlwZSIsInByaW1hcnkiLCJpY29uIiwibGFiZWxQb3NpdGlvbiIsIm9uQ2xpY2siLCJiYXNpYyIsImRpc2FibGVkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/FederationSpendingCriteriaDraft.js\n\n}')},"./components/FederationWalletMultisigPanel.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Checkbox = _require2.Checkbox,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Input = _require2.Input,\n Message = _require2.Message,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! ../functions/hubJsonRpc */ "./functions/hubJsonRpc.js"),\n hubJsonRpc = _require3.hubJsonRpc;\nvar _require4 = __webpack_require__(/*! ../functions/distributedManifestClient */ "./functions/distributedManifestClient.js"),\n fetchDistributedHubPolicy = _require4.fetchDistributedHubPolicy,\n federationSummaryFromManifest = _require4.federationSummaryFromManifest;\nvar _require5 = __webpack_require__(/*! ../functions/federationSpendingPrefs */ "./functions/federationSpendingPrefs.js"),\n loadFederationSpendingPrefs = _require5.loadFederationSpendingPrefs,\n mergePaymentMemoWithFederation = _require5.mergePaymentMemoWithFederation,\n subscribeFederationSpendingPrefs = _require5.subscribeFederationSpendingPrefs;\nvar _require6 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require6.readHubAdminTokenFromBrowser;\nvar _require7 = __webpack_require__(/*! ../functions/uiNotifications */ "./functions/uiNotifications.js"),\n copyToClipboard = _require7.copyToClipboard;\nvar FederationSpendingCriteriaDraft = __webpack_require__(/*! ./FederationSpendingCriteriaDraft */ "./components/FederationSpendingCriteriaDraft.js");\n\n/**\n * Federation summary + optional vault PSBT prep + memo tagging for hub wallet sends.\n * @param {{\n * adminToken?: string,\n * recordFederationContext: boolean,\n * onRecordFederationContextChange: (v: boolean) => void,\n * spendingPrefsTick?: number\n * }} props\n */\nfunction FederationWalletMultisigPanel(props) {\n var adminToken = readHubAdminTokenFromBrowser(props && props.adminToken);\n var recordFed = !!(props && props.recordFederationContext);\n var onRecordChange = props && typeof props.onRecordFederationContextChange === \'function\' ? props.onRecordFederationContextChange : function () {};\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n policy = _React$useState2[0],\n setPolicy = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n manifest = _React$useState4[0],\n setManifest = _React$useState4[1];\n var _React$useState5 = React.useState(null),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n vaultDetail = _React$useState6[0],\n setVaultDetail = _React$useState6[1];\n var _React$useState7 = React.useState(null),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n loadErr = _React$useState8[0],\n setLoadErr = _React$useState8[1];\n var _React$useState9 = React.useState(false),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n vaultFlowOpen = _React$useState0[0],\n setVaultFlowOpen = _React$useState0[1];\n var _React$useState1 = React.useState(\'\'),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n fundedTxHex = _React$useState10[0],\n setFundedTxHex = _React$useState10[1];\n var _React$useState11 = React.useState(\'\'),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n destAddress = _React$useState12[0],\n setDestAddress = _React$useState12[1];\n var _React$useState13 = React.useState(\'\'),\n _React$useState14 = _slicedToArray(_React$useState13, 2),\n feeSats = _React$useState14[0],\n setFeeSats = _React$useState14[1];\n var _React$useState15 = React.useState(\'\'),\n _React$useState16 = _slicedToArray(_React$useState15, 2),\n leafId = _React$useState16[0],\n setLeafId = _React$useState16[1];\n var _React$useState17 = React.useState(false),\n _React$useState18 = _slicedToArray(_React$useState17, 2),\n psbtBusy = _React$useState18[0],\n setPsbtBusy = _React$useState18[1];\n var _React$useState19 = React.useState(null),\n _React$useState20 = _slicedToArray(_React$useState19, 2),\n psbtResult = _React$useState20[0],\n setPsbtResult = _React$useState20[1];\n var _React$useState21 = React.useState(function () {\n return loadFederationSpendingPrefs();\n }),\n _React$useState22 = _slicedToArray(_React$useState21, 2),\n prefs = _React$useState22[0],\n setPrefs = _React$useState22[1];\n var _React$useState23 = React.useState(null),\n _React$useState24 = _slicedToArray(_React$useState23, 2),\n collabHubSummary = _React$useState24[0],\n setCollabHubSummary = _React$useState24[1];\n var refresh = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var tok, _yield$Promise$all, _yield$Promise$all2, pol, dist, vaultJson, lg, groups, _t, _t2;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n setLoadErr(null);\n tok = readHubAdminTokenFromBrowser(props && props.adminToken);\n _context.p = 1;\n _context.n = 2;\n return Promise.all([hubJsonRpc(\'GetDistributedFederationPolicy\', [])["catch"](function (e) {\n throw new Error(e && e.message ? e.message : String(e));\n }), fetchDistributedHubPolicy(), fetch(\'/services/distributed/vault\', {\n headers: {\n Accept: \'application/json\'\n }\n }).then(function (r) {\n return r.ok ? r.json() : null;\n })["catch"](function () {\n return null;\n })]);\n case 2:\n _yield$Promise$all = _context.v;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 3);\n pol = _yield$Promise$all2[0];\n dist = _yield$Promise$all2[1];\n vaultJson = _yield$Promise$all2[2];\n setPolicy(pol && _typeof(pol) === \'object\' ? pol : null);\n setManifest(dist && dist.manifest ? dist.manifest : null);\n setVaultDetail(vaultJson && _typeof(vaultJson) === \'object\' ? vaultJson : null);\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n setPolicy(null);\n setManifest(null);\n setVaultDetail(null);\n setLoadErr(_t && _t.message ? _t.message : String(_t));\n case 4:\n if (tok) {\n _context.n = 5;\n break;\n }\n setCollabHubSummary(null);\n _context.n = 8;\n break;\n case 5:\n _context.p = 5;\n _context.n = 6;\n return hubJsonRpc(\'ListCollaborationGroups\', [{\n adminToken: tok\n }]);\n case 6:\n lg = _context.v;\n groups = lg && Array.isArray(lg.groups) ? lg.groups : [];\n setCollabHubSummary({\n n: groups.length\n });\n _context.n = 8;\n break;\n case 7:\n _context.p = 7;\n _t2 = _context.v;\n setCollabHubSummary({\n err: _t2 && _t2.message ? _t2.message : String(_t2)\n });\n case 8:\n return _context.a(2);\n }\n }, _callee, null, [[5, 7], [1, 3]]);\n })), [props]);\n React.useEffect(function () {\n void refresh();\n }, [refresh]);\n React.useEffect(function () {\n return subscribeFederationSpendingPrefs(function () {\n return setPrefs(loadFederationSpendingPrefs());\n });\n }, []);\n React.useEffect(function () {\n setPrefs(loadFederationSpendingPrefs());\n }, [props && props.spendingPrefsTick]);\n var validators = policy && Array.isArray(policy.validators) ? policy.validators.filter(Boolean) : [];\n var thr = policy && policy.threshold != null ? Math.max(1, Number(policy.threshold) || 1) : 1;\n var mOfN = validators.length ? "".concat(Math.min(thr, validators.length), "-of-").concat(validators.length) : null;\n var fedFromManifest = federationSummaryFromManifest(manifest);\n var vault = vaultDetail && vaultDetail.status === \'ok\' && vaultDetail.address ? vaultDetail : manifest && manifest.federationVault ? manifest.federationVault : null;\n var vaultAddr = vault && vault.address ? String(vault.address) : \'\';\n var vaultLeaves = vaultDetail && Array.isArray(vaultDetail.leaves) && vaultDetail.leaves.length ? vaultDetail.leaves : vault && Array.isArray(vault.leaves) ? vault.leaves : [];\n var criteriaPreview = mergePaymentMemoWithFederation(\'\', prefs, true);\n var preparePsbt = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var hex, to, params, fs, lid, r, _t3;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n setPsbtResult(null);\n if (adminToken) {\n _context2.n = 1;\n break;\n }\n setPsbtResult({\n error: \'Admin token required in this browser to build a withdrawal PSBT.\'\n });\n return _context2.a(2);\n case 1:\n hex = String(fundedTxHex || \'\').trim();\n to = String(destAddress || \'\').trim();\n if (hex) {\n _context2.n = 2;\n break;\n }\n setPsbtResult({\n error: \'Paste the full raw transaction hex that funded the federation vault address.\'\n });\n return _context2.a(2);\n case 2:\n if (to) {\n _context2.n = 3;\n break;\n }\n setPsbtResult({\n error: \'Destination address is required.\'\n });\n return _context2.a(2);\n case 3:\n setPsbtBusy(true);\n _context2.p = 4;\n params = {\n fundedTxHex: hex,\n destinationAddress: to,\n adminToken: adminToken\n };\n if (vaultAddr) params.vaultAddress = vaultAddr;\n fs = feeSats != null && String(feeSats).trim() !== \'\' ? Math.round(Number(feeSats)) : NaN;\n if (Number.isFinite(fs) && fs > 0) params.feeSats = fs;\n lid = String(leafId || \'\').trim();\n if (lid) params.leafId = lid;\n _context2.n = 5;\n return hubJsonRpc(\'PrepareFederationVaultWithdrawalPsbt\', [params]);\n case 5:\n r = _context2.v;\n if (!(r && r.status === \'error\')) {\n _context2.n = 6;\n break;\n }\n setPsbtResult({\n error: r.message || \'Prepare PSBT failed\'\n });\n return _context2.a(2);\n case 6:\n setPsbtResult(r || {});\n _context2.n = 8;\n break;\n case 7:\n _context2.p = 7;\n _t3 = _context2.v;\n setPsbtResult({\n error: _t3 && _t3.message ? _t3.message : String(_t3)\n });\n case 8:\n _context2.p = 8;\n setPsbtBusy(false);\n return _context2.f(8);\n case 9:\n return _context2.a(2);\n }\n }, _callee2, null, [[4, 7, 8, 9]]);\n }));\n return function preparePsbt() {\n return _ref2.apply(this, arguments);\n };\n }();\n var psbtText = psbtResult && (psbtResult.psbtBase64 || psbtResult.psbtHex || psbtResult.psbt);\n return /*#__PURE__*/React.createElement(Segment, {\n id: "fabric-federation-wallet-panel",\n style: {\n marginTop: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users"\n }), "Shared wallet (federation multisig)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\',\n lineHeight: 1.5,\n marginBottom: \'0.65em\'\n }\n }, "Your hub can host a ", /*#__PURE__*/React.createElement("strong", null, "shared Taproot vault"), " controlled by multiple signers (M-of-N). That is separate from the ", /*#__PURE__*/React.createElement("strong", null, "hub node wallet"), " used for quick sends below \\u2014 vault spends use a PSBT that co-signers approve offline, then you broadcast when complete."), loadErr ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small"\n }, "Could not load federation policy: ", loadErr) : null, mOfN ? /*#__PURE__*/React.createElement(Message, {\n positive: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Federation is configured on this hub"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n lineHeight: 1.45\n }\n }, "Policy: ", /*#__PURE__*/React.createElement("strong", null, mOfN), policy && policy.source ? /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#555\'\n }\n }, \' \', "\\xB7 source ", /*#__PURE__*/React.createElement("code", null, String(policy.source))) : null, fedFromManifest.active ? /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#555\'\n }\n }, \' \', "\\xB7 manifest lists the same signer set for distributed features.") : null)) : /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Message.Header, null, "No federation yet"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n lineHeight: 1.45\n }\n }, "Add signer public keys and a threshold on the", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/federations"\n }, "Federations"), " page (or", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/federation"\n }, "Settings \\u2192 Distributed federation"), "). After saving, this hub derives the vault address for deposits.")), vaultAddr ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.75em 0\',\n color: \'#2c5c2c\',\n lineHeight: 1.45,\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'center\',\n gap: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("strong", null, "Federation vault (deposit here for multisig):"), \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, vaultAddr)), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n icon: true,\n basic: true,\n size: "small",\n title: "Copy vault address",\n "aria-label": "Copy vault address",\n onClick: function onClick() {\n return copyToClipboard(vaultAddr);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n })), /*#__PURE__*/React.createElement("span", null, \' · \'), /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/vault/utxos",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "UTXOs")) : vault && vault.status === \'no_validators\' ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.75em 0\',\n color: \'#666\'\n }\n }, "Configure validators to show the on-chain vault address.") : null, vaultLeaves.length ? /*#__PURE__*/React.createElement("div", {\n style: {\n margin: \'0.65em 0 0.85em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0 0 0.4em\',\n fontSize: \'0.9em\',\n color: \'#444\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Taproot leaves"), " (script tree \\u2014 pick one when building a PSBT):"), /*#__PURE__*/React.createElement("ul", {\n style: {\n margin: 0,\n paddingLeft: \'1.2em\',\n fontSize: \'0.85em\',\n lineHeight: 1.5,\n color: \'#555\'\n }\n }, vaultLeaves.map(function (l) {\n return /*#__PURE__*/React.createElement("li", {\n key: l.id || l.tapscriptHex\n }, /*#__PURE__*/React.createElement("code", null, l.id || \'?\'), \' · \', l.kind || \'leaf\', l.threshold != null && l.keys ? " \\xB7 ".concat(l.threshold, "-of-").concat((l.keys || []).length) : null, l.commitmentHex ? " \\xB7 hashlock ".concat(String(l.commitmentHex).slice(0, 12), "\\u2026") : null, l.witnessShape ? " \\xB7 witness ".concat(l.witnessShape) : null);\n }))) : null, /*#__PURE__*/React.createElement("div", {\n style: {\n margin: \'0.85em 0\'\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: "/federations"\n }, "Open federation setup"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "#fabric-btc-tx-client-h3"\n }, "Jump to wallet activity")), adminToken && collabHubSummary && collabHubSummary.err ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: 0\n }\n }, "Could not load Collaboration groups: ", collabHubSummary.err) : null, adminToken && collabHubSummary && collabHubSummary.n != null ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n fontSize: \'0.9em\',\n color: \'#555\',\n lineHeight: 1.45\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users"\n }), \' \', "Collaboration: ", /*#__PURE__*/React.createElement("strong", null, collabHubSummary.n), " group", collabHubSummary.n === 1 ? \'\' : \'s\', " on this hub.", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/collaboration"\n }, "Multisig previews \\xB7 pubkey members"), \' — \', "align federation signers with a group via", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/federations"\n }, "Federations \\u2192 Save signer set to Collaboration group"), ".") : !adminToken && mOfN ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n fontSize: \'0.88em\',\n color: \'#666\',\n lineHeight: 1.45\n }\n }, "Save the hub ", /*#__PURE__*/React.createElement("strong", null, "admin token"), " (Settings) to show Collaboration group counts next to this vault and to build withdrawal PSBTs.") : null, /*#__PURE__*/React.createElement(FederationSpendingCriteriaDraft, {\n compact: true\n }), /*#__PURE__*/React.createElement(Checkbox, {\n checked: recordFed,\n onChange: function onChange(_, d) {\n return onRecordChange(!!(d && d.checked));\n },\n style: {\n marginTop: \'0.85em\',\n display: \'block\'\n },\n label: "Record hub wallet sends below as federation-related (append my spending criteria to the payment memo)"\n }), recordFed && criteriaPreview ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n fontSize: \'0.85em\',\n color: \'#666\',\n lineHeight: 1.4\n }\n }, "Memo will include: ", /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-word\'\n }\n }, criteriaPreview.slice(0, 120), criteriaPreview.length > 120 ? \'…\' : \'\')) : recordFed && !criteriaPreview ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n fontSize: \'0.85em\',\n color: \'#888\'\n }\n }, "Turn on the drafting checkbox above and save text to attach a memo fragment.") : null, /*#__PURE__*/React.createElement(Checkbox, {\n checked: vaultFlowOpen,\n onChange: function onChange(_, d) {\n return setVaultFlowOpen(!!(d && d.checked));\n },\n style: {\n marginTop: \'1em\',\n display: \'block\'\n },\n label: "Prepare a federation vault withdrawal PSBT (co-signers sign outside the hub)"\n }), vaultFlowOpen ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Message, {\n size: "small"\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n lineHeight: 1.45\n }\n }, "Paste the ", /*#__PURE__*/React.createElement("strong", null, "full raw hex"), " of the transaction that sent coins to the vault, the", /*#__PURE__*/React.createElement("strong", null, " destination"), " you want to pay, and optionally a ", /*#__PURE__*/React.createElement("strong", null, "fee"), " in sats. The hub returns an ", /*#__PURE__*/React.createElement("strong", null, "unsigned PSBT"), " for validators to sign with their keys.")), /*#__PURE__*/React.createElement(Form, {\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Funding transaction hex"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "020000...",\n value: fundedTxHex,\n onChange: function onChange(e) {\n return setFundedTxHex(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Destination address"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "bc1\\u2026",\n value: destAddress,\n onChange: function onChange(e) {\n return setDestAddress(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Leaf id (optional \\u2014 default active spend tier)"), /*#__PURE__*/React.createElement(Input, {\n list: "fabric-vault-leaf-ids",\n placeholder: vaultLeaves[0] ? vaultLeaves[0].id : \'t0-authority\',\n value: leafId,\n onChange: function onChange(e) {\n return setLeafId(e.target.value);\n }\n }), vaultLeaves.length ? /*#__PURE__*/React.createElement("datalist", {\n id: "fabric-vault-leaf-ids"\n }, vaultLeaves.map(function (l) {\n return /*#__PURE__*/React.createElement("option", {\n key: l.id,\n value: l.id\n }, l.kind);\n })) : null), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Fee (sats, optional)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: 1,\n placeholder: "e.g. 500",\n value: feeSats,\n onChange: function onChange(e) {\n return setFeeSats(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n loading: psbtBusy,\n disabled: psbtBusy,\n onClick: function onClick() {\n return void preparePsbt();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file code outline"\n }), "Build withdrawal PSBT")), psbtResult ? /*#__PURE__*/React.createElement(Message, {\n style: {\n marginTop: \'0.75em\'\n },\n negative: !!psbtResult.error,\n positive: !psbtResult.error && !!psbtText\n }, psbtResult.error ? /*#__PURE__*/React.createElement("p", null, psbtResult.error) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Message.Header, null, "PSBT ready"), /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.5em\'\n }\n }, "Share this with co-signers. Finalize and broadcast when you have enough signatures."), psbtText ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Form.TextArea, {\n readOnly: true,\n rows: 4,\n value: String(psbtText),\n style: {\n fontFamily: \'monospace\',\n fontSize: \'0.8em\'\n }\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return copyToClipboard(String(psbtText));\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n }), "Copy PSBT")) : /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\',\n fontSize: \'0.85em\'\n }\n }, JSON.stringify(psbtResult, null, 2)))) : null) : null);\n}\nmodule.exports = FederationWalletMultisigPanel;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0ZlZGVyYXRpb25XYWxsZXRNdWx0aXNpZ1BhbmVsLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLGFBQUEsSUFDYix1S0FBQUMsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLFdBQUEsOEJBQUFDLEVBQUFOLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLEVBQUFFLENBQUEsUUFBQUMsQ0FBQSxHQUFBTCxDQUFBLElBQUFBLENBQUEsQ0FBQU0sU0FBQSxZQUFBQyxTQUFBLEdBQUFQLENBQUEsR0FBQU8sU0FBQSxFQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsTUFBQSxDQUFBTCxDQUFBLENBQUFDLFNBQUEsVUFBQUssbUJBQUEsQ0FBQUgsQ0FBQSx1QkFBQVYsQ0FBQSxFQUFBRSxDQUFBLEVBQUFFLENBQUEsUUFBQUUsQ0FBQSxFQUFBQyxDQUFBLEVBQUFHLENBQUEsRUFBQUksQ0FBQSxNQUFBQyxDQUFBLEdBQUFYLENBQUEsUUFBQVksQ0FBQSxPQUFBQyxDQUFBLEtBQUFGLENBQUEsS0FBQWIsQ0FBQSxLQUFBZ0IsQ0FBQSxFQUFBcEIsQ0FBQSxFQUFBcUIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFOLENBQUEsRUFBQU0sQ0FBQSxDQUFBQyxJQUFBLENBQUF2QixDQUFBLE1BQUFzQixDQUFBLFdBQUFBLEVBQUFyQixDQUFBLEVBQUFDLENBQUEsV0FBQU0sQ0FBQSxHQUFBUCxDQUFBLEVBQUFRLENBQUEsTUFBQUcsQ0FBQSxHQUFBWixDQUFBLEVBQUFtQixDQUFBLENBQUFmLENBQUEsR0FBQUYsQ0FBQSxFQUFBbUIsQ0FBQSxnQkFBQUMsRUFBQXBCLENBQUEsRUFBQUUsQ0FBQSxTQUFBSyxDQUFBLEdBQUFQLENBQUEsRUFBQVUsQ0FBQSxHQUFBUixDQUFBLEVBQUFILENBQUEs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S0FBQSxDQUFBMEosYUFBQSxDQUFDbkosSUFBSSxDQUFDcU0sUUFBUTtJQUNaQyxRQUFRO0lBQ1JDLElBQUksRUFBRSxDQUFFO0lBQ1J2UCxLQUFLLEVBQUVpSixNQUFNLENBQUM4QyxRQUFRLENBQUU7SUFDeEJNLEtBQUssRUFBRTtNQUFFbUQsVUFBVSxFQUFFLFdBQVc7TUFBRXpCLFFBQVEsRUFBRTtJQUFRO0VBQUUsQ0FDdkQsQ0FBQyxlQUNGdEwsS0FBQSxDQUFBMEosYUFBQSxDQUFDckosTUFBTTtJQUNMeUssSUFBSSxFQUFDLFFBQVE7SUFDYlgsSUFBSSxFQUFDLE9BQU87SUFDWmEsS0FBSztJQUNMRCxJQUFJO0lBQ0ppQyxhQUFhLEVBQUMsTUFBTTtJQUNwQjlCLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO01BQUEsT0FBUXpKLGVBQWUsQ0FBQytFLE1BQU0sQ0FBQzhDLFFBQVEsQ0FBQyxDQUFDO0lBQUE7RUFBQyxnQkFFakR0SixLQUFBLENBQUEwSixhQUFBLENBQUNqSixJQUFJO0lBQUNoQixJQUFJLEVBQUM7RUFBTSxDQUFFLENBQUMsYUFFZCxDQUNMLENBQUMsZ0JBRU5PLEtBQUEsQ0FBQTBKLGFBQUE7SUFBS0UsS0FBSyxFQUFFO01BQUVxRCxVQUFVLEVBQUUsVUFBVTtNQUFFcEMsU0FBUyxFQUFFLFlBQVk7TUFBRVMsUUFBUSxFQUFFO0lBQVM7RUFBRSxHQUNqRjRCLElBQUksQ0FBQ0MsU0FBUyxDQUFDdEksVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQ2hDLENBRVAsQ0FFRyxDQUFDLEdBQ1IsSUFDRCxDQUFDLEdBQ0osSUFDRyxDQUFDO0FBRWQ7QUFFQXVJLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHMUwsNkJBQTZCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0ZlZGVyYXRpb25XYWxsZXRNdWx0aXNpZ1BhbmVsLmpzP2FlZTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHtcbiAgQnV0dG9uLFxuICBDaGVja2JveCxcbiAgRm9ybSxcbiAgSGVhZGVyLFxuICBJY29uLFxuICBJbnB1dCxcbiAgTWVzc2FnZSxcbiAgU2VnbWVudFxufSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCB7IGh1Ykpzb25ScGMgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJKc29uUnBjJyk7XG5jb25zdCB7IGZldGNoRGlzdHJpYnV0ZWRIdWJQb2xpY3ksIGZlZGVyYXRpb25TdW1tYXJ5RnJvbU1hbmlmZXN0IH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZGlzdHJpYnV0ZWRNYW5pZmVzdENsaWVudCcpO1xuY29uc3Qge1xuICBsb2FkRmVkZXJhdGlvblNwZW5kaW5nUHJlZnMsXG4gIG1lcmdlUGF5bWVudE1lbW9XaXRoRmVkZXJhdGlvbixcbiAgc3Vic2NyaWJlRmVkZXJhdGlvblNwZW5kaW5nUHJlZnNcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmVkZXJhdGlvblNwZW5kaW5nUHJlZnMnKTtcbmNvbnN0IHsgcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YkFkbWluVG9rZW5Ccm93c2VyJyk7XG5jb25zdCB7IGNvcHlUb0NsaXBib2FyZCB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3VpTm90aWZpY2F0aW9ucycpO1xuY29uc3QgRmVkZXJhdGlvblNwZW5kaW5nQ3JpdGVyaWFEcmFmdCA9IHJlcXVpcmUoJy4vRmVkZXJhdGlvblNwZW5kaW5nQ3JpdGVyaWFEcmFmdCcpO1xuXG4vKipcbiAqIEZlZGVyYXRpb24gc3VtbWFyeSArIG9wdGlvbmFsIHZhdWx0IFBTQlQgcHJlcCArIG1lbW8gdGFnZ2luZyBmb3IgaHViIHdhbGxldCBzZW5kcy5cbiAqIEBwYXJhbSB7e1xuICogICBhZG1pblRva2VuPzogc3RyaW5nLFxuICogICByZWNvcmRGZWRlcmF0aW9uQ29udGV4dDogYm9vbGVhbixcbiAqIG9uUmVjb3JkRmVkZXJhdGlvbkNvbnRleHRDaGFuZ2U6ICh2OiBib29sZWFuKSA9PiB2b2lkLFxuICogICBzcGVuZGluZ1ByZWZzVGljaz86IG51bWJlclxuICogfX0gcHJvcHNcbiAqL1xuZnVuY3Rpb24gRmVkZXJhdGlvbldhbGxldE11bHRpc2lnUGFuZWwgKHByb3BzKSB7XG4gIGNvbnN0IGFkbWluVG9rZW4gPSByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKHByb3BzICYmIHByb3BzLmFkbWluVG9rZW4pO1xuICBjb25zdCByZWNvcmRGZWQgPSAhIShwcm9wcyAmJiBwcm9wcy5yZWNvcmRGZWRlcmF0aW9uQ29udGV4dCk7XG4gIGNvbnN0IG9uUmVjb3JkQ2hhbmdlID0gcHJvcHMgJiYgdHlwZW9mIHByb3BzLm9uUmVjb3JkRmVkZXJhdGlvbkNvbnRleHRDaGFuZ2UgPT09ICdmdW5jdGlvbidcbiAgICA/IHByb3BzLm9uUmVjb3JkRmVkZXJhdGlvbkNvbnRleHRDaGFuZ2VcbiAgICA6ICgpID0+IHt9O1xuXG4gIGNvbnN0IFtwb2xpY3ksIHNldFBvbGljeV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW21hbmlmZXN0LCBzZXRNYW5pZmVzdF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3ZhdWx0RGV0YWlsLCBzZXRWYXVsdERldGFpbF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvYWRFcnIsIHNldExvYWRFcnJdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFt2YXVsdEZsb3dPcGVuLCBzZXRWYXVsdEZsb3dPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Z1bmRlZFR4SGV4LCBzZXRGdW5kZWRUeEhleF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtkZXN0QWRkcmVzcywgc2V0RGVzdEFkZHJlc3NdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbZmVlU2F0cywgc2V0RmVlU2F0c10gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtsZWFmSWQsIHNldExlYWZJZF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtwc2J0QnVzeSwgc2V0UHNidEJ1c3ldID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcHNidFJlc3VsdCwgc2V0UHNidFJlc3VsdF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3ByZWZzLCBzZXRQcmVmc10gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiBsb2FkRmVkZXJhdGlvblNwZW5kaW5nUHJlZnMoKSk7XG4gIGNvbnN0IFtjb2xsYWJIdWJTdW1tYXJ5LCBzZXRDb2xsYWJIdWJTdW1tYXJ5XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuXG4gIGNvbnN0IHJlZnJlc2ggPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0TG9hZEVycihudWxsKTtcbiAgICBjb25zdCB0b2sgPSByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKHByb3BzICYmIHByb3BzLmFkbWluVG9rZW4pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBbcG9sLCBkaXN0LCB2YXVsdEpzb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBodWJKc29uUnBjKCdHZXREaXN0cmlidXRlZEZlZGVyYXRpb25Qb2xpY3knLCBbXSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICAgICAgICB9KSxcbiAgICAgICAgZmV0Y2hEaXN0cmlidXRlZEh1YlBvbGljeSgpLFxuICAgICAgICBmZXRjaCgnL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL3ZhdWx0Jywge1xuICAgICAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfVxuICAgICAgICB9KS50aGVuKChyKSA9PiAoci5vayA/IHIuanNvbigpIDogbnVsbCkpLmNhdGNoKCgpID0+IG51bGwpXG4gICAgICBdKTtcbiAgICAgIHNldFBvbGljeShwb2wgJiYgdHlwZW9mIHBvbCA9PT0gJ29iamVjdCcgPyBwb2wgOiBudWxsKTtcbiAgICAgIHNldE1hbmlmZXN0KGRpc3QgJiYgZGlzdC5tYW5pZmVzdCA/IGRpc3QubWFuaWZlc3QgOiBudWxsKTtcbiAgICAgIHNldFZhdWx0RGV0YWlsKHZhdWx0SnNvbiAmJiB0eXBlb2YgdmF1bHRKc29uID09PSAnb2JqZWN0JyA/IHZhdWx0SnNvbiA6IG51bGwpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldFBvbGljeShudWxsKTtcbiAgICAgIHNldE1hbmlmZXN0KG51bGwpO1xuICAgICAgc2V0VmF1bHREZXRhaWwobnVsbCk7XG4gICAgICBzZXRMb2FkRXJyKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICB9XG4gICAgaWYgKCF0b2spIHtcbiAgICAgIHNldENvbGxhYkh1YlN1bW1hcnkobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxnID0gYXdhaXQgaHViSnNvblJwYygnTGlzdENvbGxhYm9yYXRpb25Hcm91cHMnLCBbeyBhZG1pblRva2VuOiB0b2sgfV0pO1xuICAgICAgICBjb25zdCBncm91cHMgPSBsZyAmJiBBcnJheS5pc0FycmF5KGxnLmdyb3VwcykgPyBsZy5ncm91cHMgOiBbXTtcbiAgICAgICAgc2V0Q29sbGFiSHViU3VtbWFyeSh7IG46IGdyb3Vwcy5sZW5ndGggfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHNldENvbGxhYkh1YlN1bW1hcnkoeyBlcnI6IGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3Byb3BzXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICB2b2lkIHJlZnJlc2goKTtcbiAgfSwgW3JlZnJlc2hdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBzdWJzY3JpYmVGZWRlcmF0aW9uU3BlbmRpbmdQcmVmcygoKSA9PiBzZXRQcmVmcyhsb2FkRmVkZXJhdGlvblNwZW5kaW5nUHJlZnMoKSkpO1xuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRQcmVmcyhsb2FkRmVkZXJhdGlvblNwZW5kaW5nUHJlZnMoKSk7XG4gIH0sIFtwcm9wcyAmJiBwcm9wcy5zcGVuZGluZ1ByZWZzVGlja10pO1xuXG4gIGNvbnN0IHZhbGlkYXRvcnMgPSBwb2xpY3kgJiYgQXJyYXkuaXNBcnJheShwb2xpY3kudmFsaWRhdG9ycykgPyBwb2xpY3kudmFsaWRhdG9ycy5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgY29uc3QgdGhyID0gcG9saWN5ICYmIHBvbGljeS50aHJlc2hvbGQgIT0gbnVsbCA/IE1hdGgubWF4KDEsIE51bWJlcihwb2xpY3kudGhyZXNob2xkKSB8fCAxKSA6IDE7XG4gIGNvbnN0IG1PZk4gPSB2YWxpZGF0b3JzLmxlbmd0aCA/IGAke01hdGgubWluKHRociwgdmFsaWRhdG9ycy5sZW5ndGgpfS1vZi0ke3ZhbGlkYXRvcnMubGVuZ3RofWAgOiBudWxsO1xuICBjb25zdCBmZWRGcm9tTWFuaWZlc3QgPSBmZWRlcmF0aW9uU3VtbWFyeUZyb21NYW5pZmVzdChtYW5pZmVzdCk7XG4gIGNvbnN0IHZhdWx0ID0gKHZhdWx0RGV0YWlsICYmIHZhdWx0RGV0YWlsLnN0YXR1cyA9PT0gJ29rJyAmJiB2YXVsdERldGFpbC5hZGRyZXNzKVxuICAgID8gdmF1bHREZXRhaWxcbiAgICA6IChtYW5pZmVzdCAmJiBtYW5pZmVzdC5mZWRlcmF0aW9uVmF1bHQgPyBtYW5pZmVzdC5mZWRlcmF0aW9uVmF1bHQgOiBudWxsKTtcbiAgY29uc3QgdmF1bHRBZGRyID0gdmF1bHQgJiYgdmF1bHQuYWRkcmVzcyA/IFN0cmluZyh2YXVsdC5hZGRyZXNzKSA6ICcnO1xuICBjb25zdCB2YXVsdExlYXZlcyA9ICh2YXVsdERldGFpbCAmJiBBcnJheS5pc0FycmF5KHZhdWx0RGV0YWlsLmxlYXZlcykgJiYgdmF1bHREZXRhaWwubGVhdmVzLmxlbmd0aClcbiAgICA/IHZhdWx0RGV0YWlsLmxlYXZlc1xuICAgIDogKCh2YXVsdCAmJiBBcnJheS5pc0FycmF5KHZhdWx0LmxlYXZlcykpID8gdmF1bHQubGVhdmVzIDogW10pO1xuICBjb25zdCBjcml0ZXJpYVByZXZpZXcgPSBtZXJnZVBheW1lbnRNZW1vV2l0aEZlZGVyYXRpb24oJycsIHByZWZzLCB0cnVlKTtcblxuICBjb25zdCBwcmVwYXJlUHNidCA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRQc2J0UmVzdWx0KG51bGwpO1xuICAgIGlmICghYWRtaW5Ub2tlbikge1xuICAgICAgc2V0UHNidFJlc3VsdCh7IGVycm9yOiAnQWRtaW4gdG9rZW4gcmVxdWlyZWQgaW4gdGhpcyBicm93c2VyIHRvIGJ1aWxkIGEgd2l0aGRyYXdhbCBQU0JULicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhleCA9IFN0cmluZyhmdW5kZWRUeEhleCB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IHRvID0gU3RyaW5nKGRlc3RBZGRyZXNzIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFoZXgpIHtcbiAgICAgIHNldFBzYnRSZXN1bHQoeyBlcnJvcjogJ1Bhc3RlIHRoZSBmdWxsIHJhdyB0cmFuc2FjdGlvbiBoZXggdGhhdCBmdW5kZWQgdGhlIGZlZGVyYXRpb24gdmF1bHQgYWRkcmVzcy4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRvKSB7XG4gICAgICBzZXRQc2J0UmVzdWx0KHsgZXJyb3I6ICdEZXN0aW5hdGlvbiBhZGRyZXNzIGlzIHJlcXVpcmVkLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFBzYnRCdXN5KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGZ1bmRlZFR4SGV4OiBoZXgsXG4gICAgICAgIGRlc3RpbmF0aW9uQWRkcmVzczogdG8sXG4gICAgICAgIGFkbWluVG9rZW5cbiAgICAgIH07XG4gICAgICBpZiAodmF1bHRBZGRyKSBwYXJhbXMudmF1bHRBZGRyZXNzID0gdmF1bHRBZGRyO1xuICAgICAgY29uc3QgZnMgPSBmZWVTYXRzICE9IG51bGwgJiYgU3RyaW5nKGZlZVNhdHMpLnRyaW0oKSAhPT0gJycgPyBNYXRoLnJvdW5kKE51bWJlcihmZWVTYXRzKSkgOiBOYU47XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGZzKSAmJiBmcyA+IDApIHBhcmFtcy5mZWVTYXRzID0gZnM7XG4gICAgICBjb25zdCBsaWQgPSBTdHJpbmcobGVhZklkIHx8ICcnKS50cmltKCk7XG4gICAgICBpZiAobGlkKSBwYXJhbXMubGVhZklkID0gbGlkO1xuICAgICAgY29uc3QgciA9IGF3YWl0IGh1Ykpzb25ScGMoJ1ByZXBhcmVGZWRlcmF0aW9uVmF1bHRXaXRoZHJhd2FsUHNidCcsIFtwYXJhbXNdKTtcbiAgICAgIGlmIChyICYmIHIuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgIHNldFBzYnRSZXN1bHQoeyBlcnJvcjogci5tZXNzYWdlIHx8ICdQcmVwYXJlIFBTQlQgZmFpbGVkJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0UHNidFJlc3VsdChyIHx8IHt9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXRQc2J0UmVzdWx0KHsgZXJyb3I6IGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRQc2J0QnVzeShmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBzYnRUZXh0ID0gcHNidFJlc3VsdCAmJiAocHNidFJlc3VsdC5wc2J0QmFzZTY0IHx8IHBzYnRSZXN1bHQucHNidEhleCB8fCBwc2J0UmVzdWx0LnBzYnQpO1xuXG4gIHJldHVybiAoXG4gICAgPFNlZ21lbnQgaWQ9XCJmYWJyaWMtZmVkZXJhdGlvbi13YWxsZXQtcGFuZWxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjg1ZW0nIH19PlxuICAgICAgPEhlYWRlciBhcz1cImgzXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlxuICAgICAgICA8SWNvbiBuYW1lPVwidXNlcnNcIiAvPlxuICAgICAgICBTaGFyZWQgd2FsbGV0IChmZWRlcmF0aW9uIG11bHRpc2lnKVxuICAgICAgPC9IZWFkZXI+XG4gICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM1NTUnLCBsaW5lSGVpZ2h0OiAxLjUsIG1hcmdpbkJvdHRvbTogJzAuNjVlbScgfX0+XG4gICAgICAgIFlvdXIgaHViIGNhbiBob3N0IGEgPHN0cm9uZz5zaGFyZWQgVGFwcm9vdCB2YXVsdDwvc3Ryb25nPiBjb250cm9sbGVkIGJ5IG11bHRpcGxlIHNpZ25lcnMgKE0tb2YtTikuXG4gICAgICAgIFRoYXQgaXMgc2VwYXJhdGUgZnJvbSB0aGUgPHN0cm9uZz5odWIgbm9kZSB3YWxsZXQ8L3N0cm9uZz4gdXNlZCBmb3IgcXVpY2sgc2VuZHMgYmVsb3cg4oCUIHZhdWx0IHNwZW5kcyB1c2UgYSBQU0JUXG4gICAgICAgIHRoYXQgY28tc2lnbmVycyBhcHByb3ZlIG9mZmxpbmUsIHRoZW4geW91IGJyb2FkY2FzdCB3aGVuIGNvbXBsZXRlLlxuICAgICAgPC9wPlxuICAgICAge2xvYWRFcnIgPyAoXG4gICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgQ291bGQgbm90IGxvYWQgZmVkZXJhdGlvbiBwb2xpY3k6IHtsb2FkRXJyfVxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHttT2ZOID8gKFxuICAgICAgICA8TWVzc2FnZSBwb3NpdGl2ZSBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+RmVkZXJhdGlvbiBpcyBjb25maWd1cmVkIG9uIHRoaXMgaHViPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICAgIFBvbGljeTogPHN0cm9uZz57bU9mTn08L3N0cm9uZz5cbiAgICAgICAgICAgIHtwb2xpY3kgJiYgcG9saWN5LnNvdXJjZSA/IChcbiAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjNTU1JyB9fT57JyAnfcK3IHNvdXJjZSA8Y29kZT57U3RyaW5nKHBvbGljeS5zb3VyY2UpfTwvY29kZT48L3NwYW4+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtmZWRGcm9tTWFuaWZlc3QuYWN0aXZlID8gKFxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM1NTUnIH19PnsnICd9wrcgbWFuaWZlc3QgbGlzdHMgdGhlIHNhbWUgc2lnbmVyIHNldCBmb3IgZGlzdHJpYnV0ZWQgZmVhdHVyZXMuPC9zcGFuPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApIDogKFxuICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5ObyBmZWRlcmF0aW9uIHlldDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICBBZGQgc2lnbmVyIHB1YmxpYyBrZXlzIGFuZCBhIHRocmVzaG9sZCBvbiB0aGV7JyAnfVxuICAgICAgICAgICAgPExpbmsgdG89XCIvZmVkZXJhdGlvbnNcIj5GZWRlcmF0aW9uczwvTGluaz4gcGFnZSAob3J7JyAnfVxuICAgICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3MvZmVkZXJhdGlvblwiPlNldHRpbmdzIOKGkiBEaXN0cmlidXRlZCBmZWRlcmF0aW9uPC9MaW5rPlxuICAgICAgICAgICAgKS4gQWZ0ZXIgc2F2aW5nLCB0aGlzIGh1YiBkZXJpdmVzIHRoZSB2YXVsdCBhZGRyZXNzIGZvciBkZXBvc2l0cy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICl9XG4gICAgICB7dmF1bHRBZGRyID8gKFxuICAgICAgICA8cFxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBtYXJnaW46ICcwLjc1ZW0gMCcsXG4gICAgICAgICAgICBjb2xvcjogJyMyYzVjMmMnLFxuICAgICAgICAgICAgbGluZUhlaWdodDogMS40NSxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGZsZXhXcmFwOiAnd3JhcCcsXG4gICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGdhcDogJzAuMzVlbSdcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8c3Ryb25nPkZlZGVyYXRpb24gdmF1bHQgKGRlcG9zaXQgaGVyZSBmb3IgbXVsdGlzaWcpOjwvc3Ryb25nPnsnICd9XG4gICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19Pnt2YXVsdEFkZHJ9PC9jb2RlPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgdGl0bGU9XCJDb3B5IHZhdWx0IGFkZHJlc3NcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNvcHkgdmF1bHQgYWRkcmVzc1wiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb3B5VG9DbGlwYm9hcmQodmF1bHRBZGRyKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwiY29weVwiIC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPHNwYW4+eycgwrcgJ308L3NwYW4+XG4gICAgICAgICAgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC92YXVsdC91dHhvc1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5VVFhPczwvYT5cbiAgICAgICAgPC9wPlxuICAgICAgKSA6IHZhdWx0ICYmIHZhdWx0LnN0YXR1cyA9PT0gJ25vX3ZhbGlkYXRvcnMnID8gKFxuICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjc1ZW0gMCcsIGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgQ29uZmlndXJlIHZhbGlkYXRvcnMgdG8gc2hvdyB0aGUgb24tY2hhaW4gdmF1bHQgYWRkcmVzcy5cbiAgICAgICAgPC9wPlxuICAgICAgKSA6IG51bGx9XG5cbiAgICAgIHt2YXVsdExlYXZlcy5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luOiAnMC42NWVtIDAgMC44NWVtJyB9fT5cbiAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwIDAgMC40ZW0nLCBmb250U2l6ZTogJzAuOWVtJywgY29sb3I6ICcjNDQ0JyB9fT5cbiAgICAgICAgICAgIDxzdHJvbmc+VGFwcm9vdCBsZWF2ZXM8L3N0cm9uZz4gKHNjcmlwdCB0cmVlIOKAlCBwaWNrIG9uZSB3aGVuIGJ1aWxkaW5nIGEgUFNCVCk6XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDx1bCBzdHlsZT17eyBtYXJnaW46IDAsIHBhZGRpbmdMZWZ0OiAnMS4yZW0nLCBmb250U2l6ZTogJzAuODVlbScsIGxpbmVIZWlnaHQ6IDEuNSwgY29sb3I6ICcjNTU1JyB9fT5cbiAgICAgICAgICAgIHt2YXVsdExlYXZlcy5tYXAoKGwpID0+IChcbiAgICAgICAgICAgICAgPGxpIGtleT17bC5pZCB8fCBsLnRhcHNjcmlwdEhleH0+XG4gICAgICAgICAgICAgICAgPGNvZGU+e2wuaWQgfHwgJz8nfTwvY29kZT5cbiAgICAgICAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgICAgICAgIHtsLmtpbmQgfHwgJ2xlYWYnfVxuICAgICAgICAgICAgICAgIHtsLnRocmVzaG9sZCAhPSBudWxsICYmIGwua2V5cyA/IGAgwrcgJHtsLnRocmVzaG9sZH0tb2YtJHsobC5rZXlzIHx8IFtdKS5sZW5ndGh9YCA6IG51bGx9XG4gICAgICAgICAgICAgICAge2wuY29tbWl0bWVudEhleCA/IGAgwrcgaGFzaGxvY2sgJHtTdHJpbmcobC5jb21taXRtZW50SGV4KS5zbGljZSgwLCAxMil94oCmYCA6IG51bGx9XG4gICAgICAgICAgICAgICAge2wud2l0bmVzc1NoYXBlID8gYCDCtyB3aXRuZXNzICR7bC53aXRuZXNzU2hhcGV9YCA6IG51bGx9XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiBudWxsfVxuXG4gICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbjogJzAuODVlbSAwJyB9fT5cbiAgICAgICAgPExpbmsgdG89XCIvZmVkZXJhdGlvbnNcIj5PcGVuIGZlZGVyYXRpb24gc2V0dXA8L0xpbms+XG4gICAgICAgIHsnIMK3ICd9XG4gICAgICAgIDxhIGhyZWY9XCIjZmFicmljLWJ0Yy10eC1jbGllbnQtaDNcIj5KdW1wIHRvIHdhbGxldCBhY3Rpdml0eTwvYT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7YWRtaW5Ub2tlbiAmJiBjb2xsYWJIdWJTdW1tYXJ5ICYmIGNvbGxhYkh1YlN1bW1hcnkuZXJyID8gKFxuICAgICAgICA8TWVzc2FnZSB3YXJuaW5nIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpblRvcDogMCB9fT5cbiAgICAgICAgICBDb3VsZCBub3QgbG9hZCBDb2xsYWJvcmF0aW9uIGdyb3Vwczoge2NvbGxhYkh1YlN1bW1hcnkuZXJyfVxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHthZG1pblRva2VuICYmIGNvbGxhYkh1YlN1bW1hcnkgJiYgY29sbGFiSHViU3VtbWFyeS5uICE9IG51bGwgPyAoXG4gICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNWVtIDAgMCcsIGZvbnRTaXplOiAnMC45ZW0nLCBjb2xvcjogJyM1NTUnLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJ1c2Vyc1wiIC8+XG4gICAgICAgICAgeycgJ31cbiAgICAgICAgICBDb2xsYWJvcmF0aW9uOiA8c3Ryb25nPntjb2xsYWJIdWJTdW1tYXJ5Lm59PC9zdHJvbmc+IGdyb3Vwe2NvbGxhYkh1YlN1bW1hcnkubiA9PT0gMSA/ICcnIDogJ3MnfSBvbiB0aGlzIGh1Yi5cbiAgICAgICAgICB7JyAnfVxuICAgICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzL2NvbGxhYm9yYXRpb25cIj5NdWx0aXNpZyBwcmV2aWV3cyDCtyBwdWJrZXkgbWVtYmVyczwvTGluaz5cbiAgICAgICAgICB7JyDigJQgJ31cbiAgICAgICAgICBhbGlnbiBmZWRlcmF0aW9uIHNpZ25lcnMgd2l0aCBhIGdyb3VwIHZpYXsnICd9XG4gICAgICAgICAgPExpbmsgdG89XCIvZmVkZXJhdGlvbnNcIj5GZWRlcmF0aW9ucyDihpIgU2F2ZSBzaWduZXIgc2V0IHRvIENvbGxhYm9yYXRpb24gZ3JvdXA8L0xpbms+LlxuICAgICAgICA8L3A+XG4gICAgICApIDogIWFkbWluVG9rZW4gJiYgbU9mTiA/IChcbiAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC41ZW0gMCAwJywgZm9udFNpemU6ICcwLjg4ZW0nLCBjb2xvcjogJyM2NjYnLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgIFNhdmUgdGhlIGh1YiA8c3Ryb25nPmFkbWluIHRva2VuPC9zdHJvbmc+IChTZXR0aW5ncykgdG8gc2hvdyBDb2xsYWJvcmF0aW9uIGdyb3VwIGNvdW50cyBuZXh0IHRvIHRoaXMgdmF1bHQgYW5kIHRvIGJ1aWxkIHdpdGhkcmF3YWwgUFNCVHMuXG4gICAgICAgIDwvcD5cbiAgICAgICkgOiBudWxsfVxuXG4gICAgICA8RmVkZXJhdGlvblNwZW5kaW5nQ3JpdGVyaWFEcmFmdCBjb21wYWN0IC8+XG5cbiAgICAgIDxDaGVja2JveFxuICAgICAgICBjaGVja2VkPXtyZWNvcmRGZWR9XG4gICAgICAgIG9uQ2hhbmdlPXsoXywgZCkgPT4gb25SZWNvcmRDaGFuZ2UoISEoZCAmJiBkLmNoZWNrZWQpKX1cbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC44NWVtJywgZGlzcGxheTogJ2Jsb2NrJyB9fVxuICAgICAgICBsYWJlbD1cIlJlY29yZCBodWIgd2FsbGV0IHNlbmRzIGJlbG93IGFzIGZlZGVyYXRpb24tcmVsYXRlZCAoYXBwZW5kIG15IHNwZW5kaW5nIGNyaXRlcmlhIHRvIHRoZSBwYXltZW50IG1lbW8pXCJcbiAgICAgIC8+XG4gICAgICB7cmVjb3JkRmVkICYmIGNyaXRlcmlhUHJldmlldyA/IChcbiAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGZvbnRTaXplOiAnMC44NWVtJywgY29sb3I6ICcjNjY2JywgbGluZUhlaWdodDogMS40IH19PlxuICAgICAgICAgIE1lbW8gd2lsbCBpbmNsdWRlOiA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay13b3JkJyB9fT57Y3JpdGVyaWFQcmV2aWV3LnNsaWNlKDAsIDEyMCl9e2NyaXRlcmlhUHJldmlldy5sZW5ndGggPiAxMjAgPyAn4oCmJyA6ICcnfTwvY29kZT5cbiAgICAgICAgPC9wPlxuICAgICAgKSA6IHJlY29yZEZlZCAmJiAhY3JpdGVyaWFQcmV2aWV3ID8gKFxuICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgZm9udFNpemU6ICcwLjg1ZW0nLCBjb2xvcjogJyM4ODgnIH19PlxuICAgICAgICAgIFR1cm4gb24gdGhlIGRyYWZ0aW5nIGNoZWNrYm94IGFib3ZlIGFuZCBzYXZlIHRleHQgdG8gYXR0YWNoIGEgbWVtbyBmcmFnbWVudC5cbiAgICAgICAgPC9wPlxuICAgICAgKSA6IG51bGx9XG5cbiAgICAgIDxDaGVja2JveFxuICAgICAgICBjaGVja2VkPXt2YXVsdEZsb3dPcGVufVxuICAgICAgICBvbkNoYW5nZT17KF8sIGQpID0+IHNldFZhdWx0Rmxvd09wZW4oISEoZCAmJiBkLmNoZWNrZWQpKX1cbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJywgZGlzcGxheTogJ2Jsb2NrJyB9fVxuICAgICAgICBsYWJlbD1cIlByZXBhcmUgYSBmZWRlcmF0aW9uIHZhdWx0IHdpdGhkcmF3YWwgUFNCVCAoY28tc2lnbmVycyBzaWduIG91dHNpZGUgdGhlIGh1YilcIlxuICAgICAgLz5cbiAgICAgIHt2YXVsdEZsb3dPcGVuID8gKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX0+XG4gICAgICAgICAgPE1lc3NhZ2Ugc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46IDAsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICAgIFBhc3RlIHRoZSA8c3Ryb25nPmZ1bGwgcmF3IGhleDwvc3Ryb25nPiBvZiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBzZW50IGNvaW5zIHRvIHRoZSB2YXVsdCwgdGhlXG4gICAgICAgICAgICAgIDxzdHJvbmc+IGRlc3RpbmF0aW9uPC9zdHJvbmc+IHlvdSB3YW50IHRvIHBheSwgYW5kIG9wdGlvbmFsbHkgYSA8c3Ryb25nPmZlZTwvc3Ryb25nPiBpbiBzYXRzLlxuICAgICAgICAgICAgICBUaGUgaHViIHJldHVybnMgYW4gPHN0cm9uZz51bnNpZ25lZCBQU0JUPC9zdHJvbmc+IGZvciB2YWxpZGF0b3JzIHRvIHNpZ24gd2l0aCB0aGVpciBrZXlzLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICA8Rm9ybSBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPGxhYmVsPkZ1bmRpbmcgdHJhbnNhY3Rpb24gaGV4PC9sYWJlbD5cbiAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIwMjAwMDAuLi5cIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtmdW5kZWRUeEhleH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEZ1bmRlZFR4SGV4KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICA8bGFiZWw+RGVzdGluYXRpb24gYWRkcmVzczwvbGFiZWw+XG4gICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiYmMx4oCmXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17ZGVzdEFkZHJlc3N9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXREZXN0QWRkcmVzcyhlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPGxhYmVsPkxlYWYgaWQgKG9wdGlvbmFsIOKAlCBkZWZhdWx0IGFjdGl2ZSBzcGVuZCB0aWVyKTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgIGxpc3Q9XCJmYWJyaWMtdmF1bHQtbGVhZi1pZHNcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt2YXVsdExlYXZlc1swXSA/IHZhdWx0TGVhdmVzWzBdLmlkIDogJ3QwLWF1dGhvcml0eSd9XG4gICAgICAgICAgICAgICAgdmFsdWU9e2xlYWZJZH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldExlYWZJZChlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHt2YXVsdExlYXZlcy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgPGRhdGFsaXN0IGlkPVwiZmFicmljLXZhdWx0LWxlYWYtaWRzXCI+XG4gICAgICAgICAgICAgICAgICB7dmF1bHRMZWF2ZXMubWFwKChsKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtsLmlkfSB2YWx1ZT17bC5pZH0+e2wua2luZH08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvZGF0YWxpc3Q+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxsYWJlbD5GZWUgKHNhdHMsIG9wdGlvbmFsKTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgIG1pbj17MX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gNTAwXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17ZmVlU2F0c31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEZlZVNhdHMoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcHJpbWFyeSBsb2FkaW5nPXtwc2J0QnVzeX0gZGlzYWJsZWQ9e3BzYnRCdXN5fSBvbkNsaWNrPXsoKSA9PiB2b2lkIHByZXBhcmVQc2J0KCl9PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZmlsZSBjb2RlIG91dGxpbmVcIiAvPlxuICAgICAgICAgICAgICBCdWlsZCB3aXRoZHJhd2FsIFBTQlRcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICB7cHNidFJlc3VsdCA/IChcbiAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX1cbiAgICAgICAgICAgICAgbmVnYXRpdmU9eyEhcHNidFJlc3VsdC5lcnJvcn1cbiAgICAgICAgICAgICAgcG9zaXRpdmU9eyFwc2J0UmVzdWx0LmVycm9yICYmICEhcHNidFRleHR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtwc2J0UmVzdWx0LmVycm9yID8gKFxuICAgICAgICAgICAgICAgIDxwPntwc2J0UmVzdWx0LmVycm9yfTwvcD5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPlBTQlQgcmVhZHk8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlNoYXJlIHRoaXMgd2l0aCBjby1zaWduZXJzLiBGaW5hbGl6ZSBhbmQgYnJvYWRjYXN0IHdoZW4geW91IGhhdmUgZW5vdWdoIHNpZ25hdHVyZXMuPC9wPlxuICAgICAgICAgICAgICAgICAge3BzYnRUZXh0ID8gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybS5UZXh0QXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3M9ezR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17U3RyaW5nKHBzYnRUZXh0KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnLCBmb250U2l6ZTogJzAuOGVtJyB9fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvcHlUb0NsaXBib2FyZChTdHJpbmcocHNidFRleHQpKX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY29weVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICBDb3B5IFBTQlRcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLCBmb250U2l6ZTogJzAuODVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAge0pTT04uc3RyaW5naWZ5KHBzYnRSZXN1bHQsIG51bGwsIDIpfVxuICAgICAgICAgICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9TZWdtZW50PlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZlZGVyYXRpb25XYWxsZXRNdWx0aXNpZ1BhbmVsO1xuIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIlN5bWJvbCIsIm4iLCJpdGVyYXRvciIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3R5cGVvZiIsImNvbnN0cnVjdG9yIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJuZXh0IiwicHVzaCIsImlzQXJyYXkiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJDaGVja2JveCIsIkZvcm0iLCJIZWFkZXIiLCJJY29uIiwiSW5wdXQiLCJNZXNzYWdlIiwiU2VnbWVudCIsIl9yZXF1aXJlMyIsImh1Ykpzb25ScGMiLCJfcmVxdWlyZTQiLCJmZXRjaERpc3RyaWJ1dGVkSHViUG9saWN5IiwiZmVkZXJhdGlvblN1bW1hcnlGcm9tTWFuaWZlc3QiLCJfcmVxdWlyZTUiLCJsb2FkRmVkZXJhdGlvblNwZW5kaW5nUHJlZnMiLCJtZXJnZVBheW1lbnRNZW1vV2l0aEZlZGVyYXRpb24iLCJzdWJzY3JpYmVGZWRlcmF0aW9uU3BlbmRpbmdQcmVmcyIsIl9yZXF1aXJlNiIsInJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIiLCJfcmVxdWlyZTciLCJjb3B5VG9DbGlwYm9hcmQiLCJGZWRlcmF0aW9uU3BlbmRpbmdDcml0ZXJpYURyYWZ0IiwiRmVkZXJhdGlvbldhbGxldE11bHRpc2lnUGFuZWwiLCJwcm9wcyIsImFkbWluVG9rZW4iLCJyZWNvcmRGZWQiLCJyZWNvcmRGZWRlcmF0aW9uQ29udGV4dCIsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRGZWRlcmF0aW9uQ29udGV4dENoYW5nZSIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsInBvbGljeSIsInNldFBvbGljeSIsIl9SZWFjdCR1c2VTdGF0ZTMiLCJfUmVhY3QkdXNlU3RhdGU0IiwibWFuaWZlc3QiLCJzZXRNYW5pZmVzdCIsIl9SZWFjdCR1c2VTdGF0ZTUiLCJfUmVhY3QkdXNlU3RhdGU2IiwidmF1bHREZXRhaWwiLCJzZXRWYXVsdERldGFpbCIsIl9SZWFjdCR1c2VTdGF0ZTciLCJfUmVhY3QkdXNlU3RhdGU4IiwibG9hZEVyciIsInNldExvYWRFcnIiLCJfUmVhY3QkdXNlU3RhdGU5IiwiX1JlYWN0JHVzZVN0YXRlMCIsInZhdWx0Rmxvd09wZW4iLCJzZXRWYXVsdEZsb3dPcGVuIiwiX1JlYWN0JHVzZVN0YXRlMSIsIl9SZWFjdCR1c2VTdGF0ZTEwIiwiZnVuZGVkVHhIZXgiLCJzZXRGdW5kZWRUeEhleCIsIl9SZWFjdCR1c2VTdGF0ZTExIiwiX1JlYWN0JHVzZVN0YXRlMTIiLCJkZXN0QWRkcmVzcyIsInNldERlc3RBZGRyZXNzIiwiX1JlYWN0JHVzZVN0YXRlMTMiLCJfUmVhY3QkdXNlU3RhdGUxNCIsImZlZVNhdHMiLCJzZXRGZWVTYXRzIiwiX1JlYWN0JHVzZVN0YXRlMTUiLCJfUmVhY3QkdXNlU3RhdGUxNiIsImxlYWZJZCIsInNldExlYWZJZCIsIl9SZWFjdCR1c2VTdGF0ZTE3IiwiX1JlYWN0JHVzZVN0YXRlMTgiLCJwc2J0QnVzeSIsInNldFBzYnRCdXN5IiwiX1JlYWN0JHVzZVN0YXRlMTkiLCJfUmVhY3QkdXNlU3RhdGUyMCIsInBzYnRSZXN1bHQiLCJzZXRQc2J0UmVzdWx0IiwiX1JlYWN0JHVzZVN0YXRlMjEiLCJfUmVhY3QkdXNlU3RhdGUyMiIsInByZWZzIiwic2V0UHJlZnMiLCJfUmVhY3QkdXNlU3RhdGUyMyIsIl9SZWFjdCR1c2VTdGF0ZTI0IiwiY29sbGFiSHViU3VtbWFyeSIsInNldENvbGxhYkh1YlN1bW1hcnkiLCJyZWZyZXNoIiwidXNlQ2FsbGJhY2siLCJfY2FsbGVlIiwidG9rIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsInBvbCIsImRpc3QiLCJ2YXVsdEpzb24iLCJsZyIsImdyb3VwcyIsIl90IiwiX3QyIiwiX2NvbnRleHQiLCJhbGwiLCJFcnJvciIsIm1lc3NhZ2UiLCJTdHJpbmciLCJmZXRjaCIsImhlYWRlcnMiLCJBY2NlcHQiLCJvayIsImpzb24iLCJlcnIiLCJ1c2VFZmZlY3QiLCJzcGVuZGluZ1ByZWZzVGljayIsInZhbGlkYXRvcnMiLCJmaWx0ZXIiLCJCb29sZWFuIiwidGhyIiwidGhyZXNob2xkIiwiTWF0aCIsIm1heCIsIk51bWJlciIsIm1PZk4iLCJjb25jYXQiLCJtaW4iLCJmZWRGcm9tTWFuaWZlc3QiLCJ2YXVsdCIsInN0YXR1cyIsImFkZHJlc3MiLCJmZWRlcmF0aW9uVmF1bHQiLCJ2YXVsdEFkZHIiLCJ2YXVsdExlYXZlcyIsImxlYXZlcyIsImNyaXRlcmlhUHJldmlldyIsInByZXBhcmVQc2J0IiwiX3JlZjIiLCJfY2FsbGVlMiIsImhleCIsInRvIiwicGFyYW1zIiwiZnMiLCJsaWQiLCJfdDMiLCJfY29udGV4dDIiLCJlcnJvciIsInRyaW0iLCJkZXN0aW5hdGlvbkFkZHJlc3MiLCJ2YXVsdEFkZHJlc3MiLCJyb3VuZCIsIk5hTiIsImlzRmluaXRlIiwicHNidFRleHQiLCJwc2J0QmFzZTY0IiwicHNidEhleCIsInBzYnQiLCJjcmVhdGVFbGVtZW50IiwiaWQiLCJzdHlsZSIsIm1hcmdpblRvcCIsImFzIiwiY29sb3IiLCJsaW5lSGVpZ2h0IiwibWFyZ2luQm90dG9tIiwid2FybmluZyIsInNpemUiLCJwb3NpdGl2ZSIsIm1hcmdpbiIsInNvdXJjZSIsImFjdGl2ZSIsImluZm8iLCJkaXNwbGF5IiwiZmxleFdyYXAiLCJhbGlnbkl0ZW1zIiwiZ2FwIiwid29yZEJyZWFrIiwidHlwZSIsImljb24iLCJiYXNpYyIsInRpdGxlIiwib25DbGljayIsImhyZWYiLCJ0YXJnZXQiLCJyZWwiLCJmb250U2l6ZSIsInBhZGRpbmdMZWZ0IiwibWFwIiwia2V5IiwidGFwc2NyaXB0SGV4Iiwia2luZCIsImtleXMiLCJjb21taXRtZW50SGV4Iiwid2l0bmVzc1NoYXBlIiwiY29tcGFjdCIsImNoZWNrZWQiLCJvbkNoYW5nZSIsIl8iLCJsYWJlbCIsIkZpZWxkIiwicGxhY2Vob2xkZXIiLCJsaXN0IiwicHJpbWFyeSIsImxvYWRpbmciLCJkaXNhYmxlZCIsIm5lZ2F0aXZlIiwiRnJhZ21lbnQiLCJUZXh0QXJlYSIsInJlYWRPbmx5Iiwicm93cyIsImZvbnRGYW1pbHkiLCJsYWJlbFBvc2l0aW9uIiwid2hpdGVTcGFjZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/FederationWalletMultisigPanel.js\n\n}')},"./components/FederationsHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Container = _require2.Container,\n Form = _require2.Form,\n Grid = _require2.Grid,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Label = _require2.Label,\n List = _require2.List,\n Message = _require2.Message,\n Segment = _require2.Segment,\n Step = _require2.Step;\nvar _require3 = __webpack_require__(/*! ../functions/hubJsonRpc */ "./functions/hubJsonRpc.js"),\n hubJsonRpc = _require3.hubJsonRpc;\nvar _require4 = __webpack_require__(/*! ../functions/distributedManifestClient */ "./functions/distributedManifestClient.js"),\n fetchDistributedHubPolicy = _require4.fetchDistributedHubPolicy;\nvar DistributedFederationPanel = __webpack_require__(/*! ./DistributedFederationPanel */ "./components/DistributedFederationPanel.js");\nvar FederationSpendingCriteriaDraft = __webpack_require__(/*! ./FederationSpendingCriteriaDraft */ "./components/FederationSpendingCriteriaDraft.js");\nvar FederationCoSignerSessionPanel = __webpack_require__(/*! ./FederationCoSignerSessionPanel */ "./components/FederationCoSignerSessionPanel.js");\nvar KNOWN_FEDERATIONS = [__webpack_require__(/*! ../contracts/beaconFederation */ "./contracts/beaconFederation.js"), __webpack_require__(/*! ../contracts/liquid */ "./contracts/liquid.js")];\nvar PUBKEY_RE = /^0[23][0-9a-fA-F]{64}$/;\nfunction normalizePubkeyRows(rows) {\n return rows.map(function (s) {\n return String(s || \'\').trim();\n }).filter(Boolean);\n}\n\n/**\n * @param {{ adminToken?: string, settingsLayout?: boolean }} props\n */\nfunction FederationsHome(props) {\n var adminToken = props && props.adminToken ? String(props.adminToken).trim() : \'\';\n var settingsLayout = !!(props && props.settingsLayout);\n var _React$useState = React.useState([\'\']),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n validatorRows = _React$useState2[0],\n setValidatorRows = _React$useState2[1];\n var _React$useState3 = React.useState(\'1\'),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n threshold = _React$useState4[0],\n setThreshold = _React$useState4[1];\n var _React$useState5 = React.useState(\'\'),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n source = _React$useState6[0],\n setSource = _React$useState6[1];\n var _React$useState7 = React.useState(false),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n busy = _React$useState8[0],\n setBusy = _React$useState8[1];\n var _React$useState9 = React.useState(null),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n loadError = _React$useState0[0],\n setLoadError = _React$useState0[1];\n var _React$useState1 = React.useState(null),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n saveError = _React$useState10[0],\n setSaveError = _React$useState10[1];\n var _React$useState11 = React.useState(null),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n saveOk = _React$useState12[0],\n setSaveOk = _React$useState12[1];\n var _React$useState13 = React.useState(null),\n _React$useState14 = _slicedToArray(_React$useState13, 2),\n federationFs = _React$useState14[0],\n setFederationFs = _React$useState14[1];\n var _React$useState15 = React.useState(false),\n _React$useState16 = _slicedToArray(_React$useState15, 2),\n hubKeyBusy = _React$useState16[0],\n setHubKeyBusy = _React$useState16[1];\n var _React$useState17 = React.useState(null),\n _React$useState18 = _slicedToArray(_React$useState17, 2),\n hubKeyMsg = _React$useState18[0],\n setHubKeyMsg = _React$useState18[1];\n var _React$useState19 = React.useState(\'\'),\n _React$useState20 = _slicedToArray(_React$useState19, 2),\n collabGroupId = _React$useState20[0],\n setCollabGroupId = _React$useState20[1];\n var _React$useState21 = React.useState(\'Federation validators\'),\n _React$useState22 = _slicedToArray(_React$useState21, 2),\n collabGroupName = _React$useState22[0],\n setCollabGroupName = _React$useState22[1];\n var _React$useState23 = React.useState(false),\n _React$useState24 = _slicedToArray(_React$useState23, 2),\n collabBusy = _React$useState24[0],\n setCollabBusy = _React$useState24[1];\n var _React$useState25 = React.useState(\'\'),\n _React$useState26 = _slicedToArray(_React$useState25, 2),\n collabMsg = _React$useState26[0],\n setCollabMsg = _React$useState26[1];\n var _React$useState27 = React.useState(\'\'),\n _React$useState28 = _slicedToArray(_React$useState27, 2),\n collabErr = _React$useState28[0],\n setCollabErr = _React$useState28[1];\n var refresh = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var r, src, v, thr, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n setLoadError(null);\n _context.p = 1;\n _context.n = 2;\n return hubJsonRpc(\'GetDistributedFederationPolicy\', []);\n case 2:\n r = _context.v;\n src = r && r.source ? String(r.source) : \'\';\n setSource(src);\n v = r && Array.isArray(r.validators) ? r.validators.map(function (x) {\n return String(x).trim();\n }).filter(Boolean) : [];\n setValidatorRows(v.length ? _toConsumableArray(v) : [\'\']);\n thr = r && r.threshold != null ? String(r.threshold) : \'1\';\n setThreshold(thr);\n setFederationFs(r && r.filesystem && _typeof(r.filesystem) === \'object\' ? r.filesystem : null);\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n setFederationFs(null);\n setLoadError(_t && _t.message ? _t.message : String(_t));\n case 4:\n return _context.a(2);\n }\n }, _callee, null, [[1, 3]]);\n })), []);\n React.useEffect(function () {\n void refresh();\n }, [refresh]);\n var normalizedKeys = normalizePubkeyRows(validatorRows);\n var n = normalizedKeys.length;\n var thrNum = Number(threshold);\n if (!Number.isFinite(thrNum) || thrNum < 1) thrNum = 1;\n if (n && thrNum > n) thrNum = n;\n var invalidKeys = normalizedKeys.filter(function (k) {\n return !PUBKEY_RE.test(k);\n });\n var mOfNLabel = n ? "".concat(thrNum, "-of-").concat(n) : \'—\';\n var addRow = function addRow() {\n return setValidatorRows(function (rows) {\n return [].concat(_toConsumableArray(rows), [\'\']);\n });\n };\n var removeRow = function removeRow(index) {\n setValidatorRows(function (rows) {\n var next = rows.filter(function (_, i) {\n return i !== index;\n });\n return next.length ? next : [\'\'];\n });\n };\n var setRow = function setRow(index, value) {\n setValidatorRows(function (rows) {\n var next = _toConsumableArray(rows);\n next[index] = value;\n return next;\n });\n };\n var includeHubValidator = /*#__PURE__*/function () {\n var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var _yield$fetchDistribut, manifest, pk, lower, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n setHubKeyMsg(null);\n setHubKeyBusy(true);\n _context2.p = 1;\n _context2.n = 2;\n return fetchDistributedHubPolicy();\n case 2:\n _yield$fetchDistribut = _context2.v;\n manifest = _yield$fetchDistribut.manifest;\n pk = manifest && manifest.hubFabricPeerId ? String(manifest.hubFabricPeerId).trim() : \'\';\n if (pk) {\n _context2.n = 3;\n break;\n }\n setHubKeyMsg(\'Manifest did not include hubFabricPeerId.\');\n return _context2.a(2);\n case 3:\n if (PUBKEY_RE.test(pk)) {\n _context2.n = 4;\n break;\n }\n setHubKeyMsg(\'Hub id from manifest is not a compressed secp256k1 hex pubkey.\');\n return _context2.a(2);\n case 4:\n lower = pk.toLowerCase();\n setValidatorRows(function (rows) {\n var cur = normalizePubkeyRows(rows);\n if (cur.some(function (k) {\n return k.toLowerCase() === lower;\n })) return rows;\n return [].concat(_toConsumableArray(cur), [pk]);\n });\n setHubKeyMsg(\'Added this hub’s validator pubkey from the distributed manifest.\');\n _context2.n = 6;\n break;\n case 5:\n _context2.p = 5;\n _t2 = _context2.v;\n setHubKeyMsg(_t2 && _t2.message ? _t2.message : String(_t2));\n case 6:\n _context2.p = 6;\n setHubKeyBusy(false);\n return _context2.f(6);\n case 7:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 5, 6, 7]]);\n }));\n return function includeHubValidator() {\n return _ref2.apply(this, arguments);\n };\n }();\n var saveCollaborationGroupFromFederation = /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var lines, thr, payload, gid, nm, r, id, updated, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n setCollabErr(\'\');\n setCollabMsg(\'\');\n if (adminToken) {\n _context3.n = 1;\n break;\n }\n setCollabErr(\'Admin token required (complete hub setup and keep the token in this browser).\');\n return _context3.a(2);\n case 1:\n lines = normalizePubkeyRows(validatorRows);\n if (!(lines.length === 0)) {\n _context3.n = 2;\n break;\n }\n setCollabErr(\'Add at least one validator public key.\');\n return _context3.a(2);\n case 2:\n if (!lines.some(function (k) {\n return !PUBKEY_RE.test(k);\n })) {\n _context3.n = 3;\n break;\n }\n setCollabErr(\'Each validator must be a 33-byte compressed secp256k1 public key (66 hex chars, prefix 02 or 03).\');\n return _context3.a(2);\n case 3:\n thr = Number(threshold);\n if (!Number.isFinite(thr) || thr < 1) thr = 1;\n if (thr > lines.length) thr = lines.length;\n setCollabBusy(true);\n _context3.p = 4;\n payload = {\n validators: lines,\n threshold: thr,\n adminToken: adminToken\n };\n gid = String(collabGroupId || \'\').trim();\n if (gid) payload.groupId = gid;\n nm = String(collabGroupName || \'\').trim();\n if (nm) payload.name = nm;\n _context3.n = 5;\n return hubJsonRpc(\'UpsertCollaborationGroupFromFederationValidators\', [payload]);\n case 5:\n r = _context3.v;\n if (!(r && r.status === \'error\')) {\n _context3.n = 6;\n break;\n }\n setCollabErr(r.message || \'Collaboration group sync failed.\');\n return _context3.a(2);\n case 6:\n id = r && r.groupId ? String(r.groupId) : \'\';\n updated = !!(r && r.updated);\n setCollabMsg(updated ? "Updated collaboration group ".concat(id, " to match this federation signer set.") : "Created collaboration group ".concat(id, " from this federation signer set."));\n _context3.n = 8;\n break;\n case 7:\n _context3.p = 7;\n _t3 = _context3.v;\n setCollabErr(_t3 && _t3.message ? _t3.message : String(_t3));\n case 8:\n _context3.p = 8;\n setCollabBusy(false);\n return _context3.f(8);\n case 9:\n return _context3.a(2);\n }\n }, _callee3, null, [[4, 7, 8, 9]]);\n }));\n return function saveCollaborationGroupFromFederation() {\n return _ref3.apply(this, arguments);\n };\n }();\n var save = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var lines, thr, r, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n setSaveError(null);\n setSaveOk(null);\n if (adminToken) {\n _context4.n = 1;\n break;\n }\n setSaveError(\'Admin token required (complete hub setup and keep the token in this browser).\');\n return _context4.a(2);\n case 1:\n lines = normalizePubkeyRows(validatorRows);\n if (!(lines.length === 0)) {\n _context4.n = 2;\n break;\n }\n setSaveError(\'Add at least one validator public key.\');\n return _context4.a(2);\n case 2:\n if (!lines.some(function (k) {\n return !PUBKEY_RE.test(k);\n })) {\n _context4.n = 3;\n break;\n }\n setSaveError(\'Each validator must be a 33-byte compressed secp256k1 public key (66 hex chars, prefix 02 or 03).\');\n return _context4.a(2);\n case 3:\n thr = Number(threshold);\n if (!Number.isFinite(thr) || thr < 1) thr = 1;\n if (thr > lines.length) thr = lines.length;\n setBusy(true);\n _context4.p = 4;\n _context4.n = 5;\n return hubJsonRpc(\'SetDistributedFederationPolicy\', [{\n validators: lines,\n threshold: thr,\n adminToken: adminToken\n }]);\n case 5:\n r = _context4.v;\n if (!(r && r.status === \'error\')) {\n _context4.n = 6;\n break;\n }\n setSaveError(r.message || \'Save failed\');\n return _context4.a(2);\n case 6:\n setSaveOk(\'Federation policy saved. Sidechain patches and beacon epochs use this M-of-N set when env does not override.\');\n void refresh();\n _context4.n = 8;\n break;\n case 7:\n _context4.p = 7;\n _t4 = _context4.v;\n setSaveError(_t4 && _t4.message ? _t4.message : String(_t4));\n case 8:\n _context4.p = 8;\n setBusy(false);\n return _context4.f(8);\n case 9:\n return _context4.a(2);\n }\n }, _callee4, null, [[4, 7, 8, 9]]);\n }));\n return function save() {\n return _ref4.apply(this, arguments);\n };\n }();\n var backTo = settingsLayout ? \'/settings\' : \'/\';\n var backLabel = settingsLayout ? \'Settings\' : \'Home\';\n var headingId = settingsLayout ? \'settings-federation-heading\' : \'federations-page-heading\';\n var title = settingsLayout ? \'Distributed federation\' : \'Federations\';\n var maxWidth = settingsLayout ? 720 : 980;\n return /*#__PURE__*/React.createElement(Container, {\n style: {\n maxWidth: maxWidth,\n margin: \'1em auto 2em\',\n padding: \'0 0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: backTo,\n basic: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n },\n "aria-label": "Back to ".concat(backLabel)\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), backLabel), /*#__PURE__*/React.createElement(Segment, {\n raised: true,\n style: {\n marginBottom: \'1.25em\',\n boxShadow: \'0 2px 16px rgba(34, 36, 38, 0.08)\',\n border: \'1px solid rgba(34, 36, 38, 0.08)\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: settingsLayout ? \'h2\' : \'h1\',\n id: headingId,\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users",\n "aria-hidden": "true",\n color: "blue"\n }), /*#__PURE__*/React.createElement(Header.Content, null, title, !settingsLayout ? /*#__PURE__*/React.createElement(Header.Subheader, {\n style: {\n marginTop: \'0.35em\',\n fontWeight: 400,\n color: \'#666\'\n }\n }, "Create a small ", /*#__PURE__*/React.createElement("strong", null, "shared control group"), " for this hub: you pick who can co-sign, and how many signatures are needed (M-of-N). That powers safer sidechain updates and beacon checkpoints, and gives you a ", /*#__PURE__*/React.createElement("strong", null, "shared Bitcoin vault address"), " for treasury funds.") : null)), !settingsLayout ? /*#__PURE__*/React.createElement(Step.Group, {\n fluid: true,\n size: "small",\n style: {\n marginTop: \'1rem\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Step, {\n active: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "add user"\n }), /*#__PURE__*/React.createElement(Step.Content, null, /*#__PURE__*/React.createElement(Step.Title, null, "Who signs"), /*#__PURE__*/React.createElement(Step.Description, null, "Paste each co-owner\\u2019s public key (one row per person)"))), /*#__PURE__*/React.createElement(Step, {\n active: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "balance scale"\n }), /*#__PURE__*/React.createElement(Step.Content, null, /*#__PURE__*/React.createElement(Step.Title, null, "How many agree"), /*#__PURE__*/React.createElement(Step.Description, null, "Pick M-of-N (e.g. 2-of-3 needs two signatures)"))), /*#__PURE__*/React.createElement(Step, {\n active: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "save"\n }), /*#__PURE__*/React.createElement(Step.Content, null, /*#__PURE__*/React.createElement(Step.Title, null, "Save on hub"), /*#__PURE__*/React.createElement(Step.Description, null, "Operator token applies this group to this hub")))) : null, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: 0,\n maxWidth: \'48rem\',\n lineHeight: 1.5\n }\n }, "Each signer shares a ", /*#__PURE__*/React.createElement("strong", null, "33-byte hex public key"), " (starts with ", /*#__PURE__*/React.createElement("code", null, "02"), " or ", /*#__PURE__*/React.createElement("code", null, "03"), ") \\u2014 not a secret. Together they form an M-of-N ", /*#__PURE__*/React.createElement("strong", null, "multisig policy"), " for this hub\\u2019s distributed features and on-chain vault. When ", /*#__PURE__*/React.createElement("code", null, "FABRIC_DISTRIBUTED_FEDERATION_VALIDATORS"), " is set on the server, it overrides what you save here.", source ? /*#__PURE__*/React.createElement("span", null, " Current source: ", /*#__PURE__*/React.createElement("strong", null, source), ".") : null), settingsLayout ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.75em 0 0\',\n fontSize: \'0.95em\'\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: "/federations"\n }, "Open full Federations workspace"), \' \', "(wider layout, same controls).") : null, /*#__PURE__*/React.createElement(FederationSpendingCriteriaDraft, null), /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Hub alerts vs activity"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n lineHeight: 1.45\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: "/notifications"\n }, "Notifications"), " lists wallet and Payjoin toasts (same as the bell). The full hub message log, chat, and Bitcoin blocks are on the", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/activities"\n }, "activity log"), ". Federation-related group chat may appear on this page when you hold a member key; hub-wide chat still mirrors the activity log.")), props.bridgeRef ? /*#__PURE__*/React.createElement(FederationCoSignerSessionPanel, {\n bridgeRef: props.bridgeRef,\n validatorRows: validatorRows,\n setValidatorRows: setValidatorRows,\n normalizePubkeyRows: normalizePubkeyRows,\n threshold: threshold,\n PUBKEY_RE: PUBKEY_RE\n }) : null), /*#__PURE__*/React.createElement(DistributedFederationPanel, {\n marginBottom: "1.25em"\n }), /*#__PURE__*/React.createElement(Grid, {\n stackable: true\n }, /*#__PURE__*/React.createElement(Grid.Column, {\n computer: 10\n }, /*#__PURE__*/React.createElement(Segment, {\n style: {\n borderRadius: 10\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield alternate",\n color: "teal"\n }), "Multi-sig contract (this hub)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n lineHeight: 1.5,\n marginBottom: \'1rem\'\n }\n }, "After you save, the hub uses this signer set for ", /*#__PURE__*/React.createElement("strong", null, "sidechain updates"), ", ", /*#__PURE__*/React.createElement("strong", null, "beacon checkpoints"), ", and the", \' \', /*#__PURE__*/React.createElement("strong", null, "Taproot federation vault"), " address. Co-signers keep private keys off this UI; they only share pubkeys here. To pay from the vault, use ", /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions?scope=wallet#fabric-federation-wallet-panel"\n }, "Wallet \\u2192 Federation multisig"), \' \', "to build a PSBT. For day-to-day hub wallet sends, you can still tag payments with your optional spending criteria (checkbox on that page). Invite peers from ", /*#__PURE__*/React.createElement(Link, {\n to: "/peers"\n }, "Peers"), " when you are ready to coordinate."), loadError ? /*#__PURE__*/React.createElement(Message, {\n negative: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Could not load policy"), /*#__PURE__*/React.createElement("p", null, loadError)) : null, saveError ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n onDismiss: function onDismiss() {\n return setSaveError(null);\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Save failed"), /*#__PURE__*/React.createElement("p", null, saveError)) : null, saveOk ? /*#__PURE__*/React.createElement(Message, {\n success: true,\n onDismiss: function onDismiss() {\n return setSaveOk(null);\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Saved"), /*#__PURE__*/React.createElement("p", null, saveOk)) : null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'center\',\n gap: \'0.75em\',\n marginBottom: \'1rem\'\n }\n }, /*#__PURE__*/React.createElement(Label, {\n color: "blue",\n size: "large",\n style: {\n fontFamily: \'monospace\'\n }\n }, mOfNLabel), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n loading: hubKeyBusy,\n disabled: hubKeyBusy || source === \'env\',\n onClick: function onClick() {\n return void includeHubValidator();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "plus"\n }), "Include this hub\\u2019s pubkey"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return void refresh();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Reload from hub")), hubKeyMsg ? /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n onDismiss: function onDismiss() {\n return setHubKeyMsg(null);\n },\n style: {\n marginTop: 0\n }\n }, hubKeyMsg) : null, /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Collaboration group (same signer set)"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0.65em\',\n lineHeight: 1.45\n }\n }, "Mirror these federation validators into a ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings/collaboration"\n }, "Collaboration"), " group so invitations, previews, and the federation vault stay aligned on one pubkey list and threshold."), collabErr ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n onDismiss: function onDismiss() {\n return setCollabErr(\'\');\n },\n style: {\n marginBottom: \'0.65em\'\n }\n }, collabErr) : null, collabMsg ? /*#__PURE__*/React.createElement(Message, {\n success: true,\n size: "small",\n onDismiss: function onDismiss() {\n return setCollabMsg(\'\');\n },\n style: {\n marginBottom: \'0.65em\'\n }\n }, collabMsg, \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/collaboration"\n }, "Open Collaboration"), ".") : null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fed-collab-group-id"\n }, "Existing group id (optional \\u2014 leave empty to create)"), /*#__PURE__*/React.createElement(Form.Input, {\n id: "fed-collab-group-id",\n placeholder: "grp_\\u2026",\n value: collabGroupId,\n onChange: function onChange(e, _ref5) {\n var value = _ref5.value;\n return setCollabGroupId(value != null ? String(value) : \'\');\n },\n style: {\n fontFamily: \'monospace\',\n fontSize: \'0.9em\'\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fed-collab-group-name"\n }, "New group name (when creating)"), /*#__PURE__*/React.createElement(Form.Input, {\n id: "fed-collab-group-name",\n placeholder: "Federation validators",\n value: collabGroupName,\n onChange: function onChange(e, _ref6) {\n var value = _ref6.value;\n return setCollabGroupName(value != null ? String(value) : \'\');\n }\n })), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n color: "teal",\n icon: true,\n labelPosition: "left",\n loading: collabBusy,\n disabled: collabBusy || !normalizedKeys.length || invalidKeys.length > 0,\n onClick: function onClick() {\n return void saveCollaborationGroupFromFederation();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users"\n }), "Save signer set to Collaboration group")), /*#__PURE__*/React.createElement(Form, {\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n void save();\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Signers"), validatorRows.map(function (row, index) {\n return /*#__PURE__*/React.createElement(Form.Field, {\n key: index\n }, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fed-pk-".concat(index)\n }, "Validator ", index + 1), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.35em\',\n alignItems: \'stretch\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Form.Input, {\n id: "fed-pk-".concat(index),\n fluid: true,\n placeholder: "02\\u2026 or 03\\u2026 (66 hex chars)",\n value: row,\n onChange: function onChange(e, _ref7) {\n var value = _ref7.value;\n return setRow(index, value != null ? String(value) : \'\');\n },\n style: {\n flex: \'1 1 16rem\',\n minWidth: \'12rem\',\n fontFamily: \'monospace\',\n fontSize: \'0.9em\'\n }\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n icon: "trash",\n basic: true,\n negative: true,\n disabled: validatorRows.length <= 1,\n onClick: function onClick() {\n return removeRow(index);\n },\n "aria-label": "Remove signer ".concat(index + 1)\n })));\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: addRow,\n disabled: source === \'env\'\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "add"\n }), "Add signer"), invalidKeys.length > 0 ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: \'1em\'\n }\n }, invalidKeys.length, " entr", invalidKeys.length === 1 ? \'y\' : \'ies\', " do not match compressed pubkey hex (02/03 + 64 hex).") : null, /*#__PURE__*/React.createElement(Form.Field, {\n style: {\n marginTop: \'1.25em\'\n }\n }, /*#__PURE__*/React.createElement("label", {\n htmlFor: "federation-threshold-input"\n }, "Signature threshold (M-of-N)"), /*#__PURE__*/React.createElement(Form.Input, {\n id: "federation-threshold-input",\n type: "number",\n min: 1,\n max: Math.max(1, n),\n value: threshold,\n onChange: function onChange(e, _ref8) {\n var value = _ref8.value;\n return setThreshold(value);\n },\n disabled: source === \'env\',\n style: {\n maxWidth: \'8rem\'\n }\n })), /*#__PURE__*/React.createElement(Button, {\n type: "submit",\n primary: true,\n size: "large",\n disabled: busy || source === \'env\',\n loading: busy,\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "save"\n }), "Save federation policy"))), /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: \'1.25em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n marginTop: 0\n }\n }, "Discovery & APIs"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.95em\',\n lineHeight: 1.45,\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: "/settings/admin/beacon-federation"\n }, "Beacon Federation"), \' — \', "L1 binding of ", /*#__PURE__*/React.createElement("code", null, "BEACON_EPOCH"), " and witness verification.", \' \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/manifest",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET manifest"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/epoch",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "GET epoch"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/federation-registry",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Federation registry")), federationFs ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\',\n fontSize: \'0.92em\',\n lineHeight: 1.45\n }\n }, "On-chain registry mirror (this node):", \' \', /*#__PURE__*/React.createElement("strong", null, Number(federationFs.registryEntryCount) || 0), \' \', "entr", Number(federationFs.registryEntryCount) === 1 ? \'y\' : \'ies\', federationFs.lastScannedHeight != null && Number.isFinite(Number(federationFs.lastScannedHeight)) ? /*#__PURE__*/React.createElement("span", null, \', \', "last L1 scan height ", /*#__PURE__*/React.createElement("strong", null, Number(federationFs.lastScannedHeight))) : \', last L1 scan height —\', federationFs.registryDocument ? /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\'\n }\n }, \' \', "(", /*#__PURE__*/React.createElement("code", null, String(federationFs.registryDocument)), ")") : null) : null)), /*#__PURE__*/React.createElement(Grid.Column, {\n computer: 6\n }, /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n position: \'sticky\',\n top: \'5.5rem\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: 0\n }\n }, "Reference federations"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n lineHeight: 1.45,\n marginBottom: \'0.75em\'\n }\n }, "Examples and public rosters (read-only). Your hub policy above is independent."), KNOWN_FEDERATIONS.map(function (fed) {\n var id = fed && fed.id ? String(fed.id) : \'unknown\';\n var name = fed && fed.name ? String(fed.name) : id;\n var urls = fed && fed.urls ? fed.urls : {};\n var desc = fed && typeof fed.description === \'string\' ? fed.description.trim() : \'\';\n return /*#__PURE__*/React.createElement(Segment, {\n key: id,\n size: "small",\n style: {\n marginBottom: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h5",\n style: {\n marginTop: 0\n }\n }, name, /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#888\',\n fontWeight: \'normal\',\n marginLeft: \'0.35em\',\n fontSize: \'0.9em\'\n }\n }, "(", fed && fed.networkId ? String(fed.networkId) : \'—\', ")")), desc ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\',\n fontSize: \'0.88em\',\n lineHeight: 1.4,\n marginBottom: \'0.5em\'\n }\n }, desc) : null, /*#__PURE__*/React.createElement(List, {\n relaxed: true,\n size: "small"\n }, urls.homepage ? /*#__PURE__*/React.createElement(List.Item, {\n icon: "linkify",\n content: /*#__PURE__*/React.createElement("a", {\n href: urls.homepage,\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Site")\n }) : null, urls.federation ? /*#__PURE__*/React.createElement(List.Item, {\n icon: "users",\n content: /*#__PURE__*/React.createElement("a", {\n href: urls.federation,\n target: "_blank",\n rel: "noopener noreferrer"\n }, "Roster")\n }) : null));\n })))));\n}\nmodule.exports = FederationsHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNaL08sS0FBQSxDQUFBK0osYUFBQSxDQUFDbkosSUFBSSxDQUFDb08sSUFBSTtNQUNSMUMsSUFBSSxFQUFDLFNBQVM7TUFDZDJDLE9BQU8sZUFBRWpQLEtBQUEsQ0FBQStKLGFBQUE7UUFBR2dFLElBQUksRUFBRVUsSUFBSSxDQUFDTSxRQUFTO1FBQUNmLE1BQU0sRUFBQyxRQUFRO1FBQUNDLEdBQUcsRUFBQztNQUFxQixHQUFDLE1BQU87SUFBRSxDQUNyRixDQUFDLEdBQ0EsSUFBSSxFQUNQUSxJQUFJLENBQUNTLFVBQVUsZ0JBQ2RsUCxLQUFBLENBQUErSixhQUFBLENBQUNuSixJQUFJLENBQUNvTyxJQUFJO01BQ1IxQyxJQUFJLEVBQUMsT0FBTztNQUNaMkMsT0FBTyxlQUFFalAsS0FBQSxDQUFBK0osYUFBQTtRQUFHZ0UsSUFBSSxFQUFFVSxJQUFJLENBQUNTLFVBQVc7UUFBQ2xCLE1BQU0sRUFBQyxRQUFRO1FBQUNDLEdBQUcsRUFBQztNQUFxQixHQUFDLFFBQVM7SUFBRSxDQUN6RixDQUFDLEdBQ0EsSUFDQSxDQUNDLENBQUM7RUFFZCxDQUFDLENBQ00sQ0FDRSxDQUNULENBQ0csQ0FBQztBQUVoQjtBQUVBa0IsTUFBTSxDQUFDQyxPQUFPLEdBQUduTixlQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0ZlZGVyYXRpb25zSG9tZS5qcz81MTk0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5jb25zdCB7XG4gIEJ1dHRvbixcbiAgQ29udGFpbmVyLFxuICBGb3JtLFxuICBHcmlkLFxuICBIZWFkZXIsXG4gIEljb24sXG4gIExhYmVsLFxuICBMaXN0LFxuICBNZXNzYWdlLFxuICBTZWdtZW50LFxuICBTdGVwXG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IHsgaHViSnNvblJwYyB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1Ykpzb25ScGMnKTtcbmNvbnN0IHsgZmV0Y2hEaXN0cmlidXRlZEh1YlBvbGljeSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2Rpc3RyaWJ1dGVkTWFuaWZlc3RDbGllbnQnKTtcbmNvbnN0IERpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsID0gcmVxdWlyZSgnLi9EaXN0cmlidXRlZEZlZGVyYXRpb25QYW5lbCcpO1xuY29uc3QgRmVkZXJhdGlvblNwZW5kaW5nQ3JpdGVyaWFEcmFmdCA9IHJlcXVpcmUoJy4vRmVkZXJhdGlvblNwZW5kaW5nQ3JpdGVyaWFEcmFmdCcpO1xuY29uc3QgRmVkZXJhdGlvbkNvU2lnbmVyU2Vzc2lvblBhbmVsID0gcmVxdWlyZSgnLi9GZWRlcmF0aW9uQ29TaWduZXJTZXNzaW9uUGFuZWwnKTtcblxuY29uc3QgS05PV05fRkVERVJBVElPTlMgPSBbXG4gIHJlcXVpcmUoJy4uL2NvbnRyYWN0cy9iZWFjb25GZWRlcmF0aW9uJyksXG4gIHJlcXVpcmUoJy4uL2NvbnRyYWN0cy9saXF1aWQnKVxuXTtcblxuY29uc3QgUFVCS0VZX1JFID0gL14wWzIzXVswLTlhLWZBLUZdezY0fSQvO1xuXG5mdW5jdGlvbiBub3JtYWxpemVQdWJrZXlSb3dzIChyb3dzKSB7XG4gIHJldHVybiByb3dzLm1hcCgocykgPT4gU3RyaW5nKHMgfHwgJycpLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7eyBhZG1pblRva2VuPzogc3RyaW5nLCBzZXR0aW5nc0xheW91dD86IGJvb2xlYW4gfX0gcHJvcHNcbiAqL1xuZnVuY3Rpb24gRmVkZXJhdGlvbnNIb21lIChwcm9wcykge1xuICBjb25zdCBhZG1pblRva2VuID0gcHJvcHMgJiYgcHJvcHMuYWRtaW5Ub2tlbiA/IFN0cmluZyhwcm9wcy5hZG1pblRva2VuKS50cmltKCkgOiAnJztcbiAgY29uc3Qgc2V0dGluZ3NMYXlvdXQgPSAhIShwcm9wcyAmJiBwcm9wcy5zZXR0aW5nc0xheW91dCk7XG5cbiAgY29uc3QgW3ZhbGlkYXRvclJvd3MsIHNldFZhbGlkYXRvclJvd3NdID0gUmVhY3QudXNlU3RhdGUoWycnXSk7XG4gIGNvbnN0IFt0aHJlc2hvbGQsIHNldFRocmVzaG9sZF0gPSBSZWFjdC51c2VTdGF0ZSgnMScpO1xuICBjb25zdCBbc291cmNlLCBzZXRTb3VyY2VdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbYnVzeSwgc2V0QnVzeV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtsb2FkRXJyb3IsIHNldExvYWRFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3NhdmVFcnJvciwgc2V0U2F2ZUVycm9yXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbc2F2ZU9rLCBzZXRTYXZlT2tdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtmZWRlcmF0aW9uRnMsIHNldEZlZGVyYXRpb25Gc10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2h1YktleUJ1c3ksIHNldEh1YktleUJ1c3ldID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaHViS2V5TXNnLCBzZXRIdWJLZXlNc2ddID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtjb2xsYWJHcm91cElkLCBzZXRDb2xsYWJHcm91cElkXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2NvbGxhYkdyb3VwTmFtZSwgc2V0Q29sbGFiR3JvdXBOYW1lXSA9IFJlYWN0LnVzZVN0YXRlKCdGZWRlcmF0aW9uIHZhbGlkYXRvcnMnKTtcbiAgY29uc3QgW2NvbGxhYkJ1c3ksIHNldENvbGxhYkJ1c3ldID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbY29sbGFiTXNnLCBzZXRDb2xsYWJNc2ddID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbY29sbGFiRXJyLCBzZXRDb2xsYWJFcnJdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuXG4gIGNvbnN0IHJlZnJlc2ggPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0TG9hZEVycm9yKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgaHViSnNvblJwYygnR2V0RGlzdHJpYnV0ZWRGZWRlcmF0aW9uUG9saWN5JywgW10pO1xuICAgICAgY29uc3Qgc3JjID0gciAmJiByLnNvdXJjZSA/IFN0cmluZyhyLnNvdXJjZSkgOiAnJztcbiAgICAgIHNldFNvdXJjZShzcmMpO1xuICAgICAgY29uc3QgdiA9IChyICYmIEFycmF5LmlzQXJyYXkoci52YWxpZGF0b3JzKSkgPyByLnZhbGlkYXRvcnMubWFwKCh4KSA9PiBTdHJpbmcoeCkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgIHNldFZhbGlkYXRvclJvd3Modi5sZW5ndGggPyBbLi4udl0gOiBbJyddKTtcbiAgICAgIGNvbnN0IHRociA9IHIgJiYgci50aHJlc2hvbGQgIT0gbnVsbCA/IFN0cmluZyhyLnRocmVzaG9sZCkgOiAnMSc7XG4gICAgICBzZXRUaHJlc2hvbGQodGhyKTtcbiAgICAgIHNldEZlZGVyYXRpb25GcyhyICYmIHIuZmlsZXN5c3RlbSAmJiB0eXBlb2Ygci5maWxlc3lzdGVtID09PSAnb2JqZWN0JyA/IHIuZmlsZXN5c3RlbSA6IG51bGwpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldEZlZGVyYXRpb25GcyhudWxsKTtcbiAgICAgIHNldExvYWRFcnJvcihlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICB2b2lkIHJlZnJlc2goKTtcbiAgfSwgW3JlZnJlc2hdKTtcblxuICBjb25zdCBub3JtYWxpemVkS2V5cyA9IG5vcm1hbGl6ZVB1YmtleVJvd3ModmFsaWRhdG9yUm93cyk7XG4gIGNvbnN0IG4gPSBub3JtYWxpemVkS2V5cy5sZW5ndGg7XG4gIGxldCB0aHJOdW0gPSBOdW1iZXIodGhyZXNob2xkKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGhyTnVtKSB8fCB0aHJOdW0gPCAxKSB0aHJOdW0gPSAxO1xuICBpZiAobiAmJiB0aHJOdW0gPiBuKSB0aHJOdW0gPSBuO1xuICBjb25zdCBpbnZhbGlkS2V5cyA9IG5vcm1hbGl6ZWRLZXlzLmZpbHRlcigoaykgPT4gIVBVQktFWV9SRS50ZXN0KGspKTtcbiAgY29uc3QgbU9mTkxhYmVsID0gbiA/IGAke3Rock51bX0tb2YtJHtufWAgOiAn4oCUJztcblxuICBjb25zdCBhZGRSb3cgPSAoKSA9PiBzZXRWYWxpZGF0b3JSb3dzKChyb3dzKSA9PiBbLi4ucm93cywgJyddKTtcbiAgY29uc3QgcmVtb3ZlUm93ID0gKGluZGV4KSA9PiB7XG4gICAgc2V0VmFsaWRhdG9yUm93cygocm93cykgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHJvd3MuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgICByZXR1cm4gbmV4dC5sZW5ndGggPyBuZXh0IDogWycnXTtcbiAgICB9KTtcbiAgfTtcbiAgY29uc3Qgc2V0Um93ID0gKGluZGV4LCB2YWx1ZSkgPT4ge1xuICAgIHNldFZhbGlkYXRvclJvd3MoKHJvd3MpID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBbLi4ucm93c107XG4gICAgICBuZXh0W2luZGV4XSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgaW5jbHVkZUh1YlZhbGlkYXRvciA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRIdWJLZXlNc2cobnVsbCk7XG4gICAgc2V0SHViS2V5QnVzeSh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYXdhaXQgZmV0Y2hEaXN0cmlidXRlZEh1YlBvbGljeSgpO1xuICAgICAgY29uc3QgcGsgPSBtYW5pZmVzdCAmJiBtYW5pZmVzdC5odWJGYWJyaWNQZWVySWQgPyBTdHJpbmcobWFuaWZlc3QuaHViRmFicmljUGVlcklkKS50cmltKCkgOiAnJztcbiAgICAgIGlmICghcGspIHtcbiAgICAgICAgc2V0SHViS2V5TXNnKCdNYW5pZmVzdCBkaWQgbm90IGluY2x1ZGUgaHViRmFicmljUGVlcklkLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIVBVQktFWV9SRS50ZXN0KHBrKSkge1xuICAgICAgICBzZXRIdWJLZXlNc2coJ0h1YiBpZCBmcm9tIG1hbmlmZXN0IGlzIG5vdCBhIGNvbXByZXNzZWQgc2VjcDI1NmsxIGhleCBwdWJrZXkuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxvd2VyID0gcGsudG9Mb3dlckNhc2UoKTtcbiAgICAgIHNldFZhbGlkYXRvclJvd3MoKHJvd3MpID0+IHtcbiAgICAgICAgY29uc3QgY3VyID0gbm9ybWFsaXplUHVia2V5Um93cyhyb3dzKTtcbiAgICAgICAgaWYgKGN1ci5zb21lKChrKSA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IGxvd2VyKSkgcmV0dXJuIHJvd3M7XG4gICAgICAgIHJldHVybiBbLi4uY3VyLCBwa107XG4gICAgICB9KTtcbiAgICAgIHNldEh1YktleU1zZygnQWRkZWQgdGhpcyBodWLigJlzIHZhbGlkYXRvciBwdWJrZXkgZnJvbSB0aGUgZGlzdHJpYnV0ZWQgbWFuaWZlc3QuJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0SHViS2V5TXNnKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SHViS2V5QnVzeShmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNhdmVDb2xsYWJvcmF0aW9uR3JvdXBGcm9tRmVkZXJhdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRDb2xsYWJFcnIoJycpO1xuICAgIHNldENvbGxhYk1zZygnJyk7XG4gICAgaWYgKCFhZG1pblRva2VuKSB7XG4gICAgICBzZXRDb2xsYWJFcnIoJ0FkbWluIHRva2VuIHJlcXVpcmVkIChjb21wbGV0ZSBodWIgc2V0dXAgYW5kIGtlZXAgdGhlIHRva2VuIGluIHRoaXMgYnJvd3NlcikuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpbmVzID0gbm9ybWFsaXplUHVia2V5Um93cyh2YWxpZGF0b3JSb3dzKTtcbiAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBzZXRDb2xsYWJFcnIoJ0FkZCBhdCBsZWFzdCBvbmUgdmFsaWRhdG9yIHB1YmxpYyBrZXkuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChsaW5lcy5zb21lKChrKSA9PiAhUFVCS0VZX1JFLnRlc3QoaykpKSB7XG4gICAgICBzZXRDb2xsYWJFcnIoJ0VhY2ggdmFsaWRhdG9yIG11c3QgYmUgYSAzMy1ieXRlIGNvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmxpYyBrZXkgKDY2IGhleCBjaGFycywgcHJlZml4IDAyIG9yIDAzKS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRociA9IE51bWJlcih0aHJlc2hvbGQpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHRocikgfHwgdGhyIDwgMSkgdGhyID0gMTtcbiAgICBpZiAodGhyID4gbGluZXMubGVuZ3RoKSB0aHIgPSBsaW5lcy5sZW5ndGg7XG4gICAgc2V0Q29sbGFiQnVzeSh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgdmFsaWRhdG9yczogbGluZXMsXG4gICAgICAgIHRocmVzaG9sZDogdGhyLFxuICAgICAgICBhZG1pblRva2VuXG4gICAgICB9O1xuICAgICAgY29uc3QgZ2lkID0gU3RyaW5nKGNvbGxhYkdyb3VwSWQgfHwgJycpLnRyaW0oKTtcbiAgICAgIGlmIChnaWQpIHBheWxvYWQuZ3JvdXBJZCA9IGdpZDtcbiAgICAgIGNvbnN0IG5tID0gU3RyaW5nKGNvbGxhYkdyb3VwTmFtZSB8fCAnJykudHJpbSgpO1xuICAgICAgaWYgKG5tKSBwYXlsb2FkLm5hbWUgPSBubTtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBodWJKc29uUnBjKCdVcHNlcnRDb2xsYWJvcmF0aW9uR3JvdXBGcm9tRmVkZXJhdGlvblZhbGlkYXRvcnMnLCBbcGF5bG9hZF0pO1xuICAgICAgaWYgKHIgJiYgci5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgc2V0Q29sbGFiRXJyKHIubWVzc2FnZSB8fCAnQ29sbGFib3JhdGlvbiBncm91cCBzeW5jIGZhaWxlZC4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaWQgPSByICYmIHIuZ3JvdXBJZCA/IFN0cmluZyhyLmdyb3VwSWQpIDogJyc7XG4gICAgICBjb25zdCB1cGRhdGVkID0gISEociAmJiByLnVwZGF0ZWQpO1xuICAgICAgc2V0Q29sbGFiTXNnKFxuICAgICAgICB1cGRhdGVkXG4gICAgICAgICAgPyBgVXBkYXRlZCBjb2xsYWJvcmF0aW9uIGdyb3VwICR7aWR9IHRvIG1hdGNoIHRoaXMgZmVkZXJhdGlvbiBzaWduZXIgc2V0LmBcbiAgICAgICAgICA6IGBDcmVhdGVkIGNvbGxhYm9yYXRpb24gZ3JvdXAgJHtpZH0gZnJvbSB0aGlzIGZlZGVyYXRpb24gc2lnbmVyIHNldC5gXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldENvbGxhYkVycihlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldENvbGxhYkJ1c3koZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzYXZlID0gYXN5bmMgKCkgPT4ge1xuICAgIHNldFNhdmVFcnJvcihudWxsKTtcbiAgICBzZXRTYXZlT2sobnVsbCk7XG4gICAgaWYgKCFhZG1pblRva2VuKSB7XG4gICAgICBzZXRTYXZlRXJyb3IoJ0FkbWluIHRva2VuIHJlcXVpcmVkIChjb21wbGV0ZSBodWIgc2V0dXAgYW5kIGtlZXAgdGhlIHRva2VuIGluIHRoaXMgYnJvd3NlcikuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpbmVzID0gbm9ybWFsaXplUHVia2V5Um93cyh2YWxpZGF0b3JSb3dzKTtcbiAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBzZXRTYXZlRXJyb3IoJ0FkZCBhdCBsZWFzdCBvbmUgdmFsaWRhdG9yIHB1YmxpYyBrZXkuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChsaW5lcy5zb21lKChrKSA9PiAhUFVCS0VZX1JFLnRlc3QoaykpKSB7XG4gICAgICBzZXRTYXZlRXJyb3IoJ0VhY2ggdmFsaWRhdG9yIG11c3QgYmUgYSAzMy1ieXRlIGNvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmxpYyBrZXkgKDY2IGhleCBjaGFycywgcHJlZml4IDAyIG9yIDAzKS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRociA9IE51bWJlcih0aHJlc2hvbGQpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHRocikgfHwgdGhyIDwgMSkgdGhyID0gMTtcbiAgICBpZiAodGhyID4gbGluZXMubGVuZ3RoKSB0aHIgPSBsaW5lcy5sZW5ndGg7XG4gICAgc2V0QnVzeSh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IGh1Ykpzb25ScGMoJ1NldERpc3RyaWJ1dGVkRmVkZXJhdGlvblBvbGljeScsIFt7XG4gICAgICAgIHZhbGlkYXRvcnM6IGxpbmVzLFxuICAgICAgICB0aHJlc2hvbGQ6IHRocixcbiAgICAgICAgYWRtaW5Ub2tlblxuICAgICAgfV0pO1xuICAgICAgaWYgKHIgJiYgci5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgc2V0U2F2ZUVycm9yKHIubWVzc2FnZSB8fCAnU2F2ZSBmYWlsZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0U2F2ZU9rKCdGZWRlcmF0aW9uIHBvbGljeSBzYXZlZC4gU2lkZWNoYWluIHBhdGNoZXMgYW5kIGJlYWNvbiBlcG9jaHMgdXNlIHRoaXMgTS1vZi1OIHNldCB3aGVuIGVudiBkb2VzIG5vdCBvdmVycmlkZS4nKTtcbiAgICAgIHZvaWQgcmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldFNhdmVFcnJvcihlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldEJ1c3koZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBiYWNrVG8gPSBzZXR0aW5nc0xheW91dCA/ICcvc2V0dGluZ3MnIDogJy8nO1xuICBjb25zdCBiYWNrTGFiZWwgPSBzZXR0aW5nc0xheW91dCA/ICdTZXR0aW5ncycgOiAnSG9tZSc7XG4gIGNvbnN0IGhlYWRpbmdJZCA9IHNldHRpbmdzTGF5b3V0ID8gJ3NldHRpbmdzLWZlZGVyYXRpb24taGVhZGluZycgOiAnZmVkZXJhdGlvbnMtcGFnZS1oZWFkaW5nJztcbiAgY29uc3QgdGl0bGUgPSBzZXR0aW5nc0xheW91dCA/ICdEaXN0cmlidXRlZCBmZWRlcmF0aW9uJyA6ICdGZWRlcmF0aW9ucyc7XG4gIGNvbnN0IG1heFdpZHRoID0gc2V0dGluZ3NMYXlvdXQgPyA3MjAgOiA5ODA7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIHN0eWxlPXt7IG1heFdpZHRoLCBtYXJnaW46ICcxZW0gYXV0byAyZW0nLCBwYWRkaW5nOiAnMCAwLjc1ZW0nIH19PlxuICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89e2JhY2tUb30gYmFzaWMgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fSBhcmlhLWxhYmVsPXtgQmFjayB0byAke2JhY2tMYWJlbH1gfT5cbiAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICB7YmFja0xhYmVsfVxuICAgICAgPC9CdXR0b24+XG5cbiAgICAgIDxTZWdtZW50XG4gICAgICAgIHJhaXNlZFxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIG1hcmdpbkJvdHRvbTogJzEuMjVlbScsXG4gICAgICAgICAgYm94U2hhZG93OiAnMCAycHggMTZweCByZ2JhKDM0LCAzNiwgMzgsIDAuMDgpJyxcbiAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgcmdiYSgzNCwgMzYsIDM4LCAwLjA4KSdcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPEhlYWRlciBhcz17c2V0dGluZ3NMYXlvdXQgPyAnaDInIDogJ2gxJ30gaWQ9e2hlYWRpbmdJZH0gc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJ1c2Vyc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNvbG9yPVwiYmx1ZVwiIC8+XG4gICAgICAgICAgPEhlYWRlci5Db250ZW50PlxuICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgeyFzZXR0aW5nc0xheW91dCA/IChcbiAgICAgICAgICAgICAgPEhlYWRlci5TdWJoZWFkZXIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC4zNWVtJywgZm9udFdlaWdodDogNDAwLCBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICAgIENyZWF0ZSBhIHNtYWxsIDxzdHJvbmc+c2hhcmVkIGNvbnRyb2wgZ3JvdXA8L3N0cm9uZz4gZm9yIHRoaXMgaHViOiB5b3UgcGljayB3aG8gY2FuIGNvLXNpZ24sIGFuZCBob3cgbWFueSBzaWduYXR1cmVzIGFyZSBuZWVkZWQgKE0tb2YtTikuXG4gICAgICAgICAgICAgICAgVGhhdCBwb3dlcnMgc2FmZXIgc2lkZWNoYWluIHVwZGF0ZXMgYW5kIGJlYWNvbiBjaGVja3BvaW50cywgYW5kIGdpdmVzIHlvdSBhIDxzdHJvbmc+c2hhcmVkIEJpdGNvaW4gdmF1bHQgYWRkcmVzczwvc3Ryb25nPiBmb3IgdHJlYXN1cnkgZnVuZHMuXG4gICAgICAgICAgICAgIDwvSGVhZGVyLlN1YmhlYWRlcj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvSGVhZGVyLkNvbnRlbnQ+XG4gICAgICAgIDwvSGVhZGVyPlxuXG4gICAgICAgIHshc2V0dGluZ3NMYXlvdXQgPyAoXG4gICAgICAgICAgPFN0ZXAuR3JvdXAgZmx1aWQgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMXJlbScsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgICAgICA8U3RlcCBhY3RpdmU+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJhZGQgdXNlclwiIC8+XG4gICAgICAgICAgICAgIDxTdGVwLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPFN0ZXAuVGl0bGU+V2hvIHNpZ25zPC9TdGVwLlRpdGxlPlxuICAgICAgICAgICAgICAgIDxTdGVwLkRlc2NyaXB0aW9uPlBhc3RlIGVhY2ggY28tb3duZXLigJlzIHB1YmxpYyBrZXkgKG9uZSByb3cgcGVyIHBlcnNvbik8L1N0ZXAuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIDwvU3RlcC5Db250ZW50PlxuICAgICAgICAgICAgPC9TdGVwPlxuICAgICAgICAgICAgPFN0ZXAgYWN0aXZlPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYmFsYW5jZSBzY2FsZVwiIC8+XG4gICAgICAgICAgICAgIDxTdGVwLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPFN0ZXAuVGl0bGU+SG93IG1hbnkgYWdyZWU8L1N0ZXAuVGl0bGU+XG4gICAgICAgICAgICAgICAgPFN0ZXAuRGVzY3JpcHRpb24+UGljayBNLW9mLU4gKGUuZy4gMi1vZi0zIG5lZWRzIHR3byBzaWduYXR1cmVzKTwvU3RlcC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgPC9TdGVwLkNvbnRlbnQ+XG4gICAgICAgICAgICA8L1N0ZXA+XG4gICAgICAgICAgICA8U3RlcCBhY3RpdmU+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzYXZlXCIgLz5cbiAgICAgICAgICAgICAgPFN0ZXAuQ29udGVudD5cbiAgICAgICAgICAgICAgICA8U3RlcC5UaXRsZT5TYXZlIG9uIGh1YjwvU3RlcC5UaXRsZT5cbiAgICAgICAgICAgICAgICA8U3RlcC5EZXNjcmlwdGlvbj5PcGVyYXRvciB0b2tlbiBhcHBsaWVzIHRoaXMgZ3JvdXAgdG8gdGhpcyBodWI8L1N0ZXAuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIDwvU3RlcC5Db250ZW50PlxuICAgICAgICAgICAgPC9TdGVwPlxuICAgICAgICAgIDwvU3RlcC5Hcm91cD5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAwLCBtYXhXaWR0aDogJzQ4cmVtJywgbGluZUhlaWdodDogMS41IH19PlxuICAgICAgICAgIEVhY2ggc2lnbmVyIHNoYXJlcyBhIDxzdHJvbmc+MzMtYnl0ZSBoZXggcHVibGljIGtleTwvc3Ryb25nPiAoc3RhcnRzIHdpdGggPGNvZGU+MDI8L2NvZGU+IG9yIDxjb2RlPjAzPC9jb2RlPikg4oCUIG5vdCBhIHNlY3JldC5cbiAgICAgICAgICBUb2dldGhlciB0aGV5IGZvcm0gYW4gTS1vZi1OIDxzdHJvbmc+bXVsdGlzaWcgcG9saWN5PC9zdHJvbmc+IGZvciB0aGlzIGh1YuKAmXMgZGlzdHJpYnV0ZWQgZmVhdHVyZXMgYW5kIG9uLWNoYWluIHZhdWx0LlxuICAgICAgICAgIFdoZW4gPGNvZGU+RkFCUklDX0RJU1RSSUJVVEVEX0ZFREVSQVRJT05fVkFMSURBVE9SUzwvY29kZT4gaXMgc2V0IG9uIHRoZSBzZXJ2ZXIsIGl0IG92ZXJyaWRlcyB3aGF0IHlvdSBzYXZlIGhlcmUuXG4gICAgICAgICAge3NvdXJjZSA/IChcbiAgICAgICAgICAgIDxzcGFuPiBDdXJyZW50IHNvdXJjZTogPHN0cm9uZz57c291cmNlfTwvc3Ryb25nPi48L3NwYW4+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvcD5cbiAgICAgICAge3NldHRpbmdzTGF5b3V0ID8gKFxuICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNzVlbSAwIDAnLCBmb250U2l6ZTogJzAuOTVlbScgfX0+XG4gICAgICAgICAgICA8TGluayB0bz1cIi9mZWRlcmF0aW9uc1wiPk9wZW4gZnVsbCBGZWRlcmF0aW9ucyB3b3Jrc3BhY2U8L0xpbms+XG4gICAgICAgICAgICB7JyAnfSh3aWRlciBsYXlvdXQsIHNhbWUgY29udHJvbHMpLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxGZWRlcmF0aW9uU3BlbmRpbmdDcml0ZXJpYURyYWZ0IC8+XG4gICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+SHViIGFsZXJ0cyB2cyBhY3Rpdml0eTwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICA8TGluayB0bz1cIi9ub3RpZmljYXRpb25zXCI+Tm90aWZpY2F0aW9uczwvTGluaz4gbGlzdHMgd2FsbGV0IGFuZCBQYXlqb2luIHRvYXN0cyAoc2FtZSBhcyB0aGUgYmVsbCkuIFRoZSBmdWxsIGh1YiBtZXNzYWdlIGxvZywgY2hhdCwgYW5kIEJpdGNvaW4gYmxvY2tzIGFyZSBvbiB0aGV7JyAnfVxuICAgICAgICAgICAgPExpbmsgdG89XCIvYWN0aXZpdGllc1wiPmFjdGl2aXR5IGxvZzwvTGluaz4uIEZlZGVyYXRpb24tcmVsYXRlZCBncm91cCBjaGF0IG1heSBhcHBlYXIgb24gdGhpcyBwYWdlIHdoZW4geW91IGhvbGQgYSBtZW1iZXIga2V5OyBodWItd2lkZSBjaGF0IHN0aWxsIG1pcnJvcnMgdGhlIGFjdGl2aXR5IGxvZy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAge3Byb3BzLmJyaWRnZVJlZiA/IChcbiAgICAgICAgICA8RmVkZXJhdGlvbkNvU2lnbmVyU2Vzc2lvblBhbmVsXG4gICAgICAgICAgICBicmlkZ2VSZWY9e3Byb3BzLmJyaWRnZVJlZn1cbiAgICAgICAgICAgIHZhbGlkYXRvclJvd3M9e3ZhbGlkYXRvclJvd3N9XG4gICAgICAgICAgICBzZXRWYWxpZGF0b3JSb3dzPXtzZXRWYWxpZGF0b3JSb3dzfVxuICAgICAgICAgICAgbm9ybWFsaXplUHVia2V5Um93cz17bm9ybWFsaXplUHVia2V5Um93c31cbiAgICAgICAgICAgIHRocmVzaG9sZD17dGhyZXNob2xkfVxuICAgICAgICAgICAgUFVCS0VZX1JFPXtQVUJLRVlfUkV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgIDxEaXN0cmlidXRlZEZlZGVyYXRpb25QYW5lbCBtYXJnaW5Cb3R0b209XCIxLjI1ZW1cIiAvPlxuXG4gICAgICA8R3JpZCBzdGFja2FibGU+XG4gICAgICAgIDxHcmlkLkNvbHVtbiBjb21wdXRlcj17MTB9PlxuICAgICAgICAgIDxTZWdtZW50IHN0eWxlPXt7IGJvcmRlclJhZGl1czogMTAgfX0+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzaGllbGQgYWx0ZXJuYXRlXCIgY29sb3I9XCJ0ZWFsXCIgLz5cbiAgICAgICAgICAgICAgTXVsdGktc2lnIGNvbnRyYWN0ICh0aGlzIGh1YilcbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbGluZUhlaWdodDogMS41LCBtYXJnaW5Cb3R0b206ICcxcmVtJyB9fT5cbiAgICAgICAgICAgICAgQWZ0ZXIgeW91IHNhdmUsIHRoZSBodWIgdXNlcyB0aGlzIHNpZ25lciBzZXQgZm9yIDxzdHJvbmc+c2lkZWNoYWluIHVwZGF0ZXM8L3N0cm9uZz4sIDxzdHJvbmc+YmVhY29uIGNoZWNrcG9pbnRzPC9zdHJvbmc+LCBhbmQgdGhleycgJ31cbiAgICAgICAgICAgICAgPHN0cm9uZz5UYXByb290IGZlZGVyYXRpb24gdmF1bHQ8L3N0cm9uZz4gYWRkcmVzcy4gQ28tc2lnbmVycyBrZWVwIHByaXZhdGUga2V5cyBvZmYgdGhpcyBVSTsgdGhleSBvbmx5IHNoYXJlIHB1YmtleXMgaGVyZS5cbiAgICAgICAgICAgICAgVG8gcGF5IGZyb20gdGhlIHZhdWx0LCB1c2UgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnM/c2NvcGU9d2FsbGV0I2ZhYnJpYy1mZWRlcmF0aW9uLXdhbGxldC1wYW5lbFwiPldhbGxldCDihpIgRmVkZXJhdGlvbiBtdWx0aXNpZzwvTGluaz57JyAnfVxuICAgICAgICAgICAgICB0byBidWlsZCBhIFBTQlQuIEZvciBkYXktdG8tZGF5IGh1YiB3YWxsZXQgc2VuZHMsIHlvdSBjYW4gc3RpbGwgdGFnIHBheW1lbnRzIHdpdGggeW91ciBvcHRpb25hbCBzcGVuZGluZyBjcml0ZXJpYSAoY2hlY2tib3ggb24gdGhhdCBwYWdlKS5cbiAgICAgICAgICAgICAgSW52aXRlIHBlZXJzIGZyb20gPExpbmsgdG89XCIvcGVlcnNcIj5QZWVyczwvTGluaz4gd2hlbiB5b3UgYXJlIHJlYWR5IHRvIGNvb3JkaW5hdGUuXG4gICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgIHtsb2FkRXJyb3IgPyAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlPlxuICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5Db3VsZCBub3QgbG9hZCBwb2xpY3k8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwPntsb2FkRXJyb3J9PC9wPlxuICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzYXZlRXJyb3IgPyAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlIG9uRGlzbWlzcz17KCkgPT4gc2V0U2F2ZUVycm9yKG51bGwpfT5cbiAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+U2F2ZSBmYWlsZWQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwPntzYXZlRXJyb3J9PC9wPlxuICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzYXZlT2sgPyAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlIHN1Y2Nlc3Mgb25EaXNtaXNzPXsoKSA9PiBzZXRTYXZlT2sobnVsbCl9PlxuICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5TYXZlZDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgPHA+e3NhdmVPa308L3A+XG4gICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzAuNzVlbScsIG1hcmdpbkJvdHRvbTogJzFyZW0nIH19PlxuICAgICAgICAgICAgICA8TGFiZWwgY29sb3I9XCJibHVlXCIgc2l6ZT1cImxhcmdlXCIgc3R5bGU9e3sgZm9udEZhbWlseTogJ21vbm9zcGFjZScgfX0+XG4gICAgICAgICAgICAgICAge21PZk5MYWJlbH1cbiAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICAgIGxvYWRpbmc9e2h1YktleUJ1c3l9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2h1YktleUJ1c3kgfHwgc291cmNlID09PSAnZW52J31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIGluY2x1ZGVIdWJWYWxpZGF0b3IoKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJwbHVzXCIgLz5cbiAgICAgICAgICAgICAgICBJbmNsdWRlIHRoaXMgaHVi4oCZcyBwdWJrZXlcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cImJ1dHRvblwiIHNpemU9XCJzbWFsbFwiIGJhc2ljIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIiBvbkNsaWNrPXsoKSA9PiB2b2lkIHJlZnJlc2goKX0+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICAgIFJlbG9hZCBmcm9tIGh1YlxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge2h1YktleU1zZyA/IChcbiAgICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIiBvbkRpc21pc3M9eygpID0+IHNldEh1YktleU1zZyhudWxsKX0gc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlxuICAgICAgICAgICAgICAgIHtodWJLZXlNc2d9XG4gICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuODVlbScgfX0+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5Db2xsYWJvcmF0aW9uIGdyb3VwIChzYW1lIHNpZ25lciBzZXQpPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMC42NWVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICAgICAgICBNaXJyb3IgdGhlc2UgZmVkZXJhdGlvbiB2YWxpZGF0b3JzIGludG8gYSA8TGluayB0bz1cIi9zZXR0aW5ncy9jb2xsYWJvcmF0aW9uXCI+Q29sbGFib3JhdGlvbjwvTGluaz4gZ3JvdXBcbiAgICAgICAgICAgICAgICBzbyBpbnZpdGF0aW9ucywgcHJldmlld3MsIGFuZCB0aGUgZmVkZXJhdGlvbiB2YXVsdCBzdGF5IGFsaWduZWQgb24gb25lIHB1YmtleSBsaXN0IGFuZCB0aHJlc2hvbGQuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAge2NvbGxhYkVyciA/IChcbiAgICAgICAgICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZSBzaXplPVwic21hbGxcIiBvbkRpc21pc3M9eygpID0+IHNldENvbGxhYkVycignJyl9IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICB7Y29sbGFiRXJyfVxuICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIHtjb2xsYWJNc2cgPyAoXG4gICAgICAgICAgICAgICAgPE1lc3NhZ2Ugc3VjY2VzcyBzaXplPVwic21hbGxcIiBvbkRpc21pc3M9eygpID0+IHNldENvbGxhYk1zZygnJyl9IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICB7Y29sbGFiTXNnfXsnICd9XG4gICAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5ncy9jb2xsYWJvcmF0aW9uXCI+T3BlbiBDb2xsYWJvcmF0aW9uPC9MaW5rPi5cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImZlZC1jb2xsYWItZ3JvdXAtaWRcIj5FeGlzdGluZyBncm91cCBpZCAob3B0aW9uYWwg4oCUIGxlYXZlIGVtcHR5IHRvIGNyZWF0ZSk8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImZlZC1jb2xsYWItZ3JvdXAtaWRcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJncnBf4oCmXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb2xsYWJHcm91cElkfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB7IHZhbHVlIH0pID0+IHNldENvbGxhYkdyb3VwSWQodmFsdWUgIT0gbnVsbCA/IFN0cmluZyh2YWx1ZSkgOiAnJyl9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBmb250RmFtaWx5OiAnbW9ub3NwYWNlJywgZm9udFNpemU6ICcwLjllbScgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiZmVkLWNvbGxhYi1ncm91cC1uYW1lXCI+TmV3IGdyb3VwIG5hbWUgKHdoZW4gY3JlYXRpbmcpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJmZWQtY29sbGFiLWdyb3VwLW5hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGZWRlcmF0aW9uIHZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2NvbGxhYkdyb3VwTmFtZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiBzZXRDb2xsYWJHcm91cE5hbWUodmFsdWUgIT0gbnVsbCA/IFN0cmluZyh2YWx1ZSkgOiAnJyl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInRlYWxcIlxuICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgbG9hZGluZz17Y29sbGFiQnVzeX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y29sbGFiQnVzeSB8fCAhbm9ybWFsaXplZEtleXMubGVuZ3RoIHx8IGludmFsaWRLZXlzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCBzYXZlQ29sbGFib3JhdGlvbkdyb3VwRnJvbUZlZGVyYXRpb24oKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJ1c2Vyc1wiIC8+XG4gICAgICAgICAgICAgICAgU2F2ZSBzaWduZXIgc2V0IHRvIENvbGxhYm9yYXRpb24gZ3JvdXBcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG5cbiAgICAgICAgICAgIDxGb3JtIG9uU3VibWl0PXsoZSkgPT4geyBlLnByZXZlbnREZWZhdWx0KCk7IHZvaWQgc2F2ZSgpOyB9fT5cbiAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCI+U2lnbmVyczwvSGVhZGVyPlxuICAgICAgICAgICAgICB7dmFsaWRhdG9yUm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8Rm9ybS5GaWVsZCBrZXk9e2luZGV4fT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPXtgZmVkLXBrLSR7aW5kZXh9YH0+VmFsaWRhdG9yIHtpbmRleCArIDF9PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcwLjM1ZW0nLCBhbGlnbkl0ZW1zOiAnc3RyZXRjaCcsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2BmZWQtcGstJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgIGZsdWlkXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIwMuKApiBvciAwM+KApiAoNjYgaGV4IGNoYXJzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3Jvd31cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHsgdmFsdWUgfSkgPT4gc2V0Um93KGluZGV4LCB2YWx1ZSAhPSBudWxsID8gU3RyaW5nKHZhbHVlKSA6ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBmbGV4OiAnMSAxIDE2cmVtJywgbWluV2lkdGg6ICcxMnJlbScsIGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnLCBmb250U2l6ZTogJzAuOWVtJyB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInRyYXNoXCJcbiAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3ZhbGlkYXRvclJvd3MubGVuZ3RoIDw9IDF9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcmVtb3ZlUm93KGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXtgUmVtb3ZlIHNpZ25lciAke2luZGV4ICsgMX1gfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYmFzaWMgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiIG9uQ2xpY2s9e2FkZFJvd30gZGlzYWJsZWQ9e3NvdXJjZSA9PT0gJ2Vudid9PlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJhZGRcIiAvPlxuICAgICAgICAgICAgICAgIEFkZCBzaWduZXJcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgICAgICAge2ludmFsaWRLZXlzLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19PlxuICAgICAgICAgICAgICAgICAge2ludmFsaWRLZXlzLmxlbmd0aH0gZW50cntpbnZhbGlkS2V5cy5sZW5ndGggPT09IDEgPyAneScgOiAnaWVzJ30gZG8gbm90IG1hdGNoIGNvbXByZXNzZWQgcHVia2V5IGhleCAoMDIvMDMgKyA2NCBoZXgpLlxuICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgICAgPEZvcm0uRmllbGQgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMS4yNWVtJyB9fT5cbiAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImZlZGVyYXRpb24tdGhyZXNob2xkLWlucHV0XCI+U2lnbmF0dXJlIHRocmVzaG9sZCAoTS1vZi1OKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPEZvcm0uSW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwiZmVkZXJhdGlvbi10aHJlc2hvbGQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBtaW49ezF9XG4gICAgICAgICAgICAgICAgICBtYXg9e01hdGgubWF4KDEsIG4pfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RocmVzaG9sZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiBzZXRUaHJlc2hvbGQodmFsdWUpfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3NvdXJjZSA9PT0gJ2Vudid9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXhXaWR0aDogJzhyZW0nIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuXG4gICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIHByaW1hcnkgc2l6ZT1cImxhcmdlXCIgZGlzYWJsZWQ9e2J1c3kgfHwgc291cmNlID09PSAnZW52J30gbG9hZGluZz17YnVzeX0gc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzYXZlXCIgLz5cbiAgICAgICAgICAgICAgICBTYXZlIGZlZGVyYXRpb24gcG9saWN5XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICAgIDxTZWdtZW50IHN0eWxlPXt7IG1hcmdpblRvcDogJzEuMjVlbScgfX0+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+RGlzY292ZXJ5ICZhbXA7IEFQSXM8L0hlYWRlcj5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45NWVtJywgbGluZUhlaWdodDogMS40NSwgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3MvYWRtaW4vYmVhY29uLWZlZGVyYXRpb25cIj5CZWFjb24gRmVkZXJhdGlvbjwvTGluaz5cbiAgICAgICAgICAgICAgeycg4oCUICd9TDEgYmluZGluZyBvZiA8Y29kZT5CRUFDT05fRVBPQ0g8L2NvZGU+IGFuZCB3aXRuZXNzIHZlcmlmaWNhdGlvbi5cbiAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC9tYW5pZmVzdFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5HRVQgbWFuaWZlc3Q8L2E+XG4gICAgICAgICAgICAgIHsnIMK3ICd9XG4gICAgICAgICAgICAgIDxhIGhyZWY9XCIvc2VydmljZXMvZGlzdHJpYnV0ZWQvZXBvY2hcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+R0VUIGVwb2NoPC9hPlxuICAgICAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgICAgICA8YSBocmVmPVwiL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL2ZlZGVyYXRpb24tcmVnaXN0cnlcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+RmVkZXJhdGlvbiByZWdpc3RyeTwvYT5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIHtmZWRlcmF0aW9uRnMgPyAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzU1NScsIGZvbnRTaXplOiAnMC45MmVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICAgICAgICBPbi1jaGFpbiByZWdpc3RyeSBtaXJyb3IgKHRoaXMgbm9kZSk6eycgJ31cbiAgICAgICAgICAgICAgICA8c3Ryb25nPntOdW1iZXIoZmVkZXJhdGlvbkZzLnJlZ2lzdHJ5RW50cnlDb3VudCkgfHwgMH08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICB7JyAnfWVudHJ7TnVtYmVyKGZlZGVyYXRpb25Gcy5yZWdpc3RyeUVudHJ5Q291bnQpID09PSAxID8gJ3knIDogJ2llcyd9XG4gICAgICAgICAgICAgICAge2ZlZGVyYXRpb25Gcy5sYXN0U2Nhbm5lZEhlaWdodCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIoZmVkZXJhdGlvbkZzLmxhc3RTY2FubmVkSGVpZ2h0KSlcbiAgICAgICAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7JywgJ31sYXN0IEwxIHNjYW4gaGVpZ2h0IDxzdHJvbmc+e051bWJlcihmZWRlcmF0aW9uRnMubGFzdFNjYW5uZWRIZWlnaHQpfTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogJywgbGFzdCBMMSBzY2FuIGhlaWdodCDigJQnfVxuICAgICAgICAgICAgICAgIHtmZWRlcmF0aW9uRnMucmVnaXN0cnlEb2N1bWVudCA/IChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcgfX0+XG4gICAgICAgICAgICAgICAgICAgIHsnICd9KDxjb2RlPntTdHJpbmcoZmVkZXJhdGlvbkZzLnJlZ2lzdHJ5RG9jdW1lbnQpfTwvY29kZT4pXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgPC9HcmlkLkNvbHVtbj5cblxuICAgICAgICA8R3JpZC5Db2x1bW4gY29tcHV0ZXI9ezZ9PlxuICAgICAgICAgIDxTZWdtZW50IHNlY29uZGFyeSBzdHlsZT17eyBwb3NpdGlvbjogJ3N0aWNreScsIHRvcDogJzUuNXJlbScgfX0+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIiBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+UmVmZXJlbmNlIGZlZGVyYXRpb25zPC9IZWFkZXI+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJywgbGluZUhlaWdodDogMS40NSwgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgRXhhbXBsZXMgYW5kIHB1YmxpYyByb3N0ZXJzIChyZWFkLW9ubHkpLiBZb3VyIGh1YiBwb2xpY3kgYWJvdmUgaXMgaW5kZXBlbmRlbnQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB7S05PV05fRkVERVJBVElPTlMubWFwKChmZWQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaWQgPSBmZWQgJiYgZmVkLmlkID8gU3RyaW5nKGZlZC5pZCkgOiAndW5rbm93bic7XG4gICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBmZWQgJiYgZmVkLm5hbWUgPyBTdHJpbmcoZmVkLm5hbWUpIDogaWQ7XG4gICAgICAgICAgICAgIGNvbnN0IHVybHMgPSBmZWQgJiYgZmVkLnVybHMgPyBmZWQudXJscyA6IHt9O1xuICAgICAgICAgICAgICBjb25zdCBkZXNjID0gZmVkICYmIHR5cGVvZiBmZWQuZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnID8gZmVkLmRlc2NyaXB0aW9uLnRyaW0oKSA6ICcnO1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxTZWdtZW50IGtleT17aWR9IHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDVcIiBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+XG4gICAgICAgICAgICAgICAgICAgIHtuYW1lfVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM4ODgnLCBmb250V2VpZ2h0OiAnbm9ybWFsJywgbWFyZ2luTGVmdDogJzAuMzVlbScsIGZvbnRTaXplOiAnMC45ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICh7ZmVkICYmIGZlZC5uZXR3b3JrSWQgPyBTdHJpbmcoZmVkLm5ldHdvcmtJZCkgOiAn4oCUJ30pXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICAgICAge2Rlc2MgPyA8cCBzdHlsZT17eyBjb2xvcjogJyM1NTUnLCBmb250U2l6ZTogJzAuODhlbScsIGxpbmVIZWlnaHQ6IDEuNCwgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PntkZXNjfTwvcD4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPExpc3QgcmVsYXhlZCBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgICAgICAge3VybHMuaG9tZXBhZ2UgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPExpc3QuSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImxpbmtpZnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudD17PGEgaHJlZj17dXJscy5ob21lcGFnZX0gdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlNpdGU8L2E+fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICB7dXJscy5mZWRlcmF0aW9uID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxMaXN0Lkl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ1c2Vyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50PXs8YSBocmVmPXt1cmxzLmZlZGVyYXRpb259IHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5Sb3N0ZXI8L2E+fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC9MaXN0PlxuICAgICAgICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgPC9HcmlkLkNvbHVtbj5cbiAgICAgIDwvR3JpZD5cbiAgICA8L0NvbnRhaW5lcj5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGZWRlcmF0aW9uc0hvbWU7XG4iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yIiwiZSIsInQiLCJyIiwiU3ltYm9sIiwibiIsIml0ZXJhdG9yIiwibyIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJwcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdHlwZW9mIiwiY29uc3RydWN0b3IiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiQXJyYXkiLCJmcm9tIiwiaXNBcnJheSIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfbm9uSXRlcmFibGVSZXN0IiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJ0ZXN0IiwibmV4dCIsInB1c2giLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJDb250YWluZXIiLCJGb3JtIiwiR3JpZCIsIkhlYWRlciIsIkljb24iLCJMYWJlbCIsIkxpc3QiLCJNZXNzYWdlIiwiU2VnbWVudCIsIlN0ZXAiLCJfcmVxdWlyZTMiLCJodWJKc29uUnBjIiwiX3JlcXVpcmU0IiwiZmV0Y2hEaXN0cmlidXRlZEh1YlBvbGljeSIsIkRpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsIiwiRmVkZXJhdGlvblNwZW5kaW5nQ3JpdGVyaWFEcmFmdCIsIkZlZGVyYXRpb25Db1NpZ25lclNlc3Npb25QYW5lbCIsIktOT1dOX0ZFREVSQVRJT05TIiwiUFVCS0VZX1JFIiwibm9ybWFsaXplUHVia2V5Um93cyIsInJvd3MiLCJtYXAiLCJzIiwiU3RyaW5nIiwidHJpbSIsImZpbHRlciIsIkJvb2xlYW4iLCJGZWRlcmF0aW9uc0hvbWUiLCJwcm9wcyIsImFkbWluVG9rZW4iLCJzZXR0aW5nc0xheW91dCIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsInZhbGlkYXRvclJvd3MiLCJzZXRWYWxpZGF0b3JSb3dzIiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJ0aHJlc2hvbGQiLCJzZXRUaHJlc2hvbGQiLCJfUmVhY3QkdXNlU3RhdGU1IiwiX1JlYWN0JHVzZVN0YXRlNiIsInNvdXJjZSIsInNldFNvdXJjZSIsIl9SZWFjdCR1c2VTdGF0ZTciLCJfUmVhY3QkdXNlU3RhdGU4IiwiYnVzeSIsInNldEJ1c3kiLCJfUmVhY3QkdXNlU3RhdGU5IiwiX1JlYWN0JHVzZVN0YXRlMCIsImxvYWRFcnJvciIsInNldExvYWRFcnJvciIsIl9SZWFjdCR1c2VTdGF0ZTEiLCJfUmVhY3QkdXNlU3RhdGUxMCIsInNhdmVFcnJvciIsInNldFNhdmVFcnJvciIsIl9SZWFjdCR1c2VTdGF0ZTExIiwiX1JlYWN0JHVzZVN0YXRlMTIiLCJzYXZlT2siLCJzZXRTYXZlT2siLCJfUmVhY3QkdXNlU3RhdGUxMyIsIl9SZWFjdCR1c2VTdGF0ZTE0IiwiZmVkZXJhdGlvbkZzIiwic2V0RmVkZXJhdGlvbkZzIiwiX1JlYWN0JHVzZVN0YXRlMTUiLCJfUmVhY3QkdXNlU3RhdGUxNiIsImh1YktleUJ1c3kiLCJzZXRIdWJLZXlCdXN5IiwiX1JlYWN0JHVzZVN0YXRlMTciLCJfUmVhY3QkdXNlU3RhdGUxOCIsImh1YktleU1zZyIsInNldEh1YktleU1zZyIsIl9SZWFjdCR1c2VTdGF0ZTE5IiwiX1JlYWN0JHVzZVN0YXRlMjAiLCJjb2xsYWJHcm91cElkIiwic2V0Q29sbGFiR3JvdXBJZCIsIl9SZWFjdCR1c2VTdGF0ZTIxIiwiX1JlYWN0JHVzZVN0YXRlMjIiLCJjb2xsYWJHcm91cE5hbWUiLCJzZXRDb2xsYWJHcm91cE5hbWUiLCJfUmVhY3QkdXNlU3RhdGUyMyIsIl9SZWFjdCR1c2VTdGF0ZTI0IiwiY29sbGFiQnVzeSIsInNldENvbGxhYkJ1c3kiLCJfUmVhY3QkdXNlU3RhdGUyNSIsIl9SZWFjdCR1c2VTdGF0ZTI2IiwiY29sbGFiTXNnIiwic2V0Q29sbGFiTXNnIiwiX1JlYWN0JHVzZVN0YXRlMjciLCJfUmVhY3QkdXNlU3RhdGUyOCIsImNvbGxhYkVyciIsInNldENvbGxhYkVyciIsInJlZnJlc2giLCJ1c2VDYWxsYmFjayIsIl9jYWxsZWUiLCJzcmMiLCJ0aHIiLCJfdCIsIl9jb250ZXh0IiwidmFsaWRhdG9ycyIsIngiLCJmaWxlc3lzdGVtIiwibWVzc2FnZSIsInVzZUVmZmVjdCIsIm5vcm1hbGl6ZWRLZXlzIiwidGhyTnVtIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJpbnZhbGlkS2V5cyIsImsiLCJtT2ZOTGFiZWwiLCJjb25jYXQiLCJhZGRSb3ciLCJyZW1vdmVSb3ciLCJpbmRleCIsIl8iLCJzZXRSb3ciLCJpbmNsdWRlSHViVmFsaWRhdG9yIiwiX3JlZjIiLCJfY2FsbGVlMiIsIl95aWVsZCRmZXRjaERpc3RyaWJ1dCIsIm1hbmlmZXN0IiwicGsiLCJsb3dlciIsIl90MiIsIl9jb250ZXh0MiIsImh1YkZhYnJpY1BlZXJJZCIsInRvTG93ZXJDYXNlIiwiY3VyIiwic29tZSIsInNhdmVDb2xsYWJvcmF0aW9uR3JvdXBGcm9tRmVkZXJhdGlvbiIsIl9yZWYzIiwiX2NhbGxlZTMiLCJsaW5lcyIsInBheWxvYWQiLCJnaWQiLCJubSIsImlkIiwidXBkYXRlZCIsIl90MyIsIl9jb250ZXh0MyIsImdyb3VwSWQiLCJzdGF0dXMiLCJzYXZlIiwiX3JlZjQiLCJfY2FsbGVlNCIsIl90NCIsIl9jb250ZXh0NCIsImJhY2tUbyIsImJhY2tMYWJlbCIsImhlYWRpbmdJZCIsInRpdGxlIiwibWF4V2lkdGgiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJtYXJnaW4iLCJwYWRkaW5nIiwiYXMiLCJ0byIsImJhc2ljIiwic2l6ZSIsIm1hcmdpbkJvdHRvbSIsInJhaXNlZCIsImJveFNoYWRvdyIsImJvcmRlciIsIm1hcmdpblRvcCIsImNvbG9yIiwiQ29udGVudCIsIlN1YmhlYWRlciIsImZvbnRXZWlnaHQiLCJHcm91cCIsImZsdWlkIiwiZmxleFdyYXAiLCJhY3RpdmUiLCJUaXRsZSIsIkRlc2NyaXB0aW9uIiwibGluZUhlaWdodCIsImZvbnRTaXplIiwiaW5mbyIsImJyaWRnZVJlZiIsInN0YWNrYWJsZSIsIkNvbHVtbiIsImNvbXB1dGVyIiwiYm9yZGVyUmFkaXVzIiwibmVnYXRpdmUiLCJvbkRpc21pc3MiLCJzdWNjZXNzIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJnYXAiLCJmb250RmFtaWx5IiwidHlwZSIsImljb24iLCJsYWJlbFBvc2l0aW9uIiwibG9hZGluZyIsImRpc2FibGVkIiwib25DbGljayIsIkZpZWxkIiwiaHRtbEZvciIsIklucHV0IiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsIl9yZWY1IiwiX3JlZjYiLCJvblN1Ym1pdCIsInByZXZlbnREZWZhdWx0Iiwicm93Iiwia2V5IiwiX3JlZjciLCJmbGV4IiwibWluV2lkdGgiLCJ3YXJuaW5nIiwibWluIiwibWF4IiwiTWF0aCIsIl9yZWY4IiwicHJpbWFyeSIsImhyZWYiLCJ0YXJnZXQiLCJyZWwiLCJyZWdpc3RyeUVudHJ5Q291bnQiLCJsYXN0U2Nhbm5lZEhlaWdodCIsInJlZ2lzdHJ5RG9jdW1lbnQiLCJzZWNvbmRhcnkiLCJwb3NpdGlvbiIsInRvcCIsImZlZCIsInVybHMiLCJkZXNjIiwiZGVzY3JpcHRpb24iLCJtYXJnaW5MZWZ0IiwibmV0d29ya0lkIiwicmVsYXhlZCIsImhvbWVwYWdlIiwiSXRlbSIsImNvbnRlbnQiLCJmZWRlcmF0aW9uIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/FederationsHome.js\n\n}')},"./components/GraphDocumentPreview.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require.Button;\nvar GraphvizWasm = null;\ntry {\n GraphvizWasm = (__webpack_require__(/*! graphviz-wasm */ "./node_modules/graphviz-wasm/dist/index.js")["default"]);\n} catch (e) {\n GraphvizWasm = null;\n}\n\n/**\n * Heuristic: treat document body as Graphviz DOT when MIME/name suggest it or\n * the trimmed source opens with a graph/digraph statement (aligned with\n * application `fabric_type === \'Graph\'` content shape).\n */\nfunction looksLikeDotSource(text, mime, name) {\n if (text == null || typeof text !== \'string\') return false;\n var m = String(mime || \'\').toLowerCase();\n if (m.includes(\'graphviz\') || m === \'text/dot\' || m === \'text/x-dot\') return true;\n if (/\\.(dot|gv)$/i.test(String(name || \'\'))) return true;\n var t = text.replace(/^\\uFEFF/, \'\').trimStart();\n return /^(strict\\s+)?(graph|digraph)\\b/i.test(t);\n}\nfunction GraphDocumentPreview(props) {\n var dotSource = props.dotSource;\n var mayRender = !!(props.hasDocumentKey || props.skipIdentityGate === true);\n var _React$useState = React.useState(\'idle\'),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n status = _React$useState2[0],\n setStatus = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n error = _React$useState4[0],\n setError = _React$useState4[1];\n var _React$useState5 = React.useState(null),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n objectUrl = _React$useState6[0],\n setObjectUrl = _React$useState6[1];\n var _React$useState7 = React.useState(0),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n renderNonce = _React$useState8[0],\n setRenderNonce = _React$useState8[1];\n var objectUrlRef = React.useRef(null);\n var revokeCurrentUrl = React.useCallback(function () {\n if (objectUrlRef.current) {\n URL.revokeObjectURL(objectUrlRef.current);\n objectUrlRef.current = null;\n }\n setObjectUrl(null);\n }, []);\n React.useEffect(function () {\n var cancelled = false;\n var run = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var svg, blob, next, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n if (!(!dotSource || !mayRender)) {\n _context.n = 1;\n break;\n }\n revokeCurrentUrl();\n setStatus(\'idle\');\n setError(null);\n return _context.a(2);\n case 1:\n if (GraphvizWasm) {\n _context.n = 2;\n break;\n }\n revokeCurrentUrl();\n setStatus(\'error\');\n setError(\'Graph preview needs graphviz-wasm (bundle or install).\');\n return _context.a(2);\n case 2:\n setStatus(\'loading\');\n setError(null);\n revokeCurrentUrl();\n _context.p = 3;\n _context.n = 4;\n return GraphvizWasm.loadWASM();\n case 4:\n if (!cancelled) {\n _context.n = 5;\n break;\n }\n return _context.a(2);\n case 5:\n svg = GraphvizWasm.layout(dotSource, \'svg\', \'dot\');\n if (!cancelled) {\n _context.n = 6;\n break;\n }\n return _context.a(2);\n case 6:\n if (!(typeof svg !== \'string\' || !svg.trim())) {\n _context.n = 7;\n break;\n }\n setStatus(\'error\');\n setError(\'Graphviz returned empty output.\');\n return _context.a(2);\n case 7:\n blob = new Blob([svg], {\n type: \'image/svg+xml;charset=utf-8\'\n });\n next = URL.createObjectURL(blob);\n objectUrlRef.current = next;\n setObjectUrl(next);\n setStatus(\'ready\');\n _context.n = 10;\n break;\n case 8:\n _context.p = 8;\n _t = _context.v;\n if (!cancelled) {\n _context.n = 9;\n break;\n }\n return _context.a(2);\n case 9:\n setStatus(\'error\');\n setError(_t && _t.message ? String(_t.message) : \'Graph layout failed.\');\n revokeCurrentUrl();\n case 10:\n return _context.a(2);\n }\n }, _callee, null, [[3, 8]]);\n }));\n return function run() {\n return _ref.apply(this, arguments);\n };\n }();\n run();\n return function () {\n cancelled = true;\n revokeCurrentUrl();\n };\n }, [dotSource, mayRender, revokeCurrentUrl]);\n if (!dotSource || !mayRender) return null;\n if (status === \'loading\' || status === \'idle\') {\n return /*#__PURE__*/React.createElement("div", {\n style: {\n padding: \'1rem\',\n color: \'#666\'\n },\n "aria-busy": "true"\n }, "Rendering graph\\u2026");\n }\n if (status === \'error\' && error) {\n return /*#__PURE__*/React.createElement("div", {\n style: {\n padding: \'0.75rem\',\n background: \'#fff6f6\',\n border: \'1px solid #ffcdd2\',\n borderRadius: 6,\n color: \'#9f3a38\'\n },\n role: "alert"\n }, /*#__PURE__*/React.createElement("strong", null, "Graph preview"), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.35rem\',\n whiteSpace: \'pre-wrap\'\n }\n }, error), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n style: {\n marginTop: \'0.65rem\'\n },\n onClick: function onClick() {\n return setRenderNonce(function (n) {\n return n + 1;\n });\n }\n }, "Retry render"));\n }\n if (objectUrl) {\n return /*#__PURE__*/React.createElement("div", {\n style: {\n overflow: \'auto\',\n maxHeight: 560,\n textAlign: \'center\',\n background: \'#fafafa\',\n borderRadius: 6,\n padding: \'0.5rem\'\n }\n }, /*#__PURE__*/React.createElement("img", {\n src: objectUrl,\n alt: "Graphviz diagram",\n style: {\n maxWidth: \'100%\',\n height: \'auto\',\n verticalAlign: \'middle\'\n }\n }));\n }\n return null;\n}\nmodule.exports = GraphDocumentPreview;\nmodule.exports.looksLikeDotSource = looksLikeDotSource;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0dyYXBoRG9jdW1lbnRQcmV2aWV3LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLGFBQUEsSUFDYix1S0FBQUMsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLFdBQUEsOEJBQUFDLEVBQUFOLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLEVBQUFFLENBQUEsUUFBQUMsQ0FBQSxHQUFBTCxDQUFBLElBQUFBLENBQUEsQ0FBQU0sU0FBQSxZQUFBQyxTQUFBLEdBQUFQLENBQUEsR0FBQU8sU0FBQSxFQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsTUFBQSxDQUFBTCxDQUFBLENBQUFDLFNBQUEsVUFBQUssbUJBQUEsQ0FBQUgsQ0FBQSx1QkFBQVYsQ0FBQSxFQUFBRSxDQUFBLEVBQUFFLENBQUEsUUFBQUUsQ0FBQSxFQUFBQyxDQUFBLEVBQUFHLENBQUEsRUFBQUksQ0FBQSxNQUFBQyxDQUFBLEdBQUFYLENBQUEsUUFBQVksQ0FBQSxPQUFBQyxDQUFBLEtBQUFGLENBQUEsS0FBQWIsQ0FBQSxLQUFBZ0IsQ0FBQSxFQUFBcEIsQ0FBQSxFQUFBcUIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFOLENBQUEsRUFBQU0sQ0FBQSxDQUFBQyxJQUFBLENBQUF2QixDQUFBLE1BQUFzQixDQUFBLFdBQUFBLEVBQUFyQixDQUFBLEVBQUFDLENBQUEsV0FBQU0sQ0FBQSxHQUFBUCxDQUFBLEVBQUFRLENBQUEsTUFBQUcsQ0FBQSxHQUFBWixDQUFBLEVBQUFtQixDQUFBLENBQUFmLENBQUEsR0FBQUYsQ0FBQSxFQUFBbUIsQ0FBQSxnQkFBQUMsRUFBQXBCLENBQUEsRUFBQUUsQ0FBQSxTQUFBSyxDQUFBLEdBQUFQLENBQUEsRUFBQVUsQ0FBQSxHQUFBUixDQUFBLEVBQUFILENBQUEsT0FBQWlCLENB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QUVPLFNBQVMsRUFBRSxTQUFTO1FBQUVDLFVBQVUsRUFBRTtNQUFXO0lBQUUsR0FBRTFDLEtBQVcsQ0FBQyxlQUMzRTFCLEtBQUEsQ0FBQTJELGFBQUEsQ0FBQ3hELE1BQU07TUFDTHFELElBQUksRUFBQyxRQUFRO01BQ2JhLElBQUksRUFBQyxPQUFPO01BQ1pDLEtBQUs7TUFDTFYsS0FBSyxFQUFFO1FBQUVPLFNBQVMsRUFBRTtNQUFVLENBQUU7TUFDaENJLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1FBQUEsT0FBUXBDLGNBQWMsQ0FBQyxVQUFDcEcsQ0FBQztVQUFBLE9BQUtBLENBQUMsR0FBRyxDQUFDO1FBQUEsRUFBQztNQUFBO0lBQUMsR0FDN0MsY0FFTyxDQUNMLENBQUM7RUFFVjtFQUVBLElBQUkrRixTQUFTLEVBQUU7SUFDYixvQkFDRTlCLEtBQUEsQ0FBQTJELGFBQUE7TUFBS0MsS0FBSyxFQUFFO1FBQUVZLFFBQVEsRUFBRSxNQUFNO1FBQUVDLFNBQVMsRUFBRSxHQUFHO1FBQUVDLFNBQVMsRUFBRSxRQUFRO1FBQUVYLFVBQVUsRUFBRSxTQUFTO1FBQUVFLFlBQVksRUFBRSxDQUFDO1FBQUVKLE9BQU8sRUFBRTtNQUFTO0lBQUUsZ0JBQy9IN0QsS0FBQSxDQUFBMkQsYUFBQTtNQUNFZ0IsR0FBRyxFQUFFN0MsU0FBVTtNQUNmOEMsR0FBRyxFQUFDLGtCQUFrQjtNQUN0QmhCLEtBQUssRUFBRTtRQUFFaUIsUUFBUSxFQUFFLE1BQU07UUFBRUMsTUFBTSxFQUFFLE1BQU07UUFBRUMsYUFBYSxFQUFFO01BQVM7SUFBRSxDQUN0RSxDQUNFLENBQUM7RUFFVjtFQUVBLE9BQU8sSUFBSTtBQUNiO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHcEUsb0JBQW9CO0FBQ3JDbUUsaUNBQWlDLEdBQUczRSxrQkFBa0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvR3JhcGhEb2N1bWVudFByZXZpZXcuanM/YjJjMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgQnV0dG9uIH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuXG5sZXQgR3JhcGh2aXpXYXNtID0gbnVsbDtcbnRyeSB7XG4gIEdyYXBodml6V2FzbSA9IHJlcXVpcmUoJ2dyYXBodml6LXdhc20nKS5kZWZhdWx0O1xufSBjYXRjaCAoZSkge1xuICBHcmFwaHZpeldhc20gPSBudWxsO1xufVxuXG4vKipcbiAqIEhldXJpc3RpYzogdHJlYXQgZG9jdW1lbnQgYm9keSBhcyBHcmFwaHZpeiBET1Qgd2hlbiBNSU1FL25hbWUgc3VnZ2VzdCBpdCBvclxuICogdGhlIHRyaW1tZWQgc291cmNlIG9wZW5zIHdpdGggYSBncmFwaC9kaWdyYXBoIHN0YXRlbWVudCAoYWxpZ25lZCB3aXRoXG4gKiBhcHBsaWNhdGlvbiBgZmFicmljX3R5cGUgPT09ICdHcmFwaCdgIGNvbnRlbnQgc2hhcGUpLlxuICovXG5mdW5jdGlvbiBsb29rc0xpa2VEb3RTb3VyY2UgKHRleHQsIG1pbWUsIG5hbWUpIHtcbiAgaWYgKHRleHQgPT0gbnVsbCB8fCB0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbSA9IFN0cmluZyhtaW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAobS5pbmNsdWRlcygnZ3JhcGh2aXonKSB8fCBtID09PSAndGV4dC9kb3QnIHx8IG0gPT09ICd0ZXh0L3gtZG90JykgcmV0dXJuIHRydWU7XG4gIGlmICgvXFwuKGRvdHxndikkL2kudGVzdChTdHJpbmcobmFtZSB8fCAnJykpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgdCA9IHRleHQucmVwbGFjZSgvXlxcdUZFRkYvLCAnJykudHJpbVN0YXJ0KCk7XG4gIHJldHVybiAvXihzdHJpY3RcXHMrKT8oZ3JhcGh8ZGlncmFwaClcXGIvaS50ZXN0KHQpO1xufVxuXG5mdW5jdGlvbiBHcmFwaERvY3VtZW50UHJldmlldyAocHJvcHMpIHtcbiAgY29uc3QgZG90U291cmNlID0gcHJvcHMuZG90U291cmNlO1xuICBjb25zdCBtYXlSZW5kZXIgPSAhIShwcm9wcy5oYXNEb2N1bWVudEtleSB8fCBwcm9wcy5za2lwSWRlbnRpdHlHYXRlID09PSB0cnVlKTtcbiAgY29uc3QgW3N0YXR1cywgc2V0U3RhdHVzXSA9IFJlYWN0LnVzZVN0YXRlKCdpZGxlJyk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtvYmplY3RVcmwsIHNldE9iamVjdFVybF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3JlbmRlck5vbmNlLCBzZXRSZW5kZXJOb25jZV0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3Qgb2JqZWN0VXJsUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuXG4gIGNvbnN0IHJldm9rZUN1cnJlbnRVcmwgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9iamVjdFVybFJlZi5jdXJyZW50KSB7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVybFJlZi5jdXJyZW50KTtcbiAgICAgIG9iamVjdFVybFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgc2V0T2JqZWN0VXJsKG51bGwpO1xuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBydW4gPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWRvdFNvdXJjZSB8fCAhbWF5UmVuZGVyKSB7XG4gICAgICAgIHJldm9rZUN1cnJlbnRVcmwoKTtcbiAgICAgICAgc2V0U3RhdHVzKCdpZGxlJyk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIUdyYXBodml6V2FzbSkge1xuICAgICAgICByZXZva2VDdXJyZW50VXJsKCk7XG4gICAgICAgIHNldFN0YXR1cygnZXJyb3InKTtcbiAgICAgICAgc2V0RXJyb3IoJ0dyYXBoIHByZXZpZXcgbmVlZHMgZ3JhcGh2aXotd2FzbSAoYnVuZGxlIG9yIGluc3RhbGwpLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRTdGF0dXMoJ2xvYWRpbmcnKTtcbiAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgcmV2b2tlQ3VycmVudFVybCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgR3JhcGh2aXpXYXNtLmxvYWRXQVNNKCk7XG4gICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc3ZnID0gR3JhcGh2aXpXYXNtLmxheW91dChkb3RTb3VyY2UsICdzdmcnLCAnZG90Jyk7XG4gICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgaWYgKHR5cGVvZiBzdmcgIT09ICdzdHJpbmcnIHx8ICFzdmcudHJpbSgpKSB7XG4gICAgICAgICAgc2V0U3RhdHVzKCdlcnJvcicpO1xuICAgICAgICAgIHNldEVycm9yKCdHcmFwaHZpeiByZXR1cm5lZCBlbXB0eSBvdXRwdXQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbc3ZnXSwgeyB0eXBlOiAnaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04JyB9KTtcbiAgICAgICAgY29uc3QgbmV4dCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgIG9iamVjdFVybFJlZi5jdXJyZW50ID0gbmV4dDtcbiAgICAgICAgc2V0T2JqZWN0VXJsKG5leHQpO1xuICAgICAgICBzZXRTdGF0dXMoJ3JlYWR5Jyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgc2V0U3RhdHVzKCdlcnJvcicpO1xuICAgICAgICBzZXRFcnJvcigoZSAmJiBlLm1lc3NhZ2UpID8gU3RyaW5nKGUubWVzc2FnZSkgOiAnR3JhcGggbGF5b3V0IGZhaWxlZC4nKTtcbiAgICAgICAgcmV2b2tlQ3VycmVudFVybCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBydW4oKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgIHJldm9rZUN1cnJlbnRVcmwoKTtcbiAgICB9O1xuICB9LCBbZG90U291cmNlLCBtYXlSZW5kZXIsIHJldm9rZUN1cnJlbnRVcmxdKTtcblxuICBpZiAoIWRvdFNvdXJjZSB8fCAhbWF5UmVuZGVyKSByZXR1cm4gbnVsbDtcblxuICBpZiAoc3RhdHVzID09PSAnbG9hZGluZycgfHwgc3RhdHVzID09PSAnaWRsZScpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMXJlbScsIGNvbG9yOiAnIzY2NicgfX0gYXJpYS1idXN5PVwidHJ1ZVwiPlxuICAgICAgICBSZW5kZXJpbmcgZ3JhcGjigKZcbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpZiAoc3RhdHVzID09PSAnZXJyb3InICYmIGVycm9yKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwYWRkaW5nOiAnMC43NXJlbScsXG4gICAgICAgICAgYmFja2dyb3VuZDogJyNmZmY2ZjYnLFxuICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZmZjZGQyJyxcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IDYsXG4gICAgICAgICAgY29sb3I6ICcjOWYzYTM4J1xuICAgICAgICB9fVxuICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgPlxuICAgICAgICA8c3Ryb25nPkdyYXBoIHByZXZpZXc8L3N0cm9uZz5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjM1cmVtJywgd2hpdGVTcGFjZTogJ3ByZS13cmFwJyB9fT57ZXJyb3J9PC9kaXY+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC42NXJlbScgfX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRSZW5kZXJOb25jZSgobikgPT4gbiArIDEpfVxuICAgICAgICA+XG4gICAgICAgICAgUmV0cnkgcmVuZGVyXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChvYmplY3RVcmwpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17eyBvdmVyZmxvdzogJ2F1dG8nLCBtYXhIZWlnaHQ6IDU2MCwgdGV4dEFsaWduOiAnY2VudGVyJywgYmFja2dyb3VuZDogJyNmYWZhZmEnLCBib3JkZXJSYWRpdXM6IDYsIHBhZGRpbmc6ICcwLjVyZW0nIH19PlxuICAgICAgICA8aW1nXG4gICAgICAgICAgc3JjPXtvYmplY3RVcmx9XG4gICAgICAgICAgYWx0PVwiR3JhcGh2aXogZGlhZ3JhbVwiXG4gICAgICAgICAgc3R5bGU9e3sgbWF4V2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnYXV0bycsIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnIH19XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gR3JhcGhEb2N1bWVudFByZXZpZXc7XG5tb2R1bGUuZXhwb3J0cy5sb29rc0xpa2VEb3RTb3VyY2UgPSBsb29rc0xpa2VEb3RTb3VyY2U7XG4iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yIiwiZSIsInQiLCJyIiwiU3ltYm9sIiwibiIsIml0ZXJhdG9yIiwibyIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJwcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibmV4dCIsInB1c2giLCJpc0FycmF5IiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJCdXR0b24iLCJHcmFwaHZpeldhc20iLCJsb29rc0xpa2VEb3RTb3VyY2UiLCJ0ZXh0IiwibWltZSIsIlN0cmluZyIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJyZXBsYWNlIiwidHJpbVN0YXJ0IiwiR3JhcGhEb2N1bWVudFByZXZpZXciLCJwcm9wcyIsImRvdFNvdXJjZSIsIm1heVJlbmRlciIsImhhc0RvY3VtZW50S2V5Iiwic2tpcElkZW50aXR5R2F0ZSIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsInN0YXR1cyIsInNldFN0YXR1cyIsIl9SZWFjdCR1c2VTdGF0ZTMiLCJfUmVhY3QkdXNlU3RhdGU0IiwiZXJyb3IiLCJzZXRFcnJvciIsIl9SZWFjdCR1c2VTdGF0ZTUiLCJfUmVhY3QkdXNlU3RhdGU2Iiwib2JqZWN0VXJsIiwic2V0T2JqZWN0VXJsIiwiX1JlYWN0JHVzZVN0YXRlNyIsIl9SZWFjdCR1c2VTdGF0ZTgiLCJyZW5kZXJOb25jZSIsInNldFJlbmRlck5vbmNlIiwib2JqZWN0VXJsUmVmIiwidXNlUmVmIiwicmV2b2tlQ3VycmVudFVybCIsInVzZUNhbGxiYWNrIiwiY3VycmVudCIsIlVSTCIsInJldm9rZU9iamVjdFVSTCIsInVzZUVmZmVjdCIsImNhbmNlbGxlZCIsInJ1biIsIl9yZWYiLCJfY2FsbGVlIiwic3ZnIiwiYmxvYiIsIl90IiwiX2NvbnRleHQiLCJsb2FkV0FTTSIsImxheW91dCIsInRyaW0iLCJCbG9iIiwidHlwZSIsImNyZWF0ZU9iamVjdFVSTCIsIm1lc3NhZ2UiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJwYWRkaW5nIiwiY29sb3IiLCJiYWNrZ3JvdW5kIiwiYm9yZGVyIiwiYm9yZGVyUmFkaXVzIiwicm9sZSIsIm1hcmdpblRvcCIsIndoaXRlU3BhY2UiLCJzaXplIiwiYmFzaWMiLCJvbkNsaWNrIiwib3ZlcmZsb3ciLCJtYXhIZWlnaHQiLCJ0ZXh0QWxpZ24iLCJzcmMiLCJhbHQiLCJtYXhXaWR0aCIsImhlaWdodCIsInZlcnRpY2FsQWxpZ24iLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/GraphDocumentPreview.js\n\n}')},"./components/Home.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n// Dependencies\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n useLocation = _require.useLocation,\n Link = _require.Link;\nfunction scrollToHashElement(hash) {\n var raw = hash || \'\';\n var h = raw.startsWith(\'#\') ? raw.slice(1) : raw;\n if (!h) return;\n var el = document.getElementById(h);\n if (el && typeof el.scrollIntoView === \'function\') {\n window.requestAnimationFrame(function () {\n el.scrollIntoView({\n block: \'start\',\n behavior: \'smooth\'\n });\n });\n }\n}\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Card = _require2.Card,\n Form = _require2.Form,\n Grid = _require2.Grid,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Input = _require2.Input,\n Label = _require2.Label,\n Loader = _require2.Loader,\n Message = _require2.Message,\n Modal = _require2.Modal,\n Segment = _require2.Segment,\n Statistic = _require2.Statistic;\nvar ActivityStream = __webpack_require__(/*! ./ActivityStream */ "./components/ActivityStream.js");\nvar _require3 = __webpack_require__(/*! ../functions/hubNetworkStatus */ "./functions/hubNetworkStatus.js"),\n isHubNetworkStatusShape = _require3.isHubNetworkStatusShape,\n bridgeWebSocketLoadingHint = _require3.bridgeWebSocketLoadingHint;\nvar _require4 = __webpack_require__(/*! ../functions/hydrateHubNetworkStatusViaHttp */ "./functions/hydrateHubNetworkStatusViaHttp.js"),\n hydrateHubNetworkStatusViaHttp = _require4.hydrateHubNetworkStatusViaHttp;\nvar _require5 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require5.loadHubUiFeatureFlags;\nvar _require6 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require6.readHubAdminTokenFromBrowser;\nfunction formatBytes(n) {\n var v = Number(n);\n if (!Number.isFinite(v) || v < 0) return \'n/a\';\n if (v < 1024) return "".concat(v, " B");\n var units = [\'KB\', \'MB\', \'GB\', \'TB\', \'PB\'];\n var idx = -1;\n var cur = v;\n do {\n cur = cur / 1024;\n idx++;\n } while (cur >= 1024 && idx < units.length - 1);\n return "".concat(cur.toFixed(cur >= 100 ? 0 : cur >= 10 ? 1 : 2), " ").concat(units[idx]);\n}\nfunction formatDuration(secIn) {\n var sec = Number(secIn);\n if (!Number.isFinite(sec) || sec < 0) return \'n/a\';\n var d = Math.floor(sec / 86400);\n var h = Math.floor(sec % 86400 / 3600);\n var m = Math.floor(sec % 3600 / 60);\n if (d > 0) return "".concat(d, "d ").concat(h, "h");\n if (h > 0) return "".concat(h, "h ").concat(m, "m");\n if (m > 0) return "".concat(m, "m");\n return "".concat(Math.floor(sec), "s");\n}\nfunction PromoHero(_ref) {\n var onDismiss = _ref.onDismiss;\n return /*#__PURE__*/React.createElement(Segment, {\n id: "fabric-hub-promo",\n style: {\n background: \'linear-gradient(135deg, #1b1c1d 0%, #2d3436 100%)\',\n color: \'#f5f5f5\',\n padding: \'2.5em 2em\',\n borderRadius: \'8px\',\n marginBottom: \'1.25em\',\n position: \'relative\',\n overflow: \'hidden\'\n }\n }, typeof onDismiss === \'function\' ? /*#__PURE__*/React.createElement(Button, {\n icon: true,\n basic: true,\n inverted: true,\n size: "mini",\n title: "Dismiss promo",\n "aria-label": "Dismiss promo",\n style: {\n position: \'absolute\',\n top: \'0.75em\',\n right: \'0.75em\',\n opacity: 0.6\n },\n onClick: onDismiss\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "close"\n })) : null, /*#__PURE__*/React.createElement("div", {\n style: {\n maxWidth: \'52rem\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h1",\n inverted: true,\n style: {\n marginTop: 0,\n fontSize: \'1.75em\',\n lineHeight: 1.3\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cube",\n style: {\n fontSize: \'0.85em\',\n marginRight: \'0.35em\',\n verticalAlign: \'middle\'\n }\n }), "This is a Fabric Hub"), /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'1.1em\',\n lineHeight: 1.65,\n marginBottom: \'1em\',\n color: \'#d4d4d4\'\n }\n }, "A ", /*#__PURE__*/React.createElement("strong", {\n style: {\n color: \'#fff\'\n }\n }, "Fabric Hub"), " is a self-sovereign node that connects you to the Fabric network \\u2014 peer-to-peer messaging, document storage, Bitcoin integration, and cooperative multisig vaults, all running on your own hardware."), /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'1em\',\n lineHeight: 1.65,\n marginBottom: \'1.25em\',\n color: \'#bbb\'\n }\n }, "You are viewing ", /*#__PURE__*/React.createElement("strong", {\n style: {\n color: \'#ccc\'\n }\n }, "someone else\'s hub"), " right now. Everything here runs on their node. To own your data and identity, install your own."), /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n inverted: true,\n style: {\n marginBottom: \'0.65em\',\n fontSize: \'1.15em\'\n }\n }, "Run your own hub"), /*#__PURE__*/React.createElement(Grid, {\n columns: 3,\n stackable: true,\n doubling: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Grid.Column, null, /*#__PURE__*/React.createElement(Segment, {\n inverted: true,\n style: {\n background: \'rgba(255,255,255,0.08)\',\n height: \'100%\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n inverted: true,\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "desktop"\n }), " Desktop"), /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.92em\',\n lineHeight: 1.5,\n color: \'#ccc\'\n }\n }, "Download the Fabric Hub desktop app. One click installs the hub, Bitcoin node, and browser UI on macOS, Windows, or Linux."), /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\',\n color: \'#8ec8e8\'\n }\n }, "npm run desktop"))), /*#__PURE__*/React.createElement(Grid.Column, null, /*#__PURE__*/React.createElement(Segment, {\n inverted: true,\n style: {\n background: \'rgba(255,255,255,0.08)\',\n height: \'100%\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n inverted: true,\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "code"\n }), " Developer"), /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.92em\',\n lineHeight: 1.5,\n color: \'#ccc\'\n }\n }, "Clone the repo and start hacking. The hub is a Node.js service with a React UI, Bitcoin RPC, and Fabric P2P built in."), /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\',\n color: \'#8ec8e8\'\n }\n }, "git clone && npm start"))), /*#__PURE__*/React.createElement(Grid.Column, null, /*#__PURE__*/React.createElement(Segment, {\n inverted: true,\n style: {\n background: \'rgba(255,255,255,0.08)\',\n height: \'100%\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n inverted: true,\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "server"\n }), " Production"), /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.92em\',\n lineHeight: 1.5,\n color: \'#ccc\'\n }\n }, "Deploy on a VPS or home server for always-on peering, document hosting, and Bitcoin services with LAN or public access."), /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\',\n color: \'#8ec8e8\'\n }\n }, "npm run start:production")))), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.65em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: "a",\n href: "https://github.com/FabricLabs/hub.fabric.pub",\n target: "_blank",\n rel: "noopener noreferrer",\n primary: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "github"\n }), " View on GitHub"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/documents",\n basic: true,\n inverted: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate outline"\n }), " Browse documents"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings",\n basic: true,\n inverted: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "setting"\n }), " Explore this hub"))));\n}\nfunction StatCard(_ref2) {\n var icon = _ref2.icon,\n color = _ref2.color,\n label = _ref2.label,\n value = _ref2.value,\n sub = _ref2.sub;\n return /*#__PURE__*/React.createElement(Segment, {\n textAlign: "center",\n style: {\n margin: 0,\n padding: \'1em 0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Statistic, {\n size: "mini",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Statistic.Value, null, /*#__PURE__*/React.createElement(Icon, {\n name: icon,\n color: color || \'grey\',\n style: {\n marginRight: \'0.2em\',\n fontSize: \'0.85em\'\n }\n }), value != null ? value : \'—\'), /*#__PURE__*/React.createElement(Statistic.Label, {\n style: {\n fontSize: \'0.78em\',\n marginTop: \'0.35em\'\n }\n }, label)), sub ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.25em\',\n fontSize: \'0.82em\',\n color: \'#666\'\n }\n }, sub) : null);\n}\nfunction HealthPanel(_ref3) {\n var health = _ref3.health,\n loading = _ref3.loading,\n error = _ref3.error,\n onRefresh = _ref3.onRefresh;\n if (error) {\n return /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n padding: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n justifyContent: \'space-between\',\n alignItems: \'center\',\n flexWrap: \'wrap\',\n gap: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "heartbeat"\n }), " Node health"), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "mini",\n icon: "refresh",\n onClick: onRefresh,\n loading: loading\n })), /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n margin: \'0.5em 0 0\'\n }\n }, error));\n }\n var node = health && health.node;\n var disk = health && health.disk;\n var net = health && health.network;\n var uptime = node ? formatDuration(node.uptimeSec) : \'—\';\n var cpuPct = node && node.cpu && Number.isFinite(Number(node.cpu.processPercent)) ? "".concat(Number(node.cpu.processPercent).toFixed(1), "%") : null;\n var memRss = node && node.memory ? formatBytes(node.memory.rss) : null;\n var diskUsed = disk ? "".concat(formatBytes(disk.usedBytes), " / ").concat(formatBytes(disk.usedBytes + (disk.availableBytes || 0))) : null;\n var diskPct = disk && Number.isFinite(Number(disk.usedPercent)) ? "".concat(Number(disk.usedPercent).toFixed(1), "%") : null;\n var dns = net && net.dnsProbe;\n var probes = net && Array.isArray(net.localProbes) ? net.localProbes : [];\n var probeOk = probes.filter(function (p) {\n return p.ok;\n }).length;\n return /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n padding: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n justifyContent: \'space-between\',\n alignItems: \'center\',\n flexWrap: \'wrap\',\n gap: \'0.35em\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "heartbeat"\n }), " Node health"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\'\n }\n }, health && health.now ? /*#__PURE__*/React.createElement("span", {\n style: {\n fontSize: \'0.82em\',\n color: \'#888\'\n }\n }, new Date(health.now).toLocaleTimeString()) : null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "mini",\n icon: "refresh",\n onClick: onRefresh,\n loading: loading\n }))), !health ? /*#__PURE__*/React.createElement("div", {\n style: {\n color: \'#888\',\n fontSize: \'0.9em\'\n }\n }, "Loading health data\\u2026") : /*#__PURE__*/React.createElement(Grid, {\n columns: 2,\n stackable: true,\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Grid.Row, {\n style: {\n padding: \'0.25em 0\'\n }\n }, /*#__PURE__*/React.createElement(Grid.Column, null, /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.9em\',\n lineHeight: 1.65\n }\n }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Icon, {\n name: "server",\n color: "blue"\n }), " ", /*#__PURE__*/React.createElement("strong", null, "Host:"), " ", node && node.hostname ? node.hostname : \'—\'), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Icon, {\n name: "clock outline",\n color: "blue"\n }), " ", /*#__PURE__*/React.createElement("strong", null, "Uptime:"), " ", uptime), cpuPct ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Icon, {\n name: "microchip",\n color: "blue"\n }), " ", /*#__PURE__*/React.createElement("strong", null, "CPU:"), " ", cpuPct, " (", node.cpu.cores, " core", node.cpu.cores !== 1 ? \'s\' : \'\', ")") : null, node && Array.isArray(node.loadAverage) ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Icon, {\n name: "tachometer alternate",\n color: "blue"\n }), " ", /*#__PURE__*/React.createElement("strong", null, "Load:"), " ", node.loadAverage.map(function (v) {\n return Number(v || 0).toFixed(2);\n }).join(\' / \')) : null, memRss ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Icon, {\n name: "database",\n color: "blue"\n }), " ", /*#__PURE__*/React.createElement("strong", null, "Memory:"), " ", memRss) : null)), /*#__PURE__*/React.createElement(Grid.Column, null, /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.9em\',\n lineHeight: 1.65\n }\n }, diskUsed ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Icon, {\n name: "hdd outline",\n color: "teal"\n }), " ", /*#__PURE__*/React.createElement("strong", null, "Disk:"), " ", diskUsed, " (", diskPct, ")") : null, disk && disk.availableBytes != null ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Icon, {\n name: "hdd outline",\n color: "teal"\n }), " ", /*#__PURE__*/React.createElement("strong", null, "Free:"), " ", formatBytes(disk.availableBytes)) : null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Icon, {\n name: "signal",\n color: dns && dns.ok ? \'green\' : \'red\'\n }), /*#__PURE__*/React.createElement("strong", null, "DNS:"), " ", dns ? dns.ok ? \'ok\' : \'failed\' : \'—\'), probes.length > 0 ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Icon, {\n name: "plug",\n color: probeOk === probes.length ? \'green\' : \'yellow\'\n }), /*#__PURE__*/React.createElement("strong", null, "Services:"), " ", probeOk, "/", probes.length, " reachable") : null)))));\n}\nvar Home = /*#__PURE__*/function (_React$Component) {\n function Home(props) {\n var _this;\n _classCallCheck(this, Home);\n _this = _callSuper(this, Home, [props]);\n _defineProperty(_this, "_openConnectModal", function () {\n _this.setState({\n connectModalOpen: true,\n connectPeerIdDraft: \'\'\n });\n });\n _defineProperty(_this, "_closeConnectModal", function () {\n _this.setState({\n connectModalOpen: false,\n connectPeerIdDraft: \'\'\n });\n });\n _defineProperty(_this, "_submitConnectPeerId", function () {\n var onConnectWebRTCPeer = _this.props.onConnectWebRTCPeer;\n var value = String(_this.state.connectPeerIdDraft || \'\').trim();\n if (!value || typeof onConnectWebRTCPeer !== \'function\') return;\n onConnectWebRTCPeer(value);\n _this.setState({\n connectModalOpen: false,\n connectPeerIdDraft: \'\'\n });\n });\n _this.state = {\n connectModalOpen: false,\n connectPeerIdDraft: \'\',\n networkStatusRenderTick: 0,\n lastNetworkSnapshotAt: null,\n snapshotRefreshPending: false,\n operatorHealth: null,\n operatorHealthLoading: false,\n operatorHealthError: null,\n promoDismissed: false\n };\n _this._snapshotRefreshSafetyTimer = null;\n _this._healthRefreshTimer = null;\n _this._onNetworkStatusEvent = function () {\n if (_this._snapshotRefreshSafetyTimer) {\n clearTimeout(_this._snapshotRefreshSafetyTimer);\n _this._snapshotRefreshSafetyTimer = null;\n }\n _this.setState(function (s) {\n return {\n networkStatusRenderTick: (s.networkStatusRenderTick || 0) + 1,\n lastNetworkSnapshotAt: Date.now(),\n snapshotRefreshPending: false\n };\n });\n };\n _this._homeHttpFallbackTimer = null;\n _this._homeHttpHydrateAttempted = false;\n return _this;\n }\n _inherits(Home, _React$Component);\n return _createClass(Home, [{\n key: "componentDidMount",\n value: function componentDidMount() {\n var _this2 = this;\n if (typeof window !== \'undefined\') {\n window.addEventListener(\'networkStatusUpdate\', this._onNetworkStatusEvent);\n }\n this._scheduleHomeNetworkHttpFallback();\n this._touchSnapshotTimeIfReady();\n setTimeout(function () {\n return _this2._touchSnapshotTimeIfReady();\n }, 0);\n this._refreshOperatorHealth();\n this._healthRefreshTimer = setInterval(function () {\n return _this2._refreshOperatorHealth();\n }, 30000);\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n if (typeof window !== \'undefined\') {\n window.removeEventListener(\'networkStatusUpdate\', this._onNetworkStatusEvent);\n }\n if (this._homeHttpFallbackTimer) {\n clearTimeout(this._homeHttpFallbackTimer);\n this._homeHttpFallbackTimer = null;\n }\n if (this._snapshotRefreshSafetyTimer) {\n clearTimeout(this._snapshotRefreshSafetyTimer);\n this._snapshotRefreshSafetyTimer = null;\n }\n if (this._healthRefreshTimer) {\n clearInterval(this._healthRefreshTimer);\n this._healthRefreshTimer = null;\n }\n }\n }, {\n key: "componentDidUpdate",\n value: function componentDidUpdate() {\n this._scheduleHomeNetworkHttpFallback();\n this._touchSnapshotTimeIfReady();\n }\n }, {\n key: "_touchSnapshotTimeIfReady",\n value: function _touchSnapshotTimeIfReady() {\n var ref = this.props.bridgeRef || this.props.bridge;\n var cur = ref && ref.current;\n var ns = cur && (cur.networkStatus || cur.lastNetworkStatus);\n if (!isHubNetworkStatusShape(ns)) return;\n if (this.state.lastNetworkSnapshotAt != null) return;\n this.setState({\n lastNetworkSnapshotAt: Date.now()\n });\n }\n }, {\n key: "_scheduleHomeNetworkHttpFallback",\n value: function _scheduleHomeNetworkHttpFallback() {\n var _this3 = this;\n if (typeof window === \'undefined\') return;\n if (this._homeHttpHydrateAttempted) return;\n var ref = this.props.bridgeRef || this.props.bridge;\n var current = ref && ref.current;\n if (!current) return;\n var ns = current.networkStatus || current.lastNetworkStatus;\n if (isHubNetworkStatusShape(ns)) {\n if (this._homeHttpFallbackTimer) {\n clearTimeout(this._homeHttpFallbackTimer);\n this._homeHttpFallbackTimer = null;\n }\n return;\n }\n if (this._homeHttpFallbackTimer) return;\n this._homeHttpFallbackTimer = setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var r2, cur, n2, origin;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _this3._homeHttpFallbackTimer = null;\n _this3._homeHttpHydrateAttempted = true;\n r2 = _this3.props.bridgeRef || _this3.props.bridge;\n cur = r2 && r2.current;\n if (cur) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n n2 = cur.networkStatus || cur.lastNetworkStatus;\n if (!isHubNetworkStatusShape(n2)) {\n _context.n = 2;\n break;\n }\n return _context.a(2);\n case 2:\n origin = window.location && window.location.origin ? window.location.origin : \'\';\n _context.n = 3;\n return hydrateHubNetworkStatusViaHttp(cur, origin);\n case 3:\n return _context.a(2);\n }\n }, _callee);\n })), 2500);\n }\n }, {\n key: "_refreshOperatorHealth",\n value: function () {\n var _refreshOperatorHealth2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var res, json, _t;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n this.setState({\n operatorHealthLoading: true,\n operatorHealthError: null\n });\n _context2.p = 1;\n _context2.n = 2;\n return fetch(\'/services/operator/health\', {\n headers: {\n Accept: \'application/json\'\n }\n });\n case 2:\n res = _context2.v;\n _context2.n = 3;\n return res.json()["catch"](function () {\n return {};\n });\n case 3:\n json = _context2.v;\n if (res.ok) {\n _context2.n = 4;\n break;\n }\n throw new Error(json && json.message || "".concat(res.status, " ").concat(res.statusText));\n case 4:\n this.setState({\n operatorHealth: json || null\n });\n _context2.n = 6;\n break;\n case 5:\n _context2.p = 5;\n _t = _context2.v;\n this.setState({\n operatorHealthError: _t && _t.message ? _t.message : String(_t)\n });\n case 6:\n _context2.p = 6;\n this.setState({\n operatorHealthLoading: false\n });\n return _context2.f(6);\n case 7:\n return _context2.a(2);\n }\n }, _callee2, this, [[1, 5, 6, 7]]);\n }));\n function _refreshOperatorHealth() {\n return _refreshOperatorHealth2.apply(this, arguments);\n }\n return _refreshOperatorHealth;\n }()\n }, {\n key: "render",\n value: function render() {\n var _this4 = this;\n var _this$props = this.props,\n bridge = _this$props.bridge,\n bridgeRef = _this$props.bridgeRef,\n networkStatusFromEvent = _this$props.networkStatusFromEvent,\n onDiscoverWebRTCPeers = _this$props.onDiscoverWebRTCPeers,\n onRepublishWebRTCOffer = _this$props.onRepublishWebRTCOffer,\n onConnectWebRTCPeer = _this$props.onConnectWebRTCPeer,\n onRequireUnlock = _this$props.onRequireUnlock,\n adminToken = _this$props.adminToken,\n auth = _this$props.auth;\n var publicHubVisitor = !!(this.props && this.props.publicHubVisitor);\n var showHomeOperatorLinks = !publicHubVisitor;\n var uf = loadHubUiFeatureFlags();\n var hasHubAdminForPeers = !!readHubAdminTokenFromBrowser(adminToken);\n var ref = bridgeRef || bridge;\n var current = ref && ref.current;\n var candidateFromEvent = networkStatusFromEvent;\n var candidateFromRef = current && current.networkStatus;\n var candidate = isHubNetworkStatusShape(candidateFromEvent) ? candidateFromEvent : isHubNetworkStatusShape(candidateFromRef) ? candidateFromRef : null;\n var fallback = current && current.lastNetworkStatus;\n var networkStatus = isHubNetworkStatusShape(candidate) ? candidate : isHubNetworkStatusShape(fallback) ? fallback : null;\n var network = networkStatus && networkStatus.network;\n var peers = Array.isArray(networkStatus && networkStatus.peers) ? networkStatus.peers : [];\n var connectedPeers = peers.filter(function (p) {\n return p && p.status === \'connected\';\n });\n var webrtcPeers = Array.isArray(networkStatus && networkStatus.webrtcPeers) ? networkStatus.webrtcPeers : [];\n var state = networkStatus && networkStatus.state;\n var stateStatusUpper = state && state.status != null ? String(state.status).trim().toUpperCase() : \'\';\n var bridgeFabricPaused = stateStatusUpper === \'PAUSED\';\n var fabricPeerId = networkStatus && networkStatus.fabricPeerId ? String(networkStatus.fabricPeerId) : null;\n var legacyUnstableId = !fabricPeerId && networkStatus && networkStatus.contract != null ? String(networkStatus.contract) : null;\n var shareNodeId = fabricPeerId || legacyUnstableId;\n var hostPort = network && network.address ? String(network.address) : null;\n var shareableString = [shareNodeId, hostPort].filter(Boolean).join(\'\\n\');\n var meshStatus = current && typeof current.webrtcMeshStatus !== \'undefined\' ? current.webrtcMeshStatus : null;\n var isOnline = !!networkStatus;\n var publishedMap = networkStatus && networkStatus.publishedDocuments && _typeof(networkStatus.publishedDocuments) === \'object\' ? networkStatus.publishedDocuments : {};\n var publishedCount = Object.values(publishedMap).filter(function (d) {\n return d && d.id;\n }).length;\n var transportHint = bridgeWebSocketLoadingHint(current);\n var dataStatusLine = function () {\n if (!transportHint) return \'Preparing a connection to this hub.\';\n if (/waiting for network status/i.test(transportHint)) {\n return \'Next: the hub sends your network snapshot (peers, documents, node id).\';\n }\n if (/Opening WebSocket|Reconnecting/i.test(transportHint)) {\n return \'The browser bridge must connect before status can load.\';\n }\n return null;\n }();\n var hubLoadingHeader = function () {\n if (transportHint && /waiting for network status/i.test(transportHint)) return \'Connected — waiting for hub data\';\n if (transportHint && /Opening WebSocket/i.test(transportHint)) return \'Opening WebSocket…\';\n if (transportHint && /Reconnecting/i.test(transportHint)) return \'Reconnecting…\';\n return \'Waiting for hub snapshot…\';\n }();\n var hubLoadingLead = transportHint || \'Opening a connection to the hub…\';\n var bitcoin = networkStatus && networkStatus.bitcoin && _typeof(networkStatus.bitcoin) === \'object\' ? networkStatus.bitcoin : null;\n var clockVal = networkStatus && networkStatus.clock;\n var snapshotUpdated = this.state.lastNetworkSnapshotAt != null && typeof this.state.lastNetworkSnapshotAt === \'number\' ? new Date(this.state.lastNetworkSnapshotAt).toLocaleTimeString(undefined, {\n hour: \'2-digit\',\n minute: \'2-digit\',\n second: \'2-digit\'\n }) : null;\n var contractId = networkStatus && networkStatus.contract != null ? String(networkStatus.contract) : \'\';\n var contractShort = contractId.length > 18 ? "".concat(contractId.slice(0, 10), "\\u2026").concat(contractId.slice(-6)) : contractId;\n return /*#__PURE__*/React.createElement("fabric-hub-home", {\n "class": "fade-in"\n }, !networkStatus ? /*#__PURE__*/React.createElement(Card, {\n fluid: true,\n "data-home-network-tick": this.state.networkStatusRenderTick\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Segment, {\n basic: true\n }, /*#__PURE__*/React.createElement(Segment, {\n placeholder: true,\n style: {\n minHeight: \'30vh\',\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'center\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n textAlign: \'center\',\n maxWidth: \'28rem\'\n }\n }, /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: "centered",\n size: "large"\n }), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1em\',\n textAlign: \'center\'\n }\n }, hubLoadingHeader, /*#__PURE__*/React.createElement(Header.Subheader, {\n style: {\n textAlign: \'center\',\n lineHeight: 1.5\n }\n }, /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\'\n }\n }, hubLoadingLead), dataStatusLine && dataStatusLine !== hubLoadingLead ? /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n color: \'#888\',\n fontSize: \'0.92em\',\n marginTop: \'0.35em\'\n }\n }, dataStatusLine) : null)), typeof this.props.onRefreshNetworkStatus === \'function\' && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'1.1em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n try {\n _this4.props.onRefreshNetworkStatus();\n } catch (e) {}\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Request status again"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#888\',\n fontSize: \'0.85em\',\n marginTop: \'0.75em\',\n marginBottom: 0,\n lineHeight: 1.45\n }\n }, "If this stays here, confirm the hub is up and the WebSocket bridge is connected."))))))) : /*#__PURE__*/React.createElement(React.Fragment, null, uf.promo && !this.state.promoDismissed ? /*#__PURE__*/React.createElement(PromoHero, {\n onDismiss: function onDismiss() {\n return _this4.setState({\n promoDismissed: true\n });\n }\n }) : null, /*#__PURE__*/React.createElement(Card, {\n fluid: true,\n "data-home-network-tick": this.state.networkStatusRenderTick\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n justifyContent: \'space-between\',\n alignItems: \'center\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Card.Header, {\n style: {\n margin: 0\n }\n }, "Node overview"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\'\n }\n }, snapshotUpdated ? /*#__PURE__*/React.createElement("span", {\n style: {\n fontSize: \'0.82em\',\n color: \'#888\'\n }\n }, "Updated ", snapshotUpdated) : null, typeof this.props.onRefreshNetworkStatus === \'function\' ? /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "mini",\n basic: true,\n icon: true,\n "aria-label": "Refresh hub network snapshot",\n disabled: this.state.snapshotRefreshPending,\n loading: this.state.snapshotRefreshPending,\n onClick: function onClick() {\n try {\n _this4.setState({\n snapshotRefreshPending: true\n });\n if (_this4._snapshotRefreshSafetyTimer) clearTimeout(_this4._snapshotRefreshSafetyTimer);\n _this4._snapshotRefreshSafetyTimer = setTimeout(function () {\n _this4._snapshotRefreshSafetyTimer = null;\n _this4.setState({\n snapshotRefreshPending: false\n });\n }, 10000);\n _this4.props.onRefreshNetworkStatus();\n } catch (e) {\n _this4.setState({\n snapshotRefreshPending: false\n });\n }\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n })) : null)), /*#__PURE__*/React.createElement(Card.Description, null, /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginBottom: \'0.85em\',\n padding: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n margin: \'0 0 0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "id badge"\n }), " Identity & network"), /*#__PURE__*/React.createElement(Grid, {\n columns: 2,\n stackable: true,\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Grid.Row, {\n style: {\n padding: \'0.15em 0\'\n }\n }, /*#__PURE__*/React.createElement(Grid.Column, null, /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.9em\',\n lineHeight: 1.75\n }\n }, fabricPeerId ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Fabric id:"), \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.88em\'\n },\n title: fabricPeerId\n }, fabricPeerId.length > 20 ? "".concat(fabricPeerId.slice(0, 10), "\\u2026").concat(fabricPeerId.slice(-8)) : fabricPeerId)) : null, hostPort ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Listen:"), " ", /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.88em\'\n }\n }, hostPort)) : null, contractShort ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Contract:"), " ", /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.88em\'\n },\n title: contractId\n }, contractShort)) : null)), /*#__PURE__*/React.createElement(Grid.Column, null, /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.9em\',\n lineHeight: 1.75\n }\n }, uf.peers && hasHubAdminForPeers ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Peers:"), " ", connectedPeers.length, " connected / ", peers.length, " known", \' · \', /*#__PURE__*/React.createElement(Link, {\n to: "/peers",\n style: {\n fontSize: \'0.92em\'\n }\n }, "Manage")), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "WebRTC registry:"), " ", webrtcPeers.length, meshStatus && Number(meshStatus.connected) > 0 ? " (".concat(meshStatus.connected, " mesh)") : \'\')) : null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Documents:"), " ", publishedCount, " published"))))), uf.peers && hasHubAdminForPeers && shareableString ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n try {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n navigator.clipboard.writeText(shareableString);\n }\n } catch (e) {}\n },\n title: "Copy Fabric node ID and listen address"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n }), "Copy node id")) : null), bitcoin ? /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginBottom: \'0.85em\',\n padding: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n margin: \'0 0 0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin",\n color: "orange"\n }), " Bitcoin"), bitcoin.available ? /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.9em\',\n lineHeight: 1.75\n }\n }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "green",\n style: {\n marginRight: \'0.5em\'\n }\n }, "Available"), /*#__PURE__*/React.createElement("strong", null, "Network:"), " ", bitcoin.network || \'—\', bitcoin.height != null ? /*#__PURE__*/React.createElement("span", null, " \\xB7 ", /*#__PURE__*/React.createElement("strong", null, "Height:"), " ", bitcoin.height) : null), bitcoin.bestBlockHash ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Tip:"), " ", /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\',\n wordBreak: \'break-all\'\n }\n }, String(bitcoin.bestBlockHash).slice(0, 16), "\\u2026")) : null, bitcoin.mempoolTxCount != null ? /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("strong", null, "Mempool:"), " ", bitcoin.mempoolTxCount, " tx", bitcoin.mempoolBytes ? " (".concat(formatBytes(bitcoin.mempoolBytes), ")") : \'\') : null, showHomeOperatorLinks ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin"\n }, "Bitcoin dashboard"), uf.bitcoinLightning ? /*#__PURE__*/React.createElement(React.Fragment, null, \' · \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/lightning"\n }, "Lightning")) : null, \' · \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions?scope=wallet"\n }, "Wallet")) : null) : /*#__PURE__*/React.createElement("div", {\n style: {\n color: \'#888\',\n fontSize: \'0.9em\'\n }\n }, bitcoin.message ? String(bitcoin.message) : \'Bitcoin service is not available.\')) : null, /*#__PURE__*/React.createElement(HealthPanel, {\n health: this.state.operatorHealth,\n loading: this.state.operatorHealthLoading,\n error: this.state.operatorHealthError,\n onRefresh: function onRefresh() {\n return _this4._refreshOperatorHealth();\n }\n }), showHomeOperatorLinks ? /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: \'0.85em\',\n padding: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n margin: \'0 0 0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "compass outline"\n }), " Quick links"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/documents",\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate outline"\n }), " Documents"), uf.peers ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/peers",\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sitemap"\n }), " Peers") : null, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings",\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "setting"\n }), " Settings"), bitcoin && bitcoin.available ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), " Bitcoin") : null, uf.sidechain ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/federations",\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users"\n }), " Federations") : null, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/contracts",\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file code outline"\n }), " Contracts"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings/collaboration",\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "handshake outline"\n }), " Collaboration"), uf.activities ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/activities",\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "list alternate outline"\n }), " Activity log") : null, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings/admin",\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield"\n }), " Admin"))) : null, !hasHubAdminForPeers && showHomeOperatorLinks ? /*#__PURE__*/React.createElement(Message, {\n size: "small",\n style: {\n marginTop: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Admin token not saved"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.25em 0 0\',\n lineHeight: 1.45\n }\n }, "Paste your operator token in ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), " to unlock peer details, full statistics, and operator controls.")) : null, !uf.peers && showHomeOperatorLinks ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Peers & WebRTC hidden"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.25em 0 0\',\n lineHeight: 1.45\n }\n }, "Enable the ", /*#__PURE__*/React.createElement("strong", null, "peers"), " flag under ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings/admin"\n }, "Admin \\u2192 Feature visibility"), ".")) : null)))), networkStatus ? /*#__PURE__*/React.createElement(Segment, {\n role: "region",\n style: {\n marginTop: \'1.25em\'\n },\n "aria-labelledby": "home-global-chat-heading"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "home-global-chat-heading",\n style: {\n marginTop: 0\n }\n }, "Global chat"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginTop: \'-0.25em\',\n marginBottom: \'0.75em\'\n }\n }, uf.activities ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Link, {\n to: "/notifications"\n }, "Notifications"), \' · \', /*#__PURE__*/React.createElement(Link, {\n to: "/activities"\n }, "Activity log")) : null, uf.activities ? \' · \' : \'\', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/security"\n }, "Delegation & signing")), /*#__PURE__*/React.createElement("div", {\n style: {\n minHeight: \'12rem\'\n }\n }, /*#__PURE__*/React.createElement(ActivityStream, {\n bridge: ref,\n bridgeRef: ref,\n adminToken: adminToken,\n identity: auth,\n onRequireUnlock: onRequireUnlock,\n includeHeader: false,\n entryTypeFilter: "chat"\n }))) : null, /*#__PURE__*/React.createElement(Modal, {\n open: this.state.connectModalOpen,\n size: "tiny",\n onClose: this._closeConnectModal,\n closeOnEscape: true,\n closeOnDimmerClick: true\n }, /*#__PURE__*/React.createElement(Modal.Header, null, "Connect to WebRTC peer"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement(Form, {\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n _this4._submitConnectPeerId();\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "home-webrtc-peer-id"\n }, "Peer ID"), /*#__PURE__*/React.createElement(Input, {\n id: "home-webrtc-peer-id",\n placeholder: "fabric-bridge-\\u2026",\n value: this.state.connectPeerIdDraft,\n onChange: function onChange(e) {\n return _this4.setState({\n connectPeerIdDraft: e.target.value\n });\n }\n })))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: this._closeConnectModal\n }, "Cancel"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n onClick: this._submitConnectPeerId\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "plug"\n }), "Connect"))));\n }\n }]);\n}(React.Component);\nfunction HomeWithLocation(props) {\n var location = useLocation();\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n networkStatusFromEvent = _React$useState2[0],\n setNetworkStatusFromEvent = _React$useState2[1];\n React.useEffect(function () {\n var seed = function seed() {\n var inst = props.bridgeRef && props.bridgeRef.current;\n var n = inst && inst.networkStatus;\n if (isHubNetworkStatusShape(n)) setNetworkStatusFromEvent(n);\n };\n seed();\n var t = setTimeout(seed, 0);\n return function () {\n return clearTimeout(t);\n };\n }, []);\n React.useEffect(function () {\n var onNs = function onNs(e) {\n var n = e.detail && e.detail.networkStatus;\n setNetworkStatusFromEvent(n && _typeof(n) === \'object\' && isHubNetworkStatusShape(n) ? n : null);\n };\n window.addEventListener(\'networkStatusUpdate\', onNs);\n return function () {\n return window.removeEventListener(\'networkStatusUpdate\', onNs);\n };\n }, []);\n React.useLayoutEffect(function () {\n scrollToHashElement(location.hash);\n }, [location.pathname, location.hash]);\n return /*#__PURE__*/React.createElement(Home, _extends({}, props, {\n location: location,\n networkStatusFromEvent: networkStatusFromEvent\n }));\n}\nmodule.exports = HomeWithLocation;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUlwWixDQUFDLENBQUNvWixNQUFNLENBQUM5SCxhQUFhO01BQzVDeUgseUJBQXlCLENBQUNoWixDQUFDLElBQUlvQyxPQUFBLENBQU9wQyxDQUFDLE1BQUssUUFBUSxJQUFJOEgsdUJBQXVCLENBQUM5SCxDQUFDLENBQUMsR0FBR0EsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNoRyxDQUFDO0lBQ0QwRyxNQUFNLENBQUM4SixnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRTRJLElBQUksQ0FBQztJQUNwRCxPQUFPO01BQUEsT0FBTTFTLE1BQU0sQ0FBQ3FLLG1CQUFtQixDQUFDLHFCQUFxQixFQUFFcUksSUFBSSxDQUFDO0lBQUE7RUFDdEUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOeFQsS0FBSyxDQUFDMFQsZUFBZSxDQUFDLFlBQU07SUFDMUJyVCxtQkFBbUIsQ0FBQzhMLFFBQVEsQ0FBQzdMLElBQUksQ0FBQztFQUNwQyxDQUFDLEVBQUUsQ0FBQzZMLFFBQVEsQ0FBQ3dILFFBQVEsRUFBRXhILFFBQVEsQ0FBQzdMLElBQUksQ0FBQyxDQUFDO0VBQ3RDLG9CQUFPTixLQUFBLENBQUF5RCxhQUFBLENBQUN5RixJQUFJLEVBQUFsUCxRQUFBLEtBQUtvUCxLQUFLO0lBQUUrQyxRQUFRLEVBQUVBLFFBQVM7SUFBQ2lCLHNCQUFzQixFQUFFQTtFQUF1QixFQUFFLENBQUM7QUFDaEc7QUFFQXdHLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHYixnQkFBZ0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvSG9tZS5qcz8xYmRmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gRGVwZW5kZW5jaWVzXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IHVzZUxvY2F0aW9uLCBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5cbmZ1bmN0aW9uIHNjcm9sbFRvSGFzaEVsZW1lbnQgKGhhc2gpIHtcbiAgY29uc3QgcmF3ID0gaGFzaCB8fCAnJztcbiAgY29uc3QgaCA9IHJhdy5zdGFydHNXaXRoKCcjJykgPyByYXcuc2xpY2UoMSkgOiByYXc7XG4gIGlmICghaCkgcmV0dXJuO1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGgpO1xuICBpZiAoZWwgJiYgdHlwZW9mIGVsLnNjcm9sbEludG9WaWV3ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnc3RhcnQnLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3Qge1xuICBCdXR0b24sXG4gIENhcmQsXG4gIEZvcm0sXG4gIEdyaWQsXG4gIEhlYWRlcixcbiAgSWNvbixcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBMb2FkZXIsXG4gIE1lc3NhZ2UsXG4gIE1vZGFsLFxuICBTZWdtZW50LFxuICBTdGF0aXN0aWNcbn0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuXG5jb25zdCBBY3Rpdml0eVN0cmVhbSA9IHJlcXVpcmUoJy4vQWN0aXZpdHlTdHJlYW0nKTtcbmNvbnN0IHsgaXNIdWJOZXR3b3JrU3RhdHVzU2hhcGUsIGJyaWRnZVdlYlNvY2tldExvYWRpbmdIaW50IH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViTmV0d29ya1N0YXR1cycpO1xuY29uc3QgeyBoeWRyYXRlSHViTmV0d29ya1N0YXR1c1ZpYUh0dHAgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9oeWRyYXRlSHViTmV0d29ya1N0YXR1c1ZpYUh0dHAnKTtcbmNvbnN0IHsgbG9hZEh1YlVpRmVhdHVyZUZsYWdzIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViVWlGZWF0dXJlRmxhZ3MnKTtcbmNvbnN0IHsgcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YkFkbWluVG9rZW5Ccm93c2VyJyk7XG5cbmZ1bmN0aW9uIGZvcm1hdEJ5dGVzIChuKSB7XG4gIGNvbnN0IHYgPSBOdW1iZXIobik7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHYpIHx8IHYgPCAwKSByZXR1cm4gJ24vYSc7XG4gIGlmICh2IDwgMTAyNCkgcmV0dXJuIGAke3Z9IEJgO1xuICBjb25zdCB1bml0cyA9IFsnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInXTtcbiAgbGV0IGlkeCA9IC0xO1xuICBsZXQgY3VyID0gdjtcbiAgZG8ge1xuICAgIGN1ciA9IGN1ciAvIDEwMjQ7XG4gICAgaWR4Kys7XG4gIH0gd2hpbGUgKGN1ciA+PSAxMDI0ICYmIGlkeCA8IHVuaXRzLmxlbmd0aCAtIDEpO1xuICByZXR1cm4gYCR7Y3VyLnRvRml4ZWQoY3VyID49IDEwMCA/IDAgOiBjdXIgPj0gMTAgPyAxIDogMil9ICR7dW5pdHNbaWR4XX1gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREdXJhdGlvbiAoc2VjSW4pIHtcbiAgY29uc3Qgc2VjID0gTnVtYmVyKHNlY0luKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc2VjKSB8fCBzZWMgPCAwKSByZXR1cm4gJ24vYSc7XG4gIGNvbnN0IGQgPSBNYXRoLmZsb29yKHNlYyAvIDg2NDAwKTtcbiAgY29uc3QgaCA9IE1hdGguZmxvb3IoKHNlYyAlIDg2NDAwKSAvIDM2MDApO1xuICBjb25zdCBtID0gTWF0aC5mbG9vcigoc2VjICUgMzYwMCkgLyA2MCk7XG4gIGlmIChkID4gMCkgcmV0dXJuIGAke2R9ZCAke2h9aGA7XG4gIGlmIChoID4gMCkgcmV0dXJuIGAke2h9aCAke219bWA7XG4gIGlmIChtID4gMCkgcmV0dXJuIGAke219bWA7XG4gIHJldHVybiBgJHtNYXRoLmZsb29yKHNlYyl9c2A7XG59XG5cbmZ1bmN0aW9uIFByb21vSGVybyAoeyBvbkRpc21pc3MgfSkge1xuICByZXR1cm4gKFxuICAgIDxTZWdtZW50XG4gICAgICBpZD1cImZhYnJpYy1odWItcHJvbW9cIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYmFja2dyb3VuZDogJ2xpbmVhci1ncmFkaWVudCgxMzVkZWcsICMxYjFjMWQgMCUsICMyZDM0MzYgMTAwJSknLFxuICAgICAgICBjb2xvcjogJyNmNWY1ZjUnLFxuICAgICAgICBwYWRkaW5nOiAnMi41ZW0gMmVtJyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICAgICAgbWFyZ2luQm90dG9tOiAnMS4yNWVtJyxcbiAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgfX1cbiAgICA+XG4gICAgICB7dHlwZW9mIG9uRGlzbWlzcyA9PT0gJ2Z1bmN0aW9uJyA/IChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGljb25cbiAgICAgICAgICBiYXNpY1xuICAgICAgICAgIGludmVydGVkXG4gICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgIHRpdGxlPVwiRGlzbWlzcyBwcm9tb1wiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkRpc21pc3MgcHJvbW9cIlxuICAgICAgICAgIHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6ICcwLjc1ZW0nLCByaWdodDogJzAuNzVlbScsIG9wYWNpdHk6IDAuNiB9fVxuICAgICAgICAgIG9uQ2xpY2s9e29uRGlzbWlzc31cbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJjbG9zZVwiIC8+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8ZGl2IHN0eWxlPXt7IG1heFdpZHRoOiAnNTJyZW0nIH19PlxuICAgICAgICA8SGVhZGVyIGFzPVwiaDFcIiBpbnZlcnRlZCBzdHlsZT17eyBtYXJnaW5Ub3A6IDAsIGZvbnRTaXplOiAnMS43NWVtJywgbGluZUhlaWdodDogMS4zIH19PlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJjdWJlXCIgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nLCBtYXJnaW5SaWdodDogJzAuMzVlbScsIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnIH19IC8+XG4gICAgICAgICAgVGhpcyBpcyBhIEZhYnJpYyBIdWJcbiAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiAnMS4xZW0nLCBsaW5lSGVpZ2h0OiAxLjY1LCBtYXJnaW5Cb3R0b206ICcxZW0nLCBjb2xvcjogJyNkNGQ0ZDQnIH19PlxuICAgICAgICAgIEEgPHN0cm9uZyBzdHlsZT17eyBjb2xvcjogJyNmZmYnIH19PkZhYnJpYyBIdWI8L3N0cm9uZz4gaXMgYSBzZWxmLXNvdmVyZWlnbiBub2RlIHRoYXQgY29ubmVjdHMgeW91IHRvIHRoZVxuICAgICAgICAgIEZhYnJpYyBuZXR3b3JrIOKAlCBwZWVyLXRvLXBlZXIgbWVzc2FnaW5nLCBkb2N1bWVudCBzdG9yYWdlLCBCaXRjb2luIGludGVncmF0aW9uLCBhbmQgY29vcGVyYXRpdmUgbXVsdGlzaWdcbiAgICAgICAgICB2YXVsdHMsIGFsbCBydW5uaW5nIG9uIHlvdXIgb3duIGhhcmR3YXJlLlxuICAgICAgICA8L3A+XG4gICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiAnMWVtJywgbGluZUhlaWdodDogMS42NSwgbWFyZ2luQm90dG9tOiAnMS4yNWVtJywgY29sb3I6ICcjYmJiJyB9fT5cbiAgICAgICAgICBZb3UgYXJlIHZpZXdpbmcgPHN0cm9uZyBzdHlsZT17eyBjb2xvcjogJyNjY2MnIH19PnNvbWVvbmUgZWxzZSdzIGh1Yjwvc3Ryb25nPiByaWdodCBub3cuIEV2ZXJ5dGhpbmcgaGVyZVxuICAgICAgICAgIHJ1bnMgb24gdGhlaXIgbm9kZS4gVG8gb3duIHlvdXIgZGF0YSBhbmQgaWRlbnRpdHksIGluc3RhbGwgeW91ciBvd24uXG4gICAgICAgIDwvcD5cblxuICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBpbnZlcnRlZCBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjY1ZW0nLCBmb250U2l6ZTogJzEuMTVlbScgfX0+XG4gICAgICAgICAgUnVuIHlvdXIgb3duIGh1YlxuICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgPEdyaWQgY29sdW1ucz17M30gc3RhY2thYmxlIGRvdWJsaW5nIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgPEdyaWQuQ29sdW1uPlxuICAgICAgICAgICAgPFNlZ21lbnQgaW52ZXJ0ZWQgc3R5bGU9e3sgYmFja2dyb3VuZDogJ3JnYmEoMjU1LDI1NSwyNTUsMC4wOCknLCBoZWlnaHQ6ICcxMDAlJyB9fT5cbiAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgaW52ZXJ0ZWQgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJkZXNrdG9wXCIgLz4gRGVza3RvcFxuICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgZm9udFNpemU6ICcwLjkyZW0nLCBsaW5lSGVpZ2h0OiAxLjUsIGNvbG9yOiAnI2NjYycgfX0+XG4gICAgICAgICAgICAgICAgRG93bmxvYWQgdGhlIEZhYnJpYyBIdWIgZGVza3RvcCBhcHAuIE9uZSBjbGljayBpbnN0YWxscyB0aGUgaHViLFxuICAgICAgICAgICAgICAgIEJpdGNvaW4gbm9kZSwgYW5kIGJyb3dzZXIgVUkgb24gbWFjT1MsIFdpbmRvd3MsIG9yIExpbnV4LlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJywgY29sb3I6ICcjOGVjOGU4JyB9fT5ucG0gcnVuIGRlc2t0b3A8L2NvZGU+XG4gICAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICAgPC9HcmlkLkNvbHVtbj5cbiAgICAgICAgICA8R3JpZC5Db2x1bW4+XG4gICAgICAgICAgICA8U2VnbWVudCBpbnZlcnRlZCBzdHlsZT17eyBiYWNrZ3JvdW5kOiAncmdiYSgyNTUsMjU1LDI1NSwwLjA4KScsIGhlaWdodDogJzEwMCUnIH19PlxuICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIiBpbnZlcnRlZCBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvZGVcIiAvPiBEZXZlbG9wZXJcbiAgICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiAnMC45MmVtJywgbGluZUhlaWdodDogMS41LCBjb2xvcjogJyNjY2MnIH19PlxuICAgICAgICAgICAgICAgIENsb25lIHRoZSByZXBvIGFuZCBzdGFydCBoYWNraW5nLiBUaGUgaHViIGlzIGEgTm9kZS5qcyBzZXJ2aWNlIHdpdGhcbiAgICAgICAgICAgICAgICBhIFJlYWN0IFVJLCBCaXRjb2luIFJQQywgYW5kIEZhYnJpYyBQMlAgYnVpbHQgaW4uXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nLCBjb2xvcjogJyM4ZWM4ZTgnIH19PmdpdCBjbG9uZSAmYW1wOyZhbXA7IG5wbSBzdGFydDwvY29kZT5cbiAgICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgICA8L0dyaWQuQ29sdW1uPlxuICAgICAgICAgIDxHcmlkLkNvbHVtbj5cbiAgICAgICAgICAgIDxTZWdtZW50IGludmVydGVkIHN0eWxlPXt7IGJhY2tncm91bmQ6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpJywgaGVpZ2h0OiAnMTAwJScgfX0+XG4gICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIGludmVydGVkIHN0eWxlPXt7IG1hcmdpblRvcDogMCB9fT5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2VydmVyXCIgLz4gUHJvZHVjdGlvblxuICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgZm9udFNpemU6ICcwLjkyZW0nLCBsaW5lSGVpZ2h0OiAxLjUsIGNvbG9yOiAnI2NjYycgfX0+XG4gICAgICAgICAgICAgICAgRGVwbG95IG9uIGEgVlBTIG9yIGhvbWUgc2VydmVyIGZvciBhbHdheXMtb24gcGVlcmluZywgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICBob3N0aW5nLCBhbmQgQml0Y29pbiBzZXJ2aWNlcyB3aXRoIExBTiBvciBwdWJsaWMgYWNjZXNzLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJywgY29sb3I6ICcjOGVjOGU4JyB9fT5ucG0gcnVuIHN0YXJ0OnByb2R1Y3Rpb248L2NvZGU+XG4gICAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICAgPC9HcmlkLkNvbHVtbj5cbiAgICAgICAgPC9HcmlkPlxuXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4V3JhcDogJ3dyYXAnLCBnYXA6ICcwLjY1ZW0nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBhcz1cImFcIlxuICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9GYWJyaWNMYWJzL2h1Yi5mYWJyaWMucHViXCJcbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgIHByaW1hcnlcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImdpdGh1YlwiIC8+IFZpZXcgb24gR2l0SHViXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICB0bz1cIi9kb2N1bWVudHNcIlxuICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgIGludmVydGVkXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJmaWxlIGFsdGVybmF0ZSBvdXRsaW5lXCIgLz4gQnJvd3NlIGRvY3VtZW50c1xuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGFzPXtMaW5rfVxuICAgICAgICAgICAgdG89XCIvc2V0dGluZ3NcIlxuICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgIGludmVydGVkXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzZXR0aW5nXCIgLz4gRXhwbG9yZSB0aGlzIGh1YlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvU2VnbWVudD5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU3RhdENhcmQgKHsgaWNvbiwgY29sb3IsIGxhYmVsLCB2YWx1ZSwgc3ViIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VnbWVudCB0ZXh0QWxpZ249XCJjZW50ZXJcIiBzdHlsZT17eyBtYXJnaW46IDAsIHBhZGRpbmc6ICcxZW0gMC43NWVtJyB9fT5cbiAgICAgIDxTdGF0aXN0aWMgc2l6ZT1cIm1pbmlcIiBzdHlsZT17eyBtYXJnaW46IDAgfX0+XG4gICAgICAgIDxTdGF0aXN0aWMuVmFsdWU+XG4gICAgICAgICAgPEljb24gbmFtZT17aWNvbn0gY29sb3I9e2NvbG9yIHx8ICdncmV5J30gc3R5bGU9e3sgbWFyZ2luUmlnaHQ6ICcwLjJlbScsIGZvbnRTaXplOiAnMC44NWVtJyB9fSAvPlxuICAgICAgICAgIHt2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiAn4oCUJ31cbiAgICAgICAgPC9TdGF0aXN0aWMuVmFsdWU+XG4gICAgICAgIDxTdGF0aXN0aWMuTGFiZWwgc3R5bGU9e3sgZm9udFNpemU6ICcwLjc4ZW0nLCBtYXJnaW5Ub3A6ICcwLjM1ZW0nIH19PntsYWJlbH08L1N0YXRpc3RpYy5MYWJlbD5cbiAgICAgIDwvU3RhdGlzdGljPlxuICAgICAge3N1YiA/IDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC4yNWVtJywgZm9udFNpemU6ICcwLjgyZW0nLCBjb2xvcjogJyM2NjYnIH19PntzdWJ9PC9kaXY+IDogbnVsbH1cbiAgICA8L1NlZ21lbnQ+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEhlYWx0aFBhbmVsICh7IGhlYWx0aCwgbG9hZGluZywgZXJyb3IsIG9uUmVmcmVzaCB9KSB7XG4gIGlmIChlcnJvcikge1xuICAgIHJldHVybiAoXG4gICAgICA8U2VnbWVudCBzZWNvbmRhcnkgc3R5bGU9e3sgcGFkZGluZzogJzAuODVlbScgfX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIiBzdHlsZT17eyBtYXJnaW46IDAgfX0+PEljb24gbmFtZT1cImhlYXJ0YmVhdFwiIC8+IE5vZGUgaGVhbHRoPC9IZWFkZXI+XG4gICAgICAgICAgPEJ1dHRvbiBiYXNpYyBzaXplPVwibWluaVwiIGljb249XCJyZWZyZXNoXCIgb25DbGljaz17b25SZWZyZXNofSBsb2FkaW5nPXtsb2FkaW5nfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmUgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luOiAnMC41ZW0gMCAwJyB9fT57ZXJyb3J9PC9NZXNzYWdlPlxuICAgICAgPC9TZWdtZW50PlxuICAgICk7XG4gIH1cbiAgY29uc3Qgbm9kZSA9IGhlYWx0aCAmJiBoZWFsdGgubm9kZTtcbiAgY29uc3QgZGlzayA9IGhlYWx0aCAmJiBoZWFsdGguZGlzaztcbiAgY29uc3QgbmV0ID0gaGVhbHRoICYmIGhlYWx0aC5uZXR3b3JrO1xuICBjb25zdCB1cHRpbWUgPSBub2RlID8gZm9ybWF0RHVyYXRpb24obm9kZS51cHRpbWVTZWMpIDogJ+KAlCc7XG4gIGNvbnN0IGNwdVBjdCA9IG5vZGUgJiYgbm9kZS5jcHUgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcihub2RlLmNwdS5wcm9jZXNzUGVyY2VudCkpXG4gICAgPyBgJHtOdW1iZXIobm9kZS5jcHUucHJvY2Vzc1BlcmNlbnQpLnRvRml4ZWQoMSl9JWBcbiAgICA6IG51bGw7XG4gIGNvbnN0IG1lbVJzcyA9IG5vZGUgJiYgbm9kZS5tZW1vcnkgPyBmb3JtYXRCeXRlcyhub2RlLm1lbW9yeS5yc3MpIDogbnVsbDtcbiAgY29uc3QgZGlza1VzZWQgPSBkaXNrID8gYCR7Zm9ybWF0Qnl0ZXMoZGlzay51c2VkQnl0ZXMpfSAvICR7Zm9ybWF0Qnl0ZXMoZGlzay51c2VkQnl0ZXMgKyAoZGlzay5hdmFpbGFibGVCeXRlcyB8fCAwKSl9YCA6IG51bGw7XG4gIGNvbnN0IGRpc2tQY3QgPSBkaXNrICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIoZGlzay51c2VkUGVyY2VudCkpID8gYCR7TnVtYmVyKGRpc2sudXNlZFBlcmNlbnQpLnRvRml4ZWQoMSl9JWAgOiBudWxsO1xuICBjb25zdCBkbnMgPSBuZXQgJiYgbmV0LmRuc1Byb2JlO1xuICBjb25zdCBwcm9iZXMgPSBuZXQgJiYgQXJyYXkuaXNBcnJheShuZXQubG9jYWxQcm9iZXMpID8gbmV0LmxvY2FsUHJvYmVzIDogW107XG4gIGNvbnN0IHByb2JlT2sgPSBwcm9iZXMuZmlsdGVyKChwKSA9PiBwLm9rKS5sZW5ndGg7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VnbWVudCBzZWNvbmRhcnkgc3R5bGU9e3sgcGFkZGluZzogJzAuODVlbScgfX0+XG4gICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuMzVlbScsIG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5cbiAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc3R5bGU9e3sgbWFyZ2luOiAwIH19PjxJY29uIG5hbWU9XCJoZWFydGJlYXRcIiAvPiBOb2RlIGhlYWx0aDwvSGVhZGVyPlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzAuNWVtJyB9fT5cbiAgICAgICAgICB7aGVhbHRoICYmIGhlYWx0aC5ub3cgPyAoXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogJzAuODJlbScsIGNvbG9yOiAnIzg4OCcgfX0+e25ldyBEYXRlKGhlYWx0aC5ub3cpLnRvTG9jYWxlVGltZVN0cmluZygpfTwvc3Bhbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8QnV0dG9uIGJhc2ljIHNpemU9XCJtaW5pXCIgaWNvbj1cInJlZnJlc2hcIiBvbkNsaWNrPXtvblJlZnJlc2h9IGxvYWRpbmc9e2xvYWRpbmd9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7IWhlYWx0aCA/IChcbiAgICAgICAgPGRpdiBzdHlsZT17eyBjb2xvcjogJyM4ODgnLCBmb250U2l6ZTogJzAuOWVtJyB9fT5Mb2FkaW5nIGhlYWx0aCBkYXRh4oCmPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICA8R3JpZCBjb2x1bW5zPXsyfSBzdGFja2FibGUgc3R5bGU9e3sgbWFyZ2luOiAwIH19PlxuICAgICAgICAgIDxHcmlkLlJvdyBzdHlsZT17eyBwYWRkaW5nOiAnMC4yNWVtIDAnIH19PlxuICAgICAgICAgICAgPEdyaWQuQ29sdW1uPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMC45ZW0nLCBsaW5lSGVpZ2h0OiAxLjY1IH19PlxuICAgICAgICAgICAgICAgIDxkaXY+PEljb24gbmFtZT1cInNlcnZlclwiIGNvbG9yPVwiYmx1ZVwiIC8+IDxzdHJvbmc+SG9zdDo8L3N0cm9uZz4ge25vZGUgJiYgbm9kZS5ob3N0bmFtZSA/IG5vZGUuaG9zdG5hbWUgOiAn4oCUJ308L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PjxJY29uIG5hbWU9XCJjbG9jayBvdXRsaW5lXCIgY29sb3I9XCJibHVlXCIgLz4gPHN0cm9uZz5VcHRpbWU6PC9zdHJvbmc+IHt1cHRpbWV9PC9kaXY+XG4gICAgICAgICAgICAgICAge2NwdVBjdCA/IDxkaXY+PEljb24gbmFtZT1cIm1pY3JvY2hpcFwiIGNvbG9yPVwiYmx1ZVwiIC8+IDxzdHJvbmc+Q1BVOjwvc3Ryb25nPiB7Y3B1UGN0fSAoe25vZGUuY3B1LmNvcmVzfSBjb3Jle25vZGUuY3B1LmNvcmVzICE9PSAxID8gJ3MnIDogJyd9KTwvZGl2PiA6IG51bGx9XG4gICAgICAgICAgICAgICAge25vZGUgJiYgQXJyYXkuaXNBcnJheShub2RlLmxvYWRBdmVyYWdlKSA/IChcbiAgICAgICAgICAgICAgICAgIDxkaXY+PEljb24gbmFtZT1cInRhY2hvbWV0ZXIgYWx0ZXJuYXRlXCIgY29sb3I9XCJibHVlXCIgLz4gPHN0cm9uZz5Mb2FkOjwvc3Ryb25nPiB7bm9kZS5sb2FkQXZlcmFnZS5tYXAoKHYpID0+IE51bWJlcih2IHx8IDApLnRvRml4ZWQoMikpLmpvaW4oJyAvICcpfTwvZGl2PlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHttZW1Sc3MgPyA8ZGl2PjxJY29uIG5hbWU9XCJkYXRhYmFzZVwiIGNvbG9yPVwiYmx1ZVwiIC8+IDxzdHJvbmc+TWVtb3J5Ojwvc3Ryb25nPiB7bWVtUnNzfTwvZGl2PiA6IG51bGx9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9HcmlkLkNvbHVtbj5cbiAgICAgICAgICAgIDxHcmlkLkNvbHVtbj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzAuOWVtJywgbGluZUhlaWdodDogMS42NSB9fT5cbiAgICAgICAgICAgICAgICB7ZGlza1VzZWQgPyA8ZGl2PjxJY29uIG5hbWU9XCJoZGQgb3V0bGluZVwiIGNvbG9yPVwidGVhbFwiIC8+IDxzdHJvbmc+RGlzazo8L3N0cm9uZz4ge2Rpc2tVc2VkfSAoe2Rpc2tQY3R9KTwvZGl2PiA6IG51bGx9XG4gICAgICAgICAgICAgICAge2Rpc2sgJiYgZGlzay5hdmFpbGFibGVCeXRlcyAhPSBudWxsID8gKFxuICAgICAgICAgICAgICAgICAgPGRpdj48SWNvbiBuYW1lPVwiaGRkIG91dGxpbmVcIiBjb2xvcj1cInRlYWxcIiAvPiA8c3Ryb25nPkZyZWU6PC9zdHJvbmc+IHtmb3JtYXRCeXRlcyhkaXNrLmF2YWlsYWJsZUJ5dGVzKX08L2Rpdj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNpZ25hbFwiIGNvbG9yPXtkbnMgJiYgZG5zLm9rID8gJ2dyZWVuJyA6ICdyZWQnfSAvPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5ETlM6PC9zdHJvbmc+IHtkbnMgPyAoZG5zLm9rID8gJ29rJyA6ICdmYWlsZWQnKSA6ICfigJQnfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHtwcm9iZXMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJwbHVnXCIgY29sb3I9e3Byb2JlT2sgPT09IHByb2Jlcy5sZW5ndGggPyAnZ3JlZW4nIDogJ3llbGxvdyd9IC8+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+U2VydmljZXM6PC9zdHJvbmc+IHtwcm9iZU9rfS97cHJvYmVzLmxlbmd0aH0gcmVhY2hhYmxlXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0dyaWQuQ29sdW1uPlxuICAgICAgICAgIDwvR3JpZC5Sb3c+XG4gICAgICAgIDwvR3JpZD5cbiAgICAgICl9XG4gICAgPC9TZWdtZW50PlxuICApO1xufVxuXG5jbGFzcyBIb21lIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjb25uZWN0TW9kYWxPcGVuOiBmYWxzZSxcbiAgICAgIGNvbm5lY3RQZWVySWREcmFmdDogJycsXG4gICAgICBuZXR3b3JrU3RhdHVzUmVuZGVyVGljazogMCxcbiAgICAgIGxhc3ROZXR3b3JrU25hcHNob3RBdDogbnVsbCxcbiAgICAgIHNuYXBzaG90UmVmcmVzaFBlbmRpbmc6IGZhbHNlLFxuICAgICAgb3BlcmF0b3JIZWFsdGg6IG51bGwsXG4gICAgICBvcGVyYXRvckhlYWx0aExvYWRpbmc6IGZhbHNlLFxuICAgICAgb3BlcmF0b3JIZWFsdGhFcnJvcjogbnVsbCxcbiAgICAgIHByb21vRGlzbWlzc2VkOiBmYWxzZVxuICAgIH07XG4gICAgdGhpcy5fc25hcHNob3RSZWZyZXNoU2FmZXR5VGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2hlYWx0aFJlZnJlc2hUaW1lciA9IG51bGw7XG4gICAgdGhpcy5fb25OZXR3b3JrU3RhdHVzRXZlbnQgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fc25hcHNob3RSZWZyZXNoU2FmZXR5VGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NuYXBzaG90UmVmcmVzaFNhZmV0eVRpbWVyKTtcbiAgICAgICAgdGhpcy5fc25hcHNob3RSZWZyZXNoU2FmZXR5VGltZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSgocykgPT4gKHtcbiAgICAgICAgbmV0d29ya1N0YXR1c1JlbmRlclRpY2s6IChzLm5ldHdvcmtTdGF0dXNSZW5kZXJUaWNrIHx8IDApICsgMSxcbiAgICAgICAgbGFzdE5ldHdvcmtTbmFwc2hvdEF0OiBEYXRlLm5vdygpLFxuICAgICAgICBzbmFwc2hvdFJlZnJlc2hQZW5kaW5nOiBmYWxzZVxuICAgICAgfSkpO1xuICAgIH07XG4gICAgdGhpcy5faG9tZUh0dHBGYWxsYmFja1RpbWVyID0gbnVsbDtcbiAgICB0aGlzLl9ob21lSHR0cEh5ZHJhdGVBdHRlbXB0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCduZXR3b3JrU3RhdHVzVXBkYXRlJywgdGhpcy5fb25OZXR3b3JrU3RhdHVzRXZlbnQpO1xuICAgIH1cbiAgICB0aGlzLl9zY2hlZHVsZUhvbWVOZXR3b3JrSHR0cEZhbGxiYWNrKCk7XG4gICAgdGhpcy5fdG91Y2hTbmFwc2hvdFRpbWVJZlJlYWR5KCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl90b3VjaFNuYXBzaG90VGltZUlmUmVhZHkoKSwgMCk7XG4gICAgdGhpcy5fcmVmcmVzaE9wZXJhdG9ySGVhbHRoKCk7XG4gICAgdGhpcy5faGVhbHRoUmVmcmVzaFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5fcmVmcmVzaE9wZXJhdG9ySGVhbHRoKCksIDMwMDAwKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCduZXR3b3JrU3RhdHVzVXBkYXRlJywgdGhpcy5fb25OZXR3b3JrU3RhdHVzRXZlbnQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5faG9tZUh0dHBGYWxsYmFja1RpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5faG9tZUh0dHBGYWxsYmFja1RpbWVyKTtcbiAgICAgIHRoaXMuX2hvbWVIdHRwRmFsbGJhY2tUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zbmFwc2hvdFJlZnJlc2hTYWZldHlUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NuYXBzaG90UmVmcmVzaFNhZmV0eVRpbWVyKTtcbiAgICAgIHRoaXMuX3NuYXBzaG90UmVmcmVzaFNhZmV0eVRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2hlYWx0aFJlZnJlc2hUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9oZWFsdGhSZWZyZXNoVGltZXIpO1xuICAgICAgdGhpcy5faGVhbHRoUmVmcmVzaFRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUgKCkge1xuICAgIHRoaXMuX3NjaGVkdWxlSG9tZU5ldHdvcmtIdHRwRmFsbGJhY2soKTtcbiAgICB0aGlzLl90b3VjaFNuYXBzaG90VGltZUlmUmVhZHkoKTtcbiAgfVxuXG4gIF90b3VjaFNuYXBzaG90VGltZUlmUmVhZHkgKCkge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMucHJvcHMuYnJpZGdlUmVmIHx8IHRoaXMucHJvcHMuYnJpZGdlO1xuICAgIGNvbnN0IGN1ciA9IHJlZiAmJiByZWYuY3VycmVudDtcbiAgICBjb25zdCBucyA9IGN1ciAmJiAoY3VyLm5ldHdvcmtTdGF0dXMgfHwgY3VyLmxhc3ROZXR3b3JrU3RhdHVzKTtcbiAgICBpZiAoIWlzSHViTmV0d29ya1N0YXR1c1NoYXBlKG5zKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnN0YXRlLmxhc3ROZXR3b3JrU25hcHNob3RBdCAhPSBudWxsKSByZXR1cm47XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGxhc3ROZXR3b3JrU25hcHNob3RBdDogRGF0ZS5ub3coKSB9KTtcbiAgfVxuXG4gIF9zY2hlZHVsZUhvbWVOZXR3b3JrSHR0cEZhbGxiYWNrICgpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICBpZiAodGhpcy5faG9tZUh0dHBIeWRyYXRlQXR0ZW1wdGVkKSByZXR1cm47XG4gICAgY29uc3QgcmVmID0gdGhpcy5wcm9wcy5icmlkZ2VSZWYgfHwgdGhpcy5wcm9wcy5icmlkZ2U7XG4gICAgY29uc3QgY3VycmVudCA9IHJlZiAmJiByZWYuY3VycmVudDtcbiAgICBpZiAoIWN1cnJlbnQpIHJldHVybjtcbiAgICBjb25zdCBucyA9IGN1cnJlbnQubmV0d29ya1N0YXR1cyB8fCBjdXJyZW50Lmxhc3ROZXR3b3JrU3RhdHVzO1xuICAgIGlmIChpc0h1Yk5ldHdvcmtTdGF0dXNTaGFwZShucykpIHtcbiAgICAgIGlmICh0aGlzLl9ob21lSHR0cEZhbGxiYWNrVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2hvbWVIdHRwRmFsbGJhY2tUaW1lcik7XG4gICAgICAgIHRoaXMuX2hvbWVIdHRwRmFsbGJhY2tUaW1lciA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9ob21lSHR0cEZhbGxiYWNrVGltZXIpIHJldHVybjtcbiAgICB0aGlzLl9ob21lSHR0cEZhbGxiYWNrVGltZXIgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMuX2hvbWVIdHRwRmFsbGJhY2tUaW1lciA9IG51bGw7XG4gICAgICB0aGlzLl9ob21lSHR0cEh5ZHJhdGVBdHRlbXB0ZWQgPSB0cnVlO1xuICAgICAgY29uc3QgcjIgPSB0aGlzLnByb3BzLmJyaWRnZVJlZiB8fCB0aGlzLnByb3BzLmJyaWRnZTtcbiAgICAgIGNvbnN0IGN1ciA9IHIyICYmIHIyLmN1cnJlbnQ7XG4gICAgICBpZiAoIWN1cikgcmV0dXJuO1xuICAgICAgY29uc3QgbjIgPSBjdXIubmV0d29ya1N0YXR1cyB8fCBjdXIubGFzdE5ldHdvcmtTdGF0dXM7XG4gICAgICBpZiAoaXNIdWJOZXR3b3JrU3RhdHVzU2hhcGUobjIpKSByZXR1cm47XG4gICAgICBjb25zdCBvcmlnaW4gPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLm9yaWdpbiA/IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gOiAnJztcbiAgICAgIGF3YWl0IGh5ZHJhdGVIdWJOZXR3b3JrU3RhdHVzVmlhSHR0cChjdXIsIG9yaWdpbik7XG4gICAgfSwgMjUwMCk7XG4gIH1cblxuICBhc3luYyBfcmVmcmVzaE9wZXJhdG9ySGVhbHRoICgpIHtcbiAgICB0aGlzLnNldFN0YXRlKHsgb3BlcmF0b3JIZWFsdGhMb2FkaW5nOiB0cnVlLCBvcGVyYXRvckhlYWx0aEVycm9yOiBudWxsIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL3NlcnZpY2VzL29wZXJhdG9yL2hlYWx0aCcsIHsgaGVhZGVyczogeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9IH0pO1xuICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcy5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKChqc29uICYmIGpzb24ubWVzc2FnZSkgfHwgYCR7cmVzLnN0YXR1c30gJHtyZXMuc3RhdHVzVGV4dH1gKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVyYXRvckhlYWx0aDoganNvbiB8fCBudWxsIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVyYXRvckhlYWx0aEVycm9yOiBlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IG9wZXJhdG9ySGVhbHRoTG9hZGluZzogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgX29wZW5Db25uZWN0TW9kYWwgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGNvbm5lY3RNb2RhbE9wZW46IHRydWUsIGNvbm5lY3RQZWVySWREcmFmdDogJycgfSk7XG4gIH07XG5cbiAgX2Nsb3NlQ29ubmVjdE1vZGFsID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBjb25uZWN0TW9kYWxPcGVuOiBmYWxzZSwgY29ubmVjdFBlZXJJZERyYWZ0OiAnJyB9KTtcbiAgfTtcblxuICBfc3VibWl0Q29ubmVjdFBlZXJJZCA9ICgpID0+IHtcbiAgICBjb25zdCB7IG9uQ29ubmVjdFdlYlJUQ1BlZXIgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdmFsdWUgPSBTdHJpbmcodGhpcy5zdGF0ZS5jb25uZWN0UGVlcklkRHJhZnQgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiBvbkNvbm5lY3RXZWJSVENQZWVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG4gICAgb25Db25uZWN0V2ViUlRDUGVlcih2YWx1ZSk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGNvbm5lY3RNb2RhbE9wZW46IGZhbHNlLCBjb25uZWN0UGVlcklkRHJhZnQ6ICcnIH0pO1xuICB9O1xuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYnJpZGdlLFxuICAgICAgYnJpZGdlUmVmLFxuICAgICAgbmV0d29ya1N0YXR1c0Zyb21FdmVudCxcbiAgICAgIG9uRGlzY292ZXJXZWJSVENQZWVycyxcbiAgICAgIG9uUmVwdWJsaXNoV2ViUlRDT2ZmZXIsXG4gICAgICBvbkNvbm5lY3RXZWJSVENQZWVyLFxuICAgICAgb25SZXF1aXJlVW5sb2NrLFxuICAgICAgYWRtaW5Ub2tlbixcbiAgICAgIGF1dGhcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwdWJsaWNIdWJWaXNpdG9yID0gISEodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLnB1YmxpY0h1YlZpc2l0b3IpO1xuICAgIGNvbnN0IHNob3dIb21lT3BlcmF0b3JMaW5rcyA9ICFwdWJsaWNIdWJWaXNpdG9yO1xuICAgIGNvbnN0IHVmID0gbG9hZEh1YlVpRmVhdHVyZUZsYWdzKCk7XG4gICAgY29uc3QgaGFzSHViQWRtaW5Gb3JQZWVycyA9ICEhcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlcihhZG1pblRva2VuKTtcbiAgICBjb25zdCByZWYgPSBicmlkZ2VSZWYgfHwgYnJpZGdlO1xuICAgIGNvbnN0IGN1cnJlbnQgPSByZWYgJiYgcmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgY2FuZGlkYXRlRnJvbUV2ZW50ID0gbmV0d29ya1N0YXR1c0Zyb21FdmVudDtcbiAgICBjb25zdCBjYW5kaWRhdGVGcm9tUmVmID0gY3VycmVudCAmJiBjdXJyZW50Lm5ldHdvcmtTdGF0dXM7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gaXNIdWJOZXR3b3JrU3RhdHVzU2hhcGUoY2FuZGlkYXRlRnJvbUV2ZW50KVxuICAgICAgPyBjYW5kaWRhdGVGcm9tRXZlbnRcbiAgICAgIDogKGlzSHViTmV0d29ya1N0YXR1c1NoYXBlKGNhbmRpZGF0ZUZyb21SZWYpID8gY2FuZGlkYXRlRnJvbVJlZiA6IG51bGwpO1xuICAgIGNvbnN0IGZhbGxiYWNrID0gY3VycmVudCAmJiBjdXJyZW50Lmxhc3ROZXR3b3JrU3RhdHVzO1xuICAgIGNvbnN0IG5ldHdvcmtTdGF0dXMgPSBpc0h1Yk5ldHdvcmtTdGF0dXNTaGFwZShjYW5kaWRhdGUpXG4gICAgICA/IGNhbmRpZGF0ZVxuICAgICAgOiAoaXNIdWJOZXR3b3JrU3RhdHVzU2hhcGUoZmFsbGJhY2spID8gZmFsbGJhY2sgOiBudWxsKTtcbiAgICBjb25zdCBuZXR3b3JrID0gbmV0d29ya1N0YXR1cyAmJiBuZXR3b3JrU3RhdHVzLm5ldHdvcms7XG4gICAgY29uc3QgcGVlcnMgPSBBcnJheS5pc0FycmF5KG5ldHdvcmtTdGF0dXMgJiYgbmV0d29ya1N0YXR1cy5wZWVycykgPyBuZXR3b3JrU3RhdHVzLnBlZXJzIDogW107XG4gICAgY29uc3QgY29ubmVjdGVkUGVlcnMgPSBwZWVycy5maWx0ZXIoKHApID0+IHAgJiYgcC5zdGF0dXMgPT09ICdjb25uZWN0ZWQnKTtcbiAgICBjb25zdCB3ZWJydGNQZWVycyA9IEFycmF5LmlzQXJyYXkobmV0d29ya1N0YXR1cyAmJiBuZXR3b3JrU3RhdHVzLndlYnJ0Y1BlZXJzKSA/IG5ldHdvcmtTdGF0dXMud2VicnRjUGVlcnMgOiBbXTtcbiAgICBjb25zdCBzdGF0ZSA9IG5ldHdvcmtTdGF0dXMgJiYgbmV0d29ya1N0YXR1cy5zdGF0ZTtcbiAgICBjb25zdCBzdGF0ZVN0YXR1c1VwcGVyID0gKHN0YXRlICYmIHN0YXRlLnN0YXR1cyAhPSBudWxsKVxuICAgICAgPyBTdHJpbmcoc3RhdGUuc3RhdHVzKS50cmltKCkudG9VcHBlckNhc2UoKVxuICAgICAgOiAnJztcbiAgICBjb25zdCBicmlkZ2VGYWJyaWNQYXVzZWQgPSBzdGF0ZVN0YXR1c1VwcGVyID09PSAnUEFVU0VEJztcbiAgICBjb25zdCBmYWJyaWNQZWVySWQgPSBuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMuZmFicmljUGVlcklkXG4gICAgICA/IFN0cmluZyhuZXR3b3JrU3RhdHVzLmZhYnJpY1BlZXJJZClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBsZWdhY3lVbnN0YWJsZUlkID0gIWZhYnJpY1BlZXJJZCAmJiBuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMuY29udHJhY3QgIT0gbnVsbFxuICAgICAgPyBTdHJpbmcobmV0d29ya1N0YXR1cy5jb250cmFjdClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBzaGFyZU5vZGVJZCA9IGZhYnJpY1BlZXJJZCB8fCBsZWdhY3lVbnN0YWJsZUlkO1xuICAgIGNvbnN0IGhvc3RQb3J0ID0gbmV0d29yayAmJiBuZXR3b3JrLmFkZHJlc3MgPyBTdHJpbmcobmV0d29yay5hZGRyZXNzKSA6IG51bGw7XG4gICAgY29uc3Qgc2hhcmVhYmxlU3RyaW5nID0gW3NoYXJlTm9kZUlkLCBob3N0UG9ydF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuICAgIGNvbnN0IG1lc2hTdGF0dXMgPSBjdXJyZW50ICYmIHR5cGVvZiBjdXJyZW50LndlYnJ0Y01lc2hTdGF0dXMgIT09ICd1bmRlZmluZWQnXG4gICAgICA/IGN1cnJlbnQud2VicnRjTWVzaFN0YXR1c1xuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGlzT25saW5lID0gISFuZXR3b3JrU3RhdHVzO1xuICAgIGNvbnN0IHB1Ymxpc2hlZE1hcCA9IG5ldHdvcmtTdGF0dXMgJiYgbmV0d29ya1N0YXR1cy5wdWJsaXNoZWREb2N1bWVudHMgJiYgdHlwZW9mIG5ldHdvcmtTdGF0dXMucHVibGlzaGVkRG9jdW1lbnRzID09PSAnb2JqZWN0J1xuICAgICAgPyBuZXR3b3JrU3RhdHVzLnB1Ymxpc2hlZERvY3VtZW50c1xuICAgICAgOiB7fTtcbiAgICBjb25zdCBwdWJsaXNoZWRDb3VudCA9IE9iamVjdC52YWx1ZXMocHVibGlzaGVkTWFwKS5maWx0ZXIoKGQpID0+IGQgJiYgZC5pZCkubGVuZ3RoO1xuICAgIGNvbnN0IHRyYW5zcG9ydEhpbnQgPSBicmlkZ2VXZWJTb2NrZXRMb2FkaW5nSGludChjdXJyZW50KTtcbiAgICBjb25zdCBkYXRhU3RhdHVzTGluZSA9ICgoKSA9PiB7XG4gICAgICBpZiAoIXRyYW5zcG9ydEhpbnQpIHJldHVybiAnUHJlcGFyaW5nIGEgY29ubmVjdGlvbiB0byB0aGlzIGh1Yi4nO1xuICAgICAgaWYgKC93YWl0aW5nIGZvciBuZXR3b3JrIHN0YXR1cy9pLnRlc3QodHJhbnNwb3J0SGludCkpIHtcbiAgICAgICAgcmV0dXJuICdOZXh0OiB0aGUgaHViIHNlbmRzIHlvdXIgbmV0d29yayBzbmFwc2hvdCAocGVlcnMsIGRvY3VtZW50cywgbm9kZSBpZCkuJztcbiAgICAgIH1cbiAgICAgIGlmICgvT3BlbmluZyBXZWJTb2NrZXR8UmVjb25uZWN0aW5nL2kudGVzdCh0cmFuc3BvcnRIaW50KSkge1xuICAgICAgICByZXR1cm4gJ1RoZSBicm93c2VyIGJyaWRnZSBtdXN0IGNvbm5lY3QgYmVmb3JlIHN0YXR1cyBjYW4gbG9hZC4nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSkoKTtcbiAgICBjb25zdCBodWJMb2FkaW5nSGVhZGVyID0gKCgpID0+IHtcbiAgICAgIGlmICh0cmFuc3BvcnRIaW50ICYmIC93YWl0aW5nIGZvciBuZXR3b3JrIHN0YXR1cy9pLnRlc3QodHJhbnNwb3J0SGludCkpIHJldHVybiAnQ29ubmVjdGVkIOKAlCB3YWl0aW5nIGZvciBodWIgZGF0YSc7XG4gICAgICBpZiAodHJhbnNwb3J0SGludCAmJiAvT3BlbmluZyBXZWJTb2NrZXQvaS50ZXN0KHRyYW5zcG9ydEhpbnQpKSByZXR1cm4gJ09wZW5pbmcgV2ViU29ja2V04oCmJztcbiAgICAgIGlmICh0cmFuc3BvcnRIaW50ICYmIC9SZWNvbm5lY3RpbmcvaS50ZXN0KHRyYW5zcG9ydEhpbnQpKSByZXR1cm4gJ1JlY29ubmVjdGluZ+KApic7XG4gICAgICByZXR1cm4gJ1dhaXRpbmcgZm9yIGh1YiBzbmFwc2hvdOKApic7XG4gICAgfSkoKTtcbiAgICBjb25zdCBodWJMb2FkaW5nTGVhZCA9IHRyYW5zcG9ydEhpbnQgfHwgJ09wZW5pbmcgYSBjb25uZWN0aW9uIHRvIHRoZSBodWLigKYnO1xuICAgIGNvbnN0IGJpdGNvaW4gPSBuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMuYml0Y29pbiAmJiB0eXBlb2YgbmV0d29ya1N0YXR1cy5iaXRjb2luID09PSAnb2JqZWN0J1xuICAgICAgPyBuZXR3b3JrU3RhdHVzLmJpdGNvaW5cbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBjbG9ja1ZhbCA9IG5ldHdvcmtTdGF0dXMgJiYgbmV0d29ya1N0YXR1cy5jbG9jaztcbiAgICBjb25zdCBzbmFwc2hvdFVwZGF0ZWQgPVxuICAgICAgdGhpcy5zdGF0ZS5sYXN0TmV0d29ya1NuYXBzaG90QXQgIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5zdGF0ZS5sYXN0TmV0d29ya1NuYXBzaG90QXQgPT09ICdudW1iZXInXG4gICAgICAgID8gbmV3IERhdGUodGhpcy5zdGF0ZS5sYXN0TmV0d29ya1NuYXBzaG90QXQpLnRvTG9jYWxlVGltZVN0cmluZyh1bmRlZmluZWQsIHtcbiAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgc2Vjb25kOiAnMi1kaWdpdCdcbiAgICAgICAgfSlcbiAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGNvbnRyYWN0SWQgPSBuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMuY29udHJhY3QgIT0gbnVsbCA/IFN0cmluZyhuZXR3b3JrU3RhdHVzLmNvbnRyYWN0KSA6ICcnO1xuICAgIGNvbnN0IGNvbnRyYWN0U2hvcnQgPSBjb250cmFjdElkLmxlbmd0aCA+IDE4ID8gYCR7Y29udHJhY3RJZC5zbGljZSgwLCAxMCl94oCmJHtjb250cmFjdElkLnNsaWNlKC02KX1gIDogY29udHJhY3RJZDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZmFicmljLWh1Yi1ob21lIGNsYXNzPSdmYWRlLWluJz5cbiAgICAgICAgeyFuZXR3b3JrU3RhdHVzID8gKFxuICAgICAgICAgIDxDYXJkIGZsdWlkIGRhdGEtaG9tZS1uZXR3b3JrLXRpY2s9e3RoaXMuc3RhdGUubmV0d29ya1N0YXR1c1JlbmRlclRpY2t9PlxuICAgICAgICAgICAgPENhcmQuQ29udGVudD5cbiAgICAgICAgICAgICAgPFNlZ21lbnQgYmFzaWM+XG4gICAgICAgICAgICAgICAgPFNlZ21lbnRcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyBtaW5IZWlnaHQ6ICczMHZoJywgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB0ZXh0QWxpZ246ICdjZW50ZXInLCBtYXhXaWR0aDogJzI4cmVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPExvYWRlciBhY3RpdmUgaW5saW5lPVwiY2VudGVyZWRcIiBzaXplPVwibGFyZ2VcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGVyIGFzPSdoNCcgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJywgdGV4dEFsaWduOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICB7aHViTG9hZGluZ0hlYWRlcn1cbiAgICAgICAgICAgICAgICAgICAgICA8SGVhZGVyLlN1YmhlYWRlciBzdHlsZT17eyB0ZXh0QWxpZ246ICdjZW50ZXInLCBsaW5lSGVpZ2h0OiAxLjUgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snIH19PntodWJMb2FkaW5nTGVhZH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZGF0YVN0YXR1c0xpbmUgJiYgZGF0YVN0YXR1c0xpbmUgIT09IGh1YkxvYWRpbmdMZWFkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBjb2xvcjogJyM4ODgnLCBmb250U2l6ZTogJzAuOTJlbScsIG1hcmdpblRvcDogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2RhdGFTdGF0dXNMaW5lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L0hlYWRlci5TdWJoZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICB7dHlwZW9mIHRoaXMucHJvcHMub25SZWZyZXNoTmV0d29ya1N0YXR1cyA9PT0gJ2Z1bmN0aW9uJyAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxLjFlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBzaXplPVwic21hbGxcIiBiYXNpYyBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCIgb25DbGljaz17KCkgPT4geyB0cnkgeyB0aGlzLnByb3BzLm9uUmVmcmVzaE5ldHdvcmtTdGF0dXMoKTsgfSBjYXRjaCAoZSkge30gfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdCBzdGF0dXMgYWdhaW5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjODg4JywgZm9udFNpemU6ICcwLjg1ZW0nLCBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBtYXJnaW5Cb3R0b206IDAsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgc3RheXMgaGVyZSwgY29uZmlybSB0aGUgaHViIGlzIHVwIGFuZCB0aGUgV2ViU29ja2V0IGJyaWRnZSBpcyBjb25uZWN0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgICAgIDwvQ2FyZC5Db250ZW50PlxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgey8qIOKUgOKUgOKUgCBQcm9tbyBoZXJvIChvcHQtaW4gdmlhIEFkbWluIOKGkiBGZWF0dXJlIHZpc2liaWxpdHkpIOKUgOKUgOKUgCAqL31cbiAgICAgICAgICAgIHt1Zi5wcm9tbyAmJiAhdGhpcy5zdGF0ZS5wcm9tb0Rpc21pc3NlZCA/IChcbiAgICAgICAgICAgICAgPFByb21vSGVybyBvbkRpc21pc3M9eygpID0+IHRoaXMuc2V0U3RhdGUoeyBwcm9tb0Rpc21pc3NlZDogdHJ1ZSB9KX0gLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICB7Lyog4pSA4pSA4pSAIE1haW4gY29udGVudCDilIDilIDilIAgKi99XG4gICAgICAgICAgICA8Q2FyZCBmbHVpZCBkYXRhLWhvbWUtbmV0d29yay10aWNrPXt0aGlzLnN0YXRlLm5ldHdvcmtTdGF0dXNSZW5kZXJUaWNrfT5cbiAgICAgICAgICAgICAgPENhcmQuQ29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuNWVtJywgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgPENhcmQuSGVhZGVyIHN0eWxlPXt7IG1hcmdpbjogMCB9fT5Ob2RlIG92ZXJ2aWV3PC9DYXJkLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICB7c25hcHNob3RVcGRhdGVkID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44MmVtJywgY29sb3I6ICcjODg4JyB9fT5VcGRhdGVkIHtzbmFwc2hvdFVwZGF0ZWR9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAge3R5cGVvZiB0aGlzLnByb3BzLm9uUmVmcmVzaE5ldHdvcmtTdGF0dXMgPT09ICdmdW5jdGlvbicgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlZnJlc2ggaHViIG5ldHdvcmsgc25hcHNob3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuc25hcHNob3RSZWZyZXNoUGVuZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e3RoaXMuc3RhdGUuc25hcHNob3RSZWZyZXNoUGVuZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgc25hcHNob3RSZWZyZXNoUGVuZGluZzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc25hcHNob3RSZWZyZXNoU2FmZXR5VGltZXIpIGNsZWFyVGltZW91dCh0aGlzLl9zbmFwc2hvdFJlZnJlc2hTYWZldHlUaW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc25hcHNob3RSZWZyZXNoU2FmZXR5VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NuYXBzaG90UmVmcmVzaFNhZmV0eVRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzbmFwc2hvdFJlZnJlc2hQZW5kaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblJlZnJlc2hOZXR3b3JrU3RhdHVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgc25hcHNob3RSZWZyZXNoUGVuZGluZzogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxDYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgey8qIOKUgOKUgOKUgCBJZGVudGl0eSAmIG5ldHdvcmsg4pSA4pSA4pSAICovfVxuICAgICAgICAgICAgICAgICAgPFNlZ21lbnQgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC44NWVtJywgcGFkZGluZzogJzAuODVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIHN0eWxlPXt7IG1hcmdpbjogJzAgMCAwLjVlbScgfX0+PEljb24gbmFtZT1cImlkIGJhZGdlXCIgLz4gSWRlbnRpdHkgJmFtcDsgbmV0d29yazwvSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICA8R3JpZCBjb2x1bW5zPXsyfSBzdGFja2FibGUgc3R5bGU9e3sgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxHcmlkLlJvdyBzdHlsZT17eyBwYWRkaW5nOiAnMC4xNWVtIDAnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWQuQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMC45ZW0nLCBsaW5lSGVpZ2h0OiAxLjc1IH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmYWJyaWNQZWVySWQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkZhYnJpYyBpZDo8L3N0cm9uZz57JyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuODhlbScgfX0gdGl0bGU9e2ZhYnJpY1BlZXJJZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZhYnJpY1BlZXJJZC5sZW5ndGggPiAyMCA/IGAke2ZhYnJpY1BlZXJJZC5zbGljZSgwLCAxMCl94oCmJHtmYWJyaWNQZWVySWQuc2xpY2UoLTgpfWAgOiBmYWJyaWNQZWVySWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtob3N0UG9ydCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHN0cm9uZz5MaXN0ZW46PC9zdHJvbmc+IDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44OGVtJyB9fT57aG9zdFBvcnR9PC9jb2RlPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb250cmFjdFNob3J0ID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48c3Ryb25nPkNvbnRyYWN0Ojwvc3Ryb25nPiA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuODhlbScgfX0gdGl0bGU9e2NvbnRyYWN0SWR9Pntjb250cmFjdFNob3J0fTwvY29kZT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0dyaWQuQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWQuQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMC45ZW0nLCBsaW5lSGVpZ2h0OiAxLjc1IH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1Zi5wZWVycyAmJiBoYXNIdWJBZG1pbkZvclBlZXJzID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPlBlZXJzOjwvc3Ryb25nPiB7Y29ubmVjdGVkUGVlcnMubGVuZ3RofSBjb25uZWN0ZWQgLyB7cGVlcnMubGVuZ3RofSBrbm93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnIMK3ICd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89XCIvcGVlcnNcIiBzdHlsZT17eyBmb250U2l6ZTogJzAuOTJlbScgfX0+TWFuYWdlPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPldlYlJUQyByZWdpc3RyeTo8L3N0cm9uZz4ge3dlYnJ0Y1BlZXJzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bWVzaFN0YXR1cyAmJiBOdW1iZXIobWVzaFN0YXR1cy5jb25uZWN0ZWQpID4gMCA/IGAgKCR7bWVzaFN0YXR1cy5jb25uZWN0ZWR9IG1lc2gpYCA6ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHN0cm9uZz5Eb2N1bWVudHM6PC9zdHJvbmc+IHtwdWJsaXNoZWRDb3VudH0gcHVibGlzaGVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9HcmlkLkNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L0dyaWQuUm93PlxuICAgICAgICAgICAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgICAgICAgICAgICAgIHt1Zi5wZWVycyAmJiBoYXNIdWJBZG1pbkZvclBlZXJzICYmIHNoYXJlYWJsZVN0cmluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9J21pbmknXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj0nbGVmdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChzaGFyZWFibGVTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ29weSBGYWJyaWMgbm9kZSBJRCBhbmQgbGlzdGVuIGFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPSdjb3B5JyAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5IG5vZGUgaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICAgICAgICAgICAgey8qIOKUgOKUgOKUgCBCaXRjb2luIOKUgOKUgOKUgCAqL31cbiAgICAgICAgICAgICAgICAgIHtiaXRjb2luID8gKFxuICAgICAgICAgICAgICAgICAgICA8U2VnbWVudCBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjg1ZW0nLCBwYWRkaW5nOiAnMC44NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIiBzdHlsZT17eyBtYXJnaW46ICcwIDAgMC41ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiBjb2xvcj1cIm9yYW5nZVwiIC8+IEJpdGNvaW5cbiAgICAgICAgICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICB7Yml0Y29pbi5hdmFpbGFibGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMC45ZW0nLCBsaW5lSGVpZ2h0OiAxLjc1IH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwibWluaVwiIGNvbG9yPVwiZ3JlZW5cIiBzdHlsZT17eyBtYXJnaW5SaWdodDogJzAuNWVtJyB9fT5BdmFpbGFibGU8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+TmV0d29yazo8L3N0cm9uZz4ge2JpdGNvaW4ubmV0d29yayB8fCAn4oCUJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Yml0Y29pbi5oZWlnaHQgIT0gbnVsbCA/IDxzcGFuPiDCtyA8c3Ryb25nPkhlaWdodDo8L3N0cm9uZz4ge2JpdGNvaW4uaGVpZ2h0fTwvc3Bhbj4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2JpdGNvaW4uYmVzdEJsb2NrSGFzaCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxzdHJvbmc+VGlwOjwvc3Ryb25nPiA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuODVlbScsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e1N0cmluZyhiaXRjb2luLmJlc3RCbG9ja0hhc2gpLnNsaWNlKDAsIDE2KX3igKY8L2NvZGU+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Yml0Y29pbi5tZW1wb29sVHhDb3VudCAhPSBudWxsID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHN0cm9uZz5NZW1wb29sOjwvc3Ryb25nPiB7Yml0Y29pbi5tZW1wb29sVHhDb3VudH0gdHh7Yml0Y29pbi5tZW1wb29sQnl0ZXMgPyBgICgke2Zvcm1hdEJ5dGVzKGJpdGNvaW4ubWVtcG9vbEJ5dGVzKX0pYCA6ICcnfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3Nob3dIb21lT3BlcmF0b3JMaW5rcyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCI+Qml0Y29pbiBkYXNoYm9hcmQ8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dWYuYml0Y29pbkxpZ2h0bmluZyA/IDw+eycgwrcgJ308TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2xpZ2h0bmluZ1wiPkxpZ2h0bmluZzwvTGluaz48Lz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeycgwrcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zP3Njb3BlPXdhbGxldFwiPldhbGxldDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBjb2xvcjogJyM4ODgnLCBmb250U2l6ZTogJzAuOWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2JpdGNvaW4ubWVzc2FnZSA/IFN0cmluZyhiaXRjb2luLm1lc3NhZ2UpIDogJ0JpdGNvaW4gc2VydmljZSBpcyBub3QgYXZhaWxhYmxlLid9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgICAgICAgICAgey8qIOKUgOKUgOKUgCBPcGVyYXRvciBoZWFsdGgg4pSA4pSA4pSAICovfVxuICAgICAgICAgICAgICAgICAgPEhlYWx0aFBhbmVsXG4gICAgICAgICAgICAgICAgICAgIGhlYWx0aD17dGhpcy5zdGF0ZS5vcGVyYXRvckhlYWx0aH1cbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZz17dGhpcy5zdGF0ZS5vcGVyYXRvckhlYWx0aExvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIGVycm9yPXt0aGlzLnN0YXRlLm9wZXJhdG9ySGVhbHRoRXJyb3J9XG4gICAgICAgICAgICAgICAgICAgIG9uUmVmcmVzaD17KCkgPT4gdGhpcy5fcmVmcmVzaE9wZXJhdG9ySGVhbHRoKCl9XG4gICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICB7Lyog4pSA4pSA4pSAIFF1aWNrIGxpbmtzIOKUgOKUgOKUgCAqL31cbiAgICAgICAgICAgICAgICAgIHtzaG93SG9tZU9wZXJhdG9yTGlua3MgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxTZWdtZW50IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuODVlbScsIHBhZGRpbmc6ICcwLjg1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIHN0eWxlPXt7IG1hcmdpbjogJzAgMCAwLjVlbScgfX0+PEljb24gbmFtZT1cImNvbXBhc3Mgb3V0bGluZVwiIC8+IFF1aWNrIGxpbmtzPC9IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL2RvY3VtZW50c1wiIHNpemU9XCJzbWFsbFwiIGJhc2ljPjxJY29uIG5hbWU9XCJmaWxlIGFsdGVybmF0ZSBvdXRsaW5lXCIgLz4gRG9jdW1lbnRzPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dWYucGVlcnMgPyA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9wZWVyc1wiIHNpemU9XCJzbWFsbFwiIGJhc2ljPjxJY29uIG5hbWU9XCJzaXRlbWFwXCIgLz4gUGVlcnM8L0J1dHRvbj4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2V0dGluZ3NcIiBzaXplPVwic21hbGxcIiBiYXNpYz48SWNvbiBuYW1lPVwic2V0dGluZ1wiIC8+IFNldHRpbmdzPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Yml0Y29pbiAmJiBiaXRjb2luLmF2YWlsYWJsZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pblwiIHNpemU9XCJzbWFsbFwiIGJhc2ljPjxJY29uIG5hbWU9XCJiaXRjb2luXCIgLz4gQml0Y29pbjwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICB7dWYuc2lkZWNoYWluID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9mZWRlcmF0aW9uc1wiIHNpemU9XCJzbWFsbFwiIGJhc2ljPjxJY29uIG5hbWU9XCJ1c2Vyc1wiIC8+IEZlZGVyYXRpb25zPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL2NvbnRyYWN0c1wiIHNpemU9XCJzbWFsbFwiIGJhc2ljPjxJY29uIG5hbWU9XCJmaWxlIGNvZGUgb3V0bGluZVwiIC8+IENvbnRyYWN0czwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2V0dGluZ3MvY29sbGFib3JhdGlvblwiIHNpemU9XCJzbWFsbFwiIGJhc2ljPjxJY29uIG5hbWU9XCJoYW5kc2hha2Ugb3V0bGluZVwiIC8+IENvbGxhYm9yYXRpb248L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt1Zi5hY3Rpdml0aWVzID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9hY3Rpdml0aWVzXCIgc2l6ZT1cInNtYWxsXCIgYmFzaWM+PEljb24gbmFtZT1cImxpc3QgYWx0ZXJuYXRlIG91dGxpbmVcIiAvPiBBY3Rpdml0eSBsb2c8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2V0dGluZ3MvYWRtaW5cIiBzaXplPVwic21hbGxcIiBiYXNpYz48SWNvbiBuYW1lPVwic2hpZWxkXCIgLz4gQWRtaW48L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgICAgICAgIHsvKiDilIDilIDilIAgQ3JlZGVudGlhbHMgaGludCAoY29tcGFjdCkg4pSA4pSA4pSAICovfVxuICAgICAgICAgICAgICAgICAgeyFoYXNIdWJBZG1pbkZvclBlZXJzICYmIHNob3dIb21lT3BlcmF0b3JMaW5rcyA/IChcbiAgICAgICAgICAgICAgICAgICAgPE1lc3NhZ2Ugc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC44NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+QWRtaW4gdG9rZW4gbm90IHNhdmVkPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjI1ZW0gMCAwJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIFBhc3RlIHlvdXIgb3BlcmF0b3IgdG9rZW4gaW4gPExpbmsgdG89XCIvc2V0dGluZ3NcIj5TZXR0aW5nczwvTGluaz4gdG8gdW5sb2NrIHBlZXIgZGV0YWlscywgZnVsbCBzdGF0aXN0aWNzLCBhbmQgb3BlcmF0b3IgY29udHJvbHMuXG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgICAgICAgICAgeyF1Zi5wZWVycyAmJiBzaG93SG9tZU9wZXJhdG9yTGlua3MgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC44NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+UGVlcnMgJmFtcDsgV2ViUlRDIGhpZGRlbjwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4yNWVtIDAgMCcsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIDxzdHJvbmc+cGVlcnM8L3N0cm9uZz4gZmxhZyB1bmRlciA8TGluayB0bz1cIi9zZXR0aW5ncy9hZG1pblwiPkFkbWluIOKGkiBGZWF0dXJlIHZpc2liaWxpdHk8L0xpbms+LlxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9DYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICA8L0NhcmQuQ29udGVudD5cbiAgICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cblxuICAgICAgICB7Lyog4pSA4pSA4pSAIEdsb2JhbCBjaGF0IOKUgOKUgOKUgCAqL31cbiAgICAgICAge25ldHdvcmtTdGF0dXMgPyAoXG4gICAgICAgICAgPFNlZ21lbnRcbiAgICAgICAgICAgIHJvbGU9XCJyZWdpb25cIlxuICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMS4yNWVtJyB9fVxuICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiaG9tZS1nbG9iYWwtY2hhdC1oZWFkaW5nXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDJcIiBpZD1cImhvbWUtZ2xvYmFsLWNoYXQtaGVhZGluZ1wiIHN0eWxlPXt7IG1hcmdpblRvcDogMCB9fT5cbiAgICAgICAgICAgICAgR2xvYmFsIGNoYXRcbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luVG9wOiAnLTAuMjVlbScsIG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgIHt1Zi5hY3Rpdml0aWVzID8gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9ub3RpZmljYXRpb25zXCI+Tm90aWZpY2F0aW9uczwvTGluaz5cbiAgICAgICAgICAgICAgICAgIHsnIMK3ICd9XG4gICAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9hY3Rpdml0aWVzXCI+QWN0aXZpdHkgbG9nPC9MaW5rPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAge3VmLmFjdGl2aXRpZXMgPyAnIMK3ICcgOiAnJ31cbiAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3Mvc2VjdXJpdHlcIj5EZWxlZ2F0aW9uICZhbXA7IHNpZ25pbmc8L0xpbms+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1pbkhlaWdodDogJzEycmVtJyB9fT5cbiAgICAgICAgICAgICAgPEFjdGl2aXR5U3RyZWFtXG4gICAgICAgICAgICAgICAgYnJpZGdlPXtyZWZ9XG4gICAgICAgICAgICAgICAgYnJpZGdlUmVmPXtyZWZ9XG4gICAgICAgICAgICAgICAgYWRtaW5Ub2tlbj17YWRtaW5Ub2tlbn1cbiAgICAgICAgICAgICAgICBpZGVudGl0eT17YXV0aH1cbiAgICAgICAgICAgICAgICBvblJlcXVpcmVVbmxvY2s9e29uUmVxdWlyZVVubG9ja31cbiAgICAgICAgICAgICAgICBpbmNsdWRlSGVhZGVyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBlbnRyeVR5cGVGaWx0ZXI9XCJjaGF0XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgey8qIOKUgOKUgOKUgCBXZWJSVEMgY29ubmVjdCBtb2RhbCDilIDilIDilIAgKi99XG4gICAgICAgIDxNb2RhbCBvcGVuPXt0aGlzLnN0YXRlLmNvbm5lY3RNb2RhbE9wZW59IHNpemU9XCJ0aW55XCIgb25DbG9zZT17dGhpcy5fY2xvc2VDb25uZWN0TW9kYWx9IGNsb3NlT25Fc2NhcGUgY2xvc2VPbkRpbW1lckNsaWNrPlxuICAgICAgICAgIDxNb2RhbC5IZWFkZXI+Q29ubmVjdCB0byBXZWJSVEMgcGVlcjwvTW9kYWwuSGVhZGVyPlxuICAgICAgICAgIDxNb2RhbC5Db250ZW50PlxuICAgICAgICAgICAgPEZvcm0gb25TdWJtaXQ9eyhlKSA9PiB7IGUucHJldmVudERlZmF1bHQoKTsgdGhpcy5fc3VibWl0Q29ubmVjdFBlZXJJZCgpOyB9fT5cbiAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJob21lLXdlYnJ0Yy1wZWVyLWlkXCI+UGVlciBJRDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImhvbWUtd2VicnRjLXBlZXItaWRcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmYWJyaWMtYnJpZGdlLeKAplwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5jb25uZWN0UGVlcklkRHJhZnR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBjb25uZWN0UGVlcklkRHJhZnQ6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgPE1vZGFsLkFjdGlvbnM+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLl9jbG9zZUNvbm5lY3RNb2RhbH0+Q2FuY2VsPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBwcmltYXJ5IG9uQ2xpY2s9e3RoaXMuX3N1Ym1pdENvbm5lY3RQZWVySWR9PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicGx1Z1wiIC8+XG4gICAgICAgICAgICAgIENvbm5lY3RcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvTW9kYWwuQWN0aW9ucz5cbiAgICAgICAgPC9Nb2RhbD5cbiAgICAgIDwvZmFicmljLWh1Yi1ob21lPlxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gSG9tZVdpdGhMb2NhdGlvbiAocHJvcHMpIHtcbiAgY29uc3QgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBjb25zdCBbbmV0d29ya1N0YXR1c0Zyb21FdmVudCwgc2V0TmV0d29ya1N0YXR1c0Zyb21FdmVudF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNlZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpbnN0ID0gcHJvcHMuYnJpZGdlUmVmICYmIHByb3BzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgbiA9IGluc3QgJiYgaW5zdC5uZXR3b3JrU3RhdHVzO1xuICAgICAgaWYgKGlzSHViTmV0d29ya1N0YXR1c1NoYXBlKG4pKSBzZXROZXR3b3JrU3RhdHVzRnJvbUV2ZW50KG4pO1xuICAgIH07XG4gICAgc2VlZCgpO1xuICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KHNlZWQsIDApO1xuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodCk7XG4gIH0sIFtdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uTnMgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgbiA9IGUuZGV0YWlsICYmIGUuZGV0YWlsLm5ldHdvcmtTdGF0dXM7XG4gICAgICBzZXROZXR3b3JrU3RhdHVzRnJvbUV2ZW50KG4gJiYgdHlwZW9mIG4gPT09ICdvYmplY3QnICYmIGlzSHViTmV0d29ya1N0YXR1c1NoYXBlKG4pID8gbiA6IG51bGwpO1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ25ldHdvcmtTdGF0dXNVcGRhdGUnLCBvbk5zKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ25ldHdvcmtTdGF0dXNVcGRhdGUnLCBvbk5zKTtcbiAgfSwgW10pO1xuXG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgc2Nyb2xsVG9IYXNoRWxlbWVudChsb2NhdGlvbi5oYXNoKTtcbiAgfSwgW2xvY2F0aW9uLnBhdGhuYW1lLCBsb2NhdGlvbi5oYXNoXSk7XG4gIHJldHVybiA8SG9tZSB7Li4ucHJvcHN9IGxvY2F0aW9uPXtsb2NhdGlvbn0gbmV0d29ya1N0YXR1c0Zyb21FdmVudD17bmV0d29ya1N0YXR1c0Zyb21FdmVudH0gLz47XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG9tZVdpdGhMb2NhdGlvbjtcbiJdLCJuYW1lcyI6WyJfZXh0ZW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImJpbmQiLCJuIiwiZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInQiLCJyIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJhIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImwiLCJTeW1ib2wiLCJpdGVyYXRvciIsImkiLCJ1IiwiZiIsIm8iLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImlzQXJyYXkiLCJfdHlwZW9mIiwicHJvdG90eXBlIiwiX3JlZ2VuZXJhdG9yIiwidG9TdHJpbmdUYWciLCJjIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsInAiLCJ5IiwiRyIsInYiLCJkIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfbmV4dCIsIl90aHJvdyIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJSZWZlcmVuY2VFcnJvciIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwiX2luaGVyaXRzIiwiX3NldFByb3RvdHlwZU9mIiwiX2RlZmluZVByb3BlcnR5IiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsInVzZUxvY2F0aW9uIiwiTGluayIsInNjcm9sbFRvSGFzaEVsZW1lbnQiLCJoYXNoIiwicmF3IiwiaCIsInN0YXJ0c1dpdGgiLCJlbCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJzY3JvbGxJbnRvVmlldyIsIndpbmRvdyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImJsb2NrIiwiYmVoYXZpb3IiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJDYXJkIiwiRm9ybSIsIkdyaWQiLCJIZWFkZXIiLCJJY29uIiwiSW5wdXQiLCJMYWJlbCIsIkxvYWRlciIsIk1lc3NhZ2UiLCJNb2RhbCIsIlNlZ21lbnQiLCJTdGF0aXN0aWMiLCJBY3Rpdml0eVN0cmVhbSIsIl9yZXF1aXJlMyIsImlzSHViTmV0d29ya1N0YXR1c1NoYXBlIiwiYnJpZGdlV2ViU29ja2V0TG9hZGluZ0hpbnQiLCJfcmVxdWlyZTQiLCJoeWRyYXRlSHViTmV0d29ya1N0YXR1c1ZpYUh0dHAiLCJfcmVxdWlyZTUiLCJsb2FkSHViVWlGZWF0dXJlRmxhZ3MiLCJfcmVxdWlyZTYiLCJyZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIiwiZm9ybWF0Qnl0ZXMiLCJpc0Zpbml0ZSIsImNvbmNhdCIsInVuaXRzIiwiaWR4IiwiY3VyIiwidG9GaXhlZCIsImZvcm1hdER1cmF0aW9uIiwic2VjSW4iLCJzZWMiLCJNYXRoIiwiZmxvb3IiLCJQcm9tb0hlcm8iLCJfcmVmIiwib25EaXNtaXNzIiwiY3JlYXRlRWxlbWVudCIsImlkIiwic3R5bGUiLCJiYWNrZ3JvdW5kIiwiY29sb3IiLCJwYWRkaW5nIiwiYm9yZGVyUmFkaXVzIiwibWFyZ2luQm90dG9tIiwicG9zaXRpb24iLCJvdmVyZmxvdyIsImljb24iLCJiYXNpYyIsImludmVydGVkIiwic2l6ZSIsInRpdGxlIiwidG9wIiwicmlnaHQiLCJvcGFjaXR5Iiwib25DbGljayIsIm1heFdpZHRoIiwiYXMiLCJtYXJnaW5Ub3AiLCJmb250U2l6ZSIsImxpbmVIZWlnaHQiLCJtYXJnaW5SaWdodCIsInZlcnRpY2FsQWxpZ24iLCJjb2x1bW5zIiwic3RhY2thYmxlIiwiZG91YmxpbmciLCJDb2x1bW4iLCJoZWlnaHQiLCJkaXNwbGF5IiwiZmxleFdyYXAiLCJnYXAiLCJhbGlnbkl0ZW1zIiwiaHJlZiIsInRhcmdldCIsInJlbCIsInByaW1hcnkiLCJ0byIsIlN0YXRDYXJkIiwiX3JlZjIiLCJsYWJlbCIsInN1YiIsInRleHRBbGlnbiIsIm1hcmdpbiIsIlZhbHVlIiwiSGVhbHRoUGFuZWwiLCJfcmVmMyIsImhlYWx0aCIsImxvYWRpbmciLCJlcnJvciIsIm9uUmVmcmVzaCIsInNlY29uZGFyeSIsImp1c3RpZnlDb250ZW50IiwibmVnYXRpdmUiLCJub2RlIiwiZGlzayIsIm5ldCIsIm5ldHdvcmsiLCJ1cHRpbWUiLCJ1cHRpbWVTZWMiLCJjcHVQY3QiLCJjcHUiLCJwcm9jZXNzUGVyY2VudCIsIm1lbVJzcyIsIm1lbW9yeSIsInJzcyIsImRpc2tVc2VkIiwidXNlZEJ5dGVzIiwiYXZhaWxhYmxlQnl0ZXMiLCJkaXNrUGN0IiwidXNlZFBlcmNlbnQiLCJkbnMiLCJkbnNQcm9iZSIsInByb2JlcyIsImxvY2FsUHJvYmVzIiwicHJvYmVPayIsImZpbHRlciIsIm9rIiwibm93IiwiRGF0ZSIsInRvTG9jYWxlVGltZVN0cmluZyIsIlJvdyIsImhvc3RuYW1lIiwiY29yZXMiLCJsb2FkQXZlcmFnZSIsIm1hcCIsImpvaW4iLCJIb21lIiwiX1JlYWN0JENvbXBvbmVudCIsInByb3BzIiwiX3RoaXMiLCJzZXRTdGF0ZSIsImNvbm5lY3RNb2RhbE9wZW4iLCJjb25uZWN0UGVlcklkRHJhZnQiLCJvbkNvbm5lY3RXZWJSVENQZWVyIiwic3RhdGUiLCJ0cmltIiwibmV0d29ya1N0YXR1c1JlbmRlclRpY2siLCJsYXN0TmV0d29ya1NuYXBzaG90QXQiLCJzbmFwc2hvdFJlZnJlc2hQZW5kaW5nIiwib3BlcmF0b3JIZWFsdGgiLCJvcGVyYXRvckhlYWx0aExvYWRpbmciLCJvcGVyYXRvckhlYWx0aEVycm9yIiwicHJvbW9EaXNtaXNzZWQiLCJfc25hcHNob3RSZWZyZXNoU2FmZXR5VGltZXIiLCJfaGVhbHRoUmVmcmVzaFRpbWVyIiwiX29uTmV0d29ya1N0YXR1c0V2ZW50IiwiY2xlYXJUaW1lb3V0IiwicyIsIl9ob21lSHR0cEZhbGxiYWNrVGltZXIiLCJfaG9tZUh0dHBIeWRyYXRlQXR0ZW1wdGVkIiwiY29tcG9uZW50RGlkTW91bnQiLCJfdGhpczIiLCJhZGRFdmVudExpc3RlbmVyIiwiX3NjaGVkdWxlSG9tZU5ldHdvcmtIdHRwRmFsbGJhY2siLCJfdG91Y2hTbmFwc2hvdFRpbWVJZlJlYWR5Iiwic2V0VGltZW91dCIsIl9yZWZyZXNoT3BlcmF0b3JIZWFsdGgiLCJzZXRJbnRlcnZhbCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNsZWFySW50ZXJ2YWwiLCJjb21wb25lbnREaWRVcGRhdGUiLCJyZWYiLCJicmlkZ2VSZWYiLCJicmlkZ2UiLCJjdXJyZW50IiwibnMiLCJuZXR3b3JrU3RhdHVzIiwibGFzdE5ldHdvcmtTdGF0dXMiLCJfdGhpczMiLCJfY2FsbGVlIiwicjIiLCJuMiIsIm9yaWdpbiIsIl9jb250ZXh0IiwibG9jYXRpb24iLCJfcmVmcmVzaE9wZXJhdG9ySGVhbHRoMiIsIl9jYWxsZWUyIiwicmVzIiwianNvbiIsIl90IiwiX2NvbnRleHQyIiwiZmV0Y2giLCJoZWFkZXJzIiwiQWNjZXB0IiwiRXJyb3IiLCJtZXNzYWdlIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInJlbmRlciIsIl90aGlzNCIsIl90aGlzJHByb3BzIiwibmV0d29ya1N0YXR1c0Zyb21FdmVudCIsIm9uRGlzY292ZXJXZWJSVENQZWVycyIsIm9uUmVwdWJsaXNoV2ViUlRDT2ZmZXIiLCJvblJlcXVpcmVVbmxvY2siLCJhZG1pblRva2VuIiwiYXV0aCIsInB1YmxpY0h1YlZpc2l0b3IiLCJzaG93SG9tZU9wZXJhdG9yTGlua3MiLCJ1ZiIsImhhc0h1YkFkbWluRm9yUGVlcnMiLCJjYW5kaWRhdGVGcm9tRXZlbnQiLCJjYW5kaWRhdGVGcm9tUmVmIiwiY2FuZGlkYXRlIiwiZmFsbGJhY2siLCJwZWVycyIsImNvbm5lY3RlZFBlZXJzIiwid2VicnRjUGVlcnMiLCJzdGF0ZVN0YXR1c1VwcGVyIiwidG9VcHBlckNhc2UiLCJicmlkZ2VGYWJyaWNQYXVzZWQiLCJmYWJyaWNQZWVySWQiLCJsZWdhY3lVbnN0YWJsZUlkIiwiY29udHJhY3QiLCJzaGFyZU5vZGVJZCIsImhvc3RQb3J0IiwiYWRkcmVzcyIsInNoYXJlYWJsZVN0cmluZyIsIm1lc2hTdGF0dXMiLCJ3ZWJydGNNZXNoU3RhdHVzIiwiaXNPbmxpbmUiLCJwdWJsaXNoZWRNYXAiLCJwdWJsaXNoZWREb2N1bWVudHMiLCJwdWJsaXNoZWRDb3VudCIsInZhbHVlcyIsInRyYW5zcG9ydEhpbnQiLCJkYXRhU3RhdHVzTGluZSIsImh1YkxvYWRpbmdIZWFkZXIiLCJodWJMb2FkaW5nTGVhZCIsImJpdGNvaW4iLCJjbG9ja1ZhbCIsImNsb2NrIiwic25hcHNob3RVcGRhdGVkIiwidW5kZWZpbmVkIiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsImNvbnRyYWN0SWQiLCJjb250cmFjdFNob3J0IiwiZmx1aWQiLCJDb250ZW50IiwicGxhY2Vob2xkZXIiLCJtaW5IZWlnaHQiLCJhY3RpdmUiLCJpbmxpbmUiLCJTdWJoZWFkZXIiLCJvblJlZnJlc2hOZXR3b3JrU3RhdHVzIiwidHlwZSIsImxhYmVsUG9zaXRpb24iLCJGcmFnbWVudCIsInByb21vIiwiZGlzYWJsZWQiLCJEZXNjcmlwdGlvbiIsIndvcmRCcmVhayIsImNvbm5lY3RlZCIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsImF2YWlsYWJsZSIsImJlc3RCbG9ja0hhc2giLCJtZW1wb29sVHhDb3VudCIsIm1lbXBvb2xCeXRlcyIsImJpdGNvaW5MaWdodG5pbmciLCJzaWRlY2hhaW4iLCJhY3Rpdml0aWVzIiwid2FybmluZyIsInJvbGUiLCJpZGVudGl0eSIsImluY2x1ZGVIZWFkZXIiLCJlbnRyeVR5cGVGaWx0ZXIiLCJvcGVuIiwib25DbG9zZSIsIl9jbG9zZUNvbm5lY3RNb2RhbCIsImNsb3NlT25Fc2NhcGUiLCJjbG9zZU9uRGltbWVyQ2xpY2siLCJvblN1Ym1pdCIsInByZXZlbnREZWZhdWx0IiwiX3N1Ym1pdENvbm5lY3RQZWVySWQiLCJGaWVsZCIsImh0bWxGb3IiLCJvbkNoYW5nZSIsIkFjdGlvbnMiLCJDb21wb25lbnQiLCJIb21lV2l0aExvY2F0aW9uIiwiX1JlYWN0JHVzZVN0YXRlIiwidXNlU3RhdGUiLCJfUmVhY3QkdXNlU3RhdGUyIiwic2V0TmV0d29ya1N0YXR1c0Zyb21FdmVudCIsInVzZUVmZmVjdCIsInNlZWQiLCJpbnN0Iiwib25OcyIsImRldGFpbCIsInVzZUxheW91dEVmZmVjdCIsInBhdGhuYW1lIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/Home.js\n\n}')},"./components/HubAlertStack.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require.Button,\n Icon = _require.Icon,\n Message = _require.Message;\nvar _require2 = __webpack_require__(/*! ../functions/hubUiAlerts */ "./functions/hubUiAlerts.js"),\n mergeAlertLists = _require2.mergeAlertLists,\n computeDismissedIdSet = _require2.computeDismissedIdSet,\n filterActiveAlerts = _require2.filterActiveAlerts,\n fetchPersistedDismissedIds = _require2.fetchPersistedDismissedIds,\n dismissHubUiAlert = _require2.dismissHubUiAlert,\n subscribeHubUiAlertDismissals = _require2.subscribeHubUiAlertDismissals;\nfunction readWindowOverlayAlerts() {\n try {\n if (typeof window === \'undefined\') return [];\n var w = window.FABRIC_HUB_UI_ALERTS;\n return Array.isArray(w) ? w : [];\n } catch (e) {\n return [];\n }\n}\nfunction HubAlertStack(props) {\n var adminToken = props && props.adminToken != null ? String(props.adminToken).trim() : \'\';\n var _React$useState = React.useState([]),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n allAlerts = _React$useState2[0],\n setAllAlerts = _React$useState2[1];\n var _React$useState3 = React.useState([]),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n active = _React$useState4[0],\n setActive = _React$useState4[1];\n var _React$useState5 = React.useState(0),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n index = _React$useState6[0],\n setIndex = _React$useState6[1];\n var scrollerRef = React.useRef(null);\n React.useEffect(function () {\n var cancelled = false;\n _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var server, res, body, merged, serverDismissed, dismissed, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n server = [];\n _context.p = 1;\n _context.n = 2;\n return fetch(\'/services/ui-config\', {\n headers: {\n Accept: \'application/json\'\n }\n });\n case 2:\n res = _context.v;\n if (!res.ok) {\n _context.n = 4;\n break;\n }\n _context.n = 3;\n return res.json()["catch"](function () {\n return {};\n });\n case 3:\n body = _context.v;\n server = body && Array.isArray(body.alerts) ? body.alerts : [];\n case 4:\n _context.n = 6;\n break;\n case 5:\n _context.p = 5;\n _t = _context.v;\n case 6:\n if (!cancelled) {\n _context.n = 7;\n break;\n }\n return _context.a(2);\n case 7:\n merged = mergeAlertLists(server, readWindowOverlayAlerts());\n setAllAlerts(merged);\n _context.n = 8;\n return fetchPersistedDismissedIds();\n case 8:\n serverDismissed = _context.v;\n if (!cancelled) {\n _context.n = 9;\n break;\n }\n return _context.a(2);\n case 9:\n dismissed = computeDismissedIdSet(merged, serverDismissed);\n setActive(filterActiveAlerts(merged, dismissed));\n setIndex(0);\n case 10:\n return _context.a(2);\n }\n }, _callee, null, [[1, 5]]);\n }))();\n return function () {\n cancelled = true;\n };\n }, []);\n React.useEffect(function () {\n var off = subscribeHubUiAlertDismissals(function () {\n setAllAlerts(function (cur) {\n var dismissed = computeDismissedIdSet(cur, []);\n setActive(filterActiveAlerts(cur, dismissed));\n setIndex(function (i) {\n return Math.min(i, Math.max(0, filterActiveAlerts(cur, dismissed).length - 1));\n });\n return cur;\n });\n });\n return off;\n }, []);\n React.useEffect(function () {\n if (index >= active.length && active.length > 0) setIndex(active.length - 1);\n if (active.length === 0) setIndex(0);\n }, [active.length, index]);\n var onDismiss = React.useCallback(function (alert) {\n dismissHubUiAlert(alert, {\n adminToken: adminToken\n });\n setAllAlerts(function (cur) {\n var dismissed = computeDismissedIdSet(cur, []);\n var nextActive = filterActiveAlerts(cur, dismissed);\n setActive(nextActive);\n setIndex(function (i) {\n return Math.min(i, Math.max(0, nextActive.length - 1));\n });\n return cur;\n });\n }, [adminToken]);\n var scrollToIndex = React.useCallback(function (i) {\n var el = scrollerRef.current;\n if (!el || !active.length) return;\n var w = el.clientWidth || 1;\n el.scrollTo({\n left: i * w,\n behavior: \'smooth\'\n });\n }, [active.length]);\n var onPrev = function onPrev() {\n var i = Math.max(0, index - 1);\n setIndex(i);\n scrollToIndex(i);\n };\n var onNext = function onNext() {\n var i = Math.min(active.length - 1, index + 1);\n setIndex(i);\n scrollToIndex(i);\n };\n if (!active.length) return null;\n var showNav = active.length > 1;\n return /*#__PURE__*/React.createElement("div", {\n id: "fabric-hub-alert-stack",\n role: "region",\n "aria-label": "Hub alerts",\n style: {\n margin: \'0 -1em 0.5rem -1em\',\n padding: \'0 0.5rem\',\n background: \'linear-gradient(to bottom, rgba(0,0,0,0.04), transparent)\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'stretch\',\n gap: \'0.25rem\',\n maxWidth: \'100%\'\n }\n }, showNav ? /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n icon: true,\n "aria-label": "Previous alert",\n disabled: index <= 0,\n onClick: onPrev,\n style: {\n alignSelf: \'center\',\n flex: \'0 0 auto\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "chevron left"\n })) : null, /*#__PURE__*/React.createElement("div", {\n ref: scrollerRef,\n onScroll: function onScroll(e) {\n var el = e.target;\n var w = el.clientWidth || 1;\n var i = Math.round(el.scrollLeft / w);\n if (i !== index && i >= 0 && i < active.length) setIndex(i);\n },\n style: {\n flex: \'1 1 auto\',\n display: \'flex\',\n overflowX: \'auto\',\n scrollSnapType: \'x mandatory\',\n scrollBehavior: \'smooth\',\n WebkitOverflowScrolling: \'touch\',\n gap: 0\n }\n }, active.map(function (alert) {\n return /*#__PURE__*/React.createElement("div", {\n key: alert.id,\n id: alert.elementName,\n "data-alert-id": alert.id,\n style: {\n flex: \'0 0 100%\',\n scrollSnapAlign: \'start\',\n minWidth: \'100%\',\n boxSizing: \'border-box\',\n padding: \'0.15rem 0\'\n }\n }, /*#__PURE__*/React.createElement(Message, {\n info: alert.severity === \'info\',\n warning: alert.severity === \'warning\',\n error: alert.severity === \'error\',\n success: alert.severity === \'success\',\n style: {\n margin: 0,\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n gap: \'0.75rem\'\n }\n }, /*#__PURE__*/React.createElement("span", {\n style: {\n flex: \'1 1 auto\',\n lineHeight: 1.35,\n fontSize: \'0.92rem\'\n }\n }, alert.message), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n compact: true,\n size: "small",\n "aria-label": "Dismiss alert",\n onClick: function onClick() {\n return onDismiss(alert);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "close"\n }))));\n })), showNav ? /*#__PURE__*/React.createElement(Button, {\n type: "button",\n basic: true,\n icon: true,\n "aria-label": "Next alert",\n disabled: index >= active.length - 1,\n onClick: onNext,\n style: {\n alignSelf: \'center\',\n flex: \'0 0 auto\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "chevron right"\n })) : null), showNav ? /*#__PURE__*/React.createElement("div", {\n style: {\n textAlign: \'center\',\n fontSize: \'0.8rem\',\n color: \'#666\',\n marginTop: \'-0.15rem\'\n }\n }, index + 1, " / ", active.length) : null);\n}\nmodule.exports = HubAlertStack;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFPO01BQ1osY0FBVyxlQUFlO01BQzFCNUIsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7UUFBQSxPQUFRN0IsU0FBUyxDQUFDRSxLQUFLLENBQUM7TUFBQTtJQUFDLGdCQUVoQzVELEtBQUEsQ0FBQXdFLGFBQUEsQ0FBQ3BFLElBQUk7TUFBQ1gsSUFBSSxFQUFDO0lBQU8sQ0FBRSxDQUNkLENBQ0QsQ0FDTixDQUFDO0VBQUEsQ0FDUCxDQUNFLENBQUMsRUFDTDhFLE9BQU8sZ0JBQ052RSxLQUFBLENBQUF3RSxhQUFBLENBQUNyRSxNQUFNO0lBQ0xnRixJQUFJLEVBQUMsUUFBUTtJQUNiQyxLQUFLO0lBQ0xDLElBQUk7SUFDSixjQUFXLFlBQVk7SUFDdkJDLFFBQVEsRUFBRXRELEtBQUssSUFBSUosTUFBTSxDQUFDekUsTUFBTSxHQUFHLENBQUU7SUFDckNvSSxPQUFPLEVBQUVqQixNQUFPO0lBQ2hCSyxLQUFLLEVBQUU7TUFBRWEsU0FBUyxFQUFFLFFBQVE7TUFBRUMsSUFBSSxFQUFFO0lBQVc7RUFBRSxnQkFFakR6RixLQUFBLENBQUF3RSxhQUFBLENBQUNwRSxJQUFJO0lBQUNYLElBQUksRUFBQztFQUFlLENBQUUsQ0FDdEIsQ0FBQyxHQUNQLElBQ0QsQ0FBQyxFQUNMOEUsT0FBTyxnQkFDTnZFLEtBQUEsQ0FBQXdFLGFBQUE7SUFBS0csS0FBSyxFQUFFO01BQUV5QyxTQUFTLEVBQUUsUUFBUTtNQUFFSixRQUFRLEVBQUUsUUFBUTtNQUFFSyxLQUFLLEVBQUUsTUFBTTtNQUFFQyxTQUFTLEVBQUU7SUFBVztFQUFFLEdBQzNGdEYsS0FBSyxHQUFHLENBQUMsRUFBQyxLQUFHLEVBQUNKLE1BQU0sQ0FBQ3pFLE1BQ25CLENBQUMsR0FDSixJQUNELENBQUM7QUFFVjtBQUVBb0ssTUFBTSxDQUFDQyxPQUFPLEdBQUd4RyxhQUFhIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0h1YkFsZXJ0U3RhY2suanM/YmEzNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgQnV0dG9uLCBJY29uLCBNZXNzYWdlIH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3Qge1xuICBtZXJnZUFsZXJ0TGlzdHMsXG4gIGNvbXB1dGVEaXNtaXNzZWRJZFNldCxcbiAgZmlsdGVyQWN0aXZlQWxlcnRzLFxuICBmZXRjaFBlcnNpc3RlZERpc21pc3NlZElkcyxcbiAgZGlzbWlzc0h1YlVpQWxlcnQsXG4gIHN1YnNjcmliZUh1YlVpQWxlcnREaXNtaXNzYWxzXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YlVpQWxlcnRzJyk7XG5mdW5jdGlvbiByZWFkV2luZG93T3ZlcmxheUFsZXJ0cyAoKSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gW107XG4gICAgY29uc3QgdyA9IHdpbmRvdy5GQUJSSUNfSFVCX1VJX0FMRVJUUztcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh3KSA/IHcgOiBbXTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBIdWJBbGVydFN0YWNrIChwcm9wcykge1xuICBjb25zdCBhZG1pblRva2VuID0gcHJvcHMgJiYgcHJvcHMuYWRtaW5Ub2tlbiAhPSBudWxsID8gU3RyaW5nKHByb3BzLmFkbWluVG9rZW4pLnRyaW0oKSA6ICcnO1xuICBjb25zdCBbYWxsQWxlcnRzLCBzZXRBbGxBbGVydHNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICBjb25zdCBbYWN0aXZlLCBzZXRBY3RpdmVdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICBjb25zdCBzY3JvbGxlclJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHNlcnZlciA9IFtdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goJy9zZXJ2aWNlcy91aS1jb25maWcnLCB7IGhlYWRlcnM6IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfSB9KTtcbiAgICAgICAgaWYgKHJlcy5vaykge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXMuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgICAgIHNlcnZlciA9IGJvZHkgJiYgQXJyYXkuaXNBcnJheShib2R5LmFsZXJ0cykgPyBib2R5LmFsZXJ0cyA6IFtdO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChfKSB7IC8qIGlnbm9yZSAqLyB9XG4gICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICBjb25zdCBtZXJnZWQgPSBtZXJnZUFsZXJ0TGlzdHMoc2VydmVyLCByZWFkV2luZG93T3ZlcmxheUFsZXJ0cygpKTtcbiAgICAgIHNldEFsbEFsZXJ0cyhtZXJnZWQpO1xuICAgICAgY29uc3Qgc2VydmVyRGlzbWlzc2VkID0gYXdhaXQgZmV0Y2hQZXJzaXN0ZWREaXNtaXNzZWRJZHMoKTtcbiAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVybjtcbiAgICAgIGNvbnN0IGRpc21pc3NlZCA9IGNvbXB1dGVEaXNtaXNzZWRJZFNldChtZXJnZWQsIHNlcnZlckRpc21pc3NlZCk7XG4gICAgICBzZXRBY3RpdmUoZmlsdGVyQWN0aXZlQWxlcnRzKG1lcmdlZCwgZGlzbWlzc2VkKSk7XG4gICAgICBzZXRJbmRleCgwKTtcbiAgICB9KSgpO1xuICAgIHJldHVybiAoKSA9PiB7IGNhbmNlbGxlZCA9IHRydWU7IH07XG4gIH0sIFtdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9mZiA9IHN1YnNjcmliZUh1YlVpQWxlcnREaXNtaXNzYWxzKCgpID0+IHtcbiAgICAgIHNldEFsbEFsZXJ0cygoY3VyKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpc21pc3NlZCA9IGNvbXB1dGVEaXNtaXNzZWRJZFNldChjdXIsIFtdKTtcbiAgICAgICAgc2V0QWN0aXZlKGZpbHRlckFjdGl2ZUFsZXJ0cyhjdXIsIGRpc21pc3NlZCkpO1xuICAgICAgICBzZXRJbmRleCgoaSkgPT4gTWF0aC5taW4oaSwgTWF0aC5tYXgoMCwgZmlsdGVyQWN0aXZlQWxlcnRzKGN1ciwgZGlzbWlzc2VkKS5sZW5ndGggLSAxKSkpO1xuICAgICAgICByZXR1cm4gY3VyO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG9mZjtcbiAgfSwgW10pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGluZGV4ID49IGFjdGl2ZS5sZW5ndGggJiYgYWN0aXZlLmxlbmd0aCA+IDApIHNldEluZGV4KGFjdGl2ZS5sZW5ndGggLSAxKTtcbiAgICBpZiAoYWN0aXZlLmxlbmd0aCA9PT0gMCkgc2V0SW5kZXgoMCk7XG4gIH0sIFthY3RpdmUubGVuZ3RoLCBpbmRleF0pO1xuXG4gIGNvbnN0IG9uRGlzbWlzcyA9IFJlYWN0LnVzZUNhbGxiYWNrKChhbGVydCkgPT4ge1xuICAgIGRpc21pc3NIdWJVaUFsZXJ0KGFsZXJ0LCB7IGFkbWluVG9rZW4gfSk7XG4gICAgc2V0QWxsQWxlcnRzKChjdXIpID0+IHtcbiAgICAgIGNvbnN0IGRpc21pc3NlZCA9IGNvbXB1dGVEaXNtaXNzZWRJZFNldChjdXIsIFtdKTtcbiAgICAgIGNvbnN0IG5leHRBY3RpdmUgPSBmaWx0ZXJBY3RpdmVBbGVydHMoY3VyLCBkaXNtaXNzZWQpO1xuICAgICAgc2V0QWN0aXZlKG5leHRBY3RpdmUpO1xuICAgICAgc2V0SW5kZXgoKGkpID0+IE1hdGgubWluKGksIE1hdGgubWF4KDAsIG5leHRBY3RpdmUubGVuZ3RoIC0gMSkpKTtcbiAgICAgIHJldHVybiBjdXI7XG4gICAgfSk7XG4gIH0sIFthZG1pblRva2VuXSk7XG5cbiAgY29uc3Qgc2Nyb2xsVG9JbmRleCA9IFJlYWN0LnVzZUNhbGxiYWNrKChpKSA9PiB7XG4gICAgY29uc3QgZWwgPSBzY3JvbGxlclJlZi5jdXJyZW50O1xuICAgIGlmICghZWwgfHwgIWFjdGl2ZS5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCB3ID0gZWwuY2xpZW50V2lkdGggfHwgMTtcbiAgICBlbC5zY3JvbGxUbyh7IGxlZnQ6IGkgKiB3LCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gIH0sIFthY3RpdmUubGVuZ3RoXSk7XG5cbiAgY29uc3Qgb25QcmV2ID0gKCkgPT4ge1xuICAgIGNvbnN0IGkgPSBNYXRoLm1heCgwLCBpbmRleCAtIDEpO1xuICAgIHNldEluZGV4KGkpO1xuICAgIHNjcm9sbFRvSW5kZXgoaSk7XG4gIH07XG5cbiAgY29uc3Qgb25OZXh0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGkgPSBNYXRoLm1pbihhY3RpdmUubGVuZ3RoIC0gMSwgaW5kZXggKyAxKTtcbiAgICBzZXRJbmRleChpKTtcbiAgICBzY3JvbGxUb0luZGV4KGkpO1xuICB9O1xuXG4gIGlmICghYWN0aXZlLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3Qgc2hvd05hdiA9IGFjdGl2ZS5sZW5ndGggPiAxO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgaWQ9XCJmYWJyaWMtaHViLWFsZXJ0LXN0YWNrXCJcbiAgICAgIHJvbGU9XCJyZWdpb25cIlxuICAgICAgYXJpYS1sYWJlbD1cIkh1YiBhbGVydHNcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgbWFyZ2luOiAnMCAtMWVtIDAuNXJlbSAtMWVtJyxcbiAgICAgICAgcGFkZGluZzogJzAgMC41cmVtJyxcbiAgICAgICAgYmFja2dyb3VuZDogJ2xpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwwLDAsMC4wNCksIHRyYW5zcGFyZW50KSdcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdzdHJldGNoJywgZ2FwOiAnMC4yNXJlbScsIG1heFdpZHRoOiAnMTAwJScgfX0+XG4gICAgICAgIHtzaG93TmF2ID8gKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBhbGVydFwiXG4gICAgICAgICAgICBkaXNhYmxlZD17aW5kZXggPD0gMH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e29uUHJldn1cbiAgICAgICAgICAgIHN0eWxlPXt7IGFsaWduU2VsZjogJ2NlbnRlcicsIGZsZXg6ICcwIDAgYXV0bycgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwiY2hldnJvbiBsZWZ0XCIgLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e3Njcm9sbGVyUmVmfVxuICAgICAgICAgIG9uU2Nyb2xsPXsoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWwgPSBlLnRhcmdldDtcbiAgICAgICAgICAgIGNvbnN0IHcgPSBlbC5jbGllbnRXaWR0aCB8fCAxO1xuICAgICAgICAgICAgY29uc3QgaSA9IE1hdGgucm91bmQoZWwuc2Nyb2xsTGVmdCAvIHcpO1xuICAgICAgICAgICAgaWYgKGkgIT09IGluZGV4ICYmIGkgPj0gMCAmJiBpIDwgYWN0aXZlLmxlbmd0aCkgc2V0SW5kZXgoaSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZmxleDogJzEgMSBhdXRvJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIG92ZXJmbG93WDogJ2F1dG8nLFxuICAgICAgICAgICAgc2Nyb2xsU25hcFR5cGU6ICd4IG1hbmRhdG9yeScsXG4gICAgICAgICAgICBzY3JvbGxCZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICAgIGdhcDogMFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7YWN0aXZlLm1hcCgoYWxlcnQpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAga2V5PXthbGVydC5pZH1cbiAgICAgICAgICAgICAgaWQ9e2FsZXJ0LmVsZW1lbnROYW1lfVxuICAgICAgICAgICAgICBkYXRhLWFsZXJ0LWlkPXthbGVydC5pZH1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBmbGV4OiAnMCAwIDEwMCUnLFxuICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBBbGlnbjogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcwLjE1cmVtIDAnXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgICAgaW5mbz17YWxlcnQuc2V2ZXJpdHkgPT09ICdpbmZvJ31cbiAgICAgICAgICAgICAgICB3YXJuaW5nPXthbGVydC5zZXZlcml0eSA9PT0gJ3dhcm5pbmcnfVxuICAgICAgICAgICAgICAgIGVycm9yPXthbGVydC5zZXZlcml0eSA9PT0gJ2Vycm9yJ31cbiAgICAgICAgICAgICAgICBzdWNjZXNzPXthbGVydC5zZXZlcml0eSA9PT0gJ3N1Y2Nlc3MnfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbjogMCwgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJywgZ2FwOiAnMC43NXJlbScgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZsZXg6ICcxIDEgYXV0bycsIGxpbmVIZWlnaHQ6IDEuMzUsIGZvbnRTaXplOiAnMC45MnJlbScgfX0+e2FsZXJ0Lm1lc3NhZ2V9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgIGNvbXBhY3RcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGlzbWlzcyBhbGVydFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkRpc21pc3MoYWxlcnQpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjbG9zZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3Nob3dOYXYgPyAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5leHQgYWxlcnRcIlxuICAgICAgICAgICAgZGlzYWJsZWQ9e2luZGV4ID49IGFjdGl2ZS5sZW5ndGggLSAxfVxuICAgICAgICAgICAgb25DbGljaz17b25OZXh0fVxuICAgICAgICAgICAgc3R5bGU9e3sgYWxpZ25TZWxmOiAnY2VudGVyJywgZmxleDogJzAgMCBhdXRvJyB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjaGV2cm9uIHJpZ2h0XCIgLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtzaG93TmF2ID8gKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IHRleHRBbGlnbjogJ2NlbnRlcicsIGZvbnRTaXplOiAnMC44cmVtJywgY29sb3I6ICcjNjY2JywgbWFyZ2luVG9wOiAnLTAuMTVyZW0nIH19PlxuICAgICAgICAgIHtpbmRleCArIDF9IC8ge2FjdGl2ZS5sZW5ndGh9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSHViQWxlcnRTdGFjaztcbiJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJTeW1ib2wiLCJuIiwiaXRlcmF0b3IiLCJvIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJuZXh0IiwicHVzaCIsImlzQXJyYXkiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkJ1dHRvbiIsIkljb24iLCJNZXNzYWdlIiwiX3JlcXVpcmUyIiwibWVyZ2VBbGVydExpc3RzIiwiY29tcHV0ZURpc21pc3NlZElkU2V0IiwiZmlsdGVyQWN0aXZlQWxlcnRzIiwiZmV0Y2hQZXJzaXN0ZWREaXNtaXNzZWRJZHMiLCJkaXNtaXNzSHViVWlBbGVydCIsInN1YnNjcmliZUh1YlVpQWxlcnREaXNtaXNzYWxzIiwicmVhZFdpbmRvd092ZXJsYXlBbGVydHMiLCJ3aW5kb3ciLCJGQUJSSUNfSFVCX1VJX0FMRVJUUyIsIkh1YkFsZXJ0U3RhY2siLCJwcm9wcyIsImFkbWluVG9rZW4iLCJTdHJpbmciLCJ0cmltIiwiX1JlYWN0JHVzZVN0YXRlIiwidXNlU3RhdGUiLCJfUmVhY3QkdXNlU3RhdGUyIiwiYWxsQWxlcnRzIiwic2V0QWxsQWxlcnRzIiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJhY3RpdmUiLCJzZXRBY3RpdmUiLCJfUmVhY3QkdXNlU3RhdGU1IiwiX1JlYWN0JHVzZVN0YXRlNiIsImluZGV4Iiwic2V0SW5kZXgiLCJzY3JvbGxlclJlZiIsInVzZVJlZiIsInVzZUVmZmVjdCIsImNhbmNlbGxlZCIsIl9jYWxsZWUiLCJzZXJ2ZXIiLCJyZXMiLCJib2R5IiwibWVyZ2VkIiwic2VydmVyRGlzbWlzc2VkIiwiZGlzbWlzc2VkIiwiX3QiLCJfY29udGV4dCIsImZldGNoIiwiaGVhZGVycyIsIkFjY2VwdCIsIm9rIiwianNvbiIsImFsZXJ0cyIsIm9mZiIsImN1ciIsIk1hdGgiLCJtaW4iLCJtYXgiLCJvbkRpc21pc3MiLCJ1c2VDYWxsYmFjayIsImFsZXJ0IiwibmV4dEFjdGl2ZSIsInNjcm9sbFRvSW5kZXgiLCJlbCIsImN1cnJlbnQiLCJjbGllbnRXaWR0aCIsInNjcm9sbFRvIiwibGVmdCIsImJlaGF2aW9yIiwib25QcmV2Iiwib25OZXh0Iiwic2hvd05hdiIsImNyZWF0ZUVsZW1lbnQiLCJpZCIsInJvbGUiLCJzdHlsZSIsIm1hcmdpbiIsInBhZGRpbmciLCJiYWNrZ3JvdW5kIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJnYXAiLCJtYXhXaWR0aCIsInR5cGUiLCJiYXNpYyIsImljb24iLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJhbGlnblNlbGYiLCJmbGV4IiwicmVmIiwib25TY3JvbGwiLCJ0YXJnZXQiLCJyb3VuZCIsInNjcm9sbExlZnQiLCJvdmVyZmxvd1giLCJzY3JvbGxTbmFwVHlwZSIsInNjcm9sbEJlaGF2aW9yIiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJtYXAiLCJrZXkiLCJlbGVtZW50TmFtZSIsInNjcm9sbFNuYXBBbGlnbiIsIm1pbldpZHRoIiwiYm94U2l6aW5nIiwiaW5mbyIsInNldmVyaXR5Iiwid2FybmluZyIsImVycm9yIiwic3VjY2VzcyIsImp1c3RpZnlDb250ZW50IiwibGluZUhlaWdodCIsImZvbnRTaXplIiwibWVzc2FnZSIsImNvbXBhY3QiLCJzaXplIiwidGV4dEFsaWduIiwiY29sb3IiLCJtYXJnaW5Ub3AiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/HubAlertStack.js\n\n}')},"./components/HubInterface.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n// Constants\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar _require = __webpack_require__(/*! ../constants */ \"./constants.js\"),\n BRAND_NAME = _require.BRAND_NAME,\n BROWSER_DATABASE_NAME = _require.BROWSER_DATABASE_NAME,\n BROWSER_DATABASE_TOKEN_TABLE = _require.BROWSER_DATABASE_TOKEN_TABLE;\nvar _require2 = __webpack_require__(/*! ../functions/fabricDelegationLocal */ \"./functions/fabricDelegationLocal.js\"),\n DELEGATION_STORAGE_KEY = _require2.DELEGATION_STORAGE_KEY,\n notifyDelegationStorageChanged = _require2.notifyDelegationStorageChanged,\n hasExternalSigningDelegation = _require2.hasExternalSigningDelegation;\nvar _require3 = __webpack_require__(/*! ../functions/fabricSafeLog */ \"./functions/fabricSafeLog.js\"),\n safeIdentityErr = _require3.safeIdentityErr;\nvar _require4 = __webpack_require__(/*! ../functions/fabricBrowserState */ \"./functions/fabricBrowserState.js\"),\n readStorageString = _require4.readStorageString,\n readStorageJSON = _require4.readStorageJSON,\n writeStorageString = _require4.writeStorageString,\n writeStorageJSON = _require4.writeStorageJSON,\n removeStorageKey = _require4.removeStorageKey,\n clearFabricBrowserIdentityLocal = _require4.clearFabricBrowserIdentityLocal;\nvar _require5 = __webpack_require__(/*! ../functions/fabricPostSetupBrowserIdentity */ \"./functions/fabricPostSetupBrowserIdentity.js\"),\n hasCompletedPostSetupBrowserIdentity = _require5.hasCompletedPostSetupBrowserIdentity;\nvar _require6 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ \"./functions/hubUiFeatureFlags.js\"),\n loadHubUiFeatureFlags = _require6.loadHubUiFeatureFlags,\n setHubUiFeatureFlag = _require6.setHubUiFeatureFlag,\n subscribeHubUiFeatureFlags = _require6.subscribeHubUiFeatureFlags,\n fetchPersistedHubUiFeatureFlags = _require6.fetchPersistedHubUiFeatureFlags,\n installHubUiFeatureFlagsWindowApi = _require6.installHubUiFeatureFlagsWindowApi;\n// Dependencies\nvar React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nvar ReactDOMServer = __webpack_require__(/*! react-dom/server */ \"./node_modules/react-dom/server.browser.js\");\nvar _require7 = __webpack_require__(/*! react-dom/server */ \"./node_modules/react-dom/server.browser.js\"),\n renderToString = _require7.renderToString;\nvar _require8 = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/dist/index.js\"),\n BrowserRouter = _require8.BrowserRouter,\n Routes = _require8.Routes,\n Route = _require8.Route,\n Navigate = _require8.Navigate,\n Link = _require8.Link,\n useNavigate = _require8.useNavigate,\n useLocation = _require8.useLocation,\n useSearchParams = _require8.useSearchParams,\n useParams = _require8.useParams;\n\n// Fabric Types\nvar _require9 = __webpack_require__(/*! ../functions/fabricHubLocalIdentity */ \"./functions/fabricHubLocalIdentity.js\"),\n buildLocalFabricIdentityPayload = _require9.buildLocalFabricIdentityPayload,\n fabricPlaintextSigningUnlockable = _require9.fabricPlaintextSigningUnlockable;\nvar _require0 = __webpack_require__(/*! ../functions/fabricAccountDerivedIdentity */ \"./functions/fabricAccountDerivedIdentity.js\"),\n deriveFabricAccountIdentityKeys = _require0.deriveFabricAccountIdentityKeys,\n fabricRootXpubFromMasterXprv = _require0.fabricRootXpubFromMasterXprv;\nvar _require1 = __webpack_require__(/*! ../functions/fabricBrowserIdentityDev */ \"./functions/fabricBrowserIdentityDev.js\"),\n applyFabricDevBrowserSeedBootstrap = _require1.applyFabricDevBrowserSeedBootstrap,\n mergeUnlockedSessionIntoIdentity = _require1.mergeUnlockedSessionIntoIdentity;\nvar _require10 = __webpack_require__(/*! ../functions/fundLocalKeyFromHubFaucet */ \"./functions/fundLocalKeyFromHubFaucet.js\"),\n fundLocalKeyFromHubFaucet = _require10.fundLocalKeyFromHubFaucet,\n shouldAutoFundDesktopLocalKey = _require10.shouldAutoFundDesktopLocalKey,\n discoverLocalHubFaucet = _require10.discoverLocalHubFaucet,\n markAutoFaucetDone = _require10.markAutoFaucetDone;\n\n// Components\nvar Bridge = __webpack_require__(/*! ./Bridge */ \"./components/Bridge.js\");\nvar BitcoinHome = __webpack_require__(/*! ./BitcoinHome */ \"./components/BitcoinHome.js\");\nvar LightningHome = __webpack_require__(/*! ./LightningHome */ \"./components/LightningHome.js\");\nvar BitcoinBlockList = __webpack_require__(/*! ./BitcoinBlockList */ \"./components/BitcoinBlockList.js\");\nvar FaucetHome = __webpack_require__(/*! ./FaucetHome */ \"./components/FaucetHome.js\");\nvar Onboarding = __webpack_require__(/*! ./Onboarding */ \"./components/Onboarding.js\");\nvar BitcoinBlockView = __webpack_require__(/*! ./BitcoinBlockView */ \"./components/BitcoinBlockView.js\");\nvar BitcoinPaymentsHome = __webpack_require__(/*! ./BitcoinPaymentsHome */ \"./components/BitcoinPaymentsHome.js\");\nvar BitcoinTransactionsHome = __webpack_require__(/*! ./BitcoinTransactionsHome */ \"./components/BitcoinTransactionsHome.js\");\nfunction NavigatePaymentsLegacyToCanonical() {\n var loc = useLocation();\n return /*#__PURE__*/React.createElement(Navigate, {\n to: {\n pathname: '/payments',\n search: loc.search || '',\n hash: loc.hash || ''\n },\n replace: true\n });\n}\nfunction BitcoinPaymentsHomeRoute(props) {\n var _useSearchParams = useSearchParams(),\n _useSearchParams2 = _slicedToArray(_useSearchParams, 2),\n searchParams = _useSearchParams2[0],\n setSearchParams = _useSearchParams2[1];\n React.useEffect(function () {\n try {\n if (!searchParams.has('bip44Account')) return;\n var sp = new URLSearchParams(searchParams);\n sp[\"delete\"]('bip44Account');\n setSearchParams(sp, {\n replace: true\n });\n } catch (_) {/* ignore */}\n }, [searchParams, setSearchParams]);\n var payjoinSessionFromQuery = String(searchParams.get('payjoinSession') || '').trim();\n var payToFromQuery = String(searchParams.get('payTo') || '').trim();\n var payAmountSatsFromQuery = searchParams.get('payAmountSats');\n var bitcoinUriFromQuery = String(searchParams.get('bitcoinUri') || '').trim();\n return /*#__PURE__*/React.createElement(BitcoinPaymentsHome, _extends({}, props, {\n paymentsSetSearchParams: setSearchParams,\n payjoinSessionFromQuery: payjoinSessionFromQuery,\n payToFromQuery: payToFromQuery,\n payAmountSatsFromQuery: payAmountSatsFromQuery,\n bitcoinUriFromQuery: bitcoinUriFromQuery\n }));\n}\nfunction buildAdminGateNavigate(location, flag) {\n var blockedPath = \"\".concat(location.pathname || '').concat(location.search || '');\n var qs = new URLSearchParams();\n qs.set('blockedFlag', String(flag || ''));\n qs.set('blockedPath', blockedPath || '/');\n return {\n to: {\n pathname: '/settings/admin',\n search: \"?\".concat(qs.toString())\n },\n state: {\n featureFlagBlocked: flag,\n blockedPath: blockedPath\n }\n };\n}\n\n/** Legacy singular `/document/...` → plural canonical `/documents/...`. */\nfunction NavigateDocumentsDetailAlias() {\n var _useParams = useParams(),\n id = _useParams.id;\n var raw = id != null ? String(id).trim() : '';\n if (!raw) return /*#__PURE__*/React.createElement(Navigate, {\n to: \"/documents\",\n replace: true\n });\n return /*#__PURE__*/React.createElement(Navigate, {\n to: \"/documents/\".concat(encodeURIComponent(raw)),\n replace: true\n });\n}\n\n/** Legacy singular `/peer/...` → plural canonical `/peers/...`. */\nfunction NavigatePeerDetailAlias() {\n var f = loadHubUiFeatureFlags();\n var location = useLocation();\n if (!f.peers) {\n var blocked = buildAdminGateNavigate(location, 'peers');\n return /*#__PURE__*/React.createElement(Navigate, {\n to: blocked.to,\n replace: true,\n state: blocked.state\n });\n }\n var _useParams2 = useParams(),\n id = _useParams2.id;\n var raw = id != null ? String(id).trim() : '';\n if (!raw) return /*#__PURE__*/React.createElement(Navigate, {\n to: \"/peers\",\n replace: true\n });\n return /*#__PURE__*/React.createElement(Navigate, {\n to: \"/peers/\".concat(encodeURIComponent(raw)),\n replace: true\n });\n}\nfunction NavigatePeerRootAlias() {\n var f = loadHubUiFeatureFlags();\n var location = useLocation();\n if (!f.peers) {\n var blocked = buildAdminGateNavigate(location, 'peers');\n return /*#__PURE__*/React.createElement(Navigate, {\n to: blocked.to,\n replace: true,\n state: blocked.state\n });\n }\n return /*#__PURE__*/React.createElement(Navigate, {\n to: \"/peers\",\n replace: true\n });\n}\nfunction NavigateActivityToActivities() {\n var f = loadHubUiFeatureFlags();\n var location = useLocation();\n if (!f.activities) {\n var blocked = buildAdminGateNavigate(location, 'activities');\n return /*#__PURE__*/React.createElement(Navigate, {\n to: blocked.to,\n replace: true,\n state: blocked.state\n });\n }\n return /*#__PURE__*/React.createElement(Navigate, {\n to: \"/activities\",\n replace: true\n });\n}\nfunction UiFlagRoute(_ref) {\n var flag = _ref.flag,\n children = _ref.children;\n var f = loadHubUiFeatureFlags();\n var location = useLocation();\n if (!f[flag]) {\n var blocked = buildAdminGateNavigate(location, flag);\n return /*#__PURE__*/React.createElement(Navigate, {\n to: blocked.to,\n replace: true,\n state: blocked.state\n });\n }\n return children;\n}\n\n/** Peers routes: UI feature flag only (no hub admin token required). */\nfunction PeersFeatureRoute(_ref2) {\n var children = _ref2.children;\n var f = loadHubUiFeatureFlags();\n var location = useLocation();\n if (!f.peers) {\n var blocked = buildAdminGateNavigate(location, 'peers');\n return /*#__PURE__*/React.createElement(Navigate, {\n to: blocked.to,\n replace: true,\n state: blocked.state\n });\n }\n return children;\n}\n\n/** Legacy `/tx/...` bookmark → canonical Bitcoin transaction view. */\nfunction NavigateLegacyBitcoinTxAlias() {\n var f = loadHubUiFeatureFlags();\n var location = useLocation();\n if (!f.bitcoinExplorer) {\n var blocked = buildAdminGateNavigate(location, 'bitcoinExplorer');\n return /*#__PURE__*/React.createElement(Navigate, {\n to: blocked.to,\n replace: true,\n state: blocked.state\n });\n }\n var _useParams3 = useParams(),\n txhash = _useParams3.txhash;\n var raw = txhash != null ? String(txhash).trim() : '';\n if (!raw) return /*#__PURE__*/React.createElement(Navigate, {\n to: \"/services/bitcoin\",\n replace: true\n });\n return /*#__PURE__*/React.createElement(Navigate, {\n to: \"/services/bitcoin/transactions/\".concat(encodeURIComponent(raw)),\n replace: true\n });\n}\n\n/** Legacy `/block/...` bookmark → canonical Bitcoin block view. */\nfunction NavigateLegacyBitcoinBlockAlias() {\n var f = loadHubUiFeatureFlags();\n var location = useLocation();\n if (!f.bitcoinExplorer) {\n var blocked = buildAdminGateNavigate(location, 'bitcoinExplorer');\n return /*#__PURE__*/React.createElement(Navigate, {\n to: blocked.to,\n replace: true,\n state: blocked.state\n });\n }\n var _useParams4 = useParams(),\n blockhash = _useParams4.blockhash;\n var raw = blockhash != null ? String(blockhash).trim() : '';\n if (!raw) {\n return /*#__PURE__*/React.createElement(Navigate, {\n to: \"/services/bitcoin/blocks\",\n replace: true\n });\n }\n return /*#__PURE__*/React.createElement(Navigate, {\n to: \"/services/bitcoin/blocks/\".concat(encodeURIComponent(raw)),\n replace: true\n });\n}\nfunction UnknownRouteShell() {\n var _useLocation = useLocation(),\n pathname = _useLocation.pathname,\n search = _useLocation.search;\n var full = \"\".concat(pathname || '').concat(search || '') || '/';\n var _React$useState = React.useState(0),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n hubUiTick = _React$useState2[0],\n setHubUiTick = _React$useState2[1];\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setHubUiTick(function (t) {\n return t + 1;\n });\n });\n }, []);\n void hubUiTick;\n var uf = loadHubUiFeatureFlags();\n return /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: '2em'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: \"h3\"\n }, \"Page not found\"), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n color: '#666',\n marginBottom: '0.75em',\n lineHeight: 1.45\n }\n }, \"No hub UI for\", ' ', /*#__PURE__*/React.createElement(\"code\", {\n style: {\n wordBreak: 'break-all'\n }\n }, full), \".\"), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n color: '#666',\n marginBottom: '0.5em',\n lineHeight: 1.45\n }\n }, \"Use the \", /*#__PURE__*/React.createElement(\"strong\", null, \"top navigation\"), \" (Home, Documents, Contracts, and \", /*#__PURE__*/React.createElement(\"strong\", null, \"More\"), \") \\u2014 it lists the same places without duplicating them here.\", uf.activities ? ' The bell opens Notifications (toasts); the activity log is under More → Activity log.' : ''), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n color: '#666',\n lineHeight: 1.45\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: \"/\"\n }, \"Go to Home\"), ' · ', /*#__PURE__*/React.createElement(Link, {\n to: \"/settings\"\n }, \"Settings\"), uf.bitcoinPayments || uf.bitcoinLightning ? /*#__PURE__*/React.createElement(React.Fragment, null, ' · ', /*#__PURE__*/React.createElement(Link, {\n to: {\n pathname: '/services/bitcoin',\n hash: uf.bitcoinPayments ? 'fabric-bitcoin-payjoin' : 'fabric-bitcoin-lightning'\n }\n }, \"Treasury (Payjoin / Lightning)\")) : null, uf.sidechain ? /*#__PURE__*/React.createElement(React.Fragment, null, ' · ', /*#__PURE__*/React.createElement(Link, {\n to: \"/sidechains\"\n }, \"Statechain\")) : null));\n}\n\n/** HTML shell: `/services/payjoin` SPA → canonical `/payments` Payjoin surface; JSON still on REST payjoin bases. */\nfunction NavigatePayjoinSpaAlias() {\n var uf = loadHubUiFeatureFlags();\n if (uf.bitcoinPayments) {\n return /*#__PURE__*/React.createElement(Navigate, {\n to: {\n pathname: '/payments',\n hash: 'wealth-payjoin-board'\n },\n replace: true\n });\n }\n return /*#__PURE__*/React.createElement(Navigate, {\n to: {\n pathname: '/services/bitcoin',\n hash: 'fabric-bitcoin-payjoin'\n },\n replace: true\n });\n}\nvar BitcoinResourcesHome = __webpack_require__(/*! ./BitcoinResourcesHome */ \"./components/BitcoinResourcesHome.js\");\nvar BitcoinTransactionView = __webpack_require__(/*! ./BitcoinTransactionView */ \"./components/BitcoinTransactionView.js\");\nvar ChannelView = __webpack_require__(/*! ./ChannelView */ \"./components/ChannelView.js\");\nvar InvoiceListHome = __webpack_require__(/*! ./InvoiceListHome */ \"./components/InvoiceListHome.js\");\nfunction InvoiceListHomeRoute(props) {\n return /*#__PURE__*/React.createElement(InvoiceListHome, props);\n}\nvar BottomPanel = __webpack_require__(/*! ./BottomPanel */ \"./components/BottomPanel.js\");\nvar ContractsHome = __webpack_require__(/*! ./ContractsHome */ \"./components/ContractsHome.js\");\nvar ContractView = __webpack_require__(/*! ./ContractView */ \"./components/ContractView.js\");\nvar DocumentList = __webpack_require__(/*! ./DocumentList */ \"./components/DocumentList.js\");\nvar DocumentView = __webpack_require__(/*! ./DocumentView */ \"./components/DocumentView.js\");\nvar Home = __webpack_require__(/*! ./Home */ \"./components/Home.js\");\nvar ActivitiesHome = __webpack_require__(/*! ./ActivitiesHome */ \"./components/ActivitiesHome.js\");\nvar NotificationsHome = __webpack_require__(/*! ./NotificationsHome */ \"./components/NotificationsHome.js\");\nvar IdentityManager = __webpack_require__(/*! ./IdentityManager */ \"./components/IdentityManager.js\");\nvar FabricIdentityAccountControls = __webpack_require__(/*! ./fabricIdentity/FabricIdentityAccountControls */ \"./components/fabricIdentity/FabricIdentityAccountControls.js\");\nvar FabricPostSetupIdentityWizard = __webpack_require__(/*! ./fabricIdentity/FabricPostSetupIdentityWizard */ \"./components/fabricIdentity/FabricPostSetupIdentityWizard.js\");\nvar PeerList = __webpack_require__(/*! ./PeerList */ \"./components/PeerList.js\");\nvar PeerView = __webpack_require__(/*! ./PeerView */ \"./components/PeerView.js\");\nvar TopPanel = __webpack_require__(/*! ./TopPanel */ \"./components/TopPanel.js\");\nvar HubAlertStack = __webpack_require__(/*! ./HubAlertStack */ \"./components/HubAlertStack.js\");\n\n/** Alert dismiss PUT uses admin token only on admin settings routes (not on general pages). */\nfunction HubAlertStackLocationGate(_ref3) {\n var adminToken = _ref3.adminToken;\n var loc = useLocation();\n var onAdmin = String(loc.pathname || '').startsWith('/settings/admin');\n var token = onAdmin && adminToken && String(adminToken).trim() || '';\n return /*#__PURE__*/React.createElement(HubAlertStack, {\n adminToken: token || undefined\n });\n}\nvar _require11 = __webpack_require__(/*! ../functions/bitcoinClient */ \"./functions/bitcoinClient.js\"),\n getSpendWalletContext = _require11.getSpendWalletContext,\n fetchWalletSummaryWithCache = _require11.fetchWalletSummaryWithCache,\n loadUpstreamSettings = _require11.loadUpstreamSettings,\n saveSpendXpubWatchForIdentity = _require11.saveSpendXpubWatchForIdentity,\n clearSpendXpubWatch = _require11.clearSpendXpubWatch;\nvar _require12 = __webpack_require__(/*! react-toastify */ \"./node_modules/react-toastify/dist/react-toastify.js\"),\n ToastContainer = _require12.ToastContainer,\n toastify = _require12.toast,\n Slide = _require12.Slide;\nvar _require13 = __webpack_require__(/*! ../functions/toast */ \"./functions/toast.js\"),\n toast = _require13.toast;\nvar SecurityHome = __webpack_require__(/*! ./SecurityHome */ \"./components/SecurityHome.js\");\nvar SecuritySessionHome = __webpack_require__(/*! ./SecuritySessionHome */ \"./components/SecuritySessionHome.js\");\nvar SettingsHome = __webpack_require__(/*! ./SettingsHome */ \"./components/SettingsHome.js\");\nvar CollaborationHome = __webpack_require__(/*! ./CollaborationHome */ \"./components/CollaborationHome.js\");\nvar _require14 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ \"./functions/hubAdminTokenBrowser.js\"),\n readHubAdminTokenFromBrowser = _require14.readHubAdminTokenFromBrowser;\nvar SettingsFederationHome = __webpack_require__(/*! ./SettingsFederationHome */ \"./components/SettingsFederationHome.js\");\nvar FederationsHome = __webpack_require__(/*! ./FederationsHome */ \"./components/FederationsHome.js\");\nvar FederationInviteNotificationBanner = __webpack_require__(/*! ./FederationInviteNotificationBanner */ \"./components/FederationInviteNotificationBanner.js\");\nvar PublicVisitorGate = __webpack_require__(/*! ./PublicVisitorGate */ \"./components/PublicVisitorGate.js\");\nvar _require15 = __webpack_require__(/*! ../functions/hubPublicVisitor */ \"./functions/hubPublicVisitor.js\"),\n computePublicHubVisitor = _require15.computePublicHubVisitor;\nvar SettingsBitcoinWallet = __webpack_require__(/*! ./SettingsBitcoinWallet */ \"./components/SettingsBitcoinWallet.js\");\nvar FederationContractInviteModal = __webpack_require__(/*! ./FederationContractInviteModal */ \"./components/FederationContractInviteModal.js\");\nvar CollaborationInviteModal = __webpack_require__(/*! ./CollaborationInviteModal */ \"./components/CollaborationInviteModal.js\");\nvar FeaturesPage = __webpack_require__(/*! ./FeaturesPage */ \"./components/FeaturesPage.js\");\nvar SidechainHome = __webpack_require__(/*! ./SidechainHome */ \"./components/SidechainHome.js\");\nvar DelegationSigningModal = __webpack_require__(/*! ./DelegationSigningModal */ \"./components/DelegationSigningModal.js\");\nvar AdminHome = __webpack_require__(/*! ./AdminHome */ \"./components/AdminHome.js\");\nvar BeaconFederationHome = __webpack_require__(/*! ./BeaconFederationHome */ \"./components/BeaconFederationHome.js\");\n\n/**\n * Wallet-safe Bitcoin snapshot from GetNetworkStatus / pushNetworkStatus.\n * The hub puts it on the top-level `bitcoin` key; a copy may also exist under `state.services.bitcoin`.\n * @param {object|null|undefined} networkStatus\n * @returns {object|null}\n */\nfunction wrapPublicVisitorGate(isVisitor, onOpenIdentity, child) {\n if (!isVisitor) return child;\n return /*#__PURE__*/React.createElement(PublicVisitorGate, {\n active: true,\n onOpenIdentity: onOpenIdentity\n }, child);\n}\nfunction resolveBitcoinFromNetworkStatus(networkStatus) {\n if (!networkStatus || _typeof(networkStatus) !== 'object') return null;\n var top = networkStatus.bitcoin;\n if (top && _typeof(top) === 'object' && !Array.isArray(top)) {\n return top;\n }\n var svc = networkStatus.state && networkStatus.state.services && networkStatus.state.services.bitcoin;\n if (!svc || _typeof(svc) !== 'object') return null;\n if (svc.status && _typeof(svc.status) === 'object') return svc.status;\n return svc;\n}\n\n// Semantic UI\nvar _require16 = __webpack_require__(/*! semantic-ui-react */ \"./node_modules/semantic-ui-react/dist/es/index.js\"),\n Modal = _require16.Modal,\n Button = _require16.Button,\n Checkbox = _require16.Checkbox,\n Form = _require16.Form,\n Header = _require16.Header,\n Icon = _require16.Icon,\n Input = _require16.Input,\n Loader = _require16.Loader,\n Message = _require16.Message,\n Segment = _require16.Segment;\nfunction BitcoinHomeWithNav(props) {\n var navigate = useNavigate();\n var location = useLocation();\n React.useLayoutEffect(function () {\n var raw = location.hash || '';\n var hashTarget = raw.startsWith('#') ? raw.slice(1) : raw;\n var routeTarget = props && typeof props.targetHash === 'string' ? props.targetHash.trim() : '';\n var h = hashTarget || routeTarget;\n if (!h) return;\n var el = document.getElementById(h);\n if (el && typeof el.scrollIntoView === 'function') {\n window.requestAnimationFrame(function () {\n el.scrollIntoView({\n block: 'start',\n behavior: 'smooth'\n });\n });\n }\n }, [location.pathname, location.hash, props && props.targetHash]);\n return /*#__PURE__*/React.createElement(BitcoinHome, _extends({}, props, {\n navigate: navigate\n }));\n}\nvar CrowdfundingHome = __webpack_require__(/*! ./CrowdfundingHome */ \"./components/CrowdfundingHome.js\");\nfunction CrowdfundingHomeWithNav(props) {\n var navigate = useNavigate();\n var location = useLocation();\n React.useLayoutEffect(function () {\n var raw = location.hash || '';\n var h = raw.startsWith('#') ? raw.slice(1) : raw;\n if (!h) return;\n var el = document.getElementById(h);\n if (el && typeof el.scrollIntoView === 'function') {\n window.requestAnimationFrame(function () {\n el.scrollIntoView({\n block: 'start',\n behavior: 'smooth'\n });\n });\n }\n }, [location.pathname, location.hash]);\n return /*#__PURE__*/React.createElement(CrowdfundingHome, _extends({}, props, {\n navigate: navigate\n }));\n}\n\n/**\n * Login wall: shown when user tries to access a gated route without a local identity.\n */\nfunction LoginGate(props) {\n var onLogin = props && typeof props.onLogin === 'function' ? props.onLogin : null;\n return /*#__PURE__*/React.createElement(Segment, {\n placeholder: true,\n style: {\n marginTop: '2em',\n textAlign: 'center'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n icon: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"lock\"\n }), \"Log in required\"), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n color: '#666',\n maxWidth: '32rem',\n margin: '0 auto 0.75em',\n lineHeight: 1.45\n }\n }, \"Create or restore a local Fabric identity to access this feature (encrypt documents, sign publishes, and use the browser Bitcoin account tied to your keys).\"), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n color: '#666',\n maxWidth: '32rem',\n margin: '0 auto 1em',\n lineHeight: 1.45\n }\n }, \"Use \", /*#__PURE__*/React.createElement(\"strong\", null, \"Log in\"), \" below, the top-bar identity menu, or open\", ' ', /*#__PURE__*/React.createElement(Link, {\n to: \"/settings\"\n }, \"Settings\"), \" \\u2192 \", /*#__PURE__*/React.createElement(\"strong\", null, \"Fabric identity\"), \" for the same unlock/import flow.\", ' ', /*#__PURE__*/React.createElement(Link, {\n to: \"/settings/bitcoin-wallet\"\n }, \"Bitcoin wallet & derivation\"), \" explains on-chain addresses for this identity.\"), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n onClick: function onClick() {\n return onLogin && onLogin();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"user circle\"\n }), \"Log in\"));\n}\n\n/**\n * The Hub UI.\n */\nvar HubInterface = /*#__PURE__*/function (_React$Component) {\n function HubInterface(props) {\n var _this;\n _classCallCheck(this, HubInterface);\n _this = _callSuper(this, HubInterface, [props]);\n var initialHubAddress = '';\n try {\n if (typeof window !== 'undefined') {\n initialHubAddress = readStorageString('fabric.hub.address') || '';\n }\n } catch (e) {}\n if (!initialHubAddress) {\n try {\n if (typeof window !== 'undefined' && window.location) {\n var host = window.location.hostname;\n var port = window.location.port || (window.location.protocol === 'https:' ? '443' : '80');\n initialHubAddress = \"\".concat(host, \":\").concat(port);\n }\n } catch (e) {}\n }\n var initialAdminToken = null;\n var initialAdminTokenExpiresAt = null;\n try {\n if (typeof window !== 'undefined') {\n initialAdminToken = readStorageString('fabric.hub.adminToken') || null;\n var raw = readStorageString('fabric.hub.adminTokenExpiresAt');\n if (raw) initialAdminTokenExpiresAt = Number(raw) || null;\n }\n } catch (e) {}\n var initialLocalIdentity = null;\n var initialHasLockedIdentity = false;\n var initialPostSetupIdentityWizardOpen = false;\n try {\n if (typeof window !== 'undefined') {\n try {\n applyFabricDevBrowserSeedBootstrap();\n } catch (_) {}\n var parsed = readStorageJSON('fabric.identity.local', null);\n if (parsed && (parsed.id || parsed.xpub)) {\n try {\n var bl = buildLocalFabricIdentityPayload(parsed);\n if (bl.resolved && bl.record) {\n var r = bl.record;\n initialLocalIdentity = {\n id: r.id,\n xpub: r.xpub,\n xprv: null,\n passwordProtected: !!r.passwordProtected,\n plaintextUnlockAvailable: !!r.plaintextUnlockAvailable,\n fabricIdentityMode: r.fabricIdentityMode || undefined,\n fabricHdRole: r.fabricHdRole || undefined,\n fabricAccountIndex: r.fabricAccountIndex != null ? Math.floor(Number(r.fabricAccountIndex)) : undefined,\n masterXpub: r.masterXpub || undefined,\n linkedFromDesktop: !!parsed.linkedFromDesktop\n };\n initialLocalIdentity = mergeUnlockedSessionIntoIdentity(initialLocalIdentity);\n initialHasLockedIdentity = !!(!initialLocalIdentity.xprv && (initialLocalIdentity.passwordProtected || initialLocalIdentity.plaintextUnlockAvailable));\n }\n } catch (e) {}\n }\n try {\n var dismissed = readStorageString('fabric.hub.identityWizardDismissed') === '1';\n var pending = readStorageString('fabric.hub.identityWizardPending') === '1';\n try {\n if (typeof window !== 'undefined' && window.sessionStorage) {\n if (window.sessionStorage.getItem('fabric.hub.identityWizardDismissed') === '1') dismissed = true;\n if (window.sessionStorage.getItem('fabric.hub.wantIdentityWizard') === '1') pending = true;\n }\n } catch (eSess) {}\n initialPostSetupIdentityWizardOpen = !!(pending && !dismissed && !hasCompletedPostSetupBrowserIdentity(parsed));\n } catch (e) {}\n }\n } catch (e) {}\n _this.state = {\n debug: false,\n isAuthenticated: false,\n isLoading: true,\n needsSetup: false,\n setupChecked: false,\n adminToken: initialAdminToken,\n adminTokenExpiresAt: initialAdminTokenExpiresAt,\n modalLogOut: false,\n loggedOut: false,\n uiSettingsOpen: false,\n uiHubAddress: initialHubAddress,\n uiHubAddressDraft: initialHubAddress,\n uiAdvancedModeDraft: !!loadHubUiFeatureFlags().advancedMode,\n uiHubAddressError: null,\n uiIdentityOpen: false,\n uiSignMessageOpen: false,\n uiSignMessageText: '',\n uiSignMessageResult: null,\n uiSignMessageBusy: false,\n uiVerifyMessageText: '',\n uiVerifySignature: '',\n uiVerifyPublicKey: '',\n uiVerifyResult: null,\n uiDestroyIdentityConfirmOpen: false,\n clientBalance: null,\n clientBalanceLoading: false,\n uiLocalIdentity: initialLocalIdentity,\n uiHasLockedIdentity: initialHasLockedIdentity,\n webrtcChatOnly: false,\n federationInviteModalOpen: false,\n federationInviteDetail: null,\n federationInviteBannerDetail: null,\n collaborationInviteModalOpen: false,\n collaborationInviteDetail: null,\n requiresSetupUiSecret: false,\n setupUiVerified: false,\n setupUiGatePassword: '',\n setupStatusTimedOut: false,\n setupUiGateError: null,\n setupUiGateBusy: false,\n postSetupIdentityWizardOpen: initialPostSetupIdentityWizardOpen\n };\n _this.handleBridgeStateUpdate = _this.handleBridgeStateUpdate.bind(_this);\n _this.responseCapture = _this.responseCapture.bind(_this);\n _this.requestLogin = _this.requestLogin.bind(_this);\n _this.openIdentityManager = _this.openIdentityManager.bind(_this);\n _this.openIdentityModalFromGatedAction = _this.openIdentityModalFromGatedAction.bind(_this);\n _this._handleIdentityManagerLocalChange = _this._handleIdentityManagerLocalChange.bind(_this);\n _this._handleIdentityManagerLockStateChange = _this._handleIdentityManagerLockStateChange.bind(_this);\n _this._handleIdentityManagerUnlockSuccess = _this._handleIdentityManagerUnlockSuccess.bind(_this);\n _this._handleIdentityManagerForget = _this._handleIdentityManagerForget.bind(_this);\n _this._fabricAccountChange = _this._fabricAccountChange.bind(_this);\n _this._openFederationInviteReview = _this._openFederationInviteReview.bind(_this);\n _this._dismissFederationInviteBanner = _this._dismissFederationInviteBanner.bind(_this);\n _this._openIdentityModalForUser = _this._openIdentityModalForUser.bind(_this);\n _this._closeHubIdentityModal = _this._closeHubIdentityModal.bind(_this);\n _this._clearUnlockedSessionOnClose = _this._clearUnlockedSessionOnClose.bind(_this);\n _this._verifySetupUiSecret = _this._verifySetupUiSecret.bind(_this);\n /** Coalesce rapid Bridge / page unlock prompts so the identity modal does not strobe. */\n _this._openIdentityModalCoolDownUntil = 0;\n\n // Instantiate Bridge once here\n _this.bridgeRef = React.createRef();\n _this._state = {\n actors: {},\n content: _this.state\n };\n return _possibleConstructorReturn(_this, _this);\n }\n _inherits(HubInterface, _React$Component);\n return _createClass(HubInterface, [{\n key: \"_checkSetupStatus\",\n value: function () {\n var _checkSetupStatus2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var base, controller, timeoutMs, timer, res, text, data, setupUiVerified, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n base = typeof window !== 'undefined' && window.location ? \"\".concat(window.location.protocol, \"//\").concat(window.location.host) : 'http://localhost:8080';\n controller = typeof AbortController !== 'undefined' ? new AbortController() : null;\n timeoutMs = 15000;\n timer = controller && typeof setTimeout === 'function' ? setTimeout(function () {\n try {\n controller.abort();\n } catch (abortErr) {}\n }, timeoutMs) : null;\n _context.p = 1;\n _context.n = 2;\n return fetch(\"\".concat(base, \"/settings\"), {\n headers: {\n Accept: 'application/json',\n 'X-Requested-With': 'FabricHub-Setup'\n },\n cache: 'no-store',\n signal: controller ? controller.signal : undefined\n });\n case 2:\n res = _context.v;\n if (!res.ok) {\n _context.n = 5;\n break;\n }\n _context.n = 3;\n return res.text();\n case 3:\n text = _context.v;\n if (!text.trim().startsWith('<')) {\n _context.n = 4;\n break;\n }\n this.setState({\n setupChecked: true,\n setupStatusTimedOut: false\n });\n return _context.a(2);\n case 4:\n data = JSON.parse(text);\n setupUiVerified = false;\n try {\n if (data.requiresSetupUiSecret && typeof window !== 'undefined' && window.sessionStorage) {\n setupUiVerified = window.sessionStorage.getItem('fabric.hub.setupUiVerified') === '1';\n }\n } catch (eVer) {}\n this.setState({\n needsSetup: !!data.needsSetup,\n setupChecked: true,\n setupStatusTimedOut: false,\n requiresSetupUiSecret: !!data.requiresSetupUiSecret,\n setupUiVerified: setupUiVerified\n });\n _context.n = 6;\n break;\n case 5:\n this.setState({\n setupChecked: true,\n setupStatusTimedOut: false\n });\n case 6:\n _context.n = 8;\n break;\n case 7:\n _context.p = 7;\n _t = _context.v;\n this.setState({\n setupChecked: true\n });\n case 8:\n _context.p = 8;\n if (timer) clearTimeout(timer);\n return _context.f(8);\n case 9:\n return _context.a(2);\n }\n }, _callee, this, [[1, 7, 8, 9]]);\n }));\n function _checkSetupStatus() {\n return _checkSetupStatus2.apply(this, arguments);\n }\n return _checkSetupStatus;\n }()\n }, {\n key: \"_verifySetupUiSecret\",\n value: function () {\n var _verifySetupUiSecret2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var pwd, base, res, text, errMsg, j, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n pwd = String(this.state.setupUiGatePassword || '').trim();\n if (pwd) {\n _context2.n = 1;\n break;\n }\n this.setState({\n setupUiGateError: 'Enter the setup secret from the operator.'\n });\n return _context2.a(2);\n case 1:\n base = typeof window !== 'undefined' && window.location ? \"\".concat(window.location.protocol, \"//\").concat(window.location.host) : 'http://localhost:8080';\n this.setState({\n setupUiGateBusy: true,\n setupUiGateError: null\n });\n _context2.p = 2;\n _context2.n = 3;\n return fetch(\"\".concat(base, \"/settings/verify-setup-ui\"), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Requested-With': 'FabricHub-Setup'\n },\n body: JSON.stringify({\n setupUiSecret: pwd\n })\n });\n case 3:\n res = _context2.v;\n _context2.n = 4;\n return res.text();\n case 4:\n text = _context2.v;\n errMsg = 'Invalid setup secret.';\n if (res.ok) {\n _context2.n = 5;\n break;\n }\n try {\n if (!text.trim().startsWith('<')) {\n j = JSON.parse(text);\n if (j && j.message) errMsg = String(j.message);\n }\n } catch (eJ) {}\n this.setState({\n setupUiGateBusy: false,\n setupUiGateError: errMsg\n });\n return _context2.a(2);\n case 5:\n try {\n if (typeof window !== 'undefined' && window.sessionStorage) {\n window.sessionStorage.setItem('fabric.hub.setupUiVerified', '1');\n }\n } catch (eS) {}\n this.setState({\n setupUiVerified: true,\n setupUiGateBusy: false,\n setupUiGatePassword: '',\n setupUiGateError: null\n });\n _context2.n = 7;\n break;\n case 6:\n _context2.p = 6;\n _t2 = _context2.v;\n this.setState({\n setupUiGateBusy: false,\n setupUiGateError: _t2 && _t2.message ? String(_t2.message) : 'Request failed.'\n });\n case 7:\n return _context2.a(2);\n }\n }, _callee2, this, [[2, 6]]);\n }));\n function _verifySetupUiSecret() {\n return _verifySetupUiSecret2.apply(this, arguments);\n }\n return _verifySetupUiSecret;\n }()\n }, {\n key: \"_refreshAdminTokenIfNeeded\",\n value: function () {\n var _refreshAdminTokenIfNeeded2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var token, expiresAt, thirtyDaysMs, base, res, text, result, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n token = this.state.adminToken || typeof window !== 'undefined' && readStorageString('fabric.hub.adminToken');\n if (token) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n expiresAt = this.state.adminTokenExpiresAt || typeof window !== 'undefined' && function () {\n var raw = readStorageString('fabric.hub.adminTokenExpiresAt');\n return raw ? Number(raw) : null;\n }();\n thirtyDaysMs = 30 * 24 * 60 * 60 * 1000;\n if (!(expiresAt && Date.now() < expiresAt - thirtyDaysMs)) {\n _context3.n = 2;\n break;\n }\n return _context3.a(2);\n case 2:\n _context3.p = 2;\n base = typeof window !== 'undefined' && window.location ? \"\".concat(window.location.protocol, \"//\").concat(window.location.host) : 'http://localhost:8080';\n _context3.n = 3;\n return fetch(\"\".concat(base, \"/settings/refresh\"), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n 'Authorization': \"Bearer \".concat(token)\n },\n body: JSON.stringify({\n token: token\n })\n });\n case 3:\n res = _context3.v;\n if (res.ok) {\n _context3.n = 4;\n break;\n }\n return _context3.a(2);\n case 4:\n _context3.n = 5;\n return res.text();\n case 5:\n text = _context3.v;\n if (!text.trim().startsWith('<')) {\n _context3.n = 6;\n break;\n }\n return _context3.a(2);\n case 6:\n result = JSON.parse(text);\n if (result && result.token) {\n this.setState({\n adminToken: result.token,\n adminTokenExpiresAt: result.expiresAt\n });\n if (typeof window !== 'undefined') {\n try {\n writeStorageString('fabric.hub.adminToken', result.token);\n if (result.expiresAt != null) {\n writeStorageString('fabric.hub.adminTokenExpiresAt', String(result.expiresAt));\n }\n } catch (e) {}\n }\n }\n _context3.n = 8;\n break;\n case 7:\n _context3.p = 7;\n _t3 = _context3.v;\n case 8:\n return _context3.a(2);\n }\n }, _callee3, this, [[2, 7]]);\n }));\n function _refreshAdminTokenIfNeeded() {\n return _refreshAdminTokenIfNeeded2.apply(this, arguments);\n }\n return _refreshAdminTokenIfNeeded;\n }()\n }, {\n key: \"requestLogin\",\n value: function requestLogin() {\n // Prefer host-provided handler (browser extension or outer app).\n if (typeof this.props.onLogin === 'function') {\n this.props.onLogin();\n return;\n }\n\n // Fallback: try a generic identity manager open handler if provided.\n if (typeof this.props.onOpenIdentityManager === 'function') {\n this.props.onOpenIdentityManager();\n return;\n }\n this._openIdentityModalForUser();\n }\n\n /** User explicitly asked for the identity UI — always show (avoids “stuck closed” if state desyncs). */\n }, {\n key: \"_openIdentityModalForUser\",\n value: function _openIdentityModalForUser() {\n this.setState({\n uiIdentityOpen: true\n });\n }\n\n /** Dismiss identity UI only from explicit chrome — ignore Semantic Modal / Portal onClose (mobile-safe). */\n }, {\n key: \"_closeHubIdentityModal\",\n value: function _closeHubIdentityModal() {\n this.setState({\n uiIdentityOpen: false\n });\n }\n }, {\n key: \"_clearUnlockedSessionOnClose\",\n value: function _clearUnlockedSessionOnClose() {\n try {\n if (typeof window !== 'undefined' && window.sessionStorage) {\n window.sessionStorage.removeItem('fabric.identity.unlocked');\n }\n } catch (_) {}\n }\n }, {\n key: \"openIdentityManager\",\n value: function openIdentityManager() {\n if (typeof this.props.onOpenIdentityManager === 'function') {\n this.props.onOpenIdentityManager();\n return;\n }\n this._openIdentityModalForUser();\n }\n\n /** Bridge / background prompts — do not re-open if already visible (prevents mobile modal strobing). */\n }, {\n key: \"openIdentityModalFromGatedAction\",\n value: function openIdentityModalFromGatedAction() {\n if (this.state.uiIdentityOpen) return;\n var now = Date.now();\n if (now < this._openIdentityModalCoolDownUntil) return;\n this._openIdentityModalCoolDownUntil = now + 2500;\n this.setState({\n uiIdentityOpen: true\n });\n }\n }, {\n key: \"_hubIdentityUiSnapshotKey\",\n value: function _hubIdentityUiSnapshotKey(info) {\n if (!info || !info.id && !info.xpub) return '';\n var hasX = !!(info.xprv && String(info.xprv).trim());\n var plainAvail = !!info.plaintextUnlockAvailable;\n var acct = info.fabricAccountIndex != null && info.fabricAccountIndex !== '' ? String(Math.floor(Number(info.fabricAccountIndex))) : '';\n var mode = info.fabricIdentityMode ? String(info.fabricIdentityMode) : '';\n var hd = info.fabricHdRole ? String(info.fabricHdRole) : '';\n return \"\".concat(String(info.id || ''), \"|\").concat(String(info.xpub || ''), \"|\").concat(hasX ? '1' : '0', \"|\").concat(info.passwordProtected ? '1' : '0', \"|\").concat(plainAvail ? '1' : '0', \"|\").concat(info.linkedFromDesktop ? '1' : '0', \"|\").concat(mode, \"|\").concat(acct, \"|\").concat(hd);\n }\n }, {\n key: \"_handleIdentityManagerLocalChange\",\n value: function _handleIdentityManagerLocalChange(info) {\n var _this2 = this;\n if (info && (info.id || info.xpub)) {\n try {\n writeStorageString('fabric.hub.identityWizardPending', '');\n if (typeof window !== 'undefined' && window.sessionStorage) {\n window.sessionStorage.removeItem('fabric.hub.wantIdentityWizard');\n }\n } catch (e) {}\n }\n this.setState(function (prev) {\n if (!info) {\n try {\n clearSpendXpubWatch();\n } catch (_) {}\n if (!prev.uiLocalIdentity && !prev.uiHasLockedIdentity) return {};\n return {\n uiLocalIdentity: null,\n uiHasLockedIdentity: false,\n clientBalance: null,\n clientBalanceLoading: false\n };\n }\n var prevId = prev.uiLocalIdentity && prev.uiLocalIdentity.id != null ? String(prev.uiLocalIdentity.id) : '';\n var nextId = info.id != null ? String(info.id) : '';\n var prevXpub = prev.uiLocalIdentity && prev.uiLocalIdentity.xpub != null ? String(prev.uiLocalIdentity.xpub) : '';\n var nextXpub = info.xpub != null ? String(info.xpub) : '';\n var sameIdentity = !!prev.uiLocalIdentity && prevId === nextId && prevXpub === nextXpub;\n if (prev.uiLocalIdentity && prev.uiLocalIdentity.xprv && !info.xprv && !sameIdentity) {\n return {};\n }\n var hasXprv = !!(info.xprv && String(info.xprv).trim());\n var passwordProtected = !!info.passwordProtected;\n var plaintextUnlockAvailable = info.plaintextUnlockAvailable != null ? !!info.plaintextUnlockAvailable : !!prev.uiLocalIdentity && !!prev.uiLocalIdentity.plaintextUnlockAvailable && prevId === nextId && prevXpub === nextXpub && !hasXprv && !passwordProtected;\n var linkedFromDesktop = info.linkedFromDesktop != null ? !!info.linkedFromDesktop : !!(prev.uiLocalIdentity && prev.uiLocalIdentity.linkedFromDesktop);\n var nextIdentity = {\n id: info.id,\n xpub: info.xpub,\n xprv: hasXprv ? info.xprv : undefined,\n passwordProtected: passwordProtected,\n linkedFromDesktop: linkedFromDesktop\n };\n if (info.fabricIdentityMode != null && info.fabricIdentityMode !== '') {\n nextIdentity.fabricIdentityMode = info.fabricIdentityMode;\n } else if (prev.uiLocalIdentity && prev.uiLocalIdentity.fabricIdentityMode) {\n nextIdentity.fabricIdentityMode = prev.uiLocalIdentity.fabricIdentityMode;\n }\n if (info.fabricAccountIndex != null && info.fabricAccountIndex !== '') {\n nextIdentity.fabricAccountIndex = Math.floor(Number(info.fabricAccountIndex));\n } else if (prev.uiLocalIdentity && prev.uiLocalIdentity.fabricAccountIndex != null) {\n nextIdentity.fabricAccountIndex = prev.uiLocalIdentity.fabricAccountIndex;\n }\n if (info.fabricHdRole != null && String(info.fabricHdRole).trim() !== '') {\n nextIdentity.fabricHdRole = info.fabricHdRole;\n } else if (prev.uiLocalIdentity && prev.uiLocalIdentity.fabricHdRole) {\n nextIdentity.fabricHdRole = prev.uiLocalIdentity.fabricHdRole;\n }\n if (info.masterXprv != null && String(info.masterXprv).trim()) {\n nextIdentity.masterXprv = info.masterXprv;\n } else if (prev.uiLocalIdentity && prev.uiLocalIdentity.masterXprv && hasXprv) {\n nextIdentity.masterXprv = prev.uiLocalIdentity.masterXprv;\n }\n if (info.masterXpub != null && String(info.masterXpub).trim()) {\n nextIdentity.masterXpub = info.masterXpub;\n } else if (prev.uiLocalIdentity && prev.uiLocalIdentity.masterXpub) {\n nextIdentity.masterXpub = prev.uiLocalIdentity.masterXpub;\n }\n if (plaintextUnlockAvailable && !hasXprv && !passwordProtected) {\n nextIdentity.plaintextUnlockAvailable = true;\n }\n var nextHasLocked = !hasXprv && (passwordProtected || !!nextIdentity.plaintextUnlockAvailable);\n if (_this2._hubIdentityUiSnapshotKey(prev.uiLocalIdentity) === _this2._hubIdentityUiSnapshotKey(nextIdentity) && !!prev.uiHasLockedIdentity === !!nextHasLocked) {\n return {};\n }\n return {\n uiLocalIdentity: nextIdentity,\n uiHasLockedIdentity: nextHasLocked\n };\n });\n }\n }, {\n key: \"_handleIdentityManagerLockStateChange\",\n value: function _handleIdentityManagerLockStateChange(locked) {\n this.setState(function (prev) {\n if (prev.uiLocalIdentity && prev.uiLocalIdentity.xprv) return {};\n var hasIdent = !!(prev.uiLocalIdentity && (prev.uiLocalIdentity.id || prev.uiLocalIdentity.xpub));\n if (locked && !hasIdent) return {};\n if (!!prev.uiHasLockedIdentity === !!locked) return {};\n return {\n uiHasLockedIdentity: !!locked\n };\n });\n if (locked && this.bridgeRef && this.bridgeRef.current && typeof this.bridgeRef.current.clearDecryptedDocuments === 'function') {\n try {\n this.bridgeRef.current.clearDecryptedDocuments();\n } catch (e) {}\n }\n }\n }, {\n key: \"_handleIdentityManagerUnlockSuccess\",\n value: function _handleIdentityManagerUnlockSuccess(identityInfo) {\n if (identityInfo && _typeof(identityInfo) === 'object' && (identityInfo.id || identityInfo.xpub)) {\n try {\n writeStorageString('fabric.hub.identityWizardPending', '');\n if (typeof window !== 'undefined' && window.sessionStorage) {\n window.sessionStorage.removeItem('fabric.hub.wantIdentityWizard');\n }\n } catch (e) {}\n var next = {\n id: identityInfo.id,\n xpub: identityInfo.xpub,\n xprv: identityInfo.xprv || undefined,\n passwordProtected: !!identityInfo.passwordProtected\n };\n if (identityInfo.fabricIdentityMode) next.fabricIdentityMode = identityInfo.fabricIdentityMode;\n if (identityInfo.fabricAccountIndex != null) {\n next.fabricAccountIndex = Math.floor(Number(identityInfo.fabricAccountIndex));\n }\n if (identityInfo.fabricHdRole) next.fabricHdRole = identityInfo.fabricHdRole;\n if (identityInfo.masterXprv) next.masterXprv = identityInfo.masterXprv;\n if (identityInfo.masterXpub) next.masterXpub = identityInfo.masterXpub;\n this.setState({\n uiLocalIdentity: next,\n uiHasLockedIdentity: false,\n uiIdentityOpen: false\n });\n } else {\n this.setState({\n uiIdentityOpen: false\n });\n }\n }\n }, {\n key: \"_handleIdentityManagerForget\",\n value: function _handleIdentityManagerForget() {\n try {\n this._clearUnlockedSessionOnClose();\n } catch (_) {}\n try {\n removeStorageKey(DELEGATION_STORAGE_KEY);\n } catch (_) {}\n try {\n removeStorageKey('fabric.linkedDevices');\n } catch (_) {}\n try {\n notifyDelegationStorageChanged();\n } catch (_) {}\n try {\n if (typeof chrome !== 'undefined' && chrome.storage && chrome.storage.local && chrome.storage.local.remove) {\n chrome.storage.local.remove(['fabric.identity.ext']);\n }\n } catch (_) {}\n try {\n clearFabricBrowserIdentityLocal();\n } catch (_) {}\n try {\n clearSpendXpubWatch();\n } catch (_) {}\n this.setState({\n uiLocalIdentity: null,\n uiHasLockedIdentity: false,\n clientBalance: null,\n clientBalanceLoading: false\n });\n if (this.bridgeRef && this.bridgeRef.current && typeof this.bridgeRef.current.clearAllDocuments === 'function') {\n try {\n this.bridgeRef.current.clearAllDocuments();\n } catch (e) {}\n }\n }\n }, {\n key: \"_fabricAccountChange\",\n value: function _fabricAccountChange(nextAccountIndex) {\n try {\n var ai = Math.floor(Number(nextAccountIndex));\n if (!Number.isFinite(ai) || ai < 0) return;\n var parsed = null;\n try {\n parsed = readStorageJSON('fabric.identity.local', null);\n } catch (_) {}\n if (!parsed || parsed.fabricIdentityMode !== 'account') return;\n if (parsed.passwordProtected) return;\n if (parsed.fabricHdRole === 'accountNode' || parsed.fabricHdRole === 'watchAccount') return;\n // Strict at-rest storage clears masters; prefer the unlocked in-memory / session key.\n var unlocked = this.state.uiLocalIdentity || {};\n var master = String(unlocked.masterXprv || unlocked.xprv || '').trim();\n if (!master) {\n try {\n var sess = JSON.parse(window.sessionStorage.getItem('fabric.identity.unlocked') || 'null');\n master = String(sess && (sess.masterXprv || sess.xprv) || '').trim();\n } catch (_) {}\n }\n if (!master) return;\n var dk = deriveFabricAccountIdentityKeys(master, ai, 0);\n var fromUnlockedXp = unlocked.masterXpub && String(unlocked.masterXpub).trim();\n var fromParsedXp = parsed.masterXpub && String(parsed.masterXpub).trim();\n var masterXp = fromUnlockedXp || fromParsedXp || fabricRootXpubFromMasterXprv(master);\n var nextPayload = Object.assign({}, parsed, {\n fabricIdentityMode: 'account',\n fabricAccountIndex: ai,\n id: dk.id,\n xpub: dk.xpub,\n masterXpub: masterXp\n });\n writeStorageJSON('fabric.identity.local', nextPayload);\n this.setState(function (prev) {\n var loc = prev.uiLocalIdentity || {};\n var hadKey = !!(loc && loc.xprv);\n if (hadKey) {\n var mx = parsed.masterXpub && String(parsed.masterXpub).trim() ? String(parsed.masterXpub).trim() : fabricRootXpubFromMasterXprv(master);\n return {\n uiLocalIdentity: _objectSpread(_objectSpread({}, loc), {}, {\n id: dk.id,\n xpub: dk.xpub,\n xprv: dk.xprv,\n fabricIdentityMode: 'account',\n fabricAccountIndex: ai,\n masterXprv: master,\n masterXpub: mx\n }),\n uiHasLockedIdentity: false\n };\n }\n try {\n var bl = buildLocalFabricIdentityPayload(nextPayload);\n if (!bl.resolved || !bl.record) return {};\n var r = bl.record;\n return {\n uiLocalIdentity: Object.assign({}, loc, {\n id: r.id,\n xpub: r.xpub,\n passwordProtected: !!r.passwordProtected,\n plaintextUnlockAvailable: !!r.plaintextUnlockAvailable,\n fabricIdentityMode: 'account',\n fabricAccountIndex: ai,\n masterXpub: r.masterXpub\n }),\n uiHasLockedIdentity: !!(r.passwordProtected || r.plaintextUnlockAvailable)\n };\n } catch (_) {\n return {};\n }\n });\n } catch (e) {\n console.error('[HUB]', 'Fabric account switch failed:', safeIdentityErr(e));\n }\n }\n }, {\n key: \"_openFederationInviteReview\",\n value: function _openFederationInviteReview() {\n var d = this.state.federationInviteBannerDetail;\n if (!d || !d.inviteId) return;\n this.setState({\n federationInviteModalOpen: true,\n federationInviteDetail: d,\n federationInviteBannerDetail: null\n });\n }\n }, {\n key: \"_dismissFederationInviteBanner\",\n value: function _dismissFederationInviteBanner() {\n this.setState({\n federationInviteBannerDetail: null\n });\n }\n }, {\n key: \"_handleFederationInviteResponse\",\n value: function _handleFederationInviteResponse(d) {\n if (!d || typeof d.accept !== 'boolean') return;\n if (!d.accept) {\n toastify.info('A peer declined your federation contract invite.', {\n transition: Slide\n });\n return;\n }\n var admin = this.state.adminToken || typeof window !== 'undefined' && readStorageString('fabric.hub.adminToken');\n var pk = d.responderPubkey;\n if (!pk) {\n toastify.warning('Federation invite accepted but no responder pubkey was included.', {\n transition: Slide\n });\n return;\n }\n if (!admin) {\n toastify.info(\"Peer accepted federation invite (pubkey \".concat(pk.slice(0, 10), \"\\u2026). Add their pubkey under More \\u2192 Federations (or Settings \\u2192 Distributed federation).\"), {\n transition: Slide,\n autoClose: 8000\n });\n return;\n }\n var self = this;\n var token = String(admin).trim();\n toastify.info(function (_ref4) {\n var closeToast = _ref4.closeToast;\n return /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(\"p\", {\n style: {\n margin: '0 0 0.6em',\n fontSize: '0.95rem'\n }\n }, \"Federation invite accepted.\"), /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n style: {\n marginRight: '0.5em',\n padding: '0.45em 0.75em',\n borderRadius: 4,\n border: '1px solid #2185d0',\n background: '#2185d0',\n color: '#fff',\n cursor: 'pointer'\n },\n onClick: function onClick() {\n void self._addFederationMemberFromInvite(pk, token, closeToast);\n }\n }, \"Add to validators\"), /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n style: {\n padding: '0.45em 0.75em',\n borderRadius: 4,\n border: '1px solid #ccc',\n background: '#f4f4f4',\n cursor: 'pointer'\n },\n onClick: function onClick() {\n return typeof closeToast === 'function' ? closeToast() : null;\n }\n }, \"Dismiss\"));\n }, {\n autoClose: false,\n closeOnClick: false,\n transition: Slide\n });\n }\n }, {\n key: \"_addFederationMemberFromInvite\",\n value: function () {\n var _addFederationMemberFromInvite2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(pubkey, adminToken, closeToast) {\n var base, res, body, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n _context4.p = 0;\n base = typeof window !== 'undefined' && window.location ? \"\".concat(window.location.protocol, \"//\").concat(window.location.host) : '';\n _context4.n = 1;\n return fetch(\"\".concat(base, \"/services/rpc\"), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'AddDistributedFederationMember',\n params: [{\n pubkey: pubkey,\n adminToken: adminToken\n }]\n })\n });\n case 1:\n res = _context4.v;\n _context4.n = 2;\n return res.json()[\"catch\"](function () {\n return {};\n });\n case 2:\n body = _context4.v;\n if (!(body.error || !res.ok)) {\n _context4.n = 3;\n break;\n }\n toastify.error(body.error && body.error.message || 'Add member failed', {\n transition: Slide\n });\n return _context4.a(2);\n case 3:\n toastify.success('Validator added to federation policy.', {\n transition: Slide\n });\n if (typeof closeToast === 'function') closeToast();\n _context4.n = 5;\n break;\n case 4:\n _context4.p = 4;\n _t4 = _context4.v;\n toastify.error(_t4 && _t4.message ? _t4.message : String(_t4), {\n transition: Slide\n });\n case 5:\n return _context4.a(2);\n }\n }, _callee4, null, [[0, 4]]);\n }));\n function _addFederationMemberFromInvite(_x, _x2, _x3) {\n return _addFederationMemberFromInvite2.apply(this, arguments);\n }\n return _addFederationMemberFromInvite;\n }()\n }, {\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this3 = this;\n console.debug('[HUB]', 'Component mounted!');\n this._setupStatusSafetyTimer = setTimeout(function () {\n // Do not treat unknown setup status as configured (would skip onboarding).\n _this3.setState(function (prev) {\n return prev.setupChecked ? null : {\n setupStatusTimedOut: true\n };\n });\n }, 20000);\n this._checkSetupStatus()[\"finally\"](function () {\n if (_this3._setupStatusSafetyTimer) {\n clearTimeout(_this3._setupStatusSafetyTimer);\n _this3._setupStatusSafetyTimer = null;\n }\n });\n this._refreshAdminTokenIfNeeded();\n this._refreshClientBalance().then(function () {\n void _this3._maybeAutoFundDesktopLocalKey();\n })[\"catch\"](function () {\n void _this3._maybeAutoFundDesktopLocalKey();\n });\n this._onGlobalStateUpdate = function (e) {\n var d = e && e.detail;\n if (d && d.operation && d.operation.path === '/bitcoin') {\n var idn = _this3.state.uiLocalIdentity || null;\n if (idn && idn.xpub) _this3._refreshClientBalance();\n }\n };\n this._onClientBalanceUpdate = function () {\n var idn = _this3.state.uiLocalIdentity || null;\n if (idn && idn.xpub) _this3._refreshClientBalance();\n };\n if (typeof window !== 'undefined') {\n // Strict lock policy: always clear unlocked key material on close/unload.\n this._clearUnlockedSessionOnClose();\n window.addEventListener('beforeunload', this._clearUnlockedSessionOnClose);\n window.addEventListener('globalStateUpdate', this._onGlobalStateUpdate);\n window.addEventListener('clientBalanceUpdate', this._onClientBalanceUpdate);\n this._onFabricHubAdminTokenSaved = function () {\n try {\n var t = readStorageString('fabric.hub.adminToken');\n if (t) _this3.setState({\n adminToken: t\n });\n } catch (e) {}\n };\n window.addEventListener('fabricHubAdminTokenSaved', this._onFabricHubAdminTokenSaved);\n this._fabricFedInvite = function (ev) {\n var d = ev && ev.detail;\n if (d && d.inviteId) _this3.setState({\n federationInviteModalOpen: true,\n federationInviteDetail: d\n });\n };\n this._fabricFedResp = function (ev) {\n _this3._handleFederationInviteResponse(ev && ev.detail);\n };\n window.addEventListener('fabric:federationContractInvite', this._fabricFedInvite);\n window.addEventListener('fabric:federationContractInviteResponse', this._fabricFedResp);\n this._fabricCollabInvite = function (ev) {\n var d = ev && ev.detail;\n if (d && d.invitationId) _this3.setState({\n collaborationInviteModalOpen: true,\n collaborationInviteDetail: d\n });\n };\n window.addEventListener('fabric:collaborationInvitation', this._fabricCollabInvite);\n this._onFabricOpenIdentityManager = function () {\n _this3.openIdentityManager();\n };\n window.addEventListener('fabricOpenIdentityManager', this._onFabricOpenIdentityManager);\n this._adminTokenRefreshInterval = setInterval(function () {\n return _this3._refreshAdminTokenIfNeeded();\n }, 24 * 60 * 60 * 1000);\n }\n this._toastUnsub = toast.addListener(function (t) {\n var msg = t.header ? \"\".concat(t.header, \": \").concat(t.message) : t.message;\n var opts = {\n autoClose: t.duration || 4000,\n transition: Slide\n };\n if (t.type === 'success') toastify.success(msg, opts);else if (t.type === 'error') toastify.error(msg, opts);else if (t.type === 'warning') toastify.warning(msg, opts);else toastify.info(msg, opts);\n });\n if (typeof window !== 'undefined') {\n installHubUiFeatureFlagsWindowApi();\n this._hubUiUnsub = subscribeHubUiFeatureFlags(function () {\n return _this3.forceUpdate();\n });\n fetchPersistedHubUiFeatureFlags().then(function () {\n return _this3.forceUpdate();\n })[\"catch\"](function () {});\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n console.debug('[HUB]', 'Cleaning up...');\n if (this._setupStatusSafetyTimer) {\n clearTimeout(this._setupStatusSafetyTimer);\n this._setupStatusSafetyTimer = null;\n }\n if (typeof this._hubUiUnsub === 'function') this._hubUiUnsub();\n if (typeof this._toastUnsub === 'function') this._toastUnsub();\n if (typeof window !== 'undefined') {\n if (this._onGlobalStateUpdate) window.removeEventListener('globalStateUpdate', this._onGlobalStateUpdate);\n if (this._onClientBalanceUpdate) window.removeEventListener('clientBalanceUpdate', this._onClientBalanceUpdate);\n if (this._onFabricHubAdminTokenSaved) {\n window.removeEventListener('fabricHubAdminTokenSaved', this._onFabricHubAdminTokenSaved);\n }\n if (this._fabricFedInvite) window.removeEventListener('fabric:federationContractInvite', this._fabricFedInvite);\n if (this._fabricFedResp) window.removeEventListener('fabric:federationContractInviteResponse', this._fabricFedResp);\n if (this._fabricCollabInvite) window.removeEventListener('fabric:collaborationInvitation', this._fabricCollabInvite);\n if (this._onFabricOpenIdentityManager) {\n window.removeEventListener('fabricOpenIdentityManager', this._onFabricOpenIdentityManager);\n }\n window.removeEventListener('beforeunload', this._clearUnlockedSessionOnClose);\n this._clearUnlockedSessionOnClose();\n if (this._adminTokenRefreshInterval) clearInterval(this._adminTokenRefreshInterval);\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n var prevId = prevState.uiLocalIdentity || {};\n var nextId = this.state.uiLocalIdentity || {};\n var prevXpub = prevId.xpub;\n var nextXpub = nextId.xpub;\n var prevFab = prevId.fabricAccountIndex;\n var nextFab = nextId.fabricAccountIndex;\n if (prevXpub !== nextXpub || prevFab !== nextFab) this._refreshClientBalance();\n }\n }, {\n key: \"_maybeAutoFundDesktopLocalKey\",\n value: function () {\n var _maybeAutoFundDesktopLocalKey2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var identity, bridgeInstance, networkStatus, bitcoin, network, disc, funded, _t5;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.p = _context5.n) {\n case 0:\n if (!this._desktopAutoFaucetBusy) {\n _context5.n = 1;\n break;\n }\n return _context5.a(2);\n case 1:\n identity = this.state.uiLocalIdentity || null;\n bridgeInstance = this.bridgeRef && this.bridgeRef.current;\n networkStatus = bridgeInstance && (bridgeInstance.networkStatus || bridgeInstance.lastNetworkStatus);\n bitcoin = resolveBitcoinFromNetworkStatus(networkStatus);\n network = bitcoin && bitcoin.network ? String(bitcoin.network).toLowerCase() : 'regtest';\n if (shouldAutoFundDesktopLocalKey({\n identity: identity,\n clientBalance: this.state.clientBalance,\n network: network\n })) {\n _context5.n = 2;\n break;\n }\n return _context5.a(2);\n case 2:\n this._desktopAutoFaucetBusy = true;\n _context5.p = 3;\n _context5.n = 4;\n return discoverLocalHubFaucet({\n hubAdminToken: readHubAdminTokenFromBrowser(this.state.adminToken) || ''\n });\n case 4:\n disc = _context5.v;\n if (!(!disc.available || disc.funded === false)) {\n _context5.n = 5;\n break;\n }\n this._desktopAutoFaucetBusy = false;\n return _context5.a(2);\n case 5:\n _context5.n = 6;\n return fundLocalKeyFromHubFaucet({\n identity: identity,\n adminToken: this.state.adminToken,\n network: network,\n amountSats: disc.faucet && disc.faucet.defaultAmountSats || 10000,\n mineConfirm: true\n });\n case 6:\n funded = _context5.v;\n if (!(funded && funded.ok)) {\n _context5.n = 7;\n break;\n }\n markAutoFaucetDone();\n try {\n toast.success(\"Funded local key with \".concat(funded.amountSats.toLocaleString(), \" sats from the Hub faucet.\"));\n } catch (_) {}\n _context5.n = 7;\n return this._refreshClientBalance(true);\n case 7:\n _context5.n = 9;\n break;\n case 8:\n _context5.p = 8;\n _t5 = _context5.v;\n console.warn('[HUB] Desktop auto-faucet skipped:', _t5 && _t5.message ? _t5.message : _t5);\n case 9:\n _context5.p = 9;\n this._desktopAutoFaucetBusy = false;\n return _context5.f(9);\n case 10:\n return _context5.a(2);\n }\n }, _callee5, this, [[3, 8, 9, 10]]);\n }));\n function _maybeAutoFundDesktopLocalKey() {\n return _maybeAutoFundDesktopLocalKey2.apply(this, arguments);\n }\n return _maybeAutoFundDesktopLocalKey;\n }()\n }, {\n key: \"_refreshClientBalance\",\n value: function () {\n var _refreshClientBalance2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {\n var forceRefresh,\n identity,\n wallet,\n prevRow,\n prevWid,\n nextWid,\n bridgeInstance,\n networkStatus,\n bitcoin,\n network,\n _ref5,\n _summary$balanceSats,\n upstream,\n summary,\n balanceSats,\n _summary$confirmedSat,\n _summary$unconfirmedS,\n confirmedSats,\n unconfirmedSats,\n nextClient,\n _args6 = arguments,\n _t6;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.p = _context6.n) {\n case 0:\n forceRefresh = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : false;\n identity = this.state.uiLocalIdentity || null;\n wallet = getSpendWalletContext(identity || {});\n if (!(!wallet.walletId || !wallet.xpub)) {\n _context6.n = 1;\n break;\n }\n this.setState({\n clientBalance: null,\n clientBalanceLoading: false\n });\n return _context6.a(2);\n case 1:\n prevRow = this.state.clientBalance;\n prevWid = prevRow && prevRow.walletId ? String(prevRow.walletId) : '';\n nextWid = String(wallet.walletId || '');\n if (prevWid && nextWid && prevWid !== nextWid) {\n this.setState({\n clientBalance: null\n });\n }\n this.setState({\n clientBalanceLoading: true\n });\n bridgeInstance = this.bridgeRef && this.bridgeRef.current;\n networkStatus = bridgeInstance && (bridgeInstance.networkStatus || bridgeInstance.lastNetworkStatus);\n bitcoin = resolveBitcoinFromNetworkStatus(networkStatus);\n network = bitcoin && bitcoin.network ? String(bitcoin.network).toLowerCase() : 'regtest';\n _context6.p = 2;\n upstream = loadUpstreamSettings();\n _context6.n = 3;\n return fetchWalletSummaryWithCache(upstream, wallet, {\n bypassCache: forceRefresh,\n network: network\n });\n case 3:\n summary = _context6.v;\n balanceSats = Number((_ref5 = (_summary$balanceSats = summary.balanceSats) !== null && _summary$balanceSats !== void 0 ? _summary$balanceSats : summary.balance) !== null && _ref5 !== void 0 ? _ref5 : 0);\n if (Number.isFinite(balanceSats)) {\n confirmedSats = Number((_summary$confirmedSat = summary.confirmedSats) !== null && _summary$confirmedSat !== void 0 ? _summary$confirmedSat : balanceSats);\n unconfirmedSats = Number((_summary$unconfirmedS = summary.unconfirmedSats) !== null && _summary$unconfirmedS !== void 0 ? _summary$unconfirmedS : 0);\n nextClient = {\n walletId: wallet.walletId,\n balanceSats: balanceSats,\n confirmedSats: confirmedSats,\n unconfirmedSats: unconfirmedSats,\n fromCache: !!summary._fromCache\n };\n this.setState({\n clientBalance: nextClient,\n clientBalanceLoading: false\n });\n if (identity && String(identity.xprv || '').trim()) {\n try {\n saveSpendXpubWatchForIdentity(identity, wallet);\n } catch (_) {}\n }\n /* Do not dispatch clientBalanceUpdate here: Bitcoin/Payments screens already emit it for Bridge\n * wallet notices. Re-dispatching after refresh echoed the same logical update twice and could\n * shift confirmed/unconfirmed split between duplicate fetches → duplicate “incoming” toasts. */\n } else {\n this.setState({\n clientBalance: null,\n clientBalanceLoading: false\n });\n }\n _context6.n = 5;\n break;\n case 4:\n _context6.p = 4;\n _t6 = _context6.v;\n this.setState(function (prev) {\n return {\n clientBalance: prev.clientBalance,\n clientBalanceLoading: false\n };\n });\n case 5:\n return _context6.a(2);\n }\n }, _callee6, this, [[2, 4]]);\n }));\n function _refreshClientBalance() {\n return _refreshClientBalance2.apply(this, arguments);\n }\n return _refreshClientBalance;\n }()\n }, {\n key: \"_handleLockIdentity\",\n value: function _handleLockIdentity() {\n var local = this.state.uiLocalIdentity;\n if (!local || !local.xprv) return;\n var plaintextStored = false;\n try {\n var p = readStorageJSON('fabric.identity.local', null);\n plaintextStored = !!(p && fabricPlaintextSigningUnlockable(p));\n } catch (_) {}\n if (!local.passwordProtected && !plaintextStored) return;\n try {\n if (typeof window !== 'undefined' && window.sessionStorage) {\n window.sessionStorage.removeItem('fabric.identity.unlocked');\n }\n if (this.bridgeRef && this.bridgeRef.current && typeof this.bridgeRef.current.clearDecryptedDocuments === 'function') {\n try {\n this.bridgeRef.current.clearDecryptedDocuments();\n } catch (e) {}\n }\n var next = {\n id: local.id,\n xpub: local.xpub,\n passwordProtected: !!local.passwordProtected\n };\n if (local.fabricIdentityMode) next.fabricIdentityMode = local.fabricIdentityMode;\n if (local.fabricHdRole != null && String(local.fabricHdRole).trim() !== '') {\n next.fabricHdRole = local.fabricHdRole;\n }\n if (local.fabricAccountIndex != null) next.fabricAccountIndex = local.fabricAccountIndex;\n if (local.masterXpub) next.masterXpub = local.masterXpub;\n if (plaintextStored && !local.passwordProtected) {\n next.plaintextUnlockAvailable = true;\n }\n this.setState({\n uiLocalIdentity: next,\n uiHasLockedIdentity: true\n });\n } catch (e) {\n console.error('[HUB]', 'Error locking identity:', safeIdentityErr(e));\n }\n }\n }, {\n key: \"handleBridgeStateUpdate\",\n value: function handleBridgeStateUpdate(newState) {\n if (!newState || _typeof(newState) !== 'object') return;\n // Only merge Bridge-owned state; never overwrite identity/auth state from Bridge.\n var bridgeKeys = ['data', 'error', 'networkStatus', 'subscriptions', 'isConnected', 'webrtcConnected', 'currentPath'];\n var patch = {};\n for (var _i = 0, _bridgeKeys = bridgeKeys; _i < _bridgeKeys.length; _i++) {\n var k = _bridgeKeys[_i];\n if (Object.prototype.hasOwnProperty.call(newState, k)) patch[k] = newState[k];\n }\n if (Object.keys(patch).length > 0) {\n this.setState(patch);\n }\n }\n }, {\n key: \"responseCapture\",\n value: function responseCapture(action) {\n try {\n if (!action || !action.content) return;\n var payload = JSON.parse(action.content);\n if (payload && payload.method === 'JSONCallResult') {\n var status = null;\n if (Array.isArray(payload.params) && payload.params.length > 0) {\n var candidate = payload.params[payload.params.length - 1];\n if (candidate && _typeof(candidate) === 'object') {\n status = candidate;\n }\n } else if (payload.result && _typeof(payload.result) === 'object') {\n status = payload.result;\n }\n\n // Only treat JSONCallResult as a network status update when it has the right shape.\n // Prevents overwriting `networkStatus` with `{ status: \"success\" }` from AddPeer/RemovePeer.\n var isNetworkStatus = status && _typeof(status) === 'object' && (status.network || Array.isArray(status.peers));\n if (isNetworkStatus && status.setup && status.setup.needsSetup) {\n this.setState({\n needsSetup: true\n });\n }\n if (isNetworkStatus && this.props.bridgeNetworkStatusUpdate) {\n this.props.bridgeNetworkStatusUpdate(status);\n }\n }\n } catch (error) {\n console.error('[HUB]', 'Error handling bridge response:', safeIdentityErr(error));\n }\n }\n\n /**\n * @param {object} effectiveAuth\n * @param {object} identity\n * @param {string} [adminPeerToolsToken] - Hub admin token for operator-only peer tools; omit on `/peers/:id`.\n */\n }, {\n key: \"_hubPeerView\",\n value: function _hubPeerView(effectiveAuth, identity, adminPeerToolsToken) {\n var _this4 = this;\n return /*#__PURE__*/React.createElement(PeerView, _extends({\n auth: effectiveAuth,\n identity: identity,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n onAddPeer: function onAddPeer(peer) {\n if (!peer || !_this4.bridgeRef || !_this4.bridgeRef.current) return;\n var bridgeInstance = _this4.bridgeRef.current;\n if (typeof bridgeInstance.sendAddPeerRequest === 'function') {\n bridgeInstance.sendAddPeerRequest(peer);\n }\n },\n onRefreshPeers: function onRefreshPeers() {\n if (!_this4.bridgeRef || !_this4.bridgeRef.current) return;\n var bridgeInstance = _this4.bridgeRef.current;\n if (typeof bridgeInstance.sendListPeersRequest === 'function') {\n bridgeInstance.sendListPeersRequest();\n }\n if (typeof bridgeInstance.sendNetworkStatusRequest === 'function') {\n bridgeInstance.sendNetworkStatusRequest();\n }\n },\n onDisconnectPeer: function onDisconnectPeer(address) {\n if (!address || !_this4.bridgeRef || !_this4.bridgeRef.current) return;\n var bridgeInstance = _this4.bridgeRef.current;\n if (typeof bridgeInstance.sendRemovePeerRequest === 'function') {\n bridgeInstance.sendRemovePeerRequest(address);\n }\n },\n onSendPeerMessage: function onSendPeerMessage(address, text) {\n if (!address || !text || !_this4.bridgeRef || !_this4.bridgeRef.current) return;\n var bridgeInstance = _this4.bridgeRef.current;\n if (typeof bridgeInstance.sendPeerMessageRequest === 'function') {\n bridgeInstance.sendPeerMessageRequest(address, text);\n }\n },\n onFabricPeerResync: function onFabricPeerResync(idOrAddress) {\n if (!idOrAddress || !_this4.bridgeRef || !_this4.bridgeRef.current) return;\n var bridgeInstance = _this4.bridgeRef.current;\n if (typeof bridgeInstance.sendFabricPeerResyncRequest === 'function') {\n bridgeInstance.sendFabricPeerResyncRequest(idOrAddress);\n }\n },\n onSetPeerNickname: function onSetPeerNickname(address, nickname) {\n if (!address || !_this4.bridgeRef || !_this4.bridgeRef.current) return;\n var bridgeInstance = _this4.bridgeRef.current;\n if (typeof bridgeInstance.sendSetPeerNicknameRequest === 'function') {\n bridgeInstance.sendSetPeerNicknameRequest(address, nickname);\n }\n },\n onGetPeer: function onGetPeer(address) {\n if (!address || !_this4.bridgeRef || !_this4.bridgeRef.current) return;\n var bridgeInstance = _this4.bridgeRef.current;\n if (typeof bridgeInstance.sendGetPeerRequest === 'function') {\n bridgeInstance.sendGetPeerRequest(address);\n }\n }\n }, this.props, {\n adminPeerToolsToken: adminPeerToolsToken\n }));\n }\n }, {\n key: \"_shouldShowPostSetupIdentityWizard\",\n value: function _shouldShowPostSetupIdentityWizard() {\n if (!this.state.setupChecked || this.state.needsSetup) return false;\n var dismissed = false;\n try {\n dismissed = readStorageString('fabric.hub.identityWizardDismissed') === '1';\n if (typeof window !== 'undefined' && window.sessionStorage) {\n if (window.sessionStorage.getItem('fabric.hub.identityWizardDismissed') === '1') dismissed = true;\n }\n } catch (e) {\n return false;\n }\n if (dismissed) return false;\n try {\n var p = readStorageJSON('fabric.identity.local', null);\n if (hasCompletedPostSetupBrowserIdentity(p)) return false;\n } catch (e) {\n return false;\n }\n var pending = readStorageString('fabric.hub.identityWizardPending') === '1';\n try {\n if (typeof window !== 'undefined' && window.sessionStorage) {\n if (window.sessionStorage.getItem('fabric.hub.wantIdentityWizard') === '1') pending = true;\n }\n } catch (e) {}\n var stateFlag = !!this.state.postSetupIdentityWizardOpen;\n return !!(pending || stateFlag);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this5 = this;\n // Prefer Bridge ref (live from WebSocket), then Redux, then local state\n var bridgeInstance = this.bridgeRef && this.bridgeRef.current;\n var nodePubkey = bridgeInstance && typeof bridgeInstance.getNodePubkey === 'function' && bridgeInstance.getNodePubkey();\n var networkStatus = bridgeInstance && (bridgeInstance.networkStatus || bridgeInstance.lastNetworkStatus || null);\n var services = networkStatus && networkStatus.state && networkStatus.state.services;\n var bitcoin = resolveBitcoinFromNetworkStatus(networkStatus);\n\n // Identity is local-browser identity only. Do not fall back to props auth.\n var local = this.state.uiLocalIdentity;\n var hasLocal = local && (local.id || local.xpub);\n var effectiveAuth = hasLocal ? local : null;\n // Locked chip: derive only from shell identity fields — never trust orphan uiHasLockedIdentity when\n // local is empty (TopPanel still merges persisted storage into the chip and could show \"Locked\"\n // if hasLockedIdentity stayed true from a stale callback).\n var effectiveHasLockedIdentity = !!(hasLocal && !local.xprv && (local.passwordProtected || local.plaintextUnlockAvailable));\n var publicHubVisitor = computePublicHubVisitor({\n localIdentity: local,\n propsAuth: null\n });\n var openIdentityForGate = function openIdentityForGate() {\n return _this5._openIdentityModalForUser();\n };\n var pv = function pv(el) {\n return wrapPublicVisitorGate(publicHubVisitor, openIdentityForGate, el);\n };\n return /*#__PURE__*/React.createElement(\"fabric-interface\", {\n id: this.id,\n \"class\": \"fabric-site\"\n }, /*#__PURE__*/React.createElement(\"style\", null, \"\\n fabric-react-component {\\n margin: 1em;\\n }\\n\\n .fade-in {\\n animation: hub-fade-in 220ms ease-out;\\n }\\n\\n @keyframes hub-fade-in {\\n from {\\n opacity: 0;\\n transform: translateY(2px);\\n }\\n to {\\n opacity: 1;\\n transform: translateY(0);\\n }\\n }\\n \"), /*#__PURE__*/React.createElement(\"fabric-container\", {\n id: \"react-application\"\n }, /*#__PURE__*/React.createElement(\"fabric-react-component\", {\n id: \"fabric-hub-application\"\n }, /*#__PURE__*/React.createElement(Bridge, {\n ref: this.bridgeRef,\n auth: effectiveAuth,\n debug: this.state.debug,\n hubAddress: this.state.uiHubAddress,\n onRequireUnlock: this.openIdentityModalFromGatedAction,\n onStateUpdate: this.handleBridgeStateUpdate,\n responseCapture: this.responseCapture\n }), /*#__PURE__*/React.createElement(DelegationSigningModal, {\n bridgeRef: this.bridgeRef\n }), /*#__PURE__*/React.createElement(FederationContractInviteModal, {\n open: this.state.federationInviteModalOpen,\n detail: this.state.federationInviteDetail,\n onClose: function onClose() {\n return _this5.setState({\n federationInviteModalOpen: false,\n federationInviteDetail: null\n });\n },\n getResponderPubkey: function getResponderPubkey() {\n var b = _this5.bridgeRef && _this5.bridgeRef.current;\n if (b && typeof b.getHtlcRefundPublicKeyHex === 'function') {\n var pk = b.getHtlcRefundPublicKeyHex();\n if (pk) return pk;\n }\n return b && typeof b.getNodePubkey === 'function' && b.getNodePubkey() || '';\n },\n onSendPeerMessage: function onSendPeerMessage(toPeerId, text) {\n var b = _this5.bridgeRef && _this5.bridgeRef.current;\n if (b && typeof b.sendPeerMessageRequest === 'function') b.sendPeerMessageRequest(toPeerId, text);\n }\n }), /*#__PURE__*/React.createElement(CollaborationInviteModal, {\n open: this.state.collaborationInviteModalOpen,\n detail: this.state.collaborationInviteDetail,\n onClose: function onClose() {\n return _this5.setState({\n collaborationInviteModalOpen: false,\n collaborationInviteDetail: null\n });\n }\n }), this.props.auth && this.props.auth.loading ? /*#__PURE__*/React.createElement(\"div\", {\n style: {\n height: '100vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '0.75em'\n }\n }, /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: \"centered\",\n size: \"huge\"\n }), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n color: '#666',\n margin: 0,\n textAlign: 'center',\n maxWidth: '22rem',\n lineHeight: 1.45\n }\n }, \"Loading session\\u2026\")) : !this.state.setupChecked ? /*#__PURE__*/React.createElement(\"div\", {\n style: {\n height: '100vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '1em'\n }\n }, /*#__PURE__*/React.createElement(Loader, {\n active: !this.state.setupStatusTimedOut,\n inline: \"centered\",\n size: \"large\"\n }), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n color: '#666',\n margin: 0,\n textAlign: 'center',\n maxWidth: '22rem',\n lineHeight: 1.45\n }\n }, this.state.setupStatusTimedOut ? 'Could not confirm hub setup status.' : 'Checking hub configuration…'), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n color: '#888',\n margin: 0,\n fontSize: '0.9em',\n textAlign: 'center',\n maxWidth: '24rem',\n lineHeight: 1.45\n }\n }, this.state.setupStatusTimedOut ? 'Still waiting on /settings — retry when the hub is reachable. Onboarding is not skipped on timeout.' : 'Fetching setup status from this hub (not the WebSocket path).'), this.state.setupStatusTimedOut ? /*#__PURE__*/React.createElement(Button, {\n primary: true,\n type: \"button\",\n onClick: function onClick() {\n _this5.setState({\n setupStatusTimedOut: false\n });\n _this5._checkSetupStatus()[\"finally\"](function () {\n if (_this5._setupStatusSafetyTimer) {\n clearTimeout(_this5._setupStatusSafetyTimer);\n _this5._setupStatusSafetyTimer = null;\n }\n _this5._setupStatusSafetyTimer = setTimeout(function () {\n _this5.setState(function (prev) {\n return prev.setupChecked ? null : {\n setupStatusTimedOut: true\n };\n });\n }, 20000);\n });\n }\n }, \"Retry\") : null) : this.state.needsSetup ? this.state.requiresSetupUiSecret && !this.state.setupUiVerified ? /*#__PURE__*/React.createElement(\"div\", {\n style: {\n minHeight: '100vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '1.5em',\n boxSizing: 'border-box'\n }\n }, /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n maxWidth: '28rem',\n width: '100%'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, \"Operator setup\"), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n marginTop: '0.5em',\n marginBottom: 0,\n lineHeight: 1.5\n }\n }, \"Enter the value of \", /*#__PURE__*/React.createElement(\"code\", null, \"FABRIC_HUB_SETUP_UI_SECRET\"), \" from the server environment to open first-time Hub configuration.\")), /*#__PURE__*/React.createElement(Form, {\n style: {\n maxWidth: '22rem',\n width: '100%',\n marginTop: '1em'\n },\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n _this5._verifySetupUiSecret();\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(\"label\", {\n htmlFor: \"hub-setup-ui-secret\"\n }, \"Setup secret\"), /*#__PURE__*/React.createElement(Input, {\n id: \"hub-setup-ui-secret\",\n type: \"password\",\n autoComplete: \"off\",\n value: this.state.setupUiGatePassword,\n onChange: function onChange(e) {\n return _this5.setState({\n setupUiGatePassword: e.target.value\n });\n }\n })), this.state.setupUiGateError ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: \"small\",\n style: {\n marginBottom: '0.75em'\n }\n }, this.state.setupUiGateError) : null, /*#__PURE__*/React.createElement(Button, {\n primary: true,\n type: \"submit\",\n loading: this.state.setupUiGateBusy,\n disabled: this.state.setupUiGateBusy\n }, \"Continue to setup\"))) : /*#__PURE__*/React.createElement(Onboarding, {\n nodeName: \"Hub\",\n requiresSetupUiSecret: this.state.requiresSetupUiSecret,\n onConfigurationComplete: function onConfigurationComplete(result) {\n if (result && result.token) {\n var openWizard = false;\n try {\n var idRec = readStorageJSON('fabric.identity.local', null);\n openWizard = !hasCompletedPostSetupBrowserIdentity(idRec);\n } catch (e) {}\n try {\n if (typeof window !== 'undefined') {\n if (window.sessionStorage) {\n window.sessionStorage.setItem('fabric.hub.wantIdentityWizard', openWizard ? '1' : '');\n }\n writeStorageString('fabric.hub.identityWizardPending', openWizard ? '1' : '');\n if (!openWizard) {\n writeStorageString('fabric.hub.identityWizardDismissed', '');\n }\n }\n } catch (e) {}\n _this5.setState({\n adminToken: result.token,\n adminTokenExpiresAt: result.expiresAt,\n needsSetup: false,\n postSetupIdentityWizardOpen: openWizard\n });\n if (typeof window !== 'undefined') {\n try {\n writeStorageString('fabric.hub.adminToken', result.token);\n if (result.expiresAt != null) {\n writeStorageString('fabric.hub.adminTokenExpiresAt', String(result.expiresAt));\n }\n } catch (e) {}\n }\n }\n }\n }) : this._shouldShowPostSetupIdentityWizard() ? /*#__PURE__*/React.createElement(FabricPostSetupIdentityWizard, {\n hubAdminToken: this.state.adminToken,\n currentIdentity: local,\n onLocalIdentityChange: this._handleIdentityManagerLocalChange,\n onUnlockSuccess: this._handleIdentityManagerUnlockSuccess,\n onLockStateChange: this._handleIdentityManagerLockStateChange,\n onForgetIdentity: this._handleIdentityManagerForget,\n onComplete: function onComplete() {\n try {\n writeStorageString('fabric.hub.identityWizardPending', '');\n if (typeof window !== 'undefined' && window.sessionStorage) {\n window.sessionStorage.removeItem('fabric.hub.wantIdentityWizard');\n }\n } catch (e) {}\n _this5.setState({\n postSetupIdentityWizardOpen: false\n });\n },\n onSkip: function onSkip() {\n try {\n writeStorageString('fabric.hub.identityWizardDismissed', '1');\n writeStorageString('fabric.hub.identityWizardPending', '');\n if (typeof window !== 'undefined' && window.sessionStorage) {\n window.sessionStorage.setItem('fabric.hub.identityWizardDismissed', '1');\n window.sessionStorage.removeItem('fabric.hub.wantIdentityWizard');\n }\n } catch (e) {}\n _this5.setState({\n postSetupIdentityWizardOpen: false\n });\n }\n }) : /*#__PURE__*/React.createElement(BrowserRouter, {\n useTransitions: true\n }, /*#__PURE__*/React.createElement(ToastContainer, {\n position: \"bottom-center\",\n newestOnTop: true,\n closeOnClick: true,\n pauseOnFocusLoss: true,\n draggable: true,\n pauseOnHover: true\n }), /*#__PURE__*/React.createElement(TopPanel, {\n hubAddress: this.state.uiHubAddress,\n auth: effectiveAuth,\n adminToken: this.state.adminToken,\n localIdentity: local,\n hasLocalIdentity: !!hasLocal,\n hasLockedIdentity: effectiveHasLockedIdentity,\n publicHubVisitor: publicHubVisitor,\n bitcoin: bitcoin,\n clientBalance: this.state.clientBalance,\n clientBalanceLoading: this.state.clientBalanceLoading,\n onRefreshBalance: function onRefreshBalance() {\n return _this5._refreshClientBalance(true);\n },\n onUnlockIdentity: function onUnlockIdentity() {\n return _this5._openIdentityModalForUser();\n },\n onLockIdentity: function onLockIdentity() {\n return _this5._handleLockIdentity();\n },\n onLogin: this.requestLogin,\n onManageIdentity: this.openIdentityManager,\n onProfile: this.openIdentityManager,\n onSignMessage: function onSignMessage() {\n return _this5.setState({\n uiSignMessageOpen: true\n });\n },\n onDestroyIdentity: function onDestroyIdentity() {\n return _this5.setState({\n uiDestroyIdentityConfirmOpen: true\n });\n },\n onOpenSettings: function onOpenSettings() {\n var uf = loadHubUiFeatureFlags();\n _this5.setState({\n uiSettingsOpen: true,\n uiHubAddressDraft: _this5.state.uiHubAddress,\n uiAdvancedModeDraft: !!uf.advancedMode,\n uiHubAddressError: null\n });\n }\n }), /*#__PURE__*/React.createElement(HubAlertStackLocationGate, {\n adminToken: this.state.adminToken\n }), publicHubVisitor ? null : /*#__PURE__*/React.createElement(FederationInviteNotificationBanner, {\n detail: this.state.federationInviteBannerDetail,\n onReview: this._openFederationInviteReview,\n onDismiss: this._dismissFederationInviteBanner\n }), /*#__PURE__*/React.createElement(Modal, {\n size: \"large\",\n closeOnDimmerClick: false,\n closeOnEscape: false,\n open: !!this.state.uiIdentityOpen,\n onClose: function onClose() {\n return _this5.setState({\n uiIdentityOpen: false\n });\n },\n \"aria-labelledby\": \"fabric-identity-modal-heading\",\n style: {\n margin: '1rem auto',\n maxWidth: 'calc(100vw - 1.5rem)'\n }\n }, /*#__PURE__*/React.createElement(Modal.Content, {\n scrolling: true,\n style: {\n maxWidth: '100%',\n minWidth: 0,\n overflowX: 'hidden',\n WebkitOverflowScrolling: 'touch',\n boxSizing: 'border-box'\n }\n }, effectiveAuth && effectiveAuth.fabricIdentityMode === 'account' ? /*#__PURE__*/React.createElement(\"div\", {\n style: {\n marginBottom: '1rem',\n padding: '0.75rem 1rem',\n background: 'rgba(0,0,0,0.03)',\n borderRadius: '0.28571429rem',\n border: '1px solid rgba(34,36,38,.15)'\n }\n }, /*#__PURE__*/React.createElement(FabricIdentityAccountControls, {\n localIdentity: effectiveAuth,\n onFabricAccountChange: this._fabricAccountChange\n }), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n margin: '0.6em 0 0',\n color: '#666',\n fontSize: '0.9em',\n lineHeight: 1.45\n }\n }, \"On-chain balance in the top bar and Bitcoin receive/spend paths use the same BIP44 account index as the Fabric account you select here (\", /*#__PURE__*/React.createElement(\"code\", null, \"m/44'/0'/n'\"), \" under your master key).\")) : null, /*#__PURE__*/React.createElement(IdentityManager, {\n key: \"fabric-identity-manager\",\n hubAdminToken: this.state.adminToken,\n currentIdentity: this.state.uiLocalIdentity,\n onLocalIdentityChange: this._handleIdentityManagerLocalChange,\n onLockStateChange: this._handleIdentityManagerLockStateChange,\n onUnlockSuccess: this._handleIdentityManagerUnlockSuccess,\n onForgetIdentity: this._handleIdentityManagerForget\n })), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n onClick: this._closeHubIdentityModal\n }, \"Close\"))), /*#__PURE__*/React.createElement(Modal, {\n size: \"small\",\n open: !!this.state.uiSettingsOpen,\n onClose: function onClose() {\n return _this5.setState({\n uiSettingsOpen: false,\n uiHubAddressError: null\n });\n }\n }, /*#__PURE__*/React.createElement(Header, {\n icon: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"cog\"\n }), \"Settings\"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(Checkbox, {\n toggle: true,\n label: \"Advanced Mode\",\n checked: !!this.state.uiAdvancedModeDraft,\n onChange: function onChange(e, data) {\n return _this5.setState({\n uiAdvancedModeDraft: !!(data && data.checked)\n });\n }\n }), /*#__PURE__*/React.createElement(\"div\", {\n style: {\n marginTop: '0.5em',\n color: '#666'\n }\n }, \"Shows advanced hub surfaces (Peers, Contracts, More tools, activity/nav extras).\")), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(\"label\", null, \"Hub address\"), /*#__PURE__*/React.createElement(Input, {\n placeholder: \"host:port (e.g. localhost:7777) or https://host:port\",\n value: this.state.uiHubAddressDraft || '',\n onChange: function onChange(e) {\n return _this5.setState({\n uiHubAddressDraft: e.target.value,\n uiHubAddressError: null\n });\n }\n }), /*#__PURE__*/React.createElement(\"div\", {\n style: {\n marginTop: '0.5em',\n color: '#666'\n }\n }, \"This updates the WebSocket endpoint used by the UI.\"), this.state.uiHubAddressError ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: \"small\",\n style: {\n marginTop: '0.75em'\n }\n }, this.state.uiHubAddressError) : null))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n onClick: function onClick() {\n return _this5.setState({\n uiSettingsOpen: false,\n uiHubAddressError: null\n });\n }\n }, \"Cancel\"), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n onClick: function onClick() {\n var raw = (_this5.state.uiHubAddressDraft || '').trim();\n if (!raw) {\n _this5.setState({\n uiHubAddressError: 'Hub address is required.'\n });\n return;\n }\n try {\n if (typeof window !== 'undefined') {\n writeStorageString('fabric.hub.address', raw);\n }\n } catch (e) {}\n try {\n setHubUiFeatureFlag('advancedMode', !!_this5.state.uiAdvancedModeDraft);\n } catch (e) {}\n _this5.setState({\n uiHubAddress: raw,\n uiSettingsOpen: false,\n uiHubAddressError: null\n }, function () {\n try {\n if (_this5.bridgeRef && _this5.bridgeRef.current && typeof _this5.bridgeRef.current.setHubAddress === 'function') {\n var ok = _this5.bridgeRef.current.setHubAddress(raw);\n if (!ok) _this5.setState({\n uiHubAddressError: 'Invalid hub address format.'\n });\n }\n } catch (e) {}\n });\n }\n }, \"Save\"))), /*#__PURE__*/React.createElement(Modal, {\n size: \"small\",\n open: !!this.state.uiSignMessageOpen,\n onClose: function onClose() {\n return _this5.setState({\n uiSignMessageOpen: false,\n uiSignMessageText: '',\n uiSignMessageResult: null,\n uiVerifyMessageText: '',\n uiVerifySignature: '',\n uiVerifyPublicKey: '',\n uiVerifyResult: null\n });\n }\n }, /*#__PURE__*/React.createElement(Header, {\n icon: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"pencil\"\n }), \"Sign & verify message\"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(\"label\", null, \"Message to sign\"), /*#__PURE__*/React.createElement(Input, {\n placeholder: \"Enter message to sign\",\n value: this.state.uiSignMessageText || '',\n onChange: function onChange(e) {\n return _this5.setState({\n uiSignMessageText: e.target.value,\n uiSignMessageResult: null\n });\n }\n })), this.state.uiSignMessageResult && /*#__PURE__*/React.createElement(Message, {\n className: \"fade-in\"\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(\"label\", null, \"Public key (hex)\"), /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '0.5em',\n fontFamily: 'monospace',\n wordBreak: 'break-all'\n }\n }, /*#__PURE__*/React.createElement(\"span\", null, this.state.uiSignMessageResult.publicKey), /*#__PURE__*/React.createElement(Icon, {\n name: \"copy\",\n link: true,\n onClick: function onClick() {\n try {\n navigator.clipboard.writeText(_this5.state.uiSignMessageResult.publicKey);\n } catch (e) {}\n },\n style: {\n cursor: 'pointer'\n }\n }))), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(\"label\", null, \"Signature\"), /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '0.5em',\n fontFamily: 'monospace',\n wordBreak: 'break-all'\n }\n }, /*#__PURE__*/React.createElement(\"span\", null, this.state.uiSignMessageResult.signature), /*#__PURE__*/React.createElement(Icon, {\n name: \"copy\",\n link: true,\n onClick: function onClick() {\n try {\n navigator.clipboard.writeText(_this5.state.uiSignMessageResult.signature);\n } catch (e) {}\n },\n style: {\n cursor: 'pointer'\n }\n })))), /*#__PURE__*/React.createElement(Header, {\n as: \"h4\",\n dividing: true,\n style: {\n marginTop: '1.5em'\n }\n }, \"Verify signature\"), /*#__PURE__*/React.createElement(\"p\", {\n style: {\n color: '#666',\n fontSize: '0.95em',\n marginBottom: '1em'\n }\n }, \"When you use \", /*#__PURE__*/React.createElement(\"strong\", null, \"external signing\"), \" (desktop delegation), the Hub records a Fabric message and the same message, public key, and signature appear here for verification\\u2014same flow as local signing.\"), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(\"label\", null, \"Message\"), /*#__PURE__*/React.createElement(Input, {\n placeholder: \"Message that was signed\",\n value: this.state.uiVerifyMessageText || '',\n onChange: function onChange(e) {\n return _this5.setState({\n uiVerifyMessageText: e.target.value,\n uiVerifyResult: null\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(\"label\", null, \"Public key (hex)\"), /*#__PURE__*/React.createElement(Input, {\n placeholder: \"Compressed public key (66 hex chars)\",\n value: this.state.uiVerifyPublicKey || '',\n onChange: function onChange(e) {\n return _this5.setState({\n uiVerifyPublicKey: e.target.value,\n uiVerifyResult: null\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(\"label\", null, \"Signature (hex)\"), /*#__PURE__*/React.createElement(Input, {\n placeholder: \"Signature (128 hex chars)\",\n value: this.state.uiVerifySignature || '',\n onChange: function onChange(e) {\n return _this5.setState({\n uiVerifySignature: e.target.value,\n uiVerifyResult: null\n });\n }\n })), this.state.uiVerifyResult === true && /*#__PURE__*/React.createElement(Message, {\n success: true,\n className: \"fade-in\"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"check\",\n color: \"green\",\n size: \"large\"\n }), \"Signature is valid\"), this.state.uiVerifyResult === false && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n className: \"fade-in\"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"close\",\n color: \"red\",\n size: \"large\"\n }), \"Signature is invalid\"))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n onClick: function onClick() {\n return _this5.setState({\n uiSignMessageOpen: false,\n uiSignMessageText: '',\n uiSignMessageResult: null,\n uiVerifyMessageText: '',\n uiVerifySignature: '',\n uiVerifyPublicKey: '',\n uiVerifyResult: null\n });\n }\n }, \"Close\"), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n loading: !!this.state.uiSignMessageBusy,\n onClick: function onClick() {\n var text = (_this5.state.uiSignMessageText || '').trim();\n if (!text) return;\n var bridge = _this5.bridgeRef && _this5.bridgeRef.current;\n var useDelegation = hasExternalSigningDelegation() && bridge && typeof bridge.signArbitraryTextDelegated === 'function';\n if (useDelegation) {\n _this5.setState({\n uiSignMessageBusy: true,\n uiSignMessageResult: null\n });\n toast.info('Confirm signing in the Fabric Hub desktop app…', {\n duration: 12000,\n header: 'External signing'\n });\n void _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {\n var result, _t7;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.p = _context7.n) {\n case 0:\n result = null;\n _context7.p = 1;\n _context7.n = 2;\n return bridge.signArbitraryTextDelegated(text);\n case 2:\n result = _context7.v;\n _context7.n = 4;\n break;\n case 3:\n _context7.p = 3;\n _t7 = _context7.v;\n console.error('[HUB]', 'Delegated sign failed:', safeIdentityErr(_t7));\n case 4:\n _this5.setState({\n uiSignMessageBusy: false,\n uiSignMessageResult: result,\n uiVerifyMessageText: result ? text : _this5.state.uiVerifyMessageText,\n uiVerifyPublicKey: result ? result.publicKey : _this5.state.uiVerifyPublicKey,\n uiVerifySignature: result ? result.signature : _this5.state.uiVerifySignature,\n uiVerifyResult: null\n });\n if (!result) {\n toast.warning('Signing was cancelled or timed out.', {\n header: 'External signing'\n });\n }\n case 5:\n return _context7.a(2);\n }\n }, _callee7, null, [[1, 3]]);\n }))();\n return;\n }\n var result = bridge && typeof bridge.signArbitraryText === 'function' ? bridge.signArbitraryText(text) : null;\n _this5.setState({\n uiSignMessageResult: result,\n uiVerifyMessageText: result ? text : _this5.state.uiVerifyMessageText,\n uiVerifyPublicKey: result ? result.publicKey : _this5.state.uiVerifyPublicKey,\n uiVerifySignature: result ? result.signature : _this5.state.uiVerifySignature,\n uiVerifyResult: null\n });\n },\n disabled: !(this.state.uiSignMessageText || '').trim()\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"pencil\"\n }), \"Sign\"), /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n var msg = (_this5.state.uiVerifyMessageText || '').trim();\n var sig = (_this5.state.uiVerifySignature || '').trim();\n var pub = (_this5.state.uiVerifyPublicKey || '').trim();\n if (!msg || !sig || !pub) return;\n var bridge = _this5.bridgeRef && _this5.bridgeRef.current;\n var result = bridge && typeof bridge.verifyArbitraryText === 'function' ? bridge.verifyArbitraryText(msg, sig, pub) : null;\n _this5.setState({\n uiVerifyResult: result\n });\n },\n disabled: !(this.state.uiVerifyMessageText || '').trim() || !(this.state.uiVerifySignature || '').trim() || !(this.state.uiVerifyPublicKey || '').trim()\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"check\"\n }), \"Verify\"))), /*#__PURE__*/React.createElement(Modal, {\n size: \"tiny\",\n open: !!this.state.uiDestroyIdentityConfirmOpen,\n onClose: function onClose() {\n return _this5.setState({\n uiDestroyIdentityConfirmOpen: false\n });\n }\n }, /*#__PURE__*/React.createElement(Header, {\n icon: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"trash\",\n color: \"red\"\n }), \"Destroy identity\"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement(\"p\", null, \"This will remove your local identity and all documents from this browser. This cannot be undone. Make sure you have backed up your seed phrase.\")), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n onClick: function onClick() {\n return _this5.setState({\n uiDestroyIdentityConfirmOpen: false\n });\n }\n }, \"Cancel\"), /*#__PURE__*/React.createElement(Button, {\n negative: true,\n onClick: function onClick() {\n if (_this5.bridgeRef && _this5.bridgeRef.current && typeof _this5.bridgeRef.current.clearAllDocuments === 'function') {\n try {\n _this5.bridgeRef.current.clearAllDocuments();\n } catch (e) {}\n }\n try {\n clearSpendXpubWatch();\n } catch (_) {}\n try {\n _this5._clearUnlockedSessionOnClose();\n } catch (_) {}\n try {\n if (typeof window !== 'undefined') {\n clearFabricBrowserIdentityLocal();\n removeStorageKey(DELEGATION_STORAGE_KEY);\n removeStorageKey('fabric.linkedDevices');\n notifyDelegationStorageChanged();\n removeStorageKey('fabric:documents');\n if (typeof chrome !== 'undefined' && chrome.storage && chrome.storage.local && chrome.storage.local.remove) {\n chrome.storage.local.remove(['fabric.identity.ext']);\n }\n }\n } catch (e) {}\n _this5.setState({\n uiLocalIdentity: null,\n uiHasLockedIdentity: false,\n uiIdentityOpen: false,\n uiDestroyIdentityConfirmOpen: false,\n uiSignMessageOpen: false\n });\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: \"trash\"\n }), \"Destroy\"))), /*#__PURE__*/React.createElement(Routes, null, /*#__PURE__*/React.createElement(Route, {\n path: \"/\",\n element: /*#__PURE__*/React.createElement(Home, _extends({\n auth: effectiveAuth,\n publicHubVisitor: publicHubVisitor,\n fetchContract: this.props.fetchContract,\n contracts: this.props.contracts,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n onDiscoverWebRTCPeers: function onDiscoverWebRTCPeers() {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.discoverAndConnectToPeers === 'function') {\n bridgeInstance.discoverAndConnectToPeers();\n }\n },\n onRepublishWebRTCOffer: function onRepublishWebRTCOffer() {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.publishWebRTCOffer === 'function') {\n bridgeInstance.publishWebRTCOffer();\n }\n },\n onConnectWebRTCPeer: function onConnectWebRTCPeer(peerId) {\n var id = (peerId || '').trim();\n if (!id || !_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.connectToWebRTCPeer === 'function') {\n bridgeInstance.connectToWebRTCPeer(id);\n }\n },\n onDisconnectAllWebRTCPeers: function onDisconnectAllWebRTCPeers() {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.disconnectAllWebRTCPeers === 'function') {\n bridgeInstance.disconnectAllWebRTCPeers();\n }\n },\n onSendWebRTCTestPing: function onSendWebRTCTestPing() {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.broadcastToWebRTCPeers === 'function') {\n bridgeInstance.broadcastToWebRTCPeers({\n type: 'ping',\n timestamp: Date.now()\n });\n }\n },\n onToggleWebRTCChatOnly: function onToggleWebRTCChatOnly(enabled) {\n var flag = !!enabled;\n _this5.setState({\n webrtcChatOnly: flag\n });\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.setWebRTCChatOnly === 'function') {\n bridgeInstance.setWebRTCChatOnly(flag);\n }\n },\n onRequireUnlock: this.openIdentityModalFromGatedAction,\n onRefreshNetworkStatus: function onRefreshNetworkStatus() {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendNetworkStatusRequest === 'function') {\n bridgeInstance.sendNetworkStatusRequest();\n }\n },\n webrtcChatOnly: this.state.webrtcChatOnly\n }, this.props, {\n adminToken: this.state.adminToken\n }))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/features\",\n element: /*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"features\"\n }, /*#__PURE__*/React.createElement(FeaturesPage, null))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/activities\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"activities\"\n }, /*#__PURE__*/React.createElement(ActivitiesHome, {\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n adminToken: this.state.adminToken,\n identity: local || effectiveAuth,\n onRequireUnlock: this.openIdentityModalFromGatedAction\n })))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/notifications\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"activities\"\n }, /*#__PURE__*/React.createElement(NotificationsHome, null)))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/bitcoin\",\n element: pv(/*#__PURE__*/React.createElement(BitcoinHomeWithNav, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n adminToken: this.state.adminToken,\n bitcoinPage: \"dashboard\"\n }, this.props)))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/payjoin\",\n element: /*#__PURE__*/React.createElement(NavigatePayjoinSpaAlias, null)\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/bitcoin/blocks\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinExplorer\"\n }, /*#__PURE__*/React.createElement(BitcoinBlockList, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bitcoin: bitcoin,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n adminToken: this.state.adminToken\n }, this.props))))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/bitcoin/faucet\",\n element: pv(/*#__PURE__*/React.createElement(FaucetHome, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bitcoin: bitcoin,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n adminToken: this.state.adminToken\n }, this.props)))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/bitcoin/transactions\",\n element: pv(/*#__PURE__*/React.createElement(BitcoinTransactionsHome, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bitcoin: bitcoin,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n adminToken: this.state.adminToken\n }, this.props)))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/bitcoin/blocks/:blockhash\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinExplorer\"\n }, /*#__PURE__*/React.createElement(BitcoinBlockView, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef\n }, this.props))))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/bitcoin/resources\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinResources\"\n }, /*#__PURE__*/React.createElement(BitcoinResourcesHome, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bitcoin: bitcoin,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef\n }, this.props))))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/bitcoin/payments\",\n element: /*#__PURE__*/React.createElement(NavigatePaymentsLegacyToCanonical, null)\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/payments\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinPayments\"\n }, /*#__PURE__*/React.createElement(BitcoinPaymentsHomeRoute, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bitcoin: bitcoin,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n adminToken: this.state.adminToken\n }, this.props))))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/bitcoin/crowdfunds\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinCrowdfund\"\n }, /*#__PURE__*/React.createElement(CrowdfundingHome, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bitcoin: bitcoin,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n adminToken: this.state.adminToken,\n onRequireUnlock: this.openIdentityModalFromGatedAction\n }, this.props))))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/bitcoin/invoices\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinInvoices\"\n }, /*#__PURE__*/React.createElement(InvoiceListHomeRoute, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bitcoin: bitcoin,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n adminToken: this.state.adminToken\n }, this.props))))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/bitcoin/lightning\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinLightning\"\n }, /*#__PURE__*/React.createElement(LightningHome, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bitcoin: bitcoin,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n adminToken: this.state.adminToken\n }, this.props))))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/lightning\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinLightning\"\n }, /*#__PURE__*/React.createElement(LightningHome, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bitcoin: bitcoin,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n adminToken: this.state.adminToken\n }, this.props))))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/bitcoin/transactions/:txhash\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinExplorer\"\n }, /*#__PURE__*/React.createElement(BitcoinTransactionView, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef\n }, this.props))))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/bitcoin/channels/:id\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinLightning\"\n }, /*#__PURE__*/React.createElement(ChannelView, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth\n }, this.props))))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/services/sidechain\",\n element: /*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"sidechain\"\n }, /*#__PURE__*/React.createElement(Navigate, {\n to: \"/sidechains\",\n replace: true\n }))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/sidechain\",\n element: /*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"sidechain\"\n }, /*#__PURE__*/React.createElement(Navigate, {\n to: \"/sidechains\",\n replace: true\n }))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/sidechains\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"sidechain\"\n }, /*#__PURE__*/React.createElement(SidechainHome, _extends({\n auth: effectiveAuth,\n identity: local || effectiveAuth,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n adminToken: this.state.adminToken\n }, this.props))))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/peers\",\n element: pv(/*#__PURE__*/React.createElement(PeersFeatureRoute, null, /*#__PURE__*/React.createElement(PeerList, _extends({\n auth: effectiveAuth,\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n onAddPeer: function onAddPeer(peer) {\n if (!peer || !_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendAddPeerRequest === 'function') {\n bridgeInstance.sendAddPeerRequest(peer);\n }\n },\n onRefreshPeers: function onRefreshPeers() {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendListPeersRequest === 'function') {\n bridgeInstance.sendListPeersRequest();\n }\n if (typeof bridgeInstance.sendNetworkStatusRequest === 'function') {\n bridgeInstance.sendNetworkStatusRequest();\n }\n },\n onDisconnectPeer: function onDisconnectPeer(address) {\n if (!address || !_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendRemovePeerRequest === 'function') {\n bridgeInstance.sendRemovePeerRequest(address);\n }\n },\n onSendPeerMessage: function onSendPeerMessage(address, text) {\n if (!address || !text || !_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendPeerMessageRequest === 'function') {\n bridgeInstance.sendPeerMessageRequest(address, text);\n }\n },\n onFabricPeerResync: function onFabricPeerResync(idOrAddress) {\n if (!idOrAddress || !_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendFabricPeerResyncRequest === 'function') {\n bridgeInstance.sendFabricPeerResyncRequest(idOrAddress);\n }\n },\n onSetPeerNickname: function onSetPeerNickname(address, nickname) {\n if (!address || !_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendSetPeerNicknameRequest === 'function') {\n bridgeInstance.sendSetPeerNicknameRequest(address, nickname);\n }\n },\n onDiscoverWebRTCPeers: function onDiscoverWebRTCPeers() {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.discoverAndConnectToPeers === 'function') {\n bridgeInstance.discoverAndConnectToPeers();\n }\n },\n onRepublishWebRTCOffer: function onRepublishWebRTCOffer() {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.publishWebRTCOffer === 'function') {\n bridgeInstance.publishWebRTCOffer();\n }\n },\n onConnectWebRTCPeer: function onConnectWebRTCPeer(peerId) {\n var id = (peerId || '').trim();\n if (!id || !_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.connectToWebRTCPeer === 'function') {\n bridgeInstance.connectToWebRTCPeer(id);\n }\n },\n onDisconnectWebRTCPeer: function onDisconnectWebRTCPeer(peerId) {\n var id = (peerId || '').trim();\n if (!id || !_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.disconnectWebRTCPeer === 'function') {\n bridgeInstance.disconnectWebRTCPeer(id);\n }\n },\n onDisconnectAllWebRTCPeers: function onDisconnectAllWebRTCPeers() {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.disconnectAllWebRTCPeers === 'function') {\n bridgeInstance.disconnectAllWebRTCPeers();\n }\n },\n onSendWebRTCTestPing: function onSendWebRTCTestPing() {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.broadcastToWebRTCPeers === 'function') {\n bridgeInstance.broadcastToWebRTCPeers({\n type: 'ping',\n timestamp: Date.now()\n });\n }\n },\n adminPeerToolsToken: this.state.adminToken || (typeof window !== 'undefined' ? readStorageString('fabric.hub.adminToken') : '') || '',\n onSendFlushChainToTrustedPeers: function onSendFlushChainToTrustedPeers(body) {\n var t = _this5.state.adminToken || (typeof window !== 'undefined' ? readStorageString('fabric.hub.adminToken') : '') || '';\n if (!t || !body || !_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendFlushChainToTrustedPeersRequest === 'function') {\n bridgeInstance.sendFlushChainToTrustedPeersRequest(body, t);\n }\n }\n }, this.props))))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/peers/:id\",\n element: pv(/*#__PURE__*/React.createElement(PeersFeatureRoute, null, this._hubPeerView(effectiveAuth, local || effectiveAuth, undefined)))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/settings/admin/peers/:id\",\n element: pv(/*#__PURE__*/React.createElement(PeersFeatureRoute, null, this._hubPeerView(effectiveAuth, local || effectiveAuth, this.state.adminToken)))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/documents\",\n element: /*#__PURE__*/React.createElement(DocumentList, _extends({\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n identity: local || effectiveAuth,\n onListDocuments: function onListDocuments() {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendListDocumentsRequest === 'function') {\n bridgeInstance.sendListDocumentsRequest();\n }\n },\n onAddLocalDocument: function onAddLocalDocument(doc) {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.addLocalDocument === 'function') {\n bridgeInstance.addLocalDocument(doc);\n }\n },\n onPublishLocalDocument: function onPublishLocalDocument(doc) {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendPublishDocumentRequest === 'function') {\n bridgeInstance.sendPublishDocumentRequest(doc.id);\n }\n },\n onCreateDocument: function onCreateDocument(doc) {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendCreateDocumentRequest === 'function') {\n bridgeInstance.sendCreateDocumentRequest(doc);\n }\n }\n }, this.props))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/documents/:id\",\n element: /*#__PURE__*/React.createElement(DocumentView, _extends({\n bridge: this.props.bridge,\n bridgeRef: this.bridgeRef,\n identity: local || effectiveAuth,\n bitcoin: bitcoin,\n hasDocumentKey: !!(bridgeInstance && typeof bridgeInstance.hasDocumentEncryptionKey === 'function' && bridgeInstance.hasDocumentEncryptionKey()),\n onRequestUnlock: this.openIdentityModalFromGatedAction,\n onGetDocument: function onGetDocument(id) {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendGetDocumentRequest === 'function') {\n bridgeInstance.sendGetDocumentRequest(id);\n }\n },\n onGetDecryptedContent: function onGetDecryptedContent(id) {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return null;\n var bridgeInstance = _this5.bridgeRef.current;\n return typeof bridgeInstance.getDecryptedDocumentContent === 'function' ? bridgeInstance.getDecryptedDocumentContent(id) : null;\n },\n onUnlockHtlcDocument: (/*#__PURE__*/function () {\n var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(docId, preimageHex) {\n var bridgeInstance;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.n) {\n case 0:\n if (!(!_this5.bridgeRef || !_this5.bridgeRef.current)) {\n _context8.n = 1;\n break;\n }\n return _context8.a(2, {\n ok: false,\n error: 'Bridge not ready.'\n });\n case 1:\n bridgeInstance = _this5.bridgeRef.current;\n if (!(typeof bridgeInstance.unlockHtlcEncryptedDocument !== 'function')) {\n _context8.n = 2;\n break;\n }\n return _context8.a(2, {\n ok: false,\n error: 'HTLC unlock not available.'\n });\n case 2:\n return _context8.a(2, bridgeInstance.unlockHtlcEncryptedDocument(docId, preimageHex));\n }\n }, _callee8);\n }));\n return function (_x4, _x5) {\n return _ref7.apply(this, arguments);\n };\n }()),\n onPublishDocument: function onPublishDocument(id, opts) {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendPublishDocumentRequest === 'function') {\n bridgeInstance.sendPublishDocumentRequest(id, opts);\n }\n },\n onRequestPurchaseInvoice: function onRequestPurchaseInvoice(id) {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendCreatePurchaseInvoiceRequest === 'function') {\n bridgeInstance.sendCreatePurchaseInvoiceRequest(id);\n }\n },\n onClaimPurchase: function onClaimPurchase(id, txid) {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return null;\n var bridgeInstance = _this5.bridgeRef.current;\n return typeof bridgeInstance.sendClaimPurchaseRequest === 'function' ? bridgeInstance.sendClaimPurchaseRequest(id, txid) : Promise.resolve({\n error: 'Claim not available'\n });\n },\n onRequestDistributeInvoice: function onRequestDistributeInvoice(id, config) {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendCreateDistributeInvoiceRequest === 'function') {\n bridgeInstance.sendCreateDistributeInvoiceRequest(id, config);\n }\n },\n onDistributeDocument: function onDistributeDocument(id, config) {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return null;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendDistributeDocumentRequest === 'function') {\n return bridgeInstance.sendDistributeDocumentRequest(id, config);\n }\n return null;\n },\n onSendDistributeProposal: function onSendDistributeProposal(peerKey, proposal) {\n if (!_this5.bridgeRef || !_this5.bridgeRef.current) return;\n var bridgeInstance = _this5.bridgeRef.current;\n if (typeof bridgeInstance.sendSendDistributeProposalRequest === 'function') {\n bridgeInstance.sendSendDistributeProposalRequest(peerKey, proposal);\n }\n }\n }, this.props, {\n adminToken: this.state.adminToken\n }))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/settings/admin/beacon-federation\",\n element: /*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"sidechain\"\n }, /*#__PURE__*/React.createElement(BeaconFederationHome, null))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/settings/admin\",\n element: /*#__PURE__*/React.createElement(AdminHome, {\n adminToken: this.state.adminToken\n })\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/federation\",\n element: /*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"sidechain\"\n }, /*#__PURE__*/React.createElement(Navigate, {\n to: \"/federations\",\n replace: true\n }))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/federations\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"sidechain\"\n }, /*#__PURE__*/React.createElement(FederationsHome, {\n adminToken: this.state.adminToken,\n bridgeRef: this.bridgeRef\n })))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/settings/federation\",\n element: pv(/*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"sidechain\"\n }, /*#__PURE__*/React.createElement(SettingsFederationHome, {\n adminToken: this.state.adminToken,\n bridgeRef: this.bridgeRef\n })))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/settings/bitcoin-wallet\",\n element: pv(/*#__PURE__*/React.createElement(SettingsBitcoinWallet, {\n identity: local || effectiveAuth\n }))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/settings/security\",\n element: /*#__PURE__*/React.createElement(SecurityHome, null)\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/admin/beacon-federation\",\n element: /*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"sidechain\"\n }, /*#__PURE__*/React.createElement(Navigate, {\n to: \"/settings/admin/beacon-federation\",\n replace: true\n }))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/admin\",\n element: /*#__PURE__*/React.createElement(Navigate, {\n to: \"/settings/admin\",\n replace: true\n })\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/settings/collaboration\",\n element: readHubAdminTokenFromBrowser(this.state.adminToken) ? pv(/*#__PURE__*/React.createElement(CollaborationHome, {\n bridgeRef: this.bridgeRef,\n adminToken: this.state.adminToken\n }))\n // Redirect must not sit inside PublicVisitorGate — the gate replaces\n // children with a sign-in panel and would leave the URL on /collaboration.\n : /*#__PURE__*/React.createElement(Navigate, {\n to: \"/settings\",\n replace: true\n })\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/settings\",\n element: /*#__PURE__*/React.createElement(SettingsHome, null)\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/sessions/:sessionId\",\n element: /*#__PURE__*/React.createElement(SecuritySessionHome, null)\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/sessions\",\n element: /*#__PURE__*/React.createElement(Navigate, {\n to: \"/settings/security\",\n replace: true\n })\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/security\",\n element: /*#__PURE__*/React.createElement(Navigate, {\n to: \"/settings/security\",\n replace: true\n })\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/activity\",\n element: /*#__PURE__*/React.createElement(NavigateActivityToActivities, null)\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/peer\",\n element: /*#__PURE__*/React.createElement(NavigatePeerRootAlias, null)\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/peer/:id\",\n element: /*#__PURE__*/React.createElement(NavigatePeerDetailAlias, null)\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/home\",\n element: /*#__PURE__*/React.createElement(Navigate, {\n to: \"/\",\n replace: true\n })\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/wallet\",\n element: /*#__PURE__*/React.createElement(Navigate, {\n to: \"/services/bitcoin/transactions\",\n replace: true\n })\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/bitcoin\",\n element: /*#__PURE__*/React.createElement(Navigate, {\n to: \"/services/bitcoin\",\n replace: true\n })\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/crowdfunds\",\n element: /*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinCrowdfund\"\n }, /*#__PURE__*/React.createElement(Navigate, {\n to: \"/services/bitcoin/crowdfunds\",\n replace: true\n }))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/invoices\",\n element: /*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinInvoices\"\n }, /*#__PURE__*/React.createElement(Navigate, {\n to: \"/services/bitcoin/invoices#fabric-invoices-tab-demo\",\n replace: true\n }))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/resources\",\n element: /*#__PURE__*/React.createElement(UiFlagRoute, {\n flag: \"bitcoinResources\"\n }, /*#__PURE__*/React.createElement(Navigate, {\n to: \"/services/bitcoin/resources\",\n replace: true\n }))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/tx/:txhash\",\n element: /*#__PURE__*/React.createElement(NavigateLegacyBitcoinTxAlias, null)\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/block/:blockhash\",\n element: /*#__PURE__*/React.createElement(NavigateLegacyBitcoinBlockAlias, null)\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/document/:id\",\n element: /*#__PURE__*/React.createElement(NavigateDocumentsDetailAlias, null)\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/document\",\n element: /*#__PURE__*/React.createElement(Navigate, {\n to: \"/documents\",\n replace: true\n })\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/contracts\",\n element: pv(/*#__PURE__*/React.createElement(ContractsHome, this.props))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"/contracts/:id\",\n element: pv(/*#__PURE__*/React.createElement(ContractView, _extends({}, this.props, {\n adminToken: this.state.adminToken\n })))\n }), /*#__PURE__*/React.createElement(Route, {\n path: \"*\",\n element: /*#__PURE__*/React.createElement(UnknownRouteShell, null)\n })), /*#__PURE__*/React.createElement(BottomPanel, {\n pubkey: nodePubkey,\n adminToken: this.state.adminToken,\n publicHubVisitor: publicHubVisitor\n })))));\n }\n }, {\n key: \"_getHTML\",\n value: function _getHTML() {\n var component = this.render();\n return renderToString(component);\n }\n }, {\n key: \"_toHTML\",\n value: function _toHTML() {\n return ReactDOMServer.renderToString(this.render());\n }\n }, {\n key: \"toHTMLFragment\",\n value: function toHTMLFragment() {\n return this._toHTML();\n }\n }, {\n key: \"toHTML\",\n value: function toHTML() {\n return this._toHTML();\n }\n }]);\n}(React.Component);\nmodule.exports = HubInterface;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LElBQUksQ0FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDdkI7RUFBQztJQUFBdnlCLEdBQUE7SUFBQTlDLEtBQUEsRUFFRCxTQUFBdTFCLE1BQU1BLENBQUEsRUFBSTtNQUNSLE9BQU8sSUFBSSxDQUFDRixPQUFPLENBQUMsQ0FBQztJQUN2QjtFQUFDO0FBQUEsRUFqK0V3Qnh1QixLQUFLLENBQUMydUIsU0FBUztBQW8rRTFDQyxNQUFNLENBQUNDLE9BQU8sR0FBRzVnQixZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0h1YkludGVyZmFjZS5qcz83MzIwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gQ29uc3RhbnRzXG5jb25zdCB7XG4gIEJSQU5EX05BTUUsXG4gIEJST1dTRVJfREFUQUJBU0VfTkFNRSxcbiAgQlJPV1NFUl9EQVRBQkFTRV9UT0tFTl9UQUJMRVxufSA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cycpO1xuY29uc3Qge1xuICBERUxFR0FUSU9OX1NUT1JBR0VfS0VZLFxuICBub3RpZnlEZWxlZ2F0aW9uU3RvcmFnZUNoYW5nZWQsXG4gIGhhc0V4dGVybmFsU2lnbmluZ0RlbGVnYXRpb25cbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljRGVsZWdhdGlvbkxvY2FsJyk7XG5jb25zdCB7IHNhZmVJZGVudGl0eUVyciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY1NhZmVMb2cnKTtcbmNvbnN0IHtcbiAgcmVhZFN0b3JhZ2VTdHJpbmcsXG4gIHJlYWRTdG9yYWdlSlNPTixcbiAgd3JpdGVTdG9yYWdlU3RyaW5nLFxuICB3cml0ZVN0b3JhZ2VKU09OLFxuICByZW1vdmVTdG9yYWdlS2V5LFxuICBjbGVhckZhYnJpY0Jyb3dzZXJJZGVudGl0eUxvY2FsXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0Jyb3dzZXJTdGF0ZScpO1xuY29uc3QgeyBoYXNDb21wbGV0ZWRQb3N0U2V0dXBCcm93c2VySWRlbnRpdHkgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNQb3N0U2V0dXBCcm93c2VySWRlbnRpdHknKTtcbmNvbnN0IHtcbiAgbG9hZEh1YlVpRmVhdHVyZUZsYWdzLFxuICBzZXRIdWJVaUZlYXR1cmVGbGFnLFxuICBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncyxcbiAgZmV0Y2hQZXJzaXN0ZWRIdWJVaUZlYXR1cmVGbGFncyxcbiAgaW5zdGFsbEh1YlVpRmVhdHVyZUZsYWdzV2luZG93QXBpXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YlVpRmVhdHVyZUZsYWdzJyk7XG4vLyBEZXBlbmRlbmNpZXNcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IFJlYWN0RE9NU2VydmVyID0gcmVxdWlyZSgncmVhY3QtZG9tL3NlcnZlcicpO1xuY29uc3QgeyByZW5kZXJUb1N0cmluZyB9ID0gcmVxdWlyZSgncmVhY3QtZG9tL3NlcnZlcicpO1xuY29uc3Qge1xuICBCcm93c2VyUm91dGVyLFxuICBSb3V0ZXMsXG4gIFJvdXRlLFxuICBOYXZpZ2F0ZSxcbiAgTGluayxcbiAgdXNlTmF2aWdhdGUsXG4gIHVzZUxvY2F0aW9uLFxuICB1c2VTZWFyY2hQYXJhbXMsXG4gIHVzZVBhcmFtc1xufSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcblxuLy8gRmFicmljIFR5cGVzXG5jb25zdCB7XG4gIGJ1aWxkTG9jYWxGYWJyaWNJZGVudGl0eVBheWxvYWQsXG4gIGZhYnJpY1BsYWludGV4dFNpZ25pbmdVbmxvY2thYmxlXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0h1YkxvY2FsSWRlbnRpdHknKTtcbmNvbnN0IHtcbiAgZGVyaXZlRmFicmljQWNjb3VudElkZW50aXR5S2V5cyxcbiAgZmFicmljUm9vdFhwdWJGcm9tTWFzdGVyWHBydlxufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNBY2NvdW50RGVyaXZlZElkZW50aXR5Jyk7XG5jb25zdCB7XG4gIGFwcGx5RmFicmljRGV2QnJvd3NlclNlZWRCb290c3RyYXAsXG4gIG1lcmdlVW5sb2NrZWRTZXNzaW9uSW50b0lkZW50aXR5XG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0Jyb3dzZXJJZGVudGl0eURldicpO1xuY29uc3Qge1xuICBmdW5kTG9jYWxLZXlGcm9tSHViRmF1Y2V0LFxuICBzaG91bGRBdXRvRnVuZERlc2t0b3BMb2NhbEtleSxcbiAgZGlzY292ZXJMb2NhbEh1YkZhdWNldCxcbiAgbWFya0F1dG9GYXVjZXREb25lXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2Z1bmRMb2NhbEtleUZyb21IdWJGYXVjZXQnKTtcblxuLy8gQ29tcG9uZW50c1xuY29uc3QgQnJpZGdlID0gcmVxdWlyZSgnLi9CcmlkZ2UnKTtcbmNvbnN0IEJpdGNvaW5Ib21lID0gcmVxdWlyZSgnLi9CaXRjb2luSG9tZScpO1xuY29uc3QgTGlnaHRuaW5nSG9tZSA9IHJlcXVpcmUoJy4vTGlnaHRuaW5nSG9tZScpO1xuY29uc3QgQml0Y29pbkJsb2NrTGlzdCA9IHJlcXVpcmUoJy4vQml0Y29pbkJsb2NrTGlzdCcpO1xuY29uc3QgRmF1Y2V0SG9tZSA9IHJlcXVpcmUoJy4vRmF1Y2V0SG9tZScpO1xuY29uc3QgT25ib2FyZGluZyA9IHJlcXVpcmUoJy4vT25ib2FyZGluZycpO1xuY29uc3QgQml0Y29pbkJsb2NrVmlldyA9IHJlcXVpcmUoJy4vQml0Y29pbkJsb2NrVmlldycpO1xuY29uc3QgQml0Y29pblBheW1lbnRzSG9tZSA9IHJlcXVpcmUoJy4vQml0Y29pblBheW1lbnRzSG9tZScpO1xuY29uc3QgQml0Y29pblRyYW5zYWN0aW9uc0hvbWUgPSByZXF1aXJlKCcuL0JpdGNvaW5UcmFuc2FjdGlvbnNIb21lJyk7XG5cbmZ1bmN0aW9uIE5hdmlnYXRlUGF5bWVudHNMZWdhY3lUb0Nhbm9uaWNhbCAoKSB7XG4gIGNvbnN0IGxvYyA9IHVzZUxvY2F0aW9uKCk7XG4gIHJldHVybiAoXG4gICAgPE5hdmlnYXRlXG4gICAgICB0bz17e1xuICAgICAgICBwYXRobmFtZTogJy9wYXltZW50cycsXG4gICAgICAgIHNlYXJjaDogbG9jLnNlYXJjaCB8fCAnJyxcbiAgICAgICAgaGFzaDogbG9jLmhhc2ggfHwgJydcbiAgICAgIH19XG4gICAgICByZXBsYWNlXG4gICAgLz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQml0Y29pblBheW1lbnRzSG9tZVJvdXRlIChwcm9wcykge1xuICBjb25zdCBbc2VhcmNoUGFyYW1zLCBzZXRTZWFyY2hQYXJhbXNdID0gdXNlU2VhcmNoUGFyYW1zKCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghc2VhcmNoUGFyYW1zLmhhcygnYmlwNDRBY2NvdW50JykpIHJldHVybjtcbiAgICAgIGNvbnN0IHNwID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhzZWFyY2hQYXJhbXMpO1xuICAgICAgc3AuZGVsZXRlKCdiaXA0NEFjY291bnQnKTtcbiAgICAgIHNldFNlYXJjaFBhcmFtcyhzcCwgeyByZXBsYWNlOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKF8pIHsgLyogaWdub3JlICovIH1cbiAgfSwgW3NlYXJjaFBhcmFtcywgc2V0U2VhcmNoUGFyYW1zXSk7XG4gIGNvbnN0IHBheWpvaW5TZXNzaW9uRnJvbVF1ZXJ5ID0gU3RyaW5nKHNlYXJjaFBhcmFtcy5nZXQoJ3BheWpvaW5TZXNzaW9uJykgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgcGF5VG9Gcm9tUXVlcnkgPSBTdHJpbmcoc2VhcmNoUGFyYW1zLmdldCgncGF5VG8nKSB8fCAnJykudHJpbSgpO1xuICBjb25zdCBwYXlBbW91bnRTYXRzRnJvbVF1ZXJ5ID0gc2VhcmNoUGFyYW1zLmdldCgncGF5QW1vdW50U2F0cycpO1xuICBjb25zdCBiaXRjb2luVXJpRnJvbVF1ZXJ5ID0gU3RyaW5nKHNlYXJjaFBhcmFtcy5nZXQoJ2JpdGNvaW5VcmknKSB8fCAnJykudHJpbSgpO1xuICByZXR1cm4gKFxuICAgIDxCaXRjb2luUGF5bWVudHNIb21lXG4gICAgICB7Li4ucHJvcHN9XG4gICAgICBwYXltZW50c1NldFNlYXJjaFBhcmFtcz17c2V0U2VhcmNoUGFyYW1zfVxuICAgICAgcGF5am9pblNlc3Npb25Gcm9tUXVlcnk9e3BheWpvaW5TZXNzaW9uRnJvbVF1ZXJ5fVxuICAgICAgcGF5VG9Gcm9tUXVlcnk9e3BheVRvRnJvbVF1ZXJ5fVxuICAgICAgcGF5QW1vdW50U2F0c0Zyb21RdWVyeT17cGF5QW1vdW50U2F0c0Zyb21RdWVyeX1cbiAgICAgIGJpdGNvaW5VcmlGcm9tUXVlcnk9e2JpdGNvaW5VcmlGcm9tUXVlcnl9XG4gICAgLz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBZG1pbkdhdGVOYXZpZ2F0ZSAobG9jYXRpb24sIGZsYWcpIHtcbiAgY29uc3QgYmxvY2tlZFBhdGggPSBgJHtsb2NhdGlvbi5wYXRobmFtZSB8fCAnJ30ke2xvY2F0aW9uLnNlYXJjaCB8fCAnJ31gO1xuICBjb25zdCBxcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgcXMuc2V0KCdibG9ja2VkRmxhZycsIFN0cmluZyhmbGFnIHx8ICcnKSk7XG4gIHFzLnNldCgnYmxvY2tlZFBhdGgnLCBibG9ja2VkUGF0aCB8fCAnLycpO1xuICByZXR1cm4ge1xuICAgIHRvOiB7XG4gICAgICBwYXRobmFtZTogJy9zZXR0aW5ncy9hZG1pbicsXG4gICAgICBzZWFyY2g6IGA/JHtxcy50b1N0cmluZygpfWBcbiAgICB9LFxuICAgIHN0YXRlOiB7XG4gICAgICBmZWF0dXJlRmxhZ0Jsb2NrZWQ6IGZsYWcsXG4gICAgICBibG9ja2VkUGF0aFxuICAgIH1cbiAgfTtcbn1cblxuLyoqIExlZ2FjeSBzaW5ndWxhciBgL2RvY3VtZW50Ly4uLmAg4oaSIHBsdXJhbCBjYW5vbmljYWwgYC9kb2N1bWVudHMvLi4uYC4gKi9cbmZ1bmN0aW9uIE5hdmlnYXRlRG9jdW1lbnRzRGV0YWlsQWxpYXMgKCkge1xuICBjb25zdCB7IGlkIH0gPSB1c2VQYXJhbXMoKTtcbiAgY29uc3QgcmF3ID0gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkudHJpbSgpIDogJyc7XG4gIGlmICghcmF3KSByZXR1cm4gPE5hdmlnYXRlIHRvPVwiL2RvY3VtZW50c1wiIHJlcGxhY2UgLz47XG4gIHJldHVybiA8TmF2aWdhdGUgdG89e2AvZG9jdW1lbnRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJhdyl9YH0gcmVwbGFjZSAvPjtcbn1cblxuLyoqIExlZ2FjeSBzaW5ndWxhciBgL3BlZXIvLi4uYCDihpIgcGx1cmFsIGNhbm9uaWNhbCBgL3BlZXJzLy4uLmAuICovXG5mdW5jdGlvbiBOYXZpZ2F0ZVBlZXJEZXRhaWxBbGlhcyAoKSB7XG4gIGNvbnN0IGYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgY29uc3QgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBpZiAoIWYucGVlcnMpIHtcbiAgICBjb25zdCBibG9ja2VkID0gYnVpbGRBZG1pbkdhdGVOYXZpZ2F0ZShsb2NhdGlvbiwgJ3BlZXJzJyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxOYXZpZ2F0ZVxuICAgICAgICB0bz17YmxvY2tlZC50b31cbiAgICAgICAgcmVwbGFjZVxuICAgICAgICBzdGF0ZT17YmxvY2tlZC5zdGF0ZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICBjb25zdCB7IGlkIH0gPSB1c2VQYXJhbXMoKTtcbiAgY29uc3QgcmF3ID0gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkudHJpbSgpIDogJyc7XG4gIGlmICghcmF3KSByZXR1cm4gPE5hdmlnYXRlIHRvPVwiL3BlZXJzXCIgcmVwbGFjZSAvPjtcbiAgcmV0dXJuIDxOYXZpZ2F0ZSB0bz17YC9wZWVycy8ke2VuY29kZVVSSUNvbXBvbmVudChyYXcpfWB9IHJlcGxhY2UgLz47XG59XG5cbmZ1bmN0aW9uIE5hdmlnYXRlUGVlclJvb3RBbGlhcyAoKSB7XG4gIGNvbnN0IGYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgY29uc3QgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBpZiAoIWYucGVlcnMpIHtcbiAgICBjb25zdCBibG9ja2VkID0gYnVpbGRBZG1pbkdhdGVOYXZpZ2F0ZShsb2NhdGlvbiwgJ3BlZXJzJyk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxOYXZpZ2F0ZVxuICAgICAgICB0bz17YmxvY2tlZC50b31cbiAgICAgICAgcmVwbGFjZVxuICAgICAgICBzdGF0ZT17YmxvY2tlZC5zdGF0ZX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gPE5hdmlnYXRlIHRvPVwiL3BlZXJzXCIgcmVwbGFjZSAvPjtcbn1cblxuZnVuY3Rpb24gTmF2aWdhdGVBY3Rpdml0eVRvQWN0aXZpdGllcyAoKSB7XG4gIGNvbnN0IGYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgY29uc3QgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBpZiAoIWYuYWN0aXZpdGllcykge1xuICAgIGNvbnN0IGJsb2NrZWQgPSBidWlsZEFkbWluR2F0ZU5hdmlnYXRlKGxvY2F0aW9uLCAnYWN0aXZpdGllcycpO1xuICAgIHJldHVybiAoXG4gICAgICA8TmF2aWdhdGVcbiAgICAgICAgdG89e2Jsb2NrZWQudG99XG4gICAgICAgIHJlcGxhY2VcbiAgICAgICAgc3RhdGU9e2Jsb2NrZWQuc3RhdGV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIDxOYXZpZ2F0ZSB0bz1cIi9hY3Rpdml0aWVzXCIgcmVwbGFjZSAvPjtcbn1cblxuZnVuY3Rpb24gVWlGbGFnUm91dGUgKHsgZmxhZywgY2hpbGRyZW4gfSkge1xuICBjb25zdCBmID0gbG9hZEh1YlVpRmVhdHVyZUZsYWdzKCk7XG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgaWYgKCFmW2ZsYWddKSB7XG4gICAgY29uc3QgYmxvY2tlZCA9IGJ1aWxkQWRtaW5HYXRlTmF2aWdhdGUobG9jYXRpb24sIGZsYWcpO1xuICAgIHJldHVybiAoXG4gICAgICA8TmF2aWdhdGVcbiAgICAgICAgdG89e2Jsb2NrZWQudG99XG4gICAgICAgIHJlcGxhY2VcbiAgICAgICAgc3RhdGU9e2Jsb2NrZWQuc3RhdGV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG4vKiogUGVlcnMgcm91dGVzOiBVSSBmZWF0dXJlIGZsYWcgb25seSAobm8gaHViIGFkbWluIHRva2VuIHJlcXVpcmVkKS4gKi9cbmZ1bmN0aW9uIFBlZXJzRmVhdHVyZVJvdXRlICh7IGNoaWxkcmVuIH0pIHtcbiAgY29uc3QgZiA9IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGlmICghZi5wZWVycykge1xuICAgIGNvbnN0IGJsb2NrZWQgPSBidWlsZEFkbWluR2F0ZU5hdmlnYXRlKGxvY2F0aW9uLCAncGVlcnMnKTtcbiAgICByZXR1cm4gKFxuICAgICAgPE5hdmlnYXRlXG4gICAgICAgIHRvPXtibG9ja2VkLnRvfVxuICAgICAgICByZXBsYWNlXG4gICAgICAgIHN0YXRlPXtibG9ja2VkLnN0YXRlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuLyoqIExlZ2FjeSBgL3R4Ly4uLmAgYm9va21hcmsg4oaSIGNhbm9uaWNhbCBCaXRjb2luIHRyYW5zYWN0aW9uIHZpZXcuICovXG5mdW5jdGlvbiBOYXZpZ2F0ZUxlZ2FjeUJpdGNvaW5UeEFsaWFzICgpIHtcbiAgY29uc3QgZiA9IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGlmICghZi5iaXRjb2luRXhwbG9yZXIpIHtcbiAgICBjb25zdCBibG9ja2VkID0gYnVpbGRBZG1pbkdhdGVOYXZpZ2F0ZShsb2NhdGlvbiwgJ2JpdGNvaW5FeHBsb3JlcicpO1xuICAgIHJldHVybiAoXG4gICAgICA8TmF2aWdhdGVcbiAgICAgICAgdG89e2Jsb2NrZWQudG99XG4gICAgICAgIHJlcGxhY2VcbiAgICAgICAgc3RhdGU9e2Jsb2NrZWQuc3RhdGV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgY29uc3QgeyB0eGhhc2ggfSA9IHVzZVBhcmFtcygpO1xuICBjb25zdCByYXcgPSB0eGhhc2ggIT0gbnVsbCA/IFN0cmluZyh0eGhhc2gpLnRyaW0oKSA6ICcnO1xuICBpZiAoIXJhdykgcmV0dXJuIDxOYXZpZ2F0ZSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgcmVwbGFjZSAvPjtcbiAgcmV0dXJuIDxOYXZpZ2F0ZSB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChyYXcpfWB9IHJlcGxhY2UgLz47XG59XG5cbi8qKiBMZWdhY3kgYC9ibG9jay8uLi5gIGJvb2ttYXJrIOKGkiBjYW5vbmljYWwgQml0Y29pbiBibG9jayB2aWV3LiAqL1xuZnVuY3Rpb24gTmF2aWdhdGVMZWdhY3lCaXRjb2luQmxvY2tBbGlhcyAoKSB7XG4gIGNvbnN0IGYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgY29uc3QgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBpZiAoIWYuYml0Y29pbkV4cGxvcmVyKSB7XG4gICAgY29uc3QgYmxvY2tlZCA9IGJ1aWxkQWRtaW5HYXRlTmF2aWdhdGUobG9jYXRpb24sICdiaXRjb2luRXhwbG9yZXInKTtcbiAgICByZXR1cm4gKFxuICAgICAgPE5hdmlnYXRlXG4gICAgICAgIHRvPXtibG9ja2VkLnRvfVxuICAgICAgICByZXBsYWNlXG4gICAgICAgIHN0YXRlPXtibG9ja2VkLnN0YXRlfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIGNvbnN0IHsgYmxvY2toYXNoIH0gPSB1c2VQYXJhbXMoKTtcbiAgY29uc3QgcmF3ID0gYmxvY2toYXNoICE9IG51bGwgPyBTdHJpbmcoYmxvY2toYXNoKS50cmltKCkgOiAnJztcbiAgaWYgKCFyYXcpIHtcbiAgICByZXR1cm4gPE5hdmlnYXRlIHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vYmxvY2tzXCIgcmVwbGFjZSAvPjtcbiAgfVxuICByZXR1cm4gPE5hdmlnYXRlIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vYmxvY2tzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJhdyl9YH0gcmVwbGFjZSAvPjtcbn1cblxuZnVuY3Rpb24gVW5rbm93blJvdXRlU2hlbGwgKCkge1xuICBjb25zdCB7IHBhdGhuYW1lLCBzZWFyY2ggfSA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IGZ1bGwgPSBgJHtwYXRobmFtZSB8fCAnJ30ke3NlYXJjaCB8fCAnJ31gIHx8ICcvJztcbiAgY29uc3QgW2h1YlVpVGljaywgc2V0SHViVWlUaWNrXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4gc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MoKCkgPT4gc2V0SHViVWlUaWNrKCh0KSA9PiB0ICsgMSkpLCBbXSk7XG4gIHZvaWQgaHViVWlUaWNrO1xuICBjb25zdCB1ZiA9IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuICByZXR1cm4gKFxuICAgIDxTZWdtZW50IHN0eWxlPXt7IG1hcmdpblRvcDogJzJlbScgfX0+XG4gICAgICA8SGVhZGVyIGFzPVwiaDNcIj5QYWdlIG5vdCBmb3VuZDwvSGVhZGVyPlxuICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC43NWVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgTm8gaHViIFVJIGZvcnsnICd9XG4gICAgICAgIDxjb2RlIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e2Z1bGx9PC9jb2RlPlxuICAgICAgICAuXG4gICAgICA8L3A+XG4gICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjVlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgIFVzZSB0aGUgPHN0cm9uZz50b3AgbmF2aWdhdGlvbjwvc3Ryb25nPiAoSG9tZSwgRG9jdW1lbnRzLCBDb250cmFjdHMsIGFuZCA8c3Ryb25nPk1vcmU8L3N0cm9uZz4pIOKAlCBpdCBsaXN0cyB0aGUgc2FtZSBwbGFjZXMgd2l0aG91dCBkdXBsaWNhdGluZyB0aGVtIGhlcmUuXG4gICAgICAgIHt1Zi5hY3Rpdml0aWVzID8gJyBUaGUgYmVsbCBvcGVucyBOb3RpZmljYXRpb25zICh0b2FzdHMpOyB0aGUgYWN0aXZpdHkgbG9nIGlzIHVuZGVyIE1vcmUg4oaSIEFjdGl2aXR5IGxvZy4nIDogJyd9XG4gICAgICA8L3A+XG4gICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICA8TGluayB0bz1cIi9cIj5HbyB0byBIb21lPC9MaW5rPlxuICAgICAgICB7JyDCtyAnfVxuICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5nc1wiPlNldHRpbmdzPC9MaW5rPlxuICAgICAgICB7KHVmLmJpdGNvaW5QYXltZW50cyB8fCB1Zi5iaXRjb2luTGlnaHRuaW5nKSA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgeycgwrcgJ31cbiAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgIHRvPXt7XG4gICAgICAgICAgICAgICAgcGF0aG5hbWU6ICcvc2VydmljZXMvYml0Y29pbicsXG4gICAgICAgICAgICAgICAgaGFzaDogdWYuYml0Y29pblBheW1lbnRzID8gJ2ZhYnJpYy1iaXRjb2luLXBheWpvaW4nIDogJ2ZhYnJpYy1iaXRjb2luLWxpZ2h0bmluZydcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgVHJlYXN1cnkgKFBheWpvaW4gLyBMaWdodG5pbmcpXG4gICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7dWYuc2lkZWNoYWluID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgICAgPExpbmsgdG89XCIvc2lkZWNoYWluc1wiPlN0YXRlY2hhaW48L0xpbms+XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9wPlxuICAgIDwvU2VnbWVudD5cbiAgKTtcbn1cblxuLyoqIEhUTUwgc2hlbGw6IGAvc2VydmljZXMvcGF5am9pbmAgU1BBIOKGkiBjYW5vbmljYWwgYC9wYXltZW50c2AgUGF5am9pbiBzdXJmYWNlOyBKU09OIHN0aWxsIG9uIFJFU1QgcGF5am9pbiBiYXNlcy4gKi9cbmZ1bmN0aW9uIE5hdmlnYXRlUGF5am9pblNwYUFsaWFzICgpIHtcbiAgY29uc3QgdWYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgaWYgKHVmLmJpdGNvaW5QYXltZW50cykge1xuICAgIHJldHVybiA8TmF2aWdhdGUgdG89e3sgcGF0aG5hbWU6ICcvcGF5bWVudHMnLCBoYXNoOiAnd2VhbHRoLXBheWpvaW4tYm9hcmQnIH19IHJlcGxhY2UgLz47XG4gIH1cbiAgcmV0dXJuIDxOYXZpZ2F0ZSB0bz17eyBwYXRobmFtZTogJy9zZXJ2aWNlcy9iaXRjb2luJywgaGFzaDogJ2ZhYnJpYy1iaXRjb2luLXBheWpvaW4nIH19IHJlcGxhY2UgLz47XG59XG5cbmNvbnN0IEJpdGNvaW5SZXNvdXJjZXNIb21lID0gcmVxdWlyZSgnLi9CaXRjb2luUmVzb3VyY2VzSG9tZScpO1xuY29uc3QgQml0Y29pblRyYW5zYWN0aW9uVmlldyA9IHJlcXVpcmUoJy4vQml0Y29pblRyYW5zYWN0aW9uVmlldycpO1xuY29uc3QgQ2hhbm5lbFZpZXcgPSByZXF1aXJlKCcuL0NoYW5uZWxWaWV3Jyk7XG5jb25zdCBJbnZvaWNlTGlzdEhvbWUgPSByZXF1aXJlKCcuL0ludm9pY2VMaXN0SG9tZScpO1xuXG5mdW5jdGlvbiBJbnZvaWNlTGlzdEhvbWVSb3V0ZSAocHJvcHMpIHtcbiAgcmV0dXJuIDxJbnZvaWNlTGlzdEhvbWUgey4uLnByb3BzfSAvPjtcbn1cblxuY29uc3QgQm90dG9tUGFuZWwgPSByZXF1aXJlKCcuL0JvdHRvbVBhbmVsJyk7XG5jb25zdCBDb250cmFjdHNIb21lID0gcmVxdWlyZSgnLi9Db250cmFjdHNIb21lJyk7XG5jb25zdCBDb250cmFjdFZpZXcgPSByZXF1aXJlKCcuL0NvbnRyYWN0VmlldycpO1xuY29uc3QgRG9jdW1lbnRMaXN0ID0gcmVxdWlyZSgnLi9Eb2N1bWVudExpc3QnKTtcbmNvbnN0IERvY3VtZW50VmlldyA9IHJlcXVpcmUoJy4vRG9jdW1lbnRWaWV3Jyk7XG5jb25zdCBIb21lID0gcmVxdWlyZSgnLi9Ib21lJyk7XG5jb25zdCBBY3Rpdml0aWVzSG9tZSA9IHJlcXVpcmUoJy4vQWN0aXZpdGllc0hvbWUnKTtcbmNvbnN0IE5vdGlmaWNhdGlvbnNIb21lID0gcmVxdWlyZSgnLi9Ob3RpZmljYXRpb25zSG9tZScpO1xuY29uc3QgSWRlbnRpdHlNYW5hZ2VyID0gcmVxdWlyZSgnLi9JZGVudGl0eU1hbmFnZXInKTtcbmNvbnN0IEZhYnJpY0lkZW50aXR5QWNjb3VudENvbnRyb2xzID0gcmVxdWlyZSgnLi9mYWJyaWNJZGVudGl0eS9GYWJyaWNJZGVudGl0eUFjY291bnRDb250cm9scycpO1xuY29uc3QgRmFicmljUG9zdFNldHVwSWRlbnRpdHlXaXphcmQgPSByZXF1aXJlKCcuL2ZhYnJpY0lkZW50aXR5L0ZhYnJpY1Bvc3RTZXR1cElkZW50aXR5V2l6YXJkJyk7XG5jb25zdCBQZWVyTGlzdCA9IHJlcXVpcmUoJy4vUGVlckxpc3QnKTtcbmNvbnN0IFBlZXJWaWV3ID0gcmVxdWlyZSgnLi9QZWVyVmlldycpO1xuY29uc3QgVG9wUGFuZWwgPSByZXF1aXJlKCcuL1RvcFBhbmVsJyk7XG5jb25zdCBIdWJBbGVydFN0YWNrID0gcmVxdWlyZSgnLi9IdWJBbGVydFN0YWNrJyk7XG5cbi8qKiBBbGVydCBkaXNtaXNzIFBVVCB1c2VzIGFkbWluIHRva2VuIG9ubHkgb24gYWRtaW4gc2V0dGluZ3Mgcm91dGVzIChub3Qgb24gZ2VuZXJhbCBwYWdlcykuICovXG5mdW5jdGlvbiBIdWJBbGVydFN0YWNrTG9jYXRpb25HYXRlICh7IGFkbWluVG9rZW4gfSkge1xuICBjb25zdCBsb2MgPSB1c2VMb2NhdGlvbigpO1xuICBjb25zdCBvbkFkbWluID0gU3RyaW5nKGxvYy5wYXRobmFtZSB8fCAnJykuc3RhcnRzV2l0aCgnL3NldHRpbmdzL2FkbWluJyk7XG4gIGNvbnN0IHRva2VuID0gKG9uQWRtaW4gJiYgYWRtaW5Ub2tlbiAmJiBTdHJpbmcoYWRtaW5Ub2tlbikudHJpbSgpKSB8fCAnJztcbiAgcmV0dXJuIDxIdWJBbGVydFN0YWNrIGFkbWluVG9rZW49e3Rva2VuIHx8IHVuZGVmaW5lZH0gLz47XG59XG5cbmNvbnN0IHtcbiAgZ2V0U3BlbmRXYWxsZXRDb250ZXh0LFxuICBmZXRjaFdhbGxldFN1bW1hcnlXaXRoQ2FjaGUsXG4gIGxvYWRVcHN0cmVhbVNldHRpbmdzLFxuICBzYXZlU3BlbmRYcHViV2F0Y2hGb3JJZGVudGl0eSxcbiAgY2xlYXJTcGVuZFhwdWJXYXRjaFxufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9iaXRjb2luQ2xpZW50Jyk7XG5jb25zdCB7IFRvYXN0Q29udGFpbmVyLCB0b2FzdDogdG9hc3RpZnksIFNsaWRlIH0gPSByZXF1aXJlKCdyZWFjdC10b2FzdGlmeScpO1xuY29uc3QgeyB0b2FzdCB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3RvYXN0Jyk7XG5jb25zdCBTZWN1cml0eUhvbWUgPSByZXF1aXJlKCcuL1NlY3VyaXR5SG9tZScpO1xuY29uc3QgU2VjdXJpdHlTZXNzaW9uSG9tZSA9IHJlcXVpcmUoJy4vU2VjdXJpdHlTZXNzaW9uSG9tZScpO1xuY29uc3QgU2V0dGluZ3NIb21lID0gcmVxdWlyZSgnLi9TZXR0aW5nc0hvbWUnKTtcbmNvbnN0IENvbGxhYm9yYXRpb25Ib21lID0gcmVxdWlyZSgnLi9Db2xsYWJvcmF0aW9uSG9tZScpO1xuY29uc3QgeyByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViQWRtaW5Ub2tlbkJyb3dzZXInKTtcbmNvbnN0IFNldHRpbmdzRmVkZXJhdGlvbkhvbWUgPSByZXF1aXJlKCcuL1NldHRpbmdzRmVkZXJhdGlvbkhvbWUnKTtcbmNvbnN0IEZlZGVyYXRpb25zSG9tZSA9IHJlcXVpcmUoJy4vRmVkZXJhdGlvbnNIb21lJyk7XG5jb25zdCBGZWRlcmF0aW9uSW52aXRlTm90aWZpY2F0aW9uQmFubmVyID0gcmVxdWlyZSgnLi9GZWRlcmF0aW9uSW52aXRlTm90aWZpY2F0aW9uQmFubmVyJyk7XG5jb25zdCBQdWJsaWNWaXNpdG9yR2F0ZSA9IHJlcXVpcmUoJy4vUHVibGljVmlzaXRvckdhdGUnKTtcbmNvbnN0IHsgY29tcHV0ZVB1YmxpY0h1YlZpc2l0b3IgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJQdWJsaWNWaXNpdG9yJyk7XG5jb25zdCBTZXR0aW5nc0JpdGNvaW5XYWxsZXQgPSByZXF1aXJlKCcuL1NldHRpbmdzQml0Y29pbldhbGxldCcpO1xuY29uc3QgRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlTW9kYWwgPSByZXF1aXJlKCcuL0ZlZGVyYXRpb25Db250cmFjdEludml0ZU1vZGFsJyk7XG5jb25zdCBDb2xsYWJvcmF0aW9uSW52aXRlTW9kYWwgPSByZXF1aXJlKCcuL0NvbGxhYm9yYXRpb25JbnZpdGVNb2RhbCcpO1xuY29uc3QgRmVhdHVyZXNQYWdlID0gcmVxdWlyZSgnLi9GZWF0dXJlc1BhZ2UnKTtcbmNvbnN0IFNpZGVjaGFpbkhvbWUgPSByZXF1aXJlKCcuL1NpZGVjaGFpbkhvbWUnKTtcbmNvbnN0IERlbGVnYXRpb25TaWduaW5nTW9kYWwgPSByZXF1aXJlKCcuL0RlbGVnYXRpb25TaWduaW5nTW9kYWwnKTtcbmNvbnN0IEFkbWluSG9tZSA9IHJlcXVpcmUoJy4vQWRtaW5Ib21lJyk7XG5jb25zdCBCZWFjb25GZWRlcmF0aW9uSG9tZSA9IHJlcXVpcmUoJy4vQmVhY29uRmVkZXJhdGlvbkhvbWUnKTtcblxuLyoqXG4gKiBXYWxsZXQtc2FmZSBCaXRjb2luIHNuYXBzaG90IGZyb20gR2V0TmV0d29ya1N0YXR1cyAvIHB1c2hOZXR3b3JrU3RhdHVzLlxuICogVGhlIGh1YiBwdXRzIGl0IG9uIHRoZSB0b3AtbGV2ZWwgYGJpdGNvaW5gIGtleTsgYSBjb3B5IG1heSBhbHNvIGV4aXN0IHVuZGVyIGBzdGF0ZS5zZXJ2aWNlcy5iaXRjb2luYC5cbiAqIEBwYXJhbSB7b2JqZWN0fG51bGx8dW5kZWZpbmVkfSBuZXR3b3JrU3RhdHVzXG4gKiBAcmV0dXJucyB7b2JqZWN0fG51bGx9XG4gKi9cbmZ1bmN0aW9uIHdyYXBQdWJsaWNWaXNpdG9yR2F0ZSAoaXNWaXNpdG9yLCBvbk9wZW5JZGVudGl0eSwgY2hpbGQpIHtcbiAgaWYgKCFpc1Zpc2l0b3IpIHJldHVybiBjaGlsZDtcbiAgcmV0dXJuIChcbiAgICA8UHVibGljVmlzaXRvckdhdGUgYWN0aXZlIG9uT3BlbklkZW50aXR5PXtvbk9wZW5JZGVudGl0eX0+XG4gICAgICB7Y2hpbGR9XG4gICAgPC9QdWJsaWNWaXNpdG9yR2F0ZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUJpdGNvaW5Gcm9tTmV0d29ya1N0YXR1cyAobmV0d29ya1N0YXR1cykge1xuICBpZiAoIW5ldHdvcmtTdGF0dXMgfHwgdHlwZW9mIG5ldHdvcmtTdGF0dXMgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgdG9wID0gbmV0d29ya1N0YXR1cy5iaXRjb2luO1xuICBpZiAodG9wICYmIHR5cGVvZiB0b3AgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHRvcCkpIHtcbiAgICByZXR1cm4gdG9wO1xuICB9XG4gIGNvbnN0IHN2YyA9IG5ldHdvcmtTdGF0dXMuc3RhdGUgJiYgbmV0d29ya1N0YXR1cy5zdGF0ZS5zZXJ2aWNlcyAmJiBuZXR3b3JrU3RhdHVzLnN0YXRlLnNlcnZpY2VzLmJpdGNvaW47XG4gIGlmICghc3ZjIHx8IHR5cGVvZiBzdmMgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgaWYgKHN2Yy5zdGF0dXMgJiYgdHlwZW9mIHN2Yy5zdGF0dXMgPT09ICdvYmplY3QnKSByZXR1cm4gc3ZjLnN0YXR1cztcbiAgcmV0dXJuIHN2Yztcbn1cblxuLy8gU2VtYW50aWMgVUlcbmNvbnN0IHtcbiAgTW9kYWwsXG4gIEJ1dHRvbixcbiAgQ2hlY2tib3gsXG4gIEZvcm0sXG4gIEhlYWRlcixcbiAgSWNvbixcbiAgSW5wdXQsXG4gIExvYWRlcixcbiAgTWVzc2FnZSxcbiAgU2VnbWVudFxufSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5cbmZ1bmN0aW9uIEJpdGNvaW5Ib21lV2l0aE5hdiAocHJvcHMpIHtcbiAgY29uc3QgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcmF3ID0gbG9jYXRpb24uaGFzaCB8fCAnJztcbiAgICBjb25zdCBoYXNoVGFyZ2V0ID0gcmF3LnN0YXJ0c1dpdGgoJyMnKSA/IHJhdy5zbGljZSgxKSA6IHJhdztcbiAgICBjb25zdCByb3V0ZVRhcmdldCA9IHByb3BzICYmIHR5cGVvZiBwcm9wcy50YXJnZXRIYXNoID09PSAnc3RyaW5nJyA/IHByb3BzLnRhcmdldEhhc2gudHJpbSgpIDogJyc7XG4gICAgY29uc3QgaCA9IGhhc2hUYXJnZXQgfHwgcm91dGVUYXJnZXQ7XG4gICAgaWYgKCFoKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoKTtcbiAgICBpZiAoZWwgJiYgdHlwZW9mIGVsLnNjcm9sbEludG9WaWV3ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ3N0YXJ0JywgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbbG9jYXRpb24ucGF0aG5hbWUsIGxvY2F0aW9uLmhhc2gsIHByb3BzICYmIHByb3BzLnRhcmdldEhhc2hdKTtcbiAgcmV0dXJuIDxCaXRjb2luSG9tZSB7Li4ucHJvcHN9IG5hdmlnYXRlPXtuYXZpZ2F0ZX0gLz47XG59XG5cbmNvbnN0IENyb3dkZnVuZGluZ0hvbWUgPSByZXF1aXJlKCcuL0Nyb3dkZnVuZGluZ0hvbWUnKTtcblxuZnVuY3Rpb24gQ3Jvd2RmdW5kaW5nSG9tZVdpdGhOYXYgKHByb3BzKSB7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHJhdyA9IGxvY2F0aW9uLmhhc2ggfHwgJyc7XG4gICAgY29uc3QgaCA9IHJhdy5zdGFydHNXaXRoKCcjJykgPyByYXcuc2xpY2UoMSkgOiByYXc7XG4gICAgaWYgKCFoKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoKTtcbiAgICBpZiAoZWwgJiYgdHlwZW9mIGVsLnNjcm9sbEludG9WaWV3ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ3N0YXJ0JywgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbbG9jYXRpb24ucGF0aG5hbWUsIGxvY2F0aW9uLmhhc2hdKTtcbiAgcmV0dXJuIDxDcm93ZGZ1bmRpbmdIb21lIHsuLi5wcm9wc30gbmF2aWdhdGU9e25hdmlnYXRlfSAvPjtcbn1cblxuLyoqXG4gKiBMb2dpbiB3YWxsOiBzaG93biB3aGVuIHVzZXIgdHJpZXMgdG8gYWNjZXNzIGEgZ2F0ZWQgcm91dGUgd2l0aG91dCBhIGxvY2FsIGlkZW50aXR5LlxuICovXG5mdW5jdGlvbiBMb2dpbkdhdGUgKHByb3BzKSB7XG4gIGNvbnN0IG9uTG9naW4gPSBwcm9wcyAmJiB0eXBlb2YgcHJvcHMub25Mb2dpbiA9PT0gJ2Z1bmN0aW9uJyA/IHByb3BzLm9uTG9naW4gOiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxTZWdtZW50IHBsYWNlaG9sZGVyIHN0eWxlPXt7IG1hcmdpblRvcDogJzJlbScsIHRleHRBbGlnbjogJ2NlbnRlcicgfX0+XG4gICAgICA8SGVhZGVyIGljb24+XG4gICAgICAgIDxJY29uIG5hbWU9XCJsb2NrXCIgLz5cbiAgICAgICAgTG9nIGluIHJlcXVpcmVkXG4gICAgICA8L0hlYWRlcj5cbiAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1heFdpZHRoOiAnMzJyZW0nLCBtYXJnaW46ICcwIGF1dG8gMC43NWVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgQ3JlYXRlIG9yIHJlc3RvcmUgYSBsb2NhbCBGYWJyaWMgaWRlbnRpdHkgdG8gYWNjZXNzIHRoaXMgZmVhdHVyZSAoZW5jcnlwdCBkb2N1bWVudHMsIHNpZ24gcHVibGlzaGVzLCBhbmQgdXNlIHRoZSBicm93c2VyIEJpdGNvaW4gYWNjb3VudCB0aWVkIHRvIHlvdXIga2V5cykuXG4gICAgICA8L3A+XG4gICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXhXaWR0aDogJzMycmVtJywgbWFyZ2luOiAnMCBhdXRvIDFlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgIFVzZSA8c3Ryb25nPkxvZyBpbjwvc3Ryb25nPiBiZWxvdywgdGhlIHRvcC1iYXIgaWRlbnRpdHkgbWVudSwgb3Igb3BlbnsnICd9XG4gICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzXCI+U2V0dGluZ3M8L0xpbms+IOKGkiA8c3Ryb25nPkZhYnJpYyBpZGVudGl0eTwvc3Ryb25nPiBmb3IgdGhlIHNhbWUgdW5sb2NrL2ltcG9ydCBmbG93LnsnICd9XG4gICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzL2JpdGNvaW4td2FsbGV0XCI+Qml0Y29pbiB3YWxsZXQgJmFtcDsgZGVyaXZhdGlvbjwvTGluaz4gZXhwbGFpbnMgb24tY2hhaW4gYWRkcmVzc2VzIGZvciB0aGlzIGlkZW50aXR5LlxuICAgICAgPC9wPlxuICAgICAgPEJ1dHRvbiBwcmltYXJ5IG9uQ2xpY2s9eygpID0+IG9uTG9naW4gJiYgb25Mb2dpbigpfT5cbiAgICAgICAgPEljb24gbmFtZT1cInVzZXIgY2lyY2xlXCIgLz5cbiAgICAgICAgTG9nIGluXG4gICAgICA8L0J1dHRvbj5cbiAgICA8L1NlZ21lbnQ+XG4gICk7XG59XG5cbi8qKlxuICogVGhlIEh1YiBVSS5cbiAqL1xuY2xhc3MgSHViSW50ZXJmYWNlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgbGV0IGluaXRpYWxIdWJBZGRyZXNzID0gJyc7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpbml0aWFsSHViQWRkcmVzcyA9IHJlYWRTdG9yYWdlU3RyaW5nKCdmYWJyaWMuaHViLmFkZHJlc3MnKSB8fCAnJztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIGlmICghaW5pdGlhbEh1YkFkZHJlc3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubG9jYXRpb24pIHtcbiAgICAgICAgICBjb25zdCBob3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuICAgICAgICAgIGNvbnN0IHBvcnQgPSB3aW5kb3cubG9jYXRpb24ucG9ydCB8fCAod2luZG93LmxvY2F0aW9uLnByb3RvY29sID09PSAnaHR0cHM6JyA/ICc0NDMnIDogJzgwJyk7XG4gICAgICAgICAgaW5pdGlhbEh1YkFkZHJlc3MgPSBgJHtob3N0fToke3BvcnR9YDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICBsZXQgaW5pdGlhbEFkbWluVG9rZW4gPSBudWxsO1xuICAgIGxldCBpbml0aWFsQWRtaW5Ub2tlbkV4cGlyZXNBdCA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpbml0aWFsQWRtaW5Ub2tlbiA9IHJlYWRTdG9yYWdlU3RyaW5nKCdmYWJyaWMuaHViLmFkbWluVG9rZW4nKSB8fCBudWxsO1xuICAgICAgICBjb25zdCByYXcgPSByZWFkU3RvcmFnZVN0cmluZygnZmFicmljLmh1Yi5hZG1pblRva2VuRXhwaXJlc0F0Jyk7XG4gICAgICAgIGlmIChyYXcpIGluaXRpYWxBZG1pblRva2VuRXhwaXJlc0F0ID0gTnVtYmVyKHJhdykgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgbGV0IGluaXRpYWxMb2NhbElkZW50aXR5ID0gbnVsbDtcbiAgICBsZXQgaW5pdGlhbEhhc0xvY2tlZElkZW50aXR5ID0gZmFsc2U7XG4gICAgbGV0IGluaXRpYWxQb3N0U2V0dXBJZGVudGl0eVdpemFyZE9wZW4gPSBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhcHBseUZhYnJpY0RldkJyb3dzZXJTZWVkQm9vdHN0cmFwKCk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHJlYWRTdG9yYWdlSlNPTignZmFicmljLmlkZW50aXR5LmxvY2FsJywgbnVsbCk7XG4gICAgICAgIGlmIChwYXJzZWQgJiYgKHBhcnNlZC5pZCB8fCBwYXJzZWQueHB1YikpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYmwgPSBidWlsZExvY2FsRmFicmljSWRlbnRpdHlQYXlsb2FkKHBhcnNlZCk7XG4gICAgICAgICAgICBpZiAoYmwucmVzb2x2ZWQgJiYgYmwucmVjb3JkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHIgPSBibC5yZWNvcmQ7XG4gICAgICAgICAgICAgIGluaXRpYWxMb2NhbElkZW50aXR5ID0ge1xuICAgICAgICAgICAgICAgIGlkOiByLmlkLFxuICAgICAgICAgICAgICAgIHhwdWI6IHIueHB1YixcbiAgICAgICAgICAgICAgICB4cHJ2OiBudWxsLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiAhIXIucGFzc3dvcmRQcm90ZWN0ZWQsXG4gICAgICAgICAgICAgICAgcGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlOiAhIXIucGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlLFxuICAgICAgICAgICAgICAgIGZhYnJpY0lkZW50aXR5TW9kZTogci5mYWJyaWNJZGVudGl0eU1vZGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGZhYnJpY0hkUm9sZTogci5mYWJyaWNIZFJvbGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGZhYnJpY0FjY291bnRJbmRleDpcbiAgICAgICAgICAgICAgICAgIHIuZmFicmljQWNjb3VudEluZGV4ICE9IG51bGwgPyBNYXRoLmZsb29yKE51bWJlcihyLmZhYnJpY0FjY291bnRJbmRleCkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG1hc3RlclhwdWI6IHIubWFzdGVyWHB1YiB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbGlua2VkRnJvbURlc2t0b3A6ICEhcGFyc2VkLmxpbmtlZEZyb21EZXNrdG9wXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGluaXRpYWxMb2NhbElkZW50aXR5ID0gbWVyZ2VVbmxvY2tlZFNlc3Npb25JbnRvSWRlbnRpdHkoaW5pdGlhbExvY2FsSWRlbnRpdHkpO1xuICAgICAgICAgICAgICBpbml0aWFsSGFzTG9ja2VkSWRlbnRpdHkgPSAhIShcbiAgICAgICAgICAgICAgICAhaW5pdGlhbExvY2FsSWRlbnRpdHkueHBydiAmJlxuICAgICAgICAgICAgICAgIChpbml0aWFsTG9jYWxJZGVudGl0eS5wYXNzd29yZFByb3RlY3RlZCB8fCBpbml0aWFsTG9jYWxJZGVudGl0eS5wbGFpbnRleHRVbmxvY2tBdmFpbGFibGUpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IGRpc21pc3NlZCA9IHJlYWRTdG9yYWdlU3RyaW5nKCdmYWJyaWMuaHViLmlkZW50aXR5V2l6YXJkRGlzbWlzc2VkJykgPT09ICcxJztcbiAgICAgICAgICBsZXQgcGVuZGluZyA9IHJlYWRTdG9yYWdlU3RyaW5nKCdmYWJyaWMuaHViLmlkZW50aXR5V2l6YXJkUGVuZGluZycpID09PSAnMSc7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgaWYgKHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmYWJyaWMuaHViLmlkZW50aXR5V2l6YXJkRGlzbWlzc2VkJykgPT09ICcxJykgZGlzbWlzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgaWYgKHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmYWJyaWMuaHViLndhbnRJZGVudGl0eVdpemFyZCcpID09PSAnMScpIHBlbmRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVTZXNzKSB7fVxuICAgICAgICAgIGluaXRpYWxQb3N0U2V0dXBJZGVudGl0eVdpemFyZE9wZW4gPSAhIShcbiAgICAgICAgICAgIHBlbmRpbmcgJiZcbiAgICAgICAgICAgICFkaXNtaXNzZWQgJiZcbiAgICAgICAgICAgICFoYXNDb21wbGV0ZWRQb3N0U2V0dXBCcm93c2VySWRlbnRpdHkocGFyc2VkKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge31cblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBkZWJ1ZzogZmFsc2UsXG4gICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgbmVlZHNTZXR1cDogZmFsc2UsXG4gICAgICBzZXR1cENoZWNrZWQ6IGZhbHNlLFxuICAgICAgYWRtaW5Ub2tlbjogaW5pdGlhbEFkbWluVG9rZW4sXG4gICAgICBhZG1pblRva2VuRXhwaXJlc0F0OiBpbml0aWFsQWRtaW5Ub2tlbkV4cGlyZXNBdCxcbiAgICAgIG1vZGFsTG9nT3V0OiBmYWxzZSxcbiAgICAgIGxvZ2dlZE91dDogZmFsc2UsXG4gICAgICB1aVNldHRpbmdzT3BlbjogZmFsc2UsXG4gICAgICB1aUh1YkFkZHJlc3M6IGluaXRpYWxIdWJBZGRyZXNzLFxuICAgICAgdWlIdWJBZGRyZXNzRHJhZnQ6IGluaXRpYWxIdWJBZGRyZXNzLFxuICAgICAgdWlBZHZhbmNlZE1vZGVEcmFmdDogISFsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKS5hZHZhbmNlZE1vZGUsXG4gICAgICB1aUh1YkFkZHJlc3NFcnJvcjogbnVsbCxcbiAgICAgIHVpSWRlbnRpdHlPcGVuOiBmYWxzZSxcbiAgICAgIHVpU2lnbk1lc3NhZ2VPcGVuOiBmYWxzZSxcbiAgICAgIHVpU2lnbk1lc3NhZ2VUZXh0OiAnJyxcbiAgICAgIHVpU2lnbk1lc3NhZ2VSZXN1bHQ6IG51bGwsXG4gICAgICB1aVNpZ25NZXNzYWdlQnVzeTogZmFsc2UsXG4gICAgICB1aVZlcmlmeU1lc3NhZ2VUZXh0OiAnJyxcbiAgICAgIHVpVmVyaWZ5U2lnbmF0dXJlOiAnJyxcbiAgICAgIHVpVmVyaWZ5UHVibGljS2V5OiAnJyxcbiAgICAgIHVpVmVyaWZ5UmVzdWx0OiBudWxsLFxuICAgICAgdWlEZXN0cm95SWRlbnRpdHlDb25maXJtT3BlbjogZmFsc2UsXG4gICAgICBjbGllbnRCYWxhbmNlOiBudWxsLFxuICAgICAgY2xpZW50QmFsYW5jZUxvYWRpbmc6IGZhbHNlLFxuICAgICAgdWlMb2NhbElkZW50aXR5OiBpbml0aWFsTG9jYWxJZGVudGl0eSxcbiAgICAgIHVpSGFzTG9ja2VkSWRlbnRpdHk6IGluaXRpYWxIYXNMb2NrZWRJZGVudGl0eSxcbiAgICAgIHdlYnJ0Y0NoYXRPbmx5OiBmYWxzZSxcbiAgICAgIGZlZGVyYXRpb25JbnZpdGVNb2RhbE9wZW46IGZhbHNlLFxuICAgICAgZmVkZXJhdGlvbkludml0ZURldGFpbDogbnVsbCxcbiAgICAgIGZlZGVyYXRpb25JbnZpdGVCYW5uZXJEZXRhaWw6IG51bGwsXG4gICAgICBjb2xsYWJvcmF0aW9uSW52aXRlTW9kYWxPcGVuOiBmYWxzZSxcbiAgICAgIGNvbGxhYm9yYXRpb25JbnZpdGVEZXRhaWw6IG51bGwsXG4gICAgICByZXF1aXJlc1NldHVwVWlTZWNyZXQ6IGZhbHNlLFxuICAgICAgc2V0dXBVaVZlcmlmaWVkOiBmYWxzZSxcbiAgICAgIHNldHVwVWlHYXRlUGFzc3dvcmQ6ICcnLFxuICAgICAgc2V0dXBTdGF0dXNUaW1lZE91dDogZmFsc2UsXG4gICAgICBzZXR1cFVpR2F0ZUVycm9yOiBudWxsLFxuICAgICAgc2V0dXBVaUdhdGVCdXN5OiBmYWxzZSxcbiAgICAgIHBvc3RTZXR1cElkZW50aXR5V2l6YXJkT3BlbjogaW5pdGlhbFBvc3RTZXR1cElkZW50aXR5V2l6YXJkT3BlblxuICAgIH07XG5cbiAgICB0aGlzLmhhbmRsZUJyaWRnZVN0YXRlVXBkYXRlID0gdGhpcy5oYW5kbGVCcmlkZ2VTdGF0ZVVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVzcG9uc2VDYXB0dXJlID0gdGhpcy5yZXNwb25zZUNhcHR1cmUuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlcXVlc3RMb2dpbiA9IHRoaXMucmVxdWVzdExvZ2luLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vcGVuSWRlbnRpdHlNYW5hZ2VyID0gdGhpcy5vcGVuSWRlbnRpdHlNYW5hZ2VyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5vcGVuSWRlbnRpdHlNb2RhbEZyb21HYXRlZEFjdGlvbiA9IHRoaXMub3BlbklkZW50aXR5TW9kYWxGcm9tR2F0ZWRBY3Rpb24uYmluZCh0aGlzKTtcbiAgICB0aGlzLl9oYW5kbGVJZGVudGl0eU1hbmFnZXJMb2NhbENoYW5nZSA9IHRoaXMuX2hhbmRsZUlkZW50aXR5TWFuYWdlckxvY2FsQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5faGFuZGxlSWRlbnRpdHlNYW5hZ2VyTG9ja1N0YXRlQ2hhbmdlID0gdGhpcy5faGFuZGxlSWRlbnRpdHlNYW5hZ2VyTG9ja1N0YXRlQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5faGFuZGxlSWRlbnRpdHlNYW5hZ2VyVW5sb2NrU3VjY2VzcyA9IHRoaXMuX2hhbmRsZUlkZW50aXR5TWFuYWdlclVubG9ja1N1Y2Nlc3MuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9oYW5kbGVJZGVudGl0eU1hbmFnZXJGb3JnZXQgPSB0aGlzLl9oYW5kbGVJZGVudGl0eU1hbmFnZXJGb3JnZXQuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9mYWJyaWNBY2NvdW50Q2hhbmdlID0gdGhpcy5fZmFicmljQWNjb3VudENoYW5nZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX29wZW5GZWRlcmF0aW9uSW52aXRlUmV2aWV3ID0gdGhpcy5fb3BlbkZlZGVyYXRpb25JbnZpdGVSZXZpZXcuYmluZCh0aGlzKTtcbiAgICB0aGlzLl9kaXNtaXNzRmVkZXJhdGlvbkludml0ZUJhbm5lciA9IHRoaXMuX2Rpc21pc3NGZWRlcmF0aW9uSW52aXRlQmFubmVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fb3BlbklkZW50aXR5TW9kYWxGb3JVc2VyID0gdGhpcy5fb3BlbklkZW50aXR5TW9kYWxGb3JVc2VyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fY2xvc2VIdWJJZGVudGl0eU1vZGFsID0gdGhpcy5fY2xvc2VIdWJJZGVudGl0eU1vZGFsLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fY2xlYXJVbmxvY2tlZFNlc3Npb25PbkNsb3NlID0gdGhpcy5fY2xlYXJVbmxvY2tlZFNlc3Npb25PbkNsb3NlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5fdmVyaWZ5U2V0dXBVaVNlY3JldCA9IHRoaXMuX3ZlcmlmeVNldHVwVWlTZWNyZXQuYmluZCh0aGlzKTtcbiAgICAvKiogQ29hbGVzY2UgcmFwaWQgQnJpZGdlIC8gcGFnZSB1bmxvY2sgcHJvbXB0cyBzbyB0aGUgaWRlbnRpdHkgbW9kYWwgZG9lcyBub3Qgc3Ryb2JlLiAqL1xuICAgIHRoaXMuX29wZW5JZGVudGl0eU1vZGFsQ29vbERvd25VbnRpbCA9IDA7XG5cbiAgICAvLyBJbnN0YW50aWF0ZSBCcmlkZ2Ugb25jZSBoZXJlXG4gICAgdGhpcy5icmlkZ2VSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcblxuICAgIHRoaXMuX3N0YXRlID0ge1xuICAgICAgYWN0b3JzOiB7fSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMuc3RhdGVcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhc3luYyBfY2hlY2tTZXR1cFN0YXR1cyAoKSB7XG4gICAgY29uc3QgYmFzZSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhdGlvblxuICAgICAgPyBgJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fWBcbiAgICAgIDogJ2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MCc7XG4gICAgY29uc3QgY29udHJvbGxlciA9IHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09ICd1bmRlZmluZWQnID8gbmV3IEFib3J0Q29udHJvbGxlcigpIDogbnVsbDtcbiAgICBjb25zdCB0aW1lb3V0TXMgPSAxNTAwMDtcbiAgICBjb25zdCB0aW1lciA9IGNvbnRyb2xsZXIgJiYgdHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbidcbiAgICAgID8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICB9IGNhdGNoIChhYm9ydEVycikge31cbiAgICAgIH0sIHRpbWVvdXRNcylcbiAgICAgIDogbnVsbDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7YmFzZX0vc2V0dGluZ3NgLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdGYWJyaWNIdWItU2V0dXAnXG4gICAgICAgIH0sXG4gICAgICAgIGNhY2hlOiAnbm8tc3RvcmUnLFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIgPyBjb250cm9sbGVyLnNpZ25hbCA6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzLm9rKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpO1xuICAgICAgICBpZiAodGV4dC50cmltKCkuc3RhcnRzV2l0aCgnPCcpKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNldHVwQ2hlY2tlZDogdHJ1ZSwgc2V0dXBTdGF0dXNUaW1lZE91dDogZmFsc2UgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICBsZXQgc2V0dXBVaVZlcmlmaWVkID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGRhdGEucmVxdWlyZXNTZXR1cFVpU2VjcmV0ICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSkge1xuICAgICAgICAgICAgc2V0dXBVaVZlcmlmaWVkID0gd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2ZhYnJpYy5odWIuc2V0dXBVaVZlcmlmaWVkJykgPT09ICcxJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVWZXIpIHt9XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIG5lZWRzU2V0dXA6ICEhZGF0YS5uZWVkc1NldHVwLFxuICAgICAgICAgIHNldHVwQ2hlY2tlZDogdHJ1ZSxcbiAgICAgICAgICBzZXR1cFN0YXR1c1RpbWVkT3V0OiBmYWxzZSxcbiAgICAgICAgICByZXF1aXJlc1NldHVwVWlTZWNyZXQ6ICEhZGF0YS5yZXF1aXJlc1NldHVwVWlTZWNyZXQsXG4gICAgICAgICAgc2V0dXBVaVZlcmlmaWVkXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNldHVwQ2hlY2tlZDogdHJ1ZSwgc2V0dXBTdGF0dXNUaW1lZE91dDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNldHVwQ2hlY2tlZDogdHJ1ZSB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRpbWVyKSBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF92ZXJpZnlTZXR1cFVpU2VjcmV0ICgpIHtcbiAgICBjb25zdCBwd2QgPSBTdHJpbmcodGhpcy5zdGF0ZS5zZXR1cFVpR2F0ZVBhc3N3b3JkIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFwd2QpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBzZXR1cFVpR2F0ZUVycm9yOiAnRW50ZXIgdGhlIHNldHVwIHNlY3JldCBmcm9tIHRoZSBvcGVyYXRvci4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXNlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uXG4gICAgICA/IGAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9YFxuICAgICAgOiAnaHR0cDovL2xvY2FsaG9zdDo4MDgwJztcbiAgICB0aGlzLnNldFN0YXRlKHsgc2V0dXBVaUdhdGVCdXN5OiB0cnVlLCBzZXR1cFVpR2F0ZUVycm9yOiBudWxsIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtiYXNlfS9zZXR0aW5ncy92ZXJpZnktc2V0dXAtdWlgLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdGYWJyaWNIdWItU2V0dXAnXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2V0dXBVaVNlY3JldDogcHdkIH0pXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpO1xuICAgICAgbGV0IGVyck1zZyA9ICdJbnZhbGlkIHNldHVwIHNlY3JldC4nO1xuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIXRleHQudHJpbSgpLnN0YXJ0c1dpdGgoJzwnKSkge1xuICAgICAgICAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICBpZiAoaiAmJiBqLm1lc3NhZ2UpIGVyck1zZyA9IFN0cmluZyhqLm1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZUopIHt9XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzZXR1cFVpR2F0ZUJ1c3k6IGZhbHNlLCBzZXR1cFVpR2F0ZUVycm9yOiBlcnJNc2cgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZmFicmljLmh1Yi5zZXR1cFVpVmVyaWZpZWQnLCAnMScpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlUykge31cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzZXR1cFVpVmVyaWZpZWQ6IHRydWUsXG4gICAgICAgIHNldHVwVWlHYXRlQnVzeTogZmFsc2UsXG4gICAgICAgIHNldHVwVWlHYXRlUGFzc3dvcmQ6ICcnLFxuICAgICAgICBzZXR1cFVpR2F0ZUVycm9yOiBudWxsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2V0dXBVaUdhdGVCdXN5OiBmYWxzZSxcbiAgICAgICAgc2V0dXBVaUdhdGVFcnJvcjogZSAmJiBlLm1lc3NhZ2UgPyBTdHJpbmcoZS5tZXNzYWdlKSA6ICdSZXF1ZXN0IGZhaWxlZC4nXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfcmVmcmVzaEFkbWluVG9rZW5JZk5lZWRlZCAoKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnN0YXRlLmFkbWluVG9rZW4gfHwgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHJlYWRTdG9yYWdlU3RyaW5nKCdmYWJyaWMuaHViLmFkbWluVG9rZW4nKSk7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuO1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IHRoaXMuc3RhdGUuYWRtaW5Ub2tlbkV4cGlyZXNBdCB8fCAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKCgpID0+IHtcbiAgICAgIGNvbnN0IHJhdyA9IHJlYWRTdG9yYWdlU3RyaW5nKCdmYWJyaWMuaHViLmFkbWluVG9rZW5FeHBpcmVzQXQnKTtcbiAgICAgIHJldHVybiByYXcgPyBOdW1iZXIocmF3KSA6IG51bGw7XG4gICAgfSkoKSk7XG4gICAgY29uc3QgdGhpcnR5RGF5c01zID0gMzAgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuICAgIGlmIChleHBpcmVzQXQgJiYgRGF0ZS5ub3coKSA8IGV4cGlyZXNBdCAtIHRoaXJ0eURheXNNcykgcmV0dXJuOyAvLyBObyByZWZyZXNoIG5lZWRlZFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uXG4gICAgICAgID8gYCR7d2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH1gXG4gICAgICAgIDogJ2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MCc7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtiYXNlfS9zZXR0aW5ncy9yZWZyZXNoYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdG9rZW4gfSlcbiAgICAgIH0pO1xuICAgICAgaWYgKCFyZXMub2spIHJldHVybjtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpO1xuICAgICAgaWYgKHRleHQudHJpbSgpLnN0YXJ0c1dpdGgoJzwnKSkgcmV0dXJuO1xuICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnRva2VuKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBhZG1pblRva2VuOiByZXN1bHQudG9rZW4sIGFkbWluVG9rZW5FeHBpcmVzQXQ6IHJlc3VsdC5leHBpcmVzQXQgfSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3cml0ZVN0b3JhZ2VTdHJpbmcoJ2ZhYnJpYy5odWIuYWRtaW5Ub2tlbicsIHJlc3VsdC50b2tlbik7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmV4cGlyZXNBdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHdyaXRlU3RvcmFnZVN0cmluZygnZmFicmljLmh1Yi5hZG1pblRva2VuRXhwaXJlc0F0JywgU3RyaW5nKHJlc3VsdC5leHBpcmVzQXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuXG4gIHJlcXVlc3RMb2dpbiAoKSB7XG4gICAgLy8gUHJlZmVyIGhvc3QtcHJvdmlkZWQgaGFuZGxlciAoYnJvd3NlciBleHRlbnNpb24gb3Igb3V0ZXIgYXBwKS5cbiAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25Mb2dpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5wcm9wcy5vbkxvZ2luKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IHRyeSBhIGdlbmVyaWMgaWRlbnRpdHkgbWFuYWdlciBvcGVuIGhhbmRsZXIgaWYgcHJvdmlkZWQuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uT3BlbklkZW50aXR5TWFuYWdlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5wcm9wcy5vbk9wZW5JZGVudGl0eU1hbmFnZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9vcGVuSWRlbnRpdHlNb2RhbEZvclVzZXIoKTtcbiAgfVxuXG4gIC8qKiBVc2VyIGV4cGxpY2l0bHkgYXNrZWQgZm9yIHRoZSBpZGVudGl0eSBVSSDigJQgYWx3YXlzIHNob3cgKGF2b2lkcyDigJxzdHVjayBjbG9zZWTigJ0gaWYgc3RhdGUgZGVzeW5jcykuICovXG4gIF9vcGVuSWRlbnRpdHlNb2RhbEZvclVzZXIgKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyB1aUlkZW50aXR5T3BlbjogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKiBEaXNtaXNzIGlkZW50aXR5IFVJIG9ubHkgZnJvbSBleHBsaWNpdCBjaHJvbWUg4oCUIGlnbm9yZSBTZW1hbnRpYyBNb2RhbCAvIFBvcnRhbCBvbkNsb3NlIChtb2JpbGUtc2FmZSkuICovXG4gIF9jbG9zZUh1YklkZW50aXR5TW9kYWwgKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyB1aUlkZW50aXR5T3BlbjogZmFsc2UgfSk7XG4gIH1cblxuICBfY2xlYXJVbmxvY2tlZFNlc3Npb25PbkNsb3NlICgpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSkge1xuICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZmFicmljLmlkZW50aXR5LnVubG9ja2VkJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoXykge31cbiAgfVxuXG4gIG9wZW5JZGVudGl0eU1hbmFnZXIgKCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbk9wZW5JZGVudGl0eU1hbmFnZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMucHJvcHMub25PcGVuSWRlbnRpdHlNYW5hZ2VyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fb3BlbklkZW50aXR5TW9kYWxGb3JVc2VyKCk7XG4gIH1cblxuICAvKiogQnJpZGdlIC8gYmFja2dyb3VuZCBwcm9tcHRzIOKAlCBkbyBub3QgcmUtb3BlbiBpZiBhbHJlYWR5IHZpc2libGUgKHByZXZlbnRzIG1vYmlsZSBtb2RhbCBzdHJvYmluZykuICovXG4gIG9wZW5JZGVudGl0eU1vZGFsRnJvbUdhdGVkQWN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS51aUlkZW50aXR5T3BlbikgcmV0dXJuO1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgaWYgKG5vdyA8IHRoaXMuX29wZW5JZGVudGl0eU1vZGFsQ29vbERvd25VbnRpbCkgcmV0dXJuO1xuICAgIHRoaXMuX29wZW5JZGVudGl0eU1vZGFsQ29vbERvd25VbnRpbCA9IG5vdyArIDI1MDA7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHVpSWRlbnRpdHlPcGVuOiB0cnVlIH0pO1xuICB9XG5cbiAgX2h1YklkZW50aXR5VWlTbmFwc2hvdEtleSAoaW5mbykge1xuICAgIGlmICghaW5mbyB8fCAoIWluZm8uaWQgJiYgIWluZm8ueHB1YikpIHJldHVybiAnJztcbiAgICBjb25zdCBoYXNYID0gISEoaW5mby54cHJ2ICYmIFN0cmluZyhpbmZvLnhwcnYpLnRyaW0oKSk7XG4gICAgY29uc3QgcGxhaW5BdmFpbCA9ICEhaW5mby5wbGFpbnRleHRVbmxvY2tBdmFpbGFibGU7XG4gICAgY29uc3QgYWNjdCA9IGluZm8uZmFicmljQWNjb3VudEluZGV4ICE9IG51bGwgJiYgaW5mby5mYWJyaWNBY2NvdW50SW5kZXggIT09ICcnXG4gICAgICA/IFN0cmluZyhNYXRoLmZsb29yKE51bWJlcihpbmZvLmZhYnJpY0FjY291bnRJbmRleCkpKVxuICAgICAgOiAnJztcbiAgICBjb25zdCBtb2RlID0gaW5mby5mYWJyaWNJZGVudGl0eU1vZGUgPyBTdHJpbmcoaW5mby5mYWJyaWNJZGVudGl0eU1vZGUpIDogJyc7XG4gICAgY29uc3QgaGQgPSBpbmZvLmZhYnJpY0hkUm9sZSA/IFN0cmluZyhpbmZvLmZhYnJpY0hkUm9sZSkgOiAnJztcbiAgICByZXR1cm4gYCR7U3RyaW5nKGluZm8uaWQgfHwgJycpfXwke1N0cmluZyhpbmZvLnhwdWIgfHwgJycpfXwke2hhc1ggPyAnMScgOiAnMCd9fCR7aW5mby5wYXNzd29yZFByb3RlY3RlZCA/ICcxJyA6ICcwJ318JHtwbGFpbkF2YWlsID8gJzEnIDogJzAnfXwke2luZm8ubGlua2VkRnJvbURlc2t0b3AgPyAnMScgOiAnMCd9fCR7bW9kZX18JHthY2N0fXwke2hkfWA7XG4gIH1cblxuICBfaGFuZGxlSWRlbnRpdHlNYW5hZ2VyTG9jYWxDaGFuZ2UgKGluZm8pIHtcbiAgICBpZiAoaW5mbyAmJiAoaW5mby5pZCB8fCBpbmZvLnhwdWIpKSB7XG4gICAgICB0cnkge1xuICAgICAgICB3cml0ZVN0b3JhZ2VTdHJpbmcoJ2ZhYnJpYy5odWIuaWRlbnRpdHlXaXphcmRQZW5kaW5nJywgJycpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlKSB7XG4gICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2ZhYnJpYy5odWIud2FudElkZW50aXR5V2l6YXJkJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoKHByZXYpID0+IHtcbiAgICAgIGlmICghaW5mbykge1xuICAgICAgICB0cnkgeyBjbGVhclNwZW5kWHB1YldhdGNoKCk7IH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgIGlmICghcHJldi51aUxvY2FsSWRlbnRpdHkgJiYgIXByZXYudWlIYXNMb2NrZWRJZGVudGl0eSkgcmV0dXJuIHt9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVpTG9jYWxJZGVudGl0eTogbnVsbCxcbiAgICAgICAgICB1aUhhc0xvY2tlZElkZW50aXR5OiBmYWxzZSxcbiAgICAgICAgICBjbGllbnRCYWxhbmNlOiBudWxsLFxuICAgICAgICAgIGNsaWVudEJhbGFuY2VMb2FkaW5nOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcHJldklkID0gcHJldi51aUxvY2FsSWRlbnRpdHkgJiYgcHJldi51aUxvY2FsSWRlbnRpdHkuaWQgIT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhwcmV2LnVpTG9jYWxJZGVudGl0eS5pZCkgOiAnJztcbiAgICAgIGNvbnN0IG5leHRJZCA9IGluZm8uaWQgIT0gbnVsbCA/IFN0cmluZyhpbmZvLmlkKSA6ICcnO1xuICAgICAgY29uc3QgcHJldlhwdWIgPSBwcmV2LnVpTG9jYWxJZGVudGl0eSAmJiBwcmV2LnVpTG9jYWxJZGVudGl0eS54cHViICE9IG51bGxcbiAgICAgICAgPyBTdHJpbmcocHJldi51aUxvY2FsSWRlbnRpdHkueHB1YikgOiAnJztcbiAgICAgIGNvbnN0IG5leHRYcHViID0gaW5mby54cHViICE9IG51bGwgPyBTdHJpbmcoaW5mby54cHViKSA6ICcnO1xuICAgICAgY29uc3Qgc2FtZUlkZW50aXR5ID0gISFwcmV2LnVpTG9jYWxJZGVudGl0eSAmJiBwcmV2SWQgPT09IG5leHRJZCAmJiBwcmV2WHB1YiA9PT0gbmV4dFhwdWI7XG4gICAgICBpZiAocHJldi51aUxvY2FsSWRlbnRpdHkgJiYgcHJldi51aUxvY2FsSWRlbnRpdHkueHBydiAmJiAhaW5mby54cHJ2ICYmICFzYW1lSWRlbnRpdHkpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzWHBydiA9ICEhKGluZm8ueHBydiAmJiBTdHJpbmcoaW5mby54cHJ2KS50cmltKCkpO1xuICAgICAgY29uc3QgcGFzc3dvcmRQcm90ZWN0ZWQgPSAhIWluZm8ucGFzc3dvcmRQcm90ZWN0ZWQ7XG4gICAgICBjb25zdCBwbGFpbnRleHRVbmxvY2tBdmFpbGFibGUgPVxuICAgICAgICBpbmZvLnBsYWludGV4dFVubG9ja0F2YWlsYWJsZSAhPSBudWxsXG4gICAgICAgICAgPyAhIWluZm8ucGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlXG4gICAgICAgICAgOiAoISFwcmV2LnVpTG9jYWxJZGVudGl0eSAmJlxuICAgICAgICAgICAgISFwcmV2LnVpTG9jYWxJZGVudGl0eS5wbGFpbnRleHRVbmxvY2tBdmFpbGFibGUgJiZcbiAgICAgICAgICAgIHByZXZJZCA9PT0gbmV4dElkICYmXG4gICAgICAgICAgICBwcmV2WHB1YiA9PT0gbmV4dFhwdWIgJiZcbiAgICAgICAgICAgICFoYXNYcHJ2ICYmXG4gICAgICAgICAgICAhcGFzc3dvcmRQcm90ZWN0ZWQpO1xuICAgICAgY29uc3QgbGlua2VkRnJvbURlc2t0b3AgPSBpbmZvLmxpbmtlZEZyb21EZXNrdG9wICE9IG51bGxcbiAgICAgICAgPyAhIWluZm8ubGlua2VkRnJvbURlc2t0b3BcbiAgICAgICAgOiAhIShwcmV2LnVpTG9jYWxJZGVudGl0eSAmJiBwcmV2LnVpTG9jYWxJZGVudGl0eS5saW5rZWRGcm9tRGVza3RvcCk7XG4gICAgICBjb25zdCBuZXh0SWRlbnRpdHkgPSB7XG4gICAgICAgIGlkOiBpbmZvLmlkLFxuICAgICAgICB4cHViOiBpbmZvLnhwdWIsXG4gICAgICAgIHhwcnY6IGhhc1hwcnYgPyBpbmZvLnhwcnYgOiB1bmRlZmluZWQsXG4gICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkLFxuICAgICAgICBsaW5rZWRGcm9tRGVza3RvcFxuICAgICAgfTtcbiAgICAgIGlmIChpbmZvLmZhYnJpY0lkZW50aXR5TW9kZSAhPSBudWxsICYmIGluZm8uZmFicmljSWRlbnRpdHlNb2RlICE9PSAnJykge1xuICAgICAgICBuZXh0SWRlbnRpdHkuZmFicmljSWRlbnRpdHlNb2RlID0gaW5mby5mYWJyaWNJZGVudGl0eU1vZGU7XG4gICAgICB9IGVsc2UgaWYgKHByZXYudWlMb2NhbElkZW50aXR5ICYmIHByZXYudWlMb2NhbElkZW50aXR5LmZhYnJpY0lkZW50aXR5TW9kZSkge1xuICAgICAgICBuZXh0SWRlbnRpdHkuZmFicmljSWRlbnRpdHlNb2RlID0gcHJldi51aUxvY2FsSWRlbnRpdHkuZmFicmljSWRlbnRpdHlNb2RlO1xuICAgICAgfVxuICAgICAgaWYgKGluZm8uZmFicmljQWNjb3VudEluZGV4ICE9IG51bGwgJiYgaW5mby5mYWJyaWNBY2NvdW50SW5kZXggIT09ICcnKSB7XG4gICAgICAgIG5leHRJZGVudGl0eS5mYWJyaWNBY2NvdW50SW5kZXggPSBNYXRoLmZsb29yKE51bWJlcihpbmZvLmZhYnJpY0FjY291bnRJbmRleCkpO1xuICAgICAgfSBlbHNlIGlmIChwcmV2LnVpTG9jYWxJZGVudGl0eSAmJiBwcmV2LnVpTG9jYWxJZGVudGl0eS5mYWJyaWNBY2NvdW50SW5kZXggIT0gbnVsbCkge1xuICAgICAgICBuZXh0SWRlbnRpdHkuZmFicmljQWNjb3VudEluZGV4ID0gcHJldi51aUxvY2FsSWRlbnRpdHkuZmFicmljQWNjb3VudEluZGV4O1xuICAgICAgfVxuICAgICAgaWYgKGluZm8uZmFicmljSGRSb2xlICE9IG51bGwgJiYgU3RyaW5nKGluZm8uZmFicmljSGRSb2xlKS50cmltKCkgIT09ICcnKSB7XG4gICAgICAgIG5leHRJZGVudGl0eS5mYWJyaWNIZFJvbGUgPSBpbmZvLmZhYnJpY0hkUm9sZTtcbiAgICAgIH0gZWxzZSBpZiAocHJldi51aUxvY2FsSWRlbnRpdHkgJiYgcHJldi51aUxvY2FsSWRlbnRpdHkuZmFicmljSGRSb2xlKSB7XG4gICAgICAgIG5leHRJZGVudGl0eS5mYWJyaWNIZFJvbGUgPSBwcmV2LnVpTG9jYWxJZGVudGl0eS5mYWJyaWNIZFJvbGU7XG4gICAgICB9XG4gICAgICBpZiAoaW5mby5tYXN0ZXJYcHJ2ICE9IG51bGwgJiYgU3RyaW5nKGluZm8ubWFzdGVyWHBydikudHJpbSgpKSB7XG4gICAgICAgIG5leHRJZGVudGl0eS5tYXN0ZXJYcHJ2ID0gaW5mby5tYXN0ZXJYcHJ2O1xuICAgICAgfSBlbHNlIGlmIChwcmV2LnVpTG9jYWxJZGVudGl0eSAmJiBwcmV2LnVpTG9jYWxJZGVudGl0eS5tYXN0ZXJYcHJ2ICYmIGhhc1hwcnYpIHtcbiAgICAgICAgbmV4dElkZW50aXR5Lm1hc3RlclhwcnYgPSBwcmV2LnVpTG9jYWxJZGVudGl0eS5tYXN0ZXJYcHJ2O1xuICAgICAgfVxuICAgICAgaWYgKGluZm8ubWFzdGVyWHB1YiAhPSBudWxsICYmIFN0cmluZyhpbmZvLm1hc3RlclhwdWIpLnRyaW0oKSkge1xuICAgICAgICBuZXh0SWRlbnRpdHkubWFzdGVyWHB1YiA9IGluZm8ubWFzdGVyWHB1YjtcbiAgICAgIH0gZWxzZSBpZiAocHJldi51aUxvY2FsSWRlbnRpdHkgJiYgcHJldi51aUxvY2FsSWRlbnRpdHkubWFzdGVyWHB1Yikge1xuICAgICAgICBuZXh0SWRlbnRpdHkubWFzdGVyWHB1YiA9IHByZXYudWlMb2NhbElkZW50aXR5Lm1hc3RlclhwdWI7XG4gICAgICB9XG4gICAgICBpZiAocGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlICYmICFoYXNYcHJ2ICYmICFwYXNzd29yZFByb3RlY3RlZCkge1xuICAgICAgICBuZXh0SWRlbnRpdHkucGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5leHRIYXNMb2NrZWQgPSAhaGFzWHBydiAmJiAocGFzc3dvcmRQcm90ZWN0ZWQgfHwgISFuZXh0SWRlbnRpdHkucGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5faHViSWRlbnRpdHlVaVNuYXBzaG90S2V5KHByZXYudWlMb2NhbElkZW50aXR5KSA9PT0gdGhpcy5faHViSWRlbnRpdHlVaVNuYXBzaG90S2V5KG5leHRJZGVudGl0eSkgJiZcbiAgICAgICAgISFwcmV2LnVpSGFzTG9ja2VkSWRlbnRpdHkgPT09ICEhbmV4dEhhc0xvY2tlZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVpTG9jYWxJZGVudGl0eTogbmV4dElkZW50aXR5LFxuICAgICAgICB1aUhhc0xvY2tlZElkZW50aXR5OiBuZXh0SGFzTG9ja2VkXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgX2hhbmRsZUlkZW50aXR5TWFuYWdlckxvY2tTdGF0ZUNoYW5nZSAobG9ja2VkKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSgocHJldikgPT4ge1xuICAgICAgaWYgKHByZXYudWlMb2NhbElkZW50aXR5ICYmIHByZXYudWlMb2NhbElkZW50aXR5LnhwcnYpIHJldHVybiB7fTtcbiAgICAgIGNvbnN0IGhhc0lkZW50ID0gISEocHJldi51aUxvY2FsSWRlbnRpdHkgJiYgKHByZXYudWlMb2NhbElkZW50aXR5LmlkIHx8IHByZXYudWlMb2NhbElkZW50aXR5LnhwdWIpKTtcbiAgICAgIGlmIChsb2NrZWQgJiYgIWhhc0lkZW50KSByZXR1cm4ge307XG4gICAgICBpZiAoISFwcmV2LnVpSGFzTG9ja2VkSWRlbnRpdHkgPT09ICEhbG9ja2VkKSByZXR1cm4ge307XG4gICAgICByZXR1cm4geyB1aUhhc0xvY2tlZElkZW50aXR5OiAhIWxvY2tlZCB9O1xuICAgIH0pO1xuICAgIGlmIChsb2NrZWQgJiYgdGhpcy5icmlkZ2VSZWYgJiYgdGhpcy5icmlkZ2VSZWYuY3VycmVudCAmJiB0eXBlb2YgdGhpcy5icmlkZ2VSZWYuY3VycmVudC5jbGVhckRlY3J5cHRlZERvY3VtZW50cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5icmlkZ2VSZWYuY3VycmVudC5jbGVhckRlY3J5cHRlZERvY3VtZW50cygpO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH1cblxuICBfaGFuZGxlSWRlbnRpdHlNYW5hZ2VyVW5sb2NrU3VjY2VzcyAoaWRlbnRpdHlJbmZvKSB7XG4gICAgaWYgKGlkZW50aXR5SW5mbyAmJiB0eXBlb2YgaWRlbnRpdHlJbmZvID09PSAnb2JqZWN0JyAmJiAoaWRlbnRpdHlJbmZvLmlkIHx8IGlkZW50aXR5SW5mby54cHViKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVTdG9yYWdlU3RyaW5nKCdmYWJyaWMuaHViLmlkZW50aXR5V2l6YXJkUGVuZGluZycsICcnKTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSkge1xuICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdmYWJyaWMuaHViLndhbnRJZGVudGl0eVdpemFyZCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgY29uc3QgbmV4dCA9IHtcbiAgICAgICAgaWQ6IGlkZW50aXR5SW5mby5pZCxcbiAgICAgICAgeHB1YjogaWRlbnRpdHlJbmZvLnhwdWIsXG4gICAgICAgIHhwcnY6IGlkZW50aXR5SW5mby54cHJ2IHx8IHVuZGVmaW5lZCxcbiAgICAgICAgcGFzc3dvcmRQcm90ZWN0ZWQ6ICEhaWRlbnRpdHlJbmZvLnBhc3N3b3JkUHJvdGVjdGVkXG4gICAgICB9O1xuICAgICAgaWYgKGlkZW50aXR5SW5mby5mYWJyaWNJZGVudGl0eU1vZGUpIG5leHQuZmFicmljSWRlbnRpdHlNb2RlID0gaWRlbnRpdHlJbmZvLmZhYnJpY0lkZW50aXR5TW9kZTtcbiAgICAgIGlmIChpZGVudGl0eUluZm8uZmFicmljQWNjb3VudEluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgbmV4dC5mYWJyaWNBY2NvdW50SW5kZXggPSBNYXRoLmZsb29yKE51bWJlcihpZGVudGl0eUluZm8uZmFicmljQWNjb3VudEluZGV4KSk7XG4gICAgICB9XG4gICAgICBpZiAoaWRlbnRpdHlJbmZvLmZhYnJpY0hkUm9sZSkgbmV4dC5mYWJyaWNIZFJvbGUgPSBpZGVudGl0eUluZm8uZmFicmljSGRSb2xlO1xuICAgICAgaWYgKGlkZW50aXR5SW5mby5tYXN0ZXJYcHJ2KSBuZXh0Lm1hc3RlclhwcnYgPSBpZGVudGl0eUluZm8ubWFzdGVyWHBydjtcbiAgICAgIGlmIChpZGVudGl0eUluZm8ubWFzdGVyWHB1YikgbmV4dC5tYXN0ZXJYcHViID0gaWRlbnRpdHlJbmZvLm1hc3RlclhwdWI7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdWlMb2NhbElkZW50aXR5OiBuZXh0LFxuICAgICAgICB1aUhhc0xvY2tlZElkZW50aXR5OiBmYWxzZSxcbiAgICAgICAgdWlJZGVudGl0eU9wZW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHVpSWRlbnRpdHlPcGVuOiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlSWRlbnRpdHlNYW5hZ2VyRm9yZ2V0ICgpIHtcbiAgICB0cnkgeyB0aGlzLl9jbGVhclVubG9ja2VkU2Vzc2lvbk9uQ2xvc2UoKTsgfSBjYXRjaCAoXykge31cbiAgICB0cnkgeyByZW1vdmVTdG9yYWdlS2V5KERFTEVHQVRJT05fU1RPUkFHRV9LRVkpOyB9IGNhdGNoIChfKSB7fVxuICAgIHRyeSB7IHJlbW92ZVN0b3JhZ2VLZXkoJ2ZhYnJpYy5saW5rZWREZXZpY2VzJyk7IH0gY2F0Y2ggKF8pIHt9XG4gICAgdHJ5IHsgbm90aWZ5RGVsZWdhdGlvblN0b3JhZ2VDaGFuZ2VkKCk7IH0gY2F0Y2ggKF8pIHt9XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgY2hyb21lICE9PSAndW5kZWZpbmVkJyAmJiBjaHJvbWUuc3RvcmFnZSAmJiBjaHJvbWUuc3RvcmFnZS5sb2NhbCAmJiBjaHJvbWUuc3RvcmFnZS5sb2NhbC5yZW1vdmUpIHtcbiAgICAgICAgY2hyb21lLnN0b3JhZ2UubG9jYWwucmVtb3ZlKFsnZmFicmljLmlkZW50aXR5LmV4dCddKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChfKSB7fVxuICAgIHRyeSB7IGNsZWFyRmFicmljQnJvd3NlcklkZW50aXR5TG9jYWwoKTsgfSBjYXRjaCAoXykge31cbiAgICB0cnkgeyBjbGVhclNwZW5kWHB1YldhdGNoKCk7IH0gY2F0Y2ggKF8pIHt9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICB1aUxvY2FsSWRlbnRpdHk6IG51bGwsXG4gICAgICB1aUhhc0xvY2tlZElkZW50aXR5OiBmYWxzZSxcbiAgICAgIGNsaWVudEJhbGFuY2U6IG51bGwsXG4gICAgICBjbGllbnRCYWxhbmNlTG9hZGluZzogZmFsc2VcbiAgICB9KTtcbiAgICBpZiAodGhpcy5icmlkZ2VSZWYgJiYgdGhpcy5icmlkZ2VSZWYuY3VycmVudCAmJiB0eXBlb2YgdGhpcy5icmlkZ2VSZWYuY3VycmVudC5jbGVhckFsbERvY3VtZW50cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5icmlkZ2VSZWYuY3VycmVudC5jbGVhckFsbERvY3VtZW50cygpO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH1cblxuICBfZmFicmljQWNjb3VudENoYW5nZSAobmV4dEFjY291bnRJbmRleCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhaSA9IE1hdGguZmxvb3IoTnVtYmVyKG5leHRBY2NvdW50SW5kZXgpKTtcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFpKSB8fCBhaSA8IDApIHJldHVybjtcbiAgICAgIGxldCBwYXJzZWQgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkID0gcmVhZFN0b3JhZ2VKU09OKCdmYWJyaWMuaWRlbnRpdHkubG9jYWwnLCBudWxsKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICBpZiAoIXBhcnNlZCB8fCBwYXJzZWQuZmFicmljSWRlbnRpdHlNb2RlICE9PSAnYWNjb3VudCcpIHJldHVybjtcbiAgICAgIGlmIChwYXJzZWQucGFzc3dvcmRQcm90ZWN0ZWQpIHJldHVybjtcbiAgICAgIGlmIChwYXJzZWQuZmFicmljSGRSb2xlID09PSAnYWNjb3VudE5vZGUnIHx8IHBhcnNlZC5mYWJyaWNIZFJvbGUgPT09ICd3YXRjaEFjY291bnQnKSByZXR1cm47XG4gICAgICAvLyBTdHJpY3QgYXQtcmVzdCBzdG9yYWdlIGNsZWFycyBtYXN0ZXJzOyBwcmVmZXIgdGhlIHVubG9ja2VkIGluLW1lbW9yeSAvIHNlc3Npb24ga2V5LlxuICAgICAgY29uc3QgdW5sb2NrZWQgPSB0aGlzLnN0YXRlLnVpTG9jYWxJZGVudGl0eSB8fCB7fTtcbiAgICAgIGxldCBtYXN0ZXIgPSBTdHJpbmcodW5sb2NrZWQubWFzdGVyWHBydiB8fCB1bmxvY2tlZC54cHJ2IHx8ICcnKS50cmltKCk7XG4gICAgICBpZiAoIW1hc3Rlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNlc3MgPSBKU09OLnBhcnNlKHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmYWJyaWMuaWRlbnRpdHkudW5sb2NrZWQnKSB8fCAnbnVsbCcpO1xuICAgICAgICAgIG1hc3RlciA9IFN0cmluZygoc2VzcyAmJiAoc2Vzcy5tYXN0ZXJYcHJ2IHx8IHNlc3MueHBydikpIHx8ICcnKS50cmltKCk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICB9XG4gICAgICBpZiAoIW1hc3RlcikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBkayA9IGRlcml2ZUZhYnJpY0FjY291bnRJZGVudGl0eUtleXMobWFzdGVyLCBhaSwgMCk7XG4gICAgICBjb25zdCBmcm9tVW5sb2NrZWRYcCA9IHVubG9ja2VkLm1hc3RlclhwdWIgJiYgU3RyaW5nKHVubG9ja2VkLm1hc3RlclhwdWIpLnRyaW0oKTtcbiAgICAgIGNvbnN0IGZyb21QYXJzZWRYcCA9IHBhcnNlZC5tYXN0ZXJYcHViICYmIFN0cmluZyhwYXJzZWQubWFzdGVyWHB1YikudHJpbSgpO1xuICAgICAgY29uc3QgbWFzdGVyWHAgPSBmcm9tVW5sb2NrZWRYcCB8fCBmcm9tUGFyc2VkWHAgfHwgZmFicmljUm9vdFhwdWJGcm9tTWFzdGVyWHBydihtYXN0ZXIpO1xuICAgICAgY29uc3QgbmV4dFBheWxvYWQgPSBPYmplY3QuYXNzaWduKHt9LCBwYXJzZWQsIHtcbiAgICAgICAgZmFicmljSWRlbnRpdHlNb2RlOiAnYWNjb3VudCcsXG4gICAgICAgIGZhYnJpY0FjY291bnRJbmRleDogYWksXG4gICAgICAgIGlkOiBkay5pZCxcbiAgICAgICAgeHB1YjogZGsueHB1YixcbiAgICAgICAgbWFzdGVyWHB1YjogbWFzdGVyWHBcbiAgICAgIH0pO1xuICAgICAgd3JpdGVTdG9yYWdlSlNPTignZmFicmljLmlkZW50aXR5LmxvY2FsJywgbmV4dFBheWxvYWQpO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IGxvYyA9IHByZXYudWlMb2NhbElkZW50aXR5IHx8IHt9O1xuICAgICAgICBjb25zdCBoYWRLZXkgPSAhIShsb2MgJiYgbG9jLnhwcnYpO1xuICAgICAgICBpZiAoaGFkS2V5KSB7XG4gICAgICAgICAgY29uc3QgbXggPVxuICAgICAgICAgICAgcGFyc2VkLm1hc3RlclhwdWIgJiYgU3RyaW5nKHBhcnNlZC5tYXN0ZXJYcHViKS50cmltKClcbiAgICAgICAgICAgICAgPyBTdHJpbmcocGFyc2VkLm1hc3RlclhwdWIpLnRyaW0oKVxuICAgICAgICAgICAgICA6IGZhYnJpY1Jvb3RYcHViRnJvbU1hc3RlclhwcnYobWFzdGVyKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdWlMb2NhbElkZW50aXR5OiB7XG4gICAgICAgICAgICAgIC4uLmxvYyxcbiAgICAgICAgICAgICAgaWQ6IGRrLmlkLFxuICAgICAgICAgICAgICB4cHViOiBkay54cHViLFxuICAgICAgICAgICAgICB4cHJ2OiBkay54cHJ2LFxuICAgICAgICAgICAgICBmYWJyaWNJZGVudGl0eU1vZGU6ICdhY2NvdW50JyxcbiAgICAgICAgICAgICAgZmFicmljQWNjb3VudEluZGV4OiBhaSxcbiAgICAgICAgICAgICAgbWFzdGVyWHBydjogbWFzdGVyLFxuICAgICAgICAgICAgICBtYXN0ZXJYcHViOiBteFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVpSGFzTG9ja2VkSWRlbnRpdHk6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYmwgPSBidWlsZExvY2FsRmFicmljSWRlbnRpdHlQYXlsb2FkKG5leHRQYXlsb2FkKTtcbiAgICAgICAgICBpZiAoIWJsLnJlc29sdmVkIHx8ICFibC5yZWNvcmQpIHJldHVybiB7fTtcbiAgICAgICAgICBjb25zdCByID0gYmwucmVjb3JkO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1aUxvY2FsSWRlbnRpdHk6IE9iamVjdC5hc3NpZ24oe30sIGxvYywge1xuICAgICAgICAgICAgICBpZDogci5pZCxcbiAgICAgICAgICAgICAgeHB1Yjogci54cHViLFxuICAgICAgICAgICAgICBwYXNzd29yZFByb3RlY3RlZDogISFyLnBhc3N3b3JkUHJvdGVjdGVkLFxuICAgICAgICAgICAgICBwbGFpbnRleHRVbmxvY2tBdmFpbGFibGU6ICEhci5wbGFpbnRleHRVbmxvY2tBdmFpbGFibGUsXG4gICAgICAgICAgICAgIGZhYnJpY0lkZW50aXR5TW9kZTogJ2FjY291bnQnLFxuICAgICAgICAgICAgICBmYWJyaWNBY2NvdW50SW5kZXg6IGFpLFxuICAgICAgICAgICAgICBtYXN0ZXJYcHViOiByLm1hc3RlclhwdWJcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdWlIYXNMb2NrZWRJZGVudGl0eTogISEoci5wYXNzd29yZFByb3RlY3RlZCB8fCByLnBsYWludGV4dFVubG9ja0F2YWlsYWJsZSlcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbSFVCXScsICdGYWJyaWMgYWNjb3VudCBzd2l0Y2ggZmFpbGVkOicsIHNhZmVJZGVudGl0eUVycihlKSk7XG4gICAgfVxuICB9XG5cbiAgX29wZW5GZWRlcmF0aW9uSW52aXRlUmV2aWV3ICgpIHtcbiAgICBjb25zdCBkID0gdGhpcy5zdGF0ZS5mZWRlcmF0aW9uSW52aXRlQmFubmVyRGV0YWlsO1xuICAgIGlmICghZCB8fCAhZC5pbnZpdGVJZCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZmVkZXJhdGlvbkludml0ZU1vZGFsT3BlbjogdHJ1ZSxcbiAgICAgIGZlZGVyYXRpb25JbnZpdGVEZXRhaWw6IGQsXG4gICAgICBmZWRlcmF0aW9uSW52aXRlQmFubmVyRGV0YWlsOiBudWxsXG4gICAgfSk7XG4gIH1cblxuICBfZGlzbWlzc0ZlZGVyYXRpb25JbnZpdGVCYW5uZXIgKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBmZWRlcmF0aW9uSW52aXRlQmFubmVyRGV0YWlsOiBudWxsIH0pO1xuICB9XG5cbiAgX2hhbmRsZUZlZGVyYXRpb25JbnZpdGVSZXNwb25zZSAoZCkge1xuICAgIGlmICghZCB8fCB0eXBlb2YgZC5hY2NlcHQgIT09ICdib29sZWFuJykgcmV0dXJuO1xuICAgIGlmICghZC5hY2NlcHQpIHtcbiAgICAgIHRvYXN0aWZ5LmluZm8oJ0EgcGVlciBkZWNsaW5lZCB5b3VyIGZlZGVyYXRpb24gY29udHJhY3QgaW52aXRlLicsIHsgdHJhbnNpdGlvbjogU2xpZGUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFkbWluID0gdGhpcy5zdGF0ZS5hZG1pblRva2VuIHx8ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiByZWFkU3RvcmFnZVN0cmluZygnZmFicmljLmh1Yi5hZG1pblRva2VuJykpO1xuICAgIGNvbnN0IHBrID0gZC5yZXNwb25kZXJQdWJrZXk7XG4gICAgaWYgKCFwaykge1xuICAgICAgdG9hc3RpZnkud2FybmluZygnRmVkZXJhdGlvbiBpbnZpdGUgYWNjZXB0ZWQgYnV0IG5vIHJlc3BvbmRlciBwdWJrZXkgd2FzIGluY2x1ZGVkLicsIHsgdHJhbnNpdGlvbjogU2xpZGUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYWRtaW4pIHtcbiAgICAgIHRvYXN0aWZ5LmluZm8oYFBlZXIgYWNjZXB0ZWQgZmVkZXJhdGlvbiBpbnZpdGUgKHB1YmtleSAke3BrLnNsaWNlKDAsIDEwKX3igKYpLiBBZGQgdGhlaXIgcHVia2V5IHVuZGVyIE1vcmUg4oaSIEZlZGVyYXRpb25zIChvciBTZXR0aW5ncyDihpIgRGlzdHJpYnV0ZWQgZmVkZXJhdGlvbikuYCwgeyB0cmFuc2l0aW9uOiBTbGlkZSwgYXV0b0Nsb3NlOiA4MDAwIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCB0b2tlbiA9IFN0cmluZyhhZG1pbikudHJpbSgpO1xuICAgIHRvYXN0aWZ5LmluZm8oXG4gICAgICAoeyBjbG9zZVRvYXN0IH0pID0+IChcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwIDAgMC42ZW0nLCBmb250U2l6ZTogJzAuOTVyZW0nIH19PkZlZGVyYXRpb24gaW52aXRlIGFjY2VwdGVkLjwvcD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnMC41ZW0nLFxuICAgICAgICAgICAgICBwYWRkaW5nOiAnMC40NWVtIDAuNzVlbScsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogNCxcbiAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICMyMTg1ZDAnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnIzIxODVkMCcsXG4gICAgICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICB2b2lkIHNlbGYuX2FkZEZlZGVyYXRpb25NZW1iZXJGcm9tSW52aXRlKHBrLCB0b2tlbiwgY2xvc2VUb2FzdCk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEFkZCB0byB2YWxpZGF0b3JzXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwYWRkaW5nOiAnMC40NWVtIDAuNzVlbScsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogNCxcbiAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNjY2MnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI2Y0ZjRmNCcsXG4gICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gKHR5cGVvZiBjbG9zZVRvYXN0ID09PSAnZnVuY3Rpb24nID8gY2xvc2VUb2FzdCgpIDogbnVsbCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgRGlzbWlzc1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICksXG4gICAgICB7IGF1dG9DbG9zZTogZmFsc2UsIGNsb3NlT25DbGljazogZmFsc2UsIHRyYW5zaXRpb246IFNsaWRlIH1cbiAgICApO1xuICB9XG5cbiAgYXN5bmMgX2FkZEZlZGVyYXRpb25NZW1iZXJGcm9tSW52aXRlIChwdWJrZXksIGFkbWluVG9rZW4sIGNsb3NlVG9hc3QpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhdGlvblxuICAgICAgICA/IGAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9YFxuICAgICAgICA6ICcnO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7YmFzZX0vc2VydmljZXMvcnBjYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICAgICAgaWQ6IDEsXG4gICAgICAgICAgbWV0aG9kOiAnQWRkRGlzdHJpYnV0ZWRGZWRlcmF0aW9uTWVtYmVyJyxcbiAgICAgICAgICBwYXJhbXM6IFt7IHB1YmtleSwgYWRtaW5Ub2tlbiB9XVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICAgIGlmIChib2R5LmVycm9yIHx8ICFyZXMub2spIHtcbiAgICAgICAgdG9hc3RpZnkuZXJyb3IoKGJvZHkuZXJyb3IgJiYgYm9keS5lcnJvci5tZXNzYWdlKSB8fCAnQWRkIG1lbWJlciBmYWlsZWQnLCB7IHRyYW5zaXRpb246IFNsaWRlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0b2FzdGlmeS5zdWNjZXNzKCdWYWxpZGF0b3IgYWRkZWQgdG8gZmVkZXJhdGlvbiBwb2xpY3kuJywgeyB0cmFuc2l0aW9uOiBTbGlkZSB9KTtcbiAgICAgIGlmICh0eXBlb2YgY2xvc2VUb2FzdCA9PT0gJ2Z1bmN0aW9uJykgY2xvc2VUb2FzdCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRvYXN0aWZ5LmVycm9yKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLCB7IHRyYW5zaXRpb246IFNsaWRlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbSFVCXScsICdDb21wb25lbnQgbW91bnRlZCEnKTtcbiAgICB0aGlzLl9zZXR1cFN0YXR1c1NhZmV0eVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBEbyBub3QgdHJlYXQgdW5rbm93biBzZXR1cCBzdGF0dXMgYXMgY29uZmlndXJlZCAod291bGQgc2tpcCBvbmJvYXJkaW5nKS5cbiAgICAgIHRoaXMuc2V0U3RhdGUoKHByZXYpID0+IChwcmV2LnNldHVwQ2hlY2tlZCA/IG51bGwgOiB7IHNldHVwU3RhdHVzVGltZWRPdXQ6IHRydWUgfSkpO1xuICAgIH0sIDIwMDAwKTtcbiAgICB0aGlzLl9jaGVja1NldHVwU3RhdHVzKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fc2V0dXBTdGF0dXNTYWZldHlUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2V0dXBTdGF0dXNTYWZldHlUaW1lcik7XG4gICAgICAgIHRoaXMuX3NldHVwU3RhdHVzU2FmZXR5VGltZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX3JlZnJlc2hBZG1pblRva2VuSWZOZWVkZWQoKTtcbiAgICB0aGlzLl9yZWZyZXNoQ2xpZW50QmFsYW5jZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgdm9pZCB0aGlzLl9tYXliZUF1dG9GdW5kRGVza3RvcExvY2FsS2V5KCk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdm9pZCB0aGlzLl9tYXliZUF1dG9GdW5kRGVza3RvcExvY2FsS2V5KCk7XG4gICAgfSk7XG4gICAgdGhpcy5fb25HbG9iYWxTdGF0ZVVwZGF0ZSA9IChlKSA9PiB7XG4gICAgICBjb25zdCBkID0gZSAmJiBlLmRldGFpbDtcbiAgICAgIGlmIChkICYmIGQub3BlcmF0aW9uICYmIGQub3BlcmF0aW9uLnBhdGggPT09ICcvYml0Y29pbicpIHtcbiAgICAgICAgY29uc3QgaWRuID0gdGhpcy5zdGF0ZS51aUxvY2FsSWRlbnRpdHkgfHwgbnVsbDtcbiAgICAgICAgaWYgKGlkbiAmJiBpZG4ueHB1YikgdGhpcy5fcmVmcmVzaENsaWVudEJhbGFuY2UoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX29uQ2xpZW50QmFsYW5jZVVwZGF0ZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGlkbiA9IHRoaXMuc3RhdGUudWlMb2NhbElkZW50aXR5IHx8IG51bGw7XG4gICAgICBpZiAoaWRuICYmIGlkbi54cHViKSB0aGlzLl9yZWZyZXNoQ2xpZW50QmFsYW5jZSgpO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBTdHJpY3QgbG9jayBwb2xpY3k6IGFsd2F5cyBjbGVhciB1bmxvY2tlZCBrZXkgbWF0ZXJpYWwgb24gY2xvc2UvdW5sb2FkLlxuICAgICAgdGhpcy5fY2xlYXJVbmxvY2tlZFNlc3Npb25PbkNsb3NlKCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgdGhpcy5fY2xlYXJVbmxvY2tlZFNlc3Npb25PbkNsb3NlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdnbG9iYWxTdGF0ZVVwZGF0ZScsIHRoaXMuX29uR2xvYmFsU3RhdGVVcGRhdGUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWVudEJhbGFuY2VVcGRhdGUnLCB0aGlzLl9vbkNsaWVudEJhbGFuY2VVcGRhdGUpO1xuICAgICAgdGhpcy5fb25GYWJyaWNIdWJBZG1pblRva2VuU2F2ZWQgPSAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdCA9IHJlYWRTdG9yYWdlU3RyaW5nKCdmYWJyaWMuaHViLmFkbWluVG9rZW4nKTtcbiAgICAgICAgICBpZiAodCkgdGhpcy5zZXRTdGF0ZSh7IGFkbWluVG9rZW46IHQgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9O1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZhYnJpY0h1YkFkbWluVG9rZW5TYXZlZCcsIHRoaXMuX29uRmFicmljSHViQWRtaW5Ub2tlblNhdmVkKTtcbiAgICAgIHRoaXMuX2ZhYnJpY0ZlZEludml0ZSA9IChldikgPT4ge1xuICAgICAgICBjb25zdCBkID0gZXYgJiYgZXYuZGV0YWlsO1xuICAgICAgICBpZiAoZCAmJiBkLmludml0ZUlkKSB0aGlzLnNldFN0YXRlKHsgZmVkZXJhdGlvbkludml0ZU1vZGFsT3BlbjogdHJ1ZSwgZmVkZXJhdGlvbkludml0ZURldGFpbDogZCB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9mYWJyaWNGZWRSZXNwID0gKGV2KSA9PiB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUZlZGVyYXRpb25JbnZpdGVSZXNwb25zZShldiAmJiBldi5kZXRhaWwpO1xuICAgICAgfTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmYWJyaWM6ZmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlJywgdGhpcy5fZmFicmljRmVkSW52aXRlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmYWJyaWM6ZmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlUmVzcG9uc2UnLCB0aGlzLl9mYWJyaWNGZWRSZXNwKTtcbiAgICAgIHRoaXMuX2ZhYnJpY0NvbGxhYkludml0ZSA9IChldikgPT4ge1xuICAgICAgICBjb25zdCBkID0gZXYgJiYgZXYuZGV0YWlsO1xuICAgICAgICBpZiAoZCAmJiBkLmludml0YXRpb25JZCkgdGhpcy5zZXRTdGF0ZSh7IGNvbGxhYm9yYXRpb25JbnZpdGVNb2RhbE9wZW46IHRydWUsIGNvbGxhYm9yYXRpb25JbnZpdGVEZXRhaWw6IGQgfSk7XG4gICAgICB9O1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZhYnJpYzpjb2xsYWJvcmF0aW9uSW52aXRhdGlvbicsIHRoaXMuX2ZhYnJpY0NvbGxhYkludml0ZSk7XG4gICAgICB0aGlzLl9vbkZhYnJpY09wZW5JZGVudGl0eU1hbmFnZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMub3BlbklkZW50aXR5TWFuYWdlcigpO1xuICAgICAgfTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmYWJyaWNPcGVuSWRlbnRpdHlNYW5hZ2VyJywgdGhpcy5fb25GYWJyaWNPcGVuSWRlbnRpdHlNYW5hZ2VyKTtcbiAgICAgIHRoaXMuX2FkbWluVG9rZW5SZWZyZXNoSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLl9yZWZyZXNoQWRtaW5Ub2tlbklmTmVlZGVkKCksIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuICAgIH1cbiAgICB0aGlzLl90b2FzdFVuc3ViID0gdG9hc3QuYWRkTGlzdGVuZXIoKHQpID0+IHtcbiAgICAgIGNvbnN0IG1zZyA9IHQuaGVhZGVyID8gYCR7dC5oZWFkZXJ9OiAke3QubWVzc2FnZX1gIDogdC5tZXNzYWdlO1xuICAgICAgY29uc3Qgb3B0cyA9IHsgYXV0b0Nsb3NlOiB0LmR1cmF0aW9uIHx8IDQwMDAsIHRyYW5zaXRpb246IFNsaWRlIH07XG4gICAgICBpZiAodC50eXBlID09PSAnc3VjY2VzcycpIHRvYXN0aWZ5LnN1Y2Nlc3MobXNnLCBvcHRzKTtcbiAgICAgIGVsc2UgaWYgKHQudHlwZSA9PT0gJ2Vycm9yJykgdG9hc3RpZnkuZXJyb3IobXNnLCBvcHRzKTtcbiAgICAgIGVsc2UgaWYgKHQudHlwZSA9PT0gJ3dhcm5pbmcnKSB0b2FzdGlmeS53YXJuaW5nKG1zZywgb3B0cyk7XG4gICAgICBlbHNlIHRvYXN0aWZ5LmluZm8obXNnLCBvcHRzKTtcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGluc3RhbGxIdWJVaUZlYXR1cmVGbGFnc1dpbmRvd0FwaSgpO1xuICAgICAgdGhpcy5faHViVWlVbnN1YiA9IHN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzKCgpID0+IHRoaXMuZm9yY2VVcGRhdGUoKSk7XG4gICAgICBmZXRjaFBlcnNpc3RlZEh1YlVpRmVhdHVyZUZsYWdzKCkudGhlbigoKSA9PiB0aGlzLmZvcmNlVXBkYXRlKCkpLmNhdGNoKCgpID0+IHt9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCAoKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnW0hVQl0nLCAnQ2xlYW5pbmcgdXAuLi4nKTtcbiAgICBpZiAodGhpcy5fc2V0dXBTdGF0dXNTYWZldHlUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3NldHVwU3RhdHVzU2FmZXR5VGltZXIpO1xuICAgICAgdGhpcy5fc2V0dXBTdGF0dXNTYWZldHlUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5faHViVWlVbnN1YiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5faHViVWlVbnN1YigpO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fdG9hc3RVbnN1YiA9PT0gJ2Z1bmN0aW9uJykgdGhpcy5fdG9hc3RVbnN1YigpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRoaXMuX29uR2xvYmFsU3RhdGVVcGRhdGUpIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdnbG9iYWxTdGF0ZVVwZGF0ZScsIHRoaXMuX29uR2xvYmFsU3RhdGVVcGRhdGUpO1xuICAgICAgaWYgKHRoaXMuX29uQ2xpZW50QmFsYW5jZVVwZGF0ZSkgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWVudEJhbGFuY2VVcGRhdGUnLCB0aGlzLl9vbkNsaWVudEJhbGFuY2VVcGRhdGUpO1xuICAgICAgaWYgKHRoaXMuX29uRmFicmljSHViQWRtaW5Ub2tlblNhdmVkKSB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmYWJyaWNIdWJBZG1pblRva2VuU2F2ZWQnLCB0aGlzLl9vbkZhYnJpY0h1YkFkbWluVG9rZW5TYXZlZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fZmFicmljRmVkSW52aXRlKSB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZmFicmljOmZlZGVyYXRpb25Db250cmFjdEludml0ZScsIHRoaXMuX2ZhYnJpY0ZlZEludml0ZSk7XG4gICAgICBpZiAodGhpcy5fZmFicmljRmVkUmVzcCkgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZhYnJpYzpmZWRlcmF0aW9uQ29udHJhY3RJbnZpdGVSZXNwb25zZScsIHRoaXMuX2ZhYnJpY0ZlZFJlc3ApO1xuICAgICAgaWYgKHRoaXMuX2ZhYnJpY0NvbGxhYkludml0ZSkgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZhYnJpYzpjb2xsYWJvcmF0aW9uSW52aXRhdGlvbicsIHRoaXMuX2ZhYnJpY0NvbGxhYkludml0ZSk7XG4gICAgICBpZiAodGhpcy5fb25GYWJyaWNPcGVuSWRlbnRpdHlNYW5hZ2VyKSB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmYWJyaWNPcGVuSWRlbnRpdHlNYW5hZ2VyJywgdGhpcy5fb25GYWJyaWNPcGVuSWRlbnRpdHlNYW5hZ2VyKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCB0aGlzLl9jbGVhclVubG9ja2VkU2Vzc2lvbk9uQ2xvc2UpO1xuICAgICAgdGhpcy5fY2xlYXJVbmxvY2tlZFNlc3Npb25PbkNsb3NlKCk7XG4gICAgICBpZiAodGhpcy5fYWRtaW5Ub2tlblJlZnJlc2hJbnRlcnZhbCkgY2xlYXJJbnRlcnZhbCh0aGlzLl9hZG1pblRva2VuUmVmcmVzaEludGVydmFsKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUgKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgY29uc3QgcHJldklkID0gcHJldlN0YXRlLnVpTG9jYWxJZGVudGl0eSB8fCB7fTtcbiAgICBjb25zdCBuZXh0SWQgPSB0aGlzLnN0YXRlLnVpTG9jYWxJZGVudGl0eSB8fCB7fTtcbiAgICBjb25zdCBwcmV2WHB1YiA9IHByZXZJZC54cHViO1xuICAgIGNvbnN0IG5leHRYcHViID0gbmV4dElkLnhwdWI7XG4gICAgY29uc3QgcHJldkZhYiA9IHByZXZJZC5mYWJyaWNBY2NvdW50SW5kZXg7XG4gICAgY29uc3QgbmV4dEZhYiA9IG5leHRJZC5mYWJyaWNBY2NvdW50SW5kZXg7XG4gICAgaWYgKHByZXZYcHViICE9PSBuZXh0WHB1YiB8fCBwcmV2RmFiICE9PSBuZXh0RmFiKSB0aGlzLl9yZWZyZXNoQ2xpZW50QmFsYW5jZSgpO1xuICB9XG5cbiAgYXN5bmMgX21heWJlQXV0b0Z1bmREZXNrdG9wTG9jYWxLZXkgKCkge1xuICAgIGlmICh0aGlzLl9kZXNrdG9wQXV0b0ZhdWNldEJ1c3kpIHJldHVybjtcbiAgICBjb25zdCBpZGVudGl0eSA9IHRoaXMuc3RhdGUudWlMb2NhbElkZW50aXR5IHx8IG51bGw7XG4gICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSB0aGlzLmJyaWRnZVJlZiAmJiB0aGlzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgIGNvbnN0IG5ldHdvcmtTdGF0dXMgPSBicmlkZ2VJbnN0YW5jZSAmJiAoYnJpZGdlSW5zdGFuY2UubmV0d29ya1N0YXR1cyB8fCBicmlkZ2VJbnN0YW5jZS5sYXN0TmV0d29ya1N0YXR1cyk7XG4gICAgY29uc3QgYml0Y29pbiA9IHJlc29sdmVCaXRjb2luRnJvbU5ldHdvcmtTdGF0dXMobmV0d29ya1N0YXR1cyk7XG4gICAgY29uc3QgbmV0d29yayA9IChiaXRjb2luICYmIGJpdGNvaW4ubmV0d29yaykgPyBTdHJpbmcoYml0Y29pbi5uZXR3b3JrKS50b0xvd2VyQ2FzZSgpIDogJ3JlZ3Rlc3QnO1xuICAgIGlmICghc2hvdWxkQXV0b0Z1bmREZXNrdG9wTG9jYWxLZXkoe1xuICAgICAgaWRlbnRpdHksXG4gICAgICBjbGllbnRCYWxhbmNlOiB0aGlzLnN0YXRlLmNsaWVudEJhbGFuY2UsXG4gICAgICBuZXR3b3JrXG4gICAgfSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGVza3RvcEF1dG9GYXVjZXRCdXN5ID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGlzYyA9IGF3YWl0IGRpc2NvdmVyTG9jYWxIdWJGYXVjZXQoe1xuICAgICAgICBodWJBZG1pblRva2VuOiByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKHRoaXMuc3RhdGUuYWRtaW5Ub2tlbikgfHwgJydcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkaXNjLmF2YWlsYWJsZSB8fCBkaXNjLmZ1bmRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fZGVza3RvcEF1dG9GYXVjZXRCdXN5ID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZ1bmRlZCA9IGF3YWl0IGZ1bmRMb2NhbEtleUZyb21IdWJGYXVjZXQoe1xuICAgICAgICBpZGVudGl0eSxcbiAgICAgICAgYWRtaW5Ub2tlbjogdGhpcy5zdGF0ZS5hZG1pblRva2VuLFxuICAgICAgICBuZXR3b3JrLFxuICAgICAgICBhbW91bnRTYXRzOiAoZGlzYy5mYXVjZXQgJiYgZGlzYy5mYXVjZXQuZGVmYXVsdEFtb3VudFNhdHMpIHx8IDEwMDAwLFxuICAgICAgICBtaW5lQ29uZmlybTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBpZiAoZnVuZGVkICYmIGZ1bmRlZC5vaykge1xuICAgICAgICBtYXJrQXV0b0ZhdWNldERvbmUoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgYEZ1bmRlZCBsb2NhbCBrZXkgd2l0aCAke2Z1bmRlZC5hbW91bnRTYXRzLnRvTG9jYWxlU3RyaW5nKCl9IHNhdHMgZnJvbSB0aGUgSHViIGZhdWNldC5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgYXdhaXQgdGhpcy5fcmVmcmVzaENsaWVudEJhbGFuY2UodHJ1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdbSFVCXSBEZXNrdG9wIGF1dG8tZmF1Y2V0IHNraXBwZWQ6JywgZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fZGVza3RvcEF1dG9GYXVjZXRCdXN5ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX3JlZnJlc2hDbGllbnRCYWxhbmNlIChmb3JjZVJlZnJlc2ggPSBmYWxzZSkge1xuICAgIGNvbnN0IGlkZW50aXR5ID0gdGhpcy5zdGF0ZS51aUxvY2FsSWRlbnRpdHkgfHwgbnVsbDtcbiAgICBjb25zdCB3YWxsZXQgPSBnZXRTcGVuZFdhbGxldENvbnRleHQoaWRlbnRpdHkgfHwge30pO1xuICAgIGlmICghd2FsbGV0LndhbGxldElkIHx8ICF3YWxsZXQueHB1Yikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNsaWVudEJhbGFuY2U6IG51bGwsIGNsaWVudEJhbGFuY2VMb2FkaW5nOiBmYWxzZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJldlJvdyA9IHRoaXMuc3RhdGUuY2xpZW50QmFsYW5jZTtcbiAgICBjb25zdCBwcmV2V2lkID0gcHJldlJvdyAmJiBwcmV2Um93LndhbGxldElkID8gU3RyaW5nKHByZXZSb3cud2FsbGV0SWQpIDogJyc7XG4gICAgY29uc3QgbmV4dFdpZCA9IFN0cmluZyh3YWxsZXQud2FsbGV0SWQgfHwgJycpO1xuICAgIGlmIChwcmV2V2lkICYmIG5leHRXaWQgJiYgcHJldldpZCAhPT0gbmV4dFdpZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNsaWVudEJhbGFuY2U6IG51bGwgfSk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBjbGllbnRCYWxhbmNlTG9hZGluZzogdHJ1ZSB9KTtcbiAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmICYmIHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgbmV0d29ya1N0YXR1cyA9IGJyaWRnZUluc3RhbmNlICYmIChicmlkZ2VJbnN0YW5jZS5uZXR3b3JrU3RhdHVzIHx8IGJyaWRnZUluc3RhbmNlLmxhc3ROZXR3b3JrU3RhdHVzKTtcbiAgICBjb25zdCBiaXRjb2luID0gcmVzb2x2ZUJpdGNvaW5Gcm9tTmV0d29ya1N0YXR1cyhuZXR3b3JrU3RhdHVzKTtcbiAgICBjb25zdCBuZXR3b3JrID0gKGJpdGNvaW4gJiYgYml0Y29pbi5uZXR3b3JrKSA/IFN0cmluZyhiaXRjb2luLm5ldHdvcmspLnRvTG93ZXJDYXNlKCkgOiAncmVndGVzdCc7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVwc3RyZWFtID0gbG9hZFVwc3RyZWFtU2V0dGluZ3MoKTtcbiAgICAgIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCBmZXRjaFdhbGxldFN1bW1hcnlXaXRoQ2FjaGUodXBzdHJlYW0sIHdhbGxldCwgeyBieXBhc3NDYWNoZTogZm9yY2VSZWZyZXNoLCBuZXR3b3JrIH0pO1xuICAgICAgY29uc3QgYmFsYW5jZVNhdHMgPSBOdW1iZXIoc3VtbWFyeS5iYWxhbmNlU2F0cyA/PyBzdW1tYXJ5LmJhbGFuY2UgPz8gMCk7XG4gICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGJhbGFuY2VTYXRzKSkge1xuICAgICAgICBjb25zdCBjb25maXJtZWRTYXRzID0gTnVtYmVyKHN1bW1hcnkuY29uZmlybWVkU2F0cyA/PyBiYWxhbmNlU2F0cyk7XG4gICAgICAgIGNvbnN0IHVuY29uZmlybWVkU2F0cyA9IE51bWJlcihzdW1tYXJ5LnVuY29uZmlybWVkU2F0cyA/PyAwKTtcbiAgICAgICAgY29uc3QgbmV4dENsaWVudCA9IHtcbiAgICAgICAgICB3YWxsZXRJZDogd2FsbGV0LndhbGxldElkLFxuICAgICAgICAgIGJhbGFuY2VTYXRzLFxuICAgICAgICAgIGNvbmZpcm1lZFNhdHMsXG4gICAgICAgICAgdW5jb25maXJtZWRTYXRzLFxuICAgICAgICAgIGZyb21DYWNoZTogISFzdW1tYXJ5Ll9mcm9tQ2FjaGVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNsaWVudEJhbGFuY2U6IG5leHRDbGllbnQsIGNsaWVudEJhbGFuY2VMb2FkaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgaWYgKGlkZW50aXR5ICYmIFN0cmluZyhpZGVudGl0eS54cHJ2IHx8ICcnKS50cmltKCkpIHtcbiAgICAgICAgICB0cnkgeyBzYXZlU3BlbmRYcHViV2F0Y2hGb3JJZGVudGl0eShpZGVudGl0eSwgd2FsbGV0KTsgfSBjYXRjaCAoXykge31cbiAgICAgICAgfVxuICAgICAgICAvKiBEbyBub3QgZGlzcGF0Y2ggY2xpZW50QmFsYW5jZVVwZGF0ZSBoZXJlOiBCaXRjb2luL1BheW1lbnRzIHNjcmVlbnMgYWxyZWFkeSBlbWl0IGl0IGZvciBCcmlkZ2VcbiAgICAgICAgICogd2FsbGV0IG5vdGljZXMuIFJlLWRpc3BhdGNoaW5nIGFmdGVyIHJlZnJlc2ggZWNob2VkIHRoZSBzYW1lIGxvZ2ljYWwgdXBkYXRlIHR3aWNlIGFuZCBjb3VsZFxuICAgICAgICAgKiBzaGlmdCBjb25maXJtZWQvdW5jb25maXJtZWQgc3BsaXQgYmV0d2VlbiBkdXBsaWNhdGUgZmV0Y2hlcyDihpIgZHVwbGljYXRlIOKAnGluY29taW5n4oCdIHRvYXN0cy4gKi9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBjbGllbnRCYWxhbmNlOiBudWxsLCBjbGllbnRCYWxhbmNlTG9hZGluZzogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSgocHJldikgPT4gKHtcbiAgICAgICAgY2xpZW50QmFsYW5jZTogcHJldi5jbGllbnRCYWxhbmNlLFxuICAgICAgICBjbGllbnRCYWxhbmNlTG9hZGluZzogZmFsc2VcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlTG9ja0lkZW50aXR5ICgpIHtcbiAgICBjb25zdCBsb2NhbCA9IHRoaXMuc3RhdGUudWlMb2NhbElkZW50aXR5O1xuICAgIGlmICghbG9jYWwgfHwgIWxvY2FsLnhwcnYpIHJldHVybjtcbiAgICBsZXQgcGxhaW50ZXh0U3RvcmVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHAgPSByZWFkU3RvcmFnZUpTT04oJ2ZhYnJpYy5pZGVudGl0eS5sb2NhbCcsIG51bGwpO1xuICAgICAgcGxhaW50ZXh0U3RvcmVkID0gISEocCAmJiBmYWJyaWNQbGFpbnRleHRTaWduaW5nVW5sb2NrYWJsZShwKSk7XG4gICAgfSBjYXRjaCAoXykge31cbiAgICBpZiAoIWxvY2FsLnBhc3N3b3JkUHJvdGVjdGVkICYmICFwbGFpbnRleHRTdG9yZWQpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSkge1xuICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZmFicmljLmlkZW50aXR5LnVubG9ja2VkJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5icmlkZ2VSZWYgJiYgdGhpcy5icmlkZ2VSZWYuY3VycmVudCAmJiB0eXBlb2YgdGhpcy5icmlkZ2VSZWYuY3VycmVudC5jbGVhckRlY3J5cHRlZERvY3VtZW50cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0cnkgeyB0aGlzLmJyaWRnZVJlZi5jdXJyZW50LmNsZWFyRGVjcnlwdGVkRG9jdW1lbnRzKCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgICBjb25zdCBuZXh0ID0ge1xuICAgICAgICBpZDogbG9jYWwuaWQsXG4gICAgICAgIHhwdWI6IGxvY2FsLnhwdWIsXG4gICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiAhIWxvY2FsLnBhc3N3b3JkUHJvdGVjdGVkXG4gICAgICB9O1xuICAgICAgaWYgKGxvY2FsLmZhYnJpY0lkZW50aXR5TW9kZSkgbmV4dC5mYWJyaWNJZGVudGl0eU1vZGUgPSBsb2NhbC5mYWJyaWNJZGVudGl0eU1vZGU7XG4gICAgICBpZiAobG9jYWwuZmFicmljSGRSb2xlICE9IG51bGwgJiYgU3RyaW5nKGxvY2FsLmZhYnJpY0hkUm9sZSkudHJpbSgpICE9PSAnJykge1xuICAgICAgICBuZXh0LmZhYnJpY0hkUm9sZSA9IGxvY2FsLmZhYnJpY0hkUm9sZTtcbiAgICAgIH1cbiAgICAgIGlmIChsb2NhbC5mYWJyaWNBY2NvdW50SW5kZXggIT0gbnVsbCkgbmV4dC5mYWJyaWNBY2NvdW50SW5kZXggPSBsb2NhbC5mYWJyaWNBY2NvdW50SW5kZXg7XG4gICAgICBpZiAobG9jYWwubWFzdGVyWHB1YikgbmV4dC5tYXN0ZXJYcHViID0gbG9jYWwubWFzdGVyWHB1YjtcbiAgICAgIGlmIChwbGFpbnRleHRTdG9yZWQgJiYgIWxvY2FsLnBhc3N3b3JkUHJvdGVjdGVkKSB7XG4gICAgICAgIG5leHQucGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICB1aUxvY2FsSWRlbnRpdHk6IG5leHQsXG4gICAgICAgIHVpSGFzTG9ja2VkSWRlbnRpdHk6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tIVUJdJywgJ0Vycm9yIGxvY2tpbmcgaWRlbnRpdHk6Jywgc2FmZUlkZW50aXR5RXJyKGUpKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVCcmlkZ2VTdGF0ZVVwZGF0ZSAobmV3U3RhdGUpIHtcbiAgICBpZiAoIW5ld1N0YXRlIHx8IHR5cGVvZiBuZXdTdGF0ZSAhPT0gJ29iamVjdCcpIHJldHVybjtcbiAgICAvLyBPbmx5IG1lcmdlIEJyaWRnZS1vd25lZCBzdGF0ZTsgbmV2ZXIgb3ZlcndyaXRlIGlkZW50aXR5L2F1dGggc3RhdGUgZnJvbSBCcmlkZ2UuXG4gICAgY29uc3QgYnJpZGdlS2V5cyA9IFsnZGF0YScsICdlcnJvcicsICduZXR3b3JrU3RhdHVzJywgJ3N1YnNjcmlwdGlvbnMnLCAnaXNDb25uZWN0ZWQnLCAnd2VicnRjQ29ubmVjdGVkJywgJ2N1cnJlbnRQYXRoJ107XG4gICAgY29uc3QgcGF0Y2ggPSB7fTtcbiAgICBmb3IgKGNvbnN0IGsgb2YgYnJpZGdlS2V5cykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdTdGF0ZSwgaykpIHBhdGNoW2tdID0gbmV3U3RhdGVba107XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyhwYXRjaCkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShwYXRjaCk7XG4gICAgfVxuICB9XG5cbiAgcmVzcG9uc2VDYXB0dXJlIChhY3Rpb24pIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi5jb250ZW50KSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKGFjdGlvbi5jb250ZW50KTtcblxuICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC5tZXRob2QgPT09ICdKU09OQ2FsbFJlc3VsdCcpIHtcbiAgICAgICAgbGV0IHN0YXR1cyA9IG51bGw7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5wYXJhbXMpICYmIHBheWxvYWQucGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBwYXlsb2FkLnBhcmFtc1twYXlsb2FkLnBhcmFtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAoY2FuZGlkYXRlICYmIHR5cGVvZiBjYW5kaWRhdGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBzdGF0dXMgPSBjYW5kaWRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWQucmVzdWx0ICYmIHR5cGVvZiBwYXlsb2FkLnJlc3VsdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBzdGF0dXMgPSBwYXlsb2FkLnJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgdHJlYXQgSlNPTkNhbGxSZXN1bHQgYXMgYSBuZXR3b3JrIHN0YXR1cyB1cGRhdGUgd2hlbiBpdCBoYXMgdGhlIHJpZ2h0IHNoYXBlLlxuICAgICAgICAvLyBQcmV2ZW50cyBvdmVyd3JpdGluZyBgbmV0d29ya1N0YXR1c2Agd2l0aCBgeyBzdGF0dXM6IFwic3VjY2Vzc1wiIH1gIGZyb20gQWRkUGVlci9SZW1vdmVQZWVyLlxuICAgICAgICBjb25zdCBpc05ldHdvcmtTdGF0dXMgPSBzdGF0dXMgJiYgdHlwZW9mIHN0YXR1cyA9PT0gJ29iamVjdCcgJiYgKHN0YXR1cy5uZXR3b3JrIHx8IEFycmF5LmlzQXJyYXkoc3RhdHVzLnBlZXJzKSk7XG5cbiAgICAgICAgaWYgKGlzTmV0d29ya1N0YXR1cyAmJiBzdGF0dXMuc2V0dXAgJiYgc3RhdHVzLnNldHVwLm5lZWRzU2V0dXApIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbmVlZHNTZXR1cDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc05ldHdvcmtTdGF0dXMgJiYgdGhpcy5wcm9wcy5icmlkZ2VOZXR3b3JrU3RhdHVzVXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5icmlkZ2VOZXR3b3JrU3RhdHVzVXBkYXRlKHN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW0hVQl0nLCAnRXJyb3IgaGFuZGxpbmcgYnJpZGdlIHJlc3BvbnNlOicsIHNhZmVJZGVudGl0eUVycihlcnJvcikpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZWZmZWN0aXZlQXV0aFxuICAgKiBAcGFyYW0ge29iamVjdH0gaWRlbnRpdHlcbiAgICogQHBhcmFtIHtzdHJpbmd9IFthZG1pblBlZXJUb29sc1Rva2VuXSAtIEh1YiBhZG1pbiB0b2tlbiBmb3Igb3BlcmF0b3Itb25seSBwZWVyIHRvb2xzOyBvbWl0IG9uIGAvcGVlcnMvOmlkYC5cbiAgICovXG4gIF9odWJQZWVyVmlldyAoZWZmZWN0aXZlQXV0aCwgaWRlbnRpdHksIGFkbWluUGVlclRvb2xzVG9rZW4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFBlZXJWaWV3XG4gICAgICAgIGF1dGg9e2VmZmVjdGl2ZUF1dGh9XG4gICAgICAgIGlkZW50aXR5PXtpZGVudGl0eX1cbiAgICAgICAgYnJpZGdlPXt0aGlzLnByb3BzLmJyaWRnZX1cbiAgICAgICAgYnJpZGdlUmVmPXt0aGlzLmJyaWRnZVJlZn1cbiAgICAgICAgb25BZGRQZWVyPXsocGVlcikgPT4ge1xuICAgICAgICAgIGlmICghcGVlciB8fCAhdGhpcy5icmlkZ2VSZWYgfHwgIXRoaXMuYnJpZGdlUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5zZW5kQWRkUGVlclJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGJyaWRnZUluc3RhbmNlLnNlbmRBZGRQZWVyUmVxdWVzdChwZWVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIG9uUmVmcmVzaFBlZXJzPXsoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICBpZiAodHlwZW9mIGJyaWRnZUluc3RhbmNlLnNlbmRMaXN0UGVlcnNSZXF1ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5zZW5kTGlzdFBlZXJzUmVxdWVzdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGJyaWRnZUluc3RhbmNlLnNlbmROZXR3b3JrU3RhdHVzUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2Uuc2VuZE5ldHdvcmtTdGF0dXNSZXF1ZXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBvbkRpc2Nvbm5lY3RQZWVyPXsoYWRkcmVzcykgPT4ge1xuICAgICAgICAgIGlmICghYWRkcmVzcyB8fCAhdGhpcy5icmlkZ2VSZWYgfHwgIXRoaXMuYnJpZGdlUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5zZW5kUmVtb3ZlUGVlclJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGJyaWRnZUluc3RhbmNlLnNlbmRSZW1vdmVQZWVyUmVxdWVzdChhZGRyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIG9uU2VuZFBlZXJNZXNzYWdlPXsoYWRkcmVzcywgdGV4dCkgPT4ge1xuICAgICAgICAgIGlmICghYWRkcmVzcyB8fCAhdGV4dCB8fCAhdGhpcy5icmlkZ2VSZWYgfHwgIXRoaXMuYnJpZGdlUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5zZW5kUGVlck1lc3NhZ2VSZXF1ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5zZW5kUGVlck1lc3NhZ2VSZXF1ZXN0KGFkZHJlc3MsIHRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgb25GYWJyaWNQZWVyUmVzeW5jPXsoaWRPckFkZHJlc3MpID0+IHtcbiAgICAgICAgICBpZiAoIWlkT3JBZGRyZXNzIHx8ICF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICBpZiAodHlwZW9mIGJyaWRnZUluc3RhbmNlLnNlbmRGYWJyaWNQZWVyUmVzeW5jUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2Uuc2VuZEZhYnJpY1BlZXJSZXN5bmNSZXF1ZXN0KGlkT3JBZGRyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIG9uU2V0UGVlck5pY2tuYW1lPXsoYWRkcmVzcywgbmlja25hbWUpID0+IHtcbiAgICAgICAgICBpZiAoIWFkZHJlc3MgfHwgIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSB0aGlzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2Uuc2VuZFNldFBlZXJOaWNrbmFtZVJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGJyaWRnZUluc3RhbmNlLnNlbmRTZXRQZWVyTmlja25hbWVSZXF1ZXN0KGFkZHJlc3MsIG5pY2tuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIG9uR2V0UGVlcj17KGFkZHJlc3MpID0+IHtcbiAgICAgICAgICBpZiAoIWFkZHJlc3MgfHwgIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSB0aGlzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2Uuc2VuZEdldFBlZXJSZXF1ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5zZW5kR2V0UGVlclJlcXVlc3QoYWRkcmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgYWRtaW5QZWVyVG9vbHNUb2tlbj17YWRtaW5QZWVyVG9vbHNUb2tlbn1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIF9zaG91bGRTaG93UG9zdFNldHVwSWRlbnRpdHlXaXphcmQgKCkge1xuICAgIGlmICghdGhpcy5zdGF0ZS5zZXR1cENoZWNrZWQgfHwgdGhpcy5zdGF0ZS5uZWVkc1NldHVwKSByZXR1cm4gZmFsc2U7XG4gICAgbGV0IGRpc21pc3NlZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBkaXNtaXNzZWQgPSByZWFkU3RvcmFnZVN0cmluZygnZmFicmljLmh1Yi5pZGVudGl0eVdpemFyZERpc21pc3NlZCcpID09PSAnMSc7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlKSB7XG4gICAgICAgIGlmICh3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZmFicmljLmh1Yi5pZGVudGl0eVdpemFyZERpc21pc3NlZCcpID09PSAnMScpIGRpc21pc3NlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGlzbWlzc2VkKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHAgPSByZWFkU3RvcmFnZUpTT04oJ2ZhYnJpYy5pZGVudGl0eS5sb2NhbCcsIG51bGwpO1xuICAgICAgaWYgKGhhc0NvbXBsZXRlZFBvc3RTZXR1cEJyb3dzZXJJZGVudGl0eShwKSkgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbGV0IHBlbmRpbmcgPSByZWFkU3RvcmFnZVN0cmluZygnZmFicmljLmh1Yi5pZGVudGl0eVdpemFyZFBlbmRpbmcnKSA9PT0gJzEnO1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlKSB7XG4gICAgICAgIGlmICh3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZmFicmljLmh1Yi53YW50SWRlbnRpdHlXaXphcmQnKSA9PT0gJzEnKSBwZW5kaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIGNvbnN0IHN0YXRlRmxhZyA9ICEhdGhpcy5zdGF0ZS5wb3N0U2V0dXBJZGVudGl0eVdpemFyZE9wZW47XG4gICAgcmV0dXJuICEhKHBlbmRpbmcgfHwgc3RhdGVGbGFnKTtcbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgLy8gUHJlZmVyIEJyaWRnZSByZWYgKGxpdmUgZnJvbSBXZWJTb2NrZXQpLCB0aGVuIFJlZHV4LCB0aGVuIGxvY2FsIHN0YXRlXG4gICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSB0aGlzLmJyaWRnZVJlZiAmJiB0aGlzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgIGNvbnN0IG5vZGVQdWJrZXkgPSAoYnJpZGdlSW5zdGFuY2UgJiYgdHlwZW9mIGJyaWRnZUluc3RhbmNlLmdldE5vZGVQdWJrZXkgPT09ICdmdW5jdGlvbicgJiYgYnJpZGdlSW5zdGFuY2UuZ2V0Tm9kZVB1YmtleSgpKTtcbiAgICBjb25zdCBuZXR3b3JrU3RhdHVzID0gYnJpZGdlSW5zdGFuY2UgJiYgKGJyaWRnZUluc3RhbmNlLm5ldHdvcmtTdGF0dXMgfHwgYnJpZGdlSW5zdGFuY2UubGFzdE5ldHdvcmtTdGF0dXMgfHwgbnVsbCk7XG4gICAgY29uc3Qgc2VydmljZXMgPSBuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMuc3RhdGUgJiYgbmV0d29ya1N0YXR1cy5zdGF0ZS5zZXJ2aWNlcztcbiAgICBjb25zdCBiaXRjb2luID0gcmVzb2x2ZUJpdGNvaW5Gcm9tTmV0d29ya1N0YXR1cyhuZXR3b3JrU3RhdHVzKTtcblxuICAgIC8vIElkZW50aXR5IGlzIGxvY2FsLWJyb3dzZXIgaWRlbnRpdHkgb25seS4gRG8gbm90IGZhbGwgYmFjayB0byBwcm9wcyBhdXRoLlxuICAgIGNvbnN0IGxvY2FsID0gdGhpcy5zdGF0ZS51aUxvY2FsSWRlbnRpdHk7XG4gICAgY29uc3QgaGFzTG9jYWwgPSBsb2NhbCAmJiAobG9jYWwuaWQgfHwgbG9jYWwueHB1Yik7XG4gICAgY29uc3QgZWZmZWN0aXZlQXV0aCA9IGhhc0xvY2FsID8gbG9jYWwgOiBudWxsO1xuICAgIC8vIExvY2tlZCBjaGlwOiBkZXJpdmUgb25seSBmcm9tIHNoZWxsIGlkZW50aXR5IGZpZWxkcyDigJQgbmV2ZXIgdHJ1c3Qgb3JwaGFuIHVpSGFzTG9ja2VkSWRlbnRpdHkgd2hlblxuICAgIC8vIGxvY2FsIGlzIGVtcHR5IChUb3BQYW5lbCBzdGlsbCBtZXJnZXMgcGVyc2lzdGVkIHN0b3JhZ2UgaW50byB0aGUgY2hpcCBhbmQgY291bGQgc2hvdyBcIkxvY2tlZFwiXG4gICAgLy8gaWYgaGFzTG9ja2VkSWRlbnRpdHkgc3RheWVkIHRydWUgZnJvbSBhIHN0YWxlIGNhbGxiYWNrKS5cbiAgICBjb25zdCBlZmZlY3RpdmVIYXNMb2NrZWRJZGVudGl0eSA9ICEhKFxuICAgICAgaGFzTG9jYWwgJiZcbiAgICAgICFsb2NhbC54cHJ2ICYmXG4gICAgICAobG9jYWwucGFzc3dvcmRQcm90ZWN0ZWQgfHwgbG9jYWwucGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlKVxuICAgICk7XG4gICAgY29uc3QgcHVibGljSHViVmlzaXRvciA9IGNvbXB1dGVQdWJsaWNIdWJWaXNpdG9yKHtcbiAgICAgIGxvY2FsSWRlbnRpdHk6IGxvY2FsLFxuICAgICAgcHJvcHNBdXRoOiBudWxsXG4gICAgfSk7XG4gICAgY29uc3Qgb3BlbklkZW50aXR5Rm9yR2F0ZSA9ICgpID0+IHRoaXMuX29wZW5JZGVudGl0eU1vZGFsRm9yVXNlcigpO1xuICAgIGNvbnN0IHB2ID0gKGVsKSA9PiB3cmFwUHVibGljVmlzaXRvckdhdGUocHVibGljSHViVmlzaXRvciwgb3BlbklkZW50aXR5Rm9yR2F0ZSwgZWwpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxmYWJyaWMtaW50ZXJmYWNlIGlkPXt0aGlzLmlkfSBjbGFzcz1cImZhYnJpYy1zaXRlXCI+XG4gICAgICAgIDxzdHlsZT5cbiAgICAgICAgICB7YFxuICAgICAgICAgICAgZmFicmljLXJlYWN0LWNvbXBvbmVudCB7XG4gICAgICAgICAgICAgIG1hcmdpbjogMWVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmFkZS1pbiB7XG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogaHViLWZhZGUtaW4gMjIwbXMgZWFzZS1vdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgaHViLWZhZGUtaW4ge1xuICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgycHgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIGB9XG4gICAgICAgIDwvc3R5bGU+XG4gICAgICAgIDxmYWJyaWMtY29udGFpbmVyIGlkPVwicmVhY3QtYXBwbGljYXRpb25cIj5cbiAgICAgICAgICA8ZmFicmljLXJlYWN0LWNvbXBvbmVudCBpZD0nZmFicmljLWh1Yi1hcHBsaWNhdGlvbic+XG4gICAgICAgICAgICA8QnJpZGdlXG4gICAgICAgICAgICAgIHJlZj17dGhpcy5icmlkZ2VSZWZ9XG4gICAgICAgICAgICAgIGF1dGg9e2VmZmVjdGl2ZUF1dGh9XG4gICAgICAgICAgICAgIGRlYnVnPXt0aGlzLnN0YXRlLmRlYnVnfVxuICAgICAgICAgICAgICBodWJBZGRyZXNzPXt0aGlzLnN0YXRlLnVpSHViQWRkcmVzc31cbiAgICAgICAgICAgICAgb25SZXF1aXJlVW5sb2NrPXt0aGlzLm9wZW5JZGVudGl0eU1vZGFsRnJvbUdhdGVkQWN0aW9ufVxuICAgICAgICAgICAgICBvblN0YXRlVXBkYXRlPXt0aGlzLmhhbmRsZUJyaWRnZVN0YXRlVXBkYXRlfVxuICAgICAgICAgICAgICByZXNwb25zZUNhcHR1cmU9e3RoaXMucmVzcG9uc2VDYXB0dXJlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxEZWxlZ2F0aW9uU2lnbmluZ01vZGFsIGJyaWRnZVJlZj17dGhpcy5icmlkZ2VSZWZ9IC8+XG4gICAgICAgICAgICA8RmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlTW9kYWxcbiAgICAgICAgICAgICAgb3Blbj17dGhpcy5zdGF0ZS5mZWRlcmF0aW9uSW52aXRlTW9kYWxPcGVufVxuICAgICAgICAgICAgICBkZXRhaWw9e3RoaXMuc3RhdGUuZmVkZXJhdGlvbkludml0ZURldGFpbH1cbiAgICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7IGZlZGVyYXRpb25JbnZpdGVNb2RhbE9wZW46IGZhbHNlLCBmZWRlcmF0aW9uSW52aXRlRGV0YWlsOiBudWxsIH0pfVxuICAgICAgICAgICAgICBnZXRSZXNwb25kZXJQdWJrZXk9eygpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiID0gdGhpcy5icmlkZ2VSZWYgJiYgdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICBpZiAoYiAmJiB0eXBlb2YgYi5nZXRIdGxjUmVmdW5kUHVibGljS2V5SGV4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwayA9IGIuZ2V0SHRsY1JlZnVuZFB1YmxpY0tleUhleCgpO1xuICAgICAgICAgICAgICAgICAgaWYgKHBrKSByZXR1cm4gcGs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoYiAmJiB0eXBlb2YgYi5nZXROb2RlUHVia2V5ID09PSAnZnVuY3Rpb24nICYmIGIuZ2V0Tm9kZVB1YmtleSgpKSB8fCAnJztcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25TZW5kUGVlck1lc3NhZ2U9eyh0b1BlZXJJZCwgdGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGIgPSB0aGlzLmJyaWRnZVJlZiAmJiB0aGlzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgIGlmIChiICYmIHR5cGVvZiBiLnNlbmRQZWVyTWVzc2FnZVJlcXVlc3QgPT09ICdmdW5jdGlvbicpIGIuc2VuZFBlZXJNZXNzYWdlUmVxdWVzdCh0b1BlZXJJZCwgdGV4dCk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPENvbGxhYm9yYXRpb25JbnZpdGVNb2RhbFxuICAgICAgICAgICAgICBvcGVuPXt0aGlzLnN0YXRlLmNvbGxhYm9yYXRpb25JbnZpdGVNb2RhbE9wZW59XG4gICAgICAgICAgICAgIGRldGFpbD17dGhpcy5zdGF0ZS5jb2xsYWJvcmF0aW9uSW52aXRlRGV0YWlsfVxuICAgICAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB0aGlzLnNldFN0YXRlKHsgY29sbGFib3JhdGlvbkludml0ZU1vZGFsT3BlbjogZmFsc2UsIGNvbGxhYm9yYXRpb25JbnZpdGVEZXRhaWw6IG51bGwgfSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyh0aGlzLnByb3BzLmF1dGggJiYgdGhpcy5wcm9wcy5hdXRoLmxvYWRpbmcpID8gKFxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGhlaWdodDogJzEwMHZoJywgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgICA8TG9hZGVyIGFjdGl2ZSBpbmxpbmU9XCJjZW50ZXJlZFwiIHNpemU9J2h1Z2UnIC8+XG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luOiAwLCB0ZXh0QWxpZ246ICdjZW50ZXInLCBtYXhXaWR0aDogJzIycmVtJywgbGluZUhlaWdodDogMS40NSB9fT5Mb2FkaW5nIHNlc3Npb27igKY8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6ICF0aGlzLnN0YXRlLnNldHVwQ2hlY2tlZCA/IChcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBoZWlnaHQ6ICcxMDB2aCcsIGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgPExvYWRlciBhY3RpdmU9eyF0aGlzLnN0YXRlLnNldHVwU3RhdHVzVGltZWRPdXR9IGlubGluZT1cImNlbnRlcmVkXCIgc2l6ZT0nbGFyZ2UnIC8+XG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luOiAwLCB0ZXh0QWxpZ246ICdjZW50ZXInLCBtYXhXaWR0aDogJzIycmVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnNldHVwU3RhdHVzVGltZWRPdXRcbiAgICAgICAgICAgICAgICAgICAgPyAnQ291bGQgbm90IGNvbmZpcm0gaHViIHNldHVwIHN0YXR1cy4nXG4gICAgICAgICAgICAgICAgICAgIDogJ0NoZWNraW5nIGh1YiBjb25maWd1cmF0aW9u4oCmJ31cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjODg4JywgbWFyZ2luOiAwLCBmb250U2l6ZTogJzAuOWVtJywgdGV4dEFsaWduOiAnY2VudGVyJywgbWF4V2lkdGg6ICcyNHJlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5zZXR1cFN0YXR1c1RpbWVkT3V0XG4gICAgICAgICAgICAgICAgICAgID8gJ1N0aWxsIHdhaXRpbmcgb24gL3NldHRpbmdzIOKAlCByZXRyeSB3aGVuIHRoZSBodWIgaXMgcmVhY2hhYmxlLiBPbmJvYXJkaW5nIGlzIG5vdCBza2lwcGVkIG9uIHRpbWVvdXQuJ1xuICAgICAgICAgICAgICAgICAgICA6ICdGZXRjaGluZyBzZXR1cCBzdGF0dXMgZnJvbSB0aGlzIGh1YiAobm90IHRoZSBXZWJTb2NrZXQgcGF0aCkuJ31cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAge3RoaXMuc3RhdGUuc2V0dXBTdGF0dXNUaW1lZE91dCA/IChcbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzZXR1cFN0YXR1c1RpbWVkT3V0OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1NldHVwU3RhdHVzKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2V0dXBTdGF0dXNTYWZldHlUaW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2V0dXBTdGF0dXNTYWZldHlUaW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldHVwU3RhdHVzU2FmZXR5VGltZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0dXBTdGF0dXNTYWZldHlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKChwcmV2KSA9PiAocHJldi5zZXR1cENoZWNrZWQgPyBudWxsIDogeyBzZXR1cFN0YXR1c1RpbWVkT3V0OiB0cnVlIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDIwMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgUmV0cnlcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiB0aGlzLnN0YXRlLm5lZWRzU2V0dXAgPyAoXG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUucmVxdWlyZXNTZXR1cFVpU2VjcmV0ICYmICF0aGlzLnN0YXRlLnNldHVwVWlWZXJpZmllZCA/IChcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1pbkhlaWdodDogJzEwMHZoJywgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgcGFkZGluZzogJzEuNWVtJywgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcgfX0+XG4gICAgICAgICAgICAgICAgICA8TWVzc2FnZSB3YXJuaW5nIHN0eWxlPXt7IG1heFdpZHRoOiAnMjhyZW0nLCB3aWR0aDogJzEwMCUnIH19PlxuICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+T3BlcmF0b3Igc2V0dXA8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScsIG1hcmdpbkJvdHRvbTogMCwgbGluZUhlaWdodDogMS41IH19PlxuICAgICAgICAgICAgICAgICAgICAgIEVudGVyIHRoZSB2YWx1ZSBvZiA8Y29kZT5GQUJSSUNfSFVCX1NFVFVQX1VJX1NFQ1JFVDwvY29kZT4gZnJvbSB0aGUgc2VydmVyIGVudmlyb25tZW50IHRvIG9wZW4gZmlyc3QtdGltZSBIdWIgY29uZmlndXJhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICAgICAgPEZvcm1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWF4V2lkdGg6ICcyMnJlbScsIHdpZHRoOiAnMTAwJScsIG1hcmdpblRvcDogJzFlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZlcmlmeVNldHVwVWlTZWNyZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJodWItc2V0dXAtdWktc2VjcmV0XCI+U2V0dXAgc2VjcmV0PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiaHViLXNldHVwLXVpLXNlY3JldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnNldHVwVWlHYXRlUGFzc3dvcmR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBzZXR1cFVpR2F0ZVBhc3N3b3JkOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnNldHVwVWlHYXRlRXJyb3IgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmUgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT57dGhpcy5zdGF0ZS5zZXR1cFVpR2F0ZUVycm9yfTwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gcHJpbWFyeSB0eXBlPVwic3VibWl0XCIgbG9hZGluZz17dGhpcy5zdGF0ZS5zZXR1cFVpR2F0ZUJ1c3l9IGRpc2FibGVkPXt0aGlzLnN0YXRlLnNldHVwVWlHYXRlQnVzeX0+XG4gICAgICAgICAgICAgICAgICAgICAgQ29udGludWUgdG8gc2V0dXBcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxPbmJvYXJkaW5nXG4gICAgICAgICAgICAgICAgbm9kZU5hbWU9XCJIdWJcIlxuICAgICAgICAgICAgICAgIHJlcXVpcmVzU2V0dXBVaVNlY3JldD17dGhpcy5zdGF0ZS5yZXF1aXJlc1NldHVwVWlTZWNyZXR9XG4gICAgICAgICAgICAgICAgb25Db25maWd1cmF0aW9uQ29tcGxldGU9eyhyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvcGVuV2l6YXJkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRSZWMgPSByZWFkU3RvcmFnZUpTT04oJ2ZhYnJpYy5pZGVudGl0eS5sb2NhbCcsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgIG9wZW5XaXphcmQgPSAhaGFzQ29tcGxldGVkUG9zdFNldHVwQnJvd3NlcklkZW50aXR5KGlkUmVjKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2ZhYnJpYy5odWIud2FudElkZW50aXR5V2l6YXJkJywgb3BlbldpemFyZCA/ICcxJyA6ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlU3RvcmFnZVN0cmluZygnZmFicmljLmh1Yi5pZGVudGl0eVdpemFyZFBlbmRpbmcnLCBvcGVuV2l6YXJkID8gJzEnIDogJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcGVuV2l6YXJkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlU3RvcmFnZVN0cmluZygnZmFicmljLmh1Yi5pZGVudGl0eVdpemFyZERpc21pc3NlZCcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgYWRtaW5Ub2tlbjogcmVzdWx0LnRva2VuLFxuICAgICAgICAgICAgICAgICAgICAgIGFkbWluVG9rZW5FeHBpcmVzQXQ6IHJlc3VsdC5leHBpcmVzQXQsXG4gICAgICAgICAgICAgICAgICAgICAgbmVlZHNTZXR1cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgcG9zdFNldHVwSWRlbnRpdHlXaXphcmRPcGVuOiBvcGVuV2l6YXJkXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVTdG9yYWdlU3RyaW5nKCdmYWJyaWMuaHViLmFkbWluVG9rZW4nLCByZXN1bHQudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5leHBpcmVzQXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVN0b3JhZ2VTdHJpbmcoJ2ZhYnJpYy5odWIuYWRtaW5Ub2tlbkV4cGlyZXNBdCcsIFN0cmluZyhyZXN1bHQuZXhwaXJlc0F0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkgOiB0aGlzLl9zaG91bGRTaG93UG9zdFNldHVwSWRlbnRpdHlXaXphcmQoKSA/IChcbiAgICAgICAgICAgICAgPEZhYnJpY1Bvc3RTZXR1cElkZW50aXR5V2l6YXJkXG4gICAgICAgICAgICAgICAgaHViQWRtaW5Ub2tlbj17dGhpcy5zdGF0ZS5hZG1pblRva2VufVxuICAgICAgICAgICAgICAgIGN1cnJlbnRJZGVudGl0eT17bG9jYWx9XG4gICAgICAgICAgICAgICAgb25Mb2NhbElkZW50aXR5Q2hhbmdlPXt0aGlzLl9oYW5kbGVJZGVudGl0eU1hbmFnZXJMb2NhbENoYW5nZX1cbiAgICAgICAgICAgICAgICBvblVubG9ja1N1Y2Nlc3M9e3RoaXMuX2hhbmRsZUlkZW50aXR5TWFuYWdlclVubG9ja1N1Y2Nlc3N9XG4gICAgICAgICAgICAgICAgb25Mb2NrU3RhdGVDaGFuZ2U9e3RoaXMuX2hhbmRsZUlkZW50aXR5TWFuYWdlckxvY2tTdGF0ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICBvbkZvcmdldElkZW50aXR5PXt0aGlzLl9oYW5kbGVJZGVudGl0eU1hbmFnZXJGb3JnZXR9XG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZT17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdG9yYWdlU3RyaW5nKCdmYWJyaWMuaHViLmlkZW50aXR5V2l6YXJkUGVuZGluZycsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdmYWJyaWMuaHViLndhbnRJZGVudGl0eVdpemFyZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHBvc3RTZXR1cElkZW50aXR5V2l6YXJkT3BlbjogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvblNraXA9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RvcmFnZVN0cmluZygnZmFicmljLmh1Yi5pZGVudGl0eVdpemFyZERpc21pc3NlZCcsICcxJyk7XG4gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RvcmFnZVN0cmluZygnZmFicmljLmh1Yi5pZGVudGl0eVdpemFyZFBlbmRpbmcnLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZmFicmljLmh1Yi5pZGVudGl0eVdpemFyZERpc21pc3NlZCcsICcxJyk7XG4gICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2ZhYnJpYy5odWIud2FudElkZW50aXR5V2l6YXJkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgcG9zdFNldHVwSWRlbnRpdHlXaXphcmRPcGVuOiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEJyb3dzZXJSb3V0ZXIgdXNlVHJhbnNpdGlvbnM+XG4gICAgICAgICAgICAgICAgPFRvYXN0Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbj1cImJvdHRvbS1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgbmV3ZXN0T25Ub3BcbiAgICAgICAgICAgICAgICAgIGNsb3NlT25DbGlja1xuICAgICAgICAgICAgICAgICAgcGF1c2VPbkZvY3VzTG9zc1xuICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlXG4gICAgICAgICAgICAgICAgICBwYXVzZU9uSG92ZXJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxUb3BQYW5lbFxuICAgICAgICAgICAgICAgICAgaHViQWRkcmVzcz17dGhpcy5zdGF0ZS51aUh1YkFkZHJlc3N9XG4gICAgICAgICAgICAgICAgICBhdXRoPXtlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgYWRtaW5Ub2tlbj17dGhpcy5zdGF0ZS5hZG1pblRva2VufVxuICAgICAgICAgICAgICAgICAgbG9jYWxJZGVudGl0eT17bG9jYWx9XG4gICAgICAgICAgICAgICAgICBoYXNMb2NhbElkZW50aXR5PXshIWhhc0xvY2FsfVxuICAgICAgICAgICAgICAgICAgaGFzTG9ja2VkSWRlbnRpdHk9e2VmZmVjdGl2ZUhhc0xvY2tlZElkZW50aXR5fVxuICAgICAgICAgICAgICAgICAgcHVibGljSHViVmlzaXRvcj17cHVibGljSHViVmlzaXRvcn1cbiAgICAgICAgICAgICAgICAgIGJpdGNvaW49e2JpdGNvaW59XG4gICAgICAgICAgICAgICAgICBjbGllbnRCYWxhbmNlPXt0aGlzLnN0YXRlLmNsaWVudEJhbGFuY2V9XG4gICAgICAgICAgICAgICAgICBjbGllbnRCYWxhbmNlTG9hZGluZz17dGhpcy5zdGF0ZS5jbGllbnRCYWxhbmNlTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIG9uUmVmcmVzaEJhbGFuY2U9eygpID0+IHRoaXMuX3JlZnJlc2hDbGllbnRCYWxhbmNlKHRydWUpfVxuICAgICAgICAgICAgICAgICAgb25VbmxvY2tJZGVudGl0eT17KCkgPT4gdGhpcy5fb3BlbklkZW50aXR5TW9kYWxGb3JVc2VyKCl9XG4gICAgICAgICAgICAgICAgICBvbkxvY2tJZGVudGl0eT17KCkgPT4gdGhpcy5faGFuZGxlTG9ja0lkZW50aXR5KCl9XG4gICAgICAgICAgICAgICAgICBvbkxvZ2luPXt0aGlzLnJlcXVlc3RMb2dpbn1cbiAgICAgICAgICAgICAgICAgIG9uTWFuYWdlSWRlbnRpdHk9e3RoaXMub3BlbklkZW50aXR5TWFuYWdlcn1cbiAgICAgICAgICAgICAgICAgIG9uUHJvZmlsZT17dGhpcy5vcGVuSWRlbnRpdHlNYW5hZ2VyfVxuICAgICAgICAgICAgICAgICAgb25TaWduTWVzc2FnZT17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7IHVpU2lnbk1lc3NhZ2VPcGVuOiB0cnVlIH0pfVxuICAgICAgICAgICAgICAgICAgb25EZXN0cm95SWRlbnRpdHk9eygpID0+IHRoaXMuc2V0U3RhdGUoeyB1aURlc3Ryb3lJZGVudGl0eUNvbmZpcm1PcGVuOiB0cnVlIH0pfVxuICAgICAgICAgICAgICAgICAgb25PcGVuU2V0dGluZ3M9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdWYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgdWlTZXR0aW5nc09wZW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgdWlIdWJBZGRyZXNzRHJhZnQ6IHRoaXMuc3RhdGUudWlIdWJBZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgIHVpQWR2YW5jZWRNb2RlRHJhZnQ6ICEhdWYuYWR2YW5jZWRNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgIHVpSHViQWRkcmVzc0Vycm9yOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxIdWJBbGVydFN0YWNrTG9jYXRpb25HYXRlIGFkbWluVG9rZW49e3RoaXMuc3RhdGUuYWRtaW5Ub2tlbn0gLz5cbiAgICAgICAgICAgICAgICB7cHVibGljSHViVmlzaXRvciA/IG51bGwgOiAoXG4gICAgICAgICAgICAgICAgICA8RmVkZXJhdGlvbkludml0ZU5vdGlmaWNhdGlvbkJhbm5lclxuICAgICAgICAgICAgICAgICAgICBkZXRhaWw9e3RoaXMuc3RhdGUuZmVkZXJhdGlvbkludml0ZUJhbm5lckRldGFpbH1cbiAgICAgICAgICAgICAgICAgICAgb25SZXZpZXc9e3RoaXMuX29wZW5GZWRlcmF0aW9uSW52aXRlUmV2aWV3fVxuICAgICAgICAgICAgICAgICAgICBvbkRpc21pc3M9e3RoaXMuX2Rpc21pc3NGZWRlcmF0aW9uSW52aXRlQmFubmVyfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgICAgPE1vZGFsXG4gICAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgICAgY2xvc2VPbkRpbW1lckNsaWNrPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIGNsb3NlT25Fc2NhcGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgb3Blbj17ISF0aGlzLnN0YXRlLnVpSWRlbnRpdHlPcGVufVxuICAgICAgICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7IHVpSWRlbnRpdHlPcGVuOiBmYWxzZSB9KX1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImZhYnJpYy1pZGVudGl0eS1tb2RhbC1oZWFkaW5nXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbjogJzFyZW0gYXV0bycsIG1heFdpZHRoOiAnY2FsYygxMDB2dyAtIDEuNXJlbSknIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPE1vZGFsLkNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgICAgICAgICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtlZmZlY3RpdmVBdXRoICYmIGVmZmVjdGl2ZUF1dGguZmFicmljSWRlbnRpdHlNb2RlID09PSAnYWNjb3VudCcgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiAnMXJlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcwLjc1cmVtIDFyZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAncmdiYSgwLDAsMCwwLjAzKScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzAuMjg1NzE0MjlyZW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgcmdiYSgzNCwzNiwzOCwuMTUpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmFicmljSWRlbnRpdHlBY2NvdW50Q29udHJvbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxJZGVudGl0eT17ZWZmZWN0aXZlQXV0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25GYWJyaWNBY2NvdW50Q2hhbmdlPXt0aGlzLl9mYWJyaWNBY2NvdW50Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNmVtIDAgMCcsIGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45ZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBPbi1jaGFpbiBiYWxhbmNlIGluIHRoZSB0b3AgYmFyIGFuZCBCaXRjb2luIHJlY2VpdmUvc3BlbmQgcGF0aHMgdXNlIHRoZSBzYW1lIEJJUDQ0IGFjY291bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgdGhlIEZhYnJpYyBhY2NvdW50IHlvdSBzZWxlY3QgaGVyZSAoPGNvZGU+bS80NCZhcG9zOy8wJmFwb3M7L24mYXBvczs8L2NvZGU+IHVuZGVyIHlvdXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyIGtleSkuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8SWRlbnRpdHlNYW5hZ2VyXG4gICAgICAgICAgICAgICAgICAgICAga2V5PVwiZmFicmljLWlkZW50aXR5LW1hbmFnZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGh1YkFkbWluVG9rZW49e3RoaXMuc3RhdGUuYWRtaW5Ub2tlbn1cbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SWRlbnRpdHk9e3RoaXMuc3RhdGUudWlMb2NhbElkZW50aXR5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uTG9jYWxJZGVudGl0eUNoYW5nZT17dGhpcy5faGFuZGxlSWRlbnRpdHlNYW5hZ2VyTG9jYWxDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgb25Mb2NrU3RhdGVDaGFuZ2U9e3RoaXMuX2hhbmRsZUlkZW50aXR5TWFuYWdlckxvY2tTdGF0ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICBvblVubG9ja1N1Y2Nlc3M9e3RoaXMuX2hhbmRsZUlkZW50aXR5TWFuYWdlclVubG9ja1N1Y2Nlc3N9XG4gICAgICAgICAgICAgICAgICAgICAgb25Gb3JnZXRJZGVudGl0eT17dGhpcy5faGFuZGxlSWRlbnRpdHlNYW5hZ2VyRm9yZ2V0fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPE1vZGFsLkFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gYmFzaWMgb25DbGljaz17dGhpcy5fY2xvc2VIdWJJZGVudGl0eU1vZGFsfT5cbiAgICAgICAgICAgICAgICAgICAgICBDbG9zZVxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvTW9kYWwuQWN0aW9ucz5cbiAgICAgICAgICAgICAgICA8L01vZGFsPlxuXG4gICAgICAgICAgICAgICAgPE1vZGFsXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgb3Blbj17ISF0aGlzLnN0YXRlLnVpU2V0dGluZ3NPcGVufVxuICAgICAgICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7IHVpU2V0dGluZ3NPcGVuOiBmYWxzZSwgdWlIdWJBZGRyZXNzRXJyb3I6IG51bGwgfSl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEhlYWRlciBpY29uPlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY29nXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3NcbiAgICAgICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkFkdmFuY2VkIE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXshIXRoaXMuc3RhdGUudWlBZHZhbmNlZE1vZGVEcmFmdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCBkYXRhKSA9PiB0aGlzLnNldFN0YXRlKHsgdWlBZHZhbmNlZE1vZGVEcmFmdDogISEoZGF0YSAmJiBkYXRhLmNoZWNrZWQpIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nLCBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93cyBhZHZhbmNlZCBodWIgc3VyZmFjZXMgKFBlZXJzLCBDb250cmFjdHMsIE1vcmUgdG9vbHMsIGFjdGl2aXR5L25hdiBleHRyYXMpLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkh1YiBhZGRyZXNzPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImhvc3Q6cG9ydCAoZS5nLiBsb2NhbGhvc3Q6Nzc3Nykgb3IgaHR0cHM6Ly9ob3N0OnBvcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS51aUh1YkFkZHJlc3NEcmFmdCB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgdWlIdWJBZGRyZXNzRHJhZnQ6IGUudGFyZ2V0LnZhbHVlLCB1aUh1YkFkZHJlc3NFcnJvcjogbnVsbCB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJywgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyB1cGRhdGVzIHRoZSBXZWJTb2NrZXQgZW5kcG9pbnQgdXNlZCBieSB0aGUgVUkuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnVpSHViQWRkcmVzc0Vycm9yID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZSBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnVpSHViQWRkcmVzc0Vycm9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgICAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgIDxNb2RhbC5BY3Rpb25zPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIGJhc2ljIG9uQ2xpY2s9eygpID0+IHRoaXMuc2V0U3RhdGUoeyB1aVNldHRpbmdzT3BlbjogZmFsc2UsIHVpSHViQWRkcmVzc0Vycm9yOiBudWxsIH0pfT5cbiAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmF3ID0gKHRoaXMuc3RhdGUudWlIdWJBZGRyZXNzRHJhZnQgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmF3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyB1aUh1YkFkZHJlc3NFcnJvcjogJ0h1YiBhZGRyZXNzIGlzIHJlcXVpcmVkLicgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVTdG9yYWdlU3RyaW5nKCdmYWJyaWMuaHViLmFkZHJlc3MnLCByYXcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SHViVWlGZWF0dXJlRmxhZygnYWR2YW5jZWRNb2RlJywgISF0aGlzLnN0YXRlLnVpQWR2YW5jZWRNb2RlRHJhZnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHVpSHViQWRkcmVzczogcmF3LCB1aVNldHRpbmdzT3BlbjogZmFsc2UsIHVpSHViQWRkcmVzc0Vycm9yOiBudWxsIH0sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5icmlkZ2VSZWYgJiYgdGhpcy5icmlkZ2VSZWYuY3VycmVudCAmJiB0eXBlb2YgdGhpcy5icmlkZ2VSZWYuY3VycmVudC5zZXRIdWJBZGRyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvayA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQuc2V0SHViQWRkcmVzcyhyYXcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykgdGhpcy5zZXRTdGF0ZSh7IHVpSHViQWRkcmVzc0Vycm9yOiAnSW52YWxpZCBodWIgYWRkcmVzcyBmb3JtYXQuJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgU2F2ZVxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvTW9kYWwuQWN0aW9ucz5cbiAgICAgICAgICAgICAgICA8L01vZGFsPlxuXG4gICAgICAgICAgICAgICAgPE1vZGFsXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgb3Blbj17ISF0aGlzLnN0YXRlLnVpU2lnbk1lc3NhZ2VPcGVufVxuICAgICAgICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHVpU2lnbk1lc3NhZ2VPcGVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdWlTaWduTWVzc2FnZVRleHQ6ICcnLFxuICAgICAgICAgICAgICAgICAgICB1aVNpZ25NZXNzYWdlUmVzdWx0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB1aVZlcmlmeU1lc3NhZ2VUZXh0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgdWlWZXJpZnlTaWduYXR1cmU6ICcnLFxuICAgICAgICAgICAgICAgICAgICB1aVZlcmlmeVB1YmxpY0tleTogJycsXG4gICAgICAgICAgICAgICAgICAgIHVpVmVyaWZ5UmVzdWx0OiBudWxsXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8SGVhZGVyIGljb24+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJwZW5jaWxcIiAvPlxuICAgICAgICAgICAgICAgICAgICBTaWduICYgdmVyaWZ5IG1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPk1lc3NhZ2UgdG8gc2lnbjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBtZXNzYWdlIHRvIHNpZ25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS51aVNpZ25NZXNzYWdlVGV4dCB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgdWlTaWduTWVzc2FnZVRleHQ6IGUudGFyZ2V0LnZhbHVlLCB1aVNpZ25NZXNzYWdlUmVzdWx0OiBudWxsIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUudWlTaWduTWVzc2FnZVJlc3VsdCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZSBjbGFzc05hbWU9XCJmYWRlLWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5QdWJsaWMga2V5IChoZXgpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzAuNWVtJywgZm9udEZhbWlseTogJ21vbm9zcGFjZScsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57dGhpcy5zdGF0ZS51aVNpZ25NZXNzYWdlUmVzdWx0LnB1YmxpY0tleX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY29weVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4geyB0cnkgeyBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLnN0YXRlLnVpU2lnbk1lc3NhZ2VSZXN1bHQucHVibGljS2V5KTsgfSBjYXRjaCAoZSkge30gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNpZ25hdHVyZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICcwLjVlbScsIGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3RoaXMuc3RhdGUudWlTaWduTWVzc2FnZVJlc3VsdC5zaWduYXR1cmV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNvcHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHsgdHJ5IHsgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5zdGF0ZS51aVNpZ25NZXNzYWdlUmVzdWx0LnNpZ25hdHVyZSk7IH0gY2F0Y2ggKGUpIHt9IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIGRpdmlkaW5nIHN0eWxlPXt7IG1hcmdpblRvcDogJzEuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIFZlcmlmeSBzaWduYXR1cmVcbiAgICAgICAgICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOTVlbScsIG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHlvdSB1c2UgPHN0cm9uZz5leHRlcm5hbCBzaWduaW5nPC9zdHJvbmc+IChkZXNrdG9wIGRlbGVnYXRpb24pLCB0aGUgSHViIHJlY29yZHMgYSBGYWJyaWMgbWVzc2FnZSBhbmQgdGhlIHNhbWUgbWVzc2FnZSwgcHVibGljIGtleSwgYW5kIHNpZ25hdHVyZSBhcHBlYXIgaGVyZSBmb3IgdmVyaWZpY2F0aW9u4oCUc2FtZSBmbG93IGFzIGxvY2FsIHNpZ25pbmcuXG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPk1lc3NhZ2U8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTWVzc2FnZSB0aGF0IHdhcyBzaWduZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS51aVZlcmlmeU1lc3NhZ2VUZXh0IHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyB1aVZlcmlmeU1lc3NhZ2VUZXh0OiBlLnRhcmdldC52YWx1ZSwgdWlWZXJpZnlSZXN1bHQ6IG51bGwgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5QdWJsaWMga2V5IChoZXgpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNvbXByZXNzZWQgcHVibGljIGtleSAoNjYgaGV4IGNoYXJzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnVpVmVyaWZ5UHVibGljS2V5IHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyB1aVZlcmlmeVB1YmxpY0tleTogZS50YXJnZXQudmFsdWUsIHVpVmVyaWZ5UmVzdWx0OiBudWxsIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2lnbmF0dXJlIChoZXgpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNpZ25hdHVyZSAoMTI4IGhleCBjaGFycylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS51aVZlcmlmeVNpZ25hdHVyZSB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgdWlWZXJpZnlTaWduYXR1cmU6IGUudGFyZ2V0LnZhbHVlLCB1aVZlcmlmeVJlc3VsdDogbnVsbCB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnVpVmVyaWZ5UmVzdWx0ID09PSB0cnVlICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxNZXNzYWdlIHN1Y2Nlc3MgY2xhc3NOYW1lPVwiZmFkZS1pblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY2hlY2tcIiBjb2xvcj1cImdyZWVuXCIgc2l6ZT1cImxhcmdlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmF0dXJlIGlzIHZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS51aVZlcmlmeVJlc3VsdCA9PT0gZmFsc2UgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmUgY2xhc3NOYW1lPVwiZmFkZS1pblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY2xvc2VcIiBjb2xvcj1cInJlZFwiIHNpemU9XCJsYXJnZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFNpZ25hdHVyZSBpcyBpbnZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPE1vZGFsLkFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gYmFzaWMgb25DbGljaz17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgdWlTaWduTWVzc2FnZU9wZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgIHVpU2lnbk1lc3NhZ2VUZXh0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB1aVNpZ25NZXNzYWdlUmVzdWx0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIHVpVmVyaWZ5TWVzc2FnZVRleHQ6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIHVpVmVyaWZ5U2lnbmF0dXJlOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB1aVZlcmlmeVB1YmxpY0tleTogJycsXG4gICAgICAgICAgICAgICAgICAgICAgdWlWZXJpZnlSZXN1bHQ6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSl9PlxuICAgICAgICAgICAgICAgICAgICAgIENsb3NlXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9eyEhdGhpcy5zdGF0ZS51aVNpZ25NZXNzYWdlQnVzeX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gKHRoaXMuc3RhdGUudWlTaWduTWVzc2FnZVRleHQgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJpZGdlID0gdGhpcy5icmlkZ2VSZWYgJiYgdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZURlbGVnYXRpb24gPSBoYXNFeHRlcm5hbFNpZ25pbmdEZWxlZ2F0aW9uKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlICYmIHR5cGVvZiBicmlkZ2Uuc2lnbkFyYml0cmFyeVRleHREZWxlZ2F0ZWQgPT09ICdmdW5jdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlRGVsZWdhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdWlTaWduTWVzc2FnZUJ1c3k6IHRydWUsIHVpU2lnbk1lc3NhZ2VSZXN1bHQ6IG51bGwgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0LmluZm8oJ0NvbmZpcm0gc2lnbmluZyBpbiB0aGUgRmFicmljIEh1YiBkZXNrdG9wIGFwcOKApicsIHsgZHVyYXRpb246IDEyMDAwLCBoZWFkZXI6ICdFeHRlcm5hbCBzaWduaW5nJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBicmlkZ2Uuc2lnbkFyYml0cmFyeVRleHREZWxlZ2F0ZWQodGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW0hVQl0nLCAnRGVsZWdhdGVkIHNpZ24gZmFpbGVkOicsIHNhZmVJZGVudGl0eUVycihlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlTaWduTWVzc2FnZUJ1c3k6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlTaWduTWVzc2FnZVJlc3VsdDogcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlWZXJpZnlNZXNzYWdlVGV4dDogcmVzdWx0ID8gdGV4dCA6IHRoaXMuc3RhdGUudWlWZXJpZnlNZXNzYWdlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpVmVyaWZ5UHVibGljS2V5OiByZXN1bHQgPyByZXN1bHQucHVibGljS2V5IDogdGhpcy5zdGF0ZS51aVZlcmlmeVB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpVmVyaWZ5U2lnbmF0dXJlOiByZXN1bHQgPyByZXN1bHQuc2lnbmF0dXJlIDogdGhpcy5zdGF0ZS51aVZlcmlmeVNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpVmVyaWZ5UmVzdWx0OiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0Lndhcm5pbmcoJ1NpZ25pbmcgd2FzIGNhbmNlbGxlZCBvciB0aW1lZCBvdXQuJywgeyBoZWFkZXI6ICdFeHRlcm5hbCBzaWduaW5nJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGJyaWRnZSAmJiB0eXBlb2YgYnJpZGdlLnNpZ25BcmJpdHJhcnlUZXh0ID09PSAnZnVuY3Rpb24nID8gYnJpZGdlLnNpZ25BcmJpdHJhcnlUZXh0KHRleHQpIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICB1aVNpZ25NZXNzYWdlUmVzdWx0OiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVpVmVyaWZ5TWVzc2FnZVRleHQ6IHJlc3VsdCA/IHRleHQgOiB0aGlzLnN0YXRlLnVpVmVyaWZ5TWVzc2FnZVRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVpVmVyaWZ5UHVibGljS2V5OiByZXN1bHQgPyByZXN1bHQucHVibGljS2V5IDogdGhpcy5zdGF0ZS51aVZlcmlmeVB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdWlWZXJpZnlTaWduYXR1cmU6IHJlc3VsdCA/IHJlc3VsdC5zaWduYXR1cmUgOiB0aGlzLnN0YXRlLnVpVmVyaWZ5U2lnbmF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB1aVZlcmlmeVJlc3VsdDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ISgodGhpcy5zdGF0ZS51aVNpZ25NZXNzYWdlVGV4dCB8fCAnJykudHJpbSgpKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJwZW5jaWxcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIFNpZ25cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSAodGhpcy5zdGF0ZS51aVZlcmlmeU1lc3NhZ2VUZXh0IHx8ICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWcgPSAodGhpcy5zdGF0ZS51aVZlcmlmeVNpZ25hdHVyZSB8fCAnJykudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHViID0gKHRoaXMuc3RhdGUudWlWZXJpZnlQdWJsaWNLZXkgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbXNnIHx8ICFzaWcgfHwgIXB1YikgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJpZGdlID0gdGhpcy5icmlkZ2VSZWYgJiYgdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGJyaWRnZSAmJiB0eXBlb2YgYnJpZGdlLnZlcmlmeUFyYml0cmFyeVRleHQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBicmlkZ2UudmVyaWZ5QXJiaXRyYXJ5VGV4dChtc2csIHNpZywgcHViKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdWlWZXJpZnlSZXN1bHQ6IHJlc3VsdCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshKCh0aGlzLnN0YXRlLnVpVmVyaWZ5TWVzc2FnZVRleHQgfHwgJycpLnRyaW0oKSkgfHwgISgodGhpcy5zdGF0ZS51aVZlcmlmeVNpZ25hdHVyZSB8fCAnJykudHJpbSgpKSB8fCAhKCh0aGlzLnN0YXRlLnVpVmVyaWZ5UHVibGljS2V5IHx8ICcnKS50cmltKCkpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNoZWNrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBWZXJpZnlcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L01vZGFsLkFjdGlvbnM+XG4gICAgICAgICAgICAgICAgPC9Nb2RhbD5cblxuICAgICAgICAgICAgICAgIDxNb2RhbFxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInRpbnlcIlxuICAgICAgICAgICAgICAgICAgb3Blbj17ISF0aGlzLnN0YXRlLnVpRGVzdHJveUlkZW50aXR5Q29uZmlybU9wZW59XG4gICAgICAgICAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB0aGlzLnNldFN0YXRlKHsgdWlEZXN0cm95SWRlbnRpdHlDb25maXJtT3BlbjogZmFsc2UgfSl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEhlYWRlciBpY29uPlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwidHJhc2hcIiBjb2xvcj1cInJlZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIERlc3Ryb3kgaWRlbnRpdHlcbiAgICAgICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxwPlRoaXMgd2lsbCByZW1vdmUgeW91ciBsb2NhbCBpZGVudGl0eSBhbmQgYWxsIGRvY3VtZW50cyBmcm9tIHRoaXMgYnJvd3Nlci4gVGhpcyBjYW5ub3QgYmUgdW5kb25lLiBNYWtlIHN1cmUgeW91IGhhdmUgYmFja2VkIHVwIHlvdXIgc2VlZCBwaHJhc2UuPC9wPlxuICAgICAgICAgICAgICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPE1vZGFsLkFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b24gYmFzaWMgb25DbGljaz17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7IHVpRGVzdHJveUlkZW50aXR5Q29uZmlybU9wZW46IGZhbHNlIH0pfT5cbiAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJyaWRnZVJlZiAmJiB0aGlzLmJyaWRnZVJlZi5jdXJyZW50ICYmIHR5cGVvZiB0aGlzLmJyaWRnZVJlZi5jdXJyZW50LmNsZWFyQWxsRG9jdW1lbnRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQuY2xlYXJBbGxEb2N1bWVudHMoKTsgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IGNsZWFyU3BlbmRYcHViV2F0Y2goKTsgfSBjYXRjaCAoXykge31cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IHRoaXMuX2NsZWFyVW5sb2NrZWRTZXNzaW9uT25DbG9zZSgpOyB9IGNhdGNoIChfKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJGYWJyaWNCcm93c2VySWRlbnRpdHlMb2NhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVN0b3JhZ2VLZXkoREVMRUdBVElPTl9TVE9SQUdFX0tFWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU3RvcmFnZUtleSgnZmFicmljLmxpbmtlZERldmljZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlEZWxlZ2F0aW9uU3RvcmFnZUNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTdG9yYWdlS2V5KCdmYWJyaWM6ZG9jdW1lbnRzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaHJvbWUgIT09ICd1bmRlZmluZWQnICYmIGNocm9tZS5zdG9yYWdlICYmIGNocm9tZS5zdG9yYWdlLmxvY2FsICYmIGNocm9tZS5zdG9yYWdlLmxvY2FsLnJlbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyb21lLnN0b3JhZ2UubG9jYWwucmVtb3ZlKFsnZmFicmljLmlkZW50aXR5LmV4dCddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdWlMb2NhbElkZW50aXR5OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB1aUhhc0xvY2tlZElkZW50aXR5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdWlJZGVudGl0eU9wZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB1aURlc3Ryb3lJZGVudGl0eUNvbmZpcm1PcGVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdWlTaWduTWVzc2FnZU9wZW46IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInRyYXNoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBEZXN0cm95XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9Nb2RhbC5BY3Rpb25zPlxuICAgICAgICAgICAgICAgIDwvTW9kYWw+XG5cbiAgICAgICAgICAgICAgICA8Um91dGVzPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17KFxuICAgICAgICAgICAgICAgICAgICAgIDxIb21lXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoPXtlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljSHViVmlzaXRvcj17cHVibGljSHViVmlzaXRvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoQ29udHJhY3Q9e3RoaXMucHJvcHMuZmV0Y2hDb250cmFjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYWN0cz17dGhpcy5wcm9wcy5jb250cmFjdHN9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2U9e3RoaXMucHJvcHMuYnJpZGdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlUmVmPXt0aGlzLmJyaWRnZVJlZn1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRGlzY292ZXJXZWJSVENQZWVycz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5kaXNjb3ZlckFuZENvbm5lY3RUb1BlZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2UuZGlzY292ZXJBbmRDb25uZWN0VG9QZWVycygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25SZXB1Ymxpc2hXZWJSVENPZmZlcj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5wdWJsaXNoV2ViUlRDT2ZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5wdWJsaXNoV2ViUlRDT2ZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29ubmVjdFdlYlJUQ1BlZXI9eyhwZWVySWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSAocGVlcklkIHx8ICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaWQgfHwgIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5jb25uZWN0VG9XZWJSVENQZWVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2UuY29ubmVjdFRvV2ViUlRDUGVlcihpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkRpc2Nvbm5lY3RBbGxXZWJSVENQZWVycz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5kaXNjb25uZWN0QWxsV2ViUlRDUGVlcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5kaXNjb25uZWN0QWxsV2ViUlRDUGVlcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VuZFdlYlJUQ1Rlc3RQaW5nPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5icmlkZ2VSZWYgfHwgIXRoaXMuYnJpZGdlUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSB0aGlzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJyaWRnZUluc3RhbmNlLmJyb2FkY2FzdFRvV2ViUlRDUGVlcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5icm9hZGNhc3RUb1dlYlJUQ1BlZXJzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdwaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25Ub2dnbGVXZWJSVENDaGF0T25seT17KGVuYWJsZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxhZyA9ICEhZW5hYmxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHdlYnJ0Y0NoYXRPbmx5OiBmbGFnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5zZXRXZWJSVENDaGF0T25seSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZUluc3RhbmNlLnNldFdlYlJUQ0NoYXRPbmx5KGZsYWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25SZXF1aXJlVW5sb2NrPXt0aGlzLm9wZW5JZGVudGl0eU1vZGFsRnJvbUdhdGVkQWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgb25SZWZyZXNoTmV0d29ya1N0YXR1cz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5zZW5kTmV0d29ya1N0YXR1c1JlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5zZW5kTmV0d29ya1N0YXR1c1JlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdlYnJ0Y0NoYXRPbmx5PXt0aGlzLnN0YXRlLndlYnJ0Y0NoYXRPbmx5fVxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICAgICAgICAgICAgICBhZG1pblRva2VuPXt0aGlzLnN0YXRlLmFkbWluVG9rZW59XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9mZWF0dXJlc1wiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9eyhcbiAgICAgICAgICAgICAgICAgICAgICA8VWlGbGFnUm91dGUgZmxhZz1cImZlYXR1cmVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmVhdHVyZXNQYWdlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9VaUZsYWdSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9hY3Rpdml0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17cHYoKFxuICAgICAgICAgICAgICAgICAgICAgIDxVaUZsYWdSb3V0ZSBmbGFnPVwiYWN0aXZpdGllc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEFjdGl2aXRpZXNIb21lXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZT17dGhpcy5wcm9wcy5icmlkZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZVJlZj17dGhpcy5icmlkZ2VSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluVG9rZW49e3RoaXMuc3RhdGUuYWRtaW5Ub2tlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHk9e2xvY2FsIHx8IGVmZmVjdGl2ZUF1dGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVxdWlyZVVubG9jaz17dGhpcy5vcGVuSWRlbnRpdHlNb2RhbEZyb21HYXRlZEFjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9VaUZsYWdSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9e3B2KChcbiAgICAgICAgICAgICAgICAgICAgICA8VWlGbGFnUm91dGUgZmxhZz1cImFjdGl2aXRpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxOb3RpZmljYXRpb25zSG9tZSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVWlGbGFnUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL3NlcnZpY2VzL2JpdGNvaW5cIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtwdigoXG4gICAgICAgICAgICAgICAgICAgICAgPEJpdGNvaW5Ib21lV2l0aE5hdlxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aD17ZWZmZWN0aXZlQXV0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aXR5PXtsb2NhbCB8fCBlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlPXt0aGlzLnByb3BzLmJyaWRnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZVJlZj17dGhpcy5icmlkZ2VSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICBhZG1pblRva2VuPXt0aGlzLnN0YXRlLmFkbWluVG9rZW59XG4gICAgICAgICAgICAgICAgICAgICAgICBiaXRjb2luUGFnZT1cImRhc2hib2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9zZXJ2aWNlcy9wYXlqb2luXCIgZWxlbWVudD17PE5hdmlnYXRlUGF5am9pblNwYUFsaWFzIC8+fSAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvc2VydmljZXMvYml0Y29pbi9ibG9ja3NcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtwdigoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJiaXRjb2luRXhwbG9yZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCaXRjb2luQmxvY2tMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGg9e2VmZmVjdGl2ZUF1dGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aXR5PXtsb2NhbCB8fCBlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRjb2luPXtiaXRjb2lufVxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2U9e3RoaXMucHJvcHMuYnJpZGdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VSZWY9e3RoaXMuYnJpZGdlUmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pblRva2VuPXt0aGlzLnN0YXRlLmFkbWluVG9rZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1VpRmxhZ1JvdXRlPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9zZXJ2aWNlcy9iaXRjb2luL2ZhdWNldFwiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9e3B2KChcbiAgICAgICAgICAgICAgICAgICAgICA8RmF1Y2V0SG9tZVxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aD17ZWZmZWN0aXZlQXV0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aXR5PXtsb2NhbCB8fCBlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgYml0Y29pbj17Yml0Y29pbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZT17dGhpcy5wcm9wcy5icmlkZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VSZWY9e3RoaXMuYnJpZGdlUmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5Ub2tlbj17dGhpcy5zdGF0ZS5hZG1pblRva2VufVxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtwdigoXG4gICAgICAgICAgICAgICAgICAgICAgPEJpdGNvaW5UcmFuc2FjdGlvbnNIb21lXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoPXtlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHk9e2xvY2FsIHx8IGVmZmVjdGl2ZUF1dGh9XG4gICAgICAgICAgICAgICAgICAgICAgICBiaXRjb2luPXtiaXRjb2lufVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlPXt0aGlzLnByb3BzLmJyaWRnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZVJlZj17dGhpcy5icmlkZ2VSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICBhZG1pblRva2VuPXt0aGlzLnN0YXRlLmFkbWluVG9rZW59XG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9zZXJ2aWNlcy9iaXRjb2luL2Jsb2Nrcy86YmxvY2toYXNoXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17cHYoKFxuICAgICAgICAgICAgICAgICAgICAgIDxVaUZsYWdSb3V0ZSBmbGFnPVwiYml0Y29pbkV4cGxvcmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Qml0Y29pbkJsb2NrVmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoPXtlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eT17bG9jYWwgfHwgZWZmZWN0aXZlQXV0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlPXt0aGlzLnByb3BzLmJyaWRnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlUmVmPXt0aGlzLmJyaWRnZVJlZn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVWlGbGFnUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL3NlcnZpY2VzL2JpdGNvaW4vcmVzb3VyY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17cHYoKFxuICAgICAgICAgICAgICAgICAgICAgIDxVaUZsYWdSb3V0ZSBmbGFnPVwiYml0Y29pblJlc291cmNlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEJpdGNvaW5SZXNvdXJjZXNIb21lXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGg9e2VmZmVjdGl2ZUF1dGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aXR5PXtsb2NhbCB8fCBlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRjb2luPXtiaXRjb2lufVxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2U9e3RoaXMucHJvcHMuYnJpZGdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VSZWY9e3RoaXMuYnJpZGdlUmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9VaUZsYWdSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvc2VydmljZXMvYml0Y29pbi9wYXltZW50c1wiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9ezxOYXZpZ2F0ZVBheW1lbnRzTGVnYWN5VG9DYW5vbmljYWwgLz59XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvcGF5bWVudHNcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtwdigoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJiaXRjb2luUGF5bWVudHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCaXRjb2luUGF5bWVudHNIb21lUm91dGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aD17ZWZmZWN0aXZlQXV0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHk9e2xvY2FsIHx8IGVmZmVjdGl2ZUF1dGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJpdGNvaW49e2JpdGNvaW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZT17dGhpcy5wcm9wcy5icmlkZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZVJlZj17dGhpcy5icmlkZ2VSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluVG9rZW49e3RoaXMuc3RhdGUuYWRtaW5Ub2tlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVWlGbGFnUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kc1wiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9e3B2KChcbiAgICAgICAgICAgICAgICAgICAgICA8VWlGbGFnUm91dGUgZmxhZz1cImJpdGNvaW5Dcm93ZGZ1bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDcm93ZGZ1bmRpbmdIb21lXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGg9e2VmZmVjdGl2ZUF1dGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aXR5PXtsb2NhbCB8fCBlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRjb2luPXtiaXRjb2lufVxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2U9e3RoaXMucHJvcHMuYnJpZGdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VSZWY9e3RoaXMuYnJpZGdlUmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pblRva2VuPXt0aGlzLnN0YXRlLmFkbWluVG9rZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVxdWlyZVVubG9jaz17dGhpcy5vcGVuSWRlbnRpdHlNb2RhbEZyb21HYXRlZEFjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVWlGbGFnUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL3NlcnZpY2VzL2JpdGNvaW4vaW52b2ljZXNcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtwdigoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJiaXRjb2luSW52b2ljZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJbnZvaWNlTGlzdEhvbWVSb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoPXtlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eT17bG9jYWwgfHwgZWZmZWN0aXZlQXV0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYml0Y29pbj17Yml0Y29pbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlPXt0aGlzLnByb3BzLmJyaWRnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlUmVmPXt0aGlzLmJyaWRnZVJlZn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5Ub2tlbj17dGhpcy5zdGF0ZS5hZG1pblRva2VufVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9VaUZsYWdSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvc2VydmljZXMvYml0Y29pbi9saWdodG5pbmdcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtwdigoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJiaXRjb2luTGlnaHRuaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGlnaHRuaW5nSG9tZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoPXtlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eT17bG9jYWwgfHwgZWZmZWN0aXZlQXV0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYml0Y29pbj17Yml0Y29pbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlPXt0aGlzLnByb3BzLmJyaWRnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlUmVmPXt0aGlzLmJyaWRnZVJlZn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5Ub2tlbj17dGhpcy5zdGF0ZS5hZG1pblRva2VufVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9VaUZsYWdSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvc2VydmljZXMvbGlnaHRuaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17cHYoKFxuICAgICAgICAgICAgICAgICAgICAgIDxVaUZsYWdSb3V0ZSBmbGFnPVwiYml0Y29pbkxpZ2h0bmluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPExpZ2h0bmluZ0hvbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aD17ZWZmZWN0aXZlQXV0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHk9e2xvY2FsIHx8IGVmZmVjdGl2ZUF1dGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJpdGNvaW49e2JpdGNvaW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZT17dGhpcy5wcm9wcy5icmlkZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZVJlZj17dGhpcy5icmlkZ2VSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluVG9rZW49e3RoaXMuc3RhdGUuYWRtaW5Ub2tlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVWlGbGFnUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLzp0eGhhc2hcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtwdigoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJiaXRjb2luRXhwbG9yZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCaXRjb2luVHJhbnNhY3Rpb25WaWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGg9e2VmZmVjdGl2ZUF1dGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aXR5PXtsb2NhbCB8fCBlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2U9e3RoaXMucHJvcHMuYnJpZGdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VSZWY9e3RoaXMuYnJpZGdlUmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9VaUZsYWdSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvc2VydmljZXMvYml0Y29pbi9jaGFubmVscy86aWRcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtwdigoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJiaXRjb2luTGlnaHRuaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2hhbm5lbFZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aD17ZWZmZWN0aXZlQXV0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHk9e2xvY2FsIHx8IGVmZmVjdGl2ZUF1dGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1VpRmxhZ1JvdXRlPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9zZXJ2aWNlcy9zaWRlY2hhaW5cIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXsoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJzaWRlY2hhaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxOYXZpZ2F0ZSB0bz1cIi9zaWRlY2hhaW5zXCIgcmVwbGFjZSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVWlGbGFnUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvc2lkZWNoYWluXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17KFxuICAgICAgICAgICAgICAgICAgICAgIDxVaUZsYWdSb3V0ZSBmbGFnPVwic2lkZWNoYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TmF2aWdhdGUgdG89XCIvc2lkZWNoYWluc1wiIHJlcGxhY2UgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1VpRmxhZ1JvdXRlPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL3NpZGVjaGFpbnNcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtwdigoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJzaWRlY2hhaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTaWRlY2hhaW5Ib21lXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGg9e2VmZmVjdGl2ZUF1dGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aXR5PXtsb2NhbCB8fCBlZmZlY3RpdmVBdXRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2U9e3RoaXMucHJvcHMuYnJpZGdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VSZWY9e3RoaXMuYnJpZGdlUmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBhZG1pblRva2VuPXt0aGlzLnN0YXRlLmFkbWluVG9rZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1VpRmxhZ1JvdXRlPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9wZWVyc1wiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9e3B2KChcbiAgICAgICAgICAgICAgICAgICAgICA8UGVlcnNGZWF0dXJlUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGVlckxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dGg9e2VmZmVjdGl2ZUF1dGh9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2U9e3RoaXMucHJvcHMuYnJpZGdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlUmVmPXt0aGlzLmJyaWRnZVJlZn1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkUGVlcj17KHBlZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwZWVyIHx8ICF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2Uuc2VuZEFkZFBlZXJSZXF1ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2Uuc2VuZEFkZFBlZXJSZXF1ZXN0KHBlZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25SZWZyZXNoUGVlcnM9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2Uuc2VuZExpc3RQZWVyc1JlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5zZW5kTGlzdFBlZXJzUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2Uuc2VuZE5ldHdvcmtTdGF0dXNSZXF1ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2Uuc2VuZE5ldHdvcmtTdGF0dXNSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkRpc2Nvbm5lY3RQZWVyPXsoYWRkcmVzcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkZHJlc3MgfHwgIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5zZW5kUmVtb3ZlUGVlclJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5zZW5kUmVtb3ZlUGVlclJlcXVlc3QoYWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvblNlbmRQZWVyTWVzc2FnZT17KGFkZHJlc3MsIHRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzIHx8ICF0ZXh0IHx8ICF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2Uuc2VuZFBlZXJNZXNzYWdlUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZUluc3RhbmNlLnNlbmRQZWVyTWVzc2FnZVJlcXVlc3QoYWRkcmVzcywgdGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkZhYnJpY1BlZXJSZXN5bmM9eyhpZE9yQWRkcmVzcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlkT3JBZGRyZXNzIHx8ICF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2Uuc2VuZEZhYnJpY1BlZXJSZXN5bmNSZXF1ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2Uuc2VuZEZhYnJpY1BlZXJSZXN5bmNSZXF1ZXN0KGlkT3JBZGRyZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU2V0UGVlck5pY2tuYW1lPXsoYWRkcmVzcywgbmlja25hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzIHx8ICF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2Uuc2VuZFNldFBlZXJOaWNrbmFtZVJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5zZW5kU2V0UGVlck5pY2tuYW1lUmVxdWVzdChhZGRyZXNzLCBuaWNrbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkRpc2NvdmVyV2ViUlRDUGVlcnM9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2UuZGlzY292ZXJBbmRDb25uZWN0VG9QZWVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZUluc3RhbmNlLmRpc2NvdmVyQW5kQ29ubmVjdFRvUGVlcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVwdWJsaXNoV2ViUlRDT2ZmZXI9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2UucHVibGlzaFdlYlJUQ09mZmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2UucHVibGlzaFdlYlJUQ09mZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNvbm5lY3RXZWJSVENQZWVyPXsocGVlcklkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gKHBlZXJJZCB8fCAnJykudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlkIHx8ICF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2UuY29ubmVjdFRvV2ViUlRDUGVlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZUluc3RhbmNlLmNvbm5lY3RUb1dlYlJUQ1BlZXIoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25EaXNjb25uZWN0V2ViUlRDUGVlcj17KHBlZXJJZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IChwZWVySWQgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpZCB8fCAhdGhpcy5icmlkZ2VSZWYgfHwgIXRoaXMuYnJpZGdlUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSB0aGlzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJyaWRnZUluc3RhbmNlLmRpc2Nvbm5lY3RXZWJSVENQZWVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2UuZGlzY29ubmVjdFdlYlJUQ1BlZXIoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25EaXNjb25uZWN0QWxsV2ViUlRDUGVlcnM9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2UuZGlzY29ubmVjdEFsbFdlYlJUQ1BlZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2UuZGlzY29ubmVjdEFsbFdlYlJUQ1BlZXJzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvblNlbmRXZWJSVENUZXN0UGluZz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5icm9hZGNhc3RUb1dlYlJUQ1BlZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2UuYnJvYWRjYXN0VG9XZWJSVENQZWVycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAncGluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluUGVlclRvb2xzVG9rZW49e1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmFkbWluVG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gcmVhZFN0b3JhZ2VTdHJpbmcoJ2ZhYnJpYy5odWIuYWRtaW5Ub2tlbicpIDogJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblNlbmRGbHVzaENoYWluVG9UcnVzdGVkUGVlcnM9eyhib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLnN0YXRlLmFkbWluVG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyByZWFkU3RvcmFnZVN0cmluZygnZmFicmljLmh1Yi5hZG1pblRva2VuJykgOiAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0IHx8ICFib2R5IHx8ICF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2Uuc2VuZEZsdXNoQ2hhaW5Ub1RydXN0ZWRQZWVyc1JlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5zZW5kRmx1c2hDaGFpblRvVHJ1c3RlZFBlZXJzUmVxdWVzdChib2R5LCB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9QZWVyc0ZlYXR1cmVSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvcGVlcnMvOmlkXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17cHYoKFxuICAgICAgICAgICAgICAgICAgICAgIDxQZWVyc0ZlYXR1cmVSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLl9odWJQZWVyVmlldyhlZmZlY3RpdmVBdXRoLCBsb2NhbCB8fCBlZmZlY3RpdmVBdXRoLCB1bmRlZmluZWQpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvUGVlcnNGZWF0dXJlUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL3NldHRpbmdzL2FkbWluL3BlZXJzLzppZFwiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9e3B2KChcbiAgICAgICAgICAgICAgICAgICAgICA8UGVlcnNGZWF0dXJlUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5faHViUGVlclZpZXcoZWZmZWN0aXZlQXV0aCwgbG9jYWwgfHwgZWZmZWN0aXZlQXV0aCwgdGhpcy5zdGF0ZS5hZG1pblRva2VuKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1BlZXJzRmVhdHVyZVJvdXRlPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9kb2N1bWVudHNcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXsoXG4gICAgICAgICAgICAgICAgICAgICAgPERvY3VtZW50TGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlPXt0aGlzLnByb3BzLmJyaWRnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZVJlZj17dGhpcy5icmlkZ2VSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eT17bG9jYWwgfHwgZWZmZWN0aXZlQXV0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTGlzdERvY3VtZW50cz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5zZW5kTGlzdERvY3VtZW50c1JlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5zZW5kTGlzdERvY3VtZW50c1JlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTG9jYWxEb2N1bWVudD17KGRvYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5hZGRMb2NhbERvY3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2UuYWRkTG9jYWxEb2N1bWVudChkb2MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25QdWJsaXNoTG9jYWxEb2N1bWVudD17KGRvYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5zZW5kUHVibGlzaERvY3VtZW50UmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZUluc3RhbmNlLnNlbmRQdWJsaXNoRG9jdW1lbnRSZXF1ZXN0KGRvYy5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNyZWF0ZURvY3VtZW50PXsoZG9jKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5icmlkZ2VSZWYgfHwgIXRoaXMuYnJpZGdlUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSB0aGlzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJyaWRnZUluc3RhbmNlLnNlbmRDcmVhdGVEb2N1bWVudFJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5zZW5kQ3JlYXRlRG9jdW1lbnRSZXF1ZXN0KGRvYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL2RvY3VtZW50cy86aWRcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXsoXG4gICAgICAgICAgICAgICAgICAgICAgPERvY3VtZW50Vmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlPXt0aGlzLnByb3BzLmJyaWRnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZVJlZj17dGhpcy5icmlkZ2VSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eT17bG9jYWwgfHwgZWZmZWN0aXZlQXV0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJpdGNvaW49e2JpdGNvaW59XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNEb2N1bWVudEtleT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICEhKGJyaWRnZUluc3RhbmNlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGJyaWRnZUluc3RhbmNlLmhhc0RvY3VtZW50RW5jcnlwdGlvbktleSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZUluc3RhbmNlLmhhc0RvY3VtZW50RW5jcnlwdGlvbktleSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25SZXF1ZXN0VW5sb2NrPXt0aGlzLm9wZW5JZGVudGl0eU1vZGFsRnJvbUdhdGVkQWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgb25HZXREb2N1bWVudD17KGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5icmlkZ2VSZWYgfHwgIXRoaXMuYnJpZGdlUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSB0aGlzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJyaWRnZUluc3RhbmNlLnNlbmRHZXREb2N1bWVudFJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5zZW5kR2V0RG9jdW1lbnRSZXF1ZXN0KGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uR2V0RGVjcnlwdGVkQ29udGVudD17KGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5icmlkZ2VSZWYgfHwgIXRoaXMuYnJpZGdlUmVmLmN1cnJlbnQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYnJpZGdlSW5zdGFuY2UuZ2V0RGVjcnlwdGVkRG9jdW1lbnRDb250ZW50ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBicmlkZ2VJbnN0YW5jZS5nZXREZWNyeXB0ZWREb2N1bWVudENvbnRlbnQoaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uVW5sb2NrSHRsY0RvY3VtZW50PXthc3luYyAoZG9jSWQsIHByZWltYWdlSGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5icmlkZ2VSZWYgfHwgIXRoaXMuYnJpZGdlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnQnJpZGdlIG5vdCByZWFkeS4nIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSB0aGlzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJyaWRnZUluc3RhbmNlLnVubG9ja0h0bGNFbmNyeXB0ZWREb2N1bWVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdIVExDIHVubG9jayBub3QgYXZhaWxhYmxlLicgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnJpZGdlSW5zdGFuY2UudW5sb2NrSHRsY0VuY3J5cHRlZERvY3VtZW50KGRvY0lkLCBwcmVpbWFnZUhleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25QdWJsaXNoRG9jdW1lbnQ9eyhpZCwgb3B0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYnJpZGdlUmVmIHx8ICF0aGlzLmJyaWRnZVJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5zZW5kUHVibGlzaERvY3VtZW50UmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZUluc3RhbmNlLnNlbmRQdWJsaXNoRG9jdW1lbnRSZXF1ZXN0KGlkLCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVxdWVzdFB1cmNoYXNlSW52b2ljZT17KGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5icmlkZ2VSZWYgfHwgIXRoaXMuYnJpZGdlUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSB0aGlzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJyaWRnZUluc3RhbmNlLnNlbmRDcmVhdGVQdXJjaGFzZUludm9pY2VSZXF1ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2Uuc2VuZENyZWF0ZVB1cmNoYXNlSW52b2ljZVJlcXVlc3QoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGFpbVB1cmNoYXNlPXsoaWQsIHR4aWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyaWRnZUluc3RhbmNlID0gdGhpcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5zZW5kQ2xhaW1QdXJjaGFzZVJlcXVlc3QgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGJyaWRnZUluc3RhbmNlLnNlbmRDbGFpbVB1cmNoYXNlUmVxdWVzdChpZCwgdHhpZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSh7IGVycm9yOiAnQ2xhaW0gbm90IGF2YWlsYWJsZScgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25SZXF1ZXN0RGlzdHJpYnV0ZUludm9pY2U9eyhpZCwgY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5icmlkZ2VSZWYgfHwgIXRoaXMuYnJpZGdlUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSB0aGlzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJyaWRnZUluc3RhbmNlLnNlbmRDcmVhdGVEaXN0cmlidXRlSW52b2ljZVJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VJbnN0YW5jZS5zZW5kQ3JlYXRlRGlzdHJpYnV0ZUludm9pY2VSZXF1ZXN0KGlkLCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25EaXN0cmlidXRlRG9jdW1lbnQ9eyhpZCwgY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5icmlkZ2VSZWYgfHwgIXRoaXMuYnJpZGdlUmVmLmN1cnJlbnQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2Uuc2VuZERpc3RyaWJ1dGVEb2N1bWVudFJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnJpZGdlSW5zdGFuY2Uuc2VuZERpc3RyaWJ1dGVEb2N1bWVudFJlcXVlc3QoaWQsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25TZW5kRGlzdHJpYnV0ZVByb3Bvc2FsPXsocGVlcktleSwgcHJvcG9zYWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJyaWRnZVJlZiB8fCAhdGhpcy5icmlkZ2VSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHRoaXMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYnJpZGdlSW5zdGFuY2Uuc2VuZFNlbmREaXN0cmlidXRlUHJvcG9zYWxSZXF1ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJpZGdlSW5zdGFuY2Uuc2VuZFNlbmREaXN0cmlidXRlUHJvcG9zYWxSZXF1ZXN0KHBlZXJLZXksIHByb3Bvc2FsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5Ub2tlbj17dGhpcy5zdGF0ZS5hZG1pblRva2VufVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvc2V0dGluZ3MvYWRtaW4vYmVhY29uLWZlZGVyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXsoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJzaWRlY2hhaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCZWFjb25GZWRlcmF0aW9uSG9tZSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVWlGbGFnUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvc2V0dGluZ3MvYWRtaW5cIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXs8QWRtaW5Ib21lIGFkbWluVG9rZW49e3RoaXMuc3RhdGUuYWRtaW5Ub2tlbn0gLz59XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvZmVkZXJhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9eyhcbiAgICAgICAgICAgICAgICAgICAgICA8VWlGbGFnUm91dGUgZmxhZz1cInNpZGVjaGFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE5hdmlnYXRlIHRvPVwiL2ZlZGVyYXRpb25zXCIgcmVwbGFjZSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVWlGbGFnUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvZmVkZXJhdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtwdigoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJzaWRlY2hhaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGZWRlcmF0aW9uc0hvbWUgYWRtaW5Ub2tlbj17dGhpcy5zdGF0ZS5hZG1pblRva2VufSBicmlkZ2VSZWY9e3RoaXMuYnJpZGdlUmVmfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVWlGbGFnUm91dGU+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL3NldHRpbmdzL2ZlZGVyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXtwdigoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJzaWRlY2hhaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZXR0aW5nc0ZlZGVyYXRpb25Ib21lIGFkbWluVG9rZW49e3RoaXMuc3RhdGUuYWRtaW5Ub2tlbn0gYnJpZGdlUmVmPXt0aGlzLmJyaWRnZVJlZn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1VpRmxhZ1JvdXRlPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9zZXR0aW5ncy9iaXRjb2luLXdhbGxldFwiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9e3B2KDxTZXR0aW5nc0JpdGNvaW5XYWxsZXQgaWRlbnRpdHk9e2xvY2FsIHx8IGVmZmVjdGl2ZUF1dGh9IC8+KX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9zZXR0aW5ncy9zZWN1cml0eVwiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9ezxTZWN1cml0eUhvbWUgLz59XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvYWRtaW4vYmVhY29uLWZlZGVyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXsoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJzaWRlY2hhaW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxOYXZpZ2F0ZSB0bz1cIi9zZXR0aW5ncy9hZG1pbi9iZWFjb24tZmVkZXJhdGlvblwiIHJlcGxhY2UgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1VpRmxhZ1JvdXRlPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL2FkbWluXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17PE5hdmlnYXRlIHRvPVwiL3NldHRpbmdzL2FkbWluXCIgcmVwbGFjZSAvPn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9zZXR0aW5ncy9jb2xsYWJvcmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17KFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIodGhpcy5zdGF0ZS5hZG1pblRva2VuKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBwdigoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDb2xsYWJvcmF0aW9uSG9tZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZVJlZj17dGhpcy5icmlkZ2VSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5Ub2tlbj17dGhpcy5zdGF0ZS5hZG1pblRva2VufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZGlyZWN0IG11c3Qgbm90IHNpdCBpbnNpZGUgUHVibGljVmlzaXRvckdhdGUg4oCUIHRoZSBnYXRlIHJlcGxhY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZHJlbiB3aXRoIGEgc2lnbi1pbiBwYW5lbCBhbmQgd291bGQgbGVhdmUgdGhlIFVSTCBvbiAvY29sbGFib3JhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIDogKDxOYXZpZ2F0ZSB0bz1cIi9zZXR0aW5nc1wiIHJlcGxhY2UgLz4pXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvc2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXs8U2V0dGluZ3NIb21lIC8+fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL3Nlc3Npb25zLzpzZXNzaW9uSWRcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXs8U2VjdXJpdHlTZXNzaW9uSG9tZSAvPn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9zZXNzaW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9ezxOYXZpZ2F0ZSB0bz1cIi9zZXR0aW5ncy9zZWN1cml0eVwiIHJlcGxhY2UgLz59XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvc2VjdXJpdHlcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXs8TmF2aWdhdGUgdG89XCIvc2V0dGluZ3Mvc2VjdXJpdHlcIiByZXBsYWNlIC8+fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL2FjdGl2aXR5XCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17PE5hdmlnYXRlQWN0aXZpdHlUb0FjdGl2aXRpZXMgLz59XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvcGVlclwiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9ezxOYXZpZ2F0ZVBlZXJSb290QWxpYXMgLz59XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvcGVlci86aWRcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXs8TmF2aWdhdGVQZWVyRGV0YWlsQWxpYXMgLz59XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvaG9tZVwiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9ezxOYXZpZ2F0ZSB0bz1cIi9cIiByZXBsYWNlIC8+fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL3dhbGxldFwiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9ezxOYXZpZ2F0ZSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9uc1wiIHJlcGxhY2UgLz59XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvYml0Y29pblwiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9ezxOYXZpZ2F0ZSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgcmVwbGFjZSAvPn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9jcm93ZGZ1bmRzXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17KFxuICAgICAgICAgICAgICAgICAgICAgIDxVaUZsYWdSb3V0ZSBmbGFnPVwiYml0Y29pbkNyb3dkZnVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE5hdmlnYXRlIHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kc1wiIHJlcGxhY2UgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1VpRmxhZ1JvdXRlPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL2ludm9pY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17KFxuICAgICAgICAgICAgICAgICAgICAgIDxVaUZsYWdSb3V0ZSBmbGFnPVwiYml0Y29pbkludm9pY2VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TmF2aWdhdGUgdG89XCIvc2VydmljZXMvYml0Y29pbi9pbnZvaWNlcyNmYWJyaWMtaW52b2ljZXMtdGFiLWRlbW9cIiByZXBsYWNlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9VaUZsYWdSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9yZXNvdXJjZXNcIlxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50PXsoXG4gICAgICAgICAgICAgICAgICAgICAgPFVpRmxhZ1JvdXRlIGZsYWc9XCJiaXRjb2luUmVzb3VyY2VzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TmF2aWdhdGUgdG89XCIvc2VydmljZXMvYml0Y29pbi9yZXNvdXJjZXNcIiByZXBsYWNlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9VaUZsYWdSb3V0ZT5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi90eC86dHhoYXNoXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17PE5hdmlnYXRlTGVnYWN5Qml0Y29pblR4QWxpYXMgLz59XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvYmxvY2svOmJsb2NraGFzaFwiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9ezxOYXZpZ2F0ZUxlZ2FjeUJpdGNvaW5CbG9ja0FsaWFzIC8+fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL2RvY3VtZW50LzppZFwiXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ9ezxOYXZpZ2F0ZURvY3VtZW50c0RldGFpbEFsaWFzIC8+fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxSb3V0ZVxuICAgICAgICAgICAgICAgICAgICBwYXRoPVwiL2RvY3VtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17PE5hdmlnYXRlIHRvPVwiL2RvY3VtZW50c1wiIHJlcGxhY2UgLz59XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlXG4gICAgICAgICAgICAgICAgICAgIHBhdGg9XCIvY29udHJhY3RzXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17cHYoPENvbnRyYWN0c0hvbWUgey4uLnRoaXMucHJvcHN9IC8+KX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8Um91dGVcbiAgICAgICAgICAgICAgICAgICAgcGF0aD1cIi9jb250cmFjdHMvOmlkXCJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudD17cHYoPENvbnRyYWN0VmlldyB7Li4udGhpcy5wcm9wc30gYWRtaW5Ub2tlbj17dGhpcy5zdGF0ZS5hZG1pblRva2VufSAvPil9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPFJvdXRlIHBhdGg9XCIqXCIgZWxlbWVudD17PFVua25vd25Sb3V0ZVNoZWxsIC8+fSAvPlxuICAgICAgICAgICAgICAgIDwvUm91dGVzPlxuICAgICAgICAgICAgICAgIDxCb3R0b21QYW5lbFxuICAgICAgICAgICAgICAgICAgcHVia2V5PXtub2RlUHVia2V5fVxuICAgICAgICAgICAgICAgICAgYWRtaW5Ub2tlbj17dGhpcy5zdGF0ZS5hZG1pblRva2VufVxuICAgICAgICAgICAgICAgICAgcHVibGljSHViVmlzaXRvcj17cHVibGljSHViVmlzaXRvcn1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Jyb3dzZXJSb3V0ZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZmFicmljLXJlYWN0LWNvbXBvbmVudD5cbiAgICAgICAgPC9mYWJyaWMtY29udGFpbmVyPlxuICAgICAgPC9mYWJyaWMtaW50ZXJmYWNlPlxuICAgIClcbiAgfVxuXG4gIF9nZXRIVE1MICgpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJlbmRlcigpO1xuICAgIHJldHVybiByZW5kZXJUb1N0cmluZyhjb21wb25lbnQpO1xuICB9XG5cbiAgX3RvSFRNTCAoKSB7XG4gICAgcmV0dXJuIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3RyaW5nKHRoaXMucmVuZGVyKCkpO1xuICB9XG5cbiAgdG9IVE1MRnJhZ21lbnQgKCkge1xuICAgIHJldHVybiB0aGlzLl90b0hUTUwoKTtcbiAgfVxuXG4gIHRvSFRNTCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RvSFRNTCgpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSHViSW50ZXJmYWNlO1xuIl0sIm5hbWVzIjpbIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfcmVnZW5lcmF0b3IiLCJTeW1ib2wiLCJuIiwiaXRlcmF0b3IiLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfdG9QcmltaXRpdmUiLCJfdHlwZW9mIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJfaW5oZXJpdHMiLCJfc2V0UHJvdG90eXBlT2YiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImhhc093blByb3BlcnR5IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJuZXh0IiwiaXNBcnJheSIsIl9yZXF1aXJlIiwicmVxdWlyZSIsIkJSQU5EX05BTUUiLCJCUk9XU0VSX0RBVEFCQVNFX05BTUUiLCJCUk9XU0VSX0RBVEFCQVNFX1RPS0VOX1RBQkxFIiwiX3JlcXVpcmUyIiwiREVMRUdBVElPTl9TVE9SQUdFX0tFWSIsIm5vdGlmeURlbGVnYXRpb25TdG9yYWdlQ2hhbmdlZCIsImhhc0V4dGVybmFsU2lnbmluZ0RlbGVnYXRpb24iLCJfcmVxdWlyZTMiLCJzYWZlSWRlbnRpdHlFcnIiLCJfcmVxdWlyZTQiLCJyZWFkU3RvcmFnZVN0cmluZyIsInJlYWRTdG9yYWdlSlNPTiIsIndyaXRlU3RvcmFnZVN0cmluZyIsIndyaXRlU3RvcmFnZUpTT04iLCJyZW1vdmVTdG9yYWdlS2V5IiwiY2xlYXJGYWJyaWNCcm93c2VySWRlbnRpdHlMb2NhbCIsIl9yZXF1aXJlNSIsImhhc0NvbXBsZXRlZFBvc3RTZXR1cEJyb3dzZXJJZGVudGl0eSIsIl9yZXF1aXJlNiIsImxvYWRIdWJVaUZlYXR1cmVGbGFncyIsInNldEh1YlVpRmVhdHVyZUZsYWciLCJzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncyIsImZldGNoUGVyc2lzdGVkSHViVWlGZWF0dXJlRmxhZ3MiLCJpbnN0YWxsSHViVWlGZWF0dXJlRmxhZ3NXaW5kb3dBcGkiLCJSZWFjdCIsIlJlYWN0RE9NU2VydmVyIiwiX3JlcXVpcmU3IiwicmVuZGVyVG9TdHJpbmciLCJfcmVxdWlyZTgiLCJCcm93c2VyUm91dGVyIiwiUm91dGVzIiwiUm91dGUiLCJOYXZpZ2F0ZSIsIkxpbmsiLCJ1c2VOYXZpZ2F0ZSIsInVzZUxvY2F0aW9uIiwidXNlU2VhcmNoUGFyYW1zIiwidXNlUGFyYW1zIiwiX3JlcXVpcmU5IiwiYnVpbGRMb2NhbEZhYnJpY0lkZW50aXR5UGF5bG9hZCIsImZhYnJpY1BsYWludGV4dFNpZ25pbmdVbmxvY2thYmxlIiwiX3JlcXVpcmUwIiwiZGVyaXZlRmFicmljQWNjb3VudElkZW50aXR5S2V5cyIsImZhYnJpY1Jvb3RYcHViRnJvbU1hc3RlclhwcnYiLCJfcmVxdWlyZTEiLCJhcHBseUZhYnJpY0RldkJyb3dzZXJTZWVkQm9vdHN0cmFwIiwibWVyZ2VVbmxvY2tlZFNlc3Npb25JbnRvSWRlbnRpdHkiLCJfcmVxdWlyZTEwIiwiZnVuZExvY2FsS2V5RnJvbUh1YkZhdWNldCIsInNob3VsZEF1dG9GdW5kRGVza3RvcExvY2FsS2V5IiwiZGlzY292ZXJMb2NhbEh1YkZhdWNldCIsIm1hcmtBdXRvRmF1Y2V0RG9uZSIsIkJyaWRnZSIsIkJpdGNvaW5Ib21lIiwiTGlnaHRuaW5nSG9tZSIsIkJpdGNvaW5CbG9ja0xpc3QiLCJGYXVjZXRIb21lIiwiT25ib2FyZGluZyIsIkJpdGNvaW5CbG9ja1ZpZXciLCJCaXRjb2luUGF5bWVudHNIb21lIiwiQml0Y29pblRyYW5zYWN0aW9uc0hvbWUiLCJOYXZpZ2F0ZVBheW1lbnRzTGVnYWN5VG9DYW5vbmljYWwiLCJsb2MiLCJjcmVhdGVFbGVtZW50IiwidG8iLCJwYXRobmFtZSIsInNlYXJjaCIsImhhc2giLCJyZXBsYWNlIiwiQml0Y29pblBheW1lbnRzSG9tZVJvdXRlIiwicHJvcHMiLCJfdXNlU2VhcmNoUGFyYW1zIiwiX3VzZVNlYXJjaFBhcmFtczIiLCJzZWFyY2hQYXJhbXMiLCJzZXRTZWFyY2hQYXJhbXMiLCJ1c2VFZmZlY3QiLCJoYXMiLCJzcCIsIlVSTFNlYXJjaFBhcmFtcyIsIl8iLCJwYXlqb2luU2Vzc2lvbkZyb21RdWVyeSIsImdldCIsInRyaW0iLCJwYXlUb0Zyb21RdWVyeSIsInBheUFtb3VudFNhdHNGcm9tUXVlcnkiLCJiaXRjb2luVXJpRnJvbVF1ZXJ5IiwicGF5bWVudHNTZXRTZWFyY2hQYXJhbXMiLCJidWlsZEFkbWluR2F0ZU5hdmlnYXRlIiwibG9jYXRpb24iLCJmbGFnIiwiYmxvY2tlZFBhdGgiLCJjb25jYXQiLCJxcyIsInNldCIsInN0YXRlIiwiZmVhdHVyZUZsYWdCbG9ja2VkIiwiTmF2aWdhdGVEb2N1bWVudHNEZXRhaWxBbGlhcyIsIl91c2VQYXJhbXMiLCJpZCIsInJhdyIsImVuY29kZVVSSUNvbXBvbmVudCIsIk5hdmlnYXRlUGVlckRldGFpbEFsaWFzIiwicGVlcnMiLCJibG9ja2VkIiwiX3VzZVBhcmFtczIiLCJOYXZpZ2F0ZVBlZXJSb290QWxpYXMiLCJOYXZpZ2F0ZUFjdGl2aXR5VG9BY3Rpdml0aWVzIiwiYWN0aXZpdGllcyIsIlVpRmxhZ1JvdXRlIiwiX3JlZiIsImNoaWxkcmVuIiwiUGVlcnNGZWF0dXJlUm91dGUiLCJfcmVmMiIsIk5hdmlnYXRlTGVnYWN5Qml0Y29pblR4QWxpYXMiLCJiaXRjb2luRXhwbG9yZXIiLCJfdXNlUGFyYW1zMyIsInR4aGFzaCIsIk5hdmlnYXRlTGVnYWN5Qml0Y29pbkJsb2NrQWxpYXMiLCJfdXNlUGFyYW1zNCIsImJsb2NraGFzaCIsIlVua25vd25Sb3V0ZVNoZWxsIiwiX3VzZUxvY2F0aW9uIiwiZnVsbCIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsImh1YlVpVGljayIsInNldEh1YlVpVGljayIsInVmIiwiU2VnbWVudCIsInN0eWxlIiwibWFyZ2luVG9wIiwiSGVhZGVyIiwiYXMiLCJjb2xvciIsIm1hcmdpbkJvdHRvbSIsImxpbmVIZWlnaHQiLCJ3b3JkQnJlYWsiLCJiaXRjb2luUGF5bWVudHMiLCJiaXRjb2luTGlnaHRuaW5nIiwiRnJhZ21lbnQiLCJzaWRlY2hhaW4iLCJOYXZpZ2F0ZVBheWpvaW5TcGFBbGlhcyIsIkJpdGNvaW5SZXNvdXJjZXNIb21lIiwiQml0Y29pblRyYW5zYWN0aW9uVmlldyIsIkNoYW5uZWxWaWV3IiwiSW52b2ljZUxpc3RIb21lIiwiSW52b2ljZUxpc3RIb21lUm91dGUiLCJCb3R0b21QYW5lbCIsIkNvbnRyYWN0c0hvbWUiLCJDb250cmFjdFZpZXciLCJEb2N1bWVudExpc3QiLCJEb2N1bWVudFZpZXciLCJIb21lIiwiQWN0aXZpdGllc0hvbWUiLCJOb3RpZmljYXRpb25zSG9tZSIsIklkZW50aXR5TWFuYWdlciIsIkZhYnJpY0lkZW50aXR5QWNjb3VudENvbnRyb2xzIiwiRmFicmljUG9zdFNldHVwSWRlbnRpdHlXaXphcmQiLCJQZWVyTGlzdCIsIlBlZXJWaWV3IiwiVG9wUGFuZWwiLCJIdWJBbGVydFN0YWNrIiwiSHViQWxlcnRTdGFja0xvY2F0aW9uR2F0ZSIsIl9yZWYzIiwiYWRtaW5Ub2tlbiIsIm9uQWRtaW4iLCJzdGFydHNXaXRoIiwidG9rZW4iLCJ1bmRlZmluZWQiLCJfcmVxdWlyZTExIiwiZ2V0U3BlbmRXYWxsZXRDb250ZXh0IiwiZmV0Y2hXYWxsZXRTdW1tYXJ5V2l0aENhY2hlIiwibG9hZFVwc3RyZWFtU2V0dGluZ3MiLCJzYXZlU3BlbmRYcHViV2F0Y2hGb3JJZGVudGl0eSIsImNsZWFyU3BlbmRYcHViV2F0Y2giLCJfcmVxdWlyZTEyIiwiVG9hc3RDb250YWluZXIiLCJ0b2FzdGlmeSIsInRvYXN0IiwiU2xpZGUiLCJfcmVxdWlyZTEzIiwiU2VjdXJpdHlIb21lIiwiU2VjdXJpdHlTZXNzaW9uSG9tZSIsIlNldHRpbmdzSG9tZSIsIkNvbGxhYm9yYXRpb25Ib21lIiwiX3JlcXVpcmUxNCIsInJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIiLCJTZXR0aW5nc0ZlZGVyYXRpb25Ib21lIiwiRmVkZXJhdGlvbnNIb21lIiwiRmVkZXJhdGlvbkludml0ZU5vdGlmaWNhdGlvbkJhbm5lciIsIlB1YmxpY1Zpc2l0b3JHYXRlIiwiX3JlcXVpcmUxNSIsImNvbXB1dGVQdWJsaWNIdWJWaXNpdG9yIiwiU2V0dGluZ3NCaXRjb2luV2FsbGV0IiwiRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlTW9kYWwiLCJDb2xsYWJvcmF0aW9uSW52aXRlTW9kYWwiLCJGZWF0dXJlc1BhZ2UiLCJTaWRlY2hhaW5Ib21lIiwiRGVsZWdhdGlvblNpZ25pbmdNb2RhbCIsIkFkbWluSG9tZSIsIkJlYWNvbkZlZGVyYXRpb25Ib21lIiwid3JhcFB1YmxpY1Zpc2l0b3JHYXRlIiwiaXNWaXNpdG9yIiwib25PcGVuSWRlbnRpdHkiLCJjaGlsZCIsImFjdGl2ZSIsInJlc29sdmVCaXRjb2luRnJvbU5ldHdvcmtTdGF0dXMiLCJuZXR3b3JrU3RhdHVzIiwidG9wIiwiYml0Y29pbiIsInN2YyIsInNlcnZpY2VzIiwic3RhdHVzIiwiX3JlcXVpcmUxNiIsIk1vZGFsIiwiQnV0dG9uIiwiQ2hlY2tib3giLCJGb3JtIiwiSWNvbiIsIklucHV0IiwiTG9hZGVyIiwiTWVzc2FnZSIsIkJpdGNvaW5Ib21lV2l0aE5hdiIsIm5hdmlnYXRlIiwidXNlTGF5b3V0RWZmZWN0IiwiaGFzaFRhcmdldCIsInJvdXRlVGFyZ2V0IiwidGFyZ2V0SGFzaCIsImgiLCJlbCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJzY3JvbGxJbnRvVmlldyIsIndpbmRvdyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImJsb2NrIiwiYmVoYXZpb3IiLCJDcm93ZGZ1bmRpbmdIb21lIiwiQ3Jvd2RmdW5kaW5nSG9tZVdpdGhOYXYiLCJMb2dpbkdhdGUiLCJvbkxvZ2luIiwicGxhY2Vob2xkZXIiLCJ0ZXh0QWxpZ24iLCJpY29uIiwibWF4V2lkdGgiLCJtYXJnaW4iLCJwcmltYXJ5Iiwib25DbGljayIsIkh1YkludGVyZmFjZSIsIl9SZWFjdCRDb21wb25lbnQiLCJfdGhpcyIsImluaXRpYWxIdWJBZGRyZXNzIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInByb3RvY29sIiwiaW5pdGlhbEFkbWluVG9rZW4iLCJpbml0aWFsQWRtaW5Ub2tlbkV4cGlyZXNBdCIsImluaXRpYWxMb2NhbElkZW50aXR5IiwiaW5pdGlhbEhhc0xvY2tlZElkZW50aXR5IiwiaW5pdGlhbFBvc3RTZXR1cElkZW50aXR5V2l6YXJkT3BlbiIsInBhcnNlZCIsInhwdWIiLCJibCIsInJlc29sdmVkIiwicmVjb3JkIiwieHBydiIsInBhc3N3b3JkUHJvdGVjdGVkIiwicGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlIiwiZmFicmljSWRlbnRpdHlNb2RlIiwiZmFicmljSGRSb2xlIiwiZmFicmljQWNjb3VudEluZGV4IiwiTWF0aCIsImZsb29yIiwibWFzdGVyWHB1YiIsImxpbmtlZEZyb21EZXNrdG9wIiwiZGlzbWlzc2VkIiwicGVuZGluZyIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsImVTZXNzIiwiZGVidWciLCJpc0F1dGhlbnRpY2F0ZWQiLCJpc0xvYWRpbmciLCJuZWVkc1NldHVwIiwic2V0dXBDaGVja2VkIiwiYWRtaW5Ub2tlbkV4cGlyZXNBdCIsIm1vZGFsTG9nT3V0IiwibG9nZ2VkT3V0IiwidWlTZXR0aW5nc09wZW4iLCJ1aUh1YkFkZHJlc3MiLCJ1aUh1YkFkZHJlc3NEcmFmdCIsInVpQWR2YW5jZWRNb2RlRHJhZnQiLCJhZHZhbmNlZE1vZGUiLCJ1aUh1YkFkZHJlc3NFcnJvciIsInVpSWRlbnRpdHlPcGVuIiwidWlTaWduTWVzc2FnZU9wZW4iLCJ1aVNpZ25NZXNzYWdlVGV4dCIsInVpU2lnbk1lc3NhZ2VSZXN1bHQiLCJ1aVNpZ25NZXNzYWdlQnVzeSIsInVpVmVyaWZ5TWVzc2FnZVRleHQiLCJ1aVZlcmlmeVNpZ25hdHVyZSIsInVpVmVyaWZ5UHVibGljS2V5IiwidWlWZXJpZnlSZXN1bHQiLCJ1aURlc3Ryb3lJZGVudGl0eUNvbmZpcm1PcGVuIiwiY2xpZW50QmFsYW5jZSIsImNsaWVudEJhbGFuY2VMb2FkaW5nIiwidWlMb2NhbElkZW50aXR5IiwidWlIYXNMb2NrZWRJZGVudGl0eSIsIndlYnJ0Y0NoYXRPbmx5IiwiZmVkZXJhdGlvbkludml0ZU1vZGFsT3BlbiIsImZlZGVyYXRpb25JbnZpdGVEZXRhaWwiLCJmZWRlcmF0aW9uSW52aXRlQmFubmVyRGV0YWlsIiwiY29sbGFib3JhdGlvbkludml0ZU1vZGFsT3BlbiIsImNvbGxhYm9yYXRpb25JbnZpdGVEZXRhaWwiLCJyZXF1aXJlc1NldHVwVWlTZWNyZXQiLCJzZXR1cFVpVmVyaWZpZWQiLCJzZXR1cFVpR2F0ZVBhc3N3b3JkIiwic2V0dXBTdGF0dXNUaW1lZE91dCIsInNldHVwVWlHYXRlRXJyb3IiLCJzZXR1cFVpR2F0ZUJ1c3kiLCJwb3N0U2V0dXBJZGVudGl0eVdpemFyZE9wZW4iLCJoYW5kbGVCcmlkZ2VTdGF0ZVVwZGF0ZSIsInJlc3BvbnNlQ2FwdHVyZSIsInJlcXVlc3RMb2dpbiIsIm9wZW5JZGVudGl0eU1hbmFnZXIiLCJvcGVuSWRlbnRpdHlNb2RhbEZyb21HYXRlZEFjdGlvbiIsIl9oYW5kbGVJZGVudGl0eU1hbmFnZXJMb2NhbENoYW5nZSIsIl9oYW5kbGVJZGVudGl0eU1hbmFnZXJMb2NrU3RhdGVDaGFuZ2UiLCJfaGFuZGxlSWRlbnRpdHlNYW5hZ2VyVW5sb2NrU3VjY2VzcyIsIl9oYW5kbGVJZGVudGl0eU1hbmFnZXJGb3JnZXQiLCJfZmFicmljQWNjb3VudENoYW5nZSIsIl9vcGVuRmVkZXJhdGlvbkludml0ZVJldmlldyIsIl9kaXNtaXNzRmVkZXJhdGlvbkludml0ZUJhbm5lciIsIl9vcGVuSWRlbnRpdHlNb2RhbEZvclVzZXIiLCJfY2xvc2VIdWJJZGVudGl0eU1vZGFsIiwiX2NsZWFyVW5sb2NrZWRTZXNzaW9uT25DbG9zZSIsIl92ZXJpZnlTZXR1cFVpU2VjcmV0IiwiX29wZW5JZGVudGl0eU1vZGFsQ29vbERvd25VbnRpbCIsImJyaWRnZVJlZiIsImNyZWF0ZVJlZiIsIl9zdGF0ZSIsImFjdG9ycyIsImNvbnRlbnQiLCJfY2hlY2tTZXR1cFN0YXR1czIiLCJfY2FsbGVlIiwiYmFzZSIsImNvbnRyb2xsZXIiLCJ0aW1lb3V0TXMiLCJ0aW1lciIsInJlcyIsInRleHQiLCJkYXRhIiwiX3QiLCJfY29udGV4dCIsIkFib3J0Q29udHJvbGxlciIsInNldFRpbWVvdXQiLCJhYm9ydCIsImFib3J0RXJyIiwiZmV0Y2giLCJoZWFkZXJzIiwiQWNjZXB0IiwiY2FjaGUiLCJzaWduYWwiLCJvayIsInNldFN0YXRlIiwiSlNPTiIsInBhcnNlIiwiZVZlciIsImNsZWFyVGltZW91dCIsIl9jaGVja1NldHVwU3RhdHVzIiwiX3ZlcmlmeVNldHVwVWlTZWNyZXQyIiwiX2NhbGxlZTIiLCJwd2QiLCJlcnJNc2ciLCJqIiwiX3QyIiwiX2NvbnRleHQyIiwibWV0aG9kIiwiYm9keSIsInN0cmluZ2lmeSIsInNldHVwVWlTZWNyZXQiLCJtZXNzYWdlIiwiZUoiLCJzZXRJdGVtIiwiZVMiLCJfcmVmcmVzaEFkbWluVG9rZW5JZk5lZWRlZDIiLCJfY2FsbGVlMyIsImV4cGlyZXNBdCIsInRoaXJ0eURheXNNcyIsInJlc3VsdCIsIl90MyIsIl9jb250ZXh0MyIsIkRhdGUiLCJub3ciLCJfcmVmcmVzaEFkbWluVG9rZW5JZk5lZWRlZCIsIm9uT3BlbklkZW50aXR5TWFuYWdlciIsInJlbW92ZUl0ZW0iLCJfaHViSWRlbnRpdHlVaVNuYXBzaG90S2V5IiwiaW5mbyIsImhhc1giLCJwbGFpbkF2YWlsIiwiYWNjdCIsIm1vZGUiLCJoZCIsIl90aGlzMiIsInByZXYiLCJwcmV2SWQiLCJuZXh0SWQiLCJwcmV2WHB1YiIsIm5leHRYcHViIiwic2FtZUlkZW50aXR5IiwiaGFzWHBydiIsIm5leHRJZGVudGl0eSIsIm1hc3RlclhwcnYiLCJuZXh0SGFzTG9ja2VkIiwibG9ja2VkIiwiaGFzSWRlbnQiLCJjdXJyZW50IiwiY2xlYXJEZWNyeXB0ZWREb2N1bWVudHMiLCJpZGVudGl0eUluZm8iLCJjaHJvbWUiLCJzdG9yYWdlIiwibG9jYWwiLCJyZW1vdmUiLCJjbGVhckFsbERvY3VtZW50cyIsIm5leHRBY2NvdW50SW5kZXgiLCJhaSIsImlzRmluaXRlIiwidW5sb2NrZWQiLCJtYXN0ZXIiLCJzZXNzIiwiZGsiLCJmcm9tVW5sb2NrZWRYcCIsImZyb21QYXJzZWRYcCIsIm1hc3RlclhwIiwibmV4dFBheWxvYWQiLCJoYWRLZXkiLCJteCIsImNvbnNvbGUiLCJlcnJvciIsImludml0ZUlkIiwiX2hhbmRsZUZlZGVyYXRpb25JbnZpdGVSZXNwb25zZSIsImFjY2VwdCIsInRyYW5zaXRpb24iLCJhZG1pbiIsInBrIiwicmVzcG9uZGVyUHVia2V5Iiwid2FybmluZyIsImF1dG9DbG9zZSIsInNlbGYiLCJfcmVmNCIsImNsb3NlVG9hc3QiLCJmb250U2l6ZSIsInR5cGUiLCJtYXJnaW5SaWdodCIsInBhZGRpbmciLCJib3JkZXJSYWRpdXMiLCJib3JkZXIiLCJiYWNrZ3JvdW5kIiwiY3Vyc29yIiwiX2FkZEZlZGVyYXRpb25NZW1iZXJGcm9tSW52aXRlIiwiY2xvc2VPbkNsaWNrIiwiX2FkZEZlZGVyYXRpb25NZW1iZXJGcm9tSW52aXRlMiIsIl9jYWxsZWU0IiwicHVia2V5IiwiX3Q0IiwiX2NvbnRleHQ0IiwianNvbnJwYyIsInBhcmFtcyIsImpzb24iLCJzdWNjZXNzIiwiX3giLCJfeDIiLCJfeDMiLCJjb21wb25lbnREaWRNb3VudCIsIl90aGlzMyIsIl9zZXR1cFN0YXR1c1NhZmV0eVRpbWVyIiwiX3JlZnJlc2hDbGllbnRCYWxhbmNlIiwiX21heWJlQXV0b0Z1bmREZXNrdG9wTG9jYWxLZXkiLCJfb25HbG9iYWxTdGF0ZVVwZGF0ZSIsImRldGFpbCIsIm9wZXJhdGlvbiIsInBhdGgiLCJpZG4iLCJfb25DbGllbnRCYWxhbmNlVXBkYXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9vbkZhYnJpY0h1YkFkbWluVG9rZW5TYXZlZCIsIl9mYWJyaWNGZWRJbnZpdGUiLCJldiIsIl9mYWJyaWNGZWRSZXNwIiwiX2ZhYnJpY0NvbGxhYkludml0ZSIsImludml0YXRpb25JZCIsIl9vbkZhYnJpY09wZW5JZGVudGl0eU1hbmFnZXIiLCJfYWRtaW5Ub2tlblJlZnJlc2hJbnRlcnZhbCIsInNldEludGVydmFsIiwiX3RvYXN0VW5zdWIiLCJhZGRMaXN0ZW5lciIsIm1zZyIsImhlYWRlciIsIm9wdHMiLCJkdXJhdGlvbiIsIl9odWJVaVVuc3ViIiwiZm9yY2VVcGRhdGUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjbGVhckludGVydmFsIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwicHJldlN0YXRlIiwicHJldkZhYiIsIm5leHRGYWIiLCJfbWF5YmVBdXRvRnVuZERlc2t0b3BMb2NhbEtleTIiLCJfY2FsbGVlNSIsImlkZW50aXR5IiwiYnJpZGdlSW5zdGFuY2UiLCJuZXR3b3JrIiwiZGlzYyIsImZ1bmRlZCIsIl90NSIsIl9jb250ZXh0NSIsIl9kZXNrdG9wQXV0b0ZhdWNldEJ1c3kiLCJsYXN0TmV0d29ya1N0YXR1cyIsInRvTG93ZXJDYXNlIiwiaHViQWRtaW5Ub2tlbiIsImF2YWlsYWJsZSIsImFtb3VudFNhdHMiLCJmYXVjZXQiLCJkZWZhdWx0QW1vdW50U2F0cyIsIm1pbmVDb25maXJtIiwidG9Mb2NhbGVTdHJpbmciLCJ3YXJuIiwiX3JlZnJlc2hDbGllbnRCYWxhbmNlMiIsIl9jYWxsZWU2IiwiZm9yY2VSZWZyZXNoIiwid2FsbGV0IiwicHJldlJvdyIsInByZXZXaWQiLCJuZXh0V2lkIiwiX3JlZjUiLCJfc3VtbWFyeSRiYWxhbmNlU2F0cyIsInVwc3RyZWFtIiwic3VtbWFyeSIsImJhbGFuY2VTYXRzIiwiX3N1bW1hcnkkY29uZmlybWVkU2F0IiwiX3N1bW1hcnkkdW5jb25maXJtZWRTIiwiY29uZmlybWVkU2F0cyIsInVuY29uZmlybWVkU2F0cyIsIm5leHRDbGllbnQiLCJfYXJnczYiLCJfdDYiLCJfY29udGV4dDYiLCJ3YWxsZXRJZCIsImJ5cGFzc0NhY2hlIiwiYmFsYW5jZSIsImZyb21DYWNoZSIsIl9mcm9tQ2FjaGUiLCJfaGFuZGxlTG9ja0lkZW50aXR5IiwicGxhaW50ZXh0U3RvcmVkIiwibmV3U3RhdGUiLCJicmlkZ2VLZXlzIiwicGF0Y2giLCJfaSIsIl9icmlkZ2VLZXlzIiwiayIsImFjdGlvbiIsInBheWxvYWQiLCJjYW5kaWRhdGUiLCJpc05ldHdvcmtTdGF0dXMiLCJzZXR1cCIsImJyaWRnZU5ldHdvcmtTdGF0dXNVcGRhdGUiLCJfaHViUGVlclZpZXciLCJlZmZlY3RpdmVBdXRoIiwiYWRtaW5QZWVyVG9vbHNUb2tlbiIsIl90aGlzNCIsImF1dGgiLCJicmlkZ2UiLCJvbkFkZFBlZXIiLCJwZWVyIiwic2VuZEFkZFBlZXJSZXF1ZXN0Iiwib25SZWZyZXNoUGVlcnMiLCJzZW5kTGlzdFBlZXJzUmVxdWVzdCIsInNlbmROZXR3b3JrU3RhdHVzUmVxdWVzdCIsIm9uRGlzY29ubmVjdFBlZXIiLCJhZGRyZXNzIiwic2VuZFJlbW92ZVBlZXJSZXF1ZXN0Iiwib25TZW5kUGVlck1lc3NhZ2UiLCJzZW5kUGVlck1lc3NhZ2VSZXF1ZXN0Iiwib25GYWJyaWNQZWVyUmVzeW5jIiwiaWRPckFkZHJlc3MiLCJzZW5kRmFicmljUGVlclJlc3luY1JlcXVlc3QiLCJvblNldFBlZXJOaWNrbmFtZSIsIm5pY2tuYW1lIiwic2VuZFNldFBlZXJOaWNrbmFtZVJlcXVlc3QiLCJvbkdldFBlZXIiLCJzZW5kR2V0UGVlclJlcXVlc3QiLCJfc2hvdWxkU2hvd1Bvc3RTZXR1cElkZW50aXR5V2l6YXJkIiwic3RhdGVGbGFnIiwicmVuZGVyIiwiX3RoaXM1Iiwibm9kZVB1YmtleSIsImdldE5vZGVQdWJrZXkiLCJoYXNMb2NhbCIsImVmZmVjdGl2ZUhhc0xvY2tlZElkZW50aXR5IiwicHVibGljSHViVmlzaXRvciIsImxvY2FsSWRlbnRpdHkiLCJwcm9wc0F1dGgiLCJvcGVuSWRlbnRpdHlGb3JHYXRlIiwicHYiLCJyZWYiLCJodWJBZGRyZXNzIiwib25SZXF1aXJlVW5sb2NrIiwib25TdGF0ZVVwZGF0ZSIsIm9wZW4iLCJvbkNsb3NlIiwiZ2V0UmVzcG9uZGVyUHVia2V5IiwiYiIsImdldEh0bGNSZWZ1bmRQdWJsaWNLZXlIZXgiLCJ0b1BlZXJJZCIsImxvYWRpbmciLCJoZWlnaHQiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImp1c3RpZnlDb250ZW50IiwiYWxpZ25JdGVtcyIsImdhcCIsImlubGluZSIsInNpemUiLCJtaW5IZWlnaHQiLCJib3hTaXppbmciLCJ3aWR0aCIsIm9uU3VibWl0IiwicHJldmVudERlZmF1bHQiLCJGaWVsZCIsImh0bWxGb3IiLCJhdXRvQ29tcGxldGUiLCJvbkNoYW5nZSIsInRhcmdldCIsIm5lZ2F0aXZlIiwiZGlzYWJsZWQiLCJub2RlTmFtZSIsIm9uQ29uZmlndXJhdGlvbkNvbXBsZXRlIiwib3BlbldpemFyZCIsImlkUmVjIiwiY3VycmVudElkZW50aXR5Iiwib25Mb2NhbElkZW50aXR5Q2hhbmdlIiwib25VbmxvY2tTdWNjZXNzIiwib25Mb2NrU3RhdGVDaGFuZ2UiLCJvbkZvcmdldElkZW50aXR5Iiwib25Db21wbGV0ZSIsIm9uU2tpcCIsInVzZVRyYW5zaXRpb25zIiwicG9zaXRpb24iLCJuZXdlc3RPblRvcCIsInBhdXNlT25Gb2N1c0xvc3MiLCJkcmFnZ2FibGUiLCJwYXVzZU9uSG92ZXIiLCJoYXNMb2NhbElkZW50aXR5IiwiaGFzTG9ja2VkSWRlbnRpdHkiLCJvblJlZnJlc2hCYWxhbmNlIiwib25VbmxvY2tJZGVudGl0eSIsIm9uTG9ja0lkZW50aXR5Iiwib25NYW5hZ2VJZGVudGl0eSIsIm9uUHJvZmlsZSIsIm9uU2lnbk1lc3NhZ2UiLCJvbkRlc3Ryb3lJZGVudGl0eSIsIm9uT3BlblNldHRpbmdzIiwib25SZXZpZXciLCJvbkRpc21pc3MiLCJjbG9zZU9uRGltbWVyQ2xpY2siLCJjbG9zZU9uRXNjYXBlIiwiQ29udGVudCIsInNjcm9sbGluZyIsIm1pbldpZHRoIiwib3ZlcmZsb3dYIiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJvbkZhYnJpY0FjY291bnRDaGFuZ2UiLCJBY3Rpb25zIiwiYmFzaWMiLCJ0b2dnbGUiLCJsYWJlbCIsImNoZWNrZWQiLCJzZXRIdWJBZGRyZXNzIiwiY2xhc3NOYW1lIiwiZm9udEZhbWlseSIsInB1YmxpY0tleSIsImxpbmsiLCJuYXZpZ2F0b3IiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJzaWduYXR1cmUiLCJkaXZpZGluZyIsInVzZURlbGVnYXRpb24iLCJzaWduQXJiaXRyYXJ5VGV4dERlbGVnYXRlZCIsIl9jYWxsZWU3IiwiX3Q3IiwiX2NvbnRleHQ3Iiwic2lnbkFyYml0cmFyeVRleHQiLCJzaWciLCJwdWIiLCJ2ZXJpZnlBcmJpdHJhcnlUZXh0IiwiZWxlbWVudCIsImZldGNoQ29udHJhY3QiLCJjb250cmFjdHMiLCJvbkRpc2NvdmVyV2ViUlRDUGVlcnMiLCJkaXNjb3ZlckFuZENvbm5lY3RUb1BlZXJzIiwib25SZXB1Ymxpc2hXZWJSVENPZmZlciIsInB1Ymxpc2hXZWJSVENPZmZlciIsIm9uQ29ubmVjdFdlYlJUQ1BlZXIiLCJwZWVySWQiLCJjb25uZWN0VG9XZWJSVENQZWVyIiwib25EaXNjb25uZWN0QWxsV2ViUlRDUGVlcnMiLCJkaXNjb25uZWN0QWxsV2ViUlRDUGVlcnMiLCJvblNlbmRXZWJSVENUZXN0UGluZyIsImJyb2FkY2FzdFRvV2ViUlRDUGVlcnMiLCJ0aW1lc3RhbXAiLCJvblRvZ2dsZVdlYlJUQ0NoYXRPbmx5IiwiZW5hYmxlZCIsInNldFdlYlJUQ0NoYXRPbmx5Iiwib25SZWZyZXNoTmV0d29ya1N0YXR1cyIsImJpdGNvaW5QYWdlIiwib25EaXNjb25uZWN0V2ViUlRDUGVlciIsImRpc2Nvbm5lY3RXZWJSVENQZWVyIiwib25TZW5kRmx1c2hDaGFpblRvVHJ1c3RlZFBlZXJzIiwic2VuZEZsdXNoQ2hhaW5Ub1RydXN0ZWRQZWVyc1JlcXVlc3QiLCJvbkxpc3REb2N1bWVudHMiLCJzZW5kTGlzdERvY3VtZW50c1JlcXVlc3QiLCJvbkFkZExvY2FsRG9jdW1lbnQiLCJkb2MiLCJhZGRMb2NhbERvY3VtZW50Iiwib25QdWJsaXNoTG9jYWxEb2N1bWVudCIsInNlbmRQdWJsaXNoRG9jdW1lbnRSZXF1ZXN0Iiwib25DcmVhdGVEb2N1bWVudCIsInNlbmRDcmVhdGVEb2N1bWVudFJlcXVlc3QiLCJoYXNEb2N1bWVudEtleSIsImhhc0RvY3VtZW50RW5jcnlwdGlvbktleSIsIm9uUmVxdWVzdFVubG9jayIsIm9uR2V0RG9jdW1lbnQiLCJzZW5kR2V0RG9jdW1lbnRSZXF1ZXN0Iiwib25HZXREZWNyeXB0ZWRDb250ZW50IiwiZ2V0RGVjcnlwdGVkRG9jdW1lbnRDb250ZW50Iiwib25VbmxvY2tIdGxjRG9jdW1lbnQiLCJfcmVmNyIsIl9jYWxsZWU4IiwiZG9jSWQiLCJwcmVpbWFnZUhleCIsIl9jb250ZXh0OCIsInVubG9ja0h0bGNFbmNyeXB0ZWREb2N1bWVudCIsIl94NCIsIl94NSIsIm9uUHVibGlzaERvY3VtZW50Iiwib25SZXF1ZXN0UHVyY2hhc2VJbnZvaWNlIiwic2VuZENyZWF0ZVB1cmNoYXNlSW52b2ljZVJlcXVlc3QiLCJvbkNsYWltUHVyY2hhc2UiLCJ0eGlkIiwic2VuZENsYWltUHVyY2hhc2VSZXF1ZXN0Iiwib25SZXF1ZXN0RGlzdHJpYnV0ZUludm9pY2UiLCJjb25maWciLCJzZW5kQ3JlYXRlRGlzdHJpYnV0ZUludm9pY2VSZXF1ZXN0Iiwib25EaXN0cmlidXRlRG9jdW1lbnQiLCJzZW5kRGlzdHJpYnV0ZURvY3VtZW50UmVxdWVzdCIsIm9uU2VuZERpc3RyaWJ1dGVQcm9wb3NhbCIsInBlZXJLZXkiLCJwcm9wb3NhbCIsInNlbmRTZW5kRGlzdHJpYnV0ZVByb3Bvc2FsUmVxdWVzdCIsIl9nZXRIVE1MIiwiY29tcG9uZW50IiwiX3RvSFRNTCIsInRvSFRNTEZyYWdtZW50IiwidG9IVE1MIiwiQ29tcG9uZW50IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/HubInterface.js\n\n}")},"./components/HubPagination.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Hub list pagination — Semantic UI Pagination with pinned first/last jump buttons.\n * Adapted from shared CustomPagination patterns.\n */\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require.Button,\n Icon = _require.Icon,\n Pagination = _require.Pagination;\nvar HubPagination = /*#__PURE__*/function (_React$Component) {\n function HubPagination() {\n _classCallCheck(this, HubPagination);\n return _callSuper(this, HubPagination, arguments);\n }\n _inherits(HubPagination, _React$Component);\n return _createClass(HubPagination, [{\n key: "render",\n value: function render() {\n var _this$props = this.props,\n activePage = _this$props.activePage,\n totalPages = _this$props.totalPages,\n onPageChange = _this$props.onPageChange,\n boundaryRange = _this$props.boundaryRange,\n siblingRange = _this$props.siblingRange,\n showEllipsis = _this$props.showEllipsis,\n _this$props$showPrevi = _this$props.showPreviousAndNextNav,\n showPreviousAndNextNav = _this$props$showPrevi === void 0 ? true : _this$props$showPrevi,\n _this$props$style = _this$props.style,\n style = _this$props$style === void 0 ? {} : _this$props$style,\n _this$props$className = _this$props.className,\n className = _this$props$className === void 0 ? \'\' : _this$props$className,\n _this$props$disabled = _this$props.disabled,\n disabled = _this$props$disabled === void 0 ? false : _this$props$disabled;\n if (totalPages <= 1) {\n return null;\n }\n var defaultBoundaryRange = boundaryRange !== undefined ? boundaryRange : totalPages <= 10 ? totalPages : 2;\n var defaultSiblingRange = siblingRange !== undefined ? siblingRange : totalPages <= 15 ? totalPages : 3;\n var defaultShowEllipsis = showEllipsis !== undefined ? showEllipsis : totalPages > 15;\n var hidePrevNext = showPreviousAndNextNav === false;\n return /*#__PURE__*/React.createElement("div", {\n style: _objectSpread({\n width: \'100%\',\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\'\n }, style),\n className: className\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n icon: true,\n disabled: disabled || activePage <= 1,\n onClick: function onClick(e) {\n return onPageChange(e, {\n activePage: 1\n });\n },\n style: {\n marginRight: \'0.5rem\'\n },\n title: "Jump to first page",\n className: "ui button",\n type: "button"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "angle double left"\n }))), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'flex-start\',\n flex: 1\n }\n }, /*#__PURE__*/React.createElement(Pagination, {\n activePage: activePage,\n totalPages: totalPages,\n onPageChange: onPageChange,\n boundaryRange: defaultBoundaryRange,\n siblingRange: defaultSiblingRange,\n ellipsisItem: defaultShowEllipsis ? undefined : null,\n firstItem: null,\n lastItem: null,\n prevItem: hidePrevNext || activePage === 1 ? null : undefined,\n nextItem: hidePrevNext || activePage === totalPages ? null : undefined,\n disabled: disabled,\n className: "ui pagination menu"\n })), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n icon: true,\n disabled: disabled || activePage >= totalPages,\n onClick: function onClick(e) {\n return onPageChange(e, {\n activePage: totalPages\n });\n },\n style: {\n marginLeft: \'0.5rem\'\n },\n title: "Jump to last page",\n className: "ui button",\n type: "button"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "angle double right"\n }))));\n }\n }]);\n}(React.Component);\nmodule.exports = HubPagination;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0h1YlBhZ2luYXRpb24uanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFIQSxTQUFBQSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQVgsQ0FBQSxHQUFBUyxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBUCxDQUFBLEdBQUFBLENBQUEsQ0FBQVksTUFBQSxXQUFBTCxDQUFBLFdBQUFFLE1BQUEsQ0FBQUksd0JBQUEsQ0FBQVAsQ0FBQSxFQUFBQyxDQUFBLEVBQUFPLFVBQUEsT0FBQU4sQ0FBQSxDQUFBTyxJQUFBLENBQUFDLEtBQUEsQ0FBQVIsQ0FBQSxFQUFBUixDQUFBLFlBQUFRLENBQUE7QUFBQSxTQUFBUyxjQUFBWCxDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBVyxTQUFBLENBQUFDLE1BQUEsRUFBQVosQ0FBQSxVQUFBQyxDQUFBLFdBQUFVLFNBQUEsQ0FBQVgsQ0FBQSxJQUFBVyxTQUFBLENBQUFYLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBWSxPQUFBLFdBQUFiLENBQUEsSUFBQWMsZUFBQSxDQUFBZixDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFFLE1BQUEsQ0FBQWEseUJBQUEsR0FBQWIsTUFBQSxDQUFBYyxnQkFBQSxDQUFBakIsQ0FBQSxFQUFBRyxNQUFBLENBQUFhLHlCQUFBLENBQUFkLENBQUEsS0FBQUgsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsR0FBQVksT0FBQSxXQUFBYixDQUFBLElBQUFFLE1BQUEsQ0FBQWUsY0FBQSxDQUFBbEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFFLE1BQUEsQ0FBQUksd0JBQUEsQ0FBQUwsQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRCxDQUFBO0FBQUEsU0FBQWUsZ0JBQUFmLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFlBQUFELENBQUEsR0FBQWtCLGNBQUEsQ0FBQWxCLENBQUEsTUFBQUQsQ0FBQSxHQUFBRyxNQUFBLENBQUFlLGNBQUEsQ0FBQWxCLENBQUEsRUFBQUMsQ0FBQSxJQUFBbUIsS0FBQSxFQUFBbEIsQ0FBQSxFQUFBTSxVQUFBLE1BQUFhLFlBQUEsTUFBQUMsUUFBQSxVQUFBdEIsQ0FBQSxDQUFBQyxDQUFBLElBQUFDLENBQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUF1QixnQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFVBQUFELENBQUEsWUFBQUMsQ0FBQSxhQUFBQyxTQUFBO0FBQUEsU0FBQUMsa0JBQUEzQixDQUFBLEVBQUFDLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFELENBQUEsQ0FBQVksTUFBQSxFQUFBWCxDQUFBLFVBQUFSLENBQUEsR0FBQU8sQ0FBQSxDQUFBQyxDQUFBLEdBQUFSLENBQUEsQ0FBQWMsVUFBQSxHQUFBZCxDQUFBLENBQUFjLFVBQUEsUUFBQWQsQ0FBQSxDQUFBMkIsWUFBQSxrQkFBQTNCLENBQUEsS0FBQUEsQ0FBQSxDQUFBNEIsUUFBQSxRQUFBbkIsTUFBQSxDQUFBZSxjQUFBLENBQUFsQixDQUFBLEVBQUFtQixjQUFBLENBQUF6QixDQUFBLENBQUFrQyxHQUFBLEdBQUFsQyxDQUFBO0FBQUEsU0FBQW1DLGFBQUE3QixDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBRCxDQUFBLElBQUEwQixpQkFBQSxDQUFBM0IsQ0FBQSxDQUFBRixTQUFBLEVBQUFHLENBQUEsR0FBQUMsQ0FBQSxJQUFBeUIsaUJBQUEsQ0FBQTNCLENBQUEsRUFBQUUsQ0FBQSxHQUFBQyxNQUFBLENBQUFlLGNBQUEsQ0FBQWxCLENBQUEsaUJBQUFzQixRQUFBLFNBQUF0QixDQUFBO0FBQUEsU0FBQW1CLGVBQUFqQixDQUFBLFFBQUE0QixDQUFBLEdBQUFDLFlBQUEsQ0FBQTdCLENBQUEsZ0NBQUFULE9BQUEsQ0FBQXFDLENBQUEsSUFBQUEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQUMsYUFBQTdCLENBQUEsRUFBQUQsQ0FBQSxvQkFBQVIsT0FBQSxDQUFBUyxDQUFBLE1BQUFBLENBQUEsU0FBQUEsQ0FBQSxNQUFBRixDQUFBLEdBQUFFLENBQUEsQ0FBQVAsTUFBQSxDQUFBcUMsV0FBQSxrQkFBQWhDLENBQUEsUUFBQThCLENBQUEsR0FBQTlCLENBQUEsQ0FBQWlDLElBQUEsQ0FBQS9CLENBQUEsRUFBQUQsQ0FBQSxnQ0FBQVIsT0FBQSxDQUFBcUMsQ0FBQSxVQUFBQSxDQUFBLFlBQUFKLFNBQUEseUVBQUF6QixDQUFBLEdBQUFpQyxNQUFBLEdBQUFDLE1BQUEsRUFBQWpDLENBQUE7QUFBQSxTQUFBa0MsV0FBQWxDLENBQUEsRUFBQVIsQ0FBQSxFQUFBTSxDQUFBLFdBQUFOLENBQUEsR0FBQTJDLGVBQUEsQ0FBQTNDLENBQUEsR0FBQTRDLDBCQUFBLENBQUFwQyxDQUFBLEVBQUFxQyx5QkFBQSxLQUFBQyxPQUFBLENBQUFDLFNBQUEsQ0FBQS9DLENBQUEsRUFBQU0sQ0FBQSxRQUFBcUMsZUFBQSxDQUFBbkMsQ0FBQSxFQUFBTCxXQUFBLElBQUFILENBQUEsQ0FBQWdCLEtBQUEsQ0FBQVIsQ0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQXNDLDJCQUFBcEMsQ0FBQSxFQUFBRixDQUFBLFFBQUFBLENBQUEsaUJBQUFQLE9BQUEsQ0FBQU8sQ0FBQSwwQkFBQUEsQ0FBQSxVQUFBQSxDQUFBLGlCQUFBQSxDQUFBLFlBQUEwQixTQUFBLHFFQUFBZ0Isc0JBQUEsQ0FBQXhDLENBQUE7QUFBQSxTQUFBd0MsdUJBQUExQyxDQUFBLG1CQUFBQSxDQUFBLFlBQUEyQyxjQUFBLHNFQUFBM0MsQ0FBQTtBQUFBLFNBQUF1QywwQkFBQSxjQUFBckMsQ0FBQSxJQUFBMEMsT0FBQSxDQUFBOUMsU0FBQSxDQUFBK0MsT0FBQSxDQUFBWixJQUFBLENBQUFPLE9BQUEsQ0FBQUMsU0FBQSxDQUFBRyxPQUFBLGlDQUFBMUMsQ0FBQSxhQUFBcUMseUJBQUEsWUFBQUEsMEJBQUEsYUFBQXJDLENBQUE7QUFBQSxTQUFBbUMsZ0JBQUFuQyxDQUFBLFdBQUFtQyxlQUFBLEdBQUFsQyxNQUFBLENBQUEyQyxjQUFBLEdBQUEzQyxNQUFBLENBQUE0QyxjQUFBLENBQUFDLElBQUEsZUFBQTlDLENBQUEsV0FBQUEsQ0FBQSxDQUFBK0MsU0FBQSxJQUFBOUMsTUFBQSxDQUFBNEMsY0FBQSxDQUFBN0MsQ0FBQSxNQUFBbUMsZUFBQSxDQUFBbkMsQ0FBQTtBQUFBLFNBQUFnRCxVQUFBaEQsQ0FBQSxFQUFBRixDQUFBLDZCQUFBQSxDQUFBLGFBQUFBLENBQUEsWUFBQTBCLFNBQUEsd0RBQUF4QixDQUFBLENBQUFKLFNBQUEsR0FBQUssTUFBQSxDQUFBZ0QsTUFBQSxDQUFBbkQsQ0FBQSxJQUFBQSxDQUFBLENBQUFGLFNBQUEsSUFBQUQsV0FBQSxJQUFBdUIsS0FBQSxFQUFBbEIsQ0FBQSxFQUFBb0IsUUFBQSxNQUFBRCxZQUFBLFdBQUFsQixNQUFBLENBQUFlLGNBQUEsQ0FBQWhCLENBQUEsaUJBQUFvQixRQUFBLFNBQUF0QixDQUFBLElBQUFvRCxlQUFBLENBQUFsRCxDQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBb0QsZ0JBQUFsRCxDQUFBLEVBQUFGLENBQUEsV0FBQW9ELGVBQUEsR0FBQWpELE1BQUEsQ0FBQTJDLGNBQUEsR0FBQTNDLE1BQUEsQ0FBQTJDLGNBQUEsQ0FBQUUsSUFBQSxlQUFBOUMsQ0FBQSxFQUFBRixDQUFBLFdBQUFFLENBQUEsQ0FBQStDLFNBQUEsR0FBQWpELENBQUEsRUFBQUUsQ0FBQSxLQUFBa0QsZUFBQSxDQUFBbEQsQ0FBQSxFQUFBRixDQUFBO0FBS0EsSUFBTXFELEtBQUssR0FBR0MsbUJBQU8sQ0FBQyw0Q0FBTyxDQUFDO0FBQzlCLElBQUFDLFFBQUEsR0FJSUQsbUJBQU8sQ0FBQyw0RUFBbUIsQ0FBQztFQUg5QkUsTUFBTSxHQUFBRCxRQUFBLENBQU5DLE1BQU07RUFDTkMsSUFBSSxHQUFBRixRQUFBLENBQUpFLElBQUk7RUFDSkMsVUFBVSxHQUFBSCxRQUFBLENBQVZHLFVBQVU7QUFDcUIsSUFFM0JDLGFBQWEsMEJBQUFDLGdCQUFBO0VBQUEsU0FBQUQsY0FBQTtJQUFBcEMsZUFBQSxPQUFBb0MsYUFBQTtJQUFBLE9BQUF2QixVQUFBLE9BQUF1QixhQUFBLEVBQUEvQyxTQUFBO0VBQUE7RUFBQXNDLFNBQUEsQ0FBQVMsYUFBQSxFQUFBQyxnQkFBQTtFQUFBLE9BQUEvQixZQUFBLENBQUE4QixhQUFBO0lBQUEvQixHQUFBO0lBQUFSLEtBQUEsRUFDakIsU0FBQXlDLE1BQU1BLENBQUEsRUFBSTtNQUNSLElBQUFDLFdBQUEsR0FXSSxJQUFJLENBQUNDLEtBQUs7UUFWWkMsVUFBVSxHQUFBRixXQUFBLENBQVZFLFVBQVU7UUFDVkMsVUFBVSxHQUFBSCxXQUFBLENBQVZHLFVBQVU7UUFDVkMsWUFBWSxHQUFBSixXQUFBLENBQVpJLFlBQVk7UUFDWkMsYUFBYSxHQUFBTCxXQUFBLENBQWJLLGFBQWE7UUFDYkMsWUFBWSxHQUFBTixXQUFBLENBQVpNLFlBQVk7UUFDWkMsWUFBWSxHQUFBUCxXQUFBLENBQVpPLFlBQVk7UUFBQUMscUJBQUEsR0FBQVIsV0FBQSxDQUNaUyxzQkFBc0I7UUFBdEJBLHNCQUFzQixHQUFBRCxxQkFBQSxjQUFHLElBQUksR0FBQUEscUJBQUE7UUFBQUUsaUJBQUEsR0FBQVYsV0FBQSxDQUM3QlcsS0FBSztRQUFMQSxLQUFLLEdBQUFELGlCQUFBLGNBQUcsQ0FBQyxDQUFDLEdBQUFBLGlCQUFBO1FBQUFFLHFCQUFBLEdBQUFaLFdBQUEsQ0FDVmEsU0FBUztRQUFUQSxTQUFTLEdBQUFELHFCQUFBLGNBQUcsRUFBRSxHQUFBQSxxQkFBQTtRQUFBRSxvQkFBQSxHQUFBZCxXQUFBLENBQ2RlLFFBQVE7UUFBUkEsUUFBUSxHQUFBRCxvQkFBQSxjQUFHLEtBQUssR0FBQUEsb0JBQUE7TUFHbEIsSUFBSVgsVUFBVSxJQUFJLENBQUMsRUFBRTtRQUNuQixPQUFPLElBQUk7TUFDYjtNQUVBLElBQU1hLG9CQUFvQixHQUFHWCxhQUFhLEtBQUtZLFNBQVMsR0FBR1osYUFBYSxHQUFJRixVQUFVLElBQUksRUFBRSxHQUFHQSxVQUFVLEdBQUcsQ0FBRTtNQUM5RyxJQUFNZSxtQkFBbUIsR0FBR1osWUFBWSxLQUFLVyxTQUFTLEdBQUdYLFlBQVksR0FBSUgsVUFBVSxJQUFJLEVBQUUsR0FBR0EsVUFBVSxHQUFHLENBQUU7TUFDM0csSUFBTWdCLG1CQUFtQixHQUFHWixZQUFZLEtBQUtVLFNBQVMsR0FBR1YsWUFBWSxHQUFJSixVQUFVLEdBQUcsRUFBRztNQUN6RixJQUFNaUIsWUFBWSxHQUFHWCxzQkFBc0IsS0FBSyxLQUFLO01BRXJELG9CQUNFbEIsS0FBQSxDQUFBOEIsYUFBQTtRQUNFVixLQUFLLEVBQUE5RCxhQUFBO1VBQ0h5RSxLQUFLLEVBQUUsTUFBTTtVQUNiQyxPQUFPLEVBQUUsTUFBTTtVQUNmQyxVQUFVLEVBQUUsUUFBUTtVQUNwQkMsY0FBYyxFQUFFO1FBQWUsR0FDNUJkLEtBQUssQ0FDUjtRQUNGRSxTQUFTLEVBQUVBO01BQVUsZ0JBRXJCdEIsS0FBQSxDQUFBOEIsYUFBQTtRQUFLVixLQUFLLEVBQUU7VUFBRVksT0FBTyxFQUFFLE1BQU07VUFBRUMsVUFBVSxFQUFFO1FBQVM7TUFBRSxnQkFDcERqQyxLQUFBLENBQUE4QixhQUFBLENBQUMzQixNQUFNO1FBQ0xnQyxJQUFJO1FBQ0pYLFFBQVEsRUFBRUEsUUFBUSxJQUFJYixVQUFVLElBQUksQ0FBRTtRQUN0Q3lCLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFHekYsQ0FBQztVQUFBLE9BQUtrRSxZQUFZLENBQUNsRSxDQUFDLEVBQUU7WUFBRWdFLFVBQVUsRUFBRTtVQUFFLENBQUMsQ0FBQztRQUFBLENBQUM7UUFDbkRTLEtBQUssRUFBRTtVQUFFaUIsV0FBVyxFQUFFO1FBQVMsQ0FBRTtRQUNqQ0MsS0FBSyxFQUFDLG9CQUFvQjtRQUMxQmhCLFNBQVMsRUFBQyxXQUFXO1FBQ3JCaUIsSUFBSSxFQUFDO01BQVEsZ0JBRWJ2QyxLQUFBLENBQUE4QixhQUFBLENBQUMxQixJQUFJO1FBQUNvQyxJQUFJLEVBQUM7TUFBbUIsQ0FBRSxDQUMxQixDQUNMLENBQUMsZUFFTnhDLEtBQUEsQ0FBQThCLGFBQUE7UUFBS1YsS0FBSyxFQUFFO1VBQ1ZZLE9BQU8sRUFBRSxNQUFNO1VBQ2ZDLFVBQVUsRUFBRSxRQUFRO1VBQ3BCQyxjQUFjLEVBQUUsWUFBWTtVQUM1Qk8sSUFBSSxFQUFFO1FBQ1I7TUFBRSxnQkFFQXpDLEtBQUEsQ0FBQThCLGFBQUEsQ0FBQ3pCLFVBQVU7UUFDVE0sVUFBVSxFQUFFQSxVQUFXO1FBQ3ZCQyxVQUFVLEVBQUVBLFVBQVc7UUFDdkJDLFlBQVksRUFBRUEsWUFBYTtRQUMzQkMsYUFBYSxFQUFFVyxvQkFBcUI7UUFDcENWLFlBQVksRUFBRVksbUJBQW9CO1FBQ2xDZSxZQUFZLEVBQUVkLG1CQUFtQixHQUFHRixTQUFTLEdBQUcsSUFBSztRQUNyRGlCLFNBQVMsRUFBRSxJQUFLO1FBQ2hCQyxRQUFRLEVBQUUsSUFBSztRQUNmQyxRQUFRLEVBQUdoQixZQUFZLElBQUlsQixVQUFVLEtBQUssQ0FBQyxHQUFJLElBQUksR0FBR2UsU0FBVTtRQUNoRW9CLFFBQVEsRUFBR2pCLFlBQVksSUFBSWxCLFVBQVUsS0FBS0MsVUFBVSxHQUFJLElBQUksR0FBR2MsU0FBVTtRQUN6RUYsUUFBUSxFQUFFQSxRQUFTO1FBQ25CRixTQUFTLEVBQUM7TUFBb0IsQ0FDL0IsQ0FDRSxDQUFDLGVBRU50QixLQUFBLENBQUE4QixhQUFBO1FBQUtWLEtBQUssRUFBRTtVQUFFWSxPQUFPLEVBQUUsTUFBTTtVQUFFQyxVQUFVLEVBQUU7UUFBUztNQUFFLGdCQUNwRGpDLEtBQUEsQ0FBQThCLGFBQUEsQ0FBQzNCLE1BQU07UUFDTGdDLElBQUk7UUFDSlgsUUFBUSxFQUFFQSxRQUFRLElBQUliLFVBQVUsSUFBSUMsVUFBVztRQUMvQ3dCLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFHekYsQ0FBQztVQUFBLE9BQUtrRSxZQUFZLENBQUNsRSxDQUFDLEVBQUU7WUFBRWdFLFVBQVUsRUFBRUM7VUFBVyxDQUFDLENBQUM7UUFBQSxDQUFDO1FBQzVEUSxLQUFLLEVBQUU7VUFBRTJCLFVBQVUsRUFBRTtRQUFTLENBQUU7UUFDaENULEtBQUssRUFBQyxtQkFBbUI7UUFDekJoQixTQUFTLEVBQUMsV0FBVztRQUNyQmlCLElBQUksRUFBQztNQUFRLGdCQUVidkMsS0FBQSxDQUFBOEIsYUFBQSxDQUFDMUIsSUFBSTtRQUFDb0MsSUFBSSxFQUFDO01BQW9CLENBQUUsQ0FDM0IsQ0FDTCxDQUNGLENBQUM7SUFFVjtFQUFDO0FBQUEsRUF2RnlCeEMsS0FBSyxDQUFDZ0QsU0FBUztBQTBGM0NDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHNUMsYUFBYSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29tcG9uZW50cy9IdWJQYWdpbmF0aW9uLmpzP2U5YTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEh1YiBsaXN0IHBhZ2luYXRpb24g4oCUIFNlbWFudGljIFVJIFBhZ2luYXRpb24gd2l0aCBwaW5uZWQgZmlyc3QvbGFzdCBqdW1wIGJ1dHRvbnMuXG4gKiBBZGFwdGVkIGZyb20gc2hhcmVkIEN1c3RvbVBhZ2luYXRpb24gcGF0dGVybnMuXG4gKi9cblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1xuICBCdXR0b24sXG4gIEljb24sXG4gIFBhZ2luYXRpb25cbn0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuXG5jbGFzcyBIdWJQYWdpbmF0aW9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmVQYWdlLFxuICAgICAgdG90YWxQYWdlcyxcbiAgICAgIG9uUGFnZUNoYW5nZSxcbiAgICAgIGJvdW5kYXJ5UmFuZ2UsXG4gICAgICBzaWJsaW5nUmFuZ2UsXG4gICAgICBzaG93RWxsaXBzaXMsXG4gICAgICBzaG93UHJldmlvdXNBbmROZXh0TmF2ID0gdHJ1ZSxcbiAgICAgIHN0eWxlID0ge30sXG4gICAgICBjbGFzc05hbWUgPSAnJyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2VcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmICh0b3RhbFBhZ2VzIDw9IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRCb3VuZGFyeVJhbmdlID0gYm91bmRhcnlSYW5nZSAhPT0gdW5kZWZpbmVkID8gYm91bmRhcnlSYW5nZSA6ICh0b3RhbFBhZ2VzIDw9IDEwID8gdG90YWxQYWdlcyA6IDIpO1xuICAgIGNvbnN0IGRlZmF1bHRTaWJsaW5nUmFuZ2UgPSBzaWJsaW5nUmFuZ2UgIT09IHVuZGVmaW5lZCA/IHNpYmxpbmdSYW5nZSA6ICh0b3RhbFBhZ2VzIDw9IDE1ID8gdG90YWxQYWdlcyA6IDMpO1xuICAgIGNvbnN0IGRlZmF1bHRTaG93RWxsaXBzaXMgPSBzaG93RWxsaXBzaXMgIT09IHVuZGVmaW5lZCA/IHNob3dFbGxpcHNpcyA6ICh0b3RhbFBhZ2VzID4gMTUpO1xuICAgIGNvbnN0IGhpZGVQcmV2TmV4dCA9IHNob3dQcmV2aW91c0FuZE5leHROYXYgPT09IGZhbHNlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgICAgICAgIC4uLnN0eWxlXG4gICAgICAgIH19XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgPlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkIHx8IGFjdGl2ZVBhZ2UgPD0gMX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBvblBhZ2VDaGFuZ2UoZSwgeyBhY3RpdmVQYWdlOiAxIH0pfVxuICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6ICcwLjVyZW0nIH19XG4gICAgICAgICAgICB0aXRsZT1cIkp1bXAgdG8gZmlyc3QgcGFnZVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ1aSBidXR0b25cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImFuZ2xlIGRvdWJsZSBsZWZ0XCIgLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuICAgICAgICAgIGZsZXg6IDFcbiAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxQYWdpbmF0aW9uXG4gICAgICAgICAgICBhY3RpdmVQYWdlPXthY3RpdmVQYWdlfVxuICAgICAgICAgICAgdG90YWxQYWdlcz17dG90YWxQYWdlc31cbiAgICAgICAgICAgIG9uUGFnZUNoYW5nZT17b25QYWdlQ2hhbmdlfVxuICAgICAgICAgICAgYm91bmRhcnlSYW5nZT17ZGVmYXVsdEJvdW5kYXJ5UmFuZ2V9XG4gICAgICAgICAgICBzaWJsaW5nUmFuZ2U9e2RlZmF1bHRTaWJsaW5nUmFuZ2V9XG4gICAgICAgICAgICBlbGxpcHNpc0l0ZW09e2RlZmF1bHRTaG93RWxsaXBzaXMgPyB1bmRlZmluZWQgOiBudWxsfVxuICAgICAgICAgICAgZmlyc3RJdGVtPXtudWxsfVxuICAgICAgICAgICAgbGFzdEl0ZW09e251bGx9XG4gICAgICAgICAgICBwcmV2SXRlbT17KGhpZGVQcmV2TmV4dCB8fCBhY3RpdmVQYWdlID09PSAxKSA/IG51bGwgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBuZXh0SXRlbT17KGhpZGVQcmV2TmV4dCB8fCBhY3RpdmVQYWdlID09PSB0b3RhbFBhZ2VzKSA/IG51bGwgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ1aSBwYWdpbmF0aW9uIG1lbnVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBpY29uXG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWQgfHwgYWN0aXZlUGFnZSA+PSB0b3RhbFBhZ2VzfVxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IG9uUGFnZUNoYW5nZShlLCB7IGFjdGl2ZVBhZ2U6IHRvdGFsUGFnZXMgfSl9XG4gICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41cmVtJyB9fVxuICAgICAgICAgICAgdGl0bGU9XCJKdW1wIHRvIGxhc3QgcGFnZVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ1aSBidXR0b25cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImFuZ2xlIGRvdWJsZSByaWdodFwiIC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEh1YlBhZ2luYXRpb247XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX2NsYXNzQ2FsbENoZWNrIiwiYSIsIm4iLCJUeXBlRXJyb3IiLCJfZGVmaW5lUHJvcGVydGllcyIsImtleSIsIl9jcmVhdGVDbGFzcyIsImkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJTdHJpbmciLCJOdW1iZXIiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJSZWZlcmVuY2VFcnJvciIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwic2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsImJpbmQiLCJfX3Byb3RvX18iLCJfaW5oZXJpdHMiLCJjcmVhdGUiLCJfc2V0UHJvdG90eXBlT2YiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkJ1dHRvbiIsIkljb24iLCJQYWdpbmF0aW9uIiwiSHViUGFnaW5hdGlvbiIsIl9SZWFjdCRDb21wb25lbnQiLCJyZW5kZXIiLCJfdGhpcyRwcm9wcyIsInByb3BzIiwiYWN0aXZlUGFnZSIsInRvdGFsUGFnZXMiLCJvblBhZ2VDaGFuZ2UiLCJib3VuZGFyeVJhbmdlIiwic2libGluZ1JhbmdlIiwic2hvd0VsbGlwc2lzIiwiX3RoaXMkcHJvcHMkc2hvd1ByZXZpIiwic2hvd1ByZXZpb3VzQW5kTmV4dE5hdiIsIl90aGlzJHByb3BzJHN0eWxlIiwic3R5bGUiLCJfdGhpcyRwcm9wcyRjbGFzc05hbWUiLCJjbGFzc05hbWUiLCJfdGhpcyRwcm9wcyRkaXNhYmxlZCIsImRpc2FibGVkIiwiZGVmYXVsdEJvdW5kYXJ5UmFuZ2UiLCJ1bmRlZmluZWQiLCJkZWZhdWx0U2libGluZ1JhbmdlIiwiZGVmYXVsdFNob3dFbGxpcHNpcyIsImhpZGVQcmV2TmV4dCIsImNyZWF0ZUVsZW1lbnQiLCJ3aWR0aCIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJpY29uIiwib25DbGljayIsIm1hcmdpblJpZ2h0IiwidGl0bGUiLCJ0eXBlIiwibmFtZSIsImZsZXgiLCJlbGxpcHNpc0l0ZW0iLCJmaXJzdEl0ZW0iLCJsYXN0SXRlbSIsInByZXZJdGVtIiwibmV4dEl0ZW0iLCJtYXJnaW5MZWZ0IiwiQ29tcG9uZW50IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/HubPagination.js\n\n}')},"./components/HubRegtestAdminTokenPanel.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require.Button,\n Form = _require.Form,\n Message = _require.Message;\nvar _require2 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require2.readHubAdminTokenFromBrowser,\n saveHubAdminTokenToBrowser = _require2.saveHubAdminTokenToBrowser;\n\n/**\n * Regtest-only: paste Hub setup admin token so Make Payment / Pay Now can use the node wallet.\n */\nfunction HubRegtestAdminTokenPanel(_ref) {\n var network = _ref.network,\n adminTokenProp = _ref.adminTokenProp;\n var isRegtest = String(network || \'\').toLowerCase() === \'regtest\';\n var _React$useState = React.useState(\'\'),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n draft = _React$useState2[0],\n setDraft = _React$useState2[1];\n if (!isRegtest) return null;\n var has = !!readHubAdminTokenFromBrowser(adminTokenProp);\n if (has) {\n return /*#__PURE__*/React.createElement(Message, {\n positive: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n },\n id: "fabric-hub-admin-token-ok"\n }, "Hub ", /*#__PURE__*/React.createElement("strong", null, "admin token"), " is set in this browser (needed for Hub-wallet sends and invoice ", /*#__PURE__*/React.createElement("strong", null, "Pay Now"), ").");\n }\n return /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n },\n id: "fabric-hub-admin-token-missing"\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Regtest: Hub admin token"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#333\'\n }\n }, "Paste the token from first-time setup so this tab can broadcast from the Hub ", /*#__PURE__*/React.createElement("code", null, "bitcoind"), " wallet (Make Payment, Pay Now). Stored in this origin\'s browser Fabric state store."), /*#__PURE__*/React.createElement(Form, {\n style: {\n marginTop: \'0.75em\',\n maxWidth: \'28rem\'\n },\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n if (saveHubAdminTokenToBrowser(draft)) setDraft(\'\');\n }\n }, /*#__PURE__*/React.createElement(Form.Input, {\n type: "password",\n label: "Setup admin token",\n value: draft,\n onChange: function onChange(e, _ref2) {\n var value = _ref2.value;\n return setDraft(value != null ? String(value) : e && e.target && e.target.value || \'\');\n },\n onInput: function onInput(e) {\n var v = e && e.target && e.target.value != null ? String(e.target.value) : \'\';\n if (v !== draft) setDraft(v);\n },\n placeholder: "Token from initial POST /settings (or refresh)",\n autoComplete: "off"\n }), /*#__PURE__*/React.createElement(Button, {\n type: "submit",\n size: "small",\n primary: true,\n disabled: !String(draft).trim()\n }, "Save in this browser")));\n}\nmodule.exports = HubRegtestAdminTokenPanel;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0h1YlJlZ3Rlc3RBZG1pblRva2VuUGFuZWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBQUEsU0FBQUEsZUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFDLGVBQUEsQ0FBQUYsQ0FBQSxLQUFBRyxxQkFBQSxDQUFBSCxDQUFBLEVBQUFDLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUosQ0FBQSxFQUFBQyxDQUFBLEtBQUFJLGdCQUFBO0FBQUEsU0FBQUEsaUJBQUEsY0FBQUMsU0FBQTtBQUFBLFNBQUFGLDRCQUFBSixDQUFBLEVBQUFPLENBQUEsUUFBQVAsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBUSxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUEsT0FBQUUsQ0FBQSxNQUFBQyxRQUFBLENBQUFDLElBQUEsQ0FBQVgsQ0FBQSxFQUFBWSxLQUFBLDZCQUFBSCxDQUFBLElBQUFULENBQUEsQ0FBQWEsV0FBQSxLQUFBSixDQUFBLEdBQUFULENBQUEsQ0FBQWEsV0FBQSxDQUFBQyxJQUFBLGFBQUFMLENBQUEsY0FBQUEsQ0FBQSxHQUFBTSxLQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsb0JBQUFTLENBQUEsK0NBQUFRLElBQUEsQ0FBQVIsQ0FBQSxJQUFBRCxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUE7QUFBQSxTQUFBQyxrQkFBQVIsQ0FBQSxFQUFBTyxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBUCxDQUFBLENBQUFrQixNQUFBLE1BQUFYLENBQUEsR0FBQVAsQ0FBQSxDQUFBa0IsTUFBQSxZQUFBakIsQ0FBQSxNQUFBa0IsQ0FBQSxHQUFBSixLQUFBLENBQUFSLENBQUEsR0FBQU4sQ0FBQSxHQUFBTSxDQUFBLEVBQUFOLENBQUEsSUFBQWtCLENBQUEsQ0FBQWxCLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFVBQUFrQixDQUFBO0FBQUEsU0FBQWhCLHNCQUFBSCxDQUFBLEVBQUFvQixDQUFBLFFBQUFYLENBQUEsV0FBQVQsQ0FB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QyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRzFFLENBQUMsRUFBSztNQUNkLElBQU0yRSxDQUFDLEdBQUczRSxDQUFDLElBQUlBLENBQUMsQ0FBQ3lFLE1BQU0sSUFBSXpFLENBQUMsQ0FBQ3lFLE1BQU0sQ0FBQzNDLEtBQUssSUFBSSxJQUFJLEdBQUdnQixNQUFNLENBQUM5QyxDQUFDLENBQUN5RSxNQUFNLENBQUMzQyxLQUFLLENBQUMsR0FBRyxFQUFFO01BQy9FLElBQUk2QyxDQUFDLEtBQUt4QixLQUFLLEVBQUVDLFFBQVEsQ0FBQ3VCLENBQUMsQ0FBQztJQUM5QixDQUFFO0lBQ0ZDLFdBQVcsRUFBQyxnREFBZ0Q7SUFDNURDLFlBQVksRUFBQztFQUFLLENBQ25CLENBQUMsZUFDRjdDLEtBQUEsQ0FBQXNCLGFBQUEsQ0FBQ25CLE1BQU07SUFBQ2tDLElBQUksRUFBQyxRQUFRO0lBQUNiLElBQUksRUFBQyxPQUFPO0lBQUNzQixPQUFPO0lBQUNDLFFBQVEsRUFBRSxDQUFDakMsTUFBTSxDQUFDSyxLQUFLLENBQUMsQ0FBQzZCLElBQUksQ0FBQztFQUFFLEdBQUMsc0JBRXBFLENBQ0osQ0FDQyxDQUFDO0FBRWQ7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUd6Qyx5QkFBeUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvSHViUmVndGVzdEFkbWluVG9rZW5QYW5lbC5qcz85MDk3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBCdXR0b24sIEZvcm0sIE1lc3NhZ2UgfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCB7IHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIsIHNhdmVIdWJBZG1pblRva2VuVG9Ccm93c2VyIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViQWRtaW5Ub2tlbkJyb3dzZXInKTtcblxuLyoqXG4gKiBSZWd0ZXN0LW9ubHk6IHBhc3RlIEh1YiBzZXR1cCBhZG1pbiB0b2tlbiBzbyBNYWtlIFBheW1lbnQgLyBQYXkgTm93IGNhbiB1c2UgdGhlIG5vZGUgd2FsbGV0LlxuICovXG5mdW5jdGlvbiBIdWJSZWd0ZXN0QWRtaW5Ub2tlblBhbmVsICh7IG5ldHdvcmssIGFkbWluVG9rZW5Qcm9wIH0pIHtcbiAgY29uc3QgaXNSZWd0ZXN0ID0gU3RyaW5nKG5ldHdvcmsgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdyZWd0ZXN0JztcbiAgY29uc3QgW2RyYWZ0LCBzZXREcmFmdF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGlmICghaXNSZWd0ZXN0KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgaGFzID0gISFyZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKGFkbWluVG9rZW5Qcm9wKTtcbiAgaWYgKGhhcykge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVzc2FnZSBwb3NpdGl2ZSBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19IGlkPVwiZmFicmljLWh1Yi1hZG1pbi10b2tlbi1va1wiPlxuICAgICAgICBIdWIgPHN0cm9uZz5hZG1pbiB0b2tlbjwvc3Ryb25nPiBpcyBzZXQgaW4gdGhpcyBicm93c2VyIChuZWVkZWQgZm9yIEh1Yi13YWxsZXQgc2VuZHMgYW5kIGludm9pY2UgPHN0cm9uZz5QYXkgTm93PC9zdHJvbmc+KS5cbiAgICAgIDwvTWVzc2FnZT5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19IGlkPVwiZmFicmljLWh1Yi1hZG1pbi10b2tlbi1taXNzaW5nXCI+XG4gICAgICA8TWVzc2FnZS5IZWFkZXI+UmVndGVzdDogSHViIGFkbWluIHRva2VuPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyMzMzMnIH19PlxuICAgICAgICBQYXN0ZSB0aGUgdG9rZW4gZnJvbSBmaXJzdC10aW1lIHNldHVwIHNvIHRoaXMgdGFiIGNhbiBicm9hZGNhc3QgZnJvbSB0aGUgSHViIDxjb2RlPmJpdGNvaW5kPC9jb2RlPiB3YWxsZXQgKE1ha2UgUGF5bWVudCwgUGF5IE5vdykuIFN0b3JlZCBpbiB0aGlzIG9yaWdpbiZhcG9zO3MgYnJvd3NlciBGYWJyaWMgc3RhdGUgc3RvcmUuXG4gICAgICA8L3A+XG4gICAgICA8Rm9ybVxuICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBtYXhXaWR0aDogJzI4cmVtJyB9fVxuICAgICAgICBvblN1Ym1pdD17KGUpID0+IHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgaWYgKHNhdmVIdWJBZG1pblRva2VuVG9Ccm93c2VyKGRyYWZ0KSkgc2V0RHJhZnQoJycpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgbGFiZWw9XCJTZXR1cCBhZG1pbiB0b2tlblwiXG4gICAgICAgICAgdmFsdWU9e2RyYWZ0fVxuICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiBzZXREcmFmdCh2YWx1ZSAhPSBudWxsID8gU3RyaW5nKHZhbHVlKSA6IChlICYmIGUudGFyZ2V0ICYmIGUudGFyZ2V0LnZhbHVlKSB8fCAnJyl9XG4gICAgICAgICAgb25JbnB1dD17KGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBlICYmIGUudGFyZ2V0ICYmIGUudGFyZ2V0LnZhbHVlICE9IG51bGwgPyBTdHJpbmcoZS50YXJnZXQudmFsdWUpIDogJyc7XG4gICAgICAgICAgICBpZiAodiAhPT0gZHJhZnQpIHNldERyYWZ0KHYpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJUb2tlbiBmcm9tIGluaXRpYWwgUE9TVCAvc2V0dGluZ3MgKG9yIHJlZnJlc2gpXCJcbiAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBzaXplPVwic21hbGxcIiBwcmltYXJ5IGRpc2FibGVkPXshU3RyaW5nKGRyYWZ0KS50cmltKCl9PlxuICAgICAgICAgIFNhdmUgaW4gdGhpcyBicm93c2VyXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9Gb3JtPlxuICAgIDwvTWVzc2FnZT5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBIdWJSZWd0ZXN0QWRtaW5Ub2tlblBhbmVsO1xuIl0sIm5hbWVzIjpbIl9zbGljZWRUb0FycmF5IiwiciIsImUiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwiYSIsIl9hcnJheUxpa2VUb0FycmF5IiwidCIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbmd0aCIsIm4iLCJsIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpIiwidSIsImYiLCJvIiwibmV4dCIsIk9iamVjdCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJpc0FycmF5IiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJCdXR0b24iLCJGb3JtIiwiTWVzc2FnZSIsIl9yZXF1aXJlMiIsInJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIiLCJzYXZlSHViQWRtaW5Ub2tlblRvQnJvd3NlciIsIkh1YlJlZ3Rlc3RBZG1pblRva2VuUGFuZWwiLCJfcmVmIiwibmV0d29yayIsImFkbWluVG9rZW5Qcm9wIiwiaXNSZWd0ZXN0IiwiU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJkcmFmdCIsInNldERyYWZ0IiwiaGFzIiwiY3JlYXRlRWxlbWVudCIsInBvc2l0aXZlIiwic2l6ZSIsInN0eWxlIiwibWFyZ2luQm90dG9tIiwiaWQiLCJ3YXJuaW5nIiwiSGVhZGVyIiwibWFyZ2luIiwiY29sb3IiLCJtYXJnaW5Ub3AiLCJtYXhXaWR0aCIsIm9uU3VibWl0IiwicHJldmVudERlZmF1bHQiLCJJbnB1dCIsInR5cGUiLCJsYWJlbCIsIm9uQ2hhbmdlIiwiX3JlZjIiLCJ0YXJnZXQiLCJvbklucHV0IiwidiIsInBsYWNlaG9sZGVyIiwiYXV0b0NvbXBsZXRlIiwicHJpbWFyeSIsImRpc2FibGVkIiwidHJpbSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/HubRegtestAdminTokenPanel.js\n\n}')},"./components/IdentityManager.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n// Dependencies\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\n\n// Fabric Types\nvar Key = __webpack_require__(/*! @fabric/core/types/key */ "./node_modules/@fabric/core/types/key.js");\nvar Identity = __webpack_require__(/*! @fabric/core/types/identity */ "./node_modules/@fabric/core/types/identity.js");\n\n// Semantic UI\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Accordion = _require2.Accordion,\n Button = _require2.Button,\n Checkbox = _require2.Checkbox,\n Divider = _require2.Divider,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Label = _require2.Label,\n Message = _require2.Message,\n Modal = _require2.Modal,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! ../functions/fabricDelegationLocal */ "./functions/fabricDelegationLocal.js"),\n DELEGATION_STORAGE_KEY = _require3.DELEGATION_STORAGE_KEY,\n notifyDelegationStorageChanged = _require3.notifyDelegationStorageChanged;\nvar _require4 = __webpack_require__(/*! ../functions/fabricSafeLog */ "./functions/fabricSafeLog.js"),\n safeIdentityErr = _require4.safeIdentityErr;\nvar _require5 = __webpack_require__(/*! ../functions/fabricBrowserState */ "./functions/fabricBrowserState.js"),\n readStorageJSON = _require5.readStorageJSON,\n readStorageString = _require5.readStorageString,\n writeStorageJSON = _require5.writeStorageJSON,\n removeStorageKey = _require5.removeStorageKey,\n clearFabricBrowserIdentityLocal = _require5.clearFabricBrowserIdentityLocal;\nvar _require6 = __webpack_require__(/*! ../functions/fabricIdentityBackupCrypto */ "./functions/fabricIdentityBackupCrypto.js"),\n encryptFabricIdentityBackupPayload = _require6.encryptFabricIdentityBackupPayload,\n decryptFabricIdentityBackupToPayload = _require6.decryptFabricIdentityBackupToPayload;\nvar _require7 = __webpack_require__(/*! ../functions/fabricHubLocalIdentity */ "./functions/fabricHubLocalIdentity.js"),\n LOCAL_IDENTITY_PASSWORD_MIN = _require7.LOCAL_IDENTITY_PASSWORD_MIN,\n buildLocalFabricIdentityPayload = _require7.buildLocalFabricIdentityPayload,\n fabricPlaintextSigningUnlockable = _require7.fabricPlaintextSigningUnlockable,\n unlockedSessionFromDecryptedMaster = _require7.unlockedSessionFromDecryptedMaster,\n encryptLocalIdentityAtRest = _require7.encryptLocalIdentityAtRest,\n decryptLocalIdentityMasterMaterial = _require7.decryptLocalIdentityMasterMaterial;\nvar _require8 = __webpack_require__(/*! ../functions/fabricBrowserIdentityDev */ "./functions/fabricBrowserIdentityDev.js"),\n storeUnlockedIdentityFromMnemonic = _require8.storeUnlockedIdentityFromMnemonic;\nvar _require9 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require9.readHubAdminTokenFromBrowser;\nvar FabricHubAdminTokenNotice = __webpack_require__(/*! ./fabricIdentity/FabricHubAdminTokenNotice */ "./components/fabricIdentity/FabricHubAdminTokenNotice.js");\nvar _require0 = __webpack_require__(/*! ../functions/fabricAccountDerivedIdentity */ "./functions/fabricAccountDerivedIdentity.js"),\n deriveFabricAccountIdentityKeys = _require0.deriveFabricAccountIdentityKeys,\n fabricRootXpubFromMasterXprv = _require0.fabricRootXpubFromMasterXprv,\n identityFromFabricProtocolSigningXprv = _require0.identityFromFabricProtocolSigningXprv;\nvar _require1 = __webpack_require__(/*! ../functions/fabricDesktopLoginVerify */ "./functions/fabricDesktopLoginVerify.js"),\n verifyFabricDesktopLoginSignedPayload = _require1.verifyFabricDesktopLoginSignedPayload,\n buildFabricIdentitySignedPayload = _require1.buildFabricIdentitySignedPayload;\nvar _require10 = __webpack_require__(/*! ../functions/fabricDeviceLinkClient */ "./functions/fabricDeviceLinkClient.js"),\n buildDeviceLinkOfferMessage = _require10.buildDeviceLinkOfferMessage,\n createDeviceLinkOffer = _require10.createDeviceLinkOffer,\n fetchDeviceLinkSession = _require10.fetchDeviceLinkSession,\n postDeviceLinkSignature = _require10.postDeviceLinkSignature;\nvar _require11 = __webpack_require__(/*! ../functions/fabricLinkedDevices */ "./functions/fabricLinkedDevices.js"),\n STORAGE_LINKED_DEVICES = _require11.STORAGE_LINKED_DEVICES,\n readLinkedDevices = _require11.readLinkedDevices,\n mergeLinkedDevice = _require11.mergeLinkedDevice,\n publishHubIdentityCrossSign = _require11.publishHubIdentityCrossSign,\n revokeLinkedDevice = _require11.revokeLinkedDevice;\nvar _require12 = __webpack_require__(/*! ../functions/fabricIdentityCapabilities */ "./functions/fabricIdentityCapabilities.js"),\n buildFabricAccountSubtreeBackupInner = _require12.buildFabricAccountSubtreeBackupInner;\nvar _require13 = __webpack_require__(/*! ../functions/fabricIdentityLockPrefs */ "./functions/fabricIdentityLockPrefs.js"),\n DEFAULT_LOCK_TIMEOUT_MINUTES = _require13.DEFAULT_LOCK_TIMEOUT_MINUTES,\n readFabricIdentityLockTimeoutMinutes = _require13.readFabricIdentityLockTimeoutMinutes,\n writeFabricIdentityLockTimeoutMinutes = _require13.writeFabricIdentityLockTimeoutMinutes,\n lockTimeoutMinutesToMs = _require13.lockTimeoutMinutesToMs;\n\n/** Long xpub / Bech32 strings must wrap or mobile modals overflow and the viewport strobes. */\nvar identityMonospaceBlockStyle = {\n display: \'block\',\n margin: \'0.35em 0 0.75em\',\n padding: \'0.5rem 0.6rem\',\n maxWidth: \'100%\',\n boxSizing: \'border-box\',\n fontSize: \'0.78em\',\n lineHeight: 1.4,\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-all\',\n overflowWrap: \'anywhere\',\n fontFamily: \'monospace, Menlo, Monaco, Consolas, monospace\',\n background: \'rgba(0, 0, 0, 0.04)\',\n borderRadius: 4,\n border: \'1px solid rgba(0, 0, 0, 0.06)\',\n overflowX: \'auto\'\n};\nfunction IdentityManager(props) {\n var lockTimeoutMsFromTests = props && typeof props.lockTimeoutMs === \'number\' && props.lockTimeoutMs > 0 ? props.lockTimeoutMs : null;\n var _React$useState = React.useState(function () {\n try {\n if (typeof window === \'undefined\') return DEFAULT_LOCK_TIMEOUT_MINUTES;\n return readFabricIdentityLockTimeoutMinutes();\n } catch (e) {\n return DEFAULT_LOCK_TIMEOUT_MINUTES;\n }\n }),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n lockTimeoutMinutes = _React$useState2[0],\n setLockTimeoutMinutes = _React$useState2[1];\n var lockTimeoutMs = lockTimeoutMsFromTests != null ? lockTimeoutMsFromTests : lockTimeoutMinutesToMs(lockTimeoutMinutes);\n var suppressForget = !!(props && props.suppressForgetAndLinkedChrome);\n var _React$useState3 = React.useState(function () {\n // Parent identity is authoritative when provided (prevents lock/watch-only state drifting from shell).\n if (props.currentIdentity && (props.currentIdentity.id || props.currentIdentity.xpub)) {\n return {\n id: props.currentIdentity.id,\n xpub: props.currentIdentity.xpub,\n xprv: props.currentIdentity.xprv || null,\n passwordProtected: !!props.currentIdentity.passwordProtected,\n plaintextUnlockAvailable: !!props.currentIdentity.plaintextUnlockAvailable,\n linkedFromDesktop: !!props.currentIdentity.linkedFromDesktop,\n fabricIdentityMode: props.currentIdentity.fabricIdentityMode || null,\n fabricAccountIndex: props.currentIdentity.fabricAccountIndex != null ? Math.floor(Number(props.currentIdentity.fabricAccountIndex)) : undefined,\n fabricHdRole: props.currentIdentity.fabricHdRole || null,\n masterXprv: props.currentIdentity.masterXprv || null,\n masterXpub: props.currentIdentity.masterXpub || null\n };\n }\n try {\n var hasStorage = false;\n try {\n hasStorage = typeof window !== \'undefined\';\n } catch (e) {\n hasStorage = false;\n }\n if (!hasStorage) return null;\n var parsed = readStorageJSON(\'fabric.identity.local\', null);\n if (!parsed) return null;\n var bl = buildLocalFabricIdentityPayload(parsed);\n if (bl.resolved && bl.record) {\n var r = bl.record;\n return {\n id: r.id,\n xpub: r.xpub,\n xprv: null,\n passwordProtected: !!r.passwordProtected,\n plaintextUnlockAvailable: !!r.plaintextUnlockAvailable,\n fabricIdentityMode: r.fabricIdentityMode || undefined,\n fabricAccountIndex: r.fabricAccountIndex != null ? Math.floor(Number(r.fabricAccountIndex)) : undefined,\n fabricHdRole: r.fabricHdRole || undefined,\n masterXpub: r.masterXpub || null,\n masterXprv: null,\n linkedFromDesktop: false\n };\n }\n return null;\n } catch (e) {\n console.warn(\'[IDENTITY]\', \'Failed to restore local identity:\', safeIdentityErr(e));\n return null;\n }\n }),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n localIdentity = _React$useState4[0],\n setLocalIdentity = _React$useState4[1];\n var _React$useState5 = React.useState(false),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n busy = _React$useState6[0],\n setBusy = _React$useState6[1];\n var _React$useState7 = React.useState(null),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n error = _React$useState8[0],\n setError = _React$useState8[1];\n var _React$useState9 = React.useState(false),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n showConfirmForget = _React$useState0[0],\n setShowConfirmForget = _React$useState0[1];\n var _React$useState1 = React.useState(null),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n signature = _React$useState10[0],\n setSignature = _React$useState10[1];\n var _React$useState11 = React.useState(null),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n pendingSeed = _React$useState12[0],\n setPendingSeed = _React$useState12[1]; // { mnemonic, xprv }\n var _React$useState13 = React.useState(false),\n _React$useState14 = _slicedToArray(_React$useState13, 2),\n seedConfirmed = _React$useState14[0],\n setSeedConfirmed = _React$useState14[1]; // when true, show final backup/login screen\n var _React$useState15 = React.useState(\'\'),\n _React$useState16 = _slicedToArray(_React$useState15, 2),\n xpubInput = _React$useState16[0],\n setXpubInput = _React$useState16[1];\n var _React$useState17 = React.useState(\'\'),\n _React$useState18 = _slicedToArray(_React$useState17, 2),\n identityPassword = _React$useState18[0],\n setIdentityPassword = _React$useState18[1];\n var _React$useState19 = React.useState(\'\'),\n _React$useState20 = _slicedToArray(_React$useState19, 2),\n identityPasswordConfirm = _React$useState20[0],\n setIdentityPasswordConfirm = _React$useState20[1];\n var _React$useState21 = React.useState(\'\'),\n _React$useState22 = _slicedToArray(_React$useState21, 2),\n unlockPassword = _React$useState22[0],\n setUnlockPassword = _React$useState22[1];\n /** Legacy plaintext-at-rest: set password, encrypt on disk, then unlock in one step. */\n var _React$useState23 = React.useState(\'\'),\n _React$useState24 = _slicedToArray(_React$useState23, 2),\n plaintextMigrationPassword = _React$useState24[0],\n setPlaintextMigrationPassword = _React$useState24[1];\n var _React$useState25 = React.useState(\'\'),\n _React$useState26 = _slicedToArray(_React$useState25, 2),\n plaintextMigrationPasswordConfirm = _React$useState26[0],\n setPlaintextMigrationPasswordConfirm = _React$useState26[1];\n /** Password for JSON export (v2 encrypted backup). */\n var _React$useState27 = React.useState(\'\'),\n _React$useState28 = _slicedToArray(_React$useState27, 2),\n backupExportPassword = _React$useState28[0],\n setBackupExportPassword = _React$useState28[1];\n var _React$useState29 = React.useState(false),\n _React$useState30 = _slicedToArray(_React$useState29, 2),\n backupExportBusy = _React$useState30[0],\n setBackupExportBusy = _React$useState30[1];\n var _React$useState31 = React.useState(\'\'),\n _React$useState32 = _slicedToArray(_React$useState31, 2),\n importBackupFilePassword = _React$useState32[0],\n setImportBackupFilePassword = _React$useState32[1];\n var _React$useState33 = React.useState(false),\n _React$useState34 = _slicedToArray(_React$useState33, 2),\n isGenerating = _React$useState34[0],\n setIsGenerating = _React$useState34[1];\n var _React$useState35 = React.useState(false),\n _React$useState36 = _slicedToArray(_React$useState35, 2),\n showSeedPhrase = _React$useState36[0],\n setShowSeedPhrase = _React$useState36[1];\n var _React$useState37 = React.useState(false),\n _React$useState38 = _slicedToArray(_React$useState37, 2),\n showBackupKey = _React$useState38[0],\n setShowBackupKey = _React$useState38[1];\n var _React$useState39 = React.useState(function () {\n return props.initialLoginMethod != null ? props.initialLoginMethod : null;\n }),\n _React$useState40 = _slicedToArray(_React$useState39, 2),\n loginMethod = _React$useState40[0],\n setLoginMethod = _React$useState40[1]; // \'existing\' | \'generate\' | \'import\' | \'restoreMnemonic\' | null\n var _React$useState41 = React.useState(\'\'),\n _React$useState42 = _slicedToArray(_React$useState41, 2),\n devMnemonicText = _React$useState42[0],\n setDevMnemonicText = _React$useState42[1];\n var _React$useState43 = React.useState(\'\'),\n _React$useState44 = _slicedToArray(_React$useState43, 2),\n devBip39Passphrase = _React$useState44[0],\n setDevBip39Passphrase = _React$useState44[1];\n var _React$useState45 = React.useState(false),\n _React$useState46 = _slicedToArray(_React$useState45, 2),\n devMnemonicReplace = _React$useState46[0],\n setDevMnemonicReplace = _React$useState46[1];\n /** User must check before finishing a newly generated identity (backup discipline). */\n var _React$useState47 = React.useState(false),\n _React$useState48 = _slicedToArray(_React$useState47, 2),\n backupAcknowledged = _React$useState48[0],\n setBackupAcknowledged = _React$useState48[1];\n var _React$useState49 = React.useState(false),\n _React$useState50 = _slicedToArray(_React$useState49, 2),\n deviceLinkBusy = _React$useState50[0],\n setDeviceLinkBusy = _React$useState50[1];\n var _React$useState51 = React.useState(null),\n _React$useState52 = _slicedToArray(_React$useState51, 2),\n deviceLinkOffer = _React$useState52[0],\n setDeviceLinkOffer = _React$useState52[1];\n var _React$useState53 = React.useState(null),\n _React$useState54 = _slicedToArray(_React$useState53, 2),\n deviceLinkQr = _React$useState54[0],\n setDeviceLinkQr = _React$useState54[1];\n var _React$useState55 = React.useState(0),\n _React$useState56 = _slicedToArray(_React$useState55, 2),\n linkedDevicesRev = _React$useState56[0],\n setLinkedDevicesRev = _React$useState56[1];\n var deviceLinkPollRef = React.useRef(null);\n var linkedDevices = React.useMemo(function () {\n return readLinkedDevices();\n }, [linkedDevicesRev, localIdentity]);\n React.useEffect(function () {\n var url = deviceLinkOffer && deviceLinkOffer.protocolUrl;\n if (!url) {\n setDeviceLinkQr(null);\n return;\n }\n var cancelled = false;\n try {\n var QRCode = __webpack_require__(/*! qrcode */ "./node_modules/qrcode/lib/browser.js");\n QRCode.toDataURL(url, {\n width: 196,\n margin: 1,\n errorCorrectionLevel: \'M\'\n }).then(function (data) {\n if (!cancelled) setDeviceLinkQr(data);\n })["catch"](function () {\n if (!cancelled) setDeviceLinkQr(null);\n });\n } catch (_) {\n setDeviceLinkQr(null);\n }\n return function () {\n cancelled = true;\n };\n }, [deviceLinkOffer && deviceLinkOffer.protocolUrl]);\n var usesDiskEncryptionPasswordForBackup = !!(localIdentity && localIdentity.passwordProtected && localIdentity.xprv);\n var resolveBackupEncryptionPassword = React.useCallback(function () {\n if (usesDiskEncryptionPasswordForBackup) {\n var u = String(unlockPassword || \'\').trim();\n return u.length >= LOCAL_IDENTITY_PASSWORD_MIN ? u : \'\';\n }\n return String(backupExportPassword || \'\').trim();\n }, [usesDiskEncryptionPasswordForBackup, unlockPassword, backupExportPassword]);\n var resetSeedState = function resetSeedState() {\n setPendingSeed(null);\n setSeedConfirmed(false);\n setIdentityPassword(\'\');\n setIdentityPasswordConfirm(\'\');\n setIsGenerating(false);\n setShowSeedPhrase(false);\n setShowBackupKey(false);\n setUnlockPassword(\'\');\n setPlaintextMigrationPassword(\'\');\n setPlaintextMigrationPasswordConfirm(\'\');\n setBackupExportPassword(\'\');\n setBackupExportBusy(false);\n setDevMnemonicText(\'\');\n setDevBip39Passphrase(\'\');\n setDevMnemonicReplace(false);\n setBackupAcknowledged(false);\n setLoginMethod(props.initialLoginMethod != null ? props.initialLoginMethod : null);\n };\n var backToLoginChooser = function backToLoginChooser() {\n if (props.postSetupFlow) setLoginMethod(\'generate\');else setLoginMethod(props.initialLoginMethod != null ? props.initialLoginMethod : null);\n };\n\n // Derive lock state: password-protected or plaintext-on-disk awaiting unlock (no signing key in memory).\n var isLocked = !!(localIdentity && localIdentity.id && localIdentity.xpub && !localIdentity.xprv && !!(localIdentity.passwordProtected || localIdentity.plaintextUnlockAvailable));\n var prevHadSigningKeyRef = React.useRef(false);\n React.useEffect(function () {\n var has = !!(localIdentity && localIdentity.xprv);\n if (prevHadSigningKeyRef.current && !has) {\n setUnlockPassword(\'\');\n }\n prevHadSigningKeyRef.current = has;\n }, [localIdentity]);\n\n // Automatically re-lock after timeout — password identities and plaintext-derived identities alike.\n React.useEffect(function () {\n if (!localIdentity || !localIdentity.xprv || !lockTimeoutMs) return;\n var shouldTimedRelock = !!(localIdentity.passwordProtected || localIdentity.plaintextUnlockAvailable);\n if (!shouldTimedRelock) return;\n var timer = setTimeout(function () {\n setLocalIdentity(function (prev) {\n if (!prev || !prev.xprv) return prev;\n var next = _objectSpread(_objectSpread({}, prev), {}, {\n xprv: null\n });\n if (prev.fabricIdentityMode === \'account\') {\n next.masterXprv = null;\n }\n if (!prev.passwordProtected) {\n try {\n var parsed = readStorageJSON(\'fabric.identity.local\', null);\n if (parsed && fabricPlaintextSigningUnlockable(parsed)) next.plaintextUnlockAvailable = true;\n } catch (e) {}\n }\n return next;\n });\n }, lockTimeoutMs);\n return function () {\n clearTimeout(timer);\n };\n }, [localIdentity && localIdentity.xprv, lockTimeoutMs]);\n function identityAnchorKey(i) {\n if (!i || !i.id && !i.xpub) return \'\';\n var acct = i.fabricAccountIndex != null && i.fabricAccountIndex !== \'\' ? String(Math.floor(Number(i.fabricAccountIndex))) : \'\';\n var mode = i.fabricIdentityMode ? String(i.fabricIdentityMode) : \'\';\n var hd = i.fabricHdRole ? String(i.fabricHdRole) : \'\';\n return "".concat(String(i.id || \'\'), "|").concat(String(i.xpub || \'\'), "|").concat(i.passwordProtected ? \'1\' : \'0\', "|").concat(i.plaintextUnlockAvailable ? \'1\' : \'0\', "|").concat(i.linkedFromDesktop ? \'1\' : \'0\', "|").concat(mode, "|").concat(acct, "|").concat(hd);\n }\n\n // Anchor key only (no xprv): avoid local<->parent lock/unlock echo loops that can flicker the modal.\n var parentIdentityKey = identityAnchorKey(props.currentIdentity);\n\n // Keep modal state aligned with Hub shell when parent identity changes (forget, desktop link, etc.).\n React.useEffect(function () {\n var p = props.currentIdentity;\n if (!p || !p.id && !p.xpub) {\n setLocalIdentity(function (prev) {\n return prev ? null : prev;\n });\n return;\n }\n setLocalIdentity(function (prev) {\n if (identityAnchorKey(prev) === identityAnchorKey(p)) {\n var prevHasXprv = !!(prev && prev.xprv);\n var parentHasXprv = !!p.xprv;\n var needsKeyFlow = !!(p && p.passwordProtected || prev && prev.passwordProtected || p && p.plaintextUnlockAvailable || prev && prev.plaintextUnlockAvailable);\n if (!needsKeyFlow || prevHasXprv === parentHasXprv) return prev;\n }\n return {\n id: p.id,\n xpub: p.xpub,\n xprv: p.xprv || null,\n passwordProtected: !!p.passwordProtected,\n plaintextUnlockAvailable: !!p.plaintextUnlockAvailable,\n linkedFromDesktop: !!p.linkedFromDesktop,\n fabricIdentityMode: p.fabricIdentityMode || null,\n fabricAccountIndex: p.fabricAccountIndex != null ? Math.floor(Number(p.fabricAccountIndex)) : undefined,\n fabricHdRole: p.fabricHdRole || undefined,\n masterXprv: p.masterXprv || null,\n masterXpub: p.masterXpub || null\n };\n });\n }, [parentIdentityKey]);\n var onLocalIdentityChangeRef = React.useRef(props.onLocalIdentityChange);\n var onLockStateChangeRef = React.useRef(props.onLockStateChange);\n React.useLayoutEffect(function () {\n onLocalIdentityChangeRef.current = props.onLocalIdentityChange;\n onLockStateChangeRef.current = props.onLockStateChange;\n });\n\n // Notify parent when the local identity changes so outer UI (TopPanel) and Bridge can update.\n // Include xprv when available so Bridge can encrypt documents.\n // Callback ref avoids a render loop when the parent passes an inline function that changes every render.\n React.useEffect(function () {\n var cb = onLocalIdentityChangeRef.current;\n if (typeof cb !== \'function\') return;\n if (localIdentity && localIdentity.id && localIdentity.xpub) {\n var pw = !!localIdentity.passwordProtected;\n var plainAvail = !!(localIdentity.plaintextUnlockAvailable && !localIdentity.xprv && !pw);\n cb(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({\n id: localIdentity.id,\n xpub: localIdentity.xpub,\n xprv: localIdentity.xprv || undefined,\n passwordProtected: pw\n }, plainAvail ? {\n plaintextUnlockAvailable: true\n } : {}), localIdentity.fabricIdentityMode ? {\n fabricIdentityMode: localIdentity.fabricIdentityMode\n } : {}), localIdentity.fabricAccountIndex != null ? {\n fabricAccountIndex: localIdentity.fabricAccountIndex\n } : {}), localIdentity.fabricHdRole ? {\n fabricHdRole: localIdentity.fabricHdRole\n } : {}), localIdentity.masterXprv ? {\n masterXprv: localIdentity.masterXprv\n } : {}), localIdentity.masterXpub ? {\n masterXpub: localIdentity.masterXpub\n } : {}));\n } else {\n cb(null);\n }\n }, [localIdentity]);\n\n // Notify parent when lock state changes so header can show lock icon.\n // Only report "locked" when user can unlock (password-protected), not for xpub-only.\n React.useEffect(function () {\n var cb = onLockStateChangeRef.current;\n if (typeof cb !== \'function\') return;\n cb(isLocked);\n }, [isLocked]);\n\n // Sync identity to chrome.storage when running in extension popup (enables Login with Extension on Hub page).\n React.useEffect(function () {\n try {\n var _chrome$storage, _chrome$runtime;\n if (typeof chrome === \'undefined\' || !((_chrome$storage = chrome.storage) !== null && _chrome$storage !== void 0 && _chrome$storage.local) || !((_chrome$runtime = chrome.runtime) !== null && _chrome$runtime !== void 0 && _chrome$runtime.id)) return;\n if (localIdentity && localIdentity.xpub) {\n var payload = {\n id: localIdentity.id,\n xpub: localIdentity.xpub,\n passwordProtected: !!localIdentity.passwordProtected,\n fabricIdentityMode: localIdentity.fabricIdentityMode || undefined,\n fabricAccountIndex: localIdentity.fabricAccountIndex,\n fabricHdRole: localIdentity.fabricHdRole || undefined,\n masterXpub: localIdentity.masterXpub || undefined\n };\n chrome.storage.local.set({\n \'fabric.identity.ext\': payload\n });\n } else {\n chrome.storage.local.remove(\'fabric.identity.ext\');\n }\n } catch (e) {}\n }, [localIdentity]);\n var _React$useState57 = React.useState(false),\n _React$useState58 = _slicedToArray(_React$useState57, 2),\n extensionAvailable = _React$useState58[0],\n setExtensionAvailable = _React$useState58[1];\n var desktopPollIntervalRef = React.useRef(null);\n React.useEffect(function () {\n return function () {\n if (desktopPollIntervalRef.current) {\n clearInterval(desktopPollIntervalRef.current);\n desktopPollIntervalRef.current = null;\n }\n };\n }, []);\n React.useEffect(function () {\n var check = function check() {\n var _window$__FABRIC_HUB_;\n return setExtensionAvailable(!!(typeof window !== \'undefined\' && (_window$__FABRIC_HUB_ = window.__FABRIC_HUB_EXTENSION__) !== null && _window$__FABRIC_HUB_ !== void 0 && _window$__FABRIC_HUB_.isAvailable));\n };\n check();\n var t = setTimeout(check, 300);\n return function () {\n return clearTimeout(t);\n };\n }, []);\n var handleLoginWithExtension = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var _window$__FABRIC_HUB_2;\n var identity, toStore, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n if ((_window$__FABRIC_HUB_2 = window.__FABRIC_HUB_EXTENSION__) !== null && _window$__FABRIC_HUB_2 !== void 0 && _window$__FABRIC_HUB_2.getIdentity) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n setBusy(true);\n setError(null);\n _context.p = 2;\n _context.n = 3;\n return window.__FABRIC_HUB_EXTENSION__.getIdentity();\n case 3:\n identity = _context.v;\n if (!(!identity || !identity.xpub)) {\n _context.n = 4;\n break;\n }\n setError(\'No identity found in extension. Create or restore one in the Fabric Hub extension popup first.\');\n return _context.a(2);\n case 4:\n // Extension → page only delivers watch-only fields (xpub + id). xprv never crosses postMessage into\n // the page JS realm; import or unlock a full key here when you need signing or decryption.\n try {\n if (typeof window !== \'undefined\') {\n toStore = {\n id: identity.id,\n xpub: identity.xpub,\n passwordProtected: !!identity.passwordProtected\n };\n writeStorageJSON(\'fabric.identity.local\', toStore);\n }\n } catch (e) {}\n setLocalIdentity({\n id: identity.id,\n xpub: identity.xpub,\n xprv: identity.xprv || null,\n passwordProtected: !!identity.passwordProtected\n });\n if (typeof props.onLocalIdentityChange === \'function\') {\n props.onLocalIdentityChange({\n id: identity.id,\n xpub: identity.xpub,\n xprv: identity.xprv,\n passwordProtected: !!identity.passwordProtected\n });\n }\n if (identity.xprv && typeof props.onUnlockSuccess === \'function\') {\n props.onUnlockSuccess(identity);\n }\n _context.n = 6;\n break;\n case 5:\n _context.p = 5;\n _t = _context.v;\n setError(_t && _t.message ? _t.message : String(_t));\n case 6:\n _context.p = 6;\n setBusy(false);\n return _context.f(6);\n case 7:\n return _context.a(2);\n }\n }, _callee, null, [[2, 5, 6, 7]]);\n })), [props.onLocalIdentityChange, props.onUnlockSuccess]);\n var handleLoginWithDesktop = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var origin, sessionId, maxAttempts, attempts, res, data, protocolUrl, a, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n if (!(typeof window === \'undefined\')) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n if (!(window.fabricDesktop && window.fabricDesktop.isDesktopShell)) {\n _context3.n = 2;\n break;\n }\n return _context3.a(2);\n case 2:\n if (desktopPollIntervalRef.current) {\n clearInterval(desktopPollIntervalRef.current);\n desktopPollIntervalRef.current = null;\n }\n setBusy(true);\n setError(null);\n origin = window.location.origin;\n sessionId = null;\n maxAttempts = 360;\n attempts = 0;\n _context3.p = 3;\n _context3.n = 4;\n return fetch("".concat(origin, "/sessions"), {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n },\n body: JSON.stringify({\n origin: origin\n }),\n cache: \'no-store\'\n });\n case 4:\n res = _context3.v;\n _context3.n = 5;\n return res.json()["catch"](function () {\n return {};\n });\n case 5:\n data = _context3.v;\n if (!(!res.ok || !data.ok || !data.sessionId)) {\n _context3.n = 6;\n break;\n }\n throw new Error(data && data.error || \'Could not start desktop login session\');\n case 6:\n sessionId = data.sessionId;\n protocolUrl = data.protocolUrl || "fabric://login?sessionId=".concat(encodeURIComponent(sessionId), "&hub=").concat(encodeURIComponent(origin));\n desktopPollIntervalRef.current = setInterval(function () {\n attempts++;\n if (attempts > maxAttempts) {\n if (desktopPollIntervalRef.current) clearInterval(desktopPollIntervalRef.current);\n desktopPollIntervalRef.current = null;\n setBusy(false);\n setError(\'Timed out waiting for the Fabric Hub desktop app. Start it, then try again.\');\n return;\n }\n void _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var r, j, loginVerify, xpub, rid, k, ident, resolvedId, payload, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n _context2.p = 0;\n _context2.n = 1;\n return fetch("".concat(origin, "/sessions/").concat(encodeURIComponent(sessionId)), {\n headers: {\n Accept: \'application/json\'\n },\n cache: \'no-store\'\n });\n case 1:\n r = _context2.v;\n _context2.n = 2;\n return r.json()["catch"](function () {\n return {};\n });\n case 2:\n j = _context2.v;\n if (!(r.status === 403)) {\n _context2.n = 3;\n break;\n }\n if (desktopPollIntervalRef.current) {\n clearInterval(desktopPollIntervalRef.current);\n desktopPollIntervalRef.current = null;\n }\n setBusy(false);\n setError(j && j.error ? String(j.error) : \'Hub rejected this login session (check origin / proxy headers).\');\n return _context2.a(2);\n case 3:\n if (!(!j.ok || j.status !== \'signed\' || !j.identity)) {\n _context2.n = 4;\n break;\n }\n return _context2.a(2);\n case 4:\n loginVerify = verifyFabricDesktopLoginSignedPayload(j, {\n sessionId: sessionId,\n origin: origin\n });\n if (loginVerify.ok) {\n _context2.n = 5;\n break;\n }\n if (desktopPollIntervalRef.current) clearInterval(desktopPollIntervalRef.current);\n desktopPollIntervalRef.current = null;\n setBusy(false);\n setError(loginVerify.error || \'Desktop login verification failed.\');\n return _context2.a(2);\n case 5:\n if (desktopPollIntervalRef.current) clearInterval(desktopPollIntervalRef.current);\n desktopPollIntervalRef.current = null;\n if (j.delegationToken) {\n try {\n writeStorageJSON(DELEGATION_STORAGE_KEY, {\n token: j.delegationToken,\n externalSigning: true,\n hubOrigin: origin,\n linkedAt: new Date().toISOString()\n });\n notifyDelegationStorageChanged();\n } catch (e) {}\n }\n xpub = j.identity.xpub;\n rid = j.identity.id;\n if (xpub) {\n _context2.n = 6;\n break;\n }\n throw new Error(\'Hub did not return xpub\');\n case 6:\n k = new Key({\n xpub: xpub\n });\n ident = new Identity(k);\n resolvedId = rid != null ? String(rid) : String(ident.id);\n payload = {\n id: resolvedId,\n xpub: xpub,\n linkedFromDesktop: true\n };\n try {\n writeStorageJSON(\'fabric.identity.local\', payload);\n } catch (e) {}\n mergeLinkedDevice({\n kind: \'fabric-desktop\',\n hubOrigin: origin,\n fabricId: resolvedId,\n linkedAt: new Date().toISOString(),\n label: \'Fabric Hub (desktop)\'\n });\n setLinkedDevicesRev(function (n) {\n return n + 1;\n });\n setLocalIdentity({\n id: resolvedId,\n xpub: xpub,\n xprv: null,\n passwordProtected: false,\n linkedFromDesktop: true\n });\n if (typeof props.onLocalIdentityChange === \'function\') {\n props.onLocalIdentityChange({\n id: resolvedId,\n xpub: xpub,\n xprv: undefined,\n passwordProtected: false\n });\n }\n if (typeof props.onUnlockSuccess === \'function\') {\n props.onUnlockSuccess({\n id: resolvedId,\n xpub: xpub,\n xprv: null,\n passwordProtected: false\n });\n }\n setBusy(false);\n _context2.n = 8;\n break;\n case 7:\n _context2.p = 7;\n _t2 = _context2.v;\n if (desktopPollIntervalRef.current) clearInterval(desktopPollIntervalRef.current);\n desktopPollIntervalRef.current = null;\n setBusy(false);\n setError(_t2 && _t2.message ? _t2.message : String(_t2));\n case 8:\n return _context2.a(2);\n }\n }, _callee2, null, [[0, 7]]);\n }))();\n }, 600);\n a = document.createElement(\'a\');\n a.href = protocolUrl;\n a.rel = \'noopener noreferrer\';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n _context3.n = 8;\n break;\n case 7:\n _context3.p = 7;\n _t3 = _context3.v;\n if (desktopPollIntervalRef.current) {\n clearInterval(desktopPollIntervalRef.current);\n desktopPollIntervalRef.current = null;\n }\n setError(_t3 && _t3.message ? _t3.message : String(_t3));\n setBusy(false);\n case 8:\n return _context3.a(2);\n }\n }, _callee3, null, [[3, 7]]);\n })), [props.onLocalIdentityChange, props.onUnlockSuccess]);\n var clearDeviceLinkPoll = React.useCallback(function () {\n if (deviceLinkPollRef.current) {\n clearInterval(deviceLinkPollRef.current);\n deviceLinkPollRef.current = null;\n }\n }, []);\n React.useEffect(function () {\n return function () {\n return clearDeviceLinkPoll();\n };\n }, [clearDeviceLinkPoll]);\n\n /**\n * Start a mutual device-link offer (this browser is initiator). Peer opens\n * fabric://link (Passport / another Hub / peer app) as responder; we countersign.\n */\n var handleCreateDeviceLink = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var origin, label, key, signedProbe, identId, nonce, offerMessage, offerSigned, created, attempts, _t5;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.p = _context5.n) {\n case 0:\n if (!(typeof window === \'undefined\')) {\n _context5.n = 1;\n break;\n }\n return _context5.a(2);\n case 1:\n if (!(!localIdentity || !localIdentity.xprv || !localIdentity.xpub)) {\n _context5.n = 2;\n break;\n }\n setError(\'Unlock your Fabric identity (full key) before linking another device.\');\n return _context5.a(2);\n case 2:\n clearDeviceLinkPoll();\n setDeviceLinkBusy(true);\n setError(null);\n origin = window.location.origin;\n label = \'Hub browser\';\n _context5.p = 3;\n key = new Key({\n xprv: localIdentity.xprv\n });\n signedProbe = buildFabricIdentitySignedPayload(key, \'fabric:device-link:id-probe\');\n identId = localIdentity.id || signedProbe.identity.id;\n nonce = Array.from(crypto.getRandomValues(new Uint8Array(32))).map(function (b) {\n return b.toString(16).padStart(2, \'0\');\n }).join(\'\');\n offerMessage = buildDeviceLinkOfferMessage(nonce, identId, label, origin);\n offerSigned = buildFabricIdentitySignedPayload(key, offerMessage);\n _context5.n = 4;\n return createDeviceLinkOffer({\n hubBase: origin,\n origin: origin,\n label: label,\n nonce: nonce,\n identity: offerSigned.identity,\n pubkeyHex: offerSigned.pubkeyHex,\n signature: offerSigned.signature\n });\n case 4:\n created = _context5.v;\n if (created.ok) {\n _context5.n = 5;\n break;\n }\n setError(created.error || \'Could not create device link offer\');\n setDeviceLinkBusy(false);\n return _context5.a(2);\n case 5:\n setDeviceLinkOffer({\n sessionId: created.sessionId,\n protocolUrl: created.protocolUrl,\n label: label\n });\n attempts = 0;\n deviceLinkPollRef.current = setInterval(function () {\n attempts += 1;\n if (attempts > 240) {\n clearDeviceLinkPoll();\n setDeviceLinkBusy(false);\n setError(\'Timed out waiting for the other device to approve the link.\');\n return;\n }\n void _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var st, countersigned, done, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n _context4.p = 0;\n _context4.n = 1;\n return fetchDeviceLinkSession(origin, created.sessionId, {\n origin: origin\n });\n case 1:\n st = _context4.v;\n if (st.ok) {\n _context4.n = 2;\n break;\n }\n return _context4.a(2);\n case 2:\n if (!(st.status === \'accepted\' && st.linkMessage)) {\n _context4.n = 5;\n break;\n }\n countersigned = buildFabricIdentitySignedPayload(key, st.linkMessage);\n _context4.n = 3;\n return postDeviceLinkSignature(origin, created.sessionId, {\n role: \'initiator\',\n signature: countersigned.signature,\n pubkeyHex: countersigned.pubkeyHex,\n identity: countersigned.identity\n }, {\n origin: origin\n });\n case 3:\n done = _context4.v;\n if (done.ok) {\n _context4.n = 4;\n break;\n }\n clearDeviceLinkPoll();\n setDeviceLinkBusy(false);\n setError(done.error || \'Countersign failed\');\n return _context4.a(2);\n case 4:\n if (done.status === \'linked\' && done.responder) {\n clearDeviceLinkPoll();\n mergeLinkedDevice({\n kind: \'device-link\',\n peerFabricId: done.responder.id,\n peerXpub: done.responder.xpub,\n peerPubkey: done.responder.pubkeyHex,\n nonce: st.nonce || created.nonce,\n label: done.label || st.label || \'Linked device\',\n hubOrigin: origin,\n linkedAt: new Date().toISOString(),\n role: \'initiator\'\n });\n setLinkedDevicesRev(function (n) {\n return n + 1;\n });\n void publishHubIdentityCrossSign(key, done.responder.pubkeyHex, st.nonce || created.nonce);\n setDeviceLinkOffer(null);\n setDeviceLinkBusy(false);\n }\n return _context4.a(2);\n case 5:\n if (st.status === \'linked\' && st.responder) {\n clearDeviceLinkPoll();\n mergeLinkedDevice({\n kind: \'device-link\',\n peerFabricId: st.responder.id,\n peerXpub: st.responder.xpub,\n peerPubkey: st.responder.pubkeyHex,\n nonce: st.nonce,\n label: st.label || \'Linked device\',\n hubOrigin: origin,\n linkedAt: new Date().toISOString(),\n role: \'initiator\'\n });\n setLinkedDevicesRev(function (n) {\n return n + 1;\n });\n void publishHubIdentityCrossSign(key, st.responder.pubkeyHex, st.nonce);\n setDeviceLinkOffer(null);\n setDeviceLinkBusy(false);\n }\n _context4.n = 7;\n break;\n case 6:\n _context4.p = 6;\n _t4 = _context4.v;\n case 7:\n return _context4.a(2);\n }\n }, _callee4, null, [[0, 6]]);\n }))();\n }, 1500);\n _context5.n = 7;\n break;\n case 6:\n _context5.p = 6;\n _t5 = _context5.v;\n setError(_t5 && _t5.message ? _t5.message : String(_t5));\n setDeviceLinkBusy(false);\n case 7:\n return _context5.a(2);\n }\n }, _callee5, null, [[3, 6]]);\n })), [localIdentity, clearDeviceLinkPoll]);\n var handleRevokeLinkedDevice = React.useCallback(/*#__PURE__*/function () {\n var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(device) {\n var key, r;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.n) {\n case 0:\n if (device) {\n _context6.n = 1;\n break;\n }\n return _context6.a(2);\n case 1:\n setError(null);\n key = null;\n try {\n if (localIdentity && localIdentity.xprv) key = new Key({\n xprv: localIdentity.xprv\n });\n } catch (_) {\n key = null;\n }\n _context6.n = 2;\n return revokeLinkedDevice(device, key);\n case 2:\n r = _context6.v;\n if (r.ok) {\n _context6.n = 3;\n break;\n }\n setError(r.error || \'Could not revoke device\');\n return _context6.a(2);\n case 3:\n setLinkedDevicesRev(function (n) {\n return n + 1;\n });\n case 4:\n return _context6.a(2);\n }\n }, _callee6);\n }));\n return function (_x) {\n return _ref6.apply(this, arguments);\n };\n }(), [localIdentity]);\n var plaintextKeyMaterialOnDisk = React.useMemo(function () {\n try {\n var parsed = readStorageJSON(\'fabric.identity.local\', null);\n return !!(parsed && fabricPlaintextSigningUnlockable(parsed));\n } catch (_) {\n return false;\n }\n }, [localIdentity && localIdentity.xpub]);\n var showFabricHubAdminNotice = !!readHubAdminTokenFromBrowser(props.hubAdminToken) && (props.postSetupFlow || readStorageString(\'fabric.hub.identityWizardPending\') === \'1\');\n return /*#__PURE__*/React.createElement(Segment, {\n basic: true,\n style: {\n minWidth: 0,\n maxWidth: \'100%\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "fabric-identity-modal-heading"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "key",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Fabric Identity")), showFabricHubAdminNotice ? /*#__PURE__*/React.createElement(FabricHubAdminTokenNotice, {\n compact: !props.postSetupFlow\n }) : null, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginTop: \'0.25em\',\n marginBottom: \'0.75em\',\n maxWidth: \'42em\',\n lineHeight: 1.45\n }\n }, props.postSetupFlow ? /*#__PURE__*/React.createElement(React.Fragment, null, "Create or restore keys for this browser. We use Fabric ", /*#__PURE__*/React.createElement("strong", null, "BIP44 account #0"), " by default (derived from your HD master); you can switch accounts later from the identity menu without reloading a new mnemonic.") : /*#__PURE__*/React.createElement(React.Fragment, null, "The top-bar ", /*#__PURE__*/React.createElement("strong", null, "Wallet"), " chip, Bitcoin receive addresses, and", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/documents"\n }, "document"), " flows (encrypt, publish, paid distribute / purchase proofs) use this identity when the private key is unlocked in this browser.", \' \', "On-chain derivation for this Hub is described under", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/bitcoin-wallet"\n }, "Bitcoin wallet & derivation"), ".", \' \', "Reopen this dialog from the identity menu (", /*#__PURE__*/React.createElement("strong", null, "User profile"), ") or", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), " \\u2192 ", /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), ".")), /*#__PURE__*/React.createElement("div", null, localIdentity ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: 0\n }\n }, /*#__PURE__*/React.createElement("strong", null, "XPUB (public identifier):")), /*#__PURE__*/React.createElement("code", {\n style: identityMonospaceBlockStyle\n }, localIdentity.xpub), /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: 0,\n marginTop: \'0.25em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Bech32m ID:")), /*#__PURE__*/React.createElement("code", {\n style: identityMonospaceBlockStyle\n }, localIdentity.id), !suppressForget && localIdentity.linkedFromDesktop ? /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield"\n }), /*#__PURE__*/React.createElement("strong", null, "External signing"), " is enabled \\u2014 private keys stay on the Hub node; this browser holds a watch-only xpub. Use ", /*#__PURE__*/React.createElement("strong", null, "Sign message"), " from the profile menu and confirm each request in the ", /*#__PURE__*/React.createElement("strong", null, "Fabric Hub desktop"), " app.", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), \' · \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/security"\n }, "Security & delegation")) : null, !suppressForget && linkedDevices.length > 0 ? /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "linkify"\n }), "Linked devices"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.95em\'\n }\n }, "Peer-equivalent cluster: Passport, Android, desktop, or this Hub browser can create or accept a ", /*#__PURE__*/React.createElement("code", null, "fabric://link"), ". After both sides countersign they publish BIP340 IdentityCrossSign Fabric Messages. Revoke publishes IdentityCrossSignRevoke \\u2014 also under", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/security"\n }, "Security & privacy"), "."), /*#__PURE__*/React.createElement("ul", {\n style: {\n margin: \'0.5em 0 0 1em\'\n }\n }, linkedDevices.map(function (d, i) {\n return /*#__PURE__*/React.createElement("li", {\n key: i,\n style: {\n marginBottom: \'0.45em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, d.label || d.kind || \'Device\'), d.peerFabricId ? /*#__PURE__*/React.createElement("span", null, " \\u2014 ", /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, String(d.peerFabricId).slice(0, 18), "\\u2026")) : null, d.hubOrigin ? " \\u2014 ".concat(d.hubOrigin) : \'\', d.linkedAt ? " (".concat(new Date(d.linkedAt).toLocaleString(), ")") : \'\', \' \', /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n negative: true,\n basic: true,\n disabled: busy,\n onClick: function onClick() {\n return void handleRevokeLinkedDevice(d);\n }\n }, "Revoke"));\n }))) : suppressForget ? null : /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#888\',\n fontSize: \'0.92em\',\n marginTop: \'0.75em\',\n marginBottom: 0\n }\n }, "No linked devices yet \\u2014 use ", /*#__PURE__*/React.createElement("strong", null, "Link another device"), " below, or approve a link from Passport / Android / desktop."), !suppressForget && localIdentity.xprv ? /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "qrcode"\n }), "Link another device"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.95em\'\n }\n }, "Any peer can create or accept. This browser can start an offer; the other device (Passport, GoonCitizen Android, or desktop) approves ", /*#__PURE__*/React.createElement("code", null, "fabric://link"), " or the HTTPS landing. Keep separate seeds per app \\u2014 linking does not copy a mnemonic."), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n primary: true,\n loading: deviceLinkBusy,\n disabled: deviceLinkBusy,\n onClick: function onClick() {\n return void handleCreateDeviceLink();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "linkify"\n }), "Create link offer"), deviceLinkOffer && deviceLinkOffer.protocolUrl ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: \'0.35em\',\n fontSize: \'0.9em\'\n }\n }, "Scan with GoonCitizen (phone or desktop) or open on Passport:"), deviceLinkQr ? /*#__PURE__*/React.createElement("img", {\n src: deviceLinkQr,\n alt: "Scan fabric://link with GoonCitizen",\n width: 196,\n height: 196,\n style: {\n background: \'#fff\',\n borderRadius: 4,\n marginBottom: 8\n }\n }) : null, /*#__PURE__*/React.createElement("code", {\n style: identityMonospaceBlockStyle\n }, deviceLinkOffer.protocolUrl), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n onClick: function onClick() {\n try {\n void navigator.clipboard.writeText(deviceLinkOffer.protocolUrl);\n } catch (_) {}\n var a = document.createElement(\'a\');\n a.href = deviceLinkOffer.protocolUrl;\n a.rel = \'noopener noreferrer\';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n }, "Copy & open"), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n style: {\n marginLeft: \'0.35em\'\n },\n onClick: function onClick() {\n try {\n window.postMessage({\n source: \'fabric-site\',\n type: \'FABRIC_DEVICE_LINK_REQUEST\',\n sessionId: deviceLinkOffer.sessionId,\n hub: window.location.origin,\n origin: window.location.origin\n }, window.location.origin);\n } catch (_) {}\n }\n }, "Approve with Passport")) : null) : null, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Private Key:"), \' \', localIdentity.xprv ? \'unlocked in memory\' : isLocked ? localIdentity.passwordProtected ? \'locked (encryption password)\' : \'locked — unlock to load the key stored in this browser\' : \'not stored in this browser\', localIdentity.xprv && lockTimeoutMs ? /*#__PURE__*/React.createElement("span", null, " \\u2014 auto\\u2011lock in ~", Math.round(lockTimeoutMs / 60000), " min (timer resets when active).") : null, localIdentity.xprv && !lockTimeoutMs ? /*#__PURE__*/React.createElement("span", null, " \\u2014 auto\\u2011lock off; use ", /*#__PURE__*/React.createElement("strong", null, "Lock private key"), " or the top bar.") : null), lockTimeoutMsFromTests == null ? /*#__PURE__*/React.createElement(Form, {\n style: {\n marginTop: \'0.35em\',\n marginBottom: \'0.5em\',\n maxWidth: 420\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-identity-auto-lock"\n }, "Auto-lock after idle"), /*#__PURE__*/React.createElement("select", {\n id: "fabric-identity-auto-lock",\n value: lockTimeoutMinutes,\n onChange: function onChange(e) {\n var v = Math.floor(Number(e.target.value));\n if (!Number.isFinite(v)) return;\n setLockTimeoutMinutes(v);\n try {\n writeFabricIdentityLockTimeoutMinutes(v);\n } catch (err) {}\n },\n style: {\n width: \'100%\',\n maxWidth: 360,\n padding: \'0.55em\',\n boxSizing: \'border-box\'\n }\n }, /*#__PURE__*/React.createElement("option", {\n value: 0\n }, "Off \\u2014 lock manually only"), /*#__PURE__*/React.createElement("option", {\n value: 5\n }, "5 minutes"), /*#__PURE__*/React.createElement("option", {\n value: 15\n }, "15 minutes"), /*#__PURE__*/React.createElement("option", {\n value: 30\n }, "30 minutes"), /*#__PURE__*/React.createElement("option", {\n value: 60\n }, "1 hour"), /*#__PURE__*/React.createElement("option", {\n value: 120\n }, "2 hours"), /*#__PURE__*/React.createElement("option", {\n value: 240\n }, "4 hours"), /*#__PURE__*/React.createElement("option", {\n value: 480\n }, "8 hours")), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.35em\',\n color: \'#888\',\n fontSize: \'0.88em\',\n lineHeight: 1.45\n }\n }, "Removes the plaintext private key from memory after this interval while the tab stays open."))) : null, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n try {\n if (typeof navigator !== \'undefined\' && navigator.clipboard) {\n navigator.clipboard.writeText(localIdentity.id);\n }\n } catch (e) {}\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n }), "Copy ID"), usesDiskEncryptionPasswordForBackup ? /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'0.75em\',\n maxWidth: \'42rem\'\n }\n }, "Encrypted backups use your ", /*#__PURE__*/React.createElement("strong", null, "decryption password"), " from ", /*#__PURE__*/React.createElement("strong", null, "Unlock private key"), " above (same password as local encryption \\u2014 no separate backup password).") : /*#__PURE__*/React.createElement(Form, {\n style: {\n marginTop: \'0.75em\',\n maxWidth: 420\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-backup-password"\n }, "Password for encrypted backup file (min ", LOCAL_IDENTITY_PASSWORD_MIN, " characters)"), /*#__PURE__*/React.createElement("input", {\n id: "fabric-backup-password",\n type: "password",\n autoComplete: "new-password",\n value: backupExportPassword,\n onChange: function onChange(e) {\n return setBackupExportPassword(e.target.value);\n },\n disabled: backupExportBusy,\n style: {\n width: \'100%\',\n maxWidth: 360,\n padding: \'0.55em\',\n boxSizing: \'border-box\'\n }\n }))), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n icon: true,\n labelPosition: "left",\n style: {\n marginLeft: \'0.5em\',\n marginTop: \'0.5em\'\n },\n loading: backupExportBusy,\n disabled: backupExportBusy || !localIdentity || !localIdentity.xprv,\n title: localIdentity && localIdentity.xprv ? \'Download an encrypted backup of this identity (includes private key when unlocked).\' : \'Unlock or import a signing key before exporting an encrypted backup (watch-only xpub alone is not enough).\',\n onClick: function onClick() {\n _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {\n var pwd, inner, envelope, blob, url, a, _t6;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.p = _context7.n) {\n case 0:\n if (!(!localIdentity || !localIdentity.xprv || !localIdentity.xpub)) {\n _context7.n = 1;\n break;\n }\n setError(\'Unlock or import a private key before exporting an encrypted backup.\');\n return _context7.a(2);\n case 1:\n pwd = resolveBackupEncryptionPassword();\n if (!(!pwd || pwd.length < LOCAL_IDENTITY_PASSWORD_MIN)) {\n _context7.n = 2;\n break;\n }\n setError(usesDiskEncryptionPasswordForBackup ? "Enter your decryption password above (at least ".concat(LOCAL_IDENTITY_PASSWORD_MIN, " characters) \\u2014 it encrypts backups too.") : "Choose a backup file password of at least ".concat(LOCAL_IDENTITY_PASSWORD_MIN, " characters."));\n return _context7.a(2);\n case 2:\n _context7.p = 2;\n setBackupExportBusy(true);\n setError(null);\n inner = {\n type: \'fabric-identity-backup-inner\',\n version: 1,\n id: localIdentity.id || undefined,\n xpub: localIdentity.xpub || undefined,\n xprv: String(localIdentity.xprv)\n };\n _context7.n = 3;\n return encryptFabricIdentityBackupPayload(inner, pwd);\n case 3:\n envelope = _context7.v;\n blob = new Blob([JSON.stringify(envelope, null, 2)], {\n type: \'application/json;charset=utf-8\'\n });\n url = URL.createObjectURL(blob);\n a = document.createElement(\'a\');\n a.href = url;\n a.download = \'fabric-identity-backup.enc.json\';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n _context7.n = 5;\n break;\n case 4:\n _context7.p = 4;\n _t6 = _context7.v;\n setError(_t6 && _t6.message ? _t6.message : String(_t6));\n case 5:\n _context7.p = 5;\n setBackupExportBusy(false);\n return _context7.f(5);\n case 6:\n return _context7.a(2);\n }\n }, _callee7, null, [[2, 4, 5, 6]]);\n }))();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "download"\n }), "Download encrypted backup"), localIdentity && localIdentity.fabricIdentityMode === \'account\' && localIdentity.xprv && localIdentity.fabricHdRole !== \'accountNode\' && localIdentity.fabricHdRole !== \'watchAccount\' ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n icon: true,\n labelPosition: "left",\n style: {\n marginLeft: \'0.5em\',\n marginTop: \'0.5em\'\n },\n loading: backupExportBusy,\n disabled: backupExportBusy || !localIdentity || !localIdentity.xpub,\n title: "Encrypted backup of this Fabric account signing key only (no HD master). Use when the master is stored elsewhere.",\n onClick: function onClick() {\n _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {\n var pwd, ai, inner, envelope, blob, url, a, _t7;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.p = _context8.n) {\n case 0:\n if (!(!localIdentity || !localIdentity.xpub || !localIdentity.xprv)) {\n _context8.n = 1;\n break;\n }\n return _context8.a(2);\n case 1:\n pwd = resolveBackupEncryptionPassword();\n if (!(!pwd || pwd.length < LOCAL_IDENTITY_PASSWORD_MIN)) {\n _context8.n = 2;\n break;\n }\n setError(usesDiskEncryptionPasswordForBackup ? "Enter your decryption password above (at least ".concat(LOCAL_IDENTITY_PASSWORD_MIN, " characters) \\u2014 it encrypts backups too.") : "Choose a backup file password of at least ".concat(LOCAL_IDENTITY_PASSWORD_MIN, " characters."));\n return _context8.a(2);\n case 2:\n _context8.p = 2;\n setBackupExportBusy(true);\n setError(null);\n ai = localIdentity.fabricAccountIndex != null ? Math.floor(Number(localIdentity.fabricAccountIndex)) : 0;\n inner = buildFabricAccountSubtreeBackupInner({\n fabricAccountIndex: ai,\n id: localIdentity.id,\n xpub: localIdentity.xpub,\n xprv: localIdentity.xprv\n });\n _context8.n = 3;\n return encryptFabricIdentityBackupPayload(inner, pwd);\n case 3:\n envelope = _context8.v;\n blob = new Blob([JSON.stringify(envelope, null, 2)], {\n type: \'application/json;charset=utf-8\'\n });\n url = URL.createObjectURL(blob);\n a = document.createElement(\'a\');\n a.href = url;\n a.download = \'fabric-identity-account-backup.enc.json\';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n _context8.n = 5;\n break;\n case 4:\n _context8.p = 4;\n _t7 = _context8.v;\n setError(_t7 && _t7.message ? _t7.message : String(_t7));\n case 5:\n _context8.p = 5;\n setBackupExportBusy(false);\n return _context8.f(5);\n case 6:\n return _context8.a(2);\n }\n }, _callee8, null, [[2, 4, 5, 6]]);\n }))();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "download"\n }), "Account-only encrypted backup") : null, localIdentity.xprv && (localIdentity.passwordProtected || plaintextKeyMaterialOnDisk) ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n setLocalIdentity(function (prev) {\n if (!prev || !prev.xprv) return prev;\n if (prev.passwordProtected) return _objectSpread(_objectSpread({}, prev), {}, {\n xprv: null\n }, prev.fabricIdentityMode === \'account\' ? {\n masterXprv: null\n } : {});\n try {\n var parsed = readStorageJSON(\'fabric.identity.local\', null);\n if (parsed && fabricPlaintextSigningUnlockable(parsed)) {\n return _objectSpread(_objectSpread({}, prev), {}, {\n xprv: null,\n masterXprv: prev.fabricIdentityMode === \'account\' ? null : prev.masterXprv,\n plaintextUnlockAvailable: true,\n passwordProtected: false\n });\n }\n } catch (e) {}\n return _objectSpread(_objectSpread({}, prev), {}, {\n xprv: null\n }, prev.fabricIdentityMode === \'account\' ? {\n masterXprv: null\n } : {});\n });\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "lock"\n }), "Lock private key") : null, !localIdentity.xprv && isLocked && localIdentity.plaintextUnlockAvailable && !localIdentity.passwordProtected ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\',\n maxWidth: 420\n }\n }, /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Encrypt local storage first"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n lineHeight: 1.45\n }\n }, "This identity still had a ", /*#__PURE__*/React.createElement("strong", null, "plaintext"), " private key in this browser. Choose a password now to encrypt it on disk. The same password is required on every unlock.")), /*#__PURE__*/React.createElement(Form, {\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n if (busy) return;\n var a = String(plaintextMigrationPassword || \'\').trim();\n var b = String(plaintextMigrationPasswordConfirm || \'\').trim();\n if (!a || !b) {\n setError(\'Enter and confirm a password to encrypt this identity.\');\n return;\n }\n if (a.length < LOCAL_IDENTITY_PASSWORD_MIN) {\n setError("Password must be at least ".concat(LOCAL_IDENTITY_PASSWORD_MIN, " characters."));\n return;\n }\n if (a !== b) {\n setError(\'Passwords do not match.\');\n return;\n }\n setBusy(true);\n setError(null);\n _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {\n var parsed, encrypted, material, nextIdentity, _t8;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.p = _context9.n) {\n case 0:\n _context9.p = 0;\n parsed = readStorageJSON(\'fabric.identity.local\', null);\n if (parsed) {\n _context9.n = 1;\n break;\n }\n throw new Error(\'No stored identity found.\');\n case 1:\n encrypted = encryptLocalIdentityAtRest(parsed, a);\n writeStorageJSON(\'fabric.identity.local\', encrypted);\n material = decryptLocalIdentityMasterMaterial(encrypted, a);\n nextIdentity = unlockedSessionFromDecryptedMaster(material, encrypted);\n setPlaintextMigrationPassword(\'\');\n setPlaintextMigrationPasswordConfirm(\'\');\n setLocalIdentity(nextIdentity);\n if (typeof props.onUnlockSuccess === \'function\') {\n props.onUnlockSuccess(nextIdentity);\n }\n _context9.n = 3;\n break;\n case 2:\n _context9.p = 2;\n _t8 = _context9.v;\n setError(_t8 && _t8.message ? _t8.message : String(_t8));\n case 3:\n _context9.p = 3;\n setBusy(false);\n return _context9.f(3);\n case 4:\n return _context9.a(2);\n }\n }, _callee9, null, [[0, 2, 3, 4]]);\n }))();\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Encryption password for this browser"), /*#__PURE__*/React.createElement("input", {\n type: "password",\n autoComplete: "new-password",\n value: plaintextMigrationPassword,\n onChange: function onChange(e) {\n return setPlaintextMigrationPassword(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Confirm password"), /*#__PURE__*/React.createElement("input", {\n type: "password",\n autoComplete: "new-password",\n value: plaintextMigrationPasswordConfirm,\n onChange: function onChange(e) {\n return setPlaintextMigrationPasswordConfirm(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Button, {\n type: "submit",\n primary: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n disabled: busy,\n style: {\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "lock"\n }), "Encrypt and unlock"))) : null, !localIdentity.xprv && isLocked && localIdentity.passwordProtected ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Form, {\n style: {\n marginTop: \'0.75em\',\n maxWidth: 360\n },\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n if (busy) return;\n var pwd = String(unlockPassword || \'\').trim();\n if (!pwd) {\n setError(\'Please enter your decryption password.\');\n return;\n }\n setBusy(true);\n setError(null);\n _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0() {\n var hasStorage, parsed, xprv, nextIdentity, _t9;\n return _regenerator().w(function (_context0) {\n while (1) switch (_context0.p = _context0.n) {\n case 0:\n _context0.p = 0;\n hasStorage = false;\n try {\n hasStorage = typeof window !== \'undefined\';\n } catch (e) {\n hasStorage = false;\n }\n if (hasStorage) {\n _context0.n = 1;\n break;\n }\n throw new Error(\'Secure storage not available in this environment.\');\n case 1:\n parsed = readStorageJSON(\'fabric.identity.local\', null);\n if (parsed) {\n _context0.n = 2;\n break;\n }\n throw new Error(\'No stored identity found.\');\n case 2:\n if (!(parsed && parsed.passwordProtected && parsed.xprvEnc && parsed.passwordSalt)) {\n _context0.n = 3;\n break;\n }\n xprv = decryptLocalIdentityMasterMaterial(parsed, pwd);\n nextIdentity = unlockedSessionFromDecryptedMaster(xprv, parsed);\n setLocalIdentity(nextIdentity);\n setError(null);\n if (typeof props.onUnlockSuccess === \'function\') {\n props.onUnlockSuccess(nextIdentity);\n }\n _context0.n = 4;\n break;\n case 3:\n throw new Error(\'Stored identity does not use encryption password storage.\');\n case 4:\n _context0.n = 6;\n break;\n case 5:\n _context0.p = 5;\n _t9 = _context0.v;\n console.error(\'[IDENTITY]\', \'Unlock failed:\', safeIdentityErr(_t9));\n setError(\'Incorrect password or corrupted identity. Please try again.\');\n case 6:\n _context0.p = 6;\n setBusy(false);\n return _context0.f(6);\n case 7:\n return _context0.a(2);\n }\n }, _callee0, null, [[0, 5, 6, 7]]);\n }))();\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Decryption password (same password encrypts backups below)"), /*#__PURE__*/React.createElement("input", {\n type: "password",\n autoComplete: "current-password",\n value: unlockPassword,\n onChange: function onChange(e) {\n return setUnlockPassword(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Button, {\n type: "submit",\n primary: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n style: {\n marginTop: \'0.5em\'\n },\n disabled: busy\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "unlock"\n }), "Unlock private key"))) : null, !suppressForget ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n color: "red",\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return setShowConfirmForget(true);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "trash"\n }), "Forget local identity"), /*#__PURE__*/React.createElement(Modal, {\n open: showConfirmForget,\n onClose: function onClose() {\n return setShowConfirmForget(false);\n },\n closeOnDimmerClick: false,\n closeOnDocumentClick: false,\n closeOnEscape: false,\n size: "small"\n }, /*#__PURE__*/React.createElement(Header, {\n icon: "trash",\n content: "Delete local identity?"\n }), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("strong", null, "All local files and key material will be permanently deleted.")), /*#__PURE__*/React.createElement("p", null, "The only way to recover access to your data is to have your private key (xprv or seed). If you have not backed these up, you will not be able to recover deleted documents or this identity."), /*#__PURE__*/React.createElement("p", null, "Are you sure you want to proceed?")), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n return setShowConfirmForget(false);\n }\n }, "Cancel"), /*#__PURE__*/React.createElement(Button, {\n color: "red",\n onClick: function onClick() {\n try {\n if (typeof props.onForgetIdentity === \'function\') {\n props.onForgetIdentity();\n }\n var hasStorage = false;\n try {\n hasStorage = typeof window !== \'undefined\';\n } catch (e) {\n hasStorage = false;\n }\n if (hasStorage) {\n try {\n removeStorageKey(DELEGATION_STORAGE_KEY);\n } catch (eDel) {}\n try {\n removeStorageKey(STORAGE_LINKED_DEVICES);\n } catch (eLink) {}\n try {\n notifyDelegationStorageChanged();\n } catch (eNo) {}\n try {\n if (typeof chrome !== \'undefined\' && chrome.storage && chrome.storage.local && chrome.storage.local.remove) {\n chrome.storage.local.remove([\'fabric.identity.ext\']);\n }\n } catch (eExt) {}\n clearFabricBrowserIdentityLocal();\n removeStorageKey(\'fabric:documents\');\n }\n } catch (e) {\n console.error(\'[IDENTITY]\', \'Forget identity error:\', safeIdentityErr(e));\n }\n setShowConfirmForget(false);\n setLocalIdentity(null);\n setSignature(null);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "trash"\n }), "I understand, delete everything")))) : null) : isGenerating ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Generating a new identity for this browser. This only happens locally and never leaves your device."), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexDirection: \'column\',\n alignItems: \'center\',\n justifyContent: \'center\',\n padding: \'2em 0\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "spinner",\n loading: true,\n size: "huge"\n }), /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'1em\',\n color: \'#666\'\n }\n }, "Please wait a moment\\u2026"))) : pendingSeed && !seedConfirmed ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Provide an encryption password to protect your identity."), /*#__PURE__*/React.createElement(Form, {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Encryption password"), /*#__PURE__*/React.createElement("input", {\n type: "password",\n autoComplete: "new-password",\n value: identityPassword,\n onChange: function onChange(e) {\n return setIdentityPassword(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Confirm password"), /*#__PURE__*/React.createElement("input", {\n type: "password",\n autoComplete: "new-password",\n value: identityPasswordConfirm,\n onChange: function onChange(e) {\n return setIdentityPasswordConfirm(e.target.value);\n }\n })), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\',\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, "This password will be required to unlock your identity in this browser. Do not forget it.")), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n primary: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n disabled: busy,\n onClick: function onClick() {\n var a = String(identityPassword || \'\').trim();\n var b = String(identityPasswordConfirm || \'\').trim();\n if (!a || !b) {\n setError(\'Please enter and confirm a password.\');\n return;\n }\n if (a.length < LOCAL_IDENTITY_PASSWORD_MIN) {\n setError("Password should be at least ".concat(LOCAL_IDENTITY_PASSWORD_MIN, " characters long."));\n return;\n }\n if (a !== b) {\n setError(\'Passwords do not match. Please try again.\');\n return;\n }\n setError(null);\n // Keep the generated seed in-memory and show backup details next.\n // Final persistence/login happens in the "Login with this identity" step.\n setBackupAcknowledged(false);\n setSeedConfirmed(true);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow right"\n }), "Continue to backup review"), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n style: {\n marginLeft: \'0.5em\'\n },\n disabled: busy,\n onClick: function onClick() {\n setError(null);\n resetSeedState();\n }\n }, "Cancel"), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n style: {\n marginLeft: \'0.5em\'\n },\n loading: busy,\n disabled: busy,\n onClick: /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee1() {\n var generate, delay, key, _t0;\n return _regenerator().w(function (_context1) {\n while (1) switch (_context1.p = _context1.n) {\n case 0:\n setError(null);\n setBusy(true);\n setIsGenerating(true);\n setPendingSeed(null);\n _context1.p = 1;\n generate = function generate() {\n var key = new Key();\n if (!key.mnemonic || !key.xprv) {\n throw new Error(\'Key did not produce mnemonic/xprv.\');\n }\n return key;\n };\n delay = new Promise(function (resolve) {\n return setTimeout(resolve, 1500);\n });\n key = generate();\n _context1.n = 2;\n return delay;\n case 2:\n setPendingSeed({\n mnemonic: key.mnemonic,\n xprv: key.xprv\n });\n setSeedConfirmed(false);\n setIdentityPassword(\'\');\n setIdentityPasswordConfirm(\'\');\n _context1.n = 4;\n break;\n case 3:\n _context1.p = 3;\n _t0 = _context1.v;\n console.error(\'[IDENTITY]\', \'Regenerate identity failed:\', safeIdentityErr(_t0));\n setError(_t0 && _t0.stack ? _t0.stack : _t0 && _t0.message ? _t0.message : String(_t0));\n case 4:\n _context1.p = 4;\n setIsGenerating(false);\n setBusy(false);\n return _context1.f(4);\n case 5:\n return _context1.a(2);\n }\n }, _callee1, null, [[1, 3, 4, 5]]);\n }))\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Generate a different seed"))) : pendingSeed && seedConfirmed ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n maxWidth: \'42rem\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Save your backup before continuing"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n lineHeight: 1.5\n }\n }, "Your ", /*#__PURE__*/React.createElement("strong", null, "recovery phrase"), " (and optional ", /*#__PURE__*/React.createElement("strong", null, "xprv"), " or downloaded JSON) is the only way to restore this identity if you clear the browser or lose this device. Fabric cannot recover it for you. Prefer storing the ", /*#__PURE__*/React.createElement("strong", null, "xprv"), " or phrase ", /*#__PURE__*/React.createElement("strong", null, "offline"), " (paper, password manager, hardware workflow)\\u2014not only in this browser.")), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Reveal each secret below, copy or write it down, then confirm at the bottom."), pendingSeed.mnemonic && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("strong", null, "Recovery phrase (BIP39 mnemonic)"), " \\u2014 most wallets use this format."), /*#__PURE__*/React.createElement(Segment, {\n inverted: true,\n color: "blue"\n }, showSeedPhrase ? /*#__PURE__*/React.createElement("code", {\n style: {\n whiteSpace: \'pre-wrap\'\n }\n }, pendingSeed.mnemonic) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#ccd\',\n fontStyle: \'italic\'\n }\n }, "Hidden for privacy. Click \\"Show recovery phrase\\" to reveal.")), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return setShowSeedPhrase(function (v) {\n return !v;\n });\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: showSeedPhrase ? \'eye slash\' : \'eye\'\n }), showSeedPhrase ? \'Hide recovery phrase\' : \'Show recovery phrase\'), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n disabled: !showSeedPhrase,\n title: !showSeedPhrase ? \'Reveal the phrase first so you know what you are copying\' : undefined,\n onClick: function onClick() {\n try {\n if (typeof navigator !== \'undefined\' && navigator.clipboard && pendingSeed.mnemonic) {\n navigator.clipboard.writeText(pendingSeed.mnemonic);\n }\n } catch (e) {}\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n }), "Copy recovery phrase")), /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Extended private key (xprv)"), " \\u2014 single serialized backup; import via ", /*#__PURE__*/React.createElement("em", null, "Import Backup"), " or paste into a JSON file."), /*#__PURE__*/React.createElement(Segment, null, showBackupKey ? /*#__PURE__*/React.createElement("code", {\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-all\'\n }\n }, pendingSeed.xprv) : /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontStyle: \'italic\'\n }\n }, "Hidden for privacy. Click \\"Show backup key\\" to reveal.")), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return setShowBackupKey(function (v) {\n return !v;\n });\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: showBackupKey ? \'eye slash\' : \'eye\'\n }), showBackupKey ? \'Hide backup key\' : \'Show backup key\'), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n icon: true,\n labelPosition: "left",\n disabled: !showBackupKey,\n title: !showBackupKey ? \'Reveal the xprv first so you know what you are copying\' : undefined,\n onClick: function onClick() {\n try {\n if (typeof navigator !== \'undefined\' && navigator.clipboard && pendingSeed.xprv) {\n navigator.clipboard.writeText(pendingSeed.xprv);\n }\n } catch (e) {}\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n }), "Copy xprv"), /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'0.75em\',\n maxWidth: \'42rem\'\n }\n }, "Backup download uses the same encryption password you entered in the previous step."), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n icon: true,\n labelPosition: "left",\n loading: backupExportBusy,\n disabled: backupExportBusy || !(pendingSeed && pendingSeed.xprv),\n onClick: function onClick() {\n _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee10() {\n var xprv, pwd, backupPayload, identity, envelope, blob, url, a, _t1;\n return _regenerator().w(function (_context10) {\n while (1) switch (_context10.p = _context10.n) {\n case 0:\n xprv = pendingSeed && pendingSeed.xprv;\n if (xprv) {\n _context10.n = 1;\n break;\n }\n return _context10.a(2);\n case 1:\n pwd = String(identityPassword || \'\').trim();\n if (!(!pwd || pwd.length < LOCAL_IDENTITY_PASSWORD_MIN)) {\n _context10.n = 2;\n break;\n }\n setError("Enter an encryption password of at least ".concat(LOCAL_IDENTITY_PASSWORD_MIN, " characters in the previous step."));\n return _context10.a(2);\n case 2:\n setBackupExportBusy(true);\n setError(null);\n _context10.p = 3;\n backupPayload = {\n type: \'fabric-identity-backup-inner\',\n version: 1,\n mnemonic: pendingSeed.mnemonic || undefined,\n xprv: xprv\n };\n try {\n identity = new Identity({\n xprv: xprv\n });\n if (identity && identity.id && identity.key && identity.key.xpub) {\n backupPayload.id = String(identity.id);\n backupPayload.xpub = String(identity.key.xpub);\n }\n } catch (e) {}\n _context10.n = 4;\n return encryptFabricIdentityBackupPayload(backupPayload, pwd);\n case 4:\n envelope = _context10.v;\n blob = new Blob([JSON.stringify(envelope, null, 2)], {\n type: \'application/json;charset=utf-8\'\n });\n url = URL.createObjectURL(blob);\n a = document.createElement(\'a\');\n a.href = url;\n a.download = \'fabric-identity-backup.enc.json\';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n _context10.n = 6;\n break;\n case 5:\n _context10.p = 5;\n _t1 = _context10.v;\n setError(_t1 && _t1.message ? _t1.message : String(_t1));\n case 6:\n _context10.p = 6;\n setBackupExportBusy(false);\n return _context10.f(6);\n case 7:\n return _context10.a(2);\n }\n }, _callee10, null, [[3, 5, 6, 7]]);\n }))();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "download"\n }), "Download encrypted backup"), /*#__PURE__*/React.createElement(Form, {\n style: {\n marginTop: \'1.25em\',\n maxWidth: \'42rem\'\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(Checkbox, {\n checked: backupAcknowledged,\n onChange: function onChange(e, d) {\n return setBackupAcknowledged(!!(d && d.checked));\n },\n "aria-label": "I have securely saved my recovery phrase and/or xprv or backup file and understand Fabric cannot recover this identity for me",\n label: \'I have securely saved my recovery phrase and/or xprv (or downloaded the backup file). \' + \'I understand I cannot recover this identity without them.\'\n }))), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n style: {\n marginTop: \'0.75em\'\n },\n disabled: busy || !backupAcknowledged,\n title: !backupAcknowledged ? \'Confirm you have saved your backup\' : undefined,\n onClick: function onClick() {\n setBusy(true);\n setError(null);\n try {\n var masterXprv = pendingSeed && pendingSeed.xprv;\n if (!masterXprv) throw new Error(\'Missing xprv for pending seed.\');\n var pwd = String(identityPassword || \'\').trim();\n if (!pwd || pwd.length < LOCAL_IDENTITY_PASSWORD_MIN) {\n setError("Enter the encryption password you chose above (at least ".concat(LOCAL_IDENTITY_PASSWORD_MIN, " characters)."));\n setBusy(false);\n return;\n }\n var fabricAccountIndex = 0;\n var dk = deriveFabricAccountIdentityKeys(String(masterXprv).trim(), fabricAccountIndex, 0);\n var masterXpub = fabricRootXpubFromMasterXprv(String(masterXprv).trim());\n var hasStorage = false;\n try {\n hasStorage = typeof window !== \'undefined\';\n } catch (e) {\n hasStorage = false;\n }\n if (!hasStorage) throw new Error(\'Secure storage not available in this environment.\');\n var plaintextPayload = {\n fabricIdentityMode: \'account\',\n fabricAccountIndex: fabricAccountIndex,\n masterXpub: masterXpub,\n masterXprv: String(masterXprv).trim(),\n id: dk.id,\n xpub: dk.xpub,\n passwordProtected: false\n };\n var payload = encryptLocalIdentityAtRest(plaintextPayload, pwd);\n writeStorageJSON(\'fabric.identity.local\', payload);\n var storedPayload = readStorageJSON(\'fabric.identity.local\', null);\n var material = decryptLocalIdentityMasterMaterial(storedPayload, pwd);\n var nextIdent = unlockedSessionFromDecryptedMaster(material, storedPayload);\n setLocalIdentity(nextIdent);\n if (typeof props.onLocalIdentityChange === \'function\') {\n props.onLocalIdentityChange({\n id: nextIdent.id,\n xpub: nextIdent.xpub,\n xprv: nextIdent.xprv,\n passwordProtected: true,\n fabricIdentityMode: nextIdent.fabricIdentityMode,\n fabricAccountIndex: nextIdent.fabricAccountIndex,\n masterXprv: nextIdent.masterXprv,\n masterXpub: nextIdent.masterXpub\n });\n }\n if (typeof props.onUnlockSuccess === \'function\') {\n props.onUnlockSuccess(nextIdent);\n }\n resetSeedState();\n } catch (e) {\n console.error(\'[IDENTITY]\', \'Save local identity failed:\', safeIdentityErr(e));\n setError(e && e.stack ? e.stack : e && e.message ? e.message : String(e));\n } finally {\n setBusy(false);\n }\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sign-in"\n }), "Login with this identity")) : loginMethod === null ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Choose how you would like to connect:"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexDirection: \'column\',\n gap: \'0.75em\',\n maxWidth: 320\n }\n }, extensionAvailable && !props.postSetupFlow ? /*#__PURE__*/React.createElement(Button, {\n primary: true,\n fluid: true,\n icon: true,\n labelPosition: "left",\n loading: busy,\n disabled: busy,\n onClick: handleLoginWithExtension,\n title: "Use identity from the Fabric Hub browser extension"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "puzzle piece"\n }), "Login with Extension") : null, typeof window !== \'undefined\' && !props.postSetupFlow && !(window.fabricDesktop && window.fabricDesktop.isDesktopShell) ? /*#__PURE__*/React.createElement(Button, {\n primary: !extensionAvailable,\n fluid: true,\n icon: true,\n labelPosition: "left",\n loading: busy,\n disabled: busy,\n onClick: handleLoginWithDesktop,\n title: "Open the Fabric Hub desktop app to sign in with the same identity as this Hub node"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "desktop"\n }), "Log in with Fabric Hub (desktop)") : null, /*#__PURE__*/React.createElement(Button, {\n primary: !extensionAvailable && (typeof window === \'undefined\' || !!(window.fabricDesktop && window.fabricDesktop.isDesktopShell)),\n fluid: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return setLoginMethod(\'existing\');\n },\n color: "blue"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "key"\n }), "Existing Key"), /*#__PURE__*/React.createElement(Button, {\n fluid: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return setLoginMethod(\'generate\');\n },\n color: "green"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield"\n }), "Generate New Identity"), !props.postSetupFlow ? /*#__PURE__*/React.createElement(Button, {\n fluid: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n setLoginMethod(\'import\');\n setError(null);\n },\n color: "purple"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "download"\n }), "Load from Backup") : null, /*#__PURE__*/React.createElement(Button, {\n fluid: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n setLoginMethod(\'restoreMnemonic\');\n setError(null);\n },\n title: "Restore the same keys as other BIP39 wallets using your recovery words",\n color: "black"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "history"\n }), "Restore from Seed Phrase"))) : loginMethod === \'existing\' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n style: {\n marginBottom: \'1em\'\n },\n "aria-label": "Back to sign-in options",\n onClick: function onClick() {\n backToLoginChooser();\n setXpubInput(\'\');\n setError(null);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Change method"), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "key"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Use Existing Key")), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Paste your extended public key (xpub) to connect. It will be stored only in this browser. You can track balance and receive addresses against this xpub; you ", /*#__PURE__*/React.createElement("strong", null, "cannot"), " decrypt encrypted documents, sign publishes, or spend from this browser without importing the matching seed or using desktop / extension signing."), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Extended public key (xpub)"), /*#__PURE__*/React.createElement(Form.TextArea, {\n rows: 2,\n style: {\n width: \'100%\',\n resize: \'vertical\',\n fontFamily: \'monospace\',\n wordBreak: \'break-all\'\n },\n placeholder: "Paste your extended public key (xpub)\\u2026",\n spellCheck: false,\n autoCorrect: "off",\n autoCapitalize: "none",\n value: xpubInput,\n onChange: function onChange(e) {\n return setXpubInput(e.target.value);\n }\n }))), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n style: {\n marginTop: \'0.5em\'\n },\n loading: busy,\n disabled: busy || !xpubInput,\n onClick: /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee11() {\n var raw, key, identity, hasStorage, _t10;\n return _regenerator().w(function (_context11) {\n while (1) switch (_context11.p = _context11.n) {\n case 0:\n setError(null);\n setBusy(true);\n _context11.p = 1;\n raw = (xpubInput || \'\').trim();\n if (raw) {\n _context11.n = 2;\n break;\n }\n setError(\'Please paste an xpub to continue.\');\n return _context11.a(2);\n case 2:\n key = new Key({\n xpub: raw\n });\n identity = new Identity(key);\n try {\n hasStorage = false;\n try {\n hasStorage = typeof window !== \'undefined\';\n } catch (e) {\n hasStorage = false;\n }\n if (hasStorage) {\n writeStorageJSON(\'fabric.identity.local\', {\n xpub: key.xpub\n });\n }\n } catch (e) {}\n setLocalIdentity({\n id: identity.id,\n xpub: key.xpub,\n xprv: null\n });\n resetSeedState();\n _context11.n = 4;\n break;\n case 3:\n _context11.p = 3;\n _t10 = _context11.v;\n console.error(\'[IDENTITY]\', \'Activate xpub failed:\', safeIdentityErr(_t10));\n setError(_t10 && _t10.stack ? _t10.stack : _t10 && _t10.message ? _t10.message : String(_t10));\n case 4:\n _context11.p = 4;\n setBusy(false);\n return _context11.f(4);\n case 5:\n return _context11.a(2);\n }\n }, _callee11, null, [[1, 3, 4, 5]]);\n }))\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sign-in"\n }), "Activate xpub")) : loginMethod === \'import\' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n style: {\n marginBottom: \'1em\'\n },\n "aria-label": "Back to sign-in options",\n onClick: function onClick() {\n backToLoginChooser();\n setError(null);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Change method"), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "download"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Import Backup")), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Select a Fabric identity backup file (JSON) from this app \\u2014 ", /*#__PURE__*/React.createElement("strong", null, "plaintext"), " backups, or ", /*#__PURE__*/React.createElement("strong", null, "encrypted"), " (version 2; set the password field first), or JSON that includes ", /*#__PURE__*/React.createElement("code", null, "xprv"), " / ", /*#__PURE__*/React.createElement("code", null, "xpub"), ", or ", /*#__PURE__*/React.createElement("strong", null, "mnemonic"), " (plus optional ", /*#__PURE__*/React.createElement("code", null, "bip39Passphrase"), " / ", /*#__PURE__*/React.createElement("code", null, "passphrase"), ")."), /*#__PURE__*/React.createElement(Form.Field, {\n style: {\n maxWidth: \'42rem\',\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-import-backup-pwd"\n }, "Encrypted backup password (only if the file is password-protected)"), /*#__PURE__*/React.createElement("input", {\n id: "fabric-import-backup-pwd",\n type: "password",\n autoComplete: "off",\n value: importBackupFilePassword,\n onChange: function onChange(e) {\n return setImportBackupFilePassword(e.target.value);\n },\n style: {\n width: \'100%\',\n maxWidth: 360,\n padding: \'0.55em\',\n boxSizing: \'border-box\'\n }\n })), /*#__PURE__*/React.createElement("input", {\n type: "file",\n accept: ".json,application/json,text/*",\n onChange: function onChange(event) {\n var file = event && event.target && event.target.files && event.target.files[0];\n if (!file) return;\n setBusy(true);\n setError(null);\n var reader = new FileReader();\n reader.onload = function () {\n _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee12() {\n var text, data, pwdImp, hasStorage, mat, fabricAccountIndex, storedPayload, _nextIdentity, xprv, xpub, seedPhrase, ext, ident, mXprv, mXpub, key, identity, _hasStorage, nextIdentity, _t11, _t12, _t13;\n return _regenerator().w(function (_context12) {\n while (1) switch (_context12.p = _context12.n) {\n case 0:\n _context12.p = 0;\n text = String(reader.result || \'\');\n data = null;\n try {\n data = JSON.parse(text);\n } catch (e) {}\n if (!(data && _typeof(data) === \'object\' && data.version === 2 && data.ciphertext)) {\n _context12.n = 4;\n break;\n }\n pwdImp = String(importBackupFilePassword || \'\').trim();\n if (!(!pwdImp || pwdImp.length < 8)) {\n _context12.n = 1;\n break;\n }\n setError(\'This file is password-protected. Enter the backup password (min 8 characters) above and select the file again.\');\n return _context12.a(2);\n case 1:\n _context12.p = 1;\n _context12.n = 2;\n return decryptFabricIdentityBackupToPayload(data, pwdImp);\n case 2:\n data = _context12.v;\n _context12.n = 4;\n break;\n case 3:\n _context12.p = 3;\n _t11 = _context12.v;\n setError(_t11 && _t11.message ? _t11.message : \'Could not decrypt backup.\');\n return _context12.a(2);\n case 4:\n if (!(data && _typeof(data) === \'object\' && data.type === \'fabric-identity-backup-inner\' && data.xprv && (data.backupScope === \'fabricAccountSubtree\' || data.fabricHdRole === \'accountNode\'))) {\n _context12.n = 6;\n break;\n }\n hasStorage = false;\n try {\n hasStorage = typeof window !== \'undefined\';\n } catch (e) {\n hasStorage = false;\n }\n mat = identityFromFabricProtocolSigningXprv(String(data.xprv).trim());\n if (!(data.id != null && String(data.id).trim() && String(data.id).trim() !== String(mat.id))) {\n _context12.n = 5;\n break;\n }\n setError(\'Backup identity id does not match key material.\');\n return _context12.a(2);\n case 5:\n fabricAccountIndex = data.fabricAccountIndex != null ? Math.floor(Number(data.fabricAccountIndex)) : 0;\n storedPayload = {\n fabricIdentityMode: \'account\',\n fabricHdRole: \'accountNode\',\n fabricAccountIndex: fabricAccountIndex,\n id: mat.id,\n xpub: mat.xpub,\n passwordProtected: false\n };\n if (hasStorage) {\n writeStorageJSON(\'fabric.identity.local\', storedPayload);\n }\n _nextIdentity = unlockedSessionFromDecryptedMaster(mat.xprv, storedPayload);\n setLocalIdentity(_nextIdentity);\n resetSeedState();\n if (typeof props.onLocalIdentityChange === \'function\') {\n props.onLocalIdentityChange(_nextIdentity);\n }\n if (typeof props.onUnlockSuccess === \'function\') {\n props.onUnlockSuccess({\n id: String(mat.id),\n xpub: String(mat.xpub),\n xprv: String(mat.xprv),\n passwordProtected: false,\n fabricIdentityMode: \'account\',\n fabricHdRole: \'accountNode\',\n fabricAccountIndex: fabricAccountIndex\n });\n }\n return _context12.a(2);\n case 6:\n xprv = null;\n xpub = null;\n if (!(data && _typeof(data) === \'object\')) {\n _context12.n = 9;\n break;\n }\n if (data.xprv) xprv = String(data.xprv);\n if (data.xpub) xpub = String(data.xpub);\n seedPhrase = data.mnemonic != null && String(data.mnemonic).trim() ? String(data.mnemonic).trim() : data.seed != null && String(data.seed).trim() ? String(data.seed).trim() : \'\';\n if (!(!xprv && seedPhrase)) {\n _context12.n = 9;\n break;\n }\n _context12.p = 7;\n ext = data.bip39Passphrase != null && String(data.bip39Passphrase).trim() !== \'\' ? String(data.bip39Passphrase) : data.passphrase != null && String(data.passphrase).trim() !== \'\' ? String(data.passphrase) : null;\n ident = ext ? new Identity({\n seed: seedPhrase,\n passphrase: ext\n }) : new Identity({\n seed: seedPhrase\n });\n xprv = ident.key.xprv;\n xpub = ident.key.xpub;\n _context12.n = 9;\n break;\n case 8:\n _context12.p = 8;\n _t12 = _context12.v;\n setError(_t12 && _t12.message ? "Could not restore from mnemonic in file: ".concat(_t12.message) : \'Could not restore from mnemonic in file.\');\n return _context12.a(2);\n case 9:\n if (!xprv || !xpub) {\n mXprv = text.match(/(xprv[0-9A-Za-z]+)/);\n mXpub = text.match(/(xpub[0-9A-Za-z]+)/);\n if (mXprv && mXprv[1]) xprv = mXprv[1];\n if (mXpub && mXpub[1]) xpub = mXpub[1];\n }\n if (!(!xprv && !xpub)) {\n _context12.n = 10;\n break;\n }\n setError(\'Could not find an xprv or xpub in the selected file.\');\n return _context12.a(2);\n case 10:\n key = null;\n identity = null;\n if (xprv) {\n key = new Key({\n xprv: xprv\n });\n identity = new Identity({\n xprv: xprv\n });\n } else if (xpub) {\n key = new Key({\n xpub: xpub\n });\n identity = new Identity(key);\n }\n if (!(!key || !identity)) {\n _context12.n = 11;\n break;\n }\n setError(\'Failed to reconstruct identity from backup file.\');\n return _context12.a(2);\n case 11:\n try {\n _hasStorage = false;\n try {\n _hasStorage = typeof window !== \'undefined\';\n } catch (e) {\n _hasStorage = false;\n }\n if (_hasStorage) {\n if (xprv) {\n writeStorageJSON(\'fabric.identity.local\', {\n id: identity.id,\n xpub: key.xpub,\n passwordProtected: false\n });\n } else {\n writeStorageJSON(\'fabric.identity.local\', {\n id: identity.id,\n xpub: key.xpub,\n passwordProtected: false\n });\n }\n }\n } catch (e) {}\n nextIdentity = {\n id: identity.id,\n xpub: key.xpub,\n xprv: xprv || null,\n passwordProtected: false\n };\n setLocalIdentity(nextIdentity);\n resetSeedState();\n if (typeof props.onLocalIdentityChange === \'function\') {\n props.onLocalIdentityChange(nextIdentity);\n }\n if (xprv && typeof props.onUnlockSuccess === \'function\') {\n props.onUnlockSuccess({\n id: String(identity.id),\n xpub: String(key.xpub),\n xprv: String(xprv),\n passwordProtected: false\n });\n }\n _context12.n = 13;\n break;\n case 12:\n _context12.p = 12;\n _t13 = _context12.v;\n console.error(\'[IDENTITY]\', \'Import backup failed:\', safeIdentityErr(_t13));\n setError(_t13 && _t13.message ? _t13.message : String(_t13));\n case 13:\n _context12.p = 13;\n setBusy(false);\n return _context12.f(13);\n case 14:\n return _context12.a(2);\n }\n }, _callee12, null, [[7, 8], [1, 3], [0, 12, 13, 14]]);\n }))();\n };\n reader.onerror = function () {\n setBusy(false);\n setError(\'Failed to read backup file.\');\n };\n reader.readAsText(file);\n }\n })) : loginMethod === \'restoreMnemonic\' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n style: {\n marginBottom: \'1em\'\n },\n "aria-label": "Back to sign-in options",\n onClick: function onClick() {\n backToLoginChooser();\n setError(null);\n setDevMnemonicText(\'\');\n setDevBip39Passphrase(\'\');\n setDevMnemonicReplace(false);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Change method"), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "history"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Restore with recovery phrase")), /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n maxWidth: \'42rem\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "How this works"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n lineHeight: 1.5\n }\n }, "Enter your ", /*#__PURE__*/React.createElement("strong", null, "BIP39 recovery phrase"), " (usually 12 or 24 words). If you used an optional", /*#__PURE__*/React.createElement("strong", null, " extension passphrase"), " (sometimes called a 25th word) when the wallet was created, add it below\\u2014this is", /*#__PURE__*/React.createElement("em", null, " not"), " the same as the optional encryption password you may set after generating a new identity in Fabric."), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.65em 0 0\',\n lineHeight: 1.5\n }\n }, "Fabric derives the same master key as ", /*#__PURE__*/React.createElement("strong", null, "Generate New Identity"), " and other standard BIP39 software. Prefer importing the ", /*#__PURE__*/React.createElement("strong", null, "xprv"), " or JSON backup when you have it (single branch, fewer typos)\\u2014use ", /*#__PURE__*/React.createElement("strong", null, "Import Backup"), "."), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.65em 0 0\',\n lineHeight: 1.5\n }\n }, "If you enter the ", /*#__PURE__*/React.createElement("strong", null, "wrong"), " extension passphrase (or omit one that was used originally), derivation still succeeds but you get a", \' \', /*#__PURE__*/React.createElement("em", null, "different"), " wallet identity\\u2014there is no separate \\u201Cwrong password\\u201D error, by BIP39 design. Double-check against an expected address or id when restoring.")), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-restore-mnemonic"\n }, "Recovery phrase"), /*#__PURE__*/React.createElement(Form.TextArea, {\n id: "fabric-restore-mnemonic",\n rows: 3,\n style: {\n width: \'100%\',\n resize: \'vertical\',\n fontFamily: \'monospace\',\n wordBreak: \'break-all\'\n },\n placeholder: "Enter your BIP39 words separated by spaces\\u2026",\n spellCheck: false,\n autoCorrect: "off",\n autoCapitalize: "none",\n value: devMnemonicText,\n onChange: function onChange(e) {\n return setDevMnemonicText(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-restore-bip39-pass"\n }, "Extension passphrase (optional)"), /*#__PURE__*/React.createElement(Form.Input, {\n id: "fabric-restore-bip39-pass",\n type: "password",\n placeholder: "Only if your wallet used a passphrase with the phrase",\n autoComplete: "off",\n value: devBip39Passphrase,\n onChange: function onChange(e) {\n return setDevBip39Passphrase(e.target.value);\n }\n })), /*#__PURE__*/React.createElement(Form.Checkbox, {\n label: "Replace the identity already stored in this browser",\n checked: devMnemonicReplace,\n onChange: function onChange(e, d) {\n return setDevMnemonicReplace(!!(d && d.checked));\n },\n "aria-label": "Replace the identity already stored in this browser"\n })), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n style: {\n marginTop: \'0.75em\'\n },\n loading: busy,\n disabled: busy || !String(devMnemonicText || \'\').trim(),\n onClick: function onClick() {\n setError(null);\n setBusy(true);\n try {\n var _require14 = __webpack_require__(/*! ../functions/fabricBrowserIdentityDev */ "./functions/fabricBrowserIdentityDev.js"),\n _storeUnlockedIdentityFromMnemonic = _require14.storeUnlockedIdentityFromMnemonic;\n var r = _storeUnlockedIdentityFromMnemonic({\n seed: devMnemonicText,\n passphrase: devBip39Passphrase || undefined,\n force: devMnemonicReplace\n });\n if (!r.ok || !r.identity) {\n setError(r.error || \'Restore failed\');\n return;\n }\n var nextIdentity = {\n id: r.identity.id,\n xpub: r.identity.xpub,\n xprv: r.identity.xprv,\n passwordProtected: false\n };\n setLocalIdentity(nextIdentity);\n if (typeof props.onLocalIdentityChange === \'function\') {\n props.onLocalIdentityChange(nextIdentity);\n }\n if (typeof props.onUnlockSuccess === \'function\') {\n props.onUnlockSuccess({\n id: String(r.identity.id),\n xpub: String(r.identity.xpub),\n xprv: String(r.identity.xprv),\n passwordProtected: false\n });\n }\n resetSeedState();\n } catch (e) {\n console.error(\'[IDENTITY]\', \'Recovery phrase restore failed:\', safeIdentityErr(e));\n setError(e && e.message ? e.message : String(e));\n } finally {\n setBusy(false);\n }\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check circle"\n }), "Restore and unlock")) : loginMethod === \'generate\' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n style: {\n marginBottom: \'1em\'\n },\n "aria-label": "Back to sign-in options",\n onClick: function onClick() {\n backToLoginChooser();\n setError(null);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Change method"), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Generate New Identity")), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Create a new identity with a 12-word seed phrase. This happens locally and never leaves your device."), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n icon: true,\n labelPosition: "left",\n loading: busy,\n disabled: busy,\n onClick: /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee13() {\n var generate, delay, key, _t14;\n return _regenerator().w(function (_context13) {\n while (1) switch (_context13.p = _context13.n) {\n case 0:\n setError(null);\n setBusy(true);\n setIsGenerating(true);\n setPendingSeed(null);\n _context13.p = 1;\n generate = function generate() {\n var key = new Key();\n if (!key.mnemonic || !key.xprv) {\n throw new Error(\'Key did not produce mnemonic/xprv.\');\n }\n return key;\n };\n delay = new Promise(function (resolve) {\n return setTimeout(resolve, 1500);\n });\n key = generate();\n _context13.n = 2;\n return delay;\n case 2:\n setPendingSeed({\n mnemonic: key.mnemonic,\n xprv: key.xprv\n });\n setSeedConfirmed(false);\n setIdentityPassword(\'\');\n setIdentityPasswordConfirm(\'\');\n _context13.n = 4;\n break;\n case 3:\n _context13.p = 3;\n _t14 = _context13.v;\n console.error(\'[IDENTITY]\', \'Generate identity failed:\', safeIdentityErr(_t14));\n setError(_t14 && _t14.stack ? _t14.stack : _t14 && _t14.message ? _t14.message : String(_t14));\n case 4:\n _context13.p = 4;\n setIsGenerating(false);\n setBusy(false);\n return _context13.f(4);\n case 5:\n return _context13.a(2);\n }\n }, _callee13, null, [[1, 3, 4, 5]]);\n }))\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield"\n }), "Generate new identity (12\\u2011word seed)")) : null, error && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Error"), /*#__PURE__*/React.createElement("pre", {\n style: {\n margin: \'0.5em 0 0\',\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\',\n fontSize: \'0.85em\'\n }\n }, error))));\n}\nmodule.exports = IdentityManager;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LFVBQUEsQ0FBQXptQixDQUFBO1FBQUE7TUFBQSxHQUFBdW1CLFNBQUE7SUFBQSxDQUVsQjtFQUFDLGdCQUVGemlCLEtBQUEsQ0FBQWtXLGFBQUEsQ0FBQ3JWLElBQUk7SUFBQ25CLElBQUksRUFBQztFQUFRLENBQUUsQ0FBQyw2Q0FFaEIsQ0FDUixDQUFDLEdBQ0QsSUFBSSxFQUNQdUksS0FBSyxpQkFDSmpJLEtBQUEsQ0FBQWtXLGFBQUEsQ0FBQ25WLE9BQU87SUFBQ2daLFFBQVE7SUFBQ2IsS0FBSyxFQUFFO01BQUVNLFNBQVMsRUFBRTtJQUFTO0VBQUUsZ0JBQy9DeFosS0FBQSxDQUFBa1csYUFBQSxDQUFDblYsT0FBTyxDQUFDSCxNQUFNLFFBQUMsT0FBcUIsQ0FBQyxlQUN0Q1osS0FBQSxDQUFBa1csYUFBQTtJQUFLZ0QsS0FBSyxFQUFFO01BQUUzVSxNQUFNLEVBQUUsV0FBVztNQUFFTSxVQUFVLEVBQUUsVUFBVTtNQUFFQyxTQUFTLEVBQUUsWUFBWTtNQUFFSCxRQUFRLEVBQUU7SUFBUztFQUFFLEdBQ3RHc0QsS0FDRSxDQUNFLENBRVIsQ0FDRSxDQUFDO0FBRWQ7QUFFQTJhLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHeGQsZUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29tcG9uZW50cy9JZGVudGl0eU1hbmFnZXIuanM/NTViNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIERlcGVuZGVuY2llc1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5cbi8vIEZhYnJpYyBUeXBlc1xuY29uc3QgS2V5ID0gcmVxdWlyZSgnQGZhYnJpYy9jb3JlL3R5cGVzL2tleScpO1xuY29uc3QgSWRlbnRpdHkgPSByZXF1aXJlKCdAZmFicmljL2NvcmUvdHlwZXMvaWRlbnRpdHknKTtcblxuLy8gU2VtYW50aWMgVUlcbmNvbnN0IHtcbiAgQWNjb3JkaW9uLFxuICBCdXR0b24sXG4gIENoZWNrYm94LFxuICBEaXZpZGVyLFxuICBGb3JtLFxuICBIZWFkZXIsXG4gIEljb24sXG4gIExhYmVsLFxuICBNZXNzYWdlLFxuICBNb2RhbCxcbiAgU2VnbWVudFxufSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5cbmNvbnN0IHtcbiAgREVMRUdBVElPTl9TVE9SQUdFX0tFWSxcbiAgbm90aWZ5RGVsZWdhdGlvblN0b3JhZ2VDaGFuZ2VkXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0RlbGVnYXRpb25Mb2NhbCcpO1xuY29uc3QgeyBzYWZlSWRlbnRpdHlFcnIgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNTYWZlTG9nJyk7XG5jb25zdCB7XG4gIHJlYWRTdG9yYWdlSlNPTixcbiAgcmVhZFN0b3JhZ2VTdHJpbmcsXG4gIHdyaXRlU3RvcmFnZUpTT04sXG4gIHJlbW92ZVN0b3JhZ2VLZXksXG4gIGNsZWFyRmFicmljQnJvd3NlcklkZW50aXR5TG9jYWxcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljQnJvd3NlclN0YXRlJyk7XG5cbmNvbnN0IHtcbiAgZW5jcnlwdEZhYnJpY0lkZW50aXR5QmFja3VwUGF5bG9hZCxcbiAgZGVjcnlwdEZhYnJpY0lkZW50aXR5QmFja3VwVG9QYXlsb2FkXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0lkZW50aXR5QmFja3VwQ3J5cHRvJyk7XG5cbmNvbnN0IHtcbiAgTE9DQUxfSURFTlRJVFlfUEFTU1dPUkRfTUlOLFxuICBidWlsZExvY2FsRmFicmljSWRlbnRpdHlQYXlsb2FkLFxuICBmYWJyaWNQbGFpbnRleHRTaWduaW5nVW5sb2NrYWJsZSxcbiAgdW5sb2NrZWRTZXNzaW9uRnJvbURlY3J5cHRlZE1hc3RlcixcbiAgZW5jcnlwdExvY2FsSWRlbnRpdHlBdFJlc3QsXG4gIGRlY3J5cHRMb2NhbElkZW50aXR5TWFzdGVyTWF0ZXJpYWxcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljSHViTG9jYWxJZGVudGl0eScpO1xuY29uc3Qge1xuICBzdG9yZVVubG9ja2VkSWRlbnRpdHlGcm9tTW5lbW9uaWNcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljQnJvd3NlcklkZW50aXR5RGV2Jyk7XG5jb25zdCB7IHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJBZG1pblRva2VuQnJvd3NlcicpO1xuY29uc3QgRmFicmljSHViQWRtaW5Ub2tlbk5vdGljZSA9IHJlcXVpcmUoJy4vZmFicmljSWRlbnRpdHkvRmFicmljSHViQWRtaW5Ub2tlbk5vdGljZScpO1xuY29uc3Qge1xuICBkZXJpdmVGYWJyaWNBY2NvdW50SWRlbnRpdHlLZXlzLFxuICBmYWJyaWNSb290WHB1YkZyb21NYXN0ZXJYcHJ2LFxuICBpZGVudGl0eUZyb21GYWJyaWNQcm90b2NvbFNpZ25pbmdYcHJ2XG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0FjY291bnREZXJpdmVkSWRlbnRpdHknKTtcbmNvbnN0IHsgdmVyaWZ5RmFicmljRGVza3RvcExvZ2luU2lnbmVkUGF5bG9hZCwgYnVpbGRGYWJyaWNJZGVudGl0eVNpZ25lZFBheWxvYWQgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNEZXNrdG9wTG9naW5WZXJpZnknKTtcbmNvbnN0IHtcbiAgYnVpbGREZXZpY2VMaW5rT2ZmZXJNZXNzYWdlLFxuICBjcmVhdGVEZXZpY2VMaW5rT2ZmZXIsXG4gIGZldGNoRGV2aWNlTGlua1Nlc3Npb24sXG4gIHBvc3REZXZpY2VMaW5rU2lnbmF0dXJlXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0RldmljZUxpbmtDbGllbnQnKTtcbmNvbnN0IHtcbiAgU1RPUkFHRV9MSU5LRURfREVWSUNFUyxcbiAgcmVhZExpbmtlZERldmljZXMsXG4gIG1lcmdlTGlua2VkRGV2aWNlLFxuICBwdWJsaXNoSHViSWRlbnRpdHlDcm9zc1NpZ24sXG4gIHJldm9rZUxpbmtlZERldmljZVxufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNMaW5rZWREZXZpY2VzJyk7XG5jb25zdCB7IGJ1aWxkRmFicmljQWNjb3VudFN1YnRyZWVCYWNrdXBJbm5lciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0lkZW50aXR5Q2FwYWJpbGl0aWVzJyk7XG5jb25zdCB7XG4gIERFRkFVTFRfTE9DS19USU1FT1VUX01JTlVURVMsXG4gIHJlYWRGYWJyaWNJZGVudGl0eUxvY2tUaW1lb3V0TWludXRlcyxcbiAgd3JpdGVGYWJyaWNJZGVudGl0eUxvY2tUaW1lb3V0TWludXRlcyxcbiAgbG9ja1RpbWVvdXRNaW51dGVzVG9Nc1xufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mYWJyaWNJZGVudGl0eUxvY2tQcmVmcycpO1xuXG4vKiogTG9uZyB4cHViIC8gQmVjaDMyIHN0cmluZ3MgbXVzdCB3cmFwIG9yIG1vYmlsZSBtb2RhbHMgb3ZlcmZsb3cgYW5kIHRoZSB2aWV3cG9ydCBzdHJvYmVzLiAqL1xuY29uc3QgaWRlbnRpdHlNb25vc3BhY2VCbG9ja1N0eWxlID0ge1xuICBkaXNwbGF5OiAnYmxvY2snLFxuICBtYXJnaW46ICcwLjM1ZW0gMCAwLjc1ZW0nLFxuICBwYWRkaW5nOiAnMC41cmVtIDAuNnJlbScsXG4gIG1heFdpZHRoOiAnMTAwJScsXG4gIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICBmb250U2l6ZTogJzAuNzhlbScsXG4gIGxpbmVIZWlnaHQ6IDEuNCxcbiAgd2hpdGVTcGFjZTogJ3ByZS13cmFwJyxcbiAgd29yZEJyZWFrOiAnYnJlYWstYWxsJyxcbiAgb3ZlcmZsb3dXcmFwOiAnYW55d2hlcmUnLFxuICBmb250RmFtaWx5OiAnbW9ub3NwYWNlLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlJyxcbiAgYmFja2dyb3VuZDogJ3JnYmEoMCwgMCwgMCwgMC4wNCknLFxuICBib3JkZXJSYWRpdXM6IDQsXG4gIGJvcmRlcjogJzFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMDYpJyxcbiAgb3ZlcmZsb3dYOiAnYXV0bydcbn07XG5cbmZ1bmN0aW9uIElkZW50aXR5TWFuYWdlciAocHJvcHMpIHtcbiAgY29uc3QgbG9ja1RpbWVvdXRNc0Zyb21UZXN0cyA9IChwcm9wcyAmJiB0eXBlb2YgcHJvcHMubG9ja1RpbWVvdXRNcyA9PT0gJ251bWJlcicgJiYgcHJvcHMubG9ja1RpbWVvdXRNcyA+IDApXG4gICAgPyBwcm9wcy5sb2NrVGltZW91dE1zXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IFtsb2NrVGltZW91dE1pbnV0ZXMsIHNldExvY2tUaW1lb3V0TWludXRlc10gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIERFRkFVTFRfTE9DS19USU1FT1VUX01JTlVURVM7XG4gICAgICByZXR1cm4gcmVhZEZhYnJpY0lkZW50aXR5TG9ja1RpbWVvdXRNaW51dGVzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIERFRkFVTFRfTE9DS19USU1FT1VUX01JTlVURVM7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBsb2NrVGltZW91dE1zID0gbG9ja1RpbWVvdXRNc0Zyb21UZXN0cyAhPSBudWxsXG4gICAgPyBsb2NrVGltZW91dE1zRnJvbVRlc3RzXG4gICAgOiBsb2NrVGltZW91dE1pbnV0ZXNUb01zKGxvY2tUaW1lb3V0TWludXRlcyk7XG5cbiAgY29uc3Qgc3VwcHJlc3NGb3JnZXQgPSAhIShwcm9wcyAmJiBwcm9wcy5zdXBwcmVzc0ZvcmdldEFuZExpbmtlZENocm9tZSk7XG5cbiAgY29uc3QgW2xvY2FsSWRlbnRpdHksIHNldExvY2FsSWRlbnRpdHldID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIC8vIFBhcmVudCBpZGVudGl0eSBpcyBhdXRob3JpdGF0aXZlIHdoZW4gcHJvdmlkZWQgKHByZXZlbnRzIGxvY2svd2F0Y2gtb25seSBzdGF0ZSBkcmlmdGluZyBmcm9tIHNoZWxsKS5cbiAgICBpZiAocHJvcHMuY3VycmVudElkZW50aXR5ICYmIChwcm9wcy5jdXJyZW50SWRlbnRpdHkuaWQgfHwgcHJvcHMuY3VycmVudElkZW50aXR5LnhwdWIpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcHJvcHMuY3VycmVudElkZW50aXR5LmlkLFxuICAgICAgICB4cHViOiBwcm9wcy5jdXJyZW50SWRlbnRpdHkueHB1YixcbiAgICAgICAgeHBydjogcHJvcHMuY3VycmVudElkZW50aXR5LnhwcnYgfHwgbnVsbCxcbiAgICAgICAgcGFzc3dvcmRQcm90ZWN0ZWQ6ICEhcHJvcHMuY3VycmVudElkZW50aXR5LnBhc3N3b3JkUHJvdGVjdGVkLFxuICAgICAgICBwbGFpbnRleHRVbmxvY2tBdmFpbGFibGU6ICEhcHJvcHMuY3VycmVudElkZW50aXR5LnBsYWludGV4dFVubG9ja0F2YWlsYWJsZSxcbiAgICAgICAgbGlua2VkRnJvbURlc2t0b3A6ICEhcHJvcHMuY3VycmVudElkZW50aXR5LmxpbmtlZEZyb21EZXNrdG9wLFxuICAgICAgICBmYWJyaWNJZGVudGl0eU1vZGU6IHByb3BzLmN1cnJlbnRJZGVudGl0eS5mYWJyaWNJZGVudGl0eU1vZGUgfHwgbnVsbCxcbiAgICAgICAgZmFicmljQWNjb3VudEluZGV4OiBwcm9wcy5jdXJyZW50SWRlbnRpdHkuZmFicmljQWNjb3VudEluZGV4ICE9IG51bGxcbiAgICAgICAgICA/IE1hdGguZmxvb3IoTnVtYmVyKHByb3BzLmN1cnJlbnRJZGVudGl0eS5mYWJyaWNBY2NvdW50SW5kZXgpKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBmYWJyaWNIZFJvbGU6IHByb3BzLmN1cnJlbnRJZGVudGl0eS5mYWJyaWNIZFJvbGUgfHwgbnVsbCxcbiAgICAgICAgbWFzdGVyWHBydjogcHJvcHMuY3VycmVudElkZW50aXR5Lm1hc3RlclhwcnYgfHwgbnVsbCxcbiAgICAgICAgbWFzdGVyWHB1YjogcHJvcHMuY3VycmVudElkZW50aXR5Lm1hc3RlclhwdWIgfHwgbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgbGV0IGhhc1N0b3JhZ2UgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhhc1N0b3JhZ2UgPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYXNTdG9yYWdlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWhhc1N0b3JhZ2UpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgcGFyc2VkID0gcmVhZFN0b3JhZ2VKU09OKCdmYWJyaWMuaWRlbnRpdHkubG9jYWwnLCBudWxsKTtcbiAgICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgYmwgPSBidWlsZExvY2FsRmFicmljSWRlbnRpdHlQYXlsb2FkKHBhcnNlZCk7XG4gICAgICBpZiAoYmwucmVzb2x2ZWQgJiYgYmwucmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHIgPSBibC5yZWNvcmQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IHIuaWQsXG4gICAgICAgICAgeHB1Yjogci54cHViLFxuICAgICAgICAgIHhwcnY6IG51bGwsXG4gICAgICAgICAgcGFzc3dvcmRQcm90ZWN0ZWQ6ICEhci5wYXNzd29yZFByb3RlY3RlZCxcbiAgICAgICAgICBwbGFpbnRleHRVbmxvY2tBdmFpbGFibGU6ICEhci5wbGFpbnRleHRVbmxvY2tBdmFpbGFibGUsXG4gICAgICAgICAgZmFicmljSWRlbnRpdHlNb2RlOiByLmZhYnJpY0lkZW50aXR5TW9kZSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgZmFicmljQWNjb3VudEluZGV4OlxuICAgICAgICAgICAgci5mYWJyaWNBY2NvdW50SW5kZXggIT0gbnVsbCA/IE1hdGguZmxvb3IoTnVtYmVyKHIuZmFicmljQWNjb3VudEluZGV4KSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgZmFicmljSGRSb2xlOiByLmZhYnJpY0hkUm9sZSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgbWFzdGVyWHB1Yjogci5tYXN0ZXJYcHViIHx8IG51bGwsXG4gICAgICAgICAgbWFzdGVyWHBydjogbnVsbCxcbiAgICAgICAgICBsaW5rZWRGcm9tRGVza3RvcDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdbSURFTlRJVFldJywgJ0ZhaWxlZCB0byByZXN0b3JlIGxvY2FsIGlkZW50aXR5OicsIHNhZmVJZGVudGl0eUVycihlKSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBbYnVzeSwgc2V0QnVzeV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtzaG93Q29uZmlybUZvcmdldCwgc2V0U2hvd0NvbmZpcm1Gb3JnZXRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2lnbmF0dXJlLCBzZXRTaWduYXR1cmVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtwZW5kaW5nU2VlZCwgc2V0UGVuZGluZ1NlZWRdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7IC8vIHsgbW5lbW9uaWMsIHhwcnYgfVxuICBjb25zdCBbc2VlZENvbmZpcm1lZCwgc2V0U2VlZENvbmZpcm1lZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7IC8vIHdoZW4gdHJ1ZSwgc2hvdyBmaW5hbCBiYWNrdXAvbG9naW4gc2NyZWVuXG4gIGNvbnN0IFt4cHViSW5wdXQsIHNldFhwdWJJbnB1dF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtpZGVudGl0eVBhc3N3b3JkLCBzZXRJZGVudGl0eVBhc3N3b3JkXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2lkZW50aXR5UGFzc3dvcmRDb25maXJtLCBzZXRJZGVudGl0eVBhc3N3b3JkQ29uZmlybV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFt1bmxvY2tQYXNzd29yZCwgc2V0VW5sb2NrUGFzc3dvcmRdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICAvKiogTGVnYWN5IHBsYWludGV4dC1hdC1yZXN0OiBzZXQgcGFzc3dvcmQsIGVuY3J5cHQgb24gZGlzaywgdGhlbiB1bmxvY2sgaW4gb25lIHN0ZXAuICovXG4gIGNvbnN0IFtwbGFpbnRleHRNaWdyYXRpb25QYXNzd29yZCwgc2V0UGxhaW50ZXh0TWlncmF0aW9uUGFzc3dvcmRdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbcGxhaW50ZXh0TWlncmF0aW9uUGFzc3dvcmRDb25maXJtLCBzZXRQbGFpbnRleHRNaWdyYXRpb25QYXNzd29yZENvbmZpcm1dID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICAvKiogUGFzc3dvcmQgZm9yIEpTT04gZXhwb3J0ICh2MiBlbmNyeXB0ZWQgYmFja3VwKS4gKi9cbiAgY29uc3QgW2JhY2t1cEV4cG9ydFBhc3N3b3JkLCBzZXRCYWNrdXBFeHBvcnRQYXNzd29yZF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtiYWNrdXBFeHBvcnRCdXN5LCBzZXRCYWNrdXBFeHBvcnRCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2ltcG9ydEJhY2t1cEZpbGVQYXNzd29yZCwgc2V0SW1wb3J0QmFja3VwRmlsZVBhc3N3b3JkXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dTZWVkUGhyYXNlLCBzZXRTaG93U2VlZFBocmFzZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93QmFja3VwS2V5LCBzZXRTaG93QmFja3VwS2V5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2xvZ2luTWV0aG9kLCBzZXRMb2dpbk1ldGhvZF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiAoXG4gICAgcHJvcHMuaW5pdGlhbExvZ2luTWV0aG9kICE9IG51bGwgPyBwcm9wcy5pbml0aWFsTG9naW5NZXRob2QgOiBudWxsXG4gICkpOyAvLyAnZXhpc3RpbmcnIHwgJ2dlbmVyYXRlJyB8ICdpbXBvcnQnIHwgJ3Jlc3RvcmVNbmVtb25pYycgfCBudWxsXG4gIGNvbnN0IFtkZXZNbmVtb25pY1RleHQsIHNldERldk1uZW1vbmljVGV4dF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtkZXZCaXAzOVBhc3NwaHJhc2UsIHNldERldkJpcDM5UGFzc3BocmFzZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtkZXZNbmVtb25pY1JlcGxhY2UsIHNldERldk1uZW1vbmljUmVwbGFjZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIC8qKiBVc2VyIG11c3QgY2hlY2sgYmVmb3JlIGZpbmlzaGluZyBhIG5ld2x5IGdlbmVyYXRlZCBpZGVudGl0eSAoYmFja3VwIGRpc2NpcGxpbmUpLiAqL1xuICBjb25zdCBbYmFja3VwQWNrbm93bGVkZ2VkLCBzZXRCYWNrdXBBY2tub3dsZWRnZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZGV2aWNlTGlua0J1c3ksIHNldERldmljZUxpbmtCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2RldmljZUxpbmtPZmZlciwgc2V0RGV2aWNlTGlua09mZmVyXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbZGV2aWNlTGlua1FyLCBzZXREZXZpY2VMaW5rUXJdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsaW5rZWREZXZpY2VzUmV2LCBzZXRMaW5rZWREZXZpY2VzUmV2XSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICBjb25zdCBkZXZpY2VMaW5rUG9sbFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgbGlua2VkRGV2aWNlcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gcmVhZExpbmtlZERldmljZXMoKSwgW2xpbmtlZERldmljZXNSZXYsIGxvY2FsSWRlbnRpdHldKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IGRldmljZUxpbmtPZmZlciAmJiBkZXZpY2VMaW5rT2ZmZXIucHJvdG9jb2xVcmw7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHNldERldmljZUxpbmtRcihudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBRUkNvZGUgPSByZXF1aXJlKCdxcmNvZGUnKTtcbiAgICAgIFFSQ29kZS50b0RhdGFVUkwodXJsLCB7IHdpZHRoOiAxOTYsIG1hcmdpbjogMSwgZXJyb3JDb3JyZWN0aW9uTGV2ZWw6ICdNJyB9KVxuICAgICAgICAudGhlbigoZGF0YSkgPT4geyBpZiAoIWNhbmNlbGxlZCkgc2V0RGV2aWNlTGlua1FyKGRhdGEpOyB9KVxuICAgICAgICAuY2F0Y2goKCkgPT4geyBpZiAoIWNhbmNlbGxlZCkgc2V0RGV2aWNlTGlua1FyKG51bGwpOyB9KTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBzZXREZXZpY2VMaW5rUXIobnVsbCk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7IGNhbmNlbGxlZCA9IHRydWU7IH07XG4gIH0sIFtkZXZpY2VMaW5rT2ZmZXIgJiYgZGV2aWNlTGlua09mZmVyLnByb3RvY29sVXJsXSk7XG5cbiAgY29uc3QgdXNlc0Rpc2tFbmNyeXB0aW9uUGFzc3dvcmRGb3JCYWNrdXAgPSAhIShcbiAgICBsb2NhbElkZW50aXR5ICYmXG4gICAgbG9jYWxJZGVudGl0eS5wYXNzd29yZFByb3RlY3RlZCAmJlxuICAgIGxvY2FsSWRlbnRpdHkueHBydlxuICApO1xuXG4gIGNvbnN0IHJlc29sdmVCYWNrdXBFbmNyeXB0aW9uUGFzc3dvcmQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHVzZXNEaXNrRW5jcnlwdGlvblBhc3N3b3JkRm9yQmFja3VwKSB7XG4gICAgICBjb25zdCB1ID0gU3RyaW5nKHVubG9ja1Bhc3N3b3JkIHx8ICcnKS50cmltKCk7XG4gICAgICByZXR1cm4gdS5sZW5ndGggPj0gTE9DQUxfSURFTlRJVFlfUEFTU1dPUkRfTUlOID8gdSA6ICcnO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKGJhY2t1cEV4cG9ydFBhc3N3b3JkIHx8ICcnKS50cmltKCk7XG4gIH0sIFt1c2VzRGlza0VuY3J5cHRpb25QYXNzd29yZEZvckJhY2t1cCwgdW5sb2NrUGFzc3dvcmQsIGJhY2t1cEV4cG9ydFBhc3N3b3JkXSk7XG5cbiAgY29uc3QgcmVzZXRTZWVkU3RhdGUgPSAoKSA9PiB7XG4gICAgc2V0UGVuZGluZ1NlZWQobnVsbCk7XG4gICAgc2V0U2VlZENvbmZpcm1lZChmYWxzZSk7XG4gICAgc2V0SWRlbnRpdHlQYXNzd29yZCgnJyk7XG4gICAgc2V0SWRlbnRpdHlQYXNzd29yZENvbmZpcm0oJycpO1xuICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XG4gICAgc2V0U2hvd1NlZWRQaHJhc2UoZmFsc2UpO1xuICAgIHNldFNob3dCYWNrdXBLZXkoZmFsc2UpO1xuICAgIHNldFVubG9ja1Bhc3N3b3JkKCcnKTtcbiAgICBzZXRQbGFpbnRleHRNaWdyYXRpb25QYXNzd29yZCgnJyk7XG4gICAgc2V0UGxhaW50ZXh0TWlncmF0aW9uUGFzc3dvcmRDb25maXJtKCcnKTtcbiAgICBzZXRCYWNrdXBFeHBvcnRQYXNzd29yZCgnJyk7XG4gICAgc2V0QmFja3VwRXhwb3J0QnVzeShmYWxzZSk7XG4gICAgc2V0RGV2TW5lbW9uaWNUZXh0KCcnKTtcbiAgICBzZXREZXZCaXAzOVBhc3NwaHJhc2UoJycpO1xuICAgIHNldERldk1uZW1vbmljUmVwbGFjZShmYWxzZSk7XG4gICAgc2V0QmFja3VwQWNrbm93bGVkZ2VkKGZhbHNlKTtcbiAgICBzZXRMb2dpbk1ldGhvZChwcm9wcy5pbml0aWFsTG9naW5NZXRob2QgIT0gbnVsbCA/IHByb3BzLmluaXRpYWxMb2dpbk1ldGhvZCA6IG51bGwpO1xuICB9O1xuXG4gIGNvbnN0IGJhY2tUb0xvZ2luQ2hvb3NlciA9ICgpID0+IHtcbiAgICBpZiAocHJvcHMucG9zdFNldHVwRmxvdykgc2V0TG9naW5NZXRob2QoJ2dlbmVyYXRlJyk7XG4gICAgZWxzZSBzZXRMb2dpbk1ldGhvZChwcm9wcy5pbml0aWFsTG9naW5NZXRob2QgIT0gbnVsbCA/IHByb3BzLmluaXRpYWxMb2dpbk1ldGhvZCA6IG51bGwpO1xuICB9O1xuXG4gIC8vIERlcml2ZSBsb2NrIHN0YXRlOiBwYXNzd29yZC1wcm90ZWN0ZWQgb3IgcGxhaW50ZXh0LW9uLWRpc2sgYXdhaXRpbmcgdW5sb2NrIChubyBzaWduaW5nIGtleSBpbiBtZW1vcnkpLlxuICBjb25zdCBpc0xvY2tlZCA9ICEhKGxvY2FsSWRlbnRpdHkgJiYgbG9jYWxJZGVudGl0eS5pZCAmJiBsb2NhbElkZW50aXR5LnhwdWIgJiZcbiAgICAhbG9jYWxJZGVudGl0eS54cHJ2ICYmXG4gICAgISEobG9jYWxJZGVudGl0eS5wYXNzd29yZFByb3RlY3RlZCB8fCBsb2NhbElkZW50aXR5LnBsYWludGV4dFVubG9ja0F2YWlsYWJsZSkpO1xuXG4gIGNvbnN0IHByZXZIYWRTaWduaW5nS2V5UmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXMgPSAhIShsb2NhbElkZW50aXR5ICYmIGxvY2FsSWRlbnRpdHkueHBydik7XG4gICAgaWYgKHByZXZIYWRTaWduaW5nS2V5UmVmLmN1cnJlbnQgJiYgIWhhcykge1xuICAgICAgc2V0VW5sb2NrUGFzc3dvcmQoJycpO1xuICAgIH1cbiAgICBwcmV2SGFkU2lnbmluZ0tleVJlZi5jdXJyZW50ID0gaGFzO1xuICB9LCBbbG9jYWxJZGVudGl0eV0pO1xuXG4gIC8vIEF1dG9tYXRpY2FsbHkgcmUtbG9jayBhZnRlciB0aW1lb3V0IOKAlCBwYXNzd29yZCBpZGVudGl0aWVzIGFuZCBwbGFpbnRleHQtZGVyaXZlZCBpZGVudGl0aWVzIGFsaWtlLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9jYWxJZGVudGl0eSB8fCAhbG9jYWxJZGVudGl0eS54cHJ2IHx8ICFsb2NrVGltZW91dE1zKSByZXR1cm47XG4gICAgY29uc3Qgc2hvdWxkVGltZWRSZWxvY2sgPSAhIShsb2NhbElkZW50aXR5LnBhc3N3b3JkUHJvdGVjdGVkIHx8IGxvY2FsSWRlbnRpdHkucGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlKTtcbiAgICBpZiAoIXNob3VsZFRpbWVkUmVsb2NrKSByZXR1cm47XG5cbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0TG9jYWxJZGVudGl0eSgocHJldikgPT4ge1xuICAgICAgICBpZiAoIXByZXYgfHwgIXByZXYueHBydikgcmV0dXJuIHByZXY7XG4gICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLnByZXYsIHhwcnY6IG51bGwgfTtcbiAgICAgICAgaWYgKHByZXYuZmFicmljSWRlbnRpdHlNb2RlID09PSAnYWNjb3VudCcpIHtcbiAgICAgICAgICBuZXh0Lm1hc3RlclhwcnYgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcHJldi5wYXNzd29yZFByb3RlY3RlZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSByZWFkU3RvcmFnZUpTT04oJ2ZhYnJpYy5pZGVudGl0eS5sb2NhbCcsIG51bGwpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCAmJiBmYWJyaWNQbGFpbnRleHRTaWduaW5nVW5sb2NrYWJsZShwYXJzZWQpKSBuZXh0LnBsYWludGV4dFVubG9ja0F2YWlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgIH0pO1xuICAgIH0sIGxvY2tUaW1lb3V0TXMpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgfTtcbiAgfSwgW2xvY2FsSWRlbnRpdHkgJiYgbG9jYWxJZGVudGl0eS54cHJ2LCBsb2NrVGltZW91dE1zXSk7XG5cbiAgZnVuY3Rpb24gaWRlbnRpdHlBbmNob3JLZXkgKGkpIHtcbiAgICBpZiAoIWkgfHwgKCFpLmlkICYmICFpLnhwdWIpKSByZXR1cm4gJyc7XG4gICAgY29uc3QgYWNjdCA9IGkuZmFicmljQWNjb3VudEluZGV4ICE9IG51bGwgJiYgaS5mYWJyaWNBY2NvdW50SW5kZXggIT09ICcnXG4gICAgICA/IFN0cmluZyhNYXRoLmZsb29yKE51bWJlcihpLmZhYnJpY0FjY291bnRJbmRleCkpKVxuICAgICAgOiAnJztcbiAgICBjb25zdCBtb2RlID0gaS5mYWJyaWNJZGVudGl0eU1vZGUgPyBTdHJpbmcoaS5mYWJyaWNJZGVudGl0eU1vZGUpIDogJyc7XG4gICAgY29uc3QgaGQgPSBpLmZhYnJpY0hkUm9sZSA/IFN0cmluZyhpLmZhYnJpY0hkUm9sZSkgOiAnJztcbiAgICByZXR1cm4gYCR7U3RyaW5nKGkuaWQgfHwgJycpfXwke1N0cmluZyhpLnhwdWIgfHwgJycpfXwke2kucGFzc3dvcmRQcm90ZWN0ZWQgPyAnMScgOiAnMCd9fCR7aS5wbGFpbnRleHRVbmxvY2tBdmFpbGFibGUgPyAnMScgOiAnMCd9fCR7aS5saW5rZWRGcm9tRGVza3RvcCA/ICcxJyA6ICcwJ318JHttb2RlfXwke2FjY3R9fCR7aGR9YDtcbiAgfVxuXG4gIC8vIEFuY2hvciBrZXkgb25seSAobm8geHBydik6IGF2b2lkIGxvY2FsPC0+cGFyZW50IGxvY2svdW5sb2NrIGVjaG8gbG9vcHMgdGhhdCBjYW4gZmxpY2tlciB0aGUgbW9kYWwuXG4gIGNvbnN0IHBhcmVudElkZW50aXR5S2V5ID0gaWRlbnRpdHlBbmNob3JLZXkocHJvcHMuY3VycmVudElkZW50aXR5KTtcblxuICAvLyBLZWVwIG1vZGFsIHN0YXRlIGFsaWduZWQgd2l0aCBIdWIgc2hlbGwgd2hlbiBwYXJlbnQgaWRlbnRpdHkgY2hhbmdlcyAoZm9yZ2V0LCBkZXNrdG9wIGxpbmssIGV0Yy4pLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHAgPSBwcm9wcy5jdXJyZW50SWRlbnRpdHk7XG4gICAgaWYgKCFwIHx8ICghcC5pZCAmJiAhcC54cHViKSkge1xuICAgICAgc2V0TG9jYWxJZGVudGl0eSgocHJldikgPT4gKHByZXYgPyBudWxsIDogcHJldikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRMb2NhbElkZW50aXR5KChwcmV2KSA9PiB7XG4gICAgICBpZiAoaWRlbnRpdHlBbmNob3JLZXkocHJldikgPT09IGlkZW50aXR5QW5jaG9yS2V5KHApKSB7XG4gICAgICAgIGNvbnN0IHByZXZIYXNYcHJ2ID0gISEocHJldiAmJiBwcmV2LnhwcnYpO1xuICAgICAgICBjb25zdCBwYXJlbnRIYXNYcHJ2ID0gISFwLnhwcnY7XG4gICAgICAgIGNvbnN0IG5lZWRzS2V5RmxvdyA9ICEhKFxuICAgICAgICAgIChwICYmIHAucGFzc3dvcmRQcm90ZWN0ZWQpIHx8XG4gICAgICAgICAgKHByZXYgJiYgcHJldi5wYXNzd29yZFByb3RlY3RlZCkgfHxcbiAgICAgICAgICAocCAmJiBwLnBsYWludGV4dFVubG9ja0F2YWlsYWJsZSkgfHxcbiAgICAgICAgICAocHJldiAmJiBwcmV2LnBsYWludGV4dFVubG9ja0F2YWlsYWJsZSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFuZWVkc0tleUZsb3cgfHwgcHJldkhhc1hwcnYgPT09IHBhcmVudEhhc1hwcnYpIHJldHVybiBwcmV2O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHAuaWQsXG4gICAgICAgIHhwdWI6IHAueHB1YixcbiAgICAgICAgeHBydjogcC54cHJ2IHx8IG51bGwsXG4gICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiAhIXAucGFzc3dvcmRQcm90ZWN0ZWQsXG4gICAgICAgIHBsYWludGV4dFVubG9ja0F2YWlsYWJsZTogISFwLnBsYWludGV4dFVubG9ja0F2YWlsYWJsZSxcbiAgICAgICAgbGlua2VkRnJvbURlc2t0b3A6ICEhcC5saW5rZWRGcm9tRGVza3RvcCxcbiAgICAgICAgZmFicmljSWRlbnRpdHlNb2RlOiBwLmZhYnJpY0lkZW50aXR5TW9kZSB8fCBudWxsLFxuICAgICAgICBmYWJyaWNBY2NvdW50SW5kZXg6IHAuZmFicmljQWNjb3VudEluZGV4ICE9IG51bGwgPyBNYXRoLmZsb29yKE51bWJlcihwLmZhYnJpY0FjY291bnRJbmRleCkpIDogdW5kZWZpbmVkLFxuICAgICAgICBmYWJyaWNIZFJvbGU6IHAuZmFicmljSGRSb2xlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgbWFzdGVyWHBydjogcC5tYXN0ZXJYcHJ2IHx8IG51bGwsXG4gICAgICAgIG1hc3RlclhwdWI6IHAubWFzdGVyWHB1YiB8fCBudWxsXG4gICAgICB9O1xuICAgIH0pO1xuICB9LCBbcGFyZW50SWRlbnRpdHlLZXldKTtcblxuICBjb25zdCBvbkxvY2FsSWRlbnRpdHlDaGFuZ2VSZWYgPSBSZWFjdC51c2VSZWYocHJvcHMub25Mb2NhbElkZW50aXR5Q2hhbmdlKTtcbiAgY29uc3Qgb25Mb2NrU3RhdGVDaGFuZ2VSZWYgPSBSZWFjdC51c2VSZWYocHJvcHMub25Mb2NrU3RhdGVDaGFuZ2UpO1xuICBSZWFjdC51c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIG9uTG9jYWxJZGVudGl0eUNoYW5nZVJlZi5jdXJyZW50ID0gcHJvcHMub25Mb2NhbElkZW50aXR5Q2hhbmdlO1xuICAgIG9uTG9ja1N0YXRlQ2hhbmdlUmVmLmN1cnJlbnQgPSBwcm9wcy5vbkxvY2tTdGF0ZUNoYW5nZTtcbiAgfSk7XG5cbiAgLy8gTm90aWZ5IHBhcmVudCB3aGVuIHRoZSBsb2NhbCBpZGVudGl0eSBjaGFuZ2VzIHNvIG91dGVyIFVJIChUb3BQYW5lbCkgYW5kIEJyaWRnZSBjYW4gdXBkYXRlLlxuICAvLyBJbmNsdWRlIHhwcnYgd2hlbiBhdmFpbGFibGUgc28gQnJpZGdlIGNhbiBlbmNyeXB0IGRvY3VtZW50cy5cbiAgLy8gQ2FsbGJhY2sgcmVmIGF2b2lkcyBhIHJlbmRlciBsb29wIHdoZW4gdGhlIHBhcmVudCBwYXNzZXMgYW4gaW5saW5lIGZ1bmN0aW9uIHRoYXQgY2hhbmdlcyBldmVyeSByZW5kZXIuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY2IgPSBvbkxvY2FsSWRlbnRpdHlDaGFuZ2VSZWYuY3VycmVudDtcbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG4gICAgaWYgKGxvY2FsSWRlbnRpdHkgJiYgbG9jYWxJZGVudGl0eS5pZCAmJiBsb2NhbElkZW50aXR5LnhwdWIpIHtcbiAgICAgIGNvbnN0IHB3ID0gISFsb2NhbElkZW50aXR5LnBhc3N3b3JkUHJvdGVjdGVkO1xuICAgICAgY29uc3QgcGxhaW5BdmFpbCA9ICEhKFxuICAgICAgICBsb2NhbElkZW50aXR5LnBsYWludGV4dFVubG9ja0F2YWlsYWJsZSAmJlxuICAgICAgICAhbG9jYWxJZGVudGl0eS54cHJ2ICYmXG4gICAgICAgICFwd1xuICAgICAgKTtcbiAgICAgIGNiKHtcbiAgICAgICAgaWQ6IGxvY2FsSWRlbnRpdHkuaWQsXG4gICAgICAgIHhwdWI6IGxvY2FsSWRlbnRpdHkueHB1YixcbiAgICAgICAgeHBydjogbG9jYWxJZGVudGl0eS54cHJ2IHx8IHVuZGVmaW5lZCxcbiAgICAgICAgcGFzc3dvcmRQcm90ZWN0ZWQ6IHB3LFxuICAgICAgICAuLi4ocGxhaW5BdmFpbCA/IHsgcGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlOiB0cnVlIH0gOiB7fSksXG4gICAgICAgIC4uLihsb2NhbElkZW50aXR5LmZhYnJpY0lkZW50aXR5TW9kZSA/IHsgZmFicmljSWRlbnRpdHlNb2RlOiBsb2NhbElkZW50aXR5LmZhYnJpY0lkZW50aXR5TW9kZSB9IDoge30pLFxuICAgICAgICAuLi4obG9jYWxJZGVudGl0eS5mYWJyaWNBY2NvdW50SW5kZXggIT0gbnVsbFxuICAgICAgICAgID8geyBmYWJyaWNBY2NvdW50SW5kZXg6IGxvY2FsSWRlbnRpdHkuZmFicmljQWNjb3VudEluZGV4IH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKGxvY2FsSWRlbnRpdHkuZmFicmljSGRSb2xlID8geyBmYWJyaWNIZFJvbGU6IGxvY2FsSWRlbnRpdHkuZmFicmljSGRSb2xlIH0gOiB7fSksXG4gICAgICAgIC4uLihsb2NhbElkZW50aXR5Lm1hc3RlclhwcnYgPyB7IG1hc3RlclhwcnY6IGxvY2FsSWRlbnRpdHkubWFzdGVyWHBydiB9IDoge30pLFxuICAgICAgICAuLi4obG9jYWxJZGVudGl0eS5tYXN0ZXJYcHViID8geyBtYXN0ZXJYcHViOiBsb2NhbElkZW50aXR5Lm1hc3RlclhwdWIgfSA6IHt9KVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNiKG51bGwpO1xuICAgIH1cbiAgfSwgW2xvY2FsSWRlbnRpdHldKTtcblxuICAvLyBOb3RpZnkgcGFyZW50IHdoZW4gbG9jayBzdGF0ZSBjaGFuZ2VzIHNvIGhlYWRlciBjYW4gc2hvdyBsb2NrIGljb24uXG4gIC8vIE9ubHkgcmVwb3J0IFwibG9ja2VkXCIgd2hlbiB1c2VyIGNhbiB1bmxvY2sgKHBhc3N3b3JkLXByb3RlY3RlZCksIG5vdCBmb3IgeHB1Yi1vbmx5LlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNiID0gb25Mb2NrU3RhdGVDaGFuZ2VSZWYuY3VycmVudDtcbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XG4gICAgY2IoaXNMb2NrZWQpO1xuICB9LCBbaXNMb2NrZWRdKTtcblxuICAvLyBTeW5jIGlkZW50aXR5IHRvIGNocm9tZS5zdG9yYWdlIHdoZW4gcnVubmluZyBpbiBleHRlbnNpb24gcG9wdXAgKGVuYWJsZXMgTG9naW4gd2l0aCBFeHRlbnNpb24gb24gSHViIHBhZ2UpLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGNocm9tZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWNocm9tZS5zdG9yYWdlPy5sb2NhbCB8fCAhY2hyb21lLnJ1bnRpbWU/LmlkKSByZXR1cm47XG4gICAgICBpZiAobG9jYWxJZGVudGl0eSAmJiBsb2NhbElkZW50aXR5LnhwdWIpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICBpZDogbG9jYWxJZGVudGl0eS5pZCxcbiAgICAgICAgICB4cHViOiBsb2NhbElkZW50aXR5LnhwdWIsXG4gICAgICAgICAgcGFzc3dvcmRQcm90ZWN0ZWQ6ICEhbG9jYWxJZGVudGl0eS5wYXNzd29yZFByb3RlY3RlZCxcbiAgICAgICAgICBmYWJyaWNJZGVudGl0eU1vZGU6IGxvY2FsSWRlbnRpdHkuZmFicmljSWRlbnRpdHlNb2RlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBmYWJyaWNBY2NvdW50SW5kZXg6IGxvY2FsSWRlbnRpdHkuZmFicmljQWNjb3VudEluZGV4LFxuICAgICAgICAgIGZhYnJpY0hkUm9sZTogbG9jYWxJZGVudGl0eS5mYWJyaWNIZFJvbGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIG1hc3RlclhwdWI6IGxvY2FsSWRlbnRpdHkubWFzdGVyWHB1YiB8fCB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgY2hyb21lLnN0b3JhZ2UubG9jYWwuc2V0KHsgJ2ZhYnJpYy5pZGVudGl0eS5leHQnOiBwYXlsb2FkIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hyb21lLnN0b3JhZ2UubG9jYWwucmVtb3ZlKCdmYWJyaWMuaWRlbnRpdHkuZXh0Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfSwgW2xvY2FsSWRlbnRpdHldKTtcblxuICBjb25zdCBbZXh0ZW5zaW9uQXZhaWxhYmxlLCBzZXRFeHRlbnNpb25BdmFpbGFibGVdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBkZXNrdG9wUG9sbEludGVydmFsUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChkZXNrdG9wUG9sbEludGVydmFsUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChkZXNrdG9wUG9sbEludGVydmFsUmVmLmN1cnJlbnQpO1xuICAgICAgICBkZXNrdG9wUG9sbEludGVydmFsUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNoZWNrID0gKCkgPT4gc2V0RXh0ZW5zaW9uQXZhaWxhYmxlKCEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5fX0ZBQlJJQ19IVUJfRVhURU5TSU9OX18/LmlzQXZhaWxhYmxlKSk7XG4gICAgY2hlY2soKTtcbiAgICBjb25zdCB0ID0gc2V0VGltZW91dChjaGVjaywgMzAwKTtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHQpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlTG9naW5XaXRoRXh0ZW5zaW9uID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghd2luZG93Ll9fRkFCUklDX0hVQl9FWFRFTlNJT05fXz8uZ2V0SWRlbnRpdHkpIHJldHVybjtcbiAgICBzZXRCdXN5KHRydWUpO1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpZGVudGl0eSA9IGF3YWl0IHdpbmRvdy5fX0ZBQlJJQ19IVUJfRVhURU5TSU9OX18uZ2V0SWRlbnRpdHkoKTtcbiAgICAgIGlmICghaWRlbnRpdHkgfHwgIWlkZW50aXR5LnhwdWIpIHtcbiAgICAgICAgc2V0RXJyb3IoJ05vIGlkZW50aXR5IGZvdW5kIGluIGV4dGVuc2lvbi4gQ3JlYXRlIG9yIHJlc3RvcmUgb25lIGluIHRoZSBGYWJyaWMgSHViIGV4dGVuc2lvbiBwb3B1cCBmaXJzdC4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gRXh0ZW5zaW9uIOKGkiBwYWdlIG9ubHkgZGVsaXZlcnMgd2F0Y2gtb25seSBmaWVsZHMgKHhwdWIgKyBpZCkuIHhwcnYgbmV2ZXIgY3Jvc3NlcyBwb3N0TWVzc2FnZSBpbnRvXG4gICAgICAvLyB0aGUgcGFnZSBKUyByZWFsbTsgaW1wb3J0IG9yIHVubG9jayBhIGZ1bGwga2V5IGhlcmUgd2hlbiB5b3UgbmVlZCBzaWduaW5nIG9yIGRlY3J5cHRpb24uXG4gICAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBjb25zdCB0b1N0b3JlID0geyBpZDogaWRlbnRpdHkuaWQsIHhwdWI6IGlkZW50aXR5LnhwdWIsIHBhc3N3b3JkUHJvdGVjdGVkOiAhIWlkZW50aXR5LnBhc3N3b3JkUHJvdGVjdGVkIH07XG4gICAgICAgICAgd3JpdGVTdG9yYWdlSlNPTignZmFicmljLmlkZW50aXR5LmxvY2FsJywgdG9TdG9yZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICBzZXRMb2NhbElkZW50aXR5KHtcbiAgICAgICAgaWQ6IGlkZW50aXR5LmlkLFxuICAgICAgICB4cHViOiBpZGVudGl0eS54cHViLFxuICAgICAgICB4cHJ2OiBpZGVudGl0eS54cHJ2IHx8IG51bGwsXG4gICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiAhIWlkZW50aXR5LnBhc3N3b3JkUHJvdGVjdGVkXG4gICAgICB9KTtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMub25Mb2NhbElkZW50aXR5Q2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb3BzLm9uTG9jYWxJZGVudGl0eUNoYW5nZSh7XG4gICAgICAgICAgaWQ6IGlkZW50aXR5LmlkLFxuICAgICAgICAgIHhwdWI6IGlkZW50aXR5LnhwdWIsXG4gICAgICAgICAgeHBydjogaWRlbnRpdHkueHBydixcbiAgICAgICAgICBwYXNzd29yZFByb3RlY3RlZDogISFpZGVudGl0eS5wYXNzd29yZFByb3RlY3RlZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChpZGVudGl0eS54cHJ2ICYmIHR5cGVvZiBwcm9wcy5vblVubG9ja1N1Y2Nlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJvcHMub25VbmxvY2tTdWNjZXNzKGlkZW50aXR5KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXRFcnJvcigoZSAmJiBlLm1lc3NhZ2UpID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0QnVzeShmYWxzZSk7XG4gICAgfVxuICB9LCBbcHJvcHMub25Mb2NhbElkZW50aXR5Q2hhbmdlLCBwcm9wcy5vblVubG9ja1N1Y2Nlc3NdKTtcblxuICBjb25zdCBoYW5kbGVMb2dpbldpdGhEZXNrdG9wID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIGlmICh3aW5kb3cuZmFicmljRGVza3RvcCAmJiB3aW5kb3cuZmFicmljRGVza3RvcC5pc0Rlc2t0b3BTaGVsbCkgcmV0dXJuO1xuICAgIGlmIChkZXNrdG9wUG9sbEludGVydmFsUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoZGVza3RvcFBvbGxJbnRlcnZhbFJlZi5jdXJyZW50KTtcbiAgICAgIGRlc2t0b3BQb2xsSW50ZXJ2YWxSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgc2V0RXJyb3IobnVsbCk7XG4gICAgY29uc3Qgb3JpZ2luID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICBsZXQgc2Vzc2lvbklkID0gbnVsbDtcbiAgICBjb25zdCBtYXhBdHRlbXB0cyA9IDM2MDtcbiAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgJHtvcmlnaW59L3Nlc3Npb25zYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IG9yaWdpbiB9KSxcbiAgICAgICAgY2FjaGU6ICduby1zdG9yZSdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcy5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgICBpZiAoIXJlcy5vayB8fCAhZGF0YS5vayB8fCAhZGF0YS5zZXNzaW9uSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKChkYXRhICYmIGRhdGEuZXJyb3IpIHx8ICdDb3VsZCBub3Qgc3RhcnQgZGVza3RvcCBsb2dpbiBzZXNzaW9uJyk7XG4gICAgICB9XG4gICAgICBzZXNzaW9uSWQgPSBkYXRhLnNlc3Npb25JZDtcbiAgICAgIGNvbnN0IHByb3RvY29sVXJsID0gZGF0YS5wcm90b2NvbFVybCB8fCAoYGZhYnJpYzovL2xvZ2luP3Nlc3Npb25JZD0ke2VuY29kZVVSSUNvbXBvbmVudChzZXNzaW9uSWQpfSZodWI9JHtlbmNvZGVVUklDb21wb25lbnQob3JpZ2luKX1gKTtcblxuICAgICAgZGVza3RvcFBvbGxJbnRlcnZhbFJlZi5jdXJyZW50ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBhdHRlbXB0cysrO1xuICAgICAgICBpZiAoYXR0ZW1wdHMgPiBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIGlmIChkZXNrdG9wUG9sbEludGVydmFsUmVmLmN1cnJlbnQpIGNsZWFySW50ZXJ2YWwoZGVza3RvcFBvbGxJbnRlcnZhbFJlZi5jdXJyZW50KTtcbiAgICAgICAgICBkZXNrdG9wUG9sbEludGVydmFsUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgIHNldEJ1c3koZmFsc2UpO1xuICAgICAgICAgIHNldEVycm9yKCdUaW1lZCBvdXQgd2FpdGluZyBmb3IgdGhlIEZhYnJpYyBIdWIgZGVza3RvcCBhcHAuIFN0YXJ0IGl0LCB0aGVuIHRyeSBhZ2Fpbi4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByID0gYXdhaXQgZmV0Y2goYCR7b3JpZ2lufS9zZXNzaW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChzZXNzaW9uSWQpfWAsIHtcbiAgICAgICAgICAgICAgaGVhZGVyczogeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgICAgICAgICBjYWNoZTogJ25vLXN0b3JlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBqID0gYXdhaXQgci5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7XG4gICAgICAgICAgICBpZiAoci5zdGF0dXMgPT09IDQwMykge1xuICAgICAgICAgICAgICBpZiAoZGVza3RvcFBvbGxJbnRlcnZhbFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChkZXNrdG9wUG9sbEludGVydmFsUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIGRlc2t0b3BQb2xsSW50ZXJ2YWxSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2V0QnVzeShmYWxzZSk7XG4gICAgICAgICAgICAgIHNldEVycm9yKChqICYmIGouZXJyb3IpID8gU3RyaW5nKGouZXJyb3IpIDogJ0h1YiByZWplY3RlZCB0aGlzIGxvZ2luIHNlc3Npb24gKGNoZWNrIG9yaWdpbiAvIHByb3h5IGhlYWRlcnMpLicpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWoub2sgfHwgai5zdGF0dXMgIT09ICdzaWduZWQnIHx8ICFqLmlkZW50aXR5KSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBsb2dpblZlcmlmeSA9IHZlcmlmeUZhYnJpY0Rlc2t0b3BMb2dpblNpZ25lZFBheWxvYWQoaiwgeyBzZXNzaW9uSWQsIG9yaWdpbiB9KTtcbiAgICAgICAgICAgIGlmICghbG9naW5WZXJpZnkub2spIHtcbiAgICAgICAgICAgICAgaWYgKGRlc2t0b3BQb2xsSW50ZXJ2YWxSZWYuY3VycmVudCkgY2xlYXJJbnRlcnZhbChkZXNrdG9wUG9sbEludGVydmFsUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgICBkZXNrdG9wUG9sbEludGVydmFsUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgICAgc2V0RXJyb3IobG9naW5WZXJpZnkuZXJyb3IgfHwgJ0Rlc2t0b3AgbG9naW4gdmVyaWZpY2F0aW9uIGZhaWxlZC4nKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlc2t0b3BQb2xsSW50ZXJ2YWxSZWYuY3VycmVudCkgY2xlYXJJbnRlcnZhbChkZXNrdG9wUG9sbEludGVydmFsUmVmLmN1cnJlbnQpO1xuICAgICAgICAgICAgZGVza3RvcFBvbGxJbnRlcnZhbFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChqLmRlbGVnYXRpb25Ub2tlbikge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RvcmFnZUpTT04oREVMRUdBVElPTl9TVE9SQUdFX0tFWSwge1xuICAgICAgICAgICAgICAgICAgdG9rZW46IGouZGVsZWdhdGlvblRva2VuLFxuICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxTaWduaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgaHViT3JpZ2luOiBvcmlnaW4sXG4gICAgICAgICAgICAgICAgICBsaW5rZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbm90aWZ5RGVsZWdhdGlvblN0b3JhZ2VDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB4cHViID0gai5pZGVudGl0eS54cHViO1xuICAgICAgICAgICAgY29uc3QgcmlkID0gai5pZGVudGl0eS5pZDtcbiAgICAgICAgICAgIGlmICgheHB1YikgdGhyb3cgbmV3IEVycm9yKCdIdWIgZGlkIG5vdCByZXR1cm4geHB1YicpO1xuICAgICAgICAgICAgY29uc3QgayA9IG5ldyBLZXkoeyB4cHViIH0pO1xuICAgICAgICAgICAgY29uc3QgaWRlbnQgPSBuZXcgSWRlbnRpdHkoayk7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZElkID0gcmlkICE9IG51bGwgPyBTdHJpbmcocmlkKSA6IFN0cmluZyhpZGVudC5pZCk7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0geyBpZDogcmVzb2x2ZWRJZCwgeHB1YiwgbGlua2VkRnJvbURlc2t0b3A6IHRydWUgfTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHdyaXRlU3RvcmFnZUpTT04oJ2ZhYnJpYy5pZGVudGl0eS5sb2NhbCcsIHBheWxvYWQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgIG1lcmdlTGlua2VkRGV2aWNlKHtcbiAgICAgICAgICAgICAga2luZDogJ2ZhYnJpYy1kZXNrdG9wJyxcbiAgICAgICAgICAgICAgaHViT3JpZ2luOiBvcmlnaW4sXG4gICAgICAgICAgICAgIGZhYnJpY0lkOiByZXNvbHZlZElkLFxuICAgICAgICAgICAgICBsaW5rZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICBsYWJlbDogJ0ZhYnJpYyBIdWIgKGRlc2t0b3ApJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRMaW5rZWREZXZpY2VzUmV2KChuKSA9PiBuICsgMSk7XG4gICAgICAgICAgICBzZXRMb2NhbElkZW50aXR5KHtcbiAgICAgICAgICAgICAgaWQ6IHJlc29sdmVkSWQsXG4gICAgICAgICAgICAgIHhwdWIsXG4gICAgICAgICAgICAgIHhwcnY6IG51bGwsXG4gICAgICAgICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgbGlua2VkRnJvbURlc2t0b3A6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vbkxvY2FsSWRlbnRpdHlDaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgcHJvcHMub25Mb2NhbElkZW50aXR5Q2hhbmdlKHtcbiAgICAgICAgICAgICAgICBpZDogcmVzb2x2ZWRJZCxcbiAgICAgICAgICAgICAgICB4cHViLFxuICAgICAgICAgICAgICAgIHhwcnY6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwYXNzd29yZFByb3RlY3RlZDogZmFsc2VcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3BzLm9uVW5sb2NrU3VjY2VzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBwcm9wcy5vblVubG9ja1N1Y2Nlc3Moe1xuICAgICAgICAgICAgICAgIGlkOiByZXNvbHZlZElkLFxuICAgICAgICAgICAgICAgIHhwdWIsXG4gICAgICAgICAgICAgICAgeHBydjogbnVsbCxcbiAgICAgICAgICAgICAgICBwYXNzd29yZFByb3RlY3RlZDogZmFsc2VcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChkZXNrdG9wUG9sbEludGVydmFsUmVmLmN1cnJlbnQpIGNsZWFySW50ZXJ2YWwoZGVza3RvcFBvbGxJbnRlcnZhbFJlZi5jdXJyZW50KTtcbiAgICAgICAgICAgIGRlc2t0b3BQb2xsSW50ZXJ2YWxSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgIHNldEVycm9yKChlcnIgJiYgZXJyLm1lc3NhZ2UpID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgfSwgNjAwKTtcblxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGEuaHJlZiA9IHByb3RvY29sVXJsO1xuICAgICAgYS5yZWwgPSAnbm9vcGVuZXIgbm9yZWZlcnJlcic7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICAgICAgYS5jbGljaygpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZGVza3RvcFBvbGxJbnRlcnZhbFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoZGVza3RvcFBvbGxJbnRlcnZhbFJlZi5jdXJyZW50KTtcbiAgICAgICAgZGVza3RvcFBvbGxJbnRlcnZhbFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHNldEVycm9yKChlICYmIGUubWVzc2FnZSkgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICAgICAgc2V0QnVzeShmYWxzZSk7XG4gICAgfVxuICB9LCBbcHJvcHMub25Mb2NhbElkZW50aXR5Q2hhbmdlLCBwcm9wcy5vblVubG9ja1N1Y2Nlc3NdKTtcblxuICBjb25zdCBjbGVhckRldmljZUxpbmtQb2xsID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChkZXZpY2VMaW5rUG9sbFJlZi5jdXJyZW50KSB7XG4gICAgICBjbGVhckludGVydmFsKGRldmljZUxpbmtQb2xsUmVmLmN1cnJlbnQpO1xuICAgICAgZGV2aWNlTGlua1BvbGxSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+ICgpID0+IGNsZWFyRGV2aWNlTGlua1BvbGwoKSwgW2NsZWFyRGV2aWNlTGlua1BvbGxdKTtcblxuICAvKipcbiAgICogU3RhcnQgYSBtdXR1YWwgZGV2aWNlLWxpbmsgb2ZmZXIgKHRoaXMgYnJvd3NlciBpcyBpbml0aWF0b3IpLiBQZWVyIG9wZW5zXG4gICAqIGZhYnJpYzovL2xpbmsgKFBhc3Nwb3J0IC8gYW5vdGhlciBIdWIgLyBwZWVyIGFwcCkgYXMgcmVzcG9uZGVyOyB3ZSBjb3VudGVyc2lnbi5cbiAgICovXG4gIGNvbnN0IGhhbmRsZUNyZWF0ZURldmljZUxpbmsgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgaWYgKCFsb2NhbElkZW50aXR5IHx8ICFsb2NhbElkZW50aXR5LnhwcnYgfHwgIWxvY2FsSWRlbnRpdHkueHB1Yikge1xuICAgICAgc2V0RXJyb3IoJ1VubG9jayB5b3VyIEZhYnJpYyBpZGVudGl0eSAoZnVsbCBrZXkpIGJlZm9yZSBsaW5raW5nIGFub3RoZXIgZGV2aWNlLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjbGVhckRldmljZUxpbmtQb2xsKCk7XG4gICAgc2V0RGV2aWNlTGlua0J1c3kodHJ1ZSk7XG4gICAgc2V0RXJyb3IobnVsbCk7XG4gICAgY29uc3Qgb3JpZ2luID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICBjb25zdCBsYWJlbCA9ICdIdWIgYnJvd3Nlcic7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGtleSA9IG5ldyBLZXkoeyB4cHJ2OiBsb2NhbElkZW50aXR5LnhwcnYgfSk7XG4gICAgICBjb25zdCBzaWduZWRQcm9iZSA9IGJ1aWxkRmFicmljSWRlbnRpdHlTaWduZWRQYXlsb2FkKGtleSwgJ2ZhYnJpYzpkZXZpY2UtbGluazppZC1wcm9iZScpO1xuICAgICAgY29uc3QgaWRlbnRJZCA9IGxvY2FsSWRlbnRpdHkuaWQgfHwgc2lnbmVkUHJvYmUuaWRlbnRpdHkuaWQ7XG4gICAgICBjb25zdCBub25jZSA9IEFycmF5LmZyb20oY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgzMikpKVxuICAgICAgICAubWFwKChiKSA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKVxuICAgICAgICAuam9pbignJyk7XG4gICAgICBjb25zdCBvZmZlck1lc3NhZ2UgPSBidWlsZERldmljZUxpbmtPZmZlck1lc3NhZ2Uobm9uY2UsIGlkZW50SWQsIGxhYmVsLCBvcmlnaW4pO1xuICAgICAgY29uc3Qgb2ZmZXJTaWduZWQgPSBidWlsZEZhYnJpY0lkZW50aXR5U2lnbmVkUGF5bG9hZChrZXksIG9mZmVyTWVzc2FnZSk7XG4gICAgICBjb25zdCBjcmVhdGVkID0gYXdhaXQgY3JlYXRlRGV2aWNlTGlua09mZmVyKHtcbiAgICAgICAgaHViQmFzZTogb3JpZ2luLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBub25jZSxcbiAgICAgICAgaWRlbnRpdHk6IG9mZmVyU2lnbmVkLmlkZW50aXR5LFxuICAgICAgICBwdWJrZXlIZXg6IG9mZmVyU2lnbmVkLnB1YmtleUhleCxcbiAgICAgICAgc2lnbmF0dXJlOiBvZmZlclNpZ25lZC5zaWduYXR1cmVcbiAgICAgIH0pO1xuICAgICAgaWYgKCFjcmVhdGVkLm9rKSB7XG4gICAgICAgIHNldEVycm9yKGNyZWF0ZWQuZXJyb3IgfHwgJ0NvdWxkIG5vdCBjcmVhdGUgZGV2aWNlIGxpbmsgb2ZmZXInKTtcbiAgICAgICAgc2V0RGV2aWNlTGlua0J1c3koZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXREZXZpY2VMaW5rT2ZmZXIoe1xuICAgICAgICBzZXNzaW9uSWQ6IGNyZWF0ZWQuc2Vzc2lvbklkLFxuICAgICAgICBwcm90b2NvbFVybDogY3JlYXRlZC5wcm90b2NvbFVybCxcbiAgICAgICAgbGFiZWxcbiAgICAgIH0pO1xuICAgICAgbGV0IGF0dGVtcHRzID0gMDtcbiAgICAgIGRldmljZUxpbmtQb2xsUmVmLmN1cnJlbnQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGF0dGVtcHRzICs9IDE7XG4gICAgICAgIGlmIChhdHRlbXB0cyA+IDI0MCkge1xuICAgICAgICAgIGNsZWFyRGV2aWNlTGlua1BvbGwoKTtcbiAgICAgICAgICBzZXREZXZpY2VMaW5rQnVzeShmYWxzZSk7XG4gICAgICAgICAgc2V0RXJyb3IoJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0aGUgb3RoZXIgZGV2aWNlIHRvIGFwcHJvdmUgdGhlIGxpbmsuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc3QgPSBhd2FpdCBmZXRjaERldmljZUxpbmtTZXNzaW9uKG9yaWdpbiwgY3JlYXRlZC5zZXNzaW9uSWQsIHsgb3JpZ2luIH0pO1xuICAgICAgICAgICAgaWYgKCFzdC5vaykgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHN0LnN0YXR1cyA9PT0gJ2FjY2VwdGVkJyAmJiBzdC5saW5rTWVzc2FnZSkge1xuICAgICAgICAgICAgICBjb25zdCBjb3VudGVyc2lnbmVkID0gYnVpbGRGYWJyaWNJZGVudGl0eVNpZ25lZFBheWxvYWQoa2V5LCBzdC5saW5rTWVzc2FnZSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRvbmUgPSBhd2FpdCBwb3N0RGV2aWNlTGlua1NpZ25hdHVyZShvcmlnaW4sIGNyZWF0ZWQuc2Vzc2lvbklkLCB7XG4gICAgICAgICAgICAgICAgcm9sZTogJ2luaXRpYXRvcicsXG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlOiBjb3VudGVyc2lnbmVkLnNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICBwdWJrZXlIZXg6IGNvdW50ZXJzaWduZWQucHVia2V5SGV4LFxuICAgICAgICAgICAgICAgIGlkZW50aXR5OiBjb3VudGVyc2lnbmVkLmlkZW50aXR5XG4gICAgICAgICAgICAgIH0sIHsgb3JpZ2luIH0pO1xuICAgICAgICAgICAgICBpZiAoIWRvbmUub2spIHtcbiAgICAgICAgICAgICAgICBjbGVhckRldmljZUxpbmtQb2xsKCk7XG4gICAgICAgICAgICAgICAgc2V0RGV2aWNlTGlua0J1c3koZmFsc2UpO1xuICAgICAgICAgICAgICAgIHNldEVycm9yKGRvbmUuZXJyb3IgfHwgJ0NvdW50ZXJzaWduIGZhaWxlZCcpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZG9uZS5zdGF0dXMgPT09ICdsaW5rZWQnICYmIGRvbmUucmVzcG9uZGVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJEZXZpY2VMaW5rUG9sbCgpO1xuICAgICAgICAgICAgICAgIG1lcmdlTGlua2VkRGV2aWNlKHtcbiAgICAgICAgICAgICAgICAgIGtpbmQ6ICdkZXZpY2UtbGluaycsXG4gICAgICAgICAgICAgICAgICBwZWVyRmFicmljSWQ6IGRvbmUucmVzcG9uZGVyLmlkLFxuICAgICAgICAgICAgICAgICAgcGVlclhwdWI6IGRvbmUucmVzcG9uZGVyLnhwdWIsXG4gICAgICAgICAgICAgICAgICBwZWVyUHVia2V5OiBkb25lLnJlc3BvbmRlci5wdWJrZXlIZXgsXG4gICAgICAgICAgICAgICAgICBub25jZTogc3Qubm9uY2UgfHwgY3JlYXRlZC5ub25jZSxcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiBkb25lLmxhYmVsIHx8IHN0LmxhYmVsIHx8ICdMaW5rZWQgZGV2aWNlJyxcbiAgICAgICAgICAgICAgICAgIGh1Yk9yaWdpbjogb3JpZ2luLFxuICAgICAgICAgICAgICAgICAgbGlua2VkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIHJvbGU6ICdpbml0aWF0b3InXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2V0TGlua2VkRGV2aWNlc1JldigobikgPT4gbiArIDEpO1xuICAgICAgICAgICAgICAgIHZvaWQgcHVibGlzaEh1YklkZW50aXR5Q3Jvc3NTaWduKFxuICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgZG9uZS5yZXNwb25kZXIucHVia2V5SGV4LFxuICAgICAgICAgICAgICAgICAgc3Qubm9uY2UgfHwgY3JlYXRlZC5ub25jZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgc2V0RGV2aWNlTGlua09mZmVyKG51bGwpO1xuICAgICAgICAgICAgICAgIHNldERldmljZUxpbmtCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3Quc3RhdHVzID09PSAnbGlua2VkJyAmJiBzdC5yZXNwb25kZXIpIHtcbiAgICAgICAgICAgICAgY2xlYXJEZXZpY2VMaW5rUG9sbCgpO1xuICAgICAgICAgICAgICBtZXJnZUxpbmtlZERldmljZSh7XG4gICAgICAgICAgICAgICAga2luZDogJ2RldmljZS1saW5rJyxcbiAgICAgICAgICAgICAgICBwZWVyRmFicmljSWQ6IHN0LnJlc3BvbmRlci5pZCxcbiAgICAgICAgICAgICAgICBwZWVyWHB1Yjogc3QucmVzcG9uZGVyLnhwdWIsXG4gICAgICAgICAgICAgICAgcGVlclB1YmtleTogc3QucmVzcG9uZGVyLnB1YmtleUhleCxcbiAgICAgICAgICAgICAgICBub25jZTogc3Qubm9uY2UsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHN0LmxhYmVsIHx8ICdMaW5rZWQgZGV2aWNlJyxcbiAgICAgICAgICAgICAgICBodWJPcmlnaW46IG9yaWdpbixcbiAgICAgICAgICAgICAgICBsaW5rZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHJvbGU6ICdpbml0aWF0b3InXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBzZXRMaW5rZWREZXZpY2VzUmV2KChuKSA9PiBuICsgMSk7XG4gICAgICAgICAgICAgIHZvaWQgcHVibGlzaEh1YklkZW50aXR5Q3Jvc3NTaWduKGtleSwgc3QucmVzcG9uZGVyLnB1YmtleUhleCwgc3Qubm9uY2UpO1xuICAgICAgICAgICAgICBzZXREZXZpY2VMaW5rT2ZmZXIobnVsbCk7XG4gICAgICAgICAgICAgIHNldERldmljZUxpbmtCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8qIGtlZXAgcG9sbGluZyAqL1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcbiAgICAgIH0sIDE1MDApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldEVycm9yKChlICYmIGUubWVzc2FnZSkgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICAgICAgc2V0RGV2aWNlTGlua0J1c3koZmFsc2UpO1xuICAgIH1cbiAgfSwgW2xvY2FsSWRlbnRpdHksIGNsZWFyRGV2aWNlTGlua1BvbGxdKTtcblxuICBjb25zdCBoYW5kbGVSZXZva2VMaW5rZWREZXZpY2UgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoZGV2aWNlKSA9PiB7XG4gICAgaWYgKCFkZXZpY2UpIHJldHVybjtcbiAgICBzZXRFcnJvcihudWxsKTtcbiAgICBsZXQga2V5ID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgaWYgKGxvY2FsSWRlbnRpdHkgJiYgbG9jYWxJZGVudGl0eS54cHJ2KSBrZXkgPSBuZXcgS2V5KHsgeHBydjogbG9jYWxJZGVudGl0eS54cHJ2IH0pO1xuICAgIH0gY2F0Y2ggKF8pIHsga2V5ID0gbnVsbDsgfVxuICAgIGNvbnN0IHIgPSBhd2FpdCByZXZva2VMaW5rZWREZXZpY2UoZGV2aWNlLCBrZXkpO1xuICAgIGlmICghci5vaykge1xuICAgICAgc2V0RXJyb3Ioci5lcnJvciB8fCAnQ291bGQgbm90IHJldm9rZSBkZXZpY2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0TGlua2VkRGV2aWNlc1JldigobikgPT4gbiArIDEpO1xuICB9LCBbbG9jYWxJZGVudGl0eV0pO1xuXG4gIGNvbnN0IHBsYWludGV4dEtleU1hdGVyaWFsT25EaXNrID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHJlYWRTdG9yYWdlSlNPTignZmFicmljLmlkZW50aXR5LmxvY2FsJywgbnVsbCk7XG4gICAgICByZXR1cm4gISEocGFyc2VkICYmIGZhYnJpY1BsYWludGV4dFNpZ25pbmdVbmxvY2thYmxlKHBhcnNlZCkpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIFtsb2NhbElkZW50aXR5ICYmIGxvY2FsSWRlbnRpdHkueHB1Yl0pO1xuXG4gIGNvbnN0IHNob3dGYWJyaWNIdWJBZG1pbk5vdGljZSA9ICEhcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3Nlcihwcm9wcy5odWJBZG1pblRva2VuKSAmJlxuICAgIChwcm9wcy5wb3N0U2V0dXBGbG93IHx8IHJlYWRTdG9yYWdlU3RyaW5nKCdmYWJyaWMuaHViLmlkZW50aXR5V2l6YXJkUGVuZGluZycpID09PSAnMScpO1xuXG4gIHJldHVybiAoXG4gICAgPFNlZ21lbnQgYmFzaWMgc3R5bGU9e3sgbWluV2lkdGg6IDAsIG1heFdpZHRoOiAnMTAwJScgfX0+XG4gICAgICA8SGVhZGVyIGFzPVwiaDNcIiBpZD1cImZhYnJpYy1pZGVudGl0eS1tb2RhbC1oZWFkaW5nXCI+XG4gICAgICAgIDxJY29uIG5hbWU9XCJrZXlcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+RmFicmljIElkZW50aXR5PC9IZWFkZXIuQ29udGVudD5cbiAgICAgIDwvSGVhZGVyPlxuICAgICAge3Nob3dGYWJyaWNIdWJBZG1pbk5vdGljZSA/IChcbiAgICAgICAgPEZhYnJpY0h1YkFkbWluVG9rZW5Ob3RpY2UgY29tcGFjdD17IXByb3BzLnBvc3RTZXR1cEZsb3d9IC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpblRvcDogJzAuMjVlbScsIG1hcmdpbkJvdHRvbTogJzAuNzVlbScsIG1heFdpZHRoOiAnNDJlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgIHtwcm9wcy5wb3N0U2V0dXBGbG93ID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICBDcmVhdGUgb3IgcmVzdG9yZSBrZXlzIGZvciB0aGlzIGJyb3dzZXIuIFdlIHVzZSBGYWJyaWMgPHN0cm9uZz5CSVA0NCBhY2NvdW50ICMwPC9zdHJvbmc+IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIChkZXJpdmVkIGZyb20geW91ciBIRCBtYXN0ZXIpOyB5b3UgY2FuIHN3aXRjaCBhY2NvdW50cyBsYXRlciBmcm9tIHRoZSBpZGVudGl0eSBtZW51IHdpdGhvdXQgcmVsb2FkaW5nIGEgbmV3IG1uZW1vbmljLlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICBUaGUgdG9wLWJhciA8c3Ryb25nPldhbGxldDwvc3Ryb25nPiBjaGlwLCBCaXRjb2luIHJlY2VpdmUgYWRkcmVzc2VzLCBhbmR7JyAnfVxuICAgICAgICAgICAgPExpbmsgdG89XCIvZG9jdW1lbnRzXCI+ZG9jdW1lbnQ8L0xpbms+IGZsb3dzIChlbmNyeXB0LCBwdWJsaXNoLCBwYWlkIGRpc3RyaWJ1dGUgLyBwdXJjaGFzZSBwcm9vZnMpIHVzZSB0aGlzIGlkZW50aXR5IHdoZW4gdGhlIHByaXZhdGUga2V5IGlzIHVubG9ja2VkIGluIHRoaXMgYnJvd3Nlci5cbiAgICAgICAgICAgIHsnICd9T24tY2hhaW4gZGVyaXZhdGlvbiBmb3IgdGhpcyBIdWIgaXMgZGVzY3JpYmVkIHVuZGVyeycgJ31cbiAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzL2JpdGNvaW4td2FsbGV0XCI+Qml0Y29pbiB3YWxsZXQgJmFtcDsgZGVyaXZhdGlvbjwvTGluaz4uXG4gICAgICAgICAgICB7JyAnfVJlb3BlbiB0aGlzIGRpYWxvZyBmcm9tIHRoZSBpZGVudGl0eSBtZW51ICg8c3Ryb25nPlVzZXIgcHJvZmlsZTwvc3Ryb25nPikgb3J7JyAnfVxuICAgICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3NcIj5TZXR0aW5nczwvTGluaz4g4oaSIDxzdHJvbmc+RmFicmljIGlkZW50aXR5PC9zdHJvbmc+LlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9wPlxuICAgICAgPGRpdj5cbiAgICAgICAge2xvY2FsSWRlbnRpdHkgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogMCB9fT48c3Ryb25nPlhQVUIgKHB1YmxpYyBpZGVudGlmaWVyKTo8L3N0cm9uZz48L3A+XG4gICAgICAgICAgICA8Y29kZSBzdHlsZT17aWRlbnRpdHlNb25vc3BhY2VCbG9ja1N0eWxlfT57bG9jYWxJZGVudGl0eS54cHVifTwvY29kZT5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogMCwgbWFyZ2luVG9wOiAnMC4yNWVtJyB9fT48c3Ryb25nPkJlY2gzMm0gSUQ6PC9zdHJvbmc+PC9wPlxuICAgICAgICAgICAgPGNvZGUgc3R5bGU9e2lkZW50aXR5TW9ub3NwYWNlQmxvY2tTdHlsZX0+e2xvY2FsSWRlbnRpdHkuaWR9PC9jb2RlPlxuICAgICAgICAgICAgeyFzdXBwcmVzc0ZvcmdldCAmJiBsb2NhbElkZW50aXR5LmxpbmtlZEZyb21EZXNrdG9wID8gKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNoaWVsZFwiIC8+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5FeHRlcm5hbCBzaWduaW5nPC9zdHJvbmc+IGlzIGVuYWJsZWQg4oCUIHByaXZhdGUga2V5cyBzdGF5IG9uIHRoZSBIdWIgbm9kZTsgdGhpcyBicm93c2VyIGhvbGRzIGEgd2F0Y2gtb25seSB4cHViLlxuICAgICAgICAgICAgICAgIFVzZSA8c3Ryb25nPlNpZ24gbWVzc2FnZTwvc3Ryb25nPiBmcm9tIHRoZSBwcm9maWxlIG1lbnUgYW5kIGNvbmZpcm0gZWFjaCByZXF1ZXN0IGluIHRoZSA8c3Ryb25nPkZhYnJpYyBIdWIgZGVza3RvcDwvc3Ryb25nPiBhcHAuXG4gICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5nc1wiPlNldHRpbmdzPC9MaW5rPlxuICAgICAgICAgICAgICAgIHsnIMK3ICd9XG4gICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3Mvc2VjdXJpdHlcIj5TZWN1cml0eSAmIGRlbGVnYXRpb248L0xpbms+XG4gICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgeyFzdXBwcmVzc0ZvcmdldCAmJiBsaW5rZWREZXZpY2VzLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICAgIDxTZWdtZW50IHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwibGlua2lmeVwiIC8+XG4gICAgICAgICAgICAgICAgICBMaW5rZWQgZGV2aWNlc1xuICAgICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIFBlZXItZXF1aXZhbGVudCBjbHVzdGVyOiBQYXNzcG9ydCwgQW5kcm9pZCwgZGVza3RvcCwgb3IgdGhpcyBIdWIgYnJvd3NlciBjYW4gY3JlYXRlIG9yIGFjY2VwdFxuICAgICAgICAgICAgICAgICAgYSA8Y29kZT5mYWJyaWM6Ly9saW5rPC9jb2RlPi4gQWZ0ZXIgYm90aCBzaWRlcyBjb3VudGVyc2lnbiB0aGV5IHB1Ymxpc2ggQklQMzQwIElkZW50aXR5Q3Jvc3NTaWduXG4gICAgICAgICAgICAgICAgICBGYWJyaWMgTWVzc2FnZXMuIFJldm9rZSBwdWJsaXNoZXMgSWRlbnRpdHlDcm9zc1NpZ25SZXZva2Ug4oCUIGFsc28gdW5kZXJ7JyAnfVxuICAgICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3Mvc2VjdXJpdHlcIj5TZWN1cml0eSAmYW1wOyBwcml2YWN5PC9MaW5rPi5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHVsIHN0eWxlPXt7IG1hcmdpbjogJzAuNWVtIDAgMCAxZW0nIH19PlxuICAgICAgICAgICAgICAgICAge2xpbmtlZERldmljZXMubWFwKChkLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxsaSBrZXk9e2l9IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNDVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57ZC5sYWJlbCB8fCBkLmtpbmQgfHwgJ0RldmljZSd9PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAge2QucGVlckZhYnJpY0lkID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IOKAlCA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuODVlbScgfX0+e1N0cmluZyhkLnBlZXJGYWJyaWNJZCkuc2xpY2UoMCwgMTgpfeKApjwvY29kZT48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAge2QuaHViT3JpZ2luID8gYCDigJQgJHtkLmh1Yk9yaWdpbn1gIDogJyd9XG4gICAgICAgICAgICAgICAgICAgICAge2QubGlua2VkQXQgPyBgICgke25ldyBEYXRlKGQubGlua2VkQXQpLnRvTG9jYWxlU3RyaW5nKCl9KWAgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2J1c3l9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIGhhbmRsZVJldm9rZUxpbmtlZERldmljZShkKX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXZva2VcbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgICAgICkgOiBzdXBwcmVzc0ZvcmdldCA/IG51bGwgOiAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcsIGZvbnRTaXplOiAnMC45MmVtJywgbWFyZ2luVG9wOiAnMC43NWVtJywgbWFyZ2luQm90dG9tOiAwIH19PlxuICAgICAgICAgICAgICAgIE5vIGxpbmtlZCBkZXZpY2VzIHlldCDigJQgdXNlIDxzdHJvbmc+TGluayBhbm90aGVyIGRldmljZTwvc3Ryb25nPiBiZWxvdywgb3IgYXBwcm92ZSBhIGxpbmsgZnJvbSBQYXNzcG9ydCAvIEFuZHJvaWQgLyBkZXNrdG9wLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFzdXBwcmVzc0ZvcmdldCAmJiBsb2NhbElkZW50aXR5LnhwcnYgPyAoXG4gICAgICAgICAgICAgIDxTZWdtZW50IHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicXJjb2RlXCIgLz5cbiAgICAgICAgICAgICAgICAgIExpbmsgYW5vdGhlciBkZXZpY2VcbiAgICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOTVlbScgfX0+XG4gICAgICAgICAgICAgICAgICBBbnkgcGVlciBjYW4gY3JlYXRlIG9yIGFjY2VwdC4gVGhpcyBicm93c2VyIGNhbiBzdGFydCBhbiBvZmZlcjsgdGhlIG90aGVyIGRldmljZSAoUGFzc3BvcnQsXG4gICAgICAgICAgICAgICAgICBHb29uQ2l0aXplbiBBbmRyb2lkLCBvciBkZXNrdG9wKSBhcHByb3ZlcyA8Y29kZT5mYWJyaWM6Ly9saW5rPC9jb2RlPiBvciB0aGUgSFRUUFMgbGFuZGluZy5cbiAgICAgICAgICAgICAgICAgIEtlZXAgc2VwYXJhdGUgc2VlZHMgcGVyIGFwcCDigJQgbGlua2luZyBkb2VzIG5vdCBjb3B5IGEgbW5lbW9uaWMuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nPXtkZXZpY2VMaW5rQnVzeX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkZXZpY2VMaW5rQnVzeX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgaGFuZGxlQ3JlYXRlRGV2aWNlTGluaygpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJsaW5raWZ5XCIgLz5cbiAgICAgICAgICAgICAgICAgIENyZWF0ZSBsaW5rIG9mZmVyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAge2RldmljZUxpbmtPZmZlciAmJiBkZXZpY2VMaW5rT2ZmZXIucHJvdG9jb2xVcmwgPyAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuMzVlbScsIGZvbnRTaXplOiAnMC45ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIFNjYW4gd2l0aCBHb29uQ2l0aXplbiAocGhvbmUgb3IgZGVza3RvcCkgb3Igb3BlbiBvbiBQYXNzcG9ydDpcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICB7ZGV2aWNlTGlua1FyID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyYz17ZGV2aWNlTGlua1FyfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiU2NhbiBmYWJyaWM6Ly9saW5rIHdpdGggR29vbkNpdGl6ZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezE5Nn1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MTk2fVxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZDogJyNmZmYnLCBib3JkZXJSYWRpdXM6IDQsIG1hcmdpbkJvdHRvbTogOCB9fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17aWRlbnRpdHlNb25vc3BhY2VCbG9ja1N0eWxlfT57ZGV2aWNlTGlua09mZmVyLnByb3RvY29sVXJsfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGRldmljZUxpbmtPZmZlci5wcm90b2NvbFVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuaHJlZiA9IGRldmljZUxpbmtPZmZlci5wcm90b2NvbFVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEucmVsID0gJ25vb3BlbmVyIG5vcmVmZXJyZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIENvcHkgJmFtcDsgb3BlblxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4zNWVtJyB9fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiAnZmFicmljLXNpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdGQUJSSUNfREVWSUNFX0xJTktfUkVRVUVTVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkOiBkZXZpY2VMaW5rT2ZmZXIuc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1Yjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgd2luZG93LmxvY2F0aW9uLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBBcHByb3ZlIHdpdGggUGFzc3BvcnRcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICA8c3Ryb25nPlByaXZhdGUgS2V5Ojwvc3Ryb25nPnsnICd9XG4gICAgICAgICAgICAgIHtsb2NhbElkZW50aXR5LnhwcnZcbiAgICAgICAgICAgICAgICA/ICd1bmxvY2tlZCBpbiBtZW1vcnknXG4gICAgICAgICAgICAgICAgOiAoaXNMb2NrZWRcbiAgICAgICAgICAgICAgICAgID8gKGxvY2FsSWRlbnRpdHkucGFzc3dvcmRQcm90ZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgPyAnbG9ja2VkIChlbmNyeXB0aW9uIHBhc3N3b3JkKSdcbiAgICAgICAgICAgICAgICAgICAgOiAnbG9ja2VkIOKAlCB1bmxvY2sgdG8gbG9hZCB0aGUga2V5IHN0b3JlZCBpbiB0aGlzIGJyb3dzZXInKVxuICAgICAgICAgICAgICAgICAgOiAnbm90IHN0b3JlZCBpbiB0aGlzIGJyb3dzZXInKX1cbiAgICAgICAgICAgICAge2xvY2FsSWRlbnRpdHkueHBydiAmJiBsb2NrVGltZW91dE1zID8gKFxuICAgICAgICAgICAgICAgIDxzcGFuPiDigJQgYXV0b+KAkWxvY2sgaW4gfntNYXRoLnJvdW5kKGxvY2tUaW1lb3V0TXMgLyA2MDAwMCl9IG1pbiAodGltZXIgcmVzZXRzIHdoZW4gYWN0aXZlKS48L3NwYW4+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7bG9jYWxJZGVudGl0eS54cHJ2ICYmICFsb2NrVGltZW91dE1zID8gKFxuICAgICAgICAgICAgICAgIDxzcGFuPiDigJQgYXV0b+KAkWxvY2sgb2ZmOyB1c2UgPHN0cm9uZz5Mb2NrIHByaXZhdGUga2V5PC9zdHJvbmc+IG9yIHRoZSB0b3AgYmFyLjwvc3Bhbj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICB7bG9ja1RpbWVvdXRNc0Zyb21UZXN0cyA9PSBudWxsID8gKFxuICAgICAgICAgICAgICA8Rm9ybSBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjM1ZW0nLCBtYXJnaW5Cb3R0b206ICcwLjVlbScsIG1heFdpZHRoOiA0MjAgfX0+XG4gICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImZhYnJpYy1pZGVudGl0eS1hdXRvLWxvY2tcIj5BdXRvLWxvY2sgYWZ0ZXIgaWRsZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiZmFicmljLWlkZW50aXR5LWF1dG8tbG9ja1wiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtsb2NrVGltZW91dE1pbnV0ZXN9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBNYXRoLmZsb29yKE51bWJlcihlLnRhcmdldC52YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHYpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgc2V0TG9ja1RpbWVvdXRNaW51dGVzKHYpO1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZhYnJpY0lkZW50aXR5TG9ja1RpbWVvdXRNaW51dGVzKHYpO1xuICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6ICcxMDAlJywgbWF4V2lkdGg6IDM2MCwgcGFkZGluZzogJzAuNTVlbScsIGJveFNpemluZzogJ2JvcmRlci1ib3gnIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ezB9Pk9mZiDigJQgbG9jayBtYW51YWxseSBvbmx5PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ezV9PjUgbWludXRlczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXsxNX0+MTUgbWludXRlczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXszMH0+MzAgbWludXRlczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXs2MH0+MSBob3VyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ezEyMH0+MiBob3Vyczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPXsyNDB9PjQgaG91cnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT17NDgwfT44IGhvdXJzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC4zNWVtJywgY29sb3I6ICcjODg4JywgZm9udFNpemU6ICcwLjg4ZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgICAgICAgICBSZW1vdmVzIHRoZSBwbGFpbnRleHQgcHJpdmF0ZSBrZXkgZnJvbSBtZW1vcnkgYWZ0ZXIgdGhpcyBpbnRlcnZhbCB3aGlsZSB0aGUgdGFiIHN0YXlzIG9wZW4uXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLmNsaXBib2FyZCkge1xuICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChsb2NhbElkZW50aXR5LmlkKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY29weVwiIC8+XG4gICAgICAgICAgICAgIENvcHkgSURcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAge3VzZXNEaXNrRW5jcnlwdGlvblBhc3N3b3JkRm9yQmFja3VwID8gKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScsIG1heFdpZHRoOiAnNDJyZW0nIH19PlxuICAgICAgICAgICAgICAgIEVuY3J5cHRlZCBiYWNrdXBzIHVzZSB5b3VyIDxzdHJvbmc+ZGVjcnlwdGlvbiBwYXNzd29yZDwvc3Ryb25nPiBmcm9tIDxzdHJvbmc+VW5sb2NrIHByaXZhdGUga2V5PC9zdHJvbmc+IGFib3ZlXG4gICAgICAgICAgICAgICAgKHNhbWUgcGFzc3dvcmQgYXMgbG9jYWwgZW5jcnlwdGlvbiDigJQgbm8gc2VwYXJhdGUgYmFja3VwIHBhc3N3b3JkKS5cbiAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPEZvcm0gc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJywgbWF4V2lkdGg6IDQyMCB9fT5cbiAgICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiZmFicmljLWJhY2t1cC1wYXNzd29yZFwiPlxuICAgICAgICAgICAgICAgICAgICBQYXNzd29yZCBmb3IgZW5jcnlwdGVkIGJhY2t1cCBmaWxlIChtaW4ge0xPQ0FMX0lERU5USVRZX1BBU1NXT1JEX01JTn0gY2hhcmFjdGVycylcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJmYWJyaWMtYmFja3VwLXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2JhY2t1cEV4cG9ydFBhc3N3b3JkfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEJhY2t1cEV4cG9ydFBhc3N3b3JkKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2JhY2t1cEV4cG9ydEJ1c3l9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiAnMTAwJScsIG1heFdpZHRoOiAzNjAsIHBhZGRpbmc6ICcwLjU1ZW0nLCBib3hTaXppbmc6ICdib3JkZXItYm94JyB9fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nLCBtYXJnaW5Ub3A6ICcwLjVlbScgfX1cbiAgICAgICAgICAgICAgbG9hZGluZz17YmFja3VwRXhwb3J0QnVzeX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2JhY2t1cEV4cG9ydEJ1c3kgfHwgIWxvY2FsSWRlbnRpdHkgfHwgIWxvY2FsSWRlbnRpdHkueHBydn1cbiAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgIGxvY2FsSWRlbnRpdHkgJiYgbG9jYWxJZGVudGl0eS54cHJ2XG4gICAgICAgICAgICAgICAgICA/ICdEb3dubG9hZCBhbiBlbmNyeXB0ZWQgYmFja3VwIG9mIHRoaXMgaWRlbnRpdHkgKGluY2x1ZGVzIHByaXZhdGUga2V5IHdoZW4gdW5sb2NrZWQpLidcbiAgICAgICAgICAgICAgICAgIDogJ1VubG9jayBvciBpbXBvcnQgYSBzaWduaW5nIGtleSBiZWZvcmUgZXhwb3J0aW5nIGFuIGVuY3J5cHRlZCBiYWNrdXAgKHdhdGNoLW9ubHkgeHB1YiBhbG9uZSBpcyBub3QgZW5vdWdoKS4nXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsSWRlbnRpdHkgfHwgIWxvY2FsSWRlbnRpdHkueHBydiB8fCAhbG9jYWxJZGVudGl0eS54cHViKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEVycm9yKCdVbmxvY2sgb3IgaW1wb3J0IGEgcHJpdmF0ZSBrZXkgYmVmb3JlIGV4cG9ydGluZyBhbiBlbmNyeXB0ZWQgYmFja3VwLicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjb25zdCBwd2QgPSByZXNvbHZlQmFja3VwRW5jcnlwdGlvblBhc3N3b3JkKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoIXB3ZCB8fCBwd2QubGVuZ3RoIDwgTE9DQUxfSURFTlRJVFlfUEFTU1dPUkRfTUlOKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIHVzZXNEaXNrRW5jcnlwdGlvblBhc3N3b3JkRm9yQmFja3VwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBFbnRlciB5b3VyIGRlY3J5cHRpb24gcGFzc3dvcmQgYWJvdmUgKGF0IGxlYXN0ICR7TE9DQUxfSURFTlRJVFlfUEFTU1dPUkRfTUlOfSBjaGFyYWN0ZXJzKSDigJQgaXQgZW5jcnlwdHMgYmFja3VwcyB0b28uYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgQ2hvb3NlIGEgYmFja3VwIGZpbGUgcGFzc3dvcmQgb2YgYXQgbGVhc3QgJHtMT0NBTF9JREVOVElUWV9QQVNTV09SRF9NSU59IGNoYXJhY3RlcnMuYFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzZXRCYWNrdXBFeHBvcnRCdXN5KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ZhYnJpYy1pZGVudGl0eS1iYWNrdXAtaW5uZXInLFxuICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IGxvY2FsSWRlbnRpdHkuaWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIHhwdWI6IGxvY2FsSWRlbnRpdHkueHB1YiB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgeHBydjogU3RyaW5nKGxvY2FsSWRlbnRpdHkueHBydilcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW52ZWxvcGUgPSBhd2FpdCBlbmNyeXB0RmFicmljSWRlbnRpdHlCYWNrdXBQYXlsb2FkKGlubmVyLCBwd2QpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGVudmVsb3BlLCBudWxsLCAyKV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCcgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgICAgICAgICAgIGEuaHJlZiA9IHVybDtcbiAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9ICdmYWJyaWMtaWRlbnRpdHktYmFja3VwLmVuYy5qc29uJztcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgICAgICAgICAgICAgYS5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xuICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSk7XG4gICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBzZXRCYWNrdXBFeHBvcnRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZG93bmxvYWRcIiAvPlxuICAgICAgICAgICAgICBEb3dubG9hZCBlbmNyeXB0ZWQgYmFja3VwXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIHtsb2NhbElkZW50aXR5ICYmXG4gICAgICAgICAgICBsb2NhbElkZW50aXR5LmZhYnJpY0lkZW50aXR5TW9kZSA9PT0gJ2FjY291bnQnICYmXG4gICAgICAgICAgICBsb2NhbElkZW50aXR5LnhwcnYgJiZcbiAgICAgICAgICAgIGxvY2FsSWRlbnRpdHkuZmFicmljSGRSb2xlICE9PSAnYWNjb3VudE5vZGUnICYmXG4gICAgICAgICAgICBsb2NhbElkZW50aXR5LmZhYnJpY0hkUm9sZSAhPT0gJ3dhdGNoQWNjb3VudCcgPyAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJywgbWFyZ2luVG9wOiAnMC41ZW0nIH19XG4gICAgICAgICAgICAgICAgbG9hZGluZz17YmFja3VwRXhwb3J0QnVzeX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17YmFja3VwRXhwb3J0QnVzeSB8fCAhbG9jYWxJZGVudGl0eSB8fCAhbG9jYWxJZGVudGl0eS54cHVifVxuICAgICAgICAgICAgICAgIHRpdGxlPVwiRW5jcnlwdGVkIGJhY2t1cCBvZiB0aGlzIEZhYnJpYyBhY2NvdW50IHNpZ25pbmcga2V5IG9ubHkgKG5vIEhEIG1hc3RlcikuIFVzZSB3aGVuIHRoZSBtYXN0ZXIgaXMgc3RvcmVkIGVsc2V3aGVyZS5cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxJZGVudGl0eSB8fCAhbG9jYWxJZGVudGl0eS54cHViIHx8ICFsb2NhbElkZW50aXR5LnhwcnYpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHdkID0gcmVzb2x2ZUJhY2t1cEVuY3J5cHRpb25QYXNzd29yZCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXB3ZCB8fCBwd2QubGVuZ3RoIDwgTE9DQUxfSURFTlRJVFlfUEFTU1dPUkRfTUlOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VzRGlza0VuY3J5cHRpb25QYXNzd29yZEZvckJhY2t1cFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGBFbnRlciB5b3VyIGRlY3J5cHRpb24gcGFzc3dvcmQgYWJvdmUgKGF0IGxlYXN0ICR7TE9DQUxfSURFTlRJVFlfUEFTU1dPUkRfTUlOfSBjaGFyYWN0ZXJzKSDigJQgaXQgZW5jcnlwdHMgYmFja3VwcyB0b28uYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGBDaG9vc2UgYSBiYWNrdXAgZmlsZSBwYXNzd29yZCBvZiBhdCBsZWFzdCAke0xPQ0FMX0lERU5USVRZX1BBU1NXT1JEX01JTn0gY2hhcmFjdGVycy5gXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRCYWNrdXBFeHBvcnRCdXN5KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFpID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsSWRlbnRpdHkuZmFicmljQWNjb3VudEluZGV4ICE9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNYXRoLmZsb29yKE51bWJlcihsb2NhbElkZW50aXR5LmZhYnJpY0FjY291bnRJbmRleCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lciA9IGJ1aWxkRmFicmljQWNjb3VudFN1YnRyZWVCYWNrdXBJbm5lcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWJyaWNBY2NvdW50SW5kZXg6IGFpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxvY2FsSWRlbnRpdHkuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB4cHViOiBsb2NhbElkZW50aXR5LnhwdWIsXG4gICAgICAgICAgICAgICAgICAgICAgICB4cHJ2OiBsb2NhbElkZW50aXR5LnhwcnZcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnZlbG9wZSA9IGF3YWl0IGVuY3J5cHRGYWJyaWNJZGVudGl0eUJhY2t1cFBheWxvYWQoaW5uZXIsIHB3ZCk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShlbnZlbG9wZSwgbnVsbCwgMildLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTgnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICAgICAgICBhLmhyZWYgPSB1cmw7XG4gICAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9ICdmYWJyaWMtaWRlbnRpdHktYWNjb3VudC1iYWNrdXAuZW5jLmpzb24nO1xuICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgYS5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRCYWNrdXBFeHBvcnRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImRvd25sb2FkXCIgLz5cbiAgICAgICAgICAgICAgICBBY2NvdW50LW9ubHkgZW5jcnlwdGVkIGJhY2t1cFxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge2xvY2FsSWRlbnRpdHkueHBydiAmJiAobG9jYWxJZGVudGl0eS5wYXNzd29yZFByb3RlY3RlZCB8fCBwbGFpbnRleHRLZXlNYXRlcmlhbE9uRGlzaykgPyAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRMb2NhbElkZW50aXR5KChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJldiB8fCAhcHJldi54cHJ2KSByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYucGFzc3dvcmRQcm90ZWN0ZWQpIHJldHVybiB7IC4uLnByZXYsIHhwcnY6IG51bGwsIC4uLihwcmV2LmZhYnJpY0lkZW50aXR5TW9kZSA9PT0gJ2FjY291bnQnID8geyBtYXN0ZXJYcHJ2OiBudWxsIH0gOiB7fSkgfTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSByZWFkU3RvcmFnZUpTT04oJ2ZhYnJpYy5pZGVudGl0eS5sb2NhbCcsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWQgJiYgZmFicmljUGxhaW50ZXh0U2lnbmluZ1VubG9ja2FibGUocGFyc2VkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeHBydjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzdGVyWHBydjogcHJldi5mYWJyaWNJZGVudGl0eU1vZGUgPT09ICdhY2NvdW50JyA/IG51bGwgOiBwcmV2Lm1hc3RlclhwcnYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWludGV4dFVubG9ja0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmRQcm90ZWN0ZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICAgICAgICAgIHhwcnY6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgLi4uKHByZXYuZmFicmljSWRlbnRpdHlNb2RlID09PSAnYWNjb3VudCcgPyB7IG1hc3RlclhwcnY6IG51bGwgfSA6IHt9KVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJsb2NrXCIgLz5cbiAgICAgICAgICAgICAgICBMb2NrIHByaXZhdGUga2V5XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7IWxvY2FsSWRlbnRpdHkueHBydiAmJiBpc0xvY2tlZCAmJiBsb2NhbElkZW50aXR5LnBsYWludGV4dFVubG9ja0F2YWlsYWJsZSAmJiAhbG9jYWxJZGVudGl0eS5wYXNzd29yZFByb3RlY3RlZCA/IChcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBtYXhXaWR0aDogNDIwIH19PlxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+RW5jcnlwdCBsb2NhbCBzdG9yYWdlIGZpcnN0PC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgICAgICAgICBUaGlzIGlkZW50aXR5IHN0aWxsIGhhZCBhIDxzdHJvbmc+cGxhaW50ZXh0PC9zdHJvbmc+IHByaXZhdGUga2V5IGluIHRoaXMgYnJvd3Nlci4gQ2hvb3NlIGFcbiAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgbm93IHRvIGVuY3J5cHQgaXQgb24gZGlzay4gVGhlIHNhbWUgcGFzc3dvcmQgaXMgcmVxdWlyZWQgb24gZXZlcnkgdW5sb2NrLlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgICA8Rm9ybVxuICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1c3kpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IFN0cmluZyhwbGFpbnRleHRNaWdyYXRpb25QYXNzd29yZCB8fCAnJykudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiID0gU3RyaW5nKHBsYWludGV4dE1pZ3JhdGlvblBhc3N3b3JkQ29uZmlybSB8fCAnJykudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWEgfHwgIWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcignRW50ZXIgYW5kIGNvbmZpcm0gYSBwYXNzd29yZCB0byBlbmNyeXB0IHRoaXMgaWRlbnRpdHkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmxlbmd0aCA8IExPQ0FMX0lERU5USVRZX1BBU1NXT1JEX01JTikge1xuICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yKGBQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0ICR7TE9DQUxfSURFTlRJVFlfUEFTU1dPUkRfTUlOfSBjaGFyYWN0ZXJzLmApO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yKCdQYXNzd29yZHMgZG8gbm90IG1hdGNoLicpO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZXRCdXN5KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcmVhZFN0b3JhZ2VKU09OKCdmYWJyaWMuaWRlbnRpdHkubG9jYWwnLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VkKSB0aHJvdyBuZXcgRXJyb3IoJ05vIHN0b3JlZCBpZGVudGl0eSBmb3VuZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuY3J5cHRlZCA9IGVuY3J5cHRMb2NhbElkZW50aXR5QXRSZXN0KHBhcnNlZCwgYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVN0b3JhZ2VKU09OKCdmYWJyaWMuaWRlbnRpdHkubG9jYWwnLCBlbmNyeXB0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSBkZWNyeXB0TG9jYWxJZGVudGl0eU1hc3Rlck1hdGVyaWFsKGVuY3J5cHRlZCwgYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0SWRlbnRpdHkgPSB1bmxvY2tlZFNlc3Npb25Gcm9tRGVjcnlwdGVkTWFzdGVyKG1hdGVyaWFsLCBlbmNyeXB0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGxhaW50ZXh0TWlncmF0aW9uUGFzc3dvcmQoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGxhaW50ZXh0TWlncmF0aW9uUGFzc3dvcmRDb25maXJtKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsSWRlbnRpdHkobmV4dElkZW50aXR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcHMub25VbmxvY2tTdWNjZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uVW5sb2NrU3VjY2VzcyhuZXh0SWRlbnRpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEJ1c3koZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5FbmNyeXB0aW9uIHBhc3N3b3JkIGZvciB0aGlzIGJyb3dzZXI8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3BsYWludGV4dE1pZ3JhdGlvblBhc3N3b3JkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0UGxhaW50ZXh0TWlncmF0aW9uUGFzc3dvcmQoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5Db25maXJtIHBhc3N3b3JkPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJuZXctcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtwbGFpbnRleHRNaWdyYXRpb25QYXNzd29yZENvbmZpcm19XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRQbGFpbnRleHRNaWdyYXRpb25QYXNzd29yZENvbmZpcm0oZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2J1c3l9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJyB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwibG9ja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIEVuY3J5cHQgYW5kIHVubG9ja1xuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgeyFsb2NhbElkZW50aXR5LnhwcnYgJiYgaXNMb2NrZWQgJiYgbG9jYWxJZGVudGl0eS5wYXNzd29yZFByb3RlY3RlZCA/IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8Rm9ybVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJywgbWF4V2lkdGg6IDM2MCB9fVxuICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1c3kpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHdkID0gU3RyaW5nKHVubG9ja1Bhc3N3b3JkIHx8ICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHdkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoJ1BsZWFzZSBlbnRlciB5b3VyIGRlY3J5cHRpb24gcGFzc3dvcmQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzU3RvcmFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzU3RvcmFnZSA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1N0b3JhZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3VyZSBzdG9yYWdlIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHJlYWRTdG9yYWdlSlNPTignZmFicmljLmlkZW50aXR5LmxvY2FsJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkgdGhyb3cgbmV3IEVycm9yKCdObyBzdG9yZWQgaWRlbnRpdHkgZm91bmQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkICYmIHBhcnNlZC5wYXNzd29yZFByb3RlY3RlZCAmJiBwYXJzZWQueHBydkVuYyAmJiBwYXJzZWQucGFzc3dvcmRTYWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhwcnYgPSBkZWNyeXB0TG9jYWxJZGVudGl0eU1hc3Rlck1hdGVyaWFsKHBhcnNlZCwgcHdkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dElkZW50aXR5ID0gdW5sb2NrZWRTZXNzaW9uRnJvbURlY3J5cHRlZE1hc3Rlcih4cHJ2LCBwYXJzZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbElkZW50aXR5KG5leHRJZGVudGl0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BzLm9uVW5sb2NrU3VjY2VzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uVW5sb2NrU3VjY2VzcyhuZXh0SWRlbnRpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0b3JlZCBpZGVudGl0eSBkb2VzIG5vdCB1c2UgZW5jcnlwdGlvbiBwYXNzd29yZCBzdG9yYWdlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW0lERU5USVRZXScsICdVbmxvY2sgZmFpbGVkOicsIHNhZmVJZGVudGl0eUVycihlcnIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yKCdJbmNvcnJlY3QgcGFzc3dvcmQgb3IgY29ycnVwdGVkIGlkZW50aXR5LiBQbGVhc2UgdHJ5IGFnYWluLicpO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+RGVjcnlwdGlvbiBwYXNzd29yZCAoc2FtZSBwYXNzd29yZCBlbmNyeXB0cyBiYWNrdXBzIGJlbG93KTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3VubG9ja1Bhc3N3b3JkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0VW5sb2NrUGFzc3dvcmQoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtidXN5fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwidW5sb2NrXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgVW5sb2NrIHByaXZhdGUga2V5XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7IXN1cHByZXNzRm9yZ2V0ID8gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICBjb2xvcj1cInJlZFwiXG4gICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93Q29uZmlybUZvcmdldCh0cnVlKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInRyYXNoXCIgLz5cbiAgICAgICAgICAgICAgRm9yZ2V0IGxvY2FsIGlkZW50aXR5XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxNb2RhbFxuICAgICAgICAgICAgICBvcGVuPXtzaG93Q29uZmlybUZvcmdldH1cbiAgICAgICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0NvbmZpcm1Gb3JnZXQoZmFsc2UpfVxuICAgICAgICAgICAgICBjbG9zZU9uRGltbWVyQ2xpY2s9e2ZhbHNlfVxuICAgICAgICAgICAgICBjbG9zZU9uRG9jdW1lbnRDbGljaz17ZmFsc2V9XG4gICAgICAgICAgICAgIGNsb3NlT25Fc2NhcGU9e2ZhbHNlfVxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SGVhZGVyIGljb249XCJ0cmFzaFwiIGNvbnRlbnQ9XCJEZWxldGUgbG9jYWwgaWRlbnRpdHk/XCIgLz5cbiAgICAgICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPkFsbCBsb2NhbCBmaWxlcyBhbmQga2V5IG1hdGVyaWFsIHdpbGwgYmUgcGVybWFuZW50bHkgZGVsZXRlZC48L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICBUaGUgb25seSB3YXkgdG8gcmVjb3ZlciBhY2Nlc3MgdG8geW91ciBkYXRhIGlzIHRvIGhhdmUgeW91ciBwcml2YXRlIGtleSAoeHBydiBvciBzZWVkKS5cbiAgICAgICAgICAgICAgICAgIElmIHlvdSBoYXZlIG5vdCBiYWNrZWQgdGhlc2UgdXAsIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlY292ZXIgZGVsZXRlZCBkb2N1bWVudHMgb3IgdGhpcyBpZGVudGl0eS5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/PC9wPlxuICAgICAgICAgICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxNb2RhbC5BY3Rpb25zPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4gc2V0U2hvd0NvbmZpcm1Gb3JnZXQoZmFsc2UpfT5cbiAgICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIGNvbG9yPVwicmVkXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BzLm9uRm9yZ2V0SWRlbnRpdHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uRm9yZ2V0SWRlbnRpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1N0b3JhZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzU3RvcmFnZSA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzU3RvcmFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU3RvcmFnZUtleShERUxFR0FUSU9OX1NUT1JBR0VfS0VZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVEZWwpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTdG9yYWdlS2V5KFNUT1JBR0VfTElOS0VEX0RFVklDRVMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZUxpbmspIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlEZWxlZ2F0aW9uU3RvcmFnZUNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVObykge31cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2hyb21lICE9PSAndW5kZWZpbmVkJyAmJiBjaHJvbWUuc3RvcmFnZSAmJiBjaHJvbWUuc3RvcmFnZS5sb2NhbCAmJiBjaHJvbWUuc3RvcmFnZS5sb2NhbC5yZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5yZW1vdmUoWydmYWJyaWMuaWRlbnRpdHkuZXh0J10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlRXh0KSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJGYWJyaWNCcm93c2VySWRlbnRpdHlMb2NhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU3RvcmFnZUtleSgnZmFicmljOmRvY3VtZW50cycpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tJREVOVElUWV0nLCAnRm9yZ2V0IGlkZW50aXR5IGVycm9yOicsIHNhZmVJZGVudGl0eUVycihlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0NvbmZpcm1Gb3JnZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbElkZW50aXR5KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBzZXRTaWduYXR1cmUobnVsbCk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJ0cmFzaFwiIC8+XG4gICAgICAgICAgICAgICAgICBJIHVuZGVyc3RhbmQsIGRlbGV0ZSBldmVyeXRoaW5nXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvTW9kYWwuQWN0aW9ucz5cbiAgICAgICAgICAgIDwvTW9kYWw+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBpc0dlbmVyYXRpbmcgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgIEdlbmVyYXRpbmcgYSBuZXcgaWRlbnRpdHkgZm9yIHRoaXMgYnJvd3Nlci4gVGhpcyBvbmx5IGhhcHBlbnMgbG9jYWxseSBhbmQgbmV2ZXIgbGVhdmVzIHlvdXIgZGV2aWNlLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogJzJlbSAwJ1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic3Bpbm5lclwiIGxvYWRpbmcgc2l6ZT1cImh1Z2VcIiAvPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nLCBjb2xvcjogJyM2NjYnIH19PlBsZWFzZSB3YWl0IGEgbW9tZW504oCmPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBwZW5kaW5nU2VlZCAmJiAhc2VlZENvbmZpcm1lZCA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgICAgUHJvdmlkZSBhbiBlbmNyeXB0aW9uIHBhc3N3b3JkIHRvIHByb3RlY3QgeW91ciBpZGVudGl0eS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxGb3JtIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5FbmNyeXB0aW9uIHBhc3N3b3JkPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJuZXctcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2lkZW50aXR5UGFzc3dvcmR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldElkZW50aXR5UGFzc3dvcmQoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPGxhYmVsPkNvbmZpcm0gcGFzc3dvcmQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17aWRlbnRpdHlQYXNzd29yZENvbmZpcm19XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldElkZW50aXR5UGFzc3dvcmRDb25maXJtKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nLCBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJyB9fT5cbiAgICAgICAgICAgICAgICBUaGlzIHBhc3N3b3JkIHdpbGwgYmUgcmVxdWlyZWQgdG8gdW5sb2NrIHlvdXIgaWRlbnRpdHkgaW4gdGhpcyBicm93c2VyLiBEbyBub3QgZm9yZ2V0IGl0LlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHByaW1hcnlcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2J1c3l9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IFN0cmluZyhpZGVudGl0eVBhc3N3b3JkIHx8ICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBiID0gU3RyaW5nKGlkZW50aXR5UGFzc3dvcmRDb25maXJtIHx8ICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoIWEgfHwgIWIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoJ1BsZWFzZSBlbnRlciBhbmQgY29uZmlybSBhIHBhc3N3b3JkLicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoYS5sZW5ndGggPCBMT0NBTF9JREVOVElUWV9QQVNTV09SRF9NSU4pIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoYFBhc3N3b3JkIHNob3VsZCBiZSBhdCBsZWFzdCAke0xPQ0FMX0lERU5USVRZX1BBU1NXT1JEX01JTn0gY2hhcmFjdGVycyBsb25nLmApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcignUGFzc3dvcmRzIGRvIG5vdCBtYXRjaC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBnZW5lcmF0ZWQgc2VlZCBpbi1tZW1vcnkgYW5kIHNob3cgYmFja3VwIGRldGFpbHMgbmV4dC5cbiAgICAgICAgICAgICAgICAgIC8vIEZpbmFsIHBlcnNpc3RlbmNlL2xvZ2luIGhhcHBlbnMgaW4gdGhlIFwiTG9naW4gd2l0aCB0aGlzIGlkZW50aXR5XCIgc3RlcC5cbiAgICAgICAgICAgICAgICAgIHNldEJhY2t1cEFja25vd2xlZGdlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICBzZXRTZWVkQ29uZmlybWVkKHRydWUpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYXJyb3cgcmlnaHRcIiAvPlxuICAgICAgICAgICAgICAgIENvbnRpbnVlIHRvIGJhY2t1cCByZXZpZXdcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtidXN5fVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgICAgcmVzZXRTZWVkU3RhdGUoKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fVxuICAgICAgICAgICAgICAgIGxvYWRpbmc9e2J1c3l9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2J1c3l9XG4gICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgICAgICAgICAgICBzZXRCdXN5KHRydWUpO1xuICAgICAgICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgc2V0UGVuZGluZ1NlZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZW5lcmF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBuZXcgS2V5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXkubW5lbW9uaWMgfHwgIWtleS54cHJ2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleSBkaWQgbm90IHByb2R1Y2UgbW5lbW9uaWMveHBydi4nKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsYXkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxNTAwKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGdlbmVyYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5O1xuICAgICAgICAgICAgICAgICAgICBzZXRQZW5kaW5nU2VlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgbW5lbW9uaWM6IGtleS5tbmVtb25pYyxcbiAgICAgICAgICAgICAgICAgICAgICB4cHJ2OiBrZXkueHBydlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VlZENvbmZpcm1lZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldElkZW50aXR5UGFzc3dvcmQoJycpO1xuICAgICAgICAgICAgICAgICAgICBzZXRJZGVudGl0eVBhc3N3b3JkQ29uZmlybSgnJyk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tJREVOVElUWV0nLCAnUmVnZW5lcmF0ZSBpZGVudGl0eSBmYWlsZWQ6Jywgc2FmZUlkZW50aXR5RXJyKGUpKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKGUgJiYgZS5zdGFjaykgPyBlLnN0YWNrIDogKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKSk7XG4gICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBzZXRJc0dlbmVyYXRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICAgIEdlbmVyYXRlIGEgZGlmZmVyZW50IHNlZWRcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IHBlbmRpbmdTZWVkICYmIHNlZWRDb25maXJtZWQgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc3R5bGU9e3sgbWF4V2lkdGg6ICc0MnJlbScgfX0+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5TYXZlIHlvdXIgYmFja3VwIGJlZm9yZSBjb250aW51aW5nPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC41ZW0gMCAwJywgbGluZUhlaWdodDogMS41IH19PlxuICAgICAgICAgICAgICAgIFlvdXIgPHN0cm9uZz5yZWNvdmVyeSBwaHJhc2U8L3N0cm9uZz4gKGFuZCBvcHRpb25hbCA8c3Ryb25nPnhwcnY8L3N0cm9uZz4gb3IgZG93bmxvYWRlZCBKU09OKSBpcyB0aGUgb25seSB3YXkgdG8gcmVzdG9yZSB0aGlzIGlkZW50aXR5XG4gICAgICAgICAgICAgICAgaWYgeW91IGNsZWFyIHRoZSBicm93c2VyIG9yIGxvc2UgdGhpcyBkZXZpY2UuIEZhYnJpYyBjYW5ub3QgcmVjb3ZlciBpdCBmb3IgeW91LlxuICAgICAgICAgICAgICAgIFByZWZlciBzdG9yaW5nIHRoZSA8c3Ryb25nPnhwcnY8L3N0cm9uZz4gb3IgcGhyYXNlIDxzdHJvbmc+b2ZmbGluZTwvc3Ryb25nPiAocGFwZXIsIHBhc3N3b3JkIG1hbmFnZXIsIGhhcmR3YXJlIHdvcmtmbG93KeKAlG5vdCBvbmx5IGluIHRoaXMgYnJvd3Nlci5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgICAgUmV2ZWFsIGVhY2ggc2VjcmV0IGJlbG93LCBjb3B5IG9yIHdyaXRlIGl0IGRvd24sIHRoZW4gY29uZmlybSBhdCB0aGUgYm90dG9tLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAge3BlbmRpbmdTZWVkLm1uZW1vbmljICYmIChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlJlY292ZXJ5IHBocmFzZSAoQklQMzkgbW5lbW9uaWMpPC9zdHJvbmc+IOKAlCBtb3N0IHdhbGxldHMgdXNlIHRoaXMgZm9ybWF0LjwvcD5cbiAgICAgICAgICAgICAgICA8U2VnbWVudCBpbnZlcnRlZCBjb2xvcj1cImJsdWVcIj5cbiAgICAgICAgICAgICAgICAgIHtzaG93U2VlZFBocmFzZSA/IChcbiAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgd2hpdGVTcGFjZTogJ3ByZS13cmFwJyB9fT57cGVuZGluZ1NlZWQubW5lbW9uaWN9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjY2NkJywgZm9udFN0eWxlOiAnaXRhbGljJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICBIaWRkZW4gZm9yIHByaXZhY3kuIENsaWNrICZxdW90O1Nob3cgcmVjb3ZlcnkgcGhyYXNlJnF1b3Q7IHRvIHJldmVhbC5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93U2VlZFBocmFzZSgodikgPT4gIXYpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9e3Nob3dTZWVkUGhyYXNlID8gJ2V5ZSBzbGFzaCcgOiAnZXllJ30gLz5cbiAgICAgICAgICAgICAgICAgIHtzaG93U2VlZFBocmFzZSA/ICdIaWRlIHJlY292ZXJ5IHBocmFzZScgOiAnU2hvdyByZWNvdmVyeSBwaHJhc2UnfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFzaG93U2VlZFBocmFzZX1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXshc2hvd1NlZWRQaHJhc2UgPyAnUmV2ZWFsIHRoZSBwaHJhc2UgZmlyc3Qgc28geW91IGtub3cgd2hhdCB5b3UgYXJlIGNvcHlpbmcnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkICYmIHBlbmRpbmdTZWVkLm1uZW1vbmljKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChwZW5kaW5nU2VlZC5tbmVtb25pYyk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY29weVwiIC8+XG4gICAgICAgICAgICAgICAgICBDb3B5IHJlY292ZXJ5IHBocmFzZVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19PjxzdHJvbmc+RXh0ZW5kZWQgcHJpdmF0ZSBrZXkgKHhwcnYpPC9zdHJvbmc+IOKAlCBzaW5nbGUgc2VyaWFsaXplZCBiYWNrdXA7IGltcG9ydCB2aWEgPGVtPkltcG9ydCBCYWNrdXA8L2VtPiBvciBwYXN0ZSBpbnRvIGEgSlNPTiBmaWxlLjwvcD5cbiAgICAgICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgICAgICB7c2hvd0JhY2t1cEtleSA/IChcbiAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PntwZW5kaW5nU2VlZC54cHJ2fTwvY29kZT5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U3R5bGU6ICdpdGFsaWMnIH19PlxuICAgICAgICAgICAgICAgICAgSGlkZGVuIGZvciBwcml2YWN5LiBDbGljayAmcXVvdDtTaG93IGJhY2t1cCBrZXkmcXVvdDsgdG8gcmV2ZWFsLlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dCYWNrdXBLZXkoKHYpID0+ICF2KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT17c2hvd0JhY2t1cEtleSA/ICdleWUgc2xhc2gnIDogJ2V5ZSd9IC8+XG4gICAgICAgICAgICAgIHtzaG93QmFja3VwS2V5ID8gJ0hpZGUgYmFja3VwIGtleScgOiAnU2hvdyBiYWNrdXAga2V5J31cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFzaG93QmFja3VwS2V5fVxuICAgICAgICAgICAgICB0aXRsZT17IXNob3dCYWNrdXBLZXkgPyAnUmV2ZWFsIHRoZSB4cHJ2IGZpcnN0IHNvIHlvdSBrbm93IHdoYXQgeW91IGFyZSBjb3B5aW5nJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLmNsaXBib2FyZCAmJiBwZW5kaW5nU2VlZC54cHJ2KSB7XG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHBlbmRpbmdTZWVkLnhwcnYpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjb3B5XCIgLz5cbiAgICAgICAgICAgICAgQ29weSB4cHJ2XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJywgbWF4V2lkdGg6ICc0MnJlbScgfX0+XG4gICAgICAgICAgICAgIEJhY2t1cCBkb3dubG9hZCB1c2VzIHRoZSBzYW1lIGVuY3J5cHRpb24gcGFzc3dvcmQgeW91IGVudGVyZWQgaW4gdGhlIHByZXZpb3VzIHN0ZXAuXG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICBsb2FkaW5nPXtiYWNrdXBFeHBvcnRCdXN5fVxuICAgICAgICAgICAgICBkaXNhYmxlZD17YmFja3VwRXhwb3J0QnVzeSB8fCAhKHBlbmRpbmdTZWVkICYmIHBlbmRpbmdTZWVkLnhwcnYpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHhwcnYgPSBwZW5kaW5nU2VlZCAmJiBwZW5kaW5nU2VlZC54cHJ2O1xuICAgICAgICAgICAgICAgICAgaWYgKCF4cHJ2KSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBjb25zdCBwd2QgPSBTdHJpbmcoaWRlbnRpdHlQYXNzd29yZCB8fCAnJykudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFwd2QgfHwgcHdkLmxlbmd0aCA8IExPQ0FMX0lERU5USVRZX1BBU1NXT1JEX01JTikge1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihgRW50ZXIgYW4gZW5jcnlwdGlvbiBwYXNzd29yZCBvZiBhdCBsZWFzdCAke0xPQ0FMX0lERU5USVRZX1BBU1NXT1JEX01JTn0gY2hhcmFjdGVycyBpbiB0aGUgcHJldmlvdXMgc3RlcC5gKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc2V0QmFja3VwRXhwb3J0QnVzeSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFja3VwUGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZmFicmljLWlkZW50aXR5LWJhY2t1cC1pbm5lcicsXG4gICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgICAgICAgICAgICAgICBtbmVtb25pYzogcGVuZGluZ1NlZWQubW5lbW9uaWMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIHhwcnZcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpZGVudGl0eSA9IG5ldyBJZGVudGl0eSh7IHhwcnYgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50aXR5ICYmIGlkZW50aXR5LmlkICYmIGlkZW50aXR5LmtleSAmJiBpZGVudGl0eS5rZXkueHB1Yikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwUGF5bG9hZC5pZCA9IFN0cmluZyhpZGVudGl0eS5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrdXBQYXlsb2FkLnhwdWIgPSBTdHJpbmcoaWRlbnRpdHkua2V5LnhwdWIpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW52ZWxvcGUgPSBhd2FpdCBlbmNyeXB0RmFicmljSWRlbnRpdHlCYWNrdXBQYXlsb2FkKGJhY2t1cFBheWxvYWQsIHB3ZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoZW52ZWxvcGUsIG51bGwsIDIpXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04JyB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgICAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICBhLmRvd25sb2FkID0gJ2ZhYnJpYy1pZGVudGl0eS1iYWNrdXAuZW5jLmpzb24nO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICAgICAgICAgICAgICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgICAgICAgICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpKTtcbiAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEJhY2t1cEV4cG9ydEJ1c3koZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJkb3dubG9hZFwiIC8+XG4gICAgICAgICAgICAgIERvd25sb2FkIGVuY3J5cHRlZCBiYWNrdXBcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEZvcm0gc3R5bGU9e3sgbWFyZ2luVG9wOiAnMS4yNWVtJywgbWF4V2lkdGg6ICc0MnJlbScgfX0+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17YmFja3VwQWNrbm93bGVkZ2VkfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCBkKSA9PiBzZXRCYWNrdXBBY2tub3dsZWRnZWQoISEoZCAmJiBkLmNoZWNrZWQpKX1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJJIGhhdmUgc2VjdXJlbHkgc2F2ZWQgbXkgcmVjb3ZlcnkgcGhyYXNlIGFuZC9vciB4cHJ2IG9yIGJhY2t1cCBmaWxlIGFuZCB1bmRlcnN0YW5kIEZhYnJpYyBjYW5ub3QgcmVjb3ZlciB0aGlzIGlkZW50aXR5IGZvciBtZVwiXG4gICAgICAgICAgICAgICAgICBsYWJlbD17XG4gICAgICAgICAgICAgICAgICAgICdJIGhhdmUgc2VjdXJlbHkgc2F2ZWQgbXkgcmVjb3ZlcnkgcGhyYXNlIGFuZC9vciB4cHJ2IChvciBkb3dubG9hZGVkIHRoZSBiYWNrdXAgZmlsZSkuICcgK1xuICAgICAgICAgICAgICAgICAgICAnSSB1bmRlcnN0YW5kIEkgY2Fubm90IHJlY292ZXIgdGhpcyBpZGVudGl0eSB3aXRob3V0IHRoZW0uJ1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fVxuICAgICAgICAgICAgICBkaXNhYmxlZD17YnVzeSB8fCAhYmFja3VwQWNrbm93bGVkZ2VkfVxuICAgICAgICAgICAgICB0aXRsZT17IWJhY2t1cEFja25vd2xlZGdlZCA/ICdDb25maXJtIHlvdSBoYXZlIHNhdmVkIHlvdXIgYmFja3VwJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hc3RlclhwcnYgPSBwZW5kaW5nU2VlZCAmJiBwZW5kaW5nU2VlZC54cHJ2O1xuICAgICAgICAgICAgICAgICAgaWYgKCFtYXN0ZXJYcHJ2KSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgeHBydiBmb3IgcGVuZGluZyBzZWVkLicpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHdkID0gU3RyaW5nKGlkZW50aXR5UGFzc3dvcmQgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgIGlmICghcHdkIHx8IHB3ZC5sZW5ndGggPCBMT0NBTF9JREVOVElUWV9QQVNTV09SRF9NSU4pIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgYEVudGVyIHRoZSBlbmNyeXB0aW9uIHBhc3N3b3JkIHlvdSBjaG9zZSBhYm92ZSAoYXQgbGVhc3QgJHtMT0NBTF9JREVOVElUWV9QQVNTV09SRF9NSU59IGNoYXJhY3RlcnMpLmBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0QnVzeShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZhYnJpY0FjY291bnRJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkayA9IGRlcml2ZUZhYnJpY0FjY291bnRJZGVudGl0eUtleXMoU3RyaW5nKG1hc3RlclhwcnYpLnRyaW0oKSwgZmFicmljQWNjb3VudEluZGV4LCAwKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hc3RlclhwdWIgPSBmYWJyaWNSb290WHB1YkZyb21NYXN0ZXJYcHJ2KFN0cmluZyhtYXN0ZXJYcHJ2KS50cmltKCkpO1xuICAgICAgICAgICAgICAgICAgbGV0IGhhc1N0b3JhZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc1N0b3JhZ2UgPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNTdG9yYWdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoIWhhc1N0b3JhZ2UpIHRocm93IG5ldyBFcnJvcignU2VjdXJlIHN0b3JhZ2Ugbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LicpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGxhaW50ZXh0UGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZmFicmljSWRlbnRpdHlNb2RlOiAnYWNjb3VudCcsXG4gICAgICAgICAgICAgICAgICAgIGZhYnJpY0FjY291bnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbWFzdGVyWHB1YixcbiAgICAgICAgICAgICAgICAgICAgbWFzdGVyWHBydjogU3RyaW5nKG1hc3RlclhwcnYpLnRyaW0oKSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRrLmlkLFxuICAgICAgICAgICAgICAgICAgICB4cHViOiBkay54cHViLFxuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZFByb3RlY3RlZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZW5jcnlwdExvY2FsSWRlbnRpdHlBdFJlc3QocGxhaW50ZXh0UGF5bG9hZCwgcHdkKTtcbiAgICAgICAgICAgICAgICAgIHdyaXRlU3RvcmFnZUpTT04oJ2ZhYnJpYy5pZGVudGl0eS5sb2NhbCcsIHBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc3RvcmVkUGF5bG9hZCA9IHJlYWRTdG9yYWdlSlNPTignZmFicmljLmlkZW50aXR5LmxvY2FsJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXRlcmlhbCA9IGRlY3J5cHRMb2NhbElkZW50aXR5TWFzdGVyTWF0ZXJpYWwoc3RvcmVkUGF5bG9hZCwgcHdkKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRJZGVudCA9IHVubG9ja2VkU2Vzc2lvbkZyb21EZWNyeXB0ZWRNYXN0ZXIobWF0ZXJpYWwsIHN0b3JlZFBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgc2V0TG9jYWxJZGVudGl0eShuZXh0SWRlbnQpO1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vbkxvY2FsSWRlbnRpdHlDaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMub25Mb2NhbElkZW50aXR5Q2hhbmdlKHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogbmV4dElkZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICAgIHhwdWI6IG5leHRJZGVudC54cHViLFxuICAgICAgICAgICAgICAgICAgICAgIHhwcnY6IG5leHRJZGVudC54cHJ2LFxuICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIGZhYnJpY0lkZW50aXR5TW9kZTogbmV4dElkZW50LmZhYnJpY0lkZW50aXR5TW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICBmYWJyaWNBY2NvdW50SW5kZXg6IG5leHRJZGVudC5mYWJyaWNBY2NvdW50SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgbWFzdGVyWHBydjogbmV4dElkZW50Lm1hc3RlclhwcnYsXG4gICAgICAgICAgICAgICAgICAgICAgbWFzdGVyWHB1YjogbmV4dElkZW50Lm1hc3RlclhwdWJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BzLm9uVW5sb2NrU3VjY2VzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5vblVubG9ja1N1Y2Nlc3MobmV4dElkZW50KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJlc2V0U2VlZFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW0lERU5USVRZXScsICdTYXZlIGxvY2FsIGlkZW50aXR5IGZhaWxlZDonLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKGUgJiYgZS5zdGFjaykgPyBlLnN0YWNrIDogKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKSk7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgIHNldEJ1c3koZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNpZ24taW5cIiAvPlxuICAgICAgICAgICAgICBMb2dpbiB3aXRoIHRoaXMgaWRlbnRpdHlcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogbG9naW5NZXRob2QgPT09IG51bGwgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgIENob29zZSBob3cgeW91IHdvdWxkIGxpa2UgdG8gY29ubmVjdDpcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAnMC43NWVtJywgbWF4V2lkdGg6IDMyMCB9fT5cbiAgICAgICAgICAgICAge2V4dGVuc2lvbkF2YWlsYWJsZSAmJiAhcHJvcHMucG9zdFNldHVwRmxvdyA/IChcbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICBmbHVpZFxuICAgICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17YnVzeX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtidXN5fVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTG9naW5XaXRoRXh0ZW5zaW9ufVxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJVc2UgaWRlbnRpdHkgZnJvbSB0aGUgRmFicmljIEh1YiBicm93c2VyIGV4dGVuc2lvblwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInB1enpsZSBwaWVjZVwiIC8+XG4gICAgICAgICAgICAgICAgICBMb2dpbiB3aXRoIEV4dGVuc2lvblxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAge3R5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICFwcm9wcy5wb3N0U2V0dXBGbG93ICYmICEod2luZG93LmZhYnJpY0Rlc2t0b3AgJiYgd2luZG93LmZhYnJpY0Rlc2t0b3AuaXNEZXNrdG9wU2hlbGwpID8gKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHByaW1hcnk9eyFleHRlbnNpb25BdmFpbGFibGV9XG4gICAgICAgICAgICAgICAgICBmbHVpZFxuICAgICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17YnVzeX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtidXN5fVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTG9naW5XaXRoRGVza3RvcH1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiT3BlbiB0aGUgRmFicmljIEh1YiBkZXNrdG9wIGFwcCB0byBzaWduIGluIHdpdGggdGhlIHNhbWUgaWRlbnRpdHkgYXMgdGhpcyBIdWIgbm9kZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImRlc2t0b3BcIiAvPlxuICAgICAgICAgICAgICAgICAgTG9nIGluIHdpdGggRmFicmljIEh1YiAoZGVza3RvcClcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBwcmltYXJ5PXshZXh0ZW5zaW9uQXZhaWxhYmxlICYmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhISh3aW5kb3cuZmFicmljRGVza3RvcCAmJiB3aW5kb3cuZmFicmljRGVza3RvcC5pc0Rlc2t0b3BTaGVsbCkpfVxuICAgICAgICAgICAgICAgIGZsdWlkXG4gICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRMb2dpbk1ldGhvZCgnZXhpc3RpbmcnKX1cbiAgICAgICAgICAgICAgICBjb2xvcj0nYmx1ZSdcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJrZXlcIiAvPlxuICAgICAgICAgICAgICAgIEV4aXN0aW5nIEtleVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGZsdWlkXG4gICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRMb2dpbk1ldGhvZCgnZ2VuZXJhdGUnKX1cbiAgICAgICAgICAgICAgICBjb2xvcj0nZ3JlZW4nXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2hpZWxkXCIgLz5cbiAgICAgICAgICAgICAgICBHZW5lcmF0ZSBOZXcgSWRlbnRpdHlcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIHshcHJvcHMucG9zdFNldHVwRmxvdyA/IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGZsdWlkXG4gICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBzZXRMb2dpbk1ldGhvZCgnaW1wb3J0Jyk7XG4gICAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGNvbG9yPSdwdXJwbGUnXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZG93bmxvYWRcIiAvPlxuICAgICAgICAgICAgICAgIExvYWQgZnJvbSBCYWNrdXBcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgZmx1aWRcbiAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldExvZ2luTWV0aG9kKCdyZXN0b3JlTW5lbW9uaWMnKTtcbiAgICAgICAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgdGl0bGU9XCJSZXN0b3JlIHRoZSBzYW1lIGtleXMgYXMgb3RoZXIgQklQMzkgd2FsbGV0cyB1c2luZyB5b3VyIHJlY292ZXJ5IHdvcmRzXCJcbiAgICAgICAgICAgICAgICBjb2xvcj0nYmxhY2snXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiaGlzdG9yeVwiIC8+XG4gICAgICAgICAgICAgICAgUmVzdG9yZSBmcm9tIFNlZWQgUGhyYXNlXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBsb2dpbk1ldGhvZCA9PT0gJ2V4aXN0aW5nJyA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQmFjayB0byBzaWduLWluIG9wdGlvbnNcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgYmFja1RvTG9naW5DaG9vc2VyKCk7XG4gICAgICAgICAgICAgICAgc2V0WHB1YklucHV0KCcnKTtcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICBDaGFuZ2UgbWV0aG9kXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwia2V5XCIgLz5cbiAgICAgICAgICAgICAgPEhlYWRlci5Db250ZW50PlVzZSBFeGlzdGluZyBLZXk8L0hlYWRlci5Db250ZW50PlxuICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICBQYXN0ZSB5b3VyIGV4dGVuZGVkIHB1YmxpYyBrZXkgKHhwdWIpIHRvIGNvbm5lY3QuIEl0IHdpbGwgYmUgc3RvcmVkIG9ubHkgaW4gdGhpcyBicm93c2VyLlxuICAgICAgICAgICAgICBZb3UgY2FuIHRyYWNrIGJhbGFuY2UgYW5kIHJlY2VpdmUgYWRkcmVzc2VzIGFnYWluc3QgdGhpcyB4cHViOyB5b3UgPHN0cm9uZz5jYW5ub3Q8L3N0cm9uZz4gZGVjcnlwdCBlbmNyeXB0ZWQgZG9jdW1lbnRzLCBzaWduIHB1Ymxpc2hlcywgb3Igc3BlbmQgZnJvbSB0aGlzIGJyb3dzZXIgd2l0aG91dCBpbXBvcnRpbmcgdGhlIG1hdGNoaW5nIHNlZWQgb3IgdXNpbmcgZGVza3RvcCAvIGV4dGVuc2lvbiBzaWduaW5nLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5FeHRlbmRlZCBwdWJsaWMga2V5ICh4cHViKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPEZvcm0uVGV4dEFyZWFcbiAgICAgICAgICAgICAgICAgIHJvd3M9ezJ9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogJzEwMCUnLCByZXNpemU6ICd2ZXJ0aWNhbCcsIGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBhc3RlIHlvdXIgZXh0ZW5kZWQgcHVibGljIGtleSAoeHB1YinigKZcIlxuICAgICAgICAgICAgICAgICAgc3BlbGxDaGVjaz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICBhdXRvQ29ycmVjdD1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICBhdXRvQ2FwaXRhbGl6ZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3hwdWJJbnB1dH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0WHB1YklucHV0KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHByaW1hcnlcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJyB9fVxuICAgICAgICAgICAgICBsb2FkaW5nPXtidXN5fVxuICAgICAgICAgICAgICBkaXNhYmxlZD17YnVzeSB8fCAheHB1YklucHV0fVxuICAgICAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgICAgICAgICAgc2V0QnVzeSh0cnVlKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmF3ID0gKHhwdWJJbnB1dCB8fCAnJykudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgaWYgKCFyYXcpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoJ1BsZWFzZSBwYXN0ZSBhbiB4cHViIHRvIGNvbnRpbnVlLicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IG5ldyBLZXkoeyB4cHViOiByYXcgfSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpZGVudGl0eSA9IG5ldyBJZGVudGl0eShrZXkpO1xuXG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaGFzU3RvcmFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIGhhc1N0b3JhZ2UgPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaGFzU3RvcmFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNTdG9yYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgd3JpdGVTdG9yYWdlSlNPTignZmFicmljLmlkZW50aXR5LmxvY2FsJywgeyB4cHViOiBrZXkueHB1YiB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgICAgICAgICAgICAgc2V0TG9jYWxJZGVudGl0eSh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBpZGVudGl0eS5pZCxcbiAgICAgICAgICAgICAgICAgICAgeHB1Yjoga2V5LnhwdWIsXG4gICAgICAgICAgICAgICAgICAgIHhwcnY6IG51bGxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgcmVzZXRTZWVkU3RhdGUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbSURFTlRJVFldJywgJ0FjdGl2YXRlIHhwdWIgZmFpbGVkOicsIHNhZmVJZGVudGl0eUVycihlKSk7XG4gICAgICAgICAgICAgICAgICBzZXRFcnJvcigoZSAmJiBlLnN0YWNrKSA/IGUuc3RhY2sgOiAoZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgc2V0QnVzeShmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2lnbi1pblwiIC8+XG4gICAgICAgICAgICAgIEFjdGl2YXRlIHhwdWJcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogbG9naW5NZXRob2QgPT09ICdpbXBvcnQnID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJCYWNrIHRvIHNpZ24taW4gb3B0aW9uc1wiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBiYWNrVG9Mb2dpbkNob29zZXIoKTtcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICBDaGFuZ2UgbWV0aG9kXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZG93bmxvYWRcIiAvPlxuICAgICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+SW1wb3J0IEJhY2t1cDwvSGVhZGVyLkNvbnRlbnQ+XG4gICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgIFNlbGVjdCBhIEZhYnJpYyBpZGVudGl0eSBiYWNrdXAgZmlsZSAoSlNPTikgZnJvbSB0aGlzIGFwcCDigJQgPHN0cm9uZz5wbGFpbnRleHQ8L3N0cm9uZz4gYmFja3Vwcywgb3IgPHN0cm9uZz5lbmNyeXB0ZWQ8L3N0cm9uZz4gKHZlcnNpb24gMjsgc2V0IHRoZSBwYXNzd29yZCBmaWVsZCBmaXJzdCksIG9yIEpTT04gdGhhdCBpbmNsdWRlcyA8Y29kZT54cHJ2PC9jb2RlPiAvIDxjb2RlPnhwdWI8L2NvZGU+LCBvciA8c3Ryb25nPm1uZW1vbmljPC9zdHJvbmc+IChwbHVzIG9wdGlvbmFsIDxjb2RlPmJpcDM5UGFzc3BocmFzZTwvY29kZT4gLyA8Y29kZT5wYXNzcGhyYXNlPC9jb2RlPikuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8Rm9ybS5GaWVsZCBzdHlsZT17eyBtYXhXaWR0aDogJzQycmVtJywgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJmYWJyaWMtaW1wb3J0LWJhY2t1cC1wd2RcIj5FbmNyeXB0ZWQgYmFja3VwIHBhc3N3b3JkIChvbmx5IGlmIHRoZSBmaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCk8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBpZD1cImZhYnJpYy1pbXBvcnQtYmFja3VwLXB3ZFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtpbXBvcnRCYWNrdXBGaWxlUGFzc3dvcmR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRJbXBvcnRCYWNrdXBGaWxlUGFzc3dvcmQoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiAnMTAwJScsIG1heFdpZHRoOiAzNjAsIHBhZGRpbmc6ICcwLjU1ZW0nLCBib3hTaXppbmc6ICdib3JkZXItYm94JyB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgYWNjZXB0PVwiLmpzb24sYXBwbGljYXRpb24vanNvbix0ZXh0LypcIlxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGV2ZW50ICYmIGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuZmlsZXMgJiYgZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgICAgICAgICAgICAgIGlmICghZmlsZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKHJlYWRlci5yZXN1bHQgfHwgJycpO1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBkYXRhLnZlcnNpb24gPT09IDIgJiYgZGF0YS5jaXBoZXJ0ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwd2RJbXAgPSBTdHJpbmcoaW1wb3J0QmFja3VwRmlsZVBhc3N3b3JkIHx8ICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXB3ZEltcCB8fCBwd2RJbXAubGVuZ3RoIDwgOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcignVGhpcyBmaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZC4gRW50ZXIgdGhlIGJhY2t1cCBwYXNzd29yZCAobWluIDggY2hhcmFjdGVycykgYWJvdmUgYW5kIHNlbGVjdCB0aGUgZmlsZSBhZ2Fpbi4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGF3YWl0IGRlY3J5cHRGYWJyaWNJZGVudGl0eUJhY2t1cFRvUGF5bG9hZChkYXRhLCBwd2RJbXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZGVjRXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yKGRlY0VyciAmJiBkZWNFcnIubWVzc2FnZSA/IGRlY0Vyci5tZXNzYWdlIDogJ0NvdWxkIG5vdCBkZWNyeXB0IGJhY2t1cC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS50eXBlID09PSAnZmFicmljLWlkZW50aXR5LWJhY2t1cC1pbm5lcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEueHBydiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGEuYmFja3VwU2NvcGUgPT09ICdmYWJyaWNBY2NvdW50U3VidHJlZScgfHwgZGF0YS5mYWJyaWNIZFJvbGUgPT09ICdhY2NvdW50Tm9kZScpXG4gICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzU3RvcmFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzU3RvcmFnZSA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1N0b3JhZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdCA9IGlkZW50aXR5RnJvbUZhYnJpY1Byb3RvY29sU2lnbmluZ1hwcnYoU3RyaW5nKGRhdGEueHBydikudHJpbSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5pZCAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyhkYXRhLmlkKS50cmltKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKGRhdGEuaWQpLnRyaW0oKSAhPT0gU3RyaW5nKG1hdC5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcignQmFja3VwIGlkZW50aXR5IGlkIGRvZXMgbm90IG1hdGNoIGtleSBtYXRlcmlhbC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmFicmljQWNjb3VudEluZGV4ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mYWJyaWNBY2NvdW50SW5kZXggIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTWF0aC5mbG9vcihOdW1iZXIoZGF0YS5mYWJyaWNBY2NvdW50SW5kZXgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlZFBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZhYnJpY0lkZW50aXR5TW9kZTogJ2FjY291bnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmYWJyaWNIZFJvbGU6ICdhY2NvdW50Tm9kZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZhYnJpY0FjY291bnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1hdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeHB1YjogbWF0LnhwdWIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTdG9yYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlU3RvcmFnZUpTT04oJ2ZhYnJpYy5pZGVudGl0eS5sb2NhbCcsIHN0b3JlZFBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dElkZW50aXR5ID0gdW5sb2NrZWRTZXNzaW9uRnJvbURlY3J5cHRlZE1hc3RlcihtYXQueHBydiwgc3RvcmVkUGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbElkZW50aXR5KG5leHRJZGVudGl0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFNlZWRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vbkxvY2FsSWRlbnRpdHlDaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMub25Mb2NhbElkZW50aXR5Q2hhbmdlKG5leHRJZGVudGl0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BzLm9uVW5sb2NrU3VjY2VzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vblVubG9ja1N1Y2Nlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBTdHJpbmcobWF0LmlkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cHViOiBTdHJpbmcobWF0LnhwdWIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhwcnY6IFN0cmluZyhtYXQueHBydiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmRQcm90ZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhYnJpY0lkZW50aXR5TW9kZTogJ2FjY291bnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhYnJpY0hkUm9sZTogJ2FjY291bnROb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWJyaWNBY2NvdW50SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHhwcnYgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGxldCB4cHViID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEueHBydikgeHBydiA9IFN0cmluZyhkYXRhLnhwcnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEueHB1YikgeHB1YiA9IFN0cmluZyhkYXRhLnhwdWIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VlZFBocmFzZSA9IChkYXRhLm1uZW1vbmljICE9IG51bGwgJiYgU3RyaW5nKGRhdGEubW5lbW9uaWMpLnRyaW0oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTdHJpbmcoZGF0YS5tbmVtb25pYykudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogKChkYXRhLnNlZWQgIT0gbnVsbCAmJiBTdHJpbmcoZGF0YS5zZWVkKS50cmltKCkpID8gU3RyaW5nKGRhdGEuc2VlZCkudHJpbSgpIDogJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF4cHJ2ICYmIHNlZWRQaHJhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHQgPSAoZGF0YS5iaXAzOVBhc3NwaHJhc2UgIT0gbnVsbCAmJiBTdHJpbmcoZGF0YS5iaXAzOVBhc3NwaHJhc2UpLnRyaW0oKSAhPT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFN0cmluZyhkYXRhLmJpcDM5UGFzc3BocmFzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKChkYXRhLnBhc3NwaHJhc2UgIT0gbnVsbCAmJiBTdHJpbmcoZGF0YS5wYXNzcGhyYXNlKS50cmltKCkgIT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFN0cmluZyhkYXRhLnBhc3NwaHJhc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRlbnQgPSBleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IElkZW50aXR5KHsgc2VlZDogc2VlZFBocmFzZSwgcGFzc3BocmFzZTogZXh0IH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBJZGVudGl0eSh7IHNlZWQ6IHNlZWRQaHJhc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeHBydiA9IGlkZW50LmtleS54cHJ2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhwdWIgPSBpZGVudC5rZXkueHB1YjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAobW5FcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigobW5FcnIgJiYgbW5FcnIubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYENvdWxkIG5vdCByZXN0b3JlIGZyb20gbW5lbW9uaWMgaW4gZmlsZTogJHttbkVyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ0NvdWxkIG5vdCByZXN0b3JlIGZyb20gbW5lbW9uaWMgaW4gZmlsZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgheHBydiB8fCAheHB1Yikge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1YcHJ2ID0gdGV4dC5tYXRjaCgvKHhwcnZbMC05QS1aYS16XSspLyk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbVhwdWIgPSB0ZXh0Lm1hdGNoKC8oeHB1YlswLTlBLVphLXpdKykvKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAobVhwcnYgJiYgbVhwcnZbMV0pIHhwcnYgPSBtWHBydlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAobVhwdWIgJiYgbVhwdWJbMV0pIHhwdWIgPSBtWHB1YlsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgheHBydiAmJiAheHB1Yikge1xuICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yKCdDb3VsZCBub3QgZmluZCBhbiB4cHJ2IG9yIHhwdWIgaW4gdGhlIHNlbGVjdGVkIGZpbGUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpZGVudGl0eSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4cHJ2KSB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV3IEtleSh7IHhwcnYgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgaWRlbnRpdHkgPSBuZXcgSWRlbnRpdHkoeyB4cHJ2IH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhwdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBuZXcgS2V5KHsgeHB1YiB9KTtcbiAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eSA9IG5ldyBJZGVudGl0eShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXkgfHwgIWlkZW50aXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoJ0ZhaWxlZCB0byByZWNvbnN0cnVjdCBpZGVudGl0eSBmcm9tIGJhY2t1cCBmaWxlLicpO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1N0b3JhZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzU3RvcmFnZSA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzU3RvcmFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhwcnYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVTdG9yYWdlSlNPTignZmFicmljLmlkZW50aXR5LmxvY2FsJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZGVudGl0eS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cHViOiBrZXkueHB1YixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZFByb3RlY3RlZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVN0b3JhZ2VKU09OKCdmYWJyaWMuaWRlbnRpdHkubG9jYWwnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkZW50aXR5LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhwdWI6IGtleS54cHViLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dElkZW50aXR5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZGVudGl0eS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICB4cHViOiBrZXkueHB1YixcbiAgICAgICAgICAgICAgICAgICAgICB4cHJ2OiB4cHJ2IHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmRQcm90ZWN0ZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxJZGVudGl0eShuZXh0SWRlbnRpdHkpO1xuICAgICAgICAgICAgICAgICAgICByZXNldFNlZWRTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BzLm9uTG9jYWxJZGVudGl0eUNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgIHByb3BzLm9uTG9jYWxJZGVudGl0eUNoYW5nZShuZXh0SWRlbnRpdHkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh4cHJ2ICYmIHR5cGVvZiBwcm9wcy5vblVubG9ja1N1Y2Nlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5vblVubG9ja1N1Y2Nlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFN0cmluZyhpZGVudGl0eS5pZCksXG4gICAgICAgICAgICAgICAgICAgICAgICB4cHViOiBTdHJpbmcoa2V5LnhwdWIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgeHBydjogU3RyaW5nKHhwcnYpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmRQcm90ZWN0ZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW0lERU5USVRZXScsICdJbXBvcnQgYmFja3VwIGZhaWxlZDonLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigoZSAmJiBlLm1lc3NhZ2UpID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEJ1c3koZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0QnVzeShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICBzZXRFcnJvcignRmFpbGVkIHRvIHJlYWQgYmFja3VwIGZpbGUuJyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiBsb2dpbk1ldGhvZCA9PT0gJ3Jlc3RvcmVNbmVtb25pYycgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkJhY2sgdG8gc2lnbi1pbiBvcHRpb25zXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIGJhY2tUb0xvZ2luQ2hvb3NlcigpO1xuICAgICAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgIHNldERldk1uZW1vbmljVGV4dCgnJyk7XG4gICAgICAgICAgICAgICAgc2V0RGV2QmlwMzlQYXNzcGhyYXNlKCcnKTtcbiAgICAgICAgICAgICAgICBzZXREZXZNbmVtb25pY1JlcGxhY2UoZmFsc2UpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYXJyb3cgbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIENoYW5nZSBtZXRob2RcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJoaXN0b3J5XCIgLz5cbiAgICAgICAgICAgICAgPEhlYWRlci5Db250ZW50PlJlc3RvcmUgd2l0aCByZWNvdmVyeSBwaHJhc2U8L0hlYWRlci5Db250ZW50PlxuICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICA8TWVzc2FnZSBpbmZvIHN0eWxlPXt7IG1heFdpZHRoOiAnNDJyZW0nIH19PlxuICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+SG93IHRoaXMgd29ya3M8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjVlbSAwIDAnLCBsaW5lSGVpZ2h0OiAxLjUgfX0+XG4gICAgICAgICAgICAgICAgRW50ZXIgeW91ciA8c3Ryb25nPkJJUDM5IHJlY292ZXJ5IHBocmFzZTwvc3Ryb25nPiAodXN1YWxseSAxMiBvciAyNCB3b3JkcykuIElmIHlvdSB1c2VkIGFuIG9wdGlvbmFsXG4gICAgICAgICAgICAgICAgPHN0cm9uZz4gZXh0ZW5zaW9uIHBhc3NwaHJhc2U8L3N0cm9uZz4gKHNvbWV0aW1lcyBjYWxsZWQgYSAyNXRoIHdvcmQpIHdoZW4gdGhlIHdhbGxldCB3YXMgY3JlYXRlZCwgYWRkIGl0IGJlbG934oCUdGhpcyBpc1xuICAgICAgICAgICAgICAgIDxlbT4gbm90PC9lbT4gdGhlIHNhbWUgYXMgdGhlIG9wdGlvbmFsIGVuY3J5cHRpb24gcGFzc3dvcmQgeW91IG1heSBzZXQgYWZ0ZXIgZ2VuZXJhdGluZyBhIG5ldyBpZGVudGl0eSBpbiBGYWJyaWMuXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC42NWVtIDAgMCcsIGxpbmVIZWlnaHQ6IDEuNSB9fT5cbiAgICAgICAgICAgICAgICBGYWJyaWMgZGVyaXZlcyB0aGUgc2FtZSBtYXN0ZXIga2V5IGFzIDxzdHJvbmc+R2VuZXJhdGUgTmV3IElkZW50aXR5PC9zdHJvbmc+IGFuZCBvdGhlciBzdGFuZGFyZCBCSVAzOSBzb2Z0d2FyZS5cbiAgICAgICAgICAgICAgICBQcmVmZXIgaW1wb3J0aW5nIHRoZSA8c3Ryb25nPnhwcnY8L3N0cm9uZz4gb3IgSlNPTiBiYWNrdXAgd2hlbiB5b3UgaGF2ZSBpdCAoc2luZ2xlIGJyYW5jaCwgZmV3ZXIgdHlwb3Mp4oCUdXNlIDxzdHJvbmc+SW1wb3J0IEJhY2t1cDwvc3Ryb25nPi5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjY1ZW0gMCAwJywgbGluZUhlaWdodDogMS41IH19PlxuICAgICAgICAgICAgICAgIElmIHlvdSBlbnRlciB0aGUgPHN0cm9uZz53cm9uZzwvc3Ryb25nPiBleHRlbnNpb24gcGFzc3BocmFzZSAob3Igb21pdCBvbmUgdGhhdCB3YXMgdXNlZCBvcmlnaW5hbGx5KSwgZGVyaXZhdGlvbiBzdGlsbCBzdWNjZWVkcyBidXQgeW91IGdldCBheycgJ31cbiAgICAgICAgICAgICAgICA8ZW0+ZGlmZmVyZW50PC9lbT4gd2FsbGV0IGlkZW50aXR54oCUdGhlcmUgaXMgbm8gc2VwYXJhdGUg4oCcd3JvbmcgcGFzc3dvcmTigJ0gZXJyb3IsIGJ5IEJJUDM5IGRlc2lnbi4gRG91YmxlLWNoZWNrIGFnYWluc3QgYW4gZXhwZWN0ZWQgYWRkcmVzcyBvciBpZCB3aGVuIHJlc3RvcmluZy5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiZmFicmljLXJlc3RvcmUtbW5lbW9uaWNcIj5SZWNvdmVyeSBwaHJhc2U8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxGb3JtLlRleHRBcmVhXG4gICAgICAgICAgICAgICAgICBpZD1cImZhYnJpYy1yZXN0b3JlLW1uZW1vbmljXCJcbiAgICAgICAgICAgICAgICAgIHJvd3M9ezN9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogJzEwMCUnLCByZXNpemU6ICd2ZXJ0aWNhbCcsIGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgQklQMzkgd29yZHMgc2VwYXJhdGVkIGJ5IHNwYWNlc+KAplwiXG4gICAgICAgICAgICAgICAgICBzcGVsbENoZWNrPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIGF1dG9Db3JyZWN0PVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgIGF1dG9DYXBpdGFsaXplPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17ZGV2TW5lbW9uaWNUZXh0fVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXREZXZNbmVtb25pY1RleHQoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJmYWJyaWMtcmVzdG9yZS1iaXAzOS1wYXNzXCI+RXh0ZW5zaW9uIHBhc3NwaHJhc2UgKG9wdGlvbmFsKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPEZvcm0uSW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwiZmFicmljLXJlc3RvcmUtYmlwMzktcGFzc1wiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJPbmx5IGlmIHlvdXIgd2FsbGV0IHVzZWQgYSBwYXNzcGhyYXNlIHdpdGggdGhlIHBocmFzZVwiXG4gICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2RldkJpcDM5UGFzc3BocmFzZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0RGV2QmlwMzlQYXNzcGhyYXNlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxGb3JtLkNoZWNrYm94XG4gICAgICAgICAgICAgICAgbGFiZWw9XCJSZXBsYWNlIHRoZSBpZGVudGl0eSBhbHJlYWR5IHN0b3JlZCBpbiB0aGlzIGJyb3dzZXJcIlxuICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2Rldk1uZW1vbmljUmVwbGFjZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIGQpID0+IHNldERldk1uZW1vbmljUmVwbGFjZSghIShkICYmIGQuY2hlY2tlZCkpfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJSZXBsYWNlIHRoZSBpZGVudGl0eSBhbHJlYWR5IHN0b3JlZCBpbiB0aGlzIGJyb3dzZXJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19XG4gICAgICAgICAgICAgIGxvYWRpbmc9e2J1c3l9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtidXN5IHx8ICFTdHJpbmcoZGV2TW5lbW9uaWNUZXh0IHx8ICcnKS50cmltKCl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICBzZXRCdXN5KHRydWUpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB7IHN0b3JlVW5sb2NrZWRJZGVudGl0eUZyb21NbmVtb25pYyB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0Jyb3dzZXJJZGVudGl0eURldicpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgciA9IHN0b3JlVW5sb2NrZWRJZGVudGl0eUZyb21NbmVtb25pYyh7XG4gICAgICAgICAgICAgICAgICAgIHNlZWQ6IGRldk1uZW1vbmljVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgcGFzc3BocmFzZTogZGV2QmlwMzlQYXNzcGhyYXNlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZm9yY2U6IGRldk1uZW1vbmljUmVwbGFjZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZiAoIXIub2sgfHwgIXIuaWRlbnRpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3Ioci5lcnJvciB8fCAnUmVzdG9yZSBmYWlsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dElkZW50aXR5ID0ge1xuICAgICAgICAgICAgICAgICAgICBpZDogci5pZGVudGl0eS5pZCxcbiAgICAgICAgICAgICAgICAgICAgeHB1Yjogci5pZGVudGl0eS54cHViLFxuICAgICAgICAgICAgICAgICAgICB4cHJ2OiByLmlkZW50aXR5LnhwcnYsXG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIHNldExvY2FsSWRlbnRpdHkobmV4dElkZW50aXR5KTtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcHMub25Mb2NhbElkZW50aXR5Q2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm9uTG9jYWxJZGVudGl0eUNoYW5nZShuZXh0SWRlbnRpdHkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5vblVubG9ja1N1Y2Nlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMub25VbmxvY2tTdWNjZXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogU3RyaW5nKHIuaWRlbnRpdHkuaWQpLFxuICAgICAgICAgICAgICAgICAgICAgIHhwdWI6IFN0cmluZyhyLmlkZW50aXR5LnhwdWIpLFxuICAgICAgICAgICAgICAgICAgICAgIHhwcnY6IFN0cmluZyhyLmlkZW50aXR5LnhwcnYpLFxuICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJlc2V0U2VlZFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignW0lERU5USVRZXScsICdSZWNvdmVyeSBwaHJhc2UgcmVzdG9yZSBmYWlsZWQ6Jywgc2FmZUlkZW50aXR5RXJyKGUpKTtcbiAgICAgICAgICAgICAgICAgIHNldEVycm9yKChlICYmIGUubWVzc2FnZSkgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjaGVjayBjaXJjbGVcIiAvPlxuICAgICAgICAgICAgICBSZXN0b3JlIGFuZCB1bmxvY2tcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogbG9naW5NZXRob2QgPT09ICdnZW5lcmF0ZScgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkJhY2sgdG8gc2lnbi1pbiBvcHRpb25zXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIGJhY2tUb0xvZ2luQ2hvb3NlcigpO1xuICAgICAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYXJyb3cgbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIENoYW5nZSBtZXRob2RcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzaGllbGRcIiAvPlxuICAgICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+R2VuZXJhdGUgTmV3IElkZW50aXR5PC9IZWFkZXIuQ29udGVudD5cbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgICAgQ3JlYXRlIGEgbmV3IGlkZW50aXR5IHdpdGggYSAxMi13b3JkIHNlZWQgcGhyYXNlLiBUaGlzIGhhcHBlbnMgbG9jYWxseSBhbmQgbmV2ZXIgbGVhdmVzIHlvdXIgZGV2aWNlLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICBsb2FkaW5nPXtidXN5fVxuICAgICAgICAgICAgICBkaXNhYmxlZD17YnVzeX1cbiAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xuICAgICAgICAgICAgICAgIHNldFBlbmRpbmdTZWVkKG51bGwpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBnZW5lcmF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gbmV3IEtleSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleS5tbmVtb25pYyB8fCAha2V5LnhwcnYpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleSBkaWQgbm90IHByb2R1Y2UgbW5lbW9uaWMveHBydi4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGF5ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTUwMCkpO1xuICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gZ2VuZXJhdGUoKTtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5O1xuICAgICAgICAgICAgICAgICAgc2V0UGVuZGluZ1NlZWQoe1xuICAgICAgICAgICAgICAgICAgICBtbmVtb25pYzoga2V5Lm1uZW1vbmljLFxuICAgICAgICAgICAgICAgICAgICB4cHJ2OiBrZXkueHBydlxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBzZXRTZWVkQ29uZmlybWVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIHNldElkZW50aXR5UGFzc3dvcmQoJycpO1xuICAgICAgICAgICAgICAgICAgc2V0SWRlbnRpdHlQYXNzd29yZENvbmZpcm0oJycpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tJREVOVElUWV0nLCAnR2VuZXJhdGUgaWRlbnRpdHkgZmFpbGVkOicsIHNhZmVJZGVudGl0eUVycihlKSk7XG4gICAgICAgICAgICAgICAgICBzZXRFcnJvcigoZSAmJiBlLnN0YWNrKSA/IGUuc3RhY2sgOiAoZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIHNldEJ1c3koZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNoaWVsZFwiIC8+XG4gICAgICAgICAgICAgIEdlbmVyYXRlIG5ldyBpZGVudGl0eSAoMTLigJF3b3JkIHNlZWQpXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHtlcnJvciAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmUgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5FcnJvcjwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICA8cHJlIHN0eWxlPXt7IG1hcmdpbjogJzAuNWVtIDAgMCcsIHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLCBmb250U2l6ZTogJzAuODVlbScgfX0+XG4gICAgICAgICAgICAgIHtlcnJvcn1cbiAgICAgICAgICAgIDwvcHJlPlxuICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvU2VnbWVudD5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBJZGVudGl0eU1hbmFnZXI7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3JlZ2VuZXJhdG9yIiwiZSIsInQiLCJyIiwibiIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibmV4dCIsImlzQXJyYXkiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJLZXkiLCJJZGVudGl0eSIsIl9yZXF1aXJlMiIsIkFjY29yZGlvbiIsIkJ1dHRvbiIsIkNoZWNrYm94IiwiRGl2aWRlciIsIkZvcm0iLCJIZWFkZXIiLCJJY29uIiwiTGFiZWwiLCJNZXNzYWdlIiwiTW9kYWwiLCJTZWdtZW50IiwiX3JlcXVpcmUzIiwiREVMRUdBVElPTl9TVE9SQUdFX0tFWSIsIm5vdGlmeURlbGVnYXRpb25TdG9yYWdlQ2hhbmdlZCIsIl9yZXF1aXJlNCIsInNhZmVJZGVudGl0eUVyciIsIl9yZXF1aXJlNSIsInJlYWRTdG9yYWdlSlNPTiIsInJlYWRTdG9yYWdlU3RyaW5nIiwid3JpdGVTdG9yYWdlSlNPTiIsInJlbW92ZVN0b3JhZ2VLZXkiLCJjbGVhckZhYnJpY0Jyb3dzZXJJZGVudGl0eUxvY2FsIiwiX3JlcXVpcmU2IiwiZW5jcnlwdEZhYnJpY0lkZW50aXR5QmFja3VwUGF5bG9hZCIsImRlY3J5cHRGYWJyaWNJZGVudGl0eUJhY2t1cFRvUGF5bG9hZCIsIl9yZXF1aXJlNyIsIkxPQ0FMX0lERU5USVRZX1BBU1NXT1JEX01JTiIsImJ1aWxkTG9jYWxGYWJyaWNJZGVudGl0eVBheWxvYWQiLCJmYWJyaWNQbGFpbnRleHRTaWduaW5nVW5sb2NrYWJsZSIsInVubG9ja2VkU2Vzc2lvbkZyb21EZWNyeXB0ZWRNYXN0ZXIiLCJlbmNyeXB0TG9jYWxJZGVudGl0eUF0UmVzdCIsImRlY3J5cHRMb2NhbElkZW50aXR5TWFzdGVyTWF0ZXJpYWwiLCJfcmVxdWlyZTgiLCJzdG9yZVVubG9ja2VkSWRlbnRpdHlGcm9tTW5lbW9uaWMiLCJfcmVxdWlyZTkiLCJyZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIiwiRmFicmljSHViQWRtaW5Ub2tlbk5vdGljZSIsIl9yZXF1aXJlMCIsImRlcml2ZUZhYnJpY0FjY291bnRJZGVudGl0eUtleXMiLCJmYWJyaWNSb290WHB1YkZyb21NYXN0ZXJYcHJ2IiwiaWRlbnRpdHlGcm9tRmFicmljUHJvdG9jb2xTaWduaW5nWHBydiIsIl9yZXF1aXJlMSIsInZlcmlmeUZhYnJpY0Rlc2t0b3BMb2dpblNpZ25lZFBheWxvYWQiLCJidWlsZEZhYnJpY0lkZW50aXR5U2lnbmVkUGF5bG9hZCIsIl9yZXF1aXJlMTAiLCJidWlsZERldmljZUxpbmtPZmZlck1lc3NhZ2UiLCJjcmVhdGVEZXZpY2VMaW5rT2ZmZXIiLCJmZXRjaERldmljZUxpbmtTZXNzaW9uIiwicG9zdERldmljZUxpbmtTaWduYXR1cmUiLCJfcmVxdWlyZTExIiwiU1RPUkFHRV9MSU5LRURfREVWSUNFUyIsInJlYWRMaW5rZWREZXZpY2VzIiwibWVyZ2VMaW5rZWREZXZpY2UiLCJwdWJsaXNoSHViSWRlbnRpdHlDcm9zc1NpZ24iLCJyZXZva2VMaW5rZWREZXZpY2UiLCJfcmVxdWlyZTEyIiwiYnVpbGRGYWJyaWNBY2NvdW50U3VidHJlZUJhY2t1cElubmVyIiwiX3JlcXVpcmUxMyIsIkRFRkFVTFRfTE9DS19USU1FT1VUX01JTlVURVMiLCJyZWFkRmFicmljSWRlbnRpdHlMb2NrVGltZW91dE1pbnV0ZXMiLCJ3cml0ZUZhYnJpY0lkZW50aXR5TG9ja1RpbWVvdXRNaW51dGVzIiwibG9ja1RpbWVvdXRNaW51dGVzVG9NcyIsImlkZW50aXR5TW9ub3NwYWNlQmxvY2tTdHlsZSIsImRpc3BsYXkiLCJtYXJnaW4iLCJwYWRkaW5nIiwibWF4V2lkdGgiLCJib3hTaXppbmciLCJmb250U2l6ZSIsImxpbmVIZWlnaHQiLCJ3aGl0ZVNwYWNlIiwid29yZEJyZWFrIiwib3ZlcmZsb3dXcmFwIiwiZm9udEZhbWlseSIsImJhY2tncm91bmQiLCJib3JkZXJSYWRpdXMiLCJib3JkZXIiLCJvdmVyZmxvd1giLCJJZGVudGl0eU1hbmFnZXIiLCJwcm9wcyIsImxvY2tUaW1lb3V0TXNGcm9tVGVzdHMiLCJsb2NrVGltZW91dE1zIiwiX1JlYWN0JHVzZVN0YXRlIiwidXNlU3RhdGUiLCJ3aW5kb3ciLCJfUmVhY3QkdXNlU3RhdGUyIiwibG9ja1RpbWVvdXRNaW51dGVzIiwic2V0TG9ja1RpbWVvdXRNaW51dGVzIiwic3VwcHJlc3NGb3JnZXQiLCJzdXBwcmVzc0ZvcmdldEFuZExpbmtlZENocm9tZSIsIl9SZWFjdCR1c2VTdGF0ZTMiLCJjdXJyZW50SWRlbnRpdHkiLCJpZCIsInhwdWIiLCJ4cHJ2IiwicGFzc3dvcmRQcm90ZWN0ZWQiLCJwbGFpbnRleHRVbmxvY2tBdmFpbGFibGUiLCJsaW5rZWRGcm9tRGVza3RvcCIsImZhYnJpY0lkZW50aXR5TW9kZSIsImZhYnJpY0FjY291bnRJbmRleCIsIk1hdGgiLCJmbG9vciIsInVuZGVmaW5lZCIsImZhYnJpY0hkUm9sZSIsIm1hc3RlclhwcnYiLCJtYXN0ZXJYcHViIiwiaGFzU3RvcmFnZSIsInBhcnNlZCIsImJsIiwicmVzb2x2ZWQiLCJyZWNvcmQiLCJjb25zb2xlIiwid2FybiIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJsb2NhbElkZW50aXR5Iiwic2V0TG9jYWxJZGVudGl0eSIsIl9SZWFjdCR1c2VTdGF0ZTUiLCJfUmVhY3QkdXNlU3RhdGU2IiwiYnVzeSIsInNldEJ1c3kiLCJfUmVhY3QkdXNlU3RhdGU3IiwiX1JlYWN0JHVzZVN0YXRlOCIsImVycm9yIiwic2V0RXJyb3IiLCJfUmVhY3QkdXNlU3RhdGU5IiwiX1JlYWN0JHVzZVN0YXRlMCIsInNob3dDb25maXJtRm9yZ2V0Iiwic2V0U2hvd0NvbmZpcm1Gb3JnZXQiLCJfUmVhY3QkdXNlU3RhdGUxIiwiX1JlYWN0JHVzZVN0YXRlMTAiLCJzaWduYXR1cmUiLCJzZXRTaWduYXR1cmUiLCJfUmVhY3QkdXNlU3RhdGUxMSIsIl9SZWFjdCR1c2VTdGF0ZTEyIiwicGVuZGluZ1NlZWQiLCJzZXRQZW5kaW5nU2VlZCIsIl9SZWFjdCR1c2VTdGF0ZTEzIiwiX1JlYWN0JHVzZVN0YXRlMTQiLCJzZWVkQ29uZmlybWVkIiwic2V0U2VlZENvbmZpcm1lZCIsIl9SZWFjdCR1c2VTdGF0ZTE1IiwiX1JlYWN0JHVzZVN0YXRlMTYiLCJ4cHViSW5wdXQiLCJzZXRYcHViSW5wdXQiLCJfUmVhY3QkdXNlU3RhdGUxNyIsIl9SZWFjdCR1c2VTdGF0ZTE4IiwiaWRlbnRpdHlQYXNzd29yZCIsInNldElkZW50aXR5UGFzc3dvcmQiLCJfUmVhY3QkdXNlU3RhdGUxOSIsIl9SZWFjdCR1c2VTdGF0ZTIwIiwiaWRlbnRpdHlQYXNzd29yZENvbmZpcm0iLCJzZXRJZGVudGl0eVBhc3N3b3JkQ29uZmlybSIsIl9SZWFjdCR1c2VTdGF0ZTIxIiwiX1JlYWN0JHVzZVN0YXRlMjIiLCJ1bmxvY2tQYXNzd29yZCIsInNldFVubG9ja1Bhc3N3b3JkIiwiX1JlYWN0JHVzZVN0YXRlMjMiLCJfUmVhY3QkdXNlU3RhdGUyNCIsInBsYWludGV4dE1pZ3JhdGlvblBhc3N3b3JkIiwic2V0UGxhaW50ZXh0TWlncmF0aW9uUGFzc3dvcmQiLCJfUmVhY3QkdXNlU3RhdGUyNSIsIl9SZWFjdCR1c2VTdGF0ZTI2IiwicGxhaW50ZXh0TWlncmF0aW9uUGFzc3dvcmRDb25maXJtIiwic2V0UGxhaW50ZXh0TWlncmF0aW9uUGFzc3dvcmRDb25maXJtIiwiX1JlYWN0JHVzZVN0YXRlMjciLCJfUmVhY3QkdXNlU3RhdGUyOCIsImJhY2t1cEV4cG9ydFBhc3N3b3JkIiwic2V0QmFja3VwRXhwb3J0UGFzc3dvcmQiLCJfUmVhY3QkdXNlU3RhdGUyOSIsIl9SZWFjdCR1c2VTdGF0ZTMwIiwiYmFja3VwRXhwb3J0QnVzeSIsInNldEJhY2t1cEV4cG9ydEJ1c3kiLCJfUmVhY3QkdXNlU3RhdGUzMSIsIl9SZWFjdCR1c2VTdGF0ZTMyIiwiaW1wb3J0QmFja3VwRmlsZVBhc3N3b3JkIiwic2V0SW1wb3J0QmFja3VwRmlsZVBhc3N3b3JkIiwiX1JlYWN0JHVzZVN0YXRlMzMiLCJfUmVhY3QkdXNlU3RhdGUzNCIsImlzR2VuZXJhdGluZyIsInNldElzR2VuZXJhdGluZyIsIl9SZWFjdCR1c2VTdGF0ZTM1IiwiX1JlYWN0JHVzZVN0YXRlMzYiLCJzaG93U2VlZFBocmFzZSIsInNldFNob3dTZWVkUGhyYXNlIiwiX1JlYWN0JHVzZVN0YXRlMzciLCJfUmVhY3QkdXNlU3RhdGUzOCIsInNob3dCYWNrdXBLZXkiLCJzZXRTaG93QmFja3VwS2V5IiwiX1JlYWN0JHVzZVN0YXRlMzkiLCJpbml0aWFsTG9naW5NZXRob2QiLCJfUmVhY3QkdXNlU3RhdGU0MCIsImxvZ2luTWV0aG9kIiwic2V0TG9naW5NZXRob2QiLCJfUmVhY3QkdXNlU3RhdGU0MSIsIl9SZWFjdCR1c2VTdGF0ZTQyIiwiZGV2TW5lbW9uaWNUZXh0Iiwic2V0RGV2TW5lbW9uaWNUZXh0IiwiX1JlYWN0JHVzZVN0YXRlNDMiLCJfUmVhY3QkdXNlU3RhdGU0NCIsImRldkJpcDM5UGFzc3BocmFzZSIsInNldERldkJpcDM5UGFzc3BocmFzZSIsIl9SZWFjdCR1c2VTdGF0ZTQ1IiwiX1JlYWN0JHVzZVN0YXRlNDYiLCJkZXZNbmVtb25pY1JlcGxhY2UiLCJzZXREZXZNbmVtb25pY1JlcGxhY2UiLCJfUmVhY3QkdXNlU3RhdGU0NyIsIl9SZWFjdCR1c2VTdGF0ZTQ4IiwiYmFja3VwQWNrbm93bGVkZ2VkIiwic2V0QmFja3VwQWNrbm93bGVkZ2VkIiwiX1JlYWN0JHVzZVN0YXRlNDkiLCJfUmVhY3QkdXNlU3RhdGU1MCIsImRldmljZUxpbmtCdXN5Iiwic2V0RGV2aWNlTGlua0J1c3kiLCJfUmVhY3QkdXNlU3RhdGU1MSIsIl9SZWFjdCR1c2VTdGF0ZTUyIiwiZGV2aWNlTGlua09mZmVyIiwic2V0RGV2aWNlTGlua09mZmVyIiwiX1JlYWN0JHVzZVN0YXRlNTMiLCJfUmVhY3QkdXNlU3RhdGU1NCIsImRldmljZUxpbmtRciIsInNldERldmljZUxpbmtRciIsIl9SZWFjdCR1c2VTdGF0ZTU1IiwiX1JlYWN0JHVzZVN0YXRlNTYiLCJsaW5rZWREZXZpY2VzUmV2Iiwic2V0TGlua2VkRGV2aWNlc1JldiIsImRldmljZUxpbmtQb2xsUmVmIiwidXNlUmVmIiwibGlua2VkRGV2aWNlcyIsInVzZU1lbW8iLCJ1c2VFZmZlY3QiLCJ1cmwiLCJwcm90b2NvbFVybCIsImNhbmNlbGxlZCIsIlFSQ29kZSIsInRvRGF0YVVSTCIsIndpZHRoIiwiZXJyb3JDb3JyZWN0aW9uTGV2ZWwiLCJkYXRhIiwiXyIsInVzZXNEaXNrRW5jcnlwdGlvblBhc3N3b3JkRm9yQmFja3VwIiwicmVzb2x2ZUJhY2t1cEVuY3J5cHRpb25QYXNzd29yZCIsInVzZUNhbGxiYWNrIiwidHJpbSIsInJlc2V0U2VlZFN0YXRlIiwiYmFja1RvTG9naW5DaG9vc2VyIiwicG9zdFNldHVwRmxvdyIsImlzTG9ja2VkIiwicHJldkhhZFNpZ25pbmdLZXlSZWYiLCJoYXMiLCJjdXJyZW50Iiwic2hvdWxkVGltZWRSZWxvY2siLCJ0aW1lciIsInNldFRpbWVvdXQiLCJwcmV2IiwiY2xlYXJUaW1lb3V0IiwiaWRlbnRpdHlBbmNob3JLZXkiLCJhY2N0IiwibW9kZSIsImhkIiwiY29uY2F0IiwicGFyZW50SWRlbnRpdHlLZXkiLCJwcmV2SGFzWHBydiIsInBhcmVudEhhc1hwcnYiLCJuZWVkc0tleUZsb3ciLCJvbkxvY2FsSWRlbnRpdHlDaGFuZ2VSZWYiLCJvbkxvY2FsSWRlbnRpdHlDaGFuZ2UiLCJvbkxvY2tTdGF0ZUNoYW5nZVJlZiIsIm9uTG9ja1N0YXRlQ2hhbmdlIiwidXNlTGF5b3V0RWZmZWN0IiwiY2IiLCJwdyIsInBsYWluQXZhaWwiLCJfY2hyb21lJHN0b3JhZ2UiLCJfY2hyb21lJHJ1bnRpbWUiLCJjaHJvbWUiLCJzdG9yYWdlIiwibG9jYWwiLCJydW50aW1lIiwicGF5bG9hZCIsInNldCIsInJlbW92ZSIsIl9SZWFjdCR1c2VTdGF0ZTU3IiwiX1JlYWN0JHVzZVN0YXRlNTgiLCJleHRlbnNpb25BdmFpbGFibGUiLCJzZXRFeHRlbnNpb25BdmFpbGFibGUiLCJkZXNrdG9wUG9sbEludGVydmFsUmVmIiwiY2xlYXJJbnRlcnZhbCIsImNoZWNrIiwiX3dpbmRvdyRfX0ZBQlJJQ19IVUJfIiwiX19GQUJSSUNfSFVCX0VYVEVOU0lPTl9fIiwiaXNBdmFpbGFibGUiLCJoYW5kbGVMb2dpbldpdGhFeHRlbnNpb24iLCJfY2FsbGVlIiwiX3dpbmRvdyRfX0ZBQlJJQ19IVUJfMiIsImlkZW50aXR5IiwidG9TdG9yZSIsIl90IiwiX2NvbnRleHQiLCJnZXRJZGVudGl0eSIsIm9uVW5sb2NrU3VjY2VzcyIsIm1lc3NhZ2UiLCJoYW5kbGVMb2dpbldpdGhEZXNrdG9wIiwiX2NhbGxlZTMiLCJvcmlnaW4iLCJzZXNzaW9uSWQiLCJtYXhBdHRlbXB0cyIsImF0dGVtcHRzIiwicmVzIiwiX3QzIiwiX2NvbnRleHQzIiwiZmFicmljRGVza3RvcCIsImlzRGVza3RvcFNoZWxsIiwibG9jYXRpb24iLCJmZXRjaCIsIm1ldGhvZCIsImhlYWRlcnMiLCJBY2NlcHQiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImNhY2hlIiwianNvbiIsIm9rIiwiRXJyb3IiLCJlbmNvZGVVUklDb21wb25lbnQiLCJzZXRJbnRlcnZhbCIsIl9jYWxsZWUyIiwiaiIsImxvZ2luVmVyaWZ5IiwicmlkIiwiayIsImlkZW50IiwicmVzb2x2ZWRJZCIsIl90MiIsIl9jb250ZXh0MiIsInN0YXR1cyIsImRlbGVnYXRpb25Ub2tlbiIsInRva2VuIiwiZXh0ZXJuYWxTaWduaW5nIiwiaHViT3JpZ2luIiwibGlua2VkQXQiLCJEYXRlIiwidG9JU09TdHJpbmciLCJraW5kIiwiZmFicmljSWQiLCJsYWJlbCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImhyZWYiLCJyZWwiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwicmVtb3ZlQ2hpbGQiLCJjbGVhckRldmljZUxpbmtQb2xsIiwiaGFuZGxlQ3JlYXRlRGV2aWNlTGluayIsIl9jYWxsZWU1Iiwia2V5Iiwic2lnbmVkUHJvYmUiLCJpZGVudElkIiwibm9uY2UiLCJvZmZlck1lc3NhZ2UiLCJvZmZlclNpZ25lZCIsImNyZWF0ZWQiLCJfdDUiLCJfY29udGV4dDUiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJVaW50OEFycmF5IiwibWFwIiwiYiIsInBhZFN0YXJ0Iiwiam9pbiIsImh1YkJhc2UiLCJwdWJrZXlIZXgiLCJfY2FsbGVlNCIsInN0IiwiY291bnRlcnNpZ25lZCIsIl90NCIsIl9jb250ZXh0NCIsImxpbmtNZXNzYWdlIiwicm9sZSIsInJlc3BvbmRlciIsInBlZXJGYWJyaWNJZCIsInBlZXJYcHViIiwicGVlclB1YmtleSIsImhhbmRsZVJldm9rZUxpbmtlZERldmljZSIsIl9yZWY2IiwiX2NhbGxlZTYiLCJkZXZpY2UiLCJfY29udGV4dDYiLCJfeCIsInBsYWludGV4dEtleU1hdGVyaWFsT25EaXNrIiwic2hvd0ZhYnJpY0h1YkFkbWluTm90aWNlIiwiaHViQWRtaW5Ub2tlbiIsImJhc2ljIiwic3R5bGUiLCJtaW5XaWR0aCIsImFzIiwiQ29udGVudCIsImNvbXBhY3QiLCJjb2xvciIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsIkZyYWdtZW50IiwidG8iLCJpbmZvIiwic2l6ZSIsInRvTG9jYWxlU3RyaW5nIiwibmVnYXRpdmUiLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJwcmltYXJ5IiwibG9hZGluZyIsInNyYyIsImFsdCIsImhlaWdodCIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsIm1hcmdpbkxlZnQiLCJwb3N0TWVzc2FnZSIsInNvdXJjZSIsInR5cGUiLCJodWIiLCJyb3VuZCIsIkZpZWxkIiwiaHRtbEZvciIsIm9uQ2hhbmdlIiwidGFyZ2V0IiwiaXNGaW5pdGUiLCJlcnIiLCJpY29uIiwibGFiZWxQb3NpdGlvbiIsImF1dG9Db21wbGV0ZSIsInRpdGxlIiwiX2NhbGxlZTciLCJwd2QiLCJpbm5lciIsImVudmVsb3BlIiwiYmxvYiIsIl90NiIsIl9jb250ZXh0NyIsInZlcnNpb24iLCJCbG9iIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiZG93bmxvYWQiLCJyZXZva2VPYmplY3RVUkwiLCJfY2FsbGVlOCIsImFpIiwiX3Q3IiwiX2NvbnRleHQ4Iiwid2FybmluZyIsIm9uU3VibWl0IiwicHJldmVudERlZmF1bHQiLCJfY2FsbGVlOSIsImVuY3J5cHRlZCIsIm1hdGVyaWFsIiwibmV4dElkZW50aXR5IiwiX3Q4IiwiX2NvbnRleHQ5IiwiX2NhbGxlZTAiLCJfdDkiLCJfY29udGV4dDAiLCJ4cHJ2RW5jIiwicGFzc3dvcmRTYWx0Iiwib3BlbiIsIm9uQ2xvc2UiLCJjbG9zZU9uRGltbWVyQ2xpY2siLCJjbG9zZU9uRG9jdW1lbnRDbGljayIsImNsb3NlT25Fc2NhcGUiLCJjb250ZW50IiwiQWN0aW9ucyIsIm9uRm9yZ2V0SWRlbnRpdHkiLCJlRGVsIiwiZUxpbmsiLCJlTm8iLCJlRXh0IiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsIl9jYWxsZWUxIiwiZ2VuZXJhdGUiLCJkZWxheSIsIl90MCIsIl9jb250ZXh0MSIsIm1uZW1vbmljIiwic3RhY2siLCJpbnZlcnRlZCIsImZvbnRTdHlsZSIsIl9jYWxsZWUxMCIsImJhY2t1cFBheWxvYWQiLCJfdDEiLCJfY29udGV4dDEwIiwiY2hlY2tlZCIsImRrIiwicGxhaW50ZXh0UGF5bG9hZCIsInN0b3JlZFBheWxvYWQiLCJuZXh0SWRlbnQiLCJnYXAiLCJmbHVpZCIsIlRleHRBcmVhIiwicm93cyIsInJlc2l6ZSIsInBsYWNlaG9sZGVyIiwic3BlbGxDaGVjayIsImF1dG9Db3JyZWN0IiwiYXV0b0NhcGl0YWxpemUiLCJfY2FsbGVlMTEiLCJyYXciLCJfdDEwIiwiX2NvbnRleHQxMSIsImFjY2VwdCIsImV2ZW50IiwiZmlsZSIsImZpbGVzIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsIl9jYWxsZWUxMiIsInRleHQiLCJwd2RJbXAiLCJtYXQiLCJfbmV4dElkZW50aXR5Iiwic2VlZFBocmFzZSIsImV4dCIsIm1YcHJ2IiwibVhwdWIiLCJfaGFzU3RvcmFnZSIsIl90MTEiLCJfdDEyIiwiX3QxMyIsIl9jb250ZXh0MTIiLCJyZXN1bHQiLCJwYXJzZSIsImNpcGhlcnRleHQiLCJiYWNrdXBTY29wZSIsInNlZWQiLCJiaXAzOVBhc3NwaHJhc2UiLCJwYXNzcGhyYXNlIiwibWF0Y2giLCJvbmVycm9yIiwicmVhZEFzVGV4dCIsIklucHV0IiwiX3JlcXVpcmUxNCIsImZvcmNlIiwiX2NhbGxlZTEzIiwiX3QxNCIsIl9jb250ZXh0MTMiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/IdentityManager.js\n\n}')},"./components/InAppNotificationsList.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Header = _require2.Header,\n Icon = _require2.Icon;\nvar _require3 = __webpack_require__(/*! ../functions/uiNotifications */ "./functions/uiNotifications.js"),\n readUiNotifications = _require3.readUiNotifications,\n clearUiNotifications = _require3.clearUiNotifications,\n removeUiNotification = _require3.removeUiNotification,\n copyToClipboard = _require3.copyToClipboard,\n UPDATED_EVENT = _require3.UPDATED_EVENT,\n STORAGE_KEY = _require3.STORAGE_KEY;\nvar _require4 = __webpack_require__(/*! ../functions/inAppNotificationOpenHref */ "./functions/inAppNotificationOpenHref.js"),\n inAppNotificationOpenHref = _require4.inAppNotificationOpenHref;\n\n/**\n * Wallet / Payjoin / hub toasts from localStorage (same source as the top-bar badge).\n * @param {{ uf?: object, showHeader?: boolean, showClearAll?: boolean }} props\n */\nfunction InAppNotificationsList(props) {\n var uf = props.uf || {};\n var showHeader = props.showHeader !== false;\n var showClearAll = props.showClearAll !== false;\n var _React$useState = React.useState(function () {\n return readUiNotifications();\n }),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n list = _React$useState2[0],\n setList = _React$useState2[1];\n React.useEffect(function () {\n var sync = function sync() {\n return setList(readUiNotifications());\n };\n if (typeof window !== \'undefined\') {\n window.addEventListener(UPDATED_EVENT, sync);\n var onStorage = function onStorage(ev) {\n if (ev && ev.key === STORAGE_KEY) sync();\n };\n window.addEventListener(\'storage\', onStorage);\n return function () {\n window.removeEventListener(UPDATED_EVENT, sync);\n window.removeEventListener(\'storage\', onStorage);\n };\n }\n return undefined;\n }, []);\n if (list.length === 0) {\n return /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#888\',\n fontSize: \'0.9em\',\n margin: \'0.25em 0 0\'\n }\n }, "No in-app notifications. Wallet, Payjoin, and hub toasts appear here when triggered.");\n }\n return /*#__PURE__*/React.createElement("div", {\n id: "in-app-notifications"\n }, showHeader ? /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: 0,\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bell outline"\n }), "In-app notifications") : null, /*#__PURE__*/React.createElement("ul", {\n style: {\n listStyle: \'none\',\n margin: 0,\n padding: 0\n }\n }, list.map(function (n) {\n var openTo = inAppNotificationOpenHref(n.href, uf);\n return /*#__PURE__*/React.createElement("li", {\n key: n.id,\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'flex-start\',\n gap: \'0.35em 0.5em\',\n padding: \'0.35em 0\',\n borderBottom: \'1px solid rgba(34, 36, 38, 0.08)\',\n fontSize: \'0.9em\',\n lineHeight: 1.35\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n flex: \'1 1 12rem\',\n minWidth: 0\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n fontWeight: 600\n }\n }, n.title), n.subtitle ? /*#__PURE__*/React.createElement("div", {\n style: {\n color: \'#767676\',\n fontSize: \'0.88em\',\n wordBreak: \'break-word\',\n display: \'-webkit-box\',\n WebkitLineClamp: 2,\n WebkitBoxOrient: \'vertical\',\n overflow: \'hidden\'\n },\n title: n.subtitle\n }, n.subtitle) : null), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.25em\',\n alignItems: \'center\',\n flexShrink: 0\n }\n }, openTo ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: openTo,\n size: "mini",\n compact: true,\n primary: true\n }, "Open") : null, n.copyText ? /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n compact: true,\n basic: true,\n icon: true,\n title: "Copy to clipboard",\n onClick: function onClick() {\n return copyToClipboard(n.copyText);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy outline"\n })) : null, /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n compact: true,\n basic: true,\n icon: true,\n title: "Dismiss",\n onClick: function onClick() {\n return removeUiNotification(n.id);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "close"\n }))));\n })), showClearAll ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n style: {\n marginTop: \'0.65em\'\n },\n onClick: function onClick() {\n return clearUiNotifications();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "trash"\n }), "Clear all") : null);\n}\nmodule.exports = InAppNotificationsList;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL0luQXBwTm90aWZpY2F0aW9uc0xpc3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBQUEsU0FBQUEsZUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFDLGVBQUEsQ0FBQUYsQ0FBQSxLQUFBRyxxQkFBQSxDQUFBSCxDQUFBLEVBQUFDLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUosQ0FBQSxFQUFBQyxDQUFBLEtBQUFJLGdCQUFBO0FBQUEsU0FBQUEsaUJBQUEsY0FBQUMsU0FBQTtBQUFBLFNBQUFGLDRCQUFBSixDQUFBLEVBQUFPLENBQUEsUUFBQVAsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBUSxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUEsT0FBQUUsQ0FBQSxNQUFBQyxRQUFBLENBQUFDLElBQUEsQ0FBQVgsQ0FBQSxFQUFBWSxLQUFBLDZCQUFBSCxDQUFBLElBQUFULENBQUEsQ0FBQWEsV0FBQSxLQUFBSixDQUFBLEdBQUFULENBQUEsQ0FBQWEsV0FBQSxDQUFBQyxJQUFBLGFBQUFMLENBQUEsY0FBQUEsQ0FBQSxHQUFBTSxLQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsb0JBQUFTLENBQUEsK0NBQUFRLElBQUEsQ0FBQVIsQ0FBQSxJQUFBRCxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUE7QUFBQSxTQUFBQyxrQkFBQVIsQ0FBQSxFQUFBTyxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBUCxDQUFBLENBQUFrQixNQUFBLE1BQUFYLENBQUEsR0FBQVAsQ0FBQSxDQUFBa0IsTUFBQSxZQUFBakIsQ0FBQSxNQUFBa0IsQ0FBQSxHQUFBSixLQUFBLENBQUFSLENBQUEsR0FBQU4sQ0FBQSxHQUFBTSxDQUFBLEVBQUFOLENBQUEsSUFBQWtCLENBQUEsQ0FBQWxCLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFVBQUFrQixDQUFBO0FBQUEsU0FBQWhCLHNCQUFBSCxDQUFBLEVBQUFvQixDQUFBLFFBQUFYLENBQUEsV0FBQVQsQ0FBQSxnQ0FBQXFCLE1BQUEsSUFBQXJCLENBQUEsQ0FBQXFCLE1BQUEsQ0FBQUMsUUFBQSxLQUFBdEIsQ0FBQSw0QkFBQVMsQ0FBQSxRQUFBUixDQUFBLEVBQUFrQixDQUFBLEVBQUFJLENBQUEsRUFBQUMsQ0FBQSxFQUFBakIsQ0FBQSxPQUFBa0IsQ0FBQSxPQUFBQyxDQUFBLGlCQUFBSCxDQUFBLElBQUFkLENBQUEsR0FBQUEsQ0FBQSxDQUFBRSxJQUFBLENBQUFYLENBQUEsR0FBQTJCLElBQUEsUUFBQVAsQ0FBQSxRQUFBUSxNQUFBLENBQUFuQixDQUFBLE1BQUFBLENBQUEsVUFBQWdCLENBQUEsdUJBQUFBLENBQUEsSUFBQXhCLENBQUEsR0FBQXNCLENBQUEsQ0FBQVosSUFBQSxDQUFBRixDQUFBLEdBQUFvQixJQUFBLE1BQUF0QixDQUFBLENBQUF1QixJQUFBLENBQUE3QixDQUFBLENBQUE4QixLQUFBLEdBQUF4QixDQUFBLENBQUFXLE1BQUEsS0FBQUUsQ0FBQSxHQUFBSyxDQUFBLGlCQUFBekIsQ0FBQSxJQUFBMEIsQ0FBQSxPQUFBUCxDQUFBLEdBQUFuQixDQUFBLHlCQUFBeUIsQ0FBQSxZQUFBaEIsQ0FBQSxlQUFBZSxDQUFBLEdBQUFmLENBQUEsY0FBQW1CLE1BQUEsQ0FBQUosQ0FBQSxNQUFBQSxDQUFBLDJCQUFBRSxDQUFBLFFBQUFQLENBQUEsYUFBQVosQ0FBQTtBQUFBLFNBQUFMLGdCQUFBRixDQUFBLFFBQUFlLEtBQUEsQ0FBQWlCLE9BQUEsQ0FBQWhDLENBQUEsVUFBQUEsQ0FBQTtBQUViLElBQU1pQyxLQUFLLEdBQUdDLG1CQUFPLENBQUMsNENBQU8sQ0FBQztBQUM5QixJQUFBQyxRQUFBLEdBQWlCRCxtQkFBTyxDQUFDLHVFQUFrQixDQUFDO0VBQXBDRSxJQUFJLEdBQUFELFFBQUEsQ0FBSkMsSUFBSTtBQUNaLElBQUFDLFNBQUEsR0FBaUNILG1CQUFPLENBQUMsNEVBQW1CLENBQUM7RUFBckRJLE1BQU0sR0FBQUQsU0FBQSxDQUFOQyxNQUFNO0VBQUVDLE1BQU0sR0FBQUYsU0FBQSxDQUFORSxNQUFNO0VBQUVDLElBQUksR0FBQUgsU0FBQSxDQUFKRyxJQUFJO0FBQzVCLElBQUFDLFNBQUEsR0FPSVAsbUJBQU8sQ0FBQyxvRUFBOEIsQ0FBQztFQU56Q1EsbUJBQW1CLEdBQUFELFNBQUEsQ0FBbkJDLG1CQUFtQjtFQUNuQkMsb0JBQW9CLEdBQUFGLFNBQUEsQ0FBcEJFLG9CQUFvQjtFQUNwQkMsb0JBQW9CLEdBQUFILFNBQUEsQ0FBcEJHLG9CQUFvQjtFQUNwQkMsZUFBZSxHQUFBSixTQUFBLENBQWZJLGVBQWU7RUFDZkMsYUFBYSxHQUFBTCxTQUFBLENBQWJLLGFBQWE7RUFDYkMsV0FBVyxHQUFBTixTQUFBLENBQVhNLFdBQVc7QUFFYixJQUFBQyxTQUFBLEdBQXNDZCxtQkFBTyxDQUFDLHdGQUF3QyxDQUFDO0VBQS9FZSx5QkFBeUIsR0FBQUQsU0FBQSxDQUF6QkMseUJBQXlCOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLHNCQUFzQkEsQ0FBRUMsS0FBSyxFQUFFO0VBQ3RDLElBQU1DLEVBQUUsR0FBR0QsS0FBSyxDQUFDQyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3pCLElBQU1DLFVBQVUsR0FBR0YsS0FBSyxDQUFDRSxVQUFVLEtBQUssS0FBSztFQUM3QyxJQUFNQyxZQUFZLEdBQUdILEtBQUssQ0FBQ0csWUFBWSxLQUFLLEtBQUs7RUFDakQsSUFBQUMsZUFBQSxHQUF3QnRCLEtBQUssQ0FBQ3VCLFFBQVEsQ0FBQztNQUFBLE9BQU1kLG1CQUFtQixDQUFDLENBQUM7SUFBQSxFQUFDO0lBQUFlLGdCQUFBLEdBQUExRCxjQUFBLENBQUF3RCxlQUFBO0lBQTVERyxJQUFJLEdBQUFELGdCQUFBO0lBQUVFLE9BQU8sR0FBQUYsZ0JBQUE7RUFDcEJ4QixLQUFLLENBQUMyQixTQUFTLENBQUMsWUFBTTtJQUNwQixJQUFNQyxJQUFJLEdBQUcsU0FBUEEsSUFBSUEsQ0FBQTtNQUFBLE9BQVNGLE9BQU8sQ0FBQ2pCLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUFBO0lBQ2pELElBQUksT0FBT29CLE1BQU0sS0FBSyxXQUFXLEVBQUU7TUFDakNBLE1BQU0sQ0FBQ0MsZ0JBQWdCLENBQUNqQixhQUFhLEVBQUVlLElBQUksQ0FBQztNQUM1QyxJQUFNRyxTQUFTLEdBQUcsU0FBWkEsU0FBU0EsQ0FBSUMsRUFBRSxFQUFLO1FBQ3hCLElBQUlBLEVBQUUsSUFBSUEsRUFBRSxDQUFDQyxHQUFHLEtBQUtuQixXQUFXLEVBQUVjLElBQUksQ0FBQyxDQUFDO01BQzFDLENBQUM7TUFDREMsTUFBTSxDQUFDQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUVDLFNBQVMsQ0FBQztNQUM3QyxPQUFPLFlBQU07UUFDWEYsTUFBTSxDQUFDSyxtQkFBbUIsQ0FBQ3JCLGFBQWEsRUFBRWUsSUFBSSxDQUFDO1FBQy9DQyxNQUFNLENBQUNLLG1CQUFtQixDQUFDLFNBQVMsRUFBRUgsU0FBUyxDQUFDO01BQ2xELENBQUM7SUFDSDtJQUNBLE9BQU9JLFNBQVM7RUFDbEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQUlWLElBQUksQ0FBQ3hDLE1BQU0sS0FBSyxDQUFDLEVBQUU7SUFDckIsb0JBQ0VlLEtBQUEsQ0FBQW9DLGFBQUE7TUFBR0MsS0FBSyxFQUFFO1FBQUVDLEtBQUssRUFBRSxNQUFNO1FBQUVDLFFBQVEsRUFBRSxPQUFPO1FBQUVDLE1BQU0sRUFBRTtNQUFhO0lBQUUsR0FBQyxzRkFFbkUsQ0FBQztFQUVSO0VBRUEsb0JBQ0V4QyxLQUFBLENBQUFvQyxhQUFBO0lBQUtLLEVBQUUsRUFBQztFQUFzQixHQUMzQnJCLFVBQVUsZ0JBQ1RwQixLQUFBLENBQUFvQyxhQUFBLENBQUM5QixNQUFNO0lBQUNvQyxFQUFFLEVBQUMsSUFBSTtJQUFDTCxLQUFLLEVBQUU7TUFBRU0sU0FBUyxFQUFFLENBQUM7TUFBRUMsWUFBWSxFQUFFO0lBQVE7RUFBRSxnQkFDN0Q1QyxLQUFBLENBQUFvQyxhQUFBLENBQUM3QixJQUFJO0lBQUMxQixJQUFJLEVBQUM7RUFBYyxDQUFFLENBQUMsd0JBRXRCLENBQUMsR0FDUCxJQUFJLGVBQ1JtQixLQUFBLENBQUFvQyxhQUFBO0lBQUlDLEtBQUssRUFBRTtNQUFFUSxTQUFTLEVBQUUsTUFBTTtNQUFFTCxNQUFNLEVBQUUsQ0FBQztNQUFFTSxPQUFPLEVBQUU7SUFBRTtFQUFFLEdBQ3JEckIsSUFBSSxDQUFDc0IsR0FBRyxDQUFDLFVBQUM3RCxDQUFDLEVBQUs7SUFDZixJQUFNOEQsTUFBTSxHQUFHaEMseUJBQXlCLENBQUM5QixDQUFDLENBQUMrRCxJQUFJLEVBQUU5QixFQUFFLENBQUM7SUFDcEQsb0JBQ0VuQixLQUFBLENBQUFvQyxhQUFBO01BQ0VILEdBQUcsRUFBRS9DLENBQUMsQ0FBQ3VELEVBQUc7TUFDVkosS0FBSyxFQUFFO1FBQ0xhLE9BQU8sRUFBRSxNQUFNO1FBQ2ZDLFFBQVEsRUFBRSxNQUFNO1FBQ2hCQyxVQUFVLEVBQUUsWUFBWTtRQUN4QkMsR0FBRyxFQUFFLGNBQWM7UUFDbkJQLE9BQU8sRUFBRSxVQUFVO1FBQ25CUSxZQUFZLEVBQUUsa0NBQWtDO1FBQ2hEZixRQUFRLEVBQUUsT0FBTztRQUNqQmdCLFVBQVUsRUFBRTtNQUNkO0lBQUUsZ0JBRUZ2RCxLQUFBLENBQUFvQyxhQUFBO01BQUtDLEtBQUssRUFBRTtRQUFFbUIsSUFBSSxFQUFFLFdBQVc7UUFBRUMsUUFBUSxFQUFFO01BQUU7SUFBRSxnQkFDN0N6RCxLQUFBLENBQUFvQyxhQUFBO01BQUtDLEtBQUssRUFBRTtRQUFFcUIsVUFBVSxFQUFFO01BQUk7SUFBRSxHQUFFeEUsQ0FBQyxDQUFDeUUsS0FBVyxDQUFDLEVBQy9DekUsQ0FBQyxDQUFDMEUsUUFBUSxnQkFDVDVELEtBQUEsQ0FBQW9DLGFBQUE7TUFDRUMsS0FBSyxFQUFFO1FBQ0xDLEtBQUssRUFBRSxTQUFTO1FBQ2hCQyxRQUFRLEVBQUUsUUFBUTtRQUNsQnNCLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCWCxPQUFPLEVBQUUsYUFBYTtRQUN0QlksZUFBZSxFQUFFLENBQUM7UUFDbEJDLGVBQWUsRUFBRSxVQUFVO1FBQzNCQyxRQUFRLEVBQUU7TUFDWixDQUFFO01BQ0ZMLEtBQUssRUFBRXpFLENBQUMsQ0FBQzBFO0lBQVMsR0FFakIxRSxDQUFDLENBQUMwRSxRQUNBLENBQUMsR0FDSixJQUNELENBQUMsZUFDTjVELEtBQUEsQ0FBQW9DLGFBQUE7TUFBS0MsS0FBSyxFQUFFO1FBQUVhLE9BQU8sRUFBRSxNQUFNO1FBQUVDLFFBQVEsRUFBRSxNQUFNO1FBQUVFLEdBQUcsRUFBRSxRQUFRO1FBQUVELFVBQVUsRUFBRSxRQUFRO1FBQUVhLFVBQVUsRUFBRTtNQUFFO0lBQUUsR0FDbkdqQixNQUFNLGdCQUNMaEQsS0FBQSxDQUFBb0MsYUFBQSxDQUFDL0IsTUFBTTtNQUFDcUMsRUFBRSxFQUFFdkMsSUFBSztNQUFDK0QsRUFBRSxFQUFFbEIsTUFBTztNQUFDbUIsSUFBSSxFQUFDLE1BQU07TUFBQ0MsT0FBTztNQUFDQyxPQUFPO0lBQUEsR0FBQyxNQUVsRCxDQUFDLEdBQ1AsSUFBSSxFQUNQbkYsQ0FBQyxDQUFDb0YsUUFBUSxnQkFDVHRFLEtBQUEsQ0FBQW9DLGFBQUEsQ0FBQy9CLE1BQU07TUFDTDhELElBQUksRUFBQyxNQUFNO01BQ1hDLE9BQU87TUFDUEcsS0FBSztNQUNMQyxJQUFJO01BQ0piLEtBQUssRUFBQyxtQkFBbUI7TUFDekJjLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1FBQUEsT0FBUTdELGVBQWUsQ0FBQzFCLENBQUMsQ0FBQ29GLFFBQVEsQ0FBQztNQUFBO0lBQUMsZ0JBRTNDdEUsS0FBQSxDQUFBb0MsYUFBQSxDQUFDN0IsSUFBSTtNQUFDMUIsSUFBSSxFQUFDO0lBQWMsQ0FBRSxDQUNyQixDQUFDLEdBQ1AsSUFBSSxlQUNSbUIsS0FBQSxDQUFBb0MsYUFBQSxDQUFDL0IsTUFBTTtNQUNMOEQsSUFBSSxFQUFDLE1BQU07TUFDWEMsT0FBTztNQUNQRyxLQUFLO01BQ0xDLElBQUk7TUFDSmIsS0FBSyxFQUFDLFNBQVM7TUFDZmMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7UUFBQSxPQUFROUQsb0JBQW9CLENBQUN6QixDQUFDLENBQUN1RCxFQUFFLENBQUM7TUFBQTtJQUFDLGdCQUUxQ3pDLEtBQUEsQ0FBQW9DLGFBQUEsQ0FBQzdCLElBQUk7TUFBQzFCLElBQUksRUFBQztJQUFPLENBQUUsQ0FDZCxDQUNMLENBQ0gsQ0FBQztFQUVULENBQUMsQ0FDQyxDQUFDLEVBQ0p3QyxZQUFZLGdCQUNYckIsS0FBQSxDQUFBb0MsYUFBQSxDQUFDL0IsTUFBTTtJQUFDOEQsSUFBSSxFQUFDLE9BQU87SUFBQ0ksS0FBSztJQUFDQyxJQUFJO0lBQUNFLGFBQWEsRUFBQyxNQUFNO0lBQUNyQyxLQUFLLEVBQUU7TUFBRU0sU0FBUyxFQUFFO0lBQVMsQ0FBRTtJQUFDOEIsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7TUFBQSxPQUFRL0Qsb0JBQW9CLENBQUMsQ0FBQztJQUFBO0VBQUMsZ0JBQ3pIVixLQUFBLENBQUFvQyxhQUFBLENBQUM3QixJQUFJO0lBQUMxQixJQUFJLEVBQUM7RUFBTyxDQUFFLENBQUMsYUFFZixDQUFDLEdBQ1AsSUFDRCxDQUFDO0FBRVY7QUFFQThGLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHM0Qsc0JBQXNCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL0luQXBwTm90aWZpY2F0aW9uc0xpc3QuanM/NWMyYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluayB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuY29uc3QgeyBCdXR0b24sIEhlYWRlciwgSWNvbiB9ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcbmNvbnN0IHtcbiAgcmVhZFVpTm90aWZpY2F0aW9ucyxcbiAgY2xlYXJVaU5vdGlmaWNhdGlvbnMsXG4gIHJlbW92ZVVpTm90aWZpY2F0aW9uLFxuICBjb3B5VG9DbGlwYm9hcmQsXG4gIFVQREFURURfRVZFTlQsXG4gIFNUT1JBR0VfS0VZXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3VpTm90aWZpY2F0aW9ucycpO1xuY29uc3QgeyBpbkFwcE5vdGlmaWNhdGlvbk9wZW5IcmVmIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaW5BcHBOb3RpZmljYXRpb25PcGVuSHJlZicpO1xuXG4vKipcbiAqIFdhbGxldCAvIFBheWpvaW4gLyBodWIgdG9hc3RzIGZyb20gbG9jYWxTdG9yYWdlIChzYW1lIHNvdXJjZSBhcyB0aGUgdG9wLWJhciBiYWRnZSkuXG4gKiBAcGFyYW0ge3sgdWY/OiBvYmplY3QsIHNob3dIZWFkZXI/OiBib29sZWFuLCBzaG93Q2xlYXJBbGw/OiBib29sZWFuIH19IHByb3BzXG4gKi9cbmZ1bmN0aW9uIEluQXBwTm90aWZpY2F0aW9uc0xpc3QgKHByb3BzKSB7XG4gIGNvbnN0IHVmID0gcHJvcHMudWYgfHwge307XG4gIGNvbnN0IHNob3dIZWFkZXIgPSBwcm9wcy5zaG93SGVhZGVyICE9PSBmYWxzZTtcbiAgY29uc3Qgc2hvd0NsZWFyQWxsID0gcHJvcHMuc2hvd0NsZWFyQWxsICE9PSBmYWxzZTtcbiAgY29uc3QgW2xpc3QsIHNldExpc3RdID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gcmVhZFVpTm90aWZpY2F0aW9ucygpKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzeW5jID0gKCkgPT4gc2V0TGlzdChyZWFkVWlOb3RpZmljYXRpb25zKCkpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoVVBEQVRFRF9FVkVOVCwgc3luYyk7XG4gICAgICBjb25zdCBvblN0b3JhZ2UgPSAoZXYpID0+IHtcbiAgICAgICAgaWYgKGV2ICYmIGV2LmtleSA9PT0gU1RPUkFHRV9LRVkpIHN5bmMoKTtcbiAgICAgIH07XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIG9uU3RvcmFnZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihVUERBVEVEX0VWRU5ULCBzeW5jKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBvblN0b3JhZ2UpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW10pO1xuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM4ODgnLCBmb250U2l6ZTogJzAuOWVtJywgbWFyZ2luOiAnMC4yNWVtIDAgMCcgfX0+XG4gICAgICAgIE5vIGluLWFwcCBub3RpZmljYXRpb25zLiBXYWxsZXQsIFBheWpvaW4sIGFuZCBodWIgdG9hc3RzIGFwcGVhciBoZXJlIHdoZW4gdHJpZ2dlcmVkLlxuICAgICAgPC9wPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgaWQ9XCJpbi1hcHAtbm90aWZpY2F0aW9uc1wiPlxuICAgICAge3Nob3dIZWFkZXIgPyAoXG4gICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIHN0eWxlPXt7IG1hcmdpblRvcDogMCwgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19PlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJiZWxsIG91dGxpbmVcIiAvPlxuICAgICAgICAgIEluLWFwcCBub3RpZmljYXRpb25zXG4gICAgICAgIDwvSGVhZGVyPlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8dWwgc3R5bGU9e3sgbGlzdFN0eWxlOiAnbm9uZScsIG1hcmdpbjogMCwgcGFkZGluZzogMCB9fT5cbiAgICAgICAge2xpc3QubWFwKChuKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3BlblRvID0gaW5BcHBOb3RpZmljYXRpb25PcGVuSHJlZihuLmhyZWYsIHVmKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgIGtleT17bi5pZH1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcsXG4gICAgICAgICAgICAgICAgZ2FwOiAnMC4zNWVtIDAuNWVtJyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMC4zNWVtIDAnLFxuICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogJzFweCBzb2xpZCByZ2JhKDM0LCAzNiwgMzgsIDAuMDgpJyxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogJzAuOWVtJyxcbiAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjM1XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZmxleDogJzEgMSAxMnJlbScsIG1pbldpZHRoOiAwIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFdlaWdodDogNjAwIH19PntuLnRpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgIHtuLnN1YnRpdGxlID8gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzc2NzY3NicsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcwLjg4ZW0nLFxuICAgICAgICAgICAgICAgICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICctd2Via2l0LWJveCcsXG4gICAgICAgICAgICAgICAgICAgICAgV2Via2l0TGluZUNsYW1wOiAyLFxuICAgICAgICAgICAgICAgICAgICAgIFdlYmtpdEJveE9yaWVudDogJ3ZlcnRpY2FsJyxcbiAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e24uc3VidGl0bGV9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtuLnN1YnRpdGxlfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC4yNWVtJywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGZsZXhTaHJpbms6IDAgfX0+XG4gICAgICAgICAgICAgICAge29wZW5UbyA/IChcbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPXtvcGVuVG99IHNpemU9XCJtaW5pXCIgY29tcGFjdCBwcmltYXJ5PlxuICAgICAgICAgICAgICAgICAgICBPcGVuXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7bi5jb3B5VGV4dCA/IChcbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgICAgICAgICAgICBjb21wYWN0XG4gICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDb3B5IHRvIGNsaXBib2FyZFwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvcHlUb0NsaXBib2FyZChuLmNvcHlUZXh0KX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHkgb3V0bGluZVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICBjb21wYWN0XG4gICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJEaXNtaXNzXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHJlbW92ZVVpTm90aWZpY2F0aW9uKG4uaWQpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjbG9zZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvdWw+XG4gICAgICB7c2hvd0NsZWFyQWxsID8gKFxuICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIGJhc2ljIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjY1ZW0nIH19IG9uQ2xpY2s9eygpID0+IGNsZWFyVWlOb3RpZmljYXRpb25zKCl9PlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJ0cmFzaFwiIC8+XG4gICAgICAgICAgQ2xlYXIgYWxsXG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSW5BcHBOb3RpZmljYXRpb25zTGlzdDtcbiJdLCJuYW1lcyI6WyJfc2xpY2VkVG9BcnJheSIsInIiLCJlIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInQiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJsZW5ndGgiLCJuIiwibCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaSIsInUiLCJmIiwibyIsIm5leHQiLCJPYmplY3QiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiaXNBcnJheSIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTGluayIsIl9yZXF1aXJlMiIsIkJ1dHRvbiIsIkhlYWRlciIsIkljb24iLCJfcmVxdWlyZTMiLCJyZWFkVWlOb3RpZmljYXRpb25zIiwiY2xlYXJVaU5vdGlmaWNhdGlvbnMiLCJyZW1vdmVVaU5vdGlmaWNhdGlvbiIsImNvcHlUb0NsaXBib2FyZCIsIlVQREFURURfRVZFTlQiLCJTVE9SQUdFX0tFWSIsIl9yZXF1aXJlNCIsImluQXBwTm90aWZpY2F0aW9uT3BlbkhyZWYiLCJJbkFwcE5vdGlmaWNhdGlvbnNMaXN0IiwicHJvcHMiLCJ1ZiIsInNob3dIZWFkZXIiLCJzaG93Q2xlYXJBbGwiLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJsaXN0Iiwic2V0TGlzdCIsInVzZUVmZmVjdCIsInN5bmMiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwib25TdG9yYWdlIiwiZXYiLCJrZXkiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidW5kZWZpbmVkIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwiY29sb3IiLCJmb250U2l6ZSIsIm1hcmdpbiIsImlkIiwiYXMiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJsaXN0U3R5bGUiLCJwYWRkaW5nIiwibWFwIiwib3BlblRvIiwiaHJlZiIsImRpc3BsYXkiLCJmbGV4V3JhcCIsImFsaWduSXRlbXMiLCJnYXAiLCJib3JkZXJCb3R0b20iLCJsaW5lSGVpZ2h0IiwiZmxleCIsIm1pbldpZHRoIiwiZm9udFdlaWdodCIsInRpdGxlIiwic3VidGl0bGUiLCJ3b3JkQnJlYWsiLCJXZWJraXRMaW5lQ2xhbXAiLCJXZWJraXRCb3hPcmllbnQiLCJvdmVyZmxvdyIsImZsZXhTaHJpbmsiLCJ0byIsInNpemUiLCJjb21wYWN0IiwicHJpbWFyeSIsImNvcHlUZXh0IiwiYmFzaWMiLCJpY29uIiwib25DbGljayIsImxhYmVsUG9zaXRpb24iLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/InAppNotificationsList.js\n\n}')},"./components/Invoice.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar QRCode = __webpack_require__(/*! qrcode */ "./node_modules/qrcode/lib/browser.js");\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Divider = _require2.Divider,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Input = _require2.Input,\n Message = _require2.Message,\n Modal = _require2.Modal;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n loadUpstreamSettings = _require3.loadUpstreamSettings,\n getSpendWalletContext = _require3.getSpendWalletContext,\n getNextReceiveWalletContext = _require3.getNextReceiveWalletContext,\n sendPayment = _require3.sendPayment,\n verifyL1Payment = _require3.verifyL1Payment,\n createPayjoinDeposit = _require3.createPayjoinDeposit;\nvar _require4 = __webpack_require__(/*! ../constants */ "./constants.js"),\n SATS_PER_BTC = _require4.SATS_PER_BTC;\nvar _require5 = __webpack_require__(/*! ../functions/tabPayerDemoUrl */ "./functions/tabPayerDemoUrl.js"),\n buildTabPayerPayjoinUrl = _require5.buildTabPayerPayjoinUrl;\nvar _require6 = __webpack_require__(/*! ../functions/joinmarketPoolPreferences */ "./functions/joinmarketPoolPreferences.js"),\n loadJoinmarketPoolSizesBtc = _require6.loadJoinmarketPoolSizesBtc,\n saveJoinmarketPoolSizesBtc = _require6.saveJoinmarketPoolSizesBtc,\n poolLabels = _require6.poolLabels,\n btcToSats = _require6.btcToSats,\n DEFAULT_POOLS_BTC = _require6.DEFAULT_POOLS_BTC;\nvar _require7 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require7.formatSatsDisplay,\n formatBtcFromSats = _require7.formatBtcFromSats;\nvar _require8 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require8.readHubAdminTokenFromBrowser;\nvar _require9 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require9.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require9.subscribeHubUiFeatureFlags;\n\n// BitPay circa 2016: Bitcoin orange accent\nvar BITCOIN_ORANGE = \'#F7931A\';\n\n/**\n * The Invoice component provides a payment UI with QR code, address, and amount.\n * Pay button creates a transaction from the Hub wallet via the payments API.\n *\n * @param {Object} props\n * @param {string} [props.invoiceId] - Invoice id (for persisting payments)\n * @param {string} props.address - Destination Bitcoin address\n * @param {number} props.amountSats - Amount in satoshis\n * @param {string} [props.network] - Network name (regtest, testnet, mainnet) for display\n * @param {string} [props.label] - Optional label for the invoice\n * @param {string} [props.memo] - Optional memo to include with the payment\n * @param {string[]} [props.txids] - Array of txids for payments received (persisted on invoice)\n * @param {Object} [props.identity] - Identity for wallet context (xpub); Hub uses its wallet for regtest\n * @param {function} [props.onPaid] - Callback on success: (txid) => void\n * @param {function} [props.onError] - Callback on error: (error) => void\n * @param {boolean} [props.compact] - Use compact layout (e.g. inline in modals)\n * @param {boolean} [props.requireUnlockedIdentityForHubPay] - When true, disable “Pay Now” until `identityUnlocked` (hub still broadcasts a real tx; operator session must be unlocked).\n * @param {boolean} [props.identityUnlocked] - Paired with `requireUnlockedIdentityForHubPay` (default true when not required).\n */\nfunction Invoice(props) {\n var _React$useState = React.useState(0),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n hubUiTick = _React$useState2[0],\n setHubUiTick = _React$useState2[1];\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setHubUiTick(function (t) {\n return t + 1;\n });\n });\n }, []);\n void hubUiTick;\n var uf = loadHubUiFeatureFlags();\n var invoiceId = props.invoiceId,\n address = props.address,\n amountSats = props.amountSats,\n _props$network = props.network,\n network = _props$network === void 0 ? \'regtest\' : _props$network,\n label = props.label,\n _props$memo = props.memo,\n memo = _props$memo === void 0 ? \'\' : _props$memo,\n _props$txids = props.txids,\n txids = _props$txids === void 0 ? [] : _props$txids,\n _props$identity = props.identity,\n identity = _props$identity === void 0 ? {} : _props$identity,\n onPaid = props.onPaid,\n onError = props.onError,\n _props$compact = props.compact,\n compact = _props$compact === void 0 ? false : _props$compact,\n adminTokenProp = props.adminToken,\n _props$requireUnlocke = props.requireUnlockedIdentityForHubPay,\n requireUnlockedIdentityForHubPay = _props$requireUnlocke === void 0 ? false : _props$requireUnlocke,\n _props$identityUnlock = props.identityUnlocked,\n identityUnlocked = _props$identityUnlock === void 0 ? true : _props$identityUnlock;\n var _React$useState3 = React.useState(false),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n paying = _React$useState4[0],\n setPaying = _React$useState4[1];\n var _React$useState5 = React.useState(false),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n verifying = _React$useState6[0],\n setVerifying = _React$useState6[1];\n var _React$useState7 = React.useState(\'\'),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n externalTxid = _React$useState8[0],\n setExternalTxid = _React$useState8[1];\n var _React$useState9 = React.useState(null),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n error = _React$useState0[0],\n setError = _React$useState0[1];\n var _React$useState1 = React.useState(null),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n result = _React$useState10[0],\n setResult = _React$useState10[1];\n var _React$useState11 = React.useState(null),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n qrDataUrl = _React$useState12[0],\n setQrDataUrl = _React$useState12[1];\n var _React$useState13 = React.useState(false),\n _React$useState14 = _slicedToArray(_React$useState13, 2),\n copied = _React$useState14[0],\n setCopied = _React$useState14[1];\n var _React$useState15 = React.useState(null),\n _React$useState16 = _slicedToArray(_React$useState15, 2),\n chainStatus = _React$useState16[0],\n setChainStatus = _React$useState16[1];\n var _React$useState17 = React.useState(false),\n _React$useState18 = _slicedToArray(_React$useState17, 2),\n advancedOpen = _React$useState18[0],\n setAdvancedOpen = _React$useState18[1];\n var _React$useState19 = React.useState(function () {\n return _toConsumableArray(DEFAULT_POOLS_BTC);\n }),\n _React$useState20 = _slicedToArray(_React$useState19, 2),\n poolBtc = _React$useState20[0],\n setPoolBtc = _React$useState20[1];\n var _React$useState21 = React.useState(false),\n _React$useState22 = _slicedToArray(_React$useState21, 2),\n joinmarketBusy = _React$useState22[0],\n setJoinmarketBusy = _React$useState22[1];\n var _React$useState23 = React.useState(null),\n _React$useState24 = _slicedToArray(_React$useState23, 2),\n joinmarketErr = _React$useState24[0],\n setJoinmarketErr = _React$useState24[1];\n var _React$useState25 = React.useState(\'\'),\n _React$useState26 = _slicedToArray(_React$useState25, 2),\n joinmarketUri = _React$useState26[0],\n setJoinmarketUri = _React$useState26[1];\n var upstream = React.useMemo(function () {\n return loadUpstreamSettings();\n }, []);\n var idXpub = identity && identity.xpub ? String(identity.xpub) : \'\';\n var idXprv = identity && identity.xprv ? String(identity.xprv) : \'\';\n var wallet = React.useMemo(function () {\n return getSpendWalletContext(identity);\n }, [idXpub, idXprv]);\n var refreshChainStatus = React.useCallback(/*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(txid) {\n var id, res, msg, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n id = String(txid || \'\').trim();\n if (!(!id || !address || !amountSats)) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n setChainStatus(function (prev) {\n return _objectSpread(_objectSpread({}, prev && prev.txid === id ? prev : {}), {}, {\n loading: true,\n txid: id\n });\n });\n _context.p = 2;\n _context.n = 3;\n return verifyL1Payment(upstream, {\n txid: id,\n address: address,\n amountSats: Number(amountSats)\n });\n case 3:\n res = _context.v;\n setChainStatus({\n loading: false,\n txid: id,\n verified: !!res.verified,\n confirmations: res.confirmations != null ? Number(res.confirmations) : null,\n inMempool: !!res.inMempool,\n matchedSats: res.matchedSats\n });\n _context.n = 5;\n break;\n case 4:\n _context.p = 4;\n _t = _context.v;\n msg = _t && _t.message ? _t.message : String(_t);\n setChainStatus({\n loading: false,\n txid: id,\n verified: false,\n confirmations: null,\n inMempool: false,\n error: msg\n });\n case 5:\n return _context.a(2);\n }\n }, _callee, null, [[2, 4]]);\n }));\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }(), [upstream, address, amountSats]);\n\n // Payment URI for QR code (BIP 21)\n var paymentUri = React.useMemo(function () {\n if (!address || !amountSats || amountSats <= 0) return null;\n var btc = (Number(amountSats) / SATS_PER_BTC).toFixed(8);\n return "bitcoin:".concat(address, "?amount=").concat(btc);\n }, [address, amountSats]);\n\n // Generate QR code\n React.useEffect(function () {\n if (!paymentUri) {\n setQrDataUrl(null);\n return;\n }\n QRCode.toDataURL(paymentUri, {\n width: compact ? 140 : 200,\n margin: 2,\n color: {\n dark: \'#000000\',\n light: \'#ffffff\'\n }\n }).then(setQrDataUrl)["catch"](function () {\n return setQrDataUrl(null);\n });\n }, [paymentUri, compact]);\n var hubPayBlockedByIdentity = !!(requireUnlockedIdentityForHubPay && !identityUnlocked);\n var handlePay = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var adminToken, res, txid, errMsg, msg, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n if (!(!address || !amountSats || amountSats <= 0)) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2);\n case 1:\n if (!(requireUnlockedIdentityForHubPay && !identityUnlocked)) {\n _context2.n = 2;\n break;\n }\n setError(\'Unlock your Fabric identity (top bar) before Pay Now — this session must be unlocked for distribute/publish flows.\');\n return _context2.a(2);\n case 2:\n setPaying(true);\n setError(null);\n setResult(null);\n setChainStatus(null);\n adminToken = readHubAdminTokenFromBrowser(adminTokenProp);\n if (adminToken) {\n _context2.n = 3;\n break;\n }\n setPaying(false);\n setError(\'Admin token required to pay from the Hub wallet (setup token in local storage).\');\n return _context2.a(2);\n case 3:\n _context2.p = 3;\n _context2.n = 4;\n return sendPayment(upstream, wallet, {\n to: address,\n amountSats: Number(amountSats),\n memo: memo || (label ? "Invoice: ".concat(label) : \'\'),\n adminToken: adminToken\n });\n case 4:\n res = _context2.v;\n txid = res && res.payment && res.payment.txid || res.txid;\n if (txid) {\n setResult({\n txid: txid,\n success: true\n });\n refreshChainStatus(txid);\n if (typeof onPaid === \'function\') onPaid(txid);\n if (typeof window !== \'undefined\') {\n window.dispatchEvent(new CustomEvent(\'clientBalanceUpdate\'));\n }\n } else {\n errMsg = res && res.error || res && res.message || \'Payment completed but no txid returned.\';\n setError(errMsg);\n if (typeof onError === \'function\') onError(new Error(errMsg));\n }\n _context2.n = 6;\n break;\n case 5:\n _context2.p = 5;\n _t2 = _context2.v;\n msg = _t2 && _t2.message ? _t2.message : String(_t2);\n setError(msg);\n if (typeof onError === \'function\') onError(_t2);\n case 6:\n _context2.p = 6;\n setPaying(false);\n return _context2.f(6);\n case 7:\n return _context2.a(2);\n }\n }, _callee2, null, [[3, 5, 6, 7]]);\n })), [address, amountSats, memo, label, upstream, wallet, onPaid, onError, refreshChainStatus, adminTokenProp, requireUnlockedIdentityForHubPay, identityUnlocked]);\n var isMainnet = String(network || \'\').toLowerCase() === \'mainnet\';\n var handleVerifyExternal = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var txid, res, msg, _msg, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n txid = String(externalTxid || \'\').trim();\n if (!(!txid || !address || !amountSats)) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n setVerifying(true);\n setError(null);\n setResult(null);\n setChainStatus(null);\n _context3.p = 2;\n _context3.n = 3;\n return verifyL1Payment(upstream, {\n txid: txid,\n address: address,\n amountSats: Number(amountSats)\n });\n case 3:\n res = _context3.v;\n if (res && res.verified) {\n setResult({\n txid: txid,\n success: true\n });\n setExternalTxid(\'\');\n setChainStatus({\n loading: false,\n txid: txid,\n verified: true,\n confirmations: res.confirmations != null ? Number(res.confirmations) : null,\n inMempool: !!res.inMempool,\n matchedSats: res.matchedSats\n });\n if (typeof onPaid === \'function\') onPaid(txid);\n } else {\n msg = \'This transaction does not pay this address for at least the invoice amount, or the tx could not be loaded (txindex disabled / wrong network).\';\n setError(msg);\n if (typeof onError === \'function\') onError(new Error(msg));\n }\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t3 = _context3.v;\n _msg = _t3 && _t3.message ? _t3.message : String(_t3);\n setError(_msg);\n if (typeof onError === \'function\') onError(_t3);\n case 5:\n _context3.p = 5;\n setVerifying(false);\n return _context3.f(5);\n case 6:\n return _context3.a(2);\n }\n }, _callee3, null, [[2, 4, 5, 6]]);\n })), [externalTxid, address, amountSats, upstream, onPaid, onError]);\n React.useEffect(function () {\n if (!advancedOpen) return;\n setPoolBtc(loadJoinmarketPoolSizesBtc());\n setJoinmarketErr(null);\n setJoinmarketUri(\'\');\n }, [advancedOpen]);\n var handleSavePools = React.useCallback(function () {\n setPoolBtc(saveJoinmarketPoolSizesBtc(poolBtc));\n }, [poolBtc]);\n var handleCreateInvoicePayjoin = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var w, session, uri, msg, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n setJoinmarketBusy(true);\n setJoinmarketErr(null);\n setJoinmarketUri(\'\');\n _context4.p = 1;\n w = getNextReceiveWalletContext(identity);\n _context4.n = 2;\n return createPayjoinDeposit(upstream, w, {\n address: address,\n amountSats: Number(amountSats),\n label: label || \'Invoice Payjoin\',\n memo: String(memo || "invoice-joinmarket:".concat(invoiceId || \'local\')).slice(0, 200)\n });\n case 2:\n session = _context4.v;\n uri = session && (session.bip21Uri || \'\');\n if (!(!uri || !/^bitcoin:/i.test(String(uri)))) {\n _context4.n = 3;\n break;\n }\n throw new Error(\'Payjoin session did not return a valid BIP21 URI (check Hub payjoin service).\');\n case 3:\n setJoinmarketUri(String(uri));\n _context4.n = 5;\n break;\n case 4:\n _context4.p = 4;\n _t4 = _context4.v;\n msg = _t4 && _t4.message ? _t4.message : String(_t4);\n setJoinmarketErr(msg);\n case 5:\n _context4.p = 5;\n setJoinmarketBusy(false);\n return _context4.f(5);\n case 6:\n return _context4.a(2);\n }\n }, _callee4, null, [[1, 4, 5, 6]]);\n })), [upstream, identity, address, amountSats, label, memo, invoiceId]);\n var handleCopy = React.useCallback(function (text) {\n try {\n if (text && navigator && navigator.clipboard) {\n navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(function () {\n return setCopied(false);\n }, 1500);\n }\n } catch (err) {}\n }, []);\n var persistedTxids = Array.isArray(txids) ? txids : [];\n var effectiveTxid = result && result.txid || persistedTxids[0] || \'\';\n var isPaidFlow = !!(effectiveTxid && (result && result.success || persistedTxids.length > 0));\n var donePolling = !!(chainStatus && chainStatus.verified && Number(chainStatus.confirmations) > 0);\n React.useEffect(function () {\n if (!isPaidFlow || !effectiveTxid || donePolling) return;\n if (!address || amountSats == null || amountSats <= 0) return;\n var cancelled = false;\n var tick = /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n if (!cancelled) {\n _context5.n = 1;\n break;\n }\n return _context5.a(2);\n case 1:\n _context5.n = 2;\n return refreshChainStatus(effectiveTxid);\n case 2:\n return _context5.a(2);\n }\n }, _callee5);\n }));\n return function tick() {\n return _ref5.apply(this, arguments);\n };\n }();\n tick();\n var iv = setInterval(tick, 8000);\n return function () {\n cancelled = true;\n clearInterval(iv);\n };\n }, [isPaidFlow, effectiveTxid, donePolling, address, amountSats, refreshChainStatus]);\n var l1ActivityUnconfirmedRef = React.useRef(false);\n var l1ActivityConfirmedRef = React.useRef(false);\n React.useEffect(function () {\n l1ActivityUnconfirmedRef.current = false;\n l1ActivityConfirmedRef.current = false;\n }, [effectiveTxid]);\n React.useEffect(function () {\n if (typeof window === \'undefined\') return;\n if (!chainStatus || !chainStatus.txid || !chainStatus.verified) return;\n var txid = chainStatus.txid;\n var conf = Number(chainStatus.confirmations || 0);\n if (conf === 0 && !l1ActivityUnconfirmedRef.current) {\n l1ActivityUnconfirmedRef.current = true;\n window.dispatchEvent(new CustomEvent(\'fabric:l1PaymentActivity\', {\n detail: {\n kind: \'unconfirmed\',\n txid: txid,\n inMempool: !!chainStatus.inMempool,\n label: label || null\n }\n }));\n }\n if (conf > 0 && !l1ActivityConfirmedRef.current) {\n l1ActivityConfirmedRef.current = true;\n window.dispatchEvent(new CustomEvent(\'fabric:l1PaymentActivity\', {\n detail: {\n kind: \'confirmed\',\n txid: txid,\n confirmations: conf,\n label: label || null\n }\n }));\n }\n }, [chainStatus, label]);\n if (!address || amountSats == null || amountSats <= 0) return null;\n var amountBtc = formatBtcFromSats(amountSats);\n var amountFormatted = formatSatsDisplay(amountSats);\n var isPaid = isPaidFlow;\n var isConfirmed = !!(chainStatus && chainStatus.verified && Number(chainStatus.confirmations) > 0);\n var isMempoolPaid = !!(chainStatus && chainStatus.verified && !isConfirmed);\n var headerWaiting = isPaid && (!chainStatus || chainStatus.loading);\n var borderColor = isConfirmed ? \'#21ba45\' : isMempoolPaid || headerWaiting ? \'#f2711c\' : isPaid ? \'#f2711c\' : BITCOIN_ORANGE;\n var cardStyle = {\n border: "2px solid ".concat(borderColor),\n borderRadius: 8,\n overflow: \'hidden\',\n maxWidth: compact ? 320 : 400,\n background: \'#fff\'\n };\n var headerStyle = {\n background: isConfirmed ? \'#21ba45\' : isPaid ? \'#f2711c\' : BITCOIN_ORANGE,\n color: \'#fff\',\n padding: \'0.75em 1em\',\n fontSize: \'0.95em\',\n fontWeight: 600,\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n gap: \'0.5em\'\n };\n var bodyStyle = {\n padding: compact ? \'1em\' : \'1.5em\',\n textAlign: \'center\'\n };\n return /*#__PURE__*/React.createElement("div", {\n style: cardStyle\n }, /*#__PURE__*/React.createElement("div", {\n style: headerStyle\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n flex: \'1 1 auto\',\n minWidth: 0\n }\n }, isConfirmed ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Icon, {\n name: "check circle"\n }), " Payment confirmed") : isMempoolPaid ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Icon, {\n name: "clock"\n }), " Awaiting confirmation") : headerWaiting ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Icon, {\n name: "sync"\n }), " Verifying payment\\u2026") : isPaid ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Icon, {\n name: "warning circle"\n }), " Paid \\u2014 confirmation pending") : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), " Pay with Bitcoin")), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n icon: true,\n basic: true,\n inverted: true,\n compact: true,\n size: "small",\n "aria-label": "Advanced: Joinmarket pool targets and optional Payjoin BIP21 for this invoice",\n title: "Joinmarket pools & Payjoin",\n onClick: function onClick() {\n return setAdvancedOpen(true);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "setting"\n }))), /*#__PURE__*/React.createElement("div", {\n style: bodyStyle\n }, label && /*#__PURE__*/React.createElement("div", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginBottom: \'0.5em\'\n }\n }, label), !isPaid && qrDataUrl && /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("img", {\n src: qrDataUrl,\n alt: "Bitcoin payment QR code",\n style: {\n display: \'block\',\n margin: \'0 auto\',\n borderRadius: 4\n }\n }), /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.8em\',\n color: \'#888\',\n marginTop: \'0.5em\'\n }\n }, "Scan with your wallet")), /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: compact ? \'1.1em\' : \'1.4em\',\n fontWeight: 700,\n color: BITCOIN_ORANGE,\n marginBottom: \'0.25em\'\n }\n }, amountBtc, " BTC"), /*#__PURE__*/React.createElement("div", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginBottom: \'1em\'\n }\n }, amountFormatted, " satoshis"), /*#__PURE__*/React.createElement("div", {\n style: {\n background: \'#f7f7f7\',\n borderRadius: 4,\n padding: \'0.6em 0.8em\',\n fontFamily: \'monospace\',\n fontSize: compact ? \'0.75em\' : \'0.85em\',\n wordBreak: \'break-all\',\n textAlign: \'left\',\n marginBottom: \'0.75em\'\n }\n }, address), compact && !isPaid && !isMainnet && /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.78em\',\n color: \'#666\',\n marginBottom: \'0.65em\',\n textAlign: \'left\',\n lineHeight: 1.4\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Second tab:"), " use the blue ", /*#__PURE__*/React.createElement("strong", null, "Open payer tab (prefilled)"), " control for this invoice (same origin, new tab; shown to the right of the card on wide layouts). It opens Payments with ", /*#__PURE__*/React.createElement("code", null, "payTo"), " and ", /*#__PURE__*/React.createElement("code", null, "payAmountSats"), ", and scrolls to Make Payment.", uf.bitcoinInvoices ? /*#__PURE__*/React.createElement(React.Fragment, null, " See the walkthrough at the top of ", /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/invoices#fabric-invoices-tab-demo"\n }, "Invoices"), ".") : /*#__PURE__*/React.createElement(React.Fragment, null, " Enable ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin \\u2014 Invoices"), " in Admin \\u2192 Feature visibility for a link to the walkthrough.")), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n justifyContent: \'center\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n onClick: function onClick() {\n return handleCopy(address);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n }), copied ? \'Copied!\' : \'Copy address\'), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n onClick: function onClick() {\n return handleCopy("".concat(address, "\\n").concat(amountFormatted, " sats"));\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n }), "Copy both")), network && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\',\n fontSize: \'0.8em\',\n color: \'#999\'\n }\n }, String(network).toLowerCase()), !isPaid && isMainnet && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: \'1em\',\n textAlign: \'left\'\n }\n }, "Mainnet: pay with your own wallet from the QR or address above, then paste the transaction id below. The Hub will verify against its configured ", /*#__PURE__*/React.createElement("code", null, "bitcoind"), " (requires a node that can serve the tx)."), !isPaid && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'1em\',\n textAlign: \'left\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.85em\',\n color: \'#666\',\n marginBottom: \'0.35em\'\n }\n }, "Paid from another wallet? Paste txid:"), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Input, {\n placeholder: "abc123\\u2026 (64 hex characters)",\n value: externalTxid,\n onChange: function onChange(e, _ref6) {\n var value = _ref6.value;\n return setExternalTxid(value != null ? String(value) : e && e.target && e.target.value || \'\');\n },\n onInput: function onInput(e) {\n var v = e && e.target && e.target.value != null ? String(e.target.value) : \'\';\n if (v !== externalTxid) setExternalTxid(v);\n },\n style: {\n flex: \'1 1 12em\',\n minWidth: \'10em\'\n },\n input: {\n \'aria-label\': \'Bitcoin transaction id for external L1 payment verification\'\n }\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n content: "Confirm payment",\n icon: "checkmark",\n "aria-label": "Confirm payment: verify pasted txid pays this invoice (L1)",\n loading: verifying,\n disabled: verifying || paying || !String(externalTxid || \'\').trim(),\n onClick: handleVerifyExternal\n }))), !isPaid && !isMainnet && hubPayBlockedByIdentity && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'1em\',\n textAlign: \'left\'\n }\n }, "Unlock your identity in the top bar to use ", /*#__PURE__*/React.createElement("strong", null, "Pay Now"), " here. You can still pay from any external wallet and paste the txid below \\u2014 that creates a real on-chain payment verified by the hub."), !isPaid && !isMainnet && /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n style: {\n marginTop: \'1em\',\n background: BITCOIN_ORANGE\n },\n icon: "bitcoin",\n content: "Pay Now",\n "aria-label": "Pay invoice via hub Payments API (admin token required; hub bitcoind broadcasts)",\n loading: paying,\n disabled: paying || verifying || hubPayBlockedByIdentity,\n onClick: handlePay\n }), error && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginTop: \'1em\',\n textAlign: \'left\'\n }\n }, error), isPaid && effectiveTxid && /*#__PURE__*/React.createElement(Message, {\n info: isConfirmed,\n warning: !isConfirmed && !!chainStatus && chainStatus.verified,\n size: "small",\n style: {\n marginTop: \'1em\',\n textAlign: \'left\'\n }\n }, chainStatus && chainStatus.loading ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0\n }\n }, "Checking mempool and block depth\\u2026") : isConfirmed ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0\n }\n }, function () {\n var rawC = chainStatus && chainStatus.confirmations != null ? Number(chainStatus.confirmations) : 0;\n var c = Number.isFinite(rawC) ? rawC : 0;\n var label = c === 1 ? \'1 confirmation\' : "".concat(c, " confirmations");\n return /*#__PURE__*/React.createElement(React.Fragment, null, label, ".", \' \', uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(effectiveTxid))\n }, "Open transaction") : /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.9em\',\n wordBreak: \'break-all\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility for the tx viewer"\n }, effectiveTxid));\n }()) : chainStatus && chainStatus.verified ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0\n }\n }, "Transaction is in the mempool or has zero confirmations; it will show as settled after the next block.", \' \', uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(effectiveTxid))\n }, "View status") : /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.9em\',\n wordBreak: \'break-all\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility for the tx viewer"\n }, effectiveTxid), chainStatus.matchedSats != null && /*#__PURE__*/React.createElement("span", {\n style: {\n display: \'block\',\n marginTop: \'0.35em\',\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, "Matched ", Number(chainStatus.matchedSats).toLocaleString(), " sats to this invoice address.")) : /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0\n }\n }, chainStatus && chainStatus.error ? "Could not verify yet (".concat(chainStatus.error, "). Retrying\\u2026") : \'Waiting for the node to see this transaction…\', \' \', uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(effectiveTxid))\n }, "Transaction page") : /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.9em\',\n wordBreak: \'break-all\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility for the tx viewer"\n }, effectiveTxid))), isPaid && persistedTxids.length > 0 && /*#__PURE__*/React.createElement(Message, {\n positive: true,\n size: "small",\n style: {\n marginTop: \'1em\',\n textAlign: \'left\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Payment", persistedTxids.length > 1 ? \'s\' : \'\', " (", persistedTxids.length, "):"), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.25em\'\n }\n }, persistedTxids.map(function (txid) {\n return /*#__PURE__*/React.createElement("div", {\n key: txid,\n style: {\n marginTop: \'0.25em\'\n }\n }, uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(txid)),\n style: {\n fontSize: \'0.85em\',\n wordBreak: \'break-all\'\n }\n }, txid) : /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\',\n wordBreak: \'break-all\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility for the tx viewer"\n }, txid));\n })))), /*#__PURE__*/React.createElement(Modal, {\n closeIcon: true,\n open: advancedOpen,\n onClose: function onClose() {\n return setAdvancedOpen(false);\n },\n size: "small"\n }, /*#__PURE__*/React.createElement(Modal.Header, null, "Advanced \\u2014 Joinmarket & pools"), /*#__PURE__*/React.createElement(Modal.Content, {\n scrolling: true\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\',\n fontSize: \'0.9em\',\n lineHeight: 1.45,\n marginBottom: \'0.75em\'\n }\n }, "Three local ", /*#__PURE__*/React.createElement("strong", null, "pool"), " targets (BTC) for operator reference when staging hub-wallet liquidity for", \' \', /*#__PURE__*/React.createElement("strong", null, "ACP / Payjoin"), "-style flows. They do not move coins by themselves. Optional: mint a", \' \', /*#__PURE__*/React.createElement("strong", null, "BIP78"), " deposit session for ", /*#__PURE__*/React.createElement("em", null, "this invoice address"), " so payers can use a ", /*#__PURE__*/React.createElement("code", null, "bitcoin:"), " URI with", \' \', /*#__PURE__*/React.createElement("code", null, "pj="), " (Payjoin v2-compatible receiver); then open Payments to sign or boost."), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: 0\n }\n }, "Pool sizes (BTC)"), /*#__PURE__*/React.createElement(Form, null, poolLabels().map(function (lbl, i) {\n return /*#__PURE__*/React.createElement(Form.Field, {\n key: lbl\n }, /*#__PURE__*/React.createElement("label", null, lbl), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n step: "any",\n min: "1e-8",\n value: poolBtc[i] != null ? String(poolBtc[i]) : \'\',\n onChange: function onChange(e, _ref7) {\n var value = _ref7.value;\n var next = _toConsumableArray(poolBtc);\n next[i] = Number(value);\n setPoolBtc(next);\n }\n }), /*#__PURE__*/React.createElement("span", {\n style: {\n fontSize: \'0.85em\',\n color: \'#888\'\n }\n }, "\\u2248 ", btcToSats(poolBtc[i] != null ? poolBtc[i] : 0).toLocaleString(), " sats"));\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n onClick: handleSavePools\n }, "Save pool targets")), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Optional Payjoin withdrawal to this invoice"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\',\n fontSize: \'0.88em\'\n }\n }, "Creates a Hub ", /*#__PURE__*/React.createElement("strong", null, "Payjoin"), " session paying this card\'s address (same on-chain destination as the QR above). Uses standard BIP21 + ", /*#__PURE__*/React.createElement("code", null, "pj="), "; no Taproot template swap on the invoice address."), !isPaid && /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "violet",\n loading: joinmarketBusy,\n disabled: joinmarketBusy,\n onClick: handleCreateInvoicePayjoin\n }, "Create Payjoin BIP21 for this invoice"), isPaid && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "tiny"\n }, "Invoice already has a payment recorded \\u2014 Payjoin session creation is hidden."), joinmarketErr && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginTop: \'0.75em\'\n }\n }, joinmarketErr), joinmarketUri && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Message, {\n success: true,\n size: "small"\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0 0 0.5em\',\n wordBreak: \'break-all\',\n fontSize: \'0.85em\'\n }\n }, /*#__PURE__*/React.createElement("code", null, joinmarketUri)), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n icon: "copy",\n content: "Copy BIP21",\n onClick: function onClick() {\n return handleCopy(joinmarketUri);\n }\n }), /*#__PURE__*/React.createElement(Button, {\n as: "a",\n size: "small",\n primary: true,\n icon: "external alternate",\n content: "Open Payments (Payjoin URI)",\n href: buildTabPayerPayjoinUrl(joinmarketUri),\n target: "_blank",\n rel: "noopener noreferrer"\n })))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: function onClick() {\n return setAdvancedOpen(false);\n }\n }, "Close"))));\n}\nmodule.exports = Invoice;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QixPQUFPLEVBQUMsWUFBWTtJQUNwQmpCLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO01BQUEsT0FBUTVELFVBQVUsQ0FBQ2xFLGFBQWEsQ0FBQztJQUFBO0VBQUMsQ0FDMUMsQ0FBQyxlQUNGekgsS0FBQSxDQUFBNE8sYUFBQSxDQUFDdE8sTUFBTTtJQUNMb1IsRUFBRSxFQUFDLEdBQUc7SUFDTnJDLElBQUksRUFBQyxPQUFPO0lBQ1pzQixPQUFPO0lBQ1B6QixJQUFJLEVBQUMsb0JBQW9CO0lBQ3pCc0IsT0FBTyxFQUFDLDZCQUE2QjtJQUNyQ3dCLElBQUksRUFBRXhRLHVCQUF1QixDQUFDaUcsYUFBYSxDQUFFO0lBQzdDNEksTUFBTSxFQUFDLFFBQVE7SUFDZjRCLEdBQUcsRUFBQztFQUFxQixDQUMxQixDQUNNLENBQ04sQ0FFTSxDQUFDLGVBQ2hCalMsS0FBQSxDQUFBNE8sYUFBQSxDQUFDL04sS0FBSyxDQUFDcVIsT0FBTyxxQkFDWmxTLEtBQUEsQ0FBQTRPLGFBQUEsQ0FBQ3RPLE1BQU07SUFBQzJPLElBQUksRUFBQyxRQUFRO0lBQUNNLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO01BQUEsT0FBUTdJLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFBQTtFQUFDLEdBQUMsT0FFckQsQ0FDSyxDQUNWLENBQ0osQ0FBQztBQUVWO0FBRUF5TCxNQUFNLENBQUNDLE9BQU8sR0FBRzVQLE9BQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvSW52b2ljZS5qcz84NDhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5jb25zdCBRUkNvZGUgPSByZXF1aXJlKCdxcmNvZGUnKTtcbmNvbnN0IHtcbiAgQnV0dG9uLFxuICBEaXZpZGVyLFxuICBGb3JtLFxuICBIZWFkZXIsXG4gIEljb24sXG4gIElucHV0LFxuICBNZXNzYWdlLFxuICBNb2RhbFxufSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCB7XG4gIGxvYWRVcHN0cmVhbVNldHRpbmdzLFxuICBnZXRTcGVuZFdhbGxldENvbnRleHQsXG4gIGdldE5leHRSZWNlaXZlV2FsbGV0Q29udGV4dCxcbiAgc2VuZFBheW1lbnQsXG4gIHZlcmlmeUwxUGF5bWVudCxcbiAgY3JlYXRlUGF5am9pbkRlcG9zaXRcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvYml0Y29pbkNsaWVudCcpO1xuY29uc3QgeyBTQVRTX1BFUl9CVEMgfSA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cycpO1xuY29uc3QgeyBidWlsZFRhYlBheWVyUGF5am9pblVybCB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3RhYlBheWVyRGVtb1VybCcpO1xuY29uc3Qge1xuICBsb2FkSm9pbm1hcmtldFBvb2xTaXplc0J0YyxcbiAgc2F2ZUpvaW5tYXJrZXRQb29sU2l6ZXNCdGMsXG4gIHBvb2xMYWJlbHMsXG4gIGJ0Y1RvU2F0cyxcbiAgREVGQVVMVF9QT09MU19CVENcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvam9pbm1hcmtldFBvb2xQcmVmZXJlbmNlcycpO1xuY29uc3QgeyBmb3JtYXRTYXRzRGlzcGxheSwgZm9ybWF0QnRjRnJvbVNhdHMgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mb3JtYXRTYXRzJyk7XG5jb25zdCB7IHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJBZG1pblRva2VuQnJvd3NlcicpO1xuY29uc3Qge1xuICBsb2FkSHViVWlGZWF0dXJlRmxhZ3MsXG4gIHN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YlVpRmVhdHVyZUZsYWdzJyk7XG5cbi8vIEJpdFBheSBjaXJjYSAyMDE2OiBCaXRjb2luIG9yYW5nZSBhY2NlbnRcbmNvbnN0IEJJVENPSU5fT1JBTkdFID0gJyNGNzkzMUEnO1xuXG4vKipcbiAqIFRoZSBJbnZvaWNlIGNvbXBvbmVudCBwcm92aWRlcyBhIHBheW1lbnQgVUkgd2l0aCBRUiBjb2RlLCBhZGRyZXNzLCBhbmQgYW1vdW50LlxuICogUGF5IGJ1dHRvbiBjcmVhdGVzIGEgdHJhbnNhY3Rpb24gZnJvbSB0aGUgSHViIHdhbGxldCB2aWEgdGhlIHBheW1lbnRzIEFQSS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcHMuaW52b2ljZUlkXSAtIEludm9pY2UgaWQgKGZvciBwZXJzaXN0aW5nIHBheW1lbnRzKVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BzLmFkZHJlc3MgLSBEZXN0aW5hdGlvbiBCaXRjb2luIGFkZHJlc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBwcm9wcy5hbW91bnRTYXRzIC0gQW1vdW50IGluIHNhdG9zaGlzXG4gKiBAcGFyYW0ge3N0cmluZ30gW3Byb3BzLm5ldHdvcmtdIC0gTmV0d29yayBuYW1lIChyZWd0ZXN0LCB0ZXN0bmV0LCBtYWlubmV0KSBmb3IgZGlzcGxheVxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm9wcy5sYWJlbF0gLSBPcHRpb25hbCBsYWJlbCBmb3IgdGhlIGludm9pY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcHMubWVtb10gLSBPcHRpb25hbCBtZW1vIHRvIGluY2x1ZGUgd2l0aCB0aGUgcGF5bWVudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gW3Byb3BzLnR4aWRzXSAtIEFycmF5IG9mIHR4aWRzIGZvciBwYXltZW50cyByZWNlaXZlZCAocGVyc2lzdGVkIG9uIGludm9pY2UpXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BzLmlkZW50aXR5XSAtIElkZW50aXR5IGZvciB3YWxsZXQgY29udGV4dCAoeHB1Yik7IEh1YiB1c2VzIGl0cyB3YWxsZXQgZm9yIHJlZ3Rlc3RcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtwcm9wcy5vblBhaWRdIC0gQ2FsbGJhY2sgb24gc3VjY2VzczogKHR4aWQpID0+IHZvaWRcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtwcm9wcy5vbkVycm9yXSAtIENhbGxiYWNrIG9uIGVycm9yOiAoZXJyb3IpID0+IHZvaWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3BzLmNvbXBhY3RdIC0gVXNlIGNvbXBhY3QgbGF5b3V0IChlLmcuIGlubGluZSBpbiBtb2RhbHMpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcm9wcy5yZXF1aXJlVW5sb2NrZWRJZGVudGl0eUZvckh1YlBheV0gLSBXaGVuIHRydWUsIGRpc2FibGUg4oCcUGF5IE5vd+KAnSB1bnRpbCBgaWRlbnRpdHlVbmxvY2tlZGAgKGh1YiBzdGlsbCBicm9hZGNhc3RzIGEgcmVhbCB0eDsgb3BlcmF0b3Igc2Vzc2lvbiBtdXN0IGJlIHVubG9ja2VkKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3BzLmlkZW50aXR5VW5sb2NrZWRdIC0gUGFpcmVkIHdpdGggYHJlcXVpcmVVbmxvY2tlZElkZW50aXR5Rm9ySHViUGF5YCAoZGVmYXVsdCB0cnVlIHdoZW4gbm90IHJlcXVpcmVkKS5cbiAqL1xuZnVuY3Rpb24gSW52b2ljZSAocHJvcHMpIHtcbiAgY29uc3QgW2h1YlVpVGljaywgc2V0SHViVWlUaWNrXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4gc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MoKCkgPT4gc2V0SHViVWlUaWNrKCh0KSA9PiB0ICsgMSkpLCBbXSk7XG4gIHZvaWQgaHViVWlUaWNrO1xuICBjb25zdCB1ZiA9IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuXG4gIGNvbnN0IHtcbiAgICBpbnZvaWNlSWQsXG4gICAgYWRkcmVzcyxcbiAgICBhbW91bnRTYXRzLFxuICAgIG5ldHdvcmsgPSAncmVndGVzdCcsXG4gICAgbGFiZWwsXG4gICAgbWVtbyA9ICcnLFxuICAgIHR4aWRzID0gW10sXG4gICAgaWRlbnRpdHkgPSB7fSxcbiAgICBvblBhaWQsXG4gICAgb25FcnJvcixcbiAgICBjb21wYWN0ID0gZmFsc2UsXG4gICAgYWRtaW5Ub2tlbjogYWRtaW5Ub2tlblByb3AsXG4gICAgcmVxdWlyZVVubG9ja2VkSWRlbnRpdHlGb3JIdWJQYXkgPSBmYWxzZSxcbiAgICBpZGVudGl0eVVubG9ja2VkID0gdHJ1ZVxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgW3BheWluZywgc2V0UGF5aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3ZlcmlmeWluZywgc2V0VmVyaWZ5aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2V4dGVybmFsVHhpZCwgc2V0RXh0ZXJuYWxUeGlkXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3Jlc3VsdCwgc2V0UmVzdWx0XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbcXJEYXRhVXJsLCBzZXRRckRhdGFVcmxdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtjaGFpblN0YXR1cywgc2V0Q2hhaW5TdGF0dXNdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFthZHZhbmNlZE9wZW4sIHNldEFkdmFuY2VkT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtwb29sQnRjLCBzZXRQb29sQnRjXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IFsuLi5ERUZBVUxUX1BPT0xTX0JUQ10pO1xuICBjb25zdCBbam9pbm1hcmtldEJ1c3ksIHNldEpvaW5tYXJrZXRCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2pvaW5tYXJrZXRFcnIsIHNldEpvaW5tYXJrZXRFcnJdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtqb2lubWFya2V0VXJpLCBzZXRKb2lubWFya2V0VXJpXSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcblxuICBjb25zdCB1cHN0cmVhbSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gbG9hZFVwc3RyZWFtU2V0dGluZ3MoKSwgW10pO1xuICBjb25zdCBpZFhwdWIgPSBpZGVudGl0eSAmJiBpZGVudGl0eS54cHViID8gU3RyaW5nKGlkZW50aXR5LnhwdWIpIDogJyc7XG4gIGNvbnN0IGlkWHBydiA9IGlkZW50aXR5ICYmIGlkZW50aXR5LnhwcnYgPyBTdHJpbmcoaWRlbnRpdHkueHBydikgOiAnJztcbiAgY29uc3Qgd2FsbGV0ID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiBnZXRTcGVuZFdhbGxldENvbnRleHQoaWRlbnRpdHkpLFxuICAgIFtpZFhwdWIsIGlkWHBydl1cbiAgKTtcblxuICBjb25zdCByZWZyZXNoQ2hhaW5TdGF0dXMgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAodHhpZCkgPT4ge1xuICAgIGNvbnN0IGlkID0gU3RyaW5nKHR4aWQgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIWlkIHx8ICFhZGRyZXNzIHx8ICFhbW91bnRTYXRzKSByZXR1cm47XG4gICAgc2V0Q2hhaW5TdGF0dXMoKHByZXYpID0+ICh7XG4gICAgICAuLi4ocHJldiAmJiBwcmV2LnR4aWQgPT09IGlkID8gcHJldiA6IHt9KSxcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICB0eGlkOiBpZFxuICAgIH0pKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdmVyaWZ5TDFQYXltZW50KHVwc3RyZWFtLCB7XG4gICAgICAgIHR4aWQ6IGlkLFxuICAgICAgICBhZGRyZXNzLFxuICAgICAgICBhbW91bnRTYXRzOiBOdW1iZXIoYW1vdW50U2F0cylcbiAgICAgIH0pO1xuICAgICAgc2V0Q2hhaW5TdGF0dXMoe1xuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgdHhpZDogaWQsXG4gICAgICAgIHZlcmlmaWVkOiAhIXJlcy52ZXJpZmllZCxcbiAgICAgICAgY29uZmlybWF0aW9uczogcmVzLmNvbmZpcm1hdGlvbnMgIT0gbnVsbCA/IE51bWJlcihyZXMuY29uZmlybWF0aW9ucykgOiBudWxsLFxuICAgICAgICBpbk1lbXBvb2w6ICEhcmVzLmluTWVtcG9vbCxcbiAgICAgICAgbWF0Y2hlZFNhdHM6IHJlcy5tYXRjaGVkU2F0c1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbXNnID0gZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBzZXRDaGFpblN0YXR1cyh7XG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICB0eGlkOiBpZCxcbiAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxuICAgICAgICBjb25maXJtYXRpb25zOiBudWxsLFxuICAgICAgICBpbk1lbXBvb2w6IGZhbHNlLFxuICAgICAgICBlcnJvcjogbXNnXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFt1cHN0cmVhbSwgYWRkcmVzcywgYW1vdW50U2F0c10pO1xuXG4gIC8vIFBheW1lbnQgVVJJIGZvciBRUiBjb2RlIChCSVAgMjEpXG4gIGNvbnN0IHBheW1lbnRVcmkgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWFkZHJlc3MgfHwgIWFtb3VudFNhdHMgfHwgYW1vdW50U2F0cyA8PSAwKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBidGMgPSAoTnVtYmVyKGFtb3VudFNhdHMpIC8gU0FUU19QRVJfQlRDKS50b0ZpeGVkKDgpO1xuICAgIHJldHVybiBgYml0Y29pbjoke2FkZHJlc3N9P2Ftb3VudD0ke2J0Y31gO1xuICB9LCBbYWRkcmVzcywgYW1vdW50U2F0c10pO1xuXG4gIC8vIEdlbmVyYXRlIFFSIGNvZGVcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXBheW1lbnRVcmkpIHtcbiAgICAgIHNldFFyRGF0YVVybChudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgUVJDb2RlLnRvRGF0YVVSTChwYXltZW50VXJpLCB7XG4gICAgICB3aWR0aDogY29tcGFjdCA/IDE0MCA6IDIwMCxcbiAgICAgIG1hcmdpbjogMixcbiAgICAgIGNvbG9yOiB7IGRhcms6ICcjMDAwMDAwJywgbGlnaHQ6ICcjZmZmZmZmJyB9XG4gICAgfSkudGhlbihzZXRRckRhdGFVcmwpLmNhdGNoKCgpID0+IHNldFFyRGF0YVVybChudWxsKSk7XG4gIH0sIFtwYXltZW50VXJpLCBjb21wYWN0XSk7XG5cbiAgY29uc3QgaHViUGF5QmxvY2tlZEJ5SWRlbnRpdHkgPSAhIShyZXF1aXJlVW5sb2NrZWRJZGVudGl0eUZvckh1YlBheSAmJiAhaWRlbnRpdHlVbmxvY2tlZCk7XG5cbiAgY29uc3QgaGFuZGxlUGF5ID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghYWRkcmVzcyB8fCAhYW1vdW50U2F0cyB8fCBhbW91bnRTYXRzIDw9IDApIHJldHVybjtcbiAgICBpZiAocmVxdWlyZVVubG9ja2VkSWRlbnRpdHlGb3JIdWJQYXkgJiYgIWlkZW50aXR5VW5sb2NrZWQpIHtcbiAgICAgIHNldEVycm9yKCdVbmxvY2sgeW91ciBGYWJyaWMgaWRlbnRpdHkgKHRvcCBiYXIpIGJlZm9yZSBQYXkgTm93IOKAlCB0aGlzIHNlc3Npb24gbXVzdCBiZSB1bmxvY2tlZCBmb3IgZGlzdHJpYnV0ZS9wdWJsaXNoIGZsb3dzLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRQYXlpbmcodHJ1ZSk7XG4gICAgc2V0RXJyb3IobnVsbCk7XG4gICAgc2V0UmVzdWx0KG51bGwpO1xuICAgIHNldENoYWluU3RhdHVzKG51bGwpO1xuICAgIGNvbnN0IGFkbWluVG9rZW4gPSByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKGFkbWluVG9rZW5Qcm9wKTtcbiAgICBpZiAoIWFkbWluVG9rZW4pIHtcbiAgICAgIHNldFBheWluZyhmYWxzZSk7XG4gICAgICBzZXRFcnJvcignQWRtaW4gdG9rZW4gcmVxdWlyZWQgdG8gcGF5IGZyb20gdGhlIEh1YiB3YWxsZXQgKHNldHVwIHRva2VuIGluIGxvY2FsIHN0b3JhZ2UpLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VuZFBheW1lbnQodXBzdHJlYW0sIHdhbGxldCwge1xuICAgICAgICB0bzogYWRkcmVzcyxcbiAgICAgICAgYW1vdW50U2F0czogTnVtYmVyKGFtb3VudFNhdHMpLFxuICAgICAgICBtZW1vOiBtZW1vIHx8IChsYWJlbCA/IGBJbnZvaWNlOiAke2xhYmVsfWAgOiAnJyksXG4gICAgICAgIGFkbWluVG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHhpZCA9IHJlcyAmJiAocmVzLnBheW1lbnQgJiYgcmVzLnBheW1lbnQudHhpZCkgfHwgcmVzLnR4aWQ7XG4gICAgICBpZiAodHhpZCkge1xuICAgICAgICBzZXRSZXN1bHQoeyB0eGlkLCBzdWNjZXNzOiB0cnVlIH0pO1xuICAgICAgICByZWZyZXNoQ2hhaW5TdGF0dXModHhpZCk7XG4gICAgICAgIGlmICh0eXBlb2Ygb25QYWlkID09PSAnZnVuY3Rpb24nKSBvblBhaWQodHhpZCk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2xpZW50QmFsYW5jZVVwZGF0ZScpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyTXNnID0gKHJlcyAmJiByZXMuZXJyb3IpIHx8IChyZXMgJiYgcmVzLm1lc3NhZ2UpIHx8ICdQYXltZW50IGNvbXBsZXRlZCBidXQgbm8gdHhpZCByZXR1cm5lZC4nO1xuICAgICAgICBzZXRFcnJvcihlcnJNc2cpO1xuICAgICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIG9uRXJyb3IobmV3IEVycm9yKGVyck1zZykpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgbXNnID0gZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgIHNldEVycm9yKG1zZyk7XG4gICAgICBpZiAodHlwZW9mIG9uRXJyb3IgPT09ICdmdW5jdGlvbicpIG9uRXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0UGF5aW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFthZGRyZXNzLCBhbW91bnRTYXRzLCBtZW1vLCBsYWJlbCwgdXBzdHJlYW0sIHdhbGxldCwgb25QYWlkLCBvbkVycm9yLCByZWZyZXNoQ2hhaW5TdGF0dXMsIGFkbWluVG9rZW5Qcm9wLCByZXF1aXJlVW5sb2NrZWRJZGVudGl0eUZvckh1YlBheSwgaWRlbnRpdHlVbmxvY2tlZF0pO1xuXG4gIGNvbnN0IGlzTWFpbm5ldCA9IFN0cmluZyhuZXR3b3JrIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnbWFpbm5ldCc7XG5cbiAgY29uc3QgaGFuZGxlVmVyaWZ5RXh0ZXJuYWwgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhpZCA9IFN0cmluZyhleHRlcm5hbFR4aWQgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXR4aWQgfHwgIWFkZHJlc3MgfHwgIWFtb3VudFNhdHMpIHJldHVybjtcbiAgICBzZXRWZXJpZnlpbmcodHJ1ZSk7XG4gICAgc2V0RXJyb3IobnVsbCk7XG4gICAgc2V0UmVzdWx0KG51bGwpO1xuICAgIHNldENoYWluU3RhdHVzKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB2ZXJpZnlMMVBheW1lbnQodXBzdHJlYW0sIHtcbiAgICAgICAgdHhpZCxcbiAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgYW1vdW50U2F0czogTnVtYmVyKGFtb3VudFNhdHMpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXMgJiYgcmVzLnZlcmlmaWVkKSB7XG4gICAgICAgIHNldFJlc3VsdCh7IHR4aWQsIHN1Y2Nlc3M6IHRydWUgfSk7XG4gICAgICAgIHNldEV4dGVybmFsVHhpZCgnJyk7XG4gICAgICAgIHNldENoYWluU3RhdHVzKHtcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB0eGlkLFxuICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxuICAgICAgICAgIGNvbmZpcm1hdGlvbnM6IHJlcy5jb25maXJtYXRpb25zICE9IG51bGwgPyBOdW1iZXIocmVzLmNvbmZpcm1hdGlvbnMpIDogbnVsbCxcbiAgICAgICAgICBpbk1lbXBvb2w6ICEhcmVzLmluTWVtcG9vbCxcbiAgICAgICAgICBtYXRjaGVkU2F0czogcmVzLm1hdGNoZWRTYXRzXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZW9mIG9uUGFpZCA9PT0gJ2Z1bmN0aW9uJykgb25QYWlkKHR4aWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbXNnID0gJ1RoaXMgdHJhbnNhY3Rpb24gZG9lcyBub3QgcGF5IHRoaXMgYWRkcmVzcyBmb3IgYXQgbGVhc3QgdGhlIGludm9pY2UgYW1vdW50LCBvciB0aGUgdHggY291bGQgbm90IGJlIGxvYWRlZCAodHhpbmRleCBkaXNhYmxlZCAvIHdyb25nIG5ldHdvcmspLic7XG4gICAgICAgIHNldEVycm9yKG1zZyk7XG4gICAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykgb25FcnJvcihuZXcgRXJyb3IobXNnKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBtc2cgPSBlcnIgJiYgZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgc2V0RXJyb3IobXNnKTtcbiAgICAgIGlmICh0eXBlb2Ygb25FcnJvciA9PT0gJ2Z1bmN0aW9uJykgb25FcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRWZXJpZnlpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSwgW2V4dGVybmFsVHhpZCwgYWRkcmVzcywgYW1vdW50U2F0cywgdXBzdHJlYW0sIG9uUGFpZCwgb25FcnJvcl0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhZHZhbmNlZE9wZW4pIHJldHVybjtcbiAgICBzZXRQb29sQnRjKGxvYWRKb2lubWFya2V0UG9vbFNpemVzQnRjKCkpO1xuICAgIHNldEpvaW5tYXJrZXRFcnIobnVsbCk7XG4gICAgc2V0Sm9pbm1hcmtldFVyaSgnJyk7XG4gIH0sIFthZHZhbmNlZE9wZW5dKTtcblxuICBjb25zdCBoYW5kbGVTYXZlUG9vbHMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UG9vbEJ0YyhzYXZlSm9pbm1hcmtldFBvb2xTaXplc0J0Yyhwb29sQnRjKSk7XG4gIH0sIFtwb29sQnRjXSk7XG5cbiAgY29uc3QgaGFuZGxlQ3JlYXRlSW52b2ljZVBheWpvaW4gPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0Sm9pbm1hcmtldEJ1c3kodHJ1ZSk7XG4gICAgc2V0Sm9pbm1hcmtldEVycihudWxsKTtcbiAgICBzZXRKb2lubWFya2V0VXJpKCcnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdyA9IGdldE5leHRSZWNlaXZlV2FsbGV0Q29udGV4dChpZGVudGl0eSk7XG4gICAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgY3JlYXRlUGF5am9pbkRlcG9zaXQodXBzdHJlYW0sIHcsIHtcbiAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgYW1vdW50U2F0czogTnVtYmVyKGFtb3VudFNhdHMpLFxuICAgICAgICBsYWJlbDogbGFiZWwgfHwgJ0ludm9pY2UgUGF5am9pbicsXG4gICAgICAgIG1lbW86IFN0cmluZyhtZW1vIHx8IGBpbnZvaWNlLWpvaW5tYXJrZXQ6JHtpbnZvaWNlSWQgfHwgJ2xvY2FsJ31gKS5zbGljZSgwLCAyMDApXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHVyaSA9IHNlc3Npb24gJiYgKHNlc3Npb24uYmlwMjFVcmkgfHwgJycpO1xuICAgICAgaWYgKCF1cmkgfHwgIS9eYml0Y29pbjovaS50ZXN0KFN0cmluZyh1cmkpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BheWpvaW4gc2Vzc2lvbiBkaWQgbm90IHJldHVybiBhIHZhbGlkIEJJUDIxIFVSSSAoY2hlY2sgSHViIHBheWpvaW4gc2VydmljZSkuJyk7XG4gICAgICB9XG4gICAgICBzZXRKb2lubWFya2V0VXJpKFN0cmluZyh1cmkpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGVyciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgICBzZXRKb2lubWFya2V0RXJyKG1zZyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldEpvaW5tYXJrZXRCdXN5KGZhbHNlKTtcbiAgICB9XG4gIH0sIFt1cHN0cmVhbSwgaWRlbnRpdHksIGFkZHJlc3MsIGFtb3VudFNhdHMsIGxhYmVsLCBtZW1vLCBpbnZvaWNlSWRdKTtcblxuICBjb25zdCBoYW5kbGVDb3B5ID0gUmVhY3QudXNlQ2FsbGJhY2soKHRleHQpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRleHQgJiYgbmF2aWdhdG9yICYmIG5hdmlnYXRvci5jbGlwYm9hcmQpIHtcbiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCk7XG4gICAgICAgIHNldENvcGllZCh0cnVlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRDb3BpZWQoZmFsc2UpLCAxNTAwKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHt9XG4gIH0sIFtdKTtcblxuICBjb25zdCBwZXJzaXN0ZWRUeGlkcyA9IEFycmF5LmlzQXJyYXkodHhpZHMpID8gdHhpZHMgOiBbXTtcbiAgY29uc3QgZWZmZWN0aXZlVHhpZCA9IChyZXN1bHQgJiYgcmVzdWx0LnR4aWQpIHx8IChwZXJzaXN0ZWRUeGlkc1swXSB8fCAnJyk7XG4gIGNvbnN0IGlzUGFpZEZsb3cgPSAhIShlZmZlY3RpdmVUeGlkICYmIChcbiAgICAocmVzdWx0ICYmIHJlc3VsdC5zdWNjZXNzKSB8fFxuICAgIHBlcnNpc3RlZFR4aWRzLmxlbmd0aCA+IDBcbiAgKSk7XG4gIGNvbnN0IGRvbmVQb2xsaW5nID0gISEoY2hhaW5TdGF0dXMgJiYgY2hhaW5TdGF0dXMudmVyaWZpZWQgJiYgTnVtYmVyKGNoYWluU3RhdHVzLmNvbmZpcm1hdGlvbnMpID4gMCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzUGFpZEZsb3cgfHwgIWVmZmVjdGl2ZVR4aWQgfHwgZG9uZVBvbGxpbmcpIHJldHVybjtcbiAgICBpZiAoIWFkZHJlc3MgfHwgYW1vdW50U2F0cyA9PSBudWxsIHx8IGFtb3VudFNhdHMgPD0gMCkgcmV0dXJuO1xuICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgICBjb25zdCB0aWNrID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgYXdhaXQgcmVmcmVzaENoYWluU3RhdHVzKGVmZmVjdGl2ZVR4aWQpO1xuICAgIH07XG4gICAgdGljaygpO1xuICAgIGNvbnN0IGl2ID0gc2V0SW50ZXJ2YWwodGljaywgODAwMCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICBjbGVhckludGVydmFsKGl2KTtcbiAgICB9O1xuICB9LCBbaXNQYWlkRmxvdywgZWZmZWN0aXZlVHhpZCwgZG9uZVBvbGxpbmcsIGFkZHJlc3MsIGFtb3VudFNhdHMsIHJlZnJlc2hDaGFpblN0YXR1c10pO1xuXG4gIGNvbnN0IGwxQWN0aXZpdHlVbmNvbmZpcm1lZFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGwxQWN0aXZpdHlDb25maXJtZWRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGwxQWN0aXZpdHlVbmNvbmZpcm1lZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgbDFBY3Rpdml0eUNvbmZpcm1lZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gIH0sIFtlZmZlY3RpdmVUeGlkXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICBpZiAoIWNoYWluU3RhdHVzIHx8ICFjaGFpblN0YXR1cy50eGlkIHx8ICFjaGFpblN0YXR1cy52ZXJpZmllZCkgcmV0dXJuO1xuICAgIGNvbnN0IHR4aWQgPSBjaGFpblN0YXR1cy50eGlkO1xuICAgIGNvbnN0IGNvbmYgPSBOdW1iZXIoY2hhaW5TdGF0dXMuY29uZmlybWF0aW9ucyB8fCAwKTtcbiAgICBpZiAoY29uZiA9PT0gMCAmJiAhbDFBY3Rpdml0eVVuY29uZmlybWVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGwxQWN0aXZpdHlVbmNvbmZpcm1lZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZmFicmljOmwxUGF5bWVudEFjdGl2aXR5Jywge1xuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBraW5kOiAndW5jb25maXJtZWQnLFxuICAgICAgICAgIHR4aWQsXG4gICAgICAgICAgaW5NZW1wb29sOiAhIWNoYWluU3RhdHVzLmluTWVtcG9vbCxcbiAgICAgICAgICBsYWJlbDogbGFiZWwgfHwgbnVsbFxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfVxuICAgIGlmIChjb25mID4gMCAmJiAhbDFBY3Rpdml0eUNvbmZpcm1lZFJlZi5jdXJyZW50KSB7XG4gICAgICBsMUFjdGl2aXR5Q29uZmlybWVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdmYWJyaWM6bDFQYXltZW50QWN0aXZpdHknLCB7XG4gICAgICAgIGRldGFpbDoge1xuICAgICAgICAgIGtpbmQ6ICdjb25maXJtZWQnLFxuICAgICAgICAgIHR4aWQsXG4gICAgICAgICAgY29uZmlybWF0aW9uczogY29uZixcbiAgICAgICAgICBsYWJlbDogbGFiZWwgfHwgbnVsbFxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfVxuICB9LCBbY2hhaW5TdGF0dXMsIGxhYmVsXSk7XG5cbiAgaWYgKCFhZGRyZXNzIHx8IGFtb3VudFNhdHMgPT0gbnVsbCB8fCBhbW91bnRTYXRzIDw9IDApIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGFtb3VudEJ0YyA9IGZvcm1hdEJ0Y0Zyb21TYXRzKGFtb3VudFNhdHMpO1xuICBjb25zdCBhbW91bnRGb3JtYXR0ZWQgPSBmb3JtYXRTYXRzRGlzcGxheShhbW91bnRTYXRzKTtcbiAgY29uc3QgaXNQYWlkID0gaXNQYWlkRmxvdztcbiAgY29uc3QgaXNDb25maXJtZWQgPSAhIShjaGFpblN0YXR1cyAmJiBjaGFpblN0YXR1cy52ZXJpZmllZCAmJiBOdW1iZXIoY2hhaW5TdGF0dXMuY29uZmlybWF0aW9ucykgPiAwKTtcbiAgY29uc3QgaXNNZW1wb29sUGFpZCA9ICEhKGNoYWluU3RhdHVzICYmIGNoYWluU3RhdHVzLnZlcmlmaWVkICYmICFpc0NvbmZpcm1lZCk7XG4gIGNvbnN0IGhlYWRlcldhaXRpbmcgPSBpc1BhaWQgJiYgKCFjaGFpblN0YXR1cyB8fCBjaGFpblN0YXR1cy5sb2FkaW5nKTtcbiAgY29uc3QgYm9yZGVyQ29sb3IgPSBpc0NvbmZpcm1lZCA/ICcjMjFiYTQ1JyA6IChpc01lbXBvb2xQYWlkIHx8IGhlYWRlcldhaXRpbmcgPyAnI2YyNzExYycgOiAoaXNQYWlkID8gJyNmMjcxMWMnIDogQklUQ09JTl9PUkFOR0UpKTtcblxuICBjb25zdCBjYXJkU3R5bGUgPSB7XG4gICAgYm9yZGVyOiBgMnB4IHNvbGlkICR7Ym9yZGVyQ29sb3J9YCxcbiAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIG1heFdpZHRoOiBjb21wYWN0ID8gMzIwIDogNDAwLFxuICAgIGJhY2tncm91bmQ6ICcjZmZmJ1xuICB9O1xuXG4gIGNvbnN0IGhlYWRlclN0eWxlID0ge1xuICAgIGJhY2tncm91bmQ6IGlzQ29uZmlybWVkID8gJyMyMWJhNDUnIDogKGlzUGFpZCA/ICcjZjI3MTFjJyA6IEJJVENPSU5fT1JBTkdFKSxcbiAgICBjb2xvcjogJyNmZmYnLFxuICAgIHBhZGRpbmc6ICcwLjc1ZW0gMWVtJyxcbiAgICBmb250U2l6ZTogJzAuOTVlbScsXG4gICAgZm9udFdlaWdodDogNjAwLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGdhcDogJzAuNWVtJ1xuICB9O1xuXG4gIGNvbnN0IGJvZHlTdHlsZSA9IHtcbiAgICBwYWRkaW5nOiBjb21wYWN0ID8gJzFlbScgOiAnMS41ZW0nLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcidcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e2NhcmRTdHlsZX0+XG4gICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZmxleDogJzEgMSBhdXRvJywgbWluV2lkdGg6IDAgfX0+XG4gICAgICAgICAge2lzQ29uZmlybWVkID8gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNoZWNrIGNpcmNsZVwiIC8+IFBheW1lbnQgY29uZmlybWVkXG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApIDogaXNNZW1wb29sUGFpZCA/IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjbG9ja1wiIC8+IEF3YWl0aW5nIGNvbmZpcm1hdGlvblxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKSA6IGhlYWRlcldhaXRpbmcgPyAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic3luY1wiIC8+IFZlcmlmeWluZyBwYXltZW504oCmXG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApIDogaXNQYWlkID8gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cIndhcm5pbmcgY2lyY2xlXCIgLz4gUGFpZCDigJQgY29uZmlybWF0aW9uIHBlbmRpbmdcbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYml0Y29pblwiIC8+IFBheSB3aXRoIEJpdGNvaW5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgaWNvblxuICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgaW52ZXJ0ZWRcbiAgICAgICAgICBjb21wYWN0XG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQWR2YW5jZWQ6IEpvaW5tYXJrZXQgcG9vbCB0YXJnZXRzIGFuZCBvcHRpb25hbCBQYXlqb2luIEJJUDIxIGZvciB0aGlzIGludm9pY2VcIlxuICAgICAgICAgIHRpdGxlPVwiSm9pbm1hcmtldCBwb29scyAmIFBheWpvaW5cIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEFkdmFuY2VkT3Blbih0cnVlKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJzZXR0aW5nXCIgLz5cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBzdHlsZT17Ym9keVN0eWxlfT5cbiAgICAgICAge2xhYmVsICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45ZW0nLCBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAgeyFpc1BhaWQgJiYgcXJEYXRhVXJsICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgIHNyYz17cXJEYXRhVXJsfVxuICAgICAgICAgICAgICBhbHQ9XCJCaXRjb2luIHBheW1lbnQgUVIgY29kZVwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdibG9jaycsIG1hcmdpbjogJzAgYXV0bycsIGJvcmRlclJhZGl1czogNCB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44ZW0nLCBjb2xvcjogJyM4ODgnLCBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgIFNjYW4gd2l0aCB5b3VyIHdhbGxldFxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICBmb250U2l6ZTogY29tcGFjdCA/ICcxLjFlbScgOiAnMS40ZW0nLFxuICAgICAgICAgIGZvbnRXZWlnaHQ6IDcwMCxcbiAgICAgICAgICBjb2xvcjogQklUQ09JTl9PUkFOR0UsXG4gICAgICAgICAgbWFyZ2luQm90dG9tOiAnMC4yNWVtJ1xuICAgICAgICB9fT5cbiAgICAgICAgICB7YW1vdW50QnRjfSBCVENcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScsIG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAge2Ftb3VudEZvcm1hdHRlZH0gc2F0b3NoaXNcbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgIGJhY2tncm91bmQ6ICcjZjdmN2Y3JyxcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IDQsXG4gICAgICAgICAgcGFkZGluZzogJzAuNmVtIDAuOGVtJyxcbiAgICAgICAgICBmb250RmFtaWx5OiAnbW9ub3NwYWNlJyxcbiAgICAgICAgICBmb250U2l6ZTogY29tcGFjdCA/ICcwLjc1ZW0nIDogJzAuODVlbScsXG4gICAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstYWxsJyxcbiAgICAgICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgICAgICBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nXG4gICAgICAgIH19PlxuICAgICAgICAgIHthZGRyZXNzfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7Y29tcGFjdCAmJiAhaXNQYWlkICYmICFpc01haW5uZXQgJiYgKFxuICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiAnMC43OGVtJywgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC42NWVtJywgdGV4dEFsaWduOiAnbGVmdCcsIGxpbmVIZWlnaHQ6IDEuNCB9fT5cbiAgICAgICAgICAgIDxzdHJvbmc+U2Vjb25kIHRhYjo8L3N0cm9uZz4gdXNlIHRoZSBibHVlIDxzdHJvbmc+T3BlbiBwYXllciB0YWIgKHByZWZpbGxlZCk8L3N0cm9uZz4gY29udHJvbCBmb3IgdGhpcyBpbnZvaWNlIChzYW1lIG9yaWdpbiwgbmV3IHRhYjsgc2hvd24gdG8gdGhlIHJpZ2h0IG9mIHRoZSBjYXJkIG9uIHdpZGUgbGF5b3V0cykuIEl0IG9wZW5zIFBheW1lbnRzIHdpdGggPGNvZGU+cGF5VG88L2NvZGU+IGFuZCA8Y29kZT5wYXlBbW91bnRTYXRzPC9jb2RlPiwgYW5kIHNjcm9sbHMgdG8gTWFrZSBQYXltZW50LlxuICAgICAgICAgICAge3VmLmJpdGNvaW5JbnZvaWNlcyA/IChcbiAgICAgICAgICAgICAgPD4gU2VlIHRoZSB3YWxrdGhyb3VnaCBhdCB0aGUgdG9wIG9mIDxMaW5rIHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vaW52b2ljZXMjZmFicmljLWludm9pY2VzLXRhYi1kZW1vXCI+SW52b2ljZXM8L0xpbms+LjwvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPD4gRW5hYmxlIDxzdHJvbmc+Qml0Y29pbiDigJQgSW52b2ljZXM8L3N0cm9uZz4gaW4gQWRtaW4g4oaSIEZlYXR1cmUgdmlzaWJpbGl0eSBmb3IgYSBsaW5rIHRvIHRoZSB3YWxrdGhyb3VnaC48Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICApfVxuXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcwLjVlbScsIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNvcHkoYWRkcmVzcyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHlcIiAvPlxuICAgICAgICAgICAge2NvcGllZCA/ICdDb3BpZWQhJyA6ICdDb3B5IGFkZHJlc3MnfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ29weShgJHthZGRyZXNzfVxcbiR7YW1vdW50Rm9ybWF0dGVkfSBzYXRzYCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHlcIiAvPlxuICAgICAgICAgICAgQ29weSBib3RoXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHtuZXR3b3JrICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNWVtJywgZm9udFNpemU6ICcwLjhlbScsIGNvbG9yOiAnIzk5OScgfX0+XG4gICAgICAgICAgICB7U3RyaW5nKG5ldHdvcmspLnRvTG93ZXJDYXNlKCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAgeyFpc1BhaWQgJiYgaXNNYWlubmV0ICYmIChcbiAgICAgICAgICA8TWVzc2FnZSB3YXJuaW5nIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScsIHRleHRBbGlnbjogJ2xlZnQnIH19PlxuICAgICAgICAgICAgTWFpbm5ldDogcGF5IHdpdGggeW91ciBvd24gd2FsbGV0IGZyb20gdGhlIFFSIG9yIGFkZHJlc3MgYWJvdmUsIHRoZW4gcGFzdGUgdGhlIHRyYW5zYWN0aW9uIGlkIGJlbG93LlxuICAgICAgICAgICAgVGhlIEh1YiB3aWxsIHZlcmlmeSBhZ2FpbnN0IGl0cyBjb25maWd1cmVkIDxjb2RlPmJpdGNvaW5kPC9jb2RlPiAocmVxdWlyZXMgYSBub2RlIHRoYXQgY2FuIHNlcnZlIHRoZSB0eCkuXG4gICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICApfVxuXG4gICAgICAgIHshaXNQYWlkICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScsIHRleHRBbGlnbjogJ2xlZnQnIH19PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzAuODVlbScsIGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICAgIFBhaWQgZnJvbSBhbm90aGVyIHdhbGxldD8gUGFzdGUgdHhpZDpcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiYWJjMTIz4oCmICg2NCBoZXggY2hhcmFjdGVycylcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtleHRlcm5hbFR4aWR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB7IHZhbHVlIH0pID0+IHNldEV4dGVybmFsVHhpZCh2YWx1ZSAhPSBudWxsID8gU3RyaW5nKHZhbHVlKSA6IChlICYmIGUudGFyZ2V0ICYmIGUudGFyZ2V0LnZhbHVlKSB8fCAnJyl9XG4gICAgICAgICAgICAgICAgb25JbnB1dD17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBlICYmIGUudGFyZ2V0ICYmIGUudGFyZ2V0LnZhbHVlICE9IG51bGwgPyBTdHJpbmcoZS50YXJnZXQudmFsdWUpIDogJyc7XG4gICAgICAgICAgICAgICAgICBpZiAodiAhPT0gZXh0ZXJuYWxUeGlkKSBzZXRFeHRlcm5hbFR4aWQodik7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBmbGV4OiAnMSAxIDEyZW0nLCBtaW5XaWR0aDogJzEwZW0nIH19XG4gICAgICAgICAgICAgICAgaW5wdXQ9e3tcbiAgICAgICAgICAgICAgICAgICdhcmlhLWxhYmVsJzogJ0JpdGNvaW4gdHJhbnNhY3Rpb24gaWQgZm9yIGV4dGVybmFsIEwxIHBheW1lbnQgdmVyaWZpY2F0aW9uJ1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjb250ZW50PVwiQ29uZmlybSBwYXltZW50XCJcbiAgICAgICAgICAgICAgICBpY29uPVwiY2hlY2ttYXJrXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ29uZmlybSBwYXltZW50OiB2ZXJpZnkgcGFzdGVkIHR4aWQgcGF5cyB0aGlzIGludm9pY2UgKEwxKVwiXG4gICAgICAgICAgICAgICAgbG9hZGluZz17dmVyaWZ5aW5nfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXt2ZXJpZnlpbmcgfHwgcGF5aW5nIHx8ICFTdHJpbmcoZXh0ZXJuYWxUeGlkIHx8ICcnKS50cmltKCl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlVmVyaWZ5RXh0ZXJuYWx9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7IWlzUGFpZCAmJiAhaXNNYWlubmV0ICYmIGh1YlBheUJsb2NrZWRCeUlkZW50aXR5ICYmIChcbiAgICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScsIHRleHRBbGlnbjogJ2xlZnQnIH19PlxuICAgICAgICAgICAgVW5sb2NrIHlvdXIgaWRlbnRpdHkgaW4gdGhlIHRvcCBiYXIgdG8gdXNlIDxzdHJvbmc+UGF5IE5vdzwvc3Ryb25nPiBoZXJlLiBZb3UgY2FuIHN0aWxsIHBheSBmcm9tIGFueSBleHRlcm5hbCB3YWxsZXQgYW5kIHBhc3RlIHRoZSB0eGlkIGJlbG93IOKAlCB0aGF0IGNyZWF0ZXMgYSByZWFsIG9uLWNoYWluIHBheW1lbnQgdmVyaWZpZWQgYnkgdGhlIGh1Yi5cbiAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICl9XG5cbiAgICAgICAgeyFpc1BhaWQgJiYgIWlzTWFpbm5ldCAmJiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nLCBiYWNrZ3JvdW5kOiBCSVRDT0lOX09SQU5HRSB9fVxuICAgICAgICAgICAgaWNvbj1cImJpdGNvaW5cIlxuICAgICAgICAgICAgY29udGVudD1cIlBheSBOb3dcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlBheSBpbnZvaWNlIHZpYSBodWIgUGF5bWVudHMgQVBJIChhZG1pbiB0b2tlbiByZXF1aXJlZDsgaHViIGJpdGNvaW5kIGJyb2FkY2FzdHMpXCJcbiAgICAgICAgICAgIGxvYWRpbmc9e3BheWluZ31cbiAgICAgICAgICAgIGRpc2FibGVkPXtwYXlpbmcgfHwgdmVyaWZ5aW5nIHx8IGh1YlBheUJsb2NrZWRCeUlkZW50aXR5fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUGF5fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG5cbiAgICAgICAge2Vycm9yICYmIChcbiAgICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZSBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nLCB0ZXh0QWxpZ246ICdsZWZ0JyB9fT5cbiAgICAgICAgICAgIHtlcnJvcn1cbiAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICl9XG5cbiAgICAgICAge2lzUGFpZCAmJiBlZmZlY3RpdmVUeGlkICYmIChcbiAgICAgICAgICA8TWVzc2FnZVxuICAgICAgICAgICAgaW5mbz17aXNDb25maXJtZWR9XG4gICAgICAgICAgICB3YXJuaW5nPXshaXNDb25maXJtZWQgJiYgISFjaGFpblN0YXR1cyAmJiBjaGFpblN0YXR1cy52ZXJpZmllZH1cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nLCB0ZXh0QWxpZ246ICdsZWZ0JyB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtjaGFpblN0YXR1cyAmJiBjaGFpblN0YXR1cy5sb2FkaW5nID8gKFxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46IDAgfX0+Q2hlY2tpbmcgbWVtcG9vbCBhbmQgYmxvY2sgZGVwdGjigKY8L3A+XG4gICAgICAgICAgICApIDogaXNDb25maXJtZWQgPyAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogMCB9fT5cbiAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJhd0MgPSBjaGFpblN0YXR1cyAmJiBjaGFpblN0YXR1cy5jb25maXJtYXRpb25zICE9IG51bGwgPyBOdW1iZXIoY2hhaW5TdGF0dXMuY29uZmlybWF0aW9ucykgOiAwO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IE51bWJlci5pc0Zpbml0ZShyYXdDKSA/IHJhd0MgOiAwO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBjID09PSAxID8gJzEgY29uZmlybWF0aW9uJyA6IGAke2N9IGNvbmZpcm1hdGlvbnNgO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICB7bGFiZWx9LlxuICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAge3VmLmJpdGNvaW5FeHBsb3JlciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGVmZmVjdGl2ZVR4aWQpfWB9Pk9wZW4gdHJhbnNhY3Rpb248L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC45ZW0nLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19IHRpdGxlPVwiRW5hYmxlIEJpdGNvaW4g4oCUIEJsb2NrICYgdHJhbnNhY3Rpb24gZGV0YWlsIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IGZvciB0aGUgdHggdmlld2VyXCI+e2VmZmVjdGl2ZVR4aWR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSgpfVxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICApIDogY2hhaW5TdGF0dXMgJiYgY2hhaW5TdGF0dXMudmVyaWZpZWQgPyAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogMCB9fT5cbiAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiBpcyBpbiB0aGUgbWVtcG9vbCBvciBoYXMgemVybyBjb25maXJtYXRpb25zOyBpdCB3aWxsIHNob3cgYXMgc2V0dGxlZCBhZnRlciB0aGUgbmV4dCBibG9jay5cbiAgICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICAgIHt1Zi5iaXRjb2luRXhwbG9yZXIgPyAoXG4gICAgICAgICAgICAgICAgICA8TGluayB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChlZmZlY3RpdmVUeGlkKX1gfT5WaWV3IHN0YXR1czwvTGluaz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjllbScsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0gdGl0bGU9XCJFbmFibGUgQml0Y29pbiDigJQgQmxvY2sgJiB0cmFuc2FjdGlvbiBkZXRhaWwgcm91dGVzIGluIEFkbWluIOKGkiBGZWF0dXJlIHZpc2liaWxpdHkgZm9yIHRoZSB0eCB2aWV3ZXJcIj57ZWZmZWN0aXZlVHhpZH08L2NvZGU+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7Y2hhaW5TdGF0dXMubWF0Y2hlZFNhdHMgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Ub3A6ICcwLjM1ZW0nLCBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgTWF0Y2hlZCB7TnVtYmVyKGNoYWluU3RhdHVzLm1hdGNoZWRTYXRzKS50b0xvY2FsZVN0cmluZygpfSBzYXRzIHRvIHRoaXMgaW52b2ljZSBhZGRyZXNzLlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogMCB9fT5cbiAgICAgICAgICAgICAgICB7Y2hhaW5TdGF0dXMgJiYgY2hhaW5TdGF0dXMuZXJyb3JcbiAgICAgICAgICAgICAgICAgID8gYENvdWxkIG5vdCB2ZXJpZnkgeWV0ICgke2NoYWluU3RhdHVzLmVycm9yfSkuIFJldHJ5aW5n4oCmYFxuICAgICAgICAgICAgICAgICAgOiAnV2FpdGluZyBmb3IgdGhlIG5vZGUgdG8gc2VlIHRoaXMgdHJhbnNhY3Rpb27igKYnfVxuICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAge3VmLmJpdGNvaW5FeHBsb3JlciA/IChcbiAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGVmZmVjdGl2ZVR4aWQpfWB9PlRyYW5zYWN0aW9uIHBhZ2U8L0xpbms+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC45ZW0nLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19IHRpdGxlPVwiRW5hYmxlIEJpdGNvaW4g4oCUIEJsb2NrICYgdHJhbnNhY3Rpb24gZGV0YWlsIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IGZvciB0aGUgdHggdmlld2VyXCI+e2VmZmVjdGl2ZVR4aWR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICApfVxuXG4gICAgICAgIHtpc1BhaWQgJiYgcGVyc2lzdGVkVHhpZHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2UgcG9zaXRpdmUgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJywgdGV4dEFsaWduOiAnbGVmdCcgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPlBheW1lbnR7cGVyc2lzdGVkVHhpZHMubGVuZ3RoID4gMSA/ICdzJyA6ICcnfSAoe3BlcnNpc3RlZFR4aWRzLmxlbmd0aH0pOjwvc3Ryb25nPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjI1ZW0nIH19PlxuICAgICAgICAgICAgICB7cGVyc2lzdGVkVHhpZHMubWFwKCh0eGlkKSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdiBrZXk9e3R4aWR9IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICB7dWYuYml0Y29pbkV4cGxvcmVyID8gKFxuICAgICAgICAgICAgICAgICAgICA8TGluayB0bz17YC9zZXJ2aWNlcy9iaXRjb2luL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudCh0eGlkKX1gfSBzdHlsZT17eyBmb250U2l6ZTogJzAuODVlbScsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAge3R4aWR9XG4gICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJywgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fSB0aXRsZT1cIkVuYWJsZSBCaXRjb2luIOKAlCBCbG9jayAmIHRyYW5zYWN0aW9uIGRldGFpbCByb3V0ZXMgaW4gQWRtaW4g4oaSIEZlYXR1cmUgdmlzaWJpbGl0eSBmb3IgdGhlIHR4IHZpZXdlclwiPnt0eGlkfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxNb2RhbFxuICAgICAgICBjbG9zZUljb25cbiAgICAgICAgb3Blbj17YWR2YW5jZWRPcGVufVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRBZHZhbmNlZE9wZW4oZmFsc2UpfVxuICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgPlxuICAgICAgICA8TW9kYWwuSGVhZGVyPkFkdmFuY2VkIOKAlCBKb2lubWFya2V0ICZhbXA7IHBvb2xzPC9Nb2RhbC5IZWFkZXI+XG4gICAgICAgIDxNb2RhbC5Db250ZW50IHNjcm9sbGluZz5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM1NTUnLCBmb250U2l6ZTogJzAuOWVtJywgbGluZUhlaWdodDogMS40NSwgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgIFRocmVlIGxvY2FsIDxzdHJvbmc+cG9vbDwvc3Ryb25nPiB0YXJnZXRzIChCVEMpIGZvciBvcGVyYXRvciByZWZlcmVuY2Ugd2hlbiBzdGFnaW5nIGh1Yi13YWxsZXQgbGlxdWlkaXR5IGZvcnsnICd9XG4gICAgICAgICAgICA8c3Ryb25nPkFDUCAvIFBheWpvaW48L3N0cm9uZz4tc3R5bGUgZmxvd3MuIFRoZXkgZG8gbm90IG1vdmUgY29pbnMgYnkgdGhlbXNlbHZlcy4gT3B0aW9uYWw6IG1pbnQgYXsnICd9XG4gICAgICAgICAgICA8c3Ryb25nPkJJUDc4PC9zdHJvbmc+IGRlcG9zaXQgc2Vzc2lvbiBmb3IgPGVtPnRoaXMgaW52b2ljZSBhZGRyZXNzPC9lbT4gc28gcGF5ZXJzIGNhbiB1c2UgYSA8Y29kZT5iaXRjb2luOjwvY29kZT4gVVJJIHdpdGh7JyAnfVxuICAgICAgICAgICAgPGNvZGU+cGo9PC9jb2RlPiAoUGF5am9pbiB2Mi1jb21wYXRpYmxlIHJlY2VpdmVyKTsgdGhlbiBvcGVuIFBheW1lbnRzIHRvIHNpZ24gb3IgYm9vc3QuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIHN0eWxlPXt7IG1hcmdpblRvcDogMCB9fT5Qb29sIHNpemVzIChCVEMpPC9IZWFkZXI+XG4gICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICB7cG9vbExhYmVscygpLm1hcCgobGJsLCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkIGtleT17bGJsfT5cbiAgICAgICAgICAgICAgICA8bGFiZWw+e2xibH08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBzdGVwPVwiYW55XCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjFlLThcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3Bvb2xCdGNbaV0gIT0gbnVsbCA/IFN0cmluZyhwb29sQnRjW2ldKSA6ICcnfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wb29sQnRjXTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFtpXSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFBvb2xCdGMobmV4dCk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nLCBjb2xvcjogJyM4ODgnIH19PlxuICAgICAgICAgICAgICAgICAg4omIIHtidGNUb1NhdHMocG9vbEJ0Y1tpXSAhPSBudWxsID8gcG9vbEJ0Y1tpXSA6IDApLnRvTG9jYWxlU3RyaW5nKCl9IHNhdHNcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc2l6ZT1cInNtYWxsXCIgb25DbGljaz17aGFuZGxlU2F2ZVBvb2xzfT5cbiAgICAgICAgICAgICAgU2F2ZSBwb29sIHRhcmdldHNcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvRm9ybT5cblxuICAgICAgICAgIDxEaXZpZGVyIC8+XG5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIj5PcHRpb25hbCBQYXlqb2luIHdpdGhkcmF3YWwgdG8gdGhpcyBpbnZvaWNlPC9IZWFkZXI+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNTU1JywgZm9udFNpemU6ICcwLjg4ZW0nIH19PlxuICAgICAgICAgICAgQ3JlYXRlcyBhIEh1YiA8c3Ryb25nPlBheWpvaW48L3N0cm9uZz4gc2Vzc2lvbiBwYXlpbmcgdGhpcyBjYXJkJmFwb3M7cyBhZGRyZXNzIChzYW1lIG9uLWNoYWluIGRlc3RpbmF0aW9uIGFzIHRoZSBRUiBhYm92ZSkuIFVzZXMgc3RhbmRhcmQgQklQMjEgKyA8Y29kZT5waj08L2NvZGU+OyBubyBUYXByb290IHRlbXBsYXRlIHN3YXAgb24gdGhlIGludm9pY2UgYWRkcmVzcy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgeyFpc1BhaWQgJiYgKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJ2aW9sZXRcIlxuICAgICAgICAgICAgICBsb2FkaW5nPXtqb2lubWFya2V0QnVzeX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2pvaW5tYXJrZXRCdXN5fVxuICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDcmVhdGVJbnZvaWNlUGF5am9pbn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ3JlYXRlIFBheWpvaW4gQklQMjEgZm9yIHRoaXMgaW52b2ljZVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aXNQYWlkICYmIChcbiAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInRpbnlcIj5JbnZvaWNlIGFscmVhZHkgaGFzIGEgcGF5bWVudCByZWNvcmRlZCDigJQgUGF5am9pbiBzZXNzaW9uIGNyZWF0aW9uIGlzIGhpZGRlbi48L01lc3NhZ2U+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7am9pbm1hcmtldEVyciAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZSBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19PlxuICAgICAgICAgICAgICB7am9pbm1hcmtldEVycn1cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtqb2lubWFya2V0VXJpICYmIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgPE1lc3NhZ2Ugc3VjY2VzcyBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwIDAgMC41ZW0nLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuODVlbScgfX0+XG4gICAgICAgICAgICAgICAgICA8Y29kZT57am9pbm1hcmtldFVyaX08L2NvZGU+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICBpY29uPVwiY29weVwiXG4gICAgICAgICAgICAgICAgICBjb250ZW50PVwiQ29weSBCSVAyMVwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDb3B5KGpvaW5tYXJrZXRVcmkpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgYXM9XCJhXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICBpY29uPVwiZXh0ZXJuYWwgYWx0ZXJuYXRlXCJcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ9XCJPcGVuIFBheW1lbnRzIChQYXlqb2luIFVSSSlcIlxuICAgICAgICAgICAgICAgICAgaHJlZj17YnVpbGRUYWJQYXllclBheWpvaW5Vcmwoam9pbm1hcmtldFVyaSl9XG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgICAgICA8TW9kYWwuQWN0aW9ucz5cbiAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRBZHZhbmNlZE9wZW4oZmFsc2UpfT5cbiAgICAgICAgICAgIENsb3NlXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvTW9kYWwuQWN0aW9ucz5cbiAgICAgIDwvTW9kYWw+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSW52b2ljZTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJuIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIkFycmF5IiwiZnJvbSIsImlzQXJyYXkiLCJfYXJyYXlMaWtlVG9BcnJheSIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX25vbkl0ZXJhYmxlUmVzdCIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwidGVzdCIsIm5leHQiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJRUkNvZGUiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJEaXZpZGVyIiwiRm9ybSIsIkhlYWRlciIsIkljb24iLCJJbnB1dCIsIk1lc3NhZ2UiLCJNb2RhbCIsIl9yZXF1aXJlMyIsImxvYWRVcHN0cmVhbVNldHRpbmdzIiwiZ2V0U3BlbmRXYWxsZXRDb250ZXh0IiwiZ2V0TmV4dFJlY2VpdmVXYWxsZXRDb250ZXh0Iiwic2VuZFBheW1lbnQiLCJ2ZXJpZnlMMVBheW1lbnQiLCJjcmVhdGVQYXlqb2luRGVwb3NpdCIsIl9yZXF1aXJlNCIsIlNBVFNfUEVSX0JUQyIsIl9yZXF1aXJlNSIsImJ1aWxkVGFiUGF5ZXJQYXlqb2luVXJsIiwiX3JlcXVpcmU2IiwibG9hZEpvaW5tYXJrZXRQb29sU2l6ZXNCdGMiLCJzYXZlSm9pbm1hcmtldFBvb2xTaXplc0J0YyIsInBvb2xMYWJlbHMiLCJidGNUb1NhdHMiLCJERUZBVUxUX1BPT0xTX0JUQyIsIl9yZXF1aXJlNyIsImZvcm1hdFNhdHNEaXNwbGF5IiwiZm9ybWF0QnRjRnJvbVNhdHMiLCJfcmVxdWlyZTgiLCJyZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIiwiX3JlcXVpcmU5IiwibG9hZEh1YlVpRmVhdHVyZUZsYWdzIiwic3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MiLCJCSVRDT0lOX09SQU5HRSIsIkludm9pY2UiLCJwcm9wcyIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsImh1YlVpVGljayIsInNldEh1YlVpVGljayIsInVzZUVmZmVjdCIsInVmIiwiaW52b2ljZUlkIiwiYWRkcmVzcyIsImFtb3VudFNhdHMiLCJfcHJvcHMkbmV0d29yayIsIm5ldHdvcmsiLCJsYWJlbCIsIl9wcm9wcyRtZW1vIiwibWVtbyIsIl9wcm9wcyR0eGlkcyIsInR4aWRzIiwiX3Byb3BzJGlkZW50aXR5IiwiaWRlbnRpdHkiLCJvblBhaWQiLCJvbkVycm9yIiwiX3Byb3BzJGNvbXBhY3QiLCJjb21wYWN0IiwiYWRtaW5Ub2tlblByb3AiLCJhZG1pblRva2VuIiwiX3Byb3BzJHJlcXVpcmVVbmxvY2tlIiwicmVxdWlyZVVubG9ja2VkSWRlbnRpdHlGb3JIdWJQYXkiLCJfcHJvcHMkaWRlbnRpdHlVbmxvY2siLCJpZGVudGl0eVVubG9ja2VkIiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJwYXlpbmciLCJzZXRQYXlpbmciLCJfUmVhY3QkdXNlU3RhdGU1IiwiX1JlYWN0JHVzZVN0YXRlNiIsInZlcmlmeWluZyIsInNldFZlcmlmeWluZyIsIl9SZWFjdCR1c2VTdGF0ZTciLCJfUmVhY3QkdXNlU3RhdGU4IiwiZXh0ZXJuYWxUeGlkIiwic2V0RXh0ZXJuYWxUeGlkIiwiX1JlYWN0JHVzZVN0YXRlOSIsIl9SZWFjdCR1c2VTdGF0ZTAiLCJlcnJvciIsInNldEVycm9yIiwiX1JlYWN0JHVzZVN0YXRlMSIsIl9SZWFjdCR1c2VTdGF0ZTEwIiwicmVzdWx0Iiwic2V0UmVzdWx0IiwiX1JlYWN0JHVzZVN0YXRlMTEiLCJfUmVhY3QkdXNlU3RhdGUxMiIsInFyRGF0YVVybCIsInNldFFyRGF0YVVybCIsIl9SZWFjdCR1c2VTdGF0ZTEzIiwiX1JlYWN0JHVzZVN0YXRlMTQiLCJjb3BpZWQiLCJzZXRDb3BpZWQiLCJfUmVhY3QkdXNlU3RhdGUxNSIsIl9SZWFjdCR1c2VTdGF0ZTE2IiwiY2hhaW5TdGF0dXMiLCJzZXRDaGFpblN0YXR1cyIsIl9SZWFjdCR1c2VTdGF0ZTE3IiwiX1JlYWN0JHVzZVN0YXRlMTgiLCJhZHZhbmNlZE9wZW4iLCJzZXRBZHZhbmNlZE9wZW4iLCJfUmVhY3QkdXNlU3RhdGUxOSIsIl9SZWFjdCR1c2VTdGF0ZTIwIiwicG9vbEJ0YyIsInNldFBvb2xCdGMiLCJfUmVhY3QkdXNlU3RhdGUyMSIsIl9SZWFjdCR1c2VTdGF0ZTIyIiwiam9pbm1hcmtldEJ1c3kiLCJzZXRKb2lubWFya2V0QnVzeSIsIl9SZWFjdCR1c2VTdGF0ZTIzIiwiX1JlYWN0JHVzZVN0YXRlMjQiLCJqb2lubWFya2V0RXJyIiwic2V0Sm9pbm1hcmtldEVyciIsIl9SZWFjdCR1c2VTdGF0ZTI1IiwiX1JlYWN0JHVzZVN0YXRlMjYiLCJqb2lubWFya2V0VXJpIiwic2V0Sm9pbm1hcmtldFVyaSIsInVwc3RyZWFtIiwidXNlTWVtbyIsImlkWHB1YiIsInhwdWIiLCJpZFhwcnYiLCJ4cHJ2Iiwid2FsbGV0IiwicmVmcmVzaENoYWluU3RhdHVzIiwidXNlQ2FsbGJhY2siLCJfcmVmIiwiX2NhbGxlZSIsInR4aWQiLCJpZCIsInJlcyIsIm1zZyIsIl90IiwiX2NvbnRleHQiLCJ0cmltIiwicHJldiIsImxvYWRpbmciLCJ2ZXJpZmllZCIsImNvbmZpcm1hdGlvbnMiLCJpbk1lbXBvb2wiLCJtYXRjaGVkU2F0cyIsIm1lc3NhZ2UiLCJfeCIsInBheW1lbnRVcmkiLCJidGMiLCJ0b0ZpeGVkIiwiY29uY2F0IiwidG9EYXRhVVJMIiwid2lkdGgiLCJtYXJnaW4iLCJjb2xvciIsImRhcmsiLCJsaWdodCIsImh1YlBheUJsb2NrZWRCeUlkZW50aXR5IiwiaGFuZGxlUGF5IiwiX2NhbGxlZTIiLCJlcnJNc2ciLCJfdDIiLCJfY29udGV4dDIiLCJ0byIsInBheW1lbnQiLCJzdWNjZXNzIiwid2luZG93IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiRXJyb3IiLCJpc01haW5uZXQiLCJ0b0xvd2VyQ2FzZSIsImhhbmRsZVZlcmlmeUV4dGVybmFsIiwiX2NhbGxlZTMiLCJfbXNnIiwiX3QzIiwiX2NvbnRleHQzIiwiaGFuZGxlU2F2ZVBvb2xzIiwiaGFuZGxlQ3JlYXRlSW52b2ljZVBheWpvaW4iLCJfY2FsbGVlNCIsInNlc3Npb24iLCJ1cmkiLCJfdDQiLCJfY29udGV4dDQiLCJiaXAyMVVyaSIsImhhbmRsZUNvcHkiLCJ0ZXh0IiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0Iiwic2V0VGltZW91dCIsImVyciIsInBlcnNpc3RlZFR4aWRzIiwiZWZmZWN0aXZlVHhpZCIsImlzUGFpZEZsb3ciLCJkb25lUG9sbGluZyIsImNhbmNlbGxlZCIsInRpY2siLCJfcmVmNSIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiaXYiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJsMUFjdGl2aXR5VW5jb25maXJtZWRSZWYiLCJ1c2VSZWYiLCJsMUFjdGl2aXR5Q29uZmlybWVkUmVmIiwiY3VycmVudCIsImNvbmYiLCJkZXRhaWwiLCJraW5kIiwiYW1vdW50QnRjIiwiYW1vdW50Rm9ybWF0dGVkIiwiaXNQYWlkIiwiaXNDb25maXJtZWQiLCJpc01lbXBvb2xQYWlkIiwiaGVhZGVyV2FpdGluZyIsImJvcmRlckNvbG9yIiwiY2FyZFN0eWxlIiwiYm9yZGVyIiwiYm9yZGVyUmFkaXVzIiwib3ZlcmZsb3ciLCJtYXhXaWR0aCIsImJhY2tncm91bmQiLCJoZWFkZXJTdHlsZSIsInBhZGRpbmciLCJmb250U2l6ZSIsImZvbnRXZWlnaHQiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiZ2FwIiwiYm9keVN0eWxlIiwidGV4dEFsaWduIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwiZmxleCIsIm1pbldpZHRoIiwiRnJhZ21lbnQiLCJ0eXBlIiwiaWNvbiIsImJhc2ljIiwiaW52ZXJ0ZWQiLCJzaXplIiwidGl0bGUiLCJvbkNsaWNrIiwibWFyZ2luQm90dG9tIiwic3JjIiwiYWx0IiwibWFyZ2luVG9wIiwiZm9udEZhbWlseSIsIndvcmRCcmVhayIsImxpbmVIZWlnaHQiLCJiaXRjb2luSW52b2ljZXMiLCJmbGV4V3JhcCIsIndhcm5pbmciLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwiX3JlZjYiLCJ0YXJnZXQiLCJvbklucHV0IiwiaW5wdXQiLCJjb250ZW50IiwiZGlzYWJsZWQiLCJpbmZvIiwicHJpbWFyeSIsIm5lZ2F0aXZlIiwicmF3QyIsImlzRmluaXRlIiwiYml0Y29pbkV4cGxvcmVyIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidG9Mb2NhbGVTdHJpbmciLCJwb3NpdGl2ZSIsIm1hcCIsImtleSIsImNsb3NlSWNvbiIsIm9wZW4iLCJvbkNsb3NlIiwiQ29udGVudCIsInNjcm9sbGluZyIsImFzIiwibGJsIiwiRmllbGQiLCJzdGVwIiwibWluIiwiX3JlZjciLCJocmVmIiwicmVsIiwiQWN0aW9ucyIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/Invoice.js\n\n}')},"./components/InvoiceListHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n List = _require2.List,\n Message = _require2.Message,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! ../functions/invoiceStore */ "./functions/invoiceStore.js"),\n loadInvoices = _require3.loadInvoices,\n createInvoice = _require3.createInvoice,\n deleteInvoice = _require3.deleteInvoice,\n addPaymentToInvoice = _require3.addPaymentToInvoice;\nvar _require4 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n getNextReceiveWalletContext = _require4.getNextReceiveWalletContext,\n reserveNextReceiveAddress = _require4.reserveNextReceiveAddress;\nvar Invoice = __webpack_require__(/*! ./Invoice */ "./components/Invoice.js");\nvar _require5 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require5.formatSatsDisplay;\nvar _require6 = __webpack_require__(/*! ../functions/tabPayerDemoUrl */ "./functions/tabPayerDemoUrl.js"),\n buildTabPayerDemoUrl = _require6.buildTabPayerDemoUrl;\nvar HubRegtestAdminTokenPanel = __webpack_require__(/*! ./HubRegtestAdminTokenPanel */ "./components/HubRegtestAdminTokenPanel.js");\nvar BitcoinWalletBranchBar = __webpack_require__(/*! ./BitcoinWalletBranchBar */ "./components/BitcoinWalletBranchBar.js");\n\n/**\n * InvoiceListHome: create invoices and store them in the browser Fabric state store.\n * Each invoice gets a fresh receive address from the user\'s wallet.\n */\nvar InvoiceListHome = /*#__PURE__*/function (_React$Component) {\n function InvoiceListHome(props) {\n var _this;\n _classCallCheck(this, InvoiceListHome);\n _this = _callSuper(this, InvoiceListHome, [props]);\n _this.state = {\n invoices: loadInvoices(),\n amountSats: \'\',\n memo: \'\',\n label: \'\',\n creating: false,\n error: null\n };\n _this._onInvoicesHashChange = function () {\n return _this._syncInvoicesHashScroll();\n };\n return _this;\n }\n _inherits(InvoiceListHome, _React$Component);\n return _createClass(InvoiceListHome, [{\n key: "_syncInvoicesHashScroll",\n value: function _syncInvoicesHashScroll() {\n if (typeof window === \'undefined\') return;\n var raw = (window.location.hash || \'\').replace(/^#/, \'\');\n if (!raw) return;\n requestAnimationFrame(function () {\n var el = document.getElementById(raw);\n if (el) el.scrollIntoView({\n behavior: \'smooth\',\n block: \'start\'\n });\n });\n }\n }, {\n key: "componentDidMount",\n value: function componentDidMount() {\n this._syncInvoicesHashScroll();\n if (typeof window !== \'undefined\') {\n window.addEventListener(\'hashchange\', this._onInvoicesHashChange);\n }\n }\n }, {\n key: "componentDidUpdate",\n value: function componentDidUpdate(prevProps) {\n var prevXpub = prevProps && prevProps.identity && prevProps.identity.xpub;\n var nextXpub = this.props && this.props.identity && this.props.identity.xpub;\n if (prevXpub !== nextXpub) this.forceUpdate();\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n if (typeof window !== \'undefined\') {\n window.removeEventListener(\'hashchange\', this._onInvoicesHashChange);\n }\n }\n }, {\n key: "refresh",\n value: function refresh() {\n this.setState({\n invoices: loadInvoices()\n });\n }\n }, {\n key: "handleCreate",\n value: function () {\n var _handleCreate = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var _this2 = this;\n var amountSats, memo, label, identity, wallet, network, reserved, address, invoice, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n amountSats = Number(this.state.amountSats || 0);\n memo = String(this.state.memo || \'\').trim();\n label = String(this.state.label || \'\').trim();\n if (!(!Number.isFinite(amountSats) || amountSats <= 0)) {\n _context.n = 1;\n break;\n }\n this.setState({\n error: \'Amount must be greater than 0 sats.\'\n });\n return _context.a(2);\n case 1:\n identity = this.props && this.props.identity || {};\n wallet = getNextReceiveWalletContext(identity);\n network = this.props.bitcoin && this.props.bitcoin.network ? String(this.props.bitcoin.network).toLowerCase() : \'regtest\';\n if (!(!wallet.walletId || !wallet.xpub)) {\n _context.n = 2;\n break;\n }\n this.setState({\n error: \'Unlock an identity with xpub to create invoices.\'\n });\n return _context.a(2);\n case 2:\n this.setState({\n creating: true,\n error: null\n });\n _context.p = 3;\n reserved = reserveNextReceiveAddress(wallet, {\n network: network,\n identity: identity\n });\n address = reserved && reserved.currentAddress ? reserved.currentAddress : null;\n if (address) {\n _context.n = 4;\n break;\n }\n this.setState({\n error: \'Could not derive receive address. Check xpub and network.\',\n creating: false\n });\n return _context.a(2);\n case 4:\n invoice = createInvoice({\n address: address,\n amountSats: amountSats,\n memo: memo,\n label: label || memo || "Invoice ".concat(formatSatsDisplay(amountSats), " sats"),\n network: network\n });\n if (invoice) {\n this.setState({\n amountSats: \'\',\n memo: \'\',\n label: \'\',\n invoices: loadInvoices(),\n creating: false,\n error: null\n }, function () {\n return _this2._syncInvoicesHashScroll();\n });\n } else {\n this.setState({\n error: \'Failed to save invoice.\',\n creating: false\n });\n }\n _context.n = 6;\n break;\n case 5:\n _context.p = 5;\n _t = _context.v;\n this.setState({\n error: _t && _t.message ? _t.message : String(_t),\n creating: false\n });\n case 6:\n return _context.a(2);\n }\n }, _callee, this, [[3, 5]]);\n }));\n function handleCreate() {\n return _handleCreate.apply(this, arguments);\n }\n return handleCreate;\n }()\n }, {\n key: "handleDelete",\n value: function handleDelete(id) {\n if (deleteInvoice(id)) this.refresh();\n }\n }, {\n key: "render",\n value: function render() {\n var _this3 = this;\n var identity = this.props && this.props.identity || {};\n var bitcoin = this.props && this.props.bitcoin && _typeof(this.props.bitcoin) === \'object\' ? this.props.bitcoin : {};\n var network = bitcoin.network && String(bitcoin.network).toLowerCase() || \'regtest\';\n var wallet = getNextReceiveWalletContext(identity);\n var hasWallet = !!(wallet.walletId && wallet.xpub);\n return /*#__PURE__*/React.createElement("div", {\n className: "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "invoices-page-heading",\n "aria-describedby": "invoices-page-summary"\n }, /*#__PURE__*/React.createElement("div", {\n role: "banner",\n style: {\n position: \'sticky\',\n top: \'6.5rem\',\n zIndex: 12,\n background: \'#fff\',\n paddingBottom: \'0.35em\',\n marginBottom: \'0.25em\',\n boxShadow: \'0 1px 0 rgba(34, 36, 38, 0.15)\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexDirection: \'column\',\n alignItems: \'stretch\',\n gap: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small",\n "aria-label": "Back to Bitcoin dashboard",\n title: "Bitcoin home (status, wallet, explorer, and tools)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Bitcoin"), /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "invoices-page-heading",\n style: {\n margin: 0,\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file alternate outline",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Invoices"))), /*#__PURE__*/React.createElement("div", {\n role: "toolbar",\n "aria-label": "Account-to-account shortcuts",\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.35em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/payments#fabric-payments-tab-demo",\n basic: true,\n size: "small",\n title: "Payer tab walkthrough"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "credit card outline",\n "aria-hidden": "true"\n }), "Payments"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin#fabric-bitcoin-faucet",\n basic: true,\n size: "small",\n title: "Regtest: fund an address from the Hub wallet"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "tint",\n "aria-hidden": "true"\n }), "Faucet"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/resources",\n basic: true,\n size: "small",\n title: "L1 verify and HTTP resources"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sitemap",\n "aria-hidden": "true"\n }), "Resources"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/crowdfunds",\n basic: true,\n size: "small",\n title: "Taproot campaign, ACP PSBT, Payjoin deposit to vault"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "heart outline",\n "aria-hidden": "true"\n }), "Crowdfunds")))), /*#__PURE__*/React.createElement("p", {\n id: "invoices-page-summary",\n style: {\n color: \'#666\'\n }\n }, "Create payment requests and store them locally in your browser. Not published to global state.")), /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n id: "fabric-invoices-tab-demo",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Two-tab invoice payment (production walkthrough)"), /*#__PURE__*/React.createElement(List, {\n ordered: true,\n relaxed: true,\n style: {\n margin: \'0.35em 0 0\',\n color: \'#333\'\n }\n }, /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement("strong", null, "Regtest funds:"), " The Hub node wallet pays invoices (Make Payment / Pay Now). On", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin#fabric-bitcoin-regtest-toolbar"\n }, "Bitcoin"), ", use ", /*#__PURE__*/React.createElement("strong", null, "Generate Block"), " (admin) until the Hub has spendable balance. Optional: open", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin#fabric-bitcoin-faucet"\n }, "Faucet"), \' \', "on the Bitcoin page \\u2014 ", /*#__PURE__*/React.createElement("strong", null, "Use my receive address"), ", ", /*#__PURE__*/React.createElement("strong", null, "Request from faucet"), ", then ", /*#__PURE__*/React.createElement("strong", null, "Generate Block"), " so your client balance (BIP44 account 0 under your identity) shows confirmed test coins."), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement("strong", null, "Tab 1 (receiver):"), " Invoices use the next external address on", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/bitcoin-wallet"\n }, "BIP44 account 0"), " under your Fabric identity. Create an invoice and copy the address (or leave this tab open)."), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement("strong", null, "Tab 2 (payer):"), " On the invoice row, click ", /*#__PURE__*/React.createElement("strong", null, "Open payer tab (prefilled)"), " (adds ", /*#__PURE__*/React.createElement("code", null, "payTo"), " and ", /*#__PURE__*/React.createElement("code", null, "payAmountSats"), ", scrolls to Make Payment). Or open", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/payments#fabric-payments-tab-demo"\n }, "Payments (full walkthrough)"), \' \', "or", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/payments#fabric-btc-make-payment-h4"\n }, "jump to Make Payment"), \' \', "and paste address and amount. Spends and receives both use account 0 under the same identity. On-chain send uses the Hub node wallet and needs your setup ", /*#__PURE__*/React.createElement("strong", null, "admin token"), " (if missing, use the yellow ", /*#__PURE__*/React.createElement("strong", null, "Regtest: Hub admin token"), " panel below or on Payments)."), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement("strong", null, "Joinmarket / Payjoin (advanced):"), " On each invoice card header, the ", /*#__PURE__*/React.createElement(Icon, {\n name: "setting"\n }), " control opens ", /*#__PURE__*/React.createElement("strong", null, "three BTC pool targets"), " (default 0.05 \\u2192 0.005 \\u2192 0.0005) for operator liquidity planning, and an optional ", /*#__PURE__*/React.createElement("strong", null, "Payjoin BIP21"), " mint for this invoice address (", /*#__PURE__*/React.createElement("code", null, "pj="), ") that opens in Payments for local sign or ACP Hub boost."), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement("strong", null, "Confirm:"), " Return here \\u2014 on the invoice card use ", /*#__PURE__*/React.createElement("strong", null, "Confirm payment"), " with the txid, or verify via", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/resources"\n }, "Resources \\u2192 L1 payment verification"), ". The invoice list lives in the browser Fabric state store for this origin, so both tabs see the same rows."), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement("strong", null, "Desktop / delegation:"), " If you use ", /*#__PURE__*/React.createElement("strong", null, "Log in with Fabric Hub (desktop)"), ", manage tokens and open per-token audit under", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/security"\n }, "Security & delegation"), \' \', "(REST ", /*#__PURE__*/React.createElement("code", null, "/sessions"), ")."))), /*#__PURE__*/React.createElement(HubRegtestAdminTokenPanel, {\n network: bitcoin.network && String(bitcoin.network).toLowerCase() || \'regtest\',\n adminTokenProp: this.props && this.props.adminToken\n }), /*#__PURE__*/React.createElement(BitcoinWalletBranchBar, {\n identity: identity\n }), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#888\',\n fontSize: \'0.9em\'\n }\n }, "Each invoice uses the next unused external address from your wallet path; used indices stay in the browser store.", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/resources"\n }, "L1 payment verification"), \' \', "(txid + address + amount) lives under Bitcoin resources.")), !hasWallet && /*#__PURE__*/React.createElement(Message, {\n warning: true\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Identity required")), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, "Unlock an identity with an xpub to create invoices. Your receive addresses are derived from your wallet.")), hasWallet && /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Create invoice"), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Input, {\n label: "Amount (sats)",\n type: "number",\n min: "1",\n step: "1",\n placeholder: "1000",\n value: this.state.amountSats,\n onChange: function onChange(e) {\n return _this3.setState({\n amountSats: e.target.value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Label",\n placeholder: "e.g. Coffee payment",\n value: this.state.label,\n onChange: function onChange(e) {\n return _this3.setState({\n label: e.target.value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Memo",\n placeholder: "Optional note",\n value: this.state.memo,\n onChange: function onChange(e) {\n return _this3.setState({\n memo: e.target.value\n });\n }\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n onClick: function onClick() {\n return _this3.handleCreate();\n },\n loading: this.state.creating,\n disabled: this.state.creating\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "plus"\n }), "Create invoice")), this.state.error && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Could not create invoice"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, this.state.error))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n gap: \'0.5em\',\n flexWrap: \'wrap\',\n marginBottom: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n margin: 0\n }\n }, "My invoices"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n return _this3.refresh();\n },\n title: "Reload list from browser store (e.g. after another tab created an invoice)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh list")), this.state.invoices.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No invoices yet. Create one above.") : /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexDirection: \'column\',\n gap: \'1.5em\'\n }\n }, this.state.invoices.map(function (inv) {\n return /*#__PURE__*/React.createElement("div", {\n key: inv.id,\n style: {\n position: \'relative\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'flex-start\',\n gap: \'1em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n flex: \'1 1 300px\',\n minWidth: 0\n }\n }, /*#__PURE__*/React.createElement(Invoice, {\n invoiceId: inv.id,\n address: inv.address,\n amountSats: inv.amountSats,\n network: inv.network || network,\n label: inv.label || inv.memo || "Invoice ".concat(formatSatsDisplay(inv.amountSats), " sats"),\n memo: inv.memo,\n txids: inv.txids || [],\n identity: identity,\n adminToken: _this3.props && _this3.props.adminToken,\n compact: true,\n onPaid: function onPaid(txid) {\n if (inv.id && txid) addPaymentToInvoice(inv.id, txid);\n _this3.refresh();\n }\n })), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexDirection: \'column\',\n gap: \'0.35em\',\n alignItems: \'stretch\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: "a",\n href: buildTabPayerDemoUrl(inv.address, inv.amountSats),\n target: "_blank",\n rel: "noopener noreferrer",\n basic: true,\n color: "blue",\n size: "small",\n icon: "external alternate",\n content: "Open payer tab (prefilled)",\n title: "Opens Payments in a new tab with payTo and payAmountSats prefilled",\n "aria-label": "Open payer tab: Bitcoin Payments with address and amount prefilled"\n }), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n color: "red",\n size: "small",\n icon: "trash",\n onClick: function onClick() {\n return _this3.handleDelete(inv.id);\n },\n title: "Delete invoice"\n }))), /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.8em\',\n color: \'#999\',\n marginTop: \'0.25em\'\n }\n }, "Created ", inv.createdAt ? new Date(inv.createdAt).toLocaleString() : \'-\'));\n }))));\n }\n }]);\n}(React.Component);\nmodule.exports = InvoiceListHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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VUFDekJhLE9BQU8sRUFBQyw0QkFBNEI7VUFDcEN4QyxLQUFLLEVBQUMsb0VBQW9FO1VBQzFFLGNBQVc7UUFBb0UsQ0FDaEYsQ0FBQyxlQUNGN0csS0FBQSxDQUFBeUYsYUFBQSxDQUFDcEYsTUFBTTtVQUNMc0csS0FBSztVQUNMTSxLQUFLLEVBQUMsS0FBSztVQUNYTCxJQUFJLEVBQUMsT0FBTztVQUNaNEIsSUFBSSxFQUFDLE9BQU87VUFDWk4sT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7WUFBQSxPQUFRM0MsTUFBSSxDQUFDSCxZQUFZLENBQUN1RCxHQUFHLENBQUN0RCxFQUFFLENBQUM7VUFBQSxDQUFDO1VBQ3pDd0IsS0FBSyxFQUFDO1FBQWdCLENBQ3ZCLENBQ0UsQ0FDRixDQUFDLGVBQ043RyxLQUFBLENBQUF5RixhQUFBO1VBQUtHLEtBQUssRUFBRTtZQUFFNEIsUUFBUSxFQUFFLE9BQU87WUFBRVAsS0FBSyxFQUFFLE1BQU07WUFBRXFCLFNBQVMsRUFBRTtVQUFTO1FBQUUsR0FBQyxVQUM3RCxFQUFDSyxHQUFHLENBQUNXLFNBQVMsR0FBRyxJQUFJQyxJQUFJLENBQUNaLEdBQUcsQ0FBQ1csU0FBUyxDQUFDLENBQUNFLGNBQWMsQ0FBQyxDQUFDLEdBQUcsR0FDakUsQ0FDRixDQUFDO01BQUEsQ0FDUCxDQUNFLENBRUEsQ0FDTixDQUFDO0lBRVY7RUFBQztBQUFBLEVBL1YyQnhKLEtBQUssQ0FBQ3lKLFNBQVM7QUFrVzdDQyxNQUFNLENBQUNDLE9BQU8sR0FBR2hJLGVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvSW52b2ljZUxpc3RIb21lLmpzP2U4NTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHsgQnV0dG9uLCBGb3JtLCBIZWFkZXIsIEljb24sIExpc3QsIE1lc3NhZ2UsIFNlZ21lbnQgfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCB7IGxvYWRJbnZvaWNlcywgY3JlYXRlSW52b2ljZSwgZGVsZXRlSW52b2ljZSwgYWRkUGF5bWVudFRvSW52b2ljZSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ludm9pY2VTdG9yZScpO1xuY29uc3Qge1xuICBnZXROZXh0UmVjZWl2ZVdhbGxldENvbnRleHQsXG4gIHJlc2VydmVOZXh0UmVjZWl2ZUFkZHJlc3Ncbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvYml0Y29pbkNsaWVudCcpO1xuY29uc3QgSW52b2ljZSA9IHJlcXVpcmUoJy4vSW52b2ljZScpO1xuY29uc3QgeyBmb3JtYXRTYXRzRGlzcGxheSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2Zvcm1hdFNhdHMnKTtcbmNvbnN0IHsgYnVpbGRUYWJQYXllckRlbW9VcmwgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy90YWJQYXllckRlbW9VcmwnKTtcbmNvbnN0IEh1YlJlZ3Rlc3RBZG1pblRva2VuUGFuZWwgPSByZXF1aXJlKCcuL0h1YlJlZ3Rlc3RBZG1pblRva2VuUGFuZWwnKTtcbmNvbnN0IEJpdGNvaW5XYWxsZXRCcmFuY2hCYXIgPSByZXF1aXJlKCcuL0JpdGNvaW5XYWxsZXRCcmFuY2hCYXInKTtcblxuLyoqXG4gKiBJbnZvaWNlTGlzdEhvbWU6IGNyZWF0ZSBpbnZvaWNlcyBhbmQgc3RvcmUgdGhlbSBpbiB0aGUgYnJvd3NlciBGYWJyaWMgc3RhdGUgc3RvcmUuXG4gKiBFYWNoIGludm9pY2UgZ2V0cyBhIGZyZXNoIHJlY2VpdmUgYWRkcmVzcyBmcm9tIHRoZSB1c2VyJ3Mgd2FsbGV0LlxuICovXG5jbGFzcyBJbnZvaWNlTGlzdEhvbWUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGludm9pY2VzOiBsb2FkSW52b2ljZXMoKSxcbiAgICAgIGFtb3VudFNhdHM6ICcnLFxuICAgICAgbWVtbzogJycsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBjcmVhdGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH07XG4gICAgdGhpcy5fb25JbnZvaWNlc0hhc2hDaGFuZ2UgPSAoKSA9PiB0aGlzLl9zeW5jSW52b2ljZXNIYXNoU2Nyb2xsKCk7XG4gIH1cblxuICBfc3luY0ludm9pY2VzSGFzaFNjcm9sbCAoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgY29uc3QgcmF3ID0gKHdpbmRvdy5sb2NhdGlvbi5oYXNoIHx8ICcnKS5yZXBsYWNlKC9eIy8sICcnKTtcbiAgICBpZiAoIXJhdykgcmV0dXJuO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJhdyk7XG4gICAgICBpZiAoZWwpIGVsLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ3N0YXJ0JyB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICB0aGlzLl9zeW5jSW52b2ljZXNIYXNoU2Nyb2xsKCk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIHRoaXMuX29uSW52b2ljZXNIYXNoQ2hhbmdlKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUgKHByZXZQcm9wcykge1xuICAgIGNvbnN0IHByZXZYcHViID0gcHJldlByb3BzICYmIHByZXZQcm9wcy5pZGVudGl0eSAmJiBwcmV2UHJvcHMuaWRlbnRpdHkueHB1YjtcbiAgICBjb25zdCBuZXh0WHB1YiA9IHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5pZGVudGl0eSAmJiB0aGlzLnByb3BzLmlkZW50aXR5LnhwdWI7XG4gICAgaWYgKHByZXZYcHViICE9PSBuZXh0WHB1YikgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQgKCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCB0aGlzLl9vbkludm9pY2VzSGFzaENoYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaCAoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGludm9pY2VzOiBsb2FkSW52b2ljZXMoKSB9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUNyZWF0ZSAoKSB7XG4gICAgY29uc3QgYW1vdW50U2F0cyA9IE51bWJlcih0aGlzLnN0YXRlLmFtb3VudFNhdHMgfHwgMCk7XG4gICAgY29uc3QgbWVtbyA9IFN0cmluZyh0aGlzLnN0YXRlLm1lbW8gfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBsYWJlbCA9IFN0cmluZyh0aGlzLnN0YXRlLmxhYmVsIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYW1vdW50U2F0cykgfHwgYW1vdW50U2F0cyA8PSAwKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3I6ICdBbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBzYXRzLicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaWRlbnRpdHkgPSAodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmlkZW50aXR5KSB8fCB7fTtcbiAgICBjb25zdCB3YWxsZXQgPSBnZXROZXh0UmVjZWl2ZVdhbGxldENvbnRleHQoaWRlbnRpdHkpO1xuICAgIGNvbnN0IG5ldHdvcmsgPSAodGhpcy5wcm9wcy5iaXRjb2luICYmIHRoaXMucHJvcHMuYml0Y29pbi5uZXR3b3JrKVxuICAgICAgPyBTdHJpbmcodGhpcy5wcm9wcy5iaXRjb2luLm5ldHdvcmspLnRvTG93ZXJDYXNlKClcbiAgICAgIDogJ3JlZ3Rlc3QnO1xuXG4gICAgaWYgKCF3YWxsZXQud2FsbGV0SWQgfHwgIXdhbGxldC54cHViKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3I6ICdVbmxvY2sgYW4gaWRlbnRpdHkgd2l0aCB4cHViIHRvIGNyZWF0ZSBpbnZvaWNlcy4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoeyBjcmVhdGluZzogdHJ1ZSwgZXJyb3I6IG51bGwgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc2VydmVkID0gcmVzZXJ2ZU5leHRSZWNlaXZlQWRkcmVzcyh3YWxsZXQsIHsgbmV0d29yaywgaWRlbnRpdHkgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gcmVzZXJ2ZWQgJiYgcmVzZXJ2ZWQuY3VycmVudEFkZHJlc3NcbiAgICAgICAgPyByZXNlcnZlZC5jdXJyZW50QWRkcmVzc1xuICAgICAgICA6IG51bGw7XG5cbiAgICAgIGlmICghYWRkcmVzcykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3I6ICdDb3VsZCBub3QgZGVyaXZlIHJlY2VpdmUgYWRkcmVzcy4gQ2hlY2sgeHB1YiBhbmQgbmV0d29yay4nLCBjcmVhdGluZzogZmFsc2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW52b2ljZSA9IGNyZWF0ZUludm9pY2Uoe1xuICAgICAgICBhZGRyZXNzLFxuICAgICAgICBhbW91bnRTYXRzLFxuICAgICAgICBtZW1vLFxuICAgICAgICBsYWJlbDogbGFiZWwgfHwgbWVtbyB8fCBgSW52b2ljZSAke2Zvcm1hdFNhdHNEaXNwbGF5KGFtb3VudFNhdHMpfSBzYXRzYCxcbiAgICAgICAgbmV0d29ya1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChpbnZvaWNlKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGFtb3VudFNhdHM6ICcnLFxuICAgICAgICAgIG1lbW86ICcnLFxuICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICBpbnZvaWNlczogbG9hZEludm9pY2VzKCksXG4gICAgICAgICAgY3JlYXRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgIH0sICgpID0+IHRoaXMuX3N5bmNJbnZvaWNlc0hhc2hTY3JvbGwoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgZXJyb3I6ICdGYWlsZWQgdG8gc2F2ZSBpbnZvaWNlLicsIGNyZWF0aW5nOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBlcnJvcjogZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgICAgY3JlYXRpbmc6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVEZWxldGUgKGlkKSB7XG4gICAgaWYgKGRlbGV0ZUludm9pY2UoaWQpKSB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3QgaWRlbnRpdHkgPSAodGhpcy5wcm9wcyAmJiB0aGlzLnByb3BzLmlkZW50aXR5KSB8fCB7fTtcbiAgICBjb25zdCBiaXRjb2luID0gKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5iaXRjb2luICYmIHR5cGVvZiB0aGlzLnByb3BzLmJpdGNvaW4gPT09ICdvYmplY3QnKVxuICAgICAgPyB0aGlzLnByb3BzLmJpdGNvaW5cbiAgICAgIDoge307XG4gICAgY29uc3QgbmV0d29yayA9IChiaXRjb2luLm5ldHdvcmsgJiYgU3RyaW5nKGJpdGNvaW4ubmV0d29yaykudG9Mb3dlckNhc2UoKSkgfHwgJ3JlZ3Rlc3QnO1xuICAgIGNvbnN0IHdhbGxldCA9IGdldE5leHRSZWNlaXZlV2FsbGV0Q29udGV4dChpZGVudGl0eSk7XG4gICAgY29uc3QgaGFzV2FsbGV0ID0gISEod2FsbGV0LndhbGxldElkICYmIHdhbGxldC54cHViKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT0nZmFkZS1pbic+XG4gICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cImludm9pY2VzLXBhZ2UtaGVhZGluZ1wiIGFyaWEtZGVzY3JpYmVkYnk9XCJpbnZvaWNlcy1wYWdlLXN1bW1hcnlcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgcm9sZT1cImJhbm5lclwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdzdGlja3knLFxuICAgICAgICAgICAgICAgIHRvcDogJzYuNXJlbScsXG4gICAgICAgICAgICAgICAgekluZGV4OiAxMixcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI2ZmZicsXG4gICAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbTogJzAuMzVlbScsXG4gICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiAnMC4yNWVtJyxcbiAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAwIHJnYmEoMzQsIDM2LCAzOCwgMC4xNSknXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYWxpZ25JdGVtczogJ3N0cmV0Y2gnLCBnYXA6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICcwLjVlbScsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgYXJpYS1sYWJlbD1cIkJhY2sgdG8gQml0Y29pbiBkYXNoYm9hcmRcIiB0aXRsZT1cIkJpdGNvaW4gaG9tZSAoc3RhdHVzLCB3YWxsZXQsIGV4cGxvcmVyLCBhbmQgdG9vbHMpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJhcnJvdyBsZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgQml0Y29pblxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDJcIiBpZD1cImludm9pY2VzLXBhZ2UtaGVhZGluZ1wiIHN0eWxlPXt7IG1hcmdpbjogMCwgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImZpbGUgYWx0ZXJuYXRlIG91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+SW52b2ljZXM8L0hlYWRlci5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiByb2xlPVwidG9vbGJhclwiIGFyaWEtbGFiZWw9XCJBY2NvdW50LXRvLWFjY291bnQgc2hvcnRjdXRzXCIgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4V3JhcDogJ3dyYXAnLCBnYXA6ICcwLjM1ZW0nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3BheW1lbnRzI2ZhYnJpYy1wYXltZW50cy10YWItZGVtb1wiIGJhc2ljIHNpemU9XCJzbWFsbFwiIHRpdGxlPVwiUGF5ZXIgdGFiIHdhbGt0aHJvdWdoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjcmVkaXQgY2FyZCBvdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgUGF5bWVudHNcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pbiNmYWJyaWMtYml0Y29pbi1mYXVjZXRcIiBiYXNpYyBzaXplPVwic21hbGxcIiB0aXRsZT1cIlJlZ3Rlc3Q6IGZ1bmQgYW4gYWRkcmVzcyBmcm9tIHRoZSBIdWIgd2FsbGV0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJ0aW50XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgRmF1Y2V0XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vcmVzb3VyY2VzXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgdGl0bGU9XCJMMSB2ZXJpZnkgYW5kIEhUVFAgcmVzb3VyY2VzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzaXRlbWFwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VzXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vY3Jvd2RmdW5kc1wiIGJhc2ljIHNpemU9XCJzbWFsbFwiIHRpdGxlPVwiVGFwcm9vdCBjYW1wYWlnbiwgQUNQIFBTQlQsIFBheWpvaW4gZGVwb3NpdCB0byB2YXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiaGVhcnQgb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIENyb3dkZnVuZHNcbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHAgaWQ9XCJpbnZvaWNlcy1wYWdlLXN1bW1hcnlcIiBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICBDcmVhdGUgcGF5bWVudCByZXF1ZXN0cyBhbmQgc3RvcmUgdGhlbSBsb2NhbGx5IGluIHlvdXIgYnJvd3Nlci4gTm90IHB1Ymxpc2hlZCB0byBnbG9iYWwgc3RhdGUuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgaWQ9XCJmYWJyaWMtaW52b2ljZXMtdGFiLWRlbW9cIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPlR3by10YWIgaW52b2ljZSBwYXltZW50IChwcm9kdWN0aW9uIHdhbGt0aHJvdWdoKTwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICA8TGlzdCBvcmRlcmVkIHJlbGF4ZWQgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGNvbG9yOiAnIzMzMycgfX0+XG4gICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5SZWd0ZXN0IGZ1bmRzOjwvc3Ryb25nPiBUaGUgSHViIG5vZGUgd2FsbGV0IHBheXMgaW52b2ljZXMgKE1ha2UgUGF5bWVudCAvIFBheSBOb3cpLiBPbnsnICd9XG4gICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pbiNmYWJyaWMtYml0Y29pbi1yZWd0ZXN0LXRvb2xiYXJcIj5CaXRjb2luPC9MaW5rPlxuICAgICAgICAgICAgICAgICwgdXNlIDxzdHJvbmc+R2VuZXJhdGUgQmxvY2s8L3N0cm9uZz4gKGFkbWluKSB1bnRpbCB0aGUgSHViIGhhcyBzcGVuZGFibGUgYmFsYW5jZS4gT3B0aW9uYWw6IG9wZW57JyAnfVxuICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4jZmFicmljLWJpdGNvaW4tZmF1Y2V0XCI+RmF1Y2V0PC9MaW5rPlxuICAgICAgICAgICAgICAgIHsnICd9b24gdGhlIEJpdGNvaW4gcGFnZSDigJQgPHN0cm9uZz5Vc2UgbXkgcmVjZWl2ZSBhZGRyZXNzPC9zdHJvbmc+LCA8c3Ryb25nPlJlcXVlc3QgZnJvbSBmYXVjZXQ8L3N0cm9uZz4sIHRoZW4gPHN0cm9uZz5HZW5lcmF0ZSBCbG9jazwvc3Ryb25nPiBzbyB5b3VyIGNsaWVudCBiYWxhbmNlIChCSVA0NCBhY2NvdW50IDAgdW5kZXIgeW91ciBpZGVudGl0eSkgc2hvd3MgY29uZmlybWVkIHRlc3QgY29pbnMuXG4gICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICA8TGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+VGFiIDEgKHJlY2VpdmVyKTo8L3N0cm9uZz4gSW52b2ljZXMgdXNlIHRoZSBuZXh0IGV4dGVybmFsIGFkZHJlc3Mgb257JyAnfVxuICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzL2JpdGNvaW4td2FsbGV0XCI+QklQNDQgYWNjb3VudCAwPC9MaW5rPiB1bmRlciB5b3VyIEZhYnJpYyBpZGVudGl0eS4gQ3JlYXRlIGFuIGludm9pY2UgYW5kIGNvcHkgdGhlIGFkZHJlc3MgKG9yIGxlYXZlIHRoaXMgdGFiIG9wZW4pLlxuICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPlRhYiAyIChwYXllcik6PC9zdHJvbmc+IE9uIHRoZSBpbnZvaWNlIHJvdywgY2xpY2sgPHN0cm9uZz5PcGVuIHBheWVyIHRhYiAocHJlZmlsbGVkKTwvc3Ryb25nPiAoYWRkcyA8Y29kZT5wYXlUbzwvY29kZT4gYW5kIDxjb2RlPnBheUFtb3VudFNhdHM8L2NvZGU+LCBzY3JvbGxzIHRvIE1ha2UgUGF5bWVudCkuIE9yIG9wZW57JyAnfVxuICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3BheW1lbnRzI2ZhYnJpYy1wYXltZW50cy10YWItZGVtb1wiPlBheW1lbnRzIChmdWxsIHdhbGt0aHJvdWdoKTwvTGluaz5cbiAgICAgICAgICAgICAgICB7JyAnfW9yeycgJ31cbiAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9wYXltZW50cyNmYWJyaWMtYnRjLW1ha2UtcGF5bWVudC1oNFwiPmp1bXAgdG8gTWFrZSBQYXltZW50PC9MaW5rPlxuICAgICAgICAgICAgICAgIHsnICd9YW5kIHBhc3RlIGFkZHJlc3MgYW5kIGFtb3VudC4gU3BlbmRzIGFuZCByZWNlaXZlcyBib3RoIHVzZSBhY2NvdW50IDAgdW5kZXIgdGhlIHNhbWUgaWRlbnRpdHkuIE9uLWNoYWluIHNlbmQgdXNlcyB0aGUgSHViIG5vZGUgd2FsbGV0IGFuZCBuZWVkcyB5b3VyIHNldHVwIDxzdHJvbmc+YWRtaW4gdG9rZW48L3N0cm9uZz4gKGlmIG1pc3NpbmcsIHVzZSB0aGUgeWVsbG93IDxzdHJvbmc+UmVndGVzdDogSHViIGFkbWluIHRva2VuPC9zdHJvbmc+IHBhbmVsIGJlbG93IG9yIG9uIFBheW1lbnRzKS5cbiAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5Kb2lubWFya2V0IC8gUGF5am9pbiAoYWR2YW5jZWQpOjwvc3Ryb25nPiBPbiBlYWNoIGludm9pY2UgY2FyZCBoZWFkZXIsIHRoZSA8SWNvbiBuYW1lPVwic2V0dGluZ1wiIC8+IGNvbnRyb2wgb3BlbnMgPHN0cm9uZz50aHJlZSBCVEMgcG9vbCB0YXJnZXRzPC9zdHJvbmc+IChkZWZhdWx0IDAuMDUg4oaSIDAuMDA1IOKGkiAwLjAwMDUpIGZvciBvcGVyYXRvciBsaXF1aWRpdHkgcGxhbm5pbmcsIGFuZCBhbiBvcHRpb25hbCA8c3Ryb25nPlBheWpvaW4gQklQMjE8L3N0cm9uZz4gbWludCBmb3IgdGhpcyBpbnZvaWNlIGFkZHJlc3MgKDxjb2RlPnBqPTwvY29kZT4pIHRoYXQgb3BlbnMgaW4gUGF5bWVudHMgZm9yIGxvY2FsIHNpZ24gb3IgQUNQIEh1YiBib29zdC5cbiAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz5Db25maXJtOjwvc3Ryb25nPiBSZXR1cm4gaGVyZSDigJQgb24gdGhlIGludm9pY2UgY2FyZCB1c2UgPHN0cm9uZz5Db25maXJtIHBheW1lbnQ8L3N0cm9uZz4gd2l0aCB0aGUgdHhpZCwgb3IgdmVyaWZ5IHZpYXsnICd9XG4gICAgICAgICAgICAgICAgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pbi9yZXNvdXJjZXNcIj5SZXNvdXJjZXMg4oaSIEwxIHBheW1lbnQgdmVyaWZpY2F0aW9uPC9MaW5rPi4gVGhlIGludm9pY2UgbGlzdCBsaXZlcyBpbiB0aGUgYnJvd3NlciBGYWJyaWMgc3RhdGUgc3RvcmUgZm9yIHRoaXMgb3JpZ2luLCBzbyBib3RoIHRhYnMgc2VlIHRoZSBzYW1lIHJvd3MuXG4gICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICA8TGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+RGVza3RvcCAvIGRlbGVnYXRpb246PC9zdHJvbmc+IElmIHlvdSB1c2UgPHN0cm9uZz5Mb2cgaW4gd2l0aCBGYWJyaWMgSHViIChkZXNrdG9wKTwvc3Ryb25nPiwgbWFuYWdlIHRva2VucyBhbmQgb3BlbiBwZXItdG9rZW4gYXVkaXQgdW5kZXJ7JyAnfVxuICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3NldHRpbmdzL3NlY3VyaXR5XCI+U2VjdXJpdHkgJmFtcDsgZGVsZWdhdGlvbjwvTGluaz5cbiAgICAgICAgICAgICAgICB7JyAnfShSRVNUIDxjb2RlPi9zZXNzaW9uczwvY29kZT4pLlxuICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgIDwvTGlzdD5cbiAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgPEh1YlJlZ3Rlc3RBZG1pblRva2VuUGFuZWxcbiAgICAgICAgICAgIG5ldHdvcms9eyhiaXRjb2luLm5ldHdvcmsgJiYgU3RyaW5nKGJpdGNvaW4ubmV0d29yaykudG9Mb3dlckNhc2UoKSkgfHwgJ3JlZ3Rlc3QnfVxuICAgICAgICAgICAgYWRtaW5Ub2tlblByb3A9e3RoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5hZG1pblRva2VufVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJpdGNvaW5XYWxsZXRCcmFuY2hCYXIgaWRlbnRpdHk9e2lkZW50aXR5fSAvPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzg4OCcsIGZvbnRTaXplOiAnMC45ZW0nIH19PlxuICAgICAgICAgICAgRWFjaCBpbnZvaWNlIHVzZXMgdGhlIG5leHQgdW51c2VkIGV4dGVybmFsIGFkZHJlc3MgZnJvbSB5b3VyIHdhbGxldCBwYXRoOyB1c2VkIGluZGljZXMgc3RheSBpbiB0aGUgYnJvd3NlciBzdG9yZS5cbiAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL3Jlc291cmNlc1wiPkwxIHBheW1lbnQgdmVyaWZpY2F0aW9uPC9MaW5rPlxuICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICh0eGlkICsgYWRkcmVzcyArIGFtb3VudCkgbGl2ZXMgdW5kZXIgQml0Y29pbiByZXNvdXJjZXMuXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgeyFoYXNXYWxsZXQgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmc+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46IDAgfX0+XG4gICAgICAgICAgICAgIDxzdHJvbmc+SWRlbnRpdHkgcmVxdWlyZWQ8L3N0cm9uZz5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnIH19PlxuICAgICAgICAgICAgICBVbmxvY2sgYW4gaWRlbnRpdHkgd2l0aCBhbiB4cHViIHRvIGNyZWF0ZSBpbnZvaWNlcy4gWW91ciByZWNlaXZlIGFkZHJlc3NlcyBhcmUgZGVyaXZlZCBmcm9tIHlvdXIgd2FsbGV0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgKX1cblxuICAgICAgICB7aGFzV2FsbGV0ICYmIChcbiAgICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9J2gzJz5DcmVhdGUgaW52b2ljZTwvSGVhZGVyPlxuICAgICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgICAgbGFiZWw9J0Ftb3VudCAoc2F0cyknXG4gICAgICAgICAgICAgICAgdHlwZT0nbnVtYmVyJ1xuICAgICAgICAgICAgICAgIG1pbj0nMSdcbiAgICAgICAgICAgICAgICBzdGVwPScxJ1xuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScxMDAwJ1xuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmFtb3VudFNhdHN9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgYW1vdW50U2F0czogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgICAgbGFiZWw9J0xhYmVsJ1xuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSdlLmcuIENvZmZlZSBwYXltZW50J1xuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmxhYmVsfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGxhYmVsOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEZvcm0uSW5wdXRcbiAgICAgICAgICAgICAgICBsYWJlbD0nTWVtbydcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nT3B0aW9uYWwgbm90ZSdcbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5tZW1vfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IG1lbW86IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQ3JlYXRlKCl9XG4gICAgICAgICAgICAgICAgbG9hZGluZz17dGhpcy5zdGF0ZS5jcmVhdGluZ31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5jcmVhdGluZ31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9J3BsdXMnIC8+XG4gICAgICAgICAgICAgICAgQ3JlYXRlIGludm9pY2VcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgICB7dGhpcy5zdGF0ZS5lcnJvciAmJiAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+XG4gICAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkNvdWxkIG5vdCBjcmVhdGUgaW52b2ljZTwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcgfX0+e3RoaXMuc3RhdGUuZXJyb3J9PC9wPlxuICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKX1cblxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJywgbWFyZ2luQm90dG9tOiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9J2gzJyBzdHlsZT17eyBtYXJnaW46IDAgfX0+TXkgaW52b2ljZXM8L0hlYWRlcj5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnJlZnJlc2goKX1cbiAgICAgICAgICAgICAgdGl0bGU9XCJSZWxvYWQgbGlzdCBmcm9tIGJyb3dzZXIgc3RvcmUgKGUuZy4gYWZ0ZXIgYW5vdGhlciB0YWIgY3JlYXRlZCBhbiBpbnZvaWNlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgUmVmcmVzaCBsaXN0XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5pbnZvaWNlcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19Pk5vIGludm9pY2VzIHlldC4gQ3JlYXRlIG9uZSBhYm92ZS48L3A+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAnMS41ZW0nIH19PlxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5pbnZvaWNlcy5tYXAoKGludikgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtpbnYuaWR9IHN0eWxlPXt7IHBvc2l0aW9uOiAncmVsYXRpdmUnIH19PlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JywgZ2FwOiAnMWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmbGV4OiAnMSAxIDMwMHB4JywgbWluV2lkdGg6IDAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPEludm9pY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGludm9pY2VJZD17aW52LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcz17aW52LmFkZHJlc3N9XG4gICAgICAgICAgICAgICAgICAgICAgICBhbW91bnRTYXRzPXtpbnYuYW1vdW50U2F0c31cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcms9e2ludi5uZXR3b3JrIHx8IG5ldHdvcmt9XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17aW52LmxhYmVsIHx8IGludi5tZW1vIHx8IGBJbnZvaWNlICR7Zm9ybWF0U2F0c0Rpc3BsYXkoaW52LmFtb3VudFNhdHMpfSBzYXRzYH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lbW89e2ludi5tZW1vfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHhpZHM9e2ludi50eGlkcyB8fCBbXX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aXR5PXtpZGVudGl0eX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluVG9rZW49e3RoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5hZG1pblRva2VufVxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFjdFxuICAgICAgICAgICAgICAgICAgICAgICAgb25QYWlkPXsodHhpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW52LmlkICYmIHR4aWQpIGFkZFBheW1lbnRUb0ludm9pY2UoaW52LmlkLCB0eGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogJzAuMzVlbScsIGFsaWduSXRlbXM6ICdzdHJldGNoJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBhcz1cImFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17YnVpbGRUYWJQYXllckRlbW9VcmwoaW52LmFkZHJlc3MsIGludi5hbW91bnRTYXRzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImJsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJleHRlcm5hbCBhbHRlcm5hdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudD1cIk9wZW4gcGF5ZXIgdGFiIChwcmVmaWxsZWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiT3BlbnMgUGF5bWVudHMgaW4gYSBuZXcgdGFiIHdpdGggcGF5VG8gYW5kIHBheUFtb3VudFNhdHMgcHJlZmlsbGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJPcGVuIHBheWVyIHRhYjogQml0Y29pbiBQYXltZW50cyB3aXRoIGFkZHJlc3MgYW5kIGFtb3VudCBwcmVmaWxsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSdyZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPSdzbWFsbCdcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249J3RyYXNoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVEZWxldGUoaW52LmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSdEZWxldGUgaW52b2ljZSdcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzAuOGVtJywgY29sb3I6ICcjOTk5JywgbWFyZ2luVG9wOiAnMC4yNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlZCB7aW52LmNyZWF0ZWRBdCA/IG5ldyBEYXRlKGludi5jcmVhdGVkQXQpLnRvTG9jYWxlU3RyaW5nKCkgOiAnLSd9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSW52b2ljZUxpc3RIb21lO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIm4iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jcmVhdGVDbGFzcyIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJCb29sZWFuIiwidmFsdWVPZiIsIl9pbmhlcml0cyIsIl9zZXRQcm90b3R5cGVPZiIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTGluayIsIl9yZXF1aXJlMiIsIkJ1dHRvbiIsIkZvcm0iLCJIZWFkZXIiLCJJY29uIiwiTGlzdCIsIk1lc3NhZ2UiLCJTZWdtZW50IiwiX3JlcXVpcmUzIiwibG9hZEludm9pY2VzIiwiY3JlYXRlSW52b2ljZSIsImRlbGV0ZUludm9pY2UiLCJhZGRQYXltZW50VG9JbnZvaWNlIiwiX3JlcXVpcmU0IiwiZ2V0TmV4dFJlY2VpdmVXYWxsZXRDb250ZXh0IiwicmVzZXJ2ZU5leHRSZWNlaXZlQWRkcmVzcyIsIkludm9pY2UiLCJfcmVxdWlyZTUiLCJmb3JtYXRTYXRzRGlzcGxheSIsIl9yZXF1aXJlNiIsImJ1aWxkVGFiUGF5ZXJEZW1vVXJsIiwiSHViUmVndGVzdEFkbWluVG9rZW5QYW5lbCIsIkJpdGNvaW5XYWxsZXRCcmFuY2hCYXIiLCJJbnZvaWNlTGlzdEhvbWUiLCJfUmVhY3QkQ29tcG9uZW50IiwicHJvcHMiLCJfdGhpcyIsInN0YXRlIiwiaW52b2ljZXMiLCJhbW91bnRTYXRzIiwibWVtbyIsImxhYmVsIiwiY3JlYXRpbmciLCJlcnJvciIsIl9vbkludm9pY2VzSGFzaENoYW5nZSIsIl9zeW5jSW52b2ljZXNIYXNoU2Nyb2xsIiwid2luZG93IiwicmF3IiwibG9jYXRpb24iLCJoYXNoIiwicmVwbGFjZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImVsIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJibG9jayIsImNvbXBvbmVudERpZE1vdW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZXZYcHViIiwiaWRlbnRpdHkiLCJ4cHViIiwibmV4dFhwdWIiLCJmb3JjZVVwZGF0ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlZnJlc2giLCJzZXRTdGF0ZSIsIl9oYW5kbGVDcmVhdGUiLCJfY2FsbGVlIiwiX3RoaXMyIiwid2FsbGV0IiwibmV0d29yayIsInJlc2VydmVkIiwiYWRkcmVzcyIsImludm9pY2UiLCJfdCIsIl9jb250ZXh0IiwidHJpbSIsImlzRmluaXRlIiwiYml0Y29pbiIsInRvTG93ZXJDYXNlIiwid2FsbGV0SWQiLCJjdXJyZW50QWRkcmVzcyIsImNvbmNhdCIsIm1lc3NhZ2UiLCJoYW5kbGVDcmVhdGUiLCJoYW5kbGVEZWxldGUiLCJpZCIsInJlbmRlciIsIl90aGlzMyIsImhhc1dhbGxldCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJyb2xlIiwic3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsInpJbmRleCIsImJhY2tncm91bmQiLCJwYWRkaW5nQm90dG9tIiwibWFyZ2luQm90dG9tIiwiYm94U2hhZG93IiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJhbGlnbkl0ZW1zIiwiZ2FwIiwiZmxleFdyYXAiLCJhcyIsInRvIiwiYmFzaWMiLCJzaXplIiwidGl0bGUiLCJuYW1lIiwibWFyZ2luIiwiQ29udGVudCIsImNvbG9yIiwiaW5mbyIsIm9yZGVyZWQiLCJyZWxheGVkIiwiSXRlbSIsImFkbWluVG9rZW5Qcm9wIiwiYWRtaW5Ub2tlbiIsImZvbnRTaXplIiwid2FybmluZyIsIklucHV0IiwidHlwZSIsIm1pbiIsInN0ZXAiLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwidGFyZ2V0IiwicHJpbWFyeSIsIm9uQ2xpY2siLCJsb2FkaW5nIiwiZGlzYWJsZWQiLCJuZWdhdGl2ZSIsIm1hcmdpblRvcCIsImp1c3RpZnlDb250ZW50IiwiaWNvbiIsImxhYmVsUG9zaXRpb24iLCJtYXAiLCJpbnYiLCJmbGV4IiwibWluV2lkdGgiLCJpbnZvaWNlSWQiLCJ0eGlkcyIsImNvbXBhY3QiLCJvblBhaWQiLCJ0eGlkIiwiaHJlZiIsInJlbCIsImNvbnRlbnQiLCJjcmVhdGVkQXQiLCJEYXRlIiwidG9Mb2NhbGVTdHJpbmciLCJDb21wb25lbnQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/InvoiceListHome.js\n\n}')},"./components/LightningHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Input = _require2.Input,\n Label = _require2.Label,\n Message = _require2.Message,\n Segment = _require2.Segment,\n Table = _require2.Table;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n createLightningInvoice = _require3.createLightningInvoice,\n decodeLightningInvoice = _require3.decodeLightningInvoice,\n fetchLightningChannels = _require3.fetchLightningChannels,\n fetchLightningStatus = _require3.fetchLightningStatus,\n loadUpstreamSettings = _require3.loadUpstreamSettings,\n payLightningInvoice = _require3.payLightningInvoice;\nvar LightningHome = /*#__PURE__*/function (_React$Component) {\n function LightningHome(props) {\n var _this;\n _classCallCheck(this, LightningHome);\n _this = _callSuper(this, LightningHome, [props]);\n _this.state = {\n loading: true,\n upstream: loadUpstreamSettings(),\n status: {},\n channels: [],\n invoiceAmountSats: \'\',\n invoiceMemo: \'\',\n invoiceInput: \'\',\n result: null\n };\n return _this;\n }\n _inherits(LightningHome, _React$Component);\n return _createClass(LightningHome, [{\n key: "componentDidMount",\n value: function () {\n var _componentDidMount = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _context.n = 1;\n return this.refresh();\n case 1:\n return _context.a(2);\n }\n }, _callee, this);\n }));\n function componentDidMount() {\n return _componentDidMount.apply(this, arguments);\n }\n return componentDidMount;\n }()\n }, {\n key: "refresh",\n value: function () {\n var _refresh = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var _yield$Promise$all, _yield$Promise$all2, status, channels, channelList;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n this.setState({\n loading: true\n });\n _context2.n = 1;\n return Promise.all([fetchLightningStatus(this.state.upstream)["catch"](function () {\n return {};\n }), fetchLightningChannels(this.state.upstream)["catch"](function () {\n return [];\n })]);\n case 1:\n _yield$Promise$all = _context2.v;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);\n status = _yield$Promise$all2[0];\n channels = _yield$Promise$all2[1];\n channelList = Array.isArray(channels) ? channels : channels && Array.isArray(channels.channels) ? channels.channels : [];\n this.setState({\n loading: false,\n status: status || {},\n channels: channelList\n });\n case 2:\n return _context2.a(2);\n }\n }, _callee2, this);\n }));\n function refresh() {\n return _refresh.apply(this, arguments);\n }\n return refresh;\n }()\n }, {\n key: "createInvoice",\n value: function () {\n var _createInvoice = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var amountSats, identity, out, bolt11, _t;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n amountSats = Math.round(Number(this.state.invoiceAmountSats || 0));\n if (!(!Number.isFinite(amountSats) || amountSats <= 0)) {\n _context3.n = 1;\n break;\n }\n this.setState({\n result: {\n error: \'Invoice amount must be greater than zero.\'\n }\n });\n return _context3.a(2);\n case 1:\n identity = this.props && this.props.identity || {};\n _context3.p = 2;\n _context3.n = 3;\n return createLightningInvoice(this.state.upstream, identity, {\n amountSats: amountSats,\n memo: this.state.invoiceMemo\n });\n case 3:\n out = _context3.v;\n bolt11 = String(out && (out.payment_request || out.invoice || out.bolt11) || \'\').trim();\n this.setState({\n result: out || {},\n invoiceInput: bolt11 || this.state.invoiceInput\n });\n _context3.n = 4;\n return this.refresh();\n case 4:\n _context3.n = 6;\n break;\n case 5:\n _context3.p = 5;\n _t = _context3.v;\n this.setState({\n result: {\n error: _t && _t.message ? _t.message : String(_t)\n }\n });\n case 6:\n return _context3.a(2);\n }\n }, _callee3, this, [[2, 5]]);\n }));\n function createInvoice() {\n return _createInvoice.apply(this, arguments);\n }\n return createInvoice;\n }()\n }, {\n key: "decodeInvoice",\n value: function () {\n var _decodeInvoice = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var invoice, out, _t2;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n invoice = String(this.state.invoiceInput || \'\').trim();\n if (invoice) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2);\n case 1:\n _context4.p = 1;\n _context4.n = 2;\n return decodeLightningInvoice(this.state.upstream, invoice);\n case 2:\n out = _context4.v;\n this.setState({\n result: out || {}\n });\n _context4.n = 4;\n break;\n case 3:\n _context4.p = 3;\n _t2 = _context4.v;\n this.setState({\n result: {\n error: _t2 && _t2.message ? _t2.message : String(_t2)\n }\n });\n case 4:\n return _context4.a(2);\n }\n }, _callee4, this, [[1, 3]]);\n }));\n function decodeInvoice() {\n return _decodeInvoice.apply(this, arguments);\n }\n return decodeInvoice;\n }()\n }, {\n key: "payInvoice",\n value: function () {\n var _payInvoice = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var invoice, identity, out, _t3;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.p = _context5.n) {\n case 0:\n invoice = String(this.state.invoiceInput || \'\').trim();\n if (invoice) {\n _context5.n = 1;\n break;\n }\n return _context5.a(2);\n case 1:\n identity = this.props && this.props.identity || {};\n _context5.p = 2;\n _context5.n = 3;\n return payLightningInvoice(this.state.upstream, identity, invoice);\n case 3:\n out = _context5.v;\n this.setState({\n result: out || {}\n });\n _context5.n = 4;\n return this.refresh();\n case 4:\n _context5.n = 6;\n break;\n case 5:\n _context5.p = 5;\n _t3 = _context5.v;\n this.setState({\n result: {\n error: _t3 && _t3.message ? _t3.message : String(_t3)\n }\n });\n case 6:\n return _context5.a(2);\n }\n }, _callee5, this, [[2, 5]]);\n }));\n function payInvoice() {\n return _payInvoice.apply(this, arguments);\n }\n return payInvoice;\n }()\n }, {\n key: "render",\n value: function render() {\n var _this2 = this;\n var s = this.state.status || {};\n var available = !!(s.available === true || s.status === \'OK\' || s.status === \'RUNNING\' || s.status === \'STUB\');\n return /*#__PURE__*/React.createElement("div", {\n className: "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, {\n loading: this.state.loading\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left"\n }), "Bitcoin"), /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Lightning"))), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n onClick: function onClick() {\n return _this2.refresh();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh")), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.6em\'\n }\n }, /*#__PURE__*/React.createElement(Label, {\n color: available ? \'green\' : \'grey\',\n horizontal: true\n }, String(s.status || \'unavailable\')), s.node && s.node.alias ? /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\'\n }\n }, s.node.alias) : null)), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Channels"), this.state.channels.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No channels listed.") : /*#__PURE__*/React.createElement(Table, {\n compact: "very",\n celled: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Peer"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "State"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Capacity"))), /*#__PURE__*/React.createElement(Table.Body, null, this.state.channels.map(function (c, i) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "".concat(c.short_channel_id || c.id || i)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", null, String(c.peer_id || c.destination || \'-\').slice(0, 24))), /*#__PURE__*/React.createElement(Table.Cell, null, c.state || c.status || \'-\'), /*#__PURE__*/React.createElement(Table.Cell, null, c.capacity != null ? String(c.capacity) : \'-\'));\n })))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Invoices & Payments"), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Create invoice amount (sats)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "1",\n step: "1",\n placeholder: "500",\n value: this.state.invoiceAmountSats,\n onChange: function onChange(e) {\n return _this2.setState({\n invoiceAmountSats: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Invoice memo"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "Shown to payer (optional)",\n value: this.state.invoiceMemo,\n onChange: function onChange(e) {\n return _this2.setState({\n invoiceMemo: e.target.value\n });\n }\n }))), /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n return _this2.createInvoice();\n },\n disabled: !available\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "add circle"\n }), "Create Invoice"), /*#__PURE__*/React.createElement(Form.Field, {\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("label", null, "Invoice (BOLT11)"), /*#__PURE__*/React.createElement(Form.TextArea, {\n rows: 3,\n placeholder: "lnbc...",\n value: this.state.invoiceInput,\n onChange: function onChange(e) {\n return _this2.setState({\n invoiceInput: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Button, {\n basic: true,\n onClick: function onClick() {\n return _this2.decodeInvoice();\n },\n disabled: !available\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "search"\n }), "Decode"), /*#__PURE__*/React.createElement(Button, {\n color: "green",\n onClick: function onClick() {\n return _this2.payInvoice();\n },\n disabled: !available\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bolt"\n }), "Pay Invoice")), this.state.result ? /*#__PURE__*/React.createElement(Message, {\n style: {\n marginTop: \'1em\'\n },\n negative: !!this.state.result.error,\n positive: !this.state.result.error\n }, /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\',\n margin: 0\n }\n }, JSON.stringify(this.state.result, null, 2))) : null));\n }\n }]);\n}(React.Component);\nmodule.exports = LightningHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBO1VBQUEsT0FBUWpCLE1BQUksQ0FBQ0YsVUFBVSxDQUFDLENBQUM7UUFBQSxDQUFDO1FBQUMrQyxRQUFRLEVBQUUsQ0FBQzNDO01BQVUsZ0JBQzNFOUUsS0FBQSxDQUFBK0UsYUFBQSxDQUFDdkUsSUFBSTtRQUFDaEYsSUFBSSxFQUFDO01BQU0sQ0FBRSxDQUFDLGVBRWQsQ0FDSixDQUFDLEVBQ04sSUFBSSxDQUFDaUcsS0FBSyxDQUFDUSxNQUFNLGdCQUNoQmpDLEtBQUEsQ0FBQStFLGFBQUEsQ0FBQ3BFLE9BQU87UUFBQ3NFLEtBQUssRUFBRTtVQUFFYSxTQUFTLEVBQUU7UUFBTSxDQUFFO1FBQUM4QixRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQ25HLEtBQUssQ0FBQ1EsTUFBTSxDQUFDeUIsS0FBTTtRQUFDbUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDcEcsS0FBSyxDQUFDUSxNQUFNLENBQUN5QjtNQUFNLGdCQUM1RzFELEtBQUEsQ0FBQStFLGFBQUE7UUFBS0UsS0FBSyxFQUFFO1VBQUU2QyxVQUFVLEVBQUUsVUFBVTtVQUFFQyxTQUFTLEVBQUUsWUFBWTtVQUFFcEMsTUFBTSxFQUFFO1FBQUU7TUFBRSxHQUFFcUMsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSSxDQUFDeEcsS0FBSyxDQUFDUSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBTyxDQUN0SCxDQUFDLEdBQ1IsSUFDRyxDQUNOLENBQUM7SUFFVjtFQUFDO0FBQUEsRUFoTHlCakMsS0FBSyxDQUFDa0ksU0FBUztBQW1MM0NDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHL0csYUFBYSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29tcG9uZW50cy9MaWdodG5pbmdIb21lLmpzPzk1ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHsgQnV0dG9uLCBGb3JtLCBIZWFkZXIsIEljb24sIElucHV0LCBMYWJlbCwgTWVzc2FnZSwgU2VnbWVudCwgVGFibGUgfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCB7XG4gIGNyZWF0ZUxpZ2h0bmluZ0ludm9pY2UsXG4gIGRlY29kZUxpZ2h0bmluZ0ludm9pY2UsXG4gIGZldGNoTGlnaHRuaW5nQ2hhbm5lbHMsXG4gIGZldGNoTGlnaHRuaW5nU3RhdHVzLFxuICBsb2FkVXBzdHJlYW1TZXR0aW5ncyxcbiAgcGF5TGlnaHRuaW5nSW52b2ljZVxufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9iaXRjb2luQ2xpZW50Jyk7XG5cbmNsYXNzIExpZ2h0bmluZ0hvbWUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICB1cHN0cmVhbTogbG9hZFVwc3RyZWFtU2V0dGluZ3MoKSxcbiAgICAgIHN0YXR1czoge30sXG4gICAgICBjaGFubmVsczogW10sXG4gICAgICBpbnZvaWNlQW1vdW50U2F0czogJycsXG4gICAgICBpbnZvaWNlTWVtbzogJycsXG4gICAgICBpbnZvaWNlSW5wdXQ6ICcnLFxuICAgICAgcmVzdWx0OiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2ggKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0pO1xuICAgIGNvbnN0IFtzdGF0dXMsIGNoYW5uZWxzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGZldGNoTGlnaHRuaW5nU3RhdHVzKHRoaXMuc3RhdGUudXBzdHJlYW0pLmNhdGNoKCgpID0+ICh7fSkpLFxuICAgICAgZmV0Y2hMaWdodG5pbmdDaGFubmVscyh0aGlzLnN0YXRlLnVwc3RyZWFtKS5jYXRjaCgoKSA9PiBbXSlcbiAgICBdKTtcbiAgICBjb25zdCBjaGFubmVsTGlzdCA9IEFycmF5LmlzQXJyYXkoY2hhbm5lbHMpID8gY2hhbm5lbHMgOiAoY2hhbm5lbHMgJiYgQXJyYXkuaXNBcnJheShjaGFubmVscy5jaGFubmVscykgPyBjaGFubmVscy5jaGFubmVscyA6IFtdKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UsIHN0YXR1czogc3RhdHVzIHx8IHt9LCBjaGFubmVsczogY2hhbm5lbExpc3QgfSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVJbnZvaWNlICgpIHtcbiAgICBjb25zdCBhbW91bnRTYXRzID0gTWF0aC5yb3VuZChOdW1iZXIodGhpcy5zdGF0ZS5pbnZvaWNlQW1vdW50U2F0cyB8fCAwKSk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYW1vdW50U2F0cykgfHwgYW1vdW50U2F0cyA8PSAwKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcmVzdWx0OiB7IGVycm9yOiAnSW52b2ljZSBhbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nIH0gfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkZW50aXR5ID0gKHRoaXMucHJvcHMgJiYgdGhpcy5wcm9wcy5pZGVudGl0eSkgfHwge307XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dCA9IGF3YWl0IGNyZWF0ZUxpZ2h0bmluZ0ludm9pY2UodGhpcy5zdGF0ZS51cHN0cmVhbSwgaWRlbnRpdHksIHsgYW1vdW50U2F0cywgbWVtbzogdGhpcy5zdGF0ZS5pbnZvaWNlTWVtbyB9KTtcbiAgICAgIGNvbnN0IGJvbHQxMSA9IFN0cmluZygob3V0ICYmIChvdXQucGF5bWVudF9yZXF1ZXN0IHx8IG91dC5pbnZvaWNlIHx8IG91dC5ib2x0MTEpKSB8fCAnJykudHJpbSgpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJlc3VsdDogb3V0IHx8IHt9LCBpbnZvaWNlSW5wdXQ6IGJvbHQxMSB8fCB0aGlzLnN0YXRlLmludm9pY2VJbnB1dCB9KTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcmVzdWx0OiB7IGVycm9yOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfSB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWNvZGVJbnZvaWNlICgpIHtcbiAgICBjb25zdCBpbnZvaWNlID0gU3RyaW5nKHRoaXMuc3RhdGUuaW52b2ljZUlucHV0IHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFpbnZvaWNlKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dCA9IGF3YWl0IGRlY29kZUxpZ2h0bmluZ0ludm9pY2UodGhpcy5zdGF0ZS51cHN0cmVhbSwgaW52b2ljZSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcmVzdWx0OiBvdXQgfHwge30gfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyByZXN1bHQ6IHsgZXJyb3I6IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9IH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHBheUludm9pY2UgKCkge1xuICAgIGNvbnN0IGludm9pY2UgPSBTdHJpbmcodGhpcy5zdGF0ZS5pbnZvaWNlSW5wdXQgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIWludm9pY2UpIHJldHVybjtcbiAgICBjb25zdCBpZGVudGl0eSA9ICh0aGlzLnByb3BzICYmIHRoaXMucHJvcHMuaWRlbnRpdHkpIHx8IHt9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdXQgPSBhd2FpdCBwYXlMaWdodG5pbmdJbnZvaWNlKHRoaXMuc3RhdGUudXBzdHJlYW0sIGlkZW50aXR5LCBpbnZvaWNlKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyByZXN1bHQ6IG91dCB8fCB7fSB9KTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcmVzdWx0OiB7IGVycm9yOiBlcnJvciAmJiBlcnJvci5tZXNzYWdlID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikgfSB9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzLnN0YXRlLnN0YXR1cyB8fCB7fTtcbiAgICBjb25zdCBhdmFpbGFibGUgPSAhIShzLmF2YWlsYWJsZSA9PT0gdHJ1ZSB8fCBzLnN0YXR1cyA9PT0gJ09LJyB8fCBzLnN0YXR1cyA9PT0gJ1JVTk5JTkcnIHx8IHMuc3RhdHVzID09PSAnU1RVQicpO1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZhZGUtaW5cIj5cbiAgICAgICAgPFNlZ21lbnQgbG9hZGluZz17dGhpcy5zdGF0ZS5sb2FkaW5nfT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC41ZW0nLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiAvPlxuICAgICAgICAgICAgICAgIEJpdGNvaW5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoMlwiIHN0eWxlPXt7IG1hcmdpbjogMCB9fT5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYm9sdFwiIC8+XG4gICAgICAgICAgICAgICAgPEhlYWRlci5Db250ZW50PkxpZ2h0bmluZzwvSGVhZGVyLkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8QnV0dG9uIGJhc2ljIHNpemU9XCJzbWFsbFwiIG9uQ2xpY2s9eygpID0+IHRoaXMucmVmcmVzaCgpfT5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICBSZWZyZXNoXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNmVtJyB9fT5cbiAgICAgICAgICAgIDxMYWJlbCBjb2xvcj17YXZhaWxhYmxlID8gJ2dyZWVuJyA6ICdncmV5J30gaG9yaXpvbnRhbD57U3RyaW5nKHMuc3RhdHVzIHx8ICd1bmF2YWlsYWJsZScpfTwvTGFiZWw+XG4gICAgICAgICAgICB7cy5ub2RlICYmIHMubm9kZS5hbGlhcyA/IDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+e3Mubm9kZS5hbGlhc308L3NwYW4+IDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIj5DaGFubmVsczwvSGVhZGVyPlxuICAgICAgICAgIHt0aGlzLnN0YXRlLmNoYW5uZWxzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+Tm8gY2hhbm5lbHMgbGlzdGVkLjwvcD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFRhYmxlIGNvbXBhY3Q9XCJ2ZXJ5XCIgY2VsbGVkPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5QZWVyPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+U3RhdGU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5DYXBhY2l0eTwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICAgIDxUYWJsZS5Cb2R5PlxuICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNoYW5uZWxzLm1hcCgoYywgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdyBrZXk9e2Ake2Muc2hvcnRfY2hhbm5lbF9pZCB8fCBjLmlkIHx8IGl9YH0+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxjb2RlPntTdHJpbmcoYy5wZWVyX2lkIHx8IGMuZGVzdGluYXRpb24gfHwgJy0nKS5zbGljZSgwLCAyNCl9PC9jb2RlPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2Muc3RhdGUgfHwgYy5zdGF0dXMgfHwgJy0nfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2MuY2FwYWNpdHkgIT0gbnVsbCA/IFN0cmluZyhjLmNhcGFjaXR5KSA6ICctJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiPkludm9pY2VzICYgUGF5bWVudHM8L0hlYWRlcj5cbiAgICAgICAgICA8Rm9ybT5cbiAgICAgICAgICAgIDxGb3JtLkdyb3VwIHdpZHRocz1cImVxdWFsXCI+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5DcmVhdGUgaW52b2ljZSBhbW91bnQgKHNhdHMpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjUwMFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5pbnZvaWNlQW1vdW50U2F0c31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGludm9pY2VBbW91bnRTYXRzOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5JbnZvaWNlIG1lbW88L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTaG93biB0byBwYXllciAob3B0aW9uYWwpXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmludm9pY2VNZW1vfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgaW52b2ljZU1lbW86IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgIDwvRm9ybS5Hcm91cD5cbiAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4gdGhpcy5jcmVhdGVJbnZvaWNlKCl9IGRpc2FibGVkPXshYXZhaWxhYmxlfT5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImFkZCBjaXJjbGVcIiAvPlxuICAgICAgICAgICAgICBDcmVhdGUgSW52b2ljZVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8Rm9ybS5GaWVsZCBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19PlxuICAgICAgICAgICAgICA8bGFiZWw+SW52b2ljZSAoQk9MVDExKTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxGb3JtLlRleHRBcmVhXG4gICAgICAgICAgICAgICAgcm93cz17M31cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImxuYmMuLi5cIlxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmludm9pY2VJbnB1dH1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBpbnZvaWNlSW5wdXQ6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgPEJ1dHRvbiBiYXNpYyBvbkNsaWNrPXsoKSA9PiB0aGlzLmRlY29kZUludm9pY2UoKX0gZGlzYWJsZWQ9eyFhdmFpbGFibGV9PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2VhcmNoXCIgLz5cbiAgICAgICAgICAgICAgRGVjb2RlXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJncmVlblwiIG9uQ2xpY2s9eygpID0+IHRoaXMucGF5SW52b2ljZSgpfSBkaXNhYmxlZD17IWF2YWlsYWJsZX0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJib2x0XCIgLz5cbiAgICAgICAgICAgICAgUGF5IEludm9pY2VcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICB7dGhpcy5zdGF0ZS5yZXN1bHQgPyAoXG4gICAgICAgICAgICA8TWVzc2FnZSBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19IG5lZ2F0aXZlPXshIXRoaXMuc3RhdGUucmVzdWx0LmVycm9yfSBwb3NpdGl2ZT17IXRoaXMuc3RhdGUucmVzdWx0LmVycm9yfT5cbiAgICAgICAgICAgICAgPHByZSBzdHlsZT17eyB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLCB3b3JkQnJlYWs6ICdicmVhay13b3JkJywgbWFyZ2luOiAwIH19PntKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRlLnJlc3VsdCwgbnVsbCwgMil9PC9wcmU+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvU2VnbWVudD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBMaWdodG5pbmdIb21lO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9zbGljZWRUb0FycmF5IiwiciIsImUiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwiYSIsIl9hcnJheUxpa2VUb0FycmF5IiwidCIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJsZW5ndGgiLCJuIiwibCIsImkiLCJ1IiwiZiIsIm5leHQiLCJPYmplY3QiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiaXNBcnJheSIsIl9yZWdlbmVyYXRvciIsInRvU3RyaW5nVGFnIiwiYyIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJwIiwieSIsIkciLCJ2IiwiZCIsImJpbmQiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJSZWZlcmVuY2VFcnJvciIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwiX2luaGVyaXRzIiwiX3NldFByb3RvdHlwZU9mIiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJMaW5rIiwiX3JlcXVpcmUyIiwiQnV0dG9uIiwiRm9ybSIsIkhlYWRlciIsIkljb24iLCJJbnB1dCIsIkxhYmVsIiwiTWVzc2FnZSIsIlNlZ21lbnQiLCJUYWJsZSIsIl9yZXF1aXJlMyIsImNyZWF0ZUxpZ2h0bmluZ0ludm9pY2UiLCJkZWNvZGVMaWdodG5pbmdJbnZvaWNlIiwiZmV0Y2hMaWdodG5pbmdDaGFubmVscyIsImZldGNoTGlnaHRuaW5nU3RhdHVzIiwibG9hZFVwc3RyZWFtU2V0dGluZ3MiLCJwYXlMaWdodG5pbmdJbnZvaWNlIiwiTGlnaHRuaW5nSG9tZSIsIl9SZWFjdCRDb21wb25lbnQiLCJwcm9wcyIsIl90aGlzIiwic3RhdGUiLCJsb2FkaW5nIiwidXBzdHJlYW0iLCJzdGF0dXMiLCJjaGFubmVscyIsImludm9pY2VBbW91bnRTYXRzIiwiaW52b2ljZU1lbW8iLCJpbnZvaWNlSW5wdXQiLCJyZXN1bHQiLCJfY29tcG9uZW50RGlkTW91bnQiLCJfY2FsbGVlIiwiX2NvbnRleHQiLCJyZWZyZXNoIiwiY29tcG9uZW50RGlkTW91bnQiLCJfcmVmcmVzaCIsIl9jYWxsZWUyIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsImNoYW5uZWxMaXN0IiwiX2NvbnRleHQyIiwic2V0U3RhdGUiLCJhbGwiLCJfY3JlYXRlSW52b2ljZSIsIl9jYWxsZWUzIiwiYW1vdW50U2F0cyIsImlkZW50aXR5Iiwib3V0IiwiYm9sdDExIiwiX3QiLCJfY29udGV4dDMiLCJNYXRoIiwicm91bmQiLCJpc0Zpbml0ZSIsImVycm9yIiwibWVtbyIsInBheW1lbnRfcmVxdWVzdCIsImludm9pY2UiLCJ0cmltIiwibWVzc2FnZSIsImNyZWF0ZUludm9pY2UiLCJfZGVjb2RlSW52b2ljZSIsIl9jYWxsZWU0IiwiX3QyIiwiX2NvbnRleHQ0IiwiZGVjb2RlSW52b2ljZSIsIl9wYXlJbnZvaWNlIiwiX2NhbGxlZTUiLCJfdDMiLCJfY29udGV4dDUiLCJwYXlJbnZvaWNlIiwicmVuZGVyIiwiX3RoaXMyIiwicyIsImF2YWlsYWJsZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJnYXAiLCJmbGV4V3JhcCIsImFzIiwidG8iLCJiYXNpYyIsInNpemUiLCJtYXJnaW4iLCJDb250ZW50Iiwib25DbGljayIsIm1hcmdpblRvcCIsImNvbG9yIiwiaG9yaXpvbnRhbCIsIm5vZGUiLCJhbGlhcyIsImNvbXBhY3QiLCJjZWxsZWQiLCJSb3ciLCJIZWFkZXJDZWxsIiwiQm9keSIsIm1hcCIsImNvbmNhdCIsInNob3J0X2NoYW5uZWxfaWQiLCJpZCIsIkNlbGwiLCJwZWVyX2lkIiwiZGVzdGluYXRpb24iLCJjYXBhY2l0eSIsIkdyb3VwIiwid2lkdGhzIiwiRmllbGQiLCJ0eXBlIiwibWluIiwic3RlcCIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJ0YXJnZXQiLCJkaXNhYmxlZCIsIlRleHRBcmVhIiwicm93cyIsIm5lZ2F0aXZlIiwicG9zaXRpdmUiLCJ3aGl0ZVNwYWNlIiwid29yZEJyZWFrIiwiSlNPTiIsInN0cmluZ2lmeSIsIkNvbXBvbmVudCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/LightningHome.js\n\n}')},"./components/NotificationsHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Segment = _require2.Segment;\nvar InAppNotificationsList = __webpack_require__(/*! ./InAppNotificationsList */ "./components/InAppNotificationsList.js");\nvar _require3 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require3.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require3.subscribeHubUiFeatureFlags;\n\n/**\n * In-app toasts only (compact). Hub log + chat live on `/activities`.\n */\nfunction NotificationsHome(props) {\n var _React$useState = React.useState(0),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n flagTick = _React$useState2[0],\n setFlagTick = _React$useState2[1];\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setFlagTick(function (n) {\n return n + 1;\n });\n });\n }, []);\n void flagTick;\n var uf = loadHubUiFeatureFlags();\n return /*#__PURE__*/React.createElement("fabric-hub-notifications", {\n "class": "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.35em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n as: Link,\n to: "/",\n size: "small",\n icon: true,\n labelPosition: "left",\n "aria-label": "Back to home"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Home"), uf.activities ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/activities",\n basic: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n title: "Hub message log, chat, blocks"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "comments",\n "aria-hidden": "true"\n }), "Activity log") : null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n as: Link,\n to: "/settings/security",\n size: "small",\n icon: true,\n labelPosition: "left",\n "aria-label": "Security, delegation tokens, and session audit"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield alternate",\n "aria-hidden": "true"\n }), "Security & delegation"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n "aria-label": "Bitcoin dashboard"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin",\n "aria-hidden": "true"\n }), "Bitcoin")), /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "notifications-page-heading",\n "aria-describedby": "notifications-page-summary"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "notifications-page-heading",\n style: {\n marginTop: \'0.75em\'\n }\n }, "Notifications"), /*#__PURE__*/React.createElement("p", {\n id: "notifications-page-summary",\n style: {\n color: \'#666\',\n marginBottom: \'0.65em\',\n lineHeight: 1.45\n }\n }, "Short-lived ", /*#__PURE__*/React.createElement("strong", null, "wallet"), ", ", /*#__PURE__*/React.createElement("strong", null, "Payjoin"), ", and hub ", /*#__PURE__*/React.createElement("strong", null, "toasts"), " (same list as the bell in the top bar). The full ", /*#__PURE__*/React.createElement("strong", null, "hub message log"), ", ", /*#__PURE__*/React.createElement("strong", null, "chat"), ", and ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin block"), " stream is on the", \' \', uf.activities ? /*#__PURE__*/React.createElement(Link, {\n to: "/activities"\n }, "activity log") : /*#__PURE__*/React.createElement("span", null, "activity log (enable Activities in Admin \\u2192 Feature visibility)"), "."), /*#__PURE__*/React.createElement(InAppNotificationsList, {\n uf: uf,\n showHeader: false\n }))));\n}\nmodule.exports = NotificationsHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL05vdGlmaWNhdGlvbnNIb21lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLGVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBQyxlQUFBLENBQUFGLENBQUEsS0FBQUcscUJBQUEsQ0FBQUgsQ0FBQSxFQUFBQyxDQUFBLEtBQUFHLDJCQUFBLENBQUFKLENBQUEsRUFBQUMsQ0FBQSxLQUFBSSxnQkFBQTtBQUFBLFNBQUFBLGlCQUFBLGNBQUFDLFNBQUE7QUFBQSxTQUFBRiw0QkFBQUosQ0FBQSxFQUFBTyxDQUFBLFFBQUFQLENBQUEsMkJBQUFBLENBQUEsU0FBQVEsaUJBQUEsQ0FBQVIsQ0FBQSxFQUFBTyxDQUFBLE9BQUFFLENBQUEsTUFBQUMsUUFBQSxDQUFBQyxJQUFBLENBQUFYLENBQUEsRUFBQVksS0FBQSw2QkFBQUgsQ0FBQSxJQUFBVCxDQUFBLENBQUFhLFdBQUEsS0FBQUosQ0FBQSxHQUFBVCxDQUFBLENBQUFhLFdBQUEsQ0FBQUMsSUFBQSxhQUFBTCxDQUFBLGNBQUFBLENBQUEsR0FBQU0sS0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLG9CQUFBUyxDQUFBLCtDQUFBUSxJQUFBLENBQUFSLENBQUEsSUFBQUQsaUJBQUEsQ0FBQVIsQ0FBQSxFQUFBTyxDQUFBO0FBQUEsU0FBQUMsa0JBQUFSLENBQUEsRUFBQU8sQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQVAsQ0FBQSxDQUFBa0IsTUFBQSxNQUFBWCxDQUFBLEdBQUFQLENBQUEsQ0FBQWtCLE1BQUEsWUFBQWpCLENBQUEsTUFBQWtCLENBQUEsR0FBQUosS0FBQSxDQUFBUixDQUFBLEdBQUFOLENBQUEsR0FBQU0sQ0FBQSxFQUFBTixDQUFBLElBQUFrQixDQUFBLENBQUFsQixDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxVQUFBa0IsQ0FBQTtBQUFBLFNBQUFoQixzQkFBQUgsQ0FBQSxFQUFBb0IsQ0FBQSxRQUFBWCxDQUFBLFdBQUFULENBQUEsZ0NBQUFx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QUFvRSxDQUFDLEVBQUMsR0FFekksQ0FBQyxlQUNKdEIsS0FBQSxDQUFBc0IsYUFBQSxDQUFDYixzQkFBc0I7SUFBQ1ksRUFBRSxFQUFFQSxFQUFHO0lBQUNvQixVQUFVLEVBQUU7RUFBTSxDQUFFLENBQzdDLENBQ0YsQ0FDZSxDQUFDO0FBRS9CO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHOUIsaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL05vdGlmaWNhdGlvbnNIb21lLmpzPzAzOTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHsgQnV0dG9uLCBIZWFkZXIsIEljb24sIFNlZ21lbnQgfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCBJbkFwcE5vdGlmaWNhdGlvbnNMaXN0ID0gcmVxdWlyZSgnLi9JbkFwcE5vdGlmaWNhdGlvbnNMaXN0Jyk7XG5jb25zdCB7XG4gIGxvYWRIdWJVaUZlYXR1cmVGbGFncyxcbiAgc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3Ncbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViVWlGZWF0dXJlRmxhZ3MnKTtcblxuLyoqXG4gKiBJbi1hcHAgdG9hc3RzIG9ubHkgKGNvbXBhY3QpLiBIdWIgbG9nICsgY2hhdCBsaXZlIG9uIGAvYWN0aXZpdGllc2AuXG4gKi9cbmZ1bmN0aW9uIE5vdGlmaWNhdGlvbnNIb21lIChwcm9wcykge1xuICBjb25zdCBbZmxhZ1RpY2ssIHNldEZsYWdUaWNrXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4gc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MoKCkgPT4gc2V0RmxhZ1RpY2soKG4pID0+IG4gKyAxKSksIFtdKTtcbiAgdm9pZCBmbGFnVGljaztcbiAgY29uc3QgdWYgPSBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcblxuICByZXR1cm4gKFxuICAgIDxmYWJyaWMtaHViLW5vdGlmaWNhdGlvbnMgY2xhc3M9XCJmYWRlLWluXCI+XG4gICAgICA8U2VnbWVudD5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuMzVlbScsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgIDxCdXR0b24gYmFzaWMgYXM9e0xpbmt9IHRvPVwiL1wiIHNpemU9XCJzbWFsbFwiIGljb24gbGFiZWxQb3NpdGlvbj1cImxlZnRcIiBhcmlhLWxhYmVsPVwiQmFjayB0byBob21lXCI+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwiYXJyb3cgbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICBIb21lXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAge3VmLmFjdGl2aXRpZXMgPyAoXG4gICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9hY3Rpdml0aWVzXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiIHRpdGxlPVwiSHViIG1lc3NhZ2UgbG9nLCBjaGF0LCBibG9ja3NcIj5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvbW1lbnRzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgQWN0aXZpdHkgbG9nXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICB0bz1cIi9zZXR0aW5ncy9zZWN1cml0eVwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlY3VyaXR5LCBkZWxlZ2F0aW9uIHRva2VucywgYW5kIHNlc3Npb24gYXVkaXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzaGllbGQgYWx0ZXJuYXRlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIFNlY3VyaXR5ICZhbXA7IGRlbGVnYXRpb25cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiIGFyaWEtbGFiZWw9XCJCaXRjb2luIGRhc2hib2FyZFwiPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgQml0Y29pblxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8c2VjdGlvbiBhcmlhLWxhYmVsbGVkYnk9XCJub3RpZmljYXRpb25zLXBhZ2UtaGVhZGluZ1wiIGFyaWEtZGVzY3JpYmVkYnk9XCJub3RpZmljYXRpb25zLXBhZ2Utc3VtbWFyeVwiPlxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoMlwiIGlkPVwibm90aWZpY2F0aW9ucy1wYWdlLWhlYWRpbmdcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nIH19PlxuICAgICAgICAgICAgTm90aWZpY2F0aW9uc1xuICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgIDxwIGlkPVwibm90aWZpY2F0aW9ucy1wYWdlLXN1bW1hcnlcIiBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjY1ZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgU2hvcnQtbGl2ZWQgPHN0cm9uZz53YWxsZXQ8L3N0cm9uZz4sIDxzdHJvbmc+UGF5am9pbjwvc3Ryb25nPiwgYW5kIGh1YiA8c3Ryb25nPnRvYXN0czwvc3Ryb25nPiAoc2FtZSBsaXN0IGFzIHRoZSBiZWxsIGluIHRoZSB0b3AgYmFyKS5cbiAgICAgICAgICAgIFRoZSBmdWxsIDxzdHJvbmc+aHViIG1lc3NhZ2UgbG9nPC9zdHJvbmc+LCA8c3Ryb25nPmNoYXQ8L3N0cm9uZz4sIGFuZCA8c3Ryb25nPkJpdGNvaW4gYmxvY2s8L3N0cm9uZz4gc3RyZWFtIGlzIG9uIHRoZXsnICd9XG4gICAgICAgICAgICB7dWYuYWN0aXZpdGllcyA/IDxMaW5rIHRvPVwiL2FjdGl2aXRpZXNcIj5hY3Rpdml0eSBsb2c8L0xpbms+IDogPHNwYW4+YWN0aXZpdHkgbG9nIChlbmFibGUgQWN0aXZpdGllcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5KTwvc3Bhbj59XG4gICAgICAgICAgICAuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxJbkFwcE5vdGlmaWNhdGlvbnNMaXN0IHVmPXt1Zn0gc2hvd0hlYWRlcj17ZmFsc2V9IC8+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvU2VnbWVudD5cbiAgICA8L2ZhYnJpYy1odWItbm90aWZpY2F0aW9ucz5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBOb3RpZmljYXRpb25zSG9tZTtcbiJdLCJuYW1lcyI6WyJfc2xpY2VkVG9BcnJheSIsInIiLCJlIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInQiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJsZW5ndGgiLCJuIiwibCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaSIsInUiLCJmIiwibyIsIm5leHQiLCJPYmplY3QiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiaXNBcnJheSIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTGluayIsIl9yZXF1aXJlMiIsIkJ1dHRvbiIsIkhlYWRlciIsIkljb24iLCJTZWdtZW50IiwiSW5BcHBOb3RpZmljYXRpb25zTGlzdCIsIl9yZXF1aXJlMyIsImxvYWRIdWJVaUZlYXR1cmVGbGFncyIsInN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzIiwiTm90aWZpY2F0aW9uc0hvbWUiLCJwcm9wcyIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsImZsYWdUaWNrIiwic2V0RmxhZ1RpY2siLCJ1c2VFZmZlY3QiLCJ1ZiIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsImRpc3BsYXkiLCJmbGV4V3JhcCIsImdhcCIsImFsaWduSXRlbXMiLCJiYXNpYyIsImFzIiwidG8iLCJzaXplIiwiaWNvbiIsImxhYmVsUG9zaXRpb24iLCJhY3Rpdml0aWVzIiwidGl0bGUiLCJpZCIsIm1hcmdpblRvcCIsImNvbG9yIiwibWFyZ2luQm90dG9tIiwibGluZUhlaWdodCIsInNob3dIZWFkZXIiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/NotificationsHome.js\n\n}')},"./components/Onboarding.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * First-time setup flow for Hub.\n * Creates and signs an admin token, sets initial configuration.\n * Onboarding component for first-time Hub setup.\n */\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Modal = _require.Modal,\n Button = _require.Button,\n Header = _require.Header,\n Icon = _require.Icon,\n Form = _require.Form,\n Input = _require.Input,\n Message = _require.Message,\n Segment = _require.Segment,\n Select = _require.Select,\n Checkbox = _require.Checkbox;\nvar BITCOIN_NETWORKS = [{\n key: \'regtest\',\n value: \'regtest\',\n text: \'Regtest (local dev)\',\n rpcPort: 18443\n}, {\n key: \'signet\',\n value: \'signet\',\n text: \'Signet (stable testing)\',\n rpcPort: 38332\n}, {\n key: \'testnet\',\n value: \'testnet\',\n text: \'Testnet (public testing)\',\n rpcPort: 18332\n}, {\n key: \'mainnet\',\n value: \'mainnet\',\n text: \'Mainnet (production)\',\n rpcPort: 8332\n}];\nvar Onboarding = /*#__PURE__*/function (_React$Component) {\n function Onboarding(props) {\n var _BITCOIN_NETWORKS$fin, _BITCOIN_NETWORKS$fin2;\n var _this;\n _classCallCheck(this, Onboarding);\n _this = _callSuper(this, Onboarding, [props]);\n _defineProperty(_this, "handleComplete", /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var baseUrl, needsSecret, secretTrim, response, text, errBody, result, message, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n _this.setState({\n saving: true,\n error: null\n });\n _context.p = 1;\n baseUrl = _this.getBaseUrl();\n needsSecret = !!_this.props.requiresSetupUiSecret;\n secretTrim = String(_this.state.setupUiSecret || \'\').trim();\n if (!(needsSecret && !secretTrim)) {\n _context.n = 2;\n break;\n }\n throw new Error(\'Enter the operator setup secret (FABRIC_HUB_SETUP_UI_SECRET).\');\n case 2:\n _context.n = 3;\n return fetch("".concat(baseUrl, "/settings"), {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n \'Accept\': \'application/json\'\n },\n body: JSON.stringify(_objectSpread(_objectSpread(_objectSpread({}, needsSecret ? {\n setupUiSecret: secretTrim,\n SETUP_UI_SECRET: secretTrim\n } : {}), {}, {\n NODE_NAME: _this.state.nodeName.trim() || \'Hub\',\n NODE_PERSONALITY: JSON.stringify([\'helpful\']),\n NODE_TEMPERATURE: 0,\n NODE_GOALS: JSON.stringify([]),\n BITCOIN_NETWORK: _this.state.bitcoinNetwork,\n BITCOIN_MANAGED: _this.state.bitcoinManaged,\n DISK_ALLOCATION_MB: Math.max(1, parseInt(_this.state.diskAllocationMb, 10) || 1024),\n COST_PER_BYTE_SATS: _this.state.costPerByteSats.trim() ? Math.max(0, parseFloat(_this.state.costPerByteSats) || 0) : 0.01\n }, _this.state.bitcoinManaged ? {} : {\n BITCOIN_HOST: _this.state.bitcoinHost,\n BITCOIN_RPC_PORT: _this.state.bitcoinRpcPort,\n BITCOIN_USERNAME: _this.state.bitcoinUsername,\n BITCOIN_PASSWORD: _this.state.bitcoinPassword\n }), {}, {\n LIGHTNING_MANAGED: _this.state.lightningManaged\n }, _this.state.lightningManaged ? {} : {\n LIGHTNING_SOCKET: _this.state.lightningSocket\n }))\n });\n case 3:\n response = _context.v;\n _context.n = 4;\n return response.text();\n case 4:\n text = _context.v;\n if (response.ok) {\n _context.n = 5;\n break;\n }\n errBody = {};\n if (!text.trim().startsWith(\'<\')) {\n try {\n errBody = JSON.parse(text);\n } catch (_) {}\n }\n throw new Error(errBody.message || errBody.error || "Setup failed: ".concat(response.status));\n case 5:\n if (!text.trim().startsWith(\'<\')) {\n _context.n = 6;\n break;\n }\n throw new Error(\'Server returned HTML instead of JSON. Ensure the Hub is running (npm start) and the proxy target is correct.\');\n case 6:\n result = JSON.parse(text);\n if (_this.props.onConfigurationComplete) {\n _this.props.onConfigurationComplete({\n token: result.token,\n configured: result.configured,\n expiresAt: result.expiresAt\n });\n }\n _this.setState({\n open: false,\n saving: false\n });\n _context.n = 8;\n break;\n case 7:\n _context.p = 7;\n _t = _context.v;\n message = _t && _t.message ? _t.message : \'Setup failed\';\n if (message.includes(\'fetch\') || message.includes(\'Failed to fetch\') || message.includes(\'NetworkError\')) {\n message = \'Cannot reach the Hub. Ensure the server is running (npm start) and try again.\';\n }\n _this.setState({\n saving: false,\n error: message\n });\n case 8:\n return _context.a(2);\n }\n }, _callee, null, [[1, 7]]);\n })));\n _this.state = {\n open: true,\n nodeName: props.nodeName || \'Hub\',\n bitcoinNetwork: props.bitcoinNetwork || \'regtest\',\n bitcoinManaged: props.bitcoinManaged !== false,\n bitcoinHost: props.bitcoinHost || \'127.0.0.1\',\n bitcoinRpcPort: props.bitcoinRpcPort || String((_BITCOIN_NETWORKS$fin = (_BITCOIN_NETWORKS$fin2 = BITCOIN_NETWORKS.find(function (n) {\n return n.value === (props.bitcoinNetwork || \'regtest\');\n })) === null || _BITCOIN_NETWORKS$fin2 === void 0 ? void 0 : _BITCOIN_NETWORKS$fin2.rpcPort) !== null && _BITCOIN_NETWORKS$fin !== void 0 ? _BITCOIN_NETWORKS$fin : 18443),\n bitcoinUsername: props.bitcoinUsername || \'\',\n bitcoinPassword: props.bitcoinPassword || \'\',\n lightningManaged: props.lightningManaged !== false,\n lightningSocket: props.lightningSocket || \'\',\n diskAllocationMb: props.diskAllocationMb || \'1024\',\n costPerByteSats: props.costPerByteSats != null && String(props.costPerByteSats).trim() !== \'\' ? String(props.costPerByteSats) : \'0.01\',\n saving: false,\n error: null,\n setupUiSecret: \'\'\n };\n return _this;\n }\n _inherits(Onboarding, _React$Component);\n return _createClass(Onboarding, [{\n key: "getBaseUrl",\n value: function getBaseUrl() {\n if (typeof window !== \'undefined\' && window.location) {\n var protocol = window.location.protocol || \'http:\';\n var host = window.location.hostname || \'localhost\';\n var port = window.location.port || (protocol === \'https:\' ? \'443\' : \'80\');\n return "".concat(protocol, "//").concat(host).concat(port === \'80\' || port === \'443\' ? \'\' : \':\' + port);\n }\n return \'http://localhost:8080\';\n }\n }, {\n key: "render",\n value: function render() {\n var _this2 = this,\n _BITCOIN_NETWORKS$fin3,\n _BITCOIN_NETWORKS$fin4;\n var _this$state = this.state,\n open = _this$state.open,\n nodeName = _this$state.nodeName,\n saving = _this$state.saving,\n error = _this$state.error;\n return /*#__PURE__*/React.createElement(Modal, {\n "data-testid": "hub-onboarding-modal",\n open: open,\n onClose: function onClose() {},\n size: "small",\n closeIcon: false\n }, /*#__PURE__*/React.createElement(Modal.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "settings"\n }), "First-Time Setup"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement(Segment, {\n basic: true\n }, /*#__PURE__*/React.createElement(Message, {\n info: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Welcome to Hub"), /*#__PURE__*/React.createElement("p", null, "Configure your node to get started. This creates an admin token (stored in your browser only) and sets initial parameters. The admin token authenticates privileged operations like block generation on regtest.")), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Node name"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "e.g. Hub, My Node",\n value: nodeName,\n onChange: function onChange(e) {\n return _this2.setState({\n nodeName: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Bitcoin network"), /*#__PURE__*/React.createElement(Select, {\n options: BITCOIN_NETWORKS,\n value: this.state.bitcoinNetwork,\n onChange: function onChange(e, _ref2) {\n var value = _ref2.value;\n var net = BITCOIN_NETWORKS.find(function (n) {\n return n.value === value;\n });\n _this2.setState({\n bitcoinNetwork: value,\n bitcoinRpcPort: net && net.rpcPort ? String(net.rpcPort) : _this2.state.bitcoinRpcPort\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(Checkbox, {\n label: "Launch managed Bitcoin node (bitcoind)",\n "data-testid": "hub-onboarding-bitcoin-managed",\n checked: this.state.bitcoinManaged,\n onChange: function onChange(e, _ref3) {\n var checked = _ref3.checked;\n return _this2.setState({\n bitcoinManaged: !!checked\n });\n }\n })), !this.state.bitcoinManaged && /*#__PURE__*/React.createElement(Segment, {\n basic: true,\n style: {\n marginLeft: \'1.5em\',\n paddingTop: 0\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Bitcoin RPC host"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "127.0.0.1",\n value: this.state.bitcoinHost,\n onChange: function onChange(e) {\n return _this2.setState({\n bitcoinHost: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Bitcoin RPC port"), /*#__PURE__*/React.createElement(Input, {\n placeholder: (_BITCOIN_NETWORKS$fin3 = (_BITCOIN_NETWORKS$fin4 = BITCOIN_NETWORKS.find(function (n) {\n return n.value === _this2.state.bitcoinNetwork;\n })) === null || _BITCOIN_NETWORKS$fin4 === void 0 ? void 0 : _BITCOIN_NETWORKS$fin4.rpcPort) !== null && _BITCOIN_NETWORKS$fin3 !== void 0 ? _BITCOIN_NETWORKS$fin3 : 8332,\n type: "number",\n value: this.state.bitcoinRpcPort,\n onChange: function onChange(e) {\n return _this2.setState({\n bitcoinRpcPort: e.target.value\n });\n }\n }), /*#__PURE__*/React.createElement("small", {\n style: {\n display: \'block\',\n marginTop: \'0.25em\',\n color: \'#666\'\n }\n }, "Default: regtest 18443, signet 38332, testnet 18332, mainnet 8332")), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Bitcoin RPC username"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "rpcuser",\n value: this.state.bitcoinUsername,\n onChange: function onChange(e) {\n return _this2.setState({\n bitcoinUsername: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Bitcoin RPC password"), /*#__PURE__*/React.createElement(Input, {\n type: "password",\n placeholder: "rpcpassword",\n value: this.state.bitcoinPassword,\n onChange: function onChange(e) {\n return _this2.setState({\n bitcoinPassword: e.target.value\n });\n }\n }))), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Disk space allocation (MB)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "1",\n placeholder: "1024",\n value: this.state.diskAllocationMb,\n onChange: function onChange(e) {\n return _this2.setState({\n diskAllocationMb: e.target.value\n });\n }\n }), /*#__PURE__*/React.createElement("small", {\n style: {\n display: \'block\',\n marginTop: \'0.25em\',\n color: \'#666\'\n }\n }, "Maximum storage for documents (used for HTLC purchase limits).")), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Cost per byte (sats)"), /*#__PURE__*/React.createElement(Input, {\n type: "number",\n min: "0",\n step: "0.000001",\n placeholder: "0.01",\n value: this.state.costPerByteSats,\n onChange: function onChange(e) {\n return _this2.setState({\n costPerByteSats: e.target.value\n });\n }\n }), /*#__PURE__*/React.createElement("small", {\n style: {\n display: \'block\',\n marginTop: \'0.25em\',\n color: \'#666\'\n }\n }, "Per-byte floor for document serving (HTLC purchase price). 0.01 \\u2248 10k sats/MB. ~0.000001 sat/byte \\u2248 1 sat/MB; typical cloud egress ~$0.05/GB. Leave empty for no floor.")), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement(Checkbox, {\n "data-testid": "hub-onboarding-lightning-managed",\n label: "Launch managed Lightning node (lightningd)",\n checked: this.state.lightningManaged,\n onChange: function onChange(e, _ref4) {\n var checked = _ref4.checked;\n return _this2.setState({\n lightningManaged: !!checked\n });\n }\n }), /*#__PURE__*/React.createElement("small", {\n style: {\n display: \'block\',\n marginTop: \'0.25em\',\n color: \'#666\'\n }\n }, "Optional. Requires managed Bitcoin. Run with FABRIC_CLEAN_ALICE=1 if you see socket errors after a prior run.")), !this.state.lightningManaged && /*#__PURE__*/React.createElement(Segment, {\n basic: true,\n style: {\n marginLeft: \'1.5em\',\n paddingTop: 0\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Lightning RPC socket path"), /*#__PURE__*/React.createElement(Input, {\n placeholder: "/path/to/lightningd.sock",\n value: this.state.lightningSocket,\n onChange: function onChange(e) {\n return _this2.setState({\n lightningSocket: e.target.value\n });\n }\n }), /*#__PURE__*/React.createElement("small", {\n style: {\n display: \'block\',\n marginTop: \'0.25em\',\n color: \'#666\'\n }\n }, "Full path to lightningd RPC socket (e.g. ~/.lightning/regtest/lightningd.sock)"))), this.state.bitcoinNetwork === \'regtest\' && this.state.bitcoinManaged && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small"\n }, "Regtest runs managed bitcoind automatically. Lightning (lightningd) is optional and requires bitcoind."), (this.state.bitcoinNetwork === \'signet\' || this.state.bitcoinNetwork === \'testnet\') && this.state.bitcoinManaged && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small"\n }, "Managed signet/testnet runs bitcoind locally. Signet has predictable ~1 min blocks; testnet uses PoW and can be unstable."), this.props.requiresSetupUiSecret ? /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", null, "Operator setup secret"), /*#__PURE__*/React.createElement(Input, {\n type: "password",\n autoComplete: "off",\n placeholder: "Same as FABRIC_HUB_SETUP_UI_SECRET on the server",\n value: this.state.setupUiSecret,\n onChange: function onChange(e) {\n return _this2.setState({\n setupUiSecret: e.target.value\n });\n }\n }), /*#__PURE__*/React.createElement("small", {\n style: {\n display: \'block\',\n marginTop: \'0.25em\',\n color: \'#666\'\n }\n }, "Required to authorize first-time configuration when the hub is protected with an environment secret.")) : null), error && /*#__PURE__*/React.createElement(Message, {\n negative: true\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Error"), /*#__PURE__*/React.createElement("p", null, error)))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n "data-testid": "hub-onboarding-complete-setup",\n primary: true,\n loading: saving,\n disabled: saving,\n onClick: this.handleComplete\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check"\n }), "Complete Setup")));\n }\n }]);\n}(React.Component);\nmodule.exports = Onboarding;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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VHhDQyxNQUFNLENBQUNDLE9BQU8sR0FBRzNILFVBQVUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvT25ib2FyZGluZy5qcz8yYTBmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBGaXJzdC10aW1lIHNldHVwIGZsb3cgZm9yIEh1Yi5cbiAqIENyZWF0ZXMgYW5kIHNpZ25zIGFuIGFkbWluIHRva2VuLCBzZXRzIGluaXRpYWwgY29uZmlndXJhdGlvbi5cbiAqIE9uYm9hcmRpbmcgY29tcG9uZW50IGZvciBmaXJzdC10aW1lIEh1YiBzZXR1cC5cbiAqL1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7XG4gIE1vZGFsLFxuICBCdXR0b24sXG4gIEhlYWRlcixcbiAgSWNvbixcbiAgRm9ybSxcbiAgSW5wdXQsXG4gIE1lc3NhZ2UsXG4gIFNlZ21lbnQsXG4gIFNlbGVjdCxcbiAgQ2hlY2tib3hcbn0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuXG5jb25zdCBCSVRDT0lOX05FVFdPUktTID0gW1xuICB7IGtleTogJ3JlZ3Rlc3QnLCB2YWx1ZTogJ3JlZ3Rlc3QnLCB0ZXh0OiAnUmVndGVzdCAobG9jYWwgZGV2KScsIHJwY1BvcnQ6IDE4NDQzIH0sXG4gIHsga2V5OiAnc2lnbmV0JywgdmFsdWU6ICdzaWduZXQnLCB0ZXh0OiAnU2lnbmV0IChzdGFibGUgdGVzdGluZyknLCBycGNQb3J0OiAzODMzMiB9LFxuICB7IGtleTogJ3Rlc3RuZXQnLCB2YWx1ZTogJ3Rlc3RuZXQnLCB0ZXh0OiAnVGVzdG5ldCAocHVibGljIHRlc3RpbmcpJywgcnBjUG9ydDogMTgzMzIgfSxcbiAgeyBrZXk6ICdtYWlubmV0JywgdmFsdWU6ICdtYWlubmV0JywgdGV4dDogJ01haW5uZXQgKHByb2R1Y3Rpb24pJywgcnBjUG9ydDogODMzMiB9XG5dO1xuXG5jbGFzcyBPbmJvYXJkaW5nIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBvcGVuOiB0cnVlLFxuICAgICAgbm9kZU5hbWU6IHByb3BzLm5vZGVOYW1lIHx8ICdIdWInLFxuICAgICAgYml0Y29pbk5ldHdvcms6IHByb3BzLmJpdGNvaW5OZXR3b3JrIHx8ICdyZWd0ZXN0JyxcbiAgICAgIGJpdGNvaW5NYW5hZ2VkOiBwcm9wcy5iaXRjb2luTWFuYWdlZCAhPT0gZmFsc2UsXG4gICAgICBiaXRjb2luSG9zdDogcHJvcHMuYml0Y29pbkhvc3QgfHwgJzEyNy4wLjAuMScsXG4gICAgICBiaXRjb2luUnBjUG9ydDogcHJvcHMuYml0Y29pblJwY1BvcnQgfHwgU3RyaW5nKEJJVENPSU5fTkVUV09SS1MuZmluZCgobikgPT4gbi52YWx1ZSA9PT0gKHByb3BzLmJpdGNvaW5OZXR3b3JrIHx8ICdyZWd0ZXN0JykpPy5ycGNQb3J0ID8/IDE4NDQzKSxcbiAgICAgIGJpdGNvaW5Vc2VybmFtZTogcHJvcHMuYml0Y29pblVzZXJuYW1lIHx8ICcnLFxuICAgICAgYml0Y29pblBhc3N3b3JkOiBwcm9wcy5iaXRjb2luUGFzc3dvcmQgfHwgJycsXG4gICAgICBsaWdodG5pbmdNYW5hZ2VkOiBwcm9wcy5saWdodG5pbmdNYW5hZ2VkICE9PSBmYWxzZSxcbiAgICAgIGxpZ2h0bmluZ1NvY2tldDogcHJvcHMubGlnaHRuaW5nU29ja2V0IHx8ICcnLFxuICAgICAgZGlza0FsbG9jYXRpb25NYjogcHJvcHMuZGlza0FsbG9jYXRpb25NYiB8fCAnMTAyNCcsXG4gICAgICBjb3N0UGVyQnl0ZVNhdHM6IChwcm9wcy5jb3N0UGVyQnl0ZVNhdHMgIT0gbnVsbCAmJiBTdHJpbmcocHJvcHMuY29zdFBlckJ5dGVTYXRzKS50cmltKCkgIT09ICcnKSA/IFN0cmluZyhwcm9wcy5jb3N0UGVyQnl0ZVNhdHMpIDogJzAuMDEnLFxuICAgICAgc2F2aW5nOiBmYWxzZSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgc2V0dXBVaVNlY3JldDogJydcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZVVybCAoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhdGlvbikge1xuICAgICAgY29uc3QgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgfHwgJ2h0dHA6JztcbiAgICAgIGNvbnN0IGhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgfHwgJ2xvY2FsaG9zdCc7XG4gICAgICBjb25zdCBwb3J0ID0gd2luZG93LmxvY2F0aW9uLnBvcnQgfHwgKHByb3RvY29sID09PSAnaHR0cHM6JyA/ICc0NDMnIDogJzgwJyk7XG4gICAgICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3R9JHtwb3J0ID09PSAnODAnIHx8IHBvcnQgPT09ICc0NDMnID8gJycgOiAnOicgKyBwb3J0fWA7XG4gICAgfVxuICAgIHJldHVybiAnaHR0cDovL2xvY2FsaG9zdDo4MDgwJztcbiAgfVxuXG4gIGhhbmRsZUNvbXBsZXRlID0gYXN5bmMgKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBzYXZpbmc6IHRydWUsIGVycm9yOiBudWxsIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5nZXRCYXNlVXJsKCk7XG4gICAgICBjb25zdCBuZWVkc1NlY3JldCA9ICEhdGhpcy5wcm9wcy5yZXF1aXJlc1NldHVwVWlTZWNyZXQ7XG4gICAgICBjb25zdCBzZWNyZXRUcmltID0gU3RyaW5nKHRoaXMuc3RhdGUuc2V0dXBVaVNlY3JldCB8fCAnJykudHJpbSgpO1xuICAgICAgaWYgKG5lZWRzU2VjcmV0ICYmICFzZWNyZXRUcmltKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW50ZXIgdGhlIG9wZXJhdG9yIHNldHVwIHNlY3JldCAoRkFCUklDX0hVQl9TRVRVUF9VSV9TRUNSRVQpLicpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS9zZXR0aW5nc2AsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIC4uLihuZWVkc1NlY3JldCA/IHsgc2V0dXBVaVNlY3JldDogc2VjcmV0VHJpbSwgU0VUVVBfVUlfU0VDUkVUOiBzZWNyZXRUcmltIH0gOiB7fSksXG4gICAgICAgICAgTk9ERV9OQU1FOiB0aGlzLnN0YXRlLm5vZGVOYW1lLnRyaW0oKSB8fCAnSHViJyxcbiAgICAgICAgICBOT0RFX1BFUlNPTkFMSVRZOiBKU09OLnN0cmluZ2lmeShbJ2hlbHBmdWwnXSksXG4gICAgICAgICAgTk9ERV9URU1QRVJBVFVSRTogMCxcbiAgICAgICAgICBOT0RFX0dPQUxTOiBKU09OLnN0cmluZ2lmeShbXSksXG4gICAgICAgICAgQklUQ09JTl9ORVRXT1JLOiB0aGlzLnN0YXRlLmJpdGNvaW5OZXR3b3JrLFxuICAgICAgICAgIEJJVENPSU5fTUFOQUdFRDogdGhpcy5zdGF0ZS5iaXRjb2luTWFuYWdlZCxcbiAgICAgICAgICBESVNLX0FMTE9DQVRJT05fTUI6IE1hdGgubWF4KDEsIHBhcnNlSW50KHRoaXMuc3RhdGUuZGlza0FsbG9jYXRpb25NYiwgMTApIHx8IDEwMjQpLFxuICAgICAgICAgIENPU1RfUEVSX0JZVEVfU0FUUzogdGhpcy5zdGF0ZS5jb3N0UGVyQnl0ZVNhdHMudHJpbSgpXG4gICAgICAgICAgICA/IE1hdGgubWF4KDAsIHBhcnNlRmxvYXQodGhpcy5zdGF0ZS5jb3N0UGVyQnl0ZVNhdHMpIHx8IDApXG4gICAgICAgICAgICA6IDAuMDEsXG4gICAgICAgICAgLi4uKHRoaXMuc3RhdGUuYml0Y29pbk1hbmFnZWQgPyB7fSA6IHtcbiAgICAgICAgICAgIEJJVENPSU5fSE9TVDogdGhpcy5zdGF0ZS5iaXRjb2luSG9zdCxcbiAgICAgICAgICAgIEJJVENPSU5fUlBDX1BPUlQ6IHRoaXMuc3RhdGUuYml0Y29pblJwY1BvcnQsXG4gICAgICAgICAgICBCSVRDT0lOX1VTRVJOQU1FOiB0aGlzLnN0YXRlLmJpdGNvaW5Vc2VybmFtZSxcbiAgICAgICAgICAgIEJJVENPSU5fUEFTU1dPUkQ6IHRoaXMuc3RhdGUuYml0Y29pblBhc3N3b3JkXG4gICAgICAgICAgfSksXG4gICAgICAgICAgTElHSFROSU5HX01BTkFHRUQ6IHRoaXMuc3RhdGUubGlnaHRuaW5nTWFuYWdlZCxcbiAgICAgICAgICAuLi4odGhpcy5zdGF0ZS5saWdodG5pbmdNYW5hZ2VkID8ge30gOiB7XG4gICAgICAgICAgICBMSUdIVE5JTkdfU09DS0VUOiB0aGlzLnN0YXRlLmxpZ2h0bmluZ1NvY2tldFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgbGV0IGVyckJvZHkgPSB7fTtcbiAgICAgICAgaWYgKCF0ZXh0LnRyaW0oKS5zdGFydHNXaXRoKCc8JykpIHtcbiAgICAgICAgICB0cnkgeyBlcnJCb2R5ID0gSlNPTi5wYXJzZSh0ZXh0KTsgfSBjYXRjaCAoXykge31cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyQm9keS5tZXNzYWdlIHx8IGVyckJvZHkuZXJyb3IgfHwgYFNldHVwIGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXh0LnRyaW0oKS5zdGFydHNXaXRoKCc8JykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgcmV0dXJuZWQgSFRNTCBpbnN0ZWFkIG9mIEpTT04uIEVuc3VyZSB0aGUgSHViIGlzIHJ1bm5pbmcgKG5wbSBzdGFydCkgYW5kIHRoZSBwcm94eSB0YXJnZXQgaXMgY29ycmVjdC4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkNvbmZpZ3VyYXRpb25Db21wbGV0ZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9uQ29uZmlndXJhdGlvbkNvbXBsZXRlKHtcbiAgICAgICAgICB0b2tlbjogcmVzdWx0LnRva2VuLFxuICAgICAgICAgIGNvbmZpZ3VyZWQ6IHJlc3VsdC5jb25maWd1cmVkLFxuICAgICAgICAgIGV4cGlyZXNBdDogcmVzdWx0LmV4cGlyZXNBdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuOiBmYWxzZSwgc2F2aW5nOiBmYWxzZSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxldCBtZXNzYWdlID0gZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiAnU2V0dXAgZmFpbGVkJztcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdmZXRjaCcpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoJ0ZhaWxlZCB0byBmZXRjaCcpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoJ05ldHdvcmtFcnJvcicpKSB7XG4gICAgICAgIG1lc3NhZ2UgPSAnQ2Fubm90IHJlYWNoIHRoZSBIdWIuIEVuc3VyZSB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgKG5wbSBzdGFydCkgYW5kIHRyeSBhZ2Fpbi4nO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNhdmluZzogZmFsc2UsXG4gICAgICAgIGVycm9yOiBtZXNzYWdlXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCB7IG9wZW4sIG5vZGVOYW1lLCBzYXZpbmcsIGVycm9yIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNb2RhbFxuICAgICAgICBkYXRhLXRlc3RpZD1cImh1Yi1vbmJvYXJkaW5nLW1vZGFsXCJcbiAgICAgICAgb3Blbj17b3Blbn1cbiAgICAgICAgb25DbG9zZT17KCkgPT4ge319XG4gICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIGNsb3NlSWNvbj17ZmFsc2V9XG4gICAgICA+XG4gICAgICAgIDxNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgPEljb24gbmFtZT1cInNldHRpbmdzXCIgLz5cbiAgICAgICAgICBGaXJzdC1UaW1lIFNldHVwXG4gICAgICAgIDwvTW9kYWwuSGVhZGVyPlxuICAgICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgICA8U2VnbWVudCBiYXNpYz5cbiAgICAgICAgICAgIDxNZXNzYWdlIGluZm8+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5XZWxjb21lIHRvIEh1YjwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIENvbmZpZ3VyZSB5b3VyIG5vZGUgdG8gZ2V0IHN0YXJ0ZWQuIFRoaXMgY3JlYXRlcyBhbiBhZG1pbiB0b2tlblxuICAgICAgICAgICAgICAgIChzdG9yZWQgaW4geW91ciBicm93c2VyIG9ubHkpIGFuZCBzZXRzIGluaXRpYWwgcGFyYW1ldGVycy4gVGhlXG4gICAgICAgICAgICAgICAgYWRtaW4gdG9rZW4gYXV0aGVudGljYXRlcyBwcml2aWxlZ2VkIG9wZXJhdGlvbnMgbGlrZSBibG9ja1xuICAgICAgICAgICAgICAgIGdlbmVyYXRpb24gb24gcmVndGVzdC5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5Ob2RlIG5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuIEh1YiwgTXkgTm9kZVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17bm9kZU5hbWV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBub2RlTmFtZTogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8bGFiZWw+Qml0Y29pbiBuZXR3b3JrPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtCSVRDT0lOX05FVFdPUktTfVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuYml0Y29pbk5ldHdvcmt9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHsgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXQgPSBCSVRDT0lOX05FVFdPUktTLmZpbmQoKG4pID0+IG4udmFsdWUgPT09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgYml0Y29pbk5ldHdvcms6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIGJpdGNvaW5ScGNQb3J0OiBuZXQgJiYgbmV0LnJwY1BvcnQgPyBTdHJpbmcobmV0LnJwY1BvcnQpIDogdGhpcy5zdGF0ZS5iaXRjb2luUnBjUG9ydFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIGxhYmVsPVwiTGF1bmNoIG1hbmFnZWQgQml0Y29pbiBub2RlIChiaXRjb2luZClcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJodWItb25ib2FyZGluZy1iaXRjb2luLW1hbmFnZWRcIlxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17dGhpcy5zdGF0ZS5iaXRjb2luTWFuYWdlZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyBjaGVja2VkIH0pID0+IHRoaXMuc2V0U3RhdGUoeyBiaXRjb2luTWFuYWdlZDogISFjaGVja2VkIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgeyF0aGlzLnN0YXRlLmJpdGNvaW5NYW5hZ2VkICYmIChcbiAgICAgICAgICAgICAgICA8U2VnbWVudCBiYXNpYyBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMS41ZW0nLCBwYWRkaW5nVG9wOiAwIH19PlxuICAgICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5CaXRjb2luIFJQQyBob3N0PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIxMjcuMC4wLjFcIlxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmJpdGNvaW5Ib3N0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGJpdGNvaW5Ib3N0OiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+Qml0Y29pbiBSUEMgcG9ydDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtCSVRDT0lOX05FVFdPUktTLmZpbmQoKG4pID0+IG4udmFsdWUgPT09IHRoaXMuc3RhdGUuYml0Y29pbk5ldHdvcmspPy5ycGNQb3J0ID8/IDgzMzJ9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuYml0Y29pblJwY1BvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgYml0Y29pblJwY1BvcnQ6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgc3R5bGU9e3sgZGlzcGxheTogJ2Jsb2NrJywgbWFyZ2luVG9wOiAnMC4yNWVtJywgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiByZWd0ZXN0IDE4NDQzLCBzaWduZXQgMzgzMzIsIHRlc3RuZXQgMTgzMzIsIG1haW5uZXQgODMzMlxuICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5CaXRjb2luIFJQQyB1c2VybmFtZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwicnBjdXNlclwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuYml0Y29pblVzZXJuYW1lfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGJpdGNvaW5Vc2VybmFtZTogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkJpdGNvaW4gUlBDIHBhc3N3b3JkPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInJwY3Bhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5iaXRjb2luUGFzc3dvcmR9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgYml0Y29pblBhc3N3b3JkOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5EaXNrIHNwYWNlIGFsbG9jYXRpb24gKE1CKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIxMDI0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmRpc2tBbGxvY2F0aW9uTWJ9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBkaXNrQWxsb2NhdGlvbk1iOiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Ub3A6ICcwLjI1ZW0nLCBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICAgICAgTWF4aW11bSBzdG9yYWdlIGZvciBkb2N1bWVudHMgKHVzZWQgZm9yIEhUTEMgcHVyY2hhc2UgbGltaXRzKS5cbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbD5Db3N0IHBlciBieXRlIChzYXRzKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDAwMDAxXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMC4wMVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5jb3N0UGVyQnl0ZVNhdHN9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBjb3N0UGVyQnl0ZVNhdHM6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHNtYWxsIHN0eWxlPXt7IGRpc3BsYXk6ICdibG9jaycsIG1hcmdpblRvcDogJzAuMjVlbScsIGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICBQZXItYnl0ZSBmbG9vciBmb3IgZG9jdW1lbnQgc2VydmluZyAoSFRMQyBwdXJjaGFzZSBwcmljZSkuIDAuMDEg4omIIDEwayBzYXRzL01CLiB+MC4wMDAwMDEgc2F0L2J5dGUg4omIIDEgc2F0L01COyB0eXBpY2FsIGNsb3VkIGVncmVzcyB+JDAuMDUvR0IuIExlYXZlIGVtcHR5IGZvciBubyBmbG9vci5cbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJodWItb25ib2FyZGluZy1saWdodG5pbmctbWFuYWdlZFwiXG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIkxhdW5jaCBtYW5hZ2VkIExpZ2h0bmluZyBub2RlIChsaWdodG5pbmdkKVwiXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXt0aGlzLnN0YXRlLmxpZ2h0bmluZ01hbmFnZWR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHsgY2hlY2tlZCB9KSA9PiB0aGlzLnNldFN0YXRlKHsgbGlnaHRuaW5nTWFuYWdlZDogISFjaGVja2VkIH0pfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPHNtYWxsIHN0eWxlPXt7IGRpc3BsYXk6ICdibG9jaycsIG1hcmdpblRvcDogJzAuMjVlbScsIGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICBPcHRpb25hbC4gUmVxdWlyZXMgbWFuYWdlZCBCaXRjb2luLiBSdW4gd2l0aCBGQUJSSUNfQ0xFQU5fQUxJQ0U9MSBpZiB5b3Ugc2VlIHNvY2tldCBlcnJvcnMgYWZ0ZXIgYSBwcmlvciBydW4uXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICB7IXRoaXMuc3RhdGUubGlnaHRuaW5nTWFuYWdlZCAmJiAoXG4gICAgICAgICAgICAgICAgPFNlZ21lbnQgYmFzaWMgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzEuNWVtJywgcGFkZGluZ1RvcDogMCB9fT5cbiAgICAgICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+TGlnaHRuaW5nIFJQQyBzb2NrZXQgcGF0aDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiL3BhdGgvdG8vbGlnaHRuaW5nZC5zb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5saWdodG5pbmdTb2NrZXR9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgbGlnaHRuaW5nU29ja2V0OiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIHN0eWxlPXt7IGRpc3BsYXk6ICdibG9jaycsIG1hcmdpblRvcDogJzAuMjVlbScsIGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgRnVsbCBwYXRoIHRvIGxpZ2h0bmluZ2QgUlBDIHNvY2tldCAoZS5nLiB+Ly5saWdodG5pbmcvcmVndGVzdC9saWdodG5pbmdkLnNvY2spXG4gICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5iaXRjb2luTmV0d29yayA9PT0gJ3JlZ3Rlc3QnICYmIHRoaXMuc3RhdGUuYml0Y29pbk1hbmFnZWQgJiYgKFxuICAgICAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT0nc21hbGwnPlxuICAgICAgICAgICAgICAgICAgUmVndGVzdCBydW5zIG1hbmFnZWQgYml0Y29pbmQgYXV0b21hdGljYWxseS4gTGlnaHRuaW5nIChsaWdodG5pbmdkKSBpcyBvcHRpb25hbCBhbmQgcmVxdWlyZXMgYml0Y29pbmQuXG4gICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7KHRoaXMuc3RhdGUuYml0Y29pbk5ldHdvcmsgPT09ICdzaWduZXQnIHx8IHRoaXMuc3RhdGUuYml0Y29pbk5ldHdvcmsgPT09ICd0ZXN0bmV0JykgJiYgdGhpcy5zdGF0ZS5iaXRjb2luTWFuYWdlZCAmJiAoXG4gICAgICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPSdzbWFsbCc+XG4gICAgICAgICAgICAgICAgICBNYW5hZ2VkIHNpZ25ldC90ZXN0bmV0IHJ1bnMgYml0Y29pbmQgbG9jYWxseS4gU2lnbmV0IGhhcyBwcmVkaWN0YWJsZSB+MSBtaW4gYmxvY2tzOyB0ZXN0bmV0IHVzZXMgUG9XIGFuZCBjYW4gYmUgdW5zdGFibGUuXG4gICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5yZXF1aXJlc1NldHVwVWlTZWNyZXQgPyAoXG4gICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+T3BlcmF0b3Igc2V0dXAgc2VjcmV0PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNhbWUgYXMgRkFCUklDX0hVQl9TRVRVUF9VSV9TRUNSRVQgb24gdGhlIHNlcnZlclwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnNldHVwVWlTZWNyZXR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IHNldHVwVWlTZWNyZXQ6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbCBzdHlsZT17eyBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Ub3A6ICcwLjI1ZW0nLCBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICAgICAgICBSZXF1aXJlZCB0byBhdXRob3JpemUgZmlyc3QtdGltZSBjb25maWd1cmF0aW9uIHdoZW4gdGhlIGh1YiBpcyBwcm90ZWN0ZWQgd2l0aCBhbiBlbnZpcm9ubWVudCBzZWNyZXQuXG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZT5cbiAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+RXJyb3I8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwPntlcnJvcn08L3A+XG4gICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgICAgIDxNb2RhbC5BY3Rpb25zPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiaHViLW9uYm9hcmRpbmctY29tcGxldGUtc2V0dXBcIlxuICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgbG9hZGluZz17c2F2aW5nfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3NhdmluZ31cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaGFuZGxlQ29tcGxldGV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImNoZWNrXCIgLz5cbiAgICAgICAgICAgIENvbXBsZXRlIFNldHVwXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvTW9kYWwuQWN0aW9ucz5cbiAgICAgIDwvTW9kYWw+XG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9uYm9hcmRpbmc7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3JlZ2VuZXJhdG9yIiwiZSIsInQiLCJyIiwibiIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jcmVhdGVDbGFzcyIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJfaW5oZXJpdHMiLCJfc2V0UHJvdG90eXBlT2YiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTW9kYWwiLCJCdXR0b24iLCJIZWFkZXIiLCJJY29uIiwiRm9ybSIsIklucHV0IiwiTWVzc2FnZSIsIlNlZ21lbnQiLCJTZWxlY3QiLCJDaGVja2JveCIsIkJJVENPSU5fTkVUV09SS1MiLCJ0ZXh0IiwicnBjUG9ydCIsIk9uYm9hcmRpbmciLCJfUmVhY3QkQ29tcG9uZW50IiwicHJvcHMiLCJfQklUQ09JTl9ORVRXT1JLUyRmaW4iLCJfQklUQ09JTl9ORVRXT1JLUyRmaW4yIiwiX3RoaXMiLCJfY2FsbGVlIiwiYmFzZVVybCIsIm5lZWRzU2VjcmV0Iiwic2VjcmV0VHJpbSIsInJlc3BvbnNlIiwiZXJyQm9keSIsInJlc3VsdCIsIm1lc3NhZ2UiLCJfdCIsIl9jb250ZXh0Iiwic2V0U3RhdGUiLCJzYXZpbmciLCJlcnJvciIsImdldEJhc2VVcmwiLCJyZXF1aXJlc1NldHVwVWlTZWNyZXQiLCJzdGF0ZSIsInNldHVwVWlTZWNyZXQiLCJ0cmltIiwiRXJyb3IiLCJmZXRjaCIsImNvbmNhdCIsIm1ldGhvZCIsImhlYWRlcnMiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIlNFVFVQX1VJX1NFQ1JFVCIsIk5PREVfTkFNRSIsIm5vZGVOYW1lIiwiTk9ERV9QRVJTT05BTElUWSIsIk5PREVfVEVNUEVSQVRVUkUiLCJOT0RFX0dPQUxTIiwiQklUQ09JTl9ORVRXT1JLIiwiYml0Y29pbk5ldHdvcmsiLCJCSVRDT0lOX01BTkFHRUQiLCJiaXRjb2luTWFuYWdlZCIsIkRJU0tfQUxMT0NBVElPTl9NQiIsIk1hdGgiLCJtYXgiLCJwYXJzZUludCIsImRpc2tBbGxvY2F0aW9uTWIiLCJDT1NUX1BFUl9CWVRFX1NBVFMiLCJjb3N0UGVyQnl0ZVNhdHMiLCJwYXJzZUZsb2F0IiwiQklUQ09JTl9IT1NUIiwiYml0Y29pbkhvc3QiLCJCSVRDT0lOX1JQQ19QT1JUIiwiYml0Y29pblJwY1BvcnQiLCJCSVRDT0lOX1VTRVJOQU1FIiwiYml0Y29pblVzZXJuYW1lIiwiQklUQ09JTl9QQVNTV09SRCIsImJpdGNvaW5QYXNzd29yZCIsIkxJR0hUTklOR19NQU5BR0VEIiwibGlnaHRuaW5nTWFuYWdlZCIsIkxJR0hUTklOR19TT0NLRVQiLCJsaWdodG5pbmdTb2NrZXQiLCJvayIsInN0YXJ0c1dpdGgiLCJwYXJzZSIsIl8iLCJzdGF0dXMiLCJvbkNvbmZpZ3VyYXRpb25Db21wbGV0ZSIsInRva2VuIiwiY29uZmlndXJlZCIsImV4cGlyZXNBdCIsIm9wZW4iLCJpbmNsdWRlcyIsImZpbmQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInByb3RvY29sIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInJlbmRlciIsIl90aGlzMiIsIl9CSVRDT0lOX05FVFdPUktTJGZpbjMiLCJfQklUQ09JTl9ORVRXT1JLUyRmaW40IiwiX3RoaXMkc3RhdGUiLCJjcmVhdGVFbGVtZW50Iiwib25DbG9zZSIsInNpemUiLCJjbG9zZUljb24iLCJuYW1lIiwiQ29udGVudCIsImJhc2ljIiwiaW5mbyIsIkZpZWxkIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsInRhcmdldCIsIm9wdGlvbnMiLCJfcmVmMiIsIm5ldCIsImxhYmVsIiwiY2hlY2tlZCIsIl9yZWYzIiwic3R5bGUiLCJtYXJnaW5MZWZ0IiwicGFkZGluZ1RvcCIsInR5cGUiLCJkaXNwbGF5IiwibWFyZ2luVG9wIiwiY29sb3IiLCJtaW4iLCJzdGVwIiwiX3JlZjQiLCJhdXRvQ29tcGxldGUiLCJuZWdhdGl2ZSIsIkFjdGlvbnMiLCJwcmltYXJ5IiwibG9hZGluZyIsImRpc2FibGVkIiwib25DbGljayIsImhhbmRsZUNvbXBsZXRlIiwiQ29tcG9uZW50IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/Onboarding.js\n\n}')},"./components/PeerList.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n// Dependencies\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n useLocation = _require.useLocation,\n Link = _require.Link,\n useNavigate = _require.useNavigate;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Divider = _require2.Divider,\n Form = _require2.Form,\n Grid = _require2.Grid,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Input = _require2.Input,\n Label = _require2.Label,\n List = _require2.List,\n Loader = _require2.Loader,\n Message = _require2.Message,\n Modal = _require2.Modal,\n Segment = _require2.Segment,\n Statistic = _require2.Statistic,\n Table = _require2.Table;\nvar GraphDocumentPreview = __webpack_require__(/*! ./GraphDocumentPreview */ "./components/GraphDocumentPreview.js");\nvar _require3 = __webpack_require__(/*! ../functions/peerTopologyDot */ "./functions/peerTopologyDot.js"),\n peerTopologyToDot = _require3.peerTopologyToDot;\nvar _require4 = __webpack_require__(/*! ../functions/hubNetworkStatus */ "./functions/hubNetworkStatus.js"),\n isHubNetworkStatusShape = _require4.isHubNetworkStatusShape;\nvar _require5 = __webpack_require__(/*! ../functions/peerIdentity */ "./functions/peerIdentity.js"),\n normalizeFabricPeerAddress = _require5.normalizeFabricPeerAddress,\n normalizePeerAddressInput = _require5.normalizePeerAddressInput,\n dedupeFabricPeers = _require5.dedupeFabricPeers,\n fabricPeerPrimaryLabel = _require5.fabricPeerPrimaryLabel,\n fabricPeerBech32Id = _require5.fabricPeerBech32Id,\n peerNativePeeringString = _require5.peerNativePeeringString,\n fabricP2PIdentityConfirmed = _require5.fabricP2PIdentityConfirmed,\n consolidateUnifiedPeersByFabricId = _require5.consolidateUnifiedPeersByFabricId,\n buildWebrtcCombinedRows = _require5.buildWebrtcCombinedRows,\n webrtcCombinedToFabricPeerRows = _require5.webrtcCombinedToFabricPeerRows,\n mergeTcpAndWebrtcPeerRows = _require5.mergeTcpAndWebrtcPeerRows,\n isWebrtcTransportPeerRow = _require5.isWebrtcTransportPeerRow;\nvar _require6 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require6.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require6.subscribeHubUiFeatureFlags;\nvar _require7 = __webpack_require__(/*! ../functions/fabricBrowserState */ "./functions/fabricBrowserState.js"),\n readStorageString = _require7.readStorageString,\n writeStorageString = _require7.writeStorageString;\nvar _require8 = __webpack_require__(/*! ../functions/toast */ "./functions/toast.js"),\n toast = _require8.toast;\nvar HubPagination = __webpack_require__(/*! ./HubPagination */ "./components/HubPagination.js");\nvar _require9 = __webpack_require__(/*! ../functions/hubListPagination */ "./functions/hubListPagination.js"),\n useHubListPagination = _require9.useHubListPagination;\n\n/** Default “primary authority” Fabric TCP peer — long-lived hub, high trust, Bitcoin head reference. */\nvar DEFAULT_PRIMARY_FABRIC_HUB = \'hub.fabric.pub:7777\';\nvar PRIMARY_PEER_STORAGE_KEY = \'fabric.peers.primaryFabricAddress\';\nfunction readPrimaryPeerAddress() {\n try {\n if (typeof window !== \'undefined\') {\n var s = String(readStorageString(PRIMARY_PEER_STORAGE_KEY) || \'\').trim();\n return s || DEFAULT_PRIMARY_FABRIC_HUB;\n }\n } catch (e) {}\n return DEFAULT_PRIMARY_FABRIC_HUB;\n}\nfunction writePrimaryPeerAddress(addr) {\n try {\n if (typeof window !== \'undefined\') {\n writeStorageString(PRIMARY_PEER_STORAGE_KEY, String(addr || \'\').trim());\n }\n } catch (e) {}\n}\nfunction inventoryDocCountForFabricPeer(globalPeers, fabricId) {\n if (!globalPeers || _typeof(globalPeers) !== \'object\' || !fabricId) return null;\n var fid = String(fabricId).trim();\n var direct = globalPeers[fid];\n if (direct && direct.inventory && Array.isArray(direct.inventory.documents)) {\n return direct.inventory.documents.length;\n }\n for (var _i = 0, _Object$keys = Object.keys(globalPeers); _i < _Object$keys.length; _i++) {\n var k = _Object$keys[_i];\n var ex = globalPeers[k];\n if (ex && String(ex.id || \'\') === fid && ex.inventory && Array.isArray(ex.inventory.documents)) {\n return ex.inventory.documents.length;\n }\n }\n return null;\n}\nfunction UnifiedPeersPaginatedList(_ref) {\n var unifiedPeers = _ref.unifiedPeers,\n primaryPeerNorm = _ref.primaryPeerNorm,\n signalingHostPort = _ref.signalingHostPort,\n globalPeers = _ref.globalPeers,\n onDisconnectWebRTCPeer = _ref.onDisconnectWebRTCPeer,\n onFabricPeerResync = _ref.onFabricPeerResync;\n var navigate = useNavigate();\n var first = unifiedPeers[0];\n var last = unifiedPeers.length ? unifiedPeers[unifiedPeers.length - 1] : null;\n var resetKey = "".concat(unifiedPeers.length, ":").concat(first && (first.id || first.address), ":").concat(last && (last.id || last.address));\n var _useHubListPagination = useHubListPagination(unifiedPeers, resetKey),\n slice = _useHubListPagination.slice,\n page = _useHubListPagination.page,\n totalPages = _useHubListPagination.totalPages,\n rangeFrom = _useHubListPagination.rangeFrom,\n rangeTo = _useHubListPagination.rangeTo,\n total = _useHubListPagination.total,\n setPage = _useHubListPagination.setPage;\n var sigHp = String(signalingHostPort || \'\').trim();\n var gp = globalPeers && _typeof(globalPeers) === \'object\' ? globalPeers : null;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Table, {\n compact: true,\n celled: true,\n striped: true,\n selectable: true,\n size: "small",\n unstackable: true,\n style: {\n marginTop: \'0.75em\',\n tableLayout: \'fixed\'\n }\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, {\n style: {\n width: \'28%\'\n }\n }, "Fabric Peer ID"), /*#__PURE__*/React.createElement(Table.HeaderCell, {\n style: {\n width: \'32%\'\n }\n }, "Connection"), /*#__PURE__*/React.createElement(Table.HeaderCell, {\n style: {\n width: \'18%\'\n },\n textAlign: "center"\n }, "Status"), /*#__PURE__*/React.createElement(Table.HeaderCell, {\n style: {\n width: \'14%\'\n }\n }, "Seen"), /*#__PURE__*/React.createElement(Table.HeaderCell, {\n collapsing: true,\n textAlign: "right"\n }, " "))), /*#__PURE__*/React.createElement(Table.Body, null, slice.map(function (peer, idx) {\n var meshRow = isWebrtcTransportPeerRow(peer);\n var id = peer && (peer.id || peer.address || peer.pubkey || "peer-".concat(idx));\n var address = peer && (peer.address || peer.host || peer.url);\n var bech32Id = fabricPeerBech32Id(peer);\n var routeTarget = bech32Id ? bech32Id : meshRow ? String(peer.id || id || "peer-".concat(idx)) : String(address && address.trim() || id || "peer-".concat(idx));\n var rowKey = bech32Id ? "id:".concat(bech32Id) : meshRow ? "mesh:".concat(routeTarget) : routeTarget;\n var status = peer && peer.status || \'unknown\';\n var isConnected = status === \'connected\';\n var score = peer && (peer.score != null ? peer.score : null);\n var misbehavior = peer && peer.misbehavior != null ? Number(peer.misbehavior) : null;\n var nickname = peer && peer.nickname;\n var lastSeen = peer && (peer.lastSeen || peer.lastMessage);\n var addrNorm = normalizeFabricPeerAddress(address);\n var isPrimaryRow = !meshRow && primaryPeerNorm && (addrNorm === primaryPeerNorm || String(address) === primaryPeerNorm);\n var connectionStr = peerNativePeeringString(peer, sigHp) || \'—\';\n var p2pConfirmed = fabricP2PIdentityConfirmed(peer);\n var invN = gp ? inventoryDocCountForFabricPeer(gp, bech32Id || routeTarget) : null;\n var tcpForResync = address && !String(address).startsWith(\'webrtc:\') ? normalizeFabricPeerAddress(address) : \'\';\n var meshDisconnectId = peer && peer.metadata && peer.metadata.webrtcSignalingId != null ? String(peer.metadata.webrtcSignalingId) : String(peer.id || routeTarget);\n var headlineId = bech32Id || fabricPeerPrimaryLabel(peer);\n var tagSummary = [meshRow ? \'Mesh\' : null, isPrimaryRow ? \'Primary\' : null, p2pConfirmed ? \'P2P id\' : null, !p2pConfirmed && bech32Id && meshRow ? \'Signaled\' : null, invN != null && invN > 0 ? "Docs ".concat(invN) : null, score != null ? "\\u2605".concat(score) : null, meshRow && misbehavior != null && misbehavior > 0 ? "warn ".concat(misbehavior) : null].filter(Boolean).join(\' · \');\n var seenShort = lastSeen ? new Date(lastSeen).toLocaleString(undefined, {\n month: \'short\',\n day: \'numeric\',\n hour: \'2-digit\',\n minute: \'2-digit\'\n }) : \'—\';\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: rowKey,\n style: {\n cursor: \'pointer\'\n },\n title: tagSummary || undefined,\n onClick: function onClick() {\n return navigate("/peers/".concat(encodeURIComponent(routeTarget)));\n }\n }, /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n verticalAlign: \'middle\',\n overflow: \'hidden\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n fontFamily: \'monospace\',\n fontSize: \'0.88rem\',\n fontWeight: 600,\n overflow: \'hidden\',\n textOverflow: \'ellipsis\',\n whiteSpace: \'nowrap\'\n },\n title: headlineId\n }, headlineId), nickname ? /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.78rem\',\n color: \'#767676\',\n overflow: \'hidden\',\n textOverflow: \'ellipsis\',\n whiteSpace: \'nowrap\'\n },\n title: nickname\n }, nickname) : null), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n verticalAlign: \'middle\',\n overflow: \'hidden\'\n }\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.78rem\',\n display: \'block\',\n overflow: \'hidden\',\n textOverflow: \'ellipsis\',\n whiteSpace: \'nowrap\'\n },\n title: connectionStr\n }, connectionStr)), /*#__PURE__*/React.createElement(Table.Cell, {\n textAlign: "center",\n style: {\n verticalAlign: \'middle\'\n }\n }, /*#__PURE__*/React.createElement("span", {\n style: {\n whiteSpace: \'nowrap\',\n fontSize: \'0.85rem\'\n }\n }, meshRow ? /*#__PURE__*/React.createElement(Icon, {\n name: "exchange",\n color: "teal",\n title: "WebRTC mesh"\n }) : null, isPrimaryRow ? /*#__PURE__*/React.createElement(Icon, {\n name: "star",\n color: "yellow",\n title: "Primary peer"\n }) : null, p2pConfirmed ? /*#__PURE__*/React.createElement(Icon, {\n name: "shield",\n color: "blue",\n title: "P2P identity confirmed"\n }) : null, invN != null && invN > 0 ? /*#__PURE__*/React.createElement(Icon, {\n name: "book",\n color: "violet",\n title: "".concat(invN, " inventory docs")\n }) : null, /*#__PURE__*/React.createElement(Icon, {\n name: isConnected ? \'check circle\' : \'minus circle\',\n color: isConnected ? \'green\' : \'grey\',\n title: status\n }), /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.25em\',\n color: isConnected ? \'#21ba45\' : \'#767676\'\n }\n }, isConnected ? \'On\' : meshRow ? status === \'signaling\' ? \'Sig\' : \'Off\' : \'Off\'))), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n verticalAlign: \'middle\',\n fontSize: \'0.8rem\',\n color: \'#666\',\n whiteSpace: \'nowrap\'\n },\n title: lastSeen ? new Date(lastSeen).toLocaleString() : \'\'\n }, seenShort), /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true,\n textAlign: "right",\n style: {\n verticalAlign: \'middle\',\n whiteSpace: \'nowrap\'\n }\n }, meshRow && typeof onDisconnectWebRTCPeer === \'function\' && (isConnected || status === \'connecting\') ? /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n color: "red",\n icon: true,\n title: "Drop mesh peer",\n onClick: function onClick(event) {\n event.preventDefault();\n event.stopPropagation();\n try {\n onDisconnectWebRTCPeer(meshDisconnectId);\n } catch (e) {}\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "unlink"\n })) : null, !meshRow && isConnected && typeof onFabricPeerResync === \'function\' && tcpForResync ? /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n icon: true,\n title: "Fabric resync",\n onClick: function onClick(event) {\n event.preventDefault();\n event.stopPropagation();\n try {\n onFabricPeerResync(tcpForResync);\n } catch (e) {}\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sync"\n })) : null));\n }))), total > 0 && /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n marginTop: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontSize: \'0.88em\'\n }\n }, "Showing ", rangeFrom, "\\u2013", rangeTo, " of ", total), /*#__PURE__*/React.createElement(HubPagination, {\n activePage: page,\n totalPages: totalPages,\n onPageChange: function onPageChange(e, d) {\n return setPage(d.activePage);\n },\n style: {\n marginTop: 0,\n flex: \'1 1 auto\',\n minWidth: 0\n }\n })));\n}\nfunction sortFabricPeersForAuthority(peers, primaryNorm) {\n var arr = _toConsumableArray(peers || []);\n var pn = String(primaryNorm || \'\').trim();\n arr.sort(function (a, b) {\n var aa = normalizeFabricPeerAddress(a && a.address);\n var ba = normalizeFabricPeerAddress(b && b.address);\n var ap = pn && (aa === pn || String(a && a.address) === pn);\n var bp = pn && (ba === pn || String(b && b.address) === pn);\n if (ap !== bp) return ap ? -1 : 1;\n var sa = Number(a && a.score);\n var sb = Number(b && b.score);\n if (Number.isFinite(sa) && Number.isFinite(sb) && sa !== sb) return sb - sa;\n if (Number.isFinite(sa) && !Number.isFinite(sb)) return -1;\n if (!Number.isFinite(sa) && Number.isFinite(sb)) return 1;\n return String(aa).localeCompare(String(ba));\n });\n return arr;\n}\nvar PeersPage = /*#__PURE__*/function (_React$Component) {\n function PeersPage(props) {\n var _this;\n _classCallCheck(this, PeersPage);\n _this = _callSuper(this, PeersPage, [props]);\n _defineProperty(_this, "_openAddPeerModal", function () {\n _this.setState({\n addPeerModalOpen: true,\n addPeerDraft: \'\'\n });\n });\n _defineProperty(_this, "_closeAddPeerModal", function () {\n _this.setState({\n addPeerModalOpen: false,\n addPeerDraft: \'\'\n });\n });\n _defineProperty(_this, "_submitAddPeer", function () {\n var onAddPeer = _this.props.onAddPeer;\n var normalized = normalizePeerAddressInput(_this.state.addPeerDraft);\n if (!normalized) {\n toast.warning(\'Enter a host or host:port (e.g. hub.fabric.pub or 127.0.0.1:7777).\', {\n header: \'Add peer\'\n });\n return;\n }\n if (typeof onAddPeer === \'function\') {\n onAddPeer({\n address: normalized\n });\n }\n _this.setState({\n addPeerModalOpen: false,\n addPeerDraft: \'\'\n });\n });\n _defineProperty(_this, "_openConnectPeerModal", function () {\n _this.setState({\n connectPeerModalOpen: true,\n connectPeerIdDraft: \'\'\n });\n });\n _defineProperty(_this, "_closeConnectPeerModal", function () {\n _this.setState({\n connectPeerModalOpen: false,\n connectPeerIdDraft: \'\'\n });\n });\n _defineProperty(_this, "_submitConnectPeerModal", function () {\n var onConnectWebRTCPeer = _this.props.onConnectWebRTCPeer;\n var value = String(_this.state.connectPeerIdDraft || \'\').trim();\n if (!value || typeof onConnectWebRTCPeer !== \'function\') return;\n onConnectWebRTCPeer(value);\n _this.setState({\n connectPeerModalOpen: false,\n connectPeerIdDraft: \'\'\n });\n });\n _this.state = {\n addPeerModalOpen: false,\n addPeerDraft: \'\',\n connectPeerModalOpen: false,\n connectPeerIdDraft: \'\',\n flushChainSnapshot: \'\',\n flushChainNetwork: \'playnet\',\n flushChainLabel: \'\'\n };\n return _this;\n }\n _inherits(PeersPage, _React$Component);\n return _createClass(PeersPage, [{\n key: "componentDidMount",\n value: function componentDidMount() {\n var _this2 = this;\n if (typeof this.props.onRefreshPeers === \'function\') {\n this.props.onRefreshPeers();\n }\n\n // Keep peer status fresh while the page is open so the list does not\n // oscillate between stale/empty snapshots.\n this._refreshTimer = setInterval(function () {\n if (typeof _this2.props.onRefreshPeers === \'function\') {\n _this2.props.onRefreshPeers();\n }\n }, 4000);\n this._onPeerTopologyGossip = function (ev) {\n var path = ev && ev.detail && ev.detail.operation && ev.detail.operation.path;\n if (path === \'/peerTopologyGossip\') _this2.forceUpdate();\n };\n window.addEventListener(\'globalStateUpdate\', this._onPeerTopologyGossip);\n this._onNetworkStatus = function () {\n return _this2.forceUpdate();\n };\n window.addEventListener(\'networkStatusUpdate\', this._onNetworkStatus);\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n if (this._refreshTimer) {\n clearInterval(this._refreshTimer);\n this._refreshTimer = null;\n }\n if (this._onPeerTopologyGossip) {\n window.removeEventListener(\'globalStateUpdate\', this._onPeerTopologyGossip);\n this._onPeerTopologyGossip = null;\n }\n if (this._onNetworkStatus) {\n window.removeEventListener(\'networkStatusUpdate\', this._onNetworkStatus);\n this._onNetworkStatus = null;\n }\n }\n }, {\n key: "render",\n value: function render() {\n var _this3 = this;\n var _this$props = this.props,\n auth = _this$props.auth,\n bridge = _this$props.bridge,\n bridgeRef = _this$props.bridgeRef,\n onAddPeer = _this$props.onAddPeer,\n onRefreshPeers = _this$props.onRefreshPeers,\n onDisconnectPeer = _this$props.onDisconnectPeer,\n onSendPeerMessage = _this$props.onSendPeerMessage,\n onSetPeerNickname = _this$props.onSetPeerNickname,\n onDiscoverWebRTCPeers = _this$props.onDiscoverWebRTCPeers,\n onRepublishWebRTCOffer = _this$props.onRepublishWebRTCOffer,\n onConnectWebRTCPeer = _this$props.onConnectWebRTCPeer,\n onDisconnectWebRTCPeer = _this$props.onDisconnectWebRTCPeer,\n onDisconnectAllWebRTCPeers = _this$props.onDisconnectAllWebRTCPeers,\n onSendWebRTCTestPing = _this$props.onSendWebRTCTestPing,\n onFabricPeerResync = _this$props.onFabricPeerResync,\n adminPeerToolsToken = _this$props.adminPeerToolsToken,\n onSendFlushChainToTrustedPeers = _this$props.onSendFlushChainToTrustedPeers;\n var uf = loadHubUiFeatureFlags();\n var isLoggedIn = !!(auth && auth.id && auth.xpub);\n var activeBridgeRef = bridgeRef || bridge;\n var current = activeBridgeRef && activeBridgeRef.current;\n var candidate = current && current.networkStatus;\n var fallback = current && current.lastNetworkStatus;\n var networkStatus = isHubNetworkStatusShape(candidate) ? candidate : isHubNetworkStatusShape(fallback) ? fallback : null;\n var network = networkStatus && networkStatus.network;\n var peers = Array.isArray(networkStatus && networkStatus.peers) ? networkStatus.peers : [];\n var state = networkStatus && networkStatus.state;\n var stateStatusUpper = state && state.status != null ? String(state.status).trim().toUpperCase() : \'\';\n var bridgeFabricPaused = stateStatusUpper === \'PAUSED\';\n var isOnline = !!networkStatus;\n var fabricPeerId = networkStatus && networkStatus.fabricPeerId ? String(networkStatus.fabricPeerId) : null;\n var legacyUnstableId = !fabricPeerId && networkStatus && networkStatus.contract != null ? String(networkStatus.contract) : null;\n var shareNodeId = fabricPeerId || legacyUnstableId;\n var hostPort = network && network.address ? String(network.address) : null;\n // Single dial pin for operators / peers: pubkey@host:port (matches Peer#_connect).\n var shareableString = shareNodeId && hostPort ? "".concat(shareNodeId, "@").concat(hostPort) : shareNodeId || hostPort || \'\';\n\n // WebRTC peers currently registered with the hub signaling RPC\n var webrtcPeers = Array.isArray(networkStatus && networkStatus.webrtcPeers) ? networkStatus.webrtcPeers : [];\n\n // Defensive separation: keep Fabric network peers in the standard list even\n // if signaling peers accidentally appear in `networkStatus.peers`.\n var fabricPeers = peers.filter(function (peer) {\n if (!peer || _typeof(peer) !== \'object\') return false;\n if (peer.metadata && peer.metadata.transport === \'webrtc\') return true;\n var id = String(peer.id || \'\');\n var address = String(peer.address || \'\');\n var hasWebRTCMetadata = !!(peer.metadata && Array.isArray(peer.metadata.capabilities));\n if (id.startsWith(\'fabric-bridge-\') || address.startsWith(\'fabric-bridge-\')) return false;\n if (hasWebRTCMetadata && peer.status === \'registered\') return false;\n return true;\n });\n var primaryPeerNorm = normalizeFabricPeerAddress(readPrimaryPeerAddress());\n var fabricPeersSorted = sortFabricPeersForAuthority(dedupeFabricPeers(fabricPeers), primaryPeerNorm);\n var localWebrtcPeers = current && typeof current.localWebrtcPeers !== \'undefined\' ? current.localWebrtcPeers : [];\n var meshStatus = current && typeof current.webrtcMeshStatus !== \'undefined\' ? current.webrtcMeshStatus : null;\n var webrtcCombined = buildWebrtcCombinedRows(webrtcPeers, localWebrtcPeers, meshStatus && meshStatus.peerId ? String(meshStatus.peerId) : null);\n var repLookup = function repLookup(pid) {\n return current && typeof current.getWebRTCPeerReputation === \'function\' ? current.getWebRTCPeerReputation(pid) : null;\n };\n var fabricPeersWithRep = fabricPeersSorted.map(function (p) {\n if (!p || !p.metadata || p.metadata.transport !== \'webrtc\') return p;\n var sid = p.metadata.webrtcSignalingId;\n if (!sid) return p;\n var r = repLookup(sid);\n if (!r) return p;\n return _objectSpread(_objectSpread({}, p), {}, {\n score: r.score,\n misbehavior: r.misbehavior\n });\n });\n var idsFromStatusPeers = new Set();\n var _iterator = _createForOfIteratorHelper(fabricPeersWithRep),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var p = _step.value;\n if (p && p.id) idsFromStatusPeers.add(String(p.id));\n var bf = fabricPeerBech32Id(p);\n if (bf) idsFromStatusPeers.add(bf);\n if (p && p.metadata && p.metadata.webrtcSignalingId) {\n idsFromStatusPeers.add(String(p.metadata.webrtcSignalingId));\n }\n var addr = String(p && p.address || \'\');\n if (addr.startsWith(\'webrtc:\')) {\n idsFromStatusPeers.add(addr.slice(\'webrtc:\'.length));\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n var localOnlyForMesh = localWebrtcPeers.filter(function (lp) {\n if (!lp || !lp.id) return false;\n if (idsFromStatusPeers.has(String(lp.id))) return false;\n var meta = lp.metadata && _typeof(lp.metadata) === \'object\' ? lp.metadata : {};\n var lFab = meta.fabricPeerId != null ? String(meta.fabricPeerId).trim() : \'\';\n if (lFab && idsFromStatusPeers.has(lFab)) return false;\n return true;\n });\n var webrtcExtraRows = webrtcCombinedToFabricPeerRows(localOnlyForMesh.map(function (lp) {\n return {\n id: lp.id,\n signaling: null,\n local: lp\n };\n }), repLookup);\n var unifiedPeers = consolidateUnifiedPeersByFabricId(mergeTcpAndWebrtcPeerRows(fabricPeersWithRep, webrtcExtraRows, primaryPeerNorm));\n var signalingHostPort = typeof window !== \'undefined\' ? window.location.host : \'\';\n var globalPeers = current && typeof current.getGlobalState === \'function\' ? current.getGlobalState().peers || null : null;\n var bitcoin = networkStatus && networkStatus.bitcoin && _typeof(networkStatus.bitcoin) === \'object\' ? networkStatus.bitcoin : null;\n var chainHeight = bitcoin && typeof bitcoin.height === \'number\' && Number.isFinite(bitcoin.height) ? bitcoin.height : null;\n var tipFull = bitcoin && typeof bitcoin.bestBlockHash === \'string\' && /^[0-9a-fA-F]{64}$/.test(bitcoin.bestBlockHash) ? bitcoin.bestBlockHash : null;\n var tipShort = tipFull ? "".concat(tipFull.slice(0, 10), "\\u2026").concat(tipFull.slice(-6)) : null;\n var btcNetwork = bitcoin && bitcoin.network != null ? String(bitcoin.network) : null;\n var mempoolN = bitcoin && bitcoin.mempoolTxCount != null && Number.isFinite(Number(bitcoin.mempoolTxCount)) ? Number(bitcoin.mempoolTxCount) : null;\n var gsTopo = activeBridgeRef && activeBridgeRef.current && typeof activeBridgeRef.current.getGlobalState === \'function\' ? activeBridgeRef.current.getGlobalState() : null;\n var topologyGossip = gsTopo && gsTopo.peerTopologyGossip;\n var topologyDot = networkStatus ? peerTopologyToDot({\n selfId: fabricPeerId,\n selfLabel: \'This Fabric node\',\n directPeers: fabricPeersSorted,\n gossip: topologyGossip\n }) : null;\n return /*#__PURE__*/React.createElement("fabric-hub-peers", {\n "class": "fade-in",\n "data-testid": "hub-peers-page"\n }, /*#__PURE__*/React.createElement(Segment, {\n style: {\n clear: \'both\',\n borderRadius: 4,\n boxShadow: \'0 1px 6px rgba(0,0,0,0.06)\'\n }\n }, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "peers-page-heading",\n "aria-describedby": "peers-page-summary"\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'flex-start\',\n gap: \'0.75em\',\n flexWrap: \'wrap\',\n marginBottom: \'0.5em\'\n },\n role: "banner"\n }, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n as: Link,\n to: "/",\n "aria-label": "Back to home"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Home"), /*#__PURE__*/React.createElement("div", {\n style: {\n flex: \'1 1 14rem\',\n minWidth: 0\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "peers-page-heading",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Header.Content, null, "Peers")), /*#__PURE__*/React.createElement("p", {\n id: "peers-page-summary",\n style: {\n margin: \'0.4em 0 0\',\n color: \'#555\',\n maxWidth: \'52rem\',\n lineHeight: 1.55\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Fabric Peer ID"), " is the canonical identity for this network: compressed secp256k1 (often shown as bech32m ", /*#__PURE__*/React.createElement("code", null, "id1\\u2026"), "). Signed P2P ", /*#__PURE__*/React.createElement("code", null, "Message"), " frames bind to that key so recipients can verify authenticity; TCP sessions and inventory relay line up with the same id once ", /*#__PURE__*/React.createElement("strong", null, "P2P id"), " is confirmed. Mesh rows show the hub signaling id until the peer is proven on the Fabric wire (", /*#__PURE__*/React.createElement("strong", null, "Signaled"), "). Connection cells use ", /*#__PURE__*/React.createElement("code", null, "identity@host:port"), " (TCP listen or WebRTC signaling reachability).")))), !networkStatus ? /*#__PURE__*/React.createElement("div", {\n role: "status",\n "aria-live": "polite",\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.75em\',\n flexWrap: \'wrap\',\n padding: \'1rem 0 0.25rem\',\n color: \'#555\'\n }\n }, /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: true,\n size: "small"\n }), /*#__PURE__*/React.createElement("span", null, "Connecting to hub and loading Fabric network status (Fabric Peer ID, Bitcoin height)\\u2026")) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Divider, {\n section: true\n }), /*#__PURE__*/React.createElement(Grid, {\n stackable: true\n }, /*#__PURE__*/React.createElement(Grid.Row, {\n verticalAlign: "middle"\n }, /*#__PURE__*/React.createElement(Grid.Column, {\n computer: 10,\n tablet: 16\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n size: "small",\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement(Header.Content, null, "This hub", /*#__PURE__*/React.createElement(Label, {\n size: "small",\n style: {\n marginLeft: \'0.5em\',\n verticalAlign: \'middle\'\n },\n color: bridgeFabricPaused ? \'yellow\' : isOnline ? \'green\' : \'grey\'\n }, isOnline ? bridgeFabricPaused ? \'Fabric paused\' : \'Fabric online\' : \'Offline\'))), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.25em 0 0.5em\',\n color: \'#666\',\n fontSize: \'0.92em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Fabric state:"), " ", state && state.status || \'unknown\', bridgeFabricPaused ? \' — hub reachable; Fabric P2P idle until started.\' : \'\'), shareNodeId || hostPort ? /*#__PURE__*/React.createElement(List, {\n relaxed: true,\n size: "small",\n style: {\n marginBottom: \'0.5em\'\n }\n }, shareNodeId ? /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Header, null, fabricPeerId ? \'Fabric Peer ID\' : \'Node ID (legacy)\'), /*#__PURE__*/React.createElement(List.Description, null, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.88em\',\n display: \'block\',\n marginTop: \'0.25em\'\n },\n title: fabricPeerId ? \'Canonical secp256k1 identity for signed P2P messages and peer rows.\' : \'Unstable — upgrade hub for fabricPeerId.\'\n }, shareNodeId), legacyUnstableId ? /*#__PURE__*/React.createElement("span", {\n style: {\n fontSize: \'0.82em\',\n color: \'#886\',\n display: \'block\',\n marginTop: \'0.35em\'\n }\n }, "Prefer ", /*#__PURE__*/React.createElement("code", null, "fabricPeerId"), " from the hub for sharing; legacy ids can change with contract state.") : null)) : null, hostPort ? /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(List.Header, null, "TCP listen"), /*#__PURE__*/React.createElement(List.Description, null, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.88em\'\n }\n }, hostPort))) : null) : null, shareableString ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n icon: true,\n labelPosition: "left",\n onClick: function onClick() {\n try {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n navigator.clipboard.writeText(shareableString);\n } else {\n var ta = document.createElement(\'textarea\');\n ta.value = shareableString;\n ta.style.position = \'fixed\';\n ta.style.opacity = \'0\';\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\'copy\');\n document.body.removeChild(ta);\n }\n } catch (e) {}\n },\n title: "Copy pubkey@host:port peering string for native Fabric dial"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n }), "Copy peering string") : null), /*#__PURE__*/React.createElement(Grid.Column, {\n computer: 6,\n tablet: 16\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n size: "small",\n style: {\n marginTop: 0\n }\n }, "Chain & mempool"), /*#__PURE__*/React.createElement(Statistic.Group, {\n size: "mini",\n widths: 2\n }, /*#__PURE__*/React.createElement(Statistic, null, /*#__PURE__*/React.createElement(Statistic.Value, null, chainHeight != null ? chainHeight : \'—\'), /*#__PURE__*/React.createElement(Statistic.Label, null, "Height")), /*#__PURE__*/React.createElement(Statistic, null, /*#__PURE__*/React.createElement(Statistic.Value, {\n text: true,\n style: {\n fontSize: \'0.95rem\',\n fontFamily: \'monospace\'\n }\n }, tipFull ? uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/blocks/".concat(encodeURIComponent(tipFull)),\n title: tipFull\n }, tipShort) : /*#__PURE__*/React.createElement("span", {\n title: "".concat(tipFull, " \\u2014 enable Bitcoin explorer routes in Admin \\u2192 Feature visibility")\n }, tipShort) : \'—\'), /*#__PURE__*/React.createElement(Statistic.Label, null, "Tip"))), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n fontSize: \'0.88em\',\n color: \'#666\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Network:"), " ", btcNetwork || \'—\', mempoolN != null ? /*#__PURE__*/React.createElement("span", null, \' · \', /*#__PURE__*/React.createElement("strong", null, "Mempool:"), " ", mempoolN, " tx") : null, \' · \', /*#__PURE__*/React.createElement("strong", null, "Peers in view:"), " ", unifiedPeers.length, " (TCP + mesh)"), bitcoin && bitcoin.available === false && bitcoin.message ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginTop: \'0.65em\'\n },\n content: bitcoin.message\n }) : null, /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n fontWeight: 600,\n color: \'#333\'\n }\n }, "Block relay"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n fontSize: \'0.92em\',\n lineHeight: 1.45\n }\n }, "On new tip (ZMQ ", /*#__PURE__*/React.createElement("code", null, "hashblock"), "), this hub signs ", /*#__PURE__*/React.createElement("code", null, "BitcoinBlock"), " P2P messages; peers relay the same wire bytes (duplicates dropped). Compare height and tip with peers after ", /*#__PURE__*/React.createElement("code", null, "addnode"), " or long regtest chains.")), !(adminPeerToolsToken && String(adminPeerToolsToken).trim()) ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.65em 0 0\',\n fontSize: \'0.82em\',\n color: \'#777\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Operator tools:"), " sign in under Settings \\u2192 Admin (hub admin token) to send ", /*#__PURE__*/React.createElement("code", null, "P2P_FLUSH_CHAIN"), " to highly trusted peers from this page.") : null)), adminPeerToolsToken && String(adminPeerToolsToken).trim() && typeof onSendFlushChainToTrustedPeers === \'function\' ? /*#__PURE__*/React.createElement(Grid.Row, null, /*#__PURE__*/React.createElement(Grid.Column, {\n width: 16\n }, /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n size: "small",\n color: "red"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "warning sign"\n }), "Operator \\u2014 chain flush (trusted peers)"), /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small"\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n lineHeight: 1.45\n }\n }, "Sends signed ", /*#__PURE__*/React.createElement("code", null, "P2P_FLUSH_CHAIN"), " to every ", /*#__PURE__*/React.createElement("strong", null, "connected"), " peer whose registry score is above the hub threshold (default 800). Peers that accept it may rewind toward ", /*#__PURE__*/React.createElement("code", null, "snapshotBlockHash"), " via ", /*#__PURE__*/React.createElement("code", null, "invalidateblock"), ". Use only with coordinated operators on regtest / playnet / signet / testnet.")), /*#__PURE__*/React.createElement(Form, {\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n var h = String(_this3.state.flushChainSnapshot || \'\').trim();\n if (!/^[0-9a-fA-F]{64}$/.test(h)) {\n toast.error(\'Snapshot must be 64 hex characters (known-good tip after reset).\', {\n header: \'Chain flush\'\n });\n return;\n }\n onSendFlushChainToTrustedPeers({\n snapshotBlockHash: h.toLowerCase(),\n network: String(_this3.state.flushChainNetwork || \'\').trim() || undefined,\n label: String(_this3.state.flushChainLabel || \'\').trim() || undefined\n });\n toast.info(\'Flush chain request sent — check hub logs and peer bitcoinds.\', {\n header: \'P2P_FLUSH_CHAIN\',\n autoClose: 6000\n });\n },\n style: {\n maxWidth: \'40rem\',\n marginTop: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "flush-chain-snapshot"\n }, "Known-good tip (", /*#__PURE__*/React.createElement("code", null, "getbestblockhash"), ")"), /*#__PURE__*/React.createElement(Input, {\n id: "flush-chain-snapshot",\n placeholder: "64-character hex block hash",\n value: this.state.flushChainSnapshot,\n onChange: function onChange(e) {\n return _this3.setState({\n flushChainSnapshot: e.target.value\n });\n },\n autoComplete: "off"\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "flush-chain-network"\n }, "Network"), /*#__PURE__*/React.createElement(Input, {\n id: "flush-chain-network",\n placeholder: "playnet",\n value: this.state.flushChainNetwork,\n onChange: function onChange(e) {\n return _this3.setState({\n flushChainNetwork: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "flush-chain-label"\n }, "Label (logs)"), /*#__PURE__*/React.createElement(Input, {\n id: "flush-chain-label",\n placeholder: "e.g. federation-round-3-baseline",\n value: this.state.flushChainLabel,\n onChange: function onChange(e) {\n return _this3.setState({\n flushChainLabel: e.target.value\n });\n }\n })), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n basic: true,\n disabled: !tipFull,\n onClick: function onClick() {\n return _this3.setState({\n flushChainSnapshot: tipFull || \'\'\n });\n },\n title: tipFull ? \'Fill from hub Bitcoin tip in network status\' : \'No tip in status\'\n }, "Use current tip from status"), /*#__PURE__*/React.createElement(Button, {\n type: "submit",\n size: "small",\n color: "red"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "send"\n }), "Send P2P_FLUSH_CHAIN"))))) : null, /*#__PURE__*/React.createElement(Grid.Row, null, /*#__PURE__*/React.createElement(Grid.Column, {\n width: 16\n }, /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n size: "small"\n }, "Primary authority & Payjoin (BIP 77)"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#444\',\n lineHeight: 1.5,\n maxWidth: \'52rem\'\n }\n }, "Use a long-lived hub (e.g. ", /*#__PURE__*/React.createElement("code", null, "hub.fabric.pub"), ") as ", /*#__PURE__*/React.createElement("strong", null, "primary authority"), ": Fabric TCP carries ", /*#__PURE__*/React.createElement("code", null, "BitcoinBlock"), " gossip and trust scores. Payjoin v2 (directory + HPKE + OHTTP):", \' \', /*#__PURE__*/React.createElement("a", {\n href: "https://payjoin.org/docs/how-it-works/payjoin-v2-bip-77",\n target: "_blank",\n rel: "noreferrer"\n }, "payjoin.org \\u2014 BIP 77"), ".", \' \', "This build uses BIP78 deposit sessions with absolute ", /*#__PURE__*/React.createElement("code", null, "pj="), " where enabled; BIP77 Hub-local experimental mailboxes are available under capabilities ", /*#__PURE__*/React.createElement("code", null, "fabricProtocol"), ". Full v2 directory + OHTTP flows remain a future integration."), /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginTop: \'0.65em\',\n maxWidth: \'52rem\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Regtest coins from another hub"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n lineHeight: 1.45,\n fontSize: \'0.95em\'\n }\n }, "Fabric peers do not move on-chain value. For playnet L1 when your local ", /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/faucet"\n }, "faucet"), " is dry, sync Bitcoin P2P (see ", /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin"\n }, "Bitcoin"), " \\u2192 Network), then request sats from a hub that still has wallet balance \\u2014 e.g.", \' \', /*#__PURE__*/React.createElement("a", {\n href: "https://hub.fabric.pub/services/bitcoin/faucet",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "hub.fabric.pub/services/bitcoin/faucet"), \' \', "(same ", /*#__PURE__*/React.createElement("code", null, "bcrt1\\u2026"), " receive address as on your Faucet page).")), isLoggedIn && typeof onAddPeer === \'function\' ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.65em\',\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5em\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n primary: true,\n type: "button",\n onClick: function onClick() {\n writePrimaryPeerAddress(DEFAULT_PRIMARY_FABRIC_HUB);\n onAddPeer({\n address: DEFAULT_PRIMARY_FABRIC_HUB\n });\n },\n title: "Remember as primary and call AddPeer for the public Fabric hub"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "star",\n "aria-hidden": "true"\n }), "Add primary hub (", DEFAULT_PRIMARY_FABRIC_HUB, ")"), /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontSize: \'0.88em\'\n }\n }, "Saved primary: ", /*#__PURE__*/React.createElement("code", null, readPrimaryPeerAddress()), " \\u2014 sorted first when connected.")) : null)), /*#__PURE__*/React.createElement(Grid.Row, null, /*#__PURE__*/React.createElement(Grid.Column, {\n width: 16\n }, /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n size: "small"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "video"\n }), \' \', "Browser mesh (WebRTC signaling)", /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: webrtcCombined.length > 0 ? \'blue\' : \'grey\',\n style: {\n marginLeft: \'0.5em\'\n }\n }, webrtcCombined.length, " registered"), webrtcPeers.length > 0 ? /*#__PURE__*/React.createElement(Label, {\n size: "small",\n basic: true,\n color: "blue",\n style: {\n marginLeft: \'0.35em\'\n },\n title: "Hub signaling registry (may overlap mesh)"\n }, webrtcPeers.length, " signaling") : null, localWebrtcPeers.length > 0 ? /*#__PURE__*/React.createElement(Label, {\n size: "small",\n basic: true,\n color: "teal",\n style: {\n marginLeft: \'0.35em\'\n }\n }, localWebrtcPeers.length, " local mesh") : null), meshStatus ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0.65em\',\n color: \'#555\',\n fontSize: \'0.92em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Your signaling id:"), \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, meshStatus.peerId || \'initializing…\'), \' · \', /*#__PURE__*/React.createElement("strong", null, "Mesh:"), " ", meshStatus.connected, "/", meshStatus.maxPeers, " connected", meshStatus.connecting > 0 ? ", ".concat(meshStatus.connecting, " connecting") : \'\', \' · \', /*#__PURE__*/React.createElement("strong", null, "Ready:"), " ", meshStatus.ready ? \'yes\' : \'no\') : /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0.65em\',\n color: \'#666\',\n fontSize: \'0.92em\'\n }\n }, "Native WebRTC through this hub; rows below correlate to ", /*#__PURE__*/React.createElement("strong", null, "Fabric Peer ID"), " when P2P identity is confirmed."), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\',\n marginBottom: \'0.5em\'\n }\n }, typeof onRepublishWebRTCOffer === \'function\' ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n onClick: onRepublishWebRTCOffer,\n title: "Republish your offer to hub signaling"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Republish offer") : null, meshStatus && meshStatus.slotsAvailable > 0 && typeof onDiscoverWebRTCPeers === \'function\' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n primary: true,\n onClick: onDiscoverWebRTCPeers,\n title: "Discover peers (".concat(meshStatus.slotsAvailable, " slots)")\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "search"\n }), "Discover peers"), /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\',\n fontSize: \'0.88em\'\n }\n }, meshStatus.slotsAvailable, " slot", meshStatus.slotsAvailable !== 1 ? \'s\' : \'\', " free")) : null, typeof onConnectWebRTCPeer === \'function\' ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n onClick: this._openConnectPeerModal,\n title: "Connect by hub signaling id"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "plug"\n }), "Connect to signaling id\\u2026") : null, meshStatus && meshStatus.connected > 0 && typeof onSendWebRTCTestPing === \'function\' ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n onClick: function onClick() {\n try {\n onSendWebRTCTestPing();\n } catch (e) {}\n },\n title: "Test ping to all mesh peers"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "signal"\n }), "Ping mesh") : null, localWebrtcPeers.length > 0 && typeof onDisconnectAllWebRTCPeers === \'function\' ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n color: "red",\n onClick: function onClick() {\n try {\n onDisconnectAllWebRTCPeers();\n } catch (e) {}\n },\n title: "Disconnect all local mesh links"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "unlink"\n }), "Disconnect all") : null), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontStyle: \'italic\',\n margin: 0,\n lineHeight: 1.45,\n fontSize: \'0.9em\'\n }\n }, "Mesh peers appear in ", /*#__PURE__*/React.createElement("strong", null, "Fabric peers"), " below with a ", /*#__PURE__*/React.createElement("strong", null, "Mesh"), " tag, reputation ", /*#__PURE__*/React.createElement("strong", null, "score"), " / ", /*#__PURE__*/React.createElement("strong", null, "misbehavior"), ", and detail route ", /*#__PURE__*/React.createElement("code", null, "/peers/"), ". Oversized frames, bad gossip, or invalid JSON can trigger disconnects."))), topologyDot ? /*#__PURE__*/React.createElement(Grid.Row, null, /*#__PURE__*/React.createElement(Grid.Column, {\n width: 16\n }, /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "peers-topology-h3",\n "aria-describedby": "peers-topology-desc"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n size: "small",\n id: "peers-topology-h3"\n }, "Peer topology"), /*#__PURE__*/React.createElement("p", {\n id: "peers-topology-desc",\n style: {\n color: \'#666\',\n marginBottom: \'0.65em\',\n lineHeight: 1.45\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Solid"), " edges: TCP peers in this snapshot. ", /*#__PURE__*/React.createElement("strong", null, "Dotted"), ": ids from ", /*#__PURE__*/React.createElement("code", null, "P2P_PEER_GOSSIP"), " (~20 min client cache). Use peer detail ", /*#__PURE__*/React.createElement("strong", null, "Docs"), " for document-offer requests; add TCP peers for ids you need directly."), /*#__PURE__*/React.createElement(GraphDocumentPreview, {\n dotSource: topologyDot,\n skipIdentityGate: true\n }), /*#__PURE__*/React.createElement("details", {\n style: {\n marginTop: \'0.65rem\'\n }\n }, /*#__PURE__*/React.createElement("summary", {\n style: {\n cursor: \'pointer\',\n color: \'#555\'\n }\n }, "DOT source"), /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n fontSize: \'0.75rem\',\n background: \'#f7f7f7\',\n padding: \'0.5rem\',\n borderRadius: 4\n }\n }, topologyDot))))) : null))), networkStatus ? /*#__PURE__*/React.createElement(Segment, {\n style: {\n borderRadius: 4,\n marginTop: \'1rem\',\n boxShadow: \'0 1px 6px rgba(0,0,0,0.06)\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'flex-start\',\n justifyContent: \'space-between\',\n gap: \'0.75em\',\n flexWrap: \'wrap\',\n marginBottom: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n margin: 0\n }\n }, "Fabric peers", /*#__PURE__*/React.createElement(Label, {\n size: "small",\n basic: true,\n color: "green",\n style: {\n marginLeft: \'0.5em\',\n verticalAlign: \'middle\'\n }\n }, unifiedPeers.length, " in view")), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, fabricPeersSorted.filter(function (p) {\n return !isWebrtcTransportPeerRow(p);\n }).length, " TCP \\xB7", \' \', fabricPeersSorted.filter(function (p) {\n return isWebrtcTransportPeerRow(p);\n }).length, " mesh (hub status)", webrtcExtraRows.length > 0 ? " \\xB7 ".concat(webrtcExtraRows.length, " mesh (local only)") : \'\')), isLoggedIn ? /*#__PURE__*/React.createElement(Button.Group, {\n size: "small"\n }, typeof onRefreshPeers === \'function\' ? /*#__PURE__*/React.createElement(Button, {\n icon: true,\n labelPosition: "left",\n onClick: onRefreshPeers,\n title: "Refresh peer list"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh") : null, /*#__PURE__*/React.createElement(Button, {\n primary: true,\n type: "button",\n onClick: function onClick() {\n if (typeof onAddPeer !== \'function\') return;\n _this3._openAddPeerModal();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "add"\n }), "Add peer")) : null), unifiedPeers.length > 0 ? /*#__PURE__*/React.createElement(UnifiedPeersPaginatedList, {\n unifiedPeers: unifiedPeers,\n primaryPeerNorm: primaryPeerNorm,\n signalingHostPort: signalingHostPort,\n globalPeers: globalPeers,\n onDisconnectWebRTCPeer: onDisconnectWebRTCPeer,\n onFabricPeerResync: onFabricPeerResync\n }) : /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontStyle: \'italic\',\n marginTop: \'0.5em\',\n lineHeight: 1.45\n }\n }, "No TCP or mesh peers yet. Add ", /*#__PURE__*/React.createElement("code", null, DEFAULT_PRIMARY_FABRIC_HUB), " or ", /*#__PURE__*/React.createElement("strong", null, "Add peer"), " for Fabric ", /*#__PURE__*/React.createElement("code", null, "host:port"), " (", /*#__PURE__*/React.createElement("code", null, "7777"), "). Browsers register for WebRTC; connected mesh rows show ", /*#__PURE__*/React.createElement("strong", null, "Mesh"), " and reputation.")) : null, /*#__PURE__*/React.createElement(Segment, {\n basic: true,\n style: {\n marginTop: \'1rem\',\n paddingTop: 0\n },\n id: "peers-page-footer"\n }, /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n color: \'#777\',\n fontSize: \'0.88em\',\n lineHeight: 1.5,\n maxWidth: \'52rem\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Protocol:"), " Fabric P2P uses secp256k1-signed ", /*#__PURE__*/React.createElement("code", null, "Message"), " envelopes; the header ", /*#__PURE__*/React.createElement("code", null, "hash"), " is double-SHA256 of the body so tampering is detected. Sessions and inventory are attributed to the same ", /*#__PURE__*/React.createElement("strong", null, "Fabric Peer ID"), " once the TCP path confirms identity. For field semantics see ", /*#__PURE__*/React.createElement("code", null, "fabric/docs/MESSAGE_SECURITY.md"), " in the Fabric repo.")), /*#__PURE__*/React.createElement(Modal, {\n open: this.state.addPeerModalOpen,\n onClose: this._closeAddPeerModal,\n onOpen: function onOpen() {\n var el = typeof document !== \'undefined\' && document.getElementById(\'fabric-add-peer-address\');\n if (el && typeof el.focus === \'function\') {\n window.requestAnimationFrame(function () {\n return el.focus();\n });\n }\n },\n size: "small",\n closeOnDimmerClick: true,\n closeOnEscape: true\n }, /*#__PURE__*/React.createElement(Modal.Header, null, "Add Fabric peer"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: 0,\n color: \'#555\'\n }\n }, "TCP address for Fabric P2P (default port ", /*#__PURE__*/React.createElement("code", null, "7777"), "). You can paste a full URL \\u2014 it will be normalized."), /*#__PURE__*/React.createElement(Form, {\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n _this3._submitAddPeer();\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-add-peer-address"\n }, "Peer address"), /*#__PURE__*/React.createElement(Input, {\n id: "fabric-add-peer-address",\n placeholder: "host:port or host (e.g. hub.fabric.pub)",\n value: this.state.addPeerDraft,\n onChange: function onChange(e) {\n return _this3.setState({\n addPeerDraft: e.target.value\n });\n },\n onKeyDown: function onKeyDown(e) {\n if (e.key === \'Enter\') {\n e.preventDefault();\n _this3._submitAddPeer();\n }\n }\n })))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: this._closeAddPeerModal\n }, "Cancel"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n onClick: this._submitAddPeer\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "add"\n }), "Add peer"))), /*#__PURE__*/React.createElement(Modal, {\n open: this.state.connectPeerModalOpen,\n onClose: this._closeConnectPeerModal,\n size: "tiny",\n closeOnDimmerClick: true,\n closeOnEscape: true\n }, /*#__PURE__*/React.createElement(Modal.Header, null, "Connect to WebRTC signaling id"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: 0,\n color: \'#555\',\n fontSize: \'0.92em\',\n lineHeight: 1.45\n }\n }, "Hub-registered signaling id (e.g. ", /*#__PURE__*/React.createElement("code", null, "fabric-bridge-\\u2026"), "). After the mesh links, traffic is still attributed to ", /*#__PURE__*/React.createElement("strong", null, "Fabric Peer ID"), " when the bridge confirms P2P identity."), /*#__PURE__*/React.createElement(Form, {\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n _this3._submitConnectPeerModal();\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "peers-connect-peer-id"\n }, "WebRTC signaling id"), /*#__PURE__*/React.createElement(Input, {\n id: "peers-connect-peer-id",\n placeholder: "fabric-bridge-\\u2026",\n value: this.state.connectPeerIdDraft,\n onChange: function onChange(e) {\n return _this3.setState({\n connectPeerIdDraft: e.target.value\n });\n }\n })))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: this._closeConnectPeerModal\n }, "Cancel"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n onClick: this._submitConnectPeerModal\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "plug"\n }), "Connect"))));\n }\n }]);\n}(React.Component);\nfunction PeersPageWithLocation(props) {\n var location = useLocation();\n return /*#__PURE__*/React.createElement(PeersPage, _extends({}, props, {\n location: location\n }));\n}\nmodule.exports = PeersPageWithLocation;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL1BlZXJMaXN0LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQUEsU0FBQUEsU0FBQSxXQUFBQSxRQUFBLEdBQUFDLE1BQUEsQ0FBQUMsTUFBQSxHQUFBRCxNQUFBLENBQUFDLE1BQUEsQ0FBQUMsSUFBQSxlQUFBQyxDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsRUFBQUYsQ0FBQSxVQUFBRyxDQUFBLEdBQUFGLFNBQUEsQ0FBQUQsQ0FBQSxZQUFBSSxDQUFBLElBQUFELENBQUEsT0FBQUUsY0FBQSxDQUFBQyxJQUFBLENBQUFILENBQUEsRUFBQUMsQ0FBQSxNQUFBTCxDQUFBLENBQUFLLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLGFBQUFMLENBQUEsS0FBQUosUUFBQSxDQUFBWSxLQUFBLE9BQUFOLFNBQUE7QUFBQSxTQUFBTywyQkFBQUosQ0FBQSxFQUFBSixDQUFBLFFBQUFHLENBQUEseUJBQUFNLE1BQUEsSUFBQUwsQ0FBQSxDQUFBSyxNQUFBLENBQUFDLFFBQUEsS0FBQU4sQ0FBQSxxQkFBQUQsQ0FBQSxRQUFBUSxLQUFBLENBQUFDLE9BQUEsQ0FBQVIsQ0FBQSxNQUFBRCxDQUFBLEdBQUFVLDJCQUFBLENBQUFULENBQUEsTUFBQUosQ0FBQSxJQUFBSSxDQUFBLHVCQUFBQSxDQUFBLENBQUFGLE1BQUEsSUFBQUMsQ0FBQSxLQUFBQyxDQUFBLEdBQUFELENBQUEsT0FBQVcsRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFoQixDQUFBLFdBQUFBLEVBQUEsV0FBQWUsRUFBQSxJQUFBVixDQUFBLENBQUFGLE1BQUEsS0FBQWUsSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQWQsQ0FBQSxDQUFBVSxFQUFBLFVBQUFkLENBQUEsV0FBQUEsRUFBQUksQ0FBQSxVQUFBQSxDQUFBLEtBQUFlLENBQUEsRUFBQUosQ0FBQSxnQkFBQUssU0FBQSxpSkFBQUMsQ0FBQSxFQUFBQyxDQUFBLE9BQUFDLENBQUEsZ0JBQUFQLENBQUEsV0FBQUEsRUFBQSxJQUFBYixDQUFBLEdBQUFBLENBQUEsQ0FBQUcsSUFBQSxDQUFBRixDQUFBLE1BQUFMLENBQUEsV0FBQUEsRUFBQSxRQUFBSyxDQUFBLEdBQUFELENBQUEsQ0FBQXFCLElBQUEsV0FBQUYsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBYSxJQUFBLEVBQUFiLENBQUEsS0FBQUosQ0FBQSxXQUFBQSxFQUFBSSxDQUFBLElBQUFtQixDQUFBLE9BQUFGLENBQUEsR0FBQWpCLENBQUEsS0FBQWUsQ0FBQSxXQUFBQSxFQUFBLFVBQUFHLENBQUEsWUFBQW5CLENBQUEsY0FBQUEsQ0FBQSw4QkFBQW9CLENBQUEsUUFBQUYsQ0FBQTtBQUFBLFNBQUFJLFFBQUF6QixDQUFBLEVBQUFJLENBQUEsUUFBQUQsQ0FBQSxHQUFBUCxNQUFBLENBQUE4QixJQUFBLENBQUExQixDQUFBLE9BQUFKLE1BQUEsQ0FBQStCLHFCQUFBLFFBQUFOLENBQUEsR0FBQXpCLE1BQUEsQ0FBQStCLHFCQUFBLENBQUEzQixDQUFBLEdBQUFJLENBQUEsS0FBQWlCLENBQUEsR0FBQUEsQ0FBQSxDQUFBTyxNQUFBLFdBQUF4QixDQUFBLFdBQUFSLE1BQUEsQ0FBQWlDLHdCQUFBLENBQUE3QixDQUFBLEVBQUFJLENBQUEsRUFBQTBCLFVBQUEsT0FBQTNCLENBQUEsQ0FBQTRCLElBQUEsQ0FBQXhCLEtBQUEsQ0FBQUosQ0FBQSxFQUFBa0IsQ0FBQSxZQUFBbEIsQ0FBQTtBQUFBLFNBQUE2QixjQUFBaEMsQ0FBQSxhQUFBSSxDQUFBLE1BQUFBLENBQUEsR0FBQUgsU0FBQSxDQUFBQyxNQUFBLEVBQUFFLENBQUEsVUFBQUQsQ0FBQSxXQUFBRixTQUFBLENBQUFHLENBQUEsSUFBQUgsU0FBQSxDQUFBRyxDQUFBLFFBQUFBLENBQUEsT0FBQXFCLE9BQUEsQ0FBQTdCLE1BQUEsQ0FBQU8sQ0FBQSxPQUFBOEIsT0FBQSxXQUFBN0IsQ0FBQSxJQUFBOEIsZUFBQSxDQUFBbEMsQ0FBQSxFQUFBSSxDQUFBLEVBQUFELENBQUEsQ0FBQUMsQ0FBQSxTQUFBUixNQUFBLENBQUF1Qyx5QkFBQSxHQUFBdkMsTUFBQSxDQUFBd0MsZ0JBQUEsQ0FBQXBDLENBQUEsRUFBQUosTUFBQSxDQUFBdUMseUJBQUEsQ0FBQWhDLENBQUEsS0FBQXNCLE9BQUEsQ0FBQTdCLE1BQUEsQ0FBQU8sQ0FBQSxHQUFBOEIsT0FBQSxXQUFBN0IsQ0FBQSxJQUFBUixNQUFBLENBQUF5QyxjQUFBLENBQUFyQyxDQUFBLEVBQUFJLENBQUEsRUFBQVIsTUFBQSxDQUFBaUMsd0JBQUEsQ0FBQTFCLENBQUEsRUFBQUMsQ0FBQSxpQkFBQUosQ0FBQTtBQUFBLFNBQUFzQyxnQkFBQWhCLENBQUEsRUFBQXZCLENBQUEsVUFBQXVCLENBQUEsWUFBQXZCLENBQUEsYUFBQXFCLFNBQUE7QUFBQSxTQUFBbUIsa0JBQUF2QyxDQUFBLEVBQUFJLENBQUEsYUFBQUQsQ0FBQSxNQUFBQSxDQUFBLEdBQUFDLENBQUEsQ0FBQUYsTUFBQSxFQUFBQyxDQUFBLFVBQUFrQixDQUFBLEdBQUFqQixDQUFBLENBQUFELENBQUEsR0FBQWtCLENBQUEsQ0FBQVMsVUFBQSxHQUFBVCxDQUFBLENBQUFTLFVBQUEsUUFBQVQsQ0FBQSxDQUFBbUIsWUFBQSxrQkFBQW5CLENBQUEsS0FBQUEsQ0FBQSxDQUFBb0IsUUFBQSxRQUFBN0MsTUFBQSxDQUFBeUMsY0FBQSxDQUFBckMsQ0FBQSxFQUFBMEMsY0FBQSxDQUFBckIsQ0FBQSxDQUFBc0IsR0FBQSxHQUFBdEIsQ0FBQTtBQUFBLFNBQUF1QixhQUFBNUMsQ0FBQSxFQUFBSSxDQUFBLEVBQUFELENBQUEsV0FBQUMsQ0FBQSxJQUFBbUMsaUJBQUEsQ0FBQXZDLENBQUEsQ0FBQTZDLFNBQUEsRUFBQXpDLENBQUEsR0FBQUQsQ0FBQSxJQUFBb0MsaUJBQUEsQ0FBQXZDLENBQUEsRUFBQUcsQ0FBQSxHQUFBUCxNQUFBLENBQUF5QyxjQUFBLENBQUFyQyxDQUFBLGlCQUFBeUMsUUFBQSxTQUFBekMsQ0FBQTtBQUFBLFNBQUE4QyxXQUFBM0MsQ0FBQSxFQUFBa0IsQ0FBQSxFQUFBckIsQ0FBQSxXQUFBcUIsQ0FBQSxHQUFBMEIsZUFBQSxDQUFBMUIsQ0FBQSxHQUFBMkIsMEJBQUEsQ0FBQTdDLENBQUEsRUFBQThDLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBOUIsQ0FBQSxFQUFBckIsQ0FBQSxRQUFBK0MsZUFBQSxDQUFBNUMsQ0FBQSxFQUFBaUQsV0FBQSxJQUFBL0IsQ0FBQSxDQUFBZCxLQUFBLENBQUFKLENBQUEsRUFBQUgsQ0FBQTtBQUFBLFNBQUFnRCwyQkFBQTdDLENBQUEsRUFBQUgsQ0FBQSxRQUFBQSxDQUFBLGlCQUFBcUQsT0FBQSxDQUFBckQsQ0FBQSwwQkFBQUEsQ0FBQSxVQUFBQSxDQUFBLGlCQUFBQSxDQUFBLFlBQUFvQixTQUFBLHFFQUFBa0Msc0JBQUEsQ0FBQW5ELENBQUE7QUFBQSxTQUFBbUQsdUJBQUF0RCxDQUFBLG1CQUFBQSxDQUFBLFlBQUF1RCxjQUFBLHNFQUFBdkQsQ0FBQTtBQUFBLFNBQUFpRCwwQkFBQSxjQUFBOUMsQ0FBQSxJQUFBcUQsT0FBQSxDQUFBWCxTQUFBLENBQUFZLE9BQUEsQ0FBQW5ELElBQUEsQ0FBQTRDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBSyxPQUFBLGlDQUFBckQsQ0FBQSxhQUFBOEMseUJBQUEsWUFBQUEsMEJBQUEsYUFBQTlDLENBQUE7QUFBQSxTQUFBNEMsZ0JBQUE1QyxDQUFBLFdBQUE0QyxlQUFBLEdBQUFuRCxNQUFBLENBQUE4RCxjQUFBLEdBQUE5RCxNQUFBLENBQUErRCxjQUFBLENBQUE3RCxJQUFBLGVBQUFLLENBQUEsV0FBQUEsQ0FBQSxDQUFBeUQsU0FBQSxJQUFBaEUsTUFBQSxDQUFBK0QsY0FBQSxDQUFBeEQsQ0FBQSxNQUFBNEMsZUFBQSxDQUFBNUMsQ0FBQTtBQUFBLFNBQUEwRCxVQUFBMUQsQ0FBQSxFQUFBSCxDQUFBLDZCQUFBQSxDQUFBLGFBQUFBLENBQUEsWUFBQW9CLFNBQUEsd0RBQUFqQixDQUFBLENBQUEwQyxTQUFBLEdBQUFqRCxNQUFBLENBQUFrRSxNQUFBLENBQUE5RCxDQUFBLElBQUFBLENBQUEsQ0FBQTZDLFNBQUEsSUFBQU8sV0FBQSxJQUFBbEMsS0FBQSxFQUFBZixDQUFBLEVBQUFzQyxRQUFBLE1BQUFELFlBQUEsV0FBQTVDLE1BQUEsQ0FBQXlDLGNBQUEsQ0FBQWxDLENBQUEsaUJBQUFzQyxRQUFBLFNBQUF6QyxDQUFBLElBQUErRCxlQUFBLENBQUE1RCxDQUFBLEVBQUFILENBQUE7QUFBQSxTQUFBK0QsZ0JBQUE1RCxDQUFBLEVBQUFILENBQUEsV0FBQStELGVBQUEsR0FBQW5FLE1BQUEsQ0FBQThELGNBQUEsR0FBQTlELE1BQUEsQ0FBQThELGNBQUEsQ0FBQTVELElBQUEsZUFBQUssQ0FBQSxFQUFBSCxDQUFBLFdBQUFHLENBQUEsQ0FBQXlELFNBQUEsR0FBQTVELENBQUEsRUFBQUcsQ0FBQSxLQUFBNEQsZUFBQSxDQUFBNUQsQ0FBQSxFQUFBSCxDQUFBO0FBQUEsU0FBQWtDLGdCQUFBbEMsQ0FBQSxFQUFBSSxDQUFBLEVBQUFELENBQUEsWUFBQUMsQ0FBQSxHQUFBc0MsY0FBQSxDQUFBdEMsQ0FBQSxNQUFBSixDQUFBLEdBQUFKLE1BQUEsQ0FBQXlDLGNBQUEsQ0FBQXJDLENBQUEsRUFBQUksQ0FBQSxJQUFBYyxLQUFBLEVBQUFmLENBQUEsRUFBQTJCLFVBQUEsTUFBQVUsWUFBQSxNQUFBQyxRQUFBLFVBQUF6QyxDQUFBLENBQUFJLENBQUEsSUFBQUQsQ0FBQSxFQUFBSCxDQUFBO0FBQUEsU0FBQTBDLGVBQUF2QyxDQUFBLFFBQUE2RCxDQUFBLEdBQUFDLFlBQUEsQ0FBQTlELENBQUEsZ0NBQUFrRCxPQUFBLENBQUFXLENBQUEsSUFBQUEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQUMsYUFBQTlELENBQUEsRUFBQUMsQ0FBQSxvQkFBQWlELE9BQUEsQ0FBQWxELENBQUEsTUFBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFILENBQUEsR0FBQUcsQ0FBQSxDQUFBTSxNQUFBLENBQUF5RCxXQUFBLGtCQUFBbEUsQ0FBQSxRQUFBZ0UsQ0FBQSxHQUFBaEUsQ0FBQSxDQUFBTSxJQUFBLENBQUFILENBQUEsRUFBQUMsQ0FBQSxnQ0FBQWlELE9BQUEsQ0FBQVcsQ0FBQSxVQUFBQSxDQUFBLFlBQUE1QyxTQUFBLHlFQUFBaEIsQ0FBQSxHQUFBK0QsTUFBQSxHQUFBQyxNQUFBLEVBQUFqRSxDQUFBO0FBQUEsU0FBQWtFLG1CQUFBakUsQ0FBQSxXQUFBa0Usa0JBQUEsQ0FBQWxFLENBQUEsS0FBQW1FLGdCQUFBLENBQUFuRSxDQUFBLEtBQUFTLDJCQUFBLENBQUFULENBQUEsS0FBQW9FLGtCQUFBO0FBQUEsU0FBQUEsbUJBQUEsY0FBQXBELFNBQUE7QUFBQSxTQUFBUCw0QkFBQVQsQ0FBQSxFQUFBa0IsQ0FBQSxRQUFBbEIsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBcUUsaUJBQUEsQ0FBQXJFLENBQUEsRUFBQWtCLENBQUEsT0FBQW5CLENBQUEsTUFBQXVFLFFBQUEsQ0FBQXBFLElBQUEsQ0FBQUYsQ0FBQSxFQUFBdUUsS0FBQSw2QkFBQXhFLENBQUEsSUFBQUMsQ0FBQSxDQUFBZ0QsV0FBQSxLQUFBakQsQ0FBQSxHQUFBQyxDQUFBLENBQUFnRCxXQUFBLENBQUF3QixJQUFBLGFBQUF6RSxDQUFBLGNBQUFBLENBQUEsR0FBQVEsS0FBQSxDQUFBa0UsSUFBQSxDQUFBekUsQ0FBQSxvQkFBQUQsQ0FBQSwrQ0FBQTJFLElBQUEsQ0FBQTNFLENBQUEsSUFBQXNFLGlCQUFBLENBQUFyRSxDQUFBLEVBQUFrQixDQUFBO0FBQUEsU0FBQWlELGlCQUFBbkUsQ0FBQSw4QkFBQUssTUFBQSxZQUFBTCxDQUFBLENBQUFLLE1BQUEsQ0FBQUMsUUFBQSxhQUFBTixDQUFBLHVCQUFBTyxLQUFBLENBQUFrRSxJQUFBLENBQUF6RSxDQUFBO0FBQUEsU0FBQWtFLG1CQUFBbEUsQ0FBQSxRQUFBTyxLQUFBLENBQUFDLE9BQUEsQ0FBQVIsQ0FBQSxVQUFBcUUsaUJBQUEsQ0FBQXJFLENBQUE7QUFBQSxTQUFBcUUsa0JBQUFyRSxDQUFBLEVBQUFrQixDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBRixNQUFBLE1BQUFvQixDQUFBLEdBQUFsQixDQUFBLENBQUFGLE1BQUEsWUFBQUYsQ0FBQSxNQUFBRCxDQUFBLEdBQUFZLEtBQUEsQ0FBQVcsQ0FBQSxHQUFBdEIsQ0FBQSxHQUFBc0IsQ0FBQSxFQUFBdEIsQ0FBQSxJQUFBRCxDQUFBLENBQUFDLENBQUEsSUFBQUksQ0FBQSxDQUFBSixDQUFBLFVBQUFELENBQUE7QUFBQSxTQUFBc0QsUUFBQWhDLENBQUEsc0NBQUFnQyxPQUFBLHdCQUFBNUMsTUFBQSx1QkFBQUEsTUFBQSxDQUFBQyxRQUFBLGFBQUFXLENBQUEsa0JBQUFBLENBQUEsZ0JBQUFBLENBQUEsV0FBQUEsQ0FBQSx5QkFBQVosTUFBQSxJQUFBWSxDQUFBLENBQUErQixXQUFBLEtBQUEzQyxNQUFBLElBQUFZLENBQUEsS0FBQVosTUFBQSxDQUFBb0MsU0FBQSxxQkFBQXhCLENBQUEsS0FBQWdDLE9BQUEsQ0FBQWhDLENBQUE7QUFDQSxJQUFNMEQsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLDRDQUFPLENBQUM7QUFDOUIsSUFBQUMsUUFBQSxHQUEyQ0QsbUJBQU8sQ0FBQyx1RUFBa0IsQ0FBQztFQUE5REUsV0FBVyxHQUFBRCxRQUFBLENBQVhDLFdBQVc7RUFBRUMsSUFBSSxHQUFBRixRQUFBLENBQUpFLElBQUk7RUFBRUMsV0FBVyxHQUFBSCxRQUFBLENBQVhHLFdBQVc7QUFFdEMsSUFBQUMsU0FBQSxHQWdCSUwsbUJBQU8sQ0FBQyw0RUFBbUIsQ0FBQztFQWY5Qk0sTUFBTSxHQUFBRCxTQUFBLENBQU5DLE1BQU07RUFDTkMsT0FBTyxHQUFBRixTQUFBLENBQVBFLE9BQU87RUFDUEMsSUFBSSxHQUFBSCxTQUFBLENBQUpHLElBQUk7RUFDSkMsSUFBSSxHQUFBSixTQUFBLENBQUpJLElBQUk7RUFDSkMsTUFBTSxHQUFBTCxTQUFBLENBQU5LLE1BQU07RUFDTkMsSUFBSSxHQUFBTixTQUFBLENBQUpNLElBQUk7RUFDSkMsS0FBSyxHQUFBUCxTQUFBLENBQUxPLEtBQUs7RUFDTEMsS0FBSyxHQUFBUixTQUFBLENBQUxRLEtBQUs7RUFDTEMsSUFBSSxHQUFBVCxTQUFBLENBQUpTLElBQUk7RUFDSkMsTUFBTSxHQUFBVixTQUFBLENBQU5VLE1BQU07RUFDTkMsT0FBTyxHQUFBWCxTQUFBLENBQVBXLE9BQU87RUFDUEMsS0FBSyxHQUFBWixTQUFBLENBQUxZLEtBQUs7RUFDTEMsT0FBTyxHQUFBYixTQUFBLENBQVBhLE9BQU87RUFDUEMsU0FBUyxHQUFBZCxTQUFBLENBQVRjLFNBQVM7RUFDVEMsS0FBSyxHQUFBZixTQUFBLENBQUxlLEtBQUs7QUFFUCxJQUFNQyxvQkFBb0IsR0FBR3JCLG1CQUFPLENBQUMsb0VBQXdCLENBQUM7QUFDOUQsSUFBQXNCLFNBQUEsR0FBOEJ0QixtQkFBTyxDQUFDLG9FQUE4QixDQUFDO0VBQTdEdUIsaUJBQWlCLEdBQUFELFNBQUEsQ0FBakJDLGlCQUFpQjtBQUN6QixJQUFBQyxTQUFBLEdBQW9DeEIsbUJBQU8sQ0FBQyxzRUFBK0IsQ0FBQztFQUFwRXlCLHVCQUF1QixHQUFBRCxTQUFBLENBQXZCQyx1QkFBdUI7QUFDL0IsSUFBQUMsU0FBQSxHQWFJMUIsbUJBQU8sQ0FBQyw4REFBMkIsQ0FBQztFQVp0QzJCLDBCQUEwQixHQUFBRCxTQUFBLENBQTFCQywwQkFBMEI7RUFDMUJDLHlCQUF5QixHQUFBRixTQUFBLENBQXpCRSx5QkFBeUI7RUFDekJDLGlCQUFpQixHQUFBSCxTQUFBLENBQWpCRyxpQkFBaUI7RUFDakJDLHNCQUFzQixHQUFBSixTQUFBLENBQXRCSSxzQkFBc0I7RUFDdEJDLGtCQUFrQixHQUFBTCxTQUFBLENBQWxCSyxrQkFBa0I7RUFDbEJDLHVCQUF1QixHQUFBTixTQUFBLENBQXZCTSx1QkFBdUI7RUFDdkJDLDBCQUEwQixHQUFBUCxTQUFBLENBQTFCTywwQkFBMEI7RUFDMUJDLGlDQUFpQyxHQUFBUixTQUFBLENBQWpDUSxpQ0FBaUM7RUFDakNDLHVCQUF1QixHQUFBVCxTQUFBLENBQXZCUyx1QkFBdUI7RUFDdkJDLDhCQUE4QixHQUFBVixTQUFBLENBQTlCVSw4QkFBOEI7RUFDOUJDLHlCQUF5QixHQUFBWCxTQUFBLENBQXpCVyx5QkFBeUI7RUFDekJDLHdCQUF3QixHQUFBWixTQUFBLENBQXhCWSx3QkFBd0I7QUFFMUIsSUFBQUMsU0FBQSxHQUdJdkMsbUJBQU8sQ0FBQyx3RUFBZ0MsQ0FBQztFQUYzQ3dDLHFCQUFxQixHQUFBRCxTQUFBLENBQXJCQyxxQkFBcUI7RUFDckJDLDBCQUEwQixHQUFBRixTQUFBLENBQTFCRSwwQkFBMEI7QUFFNUIsSUFBQUMsU0FBQSxHQUdJMUMsbUJBQU8sQ0FBQywwRUFBaUMsQ0FBQztFQUY1QzJDLGlCQUFpQixHQUFBRCxTQUFBLENBQWpCQyxpQkFBaUI7RUFDakJDLGtCQUFrQixHQUFBRixTQUFBLENBQWxCRSxrQkFBa0I7QUFFcEIsSUFBQUMsU0FBQSxHQUFrQjdDLG1CQUFPLENBQUMsZ0RBQW9CLENBQUM7RUFBdkM4QyxLQUFLLEdBQUFELFNBQUEsQ0FBTEMsS0FBSztBQUNiLElBQU1DLGFBQWEsR0FBRy9DLG1CQUFPLENBQUMsc0RBQWlCLENBQUM7QUFDaEQsSUFBQWdELFNBQUEsR0FBaUNoRCxtQkFBTyxDQUFDLHdFQUFnQyxDQUFDO0VBQWxFaUQsb0JBQW9CLEdBQUFELFNBQUEsQ0FBcEJDLG9CQUFvQjs7QUFFNUI7QUFDQSxJQUFNQywwQkFBMEIsR0FBRyxxQkFBcUI7QUFDeEQsSUFBTUMsd0JBQXdCLEdBQUcsbUNBQW1DO0FBRXBFLFNBQVNDLHNCQUFzQkEsQ0FBQSxFQUFJO0VBQ2pDLElBQUk7SUFDRixJQUFJLE9BQU9DLE1BQU0sS0FBSyxXQUFXLEVBQUU7TUFDakMsSUFBTXJILENBQUMsR0FBR21ELE1BQU0sQ0FBQ3dELGlCQUFpQixDQUFDUSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDRyxJQUFJLENBQUMsQ0FBQztNQUMxRSxPQUFPdEgsQ0FBQyxJQUFJa0gsMEJBQTBCO0lBQ3hDO0VBQ0YsQ0FBQyxDQUFDLE9BQU9sSSxDQUFDLEVBQUUsQ0FBQztFQUNiLE9BQU9rSSwwQkFBMEI7QUFDbkM7QUFFQSxTQUFTSyx1QkFBdUJBLENBQUVDLElBQUksRUFBRTtFQUN0QyxJQUFJO0lBQ0YsSUFBSSxPQUFPSCxNQUFNLEtBQUssV0FBVyxFQUFFO01BQ2pDVCxrQkFBa0IsQ0FBQ08sd0JBQXdCLEVBQUVoRSxNQUFNLENBQUNxRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUNGLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekU7RUFDRixDQUFDLENBQUMsT0FBT3RJLENBQUMsRUFBRSxDQUFDO0FBQ2Y7QUFFQSxTQUFTeUksOEJBQThCQSxDQUFFQyxXQUFXLEVBQUVDLFFBQVEsRUFBRTtFQUM5RCxJQUFJLENBQUNELFdBQVcsSUFBSXJGLE9BQUEsQ0FBT3FGLFdBQVcsTUFBSyxRQUFRLElBQUksQ0FBQ0MsUUFBUSxFQUFFLE9BQU8sSUFBSTtFQUM3RSxJQUFNQyxHQUFHLEdBQUd6RSxNQUFNLENBQUN3RSxRQUFRLENBQUMsQ0FBQ0wsSUFBSSxDQUFDLENBQUM7RUFDbkMsSUFBTU8sTUFBTSxHQUFHSCxXQUFXLENBQUNFLEdBQUcsQ0FBQztFQUMvQixJQUFJQyxNQUFNLElBQUlBLE1BQU0sQ0FBQ0MsU0FBUyxJQUFJbkksS0FBSyxDQUFDQyxPQUFPLENBQUNpSSxNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsU0FBUyxDQUFDLEVBQUU7SUFDM0UsT0FBT0YsTUFBTSxDQUFDQyxTQUFTLENBQUNDLFNBQVMsQ0FBQzdJLE1BQU07RUFDMUM7RUFDQSxTQUFBOEksRUFBQSxNQUFBQyxZQUFBLEdBQWdCckosTUFBTSxDQUFDOEIsSUFBSSxDQUFDZ0gsV0FBVyxDQUFDLEVBQUFNLEVBQUEsR0FBQUMsWUFBQSxDQUFBL0ksTUFBQSxFQUFBOEksRUFBQSxJQUFFO0lBQXJDLElBQU1FLENBQUMsR0FBQUQsWUFBQSxDQUFBRCxFQUFBO0lBQ1YsSUFBTUcsRUFBRSxHQUFHVCxXQUFXLENBQUNRLENBQUMsQ0FBQztJQUN6QixJQUFJQyxFQUFFLElBQUloRixNQUFNLENBQUNnRixFQUFFLENBQUNDLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBS1IsR0FBRyxJQUFJTyxFQUFFLENBQUNMLFNBQVMsSUFBSW5JLEtBQUssQ0FBQ0MsT0FBTyxDQUFDdUksRUFBRSxDQUFDTCxTQUFTLENBQUNDLFNBQVMsQ0FBQyxFQUFFO01BQzlGLE9BQU9JLEVBQUUsQ0FBQ0wsU0FBUyxDQUFDQyxTQUFTLENBQUM3SSxNQUFNO0lBQ3RDO0VBQ0Y7RUFDQSxPQUFPLElBQUk7QUFDYjtBQUVBLFNBQVNtSix5QkFBeUJBLENBQUFDLElBQUEsRUFPL0I7RUFBQSxJQU5EQyxZQUFZLEdBQUFELElBQUEsQ0FBWkMsWUFBWTtJQUNaQyxlQUFlLEdBQUFGLElBQUEsQ0FBZkUsZUFBZTtJQUNmQyxpQkFBaUIsR0FBQUgsSUFBQSxDQUFqQkcsaUJBQWlCO0lBQ2pCZixXQUFXLEdBQUFZLElBQUEsQ0FBWFosV0FBVztJQUNYZ0Isc0JBQXNCLEdBQUFKLElBQUEsQ0FBdEJJLHNCQUFzQjtJQUN0QkMsa0JBQWtCLEdBQUFMLElBQUEsQ0FBbEJLLGtCQUFrQjtFQUVsQixJQUFNQyxRQUFRLEdBQUd4RSxXQUFXLENBQUMsQ0FBQztFQUM5QixJQUFNeUUsS0FBSyxHQUFHTixZQUFZLENBQUMsQ0FBQyxDQUFDO0VBQzdCLElBQU1PLElBQUksR0FBR1AsWUFBWSxDQUFDckosTUFBTSxHQUFHcUosWUFBWSxDQUFDQSxZQUFZLENBQUNySixNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSTtFQUMvRSxJQUFNNkosUUFBUSxNQUFBQyxNQUFBLENBQU1ULFlBQVksQ0FBQ3JKLE1BQU0sT0FBQThKLE1BQUEsQ0FBSUgsS0FBSyxLQUFLQSxLQUFLLENBQUNULEVBQUUsSUFBSVMsS0FBSyxDQUFDSSxPQUFPLENBQUMsT0FBQUQsTUFBQSxDQUFJRixJQUFJLEtBQUtBLElBQUksQ0FBQ1YsRUFBRSxJQUFJVSxJQUFJLENBQUNHLE9BQU8sQ0FBQyxDQUFFO0VBQ3RILElBQUFDLHFCQUFBLEdBUUlqQyxvQkFBb0IsQ0FBQ3NCLFlBQVksRUFBRVEsUUFBUSxDQUFDO0lBUDlDcEYsS0FBSyxHQUFBdUYscUJBQUEsQ0FBTHZGLEtBQUs7SUFDTHdGLElBQUksR0FBQUQscUJBQUEsQ0FBSkMsSUFBSTtJQUNKQyxVQUFVLEdBQUFGLHFCQUFBLENBQVZFLFVBQVU7SUFDVkMsU0FBUyxHQUFBSCxxQkFBQSxDQUFURyxTQUFTO0lBQ1RDLE9BQU8sR0FBQUoscUJBQUEsQ0FBUEksT0FBTztJQUNQQyxLQUFLLEdBQUFMLHFCQUFBLENBQUxLLEtBQUs7SUFDTEMsT0FBTyxHQUFBTixxQkFBQSxDQUFQTSxPQUFPO0VBR1QsSUFBTUMsS0FBSyxHQUFHdEcsTUFBTSxDQUFDc0YsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUNuQixJQUFJLENBQUMsQ0FBQztFQUNwRCxJQUFNb0MsRUFBRSxHQUFHaEMsV0FBVyxJQUFJckYsT0FBQSxDQUFPcUYsV0FBVyxNQUFLLFFBQVEsR0FBR0EsV0FBVyxHQUFHLElBQUk7RUFFOUUsb0JBQ0UzRCxLQUFBLENBQUE0RixhQUFBLENBQUE1RixLQUFBLENBQUE2RixRQUFBLHFCQUNFN0YsS0FBQSxDQUFBNEYsYUFBQSxDQUFDdkUsS0FBSztJQUNKeUUsT0FBTztJQUNQQyxNQUFNO0lBQ05DLE9BQU87SUFDUEMsVUFBVTtJQUNWQyxJQUFJLEVBQUMsT0FBTztJQUNaQyxXQUFXO0lBQ1hDLEtBQUssRUFBRTtNQUFFQyxTQUFTLEVBQUUsUUFBUTtNQUFFQyxXQUFXLEVBQUU7SUFBUTtFQUFFLGdCQUVyRHRHLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3ZFLEtBQUssQ0FBQ1YsTUFBTSxxQkFDWFgsS0FBQSxDQUFBNEYsYUFBQSxDQUFDdkUsS0FBSyxDQUFDa0YsR0FBRyxxQkFDUnZHLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3ZFLEtBQUssQ0FBQ21GLFVBQVU7SUFBQ0osS0FBSyxFQUFFO01BQUVLLEtBQUssRUFBRTtJQUFNO0VBQUUsR0FBQyxnQkFBZ0MsQ0FBQyxlQUM1RXpHLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3ZFLEtBQUssQ0FBQ21GLFVBQVU7SUFBQ0osS0FBSyxFQUFFO01BQUVLLEtBQUssRUFBRTtJQUFNO0VBQUUsR0FBQyxZQUE0QixDQUFDLGVBQ3hFekcsS0FBQSxDQUFBNEYsYUFBQSxDQUFDdkUsS0FBSyxDQUFDbUYsVUFBVTtJQUFDSixLQUFLLEVBQUU7TUFBRUssS0FBSyxFQUFFO0lBQU0sQ0FBRTtJQUFDQyxTQUFTLEVBQUM7RUFBUSxHQUFDLFFBQXdCLENBQUMsZUFDdkYxRyxLQUFBLENBQUE0RixhQUFBLENBQUN2RSxLQUFLLENBQUNtRixVQUFVO0lBQUNKLEtBQUssRUFBRTtNQUFFSyxLQUFLLEVBQUU7SUFBTTtFQUFFLEdBQUMsTUFBc0IsQ0FBQyxlQUNsRXpHLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3ZFLEtBQUssQ0FBQ21GLFVBQVU7SUFBQ0csVUFBVTtJQUFDRCxTQUFTLEVBQUM7RUFBTyxHQUFDLEdBQW1CLENBQ3pELENBQ0MsQ0FBQyxlQUNmMUcsS0FBQSxDQUFBNEYsYUFBQSxDQUFDdkUsS0FBSyxDQUFDdUYsSUFBSSxRQUNSaEgsS0FBSyxDQUFDaUgsR0FBRyxDQUFDLFVBQUNDLElBQUksRUFBRUMsR0FBRyxFQUFLO0lBQ3hCLElBQU1DLE9BQU8sR0FBR3pFLHdCQUF3QixDQUFDdUUsSUFBSSxDQUFDO0lBQzlDLElBQU16QyxFQUFFLEdBQUd5QyxJQUFJLEtBQUtBLElBQUksQ0FBQ3pDLEVBQUUsSUFBSXlDLElBQUksQ0FBQzVCLE9BQU8sSUFBSTRCLElBQUksQ0FBQ0csTUFBTSxZQUFBaEMsTUFBQSxDQUFZOEIsR0FBRyxDQUFFLENBQUM7SUFDNUUsSUFBTTdCLE9BQU8sR0FBRzRCLElBQUksS0FBS0EsSUFBSSxDQUFDNUIsT0FBTyxJQUFJNEIsSUFBSSxDQUFDSSxJQUFJLElBQUlKLElBQUksQ0FBQ0ssR0FBRyxDQUFDO0lBQy9ELElBQU1DLFFBQVEsR0FBR3BGLGtCQUFrQixDQUFDOEUsSUFBSSxDQUFDO0lBQ3pDLElBQU1PLFdBQVcsR0FBR0QsUUFBUSxHQUN4QkEsUUFBUSxHQUNQSixPQUFPLEdBQ041SCxNQUFNLENBQUMwSCxJQUFJLENBQUN6QyxFQUFFLElBQUlBLEVBQUUsWUFBQVksTUFBQSxDQUFZOEIsR0FBRyxDQUFFLENBQUMsR0FDdEMzSCxNQUFNLENBQUU4RixPQUFPLElBQUlBLE9BQU8sQ0FBQzNCLElBQUksQ0FBQyxDQUFDLElBQUtjLEVBQUUsWUFBQVksTUFBQSxDQUFZOEIsR0FBRyxDQUFFLENBQUU7SUFDakUsSUFBTU8sTUFBTSxHQUFHRixRQUFRLFNBQUFuQyxNQUFBLENBQVNtQyxRQUFRLElBQU1KLE9BQU8sV0FBQS9CLE1BQUEsQ0FBV29DLFdBQVcsSUFBS0EsV0FBWTtJQUM1RixJQUFNRSxNQUFNLEdBQUlULElBQUksSUFBSUEsSUFBSSxDQUFDUyxNQUFNLElBQUssU0FBUztJQUNqRCxJQUFNQyxXQUFXLEdBQUdELE1BQU0sS0FBSyxXQUFXO0lBQzFDLElBQU1FLEtBQUssR0FBR1gsSUFBSSxLQUFLQSxJQUFJLENBQUNXLEtBQUssSUFBSSxJQUFJLEdBQUdYLElBQUksQ0FBQ1csS0FBSyxHQUFHLElBQUksQ0FBQztJQUM5RCxJQUFNQyxXQUFXLEdBQUdaLElBQUksSUFBSUEsSUFBSSxDQUFDWSxXQUFXLElBQUksSUFBSSxHQUFHckksTUFBTSxDQUFDeUgsSUFBSSxDQUFDWSxXQUFXLENBQUMsR0FBRyxJQUFJO0lBQ3RGLElBQU1DLFFBQVEsR0FBR2IsSUFBSSxJQUFJQSxJQUFJLENBQUNhLFFBQVE7SUFDdEMsSUFBTUMsUUFBUSxHQUFHZCxJQUFJLEtBQUtBLElBQUksQ0FBQ2MsUUFBUSxJQUFJZCxJQUFJLENBQUNlLFdBQVcsQ0FBQztJQUM1RCxJQUFNQyxRQUFRLEdBQUdsRywwQkFBMEIsQ0FBQ3NELE9BQU8sQ0FBQztJQUNwRCxJQUFNNkMsWUFBWSxHQUFHLENBQUNmLE9BQU8sSUFBSXZDLGVBQWUsS0FBS3FELFFBQVEsS0FBS3JELGVBQWUsSUFBSXJGLE1BQU0sQ0FBQzhGLE9BQU8sQ0FBQyxLQUFLVCxlQUFlLENBQUM7SUFDekgsSUFBTXVELGFBQWEsR0FBRy9GLHVCQUF1QixDQUFDNkUsSUFBSSxFQUFFcEIsS0FBSyxDQUFDLElBQUksR0FBRztJQUNqRSxJQUFNdUMsWUFBWSxHQUFHL0YsMEJBQTBCLENBQUM0RSxJQUFJLENBQUM7SUFDckQsSUFBTW9CLElBQUksR0FBR3ZDLEVBQUUsR0FBR2pDLDhCQUE4QixDQUFDaUMsRUFBRSxFQUFFeUIsUUFBUSxJQUFJQyxXQUFXLENBQUMsR0FBRyxJQUFJO0lBQ3BGLElBQU1jLFlBQVksR0FBR2pELE9BQU8sSUFBSSxDQUFDOUYsTUFBTSxDQUFDOEYsT0FBTyxDQUFDLENBQUNrRCxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQ2xFeEcsMEJBQTBCLENBQUNzRCxPQUFPLENBQUMsR0FDbkMsRUFBRTtJQUNOLElBQU1tRCxnQkFBZ0IsR0FBR3ZCLElBQUksSUFBSUEsSUFBSSxDQUFDd0IsUUFBUSxJQUFJeEIsSUFBSSxDQUFDd0IsUUFBUSxDQUFDQyxpQkFBaUIsSUFBSSxJQUFJLEdBQ3JGbkosTUFBTSxDQUFDMEgsSUFBSSxDQUFDd0IsUUFBUSxDQUFDQyxpQkFBaUIsQ0FBQyxHQUN2Q25KLE1BQU0sQ0FBQzBILElBQUksQ0FBQ3pDLEVBQUUsSUFBSWdELFdBQVcsQ0FBQztJQUNsQyxJQUFNbUIsVUFBVSxHQUFHcEIsUUFBUSxJQUFJckYsc0JBQXNCLENBQUMrRSxJQUFJLENBQUM7SUFDM0QsSUFBTTJCLFVBQVUsR0FBRyxDQUNqQnpCLE9BQU8sR0FBRyxNQUFNLEdBQUcsSUFBSSxFQUN2QmUsWUFBWSxHQUFHLFNBQVMsR0FBRyxJQUFJLEVBQy9CRSxZQUFZLEdBQUcsUUFBUSxHQUFHLElBQUksRUFDN0IsQ0FBQ0EsWUFBWSxJQUFJYixRQUFRLElBQUlKLE9BQU8sR0FBSSxVQUFVLEdBQUcsSUFBSSxFQUMxRGtCLElBQUksSUFBSSxJQUFJLElBQUlBLElBQUksR0FBRyxDQUFDLFdBQUFqRCxNQUFBLENBQVdpRCxJQUFJLElBQUssSUFBSSxFQUNoRFQsS0FBSyxJQUFJLElBQUksWUFBQXhDLE1BQUEsQ0FBT3dDLEtBQUssSUFBSyxJQUFJLEVBQ2xDVCxPQUFPLElBQUlVLFdBQVcsSUFBSSxJQUFJLElBQUlBLFdBQVcsR0FBRyxDQUFDLFdBQUF6QyxNQUFBLENBQVd5QyxXQUFXLElBQUssSUFBSSxDQUNqRixDQUFDN0ssTUFBTSxDQUFDNEIsT0FBTyxDQUFDLENBQUNpSyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzdCLElBQU1DLFNBQVMsR0FBR2YsUUFBUSxHQUN0QixJQUFJZ0IsSUFBSSxDQUFDaEIsUUFBUSxDQUFDLENBQUNpQixjQUFjLENBQUNDLFNBQVMsRUFBRTtNQUFFQyxLQUFLLEVBQUUsT0FBTztNQUFFQyxHQUFHLEVBQUUsU0FBUztNQUFFQyxJQUFJLEVBQUUsU0FBUztNQUFFQyxNQUFNLEVBQUU7SUFBVSxDQUFDLENBQUMsR0FDcEgsR0FBRztJQUNQLG9CQUNFbEosS0FBQSxDQUFBNEYsYUFBQSxDQUFDdkUsS0FBSyxDQUFDa0YsR0FBRztNQUNSM0ksR0FBRyxFQUFFMEosTUFBTztNQUNabEIsS0FBSyxFQUFFO1FBQUUrQyxNQUFNLEVBQUU7TUFBVSxDQUFFO01BQzdCQyxLQUFLLEVBQUVYLFVBQVUsSUFBSUssU0FBVTtNQUMvQk8sT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7UUFBQSxPQUFReEUsUUFBUSxXQUFBSSxNQUFBLENBQVdxRSxrQkFBa0IsQ0FBQ2pDLFdBQVcsQ0FBQyxDQUFFLENBQUM7TUFBQTtJQUFDLGdCQUVyRXJILEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3ZFLEtBQUssQ0FBQ2tJLElBQUk7TUFBQ25ELEtBQUssRUFBRTtRQUFFb0QsYUFBYSxFQUFFLFFBQVE7UUFBRUMsUUFBUSxFQUFFO01BQVM7SUFBRSxnQkFDakV6SixLQUFBLENBQUE0RixhQUFBO01BQ0VRLEtBQUssRUFBRTtRQUNMc0QsVUFBVSxFQUFFLFdBQVc7UUFDdkJDLFFBQVEsRUFBRSxTQUFTO1FBQ25CQyxVQUFVLEVBQUUsR0FBRztRQUNmSCxRQUFRLEVBQUUsUUFBUTtRQUNsQkksWUFBWSxFQUFFLFVBQVU7UUFDeEJDLFVBQVUsRUFBRTtNQUNkLENBQUU7TUFDRlYsS0FBSyxFQUFFWjtJQUFXLEdBRWpCQSxVQUNFLENBQUMsRUFDTGIsUUFBUSxnQkFDUDNILEtBQUEsQ0FBQTRGLGFBQUE7TUFBS1EsS0FBSyxFQUFFO1FBQUV1RCxRQUFRLEVBQUUsU0FBUztRQUFFSSxLQUFLLEVBQUUsU0FBUztRQUFFTixRQUFRLEVBQUUsUUFBUTtRQUFFSSxZQUFZLEVBQUUsVUFBVTtRQUFFQyxVQUFVLEVBQUU7TUFBUyxDQUFFO01BQUNWLEtBQUssRUFBRXpCO0lBQVMsR0FDeElBLFFBQ0UsQ0FBQyxHQUNKLElBQ00sQ0FBQyxlQUNiM0gsS0FBQSxDQUFBNEYsYUFBQSxDQUFDdkUsS0FBSyxDQUFDa0ksSUFBSTtNQUFDbkQsS0FBSyxFQUFFO1FBQUVvRCxhQUFhLEVBQUUsUUFBUTtRQUFFQyxRQUFRLEVBQUU7TUFBUztJQUFFLGdCQUNqRXpKLEtBQUEsQ0FBQTRGLGFBQUE7TUFDRVEsS0FBSyxFQUFFO1FBQ0x1RCxRQUFRLEVBQUUsU0FBUztRQUNuQkssT0FBTyxFQUFFLE9BQU87UUFDaEJQLFFBQVEsRUFBRSxRQUFRO1FBQ2xCSSxZQUFZLEVBQUUsVUFBVTtRQUN4QkMsVUFBVSxFQUFFO01BQ2QsQ0FBRTtNQUNGVixLQUFLLEVBQUVwQjtJQUFjLEdBRXBCQSxhQUNHLENBQ0ksQ0FBQyxlQUNiaEksS0FBQSxDQUFBNEYsYUFBQSxDQUFDdkUsS0FBSyxDQUFDa0ksSUFBSTtNQUFDN0MsU0FBUyxFQUFDLFFBQVE7TUFBQ04sS0FBSyxFQUFFO1FBQUVvRCxhQUFhLEVBQUU7TUFBUztJQUFFLGdCQUNoRXhKLEtBQUEsQ0FBQTRGLGFBQUE7TUFBTVEsS0FBSyxFQUFFO1FBQUUwRCxVQUFVLEVBQUUsUUFBUTtRQUFFSCxRQUFRLEVBQUU7TUFBVTtJQUFFLEdBQ3hEM0MsT0FBTyxnQkFBR2hILEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ2hGLElBQUk7TUFBQ2YsSUFBSSxFQUFDLFVBQVU7TUFBQ2tLLEtBQUssRUFBQyxNQUFNO01BQUNYLEtBQUssRUFBQztJQUFhLENBQUUsQ0FBQyxHQUFHLElBQUksRUFDMUVyQixZQUFZLGdCQUFHL0gsS0FBQSxDQUFBNEYsYUFBQSxDQUFDaEYsSUFBSTtNQUFDZixJQUFJLEVBQUMsTUFBTTtNQUFDa0ssS0FBSyxFQUFDLFFBQVE7TUFBQ1gsS0FBSyxFQUFDO0lBQWMsQ0FBRSxDQUFDLEdBQUcsSUFBSSxFQUM5RW5CLFlBQVksZ0JBQUdqSSxLQUFBLENBQUE0RixhQUFBLENBQUNoRixJQUFJO01BQUNmLElBQUksRUFBQyxRQUFRO01BQUNrSyxLQUFLLEVBQUMsTUFBTTtNQUFDWCxLQUFLLEVBQUM7SUFBd0IsQ0FBRSxDQUFDLEdBQUcsSUFBSSxFQUN4RmxCLElBQUksSUFBSSxJQUFJLElBQUlBLElBQUksR0FBRyxDQUFDLGdCQUN2QmxJLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ2hGLElBQUk7TUFBQ2YsSUFBSSxFQUFDLE1BQU07TUFBQ2tLLEtBQUssRUFBQyxRQUFRO01BQUNYLEtBQUssS0FBQW5FLE1BQUEsQ0FBS2lELElBQUk7SUFBa0IsQ0FBRSxDQUFDLEdBQ2xFLElBQUksZUFDUmxJLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ2hGLElBQUk7TUFDSGYsSUFBSSxFQUFFMkgsV0FBVyxHQUFHLGNBQWMsR0FBRyxjQUFlO01BQ3BEdUMsS0FBSyxFQUFFdkMsV0FBVyxHQUFHLE9BQU8sR0FBRyxNQUFPO01BQ3RDNEIsS0FBSyxFQUFFN0I7SUFBTyxDQUNmLENBQUMsZUFDRnZILEtBQUEsQ0FBQTRGLGFBQUE7TUFBTVEsS0FBSyxFQUFFO1FBQUU2RCxVQUFVLEVBQUUsUUFBUTtRQUFFRixLQUFLLEVBQUV2QyxXQUFXLEdBQUcsU0FBUyxHQUFHO01BQVU7SUFBRSxHQUMvRUEsV0FBVyxHQUFHLElBQUksR0FBSVIsT0FBTyxHQUFJTyxNQUFNLEtBQUssV0FBVyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUksS0FDeEUsQ0FDRixDQUNJLENBQUMsZUFDYnZILEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3ZFLEtBQUssQ0FBQ2tJLElBQUk7TUFBQ25ELEtBQUssRUFBRTtRQUFFb0QsYUFBYSxFQUFFLFFBQVE7UUFBRUcsUUFBUSxFQUFFLFFBQVE7UUFBRUksS0FBSyxFQUFFLE1BQU07UUFBRUQsVUFBVSxFQUFFO01BQVMsQ0FBRTtNQUFDVixLQUFLLEVBQUV4QixRQUFRLEdBQUcsSUFBSWdCLElBQUksQ0FBQ2hCLFFBQVEsQ0FBQyxDQUFDaUIsY0FBYyxDQUFDLENBQUMsR0FBRztJQUFHLEdBQ2pLRixTQUNTLENBQUMsZUFDYjNJLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3ZFLEtBQUssQ0FBQ2tJLElBQUk7TUFBQzVDLFVBQVU7TUFBQ0QsU0FBUyxFQUFDLE9BQU87TUFBQ04sS0FBSyxFQUFFO1FBQUVvRCxhQUFhLEVBQUUsUUFBUTtRQUFFTSxVQUFVLEVBQUU7TUFBUztJQUFFLEdBQy9GOUMsT0FBTyxJQUFJLE9BQU9yQyxzQkFBc0IsS0FBSyxVQUFVLEtBQUs2QyxXQUFXLElBQUlELE1BQU0sS0FBSyxZQUFZLENBQUMsZ0JBQ2xHdkgsS0FBQSxDQUFBNEYsYUFBQSxDQUFDckYsTUFBTTtNQUNMMkYsSUFBSSxFQUFDLE1BQU07TUFDWGdFLEtBQUs7TUFDTEgsS0FBSyxFQUFDLEtBQUs7TUFDWEksSUFBSTtNQUNKZixLQUFLLEVBQUMsZ0JBQWdCO01BQ3RCQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBR2UsS0FBSyxFQUFLO1FBQ2xCQSxLQUFLLENBQUNDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RCRCxLQUFLLENBQUNFLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZCLElBQUk7VUFDRjNGLHNCQUFzQixDQUFDMEQsZ0JBQWdCLENBQUM7UUFDMUMsQ0FBQyxDQUFDLE9BQU9wTixDQUFDLEVBQUUsQ0FBQztNQUNmO0lBQUUsZ0JBRUYrRSxLQUFBLENBQUE0RixhQUFBLENBQUNoRixJQUFJO01BQUNmLElBQUksRUFBQztJQUFRLENBQUUsQ0FDZixDQUFDLEdBQ1AsSUFBSSxFQUNQLENBQUNtSCxPQUFPLElBQUlRLFdBQVcsSUFBSSxPQUFPNUMsa0JBQWtCLEtBQUssVUFBVSxJQUFJdUQsWUFBWSxnQkFDbEZuSSxLQUFBLENBQUE0RixhQUFBLENBQUNyRixNQUFNO01BQ0wyRixJQUFJLEVBQUMsTUFBTTtNQUNYZ0UsS0FBSztNQUNMQyxJQUFJO01BQ0pmLEtBQUssRUFBQyxlQUFlO01BQ3JCQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBR2UsS0FBSyxFQUFLO1FBQ2xCQSxLQUFLLENBQUNDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RCRCxLQUFLLENBQUNFLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZCLElBQUk7VUFDRjFGLGtCQUFrQixDQUFDdUQsWUFBWSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxPQUFPbE4sQ0FBQyxFQUFFLENBQUM7TUFDZjtJQUFFLGdCQUVGK0UsS0FBQSxDQUFBNEYsYUFBQSxDQUFDaEYsSUFBSTtNQUFDZixJQUFJLEVBQUM7SUFBTSxDQUFFLENBQ2IsQ0FBQyxHQUNQLElBQ00sQ0FDSCxDQUFDO0VBRWhCLENBQUMsQ0FDUyxDQUNQLENBQUMsRUFDUDJGLEtBQUssR0FBRyxDQUFDLGlCQUNSeEYsS0FBQSxDQUFBNEYsYUFBQTtJQUNFUSxLQUFLLEVBQUU7TUFDTDRELE9BQU8sRUFBRSxNQUFNO01BQ2ZPLFVBQVUsRUFBRSxRQUFRO01BQ3BCQyxjQUFjLEVBQUUsZUFBZTtNQUMvQkMsUUFBUSxFQUFFLE1BQU07TUFDaEJDLEdBQUcsRUFBRSxPQUFPO01BQ1pyRSxTQUFTLEVBQUU7SUFDYjtFQUFFLGdCQUVGckcsS0FBQSxDQUFBNEYsYUFBQTtJQUFNUSxLQUFLLEVBQUU7TUFBRTJELEtBQUssRUFBRSxNQUFNO01BQUVKLFFBQVEsRUFBRTtJQUFTO0VBQUUsR0FBQyxVQUMxQyxFQUFDckUsU0FBUyxFQUFDLFFBQUMsRUFBQ0MsT0FBTyxFQUFDLE1BQUksRUFBQ0MsS0FDOUIsQ0FBQyxlQUNQeEYsS0FBQSxDQUFBNEYsYUFBQSxDQUFDNUMsYUFBYTtJQUNaMkgsVUFBVSxFQUFFdkYsSUFBSztJQUNqQkMsVUFBVSxFQUFFQSxVQUFXO0lBQ3ZCdUYsWUFBWSxFQUFFLFNBQWRBLFlBQVlBLENBQUczUCxDQUFDLEVBQUU0UCxDQUFDO01BQUEsT0FBS3BGLE9BQU8sQ0FBQ29GLENBQUMsQ0FBQ0YsVUFBVSxDQUFDO0lBQUEsQ0FBQztJQUM5Q3ZFLEtBQUssRUFBRTtNQUFFQyxTQUFTLEVBQUUsQ0FBQztNQUFFeUUsSUFBSSxFQUFFLFVBQVU7TUFBRUMsUUFBUSxFQUFFO0lBQUU7RUFBRSxDQUN4RCxDQUNFLENBRVAsQ0FBQztBQUVQO0FBRUEsU0FBU0MsMkJBQTJCQSxDQUFFQyxLQUFLLEVBQUVDLFdBQVcsRUFBRTtFQUN4RCxJQUFNQyxHQUFHLEdBQUE3TCxrQkFBQSxDQUFRMkwsS0FBSyxJQUFJLEVBQUUsQ0FBRTtFQUM5QixJQUFNRyxFQUFFLEdBQUdoTSxNQUFNLENBQUM4TCxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMzSCxJQUFJLENBQUMsQ0FBQztFQUMzQzRILEdBQUcsQ0FBQ0UsSUFBSSxDQUFDLFVBQUM5TyxDQUFDLEVBQUUrTyxDQUFDLEVBQUs7SUFDakIsSUFBTUMsRUFBRSxHQUFHM0osMEJBQTBCLENBQUNyRixDQUFDLElBQUlBLENBQUMsQ0FBQzJJLE9BQU8sQ0FBQztJQUNyRCxJQUFNc0csRUFBRSxHQUFHNUosMEJBQTBCLENBQUMwSixDQUFDLElBQUlBLENBQUMsQ0FBQ3BHLE9BQU8sQ0FBQztJQUNyRCxJQUFNdUcsRUFBRSxHQUFHTCxFQUFFLEtBQUtHLEVBQUUsS0FBS0gsRUFBRSxJQUFJaE0sTUFBTSxDQUFDN0MsQ0FBQyxJQUFJQSxDQUFDLENBQUMySSxPQUFPLENBQUMsS0FBS2tHLEVBQUUsQ0FBQztJQUM3RCxJQUFNTSxFQUFFLEdBQUdOLEVBQUUsS0FBS0ksRUFBRSxLQUFLSixFQUFFLElBQUloTSxNQUFNLENBQUNrTSxDQUFDLElBQUlBLENBQUMsQ0FBQ3BHLE9BQU8sQ0FBQyxLQUFLa0csRUFBRSxDQUFDO0lBQzdELElBQUlLLEVBQUUsS0FBS0MsRUFBRSxFQUFFLE9BQU9ELEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ2pDLElBQU1FLEVBQUUsR0FBR3RNLE1BQU0sQ0FBQzlDLENBQUMsSUFBSUEsQ0FBQyxDQUFDa0wsS0FBSyxDQUFDO0lBQy9CLElBQU1tRSxFQUFFLEdBQUd2TSxNQUFNLENBQUNpTSxDQUFDLElBQUlBLENBQUMsQ0FBQzdELEtBQUssQ0FBQztJQUMvQixJQUFJcEksTUFBTSxDQUFDd00sUUFBUSxDQUFDRixFQUFFLENBQUMsSUFBSXRNLE1BQU0sQ0FBQ3dNLFFBQVEsQ0FBQ0QsRUFBRSxDQUFDLElBQUlELEVBQUUsS0FBS0MsRUFBRSxFQUFFLE9BQU9BLEVBQUUsR0FBR0QsRUFBRTtJQUMzRSxJQUFJdE0sTUFBTSxDQUFDd00sUUFBUSxDQUFDRixFQUFFLENBQUMsSUFBSSxDQUFDdE0sTUFBTSxDQUFDd00sUUFBUSxDQUFDRCxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRCxJQUFJLENBQUN2TSxNQUFNLENBQUN3TSxRQUFRLENBQUNGLEVBQUUsQ0FBQyxJQUFJdE0sTUFBTSxDQUFDd00sUUFBUSxDQUFDRCxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDekQsT0FBT3hNLE1BQU0sQ0FBQ21NLEVBQUUsQ0FBQyxDQUFDTyxhQUFhLENBQUMxTSxNQUFNLENBQUNvTSxFQUFFLENBQUMsQ0FBQztFQUM3QyxDQUFDLENBQUM7RUFDRixPQUFPTCxHQUFHO0FBQ1o7QUFBQyxJQUVLWSxTQUFTLDBCQUFBQyxnQkFBQTtFQUNiLFNBQUFELFVBQWFFLEtBQUssRUFBRTtJQUFBLElBQUFDLEtBQUE7SUFBQTNPLGVBQUEsT0FBQXdPLFNBQUE7SUFDbEJHLEtBQUEsR0FBQW5PLFVBQUEsT0FBQWdPLFNBQUEsR0FBTUUsS0FBSztJQUFFOU8sZUFBQSxDQUFBK08sS0FBQSx1QkFZSyxZQUFNO01BQ3hCQSxLQUFBLENBQUtDLFFBQVEsQ0FBQztRQUFFQyxnQkFBZ0IsRUFBRSxJQUFJO1FBQUVDLFlBQVksRUFBRTtNQUFHLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQUFsUCxlQUFBLENBQUErTyxLQUFBLHdCQUVvQixZQUFNO01BQ3pCQSxLQUFBLENBQUtDLFFBQVEsQ0FBQztRQUFFQyxnQkFBZ0IsRUFBRSxLQUFLO1FBQUVDLFlBQVksRUFBRTtNQUFHLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQUFsUCxlQUFBLENBQUErTyxLQUFBLG9CQUVnQixZQUFNO01BQ3JCLElBQVFJLFNBQVMsR0FBS0osS0FBQSxDQUFLRCxLQUFLLENBQXhCSyxTQUFTO01BQ2pCLElBQU1DLFVBQVUsR0FBRzFLLHlCQUF5QixDQUFDcUssS0FBQSxDQUFLTSxLQUFLLENBQUNILFlBQVksQ0FBQztNQUNyRSxJQUFJLENBQUNFLFVBQVUsRUFBRTtRQUNmeEosS0FBSyxDQUFDMEosT0FBTyxDQUFDLG9FQUFvRSxFQUFFO1VBQUVDLE1BQU0sRUFBRTtRQUFXLENBQUMsQ0FBQztRQUMzRztNQUNGO01BQ0EsSUFBSSxPQUFPSixTQUFTLEtBQUssVUFBVSxFQUFFO1FBQ25DQSxTQUFTLENBQUM7VUFBRXBILE9BQU8sRUFBRXFIO1FBQVcsQ0FBQyxDQUFDO01BQ3BDO01BQ0FMLEtBQUEsQ0FBS0MsUUFBUSxDQUFDO1FBQUVDLGdCQUFnQixFQUFFLEtBQUs7UUFBRUMsWUFBWSxFQUFFO01BQUcsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFBQWxQLGVBQUEsQ0FBQStPLEtBQUEsMkJBRXVCLFlBQU07TUFDNUJBLEtBQUEsQ0FBS0MsUUFBUSxDQUFDO1FBQUVRLG9CQUFvQixFQUFFLElBQUk7UUFBRUMsa0JBQWtCLEVBQUU7TUFBRyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUFBelAsZUFBQSxDQUFBK08sS0FBQSw0QkFFd0IsWUFBTTtNQUM3QkEsS0FBQSxDQUFLQyxRQUFRLENBQUM7UUFBRVEsb0JBQW9CLEVBQUUsS0FBSztRQUFFQyxrQkFBa0IsRUFBRTtNQUFHLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQUF6UCxlQUFBLENBQUErTyxLQUFBLDZCQUV5QixZQUFNO01BQzlCLElBQVFXLG1CQUFtQixHQUFLWCxLQUFBLENBQUtELEtBQUssQ0FBbENZLG1CQUFtQjtNQUMzQixJQUFNMVEsS0FBSyxHQUFHaUQsTUFBTSxDQUFDOE0sS0FBQSxDQUFLTSxLQUFLLENBQUNJLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDckosSUFBSSxDQUFDLENBQUM7TUFDaEUsSUFBSSxDQUFDcEgsS0FBSyxJQUFJLE9BQU8wUSxtQkFBbUIsS0FBSyxVQUFVLEVBQUU7TUFDekRBLG1CQUFtQixDQUFDMVEsS0FBSyxDQUFDO01BQzFCK1AsS0FBQSxDQUFLQyxRQUFRLENBQUM7UUFBRVEsb0JBQW9CLEVBQUUsS0FBSztRQUFFQyxrQkFBa0IsRUFBRTtNQUFHLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBOUNDVixLQUFBLENBQUtNLEtBQUssR0FBRztNQUNYSixnQkFBZ0IsRUFBRSxLQUFLO01BQ3ZCQyxZQUFZLEVBQUUsRUFBRTtNQUNoQk0sb0JBQW9CLEVBQUUsS0FBSztNQUMzQkMsa0JBQWtCLEVBQUUsRUFBRTtNQUN0QkUsa0JBQWtCLEVBQUUsRUFBRTtNQUN0QkMsaUJBQWlCLEVBQUUsU0FBUztNQUM1QkMsZUFBZSxFQUFFO0lBQ25CLENBQUM7SUFBQyxPQUFBZCxLQUFBO0VBQ0o7RUFBQ3BOLFNBQUEsQ0FBQWlOLFNBQUEsRUFBQUMsZ0JBQUE7RUFBQSxPQUFBbk8sWUFBQSxDQUFBa08sU0FBQTtJQUFBbk8sR0FBQTtJQUFBekIsS0FBQSxFQXVDRCxTQUFBOFEsaUJBQWlCQSxDQUFBLEVBQUk7TUFBQSxJQUFBQyxNQUFBO01BQ25CLElBQUksT0FBTyxJQUFJLENBQUNqQixLQUFLLENBQUNrQixjQUFjLEtBQUssVUFBVSxFQUFFO1FBQ25ELElBQUksQ0FBQ2xCLEtBQUssQ0FBQ2tCLGNBQWMsQ0FBQyxDQUFDO01BQzdCOztNQUVBO01BQ0E7TUFDQSxJQUFJLENBQUNDLGFBQWEsR0FBR0MsV0FBVyxDQUFDLFlBQU07UUFDckMsSUFBSSxPQUFPSCxNQUFJLENBQUNqQixLQUFLLENBQUNrQixjQUFjLEtBQUssVUFBVSxFQUFFO1VBQ25ERCxNQUFJLENBQUNqQixLQUFLLENBQUNrQixjQUFjLENBQUMsQ0FBQztRQUM3QjtNQUNGLENBQUMsRUFBRSxJQUFJLENBQUM7TUFFUixJQUFJLENBQUNHLHFCQUFxQixHQUFHLFVBQUNDLEVBQUUsRUFBSztRQUNuQyxJQUFNQyxJQUFJLEdBQUdELEVBQUUsSUFBSUEsRUFBRSxDQUFDRSxNQUFNLElBQUlGLEVBQUUsQ0FBQ0UsTUFBTSxDQUFDQyxTQUFTLElBQUlILEVBQUUsQ0FBQ0UsTUFBTSxDQUFDQyxTQUFTLENBQUNGLElBQUk7UUFDL0UsSUFBSUEsSUFBSSxLQUFLLHFCQUFxQixFQUFFTixNQUFJLENBQUNTLFdBQVcsQ0FBQyxDQUFDO01BQ3hELENBQUM7TUFDRHJLLE1BQU0sQ0FBQ3NLLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQ04scUJBQXFCLENBQUM7TUFFeEUsSUFBSSxDQUFDTyxnQkFBZ0IsR0FBRztRQUFBLE9BQU1YLE1BQUksQ0FBQ1MsV0FBVyxDQUFDLENBQUM7TUFBQTtNQUNoRHJLLE1BQU0sQ0FBQ3NLLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUM7SUFDdkU7RUFBQztJQUFBalEsR0FBQTtJQUFBekIsS0FBQSxFQUVELFNBQUEyUixvQkFBb0JBLENBQUEsRUFBSTtNQUN0QixJQUFJLElBQUksQ0FBQ1YsYUFBYSxFQUFFO1FBQ3RCVyxhQUFhLENBQUMsSUFBSSxDQUFDWCxhQUFhLENBQUM7UUFDakMsSUFBSSxDQUFDQSxhQUFhLEdBQUcsSUFBSTtNQUMzQjtNQUNBLElBQUksSUFBSSxDQUFDRSxxQkFBcUIsRUFBRTtRQUM5QmhLLE1BQU0sQ0FBQzBLLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQ1YscUJBQXFCLENBQUM7UUFDM0UsSUFBSSxDQUFDQSxxQkFBcUIsR0FBRyxJQUFJO01BQ25DO01BQ0EsSUFBSSxJQUFJLENBQUNPLGdCQUFnQixFQUFFO1FBQ3pCdkssTUFBTSxDQUFDMEssbUJBQW1CLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDSCxnQkFBZ0IsQ0FBQztRQUN4RSxJQUFJLENBQUNBLGdCQUFnQixHQUFHLElBQUk7TUFDOUI7SUFDRjtFQUFDO0lBQUFqUSxHQUFBO0lBQUF6QixLQUFBLEVBRUQsU0FBQThSLE1BQU1BLENBQUEsRUFBSTtNQUFBLElBQUFDLE1BQUE7TUFDUixJQUFBQyxXQUFBLEdBa0JJLElBQUksQ0FBQ2xDLEtBQUs7UUFqQlptQyxJQUFJLEdBQUFELFdBQUEsQ0FBSkMsSUFBSTtRQUNKQyxNQUFNLEdBQUFGLFdBQUEsQ0FBTkUsTUFBTTtRQUNOQyxTQUFTLEdBQUFILFdBQUEsQ0FBVEcsU0FBUztRQUNUaEMsU0FBUyxHQUFBNkIsV0FBQSxDQUFUN0IsU0FBUztRQUNUYSxjQUFjLEdBQUFnQixXQUFBLENBQWRoQixjQUFjO1FBQ2RvQixnQkFBZ0IsR0FBQUosV0FBQSxDQUFoQkksZ0JBQWdCO1FBQ2hCQyxpQkFBaUIsR0FBQUwsV0FBQSxDQUFqQkssaUJBQWlCO1FBQ2pCQyxpQkFBaUIsR0FBQU4sV0FBQSxDQUFqQk0saUJBQWlCO1FBQ2pCQyxxQkFBcUIsR0FBQVAsV0FBQSxDQUFyQk8scUJBQXFCO1FBQ3JCQyxzQkFBc0IsR0FBQVIsV0FBQSxDQUF0QlEsc0JBQXNCO1FBQ3RCOUIsbUJBQW1CLEdBQUFzQixXQUFBLENBQW5CdEIsbUJBQW1CO1FBQ25CbEksc0JBQXNCLEdBQUF3SixXQUFBLENBQXRCeEosc0JBQXNCO1FBQ3RCaUssMEJBQTBCLEdBQUFULFdBQUEsQ0FBMUJTLDBCQUEwQjtRQUMxQkMsb0JBQW9CLEdBQUFWLFdBQUEsQ0FBcEJVLG9CQUFvQjtRQUNwQmpLLGtCQUFrQixHQUFBdUosV0FBQSxDQUFsQnZKLGtCQUFrQjtRQUNsQmtLLG1CQUFtQixHQUFBWCxXQUFBLENBQW5CVyxtQkFBbUI7UUFDbkJDLDhCQUE4QixHQUFBWixXQUFBLENBQTlCWSw4QkFBOEI7TUFFaEMsSUFBTUMsRUFBRSxHQUFHdk0scUJBQXFCLENBQUMsQ0FBQztNQUNsQyxJQUFNd00sVUFBVSxHQUFHLENBQUMsRUFBRWIsSUFBSSxJQUFJQSxJQUFJLENBQUMvSixFQUFFLElBQUkrSixJQUFJLENBQUNjLElBQUksQ0FBQztNQUNuRCxJQUFNQyxlQUFlLEdBQUdiLFNBQVMsSUFBSUQsTUFBTTtNQUMzQyxJQUFNZSxPQUFPLEdBQUdELGVBQWUsSUFBSUEsZUFBZSxDQUFDQyxPQUFPO01BQzFELElBQU1DLFNBQVMsR0FBR0QsT0FBTyxJQUFJQSxPQUFPLENBQUNFLGFBQWE7TUFDbEQsSUFBTUMsUUFBUSxHQUFHSCxPQUFPLElBQUlBLE9BQU8sQ0FBQ0ksaUJBQWlCO01BQ3JELElBQU1GLGFBQWEsR0FBRzVOLHVCQUF1QixDQUFDMk4sU0FBUyxDQUFDLEdBQ3BEQSxTQUFTLEdBQ1IzTix1QkFBdUIsQ0FBQzZOLFFBQVEsQ0FBQyxHQUFHQSxRQUFRLEdBQUcsSUFBSztNQUN6RCxJQUFNRSxPQUFPLEdBQUdILGFBQWEsSUFBSUEsYUFBYSxDQUFDRyxPQUFPO01BQ3RELElBQU14RSxLQUFLLEdBQUdyUCxLQUFLLENBQUNDLE9BQU8sQ0FBQ3lULGFBQWEsSUFBSUEsYUFBYSxDQUFDckUsS0FBSyxDQUFDLEdBQUdxRSxhQUFhLENBQUNyRSxLQUFLLEdBQUcsRUFBRTtNQUM1RixJQUFNdUIsS0FBSyxHQUFHOEMsYUFBYSxJQUFJQSxhQUFhLENBQUM5QyxLQUFLO01BQ2xELElBQU1rRCxnQkFBZ0IsR0FBSWxELEtBQUssSUFBSUEsS0FBSyxDQUFDakYsTUFBTSxJQUFJLElBQUksR0FDbkRuSSxNQUFNLENBQUNvTixLQUFLLENBQUNqRixNQUFNLENBQUMsQ0FBQ2hFLElBQUksQ0FBQyxDQUFDLENBQUNvTSxXQUFXLENBQUMsQ0FBQyxHQUN6QyxFQUFFO01BQ04sSUFBTUMsa0JBQWtCLEdBQUdGLGdCQUFnQixLQUFLLFFBQVE7TUFDeEQsSUFBTUcsUUFBUSxHQUFHLENBQUMsQ0FBQ1AsYUFBYTtNQUNoQyxJQUFNUSxZQUFZLEdBQUdSLGFBQWEsSUFBSUEsYUFBYSxDQUFDUSxZQUFZLEdBQzVEMVEsTUFBTSxDQUFDa1EsYUFBYSxDQUFDUSxZQUFZLENBQUMsR0FDbEMsSUFBSTtNQUNSLElBQU1DLGdCQUFnQixHQUFHLENBQUNELFlBQVksSUFBSVIsYUFBYSxJQUFJQSxhQUFhLENBQUNVLFFBQVEsSUFBSSxJQUFJLEdBQ3JGNVEsTUFBTSxDQUFDa1EsYUFBYSxDQUFDVSxRQUFRLENBQUMsR0FDOUIsSUFBSTtNQUNSLElBQU1DLFdBQVcsR0FBR0gsWUFBWSxJQUFJQyxnQkFBZ0I7TUFDcEQsSUFBTUcsUUFBUSxHQUFHVCxPQUFPLElBQUlBLE9BQU8sQ0FBQ3ZLLE9BQU8sR0FBRzlGLE1BQU0sQ0FBQ3FRLE9BQU8sQ0FBQ3ZLLE9BQU8sQ0FBQyxHQUFHLElBQUk7TUFDNUU7TUFDQSxJQUFNaUwsZUFBZSxHQUFJRixXQUFXLElBQUlDLFFBQVEsTUFBQWpMLE1BQUEsQ0FDekNnTCxXQUFXLE9BQUFoTCxNQUFBLENBQUlpTCxRQUFRLElBQ3pCRCxXQUFXLElBQUlDLFFBQVEsSUFBSSxFQUFHOztNQUVuQztNQUNBLElBQU1FLFdBQVcsR0FBR3hVLEtBQUssQ0FBQ0MsT0FBTyxDQUFDeVQsYUFBYSxJQUFJQSxhQUFhLENBQUNjLFdBQVcsQ0FBQyxHQUFHZCxhQUFhLENBQUNjLFdBQVcsR0FBRyxFQUFFOztNQUU5RztNQUNBO01BQ0EsSUFBTUMsV0FBVyxHQUFHcEYsS0FBSyxDQUFDcE8sTUFBTSxDQUFDLFVBQUNpSyxJQUFJLEVBQUs7UUFDekMsSUFBSSxDQUFDQSxJQUFJLElBQUl4SSxPQUFBLENBQU93SSxJQUFJLE1BQUssUUFBUSxFQUFFLE9BQU8sS0FBSztRQUNuRCxJQUFJQSxJQUFJLENBQUN3QixRQUFRLElBQUl4QixJQUFJLENBQUN3QixRQUFRLENBQUNnSSxTQUFTLEtBQUssUUFBUSxFQUFFLE9BQU8sSUFBSTtRQUN0RSxJQUFNak0sRUFBRSxHQUFHakYsTUFBTSxDQUFDMEgsSUFBSSxDQUFDekMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNoQyxJQUFNYSxPQUFPLEdBQUc5RixNQUFNLENBQUMwSCxJQUFJLENBQUM1QixPQUFPLElBQUksRUFBRSxDQUFDO1FBQzFDLElBQU1xTCxpQkFBaUIsR0FBRyxDQUFDLEVBQUV6SixJQUFJLENBQUN3QixRQUFRLElBQUkxTSxLQUFLLENBQUNDLE9BQU8sQ0FBQ2lMLElBQUksQ0FBQ3dCLFFBQVEsQ0FBQ2tJLFlBQVksQ0FBQyxDQUFDO1FBQ3hGLElBQUluTSxFQUFFLENBQUMrRCxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSWxELE9BQU8sQ0FBQ2tELFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sS0FBSztRQUN6RixJQUFJbUksaUJBQWlCLElBQUl6SixJQUFJLENBQUNTLE1BQU0sS0FBSyxZQUFZLEVBQUUsT0FBTyxLQUFLO1FBQ25FLE9BQU8sSUFBSTtNQUNiLENBQUMsQ0FBQztNQUVGLElBQU05QyxlQUFlLEdBQUc3QywwQkFBMEIsQ0FBQ3lCLHNCQUFzQixDQUFDLENBQUMsQ0FBQztNQUM1RSxJQUFNb04saUJBQWlCLEdBQUd6RiwyQkFBMkIsQ0FBQ2xKLGlCQUFpQixDQUFDdU8sV0FBVyxDQUFDLEVBQUU1TCxlQUFlLENBQUM7TUFFdEcsSUFBTWlNLGdCQUFnQixHQUFJdEIsT0FBTyxJQUFJLE9BQU9BLE9BQU8sQ0FBQ3NCLGdCQUFnQixLQUFLLFdBQVcsR0FDaEZ0QixPQUFPLENBQUNzQixnQkFBZ0IsR0FDeEIsRUFBRTtNQUVOLElBQU1DLFVBQVUsR0FBSXZCLE9BQU8sSUFBSSxPQUFPQSxPQUFPLENBQUN3QixnQkFBZ0IsS0FBSyxXQUFXLEdBQzFFeEIsT0FBTyxDQUFDd0IsZ0JBQWdCLEdBQ3hCLElBQUk7TUFFUixJQUFNQyxjQUFjLEdBQUd6Tyx1QkFBdUIsQ0FDNUNnTyxXQUFXLEVBQ1hNLGdCQUFnQixFQUNoQkMsVUFBVSxJQUFJQSxVQUFVLENBQUNHLE1BQU0sR0FBRzFSLE1BQU0sQ0FBQ3VSLFVBQVUsQ0FBQ0csTUFBTSxDQUFDLEdBQUcsSUFDaEUsQ0FBQztNQUVELElBQU1DLFNBQVMsR0FBRyxTQUFaQSxTQUFTQSxDQUFJQyxHQUFHO1FBQUEsT0FDcEI1QixPQUFPLElBQUksT0FBT0EsT0FBTyxDQUFDNkIsdUJBQXVCLEtBQUssVUFBVSxHQUM1RDdCLE9BQU8sQ0FBQzZCLHVCQUF1QixDQUFDRCxHQUFHLENBQUMsR0FDcEMsSUFBSTtNQUFBLENBQ1Q7TUFFRCxJQUFNRSxrQkFBa0IsR0FBR1QsaUJBQWlCLENBQUM1SixHQUFHLENBQUMsVUFBQ3NLLENBQUMsRUFBSztRQUN0RCxJQUFJLENBQUNBLENBQUMsSUFBSSxDQUFDQSxDQUFDLENBQUM3SSxRQUFRLElBQUk2SSxDQUFDLENBQUM3SSxRQUFRLENBQUNnSSxTQUFTLEtBQUssUUFBUSxFQUFFLE9BQU9hLENBQUM7UUFDcEUsSUFBTUMsR0FBRyxHQUFHRCxDQUFDLENBQUM3SSxRQUFRLENBQUNDLGlCQUFpQjtRQUN4QyxJQUFJLENBQUM2SSxHQUFHLEVBQUUsT0FBT0QsQ0FBQztRQUNsQixJQUFNOVYsQ0FBQyxHQUFHMFYsU0FBUyxDQUFDSyxHQUFHLENBQUM7UUFDeEIsSUFBSSxDQUFDL1YsQ0FBQyxFQUFFLE9BQU84VixDQUFDO1FBQ2hCLE9BQUFsVSxhQUFBLENBQUFBLGFBQUEsS0FBWWtVLENBQUM7VUFBRTFKLEtBQUssRUFBRXBNLENBQUMsQ0FBQ29NLEtBQUs7VUFBRUMsV0FBVyxFQUFFck0sQ0FBQyxDQUFDcU07UUFBVztNQUMzRCxDQUFDLENBQUM7TUFFRixJQUFNMkosa0JBQWtCLEdBQUcsSUFBSUMsR0FBRyxDQUFDLENBQUM7TUFBQyxJQUFBQyxTQUFBLEdBQUE5ViwwQkFBQSxDQUNyQnlWLGtCQUFrQjtRQUFBTSxLQUFBO01BQUE7UUFBbEMsS0FBQUQsU0FBQSxDQUFBdFYsQ0FBQSxNQUFBdVYsS0FBQSxHQUFBRCxTQUFBLENBQUF2VyxDQUFBLElBQUFrQixJQUFBLEdBQW9DO1VBQUEsSUFBekJpVixDQUFDLEdBQUFLLEtBQUEsQ0FBQXJWLEtBQUE7VUFDVixJQUFJZ1YsQ0FBQyxJQUFJQSxDQUFDLENBQUM5TSxFQUFFLEVBQUVnTixrQkFBa0IsQ0FBQ0ksR0FBRyxDQUFDclMsTUFBTSxDQUFDK1IsQ0FBQyxDQUFDOU0sRUFBRSxDQUFDLENBQUM7VUFDbkQsSUFBTXFOLEVBQUUsR0FBRzFQLGtCQUFrQixDQUFDbVAsQ0FBQyxDQUFDO1VBQ2hDLElBQUlPLEVBQUUsRUFBRUwsa0JBQWtCLENBQUNJLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDO1VBQ2xDLElBQUlQLENBQUMsSUFBSUEsQ0FBQyxDQUFDN0ksUUFBUSxJQUFJNkksQ0FBQyxDQUFDN0ksUUFBUSxDQUFDQyxpQkFBaUIsRUFBRTtZQUNuRDhJLGtCQUFrQixDQUFDSSxHQUFHLENBQUNyUyxNQUFNLENBQUMrUixDQUFDLENBQUM3SSxRQUFRLENBQUNDLGlCQUFpQixDQUFDLENBQUM7VUFDOUQ7VUFDQSxJQUFNOUUsSUFBSSxHQUFHckUsTUFBTSxDQUFFK1IsQ0FBQyxJQUFJQSxDQUFDLENBQUNqTSxPQUFPLElBQUssRUFBRSxDQUFDO1VBQzNDLElBQUl6QixJQUFJLENBQUMyRSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDOUJpSixrQkFBa0IsQ0FBQ0ksR0FBRyxDQUFDaE8sSUFBSSxDQUFDN0QsS0FBSyxDQUFDLFNBQVMsQ0FBQ3pFLE1BQU0sQ0FBQyxDQUFDO1VBQ3REO1FBQ0Y7TUFBQyxTQUFBd1csR0FBQTtRQUFBSixTQUFBLENBQUF0VyxDQUFBLENBQUEwVyxHQUFBO01BQUE7UUFBQUosU0FBQSxDQUFBblYsQ0FBQTtNQUFBO01BRUQsSUFBTXdWLGdCQUFnQixHQUFHbEIsZ0JBQWdCLENBQUM3VCxNQUFNLENBQUMsVUFBQ2dWLEVBQUUsRUFBSztRQUN2RCxJQUFJLENBQUNBLEVBQUUsSUFBSSxDQUFDQSxFQUFFLENBQUN4TixFQUFFLEVBQUUsT0FBTyxLQUFLO1FBQy9CLElBQUlnTixrQkFBa0IsQ0FBQ1MsR0FBRyxDQUFDMVMsTUFBTSxDQUFDeVMsRUFBRSxDQUFDeE4sRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUs7UUFDdkQsSUFBTTBOLElBQUksR0FBR0YsRUFBRSxDQUFDdkosUUFBUSxJQUFJaEssT0FBQSxDQUFPdVQsRUFBRSxDQUFDdkosUUFBUSxNQUFLLFFBQVEsR0FBR3VKLEVBQUUsQ0FBQ3ZKLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDOUUsSUFBTTBKLElBQUksR0FBR0QsSUFBSSxDQUFDakMsWUFBWSxJQUFJLElBQUksR0FBRzFRLE1BQU0sQ0FBQzJTLElBQUksQ0FBQ2pDLFlBQVksQ0FBQyxDQUFDdk0sSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFO1FBQzlFLElBQUl5TyxJQUFJLElBQUlYLGtCQUFrQixDQUFDUyxHQUFHLENBQUNFLElBQUksQ0FBQyxFQUFFLE9BQU8sS0FBSztRQUN0RCxPQUFPLElBQUk7TUFDYixDQUFDLENBQUM7TUFDRixJQUFNQyxlQUFlLEdBQUc1UCw4QkFBOEIsQ0FDcER1UCxnQkFBZ0IsQ0FBQy9LLEdBQUcsQ0FBQyxVQUFDZ0wsRUFBRTtRQUFBLE9BQU07VUFBRXhOLEVBQUUsRUFBRXdOLEVBQUUsQ0FBQ3hOLEVBQUU7VUFBRTZOLFNBQVMsRUFBRSxJQUFJO1VBQUVDLEtBQUssRUFBRU47UUFBRyxDQUFDO01BQUEsQ0FBQyxDQUFDLEVBQ3pFZCxTQUNGLENBQUM7TUFFRCxJQUFNdk0sWUFBWSxHQUFHckMsaUNBQWlDLENBQ3BERyx5QkFBeUIsQ0FBQzRPLGtCQUFrQixFQUFFZSxlQUFlLEVBQUV4TixlQUFlLENBQ2hGLENBQUM7TUFFRCxJQUFNQyxpQkFBaUIsR0FBRyxPQUFPcEIsTUFBTSxLQUFLLFdBQVcsR0FBR0EsTUFBTSxDQUFDOE8sUUFBUSxDQUFDbEwsSUFBSSxHQUFHLEVBQUU7TUFDbkYsSUFBTXZELFdBQVcsR0FBR3lMLE9BQU8sSUFBSSxPQUFPQSxPQUFPLENBQUNpRCxjQUFjLEtBQUssVUFBVSxHQUN0RWpELE9BQU8sQ0FBQ2lELGNBQWMsQ0FBQyxDQUFDLENBQUNwSCxLQUFLLElBQUksSUFBSSxHQUN2QyxJQUFJO01BRVIsSUFBTXFILE9BQU8sR0FBR2hELGFBQWEsSUFBSUEsYUFBYSxDQUFDZ0QsT0FBTyxJQUFJaFUsT0FBQSxDQUFPZ1IsYUFBYSxDQUFDZ0QsT0FBTyxNQUFLLFFBQVEsR0FDL0ZoRCxhQUFhLENBQUNnRCxPQUFPLEdBQ3JCLElBQUk7TUFDUixJQUFNQyxXQUFXLEdBQUdELE9BQU8sSUFBSSxPQUFPQSxPQUFPLENBQUNFLE1BQU0sS0FBSyxRQUFRLElBQUluVCxNQUFNLENBQUN3TSxRQUFRLENBQUN5RyxPQUFPLENBQUNFLE1BQU0sQ0FBQyxHQUNoR0YsT0FBTyxDQUFDRSxNQUFNLEdBQ2QsSUFBSTtNQUNSLElBQU1DLE9BQU8sR0FBR0gsT0FBTyxJQUFJLE9BQU9BLE9BQU8sQ0FBQ0ksYUFBYSxLQUFLLFFBQVEsSUFBSSxtQkFBbUIsQ0FBQzNTLElBQUksQ0FBQ3VTLE9BQU8sQ0FBQ0ksYUFBYSxDQUFDLEdBQ25ISixPQUFPLENBQUNJLGFBQWEsR0FDckIsSUFBSTtNQUNSLElBQU1DLFFBQVEsR0FBR0YsT0FBTyxNQUFBeE4sTUFBQSxDQUFNd04sT0FBTyxDQUFDN1MsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBQXFGLE1BQUEsQ0FBSXdOLE9BQU8sQ0FBQzdTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLLElBQUk7TUFDaEYsSUFBTWdULFVBQVUsR0FBR04sT0FBTyxJQUFJQSxPQUFPLENBQUM3QyxPQUFPLElBQUksSUFBSSxHQUFHclEsTUFBTSxDQUFDa1QsT0FBTyxDQUFDN0MsT0FBTyxDQUFDLEdBQUcsSUFBSTtNQUN0RixJQUFNb0QsUUFBUSxHQUFHUCxPQUFPLElBQUlBLE9BQU8sQ0FBQ1EsY0FBYyxJQUFJLElBQUksSUFBSXpULE1BQU0sQ0FBQ3dNLFFBQVEsQ0FBQ3hNLE1BQU0sQ0FBQ2lULE9BQU8sQ0FBQ1EsY0FBYyxDQUFDLENBQUMsR0FDekd6VCxNQUFNLENBQUNpVCxPQUFPLENBQUNRLGNBQWMsQ0FBQyxHQUM5QixJQUFJO01BRVIsSUFBTUMsTUFBTSxHQUFHNUQsZUFBZSxJQUFJQSxlQUFlLENBQUNDLE9BQU8sSUFBSSxPQUFPRCxlQUFlLENBQUNDLE9BQU8sQ0FBQ2lELGNBQWMsS0FBSyxVQUFVLEdBQ3JIbEQsZUFBZSxDQUFDQyxPQUFPLENBQUNpRCxjQUFjLENBQUMsQ0FBQyxHQUN4QyxJQUFJO01BQ1IsSUFBTVcsY0FBYyxHQUFHRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0Usa0JBQWtCO01BQzFELElBQU1DLFdBQVcsR0FBRzVELGFBQWEsR0FDN0I5TixpQkFBaUIsQ0FBQztRQUNsQjJSLE1BQU0sRUFBRXJELFlBQVk7UUFDcEJzRCxTQUFTLEVBQUUsa0JBQWtCO1FBQzdCQyxXQUFXLEVBQUU1QyxpQkFBaUI7UUFDOUI2QyxNQUFNLEVBQUVOO01BQ1YsQ0FBQyxDQUFDLEdBQ0EsSUFBSTtNQUVSLG9CQUNFaFQsS0FBQSxDQUFBNEYsYUFBQTtRQUFrQixTQUFNLFNBQVM7UUFBQyxlQUFZO01BQWdCLGdCQUM1RDVGLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3pFLE9BQU87UUFBQ2lGLEtBQUssRUFBRTtVQUFFbU4sS0FBSyxFQUFFLE1BQU07VUFBRUMsWUFBWSxFQUFFLENBQUM7VUFBRUMsU0FBUyxFQUFFO1FBQTZCO01BQUUsZ0JBQzFGelQsS0FBQSxDQUFBNEYsYUFBQTtRQUFTLG1CQUFnQixvQkFBb0I7UUFBQyxvQkFBaUI7TUFBb0IsZ0JBQ2pGNUYsS0FBQSxDQUFBNEYsYUFBQTtRQUNFUSxLQUFLLEVBQUU7VUFBRTRELE9BQU8sRUFBRSxNQUFNO1VBQUVPLFVBQVUsRUFBRSxZQUFZO1VBQUVHLEdBQUcsRUFBRSxRQUFRO1VBQUVELFFBQVEsRUFBRSxNQUFNO1VBQUVpSixZQUFZLEVBQUU7UUFBUSxDQUFFO1FBQzdHQyxJQUFJLEVBQUM7TUFBUSxnQkFFYjNULEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3JGLE1BQU07UUFBQzJKLEtBQUs7UUFBQ2hFLElBQUksRUFBQyxPQUFPO1FBQUMwTixFQUFFLEVBQUV4VCxJQUFLO1FBQUN5VCxFQUFFLEVBQUMsR0FBRztRQUFDLGNBQVc7TUFBYyxnQkFDbkU3VCxLQUFBLENBQUE0RixhQUFBLENBQUNoRixJQUFJO1FBQUNmLElBQUksRUFBQyxZQUFZO1FBQUMsZUFBWTtNQUFNLENBQUUsQ0FBQyxRQUV2QyxDQUFDLGVBQ1RHLEtBQUEsQ0FBQTRGLGFBQUE7UUFBS1EsS0FBSyxFQUFFO1VBQUUwRSxJQUFJLEVBQUUsV0FBVztVQUFFQyxRQUFRLEVBQUU7UUFBRTtNQUFFLGdCQUM3Qy9LLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ2pGLE1BQU07UUFBQ2lULEVBQUUsRUFBQyxJQUFJO1FBQUN2UCxFQUFFLEVBQUMsb0JBQW9CO1FBQUMrQixLQUFLLEVBQUU7VUFBRTBOLE1BQU0sRUFBRTtRQUFFO01BQUUsZ0JBQzNEOVQsS0FBQSxDQUFBNEYsYUFBQSxDQUFDakYsTUFBTSxDQUFDb1QsT0FBTyxRQUFDLE9BQXFCLENBQy9CLENBQUMsZUFDVC9ULEtBQUEsQ0FBQTRGLGFBQUE7UUFBR3ZCLEVBQUUsRUFBQyxvQkFBb0I7UUFBQytCLEtBQUssRUFBRTtVQUFFME4sTUFBTSxFQUFFLFdBQVc7VUFBRS9KLEtBQUssRUFBRSxNQUFNO1VBQUVpSyxRQUFRLEVBQUUsT0FBTztVQUFFQyxVQUFVLEVBQUU7UUFBSztNQUFFLGdCQUM1R2pVLEtBQUEsQ0FBQTRGLGFBQUEsaUJBQVEsZ0JBQXNCLENBQUMsOEZBQTBGLGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGVBQU0sV0FBVSxDQUFDLGtCQUFjLGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGVBQU0sU0FBYSxDQUFDLG1JQUErSCxlQUFBNUYsS0FBQSxDQUFBNEYsYUFBQSxpQkFBUSxRQUFjLENBQUMsb0dBQWdHLGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGlCQUFRLFVBQWdCLENBQUMsNEJBQXdCLGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGVBQU0sb0JBQXdCLENBQUMsbURBQ2pmLENBQ0EsQ0FDRixDQUNFLENBQUMsRUFFVCxDQUFDMEosYUFBYSxnQkFDYnRQLEtBQUEsQ0FBQTRGLGFBQUE7UUFDRStOLElBQUksRUFBQyxRQUFRO1FBQ2IsYUFBVSxRQUFRO1FBQ2xCdk4sS0FBSyxFQUFFO1VBQ0w0RCxPQUFPLEVBQUUsTUFBTTtVQUNmTyxVQUFVLEVBQUUsUUFBUTtVQUNwQkcsR0FBRyxFQUFFLFFBQVE7VUFDYkQsUUFBUSxFQUFFLE1BQU07VUFDaEJ5SixPQUFPLEVBQUUsZ0JBQWdCO1VBQ3pCbkssS0FBSyxFQUFFO1FBQ1Q7TUFBRSxnQkFFRi9KLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQzVFLE1BQU07UUFBQ21ULE1BQU07UUFBQ0MsTUFBTTtRQUFDbE8sSUFBSSxFQUFDO01BQU8sQ0FBRSxDQUFDLGVBQ3JDbEcsS0FBQSxDQUFBNEYsYUFBQSxlQUFNLDRGQUEyRixDQUM5RixDQUFDLGdCQUVONUYsS0FBQSxDQUFBNEYsYUFBQSxDQUFBNUYsS0FBQSxDQUFBNkYsUUFBQSxxQkFDRTdGLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3BGLE9BQU87UUFBQzZULE9BQU87TUFBQSxDQUFFLENBQUMsZUFDbkJyVSxLQUFBLENBQUE0RixhQUFBLENBQUNsRixJQUFJO1FBQUM0VCxTQUFTO01BQUEsZ0JBQ2J0VSxLQUFBLENBQUE0RixhQUFBLENBQUNsRixJQUFJLENBQUM2RixHQUFHO1FBQUNpRCxhQUFhLEVBQUM7TUFBUSxnQkFDOUJ4SixLQUFBLENBQUE0RixhQUFBLENBQUNsRixJQUFJLENBQUM2VCxNQUFNO1FBQUNDLFFBQVEsRUFBRSxFQUFHO1FBQUNDLE1BQU0sRUFBRTtNQUFHLGdCQUNwQ3pVLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ2pGLE1BQU07UUFBQ2lULEVBQUUsRUFBQyxJQUFJO1FBQUMxTixJQUFJLEVBQUMsT0FBTztRQUFDRSxLQUFLLEVBQUU7VUFBRUMsU0FBUyxFQUFFO1FBQUU7TUFBRSxnQkFDbkRyRyxLQUFBLENBQUE0RixhQUFBLENBQUNqRixNQUFNLENBQUNvVCxPQUFPLFFBQUMsVUFFZCxlQUFBL1QsS0FBQSxDQUFBNEYsYUFBQSxDQUFDOUUsS0FBSztRQUNKb0YsSUFBSSxFQUFDLE9BQU87UUFDWkUsS0FBSyxFQUFFO1VBQUU2RCxVQUFVLEVBQUUsT0FBTztVQUFFVCxhQUFhLEVBQUU7UUFBUyxDQUFFO1FBQ3hETyxLQUFLLEVBQUU2RixrQkFBa0IsR0FBRyxRQUFRLEdBQUlDLFFBQVEsR0FBRyxPQUFPLEdBQUc7TUFBUSxHQUVwRUEsUUFBUSxHQUFJRCxrQkFBa0IsR0FBRyxlQUFlLEdBQUcsZUFBZSxHQUFJLFNBQ2xFLENBQ08sQ0FDVixDQUFDLGVBQ1Q1UCxLQUFBLENBQUE0RixhQUFBO1FBQUdRLEtBQUssRUFBRTtVQUFFME4sTUFBTSxFQUFFLGdCQUFnQjtVQUFFL0osS0FBSyxFQUFFLE1BQU07VUFBRUosUUFBUSxFQUFFO1FBQVM7TUFBRSxnQkFDeEUzSixLQUFBLENBQUE0RixhQUFBLGlCQUFRLGVBQXFCLENBQUMsS0FBQyxFQUFFNEcsS0FBSyxJQUFJQSxLQUFLLENBQUNqRixNQUFNLElBQUssU0FBUyxFQUNuRXFJLGtCQUFrQixHQUFHLGtEQUFrRCxHQUFHLEVBQzFFLENBQUMsRUFDRkssV0FBVyxJQUFJQyxRQUFRLGdCQUN2QmxRLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQzdFLElBQUk7UUFBQzJULE9BQU87UUFBQ3hPLElBQUksRUFBQyxPQUFPO1FBQUNFLEtBQUssRUFBRTtVQUFFc04sWUFBWSxFQUFFO1FBQVE7TUFBRSxHQUN6RHpELFdBQVcsZ0JBQ1ZqUSxLQUFBLENBQUE0RixhQUFBLENBQUM3RSxJQUFJLENBQUM0VCxJQUFJLHFCQUNSM1UsS0FBQSxDQUFBNEYsYUFBQSxDQUFDN0UsSUFBSSxDQUFDSixNQUFNLFFBQUVtUCxZQUFZLEdBQUcsZ0JBQWdCLEdBQUcsa0JBQWdDLENBQUMsZUFDakY5UCxLQUFBLENBQUE0RixhQUFBLENBQUM3RSxJQUFJLENBQUM2VCxXQUFXLHFCQUNmNVUsS0FBQSxDQUFBNEYsYUFBQTtRQUNFUSxLQUFLLEVBQUU7VUFBRXlPLFNBQVMsRUFBRSxXQUFXO1VBQUVsTCxRQUFRLEVBQUUsUUFBUTtVQUFFSyxPQUFPLEVBQUUsT0FBTztVQUFFM0QsU0FBUyxFQUFFO1FBQVMsQ0FBRTtRQUM3RitDLEtBQUssRUFBRTBHLFlBQVksR0FBRyxxRUFBcUUsR0FBRztNQUEyQyxHQUN6SUcsV0FBa0IsQ0FBQyxFQUNwQkYsZ0JBQWdCLGdCQUNmL1AsS0FBQSxDQUFBNEYsYUFBQTtRQUFNUSxLQUFLLEVBQUU7VUFBRXVELFFBQVEsRUFBRSxRQUFRO1VBQUVJLEtBQUssRUFBRSxNQUFNO1VBQUVDLE9BQU8sRUFBRSxPQUFPO1VBQUUzRCxTQUFTLEVBQUU7UUFBUztNQUFFLEdBQUMsU0FDbEYsZUFBQXJHLEtBQUEsQ0FBQTRGLGFBQUEsZUFBTSxjQUFrQixDQUFDLHlFQUM1QixDQUFDLEdBQ0wsSUFDWSxDQUNULENBQUMsR0FDVixJQUFJLEVBQ1BzSyxRQUFRLGdCQUNQbFEsS0FBQSxDQUFBNEYsYUFBQSxDQUFDN0UsSUFBSSxDQUFDNFQsSUFBSSxxQkFDUjNVLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQzdFLElBQUksQ0FBQ0osTUFBTSxRQUFDLFlBQXVCLENBQUMsZUFDckNYLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQzdFLElBQUksQ0FBQzZULFdBQVcscUJBQ2Y1VSxLQUFBLENBQUE0RixhQUFBO1FBQU1RLEtBQUssRUFBRTtVQUFFeU8sU0FBUyxFQUFFLFdBQVc7VUFBRWxMLFFBQVEsRUFBRTtRQUFTO01BQUUsR0FBRXVHLFFBQWUsQ0FDN0QsQ0FDVCxDQUFDLEdBQ1YsSUFDQSxDQUFDLEdBQ0wsSUFBSSxFQUNQQyxlQUFlLGdCQUNkblEsS0FBQSxDQUFBNEYsYUFBQSxDQUFDckYsTUFBTTtRQUNMMkYsSUFBSSxFQUFDLE9BQU87UUFDWmdFLEtBQUs7UUFDTEMsSUFBSTtRQUNKMkssYUFBYSxFQUFDLE1BQU07UUFDcEJ6TCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUFRO1VBQ2IsSUFBSTtZQUNGLElBQUkwTCxTQUFTLENBQUNDLFNBQVMsSUFBSUQsU0FBUyxDQUFDQyxTQUFTLENBQUNDLFNBQVMsRUFBRTtjQUN4REYsU0FBUyxDQUFDQyxTQUFTLENBQUNDLFNBQVMsQ0FBQzlFLGVBQWUsQ0FBQztZQUNoRCxDQUFDLE1BQU07Y0FDTCxJQUFNK0UsRUFBRSxHQUFHQyxRQUFRLENBQUN2UCxhQUFhLENBQUMsVUFBVSxDQUFDO2NBQzdDc1AsRUFBRSxDQUFDL1ksS0FBSyxHQUFHZ1UsZUFBZTtjQUMxQitFLEVBQUUsQ0FBQzlPLEtBQUssQ0FBQ2dQLFFBQVEsR0FBRyxPQUFPO2NBQzNCRixFQUFFLENBQUM5TyxLQUFLLENBQUNpUCxPQUFPLEdBQUcsR0FBRztjQUN0QkYsUUFBUSxDQUFDRyxJQUFJLENBQUNDLFdBQVcsQ0FBQ0wsRUFBRSxDQUFDO2NBQzdCQSxFQUFFLENBQUNNLE1BQU0sQ0FBQyxDQUFDO2NBQ1hMLFFBQVEsQ0FBQ00sV0FBVyxDQUFDLE1BQU0sQ0FBQztjQUM1Qk4sUUFBUSxDQUFDRyxJQUFJLENBQUNJLFdBQVcsQ0FBQ1IsRUFBRSxDQUFDO1lBQy9CO1VBQ0YsQ0FBQyxDQUFDLE9BQU9qYSxDQUFDLEVBQUUsQ0FBQztRQUNmLENBQUU7UUFDRm1PLEtBQUssRUFBQztNQUE2RCxnQkFFbkVwSixLQUFBLENBQUE0RixhQUFBLENBQUNoRixJQUFJO1FBQUNmLElBQUksRUFBQztNQUFNLENBQUUsQ0FBQyx1QkFFZCxDQUFDLEdBQ1AsSUFDTyxDQUFDLGVBQ2RHLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ2xGLElBQUksQ0FBQzZULE1BQU07UUFBQ0MsUUFBUSxFQUFFLENBQUU7UUFBQ0MsTUFBTSxFQUFFO01BQUcsZ0JBQ25DelUsS0FBQSxDQUFBNEYsYUFBQSxDQUFDakYsTUFBTTtRQUFDaVQsRUFBRSxFQUFDLElBQUk7UUFBQzFOLElBQUksRUFBQyxPQUFPO1FBQUNFLEtBQUssRUFBRTtVQUFFQyxTQUFTLEVBQUU7UUFBRTtNQUFFLEdBQUMsaUJBQTJCLENBQUMsZUFDbEZyRyxLQUFBLENBQUE0RixhQUFBLENBQUN4RSxTQUFTLENBQUN1VSxLQUFLO1FBQUN6UCxJQUFJLEVBQUMsTUFBTTtRQUFDMFAsTUFBTSxFQUFFO01BQUUsZ0JBQ3JDNVYsS0FBQSxDQUFBNEYsYUFBQSxDQUFDeEUsU0FBUyxxQkFDUnBCLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3hFLFNBQVMsQ0FBQ3lVLEtBQUssUUFBRXRELFdBQVcsSUFBSSxJQUFJLEdBQUdBLFdBQVcsR0FBRyxHQUFxQixDQUFDLGVBQzVFdlMsS0FBQSxDQUFBNEYsYUFBQSxDQUFDeEUsU0FBUyxDQUFDTixLQUFLLFFBQUMsUUFBdUIsQ0FDL0IsQ0FBQyxlQUNaZCxLQUFBLENBQUE0RixhQUFBLENBQUN4RSxTQUFTLHFCQUNScEIsS0FBQSxDQUFBNEYsYUFBQSxDQUFDeEUsU0FBUyxDQUFDeVUsS0FBSztRQUFDQyxJQUFJO1FBQUMxUCxLQUFLLEVBQUU7VUFBRXVELFFBQVEsRUFBRSxTQUFTO1VBQUVELFVBQVUsRUFBRTtRQUFZO01BQUUsR0FDM0UrSSxPQUFPLEdBQ056RCxFQUFFLENBQUMrRyxlQUFlLGdCQUNoQi9WLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3hGLElBQUk7UUFBQ3lULEVBQUUsOEJBQUE1TyxNQUFBLENBQThCcUUsa0JBQWtCLENBQUNtSixPQUFPLENBQUMsQ0FBRztRQUFDckosS0FBSyxFQUFFcUo7TUFBUSxHQUNqRkUsUUFDRyxDQUFDLGdCQUVQM1MsS0FBQSxDQUFBNEYsYUFBQTtRQUFNd0QsS0FBSyxLQUFBbkUsTUFBQSxDQUFLd04sT0FBTztNQUFrRSxHQUFFRSxRQUFlLENBQzNHLEdBRUQsR0FFYSxDQUFDLGVBQ2xCM1MsS0FBQSxDQUFBNEYsYUFBQSxDQUFDeEUsU0FBUyxDQUFDTixLQUFLLFFBQUMsS0FBb0IsQ0FDNUIsQ0FDSSxDQUFDLGVBQ2xCZCxLQUFBLENBQUE0RixhQUFBO1FBQUdRLEtBQUssRUFBRTtVQUFFME4sTUFBTSxFQUFFLFlBQVk7VUFBRW5LLFFBQVEsRUFBRSxRQUFRO1VBQUVJLEtBQUssRUFBRTtRQUFPO01BQUUsZ0JBQ3BFL0osS0FBQSxDQUFBNEYsYUFBQSxpQkFBUSxVQUFnQixDQUFDLEtBQUMsRUFBQ2dOLFVBQVUsSUFBSSxHQUFHLEVBQzNDQyxRQUFRLElBQUksSUFBSSxnQkFDZjdTLEtBQUEsQ0FBQTRGLGFBQUEsZUFDRyxLQUFLLGVBQ041RixLQUFBLENBQUE0RixhQUFBLGlCQUFRLFVBQWdCLENBQUMsS0FBQyxFQUFDaU4sUUFBUSxFQUFDLEtBQ2hDLENBQUMsR0FDTCxJQUFJLEVBQ1AsS0FBSyxlQUNON1MsS0FBQSxDQUFBNEYsYUFBQSxpQkFBUSxnQkFBc0IsQ0FBQyxLQUFDLEVBQUNwQixZQUFZLENBQUNySixNQUFNLEVBQUMsZUFDcEQsQ0FBQyxFQUNIbVgsT0FBTyxJQUFJQSxPQUFPLENBQUMwRCxTQUFTLEtBQUssS0FBSyxJQUFJMUQsT0FBTyxDQUFDMkQsT0FBTyxnQkFDeERqVyxLQUFBLENBQUE0RixhQUFBLENBQUMzRSxPQUFPO1FBQUN3TCxPQUFPO1FBQUN2RyxJQUFJLEVBQUMsT0FBTztRQUFDRSxLQUFLLEVBQUU7VUFBRUMsU0FBUyxFQUFFO1FBQVMsQ0FBRTtRQUFDNlAsT0FBTyxFQUFFNUQsT0FBTyxDQUFDMkQ7TUFBUSxDQUFFLENBQUMsR0FDeEYsSUFBSSxlQUNSalcsS0FBQSxDQUFBNEYsYUFBQSxDQUFDM0UsT0FBTztRQUFDa1YsSUFBSTtRQUFDalEsSUFBSSxFQUFDLE9BQU87UUFBQ0UsS0FBSyxFQUFFO1VBQUVDLFNBQVMsRUFBRTtRQUFTO01BQUUsZ0JBQ3hEckcsS0FBQSxDQUFBNEYsYUFBQTtRQUFHUSxLQUFLLEVBQUU7VUFBRTBOLE1BQU0sRUFBRSxDQUFDO1VBQUVsSyxVQUFVLEVBQUUsR0FBRztVQUFFRyxLQUFLLEVBQUU7UUFBTztNQUFFLEdBQUMsYUFBYyxDQUFDLGVBQ3hFL0osS0FBQSxDQUFBNEYsYUFBQTtRQUFHUSxLQUFLLEVBQUU7VUFBRTBOLE1BQU0sRUFBRSxZQUFZO1VBQUVuSyxRQUFRLEVBQUUsUUFBUTtVQUFFc0ssVUFBVSxFQUFFO1FBQUs7TUFBRSxHQUFDLGtCQUN4RCxlQUFBalUsS0FBQSxDQUFBNEYsYUFBQSxlQUFNLFdBQWUsQ0FBQyxzQkFBa0IsZUFBQTVGLEtBQUEsQ0FBQTRGLGFBQUEsZUFBTSxjQUFrQixDQUFDLGlIQUE2RyxlQUFBNUYsS0FBQSxDQUFBNEYsYUFBQSxlQUFNLFNBQWEsQ0FBQyw0QkFDak4sQ0FDSSxDQUFDLEVBQ1QsRUFBRWtKLG1CQUFtQixJQUFJMVAsTUFBTSxDQUFDMFAsbUJBQW1CLENBQUMsQ0FBQ3ZMLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQzNEdkQsS0FBQSxDQUFBNEYsYUFBQTtRQUFHUSxLQUFLLEVBQUU7VUFBRTBOLE1BQU0sRUFBRSxZQUFZO1VBQUVuSyxRQUFRLEVBQUUsUUFBUTtVQUFFSSxLQUFLLEVBQUU7UUFBTztNQUFFLGdCQUNwRS9KLEtBQUEsQ0FBQTRGLGFBQUEsaUJBQVEsaUJBQXVCLENBQUMsbUVBQTBELGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGVBQU0saUJBQXFCLENBQUMsNENBQ3JILENBQUMsR0FDRixJQUNPLENBQ0wsQ0FBQyxFQUVWa0osbUJBQW1CLElBQUkxUCxNQUFNLENBQUMwUCxtQkFBbUIsQ0FBQyxDQUFDdkwsSUFBSSxDQUFDLENBQUMsSUFBSSxPQUFPd0wsOEJBQThCLEtBQUssVUFBVSxnQkFDaEgvTyxLQUFBLENBQUE0RixhQUFBLENBQUNsRixJQUFJLENBQUM2RixHQUFHLHFCQUNQdkcsS0FBQSxDQUFBNEYsYUFBQSxDQUFDbEYsSUFBSSxDQUFDNlQsTUFBTTtRQUFDOU4sS0FBSyxFQUFFO01BQUcsZ0JBQ3JCekcsS0FBQSxDQUFBNEYsYUFBQSxDQUFDcEYsT0FBTyxNQUFFLENBQUMsZUFDWFIsS0FBQSxDQUFBNEYsYUFBQSxDQUFDakYsTUFBTTtRQUFDaVQsRUFBRSxFQUFDLElBQUk7UUFBQzFOLElBQUksRUFBQyxPQUFPO1FBQUM2RCxLQUFLLEVBQUM7TUFBSyxnQkFDdEMvSixLQUFBLENBQUE0RixhQUFBLENBQUNoRixJQUFJO1FBQUNmLElBQUksRUFBQztNQUFjLENBQUUsQ0FBQywrQ0FFdEIsQ0FBQyxlQUNURyxLQUFBLENBQUE0RixhQUFBLENBQUMzRSxPQUFPO1FBQUN3TCxPQUFPO1FBQUN2RyxJQUFJLEVBQUM7TUFBTyxnQkFDM0JsRyxLQUFBLENBQUE0RixhQUFBO1FBQUdRLEtBQUssRUFBRTtVQUFFME4sTUFBTSxFQUFFLENBQUM7VUFBRUcsVUFBVSxFQUFFO1FBQUs7TUFBRSxHQUFDLGVBQzVCLGVBQUFqVSxLQUFBLENBQUE0RixhQUFBLGVBQU0saUJBQXFCLENBQUMsY0FBVSxlQUFBNUYsS0FBQSxDQUFBNEYsYUFBQSxpQkFBUSxXQUFpQixDQUFDLGdIQUE0RyxlQUFBNUYsS0FBQSxDQUFBNEYsYUFBQSxlQUFNLG1CQUF1QixDQUFDLFNBQUssZUFBQTVGLEtBQUEsQ0FBQTRGLGFBQUEsZUFBTSxpQkFBcUIsQ0FBQyxrRkFDdlAsQ0FDSSxDQUFDLGVBQ1Y1RixLQUFBLENBQUE0RixhQUFBLENBQUNuRixJQUFJO1FBQ0gyVixRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBR25iLENBQUMsRUFBSztVQUNmQSxDQUFDLENBQUNvUCxjQUFjLENBQUMsQ0FBQztVQUNsQixJQUFNZ00sQ0FBQyxHQUFHalgsTUFBTSxDQUFDOE8sTUFBSSxDQUFDMUIsS0FBSyxDQUFDTSxrQkFBa0IsSUFBSSxFQUFFLENBQUMsQ0FBQ3ZKLElBQUksQ0FBQyxDQUFDO1VBQzVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQ3hELElBQUksQ0FBQ3NXLENBQUMsQ0FBQyxFQUFFO1lBQ2hDdFQsS0FBSyxDQUFDdVQsS0FBSyxDQUFDLGtFQUFrRSxFQUFFO2NBQUU1SixNQUFNLEVBQUU7WUFBYyxDQUFDLENBQUM7WUFDMUc7VUFDRjtVQUNBcUMsOEJBQThCLENBQUM7WUFDN0J3SCxpQkFBaUIsRUFBRUYsQ0FBQyxDQUFDRyxXQUFXLENBQUMsQ0FBQztZQUNsQy9HLE9BQU8sRUFBRXJRLE1BQU0sQ0FBQzhPLE1BQUksQ0FBQzFCLEtBQUssQ0FBQ08saUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUN4SixJQUFJLENBQUMsQ0FBQyxJQUFJdUYsU0FBUztZQUN2RTJOLEtBQUssRUFBRXJYLE1BQU0sQ0FBQzhPLE1BQUksQ0FBQzFCLEtBQUssQ0FBQ1EsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDekosSUFBSSxDQUFDLENBQUMsSUFBSXVGO1VBQzVELENBQUMsQ0FBQztVQUNGL0YsS0FBSyxDQUFDb1QsSUFBSSxDQUFDLCtEQUErRCxFQUFFO1lBQUV6SixNQUFNLEVBQUUsaUJBQWlCO1lBQUVnSyxTQUFTLEVBQUU7VUFBSyxDQUFDLENBQUM7UUFDN0gsQ0FBRTtRQUNGdFEsS0FBSyxFQUFFO1VBQUU0TixRQUFRLEVBQUUsT0FBTztVQUFFM04sU0FBUyxFQUFFO1FBQVE7TUFBRSxnQkFFakRyRyxLQUFBLENBQUE0RixhQUFBLENBQUNuRixJQUFJLENBQUNrVyxLQUFLLHFCQUNUM1csS0FBQSxDQUFBNEYsYUFBQTtRQUFPZ1IsT0FBTyxFQUFDO01BQXNCLEdBQUMsa0JBQWdCLGVBQUE1VyxLQUFBLENBQUE0RixhQUFBLGVBQU0sa0JBQXNCLENBQUMsS0FBUSxDQUFDLGVBQzVGNUYsS0FBQSxDQUFBNEYsYUFBQSxDQUFDL0UsS0FBSztRQUNKd0QsRUFBRSxFQUFDLHNCQUFzQjtRQUN6QndTLFdBQVcsRUFBQyw2QkFBNkI7UUFDekMxYSxLQUFLLEVBQUUsSUFBSSxDQUFDcVEsS0FBSyxDQUFDTSxrQkFBbUI7UUFDckNnSyxRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRzdiLENBQUM7VUFBQSxPQUFLaVQsTUFBSSxDQUFDL0IsUUFBUSxDQUFDO1lBQUVXLGtCQUFrQixFQUFFN1IsQ0FBQyxDQUFDOGIsTUFBTSxDQUFDNWE7VUFBTSxDQUFDLENBQUM7UUFBQSxDQUFDO1FBQ3ZFNmEsWUFBWSxFQUFDO01BQUssQ0FDbkIsQ0FDUyxDQUFDLGVBQ2JoWCxLQUFBLENBQUE0RixhQUFBLENBQUNuRixJQUFJLENBQUNrVyxLQUFLLHFCQUNUM1csS0FBQSxDQUFBNEYsYUFBQTtRQUFPZ1IsT0FBTyxFQUFDO01BQXFCLEdBQUMsU0FBYyxDQUFDLGVBQ3BENVcsS0FBQSxDQUFBNEYsYUFBQSxDQUFDL0UsS0FBSztRQUNKd0QsRUFBRSxFQUFDLHFCQUFxQjtRQUN4QndTLFdBQVcsRUFBQyxTQUFTO1FBQ3JCMWEsS0FBSyxFQUFFLElBQUksQ0FBQ3FRLEtBQUssQ0FBQ08saUJBQWtCO1FBQ3BDK0osUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUc3YixDQUFDO1VBQUEsT0FBS2lULE1BQUksQ0FBQy9CLFFBQVEsQ0FBQztZQUFFWSxpQkFBaUIsRUFBRTlSLENBQUMsQ0FBQzhiLE1BQU0sQ0FBQzVhO1VBQU0sQ0FBQyxDQUFDO1FBQUE7TUFBQyxDQUN2RSxDQUNTLENBQUMsZUFDYjZELEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ25GLElBQUksQ0FBQ2tXLEtBQUsscUJBQ1QzVyxLQUFBLENBQUE0RixhQUFBO1FBQU9nUixPQUFPLEVBQUM7TUFBbUIsR0FBQyxjQUFtQixDQUFDLGVBQ3ZENVcsS0FBQSxDQUFBNEYsYUFBQSxDQUFDL0UsS0FBSztRQUNKd0QsRUFBRSxFQUFDLG1CQUFtQjtRQUN0QndTLFdBQVcsRUFBQyxrQ0FBa0M7UUFDOUMxYSxLQUFLLEVBQUUsSUFBSSxDQUFDcVEsS0FBSyxDQUFDUSxlQUFnQjtRQUNsQzhKLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHN2IsQ0FBQztVQUFBLE9BQUtpVCxNQUFJLENBQUMvQixRQUFRLENBQUM7WUFBRWEsZUFBZSxFQUFFL1IsQ0FBQyxDQUFDOGIsTUFBTSxDQUFDNWE7VUFBTSxDQUFDLENBQUM7UUFBQTtNQUFDLENBQ3JFLENBQ1MsQ0FBQyxlQUNiNkQsS0FBQSxDQUFBNEYsYUFBQTtRQUFLUSxLQUFLLEVBQUU7VUFBRTRELE9BQU8sRUFBRSxNQUFNO1VBQUVTLFFBQVEsRUFBRSxNQUFNO1VBQUVDLEdBQUcsRUFBRSxPQUFPO1VBQUVILFVBQVUsRUFBRTtRQUFTO01BQUUsZ0JBQ3BGdkssS0FBQSxDQUFBNEYsYUFBQSxDQUFDckYsTUFBTTtRQUNMMFcsSUFBSSxFQUFDLFFBQVE7UUFDYi9RLElBQUksRUFBQyxPQUFPO1FBQ1pnRSxLQUFLO1FBQ0xnTixRQUFRLEVBQUUsQ0FBQ3pFLE9BQVE7UUFDbkJwSixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVE2RSxNQUFJLENBQUMvQixRQUFRLENBQUM7WUFBRVcsa0JBQWtCLEVBQUUyRixPQUFPLElBQUk7VUFBRyxDQUFDLENBQUM7UUFBQSxDQUFDO1FBQ3BFckosS0FBSyxFQUFFcUosT0FBTyxHQUFHLDZDQUE2QyxHQUFHO01BQW1CLEdBQ3JGLDZCQUVPLENBQUMsZUFDVHpTLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3JGLE1BQU07UUFBQzBXLElBQUksRUFBQyxRQUFRO1FBQUMvUSxJQUFJLEVBQUMsT0FBTztRQUFDNkQsS0FBSyxFQUFDO01BQUssZ0JBQzVDL0osS0FBQSxDQUFBNEYsYUFBQSxDQUFDaEYsSUFBSTtRQUFDZixJQUFJLEVBQUM7TUFBTSxDQUFFLENBQUMsd0JBRWQsQ0FDTCxDQUNELENBQ0ssQ0FDTCxDQUFDLEdBQ1QsSUFBSSxlQUVSRyxLQUFBLENBQUE0RixhQUFBLENBQUNsRixJQUFJLENBQUM2RixHQUFHLHFCQUNQdkcsS0FBQSxDQUFBNEYsYUFBQSxDQUFDbEYsSUFBSSxDQUFDNlQsTUFBTTtRQUFDOU4sS0FBSyxFQUFFO01BQUcsZ0JBQ3JCekcsS0FBQSxDQUFBNEYsYUFBQSxDQUFDcEYsT0FBTyxNQUFFLENBQUMsZUFDWFIsS0FBQSxDQUFBNEYsYUFBQSxDQUFDakYsTUFBTTtRQUFDaVQsRUFBRSxFQUFDLElBQUk7UUFBQzFOLElBQUksRUFBQztNQUFPLEdBQUMsc0NBQWdELENBQUMsZUFDOUVsRyxLQUFBLENBQUE0RixhQUFBO1FBQUdRLEtBQUssRUFBRTtVQUFFME4sTUFBTSxFQUFFLFlBQVk7VUFBRS9KLEtBQUssRUFBRSxNQUFNO1VBQUVrSyxVQUFVLEVBQUUsR0FBRztVQUFFRCxRQUFRLEVBQUU7UUFBUTtNQUFFLEdBQUMsNkJBQzFELGVBQUFoVSxLQUFBLENBQUE0RixhQUFBLGVBQU0sZ0JBQW9CLENBQUMsU0FBSyxlQUFBNUYsS0FBQSxDQUFBNEYsYUFBQSxpQkFBUSxtQkFBeUIsQ0FBQyx5QkFBcUIsZUFBQTVGLEtBQUEsQ0FBQTRGLGFBQUEsZUFBTSxjQUFrQixDQUFDLG9FQUFnRSxFQUFDLEdBQUcsZUFDL001RixLQUFBLENBQUE0RixhQUFBO1FBQUd1UixJQUFJLEVBQUMseURBQXlEO1FBQUNKLE1BQU0sRUFBQyxRQUFRO1FBQUNLLEdBQUcsRUFBQztNQUFZLEdBQUMsMkJBQXVCLENBQUMsS0FDM0gsRUFBQyxHQUFHLEVBQUMsdURBQXFELGVBQUFwWCxLQUFBLENBQUE0RixhQUFBLGVBQU0sS0FBUyxDQUFDLDRGQUF3RixlQUFBNUYsS0FBQSxDQUFBNEYsYUFBQSxlQUFNLGdCQUFvQixDQUFDLGtFQUM1TCxDQUFDLGVBQ0o1RixLQUFBLENBQUE0RixhQUFBLENBQUMzRSxPQUFPO1FBQUNrVixJQUFJO1FBQUNqUSxJQUFJLEVBQUMsT0FBTztRQUFDRSxLQUFLLEVBQUU7VUFBRUMsU0FBUyxFQUFFLFFBQVE7VUFBRTJOLFFBQVEsRUFBRTtRQUFRO01BQUUsZ0JBQzNFaFUsS0FBQSxDQUFBNEYsYUFBQSxDQUFDM0UsT0FBTyxDQUFDTixNQUFNLFFBQUMsZ0NBQThDLENBQUMsZUFDL0RYLEtBQUEsQ0FBQTRGLGFBQUE7UUFBR1EsS0FBSyxFQUFFO1VBQUUwTixNQUFNLEVBQUUsWUFBWTtVQUFFRyxVQUFVLEVBQUUsSUFBSTtVQUFFdEssUUFBUSxFQUFFO1FBQVM7TUFBRSxHQUFDLDBFQUNBLGVBQUEzSixLQUFBLENBQUE0RixhQUFBLENBQUN4RixJQUFJO1FBQUN5VCxFQUFFLEVBQUM7TUFBMEIsR0FBQyxRQUFZLENBQUMsbUNBQ25HLGVBQUE3VCxLQUFBLENBQUE0RixhQUFBLENBQUN4RixJQUFJO1FBQUN5VCxFQUFFLEVBQUM7TUFBbUIsR0FBQyxTQUFhLENBQUMsNEZBQThFLEVBQUMsR0FBRyxlQUNuSjdULEtBQUEsQ0FBQTRGLGFBQUE7UUFBR3VSLElBQUksRUFBQyxnREFBZ0Q7UUFBQ0osTUFBTSxFQUFDLFFBQVE7UUFBQ0ssR0FBRyxFQUFDO01BQXFCLEdBQUMsd0NBQXlDLENBQUMsRUFDNUksR0FBRyxFQUFDLFFBQU0sZUFBQXBYLEtBQUEsQ0FBQTRGLGFBQUEsZUFBTSxhQUFZLENBQUMsNkNBQzdCLENBQ0ksQ0FBQyxFQUNUcUosVUFBVSxJQUFJLE9BQU8zQyxTQUFTLEtBQUssVUFBVSxnQkFDNUN0TSxLQUFBLENBQUE0RixhQUFBO1FBQUtRLEtBQUssRUFBRTtVQUFFQyxTQUFTLEVBQUUsUUFBUTtVQUFFMkQsT0FBTyxFQUFFLE1BQU07VUFBRVMsUUFBUSxFQUFFLE1BQU07VUFBRUMsR0FBRyxFQUFFLE9BQU87VUFBRUgsVUFBVSxFQUFFO1FBQVM7TUFBRSxnQkFDekd2SyxLQUFBLENBQUE0RixhQUFBLENBQUNyRixNQUFNO1FBQ0wyRixJQUFJLEVBQUMsT0FBTztRQUNabVIsT0FBTztRQUNQSixJQUFJLEVBQUMsUUFBUTtRQUNiNU4sT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUEsRUFBUTtVQUNiN0YsdUJBQXVCLENBQUNMLDBCQUEwQixDQUFDO1VBQ25EbUosU0FBUyxDQUFDO1lBQUVwSCxPQUFPLEVBQUUvQjtVQUEyQixDQUFDLENBQUM7UUFDcEQsQ0FBRTtRQUNGaUcsS0FBSyxFQUFDO01BQWdFLGdCQUV0RXBKLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ2hGLElBQUk7UUFBQ2YsSUFBSSxFQUFDLE1BQU07UUFBQyxlQUFZO01BQU0sQ0FBRSxDQUFDLHFCQUN0QixFQUFDc0QsMEJBQTBCLEVBQUMsR0FDdkMsQ0FBQyxlQUNUbkQsS0FBQSxDQUFBNEYsYUFBQTtRQUFNUSxLQUFLLEVBQUU7VUFBRTJELEtBQUssRUFBRSxNQUFNO1VBQUVKLFFBQVEsRUFBRTtRQUFTO01BQUUsR0FBQyxpQkFDbkMsZUFBQTNKLEtBQUEsQ0FBQTRGLGFBQUEsZUFBT3ZDLHNCQUFzQixDQUFDLENBQVEsQ0FBQyx3Q0FDbEQsQ0FDSCxDQUFDLEdBQ0osSUFDTyxDQUNMLENBQUMsZUFFWHJELEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ2xGLElBQUksQ0FBQzZGLEdBQUcscUJBQ1B2RyxLQUFBLENBQUE0RixhQUFBLENBQUNsRixJQUFJLENBQUM2VCxNQUFNO1FBQUM5TixLQUFLLEVBQUU7TUFBRyxnQkFDckJ6RyxLQUFBLENBQUE0RixhQUFBLENBQUNwRixPQUFPLE1BQUUsQ0FBQyxlQUNYUixLQUFBLENBQUE0RixhQUFBLENBQUNqRixNQUFNO1FBQUNpVCxFQUFFLEVBQUMsSUFBSTtRQUFDMU4sSUFBSSxFQUFDO01BQU8sZ0JBQzFCbEcsS0FBQSxDQUFBNEYsYUFBQSxDQUFDaEYsSUFBSTtRQUFDZixJQUFJLEVBQUM7TUFBTyxDQUFFLENBQUMsRUFDcEIsR0FBRyxFQUFDLGlDQUVMLGVBQUFHLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQzlFLEtBQUs7UUFBQ29GLElBQUksRUFBQyxPQUFPO1FBQUM2RCxLQUFLLEVBQUU4RyxjQUFjLENBQUMxVixNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFPO1FBQUNpTCxLQUFLLEVBQUU7VUFBRTZELFVBQVUsRUFBRTtRQUFRO01BQUUsR0FDcEc0RyxjQUFjLENBQUMxVixNQUFNLEVBQUMsYUFDbEIsQ0FBQyxFQUNQaVYsV0FBVyxDQUFDalYsTUFBTSxHQUFHLENBQUMsZ0JBQ3JCNkUsS0FBQSxDQUFBNEYsYUFBQSxDQUFDOUUsS0FBSztRQUFDb0YsSUFBSSxFQUFDLE9BQU87UUFBQ2dFLEtBQUs7UUFBQ0gsS0FBSyxFQUFDLE1BQU07UUFBQzNELEtBQUssRUFBRTtVQUFFNkQsVUFBVSxFQUFFO1FBQVMsQ0FBRTtRQUFDYixLQUFLLEVBQUM7TUFBMkMsR0FDdEhnSCxXQUFXLENBQUNqVixNQUFNLEVBQUMsWUFDZixDQUFDLEdBQ04sSUFBSSxFQUNQdVYsZ0JBQWdCLENBQUN2VixNQUFNLEdBQUcsQ0FBQyxnQkFDMUI2RSxLQUFBLENBQUE0RixhQUFBLENBQUM5RSxLQUFLO1FBQUNvRixJQUFJLEVBQUMsT0FBTztRQUFDZ0UsS0FBSztRQUFDSCxLQUFLLEVBQUMsTUFBTTtRQUFDM0QsS0FBSyxFQUFFO1VBQUU2RCxVQUFVLEVBQUU7UUFBUztNQUFFLEdBQ3BFeUcsZ0JBQWdCLENBQUN2VixNQUFNLEVBQUMsYUFDcEIsQ0FBQyxHQUNOLElBQ0UsQ0FBQyxFQUNSd1YsVUFBVSxnQkFDVDNRLEtBQUEsQ0FBQTRGLGFBQUE7UUFBR1EsS0FBSyxFQUFFO1VBQUUwTixNQUFNLEVBQUUsaUJBQWlCO1VBQUUvSixLQUFLLEVBQUUsTUFBTTtVQUFFSixRQUFRLEVBQUU7UUFBUztNQUFFLGdCQUN6RTNKLEtBQUEsQ0FBQTRGLGFBQUEsaUJBQVEsb0JBQTBCLENBQUMsRUFBQyxHQUFHLGVBQ3ZDNUYsS0FBQSxDQUFBNEYsYUFBQTtRQUFNUSxLQUFLLEVBQUU7VUFBRXVELFFBQVEsRUFBRTtRQUFTO01BQUUsR0FBRWdILFVBQVUsQ0FBQ0csTUFBTSxJQUFJLGVBQXNCLENBQUMsRUFDakYsS0FBSyxlQUNOOVEsS0FBQSxDQUFBNEYsYUFBQSxpQkFBUSxPQUFhLENBQUMsS0FBQyxFQUFDK0ssVUFBVSxDQUFDMkcsU0FBUyxFQUFDLEdBQUMsRUFBQzNHLFVBQVUsQ0FBQzRHLFFBQVEsRUFBQyxZQUNuRSxFQUFDNUcsVUFBVSxDQUFDNkcsVUFBVSxHQUFHLENBQUMsUUFBQXZTLE1BQUEsQ0FBUTBMLFVBQVUsQ0FBQzZHLFVBQVUsbUJBQWdCLEVBQUUsRUFDeEUsS0FBSyxlQUNOeFgsS0FBQSxDQUFBNEYsYUFBQSxpQkFBUSxRQUFjLENBQUMsS0FBQyxFQUFDK0ssVUFBVSxDQUFDOEcsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUNuRCxDQUFDLGdCQUVKelgsS0FBQSxDQUFBNEYsYUFBQTtRQUFHUSxLQUFLLEVBQUU7VUFBRTBOLE1BQU0sRUFBRSxpQkFBaUI7VUFBRS9KLEtBQUssRUFBRSxNQUFNO1VBQUVKLFFBQVEsRUFBRTtRQUFTO01BQUUsR0FBQywwREFDbEIsZUFBQTNKLEtBQUEsQ0FBQTRGLGFBQUEsaUJBQVEsZ0JBQXNCLENBQUMsb0NBQ3RGLENBQ0osZUFDRDVGLEtBQUEsQ0FBQTRGLGFBQUE7UUFBS1EsS0FBSyxFQUFFO1VBQUU0RCxPQUFPLEVBQUUsTUFBTTtVQUFFTyxVQUFVLEVBQUUsUUFBUTtVQUFFRyxHQUFHLEVBQUUsT0FBTztVQUFFRCxRQUFRLEVBQUUsTUFBTTtVQUFFaUosWUFBWSxFQUFFO1FBQVE7TUFBRSxHQUMxRyxPQUFPL0Usc0JBQXNCLEtBQUssVUFBVSxnQkFDM0MzTyxLQUFBLENBQUE0RixhQUFBLENBQUNyRixNQUFNO1FBQUMyRixJQUFJLEVBQUMsT0FBTztRQUFDZ0UsS0FBSztRQUFDYixPQUFPLEVBQUVzRixzQkFBdUI7UUFBQ3ZGLEtBQUssRUFBQztNQUF1QyxnQkFDdkdwSixLQUFBLENBQUE0RixhQUFBLENBQUNoRixJQUFJO1FBQUNmLElBQUksRUFBQztNQUFTLENBQUUsQ0FBQyxtQkFFakIsQ0FBQyxHQUNQLElBQUksRUFDUDhRLFVBQVUsSUFBSUEsVUFBVSxDQUFDK0csY0FBYyxHQUFHLENBQUMsSUFBSSxPQUFPaEoscUJBQXFCLEtBQUssVUFBVSxnQkFDekYxTyxLQUFBLENBQUE0RixhQUFBLENBQUE1RixLQUFBLENBQUE2RixRQUFBLHFCQUNFN0YsS0FBQSxDQUFBNEYsYUFBQSxDQUFDckYsTUFBTTtRQUNMMkYsSUFBSSxFQUFDLE9BQU87UUFDWm1SLE9BQU87UUFDUGhPLE9BQU8sRUFBRXFGLHFCQUFzQjtRQUMvQnRGLEtBQUsscUJBQUFuRSxNQUFBLENBQXFCMEwsVUFBVSxDQUFDK0csY0FBYztNQUFVLGdCQUU3RDFYLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ2hGLElBQUk7UUFBQ2YsSUFBSSxFQUFDO01BQVEsQ0FBRSxDQUFDLGtCQUVoQixDQUFDLGVBQ1RHLEtBQUEsQ0FBQTRGLGFBQUE7UUFBTVEsS0FBSyxFQUFFO1VBQUUyRCxLQUFLLEVBQUUsTUFBTTtVQUFFSixRQUFRLEVBQUU7UUFBUztNQUFFLEdBQ2hEZ0gsVUFBVSxDQUFDK0csY0FBYyxFQUFDLE9BQUssRUFBQy9HLFVBQVUsQ0FBQytHLGNBQWMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBQyxPQUN4RSxDQUNOLENBQUMsR0FDRCxJQUFJLEVBQ1AsT0FBTzdLLG1CQUFtQixLQUFLLFVBQVUsZ0JBQ3hDN00sS0FBQSxDQUFBNEYsYUFBQSxDQUFDckYsTUFBTTtRQUFDMkYsSUFBSSxFQUFDLE9BQU87UUFBQ2dFLEtBQUs7UUFBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQ3NPLHFCQUFzQjtRQUFDdk8sS0FBSyxFQUFDO01BQTZCLGdCQUNqR3BKLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ2hGLElBQUk7UUFBQ2YsSUFBSSxFQUFDO01BQU0sQ0FBRSxDQUFDLGlDQUVkLENBQUMsR0FDUCxJQUFJLEVBQ1A4USxVQUFVLElBQUlBLFVBQVUsQ0FBQzJHLFNBQVMsR0FBRyxDQUFDLElBQUksT0FBT3pJLG9CQUFvQixLQUFLLFVBQVUsZ0JBQ25GN08sS0FBQSxDQUFBNEYsYUFBQSxDQUFDckYsTUFBTTtRQUNMMkYsSUFBSSxFQUFDLE9BQU87UUFDWmdFLEtBQUs7UUFDTGIsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUEsRUFBUTtVQUNiLElBQUk7WUFDRndGLG9CQUFvQixDQUFDLENBQUM7VUFDeEIsQ0FBQyxDQUFDLE9BQU81VCxDQUFDLEVBQUUsQ0FBQztRQUNmLENBQUU7UUFDRm1PLEtBQUssRUFBQztNQUE2QixnQkFFbkNwSixLQUFBLENBQUE0RixhQUFBLENBQUNoRixJQUFJO1FBQUNmLElBQUksRUFBQztNQUFRLENBQUUsQ0FBQyxhQUVoQixDQUFDLEdBQ1AsSUFBSSxFQUNQNlEsZ0JBQWdCLENBQUN2VixNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU95VCwwQkFBMEIsS0FBSyxVQUFVLGdCQUM5RTVPLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3JGLE1BQU07UUFDTDJGLElBQUksRUFBQyxPQUFPO1FBQ1pnRSxLQUFLO1FBQ0xILEtBQUssRUFBQyxLQUFLO1FBQ1hWLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBLEVBQVE7VUFDYixJQUFJO1lBQ0Z1RiwwQkFBMEIsQ0FBQyxDQUFDO1VBQzlCLENBQUMsQ0FBQyxPQUFPM1QsQ0FBQyxFQUFFLENBQUM7UUFDZixDQUFFO1FBQ0ZtTyxLQUFLLEVBQUM7TUFBaUMsZ0JBRXZDcEosS0FBQSxDQUFBNEYsYUFBQSxDQUFDaEYsSUFBSTtRQUFDZixJQUFJLEVBQUM7TUFBUSxDQUFFLENBQUMsa0JBRWhCLENBQUMsR0FDUCxJQUNELENBQUMsZUFDTkcsS0FBQSxDQUFBNEYsYUFBQTtRQUFHUSxLQUFLLEVBQUU7VUFBRTJELEtBQUssRUFBRSxNQUFNO1VBQUU2TixTQUFTLEVBQUUsUUFBUTtVQUFFOUQsTUFBTSxFQUFFLENBQUM7VUFBRUcsVUFBVSxFQUFFLElBQUk7VUFBRXRLLFFBQVEsRUFBRTtRQUFRO01BQUUsR0FBQyx1QkFDM0UsZUFBQTNKLEtBQUEsQ0FBQTRGLGFBQUEsaUJBQVEsY0FBb0IsQ0FBQyxrQkFBYyxlQUFBNUYsS0FBQSxDQUFBNEYsYUFBQSxpQkFBUSxNQUFZLENBQUMscUJBQWlCLGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGlCQUFRLE9BQWEsQ0FBQyxPQUFHLGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGlCQUFRLGFBQW1CLENBQUMsdUJBQW1CLGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGVBQU0seUJBQW1DLENBQUMsNEVBQ3ZOLENBQ1EsQ0FDTCxDQUFDLEVBRVZzTixXQUFXLGdCQUNWbFQsS0FBQSxDQUFBNEYsYUFBQSxDQUFDbEYsSUFBSSxDQUFDNkYsR0FBRyxxQkFDUHZHLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ2xGLElBQUksQ0FBQzZULE1BQU07UUFBQzlOLEtBQUssRUFBRTtNQUFHLGdCQUNyQnpHLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3BGLE9BQU8sTUFBRSxDQUFDLGVBQ1hSLEtBQUEsQ0FBQTRGLGFBQUE7UUFBUyxtQkFBZ0IsbUJBQW1CO1FBQUMsb0JBQWlCO01BQXFCLGdCQUNqRjVGLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ2pGLE1BQU07UUFBQ2lULEVBQUUsRUFBQyxJQUFJO1FBQUMxTixJQUFJLEVBQUMsT0FBTztRQUFDN0IsRUFBRSxFQUFDO01BQW1CLEdBQUMsZUFBcUIsQ0FBQyxlQUMxRXJFLEtBQUEsQ0FBQTRGLGFBQUE7UUFBR3ZCLEVBQUUsRUFBQyxxQkFBcUI7UUFBQytCLEtBQUssRUFBRTtVQUFFMkQsS0FBSyxFQUFFLE1BQU07VUFBRTJKLFlBQVksRUFBRSxRQUFRO1VBQUVPLFVBQVUsRUFBRTtRQUFLO01BQUUsZ0JBQzdGalUsS0FBQSxDQUFBNEYsYUFBQSxpQkFBUSxPQUFhLENBQUMsd0NBQW9DLGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGlCQUFRLFFBQWMsQ0FBQyxlQUFXLGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGVBQU0saUJBQXFCLENBQUMsNkNBQXlDLGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGlCQUFRLE1BQVksQ0FBQywwRUFDckwsQ0FBQyxlQUNKNUYsS0FBQSxDQUFBNEYsYUFBQSxDQUFDdEUsb0JBQW9CO1FBQUN1VyxTQUFTLEVBQUUzRSxXQUFZO1FBQUM0RSxnQkFBZ0I7TUFBQSxDQUFFLENBQUMsZUFDakU5WCxLQUFBLENBQUE0RixhQUFBO1FBQVNRLEtBQUssRUFBRTtVQUFFQyxTQUFTLEVBQUU7UUFBVTtNQUFFLGdCQUN2Q3JHLEtBQUEsQ0FBQTRGLGFBQUE7UUFBU1EsS0FBSyxFQUFFO1VBQUUrQyxNQUFNLEVBQUUsU0FBUztVQUFFWSxLQUFLLEVBQUU7UUFBTztNQUFFLEdBQUMsWUFBbUIsQ0FBQyxlQUMxRS9KLEtBQUEsQ0FBQTRGLGFBQUE7UUFBS1EsS0FBSyxFQUFFO1VBQUUwRCxVQUFVLEVBQUUsVUFBVTtVQUFFSCxRQUFRLEVBQUUsU0FBUztVQUFFb08sVUFBVSxFQUFFLFNBQVM7VUFBRTdELE9BQU8sRUFBRSxRQUFRO1VBQUVWLFlBQVksRUFBRTtRQUFFO01BQUUsR0FBRU4sV0FBaUIsQ0FDbkksQ0FDRixDQUNFLENBQ0wsQ0FBQyxHQUNULElBQ0EsQ0FDTixDQUVHLENBQUMsRUFFVDVELGFBQWEsZ0JBQ1p0UCxLQUFBLENBQUE0RixhQUFBLENBQUN6RSxPQUFPO1FBQUNpRixLQUFLLEVBQUU7VUFBRW9OLFlBQVksRUFBRSxDQUFDO1VBQUVuTixTQUFTLEVBQUUsTUFBTTtVQUFFb04sU0FBUyxFQUFFO1FBQTZCO01BQUUsZ0JBQzlGelQsS0FBQSxDQUFBNEYsYUFBQTtRQUFLUSxLQUFLLEVBQUU7VUFBRTRELE9BQU8sRUFBRSxNQUFNO1VBQUVPLFVBQVUsRUFBRSxZQUFZO1VBQUVDLGNBQWMsRUFBRSxlQUFlO1VBQUVFLEdBQUcsRUFBRSxRQUFRO1VBQUVELFFBQVEsRUFBRSxNQUFNO1VBQUVpSixZQUFZLEVBQUU7UUFBUztNQUFFLGdCQUNsSjFULEtBQUEsQ0FBQTRGLGFBQUEsMkJBQ0U1RixLQUFBLENBQUE0RixhQUFBLENBQUNqRixNQUFNO1FBQUNpVCxFQUFFLEVBQUMsSUFBSTtRQUFDeE4sS0FBSyxFQUFFO1VBQUUwTixNQUFNLEVBQUU7UUFBRTtNQUFFLEdBQUMsY0FFcEMsZUFBQTlULEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQzlFLEtBQUs7UUFBQ29GLElBQUksRUFBQyxPQUFPO1FBQUNnRSxLQUFLO1FBQUNILEtBQUssRUFBQyxPQUFPO1FBQUMzRCxLQUFLLEVBQUU7VUFBRTZELFVBQVUsRUFBRSxPQUFPO1VBQUVULGFBQWEsRUFBRTtRQUFTO01BQUUsR0FDN0ZoRixZQUFZLENBQUNySixNQUFNLEVBQUMsVUFDaEIsQ0FDRCxDQUFDLGVBQ1Q2RSxLQUFBLENBQUE0RixhQUFBO1FBQUdRLEtBQUssRUFBRTtVQUFFME4sTUFBTSxFQUFFLFlBQVk7VUFBRS9KLEtBQUssRUFBRSxNQUFNO1VBQUVKLFFBQVEsRUFBRTtRQUFRO01BQUUsR0FDbEU4RyxpQkFBaUIsQ0FBQzVULE1BQU0sQ0FBQyxVQUFDc1UsQ0FBQztRQUFBLE9BQUssQ0FBQzVPLHdCQUF3QixDQUFDNE8sQ0FBQyxDQUFDO01BQUEsRUFBQyxDQUFDaFcsTUFBTSxFQUFDLFdBQU0sRUFBQyxHQUFHLEVBQy9Fc1YsaUJBQWlCLENBQUM1VCxNQUFNLENBQUMsVUFBQ3NVLENBQUM7UUFBQSxPQUFLNU8sd0JBQXdCLENBQUM0TyxDQUFDLENBQUM7TUFBQSxFQUFDLENBQUNoVyxNQUFNLEVBQUMsb0JBQ3JFLEVBQUM4VyxlQUFlLENBQUM5VyxNQUFNLEdBQUcsQ0FBQyxZQUFBOEosTUFBQSxDQUFTZ04sZUFBZSxDQUFDOVcsTUFBTSwwQkFBdUIsRUFDaEYsQ0FDQSxDQUFDLEVBQ0w4VCxVQUFVLGdCQUNUalAsS0FBQSxDQUFBNEYsYUFBQSxDQUFDckYsTUFBTSxDQUFDb1YsS0FBSztRQUFDelAsSUFBSSxFQUFDO01BQU8sR0FDdkIsT0FBT2lILGNBQWMsS0FBSyxVQUFVLGdCQUNuQ25OLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3JGLE1BQU07UUFBQzRKLElBQUk7UUFBQzJLLGFBQWEsRUFBQyxNQUFNO1FBQUN6TCxPQUFPLEVBQUU4RCxjQUFlO1FBQUMvRCxLQUFLLEVBQUM7TUFBbUIsZ0JBQ2xGcEosS0FBQSxDQUFBNEYsYUFBQSxDQUFDaEYsSUFBSTtRQUFDZixJQUFJLEVBQUM7TUFBUyxDQUFFLENBQUMsV0FFakIsQ0FBQyxHQUNQLElBQUksZUFDUkcsS0FBQSxDQUFBNEYsYUFBQSxDQUFDckYsTUFBTTtRQUNMOFcsT0FBTztRQUNQSixJQUFJLEVBQUMsUUFBUTtRQUNiNU4sT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUEsRUFBUTtVQUNiLElBQUksT0FBT2lELFNBQVMsS0FBSyxVQUFVLEVBQUU7VUFDckM0QixNQUFJLENBQUM4SixpQkFBaUIsQ0FBQyxDQUFDO1FBQzFCO01BQUUsZ0JBRUZoWSxLQUFBLENBQUE0RixhQUFBLENBQUNoRixJQUFJO1FBQUNmLElBQUksRUFBQztNQUFLLENBQUUsQ0FBQyxZQUViLENBQ0ksQ0FBQyxHQUNiLElBQ0QsQ0FBQyxFQUNMMkUsWUFBWSxDQUFDckosTUFBTSxHQUFHLENBQUMsZ0JBQ3RCNkUsS0FBQSxDQUFBNEYsYUFBQSxDQUFDdEIseUJBQXlCO1FBQ3hCRSxZQUFZLEVBQUVBLFlBQWE7UUFDM0JDLGVBQWUsRUFBRUEsZUFBZ0I7UUFDakNDLGlCQUFpQixFQUFFQSxpQkFBa0I7UUFDckNmLFdBQVcsRUFBRUEsV0FBWTtRQUN6QmdCLHNCQUFzQixFQUFFQSxzQkFBdUI7UUFDL0NDLGtCQUFrQixFQUFFQTtNQUFtQixDQUN4QyxDQUFDLGdCQUVGNUUsS0FBQSxDQUFBNEYsYUFBQTtRQUFHUSxLQUFLLEVBQUU7VUFBRTJELEtBQUssRUFBRSxNQUFNO1VBQUU2TixTQUFTLEVBQUUsUUFBUTtVQUFFdlIsU0FBUyxFQUFFLE9BQU87VUFBRTROLFVBQVUsRUFBRTtRQUFLO01BQUUsR0FBQyxnQ0FDeEQsZUFBQWpVLEtBQUEsQ0FBQTRGLGFBQUEsZUFBT3pDLDBCQUFpQyxDQUFDLFFBQUksZUFBQW5ELEtBQUEsQ0FBQTRGLGFBQUEsaUJBQVEsVUFBZ0IsQ0FBQyxnQkFBWSxlQUFBNUYsS0FBQSxDQUFBNEYsYUFBQSxlQUFNLFdBQWUsQ0FBQyxNQUFFLGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGVBQU0sTUFBVSxDQUFDLDhEQUEwRCxlQUFBNUYsS0FBQSxDQUFBNEYsYUFBQSxpQkFBUSxNQUFZLENBQUMsb0JBQ3ZPLENBRUUsQ0FBQyxHQUNSLElBQUksZUFFUjVGLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3pFLE9BQU87UUFBQytJLEtBQUs7UUFBQzlELEtBQUssRUFBRTtVQUFFQyxTQUFTLEVBQUUsTUFBTTtVQUFFNFIsVUFBVSxFQUFFO1FBQUUsQ0FBRTtRQUFDNVQsRUFBRSxFQUFDO01BQW1CLGdCQUNoRnJFLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3BGLE9BQU8sTUFBRSxDQUFDLGVBQ1hSLEtBQUEsQ0FBQTRGLGFBQUE7UUFBR1EsS0FBSyxFQUFFO1VBQUUwTixNQUFNLEVBQUUsQ0FBQztVQUFFL0osS0FBSyxFQUFFLE1BQU07VUFBRUosUUFBUSxFQUFFLFFBQVE7VUFBRXNLLFVBQVUsRUFBRSxHQUFHO1VBQUVELFFBQVEsRUFBRTtRQUFRO01BQUUsZ0JBQzdGaFUsS0FBQSxDQUFBNEYsYUFBQSxpQkFBUSxXQUFpQixDQUFDLHNDQUFrQyxlQUFBNUYsS0FBQSxDQUFBNEYsYUFBQSxlQUFNLFNBQWEsQ0FBQywyQkFBdUIsZUFBQTVGLEtBQUEsQ0FBQTRGLGFBQUEsZUFBTSxNQUFVLENBQUMsOEdBQTBHLGVBQUE1RixLQUFBLENBQUE0RixhQUFBLGlCQUFRLGdCQUFzQixDQUFDLGtFQUE4RCxlQUFBNUYsS0FBQSxDQUFBNEYsYUFBQSxlQUFNLGlDQUFxQyxDQUFDLHdCQUMxVyxDQUNJLENBQUMsZUFFVjVGLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQzFFLEtBQUs7UUFDSmdYLElBQUksRUFBRSxJQUFJLENBQUMxTCxLQUFLLENBQUNKLGdCQUFpQjtRQUNsQytMLE9BQU8sRUFBRSxJQUFJLENBQUNDLGtCQUFtQjtRQUNqQ0MsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUEsRUFBUTtVQUNaLElBQU1DLEVBQUUsR0FBRyxPQUFPbkQsUUFBUSxLQUFLLFdBQVcsSUFBSUEsUUFBUSxDQUFDb0QsY0FBYyxDQUFDLHlCQUF5QixDQUFDO1VBQ2hHLElBQUlELEVBQUUsSUFBSSxPQUFPQSxFQUFFLENBQUNFLEtBQUssS0FBSyxVQUFVLEVBQUU7WUFDeENsVixNQUFNLENBQUNtVixxQkFBcUIsQ0FBQztjQUFBLE9BQU1ILEVBQUUsQ0FBQ0UsS0FBSyxDQUFDLENBQUM7WUFBQSxFQUFDO1VBQ2hEO1FBQ0YsQ0FBRTtRQUNGdFMsSUFBSSxFQUFDLE9BQU87UUFDWndTLGtCQUFrQjtRQUNsQkMsYUFBYTtNQUFBLGdCQUViM1ksS0FBQSxDQUFBNEYsYUFBQSxDQUFDMUUsS0FBSyxDQUFDUCxNQUFNLFFBQUMsaUJBQTZCLENBQUMsZUFDNUNYLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQzFFLEtBQUssQ0FBQzZTLE9BQU8scUJBQ1ovVCxLQUFBLENBQUE0RixhQUFBO1FBQUdRLEtBQUssRUFBRTtVQUFFQyxTQUFTLEVBQUUsQ0FBQztVQUFFMEQsS0FBSyxFQUFFO1FBQU87TUFBRSxHQUFDLDJDQUNBLGVBQUEvSixLQUFBLENBQUE0RixhQUFBLGVBQU0sTUFBVSxDQUFDLDZEQUN6RCxDQUFDLGVBQ0o1RixLQUFBLENBQUE0RixhQUFBLENBQUNuRixJQUFJO1FBQ0gyVixRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBR25iLENBQUMsRUFBSztVQUNmQSxDQUFDLENBQUNvUCxjQUFjLENBQUMsQ0FBQztVQUNsQjZELE1BQUksQ0FBQzBLLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZCO01BQUUsZ0JBRUY1WSxLQUFBLENBQUE0RixhQUFBLENBQUNuRixJQUFJLENBQUNrVyxLQUFLLHFCQUNUM1csS0FBQSxDQUFBNEYsYUFBQTtRQUFPZ1IsT0FBTyxFQUFDO01BQXlCLEdBQUMsY0FBbUIsQ0FBQyxlQUM3RDVXLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQy9FLEtBQUs7UUFDSndELEVBQUUsRUFBQyx5QkFBeUI7UUFDNUJ3UyxXQUFXLEVBQUMseUNBQXlDO1FBQ3JEMWEsS0FBSyxFQUFFLElBQUksQ0FBQ3FRLEtBQUssQ0FBQ0gsWUFBYTtRQUMvQnlLLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHN2IsQ0FBQztVQUFBLE9BQUtpVCxNQUFJLENBQUMvQixRQUFRLENBQUM7WUFBRUUsWUFBWSxFQUFFcFIsQ0FBQyxDQUFDOGIsTUFBTSxDQUFDNWE7VUFBTSxDQUFDLENBQUM7UUFBQSxDQUFDO1FBQ2pFMGMsU0FBUyxFQUFFLFNBQVhBLFNBQVNBLENBQUc1ZCxDQUFDLEVBQUs7VUFDaEIsSUFBSUEsQ0FBQyxDQUFDMkMsR0FBRyxLQUFLLE9BQU8sRUFBRTtZQUNyQjNDLENBQUMsQ0FBQ29QLGNBQWMsQ0FBQyxDQUFDO1lBQ2xCNkQsTUFBSSxDQUFDMEssY0FBYyxDQUFDLENBQUM7VUFDdkI7UUFDRjtNQUFFLENBQ0gsQ0FDUyxDQUNSLENBQ08sQ0FBQyxlQUNoQjVZLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQzFFLEtBQUssQ0FBQzRYLE9BQU8scUJBQ1o5WSxLQUFBLENBQUE0RixhQUFBLENBQUNyRixNQUFNO1FBQUMwVyxJQUFJLEVBQUMsUUFBUTtRQUFDNU4sT0FBTyxFQUFFLElBQUksQ0FBQytPO01BQW1CLEdBQUMsUUFFaEQsQ0FBQyxlQUNUcFksS0FBQSxDQUFBNEYsYUFBQSxDQUFDckYsTUFBTTtRQUFDMFcsSUFBSSxFQUFDLFFBQVE7UUFBQ0ksT0FBTztRQUFDaE8sT0FBTyxFQUFFLElBQUksQ0FBQ3VQO01BQWUsZ0JBQ3pENVksS0FBQSxDQUFBNEYsYUFBQSxDQUFDaEYsSUFBSTtRQUFDZixJQUFJLEVBQUM7TUFBSyxDQUFFLENBQUMsWUFFYixDQUNLLENBQ1YsQ0FBQyxlQUNSRyxLQUFBLENBQUE0RixhQUFBLENBQUMxRSxLQUFLO1FBQ0pnWCxJQUFJLEVBQUUsSUFBSSxDQUFDMUwsS0FBSyxDQUFDRyxvQkFBcUI7UUFDdEN3TCxPQUFPLEVBQUUsSUFBSSxDQUFDWSxzQkFBdUI7UUFDckM3UyxJQUFJLEVBQUMsTUFBTTtRQUNYd1Msa0JBQWtCO1FBQ2xCQyxhQUFhO01BQUEsZ0JBRWIzWSxLQUFBLENBQUE0RixhQUFBLENBQUMxRSxLQUFLLENBQUNQLE1BQU0sUUFBQyxnQ0FBNEMsQ0FBQyxlQUMzRFgsS0FBQSxDQUFBNEYsYUFBQSxDQUFDMUUsS0FBSyxDQUFDNlMsT0FBTyxxQkFDWi9ULEtBQUEsQ0FBQTRGLGFBQUE7UUFBR1EsS0FBSyxFQUFFO1VBQUVDLFNBQVMsRUFBRSxDQUFDO1VBQUUwRCxLQUFLLEVBQUUsTUFBTTtVQUFFSixRQUFRLEVBQUUsUUFBUTtVQUFFc0ssVUFBVSxFQUFFO1FBQUs7TUFBRSxHQUFDLG9DQUM3QyxlQUFBalUsS0FBQSxDQUFBNEYsYUFBQSxlQUFNLHNCQUFxQixDQUFDLDREQUF3RCxlQUFBNUYsS0FBQSxDQUFBNEYsYUFBQSxpQkFBUSxnQkFBc0IsQ0FBQywyQ0FDcEosQ0FBQyxlQUNKNUYsS0FBQSxDQUFBNEYsYUFBQSxDQUFDbkYsSUFBSTtRQUFDMlYsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUduYixDQUFDLEVBQUs7VUFBRUEsQ0FBQyxDQUFDb1AsY0FBYyxDQUFDLENBQUM7VUFBRTZELE1BQUksQ0FBQzhLLHVCQUF1QixDQUFDLENBQUM7UUFBRTtNQUFFLGdCQUM3RWhaLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ25GLElBQUksQ0FBQ2tXLEtBQUsscUJBQ1QzVyxLQUFBLENBQUE0RixhQUFBO1FBQU9nUixPQUFPLEVBQUM7TUFBdUIsR0FBQyxxQkFBMEIsQ0FBQyxlQUNsRTVXLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQy9FLEtBQUs7UUFDSndELEVBQUUsRUFBQyx1QkFBdUI7UUFDMUJ3UyxXQUFXLEVBQUMsc0JBQWlCO1FBQzdCMWEsS0FBSyxFQUFFLElBQUksQ0FBQ3FRLEtBQUssQ0FBQ0ksa0JBQW1CO1FBQ3JDa0ssUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUc3YixDQUFDO1VBQUEsT0FBS2lULE1BQUksQ0FBQy9CLFFBQVEsQ0FBQztZQUFFUyxrQkFBa0IsRUFBRTNSLENBQUMsQ0FBQzhiLE1BQU0sQ0FBQzVhO1VBQU0sQ0FBQyxDQUFDO1FBQUE7TUFBQyxDQUN4RSxDQUNTLENBQ1IsQ0FDTyxDQUFDLGVBQ2hCNkQsS0FBQSxDQUFBNEYsYUFBQSxDQUFDMUUsS0FBSyxDQUFDNFgsT0FBTyxxQkFDWjlZLEtBQUEsQ0FBQTRGLGFBQUEsQ0FBQ3JGLE1BQU07UUFBQzBXLElBQUksRUFBQyxRQUFRO1FBQUM1TixPQUFPLEVBQUUsSUFBSSxDQUFDMFA7TUFBdUIsR0FBQyxRQUVwRCxDQUFDLGVBQ1QvWSxLQUFBLENBQUE0RixhQUFBLENBQUNyRixNQUFNO1FBQUMwVyxJQUFJLEVBQUMsUUFBUTtRQUFDSSxPQUFPO1FBQUNoTyxPQUFPLEVBQUUsSUFBSSxDQUFDMlA7TUFBd0IsZ0JBQ2xFaFosS0FBQSxDQUFBNEYsYUFBQSxDQUFDaEYsSUFBSTtRQUFDZixJQUFJLEVBQUM7TUFBTSxDQUFFLENBQUMsV0FFZCxDQUNLLENBQ1YsQ0FDUyxDQUFDO0lBRXZCO0VBQUM7QUFBQSxFQWh6QnFCRyxLQUFLLENBQUNpWixTQUFTO0FBbXpCdkMsU0FBU0MscUJBQXFCQSxDQUFFak4sS0FBSyxFQUFFO0VBQ3JDLElBQU1tRyxRQUFRLEdBQUdqUyxXQUFXLENBQUMsQ0FBQztFQUM5QixvQkFBT0gsS0FBQSxDQUFBNEYsYUFBQSxDQUFDbUcsU0FBUyxFQUFBblIsUUFBQSxLQUFLcVIsS0FBSztJQUFFbUcsUUFBUSxFQUFFQTtFQUFTLEVBQUUsQ0FBQztBQUNyRDtBQUVBK0csTUFBTSxDQUFDQyxPQUFPLEdBQUdGLHFCQUFxQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29tcG9uZW50cy9QZWVyTGlzdC5qcz8xZmIxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gRGVwZW5kZW5jaWVzXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IHVzZUxvY2F0aW9uLCBMaW5rLCB1c2VOYXZpZ2F0ZSB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuXG5jb25zdCB7XG4gIEJ1dHRvbixcbiAgRGl2aWRlcixcbiAgRm9ybSxcbiAgR3JpZCxcbiAgSGVhZGVyLFxuICBJY29uLFxuICBJbnB1dCxcbiAgTGFiZWwsXG4gIExpc3QsXG4gIExvYWRlcixcbiAgTWVzc2FnZSxcbiAgTW9kYWwsXG4gIFNlZ21lbnQsXG4gIFN0YXRpc3RpYyxcbiAgVGFibGVcbn0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3QgR3JhcGhEb2N1bWVudFByZXZpZXcgPSByZXF1aXJlKCcuL0dyYXBoRG9jdW1lbnRQcmV2aWV3Jyk7XG5jb25zdCB7IHBlZXJUb3BvbG9neVRvRG90IH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvcGVlclRvcG9sb2d5RG90Jyk7XG5jb25zdCB7IGlzSHViTmV0d29ya1N0YXR1c1NoYXBlIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViTmV0d29ya1N0YXR1cycpO1xuY29uc3Qge1xuICBub3JtYWxpemVGYWJyaWNQZWVyQWRkcmVzcyxcbiAgbm9ybWFsaXplUGVlckFkZHJlc3NJbnB1dCxcbiAgZGVkdXBlRmFicmljUGVlcnMsXG4gIGZhYnJpY1BlZXJQcmltYXJ5TGFiZWwsXG4gIGZhYnJpY1BlZXJCZWNoMzJJZCxcbiAgcGVlck5hdGl2ZVBlZXJpbmdTdHJpbmcsXG4gIGZhYnJpY1AyUElkZW50aXR5Q29uZmlybWVkLFxuICBjb25zb2xpZGF0ZVVuaWZpZWRQZWVyc0J5RmFicmljSWQsXG4gIGJ1aWxkV2VicnRjQ29tYmluZWRSb3dzLFxuICB3ZWJydGNDb21iaW5lZFRvRmFicmljUGVlclJvd3MsXG4gIG1lcmdlVGNwQW5kV2VicnRjUGVlclJvd3MsXG4gIGlzV2VicnRjVHJhbnNwb3J0UGVlclJvd1xufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9wZWVySWRlbnRpdHknKTtcbmNvbnN0IHtcbiAgbG9hZEh1YlVpRmVhdHVyZUZsYWdzLFxuICBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFnc1xufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJVaUZlYXR1cmVGbGFncycpO1xuY29uc3Qge1xuICByZWFkU3RvcmFnZVN0cmluZyxcbiAgd3JpdGVTdG9yYWdlU3RyaW5nXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0Jyb3dzZXJTdGF0ZScpO1xuY29uc3QgeyB0b2FzdCB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3RvYXN0Jyk7XG5jb25zdCBIdWJQYWdpbmF0aW9uID0gcmVxdWlyZSgnLi9IdWJQYWdpbmF0aW9uJyk7XG5jb25zdCB7IHVzZUh1Ykxpc3RQYWdpbmF0aW9uIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViTGlzdFBhZ2luYXRpb24nKTtcblxuLyoqIERlZmF1bHQg4oCccHJpbWFyeSBhdXRob3JpdHnigJ0gRmFicmljIFRDUCBwZWVyIOKAlCBsb25nLWxpdmVkIGh1YiwgaGlnaCB0cnVzdCwgQml0Y29pbiBoZWFkIHJlZmVyZW5jZS4gKi9cbmNvbnN0IERFRkFVTFRfUFJJTUFSWV9GQUJSSUNfSFVCID0gJ2h1Yi5mYWJyaWMucHViOjc3NzcnO1xuY29uc3QgUFJJTUFSWV9QRUVSX1NUT1JBR0VfS0VZID0gJ2ZhYnJpYy5wZWVycy5wcmltYXJ5RmFicmljQWRkcmVzcyc7XG5cbmZ1bmN0aW9uIHJlYWRQcmltYXJ5UGVlckFkZHJlc3MgKCkge1xuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgcyA9IFN0cmluZyhyZWFkU3RvcmFnZVN0cmluZyhQUklNQVJZX1BFRVJfU1RPUkFHRV9LRVkpIHx8ICcnKS50cmltKCk7XG4gICAgICByZXR1cm4gcyB8fCBERUZBVUxUX1BSSU1BUllfRkFCUklDX0hVQjtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBERUZBVUxUX1BSSU1BUllfRkFCUklDX0hVQjtcbn1cblxuZnVuY3Rpb24gd3JpdGVQcmltYXJ5UGVlckFkZHJlc3MgKGFkZHIpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdyaXRlU3RvcmFnZVN0cmluZyhQUklNQVJZX1BFRVJfU1RPUkFHRV9LRVksIFN0cmluZyhhZGRyIHx8ICcnKS50cmltKCkpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge31cbn1cblxuZnVuY3Rpb24gaW52ZW50b3J5RG9jQ291bnRGb3JGYWJyaWNQZWVyIChnbG9iYWxQZWVycywgZmFicmljSWQpIHtcbiAgaWYgKCFnbG9iYWxQZWVycyB8fCB0eXBlb2YgZ2xvYmFsUGVlcnMgIT09ICdvYmplY3QnIHx8ICFmYWJyaWNJZCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGZpZCA9IFN0cmluZyhmYWJyaWNJZCkudHJpbSgpO1xuICBjb25zdCBkaXJlY3QgPSBnbG9iYWxQZWVyc1tmaWRdO1xuICBpZiAoZGlyZWN0ICYmIGRpcmVjdC5pbnZlbnRvcnkgJiYgQXJyYXkuaXNBcnJheShkaXJlY3QuaW52ZW50b3J5LmRvY3VtZW50cykpIHtcbiAgICByZXR1cm4gZGlyZWN0LmludmVudG9yeS5kb2N1bWVudHMubGVuZ3RoO1xuICB9XG4gIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhnbG9iYWxQZWVycykpIHtcbiAgICBjb25zdCBleCA9IGdsb2JhbFBlZXJzW2tdO1xuICAgIGlmIChleCAmJiBTdHJpbmcoZXguaWQgfHwgJycpID09PSBmaWQgJiYgZXguaW52ZW50b3J5ICYmIEFycmF5LmlzQXJyYXkoZXguaW52ZW50b3J5LmRvY3VtZW50cykpIHtcbiAgICAgIHJldHVybiBleC5pbnZlbnRvcnkuZG9jdW1lbnRzLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIFVuaWZpZWRQZWVyc1BhZ2luYXRlZExpc3QgKHtcbiAgdW5pZmllZFBlZXJzLFxuICBwcmltYXJ5UGVlck5vcm0sXG4gIHNpZ25hbGluZ0hvc3RQb3J0LFxuICBnbG9iYWxQZWVycyxcbiAgb25EaXNjb25uZWN0V2ViUlRDUGVlcixcbiAgb25GYWJyaWNQZWVyUmVzeW5jXG59KSB7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgZmlyc3QgPSB1bmlmaWVkUGVlcnNbMF07XG4gIGNvbnN0IGxhc3QgPSB1bmlmaWVkUGVlcnMubGVuZ3RoID8gdW5pZmllZFBlZXJzW3VuaWZpZWRQZWVycy5sZW5ndGggLSAxXSA6IG51bGw7XG4gIGNvbnN0IHJlc2V0S2V5ID0gYCR7dW5pZmllZFBlZXJzLmxlbmd0aH06JHtmaXJzdCAmJiAoZmlyc3QuaWQgfHwgZmlyc3QuYWRkcmVzcyl9OiR7bGFzdCAmJiAobGFzdC5pZCB8fCBsYXN0LmFkZHJlc3MpfWA7XG4gIGNvbnN0IHtcbiAgICBzbGljZSxcbiAgICBwYWdlLFxuICAgIHRvdGFsUGFnZXMsXG4gICAgcmFuZ2VGcm9tLFxuICAgIHJhbmdlVG8sXG4gICAgdG90YWwsXG4gICAgc2V0UGFnZVxuICB9ID0gdXNlSHViTGlzdFBhZ2luYXRpb24odW5pZmllZFBlZXJzLCByZXNldEtleSk7XG5cbiAgY29uc3Qgc2lnSHAgPSBTdHJpbmcoc2lnbmFsaW5nSG9zdFBvcnQgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgZ3AgPSBnbG9iYWxQZWVycyAmJiB0eXBlb2YgZ2xvYmFsUGVlcnMgPT09ICdvYmplY3QnID8gZ2xvYmFsUGVlcnMgOiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxUYWJsZVxuICAgICAgICBjb21wYWN0XG4gICAgICAgIGNlbGxlZFxuICAgICAgICBzdHJpcGVkXG4gICAgICAgIHNlbGVjdGFibGVcbiAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgdW5zdGFja2FibGVcbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJywgdGFibGVMYXlvdXQ6ICdmaXhlZCcgfX1cbiAgICAgID5cbiAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGwgc3R5bGU9e3sgd2lkdGg6ICcyOCUnIH19PkZhYnJpYyBQZWVyIElEPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGwgc3R5bGU9e3sgd2lkdGg6ICczMiUnIH19PkNvbm5lY3Rpb248L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbCBzdHlsZT17eyB3aWR0aDogJzE4JScgfX0gdGV4dEFsaWduPVwiY2VudGVyXCI+U3RhdHVzPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGwgc3R5bGU9e3sgd2lkdGg6ICcxNCUnIH19PlNlZW48L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbCBjb2xsYXBzaW5nIHRleHRBbGlnbj1cInJpZ2h0XCI+IDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICAgIDxUYWJsZS5Cb2R5PlxuICAgICAgICAgIHtzbGljZS5tYXAoKHBlZXIsIGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWVzaFJvdyA9IGlzV2VicnRjVHJhbnNwb3J0UGVlclJvdyhwZWVyKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcGVlciAmJiAocGVlci5pZCB8fCBwZWVyLmFkZHJlc3MgfHwgcGVlci5wdWJrZXkgfHwgYHBlZXItJHtpZHh9YCk7XG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gcGVlciAmJiAocGVlci5hZGRyZXNzIHx8IHBlZXIuaG9zdCB8fCBwZWVyLnVybCk7XG4gICAgICAgICAgICBjb25zdCBiZWNoMzJJZCA9IGZhYnJpY1BlZXJCZWNoMzJJZChwZWVyKTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlVGFyZ2V0ID0gYmVjaDMySWRcbiAgICAgICAgICAgICAgPyBiZWNoMzJJZFxuICAgICAgICAgICAgICA6IChtZXNoUm93XG4gICAgICAgICAgICAgICAgPyBTdHJpbmcocGVlci5pZCB8fCBpZCB8fCBgcGVlci0ke2lkeH1gKVxuICAgICAgICAgICAgICAgIDogU3RyaW5nKChhZGRyZXNzICYmIGFkZHJlc3MudHJpbSgpKSB8fCBpZCB8fCBgcGVlci0ke2lkeH1gKSk7XG4gICAgICAgICAgICBjb25zdCByb3dLZXkgPSBiZWNoMzJJZCA/IGBpZDoke2JlY2gzMklkfWAgOiAobWVzaFJvdyA/IGBtZXNoOiR7cm91dGVUYXJnZXR9YCA6IHJvdXRlVGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IChwZWVyICYmIHBlZXIuc3RhdHVzKSB8fCAndW5rbm93bic7XG4gICAgICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZCA9IHN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCc7XG4gICAgICAgICAgICBjb25zdCBzY29yZSA9IHBlZXIgJiYgKHBlZXIuc2NvcmUgIT0gbnVsbCA/IHBlZXIuc2NvcmUgOiBudWxsKTtcbiAgICAgICAgICAgIGNvbnN0IG1pc2JlaGF2aW9yID0gcGVlciAmJiBwZWVyLm1pc2JlaGF2aW9yICE9IG51bGwgPyBOdW1iZXIocGVlci5taXNiZWhhdmlvcikgOiBudWxsO1xuICAgICAgICAgICAgY29uc3Qgbmlja25hbWUgPSBwZWVyICYmIHBlZXIubmlja25hbWU7XG4gICAgICAgICAgICBjb25zdCBsYXN0U2VlbiA9IHBlZXIgJiYgKHBlZXIubGFzdFNlZW4gfHwgcGVlci5sYXN0TWVzc2FnZSk7XG4gICAgICAgICAgICBjb25zdCBhZGRyTm9ybSA9IG5vcm1hbGl6ZUZhYnJpY1BlZXJBZGRyZXNzKGFkZHJlc3MpO1xuICAgICAgICAgICAgY29uc3QgaXNQcmltYXJ5Um93ID0gIW1lc2hSb3cgJiYgcHJpbWFyeVBlZXJOb3JtICYmIChhZGRyTm9ybSA9PT0gcHJpbWFyeVBlZXJOb3JtIHx8IFN0cmluZyhhZGRyZXNzKSA9PT0gcHJpbWFyeVBlZXJOb3JtKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25TdHIgPSBwZWVyTmF0aXZlUGVlcmluZ1N0cmluZyhwZWVyLCBzaWdIcCkgfHwgJ+KAlCc7XG4gICAgICAgICAgICBjb25zdCBwMnBDb25maXJtZWQgPSBmYWJyaWNQMlBJZGVudGl0eUNvbmZpcm1lZChwZWVyKTtcbiAgICAgICAgICAgIGNvbnN0IGludk4gPSBncCA/IGludmVudG9yeURvY0NvdW50Rm9yRmFicmljUGVlcihncCwgYmVjaDMySWQgfHwgcm91dGVUYXJnZXQpIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHRjcEZvclJlc3luYyA9IGFkZHJlc3MgJiYgIVN0cmluZyhhZGRyZXNzKS5zdGFydHNXaXRoKCd3ZWJydGM6JylcbiAgICAgICAgICAgICAgPyBub3JtYWxpemVGYWJyaWNQZWVyQWRkcmVzcyhhZGRyZXNzKVxuICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgY29uc3QgbWVzaERpc2Nvbm5lY3RJZCA9IHBlZXIgJiYgcGVlci5tZXRhZGF0YSAmJiBwZWVyLm1ldGFkYXRhLndlYnJ0Y1NpZ25hbGluZ0lkICE9IG51bGxcbiAgICAgICAgICAgICAgPyBTdHJpbmcocGVlci5tZXRhZGF0YS53ZWJydGNTaWduYWxpbmdJZClcbiAgICAgICAgICAgICAgOiBTdHJpbmcocGVlci5pZCB8fCByb3V0ZVRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCBoZWFkbGluZUlkID0gYmVjaDMySWQgfHwgZmFicmljUGVlclByaW1hcnlMYWJlbChwZWVyKTtcbiAgICAgICAgICAgIGNvbnN0IHRhZ1N1bW1hcnkgPSBbXG4gICAgICAgICAgICAgIG1lc2hSb3cgPyAnTWVzaCcgOiBudWxsLFxuICAgICAgICAgICAgICBpc1ByaW1hcnlSb3cgPyAnUHJpbWFyeScgOiBudWxsLFxuICAgICAgICAgICAgICBwMnBDb25maXJtZWQgPyAnUDJQIGlkJyA6IG51bGwsXG4gICAgICAgICAgICAgICghcDJwQ29uZmlybWVkICYmIGJlY2gzMklkICYmIG1lc2hSb3cpID8gJ1NpZ25hbGVkJyA6IG51bGwsXG4gICAgICAgICAgICAgIGludk4gIT0gbnVsbCAmJiBpbnZOID4gMCA/IGBEb2NzICR7aW52Tn1gIDogbnVsbCxcbiAgICAgICAgICAgICAgc2NvcmUgIT0gbnVsbCA/IGDimIUke3Njb3JlfWAgOiBudWxsLFxuICAgICAgICAgICAgICBtZXNoUm93ICYmIG1pc2JlaGF2aW9yICE9IG51bGwgJiYgbWlzYmVoYXZpb3IgPiAwID8gYHdhcm4gJHttaXNiZWhhdmlvcn1gIDogbnVsbFxuICAgICAgICAgICAgXS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpO1xuICAgICAgICAgICAgY29uc3Qgc2VlblNob3J0ID0gbGFzdFNlZW5cbiAgICAgICAgICAgICAgPyBuZXcgRGF0ZShsYXN0U2VlbikudG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KVxuICAgICAgICAgICAgICA6ICfigJQnO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPFRhYmxlLlJvd1xuICAgICAgICAgICAgICAgIGtleT17cm93S2V5fVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19XG4gICAgICAgICAgICAgICAgdGl0bGU9e3RhZ1N1bW1hcnkgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlKGAvcGVlcnMvJHtlbmNvZGVVUklDb21wb25lbnQocm91dGVUYXJnZXQpfWApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgc3R5bGU9e3sgdmVydGljYWxBbGlnbjogJ21pZGRsZScsIG92ZXJmbG93OiAnaGlkZGVuJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnbW9ub3NwYWNlJyxcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzAuODhyZW0nLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDYwMCxcbiAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgICAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtoZWFkbGluZUlkfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7aGVhZGxpbmVJZH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAge25pY2tuYW1lID8gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMC43OHJlbScsIGNvbG9yOiAnIzc2NzY3NicsIG92ZXJmbG93OiAnaGlkZGVuJywgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLCB3aGl0ZVNwYWNlOiAnbm93cmFwJyB9fSB0aXRsZT17bmlja25hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgIHtuaWNrbmFtZX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgc3R5bGU9e3sgdmVydGljYWxBbGlnbjogJ21pZGRsZScsIG92ZXJmbG93OiAnaGlkZGVuJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxjb2RlXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcwLjc4cmVtJyxcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCdcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e2Nvbm5lY3Rpb25TdHJ9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtjb25uZWN0aW9uU3RyfVxuICAgICAgICAgICAgICAgICAgPC9jb2RlPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCB0ZXh0QWxpZ249XCJjZW50ZXJcIiBzdHlsZT17eyB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdub3dyYXAnLCBmb250U2l6ZTogJzAuODVyZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICB7bWVzaFJvdyA/IDxJY29uIG5hbWU9XCJleGNoYW5nZVwiIGNvbG9yPVwidGVhbFwiIHRpdGxlPVwiV2ViUlRDIG1lc2hcIiAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIHtpc1ByaW1hcnlSb3cgPyA8SWNvbiBuYW1lPVwic3RhclwiIGNvbG9yPVwieWVsbG93XCIgdGl0bGU9XCJQcmltYXJ5IHBlZXJcIiAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIHtwMnBDb25maXJtZWQgPyA8SWNvbiBuYW1lPVwic2hpZWxkXCIgY29sb3I9XCJibHVlXCIgdGl0bGU9XCJQMlAgaWRlbnRpdHkgY29uZmlybWVkXCIgLz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICB7aW52TiAhPSBudWxsICYmIGludk4gPiAwID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJib29rXCIgY29sb3I9XCJ2aW9sZXRcIiB0aXRsZT17YCR7aW52Tn0gaW52ZW50b3J5IGRvY3NgfSAvPlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPEljb25cbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPXtpc0Nvbm5lY3RlZCA/ICdjaGVjayBjaXJjbGUnIDogJ21pbnVzIGNpcmNsZSd9XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2lzQ29ubmVjdGVkID8gJ2dyZWVuJyA6ICdncmV5J31cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17c3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4yNWVtJywgY29sb3I6IGlzQ29ubmVjdGVkID8gJyMyMWJhNDUnIDogJyM3Njc2NzYnIH19PlxuICAgICAgICAgICAgICAgICAgICAgIHtpc0Nvbm5lY3RlZCA/ICdPbicgOiAobWVzaFJvdyA/IChzdGF0dXMgPT09ICdzaWduYWxpbmcnID8gJ1NpZycgOiAnT2ZmJykgOiAnT2ZmJyl9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgc3R5bGU9e3sgdmVydGljYWxBbGlnbjogJ21pZGRsZScsIGZvbnRTaXplOiAnMC44cmVtJywgY29sb3I6ICcjNjY2Jywgd2hpdGVTcGFjZTogJ25vd3JhcCcgfX0gdGl0bGU9e2xhc3RTZWVuID8gbmV3IERhdGUobGFzdFNlZW4pLnRvTG9jYWxlU3RyaW5nKCkgOiAnJ30+XG4gICAgICAgICAgICAgICAgICB7c2VlblNob3J0fVxuICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBjb2xsYXBzaW5nIHRleHRBbGlnbj1cInJpZ2h0XCIgc3R5bGU9e3sgdmVydGljYWxBbGlnbjogJ21pZGRsZScsIHdoaXRlU3BhY2U6ICdub3dyYXAnIH19PlxuICAgICAgICAgICAgICAgICAge21lc2hSb3cgJiYgdHlwZW9mIG9uRGlzY29ubmVjdFdlYlJUQ1BlZXIgPT09ICdmdW5jdGlvbicgJiYgKGlzQ29ubmVjdGVkIHx8IHN0YXR1cyA9PT0gJ2Nvbm5lY3RpbmcnKSA/IChcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJEcm9wIG1lc2ggcGVlclwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRpc2Nvbm5lY3RXZWJSVENQZWVyKG1lc2hEaXNjb25uZWN0SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInVubGlua1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICB7IW1lc2hSb3cgJiYgaXNDb25uZWN0ZWQgJiYgdHlwZW9mIG9uRmFicmljUGVlclJlc3luYyA9PT0gJ2Z1bmN0aW9uJyAmJiB0Y3BGb3JSZXN5bmMgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJGYWJyaWMgcmVzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmFicmljUGVlclJlc3luYyh0Y3BGb3JSZXN5bmMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInN5bmNcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pfVxuICAgICAgICA8L1RhYmxlLkJvZHk+XG4gICAgICA8L1RhYmxlPlxuICAgICAge3RvdGFsID4gMCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgICAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgICAgIGdhcDogJzAuNWVtJyxcbiAgICAgICAgICAgIG1hcmdpblRvcDogJzAuNzVlbSdcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjg4ZW0nIH19PlxuICAgICAgICAgICAgU2hvd2luZyB7cmFuZ2VGcm9tfeKAk3tyYW5nZVRvfSBvZiB7dG90YWx9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxIdWJQYWdpbmF0aW9uXG4gICAgICAgICAgICBhY3RpdmVQYWdlPXtwYWdlfVxuICAgICAgICAgICAgdG90YWxQYWdlcz17dG90YWxQYWdlc31cbiAgICAgICAgICAgIG9uUGFnZUNoYW5nZT17KGUsIGQpID0+IHNldFBhZ2UoZC5hY3RpdmVQYWdlKX1cbiAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpblRvcDogMCwgZmxleDogJzEgMSBhdXRvJywgbWluV2lkdGg6IDAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIHNvcnRGYWJyaWNQZWVyc0ZvckF1dGhvcml0eSAocGVlcnMsIHByaW1hcnlOb3JtKSB7XG4gIGNvbnN0IGFyciA9IFsuLi4ocGVlcnMgfHwgW10pXTtcbiAgY29uc3QgcG4gPSBTdHJpbmcocHJpbWFyeU5vcm0gfHwgJycpLnRyaW0oKTtcbiAgYXJyLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBhYSA9IG5vcm1hbGl6ZUZhYnJpY1BlZXJBZGRyZXNzKGEgJiYgYS5hZGRyZXNzKTtcbiAgICBjb25zdCBiYSA9IG5vcm1hbGl6ZUZhYnJpY1BlZXJBZGRyZXNzKGIgJiYgYi5hZGRyZXNzKTtcbiAgICBjb25zdCBhcCA9IHBuICYmIChhYSA9PT0gcG4gfHwgU3RyaW5nKGEgJiYgYS5hZGRyZXNzKSA9PT0gcG4pO1xuICAgIGNvbnN0IGJwID0gcG4gJiYgKGJhID09PSBwbiB8fCBTdHJpbmcoYiAmJiBiLmFkZHJlc3MpID09PSBwbik7XG4gICAgaWYgKGFwICE9PSBicCkgcmV0dXJuIGFwID8gLTEgOiAxO1xuICAgIGNvbnN0IHNhID0gTnVtYmVyKGEgJiYgYS5zY29yZSk7XG4gICAgY29uc3Qgc2IgPSBOdW1iZXIoYiAmJiBiLnNjb3JlKTtcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHNhKSAmJiBOdW1iZXIuaXNGaW5pdGUoc2IpICYmIHNhICE9PSBzYikgcmV0dXJuIHNiIC0gc2E7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShzYSkgJiYgIU51bWJlci5pc0Zpbml0ZShzYikpIHJldHVybiAtMTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzYSkgJiYgTnVtYmVyLmlzRmluaXRlKHNiKSkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIFN0cmluZyhhYSkubG9jYWxlQ29tcGFyZShTdHJpbmcoYmEpKTtcbiAgfSk7XG4gIHJldHVybiBhcnI7XG59XG5cbmNsYXNzIFBlZXJzUGFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWRkUGVlck1vZGFsT3BlbjogZmFsc2UsXG4gICAgICBhZGRQZWVyRHJhZnQ6ICcnLFxuICAgICAgY29ubmVjdFBlZXJNb2RhbE9wZW46IGZhbHNlLFxuICAgICAgY29ubmVjdFBlZXJJZERyYWZ0OiAnJyxcbiAgICAgIGZsdXNoQ2hhaW5TbmFwc2hvdDogJycsXG4gICAgICBmbHVzaENoYWluTmV0d29yazogJ3BsYXluZXQnLFxuICAgICAgZmx1c2hDaGFpbkxhYmVsOiAnJ1xuICAgIH07XG4gIH1cblxuICBfb3BlbkFkZFBlZXJNb2RhbCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgYWRkUGVlck1vZGFsT3BlbjogdHJ1ZSwgYWRkUGVlckRyYWZ0OiAnJyB9KTtcbiAgfTtcblxuICBfY2xvc2VBZGRQZWVyTW9kYWwgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGFkZFBlZXJNb2RhbE9wZW46IGZhbHNlLCBhZGRQZWVyRHJhZnQ6ICcnIH0pO1xuICB9O1xuXG4gIF9zdWJtaXRBZGRQZWVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgb25BZGRQZWVyIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQZWVyQWRkcmVzc0lucHV0KHRoaXMuc3RhdGUuYWRkUGVlckRyYWZ0KTtcbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICAgIHRvYXN0Lndhcm5pbmcoJ0VudGVyIGEgaG9zdCBvciBob3N0OnBvcnQgKGUuZy4gaHViLmZhYnJpYy5wdWIgb3IgMTI3LjAuMC4xOjc3NzcpLicsIHsgaGVhZGVyOiAnQWRkIHBlZXInIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9uQWRkUGVlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb25BZGRQZWVyKHsgYWRkcmVzczogbm9ybWFsaXplZCB9KTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGFkZFBlZXJNb2RhbE9wZW46IGZhbHNlLCBhZGRQZWVyRHJhZnQ6ICcnIH0pO1xuICB9O1xuXG4gIF9vcGVuQ29ubmVjdFBlZXJNb2RhbCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgY29ubmVjdFBlZXJNb2RhbE9wZW46IHRydWUsIGNvbm5lY3RQZWVySWREcmFmdDogJycgfSk7XG4gIH07XG5cbiAgX2Nsb3NlQ29ubmVjdFBlZXJNb2RhbCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgY29ubmVjdFBlZXJNb2RhbE9wZW46IGZhbHNlLCBjb25uZWN0UGVlcklkRHJhZnQ6ICcnIH0pO1xuICB9O1xuXG4gIF9zdWJtaXRDb25uZWN0UGVlck1vZGFsID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgb25Db25uZWN0V2ViUlRDUGVlciB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB2YWx1ZSA9IFN0cmluZyh0aGlzLnN0YXRlLmNvbm5lY3RQZWVySWREcmFmdCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIG9uQ29ubmVjdFdlYlJUQ1BlZXIgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICBvbkNvbm5lY3RXZWJSVENQZWVyKHZhbHVlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgY29ubmVjdFBlZXJNb2RhbE9wZW46IGZhbHNlLCBjb25uZWN0UGVlcklkRHJhZnQ6ICcnIH0pO1xuICB9O1xuXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25SZWZyZXNoUGVlcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMucHJvcHMub25SZWZyZXNoUGVlcnMoKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIHBlZXIgc3RhdHVzIGZyZXNoIHdoaWxlIHRoZSBwYWdlIGlzIG9wZW4gc28gdGhlIGxpc3QgZG9lcyBub3RcbiAgICAvLyBvc2NpbGxhdGUgYmV0d2VlbiBzdGFsZS9lbXB0eSBzbmFwc2hvdHMuXG4gICAgdGhpcy5fcmVmcmVzaFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uUmVmcmVzaFBlZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25SZWZyZXNoUGVlcnMoKTtcbiAgICAgIH1cbiAgICB9LCA0MDAwKTtcblxuICAgIHRoaXMuX29uUGVlclRvcG9sb2d5R29zc2lwID0gKGV2KSA9PiB7XG4gICAgICBjb25zdCBwYXRoID0gZXYgJiYgZXYuZGV0YWlsICYmIGV2LmRldGFpbC5vcGVyYXRpb24gJiYgZXYuZGV0YWlsLm9wZXJhdGlvbi5wYXRoO1xuICAgICAgaWYgKHBhdGggPT09ICcvcGVlclRvcG9sb2d5R29zc2lwJykgdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2dsb2JhbFN0YXRlVXBkYXRlJywgdGhpcy5fb25QZWVyVG9wb2xvZ3lHb3NzaXApO1xuXG4gICAgdGhpcy5fb25OZXR3b3JrU3RhdHVzID0gKCkgPT4gdGhpcy5mb3JjZVVwZGF0ZSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCduZXR3b3JrU3RhdHVzVXBkYXRlJywgdGhpcy5fb25OZXR3b3JrU3RhdHVzKTtcbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICBpZiAodGhpcy5fcmVmcmVzaFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX3JlZnJlc2hUaW1lcik7XG4gICAgICB0aGlzLl9yZWZyZXNoVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5fb25QZWVyVG9wb2xvZ3lHb3NzaXApIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdnbG9iYWxTdGF0ZVVwZGF0ZScsIHRoaXMuX29uUGVlclRvcG9sb2d5R29zc2lwKTtcbiAgICAgIHRoaXMuX29uUGVlclRvcG9sb2d5R29zc2lwID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX29uTmV0d29ya1N0YXR1cykge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ25ldHdvcmtTdGF0dXNVcGRhdGUnLCB0aGlzLl9vbk5ldHdvcmtTdGF0dXMpO1xuICAgICAgdGhpcy5fb25OZXR3b3JrU3RhdHVzID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGF1dGgsXG4gICAgICBicmlkZ2UsXG4gICAgICBicmlkZ2VSZWYsXG4gICAgICBvbkFkZFBlZXIsXG4gICAgICBvblJlZnJlc2hQZWVycyxcbiAgICAgIG9uRGlzY29ubmVjdFBlZXIsXG4gICAgICBvblNlbmRQZWVyTWVzc2FnZSxcbiAgICAgIG9uU2V0UGVlck5pY2tuYW1lLFxuICAgICAgb25EaXNjb3ZlcldlYlJUQ1BlZXJzLFxuICAgICAgb25SZXB1Ymxpc2hXZWJSVENPZmZlcixcbiAgICAgIG9uQ29ubmVjdFdlYlJUQ1BlZXIsXG4gICAgICBvbkRpc2Nvbm5lY3RXZWJSVENQZWVyLFxuICAgICAgb25EaXNjb25uZWN0QWxsV2ViUlRDUGVlcnMsXG4gICAgICBvblNlbmRXZWJSVENUZXN0UGluZyxcbiAgICAgIG9uRmFicmljUGVlclJlc3luYyxcbiAgICAgIGFkbWluUGVlclRvb2xzVG9rZW4sXG4gICAgICBvblNlbmRGbHVzaENoYWluVG9UcnVzdGVkUGVlcnNcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB1ZiA9IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuICAgIGNvbnN0IGlzTG9nZ2VkSW4gPSAhIShhdXRoICYmIGF1dGguaWQgJiYgYXV0aC54cHViKTtcbiAgICBjb25zdCBhY3RpdmVCcmlkZ2VSZWYgPSBicmlkZ2VSZWYgfHwgYnJpZGdlO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhY3RpdmVCcmlkZ2VSZWYgJiYgYWN0aXZlQnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gY3VycmVudCAmJiBjdXJyZW50Lm5ldHdvcmtTdGF0dXM7XG4gICAgY29uc3QgZmFsbGJhY2sgPSBjdXJyZW50ICYmIGN1cnJlbnQubGFzdE5ldHdvcmtTdGF0dXM7XG4gICAgY29uc3QgbmV0d29ya1N0YXR1cyA9IGlzSHViTmV0d29ya1N0YXR1c1NoYXBlKGNhbmRpZGF0ZSlcbiAgICAgID8gY2FuZGlkYXRlXG4gICAgICA6IChpc0h1Yk5ldHdvcmtTdGF0dXNTaGFwZShmYWxsYmFjaykgPyBmYWxsYmFjayA6IG51bGwpO1xuICAgIGNvbnN0IG5ldHdvcmsgPSBuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMubmV0d29yaztcbiAgICBjb25zdCBwZWVycyA9IEFycmF5LmlzQXJyYXkobmV0d29ya1N0YXR1cyAmJiBuZXR3b3JrU3RhdHVzLnBlZXJzKSA/IG5ldHdvcmtTdGF0dXMucGVlcnMgOiBbXTtcbiAgICBjb25zdCBzdGF0ZSA9IG5ldHdvcmtTdGF0dXMgJiYgbmV0d29ya1N0YXR1cy5zdGF0ZTtcbiAgICBjb25zdCBzdGF0ZVN0YXR1c1VwcGVyID0gKHN0YXRlICYmIHN0YXRlLnN0YXR1cyAhPSBudWxsKVxuICAgICAgPyBTdHJpbmcoc3RhdGUuc3RhdHVzKS50cmltKCkudG9VcHBlckNhc2UoKVxuICAgICAgOiAnJztcbiAgICBjb25zdCBicmlkZ2VGYWJyaWNQYXVzZWQgPSBzdGF0ZVN0YXR1c1VwcGVyID09PSAnUEFVU0VEJztcbiAgICBjb25zdCBpc09ubGluZSA9ICEhbmV0d29ya1N0YXR1cztcbiAgICBjb25zdCBmYWJyaWNQZWVySWQgPSBuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMuZmFicmljUGVlcklkXG4gICAgICA/IFN0cmluZyhuZXR3b3JrU3RhdHVzLmZhYnJpY1BlZXJJZClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBsZWdhY3lVbnN0YWJsZUlkID0gIWZhYnJpY1BlZXJJZCAmJiBuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMuY29udHJhY3QgIT0gbnVsbFxuICAgICAgPyBTdHJpbmcobmV0d29ya1N0YXR1cy5jb250cmFjdClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBzaGFyZU5vZGVJZCA9IGZhYnJpY1BlZXJJZCB8fCBsZWdhY3lVbnN0YWJsZUlkO1xuICAgIGNvbnN0IGhvc3RQb3J0ID0gbmV0d29yayAmJiBuZXR3b3JrLmFkZHJlc3MgPyBTdHJpbmcobmV0d29yay5hZGRyZXNzKSA6IG51bGw7XG4gICAgLy8gU2luZ2xlIGRpYWwgcGluIGZvciBvcGVyYXRvcnMgLyBwZWVyczogcHVia2V5QGhvc3Q6cG9ydCAobWF0Y2hlcyBQZWVyI19jb25uZWN0KS5cbiAgICBjb25zdCBzaGFyZWFibGVTdHJpbmcgPSAoc2hhcmVOb2RlSWQgJiYgaG9zdFBvcnQpXG4gICAgICA/IGAke3NoYXJlTm9kZUlkfUAke2hvc3RQb3J0fWBcbiAgICAgIDogKHNoYXJlTm9kZUlkIHx8IGhvc3RQb3J0IHx8ICcnKTtcblxuICAgIC8vIFdlYlJUQyBwZWVycyBjdXJyZW50bHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBodWIgc2lnbmFsaW5nIFJQQ1xuICAgIGNvbnN0IHdlYnJ0Y1BlZXJzID0gQXJyYXkuaXNBcnJheShuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMud2VicnRjUGVlcnMpID8gbmV0d29ya1N0YXR1cy53ZWJydGNQZWVycyA6IFtdO1xuXG4gICAgLy8gRGVmZW5zaXZlIHNlcGFyYXRpb246IGtlZXAgRmFicmljIG5ldHdvcmsgcGVlcnMgaW4gdGhlIHN0YW5kYXJkIGxpc3QgZXZlblxuICAgIC8vIGlmIHNpZ25hbGluZyBwZWVycyBhY2NpZGVudGFsbHkgYXBwZWFyIGluIGBuZXR3b3JrU3RhdHVzLnBlZXJzYC5cbiAgICBjb25zdCBmYWJyaWNQZWVycyA9IHBlZXJzLmZpbHRlcigocGVlcikgPT4ge1xuICAgICAgaWYgKCFwZWVyIHx8IHR5cGVvZiBwZWVyICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHBlZXIubWV0YWRhdGEgJiYgcGVlci5tZXRhZGF0YS50cmFuc3BvcnQgPT09ICd3ZWJydGMnKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHBlZXIuaWQgfHwgJycpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IFN0cmluZyhwZWVyLmFkZHJlc3MgfHwgJycpO1xuICAgICAgY29uc3QgaGFzV2ViUlRDTWV0YWRhdGEgPSAhIShwZWVyLm1ldGFkYXRhICYmIEFycmF5LmlzQXJyYXkocGVlci5tZXRhZGF0YS5jYXBhYmlsaXRpZXMpKTtcbiAgICAgIGlmIChpZC5zdGFydHNXaXRoKCdmYWJyaWMtYnJpZGdlLScpIHx8IGFkZHJlc3Muc3RhcnRzV2l0aCgnZmFicmljLWJyaWRnZS0nKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGhhc1dlYlJUQ01ldGFkYXRhICYmIHBlZXIuc3RhdHVzID09PSAncmVnaXN0ZXJlZCcpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcHJpbWFyeVBlZXJOb3JtID0gbm9ybWFsaXplRmFicmljUGVlckFkZHJlc3MocmVhZFByaW1hcnlQZWVyQWRkcmVzcygpKTtcbiAgICBjb25zdCBmYWJyaWNQZWVyc1NvcnRlZCA9IHNvcnRGYWJyaWNQZWVyc0ZvckF1dGhvcml0eShkZWR1cGVGYWJyaWNQZWVycyhmYWJyaWNQZWVycyksIHByaW1hcnlQZWVyTm9ybSk7XG5cbiAgICBjb25zdCBsb2NhbFdlYnJ0Y1BlZXJzID0gKGN1cnJlbnQgJiYgdHlwZW9mIGN1cnJlbnQubG9jYWxXZWJydGNQZWVycyAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICA/IGN1cnJlbnQubG9jYWxXZWJydGNQZWVyc1xuICAgICAgOiBbXTtcblxuICAgIGNvbnN0IG1lc2hTdGF0dXMgPSAoY3VycmVudCAmJiB0eXBlb2YgY3VycmVudC53ZWJydGNNZXNoU3RhdHVzICE9PSAndW5kZWZpbmVkJylcbiAgICAgID8gY3VycmVudC53ZWJydGNNZXNoU3RhdHVzXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCB3ZWJydGNDb21iaW5lZCA9IGJ1aWxkV2VicnRjQ29tYmluZWRSb3dzKFxuICAgICAgd2VicnRjUGVlcnMsXG4gICAgICBsb2NhbFdlYnJ0Y1BlZXJzLFxuICAgICAgbWVzaFN0YXR1cyAmJiBtZXNoU3RhdHVzLnBlZXJJZCA/IFN0cmluZyhtZXNoU3RhdHVzLnBlZXJJZCkgOiBudWxsXG4gICAgKTtcblxuICAgIGNvbnN0IHJlcExvb2t1cCA9IChwaWQpID0+IChcbiAgICAgIGN1cnJlbnQgJiYgdHlwZW9mIGN1cnJlbnQuZ2V0V2ViUlRDUGVlclJlcHV0YXRpb24gPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBjdXJyZW50LmdldFdlYlJUQ1BlZXJSZXB1dGF0aW9uKHBpZClcbiAgICAgICAgOiBudWxsXG4gICAgKTtcblxuICAgIGNvbnN0IGZhYnJpY1BlZXJzV2l0aFJlcCA9IGZhYnJpY1BlZXJzU29ydGVkLm1hcCgocCkgPT4ge1xuICAgICAgaWYgKCFwIHx8ICFwLm1ldGFkYXRhIHx8IHAubWV0YWRhdGEudHJhbnNwb3J0ICE9PSAnd2VicnRjJykgcmV0dXJuIHA7XG4gICAgICBjb25zdCBzaWQgPSBwLm1ldGFkYXRhLndlYnJ0Y1NpZ25hbGluZ0lkO1xuICAgICAgaWYgKCFzaWQpIHJldHVybiBwO1xuICAgICAgY29uc3QgciA9IHJlcExvb2t1cChzaWQpO1xuICAgICAgaWYgKCFyKSByZXR1cm4gcDtcbiAgICAgIHJldHVybiB7IC4uLnAsIHNjb3JlOiByLnNjb3JlLCBtaXNiZWhhdmlvcjogci5taXNiZWhhdmlvciB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgaWRzRnJvbVN0YXR1c1BlZXJzID0gbmV3IFNldCgpO1xuICAgIGZvciAoY29uc3QgcCBvZiBmYWJyaWNQZWVyc1dpdGhSZXApIHtcbiAgICAgIGlmIChwICYmIHAuaWQpIGlkc0Zyb21TdGF0dXNQZWVycy5hZGQoU3RyaW5nKHAuaWQpKTtcbiAgICAgIGNvbnN0IGJmID0gZmFicmljUGVlckJlY2gzMklkKHApO1xuICAgICAgaWYgKGJmKSBpZHNGcm9tU3RhdHVzUGVlcnMuYWRkKGJmKTtcbiAgICAgIGlmIChwICYmIHAubWV0YWRhdGEgJiYgcC5tZXRhZGF0YS53ZWJydGNTaWduYWxpbmdJZCkge1xuICAgICAgICBpZHNGcm9tU3RhdHVzUGVlcnMuYWRkKFN0cmluZyhwLm1ldGFkYXRhLndlYnJ0Y1NpZ25hbGluZ0lkKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBhZGRyID0gU3RyaW5nKChwICYmIHAuYWRkcmVzcykgfHwgJycpO1xuICAgICAgaWYgKGFkZHIuc3RhcnRzV2l0aCgnd2VicnRjOicpKSB7XG4gICAgICAgIGlkc0Zyb21TdGF0dXNQZWVycy5hZGQoYWRkci5zbGljZSgnd2VicnRjOicubGVuZ3RoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYWxPbmx5Rm9yTWVzaCA9IGxvY2FsV2VicnRjUGVlcnMuZmlsdGVyKChscCkgPT4ge1xuICAgICAgaWYgKCFscCB8fCAhbHAuaWQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChpZHNGcm9tU3RhdHVzUGVlcnMuaGFzKFN0cmluZyhscC5pZCkpKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBtZXRhID0gbHAubWV0YWRhdGEgJiYgdHlwZW9mIGxwLm1ldGFkYXRhID09PSAnb2JqZWN0JyA/IGxwLm1ldGFkYXRhIDoge307XG4gICAgICBjb25zdCBsRmFiID0gbWV0YS5mYWJyaWNQZWVySWQgIT0gbnVsbCA/IFN0cmluZyhtZXRhLmZhYnJpY1BlZXJJZCkudHJpbSgpIDogJyc7XG4gICAgICBpZiAobEZhYiAmJiBpZHNGcm9tU3RhdHVzUGVlcnMuaGFzKGxGYWIpKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCB3ZWJydGNFeHRyYVJvd3MgPSB3ZWJydGNDb21iaW5lZFRvRmFicmljUGVlclJvd3MoXG4gICAgICBsb2NhbE9ubHlGb3JNZXNoLm1hcCgobHApID0+ICh7IGlkOiBscC5pZCwgc2lnbmFsaW5nOiBudWxsLCBsb2NhbDogbHAgfSkpLFxuICAgICAgcmVwTG9va3VwXG4gICAgKTtcblxuICAgIGNvbnN0IHVuaWZpZWRQZWVycyA9IGNvbnNvbGlkYXRlVW5pZmllZFBlZXJzQnlGYWJyaWNJZChcbiAgICAgIG1lcmdlVGNwQW5kV2VicnRjUGVlclJvd3MoZmFicmljUGVlcnNXaXRoUmVwLCB3ZWJydGNFeHRyYVJvd3MsIHByaW1hcnlQZWVyTm9ybSlcbiAgICApO1xuXG4gICAgY29uc3Qgc2lnbmFsaW5nSG9zdFBvcnQgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5sb2NhdGlvbi5ob3N0IDogJyc7XG4gICAgY29uc3QgZ2xvYmFsUGVlcnMgPSBjdXJyZW50ICYmIHR5cGVvZiBjdXJyZW50LmdldEdsb2JhbFN0YXRlID09PSAnZnVuY3Rpb24nXG4gICAgICA/IChjdXJyZW50LmdldEdsb2JhbFN0YXRlKCkucGVlcnMgfHwgbnVsbClcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IGJpdGNvaW4gPSBuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMuYml0Y29pbiAmJiB0eXBlb2YgbmV0d29ya1N0YXR1cy5iaXRjb2luID09PSAnb2JqZWN0J1xuICAgICAgPyBuZXR3b3JrU3RhdHVzLmJpdGNvaW5cbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBjaGFpbkhlaWdodCA9IGJpdGNvaW4gJiYgdHlwZW9mIGJpdGNvaW4uaGVpZ2h0ID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUoYml0Y29pbi5oZWlnaHQpXG4gICAgICA/IGJpdGNvaW4uaGVpZ2h0XG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgdGlwRnVsbCA9IGJpdGNvaW4gJiYgdHlwZW9mIGJpdGNvaW4uYmVzdEJsb2NrSGFzaCA9PT0gJ3N0cmluZycgJiYgL15bMC05YS1mQS1GXXs2NH0kLy50ZXN0KGJpdGNvaW4uYmVzdEJsb2NrSGFzaClcbiAgICAgID8gYml0Y29pbi5iZXN0QmxvY2tIYXNoXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgdGlwU2hvcnQgPSB0aXBGdWxsID8gYCR7dGlwRnVsbC5zbGljZSgwLCAxMCl94oCmJHt0aXBGdWxsLnNsaWNlKC02KX1gIDogbnVsbDtcbiAgICBjb25zdCBidGNOZXR3b3JrID0gYml0Y29pbiAmJiBiaXRjb2luLm5ldHdvcmsgIT0gbnVsbCA/IFN0cmluZyhiaXRjb2luLm5ldHdvcmspIDogbnVsbDtcbiAgICBjb25zdCBtZW1wb29sTiA9IGJpdGNvaW4gJiYgYml0Y29pbi5tZW1wb29sVHhDb3VudCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIoYml0Y29pbi5tZW1wb29sVHhDb3VudCkpXG4gICAgICA/IE51bWJlcihiaXRjb2luLm1lbXBvb2xUeENvdW50KVxuICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgZ3NUb3BvID0gYWN0aXZlQnJpZGdlUmVmICYmIGFjdGl2ZUJyaWRnZVJlZi5jdXJyZW50ICYmIHR5cGVvZiBhY3RpdmVCcmlkZ2VSZWYuY3VycmVudC5nZXRHbG9iYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBhY3RpdmVCcmlkZ2VSZWYuY3VycmVudC5nZXRHbG9iYWxTdGF0ZSgpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgdG9wb2xvZ3lHb3NzaXAgPSBnc1RvcG8gJiYgZ3NUb3BvLnBlZXJUb3BvbG9neUdvc3NpcDtcbiAgICBjb25zdCB0b3BvbG9neURvdCA9IG5ldHdvcmtTdGF0dXNcbiAgICAgID8gcGVlclRvcG9sb2d5VG9Eb3Qoe1xuICAgICAgICBzZWxmSWQ6IGZhYnJpY1BlZXJJZCxcbiAgICAgICAgc2VsZkxhYmVsOiAnVGhpcyBGYWJyaWMgbm9kZScsXG4gICAgICAgIGRpcmVjdFBlZXJzOiBmYWJyaWNQZWVyc1NvcnRlZCxcbiAgICAgICAgZ29zc2lwOiB0b3BvbG9neUdvc3NpcFxuICAgICAgfSlcbiAgICAgIDogbnVsbDtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZmFicmljLWh1Yi1wZWVycyBjbGFzcz0nZmFkZS1pbicgZGF0YS10ZXN0aWQ9XCJodWItcGVlcnMtcGFnZVwiPlxuICAgICAgICA8U2VnbWVudCBzdHlsZT17eyBjbGVhcjogJ2JvdGgnLCBib3JkZXJSYWRpdXM6IDQsIGJveFNoYWRvdzogJzAgMXB4IDZweCByZ2JhKDAsMCwwLDAuMDYpJyB9fT5cbiAgICAgICAgICA8c2VjdGlvbiBhcmlhLWxhYmVsbGVkYnk9XCJwZWVycy1wYWdlLWhlYWRpbmdcIiBhcmlhLWRlc2NyaWJlZGJ5PVwicGVlcnMtcGFnZS1zdW1tYXJ5XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnLCBnYXA6ICcwLjc1ZW0nLCBmbGV4V3JhcDogJ3dyYXAnLCBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX1cbiAgICAgICAgICAgICAgcm9sZT1cImJhbm5lclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxCdXR0b24gYmFzaWMgc2l6ZT1cInNtYWxsXCIgYXM9e0xpbmt9IHRvPVwiL1wiIGFyaWEtbGFiZWw9XCJCYWNrIHRvIGhvbWVcIj5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYXJyb3cgbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgSG9tZVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmbGV4OiAnMSAxIDE0cmVtJywgbWluV2lkdGg6IDAgfX0+XG4gICAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImgyXCIgaWQ9XCJwZWVycy1wYWdlLWhlYWRpbmdcIiBzdHlsZT17eyBtYXJnaW46IDAgfX0+XG4gICAgICAgICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+UGVlcnM8L0hlYWRlci5Db250ZW50PlxuICAgICAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwIGlkPVwicGVlcnMtcGFnZS1zdW1tYXJ5XCIgc3R5bGU9e3sgbWFyZ2luOiAnMC40ZW0gMCAwJywgY29sb3I6ICcjNTU1JywgbWF4V2lkdGg6ICc1MnJlbScsIGxpbmVIZWlnaHQ6IDEuNTUgfX0+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPkZhYnJpYyBQZWVyIElEPC9zdHJvbmc+IGlzIHRoZSBjYW5vbmljYWwgaWRlbnRpdHkgZm9yIHRoaXMgbmV0d29yazogY29tcHJlc3NlZCBzZWNwMjU2azEgKG9mdGVuIHNob3duIGFzIGJlY2gzMm0gPGNvZGU+aWQx4oCmPC9jb2RlPikuIFNpZ25lZCBQMlAgPGNvZGU+TWVzc2FnZTwvY29kZT4gZnJhbWVzIGJpbmQgdG8gdGhhdCBrZXkgc28gcmVjaXBpZW50cyBjYW4gdmVyaWZ5IGF1dGhlbnRpY2l0eTsgVENQIHNlc3Npb25zIGFuZCBpbnZlbnRvcnkgcmVsYXkgbGluZSB1cCB3aXRoIHRoZSBzYW1lIGlkIG9uY2UgPHN0cm9uZz5QMlAgaWQ8L3N0cm9uZz4gaXMgY29uZmlybWVkLiBNZXNoIHJvd3Mgc2hvdyB0aGUgaHViIHNpZ25hbGluZyBpZCB1bnRpbCB0aGUgcGVlciBpcyBwcm92ZW4gb24gdGhlIEZhYnJpYyB3aXJlICg8c3Ryb25nPlNpZ25hbGVkPC9zdHJvbmc+KS4gQ29ubmVjdGlvbiBjZWxscyB1c2UgPGNvZGU+aWRlbnRpdHlAaG9zdDpwb3J0PC9jb2RlPiAoVENQIGxpc3RlbiBvciBXZWJSVEMgc2lnbmFsaW5nIHJlYWNoYWJpbGl0eSkuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIHshbmV0d29ya1N0YXR1cyA/IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgcm9sZT1cInN0YXR1c1wiXG4gICAgICAgICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGdhcDogJzAuNzVlbScsXG4gICAgICAgICAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMXJlbSAwIDAuMjVyZW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnIzU1NSdcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExvYWRlciBhY3RpdmUgaW5saW5lIHNpemU9XCJzbWFsbFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkNvbm5lY3RpbmcgdG8gaHViIGFuZCBsb2FkaW5nIEZhYnJpYyBuZXR3b3JrIHN0YXR1cyAoRmFicmljIFBlZXIgSUQsIEJpdGNvaW4gaGVpZ2h0KeKApjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8RGl2aWRlciBzZWN0aW9uIC8+XG4gICAgICAgICAgICAgIDxHcmlkIHN0YWNrYWJsZT5cbiAgICAgICAgICAgICAgICA8R3JpZC5Sb3cgdmVydGljYWxBbGlnbj1cIm1pZGRsZVwiPlxuICAgICAgICAgICAgICAgICAgPEdyaWQuQ29sdW1uIGNvbXB1dGVyPXsxMH0gdGFibGV0PXsxNn0+XG4gICAgICAgICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpblRvcDogMCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGh1YlxuICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScsIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXticmlkZ2VGYWJyaWNQYXVzZWQgPyAneWVsbG93JyA6IChpc09ubGluZSA/ICdncmVlbicgOiAnZ3JleScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7aXNPbmxpbmUgPyAoYnJpZGdlRmFicmljUGF1c2VkID8gJ0ZhYnJpYyBwYXVzZWQnIDogJ0ZhYnJpYyBvbmxpbmUnKSA6ICdPZmZsaW5lJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9IZWFkZXIuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMjVlbSAwIDAuNWVtJywgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjkyZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RmFicmljIHN0YXRlOjwvc3Ryb25nPiB7KHN0YXRlICYmIHN0YXRlLnN0YXR1cykgfHwgJ3Vua25vd24nfVxuICAgICAgICAgICAgICAgICAgICAgIHticmlkZ2VGYWJyaWNQYXVzZWQgPyAnIOKAlCBodWIgcmVhY2hhYmxlOyBGYWJyaWMgUDJQIGlkbGUgdW50aWwgc3RhcnRlZC4nIDogJyd9XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgeyhzaGFyZU5vZGVJZCB8fCBob3N0UG9ydCkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPExpc3QgcmVsYXhlZCBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7c2hhcmVOb2RlSWQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpc3QuSGVhZGVyPntmYWJyaWNQZWVySWQgPyAnRmFicmljIFBlZXIgSUQnIDogJ05vZGUgSUQgKGxlZ2FjeSknfTwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuODhlbScsIGRpc3BsYXk6ICdibG9jaycsIG1hcmdpblRvcDogJzAuMjVlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e2ZhYnJpY1BlZXJJZCA/ICdDYW5vbmljYWwgc2VjcDI1NmsxIGlkZW50aXR5IGZvciBzaWduZWQgUDJQIG1lc3NhZ2VzIGFuZCBwZWVyIHJvd3MuJyA6ICdVbnN0YWJsZSDigJQgdXBncmFkZSBodWIgZm9yIGZhYnJpY1BlZXJJZC4nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPntzaGFyZU5vZGVJZH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bGVnYWN5VW5zdGFibGVJZCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6ICcwLjgyZW0nLCBjb2xvcjogJyM4ODYnLCBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Ub3A6ICcwLjM1ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZlciA8Y29kZT5mYWJyaWNQZWVySWQ8L2NvZGU+IGZyb20gdGhlIGh1YiBmb3Igc2hhcmluZzsgbGVnYWN5IGlkcyBjYW4gY2hhbmdlIHdpdGggY29udHJhY3Qgc3RhdGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtob3N0UG9ydCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+VENQIGxpc3RlbjwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuODhlbScgfX0+e2hvc3RQb3J0fTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9MaXN0PlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAge3NoYXJlYWJsZVN0cmluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoc2hhcmVhYmxlU3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGEudmFsdWUgPSBzaGFyZWFibGVTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zdHlsZS5vcGFjaXR5ID0gJzAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJDb3B5IHB1YmtleUBob3N0OnBvcnQgcGVlcmluZyBzdHJpbmcgZm9yIG5hdGl2ZSBGYWJyaWMgZGlhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ29weSBwZWVyaW5nIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIDwvR3JpZC5Db2x1bW4+XG4gICAgICAgICAgICAgICAgICA8R3JpZC5Db2x1bW4gY29tcHV0ZXI9ezZ9IHRhYmxldD17MTZ9PlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+Q2hhaW4gJmFtcDsgbWVtcG9vbDwvSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICA8U3RhdGlzdGljLkdyb3VwIHNpemU9XCJtaW5pXCIgd2lkdGhzPXsyfT5cbiAgICAgICAgICAgICAgICAgICAgICA8U3RhdGlzdGljPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXRpc3RpYy5WYWx1ZT57Y2hhaW5IZWlnaHQgIT0gbnVsbCA/IGNoYWluSGVpZ2h0IDogJ+KAlCd9PC9TdGF0aXN0aWMuVmFsdWU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhdGlzdGljLkxhYmVsPkhlaWdodDwvU3RhdGlzdGljLkxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU3RhdGlzdGljPlxuICAgICAgICAgICAgICAgICAgICAgIDxTdGF0aXN0aWM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhdGlzdGljLlZhbHVlIHRleHQgc3R5bGU9e3sgZm9udFNpemU6ICcwLjk1cmVtJywgZm9udEZhbWlseTogJ21vbm9zcGFjZScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt0aXBGdWxsID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVmLmJpdGNvaW5FeHBsb3JlciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vYmxvY2tzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRpcEZ1bGwpfWB9IHRpdGxlPXt0aXBGdWxsfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RpcFNob3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT17YCR7dGlwRnVsbH0g4oCUIGVuYWJsZSBCaXRjb2luIGV4cGxvcmVyIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5YH0+e3RpcFNob3J0fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ+KAlCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhdGlzdGljLlZhbHVlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YXRpc3RpYy5MYWJlbD5UaXA8L1N0YXRpc3RpYy5MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1N0YXRpc3RpYz5cbiAgICAgICAgICAgICAgICAgICAgPC9TdGF0aXN0aWMuR3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBmb250U2l6ZTogJzAuODhlbScsIGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5OZXR3b3JrOjwvc3Ryb25nPiB7YnRjTmV0d29yayB8fCAn4oCUJ31cbiAgICAgICAgICAgICAgICAgICAgICB7bWVtcG9vbE4gIT0gbnVsbCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPk1lbXBvb2w6PC9zdHJvbmc+IHttZW1wb29sTn0gdHhcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+UGVlcnMgaW4gdmlldzo8L3N0cm9uZz4ge3VuaWZpZWRQZWVycy5sZW5ndGh9IChUQ1AgKyBtZXNoKVxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIHtiaXRjb2luICYmIGJpdGNvaW4uYXZhaWxhYmxlID09PSBmYWxzZSAmJiBiaXRjb2luLm1lc3NhZ2UgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjY1ZW0nIH19IGNvbnRlbnQ9e2JpdGNvaW4ubWVzc2FnZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC42NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46IDAsIGZvbnRXZWlnaHQ6IDYwMCwgY29sb3I6ICcjMzMzJyB9fT5CbG9jayByZWxheTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgZm9udFNpemU6ICcwLjkyZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgT24gbmV3IHRpcCAoWk1RIDxjb2RlPmhhc2hibG9jazwvY29kZT4pLCB0aGlzIGh1YiBzaWducyA8Y29kZT5CaXRjb2luQmxvY2s8L2NvZGU+IFAyUCBtZXNzYWdlczsgcGVlcnMgcmVsYXkgdGhlIHNhbWUgd2lyZSBieXRlcyAoZHVwbGljYXRlcyBkcm9wcGVkKS4gQ29tcGFyZSBoZWlnaHQgYW5kIHRpcCB3aXRoIHBlZXJzIGFmdGVyIDxjb2RlPmFkZG5vZGU8L2NvZGU+IG9yIGxvbmcgcmVndGVzdCBjaGFpbnMuXG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICAgIHshKGFkbWluUGVlclRvb2xzVG9rZW4gJiYgU3RyaW5nKGFkbWluUGVlclRvb2xzVG9rZW4pLnRyaW0oKSkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC42NWVtIDAgMCcsIGZvbnRTaXplOiAnMC44MmVtJywgY29sb3I6ICcjNzc3JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+T3BlcmF0b3IgdG9vbHM6PC9zdHJvbmc+IHNpZ24gaW4gdW5kZXIgU2V0dGluZ3Mg4oaSIEFkbWluIChodWIgYWRtaW4gdG9rZW4pIHRvIHNlbmQgPGNvZGU+UDJQX0ZMVVNIX0NIQUlOPC9jb2RlPiB0byBoaWdobHkgdHJ1c3RlZCBwZWVycyBmcm9tIHRoaXMgcGFnZS5cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC9HcmlkLkNvbHVtbj5cbiAgICAgICAgICAgICAgICA8L0dyaWQuUm93PlxuXG4gICAgICAgICAgICAgICAge2FkbWluUGVlclRvb2xzVG9rZW4gJiYgU3RyaW5nKGFkbWluUGVlclRvb2xzVG9rZW4pLnRyaW0oKSAmJiB0eXBlb2Ygb25TZW5kRmx1c2hDaGFpblRvVHJ1c3RlZFBlZXJzID09PSAnZnVuY3Rpb24nID8gKFxuICAgICAgICAgICAgICAgICAgPEdyaWQuUm93PlxuICAgICAgICAgICAgICAgICAgICA8R3JpZC5Db2x1bW4gd2lkdGg9ezE2fT5cbiAgICAgICAgICAgICAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwicmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwid2FybmluZyBzaWduXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yIOKAlCBjaGFpbiBmbHVzaCAodHJ1c3RlZCBwZWVycylcbiAgICAgICAgICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZSB3YXJuaW5nIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAwLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICBTZW5kcyBzaWduZWQgPGNvZGU+UDJQX0ZMVVNIX0NIQUlOPC9jb2RlPiB0byBldmVyeSA8c3Ryb25nPmNvbm5lY3RlZDwvc3Ryb25nPiBwZWVyIHdob3NlIHJlZ2lzdHJ5IHNjb3JlIGlzIGFib3ZlIHRoZSBodWIgdGhyZXNob2xkIChkZWZhdWx0IDgwMCkuIFBlZXJzIHRoYXQgYWNjZXB0IGl0IG1heSByZXdpbmQgdG93YXJkIDxjb2RlPnNuYXBzaG90QmxvY2tIYXNoPC9jb2RlPiB2aWEgPGNvZGU+aW52YWxpZGF0ZWJsb2NrPC9jb2RlPi4gVXNlIG9ubHkgd2l0aCBjb29yZGluYXRlZCBvcGVyYXRvcnMgb24gcmVndGVzdCAvIHBsYXluZXQgLyBzaWduZXQgLyB0ZXN0bmV0LlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaCA9IFN0cmluZyh0aGlzLnN0YXRlLmZsdXNoQ2hhaW5TbmFwc2hvdCB8fCAnJykudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIS9eWzAtOWEtZkEtRl17NjR9JC8udGVzdChoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0LmVycm9yKCdTbmFwc2hvdCBtdXN0IGJlIDY0IGhleCBjaGFyYWN0ZXJzIChrbm93bi1nb29kIHRpcCBhZnRlciByZXNldCkuJywgeyBoZWFkZXI6ICdDaGFpbiBmbHVzaCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VuZEZsdXNoQ2hhaW5Ub1RydXN0ZWRQZWVycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3RCbG9ja0hhc2g6IGgudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrOiBTdHJpbmcodGhpcy5zdGF0ZS5mbHVzaENoYWluTmV0d29yayB8fCAnJykudHJpbSgpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogU3RyaW5nKHRoaXMuc3RhdGUuZmx1c2hDaGFpbkxhYmVsIHx8ICcnKS50cmltKCkgfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdC5pbmZvKCdGbHVzaCBjaGFpbiByZXF1ZXN0IHNlbnQg4oCUIGNoZWNrIGh1YiBsb2dzIGFuZCBwZWVyIGJpdGNvaW5kcy4nLCB7IGhlYWRlcjogJ1AyUF9GTFVTSF9DSEFJTicsIGF1dG9DbG9zZTogNjAwMCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXhXaWR0aDogJzQwcmVtJywgbWFyZ2luVG9wOiAnMC41ZW0nIH19XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiZmx1c2gtY2hhaW4tc25hcHNob3RcIj5Lbm93bi1nb29kIHRpcCAoPGNvZGU+Z2V0YmVzdGJsb2NraGFzaDwvY29kZT4pPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJmbHVzaC1jaGFpbi1zbmFwc2hvdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCI2NC1jaGFyYWN0ZXIgaGV4IGJsb2NrIGhhc2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmZsdXNoQ2hhaW5TbmFwc2hvdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBmbHVzaENoYWluU25hcHNob3Q6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJmbHVzaC1jaGFpbi1uZXR3b3JrXCI+TmV0d29yazwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZmx1c2gtY2hhaW4tbmV0d29ya1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJwbGF5bmV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5mbHVzaENoYWluTmV0d29ya31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBmbHVzaENoYWluTmV0d29yazogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJmbHVzaC1jaGFpbi1sYWJlbFwiPkxhYmVsIChsb2dzKTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZmx1c2gtY2hhaW4tbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZS5nLiBmZWRlcmF0aW9uLXJvdW5kLTMtYmFzZWxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmZsdXNoQ2hhaW5MYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHRoaXMuc2V0U3RhdGUoeyBmbHVzaENoYWluTGFiZWw6IGUudGFyZ2V0LnZhbHVlIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuNWVtJywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyF0aXBGdWxsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuc2V0U3RhdGUoeyBmbHVzaENoYWluU25hcHNob3Q6IHRpcEZ1bGwgfHwgJycgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3RpcEZ1bGwgPyAnRmlsbCBmcm9tIGh1YiBCaXRjb2luIHRpcCBpbiBuZXR3b3JrIHN0YXR1cycgOiAnTm8gdGlwIGluIHN0YXR1cyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgY3VycmVudCB0aXAgZnJvbSBzdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwicmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNlbmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQgUDJQX0ZMVVNIX0NIQUlOXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgICAgICAgICAgICA8L0dyaWQuQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgPC9HcmlkLlJvdz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgICAgICAgIDxHcmlkLlJvdz5cbiAgICAgICAgICAgICAgICAgIDxHcmlkLkNvbHVtbiB3aWR0aD17MTZ9PlxuICAgICAgICAgICAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBzaXplPVwic21hbGxcIj5QcmltYXJ5IGF1dGhvcml0eSAmYW1wOyBQYXlqb2luIChCSVAgNzcpPC9IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBjb2xvcjogJyM0NDQnLCBsaW5lSGVpZ2h0OiAxLjUsIG1heFdpZHRoOiAnNTJyZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIFVzZSBhIGxvbmctbGl2ZWQgaHViIChlLmcuIDxjb2RlPmh1Yi5mYWJyaWMucHViPC9jb2RlPikgYXMgPHN0cm9uZz5wcmltYXJ5IGF1dGhvcml0eTwvc3Ryb25nPjogRmFicmljIFRDUCBjYXJyaWVzIDxjb2RlPkJpdGNvaW5CbG9jazwvY29kZT4gZ29zc2lwIGFuZCB0cnVzdCBzY29yZXMuIFBheWpvaW4gdjIgKGRpcmVjdG9yeSArIEhQS0UgKyBPSFRUUCk6eycgJ31cbiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9wYXlqb2luLm9yZy9kb2NzL2hvdy1pdC13b3Jrcy9wYXlqb2luLXYyLWJpcC03N1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vcmVmZXJyZXJcIj5wYXlqb2luLm9yZyDigJQgQklQIDc3PC9hPi5cbiAgICAgICAgICAgICAgICAgICAgICB7JyAnfVRoaXMgYnVpbGQgdXNlcyBCSVA3OCBkZXBvc2l0IHNlc3Npb25zIHdpdGggYWJzb2x1dGUgPGNvZGU+cGo9PC9jb2RlPiB3aGVyZSBlbmFibGVkOyBCSVA3NyBIdWItbG9jYWwgZXhwZXJpbWVudGFsIG1haWxib3hlcyBhcmUgYXZhaWxhYmxlIHVuZGVyIGNhcGFiaWxpdGllcyA8Y29kZT5mYWJyaWNQcm90b2NvbDwvY29kZT4uIEZ1bGwgdjIgZGlyZWN0b3J5ICsgT0hUVFAgZmxvd3MgcmVtYWluIGEgZnV0dXJlIGludGVncmF0aW9uLlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC42NWVtJywgbWF4V2lkdGg6ICc1MnJlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPlJlZ3Rlc3QgY29pbnMgZnJvbSBhbm90aGVyIGh1YjwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4zNWVtIDAgMCcsIGxpbmVIZWlnaHQ6IDEuNDUsIGZvbnRTaXplOiAnMC45NWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEZhYnJpYyBwZWVycyBkbyBub3QgbW92ZSBvbi1jaGFpbiB2YWx1ZS4gRm9yIHBsYXluZXQgTDEgd2hlbiB5b3VyIGxvY2FsIDxMaW5rIHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vZmF1Y2V0XCI+ZmF1Y2V0PC9MaW5rPiBpcyBkcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBzeW5jIEJpdGNvaW4gUDJQIChzZWUgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pblwiPkJpdGNvaW48L0xpbms+IOKGkiBOZXR3b3JrKSwgdGhlbiByZXF1ZXN0IHNhdHMgZnJvbSBhIGh1YiB0aGF0IHN0aWxsIGhhcyB3YWxsZXQgYmFsYW5jZSDigJQgZS5nLnsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9odWIuZmFicmljLnB1Yi9zZXJ2aWNlcy9iaXRjb2luL2ZhdWNldFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5odWIuZmFicmljLnB1Yi9zZXJ2aWNlcy9iaXRjb2luL2ZhdWNldDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsnICd9KHNhbWUgPGNvZGU+YmNydDHigKY8L2NvZGU+IHJlY2VpdmUgYWRkcmVzcyBhcyBvbiB5b3VyIEZhdWNldCBwYWdlKS5cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAge2lzTG9nZ2VkSW4gJiYgdHlwZW9mIG9uQWRkUGVlciA9PT0gJ2Z1bmN0aW9uJyA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNjVlbScsIGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC41ZW0nLCBhbGlnbkl0ZW1zOiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlUHJpbWFyeVBlZXJBZGRyZXNzKERFRkFVTFRfUFJJTUFSWV9GQUJSSUNfSFVCKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFkZFBlZXIoeyBhZGRyZXNzOiBERUZBVUxUX1BSSU1BUllfRkFCUklDX0hVQiB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSZW1lbWJlciBhcyBwcmltYXJ5IGFuZCBjYWxsIEFkZFBlZXIgZm9yIHRoZSBwdWJsaWMgRmFicmljIGh1YlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzdGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHByaW1hcnkgaHViICh7REVGQVVMVF9QUklNQVJZX0ZBQlJJQ19IVUJ9KVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuODhlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmVkIHByaW1hcnk6IDxjb2RlPntyZWFkUHJpbWFyeVBlZXJBZGRyZXNzKCl9PC9jb2RlPiDigJQgc29ydGVkIGZpcnN0IHdoZW4gY29ubmVjdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIDwvR3JpZC5Db2x1bW4+XG4gICAgICAgICAgICAgICAgPC9HcmlkLlJvdz5cblxuICAgICAgICAgICAgICAgIDxHcmlkLlJvdz5cbiAgICAgICAgICAgICAgICAgIDxHcmlkLkNvbHVtbiB3aWR0aD17MTZ9PlxuICAgICAgICAgICAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwidmlkZW9cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIHsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgQnJvd3NlciBtZXNoIChXZWJSVEMgc2lnbmFsaW5nKVxuICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwic21hbGxcIiBjb2xvcj17d2VicnRjQ29tYmluZWQubGVuZ3RoID4gMCA/ICdibHVlJyA6ICdncmV5J30gc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt3ZWJydGNDb21iaW5lZC5sZW5ndGh9IHJlZ2lzdGVyZWRcbiAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIHt3ZWJydGNQZWVycy5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJzbWFsbFwiIGJhc2ljIGNvbG9yPVwiYmx1ZVwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjM1ZW0nIH19IHRpdGxlPVwiSHViIHNpZ25hbGluZyByZWdpc3RyeSAobWF5IG92ZXJsYXAgbWVzaClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3dlYnJ0Y1BlZXJzLmxlbmd0aH0gc2lnbmFsaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgIHtsb2NhbFdlYnJ0Y1BlZXJzLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cInNtYWxsXCIgYmFzaWMgY29sb3I9XCJ0ZWFsXCIgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtsb2NhbFdlYnJ0Y1BlZXJzLmxlbmd0aH0gbG9jYWwgbWVzaFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIHttZXNoU3RhdHVzID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAuNjVlbScsIGNvbG9yOiAnIzU1NScsIGZvbnRTaXplOiAnMC45MmVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+WW91ciBzaWduYWxpbmcgaWQ6PC9zdHJvbmc+eycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJyB9fT57bWVzaFN0YXR1cy5wZWVySWQgfHwgJ2luaXRpYWxpemluZ+KApid9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgeycgwrcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+TWVzaDo8L3N0cm9uZz4ge21lc2hTdGF0dXMuY29ubmVjdGVkfS97bWVzaFN0YXR1cy5tYXhQZWVyc30gY29ubmVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICB7bWVzaFN0YXR1cy5jb25uZWN0aW5nID4gMCA/IGAsICR7bWVzaFN0YXR1cy5jb25uZWN0aW5nfSBjb25uZWN0aW5nYCA6ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgeycgwrcgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+UmVhZHk6PC9zdHJvbmc+IHttZXNoU3RhdHVzLnJlYWR5ID8gJ3llcycgOiAnbm8nfVxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwLjY1ZW0nLCBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOTJlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICBOYXRpdmUgV2ViUlRDIHRocm91Z2ggdGhpcyBodWI7IHJvd3MgYmVsb3cgY29ycmVsYXRlIHRvIDxzdHJvbmc+RmFicmljIFBlZXIgSUQ8L3N0cm9uZz4gd2hlbiBQMlAgaWRlbnRpdHkgaXMgY29uZmlybWVkLlxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICcwLjVlbScsIGZsZXhXcmFwOiAnd3JhcCcsIG1hcmdpbkJvdHRvbTogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICB7dHlwZW9mIG9uUmVwdWJsaXNoV2ViUlRDT2ZmZXIgPT09ICdmdW5jdGlvbicgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIGJhc2ljIG9uQ2xpY2s9e29uUmVwdWJsaXNoV2ViUlRDT2ZmZXJ9IHRpdGxlPVwiUmVwdWJsaXNoIHlvdXIgb2ZmZXIgdG8gaHViIHNpZ25hbGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicmVmcmVzaFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFJlcHVibGlzaCBvZmZlclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAge21lc2hTdGF0dXMgJiYgbWVzaFN0YXR1cy5zbG90c0F2YWlsYWJsZSA+IDAgJiYgdHlwZW9mIG9uRGlzY292ZXJXZWJSVENQZWVycyA9PT0gJ2Z1bmN0aW9uJyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkRpc2NvdmVyV2ViUlRDUGVlcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e2BEaXNjb3ZlciBwZWVycyAoJHttZXNoU3RhdHVzLnNsb3RzQXZhaWxhYmxlfSBzbG90cylgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNlYXJjaFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzY292ZXIgcGVlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC44OGVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bWVzaFN0YXR1cy5zbG90c0F2YWlsYWJsZX0gc2xvdHttZXNoU3RhdHVzLnNsb3RzQXZhaWxhYmxlICE9PSAxID8gJ3MnIDogJyd9IGZyZWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAge3R5cGVvZiBvbkNvbm5lY3RXZWJSVENQZWVyID09PSAnZnVuY3Rpb24nID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiBiYXNpYyBvbkNsaWNrPXt0aGlzLl9vcGVuQ29ubmVjdFBlZXJNb2RhbH0gdGl0bGU9XCJDb25uZWN0IGJ5IGh1YiBzaWduYWxpbmcgaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInBsdWdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBDb25uZWN0IHRvIHNpZ25hbGluZyBpZOKAplxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAge21lc2hTdGF0dXMgJiYgbWVzaFN0YXR1cy5jb25uZWN0ZWQgPiAwICYmIHR5cGVvZiBvblNlbmRXZWJSVENUZXN0UGluZyA9PT0gJ2Z1bmN0aW9uJyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbmRXZWJSVENUZXN0UGluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiVGVzdCBwaW5nIHRvIGFsbCBtZXNoIHBlZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNpZ25hbFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFBpbmcgbWVzaFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAge2xvY2FsV2VicnRjUGVlcnMubGVuZ3RoID4gMCAmJiB0eXBlb2Ygb25EaXNjb25uZWN0QWxsV2ViUlRDUGVlcnMgPT09ICdmdW5jdGlvbicgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRpc2Nvbm5lY3RBbGxXZWJSVENQZWVycygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRGlzY29ubmVjdCBhbGwgbG9jYWwgbWVzaCBsaW5rc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJ1bmxpbmtcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNjb25uZWN0IGFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U3R5bGU6ICdpdGFsaWMnLCBtYXJnaW46IDAsIGxpbmVIZWlnaHQ6IDEuNDUsIGZvbnRTaXplOiAnMC45ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIE1lc2ggcGVlcnMgYXBwZWFyIGluIDxzdHJvbmc+RmFicmljIHBlZXJzPC9zdHJvbmc+IGJlbG93IHdpdGggYSA8c3Ryb25nPk1lc2g8L3N0cm9uZz4gdGFnLCByZXB1dGF0aW9uIDxzdHJvbmc+c2NvcmU8L3N0cm9uZz4gLyA8c3Ryb25nPm1pc2JlaGF2aW9yPC9zdHJvbmc+LCBhbmQgZGV0YWlsIHJvdXRlIDxjb2RlPi9wZWVycy8mbHQ7RmFicmljIFBlZXIgSUQmZ3Q7PC9jb2RlPi4gT3ZlcnNpemVkIGZyYW1lcywgYmFkIGdvc3NpcCwgb3IgaW52YWxpZCBKU09OIGNhbiB0cmlnZ2VyIGRpc2Nvbm5lY3RzLlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICA8L0dyaWQuQ29sdW1uPlxuICAgICAgICAgICAgICAgIDwvR3JpZC5Sb3c+XG5cbiAgICAgICAgICAgICAgICB7dG9wb2xvZ3lEb3QgPyAoXG4gICAgICAgICAgICAgICAgICA8R3JpZC5Sb3c+XG4gICAgICAgICAgICAgICAgICAgIDxHcmlkLkNvbHVtbiB3aWR0aD17MTZ9PlxuICAgICAgICAgICAgICAgICAgICAgIDxEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwicGVlcnMtdG9wb2xvZ3ktaDNcIiBhcmlhLWRlc2NyaWJlZGJ5PVwicGVlcnMtdG9wb2xvZ3ktZGVzY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImgzXCIgc2l6ZT1cInNtYWxsXCIgaWQ9XCJwZWVycy10b3BvbG9neS1oM1wiPlBlZXIgdG9wb2xvZ3k8L0hlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGlkPVwicGVlcnMtdG9wb2xvZ3ktZGVzY1wiIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbkJvdHRvbTogJzAuNjVlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+U29saWQ8L3N0cm9uZz4gZWRnZXM6IFRDUCBwZWVycyBpbiB0aGlzIHNuYXBzaG90LiA8c3Ryb25nPkRvdHRlZDwvc3Ryb25nPjogaWRzIGZyb20gPGNvZGU+UDJQX1BFRVJfR09TU0lQPC9jb2RlPiAofjIwIG1pbiBjbGllbnQgY2FjaGUpLiBVc2UgcGVlciBkZXRhaWwgPHN0cm9uZz5Eb2NzPC9zdHJvbmc+IGZvciBkb2N1bWVudC1vZmZlciByZXF1ZXN0czsgYWRkIFRDUCBwZWVycyBmb3IgaWRzIHlvdSBuZWVkIGRpcmVjdGx5LlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyYXBoRG9jdW1lbnRQcmV2aWV3IGRvdFNvdXJjZT17dG9wb2xvZ3lEb3R9IHNraXBJZGVudGl0eUdhdGUgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkZXRhaWxzIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuNjVyZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3VtbWFyeSBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJywgY29sb3I6ICcjNTU1JyB9fT5ET1Qgc291cmNlPC9zdW1tYXJ5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJlIHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsIGZvbnRTaXplOiAnMC43NXJlbScsIGJhY2tncm91bmQ6ICcjZjdmN2Y3JywgcGFkZGluZzogJzAuNXJlbScsIGJvcmRlclJhZGl1czogNCB9fT57dG9wb2xvZ3lEb3R9PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2RldGFpbHM+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L0dyaWQuQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgPC9HcmlkLlJvdz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgPC9HcmlkPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TZWdtZW50PlxuXG4gICAgICAgIHtuZXR3b3JrU3RhdHVzID8gKFxuICAgICAgICAgIDxTZWdtZW50IHN0eWxlPXt7IGJvcmRlclJhZGl1czogNCwgbWFyZ2luVG9wOiAnMXJlbScsIGJveFNoYWRvdzogJzAgMXB4IDZweCByZ2JhKDAsMCwwLDAuMDYpJyB9fT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnZmxleC1zdGFydCcsIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsIGdhcDogJzAuNzVlbScsIGZsZXhXcmFwOiAnd3JhcCcsIG1hcmdpbkJvdHRvbTogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImgzXCIgc3R5bGU9e3sgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAgICAgICAgRmFicmljIHBlZXJzXG4gICAgICAgICAgICAgICAgICA8TGFiZWwgc2l6ZT1cInNtYWxsXCIgYmFzaWMgY29sb3I9XCJncmVlblwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScsIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnIH19PlxuICAgICAgICAgICAgICAgICAgICB7dW5pZmllZFBlZXJzLmxlbmd0aH0gaW4gdmlld1xuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJywgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScgfX0+XG4gICAgICAgICAgICAgICAgICB7ZmFicmljUGVlcnNTb3J0ZWQuZmlsdGVyKChwKSA9PiAhaXNXZWJydGNUcmFuc3BvcnRQZWVyUm93KHApKS5sZW5ndGh9IFRDUCDCt3snICd9XG4gICAgICAgICAgICAgICAgICB7ZmFicmljUGVlcnNTb3J0ZWQuZmlsdGVyKChwKSA9PiBpc1dlYnJ0Y1RyYW5zcG9ydFBlZXJSb3cocCkpLmxlbmd0aH0gbWVzaCAoaHViIHN0YXR1cylcbiAgICAgICAgICAgICAgICAgIHt3ZWJydGNFeHRyYVJvd3MubGVuZ3RoID4gMCA/IGAgwrcgJHt3ZWJydGNFeHRyYVJvd3MubGVuZ3RofSBtZXNoIChsb2NhbCBvbmx5KWAgOiAnJ31cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB7aXNMb2dnZWRJbiA/IChcbiAgICAgICAgICAgICAgICA8QnV0dG9uLkdyb3VwIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgICAge3R5cGVvZiBvblJlZnJlc2hQZWVycyA9PT0gJ2Z1bmN0aW9uJyA/IChcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBpY29uIGxhYmVsUG9zaXRpb249XCJsZWZ0XCIgb25DbGljaz17b25SZWZyZXNoUGVlcnN9IHRpdGxlPVwiUmVmcmVzaCBwZWVyIGxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicmVmcmVzaFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgUmVmcmVzaFxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvbkFkZFBlZXIgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcGVuQWRkUGVlck1vZGFsKCk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJhZGRcIiAvPlxuICAgICAgICAgICAgICAgICAgICBBZGQgcGVlclxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24uR3JvdXA+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7dW5pZmllZFBlZXJzLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICAgIDxVbmlmaWVkUGVlcnNQYWdpbmF0ZWRMaXN0XG4gICAgICAgICAgICAgICAgdW5pZmllZFBlZXJzPXt1bmlmaWVkUGVlcnN9XG4gICAgICAgICAgICAgICAgcHJpbWFyeVBlZXJOb3JtPXtwcmltYXJ5UGVlck5vcm19XG4gICAgICAgICAgICAgICAgc2lnbmFsaW5nSG9zdFBvcnQ9e3NpZ25hbGluZ0hvc3RQb3J0fVxuICAgICAgICAgICAgICAgIGdsb2JhbFBlZXJzPXtnbG9iYWxQZWVyc31cbiAgICAgICAgICAgICAgICBvbkRpc2Nvbm5lY3RXZWJSVENQZWVyPXtvbkRpc2Nvbm5lY3RXZWJSVENQZWVyfVxuICAgICAgICAgICAgICAgIG9uRmFicmljUGVlclJlc3luYz17b25GYWJyaWNQZWVyUmVzeW5jfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgZm9udFN0eWxlOiAnaXRhbGljJywgbWFyZ2luVG9wOiAnMC41ZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgICAgIE5vIFRDUCBvciBtZXNoIHBlZXJzIHlldC4gQWRkIDxjb2RlPntERUZBVUxUX1BSSU1BUllfRkFCUklDX0hVQn08L2NvZGU+IG9yIDxzdHJvbmc+QWRkIHBlZXI8L3N0cm9uZz4gZm9yIEZhYnJpYyA8Y29kZT5ob3N0OnBvcnQ8L2NvZGU+ICg8Y29kZT43Nzc3PC9jb2RlPikuIEJyb3dzZXJzIHJlZ2lzdGVyIGZvciBXZWJSVEM7IGNvbm5lY3RlZCBtZXNoIHJvd3Mgc2hvdyA8c3Ryb25nPk1lc2g8L3N0cm9uZz4gYW5kIHJlcHV0YXRpb24uXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICA8U2VnbWVudCBiYXNpYyBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxcmVtJywgcGFkZGluZ1RvcDogMCB9fSBpZD1cInBlZXJzLXBhZ2UtZm9vdGVyXCI+XG4gICAgICAgICAgPERpdmlkZXIgLz5cbiAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46IDAsIGNvbG9yOiAnIzc3NycsIGZvbnRTaXplOiAnMC44OGVtJywgbGluZUhlaWdodDogMS41LCBtYXhXaWR0aDogJzUycmVtJyB9fT5cbiAgICAgICAgICAgIDxzdHJvbmc+UHJvdG9jb2w6PC9zdHJvbmc+IEZhYnJpYyBQMlAgdXNlcyBzZWNwMjU2azEtc2lnbmVkIDxjb2RlPk1lc3NhZ2U8L2NvZGU+IGVudmVsb3BlczsgdGhlIGhlYWRlciA8Y29kZT5oYXNoPC9jb2RlPiBpcyBkb3VibGUtU0hBMjU2IG9mIHRoZSBib2R5IHNvIHRhbXBlcmluZyBpcyBkZXRlY3RlZC4gU2Vzc2lvbnMgYW5kIGludmVudG9yeSBhcmUgYXR0cmlidXRlZCB0byB0aGUgc2FtZSA8c3Ryb25nPkZhYnJpYyBQZWVyIElEPC9zdHJvbmc+IG9uY2UgdGhlIFRDUCBwYXRoIGNvbmZpcm1zIGlkZW50aXR5LiBGb3IgZmllbGQgc2VtYW50aWNzIHNlZSA8Y29kZT5mYWJyaWMvZG9jcy9NRVNTQUdFX1NFQ1VSSVRZLm1kPC9jb2RlPiBpbiB0aGUgRmFicmljIHJlcG8uXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgPE1vZGFsXG4gICAgICAgICAgb3Blbj17dGhpcy5zdGF0ZS5hZGRQZWVyTW9kYWxPcGVufVxuICAgICAgICAgIG9uQ2xvc2U9e3RoaXMuX2Nsb3NlQWRkUGVlck1vZGFsfVxuICAgICAgICAgIG9uT3Blbj17KCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWwgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWJyaWMtYWRkLXBlZXItYWRkcmVzcycpO1xuICAgICAgICAgICAgaWYgKGVsICYmIHR5cGVvZiBlbC5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGVsLmZvY3VzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBjbG9zZU9uRGltbWVyQ2xpY2tcbiAgICAgICAgICBjbG9zZU9uRXNjYXBlXG4gICAgICAgID5cbiAgICAgICAgICA8TW9kYWwuSGVhZGVyPkFkZCBGYWJyaWMgcGVlcjwvTW9kYWwuSGVhZGVyPlxuICAgICAgICAgIDxNb2RhbC5Db250ZW50PlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luVG9wOiAwLCBjb2xvcjogJyM1NTUnIH19PlxuICAgICAgICAgICAgICBUQ1AgYWRkcmVzcyBmb3IgRmFicmljIFAyUCAoZGVmYXVsdCBwb3J0IDxjb2RlPjc3Nzc8L2NvZGU+KS4gWW91IGNhbiBwYXN0ZSBhIGZ1bGwgVVJMIOKAlCBpdCB3aWxsIGJlIG5vcm1hbGl6ZWQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8Rm9ybVxuICAgICAgICAgICAgICBvblN1Ym1pdD17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3VibWl0QWRkUGVlcigpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImZhYnJpYy1hZGQtcGVlci1hZGRyZXNzXCI+UGVlciBhZGRyZXNzPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwiZmFicmljLWFkZC1wZWVyLWFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJob3N0OnBvcnQgb3IgaG9zdCAoZS5nLiBodWIuZmFicmljLnB1YilcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuYWRkUGVlckRyYWZ0fVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB0aGlzLnNldFN0YXRlKHsgYWRkUGVlckRyYWZ0OiBlLnRhcmdldC52YWx1ZSB9KX1cbiAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N1Ym1pdEFkZFBlZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgICAgICAgIDxNb2RhbC5BY3Rpb25zPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17dGhpcy5fY2xvc2VBZGRQZWVyTW9kYWx9PlxuICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcHJpbWFyeSBvbkNsaWNrPXt0aGlzLl9zdWJtaXRBZGRQZWVyfT5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImFkZFwiIC8+XG4gICAgICAgICAgICAgIEFkZCBwZWVyXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L01vZGFsLkFjdGlvbnM+XG4gICAgICAgIDwvTW9kYWw+XG4gICAgICAgIDxNb2RhbFxuICAgICAgICAgIG9wZW49e3RoaXMuc3RhdGUuY29ubmVjdFBlZXJNb2RhbE9wZW59XG4gICAgICAgICAgb25DbG9zZT17dGhpcy5fY2xvc2VDb25uZWN0UGVlck1vZGFsfVxuICAgICAgICAgIHNpemU9XCJ0aW55XCJcbiAgICAgICAgICBjbG9zZU9uRGltbWVyQ2xpY2tcbiAgICAgICAgICBjbG9zZU9uRXNjYXBlXG4gICAgICAgID5cbiAgICAgICAgICA8TW9kYWwuSGVhZGVyPkNvbm5lY3QgdG8gV2ViUlRDIHNpZ25hbGluZyBpZDwvTW9kYWwuSGVhZGVyPlxuICAgICAgICAgIDxNb2RhbC5Db250ZW50PlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luVG9wOiAwLCBjb2xvcjogJyM1NTUnLCBmb250U2l6ZTogJzAuOTJlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICAgIEh1Yi1yZWdpc3RlcmVkIHNpZ25hbGluZyBpZCAoZS5nLiA8Y29kZT5mYWJyaWMtYnJpZGdlLeKApjwvY29kZT4pLiBBZnRlciB0aGUgbWVzaCBsaW5rcywgdHJhZmZpYyBpcyBzdGlsbCBhdHRyaWJ1dGVkIHRvIDxzdHJvbmc+RmFicmljIFBlZXIgSUQ8L3N0cm9uZz4gd2hlbiB0aGUgYnJpZGdlIGNvbmZpcm1zIFAyUCBpZGVudGl0eS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxGb3JtIG9uU3VibWl0PXsoZSkgPT4geyBlLnByZXZlbnREZWZhdWx0KCk7IHRoaXMuX3N1Ym1pdENvbm5lY3RQZWVyTW9kYWwoKTsgfX0+XG4gICAgICAgICAgICAgIDxGb3JtLkZpZWxkPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwicGVlcnMtY29ubmVjdC1wZWVyLWlkXCI+V2ViUlRDIHNpZ25hbGluZyBpZDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cInBlZXJzLWNvbm5lY3QtcGVlci1pZFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZhYnJpYy1icmlkZ2Ut4oCmXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmNvbm5lY3RQZWVySWREcmFmdH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGNvbm5lY3RQZWVySWREcmFmdDogZS50YXJnZXQudmFsdWUgfSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9Gb3JtLkZpZWxkPlxuICAgICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgICAgICA8TW9kYWwuQWN0aW9ucz5cbiAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMuX2Nsb3NlQ29ubmVjdFBlZXJNb2RhbH0+XG4gICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBwcmltYXJ5IG9uQ2xpY2s9e3RoaXMuX3N1Ym1pdENvbm5lY3RQZWVyTW9kYWx9PlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicGx1Z1wiIC8+XG4gICAgICAgICAgICAgIENvbm5lY3RcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvTW9kYWwuQWN0aW9ucz5cbiAgICAgICAgPC9Nb2RhbD5cbiAgICAgIDwvZmFicmljLWh1Yi1wZWVycz5cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIFBlZXJzUGFnZVdpdGhMb2NhdGlvbiAocHJvcHMpIHtcbiAgY29uc3QgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICByZXR1cm4gPFBlZXJzUGFnZSB7Li4ucHJvcHN9IGxvY2F0aW9uPXtsb2NhdGlvbn0gLz47XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUGVlcnNQYWdlV2l0aExvY2F0aW9uO1xuIl0sIm5hbWVzIjpbIl9leHRlbmRzIiwiT2JqZWN0IiwiYXNzaWduIiwiYmluZCIsIm4iLCJlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidCIsInIiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsIm5leHQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwicHJvdG90eXBlIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIl90eXBlb2YiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJCb29sZWFuIiwidmFsdWVPZiIsInNldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfaW5oZXJpdHMiLCJjcmVhdGUiLCJfc2V0UHJvdG90eXBlT2YiLCJpIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJ1c2VMb2NhdGlvbiIsIkxpbmsiLCJ1c2VOYXZpZ2F0ZSIsIl9yZXF1aXJlMiIsIkJ1dHRvbiIsIkRpdmlkZXIiLCJGb3JtIiwiR3JpZCIsIkhlYWRlciIsIkljb24iLCJJbnB1dCIsIkxhYmVsIiwiTGlzdCIsIkxvYWRlciIsIk1lc3NhZ2UiLCJNb2RhbCIsIlNlZ21lbnQiLCJTdGF0aXN0aWMiLCJUYWJsZSIsIkdyYXBoRG9jdW1lbnRQcmV2aWV3IiwiX3JlcXVpcmUzIiwicGVlclRvcG9sb2d5VG9Eb3QiLCJfcmVxdWlyZTQiLCJpc0h1Yk5ldHdvcmtTdGF0dXNTaGFwZSIsIl9yZXF1aXJlNSIsIm5vcm1hbGl6ZUZhYnJpY1BlZXJBZGRyZXNzIiwibm9ybWFsaXplUGVlckFkZHJlc3NJbnB1dCIsImRlZHVwZUZhYnJpY1BlZXJzIiwiZmFicmljUGVlclByaW1hcnlMYWJlbCIsImZhYnJpY1BlZXJCZWNoMzJJZCIsInBlZXJOYXRpdmVQZWVyaW5nU3RyaW5nIiwiZmFicmljUDJQSWRlbnRpdHlDb25maXJtZWQiLCJjb25zb2xpZGF0ZVVuaWZpZWRQZWVyc0J5RmFicmljSWQiLCJidWlsZFdlYnJ0Y0NvbWJpbmVkUm93cyIsIndlYnJ0Y0NvbWJpbmVkVG9GYWJyaWNQZWVyUm93cyIsIm1lcmdlVGNwQW5kV2VicnRjUGVlclJvd3MiLCJpc1dlYnJ0Y1RyYW5zcG9ydFBlZXJSb3ciLCJfcmVxdWlyZTYiLCJsb2FkSHViVWlGZWF0dXJlRmxhZ3MiLCJzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncyIsIl9yZXF1aXJlNyIsInJlYWRTdG9yYWdlU3RyaW5nIiwid3JpdGVTdG9yYWdlU3RyaW5nIiwiX3JlcXVpcmU4IiwidG9hc3QiLCJIdWJQYWdpbmF0aW9uIiwiX3JlcXVpcmU5IiwidXNlSHViTGlzdFBhZ2luYXRpb24iLCJERUZBVUxUX1BSSU1BUllfRkFCUklDX0hVQiIsIlBSSU1BUllfUEVFUl9TVE9SQUdFX0tFWSIsInJlYWRQcmltYXJ5UGVlckFkZHJlc3MiLCJ3aW5kb3ciLCJ0cmltIiwid3JpdGVQcmltYXJ5UGVlckFkZHJlc3MiLCJhZGRyIiwiaW52ZW50b3J5RG9jQ291bnRGb3JGYWJyaWNQZWVyIiwiZ2xvYmFsUGVlcnMiLCJmYWJyaWNJZCIsImZpZCIsImRpcmVjdCIsImludmVudG9yeSIsImRvY3VtZW50cyIsIl9pIiwiX09iamVjdCRrZXlzIiwiayIsImV4IiwiaWQiLCJVbmlmaWVkUGVlcnNQYWdpbmF0ZWRMaXN0IiwiX3JlZiIsInVuaWZpZWRQZWVycyIsInByaW1hcnlQZWVyTm9ybSIsInNpZ25hbGluZ0hvc3RQb3J0Iiwib25EaXNjb25uZWN0V2ViUlRDUGVlciIsIm9uRmFicmljUGVlclJlc3luYyIsIm5hdmlnYXRlIiwiZmlyc3QiLCJsYXN0IiwicmVzZXRLZXkiLCJjb25jYXQiLCJhZGRyZXNzIiwiX3VzZUh1Ykxpc3RQYWdpbmF0aW9uIiwicGFnZSIsInRvdGFsUGFnZXMiLCJyYW5nZUZyb20iLCJyYW5nZVRvIiwidG90YWwiLCJzZXRQYWdlIiwic2lnSHAiLCJncCIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsImNvbXBhY3QiLCJjZWxsZWQiLCJzdHJpcGVkIiwic2VsZWN0YWJsZSIsInNpemUiLCJ1bnN0YWNrYWJsZSIsInN0eWxlIiwibWFyZ2luVG9wIiwidGFibGVMYXlvdXQiLCJSb3ciLCJIZWFkZXJDZWxsIiwid2lkdGgiLCJ0ZXh0QWxpZ24iLCJjb2xsYXBzaW5nIiwiQm9keSIsIm1hcCIsInBlZXIiLCJpZHgiLCJtZXNoUm93IiwicHVia2V5IiwiaG9zdCIsInVybCIsImJlY2gzMklkIiwicm91dGVUYXJnZXQiLCJyb3dLZXkiLCJzdGF0dXMiLCJpc0Nvbm5lY3RlZCIsInNjb3JlIiwibWlzYmVoYXZpb3IiLCJuaWNrbmFtZSIsImxhc3RTZWVuIiwibGFzdE1lc3NhZ2UiLCJhZGRyTm9ybSIsImlzUHJpbWFyeVJvdyIsImNvbm5lY3Rpb25TdHIiLCJwMnBDb25maXJtZWQiLCJpbnZOIiwidGNwRm9yUmVzeW5jIiwic3RhcnRzV2l0aCIsIm1lc2hEaXNjb25uZWN0SWQiLCJtZXRhZGF0YSIsIndlYnJ0Y1NpZ25hbGluZ0lkIiwiaGVhZGxpbmVJZCIsInRhZ1N1bW1hcnkiLCJqb2luIiwic2VlblNob3J0IiwiRGF0ZSIsInRvTG9jYWxlU3RyaW5nIiwidW5kZWZpbmVkIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwiY3Vyc29yIiwidGl0bGUiLCJvbkNsaWNrIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiQ2VsbCIsInZlcnRpY2FsQWxpZ24iLCJvdmVyZmxvdyIsImZvbnRGYW1pbHkiLCJmb250U2l6ZSIsImZvbnRXZWlnaHQiLCJ0ZXh0T3ZlcmZsb3ciLCJ3aGl0ZVNwYWNlIiwiY29sb3IiLCJkaXNwbGF5IiwibWFyZ2luTGVmdCIsImJhc2ljIiwiaWNvbiIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJmbGV4V3JhcCIsImdhcCIsImFjdGl2ZVBhZ2UiLCJvblBhZ2VDaGFuZ2UiLCJkIiwiZmxleCIsIm1pbldpZHRoIiwic29ydEZhYnJpY1BlZXJzRm9yQXV0aG9yaXR5IiwicGVlcnMiLCJwcmltYXJ5Tm9ybSIsImFyciIsInBuIiwic29ydCIsImIiLCJhYSIsImJhIiwiYXAiLCJicCIsInNhIiwic2IiLCJpc0Zpbml0ZSIsImxvY2FsZUNvbXBhcmUiLCJQZWVyc1BhZ2UiLCJfUmVhY3QkQ29tcG9uZW50IiwicHJvcHMiLCJfdGhpcyIsInNldFN0YXRlIiwiYWRkUGVlck1vZGFsT3BlbiIsImFkZFBlZXJEcmFmdCIsIm9uQWRkUGVlciIsIm5vcm1hbGl6ZWQiLCJzdGF0ZSIsIndhcm5pbmciLCJoZWFkZXIiLCJjb25uZWN0UGVlck1vZGFsT3BlbiIsImNvbm5lY3RQZWVySWREcmFmdCIsIm9uQ29ubmVjdFdlYlJUQ1BlZXIiLCJmbHVzaENoYWluU25hcHNob3QiLCJmbHVzaENoYWluTmV0d29yayIsImZsdXNoQ2hhaW5MYWJlbCIsImNvbXBvbmVudERpZE1vdW50IiwiX3RoaXMyIiwib25SZWZyZXNoUGVlcnMiLCJfcmVmcmVzaFRpbWVyIiwic2V0SW50ZXJ2YWwiLCJfb25QZWVyVG9wb2xvZ3lHb3NzaXAiLCJldiIsInBhdGgiLCJkZXRhaWwiLCJvcGVyYXRpb24iLCJmb3JjZVVwZGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJfb25OZXR3b3JrU3RhdHVzIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjbGVhckludGVydmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbmRlciIsIl90aGlzMyIsIl90aGlzJHByb3BzIiwiYXV0aCIsImJyaWRnZSIsImJyaWRnZVJlZiIsIm9uRGlzY29ubmVjdFBlZXIiLCJvblNlbmRQZWVyTWVzc2FnZSIsIm9uU2V0UGVlck5pY2tuYW1lIiwib25EaXNjb3ZlcldlYlJUQ1BlZXJzIiwib25SZXB1Ymxpc2hXZWJSVENPZmZlciIsIm9uRGlzY29ubmVjdEFsbFdlYlJUQ1BlZXJzIiwib25TZW5kV2ViUlRDVGVzdFBpbmciLCJhZG1pblBlZXJUb29sc1Rva2VuIiwib25TZW5kRmx1c2hDaGFpblRvVHJ1c3RlZFBlZXJzIiwidWYiLCJpc0xvZ2dlZEluIiwieHB1YiIsImFjdGl2ZUJyaWRnZVJlZiIsImN1cnJlbnQiLCJjYW5kaWRhdGUiLCJuZXR3b3JrU3RhdHVzIiwiZmFsbGJhY2siLCJsYXN0TmV0d29ya1N0YXR1cyIsIm5ldHdvcmsiLCJzdGF0ZVN0YXR1c1VwcGVyIiwidG9VcHBlckNhc2UiLCJicmlkZ2VGYWJyaWNQYXVzZWQiLCJpc09ubGluZSIsImZhYnJpY1BlZXJJZCIsImxlZ2FjeVVuc3RhYmxlSWQiLCJjb250cmFjdCIsInNoYXJlTm9kZUlkIiwiaG9zdFBvcnQiLCJzaGFyZWFibGVTdHJpbmciLCJ3ZWJydGNQZWVycyIsImZhYnJpY1BlZXJzIiwidHJhbnNwb3J0IiwiaGFzV2ViUlRDTWV0YWRhdGEiLCJjYXBhYmlsaXRpZXMiLCJmYWJyaWNQZWVyc1NvcnRlZCIsImxvY2FsV2VicnRjUGVlcnMiLCJtZXNoU3RhdHVzIiwid2VicnRjTWVzaFN0YXR1cyIsIndlYnJ0Y0NvbWJpbmVkIiwicGVlcklkIiwicmVwTG9va3VwIiwicGlkIiwiZ2V0V2ViUlRDUGVlclJlcHV0YXRpb24iLCJmYWJyaWNQZWVyc1dpdGhSZXAiLCJwIiwic2lkIiwiaWRzRnJvbVN0YXR1c1BlZXJzIiwiU2V0IiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJhZGQiLCJiZiIsImVyciIsImxvY2FsT25seUZvck1lc2giLCJscCIsImhhcyIsIm1ldGEiLCJsRmFiIiwid2VicnRjRXh0cmFSb3dzIiwic2lnbmFsaW5nIiwibG9jYWwiLCJsb2NhdGlvbiIsImdldEdsb2JhbFN0YXRlIiwiYml0Y29pbiIsImNoYWluSGVpZ2h0IiwiaGVpZ2h0IiwidGlwRnVsbCIsImJlc3RCbG9ja0hhc2giLCJ0aXBTaG9ydCIsImJ0Y05ldHdvcmsiLCJtZW1wb29sTiIsIm1lbXBvb2xUeENvdW50IiwiZ3NUb3BvIiwidG9wb2xvZ3lHb3NzaXAiLCJwZWVyVG9wb2xvZ3lHb3NzaXAiLCJ0b3BvbG9neURvdCIsInNlbGZJZCIsInNlbGZMYWJlbCIsImRpcmVjdFBlZXJzIiwiZ29zc2lwIiwiY2xlYXIiLCJib3JkZXJSYWRpdXMiLCJib3hTaGFkb3ciLCJtYXJnaW5Cb3R0b20iLCJyb2xlIiwiYXMiLCJ0byIsIm1hcmdpbiIsIkNvbnRlbnQiLCJtYXhXaWR0aCIsImxpbmVIZWlnaHQiLCJwYWRkaW5nIiwiYWN0aXZlIiwiaW5saW5lIiwic2VjdGlvbiIsInN0YWNrYWJsZSIsIkNvbHVtbiIsImNvbXB1dGVyIiwidGFibGV0IiwicmVsYXhlZCIsIkl0ZW0iLCJEZXNjcmlwdGlvbiIsIndvcmRCcmVhayIsImxhYmVsUG9zaXRpb24iLCJuYXZpZ2F0b3IiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJ0YSIsImRvY3VtZW50IiwicG9zaXRpb24iLCJvcGFjaXR5IiwiYm9keSIsImFwcGVuZENoaWxkIiwic2VsZWN0IiwiZXhlY0NvbW1hbmQiLCJyZW1vdmVDaGlsZCIsIkdyb3VwIiwid2lkdGhzIiwiVmFsdWUiLCJ0ZXh0IiwiYml0Y29pbkV4cGxvcmVyIiwiYXZhaWxhYmxlIiwibWVzc2FnZSIsImNvbnRlbnQiLCJpbmZvIiwib25TdWJtaXQiLCJoIiwiZXJyb3IiLCJzbmFwc2hvdEJsb2NrSGFzaCIsInRvTG93ZXJDYXNlIiwibGFiZWwiLCJhdXRvQ2xvc2UiLCJGaWVsZCIsImh0bWxGb3IiLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwidGFyZ2V0IiwiYXV0b0NvbXBsZXRlIiwidHlwZSIsImRpc2FibGVkIiwiaHJlZiIsInJlbCIsInByaW1hcnkiLCJjb25uZWN0ZWQiLCJtYXhQZWVycyIsImNvbm5lY3RpbmciLCJyZWFkeSIsInNsb3RzQXZhaWxhYmxlIiwiX29wZW5Db25uZWN0UGVlck1vZGFsIiwiZm9udFN0eWxlIiwiZG90U291cmNlIiwic2tpcElkZW50aXR5R2F0ZSIsImJhY2tncm91bmQiLCJfb3BlbkFkZFBlZXJNb2RhbCIsInBhZGRpbmdUb3AiLCJvcGVuIiwib25DbG9zZSIsIl9jbG9zZUFkZFBlZXJNb2RhbCIsIm9uT3BlbiIsImVsIiwiZ2V0RWxlbWVudEJ5SWQiLCJmb2N1cyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNsb3NlT25EaW1tZXJDbGljayIsImNsb3NlT25Fc2NhcGUiLCJfc3VibWl0QWRkUGVlciIsIm9uS2V5RG93biIsIkFjdGlvbnMiLCJfY2xvc2VDb25uZWN0UGVlck1vZGFsIiwiX3N1Ym1pdENvbm5lY3RQZWVyTW9kYWwiLCJDb21wb25lbnQiLCJQZWVyc1BhZ2VXaXRoTG9jYXRpb24iLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/PeerList.js\n\n}')},"./components/PeerView.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n// Dependencies\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar QRCode = __webpack_require__(/*! qrcode */ "./node_modules/qrcode/lib/browser.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link,\n useNavigate = _require.useNavigate,\n useParams = _require.useParams;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Accordion = _require2.Accordion,\n Button = _require2.Button,\n Checkbox = _require2.Checkbox,\n Divider = _require2.Divider,\n Form = _require2.Form,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Input = _require2.Input,\n Label = _require2.Label,\n List = _require2.List,\n Message = _require2.Message,\n Modal = _require2.Modal,\n Segment = _require2.Segment,\n Loader = _require2.Loader,\n Menu = _require2.Menu,\n Table = _require2.Table;\nvar ChatInput = __webpack_require__(/*! ./ChatInput */ "./components/ChatInput.js");\nvar _require3 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require3.formatSatsDisplay;\nvar _require4 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n loadUpstreamSettings = _require4.loadUpstreamSettings,\n sendBridgePayment = _require4.sendBridgePayment;\nvar _require5 = __webpack_require__(/*! ../functions/peerTopologyDot */ "./functions/peerTopologyDot.js"),\n peerNeighborhoodToDot = _require5.peerNeighborhoodToDot;\nvar GraphDocumentPreview = __webpack_require__(/*! ./GraphDocumentPreview */ "./components/GraphDocumentPreview.js");\nvar _require6 = __webpack_require__(/*! ../functions/hubNetworkStatus */ "./functions/hubNetworkStatus.js"),\n isHubNetworkStatusShape = _require6.isHubNetworkStatusShape;\nvar _require7 = __webpack_require__(/*! ../functions/isLikelyBip32ExtendedKey */ "./functions/isLikelyBip32ExtendedKey.js"),\n isLikelyBip32ExtendedKey = _require7.isLikelyBip32ExtendedKey;\nvar _require8 = __webpack_require__(/*! ../functions/peerIdentity */ "./functions/peerIdentity.js"),\n shortenPublicId = _require8.shortenPublicId,\n fabricPeerBech32Id = _require8.fabricPeerBech32Id,\n peerNativePeeringString = _require8.peerNativePeeringString,\n peerPeeringEndpointIsSignaling = _require8.peerPeeringEndpointIsSignaling;\nvar _require9 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require9.readHubAdminTokenFromBrowser;\nvar _require0 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require0.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require0.subscribeHubUiFeatureFlags;\n\n/** Hub admin token for operator-only controls; only passed from `/settings/admin/peers/:id`. */\nfunction getAdminPeerToolsTokenFromProps(props) {\n var t = props && props.adminPeerToolsToken;\n return t && String(t).trim() ? String(t).trim() : \'\';\n}\nfunction hubJsonRpc(_x, _x2) {\n return _hubJsonRpc.apply(this, arguments);\n}\nfunction _hubJsonRpc() {\n _hubJsonRpc = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(method, params) {\n var res, body, _t4;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.p = _context5.n) {\n case 0:\n _context5.n = 1;\n return fetch("".concat(typeof window !== \'undefined\' ? window.location.origin : \'\', "/services/rpc"), {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n },\n body: JSON.stringify({\n jsonrpc: \'2.0\',\n id: 1,\n method: method,\n params: params\n })\n });\n case 1:\n res = _context5.v;\n body = {};\n _context5.p = 2;\n _context5.n = 3;\n return res.json();\n case 3:\n body = _context5.v;\n _context5.n = 5;\n break;\n case 4:\n _context5.p = 4;\n _t4 = _context5.v;\n throw new Error(\'Hub returned non-JSON\');\n case 5:\n if (!(!res.ok || body.error)) {\n _context5.n = 6;\n break;\n }\n throw new Error(body.error && body.error.message || "HTTP ".concat(res.status));\n case 6:\n return _context5.a(2, body.result);\n }\n }, _callee5, null, [[2, 4]]);\n }));\n return _hubJsonRpc.apply(this, arguments);\n}\nfunction isNetworkStatus(obj) {\n return !!(obj && _typeof(obj) === \'object\' && (obj.network || Array.isArray(obj.peers)));\n}\nfunction formatMaybeDate(value) {\n try {\n if (!value) return \'\';\n var d = new Date(value);\n if (Number.isNaN(d.getTime())) return String(value);\n return d.toLocaleString();\n } catch (e) {\n return String(value);\n }\n}\n\n/** Resolve peer row from globalState whether the route id is Fabric pubkey or TCP address. */\nfunction findPeerInGlobalPeers(peersMap, routeId) {\n if (!routeId || !peersMap || _typeof(peersMap) !== \'object\') return null;\n if (peersMap[routeId]) return peersMap[routeId];\n for (var _i = 0, _Object$keys = Object.keys(peersMap); _i < _Object$keys.length; _i++) {\n var k = _Object$keys[_i];\n var p = peersMap[k];\n if (p && (p.id === routeId || p.address === routeId)) return p;\n }\n return null;\n}\n\n/** Merge accumulated globalState peer with React detail; ListPeers row wins for live connection fields. */\nfunction mergePeerSources(gsPeer, detailPeer, listPeer) {\n var a = gsPeer && _typeof(gsPeer) === \'object\' ? gsPeer : {};\n var b = detailPeer && _typeof(detailPeer) === \'object\' ? detailPeer : {};\n var c = listPeer && _typeof(listPeer) === \'object\' ? listPeer : {};\n var merged = _objectSpread(_objectSpread(_objectSpread({}, a), b), c);\n if (!(merged.id || merged.address)) return null;\n return merged;\n}\nfunction PeerDetail(props) {\n var navigate = useNavigate();\n var params = useParams();\n var encoded = params && params.id ? params.id : \'\';\n var id = encoded ? decodeURIComponent(encoded) : \'\';\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n detail = _React$useState2[0],\n setDetail = _React$useState2[1];\n var _React$useState3 = React.useState([]),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n peerChats = _React$useState4[0],\n setPeerChats = _React$useState4[1];\n var _React$useState5 = React.useState(\'\'),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n outgoingText = _React$useState6[0],\n setOutgoingText = _React$useState6[1];\n var _React$useState7 = React.useState([]),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n inventoryDocs = _React$useState8[0],\n setInventoryDocs = _React$useState8[1];\n var _React$useState9 = React.useState({}),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n htlcTxids = _React$useState0[0],\n setHtlcTxids = _React$useState0[1];\n var _React$useState1 = React.useState(null),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n htlcConfirmFeedback = _React$useState10[0],\n setHtlcConfirmFeedback = _React$useState10[1];\n var _React$useState11 = React.useState({}),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n htlcFundingQrBySettlement = _React$useState12[0],\n setHtlcFundingQrBySettlement = _React$useState12[1];\n var _React$useState13 = React.useState(null),\n _React$useState14 = _slicedToArray(_React$useState13, 2),\n htlcFundingCopied = _React$useState14[0],\n setHtlcFundingCopied = _React$useState14[1];\n var _React$useState15 = React.useState(\'\'),\n _React$useState16 = _slicedToArray(_React$useState15, 2),\n inventoryRelayTarget = _React$useState16[0],\n setInventoryRelayTarget = _React$useState16[1];\n var _React$useState17 = React.useState(null),\n _React$useState18 = _slicedToArray(_React$useState17, 2),\n bridgePaySettlementId = _React$useState18[0],\n setBridgePaySettlementId = _React$useState18[1];\n var _React$useState19 = React.useState(false),\n _React$useState20 = _slicedToArray(_React$useState19, 2),\n inventoryDebugOpen = _React$useState20[0],\n setInventoryDebugOpen = _React$useState20[1];\n var _React$useState21 = React.useState(null),\n _React$useState22 = _slicedToArray(_React$useState21, 2),\n inventoryRequestMeta = _React$useState22[0],\n setInventoryRequestMeta = _React$useState22[1];\n var _React$useState23 = React.useState(0),\n _React$useState24 = _slicedToArray(_React$useState23, 2),\n peerTopologyTick = _React$useState24[0],\n setPeerTopologyTick = _React$useState24[1];\n var _React$useState25 = React.useState(\'\'),\n _React$useState26 = _slicedToArray(_React$useState25, 2),\n federationContractId = _React$useState26[0],\n setFederationContractId = _React$useState26[1];\n var _React$useState27 = React.useState(false),\n _React$useState28 = _slicedToArray(_React$useState27, 2),\n inviteBusy = _React$useState28[0],\n setInviteBusy = _React$useState28[1];\n var _React$useState29 = React.useState(null),\n _React$useState30 = _slicedToArray(_React$useState29, 2),\n inviteError = _React$useState30[0],\n setInviteError = _React$useState30[1];\n var _React$useState31 = React.useState(null),\n _React$useState32 = _slicedToArray(_React$useState31, 2),\n inviteOk = _React$useState32[0],\n setInviteOk = _React$useState32[1];\n var _React$useState33 = React.useState(false),\n _React$useState34 = _slicedToArray(_React$useState33, 2),\n nickModalOpen = _React$useState34[0],\n setNickModalOpen = _React$useState34[1];\n var _React$useState35 = React.useState(\'\'),\n _React$useState36 = _slicedToArray(_React$useState35, 2),\n nickDraft = _React$useState36[0],\n setNickDraft = _React$useState36[1];\n var _React$useState37 = React.useState(false),\n _React$useState38 = _slicedToArray(_React$useState37, 2),\n inviteNoteModalOpen = _React$useState38[0],\n setInviteNoteModalOpen = _React$useState38[1];\n var _React$useState39 = React.useState(\'\'),\n _React$useState40 = _slicedToArray(_React$useState39, 2),\n inviteNoteDraft = _React$useState40[0],\n setInviteNoteDraft = _React$useState40[1];\n var _React$useState41 = React.useState(false),\n _React$useState42 = _slicedToArray(_React$useState41, 2),\n peerOpsAccordionOpen = _React$useState42[0],\n setPeerOpsAccordionOpen = _React$useState42[1];\n var _React$useState43 = React.useState(0),\n _React$useState44 = _slicedToArray(_React$useState43, 2),\n peerWorkspaceTab = _React$useState44[0],\n setPeerWorkspaceTab = _React$useState44[1];\n var _React$useState45 = React.useState(false),\n _React$useState46 = _slicedToArray(_React$useState45, 2),\n contactAddBusy = _React$useState46[0],\n setContactAddBusy = _React$useState46[1];\n var _React$useState47 = React.useState(null),\n _React$useState48 = _slicedToArray(_React$useState47, 2),\n contactAddErr = _React$useState48[0],\n setContactAddErr = _React$useState48[1];\n var _React$useState49 = React.useState(null),\n _React$useState50 = _slicedToArray(_React$useState49, 2),\n contactAddOk = _React$useState50[0],\n setContactAddOk = _React$useState50[1];\n var _React$useState51 = React.useState(false),\n _React$useState52 = _slicedToArray(_React$useState51, 2),\n peeringCopied = _React$useState52[0],\n setPeeringCopied = _React$useState52[1];\n var _React$useState53 = React.useState(0),\n _React$useState54 = _slicedToArray(_React$useState53, 2),\n hubUiTick = _React$useState54[0],\n setHubUiTick = _React$useState54[1];\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setHubUiTick(function (t) {\n return t + 1;\n });\n });\n }, []);\n void hubUiTick;\n var _React$useState55 = React.useState(0),\n _React$useState56 = _slicedToArray(_React$useState55, 2),\n networkStatusTick = _React$useState56[0],\n setNetworkStatusTick = _React$useState56[1];\n React.useEffect(function () {\n var onNs = function onNs() {\n return setNetworkStatusTick(function (t) {\n return t + 1;\n });\n };\n window.addEventListener(\'networkStatusUpdate\', onNs);\n return function () {\n return window.removeEventListener(\'networkStatusUpdate\', onNs);\n };\n }, []);\n void networkStatusTick;\n React.useEffect(function () {\n var onInv = function onInv(ev) {\n var d = ev && ev.detail;\n if (!d || _typeof(d) !== \'object\') return;\n if (d.status === \'error\' && d.message) {\n setInventoryRequestMeta(function (m) {\n return m ? _objectSpread(_objectSpread({}, m), {}, {\n status: \'error\',\n hubMessage: String(d.message)\n }) : m;\n });\n return;\n }\n if (d.status === \'success\') {\n var viaTag = d.via !== undefined && d.via !== null && String(d.via).trim() !== \'\' ? String(d.via).trim() : \'\';\n setInventoryRequestMeta(function (m) {\n return m ? _objectSpread(_objectSpread({}, m), {}, {\n status: \'accepted\',\n hubMessage: \'\',\n requestVia: viaTag\n }) : m;\n });\n }\n };\n if (typeof window !== \'undefined\') {\n window.addEventListener(\'fabric:peerInventoryRequestResult\', onInv);\n return function () {\n return window.removeEventListener(\'fabric:peerInventoryRequestResult\', onInv);\n };\n }\n return undefined;\n }, []);\n var uf = loadHubUiFeatureFlags();\n var bridge = props.bridge;\n var bridgeRef = props.bridgeRef;\n var current = bridgeRef && bridgeRef.current || bridge && bridge.current;\n var candidate = current && current.networkStatus;\n var fallback = current && current.lastNetworkStatus;\n var networkStatus = isHubNetworkStatusShape(candidate) ? candidate : isHubNetworkStatusShape(fallback) ? fallback : null;\n var peers = Array.isArray(networkStatus && networkStatus.peers) ? networkStatus.peers : [];\n var webrtcFromHub = Array.isArray(networkStatus && networkStatus.webrtcPeers) ? networkStatus.webrtcPeers : [];\n var webrtcRegistration = webrtcFromHub.find(function (p) {\n return p && p.id === id;\n }) || null;\n var webrtcMeta = webrtcRegistration && webrtcRegistration.metadata && _typeof(webrtcRegistration.metadata) === \'object\' ? webrtcRegistration.metadata : null;\n var peerFromStatus = peers.find(function (p) {\n return p && (p.address === id || p.id === id);\n }) || null;\n var mergedFromGs = function () {\n var gs = current && typeof current.getGlobalState === \'function\' ? current.getGlobalState() : null;\n return gs ? findPeerInGlobalPeers(gs.peers || {}, id) : null;\n }();\n var peer = mergePeerSources(mergedFromGs, detail, peerFromStatus);\n var hasPeerRow = !!peer;\n var status = peer && peer.status ? peer.status : \'unknown\';\n var isConnected = status === \'connected\';\n var adminTokenPresent = !!getAdminPeerToolsTokenFromProps(props);\n React.useEffect(function () {\n var bi = props.bridgeRef && props.bridgeRef.current;\n var gs = bi && typeof bi.getGlobalState === \'function\' ? bi.getGlobalState() : null;\n var seed = gs && gs.peers ? findPeerInGlobalPeers(gs.peers, id) : null;\n setDetail(seed || null);\n setPeerChats([]);\n setInventoryDocs([]);\n if (typeof props.onRefreshPeers === \'function\') props.onRefreshPeers();\n if (typeof props.onGetPeer === \'function\' && id) props.onGetPeer(id);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n React.useEffect(function () {\n var onGs = function onGs(ev) {\n var p = ev && ev.detail && ev.detail.operation && ev.detail.operation.path;\n if (p === \'/peerTopologyGossip\') setPeerTopologyTick(function (t) {\n return t + 1;\n });\n };\n window.addEventListener(\'globalStateUpdate\', onGs);\n return function () {\n return window.removeEventListener(\'globalStateUpdate\', onGs);\n };\n }, []);\n React.useEffect(function () {\n var cancelled = false;\n var pairs = [];\n for (var i = 0; i < inventoryDocs.length; i++) {\n var doc = inventoryDocs[i];\n var h = doc && doc.htlc;\n var sid = h && h.settlementId;\n var uri = h && h.bitcoinUri && String(h.bitcoinUri).trim();\n if (sid && uri) pairs.push({\n sid: sid,\n uri: uri\n });\n }\n if (pairs.length === 0) {\n setHtlcFundingQrBySettlement({});\n return;\n }\n Promise.all(pairs.map(function (_ref) {\n var sid = _ref.sid,\n uri = _ref.uri;\n return QRCode.toDataURL(uri, {\n width: 140,\n margin: 2,\n color: {\n dark: \'#000000\',\n light: \'#ffffff\'\n }\n }).then(function (dataUrl) {\n return {\n sid: sid,\n dataUrl: dataUrl\n };\n })["catch"](function () {\n return {\n sid: sid,\n dataUrl: null\n };\n });\n })).then(function (rows) {\n if (cancelled) return;\n var next = {};\n for (var j = 0; j < rows.length; j++) {\n var r = rows[j];\n if (r.dataUrl) next[r.sid] = r.dataUrl;\n }\n setHtlcFundingQrBySettlement(next);\n });\n return function () {\n cancelled = true;\n };\n }, [inventoryDocs]);\n var copyHtlcFunding = React.useCallback(function (text, flashKey) {\n try {\n if (text && typeof navigator !== \'undefined\' && navigator.clipboard) {\n navigator.clipboard.writeText(text);\n setHtlcFundingCopied(flashKey);\n setTimeout(function () {\n return setHtlcFundingCopied(function (k) {\n return k === flashKey ? null : k;\n });\n }, 1500);\n }\n } catch (e) {}\n }, []);\n React.useEffect(function () {\n var deriveChatsAndInventory = function deriveChatsAndInventory(globalState, currentDetail) {\n if (!globalState || !globalState.messages) return;\n var messages = globalState.messages || {};\n var peersById = globalState.peers || {};\n var storedPeer = findPeerInGlobalPeers(peersById, id);\n var peerId = storedPeer && storedPeer.id || currentDetail && currentDetail.id || id;\n var chats = Object.values(messages).filter(function (m) {\n return m && _typeof(m) === \'object\' && m.type === \'P2P_CHAT_MESSAGE\';\n }).filter(function (m) {\n var actorId = m.actor && m.actor.id;\n // Prefer top-level target (ActivityStreams-style), but support legacy\n // object.target / object.address / object.id for backward compatibility.\n var target = m.target || m.object && (m.object.target || m.object.address || m.object.id);\n var matchesActor = !!(actorId && peerId && actorId === peerId);\n var matchesTarget = false;\n if (target) {\n // Direct match against route id or peer id\n if (target === id || target === peerId) {\n matchesTarget = true;\n } else {\n // Match against known peer address/id, when available\n var p = currentDetail || storedPeer;\n if (p && (p.address === target || p.id === target)) {\n matchesTarget = true;\n }\n }\n }\n return matchesActor || matchesTarget;\n }).sort(function (a, b) {\n var ta = a.object && a.object.created || 0;\n var tb = b.object && b.object.created || 0;\n return ta - tb;\n }).slice(-100);\n setPeerChats(chats);\n\n // Derive inventory documents for this peer, if available (keyed by id or address).\n var invPeer = findPeerInGlobalPeers(peersById, id) || peersById[peerId] || storedPeer;\n var docs = invPeer && invPeer.inventory && Array.isArray(invPeer.inventory.documents) ? invPeer.inventory.documents : [];\n setInventoryDocs(docs);\n };\n var handler = function handler(event) {\n try {\n var globalState = event && event.detail && event.detail.globalState;\n if (!globalState) return;\n var stored = globalState.peers ? findPeerInGlobalPeers(globalState.peers, id) : null;\n if (stored) setDetail(stored);\n deriveChatsAndInventory(globalState, stored);\n } catch (e) {}\n };\n\n // Initial load from persisted/restored state (survives refresh)\n var bridgeInstance = props.bridgeRef && props.bridgeRef.current;\n var gs = bridgeInstance && typeof bridgeInstance.getGlobalState === \'function\' ? bridgeInstance.getGlobalState() : null;\n if (gs) {\n var row = gs.peers ? findPeerInGlobalPeers(gs.peers, id) : null;\n deriveChatsAndInventory(gs, row);\n }\n window.addEventListener(\'globalStateUpdate\', handler);\n return function () {\n return window.removeEventListener(\'globalStateUpdate\', handler);\n };\n }, [id, props.bridgeRef]);\n React.useEffect(function () {\n setPeerWorkspaceTab(0);\n }, [id]);\n var routeLooksLikeXpub = isLikelyBip32ExtendedKey(id);\n var xpubOnlyNoPeer = routeLooksLikeXpub && !peer;\n var _React$useState57 = React.useState(false),\n _React$useState58 = _slicedToArray(_React$useState57, 2),\n peerResolveSlow = _React$useState58[0],\n setPeerResolveSlow = _React$useState58[1];\n React.useEffect(function () {\n setPeerResolveSlow(false);\n }, [id]);\n React.useEffect(function () {\n if (hasPeerRow || !id || routeLooksLikeXpub) return undefined;\n var t = setTimeout(function () {\n return setPeerResolveSlow(true);\n }, 14000);\n return function () {\n return clearTimeout(t);\n };\n }, [id, hasPeerRow, routeLooksLikeXpub]);\n var webrtcXpub = webrtcMeta && webrtcMeta.xpub && isLikelyBip32ExtendedKey(String(webrtcMeta.xpub)) ? String(webrtcMeta.xpub).trim() : \'\';\n var bech32Headline = peer ? fabricPeerBech32Id(peer) : \'\';\n var title = (bech32Headline ? shortenPublicId(bech32Headline, 18, 14) : null) || peer && (peer.nickname || peer.alias || peer.id || peer.address) || (webrtcXpub ? shortenPublicId(webrtcXpub, 14, 12) : null) || (routeLooksLikeXpub && id ? id.length > 40 ? "".concat(id.slice(0, 16), "\\u2026").concat(id.slice(-14)) : id : id) || \'Peer\';\n var resolvedAddress = peer && peer.address || id || \'\';\n var host = \'\';\n var port = \'\';\n if (peer && peer.connection && peer.connection.remoteAddress) {\n host = peer.connection.remoteAddress;\n port = peer.connection.remotePort != null ? String(peer.connection.remotePort) : \'\';\n } else if (resolvedAddress) {\n var lastColon = resolvedAddress.lastIndexOf(\':\');\n if (lastColon > 0) {\n host = resolvedAddress.slice(0, lastColon);\n port = resolvedAddress.slice(lastColon + 1);\n } else {\n host = resolvedAddress;\n }\n }\n var chatDest = peer && peer.address || id;\n var tcpKeyForFabricResync = peer && peer.address || (id && String(id).includes(\':\') ? id : \'\');\n var canRequestFabricResync = !!(isConnected && tcpKeyForFabricResync && !String(id).startsWith(\'fabric-bridge-\'));\n var hasUnlockedIdentity = !!(current && typeof current.hasUnlockedIdentity === \'function\' && current.hasUnlockedIdentity());\n var canSendPeerChat = !!chatDest && hasUnlockedIdentity;\n var handleSendPeerChat = function handleSendPeerChat(event) {\n event.preventDefault();\n var text = (outgoingText || \'\').trim();\n if (!text || !canSendPeerChat) return;\n if (typeof props.onSendPeerMessage === \'function\') {\n props.onSendPeerMessage(chatDest, text);\n setOutgoingText(\'\');\n }\n };\n var gossipNeighbors = React.useMemo(function () {\n var gs = current && typeof current.getGlobalState === \'function\' ? current.getGlobalState() : null;\n var g = gs && gs.peerTopologyGossip && gs.peerTopologyGossip.byReporter;\n if (!peer || !g || _typeof(g) !== \'object\') return null;\n var key = peer.id && g[peer.id] ? peer.id : id && g[id] ? id : peer.address && g[peer.address] ? peer.address : null;\n if (!key || !g[key] || !Array.isArray(g[key].neighbors)) return null;\n return g[key].neighbors;\n }, [current, peer, id, peerTopologyTick]);\n var neighborDot = React.useMemo(function () {\n var center = peer && peer.id || id;\n if (!center || !gossipNeighbors || gossipNeighbors.length === 0) return \'\';\n try {\n return peerNeighborhoodToDot(center, gossipNeighbors);\n } catch (_) {\n return \'\';\n }\n }, [peer, id, gossipNeighbors]);\n var sendInventoryRequest = function sendInventoryRequest(kind, optsIn) {\n // Prefer both id + address when present so hub _resolvePeerAddress / TCP map matches ListPeers rows.\n var invDest = peer && peer.address && peer.id ? {\n address: peer.address,\n id: peer.id\n } : peer && peer.address || peer && peer.id || id;\n if (!invDest || !bridgeRef || !bridgeRef.current || typeof bridgeRef.current.sendPeerInventoryRequest !== \'function\') return;\n var opts = optsIn && _typeof(optsIn) === \'object\' ? _objectSpread({}, optsIn) : {};\n try {\n var bi = bridgeRef.current;\n if (bi && typeof bi.getHtlcRefundPublicKeyHex === \'function\') {\n var pk = bi.getHtlcRefundPublicKeyHex();\n if (pk && !opts.buyerRefundPublicKey) opts.buyerRefundPublicKey = pk;\n }\n } catch (_) {}\n setInventoryRequestMeta({\n at: Date.now(),\n kind: kind || \'documents\',\n status: \'sent\'\n });\n bridgeRef.current.sendPeerInventoryRequest(invDest, kind || \'documents\', opts);\n };\n var openNicknameModal = React.useCallback(function () {\n setNickDraft(peer && peer.nickname ? String(peer.nickname) : \'\');\n setNickModalOpen(true);\n }, [peer]);\n var submitNickname = React.useCallback(function () {\n if (typeof props.onSetPeerNickname !== \'function\' || !id) {\n setNickModalOpen(false);\n return;\n }\n props.onSetPeerNickname(id, nickDraft);\n setNickModalOpen(false);\n }, [props, id, nickDraft]);\n var launchInviteNoteModal = React.useCallback(function () {\n setInviteNoteDraft(\'\');\n setInviteNoteModalOpen(true);\n }, []);\n var submitInviteToContract = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var token, note, cid, r, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n token = getAdminPeerToolsTokenFromProps(props);\n if (!(!token || !id)) {\n _context.n = 1;\n break;\n }\n return _context.a(2);\n case 1:\n note = inviteNoteDraft && String(inviteNoteDraft).trim() ? String(inviteNoteDraft).trim().slice(0, 500) : \'\';\n setInviteBusy(true);\n setInviteError(null);\n setInviteOk(null);\n _context.p = 2;\n cid = (federationContractId || \'\').trim();\n _context.n = 3;\n return hubJsonRpc(\'InvitePeerToFederationContract\', [{\n peerId: id,\n contractId: cid || undefined,\n note: note || undefined,\n adminToken: token\n }]);\n case 3:\n r = _context.v;\n if (!(r && r.status === \'error\')) {\n _context.n = 4;\n break;\n }\n setInviteError(r.message || \'Invite failed\');\n return _context.a(2);\n case 4:\n if (r && r.status === \'success\' && r.inviteId) {\n setInviteOk("Invite sent (".concat(r.inviteId.slice(0, 16), "\\u2026)"));\n } else {\n setInviteOk(\'Invite sent\');\n }\n setInviteNoteModalOpen(false);\n _context.n = 6;\n break;\n case 5:\n _context.p = 5;\n _t = _context.v;\n setInviteError(_t && _t.message ? _t.message : String(_t));\n case 6:\n _context.p = 6;\n setInviteBusy(false);\n return _context.f(6);\n case 7:\n return _context.a(2);\n }\n }, _callee, null, [[2, 5, 6, 7]]);\n })), [props, id, inviteNoteDraft, federationContractId]);\n var hubAdminCollaborationToken = readHubAdminTokenFromBrowser();\n var fabricPeerIdForCollaborationContact = React.useMemo(function () {\n var fromPeer = peer && peer.id ? String(peer.id).trim() : \'\';\n var fromWebrtc = webrtcMeta && webrtcMeta.fabricPeerId ? String(webrtcMeta.fabricPeerId).trim() : \'\';\n var fp = fromPeer || fromWebrtc;\n if (!fp || isLikelyBip32ExtendedKey(fp)) return \'\';\n return fp;\n }, [peer, webrtcMeta]);\n var addPeerToCollaborationContacts = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var token, fp, bi, out, res, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n token = readHubAdminTokenFromBrowser();\n fp = fabricPeerIdForCollaborationContact;\n if (token) {\n _context2.n = 1;\n break;\n }\n setContactAddErr(\'Save the hub admin token to add contacts (Settings).\');\n return _context2.a(2);\n case 1:\n if (fp) {\n _context2.n = 2;\n break;\n }\n setContactAddErr(\'No Fabric peer id on this row yet.\');\n return _context2.a(2);\n case 2:\n bi = props.bridgeRef && props.bridgeRef.current;\n if (!(!bi || typeof bi.callHubJsonRpc !== \'function\')) {\n _context2.n = 3;\n break;\n }\n setContactAddErr(\'Bridge is not ready.\');\n return _context2.a(2);\n case 3:\n setContactAddBusy(true);\n setContactAddErr(null);\n setContactAddOk(null);\n _context2.p = 4;\n _context2.n = 5;\n return bi.callHubJsonRpc(\'AddCollaborationContact\', {\n adminToken: token,\n fabricPeerId: fp,\n label: peer && peer.nickname ? String(peer.nickname).trim().slice(0, 200) : \'\',\n source: \'peer_detail\'\n });\n case 5:\n out = _context2.v;\n if (!(out && out.error)) {\n _context2.n = 6;\n break;\n }\n setContactAddErr(String(out.error));\n return _context2.a(2);\n case 6:\n res = out && out.result;\n if (!(res && res.status === \'error\')) {\n _context2.n = 7;\n break;\n }\n setContactAddErr(res.message || \'Add contact failed\');\n return _context2.a(2);\n case 7:\n setContactAddOk(\'Added to Collaboration contacts.\');\n _context2.n = 9;\n break;\n case 8:\n _context2.p = 8;\n _t2 = _context2.v;\n setContactAddErr(_t2 && _t2.message ? _t2.message : String(_t2));\n case 9:\n _context2.p = 9;\n setContactAddBusy(false);\n return _context2.f(9);\n case 10:\n return _context2.a(2);\n }\n }, _callee2, null, [[4, 8, 9, 10]]);\n })), [fabricPeerIdForCollaborationContact, peer, props.bridgeRef]);\n return /*#__PURE__*/React.createElement("fabric-peer-detail", {\n "class": "fade-in"\n }, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n alignItems: \'flex-start\',\n justifyContent: \'space-between\',\n gap: \'0.65rem\',\n marginBottom: \'0.35rem\'\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.65rem\',\n flexWrap: \'wrap\',\n minWidth: 0,\n flex: \'1 1 16rem\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n size: "small",\n as: Link,\n to: "/peers",\n "aria-label": "Back to peers list"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Peers"), /*#__PURE__*/React.createElement("div", {\n style: {\n minWidth: 0\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n margin: 0,\n fontWeight: 600,\n lineHeight: 1.25\n }\n }, title), resolvedAddress && (host || port) ? /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.82rem\',\n color: \'#767676\',\n marginTop: \'0.15rem\'\n }\n }, host, port ? ":".concat(port) : \'\') : null, webrtcRegistration ? /*#__PURE__*/React.createElement("div", {\n style: {\n fontSize: \'0.78rem\',\n color: \'#555\',\n marginTop: \'0.25rem\',\n maxWidth: \'38rem\'\n }\n }, /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n basic: true,\n color: "blue"\n }, "WebRTC"), webrtcXpub ? /*#__PURE__*/React.createElement("span", {\n style: {\n marginLeft: \'0.35rem\'\n },\n title: webrtcXpub\n }, "xpub ", shortenPublicId(webrtcXpub, 14, 12)) : null, webrtcMeta && webrtcMeta.fabricPeerId ? /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.2rem\',\n wordBreak: \'break-all\'\n }\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, String(webrtcMeta.fabricPeerId))) : null) : null), xpubOnlyNoPeer ? /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "blue",\n title: "BIP32 extended public key (not a TCP peer socket)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "key"\n }), " Identity ref") : !hasPeerRow && webrtcRegistration ? /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "blue",\n title: "Registered for WebRTC signaling; TCP peer row not loaded yet"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "wifi"\n }), " WebRTC") : !hasPeerRow ? /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: "grey",\n title: "Waiting for ListPeers / GetPeer data from the hub"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "clock outline"\n }), " Resolving\\u2026") : /*#__PURE__*/React.createElement(Label, {\n size: "small",\n color: isConnected ? \'green\' : \'grey\',\n title: status\n }, isConnected ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Icon, {\n name: "check circle"\n }), " On") : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Icon, {\n name: "minus circle"\n }), " Off"))), !xpubOnlyNoPeer && /*#__PURE__*/React.createElement(Button.Group, {\n size: "small",\n basic: true,\n style: {\n flexShrink: 0\n }\n }, /*#__PURE__*/React.createElement(Button, {\n icon: true,\n title: "Refresh peer info",\n onClick: function onClick() {\n if (typeof props.onRefreshPeers === \'function\') props.onRefreshPeers();\n if (typeof props.onGetPeer === \'function\' && id) props.onGetPeer(id);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n })), hasPeerRow && id && !isConnected && typeof props.onAddPeer === \'function\' && peer && peer.address && /*#__PURE__*/React.createElement(Button, {\n icon: true,\n onClick: function onClick() {\n return props.onAddPeer({\n address: peer.address\n });\n },\n title: "Reconnect to ".concat(peer.address)\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "plug"\n })), hasPeerRow && id && isConnected && typeof props.onDisconnectPeer === \'function\' && /*#__PURE__*/React.createElement(Button, {\n icon: true,\n color: "red",\n onClick: function onClick() {\n return props.onDisconnectPeer(id);\n },\n title: "Disconnect ".concat(id)\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "remove"\n })), hasPeerRow && canRequestFabricResync && typeof props.onFabricPeerResync === \'function\' && /*#__PURE__*/React.createElement(Button, {\n icon: true,\n title: "Fabric chain resync (inventory + BitcoinBlock replay)",\n onClick: function onClick() {\n return props.onFabricPeerResync(tcpKeyForFabricResync);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sync"\n })), hasPeerRow && id && typeof props.onSetPeerNickname === \'function\' && /*#__PURE__*/React.createElement(Button, {\n icon: true,\n onClick: openNicknameModal,\n title: "Set nickname"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "tag"\n })), hubAdminCollaborationToken && fabricPeerIdForCollaborationContact && !xpubOnlyNoPeer ? /*#__PURE__*/React.createElement(Button, {\n icon: true,\n loading: contactAddBusy,\n disabled: contactAddBusy,\n title: "Add to contacts",\n "aria-label": "Add to contacts",\n onClick: function onClick() {\n return void addPeerToCollaborationContacts();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "address book"\n })) : null)), !xpubOnlyNoPeer && hasPeerRow && id && isConnected && (bridgeRef && bridgeRef.current && typeof bridgeRef.current.sendPeerInventoryRequest === \'function\' || adminTokenPresent) ? /*#__PURE__*/React.createElement(Accordion, {\n styled: true,\n fluid: true,\n style: {\n marginBottom: \'0.65rem\'\n }\n }, /*#__PURE__*/React.createElement(Accordion.Title, {\n active: peerOpsAccordionOpen,\n index: 0,\n onClick: function onClick() {\n return setPeerOpsAccordionOpen(!peerOpsAccordionOpen);\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "dropdown"\n }), "Inventory, HTLC, federation (advanced)"), /*#__PURE__*/React.createElement(Accordion.Content, {\n active: peerOpsAccordionOpen\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.5rem\',\n alignItems: \'center\'\n }\n }, bridgeRef && bridgeRef.current && typeof bridgeRef.current.sendPeerInventoryRequest === \'function\' ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Input, {\n size: "small",\n placeholder: "Relay: seller Fabric id (optional)",\n title: "When this connection is a relay, set the seller\\u2019s Fabric id so the hub forwards document-offer requests (FABRIC_DOCUMENT_OFFER)",\n value: inventoryRelayTarget,\n onChange: function onChange(e, _ref4) {\n var value = _ref4.value;\n return setInventoryRelayTarget(value);\n },\n style: {\n minWidth: \'12em\',\n maxWidth: \'18rem\',\n flex: \'1 1 12em\'\n }\n }), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n onClick: function onClick() {\n var t = (inventoryRelayTarget || \'\').trim();\n var opts = t ? {\n inventoryTarget: t\n } : {};\n sendInventoryRequest(\'documents\', opts);\n },\n title: "Request document inventory from this peer"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "list alternate outline"\n }), "Docs"), typeof bridgeRef.current.getHtlcRefundPublicKeyHex === \'function\' && bridgeRef.current.getHtlcRefundPublicKeyHex() ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n onClick: function onClick() {\n var refundPk = bridgeRef.current.getHtlcRefundPublicKeyHex();\n var t = (inventoryRelayTarget || \'\').trim();\n var opts = {\n buyerRefundPublicKey: refundPk\n };\n if (t) opts.inventoryTarget = t;\n sendInventoryRequest(\'documents\', opts);\n },\n title: "Inventory with P2TR HTLC on priced items (your identity pubkey = refund path)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), "Docs+HTLC") : null) : null, adminTokenPresent ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Input, {\n size: "small",\n placeholder: "Execution contract id (optional)",\n value: federationContractId,\n onChange: function onChange(e, _ref5) {\n var value = _ref5.value;\n return setFederationContractId(value);\n },\n style: {\n minWidth: \'10em\',\n maxWidth: \'16rem\',\n flex: \'1 1 10em\'\n },\n title: "Optional execution contract id included in the invite (see Contracts)"\n }), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n primary: true,\n loading: inviteBusy,\n disabled: inviteBusy,\n title: "Admin: send federation / execution-contract invite",\n onClick: launchInviteNoteModal\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users"\n }), "Invite")) : null))) : null, inviteError ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n onDismiss: function onDismiss() {\n return setInviteError(null);\n },\n style: {\n marginTop: \'0.5em\'\n }\n }, inviteError) : null, inviteOk ? /*#__PURE__*/React.createElement(Message, {\n success: true,\n size: "small",\n onDismiss: function onDismiss() {\n return setInviteOk(null);\n },\n style: {\n marginTop: \'0.5em\'\n }\n }, inviteOk) : null, contactAddErr ? /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n onDismiss: function onDismiss() {\n return setContactAddErr(null);\n },\n style: {\n marginTop: \'0.5em\'\n }\n }, contactAddErr) : null, contactAddOk ? /*#__PURE__*/React.createElement(Message, {\n success: true,\n size: "small",\n onDismiss: function onDismiss() {\n return setContactAddOk(null);\n },\n style: {\n marginTop: \'0.5em\'\n }\n }, contactAddOk, \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/collaboration"\n }, "Open Collaboration")) : null, /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Menu, {\n pointing: true,\n secondary: true,\n compact: true,\n style: {\n margin: \'0 0 0.65rem\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Menu.Item, {\n active: peerWorkspaceTab === 0,\n onClick: function onClick() {\n return setPeerWorkspaceTab(0);\n }\n }, "Overview"), /*#__PURE__*/React.createElement(Menu.Item, {\n active: peerWorkspaceTab === 1,\n onClick: function onClick() {\n return peer && setPeerWorkspaceTab(1);\n },\n disabled: !peer\n }, "Chat", peer && peerChats.length > 0 ? " (".concat(peerChats.length, ")") : \'\'), /*#__PURE__*/React.createElement(Menu.Item, {\n active: peerWorkspaceTab === 2,\n onClick: function onClick() {\n return peer && setPeerWorkspaceTab(2);\n },\n disabled: !peer\n }, "Inventory", peer && inventoryDocs.length > 0 ? " (".concat(inventoryDocs.length, ")") : \'\')), peerWorkspaceTab === 0 && /*#__PURE__*/React.createElement(Segment, {\n basic: true,\n style: {\n padding: 0,\n marginBottom: \'0.75rem\',\n boxShadow: \'none\',\n border: \'none\'\n }\n }, peer ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Table, {\n compact: true,\n definition: true,\n striped: true,\n size: "small",\n style: {\n marginBottom: \'0.65rem\'\n }\n }, /*#__PURE__*/React.createElement(Table.Body, null, function () {\n var sigHost = typeof window !== \'undefined\' ? window.location.host : \'\';\n var connStr = peerNativePeeringString(peer, sigHost);\n if (!connStr) return null;\n var signaling = peerPeeringEndpointIsSignaling(peer);\n var copyPeering = function copyPeering() {\n try {\n if (typeof navigator !== \'undefined\' && navigator.clipboard && navigator.clipboard.writeText) {\n navigator.clipboard.writeText(connStr);\n } else if (typeof document !== \'undefined\') {\n var ta = document.createElement(\'textarea\');\n ta.value = connStr;\n ta.style.position = \'fixed\';\n ta.style.opacity = \'0\';\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\'copy\');\n document.body.removeChild(ta);\n }\n setPeeringCopied(true);\n window.setTimeout(function () {\n return setPeeringCopied(false);\n }, 1500);\n } catch (e) {/* ignore */}\n };\n return /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, "Peering"), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.86em\'\n }\n }, connStr), \' \', /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n icon: true,\n type: "button",\n onClick: copyPeering,\n title: "Copy pubkey@host:port peering string for native Fabric dial",\n "aria-label": "Copy peering string",\n style: {\n marginLeft: \'0.35em\',\n verticalAlign: \'middle\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n }), peeringCopied ? \'Copied\' : \'Copy\'), /*#__PURE__*/React.createElement("div", {\n style: {\n color: \'#767676\',\n fontSize: \'0.82em\',\n marginTop: \'0.35em\'\n }\n }, signaling ? \'WebRTC signaling host (this site) — browsers will peer here; native nodes use Fabric TCP when advertised.\' : \'Native Fabric dial pin (pubkey@host:port).\')));\n }(), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, "Bech32"), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.86em\'\n }\n }, fabricPeerBech32Id(peer) || \'—\'))), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, "Address"), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.86em\'\n }\n }, resolvedAddress || \'—\'), host || port ? /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#767676\',\n fontSize: \'0.82em\',\n marginLeft: \'0.5em\'\n }\n }, "(", host, port ? ":".concat(port) : \'\', ")") : null)), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, "Fabric id"), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n wordBreak: \'break-all\',\n fontSize: \'0.86em\'\n }\n }, peer && peer.id || \'—\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, "Nickname"), /*#__PURE__*/React.createElement(Table.Cell, null, peer && peer.nickname || \'—\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, "Alias"), /*#__PURE__*/React.createElement(Table.Cell, null, peer && peer.alias || \'—\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, "Score"), /*#__PURE__*/React.createElement(Table.Cell, null, peer && peer.score != null ? String(peer.score) : \'—\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, "First seen"), /*#__PURE__*/React.createElement(Table.Cell, null, formatMaybeDate(peer && peer.firstSeen) || \'—\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, "Last seen"), /*#__PURE__*/React.createElement(Table.Cell, null, formatMaybeDate(peer && (peer.lastSeen || peer.lastMessage)) || \'—\')), peer && peer.connection ? /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, "Socket"), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n fontSize: \'0.86em\'\n }\n }, peer.connection.remoteAddress ? "".concat(peer.connection.remoteAddress, ":").concat(peer.connection.remotePort || \'\') : \'connected\', peer.connection.lastMessage ? " \\xB7 last msg ".concat(formatMaybeDate(peer.connection.lastMessage)) : \'\', peer.connection.failureCount != null ? " \\xB7 failures ".concat(peer.connection.failureCount) : \'\')) : null)), neighborDot ? /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n marginTop: \'0.35rem\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginBottom: \'0.35rem\'\n }\n }, "Gossip neighborhood"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.5rem\',\n fontSize: \'0.9em\',\n lineHeight: 1.45\n }\n }, "Fabric ids from ", /*#__PURE__*/React.createElement("code", null, "P2P_PEER_GOSSIP"), ". Use ", /*#__PURE__*/React.createElement("strong", null, "Inventory"), " tab \\u2192 Docs (or the advanced panel) for document-offer requests (", /*#__PURE__*/React.createElement("code", null, "FABRIC_DOCUMENT_OFFER"), ")."), /*#__PURE__*/React.createElement(GraphDocumentPreview, {\n dotSource: neighborDot,\n skipIdentityGate: true\n }), /*#__PURE__*/React.createElement(List, {\n relaxed: true,\n size: "small",\n style: {\n marginTop: \'0.5rem\'\n }\n }, gossipNeighbors.map(function (nid) {\n var n = String(nid || \'\').trim();\n if (!n) return null;\n return /*#__PURE__*/React.createElement(List.Item, {\n key: n\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(Link, {\n to: "/peers/".concat(encodeURIComponent(n)),\n title: "Open peer detail"\n }, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, n.length > 36 ? "".concat(n.slice(0, 14), "\\u2026").concat(n.slice(-10)) : n)), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n style: {\n marginLeft: \'0.35em\'\n },\n type: "button",\n title: "Set as inventory relay target",\n onClick: function onClick() {\n return setInventoryRelayTarget(n);\n }\n }, "Relay \\u2192")));\n })), /*#__PURE__*/React.createElement("details", {\n style: {\n marginTop: \'0.5rem\'\n }\n }, /*#__PURE__*/React.createElement("summary", {\n style: {\n cursor: \'pointer\',\n color: \'#555\',\n fontSize: \'0.88em\'\n }\n }, "DOT source"), /*#__PURE__*/React.createElement("pre", {\n style: {\n whiteSpace: \'pre-wrap\',\n fontSize: \'0.72rem\',\n background: \'#f5f5f5\',\n padding: \'0.45rem\',\n borderRadius: 4\n }\n }, neighborDot))) : null) : routeLooksLikeXpub ? /*#__PURE__*/React.createElement(Message, {\n info: true,\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Extended public key (BIP32)"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, "This URL uses an ", /*#__PURE__*/React.createElement("code", null, "xpub"), "/", /*#__PURE__*/React.createElement("code", null, "tpub"), "-style identifier \\u2014 often the display form of an activity sender \\u2014 not a Fabric TCP peer. Peer chat and inventory use a connected node (", /*#__PURE__*/React.createElement("code", null, "host:port"), " or Fabric id from ", /*#__PURE__*/React.createElement(Link, {\n to: "/peers"\n }, "Peers"), ").")) : /*#__PURE__*/React.createElement(Segment, {\n placeholder: true,\n basic: true,\n style: {\n padding: \'1rem\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Waiting for peer record\\u2026"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n margin: \'0.35em 0 0.65em\',\n fontSize: \'0.92em\'\n }\n }, "No matching entry in the hub snapshot yet. Use ", /*#__PURE__*/React.createElement("strong", null, "Refresh"), ", or open", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/peers"\n }, "Peers"), " and add ", /*#__PURE__*/React.createElement("code", null, "host:port"), ". After ", /*#__PURE__*/React.createElement("code", null, "GetPeer"), " returns, details appear here."), /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: "centered",\n size: "small"\n }), peerResolveSlow ? /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n marginTop: \'0.85em\',\n textAlign: \'left\'\n },\n size: "small"\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Slow to resolve"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.25em 0 0\',\n fontSize: \'0.9em\'\n }\n }, "Check that the Bridge is connected. Add the peer from the list page, then reopen this link.")) : null)), peerWorkspaceTab === 1 && peer && /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: 0\n }\n }, "Chat"), !hasUnlockedIdentity && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Identity locked"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n lineHeight: 1.45\n }\n }, "Unlock your identity (local signing material) to send Fabric peer chat \\u2014 top-bar ", /*#__PURE__*/React.createElement("strong", null, "Locked"), " / identity menu, or", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), " \\u2192 ", /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), ". Received messages still appear here.")), hasUnlockedIdentity && !isConnected && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'0.75em\'\n }\n }, "Peer is offline \\u2014 messages are ", /*#__PURE__*/React.createElement("strong", null, "queued"), " and sent when the connection is up (same hub ", /*#__PURE__*/React.createElement("code", null, "SendPeerMessage"), " path)."), peerChats.length > 0 ? /*#__PURE__*/React.createElement(List, {\n divided: true,\n size: "small"\n }, peerChats.map(function (chat, index) {\n var _props$bridgeRef, _props$bridge, _chat$actor;\n var created = chat.object && chat.object.created || Date.now();\n var bridgeInstance = ((_props$bridgeRef = props.bridgeRef) === null || _props$bridgeRef === void 0 ? void 0 : _props$bridgeRef.current) || ((_props$bridge = props.bridge) === null || _props$bridge === void 0 ? void 0 : _props$bridge.current);\n var rawActor = chat.actor && (chat.actor.username || chat.actor.id) || \'unknown\';\n var actor = bridgeInstance && typeof bridgeInstance.getPeerDisplayName === \'function\' && (_chat$actor = chat.actor) !== null && _chat$actor !== void 0 && _chat$actor.id ? bridgeInstance.getPeerDisplayName(chat.actor.id) : rawActor;\n var content = chat.object && (chat.object.content || chat.object.body || chat.object.text) || \'\';\n var isPending = chat.status === \'pending\';\n var isQueued = chat.status === \'queued\';\n var style = {\n opacity: isPending || isQueued ? 0.7 : 1,\n color: isQueued ? \'#888\' : undefined\n };\n return /*#__PURE__*/React.createElement(List.Item, {\n key: "".concat(created, "-").concat(index)\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, /*#__PURE__*/React.createElement("span", {\n style: style\n }, "@", actor, isPending && \' (sending…)\', isQueued && /*#__PURE__*/React.createElement(Icon, {\n name: "exclamation circle",\n color: "grey",\n style: {\n marginLeft: \'0.35em\'\n },\n title: "This message will be sent when the peer is online."\n }))), /*#__PURE__*/React.createElement(List.Description, {\n style: style\n }, content)));\n })) : /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No chat messages yet for this peer."), chatDest && typeof props.onSendPeerMessage === \'function\' && /*#__PURE__*/React.createElement(ChatInput, {\n value: outgoingText,\n onChange: setOutgoingText,\n onSubmit: function onSubmit(text) {\n if (canSendPeerChat && typeof props.onSendPeerMessage === \'function\') {\n props.onSendPeerMessage(chatDest, text);\n setOutgoingText(\'\');\n }\n },\n placeholder: hasUnlockedIdentity ? \'Type a message…\' : \'Unlock identity to send…\',\n title: "Send to ".concat(chatDest, " via hub (P2P_CHAT_MESSAGE / SendPeerMessage)"),\n disabled: !canSendPeerChat\n })), peerWorkspaceTab === 2 && peer && /*#__PURE__*/React.createElement(Segment, {\n style: {\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: 0\n }\n }, "Publisher inventory"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginBottom: \'0.65em\',\n fontSize: \'0.92em\',\n lineHeight: 1.45\n }\n }, "Documents offered by this ", /*#__PURE__*/React.createElement("strong", null, "publisher"), id ? /*#__PURE__*/React.createElement(React.Fragment, null, " (Fabric peer ", /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.9em\'\n }\n }, id.length > 24 ? "".concat(id.slice(0, 12), "\\u2026").concat(id.slice(-8)) : id), ")") : \'\', ".", /*#__PURE__*/React.createElement("strong", null, " Author"), " is the creator\'s document id when known (lineage). With the peer ", /*#__PURE__*/React.createElement("strong", null, "connected"), ", use the advanced panel ", /*#__PURE__*/React.createElement("strong", null, "Docs"), " button to send a document-offer request; responses are merged under this peer\'s Fabric id and TCP address keys."), inventoryRequestMeta && /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.85em\',\n color: inventoryRequestMeta.status === \'error\' ? \'#9f3a38\' : inventoryRequestMeta.status === \'accepted\' ? \'#276749\' : \'#666\',\n marginBottom: \'0.65em\'\n }\n }, "Last inventory request: ", formatMaybeDate(inventoryRequestMeta.at), inventoryRequestMeta.kind ? " (".concat(inventoryRequestMeta.kind, ")") : \'\', inventoryRequestMeta.requestVia === \'http\' ? \' · HTTP fallback\' : \'\', inventoryRequestMeta.requestVia === \'ws\' ? \' · websocket\' : \'\', inventoryRequestMeta.hubMessage ? " \\u2014 ".concat(inventoryRequestMeta.hubMessage) : inventoryRequestMeta.status === \'accepted\' ? " \\u2014 hub accepted and sent the peer request." : " \\u2014 ".concat(inventoryDocs.length > 0 ? "".concat(inventoryDocs.length, " item(s) in client state.") : \'no items yet (wait for response or check relay target).\')), /*#__PURE__*/React.createElement("div", {\n style: {\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Checkbox, {\n toggle: true,\n label: "Debug: show raw inventory JSON",\n checked: inventoryDebugOpen,\n onChange: function onChange(_e, data) {\n return setInventoryDebugOpen(!!(data && data.checked));\n }\n })), inventoryDebugOpen && /*#__PURE__*/React.createElement(Segment, {\n secondary: true,\n style: {\n marginBottom: \'0.75em\',\n overflow: \'auto\',\n maxHeight: \'40vh\'\n }\n }, /*#__PURE__*/React.createElement("pre", {\n style: {\n margin: 0,\n fontSize: \'0.75rem\',\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-all\'\n }\n }, JSON.stringify(inventoryDocs, null, 2))), htlcConfirmFeedback && /*#__PURE__*/React.createElement(Message, {\n positive: htlcConfirmFeedback.status === \'success\',\n negative: htlcConfirmFeedback.status === \'error\',\n onDismiss: function onDismiss() {\n return setHtlcConfirmFeedback(null);\n },\n style: {\n marginBottom: \'1em\',\n textAlign: \'left\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, htlcConfirmFeedback.status === \'success\' ? \'HTLC verified — document transfer\' : \'HTLC confirmation\'), (htlcConfirmFeedback.message || htlcConfirmFeedback.funded) && /*#__PURE__*/React.createElement("p", null, htlcConfirmFeedback.message || (htlcConfirmFeedback.funded ? \'Funding accepted; fix connection or retry if needed.\' : \'\')), htlcConfirmFeedback.documentId && /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.9em\'\n }\n }, "Document ", /*#__PURE__*/React.createElement("code", null, htlcConfirmFeedback.documentId)), htlcConfirmFeedback.txid && /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'0.9em\'\n }\n }, "Txid", \' \', uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(String(htlcConfirmFeedback.txid).trim()))\n }, /*#__PURE__*/React.createElement("code", null, htlcConfirmFeedback.txid)) : /*#__PURE__*/React.createElement("code", {\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility for the tx viewer"\n }, htlcConfirmFeedback.txid), /*#__PURE__*/React.createElement("span", {\n style: {\n color: \'#666\'\n }\n }, " \\u2014 mempool until confirmed on-chain"))), inventoryDocs.length > 0 ? /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true,\n size: "small"\n }, inventoryDocs.map(function (doc, index) {\n return /*#__PURE__*/React.createElement(List.Item, {\n key: doc && doc.id || index\n }, /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, doc && doc.name || doc && doc.id || \'Document\'), /*#__PURE__*/React.createElement(List.Description, {\n style: {\n color: \'#666\'\n }\n }, doc && doc.id && /*#__PURE__*/React.createElement("span", null, "ID: ", /*#__PURE__*/React.createElement("code", null, doc.id)), doc && (doc.lineage || doc.id) && /*#__PURE__*/React.createElement(React.Fragment, null, " \\u2014 author ", /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.9em\'\n }\n }, String(doc.lineage || doc.id).length > 20 ? "".concat(String(doc.lineage || doc.id).slice(0, 10), "\\u2026").concat(String(doc.lineage || doc.id).slice(-6)) : String(doc.lineage || doc.id))), doc && doc.size != null && /*#__PURE__*/React.createElement(React.Fragment, null, " \\u2014 ", doc.size, " bytes"), doc && doc.published && /*#__PURE__*/React.createElement(React.Fragment, null, " \\u2014 published"), doc && doc.purchasePriceSats != null && /*#__PURE__*/React.createElement(React.Fragment, null, " \\u2014 ", /*#__PURE__*/React.createElement("strong", null, formatSatsDisplay(doc.purchasePriceSats), " sats"))), doc && doc.htlc && doc.htlc.settlementId && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.75em\',\n fontSize: \'0.85em\',\n textAlign: \'left\'\n }\n }, /*#__PURE__*/React.createElement(Label, {\n color: "orange",\n size: "small"\n }, "P2TR HTLC"), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, formatSatsDisplay(doc.htlc.amountSats || 0), " sats"), doc.htlc.amountBtc && /*#__PURE__*/React.createElement(React.Fragment, null, " (", /*#__PURE__*/React.createElement("code", null, doc.htlc.amountBtc), " BTC)"), \' \', "\\u2192 ", /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, doc.htlc.paymentAddress)), doc.htlc.bitcoinUri && /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\',\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.75em\',\n alignItems: \'flex-start\'\n }\n }, htlcFundingQrBySettlement[doc.htlc.settlementId] && /*#__PURE__*/React.createElement("img", {\n src: htlcFundingQrBySettlement[doc.htlc.settlementId],\n alt: "BIP21 funding QR",\n style: {\n borderRadius: 4,\n border: \'1px solid #ddd\'\n }\n }), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n flexDirection: \'column\',\n gap: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n onClick: function onClick() {\n return copyHtlcFunding(doc.htlc.bitcoinUri, "".concat(doc.htlc.settlementId, ":uri"));\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n }), " ", htlcFundingCopied === "".concat(doc.htlc.settlementId, ":uri") ? \'Copied\' : \'Copy BIP21 URI\'), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n onClick: function onClick() {\n return copyHtlcFunding(doc.htlc.paymentAddress, "".concat(doc.htlc.settlementId, ":addr"));\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "copy"\n }), " ", htlcFundingCopied === "".concat(doc.htlc.settlementId, ":addr") ? \'Copied\' : \'Copy address\'), adminTokenPresent && doc.htlc.bitcoinUri && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {\n as: "a",\n size: "mini",\n primary: true,\n href: String(doc.htlc.bitcoinUri).trim(),\n title: "Open BIP21 URI in your default wallet"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin"\n }), " Pay Now"), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n color: "orange",\n loading: bridgePaySettlementId === doc.htlc.settlementId,\n disabled: bridgePaySettlementId === doc.htlc.settlementId,\n onClick: /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var token, h, upstream, res, txid, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n token = getAdminPeerToolsTokenFromProps(props);\n h = doc.htlc;\n if (!(!token || !h || !h.paymentAddress)) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n setBridgePaySettlementId(h.settlementId);\n setHtlcConfirmFeedback(null);\n _context3.p = 2;\n upstream = loadUpstreamSettings();\n _context3.n = 3;\n return sendBridgePayment(upstream, {\n to: h.paymentAddress,\n amountSats: Math.round(Number(h.amountSats || 0)),\n memo: "HTLC ".concat(h.settlementId)\n }, token);\n case 3:\n res = _context3.v;\n txid = res && res.payment && res.payment.txid ? String(res.payment.txid) : \'\';\n if (txid) {\n setHtlcTxids(function (prev) {\n return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, h.settlementId, txid));\n });\n setHtlcConfirmFeedback({\n status: \'success\',\n message: "Hub wallet sent transaction. Txid filled below \\u2014 use Confirm when ready.",\n txid: txid\n });\n } else {\n setHtlcConfirmFeedback({\n status: \'error\',\n message: res && res.message ? res.message : \'No txid returned from Hub wallet.\'\n });\n }\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t3 = _context3.v;\n setHtlcConfirmFeedback({\n status: \'error\',\n message: _t3 && _t3.message ? _t3.message : String(_t3)\n });\n case 5:\n _context3.p = 5;\n setBridgePaySettlementId(null);\n return _context3.f(5);\n case 6:\n return _context3.a(2);\n }\n }, _callee3, null, [[2, 4, 5, 6]]);\n })),\n title: "Spend from this Hub bitcoind wallet (requires admin token)"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "server"\n }), " Pay from Bridge")))), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.35em\',\n color: \'#666\'\n }\n }, "Hash ", /*#__PURE__*/React.createElement("code", null, String(doc.htlc.paymentHashHex || \'\').slice(0, 16), "\\u2026"), \' · \', "refund CLTV height ", /*#__PURE__*/React.createElement("code", null, doc.htlc.refundLockHeight)), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.5em\',\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\',\n alignItems: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Input, {\n placeholder: "Funding txid",\n size: "small",\n style: {\n flex: \'1 1 10em\',\n minWidth: \'12em\'\n },\n value: htlcTxids[doc.htlc.settlementId] || \'\',\n onChange: function onChange(e, _ref7) {\n var value = _ref7.value;\n return setHtlcTxids(function (prev) {\n return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, doc.htlc.settlementId, value));\n });\n }\n }), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n primary: true,\n disabled: !(bridgeRef && bridgeRef.current && typeof bridgeRef.current.sendConfirmInventoryHtlcPayment === \'function\') || !(htlcTxids[doc.htlc.settlementId] || \'\').trim(),\n onClick: function onClick() {\n var tx = (htlcTxids[doc.htlc.settlementId] || \'\').trim();\n if (bridgeRef && bridgeRef.current && tx) {\n bridgeRef.current.sendConfirmInventoryHtlcPayment(doc.htlc.settlementId, tx);\n }\n }\n }, "Confirm HTLC & receive"), /^[a-fA-F0-9]{64}$/.test(String(htlcTxids[doc.htlc.settlementId] || \'\').trim()) && (uf.bitcoinExplorer ? /*#__PURE__*/React.createElement(Link, {\n style: {\n fontSize: \'0.85em\',\n alignSelf: \'center\'\n },\n to: "/services/bitcoin/transactions/".concat(encodeURIComponent(String(htlcTxids[doc.htlc.settlementId]).trim()))\n }, "View funding tx") : /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n },\n title: "Enable Bitcoin \\u2014 Block & transaction detail routes in Admin \\u2192 Feature visibility for the tx viewer"\n }, String(htlcTxids[doc.htlc.settlementId]).trim()))))));\n })) : /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No remote document inventory yet. Use ", /*#__PURE__*/React.createElement("strong", null, "Docs"), " (when connected) to send a document-offer request.")), /*#__PURE__*/React.createElement(Modal, {\n open: nickModalOpen,\n size: "tiny",\n onClose: function onClose() {\n return setNickModalOpen(false);\n },\n closeOnDimmerClick: true,\n closeOnEscape: true\n }, /*#__PURE__*/React.createElement(Modal.Header, null, "Set peer nickname"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement(Form, {\n onSubmit: function onSubmit(e) {\n e.preventDefault();\n submitNickname();\n }\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "peer-nickname-input"\n }, "Nickname (node-local)"), /*#__PURE__*/React.createElement(Input, {\n id: "peer-nickname-input",\n value: nickDraft,\n onChange: function onChange(e) {\n return setNickDraft(e.target.value);\n },\n placeholder: "Nickname for ".concat(id),\n maxLength: 128\n })))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: function onClick() {\n return setNickModalOpen(false);\n }\n }, "Cancel"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n onClick: submitNickname\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "tag"\n }), "Save nickname"))), /*#__PURE__*/React.createElement(Modal, {\n open: inviteNoteModalOpen,\n size: "small",\n onClose: function onClose() {\n return setInviteNoteModalOpen(false);\n },\n closeOnDimmerClick: true,\n closeOnEscape: true\n }, /*#__PURE__*/React.createElement(Modal.Header, null, "Invite peer to contract"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement(Form, {\n onSubmit: (/*#__PURE__*/function () {\n var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(e) {\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n e.preventDefault();\n _context4.n = 1;\n return submitInviteToContract();\n case 1:\n return _context4.a(2);\n }\n }, _callee4);\n }));\n return function (_x3) {\n return _ref8.apply(this, arguments);\n };\n }())\n }, /*#__PURE__*/React.createElement(Form.Field, null, /*#__PURE__*/React.createElement("label", {\n htmlFor: "peer-invite-note-input"\n }, "Optional message for invitee"), /*#__PURE__*/React.createElement(Form.TextArea, {\n id: "peer-invite-note-input",\n value: inviteNoteDraft,\n onChange: function onChange(e) {\n return setInviteNoteDraft(e.target.value);\n },\n placeholder: "Optional note...",\n rows: 4,\n maxLength: 500\n })))), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: function onClick() {\n return setInviteNoteModalOpen(false);\n }\n }, "Cancel"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n loading: inviteBusy,\n disabled: inviteBusy,\n onClick: submitInviteToContract\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "users"\n }), "Send invite")))));\n}\nmodule.exports = PeerDetail;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TUFBTTtJQUFDb1MsSUFBSSxFQUFDLFFBQVE7SUFBQytJLE9BQU87SUFBQ2QsT0FBTyxFQUFFelEsVUFBVztJQUFDMFEsUUFBUSxFQUFFMVEsVUFBVztJQUFDcVEsT0FBTyxFQUFFakQ7RUFBdUIsZ0JBQ3ZHelgsS0FBQSxDQUFBaVosYUFBQSxDQUFDblksSUFBSTtJQUFDOUMsSUFBSSxFQUFDO0VBQU8sQ0FBRSxDQUFDLGVBRWYsQ0FDSyxDQUNWLENBQ0EsQ0FDUyxDQUFDO0FBRXpCO0FBRUF5a0IsTUFBTSxDQUFDQyxPQUFPLEdBQUdwYyxVQUFVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL1BlZXJWaWV3LmpzP2I1MjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBEZXBlbmRlbmNpZXNcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IFFSQ29kZSA9IHJlcXVpcmUoJ3FyY29kZScpO1xuY29uc3Qge1xuICBMaW5rLFxuICB1c2VOYXZpZ2F0ZSxcbiAgdXNlUGFyYW1zXG59ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuXG5jb25zdCB7XG4gIEFjY29yZGlvbixcbiAgQnV0dG9uLFxuICBDaGVja2JveCxcbiAgRGl2aWRlcixcbiAgRm9ybSxcbiAgSGVhZGVyLFxuICBJY29uLFxuICBJbnB1dCxcbiAgTGFiZWwsXG4gIExpc3QsXG4gIE1lc3NhZ2UsXG4gIE1vZGFsLFxuICBTZWdtZW50LFxuICBMb2FkZXIsXG4gIE1lbnUsXG4gIFRhYmxlXG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcblxuY29uc3QgQ2hhdElucHV0ID0gcmVxdWlyZSgnLi9DaGF0SW5wdXQnKTtcbmNvbnN0IHsgZm9ybWF0U2F0c0Rpc3BsYXkgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9mb3JtYXRTYXRzJyk7XG5jb25zdCB7IGxvYWRVcHN0cmVhbVNldHRpbmdzLCBzZW5kQnJpZGdlUGF5bWVudCB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2JpdGNvaW5DbGllbnQnKTtcbmNvbnN0IHsgcGVlck5laWdoYm9yaG9vZFRvRG90IH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvcGVlclRvcG9sb2d5RG90Jyk7XG5jb25zdCBHcmFwaERvY3VtZW50UHJldmlldyA9IHJlcXVpcmUoJy4vR3JhcGhEb2N1bWVudFByZXZpZXcnKTtcbmNvbnN0IHsgaXNIdWJOZXR3b3JrU3RhdHVzU2hhcGUgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9odWJOZXR3b3JrU3RhdHVzJyk7XG5jb25zdCB7IGlzTGlrZWx5QmlwMzJFeHRlbmRlZEtleSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2lzTGlrZWx5QmlwMzJFeHRlbmRlZEtleScpO1xuY29uc3Qge1xuICBzaG9ydGVuUHVibGljSWQsXG4gIGZhYnJpY1BlZXJCZWNoMzJJZCxcbiAgcGVlck5hdGl2ZVBlZXJpbmdTdHJpbmcsXG4gIHBlZXJQZWVyaW5nRW5kcG9pbnRJc1NpZ25hbGluZ1xufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9wZWVySWRlbnRpdHknKTtcbmNvbnN0IHsgcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YkFkbWluVG9rZW5Ccm93c2VyJyk7XG5jb25zdCB7XG4gIGxvYWRIdWJVaUZlYXR1cmVGbGFncyxcbiAgc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3Ncbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViVWlGZWF0dXJlRmxhZ3MnKTtcblxuLyoqIEh1YiBhZG1pbiB0b2tlbiBmb3Igb3BlcmF0b3Itb25seSBjb250cm9sczsgb25seSBwYXNzZWQgZnJvbSBgL3NldHRpbmdzL2FkbWluL3BlZXJzLzppZGAuICovXG5mdW5jdGlvbiBnZXRBZG1pblBlZXJUb29sc1Rva2VuRnJvbVByb3BzIChwcm9wcykge1xuICBjb25zdCB0ID0gcHJvcHMgJiYgcHJvcHMuYWRtaW5QZWVyVG9vbHNUb2tlbjtcbiAgcmV0dXJuIHQgJiYgU3RyaW5nKHQpLnRyaW0oKSA/IFN0cmluZyh0KS50cmltKCkgOiAnJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHViSnNvblJwYyAobWV0aG9kLCBwYXJhbXMpIHtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7dHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubG9jYXRpb24ub3JpZ2luIDogJyd9L3NlcnZpY2VzL3JwY2AsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBqc29ucnBjOiAnMi4wJywgaWQ6IDEsIG1ldGhvZCwgcGFyYW1zIH0pXG4gIH0pO1xuICBsZXQgYm9keSA9IHt9O1xuICB0cnkge1xuICAgIGJvZHkgPSBhd2FpdCByZXMuanNvbigpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdIdWIgcmV0dXJuZWQgbm9uLUpTT04nKTtcbiAgfVxuICBpZiAoIXJlcy5vayB8fCBib2R5LmVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKChib2R5LmVycm9yICYmIGJvZHkuZXJyb3IubWVzc2FnZSkgfHwgYEhUVFAgJHtyZXMuc3RhdHVzfWApO1xuICB9XG4gIHJldHVybiBib2R5LnJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNOZXR3b3JrU3RhdHVzIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAob2JqLm5ldHdvcmsgfHwgQXJyYXkuaXNBcnJheShvYmoucGVlcnMpKSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1heWJlRGF0ZSAodmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKGQuZ2V0VGltZSgpKSkgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgcmV0dXJuIGQudG9Mb2NhbGVTdHJpbmcoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG59XG5cbi8qKiBSZXNvbHZlIHBlZXIgcm93IGZyb20gZ2xvYmFsU3RhdGUgd2hldGhlciB0aGUgcm91dGUgaWQgaXMgRmFicmljIHB1YmtleSBvciBUQ1AgYWRkcmVzcy4gKi9cbmZ1bmN0aW9uIGZpbmRQZWVySW5HbG9iYWxQZWVycyAocGVlcnNNYXAsIHJvdXRlSWQpIHtcbiAgaWYgKCFyb3V0ZUlkIHx8ICFwZWVyc01hcCB8fCB0eXBlb2YgcGVlcnNNYXAgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgaWYgKHBlZXJzTWFwW3JvdXRlSWRdKSByZXR1cm4gcGVlcnNNYXBbcm91dGVJZF07XG4gIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhwZWVyc01hcCkpIHtcbiAgICBjb25zdCBwID0gcGVlcnNNYXBba107XG4gICAgaWYgKHAgJiYgKHAuaWQgPT09IHJvdXRlSWQgfHwgcC5hZGRyZXNzID09PSByb3V0ZUlkKSkgcmV0dXJuIHA7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBNZXJnZSBhY2N1bXVsYXRlZCBnbG9iYWxTdGF0ZSBwZWVyIHdpdGggUmVhY3QgZGV0YWlsOyBMaXN0UGVlcnMgcm93IHdpbnMgZm9yIGxpdmUgY29ubmVjdGlvbiBmaWVsZHMuICovXG5mdW5jdGlvbiBtZXJnZVBlZXJTb3VyY2VzIChnc1BlZXIsIGRldGFpbFBlZXIsIGxpc3RQZWVyKSB7XG4gIGNvbnN0IGEgPSBnc1BlZXIgJiYgdHlwZW9mIGdzUGVlciA9PT0gJ29iamVjdCcgPyBnc1BlZXIgOiB7fTtcbiAgY29uc3QgYiA9IGRldGFpbFBlZXIgJiYgdHlwZW9mIGRldGFpbFBlZXIgPT09ICdvYmplY3QnID8gZGV0YWlsUGVlciA6IHt9O1xuICBjb25zdCBjID0gbGlzdFBlZXIgJiYgdHlwZW9mIGxpc3RQZWVyID09PSAnb2JqZWN0JyA/IGxpc3RQZWVyIDoge307XG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4uYSwgLi4uYiwgLi4uYyB9O1xuICBpZiAoIShtZXJnZWQuaWQgfHwgbWVyZ2VkLmFkZHJlc3MpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZnVuY3Rpb24gUGVlckRldGFpbCAocHJvcHMpIHtcbiAgY29uc3QgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuICBjb25zdCBwYXJhbXMgPSB1c2VQYXJhbXMoKTtcbiAgY29uc3QgZW5jb2RlZCA9IHBhcmFtcyAmJiBwYXJhbXMuaWQgPyBwYXJhbXMuaWQgOiAnJztcbiAgY29uc3QgaWQgPSBlbmNvZGVkID8gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZWQpIDogJyc7XG4gIGNvbnN0IFtkZXRhaWwsIHNldERldGFpbF0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3BlZXJDaGF0cywgc2V0UGVlckNoYXRzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgY29uc3QgW291dGdvaW5nVGV4dCwgc2V0T3V0Z29pbmdUZXh0XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2ludmVudG9yeURvY3MsIHNldEludmVudG9yeURvY3NdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICBjb25zdCBbaHRsY1R4aWRzLCBzZXRIdGxjVHhpZHNdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICBjb25zdCBbaHRsY0NvbmZpcm1GZWVkYmFjaywgc2V0SHRsY0NvbmZpcm1GZWVkYmFja10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2h0bGNGdW5kaW5nUXJCeVNldHRsZW1lbnQsIHNldEh0bGNGdW5kaW5nUXJCeVNldHRsZW1lbnRdID0gUmVhY3QudXNlU3RhdGUoe30pO1xuICBjb25zdCBbaHRsY0Z1bmRpbmdDb3BpZWQsIHNldEh0bGNGdW5kaW5nQ29waWVkXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbaW52ZW50b3J5UmVsYXlUYXJnZXQsIHNldEludmVudG9yeVJlbGF5VGFyZ2V0XSA9IFJlYWN0LnVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2JyaWRnZVBheVNldHRsZW1lbnRJZCwgc2V0QnJpZGdlUGF5U2V0dGxlbWVudElkXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbaW52ZW50b3J5RGVidWdPcGVuLCBzZXRJbnZlbnRvcnlEZWJ1Z09wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaW52ZW50b3J5UmVxdWVzdE1ldGEsIHNldEludmVudG9yeVJlcXVlc3RNZXRhXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbcGVlclRvcG9sb2d5VGljaywgc2V0UGVlclRvcG9sb2d5VGlja10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2ZlZGVyYXRpb25Db250cmFjdElkLCBzZXRGZWRlcmF0aW9uQ29udHJhY3RJZF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtpbnZpdGVCdXN5LCBzZXRJbnZpdGVCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2ludml0ZUVycm9yLCBzZXRJbnZpdGVFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2ludml0ZU9rLCBzZXRJbnZpdGVPa10gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW25pY2tNb2RhbE9wZW4sIHNldE5pY2tNb2RhbE9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbmlja0RyYWZ0LCBzZXROaWNrRHJhZnRdID0gUmVhY3QudXNlU3RhdGUoJycpO1xuICBjb25zdCBbaW52aXRlTm90ZU1vZGFsT3Blbiwgc2V0SW52aXRlTm90ZU1vZGFsT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpbnZpdGVOb3RlRHJhZnQsIHNldEludml0ZU5vdGVEcmFmdF0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtwZWVyT3BzQWNjb3JkaW9uT3Blbiwgc2V0UGVlck9wc0FjY29yZGlvbk9wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcGVlcldvcmtzcGFjZVRhYiwgc2V0UGVlcldvcmtzcGFjZVRhYl0gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgY29uc3QgW2NvbnRhY3RBZGRCdXN5LCBzZXRDb250YWN0QWRkQnVzeV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtjb250YWN0QWRkRXJyLCBzZXRDb250YWN0QWRkRXJyXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbY29udGFjdEFkZE9rLCBzZXRDb250YWN0QWRkT2tdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtwZWVyaW5nQ29waWVkLCBzZXRQZWVyaW5nQ29waWVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBbaHViVWlUaWNrLCBzZXRIdWJVaVRpY2tdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncygoKSA9PiBzZXRIdWJVaVRpY2soKHQpID0+IHQgKyAxKSksIFtdKTtcbiAgdm9pZCBodWJVaVRpY2s7XG4gIGNvbnN0IFtuZXR3b3JrU3RhdHVzVGljaywgc2V0TmV0d29ya1N0YXR1c1RpY2tdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25OcyA9ICgpID0+IHNldE5ldHdvcmtTdGF0dXNUaWNrKCh0KSA9PiB0ICsgMSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ25ldHdvcmtTdGF0dXNVcGRhdGUnLCBvbk5zKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ25ldHdvcmtTdGF0dXNVcGRhdGUnLCBvbk5zKTtcbiAgfSwgW10pO1xuICB2b2lkIG5ldHdvcmtTdGF0dXNUaWNrO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uSW52ID0gKGV2KSA9PiB7XG4gICAgICBjb25zdCBkID0gZXYgJiYgZXYuZGV0YWlsO1xuICAgICAgaWYgKCFkIHx8IHR5cGVvZiBkICE9PSAnb2JqZWN0JykgcmV0dXJuO1xuICAgICAgaWYgKGQuc3RhdHVzID09PSAnZXJyb3InICYmIGQubWVzc2FnZSkge1xuICAgICAgICBzZXRJbnZlbnRvcnlSZXF1ZXN0TWV0YSgobSkgPT4gKFxuICAgICAgICAgIG0gPyB7IC4uLm0sIHN0YXR1czogJ2Vycm9yJywgaHViTWVzc2FnZTogU3RyaW5nKGQubWVzc2FnZSkgfSA6IG1cbiAgICAgICAgKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIGNvbnN0IHZpYVRhZyA9IChkLnZpYSAhPT0gdW5kZWZpbmVkICYmIGQudmlhICE9PSBudWxsICYmIFN0cmluZyhkLnZpYSkudHJpbSgpICE9PSAnJylcbiAgICAgICAgICA/IFN0cmluZyhkLnZpYSkudHJpbSgpXG4gICAgICAgICAgOiAnJztcbiAgICAgICAgc2V0SW52ZW50b3J5UmVxdWVzdE1ldGEoKG0pID0+IChcbiAgICAgICAgICBtID8ge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIHN0YXR1czogJ2FjY2VwdGVkJyxcbiAgICAgICAgICAgIGh1Yk1lc3NhZ2U6ICcnLFxuICAgICAgICAgICAgcmVxdWVzdFZpYTogdmlhVGFnXG4gICAgICAgICAgfSA6IG1cbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmYWJyaWM6cGVlckludmVudG9yeVJlcXVlc3RSZXN1bHQnLCBvbkludik7XG4gICAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZhYnJpYzpwZWVySW52ZW50b3J5UmVxdWVzdFJlc3VsdCcsIG9uSW52KTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW10pO1xuICBjb25zdCB1ZiA9IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuXG4gIGNvbnN0IGJyaWRnZSA9IHByb3BzLmJyaWRnZTtcbiAgY29uc3QgYnJpZGdlUmVmID0gcHJvcHMuYnJpZGdlUmVmO1xuICBjb25zdCBjdXJyZW50ID0gKGJyaWRnZVJlZiAmJiBicmlkZ2VSZWYuY3VycmVudCkgfHwgKGJyaWRnZSAmJiBicmlkZ2UuY3VycmVudCk7XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IGN1cnJlbnQgJiYgY3VycmVudC5uZXR3b3JrU3RhdHVzO1xuICBjb25zdCBmYWxsYmFjayA9IGN1cnJlbnQgJiYgY3VycmVudC5sYXN0TmV0d29ya1N0YXR1cztcbiAgY29uc3QgbmV0d29ya1N0YXR1cyA9IGlzSHViTmV0d29ya1N0YXR1c1NoYXBlKGNhbmRpZGF0ZSlcbiAgICA/IGNhbmRpZGF0ZVxuICAgIDogKGlzSHViTmV0d29ya1N0YXR1c1NoYXBlKGZhbGxiYWNrKSA/IGZhbGxiYWNrIDogbnVsbCk7XG4gIGNvbnN0IHBlZXJzID0gQXJyYXkuaXNBcnJheShuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMucGVlcnMpID8gbmV0d29ya1N0YXR1cy5wZWVycyA6IFtdO1xuICBjb25zdCB3ZWJydGNGcm9tSHViID0gQXJyYXkuaXNBcnJheShuZXR3b3JrU3RhdHVzICYmIG5ldHdvcmtTdGF0dXMud2VicnRjUGVlcnMpXG4gICAgPyBuZXR3b3JrU3RhdHVzLndlYnJ0Y1BlZXJzXG4gICAgOiBbXTtcbiAgY29uc3Qgd2VicnRjUmVnaXN0cmF0aW9uID0gd2VicnRjRnJvbUh1Yi5maW5kKChwKSA9PiBwICYmIHAuaWQgPT09IGlkKSB8fCBudWxsO1xuICBjb25zdCB3ZWJydGNNZXRhID0gd2VicnRjUmVnaXN0cmF0aW9uICYmIHdlYnJ0Y1JlZ2lzdHJhdGlvbi5tZXRhZGF0YSAmJiB0eXBlb2Ygd2VicnRjUmVnaXN0cmF0aW9uLm1ldGFkYXRhID09PSAnb2JqZWN0J1xuICAgID8gd2VicnRjUmVnaXN0cmF0aW9uLm1ldGFkYXRhXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IHBlZXJGcm9tU3RhdHVzID0gcGVlcnMuZmluZCgocCkgPT4gcCAmJiAocC5hZGRyZXNzID09PSBpZCB8fCBwLmlkID09PSBpZCkpIHx8IG51bGw7XG4gIGNvbnN0IG1lcmdlZEZyb21HcyA9ICgoKSA9PiB7XG4gICAgY29uc3QgZ3MgPSBjdXJyZW50ICYmIHR5cGVvZiBjdXJyZW50LmdldEdsb2JhbFN0YXRlID09PSAnZnVuY3Rpb24nID8gY3VycmVudC5nZXRHbG9iYWxTdGF0ZSgpIDogbnVsbDtcbiAgICByZXR1cm4gZ3MgPyBmaW5kUGVlckluR2xvYmFsUGVlcnMoZ3MucGVlcnMgfHwge30sIGlkKSA6IG51bGw7XG4gIH0pKCk7XG4gIGNvbnN0IHBlZXIgPSBtZXJnZVBlZXJTb3VyY2VzKG1lcmdlZEZyb21HcywgZGV0YWlsLCBwZWVyRnJvbVN0YXR1cyk7XG4gIGNvbnN0IGhhc1BlZXJSb3cgPSAhIXBlZXI7XG4gIGNvbnN0IHN0YXR1cyA9IHBlZXIgJiYgcGVlci5zdGF0dXMgPyBwZWVyLnN0YXR1cyA6ICd1bmtub3duJztcbiAgY29uc3QgaXNDb25uZWN0ZWQgPSBzdGF0dXMgPT09ICdjb25uZWN0ZWQnO1xuICBjb25zdCBhZG1pblRva2VuUHJlc2VudCA9ICEhZ2V0QWRtaW5QZWVyVG9vbHNUb2tlbkZyb21Qcm9wcyhwcm9wcyk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBiaSA9IHByb3BzLmJyaWRnZVJlZiAmJiBwcm9wcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICBjb25zdCBncyA9IGJpICYmIHR5cGVvZiBiaS5nZXRHbG9iYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IGJpLmdldEdsb2JhbFN0YXRlKCkgOiBudWxsO1xuICAgIGNvbnN0IHNlZWQgPSBncyAmJiBncy5wZWVycyA/IGZpbmRQZWVySW5HbG9iYWxQZWVycyhncy5wZWVycywgaWQpIDogbnVsbDtcbiAgICBzZXREZXRhaWwoc2VlZCB8fCBudWxsKTtcbiAgICBzZXRQZWVyQ2hhdHMoW10pO1xuICAgIHNldEludmVudG9yeURvY3MoW10pO1xuICAgIGlmICh0eXBlb2YgcHJvcHMub25SZWZyZXNoUGVlcnMgPT09ICdmdW5jdGlvbicpIHByb3BzLm9uUmVmcmVzaFBlZXJzKCk7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5vbkdldFBlZXIgPT09ICdmdW5jdGlvbicgJiYgaWQpIHByb3BzLm9uR2V0UGVlcihpZCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2lkXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvbkdzID0gKGV2KSA9PiB7XG4gICAgICBjb25zdCBwID0gZXYgJiYgZXYuZGV0YWlsICYmIGV2LmRldGFpbC5vcGVyYXRpb24gJiYgZXYuZGV0YWlsLm9wZXJhdGlvbi5wYXRoO1xuICAgICAgaWYgKHAgPT09ICcvcGVlclRvcG9sb2d5R29zc2lwJykgc2V0UGVlclRvcG9sb2d5VGljaygodCkgPT4gdCArIDEpO1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2dsb2JhbFN0YXRlVXBkYXRlJywgb25Hcyk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdnbG9iYWxTdGF0ZVVwZGF0ZScsIG9uR3MpO1xuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgY29uc3QgcGFpcnMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGludmVudG9yeURvY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGRvYyA9IGludmVudG9yeURvY3NbaV07XG4gICAgICBjb25zdCBoID0gZG9jICYmIGRvYy5odGxjO1xuICAgICAgY29uc3Qgc2lkID0gaCAmJiBoLnNldHRsZW1lbnRJZDtcbiAgICAgIGNvbnN0IHVyaSA9IGggJiYgaC5iaXRjb2luVXJpICYmIFN0cmluZyhoLmJpdGNvaW5VcmkpLnRyaW0oKTtcbiAgICAgIGlmIChzaWQgJiYgdXJpKSBwYWlycy5wdXNoKHsgc2lkLCB1cmkgfSk7XG4gICAgfVxuICAgIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHNldEh0bGNGdW5kaW5nUXJCeVNldHRsZW1lbnQoe30pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBQcm9taXNlLmFsbChwYWlycy5tYXAoKHsgc2lkLCB1cmkgfSkgPT5cbiAgICAgIFFSQ29kZS50b0RhdGFVUkwodXJpLCB7XG4gICAgICAgIHdpZHRoOiAxNDAsXG4gICAgICAgIG1hcmdpbjogMixcbiAgICAgICAgY29sb3I6IHsgZGFyazogJyMwMDAwMDAnLCBsaWdodDogJyNmZmZmZmYnIH1cbiAgICAgIH0pXG4gICAgICAgIC50aGVuKChkYXRhVXJsKSA9PiAoeyBzaWQsIGRhdGFVcmwgfSkpXG4gICAgICAgIC5jYXRjaCgoKSA9PiAoeyBzaWQsIGRhdGFVcmw6IG51bGwgfSkpXG4gICAgKSkudGhlbigocm93cykgPT4ge1xuICAgICAgaWYgKGNhbmNlbGxlZCkgcmV0dXJuO1xuICAgICAgY29uc3QgbmV4dCA9IHt9O1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3dzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IHIgPSByb3dzW2pdO1xuICAgICAgICBpZiAoci5kYXRhVXJsKSBuZXh0W3Iuc2lkXSA9IHIuZGF0YVVybDtcbiAgICAgIH1cbiAgICAgIHNldEh0bGNGdW5kaW5nUXJCeVNldHRsZW1lbnQobmV4dCk7XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHsgY2FuY2VsbGVkID0gdHJ1ZTsgfTtcbiAgfSwgW2ludmVudG9yeURvY3NdKTtcblxuICBjb25zdCBjb3B5SHRsY0Z1bmRpbmcgPSBSZWFjdC51c2VDYWxsYmFjaygodGV4dCwgZmxhc2hLZXkpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRleHQgJiYgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLmNsaXBib2FyZCkge1xuICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KTtcbiAgICAgICAgc2V0SHRsY0Z1bmRpbmdDb3BpZWQoZmxhc2hLZXkpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHNldEh0bGNGdW5kaW5nQ29waWVkKChrKSA9PiAoayA9PT0gZmxhc2hLZXkgPyBudWxsIDogaykpLCAxNTAwKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuICB9LCBbXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkZXJpdmVDaGF0c0FuZEludmVudG9yeSA9IChnbG9iYWxTdGF0ZSwgY3VycmVudERldGFpbCkgPT4ge1xuICAgICAgaWYgKCFnbG9iYWxTdGF0ZSB8fCAhZ2xvYmFsU3RhdGUubWVzc2FnZXMpIHJldHVybjtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gZ2xvYmFsU3RhdGUubWVzc2FnZXMgfHwge307XG4gICAgICBjb25zdCBwZWVyc0J5SWQgPSBnbG9iYWxTdGF0ZS5wZWVycyB8fCB7fTtcbiAgICAgIGNvbnN0IHN0b3JlZFBlZXIgPSBmaW5kUGVlckluR2xvYmFsUGVlcnMocGVlcnNCeUlkLCBpZCk7XG4gICAgICBjb25zdCBwZWVySWQgPSAoc3RvcmVkUGVlciAmJiBzdG9yZWRQZWVyLmlkKSB8fCAoY3VycmVudERldGFpbCAmJiBjdXJyZW50RGV0YWlsLmlkKSB8fCBpZDtcblxuICAgICAgY29uc3QgY2hhdHMgPSBPYmplY3QudmFsdWVzKG1lc3NhZ2VzKVxuICAgICAgICAuZmlsdGVyKChtKSA9PiBtICYmIHR5cGVvZiBtID09PSAnb2JqZWN0JyAmJiBtLnR5cGUgPT09ICdQMlBfQ0hBVF9NRVNTQUdFJylcbiAgICAgICAgLmZpbHRlcigobSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdG9ySWQgPSBtLmFjdG9yICYmIG0uYWN0b3IuaWQ7XG4gICAgICAgICAgLy8gUHJlZmVyIHRvcC1sZXZlbCB0YXJnZXQgKEFjdGl2aXR5U3RyZWFtcy1zdHlsZSksIGJ1dCBzdXBwb3J0IGxlZ2FjeVxuICAgICAgICAgIC8vIG9iamVjdC50YXJnZXQgLyBvYmplY3QuYWRkcmVzcyAvIG9iamVjdC5pZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBtLnRhcmdldCB8fCAobS5vYmplY3QgJiYgKG0ub2JqZWN0LnRhcmdldCB8fCBtLm9iamVjdC5hZGRyZXNzIHx8IG0ub2JqZWN0LmlkKSk7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlc0FjdG9yID0gISEoYWN0b3JJZCAmJiBwZWVySWQgJiYgYWN0b3JJZCA9PT0gcGVlcklkKTtcblxuICAgICAgICAgIGxldCBtYXRjaGVzVGFyZ2V0ID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgLy8gRGlyZWN0IG1hdGNoIGFnYWluc3Qgcm91dGUgaWQgb3IgcGVlciBpZFxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gaWQgfHwgdGFyZ2V0ID09PSBwZWVySWQpIHtcbiAgICAgICAgICAgICAgbWF0Y2hlc1RhcmdldCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBNYXRjaCBhZ2FpbnN0IGtub3duIHBlZXIgYWRkcmVzcy9pZCwgd2hlbiBhdmFpbGFibGVcbiAgICAgICAgICAgICAgY29uc3QgcCA9IGN1cnJlbnREZXRhaWwgfHwgc3RvcmVkUGVlcjtcbiAgICAgICAgICAgICAgaWYgKHAgJiYgKHAuYWRkcmVzcyA9PT0gdGFyZ2V0IHx8IHAuaWQgPT09IHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVzVGFyZ2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtYXRjaGVzQWN0b3IgfHwgbWF0Y2hlc1RhcmdldDtcbiAgICAgICAgfSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCB0YSA9IChhLm9iamVjdCAmJiBhLm9iamVjdC5jcmVhdGVkKSB8fCAwO1xuICAgICAgICAgIGNvbnN0IHRiID0gKGIub2JqZWN0ICYmIGIub2JqZWN0LmNyZWF0ZWQpIHx8IDA7XG4gICAgICAgICAgcmV0dXJuIHRhIC0gdGI7XG4gICAgICAgIH0pXG4gICAgICAgIC5zbGljZSgtMTAwKTtcblxuICAgICAgc2V0UGVlckNoYXRzKGNoYXRzKTtcblxuICAgICAgLy8gRGVyaXZlIGludmVudG9yeSBkb2N1bWVudHMgZm9yIHRoaXMgcGVlciwgaWYgYXZhaWxhYmxlIChrZXllZCBieSBpZCBvciBhZGRyZXNzKS5cbiAgICAgIGNvbnN0IGludlBlZXIgPSBmaW5kUGVlckluR2xvYmFsUGVlcnMocGVlcnNCeUlkLCBpZCkgfHwgcGVlcnNCeUlkW3BlZXJJZF0gfHwgc3RvcmVkUGVlcjtcbiAgICAgIGNvbnN0IGRvY3MgPSBpbnZQZWVyICYmIGludlBlZXIuaW52ZW50b3J5ICYmIEFycmF5LmlzQXJyYXkoaW52UGVlci5pbnZlbnRvcnkuZG9jdW1lbnRzKVxuICAgICAgICA/IGludlBlZXIuaW52ZW50b3J5LmRvY3VtZW50c1xuICAgICAgICA6IFtdO1xuICAgICAgc2V0SW52ZW50b3J5RG9jcyhkb2NzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaGFuZGxlciA9IChldmVudCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZ2xvYmFsU3RhdGUgPSBldmVudCAmJiBldmVudC5kZXRhaWwgJiYgZXZlbnQuZGV0YWlsLmdsb2JhbFN0YXRlO1xuICAgICAgICBpZiAoIWdsb2JhbFN0YXRlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc3RvcmVkID0gZ2xvYmFsU3RhdGUucGVlcnNcbiAgICAgICAgICA/IGZpbmRQZWVySW5HbG9iYWxQZWVycyhnbG9iYWxTdGF0ZS5wZWVycywgaWQpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAoc3RvcmVkKSBzZXREZXRhaWwoc3RvcmVkKTtcblxuICAgICAgICBkZXJpdmVDaGF0c0FuZEludmVudG9yeShnbG9iYWxTdGF0ZSwgc3RvcmVkKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfTtcblxuICAgIC8vIEluaXRpYWwgbG9hZCBmcm9tIHBlcnNpc3RlZC9yZXN0b3JlZCBzdGF0ZSAoc3Vydml2ZXMgcmVmcmVzaClcbiAgICBjb25zdCBicmlkZ2VJbnN0YW5jZSA9IHByb3BzLmJyaWRnZVJlZiAmJiBwcm9wcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICBjb25zdCBncyA9IGJyaWRnZUluc3RhbmNlICYmIHR5cGVvZiBicmlkZ2VJbnN0YW5jZS5nZXRHbG9iYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBicmlkZ2VJbnN0YW5jZS5nZXRHbG9iYWxTdGF0ZSgpXG4gICAgICA6IG51bGw7XG4gICAgaWYgKGdzKSB7XG4gICAgICBjb25zdCByb3cgPSBncy5wZWVycyA/IGZpbmRQZWVySW5HbG9iYWxQZWVycyhncy5wZWVycywgaWQpIDogbnVsbDtcbiAgICAgIGRlcml2ZUNoYXRzQW5kSW52ZW50b3J5KGdzLCByb3cpO1xuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdnbG9iYWxTdGF0ZVVwZGF0ZScsIGhhbmRsZXIpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZ2xvYmFsU3RhdGVVcGRhdGUnLCBoYW5kbGVyKTtcbiAgfSwgW2lkLCBwcm9wcy5icmlkZ2VSZWZdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFBlZXJXb3Jrc3BhY2VUYWIoMCk7XG4gIH0sIFtpZF0pO1xuXG4gIGNvbnN0IHJvdXRlTG9va3NMaWtlWHB1YiA9IGlzTGlrZWx5QmlwMzJFeHRlbmRlZEtleShpZCk7XG4gIGNvbnN0IHhwdWJPbmx5Tm9QZWVyID0gcm91dGVMb29rc0xpa2VYcHViICYmICFwZWVyO1xuICBjb25zdCBbcGVlclJlc29sdmVTbG93LCBzZXRQZWVyUmVzb2x2ZVNsb3ddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0UGVlclJlc29sdmVTbG93KGZhbHNlKTtcbiAgfSwgW2lkXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaGFzUGVlclJvdyB8fCAhaWQgfHwgcm91dGVMb29rc0xpa2VYcHViKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHNldFBlZXJSZXNvbHZlU2xvdyh0cnVlKSwgMTQwMDApO1xuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodCk7XG4gIH0sIFtpZCwgaGFzUGVlclJvdywgcm91dGVMb29rc0xpa2VYcHViXSk7XG4gIGNvbnN0IHdlYnJ0Y1hwdWIgPSB3ZWJydGNNZXRhICYmIHdlYnJ0Y01ldGEueHB1YiAmJiBpc0xpa2VseUJpcDMyRXh0ZW5kZWRLZXkoU3RyaW5nKHdlYnJ0Y01ldGEueHB1YikpXG4gICAgPyBTdHJpbmcod2VicnRjTWV0YS54cHViKS50cmltKClcbiAgICA6ICcnO1xuICBjb25zdCBiZWNoMzJIZWFkbGluZSA9IHBlZXIgPyBmYWJyaWNQZWVyQmVjaDMySWQocGVlcikgOiAnJztcbiAgY29uc3QgdGl0bGUgPSAoYmVjaDMySGVhZGxpbmUgPyBzaG9ydGVuUHVibGljSWQoYmVjaDMySGVhZGxpbmUsIDE4LCAxNCkgOiBudWxsKVxuICAgIHx8IChwZWVyICYmIChwZWVyLm5pY2tuYW1lIHx8IHBlZXIuYWxpYXMgfHwgcGVlci5pZCB8fCBwZWVyLmFkZHJlc3MpKVxuICAgIHx8ICh3ZWJydGNYcHViID8gc2hvcnRlblB1YmxpY0lkKHdlYnJ0Y1hwdWIsIDE0LCAxMikgOiBudWxsKVxuICAgIHx8IChyb3V0ZUxvb2tzTGlrZVhwdWIgJiYgaWRcbiAgICAgID8gKGlkLmxlbmd0aCA+IDQwID8gYCR7aWQuc2xpY2UoMCwgMTYpfeKApiR7aWQuc2xpY2UoLTE0KX1gIDogaWQpXG4gICAgICA6IGlkKVxuICAgIHx8ICdQZWVyJztcblxuICBjb25zdCByZXNvbHZlZEFkZHJlc3MgPSAocGVlciAmJiBwZWVyLmFkZHJlc3MpIHx8IGlkIHx8ICcnO1xuICBsZXQgaG9zdCA9ICcnO1xuICBsZXQgcG9ydCA9ICcnO1xuICBpZiAocGVlciAmJiBwZWVyLmNvbm5lY3Rpb24gJiYgcGVlci5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3MpIHtcbiAgICBob3N0ID0gcGVlci5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3M7XG4gICAgcG9ydCA9IHBlZXIuY29ubmVjdGlvbi5yZW1vdGVQb3J0ICE9IG51bGwgPyBTdHJpbmcocGVlci5jb25uZWN0aW9uLnJlbW90ZVBvcnQpIDogJyc7XG4gIH0gZWxzZSBpZiAocmVzb2x2ZWRBZGRyZXNzKSB7XG4gICAgY29uc3QgbGFzdENvbG9uID0gcmVzb2x2ZWRBZGRyZXNzLmxhc3RJbmRleE9mKCc6Jyk7XG4gICAgaWYgKGxhc3RDb2xvbiA+IDApIHtcbiAgICAgIGhvc3QgPSByZXNvbHZlZEFkZHJlc3Muc2xpY2UoMCwgbGFzdENvbG9uKTtcbiAgICAgIHBvcnQgPSByZXNvbHZlZEFkZHJlc3Muc2xpY2UobGFzdENvbG9uICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvc3QgPSByZXNvbHZlZEFkZHJlc3M7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hhdERlc3QgPSAocGVlciAmJiBwZWVyLmFkZHJlc3MpIHx8IGlkO1xuICBjb25zdCB0Y3BLZXlGb3JGYWJyaWNSZXN5bmMgPSAocGVlciAmJiBwZWVyLmFkZHJlc3MpIHx8IChpZCAmJiBTdHJpbmcoaWQpLmluY2x1ZGVzKCc6JykgPyBpZCA6ICcnKTtcbiAgY29uc3QgY2FuUmVxdWVzdEZhYnJpY1Jlc3luYyA9ICEhKFxuICAgIGlzQ29ubmVjdGVkICYmXG4gICAgdGNwS2V5Rm9yRmFicmljUmVzeW5jICYmXG4gICAgIVN0cmluZyhpZCkuc3RhcnRzV2l0aCgnZmFicmljLWJyaWRnZS0nKVxuICApO1xuICBjb25zdCBoYXNVbmxvY2tlZElkZW50aXR5ID0gISEoY3VycmVudCAmJiB0eXBlb2YgY3VycmVudC5oYXNVbmxvY2tlZElkZW50aXR5ID09PSAnZnVuY3Rpb24nICYmIGN1cnJlbnQuaGFzVW5sb2NrZWRJZGVudGl0eSgpKTtcbiAgY29uc3QgY2FuU2VuZFBlZXJDaGF0ID0gISFjaGF0RGVzdCAmJiBoYXNVbmxvY2tlZElkZW50aXR5O1xuXG4gIGNvbnN0IGhhbmRsZVNlbmRQZWVyQ2hhdCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgdGV4dCA9IChvdXRnb2luZ1RleHQgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXRleHQgfHwgIWNhblNlbmRQZWVyQ2hhdCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgcHJvcHMub25TZW5kUGVlck1lc3NhZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BzLm9uU2VuZFBlZXJNZXNzYWdlKGNoYXREZXN0LCB0ZXh0KTtcbiAgICAgIHNldE91dGdvaW5nVGV4dCgnJyk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdvc3NpcE5laWdoYm9ycyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGdzID0gY3VycmVudCAmJiB0eXBlb2YgY3VycmVudC5nZXRHbG9iYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuZ2V0R2xvYmFsU3RhdGUoKSA6IG51bGw7XG4gICAgY29uc3QgZyA9IGdzICYmIGdzLnBlZXJUb3BvbG9neUdvc3NpcCAmJiBncy5wZWVyVG9wb2xvZ3lHb3NzaXAuYnlSZXBvcnRlcjtcbiAgICBpZiAoIXBlZXIgfHwgIWcgfHwgdHlwZW9mIGcgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBrZXkgPSAocGVlci5pZCAmJiBnW3BlZXIuaWRdKSA/IHBlZXIuaWQgOiAoaWQgJiYgZ1tpZF0gPyBpZCA6IChwZWVyLmFkZHJlc3MgJiYgZ1twZWVyLmFkZHJlc3NdID8gcGVlci5hZGRyZXNzIDogbnVsbCkpO1xuICAgIGlmICgha2V5IHx8ICFnW2tleV0gfHwgIUFycmF5LmlzQXJyYXkoZ1trZXldLm5laWdoYm9ycykpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBnW2tleV0ubmVpZ2hib3JzO1xuICB9LCBbY3VycmVudCwgcGVlciwgaWQsIHBlZXJUb3BvbG9neVRpY2tdKTtcblxuICBjb25zdCBuZWlnaGJvckRvdCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGNlbnRlciA9IChwZWVyICYmIHBlZXIuaWQpIHx8IGlkO1xuICAgIGlmICghY2VudGVyIHx8ICFnb3NzaXBOZWlnaGJvcnMgfHwgZ29zc2lwTmVpZ2hib3JzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGVlck5laWdoYm9yaG9vZFRvRG90KGNlbnRlciwgZ29zc2lwTmVpZ2hib3JzKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9LCBbcGVlciwgaWQsIGdvc3NpcE5laWdoYm9yc10pO1xuXG4gIGNvbnN0IHNlbmRJbnZlbnRvcnlSZXF1ZXN0ID0gKGtpbmQsIG9wdHNJbikgPT4ge1xuICAgIC8vIFByZWZlciBib3RoIGlkICsgYWRkcmVzcyB3aGVuIHByZXNlbnQgc28gaHViIF9yZXNvbHZlUGVlckFkZHJlc3MgLyBUQ1AgbWFwIG1hdGNoZXMgTGlzdFBlZXJzIHJvd3MuXG4gICAgY29uc3QgaW52RGVzdCA9IChwZWVyICYmIHBlZXIuYWRkcmVzcyAmJiBwZWVyLmlkKVxuICAgICAgPyB7IGFkZHJlc3M6IHBlZXIuYWRkcmVzcywgaWQ6IHBlZXIuaWQgfVxuICAgICAgOiAoKHBlZXIgJiYgcGVlci5hZGRyZXNzKSB8fCAocGVlciAmJiBwZWVyLmlkKSB8fCBpZCk7XG4gICAgaWYgKCFpbnZEZXN0IHx8ICFicmlkZ2VSZWYgfHwgIWJyaWRnZVJlZi5jdXJyZW50IHx8IHR5cGVvZiBicmlkZ2VSZWYuY3VycmVudC5zZW5kUGVlckludmVudG9yeVJlcXVlc3QgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICBjb25zdCBvcHRzID0gb3B0c0luICYmIHR5cGVvZiBvcHRzSW4gPT09ICdvYmplY3QnID8geyAuLi5vcHRzSW4gfSA6IHt9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiaSA9IGJyaWRnZVJlZi5jdXJyZW50O1xuICAgICAgaWYgKGJpICYmIHR5cGVvZiBiaS5nZXRIdGxjUmVmdW5kUHVibGljS2V5SGV4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IHBrID0gYmkuZ2V0SHRsY1JlZnVuZFB1YmxpY0tleUhleCgpO1xuICAgICAgICBpZiAocGsgJiYgIW9wdHMuYnV5ZXJSZWZ1bmRQdWJsaWNLZXkpIG9wdHMuYnV5ZXJSZWZ1bmRQdWJsaWNLZXkgPSBwaztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChfKSB7fVxuICAgIHNldEludmVudG9yeVJlcXVlc3RNZXRhKHsgYXQ6IERhdGUubm93KCksIGtpbmQ6IGtpbmQgfHwgJ2RvY3VtZW50cycsIHN0YXR1czogJ3NlbnQnIH0pO1xuICAgIGJyaWRnZVJlZi5jdXJyZW50LnNlbmRQZWVySW52ZW50b3J5UmVxdWVzdChpbnZEZXN0LCBraW5kIHx8ICdkb2N1bWVudHMnLCBvcHRzKTtcbiAgfTtcblxuICBjb25zdCBvcGVuTmlja25hbWVNb2RhbCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXROaWNrRHJhZnQoKHBlZXIgJiYgcGVlci5uaWNrbmFtZSkgPyBTdHJpbmcocGVlci5uaWNrbmFtZSkgOiAnJyk7XG4gICAgc2V0Tmlja01vZGFsT3Blbih0cnVlKTtcbiAgfSwgW3BlZXJdKTtcblxuICBjb25zdCBzdWJtaXROaWNrbmFtZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHByb3BzLm9uU2V0UGVlck5pY2tuYW1lICE9PSAnZnVuY3Rpb24nIHx8ICFpZCkge1xuICAgICAgc2V0Tmlja01vZGFsT3BlbihmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHByb3BzLm9uU2V0UGVlck5pY2tuYW1lKGlkLCBuaWNrRHJhZnQpO1xuICAgIHNldE5pY2tNb2RhbE9wZW4oZmFsc2UpO1xuICB9LCBbcHJvcHMsIGlkLCBuaWNrRHJhZnRdKTtcblxuICBjb25zdCBsYXVuY2hJbnZpdGVOb3RlTW9kYWwgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SW52aXRlTm90ZURyYWZ0KCcnKTtcbiAgICBzZXRJbnZpdGVOb3RlTW9kYWxPcGVuKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgc3VibWl0SW52aXRlVG9Db250cmFjdCA9IFJlYWN0LnVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IGdldEFkbWluUGVlclRvb2xzVG9rZW5Gcm9tUHJvcHMocHJvcHMpO1xuICAgIGlmICghdG9rZW4gfHwgIWlkKSByZXR1cm47XG4gICAgY29uc3Qgbm90ZSA9IGludml0ZU5vdGVEcmFmdCAmJiBTdHJpbmcoaW52aXRlTm90ZURyYWZ0KS50cmltKClcbiAgICAgID8gU3RyaW5nKGludml0ZU5vdGVEcmFmdCkudHJpbSgpLnNsaWNlKDAsIDUwMClcbiAgICAgIDogJyc7XG4gICAgc2V0SW52aXRlQnVzeSh0cnVlKTtcbiAgICBzZXRJbnZpdGVFcnJvcihudWxsKTtcbiAgICBzZXRJbnZpdGVPayhudWxsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2lkID0gKGZlZGVyYXRpb25Db250cmFjdElkIHx8ICcnKS50cmltKCk7XG4gICAgICBjb25zdCByID0gYXdhaXQgaHViSnNvblJwYygnSW52aXRlUGVlclRvRmVkZXJhdGlvbkNvbnRyYWN0JywgW3tcbiAgICAgICAgcGVlcklkOiBpZCxcbiAgICAgICAgY29udHJhY3RJZDogY2lkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgbm90ZTogbm90ZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIGFkbWluVG9rZW46IHRva2VuXG4gICAgICB9XSk7XG4gICAgICBpZiAociAmJiByLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICBzZXRJbnZpdGVFcnJvcihyLm1lc3NhZ2UgfHwgJ0ludml0ZSBmYWlsZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHIgJiYgci5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByLmludml0ZUlkKSB7XG4gICAgICAgIHNldEludml0ZU9rKGBJbnZpdGUgc2VudCAoJHtyLmludml0ZUlkLnNsaWNlKDAsIDE2KX3igKYpYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRJbnZpdGVPaygnSW52aXRlIHNlbnQnKTtcbiAgICAgIH1cbiAgICAgIHNldEludml0ZU5vdGVNb2RhbE9wZW4oZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldEludml0ZUVycm9yKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SW52aXRlQnVzeShmYWxzZSk7XG4gICAgfVxuICB9LCBbcHJvcHMsIGlkLCBpbnZpdGVOb3RlRHJhZnQsIGZlZGVyYXRpb25Db250cmFjdElkXSk7XG5cbiAgY29uc3QgaHViQWRtaW5Db2xsYWJvcmF0aW9uVG9rZW4gPSByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKCk7XG4gIGNvbnN0IGZhYnJpY1BlZXJJZEZvckNvbGxhYm9yYXRpb25Db250YWN0ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZnJvbVBlZXIgPSBwZWVyICYmIHBlZXIuaWQgPyBTdHJpbmcocGVlci5pZCkudHJpbSgpIDogJyc7XG4gICAgY29uc3QgZnJvbVdlYnJ0YyA9IHdlYnJ0Y01ldGEgJiYgd2VicnRjTWV0YS5mYWJyaWNQZWVySWQgPyBTdHJpbmcod2VicnRjTWV0YS5mYWJyaWNQZWVySWQpLnRyaW0oKSA6ICcnO1xuICAgIGNvbnN0IGZwID0gZnJvbVBlZXIgfHwgZnJvbVdlYnJ0YztcbiAgICBpZiAoIWZwIHx8IGlzTGlrZWx5QmlwMzJFeHRlbmRlZEtleShmcCkpIHJldHVybiAnJztcbiAgICByZXR1cm4gZnA7XG4gIH0sIFtwZWVyLCB3ZWJydGNNZXRhXSk7XG5cbiAgY29uc3QgYWRkUGVlclRvQ29sbGFib3JhdGlvbkNvbnRhY3RzID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRva2VuID0gcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlcigpO1xuICAgIGNvbnN0IGZwID0gZmFicmljUGVlcklkRm9yQ29sbGFib3JhdGlvbkNvbnRhY3Q7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgc2V0Q29udGFjdEFkZEVycignU2F2ZSB0aGUgaHViIGFkbWluIHRva2VuIHRvIGFkZCBjb250YWN0cyAoU2V0dGluZ3MpLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWZwKSB7XG4gICAgICBzZXRDb250YWN0QWRkRXJyKCdObyBGYWJyaWMgcGVlciBpZCBvbiB0aGlzIHJvdyB5ZXQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJpID0gcHJvcHMuYnJpZGdlUmVmICYmIHByb3BzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgIGlmICghYmkgfHwgdHlwZW9mIGJpLmNhbGxIdWJKc29uUnBjICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzZXRDb250YWN0QWRkRXJyKCdCcmlkZ2UgaXMgbm90IHJlYWR5LicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRDb250YWN0QWRkQnVzeSh0cnVlKTtcbiAgICBzZXRDb250YWN0QWRkRXJyKG51bGwpO1xuICAgIHNldENvbnRhY3RBZGRPayhudWxsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3V0ID0gYXdhaXQgYmkuY2FsbEh1Ykpzb25ScGMoJ0FkZENvbGxhYm9yYXRpb25Db250YWN0Jywge1xuICAgICAgICBhZG1pblRva2VuOiB0b2tlbixcbiAgICAgICAgZmFicmljUGVlcklkOiBmcCxcbiAgICAgICAgbGFiZWw6IChwZWVyICYmIHBlZXIubmlja25hbWUpID8gU3RyaW5nKHBlZXIubmlja25hbWUpLnRyaW0oKS5zbGljZSgwLCAyMDApIDogJycsXG4gICAgICAgIHNvdXJjZTogJ3BlZXJfZGV0YWlsJ1xuICAgICAgfSk7XG4gICAgICBpZiAob3V0ICYmIG91dC5lcnJvcikge1xuICAgICAgICBzZXRDb250YWN0QWRkRXJyKFN0cmluZyhvdXQuZXJyb3IpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzID0gb3V0ICYmIG91dC5yZXN1bHQ7XG4gICAgICBpZiAocmVzICYmIHJlcy5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgc2V0Q29udGFjdEFkZEVycihyZXMubWVzc2FnZSB8fCAnQWRkIGNvbnRhY3QgZmFpbGVkJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNldENvbnRhY3RBZGRPaygnQWRkZWQgdG8gQ29sbGFib3JhdGlvbiBjb250YWN0cy4nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXRDb250YWN0QWRkRXJyKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0Q29udGFjdEFkZEJ1c3koZmFsc2UpO1xuICAgIH1cbiAgfSwgW2ZhYnJpY1BlZXJJZEZvckNvbGxhYm9yYXRpb25Db250YWN0LCBwZWVyLCBwcm9wcy5icmlkZ2VSZWZdKTtcblxuICByZXR1cm4gKFxuICAgIDxmYWJyaWMtcGVlci1kZXRhaWwgY2xhc3M9J2ZhZGUtaW4nPlxuICAgICAgPFNlZ21lbnQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgICAgICAgICBnYXA6ICcwLjY1cmVtJyxcbiAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogJzAuMzVyZW0nXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC42NXJlbScsIGZsZXhXcmFwOiAnd3JhcCcsIG1pbldpZHRoOiAwLCBmbGV4OiAnMSAxIDE2cmVtJyB9fT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgIHRvPVwiL3BlZXJzXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkJhY2sgdG8gcGVlcnMgbGlzdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJhcnJvdyBsZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgUGVlcnNcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtaW5XaWR0aDogMCB9fT5cbiAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImgzXCIgc3R5bGU9e3sgbWFyZ2luOiAwLCBmb250V2VpZ2h0OiA2MDAsIGxpbmVIZWlnaHQ6IDEuMjUgfX0+XG4gICAgICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICAgICAge3Jlc29sdmVkQWRkcmVzcyAmJiAoaG9zdCB8fCBwb3J0KSA/IChcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMC44MnJlbScsIGNvbG9yOiAnIzc2NzY3NicsIG1hcmdpblRvcDogJzAuMTVyZW0nIH19PlxuICAgICAgICAgICAgICAgICAge2hvc3R9e3BvcnQgPyBgOiR7cG9ydH1gIDogJyd9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7d2VicnRjUmVnaXN0cmF0aW9uID8gKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6ICcwLjc4cmVtJywgY29sb3I6ICcjNTU1JywgbWFyZ2luVG9wOiAnMC4yNXJlbScsIG1heFdpZHRoOiAnMzhyZW0nIH19PlxuICAgICAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJtaW5pXCIgYmFzaWMgY29sb3I9XCJibHVlXCI+V2ViUlRDPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHt3ZWJydGNYcHViID8gKFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4zNXJlbScgfX0gdGl0bGU9e3dlYnJ0Y1hwdWJ9PlxuICAgICAgICAgICAgICAgICAgICAgIHhwdWIge3Nob3J0ZW5QdWJsaWNJZCh3ZWJydGNYcHViLCAxNCwgMTIpfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIHt3ZWJydGNNZXRhICYmIHdlYnJ0Y01ldGEuZmFicmljUGVlcklkID8gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMnJlbScsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nIH19PntTdHJpbmcod2VicnRjTWV0YS5mYWJyaWNQZWVySWQpfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHt4cHViT25seU5vUGVlciA/IChcbiAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwiYmx1ZVwiIHRpdGxlPVwiQklQMzIgZXh0ZW5kZWQgcHVibGljIGtleSAobm90IGEgVENQIHBlZXIgc29ja2V0KVwiPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJrZXlcIiAvPiBJZGVudGl0eSByZWZcbiAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICkgOiAhaGFzUGVlclJvdyAmJiB3ZWJydGNSZWdpc3RyYXRpb24gPyAoXG4gICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwic21hbGxcIiBjb2xvcj1cImJsdWVcIiB0aXRsZT1cIlJlZ2lzdGVyZWQgZm9yIFdlYlJUQyBzaWduYWxpbmc7IFRDUCBwZWVyIHJvdyBub3QgbG9hZGVkIHlldFwiPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJ3aWZpXCIgLz4gV2ViUlRDXG4gICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICApIDogIWhhc1BlZXJSb3cgPyAoXG4gICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwic21hbGxcIiBjb2xvcj1cImdyZXlcIiB0aXRsZT1cIldhaXRpbmcgZm9yIExpc3RQZWVycyAvIEdldFBlZXIgZGF0YSBmcm9tIHRoZSBodWJcIj5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiY2xvY2sgb3V0bGluZVwiIC8+IFJlc29sdmluZ+KAplxuICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExhYmVsIHNpemU9XCJzbWFsbFwiIGNvbG9yPXtpc0Nvbm5lY3RlZCA/ICdncmVlbicgOiAnZ3JleSd9IHRpdGxlPXtzdGF0dXN9PlxuICAgICAgICAgICAgICAgIHtpc0Nvbm5lY3RlZCA/IChcbiAgICAgICAgICAgICAgICAgIDw+PEljb24gbmFtZT1cImNoZWNrIGNpcmNsZVwiIC8+IE9uPC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDw+PEljb24gbmFtZT1cIm1pbnVzIGNpcmNsZVwiIC8+IE9mZjwvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsheHB1Yk9ubHlOb1BlZXIgJiYgKFxuICAgICAgICAgICAgPEJ1dHRvbi5Hcm91cCBzaXplPVwic21hbGxcIiBiYXNpYyBzdHlsZT17eyBmbGV4U2hyaW5rOiAwIH19PlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgIHRpdGxlPVwiUmVmcmVzaCBwZWVyIGluZm9cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcHMub25SZWZyZXNoUGVlcnMgPT09ICdmdW5jdGlvbicpIHByb3BzLm9uUmVmcmVzaFBlZXJzKCk7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BzLm9uR2V0UGVlciA9PT0gJ2Z1bmN0aW9uJyAmJiBpZCkgcHJvcHMub25HZXRQZWVyKGlkKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAge2hhc1BlZXJSb3cgJiYgaWQgJiYgIWlzQ29ubmVjdGVkICYmIHR5cGVvZiBwcm9wcy5vbkFkZFBlZXIgPT09ICdmdW5jdGlvbicgJiYgKHBlZXIgJiYgcGVlci5hZGRyZXNzKSAmJiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcHJvcHMub25BZGRQZWVyKHsgYWRkcmVzczogcGVlci5hZGRyZXNzIH0pfVxuICAgICAgICAgICAgICAgICAgdGl0bGU9e2BSZWNvbm5lY3QgdG8gJHtwZWVyLmFkZHJlc3N9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicGx1Z1wiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtoYXNQZWVyUm93ICYmIGlkICYmIGlzQ29ubmVjdGVkICYmIHR5cGVvZiBwcm9wcy5vbkRpc2Nvbm5lY3RQZWVyID09PSAnZnVuY3Rpb24nICYmIChcbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBpY29uXG4gICAgICAgICAgICAgICAgICBjb2xvcj1cInJlZFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBwcm9wcy5vbkRpc2Nvbm5lY3RQZWVyKGlkKX1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtgRGlzY29ubmVjdCAke2lkfWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInJlbW92ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtoYXNQZWVyUm93ICYmIGNhblJlcXVlc3RGYWJyaWNSZXN5bmMgJiYgdHlwZW9mIHByb3BzLm9uRmFicmljUGVlclJlc3luYyA9PT0gJ2Z1bmN0aW9uJyAmJiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJGYWJyaWMgY2hhaW4gcmVzeW5jIChpbnZlbnRvcnkgKyBCaXRjb2luQmxvY2sgcmVwbGF5KVwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBwcm9wcy5vbkZhYnJpY1BlZXJSZXN5bmModGNwS2V5Rm9yRmFicmljUmVzeW5jKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic3luY1wiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtoYXNQZWVyUm93ICYmIGlkICYmIHR5cGVvZiBwcm9wcy5vblNldFBlZXJOaWNrbmFtZSA9PT0gJ2Z1bmN0aW9uJyAmJiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvbiBpY29uIG9uQ2xpY2s9e29wZW5OaWNrbmFtZU1vZGFsfSB0aXRsZT1cIlNldCBuaWNrbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cInRhZ1wiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtodWJBZG1pbkNvbGxhYm9yYXRpb25Ub2tlbiAmJiBmYWJyaWNQZWVySWRGb3JDb2xsYWJvcmF0aW9uQ29udGFjdCAmJiAheHB1Yk9ubHlOb1BlZXIgPyAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17Y29udGFjdEFkZEJ1c3l9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17Y29udGFjdEFkZEJ1c3l9XG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIkFkZCB0byBjb250YWN0c1wiXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWRkIHRvIGNvbnRhY3RzXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgYWRkUGVlclRvQ29sbGFib3JhdGlvbkNvbnRhY3RzKCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImFkZHJlc3MgYm9va1wiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9CdXR0b24uR3JvdXA+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgeyF4cHViT25seU5vUGVlciAmJiBoYXNQZWVyUm93ICYmIGlkICYmIGlzQ29ubmVjdGVkICYmIChcbiAgICAgICAgICAoYnJpZGdlUmVmICYmIGJyaWRnZVJlZi5jdXJyZW50ICYmIHR5cGVvZiBicmlkZ2VSZWYuY3VycmVudC5zZW5kUGVlckludmVudG9yeVJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHx8XG4gICAgICAgICAgYWRtaW5Ub2tlblByZXNlbnRcbiAgICAgICAgKSA/IChcbiAgICAgICAgICA8QWNjb3JkaW9uIHN0eWxlZCBmbHVpZCBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjY1cmVtJyB9fT5cbiAgICAgICAgICAgIDxBY2NvcmRpb24uVGl0bGVcbiAgICAgICAgICAgICAgYWN0aXZlPXtwZWVyT3BzQWNjb3JkaW9uT3Blbn1cbiAgICAgICAgICAgICAgaW5kZXg9ezB9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFBlZXJPcHNBY2NvcmRpb25PcGVuKCFwZWVyT3BzQWNjb3JkaW9uT3Blbil9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJkcm9wZG93blwiIC8+XG4gICAgICAgICAgICAgIEludmVudG9yeSwgSFRMQywgZmVkZXJhdGlvbiAoYWR2YW5jZWQpXG4gICAgICAgICAgICA8L0FjY29yZGlvbi5UaXRsZT5cbiAgICAgICAgICAgIDxBY2NvcmRpb24uQ29udGVudCBhY3RpdmU9e3BlZXJPcHNBY2NvcmRpb25PcGVufT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuNXJlbScsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAgICAgIHticmlkZ2VSZWYgJiYgYnJpZGdlUmVmLmN1cnJlbnQgJiYgdHlwZW9mIGJyaWRnZVJlZi5jdXJyZW50LnNlbmRQZWVySW52ZW50b3J5UmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJyA/IChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJSZWxheTogc2VsbGVyIEZhYnJpYyBpZCAob3B0aW9uYWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIldoZW4gdGhpcyBjb25uZWN0aW9uIGlzIGEgcmVsYXksIHNldCB0aGUgc2VsbGVy4oCZcyBGYWJyaWMgaWQgc28gdGhlIGh1YiBmb3J3YXJkcyBkb2N1bWVudC1vZmZlciByZXF1ZXN0cyAoRkFCUklDX0RPQ1VNRU5UX09GRkVSKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2ludmVudG9yeVJlbGF5VGFyZ2V0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiBzZXRJbnZlbnRvcnlSZWxheVRhcmdldCh2YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWluV2lkdGg6ICcxMmVtJywgbWF4V2lkdGg6ICcxOHJlbScsIGZsZXg6ICcxIDEgMTJlbScgfX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ID0gKGludmVudG9yeVJlbGF5VGFyZ2V0IHx8ICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRzID0gdCA/IHsgaW52ZW50b3J5VGFyZ2V0OiB0IH0gOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRJbnZlbnRvcnlSZXF1ZXN0KCdkb2N1bWVudHMnLCBvcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUmVxdWVzdCBkb2N1bWVudCBpbnZlbnRvcnkgZnJvbSB0aGlzIHBlZXJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImxpc3QgYWx0ZXJuYXRlIG91dGxpbmVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIERvY3NcbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIHt0eXBlb2YgYnJpZGdlUmVmLmN1cnJlbnQuZ2V0SHRsY1JlZnVuZFB1YmxpY0tleUhleCA9PT0gJ2Z1bmN0aW9uJyAmJiBicmlkZ2VSZWYuY3VycmVudC5nZXRIdGxjUmVmdW5kUHVibGljS2V5SGV4KCkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZnVuZFBrID0gYnJpZGdlUmVmLmN1cnJlbnQuZ2V0SHRsY1JlZnVuZFB1YmxpY0tleUhleCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ID0gKGludmVudG9yeVJlbGF5VGFyZ2V0IHx8ICcnKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdHMgPSB7IGJ1eWVyUmVmdW5kUHVibGljS2V5OiByZWZ1bmRQayB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCkgb3B0cy5pbnZlbnRvcnlUYXJnZXQgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kSW52ZW50b3J5UmVxdWVzdCgnZG9jdW1lbnRzJywgb3B0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJJbnZlbnRvcnkgd2l0aCBQMlRSIEhUTEMgb24gcHJpY2VkIGl0ZW1zICh5b3VyIGlkZW50aXR5IHB1YmtleSA9IHJlZnVuZCBwYXRoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJpdGNvaW5cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgRG9jcytIVExDXG4gICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAge2FkbWluVG9rZW5QcmVzZW50ID8gKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkV4ZWN1dGlvbiBjb250cmFjdCBpZCAob3B0aW9uYWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZmVkZXJhdGlvbkNvbnRyYWN0SWR9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB7IHZhbHVlIH0pID0+IHNldEZlZGVyYXRpb25Db250cmFjdElkKHZhbHVlKX1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtaW5XaWR0aDogJzEwZW0nLCBtYXhXaWR0aDogJzE2cmVtJywgZmxleDogJzEgMSAxMGVtJyB9fVxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiT3B0aW9uYWwgZXhlY3V0aW9uIGNvbnRyYWN0IGlkIGluY2x1ZGVkIGluIHRoZSBpbnZpdGUgKHNlZSBDb250cmFjdHMpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz17aW52aXRlQnVzeX1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aW52aXRlQnVzeX1cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkFkbWluOiBzZW5kIGZlZGVyYXRpb24gLyBleGVjdXRpb24tY29udHJhY3QgaW52aXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtsYXVuY2hJbnZpdGVOb3RlTW9kYWx9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwidXNlcnNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIEludml0ZVxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvQWNjb3JkaW9uLkNvbnRlbnQ+XG4gICAgICAgICAgPC9BY2NvcmRpb24+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIHtpbnZpdGVFcnJvciA/IChcbiAgICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZSBzaXplPVwic21hbGxcIiBvbkRpc21pc3M9eygpID0+IHNldEludml0ZUVycm9yKG51bGwpfSBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICB7aW52aXRlRXJyb3J9XG4gICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge2ludml0ZU9rID8gKFxuICAgICAgICAgIDxNZXNzYWdlIHN1Y2Nlc3Mgc2l6ZT1cInNtYWxsXCIgb25EaXNtaXNzPXsoKSA9PiBzZXRJbnZpdGVPayhudWxsKX0gc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAge2ludml0ZU9rfVxuICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHtjb250YWN0QWRkRXJyID8gKFxuICAgICAgICAgIDxNZXNzYWdlIG5lZ2F0aXZlIHNpemU9XCJzbWFsbFwiIG9uRGlzbWlzcz17KCkgPT4gc2V0Q29udGFjdEFkZEVycihudWxsKX0gc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAge2NvbnRhY3RBZGRFcnJ9XG4gICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge2NvbnRhY3RBZGRPayA/IChcbiAgICAgICAgICA8TWVzc2FnZSBzdWNjZXNzIHNpemU9XCJzbWFsbFwiIG9uRGlzbWlzcz17KCkgPT4gc2V0Q29udGFjdEFkZE9rKG51bGwpfSBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+XG4gICAgICAgICAgICB7Y29udGFjdEFkZE9rfXsnICd9XG4gICAgICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5ncy9jb2xsYWJvcmF0aW9uXCI+T3BlbiBDb2xsYWJvcmF0aW9uPC9MaW5rPlxuICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgPERpdmlkZXIgLz5cblxuICAgICAgICA8TWVudSBwb2ludGluZyBzZWNvbmRhcnkgY29tcGFjdCBzdHlsZT17eyBtYXJnaW46ICcwIDAgMC42NXJlbScsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgICAgPE1lbnUuSXRlbSBhY3RpdmU9e3BlZXJXb3Jrc3BhY2VUYWIgPT09IDB9IG9uQ2xpY2s9eygpID0+IHNldFBlZXJXb3Jrc3BhY2VUYWIoMCl9PlxuICAgICAgICAgICAgT3ZlcnZpZXdcbiAgICAgICAgICA8L01lbnUuSXRlbT5cbiAgICAgICAgICA8TWVudS5JdGVtXG4gICAgICAgICAgICBhY3RpdmU9e3BlZXJXb3Jrc3BhY2VUYWIgPT09IDF9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBwZWVyICYmIHNldFBlZXJXb3Jrc3BhY2VUYWIoMSl9XG4gICAgICAgICAgICBkaXNhYmxlZD17IXBlZXJ9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgQ2hhdHtwZWVyICYmIHBlZXJDaGF0cy5sZW5ndGggPiAwID8gYCAoJHtwZWVyQ2hhdHMubGVuZ3RofSlgIDogJyd9XG4gICAgICAgICAgPC9NZW51Lkl0ZW0+XG4gICAgICAgICAgPE1lbnUuSXRlbVxuICAgICAgICAgICAgYWN0aXZlPXtwZWVyV29ya3NwYWNlVGFiID09PSAyfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcGVlciAmJiBzZXRQZWVyV29ya3NwYWNlVGFiKDIpfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyFwZWVyfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEludmVudG9yeXtwZWVyICYmIGludmVudG9yeURvY3MubGVuZ3RoID4gMCA/IGAgKCR7aW52ZW50b3J5RG9jcy5sZW5ndGh9KWAgOiAnJ31cbiAgICAgICAgICA8L01lbnUuSXRlbT5cbiAgICAgICAgPC9NZW51PlxuXG4gICAgICAgIHtwZWVyV29ya3NwYWNlVGFiID09PSAwICYmIChcbiAgICAgICAgICA8U2VnbWVudCBiYXNpYyBzdHlsZT17eyBwYWRkaW5nOiAwLCBtYXJnaW5Cb3R0b206ICcwLjc1cmVtJywgYm94U2hhZG93OiAnbm9uZScsIGJvcmRlcjogJ25vbmUnIH19PlxuICAgICAgICAgICAge3BlZXIgPyAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPFRhYmxlIGNvbXBhY3QgZGVmaW5pdGlvbiBzdHJpcGVkIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNjVyZW0nIH19PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ0hvc3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5sb2NhdGlvbi5ob3N0IDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29ublN0ciA9IHBlZXJOYXRpdmVQZWVyaW5nU3RyaW5nKHBlZXIsIHNpZ0hvc3QpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICghY29ublN0cikgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmFsaW5nID0gcGVlclBlZXJpbmdFbmRwb2ludElzU2lnbmFsaW5nKHBlZXIpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlQZWVyaW5nID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb25uU3RyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhLnZhbHVlID0gY29ublN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGEuc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFBlZXJpbmdDb3BpZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHNldFBlZXJpbmdDb3BpZWQoZmFsc2UpLCAxNTAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBjb2xsYXBzaW5nPlBlZXJpbmc8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcsIGZvbnRTaXplOiAnMC44NmVtJyB9fT57Y29ublN0cn08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtjb3B5UGVlcmluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ29weSBwdWJrZXlAaG9zdDpwb3J0IHBlZXJpbmcgc3RyaW5nIGZvciBuYXRpdmUgRmFicmljIGRpYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNvcHkgcGVlcmluZyBzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuMzVlbScsIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3BlZXJpbmdDb3BpZWQgPyAnQ29waWVkJyA6ICdDb3B5J31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGNvbG9yOiAnIzc2NzY3NicsIGZvbnRTaXplOiAnMC44MmVtJywgbWFyZ2luVG9wOiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzaWduYWxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnV2ViUlRDIHNpZ25hbGluZyBob3N0ICh0aGlzIHNpdGUpIOKAlCBicm93c2VycyB3aWxsIHBlZXIgaGVyZTsgbmF0aXZlIG5vZGVzIHVzZSBGYWJyaWMgVENQIHdoZW4gYWR2ZXJ0aXNlZC4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ05hdGl2ZSBGYWJyaWMgZGlhbCBwaW4gKHB1YmtleUBob3N0OnBvcnQpLid9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgY29sbGFwc2luZz5CZWNoMzI8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnLCBmb250U2l6ZTogJzAuODZlbScgfX0+e2ZhYnJpY1BlZXJCZWNoMzJJZChwZWVyKSB8fCAn4oCUJ308L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBjb2xsYXBzaW5nPkFkZHJlc3M8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuODZlbScgfX0+e3Jlc29sdmVkQWRkcmVzcyB8fCAn4oCUJ308L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7KGhvc3QgfHwgcG9ydCkgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnIzc2NzY3NicsIGZvbnRTaXplOiAnMC44MmVtJywgbWFyZ2luTGVmdDogJzAuNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe2hvc3R9e3BvcnQgPyBgOiR7cG9ydH1gIDogJyd9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIGNvbGxhcHNpbmc+RmFicmljIGlkPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcsIGZvbnRTaXplOiAnMC44NmVtJyB9fT57KHBlZXIgJiYgcGVlci5pZCkgfHwgJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBjb2xsYXBzaW5nPk5pY2tuYW1lPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPnsocGVlciAmJiBwZWVyLm5pY2tuYW1lKSB8fCAn4oCUJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIGNvbGxhcHNpbmc+QWxpYXM8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+eyhwZWVyICYmIHBlZXIuYWxpYXMpIHx8ICfigJQnfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgY29sbGFwc2luZz5TY29yZTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57cGVlciAmJiBwZWVyLnNjb3JlICE9IG51bGwgPyBTdHJpbmcocGVlci5zY29yZSkgOiAn4oCUJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIGNvbGxhcHNpbmc+Rmlyc3Qgc2VlbjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57Zm9ybWF0TWF5YmVEYXRlKHBlZXIgJiYgcGVlci5maXJzdFNlZW4pIHx8ICfigJQnfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgY29sbGFwc2luZz5MYXN0IHNlZW48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e2Zvcm1hdE1heWJlRGF0ZShwZWVyICYmIChwZWVyLmxhc3RTZWVuIHx8IHBlZXIubGFzdE1lc3NhZ2UpKSB8fCAn4oCUJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICB7cGVlciAmJiBwZWVyLmNvbm5lY3Rpb24gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIGNvbGxhcHNpbmc+U29ja2V0PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg2ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGVlci5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3MgPyBgJHtwZWVyLmNvbm5lY3Rpb24ucmVtb3RlQWRkcmVzc306JHtwZWVyLmNvbm5lY3Rpb24ucmVtb3RlUG9ydCB8fCAnJ31gIDogJ2Nvbm5lY3RlZCd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwZWVyLmNvbm5lY3Rpb24ubGFzdE1lc3NhZ2UgPyBgIMK3IGxhc3QgbXNnICR7Zm9ybWF0TWF5YmVEYXRlKHBlZXIuY29ubmVjdGlvbi5sYXN0TWVzc2FnZSl9YCA6ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cGVlci5jb25uZWN0aW9uLmZhaWx1cmVDb3VudCAhPSBudWxsID8gYCDCtyBmYWlsdXJlcyAke3BlZXIuY29ubmVjdGlvbi5mYWlsdXJlQ291bnR9YCA6ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgICAgIHtuZWlnaGJvckRvdCA/IChcbiAgICAgICAgICAgICAgICAgIDxTZWdtZW50IHNlY29uZGFyeSBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjM1cmVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC4zNXJlbScgfX0+R29zc2lwIG5laWdoYm9yaG9vZDwvSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjVyZW0nLCBmb250U2l6ZTogJzAuOWVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICBGYWJyaWMgaWRzIGZyb20gPGNvZGU+UDJQX1BFRVJfR09TU0lQPC9jb2RlPi4gVXNlIDxzdHJvbmc+SW52ZW50b3J5PC9zdHJvbmc+IHRhYiDihpIgRG9jcyAob3IgdGhlIGFkdmFuY2VkIHBhbmVsKSBmb3IgZG9jdW1lbnQtb2ZmZXIgcmVxdWVzdHMgKDxjb2RlPkZBQlJJQ19ET0NVTUVOVF9PRkZFUjwvY29kZT4pLlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxHcmFwaERvY3VtZW50UHJldmlldyBkb3RTb3VyY2U9e25laWdoYm9yRG90fSBza2lwSWRlbnRpdHlHYXRlIC8+XG4gICAgICAgICAgICAgICAgICAgIDxMaXN0IHJlbGF4ZWQgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41cmVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICB7Z29zc2lwTmVpZ2hib3JzLm1hcCgobmlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gU3RyaW5nKG5pZCB8fCAnJykudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0Lkl0ZW0ga2V5PXtufT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmsgdG89e2AvcGVlcnMvJHtlbmNvZGVVUklDb21wb25lbnQobil9YH0gdGl0bGU9XCJPcGVuIHBlZXIgZGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJyB9fT57bi5sZW5ndGggPiAzNiA/IGAke24uc2xpY2UoMCwgMTQpfeKApiR7bi5zbGljZSgtMTApfWAgOiBufTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4zNWVtJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJTZXQgYXMgaW52ZW50b3J5IHJlbGF5IHRhcmdldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEludmVudG9yeVJlbGF5VGFyZ2V0KG4pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxheSDihpJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIDwvTGlzdD5cbiAgICAgICAgICAgICAgICAgICAgPGRldGFpbHMgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41cmVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8c3VtbWFyeSBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJywgY29sb3I6ICcjNTU1JywgZm9udFNpemU6ICcwLjg4ZW0nIH19PkRPVCBzb3VyY2U8L3N1bW1hcnk+XG4gICAgICAgICAgICAgICAgICAgICAgPHByZSBzdHlsZT17eyB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLCBmb250U2l6ZTogJzAuNzJyZW0nLCBiYWNrZ3JvdW5kOiAnI2Y1ZjVmNScsIHBhZGRpbmc6ICcwLjQ1cmVtJywgYm9yZGVyUmFkaXVzOiA0IH19PntuZWlnaGJvckRvdH08L3ByZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kZXRhaWxzPlxuICAgICAgICAgICAgICAgICAgPC9TZWdtZW50PlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICkgOiByb3V0ZUxvb2tzTGlrZVhwdWIgPyAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc3R5bGU9e3sgbWFyZ2luOiAwIH19PlxuICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5FeHRlbmRlZCBwdWJsaWMga2V5IChCSVAzMik8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnIH19PlxuICAgICAgICAgICAgICAgICAgVGhpcyBVUkwgdXNlcyBhbiA8Y29kZT54cHViPC9jb2RlPi88Y29kZT50cHViPC9jb2RlPi1zdHlsZSBpZGVudGlmaWVyIOKAlCBvZnRlbiB0aGUgZGlzcGxheSBmb3JtIG9mIGFuXG4gICAgICAgICAgICAgICAgICBhY3Rpdml0eSBzZW5kZXIg4oCUIG5vdCBhIEZhYnJpYyBUQ1AgcGVlci4gUGVlciBjaGF0IGFuZCBpbnZlbnRvcnkgdXNlIGEgY29ubmVjdGVkIG5vZGVcbiAgICAgICAgICAgICAgICAgICg8Y29kZT5ob3N0OnBvcnQ8L2NvZGU+IG9yIEZhYnJpYyBpZCBmcm9tIDxMaW5rIHRvPVwiL3BlZXJzXCI+UGVlcnM8L0xpbms+KS5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxTZWdtZW50IHBsYWNlaG9sZGVyIGJhc2ljIHN0eWxlPXt7IHBhZGRpbmc6ICcxcmVtJyB9fT5cbiAgICAgICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIj5XYWl0aW5nIGZvciBwZWVyIHJlY29yZOKApjwvSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIG1hcmdpbjogJzAuMzVlbSAwIDAuNjVlbScsIGZvbnRTaXplOiAnMC45MmVtJyB9fT5cbiAgICAgICAgICAgICAgICAgIE5vIG1hdGNoaW5nIGVudHJ5IGluIHRoZSBodWIgc25hcHNob3QgeWV0LiBVc2UgPHN0cm9uZz5SZWZyZXNoPC9zdHJvbmc+LCBvciBvcGVueycgJ31cbiAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPVwiL3BlZXJzXCI+UGVlcnM8L0xpbms+IGFuZCBhZGQgPGNvZGU+aG9zdDpwb3J0PC9jb2RlPi4gQWZ0ZXIgPGNvZGU+R2V0UGVlcjwvY29kZT4gcmV0dXJucywgZGV0YWlscyBhcHBlYXIgaGVyZS5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPExvYWRlciBhY3RpdmUgaW5saW5lPVwiY2VudGVyZWRcIiBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICAgICAgICAgIHtwZWVyUmVzb2x2ZVNsb3cgPyAoXG4gICAgICAgICAgICAgICAgICA8TWVzc2FnZSB3YXJuaW5nIHN0eWxlPXt7IG1hcmdpblRvcDogJzAuODVlbScsIHRleHRBbGlnbjogJ2xlZnQnIH19IHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+U2xvdyB0byByZXNvbHZlPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC4yNWVtIDAgMCcsIGZvbnRTaXplOiAnMC45ZW0nIH19PlxuICAgICAgICAgICAgICAgICAgICAgIENoZWNrIHRoYXQgdGhlIEJyaWRnZSBpcyBjb25uZWN0ZWQuIEFkZCB0aGUgcGVlciBmcm9tIHRoZSBsaXN0IHBhZ2UsIHRoZW4gcmVvcGVuIHRoaXMgbGluay5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKX1cblxuICAgICAgICB7cGVlcldvcmtzcGFjZVRhYiA9PT0gMSAmJiBwZWVyICYmIChcbiAgICAgICAgICA8U2VnbWVudCBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIiBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+Q2hhdDwvSGVhZGVyPlxuICAgICAgICAgICAgeyFoYXNVbmxvY2tlZElkZW50aXR5ICYmIChcbiAgICAgICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nIH19PlxuICAgICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5JZGVudGl0eSBsb2NrZWQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogMCwgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICAgICAgICAgIFVubG9jayB5b3VyIGlkZW50aXR5IChsb2NhbCBzaWduaW5nIG1hdGVyaWFsKSB0byBzZW5kIEZhYnJpYyBwZWVyIGNoYXQg4oCUIHRvcC1iYXIgPHN0cm9uZz5Mb2NrZWQ8L3N0cm9uZz4gLyBpZGVudGl0eSBtZW51LCBvcnsnICd9XG4gICAgICAgICAgICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5nc1wiPlNldHRpbmdzPC9MaW5rPiDihpIgPHN0cm9uZz5GYWJyaWMgaWRlbnRpdHk8L3N0cm9uZz4uIFJlY2VpdmVkIG1lc3NhZ2VzIHN0aWxsIGFwcGVhciBoZXJlLlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtoYXNVbmxvY2tlZElkZW50aXR5ICYmICFpc0Nvbm5lY3RlZCAmJiAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAgICBQZWVyIGlzIG9mZmxpbmUg4oCUIG1lc3NhZ2VzIGFyZSA8c3Ryb25nPnF1ZXVlZDwvc3Ryb25nPiBhbmQgc2VudCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHVwIChzYW1lIGh1YiA8Y29kZT5TZW5kUGVlck1lc3NhZ2U8L2NvZGU+IHBhdGgpLlxuICAgICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3BlZXJDaGF0cy5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICA8TGlzdCBkaXZpZGVkIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgIHtwZWVyQ2hhdHMubWFwKChjaGF0LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY3JlYXRlZCA9IChjaGF0Lm9iamVjdCAmJiBjaGF0Lm9iamVjdC5jcmVhdGVkKSB8fCBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYnJpZGdlSW5zdGFuY2UgPSBwcm9wcy5icmlkZ2VSZWY/LmN1cnJlbnQgfHwgcHJvcHMuYnJpZGdlPy5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmF3QWN0b3IgPSAoY2hhdC5hY3RvciAmJiAoY2hhdC5hY3Rvci51c2VybmFtZSB8fCBjaGF0LmFjdG9yLmlkKSkgfHwgJ3Vua25vd24nO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYWN0b3IgPSAoYnJpZGdlSW5zdGFuY2UgJiYgdHlwZW9mIGJyaWRnZUluc3RhbmNlLmdldFBlZXJEaXNwbGF5TmFtZSA9PT0gJ2Z1bmN0aW9uJyAmJiBjaGF0LmFjdG9yPy5pZClcbiAgICAgICAgICAgICAgICAgICAgPyBicmlkZ2VJbnN0YW5jZS5nZXRQZWVyRGlzcGxheU5hbWUoY2hhdC5hY3Rvci5pZClcbiAgICAgICAgICAgICAgICAgICAgOiByYXdBY3RvcjtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSAoY2hhdC5vYmplY3QgJiYgKGNoYXQub2JqZWN0LmNvbnRlbnQgfHwgY2hhdC5vYmplY3QuYm9keSB8fCBjaGF0Lm9iamVjdC50ZXh0KSkgfHwgJyc7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc1BlbmRpbmcgPSBjaGF0LnN0YXR1cyA9PT0gJ3BlbmRpbmcnO1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNRdWV1ZWQgPSBjaGF0LnN0YXR1cyA9PT0gJ3F1ZXVlZCc7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogKGlzUGVuZGluZyB8fCBpc1F1ZXVlZCkgPyAwLjcgOiAxLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogaXNRdWV1ZWQgPyAnIzg4OCcgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8TGlzdC5JdGVtIGtleT17YCR7Y3JlYXRlZH0tJHtpbmRleH1gfT5cbiAgICAgICAgICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPExpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB7YWN0b3J9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzUGVuZGluZyAmJiAnIChzZW5kaW5n4oCmKSd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2lzUXVldWVkICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJleGNsYW1hdGlvbiBjaXJjbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImdyZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC4zNWVtJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlRoaXMgbWVzc2FnZSB3aWxsIGJlIHNlbnQgd2hlbiB0aGUgcGVlciBpcyBvbmxpbmUuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxMaXN0LkRlc2NyaXB0aW9uIHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8L0xpc3QuSXRlbT5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvTGlzdD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+Tm8gY2hhdCBtZXNzYWdlcyB5ZXQgZm9yIHRoaXMgcGVlci48L3A+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2NoYXREZXN0ICYmIHR5cGVvZiBwcm9wcy5vblNlbmRQZWVyTWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJyAmJiAoXG4gICAgICAgICAgICAgIDxDaGF0SW5wdXRcbiAgICAgICAgICAgICAgICB2YWx1ZT17b3V0Z29pbmdUZXh0fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRPdXRnb2luZ1RleHR9XG4gICAgICAgICAgICAgICAgb25TdWJtaXQ9eyh0ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoY2FuU2VuZFBlZXJDaGF0ICYmIHR5cGVvZiBwcm9wcy5vblNlbmRQZWVyTWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5vblNlbmRQZWVyTWVzc2FnZShjaGF0RGVzdCwgdGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHNldE91dGdvaW5nVGV4dCgnJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17aGFzVW5sb2NrZWRJZGVudGl0eSA/ICdUeXBlIGEgbWVzc2FnZeKApicgOiAnVW5sb2NrIGlkZW50aXR5IHRvIHNlbmTigKYnfVxuICAgICAgICAgICAgICAgIHRpdGxlPXtgU2VuZCB0byAke2NoYXREZXN0fSB2aWEgaHViIChQMlBfQ0hBVF9NRVNTQUdFIC8gU2VuZFBlZXJNZXNzYWdlKWB9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjYW5TZW5kUGVlckNoYXR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgKX1cblxuICAgICAgICB7cGVlcldvcmtzcGFjZVRhYiA9PT0gMiAmJiBwZWVyICYmIChcbiAgICAgICAgICA8U2VnbWVudCBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIiBzdHlsZT17eyBtYXJnaW5Ub3A6IDAgfX0+UHVibGlzaGVyIGludmVudG9yeTwvSGVhZGVyPlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luQm90dG9tOiAnMC42NWVtJywgZm9udFNpemU6ICcwLjkyZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgICBEb2N1bWVudHMgb2ZmZXJlZCBieSB0aGlzIDxzdHJvbmc+cHVibGlzaGVyPC9zdHJvbmc+XG4gICAgICAgICAgICAgIHtpZCA/IDw+IChGYWJyaWMgcGVlciA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuOWVtJyB9fT57aWQubGVuZ3RoID4gMjQgPyBgJHtpZC5zbGljZSgwLCAxMil94oCmJHtpZC5zbGljZSgtOCl9YCA6IGlkfTwvY29kZT4pPC8+IDogJyd9LlxuICAgICAgICAgICAgICA8c3Ryb25nPiBBdXRob3I8L3N0cm9uZz4gaXMgdGhlIGNyZWF0b3ImYXBvcztzIGRvY3VtZW50IGlkIHdoZW4ga25vd24gKGxpbmVhZ2UpLiBXaXRoIHRoZSBwZWVyIDxzdHJvbmc+Y29ubmVjdGVkPC9zdHJvbmc+LCB1c2UgdGhlIGFkdmFuY2VkIHBhbmVsIDxzdHJvbmc+RG9jczwvc3Ryb25nPiBidXR0b24gdG8gc2VuZCBhIGRvY3VtZW50LW9mZmVyIHJlcXVlc3Q7IHJlc3BvbnNlcyBhcmUgbWVyZ2VkIHVuZGVyIHRoaXMgcGVlciZhcG9zO3MgRmFicmljIGlkIGFuZCBUQ1AgYWRkcmVzcyBrZXlzLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAge2ludmVudG9yeVJlcXVlc3RNZXRhICYmIChcbiAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nLCBjb2xvcjogaW52ZW50b3J5UmVxdWVzdE1ldGEuc3RhdHVzID09PSAnZXJyb3InID8gJyM5ZjNhMzgnIDogaW52ZW50b3J5UmVxdWVzdE1ldGEuc3RhdHVzID09PSAnYWNjZXB0ZWQnID8gJyMyNzY3NDknIDogJyM2NjYnLCBtYXJnaW5Cb3R0b206ICcwLjY1ZW0nIH19PlxuICAgICAgICAgICAgICAgIExhc3QgaW52ZW50b3J5IHJlcXVlc3Q6IHtmb3JtYXRNYXliZURhdGUoaW52ZW50b3J5UmVxdWVzdE1ldGEuYXQpfVxuICAgICAgICAgICAgICAgIHtpbnZlbnRvcnlSZXF1ZXN0TWV0YS5raW5kID8gYCAoJHtpbnZlbnRvcnlSZXF1ZXN0TWV0YS5raW5kfSlgIDogJyd9XG4gICAgICAgICAgICAgICAge2ludmVudG9yeVJlcXVlc3RNZXRhLnJlcXVlc3RWaWEgPT09ICdodHRwJyA/ICcgwrcgSFRUUCBmYWxsYmFjaycgOiAnJ31cbiAgICAgICAgICAgICAgICB7aW52ZW50b3J5UmVxdWVzdE1ldGEucmVxdWVzdFZpYSA9PT0gJ3dzJyA/ICcgwrcgd2Vic29ja2V0JyA6ICcnfVxuICAgICAgICAgICAgICAgIHtpbnZlbnRvcnlSZXF1ZXN0TWV0YS5odWJNZXNzYWdlXG4gICAgICAgICAgICAgICAgICA/IGAg4oCUICR7aW52ZW50b3J5UmVxdWVzdE1ldGEuaHViTWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICA6IGludmVudG9yeVJlcXVlc3RNZXRhLnN0YXR1cyA9PT0gJ2FjY2VwdGVkJ1xuICAgICAgICAgICAgICAgICAgICA/IGAg4oCUIGh1YiBhY2NlcHRlZCBhbmQgc2VudCB0aGUgcGVlciByZXF1ZXN0LmBcbiAgICAgICAgICAgICAgICAgICAgOiBgIOKAlCAke2ludmVudG9yeURvY3MubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IGAke2ludmVudG9yeURvY3MubGVuZ3RofSBpdGVtKHMpIGluIGNsaWVudCBzdGF0ZS5gXG4gICAgICAgICAgICAgICAgICAgIDogJ25vIGl0ZW1zIHlldCAod2FpdCBmb3IgcmVzcG9uc2Ugb3IgY2hlY2sgcmVsYXkgdGFyZ2V0KS4nfWB9XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgIHRvZ2dsZVxuICAgICAgICAgICAgICAgIGxhYmVsPVwiRGVidWc6IHNob3cgcmF3IGludmVudG9yeSBKU09OXCJcbiAgICAgICAgICAgICAgICBjaGVja2VkPXtpbnZlbnRvcnlEZWJ1Z09wZW59XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhfZSwgZGF0YSkgPT4gc2V0SW52ZW50b3J5RGVidWdPcGVuKCEhKGRhdGEgJiYgZGF0YS5jaGVja2VkKSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHtpbnZlbnRvcnlEZWJ1Z09wZW4gJiYgKFxuICAgICAgICAgICAgICA8U2VnbWVudCBzZWNvbmRhcnkgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC43NWVtJywgb3ZlcmZsb3c6ICdhdXRvJywgbWF4SGVpZ2h0OiAnNDB2aCcgfX0+XG4gICAgICAgICAgICAgICAgPHByZSBzdHlsZT17eyBtYXJnaW46IDAsIGZvbnRTaXplOiAnMC43NXJlbScsIHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+XG4gICAgICAgICAgICAgICAgICB7SlNPTi5zdHJpbmdpZnkoaW52ZW50b3J5RG9jcywgbnVsbCwgMil9XG4gICAgICAgICAgICAgICAgPC9wcmU+XG4gICAgICAgICAgICAgIDwvU2VnbWVudD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7aHRsY0NvbmZpcm1GZWVkYmFjayAmJiAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlXG4gICAgICAgICAgICAgICAgcG9zaXRpdmU9e2h0bGNDb25maXJtRmVlZGJhY2suc3RhdHVzID09PSAnc3VjY2Vzcyd9XG4gICAgICAgICAgICAgICAgbmVnYXRpdmU9e2h0bGNDb25maXJtRmVlZGJhY2suc3RhdHVzID09PSAnZXJyb3InfVxuICAgICAgICAgICAgICAgIG9uRGlzbWlzcz17KCkgPT4gc2V0SHRsY0NvbmZpcm1GZWVkYmFjayhudWxsKX1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nLCB0ZXh0QWxpZ246ICdsZWZ0JyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAge2h0bGNDb25maXJtRmVlZGJhY2suc3RhdHVzID09PSAnc3VjY2VzcydcbiAgICAgICAgICAgICAgICAgICAgPyAnSFRMQyB2ZXJpZmllZCDigJQgZG9jdW1lbnQgdHJhbnNmZXInXG4gICAgICAgICAgICAgICAgICAgIDogJ0hUTEMgY29uZmlybWF0aW9uJ31cbiAgICAgICAgICAgICAgICA8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICAgIHsoaHRsY0NvbmZpcm1GZWVkYmFjay5tZXNzYWdlIHx8IGh0bGNDb25maXJtRmVlZGJhY2suZnVuZGVkKSAmJiAoXG4gICAgICAgICAgICAgICAgICA8cD57aHRsY0NvbmZpcm1GZWVkYmFjay5tZXNzYWdlIHx8IChodGxjQ29uZmlybUZlZWRiYWNrLmZ1bmRlZCA/ICdGdW5kaW5nIGFjY2VwdGVkOyBmaXggY29ubmVjdGlvbiBvciByZXRyeSBpZiBuZWVkZWQuJyA6ICcnKX08L3A+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7aHRsY0NvbmZpcm1GZWVkYmFjay5kb2N1bWVudElkICYmIChcbiAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiAnMC45ZW0nIH19PkRvY3VtZW50IDxjb2RlPntodGxjQ29uZmlybUZlZWRiYWNrLmRvY3VtZW50SWR9PC9jb2RlPjwvcD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtodGxjQ29uZmlybUZlZWRiYWNrLnR4aWQgJiYgKFxuICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9e3sgZm9udFNpemU6ICcwLjllbScgfX0+XG4gICAgICAgICAgICAgICAgICAgIFR4aWR7JyAnfVxuICAgICAgICAgICAgICAgICAgICB7dWYuYml0Y29pbkV4cGxvcmVyID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxMaW5rIHRvPXtgL3NlcnZpY2VzL2JpdGNvaW4vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhodGxjQ29uZmlybUZlZWRiYWNrLnR4aWQpLnRyaW0oKSl9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT57aHRsY0NvbmZpcm1GZWVkYmFjay50eGlkfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L0xpbms+XG4gICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGNvZGUgdGl0bGU9XCJFbmFibGUgQml0Y29pbiDigJQgQmxvY2sgJiB0cmFuc2FjdGlvbiBkZXRhaWwgcm91dGVzIGluIEFkbWluIOKGkiBGZWF0dXJlIHZpc2liaWxpdHkgZm9yIHRoZSB0eCB2aWV3ZXJcIj57aHRsY0NvbmZpcm1GZWVkYmFjay50eGlkfTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjNjY2JyB9fT4g4oCUIG1lbXBvb2wgdW50aWwgY29uZmlybWVkIG9uLWNoYWluPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7aW52ZW50b3J5RG9jcy5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICA8TGlzdCBkaXZpZGVkIHJlbGF4ZWQgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICAgICAge2ludmVudG9yeURvY3MubWFwKChkb2MsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8TGlzdC5JdGVtIGtleT17KGRvYyAmJiBkb2MuaWQpIHx8IGluZGV4fT5cbiAgICAgICAgICAgICAgICAgICAgPExpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7KGRvYyAmJiBkb2MubmFtZSkgfHwgKGRvYyAmJiBkb2MuaWQpIHx8ICdEb2N1bWVudCd9XG4gICAgICAgICAgICAgICAgICAgICAgPC9MaXN0LkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8TGlzdC5EZXNjcmlwdGlvbiBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge2RvYyAmJiBkb2MuaWQgJiYgKDxzcGFuPklEOiA8Y29kZT57ZG9jLmlkfTwvY29kZT48L3NwYW4+KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtkb2MgJiYgKGRvYy5saW5lYWdlIHx8IGRvYy5pZCkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8PiDigJQgYXV0aG9yIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC45ZW0nIH19PntTdHJpbmcoZG9jLmxpbmVhZ2UgfHwgZG9jLmlkKS5sZW5ndGggPiAyMCA/IGAke1N0cmluZyhkb2MubGluZWFnZSB8fCBkb2MuaWQpLnNsaWNlKDAsIDEwKX3igKYke1N0cmluZyhkb2MubGluZWFnZSB8fCBkb2MuaWQpLnNsaWNlKC02KX1gIDogU3RyaW5nKGRvYy5saW5lYWdlIHx8IGRvYy5pZCl9PC9jb2RlPjwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtkb2MgJiYgZG9jLnNpemUgIT0gbnVsbCAmJiA8PiDigJQge2RvYy5zaXplfSBieXRlczwvPn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtkb2MgJiYgZG9jLnB1Ymxpc2hlZCAmJiA8PiDigJQgcHVibGlzaGVkPC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAge2RvYyAmJiBkb2MucHVyY2hhc2VQcmljZVNhdHMgIT0gbnVsbCAmJiA8PiDigJQgPHN0cm9uZz57Zm9ybWF0U2F0c0Rpc3BsYXkoZG9jLnB1cmNoYXNlUHJpY2VTYXRzKX0gc2F0czwvc3Ryb25nPjwvPn1cbiAgICAgICAgICAgICAgICAgICAgICA8L0xpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAge2RvYyAmJiBkb2MuaHRsYyAmJiBkb2MuaHRsYy5zZXR0bGVtZW50SWQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjc1ZW0nLCBmb250U2l6ZTogJzAuODVlbScsIHRleHRBbGlnbjogJ2xlZnQnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY29sb3I9XCJvcmFuZ2VcIiBzaXplPVwic21hbGxcIj5QMlRSIEhUTEM8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMzVlbScgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57Zm9ybWF0U2F0c0Rpc3BsYXkoZG9jLmh0bGMuYW1vdW50U2F0cyB8fCAwKX0gc2F0czwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkb2MuaHRsYy5hbW91bnRCdGMgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD4gKDxjb2RlPntkb2MuaHRsYy5hbW91bnRCdGN9PC9jb2RlPiBCVEMpPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JyAnfeKGkiA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19Pntkb2MuaHRsYy5wYXltZW50QWRkcmVzc308L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7ZG9jLmh0bGMuYml0Y29pblVyaSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScsIGRpc3BsYXk6ICdmbGV4JywgZmxleFdyYXA6ICd3cmFwJywgZ2FwOiAnMC43NWVtJywgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2h0bGNGdW5kaW5nUXJCeVNldHRsZW1lbnRbZG9jLmh0bGMuc2V0dGxlbWVudElkXSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9e2h0bGNGdW5kaW5nUXJCeVNldHRsZW1lbnRbZG9jLmh0bGMuc2V0dGxlbWVudElkXX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJCSVAyMSBmdW5kaW5nIFFSXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBib3JkZXJSYWRpdXM6IDQsIGJvcmRlcjogJzFweCBzb2xpZCAjZGRkJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvcHlIdGxjRnVuZGluZyhkb2MuaHRsYy5iaXRjb2luVXJpLCBgJHtkb2MuaHRsYy5zZXR0bGVtZW50SWR9OnVyaWApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHlcIiAvPiB7aHRsY0Z1bmRpbmdDb3BpZWQgPT09IGAke2RvYy5odGxjLnNldHRsZW1lbnRJZH06dXJpYCA/ICdDb3BpZWQnIDogJ0NvcHkgQklQMjEgVVJJJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb3B5SHRsY0Z1bmRpbmcoZG9jLmh0bGMucGF5bWVudEFkZHJlc3MsIGAke2RvYy5odGxjLnNldHRsZW1lbnRJZH06YWRkcmApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvcHlcIiAvPiB7aHRsY0Z1bmRpbmdDb3BpZWQgPT09IGAke2RvYy5odGxjLnNldHRsZW1lbnRJZH06YWRkcmAgPyAnQ29waWVkJyA6ICdDb3B5IGFkZHJlc3MnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FkbWluVG9rZW5QcmVzZW50ICYmIGRvYy5odGxjLmJpdGNvaW5VcmkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzPVwiYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtTdHJpbmcoZG9jLmh0bGMuYml0Y29pblVyaSkudHJpbSgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIk9wZW4gQklQMjEgVVJJIGluIHlvdXIgZGVmYXVsdCB3YWxsZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYml0Y29pblwiIC8+IFBheSBOb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwib3JhbmdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz17YnJpZGdlUGF5U2V0dGxlbWVudElkID09PSBkb2MuaHRsYy5zZXR0bGVtZW50SWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXticmlkZ2VQYXlTZXR0bGVtZW50SWQgPT09IGRvYy5odGxjLnNldHRsZW1lbnRJZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17YXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gZ2V0QWRtaW5QZWVyVG9vbHNUb2tlbkZyb21Qcm9wcyhwcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaCA9IGRvYy5odGxjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIWggfHwgIWgucGF5bWVudEFkZHJlc3MpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCcmlkZ2VQYXlTZXR0bGVtZW50SWQoaC5zZXR0bGVtZW50SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEh0bGNDb25maXJtRmVlZGJhY2sobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwc3RyZWFtID0gbG9hZFVwc3RyZWFtU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlbmRCcmlkZ2VQYXltZW50KHVwc3RyZWFtLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvOiBoLnBheW1lbnRBZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnRTYXRzOiBNYXRoLnJvdW5kKE51bWJlcihoLmFtb3VudFNhdHMgfHwgMCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vOiBgSFRMQyAke2guc2V0dGxlbWVudElkfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR4aWQgPSByZXMgJiYgcmVzLnBheW1lbnQgJiYgcmVzLnBheW1lbnQudHhpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFN0cmluZyhyZXMucGF5bWVudC50eGlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR4aWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SHRsY1R4aWRzKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBbaC5zZXR0bGVtZW50SWRdOiB0eGlkIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SHRsY0NvbmZpcm1GZWVkYmFjayh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEh1YiB3YWxsZXQgc2VudCB0cmFuc2FjdGlvbi4gVHhpZCBmaWxsZWQgYmVsb3cg4oCUIHVzZSBDb25maXJtIHdoZW4gcmVhZHkuYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SHRsY0NvbmZpcm1GZWVkYmFjayh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IChyZXMgJiYgcmVzLm1lc3NhZ2UpID8gcmVzLm1lc3NhZ2UgOiAnTm8gdHhpZCByZXR1cm5lZCBmcm9tIEh1YiB3YWxsZXQuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEh0bGNDb25maXJtRmVlZGJhY2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVyciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCcmlkZ2VQYXlTZXR0bGVtZW50SWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlNwZW5kIGZyb20gdGhpcyBIdWIgYml0Y29pbmQgd2FsbGV0IChyZXF1aXJlcyBhZG1pbiB0b2tlbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2VydmVyXCIgLz4gUGF5IGZyb20gQnJpZGdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMzVlbScsIGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCA8Y29kZT57U3RyaW5nKGRvYy5odGxjLnBheW1lbnRIYXNoSGV4IHx8ICcnKS5zbGljZSgwLCAxNil94oCmPC9jb2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnIMK3ICd9cmVmdW5kIENMVFYgaGVpZ2h0IDxjb2RlPntkb2MuaHRsYy5yZWZ1bmRMb2NrSGVpZ2h0fTwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC41ZW0nLCBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzAuNWVtJywgZmxleFdyYXA6ICd3cmFwJywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZ1bmRpbmcgdHhpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogJzEgMSAxMGVtJywgbWluV2lkdGg6ICcxMmVtJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2h0bGNUeGlkc1tkb2MuaHRsYy5zZXR0bGVtZW50SWRdIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB7IHZhbHVlIH0pID0+IHNldEh0bGNUeGlkcygocHJldikgPT4gKHsgLi4ucHJldiwgW2RvYy5odGxjLnNldHRsZW1lbnRJZF06IHZhbHVlIH0pKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IShicmlkZ2VSZWYgJiYgYnJpZGdlUmVmLmN1cnJlbnQgJiYgdHlwZW9mIGJyaWRnZVJlZi5jdXJyZW50LnNlbmRDb25maXJtSW52ZW50b3J5SHRsY1BheW1lbnQgPT09ICdmdW5jdGlvbicpIHx8ICEoaHRsY1R4aWRzW2RvYy5odGxjLnNldHRsZW1lbnRJZF0gfHwgJycpLnRyaW0oKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHggPSAoaHRsY1R4aWRzW2RvYy5odGxjLnNldHRsZW1lbnRJZF0gfHwgJycpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyaWRnZVJlZiAmJiBicmlkZ2VSZWYuY3VycmVudCAmJiB0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZVJlZi5jdXJyZW50LnNlbmRDb25maXJtSW52ZW50b3J5SHRsY1BheW1lbnQoZG9jLmh0bGMuc2V0dGxlbWVudElkLCB0eCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlybSBIVExDICZhbXA7IHJlY2VpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7L15bYS1mQS1GMC05XXs2NH0kLy50ZXN0KFN0cmluZyhodGxjVHhpZHNbZG9jLmh0bGMuc2V0dGxlbWVudElkXSB8fCAnJykudHJpbSgpKSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Zi5iaXRjb2luRXhwbG9yZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nLCBhbGlnblNlbGY6ICdjZW50ZXInIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG89e2Avc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGh0bGNUeGlkc1tkb2MuaHRsYy5zZXR0bGVtZW50SWRdKS50cmltKCkpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IGZ1bmRpbmcgdHhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9MaW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgZm9udFNpemU6ICcwLjg1ZW0nIH19IHRpdGxlPVwiRW5hYmxlIEJpdGNvaW4g4oCUIEJsb2NrICYgdHJhbnNhY3Rpb24gZGV0YWlsIHJvdXRlcyBpbiBBZG1pbiDihpIgRmVhdHVyZSB2aXNpYmlsaXR5IGZvciB0aGUgdHggdmlld2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1N0cmluZyhodGxjVHhpZHNbZG9jLmh0bGMuc2V0dGxlbWVudElkXSkudHJpbSgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L0xpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L0xpc3Q+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19Pk5vIHJlbW90ZSBkb2N1bWVudCBpbnZlbnRvcnkgeWV0LiBVc2UgPHN0cm9uZz5Eb2NzPC9zdHJvbmc+ICh3aGVuIGNvbm5lY3RlZCkgdG8gc2VuZCBhIGRvY3VtZW50LW9mZmVyIHJlcXVlc3QuPC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgICl9XG4gICAgICAgIDxNb2RhbFxuICAgICAgICAgIG9wZW49e25pY2tNb2RhbE9wZW59XG4gICAgICAgICAgc2l6ZT1cInRpbnlcIlxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldE5pY2tNb2RhbE9wZW4oZmFsc2UpfVxuICAgICAgICAgIGNsb3NlT25EaW1tZXJDbGlja1xuICAgICAgICAgIGNsb3NlT25Fc2NhcGVcbiAgICAgICAgPlxuICAgICAgICAgIDxNb2RhbC5IZWFkZXI+U2V0IHBlZXIgbmlja25hbWU8L01vZGFsLkhlYWRlcj5cbiAgICAgICAgICA8TW9kYWwuQ29udGVudD5cbiAgICAgICAgICAgIDxGb3JtXG4gICAgICAgICAgICAgIG9uU3VibWl0PXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBzdWJtaXROaWNrbmFtZSgpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInBlZXItbmlja25hbWUtaW5wdXRcIj5OaWNrbmFtZSAobm9kZS1sb2NhbCk8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJwZWVyLW5pY2tuYW1lLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtuaWNrRHJhZnR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldE5pY2tEcmFmdChlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17YE5pY2tuYW1lIGZvciAke2lkfWB9XG4gICAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezEyOH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0Zvcm0uRmllbGQ+XG4gICAgICAgICAgICA8L0Zvcm0+XG4gICAgICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgICAgICAgIDxNb2RhbC5BY3Rpb25zPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gc2V0Tmlja01vZGFsT3BlbihmYWxzZSl9PkNhbmNlbDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcHJpbWFyeSBvbkNsaWNrPXtzdWJtaXROaWNrbmFtZX0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJ0YWdcIiAvPlxuICAgICAgICAgICAgICBTYXZlIG5pY2tuYW1lXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L01vZGFsLkFjdGlvbnM+XG4gICAgICAgIDwvTW9kYWw+XG4gICAgICAgIDxNb2RhbFxuICAgICAgICAgIG9wZW49e2ludml0ZU5vdGVNb2RhbE9wZW59XG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRJbnZpdGVOb3RlTW9kYWxPcGVuKGZhbHNlKX1cbiAgICAgICAgICBjbG9zZU9uRGltbWVyQ2xpY2tcbiAgICAgICAgICBjbG9zZU9uRXNjYXBlXG4gICAgICAgID5cbiAgICAgICAgICA8TW9kYWwuSGVhZGVyPkludml0ZSBwZWVyIHRvIGNvbnRyYWN0PC9Nb2RhbC5IZWFkZXI+XG4gICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICA8Rm9ybVxuICAgICAgICAgICAgICBvblN1Ym1pdD17YXN5bmMgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgc3VibWl0SW52aXRlVG9Db250cmFjdCgpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Rm9ybS5GaWVsZD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInBlZXItaW52aXRlLW5vdGUtaW5wdXRcIj5PcHRpb25hbCBtZXNzYWdlIGZvciBpbnZpdGVlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8Rm9ybS5UZXh0QXJlYVxuICAgICAgICAgICAgICAgICAgaWQ9XCJwZWVyLWludml0ZS1ub3RlLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtpbnZpdGVOb3RlRHJhZnR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEludml0ZU5vdGVEcmFmdChlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk9wdGlvbmFsIG5vdGUuLi5cIlxuICAgICAgICAgICAgICAgICAgcm93cz17NH1cbiAgICAgICAgICAgICAgICAgIG1heExlbmd0aD17NTAwfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvRm9ybS5GaWVsZD5cbiAgICAgICAgICAgIDwvRm9ybT5cbiAgICAgICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgPE1vZGFsLkFjdGlvbnM+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRJbnZpdGVOb3RlTW9kYWxPcGVuKGZhbHNlKX0+Q2FuY2VsPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBwcmltYXJ5IGxvYWRpbmc9e2ludml0ZUJ1c3l9IGRpc2FibGVkPXtpbnZpdGVCdXN5fSBvbkNsaWNrPXtzdWJtaXRJbnZpdGVUb0NvbnRyYWN0fT5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInVzZXJzXCIgLz5cbiAgICAgICAgICAgICAgU2VuZCBpbnZpdGVcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvTW9kYWwuQWN0aW9ucz5cbiAgICAgICAgPC9Nb2RhbD5cbiAgICAgIDwvU2VnbWVudD5cbiAgICA8L2ZhYnJpYy1wZWVyLWRldGFpbD5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQZWVyRGV0YWlsO1xuIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIlN5bWJvbCIsIm4iLCJpdGVyYXRvciIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsIm5leHQiLCJwdXNoIiwiaXNBcnJheSIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJfdHlwZW9mIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiUmVhY3QiLCJyZXF1aXJlIiwiUVJDb2RlIiwiX3JlcXVpcmUiLCJMaW5rIiwidXNlTmF2aWdhdGUiLCJ1c2VQYXJhbXMiLCJfcmVxdWlyZTIiLCJBY2NvcmRpb24iLCJCdXR0b24iLCJDaGVja2JveCIsIkRpdmlkZXIiLCJGb3JtIiwiSGVhZGVyIiwiSWNvbiIsIklucHV0IiwiTGFiZWwiLCJMaXN0IiwiTWVzc2FnZSIsIk1vZGFsIiwiU2VnbWVudCIsIkxvYWRlciIsIk1lbnUiLCJUYWJsZSIsIkNoYXRJbnB1dCIsIl9yZXF1aXJlMyIsImZvcm1hdFNhdHNEaXNwbGF5IiwiX3JlcXVpcmU0IiwibG9hZFVwc3RyZWFtU2V0dGluZ3MiLCJzZW5kQnJpZGdlUGF5bWVudCIsIl9yZXF1aXJlNSIsInBlZXJOZWlnaGJvcmhvb2RUb0RvdCIsIkdyYXBoRG9jdW1lbnRQcmV2aWV3IiwiX3JlcXVpcmU2IiwiaXNIdWJOZXR3b3JrU3RhdHVzU2hhcGUiLCJfcmVxdWlyZTciLCJpc0xpa2VseUJpcDMyRXh0ZW5kZWRLZXkiLCJfcmVxdWlyZTgiLCJzaG9ydGVuUHVibGljSWQiLCJmYWJyaWNQZWVyQmVjaDMySWQiLCJwZWVyTmF0aXZlUGVlcmluZ1N0cmluZyIsInBlZXJQZWVyaW5nRW5kcG9pbnRJc1NpZ25hbGluZyIsIl9yZXF1aXJlOSIsInJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIiLCJfcmVxdWlyZTAiLCJsb2FkSHViVWlGZWF0dXJlRmxhZ3MiLCJzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncyIsImdldEFkbWluUGVlclRvb2xzVG9rZW5Gcm9tUHJvcHMiLCJwcm9wcyIsImFkbWluUGVlclRvb2xzVG9rZW4iLCJ0cmltIiwiaHViSnNvblJwYyIsIl94IiwiX3gyIiwiX2h1Ykpzb25ScGMiLCJfY2FsbGVlNSIsIm1ldGhvZCIsInBhcmFtcyIsInJlcyIsImJvZHkiLCJfdDQiLCJfY29udGV4dDUiLCJmZXRjaCIsImNvbmNhdCIsIndpbmRvdyIsImxvY2F0aW9uIiwib3JpZ2luIiwiaGVhZGVycyIsIkFjY2VwdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJqc29ucnBjIiwiaWQiLCJqc29uIiwiRXJyb3IiLCJvayIsImVycm9yIiwibWVzc2FnZSIsInN0YXR1cyIsInJlc3VsdCIsImlzTmV0d29ya1N0YXR1cyIsIm9iaiIsIm5ldHdvcmsiLCJwZWVycyIsImZvcm1hdE1heWJlRGF0ZSIsIkRhdGUiLCJpc05hTiIsImdldFRpbWUiLCJ0b0xvY2FsZVN0cmluZyIsImZpbmRQZWVySW5HbG9iYWxQZWVycyIsInBlZXJzTWFwIiwicm91dGVJZCIsIl9pIiwiX09iamVjdCRrZXlzIiwiayIsImFkZHJlc3MiLCJtZXJnZVBlZXJTb3VyY2VzIiwiZ3NQZWVyIiwiZGV0YWlsUGVlciIsImxpc3RQZWVyIiwiYiIsIm1lcmdlZCIsIlBlZXJEZXRhaWwiLCJuYXZpZ2F0ZSIsImVuY29kZWQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJkZXRhaWwiLCJzZXREZXRhaWwiLCJfUmVhY3QkdXNlU3RhdGUzIiwiX1JlYWN0JHVzZVN0YXRlNCIsInBlZXJDaGF0cyIsInNldFBlZXJDaGF0cyIsIl9SZWFjdCR1c2VTdGF0ZTUiLCJfUmVhY3QkdXNlU3RhdGU2Iiwib3V0Z29pbmdUZXh0Iiwic2V0T3V0Z29pbmdUZXh0IiwiX1JlYWN0JHVzZVN0YXRlNyIsIl9SZWFjdCR1c2VTdGF0ZTgiLCJpbnZlbnRvcnlEb2NzIiwic2V0SW52ZW50b3J5RG9jcyIsIl9SZWFjdCR1c2VTdGF0ZTkiLCJfUmVhY3QkdXNlU3RhdGUwIiwiaHRsY1R4aWRzIiwic2V0SHRsY1R4aWRzIiwiX1JlYWN0JHVzZVN0YXRlMSIsIl9SZWFjdCR1c2VTdGF0ZTEwIiwiaHRsY0NvbmZpcm1GZWVkYmFjayIsInNldEh0bGNDb25maXJtRmVlZGJhY2siLCJfUmVhY3QkdXNlU3RhdGUxMSIsIl9SZWFjdCR1c2VTdGF0ZTEyIiwiaHRsY0Z1bmRpbmdRckJ5U2V0dGxlbWVudCIsInNldEh0bGNGdW5kaW5nUXJCeVNldHRsZW1lbnQiLCJfUmVhY3QkdXNlU3RhdGUxMyIsIl9SZWFjdCR1c2VTdGF0ZTE0IiwiaHRsY0Z1bmRpbmdDb3BpZWQiLCJzZXRIdGxjRnVuZGluZ0NvcGllZCIsIl9SZWFjdCR1c2VTdGF0ZTE1IiwiX1JlYWN0JHVzZVN0YXRlMTYiLCJpbnZlbnRvcnlSZWxheVRhcmdldCIsInNldEludmVudG9yeVJlbGF5VGFyZ2V0IiwiX1JlYWN0JHVzZVN0YXRlMTciLCJfUmVhY3QkdXNlU3RhdGUxOCIsImJyaWRnZVBheVNldHRsZW1lbnRJZCIsInNldEJyaWRnZVBheVNldHRsZW1lbnRJZCIsIl9SZWFjdCR1c2VTdGF0ZTE5IiwiX1JlYWN0JHVzZVN0YXRlMjAiLCJpbnZlbnRvcnlEZWJ1Z09wZW4iLCJzZXRJbnZlbnRvcnlEZWJ1Z09wZW4iLCJfUmVhY3QkdXNlU3RhdGUyMSIsIl9SZWFjdCR1c2VTdGF0ZTIyIiwiaW52ZW50b3J5UmVxdWVzdE1ldGEiLCJzZXRJbnZlbnRvcnlSZXF1ZXN0TWV0YSIsIl9SZWFjdCR1c2VTdGF0ZTIzIiwiX1JlYWN0JHVzZVN0YXRlMjQiLCJwZWVyVG9wb2xvZ3lUaWNrIiwic2V0UGVlclRvcG9sb2d5VGljayIsIl9SZWFjdCR1c2VTdGF0ZTI1IiwiX1JlYWN0JHVzZVN0YXRlMjYiLCJmZWRlcmF0aW9uQ29udHJhY3RJZCIsInNldEZlZGVyYXRpb25Db250cmFjdElkIiwiX1JlYWN0JHVzZVN0YXRlMjciLCJfUmVhY3QkdXNlU3RhdGUyOCIsImludml0ZUJ1c3kiLCJzZXRJbnZpdGVCdXN5IiwiX1JlYWN0JHVzZVN0YXRlMjkiLCJfUmVhY3QkdXNlU3RhdGUzMCIsImludml0ZUVycm9yIiwic2V0SW52aXRlRXJyb3IiLCJfUmVhY3QkdXNlU3RhdGUzMSIsIl9SZWFjdCR1c2VTdGF0ZTMyIiwiaW52aXRlT2siLCJzZXRJbnZpdGVPayIsIl9SZWFjdCR1c2VTdGF0ZTMzIiwiX1JlYWN0JHVzZVN0YXRlMzQiLCJuaWNrTW9kYWxPcGVuIiwic2V0Tmlja01vZGFsT3BlbiIsIl9SZWFjdCR1c2VTdGF0ZTM1IiwiX1JlYWN0JHVzZVN0YXRlMzYiLCJuaWNrRHJhZnQiLCJzZXROaWNrRHJhZnQiLCJfUmVhY3QkdXNlU3RhdGUzNyIsIl9SZWFjdCR1c2VTdGF0ZTM4IiwiaW52aXRlTm90ZU1vZGFsT3BlbiIsInNldEludml0ZU5vdGVNb2RhbE9wZW4iLCJfUmVhY3QkdXNlU3RhdGUzOSIsIl9SZWFjdCR1c2VTdGF0ZTQwIiwiaW52aXRlTm90ZURyYWZ0Iiwic2V0SW52aXRlTm90ZURyYWZ0IiwiX1JlYWN0JHVzZVN0YXRlNDEiLCJfUmVhY3QkdXNlU3RhdGU0MiIsInBlZXJPcHNBY2NvcmRpb25PcGVuIiwic2V0UGVlck9wc0FjY29yZGlvbk9wZW4iLCJfUmVhY3QkdXNlU3RhdGU0MyIsIl9SZWFjdCR1c2VTdGF0ZTQ0IiwicGVlcldvcmtzcGFjZVRhYiIsInNldFBlZXJXb3Jrc3BhY2VUYWIiLCJfUmVhY3QkdXNlU3RhdGU0NSIsIl9SZWFjdCR1c2VTdGF0ZTQ2IiwiY29udGFjdEFkZEJ1c3kiLCJzZXRDb250YWN0QWRkQnVzeSIsIl9SZWFjdCR1c2VTdGF0ZTQ3IiwiX1JlYWN0JHVzZVN0YXRlNDgiLCJjb250YWN0QWRkRXJyIiwic2V0Q29udGFjdEFkZEVyciIsIl9SZWFjdCR1c2VTdGF0ZTQ5IiwiX1JlYWN0JHVzZVN0YXRlNTAiLCJjb250YWN0QWRkT2siLCJzZXRDb250YWN0QWRkT2siLCJfUmVhY3QkdXNlU3RhdGU1MSIsIl9SZWFjdCR1c2VTdGF0ZTUyIiwicGVlcmluZ0NvcGllZCIsInNldFBlZXJpbmdDb3BpZWQiLCJfUmVhY3QkdXNlU3RhdGU1MyIsIl9SZWFjdCR1c2VTdGF0ZTU0IiwiaHViVWlUaWNrIiwic2V0SHViVWlUaWNrIiwidXNlRWZmZWN0IiwiX1JlYWN0JHVzZVN0YXRlNTUiLCJfUmVhY3QkdXNlU3RhdGU1NiIsIm5ldHdvcmtTdGF0dXNUaWNrIiwic2V0TmV0d29ya1N0YXR1c1RpY2siLCJvbk5zIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbkludiIsImV2IiwiaHViTWVzc2FnZSIsInZpYVRhZyIsInZpYSIsInVuZGVmaW5lZCIsInJlcXVlc3RWaWEiLCJ1ZiIsImJyaWRnZSIsImJyaWRnZVJlZiIsImN1cnJlbnQiLCJjYW5kaWRhdGUiLCJuZXR3b3JrU3RhdHVzIiwiZmFsbGJhY2siLCJsYXN0TmV0d29ya1N0YXR1cyIsIndlYnJ0Y0Zyb21IdWIiLCJ3ZWJydGNQZWVycyIsIndlYnJ0Y1JlZ2lzdHJhdGlvbiIsImZpbmQiLCJ3ZWJydGNNZXRhIiwibWV0YWRhdGEiLCJwZWVyRnJvbVN0YXR1cyIsIm1lcmdlZEZyb21HcyIsImdzIiwiZ2V0R2xvYmFsU3RhdGUiLCJwZWVyIiwiaGFzUGVlclJvdyIsImlzQ29ubmVjdGVkIiwiYWRtaW5Ub2tlblByZXNlbnQiLCJiaSIsInNlZWQiLCJvblJlZnJlc2hQZWVycyIsIm9uR2V0UGVlciIsIm9uR3MiLCJvcGVyYXRpb24iLCJwYXRoIiwiY2FuY2VsbGVkIiwicGFpcnMiLCJkb2MiLCJoIiwiaHRsYyIsInNpZCIsInNldHRsZW1lbnRJZCIsInVyaSIsImJpdGNvaW5VcmkiLCJhbGwiLCJtYXAiLCJfcmVmIiwidG9EYXRhVVJMIiwid2lkdGgiLCJtYXJnaW4iLCJjb2xvciIsImRhcmsiLCJsaWdodCIsImRhdGFVcmwiLCJyb3dzIiwiaiIsImNvcHlIdGxjRnVuZGluZyIsInVzZUNhbGxiYWNrIiwidGV4dCIsImZsYXNoS2V5IiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0Iiwic2V0VGltZW91dCIsImRlcml2ZUNoYXRzQW5kSW52ZW50b3J5IiwiZ2xvYmFsU3RhdGUiLCJjdXJyZW50RGV0YWlsIiwibWVzc2FnZXMiLCJwZWVyc0J5SWQiLCJzdG9yZWRQZWVyIiwicGVlcklkIiwiY2hhdHMiLCJ2YWx1ZXMiLCJ0eXBlIiwiYWN0b3JJZCIsImFjdG9yIiwidGFyZ2V0Iiwib2JqZWN0IiwibWF0Y2hlc0FjdG9yIiwibWF0Y2hlc1RhcmdldCIsInNvcnQiLCJ0YSIsImNyZWF0ZWQiLCJ0YiIsImludlBlZXIiLCJkb2NzIiwiaW52ZW50b3J5IiwiZG9jdW1lbnRzIiwiaGFuZGxlciIsImV2ZW50Iiwic3RvcmVkIiwiYnJpZGdlSW5zdGFuY2UiLCJyb3ciLCJyb3V0ZUxvb2tzTGlrZVhwdWIiLCJ4cHViT25seU5vUGVlciIsIl9SZWFjdCR1c2VTdGF0ZTU3IiwiX1JlYWN0JHVzZVN0YXRlNTgiLCJwZWVyUmVzb2x2ZVNsb3ciLCJzZXRQZWVyUmVzb2x2ZVNsb3ciLCJjbGVhclRpbWVvdXQiLCJ3ZWJydGNYcHViIiwieHB1YiIsImJlY2gzMkhlYWRsaW5lIiwidGl0bGUiLCJuaWNrbmFtZSIsImFsaWFzIiwicmVzb2x2ZWRBZGRyZXNzIiwiaG9zdCIsInBvcnQiLCJjb25uZWN0aW9uIiwicmVtb3RlQWRkcmVzcyIsInJlbW90ZVBvcnQiLCJsYXN0Q29sb24iLCJsYXN0SW5kZXhPZiIsImNoYXREZXN0IiwidGNwS2V5Rm9yRmFicmljUmVzeW5jIiwiaW5jbHVkZXMiLCJjYW5SZXF1ZXN0RmFicmljUmVzeW5jIiwic3RhcnRzV2l0aCIsImhhc1VubG9ja2VkSWRlbnRpdHkiLCJjYW5TZW5kUGVlckNoYXQiLCJoYW5kbGVTZW5kUGVlckNoYXQiLCJwcmV2ZW50RGVmYXVsdCIsIm9uU2VuZFBlZXJNZXNzYWdlIiwiZ29zc2lwTmVpZ2hib3JzIiwidXNlTWVtbyIsImciLCJwZWVyVG9wb2xvZ3lHb3NzaXAiLCJieVJlcG9ydGVyIiwia2V5IiwibmVpZ2hib3JzIiwibmVpZ2hib3JEb3QiLCJjZW50ZXIiLCJfIiwic2VuZEludmVudG9yeVJlcXVlc3QiLCJraW5kIiwib3B0c0luIiwiaW52RGVzdCIsInNlbmRQZWVySW52ZW50b3J5UmVxdWVzdCIsIm9wdHMiLCJnZXRIdGxjUmVmdW5kUHVibGljS2V5SGV4IiwicGsiLCJidXllclJlZnVuZFB1YmxpY0tleSIsImF0Iiwibm93Iiwib3Blbk5pY2tuYW1lTW9kYWwiLCJzdWJtaXROaWNrbmFtZSIsIm9uU2V0UGVlck5pY2tuYW1lIiwibGF1bmNoSW52aXRlTm90ZU1vZGFsIiwic3VibWl0SW52aXRlVG9Db250cmFjdCIsIl9jYWxsZWUiLCJ0b2tlbiIsIm5vdGUiLCJjaWQiLCJfdCIsIl9jb250ZXh0IiwiY29udHJhY3RJZCIsImFkbWluVG9rZW4iLCJpbnZpdGVJZCIsImh1YkFkbWluQ29sbGFib3JhdGlvblRva2VuIiwiZmFicmljUGVlcklkRm9yQ29sbGFib3JhdGlvbkNvbnRhY3QiLCJmcm9tUGVlciIsImZyb21XZWJydGMiLCJmYWJyaWNQZWVySWQiLCJmcCIsImFkZFBlZXJUb0NvbGxhYm9yYXRpb25Db250YWN0cyIsIl9jYWxsZWUyIiwib3V0IiwiX3QyIiwiX2NvbnRleHQyIiwiY2FsbEh1Ykpzb25ScGMiLCJsYWJlbCIsInNvdXJjZSIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsImRpc3BsYXkiLCJmbGV4V3JhcCIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsImdhcCIsIm1hcmdpbkJvdHRvbSIsIm1pbldpZHRoIiwiZmxleCIsImJhc2ljIiwic2l6ZSIsImFzIiwidG8iLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCIsImZvbnRTaXplIiwibWFyZ2luVG9wIiwibWF4V2lkdGgiLCJtYXJnaW5MZWZ0Iiwid29yZEJyZWFrIiwiRnJhZ21lbnQiLCJHcm91cCIsImZsZXhTaHJpbmsiLCJpY29uIiwib25DbGljayIsIm9uQWRkUGVlciIsIm9uRGlzY29ubmVjdFBlZXIiLCJvbkZhYnJpY1BlZXJSZXN5bmMiLCJsb2FkaW5nIiwiZGlzYWJsZWQiLCJzdHlsZWQiLCJmbHVpZCIsIlRpdGxlIiwiYWN0aXZlIiwiaW5kZXgiLCJDb250ZW50IiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsIl9yZWY0IiwiaW52ZW50b3J5VGFyZ2V0IiwicmVmdW5kUGsiLCJfcmVmNSIsInByaW1hcnkiLCJuZWdhdGl2ZSIsIm9uRGlzbWlzcyIsInN1Y2Nlc3MiLCJwb2ludGluZyIsInNlY29uZGFyeSIsImNvbXBhY3QiLCJJdGVtIiwicGFkZGluZyIsImJveFNoYWRvdyIsImJvcmRlciIsImRlZmluaXRpb24iLCJzdHJpcGVkIiwiQm9keSIsInNpZ0hvc3QiLCJjb25uU3RyIiwic2lnbmFsaW5nIiwiY29weVBlZXJpbmciLCJkb2N1bWVudCIsInBvc2l0aW9uIiwib3BhY2l0eSIsImFwcGVuZENoaWxkIiwic2VsZWN0IiwiZXhlY0NvbW1hbmQiLCJyZW1vdmVDaGlsZCIsIlJvdyIsIkNlbGwiLCJjb2xsYXBzaW5nIiwidmVydGljYWxBbGlnbiIsInNjb3JlIiwiZmlyc3RTZWVuIiwibGFzdFNlZW4iLCJsYXN0TWVzc2FnZSIsImZhaWx1cmVDb3VudCIsImRvdFNvdXJjZSIsInNraXBJZGVudGl0eUdhdGUiLCJyZWxheGVkIiwibmlkIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY3Vyc29yIiwid2hpdGVTcGFjZSIsImJhY2tncm91bmQiLCJib3JkZXJSYWRpdXMiLCJpbmZvIiwiaW5saW5lIiwid2FybmluZyIsInRleHRBbGlnbiIsImRpdmlkZWQiLCJjaGF0IiwiX3Byb3BzJGJyaWRnZVJlZiIsIl9wcm9wcyRicmlkZ2UiLCJfY2hhdCRhY3RvciIsInJhd0FjdG9yIiwidXNlcm5hbWUiLCJnZXRQZWVyRGlzcGxheU5hbWUiLCJjb250ZW50IiwiaXNQZW5kaW5nIiwiaXNRdWV1ZWQiLCJEZXNjcmlwdGlvbiIsIm9uU3VibWl0IiwidG9nZ2xlIiwiY2hlY2tlZCIsIl9lIiwiZGF0YSIsIm92ZXJmbG93IiwibWF4SGVpZ2h0IiwicG9zaXRpdmUiLCJmdW5kZWQiLCJkb2N1bWVudElkIiwidHhpZCIsImJpdGNvaW5FeHBsb3JlciIsImxpbmVhZ2UiLCJwdWJsaXNoZWQiLCJwdXJjaGFzZVByaWNlU2F0cyIsImFtb3VudFNhdHMiLCJhbW91bnRCdGMiLCJwYXltZW50QWRkcmVzcyIsInNyYyIsImFsdCIsImZsZXhEaXJlY3Rpb24iLCJocmVmIiwiX2NhbGxlZTMiLCJ1cHN0cmVhbSIsIl90MyIsIl9jb250ZXh0MyIsIk1hdGgiLCJyb3VuZCIsIm1lbW8iLCJwYXltZW50IiwicHJldiIsInBheW1lbnRIYXNoSGV4IiwicmVmdW5kTG9ja0hlaWdodCIsIl9yZWY3Iiwic2VuZENvbmZpcm1JbnZlbnRvcnlIdGxjUGF5bWVudCIsInR4IiwiYWxpZ25TZWxmIiwib3BlbiIsIm9uQ2xvc2UiLCJjbG9zZU9uRGltbWVyQ2xpY2siLCJjbG9zZU9uRXNjYXBlIiwiRmllbGQiLCJodG1sRm9yIiwibWF4TGVuZ3RoIiwiQWN0aW9ucyIsIl9yZWY4IiwiX2NhbGxlZTQiLCJfY29udGV4dDQiLCJfeDMiLCJUZXh0QXJlYSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/PeerView.js\n\n}')},"./components/PublicVisitorGate.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Container = _require2.Container,\n Message = _require2.Message,\n Header = _require2.Header,\n Button = _require2.Button,\n Icon = _require2.Icon;\n\n/**\n * Soft gate: browsers without an unlocked signing identity see a sign-in prompt instead of operator pages.\n * @param {{ active: boolean, onOpenIdentity?: function, children: React.ReactNode }} props\n */\nfunction PublicVisitorGate(props) {\n var active = !!(props && props.active);\n var onOpenIdentity = props && typeof props.onOpenIdentity === \'function\' ? props.onOpenIdentity : null;\n var children = props && props.children;\n if (!active) return children;\n return /*#__PURE__*/React.createElement(Container, {\n style: {\n maxWidth: 640,\n margin: \'2rem auto\',\n padding: \'0 1rem\'\n }\n }, /*#__PURE__*/React.createElement(Message, {\n info: true,\n icon: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "user circle outline",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Message.Content, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n marginTop: 0\n }\n }, "Sign in with a Fabric identity"), /*#__PURE__*/React.createElement("p", {\n style: {\n lineHeight: 1.55,\n marginBottom: \'1rem\'\n }\n }, "This area uses your local keys and hub wallet tools. Create or unlock an identity to continue."), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n onClick: function onClick() {\n return onOpenIdentity ? onOpenIdentity() : null;\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sign in"\n }), "Open identity"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n as: Link,\n to: "/settings/security",\n basic: true,\n style: {\n marginLeft: \'0.5rem\'\n }\n }, "Security & identity"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n as: Link,\n to: "/",\n basic: true,\n style: {\n marginLeft: \'0.5rem\'\n }\n }, "Home"))));\n}\nmodule.exports = PublicVisitorGate;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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aUIsVUFBVSxFQUFFO0lBQVM7RUFBRSxHQUFDLE1BRXRFLENBQ08sQ0FDVixDQUNBLENBQUM7QUFFaEI7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUd6QixpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvUHVibGljVmlzaXRvckdhdGUuanM/OTk3NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluayB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuY29uc3QgeyBDb250YWluZXIsIE1lc3NhZ2UsIEhlYWRlciwgQnV0dG9uLCBJY29uIH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuXG4vKipcbiAqIFNvZnQgZ2F0ZTogYnJvd3NlcnMgd2l0aG91dCBhbiB1bmxvY2tlZCBzaWduaW5nIGlkZW50aXR5IHNlZSBhIHNpZ24taW4gcHJvbXB0IGluc3RlYWQgb2Ygb3BlcmF0b3IgcGFnZXMuXG4gKiBAcGFyYW0ge3sgYWN0aXZlOiBib29sZWFuLCBvbk9wZW5JZGVudGl0eT86IGZ1bmN0aW9uLCBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH19IHByb3BzXG4gKi9cbmZ1bmN0aW9uIFB1YmxpY1Zpc2l0b3JHYXRlIChwcm9wcykge1xuICBjb25zdCBhY3RpdmUgPSAhIShwcm9wcyAmJiBwcm9wcy5hY3RpdmUpO1xuICBjb25zdCBvbk9wZW5JZGVudGl0eSA9IHByb3BzICYmIHR5cGVvZiBwcm9wcy5vbk9wZW5JZGVudGl0eSA9PT0gJ2Z1bmN0aW9uJyA/IHByb3BzLm9uT3BlbklkZW50aXR5IDogbnVsbDtcbiAgY29uc3QgY2hpbGRyZW4gPSBwcm9wcyAmJiBwcm9wcy5jaGlsZHJlbjtcbiAgaWYgKCFhY3RpdmUpIHJldHVybiBjaGlsZHJlbjtcbiAgcmV0dXJuIChcbiAgICA8Q29udGFpbmVyIHN0eWxlPXt7IG1heFdpZHRoOiA2NDAsIG1hcmdpbjogJzJyZW0gYXV0bycsIHBhZGRpbmc6ICcwIDFyZW0nIH19PlxuICAgICAgPE1lc3NhZ2UgaW5mbyBpY29uPlxuICAgICAgICA8SWNvbiBuYW1lPVwidXNlciBjaXJjbGUgb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDxNZXNzYWdlLkNvbnRlbnQ+XG4gICAgICAgICAgPEhlYWRlciBhcz1cImgzXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAwIH19PlNpZ24gaW4gd2l0aCBhIEZhYnJpYyBpZGVudGl0eTwvSGVhZGVyPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IGxpbmVIZWlnaHQ6IDEuNTUsIG1hcmdpbkJvdHRvbTogJzFyZW0nIH19PlxuICAgICAgICAgICAgVGhpcyBhcmVhIHVzZXMgeW91ciBsb2NhbCBrZXlzIGFuZCBodWIgd2FsbGV0IHRvb2xzLiBDcmVhdGUgb3IgdW5sb2NrIGFuIGlkZW50aXR5IHRvIGNvbnRpbnVlLlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBwcmltYXJ5IG9uQ2xpY2s9eygpID0+IChvbk9wZW5JZGVudGl0eSA/IG9uT3BlbklkZW50aXR5KCkgOiBudWxsKX0+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwic2lnbiBpblwiIC8+XG4gICAgICAgICAgICBPcGVuIGlkZW50aXR5XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXM9e0xpbmt9IHRvPVwiL3NldHRpbmdzL3NlY3VyaXR5XCIgYmFzaWMgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNXJlbScgfX0+XG4gICAgICAgICAgICBTZWN1cml0eSAmYW1wOyBpZGVudGl0eVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDxCdXR0b24gdHlwZT1cImJ1dHRvblwiIGFzPXtMaW5rfSB0bz1cIi9cIiBiYXNpYyBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41cmVtJyB9fT5cbiAgICAgICAgICAgIEhvbWVcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9NZXNzYWdlLkNvbnRlbnQ+XG4gICAgICA8L01lc3NhZ2U+XG4gICAgPC9Db250YWluZXI+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHVibGljVmlzaXRvckdhdGU7XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJMaW5rIiwiX3JlcXVpcmUyIiwiQ29udGFpbmVyIiwiTWVzc2FnZSIsIkhlYWRlciIsIkJ1dHRvbiIsIkljb24iLCJQdWJsaWNWaXNpdG9yR2F0ZSIsInByb3BzIiwiYWN0aXZlIiwib25PcGVuSWRlbnRpdHkiLCJjaGlsZHJlbiIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsIm1heFdpZHRoIiwibWFyZ2luIiwicGFkZGluZyIsImluZm8iLCJpY29uIiwibmFtZSIsIkNvbnRlbnQiLCJhcyIsIm1hcmdpblRvcCIsImxpbmVIZWlnaHQiLCJtYXJnaW5Cb3R0b20iLCJ0eXBlIiwicHJpbWFyeSIsIm9uQ2xpY2siLCJ0byIsImJhc2ljIiwibWFyZ2luTGVmdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/PublicVisitorGate.js\n\n}')},"./components/QrScannerModal.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Modal = _require.Modal,\n Button = _require.Button,\n Icon = _require.Icon,\n Message = _require.Message;\nvar Html5Qrcode = (__webpack_require__(/*! html5-qrcode */ "./node_modules/html5-qrcode/esm/index.js").Html5Qrcode);\nvar QrScannerModal = /*#__PURE__*/function (_React$Component) {\n function QrScannerModal(props) {\n var _this;\n _classCallCheck(this, QrScannerModal);\n _this = _callSuper(this, QrScannerModal, [props]);\n _this.state = {\n error: null,\n started: false\n };\n _this._scanner = null;\n {\n var g = typeof globalThis !== \'undefined\' && globalThis.crypto ? globalThis.crypto : null;\n var suffix;\n if (g && g.randomUUID) {\n suffix = g.randomUUID();\n } else if (g && g.getRandomValues) {\n var a = new Uint8Array(16);\n g.getRandomValues(a);\n suffix = Array.from(a, function (b) {\n return b.toString(16).padStart(2, \'0\');\n }).join(\'\');\n } else {\n suffix = String(Date.now());\n }\n _this._scannerId = \'qr-scanner-\' + suffix;\n }\n return _this;\n }\n _inherits(QrScannerModal, _React$Component);\n return _createClass(QrScannerModal, [{\n key: "componentDidMount",\n value: function () {\n var _componentDidMount = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n if (!this.props.open) {\n _context.n = 1;\n break;\n }\n _context.n = 1;\n return this._startScanner();\n case 1:\n return _context.a(2);\n }\n }, _callee, this);\n }));\n function componentDidMount() {\n return _componentDidMount.apply(this, arguments);\n }\n return componentDidMount;\n }()\n }, {\n key: "componentDidUpdate",\n value: function () {\n var _componentDidUpdate = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(prevProps) {\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (!(this.props.open && !prevProps.open)) {\n _context2.n = 2;\n break;\n }\n _context2.n = 1;\n return this._startScanner();\n case 1:\n _context2.n = 3;\n break;\n case 2:\n if (!(!this.props.open && prevProps.open)) {\n _context2.n = 3;\n break;\n }\n _context2.n = 3;\n return this._stopScanner();\n case 3:\n return _context2.a(2);\n }\n }, _callee2, this);\n }));\n function componentDidUpdate(_x) {\n return _componentDidUpdate.apply(this, arguments);\n }\n return componentDidUpdate;\n }()\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n this._stopScanner();\n }\n }, {\n key: "_startScanner",\n value: function () {\n var _startScanner2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var _this2 = this;\n var _t;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n if (!this._scanner) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n this._scanned = false;\n _context3.p = 2;\n this._scanner = new Html5Qrcode(this._scannerId);\n _context3.n = 3;\n return this._scanner.start({\n facingMode: \'environment\'\n }, {\n fps: 10,\n qrbox: {\n width: 250,\n height: 250\n }\n }, function (decodedText) {\n if (_this2._scanned) return;\n _this2._scanned = true;\n if (_this2.props.onScan) _this2.props.onScan(decodedText);\n });\n case 3:\n this.setState({\n error: null,\n started: true\n });\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t = _context3.v;\n this.setState({\n error: _t && _t.message ? _t.message : \'Camera access failed.\'\n });\n case 5:\n return _context3.a(2);\n }\n }, _callee3, this, [[2, 4]]);\n }));\n function _startScanner() {\n return _startScanner2.apply(this, arguments);\n }\n return _startScanner;\n }()\n }, {\n key: "_stopScanner",\n value: function () {\n var _stopScanner2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var _t2;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n if (this._scanner) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2);\n case 1:\n _context4.p = 1;\n if (!this._scanner.isScanning) {\n _context4.n = 2;\n break;\n }\n _context4.n = 2;\n return this._scanner.stop();\n case 2:\n _context4.n = 4;\n break;\n case 3:\n _context4.p = 3;\n _t2 = _context4.v;\n case 4:\n this._scanner.clear();\n this._scanner = null;\n this.setState({\n started: false\n });\n case 5:\n return _context4.a(2);\n }\n }, _callee4, this, [[1, 3]]);\n }));\n function _stopScanner() {\n return _stopScanner2.apply(this, arguments);\n }\n return _stopScanner;\n }()\n }, {\n key: "render",\n value: function render() {\n var _this$props = this.props,\n open = _this$props.open,\n onClose = _this$props.onClose,\n onScan = _this$props.onScan;\n return /*#__PURE__*/React.createElement(Modal, {\n open: !!open,\n onClose: onClose,\n size: "small"\n }, /*#__PURE__*/React.createElement(Modal.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "camera"\n }), "Scan QR Code"), /*#__PURE__*/React.createElement(Modal.Content, null, /*#__PURE__*/React.createElement("div", {\n id: this._scannerId,\n style: {\n width: \'100%\',\n minHeight: \'250px\'\n }\n }), this.state.error && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n style: {\n marginTop: \'0.75em\'\n }\n }, this.state.error), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginTop: \'0.5em\'\n }\n }, "Point your camera at a Bitcoin address or Lightning invoice QR code.")), /*#__PURE__*/React.createElement(Modal.Actions, null, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n onClick: onClose\n }, "Cancel")));\n }\n }]);\n}(React.Component);\nmodule.exports = QrScannerModal;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQUUsTUFBTTtVQUFFdUIsU0FBUyxFQUFFO1FBQVE7TUFBRSxDQUFFLENBQUMsRUFDekUsSUFBSSxDQUFDbkUsS0FBSyxDQUFDQyxLQUFLLGlCQUNmYixLQUFBLENBQUF3RSxhQUFBLENBQUNsRSxPQUFPO1FBQUMwRSxRQUFRO1FBQUNQLElBQUksRUFBQyxPQUFPO1FBQUNLLEtBQUssRUFBRTtVQUFFRyxTQUFTLEVBQUU7UUFBUztNQUFFLEdBQzNELElBQUksQ0FBQ3JFLEtBQUssQ0FBQ0MsS0FDTCxDQUNWLGVBQ0RiLEtBQUEsQ0FBQXdFLGFBQUE7UUFBR00sS0FBSyxFQUFFO1VBQUVJLEtBQUssRUFBRSxNQUFNO1VBQUVDLFFBQVEsRUFBRSxPQUFPO1VBQUVGLFNBQVMsRUFBRTtRQUFRO01BQUUsR0FBQyxzRUFFakUsQ0FDVSxDQUFDLGVBQ2hCakYsS0FBQSxDQUFBd0UsYUFBQSxDQUFDckUsS0FBSyxDQUFDaUYsT0FBTyxxQkFDWnBGLEtBQUEsQ0FBQXdFLGFBQUEsQ0FBQ3BFLE1BQU07UUFBQ2lGLEtBQUs7UUFBQ0MsT0FBTyxFQUFFZjtNQUFRLEdBQUMsUUFBYyxDQUNqQyxDQUNWLENBQUM7SUFFWjtFQUFDO0FBQUEsRUEzRjBCdkUsS0FBSyxDQUFDdUYsU0FBUztBQThGNUNDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHakYsY0FBYyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29tcG9uZW50cy9RclNjYW5uZXJNb2RhbC5qcz8wODEzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBNb2RhbCwgQnV0dG9uLCBJY29uLCBNZXNzYWdlIH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuXG5jb25zdCBIdG1sNVFyY29kZSA9IHJlcXVpcmUoJ2h0bWw1LXFyY29kZScpLkh0bWw1UXJjb2RlO1xuXG5jbGFzcyBRclNjYW5uZXJNb2RhbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yIChwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBlcnJvcjogbnVsbCwgc3RhcnRlZDogZmFsc2UgfTtcbiAgICB0aGlzLl9zY2FubmVyID0gbnVsbDtcbiAgICB7XG4gICAgICBjb25zdCBnID0gKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzLmNyeXB0bykgPyBnbG9iYWxUaGlzLmNyeXB0byA6IG51bGw7XG4gICAgICBsZXQgc3VmZml4O1xuICAgICAgaWYgKGcgJiYgZy5yYW5kb21VVUlEKSB7XG4gICAgICAgIHN1ZmZpeCA9IGcucmFuZG9tVVVJRCgpO1xuICAgICAgfSBlbHNlIGlmIChnICYmIGcuZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IGEgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgICAgIGcuZ2V0UmFuZG9tVmFsdWVzKGEpO1xuICAgICAgICBzdWZmaXggPSBBcnJheS5mcm9tKGEsIChiKSA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1ZmZpeCA9IFN0cmluZyhEYXRlLm5vdygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NjYW5uZXJJZCA9ICdxci1zY2FubmVyLScgKyBzdWZmaXg7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLm9wZW4pIGF3YWl0IHRoaXMuX3N0YXJ0U2Nhbm5lcigpO1xuICB9XG5cbiAgYXN5bmMgY29tcG9uZW50RGlkVXBkYXRlIChwcmV2UHJvcHMpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcGVuICYmICFwcmV2UHJvcHMub3Blbikge1xuICAgICAgYXdhaXQgdGhpcy5fc3RhcnRTY2FubmVyKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5wcm9wcy5vcGVuICYmIHByZXZQcm9wcy5vcGVuKSB7XG4gICAgICBhd2FpdCB0aGlzLl9zdG9wU2Nhbm5lcigpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICB0aGlzLl9zdG9wU2Nhbm5lcigpO1xuICB9XG5cbiAgYXN5bmMgX3N0YXJ0U2Nhbm5lciAoKSB7XG4gICAgaWYgKHRoaXMuX3NjYW5uZXIpIHJldHVybjtcbiAgICB0aGlzLl9zY2FubmVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX3NjYW5uZXIgPSBuZXcgSHRtbDVRcmNvZGUodGhpcy5fc2Nhbm5lcklkKTtcbiAgICAgIGF3YWl0IHRoaXMuX3NjYW5uZXIuc3RhcnQoXG4gICAgICAgIHsgZmFjaW5nTW9kZTogJ2Vudmlyb25tZW50JyB9LFxuICAgICAgICB7IGZwczogMTAsIHFyYm94OiB7IHdpZHRoOiAyNTAsIGhlaWdodDogMjUwIH0gfSxcbiAgICAgICAgKGRlY29kZWRUZXh0KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX3NjYW5uZWQpIHJldHVybjtcbiAgICAgICAgICB0aGlzLl9zY2FubmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5vblNjYW4pIHRoaXMucHJvcHMub25TY2FuKGRlY29kZWRUZXh0KTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlcnJvcjogbnVsbCwgc3RhcnRlZDogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlcnJvcjogZXJyICYmIGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiAnQ2FtZXJhIGFjY2VzcyBmYWlsZWQuJyB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfc3RvcFNjYW5uZXIgKCkge1xuICAgIGlmICghdGhpcy5fc2Nhbm5lcikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5fc2Nhbm5lci5pc1NjYW5uaW5nKSBhd2FpdCB0aGlzLl9zY2FubmVyLnN0b3AoKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRoaXMuX3NjYW5uZXIuY2xlYXIoKTtcbiAgICB0aGlzLl9zY2FubmVyID0gbnVsbDtcbiAgICB0aGlzLnNldFN0YXRlKHsgc3RhcnRlZDogZmFsc2UgfSk7XG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGNvbnN0IHsgb3Blbiwgb25DbG9zZSwgb25TY2FuIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiAoXG4gICAgICA8TW9kYWwgb3Blbj17ISFvcGVufSBvbkNsb3NlPXtvbkNsb3NlfSBzaXplPVwic21hbGxcIj5cbiAgICAgICAgPE1vZGFsLkhlYWRlcj5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwiY2FtZXJhXCIgLz5cbiAgICAgICAgICBTY2FuIFFSIENvZGVcbiAgICAgICAgPC9Nb2RhbC5IZWFkZXI+XG4gICAgICAgIDxNb2RhbC5Db250ZW50PlxuICAgICAgICAgIDxkaXYgaWQ9e3RoaXMuX3NjYW5uZXJJZH0gc3R5bGU9e3sgd2lkdGg6ICcxMDAlJywgbWluSGVpZ2h0OiAnMjUwcHgnIH19IC8+XG4gICAgICAgICAge3RoaXMuc3RhdGUuZXJyb3IgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmUgc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgICAge3RoaXMuc3RhdGUuZXJyb3J9XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJywgbWFyZ2luVG9wOiAnMC41ZW0nIH19PlxuICAgICAgICAgICAgUG9pbnQgeW91ciBjYW1lcmEgYXQgYSBCaXRjb2luIGFkZHJlc3Mgb3IgTGlnaHRuaW5nIGludm9pY2UgUVIgY29kZS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvTW9kYWwuQ29udGVudD5cbiAgICAgICAgPE1vZGFsLkFjdGlvbnM+XG4gICAgICAgICAgPEJ1dHRvbiBiYXNpYyBvbkNsaWNrPXtvbkNsb3NlfT5DYW5jZWw8L0J1dHRvbj5cbiAgICAgICAgPC9Nb2RhbC5BY3Rpb25zPlxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUXJTY2FubmVyTW9kYWw7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3JlZ2VuZXJhdG9yIiwiZSIsInQiLCJyIiwibiIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJSZWZlcmVuY2VFcnJvciIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwiX2luaGVyaXRzIiwiX3NldFByb3RvdHlwZU9mIiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJNb2RhbCIsIkJ1dHRvbiIsIkljb24iLCJNZXNzYWdlIiwiSHRtbDVRcmNvZGUiLCJRclNjYW5uZXJNb2RhbCIsIl9SZWFjdCRDb21wb25lbnQiLCJwcm9wcyIsIl90aGlzIiwic3RhdGUiLCJlcnJvciIsInN0YXJ0ZWQiLCJfc2Nhbm5lciIsImciLCJnbG9iYWxUaGlzIiwiY3J5cHRvIiwic3VmZml4IiwicmFuZG9tVVVJRCIsImdldFJhbmRvbVZhbHVlcyIsIlVpbnQ4QXJyYXkiLCJBcnJheSIsImZyb20iLCJiIiwidG9TdHJpbmciLCJwYWRTdGFydCIsImpvaW4iLCJEYXRlIiwibm93IiwiX3NjYW5uZXJJZCIsIl9jb21wb25lbnREaWRNb3VudCIsIl9jYWxsZWUiLCJfY29udGV4dCIsIm9wZW4iLCJfc3RhcnRTY2FubmVyIiwiY29tcG9uZW50RGlkTW91bnQiLCJfY29tcG9uZW50RGlkVXBkYXRlIiwiX2NhbGxlZTIiLCJwcmV2UHJvcHMiLCJfY29udGV4dDIiLCJfc3RvcFNjYW5uZXIiLCJjb21wb25lbnREaWRVcGRhdGUiLCJfeCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiX3N0YXJ0U2Nhbm5lcjIiLCJfY2FsbGVlMyIsIl90aGlzMiIsIl90IiwiX2NvbnRleHQzIiwiX3NjYW5uZWQiLCJzdGFydCIsImZhY2luZ01vZGUiLCJmcHMiLCJxcmJveCIsIndpZHRoIiwiaGVpZ2h0IiwiZGVjb2RlZFRleHQiLCJvblNjYW4iLCJzZXRTdGF0ZSIsIm1lc3NhZ2UiLCJfc3RvcFNjYW5uZXIyIiwiX2NhbGxlZTQiLCJfdDIiLCJfY29udGV4dDQiLCJpc1NjYW5uaW5nIiwic3RvcCIsImNsZWFyIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJvbkNsb3NlIiwiY3JlYXRlRWxlbWVudCIsInNpemUiLCJIZWFkZXIiLCJuYW1lIiwiQ29udGVudCIsImlkIiwic3R5bGUiLCJtaW5IZWlnaHQiLCJuZWdhdGl2ZSIsIm1hcmdpblRvcCIsImNvbG9yIiwiZm9udFNpemUiLCJBY3Rpb25zIiwiYmFzaWMiLCJvbkNsaWNrIiwiQ29tcG9uZW50IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/QrScannerModal.js\n\n}')},"./components/SecurityHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Label = _require2.Label,\n List = _require2.List,\n Message = _require2.Message,\n Segment = _require2.Segment,\n Table = _require2.Table;\nvar _require3 = __webpack_require__(/*! ../functions/fabricDelegationLocal */ "./functions/fabricDelegationLocal.js"),\n DELEGATION_STORAGE_KEY = _require3.DELEGATION_STORAGE_KEY,\n DELEGATION_CHANGED_EVENT = _require3.DELEGATION_CHANGED_EVENT,\n notifyDelegationStorageChanged = _require3.notifyDelegationStorageChanged;\nvar _require4 = __webpack_require__(/*! ../functions/fabricBrowserState */ "./functions/fabricBrowserState.js"),\n readStorageJSON = _require4.readStorageJSON,\n removeStorageKey = _require4.removeStorageKey;\nvar _require5 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require5.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require5.subscribeHubUiFeatureFlags;\nvar _require6 = __webpack_require__(/*! ../functions/fabricLinkedDevices */ "./functions/fabricLinkedDevices.js"),\n readLinkedDevices = _require6.readLinkedDevices,\n peerIdOf = _require6.peerIdOf,\n revokeLinkedDevice = _require6.revokeLinkedDevice;\nfunction timingSafeStringEqual(a, b) {\n var s = String(a);\n var t = String(b);\n if (s.length !== t.length) return false;\n var diff = 0;\n for (var i = 0; i < s.length; i++) diff |= s.charCodeAt(i) ^ t.charCodeAt(i);\n return diff === 0;\n}\nfunction readDelegation() {\n try {\n if (typeof window === \'undefined\') return null;\n return readStorageJSON(DELEGATION_STORAGE_KEY, null);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Security & delegation: external signing sessions, hub-side delegation tokens, pending sign flow.\n */\nfunction SecurityHome() {\n var _React$useState = React.useState(function () {\n return readDelegation();\n }),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n delegation = _React$useState2[0],\n setDelegation = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n me = _React$useState4[0],\n setMe = _React$useState4[1];\n var _React$useState5 = React.useState([]),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n sessions = _React$useState6[0],\n setSessions = _React$useState6[1];\n var _React$useState7 = React.useState(null),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n error = _React$useState8[0],\n setError = _React$useState8[1];\n var _React$useState9 = React.useState(false),\n _React$useState0 = _slicedToArray(_React$useState9, 2),\n busy = _React$useState0[0],\n setBusy = _React$useState0[1];\n var _React$useState1 = React.useState(function () {\n return readLinkedDevices();\n }),\n _React$useState10 = _slicedToArray(_React$useState1, 2),\n linkedDevices = _React$useState10[0],\n setLinkedDevices = _React$useState10[1];\n var busyDepthRef = React.useRef(0);\n var beginBusy = React.useCallback(function () {\n busyDepthRef.current += 1;\n setBusy(true);\n }, []);\n var endBusy = React.useCallback(function () {\n busyDepthRef.current = Math.max(0, busyDepthRef.current - 1);\n if (busyDepthRef.current === 0) setBusy(false);\n }, []);\n var origin = typeof window !== \'undefined\' ? window.location.origin : \'\';\n var token = delegation && delegation.token ? delegation.token : null;\n var refreshMe = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var r, j, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n if (token) {\n _context.n = 1;\n break;\n }\n setMe(null);\n return _context.a(2);\n case 1:\n beginBusy();\n setError(null);\n _context.p = 2;\n _context.n = 3;\n return fetch("".concat(origin, "/sessions/").concat(encodeURIComponent(token)), {\n headers: {\n Authorization: "Bearer ".concat(token),\n Accept: \'application/json\'\n },\n cache: \'no-store\'\n });\n case 3:\n r = _context.v;\n _context.n = 4;\n return r.json()["catch"](function () {\n return {};\n });\n case 4:\n j = _context.v;\n if (r.ok) {\n _context.n = 5;\n break;\n }\n setMe(null);\n setError(j && j.error || \'Could not load delegation session\');\n return _context.a(2);\n case 5:\n setMe(j.session || null);\n _context.n = 7;\n break;\n case 6:\n _context.p = 6;\n _t = _context.v;\n setMe(null);\n setError(_t && _t.message ? _t.message : String(_t));\n case 7:\n _context.p = 7;\n endBusy();\n return _context.f(7);\n case 8:\n return _context.a(2);\n }\n }, _callee, null, [[2, 6, 7, 8]]);\n })), [origin, token, beginBusy, endBusy]);\n var refreshSessions = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var r, j, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n beginBusy();\n setError(null);\n _context2.p = 1;\n _context2.n = 2;\n return fetch("".concat(origin, "/sessions"), {\n headers: {\n Accept: \'application/json\'\n },\n cache: \'no-store\'\n });\n case 2:\n r = _context2.v;\n _context2.n = 3;\n return r.json()["catch"](function () {\n return {};\n });\n case 3:\n j = _context2.v;\n if (r.ok) {\n _context2.n = 4;\n break;\n }\n setSessions([]);\n if (r.status !== 403) setError(j && j.error || \'Could not list sessions\');\n return _context2.a(2);\n case 4:\n setSessions(Array.isArray(j.sessions) ? j.sessions : []);\n _context2.n = 6;\n break;\n case 5:\n _context2.p = 5;\n _t2 = _context2.v;\n setSessions([]);\n setError("Could not list delegation sessions: ".concat(_t2 && _t2.message ? _t2.message : String(_t2)));\n case 6:\n _context2.p = 6;\n endBusy();\n return _context2.f(6);\n case 7:\n return _context2.a(2);\n }\n }, _callee2, null, [[1, 5, 6, 7]]);\n })), [origin, beginBusy, endBusy]);\n React.useEffect(function () {\n void refreshMe();\n }, [refreshMe]);\n React.useEffect(function () {\n void refreshSessions();\n }, [refreshSessions]);\n React.useEffect(function () {\n if (typeof window === \'undefined\') return undefined;\n var sync = function sync() {\n return setDelegation(readDelegation());\n };\n var onStorage = function onStorage(ev) {\n if (ev && ev.key === DELEGATION_STORAGE_KEY) sync();\n };\n window.addEventListener(DELEGATION_CHANGED_EVENT, sync);\n window.addEventListener(\'storage\', onStorage);\n return function () {\n window.removeEventListener(DELEGATION_CHANGED_EVENT, sync);\n window.removeEventListener(\'storage\', onStorage);\n };\n }, []);\n var refreshLinkedDevices = React.useCallback(function () {\n setLinkedDevices(readLinkedDevices());\n }, []);\n var handleRevokeDevice = React.useCallback(/*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(device) {\n var r, _t3;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n beginBusy();\n setError(null);\n _context3.p = 1;\n _context3.n = 2;\n return revokeLinkedDevice(device);\n case 2:\n r = _context3.v;\n if (r.ok) {\n _context3.n = 3;\n break;\n }\n setError(r.error || \'Could not revoke device\');\n return _context3.a(2);\n case 3:\n refreshLinkedDevices();\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t3 = _context3.v;\n setError(_t3 && _t3.message ? _t3.message : String(_t3));\n case 5:\n _context3.p = 5;\n endBusy();\n return _context3.f(5);\n case 6:\n return _context3.a(2);\n }\n }, _callee3, null, [[1, 4, 5, 6]]);\n }));\n return function (_x) {\n return _ref3.apply(this, arguments);\n };\n }(), [beginBusy, endBusy, refreshLinkedDevices]);\n var _React$useState11 = React.useState(0),\n _React$useState12 = _slicedToArray(_React$useState11, 2),\n hubUiTick = _React$useState12[0],\n setHubUiTick = _React$useState12[1];\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setHubUiTick(function (t) {\n return t + 1;\n });\n });\n }, []);\n void hubUiTick;\n var uf = loadHubUiFeatureFlags();\n var destroyMine = /*#__PURE__*/function () {\n var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var r, j, _t4;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n if (token) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2);\n case 1:\n beginBusy();\n setError(null);\n _context4.p = 2;\n _context4.n = 3;\n return fetch("".concat(origin, "/sessions/").concat(encodeURIComponent(token)), {\n method: \'DELETE\',\n headers: {\n Authorization: "Bearer ".concat(token),\n Accept: \'application/json\'\n },\n cache: \'no-store\'\n });\n case 3:\n r = _context4.v;\n _context4.n = 4;\n return r.json()["catch"](function () {\n return {};\n });\n case 4:\n j = _context4.v;\n if (r.ok) {\n _context4.n = 5;\n break;\n }\n setError(j && j.error || \'Could not end delegation\');\n return _context4.a(2);\n case 5:\n try {\n removeStorageKey(DELEGATION_STORAGE_KEY);\n } catch (e) {}\n notifyDelegationStorageChanged();\n setDelegation(null);\n setMe(null);\n _context4.n = 6;\n return refreshSessions();\n case 6:\n _context4.n = 8;\n break;\n case 7:\n _context4.p = 7;\n _t4 = _context4.v;\n setError(_t4 && _t4.message ? _t4.message : String(_t4));\n case 8:\n _context4.p = 8;\n endBusy();\n return _context4.f(8);\n case 9:\n return _context4.a(2);\n }\n }, _callee4, null, [[2, 7, 8, 9]]);\n }));\n return function destroyMine() {\n return _ref4.apply(this, arguments);\n };\n }();\n var destroyByTokenId = /*#__PURE__*/function () {\n var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(tokenId) {\n var r, j, _t5;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.p = _context5.n) {\n case 0:\n if (tokenId) {\n _context5.n = 1;\n break;\n }\n return _context5.a(2);\n case 1:\n beginBusy();\n setError(null);\n _context5.p = 2;\n _context5.n = 3;\n return fetch("".concat(origin, "/sessions/").concat(encodeURIComponent(tokenId)), {\n method: \'DELETE\',\n headers: {\n Accept: \'application/json\'\n },\n cache: \'no-store\'\n });\n case 3:\n r = _context5.v;\n _context5.n = 4;\n return r.json()["catch"](function () {\n return {};\n });\n case 4:\n j = _context5.v;\n if (r.ok) {\n _context5.n = 5;\n break;\n }\n setError(j && j.error || \'Could not destroy session\');\n return _context5.a(2);\n case 5:\n _context5.n = 6;\n return refreshSessions();\n case 6:\n if (timingSafeStringEqual(token, tokenId)) {\n try {\n removeStorageKey(DELEGATION_STORAGE_KEY);\n } catch (e) {}\n notifyDelegationStorageChanged();\n setDelegation(null);\n setMe(null);\n }\n _context5.n = 8;\n break;\n case 7:\n _context5.p = 7;\n _t5 = _context5.v;\n setError(_t5 && _t5.message ? _t5.message : String(_t5));\n case 8:\n _context5.p = 8;\n endBusy();\n return _context5.f(8);\n case 9:\n return _context5.a(2);\n }\n }, _callee5, null, [[2, 7, 8, 9]]);\n }));\n return function destroyByTokenId(_x2) {\n return _ref5.apply(this, arguments);\n };\n }();\n var external = !!token;\n return /*#__PURE__*/React.createElement(Segment, {\n style: {\n maxWidth: 960,\n margin: \'1em auto\'\n }\n }, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "security-page-heading",\n "aria-describedby": "security-page-summary"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "security-page-heading"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield alternate",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Security & delegation")), /*#__PURE__*/React.createElement("p", {\n id: "security-page-summary",\n style: {\n color: \'#666\'\n }\n }, "When you use ", /*#__PURE__*/React.createElement("strong", null, "Log in with Fabric Hub (desktop)"), ", private keys stay with the Hub node; the browser uses ", /*#__PURE__*/React.createElement("strong", null, "external signing"), ". Confirm each signature in this app (web or desktop shell) via the delegation modal."), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginTop: \'0.65em\'\n }\n }, "Related:", \' \', uf.bitcoinPayments ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Link, {\n to: "/payments"\n }, "Bitcoin Payments"), " (receive vs Hub-wallet send vs Payjoin),", \' \') : /*#__PURE__*/React.createElement(React.Fragment, null, "Bitcoin Payments (enable ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin \\u2014 Payments"), " in Admin \\u2192 Feature visibility for a nav link),", \' \'), /*#__PURE__*/React.createElement(Link, {\n to: "/documents"\n }, "Documents"), " (pay-to-distribute and hosting proposals show extra tips when you have no local wire-signing key).")), error && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n onDismiss: function onDismiss() {\n return setError(null);\n }\n }, error), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "security-linked-devices-h3"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "security-linked-devices-h3"\n }, "Linked devices"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.95em\'\n }\n }, "Peer-equivalent identity cluster (Passport, Android, desktop, this Hub). Revoke publishes a BIP340 IdentityCrossSignRevoke Fabric Message. Unlock this identity first. A stolen device stays you until another cluster member revokes."), linkedDevices.length === 0 ? /*#__PURE__*/React.createElement(Message, null, "No linked devices on this browser. Create or accept a ", /*#__PURE__*/React.createElement("code", null, "fabric://link"), " from Identity.") : /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true\n }, linkedDevices.map(function (d, i) {\n var pid = peerIdOf(d);\n return /*#__PURE__*/React.createElement(List.Item, {\n key: pid || i\n }, /*#__PURE__*/React.createElement(List.Content, {\n floated: "right"\n }, /*#__PURE__*/React.createElement(Button, {\n negative: true,\n size: "mini",\n disabled: busy,\n onClick: function onClick() {\n return void handleRevokeDevice(d);\n }\n }, "Revoke")), /*#__PURE__*/React.createElement(List.Header, null, d.label || d.kind || \'Device\'), /*#__PURE__*/React.createElement(List.Description, null, pid ? /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, pid) : \'—\', d.hubOrigin ? " \\xB7 ".concat(d.hubOrigin) : \'\', d.linkedAt ? " \\xB7 ".concat(new Date(d.linkedAt).toLocaleString()) : \'\'));\n })))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "security-external-signing-h3"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "security-external-signing-h3"\n }, "External signing"), external ? /*#__PURE__*/React.createElement(Message, {\n info: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "linkify",\n "aria-hidden": "true"\n }), "External signing is ", /*#__PURE__*/React.createElement(Label, {\n color: "teal",\n size: "small",\n "aria-hidden": "true"\n }, "enabled"), " for this browser. Approve or reject each request in the in-app delegation modal.") : /*#__PURE__*/React.createElement(Message, null, "External signing is not active. Use ", /*#__PURE__*/React.createElement("strong", null, "Identity \\u2192 Log in with Fabric Hub (desktop)"), " to delegate signing to the desktop app."), token && /*#__PURE__*/React.createElement(List, {\n bulleted: true\n }, /*#__PURE__*/React.createElement(List.Item, null, "Delegation token: ", /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, token.slice(0, 16), "\\u2026")), /*#__PURE__*/React.createElement(List.Item, null, /*#__PURE__*/React.createElement(Link, {\n to: "/sessions/".concat(encodeURIComponent(token))\n }, "Open session tools & audit")), me && me.linkedAt && /*#__PURE__*/React.createElement(List.Item, null, "Linked: ", new Date(me.linkedAt).toLocaleString())), external && token && /*#__PURE__*/React.createElement(Button, {\n negative: true,\n size: "small",\n disabled: busy,\n onClick: function onClick() {\n return void destroyMine();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "unlink"\n }), "End delegation (this browser)"))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "security-active-sessions-h3",\n "aria-describedby": "security-active-sessions-desc"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "security-active-sessions-h3"\n }, "Active delegation sessions (this Hub)"), /*#__PURE__*/React.createElement("p", {\n id: "security-active-sessions-desc",\n style: {\n color: \'#666\',\n fontSize: \'0.95em\'\n }\n }, "Loopback clients (including this page when served from localhost) can list all open delegation tokens. Use ", /*#__PURE__*/React.createElement("strong", null, "Destroy session"), " to revoke a token; the browser must log in again."), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n type: "button",\n onClick: function onClick() {\n return void refreshSessions();\n },\n disabled: busy,\n "aria-label": "Refresh delegation sessions list"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh",\n "aria-hidden": "true"\n }), "Refresh list"), /*#__PURE__*/React.createElement(Table, {\n celled: true,\n compact: true,\n unstackable: true,\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Token"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Origin"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Linked"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Session"), /*#__PURE__*/React.createElement(Table.HeaderCell, null))), /*#__PURE__*/React.createElement(Table.Body, null, sessions.length === 0 ? /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, {\n colSpan: "5"\n }, "No active delegation sessions.")) : sessions.map(function (s) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: s.tokenId\n }, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.85em\'\n }\n }, s.token)), /*#__PURE__*/React.createElement(Table.Cell, null, s.origin || \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, s.linkedAt ? new Date(s.linkedAt).toLocaleString() : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/sessions/".concat(encodeURIComponent(s.tokenId)),\n size: "mini",\n basic: true\n }, "Open")), /*#__PURE__*/React.createElement(Table.Cell, {\n collapsing: true\n }, /*#__PURE__*/React.createElement(Button, {\n negative: true,\n size: "mini",\n disabled: busy,\n onClick: function onClick() {\n return void destroyByTokenId(s.tokenId);\n }\n }, "Destroy session")));\n }))))));\n}\nmodule.exports = SecurityHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxDQUFDOEYsT0FBTyxDQUFDLENBQUc7TUFDakQwQixJQUFJLEVBQUMsTUFBTTtNQUNYYSxLQUFLO0lBQUEsR0FDTixNQUVPLENBQ0UsQ0FBQyxlQUNibEssS0FBQSxDQUFBZ0ksYUFBQSxDQUFDcEgsS0FBSyxDQUFDOEosSUFBSTtNQUFDRSxVQUFVO0lBQUEsZ0JBQ3BCNUssS0FBQSxDQUFBZ0ksYUFBQSxDQUFDM0gsTUFBTTtNQUNMdUksUUFBUTtNQUNSUyxJQUFJLEVBQUMsTUFBTTtNQUNYQyxRQUFRLEVBQUUvRixJQUFLO01BQ2ZnRyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtRQUFBLE9BQVEsS0FBSy9CLGdCQUFnQixDQUFDM0YsQ0FBQyxDQUFDOEYsT0FBTyxDQUFDO01BQUE7SUFBQyxHQUNqRCxpQkFFTyxDQUNFLENBQ0gsQ0FBQztFQUFBLENBQ2IsQ0FFTyxDQUNQLENBQ0UsQ0FDRixDQUNGLENBQUM7QUFFZDtBQUVBa0QsTUFBTSxDQUFDQyxPQUFPLEdBQUczSSxZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL1NlY3VyaXR5SG9tZS5qcz82YjZkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5jb25zdCB7XG4gIEJ1dHRvbixcbiAgSGVhZGVyLFxuICBJY29uLFxuICBMYWJlbCxcbiAgTGlzdCxcbiAgTWVzc2FnZSxcbiAgU2VnbWVudCxcbiAgVGFibGVcbn0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuXG5jb25zdCB7XG4gIERFTEVHQVRJT05fU1RPUkFHRV9LRVksXG4gIERFTEVHQVRJT05fQ0hBTkdFRF9FVkVOVCxcbiAgbm90aWZ5RGVsZWdhdGlvblN0b3JhZ2VDaGFuZ2VkXG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0RlbGVnYXRpb25Mb2NhbCcpO1xuY29uc3Qge1xuICByZWFkU3RvcmFnZUpTT04sXG4gIHJlbW92ZVN0b3JhZ2VLZXlcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljQnJvd3NlclN0YXRlJyk7XG5jb25zdCB7XG4gIGxvYWRIdWJVaUZlYXR1cmVGbGFncyxcbiAgc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3Ncbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViVWlGZWF0dXJlRmxhZ3MnKTtcbmNvbnN0IHtcbiAgcmVhZExpbmtlZERldmljZXMsXG4gIHBlZXJJZE9mLFxuICByZXZva2VMaW5rZWREZXZpY2Vcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljTGlua2VkRGV2aWNlcycpO1xuXG5mdW5jdGlvbiB0aW1pbmdTYWZlU3RyaW5nRXF1YWwgKGEsIGIpIHtcbiAgY29uc3QgcyA9IFN0cmluZyhhKTtcbiAgY29uc3QgdCA9IFN0cmluZyhiKTtcbiAgaWYgKHMubGVuZ3RoICE9PSB0Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBsZXQgZGlmZiA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykgZGlmZiB8PSBzLmNoYXJDb2RlQXQoaSkgXiB0LmNoYXJDb2RlQXQoaSk7XG4gIHJldHVybiBkaWZmID09PSAwO1xufVxuXG5mdW5jdGlvbiByZWFkRGVsZWdhdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcmVhZFN0b3JhZ2VKU09OKERFTEVHQVRJT05fU1RPUkFHRV9LRVksIG51bGwpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWN1cml0eSAmIGRlbGVnYXRpb246IGV4dGVybmFsIHNpZ25pbmcgc2Vzc2lvbnMsIGh1Yi1zaWRlIGRlbGVnYXRpb24gdG9rZW5zLCBwZW5kaW5nIHNpZ24gZmxvdy5cbiAqL1xuZnVuY3Rpb24gU2VjdXJpdHlIb21lICgpIHtcbiAgY29uc3QgW2RlbGVnYXRpb24sIHNldERlbGVnYXRpb25dID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gcmVhZERlbGVnYXRpb24oKSk7XG4gIGNvbnN0IFttZSwgc2V0TWVdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtzZXNzaW9ucywgc2V0U2Vzc2lvbnNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbYnVzeSwgc2V0QnVzeV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtsaW5rZWREZXZpY2VzLCBzZXRMaW5rZWREZXZpY2VzXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHJlYWRMaW5rZWREZXZpY2VzKCkpO1xuICBjb25zdCBidXN5RGVwdGhSZWYgPSBSZWFjdC51c2VSZWYoMCk7XG5cbiAgY29uc3QgYmVnaW5CdXN5ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGJ1c3lEZXB0aFJlZi5jdXJyZW50ICs9IDE7XG4gICAgc2V0QnVzeSh0cnVlKTtcbiAgfSwgW10pO1xuICBjb25zdCBlbmRCdXN5ID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGJ1c3lEZXB0aFJlZi5jdXJyZW50ID0gTWF0aC5tYXgoMCwgYnVzeURlcHRoUmVmLmN1cnJlbnQgLSAxKTtcbiAgICBpZiAoYnVzeURlcHRoUmVmLmN1cnJlbnQgPT09IDApIHNldEJ1c3koZmFsc2UpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb3JpZ2luID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubG9jYXRpb24ub3JpZ2luIDogJyc7XG4gIGNvbnN0IHRva2VuID0gZGVsZWdhdGlvbiAmJiBkZWxlZ2F0aW9uLnRva2VuID8gZGVsZWdhdGlvbi50b2tlbiA6IG51bGw7XG5cbiAgY29uc3QgcmVmcmVzaE1lID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHNldE1lKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBiZWdpbkJ1c3koKTtcbiAgICBzZXRFcnJvcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IGZldGNoKGAke29yaWdpbn0vc2Vzc2lvbnMvJHtlbmNvZGVVUklDb21wb25lbnQodG9rZW4pfWAsIHtcbiAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCwgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgY2FjaGU6ICduby1zdG9yZSdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaiA9IGF3YWl0IHIuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgaWYgKCFyLm9rKSB7XG4gICAgICAgIHNldE1lKG51bGwpO1xuICAgICAgICBzZXRFcnJvcigoaiAmJiBqLmVycm9yKSB8fCAnQ291bGQgbm90IGxvYWQgZGVsZWdhdGlvbiBzZXNzaW9uJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNldE1lKGouc2Vzc2lvbiB8fCBudWxsKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXRNZShudWxsKTtcbiAgICAgIHNldEVycm9yKChlICYmIGUubWVzc2FnZSkgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBlbmRCdXN5KCk7XG4gICAgfVxuICB9LCBbb3JpZ2luLCB0b2tlbiwgYmVnaW5CdXN5LCBlbmRCdXN5XSk7XG5cbiAgY29uc3QgcmVmcmVzaFNlc3Npb25zID0gUmVhY3QudXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGJlZ2luQnVzeSgpO1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgZmV0Y2goYCR7b3JpZ2lufS9zZXNzaW9uc2AsIHsgaGVhZGVyczogeyBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCBjYWNoZTogJ25vLXN0b3JlJyB9KTtcbiAgICAgIGNvbnN0IGogPSBhd2FpdCByLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKTtcbiAgICAgIGlmICghci5vaykge1xuICAgICAgICBzZXRTZXNzaW9ucyhbXSk7XG4gICAgICAgIGlmIChyLnN0YXR1cyAhPT0gNDAzKSBzZXRFcnJvcigoaiAmJiBqLmVycm9yKSB8fCAnQ291bGQgbm90IGxpc3Qgc2Vzc2lvbnMnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0U2Vzc2lvbnMoQXJyYXkuaXNBcnJheShqLnNlc3Npb25zKSA/IGouc2Vzc2lvbnMgOiBbXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0U2Vzc2lvbnMoW10pO1xuICAgICAgc2V0RXJyb3IoYENvdWxkIG5vdCBsaXN0IGRlbGVnYXRpb24gc2Vzc2lvbnM6ICR7KGUgJiYgZS5tZXNzYWdlKSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZW5kQnVzeSgpO1xuICAgIH1cbiAgfSwgW29yaWdpbiwgYmVnaW5CdXN5LCBlbmRCdXN5XSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICB2b2lkIHJlZnJlc2hNZSgpO1xuICB9LCBbcmVmcmVzaE1lXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICB2b2lkIHJlZnJlc2hTZXNzaW9ucygpO1xuICB9LCBbcmVmcmVzaFNlc3Npb25zXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc3luYyA9ICgpID0+IHNldERlbGVnYXRpb24ocmVhZERlbGVnYXRpb24oKSk7XG4gICAgY29uc3Qgb25TdG9yYWdlID0gKGV2KSA9PiB7XG4gICAgICBpZiAoZXYgJiYgZXYua2V5ID09PSBERUxFR0FUSU9OX1NUT1JBR0VfS0VZKSBzeW5jKCk7XG4gICAgfTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihERUxFR0FUSU9OX0NIQU5HRURfRVZFTlQsIHN5bmMpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgb25TdG9yYWdlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoREVMRUdBVElPTl9DSEFOR0VEX0VWRU5ULCBzeW5jKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgb25TdG9yYWdlKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgY29uc3QgcmVmcmVzaExpbmtlZERldmljZXMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0TGlua2VkRGV2aWNlcyhyZWFkTGlua2VkRGV2aWNlcygpKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZVJldm9rZURldmljZSA9IFJlYWN0LnVzZUNhbGxiYWNrKGFzeW5jIChkZXZpY2UpID0+IHtcbiAgICBiZWdpbkJ1c3koKTtcbiAgICBzZXRFcnJvcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IHJldm9rZUxpbmtlZERldmljZShkZXZpY2UpO1xuICAgICAgaWYgKCFyLm9rKSB7XG4gICAgICAgIHNldEVycm9yKHIuZXJyb3IgfHwgJ0NvdWxkIG5vdCByZXZva2UgZGV2aWNlJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlZnJlc2hMaW5rZWREZXZpY2VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0RXJyb3IoKGUgJiYgZS5tZXNzYWdlKSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVuZEJ1c3koKTtcbiAgICB9XG4gIH0sIFtiZWdpbkJ1c3ksIGVuZEJ1c3ksIHJlZnJlc2hMaW5rZWREZXZpY2VzXSk7XG5cbiAgY29uc3QgW2h1YlVpVGljaywgc2V0SHViVWlUaWNrXSA9IFJlYWN0LnVzZVN0YXRlKDApO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4gc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MoKCkgPT4gc2V0SHViVWlUaWNrKCh0KSA9PiB0ICsgMSkpLCBbXSk7XG4gIHZvaWQgaHViVWlUaWNrO1xuICBjb25zdCB1ZiA9IGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuXG4gIGNvbnN0IGRlc3Ryb3lNaW5lID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghdG9rZW4pIHJldHVybjtcbiAgICBiZWdpbkJ1c3koKTtcbiAgICBzZXRFcnJvcihudWxsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgciA9IGF3YWl0IGZldGNoKGAke29yaWdpbn0vc2Vzc2lvbnMvJHtlbmNvZGVVUklDb21wb25lbnQodG9rZW4pfWAsIHtcbiAgICAgICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCwgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgY2FjaGU6ICduby1zdG9yZSdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaiA9IGF3YWl0IHIuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgaWYgKCFyLm9rKSB7XG4gICAgICAgIHNldEVycm9yKChqICYmIGouZXJyb3IpIHx8ICdDb3VsZCBub3QgZW5kIGRlbGVnYXRpb24nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVtb3ZlU3RvcmFnZUtleShERUxFR0FUSU9OX1NUT1JBR0VfS0VZKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICBub3RpZnlEZWxlZ2F0aW9uU3RvcmFnZUNoYW5nZWQoKTtcbiAgICAgIHNldERlbGVnYXRpb24obnVsbCk7XG4gICAgICBzZXRNZShudWxsKTtcbiAgICAgIGF3YWl0IHJlZnJlc2hTZXNzaW9ucygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldEVycm9yKChlICYmIGUubWVzc2FnZSkgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBlbmRCdXN5KCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRlc3Ryb3lCeVRva2VuSWQgPSBhc3luYyAodG9rZW5JZCkgPT4ge1xuICAgIGlmICghdG9rZW5JZCkgcmV0dXJuO1xuICAgIGJlZ2luQnVzeSgpO1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgZmV0Y2goYCR7b3JpZ2lufS9zZXNzaW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudCh0b2tlbklkKX1gLCB7XG4gICAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgY2FjaGU6ICduby1zdG9yZSdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaiA9IGF3YWl0IHIuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgaWYgKCFyLm9rKSB7XG4gICAgICAgIHNldEVycm9yKChqICYmIGouZXJyb3IpIHx8ICdDb3VsZCBub3QgZGVzdHJveSBzZXNzaW9uJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHJlZnJlc2hTZXNzaW9ucygpO1xuICAgICAgaWYgKHRpbWluZ1NhZmVTdHJpbmdFcXVhbCh0b2tlbiwgdG9rZW5JZCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZW1vdmVTdG9yYWdlS2V5KERFTEVHQVRJT05fU1RPUkFHRV9LRVkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICBub3RpZnlEZWxlZ2F0aW9uU3RvcmFnZUNoYW5nZWQoKTtcbiAgICAgICAgc2V0RGVsZWdhdGlvbihudWxsKTtcbiAgICAgICAgc2V0TWUobnVsbCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0RXJyb3IoKGUgJiYgZS5tZXNzYWdlKSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGVuZEJ1c3koKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZXh0ZXJuYWwgPSAhIXRva2VuO1xuXG4gIHJldHVybiAoXG4gICAgPFNlZ21lbnQgc3R5bGU9e3sgbWF4V2lkdGg6IDk2MCwgbWFyZ2luOiAnMWVtIGF1dG8nIH19PlxuICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwic2VjdXJpdHktcGFnZS1oZWFkaW5nXCIgYXJpYS1kZXNjcmliZWRieT1cInNlY3VyaXR5LXBhZ2Utc3VtbWFyeVwiPlxuICAgICAgICA8SGVhZGVyIGFzPVwiaDJcIiBpZD1cInNlY3VyaXR5LXBhZ2UtaGVhZGluZ1wiPlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJzaGllbGQgYWx0ZXJuYXRlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+U2VjdXJpdHkgJmFtcDsgZGVsZWdhdGlvbjwvSGVhZGVyLkNvbnRlbnQ+XG4gICAgICAgIDwvSGVhZGVyPlxuICAgICAgICA8cCBpZD1cInNlY3VyaXR5LXBhZ2Utc3VtbWFyeVwiIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+XG4gICAgICAgICAgV2hlbiB5b3UgdXNlIDxzdHJvbmc+TG9nIGluIHdpdGggRmFicmljIEh1YiAoZGVza3RvcCk8L3N0cm9uZz4sIHByaXZhdGUga2V5cyBzdGF5IHdpdGggdGhlIEh1YiBub2RlOyB0aGUgYnJvd3NlciB1c2VzIDxzdHJvbmc+ZXh0ZXJuYWwgc2lnbmluZzwvc3Ryb25nPi4gQ29uZmlybSBlYWNoIHNpZ25hdHVyZSBpbiB0aGlzIGFwcCAod2ViIG9yIGRlc2t0b3Agc2hlbGwpIHZpYSB0aGUgZGVsZWdhdGlvbiBtb2RhbC5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW5Ub3A6ICcwLjY1ZW0nIH19PlxuICAgICAgICAgIFJlbGF0ZWQ6eycgJ31cbiAgICAgICAgICB7dWYuYml0Y29pblBheW1lbnRzID8gKFxuICAgICAgICAgICAgPD48TGluayB0bz1cIi9wYXltZW50c1wiPkJpdGNvaW4gUGF5bWVudHM8L0xpbms+IChyZWNlaXZlIHZzIEh1Yi13YWxsZXQgc2VuZCB2cyBQYXlqb2luKSx7JyAnfTwvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PkJpdGNvaW4gUGF5bWVudHMgKGVuYWJsZSA8c3Ryb25nPkJpdGNvaW4g4oCUIFBheW1lbnRzPC9zdHJvbmc+IGluIEFkbWluIOKGkiBGZWF0dXJlIHZpc2liaWxpdHkgZm9yIGEgbmF2IGxpbmspLHsnICd9PC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8TGluayB0bz1cIi9kb2N1bWVudHNcIj5Eb2N1bWVudHM8L0xpbms+IChwYXktdG8tZGlzdHJpYnV0ZSBhbmQgaG9zdGluZyBwcm9wb3NhbHMgc2hvdyBleHRyYSB0aXBzIHdoZW4geW91IGhhdmUgbm8gbG9jYWwgd2lyZS1zaWduaW5nIGtleSkuXG4gICAgICAgIDwvcD5cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAge2Vycm9yICYmIChcbiAgICAgICAgPE1lc3NhZ2UgbmVnYXRpdmUgb25EaXNtaXNzPXsoKSA9PiBzZXRFcnJvcihudWxsKX0+XG4gICAgICAgICAge2Vycm9yfVxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApfVxuXG4gICAgICA8U2VnbWVudD5cbiAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwic2VjdXJpdHktbGlua2VkLWRldmljZXMtaDNcIj5cbiAgICAgICAgPEhlYWRlciBhcz1cImgzXCIgaWQ9XCJzZWN1cml0eS1saW5rZWQtZGV2aWNlcy1oM1wiPkxpbmtlZCBkZXZpY2VzPC9IZWFkZXI+XG4gICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45NWVtJyB9fT5cbiAgICAgICAgICBQZWVyLWVxdWl2YWxlbnQgaWRlbnRpdHkgY2x1c3RlciAoUGFzc3BvcnQsIEFuZHJvaWQsIGRlc2t0b3AsIHRoaXMgSHViKS4gUmV2b2tlIHB1Ymxpc2hlcyBhIEJJUDM0MFxuICAgICAgICAgIElkZW50aXR5Q3Jvc3NTaWduUmV2b2tlIEZhYnJpYyBNZXNzYWdlLiBVbmxvY2sgdGhpcyBpZGVudGl0eSBmaXJzdC4gQSBzdG9sZW4gZGV2aWNlIHN0YXlzIHlvdSB1bnRpbFxuICAgICAgICAgIGFub3RoZXIgY2x1c3RlciBtZW1iZXIgcmV2b2tlcy5cbiAgICAgICAgPC9wPlxuICAgICAgICB7bGlua2VkRGV2aWNlcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPE1lc3NhZ2U+XG4gICAgICAgICAgICBObyBsaW5rZWQgZGV2aWNlcyBvbiB0aGlzIGJyb3dzZXIuIENyZWF0ZSBvciBhY2NlcHQgYSA8Y29kZT5mYWJyaWM6Ly9saW5rPC9jb2RlPiBmcm9tIElkZW50aXR5LlxuICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TGlzdCBkaXZpZGVkIHJlbGF4ZWQ+XG4gICAgICAgICAgICB7bGlua2VkRGV2aWNlcy5tYXAoKGQsIGkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGlkID0gcGVlcklkT2YoZCk7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPExpc3QuSXRlbSBrZXk9e3BpZCB8fCBpfT5cbiAgICAgICAgICAgICAgICAgIDxMaXN0LkNvbnRlbnQgZmxvYXRlZD1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBuZWdhdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17YnVzeX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIGhhbmRsZVJldm9rZURldmljZShkKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIFJldm9rZVxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgICAgPExpc3QuSGVhZGVyPntkLmxhYmVsIHx8IGQua2luZCB8fCAnRGV2aWNlJ308L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPExpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIHtwaWQgPyA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzAuODVlbScgfX0+e3BpZH08L2NvZGU+IDogJ+KAlCd9XG4gICAgICAgICAgICAgICAgICAgIHtkLmh1Yk9yaWdpbiA/IGAgwrcgJHtkLmh1Yk9yaWdpbn1gIDogJyd9XG4gICAgICAgICAgICAgICAgICAgIHtkLmxpbmtlZEF0ID8gYCDCtyAke25ldyBEYXRlKGQubGlua2VkQXQpLnRvTG9jYWxlU3RyaW5nKCl9YCA6ICcnfVxuICAgICAgICAgICAgICAgICAgPC9MaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9MaXN0PlxuICAgICAgICApfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgIDxTZWdtZW50PlxuICAgICAgICA8c2VjdGlvbiBhcmlhLWxhYmVsbGVkYnk9XCJzZWN1cml0eS1leHRlcm5hbC1zaWduaW5nLWgzXCI+XG4gICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiIGlkPVwic2VjdXJpdHktZXh0ZXJuYWwtc2lnbmluZy1oM1wiPkV4dGVybmFsIHNpZ25pbmc8L0hlYWRlcj5cbiAgICAgICAge2V4dGVybmFsID8gKFxuICAgICAgICAgIDxNZXNzYWdlIGluZm8+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwibGlua2lmeVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICBFeHRlcm5hbCBzaWduaW5nIGlzIDxMYWJlbCBjb2xvcj1cInRlYWxcIiBzaXplPVwic21hbGxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5lbmFibGVkPC9MYWJlbD4gZm9yIHRoaXMgYnJvd3Nlci4gQXBwcm92ZSBvciByZWplY3QgZWFjaCByZXF1ZXN0IGluIHRoZSBpbi1hcHAgZGVsZWdhdGlvbiBtb2RhbC5cbiAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPE1lc3NhZ2U+XG4gICAgICAgICAgICBFeHRlcm5hbCBzaWduaW5nIGlzIG5vdCBhY3RpdmUuIFVzZSA8c3Ryb25nPklkZW50aXR5IOKGkiBMb2cgaW4gd2l0aCBGYWJyaWMgSHViIChkZXNrdG9wKTwvc3Ryb25nPiB0byBkZWxlZ2F0ZSBzaWduaW5nIHRvIHRoZSBkZXNrdG9wIGFwcC5cbiAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICl9XG4gICAgICAgIHt0b2tlbiAmJiAoXG4gICAgICAgICAgPExpc3QgYnVsbGV0ZWQ+XG4gICAgICAgICAgICA8TGlzdC5JdGVtPkRlbGVnYXRpb24gdG9rZW46IDxjb2RlIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e3Rva2VuLnNsaWNlKDAsIDE2KX3igKY8L2NvZGU+PC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICA8TGlzdC5JdGVtPlxuICAgICAgICAgICAgICA8TGluayB0bz17YC9zZXNzaW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudCh0b2tlbil9YH0+T3BlbiBzZXNzaW9uIHRvb2xzICZhbXA7IGF1ZGl0PC9MaW5rPlxuICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgICB7bWUgJiYgbWUubGlua2VkQXQgJiYgKFxuICAgICAgICAgICAgICA8TGlzdC5JdGVtPkxpbmtlZDoge25ldyBEYXRlKG1lLmxpbmtlZEF0KS50b0xvY2FsZVN0cmluZygpfTwvTGlzdC5JdGVtPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0xpc3Q+XG4gICAgICAgICl9XG4gICAgICAgIHtleHRlcm5hbCAmJiB0b2tlbiAmJiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgbmVnYXRpdmVcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBkaXNhYmxlZD17YnVzeX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgZGVzdHJveU1pbmUoKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwidW5saW5rXCIgLz5cbiAgICAgICAgICAgIEVuZCBkZWxlZ2F0aW9uICh0aGlzIGJyb3dzZXIpXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICl9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvU2VnbWVudD5cblxuICAgICAgPFNlZ21lbnQ+XG4gICAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cInNlY3VyaXR5LWFjdGl2ZS1zZXNzaW9ucy1oM1wiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWN1cml0eS1hY3RpdmUtc2Vzc2lvbnMtZGVzY1wiPlxuICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBpZD1cInNlY3VyaXR5LWFjdGl2ZS1zZXNzaW9ucy1oM1wiPkFjdGl2ZSBkZWxlZ2F0aW9uIHNlc3Npb25zICh0aGlzIEh1Yik8L0hlYWRlcj5cbiAgICAgICAgPHAgaWQ9XCJzZWN1cml0eS1hY3RpdmUtc2Vzc2lvbnMtZGVzY1wiIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45NWVtJyB9fT5cbiAgICAgICAgICBMb29wYmFjayBjbGllbnRzIChpbmNsdWRpbmcgdGhpcyBwYWdlIHdoZW4gc2VydmVkIGZyb20gbG9jYWxob3N0KSBjYW4gbGlzdCBhbGwgb3BlbiBkZWxlZ2F0aW9uIHRva2Vucy4gVXNlIDxzdHJvbmc+RGVzdHJveSBzZXNzaW9uPC9zdHJvbmc+IHRvIHJldm9rZSBhIHRva2VuOyB0aGUgYnJvd3NlciBtdXN0IGxvZyBpbiBhZ2Fpbi5cbiAgICAgICAgPC9wPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBiYXNpY1xuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgcmVmcmVzaFNlc3Npb25zKCl9XG4gICAgICAgICAgZGlzYWJsZWQ9e2J1c3l9XG4gICAgICAgICAgYXJpYS1sYWJlbD1cIlJlZnJlc2ggZGVsZWdhdGlvbiBzZXNzaW9ucyBsaXN0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICBSZWZyZXNoIGxpc3RcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxUYWJsZSBjZWxsZWQgY29tcGFjdCB1bnN0YWNrYWJsZSBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19PlxuICAgICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlRva2VuPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5PcmlnaW48L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPkxpbmtlZDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+U2Vzc2lvbjwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGwgLz5cbiAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICAgIDxUYWJsZS5Cb2R5PlxuICAgICAgICAgICAge3Nlc3Npb25zLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBjb2xTcGFuPVwiNVwiPk5vIGFjdGl2ZSBkZWxlZ2F0aW9uIHNlc3Npb25zLjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICBzZXNzaW9ucy5tYXAoKHMpID0+IChcbiAgICAgICAgICAgICAgICA8VGFibGUuUm93IGtleT17cy50b2tlbklkfT5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44NWVtJyB9fT57cy50b2tlbn08L2NvZGU+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e3Mub3JpZ2luIHx8ICfigJQnfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntzLmxpbmtlZEF0ID8gbmV3IERhdGUocy5saW5rZWRBdCkudG9Mb2NhbGVTdHJpbmcoKSA6ICfigJQnfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIGNvbGxhcHNpbmc+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBhcz17TGlua31cbiAgICAgICAgICAgICAgICAgICAgICB0bz17YC9zZXNzaW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChzLnRva2VuSWQpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBPcGVuXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgY29sbGFwc2luZz5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtidXN5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgZGVzdHJveUJ5VG9rZW5JZChzLnRva2VuSWQpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgRGVzdHJveSBzZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1RhYmxlLkJvZHk+XG4gICAgICAgIDwvVGFibGU+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvU2VnbWVudD5cbiAgICA8L1NlZ21lbnQ+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VjdXJpdHlIb21lO1xuIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIlN5bWJvbCIsIm4iLCJpdGVyYXRvciIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsIm5leHQiLCJwdXNoIiwiaXNBcnJheSIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTGluayIsIl9yZXF1aXJlMiIsIkJ1dHRvbiIsIkhlYWRlciIsIkljb24iLCJMYWJlbCIsIkxpc3QiLCJNZXNzYWdlIiwiU2VnbWVudCIsIlRhYmxlIiwiX3JlcXVpcmUzIiwiREVMRUdBVElPTl9TVE9SQUdFX0tFWSIsIkRFTEVHQVRJT05fQ0hBTkdFRF9FVkVOVCIsIm5vdGlmeURlbGVnYXRpb25TdG9yYWdlQ2hhbmdlZCIsIl9yZXF1aXJlNCIsInJlYWRTdG9yYWdlSlNPTiIsInJlbW92ZVN0b3JhZ2VLZXkiLCJfcmVxdWlyZTUiLCJsb2FkSHViVWlGZWF0dXJlRmxhZ3MiLCJzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncyIsIl9yZXF1aXJlNiIsInJlYWRMaW5rZWREZXZpY2VzIiwicGVlcklkT2YiLCJyZXZva2VMaW5rZWREZXZpY2UiLCJ0aW1pbmdTYWZlU3RyaW5nRXF1YWwiLCJiIiwicyIsIlN0cmluZyIsImRpZmYiLCJjaGFyQ29kZUF0IiwicmVhZERlbGVnYXRpb24iLCJ3aW5kb3ciLCJTZWN1cml0eUhvbWUiLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJkZWxlZ2F0aW9uIiwic2V0RGVsZWdhdGlvbiIsIl9SZWFjdCR1c2VTdGF0ZTMiLCJfUmVhY3QkdXNlU3RhdGU0IiwibWUiLCJzZXRNZSIsIl9SZWFjdCR1c2VTdGF0ZTUiLCJfUmVhY3QkdXNlU3RhdGU2Iiwic2Vzc2lvbnMiLCJzZXRTZXNzaW9ucyIsIl9SZWFjdCR1c2VTdGF0ZTciLCJfUmVhY3QkdXNlU3RhdGU4IiwiZXJyb3IiLCJzZXRFcnJvciIsIl9SZWFjdCR1c2VTdGF0ZTkiLCJfUmVhY3QkdXNlU3RhdGUwIiwiYnVzeSIsInNldEJ1c3kiLCJfUmVhY3QkdXNlU3RhdGUxIiwiX1JlYWN0JHVzZVN0YXRlMTAiLCJsaW5rZWREZXZpY2VzIiwic2V0TGlua2VkRGV2aWNlcyIsImJ1c3lEZXB0aFJlZiIsInVzZVJlZiIsImJlZ2luQnVzeSIsInVzZUNhbGxiYWNrIiwiY3VycmVudCIsImVuZEJ1c3kiLCJNYXRoIiwibWF4Iiwib3JpZ2luIiwibG9jYXRpb24iLCJ0b2tlbiIsInJlZnJlc2hNZSIsIl9jYWxsZWUiLCJqIiwiX3QiLCJfY29udGV4dCIsImZldGNoIiwiY29uY2F0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJBY2NlcHQiLCJjYWNoZSIsImpzb24iLCJvayIsInNlc3Npb24iLCJtZXNzYWdlIiwicmVmcmVzaFNlc3Npb25zIiwiX2NhbGxlZTIiLCJfdDIiLCJfY29udGV4dDIiLCJzdGF0dXMiLCJ1c2VFZmZlY3QiLCJ1bmRlZmluZWQiLCJzeW5jIiwib25TdG9yYWdlIiwiZXYiLCJrZXkiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlZnJlc2hMaW5rZWREZXZpY2VzIiwiaGFuZGxlUmV2b2tlRGV2aWNlIiwiX3JlZjMiLCJfY2FsbGVlMyIsImRldmljZSIsIl90MyIsIl9jb250ZXh0MyIsIl94IiwiX1JlYWN0JHVzZVN0YXRlMTEiLCJfUmVhY3QkdXNlU3RhdGUxMiIsImh1YlVpVGljayIsInNldEh1YlVpVGljayIsInVmIiwiZGVzdHJveU1pbmUiLCJfcmVmNCIsIl9jYWxsZWU0IiwiX3Q0IiwiX2NvbnRleHQ0IiwibWV0aG9kIiwiZGVzdHJveUJ5VG9rZW5JZCIsIl9yZWY1IiwiX2NhbGxlZTUiLCJ0b2tlbklkIiwiX3Q1IiwiX2NvbnRleHQ1IiwiX3gyIiwiZXh0ZXJuYWwiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJtYXhXaWR0aCIsIm1hcmdpbiIsImFzIiwiaWQiLCJDb250ZW50IiwiY29sb3IiLCJtYXJnaW5Ub3AiLCJiaXRjb2luUGF5bWVudHMiLCJGcmFnbWVudCIsInRvIiwibmVnYXRpdmUiLCJvbkRpc21pc3MiLCJmb250U2l6ZSIsImRpdmlkZWQiLCJyZWxheGVkIiwibWFwIiwicGlkIiwiSXRlbSIsImZsb2F0ZWQiLCJzaXplIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwibGFiZWwiLCJraW5kIiwiRGVzY3JpcHRpb24iLCJodWJPcmlnaW4iLCJsaW5rZWRBdCIsIkRhdGUiLCJ0b0xvY2FsZVN0cmluZyIsImluZm8iLCJidWxsZXRlZCIsIndvcmRCcmVhayIsImJhc2ljIiwidHlwZSIsImNlbGxlZCIsImNvbXBhY3QiLCJ1bnN0YWNrYWJsZSIsIlJvdyIsIkhlYWRlckNlbGwiLCJCb2R5IiwiQ2VsbCIsImNvbFNwYW4iLCJjb2xsYXBzaW5nIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/SecurityHome.js\n\n}')},"./components/SecuritySessionHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Per–delegation-token workspace: audit log, pending queue, Hub public key for verification.\n * Token is the URL param (encodeURIComponent). Bearer on GET must match.\n */\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link,\n useParams = _require.useParams;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Message = _require2.Message,\n Segment = _require2.Segment,\n Table = _require2.Table,\n Loader = _require2.Loader;\nvar _require3 = __webpack_require__(/*! ../functions/fabricDelegationLocal */ "./functions/fabricDelegationLocal.js"),\n DELEGATION_STORAGE_KEY = _require3.DELEGATION_STORAGE_KEY,\n DELEGATION_CHANGED_EVENT = _require3.DELEGATION_CHANGED_EVENT;\nfunction SecuritySessionHome() {\n var _useParams = useParams(),\n encodedId = _useParams.sessionId;\n var sessionId = encodedId ? decodeURIComponent(encodedId) : \'\';\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n data = _React$useState2[0],\n setData = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n error = _React$useState4[0],\n setError = _React$useState4[1];\n var _React$useState5 = React.useState(true),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n busy = _React$useState6[0],\n setBusy = _React$useState6[1];\n var origin = typeof window !== \'undefined\' ? window.location.origin : \'\';\n var refresh = React.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var r, j, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n if (sessionId) {\n _context.n = 1;\n break;\n }\n setError(\'Missing session id\');\n setBusy(false);\n return _context.a(2);\n case 1:\n setBusy(true);\n setError(null);\n _context.p = 2;\n _context.n = 3;\n return fetch("".concat(origin, "/sessions/").concat(encodeURIComponent(sessionId), "/delegation/audit"), {\n headers: {\n Authorization: "Bearer ".concat(sessionId),\n Accept: \'application/json\'\n },\n cache: \'no-store\'\n });\n case 3:\n r = _context.v;\n _context.n = 4;\n return r.json()["catch"](function () {\n return {};\n });\n case 4:\n j = _context.v;\n if (r.ok) {\n _context.n = 5;\n break;\n }\n setData(null);\n setError(j && j.error || "HTTP ".concat(r.status));\n return _context.a(2);\n case 5:\n if (!(!j || j.ok !== true)) {\n _context.n = 6;\n break;\n }\n setData(null);\n setError(j && j.error || \'Audit response was not successful\');\n return _context.a(2);\n case 6:\n setData(j);\n _context.n = 8;\n break;\n case 7:\n _context.p = 7;\n _t = _context.v;\n setData(null);\n setError(_t && _t.message ? _t.message : String(_t));\n case 8:\n _context.p = 8;\n setBusy(false);\n return _context.f(8);\n case 9:\n return _context.a(2);\n }\n }, _callee, null, [[2, 7, 8, 9]]);\n })), [origin, sessionId]);\n React.useEffect(function () {\n void refresh();\n }, [refresh]);\n React.useEffect(function () {\n if (typeof window === \'undefined\' || !sessionId) return undefined;\n var bump = function bump() {\n return void refresh();\n };\n window.addEventListener(DELEGATION_CHANGED_EVENT, bump);\n var onStorage = function onStorage(ev) {\n if (ev && ev.key === DELEGATION_STORAGE_KEY) bump();\n };\n window.addEventListener(\'storage\', onStorage);\n return function () {\n window.removeEventListener(DELEGATION_CHANGED_EVENT, bump);\n window.removeEventListener(\'storage\', onStorage);\n };\n }, [sessionId, refresh]);\n var session = data && data.session;\n var pending = data && Array.isArray(data.pending) ? data.pending : [];\n var fabricLog = data && Array.isArray(data.fabricLog) ? data.fabricLog : [];\n var hubPk = data && data.hubPubkeyHex ? String(data.hubPubkeyHex) : null;\n return /*#__PURE__*/React.createElement(Segment, {\n style: {\n maxWidth: 960,\n margin: \'1em auto\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings/security",\n basic: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n },\n "aria-label": "Back to security and delegation"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Security & delegation"), /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "delegation-session-heading",\n "aria-describedby": "delegation-session-summary"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "delegation-session-heading"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "key",\n "aria-hidden": "true"\n }), "Delegation session"), /*#__PURE__*/React.createElement("p", {\n id: "delegation-session-summary",\n style: {\n color: \'#666\'\n }\n }, "Tools and audit for one browser delegation token. Use ", /*#__PURE__*/React.createElement("strong", null, "Identity \\u2192 Verify signature"), " with the Hub public key below when checking Schnorr signatures."), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n type: "button",\n disabled: busy || !sessionId,\n onClick: function onClick() {\n return void refresh();\n },\n "aria-label": "Refresh delegation audit from hub"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh",\n "aria-hidden": "true"\n }), "Refresh audit"))), error && !busy && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n onDismiss: function onDismiss() {\n return setError(null);\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Could not load delegation session"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\'\n }\n }, error), sessionId ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n fontSize: \'0.9em\',\n color: \'#555\'\n }\n }, "Token:", \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, sessionId.length > 56 ? "".concat(sessionId.slice(0, 28), "\\u2026").concat(sessionId.slice(-16)) : sessionId)) : null, /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'0.85em\',\n display: \'flex\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n size: "small",\n type: "button",\n disabled: !sessionId,\n onClick: function onClick() {\n return void refresh();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Retry"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/settings/security",\n size: "small",\n basic: true\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "shield alternate",\n "aria-hidden": "true"\n }), "Security & delegation"))), busy && !data && /*#__PURE__*/React.createElement(Loader, {\n active: true,\n inline: "centered"\n }, "Loading session\\u2026"), !busy && data && data.ok && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "delegation-session-detail-h3"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "delegation-session-detail-h3"\n }, "Session"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginBottom: \'0.75em\',\n maxWidth: \'42rem\',\n lineHeight: 1.45\n }\n }, "The full delegation token is the value in this page\'s URL path (and in Security & delegation). The hub only returns a short token preview in JSON for display."), session && /*#__PURE__*/React.createElement(Table, {\n basic: "very",\n compact: true\n }, /*#__PURE__*/React.createElement(Table.Body, null, session.id ? /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Token preview")), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, session.id))) : null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Origin")), /*#__PURE__*/React.createElement(Table.Cell, null, session.origin || \'—\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Linked")), /*#__PURE__*/React.createElement(Table.Cell, null, session.linkedAt ? new Date(session.linkedAt).toLocaleString() : \'—\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Label")), /*#__PURE__*/React.createElement(Table.Cell, null, session.label || \'browser\')), /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("strong", null, "Identity id")), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, session.identityId || \'—\'))))))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "delegation-hub-pk-h3",\n "aria-describedby": "delegation-hub-pk-desc"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "delegation-hub-pk-h3"\n }, "Hub verification key"), /*#__PURE__*/React.createElement("p", {\n id: "delegation-hub-pk-desc",\n style: {\n color: \'#666\',\n fontSize: \'0.95em\'\n }\n }, "Compressed secp256k1 public key (hex) for the Hub node identity used when this session signs."), hubPk ? /*#__PURE__*/React.createElement("pre", {\n style: {\n fontSize: \'0.82em\',\n padding: \'0.75em\',\n background: \'#f7f7f7\',\n borderRadius: 4,\n wordBreak: \'break-all\',\n whiteSpace: \'pre-wrap\'\n }\n }, hubPk) : /*#__PURE__*/React.createElement(Message, {\n warning: true\n }, "Hub public key not available."))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "delegation-pending-h3"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "delegation-pending-h3"\n }, "Pending signature requests"), pending.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "None.") : /*#__PURE__*/React.createElement(Table, {\n celled: true,\n compact: true,\n unstackable: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Message id"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Preview"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Purpose"))), /*#__PURE__*/React.createElement(Table.Body, null, pending.map(function (p) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: p.messageId\n }, /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.8em\'\n }\n }, p.messageId)), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\'\n }\n }, p.preview || \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, p.purpose || \'—\'));\n }))))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "delegation-fabric-log-h3",\n "aria-describedby": "delegation-fabric-log-desc"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n id: "delegation-fabric-log-h3"\n }, "Fabric message log (delegation)"), /*#__PURE__*/React.createElement("p", {\n id: "delegation-fabric-log-desc",\n style: {\n color: \'#666\',\n fontSize: \'0.92em\'\n }\n }, "Request and resolution rows from the Hub Fabric message log for this token (newest may appear last)."), fabricLog.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "No entries yet.") : /*#__PURE__*/React.createElement(Table, {\n celled: true,\n compact: true,\n unstackable: true\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Seq"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Type"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Summary"))), /*#__PURE__*/React.createElement(Table.Body, null, fabricLog.map(function (row) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: row.id\n }, /*#__PURE__*/React.createElement(Table.Cell, null, row.seq != null ? row.seq : \'—\'), /*#__PURE__*/React.createElement(Table.Cell, null, row.type), /*#__PURE__*/React.createElement(Table.Cell, null, /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'0.8em\',\n whiteSpace: \'pre-wrap\',\n wordBreak: \'break-word\'\n }\n }, JSON.stringify(row.summary || {}, null, 0))));\n })))))));\n}\nmodule.exports = SecuritySessionHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFBSSxHQUFHRCxHQUFHLENBQUNDLEdBQUcsR0FBRyxHQUFnQixDQUFDLGVBQzFEcEgsS0FBQSxDQUFBb0UsYUFBQSxDQUFDekQsS0FBSyxDQUFDc0YsSUFBSSxRQUFFa0IsR0FBRyxDQUFDbkMsSUFBaUIsQ0FBQyxlQUNuQ2hGLEtBQUEsQ0FBQW9FLGFBQUEsQ0FBQ3pELEtBQUssQ0FBQ3NGLElBQUkscUJBQ1RqRyxLQUFBLENBQUFvRSxhQUFBO01BQU1DLEtBQUssRUFBRTtRQUFFZ0IsUUFBUSxFQUFFLE9BQU87UUFBRXFCLFVBQVUsRUFBRSxVQUFVO1FBQUVwQixTQUFTLEVBQUU7TUFBYTtJQUFFLEdBQ2pGK0IsSUFBSSxDQUFDQyxTQUFTLENBQUNILEdBQUcsQ0FBQ0ksT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQ3RDLENBQ0ksQ0FDSCxDQUFDO0VBQUEsQ0FDYixDQUNTLENBQ1AsQ0FFQSxDQUNGLENBQ1QsQ0FFRyxDQUFDO0FBRWQ7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUd6RyxtQkFBbUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvU2VjdXJpdHlTZXNzaW9uSG9tZS5qcz81ZTZlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBQZXLigJNkZWxlZ2F0aW9uLXRva2VuIHdvcmtzcGFjZTogYXVkaXQgbG9nLCBwZW5kaW5nIHF1ZXVlLCBIdWIgcHVibGljIGtleSBmb3IgdmVyaWZpY2F0aW9uLlxuICogVG9rZW4gaXMgdGhlIFVSTCBwYXJhbSAoZW5jb2RlVVJJQ29tcG9uZW50KS4gQmVhcmVyIG9uIEdFVCBtdXN0IG1hdGNoLlxuICovXG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluaywgdXNlUGFyYW1zIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XG5jb25zdCB7XG4gIEJ1dHRvbixcbiAgSGVhZGVyLFxuICBJY29uLFxuICBNZXNzYWdlLFxuICBTZWdtZW50LFxuICBUYWJsZSxcbiAgTG9hZGVyXG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcblxuY29uc3Qge1xuICBERUxFR0FUSU9OX1NUT1JBR0VfS0VZLFxuICBERUxFR0FUSU9OX0NIQU5HRURfRVZFTlRcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljRGVsZWdhdGlvbkxvY2FsJyk7XG5cbmZ1bmN0aW9uIFNlY3VyaXR5U2Vzc2lvbkhvbWUgKCkge1xuICBjb25zdCB7IHNlc3Npb25JZDogZW5jb2RlZElkIH0gPSB1c2VQYXJhbXMoKTtcbiAgY29uc3Qgc2Vzc2lvbklkID0gZW5jb2RlZElkID8gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZWRJZCkgOiAnJztcbiAgY29uc3QgW2RhdGEsIHNldERhdGFdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IFJlYWN0LnVzZVN0YXRlKHRydWUpO1xuXG4gIGNvbnN0IG9yaWdpbiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA6ICcnO1xuXG4gIGNvbnN0IHJlZnJlc2ggPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgIHNldEVycm9yKCdNaXNzaW5nIHNlc3Npb24gaWQnKTtcbiAgICAgIHNldEJ1c3koZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRCdXN5KHRydWUpO1xuICAgIHNldEVycm9yKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByID0gYXdhaXQgZmV0Y2goYCR7b3JpZ2lufS9zZXNzaW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChzZXNzaW9uSWQpfS9kZWxlZ2F0aW9uL2F1ZGl0YCwge1xuICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtzZXNzaW9uSWR9YCwgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgY2FjaGU6ICduby1zdG9yZSdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaiA9IGF3YWl0IHIuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgaWYgKCFyLm9rKSB7XG4gICAgICAgIHNldERhdGEobnVsbCk7XG4gICAgICAgIHNldEVycm9yKChqICYmIGouZXJyb3IpIHx8IGBIVFRQICR7ci5zdGF0dXN9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaiB8fCBqLm9rICE9PSB0cnVlKSB7XG4gICAgICAgIHNldERhdGEobnVsbCk7XG4gICAgICAgIHNldEVycm9yKChqICYmIGouZXJyb3IpIHx8ICdBdWRpdCByZXNwb25zZSB3YXMgbm90IHN1Y2Nlc3NmdWwnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0RGF0YShqKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzZXREYXRhKG51bGwpO1xuICAgICAgc2V0RXJyb3IoZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICB9XG4gIH0sIFtvcmlnaW4sIHNlc3Npb25JZF0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdm9pZCByZWZyZXNoKCk7XG4gIH0sIFtyZWZyZXNoXSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXNlc3Npb25JZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBidW1wID0gKCkgPT4gdm9pZCByZWZyZXNoKCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoREVMRUdBVElPTl9DSEFOR0VEX0VWRU5ULCBidW1wKTtcbiAgICBjb25zdCBvblN0b3JhZ2UgPSAoZXYpID0+IHtcbiAgICAgIGlmIChldiAmJiBldi5rZXkgPT09IERFTEVHQVRJT05fU1RPUkFHRV9LRVkpIGJ1bXAoKTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgb25TdG9yYWdlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoREVMRUdBVElPTl9DSEFOR0VEX0VWRU5ULCBidW1wKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgb25TdG9yYWdlKTtcbiAgICB9O1xuICB9LCBbc2Vzc2lvbklkLCByZWZyZXNoXSk7XG5cbiAgY29uc3Qgc2Vzc2lvbiA9IGRhdGEgJiYgZGF0YS5zZXNzaW9uO1xuICBjb25zdCBwZW5kaW5nID0gKGRhdGEgJiYgQXJyYXkuaXNBcnJheShkYXRhLnBlbmRpbmcpKSA/IGRhdGEucGVuZGluZyA6IFtdO1xuICBjb25zdCBmYWJyaWNMb2cgPSAoZGF0YSAmJiBBcnJheS5pc0FycmF5KGRhdGEuZmFicmljTG9nKSkgPyBkYXRhLmZhYnJpY0xvZyA6IFtdO1xuICBjb25zdCBodWJQayA9IGRhdGEgJiYgZGF0YS5odWJQdWJrZXlIZXggPyBTdHJpbmcoZGF0YS5odWJQdWJrZXlIZXgpIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxTZWdtZW50IHN0eWxlPXt7IG1heFdpZHRoOiA5NjAsIG1hcmdpbjogJzFlbSBhdXRvJyB9fT5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgIHRvPVwiL3NldHRpbmdzL3NlY3VyaXR5XCJcbiAgICAgICAgYmFzaWNcbiAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fVxuICAgICAgICBhcmlhLWxhYmVsPVwiQmFjayB0byBzZWN1cml0eSBhbmQgZGVsZWdhdGlvblwiXG4gICAgICA+XG4gICAgICAgIDxJY29uIG5hbWU9XCJhcnJvdyBsZWZ0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgU2VjdXJpdHkgJmFtcDsgZGVsZWdhdGlvblxuICAgICAgPC9CdXR0b24+XG5cbiAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cImRlbGVnYXRpb24tc2Vzc2lvbi1oZWFkaW5nXCIgYXJpYS1kZXNjcmliZWRieT1cImRlbGVnYXRpb24tc2Vzc2lvbi1zdW1tYXJ5XCI+XG4gICAgICAgIDxIZWFkZXIgYXM9XCJoMlwiIGlkPVwiZGVsZWdhdGlvbi1zZXNzaW9uLWhlYWRpbmdcIj5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwia2V5XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICBEZWxlZ2F0aW9uIHNlc3Npb25cbiAgICAgICAgPC9IZWFkZXI+XG4gICAgICAgIDxwIGlkPVwiZGVsZWdhdGlvbi1zZXNzaW9uLXN1bW1hcnlcIiBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgIFRvb2xzIGFuZCBhdWRpdCBmb3Igb25lIGJyb3dzZXIgZGVsZWdhdGlvbiB0b2tlbi4gVXNlIDxzdHJvbmc+SWRlbnRpdHkg4oaSIFZlcmlmeSBzaWduYXR1cmU8L3N0cm9uZz4gd2l0aCB0aGUgSHViIHB1YmxpYyBrZXkgYmVsb3cgd2hlbiBjaGVja2luZyBTY2hub3JyIHNpZ25hdHVyZXMuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjY1ZW0nIH19PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBkaXNhYmxlZD17YnVzeSB8fCAhc2Vzc2lvbklkfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCByZWZyZXNoKCl9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVmcmVzaCBkZWxlZ2F0aW9uIGF1ZGl0IGZyb20gaHViXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwicmVmcmVzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICBSZWZyZXNoIGF1ZGl0XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICB7ZXJyb3IgJiYgIWJ1c3kgJiYgKFxuICAgICAgICA8TWVzc2FnZSBuZWdhdGl2ZSBvbkRpc21pc3M9eygpID0+IHNldEVycm9yKG51bGwpfT5cbiAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+Q291bGQgbm90IGxvYWQgZGVsZWdhdGlvbiBzZXNzaW9uPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjM1ZW0gMCAwJyB9fT57ZXJyb3J9PC9wPlxuICAgICAgICAgIHtzZXNzaW9uSWQgPyAoXG4gICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjVlbSAwIDAnLCBmb250U2l6ZTogJzAuOWVtJywgY29sb3I6ICcjNTU1JyB9fT5cbiAgICAgICAgICAgICAgVG9rZW46eycgJ31cbiAgICAgICAgICAgICAgPGNvZGUgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fT5cbiAgICAgICAgICAgICAgICB7c2Vzc2lvbklkLmxlbmd0aCA+IDU2XG4gICAgICAgICAgICAgICAgICA/IGAke3Nlc3Npb25JZC5zbGljZSgwLCAyOCl94oCmJHtzZXNzaW9uSWQuc2xpY2UoLTE2KX1gXG4gICAgICAgICAgICAgICAgICA6IHNlc3Npb25JZH1cbiAgICAgICAgICAgICAgPC9jb2RlPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC44NWVtJywgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcwLjVlbScsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBkaXNhYmxlZD17IXNlc3Npb25JZH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCByZWZyZXNoKCl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJyZWZyZXNoXCIgLz5cbiAgICAgICAgICAgICAgUmV0cnlcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2V0dGluZ3Mvc2VjdXJpdHlcIiBzaXplPVwic21hbGxcIiBiYXNpYz5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNoaWVsZCBhbHRlcm5hdGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICBTZWN1cml0eSAmYW1wOyBkZWxlZ2F0aW9uXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgKX1cblxuICAgICAge2J1c3kgJiYgIWRhdGEgJiYgKFxuICAgICAgICA8TG9hZGVyIGFjdGl2ZSBpbmxpbmU9XCJjZW50ZXJlZFwiPlxuICAgICAgICAgIExvYWRpbmcgc2Vzc2lvbuKAplxuICAgICAgICA8L0xvYWRlcj5cbiAgICAgICl9XG5cbiAgICAgIHshYnVzeSAmJiBkYXRhICYmIGRhdGEub2sgJiYgKFxuICAgICAgICA8PlxuICAgICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiZGVsZWdhdGlvbi1zZXNzaW9uLWRldGFpbC1oM1wiPlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImgzXCIgaWQ9XCJkZWxlZ2F0aW9uLXNlc3Npb24tZGV0YWlsLWgzXCI+U2Vzc2lvbjwvSGVhZGVyPlxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScsIG1hcmdpbkJvdHRvbTogJzAuNzVlbScsIG1heFdpZHRoOiAnNDJyZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICAgICAgICBUaGUgZnVsbCBkZWxlZ2F0aW9uIHRva2VuIGlzIHRoZSB2YWx1ZSBpbiB0aGlzIHBhZ2UmYXBvcztzIFVSTCBwYXRoIChhbmQgaW4gU2VjdXJpdHkgJmFtcDsgZGVsZWdhdGlvbikuIFRoZSBodWIgb25seSByZXR1cm5zIGEgc2hvcnQgdG9rZW4gcHJldmlldyBpbiBKU09OIGZvciBkaXNwbGF5LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAge3Nlc3Npb24gJiYgKFxuICAgICAgICAgICAgICA8VGFibGUgYmFzaWM9XCJ2ZXJ5XCIgY29tcGFjdD5cbiAgICAgICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICAgIHtzZXNzaW9uLmlkID8gKFxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxzdHJvbmc+VG9rZW4gcHJldmlldzwvc3Ryb25nPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PntzZXNzaW9uLmlkfTwvY29kZT48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD48c3Ryb25nPk9yaWdpbjwvc3Ryb25nPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e3Nlc3Npb24ub3JpZ2luIHx8ICfigJQnfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+PHN0cm9uZz5MaW5rZWQ8L3N0cm9uZz48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntzZXNzaW9uLmxpbmtlZEF0ID8gbmV3IERhdGUoc2Vzc2lvbi5saW5rZWRBdCkudG9Mb2NhbGVTdHJpbmcoKSA6ICfigJQnfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+PHN0cm9uZz5MYWJlbDwvc3Ryb25nPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e3Nlc3Npb24ubGFiZWwgfHwgJ2Jyb3dzZXInfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+PHN0cm9uZz5JZGVudGl0eSBpZDwvc3Ryb25nPjwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+PGNvZGUgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fT57c2Vzc2lvbi5pZGVudGl0eUlkIHx8ICfigJQnfTwvY29kZT48L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLkJvZHk+XG4gICAgICAgICAgICAgIDwvVGFibGU+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiZGVsZWdhdGlvbi1odWItcGstaDNcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZGVsZWdhdGlvbi1odWItcGstZGVzY1wiPlxuICAgICAgICAgICAgPEhlYWRlciBhcz1cImgzXCIgaWQ9XCJkZWxlZ2F0aW9uLWh1Yi1way1oM1wiPkh1YiB2ZXJpZmljYXRpb24ga2V5PC9IZWFkZXI+XG4gICAgICAgICAgICA8cCBpZD1cImRlbGVnYXRpb24taHViLXBrLWRlc2NcIiBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOTVlbScgfX0+XG4gICAgICAgICAgICAgIENvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmxpYyBrZXkgKGhleCkgZm9yIHRoZSBIdWIgbm9kZSBpZGVudGl0eSB1c2VkIHdoZW4gdGhpcyBzZXNzaW9uIHNpZ25zLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAge2h1YlBrID8gKFxuICAgICAgICAgICAgICA8cHJlXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMC44MmVtJyxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcwLjc1ZW0nLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNmN2Y3ZjcnLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA0LFxuICAgICAgICAgICAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstYWxsJyxcbiAgICAgICAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdwcmUtd3JhcCdcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2h1YlBrfVxuICAgICAgICAgICAgICA8L3ByZT5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmc+SHViIHB1YmxpYyBrZXkgbm90IGF2YWlsYWJsZS48L01lc3NhZ2U+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwiZGVsZWdhdGlvbi1wZW5kaW5nLWgzXCI+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIiBpZD1cImRlbGVnYXRpb24tcGVuZGluZy1oM1wiPlBlbmRpbmcgc2lnbmF0dXJlIHJlcXVlc3RzPC9IZWFkZXI+XG4gICAgICAgICAgICB7cGVuZGluZy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+Tm9uZS48L3A+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VGFibGUgY2VsbGVkIGNvbXBhY3QgdW5zdGFja2FibGU+XG4gICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPk1lc3NhZ2UgaWQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlByZXZpZXc8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlB1cnBvc2U8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICAgIHtwZW5kaW5nLm1hcCgocCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuUm93IGtleT17cC5tZXNzYWdlSWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPjxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44ZW0nIH19PntwLm1lc3NhZ2VJZH08L2NvZGU+PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdwcmUtd3JhcCcsIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnIH19PntwLnByZXZpZXcgfHwgJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntwLnB1cnBvc2UgfHwgJ+KAlCd9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9TZWdtZW50PlxuXG4gICAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgICA8c2VjdGlvbiBhcmlhLWxhYmVsbGVkYnk9XCJkZWxlZ2F0aW9uLWZhYnJpYy1sb2ctaDNcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZGVsZWdhdGlvbi1mYWJyaWMtbG9nLWRlc2NcIj5cbiAgICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiIGlkPVwiZGVsZWdhdGlvbi1mYWJyaWMtbG9nLWgzXCI+RmFicmljIG1lc3NhZ2UgbG9nIChkZWxlZ2F0aW9uKTwvSGVhZGVyPlxuICAgICAgICAgICAgPHAgaWQ9XCJkZWxlZ2F0aW9uLWZhYnJpYy1sb2ctZGVzY1wiIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicsIGZvbnRTaXplOiAnMC45MmVtJyB9fT5cbiAgICAgICAgICAgICAgUmVxdWVzdCBhbmQgcmVzb2x1dGlvbiByb3dzIGZyb20gdGhlIEh1YiBGYWJyaWMgbWVzc2FnZSBsb2cgZm9yIHRoaXMgdG9rZW4gKG5ld2VzdCBtYXkgYXBwZWFyIGxhc3QpLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAge2ZhYnJpY0xvZy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzY2NicgfX0+Tm8gZW50cmllcyB5ZXQuPC9wPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFRhYmxlIGNlbGxlZCBjb21wYWN0IHVuc3RhY2thYmxlPlxuICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5TZXE8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlR5cGU8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPlN1bW1hcnk8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICAgIHtmYWJyaWNMb2cubWFwKChyb3cpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLlJvdyBrZXk9e3Jvdy5pZH0+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e3Jvdy5zZXEgIT0gbnVsbCA/IHJvdy5zZXEgOiAn4oCUJ308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e3Jvdy50eXBlfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IGZvbnRTaXplOiAnMC44ZW0nLCB3aGl0ZVNwYWNlOiAncHJlLXdyYXAnLCB3b3JkQnJlYWs6ICdicmVhay13b3JkJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge0pTT04uc3RyaW5naWZ5KHJvdy5zdW1tYXJ5IHx8IHt9LCBudWxsLCAwKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgICA8L1RhYmxlPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICA8L1NlZ21lbnQ+XG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VjdXJpdHlTZXNzaW9uSG9tZTtcbiJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJTeW1ib2wiLCJuIiwiaXRlcmF0b3IiLCJvIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJuZXh0IiwicHVzaCIsImlzQXJyYXkiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJ1c2VQYXJhbXMiLCJfcmVxdWlyZTIiLCJCdXR0b24iLCJIZWFkZXIiLCJJY29uIiwiTWVzc2FnZSIsIlNlZ21lbnQiLCJUYWJsZSIsIkxvYWRlciIsIl9yZXF1aXJlMyIsIkRFTEVHQVRJT05fU1RPUkFHRV9LRVkiLCJERUxFR0FUSU9OX0NIQU5HRURfRVZFTlQiLCJTZWN1cml0eVNlc3Npb25Ib21lIiwiX3VzZVBhcmFtcyIsImVuY29kZWRJZCIsInNlc3Npb25JZCIsImRlY29kZVVSSUNvbXBvbmVudCIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsImRhdGEiLCJzZXREYXRhIiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJlcnJvciIsInNldEVycm9yIiwiX1JlYWN0JHVzZVN0YXRlNSIsIl9SZWFjdCR1c2VTdGF0ZTYiLCJidXN5Iiwic2V0QnVzeSIsIm9yaWdpbiIsIndpbmRvdyIsImxvY2F0aW9uIiwicmVmcmVzaCIsInVzZUNhbGxiYWNrIiwiX2NhbGxlZSIsImoiLCJfdCIsIl9jb250ZXh0IiwiZmV0Y2giLCJjb25jYXQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsIkFjY2VwdCIsImNhY2hlIiwianNvbiIsIm9rIiwic3RhdHVzIiwibWVzc2FnZSIsIlN0cmluZyIsInVzZUVmZmVjdCIsInVuZGVmaW5lZCIsImJ1bXAiLCJhZGRFdmVudExpc3RlbmVyIiwib25TdG9yYWdlIiwiZXYiLCJrZXkiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2Vzc2lvbiIsInBlbmRpbmciLCJmYWJyaWNMb2ciLCJodWJQayIsImh1YlB1YmtleUhleCIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsIm1heFdpZHRoIiwibWFyZ2luIiwiYXMiLCJ0byIsImJhc2ljIiwic2l6ZSIsIm1hcmdpbkJvdHRvbSIsImlkIiwiY29sb3IiLCJtYXJnaW5Ub3AiLCJ0eXBlIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwibmVnYXRpdmUiLCJvbkRpc21pc3MiLCJmb250U2l6ZSIsIndvcmRCcmVhayIsImRpc3BsYXkiLCJnYXAiLCJmbGV4V3JhcCIsImFjdGl2ZSIsImlubGluZSIsIkZyYWdtZW50IiwibGluZUhlaWdodCIsImNvbXBhY3QiLCJCb2R5IiwiUm93IiwiQ2VsbCIsImxpbmtlZEF0IiwiRGF0ZSIsInRvTG9jYWxlU3RyaW5nIiwibGFiZWwiLCJpZGVudGl0eUlkIiwicGFkZGluZyIsImJhY2tncm91bmQiLCJib3JkZXJSYWRpdXMiLCJ3aGl0ZVNwYWNlIiwid2FybmluZyIsImNlbGxlZCIsInVuc3RhY2thYmxlIiwiSGVhZGVyQ2VsbCIsIm1hcCIsIm1lc3NhZ2VJZCIsInByZXZpZXciLCJwdXJwb3NlIiwicm93Iiwic2VxIiwiSlNPTiIsInN0cmluZ2lmeSIsInN1bW1hcnkiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/SecuritySessionHome.js\n\n}')},"./components/SettingsBitcoinWallet.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Settings: explain Bitcoin derivation under the Fabric identity master.\n */\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Header = _require2.Header,\n Icon = _require2.Icon,\n Message = _require2.Message,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! ../functions/bitcoinClient */ "./functions/bitcoinClient.js"),\n getBitcoinBip44AccountForIdentity = _require3.getBitcoinBip44AccountForIdentity,\n getSpendWalletContext = _require3.getSpendWalletContext;\nvar _require4 = __webpack_require__(/*! ../functions/hubIdentityUiHints */ "./functions/hubIdentityUiHints.js"),\n classifyHubBrowserIdentity = _require4.classifyHubBrowserIdentity;\nfunction trimMiddle(s) {\n var left = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 14;\n var right = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n var t = String(s || \'\');\n if (t.length <= left + right + 1) return t;\n return "".concat(t.slice(0, left), "\\u2026").concat(t.slice(-right));\n}\nfunction SettingsBitcoinWallet(_ref) {\n var identity = _ref.identity;\n var masterXpub = identity && (identity.masterXpub || identity.xpub) ? String(identity.masterXpub || identity.xpub) : \'\';\n var acct = getBitcoinBip44AccountForIdentity(identity || {});\n var spend = React.useMemo(function () {\n return getSpendWalletContext(identity || {});\n }, [identity]);\n return /*#__PURE__*/React.createElement(Segment, {\n style: {\n maxWidth: 720,\n margin: \'1em auto\'\n }\n }, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "settings-btc-wallet-h2"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "settings-btc-wallet-h2",\n style: {\n marginBottom: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Bitcoin wallet & derivation")), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n margin: \'0 0 1em\',\n maxWidth: \'40rem\',\n lineHeight: 1.45\n }\n }, "Your ", /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), " is the master key. Hub and browser Bitcoin payment flows use one BIP44 Bitcoin account under that master \\u2014 by default account ", /*#__PURE__*/React.createElement("strong", null, "0"), "; in Fabric ", /*#__PURE__*/React.createElement("strong", null, "multi-account"), " mode the Bitcoin account index matches the Fabric account you select in the identity dialog:", \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n whiteSpace: \'nowrap\'\n }\n }, "m/44\'/0\'/".concat(acct, "\'")), " (account ", acct, "). External addresses use chain ", /*#__PURE__*/React.createElement("code", null, "0/*"), "; change uses ", /*#__PURE__*/React.createElement("code", null, "1/*"), "."), /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Identity wallet vs Hub node wallet"), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.35em 0 0\',\n fontSize: \'0.88em\',\n lineHeight: 1.45\n }\n }, /*#__PURE__*/React.createElement("strong", null, "This page (identity):"), " your client keys \\u2014 receive, spend, and balance shown in the top bar when unlocked.", /*#__PURE__*/React.createElement("strong", null, " Hub / Bridge:"), " the node\'s ", /*#__PURE__*/React.createElement("code", null, "bitcoind"), " (regtest rewards, optional admin sends, Payjoin receiver) \\u2014 different keys. On ", /*#__PURE__*/React.createElement("strong", null, "mainnet"), ", treat Hub RPC as privileged; never send user funds to the Hub wallet address by mistake.")), /*#__PURE__*/React.createElement(Message, {\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n fontSize: \'0.88em\',\n lineHeight: 1.45,\n color: \'#555\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Backup & recovery:"), " keep your mnemonic safe (identity manager in the top bar).", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings/security"\n }, "Security & delegation"), " covers signing sessions and delegation tokens."))), masterXpub ? /*#__PURE__*/React.createElement(Message, {\n size: "small",\n info: true,\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n fontSize: \'0.9em\',\n wordBreak: \'break-all\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Master xpub:"), " ", /*#__PURE__*/React.createElement("code", null, masterXpub)), spend && spend.walletId && spend.xpub ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.65em 0 0\',\n fontSize: \'0.88em\',\n color: \'#333\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Payment account wallet id"), " (same formula as Hub ", /*#__PURE__*/React.createElement("code", null, "walletName"), " / balance APIs for this account):", \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, spend.walletId)) : null, spend && spend.xpub ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.5em 0 0\',\n fontSize: \'0.85em\',\n color: \'#555\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Payment account xpub"), " (BIP44 account ", acct, "):", \' \', /*#__PURE__*/React.createElement("code", {\n title: spend.xpub\n }, trimMiddle(spend.xpub, 18, 18))) : identity && identity.passwordProtected && !identity.xprv ? /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.65em 0 0\',\n fontSize: \'0.88em\',\n color: \'#8a6d3b\'\n }\n }, "Unlock your identity to derive payment account keys. While locked, the Hub may still show a prior wallet id if you used this browser before.") : null) : /*#__PURE__*/React.createElement(Message, {\n warning: true,\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, function () {\n var m = classifyHubBrowserIdentity(identity || {});\n if (m === \'watch_only\') {\n return /*#__PURE__*/React.createElement(React.Fragment, null, "Import a full key from the top-bar identity menu or ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), " \\u2192 ", /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), " to show the master xpub and payment account ids (watch-only does not derive spend keys here).");\n }\n if (m === \'password_locked\') {\n return /*#__PURE__*/React.createElement(React.Fragment, null, "Unlock from the header (", /*#__PURE__*/React.createElement("strong", null, "Locked"), " \\u2192 encryption password), or ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), " \\u2192 ", /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), ", to show the master xpub and payment account ids.");\n }\n return /*#__PURE__*/React.createElement(React.Fragment, null, "Create or restore a Fabric identity: ", /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Settings"), " \\u2192 ", /*#__PURE__*/React.createElement("strong", null, "Fabric identity"), " or ", /*#__PURE__*/React.createElement("strong", null, "Log in"), " in the top bar, to show the master xpub and payment account ids.");\n }()), /*#__PURE__*/React.createElement(Message, {\n size: "small",\n style: {\n marginBottom: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n fontSize: \'0.88em\',\n lineHeight: 1.45,\n color: \'#555\'\n }\n }, /*#__PURE__*/React.createElement("strong", null, "Documents & L1:"), " publishing is free; ", /*#__PURE__*/React.createElement("strong", null, "distribute"), " and paid retrieval use invoices you pay from", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin"\n }, "Bitcoin"), " or ", /*#__PURE__*/React.createElement(Link, {\n to: "/payments"\n }, "Payments"), ". Verify on-chain activity under", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/resources"\n }, "Resources"), " or the explorer on the Bitcoin page.")), /*#__PURE__*/React.createElement("p", {\n style: {\n marginTop: \'1.25em\',\n fontSize: \'0.88em\',\n color: \'#666\'\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "\\u2190 All settings"), \' · \', /*#__PURE__*/React.createElement(Link, {\n to: "/settings"\n }, "Fabric identity"), \' · \', /*#__PURE__*/React.createElement(Link, {\n to: "/documents"\n }, "Documents"), \' · \', /*#__PURE__*/React.createElement(Link, {\n to: "/services/bitcoin/invoices"\n }, "Invoices"), \' · \', /*#__PURE__*/React.createElement(Link, {\n to: "/payments"\n }, "Payments")));\n}\nmodule.exports = SettingsBitcoinWallet;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL1NldHRpbmdzQml0Y29pbldhbGxldC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFFQSxJQUFNQSxLQUFLLEdBQUdDLG1CQUFPLENBQUMsNENBQU8sQ0FBQztBQUM5QixJQUFBQyxRQUFBLEdBQWlCRCxtQkFBTyxDQUFDLHVFQUFrQixDQUFDO0VBQXBDRSxJQUFJLEdBQUFELFFBQUEsQ0FBSkMsSUFBSTtBQUNaLElBQUFDLFNBQUEsR0FBMkNILG1CQUFPLENBQUMsNEVBQW1CLENBQUM7RUFBL0RJLE1BQU0sR0FBQUQsU0FBQSxDQUFOQyxNQUFNO0VBQUVDLElBQUksR0FBQUYsU0FBQSxDQUFKRSxJQUFJO0VBQUVDLE9BQU8sR0FBQUgsU0FBQSxDQUFQRyxPQUFPO0VBQUVDLE9BQU8sR0FBQUosU0FBQSxDQUFQSSxPQUFPO0FBQ3RDLElBQUFDLFNBQUEsR0FHSVIsbUJBQU8sQ0FBQyxnRUFBNEIsQ0FBQztFQUZ2Q1MsaUNBQWlDLEdBQUFELFNBQUEsQ0FBakNDLGlDQUFpQztFQUNqQ0MscUJBQXFCLEdBQUFGLFNBQUEsQ0FBckJFLHFCQUFxQjtBQUV2QixJQUFBQyxTQUFBLEdBQXVDWCxtQkFBTyxDQUFDLDBFQUFpQyxDQUFDO0VBQXpFWSwwQkFBMEIsR0FBQUQsU0FBQSxDQUExQkMsMEJBQTBCO0FBRWxDLFNBQVNDLFVBQVVBLENBQUVDLENBQUMsRUFBeUI7RUFBQSxJQUF2QkMsSUFBSSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxFQUFFO0VBQUEsSUFBRUcsS0FBSyxHQUFBSCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxFQUFFO0VBQzNDLElBQU1JLENBQUMsR0FBR0MsTUFBTSxDQUFDUCxDQUFDLElBQUksRUFBRSxDQUFDO0VBQ3pCLElBQUlNLENBQUMsQ0FBQ0gsTUFBTSxJQUFJRixJQUFJLEdB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STtJQUFDNkMsRUFBRSxFQUFDO0VBQVcsR0FBQyxxQkFBb0IsQ0FBQyxFQUN6QyxLQUFLLGVBQ05oRCxLQUFBLENBQUFpQyxhQUFBLENBQUM5QixJQUFJO0lBQUM2QyxFQUFFLEVBQUM7RUFBVyxHQUFDLGlCQUFxQixDQUFDLEVBQzFDLEtBQUssZUFDTmhELEtBQUEsQ0FBQWlDLGFBQUEsQ0FBQzlCLElBQUk7SUFBQzZDLEVBQUUsRUFBQztFQUFZLEdBQUMsV0FBZSxDQUFDLEVBQ3JDLEtBQUssZUFDTmhELEtBQUEsQ0FBQWlDLGFBQUEsQ0FBQzlCLElBQUk7SUFBQzZDLEVBQUUsRUFBQztFQUE0QixHQUFDLFVBQWMsQ0FBQyxFQUNwRCxLQUFLLGVBQ05oRCxLQUFBLENBQUFpQyxhQUFBLENBQUM5QixJQUFJO0lBQUM2QyxFQUFFLEVBQUM7RUFBVyxHQUFDLFVBQWMsQ0FDbEMsQ0FDSSxDQUFDO0FBRWQ7QUFFQVUsTUFBTSxDQUFDQyxPQUFPLEdBQUdsQyxxQkFBcUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvU2V0dGluZ3NCaXRjb2luV2FsbGV0LmpzP2E1NDIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFNldHRpbmdzOiBleHBsYWluIEJpdGNvaW4gZGVyaXZhdGlvbiB1bmRlciB0aGUgRmFicmljIGlkZW50aXR5IG1hc3Rlci5cbiAqL1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IHsgSGVhZGVyLCBJY29uLCBNZXNzYWdlLCBTZWdtZW50IH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3Qge1xuICBnZXRCaXRjb2luQmlwNDRBY2NvdW50Rm9ySWRlbnRpdHksXG4gIGdldFNwZW5kV2FsbGV0Q29udGV4dFxufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9iaXRjb2luQ2xpZW50Jyk7XG5jb25zdCB7IGNsYXNzaWZ5SHViQnJvd3NlcklkZW50aXR5IH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViSWRlbnRpdHlVaUhpbnRzJyk7XG5cbmZ1bmN0aW9uIHRyaW1NaWRkbGUgKHMsIGxlZnQgPSAxNCwgcmlnaHQgPSAxMCkge1xuICBjb25zdCB0ID0gU3RyaW5nKHMgfHwgJycpO1xuICBpZiAodC5sZW5ndGggPD0gbGVmdCArIHJpZ2h0ICsgMSkgcmV0dXJuIHQ7XG4gIHJldHVybiBgJHt0LnNsaWNlKDAsIGxlZnQpfeKApiR7dC5zbGljZSgtcmlnaHQpfWA7XG59XG5cbmZ1bmN0aW9uIFNldHRpbmdzQml0Y29pbldhbGxldCAoeyBpZGVudGl0eSB9KSB7XG4gIGNvbnN0IG1hc3RlclhwdWIgPSBpZGVudGl0eSAmJiAoaWRlbnRpdHkubWFzdGVyWHB1YiB8fCBpZGVudGl0eS54cHViKVxuICAgID8gU3RyaW5nKGlkZW50aXR5Lm1hc3RlclhwdWIgfHwgaWRlbnRpdHkueHB1YilcbiAgICA6ICcnO1xuICBjb25zdCBhY2N0ID0gZ2V0Qml0Y29pbkJpcDQ0QWNjb3VudEZvcklkZW50aXR5KGlkZW50aXR5IHx8IHt9KTtcbiAgY29uc3Qgc3BlbmQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGdldFNwZW5kV2FsbGV0Q29udGV4dChpZGVudGl0eSB8fCB7fSksIFtpZGVudGl0eV0pO1xuXG4gIHJldHVybiAoXG4gICAgPFNlZ21lbnQgc3R5bGU9e3sgbWF4V2lkdGg6IDcyMCwgbWFyZ2luOiAnMWVtIGF1dG8nIH19PlxuICAgICAgPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PVwic2V0dGluZ3MtYnRjLXdhbGxldC1oMlwiPlxuICAgICAgICA8SGVhZGVyIGFzPVwiaDJcIiBpZD1cInNldHRpbmdzLWJ0Yy13YWxsZXQtaDJcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nIH19PlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJiaXRjb2luXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+Qml0Y29pbiB3YWxsZXQgJmFtcDsgZGVyaXZhdGlvbjwvSGVhZGVyLkNvbnRlbnQ+XG4gICAgICAgIDwvSGVhZGVyPlxuICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW46ICcwIDAgMWVtJywgbWF4V2lkdGg6ICc0MHJlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgWW91ciA8c3Ryb25nPkZhYnJpYyBpZGVudGl0eTwvc3Ryb25nPiBpcyB0aGUgbWFzdGVyIGtleS4gSHViIGFuZCBicm93c2VyIEJpdGNvaW4gcGF5bWVudCBmbG93cyB1c2Ugb25lIEJJUDQ0IEJpdGNvaW4gYWNjb3VudCB1bmRlciB0aGF0XG4gICAgICAgICAgbWFzdGVyIOKAlCBieSBkZWZhdWx0IGFjY291bnQgPHN0cm9uZz4wPC9zdHJvbmc+OyBpbiBGYWJyaWMgPHN0cm9uZz5tdWx0aS1hY2NvdW50PC9zdHJvbmc+IG1vZGUgdGhlIEJpdGNvaW4gYWNjb3VudCBpbmRleCBtYXRjaGVzIHRoZSBGYWJyaWMgYWNjb3VudCB5b3Ugc2VsZWN0IGluIHRoZSBpZGVudGl0eSBkaWFsb2c6XG4gICAgICAgICAgeycgJ308Y29kZSBzdHlsZT17eyB3aGl0ZVNwYWNlOiAnbm93cmFwJyB9fT57YG0vNDQnLzAnLyR7YWNjdH0nYH08L2NvZGU+IChhY2NvdW50IHthY2N0fSkuIEV4dGVybmFsIGFkZHJlc3NlcyB1c2UgY2hhaW4gPGNvZGU+MC8qPC9jb2RlPjsgY2hhbmdlIHVzZXMgPGNvZGU+MS8qPC9jb2RlPi5cbiAgICAgICAgPC9wPlxuICAgICAgICA8TWVzc2FnZSBpbmZvIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPklkZW50aXR5IHdhbGxldCB2cyBIdWIgbm9kZSB3YWxsZXQ8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuMzVlbSAwIDAnLCBmb250U2l6ZTogJzAuODhlbScsIGxpbmVIZWlnaHQ6IDEuNDUgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPlRoaXMgcGFnZSAoaWRlbnRpdHkpOjwvc3Ryb25nPiB5b3VyIGNsaWVudCBrZXlzIOKAlCByZWNlaXZlLCBzcGVuZCwgYW5kIGJhbGFuY2Ugc2hvd24gaW4gdGhlIHRvcCBiYXIgd2hlbiB1bmxvY2tlZC5cbiAgICAgICAgICAgIDxzdHJvbmc+IEh1YiAvIEJyaWRnZTo8L3N0cm9uZz4gdGhlIG5vZGUmYXBvcztzIDxjb2RlPmJpdGNvaW5kPC9jb2RlPiAocmVndGVzdCByZXdhcmRzLCBvcHRpb25hbCBhZG1pbiBzZW5kcywgUGF5am9pbiByZWNlaXZlcikg4oCUIGRpZmZlcmVudCBrZXlzLlxuICAgICAgICAgICAgT24gPHN0cm9uZz5tYWlubmV0PC9zdHJvbmc+LCB0cmVhdCBIdWIgUlBDIGFzIHByaXZpbGVnZWQ7IG5ldmVyIHNlbmQgdXNlciBmdW5kcyB0byB0aGUgSHViIHdhbGxldCBhZGRyZXNzIGJ5IG1pc3Rha2UuXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgIDxNZXNzYWdlIHNpemU9XCJzbWFsbFwiIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzFlbScgfX0+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAwLCBmb250U2l6ZTogJzAuODhlbScsIGxpbmVIZWlnaHQ6IDEuNDUsIGNvbG9yOiAnIzU1NScgfX0+XG4gICAgICAgICAgICA8c3Ryb25nPkJhY2t1cCAmYW1wOyByZWNvdmVyeTo8L3N0cm9uZz4ga2VlcCB5b3VyIG1uZW1vbmljIHNhZmUgKGlkZW50aXR5IG1hbmFnZXIgaW4gdGhlIHRvcCBiYXIpLnsnICd9XG4gICAgICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5ncy9zZWN1cml0eVwiPlNlY3VyaXR5ICZhbXA7IGRlbGVnYXRpb248L0xpbms+IGNvdmVycyBzaWduaW5nIHNlc3Npb25zIGFuZCBkZWxlZ2F0aW9uIHRva2Vucy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvTWVzc2FnZT5cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAge21hc3RlclhwdWIgPyAoXG4gICAgICAgIDxNZXNzYWdlIHNpemU9XCJzbWFsbFwiIGluZm8gc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46IDAsIGZvbnRTaXplOiAnMC45ZW0nLCB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PlxuICAgICAgICAgICAgPHN0cm9uZz5NYXN0ZXIgeHB1Yjo8L3N0cm9uZz4gPGNvZGU+e21hc3RlclhwdWJ9PC9jb2RlPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICB7c3BlbmQgJiYgc3BlbmQud2FsbGV0SWQgJiYgc3BlbmQueHB1YiA/IChcbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNjVlbSAwIDAnLCBmb250U2l6ZTogJzAuODhlbScsIGNvbG9yOiAnIzMzMycgfX0+XG4gICAgICAgICAgICAgIDxzdHJvbmc+UGF5bWVudCBhY2NvdW50IHdhbGxldCBpZDwvc3Ryb25nPiAoc2FtZSBmb3JtdWxhIGFzIEh1YiA8Y29kZT53YWxsZXROYW1lPC9jb2RlPiAvIGJhbGFuY2UgQVBJcyBmb3IgdGhpcyBhY2NvdW50KTp7JyAnfVxuICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyB3b3JkQnJlYWs6ICdicmVhay1hbGwnIH19PntzcGVuZC53YWxsZXRJZH08L2NvZGU+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3NwZW5kICYmIHNwZW5kLnhwdWIgPyAoXG4gICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwLjVlbSAwIDAnLCBmb250U2l6ZTogJzAuODVlbScsIGNvbG9yOiAnIzU1NScgfX0+XG4gICAgICAgICAgICAgIDxzdHJvbmc+UGF5bWVudCBhY2NvdW50IHhwdWI8L3N0cm9uZz4gKEJJUDQ0IGFjY291bnQge2FjY3R9KTp7JyAnfVxuICAgICAgICAgICAgICA8Y29kZSB0aXRsZT17c3BlbmQueHB1Yn0+e3RyaW1NaWRkbGUoc3BlbmQueHB1YiwgMTgsIDE4KX08L2NvZGU+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgKSA6IGlkZW50aXR5ICYmIGlkZW50aXR5LnBhc3N3b3JkUHJvdGVjdGVkICYmICFpZGVudGl0eS54cHJ2ID8gKFxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAnMC42NWVtIDAgMCcsIGZvbnRTaXplOiAnMC44OGVtJywgY29sb3I6ICcjOGE2ZDNiJyB9fT5cbiAgICAgICAgICAgICAgVW5sb2NrIHlvdXIgaWRlbnRpdHkgdG8gZGVyaXZlIHBheW1lbnQgYWNjb3VudCBrZXlzLiBXaGlsZSBsb2NrZWQsIHRoZSBIdWIgbWF5IHN0aWxsIHNob3cgYSBwcmlvciB3YWxsZXQgaWQgaWYgeW91IHVzZWQgdGhpcyBicm93c2VyIGJlZm9yZS5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgKSA6IChcbiAgICAgICAgPE1lc3NhZ2Ugd2FybmluZyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxZW0nIH19PlxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbSA9IGNsYXNzaWZ5SHViQnJvd3NlcklkZW50aXR5KGlkZW50aXR5IHx8IHt9KTtcbiAgICAgICAgICAgIGlmIChtID09PSAnd2F0Y2hfb25seScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgSW1wb3J0IGEgZnVsbCBrZXkgZnJvbSB0aGUgdG9wLWJhciBpZGVudGl0eSBtZW51IG9yIDxMaW5rIHRvPVwiL3NldHRpbmdzXCI+U2V0dGluZ3M8L0xpbms+IOKGkiA8c3Ryb25nPkZhYnJpYyBpZGVudGl0eTwvc3Ryb25nPiB0byBzaG93IHRoZSBtYXN0ZXIgeHB1YiBhbmQgcGF5bWVudCBhY2NvdW50IGlkcyAod2F0Y2gtb25seSBkb2VzIG5vdCBkZXJpdmUgc3BlbmQga2V5cyBoZXJlKS5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtID09PSAncGFzc3dvcmRfbG9ja2VkJykge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICBVbmxvY2sgZnJvbSB0aGUgaGVhZGVyICg8c3Ryb25nPkxvY2tlZDwvc3Ryb25nPiDihpIgZW5jcnlwdGlvbiBwYXNzd29yZCksIG9yIDxMaW5rIHRvPVwiL3NldHRpbmdzXCI+U2V0dGluZ3M8L0xpbms+IOKGkiA8c3Ryb25nPkZhYnJpYyBpZGVudGl0eTwvc3Ryb25nPiwgdG8gc2hvdyB0aGUgbWFzdGVyIHhwdWIgYW5kIHBheW1lbnQgYWNjb3VudCBpZHMuXG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIENyZWF0ZSBvciByZXN0b3JlIGEgRmFicmljIGlkZW50aXR5OiA8TGluayB0bz1cIi9zZXR0aW5nc1wiPlNldHRpbmdzPC9MaW5rPiDihpIgPHN0cm9uZz5GYWJyaWMgaWRlbnRpdHk8L3N0cm9uZz4gb3IgPHN0cm9uZz5Mb2cgaW48L3N0cm9uZz4gaW4gdGhlIHRvcCBiYXIsIHRvIHNob3cgdGhlIG1hc3RlciB4cHViIGFuZCBwYXltZW50IGFjY291bnQgaWRzLlxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgKX1cblxuICAgICAgPE1lc3NhZ2Ugc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMWVtJyB9fT5cbiAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAwLCBmb250U2l6ZTogJzAuODhlbScsIGxpbmVIZWlnaHQ6IDEuNDUsIGNvbG9yOiAnIzU1NScgfX0+XG4gICAgICAgICAgPHN0cm9uZz5Eb2N1bWVudHMgJmFtcDsgTDE6PC9zdHJvbmc+IHB1Ymxpc2hpbmcgaXMgZnJlZTsgPHN0cm9uZz5kaXN0cmlidXRlPC9zdHJvbmc+IGFuZCBwYWlkIHJldHJpZXZhbCB1c2UgaW52b2ljZXMgeW91IHBheSBmcm9teycgJ31cbiAgICAgICAgICA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCI+Qml0Y29pbjwvTGluaz4gb3IgPExpbmsgdG89XCIvcGF5bWVudHNcIj5QYXltZW50czwvTGluaz4uIFZlcmlmeSBvbi1jaGFpbiBhY3Rpdml0eSB1bmRlcnsnICd9XG4gICAgICAgICAgPExpbmsgdG89XCIvc2VydmljZXMvYml0Y29pbi9yZXNvdXJjZXNcIj5SZXNvdXJjZXM8L0xpbms+IG9yIHRoZSBleHBsb3JlciBvbiB0aGUgQml0Y29pbiBwYWdlLlxuICAgICAgICA8L3A+XG4gICAgICA8L01lc3NhZ2U+XG5cbiAgICAgIDxwIHN0eWxlPXt7IG1hcmdpblRvcDogJzEuMjVlbScsIGZvbnRTaXplOiAnMC44OGVtJywgY29sb3I6ICcjNjY2JyB9fT5cbiAgICAgICAgPExpbmsgdG89XCIvc2V0dGluZ3NcIj7ihpAgQWxsIHNldHRpbmdzPC9MaW5rPlxuICAgICAgICB7JyDCtyAnfVxuICAgICAgICA8TGluayB0bz1cIi9zZXR0aW5nc1wiPkZhYnJpYyBpZGVudGl0eTwvTGluaz5cbiAgICAgICAgeycgwrcgJ31cbiAgICAgICAgPExpbmsgdG89XCIvZG9jdW1lbnRzXCI+RG9jdW1lbnRzPC9MaW5rPlxuICAgICAgICB7JyDCtyAnfVxuICAgICAgICA8TGluayB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2ludm9pY2VzXCI+SW52b2ljZXM8L0xpbms+XG4gICAgICAgIHsnIMK3ICd9XG4gICAgICAgIDxMaW5rIHRvPVwiL3BheW1lbnRzXCI+UGF5bWVudHM8L0xpbms+XG4gICAgICA8L3A+XG4gICAgPC9TZWdtZW50PlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNldHRpbmdzQml0Y29pbldhbGxldDtcbiJdLCJuYW1lcyI6WyJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkxpbmsiLCJfcmVxdWlyZTIiLCJIZWFkZXIiLCJJY29uIiwiTWVzc2FnZSIsIlNlZ21lbnQiLCJfcmVxdWlyZTMiLCJnZXRCaXRjb2luQmlwNDRBY2NvdW50Rm9ySWRlbnRpdHkiLCJnZXRTcGVuZFdhbGxldENvbnRleHQiLCJfcmVxdWlyZTQiLCJjbGFzc2lmeUh1YkJyb3dzZXJJZGVudGl0eSIsInRyaW1NaWRkbGUiLCJzIiwibGVmdCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInJpZ2h0IiwidCIsIlN0cmluZyIsImNvbmNhdCIsInNsaWNlIiwiU2V0dGluZ3NCaXRjb2luV2FsbGV0IiwiX3JlZiIsImlkZW50aXR5IiwibWFzdGVyWHB1YiIsInhwdWIiLCJhY2N0Iiwic3BlbmQiLCJ1c2VNZW1vIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwibWF4V2lkdGgiLCJtYXJnaW4iLCJhcyIsImlkIiwibWFyZ2luQm90dG9tIiwibmFtZSIsIkNvbnRlbnQiLCJjb2xvciIsImxpbmVIZWlnaHQiLCJ3aGl0ZVNwYWNlIiwiaW5mbyIsInNpemUiLCJmb250U2l6ZSIsInRvIiwid29yZEJyZWFrIiwid2FsbGV0SWQiLCJ0aXRsZSIsInBhc3N3b3JkUHJvdGVjdGVkIiwieHBydiIsIndhcm5pbmciLCJtIiwiRnJhZ21lbnQiLCJtYXJnaW5Ub3AiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/SettingsBitcoinWallet.js\n\n}')},"./components/SettingsFederationHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar FederationsHome = __webpack_require__(/*! ./FederationsHome */ "./components/FederationsHome.js");\n\n/** Settings entry: same UI as `/federations`, compact “Distributed federation” heading. */\nfunction SettingsFederationHome(props) {\n return /*#__PURE__*/React.createElement(FederationsHome, {\n adminToken: props && props.adminToken,\n settingsLayout: true,\n bridgeRef: props && props.bridgeRef\n });\n}\nmodule.exports = SettingsFederationHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL1NldHRpbmdzRmVkZXJhdGlvbkhvbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBTUEsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLDRDQUFPLENBQUM7QUFDOUIsSUFBTUMsZUFBZSxHQUFHRCxtQkFBTyxDQUFDLDBEQUFtQixDQUFDOztBQUVwRDtBQUNBLFNBQVNFLHNCQUFzQkEsQ0FBRUMsS0FBSyxFQUFFO0VBQ3RDLG9CQUNFSixLQUFBLENBQUFLLGFBQUEsQ0FBQ0gsZUFBZTtJQUNkSSxVQUFVLEVBQUVGLEtBQUssSUFBSUEsS0FBSyxDQUFDRSxVQUFXO0lBQ3RDQyxjQUFjO0lBQ2RDLFNBQVMsRUFBRUosS0FBSyxJQUFJQSxLQUFLLENBQUNJO0VBQVUsQ0FDckMsQ0FBQztBQUVOO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHUCxzQkFBc0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvU2V0dGluZ3NGZWRlcmF0aW9uSG9tZS5qcz9mYmNmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgRmVkZXJhdGlvbnNIb21lID0gcmVxdWlyZSgnLi9GZWRlcmF0aW9uc0hvbWUnKTtcblxuLyoqIFNldHRpbmdzIGVudHJ5OiBzYW1lIFVJIGFzIGAvZmVkZXJhdGlvbnNgLCBjb21wYWN0IOKAnERpc3RyaWJ1dGVkIGZlZGVyYXRpb27igJ0gaGVhZGluZy4gKi9cbmZ1bmN0aW9uIFNldHRpbmdzRmVkZXJhdGlvbkhvbWUgKHByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPEZlZGVyYXRpb25zSG9tZVxuICAgICAgYWRtaW5Ub2tlbj17cHJvcHMgJiYgcHJvcHMuYWRtaW5Ub2tlbn1cbiAgICAgIHNldHRpbmdzTGF5b3V0XG4gICAgICBicmlkZ2VSZWY9e3Byb3BzICYmIHByb3BzLmJyaWRnZVJlZn1cbiAgICAvPlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNldHRpbmdzRmVkZXJhdGlvbkhvbWU7XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJyZXF1aXJlIiwiRmVkZXJhdGlvbnNIb21lIiwiU2V0dGluZ3NGZWRlcmF0aW9uSG9tZSIsInByb3BzIiwiY3JlYXRlRWxlbWVudCIsImFkbWluVG9rZW4iLCJzZXR0aW5nc0xheW91dCIsImJyaWRnZVJlZiIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/SettingsFederationHome.js\n\n}')},"./components/SettingsHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Settings overview: links into security/delegation UI (REST `/sessions` remains the Fabric API).\n */\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link;\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Header = _require2.Header,\n Icon = _require2.Icon,\n Segment = _require2.Segment,\n Card = _require2.Card;\nvar _require3 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require3.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require3.subscribeHubUiFeatureFlags;\nvar _require4 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require4.readHubAdminTokenFromBrowser;\nfunction SettingsHome() {\n var _React$useState = React.useState(0),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n setUiTick = _React$useState2[1];\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setUiTick(function (t) {\n return t + 1;\n });\n });\n }, []);\n var uf = loadHubUiFeatureFlags();\n /** Same gate as {@link TopPanel}: Peers nav is hub-admin-only. */\n var hasHubAdminPeerNav = !!readHubAdminTokenFromBrowser();\n return /*#__PURE__*/React.createElement(Segment, {\n style: {\n maxWidth: 960,\n margin: \'1em auto\'\n }\n }, /*#__PURE__*/React.createElement("section", {\n "aria-labelledby": "settings-page-heading",\n "aria-describedby": "settings-page-summary"\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n id: "settings-page-heading",\n style: {\n marginBottom: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "setting",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, "Settings")), /*#__PURE__*/React.createElement("p", {\n id: "settings-page-summary",\n style: {\n color: \'#666\',\n margin: \'0 0 1.5em\',\n maxWidth: \'42rem\',\n lineHeight: 1.45\n }\n }, "Hub configuration uses the ", /*#__PURE__*/React.createElement("code", null, "/settings"), " HTTP API (JSON). Use the cards below for documents, contracts, the hub activity feed, and identity-related tools: browser \\u2194 desktop linking, delegation tokens, and per-session audit.")), /*#__PURE__*/React.createElement(Card.Group, {\n itemsPerRow: 1,\n stackable: true\n }, /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/documents",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "file outline",\n "aria-hidden": "true"\n }), " Documents"), /*#__PURE__*/React.createElement(Card.Description, null, "Publish, distribute, and open the document list for this browser (same as the top nav)."))), /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/contracts",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "file code",\n "aria-hidden": "true"\n }), " Contracts"), /*#__PURE__*/React.createElement(Card.Description, null, "Storage and execution contracts; optional L1-backed execution registry when the hub Bitcoin service is available."))), uf.peers && hasHubAdminPeerNav ? /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/peers",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "sitemap",\n "aria-hidden": "true"\n }), " Peers"), /*#__PURE__*/React.createElement(Card.Description, null, "Fabric TCP peers and WebRTC mesh (same as top nav)."))) : null, uf.features ? /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/features",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "info circle",\n "aria-hidden": "true"\n }), " Features tour"), /*#__PURE__*/React.createElement(Card.Description, null, "Product overview and the same shortcut row as home and ", /*#__PURE__*/React.createElement("strong", null, "More"), " \\u2192 Features."))) : null, uf.activities ? /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/notifications",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "bell outline",\n "aria-hidden": "true"\n }), " Notifications"), /*#__PURE__*/React.createElement(Card.Description, null, "Wallet, Payjoin, and hub toasts (same list as the bell in the top bar)."))) : null, uf.activities ? /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/activities",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "comments",\n "aria-hidden": "true"\n }), " Activity log"), /*#__PURE__*/React.createElement(Card.Description, null, "Hub message log, chat, Bitcoin blocks, and optional feed filters."))) : null, /*#__PURE__*/React.createElement(Card, {\n style: {\n cursor: \'pointer\'\n },\n tabIndex: 0,\n role: "button",\n "aria-label": "Open Fabric identity manager",\n onKeyDown: function onKeyDown(e) {\n if (e.key !== \'Enter\' && e.key !== \' \') return;\n e.preventDefault();\n if (typeof window !== \'undefined\') {\n window.dispatchEvent(new CustomEvent(\'fabricOpenIdentityManager\'));\n }\n },\n onClick: function onClick() {\n if (typeof window !== \'undefined\') {\n window.dispatchEvent(new CustomEvent(\'fabricOpenIdentityManager\'));\n }\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "user circle",\n "aria-hidden": "true"\n }), " Fabric identity"), /*#__PURE__*/React.createElement(Card.Description, null, "Unlock, import, or export your local Fabric keys (same modal as ", /*#__PURE__*/React.createElement("strong", null, "Profile"), " / ", /*#__PURE__*/React.createElement("strong", null, "Manage identity"), " in the top bar). For Bitcoin receive addresses and balance, use ", /*#__PURE__*/React.createElement("strong", null, "Bitcoin wallet & derivation"), "."))), /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/settings/bitcoin-wallet",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin",\n "aria-hidden": "true"\n }), " Bitcoin wallet & derivation"), /*#__PURE__*/React.createElement(Card.Description, null, "How Bitcoin addresses and client balance map to your Fabric identity: one BIP44 Bitcoin account (", /*#__PURE__*/React.createElement("code", {\n style: {\n whiteSpace: \'nowrap\'\n }\n }, "m/44\'/0\'/0\'"), ") for receives, change, and Hub wallet id."))), /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/services/bitcoin",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin",\n "aria-hidden": "true"\n }), " Bitcoin dashboard"), /*#__PURE__*/React.createElement(Card.Description, null, "Hub L1 status, regtest tools, explorer, Payjoin, and Lightning; Payments / Invoices / Resources and other sub-pages follow Feature visibility."))), hasHubAdminPeerNav ? /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/settings/collaboration",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "users",\n "aria-hidden": "true"\n }), " Collaboration"), /*#__PURE__*/React.createElement(Card.Description, null, "Contacts (including from peers), multisig-oriented groups with pubkey nesting, and email invitations."))) : null, /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/settings/security",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "shield",\n "aria-hidden": "true"\n }), " Security & delegation"), /*#__PURE__*/React.createElement(Card.Description, null, "External signing sessions, delegation tokens, and links to per-token audit (", /*#__PURE__*/React.createElement("code", null, "/sessions"), " REST API on this Hub)."))), /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/settings/admin",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "settings",\n "aria-hidden": "true"\n }), " Admin"), /*#__PURE__*/React.createElement(Card.Description, null, "Beacon status, regtest admin token, HTTP shared mode, optional hub UI feature toggles (URL", \' \', /*#__PURE__*/React.createElement("code", null, "/settings/admin"), "; old ", /*#__PURE__*/React.createElement("code", null, "/admin"), " redirects here)."))), uf.sidechain ? /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/sidechains",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "random",\n "aria-hidden": "true"\n }), " Statechain"), /*#__PURE__*/React.createElement(Card.Description, null, "Global state, JSON patches, and operator context (same route as ", /*#__PURE__*/React.createElement("strong", null, "More"), " \\u2192 Sidechain)."))) : null, uf.sidechain ? /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/settings/admin/beacon-federation",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "star",\n "aria-hidden": "true"\n }), " Beacon Federation"), /*#__PURE__*/React.createElement(Card.Description, null, "L1-bound epochs, manifest links, and federation witness walkthrough (same as ", /*#__PURE__*/React.createElement("strong", null, "More"), " \\u2192 Beacon Federation)."))) : null, uf.sidechain ? /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/federations",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "users",\n "aria-hidden": "true"\n }), " Federations"), /*#__PURE__*/React.createElement(Card.Description, null, "Multi-sig validator policy for sidechain patches and beacon epochs (when not overridden by environment). Same form under Settings \\u2192 Distributed federation. For L1-bound epochs and reproducible Schnorr witnesses, see ", /*#__PURE__*/React.createElement("strong", null, "Beacon Federation"), " and the live", /*#__PURE__*/React.createElement("code", null, "/services/distributed/manifest"), " / ", /*#__PURE__*/React.createElement("code", null, "/services/distributed/epoch"), " JSON endpoints."))) : null, uf.bitcoinResources ? /*#__PURE__*/React.createElement(Card, {\n as: Link,\n to: "/services/bitcoin/resources",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Card.Content, null, /*#__PURE__*/React.createElement(Card.Header, null, /*#__PURE__*/React.createElement(Icon, {\n name: "code",\n "aria-hidden": "true"\n }), " Bitcoin HTTP resources"), /*#__PURE__*/React.createElement(Card.Description, null, "L1 payment verification, browse JSON from ", /*#__PURE__*/React.createElement("code", null, "/services/bitcoin"), " and ", /*#__PURE__*/React.createElement("code", null, "/services/lightning"), ", and quick-open common GET paths."))) : null));\n}\nmodule.exports = SettingsHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QixLQUFBLENBQUFzQixhQUFBLENBQUNkLElBQUksQ0FBQzZCLFdBQVcsUUFBQyw0Q0FDMEIsZUFBQXJDLEtBQUEsQ0FBQXNCLGFBQUEsZUFBTSxtQkFBdUIsQ0FBQyxTQUFLLGVBQUF0QixLQUFBLENBQUFzQixhQUFBLGVBQU0scUJBQXlCLENBQUMsc0NBQzdGLENBQ04sQ0FDVixDQUFDLEdBQ0wsSUFDTSxDQUNMLENBQUM7QUFFZDtBQUVBK0IsTUFBTSxDQUFDQyxPQUFPLEdBQUd4QyxZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL1NldHRpbmdzSG9tZS5qcz9jOTliIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTZXR0aW5ncyBvdmVydmlldzogbGlua3MgaW50byBzZWN1cml0eS9kZWxlZ2F0aW9uIFVJIChSRVNUIGAvc2Vzc2lvbnNgIHJlbWFpbnMgdGhlIEZhYnJpYyBBUEkpLlxuICovXG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluayB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xuY29uc3QgeyBIZWFkZXIsIEljb24sIFNlZ21lbnQsIENhcmQgfSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5jb25zdCB7XG4gIGxvYWRIdWJVaUZlYXR1cmVGbGFncyxcbiAgc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3Ncbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViVWlGZWF0dXJlRmxhZ3MnKTtcbmNvbnN0IHsgcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YkFkbWluVG9rZW5Ccm93c2VyJyk7XG5cbmZ1bmN0aW9uIFNldHRpbmdzSG9tZSAoKSB7XG4gIGNvbnN0IFssIHNldFVpVGlja10gPSBSZWFjdC51c2VTdGF0ZSgwKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MoKCkgPT4gc2V0VWlUaWNrKCh0KSA9PiB0ICsgMSkpO1xuICB9LCBbXSk7XG4gIGNvbnN0IHVmID0gbG9hZEh1YlVpRmVhdHVyZUZsYWdzKCk7XG4gIC8qKiBTYW1lIGdhdGUgYXMge0BsaW5rIFRvcFBhbmVsfTogUGVlcnMgbmF2IGlzIGh1Yi1hZG1pbi1vbmx5LiAqL1xuICBjb25zdCBoYXNIdWJBZG1pblBlZXJOYXYgPSAhIXJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIoKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWdtZW50IHN0eWxlPXt7IG1heFdpZHRoOiA5NjAsIG1hcmdpbjogJzFlbSBhdXRvJyB9fT5cbiAgICAgIDxzZWN0aW9uIGFyaWEtbGFiZWxsZWRieT1cInNldHRpbmdzLXBhZ2UtaGVhZGluZ1wiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZXR0aW5ncy1wYWdlLXN1bW1hcnlcIj5cbiAgICAgICAgPEhlYWRlciBhcz1cImgyXCIgaWQ9XCJzZXR0aW5ncy1wYWdlLWhlYWRpbmdcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjM1ZW0nIH19PlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJzZXR0aW5nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICA8SGVhZGVyLkNvbnRlbnQ+U2V0dGluZ3M8L0hlYWRlci5Db250ZW50PlxuICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgPHAgaWQ9XCJzZXR0aW5ncy1wYWdlLXN1bW1hcnlcIiBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXJnaW46ICcwIDAgMS41ZW0nLCBtYXhXaWR0aDogJzQycmVtJywgbGluZUhlaWdodDogMS40NSB9fT5cbiAgICAgICAgICBIdWIgY29uZmlndXJhdGlvbiB1c2VzIHRoZSA8Y29kZT4vc2V0dGluZ3M8L2NvZGU+IEhUVFAgQVBJIChKU09OKS4gVXNlIHRoZSBjYXJkcyBiZWxvdyBmb3IgZG9jdW1lbnRzLCBjb250cmFjdHMsXG4gICAgICAgICAgdGhlIGh1YiBhY3Rpdml0eSBmZWVkLCBhbmQgaWRlbnRpdHktcmVsYXRlZCB0b29sczogYnJvd3NlciDihpQgZGVza3RvcCBsaW5raW5nLCBkZWxlZ2F0aW9uIHRva2VucywgYW5kIHBlci1zZXNzaW9uIGF1ZGl0LlxuICAgICAgICA8L3A+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIDxDYXJkLkdyb3VwIGl0ZW1zUGVyUm93PXsxfSBzdGFja2FibGU+XG4gICAgICAgIDxDYXJkIGFzPXtMaW5rfSB0bz1cIi9kb2N1bWVudHNcIiBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fT5cbiAgICAgICAgICA8Q2FyZC5Db250ZW50PlxuICAgICAgICAgICAgPENhcmQuSGVhZGVyPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZmlsZSBvdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gRG9jdW1lbnRzXG4gICAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgICAgPENhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIFB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZCBvcGVuIHRoZSBkb2N1bWVudCBsaXN0IGZvciB0aGlzIGJyb3dzZXIgKHNhbWUgYXMgdGhlIHRvcCBuYXYpLlxuICAgICAgICAgICAgPC9DYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgIDwvQ2FyZC5Db250ZW50PlxuICAgICAgICA8L0NhcmQ+XG4gICAgICAgIDxDYXJkIGFzPXtMaW5rfSB0bz1cIi9jb250cmFjdHNcIiBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fT5cbiAgICAgICAgICA8Q2FyZC5Db250ZW50PlxuICAgICAgICAgICAgPENhcmQuSGVhZGVyPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZmlsZSBjb2RlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gQ29udHJhY3RzXG4gICAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgICAgPENhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIFN0b3JhZ2UgYW5kIGV4ZWN1dGlvbiBjb250cmFjdHM7IG9wdGlvbmFsIEwxLWJhY2tlZCBleGVjdXRpb24gcmVnaXN0cnkgd2hlbiB0aGUgaHViIEJpdGNvaW4gc2VydmljZSBpcyBhdmFpbGFibGUuXG4gICAgICAgICAgICA8L0NhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgPC9DYXJkLkNvbnRlbnQ+XG4gICAgICAgIDwvQ2FyZD5cbiAgICAgICAge3VmLnBlZXJzICYmIGhhc0h1YkFkbWluUGVlck5hdiA/IChcbiAgICAgICAgICA8Q2FyZCBhcz17TGlua30gdG89XCIvcGVlcnNcIiBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fT5cbiAgICAgICAgICAgIDxDYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDYXJkLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwic2l0ZW1hcFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+IFBlZXJzXG4gICAgICAgICAgICAgIDwvQ2FyZC5IZWFkZXI+XG4gICAgICAgICAgICAgIDxDYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgIEZhYnJpYyBUQ1AgcGVlcnMgYW5kIFdlYlJUQyBtZXNoIChzYW1lIGFzIHRvcCBuYXYpLlxuICAgICAgICAgICAgICA8L0NhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L0NhcmQuQ29udGVudD5cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7dWYuZmVhdHVyZXMgPyAoXG4gICAgICAgICAgPENhcmQgYXM9e0xpbmt9IHRvPVwiL2ZlYXR1cmVzXCIgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX0+XG4gICAgICAgICAgICA8Q2FyZC5Db250ZW50PlxuICAgICAgICAgICAgICA8Q2FyZC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImluZm8gY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gRmVhdHVyZXMgdG91clxuICAgICAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgICAgICA8Q2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICBQcm9kdWN0IG92ZXJ2aWV3IGFuZCB0aGUgc2FtZSBzaG9ydGN1dCByb3cgYXMgaG9tZSBhbmQgPHN0cm9uZz5Nb3JlPC9zdHJvbmc+IOKGkiBGZWF0dXJlcy5cbiAgICAgICAgICAgICAgPC9DYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgPC9DYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3VmLmFjdGl2aXRpZXMgPyAoXG4gICAgICAgICAgPENhcmQgYXM9e0xpbmt9IHRvPVwiL25vdGlmaWNhdGlvbnNcIiBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fT5cbiAgICAgICAgICAgIDxDYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDYXJkLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYmVsbCBvdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gTm90aWZpY2F0aW9uc1xuICAgICAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgICAgICA8Q2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICBXYWxsZXQsIFBheWpvaW4sIGFuZCBodWIgdG9hc3RzIChzYW1lIGxpc3QgYXMgdGhlIGJlbGwgaW4gdGhlIHRvcCBiYXIpLlxuICAgICAgICAgICAgICA8L0NhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L0NhcmQuQ29udGVudD5cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7dWYuYWN0aXZpdGllcyA/IChcbiAgICAgICAgICA8Q2FyZCBhcz17TGlua30gdG89XCIvYWN0aXZpdGllc1wiIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19PlxuICAgICAgICAgICAgPENhcmQuQ29udGVudD5cbiAgICAgICAgICAgICAgPENhcmQuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjb21tZW50c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+IEFjdGl2aXR5IGxvZ1xuICAgICAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgICAgICA8Q2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICBIdWIgbWVzc2FnZSBsb2csIGNoYXQsIEJpdGNvaW4gYmxvY2tzLCBhbmQgb3B0aW9uYWwgZmVlZCBmaWx0ZXJzLlxuICAgICAgICAgICAgICA8L0NhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L0NhcmQuQ29udGVudD5cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Q2FyZFxuICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19XG4gICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIk9wZW4gRmFicmljIGlkZW50aXR5IG1hbmFnZXJcIlxuICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlLmtleSAhPT0gJ0VudGVyJyAmJiBlLmtleSAhPT0gJyAnKSByZXR1cm47XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdmYWJyaWNPcGVuSWRlbnRpdHlNYW5hZ2VyJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZmFicmljT3BlbklkZW50aXR5TWFuYWdlcicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPENhcmQuQ29udGVudD5cbiAgICAgICAgICAgIDxDYXJkLkhlYWRlcj5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInVzZXIgY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gRmFicmljIGlkZW50aXR5XG4gICAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgICAgPENhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIFVubG9jaywgaW1wb3J0LCBvciBleHBvcnQgeW91ciBsb2NhbCBGYWJyaWMga2V5cyAoc2FtZSBtb2RhbCBhcyA8c3Ryb25nPlByb2ZpbGU8L3N0cm9uZz4gLyA8c3Ryb25nPk1hbmFnZSBpZGVudGl0eTwvc3Ryb25nPiBpbiB0aGUgdG9wIGJhcikuXG4gICAgICAgICAgICAgIEZvciBCaXRjb2luIHJlY2VpdmUgYWRkcmVzc2VzIGFuZCBiYWxhbmNlLCB1c2UgPHN0cm9uZz5CaXRjb2luIHdhbGxldCAmYW1wOyBkZXJpdmF0aW9uPC9zdHJvbmc+LlxuICAgICAgICAgICAgPC9DYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgIDwvQ2FyZC5Db250ZW50PlxuICAgICAgICA8L0NhcmQ+XG4gICAgICAgIDxDYXJkIGFzPXtMaW5rfSB0bz1cIi9zZXR0aW5ncy9iaXRjb2luLXdhbGxldFwiIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19PlxuICAgICAgICAgIDxDYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICA8Q2FyZC5IZWFkZXI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJiaXRjb2luXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gQml0Y29pbiB3YWxsZXQgJmFtcDsgZGVyaXZhdGlvblxuICAgICAgICAgICAgPC9DYXJkLkhlYWRlcj5cbiAgICAgICAgICAgIDxDYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICBIb3cgQml0Y29pbiBhZGRyZXNzZXMgYW5kIGNsaWVudCBiYWxhbmNlIG1hcCB0byB5b3VyIEZhYnJpYyBpZGVudGl0eTogb25lIEJJUDQ0IEJpdGNvaW4gYWNjb3VudCAoXG4gICAgICAgICAgICAgIDxjb2RlIHN0eWxlPXt7IHdoaXRlU3BhY2U6ICdub3dyYXAnIH19PntgbS80NCcvMCcvMCdgfTwvY29kZT4pIGZvciByZWNlaXZlcywgY2hhbmdlLCBhbmQgSHViIHdhbGxldCBpZC5cbiAgICAgICAgICAgIDwvQ2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICA8L0NhcmQuQ29udGVudD5cbiAgICAgICAgPC9DYXJkPlxuICAgICAgICA8Q2FyZCBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pblwiIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19PlxuICAgICAgICAgIDxDYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICA8Q2FyZC5IZWFkZXI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJiaXRjb2luXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gQml0Y29pbiBkYXNoYm9hcmRcbiAgICAgICAgICAgIDwvQ2FyZC5IZWFkZXI+XG4gICAgICAgICAgICA8Q2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgSHViIEwxIHN0YXR1cywgcmVndGVzdCB0b29scywgZXhwbG9yZXIsIFBheWpvaW4sIGFuZCBMaWdodG5pbmc7IFBheW1lbnRzIC8gSW52b2ljZXMgLyBSZXNvdXJjZXMgYW5kIG90aGVyIHN1Yi1wYWdlcyBmb2xsb3cgRmVhdHVyZSB2aXNpYmlsaXR5LlxuICAgICAgICAgICAgPC9DYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgIDwvQ2FyZC5Db250ZW50PlxuICAgICAgICA8L0NhcmQ+XG4gICAgICAgIHtoYXNIdWJBZG1pblBlZXJOYXYgPyAoXG4gICAgICAgICAgPENhcmQgYXM9e0xpbmt9IHRvPVwiL3NldHRpbmdzL2NvbGxhYm9yYXRpb25cIiBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fT5cbiAgICAgICAgICAgIDxDYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDYXJkLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwidXNlcnNcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPiBDb2xsYWJvcmF0aW9uXG4gICAgICAgICAgICAgIDwvQ2FyZC5IZWFkZXI+XG4gICAgICAgICAgICAgIDxDYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgIENvbnRhY3RzIChpbmNsdWRpbmcgZnJvbSBwZWVycyksIG11bHRpc2lnLW9yaWVudGVkIGdyb3VwcyB3aXRoIHB1YmtleSBuZXN0aW5nLCBhbmQgZW1haWwgaW52aXRhdGlvbnMuXG4gICAgICAgICAgICAgIDwvQ2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgIDwvQ2FyZC5Db250ZW50PlxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxDYXJkIGFzPXtMaW5rfSB0bz1cIi9zZXR0aW5ncy9zZWN1cml0eVwiIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19PlxuICAgICAgICAgIDxDYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICA8Q2FyZC5IZWFkZXI+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzaGllbGRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPiBTZWN1cml0eSAmYW1wOyBkZWxlZ2F0aW9uXG4gICAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgICAgPENhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIEV4dGVybmFsIHNpZ25pbmcgc2Vzc2lvbnMsIGRlbGVnYXRpb24gdG9rZW5zLCBhbmQgbGlua3MgdG8gcGVyLXRva2VuIGF1ZGl0IChcbiAgICAgICAgICAgICAgPGNvZGU+L3Nlc3Npb25zPC9jb2RlPiBSRVNUIEFQSSBvbiB0aGlzIEh1YikuXG4gICAgICAgICAgICA8L0NhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgPC9DYXJkLkNvbnRlbnQ+XG4gICAgICAgIDwvQ2FyZD5cbiAgICAgICAgPENhcmQgYXM9e0xpbmt9IHRvPVwiL3NldHRpbmdzL2FkbWluXCIgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX0+XG4gICAgICAgICAgPENhcmQuQ29udGVudD5cbiAgICAgICAgICAgIDxDYXJkLkhlYWRlcj5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNldHRpbmdzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gQWRtaW5cbiAgICAgICAgICAgIDwvQ2FyZC5IZWFkZXI+XG4gICAgICAgICAgICA8Q2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgQmVhY29uIHN0YXR1cywgcmVndGVzdCBhZG1pbiB0b2tlbiwgSFRUUCBzaGFyZWQgbW9kZSwgb3B0aW9uYWwgaHViIFVJIGZlYXR1cmUgdG9nZ2xlcyAoVVJMeycgJ31cbiAgICAgICAgICAgICAgPGNvZGU+L3NldHRpbmdzL2FkbWluPC9jb2RlPjsgb2xkIDxjb2RlPi9hZG1pbjwvY29kZT4gcmVkaXJlY3RzIGhlcmUpLlxuICAgICAgICAgICAgPC9DYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgIDwvQ2FyZC5Db250ZW50PlxuICAgICAgICA8L0NhcmQ+XG4gICAgICAgIHt1Zi5zaWRlY2hhaW4gPyAoXG4gICAgICAgICAgPENhcmQgYXM9e0xpbmt9IHRvPVwiL3NpZGVjaGFpbnNcIiBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fT5cbiAgICAgICAgICAgIDxDYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDYXJkLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwicmFuZG9tXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gU3RhdGVjaGFpblxuICAgICAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgICAgICA8Q2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICBHbG9iYWwgc3RhdGUsIEpTT04gcGF0Y2hlcywgYW5kIG9wZXJhdG9yIGNvbnRleHQgKHNhbWUgcm91dGUgYXMgPHN0cm9uZz5Nb3JlPC9zdHJvbmc+IOKGkiBTaWRlY2hhaW4pLlxuICAgICAgICAgICAgICA8L0NhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L0NhcmQuQ29udGVudD5cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7dWYuc2lkZWNoYWluID8gKFxuICAgICAgICAgIDxDYXJkIGFzPXtMaW5rfSB0bz1cIi9zZXR0aW5ncy9hZG1pbi9iZWFjb24tZmVkZXJhdGlvblwiIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19PlxuICAgICAgICAgICAgPENhcmQuQ29udGVudD5cbiAgICAgICAgICAgICAgPENhcmQuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJzdGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz4gQmVhY29uIEZlZGVyYXRpb25cbiAgICAgICAgICAgICAgPC9DYXJkLkhlYWRlcj5cbiAgICAgICAgICAgICAgPENhcmQuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgTDEtYm91bmQgZXBvY2hzLCBtYW5pZmVzdCBsaW5rcywgYW5kIGZlZGVyYXRpb24gd2l0bmVzcyB3YWxrdGhyb3VnaCAoc2FtZSBhcyA8c3Ryb25nPk1vcmU8L3N0cm9uZz4g4oaSIEJlYWNvbiBGZWRlcmF0aW9uKS5cbiAgICAgICAgICAgICAgPC9DYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgPC9DYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3VmLnNpZGVjaGFpbiA/IChcbiAgICAgICAgICA8Q2FyZCBhcz17TGlua30gdG89XCIvZmVkZXJhdGlvbnNcIiBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fT5cbiAgICAgICAgICAgIDxDYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxDYXJkLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwidXNlcnNcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPiBGZWRlcmF0aW9uc1xuICAgICAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgICAgICA8Q2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICBNdWx0aS1zaWcgdmFsaWRhdG9yIHBvbGljeSBmb3Igc2lkZWNoYWluIHBhdGNoZXMgYW5kIGJlYWNvbiBlcG9jaHMgKHdoZW4gbm90IG92ZXJyaWRkZW4gYnkgZW52aXJvbm1lbnQpLiBTYW1lIGZvcm0gdW5kZXIgU2V0dGluZ3Mg4oaSIERpc3RyaWJ1dGVkIGZlZGVyYXRpb24uXG4gICAgICAgICAgICAgICAgRm9yIEwxLWJvdW5kIGVwb2NocyBhbmQgcmVwcm9kdWNpYmxlIFNjaG5vcnIgd2l0bmVzc2VzLCBzZWUgPHN0cm9uZz5CZWFjb24gRmVkZXJhdGlvbjwvc3Ryb25nPiBhbmQgdGhlIGxpdmVcbiAgICAgICAgICAgICAgICA8Y29kZT4vc2VydmljZXMvZGlzdHJpYnV0ZWQvbWFuaWZlc3Q8L2NvZGU+IC8gPGNvZGU+L3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL2Vwb2NoPC9jb2RlPiBKU09OIGVuZHBvaW50cy5cbiAgICAgICAgICAgICAgPC9DYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgPC9DYXJkLkNvbnRlbnQ+XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3VmLmJpdGNvaW5SZXNvdXJjZXMgPyAoXG4gICAgICAgICAgPENhcmQgYXM9e0xpbmt9IHRvPVwiL3NlcnZpY2VzL2JpdGNvaW4vcmVzb3VyY2VzXCIgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX0+XG4gICAgICAgICAgICA8Q2FyZC5Db250ZW50PlxuICAgICAgICAgICAgICA8Q2FyZC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImNvZGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPiBCaXRjb2luIEhUVFAgcmVzb3VyY2VzXG4gICAgICAgICAgICAgIDwvQ2FyZC5IZWFkZXI+XG4gICAgICAgICAgICAgIDxDYXJkLkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgIEwxIHBheW1lbnQgdmVyaWZpY2F0aW9uLCBicm93c2UgSlNPTiBmcm9tIDxjb2RlPi9zZXJ2aWNlcy9iaXRjb2luPC9jb2RlPiBhbmQgPGNvZGU+L3NlcnZpY2VzL2xpZ2h0bmluZzwvY29kZT4sIGFuZCBxdWljay1vcGVuIGNvbW1vbiBHRVQgcGF0aHMuXG4gICAgICAgICAgICAgIDwvQ2FyZC5EZXNjcmlwdGlvbj5cbiAgICAgICAgICAgIDwvQ2FyZC5Db250ZW50PlxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L0NhcmQuR3JvdXA+XG4gICAgPC9TZWdtZW50PlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNldHRpbmdzSG9tZTtcbiJdLCJuYW1lcyI6WyJfc2xpY2VkVG9BcnJheSIsInIiLCJlIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInQiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJsZW5ndGgiLCJuIiwibCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaSIsInUiLCJmIiwibyIsIm5leHQiLCJPYmplY3QiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiaXNBcnJheSIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTGluayIsIl9yZXF1aXJlMiIsIkhlYWRlciIsIkljb24iLCJTZWdtZW50IiwiQ2FyZCIsIl9yZXF1aXJlMyIsImxvYWRIdWJVaUZlYXR1cmVGbGFncyIsInN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzIiwiX3JlcXVpcmU0IiwicmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciIsIlNldHRpbmdzSG9tZSIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsInNldFVpVGljayIsInVzZUVmZmVjdCIsInVmIiwiaGFzSHViQWRtaW5QZWVyTmF2IiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwibWF4V2lkdGgiLCJtYXJnaW4iLCJhcyIsImlkIiwibWFyZ2luQm90dG9tIiwiQ29udGVudCIsImNvbG9yIiwibGluZUhlaWdodCIsIkdyb3VwIiwiaXRlbXNQZXJSb3ciLCJzdGFja2FibGUiLCJ0byIsImN1cnNvciIsIkRlc2NyaXB0aW9uIiwicGVlcnMiLCJmZWF0dXJlcyIsImFjdGl2aXRpZXMiLCJ0YWJJbmRleCIsInJvbGUiLCJvbktleURvd24iLCJrZXkiLCJwcmV2ZW50RGVmYXVsdCIsIndpbmRvdyIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsIm9uQ2xpY2siLCJ3aGl0ZVNwYWNlIiwic2lkZWNoYWluIiwiYml0Y29pblJlc291cmNlcyIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/SettingsHome.js\n\n}')},"./components/SidechainHome.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer;\n\n\n// Dependencies\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require.Button,\n Form = _require.Form,\n Header = _require.Header,\n Icon = _require.Icon,\n Message = _require.Message,\n Segment = _require.Segment,\n TextArea = _require.TextArea,\n Divider = _require.Divider,\n Label = _require.Label,\n Table = _require.Table,\n Statistic = _require.Statistic;\n\n// Fabric Types\nvar Actor = __webpack_require__(/*! @fabric/core/types/actor */ "./node_modules/@fabric/core/types/actor.js");\nvar _require2 = __webpack_require__(/*! ../functions/toast */ "./functions/toast.js"),\n toast = _require2.toast;\nvar _require3 = __webpack_require__(/*! ../functions/hubIdentityUiHints */ "./functions/hubIdentityUiHints.js"),\n fabricIdentityNeedFullKeyPlain = _require3.fabricIdentityNeedFullKeyPlain;\nvar _require4 = __webpack_require__(/*! @noble/hashes/sha2.js */ "./node_modules/@noble/hashes/sha2.js"),\n sha256 = _require4.sha256;\nvar _require5 = __webpack_require__(/*! ../functions/sidechainHubClient */ "./functions/sidechainHubClient.js"),\n getSidechainState = _require5.getSidechainState,\n getSidechainJournal = _require5.getSidechainJournal,\n getSidechainSnapshots = _require5.getSidechainSnapshots,\n submitSidechainStatePatch = _require5.submitSidechainStatePatch,\n fetchDistributedEpoch = _require5.fetchDistributedEpoch,\n fetchDistributedManifest = _require5.fetchDistributedManifest;\nvar _require6 = __webpack_require__(/*! ../functions/documentOffer */ "./functions/documentOffer.js"),\n createOfferRecord = _require6.createOfferRecord,\n patchesForNewOffer = _require6.patchesForNewOffer,\n patchReplaceOffer = _require6.patchReplaceOffer,\n buildDocumentOfferEnvelope = _require6.buildDocumentOfferEnvelope;\nvar _require7 = __webpack_require__(/*! ../functions/documentOfferHubClient */ "./functions/documentOfferHubClient.js"),\n buildDocumentOfferEscrow = _require7.buildDocumentOfferEscrow,\n verifyDocumentOfferFunding = _require7.verifyDocumentOfferFunding,\n prepareDocumentOfferDelivererClaimPsbt = _require7.prepareDocumentOfferDelivererClaimPsbt,\n prepareDocumentOfferInitiatorRefundPsbt = _require7.prepareDocumentOfferInitiatorRefundPsbt,\n broadcastSignedTransaction = _require7.broadcastSignedTransaction,\n getBitcoinTipHeight = _require7.getBitcoinTipHeight;\nvar _require8 = __webpack_require__(/*! ../functions/documentOfferTxBrowser */ "./functions/documentOfferTxBrowser.js"),\n signDelivererClaimFromPsbtBase64 = _require8.signDelivererClaimFromPsbtBase64,\n signInitiatorRefundFromPsbtBase64 = _require8.signInitiatorRefundFromPsbtBase64;\nvar _require9 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require9.readHubAdminTokenFromBrowser;\nvar _require0 = __webpack_require__(/*! ../functions/messageTypes */ "./functions/messageTypes.js"),\n DOCUMENT_OFFER = _require0.DOCUMENT_OFFER;\nvar _require1 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require1.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require1.subscribeHubUiFeatureFlags;\nvar _require10 = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require10.Link;\nvar DistributedFederationPanel = __webpack_require__(/*! ./DistributedFederationPanel */ "./components/DistributedFederationPanel.js");\nfunction paymentHashHexFromPreimageHex(preimageHex) {\n var clean = String(preimageHex || \'\').trim().replace(/^0x/i, \'\');\n if (!/^[0-9a-f]{64}$/i.test(clean)) return \'\';\n return Buffer.from(sha256(Uint8Array.from(Buffer.from(clean, \'hex\')))).toString(\'hex\');\n}\nfunction safeJson(obj) {\n var space = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n try {\n return JSON.stringify(obj, null, space);\n } catch (e) {\n return String(obj);\n }\n}\nfunction newOfferId() {\n return new Actor({\n type: \'HubEphemeralId\',\n purpose: \'sidechain.documentOffer\',\n nonce: Actor.randomBytes(8).toString(\'hex\'),\n at: Date.now()\n }).id;\n}\nvar SidechainHome = /*#__PURE__*/function (_React$Component) {\n function SidechainHome(props) {\n var _this;\n _classCallCheck(this, SidechainHome);\n _this = _callSuper(this, SidechainHome, [props]);\n _this.state = {\n loading: false,\n sidechain: null,\n epoch: null,\n epochError: null,\n manifest: null,\n journal: null,\n snapshots: null,\n showContentJson: false,\n patchJson: \'[\\n { "op": "add", "path": "/example", "value": true }\\n]\',\n federationWitnessJson: \'\',\n basisClockNote: \'\',\n offerDocumentId: \'\',\n offerRewardSats: \'10000\',\n offerMemo: \'\',\n offerAnnounceChat: true,\n lastPatchResult: null,\n inboundOffer: null,\n escrowPreimageHex: \'\',\n escrowPaymentHashHex: \'\',\n escrowDelivererPubkey: \'\',\n escrowInitiatorRefundPubkey: \'\',\n escrowRefundLockHeight: \'\',\n escrowRefundDelta: \'144\',\n escrowBuildResult: null,\n l1OfferId: \'\',\n l1FundingTxid: \'\',\n l1ClaimDestAddress: \'\',\n l1RefundDestAddress: \'\',\n l1FeeClaimSats: \'2000\',\n l1FeeRefundSats: \'2000\',\n l1DelivererPrivHex: \'\',\n l1InitiatorPrivHex: \'\',\n l1LastPsbtClaim: \'\',\n l1LastPsbtRefund: \'\',\n l1LastSignedTxHex: \'\',\n hubUiFlagsRev: 0\n };\n _this._onDocumentOffer = _this._onDocumentOffer.bind(_this);\n return _this;\n }\n _inherits(SidechainHome, _React$Component);\n return _createClass(SidechainHome, [{\n key: "componentDidMount",\n value: function componentDidMount() {\n var _this2 = this;\n this.refresh();\n if (typeof window !== \'undefined\') {\n window.addEventListener(\'fabric:documentOffer\', this._onDocumentOffer);\n this._hubUiFlagsUnsub = subscribeHubUiFeatureFlags(function () {\n _this2.setState(function (s) {\n return {\n hubUiFlagsRev: (s.hubUiFlagsRev || 0) + 1\n };\n });\n });\n }\n }\n }, {\n key: "componentWillUnmount",\n value: function componentWillUnmount() {\n if (typeof window !== \'undefined\') {\n window.removeEventListener(\'fabric:documentOffer\', this._onDocumentOffer);\n }\n if (typeof this._hubUiFlagsUnsub === \'function\') {\n this._hubUiFlagsUnsub();\n this._hubUiFlagsUnsub = null;\n }\n }\n }, {\n key: "_onDocumentOffer",\n value: function _onDocumentOffer(ev) {\n var d = ev && ev.detail;\n if (!d || !d.object) return;\n this.setState({\n inboundOffer: d\n });\n toast.info(\'Incoming DOCUMENT_OFFER (see Demo section)\');\n }\n }, {\n key: "_getInitiatorId",\n value: function _getInitiatorId() {\n var id = this.props.identity && (this.props.identity.fabricPeerId || this.props.identity.id);\n if (id) return String(id);\n var br = this.props.bridgeRef && this.props.bridgeRef.current;\n if (br && typeof br._getIdentityId === \'function\') {\n var x = br._getIdentityId();\n if (x) return String(x);\n }\n return \'\';\n }\n }, {\n key: "refresh",\n value: function () {\n var _refresh = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var _yield$Promise$all, _yield$Promise$all2, st, ep, man, jr, sn, next, errs, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n this.setState({\n loading: true,\n epochError: null\n });\n _context.p = 1;\n _context.n = 2;\n return Promise.all([getSidechainState(), fetchDistributedEpoch(), fetchDistributedManifest(), getSidechainJournal({\n limit: 40\n }), getSidechainSnapshots({\n limit: 40\n })]);\n case 2:\n _yield$Promise$all = _context.v;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 5);\n st = _yield$Promise$all2[0];\n ep = _yield$Promise$all2[1];\n man = _yield$Promise$all2[2];\n jr = _yield$Promise$all2[3];\n sn = _yield$Promise$all2[4];\n next = {\n sidechain: st.ok ? st.state : null,\n journal: jr.ok ? jr.journal : null,\n snapshots: sn.ok ? sn.snapshots : null,\n manifest: man.ok ? man.data : null\n };\n errs = [];\n if (!st.ok) errs.push(st.error || \'GetSidechainState failed\');\n if (!ep.ok) errs.push(ep.error || \'epoch fetch failed\');\n if (!jr.ok) errs.push(jr.error || \'GetSidechainJournal failed\');\n if (!sn.ok) errs.push(sn.error || \'GetSidechainSnapshots failed\');\n if (errs.length) next.epochError = errs.join(\' · \');\n if (ep.ok) next.epoch = ep.data;\n if (st.ok && st.state && typeof st.state.clock === \'number\') {\n next.patchJson = this.state.patchJson;\n next.basisClockNote = "Current logical clock: ".concat(st.state.clock, " \\u2014 use this as basisClock when submitting patches.");\n }\n this.setState(next);\n _context.n = 4;\n break;\n case 3:\n _context.p = 3;\n _t = _context.v;\n this.setState({\n epochError: _t && _t.message ? _t.message : String(_t)\n });\n case 4:\n _context.p = 4;\n this.setState({\n loading: false\n });\n return _context.f(4);\n case 5:\n return _context.a(2);\n }\n }, _callee, this, [[1, 3, 4, 5]]);\n }));\n function refresh() {\n return _refresh.apply(this, arguments);\n }\n return refresh;\n }()\n }, {\n key: "_shortDigest",\n value: function _shortDigest(hex) {\n var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;\n var s = String(hex || \'\');\n if (s.length <= n * 2) return s || \'—\';\n return "".concat(s.slice(0, n), "\\u2026").concat(s.slice(-n));\n }\n }, {\n key: "_effectivePolicy",\n value: function _effectivePolicy() {\n var fromState = this.state.sidechain && this.state.sidechain.policy;\n if (fromState) return fromState;\n var fromMan = this.state.manifest && this.state.manifest.sidechainPolicy;\n return fromMan || null;\n }\n }, {\n key: "_sealedDigestHint",\n value: function _sealedDigestHint() {\n var _this$state = this.state,\n sidechain = _this$state.sidechain,\n epoch = _this$state.epoch;\n var last = epoch && epoch.beacon && epoch.beacon.last;\n var payload = last && last.payload;\n var sc = payload && payload.sidechain;\n if (!sc || sc.stateDigest == null) {\n return {\n text: \'No sidechain digest in last sealed epoch (beacon idle or no epochs yet).\',\n color: \'grey\'\n };\n }\n var cur = sidechain && sidechain.stateDigest;\n if (!cur) return {\n text: "Last sealed digest: ".concat(sc.stateDigest),\n color: \'blue\'\n };\n if (String(sc.stateDigest) === String(cur)) {\n return {\n text: \'Live head matches last sealed epoch sidechain digest.\',\n color: \'green\'\n };\n }\n return {\n text: \'Live stateDigest differs from last sealed epoch — unsealed patch, sync lag, or post-reorg reconciliation (see BEACON_SIDECHAIN_DESIGN_AND_ROADMAP.md, section 6).\',\n color: \'orange\'\n };\n }\n }, {\n key: "_parseFederationWitnessFromState",\n value: function _parseFederationWitnessFromState() {\n var raw = String(this.state.federationWitnessJson || \'\').trim();\n if (!raw) return {\n ok: true,\n witness: null\n };\n try {\n return {\n ok: true,\n witness: JSON.parse(raw)\n };\n } catch (_) {\n return {\n ok: false,\n error: \'federation witness JSON\'\n };\n }\n }\n\n /**\n * Admin token + optional witness for every `submitSidechainStatePatch` call on this page.\n * @returns {{ ok: true, adminToken?: string, federationWitness?: object } | { ok: false, error: string }}\n */\n }, {\n key: "_sidechainPatchAuth",\n value: function _sidechainPatchAuth() {\n var adminToken = this._adminToken();\n var fw = this._parseFederationWitnessFromState();\n if (!fw.ok) return {\n ok: false,\n error: "Invalid ".concat(fw.error)\n };\n return {\n ok: true,\n adminToken: adminToken || undefined,\n federationWitness: fw.witness || undefined\n };\n }\n }, {\n key: "_submitRawPatch",\n value: function () {\n var _submitRawPatch2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var patches, basisClock, auth, out, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n _context2.p = 0;\n patches = JSON.parse(this.state.patchJson);\n _context2.n = 2;\n break;\n case 1:\n _context2.p = 1;\n _t2 = _context2.v;\n toast.error(\'Invalid JSON in patches\');\n return _context2.a(2);\n case 2:\n if (!(!Array.isArray(patches) || !patches.length)) {\n _context2.n = 3;\n break;\n }\n toast.error(\'patches must be a non-empty array\');\n return _context2.a(2);\n case 3:\n basisClock = this.state.sidechain && Number.isFinite(Number(this.state.sidechain.clock)) ? Number(this.state.sidechain.clock) : NaN;\n if (Number.isFinite(basisClock)) {\n _context2.n = 4;\n break;\n }\n toast.error(\'Load sidechain state first\');\n return _context2.a(2);\n case 4:\n auth = this._sidechainPatchAuth();\n if (auth.ok) {\n _context2.n = 5;\n break;\n }\n toast.error(auth.error);\n return _context2.a(2);\n case 5:\n _context2.n = 6;\n return submitSidechainStatePatch({\n patches: patches,\n basisClock: basisClock,\n adminToken: auth.adminToken,\n federationWitness: auth.federationWitness\n });\n case 6:\n out = _context2.v;\n if (out.ok) {\n _context2.n = 7;\n break;\n }\n toast.error(out.error || \'Patch failed\');\n return _context2.a(2);\n case 7:\n this.setState({\n lastPatchResult: out.result\n });\n toast.success(\'Sidechain patch applied\');\n _context2.n = 8;\n return this.refresh();\n case 8:\n return _context2.a(2);\n }\n }, _callee2, this, [[0, 1]]);\n }));\n function _submitRawPatch() {\n return _submitRawPatch2.apply(this, arguments);\n }\n return _submitRawPatch;\n }()\n }, {\n key: "_submitDocumentOfferDemo",\n value: function () {\n var _submitDocumentOfferDemo2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var auth, documentId, rewardSats, initiatorFabricId, offerId, record, patches, basisClock, out, br, env, line;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n auth = this._sidechainPatchAuth();\n if (auth.ok) {\n _context3.n = 1;\n break;\n }\n toast.error(auth.error);\n return _context3.a(2);\n case 1:\n documentId = String(this.state.offerDocumentId || \'\').trim();\n rewardSats = Math.max(0, Math.floor(Number(this.state.offerRewardSats) || 0));\n initiatorFabricId = this._getInitiatorId();\n if (documentId) {\n _context3.n = 2;\n break;\n }\n toast.error(\'Document id required\');\n return _context3.a(2);\n case 2:\n if (initiatorFabricId) {\n _context3.n = 3;\n break;\n }\n toast.error("".concat(fabricIdentityNeedFullKeyPlain(this.props.identity || {}), " ") + \'An initiator Fabric id is required for this demo (connect to the hub if your id is still unknown).\');\n return _context3.a(2);\n case 3:\n if (this.state.sidechain) {\n _context3.n = 4;\n break;\n }\n toast.error(\'Load sidechain state first\');\n return _context3.a(2);\n case 4:\n offerId = newOfferId();\n record = createOfferRecord({\n offerId: offerId,\n documentId: documentId,\n rewardSats: rewardSats,\n initiatorFabricId: initiatorFabricId,\n memo: this.state.offerMemo\n });\n patches = patchesForNewOffer(this.state.sidechain && this.state.sidechain.content || {}, offerId, record);\n basisClock = Number(this.state.sidechain.clock);\n _context3.n = 5;\n return submitSidechainStatePatch({\n patches: patches,\n basisClock: basisClock,\n adminToken: auth.adminToken,\n federationWitness: auth.federationWitness\n });\n case 5:\n out = _context3.v;\n if (out.ok) {\n _context3.n = 6;\n break;\n }\n toast.error(out.error || \'Offer patch failed\');\n return _context3.a(2);\n case 6:\n toast.success("Document offer ".concat(offerId, " recorded on sidechain"));\n br = this.props.bridgeRef && this.props.bridgeRef.current;\n if (this.state.offerAnnounceChat && br && typeof br.submitChatMessage === \'function\') {\n env = buildDocumentOfferEnvelope({\n id: initiatorFabricId\n }, {\n offerId: offerId,\n documentId: documentId,\n rewardSats: rewardSats,\n phase: record.phase,\n kind: DOCUMENT_OFFER\n });\n line = "[".concat(DOCUMENT_OFFER, "] ").concat(JSON.stringify(env));\n br.submitChatMessage(line);\n toast.info(\'Posted offer marker to activity chat (multi-hop / WebRTC demo signal)\');\n }\n this.setState({\n lastPatchResult: out.result\n });\n _context3.n = 7;\n return this.refresh();\n case 7:\n return _context3.a(2);\n }\n }, _callee3, this);\n }));\n function _submitDocumentOfferDemo() {\n return _submitDocumentOfferDemo2.apply(this, arguments);\n }\n return _submitDocumentOfferDemo;\n }()\n }, {\n key: "_advanceOfferPhase",\n value: function () {\n var _advanceOfferPhase2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(phase) {\n var auth, id, offers, next, patches, basisClock, out;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n auth = this._sidechainPatchAuth();\n if (auth.ok) {\n _context4.n = 1;\n break;\n }\n toast.error(auth.error);\n return _context4.a(2);\n case 1:\n id = String(this.state.l1OfferId || \'\').trim();\n if (id) {\n _context4.n = 2;\n break;\n }\n toast.error(\'Set Offer id first\');\n return _context4.a(2);\n case 2:\n if (!(!id || !this.state.sidechain || !this.state.sidechain.content)) {\n _context4.n = 3;\n break;\n }\n return _context4.a(2);\n case 3:\n offers = this.state.sidechain.content.documentOffers;\n if (!(!offers || !offers[id])) {\n _context4.n = 4;\n break;\n }\n toast.error(\'Unknown offer id\');\n return _context4.a(2);\n case 4:\n next = _objectSpread(_objectSpread({}, offers[id]), {}, {\n phase: phase\n });\n patches = patchReplaceOffer(id, next);\n basisClock = Number(this.state.sidechain.clock);\n _context4.n = 5;\n return submitSidechainStatePatch({\n patches: patches,\n basisClock: basisClock,\n adminToken: auth.adminToken,\n federationWitness: auth.federationWitness\n });\n case 5:\n out = _context4.v;\n if (out.ok) {\n _context4.n = 6;\n break;\n }\n toast.error(out.error || \'Update failed\');\n return _context4.a(2);\n case 6:\n toast.success("Offer ".concat(id, " \\u2192 ").concat(phase));\n _context4.n = 7;\n return this.refresh();\n case 7:\n return _context4.a(2);\n }\n }, _callee4, this);\n }));\n function _advanceOfferPhase(_x) {\n return _advanceOfferPhase2.apply(this, arguments);\n }\n return _advanceOfferPhase;\n }()\n }, {\n key: "_adminToken",\n value: function _adminToken() {\n return readHubAdminTokenFromBrowser(this.props.adminToken) || \'\';\n }\n }, {\n key: "_genEscrowPreimage",\n value: function _genEscrowPreimage() {\n if (typeof window === \'undefined\' || !window.crypto || !window.crypto.getRandomValues) {\n toast.error(\'WebCrypto unavailable\');\n return;\n }\n var u8 = new Uint8Array(32);\n window.crypto.getRandomValues(u8);\n var hex = Buffer.from(u8).toString(\'hex\');\n var ph = paymentHashHexFromPreimageHex(hex);\n this.setState({\n escrowPreimageHex: hex,\n escrowPaymentHashHex: ph\n });\n toast.success(\'New 32-byte preimage (keep secret until delivery)\');\n }\n }, {\n key: "_syncRefundLockFromTip",\n value: function () {\n var _syncRefundLockFromTip2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var tip, delta;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n _context5.n = 1;\n return getBitcoinTipHeight();\n case 1:\n tip = _context5.v;\n if (tip.ok) {\n _context5.n = 2;\n break;\n }\n toast.error(tip.error || \'Could not read chain tip\');\n return _context5.a(2);\n case 2:\n delta = Math.max(1, Math.floor(Number(this.state.escrowRefundDelta) || 144));\n this.setState({\n escrowRefundLockHeight: String(tip.height + delta)\n });\n toast.info("refundLockHeight = tip (".concat(tip.height, ") + ").concat(delta));\n case 3:\n return _context5.a(2);\n }\n }, _callee5, this);\n }));\n function _syncRefundLockFromTip() {\n return _syncRefundLockFromTip2.apply(this, arguments);\n }\n return _syncRefundLockFromTip;\n }()\n }, {\n key: "_buildEscrowAddress",\n value: function () {\n var _buildEscrowAddress2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {\n var paymentHashHex, delivererPubkeyHex, initiatorRefundPubkeyHex, refundLockHeight, rewardSats, out;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.n) {\n case 0:\n paymentHashHex = String(this.state.escrowPaymentHashHex || \'\').trim().toLowerCase();\n delivererPubkeyHex = String(this.state.escrowDelivererPubkey || \'\').trim().replace(/\\s+/g, \'\');\n initiatorRefundPubkeyHex = String(this.state.escrowInitiatorRefundPubkey || \'\').trim().replace(/\\s+/g, \'\');\n refundLockHeight = Math.floor(Number(this.state.escrowRefundLockHeight) || 0);\n if (!(!paymentHashHex || paymentHashHex.length !== 64)) {\n _context6.n = 1;\n break;\n }\n toast.error(\'Generate preimage first (payment hash must be 64 hex chars)\');\n return _context6.a(2);\n case 1:\n if (!(!delivererPubkeyHex || delivererPubkeyHex.length !== 66)) {\n _context6.n = 2;\n break;\n }\n toast.error(\'Deliverer pubkey: 33-byte compressed secp256k1 hex (66 chars)\');\n return _context6.a(2);\n case 2:\n if (!(!initiatorRefundPubkeyHex || initiatorRefundPubkeyHex.length !== 66)) {\n _context6.n = 3;\n break;\n }\n toast.error(\'Initiator refund pubkey: 66 hex chars (compressed)\');\n return _context6.a(2);\n case 3:\n if (!(!Number.isFinite(refundLockHeight) || refundLockHeight < 1)) {\n _context6.n = 4;\n break;\n }\n toast.error(\'Set refundLockHeight (absolute block height for CLTV refund)\');\n return _context6.a(2);\n case 4:\n rewardSats = Math.max(0, Math.floor(Number(this.state.offerRewardSats) || 0));\n _context6.n = 5;\n return buildDocumentOfferEscrow({\n paymentHashHex: paymentHashHex,\n delivererPubkeyHex: delivererPubkeyHex,\n initiatorRefundPubkeyHex: initiatorRefundPubkeyHex,\n refundLockHeight: refundLockHeight,\n rewardSats: rewardSats,\n label: "offer-".concat((this.state.l1OfferId || newOfferId()).slice(0, 12))\n });\n case 5:\n out = _context6.v;\n if (!(!out.ok || !out.result || out.result.status !== \'success\')) {\n _context6.n = 6;\n break;\n }\n toast.error(out.error || out.result && out.result.message || \'Build escrow failed\');\n return _context6.a(2);\n case 6:\n this.setState({\n escrowBuildResult: out.result\n });\n toast.success(\'Escrow address derived (fund this output ≥ reward sats)\');\n case 7:\n return _context6.a(2);\n }\n }, _callee6, this);\n }));\n function _buildEscrowAddress() {\n return _buildEscrowAddress2.apply(this, arguments);\n }\n return _buildEscrowAddress;\n }()\n }, {\n key: "_recordL1OfferOnSidechain",\n value: function () {\n var _recordL1OfferOnSidechain2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {\n var auth, br, documentId, rewardSats, initiatorFabricId, offerId, record, patches, basisClock, out, brInst, env;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.n) {\n case 0:\n auth = this._sidechainPatchAuth();\n if (auth.ok) {\n _context7.n = 1;\n break;\n }\n toast.error(auth.error);\n return _context7.a(2);\n case 1:\n br = this.state.escrowBuildResult;\n if (!(!br || !br.paymentAddress)) {\n _context7.n = 2;\n break;\n }\n toast.error(\'Build escrow address first\');\n return _context7.a(2);\n case 2:\n documentId = String(this.state.offerDocumentId || \'\').trim();\n rewardSats = Math.max(0, Math.floor(Number(this.state.offerRewardSats) || 0));\n initiatorFabricId = this._getInitiatorId();\n if (!(!documentId || !initiatorFabricId)) {\n _context7.n = 3;\n break;\n }\n toast.error(\'Document id and unlocked identity required\');\n return _context7.a(2);\n case 3:\n if (this.state.sidechain) {\n _context7.n = 4;\n break;\n }\n toast.error(\'Load sidechain state first\');\n return _context7.a(2);\n case 4:\n offerId = String(this.state.l1OfferId || \'\').trim() || newOfferId();\n record = createOfferRecord({\n offerId: offerId,\n documentId: documentId,\n rewardSats: rewardSats,\n initiatorFabricId: initiatorFabricId,\n memo: this.state.offerMemo,\n phase: \'funding_pending\',\n paymentAddress: br.paymentAddress,\n paymentHashHex: br.paymentHashHex,\n claimScriptHex: br.claimScriptHex,\n refundScriptHex: br.refundScriptHex,\n delivererEscrowPubkeyHex: String(this.state.escrowDelivererPubkey || \'\').trim().replace(/\\s+/g, \'\'),\n initiatorRefundPubkeyHex: String(this.state.escrowInitiatorRefundPubkey || \'\').trim().replace(/\\s+/g, \'\'),\n refundLockHeight: Math.floor(Number(this.state.escrowRefundLockHeight) || 0)\n });\n patches = patchesForNewOffer(this.state.sidechain && this.state.sidechain.content || {}, offerId, record);\n basisClock = Number(this.state.sidechain.clock);\n _context7.n = 5;\n return submitSidechainStatePatch({\n patches: patches,\n basisClock: basisClock,\n adminToken: auth.adminToken,\n federationWitness: auth.federationWitness\n });\n case 5:\n out = _context7.v;\n if (out.ok) {\n _context7.n = 6;\n break;\n }\n toast.error(out.error || \'Patch failed\');\n return _context7.a(2);\n case 6:\n this.setState({\n l1OfferId: offerId,\n lastPatchResult: out.result\n });\n toast.success("Offer ".concat(offerId, " on sidechain \\u2014 fund ").concat(br.paymentAddress));\n if (this.state.offerAnnounceChat && this.props.bridgeRef && this.props.bridgeRef.current) {\n brInst = this.props.bridgeRef.current;\n if (typeof brInst.submitChatMessage === \'function\') {\n env = buildDocumentOfferEnvelope({\n id: initiatorFabricId\n }, {\n offerId: offerId,\n documentId: documentId,\n rewardSats: rewardSats,\n phase: \'funding_pending\',\n paymentAddress: br.paymentAddress,\n kind: DOCUMENT_OFFER\n });\n brInst.submitChatMessage("[".concat(DOCUMENT_OFFER, "] ").concat(JSON.stringify(env)));\n }\n }\n _context7.n = 7;\n return this.refresh();\n case 7:\n return _context7.a(2);\n }\n }, _callee7, this);\n }));\n function _recordL1OfferOnSidechain() {\n return _recordL1OfferOnSidechain2.apply(this, arguments);\n }\n return _recordL1OfferOnSidechain;\n }()\n }, {\n key: "_verifyL1FundingAndPatch",\n value: function () {\n var _verifyL1FundingAndPatch2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {\n var auth, offerId, txid, offers, rec, rewardSats, v, next, patches, out;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.n) {\n case 0:\n auth = this._sidechainPatchAuth();\n if (auth.ok) {\n _context8.n = 1;\n break;\n }\n toast.error(auth.error);\n return _context8.a(2);\n case 1:\n offerId = String(this.state.l1OfferId || \'\').trim();\n txid = String(this.state.l1FundingTxid || \'\').trim().toLowerCase();\n if (!(!offerId || !txid)) {\n _context8.n = 2;\n break;\n }\n toast.error(\'Set l1OfferId and funding txid\');\n return _context8.a(2);\n case 2:\n if (!(!this.state.sidechain || !this.state.sidechain.content || !this.state.sidechain.content.documentOffers)) {\n _context8.n = 3;\n break;\n }\n toast.error(\'Load sidechain; offer must exist\');\n return _context8.a(2);\n case 3:\n offers = this.state.sidechain.content.documentOffers;\n rec = offers[offerId];\n if (!(!rec || !rec.paymentAddress)) {\n _context8.n = 4;\n break;\n }\n toast.error(\'Unknown offer or missing paymentAddress on record\');\n return _context8.a(2);\n case 4:\n rewardSats = Math.max(0, Math.floor(Number(rec.rewardSats) || 0));\n _context8.n = 5;\n return verifyDocumentOfferFunding({\n fundingTxid: txid,\n paymentAddress: rec.paymentAddress,\n rewardSats: rewardSats\n });\n case 5:\n v = _context8.v;\n if (!(!v.ok || !v.result || v.result.status !== \'success\' || !v.result.verified)) {\n _context8.n = 6;\n break;\n }\n toast.error(v.error || v.result && v.result.message || \'Funding not verified\');\n return _context8.a(2);\n case 6:\n next = _objectSpread(_objectSpread({}, rec), {}, {\n phase: \'funded\',\n fundingTxid: txid,\n fundingVout: v.result.fundingVout != null ? v.result.fundingVout : rec.fundingVout\n });\n patches = patchReplaceOffer(offerId, next);\n _context8.n = 7;\n return submitSidechainStatePatch({\n patches: patches,\n basisClock: Number(this.state.sidechain.clock),\n adminToken: auth.adminToken,\n federationWitness: auth.federationWitness\n });\n case 7:\n out = _context8.v;\n if (out.ok) {\n _context8.n = 8;\n break;\n }\n toast.error(out.error || \'Patch failed\');\n return _context8.a(2);\n case 8:\n toast.success(\'Offer marked funded on sidechain\');\n _context8.n = 9;\n return this.refresh();\n case 9:\n return _context8.a(2);\n }\n }, _callee8, this);\n }));\n function _verifyL1FundingAndPatch() {\n return _verifyL1FundingAndPatch2.apply(this, arguments);\n }\n return _verifyL1FundingAndPatch;\n }()\n }, {\n key: "_revealPreimageDelivered",\n value: function () {\n var _revealPreimageDelivered2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {\n var auth, offerId, preimage, rec, want, got, next, patches, out;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.n) {\n case 0:\n auth = this._sidechainPatchAuth();\n if (auth.ok) {\n _context9.n = 1;\n break;\n }\n toast.error(auth.error);\n return _context9.a(2);\n case 1:\n offerId = String(this.state.l1OfferId || \'\').trim();\n preimage = String(this.state.escrowPreimageHex || \'\').trim().toLowerCase();\n if (!(!offerId || !/^[0-9a-f]{64}$/.test(preimage))) {\n _context9.n = 2;\n break;\n }\n toast.error(\'Offer id and local escrow preimage (64 hex) required\');\n return _context9.a(2);\n case 2:\n if (!(!this.state.sidechain || !this.state.sidechain.content || !this.state.sidechain.content.documentOffers)) {\n _context9.n = 3;\n break;\n }\n toast.error(\'Load sidechain\');\n return _context9.a(2);\n case 3:\n rec = this.state.sidechain.content.documentOffers[offerId];\n if (rec) {\n _context9.n = 4;\n break;\n }\n toast.error(\'Unknown offer\');\n return _context9.a(2);\n case 4:\n want = String(rec.paymentHashHex || \'\').toLowerCase();\n got = paymentHashHexFromPreimageHex(preimage);\n if (!(want && got !== want)) {\n _context9.n = 5;\n break;\n }\n toast.error(\'Preimage does not match offer paymentHashHex\');\n return _context9.a(2);\n case 5:\n next = _objectSpread(_objectSpread({}, rec), {}, {\n phase: \'delivered\',\n revealedPreimageHex: preimage\n });\n patches = patchReplaceOffer(offerId, next);\n _context9.n = 6;\n return submitSidechainStatePatch({\n patches: patches,\n basisClock: Number(this.state.sidechain.clock),\n adminToken: auth.adminToken,\n federationWitness: auth.federationWitness\n });\n case 6:\n out = _context9.v;\n if (out.ok) {\n _context9.n = 7;\n break;\n }\n toast.error(out.error || \'Patch failed\');\n return _context9.a(2);\n case 7:\n toast.success(\'Preimage on sidechain — deliverer can build claim tx\');\n _context9.n = 8;\n return this.refresh();\n case 8:\n return _context9.a(2);\n }\n }, _callee9, this);\n }));\n function _revealPreimageDelivered() {\n return _revealPreimageDelivered2.apply(this, arguments);\n }\n return _revealPreimageDelivered;\n }()\n }, {\n key: "_prepareDelivererClaim",\n value: function () {\n var _prepareDelivererClaim2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0() {\n var offerId, rec, dest, feeSats, prep;\n return _regenerator().w(function (_context0) {\n while (1) switch (_context0.n) {\n case 0:\n offerId = String(this.state.l1OfferId || \'\').trim();\n if (!(!this.state.sidechain || !this.state.sidechain.content || !this.state.sidechain.content.documentOffers)) {\n _context0.n = 1;\n break;\n }\n toast.error(\'Load sidechain\');\n return _context0.a(2);\n case 1:\n rec = this.state.sidechain.content.documentOffers[offerId];\n if (!(!rec || !rec.fundingTxid || !rec.revealedPreimageHex)) {\n _context0.n = 2;\n break;\n }\n toast.error(\'Offer needs funded + delivered (revealed preimage)\');\n return _context0.a(2);\n case 2:\n dest = String(this.state.l1ClaimDestAddress || \'\').trim();\n if (dest) {\n _context0.n = 3;\n break;\n }\n toast.error(\'Claim payout address required\');\n return _context0.a(2);\n case 3:\n feeSats = Math.max(1, Math.floor(Number(this.state.l1FeeClaimSats) || 2000));\n _context0.n = 4;\n return prepareDocumentOfferDelivererClaimPsbt({\n fundingTxid: rec.fundingTxid,\n paymentAddress: rec.paymentAddress,\n claimScriptHex: rec.claimScriptHex,\n refundScriptHex: rec.refundScriptHex,\n preimageHex: rec.revealedPreimageHex,\n destinationAddress: dest,\n feeSats: feeSats\n });\n case 4:\n prep = _context0.v;\n if (!(!prep.ok || !prep.result || prep.result.status !== \'success\')) {\n _context0.n = 5;\n break;\n }\n toast.error(prep.error || prep.result && prep.result.message || \'Prepare PSBT failed\');\n return _context0.a(2);\n case 5:\n this.setState({\n l1LastPsbtClaim: prep.result.psbtBase64\n });\n toast.success(\'Claim PSBT ready — sign with deliverer key then broadcast\');\n case 6:\n return _context0.a(2);\n }\n }, _callee0, this);\n }));\n function _prepareDelivererClaim() {\n return _prepareDelivererClaim2.apply(this, arguments);\n }\n return _prepareDelivererClaim;\n }()\n }, {\n key: "_signAndBroadcastClaim",\n value: function _signAndBroadcastClaim() {\n var psbtB64 = String(this.state.l1LastPsbtClaim || \'\').trim();\n var priv = String(this.state.l1DelivererPrivHex || \'\').trim().replace(/^0x/i, \'\');\n if (!psbtB64 || !/^[0-9a-f]{64}$/i.test(priv)) {\n toast.error(\'Prepare claim PSBT and paste deliverer secp256k1 private key (64 hex)\');\n return;\n }\n var offerId = String(this.state.l1OfferId || \'\').trim();\n var rec = this.state.sidechain && this.state.sidechain.content && this.state.sidechain.content.documentOffers ? this.state.sidechain.content.documentOffers[offerId] : null;\n var preimage = String(rec && rec.revealedPreimageHex || this.state.escrowPreimageHex || \'\').trim().toLowerCase();\n if (!/^[0-9a-f]{64}$/.test(preimage)) {\n toast.error(\'Offer must include revealedPreimageHex (refresh sidechain) or keep local preimage\');\n return;\n }\n var txHex;\n try {\n var _signDelivererClaimFr = signDelivererClaimFromPsbtBase64(psbtB64, preimage, priv);\n txHex = _signDelivererClaimFr.txHex;\n } catch (e) {\n this.setState({\n l1DelivererPrivHex: \'\'\n });\n toast.error(e && e.message ? e.message : \'Sign failed\');\n return;\n }\n this.setState({\n l1DelivererPrivHex: \'\'\n });\n this._broadcastExitTx(txHex, \'claim\');\n }\n }, {\n key: "_prepareInitiatorRefund",\n value: function () {\n var _prepareInitiatorRefund2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee1() {\n var offerId, rec, dest, feeSats, prep;\n return _regenerator().w(function (_context1) {\n while (1) switch (_context1.n) {\n case 0:\n offerId = String(this.state.l1OfferId || \'\').trim();\n if (!(!this.state.sidechain || !this.state.sidechain.content || !this.state.sidechain.content.documentOffers)) {\n _context1.n = 1;\n break;\n }\n toast.error(\'Load sidechain\');\n return _context1.a(2);\n case 1:\n rec = this.state.sidechain.content.documentOffers[offerId];\n if (!(!rec || !rec.fundingTxid || !rec.refundLockHeight)) {\n _context1.n = 2;\n break;\n }\n toast.error(\'Offer missing funding or refundLockHeight\');\n return _context1.a(2);\n case 2:\n dest = String(this.state.l1RefundDestAddress || \'\').trim();\n if (dest) {\n _context1.n = 3;\n break;\n }\n toast.error(\'Refund payout address required\');\n return _context1.a(2);\n case 3:\n feeSats = Math.max(1, Math.floor(Number(this.state.l1FeeRefundSats) || 2000));\n _context1.n = 4;\n return prepareDocumentOfferInitiatorRefundPsbt({\n fundingTxid: rec.fundingTxid,\n paymentAddress: rec.paymentAddress,\n claimScriptHex: rec.claimScriptHex,\n refundScriptHex: rec.refundScriptHex,\n refundLockHeight: rec.refundLockHeight,\n destinationAddress: dest,\n feeSats: feeSats\n });\n case 4:\n prep = _context1.v;\n if (!(!prep.ok || !prep.result || prep.result.status !== \'success\')) {\n _context1.n = 5;\n break;\n }\n toast.error(prep.error || prep.result && prep.result.message || \'Prepare refund PSBT failed\');\n return _context1.a(2);\n case 5:\n if (prep.result.refundValidOnChain === false) {\n toast.warning(\'Chain tip below refundLockHeight — tx may not relay yet\');\n }\n this.setState({\n l1LastPsbtRefund: prep.result.psbtBase64\n });\n toast.success(\'Refund PSBT ready — sign with initiator refund key\');\n case 6:\n return _context1.a(2);\n }\n }, _callee1, this);\n }));\n function _prepareInitiatorRefund() {\n return _prepareInitiatorRefund2.apply(this, arguments);\n }\n return _prepareInitiatorRefund;\n }()\n }, {\n key: "_signAndBroadcastRefund",\n value: function _signAndBroadcastRefund() {\n var psbtB64 = String(this.state.l1LastPsbtRefund || \'\').trim();\n var priv = String(this.state.l1InitiatorPrivHex || \'\').trim().replace(/^0x/i, \'\');\n if (!psbtB64 || !/^[0-9a-f]{64}$/i.test(priv)) {\n toast.error(\'Prepare refund PSBT and paste initiator refund private key (64 hex)\');\n return;\n }\n var txHex;\n try {\n var _signInitiatorRefundF = signInitiatorRefundFromPsbtBase64(psbtB64, priv);\n txHex = _signInitiatorRefundF.txHex;\n } catch (e) {\n this.setState({\n l1InitiatorPrivHex: \'\'\n });\n toast.error(e && e.message ? e.message : \'Sign failed\');\n return;\n }\n this.setState({\n l1InitiatorPrivHex: \'\'\n });\n this._broadcastExitTx(txHex, \'refund\');\n }\n }, {\n key: "_broadcastExitTx",\n value: function () {\n var _broadcastExitTx2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee10(txHex, exitKind) {\n var auth, b, txid, offerId, rec, next, patches, out;\n return _regenerator().w(function (_context10) {\n while (1) switch (_context10.n) {\n case 0:\n auth = this._sidechainPatchAuth();\n if (auth.ok) {\n _context10.n = 1;\n break;\n }\n toast.error(auth.error);\n return _context10.a(2);\n case 1:\n _context10.n = 2;\n return broadcastSignedTransaction({\n signedTxHex: txHex,\n adminToken: auth.adminToken\n });\n case 2:\n b = _context10.v;\n if (!(!b.ok || !b.result || b.result.status !== \'success\')) {\n _context10.n = 3;\n break;\n }\n toast.error(b.error || b.result && b.result.message || \'Broadcast failed\');\n return _context10.a(2);\n case 3:\n txid = b.result.txid;\n this.setState({\n l1LastSignedTxHex: txHex\n });\n toast.success("Broadcast ".concat(exitKind, ": ").concat(txid));\n offerId = String(this.state.l1OfferId || \'\').trim();\n if (!(offerId && this.state.sidechain && this.state.sidechain.content && this.state.sidechain.content.documentOffers)) {\n _context10.n = 5;\n break;\n }\n rec = this.state.sidechain.content.documentOffers[offerId];\n if (!rec) {\n _context10.n = 5;\n break;\n }\n next = _objectSpread(_objectSpread({}, rec), {}, {\n phase: \'settled\',\n exitTxid: txid,\n exitKind: exitKind\n });\n patches = patchReplaceOffer(offerId, next);\n _context10.n = 4;\n return submitSidechainStatePatch({\n patches: patches,\n basisClock: Number(this.state.sidechain.clock),\n adminToken: auth.adminToken,\n federationWitness: auth.federationWitness\n });\n case 4:\n out = _context10.v;\n if (!out.ok) {\n _context10.n = 5;\n break;\n }\n _context10.n = 5;\n return this.refresh();\n case 5:\n return _context10.a(2);\n }\n }, _callee10, this);\n }));\n function _broadcastExitTx(_x2, _x3) {\n return _broadcastExitTx2.apply(this, arguments);\n }\n return _broadcastExitTx;\n }()\n }, {\n key: "render",\n value: function render() {\n var _this3 = this;\n var _this$state2 = this.state,\n loading = _this$state2.loading,\n sidechain = _this$state2.sidechain,\n epoch = _this$state2.epoch,\n epochError = _this$state2.epochError,\n patchJson = _this$state2.patchJson,\n basisClockNote = _this$state2.basisClockNote,\n lastPatchResult = _this$state2.lastPatchResult,\n inboundOffer = _this$state2.inboundOffer,\n journal = _this$state2.journal,\n snapshots = _this$state2.snapshots,\n showContentJson = _this$state2.showContentJson;\n void this.state.hubUiFlagsRev;\n var hubUi = loadHubUiFeatureFlags();\n var hint = this._sealedDigestHint();\n var beacon = epoch && epoch.beacon;\n var lastPayload = beacon && beacon.last && beacon.last.payload;\n var policy = this._effectivePolicy();\n var journalEntries = journal && Array.isArray(journal.entries) ? journal.entries : [];\n var snapshotRows = snapshots && Array.isArray(snapshots.snapshots) ? snapshots.snapshots : [];\n return /*#__PURE__*/React.createElement(Segment.Group, null, /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h2"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "chain"\n }), "Sidechain (shared state)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n maxWidth: \'52em\'\n }\n }, "Shared JSON at ", /*#__PURE__*/React.createElement("code", null, "sidechain/STATE"), ", patched under optional contract path policy, sealed into Beacon epochs, recoverable via ", /*#__PURE__*/React.createElement("code", null, "SNAPSHOTS"), " + ", /*#__PURE__*/React.createElement("code", null, "JOURNAL"), ". Use the same Hub origin for LAN nodes (e.g. ", /*#__PURE__*/React.createElement("code", null, "http://192.168.50.5:8080"), ").", \' \', /*#__PURE__*/React.createElement(Link, {\n to: "/contracts"\n }, "Execution contracts"), \' · \', /*#__PURE__*/React.createElement(Link, {\n to: "/federations"\n }, "Federations"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/manifest",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "manifest"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/sidechain",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "HTTP state"), \' · \', /*#__PURE__*/React.createElement("a", {\n href: "/services/distributed/sidechain/journal",\n target: "_blank",\n rel: "noopener noreferrer"\n }, "journal")), /*#__PURE__*/React.createElement("div", {\n role: "toolbar",\n "aria-label": "Hub shortcuts",\n style: {\n display: \'flex\',\n flexWrap: \'wrap\',\n gap: \'0.35em\',\n alignItems: \'center\',\n marginBottom: \'0.65em\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/",\n basic: true,\n size: "small",\n icon: true,\n labelPosition: "left",\n "aria-label": "Back to home"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "arrow left",\n "aria-hidden": "true"\n }), "Home"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/contracts",\n basic: true,\n size: "small",\n title: "Execution contracts and L1 registry"\n }, "Contracts"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/federations",\n basic: true,\n size: "small",\n icon: "users",\n title: "Multi-sig federation policy (k-of-n)"\n }, "Federations"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin",\n basic: true,\n size: "small",\n title: "Bitcoin status, regtest, Lightning"\n }, "Bitcoin"), hubUi.bitcoinPayments ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/payments",\n basic: true,\n size: "small",\n title: "Payjoin and payments"\n }, "Payments") : null, hubUi.bitcoinResources ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/resources",\n basic: true,\n size: "small",\n title: "HTTP resources and L1 verify"\n }, "Resources") : null, hubUi.bitcoinCrowdfund ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/services/bitcoin/crowdfunds",\n basic: true,\n size: "small",\n title: "Taproot crowdfund vault"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "heart"\n }), "Crowdfunds") : null), /*#__PURE__*/React.createElement(Button, {\n primary: true,\n icon: true,\n loading: loading,\n onClick: function onClick() {\n return _this3.refresh();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "refresh"\n }), "Refresh"), epochError && /*#__PURE__*/React.createElement(Message, {\n warning: true,\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Fetch warning"), /*#__PURE__*/React.createElement("p", null, epochError)), /*#__PURE__*/React.createElement(DistributedFederationPanel, {\n hideSidechainNavLink: true,\n style: {\n marginTop: \'1em\'\n }\n })), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Head status"), /*#__PURE__*/React.createElement(Statistic.Group, {\n size: "tiny",\n style: {\n marginBottom: \'0.75em\'\n }\n }, /*#__PURE__*/React.createElement(Statistic, null, /*#__PURE__*/React.createElement(Statistic.Value, null, sidechain && sidechain.clock != null ? String(sidechain.clock) : \'—\'), /*#__PURE__*/React.createElement(Statistic.Label, null, "Logical clock")), /*#__PURE__*/React.createElement(Statistic, null, /*#__PURE__*/React.createElement(Statistic.Value, null, journal && journal.unsealedCount != null ? String(journal.unsealedCount) : \'—\'), /*#__PURE__*/React.createElement(Statistic.Label, null, "Unsealed journal")), /*#__PURE__*/React.createElement(Statistic, null, /*#__PURE__*/React.createElement(Statistic.Value, null, snapshots && snapshots.snapshotCount != null ? String(snapshots.snapshotCount) : \'—\'), /*#__PURE__*/React.createElement(Statistic.Label, null, "Sealed snapshots")), /*#__PURE__*/React.createElement(Statistic, null, /*#__PURE__*/React.createElement(Statistic.Value, null, beacon && beacon.epochCount != null ? String(beacon.epochCount) : \'—\'), /*#__PURE__*/React.createElement(Statistic.Label, null, "Beacon epochs"))), /*#__PURE__*/React.createElement(Label, {\n color: hint.color,\n style: {\n marginBottom: \'0.5em\'\n }\n }, hint.text), sidechain && sidechain.stateDigest ? /*#__PURE__*/React.createElement("p", {\n style: {\n fontFamily: \'monospace\',\n fontSize: \'12px\',\n color: \'#444\',\n wordBreak: \'break-all\'\n }\n }, "stateDigest: ", sidechain.stateDigest) : null, basisClockNote && /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\'\n }\n }, basisClockNote)), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Contract path policy"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n maxWidth: \'48em\'\n }\n }, "From hub settings / env (", /*#__PURE__*/React.createElement("code", null, "sidechainPolicy"), " on the distributed manifest). Empty means any RFC6902 path under ", /*#__PURE__*/React.createElement("code", null, "content"), " is allowed (still requires admin or federation auth)."), policy ? /*#__PURE__*/React.createElement("pre", {\n style: {\n fontSize: \'12px\',\n overflow: \'auto\'\n }\n }, safeJson(policy)) : /*#__PURE__*/React.createElement(Message, {\n info: true\n }, "No path policy configured \\u2014 patches are auth-gated only.")), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Beacon / distributed epoch"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginBottom: \'0.75em\',\n maxWidth: \'48em\'\n }\n }, "Hub summary (not the full sealed message). Compare any L1 height/hash in the live epoch payload to your node; re-verify Schnorr witness bytes against the manifest pubkeys (see the Federation guarantees panel above)."), beacon ? /*#__PURE__*/React.createElement("pre", {\n style: {\n fontSize: \'12px\',\n overflow: \'auto\'\n }\n }, safeJson({\n status: beacon.status,\n clock: beacon.clock,\n merkleRoot: beacon.merkleRoot,\n epochCount: beacon.epochCount,\n lastCommitmentDigest: beacon.lastCommitmentDigest,\n lastL1Binding: lastPayload ? {\n beaconClock: lastPayload.clock,\n height: lastPayload.height,\n blockHash: lastPayload.blockHash\n } : null,\n lastSidechain: lastPayload && lastPayload.sidechain\n })) : /*#__PURE__*/React.createElement(Message, {\n info: true\n }, "No epoch data yet.")), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Sealed snapshots"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, "Full state copies keyed by Beacon ", /*#__PURE__*/React.createElement("code", null, "payload.clock"), " (reorg rewind). Digests only below."), snapshotRows.length ? /*#__PURE__*/React.createElement(Table, {\n celled: true,\n compact: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Beacon clock"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "Sidechain clock"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "stateDigest"))), /*#__PURE__*/React.createElement(Table.Body, null, snapshotRows.map(function (row) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "snap-".concat(row.beaconClock)\n }, /*#__PURE__*/React.createElement(Table.Cell, null, row.beaconClock), /*#__PURE__*/React.createElement(Table.Cell, null, row.sidechainClock), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n fontFamily: \'monospace\',\n fontSize: \'11px\'\n }\n }, _this3._shortDigest(row.stateDigest, 12)));\n }))) : /*#__PURE__*/React.createElement(Message, {\n info: true\n }, "No snapshots yet \\u2014 wait for a Beacon epoch after state exists.")), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Patch journal"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\'\n }\n }, "Append-only transitions. ", /*#__PURE__*/React.createElement("code", null, "sealedBeaconClock"), " is set when an epoch seals that sidechain clock; null means unsealed (replayed on restore).", journal ? " Showing ".concat(journalEntries.length, " of ").concat(journal.entryCount, ".") : \'\'), journalEntries.length ? /*#__PURE__*/React.createElement(Table, {\n celled: true,\n compact: true,\n size: "small"\n }, /*#__PURE__*/React.createElement(Table.Header, null, /*#__PURE__*/React.createElement(Table.Row, null, /*#__PURE__*/React.createElement(Table.HeaderCell, null, "seq"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "clock"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "sealed"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "ops"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "paths"), /*#__PURE__*/React.createElement(Table.HeaderCell, null, "patchDigest"))), /*#__PURE__*/React.createElement(Table.Body, null, journalEntries.map(function (row) {\n return /*#__PURE__*/React.createElement(Table.Row, {\n key: "j-".concat(row.seq),\n warning: row.sealedBeaconClock == null\n }, /*#__PURE__*/React.createElement(Table.Cell, null, row.seq), /*#__PURE__*/React.createElement(Table.Cell, null, row.basisClock, "\\u2192", row.clock), /*#__PURE__*/React.createElement(Table.Cell, null, row.sealedBeaconClock == null ? /*#__PURE__*/React.createElement(Label, {\n size: "mini",\n color: "orange"\n }, "unsealed") : row.sealedBeaconClock), /*#__PURE__*/React.createElement(Table.Cell, null, row.opCount), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n fontFamily: \'monospace\',\n fontSize: \'11px\'\n }\n }, (row.paths || []).join(\', \') || \'—\'), /*#__PURE__*/React.createElement(Table.Cell, {\n style: {\n fontFamily: \'monospace\',\n fontSize: \'11px\'\n }\n }, _this3._shortDigest(row.patchDigest, 8)));\n }))) : /*#__PURE__*/React.createElement(Message, {\n info: true\n }, "Journal empty \\u2014 apply a patch to create the first entry.")), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Live sidechain state"), /*#__PURE__*/React.createElement(Label, {\n color: hint.color,\n style: {\n marginBottom: \'0.75em\'\n }\n }, hint.text), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n style: {\n marginBottom: \'0.75em\'\n },\n onClick: function onClick() {\n return _this3.setState({\n showContentJson: !showContentJson\n });\n }\n }, showContentJson ? \'Hide full JSON\' : \'Show full JSON\'), showContentJson ? sidechain ? /*#__PURE__*/React.createElement("pre", {\n style: {\n fontSize: \'12px\',\n overflow: \'auto\',\n maxHeight: \'22em\'\n }\n }, safeJson(sidechain)) : /*#__PURE__*/React.createElement(Message, {\n warning: true\n }, "Could not load GetSidechainState (check Hub RPC and session).") : /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "Full document hidden by default. Clock and digest are in ", /*#__PURE__*/React.createElement("strong", null, "Head status"), " above."), basisClockNote && /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\'\n }\n }, basisClockNote)), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "Submit JSON Patch (admin or federation)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\'\n }\n }, "RFC6902 ops apply to ", /*#__PURE__*/React.createElement("code", null, "content"), " only. Requires ", /*#__PURE__*/React.createElement("code", null, "basisClock"), " equal to current clock. Hub policy for admin token vs ", /*#__PURE__*/React.createElement("code", null, "federationWitness"), " (k-of-n) is summarized in ", /*#__PURE__*/React.createElement("strong", null, "Federation guarantees"), " above. Without validators configured, use your admin token from Settings; it is read from the same store as other admin flows."), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0 0 0.5em\',\n color: \'#666\',\n fontSize: \'0.9em\'\n },\n id: "fabric-sidechain-witness-intro"\n }, /*#__PURE__*/React.createElement("strong", null, "Federation witness"), " \\u2014 optional when the hub is admin-only; ", /*#__PURE__*/React.createElement("strong", null, "required"), " when validators are configured. Used for ", /*#__PURE__*/React.createElement("strong", null, "Apply patch"), " and ", /*#__PURE__*/React.createElement("strong", null, "every"), " document-offer / L1 escrow sidechain action below (same ", /*#__PURE__*/React.createElement("code", null, "SubmitSidechainStatePatch"), " verification). Example:", \' \', /*#__PURE__*/React.createElement("code", {\n style: {\n fontSize: \'11px\'\n }\n }, \'{"version":1,"signatures":{"03…":""}}\')), /*#__PURE__*/React.createElement("label", {\n htmlFor: "fabric-sidechain-federation-witness",\n style: {\n display: \'block\',\n marginBottom: \'0.35em\',\n fontWeight: 600\n }\n }, "Federation witness JSON"), /*#__PURE__*/React.createElement(TextArea, {\n id: "fabric-sidechain-federation-witness",\n rows: 5,\n value: this.state.federationWitnessJson,\n onChange: function onChange(e, _ref) {\n var value = _ref.value;\n return _this3.setState({\n federationWitnessJson: value\n });\n },\n placeholder: "{\\"version\\":1,\\"signatures\\":{}}",\n style: {\n fontFamily: \'monospace\',\n fontSize: \'12px\'\n },\n "aria-label": "Federation witness JSON for SubmitSidechainStatePatch",\n "aria-describedby": "fabric-sidechain-witness-intro"\n }), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1.25em\',\n marginBottom: \'0.5em\'\n },\n id: "fabric-sidechain-raw-patch-heading"\n }, "Raw patch (RFC6902)"), /*#__PURE__*/React.createElement(TextArea, {\n id: "fabric-sidechain-patch-json",\n rows: 12,\n value: patchJson,\n onChange: function onChange(e, _ref2) {\n var value = _ref2.value;\n return _this3.setState({\n patchJson: value\n });\n },\n style: {\n fontFamily: \'monospace\',\n fontSize: \'12px\'\n },\n "aria-label": "RFC6902 JSON Patch operations for sidechain content",\n "aria-labelledby": "fabric-sidechain-raw-patch-heading"\n }), /*#__PURE__*/React.createElement(Button, {\n style: {\n marginTop: \'0.75em\'\n },\n primary: true,\n onClick: function onClick() {\n return _this3._submitRawPatch();\n }\n }, "Apply patch")), lastPatchResult && /*#__PURE__*/React.createElement(Message, {\n success: true,\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement("pre", {\n style: {\n fontSize: \'11px\'\n }\n }, safeJson(lastPatchResult)))), /*#__PURE__*/React.createElement(Segment, null, /*#__PURE__*/React.createElement(Header, {\n as: "h3"\n }, "DOCUMENT_OFFER \\u2014 L1 escrow (Taproot HTLC)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n fontSize: \'0.9em\',\n marginBottom: \'0.75em\'\n }\n }, "Sidechain updates from this section use the same ", /*#__PURE__*/React.createElement("strong", null, "Federation witness"), " field and admin token as ", /*#__PURE__*/React.createElement("strong", null, "Submit JSON Patch"), " above."), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n maxWidth: \'52em\'\n }\n }, "Escrow matches inventory HTLC: ", /*#__PURE__*/React.createElement("strong", null, "deliverer"), " claims with preimage + Schnorr after the initiator publishes ", /*#__PURE__*/React.createElement("code", null, "revealedPreimageHex"), " on the sidechain; ", /*#__PURE__*/React.createElement("strong", null, "initiator"), " refunds after", \' \', /*#__PURE__*/React.createElement("code", null, "refundLockHeight"), " (CLTV). Single SHA-256 preimage \\u2192 ", /*#__PURE__*/React.createElement("code", null, "paymentHashHex"), " in the script. On regtest, ", /*#__PURE__*/React.createElement("code", null, "BroadcastSignedTransaction"), " does not require an admin token; other networks require admin or ", /*#__PURE__*/React.createElement("code", null, "settings.bitcoin.publicDocumentOfferBroadcast"), "."), inboundOffer && /*#__PURE__*/React.createElement(Message, {\n info: true,\n onDismiss: function onDismiss() {\n return _this3.setState({\n inboundOffer: null\n });\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Last inbound offer envelope"), /*#__PURE__*/React.createElement("pre", {\n style: {\n fontSize: \'11px\'\n }\n }, safeJson(inboundOffer))), /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "1. Offer + escrow params"), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Input, {\n label: "Document id",\n value: this.state.offerDocumentId,\n onChange: function onChange(e, _ref3) {\n var value = _ref3.value;\n return _this3.setState({\n offerDocumentId: value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Reward (sats) \\u2014 min paid to escrow output",\n value: this.state.offerRewardSats,\n onChange: function onChange(e, _ref4) {\n var value = _ref4.value;\n return _this3.setState({\n offerRewardSats: value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Memo",\n value: this.state.offerMemo,\n onChange: function onChange(e, _ref5) {\n var value = _ref5.value;\n return _this3.setState({\n offerMemo: value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Offer id (optional \\u2014 generated if empty when recording)",\n value: this.state.l1OfferId,\n onChange: function onChange(e, _ref6) {\n var value = _ref6.value;\n return _this3.setState({\n l1OfferId: value\n });\n },\n placeholder: "leave blank to auto-generate"\n }), /*#__PURE__*/React.createElement(Form.Checkbox, {\n label: "Post DOCUMENT_OFFER marker to activity chat when recording on sidechain",\n checked: this.state.offerAnnounceChat,\n onChange: function onChange(e, _ref7) {\n var checked = _ref7.checked;\n return _this3.setState({\n offerAnnounceChat: !!checked\n });\n }\n }), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n onClick: function onClick() {\n return _this3._genEscrowPreimage();\n }\n }, "Generate escrow preimage (32 bytes)"), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Escrow preimage hex (secret \\u2014 same machine until reveal step)",\n value: this.state.escrowPreimageHex,\n onChange: function onChange(e, _ref8) {\n var value = _ref8.value;\n return _this3.setState({\n escrowPreimageHex: value,\n escrowPaymentHashHex: paymentHashHexFromPreimageHex(value)\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Payment hash SHA256(preimage) \\u2014 auto from preimage",\n value: this.state.escrowPaymentHashHex,\n readOnly: true\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Deliverer compressed pubkey (66 hex) \\u2014 claim path",\n value: this.state.escrowDelivererPubkey,\n onChange: function onChange(e, _ref9) {\n var value = _ref9.value;\n return _this3.setState({\n escrowDelivererPubkey: value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Initiator refund compressed pubkey (66 hex) \\u2014 CLTV refund path",\n value: this.state.escrowInitiatorRefundPubkey,\n onChange: function onChange(e, _ref0) {\n var value = _ref0.value;\n return _this3.setState({\n escrowInitiatorRefundPubkey: value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Group, {\n widths: "equal"\n }, /*#__PURE__*/React.createElement(Form.Input, {\n label: "refundLockHeight (absolute block height)",\n value: this.state.escrowRefundLockHeight,\n onChange: function onChange(e, _ref1) {\n var value = _ref1.value;\n return _this3.setState({\n escrowRefundLockHeight: value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Delta blocks (used with button below)",\n value: this.state.escrowRefundDelta,\n onChange: function onChange(e, _ref10) {\n var value = _ref10.value;\n return _this3.setState({\n escrowRefundDelta: value\n });\n }\n })), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n size: "small",\n onClick: function onClick() {\n return _this3._syncRefundLockFromTip();\n }\n }, "Set refund lock from chain tip + delta"), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n primary: true,\n onClick: function onClick() {\n return _this3._buildEscrowAddress();\n }\n }, "Build escrow address (RPC)"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "teal",\n style: {\n marginLeft: \'0.5em\'\n },\n onClick: function onClick() {\n return _this3._recordL1OfferOnSidechain();\n }\n }, "Record offer on sidechain (funding_pending)")), this.state.escrowBuildResult && this.state.escrowBuildResult.paymentAddress && /*#__PURE__*/React.createElement(Message, {\n positive: true,\n style: {\n marginTop: \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Escrow funding"), /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("strong", null, "Address:"), " ", /*#__PURE__*/React.createElement("code", null, this.state.escrowBuildResult.paymentAddress)), this.state.escrowBuildResult.bitcoinUri ? /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement("strong", null, "BIP21:"), " ", /*#__PURE__*/React.createElement("code", {\n style: {\n wordBreak: \'break-all\'\n }\n }, this.state.escrowBuildResult.bitcoinUri)) : null), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1.25em\'\n }\n }, "2. Confirm L1 funding"), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Input, {\n label: "Funding txid",\n value: this.state.l1FundingTxid,\n onChange: function onChange(e, _ref11) {\n var value = _ref11.value;\n return _this3.setState({\n l1FundingTxid: value\n });\n }\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: function onClick() {\n return _this3._verifyL1FundingAndPatch();\n }\n }, "Verify funding and patch to funded")), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1.25em\'\n }\n }, "3. Delivery \\u2014 reveal preimage (initiator)"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: function onClick() {\n return _this3._revealPreimageDelivered();\n }\n }, "Patch offer \\u2192 delivered + revealedPreimageHex"), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1.25em\'\n }\n }, "4a. Exit \\u2014 deliverer claim"), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Input, {\n label: "Claim payout address",\n value: this.state.l1ClaimDestAddress,\n onChange: function onChange(e, _ref12) {\n var value = _ref12.value;\n return _this3.setState({\n l1ClaimDestAddress: value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Fee (sats)",\n value: this.state.l1FeeClaimSats,\n onChange: function onChange(e, _ref13) {\n var value = _ref13.value;\n return _this3.setState({\n l1FeeClaimSats: value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Deliverer secp256k1 privkey (64 hex) \\u2014 stays in browser",\n type: "password",\n autoComplete: "off",\n value: this.state.l1DelivererPrivHex,\n onChange: function onChange(e, _ref14) {\n var value = _ref14.value;\n return _this3.setState({\n l1DelivererPrivHex: value\n });\n }\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: function onClick() {\n return _this3._prepareDelivererClaim();\n }\n }, "Prepare claim PSBT"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n positive: true,\n style: {\n marginLeft: \'0.5em\'\n },\n onClick: function onClick() {\n return _this3._signAndBroadcastClaim();\n }\n }, "Sign and broadcast claim")), this.state.l1LastPsbtClaim ? /*#__PURE__*/React.createElement("p", {\n style: {\n fontSize: \'11px\',\n color: \'#666\',\n wordBreak: \'break-all\'\n }\n }, "Last claim PSBT (base64): ", this.state.l1LastPsbtClaim.slice(0, 80), "\\u2026") : null, /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1.25em\'\n }\n }, "4b. Exit \\u2014 initiator refund (after CLTV height)"), /*#__PURE__*/React.createElement(Form, null, /*#__PURE__*/React.createElement(Form.Input, {\n label: "Refund payout address",\n value: this.state.l1RefundDestAddress,\n onChange: function onChange(e, _ref15) {\n var value = _ref15.value;\n return _this3.setState({\n l1RefundDestAddress: value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Fee (sats)",\n value: this.state.l1FeeRefundSats,\n onChange: function onChange(e, _ref16) {\n var value = _ref16.value;\n return _this3.setState({\n l1FeeRefundSats: value\n });\n }\n }), /*#__PURE__*/React.createElement(Form.Input, {\n label: "Initiator refund privkey (64 hex) \\u2014 stays in browser",\n type: "password",\n autoComplete: "off",\n value: this.state.l1InitiatorPrivHex,\n onChange: function onChange(e, _ref17) {\n var value = _ref17.value;\n return _this3.setState({\n l1InitiatorPrivHex: value\n });\n }\n }), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n onClick: function onClick() {\n return _this3._prepareInitiatorRefund();\n }\n }, "Prepare refund PSBT"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "orange",\n style: {\n marginLeft: \'0.5em\'\n },\n onClick: function onClick() {\n return _this3._signAndBroadcastRefund();\n }\n }, "Sign & broadcast refund")), /*#__PURE__*/React.createElement(Divider, null), /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Sidechain-only rehearsal (no L1)"), /*#__PURE__*/React.createElement(Button, {\n type: "button",\n color: "teal",\n size: "small",\n onClick: function onClick() {\n return _this3._submitDocumentOfferDemo();\n }\n }, "Create offer on sidechain (no escrow)"), /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#666\',\n marginTop: \'0.75em\'\n }\n }, "Operator phase override:"), /*#__PURE__*/React.createElement(Button.Group, {\n size: "small"\n }, /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n return _this3._advanceOfferPhase(\'funding_pending\');\n }\n }, "funding_pending"), /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n return _this3._advanceOfferPhase(\'funded\');\n }\n }, "funded"), /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n return _this3._advanceOfferPhase(\'delivered\');\n }\n }, "delivered"), /*#__PURE__*/React.createElement(Button, {\n onClick: function onClick() {\n return _this3._advanceOfferPhase(\'settled\');\n }\n }, "settled"))));\n }\n }]);\n}(React.Component);\nmodule.exports = SidechainHome;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBLENBQUN6VCxNQUFNO1FBQUNpVixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVFoQyxNQUFJLENBQUNwRixrQkFBa0IsQ0FBQyxRQUFRLENBQUM7UUFBQTtNQUFDLEdBQUMsUUFBYyxDQUFDLGVBQ3pFaE8sS0FBQSxDQUFBNFQsYUFBQSxDQUFDelQsTUFBTTtRQUFDaVYsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7VUFBQSxPQUFRaEMsTUFBSSxDQUFDcEYsa0JBQWtCLENBQUMsV0FBVyxDQUFDO1FBQUE7TUFBQyxHQUFDLFdBQWlCLENBQUMsZUFDL0VoTyxLQUFBLENBQUE0VCxhQUFBLENBQUN6VCxNQUFNO1FBQUNpVixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVFoQyxNQUFJLENBQUNwRixrQkFBa0IsQ0FBQyxTQUFTLENBQUM7UUFBQTtNQUFDLEdBQUMsU0FBZSxDQUM5RCxDQUNQLENBQ0ksQ0FBQztJQUVwQjtFQUFDO0FBQUEsRUFsckN5QmhPLEtBQUssQ0FBQ3daLFNBQVM7QUFxckMzQ0MsTUFBTSxDQUFDQyxPQUFPLEdBQUcvVSxhQUFhIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL1NpZGVjaGFpbkhvbWUuanM/MWY5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIERlcGVuZGVuY2llc1xuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3Qge1xuICBCdXR0b24sXG4gIEZvcm0sXG4gIEhlYWRlcixcbiAgSWNvbixcbiAgTWVzc2FnZSxcbiAgU2VnbWVudCxcbiAgVGV4dEFyZWEsXG4gIERpdmlkZXIsXG4gIExhYmVsLFxuICBUYWJsZSxcbiAgU3RhdGlzdGljXG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcblxuLy8gRmFicmljIFR5cGVzXG5jb25zdCBBY3RvciA9IHJlcXVpcmUoJ0BmYWJyaWMvY29yZS90eXBlcy9hY3RvcicpO1xuXG5jb25zdCB7IHRvYXN0IH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvdG9hc3QnKTtcbmNvbnN0IHsgZmFicmljSWRlbnRpdHlOZWVkRnVsbEtleVBsYWluIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViSWRlbnRpdHlVaUhpbnRzJyk7XG5jb25zdCB7IHNoYTI1NiB9ID0gcmVxdWlyZSgnQG5vYmxlL2hhc2hlcy9zaGEyLmpzJyk7XG5jb25zdCB7XG4gIGdldFNpZGVjaGFpblN0YXRlLFxuICBnZXRTaWRlY2hhaW5Kb3VybmFsLFxuICBnZXRTaWRlY2hhaW5TbmFwc2hvdHMsXG4gIHN1Ym1pdFNpZGVjaGFpblN0YXRlUGF0Y2gsXG4gIGZldGNoRGlzdHJpYnV0ZWRFcG9jaCxcbiAgZmV0Y2hEaXN0cmlidXRlZE1hbmlmZXN0XG59ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3NpZGVjaGFpbkh1YkNsaWVudCcpO1xuY29uc3Qge1xuICBjcmVhdGVPZmZlclJlY29yZCxcbiAgcGF0Y2hlc0Zvck5ld09mZmVyLFxuICBwYXRjaFJlcGxhY2VPZmZlcixcbiAgYnVpbGREb2N1bWVudE9mZmVyRW52ZWxvcGVcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZG9jdW1lbnRPZmZlcicpO1xuY29uc3Qge1xuICBidWlsZERvY3VtZW50T2ZmZXJFc2Nyb3csXG4gIHZlcmlmeURvY3VtZW50T2ZmZXJGdW5kaW5nLFxuICBwcmVwYXJlRG9jdW1lbnRPZmZlckRlbGl2ZXJlckNsYWltUHNidCxcbiAgcHJlcGFyZURvY3VtZW50T2ZmZXJJbml0aWF0b3JSZWZ1bmRQc2J0LFxuICBicm9hZGNhc3RTaWduZWRUcmFuc2FjdGlvbixcbiAgZ2V0Qml0Y29pblRpcEhlaWdodFxufSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9kb2N1bWVudE9mZmVySHViQ2xpZW50Jyk7XG5jb25zdCB7XG4gIHNpZ25EZWxpdmVyZXJDbGFpbUZyb21Qc2J0QmFzZTY0LFxuICBzaWduSW5pdGlhdG9yUmVmdW5kRnJvbVBzYnRCYXNlNjRcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZG9jdW1lbnRPZmZlclR4QnJvd3NlcicpO1xuY29uc3QgeyByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViQWRtaW5Ub2tlbkJyb3dzZXInKTtcbmNvbnN0IHsgRE9DVU1FTlRfT0ZGRVIgfSA9IHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9tZXNzYWdlVHlwZXMnKTtcbmNvbnN0IHsgbG9hZEh1YlVpRmVhdHVyZUZsYWdzLCBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncyB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YlVpRmVhdHVyZUZsYWdzJyk7XG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcbmNvbnN0IERpc3RyaWJ1dGVkRmVkZXJhdGlvblBhbmVsID0gcmVxdWlyZSgnLi9EaXN0cmlidXRlZEZlZGVyYXRpb25QYW5lbCcpO1xuXG5mdW5jdGlvbiBwYXltZW50SGFzaEhleEZyb21QcmVpbWFnZUhleCAocHJlaW1hZ2VIZXgpIHtcbiAgY29uc3QgY2xlYW4gPSBTdHJpbmcocHJlaW1hZ2VIZXggfHwgJycpLnRyaW0oKS5yZXBsYWNlKC9eMHgvaSwgJycpO1xuICBpZiAoIS9eWzAtOWEtZl17NjR9JC9pLnRlc3QoY2xlYW4pKSByZXR1cm4gJyc7XG4gIHJldHVybiBCdWZmZXIuZnJvbShzaGEyNTYoVWludDhBcnJheS5mcm9tKEJ1ZmZlci5mcm9tKGNsZWFuLCAnaGV4JykpKSkudG9TdHJpbmcoJ2hleCcpO1xufVxuXG5mdW5jdGlvbiBzYWZlSnNvbiAob2JqLCBzcGFjZSA9IDIpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCBzcGFjZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gU3RyaW5nKG9iaik7XG4gIH1cbn1cblxuZnVuY3Rpb24gbmV3T2ZmZXJJZCAoKSB7XG4gIHJldHVybiBuZXcgQWN0b3Ioe1xuICAgIHR5cGU6ICdIdWJFcGhlbWVyYWxJZCcsXG4gICAgcHVycG9zZTogJ3NpZGVjaGFpbi5kb2N1bWVudE9mZmVyJyxcbiAgICBub25jZTogQWN0b3IucmFuZG9tQnl0ZXMoOCkudG9TdHJpbmcoJ2hleCcpLFxuICAgIGF0OiBEYXRlLm5vdygpXG4gIH0pLmlkO1xufVxuXG5jbGFzcyBTaWRlY2hhaW5Ib21lIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IgKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgIHNpZGVjaGFpbjogbnVsbCxcbiAgICAgIGVwb2NoOiBudWxsLFxuICAgICAgZXBvY2hFcnJvcjogbnVsbCxcbiAgICAgIG1hbmlmZXN0OiBudWxsLFxuICAgICAgam91cm5hbDogbnVsbCxcbiAgICAgIHNuYXBzaG90czogbnVsbCxcbiAgICAgIHNob3dDb250ZW50SnNvbjogZmFsc2UsXG4gICAgICBwYXRjaEpzb246ICdbXFxuICB7IFwib3BcIjogXCJhZGRcIiwgXCJwYXRoXCI6IFwiL2V4YW1wbGVcIiwgXCJ2YWx1ZVwiOiB0cnVlIH1cXG5dJyxcbiAgICAgIGZlZGVyYXRpb25XaXRuZXNzSnNvbjogJycsXG4gICAgICBiYXNpc0Nsb2NrTm90ZTogJycsXG4gICAgICBvZmZlckRvY3VtZW50SWQ6ICcnLFxuICAgICAgb2ZmZXJSZXdhcmRTYXRzOiAnMTAwMDAnLFxuICAgICAgb2ZmZXJNZW1vOiAnJyxcbiAgICAgIG9mZmVyQW5ub3VuY2VDaGF0OiB0cnVlLFxuICAgICAgbGFzdFBhdGNoUmVzdWx0OiBudWxsLFxuICAgICAgaW5ib3VuZE9mZmVyOiBudWxsLFxuICAgICAgZXNjcm93UHJlaW1hZ2VIZXg6ICcnLFxuICAgICAgZXNjcm93UGF5bWVudEhhc2hIZXg6ICcnLFxuICAgICAgZXNjcm93RGVsaXZlcmVyUHVia2V5OiAnJyxcbiAgICAgIGVzY3Jvd0luaXRpYXRvclJlZnVuZFB1YmtleTogJycsXG4gICAgICBlc2Nyb3dSZWZ1bmRMb2NrSGVpZ2h0OiAnJyxcbiAgICAgIGVzY3Jvd1JlZnVuZERlbHRhOiAnMTQ0JyxcbiAgICAgIGVzY3Jvd0J1aWxkUmVzdWx0OiBudWxsLFxuICAgICAgbDFPZmZlcklkOiAnJyxcbiAgICAgIGwxRnVuZGluZ1R4aWQ6ICcnLFxuICAgICAgbDFDbGFpbURlc3RBZGRyZXNzOiAnJyxcbiAgICAgIGwxUmVmdW5kRGVzdEFkZHJlc3M6ICcnLFxuICAgICAgbDFGZWVDbGFpbVNhdHM6ICcyMDAwJyxcbiAgICAgIGwxRmVlUmVmdW5kU2F0czogJzIwMDAnLFxuICAgICAgbDFEZWxpdmVyZXJQcml2SGV4OiAnJyxcbiAgICAgIGwxSW5pdGlhdG9yUHJpdkhleDogJycsXG4gICAgICBsMUxhc3RQc2J0Q2xhaW06ICcnLFxuICAgICAgbDFMYXN0UHNidFJlZnVuZDogJycsXG4gICAgICBsMUxhc3RTaWduZWRUeEhleDogJycsXG4gICAgICBodWJVaUZsYWdzUmV2OiAwXG4gICAgfTtcbiAgICB0aGlzLl9vbkRvY3VtZW50T2ZmZXIgPSB0aGlzLl9vbkRvY3VtZW50T2ZmZXIuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50ICgpIHtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmYWJyaWM6ZG9jdW1lbnRPZmZlcicsIHRoaXMuX29uRG9jdW1lbnRPZmZlcik7XG4gICAgICB0aGlzLl9odWJVaUZsYWdzVW5zdWIgPSBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncygoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKHMpID0+ICh7IGh1YlVpRmxhZ3NSZXY6IChzLmh1YlVpRmxhZ3NSZXYgfHwgMCkgKyAxIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudFdpbGxVbm1vdW50ICgpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdmYWJyaWM6ZG9jdW1lbnRPZmZlcicsIHRoaXMuX29uRG9jdW1lbnRPZmZlcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5faHViVWlGbGFnc1Vuc3ViID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl9odWJVaUZsYWdzVW5zdWIoKTtcbiAgICAgIHRoaXMuX2h1YlVpRmxhZ3NVbnN1YiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX29uRG9jdW1lbnRPZmZlciAoZXYpIHtcbiAgICBjb25zdCBkID0gZXYgJiYgZXYuZGV0YWlsO1xuICAgIGlmICghZCB8fCAhZC5vYmplY3QpIHJldHVybjtcbiAgICB0aGlzLnNldFN0YXRlKHsgaW5ib3VuZE9mZmVyOiBkIH0pO1xuICAgIHRvYXN0LmluZm8oJ0luY29taW5nIERPQ1VNRU5UX09GRkVSIChzZWUgRGVtbyBzZWN0aW9uKScpO1xuICB9XG5cbiAgX2dldEluaXRpYXRvcklkICgpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMucHJvcHMuaWRlbnRpdHkgJiYgKHRoaXMucHJvcHMuaWRlbnRpdHkuZmFicmljUGVlcklkIHx8IHRoaXMucHJvcHMuaWRlbnRpdHkuaWQpO1xuICAgIGlmIChpZCkgcmV0dXJuIFN0cmluZyhpZCk7XG4gICAgY29uc3QgYnIgPSB0aGlzLnByb3BzLmJyaWRnZVJlZiAmJiB0aGlzLnByb3BzLmJyaWRnZVJlZi5jdXJyZW50O1xuICAgIGlmIChiciAmJiB0eXBlb2YgYnIuX2dldElkZW50aXR5SWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IHggPSBici5fZ2V0SWRlbnRpdHlJZCgpO1xuICAgICAgaWYgKHgpIHJldHVybiBTdHJpbmcoeCk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2ggKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlLCBlcG9jaEVycm9yOiBudWxsIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBbc3QsIGVwLCBtYW4sIGpyLCBzbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGdldFNpZGVjaGFpblN0YXRlKCksXG4gICAgICAgIGZldGNoRGlzdHJpYnV0ZWRFcG9jaCgpLFxuICAgICAgICBmZXRjaERpc3RyaWJ1dGVkTWFuaWZlc3QoKSxcbiAgICAgICAgZ2V0U2lkZWNoYWluSm91cm5hbCh7IGxpbWl0OiA0MCB9KSxcbiAgICAgICAgZ2V0U2lkZWNoYWluU25hcHNob3RzKHsgbGltaXQ6IDQwIH0pXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IG5leHQgPSB7XG4gICAgICAgIHNpZGVjaGFpbjogc3Qub2sgPyBzdC5zdGF0ZSA6IG51bGwsXG4gICAgICAgIGpvdXJuYWw6IGpyLm9rID8ganIuam91cm5hbCA6IG51bGwsXG4gICAgICAgIHNuYXBzaG90czogc24ub2sgPyBzbi5zbmFwc2hvdHMgOiBudWxsLFxuICAgICAgICBtYW5pZmVzdDogbWFuLm9rID8gbWFuLmRhdGEgOiBudWxsXG4gICAgICB9O1xuICAgICAgY29uc3QgZXJycyA9IFtdO1xuICAgICAgaWYgKCFzdC5vaykgZXJycy5wdXNoKHN0LmVycm9yIHx8ICdHZXRTaWRlY2hhaW5TdGF0ZSBmYWlsZWQnKTtcbiAgICAgIGlmICghZXAub2spIGVycnMucHVzaChlcC5lcnJvciB8fCAnZXBvY2ggZmV0Y2ggZmFpbGVkJyk7XG4gICAgICBpZiAoIWpyLm9rKSBlcnJzLnB1c2goanIuZXJyb3IgfHwgJ0dldFNpZGVjaGFpbkpvdXJuYWwgZmFpbGVkJyk7XG4gICAgICBpZiAoIXNuLm9rKSBlcnJzLnB1c2goc24uZXJyb3IgfHwgJ0dldFNpZGVjaGFpblNuYXBzaG90cyBmYWlsZWQnKTtcbiAgICAgIGlmIChlcnJzLmxlbmd0aCkgbmV4dC5lcG9jaEVycm9yID0gZXJycy5qb2luKCcgwrcgJyk7XG4gICAgICBpZiAoZXAub2spIG5leHQuZXBvY2ggPSBlcC5kYXRhO1xuICAgICAgaWYgKHN0Lm9rICYmIHN0LnN0YXRlICYmIHR5cGVvZiBzdC5zdGF0ZS5jbG9jayA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbmV4dC5wYXRjaEpzb24gPSB0aGlzLnN0YXRlLnBhdGNoSnNvbjtcbiAgICAgICAgbmV4dC5iYXNpc0Nsb2NrTm90ZSA9IGBDdXJyZW50IGxvZ2ljYWwgY2xvY2s6ICR7c3Quc3RhdGUuY2xvY2t9IOKAlCB1c2UgdGhpcyBhcyBiYXNpc0Nsb2NrIHdoZW4gc3VibWl0dGluZyBwYXRjaGVzLmA7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKG5leHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlcG9jaEVycm9yOiBlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9zaG9ydERpZ2VzdCAoaGV4LCBuID0gMTApIHtcbiAgICBjb25zdCBzID0gU3RyaW5nKGhleCB8fCAnJyk7XG4gICAgaWYgKHMubGVuZ3RoIDw9IG4gKiAyKSByZXR1cm4gcyB8fCAn4oCUJztcbiAgICByZXR1cm4gYCR7cy5zbGljZSgwLCBuKX3igKYke3Muc2xpY2UoLW4pfWA7XG4gIH1cblxuICBfZWZmZWN0aXZlUG9saWN5ICgpIHtcbiAgICBjb25zdCBmcm9tU3RhdGUgPSB0aGlzLnN0YXRlLnNpZGVjaGFpbiAmJiB0aGlzLnN0YXRlLnNpZGVjaGFpbi5wb2xpY3k7XG4gICAgaWYgKGZyb21TdGF0ZSkgcmV0dXJuIGZyb21TdGF0ZTtcbiAgICBjb25zdCBmcm9tTWFuID0gdGhpcy5zdGF0ZS5tYW5pZmVzdCAmJiB0aGlzLnN0YXRlLm1hbmlmZXN0LnNpZGVjaGFpblBvbGljeTtcbiAgICByZXR1cm4gZnJvbU1hbiB8fCBudWxsO1xuICB9XG5cbiAgX3NlYWxlZERpZ2VzdEhpbnQgKCkge1xuICAgIGNvbnN0IHsgc2lkZWNoYWluLCBlcG9jaCB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBsYXN0ID0gZXBvY2ggJiYgZXBvY2guYmVhY29uICYmIGVwb2NoLmJlYWNvbi5sYXN0O1xuICAgIGNvbnN0IHBheWxvYWQgPSBsYXN0ICYmIGxhc3QucGF5bG9hZDtcbiAgICBjb25zdCBzYyA9IHBheWxvYWQgJiYgcGF5bG9hZC5zaWRlY2hhaW47XG4gICAgaWYgKCFzYyB8fCBzYy5zdGF0ZURpZ2VzdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4geyB0ZXh0OiAnTm8gc2lkZWNoYWluIGRpZ2VzdCBpbiBsYXN0IHNlYWxlZCBlcG9jaCAoYmVhY29uIGlkbGUgb3Igbm8gZXBvY2hzIHlldCkuJywgY29sb3I6ICdncmV5JyB9O1xuICAgIH1cbiAgICBjb25zdCBjdXIgPSBzaWRlY2hhaW4gJiYgc2lkZWNoYWluLnN0YXRlRGlnZXN0O1xuICAgIGlmICghY3VyKSByZXR1cm4geyB0ZXh0OiBgTGFzdCBzZWFsZWQgZGlnZXN0OiAke3NjLnN0YXRlRGlnZXN0fWAsIGNvbG9yOiAnYmx1ZScgfTtcbiAgICBpZiAoU3RyaW5nKHNjLnN0YXRlRGlnZXN0KSA9PT0gU3RyaW5nKGN1cikpIHtcbiAgICAgIHJldHVybiB7IHRleHQ6ICdMaXZlIGhlYWQgbWF0Y2hlcyBsYXN0IHNlYWxlZCBlcG9jaCBzaWRlY2hhaW4gZGlnZXN0LicsIGNvbG9yOiAnZ3JlZW4nIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0ZXh0OiAnTGl2ZSBzdGF0ZURpZ2VzdCBkaWZmZXJzIGZyb20gbGFzdCBzZWFsZWQgZXBvY2gg4oCUIHVuc2VhbGVkIHBhdGNoLCBzeW5jIGxhZywgb3IgcG9zdC1yZW9yZyByZWNvbmNpbGlhdGlvbiAoc2VlIEJFQUNPTl9TSURFQ0hBSU5fREVTSUdOX0FORF9ST0FETUFQLm1kLCBzZWN0aW9uIDYpLicsXG4gICAgICBjb2xvcjogJ29yYW5nZSdcbiAgICB9O1xuICB9XG5cbiAgX3BhcnNlRmVkZXJhdGlvbldpdG5lc3NGcm9tU3RhdGUgKCkge1xuICAgIGNvbnN0IHJhdyA9IFN0cmluZyh0aGlzLnN0YXRlLmZlZGVyYXRpb25XaXRuZXNzSnNvbiB8fCAnJykudHJpbSgpO1xuICAgIGlmICghcmF3KSByZXR1cm4geyBvazogdHJ1ZSwgd2l0bmVzczogbnVsbCB9O1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyBvazogdHJ1ZSwgd2l0bmVzczogSlNPTi5wYXJzZShyYXcpIH07XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ2ZlZGVyYXRpb24gd2l0bmVzcyBKU09OJyB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZG1pbiB0b2tlbiArIG9wdGlvbmFsIHdpdG5lc3MgZm9yIGV2ZXJ5IGBzdWJtaXRTaWRlY2hhaW5TdGF0ZVBhdGNoYCBjYWxsIG9uIHRoaXMgcGFnZS5cbiAgICogQHJldHVybnMge3sgb2s6IHRydWUsIGFkbWluVG9rZW4/OiBzdHJpbmcsIGZlZGVyYXRpb25XaXRuZXNzPzogb2JqZWN0IH0gfCB7IG9rOiBmYWxzZSwgZXJyb3I6IHN0cmluZyB9fVxuICAgKi9cbiAgX3NpZGVjaGFpblBhdGNoQXV0aCAoKSB7XG4gICAgY29uc3QgYWRtaW5Ub2tlbiA9IHRoaXMuX2FkbWluVG9rZW4oKTtcbiAgICBjb25zdCBmdyA9IHRoaXMuX3BhcnNlRmVkZXJhdGlvbldpdG5lc3NGcm9tU3RhdGUoKTtcbiAgICBpZiAoIWZ3Lm9rKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBgSW52YWxpZCAke2Z3LmVycm9yfWAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgb2s6IHRydWUsXG4gICAgICBhZG1pblRva2VuOiBhZG1pblRva2VuIHx8IHVuZGVmaW5lZCxcbiAgICAgIGZlZGVyYXRpb25XaXRuZXNzOiBmdy53aXRuZXNzIHx8IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICBhc3luYyBfc3VibWl0UmF3UGF0Y2ggKCkge1xuICAgIGxldCBwYXRjaGVzO1xuICAgIHRyeSB7XG4gICAgICBwYXRjaGVzID0gSlNPTi5wYXJzZSh0aGlzLnN0YXRlLnBhdGNoSnNvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdG9hc3QuZXJyb3IoJ0ludmFsaWQgSlNPTiBpbiBwYXRjaGVzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXRjaGVzKSB8fCAhcGF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgIHRvYXN0LmVycm9yKCdwYXRjaGVzIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmFzaXNDbG9jayA9IHRoaXMuc3RhdGUuc2lkZWNoYWluICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIodGhpcy5zdGF0ZS5zaWRlY2hhaW4uY2xvY2spKVxuICAgICAgPyBOdW1iZXIodGhpcy5zdGF0ZS5zaWRlY2hhaW4uY2xvY2spXG4gICAgICA6IE5hTjtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShiYXNpc0Nsb2NrKSkge1xuICAgICAgdG9hc3QuZXJyb3IoJ0xvYWQgc2lkZWNoYWluIHN0YXRlIGZpcnN0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGF1dGggPSB0aGlzLl9zaWRlY2hhaW5QYXRjaEF1dGgoKTtcbiAgICBpZiAoIWF1dGgub2spIHtcbiAgICAgIHRvYXN0LmVycm9yKGF1dGguZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdXQgPSBhd2FpdCBzdWJtaXRTaWRlY2hhaW5TdGF0ZVBhdGNoKHtcbiAgICAgIHBhdGNoZXMsXG4gICAgICBiYXNpc0Nsb2NrLFxuICAgICAgYWRtaW5Ub2tlbjogYXV0aC5hZG1pblRva2VuLFxuICAgICAgZmVkZXJhdGlvbldpdG5lc3M6IGF1dGguZmVkZXJhdGlvbldpdG5lc3NcbiAgICB9KTtcbiAgICBpZiAoIW91dC5vaykge1xuICAgICAgdG9hc3QuZXJyb3Iob3V0LmVycm9yIHx8ICdQYXRjaCBmYWlsZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGxhc3RQYXRjaFJlc3VsdDogb3V0LnJlc3VsdCB9KTtcbiAgICB0b2FzdC5zdWNjZXNzKCdTaWRlY2hhaW4gcGF0Y2ggYXBwbGllZCcpO1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgYXN5bmMgX3N1Ym1pdERvY3VtZW50T2ZmZXJEZW1vICgpIHtcbiAgICBjb25zdCBhdXRoID0gdGhpcy5fc2lkZWNoYWluUGF0Y2hBdXRoKCk7XG4gICAgaWYgKCFhdXRoLm9rKSB7XG4gICAgICB0b2FzdC5lcnJvcihhdXRoLmVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZG9jdW1lbnRJZCA9IFN0cmluZyh0aGlzLnN0YXRlLm9mZmVyRG9jdW1lbnRJZCB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IHJld2FyZFNhdHMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKE51bWJlcih0aGlzLnN0YXRlLm9mZmVyUmV3YXJkU2F0cykgfHwgMCkpO1xuICAgIGNvbnN0IGluaXRpYXRvckZhYnJpY0lkID0gdGhpcy5fZ2V0SW5pdGlhdG9ySWQoKTtcbiAgICBpZiAoIWRvY3VtZW50SWQpIHtcbiAgICAgIHRvYXN0LmVycm9yKCdEb2N1bWVudCBpZCByZXF1aXJlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWluaXRpYXRvckZhYnJpY0lkKSB7XG4gICAgICB0b2FzdC5lcnJvcihcbiAgICAgICAgYCR7ZmFicmljSWRlbnRpdHlOZWVkRnVsbEtleVBsYWluKHRoaXMucHJvcHMuaWRlbnRpdHkgfHwge30pfSBgICtcbiAgICAgICAgJ0FuIGluaXRpYXRvciBGYWJyaWMgaWQgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZGVtbyAoY29ubmVjdCB0byB0aGUgaHViIGlmIHlvdXIgaWQgaXMgc3RpbGwgdW5rbm93bikuJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLnNpZGVjaGFpbikge1xuICAgICAgdG9hc3QuZXJyb3IoJ0xvYWQgc2lkZWNoYWluIHN0YXRlIGZpcnN0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9mZmVySWQgPSBuZXdPZmZlcklkKCk7XG4gICAgY29uc3QgcmVjb3JkID0gY3JlYXRlT2ZmZXJSZWNvcmQoe1xuICAgICAgb2ZmZXJJZCxcbiAgICAgIGRvY3VtZW50SWQsXG4gICAgICByZXdhcmRTYXRzLFxuICAgICAgaW5pdGlhdG9yRmFicmljSWQsXG4gICAgICBtZW1vOiB0aGlzLnN0YXRlLm9mZmVyTWVtb1xuICAgIH0pO1xuICAgIGNvbnN0IHBhdGNoZXMgPSBwYXRjaGVzRm9yTmV3T2ZmZXIoXG4gICAgICAodGhpcy5zdGF0ZS5zaWRlY2hhaW4gJiYgdGhpcy5zdGF0ZS5zaWRlY2hhaW4uY29udGVudCkgfHwge30sXG4gICAgICBvZmZlcklkLFxuICAgICAgcmVjb3JkXG4gICAgKTtcbiAgICBjb25zdCBiYXNpc0Nsb2NrID0gTnVtYmVyKHRoaXMuc3RhdGUuc2lkZWNoYWluLmNsb2NrKTtcbiAgICBjb25zdCBvdXQgPSBhd2FpdCBzdWJtaXRTaWRlY2hhaW5TdGF0ZVBhdGNoKHtcbiAgICAgIHBhdGNoZXMsXG4gICAgICBiYXNpc0Nsb2NrLFxuICAgICAgYWRtaW5Ub2tlbjogYXV0aC5hZG1pblRva2VuLFxuICAgICAgZmVkZXJhdGlvbldpdG5lc3M6IGF1dGguZmVkZXJhdGlvbldpdG5lc3NcbiAgICB9KTtcbiAgICBpZiAoIW91dC5vaykge1xuICAgICAgdG9hc3QuZXJyb3Iob3V0LmVycm9yIHx8ICdPZmZlciBwYXRjaCBmYWlsZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9hc3Quc3VjY2VzcyhgRG9jdW1lbnQgb2ZmZXIgJHtvZmZlcklkfSByZWNvcmRlZCBvbiBzaWRlY2hhaW5gKTtcblxuICAgIGNvbnN0IGJyID0gdGhpcy5wcm9wcy5icmlkZ2VSZWYgJiYgdGhpcy5wcm9wcy5icmlkZ2VSZWYuY3VycmVudDtcbiAgICBpZiAodGhpcy5zdGF0ZS5vZmZlckFubm91bmNlQ2hhdCAmJiBiciAmJiB0eXBlb2YgYnIuc3VibWl0Q2hhdE1lc3NhZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGVudiA9IGJ1aWxkRG9jdW1lbnRPZmZlckVudmVsb3BlKFxuICAgICAgICB7IGlkOiBpbml0aWF0b3JGYWJyaWNJZCB9LFxuICAgICAgICB7IG9mZmVySWQsIGRvY3VtZW50SWQsIHJld2FyZFNhdHMsIHBoYXNlOiByZWNvcmQucGhhc2UsIGtpbmQ6IERPQ1VNRU5UX09GRkVSIH1cbiAgICAgICk7XG4gICAgICBjb25zdCBsaW5lID0gYFske0RPQ1VNRU5UX09GRkVSfV0gJHtKU09OLnN0cmluZ2lmeShlbnYpfWA7XG4gICAgICBici5zdWJtaXRDaGF0TWVzc2FnZShsaW5lKTtcbiAgICAgIHRvYXN0LmluZm8oJ1Bvc3RlZCBvZmZlciBtYXJrZXIgdG8gYWN0aXZpdHkgY2hhdCAobXVsdGktaG9wIC8gV2ViUlRDIGRlbW8gc2lnbmFsKScpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoeyBsYXN0UGF0Y2hSZXN1bHQ6IG91dC5yZXN1bHQgfSk7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBhc3luYyBfYWR2YW5jZU9mZmVyUGhhc2UgKHBoYXNlKSB7XG4gICAgY29uc3QgYXV0aCA9IHRoaXMuX3NpZGVjaGFpblBhdGNoQXV0aCgpO1xuICAgIGlmICghYXV0aC5vaykge1xuICAgICAgdG9hc3QuZXJyb3IoYXV0aC5lcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkID0gU3RyaW5nKHRoaXMuc3RhdGUubDFPZmZlcklkIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFpZCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1NldCBPZmZlciBpZCBmaXJzdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlkIHx8ICF0aGlzLnN0YXRlLnNpZGVjaGFpbiB8fCAhdGhpcy5zdGF0ZS5zaWRlY2hhaW4uY29udGVudCkgcmV0dXJuO1xuICAgIGNvbnN0IG9mZmVycyA9IHRoaXMuc3RhdGUuc2lkZWNoYWluLmNvbnRlbnQuZG9jdW1lbnRPZmZlcnM7XG4gICAgaWYgKCFvZmZlcnMgfHwgIW9mZmVyc1tpZF0pIHtcbiAgICAgIHRvYXN0LmVycm9yKCdVbmtub3duIG9mZmVyIGlkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5leHQgPSB7IC4uLm9mZmVyc1tpZF0sIHBoYXNlIH07XG4gICAgY29uc3QgcGF0Y2hlcyA9IHBhdGNoUmVwbGFjZU9mZmVyKGlkLCBuZXh0KTtcbiAgICBjb25zdCBiYXNpc0Nsb2NrID0gTnVtYmVyKHRoaXMuc3RhdGUuc2lkZWNoYWluLmNsb2NrKTtcbiAgICBjb25zdCBvdXQgPSBhd2FpdCBzdWJtaXRTaWRlY2hhaW5TdGF0ZVBhdGNoKHtcbiAgICAgIHBhdGNoZXMsXG4gICAgICBiYXNpc0Nsb2NrLFxuICAgICAgYWRtaW5Ub2tlbjogYXV0aC5hZG1pblRva2VuLFxuICAgICAgZmVkZXJhdGlvbldpdG5lc3M6IGF1dGguZmVkZXJhdGlvbldpdG5lc3NcbiAgICB9KTtcbiAgICBpZiAoIW91dC5vaykge1xuICAgICAgdG9hc3QuZXJyb3Iob3V0LmVycm9yIHx8ICdVcGRhdGUgZmFpbGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRvYXN0LnN1Y2Nlc3MoYE9mZmVyICR7aWR9IOKGkiAke3BoYXNlfWApO1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgX2FkbWluVG9rZW4gKCkge1xuICAgIHJldHVybiByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKHRoaXMucHJvcHMuYWRtaW5Ub2tlbikgfHwgJyc7XG4gIH1cblxuICBfZ2VuRXNjcm93UHJlaW1hZ2UgKCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93LmNyeXB0byB8fCAhd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRvYXN0LmVycm9yKCdXZWJDcnlwdG8gdW5hdmFpbGFibGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdTggPSBuZXcgVWludDhBcnJheSgzMik7XG4gICAgd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXModTgpO1xuICAgIGNvbnN0IGhleCA9IEJ1ZmZlci5mcm9tKHU4KS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgcGggPSBwYXltZW50SGFzaEhleEZyb21QcmVpbWFnZUhleChoZXgpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBlc2Nyb3dQcmVpbWFnZUhleDogaGV4LCBlc2Nyb3dQYXltZW50SGFzaEhleDogcGggfSk7XG4gICAgdG9hc3Quc3VjY2VzcygnTmV3IDMyLWJ5dGUgcHJlaW1hZ2UgKGtlZXAgc2VjcmV0IHVudGlsIGRlbGl2ZXJ5KScpO1xuICB9XG5cbiAgYXN5bmMgX3N5bmNSZWZ1bmRMb2NrRnJvbVRpcCAoKSB7XG4gICAgY29uc3QgdGlwID0gYXdhaXQgZ2V0Qml0Y29pblRpcEhlaWdodCgpO1xuICAgIGlmICghdGlwLm9rKSB7XG4gICAgICB0b2FzdC5lcnJvcih0aXAuZXJyb3IgfHwgJ0NvdWxkIG5vdCByZWFkIGNoYWluIHRpcCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZWx0YSA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoTnVtYmVyKHRoaXMuc3RhdGUuZXNjcm93UmVmdW5kRGVsdGEpIHx8IDE0NCkpO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBlc2Nyb3dSZWZ1bmRMb2NrSGVpZ2h0OiBTdHJpbmcodGlwLmhlaWdodCArIGRlbHRhKSB9KTtcbiAgICB0b2FzdC5pbmZvKGByZWZ1bmRMb2NrSGVpZ2h0ID0gdGlwICgke3RpcC5oZWlnaHR9KSArICR7ZGVsdGF9YCk7XG4gIH1cblxuICBhc3luYyBfYnVpbGRFc2Nyb3dBZGRyZXNzICgpIHtcbiAgICBjb25zdCBwYXltZW50SGFzaEhleCA9IFN0cmluZyh0aGlzLnN0YXRlLmVzY3Jvd1BheW1lbnRIYXNoSGV4IHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBkZWxpdmVyZXJQdWJrZXlIZXggPSBTdHJpbmcodGhpcy5zdGF0ZS5lc2Nyb3dEZWxpdmVyZXJQdWJrZXkgfHwgJycpLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICBjb25zdCBpbml0aWF0b3JSZWZ1bmRQdWJrZXlIZXggPSBTdHJpbmcodGhpcy5zdGF0ZS5lc2Nyb3dJbml0aWF0b3JSZWZ1bmRQdWJrZXkgfHwgJycpLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICBjb25zdCByZWZ1bmRMb2NrSGVpZ2h0ID0gTWF0aC5mbG9vcihOdW1iZXIodGhpcy5zdGF0ZS5lc2Nyb3dSZWZ1bmRMb2NrSGVpZ2h0KSB8fCAwKTtcbiAgICBpZiAoIXBheW1lbnRIYXNoSGV4IHx8IHBheW1lbnRIYXNoSGV4Lmxlbmd0aCAhPT0gNjQpIHtcbiAgICAgIHRvYXN0LmVycm9yKCdHZW5lcmF0ZSBwcmVpbWFnZSBmaXJzdCAocGF5bWVudCBoYXNoIG11c3QgYmUgNjQgaGV4IGNoYXJzKScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWRlbGl2ZXJlclB1YmtleUhleCB8fCBkZWxpdmVyZXJQdWJrZXlIZXgubGVuZ3RoICE9PSA2Nikge1xuICAgICAgdG9hc3QuZXJyb3IoJ0RlbGl2ZXJlciBwdWJrZXk6IDMzLWJ5dGUgY29tcHJlc3NlZCBzZWNwMjU2azEgaGV4ICg2NiBjaGFycyknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpbml0aWF0b3JSZWZ1bmRQdWJrZXlIZXggfHwgaW5pdGlhdG9yUmVmdW5kUHVia2V5SGV4Lmxlbmd0aCAhPT0gNjYpIHtcbiAgICAgIHRvYXN0LmVycm9yKCdJbml0aWF0b3IgcmVmdW5kIHB1YmtleTogNjYgaGV4IGNoYXJzIChjb21wcmVzc2VkKScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShyZWZ1bmRMb2NrSGVpZ2h0KSB8fCByZWZ1bmRMb2NrSGVpZ2h0IDwgMSkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1NldCByZWZ1bmRMb2NrSGVpZ2h0IChhYnNvbHV0ZSBibG9jayBoZWlnaHQgZm9yIENMVFYgcmVmdW5kKScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXdhcmRTYXRzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihOdW1iZXIodGhpcy5zdGF0ZS5vZmZlclJld2FyZFNhdHMpIHx8IDApKTtcbiAgICBjb25zdCBvdXQgPSBhd2FpdCBidWlsZERvY3VtZW50T2ZmZXJFc2Nyb3coe1xuICAgICAgcGF5bWVudEhhc2hIZXgsXG4gICAgICBkZWxpdmVyZXJQdWJrZXlIZXgsXG4gICAgICBpbml0aWF0b3JSZWZ1bmRQdWJrZXlIZXgsXG4gICAgICByZWZ1bmRMb2NrSGVpZ2h0LFxuICAgICAgcmV3YXJkU2F0cyxcbiAgICAgIGxhYmVsOiBgb2ZmZXItJHsodGhpcy5zdGF0ZS5sMU9mZmVySWQgfHwgbmV3T2ZmZXJJZCgpKS5zbGljZSgwLCAxMil9YFxuICAgIH0pO1xuICAgIGlmICghb3V0Lm9rIHx8ICFvdXQucmVzdWx0IHx8IG91dC5yZXN1bHQuc3RhdHVzICE9PSAnc3VjY2VzcycpIHtcbiAgICAgIHRvYXN0LmVycm9yKG91dC5lcnJvciB8fCAob3V0LnJlc3VsdCAmJiBvdXQucmVzdWx0Lm1lc3NhZ2UpIHx8ICdCdWlsZCBlc2Nyb3cgZmFpbGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBlc2Nyb3dCdWlsZFJlc3VsdDogb3V0LnJlc3VsdCB9KTtcbiAgICB0b2FzdC5zdWNjZXNzKCdFc2Nyb3cgYWRkcmVzcyBkZXJpdmVkIChmdW5kIHRoaXMgb3V0cHV0IOKJpSByZXdhcmQgc2F0cyknKTtcbiAgfVxuXG4gIGFzeW5jIF9yZWNvcmRMMU9mZmVyT25TaWRlY2hhaW4gKCkge1xuICAgIGNvbnN0IGF1dGggPSB0aGlzLl9zaWRlY2hhaW5QYXRjaEF1dGgoKTtcbiAgICBpZiAoIWF1dGgub2spIHtcbiAgICAgIHRvYXN0LmVycm9yKGF1dGguZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiciA9IHRoaXMuc3RhdGUuZXNjcm93QnVpbGRSZXN1bHQ7XG4gICAgaWYgKCFiciB8fCAhYnIucGF5bWVudEFkZHJlc3MpIHtcbiAgICAgIHRvYXN0LmVycm9yKCdCdWlsZCBlc2Nyb3cgYWRkcmVzcyBmaXJzdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkb2N1bWVudElkID0gU3RyaW5nKHRoaXMuc3RhdGUub2ZmZXJEb2N1bWVudElkIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgcmV3YXJkU2F0cyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoTnVtYmVyKHRoaXMuc3RhdGUub2ZmZXJSZXdhcmRTYXRzKSB8fCAwKSk7XG4gICAgY29uc3QgaW5pdGlhdG9yRmFicmljSWQgPSB0aGlzLl9nZXRJbml0aWF0b3JJZCgpO1xuICAgIGlmICghZG9jdW1lbnRJZCB8fCAhaW5pdGlhdG9yRmFicmljSWQpIHtcbiAgICAgIHRvYXN0LmVycm9yKCdEb2N1bWVudCBpZCBhbmQgdW5sb2NrZWQgaWRlbnRpdHkgcmVxdWlyZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLnNpZGVjaGFpbikge1xuICAgICAgdG9hc3QuZXJyb3IoJ0xvYWQgc2lkZWNoYWluIHN0YXRlIGZpcnN0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9mZmVySWQgPSBTdHJpbmcodGhpcy5zdGF0ZS5sMU9mZmVySWQgfHwgJycpLnRyaW0oKSB8fCBuZXdPZmZlcklkKCk7XG4gICAgY29uc3QgcmVjb3JkID0gY3JlYXRlT2ZmZXJSZWNvcmQoe1xuICAgICAgb2ZmZXJJZCxcbiAgICAgIGRvY3VtZW50SWQsXG4gICAgICByZXdhcmRTYXRzLFxuICAgICAgaW5pdGlhdG9yRmFicmljSWQsXG4gICAgICBtZW1vOiB0aGlzLnN0YXRlLm9mZmVyTWVtbyxcbiAgICAgIHBoYXNlOiAnZnVuZGluZ19wZW5kaW5nJyxcbiAgICAgIHBheW1lbnRBZGRyZXNzOiBici5wYXltZW50QWRkcmVzcyxcbiAgICAgIHBheW1lbnRIYXNoSGV4OiBici5wYXltZW50SGFzaEhleCxcbiAgICAgIGNsYWltU2NyaXB0SGV4OiBici5jbGFpbVNjcmlwdEhleCxcbiAgICAgIHJlZnVuZFNjcmlwdEhleDogYnIucmVmdW5kU2NyaXB0SGV4LFxuICAgICAgZGVsaXZlcmVyRXNjcm93UHVia2V5SGV4OiBTdHJpbmcodGhpcy5zdGF0ZS5lc2Nyb3dEZWxpdmVyZXJQdWJrZXkgfHwgJycpLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcnKSxcbiAgICAgIGluaXRpYXRvclJlZnVuZFB1YmtleUhleDogU3RyaW5nKHRoaXMuc3RhdGUuZXNjcm93SW5pdGlhdG9yUmVmdW5kUHVia2V5IHx8ICcnKS50cmltKCkucmVwbGFjZSgvXFxzKy9nLCAnJyksXG4gICAgICByZWZ1bmRMb2NrSGVpZ2h0OiBNYXRoLmZsb29yKE51bWJlcih0aGlzLnN0YXRlLmVzY3Jvd1JlZnVuZExvY2tIZWlnaHQpIHx8IDApXG4gICAgfSk7XG4gICAgY29uc3QgcGF0Y2hlcyA9IHBhdGNoZXNGb3JOZXdPZmZlcihcbiAgICAgICh0aGlzLnN0YXRlLnNpZGVjaGFpbiAmJiB0aGlzLnN0YXRlLnNpZGVjaGFpbi5jb250ZW50KSB8fCB7fSxcbiAgICAgIG9mZmVySWQsXG4gICAgICByZWNvcmRcbiAgICApO1xuICAgIGNvbnN0IGJhc2lzQ2xvY2sgPSBOdW1iZXIodGhpcy5zdGF0ZS5zaWRlY2hhaW4uY2xvY2spO1xuICAgIGNvbnN0IG91dCA9IGF3YWl0IHN1Ym1pdFNpZGVjaGFpblN0YXRlUGF0Y2goe1xuICAgICAgcGF0Y2hlcyxcbiAgICAgIGJhc2lzQ2xvY2ssXG4gICAgICBhZG1pblRva2VuOiBhdXRoLmFkbWluVG9rZW4sXG4gICAgICBmZWRlcmF0aW9uV2l0bmVzczogYXV0aC5mZWRlcmF0aW9uV2l0bmVzc1xuICAgIH0pO1xuICAgIGlmICghb3V0Lm9rKSB7XG4gICAgICB0b2FzdC5lcnJvcihvdXQuZXJyb3IgfHwgJ1BhdGNoIGZhaWxlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgbDFPZmZlcklkOiBvZmZlcklkLCBsYXN0UGF0Y2hSZXN1bHQ6IG91dC5yZXN1bHQgfSk7XG4gICAgdG9hc3Quc3VjY2VzcyhgT2ZmZXIgJHtvZmZlcklkfSBvbiBzaWRlY2hhaW4g4oCUIGZ1bmQgJHtici5wYXltZW50QWRkcmVzc31gKTtcblxuICAgIGlmICh0aGlzLnN0YXRlLm9mZmVyQW5ub3VuY2VDaGF0ICYmIHRoaXMucHJvcHMuYnJpZGdlUmVmICYmIHRoaXMucHJvcHMuYnJpZGdlUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IGJySW5zdCA9IHRoaXMucHJvcHMuYnJpZGdlUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAodHlwZW9mIGJySW5zdC5zdWJtaXRDaGF0TWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBlbnYgPSBidWlsZERvY3VtZW50T2ZmZXJFbnZlbG9wZShcbiAgICAgICAgICB7IGlkOiBpbml0aWF0b3JGYWJyaWNJZCB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9mZmVySWQsXG4gICAgICAgICAgICBkb2N1bWVudElkLFxuICAgICAgICAgICAgcmV3YXJkU2F0cyxcbiAgICAgICAgICAgIHBoYXNlOiAnZnVuZGluZ19wZW5kaW5nJyxcbiAgICAgICAgICAgIHBheW1lbnRBZGRyZXNzOiBici5wYXltZW50QWRkcmVzcyxcbiAgICAgICAgICAgIGtpbmQ6IERPQ1VNRU5UX09GRkVSXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBickluc3Quc3VibWl0Q2hhdE1lc3NhZ2UoYFske0RPQ1VNRU5UX09GRkVSfV0gJHtKU09OLnN0cmluZ2lmeShlbnYpfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIGFzeW5jIF92ZXJpZnlMMUZ1bmRpbmdBbmRQYXRjaCAoKSB7XG4gICAgY29uc3QgYXV0aCA9IHRoaXMuX3NpZGVjaGFpblBhdGNoQXV0aCgpO1xuICAgIGlmICghYXV0aC5vaykge1xuICAgICAgdG9hc3QuZXJyb3IoYXV0aC5lcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9mZmVySWQgPSBTdHJpbmcodGhpcy5zdGF0ZS5sMU9mZmVySWQgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCB0eGlkID0gU3RyaW5nKHRoaXMuc3RhdGUubDFGdW5kaW5nVHhpZCB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFvZmZlcklkIHx8ICF0eGlkKSB7XG4gICAgICB0b2FzdC5lcnJvcignU2V0IGwxT2ZmZXJJZCBhbmQgZnVuZGluZyB0eGlkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5zdGF0ZS5zaWRlY2hhaW4gfHwgIXRoaXMuc3RhdGUuc2lkZWNoYWluLmNvbnRlbnQgfHwgIXRoaXMuc3RhdGUuc2lkZWNoYWluLmNvbnRlbnQuZG9jdW1lbnRPZmZlcnMpIHtcbiAgICAgIHRvYXN0LmVycm9yKCdMb2FkIHNpZGVjaGFpbjsgb2ZmZXIgbXVzdCBleGlzdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvZmZlcnMgPSB0aGlzLnN0YXRlLnNpZGVjaGFpbi5jb250ZW50LmRvY3VtZW50T2ZmZXJzO1xuICAgIGNvbnN0IHJlYyA9IG9mZmVyc1tvZmZlcklkXTtcbiAgICBpZiAoIXJlYyB8fCAhcmVjLnBheW1lbnRBZGRyZXNzKSB7XG4gICAgICB0b2FzdC5lcnJvcignVW5rbm93biBvZmZlciBvciBtaXNzaW5nIHBheW1lbnRBZGRyZXNzIG9uIHJlY29yZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXdhcmRTYXRzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihOdW1iZXIocmVjLnJld2FyZFNhdHMpIHx8IDApKTtcbiAgICBjb25zdCB2ID0gYXdhaXQgdmVyaWZ5RG9jdW1lbnRPZmZlckZ1bmRpbmcoe1xuICAgICAgZnVuZGluZ1R4aWQ6IHR4aWQsXG4gICAgICBwYXltZW50QWRkcmVzczogcmVjLnBheW1lbnRBZGRyZXNzLFxuICAgICAgcmV3YXJkU2F0c1xuICAgIH0pO1xuICAgIGlmICghdi5vayB8fCAhdi5yZXN1bHQgfHwgdi5yZXN1bHQuc3RhdHVzICE9PSAnc3VjY2VzcycgfHwgIXYucmVzdWx0LnZlcmlmaWVkKSB7XG4gICAgICB0b2FzdC5lcnJvcih2LmVycm9yIHx8ICh2LnJlc3VsdCAmJiB2LnJlc3VsdC5tZXNzYWdlKSB8fCAnRnVuZGluZyBub3QgdmVyaWZpZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dCA9IHtcbiAgICAgIC4uLnJlYyxcbiAgICAgIHBoYXNlOiAnZnVuZGVkJyxcbiAgICAgIGZ1bmRpbmdUeGlkOiB0eGlkLFxuICAgICAgZnVuZGluZ1ZvdXQ6IHYucmVzdWx0LmZ1bmRpbmdWb3V0ICE9IG51bGwgPyB2LnJlc3VsdC5mdW5kaW5nVm91dCA6IHJlYy5mdW5kaW5nVm91dFxuICAgIH07XG4gICAgY29uc3QgcGF0Y2hlcyA9IHBhdGNoUmVwbGFjZU9mZmVyKG9mZmVySWQsIG5leHQpO1xuICAgIGNvbnN0IG91dCA9IGF3YWl0IHN1Ym1pdFNpZGVjaGFpblN0YXRlUGF0Y2goe1xuICAgICAgcGF0Y2hlcyxcbiAgICAgIGJhc2lzQ2xvY2s6IE51bWJlcih0aGlzLnN0YXRlLnNpZGVjaGFpbi5jbG9jayksXG4gICAgICBhZG1pblRva2VuOiBhdXRoLmFkbWluVG9rZW4sXG4gICAgICBmZWRlcmF0aW9uV2l0bmVzczogYXV0aC5mZWRlcmF0aW9uV2l0bmVzc1xuICAgIH0pO1xuICAgIGlmICghb3V0Lm9rKSB7XG4gICAgICB0b2FzdC5lcnJvcihvdXQuZXJyb3IgfHwgJ1BhdGNoIGZhaWxlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0b2FzdC5zdWNjZXNzKCdPZmZlciBtYXJrZWQgZnVuZGVkIG9uIHNpZGVjaGFpbicpO1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgYXN5bmMgX3JldmVhbFByZWltYWdlRGVsaXZlcmVkICgpIHtcbiAgICBjb25zdCBhdXRoID0gdGhpcy5fc2lkZWNoYWluUGF0Y2hBdXRoKCk7XG4gICAgaWYgKCFhdXRoLm9rKSB7XG4gICAgICB0b2FzdC5lcnJvcihhdXRoLmVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb2ZmZXJJZCA9IFN0cmluZyh0aGlzLnN0YXRlLmwxT2ZmZXJJZCB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IHByZWltYWdlID0gU3RyaW5nKHRoaXMuc3RhdGUuZXNjcm93UHJlaW1hZ2VIZXggfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghb2ZmZXJJZCB8fCAhL15bMC05YS1mXXs2NH0kLy50ZXN0KHByZWltYWdlKSkge1xuICAgICAgdG9hc3QuZXJyb3IoJ09mZmVyIGlkIGFuZCBsb2NhbCBlc2Nyb3cgcHJlaW1hZ2UgKDY0IGhleCkgcmVxdWlyZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLnNpZGVjaGFpbiB8fCAhdGhpcy5zdGF0ZS5zaWRlY2hhaW4uY29udGVudCB8fCAhdGhpcy5zdGF0ZS5zaWRlY2hhaW4uY29udGVudC5kb2N1bWVudE9mZmVycykge1xuICAgICAgdG9hc3QuZXJyb3IoJ0xvYWQgc2lkZWNoYWluJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlYyA9IHRoaXMuc3RhdGUuc2lkZWNoYWluLmNvbnRlbnQuZG9jdW1lbnRPZmZlcnNbb2ZmZXJJZF07XG4gICAgaWYgKCFyZWMpIHtcbiAgICAgIHRvYXN0LmVycm9yKCdVbmtub3duIG9mZmVyJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHdhbnQgPSBTdHJpbmcocmVjLnBheW1lbnRIYXNoSGV4IHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGdvdCA9IHBheW1lbnRIYXNoSGV4RnJvbVByZWltYWdlSGV4KHByZWltYWdlKTtcbiAgICBpZiAod2FudCAmJiBnb3QgIT09IHdhbnQpIHtcbiAgICAgIHRvYXN0LmVycm9yKCdQcmVpbWFnZSBkb2VzIG5vdCBtYXRjaCBvZmZlciBwYXltZW50SGFzaEhleCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0ID0geyAuLi5yZWMsIHBoYXNlOiAnZGVsaXZlcmVkJywgcmV2ZWFsZWRQcmVpbWFnZUhleDogcHJlaW1hZ2UgfTtcbiAgICBjb25zdCBwYXRjaGVzID0gcGF0Y2hSZXBsYWNlT2ZmZXIob2ZmZXJJZCwgbmV4dCk7XG4gICAgY29uc3Qgb3V0ID0gYXdhaXQgc3VibWl0U2lkZWNoYWluU3RhdGVQYXRjaCh7XG4gICAgICBwYXRjaGVzLFxuICAgICAgYmFzaXNDbG9jazogTnVtYmVyKHRoaXMuc3RhdGUuc2lkZWNoYWluLmNsb2NrKSxcbiAgICAgIGFkbWluVG9rZW46IGF1dGguYWRtaW5Ub2tlbixcbiAgICAgIGZlZGVyYXRpb25XaXRuZXNzOiBhdXRoLmZlZGVyYXRpb25XaXRuZXNzXG4gICAgfSk7XG4gICAgaWYgKCFvdXQub2spIHtcbiAgICAgIHRvYXN0LmVycm9yKG91dC5lcnJvciB8fCAnUGF0Y2ggZmFpbGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRvYXN0LnN1Y2Nlc3MoJ1ByZWltYWdlIG9uIHNpZGVjaGFpbiDigJQgZGVsaXZlcmVyIGNhbiBidWlsZCBjbGFpbSB0eCcpO1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgYXN5bmMgX3ByZXBhcmVEZWxpdmVyZXJDbGFpbSAoKSB7XG4gICAgY29uc3Qgb2ZmZXJJZCA9IFN0cmluZyh0aGlzLnN0YXRlLmwxT2ZmZXJJZCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghdGhpcy5zdGF0ZS5zaWRlY2hhaW4gfHwgIXRoaXMuc3RhdGUuc2lkZWNoYWluLmNvbnRlbnQgfHwgIXRoaXMuc3RhdGUuc2lkZWNoYWluLmNvbnRlbnQuZG9jdW1lbnRPZmZlcnMpIHtcbiAgICAgIHRvYXN0LmVycm9yKCdMb2FkIHNpZGVjaGFpbicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWMgPSB0aGlzLnN0YXRlLnNpZGVjaGFpbi5jb250ZW50LmRvY3VtZW50T2ZmZXJzW29mZmVySWRdO1xuICAgIGlmICghcmVjIHx8ICFyZWMuZnVuZGluZ1R4aWQgfHwgIXJlYy5yZXZlYWxlZFByZWltYWdlSGV4KSB7XG4gICAgICB0b2FzdC5lcnJvcignT2ZmZXIgbmVlZHMgZnVuZGVkICsgZGVsaXZlcmVkIChyZXZlYWxlZCBwcmVpbWFnZSknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGVzdCA9IFN0cmluZyh0aGlzLnN0YXRlLmwxQ2xhaW1EZXN0QWRkcmVzcyB8fCAnJykudHJpbSgpO1xuICAgIGlmICghZGVzdCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ0NsYWltIHBheW91dCBhZGRyZXNzIHJlcXVpcmVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZlZVNhdHMgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKE51bWJlcih0aGlzLnN0YXRlLmwxRmVlQ2xhaW1TYXRzKSB8fCAyMDAwKSk7XG4gICAgY29uc3QgcHJlcCA9IGF3YWl0IHByZXBhcmVEb2N1bWVudE9mZmVyRGVsaXZlcmVyQ2xhaW1Qc2J0KHtcbiAgICAgIGZ1bmRpbmdUeGlkOiByZWMuZnVuZGluZ1R4aWQsXG4gICAgICBwYXltZW50QWRkcmVzczogcmVjLnBheW1lbnRBZGRyZXNzLFxuICAgICAgY2xhaW1TY3JpcHRIZXg6IHJlYy5jbGFpbVNjcmlwdEhleCxcbiAgICAgIHJlZnVuZFNjcmlwdEhleDogcmVjLnJlZnVuZFNjcmlwdEhleCxcbiAgICAgIHByZWltYWdlSGV4OiByZWMucmV2ZWFsZWRQcmVpbWFnZUhleCxcbiAgICAgIGRlc3RpbmF0aW9uQWRkcmVzczogZGVzdCxcbiAgICAgIGZlZVNhdHNcbiAgICB9KTtcbiAgICBpZiAoIXByZXAub2sgfHwgIXByZXAucmVzdWx0IHx8IHByZXAucmVzdWx0LnN0YXR1cyAhPT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICB0b2FzdC5lcnJvcihwcmVwLmVycm9yIHx8IChwcmVwLnJlc3VsdCAmJiBwcmVwLnJlc3VsdC5tZXNzYWdlKSB8fCAnUHJlcGFyZSBQU0JUIGZhaWxlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHsgbDFMYXN0UHNidENsYWltOiBwcmVwLnJlc3VsdC5wc2J0QmFzZTY0IH0pO1xuICAgIHRvYXN0LnN1Y2Nlc3MoJ0NsYWltIFBTQlQgcmVhZHkg4oCUIHNpZ24gd2l0aCBkZWxpdmVyZXIga2V5IHRoZW4gYnJvYWRjYXN0Jyk7XG4gIH1cblxuICBfc2lnbkFuZEJyb2FkY2FzdENsYWltICgpIHtcbiAgICBjb25zdCBwc2J0QjY0ID0gU3RyaW5nKHRoaXMuc3RhdGUubDFMYXN0UHNidENsYWltIHx8ICcnKS50cmltKCk7XG4gICAgY29uc3QgcHJpdiA9IFN0cmluZyh0aGlzLnN0YXRlLmwxRGVsaXZlcmVyUHJpdkhleCB8fCAnJykudHJpbSgpLnJlcGxhY2UoL14weC9pLCAnJyk7XG4gICAgaWYgKCFwc2J0QjY0IHx8ICEvXlswLTlhLWZdezY0fSQvaS50ZXN0KHByaXYpKSB7XG4gICAgICB0b2FzdC5lcnJvcignUHJlcGFyZSBjbGFpbSBQU0JUIGFuZCBwYXN0ZSBkZWxpdmVyZXIgc2VjcDI1NmsxIHByaXZhdGUga2V5ICg2NCBoZXgpJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9mZmVySWQgPSBTdHJpbmcodGhpcy5zdGF0ZS5sMU9mZmVySWQgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCByZWMgPSB0aGlzLnN0YXRlLnNpZGVjaGFpbiAmJiB0aGlzLnN0YXRlLnNpZGVjaGFpbi5jb250ZW50ICYmIHRoaXMuc3RhdGUuc2lkZWNoYWluLmNvbnRlbnQuZG9jdW1lbnRPZmZlcnNcbiAgICAgID8gdGhpcy5zdGF0ZS5zaWRlY2hhaW4uY29udGVudC5kb2N1bWVudE9mZmVyc1tvZmZlcklkXVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHByZWltYWdlID0gU3RyaW5nKChyZWMgJiYgcmVjLnJldmVhbGVkUHJlaW1hZ2VIZXgpIHx8IHRoaXMuc3RhdGUuZXNjcm93UHJlaW1hZ2VIZXggfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghL15bMC05YS1mXXs2NH0kLy50ZXN0KHByZWltYWdlKSkge1xuICAgICAgdG9hc3QuZXJyb3IoJ09mZmVyIG11c3QgaW5jbHVkZSByZXZlYWxlZFByZWltYWdlSGV4IChyZWZyZXNoIHNpZGVjaGFpbikgb3Iga2VlcCBsb2NhbCBwcmVpbWFnZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdHhIZXg7XG4gICAgdHJ5IHtcbiAgICAgICh7IHR4SGV4IH0gPSBzaWduRGVsaXZlcmVyQ2xhaW1Gcm9tUHNidEJhc2U2NChwc2J0QjY0LCBwcmVpbWFnZSwgcHJpdikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBsMURlbGl2ZXJlclByaXZIZXg6ICcnIH0pO1xuICAgICAgdG9hc3QuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiAnU2lnbiBmYWlsZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGwxRGVsaXZlcmVyUHJpdkhleDogJycgfSk7XG4gICAgdGhpcy5fYnJvYWRjYXN0RXhpdFR4KHR4SGV4LCAnY2xhaW0nKTtcbiAgfVxuXG4gIGFzeW5jIF9wcmVwYXJlSW5pdGlhdG9yUmVmdW5kICgpIHtcbiAgICBjb25zdCBvZmZlcklkID0gU3RyaW5nKHRoaXMuc3RhdGUubDFPZmZlcklkIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCF0aGlzLnN0YXRlLnNpZGVjaGFpbiB8fCAhdGhpcy5zdGF0ZS5zaWRlY2hhaW4uY29udGVudCB8fCAhdGhpcy5zdGF0ZS5zaWRlY2hhaW4uY29udGVudC5kb2N1bWVudE9mZmVycykge1xuICAgICAgdG9hc3QuZXJyb3IoJ0xvYWQgc2lkZWNoYWluJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlYyA9IHRoaXMuc3RhdGUuc2lkZWNoYWluLmNvbnRlbnQuZG9jdW1lbnRPZmZlcnNbb2ZmZXJJZF07XG4gICAgaWYgKCFyZWMgfHwgIXJlYy5mdW5kaW5nVHhpZCB8fCAhcmVjLnJlZnVuZExvY2tIZWlnaHQpIHtcbiAgICAgIHRvYXN0LmVycm9yKCdPZmZlciBtaXNzaW5nIGZ1bmRpbmcgb3IgcmVmdW5kTG9ja0hlaWdodCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZXN0ID0gU3RyaW5nKHRoaXMuc3RhdGUubDFSZWZ1bmREZXN0QWRkcmVzcyB8fCAnJykudHJpbSgpO1xuICAgIGlmICghZGVzdCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1JlZnVuZCBwYXlvdXQgYWRkcmVzcyByZXF1aXJlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmZWVTYXRzID0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihOdW1iZXIodGhpcy5zdGF0ZS5sMUZlZVJlZnVuZFNhdHMpIHx8IDIwMDApKTtcbiAgICBjb25zdCBwcmVwID0gYXdhaXQgcHJlcGFyZURvY3VtZW50T2ZmZXJJbml0aWF0b3JSZWZ1bmRQc2J0KHtcbiAgICAgIGZ1bmRpbmdUeGlkOiByZWMuZnVuZGluZ1R4aWQsXG4gICAgICBwYXltZW50QWRkcmVzczogcmVjLnBheW1lbnRBZGRyZXNzLFxuICAgICAgY2xhaW1TY3JpcHRIZXg6IHJlYy5jbGFpbVNjcmlwdEhleCxcbiAgICAgIHJlZnVuZFNjcmlwdEhleDogcmVjLnJlZnVuZFNjcmlwdEhleCxcbiAgICAgIHJlZnVuZExvY2tIZWlnaHQ6IHJlYy5yZWZ1bmRMb2NrSGVpZ2h0LFxuICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiBkZXN0LFxuICAgICAgZmVlU2F0c1xuICAgIH0pO1xuICAgIGlmICghcHJlcC5vayB8fCAhcHJlcC5yZXN1bHQgfHwgcHJlcC5yZXN1bHQuc3RhdHVzICE9PSAnc3VjY2VzcycpIHtcbiAgICAgIHRvYXN0LmVycm9yKHByZXAuZXJyb3IgfHwgKHByZXAucmVzdWx0ICYmIHByZXAucmVzdWx0Lm1lc3NhZ2UpIHx8ICdQcmVwYXJlIHJlZnVuZCBQU0JUIGZhaWxlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocHJlcC5yZXN1bHQucmVmdW5kVmFsaWRPbkNoYWluID09PSBmYWxzZSkge1xuICAgICAgdG9hc3Qud2FybmluZygnQ2hhaW4gdGlwIGJlbG93IHJlZnVuZExvY2tIZWlnaHQg4oCUIHR4IG1heSBub3QgcmVsYXkgeWV0Jyk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBsMUxhc3RQc2J0UmVmdW5kOiBwcmVwLnJlc3VsdC5wc2J0QmFzZTY0IH0pO1xuICAgIHRvYXN0LnN1Y2Nlc3MoJ1JlZnVuZCBQU0JUIHJlYWR5IOKAlCBzaWduIHdpdGggaW5pdGlhdG9yIHJlZnVuZCBrZXknKTtcbiAgfVxuXG4gIF9zaWduQW5kQnJvYWRjYXN0UmVmdW5kICgpIHtcbiAgICBjb25zdCBwc2J0QjY0ID0gU3RyaW5nKHRoaXMuc3RhdGUubDFMYXN0UHNidFJlZnVuZCB8fCAnJykudHJpbSgpO1xuICAgIGNvbnN0IHByaXYgPSBTdHJpbmcodGhpcy5zdGF0ZS5sMUluaXRpYXRvclByaXZIZXggfHwgJycpLnRyaW0oKS5yZXBsYWNlKC9eMHgvaSwgJycpO1xuICAgIGlmICghcHNidEI2NCB8fCAhL15bMC05YS1mXXs2NH0kL2kudGVzdChwcml2KSkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1ByZXBhcmUgcmVmdW5kIFBTQlQgYW5kIHBhc3RlIGluaXRpYXRvciByZWZ1bmQgcHJpdmF0ZSBrZXkgKDY0IGhleCknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHR4SGV4O1xuICAgIHRyeSB7XG4gICAgICAoeyB0eEhleCB9ID0gc2lnbkluaXRpYXRvclJlZnVuZEZyb21Qc2J0QmFzZTY0KHBzYnRCNjQsIHByaXYpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgbDFJbml0aWF0b3JQcml2SGV4OiAnJyB9KTtcbiAgICAgIHRvYXN0LmVycm9yKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogJ1NpZ24gZmFpbGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoeyBsMUluaXRpYXRvclByaXZIZXg6ICcnIH0pO1xuICAgIHRoaXMuX2Jyb2FkY2FzdEV4aXRUeCh0eEhleCwgJ3JlZnVuZCcpO1xuICB9XG5cbiAgYXN5bmMgX2Jyb2FkY2FzdEV4aXRUeCAodHhIZXgsIGV4aXRLaW5kKSB7XG4gICAgY29uc3QgYXV0aCA9IHRoaXMuX3NpZGVjaGFpblBhdGNoQXV0aCgpO1xuICAgIGlmICghYXV0aC5vaykge1xuICAgICAgdG9hc3QuZXJyb3IoYXV0aC5lcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGIgPSBhd2FpdCBicm9hZGNhc3RTaWduZWRUcmFuc2FjdGlvbih7IHNpZ25lZFR4SGV4OiB0eEhleCwgYWRtaW5Ub2tlbjogYXV0aC5hZG1pblRva2VuIH0pO1xuICAgIGlmICghYi5vayB8fCAhYi5yZXN1bHQgfHwgYi5yZXN1bHQuc3RhdHVzICE9PSAnc3VjY2VzcycpIHtcbiAgICAgIHRvYXN0LmVycm9yKGIuZXJyb3IgfHwgKGIucmVzdWx0ICYmIGIucmVzdWx0Lm1lc3NhZ2UpIHx8ICdCcm9hZGNhc3QgZmFpbGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHR4aWQgPSBiLnJlc3VsdC50eGlkO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBsMUxhc3RTaWduZWRUeEhleDogdHhIZXggfSk7XG4gICAgdG9hc3Quc3VjY2VzcyhgQnJvYWRjYXN0ICR7ZXhpdEtpbmR9OiAke3R4aWR9YCk7XG5cbiAgICBjb25zdCBvZmZlcklkID0gU3RyaW5nKHRoaXMuc3RhdGUubDFPZmZlcklkIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKG9mZmVySWQgJiYgdGhpcy5zdGF0ZS5zaWRlY2hhaW4gJiYgdGhpcy5zdGF0ZS5zaWRlY2hhaW4uY29udGVudCAmJiB0aGlzLnN0YXRlLnNpZGVjaGFpbi5jb250ZW50LmRvY3VtZW50T2ZmZXJzKSB7XG4gICAgICBjb25zdCByZWMgPSB0aGlzLnN0YXRlLnNpZGVjaGFpbi5jb250ZW50LmRvY3VtZW50T2ZmZXJzW29mZmVySWRdO1xuICAgICAgaWYgKHJlYykge1xuICAgICAgICBjb25zdCBuZXh0ID0geyAuLi5yZWMsIHBoYXNlOiAnc2V0dGxlZCcsIGV4aXRUeGlkOiB0eGlkLCBleGl0S2luZCB9O1xuICAgICAgICBjb25zdCBwYXRjaGVzID0gcGF0Y2hSZXBsYWNlT2ZmZXIob2ZmZXJJZCwgbmV4dCk7XG4gICAgICAgIGNvbnN0IG91dCA9IGF3YWl0IHN1Ym1pdFNpZGVjaGFpblN0YXRlUGF0Y2goe1xuICAgICAgICAgIHBhdGNoZXMsXG4gICAgICAgICAgYmFzaXNDbG9jazogTnVtYmVyKHRoaXMuc3RhdGUuc2lkZWNoYWluLmNsb2NrKSxcbiAgICAgICAgICBhZG1pblRva2VuOiBhdXRoLmFkbWluVG9rZW4sXG4gICAgICAgICAgZmVkZXJhdGlvbldpdG5lc3M6IGF1dGguZmVkZXJhdGlvbldpdG5lc3NcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvdXQub2spIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbG9hZGluZywgc2lkZWNoYWluLCBlcG9jaCwgZXBvY2hFcnJvciwgcGF0Y2hKc29uLCBiYXNpc0Nsb2NrTm90ZSwgbGFzdFBhdGNoUmVzdWx0LCBpbmJvdW5kT2ZmZXIsXG4gICAgICBqb3VybmFsLCBzbmFwc2hvdHMsIHNob3dDb250ZW50SnNvblxuICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgIHZvaWQgdGhpcy5zdGF0ZS5odWJVaUZsYWdzUmV2O1xuICAgIGNvbnN0IGh1YlVpID0gbG9hZEh1YlVpRmVhdHVyZUZsYWdzKCk7XG4gICAgY29uc3QgaGludCA9IHRoaXMuX3NlYWxlZERpZ2VzdEhpbnQoKTtcbiAgICBjb25zdCBiZWFjb24gPSBlcG9jaCAmJiBlcG9jaC5iZWFjb247XG4gICAgY29uc3QgbGFzdFBheWxvYWQgPSBiZWFjb24gJiYgYmVhY29uLmxhc3QgJiYgYmVhY29uLmxhc3QucGF5bG9hZDtcbiAgICBjb25zdCBwb2xpY3kgPSB0aGlzLl9lZmZlY3RpdmVQb2xpY3koKTtcbiAgICBjb25zdCBqb3VybmFsRW50cmllcyA9IChqb3VybmFsICYmIEFycmF5LmlzQXJyYXkoam91cm5hbC5lbnRyaWVzKSkgPyBqb3VybmFsLmVudHJpZXMgOiBbXTtcbiAgICBjb25zdCBzbmFwc2hvdFJvd3MgPSAoc25hcHNob3RzICYmIEFycmF5LmlzQXJyYXkoc25hcHNob3RzLnNuYXBzaG90cykpID8gc25hcHNob3RzLnNuYXBzaG90cyA6IFtdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTZWdtZW50Lkdyb3VwPlxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDJcIj5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjaGFpblwiIC8+XG4gICAgICAgICAgICBTaWRlY2hhaW4gKHNoYXJlZCBzdGF0ZSlcbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBtYXhXaWR0aDogJzUyZW0nIH19PlxuICAgICAgICAgICAgU2hhcmVkIEpTT04gYXQgPGNvZGU+c2lkZWNoYWluL1NUQVRFPC9jb2RlPiwgcGF0Y2hlZCB1bmRlciBvcHRpb25hbCBjb250cmFjdCBwYXRoIHBvbGljeSwgc2VhbGVkIGludG9cbiAgICAgICAgICAgIEJlYWNvbiBlcG9jaHMsIHJlY292ZXJhYmxlIHZpYSA8Y29kZT5TTkFQU0hPVFM8L2NvZGU+ICsgPGNvZGU+Sk9VUk5BTDwvY29kZT4uIFVzZSB0aGUgc2FtZSBIdWIgb3JpZ2luXG4gICAgICAgICAgICBmb3IgTEFOIG5vZGVzIChlLmcuIDxjb2RlPmh0dHA6Ly8xOTIuMTY4LjUwLjU6ODA4MDwvY29kZT4pLlxuICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgIDxMaW5rIHRvPVwiL2NvbnRyYWN0c1wiPkV4ZWN1dGlvbiBjb250cmFjdHM8L0xpbms+XG4gICAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgICAgPExpbmsgdG89XCIvZmVkZXJhdGlvbnNcIj5GZWRlcmF0aW9uczwvTGluaz5cbiAgICAgICAgICAgIHsnIMK3ICd9XG4gICAgICAgICAgICA8YSBocmVmPVwiL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL21hbmlmZXN0XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPm1hbmlmZXN0PC9hPlxuICAgICAgICAgICAgeycgwrcgJ31cbiAgICAgICAgICAgIDxhIGhyZWY9XCIvc2VydmljZXMvZGlzdHJpYnV0ZWQvc2lkZWNoYWluXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPkhUVFAgc3RhdGU8L2E+XG4gICAgICAgICAgICB7JyDCtyAnfVxuICAgICAgICAgICAgPGEgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC9zaWRlY2hhaW4vam91cm5hbFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5qb3VybmFsPC9hPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByb2xlPVwidG9vbGJhclwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiSHViIHNob3J0Y3V0c1wiXG4gICAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhXcmFwOiAnd3JhcCcsIGdhcDogJzAuMzVlbScsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBtYXJnaW5Cb3R0b206ICcwLjY1ZW0nIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgaWNvbiBsYWJlbFBvc2l0aW9uPVwibGVmdFwiIGFyaWEtbGFiZWw9XCJCYWNrIHRvIGhvbWVcIj5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImFycm93IGxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICBIb21lXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL2NvbnRyYWN0c1wiIGJhc2ljIHNpemU9XCJzbWFsbFwiIHRpdGxlPVwiRXhlY3V0aW9uIGNvbnRyYWN0cyBhbmQgTDEgcmVnaXN0cnlcIj5cbiAgICAgICAgICAgICAgQ29udHJhY3RzXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL2ZlZGVyYXRpb25zXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgaWNvbj1cInVzZXJzXCIgdGl0bGU9XCJNdWx0aS1zaWcgZmVkZXJhdGlvbiBwb2xpY3kgKGstb2YtbilcIj5cbiAgICAgICAgICAgICAgRmVkZXJhdGlvbnNcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pblwiIGJhc2ljIHNpemU9XCJzbWFsbFwiIHRpdGxlPVwiQml0Y29pbiBzdGF0dXMsIHJlZ3Rlc3QsIExpZ2h0bmluZ1wiPlxuICAgICAgICAgICAgICBCaXRjb2luXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIHtodWJVaS5iaXRjb2luUGF5bWVudHMgPyAoXG4gICAgICAgICAgICAgIDxCdXR0b24gYXM9e0xpbmt9IHRvPVwiL3BheW1lbnRzXCIgYmFzaWMgc2l6ZT1cInNtYWxsXCIgdGl0bGU9XCJQYXlqb2luIGFuZCBwYXltZW50c1wiPlxuICAgICAgICAgICAgICAgIFBheW1lbnRzXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7aHViVWkuYml0Y29pblJlc291cmNlcyA/IChcbiAgICAgICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pbi9yZXNvdXJjZXNcIiBiYXNpYyBzaXplPVwic21hbGxcIiB0aXRsZT1cIkhUVFAgcmVzb3VyY2VzIGFuZCBMMSB2ZXJpZnlcIj5cbiAgICAgICAgICAgICAgICBSZXNvdXJjZXNcbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtodWJVaS5iaXRjb2luQ3Jvd2RmdW5kID8gKFxuICAgICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2Nyb3dkZnVuZHNcIiBiYXNpYyBzaXplPVwic21hbGxcIiB0aXRsZT1cIlRhcHJvb3QgY3Jvd2RmdW5kIHZhdWx0XCI+XG4gICAgICAgICAgICAgICAgPEljb24gbmFtZT1cImhlYXJ0XCIgLz5cbiAgICAgICAgICAgICAgICBDcm93ZGZ1bmRzXG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPEJ1dHRvbiBwcmltYXJ5IGljb24gbG9hZGluZz17bG9hZGluZ30gb25DbGljaz17KCkgPT4gdGhpcy5yZWZyZXNoKCl9PlxuICAgICAgICAgICAgPEljb24gbmFtZT1cInJlZnJlc2hcIiAvPlxuICAgICAgICAgICAgUmVmcmVzaFxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIHtlcG9jaEVycm9yICYmIChcbiAgICAgICAgICAgIDxNZXNzYWdlIHdhcm5pbmcgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkZldGNoIHdhcm5pbmc8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICA8cD57ZXBvY2hFcnJvcn08L3A+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8RGlzdHJpYnV0ZWRGZWRlcmF0aW9uUGFuZWwgaGlkZVNpZGVjaGFpbk5hdkxpbmsgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fSAvPlxuICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgPEhlYWRlciBhcz1cImgzXCI+SGVhZCBzdGF0dXM8L0hlYWRlcj5cbiAgICAgICAgICA8U3RhdGlzdGljLkdyb3VwIHNpemU9XCJ0aW55XCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgIDxTdGF0aXN0aWM+XG4gICAgICAgICAgICAgIDxTdGF0aXN0aWMuVmFsdWU+e3NpZGVjaGFpbiAmJiBzaWRlY2hhaW4uY2xvY2sgIT0gbnVsbCA/IFN0cmluZyhzaWRlY2hhaW4uY2xvY2spIDogJ+KAlCd9PC9TdGF0aXN0aWMuVmFsdWU+XG4gICAgICAgICAgICAgIDxTdGF0aXN0aWMuTGFiZWw+TG9naWNhbCBjbG9jazwvU3RhdGlzdGljLkxhYmVsPlxuICAgICAgICAgICAgPC9TdGF0aXN0aWM+XG4gICAgICAgICAgICA8U3RhdGlzdGljPlxuICAgICAgICAgICAgICA8U3RhdGlzdGljLlZhbHVlPntqb3VybmFsICYmIGpvdXJuYWwudW5zZWFsZWRDb3VudCAhPSBudWxsID8gU3RyaW5nKGpvdXJuYWwudW5zZWFsZWRDb3VudCkgOiAn4oCUJ308L1N0YXRpc3RpYy5WYWx1ZT5cbiAgICAgICAgICAgICAgPFN0YXRpc3RpYy5MYWJlbD5VbnNlYWxlZCBqb3VybmFsPC9TdGF0aXN0aWMuTGFiZWw+XG4gICAgICAgICAgICA8L1N0YXRpc3RpYz5cbiAgICAgICAgICAgIDxTdGF0aXN0aWM+XG4gICAgICAgICAgICAgIDxTdGF0aXN0aWMuVmFsdWU+e3NuYXBzaG90cyAmJiBzbmFwc2hvdHMuc25hcHNob3RDb3VudCAhPSBudWxsID8gU3RyaW5nKHNuYXBzaG90cy5zbmFwc2hvdENvdW50KSA6ICfigJQnfTwvU3RhdGlzdGljLlZhbHVlPlxuICAgICAgICAgICAgICA8U3RhdGlzdGljLkxhYmVsPlNlYWxlZCBzbmFwc2hvdHM8L1N0YXRpc3RpYy5MYWJlbD5cbiAgICAgICAgICAgIDwvU3RhdGlzdGljPlxuICAgICAgICAgICAgPFN0YXRpc3RpYz5cbiAgICAgICAgICAgICAgPFN0YXRpc3RpYy5WYWx1ZT57YmVhY29uICYmIGJlYWNvbi5lcG9jaENvdW50ICE9IG51bGwgPyBTdHJpbmcoYmVhY29uLmVwb2NoQ291bnQpIDogJ+KAlCd9PC9TdGF0aXN0aWMuVmFsdWU+XG4gICAgICAgICAgICAgIDxTdGF0aXN0aWMuTGFiZWw+QmVhY29uIGVwb2NoczwvU3RhdGlzdGljLkxhYmVsPlxuICAgICAgICAgICAgPC9TdGF0aXN0aWM+XG4gICAgICAgICAgPC9TdGF0aXN0aWMuR3JvdXA+XG4gICAgICAgICAgPExhYmVsIGNvbG9yPXtoaW50LmNvbG9yfSBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0+e2hpbnQudGV4dH08L0xhYmVsPlxuICAgICAgICAgIHtzaWRlY2hhaW4gJiYgc2lkZWNoYWluLnN0YXRlRGlnZXN0ID8gKFxuICAgICAgICAgICAgPHAgc3R5bGU9e3sgZm9udEZhbWlseTogJ21vbm9zcGFjZScsIGZvbnRTaXplOiAnMTJweCcsIGNvbG9yOiAnIzQ0NCcsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+XG4gICAgICAgICAgICAgIHN0YXRlRGlnZXN0OiB7c2lkZWNoYWluLnN0YXRlRGlnZXN0fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHtiYXNpc0Nsb2NrTm90ZSAmJiA8cCBzdHlsZT17eyBjb2xvcjogJyM1NTUnIH19PntiYXNpc0Nsb2NrTm90ZX08L3A+fVxuICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgPEhlYWRlciBhcz1cImgzXCI+Q29udHJhY3QgcGF0aCBwb2xpY3k8L0hlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJywgbWF4V2lkdGg6ICc0OGVtJyB9fT5cbiAgICAgICAgICAgIEZyb20gaHViIHNldHRpbmdzIC8gZW52ICg8Y29kZT5zaWRlY2hhaW5Qb2xpY3k8L2NvZGU+IG9uIHRoZSBkaXN0cmlidXRlZCBtYW5pZmVzdCkuIEVtcHR5IG1lYW5zIGFueVxuICAgICAgICAgICAgUkZDNjkwMiBwYXRoIHVuZGVyIDxjb2RlPmNvbnRlbnQ8L2NvZGU+IGlzIGFsbG93ZWQgKHN0aWxsIHJlcXVpcmVzIGFkbWluIG9yIGZlZGVyYXRpb24gYXV0aCkuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIHtwb2xpY3kgPyAoXG4gICAgICAgICAgICA8cHJlIHN0eWxlPXt7IGZvbnRTaXplOiAnMTJweCcsIG92ZXJmbG93OiAnYXV0bycgfX0+e3NhZmVKc29uKHBvbGljeSl9PC9wcmU+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxNZXNzYWdlIGluZm8+Tm8gcGF0aCBwb2xpY3kgY29uZmlndXJlZCDigJQgcGF0Y2hlcyBhcmUgYXV0aC1nYXRlZCBvbmx5LjwvTWVzc2FnZT5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NlZ21lbnQ+XG5cbiAgICAgICAgPFNlZ21lbnQ+XG4gICAgICAgICAgPEhlYWRlciBhcz1cImgzXCI+QmVhY29uIC8gZGlzdHJpYnV0ZWQgZXBvY2g8L0hlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJywgbWFyZ2luQm90dG9tOiAnMC43NWVtJywgbWF4V2lkdGg6ICc0OGVtJyB9fT5cbiAgICAgICAgICAgIEh1YiBzdW1tYXJ5IChub3QgdGhlIGZ1bGwgc2VhbGVkIG1lc3NhZ2UpLiBDb21wYXJlIGFueSBMMSBoZWlnaHQvaGFzaCBpbiB0aGUgbGl2ZSBlcG9jaCBwYXlsb2FkIHRvIHlvdXIgbm9kZTsgcmUtdmVyaWZ5IFNjaG5vcnIgd2l0bmVzcyBieXRlcyBhZ2FpbnN0IHRoZSBtYW5pZmVzdCBwdWJrZXlzIChzZWUgdGhlIEZlZGVyYXRpb24gZ3VhcmFudGVlcyBwYW5lbCBhYm92ZSkuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIHtiZWFjb24gPyAoXG4gICAgICAgICAgICA8cHJlIHN0eWxlPXt7IGZvbnRTaXplOiAnMTJweCcsIG92ZXJmbG93OiAnYXV0bycgfX0+e3NhZmVKc29uKHtcbiAgICAgICAgICAgICAgc3RhdHVzOiBiZWFjb24uc3RhdHVzLFxuICAgICAgICAgICAgICBjbG9jazogYmVhY29uLmNsb2NrLFxuICAgICAgICAgICAgICBtZXJrbGVSb290OiBiZWFjb24ubWVya2xlUm9vdCxcbiAgICAgICAgICAgICAgZXBvY2hDb3VudDogYmVhY29uLmVwb2NoQ291bnQsXG4gICAgICAgICAgICAgIGxhc3RDb21taXRtZW50RGlnZXN0OiBiZWFjb24ubGFzdENvbW1pdG1lbnREaWdlc3QsXG4gICAgICAgICAgICAgIGxhc3RMMUJpbmRpbmc6IGxhc3RQYXlsb2FkXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBiZWFjb25DbG9jazogbGFzdFBheWxvYWQuY2xvY2ssXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IGxhc3RQYXlsb2FkLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgIGJsb2NrSGFzaDogbGFzdFBheWxvYWQuYmxvY2tIYXNoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgbGFzdFNpZGVjaGFpbjogbGFzdFBheWxvYWQgJiYgbGFzdFBheWxvYWQuc2lkZWNoYWluXG4gICAgICAgICAgICB9KX08L3ByZT5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbz5ObyBlcG9jaCBkYXRhIHlldC48L01lc3NhZ2U+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TZWdtZW50PlxuXG4gICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiPlNlYWxlZCBzbmFwc2hvdHM8L0hlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJyB9fT5cbiAgICAgICAgICAgIEZ1bGwgc3RhdGUgY29waWVzIGtleWVkIGJ5IEJlYWNvbiA8Y29kZT5wYXlsb2FkLmNsb2NrPC9jb2RlPiAocmVvcmcgcmV3aW5kKS4gRGlnZXN0cyBvbmx5IGJlbG93LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICB7c25hcHNob3RSb3dzLmxlbmd0aCA/IChcbiAgICAgICAgICAgIDxUYWJsZSBjZWxsZWQgY29tcGFjdCBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+QmVhY29uIGNsb2NrPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+U2lkZWNoYWluIGNsb2NrPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+c3RhdGVEaWdlc3Q8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgIDwvVGFibGUuSGVhZGVyPlxuICAgICAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgICAgICB7c25hcHNob3RSb3dzLm1hcCgocm93KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8VGFibGUuUm93IGtleT17YHNuYXAtJHtyb3cuYmVhY29uQ2xvY2t9YH0+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntyb3cuYmVhY29uQ2xvY2t9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57cm93LnNpZGVjaGFpbkNsb2NrfTwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwgc3R5bGU9e3sgZm9udEZhbWlseTogJ21vbm9zcGFjZScsIGZvbnRTaXplOiAnMTFweCcgfX0+XG4gICAgICAgICAgICAgICAgICAgICAge3RoaXMuX3Nob3J0RGlnZXN0KHJvdy5zdGF0ZURpZ2VzdCwgMTIpfVxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbz5ObyBzbmFwc2hvdHMgeWV0IOKAlCB3YWl0IGZvciBhIEJlYWNvbiBlcG9jaCBhZnRlciBzdGF0ZSBleGlzdHMuPC9NZXNzYWdlPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIj5QYXRjaCBqb3VybmFsPC9IZWFkZXI+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgZm9udFNpemU6ICcwLjllbScgfX0+XG4gICAgICAgICAgICBBcHBlbmQtb25seSB0cmFuc2l0aW9ucy4gPGNvZGU+c2VhbGVkQmVhY29uQ2xvY2s8L2NvZGU+IGlzIHNldCB3aGVuIGFuIGVwb2NoIHNlYWxzIHRoYXQgc2lkZWNoYWluIGNsb2NrO1xuICAgICAgICAgICAgbnVsbCBtZWFucyB1bnNlYWxlZCAocmVwbGF5ZWQgb24gcmVzdG9yZSkuXG4gICAgICAgICAgICB7am91cm5hbCA/IGAgU2hvd2luZyAke2pvdXJuYWxFbnRyaWVzLmxlbmd0aH0gb2YgJHtqb3VybmFsLmVudHJ5Q291bnR9LmAgOiAnJ31cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAge2pvdXJuYWxFbnRyaWVzLmxlbmd0aCA/IChcbiAgICAgICAgICAgIDxUYWJsZSBjZWxsZWQgY29tcGFjdCBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgICA8VGFibGUuUm93PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+c2VxPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+Y2xvY2s8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5zZWFsZWQ8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5vcHM8L1RhYmxlLkhlYWRlckNlbGw+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuSGVhZGVyQ2VsbD5wYXRoczwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPnBhdGNoRGlnZXN0PC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICAgIDwvVGFibGUuUm93PlxuICAgICAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICAgICAge2pvdXJuYWxFbnRyaWVzLm1hcCgocm93KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8VGFibGUuUm93IGtleT17YGotJHtyb3cuc2VxfWB9IHdhcm5pbmc9e3Jvdy5zZWFsZWRCZWFjb25DbG9jayA9PSBudWxsfT5cbiAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+e3Jvdy5zZXF9PC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD57cm93LmJhc2lzQ2xvY2t94oaSe3Jvdy5jbG9ja308L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAgICAgIHtyb3cuc2VhbGVkQmVhY29uQ2xvY2sgPT0gbnVsbCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxMYWJlbCBzaXplPVwibWluaVwiIGNvbG9yPVwib3JhbmdlXCI+dW5zZWFsZWQ8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICByb3cuc2VhbGVkQmVhY29uQ2xvY2tcbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsPntyb3cub3BDb3VudH08L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIHN0eWxlPXt7IGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnLCBmb250U2l6ZTogJzExcHgnIH19PlxuICAgICAgICAgICAgICAgICAgICAgIHsocm93LnBhdGhzIHx8IFtdKS5qb2luKCcsICcpIHx8ICfigJQnfVxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIHN0eWxlPXt7IGZvbnRGYW1pbHk6ICdtb25vc3BhY2UnLCBmb250U2l6ZTogJzExcHgnIH19PlxuICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLl9zaG9ydERpZ2VzdChyb3cucGF0Y2hEaWdlc3QsIDgpfVxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPE1lc3NhZ2UgaW5mbz5Kb3VybmFsIGVtcHR5IOKAlCBhcHBseSBhIHBhdGNoIHRvIGNyZWF0ZSB0aGUgZmlyc3QgZW50cnkuPC9NZXNzYWdlPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIj5MaXZlIHNpZGVjaGFpbiBzdGF0ZTwvSGVhZGVyPlxuICAgICAgICAgIDxMYWJlbCBjb2xvcj17aGludC5jb2xvcn0gc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT57aGludC50ZXh0fTwvTGFiZWw+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjc1ZW0nIH19XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLnNldFN0YXRlKHsgc2hvd0NvbnRlbnRKc29uOiAhc2hvd0NvbnRlbnRKc29uIH0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzaG93Q29udGVudEpzb24gPyAnSGlkZSBmdWxsIEpTT04nIDogJ1Nob3cgZnVsbCBKU09OJ31cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICB7c2hvd0NvbnRlbnRKc29uID8gKFxuICAgICAgICAgICAgc2lkZWNoYWluID8gKFxuICAgICAgICAgICAgICA8cHJlIHN0eWxlPXt7IGZvbnRTaXplOiAnMTJweCcsIG92ZXJmbG93OiAnYXV0bycsIG1heEhlaWdodDogJzIyZW0nIH19PntzYWZlSnNvbihzaWRlY2hhaW4pfTwvcHJlPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPE1lc3NhZ2Ugd2FybmluZz5Db3VsZCBub3QgbG9hZCBHZXRTaWRlY2hhaW5TdGF0ZSAoY2hlY2sgSHViIFJQQyBhbmQgc2Vzc2lvbikuPC9NZXNzYWdlPlxuICAgICAgICAgICAgKVxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgICBGdWxsIGRvY3VtZW50IGhpZGRlbiBieSBkZWZhdWx0LiBDbG9jayBhbmQgZGlnZXN0IGFyZSBpbiA8c3Ryb25nPkhlYWQgc3RhdHVzPC9zdHJvbmc+IGFib3ZlLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2Jhc2lzQ2xvY2tOb3RlICYmIDxwIHN0eWxlPXt7IGNvbG9yOiAnIzU1NScgfX0+e2Jhc2lzQ2xvY2tOb3RlfTwvcD59XG4gICAgICAgIDwvU2VnbWVudD5cblxuICAgICAgICA8U2VnbWVudD5cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDNcIj5TdWJtaXQgSlNPTiBQYXRjaCAoYWRtaW4gb3IgZmVkZXJhdGlvbik8L0hlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnIH19PlxuICAgICAgICAgICAgUkZDNjkwMiBvcHMgYXBwbHkgdG8gPGNvZGU+Y29udGVudDwvY29kZT4gb25seS4gUmVxdWlyZXMgPGNvZGU+YmFzaXNDbG9jazwvY29kZT4gZXF1YWwgdG8gY3VycmVudCBjbG9jay5cbiAgICAgICAgICAgIEh1YiBwb2xpY3kgZm9yIGFkbWluIHRva2VuIHZzIDxjb2RlPmZlZGVyYXRpb25XaXRuZXNzPC9jb2RlPiAoay1vZi1uKSBpcyBzdW1tYXJpemVkIGluIDxzdHJvbmc+RmVkZXJhdGlvbiBndWFyYW50ZWVzPC9zdHJvbmc+IGFib3ZlLlxuICAgICAgICAgICAgV2l0aG91dCB2YWxpZGF0b3JzIGNvbmZpZ3VyZWQsIHVzZSB5b3VyIGFkbWluIHRva2VuIGZyb20gU2V0dGluZ3M7IGl0IGlzIHJlYWQgZnJvbSB0aGUgc2FtZSBzdG9yZSBhcyBvdGhlciBhZG1pbiBmbG93cy5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICA8cCBzdHlsZT17eyBtYXJnaW46ICcwIDAgMC41ZW0nLCBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJyB9fSBpZD1cImZhYnJpYy1zaWRlY2hhaW4td2l0bmVzcy1pbnRyb1wiPlxuICAgICAgICAgICAgICA8c3Ryb25nPkZlZGVyYXRpb24gd2l0bmVzczwvc3Ryb25nPiDigJQgb3B0aW9uYWwgd2hlbiB0aGUgaHViIGlzIGFkbWluLW9ubHk7IDxzdHJvbmc+cmVxdWlyZWQ8L3N0cm9uZz4gd2hlbiB2YWxpZGF0b3JzIGFyZSBjb25maWd1cmVkLlxuICAgICAgICAgICAgICBVc2VkIGZvciA8c3Ryb25nPkFwcGx5IHBhdGNoPC9zdHJvbmc+IGFuZCA8c3Ryb25nPmV2ZXJ5PC9zdHJvbmc+IGRvY3VtZW50LW9mZmVyIC8gTDEgZXNjcm93IHNpZGVjaGFpbiBhY3Rpb24gYmVsb3cgKHNhbWUgPGNvZGU+U3VibWl0U2lkZWNoYWluU3RhdGVQYXRjaDwvY29kZT4gdmVyaWZpY2F0aW9uKS4gRXhhbXBsZTp7JyAnfVxuICAgICAgICAgICAgICA8Y29kZSBzdHlsZT17eyBmb250U2l6ZTogJzExcHgnIH19Pnsne1widmVyc2lvblwiOjEsXCJzaWduYXR1cmVzXCI6e1wiMDPigKZcIjpcIjxzY2hub3JyIHNpZyBoZXg+XCJ9fSd9PC9jb2RlPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJmYWJyaWMtc2lkZWNoYWluLWZlZGVyYXRpb24td2l0bmVzc1wiIHN0eWxlPXt7IGRpc3BsYXk6ICdibG9jaycsIG1hcmdpbkJvdHRvbTogJzAuMzVlbScsIGZvbnRXZWlnaHQ6IDYwMCB9fT5cbiAgICAgICAgICAgICAgRmVkZXJhdGlvbiB3aXRuZXNzIEpTT05cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8VGV4dEFyZWFcbiAgICAgICAgICAgICAgaWQ9XCJmYWJyaWMtc2lkZWNoYWluLWZlZGVyYXRpb24td2l0bmVzc1wiXG4gICAgICAgICAgICAgIHJvd3M9ezV9XG4gICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmZlZGVyYXRpb25XaXRuZXNzSnNvbn1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB7IHZhbHVlIH0pID0+IHRoaXMuc2V0U3RhdGUoeyBmZWRlcmF0aW9uV2l0bmVzc0pzb246IHZhbHVlIH0pfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ne1widmVyc2lvblwiOjEsXCJzaWduYXR1cmVzXCI6e319J1xuICAgICAgICAgICAgICBzdHlsZT17eyBmb250RmFtaWx5OiAnbW9ub3NwYWNlJywgZm9udFNpemU6ICcxMnB4JyB9fVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRmVkZXJhdGlvbiB3aXRuZXNzIEpTT04gZm9yIFN1Ym1pdFNpZGVjaGFpblN0YXRlUGF0Y2hcIlxuICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiZmFicmljLXNpZGVjaGFpbi13aXRuZXNzLWludHJvXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxLjI1ZW0nLCBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX0gaWQ9XCJmYWJyaWMtc2lkZWNoYWluLXJhdy1wYXRjaC1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgIFJhdyBwYXRjaCAoUkZDNjkwMilcbiAgICAgICAgICAgIDwvSGVhZGVyPlxuICAgICAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgICAgIGlkPVwiZmFicmljLXNpZGVjaGFpbi1wYXRjaC1qc29uXCJcbiAgICAgICAgICAgICAgcm93cz17MTJ9XG4gICAgICAgICAgICAgIHZhbHVlPXtwYXRjaEpzb259XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiB0aGlzLnNldFN0YXRlKHsgcGF0Y2hKc29uOiB2YWx1ZSB9KX1cbiAgICAgICAgICAgICAgc3R5bGU9e3sgZm9udEZhbWlseTogJ21vbm9zcGFjZScsIGZvbnRTaXplOiAnMTJweCcgfX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJGQzY5MDIgSlNPTiBQYXRjaCBvcGVyYXRpb25zIGZvciBzaWRlY2hhaW4gY29udGVudFwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImZhYnJpYy1zaWRlY2hhaW4tcmF3LXBhdGNoLWhlYWRpbmdcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxCdXR0b24gc3R5bGU9e3sgbWFyZ2luVG9wOiAnMC43NWVtJyB9fSBwcmltYXJ5IG9uQ2xpY2s9eygpID0+IHRoaXMuX3N1Ym1pdFJhd1BhdGNoKCl9PlxuICAgICAgICAgICAgICBBcHBseSBwYXRjaFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgIHtsYXN0UGF0Y2hSZXN1bHQgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2Ugc3VjY2VzcyBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxZW0nIH19PlxuICAgICAgICAgICAgICA8cHJlIHN0eWxlPXt7IGZvbnRTaXplOiAnMTFweCcgfX0+e3NhZmVKc29uKGxhc3RQYXRjaFJlc3VsdCl9PC9wcmU+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TZWdtZW50PlxuXG4gICAgICAgIDxTZWdtZW50PlxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoM1wiPkRPQ1VNRU5UX09GRkVSIOKAlCBMMSBlc2Nyb3cgKFRhcHJvb3QgSFRMQyk8L0hlYWRlcj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM2NjYnLCBmb250U2l6ZTogJzAuOWVtJywgbWFyZ2luQm90dG9tOiAnMC43NWVtJyB9fT5cbiAgICAgICAgICAgIFNpZGVjaGFpbiB1cGRhdGVzIGZyb20gdGhpcyBzZWN0aW9uIHVzZSB0aGUgc2FtZSA8c3Ryb25nPkZlZGVyYXRpb24gd2l0bmVzczwvc3Ryb25nPiBmaWVsZCBhbmQgYWRtaW4gdG9rZW4gYXMgPHN0cm9uZz5TdWJtaXQgSlNPTiBQYXRjaDwvc3Ryb25nPiBhYm92ZS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWF4V2lkdGg6ICc1MmVtJyB9fT5cbiAgICAgICAgICAgIEVzY3JvdyBtYXRjaGVzIGludmVudG9yeSBIVExDOiA8c3Ryb25nPmRlbGl2ZXJlcjwvc3Ryb25nPiBjbGFpbXMgd2l0aCBwcmVpbWFnZSArIFNjaG5vcnIgYWZ0ZXIgdGhlIGluaXRpYXRvclxuICAgICAgICAgICAgcHVibGlzaGVzIDxjb2RlPnJldmVhbGVkUHJlaW1hZ2VIZXg8L2NvZGU+IG9uIHRoZSBzaWRlY2hhaW47IDxzdHJvbmc+aW5pdGlhdG9yPC9zdHJvbmc+IHJlZnVuZHMgYWZ0ZXJ7JyAnfVxuICAgICAgICAgICAgPGNvZGU+cmVmdW5kTG9ja0hlaWdodDwvY29kZT4gKENMVFYpLiBTaW5nbGUgU0hBLTI1NiBwcmVpbWFnZSDihpIgPGNvZGU+cGF5bWVudEhhc2hIZXg8L2NvZGU+IGluIHRoZSBzY3JpcHQuXG4gICAgICAgICAgICBPbiByZWd0ZXN0LCA8Y29kZT5Ccm9hZGNhc3RTaWduZWRUcmFuc2FjdGlvbjwvY29kZT4gZG9lcyBub3QgcmVxdWlyZSBhbiBhZG1pbiB0b2tlbjsgb3RoZXIgbmV0d29ya3MgcmVxdWlyZVxuICAgICAgICAgICAgYWRtaW4gb3IgPGNvZGU+c2V0dGluZ3MuYml0Y29pbi5wdWJsaWNEb2N1bWVudE9mZmVyQnJvYWRjYXN0PC9jb2RlPi5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAge2luYm91bmRPZmZlciAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZSBpbmZvIG9uRGlzbWlzcz17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7IGluYm91bmRPZmZlcjogbnVsbCB9KX0+XG4gICAgICAgICAgICAgIDxNZXNzYWdlLkhlYWRlcj5MYXN0IGluYm91bmQgb2ZmZXIgZW52ZWxvcGU8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgICAgICA8cHJlIHN0eWxlPXt7IGZvbnRTaXplOiAnMTFweCcgfX0+e3NhZmVKc29uKGluYm91bmRPZmZlcil9PC9wcmU+XG4gICAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8SGVhZGVyIGFzPVwiaDRcIj4xLiBPZmZlciArIGVzY3JvdyBwYXJhbXM8L0hlYWRlcj5cbiAgICAgICAgICA8Rm9ybT5cbiAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgIGxhYmVsPVwiRG9jdW1lbnQgaWRcIlxuICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5vZmZlckRvY3VtZW50SWR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiB0aGlzLnNldFN0YXRlKHsgb2ZmZXJEb2N1bWVudElkOiB2YWx1ZSB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgICAgICBsYWJlbD1cIlJld2FyZCAoc2F0cykg4oCUIG1pbiBwYWlkIHRvIGVzY3JvdyBvdXRwdXRcIlxuICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5vZmZlclJld2FyZFNhdHN9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiB0aGlzLnNldFN0YXRlKHsgb2ZmZXJSZXdhcmRTYXRzOiB2YWx1ZSB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgICAgICBsYWJlbD1cIk1lbW9cIlxuICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5vZmZlck1lbW99XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiB0aGlzLnNldFN0YXRlKHsgb2ZmZXJNZW1vOiB2YWx1ZSB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgICAgICBsYWJlbD1cIk9mZmVyIGlkIChvcHRpb25hbCDigJQgZ2VuZXJhdGVkIGlmIGVtcHR5IHdoZW4gcmVjb3JkaW5nKVwiXG4gICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmwxT2ZmZXJJZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB7IHZhbHVlIH0pID0+IHRoaXMuc2V0U3RhdGUoeyBsMU9mZmVySWQ6IHZhbHVlIH0pfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImxlYXZlIGJsYW5rIHRvIGF1dG8tZ2VuZXJhdGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxGb3JtLkNoZWNrYm94XG4gICAgICAgICAgICAgIGxhYmVsPVwiUG9zdCBET0NVTUVOVF9PRkZFUiBtYXJrZXIgdG8gYWN0aXZpdHkgY2hhdCB3aGVuIHJlY29yZGluZyBvbiBzaWRlY2hhaW5cIlxuICAgICAgICAgICAgICBjaGVja2VkPXt0aGlzLnN0YXRlLm9mZmVyQW5ub3VuY2VDaGF0fVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHsgY2hlY2tlZCB9KSA9PiB0aGlzLnNldFN0YXRlKHsgb2ZmZXJBbm5vdW5jZUNoYXQ6ICEhY2hlY2tlZCB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc2l6ZT1cInNtYWxsXCIgb25DbGljaz17KCkgPT4gdGhpcy5fZ2VuRXNjcm93UHJlaW1hZ2UoKX0+XG4gICAgICAgICAgICAgIEdlbmVyYXRlIGVzY3JvdyBwcmVpbWFnZSAoMzIgYnl0ZXMpXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgIGxhYmVsPVwiRXNjcm93IHByZWltYWdlIGhleCAoc2VjcmV0IOKAlCBzYW1lIG1hY2hpbmUgdW50aWwgcmV2ZWFsIHN0ZXApXCJcbiAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZXNjcm93UHJlaW1hZ2VIZXh9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBlc2Nyb3dQcmVpbWFnZUhleDogdmFsdWUsXG4gICAgICAgICAgICAgICAgZXNjcm93UGF5bWVudEhhc2hIZXg6IHBheW1lbnRIYXNoSGV4RnJvbVByZWltYWdlSGV4KHZhbHVlKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgICAgICBsYWJlbD1cIlBheW1lbnQgaGFzaCBTSEEyNTYocHJlaW1hZ2UpIOKAlCBhdXRvIGZyb20gcHJlaW1hZ2VcIlxuICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5lc2Nyb3dQYXltZW50SGFzaEhleH1cbiAgICAgICAgICAgICAgcmVhZE9ubHlcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgICAgICBsYWJlbD1cIkRlbGl2ZXJlciBjb21wcmVzc2VkIHB1YmtleSAoNjYgaGV4KSDigJQgY2xhaW0gcGF0aFwiXG4gICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmVzY3Jvd0RlbGl2ZXJlclB1YmtleX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB7IHZhbHVlIH0pID0+IHRoaXMuc2V0U3RhdGUoeyBlc2Nyb3dEZWxpdmVyZXJQdWJrZXk6IHZhbHVlIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgIGxhYmVsPVwiSW5pdGlhdG9yIHJlZnVuZCBjb21wcmVzc2VkIHB1YmtleSAoNjYgaGV4KSDigJQgQ0xUViByZWZ1bmQgcGF0aFwiXG4gICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmVzY3Jvd0luaXRpYXRvclJlZnVuZFB1YmtleX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB7IHZhbHVlIH0pID0+IHRoaXMuc2V0U3RhdGUoeyBlc2Nyb3dJbml0aWF0b3JSZWZ1bmRQdWJrZXk6IHZhbHVlIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxGb3JtLkdyb3VwIHdpZHRocz1cImVxdWFsXCI+XG4gICAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgICAgbGFiZWw9XCJyZWZ1bmRMb2NrSGVpZ2h0IChhYnNvbHV0ZSBibG9jayBoZWlnaHQpXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5lc2Nyb3dSZWZ1bmRMb2NrSGVpZ2h0fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiB0aGlzLnNldFN0YXRlKHsgZXNjcm93UmVmdW5kTG9ja0hlaWdodDogdmFsdWUgfSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgICAgbGFiZWw9XCJEZWx0YSBibG9ja3MgKHVzZWQgd2l0aCBidXR0b24gYmVsb3cpXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5lc2Nyb3dSZWZ1bmREZWx0YX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHsgdmFsdWUgfSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGVzY3Jvd1JlZnVuZERlbHRhOiB2YWx1ZSB9KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvRm9ybS5Hcm91cD5cbiAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cImJ1dHRvblwiIHNpemU9XCJzbWFsbFwiIG9uQ2xpY2s9eygpID0+IHRoaXMuX3N5bmNSZWZ1bmRMb2NrRnJvbVRpcCgpfT5cbiAgICAgICAgICAgICAgU2V0IHJlZnVuZCBsb2NrIGZyb20gY2hhaW4gdGlwICsgZGVsdGFcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPERpdmlkZXIgLz5cbiAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cImJ1dHRvblwiIHByaW1hcnkgb25DbGljaz17KCkgPT4gdGhpcy5fYnVpbGRFc2Nyb3dBZGRyZXNzKCl9PlxuICAgICAgICAgICAgICBCdWlsZCBlc2Nyb3cgYWRkcmVzcyAoUlBDKVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBjb2xvcj1cInRlYWxcIiBzdHlsZT17eyBtYXJnaW5MZWZ0OiAnMC41ZW0nIH19IG9uQ2xpY2s9eygpID0+IHRoaXMuX3JlY29yZEwxT2ZmZXJPblNpZGVjaGFpbigpfT5cbiAgICAgICAgICAgICAgUmVjb3JkIG9mZmVyIG9uIHNpZGVjaGFpbiAoZnVuZGluZ19wZW5kaW5nKVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgIHt0aGlzLnN0YXRlLmVzY3Jvd0J1aWxkUmVzdWx0ICYmIHRoaXMuc3RhdGUuZXNjcm93QnVpbGRSZXN1bHQucGF5bWVudEFkZHJlc3MgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2UgcG9zaXRpdmUgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMWVtJyB9fT5cbiAgICAgICAgICAgICAgPE1lc3NhZ2UuSGVhZGVyPkVzY3JvdyBmdW5kaW5nPC9NZXNzYWdlLkhlYWRlcj5cbiAgICAgICAgICAgICAgPHA+PHN0cm9uZz5BZGRyZXNzOjwvc3Ryb25nPiA8Y29kZT57dGhpcy5zdGF0ZS5lc2Nyb3dCdWlsZFJlc3VsdC5wYXltZW50QWRkcmVzc308L2NvZGU+PC9wPlxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5lc2Nyb3dCdWlsZFJlc3VsdC5iaXRjb2luVXJpID8gKFxuICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+QklQMjE6PC9zdHJvbmc+IDxjb2RlIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+e3RoaXMuc3RhdGUuZXNjcm93QnVpbGRSZXN1bHQuYml0Y29pblVyaX08L2NvZGU+PC9wPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMS4yNWVtJyB9fT4yLiBDb25maXJtIEwxIGZ1bmRpbmc8L0hlYWRlcj5cbiAgICAgICAgICA8Rm9ybT5cbiAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgIGxhYmVsPVwiRnVuZGluZyB0eGlkXCJcbiAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUubDFGdW5kaW5nVHhpZH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB7IHZhbHVlIH0pID0+IHRoaXMuc2V0U3RhdGUoeyBsMUZ1bmRpbmdUeGlkOiB2YWx1ZSB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiB0aGlzLl92ZXJpZnlMMUZ1bmRpbmdBbmRQYXRjaCgpfT5cbiAgICAgICAgICAgICAgVmVyaWZ5IGZ1bmRpbmcgYW5kIHBhdGNoIHRvIGZ1bmRlZFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Gb3JtPlxuXG4gICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMS4yNWVtJyB9fT4zLiBEZWxpdmVyeSDigJQgcmV2ZWFsIHByZWltYWdlIChpbml0aWF0b3IpPC9IZWFkZXI+XG4gICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5fcmV2ZWFsUHJlaW1hZ2VEZWxpdmVyZWQoKX0+XG4gICAgICAgICAgICBQYXRjaCBvZmZlciDihpIgZGVsaXZlcmVkICsgcmV2ZWFsZWRQcmVpbWFnZUhleFxuICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgPEhlYWRlciBhcz1cImg0XCIgc3R5bGU9e3sgbWFyZ2luVG9wOiAnMS4yNWVtJyB9fT40YS4gRXhpdCDigJQgZGVsaXZlcmVyIGNsYWltPC9IZWFkZXI+XG4gICAgICAgICAgPEZvcm0+XG4gICAgICAgICAgICA8Rm9ybS5JbnB1dFxuICAgICAgICAgICAgICBsYWJlbD1cIkNsYWltIHBheW91dCBhZGRyZXNzXCJcbiAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUubDFDbGFpbURlc3RBZGRyZXNzfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHsgdmFsdWUgfSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGwxQ2xhaW1EZXN0QWRkcmVzczogdmFsdWUgfSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEZvcm0uSW5wdXRcbiAgICAgICAgICAgICAgbGFiZWw9XCJGZWUgKHNhdHMpXCJcbiAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUubDFGZWVDbGFpbVNhdHN9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiB0aGlzLnNldFN0YXRlKHsgbDFGZWVDbGFpbVNhdHM6IHZhbHVlIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgIGxhYmVsPVwiRGVsaXZlcmVyIHNlY3AyNTZrMSBwcml2a2V5ICg2NCBoZXgpIOKAlCBzdGF5cyBpbiBicm93c2VyXCJcbiAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUubDFEZWxpdmVyZXJQcml2SGV4fVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHsgdmFsdWUgfSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGwxRGVsaXZlcmVyUHJpdkhleDogdmFsdWUgfSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5fcHJlcGFyZURlbGl2ZXJlckNsYWltKCl9PlxuICAgICAgICAgICAgICBQcmVwYXJlIGNsYWltIFBTQlRcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcG9zaXRpdmUgc3R5bGU9e3sgbWFyZ2luTGVmdDogJzAuNWVtJyB9fSBvbkNsaWNrPXsoKSA9PiB0aGlzLl9zaWduQW5kQnJvYWRjYXN0Q2xhaW0oKX0+XG4gICAgICAgICAgICAgIFNpZ24gYW5kIGJyb2FkY2FzdCBjbGFpbVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Gb3JtPlxuICAgICAgICAgIHt0aGlzLnN0YXRlLmwxTGFzdFBzYnRDbGFpbSA/IChcbiAgICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiAnMTFweCcsIGNvbG9yOiAnIzY2NicsIHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+XG4gICAgICAgICAgICAgIExhc3QgY2xhaW0gUFNCVCAoYmFzZTY0KToge3RoaXMuc3RhdGUubDFMYXN0UHNidENsYWltLnNsaWNlKDAsIDgwKX3igKZcbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzEuMjVlbScgfX0+NGIuIEV4aXQg4oCUIGluaXRpYXRvciByZWZ1bmQgKGFmdGVyIENMVFYgaGVpZ2h0KTwvSGVhZGVyPlxuICAgICAgICAgIDxGb3JtPlxuICAgICAgICAgICAgPEZvcm0uSW5wdXRcbiAgICAgICAgICAgICAgbGFiZWw9XCJSZWZ1bmQgcGF5b3V0IGFkZHJlc3NcIlxuICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5sMVJlZnVuZERlc3RBZGRyZXNzfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHsgdmFsdWUgfSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGwxUmVmdW5kRGVzdEFkZHJlc3M6IHZhbHVlIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgIGxhYmVsPVwiRmVlIChzYXRzKVwiXG4gICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmwxRmVlUmVmdW5kU2F0c31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB7IHZhbHVlIH0pID0+IHRoaXMuc2V0U3RhdGUoeyBsMUZlZVJlZnVuZFNhdHM6IHZhbHVlIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxGb3JtLklucHV0XG4gICAgICAgICAgICAgIGxhYmVsPVwiSW5pdGlhdG9yIHJlZnVuZCBwcml2a2V5ICg2NCBoZXgpIOKAlCBzdGF5cyBpbiBicm93c2VyXCJcbiAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUubDFJbml0aWF0b3JQcml2SGV4fVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHsgdmFsdWUgfSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGwxSW5pdGlhdG9yUHJpdkhleDogdmFsdWUgfSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gdGhpcy5fcHJlcGFyZUluaXRpYXRvclJlZnVuZCgpfT5cbiAgICAgICAgICAgICAgUHJlcGFyZSByZWZ1bmQgUFNCVFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uIHR5cGU9XCJidXR0b25cIiBjb2xvcj1cIm9yYW5nZVwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjVlbScgfX0gb25DbGljaz17KCkgPT4gdGhpcy5fc2lnbkFuZEJyb2FkY2FzdFJlZnVuZCgpfT5cbiAgICAgICAgICAgICAgU2lnbiAmYW1wOyBicm9hZGNhc3QgcmVmdW5kXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L0Zvcm0+XG5cbiAgICAgICAgICA8RGl2aWRlciAvPlxuICAgICAgICAgIDxIZWFkZXIgYXM9XCJoNFwiPlNpZGVjaGFpbi1vbmx5IHJlaGVhcnNhbCAobm8gTDEpPC9IZWFkZXI+XG4gICAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY29sb3I9XCJ0ZWFsXCIgc2l6ZT1cInNtYWxsXCIgb25DbGljaz17KCkgPT4gdGhpcy5fc3VibWl0RG9jdW1lbnRPZmZlckRlbW8oKX0+XG4gICAgICAgICAgICBDcmVhdGUgb2ZmZXIgb24gc2lkZWNoYWluIChubyBlc2Nyb3cpXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNjY2JywgbWFyZ2luVG9wOiAnMC43NWVtJyB9fT5PcGVyYXRvciBwaGFzZSBvdmVycmlkZTo8L3A+XG4gICAgICAgICAgPEJ1dHRvbi5Hcm91cCBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4gdGhpcy5fYWR2YW5jZU9mZmVyUGhhc2UoJ2Z1bmRpbmdfcGVuZGluZycpfT5mdW5kaW5nX3BlbmRpbmc8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4gdGhpcy5fYWR2YW5jZU9mZmVyUGhhc2UoJ2Z1bmRlZCcpfT5mdW5kZWQ8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4gdGhpcy5fYWR2YW5jZU9mZmVyUGhhc2UoJ2RlbGl2ZXJlZCcpfT5kZWxpdmVyZWQ8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b24gb25DbGljaz17KCkgPT4gdGhpcy5fYWR2YW5jZU9mZmVyUGhhc2UoJ3NldHRsZWQnKX0+c2V0dGxlZDwvQnV0dG9uPlxuICAgICAgICAgIDwvQnV0dG9uLkdyb3VwPlxuICAgICAgICA8L1NlZ21lbnQ+XG4gICAgICA8L1NlZ21lbnQuR3JvdXA+XG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNpZGVjaGFpbkhvbWU7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3JlZ2VuZXJhdG9yIiwibiIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJHZW5lcmF0b3IiLCJ1IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibmV4dCIsImlzQXJyYXkiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93IiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnRpZXMiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJfaW5oZXJpdHMiLCJfc2V0UHJvdG90eXBlT2YiLCJSZWFjdCIsInJlcXVpcmUiLCJfcmVxdWlyZSIsIkJ1dHRvbiIsIkZvcm0iLCJIZWFkZXIiLCJJY29uIiwiTWVzc2FnZSIsIlNlZ21lbnQiLCJUZXh0QXJlYSIsIkRpdmlkZXIiLCJMYWJlbCIsIlRhYmxlIiwiU3RhdGlzdGljIiwiQWN0b3IiLCJfcmVxdWlyZTIiLCJ0b2FzdCIsIl9yZXF1aXJlMyIsImZhYnJpY0lkZW50aXR5TmVlZEZ1bGxLZXlQbGFpbiIsIl9yZXF1aXJlNCIsInNoYTI1NiIsIl9yZXF1aXJlNSIsImdldFNpZGVjaGFpblN0YXRlIiwiZ2V0U2lkZWNoYWluSm91cm5hbCIsImdldFNpZGVjaGFpblNuYXBzaG90cyIsInN1Ym1pdFNpZGVjaGFpblN0YXRlUGF0Y2giLCJmZXRjaERpc3RyaWJ1dGVkRXBvY2giLCJmZXRjaERpc3RyaWJ1dGVkTWFuaWZlc3QiLCJfcmVxdWlyZTYiLCJjcmVhdGVPZmZlclJlY29yZCIsInBhdGNoZXNGb3JOZXdPZmZlciIsInBhdGNoUmVwbGFjZU9mZmVyIiwiYnVpbGREb2N1bWVudE9mZmVyRW52ZWxvcGUiLCJfcmVxdWlyZTciLCJidWlsZERvY3VtZW50T2ZmZXJFc2Nyb3ciLCJ2ZXJpZnlEb2N1bWVudE9mZmVyRnVuZGluZyIsInByZXBhcmVEb2N1bWVudE9mZmVyRGVsaXZlcmVyQ2xhaW1Qc2J0IiwicHJlcGFyZURvY3VtZW50T2ZmZXJJbml0aWF0b3JSZWZ1bmRQc2J0IiwiYnJvYWRjYXN0U2lnbmVkVHJhbnNhY3Rpb24iLCJnZXRCaXRjb2luVGlwSGVpZ2h0IiwiX3JlcXVpcmU4Iiwic2lnbkRlbGl2ZXJlckNsYWltRnJvbVBzYnRCYXNlNjQiLCJzaWduSW5pdGlhdG9yUmVmdW5kRnJvbVBzYnRCYXNlNjQiLCJfcmVxdWlyZTkiLCJyZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIiwiX3JlcXVpcmUwIiwiRE9DVU1FTlRfT0ZGRVIiLCJfcmVxdWlyZTEiLCJsb2FkSHViVWlGZWF0dXJlRmxhZ3MiLCJzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncyIsIl9yZXF1aXJlMTAiLCJMaW5rIiwiRGlzdHJpYnV0ZWRGZWRlcmF0aW9uUGFuZWwiLCJwYXltZW50SGFzaEhleEZyb21QcmVpbWFnZUhleCIsInByZWltYWdlSGV4IiwiY2xlYW4iLCJ0cmltIiwicmVwbGFjZSIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiLCJzYWZlSnNvbiIsIm9iaiIsInNwYWNlIiwidW5kZWZpbmVkIiwiSlNPTiIsInN0cmluZ2lmeSIsIm5ld09mZmVySWQiLCJ0eXBlIiwicHVycG9zZSIsIm5vbmNlIiwicmFuZG9tQnl0ZXMiLCJhdCIsIkRhdGUiLCJub3ciLCJpZCIsIlNpZGVjaGFpbkhvbWUiLCJfUmVhY3QkQ29tcG9uZW50IiwicHJvcHMiLCJfdGhpcyIsInN0YXRlIiwibG9hZGluZyIsInNpZGVjaGFpbiIsImVwb2NoIiwiZXBvY2hFcnJvciIsIm1hbmlmZXN0Iiwiam91cm5hbCIsInNuYXBzaG90cyIsInNob3dDb250ZW50SnNvbiIsInBhdGNoSnNvbiIsImZlZGVyYXRpb25XaXRuZXNzSnNvbiIsImJhc2lzQ2xvY2tOb3RlIiwib2ZmZXJEb2N1bWVudElkIiwib2ZmZXJSZXdhcmRTYXRzIiwib2ZmZXJNZW1vIiwib2ZmZXJBbm5vdW5jZUNoYXQiLCJsYXN0UGF0Y2hSZXN1bHQiLCJpbmJvdW5kT2ZmZXIiLCJlc2Nyb3dQcmVpbWFnZUhleCIsImVzY3Jvd1BheW1lbnRIYXNoSGV4IiwiZXNjcm93RGVsaXZlcmVyUHVia2V5IiwiZXNjcm93SW5pdGlhdG9yUmVmdW5kUHVia2V5IiwiZXNjcm93UmVmdW5kTG9ja0hlaWdodCIsImVzY3Jvd1JlZnVuZERlbHRhIiwiZXNjcm93QnVpbGRSZXN1bHQiLCJsMU9mZmVySWQiLCJsMUZ1bmRpbmdUeGlkIiwibDFDbGFpbURlc3RBZGRyZXNzIiwibDFSZWZ1bmREZXN0QWRkcmVzcyIsImwxRmVlQ2xhaW1TYXRzIiwibDFGZWVSZWZ1bmRTYXRzIiwibDFEZWxpdmVyZXJQcml2SGV4IiwibDFJbml0aWF0b3JQcml2SGV4IiwibDFMYXN0UHNidENsYWltIiwibDFMYXN0UHNidFJlZnVuZCIsImwxTGFzdFNpZ25lZFR4SGV4IiwiaHViVWlGbGFnc1JldiIsIl9vbkRvY3VtZW50T2ZmZXIiLCJjb21wb25lbnREaWRNb3VudCIsIl90aGlzMiIsInJlZnJlc2giLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwiX2h1YlVpRmxhZ3NVbnN1YiIsInNldFN0YXRlIiwicyIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImV2IiwiZGV0YWlsIiwib2JqZWN0IiwiaW5mbyIsIl9nZXRJbml0aWF0b3JJZCIsImlkZW50aXR5IiwiZmFicmljUGVlcklkIiwiYnIiLCJicmlkZ2VSZWYiLCJjdXJyZW50IiwiX2dldElkZW50aXR5SWQiLCJ4IiwiX3JlZnJlc2giLCJfY2FsbGVlIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsInN0IiwiZXAiLCJtYW4iLCJqciIsInNuIiwiZXJycyIsIl90IiwiX2NvbnRleHQiLCJhbGwiLCJsaW1pdCIsIm9rIiwiZGF0YSIsImVycm9yIiwiam9pbiIsImNsb2NrIiwiY29uY2F0IiwibWVzc2FnZSIsIl9zaG9ydERpZ2VzdCIsImhleCIsIl9lZmZlY3RpdmVQb2xpY3kiLCJmcm9tU3RhdGUiLCJwb2xpY3kiLCJmcm9tTWFuIiwic2lkZWNoYWluUG9saWN5IiwiX3NlYWxlZERpZ2VzdEhpbnQiLCJfdGhpcyRzdGF0ZSIsImxhc3QiLCJiZWFjb24iLCJwYXlsb2FkIiwic2MiLCJzdGF0ZURpZ2VzdCIsInRleHQiLCJjb2xvciIsImN1ciIsIl9wYXJzZUZlZGVyYXRpb25XaXRuZXNzRnJvbVN0YXRlIiwicmF3Iiwid2l0bmVzcyIsInBhcnNlIiwiXyIsIl9zaWRlY2hhaW5QYXRjaEF1dGgiLCJhZG1pblRva2VuIiwiX2FkbWluVG9rZW4iLCJmdyIsImZlZGVyYXRpb25XaXRuZXNzIiwiX3N1Ym1pdFJhd1BhdGNoMiIsIl9jYWxsZWUyIiwicGF0Y2hlcyIsImJhc2lzQ2xvY2siLCJhdXRoIiwib3V0IiwiX3QyIiwiX2NvbnRleHQyIiwiaXNGaW5pdGUiLCJOYU4iLCJyZXN1bHQiLCJzdWNjZXNzIiwiX3N1Ym1pdFJhd1BhdGNoIiwiX3N1Ym1pdERvY3VtZW50T2ZmZXJEZW1vMiIsIl9jYWxsZWUzIiwiZG9jdW1lbnRJZCIsInJld2FyZFNhdHMiLCJpbml0aWF0b3JGYWJyaWNJZCIsIm9mZmVySWQiLCJyZWNvcmQiLCJlbnYiLCJsaW5lIiwiX2NvbnRleHQzIiwiTWF0aCIsIm1heCIsImZsb29yIiwibWVtbyIsImNvbnRlbnQiLCJzdWJtaXRDaGF0TWVzc2FnZSIsInBoYXNlIiwia2luZCIsIl9zdWJtaXREb2N1bWVudE9mZmVyRGVtbyIsIl9hZHZhbmNlT2ZmZXJQaGFzZTIiLCJfY2FsbGVlNCIsIm9mZmVycyIsIl9jb250ZXh0NCIsImRvY3VtZW50T2ZmZXJzIiwiX2FkdmFuY2VPZmZlclBoYXNlIiwiX3giLCJfZ2VuRXNjcm93UHJlaW1hZ2UiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJ1OCIsInBoIiwiX3N5bmNSZWZ1bmRMb2NrRnJvbVRpcDIiLCJfY2FsbGVlNSIsInRpcCIsImRlbHRhIiwiX2NvbnRleHQ1IiwiaGVpZ2h0IiwiX3N5bmNSZWZ1bmRMb2NrRnJvbVRpcCIsIl9idWlsZEVzY3Jvd0FkZHJlc3MyIiwiX2NhbGxlZTYiLCJwYXltZW50SGFzaEhleCIsImRlbGl2ZXJlclB1YmtleUhleCIsImluaXRpYXRvclJlZnVuZFB1YmtleUhleCIsInJlZnVuZExvY2tIZWlnaHQiLCJfY29udGV4dDYiLCJ0b0xvd2VyQ2FzZSIsImxhYmVsIiwic3RhdHVzIiwiX2J1aWxkRXNjcm93QWRkcmVzcyIsIl9yZWNvcmRMMU9mZmVyT25TaWRlY2hhaW4yIiwiX2NhbGxlZTciLCJickluc3QiLCJfY29udGV4dDciLCJwYXltZW50QWRkcmVzcyIsImNsYWltU2NyaXB0SGV4IiwicmVmdW5kU2NyaXB0SGV4IiwiZGVsaXZlcmVyRXNjcm93UHVia2V5SGV4IiwiX3JlY29yZEwxT2ZmZXJPblNpZGVjaGFpbiIsIl92ZXJpZnlMMUZ1bmRpbmdBbmRQYXRjaDIiLCJfY2FsbGVlOCIsInR4aWQiLCJyZWMiLCJfY29udGV4dDgiLCJmdW5kaW5nVHhpZCIsInZlcmlmaWVkIiwiZnVuZGluZ1ZvdXQiLCJfdmVyaWZ5TDFGdW5kaW5nQW5kUGF0Y2giLCJfcmV2ZWFsUHJlaW1hZ2VEZWxpdmVyZWQyIiwiX2NhbGxlZTkiLCJwcmVpbWFnZSIsIndhbnQiLCJnb3QiLCJfY29udGV4dDkiLCJyZXZlYWxlZFByZWltYWdlSGV4IiwiX3JldmVhbFByZWltYWdlRGVsaXZlcmVkIiwiX3ByZXBhcmVEZWxpdmVyZXJDbGFpbTIiLCJfY2FsbGVlMCIsImRlc3QiLCJmZWVTYXRzIiwicHJlcCIsIl9jb250ZXh0MCIsImRlc3RpbmF0aW9uQWRkcmVzcyIsInBzYnRCYXNlNjQiLCJfcHJlcGFyZURlbGl2ZXJlckNsYWltIiwiX3NpZ25BbmRCcm9hZGNhc3RDbGFpbSIsInBzYnRCNjQiLCJwcml2IiwidHhIZXgiLCJfc2lnbkRlbGl2ZXJlckNsYWltRnIiLCJfYnJvYWRjYXN0RXhpdFR4IiwiX3ByZXBhcmVJbml0aWF0b3JSZWZ1bmQyIiwiX2NhbGxlZTEiLCJfY29udGV4dDEiLCJyZWZ1bmRWYWxpZE9uQ2hhaW4iLCJ3YXJuaW5nIiwiX3ByZXBhcmVJbml0aWF0b3JSZWZ1bmQiLCJfc2lnbkFuZEJyb2FkY2FzdFJlZnVuZCIsIl9zaWduSW5pdGlhdG9yUmVmdW5kRiIsIl9icm9hZGNhc3RFeGl0VHgyIiwiX2NhbGxlZTEwIiwiZXhpdEtpbmQiLCJiIiwiX2NvbnRleHQxMCIsInNpZ25lZFR4SGV4IiwiZXhpdFR4aWQiLCJfeDIiLCJfeDMiLCJyZW5kZXIiLCJfdGhpczMiLCJfdGhpcyRzdGF0ZTIiLCJodWJVaSIsImhpbnQiLCJsYXN0UGF5bG9hZCIsImpvdXJuYWxFbnRyaWVzIiwiZW50cmllcyIsInNuYXBzaG90Um93cyIsImNyZWF0ZUVsZW1lbnQiLCJHcm91cCIsImFzIiwic3R5bGUiLCJtYXhXaWR0aCIsInRvIiwiaHJlZiIsInRhcmdldCIsInJlbCIsInJvbGUiLCJkaXNwbGF5IiwiZmxleFdyYXAiLCJnYXAiLCJhbGlnbkl0ZW1zIiwibWFyZ2luQm90dG9tIiwiYmFzaWMiLCJzaXplIiwiaWNvbiIsImxhYmVsUG9zaXRpb24iLCJ0aXRsZSIsImJpdGNvaW5QYXltZW50cyIsImJpdGNvaW5SZXNvdXJjZXMiLCJiaXRjb2luQ3Jvd2RmdW5kIiwicHJpbWFyeSIsIm9uQ2xpY2siLCJtYXJnaW5Ub3AiLCJoaWRlU2lkZWNoYWluTmF2TGluayIsIlZhbHVlIiwidW5zZWFsZWRDb3VudCIsInNuYXBzaG90Q291bnQiLCJlcG9jaENvdW50IiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwid29yZEJyZWFrIiwib3ZlcmZsb3ciLCJtZXJrbGVSb290IiwibGFzdENvbW1pdG1lbnREaWdlc3QiLCJsYXN0TDFCaW5kaW5nIiwiYmVhY29uQ2xvY2siLCJibG9ja0hhc2giLCJsYXN0U2lkZWNoYWluIiwiY2VsbGVkIiwiY29tcGFjdCIsIlJvdyIsIkhlYWRlckNlbGwiLCJCb2R5IiwibWFwIiwicm93IiwiQ2VsbCIsInNpZGVjaGFpbkNsb2NrIiwiZW50cnlDb3VudCIsInNlcSIsInNlYWxlZEJlYWNvbkNsb2NrIiwib3BDb3VudCIsInBhdGhzIiwicGF0Y2hEaWdlc3QiLCJtYXhIZWlnaHQiLCJtYXJnaW4iLCJodG1sRm9yIiwiZm9udFdlaWdodCIsInJvd3MiLCJvbkNoYW5nZSIsIl9yZWYiLCJwbGFjZWhvbGRlciIsIl9yZWYyIiwib25EaXNtaXNzIiwiSW5wdXQiLCJfcmVmMyIsIl9yZWY0IiwiX3JlZjUiLCJfcmVmNiIsIkNoZWNrYm94IiwiY2hlY2tlZCIsIl9yZWY3IiwiX3JlZjgiLCJyZWFkT25seSIsIl9yZWY5IiwiX3JlZjAiLCJ3aWR0aHMiLCJfcmVmMSIsIl9yZWYxMCIsIm1hcmdpbkxlZnQiLCJwb3NpdGl2ZSIsImJpdGNvaW5VcmkiLCJfcmVmMTEiLCJfcmVmMTIiLCJfcmVmMTMiLCJhdXRvQ29tcGxldGUiLCJfcmVmMTQiLCJfcmVmMTUiLCJfcmVmMTYiLCJfcmVmMTciLCJDb21wb25lbnQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./components/SidechainHome.js\n\n}')},"./components/TopPanel.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n// Dependencies\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js"),\n Link = _require.Link,\n useLocation = _require.useLocation;\n\n// Semantic UI\nvar _require2 = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require2.Button,\n Dropdown = _require2.Dropdown,\n Header = _require2.Header,\n Icon = _require2.Icon,\n Label = _require2.Label,\n Popup = _require2.Popup,\n Segment = _require2.Segment;\nvar _require3 = __webpack_require__(/*! ../functions/formatSats */ "./functions/formatSats.js"),\n formatSatsDisplay = _require3.formatSatsDisplay;\nvar _require4 = __webpack_require__(/*! ../functions/fabricHubLocalIdentity */ "./functions/fabricHubLocalIdentity.js"),\n plaintextMasterFromStored = _require4.plaintextMasterFromStored;\nvar _require5 = __webpack_require__(/*! ../functions/uiNotifications */ "./functions/uiNotifications.js"),\n readUiNotifications = _require5.readUiNotifications,\n UPDATED_EVENT = _require5.UPDATED_EVENT,\n STORAGE_KEY = _require5.STORAGE_KEY;\nvar _require6 = __webpack_require__(/*! ../functions/hubUiFeatureFlags */ "./functions/hubUiFeatureFlags.js"),\n loadHubUiFeatureFlags = _require6.loadHubUiFeatureFlags,\n subscribeHubUiFeatureFlags = _require6.subscribeHubUiFeatureFlags;\nvar _require7 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require7.readHubAdminTokenFromBrowser;\nvar _require8 = __webpack_require__(/*! ../functions/fabricBrowserState */ "./functions/fabricBrowserState.js"),\n readStorageJSON = _require8.readStorageJSON;\nvar _require9 = __webpack_require__(/*! ../functions/fabricHubLocalIdentity */ "./functions/fabricHubLocalIdentity.js"),\n buildLocalFabricIdentityPayload = _require9.buildLocalFabricIdentityPayload;\nfunction TopPanel(props) {\n var location = useLocation();\n var pathname = location && location.pathname || \'/\';\n var hubAddress = props && props.hubAddress ? String(props.hubAddress) : \'\';\n var onOpenSettings = props && typeof props.onOpenSettings === \'function\' ? props.onOpenSettings : null;\n var auth = props && props.auth ? props.auth : null;\n var onLogin = props && typeof props.onLogin === \'function\' ? props.onLogin : null;\n var onManageIdentity = props && typeof props.onManageIdentity === \'function\' ? props.onManageIdentity : null;\n var onUnlockIdentity = props && typeof props.onUnlockIdentity === \'function\' ? props.onUnlockIdentity : null;\n var onLockIdentity = props && typeof props.onLockIdentity === \'function\' ? props.onLockIdentity : null;\n var onProfile = props && typeof props.onProfile === \'function\' ? props.onProfile : onManageIdentity;\n var onSignMessage = props && typeof props.onSignMessage === \'function\' ? props.onSignMessage : null;\n var onDestroyIdentity = props && typeof props.onDestroyIdentity === \'function\' ? props.onDestroyIdentity : null;\n var onRefreshBalance = props && typeof props.onRefreshBalance === \'function\' ? props.onRefreshBalance : null;\n var hasLocalIdentity = !!(props && props.hasLocalIdentity);\n var hasLockedIdentity = !!(props && props.hasLockedIdentity);\n var localIdentity = props && props.localIdentity ? props.localIdentity : null;\n var bitcoin = props && props.bitcoin;\n var clientBalance = props && props.clientBalance;\n var clientBalanceLoading = !!(props && props.clientBalanceLoading);\n var adminTokenProp = props && props.adminToken;\n var hasHubAdminPeerNav = !!readHubAdminTokenFromBrowser(adminTokenProp);\n var publicHubVisitor = !!(props && props.publicHubVisitor);\n var formatIdentityValue = function formatIdentityValue(value) {\n if (value == null) return \'\';\n var s = String(value);\n if (s.length <= 16) return s;\n var head = s.slice(0, 8);\n var tail = s.slice(-8);\n return "".concat(head, "\\u2026").concat(tail);\n };\n\n // Authenticated = have identity with private key (can sign/encrypt).\n // Locked = have identity but private key is locked (can unlock with password).\n // Never show "Locked" when we have the key in auth (e.g. right after first login).\n var hasPrivate = !!(auth && (auth.xprv || auth["private"]) || localIdentity && localIdentity.xprv);\n var isAuthed = hasPrivate;\n var showSignedInControls = isAuthed;\n // Fallback for short-lived parent state gaps right after identity create/login:\n // if props lag for a render, derive id/xpub from persisted local storage so the\n // chip does not flash back to "Login".\n // Must use the same resolution rules as HubInterface / IdentityManager — not raw JSON fields —\n // or the chip can show Watch-only/Locked while the shell has no effective identity (e.g. strict\n // no-plaintext-at-rest records, or cleared/forgotten state that still has stray keys).\n var persistedIdentity = React.useMemo(function () {\n try {\n if (typeof window === \'undefined\') return null;\n var parsed = readStorageJSON(\'fabric.identity.local\', null);\n if (!parsed || !parsed.id && !parsed.xpub) return null;\n var bl = buildLocalFabricIdentityPayload(parsed);\n if (!bl.resolved || !bl.record) return null;\n var r = bl.record;\n return {\n id: r.id != null ? String(r.id) : undefined,\n xpub: r.xpub != null ? String(r.xpub) : undefined\n };\n } catch (e) {\n return null;\n }\n }, [hasLocalIdentity, localIdentity && localIdentity.xpub, auth && auth.xpub]);\n var plaintextXprvOnDisk = React.useMemo(function () {\n try {\n var p = readStorageJSON(\'fabric.identity.local\', null);\n return !!(p && plaintextMasterFromStored(p));\n } catch (e) {\n return false;\n }\n }, [hasLocalIdentity, localIdentity && localIdentity.xpub, hasLockedIdentity]);\n var identitySource = localIdentity || auth || persistedIdentity;\n var hasAnyLocalIdentity = !!(hasLocalIdentity || persistedIdentity && (persistedIdentity.id || persistedIdentity.xpub));\n // Password-protected identity without xprv in memory → show Locked (unlock flow).\n // xpub / watch-only (no password) → show Watch-only (upgrade/import path), not "Locked".\n var passwordProtectedIdentity = !!(localIdentity && localIdentity.passwordProtected);\n var isPasswordLocked = hasAnyLocalIdentity && !isAuthed && (hasLockedIdentity || passwordProtectedIdentity);\n var isWatchOnlyIdentity = hasAnyLocalIdentity && !isAuthed && !passwordProtectedIdentity && !!identitySource && !hasLockedIdentity;\n var isLockedState = isPasswordLocked || isWatchOnlyIdentity;\n /** True when we can derive a client wallet id and show a live balance in the chip. */\n var canShowClientBalance = !!(identitySource && identitySource.xpub && (hasAnyLocalIdentity || isAuthed));\n /** Password-locked identities may still have xpub in memory; do not imply a live balance until unlock. */\n var showLiveBalanceInChip = canShowClientBalance && !isPasswordLocked;\n var identityLabel = function () {\n if (!identitySource) return \'Login\';\n if (identitySource.username) return identitySource.username;\n if (identitySource.xpub) return formatIdentityValue(identitySource.xpub);\n if (identitySource.id) return formatIdentityValue(identitySource.id);\n if (identitySource.address) return formatIdentityValue(identitySource.address);\n return \'Identity\';\n }();\n var active = function active(prefix) {\n if (!prefix) return false;\n if (prefix === \'/\') return pathname === \'/\';\n return pathname === prefix || pathname.startsWith("".concat(prefix, "/"));\n };\n var _React$useState = React.useState(function () {\n return readUiNotifications();\n }),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n notifList = _React$useState2[0],\n setNotifList = _React$useState2[1];\n var _React$useState3 = React.useState(0),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n uiTick = _React$useState4[0],\n setUiTick = _React$useState4[1];\n var balanceHoverRefreshAtRef = React.useRef(0);\n React.useEffect(function () {\n return subscribeHubUiFeatureFlags(function () {\n return setUiTick(function (n) {\n return n + 1;\n });\n });\n }, []);\n var uiFlags = loadHubUiFeatureFlags();\n var isAdvancedMode = !!uiFlags.advancedMode;\n void uiTick;\n var balanceChipHref = \'/services/bitcoin/transactions?scope=wallet#fabric-federation-wallet-panel\';\n var depositFlowHref = uiFlags.bitcoinPayments ? \'/payments#fabric-btc-request-payment-h4\' : \'/services/bitcoin\';\n var withdrawFlowHref = uiFlags.bitcoinPayments ? \'/payments#fabric-btc-make-payment-h4\' : balanceChipHref;\n var chipBalanceSats = Number(clientBalance && clientBalance.balanceSats);\n var hasSpendableChipBalance = Number.isFinite(chipBalanceSats) && chipBalanceSats > 0;\n var walletChipMenu = /*#__PURE__*/React.createElement("div", {\n className: "fade-in",\n style: {\n padding: \'0.5em\',\n maxWidth: \'22rem\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n marginBottom: \'0.65em\',\n fontSize: \'0.9em\',\n lineHeight: 1.45\n }\n }, "Open wallet flows quickly from here."), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: balanceChipHref,\n fluid: true,\n size: "small",\n icon: true,\n labelPosition: "right",\n style: {\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "credit card"\n }), "Wallet"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: depositFlowHref,\n color: "green",\n fluid: true,\n size: "small",\n icon: true,\n labelPosition: "right",\n style: {\n marginBottom: \'0.5em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "download"\n }), "Deposit"), /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: withdrawFlowHref,\n color: "black",\n fluid: true,\n size: "small",\n icon: true,\n labelPosition: "right",\n disabled: showLiveBalanceInChip && !hasSpendableChipBalance\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "right chevron"\n }), "Withdraw"));\n React.useEffect(function () {\n var sync = function sync() {\n return setNotifList(readUiNotifications());\n };\n if (typeof window !== \'undefined\') {\n window.addEventListener(UPDATED_EVENT, sync);\n var onStorage = function onStorage(ev) {\n if (ev && ev.key === STORAGE_KEY) sync();\n };\n window.addEventListener(\'storage\', onStorage);\n return function () {\n window.removeEventListener(UPDATED_EVENT, sync);\n window.removeEventListener(\'storage\', onStorage);\n };\n }\n return undefined;\n }, []);\n return /*#__PURE__*/React.createElement(Segment, {\n style: {\n position: \'sticky\',\n top: 0,\n zIndex: 20,\n display: \'flex\',\n alignItems: \'center\',\n justifyContent: \'space-between\',\n gap: \'0.75em\',\n flexWrap: \'wrap\',\n marginTop: 0\n }\n }, /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.75em\',\n flexWrap: \'wrap\'\n }\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h3",\n style: {\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Link, {\n to: "/",\n "aria-label": "Hub home, hub.fabric.pub"\n }, /*#__PURE__*/React.createElement("code", null, "hub.fabric.pub"))), /*#__PURE__*/React.createElement(Button.Group, {\n size: "small",\n role: "navigation",\n "aria-label": "Primary hub sections"\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/",\n basic: !active(\'/\'),\n primary: active(\'/\'),\n "aria-current": active(\'/\') ? \'page\' : undefined\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "home"\n }), "Home"), isAdvancedMode && uiFlags.peers && !publicHubVisitor ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/peers",\n basic: !active(\'/peers\'),\n primary: active(\'/peers\'),\n "aria-current": active(\'/peers\') ? \'page\' : undefined\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "sitemap"\n }), "Peers") : null, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/documents",\n basic: !active(\'/documents\'),\n primary: active(\'/documents\'),\n "aria-current": active(\'/documents\') ? \'page\' : undefined\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file outline"\n }), "Documents"), !publicHubVisitor && isAdvancedMode ? /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/contracts",\n basic: !active(\'/contracts\'),\n primary: active(\'/contracts\'),\n "aria-current": active(\'/contracts\') ? \'page\' : undefined\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file code"\n }), "Contracts") : null), !publicHubVisitor && isAdvancedMode ? /*#__PURE__*/React.createElement(Dropdown, {\n item: true,\n trigger: /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n title: "More services \\u2014 Bitcoin, Settings, Admin, and other pages",\n "aria-label": "More hub pages and tools",\n "aria-haspopup": "menu"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "ellipsis horizontal",\n "aria-hidden": "true"\n }), "More"),\n pointing: "top left"\n }, /*#__PURE__*/React.createElement(Dropdown.Menu, null, uiFlags.features ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/features",\n icon: "info circle",\n text: "Features"\n }) : null, uiFlags.activities && !publicHubVisitor ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/notifications",\n icon: "bell outline",\n text: "Notifications",\n active: pathname === \'/notifications\'\n }) : null, uiFlags.activities && !publicHubVisitor ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/activities",\n icon: "comments",\n text: "Activity log",\n active: pathname === \'/activities\'\n }) : null, !publicHubVisitor ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/services/bitcoin",\n icon: "bitcoin",\n text: "Bitcoin"\n }) : null, !publicHubVisitor && (uiFlags.bitcoinPayments || uiFlags.bitcoinLightning) ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: {\n pathname: \'/services/bitcoin\',\n hash: uiFlags.bitcoinPayments ? \'fabric-bitcoin-payjoin\' : \'fabric-bitcoin-lightning\'\n },\n icon: "shield alternate",\n text: "Treasury (Payjoin / Lightning)",\n title: "Hub-managed deposits: Payjoin when Payments are enabled; otherwise Lightning section"\n }) : null, uiFlags.bitcoinPayments && !publicHubVisitor ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/payments",\n icon: "credit card outline",\n text: "Payments"\n }) : null, uiFlags.bitcoinInvoices && !publicHubVisitor ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/services/bitcoin/invoices#fabric-invoices-tab-demo",\n icon: "file alternate outline",\n text: "Invoices"\n }) : null, uiFlags.bitcoinLightning && !publicHubVisitor ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/services/lightning",\n icon: "bolt",\n text: "Lightning"\n }) : null, uiFlags.bitcoinExplorer && !publicHubVisitor ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/services/bitcoin/blocks",\n icon: "search",\n text: "Explorer"\n }) : null, !publicHubVisitor ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/services/bitcoin/faucet",\n icon: "tint",\n text: "Faucet"\n }) : null, uiFlags.bitcoinResources && !publicHubVisitor ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/services/bitcoin/resources",\n icon: "code",\n text: "Bitcoin HTTP resources"\n }) : null, uiFlags.bitcoinCrowdfund && !publicHubVisitor ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/services/bitcoin/crowdfunds",\n icon: "heart outline",\n text: "Crowdfunds"\n }) : null, uiFlags.sidechain && !publicHubVisitor ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/sidechains",\n icon: "random",\n text: "Statechain"\n }) : null, hasHubAdminPeerNav ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/settings/admin",\n icon: "settings",\n text: "Admin",\n active: pathname === \'/settings/admin\' || pathname.startsWith(\'/settings/admin/\')\n }) : null, hasHubAdminPeerNav ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/settings/collaboration",\n icon: "users",\n text: "Collaboration",\n active: pathname === \'/settings/collaboration\'\n }) : null, uiFlags.sidechain && hasHubAdminPeerNav ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/settings/admin/beacon-federation",\n icon: "star",\n text: "Beacon Federation",\n active: pathname === \'/settings/admin/beacon-federation\'\n }) : null, /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/settings",\n icon: "setting",\n text: "Settings",\n active: pathname === \'/settings\'\n }), uiFlags.sidechain && !publicHubVisitor ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/federations",\n icon: "users",\n text: "Federations",\n active: pathname === \'/federations\' || pathname === \'/settings/federation\'\n }) : null, /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: Link,\n to: "/settings/security",\n icon: "shield",\n text: "Security & delegation"\n }), uiFlags.sidechain && !publicHubVisitor ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Dropdown.Divider, null), /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: "a",\n href: "/services/distributed/manifest",\n target: "_blank",\n rel: "noopener noreferrer",\n icon: "code",\n text: "Distributed manifest (JSON)"\n }), /*#__PURE__*/React.createElement(Dropdown.Item, {\n as: "a",\n href: "/services/distributed/vault",\n target: "_blank",\n rel: "noopener noreferrer",\n icon: "bitcoin",\n text: "Federation vault (JSON)"\n })) : null)) : null), /*#__PURE__*/React.createElement("div", {\n style: {\n display: \'flex\',\n alignItems: \'center\',\n gap: \'0.5em\',\n flexWrap: \'wrap\'\n }\n }, showSignedInControls && isAdvancedMode ? /*#__PURE__*/React.createElement("div", {\n style: {\n position: \'relative\',\n display: \'inline-block\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n as: Link,\n to: "/notifications",\n size: "small",\n title: notifList.length ? "".concat(notifList.length, " in-app notification(s) \\u2014 open Notifications") : \'Notifications — wallet, Payjoin, and hub toasts (activity log is under More)\',\n "aria-label": "Notifications",\n "aria-current": pathname === \'/notifications\' ? \'page\' : undefined,\n primary: pathname === \'/notifications\',\n basic: pathname !== \'/notifications\',\n style: {\n border: \'none\',\n boxShadow: \'none\',\n background: \'transparent\',\n padding: \'0.45em 0.55em\',\n margin: 0\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bell outline"\n })), notifList.length > 0 && /*#__PURE__*/React.createElement(Label, {\n circular: true,\n color: "red",\n size: "mini",\n style: {\n position: \'absolute\',\n top: -6,\n right: -6,\n margin: 0,\n minWidth: \'1.5em\'\n },\n title: "".concat(notifList.length, " notification(s)")\n }, notifList.length > 99 ? \'99+\' : String(notifList.length))) : null, showSignedInControls || isLockedState ? /*#__PURE__*/React.createElement(Popup, {\n on: "hover",\n hoverable: true,\n position: "bottom center",\n trigger: /*#__PURE__*/React.createElement(Label, {\n size: "small",\n basic: true,\n "aria-label": !showLiveBalanceInChip ? isPasswordLocked ? \'Wallet — unlock identity to show balance\' : isWatchOnlyIdentity ? \'Wallet — open Bitcoin transactions (watch-only)\' : \'Wallet — log in to track balance\' : clientBalanceLoading && clientBalance == null ? \'Wallet — loading balance\' : \'Wallet — browser balance; opens wallet menu\',\n title: !showLiveBalanceInChip ? isPasswordLocked ? \'Unlock your identity to show your browser wallet balance here\' : isWatchOnlyIdentity ? \'Import a full key or unlock to track your browser wallet balance\' : \'Log in or set a local identity to track your browser wallet balance\' : clientBalanceLoading && clientBalance == null ? \'Loading your browser wallet balance…\' : \'Hover for wallet actions: open wallet, deposit, or withdraw\',\n style: {\n cursor: \'pointer\'\n },\n onMouseEnter: function onMouseEnter() {\n if (!onRefreshBalance || !showLiveBalanceInChip) return;\n var now = Date.now();\n if (now - balanceHoverRefreshAtRef.current < 8000) return;\n balanceHoverRefreshAtRef.current = now;\n try {\n onRefreshBalance();\n } catch (_) {}\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "bitcoin",\n color: showLiveBalanceInChip ? \'orange\' : \'grey\'\n }), !showLiveBalanceInChip ? isPasswordLocked ? \'Unlock for balance\' : \'Wallet\' : clientBalanceLoading && clientBalance == null ? \'…\' : clientBalance != null && Number.isFinite(clientBalance.balanceSats) ? clientBalance.balanceSats >= 100000000 ? "".concat((clientBalance.balanceSats / 100000000).toFixed(4), " BTC") : "".concat(formatSatsDisplay(clientBalance.balanceSats), " sats") : \'—\'),\n content: walletChipMenu\n }) : null, !publicHubVisitor && isAdvancedMode && bitcoin && bitcoin.mempoolTxCount != null && Number(bitcoin.mempoolTxCount) > 0 && /*#__PURE__*/React.createElement(Label, {\n as: Link,\n to: "/services/bitcoin",\n size: "small",\n color: "orange",\n title: "Transactions waiting in this Hub node\\u2019s mempool \\u2014 open Bitcoin dashboard",\n style: {\n cursor: \'pointer\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "clock outline"\n }), "Mempool ", bitcoin.mempoolTxCount), isAuthed ? /*#__PURE__*/React.createElement(Dropdown, {\n trigger: /*#__PURE__*/React.createElement(Button, {\n size: "small",\n primary: true,\n title: "Identity \\u2014 menu or lock"\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "unlock",\n style: {\n marginRight: \'0.15em\'\n }\n }), /*#__PURE__*/React.createElement(Icon, {\n name: "user circle"\n }), identityLabel, /*#__PURE__*/React.createElement(Icon, {\n name: "dropdown"\n })),\n pointing: "top right",\n icon: null\n }, /*#__PURE__*/React.createElement(Dropdown.Menu, null, /*#__PURE__*/React.createElement(Dropdown.Item, {\n icon: "user",\n text: "User profile",\n onClick: function onClick() {\n onProfile && onProfile();\n }\n }), /*#__PURE__*/React.createElement(Dropdown.Item, {\n icon: "pencil",\n text: "Sign message",\n onClick: function onClick() {\n onSignMessage && onSignMessage();\n }\n }), /*#__PURE__*/React.createElement(Dropdown.Item, {\n icon: "plug",\n text: "Bridge connection",\n onClick: function onClick() {\n onOpenSettings && onOpenSettings();\n },\n title: "Hub WebSocket URL and bridge options"\n }), /*#__PURE__*/React.createElement(Dropdown.Divider, null), localIdentity && localIdentity.xprv && (localIdentity.passwordProtected || plaintextXprvOnDisk) ? /*#__PURE__*/React.createElement(Dropdown.Item, {\n icon: "lock",\n text: "Lock identity",\n onClick: function onClick() {\n if (!onLockIdentity) return;\n onLockIdentity();\n }\n }) : null, /*#__PURE__*/React.createElement(Dropdown.Divider, null), /*#__PURE__*/React.createElement(Dropdown.Item, {\n icon: "trash",\n text: "Destroy identity",\n onClick: function onClick() {\n onDestroyIdentity && onDestroyIdentity();\n }\n }))) : /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: !isLockedState,\n primary: isLockedState,\n onClick: function onClick() {\n if (isLockedState && onUnlockIdentity) {\n onUnlockIdentity();\n } else if (!isAuthed && onLogin) {\n onLogin();\n }\n },\n title: isPasswordLocked ? \'Unlock identity — enter your encryption password\' : isWatchOnlyIdentity ? \'Watch-only identity — open to import a full key or use desktop signing\' : \'Log in\',\n "aria-label": isPasswordLocked ? \'Locked — unlock Fabric identity\' : isWatchOnlyIdentity ? \'Watch-only Fabric identity — open options\' : \'Log in or create Fabric identity\'\n }, /*#__PURE__*/React.createElement(Icon, {\n name: isPasswordLocked ? \'lock\' : isWatchOnlyIdentity ? \'eye\' : \'user circle\',\n "aria-hidden": "true"\n }), isPasswordLocked ? \'Locked\' : isWatchOnlyIdentity ? \'Watch-only\' : identityLabel), onOpenSettings ? /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n icon: true,\n title: "Settings and UI mode",\n "aria-label": "Open settings",\n onClick: function onClick() {\n return onOpenSettings && onOpenSettings();\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "cog",\n "aria-hidden": "true"\n })) : null));\n}\nmodule.exports = TopPanel;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBcUgsYUFBQSxDQUFDNUcsSUFBSTtJQUFDNUIsSUFBSSxFQUFFb0csZ0JBQWdCLEdBQUcsTUFBTSxHQUFHQyxtQkFBbUIsR0FBRyxLQUFLLEdBQUcsYUFBYztJQUFDLGVBQVk7RUFBTSxDQUFFLENBQUMsRUFDekdELGdCQUFnQixHQUFHLFFBQVEsR0FBR0MsbUJBQW1CLEdBQUcsWUFBWSxHQUFHSSxhQUM5RCxDQUNULEVBQ0FsRCxjQUFjLGdCQUNicEMsS0FBQSxDQUFBcUgsYUFBQSxDQUFDL0csTUFBTTtJQUNMMEgsSUFBSSxFQUFDLE9BQU87SUFDWnVCLEtBQUs7SUFDTHRCLElBQUk7SUFDSjJCLEtBQUssRUFBQyxzQkFBc0I7SUFDNUIsY0FBVyxlQUFlO0lBQzFCcUMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7TUFBQSxPQUFRN0osY0FBYyxJQUFJQSxjQUFjLENBQUMsQ0FBQztJQUFBO0VBQUMsZ0JBRWxEcEMsS0FBQSxDQUFBcUgsYUFBQSxDQUFDNUcsSUFBSTtJQUFDNUIsSUFBSSxFQUFDLEtBQUs7SUFBQyxlQUFZO0VBQU0sQ0FBRSxDQUMvQixDQUFDLEdBQ1AsSUFDRCxDQUNFLENBQUM7QUFFZDtBQUVBcU4sTUFBTSxDQUFDQyxPQUFPLEdBQUdySyxRQUFRIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL1RvcFBhbmVsLmpzPzZmZWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBEZXBlbmRlbmNpZXNcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHsgTGluaywgdXNlTG9jYXRpb24gfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcblxuLy8gU2VtYW50aWMgVUlcbmNvbnN0IHtcbiAgQnV0dG9uLFxuICBEcm9wZG93bixcbiAgSGVhZGVyLFxuICBJY29uLFxuICBMYWJlbCxcbiAgUG9wdXAsXG4gIFNlZ21lbnRcbn0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3QgeyBmb3JtYXRTYXRzRGlzcGxheSB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2Zvcm1hdFNhdHMnKTtcbmNvbnN0IHsgcGxhaW50ZXh0TWFzdGVyRnJvbVN0b3JlZCB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0h1YkxvY2FsSWRlbnRpdHknKTtcbmNvbnN0IHtcbiAgcmVhZFVpTm90aWZpY2F0aW9ucyxcbiAgVVBEQVRFRF9FVkVOVCxcbiAgU1RPUkFHRV9LRVlcbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvdWlOb3RpZmljYXRpb25zJyk7XG5jb25zdCB7XG4gIGxvYWRIdWJVaUZlYXR1cmVGbGFncyxcbiAgc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3Ncbn0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViVWlGZWF0dXJlRmxhZ3MnKTtcbmNvbnN0IHsgcmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2h1YkFkbWluVG9rZW5Ccm93c2VyJyk7XG5jb25zdCB7IHJlYWRTdG9yYWdlSlNPTiB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY0Jyb3dzZXJTdGF0ZScpO1xuY29uc3QgeyBidWlsZExvY2FsRmFicmljSWRlbnRpdHlQYXlsb2FkIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljSHViTG9jYWxJZGVudGl0eScpO1xuXG5mdW5jdGlvbiBUb3BQYW5lbCAocHJvcHMpIHtcbiAgY29uc3QgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBjb25zdCBwYXRobmFtZSA9IChsb2NhdGlvbiAmJiBsb2NhdGlvbi5wYXRobmFtZSkgfHwgJy8nO1xuXG4gIGNvbnN0IGh1YkFkZHJlc3MgPSAocHJvcHMgJiYgcHJvcHMuaHViQWRkcmVzcykgPyBTdHJpbmcocHJvcHMuaHViQWRkcmVzcykgOiAnJztcbiAgY29uc3Qgb25PcGVuU2V0dGluZ3MgPSBwcm9wcyAmJiB0eXBlb2YgcHJvcHMub25PcGVuU2V0dGluZ3MgPT09ICdmdW5jdGlvbicgPyBwcm9wcy5vbk9wZW5TZXR0aW5ncyA6IG51bGw7XG4gIGNvbnN0IGF1dGggPSBwcm9wcyAmJiBwcm9wcy5hdXRoID8gcHJvcHMuYXV0aCA6IG51bGw7XG4gIGNvbnN0IG9uTG9naW4gPSBwcm9wcyAmJiB0eXBlb2YgcHJvcHMub25Mb2dpbiA9PT0gJ2Z1bmN0aW9uJyA/IHByb3BzLm9uTG9naW4gOiBudWxsO1xuICBjb25zdCBvbk1hbmFnZUlkZW50aXR5ID0gcHJvcHMgJiYgdHlwZW9mIHByb3BzLm9uTWFuYWdlSWRlbnRpdHkgPT09ICdmdW5jdGlvbicgPyBwcm9wcy5vbk1hbmFnZUlkZW50aXR5IDogbnVsbDtcbiAgY29uc3Qgb25VbmxvY2tJZGVudGl0eSA9IHByb3BzICYmIHR5cGVvZiBwcm9wcy5vblVubG9ja0lkZW50aXR5ID09PSAnZnVuY3Rpb24nID8gcHJvcHMub25VbmxvY2tJZGVudGl0eSA6IG51bGw7XG4gIGNvbnN0IG9uTG9ja0lkZW50aXR5ID0gcHJvcHMgJiYgdHlwZW9mIHByb3BzLm9uTG9ja0lkZW50aXR5ID09PSAnZnVuY3Rpb24nID8gcHJvcHMub25Mb2NrSWRlbnRpdHkgOiBudWxsO1xuICBjb25zdCBvblByb2ZpbGUgPSBwcm9wcyAmJiB0eXBlb2YgcHJvcHMub25Qcm9maWxlID09PSAnZnVuY3Rpb24nID8gcHJvcHMub25Qcm9maWxlIDogb25NYW5hZ2VJZGVudGl0eTtcbiAgY29uc3Qgb25TaWduTWVzc2FnZSA9IHByb3BzICYmIHR5cGVvZiBwcm9wcy5vblNpZ25NZXNzYWdlID09PSAnZnVuY3Rpb24nID8gcHJvcHMub25TaWduTWVzc2FnZSA6IG51bGw7XG4gIGNvbnN0IG9uRGVzdHJveUlkZW50aXR5ID0gcHJvcHMgJiYgdHlwZW9mIHByb3BzLm9uRGVzdHJveUlkZW50aXR5ID09PSAnZnVuY3Rpb24nID8gcHJvcHMub25EZXN0cm95SWRlbnRpdHkgOiBudWxsO1xuICBjb25zdCBvblJlZnJlc2hCYWxhbmNlID0gcHJvcHMgJiYgdHlwZW9mIHByb3BzLm9uUmVmcmVzaEJhbGFuY2UgPT09ICdmdW5jdGlvbicgPyBwcm9wcy5vblJlZnJlc2hCYWxhbmNlIDogbnVsbDtcbiAgY29uc3QgaGFzTG9jYWxJZGVudGl0eSA9ICEhKHByb3BzICYmIHByb3BzLmhhc0xvY2FsSWRlbnRpdHkpO1xuICBjb25zdCBoYXNMb2NrZWRJZGVudGl0eSA9ICEhKHByb3BzICYmIHByb3BzLmhhc0xvY2tlZElkZW50aXR5KTtcbiAgY29uc3QgbG9jYWxJZGVudGl0eSA9IHByb3BzICYmIHByb3BzLmxvY2FsSWRlbnRpdHkgPyBwcm9wcy5sb2NhbElkZW50aXR5IDogbnVsbDtcbiAgY29uc3QgYml0Y29pbiA9IHByb3BzICYmIHByb3BzLmJpdGNvaW47XG4gIGNvbnN0IGNsaWVudEJhbGFuY2UgPSBwcm9wcyAmJiBwcm9wcy5jbGllbnRCYWxhbmNlO1xuICBjb25zdCBjbGllbnRCYWxhbmNlTG9hZGluZyA9ICEhKHByb3BzICYmIHByb3BzLmNsaWVudEJhbGFuY2VMb2FkaW5nKTtcbiAgY29uc3QgYWRtaW5Ub2tlblByb3AgPSBwcm9wcyAmJiBwcm9wcy5hZG1pblRva2VuO1xuICBjb25zdCBoYXNIdWJBZG1pblBlZXJOYXYgPSAhIShcbiAgICByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKGFkbWluVG9rZW5Qcm9wKVxuICApO1xuICBjb25zdCBwdWJsaWNIdWJWaXNpdG9yID0gISEocHJvcHMgJiYgcHJvcHMucHVibGljSHViVmlzaXRvcik7XG5cbiAgY29uc3QgZm9ybWF0SWRlbnRpdHlWYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gJyc7XG4gICAgY29uc3QgcyA9IFN0cmluZyh2YWx1ZSk7XG4gICAgaWYgKHMubGVuZ3RoIDw9IDE2KSByZXR1cm4gcztcbiAgICBjb25zdCBoZWFkID0gcy5zbGljZSgwLCA4KTtcbiAgICBjb25zdCB0YWlsID0gcy5zbGljZSgtOCk7XG4gICAgcmV0dXJuIGAke2hlYWR94oCmJHt0YWlsfWA7XG4gIH07XG5cbiAgLy8gQXV0aGVudGljYXRlZCA9IGhhdmUgaWRlbnRpdHkgd2l0aCBwcml2YXRlIGtleSAoY2FuIHNpZ24vZW5jcnlwdCkuXG4gIC8vIExvY2tlZCA9IGhhdmUgaWRlbnRpdHkgYnV0IHByaXZhdGUga2V5IGlzIGxvY2tlZCAoY2FuIHVubG9jayB3aXRoIHBhc3N3b3JkKS5cbiAgLy8gTmV2ZXIgc2hvdyBcIkxvY2tlZFwiIHdoZW4gd2UgaGF2ZSB0aGUga2V5IGluIGF1dGggKGUuZy4gcmlnaHQgYWZ0ZXIgZmlyc3QgbG9naW4pLlxuICBjb25zdCBoYXNQcml2YXRlID0gISEoXG4gICAgKGF1dGggJiYgKGF1dGgueHBydiB8fCBhdXRoLnByaXZhdGUpKSB8fFxuICAgIChsb2NhbElkZW50aXR5ICYmIGxvY2FsSWRlbnRpdHkueHBydilcbiAgKTtcbiAgY29uc3QgaXNBdXRoZWQgPSBoYXNQcml2YXRlO1xuICBjb25zdCBzaG93U2lnbmVkSW5Db250cm9scyA9IGlzQXV0aGVkO1xuICAvLyBGYWxsYmFjayBmb3Igc2hvcnQtbGl2ZWQgcGFyZW50IHN0YXRlIGdhcHMgcmlnaHQgYWZ0ZXIgaWRlbnRpdHkgY3JlYXRlL2xvZ2luOlxuICAvLyBpZiBwcm9wcyBsYWcgZm9yIGEgcmVuZGVyLCBkZXJpdmUgaWQveHB1YiBmcm9tIHBlcnNpc3RlZCBsb2NhbCBzdG9yYWdlIHNvIHRoZVxuICAvLyBjaGlwIGRvZXMgbm90IGZsYXNoIGJhY2sgdG8gXCJMb2dpblwiLlxuICAvLyBNdXN0IHVzZSB0aGUgc2FtZSByZXNvbHV0aW9uIHJ1bGVzIGFzIEh1YkludGVyZmFjZSAvIElkZW50aXR5TWFuYWdlciDigJQgbm90IHJhdyBKU09OIGZpZWxkcyDigJRcbiAgLy8gb3IgdGhlIGNoaXAgY2FuIHNob3cgV2F0Y2gtb25seS9Mb2NrZWQgd2hpbGUgdGhlIHNoZWxsIGhhcyBubyBlZmZlY3RpdmUgaWRlbnRpdHkgKGUuZy4gc3RyaWN0XG4gIC8vIG5vLXBsYWludGV4dC1hdC1yZXN0IHJlY29yZHMsIG9yIGNsZWFyZWQvZm9yZ290dGVuIHN0YXRlIHRoYXQgc3RpbGwgaGFzIHN0cmF5IGtleXMpLlxuICBjb25zdCBwZXJzaXN0ZWRJZGVudGl0eSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgcGFyc2VkID0gcmVhZFN0b3JhZ2VKU09OKCdmYWJyaWMuaWRlbnRpdHkubG9jYWwnLCBudWxsKTtcbiAgICAgIGlmICghcGFyc2VkIHx8ICghcGFyc2VkLmlkICYmICFwYXJzZWQueHB1YikpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgYmwgPSBidWlsZExvY2FsRmFicmljSWRlbnRpdHlQYXlsb2FkKHBhcnNlZCk7XG4gICAgICBpZiAoIWJsLnJlc29sdmVkIHx8ICFibC5yZWNvcmQpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgciA9IGJsLnJlY29yZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiByLmlkICE9IG51bGwgPyBTdHJpbmcoci5pZCkgOiB1bmRlZmluZWQsXG4gICAgICAgIHhwdWI6IHIueHB1YiAhPSBudWxsID8gU3RyaW5nKHIueHB1YikgOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LCBbaGFzTG9jYWxJZGVudGl0eSwgbG9jYWxJZGVudGl0eSAmJiBsb2NhbElkZW50aXR5LnhwdWIsIGF1dGggJiYgYXV0aC54cHViXSk7XG4gIGNvbnN0IHBsYWludGV4dFhwcnZPbkRpc2sgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcCA9IHJlYWRTdG9yYWdlSlNPTignZmFicmljLmlkZW50aXR5LmxvY2FsJywgbnVsbCk7XG4gICAgICByZXR1cm4gISEocCAmJiBwbGFpbnRleHRNYXN0ZXJGcm9tU3RvcmVkKHApKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCBbaGFzTG9jYWxJZGVudGl0eSwgbG9jYWxJZGVudGl0eSAmJiBsb2NhbElkZW50aXR5LnhwdWIsIGhhc0xvY2tlZElkZW50aXR5XSk7XG4gIGNvbnN0IGlkZW50aXR5U291cmNlID0gbG9jYWxJZGVudGl0eSB8fCBhdXRoIHx8IHBlcnNpc3RlZElkZW50aXR5O1xuICBjb25zdCBoYXNBbnlMb2NhbElkZW50aXR5ID0gISEoaGFzTG9jYWxJZGVudGl0eSB8fCAocGVyc2lzdGVkSWRlbnRpdHkgJiYgKHBlcnNpc3RlZElkZW50aXR5LmlkIHx8IHBlcnNpc3RlZElkZW50aXR5LnhwdWIpKSk7XG4gIC8vIFBhc3N3b3JkLXByb3RlY3RlZCBpZGVudGl0eSB3aXRob3V0IHhwcnYgaW4gbWVtb3J5IOKGkiBzaG93IExvY2tlZCAodW5sb2NrIGZsb3cpLlxuICAvLyB4cHViIC8gd2F0Y2gtb25seSAobm8gcGFzc3dvcmQpIOKGkiBzaG93IFdhdGNoLW9ubHkgKHVwZ3JhZGUvaW1wb3J0IHBhdGgpLCBub3QgXCJMb2NrZWRcIi5cbiAgY29uc3QgcGFzc3dvcmRQcm90ZWN0ZWRJZGVudGl0eSA9ICEhKGxvY2FsSWRlbnRpdHkgJiYgbG9jYWxJZGVudGl0eS5wYXNzd29yZFByb3RlY3RlZCk7XG4gIGNvbnN0IGlzUGFzc3dvcmRMb2NrZWQgPSBoYXNBbnlMb2NhbElkZW50aXR5ICYmICFpc0F1dGhlZCAmJiAoaGFzTG9ja2VkSWRlbnRpdHkgfHwgcGFzc3dvcmRQcm90ZWN0ZWRJZGVudGl0eSk7XG4gIGNvbnN0IGlzV2F0Y2hPbmx5SWRlbnRpdHkgPSBoYXNBbnlMb2NhbElkZW50aXR5ICYmICFpc0F1dGhlZCAmJiAhcGFzc3dvcmRQcm90ZWN0ZWRJZGVudGl0eSAmJiAhIWlkZW50aXR5U291cmNlICYmXG4gICAgIWhhc0xvY2tlZElkZW50aXR5O1xuICBjb25zdCBpc0xvY2tlZFN0YXRlID0gaXNQYXNzd29yZExvY2tlZCB8fCBpc1dhdGNoT25seUlkZW50aXR5O1xuICAvKiogVHJ1ZSB3aGVuIHdlIGNhbiBkZXJpdmUgYSBjbGllbnQgd2FsbGV0IGlkIGFuZCBzaG93IGEgbGl2ZSBiYWxhbmNlIGluIHRoZSBjaGlwLiAqL1xuICBjb25zdCBjYW5TaG93Q2xpZW50QmFsYW5jZSA9ICEhKFxuICAgIGlkZW50aXR5U291cmNlICYmXG4gICAgaWRlbnRpdHlTb3VyY2UueHB1YiAmJlxuICAgIChoYXNBbnlMb2NhbElkZW50aXR5IHx8IGlzQXV0aGVkKVxuICApO1xuICAvKiogUGFzc3dvcmQtbG9ja2VkIGlkZW50aXRpZXMgbWF5IHN0aWxsIGhhdmUgeHB1YiBpbiBtZW1vcnk7IGRvIG5vdCBpbXBseSBhIGxpdmUgYmFsYW5jZSB1bnRpbCB1bmxvY2suICovXG4gIGNvbnN0IHNob3dMaXZlQmFsYW5jZUluQ2hpcCA9IGNhblNob3dDbGllbnRCYWxhbmNlICYmICFpc1Bhc3N3b3JkTG9ja2VkO1xuICBjb25zdCBpZGVudGl0eUxhYmVsID0gKCgpID0+IHtcbiAgICBpZiAoIWlkZW50aXR5U291cmNlKSByZXR1cm4gJ0xvZ2luJztcbiAgICBpZiAoaWRlbnRpdHlTb3VyY2UudXNlcm5hbWUpIHJldHVybiBpZGVudGl0eVNvdXJjZS51c2VybmFtZTtcbiAgICBpZiAoaWRlbnRpdHlTb3VyY2UueHB1YikgcmV0dXJuIGZvcm1hdElkZW50aXR5VmFsdWUoaWRlbnRpdHlTb3VyY2UueHB1Yik7XG4gICAgaWYgKGlkZW50aXR5U291cmNlLmlkKSByZXR1cm4gZm9ybWF0SWRlbnRpdHlWYWx1ZShpZGVudGl0eVNvdXJjZS5pZCk7XG4gICAgaWYgKGlkZW50aXR5U291cmNlLmFkZHJlc3MpIHJldHVybiBmb3JtYXRJZGVudGl0eVZhbHVlKGlkZW50aXR5U291cmNlLmFkZHJlc3MpO1xuICAgIHJldHVybiAnSWRlbnRpdHknO1xuICB9KSgpO1xuXG4gIGNvbnN0IGFjdGl2ZSA9IChwcmVmaXgpID0+IHtcbiAgICBpZiAoIXByZWZpeCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcmVmaXggPT09ICcvJykgcmV0dXJuIHBhdGhuYW1lID09PSAnLyc7XG4gICAgcmV0dXJuIHBhdGhuYW1lID09PSBwcmVmaXggfHwgcGF0aG5hbWUuc3RhcnRzV2l0aChgJHtwcmVmaXh9L2ApO1xuICB9O1xuXG4gIGNvbnN0IFtub3RpZkxpc3QsIHNldE5vdGlmTGlzdF0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiByZWFkVWlOb3RpZmljYXRpb25zKCkpO1xuICBjb25zdCBbdWlUaWNrLCBzZXRVaVRpY2tdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gIGNvbnN0IGJhbGFuY2VIb3ZlclJlZnJlc2hBdFJlZiA9IFJlYWN0LnVzZVJlZigwKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzKCgpID0+IHNldFVpVGljaygobikgPT4gbiArIDEpKSwgW10pO1xuICBjb25zdCB1aUZsYWdzID0gbG9hZEh1YlVpRmVhdHVyZUZsYWdzKCk7XG4gIGNvbnN0IGlzQWR2YW5jZWRNb2RlID0gISF1aUZsYWdzLmFkdmFuY2VkTW9kZTtcbiAgdm9pZCB1aVRpY2s7XG4gIGNvbnN0IGJhbGFuY2VDaGlwSHJlZiA9ICcvc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnM/c2NvcGU9d2FsbGV0I2ZhYnJpYy1mZWRlcmF0aW9uLXdhbGxldC1wYW5lbCc7XG4gIGNvbnN0IGRlcG9zaXRGbG93SHJlZiA9IHVpRmxhZ3MuYml0Y29pblBheW1lbnRzXG4gICAgPyAnL3BheW1lbnRzI2ZhYnJpYy1idGMtcmVxdWVzdC1wYXltZW50LWg0J1xuICAgIDogJy9zZXJ2aWNlcy9iaXRjb2luJztcbiAgY29uc3Qgd2l0aGRyYXdGbG93SHJlZiA9IHVpRmxhZ3MuYml0Y29pblBheW1lbnRzXG4gICAgPyAnL3BheW1lbnRzI2ZhYnJpYy1idGMtbWFrZS1wYXltZW50LWg0J1xuICAgIDogYmFsYW5jZUNoaXBIcmVmO1xuICBjb25zdCBjaGlwQmFsYW5jZVNhdHMgPSBOdW1iZXIoY2xpZW50QmFsYW5jZSAmJiBjbGllbnRCYWxhbmNlLmJhbGFuY2VTYXRzKTtcbiAgY29uc3QgaGFzU3BlbmRhYmxlQ2hpcEJhbGFuY2UgPSBOdW1iZXIuaXNGaW5pdGUoY2hpcEJhbGFuY2VTYXRzKSAmJiBjaGlwQmFsYW5jZVNhdHMgPiAwO1xuICBjb25zdCB3YWxsZXRDaGlwTWVudSA9IChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZhZGUtaW5cIiBzdHlsZT17eyBwYWRkaW5nOiAnMC41ZW0nLCBtYXhXaWR0aDogJzIycmVtJyB9fT5cbiAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbkJvdHRvbTogJzAuNjVlbScsIGZvbnRTaXplOiAnMC45ZW0nLCBsaW5lSGVpZ2h0OiAxLjQ1IH19PlxuICAgICAgICBPcGVuIHdhbGxldCBmbG93cyBxdWlja2x5IGZyb20gaGVyZS5cbiAgICAgIDwvcD5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgIHRvPXtiYWxhbmNlQ2hpcEhyZWZ9XG4gICAgICAgIGZsdWlkXG4gICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIGljb25cbiAgICAgICAgbGFiZWxQb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC41ZW0nIH19XG4gICAgICA+XG4gICAgICAgIDxJY29uIG5hbWU9XCJjcmVkaXQgY2FyZFwiIC8+XG4gICAgICAgIFdhbGxldFxuICAgICAgPC9CdXR0b24+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGFzPXtMaW5rfVxuICAgICAgICB0bz17ZGVwb3NpdEZsb3dIcmVmfVxuICAgICAgICBjb2xvcj1cImdyZWVuXCJcbiAgICAgICAgZmx1aWRcbiAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgaWNvblxuICAgICAgICBsYWJlbFBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcwLjVlbScgfX1cbiAgICAgID5cbiAgICAgICAgPEljb24gbmFtZT1cImRvd25sb2FkXCIgLz5cbiAgICAgICAgRGVwb3NpdFxuICAgICAgPC9CdXR0b24+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGFzPXtMaW5rfVxuICAgICAgICB0bz17d2l0aGRyYXdGbG93SHJlZn1cbiAgICAgICAgY29sb3I9XCJibGFja1wiXG4gICAgICAgIGZsdWlkXG4gICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgIGljb25cbiAgICAgICAgbGFiZWxQb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgZGlzYWJsZWQ9e3Nob3dMaXZlQmFsYW5jZUluQ2hpcCAmJiAhaGFzU3BlbmRhYmxlQ2hpcEJhbGFuY2V9XG4gICAgICA+XG4gICAgICAgIDxJY29uIG5hbWU9XCJyaWdodCBjaGV2cm9uXCIgLz5cbiAgICAgICAgV2l0aGRyYXdcbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3luYyA9ICgpID0+IHNldE5vdGlmTGlzdChyZWFkVWlOb3RpZmljYXRpb25zKCkpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoVVBEQVRFRF9FVkVOVCwgc3luYyk7XG4gICAgICBjb25zdCBvblN0b3JhZ2UgPSAoZXYpID0+IHtcbiAgICAgICAgaWYgKGV2ICYmIGV2LmtleSA9PT0gU1RPUkFHRV9LRVkpIHN5bmMoKTtcbiAgICAgIH07XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIG9uU3RvcmFnZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihVUERBVEVEX0VWRU5ULCBzeW5jKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBvblN0b3JhZ2UpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPFNlZ21lbnRcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIHBvc2l0aW9uOiAnc3RpY2t5JyxcbiAgICAgICAgdG9wOiAwLFxuICAgICAgICB6SW5kZXg6IDIwLFxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgICAgICBnYXA6ICcwLjc1ZW0nLFxuICAgICAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgICAgICBtYXJnaW5Ub3A6IDBcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICcwLjc1ZW0nLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICA8SGVhZGVyIGFzPSdoMycgc3R5bGU9e3sgbWFyZ2luOiAwIH19PlxuICAgICAgICAgIDxMaW5rIHRvPVwiL1wiIGFyaWEtbGFiZWw9XCJIdWIgaG9tZSwgaHViLmZhYnJpYy5wdWJcIj5cbiAgICAgICAgICAgIDxjb2RlPmh1Yi5mYWJyaWMucHViPC9jb2RlPlxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9IZWFkZXI+XG5cbiAgICAgICAgPEJ1dHRvbi5Hcm91cCBzaXplPSdzbWFsbCcgcm9sZT1cIm5hdmlnYXRpb25cIiBhcmlhLWxhYmVsPVwiUHJpbWFyeSBodWIgc2VjdGlvbnNcIj5cbiAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9cIiBiYXNpYz17IWFjdGl2ZSgnLycpfSBwcmltYXJ5PXthY3RpdmUoJy8nKX0gYXJpYS1jdXJyZW50PXthY3RpdmUoJy8nKSA/ICdwYWdlJyA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwiaG9tZVwiIC8+XG4gICAgICAgICAgICBIb21lXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAge2lzQWR2YW5jZWRNb2RlICYmIHVpRmxhZ3MucGVlcnMgJiYgIXB1YmxpY0h1YlZpc2l0b3IgPyAoXG4gICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9wZWVyc1wiIGJhc2ljPXshYWN0aXZlKCcvcGVlcnMnKX0gcHJpbWFyeT17YWN0aXZlKCcvcGVlcnMnKX0gYXJpYS1jdXJyZW50PXthY3RpdmUoJy9wZWVycycpID8gJ3BhZ2UnIDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cInNpdGVtYXBcIiAvPlxuICAgICAgICAgICAgICBQZWVyc1xuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPEJ1dHRvbiBhcz17TGlua30gdG89XCIvZG9jdW1lbnRzXCIgYmFzaWM9eyFhY3RpdmUoJy9kb2N1bWVudHMnKX0gcHJpbWFyeT17YWN0aXZlKCcvZG9jdW1lbnRzJyl9IGFyaWEtY3VycmVudD17YWN0aXZlKCcvZG9jdW1lbnRzJykgPyAncGFnZScgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgPEljb24gbmFtZT1cImZpbGUgb3V0bGluZVwiIC8+XG4gICAgICAgICAgICBEb2N1bWVudHNcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICB7IXB1YmxpY0h1YlZpc2l0b3IgJiYgaXNBZHZhbmNlZE1vZGUgPyAoXG4gICAgICAgICAgICA8QnV0dG9uIGFzPXtMaW5rfSB0bz1cIi9jb250cmFjdHNcIiBiYXNpYz17IWFjdGl2ZSgnL2NvbnRyYWN0cycpfSBwcmltYXJ5PXthY3RpdmUoJy9jb250cmFjdHMnKX0gYXJpYS1jdXJyZW50PXthY3RpdmUoJy9jb250cmFjdHMnKSA/ICdwYWdlJyA6IHVuZGVmaW5lZH0+XG4gICAgICAgICAgICAgIDxJY29uIG5hbWU9XCJmaWxlIGNvZGVcIiAvPlxuICAgICAgICAgICAgICBDb250cmFjdHNcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L0J1dHRvbi5Hcm91cD5cbiAgICAgICAgeyFwdWJsaWNIdWJWaXNpdG9yICYmIGlzQWR2YW5jZWRNb2RlID8gKFxuICAgICAgICA8RHJvcGRvd25cbiAgICAgICAgICBpdGVtXG4gICAgICAgICAgdHJpZ2dlcj17XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgIHRpdGxlPVwiTW9yZSBzZXJ2aWNlcyDigJQgQml0Y29pbiwgU2V0dGluZ3MsIEFkbWluLCBhbmQgb3RoZXIgcGFnZXNcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW9yZSBodWIgcGFnZXMgYW5kIHRvb2xzXCJcbiAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cIm1lbnVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZWxsaXBzaXMgaG9yaXpvbnRhbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIE1vcmVcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBwb2ludGluZz1cInRvcCBsZWZ0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxEcm9wZG93bi5NZW51PlxuICAgICAgICAgICAge3VpRmxhZ3MuZmVhdHVyZXMgPyAoXG4gICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtIGFzPXtMaW5rfSB0bz1cIi9mZWF0dXJlc1wiIGljb249XCJpbmZvIGNpcmNsZVwiIHRleHQ9XCJGZWF0dXJlc1wiIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHt1aUZsYWdzLmFjdGl2aXRpZXMgJiYgIXB1YmxpY0h1YlZpc2l0b3IgPyAoXG4gICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtXG4gICAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgICAgdG89XCIvbm90aWZpY2F0aW9uc1wiXG4gICAgICAgICAgICAgICAgaWNvbj1cImJlbGwgb3V0bGluZVwiXG4gICAgICAgICAgICAgICAgdGV4dD1cIk5vdGlmaWNhdGlvbnNcIlxuICAgICAgICAgICAgICAgIGFjdGl2ZT17cGF0aG5hbWUgPT09ICcvbm90aWZpY2F0aW9ucyd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHt1aUZsYWdzLmFjdGl2aXRpZXMgJiYgIXB1YmxpY0h1YlZpc2l0b3IgPyAoXG4gICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtXG4gICAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgICAgdG89XCIvYWN0aXZpdGllc1wiXG4gICAgICAgICAgICAgICAgaWNvbj1cImNvbW1lbnRzXCJcbiAgICAgICAgICAgICAgICB0ZXh0PVwiQWN0aXZpdHkgbG9nXCJcbiAgICAgICAgICAgICAgICBhY3RpdmU9e3BhdGhuYW1lID09PSAnL2FjdGl2aXRpZXMnfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7IXB1YmxpY0h1YlZpc2l0b3IgPyAoXG4gICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCIgaWNvbj1cImJpdGNvaW5cIiB0ZXh0PVwiQml0Y29pblwiIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHshcHVibGljSHViVmlzaXRvciAmJiAodWlGbGFncy5iaXRjb2luUGF5bWVudHMgfHwgdWlGbGFncy5iaXRjb2luTGlnaHRuaW5nKSA/IChcbiAgICAgICAgICAgICAgPERyb3Bkb3duLkl0ZW1cbiAgICAgICAgICAgICAgICBhcz17TGlua31cbiAgICAgICAgICAgICAgICB0bz17e1xuICAgICAgICAgICAgICAgICAgcGF0aG5hbWU6ICcvc2VydmljZXMvYml0Y29pbicsXG4gICAgICAgICAgICAgICAgICBoYXNoOiB1aUZsYWdzLmJpdGNvaW5QYXltZW50cyA/ICdmYWJyaWMtYml0Y29pbi1wYXlqb2luJyA6ICdmYWJyaWMtYml0Y29pbi1saWdodG5pbmcnXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uPVwic2hpZWxkIGFsdGVybmF0ZVwiXG4gICAgICAgICAgICAgICAgdGV4dD1cIlRyZWFzdXJ5IChQYXlqb2luIC8gTGlnaHRuaW5nKVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJIdWItbWFuYWdlZCBkZXBvc2l0czogUGF5am9pbiB3aGVuIFBheW1lbnRzIGFyZSBlbmFibGVkOyBvdGhlcndpc2UgTGlnaHRuaW5nIHNlY3Rpb25cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7dWlGbGFncy5iaXRjb2luUGF5bWVudHMgJiYgIXB1YmxpY0h1YlZpc2l0b3IgPyAoXG4gICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtIGFzPXtMaW5rfSB0bz1cIi9wYXltZW50c1wiIGljb249XCJjcmVkaXQgY2FyZCBvdXRsaW5lXCIgdGV4dD1cIlBheW1lbnRzXCIgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3VpRmxhZ3MuYml0Y29pbkludm9pY2VzICYmICFwdWJsaWNIdWJWaXNpdG9yID8gKFxuICAgICAgICAgICAgICA8RHJvcGRvd24uSXRlbSBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pbi9pbnZvaWNlcyNmYWJyaWMtaW52b2ljZXMtdGFiLWRlbW9cIiBpY29uPVwiZmlsZSBhbHRlcm5hdGUgb3V0bGluZVwiIHRleHQ9XCJJbnZvaWNlc1wiIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHt1aUZsYWdzLmJpdGNvaW5MaWdodG5pbmcgJiYgIXB1YmxpY0h1YlZpc2l0b3IgPyAoXG4gICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9saWdodG5pbmdcIiBpY29uPVwiYm9sdFwiIHRleHQ9XCJMaWdodG5pbmdcIiAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7dWlGbGFncy5iaXRjb2luRXhwbG9yZXIgJiYgIXB1YmxpY0h1YlZpc2l0b3IgPyAoXG4gICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2Jsb2Nrc1wiIGljb249XCJzZWFyY2hcIiB0ZXh0PVwiRXhwbG9yZXJcIiAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7IXB1YmxpY0h1YlZpc2l0b3IgPyAoXG4gICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL2ZhdWNldFwiIGljb249XCJ0aW50XCIgdGV4dD1cIkZhdWNldFwiIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHt1aUZsYWdzLmJpdGNvaW5SZXNvdXJjZXMgJiYgIXB1YmxpY0h1YlZpc2l0b3IgPyAoXG4gICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtIGFzPXtMaW5rfSB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luL3Jlc291cmNlc1wiIGljb249XCJjb2RlXCIgdGV4dD1cIkJpdGNvaW4gSFRUUCByZXNvdXJjZXNcIiAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7dWlGbGFncy5iaXRjb2luQ3Jvd2RmdW5kICYmICFwdWJsaWNIdWJWaXNpdG9yID8gKFxuICAgICAgICAgICAgICA8RHJvcGRvd24uSXRlbSBhcz17TGlua30gdG89XCIvc2VydmljZXMvYml0Y29pbi9jcm93ZGZ1bmRzXCIgaWNvbj1cImhlYXJ0IG91dGxpbmVcIiB0ZXh0PVwiQ3Jvd2RmdW5kc1wiIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHt1aUZsYWdzLnNpZGVjaGFpbiAmJiAhcHVibGljSHViVmlzaXRvciA/IChcbiAgICAgICAgICAgICAgPERyb3Bkb3duLkl0ZW0gYXM9e0xpbmt9IHRvPVwiL3NpZGVjaGFpbnNcIiBpY29uPVwicmFuZG9tXCIgdGV4dD1cIlN0YXRlY2hhaW5cIiAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7aGFzSHViQWRtaW5QZWVyTmF2ID8gKFxuICAgICAgICAgICAgICA8RHJvcGRvd24uSXRlbVxuICAgICAgICAgICAgICAgIGFzPXtMaW5rfVxuICAgICAgICAgICAgICAgIHRvPVwiL3NldHRpbmdzL2FkbWluXCJcbiAgICAgICAgICAgICAgICBpY29uPVwic2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgIHRleHQ9XCJBZG1pblwiXG4gICAgICAgICAgICAgICAgYWN0aXZlPXtwYXRobmFtZSA9PT0gJy9zZXR0aW5ncy9hZG1pbicgfHwgcGF0aG5hbWUuc3RhcnRzV2l0aCgnL3NldHRpbmdzL2FkbWluLycpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7aGFzSHViQWRtaW5QZWVyTmF2ID8gKFxuICAgICAgICAgICAgICA8RHJvcGRvd24uSXRlbVxuICAgICAgICAgICAgICAgIGFzPXtMaW5rfVxuICAgICAgICAgICAgICAgIHRvPVwiL3NldHRpbmdzL2NvbGxhYm9yYXRpb25cIlxuICAgICAgICAgICAgICAgIGljb249XCJ1c2Vyc1wiXG4gICAgICAgICAgICAgICAgdGV4dD1cIkNvbGxhYm9yYXRpb25cIlxuICAgICAgICAgICAgICAgIGFjdGl2ZT17cGF0aG5hbWUgPT09ICcvc2V0dGluZ3MvY29sbGFib3JhdGlvbid9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHt1aUZsYWdzLnNpZGVjaGFpbiAmJiBoYXNIdWJBZG1pblBlZXJOYXYgPyAoXG4gICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtXG4gICAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgICAgdG89XCIvc2V0dGluZ3MvYWRtaW4vYmVhY29uLWZlZGVyYXRpb25cIlxuICAgICAgICAgICAgICAgIGljb249XCJzdGFyXCJcbiAgICAgICAgICAgICAgICB0ZXh0PVwiQmVhY29uIEZlZGVyYXRpb25cIlxuICAgICAgICAgICAgICAgIGFjdGl2ZT17cGF0aG5hbWUgPT09ICcvc2V0dGluZ3MvYWRtaW4vYmVhY29uLWZlZGVyYXRpb24nfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8RHJvcGRvd24uSXRlbVxuICAgICAgICAgICAgICBhcz17TGlua31cbiAgICAgICAgICAgICAgdG89XCIvc2V0dGluZ3NcIlxuICAgICAgICAgICAgICBpY29uPVwic2V0dGluZ1wiXG4gICAgICAgICAgICAgIHRleHQ9XCJTZXR0aW5nc1wiXG4gICAgICAgICAgICAgIGFjdGl2ZT17cGF0aG5hbWUgPT09ICcvc2V0dGluZ3MnfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHt1aUZsYWdzLnNpZGVjaGFpbiAmJiAhcHVibGljSHViVmlzaXRvciA/IChcbiAgICAgICAgICAgICAgPERyb3Bkb3duLkl0ZW1cbiAgICAgICAgICAgICAgICBhcz17TGlua31cbiAgICAgICAgICAgICAgICB0bz1cIi9mZWRlcmF0aW9uc1wiXG4gICAgICAgICAgICAgICAgaWNvbj1cInVzZXJzXCJcbiAgICAgICAgICAgICAgICB0ZXh0PVwiRmVkZXJhdGlvbnNcIlxuICAgICAgICAgICAgICAgIGFjdGl2ZT17cGF0aG5hbWUgPT09ICcvZmVkZXJhdGlvbnMnIHx8IHBhdGhuYW1lID09PSAnL3NldHRpbmdzL2ZlZGVyYXRpb24nfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8RHJvcGRvd24uSXRlbSBhcz17TGlua30gdG89XCIvc2V0dGluZ3Mvc2VjdXJpdHlcIiBpY29uPVwic2hpZWxkXCIgdGV4dD1cIlNlY3VyaXR5ICYgZGVsZWdhdGlvblwiIC8+XG4gICAgICAgICAgICB7dWlGbGFncy5zaWRlY2hhaW4gJiYgIXB1YmxpY0h1YlZpc2l0b3IgPyAoXG4gICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8RHJvcGRvd24uRGl2aWRlciAvPlxuICAgICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtXG4gICAgICAgICAgICAgICAgICBhcz1cImFcIlxuICAgICAgICAgICAgICAgICAgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC9tYW5pZmVzdFwiXG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICBpY29uPVwiY29kZVwiXG4gICAgICAgICAgICAgICAgICB0ZXh0PVwiRGlzdHJpYnV0ZWQgbWFuaWZlc3QgKEpTT04pXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtXG4gICAgICAgICAgICAgICAgICBhcz1cImFcIlxuICAgICAgICAgICAgICAgICAgaHJlZj1cIi9zZXJ2aWNlcy9kaXN0cmlidXRlZC92YXVsdFwiXG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICBpY29uPVwiYml0Y29pblwiXG4gICAgICAgICAgICAgICAgICB0ZXh0PVwiRmVkZXJhdGlvbiB2YXVsdCAoSlNPTilcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L0Ryb3Bkb3duLk1lbnU+XG4gICAgICAgIDwvRHJvcGRvd24+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnMC41ZW0nLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICB7c2hvd1NpZ25lZEluQ29udHJvbHMgJiYgaXNBZHZhbmNlZE1vZGUgPyAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgZGlzcGxheTogJ2lubGluZS1ibG9jaycgfX0+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGFzPXtMaW5rfVxuICAgICAgICAgICAgICB0bz1cIi9ub3RpZmljYXRpb25zXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgIG5vdGlmTGlzdC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgID8gYCR7bm90aWZMaXN0Lmxlbmd0aH0gaW4tYXBwIG5vdGlmaWNhdGlvbihzKSDigJQgb3BlbiBOb3RpZmljYXRpb25zYFxuICAgICAgICAgICAgICAgICAgOiAnTm90aWZpY2F0aW9ucyDigJQgd2FsbGV0LCBQYXlqb2luLCBhbmQgaHViIHRvYXN0cyAoYWN0aXZpdHkgbG9nIGlzIHVuZGVyIE1vcmUpJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJOb3RpZmljYXRpb25zXCJcbiAgICAgICAgICAgICAgYXJpYS1jdXJyZW50PXtwYXRobmFtZSA9PT0gJy9ub3RpZmljYXRpb25zJyA/ICdwYWdlJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgcHJpbWFyeT17cGF0aG5hbWUgPT09ICcvbm90aWZpY2F0aW9ucyd9XG4gICAgICAgICAgICAgIGJhc2ljPXtwYXRobmFtZSAhPT0gJy9ub3RpZmljYXRpb25zJ31cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcwLjQ1ZW0gMC41NWVtJyxcbiAgICAgICAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gbmFtZT1cImJlbGwgb3V0bGluZVwiIC8+XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIHtub3RpZkxpc3QubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgIGNpcmN1bGFyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJyZWRcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJtaW5pXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiAtNiwgcmlnaHQ6IC02LCBtYXJnaW46IDAsIG1pbldpZHRoOiAnMS41ZW0nIH19XG4gICAgICAgICAgICAgICAgdGl0bGU9e2Ake25vdGlmTGlzdC5sZW5ndGh9IG5vdGlmaWNhdGlvbihzKWB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7bm90aWZMaXN0Lmxlbmd0aCA+IDk5ID8gJzk5KycgOiBTdHJpbmcobm90aWZMaXN0Lmxlbmd0aCl9XG4gICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgeyhzaG93U2lnbmVkSW5Db250cm9scyB8fCBpc0xvY2tlZFN0YXRlKSA/IChcbiAgICAgICAgICA8UG9wdXBcbiAgICAgICAgICAgIG9uPVwiaG92ZXJcIlxuICAgICAgICAgICAgaG92ZXJhYmxlXG4gICAgICAgICAgICBwb3NpdGlvbj1cImJvdHRvbSBjZW50ZXJcIlxuICAgICAgICAgICAgdHJpZ2dlcj17KFxuICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17XG4gICAgICAgICAgICAgICAgICAhc2hvd0xpdmVCYWxhbmNlSW5DaGlwXG4gICAgICAgICAgICAgICAgICAgID8gKGlzUGFzc3dvcmRMb2NrZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ1dhbGxldCDigJQgdW5sb2NrIGlkZW50aXR5IHRvIHNob3cgYmFsYW5jZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaXNXYXRjaE9ubHlJZGVudGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdXYWxsZXQg4oCUIG9wZW4gQml0Y29pbiB0cmFuc2FjdGlvbnMgKHdhdGNoLW9ubHkpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdXYWxsZXQg4oCUIGxvZyBpbiB0byB0cmFjayBiYWxhbmNlJylcbiAgICAgICAgICAgICAgICAgICAgOiBjbGllbnRCYWxhbmNlTG9hZGluZyAmJiBjbGllbnRCYWxhbmNlID09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICA/ICdXYWxsZXQg4oCUIGxvYWRpbmcgYmFsYW5jZSdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdXYWxsZXQg4oCUIGJyb3dzZXIgYmFsYW5jZTsgb3BlbnMgd2FsbGV0IG1lbnUnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgICFzaG93TGl2ZUJhbGFuY2VJbkNoaXBcbiAgICAgICAgICAgICAgICAgICAgPyAoaXNQYXNzd29yZExvY2tlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnVW5sb2NrIHlvdXIgaWRlbnRpdHkgdG8gc2hvdyB5b3VyIGJyb3dzZXIgd2FsbGV0IGJhbGFuY2UgaGVyZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaXNXYXRjaE9ubHlJZGVudGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdJbXBvcnQgYSBmdWxsIGtleSBvciB1bmxvY2sgdG8gdHJhY2sgeW91ciBicm93c2VyIHdhbGxldCBiYWxhbmNlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdMb2cgaW4gb3Igc2V0IGEgbG9jYWwgaWRlbnRpdHkgdG8gdHJhY2sgeW91ciBicm93c2VyIHdhbGxldCBiYWxhbmNlJylcbiAgICAgICAgICAgICAgICAgICAgOiBjbGllbnRCYWxhbmNlTG9hZGluZyAmJiBjbGllbnRCYWxhbmNlID09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICA/ICdMb2FkaW5nIHlvdXIgYnJvd3NlciB3YWxsZXQgYmFsYW5jZeKApidcbiAgICAgICAgICAgICAgICAgICAgICA6ICdIb3ZlciBmb3Igd2FsbGV0IGFjdGlvbnM6IG9wZW4gd2FsbGV0LCBkZXBvc2l0LCBvciB3aXRoZHJhdydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICghb25SZWZyZXNoQmFsYW5jZSB8fCAhc2hvd0xpdmVCYWxhbmNlSW5DaGlwKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgaWYgKG5vdyAtIGJhbGFuY2VIb3ZlclJlZnJlc2hBdFJlZi5jdXJyZW50IDwgODAwMCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgYmFsYW5jZUhvdmVyUmVmcmVzaEF0UmVmLmN1cnJlbnQgPSBub3c7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvblJlZnJlc2hCYWxhbmNlKCk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiYml0Y29pblwiIGNvbG9yPXtzaG93TGl2ZUJhbGFuY2VJbkNoaXAgPyAnb3JhbmdlJyA6ICdncmV5J30gLz5cbiAgICAgICAgICAgICAgICB7IXNob3dMaXZlQmFsYW5jZUluQ2hpcFxuICAgICAgICAgICAgICAgICAgPyAoaXNQYXNzd29yZExvY2tlZCA/ICdVbmxvY2sgZm9yIGJhbGFuY2UnIDogJ1dhbGxldCcpXG4gICAgICAgICAgICAgICAgICA6IChjbGllbnRCYWxhbmNlTG9hZGluZyAmJiBjbGllbnRCYWxhbmNlID09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICA/ICfigKYnXG4gICAgICAgICAgICAgICAgICAgICAgOiAoY2xpZW50QmFsYW5jZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShjbGllbnRCYWxhbmNlLmJhbGFuY2VTYXRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IChjbGllbnRCYWxhbmNlLmJhbGFuY2VTYXRzID49IDEwMDAwMDAwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHsoY2xpZW50QmFsYW5jZS5iYWxhbmNlU2F0cyAvIDEwMDAwMDAwMCkudG9GaXhlZCg0KX0gQlRDYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgJHtmb3JtYXRTYXRzRGlzcGxheShjbGllbnRCYWxhbmNlLmJhbGFuY2VTYXRzKX0gc2F0c2ApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJ+KAlCcpKX1cbiAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICBjb250ZW50PXt3YWxsZXRDaGlwTWVudX1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgeyFwdWJsaWNIdWJWaXNpdG9yICYmIGlzQWR2YW5jZWRNb2RlICYmIGJpdGNvaW4gJiYgYml0Y29pbi5tZW1wb29sVHhDb3VudCAhPSBudWxsICYmIE51bWJlcihiaXRjb2luLm1lbXBvb2xUeENvdW50KSA+IDAgJiYgKFxuICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICB0bz1cIi9zZXJ2aWNlcy9iaXRjb2luXCJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBjb2xvcj1cIm9yYW5nZVwiXG4gICAgICAgICAgICB0aXRsZT1cIlRyYW5zYWN0aW9ucyB3YWl0aW5nIGluIHRoaXMgSHViIG5vZGXigJlzIG1lbXBvb2wg4oCUIG9wZW4gQml0Y29pbiBkYXNoYm9hcmRcIlxuICAgICAgICAgICAgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPVwiY2xvY2sgb3V0bGluZVwiIC8+XG4gICAgICAgICAgICBNZW1wb29sIHtiaXRjb2luLm1lbXBvb2xUeENvdW50fVxuICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICl9XG4gICAgICAgIHtpc0F1dGhlZCA/IChcbiAgICAgICAgICAgIDxEcm9wZG93blxuICAgICAgICAgICAgICB0cmlnZ2VyPXtcbiAgICAgICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHByaW1hcnkgdGl0bGU9XCJJZGVudGl0eSDigJQgbWVudSBvciBsb2NrXCI+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwidW5sb2NrXCIgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6ICcwLjE1ZW0nIH19IC8+XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwidXNlciBjaXJjbGVcIiAvPlxuICAgICAgICAgICAgICAgICAge2lkZW50aXR5TGFiZWx9XG4gICAgICAgICAgICAgICAgICA8SWNvbiBuYW1lPVwiZHJvcGRvd25cIiAvPlxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBvaW50aW5nPVwidG9wIHJpZ2h0XCJcbiAgICAgICAgICAgICAgaWNvbj17bnVsbH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPERyb3Bkb3duLk1lbnU+XG4gICAgICAgICAgICAgICAgPERyb3Bkb3duLkl0ZW0gaWNvbj1cInVzZXJcIiB0ZXh0PVwiVXNlciBwcm9maWxlXCIgb25DbGljaz17KCkgPT4geyBvblByb2ZpbGUgJiYgb25Qcm9maWxlKCk7IH19IC8+XG4gICAgICAgICAgICAgICAgPERyb3Bkb3duLkl0ZW0gaWNvbj1cInBlbmNpbFwiIHRleHQ9XCJTaWduIG1lc3NhZ2VcIiBvbkNsaWNrPXsoKSA9PiB7IG9uU2lnbk1lc3NhZ2UgJiYgb25TaWduTWVzc2FnZSgpOyB9fSAvPlxuICAgICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtXG4gICAgICAgICAgICAgICAgICBpY29uPVwicGx1Z1wiXG4gICAgICAgICAgICAgICAgICB0ZXh0PVwiQnJpZGdlIGNvbm5lY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4geyBvbk9wZW5TZXR0aW5ncyAmJiBvbk9wZW5TZXR0aW5ncygpOyB9fVxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJIdWIgV2ViU29ja2V0IFVSTCBhbmQgYnJpZGdlIG9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPERyb3Bkb3duLkRpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICB7bG9jYWxJZGVudGl0eSAmJiBsb2NhbElkZW50aXR5LnhwcnYgJiYgKGxvY2FsSWRlbnRpdHkucGFzc3dvcmRQcm90ZWN0ZWQgfHwgcGxhaW50ZXh0WHBydk9uRGlzaykgPyAoXG4gICAgICAgICAgICAgICAgICA8RHJvcGRvd24uSXRlbVxuICAgICAgICAgICAgICAgICAgICBpY29uPVwibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgIHRleHQ9XCJMb2NrIGlkZW50aXR5XCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICghb25Mb2NrSWRlbnRpdHkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICBvbkxvY2tJZGVudGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8RHJvcGRvd24uRGl2aWRlciAvPlxuICAgICAgICAgICAgICAgIDxEcm9wZG93bi5JdGVtIGljb249XCJ0cmFzaFwiIHRleHQ9XCJEZXN0cm95IGlkZW50aXR5XCIgb25DbGljaz17KCkgPT4geyBvbkRlc3Ryb3lJZGVudGl0eSAmJiBvbkRlc3Ryb3lJZGVudGl0eSgpOyB9fSAvPlxuICAgICAgICAgICAgICA8L0Ryb3Bkb3duLk1lbnU+XG4gICAgICAgICAgICA8L0Ryb3Bkb3duPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBiYXNpYz17IWlzTG9ja2VkU3RhdGV9XG4gICAgICAgICAgICBwcmltYXJ5PXtpc0xvY2tlZFN0YXRlfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNMb2NrZWRTdGF0ZSAmJiBvblVubG9ja0lkZW50aXR5KSB7XG4gICAgICAgICAgICAgICAgb25VbmxvY2tJZGVudGl0eSgpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0F1dGhlZCAmJiBvbkxvZ2luKSB7XG4gICAgICAgICAgICAgICAgb25Mb2dpbigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICBpc1Bhc3N3b3JkTG9ja2VkXG4gICAgICAgICAgICAgICAgPyAnVW5sb2NrIGlkZW50aXR5IOKAlCBlbnRlciB5b3VyIGVuY3J5cHRpb24gcGFzc3dvcmQnXG4gICAgICAgICAgICAgICAgOiBpc1dhdGNoT25seUlkZW50aXR5XG4gICAgICAgICAgICAgICAgICA/ICdXYXRjaC1vbmx5IGlkZW50aXR5IOKAlCBvcGVuIHRvIGltcG9ydCBhIGZ1bGwga2V5IG9yIHVzZSBkZXNrdG9wIHNpZ25pbmcnXG4gICAgICAgICAgICAgICAgICA6ICdMb2cgaW4nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXtcbiAgICAgICAgICAgICAgaXNQYXNzd29yZExvY2tlZFxuICAgICAgICAgICAgICAgID8gJ0xvY2tlZCDigJQgdW5sb2NrIEZhYnJpYyBpZGVudGl0eSdcbiAgICAgICAgICAgICAgICA6IGlzV2F0Y2hPbmx5SWRlbnRpdHlcbiAgICAgICAgICAgICAgICAgID8gJ1dhdGNoLW9ubHkgRmFicmljIGlkZW50aXR5IOKAlCBvcGVuIG9wdGlvbnMnXG4gICAgICAgICAgICAgICAgICA6ICdMb2cgaW4gb3IgY3JlYXRlIEZhYnJpYyBpZGVudGl0eSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBuYW1lPXtpc1Bhc3N3b3JkTG9ja2VkID8gJ2xvY2snIDogaXNXYXRjaE9ubHlJZGVudGl0eSA/ICdleWUnIDogJ3VzZXIgY2lyY2xlJ30gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIHtpc1Bhc3N3b3JkTG9ja2VkID8gJ0xvY2tlZCcgOiBpc1dhdGNoT25seUlkZW50aXR5ID8gJ1dhdGNoLW9ubHknIDogaWRlbnRpdHlMYWJlbH1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgICAge29uT3BlblNldHRpbmdzID8gKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBiYXNpY1xuICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgdGl0bGU9XCJTZXR0aW5ncyBhbmQgVUkgbW9kZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiT3BlbiBzZXR0aW5nc1wiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbk9wZW5TZXR0aW5ncyAmJiBvbk9wZW5TZXR0aW5ncygpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJjb2dcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvZGl2PlxuICAgIDwvU2VnbWVudD5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb3BQYW5lbDtcbiJdLCJuYW1lcyI6WyJfc2xpY2VkVG9BcnJheSIsInIiLCJlIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInQiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJsZW5ndGgiLCJuIiwibCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaSIsInUiLCJmIiwibyIsIm5leHQiLCJPYmplY3QiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiaXNBcnJheSIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTGluayIsInVzZUxvY2F0aW9uIiwiX3JlcXVpcmUyIiwiQnV0dG9uIiwiRHJvcGRvd24iLCJIZWFkZXIiLCJJY29uIiwiTGFiZWwiLCJQb3B1cCIsIlNlZ21lbnQiLCJfcmVxdWlyZTMiLCJmb3JtYXRTYXRzRGlzcGxheSIsIl9yZXF1aXJlNCIsInBsYWludGV4dE1hc3RlckZyb21TdG9yZWQiLCJfcmVxdWlyZTUiLCJyZWFkVWlOb3RpZmljYXRpb25zIiwiVVBEQVRFRF9FVkVOVCIsIlNUT1JBR0VfS0VZIiwiX3JlcXVpcmU2IiwibG9hZEh1YlVpRmVhdHVyZUZsYWdzIiwic3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MiLCJfcmVxdWlyZTciLCJyZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIiwiX3JlcXVpcmU4IiwicmVhZFN0b3JhZ2VKU09OIiwiX3JlcXVpcmU5IiwiYnVpbGRMb2NhbEZhYnJpY0lkZW50aXR5UGF5bG9hZCIsIlRvcFBhbmVsIiwicHJvcHMiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwiaHViQWRkcmVzcyIsIlN0cmluZyIsIm9uT3BlblNldHRpbmdzIiwiYXV0aCIsIm9uTG9naW4iLCJvbk1hbmFnZUlkZW50aXR5Iiwib25VbmxvY2tJZGVudGl0eSIsIm9uTG9ja0lkZW50aXR5Iiwib25Qcm9maWxlIiwib25TaWduTWVzc2FnZSIsIm9uRGVzdHJveUlkZW50aXR5Iiwib25SZWZyZXNoQmFsYW5jZSIsImhhc0xvY2FsSWRlbnRpdHkiLCJoYXNMb2NrZWRJZGVudGl0eSIsImxvY2FsSWRlbnRpdHkiLCJiaXRjb2luIiwiY2xpZW50QmFsYW5jZSIsImNsaWVudEJhbGFuY2VMb2FkaW5nIiwiYWRtaW5Ub2tlblByb3AiLCJhZG1pblRva2VuIiwiaGFzSHViQWRtaW5QZWVyTmF2IiwicHVibGljSHViVmlzaXRvciIsImZvcm1hdElkZW50aXR5VmFsdWUiLCJzIiwiaGVhZCIsInRhaWwiLCJjb25jYXQiLCJoYXNQcml2YXRlIiwieHBydiIsImlzQXV0aGVkIiwic2hvd1NpZ25lZEluQ29udHJvbHMiLCJwZXJzaXN0ZWRJZGVudGl0eSIsInVzZU1lbW8iLCJ3aW5kb3ciLCJwYXJzZWQiLCJpZCIsInhwdWIiLCJibCIsInJlc29sdmVkIiwicmVjb3JkIiwidW5kZWZpbmVkIiwicGxhaW50ZXh0WHBydk9uRGlzayIsInAiLCJpZGVudGl0eVNvdXJjZSIsImhhc0FueUxvY2FsSWRlbnRpdHkiLCJwYXNzd29yZFByb3RlY3RlZElkZW50aXR5IiwicGFzc3dvcmRQcm90ZWN0ZWQiLCJpc1Bhc3N3b3JkTG9ja2VkIiwiaXNXYXRjaE9ubHlJZGVudGl0eSIsImlzTG9ja2VkU3RhdGUiLCJjYW5TaG93Q2xpZW50QmFsYW5jZSIsInNob3dMaXZlQmFsYW5jZUluQ2hpcCIsImlkZW50aXR5TGFiZWwiLCJ1c2VybmFtZSIsImFkZHJlc3MiLCJhY3RpdmUiLCJwcmVmaXgiLCJzdGFydHNXaXRoIiwiX1JlYWN0JHVzZVN0YXRlIiwidXNlU3RhdGUiLCJfUmVhY3QkdXNlU3RhdGUyIiwibm90aWZMaXN0Iiwic2V0Tm90aWZMaXN0IiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJ1aVRpY2siLCJzZXRVaVRpY2siLCJiYWxhbmNlSG92ZXJSZWZyZXNoQXRSZWYiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJ1aUZsYWdzIiwiaXNBZHZhbmNlZE1vZGUiLCJhZHZhbmNlZE1vZGUiLCJiYWxhbmNlQ2hpcEhyZWYiLCJkZXBvc2l0Rmxvd0hyZWYiLCJiaXRjb2luUGF5bWVudHMiLCJ3aXRoZHJhd0Zsb3dIcmVmIiwiY2hpcEJhbGFuY2VTYXRzIiwiTnVtYmVyIiwiYmFsYW5jZVNhdHMiLCJoYXNTcGVuZGFibGVDaGlwQmFsYW5jZSIsImlzRmluaXRlIiwid2FsbGV0Q2hpcE1lbnUiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJwYWRkaW5nIiwibWF4V2lkdGgiLCJtYXJnaW5Cb3R0b20iLCJmb250U2l6ZSIsImxpbmVIZWlnaHQiLCJhcyIsInRvIiwiZmx1aWQiLCJzaXplIiwiaWNvbiIsImxhYmVsUG9zaXRpb24iLCJjb2xvciIsImRpc2FibGVkIiwic3luYyIsImFkZEV2ZW50TGlzdGVuZXIiLCJvblN0b3JhZ2UiLCJldiIsImtleSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJwb3NpdGlvbiIsInRvcCIsInpJbmRleCIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJnYXAiLCJmbGV4V3JhcCIsIm1hcmdpblRvcCIsIm1hcmdpbiIsIkdyb3VwIiwicm9sZSIsImJhc2ljIiwicHJpbWFyeSIsInBlZXJzIiwiaXRlbSIsInRyaWdnZXIiLCJ0aXRsZSIsInBvaW50aW5nIiwiTWVudSIsImZlYXR1cmVzIiwiSXRlbSIsInRleHQiLCJhY3Rpdml0aWVzIiwiYml0Y29pbkxpZ2h0bmluZyIsImhhc2giLCJiaXRjb2luSW52b2ljZXMiLCJiaXRjb2luRXhwbG9yZXIiLCJiaXRjb2luUmVzb3VyY2VzIiwiYml0Y29pbkNyb3dkZnVuZCIsInNpZGVjaGFpbiIsIkZyYWdtZW50IiwiRGl2aWRlciIsImhyZWYiLCJ0YXJnZXQiLCJyZWwiLCJib3JkZXIiLCJib3hTaGFkb3ciLCJiYWNrZ3JvdW5kIiwiY2lyY3VsYXIiLCJyaWdodCIsIm1pbldpZHRoIiwib24iLCJob3ZlcmFibGUiLCJjdXJzb3IiLCJvbk1vdXNlRW50ZXIiLCJub3ciLCJEYXRlIiwiY3VycmVudCIsIl8iLCJ0b0ZpeGVkIiwiY29udGVudCIsIm1lbXBvb2xUeENvdW50IiwibWFyZ2luUmlnaHQiLCJvbkNsaWNrIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/TopPanel.js\n\n}')},"./components/TrackedApplicationContractsPanel.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require.Button,\n Header = _require.Header,\n Icon = _require.Icon,\n List = _require.List,\n Message = _require.Message,\n Segment = _require.Segment;\nvar _require2 = __webpack_require__(/*! ../functions/hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require2.readHubAdminTokenFromBrowser;\nfunction rpc(_x) {\n return _rpc.apply(this, arguments);\n}\n/**\n * Operator UI: pending CONTRACT_PUBLISH offers → Accept into Beacon-tracked set.\n * @param {object} [props]\n * @param {boolean} [props.embedded] When true, omit outer Segment (parent already wraps).\n */\nfunction _rpc() {\n _rpc = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(method) {\n var params,\n res,\n json,\n _args2 = arguments;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n params = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};\n _context2.n = 1;\n return fetch(\'/services/rpc\', {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n },\n body: JSON.stringify({\n jsonrpc: \'2.0\',\n id: Date.now(),\n method: method,\n params: [params]\n })\n });\n case 1:\n res = _context2.v;\n _context2.n = 2;\n return res.json();\n case 2:\n json = _context2.v;\n if (!(json && json.error)) {\n _context2.n = 3;\n break;\n }\n throw new Error(json.error.message || String(json.error));\n case 3:\n return _context2.a(2, json && json.result != null ? json.result : json);\n }\n }, _callee2);\n }));\n return _rpc.apply(this, arguments);\n}\nfunction TrackedApplicationContractsPanel() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var embedded = !!(props && props.embedded);\n var _React$useState = React.useState(null),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n summary = _React$useState2[0],\n setSummary = _React$useState2[1];\n var _React$useState3 = React.useState(null),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n error = _React$useState4[0],\n setError = _React$useState4[1];\n var _React$useState5 = React.useState(null),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n busyId = _React$useState6[0],\n setBusyId = _React$useState6[1];\n var _React$useState7 = React.useState(true),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n loading = _React$useState8[0],\n setLoading = _React$useState8[1];\n var refresh = React.useCallback(function () {\n setLoading(true);\n return rpc(\'ListTrackedApplicationContracts\', {}).then(function (r) {\n setSummary(r);\n setError(null);\n })["catch"](function (e) {\n setError(e && e.message ? e.message : String(e));\n })["finally"](function () {\n return setLoading(false);\n });\n }, []);\n React.useEffect(function () {\n refresh();\n var onEvt = function onEvt() {\n refresh();\n };\n if (typeof window !== \'undefined\') {\n window.addEventListener(\'fabric:trackedApplicationContract\', onEvt);\n }\n return function () {\n if (typeof window !== \'undefined\') {\n window.removeEventListener(\'fabric:trackedApplicationContract\', onEvt);\n }\n };\n }, [refresh]);\n var act = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(method, contractId) {\n var adminToken, r, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n adminToken = readHubAdminTokenFromBrowser();\n if (adminToken) {\n _context.n = 1;\n break;\n }\n setError(\'Admin token required (paste under Admin) to accept or reject.\');\n return _context.a(2);\n case 1:\n setBusyId(contractId);\n _context.p = 2;\n _context.n = 3;\n return rpc(method, {\n contractId: contractId,\n adminToken: adminToken\n });\n case 3:\n r = _context.v;\n if (!(r && r.status === \'error\')) {\n _context.n = 4;\n break;\n }\n throw new Error(r.message || \'request failed\');\n case 4:\n setSummary(r.summary || null);\n _context.n = 5;\n return refresh();\n case 5:\n _context.n = 7;\n break;\n case 6:\n _context.p = 6;\n _t = _context.v;\n setError(_t && _t.message ? _t.message : String(_t));\n case 7:\n _context.p = 7;\n setBusyId(null);\n return _context.f(7);\n case 8:\n return _context.a(2);\n }\n }, _callee, null, [[2, 6, 7, 8]]);\n }));\n return function act(_x2, _x3) {\n return _ref.apply(this, arguments);\n };\n }();\n var pending = summary && Array.isArray(summary.pending) ? summary.pending : [];\n var accepted = summary && Array.isArray(summary.accepted) ? summary.accepted : [];\n var stateRoot = summary && summary.stateRoot ? String(summary.stateRoot) : null;\n var body = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Header, {\n as: embedded ? \'h4\' : \'h3\'\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "file code outline",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Header.Content, null, embedded ? \'Pending & accepted publishes\' : \'Tracked application contracts\')), !embedded ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#555\',\n lineHeight: 1.5,\n marginBottom: \'0.75em\'\n }\n }, "Inbound ", /*#__PURE__*/React.createElement("code", null, "CONTRACT_PUBLISH"), " frames (application namespaces) land here as pending offers. Accepting one adds it to the local Beacon-tracked set; the next epoch seals", \' \', /*#__PURE__*/React.createElement("code", null, "payload.contracts.stateDigest"), " (the state root of accepted published contracts).") : null, loading && /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small"\n }, "Loading\\u2026"), error && /*#__PURE__*/React.createElement(Message, {\n negative: true,\n size: "small",\n onDismiss: function onDismiss() {\n return setError(null);\n }\n }, error), stateRoot && /*#__PURE__*/React.createElement(Message, {\n size: "small",\n style: {\n wordBreak: \'break-all\'\n }\n }, /*#__PURE__*/React.createElement(Message.Header, null, "Contracts state root"), /*#__PURE__*/React.createElement("code", null, stateRoot)), /*#__PURE__*/React.createElement(Header, {\n as: "h4"\n }, "Pending publishes (", pending.length, ")"), pending.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#777\'\n }\n }, "No pending CONTRACT_PUBLISH offers.") : /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true\n }, pending.map(function (row) {\n return /*#__PURE__*/React.createElement(List.Item, {\n key: row.contractId\n }, /*#__PURE__*/React.createElement(List.Content, {\n floated: "right"\n }, /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n primary: true,\n disabled: busyId === row.contractId,\n onClick: function onClick() {\n return act(\'AcceptTrackedApplicationContract\', row.contractId);\n }\n }, "Accept"), /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n disabled: busyId === row.contractId,\n onClick: function onClick() {\n return act(\'RejectTrackedApplicationContract\', row.contractId);\n },\n style: {\n marginLeft: \'0.35em\'\n }\n }, "Reject")), /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, row.name || \'Unnamed contract\'), /*#__PURE__*/React.createElement(List.Description, {\n style: {\n wordBreak: \'break-all\'\n }\n }, /*#__PURE__*/React.createElement("code", null, row.contractId), row.version != null ? " \\xB7 v".concat(row.version) : \'\', row.receivedAt ? " \\xB7 ".concat(row.receivedAt) : \'\')));\n })), /*#__PURE__*/React.createElement(Header, {\n as: "h4",\n style: {\n marginTop: \'1em\'\n }\n }, "Accepted (", accepted.length, ")"), accepted.length === 0 ? /*#__PURE__*/React.createElement("p", {\n style: {\n color: \'#777\'\n }\n }, "None accepted yet \\u2014 Beacon contracts root is empty.") : /*#__PURE__*/React.createElement(List, {\n divided: true,\n relaxed: true\n }, accepted.map(function (row) {\n return /*#__PURE__*/React.createElement(List.Item, {\n key: row.contractId\n }, /*#__PURE__*/React.createElement(List.Content, {\n floated: "right"\n }, /*#__PURE__*/React.createElement(Button, {\n size: "mini",\n basic: true,\n negative: true,\n disabled: busyId === row.contractId,\n onClick: function onClick() {\n return act(\'RejectTrackedApplicationContract\', row.contractId);\n }\n }, "Untrack")), /*#__PURE__*/React.createElement(List.Content, null, /*#__PURE__*/React.createElement(List.Header, null, row.name || \'Unnamed contract\'), /*#__PURE__*/React.createElement(List.Description, {\n style: {\n wordBreak: \'break-all\'\n }\n }, /*#__PURE__*/React.createElement("code", null, row.contractId), row.stateDigest ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("br", null), "stateDigest: ", /*#__PURE__*/React.createElement("code", null, row.stateDigest)) : null)));\n })), /*#__PURE__*/React.createElement(Button, {\n size: "small",\n basic: true,\n onClick: refresh,\n style: {\n marginTop: \'0.5em\'\n }\n }, "Refresh"));\n if (embedded) return /*#__PURE__*/React.createElement("div", {\n className: "fabric-tracked-application-contracts"\n }, body);\n return /*#__PURE__*/React.createElement(Segment, null, body);\n}\nmodule.exports = TrackedApplicationContractsPanel;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL1RyYWNrZWRBcHBsaWNhdGlvbkNvbnRyYWN0c1BhbmVsLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLGFBQUEsSUFDYix1S0FBQUMsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLFdBQUEsOEJBQUFDLEVBQUFOLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLEVBQUFFLENBQUEsUUFBQUMsQ0FBQSxHQUFBTCxDQUFBLElBQUFBLENBQUEsQ0FBQU0sU0FBQSxZQUFBQyxTQUFBLEdBQUFQLENBQUEsR0FBQU8sU0FBQSxFQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsTUFBQSxDQUFBTCxDQUFBLENBQUFDLFNBQUEsVUFBQUssbUJBQUEsQ0FBQUgsQ0FBQSx1QkFBQVYsQ0FBQSxFQUFBRSxDQUFBLEVBQUFFLENBQUEsUUFBQUUsQ0FBQSxFQUFBQyxDQUFBLEVBQUFHLENBQUEsRUFBQUksQ0FBQSxNQUFBQyxDQUFBLEdBQUFYLENBQUEsUUFBQVksQ0FBQSxPQUFBQyxDQUFBLEtBQUFGLENBQUEsS0FBQWIsQ0FBQSxLQUFBZ0IsQ0FBQSxFQUFBcEIsQ0FBQSxFQUFBcUIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFOLENBQUEsRUFBQU0sQ0FBQSxDQUFBQyxJQUFBLENBQUF2QixDQUFBLE1BQUFzQixDQUFBLFdBQUFBLEVBQUFyQixDQUFBLEVBQUFDLENBQUEsV0FBQU0sQ0FBQSxHQUFBUCxDQUFBLEVBQUFRLENBQUEsTUFBQUcsQ0FBQSxHQUFBWixDQUFBLEVBQUFtQixDQUFBLENBQUFmLENBQUEsR0FBQUYsQ0FBQSxFQUFBbUIsQ0FBQSxnQkFBQUMsRUFBQXBCLENBQUEsRUFBQUUsQ0FBQSxTQUFBSyxDQUFBLEdBQUFQLENBQUEsRUFBQVUsQ0FBQSxHQUFBUixDQUFBLEVBQUFILENB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cEUsT0FBTyxRQUNMaUIsSUFDTSxDQUFDO0FBRWQ7QUFFQW1GLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHeEUsZ0NBQWdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL1RyYWNrZWRBcHBsaWNhdGlvbkNvbnRyYWN0c1BhbmVsLmpzPzM3ZmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7IEJ1dHRvbiwgSGVhZGVyLCBJY29uLCBMaXN0LCBNZXNzYWdlLCBTZWdtZW50IH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuY29uc3QgeyByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvaHViQWRtaW5Ub2tlbkJyb3dzZXInKTtcblxuYXN5bmMgZnVuY3Rpb24gcnBjIChtZXRob2QsIHBhcmFtcyA9IHt9KSB7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKCcvc2VydmljZXMvcnBjJywge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGpzb25ycGM6ICcyLjAnLCBpZDogRGF0ZS5ub3coKSwgbWV0aG9kLCBwYXJhbXM6IFtwYXJhbXNdIH0pXG4gIH0pO1xuICBjb25zdCBqc29uID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgaWYgKGpzb24gJiYganNvbi5lcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihqc29uLmVycm9yLm1lc3NhZ2UgfHwgU3RyaW5nKGpzb24uZXJyb3IpKTtcbiAgfVxuICByZXR1cm4ganNvbiAmJiBqc29uLnJlc3VsdCAhPSBudWxsID8ganNvbi5yZXN1bHQgOiBqc29uO1xufVxuXG4vKipcbiAqIE9wZXJhdG9yIFVJOiBwZW5kaW5nIENPTlRSQUNUX1BVQkxJU0ggb2ZmZXJzIOKGkiBBY2NlcHQgaW50byBCZWFjb24tdHJhY2tlZCBzZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtib29sZWFufSBbcHJvcHMuZW1iZWRkZWRdIFdoZW4gdHJ1ZSwgb21pdCBvdXRlciBTZWdtZW50IChwYXJlbnQgYWxyZWFkeSB3cmFwcykuXG4gKi9cbmZ1bmN0aW9uIFRyYWNrZWRBcHBsaWNhdGlvbkNvbnRyYWN0c1BhbmVsIChwcm9wcyA9IHt9KSB7XG4gIGNvbnN0IGVtYmVkZGVkID0gISEocHJvcHMgJiYgcHJvcHMuZW1iZWRkZWQpO1xuICBjb25zdCBbc3VtbWFyeSwgc2V0U3VtbWFyeV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2J1c3lJZCwgc2V0QnVzeUlkXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSBSZWFjdC51c2VTdGF0ZSh0cnVlKTtcblxuICBjb25zdCByZWZyZXNoID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgcmV0dXJuIHJwYygnTGlzdFRyYWNrZWRBcHBsaWNhdGlvbkNvbnRyYWN0cycsIHt9KVxuICAgICAgLnRoZW4oKHIpID0+IHtcbiAgICAgICAgc2V0U3VtbWFyeShyKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIHNldEVycm9yKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiBzZXRMb2FkaW5nKGZhbHNlKSk7XG4gIH0sIFtdKTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlZnJlc2goKTtcbiAgICBjb25zdCBvbkV2dCA9ICgpID0+IHsgcmVmcmVzaCgpOyB9O1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2ZhYnJpYzp0cmFja2VkQXBwbGljYXRpb25Db250cmFjdCcsIG9uRXZ0KTtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZmFicmljOnRyYWNrZWRBcHBsaWNhdGlvbkNvbnRyYWN0Jywgb25FdnQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtyZWZyZXNoXSk7XG5cbiAgY29uc3QgYWN0ID0gYXN5bmMgKG1ldGhvZCwgY29udHJhY3RJZCkgPT4ge1xuICAgIGNvbnN0IGFkbWluVG9rZW4gPSByZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyKCk7XG4gICAgaWYgKCFhZG1pblRva2VuKSB7XG4gICAgICBzZXRFcnJvcignQWRtaW4gdG9rZW4gcmVxdWlyZWQgKHBhc3RlIHVuZGVyIEFkbWluKSB0byBhY2NlcHQgb3IgcmVqZWN0LicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRCdXN5SWQoY29udHJhY3RJZCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSBhd2FpdCBycGMobWV0aG9kLCB7IGNvbnRyYWN0SWQsIGFkbWluVG9rZW4gfSk7XG4gICAgICBpZiAociAmJiByLnN0YXR1cyA9PT0gJ2Vycm9yJykgdGhyb3cgbmV3IEVycm9yKHIubWVzc2FnZSB8fCAncmVxdWVzdCBmYWlsZWQnKTtcbiAgICAgIHNldFN1bW1hcnkoci5zdW1tYXJ5IHx8IG51bGwpO1xuICAgICAgYXdhaXQgcmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHNldEVycm9yKGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0QnVzeUlkKG51bGwpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBwZW5kaW5nID0gKHN1bW1hcnkgJiYgQXJyYXkuaXNBcnJheShzdW1tYXJ5LnBlbmRpbmcpKSA/IHN1bW1hcnkucGVuZGluZyA6IFtdO1xuICBjb25zdCBhY2NlcHRlZCA9IChzdW1tYXJ5ICYmIEFycmF5LmlzQXJyYXkoc3VtbWFyeS5hY2NlcHRlZCkpID8gc3VtbWFyeS5hY2NlcHRlZCA6IFtdO1xuICBjb25zdCBzdGF0ZVJvb3QgPSBzdW1tYXJ5ICYmIHN1bW1hcnkuc3RhdGVSb290ID8gU3RyaW5nKHN1bW1hcnkuc3RhdGVSb290KSA6IG51bGw7XG5cbiAgY29uc3QgYm9keSA9IChcbiAgICA8PlxuICAgICAgPEhlYWRlciBhcz17ZW1iZWRkZWQgPyAnaDQnIDogJ2gzJ30+XG4gICAgICAgIDxJY29uIG5hbWU9XCJmaWxlIGNvZGUgb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgIDxIZWFkZXIuQ29udGVudD57ZW1iZWRkZWQgPyAnUGVuZGluZyAmIGFjY2VwdGVkIHB1Ymxpc2hlcycgOiAnVHJhY2tlZCBhcHBsaWNhdGlvbiBjb250cmFjdHMnfTwvSGVhZGVyLkNvbnRlbnQ+XG4gICAgICA8L0hlYWRlcj5cbiAgICAgIHshZW1iZWRkZWQgPyAoXG4gICAgICA8cCBzdHlsZT17eyBjb2xvcjogJyM1NTUnLCBsaW5lSGVpZ2h0OiAxLjUsIG1hcmdpbkJvdHRvbTogJzAuNzVlbScgfX0+XG4gICAgICAgIEluYm91bmQgPGNvZGU+Q09OVFJBQ1RfUFVCTElTSDwvY29kZT4gZnJhbWVzIChhcHBsaWNhdGlvbiBuYW1lc3BhY2VzKSBsYW5kIGhlcmUgYXMgcGVuZGluZyBvZmZlcnMuXG4gICAgICAgIEFjY2VwdGluZyBvbmUgYWRkcyBpdCB0byB0aGUgbG9jYWwgQmVhY29uLXRyYWNrZWQgc2V0OyB0aGUgbmV4dCBlcG9jaCBzZWFsc3snICd9XG4gICAgICAgIDxjb2RlPnBheWxvYWQuY29udHJhY3RzLnN0YXRlRGlnZXN0PC9jb2RlPiAodGhlIHN0YXRlIHJvb3Qgb2YgYWNjZXB0ZWQgcHVibGlzaGVkIGNvbnRyYWN0cykuXG4gICAgICA8L3A+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHtsb2FkaW5nICYmIDxNZXNzYWdlIGluZm8gc2l6ZT1cInNtYWxsXCI+TG9hZGluZ+KApjwvTWVzc2FnZT59XG4gICAgICB7ZXJyb3IgJiYgPE1lc3NhZ2UgbmVnYXRpdmUgc2l6ZT1cInNtYWxsXCIgb25EaXNtaXNzPXsoKSA9PiBzZXRFcnJvcihudWxsKX0+e2Vycm9yfTwvTWVzc2FnZT59XG4gICAgICB7c3RhdGVSb290ICYmIChcbiAgICAgICAgPE1lc3NhZ2Ugc2l6ZT1cInNtYWxsXCIgc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fT5cbiAgICAgICAgICA8TWVzc2FnZS5IZWFkZXI+Q29udHJhY3RzIHN0YXRlIHJvb3Q8L01lc3NhZ2UuSGVhZGVyPlxuICAgICAgICAgIDxjb2RlPntzdGF0ZVJvb3R9PC9jb2RlPlxuICAgICAgICA8L01lc3NhZ2U+XG4gICAgICApfVxuXG4gICAgICA8SGVhZGVyIGFzPVwiaDRcIj5QZW5kaW5nIHB1Ymxpc2hlcyAoe3BlbmRpbmcubGVuZ3RofSk8L0hlYWRlcj5cbiAgICAgIHtwZW5kaW5nLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNzc3JyB9fT5ObyBwZW5kaW5nIENPTlRSQUNUX1BVQkxJU0ggb2ZmZXJzLjwvcD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxMaXN0IGRpdmlkZWQgcmVsYXhlZD5cbiAgICAgICAgICB7cGVuZGluZy5tYXAoKHJvdykgPT4gKFxuICAgICAgICAgICAgPExpc3QuSXRlbSBrZXk9e3Jvdy5jb250cmFjdElkfT5cbiAgICAgICAgICAgICAgPExpc3QuQ29udGVudCBmbG9hdGVkPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17YnVzeUlkID09PSByb3cuY29udHJhY3RJZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGFjdCgnQWNjZXB0VHJhY2tlZEFwcGxpY2F0aW9uQ29udHJhY3QnLCByb3cuY29udHJhY3RJZCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQWNjZXB0XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtidXN5SWQgPT09IHJvdy5jb250cmFjdElkfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gYWN0KCdSZWplY3RUcmFja2VkQXBwbGljYXRpb25Db250cmFjdCcsIHJvdy5jb250cmFjdElkKX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICcwLjM1ZW0nIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgUmVqZWN0XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICA8TGlzdC5Db250ZW50PlxuICAgICAgICAgICAgICAgIDxMaXN0LkhlYWRlcj57cm93Lm5hbWUgfHwgJ1VubmFtZWQgY29udHJhY3QnfTwvTGlzdC5IZWFkZXI+XG4gICAgICAgICAgICAgICAgPExpc3QuRGVzY3JpcHRpb24gc3R5bGU9e3sgd29yZEJyZWFrOiAnYnJlYWstYWxsJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxjb2RlPntyb3cuY29udHJhY3RJZH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICB7cm93LnZlcnNpb24gIT0gbnVsbCA/IGAgwrcgdiR7cm93LnZlcnNpb259YCA6ICcnfVxuICAgICAgICAgICAgICAgICAge3Jvdy5yZWNlaXZlZEF0ID8gYCDCtyAke3Jvdy5yZWNlaXZlZEF0fWAgOiAnJ31cbiAgICAgICAgICAgICAgICA8L0xpc3QuRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIDwvTGlzdC5Db250ZW50PlxuICAgICAgICAgICAgPC9MaXN0Lkl0ZW0+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvTGlzdD5cbiAgICAgICl9XG5cbiAgICAgIDxIZWFkZXIgYXM9XCJoNFwiIHN0eWxlPXt7IG1hcmdpblRvcDogJzFlbScgfX0+QWNjZXB0ZWQgKHthY2NlcHRlZC5sZW5ndGh9KTwvSGVhZGVyPlxuICAgICAge2FjY2VwdGVkLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgPHAgc3R5bGU9e3sgY29sb3I6ICcjNzc3JyB9fT5Ob25lIGFjY2VwdGVkIHlldCDigJQgQmVhY29uIGNvbnRyYWN0cyByb290IGlzIGVtcHR5LjwvcD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxMaXN0IGRpdmlkZWQgcmVsYXhlZD5cbiAgICAgICAgICB7YWNjZXB0ZWQubWFwKChyb3cpID0+IChcbiAgICAgICAgICAgIDxMaXN0Lkl0ZW0ga2V5PXtyb3cuY29udHJhY3RJZH0+XG4gICAgICAgICAgICAgIDxMaXN0LkNvbnRlbnQgZmxvYXRlZD1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1pbmlcIlxuICAgICAgICAgICAgICAgICAgYmFzaWNcbiAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17YnVzeUlkID09PSByb3cuY29udHJhY3RJZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGFjdCgnUmVqZWN0VHJhY2tlZEFwcGxpY2F0aW9uQ29udHJhY3QnLCByb3cuY29udHJhY3RJZCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgVW50cmFja1xuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L0xpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgPExpc3QuQ29udGVudD5cbiAgICAgICAgICAgICAgICA8TGlzdC5IZWFkZXI+e3Jvdy5uYW1lIHx8ICdVbm5hbWVkIGNvbnRyYWN0J308L0xpc3QuSGVhZGVyPlxuICAgICAgICAgICAgICAgIDxMaXN0LkRlc2NyaXB0aW9uIHN0eWxlPXt7IHdvcmRCcmVhazogJ2JyZWFrLWFsbCcgfX0+XG4gICAgICAgICAgICAgICAgICA8Y29kZT57cm93LmNvbnRyYWN0SWR9PC9jb2RlPlxuICAgICAgICAgICAgICAgICAge3Jvdy5zdGF0ZURpZ2VzdCA/IChcbiAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZURpZ2VzdDogPGNvZGU+e3Jvdy5zdGF0ZURpZ2VzdH08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9MaXN0LkRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICA8L0xpc3QuQ29udGVudD5cbiAgICAgICAgICAgIDwvTGlzdC5JdGVtPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L0xpc3Q+XG4gICAgICApfVxuICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiBiYXNpYyBvbkNsaWNrPXtyZWZyZXNofSBzdHlsZT17eyBtYXJnaW5Ub3A6ICcwLjVlbScgfX0+XG4gICAgICAgIFJlZnJlc2hcbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvPlxuICApO1xuXG4gIGlmIChlbWJlZGRlZCkgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiZmFicmljLXRyYWNrZWQtYXBwbGljYXRpb24tY29udHJhY3RzXCI+e2JvZHl9PC9kaXY+O1xuICByZXR1cm4gKFxuICAgIDxTZWdtZW50PlxuICAgICAge2JvZHl9XG4gICAgPC9TZWdtZW50PlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRyYWNrZWRBcHBsaWNhdGlvbkNvbnRyYWN0c1BhbmVsO1xuIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIlN5bWJvbCIsIm4iLCJpdGVyYXRvciIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsIm5leHQiLCJwdXNoIiwiaXNBcnJheSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiQnV0dG9uIiwiSGVhZGVyIiwiSWNvbiIsIkxpc3QiLCJNZXNzYWdlIiwiU2VnbWVudCIsIl9yZXF1aXJlMiIsInJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIiLCJycGMiLCJfeCIsIl9ycGMiLCJfY2FsbGVlMiIsIm1ldGhvZCIsInBhcmFtcyIsInJlcyIsImpzb24iLCJfYXJnczIiLCJfY29udGV4dDIiLCJ1bmRlZmluZWQiLCJmZXRjaCIsImhlYWRlcnMiLCJBY2NlcHQiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImpzb25ycGMiLCJpZCIsIkRhdGUiLCJub3ciLCJlcnJvciIsIkVycm9yIiwibWVzc2FnZSIsIlN0cmluZyIsInJlc3VsdCIsIlRyYWNrZWRBcHBsaWNhdGlvbkNvbnRyYWN0c1BhbmVsIiwicHJvcHMiLCJlbWJlZGRlZCIsIl9SZWFjdCR1c2VTdGF0ZSIsInVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsInN1bW1hcnkiLCJzZXRTdW1tYXJ5IiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJzZXRFcnJvciIsIl9SZWFjdCR1c2VTdGF0ZTUiLCJfUmVhY3QkdXNlU3RhdGU2IiwiYnVzeUlkIiwic2V0QnVzeUlkIiwiX1JlYWN0JHVzZVN0YXRlNyIsIl9SZWFjdCR1c2VTdGF0ZTgiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsInJlZnJlc2giLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsIm9uRXZ0Iiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhY3QiLCJfcmVmIiwiX2NhbGxlZSIsImNvbnRyYWN0SWQiLCJhZG1pblRva2VuIiwiX3QiLCJfY29udGV4dCIsInN0YXR1cyIsIl94MiIsIl94MyIsInBlbmRpbmciLCJhY2NlcHRlZCIsInN0YXRlUm9vdCIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsImFzIiwiQ29udGVudCIsInN0eWxlIiwiY29sb3IiLCJsaW5lSGVpZ2h0IiwibWFyZ2luQm90dG9tIiwiaW5mbyIsInNpemUiLCJuZWdhdGl2ZSIsIm9uRGlzbWlzcyIsIndvcmRCcmVhayIsImRpdmlkZWQiLCJyZWxheGVkIiwibWFwIiwicm93IiwiSXRlbSIsImtleSIsImZsb2F0ZWQiLCJwcmltYXJ5IiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwiYmFzaWMiLCJtYXJnaW5MZWZ0IiwiRGVzY3JpcHRpb24iLCJ2ZXJzaW9uIiwiY29uY2F0IiwicmVjZWl2ZWRBdCIsIm1hcmdpblRvcCIsInN0YXRlRGlnZXN0IiwiY2xhc3NOYW1lIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./components/TrackedApplicationContractsPanel.js\n\n}')},"./components/fabricIdentity/FabricHubAdminTokenNotice.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Shown after first-time Hub HTTP setup while the user completes Fabric identity (keys).\n * Same copy is used from {@link FabricPostSetupIdentityWizard} and {@link IdentityManager}.\n */\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Message = _require.Message,\n Icon = _require.Icon;\n\n/**\n * @param {{ compact?: boolean }} props\n */\nfunction FabricHubAdminTokenNotice(props) {\n var compact = !!(props && props.compact);\n return /*#__PURE__*/React.createElement(Message, {\n positive: !compact,\n info: compact,\n size: "small",\n style: {\n marginBottom: compact ? \'0.85em\' : \'1em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "check circle",\n "aria-hidden": "true"\n }), /*#__PURE__*/React.createElement(Message.Header, null, "Hub admin token saved"), /*#__PURE__*/React.createElement(Message.Content, {\n style: {\n marginTop: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n lineHeight: 1.55\n }\n }, "First-time operator setup stored an ", /*#__PURE__*/React.createElement("strong", null, "admin token"), " in this browser (local storage). It authenticates hub-only actions such as regtest block generation and some settings changes \\u2014 it is", \' \', /*#__PURE__*/React.createElement("strong", null, "not"), " your Fabric signing identity."), /*#__PURE__*/React.createElement("p", {\n style: {\n margin: \'0.65em 0 0\',\n lineHeight: 1.55\n }\n }, "Continue below to ", /*#__PURE__*/React.createElement("strong", null, "generate or restore"), " your Fabric keys (wallet, documents, signing).")));\n}\nmodule.exports = FabricHubAdminTokenNotice;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL2ZhYnJpY0lkZW50aXR5L0ZhYnJpY0h1YkFkbWluVG9rZW5Ob3RpY2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFNQSxLQUFLLEdBQUdDLG1CQUFPLENBQUMsNENBQU8sQ0FBQztBQUM5QixJQUFBQyxRQUFBLEdBQTBCRCxtQkFBTyxDQUFDLDRFQUFtQixDQUFDO0VBQTlDRSxPQUFPLEdBQUFELFFBQUEsQ0FBUEMsT0FBTztFQUFFQyxJQUFJLEdBQUFGLFFBQUEsQ0FBSkUsSUFBSTs7QUFFckI7QUFDQTtBQUNBO0FBQ0EsU0FBU0MseUJBQXlCQSxDQUFFQyxLQUFLLEVBQUU7RUFDekMsSUFBTUMsT0FBTyxHQUFHLENBQUMsRUFBRUQsS0FBSyxJQUFJQSxLQUFLLENBQUNDLE9BQU8sQ0FBQztFQUMxQyxvQkFDRVAsS0FBQSxDQUFBUSxhQUFBLENBQUNMLE9BQU87SUFDTk0sUUFBUSxFQUFFLENBQUNGLE9BQVE7SUFDbkJHLElBQUksRUFBRUgsT0FBUTtJQUNkSSxJQUFJLEVBQUMsT0FBTztJQUNaQyxLQUFLLEVBQUU7TUFBRUMsWUFBWSxFQUFFTixPQUFPLEdBQUcsUUFBUSxHQUFHO0lBQU07RUFBRSxnQkFFcERQLEtBQUEsQ0FBQVEsYUFBQSxDQUFDSixJQUFJO0lBQUNVLElBQUksRUFBQyxjQUFjO0lBQUMsZUFBWTtFQUFNLENBQUUsQ0FBQyxlQUMvQ2QsS0FBQSxDQUFBUSxhQUFBLENBQUNMLE9BQU8sQ0FBQ1ksTUFBTSxRQUFDLHVCQUFxQyxDQUFDLGVBQ3REZixLQUFBLENBQUFRLGFBQUEsQ0FBQ0wsT0FBTyxDQUFDYSxPQUFPO0lBQUNKLEtBQUssRUFBRTtNQUFFSyxTQUFTLEVBQUU7SUFBUztFQUFFLGdCQUM5Q2pCLEtBQUEsQ0FBQVEsYUFBQTtJQUFHSSxLQUFLLEVBQUU7TUFBRU0sTUFBTSxFQUFFLENBQUM7TUFBRUMsVUFBVSxFQUFFO0lBQUs7RUFBRSxHQUFDLHNDQUNMLGVBQUFuQixLQUFBLENBQUFRLGFBQUEsaUJBQVEsYUFBbUIsQ0FBQywrSUFDb0MsRUFBQyxHQUFHLGVBQ3hHUixLQUFBLENBQUFRLGFBQUEsaUJBQVEsS0FBVyxDQUFDLGtDQUNuQixDQUFDLGVBQ0pSLEtBQUEsQ0FBQVEsYUFBQTtJQUFHSSxLQUFLLEVBQUU7TUFBRU0sTUFBTSxFQUFFLFlBQVk7TUFBRUMsVUFBVSxFQUFFO0lBQUs7RUFBRSxHQUFDLG9CQUNsQyxlQUFBbkIsS0FBQSxDQUFBUSxhQUFBLGlCQUFRLHFCQUEyQixDQUFDLG1EQUNyRCxDQUNZLENBQ1YsQ0FBQztBQUVkO0FBRUFZLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHaEIseUJBQXlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb21wb25lbnRzL2ZhYnJpY0lkZW50aXR5L0ZhYnJpY0h1YkFkbWluVG9rZW5Ob3RpY2UuanM/YjFkYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU2hvd24gYWZ0ZXIgZmlyc3QtdGltZSBIdWIgSFRUUCBzZXR1cCB3aGlsZSB0aGUgdXNlciBjb21wbGV0ZXMgRmFicmljIGlkZW50aXR5IChrZXlzKS5cbiAqIFNhbWUgY29weSBpcyB1c2VkIGZyb20ge0BsaW5rIEZhYnJpY1Bvc3RTZXR1cElkZW50aXR5V2l6YXJkfSBhbmQge0BsaW5rIElkZW50aXR5TWFuYWdlcn0uXG4gKi9cblxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgeyBNZXNzYWdlLCBJY29uIH0gPSByZXF1aXJlKCdzZW1hbnRpYy11aS1yZWFjdCcpO1xuXG4vKipcbiAqIEBwYXJhbSB7eyBjb21wYWN0PzogYm9vbGVhbiB9fSBwcm9wc1xuICovXG5mdW5jdGlvbiBGYWJyaWNIdWJBZG1pblRva2VuTm90aWNlIChwcm9wcykge1xuICBjb25zdCBjb21wYWN0ID0gISEocHJvcHMgJiYgcHJvcHMuY29tcGFjdCk7XG4gIHJldHVybiAoXG4gICAgPE1lc3NhZ2VcbiAgICAgIHBvc2l0aXZlPXshY29tcGFjdH1cbiAgICAgIGluZm89e2NvbXBhY3R9XG4gICAgICBzaXplPVwic21hbGxcIlxuICAgICAgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiBjb21wYWN0ID8gJzAuODVlbScgOiAnMWVtJyB9fVxuICAgID5cbiAgICAgIDxJY29uIG5hbWU9XCJjaGVjayBjaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgPE1lc3NhZ2UuSGVhZGVyPkh1YiBhZG1pbiB0b2tlbiBzYXZlZDwvTWVzc2FnZS5IZWFkZXI+XG4gICAgICA8TWVzc2FnZS5Db250ZW50IHN0eWxlPXt7IG1hcmdpblRvcDogJzAuMzVlbScgfX0+XG4gICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogMCwgbGluZUhlaWdodDogMS41NSB9fT5cbiAgICAgICAgICBGaXJzdC10aW1lIG9wZXJhdG9yIHNldHVwIHN0b3JlZCBhbiA8c3Ryb25nPmFkbWluIHRva2VuPC9zdHJvbmc+IGluIHRoaXMgYnJvd3NlciAobG9jYWwgc3RvcmFnZSkuXG4gICAgICAgICAgSXQgYXV0aGVudGljYXRlcyBodWItb25seSBhY3Rpb25zIHN1Y2ggYXMgcmVndGVzdCBibG9jayBnZW5lcmF0aW9uIGFuZCBzb21lIHNldHRpbmdzIGNoYW5nZXMg4oCUIGl0IGlzeycgJ31cbiAgICAgICAgICA8c3Ryb25nPm5vdDwvc3Ryb25nPiB5b3VyIEZhYnJpYyBzaWduaW5nIGlkZW50aXR5LlxuICAgICAgICA8L3A+XG4gICAgICAgIDxwIHN0eWxlPXt7IG1hcmdpbjogJzAuNjVlbSAwIDAnLCBsaW5lSGVpZ2h0OiAxLjU1IH19PlxuICAgICAgICAgIENvbnRpbnVlIGJlbG93IHRvIDxzdHJvbmc+Z2VuZXJhdGUgb3IgcmVzdG9yZTwvc3Ryb25nPiB5b3VyIEZhYnJpYyBrZXlzICh3YWxsZXQsIGRvY3VtZW50cywgc2lnbmluZykuXG4gICAgICAgIDwvcD5cbiAgICAgIDwvTWVzc2FnZS5Db250ZW50PlxuICAgIDwvTWVzc2FnZT5cbiAgKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGYWJyaWNIdWJBZG1pblRva2VuTm90aWNlO1xuIl0sIm5hbWVzIjpbIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiTWVzc2FnZSIsIkljb24iLCJGYWJyaWNIdWJBZG1pblRva2VuTm90aWNlIiwicHJvcHMiLCJjb21wYWN0IiwiY3JlYXRlRWxlbWVudCIsInBvc2l0aXZlIiwiaW5mbyIsInNpemUiLCJzdHlsZSIsIm1hcmdpbkJvdHRvbSIsIm5hbWUiLCJIZWFkZXIiLCJDb250ZW50IiwibWFyZ2luVG9wIiwibWFyZ2luIiwibGluZUhlaWdodCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/fabricIdentity/FabricHubAdminTokenNotice.js\n\n}')},"./components/fabricIdentity/FabricIdentityAccountControls.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nvar React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nvar _require = __webpack_require__(/*! semantic-ui-react */ \"./node_modules/semantic-ui-react/dist/es/index.js\"),\n Dropdown = _require.Dropdown,\n Header = _require.Header;\nvar _require2 = __webpack_require__(/*! ../../functions/fabricHubLocalIdentity */ \"./functions/fabricHubLocalIdentity.js\"),\n plaintextMasterFromStored = _require2.plaintextMasterFromStored;\nvar _require3 = __webpack_require__(/*! ../../functions/fabricBrowserState */ \"./functions/fabricBrowserState.js\"),\n readStorageJSON = _require3.readStorageJSON;\n\n/** Highest Fabric BIP44 account index shown in Hub quick-switch UI (still one HD wallet). */\nvar MAX_VISIBLE_ACCOUNT_INDEX = 24;\n\n/**\n * Dropdown to switch the Fabric-protocol account index (same mnemonics HD tree, new id/xpub/signing subtree).\n *\n * Disabled when encrypted identity is locked (master not decryptable locally without password interaction).\n *\n * @param {object} props\n * @param {object|null} props.localIdentity\n * @param {function(number):void} props.onFabricAccountChange\n */\nfunction FabricIdentityAccountControls(props) {\n var local = props.localIdentity || null;\n var _onChange = props && typeof props.onFabricAccountChange === 'function' ? props.onFabricAccountChange : null;\n var modeOk = !!(local && local.fabricIdentityMode === 'account');\n var stored = null;\n try {\n stored = typeof window !== 'undefined' ? readStorageJSON('fabric.identity.local', null) : null;\n } catch (e) {\n stored = null;\n }\n var diskMaster = !!(stored && plaintextMasterFromStored(stored));\n var memMaster = !!(local && String(local.masterXprv || '').trim());\n var role = stored && stored.fabricHdRole != null ? String(stored.fabricHdRole) : '';\n var switchBlocked = role === 'accountNode' || role === 'watchAccount';\n\n /** Need HD master to pivot account index; account-node or watch-only identities cannot switch. */\n var canSwitch = modeOk && (diskMaster || memMaster) && !switchBlocked;\n var idxRaw = local && local.fabricAccountIndex != null ? local.fabricAccountIndex : 0;\n var idx = Math.max(0, Math.min(MAX_VISIBLE_ACCOUNT_INDEX, Math.floor(Number(idxRaw)) || 0));\n if (!modeOk || !_onChange) return null;\n var options = [];\n for (var i = 0; i <= MAX_VISIBLE_ACCOUNT_INDEX; i++) {\n options.push({\n key: \"fab-acct-\".concat(i),\n text: \"Account \".concat(i),\n value: i\n });\n }\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Header, {\n as: \"label\",\n htmlFor: \"fabric-hub-fabric-account-select\",\n style: {\n marginRight: '0.5em',\n marginBottom: 0\n }\n }, \"Fabric account\"), /*#__PURE__*/React.createElement(Dropdown, {\n id: \"fabric-hub-fabric-account-select\",\n selection: true,\n compact: true,\n value: idx,\n options: options,\n disabled: !canSwitch,\n title: !canSwitch ? 'Unlock your identity (master key) first to switch Fabric accounts.' : 'Fabric BIP44 account index — same mnemonic, distinct protocol signing subtree (Hub default is account 0).',\n onChange: function onChange(e, d) {\n var v = d && (d.value != null ? Number(d.value) : NaN);\n if (!Number.isFinite(v) || v < 0) return;\n _onChange(Math.floor(v));\n }\n }));\n}\nmodule.exports = FabricIdentityAccountControls;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL2ZhYnJpY0lkZW50aXR5L0ZhYnJpY0lkZW50aXR5QWNjb3VudENvbnRyb2xzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQU1BLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyw0Q0FBTyxDQUFDO0FBQzlCLElBQUFDLFFBQUEsR0FHSUQsbUJBQU8sQ0FBQyw0RUFBbUIsQ0FBQztFQUY5QkUsUUFBUSxHQUFBRCxRQUFBLENBQVJDLFFBQVE7RUFDUkMsTUFBTSxHQUFBRixRQUFBLENBQU5FLE1BQU07QUFHUixJQUFBQyxTQUFBLEdBRUlKLG1CQUFPLENBQUMscUZBQXdDLENBQUM7RUFEbkRLLHlCQUF5QixHQUFBRCxTQUFBLENBQXpCQyx5QkFBeUI7QUFFM0IsSUFBQUMsU0FBQSxHQUE0Qk4sbUJBQU8sQ0FBQyw2RUFBb0MsQ0FBQztFQUFqRU8sZUFBZSxHQUFBRCxTQUFBLENBQWZDLGVBQWU7O0FBRXZCO0FBQ0EsSUFBTUMseUJBQXlCLEdBQUcsRUFBRTs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsNkJBQTZCQSxDQUFFQyxLQUFLLEVBQUU7RUFDN0MsSUFBTUMsS0FBSyxHQUFHRCxLQUFLLENBQUNFLGFBQWEsSUFBSSxJQUFJO0VBQ3pDLElBQU1DLFNBQVEsR0FBR0gsS0FBSyxJQUFJLE9BQU9BLEtBQUssQ0FBQ0kscUJBQXFCLEtBQUssVUFBVSxHQUN2RUosS0FBSyxDQUFDSSxxQkFBcUIsR0FDM0IsSUFBSTtFQUNSLElBQU1DLE1BQU0sR0FBRyxDQUFDLEVBQUVKLEtBQUssSUFBSUEsS0FBSyxDQUFDSyxrQkFBa0IsS0FBSyxTQUFTLENBQUM7RUFDbEUsSUFBSUMsTUFBTSxHQUFHLElBQUk7RUFDakIsSUFBSTtJQUNGQSxNQUFNLEdBQUcsT0FBT0MsTUFBTSxLQUFLLFdBQVcsR0FBR1gsZUFBZSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxHQUFHLElBQUk7RUFDaEcsQ0FB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RVA7QUFFQUcsTUFBTSxDQUFDQyxPQUFPLEdBQUdwRCw2QkFBNkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2NvbXBvbmVudHMvZmFicmljSWRlbnRpdHkvRmFicmljSWRlbnRpdHlBY2NvdW50Q29udHJvbHMuanM/Y2M5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbmNvbnN0IHtcbiAgRHJvcGRvd24sXG4gIEhlYWRlclxufSA9IHJlcXVpcmUoJ3NlbWFudGljLXVpLXJlYWN0Jyk7XG5cbmNvbnN0IHtcbiAgcGxhaW50ZXh0TWFzdGVyRnJvbVN0b3JlZFxufSA9IHJlcXVpcmUoJy4uLy4uL2Z1bmN0aW9ucy9mYWJyaWNIdWJMb2NhbElkZW50aXR5Jyk7XG5jb25zdCB7IHJlYWRTdG9yYWdlSlNPTiB9ID0gcmVxdWlyZSgnLi4vLi4vZnVuY3Rpb25zL2ZhYnJpY0Jyb3dzZXJTdGF0ZScpO1xuXG4vKiogSGlnaGVzdCBGYWJyaWMgQklQNDQgYWNjb3VudCBpbmRleCBzaG93biBpbiBIdWIgcXVpY2stc3dpdGNoIFVJIChzdGlsbCBvbmUgSEQgd2FsbGV0KS4gKi9cbmNvbnN0IE1BWF9WSVNJQkxFX0FDQ09VTlRfSU5ERVggPSAyNDtcblxuLyoqXG4gKiBEcm9wZG93biB0byBzd2l0Y2ggdGhlIEZhYnJpYy1wcm90b2NvbCBhY2NvdW50IGluZGV4IChzYW1lIG1uZW1vbmljcyBIRCB0cmVlLCBuZXcgaWQveHB1Yi9zaWduaW5nIHN1YnRyZWUpLlxuICpcbiAqIERpc2FibGVkIHdoZW4gZW5jcnlwdGVkIGlkZW50aXR5IGlzIGxvY2tlZCAobWFzdGVyIG5vdCBkZWNyeXB0YWJsZSBsb2NhbGx5IHdpdGhvdXQgcGFzc3dvcmQgaW50ZXJhY3Rpb24pLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtvYmplY3R8bnVsbH0gcHJvcHMubG9jYWxJZGVudGl0eVxuICogQHBhcmFtIHtmdW5jdGlvbihudW1iZXIpOnZvaWR9IHByb3BzLm9uRmFicmljQWNjb3VudENoYW5nZVxuICovXG5mdW5jdGlvbiBGYWJyaWNJZGVudGl0eUFjY291bnRDb250cm9scyAocHJvcHMpIHtcbiAgY29uc3QgbG9jYWwgPSBwcm9wcy5sb2NhbElkZW50aXR5IHx8IG51bGw7XG4gIGNvbnN0IG9uQ2hhbmdlID0gcHJvcHMgJiYgdHlwZW9mIHByb3BzLm9uRmFicmljQWNjb3VudENoYW5nZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gcHJvcHMub25GYWJyaWNBY2NvdW50Q2hhbmdlXG4gICAgOiBudWxsO1xuICBjb25zdCBtb2RlT2sgPSAhIShsb2NhbCAmJiBsb2NhbC5mYWJyaWNJZGVudGl0eU1vZGUgPT09ICdhY2NvdW50Jyk7XG4gIGxldCBzdG9yZWQgPSBudWxsO1xuICB0cnkge1xuICAgIHN0b3JlZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gcmVhZFN0b3JhZ2VKU09OKCdmYWJyaWMuaWRlbnRpdHkubG9jYWwnLCBudWxsKSA6IG51bGw7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzdG9yZWQgPSBudWxsO1xuICB9XG4gIGNvbnN0IGRpc2tNYXN0ZXIgPSAhIShzdG9yZWQgJiYgcGxhaW50ZXh0TWFzdGVyRnJvbVN0b3JlZChzdG9yZWQpKTtcbiAgY29uc3QgbWVtTWFzdGVyID0gISEobG9jYWwgJiYgU3RyaW5nKGxvY2FsLm1hc3RlclhwcnYgfHwgJycpLnRyaW0oKSk7XG4gIGNvbnN0IHJvbGUgPSBzdG9yZWQgJiYgc3RvcmVkLmZhYnJpY0hkUm9sZSAhPSBudWxsID8gU3RyaW5nKHN0b3JlZC5mYWJyaWNIZFJvbGUpIDogJyc7XG4gIGNvbnN0IHN3aXRjaEJsb2NrZWQgPSByb2xlID09PSAnYWNjb3VudE5vZGUnIHx8IHJvbGUgPT09ICd3YXRjaEFjY291bnQnO1xuXG4gIC8qKiBOZWVkIEhEIG1hc3RlciB0byBwaXZvdCBhY2NvdW50IGluZGV4OyBhY2NvdW50LW5vZGUgb3Igd2F0Y2gtb25seSBpZGVudGl0aWVzIGNhbm5vdCBzd2l0Y2guICovXG4gIGNvbnN0IGNhblN3aXRjaCA9XG4gICAgbW9kZU9rICYmXG4gICAgKGRpc2tNYXN0ZXIgfHwgbWVtTWFzdGVyKSAmJlxuICAgICFzd2l0Y2hCbG9ja2VkO1xuXG4gIGNvbnN0IGlkeFJhdyA9IGxvY2FsICYmIGxvY2FsLmZhYnJpY0FjY291bnRJbmRleCAhPSBudWxsID8gbG9jYWwuZmFicmljQWNjb3VudEluZGV4IDogMDtcbiAgY29uc3QgaWR4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oTUFYX1ZJU0lCTEVfQUNDT1VOVF9JTkRFWCwgTWF0aC5mbG9vcihOdW1iZXIoaWR4UmF3KSkgfHwgMCkpO1xuXG4gIGlmICghbW9kZU9rIHx8ICFvbkNoYW5nZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3Qgb3B0aW9ucyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8PSBNQVhfVklTSUJMRV9BQ0NPVU5UX0lOREVYOyBpKyspIHtcbiAgICBvcHRpb25zLnB1c2goeyBrZXk6IGBmYWItYWNjdC0ke2l9YCwgdGV4dDogYEFjY291bnQgJHtpfWAsIHZhbHVlOiBpIH0pO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEhlYWRlciBhcz1cImxhYmVsXCIgaHRtbEZvcj1cImZhYnJpYy1odWItZmFicmljLWFjY291bnQtc2VsZWN0XCIgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6ICcwLjVlbScsIG1hcmdpbkJvdHRvbTogMCB9fT5cbiAgICAgICAgRmFicmljIGFjY291bnRcbiAgICAgIDwvSGVhZGVyPlxuICAgICAgPERyb3Bkb3duXG4gICAgICAgIGlkPVwiZmFicmljLWh1Yi1mYWJyaWMtYWNjb3VudC1zZWxlY3RcIlxuICAgICAgICBzZWxlY3Rpb25cbiAgICAgICAgY29tcGFjdFxuICAgICAgICB2YWx1ZT17aWR4fVxuICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICBkaXNhYmxlZD17IWNhblN3aXRjaH1cbiAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICFjYW5Td2l0Y2hcbiAgICAgICAgICAgID8gJ1VubG9jayB5b3VyIGlkZW50aXR5IChtYXN0ZXIga2V5KSBmaXJzdCB0byBzd2l0Y2ggRmFicmljIGFjY291bnRzLidcbiAgICAgICAgICAgIDogJ0ZhYnJpYyBCSVA0NCBhY2NvdW50IGluZGV4IOKAlCBzYW1lIG1uZW1vbmljLCBkaXN0aW5jdCBwcm90b2NvbCBzaWduaW5nIHN1YnRyZWUgKEh1YiBkZWZhdWx0IGlzIGFjY291bnQgMCkuJ1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hhbmdlPXsoZSwgZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHYgPSBkICYmIChkLnZhbHVlICE9IG51bGwgPyBOdW1iZXIoZC52YWx1ZSkgOiBOYU4pO1xuICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHYpIHx8IHYgPCAwKSByZXR1cm47XG4gICAgICAgICAgb25DaGFuZ2UoTWF0aC5mbG9vcih2KSk7XG4gICAgICAgIH19XG4gICAgICAvPlxuICAgIDwvPlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZhYnJpY0lkZW50aXR5QWNjb3VudENvbnRyb2xzO1xuIl0sIm5hbWVzIjpbIlJlYWN0IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiRHJvcGRvd24iLCJIZWFkZXIiLCJfcmVxdWlyZTIiLCJwbGFpbnRleHRNYXN0ZXJGcm9tU3RvcmVkIiwiX3JlcXVpcmUzIiwicmVhZFN0b3JhZ2VKU09OIiwiTUFYX1ZJU0lCTEVfQUNDT1VOVF9JTkRFWCIsIkZhYnJpY0lkZW50aXR5QWNjb3VudENvbnRyb2xzIiwicHJvcHMiLCJsb2NhbCIsImxvY2FsSWRlbnRpdHkiLCJvbkNoYW5nZSIsIm9uRmFicmljQWNjb3VudENoYW5nZSIsIm1vZGVPayIsImZhYnJpY0lkZW50aXR5TW9kZSIsInN0b3JlZCIsIndpbmRvdyIsImUiLCJkaXNrTWFzdGVyIiwibWVtTWFzdGVyIiwiU3RyaW5nIiwibWFzdGVyWHBydiIsInRyaW0iLCJyb2xlIiwiZmFicmljSGRSb2xlIiwic3dpdGNoQmxvY2tlZCIsImNhblN3aXRjaCIsImlkeFJhdyIsImZhYnJpY0FjY291bnRJbmRleCIsImlkeCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJmbG9vciIsIk51bWJlciIsIm9wdGlvbnMiLCJpIiwicHVzaCIsImtleSIsImNvbmNhdCIsInRleHQiLCJ2YWx1ZSIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsImFzIiwiaHRtbEZvciIsInN0eWxlIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJpZCIsInNlbGVjdGlvbiIsImNvbXBhY3QiLCJkaXNhYmxlZCIsInRpdGxlIiwiZCIsInYiLCJOYU4iLCJpc0Zpbml0ZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/fabricIdentity/FabricIdentityAccountControls.js\n\n}")},"./components/fabricIdentity/FabricPostSetupIdentityWizard.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Second onboarding step shown after `/settings`-based operator bootstrap when Hub has no Fabric identity yet.\n */\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar _require = __webpack_require__(/*! semantic-ui-react */ "./node_modules/semantic-ui-react/dist/es/index.js"),\n Button = _require.Button,\n Header = _require.Header,\n Icon = _require.Icon,\n Message = _require.Message,\n Segment = _require.Segment;\nvar IdentityManager = __webpack_require__(/*! ../IdentityManager */ "./components/IdentityManager.js");\nvar _require2 = __webpack_require__(/*! ../../functions/fabricPostSetupBrowserIdentity */ "./functions/fabricPostSetupBrowserIdentity.js"),\n hasCompletedPostSetupBrowserIdentity = _require2.hasCompletedPostSetupBrowserIdentity;\n\n/**\n * Full-viewport wizard that drives {@link IdentityManager} toward Generate / Existing key only.\n *\n * Parent should stop rendering this once a browser-generated/imported identity exists (not desktop-only handoff)\n * or the user skips.\n */\n/**\n * @param {function():void} [props.onForgetIdentity]\n */\nfunction FabricPostSetupIdentityWizard(props) {\n var hubAdminToken = props.hubAdminToken,\n currentIdentity = props.currentIdentity,\n _onLocalIdentityChange = props.onLocalIdentityChange,\n _onUnlockSuccess = props.onUnlockSuccess,\n onLockStateChange = props.onLockStateChange,\n onForgetIdentity = props.onForgetIdentity,\n onComplete = props.onComplete,\n onSkip = props.onSkip;\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n skipped = _React$useState2[0],\n setSkipped = _React$useState2[1];\n React.useEffect(function () {\n if (skipped) return;\n if (hasCompletedPostSetupBrowserIdentity() && typeof onComplete === \'function\') {\n onComplete();\n }\n }, [skipped, onComplete]);\n if (skipped) return null;\n return /*#__PURE__*/React.createElement("div", {\n style: {\n minHeight: \'100vh\',\n display: \'flex\',\n flexDirection: \'column\',\n justifyContent: \'flex-start\',\n alignItems: \'center\',\n padding: \'1.5em\',\n boxSizing: \'border-box\',\n background: \'linear-gradient(180deg, #f7f9fc 0%, #fff 40%)\'\n }\n }, /*#__PURE__*/React.createElement(Segment, {\n style: {\n maxWidth: \'44rem\',\n width: \'100%\'\n },\n raised: true\n }, /*#__PURE__*/React.createElement(Header, {\n as: "h2",\n style: {\n marginBottom: \'0.35em\'\n }\n }, /*#__PURE__*/React.createElement(Icon, {\n name: "user secret"\n }), "Create your Fabric identity"), /*#__PURE__*/React.createElement(Message, {\n info: true,\n size: "small",\n style: {\n marginBottom: \'1.1em\'\n }\n }, /*#__PURE__*/React.createElement("p", {\n style: {\n margin: 0,\n lineHeight: 1.5\n }\n }, "Use ", /*#__PURE__*/React.createElement("strong", null, "Generate"), " or ", /*#__PURE__*/React.createElement("strong", null, "restore"), " below to finish. You can skip and open the identity menu from the top bar anytime.")), /*#__PURE__*/React.createElement(IdentityManager, {\n hubAdminToken: hubAdminToken,\n currentIdentity: currentIdentity || null,\n initialLoginMethod: "generate",\n postSetupFlow: true,\n suppressForgetAndLinkedChrome: true,\n onLocalIdentityChange: function onLocalIdentityChange(info) {\n if (typeof _onLocalIdentityChange === \'function\') _onLocalIdentityChange(info);\n if (info && (info.id || info.xpub) && hasCompletedPostSetupBrowserIdentity() && typeof onComplete === \'function\') {\n onComplete();\n }\n },\n onUnlockSuccess: function onUnlockSuccess(info) {\n if (typeof _onUnlockSuccess === \'function\') _onUnlockSuccess(info);\n if (info && (info.id || info.xpub) && hasCompletedPostSetupBrowserIdentity() && typeof onComplete === \'function\') {\n onComplete();\n }\n },\n onLockStateChange: onLockStateChange,\n onForgetIdentity: typeof onForgetIdentity === \'function\' ? onForgetIdentity : undefined\n }), /*#__PURE__*/React.createElement("div", {\n style: {\n marginTop: \'1.25em\',\n textAlign: \'center\'\n }\n }, /*#__PURE__*/React.createElement(Button, {\n basic: true,\n type: "button",\n onClick: function onClick() {\n setSkipped(true);\n try {\n if (typeof window !== \'undefined\' && window.sessionStorage) {\n window.sessionStorage.setItem(\'fabric.hub.identityWizardDismissed\', \'1\');\n window.sessionStorage.removeItem(\'fabric.hub.wantIdentityWizard\');\n }\n } catch (e) {}\n if (typeof onSkip === \'function\') onSkip();\n }\n }, "Skip for now \\u2014 I will add an identity later"))));\n}\nmodule.exports = FabricPostSetupIdentityWizard;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb21wb25lbnRzL2ZhYnJpY0lkZW50aXR5L0ZhYnJpY1Bvc3RTZXR1cElkZW50aXR5V2l6YXJkLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUZBLFNBQUFBLGVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBQyxlQUFBLENBQUFGLENBQUEsS0FBQUcscUJBQUEsQ0FBQUgsQ0FBQSxFQUFBQyxDQUFBLEtBQUFHLDJCQUFBLENBQUFKLENBQUEsRUFBQUMsQ0FBQSxLQUFBSSxnQkFBQTtBQUFBLFNBQUFBLGlCQUFBLGNBQUFDLFNBQUE7QUFBQSxTQUFBRiw0QkFBQUosQ0FBQSxFQUFBTyxDQUFBLFFBQUFQLENBQUEsMkJBQUFBLENBQUEsU0FBQVEsaUJBQUEsQ0FBQVIsQ0FBQSxFQUFBTyxDQUFBLE9BQUFFLENBQUEsTUFBQUMsUUFBQSxDQUFBQyxJQUFBLENBQUFYLENBQUEsRUFBQVksS0FBQSw2QkFBQUgsQ0FBQSxJQUFBVCxDQUFBLENBQUFhLFdBQUEsS0FBQUosQ0FBQSxHQUFBVCxDQUFBLENBQUFhLFdBQUEsQ0FBQUMsSUFBQSxhQUFBTCxDQUFBLGNBQUFBLENBQUEsR0FBQU0sS0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLG9CQUFBUyxDQUFBLCtDQUFBUSxJQUFBLENBQUFSLENBQUEsSUFBQUQsaUJBQUEsQ0FBQVIsQ0FBQSxFQUFBTyxDQUFBO0FBQUEsU0FBQUMsa0JBQUFSLENBQUEsRUFBQU8sQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQVAsQ0FBQSxDQUFBa0IsTUFBQSxNQUFBWCxDQUFBLEdBQUFQLENBQUEsQ0FBQWtCLE1BQUEsWUFBQWpCLENBQUEsTUFBQWtCLENBQUEsR0FBQUosS0FBQSxDQUFBUixDQUFBLEdBQUFOLENBQUEsR0FBQU0sQ0FBQSxFQUFBTixDQUFBLElBQUFrQixDQUFBLENBQUFsQixDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxVQUFBa0IsQ0FBQTtBQUFBLFNBQUFoQixzQkFBQUgsQ0FBQSxFQUFBb0IsQ0FBQSxRQUFBWCxDQUFBLFdBQUFULENBQUEsZ0NBQUFxQixNQUFBLElBQUFyQixDQUFBLENBQUFxQixNQUFBLENBQUFDLFFBQUEsS0FBQXRCLENBQUEsNEJBQUFTLENBQUEsUUFBQVIsQ0FBQSxFQUFBa0IsQ0FBQSxFQUFBSSxDQUFBLEVBQUFDLENBQUEsRUFBQWpCLENBQUEsT0FBQWtCLENBQUEsT0FBQUMsQ0FBQSxpQkFBQUgsQ0FBQSxJQUFBZCxDQUFBLEdBQUFBLENBQUEsQ0FBQUUsSUFBQSxDQUFBWCxDQUFBLEdBQUEyQixJQUFBLFFBQUFQLENBQUEsUUFBQVEsTUFBQSxDQUFBbkIsQ0FBQSxNQUFBQSxDQUFBLFVBQUFnQixDQUFBLHVCQUFBQSxDQUFBLElBQUF4QixDQUFBLEdBQUFzQixDQUFBLENBQUFaLElBQUEsQ0FBQUYsQ0FBQSxHQUFBb0IsSUFBQSxNQUFBdEIsQ0FBQSxDQUFBdUIsSUFBQSxDQUFBN0IsQ0FBQSxDQUFBOEIsS0FBQSxHQUFBeEIsQ0FBQSxDQUFBVyxNQUFBLEtBQUFFLENBQUEsR0FBQUssQ0FBQSxpQkFBQXpCLENBQUEsSUFBQTBCLENBQUEsT0FBQVAsQ0FBQSxHQUFBbkIsQ0FBQSx5QkFBQXlCLENBQUEsWUFBQWhCLENBQUEsZUFBQWUsQ0FBQSxHQUFBZixDQUFBLGNBQUFtQixNQUFBLENBQUFKLENBQUEsTUFBQUEsQ0FBQSwyQkFBQUUsQ0FBQSxRQUFBUCxDQUFBLGFBQUFaLENBQUE7QUFBQSxTQUFBTCxnQkFBQUYsQ0FBQSxRQUFBZSxLQUFBLENBQUFpQixPQUFBLENBQUFoQyxDQUFBLFVBQUFBLENBQUE7QUFJQSxJQUFNaUMsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLDRDQUFPLENBQUM7QUFDOUIsSUFBQUMsUUFBQSxHQU1JRCxtQkFBTyxDQUFDLDRFQUFtQixDQUFDO0VBTDlCRSxNQUFNLEdBQUFELFFBQUEsQ0FBTkMsTUFBTTtFQUNOQyxNQUFNLEdBQUFGLFFBQUEsQ0FBTkUsTUFBTTtFQUNOQyxJQUFJLEdBQUFILFFBQUEsQ0FBSkcsSUFBSTtFQUNKQyxPQUFPLEdBQUFKLFFBQUEsQ0FBUEksT0FBTztFQUNQQyxPQUFPLEdBQUFMLFFBQUEsQ0FBUEssT0FBTztBQUdULElBQU1DLGVBQWUsR0FBR1AsbUJBQU8sQ0FBQywyREFBb0IsQ0FBQztBQUNyRCxJQUFBUSxTQUFBLEdBRUlSLG1CQUFPLENBQUMscUdBQWdELENBQUM7RUFEM0RTLG9DQUFvQyxHQUFBRCxTQUFBLENBQXBDQyxvQ0FBb0M7O0FBR3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLDZCQUE2QkEsQ0FBRUMsS0FBSyxFQUFFO0VBQzdDLElBQ0VDLGFBQWEsR0FRWEQsS0FBSyxDQVJQQyxhQUFhO0lBQ2JDLGVBQWUsR0FPYkYsS0FBSyxDQVBQRSxlQUFlO0lBQ2ZDLHNCQUFxQixHQU1uQkgsS0FBSyxDQU5QRyxxQkFBcUI7SUFDckJDLGdCQUFlLEdBS2JKLEtBQUssQ0FMUEksZUFBZTtJQUNmQyxpQkFBaUIsR0FJZkwsS0FBSyxDQUpQSyxpQkFBaUI7SUFDakJDLGdCQUFnQixHQUdkTixLQUFLLENBSFBNLGdCQUFnQjtJQUNoQkMsVUFBVSxHQUVSUCxLQUFLLENBRlBPLFVBQVU7SUFDVkMsTUFBTSxHQUNKUixLQUFLLENBRFBRLE1BQU07RUFHUixJQUFBQyxlQUFBLEdBQThCckIsS0FBSyxDQUFDc0IsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBQyxnQkFBQSxHQUFBekQsY0FBQSxDQUFBdUQsZUFBQTtJQUE1Q0csT0FBTyxHQUFBRCxnQkFBQTtJQUFFRSxVQUFVLEdBQUFGLGdCQUFBO0VBRTFCdkIsS0FBSyxDQUFDMEIsU0FBUyxDQUFDLFlBQU07SUFDcEIsSUFBSUYsT0FBTyxFQUFFO0lBQ2IsSUFBSWQsb0NBQW9DLENBQUMsQ0FBQyxJQUFJLE9BQU9TLFVBQVUsS0FBSyxVQUFVLEVBQUU7TUFDOUVBLFVBQVUsQ0FBQyxDQUFDO0lBQ2Q7RUFDRixDQUFDLEVBQUUsQ0FBQ0ssT0FBTyxFQUFFTCxVQUFVLENBQUMsQ0FBQztFQUV6QixJQUFJSyxPQUFPLEVBQUUsT0FBTyxJQUFJO0VBRXhCLG9CQUNFeEIsS0FBQSxDQUFBMkIsYUFBQTtJQUNFQyxLQUFLLEVBQUU7TUFDTEMsU0FBUyxFQUFFLE9BQU87TUFDbEJDLE9BQU8sRUFBRSxNQUFNO01BQ2ZDLGFBQWEsRUFBRSxRQUFRO01BQ3ZCQyxjQUFjLEVBQUUsWUFBWTtNQUM1QkMsVUFBVSxFQUFFLFFBQVE7TUFDcEJDLE9BQU8sRUFBRSxPQUFPO01BQ2hCQyxTQUFTLEVBQUUsWUFBWTtNQUN2QkMsVUFBVSxFQUFFO0lBQ2Q7RUFBRSxnQkFFRnBDLEtBQUEsQ0FBQTJCLGFBQUEsQ0FBQ3BCLE9BQU87SUFBQ3FCLEtBQUssRUFBRTtNQUFFUyxRQUFRLEVBQUUsT0FBTztNQUFFQyxLQUFLLEVBQUU7SUFBTyxDQUFFO0lBQUNDLE1BQU07RUFBQSxnQkFDMUR2QyxLQUFBLENBQUEyQixhQUFBLENBQUN2QixNQUFNO0lBQUNvQyxFQUFFLEVBQUMsSUFBSTtJQUFDWixLQUFLLEVBQUU7TUFBRWEsWUFBWSxFQUFFO0lBQVM7RUFBRSxnQkFDaER6QyxLQUFBLENBQUEyQixhQUFBLENBQUN0QixJQUFJO0lBQUN4QixJQUFJLEVBQUM7RUFBYSxDQUFFLENBQUMsK0JBRXJCLENBQUMsZUFDVG1CLEtBQUEsQ0FBQTJCLGFBQUEsQ0FBQ3JCLE9BQU87SUFBQ29DLElBQUk7SUFBQ0MsSUFBSSxFQUFDLE9BQU87SUFBQ2YsS0FBSyxFQUFFO01BQUVhLFlBQVksRUFBRTtJQUFRO0VBQUUsZ0JBQzFEekMsS0FBQSxDQUFBMkIsYUFBQTtJQUFHQyxLQUFLLEVBQUU7TUFBRWdCLE1BQU0sRUFBRSxDQUFDO01BQUVDLFVBQVUsRUFBRTtJQUFJO0VBQUUsR0FBQyxNQUNwQyxlQUFBN0MsS0FBQSxDQUFBMkIsYUFBQSxpQkFBUSxVQUFnQixDQUFDLFFBQUksZUFBQTNCLEtBQUEsQ0FBQTJCLGFBQUEsaUJBQVEsU0FBZSxDQUFDLHVGQUV4RCxDQUNJLENBQUMsZUFDVjNCLEtBQUEsQ0FBQTJCLGFBQUEsQ0FBQ25CLGVBQWU7SUFDZEssYUFBYSxFQUFFQSxhQUFjO0lBQzdCQyxlQUFlLEVBQUVBLGVBQWUsSUFBSSxJQUFLO0lBQ3pDZ0Msa0JBQWtCLEVBQUMsVUFBVTtJQUM3QkMsYUFBYTtJQUNiQyw2QkFBNkI7SUFDN0JqQyxxQkFBcUIsRUFBRSxTQUF2QkEscUJBQXFCQSxDQUFHMkIsSUFBSSxFQUFLO01BQy9CLElBQUksT0FBTzNCLHNCQUFxQixLQUFLLFVBQVUsRUFBRUEsc0JBQXFCLENBQUMyQixJQUFJLENBQUM7TUFDNUUsSUFBSUEsSUFBSSxLQUFLQSxJQUFJLENBQUNPLEVBQUUsSUFBSVAsSUFBSSxDQUFDUSxJQUFJLENBQUMsSUFBSXhDLG9DQUFvQyxDQUFDLENBQUMsSUFBSSxPQUFPUyxVQUFVLEtBQUssVUFBVSxFQUFFO1FBQ2hIQSxVQUFVLENBQUMsQ0FBQztNQUNkO0lBQ0YsQ0FBRTtJQUNGSCxlQUFlLEVBQUUsU0FBakJBLGVBQWVBLENBQUcwQixJQUFJLEVBQUs7TUFDekIsSUFBSSxPQUFPMUIsZ0JBQWUsS0FBSyxVQUFVLEVBQUVBLGdCQUFlLENBQUMwQixJQUFJLENBQUM7TUFDaEUsSUFBSUEsSUFBSSxLQUFLQSxJQUFJLENBQUNPLEVBQUUsSUFBSVAsSUFBSSxDQUFDUSxJQUFJLENBQUMsSUFBSXhDLG9DQUFvQyxDQUFDLENBQUMsSUFBSSxPQUFPUyxVQUFVLEtBQUssVUFBVSxFQUFFO1FBQ2hIQSxVQUFVLENBQUMsQ0FBQztNQUNkO0lBQ0YsQ0FBRTtJQUNGRixpQkFBaUIsRUFBRUEsaUJBQWtCO0lBQ3JDQyxnQkFBZ0IsRUFBRSxPQUFPQSxnQkFBZ0IsS0FBSyxVQUFVLEdBQUdBLGdCQUFnQixHQUFHaUM7RUFBVSxDQUN6RixDQUFDLGVBQ0ZuRCxLQUFBLENBQUEyQixhQUFBO0lBQUtDLEtBQUssRUFBRTtNQUFFd0IsU0FBUyxFQUFFLFFBQVE7TUFBRUMsU0FBUyxFQUFFO0lBQVM7RUFBRSxnQkFDdkRyRCxLQUFBLENBQUEyQixhQUFBLENBQUN4QixNQUFNO0lBQ0xtRCxLQUFLO0lBQ0xDLElBQUksRUFBQyxRQUFRO0lBQ2JDLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBLEVBQVE7TUFDYi9CLFVBQVUsQ0FBQyxJQUFJLENBQUM7TUFDaEIsSUFBSTtRQUNGLElBQUksT0FBT2dDLE1BQU0sS0FBSyxXQUFXLElBQUlBLE1BQU0sQ0FBQ0MsY0FBYyxFQUFFO1VBQzFERCxNQUFNLENBQUNDLGNBQWMsQ0FBQ0MsT0FBTyxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQztVQUN4RUYsTUFBTSxDQUFDQyxjQUFjLENBQUNFLFVBQVUsQ0FBQywrQkFBK0IsQ0FBQztRQUNuRTtNQUNGLENBQUMsQ0FBQyxPQUFPNUYsQ0FBQyxFQUFFLENBQUM7TUFDYixJQUFJLE9BQU9vRCxNQUFNLEtBQUssVUFBVSxFQUFFQSxNQUFNLENBQUMsQ0FBQztJQUM1QztFQUFFLEdBQ0gsa0RBRU8sQ0FDTCxDQUNFLENBQ04sQ0FBQztBQUVWO0FBRUF5QyxNQUFNLENBQUNDLE9BQU8sR0FBR25ELDZCQUE2QiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29tcG9uZW50cy9mYWJyaWNJZGVudGl0eS9GYWJyaWNQb3N0U2V0dXBJZGVudGl0eVdpemFyZC5qcz8xMGVkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTZWNvbmQgb25ib2FyZGluZyBzdGVwIHNob3duIGFmdGVyIGAvc2V0dGluZ3NgLWJhc2VkIG9wZXJhdG9yIGJvb3RzdHJhcCB3aGVuIEh1YiBoYXMgbm8gRmFicmljIGlkZW50aXR5IHlldC5cbiAqL1xuXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCB7XG4gIEJ1dHRvbixcbiAgSGVhZGVyLFxuICBJY29uLFxuICBNZXNzYWdlLFxuICBTZWdtZW50XG59ID0gcmVxdWlyZSgnc2VtYW50aWMtdWktcmVhY3QnKTtcblxuY29uc3QgSWRlbnRpdHlNYW5hZ2VyID0gcmVxdWlyZSgnLi4vSWRlbnRpdHlNYW5hZ2VyJyk7XG5jb25zdCB7XG4gIGhhc0NvbXBsZXRlZFBvc3RTZXR1cEJyb3dzZXJJZGVudGl0eVxufSA9IHJlcXVpcmUoJy4uLy4uL2Z1bmN0aW9ucy9mYWJyaWNQb3N0U2V0dXBCcm93c2VySWRlbnRpdHknKTtcblxuLyoqXG4gKiBGdWxsLXZpZXdwb3J0IHdpemFyZCB0aGF0IGRyaXZlcyB7QGxpbmsgSWRlbnRpdHlNYW5hZ2VyfSB0b3dhcmQgR2VuZXJhdGUgLyBFeGlzdGluZyBrZXkgb25seS5cbiAqXG4gKiBQYXJlbnQgc2hvdWxkIHN0b3AgcmVuZGVyaW5nIHRoaXMgb25jZSBhIGJyb3dzZXItZ2VuZXJhdGVkL2ltcG9ydGVkIGlkZW50aXR5IGV4aXN0cyAobm90IGRlc2t0b3Atb25seSBoYW5kb2ZmKVxuICogb3IgdGhlIHVzZXIgc2tpcHMuXG4gKi9cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbigpOnZvaWR9IFtwcm9wcy5vbkZvcmdldElkZW50aXR5XVxuICovXG5mdW5jdGlvbiBGYWJyaWNQb3N0U2V0dXBJZGVudGl0eVdpemFyZCAocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGh1YkFkbWluVG9rZW4sXG4gICAgY3VycmVudElkZW50aXR5LFxuICAgIG9uTG9jYWxJZGVudGl0eUNoYW5nZSxcbiAgICBvblVubG9ja1N1Y2Nlc3MsXG4gICAgb25Mb2NrU3RhdGVDaGFuZ2UsXG4gICAgb25Gb3JnZXRJZGVudGl0eSxcbiAgICBvbkNvbXBsZXRlLFxuICAgIG9uU2tpcFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgW3NraXBwZWQsIHNldFNraXBwZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNraXBwZWQpIHJldHVybjtcbiAgICBpZiAoaGFzQ29tcGxldGVkUG9zdFNldHVwQnJvd3NlcklkZW50aXR5KCkgJiYgdHlwZW9mIG9uQ29tcGxldGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9uQ29tcGxldGUoKTtcbiAgICB9XG4gIH0sIFtza2lwcGVkLCBvbkNvbXBsZXRlXSk7XG5cbiAgaWYgKHNraXBwZWQpIHJldHVybiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgbWluSGVpZ2h0OiAnMTAwdmgnLFxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtc3RhcnQnLFxuICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgcGFkZGluZzogJzEuNWVtJyxcbiAgICAgICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgICAgIGJhY2tncm91bmQ6ICdsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZjdmOWZjIDAlLCAjZmZmIDQwJSknXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxTZWdtZW50IHN0eWxlPXt7IG1heFdpZHRoOiAnNDRyZW0nLCB3aWR0aDogJzEwMCUnIH19IHJhaXNlZD5cbiAgICAgICAgPEhlYWRlciBhcz1cImgyXCIgc3R5bGU9e3sgbWFyZ2luQm90dG9tOiAnMC4zNWVtJyB9fT5cbiAgICAgICAgICA8SWNvbiBuYW1lPVwidXNlciBzZWNyZXRcIiAvPlxuICAgICAgICAgIENyZWF0ZSB5b3VyIEZhYnJpYyBpZGVudGl0eVxuICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgPE1lc3NhZ2UgaW5mbyBzaXplPVwic21hbGxcIiBzdHlsZT17eyBtYXJnaW5Cb3R0b206ICcxLjFlbScgfX0+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgbWFyZ2luOiAwLCBsaW5lSGVpZ2h0OiAxLjUgfX0+XG4gICAgICAgICAgICBVc2UgPHN0cm9uZz5HZW5lcmF0ZTwvc3Ryb25nPiBvciA8c3Ryb25nPnJlc3RvcmU8L3N0cm9uZz4gYmVsb3cgdG8gZmluaXNoLiBZb3UgY2FuIHNraXAgYW5kIG9wZW4gdGhlIGlkZW50aXR5XG4gICAgICAgICAgICBtZW51IGZyb20gdGhlIHRvcCBiYXIgYW55dGltZS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvTWVzc2FnZT5cbiAgICAgICAgPElkZW50aXR5TWFuYWdlclxuICAgICAgICAgIGh1YkFkbWluVG9rZW49e2h1YkFkbWluVG9rZW59XG4gICAgICAgICAgY3VycmVudElkZW50aXR5PXtjdXJyZW50SWRlbnRpdHkgfHwgbnVsbH1cbiAgICAgICAgICBpbml0aWFsTG9naW5NZXRob2Q9XCJnZW5lcmF0ZVwiXG4gICAgICAgICAgcG9zdFNldHVwRmxvd1xuICAgICAgICAgIHN1cHByZXNzRm9yZ2V0QW5kTGlua2VkQ2hyb21lXG4gICAgICAgICAgb25Mb2NhbElkZW50aXR5Q2hhbmdlPXsoaW5mbykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvbkxvY2FsSWRlbnRpdHlDaGFuZ2UgPT09ICdmdW5jdGlvbicpIG9uTG9jYWxJZGVudGl0eUNoYW5nZShpbmZvKTtcbiAgICAgICAgICAgIGlmIChpbmZvICYmIChpbmZvLmlkIHx8IGluZm8ueHB1YikgJiYgaGFzQ29tcGxldGVkUG9zdFNldHVwQnJvd3NlcklkZW50aXR5KCkgJiYgdHlwZW9mIG9uQ29tcGxldGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25VbmxvY2tTdWNjZXNzPXsoaW5mbykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvblVubG9ja1N1Y2Nlc3MgPT09ICdmdW5jdGlvbicpIG9uVW5sb2NrU3VjY2VzcyhpbmZvKTtcbiAgICAgICAgICAgIGlmIChpbmZvICYmIChpbmZvLmlkIHx8IGluZm8ueHB1YikgJiYgaGFzQ29tcGxldGVkUG9zdFNldHVwQnJvd3NlcklkZW50aXR5KCkgJiYgdHlwZW9mIG9uQ29tcGxldGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25Mb2NrU3RhdGVDaGFuZ2U9e29uTG9ja1N0YXRlQ2hhbmdlfVxuICAgICAgICAgIG9uRm9yZ2V0SWRlbnRpdHk9e3R5cGVvZiBvbkZvcmdldElkZW50aXR5ID09PSAnZnVuY3Rpb24nID8gb25Gb3JnZXRJZGVudGl0eSA6IHVuZGVmaW5lZH1cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5Ub3A6ICcxLjI1ZW0nLCB0ZXh0QWxpZ246ICdjZW50ZXInIH19PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGJhc2ljXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgc2V0U2tpcHBlZCh0cnVlKTtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlKSB7XG4gICAgICAgICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZmFicmljLmh1Yi5pZGVudGl0eVdpemFyZERpc21pc3NlZCcsICcxJyk7XG4gICAgICAgICAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZmFicmljLmh1Yi53YW50SWRlbnRpdHlXaXphcmQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygb25Ta2lwID09PSAnZnVuY3Rpb24nKSBvblNraXAoKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2tpcCBmb3Igbm93IOKAlCBJIHdpbGwgYWRkIGFuIGlkZW50aXR5IGxhdGVyXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9TZWdtZW50PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZhYnJpY1Bvc3RTZXR1cElkZW50aXR5V2l6YXJkO1xuIl0sIm5hbWVzIjpbIl9zbGljZWRUb0FycmF5IiwiciIsImUiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwiYSIsIl9hcnJheUxpa2VUb0FycmF5IiwidCIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbmd0aCIsIm4iLCJsIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpIiwidSIsImYiLCJvIiwibmV4dCIsIk9iamVjdCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJpc0FycmF5IiwiUmVhY3QiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJCdXR0b24iLCJIZWFkZXIiLCJJY29uIiwiTWVzc2FnZSIsIlNlZ21lbnQiLCJJZGVudGl0eU1hbmFnZXIiLCJfcmVxdWlyZTIiLCJoYXNDb21wbGV0ZWRQb3N0U2V0dXBCcm93c2VySWRlbnRpdHkiLCJGYWJyaWNQb3N0U2V0dXBJZGVudGl0eVdpemFyZCIsInByb3BzIiwiaHViQWRtaW5Ub2tlbiIsImN1cnJlbnRJZGVudGl0eSIsIm9uTG9jYWxJZGVudGl0eUNoYW5nZSIsIm9uVW5sb2NrU3VjY2VzcyIsIm9uTG9ja1N0YXRlQ2hhbmdlIiwib25Gb3JnZXRJZGVudGl0eSIsIm9uQ29tcGxldGUiLCJvblNraXAiLCJfUmVhY3QkdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJza2lwcGVkIiwic2V0U2tpcHBlZCIsInVzZUVmZmVjdCIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsIm1pbkhlaWdodCIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwianVzdGlmeUNvbnRlbnQiLCJhbGlnbkl0ZW1zIiwicGFkZGluZyIsImJveFNpemluZyIsImJhY2tncm91bmQiLCJtYXhXaWR0aCIsIndpZHRoIiwicmFpc2VkIiwiYXMiLCJtYXJnaW5Cb3R0b20iLCJpbmZvIiwic2l6ZSIsIm1hcmdpbiIsImxpbmVIZWlnaHQiLCJpbml0aWFsTG9naW5NZXRob2QiLCJwb3N0U2V0dXBGbG93Iiwic3VwcHJlc3NGb3JnZXRBbmRMaW5rZWRDaHJvbWUiLCJpZCIsInhwdWIiLCJ1bmRlZmluZWQiLCJtYXJnaW5Ub3AiLCJ0ZXh0QWxpZ24iLCJiYXNpYyIsInR5cGUiLCJvbkNsaWNrIiwid2luZG93Iiwic2Vzc2lvblN0b3JhZ2UiLCJzZXRJdGVtIiwicmVtb3ZlSXRlbSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./components/fabricIdentity/FabricPostSetupIdentityWizard.js\n\n}')},"./constants.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var process = __webpack_require__(/*! process/browser */ \"./node_modules/process/browser.js\");\n\n\n// Fabric Constants\nvar _require = __webpack_require__(/*! @fabric/core/constants */ \"./node_modules/@fabric/core/constants.js\"),\n GENESIS_HASH = _require.GENESIS_HASH,\n MAGIC_BYTES = _require.MAGIC_BYTES,\n VERSION_NUMBER = _require.VERSION_NUMBER,\n FIXTURE_SEED = _require.FIXTURE_SEED;\nvar ALLOWED_UPLOAD_TYPES = [];\nvar ENABLE_CONVERSATION_SIDEBAR = false;\nvar ENABLE_NETWORK = true;\n\n/**\n * Feature flags. Override via env: FABRIC_FEATURE_=0|1|true|false\n * @example FABRIC_FEATURE_BITCOIN=0 npm start\n */\nfunction featureFlag(name) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var env = typeof process !== 'undefined' && process.env ? process.env[\"FABRIC_FEATURE_\".concat(name)] : undefined;\n if (env === undefined || env === '') return defaultValue;\n return env === '1' || env === 'true';\n}\nvar FEATURE_FLAGS = {\n BITCOIN: featureFlag('BITCOIN', true),\n DOCUMENT_PURCHASE: featureFlag('DOCUMENT_PURCHASE', true),\n PAYJOIN: featureFlag('PAYJOIN', false),\n INVOICES: featureFlag('INVOICES', true),\n DISTRIBUTE: featureFlag('DISTRIBUTE', false),\n LIGHTNING: featureFlag('LIGHTNING', false),\n /** Off by default — Document market focuses on L1 inventory HTLC, not browser mesh. */\n WEBRTC: featureFlag('WEBRTC', false)\n};\n\n/** Public snapshot for GetNetworkStatus / browser gates (booleans only). */\nfunction publicFeatureFlags() {\n return {\n bitcoin: !!FEATURE_FLAGS.BITCOIN,\n documentPurchase: !!FEATURE_FLAGS.DOCUMENT_PURCHASE,\n payjoin: !!FEATURE_FLAGS.PAYJOIN,\n invoices: !!FEATURE_FLAGS.INVOICES,\n distribute: !!FEATURE_FLAGS.DISTRIBUTE,\n lightning: !!FEATURE_FLAGS.LIGHTNING,\n webrtc: !!FEATURE_FLAGS.WEBRTC\n };\n}\n\n/** Satoshis per 1 BTC (BIP-176 / fixed-point sats in this Hub). */\nvar SATS_PER_BTC = 100000000;\n\n/** ~21M BTC cap (Joinmarket / UI sanity clamps). */\nvar BITCOIN_MAX_SUPPLY_BTC = 21000000;\n\n/**\n * Epsilon for “whole sats” vs sub-sat remainder in display helpers.\n * @see functions/formatSats.js\n */\nvar SUB_SATOSHI_EPSILON = 0.000000001;\nvar MILLISECONDS_PER_HOUR = 60 * 60 * 1000;\nvar MILLISECONDS_PER_DAY = 24 * MILLISECONDS_PER_HOUR;\n\n/** FNV-1a 32-bit (e.g. stable graph node ids) — @see functions/peerTopologyDot.js */\nvar FNV1A_32_OFFSET = 2166136261;\nvar FNV1A_32_PRIME = 16777619;\n\n/** Mulberry32 PRNG — @see functions/playnetMarketSimulation.js */\nvar MULBERRY32_A = 0x6d2b79f5;\n/** 2^32, maps unsigned 32-bit hash to [0, 1) */\nvar UINT32_MAX_PLUS_ONE = Math.pow(2, 32);\n\n/** Difficulty / large-number display: use exponential at or above this value. */\nvar UI_NUMBER_LOG_EXP_THRESHOLD = Math.pow(10, 12);\n/** Prefer compact grouping with limited fraction digits at or above this value. */\nvar UI_NUMBER_COMPACT_FRACTION_THRESHOLD = Math.pow(10, 6);\n\n/** Browser localStorage key for Joinmarket pool size tiers (BTC). */\nvar JOINMARKET_POOL_SIZES_STORAGE_KEY = 'fabric.joinmarket.poolSizesBtc';\nmodule.exports = {\n AUTHORITY: 'hub.fabric.pub',\n GENESIS_HASH: GENESIS_HASH,\n MAGIC_BYTES: MAGIC_BYTES,\n VERSION_NUMBER: VERSION_NUMBER,\n FIXTURE_SEED: FIXTURE_SEED,\n ALLOWED_UPLOAD_TYPES: ALLOWED_UPLOAD_TYPES,\n ENABLE_CONVERSATION_SIDEBAR: ENABLE_CONVERSATION_SIDEBAR,\n ENABLE_NETWORK: ENABLE_NETWORK,\n FEATURE_FLAGS: FEATURE_FLAGS,\n featureFlag: featureFlag,\n publicFeatureFlags: publicFeatureFlags,\n SATS_PER_BTC: SATS_PER_BTC,\n BITCOIN_MAX_SUPPLY_BTC: BITCOIN_MAX_SUPPLY_BTC,\n SUB_SATOSHI_EPSILON: SUB_SATOSHI_EPSILON,\n MILLISECONDS_PER_HOUR: MILLISECONDS_PER_HOUR,\n MILLISECONDS_PER_DAY: MILLISECONDS_PER_DAY,\n FNV1A_32_OFFSET: FNV1A_32_OFFSET,\n FNV1A_32_PRIME: FNV1A_32_PRIME,\n MULBERRY32_A: MULBERRY32_A,\n UINT32_MAX_PLUS_ONE: UINT32_MAX_PLUS_ONE,\n UI_NUMBER_LOG_EXP_THRESHOLD: UI_NUMBER_LOG_EXP_THRESHOLD,\n UI_NUMBER_COMPACT_FRACTION_THRESHOLD: UI_NUMBER_COMPACT_FRACTION_THRESHOLD,\n JOINMARKET_POOL_SIZES_STORAGE_KEY: JOINMARKET_POOL_SIZES_STORAGE_KEY\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUcsQ0FBQyxFQUFJLEVBQUU7O0FBRW5DO0FBQ0EsSUFBTUMsMkJBQTJCLEdBQUFGLElBQUEsQ0FBQUMsR0FBQSxDQUFHLEVBQUUsRUFBSSxFQUFFO0FBQzVDO0FBQ0EsSUFBTUUsb0NBQW9DLEdBQUFILElBQUEsQ0FBQUMsR0FBQSxDQUFHLEVBQUUsRUFBSSxDQUFDOztBQUVwRDtBQUNBLElBQU1HLGlDQUFpQyxHQUFHLGdDQUFnQztBQUUxRUMsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZkMsU0FBUyxFQUFFLGdCQUFnQjtFQUMzQmhELFlBQVksRUFBWkEsWUFBWTtFQUNaQyxXQUFXLEVBQVhBLFdBQVc7RUFDWEMsY0FBYyxFQUFkQSxjQUFjO0VBQ2RDLFlBQVksRUFBWkEsWUFBWTtFQUNaQyxvQkFBb0IsRUFBcEJBLG9CQUFvQjtFQUNwQkMsMkJBQTJCLEVBQTNCQSwyQkFBMkI7RUFDM0JDLGNBQWMsRUFBZEEsY0FBYztFQUNkVSxhQUFhLEVBQWJBLGFBQWE7RUFDYlQsV0FBVyxFQUFYQSxXQUFXO0VBQ1hpQixrQkFBa0IsRUFBbEJBLGtCQUFrQjtFQUNsQlEsWUFBWSxFQUFaQSxZQUFZO0VBQ1pDLHNCQUFzQixFQUF0QkEsc0JBQXNCO0VBQ3RCQyxtQkFBbUIsRUFBbkJBLG1CQUFtQjtFQUNuQkMscUJBQXFCLEVBQXJCQSxxQkFBcUI7RUFDckJDLG9CQUFvQixFQUFwQkEsb0JBQW9CO0VBQ3BCQyxlQUFlLEVBQWZBLGVBQWU7RUFDZkMsY0FBYyxFQUFkQSxjQUFjO0VBQ2RDLFlBQVksRUFBWkEsWUFBWTtFQUNaQyxtQkFBbUIsRUFBbkJBLG1CQUFtQjtFQUNuQkcsMkJBQTJCLEVBQTNCQSwyQkFBMkI7RUFDM0JDLG9DQUFvQyxFQUFwQ0Esb0NBQW9DO0VBQ3BDQyxpQ0FBaUMsRUFBakNBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vY29uc3RhbnRzLmpzP2M0ZjUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBGYWJyaWMgQ29uc3RhbnRzXG5jb25zdCB7XG4gIEdFTkVTSVNfSEFTSCxcbiAgTUFHSUNfQllURVMsXG4gIFZFUlNJT05fTlVNQkVSLFxuICBGSVhUVVJFX1NFRURcbn0gPSByZXF1aXJlKCdAZmFicmljL2NvcmUvY29uc3RhbnRzJyk7XG5cbmNvbnN0IEFMTE9XRURfVVBMT0FEX1RZUEVTID0gW107XG5jb25zdCBFTkFCTEVfQ09OVkVSU0FUSU9OX1NJREVCQVIgPSBmYWxzZTtcbmNvbnN0IEVOQUJMRV9ORVRXT1JLID0gdHJ1ZTtcblxuLyoqXG4gKiBGZWF0dXJlIGZsYWdzLiBPdmVycmlkZSB2aWEgZW52OiBGQUJSSUNfRkVBVFVSRV88TkFNRT49MHwxfHRydWV8ZmFsc2VcbiAqIEBleGFtcGxlIEZBQlJJQ19GRUFUVVJFX0JJVENPSU49MCBucG0gc3RhcnRcbiAqL1xuZnVuY3Rpb24gZmVhdHVyZUZsYWcgKG5hbWUsIGRlZmF1bHRWYWx1ZSA9IHRydWUpIHtcbiAgY29uc3QgZW52ID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52XG4gICAgPyBwcm9jZXNzLmVudltgRkFCUklDX0ZFQVRVUkVfJHtuYW1lfWBdXG4gICAgOiB1bmRlZmluZWQ7XG4gIGlmIChlbnYgPT09IHVuZGVmaW5lZCB8fCBlbnYgPT09ICcnKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICByZXR1cm4gZW52ID09PSAnMScgfHwgZW52ID09PSAndHJ1ZSc7XG59XG5cbmNvbnN0IEZFQVRVUkVfRkxBR1MgPSB7XG4gIEJJVENPSU46IGZlYXR1cmVGbGFnKCdCSVRDT0lOJywgdHJ1ZSksXG4gIERPQ1VNRU5UX1BVUkNIQVNFOiBmZWF0dXJlRmxhZygnRE9DVU1FTlRfUFVSQ0hBU0UnLCB0cnVlKSxcbiAgUEFZSk9JTjogZmVhdHVyZUZsYWcoJ1BBWUpPSU4nLCBmYWxzZSksXG4gIElOVk9JQ0VTOiBmZWF0dXJlRmxhZygnSU5WT0lDRVMnLCB0cnVlKSxcbiAgRElTVFJJQlVURTogZmVhdHVyZUZsYWcoJ0RJU1RSSUJVVEUnLCBmYWxzZSksXG4gIExJR0hUTklORzogZmVhdHVyZUZsYWcoJ0xJR0hUTklORycsIGZhbHNlKSxcbiAgLyoqIE9mZiBieSBkZWZhdWx0IOKAlCBEb2N1bWVudCBtYXJrZXQgZm9jdXNlcyBvbiBMMSBpbnZlbnRvcnkgSFRMQywgbm90IGJyb3dzZXIgbWVzaC4gKi9cbiAgV0VCUlRDOiBmZWF0dXJlRmxhZygnV0VCUlRDJywgZmFsc2UpXG59O1xuXG4vKiogUHVibGljIHNuYXBzaG90IGZvciBHZXROZXR3b3JrU3RhdHVzIC8gYnJvd3NlciBnYXRlcyAoYm9vbGVhbnMgb25seSkuICovXG5mdW5jdGlvbiBwdWJsaWNGZWF0dXJlRmxhZ3MgKCkge1xuICByZXR1cm4ge1xuICAgIGJpdGNvaW46ICEhRkVBVFVSRV9GTEFHUy5CSVRDT0lOLFxuICAgIGRvY3VtZW50UHVyY2hhc2U6ICEhRkVBVFVSRV9GTEFHUy5ET0NVTUVOVF9QVVJDSEFTRSxcbiAgICBwYXlqb2luOiAhIUZFQVRVUkVfRkxBR1MuUEFZSk9JTixcbiAgICBpbnZvaWNlczogISFGRUFUVVJFX0ZMQUdTLklOVk9JQ0VTLFxuICAgIGRpc3RyaWJ1dGU6ICEhRkVBVFVSRV9GTEFHUy5ESVNUUklCVVRFLFxuICAgIGxpZ2h0bmluZzogISFGRUFUVVJFX0ZMQUdTLkxJR0hUTklORyxcbiAgICB3ZWJydGM6ICEhRkVBVFVSRV9GTEFHUy5XRUJSVENcbiAgfTtcbn1cblxuLyoqIFNhdG9zaGlzIHBlciAxIEJUQyAoQklQLTE3NiAvIGZpeGVkLXBvaW50IHNhdHMgaW4gdGhpcyBIdWIpLiAqL1xuY29uc3QgU0FUU19QRVJfQlRDID0gMTAwXzAwMF8wMDA7XG5cbi8qKiB+MjFNIEJUQyBjYXAgKEpvaW5tYXJrZXQgLyBVSSBzYW5pdHkgY2xhbXBzKS4gKi9cbmNvbnN0IEJJVENPSU5fTUFYX1NVUFBMWV9CVEMgPSAyMV8wMDBfMDAwO1xuXG4vKipcbiAqIEVwc2lsb24gZm9yIOKAnHdob2xlIHNhdHPigJ0gdnMgc3ViLXNhdCByZW1haW5kZXIgaW4gZGlzcGxheSBoZWxwZXJzLlxuICogQHNlZSBmdW5jdGlvbnMvZm9ybWF0U2F0cy5qc1xuICovXG5jb25zdCBTVUJfU0FUT1NISV9FUFNJTE9OID0gMC4wMDAwMDAwMDE7XG5cbmNvbnN0IE1JTExJU0VDT05EU19QRVJfSE9VUiA9IDYwICogNjAgKiAxMDAwO1xuY29uc3QgTUlMTElTRUNPTkRTX1BFUl9EQVkgPSAyNCAqIE1JTExJU0VDT05EU19QRVJfSE9VUjtcblxuLyoqIEZOVi0xYSAzMi1iaXQgKGUuZy4gc3RhYmxlIGdyYXBoIG5vZGUgaWRzKSDigJQgQHNlZSBmdW5jdGlvbnMvcGVlclRvcG9sb2d5RG90LmpzICovXG5jb25zdCBGTlYxQV8zMl9PRkZTRVQgPSAyXzE2Nl8xMzZfMjYxO1xuY29uc3QgRk5WMUFfMzJfUFJJTUUgPSAxNl83NzdfNjE5O1xuXG4vKiogTXVsYmVycnkzMiBQUk5HIOKAlCBAc2VlIGZ1bmN0aW9ucy9wbGF5bmV0TWFya2V0U2ltdWxhdGlvbi5qcyAqL1xuY29uc3QgTVVMQkVSUlkzMl9BID0gMHg2ZDJiNzlmNTtcbi8qKiAyXjMyLCBtYXBzIHVuc2lnbmVkIDMyLWJpdCBoYXNoIHRvIFswLCAxKSAqL1xuY29uc3QgVUlOVDMyX01BWF9QTFVTX09ORSA9IDIgKiogMzI7XG5cbi8qKiBEaWZmaWN1bHR5IC8gbGFyZ2UtbnVtYmVyIGRpc3BsYXk6IHVzZSBleHBvbmVudGlhbCBhdCBvciBhYm92ZSB0aGlzIHZhbHVlLiAqL1xuY29uc3QgVUlfTlVNQkVSX0xPR19FWFBfVEhSRVNIT0xEID0gMTAgKiogMTI7XG4vKiogUHJlZmVyIGNvbXBhY3QgZ3JvdXBpbmcgd2l0aCBsaW1pdGVkIGZyYWN0aW9uIGRpZ2l0cyBhdCBvciBhYm92ZSB0aGlzIHZhbHVlLiAqL1xuY29uc3QgVUlfTlVNQkVSX0NPTVBBQ1RfRlJBQ1RJT05fVEhSRVNIT0xEID0gMTAgKiogNjtcblxuLyoqIEJyb3dzZXIgbG9jYWxTdG9yYWdlIGtleSBmb3IgSm9pbm1hcmtldCBwb29sIHNpemUgdGllcnMgKEJUQykuICovXG5jb25zdCBKT0lOTUFSS0VUX1BPT0xfU0laRVNfU1RPUkFHRV9LRVkgPSAnZmFicmljLmpvaW5tYXJrZXQucG9vbFNpemVzQnRjJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFVVEhPUklUWTogJ2h1Yi5mYWJyaWMucHViJyxcbiAgR0VORVNJU19IQVNILFxuICBNQUdJQ19CWVRFUyxcbiAgVkVSU0lPTl9OVU1CRVIsXG4gIEZJWFRVUkVfU0VFRCxcbiAgQUxMT1dFRF9VUExPQURfVFlQRVMsXG4gIEVOQUJMRV9DT05WRVJTQVRJT05fU0lERUJBUixcbiAgRU5BQkxFX05FVFdPUkssXG4gIEZFQVRVUkVfRkxBR1MsXG4gIGZlYXR1cmVGbGFnLFxuICBwdWJsaWNGZWF0dXJlRmxhZ3MsXG4gIFNBVFNfUEVSX0JUQyxcbiAgQklUQ09JTl9NQVhfU1VQUExZX0JUQyxcbiAgU1VCX1NBVE9TSElfRVBTSUxPTixcbiAgTUlMTElTRUNPTkRTX1BFUl9IT1VSLFxuICBNSUxMSVNFQ09ORFNfUEVSX0RBWSxcbiAgRk5WMUFfMzJfT0ZGU0VULFxuICBGTlYxQV8zMl9QUklNRSxcbiAgTVVMQkVSUlkzMl9BLFxuICBVSU5UMzJfTUFYX1BMVVNfT05FLFxuICBVSV9OVU1CRVJfTE9HX0VYUF9USFJFU0hPTEQsXG4gIFVJX05VTUJFUl9DT01QQUNUX0ZSQUNUSU9OX1RIUkVTSE9MRCxcbiAgSk9JTk1BUktFVF9QT09MX1NJWkVTX1NUT1JBR0VfS0VZXG59O1xuIl0sIm5hbWVzIjpbIl9yZXF1aXJlIiwicmVxdWlyZSIsIkdFTkVTSVNfSEFTSCIsIk1BR0lDX0JZVEVTIiwiVkVSU0lPTl9OVU1CRVIiLCJGSVhUVVJFX1NFRUQiLCJBTExPV0VEX1VQTE9BRF9UWVBFUyIsIkVOQUJMRV9DT05WRVJTQVRJT05fU0lERUJBUiIsIkVOQUJMRV9ORVRXT1JLIiwiZmVhdHVyZUZsYWciLCJuYW1lIiwiZGVmYXVsdFZhbHVlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZW52IiwicHJvY2VzcyIsImNvbmNhdCIsIkZFQVRVUkVfRkxBR1MiLCJCSVRDT0lOIiwiRE9DVU1FTlRfUFVSQ0hBU0UiLCJQQVlKT0lOIiwiSU5WT0lDRVMiLCJESVNUUklCVVRFIiwiTElHSFROSU5HIiwiV0VCUlRDIiwicHVibGljRmVhdHVyZUZsYWdzIiwiYml0Y29pbiIsImRvY3VtZW50UHVyY2hhc2UiLCJwYXlqb2luIiwiaW52b2ljZXMiLCJkaXN0cmlidXRlIiwibGlnaHRuaW5nIiwid2VicnRjIiwiU0FUU19QRVJfQlRDIiwiQklUQ09JTl9NQVhfU1VQUExZX0JUQyIsIlNVQl9TQVRPU0hJX0VQU0lMT04iLCJNSUxMSVNFQ09ORFNfUEVSX0hPVVIiLCJNSUxMSVNFQ09ORFNfUEVSX0RBWSIsIkZOVjFBXzMyX09GRlNFVCIsIkZOVjFBXzMyX1BSSU1FIiwiTVVMQkVSUlkzMl9BIiwiVUlOVDMyX01BWF9QTFVTX09ORSIsIk1hdGgiLCJwb3ciLCJVSV9OVU1CRVJfTE9HX0VYUF9USFJFU0hPTEQiLCJVSV9OVU1CRVJfQ09NUEFDVF9GUkFDVElPTl9USFJFU0hPTEQiLCJKT0lOTUFSS0VUX1BPT0xfU0laRVNfU1RPUkFHRV9LRVkiLCJtb2R1bGUiLCJleHBvcnRzIiwiQVVUSE9SSVRZIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./constants.js\n\n}")},"./contracts/beaconFederation.js"(module){"use strict";eval("{\n\n/**\n * Fabric Hub **Beacon Federation** — operator catalog entry for the Hub Beacon\n * epoch sealer + its native `fabric-beacon` CONTRACT_PUBLISH / ARC namespace.\n *\n * Wire genesis lives in `@fabric/core/functions/beaconContractDefinition`\n * (network-agnostic). Hub `startBeacon` auto-registers and accepts it into the\n * tracked set; L1 Taproot vault and ARC `spendAddress` share\n * `taproot-authority-ladder-v1`.\n *\n * @see docs/DISTRIBUTED_CONTRACT_EXECUTION.md\n */\nmodule.exports = {\n id: 'beacon-federation',\n name: 'Beacon Federation',\n kind: 'fabric-hub-beacon',\n contractName: 'fabric-beacon',\n interfaces: ['arc.core', 'fabric.beacon'],\n networkId: 'this hub',\n description: 'Binds beacon epochs to Bitcoin L1 and optional sidechain digests: validator pubkeys and threshold (this page), canonical signing strings, `federationWitness` on sealed epochs, and a Taproot federation vault for L1 deposits. The same authority set is published as a native ARC (`fabric-beacon`) under tracked application contracts — Actor id is content-addressed without Bitcoin network in genesis so the contract redeploys across regtest / signet / mainnet with Accept overlays.',\n links: [{\n label: 'Beacon Federation (operator UI)',\n to: '/settings/admin/beacon-federation'\n }, {\n label: 'Distributed manifest (JSON)',\n href: '/services/distributed/manifest'\n }, {\n label: 'Beacon epoch summary (JSON)',\n href: '/services/distributed/epoch'\n }, {\n label: 'Federation vault',\n href: '/services/distributed/vault'\n }, {\n label: 'Vault UTXOs',\n href: '/services/distributed/vault/utxos'\n }, {\n label: 'Federation registry (JSON)',\n href: '/services/distributed/federation-registry'\n }, {\n label: 'Distributed execution (design doc)',\n href: 'https://github.com/FabricLabs/hub.fabric.pub/blob/master/docs/DISTRIBUTED_CONTRACT_EXECUTION.md'\n }],\n l1Bitcoin: {\n notes: 'Vault and fabric-beacon ARC share spendPolicy { publisher, validators, threshold, csvBlocks, softMode } via taproot-authority-ladder-v1. Redeploy: bind beacon/NETWORK per environment; set FABRIC_BEACON_RESET_NETWORK=1 once when promoting chains.'\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb250cmFjdHMvYmVhY29uRmVkZXJhdGlvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUFBLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2ZDLEVBQUUsRUFBRSxtQkFBbUI7RUFDdkJDLElBQUksRUFBRSxtQkFBbUI7RUFDekJDLElBQUksRUFBRSxtQkFBbUI7RUFDekJDLFlBQVksRUFBRSxlQUFlO0VBQzdCQyxVQUFVLEVBQUUsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDO0VBQ3pDQyxTQUFTLEVBQUUsVUFBVTtFQUNyQkMsV0FBVyxFQUFFLGdlQUFnZTtFQUM3ZUMsS0FBSyxFQUFFLENBQ0w7SUFBRUMsS0FBSyxFQUFFLGlDQUFpQztJQUFFQyxFQUFFLEVBQUU7RUFBb0MsQ0FBQyxFQUNyRjtJQUFFRCxLQUFLLEVBQUUsNkJBQTZCO0lBQUVFLElBQUksRUFBRTtFQUFpQyxDQUFDLEVBQ2hGO0lBQUVGLEtBQUssRUFBRSw2QkFBNkI7SUFBRUUsSUFBSSxFQUFFO0VBQThCLENBQUMsRUFDN0U7SUFBRUYsS0FBSyxFQUFFLGtCQUFrQjtJQUFFRSxJQUFJLEVBQUU7RUFBOEIsQ0FBQyxFQUNsRTtJQUFFRixLQUFLLEVBQUUsYUFBYTtJQUFFRSxJQUFJLEVBQUU7RUFBb0MsQ0FBQyxFQUNuRTtJQUFFRixLQUFLLEVBQUUsNEJBQTRCO0lBQUVFLElBQUksRUFBRTtFQUE0QyxDQUFDLEVBQzFGO0lBQ0VGLEtBQUssRUFBRSxvQ0FBb0M7SUFDM0NFLElBQUksRUFBRTtFQUNSLENBQUMsQ0FDRjtFQUNEQyxTQUFTLEVBQUU7SUFDVEMsS0FBSyxFQUFFO0VBQ1Q7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb250cmFjdHMvYmVhY29uRmVkZXJhdGlvbi5qcz9jOGIxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBGYWJyaWMgSHViICoqQmVhY29uIEZlZGVyYXRpb24qKiDigJQgb3BlcmF0b3IgY2F0YWxvZyBlbnRyeSBmb3IgdGhlIEh1YiBCZWFjb25cbiAqIGVwb2NoIHNlYWxlciArIGl0cyBuYXRpdmUgYGZhYnJpYy1iZWFjb25gIENPTlRSQUNUX1BVQkxJU0ggLyBBUkMgbmFtZXNwYWNlLlxuICpcbiAqIFdpcmUgZ2VuZXNpcyBsaXZlcyBpbiBgQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9iZWFjb25Db250cmFjdERlZmluaXRpb25gXG4gKiAobmV0d29yay1hZ25vc3RpYykuIEh1YiBgc3RhcnRCZWFjb25gIGF1dG8tcmVnaXN0ZXJzIGFuZCBhY2NlcHRzIGl0IGludG8gdGhlXG4gKiB0cmFja2VkIHNldDsgTDEgVGFwcm9vdCB2YXVsdCBhbmQgQVJDIGBzcGVuZEFkZHJlc3NgIHNoYXJlXG4gKiBgdGFwcm9vdC1hdXRob3JpdHktbGFkZGVyLXYxYC5cbiAqXG4gKiBAc2VlIGRvY3MvRElTVFJJQlVURURfQ09OVFJBQ1RfRVhFQ1VUSU9OLm1kXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlkOiAnYmVhY29uLWZlZGVyYXRpb24nLFxuICBuYW1lOiAnQmVhY29uIEZlZGVyYXRpb24nLFxuICBraW5kOiAnZmFicmljLWh1Yi1iZWFjb24nLFxuICBjb250cmFjdE5hbWU6ICdmYWJyaWMtYmVhY29uJyxcbiAgaW50ZXJmYWNlczogWydhcmMuY29yZScsICdmYWJyaWMuYmVhY29uJ10sXG4gIG5ldHdvcmtJZDogJ3RoaXMgaHViJyxcbiAgZGVzY3JpcHRpb246ICdCaW5kcyBiZWFjb24gZXBvY2hzIHRvIEJpdGNvaW4gTDEgYW5kIG9wdGlvbmFsIHNpZGVjaGFpbiBkaWdlc3RzOiB2YWxpZGF0b3IgcHVia2V5cyBhbmQgdGhyZXNob2xkICh0aGlzIHBhZ2UpLCBjYW5vbmljYWwgc2lnbmluZyBzdHJpbmdzLCBgZmVkZXJhdGlvbldpdG5lc3NgIG9uIHNlYWxlZCBlcG9jaHMsIGFuZCBhIFRhcHJvb3QgZmVkZXJhdGlvbiB2YXVsdCBmb3IgTDEgZGVwb3NpdHMuIFRoZSBzYW1lIGF1dGhvcml0eSBzZXQgaXMgcHVibGlzaGVkIGFzIGEgbmF0aXZlIEFSQyAoYGZhYnJpYy1iZWFjb25gKSB1bmRlciB0cmFja2VkIGFwcGxpY2F0aW9uIGNvbnRyYWN0cyDigJQgQWN0b3IgaWQgaXMgY29udGVudC1hZGRyZXNzZWQgd2l0aG91dCBCaXRjb2luIG5ldHdvcmsgaW4gZ2VuZXNpcyBzbyB0aGUgY29udHJhY3QgcmVkZXBsb3lzIGFjcm9zcyByZWd0ZXN0IC8gc2lnbmV0IC8gbWFpbm5ldCB3aXRoIEFjY2VwdCBvdmVybGF5cy4nLFxuICBsaW5rczogW1xuICAgIHsgbGFiZWw6ICdCZWFjb24gRmVkZXJhdGlvbiAob3BlcmF0b3IgVUkpJywgdG86ICcvc2V0dGluZ3MvYWRtaW4vYmVhY29uLWZlZGVyYXRpb24nIH0sXG4gICAgeyBsYWJlbDogJ0Rpc3RyaWJ1dGVkIG1hbmlmZXN0IChKU09OKScsIGhyZWY6ICcvc2VydmljZXMvZGlzdHJpYnV0ZWQvbWFuaWZlc3QnIH0sXG4gICAgeyBsYWJlbDogJ0JlYWNvbiBlcG9jaCBzdW1tYXJ5IChKU09OKScsIGhyZWY6ICcvc2VydmljZXMvZGlzdHJpYnV0ZWQvZXBvY2gnIH0sXG4gICAgeyBsYWJlbDogJ0ZlZGVyYXRpb24gdmF1bHQnLCBocmVmOiAnL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL3ZhdWx0JyB9LFxuICAgIHsgbGFiZWw6ICdWYXVsdCBVVFhPcycsIGhyZWY6ICcvc2VydmljZXMvZGlzdHJpYnV0ZWQvdmF1bHQvdXR4b3MnIH0sXG4gICAgeyBsYWJlbDogJ0ZlZGVyYXRpb24gcmVnaXN0cnkgKEpTT04pJywgaHJlZjogJy9zZXJ2aWNlcy9kaXN0cmlidXRlZC9mZWRlcmF0aW9uLXJlZ2lzdHJ5JyB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnRGlzdHJpYnV0ZWQgZXhlY3V0aW9uIChkZXNpZ24gZG9jKScsXG4gICAgICBocmVmOiAnaHR0cHM6Ly9naXRodWIuY29tL0ZhYnJpY0xhYnMvaHViLmZhYnJpYy5wdWIvYmxvYi9tYXN0ZXIvZG9jcy9ESVNUUklCVVRFRF9DT05UUkFDVF9FWEVDVVRJT04ubWQnXG4gICAgfVxuICBdLFxuICBsMUJpdGNvaW46IHtcbiAgICBub3RlczogJ1ZhdWx0IGFuZCBmYWJyaWMtYmVhY29uIEFSQyBzaGFyZSBzcGVuZFBvbGljeSB7IHB1Ymxpc2hlciwgdmFsaWRhdG9ycywgdGhyZXNob2xkLCBjc3ZCbG9ja3MsIHNvZnRNb2RlIH0gdmlhIHRhcHJvb3QtYXV0aG9yaXR5LWxhZGRlci12MS4gUmVkZXBsb3k6IGJpbmQgYmVhY29uL05FVFdPUksgcGVyIGVudmlyb25tZW50OyBzZXQgRkFCUklDX0JFQUNPTl9SRVNFVF9ORVRXT1JLPTEgb25jZSB3aGVuIHByb21vdGluZyBjaGFpbnMuJ1xuICB9XG59O1xuIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJpZCIsIm5hbWUiLCJraW5kIiwiY29udHJhY3ROYW1lIiwiaW50ZXJmYWNlcyIsIm5ldHdvcmtJZCIsImRlc2NyaXB0aW9uIiwibGlua3MiLCJsYWJlbCIsInRvIiwiaHJlZiIsImwxQml0Y29pbiIsIm5vdGVzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./contracts/beaconFederation.js\n\n}")},"./contracts/liquid.js"(module){"use strict";eval("{\n\n/**\n * Blockstream Liquid (Elements `liquidv1`) — reference metadata for operators.\n * Not Fabric hub validator configuration; L1 script matches ElementsProject/elements\n * `CLiquidV1Params` default `consensus.fedpegScript` (chainparams.cpp).\n *\n * @see https://liquid.net/federation\n * @see https://github.com/ElementsProject/elements/blob/master/src/chainparams.cpp\n */\n\n/** Bitcoin mainnet L1 fedpeg script (hex), as shipped for `liquidv1` in Elements. */\nvar FEDPEG_SCRIPT_HEX = '745c87635b21020e0338c96a8870479f2396c373cc7696ba124e8635d41b0ea581112b678172612102675333a4e4b8fb51d9d4e22fa5a8eaced3fdac8a8cbf9be8c030f75712e6af992102896807d54bc55c24981f24a453c60ad3e8993d693732288068a23df3d9f50d4821029e51a5ef5db3137051de8323b001749932f2ff0d34c82e96a2c2461de96ae56c2102a4e1a9638d46923272c266631d94d36bdb03a64ee0e14c7518e49d2f29bc40102102f8a00b269f8c5e59c67d36db3cdc11b11b21f64b4bffb2815e9100d9aa8daf072103079e252e85abffd3c401a69b087e590a9b86f33f574f08129ccbd3521ecf516b2103111cf405b627e22135b3b3733a4a34aa5723fb0f58379a16d32861bf576b0ec2210318f331b3e5d38156da6633b31929c5b220349859cc9ca3d33fb4e68aa08401742103230dae6b4ac93480aeab26d000841298e3b8f6157028e47b0897c1e025165de121035abff4281ff00660f99ab27bb53e6b33689c2cd8dcd364bc3c90ca5aea0d71a62103bd45cddfacf2083b14310ae4a84e25de61e451637346325222747b157446614c2103cc297026b06c71cbfa52089149157b5ff23de027ac5ab781800a578192d175462103d3bde5d63bdb3a6379b461be64dad45eabff42f758543a9645afd42f6d4248282103ed1e8d5109c9ed66f7941bc53cc71137baa76d50d274bda8d5e8ffbd6e61fe9a5f6702c00fb275522103aab896d53a8e7d6433137bbba940f9c521e085dd07e60994579b64a6d992cf79210291b7d0b1b692f8f524516ed950872e5da10fb1b808b5a526dedc6fed1cf29807210386aa9372fbab374593466bc5451dc59954e90787f08060964d95c87ef34ca5bb5368ae';\n\n/** Compressed secp256k1 pubkeys (33-byte, hex) pushed in `FEDPEG_SCRIPT_HEX` (watchmen / emergency set). */\nvar FEDPEG_COMPRESSED_PUBKEYS_HEX = function extract21Pushes(scriptHex) {\n var keys = [];\n for (var i = 0; i < scriptHex.length;) {\n var op = scriptHex.slice(i, i + 2);\n if (op === '21') {\n keys.push(scriptHex.slice(i + 2, i + 2 + 66));\n i += 2 + 66;\n } else {\n i += 2;\n }\n }\n return keys;\n}(FEDPEG_SCRIPT_HEX);\nmodule.exports = {\n id: 'liquid',\n name: 'Liquid',\n kind: 'elements-fedpeg',\n networkId: 'liquidv1',\n operatorSummary: 'Blockstream (network) / Liquid Federation (governance + functionaries)',\n urls: {\n homepage: 'https://liquid.net',\n federation: 'https://liquid.net/federation',\n docs: 'https://docs.liquid.net/',\n helpFederation: 'https://help.blockstream.com/hc/en-us/articles/900003013143-What-is-the-Liquid-Federation',\n elementsChainparamsSource: 'https://github.com/ElementsProject/elements/blob/master/src/chainparams.cpp'\n },\n l1Bitcoin: {\n network: 'mainnet',\n fedpegScriptHex: FEDPEG_SCRIPT_HEX,\n peginMinDepthBlocks: 100,\n notes: 'User peg-in UTXOs pay outputs that key off this federation script plus a user claim script; peg-outs move L-BTC back to user-chosen Bitcoin destinations. Verify live parameters with a Liquid Elements node (`getsidechaininfo`).'\n },\n /** Keys material to the L1 peg script above (not Fabric Schnorr validator ids). */\n fedpegWatchmen: {\n compressedSecp256k1PubkeysHex: FEDPEG_COMPRESSED_PUBKEYS_HEX\n },\n /**\n * Governance-side “members” are organizations on liquid.net/federation (rotates).\n * Functionary operators (block + peg operations) are a smaller set — see Liquid Help Center.\n */\n governanceFederation: {\n rosterUrl: 'https://liquid.net/federation',\n functionaryOperatorCount: 15,\n /** Illustrative names only; canonical list is on liquid.net/federation. */\n highlightMemberOrganizations: ['Blockstream', 'Bitfinex', 'BTSE', 'Ledger']\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9jb250cmFjdHMvbGlxdWlkLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFNQSxpQkFBaUIsR0FBRywwdUNBQTB1Qzs7QUFFcHdDO0FBQ0EsSUFBTUMsNkJBQTZCLEdBQUksU0FBU0MsZUFBZUEsQ0FBRUMsU0FBUyxFQUFFO0VBQzFFLElBQU1DLElBQUksR0FBRyxFQUFFO0VBQ2YsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdGLFNBQVMsQ0FBQ0csTUFBTSxHQUFHO0lBQ3JDLElBQU1DLEVBQUUsR0FBR0osU0FBUyxDQUFDSyxLQUFLLENBQUNILENBQUMsRUFBRUEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxJQUFJRSxFQUFFLEtBQUssSUFBSSxFQUFFO01BQ2ZILElBQUksQ0FBQ0ssSUFBSSxDQUFDTixTQUFTLENBQUNLLEtBQUssQ0FBQ0gsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztNQUM3Q0EsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ2IsQ0FBQyxNQUFNO01BQ0xBLENBQUMsSUFBSSxDQUFDO0lBQ1I7RUFDRjtFQUNBLE9BQU9ELElBQUk7QUFDYixDQUFDLENBQUVKLGlCQUFpQixDQUFDO0FBRXJCVSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmQyxFQUFFLEVBQUUsUUFBUTtFQUNaQyxJQUFJLEVBQUUsUUFBUTtFQUNkQyxJQUFJLEVBQUUsaUJBQWlCO0VBQ3ZCQyxTQUFTLEVBQUUsVUFBVTtFQUNyQkMsZUFBZSxFQUFFLHdFQUF3RTtFQUV6RkMsSUFBSSxFQUFFO0lBQ0pDLFFBQVEsRUFBRSxvQkFBb0I7SUFDOUJDLFVBQVUsRUFBRSwrQkFBK0I7SUFDM0NDLElBQUksRUFBRSwwQkFBMEI7SUFDaENDLGNBQWMsRUFBRSwyRkFBMkY7SUFDM0dDLHlCQUF5QixFQUFFO0VBQzdCLENBQUM7RUFFREMsU0FBUyxFQUFFO0lBQ1RDLE9BQU8sRUFBRSxTQUFTO0lBQ2xCQyxlQUFlLEVBQUV6QixpQkFBaUI7SUFDbEMwQixtQkFBbUIsRUFBRSxHQUFHO0lBQ3hCQyxLQUFLLEVBQUU7RUFDVCxDQUFDO0VBRUQ7RUFDQUMsY0FBYyxFQUFFO0lBQ2RDLDZCQUE2QixFQUFFNUI7RUFDakMsQ0FBQztFQUVEO0FBQ0Y7QUFDQTtBQUNBO0VBQ0U2QixvQkFBb0IsRUFBRTtJQUNwQkMsU0FBUyxFQUFFLCtCQUErQjtJQUMxQ0Msd0JBQXdCLEVBQUUsRUFBRTtJQUM1QjtJQUNBQyw0QkFBNEIsRUFBRSxDQUM1QixhQUFhLEVBQ2IsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRO0VBRVo7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9jb250cmFjdHMvbGlxdWlkLmpzPzZhOGEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEJsb2Nrc3RyZWFtIExpcXVpZCAoRWxlbWVudHMgYGxpcXVpZHYxYCkg4oCUIHJlZmVyZW5jZSBtZXRhZGF0YSBmb3Igb3BlcmF0b3JzLlxuICogTm90IEZhYnJpYyBodWIgdmFsaWRhdG9yIGNvbmZpZ3VyYXRpb247IEwxIHNjcmlwdCBtYXRjaGVzIEVsZW1lbnRzUHJvamVjdC9lbGVtZW50c1xuICogYENMaXF1aWRWMVBhcmFtc2AgZGVmYXVsdCBgY29uc2Vuc3VzLmZlZHBlZ1NjcmlwdGAgKGNoYWlucGFyYW1zLmNwcCkuXG4gKlxuICogQHNlZSBodHRwczovL2xpcXVpZC5uZXQvZmVkZXJhdGlvblxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVudHNQcm9qZWN0L2VsZW1lbnRzL2Jsb2IvbWFzdGVyL3NyYy9jaGFpbnBhcmFtcy5jcHBcbiAqL1xuXG4vKiogQml0Y29pbiBtYWlubmV0IEwxIGZlZHBlZyBzY3JpcHQgKGhleCksIGFzIHNoaXBwZWQgZm9yIGBsaXF1aWR2MWAgaW4gRWxlbWVudHMuICovXG5jb25zdCBGRURQRUdfU0NSSVBUX0hFWCA9ICc3NDVjODc2MzViMjEwMjBlMDMzOGM5NmE4ODcwNDc5ZjIzOTZjMzczY2M3Njk2YmExMjRlODYzNWQ0MWIwZWE1ODExMTJiNjc4MTcyNjEyMTAyNjc1MzMzYTRlNGI4ZmI1MWQ5ZDRlMjJmYTVhOGVhY2VkM2ZkYWM4YThjYmY5YmU4YzAzMGY3NTcxMmU2YWY5OTIxMDI4OTY4MDdkNTRiYzU1YzI0OTgxZjI0YTQ1M2M2MGFkM2U4OTkzZDY5MzczMjI4ODA2OGEyM2RmM2Q5ZjUwZDQ4MjEwMjllNTFhNWVmNWRiMzEzNzA1MWRlODMyM2IwMDE3NDk5MzJmMmZmMGQzNGM4MmU5NmEyYzI0NjFkZTk2YWU1NmMyMTAyYTRlMWE5NjM4ZDQ2OTIzMjcyYzI2NjYzMWQ5NGQzNmJkYjAzYTY0ZWUwZTE0Yzc1MThlNDlkMmYyOWJjNDAxMDIxMDJmOGEwMGIyNjlmOGM1ZTU5YzY3ZDM2ZGIzY2RjMTFiMTFiMjFmNjRiNGJmZmIyODE1ZTkxMDBkOWFhOGRhZjA3MjEwMzA3OWUyNTJlODVhYmZmZDNjNDAxYTY5YjA4N2U1OTBhOWI4NmYzM2Y1NzRmMDgxMjljY2JkMzUyMWVjZjUxNmIyMTAzMTExY2Y0MDViNjI3ZTIyMTM1YjNiMzczM2E0YTM0YWE1NzIzZmIwZjU4Mzc5YTE2ZDMyODYxYmY1NzZiMGVjMjIxMDMxOGYzMzFiM2U1ZDM4MTU2ZGE2NjMzYjMxOTI5YzViMjIwMzQ5ODU5Y2M5Y2EzZDMzZmI0ZTY4YWEwODQwMTc0MjEwMzIzMGRhZTZiNGFjOTM0ODBhZWFiMjZkMDAwODQxMjk4ZTNiOGY2MTU3MDI4ZTQ3YjA4OTdjMWUwMjUxNjVkZTEyMTAzNWFiZmY0MjgxZmYwMDY2MGY5OWFiMjdiYjUzZTZiMzM2ODljMmNkOGRjZDM2NGJjM2M5MGNhNWFlYTBkNzFhNjIxMDNiZDQ1Y2RkZmFjZjIwODNiMTQzMTBhZTRhODRlMjVkZTYxZTQ1MTYzNzM0NjMyNTIyMjc0N2IxNTc0NDY2MTRjMjEwM2NjMjk3MDI2YjA2YzcxY2JmYTUyMDg5MTQ5MTU3YjVmZjIzZGUwMjdhYzVhYjc4MTgwMGE1NzgxOTJkMTc1NDYyMTAzZDNiZGU1ZDYzYmRiM2E2Mzc5YjQ2MWJlNjRkYWQ0NWVhYmZmNDJmNzU4NTQzYTk2NDVhZmQ0MmY2ZDQyNDgyODIxMDNlZDFlOGQ1MTA5YzllZDY2Zjc5NDFiYzUzY2M3MTEzN2JhYTc2ZDUwZDI3NGJkYThkNWU4ZmZiZDZlNjFmZTlhNWY2NzAyYzAwZmIyNzU1MjIxMDNhYWI4OTZkNTNhOGU3ZDY0MzMxMzdiYmJhOTQwZjljNTIxZTA4NWRkMDdlNjA5OTQ1NzliNjRhNmQ5OTJjZjc5MjEwMjkxYjdkMGIxYjY5MmY4ZjUyNDUxNmVkOTUwODcyZTVkYTEwZmIxYjgwOGI1YTUyNmRlZGM2ZmVkMWNmMjk4MDcyMTAzODZhYTkzNzJmYmFiMzc0NTkzNDY2YmM1NDUxZGM1OTk1NGU5MDc4N2YwODA2MDk2NGQ5NWM4N2VmMzRjYTViYjUzNjhhZSc7XG5cbi8qKiBDb21wcmVzc2VkIHNlY3AyNTZrMSBwdWJrZXlzICgzMy1ieXRlLCBoZXgpIHB1c2hlZCBpbiBgRkVEUEVHX1NDUklQVF9IRVhgICh3YXRjaG1lbiAvIGVtZXJnZW5jeSBzZXQpLiAqL1xuY29uc3QgRkVEUEVHX0NPTVBSRVNTRURfUFVCS0VZU19IRVggPSAoZnVuY3Rpb24gZXh0cmFjdDIxUHVzaGVzIChzY3JpcHRIZXgpIHtcbiAgY29uc3Qga2V5cyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNjcmlwdEhleC5sZW5ndGg7KSB7XG4gICAgY29uc3Qgb3AgPSBzY3JpcHRIZXguc2xpY2UoaSwgaSArIDIpO1xuICAgIGlmIChvcCA9PT0gJzIxJykge1xuICAgICAga2V5cy5wdXNoKHNjcmlwdEhleC5zbGljZShpICsgMiwgaSArIDIgKyA2NikpO1xuICAgICAgaSArPSAyICsgNjY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkgKz0gMjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59KShGRURQRUdfU0NSSVBUX0hFWCk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpZDogJ2xpcXVpZCcsXG4gIG5hbWU6ICdMaXF1aWQnLFxuICBraW5kOiAnZWxlbWVudHMtZmVkcGVnJyxcbiAgbmV0d29ya0lkOiAnbGlxdWlkdjEnLFxuICBvcGVyYXRvclN1bW1hcnk6ICdCbG9ja3N0cmVhbSAobmV0d29yaykgLyBMaXF1aWQgRmVkZXJhdGlvbiAoZ292ZXJuYW5jZSArIGZ1bmN0aW9uYXJpZXMpJyxcblxuICB1cmxzOiB7XG4gICAgaG9tZXBhZ2U6ICdodHRwczovL2xpcXVpZC5uZXQnLFxuICAgIGZlZGVyYXRpb246ICdodHRwczovL2xpcXVpZC5uZXQvZmVkZXJhdGlvbicsXG4gICAgZG9jczogJ2h0dHBzOi8vZG9jcy5saXF1aWQubmV0LycsXG4gICAgaGVscEZlZGVyYXRpb246ICdodHRwczovL2hlbHAuYmxvY2tzdHJlYW0uY29tL2hjL2VuLXVzL2FydGljbGVzLzkwMDAwMzAxMzE0My1XaGF0LWlzLXRoZS1MaXF1aWQtRmVkZXJhdGlvbicsXG4gICAgZWxlbWVudHNDaGFpbnBhcmFtc1NvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZW50c1Byb2plY3QvZWxlbWVudHMvYmxvYi9tYXN0ZXIvc3JjL2NoYWlucGFyYW1zLmNwcCdcbiAgfSxcblxuICBsMUJpdGNvaW46IHtcbiAgICBuZXR3b3JrOiAnbWFpbm5ldCcsXG4gICAgZmVkcGVnU2NyaXB0SGV4OiBGRURQRUdfU0NSSVBUX0hFWCxcbiAgICBwZWdpbk1pbkRlcHRoQmxvY2tzOiAxMDAsXG4gICAgbm90ZXM6ICdVc2VyIHBlZy1pbiBVVFhPcyBwYXkgb3V0cHV0cyB0aGF0IGtleSBvZmYgdGhpcyBmZWRlcmF0aW9uIHNjcmlwdCBwbHVzIGEgdXNlciBjbGFpbSBzY3JpcHQ7IHBlZy1vdXRzIG1vdmUgTC1CVEMgYmFjayB0byB1c2VyLWNob3NlbiBCaXRjb2luIGRlc3RpbmF0aW9ucy4gVmVyaWZ5IGxpdmUgcGFyYW1ldGVycyB3aXRoIGEgTGlxdWlkIEVsZW1lbnRzIG5vZGUgKGBnZXRzaWRlY2hhaW5pbmZvYCkuJ1xuICB9LFxuXG4gIC8qKiBLZXlzIG1hdGVyaWFsIHRvIHRoZSBMMSBwZWcgc2NyaXB0IGFib3ZlIChub3QgRmFicmljIFNjaG5vcnIgdmFsaWRhdG9yIGlkcykuICovXG4gIGZlZHBlZ1dhdGNobWVuOiB7XG4gICAgY29tcHJlc3NlZFNlY3AyNTZrMVB1YmtleXNIZXg6IEZFRFBFR19DT01QUkVTU0VEX1BVQktFWVNfSEVYXG4gIH0sXG5cbiAgLyoqXG4gICAqIEdvdmVybmFuY2Utc2lkZSDigJxtZW1iZXJz4oCdIGFyZSBvcmdhbml6YXRpb25zIG9uIGxpcXVpZC5uZXQvZmVkZXJhdGlvbiAocm90YXRlcykuXG4gICAqIEZ1bmN0aW9uYXJ5IG9wZXJhdG9ycyAoYmxvY2sgKyBwZWcgb3BlcmF0aW9ucykgYXJlIGEgc21hbGxlciBzZXQg4oCUIHNlZSBMaXF1aWQgSGVscCBDZW50ZXIuXG4gICAqL1xuICBnb3Zlcm5hbmNlRmVkZXJhdGlvbjoge1xuICAgIHJvc3RlclVybDogJ2h0dHBzOi8vbGlxdWlkLm5ldC9mZWRlcmF0aW9uJyxcbiAgICBmdW5jdGlvbmFyeU9wZXJhdG9yQ291bnQ6IDE1LFxuICAgIC8qKiBJbGx1c3RyYXRpdmUgbmFtZXMgb25seTsgY2Fub25pY2FsIGxpc3QgaXMgb24gbGlxdWlkLm5ldC9mZWRlcmF0aW9uLiAqL1xuICAgIGhpZ2hsaWdodE1lbWJlck9yZ2FuaXphdGlvbnM6IFtcbiAgICAgICdCbG9ja3N0cmVhbScsXG4gICAgICAnQml0ZmluZXgnLFxuICAgICAgJ0JUU0UnLFxuICAgICAgJ0xlZGdlcidcbiAgICBdXG4gIH1cbn07XG4iXSwibmFtZXMiOlsiRkVEUEVHX1NDUklQVF9IRVgiLCJGRURQRUdfQ09NUFJFU1NFRF9QVUJLRVlTX0hFWCIsImV4dHJhY3QyMVB1c2hlcyIsInNjcmlwdEhleCIsImtleXMiLCJpIiwibGVuZ3RoIiwib3AiLCJzbGljZSIsInB1c2giLCJtb2R1bGUiLCJleHBvcnRzIiwiaWQiLCJuYW1lIiwia2luZCIsIm5ldHdvcmtJZCIsIm9wZXJhdG9yU3VtbWFyeSIsInVybHMiLCJob21lcGFnZSIsImZlZGVyYXRpb24iLCJkb2NzIiwiaGVscEZlZGVyYXRpb24iLCJlbGVtZW50c0NoYWlucGFyYW1zU291cmNlIiwibDFCaXRjb2luIiwibmV0d29yayIsImZlZHBlZ1NjcmlwdEhleCIsInBlZ2luTWluRGVwdGhCbG9ja3MiLCJub3RlcyIsImZlZHBlZ1dhdGNobWVuIiwiY29tcHJlc3NlZFNlY3AyNTZrMVB1YmtleXNIZXgiLCJnb3Zlcm5hbmNlRmVkZXJhdGlvbiIsInJvc3RlclVybCIsImZ1bmN0aW9uYXJ5T3BlcmF0b3JDb3VudCIsImhpZ2hsaWdodE1lbWJlck9yZ2FuaXphdGlvbnMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./contracts/liquid.js\n\n}")},"./functions/beaconFederationConstants.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var process = __webpack_require__(/*! process/browser */ \"./node_modules/process/browser.js\");\n\n\n/**\n * Operator-facing constants for Beacon / Beacon Federation UX.\n * On-chain vault address + UTXO scan: GET /services/distributed/vault and …/vault/utxos.\n * Cooperative signing remains off-hub (PSBT); Fabric epochs / sidechain enforcement are separate.\n */\nmodule.exports = {\n /** Regtest hub default from settings.beacon.interval */\n REGTEST_EPOCH_INTERVAL_MS: Number(process.env.FABRIC_BEACON_INTERVAL_MS || 600000),\n REGTEST_EPOCH_INTERVAL_MINUTES: Math.round(Number(process.env.FABRIC_BEACON_INTERVAL_MS || 600000) / 60000) || 10,\n NON_REGTEST_CADENCE_LABEL: 'each new Bitcoin block',\n /** Default CSV degradation window: softer vault tier unlocks after this many confirmations (BIP68). Also used as operator-facing L1 deposit maturity. */\n DEFAULT_L1_DEPOSIT_MATURITY_BLOCKS: 144\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvYmVhY29uRmVkZXJhdGlvbkNvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBQSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmO0VBQ0FDLHlCQUF5QixFQUFFQyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyx5QkFBeUIsSUFBSSxNQUFNLENBQUM7RUFDbEZDLDhCQUE4QixFQUFFQyxJQUFJLENBQUNDLEtBQUssQ0FBQ04sTUFBTSxDQUFDQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MseUJBQXlCLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRTtFQUNqSEkseUJBQXlCLEVBQUUsd0JBQXdCO0VBQ25EO0VBQ0FDLGtDQUFrQyxFQUFFO0FBQ3RDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9iZWFjb25GZWRlcmF0aW9uQ29uc3RhbnRzLmpzPzIyZjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE9wZXJhdG9yLWZhY2luZyBjb25zdGFudHMgZm9yIEJlYWNvbiAvIEJlYWNvbiBGZWRlcmF0aW9uIFVYLlxuICogT24tY2hhaW4gdmF1bHQgYWRkcmVzcyArIFVUWE8gc2NhbjogR0VUIC9zZXJ2aWNlcy9kaXN0cmlidXRlZC92YXVsdCBhbmQg4oCmL3ZhdWx0L3V0eG9zLlxuICogQ29vcGVyYXRpdmUgc2lnbmluZyByZW1haW5zIG9mZi1odWIgKFBTQlQpOyBGYWJyaWMgZXBvY2hzIC8gc2lkZWNoYWluIGVuZm9yY2VtZW50IGFyZSBzZXBhcmF0ZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8qKiBSZWd0ZXN0IGh1YiBkZWZhdWx0IGZyb20gc2V0dGluZ3MuYmVhY29uLmludGVydmFsICovXG4gIFJFR1RFU1RfRVBPQ0hfSU5URVJWQUxfTVM6IE51bWJlcihwcm9jZXNzLmVudi5GQUJSSUNfQkVBQ09OX0lOVEVSVkFMX01TIHx8IDYwMDAwMCksXG4gIFJFR1RFU1RfRVBPQ0hfSU5URVJWQUxfTUlOVVRFUzogTWF0aC5yb3VuZChOdW1iZXIocHJvY2Vzcy5lbnYuRkFCUklDX0JFQUNPTl9JTlRFUlZBTF9NUyB8fCA2MDAwMDApIC8gNjAwMDApIHx8IDEwLFxuICBOT05fUkVHVEVTVF9DQURFTkNFX0xBQkVMOiAnZWFjaCBuZXcgQml0Y29pbiBibG9jaycsXG4gIC8qKiBEZWZhdWx0IENTViBkZWdyYWRhdGlvbiB3aW5kb3c6IHNvZnRlciB2YXVsdCB0aWVyIHVubG9ja3MgYWZ0ZXIgdGhpcyBtYW55IGNvbmZpcm1hdGlvbnMgKEJJUDY4KS4gQWxzbyB1c2VkIGFzIG9wZXJhdG9yLWZhY2luZyBMMSBkZXBvc2l0IG1hdHVyaXR5LiAqL1xuICBERUZBVUxUX0wxX0RFUE9TSVRfTUFUVVJJVFlfQkxPQ0tTOiAxNDRcbn07XG4iXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIlJFR1RFU1RfRVBPQ0hfSU5URVJWQUxfTVMiLCJOdW1iZXIiLCJwcm9jZXNzIiwiZW52IiwiRkFCUklDX0JFQUNPTl9JTlRFUlZBTF9NUyIsIlJFR1RFU1RfRVBPQ0hfSU5URVJWQUxfTUlOVVRFUyIsIk1hdGgiLCJyb3VuZCIsIk5PTl9SRUdURVNUX0NBREVOQ0VfTEFCRUwiLCJERUZBVUxUX0wxX0RFUE9TSVRfTUFUVVJJVFlfQkxPQ0tTIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/beaconFederationConstants.js\n\n}")},"./functions/bitcoinClient.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nvar BIP32 = (__webpack_require__(/*! bip32 */ \"./node_modules/bip32/src/index.js\")[\"default\"]);\nvar ecc = __webpack_require__(/*! @fabric/core/types/ecc */ \"./node_modules/@fabric/core/types/ecc.js\");\nvar payments = __webpack_require__(/*! bitcoinjs-lib/src/payments */ \"./node_modules/bitcoinjs-lib/src/payments/index.js\");\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ \"./functions/fabricBrowserState.js\"),\n readStorageJSON = _require.readStorageJSON,\n writeStorageJSON = _require.writeStorageJSON,\n readStorageString = _require.readStorageString,\n writeStorageString = _require.writeStorageString,\n removeStorageKey = _require.removeStorageKey;\nvar SETTINGS_KEY = 'fabric.bitcoin.upstream';\nvar PAYJOIN_PREFS_KEY = 'fabric.bitcoin.payjoinPreferences';\nvar LOCAL_WALLET_KEY = 'fabric.bitcoin.wallets';\nvar BALANCE_CACHE_KEY = 'fabric.bitcoin.balanceCache';\nvar BALANCE_CACHE_MAX_AGE_MS = 5 * 60 * 1000; // 5 minutes - use cache if fetch fails and cache is newer\n/** @deprecated Migrated once into receive + send keys; removed after read. */\nvar SESSION_BIP44_ACCOUNT_KEY = 'fabric.bitcoin.bip44Account';\n/** Legacy sessionStorage (payment derivation uses fixed account index 0; keys kept for migration/tests). */\nvar SESSION_BIP44_RECEIVE_KEY = 'fabric.bitcoin.bip44ReceiveAccount';\n/** @see SESSION_BIP44_RECEIVE_KEY */\nvar SESSION_BIP44_SEND_KEY = 'fabric.bitcoin.bip44SendAccount';\n/** Legacy localStorage defaults (Settings UI no longer writes; payment path is fixed account 0). */\nvar LOCAL_BIP44_RECEIVE_DEFAULT_KEY = 'fabric.bitcoin.defaultBip44ReceiveAccount';\n/** @see LOCAL_BIP44_RECEIVE_DEFAULT_KEY */\nvar LOCAL_BIP44_SEND_DEFAULT_KEY = 'fabric.bitcoin.defaultBip44SendAccount';\n/**\n * Default BIP44 account index under the identity master when not using Fabric multi-account mode,\n * or when {@link fabricAccountIndex} is unset (`m/44'/0'/n'/0/*`, `m/44'/0'/n'/1/*`).\n */\nvar BITCOIN_PAYMENTS_BIP44_ACCOUNT_INDEX = 0;\n\n/**\n * Browser Hub Bitcoin balance/spend/receive use this account index under the master xprv.\n * When {@link fabricIdentityMode} is `account`, this follows {@link fabricAccountIndex} so the top-bar\n * balance matches the active Fabric account.\n * @param {object} identity\n * @returns {number}\n */\nfunction getBitcoinBip44AccountForIdentity() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (identity && identity.fabricIdentityMode === 'account') {\n var raw = identity.fabricAccountIndex;\n if (raw != null && raw !== '') {\n var ai = Math.floor(Number(raw));\n if (Number.isFinite(ai) && ai >= 0 && ai <= 0x7fffffff) return ai;\n }\n }\n return BITCOIN_PAYMENTS_BIP44_ACCOUNT_INDEX;\n}\n/** Fired when session BIP44 keys change (legacy; payment wallet uses a fixed account and ignores session for derivation). */\nvar BITCOIN_WALLET_BRANCH_CHANGED = 'fabricBitcoinWalletBranchChanged';\n/**\n * After a successful unlock, we persist the derived BIP44 payment-account xpub so a locked identity\n * (master xpub only) still resolves the same walletId / descriptors as the active browser session.\n */\nvar SPEND_XPUB_WATCH_KEY = 'fabric.bitcoin.spendXpubWatch';\nvar _require2 = __webpack_require__(/*! ./fabricSafeLog */ \"./functions/fabricSafeLog.js\"),\n safeIdentityErr = _require2.safeIdentityErr;\nfunction fabricBitcoinWatchMasterXpub() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (identity && identity.fabricIdentityMode === 'account' && identity.masterXpub) {\n return String(identity.masterXpub).trim();\n }\n return identity && identity.xpub ? String(identity.xpub).trim() : '';\n}\nfunction loadSpendXpubWatchForIdentity() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var fabricId = identity && identity.id ? String(identity.id).trim() : '';\n var masterXpub = fabricBitcoinWatchMasterXpub(identity);\n try {\n if (typeof window === 'undefined') return null;\n var p = readStorageJSON(SPEND_XPUB_WATCH_KEY, null);\n if (!p) return null;\n if (!p || _typeof(p) !== 'object' || !p.spendAccountXpub) return null;\n var spendX = String(p.spendAccountXpub).trim();\n if (!spendX) return null;\n if (fabricId) {\n if (String(p.fabricIdentityId || '').trim() !== fabricId) return null;\n } else if (p.masterXpub && masterXpub && String(p.masterXpub).trim() !== masterXpub) {\n return null;\n }\n return spendX;\n } catch (_) {\n return null;\n }\n}\nfunction saveSpendXpubWatchForIdentity() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var wallet = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var fabricId = identity && identity.id ? String(identity.id).trim() : '';\n var masterXpub = fabricBitcoinWatchMasterXpub(identity);\n var spendAccountXpub = wallet && wallet.xpub ? String(wallet.xpub).trim() : '';\n if (!spendAccountXpub || !fabricIdentityHasUnlockedSigningForBitcoin(identity)) return;\n try {\n if (typeof window === 'undefined') return;\n writeStorageJSON(SPEND_XPUB_WATCH_KEY, {\n fabricIdentityId: fabricId || null,\n masterXpub: masterXpub || null,\n spendAccountXpub: spendAccountXpub,\n walletId: wallet.walletId ? String(wallet.walletId) : null\n });\n } catch (_) {}\n}\nfunction clearSpendXpubWatch() {\n try {\n if (typeof window !== 'undefined') removeStorageKey(SPEND_XPUB_WATCH_KEY);\n } catch (_) {}\n}\nfunction emitBitcoinWalletBranchChangedFromSession(detailRole) {\n try {\n if (typeof window === 'undefined' || !window.dispatchEvent) return;\n var r = detailRole === 'receive' || detailRole === 'send' || detailRole === 'both' ? detailRole : 'both';\n window.dispatchEvent(new CustomEvent(BITCOIN_WALLET_BRANCH_CHANGED, {\n detail: {\n role: r,\n receive: loadSessionBip44Account({\n role: 'receive'\n }),\n send: loadSessionBip44Account({\n role: 'send'\n })\n }\n }));\n } catch (_) {}\n}\nfunction migrateLegacyBip44IfNeeded() {\n try {\n if (typeof window === 'undefined' || !window.sessionStorage) return;\n var legacy = window.sessionStorage.getItem(SESSION_BIP44_ACCOUNT_KEY);\n if (legacy == null || legacy === '') return;\n if (!window.sessionStorage.getItem(SESSION_BIP44_SEND_KEY)) {\n window.sessionStorage.setItem(SESSION_BIP44_SEND_KEY, legacy);\n }\n if (!window.sessionStorage.getItem(SESSION_BIP44_RECEIVE_KEY)) {\n window.sessionStorage.setItem(SESSION_BIP44_RECEIVE_KEY, legacy);\n }\n window.sessionStorage.removeItem(SESSION_BIP44_ACCOUNT_KEY);\n } catch (_) {}\n}\nfunction normalizeBaseUrl(value) {\n var raw = String(value || '').trim();\n if (!raw) return '';\n return raw.replace(/\\/+$/, '');\n}\n\n/**\n * Reject cross-origin absolute URLs for in-app Hub API fetches (Lightning channel create, etc.).\n * Explorer and third-party block explorer URLs are handled in separate code paths.\n */\nfunction assertHubRelativeOrSameOriginRequestUrl(url) {\n var s = String(url || '');\n if (!s) throw new Error('URL required');\n if (s.startsWith('//')) throw new Error('Refusing protocol-relative URL');\n if (!/^https?:\\/\\//i.test(s)) return s;\n if (typeof window === 'undefined' || !window.location) return s;\n var p = new URL(s, window.location.href);\n if (p.origin !== window.location.origin) {\n throw new Error('This request must be same-origin or a relative path');\n }\n return s;\n}\nfunction loadUpstreamSettings() {\n var defaults = {\n explorerBaseUrl: '/services/bitcoin',\n paymentsBaseUrl: '/payments',\n lightningBaseUrl: '/services/lightning',\n payjoinBaseUrl: '/services/payjoin',\n apiToken: ''\n };\n try {\n if (typeof window === 'undefined') return defaults;\n var parsed = readStorageJSON(SETTINGS_KEY, null);\n if (!parsed || _typeof(parsed) !== 'object') return defaults;\n return {\n explorerBaseUrl: normalizeBaseUrl(parsed && parsed.explorerBaseUrl) || defaults.explorerBaseUrl,\n paymentsBaseUrl: normalizePaymentsBaseUrl(parsed && parsed.paymentsBaseUrl),\n lightningBaseUrl: normalizeLightningBaseUrl(parsed && parsed.lightningBaseUrl),\n payjoinBaseUrl: normalizePayjoinBaseUrl(parsed && parsed.payjoinBaseUrl),\n apiToken: String(parsed && parsed.apiToken ? parsed.apiToken : '')\n };\n } catch (e) {\n return defaults;\n }\n}\n\n/**\n * Defaults: Payjoin-oriented flows on (operator deposit, payments receive/send guidance).\n * Persisted in localStorage for the browser session / device.\n */\nfunction defaultPayjoinPreferences() {\n return {\n operatorDeposit: true,\n paymentsReceive: true,\n paymentsSend: true,\n /** Default Payjoin deposit address: Hub-built P2TR (operator + beacon federation reserve leaves). BIP77 unchanged. */\n receiveTaprootJoinmarket: true\n };\n}\nfunction loadPayjoinPreferences() {\n var d = defaultPayjoinPreferences();\n try {\n if (typeof window === 'undefined') return _objectSpread({}, d);\n var p = readStorageJSON(PAYJOIN_PREFS_KEY, null);\n if (!p) return _objectSpread({}, d);\n if (!p || _typeof(p) !== 'object') return _objectSpread({}, d);\n return _objectSpread(_objectSpread({}, d), p);\n } catch (e) {\n return _objectSpread({}, d);\n }\n}\nfunction savePayjoinPreferences() {\n var patch = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var next = Object.assign(loadPayjoinPreferences(), patch);\n try {\n if (typeof window !== 'undefined') {\n writeStorageJSON(PAYJOIN_PREFS_KEY, next);\n }\n } catch (e) {}\n return next;\n}\nfunction saveUpstreamSettings() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var next = {\n explorerBaseUrl: normalizeBaseUrl(settings.explorerBaseUrl),\n paymentsBaseUrl: normalizePaymentsBaseUrl(settings.paymentsBaseUrl),\n lightningBaseUrl: normalizeLightningBaseUrl(settings.lightningBaseUrl),\n payjoinBaseUrl: normalizePayjoinBaseUrl(settings.payjoinBaseUrl),\n apiToken: String(settings.apiToken || '')\n };\n try {\n if (typeof window !== 'undefined') {\n writeStorageJSON(SETTINGS_KEY, next);\n }\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function') {\n try {\n window.dispatchEvent(new CustomEvent('fabricBitcoinUpstreamChanged', {\n detail: next\n }));\n } catch (_) {}\n }\n } catch (e) {}\n return next;\n}\n\n/**\n * Derive wallet ID from xpub using the same formula as Fabric Bitcoin service (walletName).\n * Ensures client walletId matches the Hub's internal wallet name when identities align.\n * @param {string} xpub - BIP32 extended public key\n * @returns {string} 64-char hex (SHA256(SHA256(xpub)))\n */\nfunction deriveWalletIdFromXpub() {\n var xpub = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var raw = String(xpub || '').trim();\n if (!raw) return '';\n var preimage = crypto.createHash('sha256').update(raw).digest('hex');\n return crypto.createHash('sha256').update(preimage).digest('hex');\n}\n\n/** Hub/client wallet id for the Fabric identity master xpub (before per-account derivation). */\nfunction identityRootWalletId() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var xpub = identity && identity.xpub ? String(identity.xpub).trim() : '';\n if (!xpub) return '';\n return deriveWalletIdFromXpub(xpub);\n}\nfunction receiveAccountTagFromContext() {\n var wallet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var n = wallet.bitcoinBip44Account;\n if (n == null || n === '') return 'master';\n var idx = Number(n);\n if (!Number.isFinite(idx)) return 'master';\n return String(Math.floor(idx));\n}\n\n/**\n * localStorage bucket for the receive-address chain: one identity, one BIP44 account’s external 0/* pool.\n * Keys by identity root so switching “next receive” account does not orphan prior indices.\n */\nfunction receiveAddressPoolStorageKey(identity) {\n var wallet = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var legacyKey = String(wallet.walletId || wallet.id || '').trim();\n var root = identityRootWalletId(identity);\n if (!root || !legacyKey) return {\n poolKey: legacyKey,\n legacyKey: legacyKey\n };\n var tag = receiveAccountTagFromContext(wallet);\n return {\n poolKey: \"\".concat(root, \"|recv|\").concat(tag),\n legacyKey: legacyKey\n };\n}\nfunction _bip44IndexFromStoredString(raw) {\n if (raw == null || !String(raw).trim()) return null;\n var s = String(raw).trim().toLowerCase();\n if (s === 'master' || s === 'legacy') return null;\n var n = parseInt(raw, 10);\n if (!Number.isFinite(n) || n < 0 || n > 0x7fffffff) return null;\n return n;\n}\n\n/**\n * Read persisted default BIP44 branch from localStorage (Settings). Does not consider sessionStorage.\n * @param {'receive'|'send'} role\n * @returns {string|null} 'master', '0'…'3', or null if unset (same as master for derivation)\n */\nfunction loadPersistedDefaultBip44Raw(role) {\n try {\n if (typeof window === 'undefined') return null;\n var key = role === 'receive' ? LOCAL_BIP44_RECEIVE_DEFAULT_KEY : LOCAL_BIP44_SEND_DEFAULT_KEY;\n var v = readStorageString(key);\n if (v == null || !String(v).trim()) return null;\n return String(v).trim();\n } catch (_) {\n return null;\n }\n}\n\n/**\n * @param {'receive'|'send'} role\n * @returns {number|null} null = master xpub; else BIP44 account index\n */\nfunction _effectiveDefaultBip44Index(role) {\n return _bip44IndexFromStoredString(loadPersistedDefaultBip44Raw(role));\n}\n\n/**\n * Save default receive/send BIP44 branch (Settings). value: 'master', 0–3, or null to clear.\n * @param {'receive'|'send'} role\n */\nfunction savePersistedDefaultBip44Account(role, value) {\n var key = role === 'receive' ? LOCAL_BIP44_RECEIVE_DEFAULT_KEY : LOCAL_BIP44_SEND_DEFAULT_KEY;\n try {\n migrateLegacyBip44IfNeeded();\n if (typeof window === 'undefined') return false;\n if (value === null || value === undefined || value === '') {\n removeStorageKey(key);\n } else {\n var s = typeof value === 'string' ? value.trim().toLowerCase() : value;\n if (s === 'master' || s === 'legacy') {\n writeStorageString(key, 'master');\n } else {\n var n = Number(value);\n if (!Number.isFinite(n) || n < 0) removeStorageKey(key);else writeStorageString(key, String(Math.floor(n)));\n }\n }\n } catch (_) {\n return false;\n }\n emitBitcoinWalletBranchChangedFromSession('both');\n return true;\n}\n\n/**\n * True if this tab has an explicit sessionStorage override (URL query or legacy picker).\n * @param {'receive'|'send'} role\n */\nfunction hasBip44SessionOverride(role) {\n try {\n migrateLegacyBip44IfNeeded();\n if (typeof window === 'undefined' || !window.sessionStorage) return false;\n var k = role === 'receive' ? SESSION_BIP44_RECEIVE_KEY : SESSION_BIP44_SEND_KEY;\n var raw = window.sessionStorage.getItem(k);\n return raw != null && String(raw).trim() !== '';\n } catch (_) {\n return false;\n }\n}\n\n/**\n * Effective BIP44 account after session override and Settings defaults.\n * @param {'receive'|'send'} role\n * @returns {number|null} null = Fabric master xpub; 0+ = m/44'/0'/n'\n */\nfunction loadSessionBip44Account() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var role = opts && opts.role === 'receive' ? 'receive' : 'send';\n try {\n migrateLegacyBip44IfNeeded();\n if (typeof window === 'undefined' || !window.sessionStorage) {\n return _effectiveDefaultBip44Index(role);\n }\n var key = role === 'receive' ? SESSION_BIP44_RECEIVE_KEY : SESSION_BIP44_SEND_KEY;\n var raw = window.sessionStorage.getItem(key);\n if (raw == null || !String(raw).trim()) {\n return _effectiveDefaultBip44Index(role);\n }\n var s = String(raw).trim().toLowerCase();\n if (s === 'master' || s === 'legacy') return null;\n var n = parseInt(raw, 10);\n if (!Number.isFinite(n) || n < 0 || n > 0x7fffffff) {\n return _effectiveDefaultBip44Index(role);\n }\n return n;\n } catch (e) {\n return _effectiveDefaultBip44Index(role);\n }\n}\n\n/**\n * Per-tab sessionStorage override. Pass null to remove override (use Settings default).\n * Pass 'master' to force master xpub for this tab even when Settings default is an account.\n * @param {number|string|null|undefined} value - account index, 'master', or null/'' to clear override\n * @param {{ role?: 'receive'|'send' }} [opts] - default role send (Payments / Bitcoin home).\n */\nfunction saveSessionBip44Account(value) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var role = opts && opts.role === 'receive' ? 'receive' : 'send';\n var key = role === 'receive' ? SESSION_BIP44_RECEIVE_KEY : SESSION_BIP44_SEND_KEY;\n try {\n migrateLegacyBip44IfNeeded();\n if (typeof window !== 'undefined' && window.sessionStorage) {\n if (value === null || value === undefined || value === '') {\n window.sessionStorage.removeItem(key);\n } else if (typeof value === 'string' && String(value).trim().toLowerCase() === 'master') {\n window.sessionStorage.setItem(key, 'master');\n } else if (typeof value === 'string' && String(value).trim().toLowerCase() === 'legacy') {\n window.sessionStorage.setItem(key, 'master');\n } else {\n var n = Number(value);\n if (!Number.isFinite(n) || n < 0) {\n window.sessionStorage.removeItem(key);\n } else {\n window.sessionStorage.setItem(key, String(Math.floor(n)));\n }\n }\n }\n } catch (e) {}\n emitBitcoinWalletBranchChangedFromSession(role);\n}\n\n/**\n * Derive extended keys at m/44'/0'/accountIndex' from the Fabric identity master (matches @fabric/core Key Bitcoin path shape).\n * @param {string} masterXprv\n * @param {string} masterXpub - used to pick test/main network for bip32 decode\n * @param {number} accountIndex\n */\nfunction deriveFabricBitcoinAccountKeys(masterXprv, masterXpub, accountIndex) {\n var idx = Math.floor(Number(accountIndex));\n if (!Number.isFinite(idx) || idx < 0) throw new Error('Invalid BIP44 account index.');\n var decodeNetwork = getNetworkFromXpub(masterXpub || masterXprv);\n var bip32 = new BIP32(ecc);\n var master = bip32.fromBase58(String(masterXprv).trim(), decodeNetwork);\n var path = \"m/44'/0'/\".concat(idx, \"'\");\n var acct = master.derivePath(path);\n return {\n xprv: acct.toBase58(),\n xpub: acct.neutered().toBase58(),\n path: path\n };\n}\n\n/**\n * Fabric master key for Bitcoin BIP44 (m/44'/0'/n') is always the HD root (master xpriv).\n * When {@link fabricIdentityMode} is `account`, {@link masterXprv} holds that root; {@link xprv} is the\n * Fabric-protocol signing key at m/44'/7778'/… and must not be used for Bitcoin derivation.\n */\nfunction bitcoinDerivationSecretsFromFabricIdentity() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (identity && identity.fabricIdentityMode === 'account' && typeof identity.masterXprv === 'string' && identity.masterXprv.trim()) {\n return {\n xprvForBitcoin: String(identity.masterXprv).trim(),\n xpubHint: identity.masterXpub ? String(identity.masterXpub).trim() : ''\n };\n }\n return {\n xprvForBitcoin: identity && identity.xprv ? String(identity.xprv).trim() : '',\n xpubHint: identity && identity.xpub ? String(identity.xpub).trim() : ''\n };\n}\nfunction fabricIdentityHasUnlockedSigningForBitcoin() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (identity && identity.fabricIdentityMode === 'account') {\n return !!String(identity.masterXprv || '').trim();\n }\n return !!String(identity && identity.xprv || '').trim();\n}\n\n/**\n * Wallet context for Hub Bitcoin APIs (walletId, xpub, …).\n * One browser wallet (one identity): {@link getSpendWalletContext} / {@link getNextReceiveWalletContext} always use\n * {@link BITCOIN_PAYMENTS_BIP44_ACCOUNT_INDEX} under the master. Callers may pass `fixedBitcoinBip44Account` to override;\n * otherwise session + Settings defaults apply (legacy / advanced use).\n * @param {object} identity - Fabric identity (master xpub / xprv on the identity object)\n * @param {{ role?: 'receive'|'send', fixedBitcoinBip44Account?: number }} [opts] - role affects legacy session lookup only when fixed index omitted.\n * For Hub browser payments, {@link getSpendWalletContext} passes {@link getBitcoinBip44AccountForIdentity}(identity) so it tracks Fabric account index when enabled.\n */\nfunction getWalletContextFromIdentity() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var masterMat = bitcoinDerivationSecretsFromFabricIdentity(identity);\n var xpub = masterMat.xpubHint;\n var xprv = masterMat.xprvForBitcoin;\n var id = identity && identity.id ? String(identity.id) : '';\n var address = identity && identity.address ? String(identity.address) : '';\n var role = opts && opts.role === 'receive' ? 'receive' : 'send';\n var fixed = opts && opts.fixedBitcoinBip44Account;\n var accountN = fixed != null && Number.isFinite(Number(fixed)) && Number(fixed) >= 0 ? Math.floor(Number(fixed)) : loadSessionBip44Account({\n role: role\n });\n if (accountN != null && xprv) {\n try {\n var d = deriveFabricBitcoinAccountKeys(xprv, xpub, accountN);\n xpub = d.xpub;\n xprv = d.xprv;\n } catch (e) {\n if (typeof console !== 'undefined' && console.warn) {\n console.warn('[bitcoinClient] BIP44 tab account derive failed; using master key.', safeIdentityErr(e));\n }\n }\n }\n if (!fabricIdentityHasUnlockedSigningForBitcoin(identity)) {\n var watchedSpend = loadSpendXpubWatchForIdentity(identity);\n if (watchedSpend) {\n xpub = watchedSpend;\n xprv = '';\n } else if (identity && identity.passwordProtected) {\n // Locked Fabric identity: payment account xpub is not derivable from the stored master xpub alone.\n // Avoid querying the wrong descriptor set until an unlock persists saveSpendXpubWatchForIdentity().\n xpub = '';\n xprv = '';\n }\n }\n\n // Use Fabric ID that matches internal wallet name: SHA256(SHA256(xpub)) when xpub present\n var walletId = xpub ? deriveWalletIdFromXpub(xpub) : (address && /^[a-fA-F0-9]{64}$/.test(address) ? address : null) || (id && /^[a-fA-F0-9]{64}$/.test(id) ? id : null) || function () {\n var basis = id || 'anonymous';\n var fingerprint = crypto.createHash('sha256').update(basis).digest('hex').slice(0, 16);\n return \"fabric-\".concat(fingerprint);\n }();\n var fingerprint = crypto.createHash('sha256').update(xpub || id || 'anonymous').digest('hex').slice(0, 16);\n\n /**\n * BIP84-style descriptors for the identity's receive and change chains.\n * Used by the address API (scantxoutset) to retrieve per-user balance when txindex is available.\n * Format: wpkh(xpub/0/*) receive, wpkh(xpub/1/*) change.\n */\n var descriptors = xpub ? [{\n desc: \"wpkh(\".concat(xpub, \"/0/*)\"),\n chain: 'receive',\n path: 'm/0/*'\n }, {\n desc: \"wpkh(\".concat(xpub, \"/1/*)\"),\n chain: 'change',\n path: 'm/1/*'\n }] : [];\n var hasPrivateKey = !!String(xprv || '').trim();\n var out = {\n walletId: walletId,\n fingerprint: fingerprint,\n xpub: xpub,\n hasPrivateKey: hasPrivateKey,\n descriptors: descriptors,\n bitcoinBip44Account: accountN\n };\n if (String(xprv || '').trim()) out.xprv = String(xprv).trim();\n return out;\n}\n\n/** One browser wallet: xpub/walletId for balance, UTXOs, spends, change chain (BIP44 account from Fabric account index when in account mode). */\nfunction getSpendWalletContext() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return getWalletContextFromIdentity(identity, {\n role: 'send',\n fixedBitcoinBip44Account: getBitcoinBip44AccountForIdentity(identity)\n });\n}\n\n/** Same account as spends; xpub/walletId for the next external receive address (invoices, deposits). */\nfunction getNextReceiveWalletContext() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return getWalletContextFromIdentity(identity, {\n role: 'receive',\n fixedBitcoinBip44Account: getBitcoinBip44AccountForIdentity(identity)\n });\n}\nfunction getNetworkFromXpub() {\n var xpub = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var raw = String(xpub || '').trim();\n var isTest = raw.startsWith('tpub') || raw.startsWith('upub') || raw.startsWith('vpub');\n return isTest ? {\n bech32: 'tb',\n bip32: {\n \"public\": 0x043587cf,\n \"private\": 0x04358394\n },\n pubKeyHash: 0x6f,\n scriptHash: 0xc4,\n wif: 0xef\n } : {\n bech32: 'bc',\n bip32: {\n \"public\": 0x0488b21e,\n \"private\": 0x0488ade4\n },\n pubKeyHash: 0x00,\n scriptHash: 0x05,\n wif: 0x80\n };\n}\n\n/** Network config for bitcoinjs-lib by name; use when Hub is regtest so addresses are bcrt1. */\nfunction getNetworkForBitcoinJs() {\n var networkName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var n = String(networkName || '').toLowerCase();\n if (n === 'regtest') {\n return {\n bech32: 'bcrt',\n bip32: {\n \"public\": 0x043587cf,\n \"private\": 0x04358394\n },\n pubKeyHash: 0x6f,\n scriptHash: 0xc4,\n wif: 0xef\n };\n }\n if (n === 'testnet' || n === 'signet') {\n return {\n bech32: 'tb',\n bip32: {\n \"public\": 0x043587cf,\n \"private\": 0x04358394\n },\n pubKeyHash: 0x6f,\n scriptHash: 0xc4,\n wif: 0xef\n };\n }\n if (n === 'mainnet' || n === 'main') {\n return {\n bech32: 'bc',\n bip32: {\n \"public\": 0x0488b21e,\n \"private\": 0x0488ade4\n },\n pubKeyHash: 0x00,\n scriptHash: 0x05,\n wif: 0x80\n };\n }\n return null;\n}\nfunction loadBalanceCache() {\n try {\n if (typeof window === 'undefined') return {};\n var parsed = readStorageJSON(BALANCE_CACHE_KEY, {});\n if (!parsed || _typeof(parsed) !== 'object' || Array.isArray(parsed)) return {};\n return parsed;\n } catch (e) {\n return {};\n }\n}\nfunction saveBalanceCache() {\n var store = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n try {\n if (typeof window !== 'undefined') {\n writeStorageJSON(BALANCE_CACHE_KEY, store || {});\n }\n } catch (e) {}\n}\n\n/**\n * Get cached balance for a wallet. Returns null if no cache or cache is stale.\n * @param {string} walletId - Wallet ID (derived from xpub)\n * @param {number} [maxAgeMs] - Max age in ms; if cache is older, returns null\n * @returns {{ balanceSats: number, confirmedSats: number, unconfirmedSats: number, fetchedAt: number }|null}\n */\nfunction getCachedBalance() {\n var walletId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var maxAgeMs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : BALANCE_CACHE_MAX_AGE_MS;\n var id = String(walletId || '').trim();\n if (!id) return null;\n if (maxAgeMs === 0) return null; // bypass cache when explicitly requested\n var store = loadBalanceCache();\n var entry = store[id];\n if (!entry || _typeof(entry) !== 'object') return null;\n var fetchedAt = Number(entry.fetchedAt || 0);\n if (fetchedAt <= 0 || maxAgeMs > 0 && Date.now() - fetchedAt > maxAgeMs) return null;\n return {\n balanceSats: Number(entry.balanceSats || 0),\n confirmedSats: Number(entry.confirmedSats || entry.balanceSats || 0),\n unconfirmedSats: Number(entry.unconfirmedSats || 0),\n fetchedAt: fetchedAt\n };\n}\n\n/**\n * Save balance to cache. Only stores non-sensitive data (no keys).\n */\nfunction setCachedBalance() {\n var _ref, _data$balanceSats, _ref2, _ref3, _data$confirmedSats, _data$unconfirmedSats;\n var walletId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var id = String(walletId || '').trim();\n if (!id) return;\n var store = loadBalanceCache();\n store[id] = {\n balanceSats: Number((_ref = (_data$balanceSats = data.balanceSats) !== null && _data$balanceSats !== void 0 ? _data$balanceSats : data.balance) !== null && _ref !== void 0 ? _ref : 0),\n confirmedSats: Number((_ref2 = (_ref3 = (_data$confirmedSats = data.confirmedSats) !== null && _data$confirmedSats !== void 0 ? _data$confirmedSats : data.balanceSats) !== null && _ref3 !== void 0 ? _ref3 : data.balance) !== null && _ref2 !== void 0 ? _ref2 : 0),\n unconfirmedSats: Number((_data$unconfirmedSats = data.unconfirmedSats) !== null && _data$unconfirmedSats !== void 0 ? _data$unconfirmedSats : 0),\n fetchedAt: Date.now()\n };\n saveBalanceCache(store);\n}\n\n/**\n * Clear balance cache for a wallet. Call after faucet or block generation so the next\n * fetch returns fresh data instead of stale 0.\n */\nfunction clearBalanceCache() {\n var walletId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var id = String(walletId || '').trim();\n if (!id) return;\n var store = loadBalanceCache();\n delete store[id];\n saveBalanceCache(store);\n}\nfunction loadLocalWalletStore() {\n try {\n if (typeof window === 'undefined') return {};\n var parsed = readStorageJSON(LOCAL_WALLET_KEY, {});\n if (!parsed || _typeof(parsed) !== 'object' || Array.isArray(parsed)) return {};\n return parsed;\n } catch (e) {\n return {};\n }\n}\nfunction saveLocalWalletStore() {\n var store = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n try {\n if (typeof window !== 'undefined') {\n writeStorageJSON(LOCAL_WALLET_KEY, store || {});\n }\n } catch (e) {}\n}\n\n/**\n * Derive receive address from xpub at index.\n * @param {string} xpub - Extended public key\n * @param {number} index - Address index\n * @param {string} [networkName] - Hub network ('regtest', 'testnet', 'mainnet') so address uses bcrt1/tb1/bc1; omit to infer from xpub\n */\nfunction deriveReceiveAddressFromXpub() {\n var xpub = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var networkName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n if (!xpub) return null;\n var bip32 = new BIP32(ecc);\n var decodeNetwork = getNetworkFromXpub(xpub);\n var account = bip32.fromBase58(String(xpub), decodeNetwork);\n var child = account.derive(0).derive(Number(index || 0));\n var pubkey = child.publicKey;\n var addressNetwork = networkName && getNetworkForBitcoinJs(networkName) || decodeNetwork;\n var payment = payments.p2wpkh({\n pubkey: pubkey,\n network: addressNetwork\n });\n if (!payment || !payment.address) return null;\n return {\n address: String(payment.address),\n derivationPath: \"m/0/\".concat(Number(index || 0)),\n index: Number(index || 0),\n type: 'p2wpkh'\n };\n}\n\n/**\n * Derive address from xpub at chain/index. Chain 0 = receive, 1 = change.\n */\nfunction deriveAddressFromXpub() {\n var xpub = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var chain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var networkName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n if (!xpub) return null;\n var bip32 = new BIP32(ecc);\n var decodeNetwork = getNetworkFromXpub(xpub);\n var account = bip32.fromBase58(String(xpub), decodeNetwork);\n var child = account.derive(Number(chain)).derive(Number(index));\n var pubkey = child.publicKey;\n var addressNetwork = networkName && getNetworkForBitcoinJs(networkName) || decodeNetwork;\n var payment = payments.p2wpkh({\n pubkey: pubkey,\n network: addressNetwork\n });\n if (!payment || !payment.address) return null;\n return payment.address;\n}\n\n/**\n * Derive watch addresses for mempool scan. Returns addresses for receive (0/*) and change (1/*).\n * Used to detect unconfirmed incoming payments.\n */\nfunction deriveWatchAddresses() {\n var wallet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var networkName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var maxReceive = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 25;\n var maxChange = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 25;\n var xpub = String(wallet.xpub || '').trim();\n if (!xpub) return [];\n var addrs = [];\n for (var i = 0; i < maxReceive; i++) {\n var a = deriveAddressFromXpub(xpub, 0, i, networkName);\n if (a) addrs.push(a);\n }\n for (var _i = 0; _i < maxChange; _i++) {\n var _a = deriveAddressFromXpub(xpub, 1, _i, networkName);\n if (_a) addrs.push(_a);\n }\n return addrs;\n}\nfunction deriveAndStoreReceiveAddress() {\n var wallet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var identity = options && options.identity;\n var networkName = options && options.network;\n var xpub = String(wallet.xpub || '').trim();\n var legacyKey = String(wallet.walletId || wallet.id || '').trim();\n if (!legacyKey || !xpub) return null;\n var storageKey = legacyKey;\n if (identity && _typeof(identity) === 'object' && identity.xpub) {\n var _receiveAddressPoolSt = receiveAddressPoolStorageKey(identity, wallet),\n poolKey = _receiveAddressPoolSt.poolKey;\n if (poolKey) storageKey = poolKey;\n }\n var store = loadLocalWalletStore();\n var current = store[storageKey] && _typeof(store[storageKey]) === 'object' ? store[storageKey] : {};\n var migratedFromLegacy = false;\n if ((!Array.isArray(current.receiveAddresses) || current.receiveAddresses.length === 0) && storageKey !== legacyKey && store[legacyKey] && _typeof(store[legacyKey]) === 'object') {\n var leg = store[legacyKey];\n if (Array.isArray(leg.receiveAddresses) && leg.receiveAddresses.length > 0) {\n current = _objectSpread(_objectSpread({}, leg), {}, {\n xpub: xpub\n });\n migratedFromLegacy = true;\n }\n }\n var addresses = Array.isArray(current.receiveAddresses) ? current.receiveAddresses : [];\n if (migratedFromLegacy && addresses.length > 0 && storageKey !== legacyKey) {\n store[storageKey] = _objectSpread(_objectSpread({}, current), {}, {\n id: legacyKey,\n xpub: xpub,\n updatedAt: new Date().toISOString()\n });\n saveLocalWalletStore(store);\n }\n if (addresses.length > 0) {\n var _latest$index;\n var latest = addresses[addresses.length - 1];\n var idx = Number((_latest$index = latest.index) !== null && _latest$index !== void 0 ? _latest$index : 0);\n var _derived = deriveReceiveAddressFromXpub(xpub, idx, networkName);\n var currentAddress = _derived ? _derived.address : latest.address || '';\n return {\n id: legacyKey,\n currentAddress: currentAddress,\n currentIndex: idx,\n receiveAddresses: addresses\n };\n }\n var derived = deriveReceiveAddressFromXpub(xpub, 0, networkName);\n if (!derived) return null;\n var nextWallet = {\n id: legacyKey,\n xpub: xpub,\n currentIndex: derived.index,\n currentAddress: derived.address,\n receiveAddresses: [derived],\n updatedAt: new Date().toISOString()\n };\n store[storageKey] = nextWallet;\n saveLocalWalletStore(store);\n return nextWallet;\n}\nfunction reserveNextReceiveAddress() {\n var wallet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var identity = options && options.identity;\n var networkName = options && options.network;\n var xpub = String(wallet.xpub || '').trim();\n var legacyKey = String(wallet.walletId || wallet.id || '').trim();\n if (!legacyKey || !xpub) return null;\n var storageKey = legacyKey;\n if (identity && _typeof(identity) === 'object' && identity.xpub) {\n var _receiveAddressPoolSt2 = receiveAddressPoolStorageKey(identity, wallet),\n poolKey = _receiveAddressPoolSt2.poolKey;\n if (poolKey) storageKey = poolKey;\n }\n var store = loadLocalWalletStore();\n var current = store[storageKey] && _typeof(store[storageKey]) === 'object' ? store[storageKey] : {\n id: legacyKey,\n xpub: xpub,\n currentIndex: -1,\n receiveAddresses: []\n };\n if ((!Array.isArray(current.receiveAddresses) || current.receiveAddresses.length === 0) && storageKey !== legacyKey && store[legacyKey] && _typeof(store[legacyKey]) === 'object') {\n var leg = store[legacyKey];\n if (Array.isArray(leg.receiveAddresses) && leg.receiveAddresses.length > 0) {\n current = _objectSpread(_objectSpread({}, leg), {}, {\n xpub: xpub\n });\n }\n }\n var prevAddrs = Array.isArray(current.receiveAddresses) ? current.receiveAddresses : [];\n var nextIndex = Number(current.currentIndex !== undefined && current.currentIndex !== null ? current.currentIndex : -1) + 1;\n var derived = deriveReceiveAddressFromXpub(xpub, nextIndex, networkName);\n if (!derived) return null;\n var nextWallet = _objectSpread(_objectSpread({}, current), {}, {\n id: legacyKey,\n xpub: xpub,\n currentIndex: nextIndex,\n currentAddress: derived.address,\n receiveAddresses: [].concat(_toConsumableArray(prevAddrs), [derived]),\n updatedAt: new Date().toISOString()\n });\n store[storageKey] = nextWallet;\n saveLocalWalletStore(store);\n return nextWallet;\n}\nfunction makeHeaders() {\n var apiToken = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var method = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'GET';\n var headers = {\n Accept: 'application/json'\n };\n if (method !== 'GET') headers['Content-Type'] = 'application/json';\n if (apiToken) headers.Authorization = \"Bearer \".concat(apiToken);\n return headers;\n}\nfunction requestJSON(_x) {\n return _requestJSON.apply(this, arguments);\n}\nfunction _requestJSON() {\n _requestJSON = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(url) {\n var options,\n method,\n body,\n headers,\n response,\n text,\n msg,\n errJson,\n _args = arguments;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};\n method = options.method || 'GET';\n body = options.body ? JSON.stringify(options.body) : undefined;\n headers = makeHeaders(options.apiToken, method);\n _context.n = 1;\n return fetch(url, {\n method: method,\n headers: headers,\n body: body\n });\n case 1:\n response = _context.v;\n if (response.ok) {\n _context.n = 3;\n break;\n }\n _context.n = 2;\n return response.text()[\"catch\"](function () {\n return '';\n });\n case 2:\n text = _context.v;\n msg = \"\".concat(response.status, \" \").concat(response.statusText);\n try {\n errJson = JSON.parse(text);\n if (errJson && (errJson.message || errJson.error)) {\n msg = errJson.message || errJson.error;\n if (errJson.detail) msg += ': ' + String(errJson.detail);\n } else if (text) msg += ': ' + text.slice(0, 200);\n } catch (_) {\n if (text) msg += ': ' + text.slice(0, 200);\n }\n throw new Error(msg);\n case 3:\n return _context.a(2, response.json());\n }\n }, _callee);\n }));\n return _requestJSON.apply(this, arguments);\n}\nfunction pickArray(payload) {\n var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n if (Array.isArray(payload)) return payload;\n if (!payload || _typeof(payload) !== 'object') return [];\n var _iterator = _createForOfIteratorHelper(keys),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var key = _step.value;\n if (Array.isArray(payload[key])) return payload[key];\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return [];\n}\nfunction pickObject(payload) {\n var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n if (payload && _typeof(payload) === 'object' && !Array.isArray(payload)) {\n var _iterator2 = _createForOfIteratorHelper(keys),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var key = _step2.value;\n var v = payload[key];\n if (v && _typeof(v) === 'object' && !Array.isArray(v)) return v;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n return payload;\n }\n return {};\n}\nfunction tryRequests(_x2) {\n return _tryRequests.apply(this, arguments);\n}\nfunction _tryRequests() {\n _tryRequests = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(baseUrl) {\n var requests,\n apiToken,\n lastError,\n _iterator3,\n _step3,\n _req$path,\n req,\n method,\n path,\n root,\n url,\n data,\n _args2 = arguments,\n _t,\n _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n requests = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : [];\n apiToken = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : '';\n if (baseUrl) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2, null);\n case 1:\n lastError = null;\n _iterator3 = _createForOfIteratorHelper(requests);\n _context2.p = 2;\n _iterator3.s();\n case 3:\n if ((_step3 = _iterator3.n()).done) {\n _context2.n = 8;\n break;\n }\n req = _step3.value;\n method = req.method || 'GET';\n path = (_req$path = req.path) !== null && _req$path !== void 0 ? _req$path : '';\n root = baseUrl.replace(/\\/+$/, '');\n url = root;\n if (path) {\n if (path.startsWith('?')) url = \"\".concat(root).concat(path);else url = \"\".concat(root).concat(path.startsWith('/') ? path : '/' + path);\n }\n _context2.p = 4;\n _context2.n = 5;\n return requestJSON(url, {\n method: method,\n body: req.body,\n apiToken: apiToken\n });\n case 5:\n data = _context2.v;\n return _context2.a(2, {\n data: data,\n path: path,\n method: method\n });\n case 6:\n _context2.p = 6;\n _t = _context2.v;\n lastError = _t;\n case 7:\n _context2.n = 3;\n break;\n case 8:\n _context2.n = 10;\n break;\n case 9:\n _context2.p = 9;\n _t2 = _context2.v;\n _iterator3.e(_t2);\n case 10:\n _context2.p = 10;\n _iterator3.f();\n return _context2.f(10);\n case 11:\n if (!lastError) {\n _context2.n = 12;\n break;\n }\n throw lastError;\n case 12:\n return _context2.a(2, null);\n }\n }, _callee2, null, [[4, 6], [2, 9, 10, 11]]);\n }));\n return _tryRequests.apply(this, arguments);\n}\nfunction resolveBaseUrl(value) {\n var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '/services/bitcoin';\n var normalized = normalizeBaseUrl(value);\n return normalized || normalizeBaseUrl(fallback);\n}\nfunction normalizeWalletsBaseUrl(value) {\n var normalized = normalizeBaseUrl(value);\n if (!normalized) return '/services/bitcoin/wallets';\n if (normalized === '/payments') return '/services/bitcoin/wallets';\n if (/\\/services\\/bitcoin$/i.test(normalized)) return \"\".concat(normalized, \"/wallets\");\n if (/\\/services\\/bitcoin\\/payments$/i.test(normalized)) return normalized.replace(/\\/payments$/i, '/wallets');\n if (/\\/wallet$/i.test(normalized)) return normalized.replace(/\\/wallet$/i, '/wallets');\n return normalized;\n}\n\n/** Canonical watch-only xpub HTTP API (`GET …/xpub`, `/xpub/utxos`, `/xpub/transactions`). */\nfunction normalizeXpubWatchBaseUrl(value) {\n var normalized = normalizeBaseUrl(value);\n if (!normalized) return '/services/bitcoin/xpub';\n if (normalized === '/payments') return '/services/bitcoin/xpub';\n if (/\\/services\\/bitcoin$/i.test(normalized)) return \"\".concat(normalized, \"/xpub\");\n if (/\\/services\\/bitcoin\\/wallets$/i.test(normalized)) return normalized.replace(/\\/wallets$/i, '/xpub');\n if (/\\/services\\/bitcoin\\/payments$/i.test(normalized)) return normalized.replace(/\\/payments$/i, '/xpub');\n if (/\\/wallet$/i.test(normalized)) return normalized.replace(/\\/wallet$/i, '/xpub');\n return normalized;\n}\nfunction normalizePaymentsBaseUrl(value) {\n var normalized = normalizeBaseUrl(value);\n if (!normalized) return '/payments';\n if (normalized === '/services/bitcoin/payments') return '/payments';\n if (/\\/services\\/bitcoin\\/payments$/i.test(normalized)) return '/payments';\n if (/\\/services\\/bitcoin$/i.test(normalized)) return '/payments';\n if (/\\/services\\/bitcoin\\/wallets$/i.test(normalized)) return '/payments';\n if (normalized === '/payments') return '/payments';\n return normalized;\n}\nfunction normalizeAddressesBaseUrl(value) {\n var normalized = normalizeBaseUrl(value);\n if (!normalized) return '/services/bitcoin/addresses';\n if (/\\/services\\/bitcoin$/i.test(normalized)) return \"\".concat(normalized, \"/addresses\");\n if (/\\/services\\/bitcoin\\/wallets$/i.test(normalized)) return normalized.replace(/\\/wallets$/i, '/addresses');\n if (/\\/services\\/bitcoin\\/payments$/i.test(normalized)) return normalized.replace(/\\/payments$/i, '/addresses');\n return normalized;\n}\nfunction normalizeLightningBaseUrl(value) {\n var normalized = normalizeBaseUrl(value);\n if (!normalized) return '/services/lightning';\n if (/\\/services\\/bitcoin$/i.test(normalized)) return '/services/lightning';\n if (/\\/services\\/bitcoin\\/lightning$/i.test(normalized)) return '/services/lightning';\n return normalized;\n}\nfunction normalizePayjoinBaseUrl(value) {\n var normalized = normalizeBaseUrl(value);\n if (!normalized) return '/services/payjoin';\n if (normalized === '/services/payjoin') return '/services/payjoin';\n if (/\\/services\\/payjoin$/i.test(normalized)) return '/services/payjoin';\n if (/\\/payments\\/payjoin$/i.test(normalized)) return '/services/payjoin';\n if (/\\/services\\/bitcoin\\/payjoin$/i.test(normalized)) return '/services/payjoin';\n if (/\\/services\\/bitcoin$/i.test(normalized)) return '/services/payjoin';\n if (/\\/services\\/bitcoin\\/payments$/i.test(normalized)) return '/services/payjoin';\n if (normalized === '/payments') return '/services/payjoin';\n return normalized;\n}\nfunction isBitcoinServiceEndpoint() {\n var baseUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var normalized = normalizeBaseUrl(baseUrl);\n return /\\/services\\/bitcoin$/i.test(normalized);\n}\n\n/**\n * Auth for bitcoinClient HTTP: hub admin token only when the base targets Hub\n * `/services/bitcoin` (relative or absolute). External explorers/payments URLs\n * get `apiToken` only so admin credentials are not leaked off-host.\n * @param {object} [settings]\n * @param {string} [baseUrl]\n * @returns {string}\n */\nfunction resolveBitcoinClientAuthToken() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var apiToken = String(settings.apiToken || '').trim();\n var hubAdminToken = String(settings.hubAdminToken || '').trim();\n if (!hubAdminToken) return apiToken;\n var normalized = normalizeBaseUrl(baseUrl);\n if (!normalized) return apiToken;\n if (/^https?:\\/\\//i.test(normalized) && !/\\/services\\/bitcoin(\\/|$)/i.test(normalized)) {\n return apiToken;\n }\n return hubAdminToken || apiToken;\n}\nfunction callBitcoinServiceMethod(_x3, _x4) {\n return _callBitcoinServiceMethod.apply(this, arguments);\n}\nfunction _callBitcoinServiceMethod() {\n _callBitcoinServiceMethod = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(baseUrl, method) {\n var params,\n apiToken,\n normalized,\n _args3 = arguments;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n params = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : {};\n apiToken = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : '';\n normalized = normalizeBaseUrl(baseUrl);\n if (normalized) {\n _context3.n = 1;\n break;\n }\n throw new Error('Bitcoin service endpoint is not configured.');\n case 1:\n return _context3.a(2, requestJSON(normalized, {\n method: 'POST',\n body: {\n method: method,\n params: params\n },\n apiToken: apiToken\n }));\n }\n }, _callee3);\n }));\n return _callBitcoinServiceMethod.apply(this, arguments);\n}\nfunction fetchExplorerDataAtBase() {\n return _fetchExplorerDataAtBase.apply(this, arguments);\n}\nfunction _fetchExplorerDataAtBase() {\n _fetchExplorerDataAtBase = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n var settings,\n wallet,\n options,\n baseUrl,\n netRaw,\n net,\n listTxParams,\n adminTok,\n addrs,\n rpcTok,\n _yield$Promise$all,\n _yield$Promise$all2,\n blocksData,\n txData,\n blocksResp,\n txResp,\n _args4 = arguments;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n settings = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {};\n wallet = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : {};\n options = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : {};\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n if (baseUrl) {\n _context4.n = 1;\n break;\n }\n return _context4.a(2, {\n blocks: [],\n transactions: []\n });\n case 1:\n if (!isBitcoinServiceEndpoint(baseUrl)) {\n _context4.n = 3;\n break;\n }\n netRaw = options.network != null ? String(options.network) : '';\n net = netRaw ? netRaw.toLowerCase() : 'regtest';\n listTxParams = {\n limit: 10\n };\n adminTok = options.adminToken != null ? String(options.adminToken).trim() : '';\n if (adminTok) {\n listTxParams.adminToken = adminTok;\n } else if (wallet && wallet.xpub) {\n addrs = deriveWatchAddresses(wallet, net, 25, 25);\n if (addrs.length > 0) listTxParams.addresses = addrs.join(',');\n }\n rpcTok = resolveBitcoinClientAuthToken(settings, baseUrl);\n _context4.n = 2;\n return Promise.all([callBitcoinServiceMethod(baseUrl, 'ListBlocks', {\n limit: 10\n }, rpcTok)[\"catch\"](function () {\n return [];\n }), callBitcoinServiceMethod(baseUrl, 'ListTransactions', listTxParams, rpcTok)[\"catch\"](function () {\n return [];\n })]);\n case 2:\n _yield$Promise$all = _context4.v;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);\n blocksData = _yield$Promise$all2[0];\n txData = _yield$Promise$all2[1];\n return _context4.a(2, {\n blocks: pickArray(blocksData, ['blocks', 'items', 'results', 'data']),\n transactions: pickArray(txData, ['transactions', 'items', 'results', 'data'])\n });\n case 3:\n _context4.n = 4;\n return tryRequests(baseUrl, [{\n path: '/blocks?limit=10'\n }, {\n path: '/api/blocks?limit=10'\n }, {\n path: '/v1/blocks?limit=10'\n }], settings.apiToken);\n case 4:\n blocksResp = _context4.v;\n _context4.n = 5;\n return tryRequests(baseUrl, [{\n path: '/transactions?limit=10'\n }, {\n path: '/api/transactions?limit=10'\n }, {\n path: '/v1/transactions?limit=10'\n }], settings.apiToken);\n case 5:\n txResp = _context4.v;\n return _context4.a(2, {\n blocks: blocksResp ? pickArray(blocksResp.data, ['blocks', 'items', 'results', 'data']) : [],\n transactions: txResp ? pickArray(txResp.data, ['transactions', 'items', 'results', 'data']) : []\n });\n }\n }, _callee4);\n }));\n return _fetchExplorerDataAtBase.apply(this, arguments);\n}\nfunction fetchExplorerData() {\n return _fetchExplorerData.apply(this, arguments);\n}\nfunction _fetchExplorerData() {\n _fetchExplorerData = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var settings,\n wallet,\n options,\n _args5 = arguments;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n settings = _args5.length > 0 && _args5[0] !== undefined ? _args5[0] : {};\n wallet = _args5.length > 1 && _args5[1] !== undefined ? _args5[1] : {};\n options = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : {};\n return _context5.a(2, fetchExplorerDataAtBase(settings, wallet, options));\n }\n }, _callee5);\n }));\n return _fetchExplorerData.apply(this, arguments);\n}\nfunction fetchBitcoinStatusAtBase() {\n return _fetchBitcoinStatusAtBase.apply(this, arguments);\n}\nfunction _fetchBitcoinStatusAtBase() {\n _fetchBitcoinStatusAtBase = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {\n var settings,\n baseUrl,\n authTok,\n result,\n _args6 = arguments;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.n) {\n case 0:\n settings = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : {};\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n if (baseUrl) {\n _context6.n = 1;\n break;\n }\n return _context6.a(2, {\n available: false,\n status: 'UNAVAILABLE'\n });\n case 1:\n authTok = resolveBitcoinClientAuthToken(settings, baseUrl);\n _context6.n = 2;\n return tryRequests(baseUrl, [{\n path: ''\n }], authTok);\n case 2:\n result = _context6.v;\n return _context6.a(2, pickObject(result ? result.data : {}, ['status', 'result', 'data']));\n }\n }, _callee6);\n }));\n return _fetchBitcoinStatusAtBase.apply(this, arguments);\n}\nfunction fetchBitcoinStatus() {\n return _fetchBitcoinStatus.apply(this, arguments);\n}\nfunction _fetchBitcoinStatus() {\n _fetchBitcoinStatus = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {\n var settings,\n _args7 = arguments;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.n) {\n case 0:\n settings = _args7.length > 0 && _args7[0] !== undefined ? _args7[0] : {};\n return _context7.a(2, fetchBitcoinStatusAtBase(settings));\n }\n }, _callee7);\n }));\n return _fetchBitcoinStatus.apply(this, arguments);\n}\nfunction fetchBlockByHash() {\n return _fetchBlockByHash.apply(this, arguments);\n}\nfunction _fetchBlockByHash() {\n _fetchBlockByHash = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {\n var settings,\n blockhash,\n bUrl,\n hash,\n result,\n obj,\n _args8 = arguments;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.n) {\n case 0:\n settings = _args8.length > 0 && _args8[0] !== undefined ? _args8[0] : {};\n blockhash = _args8.length > 1 && _args8[1] !== undefined ? _args8[1] : '';\n bUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n hash = String(blockhash || '').trim();\n if (!(!bUrl || !hash)) {\n _context8.n = 1;\n break;\n }\n return _context8.a(2, null);\n case 1:\n _context8.n = 2;\n return tryRequests(bUrl, [{\n path: \"/blocks/\".concat(encodeURIComponent(hash))\n }], settings.apiToken);\n case 2:\n result = _context8.v;\n obj = pickObject(result ? result.data : {}, ['block', 'data', 'result']);\n if (!(obj && Object.keys(obj).length)) {\n _context8.n = 3;\n break;\n }\n return _context8.a(2, obj);\n case 3:\n return _context8.a(2, null);\n }\n }, _callee8);\n }));\n return _fetchBlockByHash.apply(this, arguments);\n}\nfunction fetchTransactionByHash() {\n return _fetchTransactionByHash.apply(this, arguments);\n}\n/**\n * Raw transaction hex for PSBT prevouts. Same GET as explorer tx view; requires txindex when unconfirmed.\n * @returns {Promise} hex or '' if missing\n */\nfunction _fetchTransactionByHash() {\n _fetchTransactionByHash = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {\n var settings,\n txhash,\n bUrl,\n hash,\n result,\n obj,\n _args9 = arguments;\n return _regenerator().w(function (_context9) {\n while (1) switch (_context9.n) {\n case 0:\n settings = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {};\n txhash = _args9.length > 1 && _args9[1] !== undefined ? _args9[1] : '';\n bUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n hash = String(txhash || '').trim();\n if (!(!bUrl || !hash)) {\n _context9.n = 1;\n break;\n }\n return _context9.a(2, null);\n case 1:\n _context9.n = 2;\n return tryRequests(bUrl, [{\n path: \"/transactions/\".concat(encodeURIComponent(hash))\n }], settings.apiToken);\n case 2:\n result = _context9.v;\n obj = pickObject(result ? result.data : {}, ['transaction', 'data', 'result']);\n if (!(obj && Object.keys(obj).length)) {\n _context9.n = 3;\n break;\n }\n return _context9.a(2, obj);\n case 3:\n return _context9.a(2, null);\n }\n }, _callee9);\n }));\n return _fetchTransactionByHash.apply(this, arguments);\n}\nfunction fetchTransactionHex() {\n return _fetchTransactionHex.apply(this, arguments);\n}\nfunction _fetchTransactionHex() {\n _fetchTransactionHex = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0() {\n var settings,\n txhash,\n bUrl,\n hash,\n root,\n data,\n _args0 = arguments,\n _t3;\n return _regenerator().w(function (_context0) {\n while (1) switch (_context0.p = _context0.n) {\n case 0:\n settings = _args0.length > 0 && _args0[0] !== undefined ? _args0[0] : {};\n txhash = _args0.length > 1 && _args0[1] !== undefined ? _args0[1] : '';\n bUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n hash = String(txhash || '').trim();\n if (!(!bUrl || !hash)) {\n _context0.n = 1;\n break;\n }\n return _context0.a(2, '');\n case 1:\n _context0.p = 1;\n root = normalizeBaseUrl(bUrl);\n _context0.n = 2;\n return requestJSON(\"\".concat(root, \"/transactions/\").concat(encodeURIComponent(hash)), {\n method: 'GET',\n apiToken: settings.apiToken\n });\n case 2:\n data = _context0.v;\n return _context0.a(2, data && data.hex ? String(data.hex) : '');\n case 3:\n _context0.p = 3;\n _t3 = _context0.v;\n return _context0.a(2, '');\n }\n }, _callee0, null, [[1, 3]]);\n }));\n return _fetchTransactionHex.apply(this, arguments);\n}\nfunction fetchWalletSummary() {\n return _fetchWalletSummary.apply(this, arguments);\n}\n/**\n * Fetch wallet summary with cache fallback. Uses cached balance when fetch fails.\n * Keys never leave the browser; only xpub is sent for watch-only balance.\n * @param {object} settings - Upstream settings\n * @param {object} wallet - Wallet context (walletId, xpub from getWalletContextFromIdentity)\n * @param {object} [options] - { maxCacheAgeMs: number } - use 0 to skip cache\n * @returns {Promise} Summary with balanceSats, confirmedSats, unconfirmedSats; uses cache on fetch failure\n */\nfunction _fetchWalletSummary() {\n _fetchWalletSummary = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee1() {\n var settings,\n wallet,\n options,\n xpub,\n walletId,\n _baseUrl,\n _params,\n _network,\n addrs,\n q,\n _summary,\n _raw,\n _raw$balanceSats,\n _ref4,\n _raw$confirmedSats,\n _raw$unconfirmedSats,\n balanceSats,\n confirmedSats,\n unconfirmedSats,\n fromSummary,\n result,\n baseUrl,\n encodedId,\n params,\n network,\n _addrs,\n path,\n summary,\n raw,\n _raw$balanceSats2,\n _ref5,\n _raw$confirmedSats2,\n _raw$unconfirmedSats2,\n _balanceSats,\n _confirmedSats,\n _unconfirmedSats,\n _fromSummary,\n _result,\n _args1 = arguments;\n return _regenerator().w(function (_context1) {\n while (1) switch (_context1.n) {\n case 0:\n settings = _args1.length > 0 && _args1[0] !== undefined ? _args1[0] : {};\n wallet = _args1.length > 1 && _args1[1] !== undefined ? _args1[1] : {};\n options = _args1.length > 2 && _args1[2] !== undefined ? _args1[2] : {};\n xpub = wallet.xpub ? String(wallet.xpub).trim() : '';\n walletId = String(wallet.walletId || '').trim();\n if (!(!xpub && !walletId)) {\n _context1.n = 1;\n break;\n }\n return _context1.a(2, {});\n case 1:\n if (!xpub) {\n _context1.n = 5;\n break;\n }\n _baseUrl = normalizeXpubWatchBaseUrl(settings.paymentsBaseUrl);\n if (_baseUrl) {\n _context1.n = 2;\n break;\n }\n return _context1.a(2, {});\n case 2:\n _params = new URLSearchParams();\n _params.set('xpub', xpub);\n _network = options.network != null ? String(options.network) : '';\n if (_network) {\n addrs = deriveWatchAddresses(wallet, _network, 25, 25);\n if (addrs.length > 0) _params.set('addresses', addrs.join(','));\n }\n q = _params.toString();\n _context1.n = 3;\n return tryRequests(_baseUrl, [{\n path: q ? \"?\".concat(q) : ''\n }], resolveBitcoinClientAuthToken(settings, _baseUrl));\n case 3:\n _summary = _context1.v;\n _raw = pickObject(_summary ? _summary.data : {}, ['wallet', 'data']);\n if (!(_raw && _typeof(_raw) === 'object')) {\n _context1.n = 4;\n break;\n }\n balanceSats = (_raw$balanceSats = _raw.balanceSats) !== null && _raw$balanceSats !== void 0 ? _raw$balanceSats : _raw.balance_sats;\n confirmedSats = (_ref4 = (_raw$confirmedSats = _raw.confirmedSats) !== null && _raw$confirmedSats !== void 0 ? _raw$confirmedSats : _raw.confirmed_sats) !== null && _ref4 !== void 0 ? _ref4 : balanceSats;\n unconfirmedSats = (_raw$unconfirmedSats = _raw.unconfirmedSats) !== null && _raw$unconfirmedSats !== void 0 ? _raw$unconfirmedSats : _raw.unconfirmed_sats;\n fromSummary = function fromSummary(v) {\n return v != null && typeof v === 'number' ? Math.round(v * 100000000) : undefined;\n };\n result = _objectSpread(_objectSpread({}, _raw), {}, {\n balanceSats: balanceSats != null ? Number(balanceSats) : _raw.summary && _raw.summary.trusted != null ? fromSummary(_raw.summary.trusted) : undefined,\n confirmedSats: confirmedSats != null ? Number(confirmedSats) : _raw.summary && _raw.summary.trusted != null ? fromSummary(_raw.summary.trusted) : undefined,\n unconfirmedSats: unconfirmedSats != null ? Number(unconfirmedSats) : _raw.summary && _raw.summary.untrustedPending != null ? fromSummary(_raw.summary.untrustedPending) : undefined\n });\n setCachedBalance(walletId || \"xpub:\".concat(xpub.slice(0, 48)), result);\n return _context1.a(2, result);\n case 4:\n return _context1.a(2, _raw);\n case 5:\n baseUrl = normalizeWalletsBaseUrl(settings.paymentsBaseUrl);\n if (baseUrl) {\n _context1.n = 6;\n break;\n }\n return _context1.a(2, {});\n case 6:\n encodedId = encodeURIComponent(walletId);\n params = new URLSearchParams();\n network = options.network != null ? String(options.network) : '';\n if (network && wallet.xpub) {\n _addrs = deriveWatchAddresses(wallet, network, 25, 25);\n if (_addrs.length > 0) params.set('addresses', _addrs.join(','));\n }\n path = params.toString() ? \"/\".concat(encodedId, \"?\").concat(params.toString()) : \"/\".concat(encodedId);\n _context1.n = 7;\n return tryRequests(baseUrl, [{\n path: path\n }], resolveBitcoinClientAuthToken(settings, baseUrl));\n case 7:\n summary = _context1.v;\n raw = pickObject(summary ? summary.data : {}, ['wallet', 'data']);\n if (!(raw && _typeof(raw) === 'object')) {\n _context1.n = 8;\n break;\n }\n _balanceSats = (_raw$balanceSats2 = raw.balanceSats) !== null && _raw$balanceSats2 !== void 0 ? _raw$balanceSats2 : raw.balance_sats;\n _confirmedSats = (_ref5 = (_raw$confirmedSats2 = raw.confirmedSats) !== null && _raw$confirmedSats2 !== void 0 ? _raw$confirmedSats2 : raw.confirmed_sats) !== null && _ref5 !== void 0 ? _ref5 : _balanceSats;\n _unconfirmedSats = (_raw$unconfirmedSats2 = raw.unconfirmedSats) !== null && _raw$unconfirmedSats2 !== void 0 ? _raw$unconfirmedSats2 : raw.unconfirmed_sats;\n _fromSummary = function _fromSummary(v) {\n return v != null && typeof v === 'number' ? Math.round(v * 100000000) : undefined;\n };\n _result = _objectSpread(_objectSpread({}, raw), {}, {\n balanceSats: _balanceSats != null ? Number(_balanceSats) : raw.summary && raw.summary.trusted != null ? _fromSummary(raw.summary.trusted) : undefined,\n confirmedSats: _confirmedSats != null ? Number(_confirmedSats) : raw.summary && raw.summary.trusted != null ? _fromSummary(raw.summary.trusted) : undefined,\n unconfirmedSats: _unconfirmedSats != null ? Number(_unconfirmedSats) : raw.summary && raw.summary.untrustedPending != null ? _fromSummary(raw.summary.untrustedPending) : undefined\n });\n setCachedBalance(walletId, _result);\n return _context1.a(2, _result);\n case 8:\n return _context1.a(2, raw);\n }\n }, _callee1);\n }));\n return _fetchWalletSummary.apply(this, arguments);\n}\nfunction fetchWalletSummaryWithCache() {\n return _fetchWalletSummaryWithCache.apply(this, arguments);\n}\n/**\n * Look up balance for a single address. Server does not hold keys; uses scantxoutset.\n * Works for any on-chain address. Requires Hub Bitcoin service with txindex.\n */\nfunction _fetchWalletSummaryWithCache() {\n _fetchWalletSummaryWithCache = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee10() {\n var settings,\n wallet,\n options,\n walletId,\n xpub,\n cacheKey,\n bypassCache,\n maxCacheAgeMs,\n summary,\n cached,\n _args10 = arguments,\n _t4;\n return _regenerator().w(function (_context10) {\n while (1) switch (_context10.p = _context10.n) {\n case 0:\n settings = _args10.length > 0 && _args10[0] !== undefined ? _args10[0] : {};\n wallet = _args10.length > 1 && _args10[1] !== undefined ? _args10[1] : {};\n options = _args10.length > 2 && _args10[2] !== undefined ? _args10[2] : {};\n walletId = String(wallet.walletId || '').trim();\n xpub = wallet.xpub ? String(wallet.xpub).trim() : '';\n cacheKey = walletId || (xpub ? \"xpub:\".concat(xpub.slice(0, 48)) : '');\n bypassCache = !!(options.bypassCache || options.maxCacheAgeMs === 0);\n maxCacheAgeMs = bypassCache ? 0 : options.maxCacheAgeMs != null ? Number(options.maxCacheAgeMs) : BALANCE_CACHE_MAX_AGE_MS;\n _context10.p = 1;\n _context10.n = 2;\n return fetchWalletSummary(settings, wallet, options);\n case 2:\n summary = _context10.v;\n if (!(summary && (summary.balanceSats != null || summary.balance != null))) {\n _context10.n = 3;\n break;\n }\n return _context10.a(2, summary);\n case 3:\n _context10.n = 5;\n break;\n case 4:\n _context10.p = 4;\n _t4 = _context10.v;\n case 5:\n cached = cacheKey ? getCachedBalance(cacheKey, maxCacheAgeMs) : null;\n if (!cached) {\n _context10.n = 6;\n break;\n }\n return _context10.a(2, {\n balanceSats: cached.balanceSats,\n confirmedSats: cached.confirmedSats,\n unconfirmedSats: cached.unconfirmedSats,\n _fromCache: true,\n _cachedAt: cached.fetchedAt\n });\n case 6:\n return _context10.a(2, {});\n }\n }, _callee10, null, [[1, 4]]);\n }));\n return _fetchWalletSummaryWithCache.apply(this, arguments);\n}\nfunction fetchAddressBalance() {\n return _fetchAddressBalance.apply(this, arguments);\n}\nfunction _fetchAddressBalance() {\n _fetchAddressBalance = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee11() {\n var settings,\n address,\n baseUrl,\n raw,\n path,\n result,\n _args11 = arguments;\n return _regenerator().w(function (_context11) {\n while (1) switch (_context11.n) {\n case 0:\n settings = _args11.length > 0 && _args11[0] !== undefined ? _args11[0] : {};\n address = _args11.length > 1 && _args11[1] !== undefined ? _args11[1] : '';\n baseUrl = normalizeAddressesBaseUrl(settings.paymentsBaseUrl || settings.explorerBaseUrl);\n if (baseUrl) {\n _context11.n = 1;\n break;\n }\n return _context11.a(2, null);\n case 1:\n raw = String(address || '').trim();\n if (raw) {\n _context11.n = 2;\n break;\n }\n return _context11.a(2, null);\n case 2:\n path = \"/\".concat(encodeURIComponent(raw), \"/balance\");\n _context11.n = 3;\n return tryRequests(baseUrl, [{\n path: path\n }], settings.apiToken);\n case 3:\n result = _context11.v;\n return _context11.a(2, pickObject(result ? result.data : {}, ['address', 'balance', 'balanceSats', 'confirmedSats', 'unconfirmedSats', 'keysHeldByServer']));\n }\n }, _callee11);\n }));\n return _fetchAddressBalance.apply(this, arguments);\n}\nfunction fetchReceiveAddress() {\n return _fetchReceiveAddress.apply(this, arguments);\n}\nfunction _fetchReceiveAddress() {\n _fetchReceiveAddress = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee12() {\n var settings,\n wallet,\n options,\n local,\n baseUrl,\n walletId,\n result,\n body,\n _args12 = arguments;\n return _regenerator().w(function (_context12) {\n while (1) switch (_context12.n) {\n case 0:\n settings = _args12.length > 0 && _args12[0] !== undefined ? _args12[0] : {};\n wallet = _args12.length > 1 && _args12[1] !== undefined ? _args12[1] : {};\n options = _args12.length > 2 && _args12[2] !== undefined ? _args12[2] : {};\n local = deriveAndStoreReceiveAddress(wallet, {\n network: options.network,\n identity: options.identity\n });\n if (!(local && local.currentAddress)) {\n _context12.n = 1;\n break;\n }\n return _context12.a(2, local.currentAddress);\n case 1:\n baseUrl = normalizeAddressesBaseUrl(settings.paymentsBaseUrl);\n if (baseUrl) {\n _context12.n = 2;\n break;\n }\n return _context12.a(2, '');\n case 2:\n walletId = encodeURIComponent(wallet.walletId || '');\n if (walletId) {\n _context12.n = 3;\n break;\n }\n return _context12.a(2, '');\n case 3:\n _context12.n = 4;\n return tryRequests(baseUrl, [{\n path: \"?walletId=\".concat(walletId)\n }], settings.apiToken);\n case 4:\n result = _context12.v;\n body = pickObject(result ? result.data : {}, ['address', 'data', 'result']);\n if (!(typeof body === 'string')) {\n _context12.n = 5;\n break;\n }\n return _context12.a(2, body);\n case 5:\n if (!body.address) {\n _context12.n = 6;\n break;\n }\n return _context12.a(2, String(body.address));\n case 6:\n if (!body.bech32) {\n _context12.n = 7;\n break;\n }\n return _context12.a(2, String(body.bech32));\n case 7:\n return _context12.a(2, '');\n }\n }, _callee12);\n }));\n return _fetchReceiveAddress.apply(this, arguments);\n}\nfunction fetchUTXOs() {\n return _fetchUTXOs.apply(this, arguments);\n}\nfunction _fetchUTXOs() {\n _fetchUTXOs = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee13() {\n var settings,\n wallet,\n options,\n xpub,\n walletIdEnc,\n _baseUrl2,\n _params2,\n _network2,\n addrs,\n _qs,\n _path,\n _result2,\n baseUrl,\n params,\n network,\n _addrs2,\n qs,\n path,\n result,\n _args13 = arguments;\n return _regenerator().w(function (_context13) {\n while (1) switch (_context13.n) {\n case 0:\n settings = _args13.length > 0 && _args13[0] !== undefined ? _args13[0] : {};\n wallet = _args13.length > 1 && _args13[1] !== undefined ? _args13[1] : {};\n options = _args13.length > 2 && _args13[2] !== undefined ? _args13[2] : {};\n xpub = wallet.xpub ? String(wallet.xpub).trim() : '';\n walletIdEnc = encodeURIComponent(wallet.walletId || '');\n if (!xpub) {\n _context13.n = 3;\n break;\n }\n _baseUrl2 = normalizeXpubWatchBaseUrl(settings.paymentsBaseUrl);\n if (_baseUrl2) {\n _context13.n = 1;\n break;\n }\n return _context13.a(2, []);\n case 1:\n _params2 = new URLSearchParams();\n _params2.set('xpub', xpub);\n _network2 = options.network != null ? String(options.network) : '';\n if (_network2) {\n addrs = deriveWatchAddresses(wallet, _network2, 25, 25);\n if (addrs.length > 0) _params2.set('addresses', addrs.join(','));\n }\n _qs = _params2.toString();\n _path = _qs ? \"/utxos?\".concat(_qs) : '/utxos';\n _context13.n = 2;\n return tryRequests(_baseUrl2, [{\n path: _path\n }], resolveBitcoinClientAuthToken(settings, _baseUrl2));\n case 2:\n _result2 = _context13.v;\n return _context13.a(2, pickArray(_result2 ? _result2.data : {}, ['utxos', 'items', 'results', 'data']));\n case 3:\n baseUrl = normalizeWalletsBaseUrl(settings.paymentsBaseUrl);\n if (baseUrl) {\n _context13.n = 4;\n break;\n }\n return _context13.a(2, []);\n case 4:\n if (walletIdEnc) {\n _context13.n = 5;\n break;\n }\n return _context13.a(2, []);\n case 5:\n params = new URLSearchParams();\n network = options.network != null ? String(options.network) : '';\n if (network && wallet.xpub) {\n _addrs2 = deriveWatchAddresses(wallet, network, 25, 25);\n if (_addrs2.length > 0) params.set('addresses', _addrs2.join(','));\n }\n qs = params.toString();\n path = qs ? \"/\".concat(walletIdEnc, \"/utxos?\").concat(qs) : \"/\".concat(walletIdEnc, \"/utxos\");\n _context13.n = 6;\n return tryRequests(baseUrl, [{\n path: path\n }], resolveBitcoinClientAuthToken(settings, baseUrl));\n case 6:\n result = _context13.v;\n return _context13.a(2, pickArray(result ? result.data : {}, ['utxos', 'items', 'results', 'data']));\n }\n }, _callee13);\n }));\n return _fetchUTXOs.apply(this, arguments);\n}\nfunction fetchWalletTransactions() {\n return _fetchWalletTransactions.apply(this, arguments);\n}\nfunction _fetchWalletTransactions() {\n _fetchWalletTransactions = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee14() {\n var settings,\n wallet,\n options,\n xpub,\n walletId,\n limit,\n _baseUrl3,\n _authTok,\n _params3,\n _network3,\n addrs,\n _path2,\n _result3,\n baseUrl,\n authTok,\n params,\n network,\n _addrs3,\n path,\n result,\n _args14 = arguments;\n return _regenerator().w(function (_context14) {\n while (1) switch (_context14.n) {\n case 0:\n settings = _args14.length > 0 && _args14[0] !== undefined ? _args14[0] : {};\n wallet = _args14.length > 1 && _args14[1] !== undefined ? _args14[1] : {};\n options = _args14.length > 2 && _args14[2] !== undefined ? _args14[2] : {};\n xpub = wallet.xpub ? String(wallet.xpub).trim() : '';\n walletId = String(wallet.walletId || '').trim();\n limit = Math.max(1, Math.min(100, Number(options.limit || 50)));\n if (!xpub) {\n _context14.n = 3;\n break;\n }\n _baseUrl3 = normalizeXpubWatchBaseUrl(settings.paymentsBaseUrl);\n if (_baseUrl3) {\n _context14.n = 1;\n break;\n }\n return _context14.a(2, []);\n case 1:\n _authTok = resolveBitcoinClientAuthToken(settings, _baseUrl3);\n _params3 = new URLSearchParams();\n _params3.set('xpub', xpub);\n _params3.set('limit', String(limit));\n _network3 = options.network != null ? String(options.network) : '';\n if (_network3) {\n addrs = deriveWatchAddresses(wallet, _network3, 25, 25);\n if (addrs.length > 0) _params3.set('addresses', addrs.join(','));\n }\n _path2 = \"/transactions?\".concat(_params3.toString());\n _context14.n = 2;\n return tryRequests(_baseUrl3, [{\n path: _path2\n }], _authTok);\n case 2:\n _result3 = _context14.v;\n return _context14.a(2, pickArray(_result3 ? _result3.data : {}, ['transactions', 'items', 'results', 'data']));\n case 3:\n baseUrl = normalizeWalletsBaseUrl(settings.paymentsBaseUrl);\n if (baseUrl) {\n _context14.n = 4;\n break;\n }\n return _context14.a(2, []);\n case 4:\n if (walletId) {\n _context14.n = 5;\n break;\n }\n return _context14.a(2, []);\n case 5:\n authTok = resolveBitcoinClientAuthToken(settings, baseUrl);\n params = new URLSearchParams();\n params.set('limit', String(limit));\n network = options.network != null ? String(options.network) : '';\n if (network && wallet.xpub) {\n _addrs3 = deriveWatchAddresses(wallet, network, 25, 25);\n if (_addrs3.length > 0) params.set('addresses', _addrs3.join(','));\n }\n path = \"/\".concat(encodeURIComponent(walletId), \"/transactions?\").concat(params.toString());\n _context14.n = 6;\n return tryRequests(baseUrl, [{\n path: path\n }], authTok);\n case 6:\n result = _context14.v;\n return _context14.a(2, pickArray(result ? result.data : {}, ['transactions', 'items', 'results', 'data']));\n }\n }, _callee14);\n }));\n return _fetchWalletTransactions.apply(this, arguments);\n}\nfunction requestFaucet() {\n return _requestFaucet.apply(this, arguments);\n}\nfunction _requestFaucet() {\n _requestFaucet = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee15() {\n var settings,\n options,\n baseUrl,\n payload,\n result,\n _args15 = arguments;\n return _regenerator().w(function (_context15) {\n while (1) switch (_context15.n) {\n case 0:\n settings = _args15.length > 0 && _args15[0] !== undefined ? _args15[0] : {};\n options = _args15.length > 1 && _args15[1] !== undefined ? _args15[1] : {};\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n if (baseUrl) {\n _context15.n = 1;\n break;\n }\n throw new Error('Explorer/bitcoin API base URL is not configured.');\n case 1:\n payload = {\n address: String(options.address || '').trim(),\n amountSats: Number(options.amountSats || 10000)\n };\n if (payload.address) {\n _context15.n = 2;\n break;\n }\n throw new Error('Destination address is required for faucet.');\n case 2:\n _context15.n = 3;\n return tryRequests(baseUrl, [{\n method: 'POST',\n path: '/faucet',\n body: payload\n }], settings.apiToken);\n case 3:\n result = _context15.v;\n return _context15.a(2, pickObject(result ? result.data : {}, ['status', 'network', 'source', 'faucet', 'error']));\n }\n }, _callee15);\n }));\n return _requestFaucet.apply(this, arguments);\n}\nfunction sendPayment() {\n return _sendPayment.apply(this, arguments);\n}\n/**\n * Spend from the Hub node's bitcoind wallet (regtest/ops). Requires setup admin token.\n * @param {object} settings - loadUpstreamSettings(); uses explorerBaseUrl → POST /services/bitcoin\n * @param {{ to: string, amountSats: number, memo?: string }} payment\n * @param {string} adminToken - fabric.hub.adminToken\n */\nfunction _sendPayment() {\n _sendPayment = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee16() {\n var settings,\n wallet,\n payment,\n baseUrl,\n adminToken,\n payload,\n walletId,\n result,\n _args16 = arguments;\n return _regenerator().w(function (_context16) {\n while (1) switch (_context16.n) {\n case 0:\n settings = _args16.length > 0 && _args16[0] !== undefined ? _args16[0] : {};\n wallet = _args16.length > 1 && _args16[1] !== undefined ? _args16[1] : {};\n payment = _args16.length > 2 && _args16[2] !== undefined ? _args16[2] : {};\n baseUrl = normalizePaymentsBaseUrl(settings.paymentsBaseUrl);\n if (baseUrl) {\n _context16.n = 1;\n break;\n }\n throw new Error('Payments API base URL is not configured.');\n case 1:\n adminToken = String(payment.adminToken || payment.token || '').trim();\n if (adminToken) {\n _context16.n = 2;\n break;\n }\n throw new Error('Admin token is required: POST /payments (or legacy POST /services/bitcoin/payments) spends from this hub\\'s bitcoind wallet and broadcasts a real transaction (identity xpub selects wallet id for the request).');\n case 2:\n payload = {\n walletId: wallet.walletId,\n xpub: wallet.xpub,\n to: payment.to,\n amountSats: Number(payment.amountSats || 0),\n memo: payment.memo || '',\n adminToken: adminToken\n };\n walletId = String(wallet.walletId || '').trim();\n if (walletId) {\n _context16.n = 3;\n break;\n }\n throw new Error('Wallet ID is required for payment requests.');\n case 3:\n _context16.n = 4;\n return tryRequests(baseUrl, [{\n method: 'POST',\n path: '',\n body: payload\n }], settings.apiToken);\n case 4:\n result = _context16.v;\n return _context16.a(2, pickObject(result ? result.data : {}, ['payment', 'result', 'data']));\n }\n }, _callee16);\n }));\n return _sendPayment.apply(this, arguments);\n}\nfunction sendBridgePayment() {\n return _sendBridgePayment.apply(this, arguments);\n}\n/**\n * Whether a tx pays at least amountSats to address (L1 proof).\n * GET `.../transactions/:txid?address=&amountSats=` (same transaction resource; query selects payment-proof response).\n * JSON-RPC `verifyl1payment` on POST /services/bitcoin is an alternate for non-HTTP clients.\n */\nfunction _sendBridgePayment() {\n _sendBridgePayment = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee17() {\n var settings,\n payment,\n adminToken,\n baseUrl,\n token,\n to,\n amountSats,\n _args17 = arguments;\n return _regenerator().w(function (_context17) {\n while (1) switch (_context17.n) {\n case 0:\n settings = _args17.length > 0 && _args17[0] !== undefined ? _args17[0] : {};\n payment = _args17.length > 1 && _args17[1] !== undefined ? _args17[1] : {};\n adminToken = _args17.length > 2 && _args17[2] !== undefined ? _args17[2] : '';\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n if (isBitcoinServiceEndpoint(baseUrl)) {\n _context17.n = 1;\n break;\n }\n throw new Error('Hub Bitcoin RPC base (/services/bitcoin) is required for bridge payments.');\n case 1:\n token = String(adminToken || '').trim();\n if (token) {\n _context17.n = 2;\n break;\n }\n throw new Error('Admin token is required to pay from the Hub wallet.');\n case 2:\n to = String(payment.to || '').trim();\n amountSats = Math.round(Number(payment.amountSats || 0));\n if (to) {\n _context17.n = 3;\n break;\n }\n throw new Error('Destination address is required.');\n case 3:\n if (!(!Number.isFinite(amountSats) || amountSats <= 0)) {\n _context17.n = 4;\n break;\n }\n throw new Error('amountSats must be a positive integer.');\n case 4:\n return _context17.a(2, callBitcoinServiceMethod(baseUrl, 'sendpayment', {\n to: to,\n amountSats: amountSats,\n memo: String(payment.memo || ''),\n adminToken: token\n }, settings.apiToken));\n }\n }, _callee17);\n }));\n return _sendBridgePayment.apply(this, arguments);\n}\nfunction verifyL1Payment() {\n return _verifyL1Payment.apply(this, arguments);\n}\nfunction _verifyL1Payment() {\n _verifyL1Payment = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee18() {\n var settings,\n proof,\n txid,\n address,\n amountSats,\n qs,\n path,\n baseUrl,\n root,\n data,\n _args18 = arguments;\n return _regenerator().w(function (_context18) {\n while (1) switch (_context18.n) {\n case 0:\n settings = _args18.length > 0 && _args18[0] !== undefined ? _args18[0] : {};\n proof = _args18.length > 1 && _args18[1] !== undefined ? _args18[1] : {};\n txid = String(proof.txid || '').trim();\n address = String(proof.address || proof.to || '').trim();\n amountSats = Number(proof.amountSats || 0);\n if (txid) {\n _context18.n = 1;\n break;\n }\n throw new Error('Transaction id (txid) is required.');\n case 1:\n if (address) {\n _context18.n = 2;\n break;\n }\n throw new Error('Destination address is required.');\n case 2:\n if (!(!Number.isFinite(amountSats) || amountSats <= 0)) {\n _context18.n = 3;\n break;\n }\n throw new Error('amountSats must be a positive integer.');\n case 3:\n qs = new URLSearchParams({\n address: address,\n amountSats: String(Math.round(amountSats))\n });\n path = \"/transactions/\".concat(encodeURIComponent(txid), \"?\").concat(qs.toString());\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n if (baseUrl) {\n _context18.n = 4;\n break;\n }\n throw new Error('Bitcoin API base URL is not configured.');\n case 4:\n root = normalizeBaseUrl(baseUrl);\n _context18.n = 5;\n return requestJSON(\"\".concat(root).concat(path), {\n method: 'GET',\n apiToken: settings.apiToken\n });\n case 5:\n data = _context18.v;\n return _context18.a(2, data && _typeof(data) === 'object' && Object.prototype.hasOwnProperty.call(data, 'verified') ? data : _objectSpread({\n verified: false\n }, data));\n }\n }, _callee18);\n }));\n return _verifyL1Payment.apply(this, arguments);\n}\nfunction fetchPayments() {\n return _fetchPayments.apply(this, arguments);\n}\nfunction _fetchPayments() {\n _fetchPayments = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee19() {\n var settings,\n wallet,\n options,\n baseUrl,\n limit,\n walletId,\n params,\n netRaw,\n net,\n addrs,\n authTok,\n result,\n _args19 = arguments;\n return _regenerator().w(function (_context19) {\n while (1) switch (_context19.n) {\n case 0:\n settings = _args19.length > 0 && _args19[0] !== undefined ? _args19[0] : {};\n wallet = _args19.length > 1 && _args19[1] !== undefined ? _args19[1] : {};\n options = _args19.length > 2 && _args19[2] !== undefined ? _args19[2] : {};\n baseUrl = normalizePaymentsBaseUrl(settings.paymentsBaseUrl);\n if (baseUrl) {\n _context19.n = 1;\n break;\n }\n return _context19.a(2, []);\n case 1:\n limit = Math.max(1, Math.min(100, Number(options.limit || 25)));\n walletId = encodeURIComponent(wallet.walletId || '');\n params = new URLSearchParams();\n params.set('walletId', wallet.walletId || '');\n params.set('limit', String(limit));\n netRaw = options.network != null ? String(options.network) : '';\n net = netRaw ? netRaw.toLowerCase() : 'regtest';\n if (wallet && wallet.xpub) {\n addrs = deriveWatchAddresses(wallet, net, 25, 25);\n if (addrs.length > 0) params.set('addresses', addrs.join(','));\n }\n authTok = resolveBitcoinClientAuthToken(settings, baseUrl);\n _context19.n = 2;\n return tryRequests(baseUrl, [{\n path: \"?\".concat(params.toString())\n }], authTok);\n case 2:\n result = _context19.v;\n return _context19.a(2, pickArray(result ? result.data : {}, ['payments', 'items', 'results', 'data']));\n }\n }, _callee19);\n }));\n return _fetchPayments.apply(this, arguments);\n}\nfunction fetchCrowdfundingCampaigns() {\n return _fetchCrowdfundingCampaigns.apply(this, arguments);\n}\nfunction _fetchCrowdfundingCampaigns() {\n _fetchCrowdfundingCampaigns = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee20() {\n var settings,\n baseUrl,\n data,\n _args20 = arguments;\n return _regenerator().w(function (_context20) {\n while (1) switch (_context20.n) {\n case 0:\n settings = _args20.length > 0 && _args20[0] !== undefined ? _args20[0] : {};\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n _context20.n = 1;\n return requestJSON(\"\".concat(baseUrl, \"/crowdfunding/campaigns\"), {\n method: 'GET'\n });\n case 1:\n data = _context20.v;\n return _context20.a(2, pickArray(data, ['campaigns']));\n }\n }, _callee20);\n }));\n return _fetchCrowdfundingCampaigns.apply(this, arguments);\n}\nfunction createCrowdfundingCampaign() {\n return _createCrowdfundingCampaign.apply(this, arguments);\n}\nfunction _createCrowdfundingCampaign() {\n _createCrowdfundingCampaign = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee21() {\n var settings,\n body,\n adminToken,\n baseUrl,\n token,\n _args21 = arguments;\n return _regenerator().w(function (_context21) {\n while (1) switch (_context21.n) {\n case 0:\n settings = _args21.length > 0 && _args21[0] !== undefined ? _args21[0] : {};\n body = _args21.length > 1 && _args21[1] !== undefined ? _args21[1] : {};\n adminToken = _args21.length > 2 && _args21[2] !== undefined ? _args21[2] : '';\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n token = String(adminToken || '').trim();\n if (token) {\n _context21.n = 1;\n break;\n }\n throw new Error('Admin token is required to create a campaign.');\n case 1:\n return _context21.a(2, requestJSON(\"\".concat(baseUrl, \"/crowdfunding/campaigns\"), {\n method: 'POST',\n body: body,\n apiToken: token\n }));\n }\n }, _callee21);\n }));\n return _createCrowdfundingCampaign.apply(this, arguments);\n}\nfunction fetchCrowdfundingAcpDonationPsbt() {\n return _fetchCrowdfundingAcpDonationPsbt.apply(this, arguments);\n}\nfunction _fetchCrowdfundingAcpDonationPsbt() {\n _fetchCrowdfundingAcpDonationPsbt = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee22() {\n var settings,\n campaignId,\n amountSats,\n baseUrl,\n id,\n amt,\n q,\n _args22 = arguments;\n return _regenerator().w(function (_context22) {\n while (1) switch (_context22.n) {\n case 0:\n settings = _args22.length > 0 && _args22[0] !== undefined ? _args22[0] : {};\n campaignId = _args22.length > 1 && _args22[1] !== undefined ? _args22[1] : '';\n amountSats = _args22.length > 2 && _args22[2] !== undefined ? _args22[2] : 0;\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n id = encodeURIComponent(String(campaignId || '').trim());\n amt = Math.round(Number(amountSats));\n q = Number.isFinite(amt) && amt > 0 ? \"?amountSats=\".concat(encodeURIComponent(String(amt))) : '';\n return _context22.a(2, requestJSON(\"\".concat(baseUrl, \"/crowdfunding/campaigns/\").concat(id, \"/acp-donation-psbt\").concat(q), {\n method: 'GET'\n }));\n }\n }, _callee22);\n }));\n return _fetchCrowdfundingAcpDonationPsbt.apply(this, arguments);\n}\nfunction fetchCrowdfundingCampaign() {\n return _fetchCrowdfundingCampaign.apply(this, arguments);\n}\nfunction _fetchCrowdfundingCampaign() {\n _fetchCrowdfundingCampaign = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee23() {\n var settings,\n campaignId,\n baseUrl,\n id,\n _args23 = arguments;\n return _regenerator().w(function (_context23) {\n while (1) switch (_context23.n) {\n case 0:\n settings = _args23.length > 0 && _args23[0] !== undefined ? _args23[0] : {};\n campaignId = _args23.length > 1 && _args23[1] !== undefined ? _args23[1] : '';\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n id = encodeURIComponent(String(campaignId || '').trim());\n if (id) {\n _context23.n = 1;\n break;\n }\n throw new Error('campaignId is required');\n case 1:\n return _context23.a(2, requestJSON(\"\".concat(baseUrl, \"/crowdfunding/campaigns/\").concat(id), {\n method: 'GET'\n }));\n }\n }, _callee23);\n }));\n return _fetchCrowdfundingCampaign.apply(this, arguments);\n}\nfunction fetchCrowdfundingPayoutPsbt() {\n return _fetchCrowdfundingPayoutPsbt.apply(this, arguments);\n}\nfunction _fetchCrowdfundingPayoutPsbt() {\n _fetchCrowdfundingPayoutPsbt = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee24() {\n var settings,\n campaignId,\n opts,\n baseUrl,\n id,\n dest,\n feeSats,\n q,\n _args24 = arguments;\n return _regenerator().w(function (_context24) {\n while (1) switch (_context24.n) {\n case 0:\n settings = _args24.length > 0 && _args24[0] !== undefined ? _args24[0] : {};\n campaignId = _args24.length > 1 && _args24[1] !== undefined ? _args24[1] : '';\n opts = _args24.length > 2 && _args24[2] !== undefined ? _args24[2] : {};\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n id = encodeURIComponent(String(campaignId || '').trim());\n dest = String(opts && opts.destination || opts && opts.to || '').trim();\n feeSats = Math.max(1, Math.round(Number(opts && opts.feeSats != null ? opts.feeSats : 1000)));\n if (id) {\n _context24.n = 1;\n break;\n }\n throw new Error('campaignId is required');\n case 1:\n if (dest) {\n _context24.n = 2;\n break;\n }\n throw new Error('Payout destination address is required.');\n case 2:\n q = \"?destination=\".concat(encodeURIComponent(dest), \"&feeSats=\").concat(encodeURIComponent(String(feeSats)));\n return _context24.a(2, requestJSON(\"\".concat(baseUrl, \"/crowdfunding/campaigns/\").concat(id, \"/payout-psbt\").concat(q), {\n method: 'GET'\n }));\n }\n }, _callee24);\n }));\n return _fetchCrowdfundingPayoutPsbt.apply(this, arguments);\n}\nfunction postCrowdfundingPayoutSignArbiter() {\n return _postCrowdfundingPayoutSignArbiter.apply(this, arguments);\n}\nfunction _postCrowdfundingPayoutSignArbiter() {\n _postCrowdfundingPayoutSignArbiter = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee25() {\n var settings,\n campaignId,\n psbtBase64,\n adminToken,\n baseUrl,\n id,\n token,\n _args25 = arguments;\n return _regenerator().w(function (_context25) {\n while (1) switch (_context25.n) {\n case 0:\n settings = _args25.length > 0 && _args25[0] !== undefined ? _args25[0] : {};\n campaignId = _args25.length > 1 && _args25[1] !== undefined ? _args25[1] : '';\n psbtBase64 = _args25.length > 2 && _args25[2] !== undefined ? _args25[2] : '';\n adminToken = _args25.length > 3 && _args25[3] !== undefined ? _args25[3] : '';\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n id = encodeURIComponent(String(campaignId || '').trim());\n token = String(adminToken || '').trim();\n if (id) {\n _context25.n = 1;\n break;\n }\n throw new Error('campaignId is required');\n case 1:\n if (token) {\n _context25.n = 2;\n break;\n }\n throw new Error('Admin token required for arbiter co-sign.');\n case 2:\n return _context25.a(2, requestJSON(\"\".concat(baseUrl, \"/crowdfunding/campaigns/\").concat(id, \"/payout-sign-arbiter\"), {\n method: 'POST',\n body: {\n psbtBase64: String(psbtBase64 || '').trim()\n },\n apiToken: token\n }));\n }\n }, _callee25);\n }));\n return _postCrowdfundingPayoutSignArbiter.apply(this, arguments);\n}\nfunction postCrowdfundingPayoutBroadcast() {\n return _postCrowdfundingPayoutBroadcast.apply(this, arguments);\n}\n/**\n * Admin: after CLTV height, build arbiter-signed refund tx (vault → destination).\n * Body: destinationAddress, fundedTxid, feeSats?, vout? (optional if unambiguous).\n */\nfunction _postCrowdfundingPayoutBroadcast() {\n _postCrowdfundingPayoutBroadcast = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee26() {\n var settings,\n campaignId,\n psbtBase64,\n baseUrl,\n id,\n _args26 = arguments;\n return _regenerator().w(function (_context26) {\n while (1) switch (_context26.n) {\n case 0:\n settings = _args26.length > 0 && _args26[0] !== undefined ? _args26[0] : {};\n campaignId = _args26.length > 1 && _args26[1] !== undefined ? _args26[1] : '';\n psbtBase64 = _args26.length > 2 && _args26[2] !== undefined ? _args26[2] : '';\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n id = encodeURIComponent(String(campaignId || '').trim());\n if (id) {\n _context26.n = 1;\n break;\n }\n throw new Error('campaignId is required');\n case 1:\n return _context26.a(2, requestJSON(\"\".concat(baseUrl, \"/crowdfunding/campaigns/\").concat(id, \"/payout-broadcast\"), {\n method: 'POST',\n body: {\n psbtBase64: String(psbtBase64 || '').trim()\n }\n }));\n }\n }, _callee26);\n }));\n return _postCrowdfundingPayoutBroadcast.apply(this, arguments);\n}\nfunction postCrowdfundingRefundPrepare() {\n return _postCrowdfundingRefundPrepare.apply(this, arguments);\n}\n/**\n * Compressed secp256k1 pubkey hex for m/44'/0'/0'/0/0 (BIP44 payment account external #0) — Taproot crowdfund beneficiary.\n * Uses the same account + external path as {@link getSpendWalletContext} / Payments. With a master xprv on the identity,\n * derives m/44'/0'/0'/0/0; when locked, uses the persisted spend-account xpub from wallet context if present.\n * Empty string if unavailable.\n */\nfunction _postCrowdfundingRefundPrepare() {\n _postCrowdfundingRefundPrepare = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee27() {\n var settings,\n campaignId,\n body,\n adminToken,\n baseUrl,\n id,\n token,\n b,\n _args27 = arguments;\n return _regenerator().w(function (_context27) {\n while (1) switch (_context27.n) {\n case 0:\n settings = _args27.length > 0 && _args27[0] !== undefined ? _args27[0] : {};\n campaignId = _args27.length > 1 && _args27[1] !== undefined ? _args27[1] : '';\n body = _args27.length > 2 && _args27[2] !== undefined ? _args27[2] : {};\n adminToken = _args27.length > 3 && _args27[3] !== undefined ? _args27[3] : '';\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n id = encodeURIComponent(String(campaignId || '').trim());\n token = String(adminToken || '').trim();\n if (id) {\n _context27.n = 1;\n break;\n }\n throw new Error('campaignId is required');\n case 1:\n if (token) {\n _context27.n = 2;\n break;\n }\n throw new Error('Admin token required for refund prepare.');\n case 2:\n b = body && _typeof(body) === 'object' ? body : {};\n return _context27.a(2, requestJSON(\"\".concat(baseUrl, \"/crowdfunding/campaigns/\").concat(id, \"/refund-prepare\"), {\n method: 'POST',\n body: {\n destinationAddress: String(b.destinationAddress || b.toAddress || '').trim(),\n fundedTxid: String(b.fundedTxid || b.txid || '').trim(),\n feeSats: b.feeSats != null ? Math.max(1, Math.round(Number(b.feeSats))) : undefined,\n vout: b.vout != null && b.vout !== '' ? Number(b.vout) : undefined\n },\n apiToken: token\n }));\n }\n }, _callee27);\n }));\n return _postCrowdfundingRefundPrepare.apply(this, arguments);\n}\nfunction getCrowdfundingBeneficiaryPubkeyHex() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var w = getSpendWalletContext(identity);\n var mat = bitcoinDerivationSecretsFromFabricIdentity(identity);\n var masterXprv = String(mat.xprvForBitcoin || '').trim();\n var masterXpub = String(mat.xpubHint || '').trim();\n var accountXprv = '';\n var accountXpub = '';\n if (masterXprv) {\n try {\n var accountN = getBitcoinBip44AccountForIdentity(identity);\n var d = deriveFabricBitcoinAccountKeys(masterXprv, masterXpub, accountN);\n accountXprv = String(d.xprv || '').trim();\n accountXpub = String(d.xpub || '').trim();\n } catch (e) {\n // Some runtime identity snapshots provide non-master xprv material.\n // Fall back to watch-only account xpub derivation so \"Fill from wallet\" still works.\n accountXpub = String(w.xpub || masterXpub || '').trim();\n if (!accountXpub) return '';\n }\n } else {\n // Crowdfund \"beneficiary pubkey\" should still derive from a logged-in identity xpub,\n // even when wallet context intentionally suppresses watch-only API descriptors.\n accountXpub = String(w.xpub || masterXpub || '').trim();\n if (!accountXpub) return '';\n }\n try {\n var net = getNetworkFromXpub(accountXpub || accountXprv);\n var bip32Inst = new BIP32(ecc);\n var root = accountXprv ? bip32Inst.fromBase58(accountXprv, net) : bip32Inst.fromBase58(accountXpub, net);\n var child = root.derive(0).derive(0);\n return Buffer.from(child.publicKey).toString('hex');\n } catch (e) {\n return '';\n }\n}\n\n/**\n * 32-byte secp256k1 secret for m/44'/0'/0'/0/0 — same leaf as {@link getCrowdfundingBeneficiaryPubkeyHex}.\n * Only when identity master xprv can derive the payment account; null if locked / watch-only.\n * @param {object} identity\n * @returns {Buffer|null}\n */\nfunction getCrowdfundingBeneficiaryPrivateKey32() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var mat = bitcoinDerivationSecretsFromFabricIdentity(identity);\n var masterXprv = String(mat.xprvForBitcoin || '').trim();\n var masterXpub = String(mat.xpubHint || '').trim();\n if (!masterXprv) return null;\n var accountXprv = '';\n var accountXpub = '';\n try {\n var accountN = getBitcoinBip44AccountForIdentity(identity);\n var d = deriveFabricBitcoinAccountKeys(masterXprv, masterXpub, accountN);\n accountXprv = String(d.xprv || '').trim();\n accountXpub = String(d.xpub || '').trim();\n } catch (e) {\n return null;\n }\n if (!accountXprv) return null;\n try {\n var net = getNetworkFromXpub(accountXpub || accountXprv);\n var bip32Inst = new BIP32(ecc);\n var root = bip32Inst.fromBase58(accountXprv, net);\n var child = root.derive(0).derive(0);\n if (!child.privateKey) return null;\n return Buffer.from(child.privateKey);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Default on-chain payout destination: BIP44 account 0 external address index 0 (wpkh), matching beneficiary pubkey path.\n * @param {object} identity\n * @param {string} networkName - Hub network name (regtest, testnet, mainnet, …)\n * @returns {string} address or ''\n */\nfunction getCrowdfundingBeneficiaryPayoutAddress() {\n var identity = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var networkName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var w = getSpendWalletContext(identity);\n var xpub = String(w.xpub || '').trim();\n if (!xpub) return '';\n var derived = deriveReceiveAddressFromXpub(xpub, 0, networkName);\n return derived && derived.address ? String(derived.address) : '';\n}\n\n/**\n * Sign all inputs of a Taproot crowdfund payout PSBT with the beneficiary key (browser-only).\n * @param {string} psbtBase64\n * @param {object} identity\n * @param {string} networkName\n * @returns {string} psbtBase64\n */\nfunction signCrowdfundingPayoutPsbtBeneficiary() {\n var psbtBase64 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var identity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var networkName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'regtest';\n var b64 = String(psbtBase64 || '').trim();\n if (!b64) throw new Error('PSBT base64 is required.');\n var priv = getCrowdfundingBeneficiaryPrivateKey32(identity);\n if (!priv) {\n throw new Error('Unlock identity so the BIP44 payment key (m/44\\'/0\\'/0\\'/0/0) is available to sign.');\n }\n var bitcoin = __webpack_require__(/*! bitcoinjs-lib */ \"./node_modules/bitcoinjs-lib/src/index.js\");\n var crowdfundingTaproot = __webpack_require__(/*! ./crowdfundingTaproot */ \"./functions/crowdfundingTaproot.js\");\n var network = crowdfundingTaproot.networkForFabricName(networkName);\n var psbt;\n try {\n psbt = bitcoin.Psbt.fromBase64(b64, {\n network: network\n });\n } catch (e) {\n throw new Error(e && e.message ? e.message : 'Invalid PSBT.');\n }\n if (psbt.inputCount < 1) throw new Error('PSBT has no inputs.');\n crowdfundingTaproot.signAllInputsWithKey(psbt, priv);\n return psbt.toBase64();\n}\n\n/**\n * BIP21 URI for on-chain payment to a crowdfund vault (`bitcoin:…?amount=`).\n * @param {string} address\n * @param {number} [amountBtc] - optional; omit or non-positive for address-only URI\n * @returns {string}\n */\nfunction buildCrowdfundFunderBitcoinUri(address, amountBtc) {\n var addr = String(address || '').trim();\n if (!addr) return '';\n var n = Number(amountBtc);\n if (!Number.isFinite(n) || n <= 0) return \"bitcoin:\".concat(addr);\n var amt = n.toFixed(8).replace(/\\.?0+$/, '') || '0';\n return \"bitcoin:\".concat(addr, \"?amount=\").concat(amt);\n}\n\n/**\n * In-app Payments path with `payTo` / `payAmountSats` query (see `BitcoinPaymentsHomeRoute`).\n * @param {Object} opts\n * @param {string} [opts.payTo]\n * @param {string} [opts.address] - alias for payTo\n * @param {number} [opts.amountSats]\n */\nfunction buildCrowdfundPaymentsDeepLink() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var payTo = String(opts.payTo || opts.address || '').trim();\n var amountSats = Math.round(Number(opts.amountSats != null ? opts.amountSats : opts.payAmountSats || 0));\n if (!payTo) return '/payments';\n var qs = new URLSearchParams();\n qs.set('payTo', payTo);\n if (Number.isFinite(amountSats) && amountSats > 0) qs.set('payAmountSats', String(amountSats));\n return \"/payments?\".concat(qs.toString());\n}\n\n/**\n * Resolved GET URL for campaign JSON (`…/crowdfunding/campaigns/:id`).\n * @param {Object} settings\n * @param {string} campaignId\n * @returns {string}\n */\nfunction crowdfundCampaignApiUrl() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var campaignId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var id = String(campaignId || '').trim();\n if (!id) return '';\n var baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n if (!baseUrl) return '';\n var root = normalizeBaseUrl(baseUrl);\n return \"\".concat(root, \"/crowdfunding/campaigns/\").concat(encodeURIComponent(id));\n}\nfunction fetchPayjoinCapabilities() {\n return _fetchPayjoinCapabilities.apply(this, arguments);\n}\nfunction _fetchPayjoinCapabilities() {\n _fetchPayjoinCapabilities = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee28() {\n var settings,\n baseUrl,\n result,\n _args28 = arguments;\n return _regenerator().w(function (_context28) {\n while (1) switch (_context28.n) {\n case 0:\n settings = _args28.length > 0 && _args28[0] !== undefined ? _args28[0] : {};\n baseUrl = normalizePayjoinBaseUrl(settings.payjoinBaseUrl || settings.explorerBaseUrl);\n if (baseUrl) {\n _context28.n = 1;\n break;\n }\n return _context28.a(2, {\n available: false\n });\n case 1:\n _context28.n = 2;\n return tryRequests(baseUrl, [{\n path: ''\n }], settings.apiToken);\n case 2:\n result = _context28.v;\n return _context28.a(2, pickObject(result ? result.data : {}, ['capabilities', 'result', 'data']));\n }\n }, _callee28);\n }));\n return _fetchPayjoinCapabilities.apply(this, arguments);\n}\nfunction createPayjoinDeposit() {\n return _createPayjoinDeposit.apply(this, arguments);\n}\nfunction _createPayjoinDeposit() {\n _createPayjoinDeposit = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee29() {\n var settings,\n wallet,\n options,\n baseUrl,\n receiveTemplate,\n payload,\n fed,\n result,\n _args29 = arguments;\n return _regenerator().w(function (_context29) {\n while (1) switch (_context29.n) {\n case 0:\n settings = _args29.length > 0 && _args29[0] !== undefined ? _args29[0] : {};\n wallet = _args29.length > 1 && _args29[1] !== undefined ? _args29[1] : {};\n options = _args29.length > 2 && _args29[2] !== undefined ? _args29[2] : {};\n baseUrl = normalizePayjoinBaseUrl(settings.payjoinBaseUrl || settings.explorerBaseUrl);\n if (baseUrl) {\n _context29.n = 1;\n break;\n }\n throw new Error('Payjoin API base URL is not configured.');\n case 1:\n receiveTemplate = String(options.receiveTemplate || '').trim();\n payload = {\n walletId: wallet.walletId,\n xpub: wallet.xpub,\n address: options.address || wallet.address || '',\n amountSats: Number(options.amountSats || 0),\n label: options.label || '',\n memo: options.memo || '',\n expiresInSeconds: Number(options.expiresInSeconds || 0) || undefined\n };\n if (receiveTemplate) payload.receiveTemplate = receiveTemplate;\n fed = String(options.federationXOnlyHex || '').trim();\n if (fed) payload.federationXOnlyHex = fed;\n _context29.n = 2;\n return tryRequests(baseUrl, [{\n method: 'POST',\n path: '/sessions',\n body: payload\n }], settings.apiToken);\n case 2:\n result = _context29.v;\n return _context29.a(2, pickObject(result ? result.data : {}, ['session', 'result', 'data']));\n }\n }, _callee29);\n }));\n return _createPayjoinDeposit.apply(this, arguments);\n}\nfunction fetchPayjoinSessions() {\n return _fetchPayjoinSessions.apply(this, arguments);\n}\nfunction _fetchPayjoinSessions() {\n _fetchPayjoinSessions = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee30() {\n var settings,\n options,\n baseUrl,\n limit,\n includeExpired,\n result,\n _args30 = arguments;\n return _regenerator().w(function (_context30) {\n while (1) switch (_context30.n) {\n case 0:\n settings = _args30.length > 0 && _args30[0] !== undefined ? _args30[0] : {};\n options = _args30.length > 1 && _args30[1] !== undefined ? _args30[1] : {};\n baseUrl = normalizePayjoinBaseUrl(settings.payjoinBaseUrl || settings.explorerBaseUrl);\n if (baseUrl) {\n _context30.n = 1;\n break;\n }\n return _context30.a(2, []);\n case 1:\n limit = Math.max(1, Math.min(200, Number(options.limit || 25)));\n includeExpired = options.includeExpired !== false;\n _context30.n = 2;\n return tryRequests(baseUrl, [{\n path: \"/sessions?limit=\".concat(limit, \"&includeExpired=\").concat(includeExpired ? 'true' : 'false')\n }], settings.apiToken);\n case 2:\n result = _context30.v;\n return _context30.a(2, pickArray(result ? result.data : {}, ['sessions', 'items', 'results', 'data']));\n }\n }, _callee30);\n }));\n return _fetchPayjoinSessions.apply(this, arguments);\n}\nfunction fetchPayjoinSession() {\n return _fetchPayjoinSession.apply(this, arguments);\n}\nfunction _fetchPayjoinSession() {\n _fetchPayjoinSession = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee31() {\n var settings,\n sessionId,\n baseUrl,\n id,\n result,\n _args31 = arguments;\n return _regenerator().w(function (_context31) {\n while (1) switch (_context31.n) {\n case 0:\n settings = _args31.length > 0 && _args31[0] !== undefined ? _args31[0] : {};\n sessionId = _args31.length > 1 && _args31[1] !== undefined ? _args31[1] : '';\n baseUrl = normalizePayjoinBaseUrl(settings.payjoinBaseUrl || settings.explorerBaseUrl);\n id = encodeURIComponent(String(sessionId || '').trim());\n if (!(!baseUrl || !id)) {\n _context31.n = 1;\n break;\n }\n return _context31.a(2, {});\n case 1:\n _context31.n = 2;\n return tryRequests(baseUrl, [{\n path: \"/sessions/\".concat(id)\n }], settings.apiToken);\n case 2:\n result = _context31.v;\n return _context31.a(2, pickObject(result ? result.data : {}, ['session', 'result', 'data']));\n }\n }, _callee31);\n }));\n return _fetchPayjoinSession.apply(this, arguments);\n}\nfunction submitPayjoinProposal() {\n return _submitPayjoinProposal.apply(this, arguments);\n}\n/**\n * POST .../sessions/:id/acp-hub-boost — Hub appends + signs a wallet input on an ANYONECANPAY|ALL payer PSBT.\n * @param {string} adminToken - setup admin token (Bearer)\n * @param {{ psbt?: string }} [options] - optional PSBT (else server uses latest proposal on session)\n */\nfunction _submitPayjoinProposal() {\n _submitPayjoinProposal = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee32() {\n var settings,\n sessionId,\n proposal,\n baseUrl,\n id,\n payload,\n result,\n _args32 = arguments;\n return _regenerator().w(function (_context32) {\n while (1) switch (_context32.n) {\n case 0:\n settings = _args32.length > 0 && _args32[0] !== undefined ? _args32[0] : {};\n sessionId = _args32.length > 1 && _args32[1] !== undefined ? _args32[1] : '';\n proposal = _args32.length > 2 && _args32[2] !== undefined ? _args32[2] : {};\n baseUrl = normalizePayjoinBaseUrl(settings.payjoinBaseUrl || settings.explorerBaseUrl);\n id = encodeURIComponent(String(sessionId || '').trim());\n if (baseUrl) {\n _context32.n = 1;\n break;\n }\n throw new Error('Payjoin API base URL is not configured.');\n case 1:\n if (id) {\n _context32.n = 2;\n break;\n }\n throw new Error('Payjoin session ID is required.');\n case 2:\n payload = {\n psbt: proposal.psbt || '',\n txhex: proposal.txhex || ''\n };\n _context32.n = 3;\n return tryRequests(baseUrl, [{\n method: 'POST',\n path: \"/sessions/\".concat(id, \"/proposals\"),\n body: payload\n }], settings.apiToken);\n case 3:\n result = _context32.v;\n return _context32.a(2, pickObject(result ? result.data : {}, ['result', 'session', 'data']));\n }\n }, _callee32);\n }));\n return _submitPayjoinProposal.apply(this, arguments);\n}\nfunction applyPayjoinAcpHubBoost() {\n return _applyPayjoinAcpHubBoost.apply(this, arguments);\n}\nfunction _applyPayjoinAcpHubBoost() {\n _applyPayjoinAcpHubBoost = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee33() {\n var settings,\n sessionId,\n adminToken,\n options,\n baseUrl,\n id,\n token,\n root,\n body,\n data,\n _args33 = arguments;\n return _regenerator().w(function (_context33) {\n while (1) switch (_context33.n) {\n case 0:\n settings = _args33.length > 0 && _args33[0] !== undefined ? _args33[0] : {};\n sessionId = _args33.length > 1 && _args33[1] !== undefined ? _args33[1] : '';\n adminToken = _args33.length > 2 && _args33[2] !== undefined ? _args33[2] : '';\n options = _args33.length > 3 && _args33[3] !== undefined ? _args33[3] : {};\n baseUrl = normalizePayjoinBaseUrl(settings.payjoinBaseUrl || settings.explorerBaseUrl);\n id = encodeURIComponent(String(sessionId || '').trim());\n if (baseUrl) {\n _context33.n = 1;\n break;\n }\n throw new Error('Payjoin API base URL is not configured.');\n case 1:\n if (id) {\n _context33.n = 2;\n break;\n }\n throw new Error('Payjoin session ID is required.');\n case 2:\n token = String(adminToken || '').trim();\n if (token) {\n _context33.n = 3;\n break;\n }\n throw new Error('Admin token is required for ACP Hub boost.');\n case 3:\n root = normalizeBaseUrl(baseUrl).replace(/\\/+$/, '');\n body = {};\n if (options && options.psbt) body.psbt = String(options.psbt);\n _context33.n = 4;\n return requestJSON(\"\".concat(root, \"/sessions/\").concat(id, \"/acp-hub-boost\"), {\n method: 'POST',\n body: Object.keys(body).length ? body : undefined,\n apiToken: token\n });\n case 4:\n data = _context33.v;\n return _context33.a(2, data && _typeof(data) === 'object' ? data : {});\n }\n }, _callee33);\n }));\n return _applyPayjoinAcpHubBoost.apply(this, arguments);\n}\nfunction generateBlock() {\n return _generateBlock.apply(this, arguments);\n}\nfunction _generateBlock() {\n _generateBlock = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee34() {\n var settings,\n options,\n baseUrl,\n payload,\n result,\n _args34 = arguments;\n return _regenerator().w(function (_context34) {\n while (1) switch (_context34.n) {\n case 0:\n settings = _args34.length > 0 && _args34[0] !== undefined ? _args34[0] : {};\n options = _args34.length > 1 && _args34[1] !== undefined ? _args34[1] : {};\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n if (baseUrl) {\n _context34.n = 1;\n break;\n }\n throw new Error('Explorer API base URL is not configured.');\n case 1:\n payload = {\n count: Number(options.count || 1)\n };\n if (options.address) payload.address = String(options.address);\n _context34.n = 2;\n return tryRequests(baseUrl, [{\n method: 'POST',\n path: '/blocks',\n body: payload\n }], settings.apiToken);\n case 2:\n result = _context34.v;\n return _context34.a(2, pickObject(result ? result.data : {}, ['result', 'data']));\n }\n }, _callee34);\n }));\n return _generateBlock.apply(this, arguments);\n}\nfunction fetchBitcoinPeers() {\n return _fetchBitcoinPeers.apply(this, arguments);\n}\nfunction _fetchBitcoinPeers() {\n _fetchBitcoinPeers = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee35() {\n var settings,\n baseUrl,\n result,\n data,\n _args35 = arguments,\n _t5;\n return _regenerator().w(function (_context35) {\n while (1) switch (_context35.p = _context35.n) {\n case 0:\n settings = _args35.length > 0 && _args35[0] !== undefined ? _args35[0] : {};\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n if (baseUrl) {\n _context35.n = 1;\n break;\n }\n return _context35.a(2, []);\n case 1:\n _context35.p = 1;\n _context35.n = 2;\n return tryRequests(baseUrl, [{\n path: '/peers'\n }], settings.apiToken);\n case 2:\n result = _context35.v;\n data = result && result.data;\n if (!Array.isArray(data)) {\n _context35.n = 3;\n break;\n }\n return _context35.a(2, data);\n case 3:\n _context35.n = 5;\n break;\n case 4:\n _context35.p = 4;\n _t5 = _context35.v;\n case 5:\n return _context35.a(2, []);\n }\n }, _callee35, null, [[1, 4]]);\n }));\n return _fetchBitcoinPeers.apply(this, arguments);\n}\nfunction fetchBitcoinNetworkSummary() {\n return _fetchBitcoinNetworkSummary.apply(this, arguments);\n}\nfunction _fetchBitcoinNetworkSummary() {\n _fetchBitcoinNetworkSummary = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee36() {\n var settings,\n baseUrl,\n result,\n data,\n _args36 = arguments,\n _t6;\n return _regenerator().w(function (_context36) {\n while (1) switch (_context36.p = _context36.n) {\n case 0:\n settings = _args36.length > 0 && _args36[0] !== undefined ? _args36[0] : {};\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n if (baseUrl) {\n _context36.n = 1;\n break;\n }\n return _context36.a(2, {});\n case 1:\n _context36.p = 1;\n _context36.n = 2;\n return tryRequests(baseUrl, [{\n path: '/network'\n }], settings.apiToken);\n case 2:\n result = _context36.v;\n data = result && result.data;\n if (!(data && _typeof(data) === 'object')) {\n _context36.n = 3;\n break;\n }\n return _context36.a(2, data);\n case 3:\n _context36.n = 5;\n break;\n case 4:\n _context36.p = 4;\n _t6 = _context36.v;\n case 5:\n return _context36.a(2, {});\n }\n }, _callee36, null, [[1, 4]]);\n }));\n return _fetchBitcoinNetworkSummary.apply(this, arguments);\n}\nfunction broadcastRawTransaction() {\n return _broadcastRawTransaction.apply(this, arguments);\n}\nfunction _broadcastRawTransaction() {\n _broadcastRawTransaction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee37() {\n var settings,\n hex,\n opts,\n baseUrl,\n raw,\n adminToken,\n root,\n url,\n headers,\n response,\n text,\n data,\n msg,\n _args37 = arguments;\n return _regenerator().w(function (_context37) {\n while (1) switch (_context37.n) {\n case 0:\n settings = _args37.length > 0 && _args37[0] !== undefined ? _args37[0] : {};\n hex = _args37.length > 1 && _args37[1] !== undefined ? _args37[1] : '';\n opts = _args37.length > 2 && _args37[2] !== undefined ? _args37[2] : {};\n baseUrl = resolveBaseUrl(settings.explorerBaseUrl, '/services/bitcoin');\n if (baseUrl) {\n _context37.n = 1;\n break;\n }\n throw new Error('Explorer API base URL is not configured.');\n case 1:\n raw = String(hex || '').replace(/\\s+/g, '');\n if (raw) {\n _context37.n = 2;\n break;\n }\n throw new Error('Raw transaction hex is required.');\n case 2:\n adminToken = String(opts.adminToken || '').trim();\n root = normalizeBaseUrl(baseUrl);\n url = \"\".concat(root, \"/broadcast\");\n headers = makeHeaders(settings.apiToken, 'POST');\n if (adminToken) headers.Authorization = \"Bearer \".concat(adminToken);\n _context37.n = 3;\n return fetch(url, {\n method: 'POST',\n headers: headers,\n body: JSON.stringify({\n hex: raw\n })\n });\n case 3:\n response = _context37.v;\n _context37.n = 4;\n return response.text()[\"catch\"](function () {\n return '';\n });\n case 4:\n text = _context37.v;\n data = {};\n try {\n data = text ? JSON.parse(text) : {};\n } catch (_) {}\n if (response.ok) {\n _context37.n = 5;\n break;\n }\n msg = data && (data.message || data.error) || \"\".concat(response.status, \" \").concat(response.statusText);\n throw new Error(String(msg));\n case 5:\n return _context37.a(2, data && _typeof(data) === 'object' ? data : {});\n }\n }, _callee37);\n }));\n return _broadcastRawTransaction.apply(this, arguments);\n}\nfunction createLightningInvoice() {\n return _createLightningInvoice.apply(this, arguments);\n}\nfunction _createLightningInvoice() {\n _createLightningInvoice = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee38() {\n var settings,\n wallet,\n invoice,\n baseUrl,\n payload,\n result,\n _args38 = arguments;\n return _regenerator().w(function (_context38) {\n while (1) switch (_context38.n) {\n case 0:\n settings = _args38.length > 0 && _args38[0] !== undefined ? _args38[0] : {};\n wallet = _args38.length > 1 && _args38[1] !== undefined ? _args38[1] : {};\n invoice = _args38.length > 2 && _args38[2] !== undefined ? _args38[2] : {};\n baseUrl = normalizeLightningBaseUrl(settings.lightningBaseUrl || '/services/lightning');\n if (baseUrl) {\n _context38.n = 1;\n break;\n }\n throw new Error('Lightning API base URL is not configured.');\n case 1:\n payload = {\n walletId: wallet.walletId,\n amountSats: Number(invoice.amountSats || 0),\n memo: invoice.memo || ''\n };\n _context38.n = 2;\n return tryRequests(baseUrl, [{\n method: 'POST',\n path: '/invoices',\n body: payload\n }], settings.apiToken);\n case 2:\n result = _context38.v;\n return _context38.a(2, pickObject(result ? result.data : {}, ['invoice', 'result', 'data']));\n }\n }, _callee38);\n }));\n return _createLightningInvoice.apply(this, arguments);\n}\nfunction payLightningInvoice() {\n return _payLightningInvoice.apply(this, arguments);\n}\nfunction _payLightningInvoice() {\n _payLightningInvoice = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee39() {\n var settings,\n wallet,\n invoice,\n baseUrl,\n result,\n _args39 = arguments;\n return _regenerator().w(function (_context39) {\n while (1) switch (_context39.n) {\n case 0:\n settings = _args39.length > 0 && _args39[0] !== undefined ? _args39[0] : {};\n wallet = _args39.length > 1 && _args39[1] !== undefined ? _args39[1] : {};\n invoice = _args39.length > 2 && _args39[2] !== undefined ? _args39[2] : '';\n baseUrl = normalizeLightningBaseUrl(settings.lightningBaseUrl || '/services/lightning');\n if (baseUrl) {\n _context39.n = 1;\n break;\n }\n throw new Error('Lightning API base URL is not configured.');\n case 1:\n if (invoice) {\n _context39.n = 2;\n break;\n }\n throw new Error('Invoice is required.');\n case 2:\n _context39.n = 3;\n return tryRequests(baseUrl, [{\n method: 'POST',\n path: '/payments',\n body: {\n walletId: wallet.walletId,\n invoice: invoice\n }\n }], settings.apiToken);\n case 3:\n result = _context39.v;\n return _context39.a(2, pickObject(result ? result.data : {}, ['payment', 'result', 'data']));\n }\n }, _callee39);\n }));\n return _payLightningInvoice.apply(this, arguments);\n}\nfunction decodeLightningInvoice() {\n return _decodeLightningInvoice.apply(this, arguments);\n}\nfunction _decodeLightningInvoice() {\n _decodeLightningInvoice = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee40() {\n var settings,\n invoice,\n baseUrl,\n result,\n _args40 = arguments;\n return _regenerator().w(function (_context40) {\n while (1) switch (_context40.n) {\n case 0:\n settings = _args40.length > 0 && _args40[0] !== undefined ? _args40[0] : {};\n invoice = _args40.length > 1 && _args40[1] !== undefined ? _args40[1] : '';\n baseUrl = normalizeLightningBaseUrl(settings.lightningBaseUrl || '/services/lightning');\n if (baseUrl) {\n _context40.n = 1;\n break;\n }\n throw new Error('Lightning API base URL is not configured.');\n case 1:\n if (invoice) {\n _context40.n = 2;\n break;\n }\n throw new Error('Invoice is required.');\n case 2:\n _context40.n = 3;\n return tryRequests(baseUrl, [{\n method: 'POST',\n path: '/decodes',\n body: {\n invoice: invoice\n }\n }], settings.apiToken);\n case 3:\n result = _context40.v;\n return _context40.a(2, pickObject(result ? result.data : {}, ['decoded', 'result', 'data']));\n }\n }, _callee40);\n }));\n return _decodeLightningInvoice.apply(this, arguments);\n}\nfunction fetchLightningStatus() {\n return _fetchLightningStatus.apply(this, arguments);\n}\nfunction _fetchLightningStatus() {\n _fetchLightningStatus = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee41() {\n var settings,\n baseUrl,\n result,\n raw,\n _args41 = arguments;\n return _regenerator().w(function (_context41) {\n while (1) switch (_context41.n) {\n case 0:\n settings = _args41.length > 0 && _args41[0] !== undefined ? _args41[0] : {};\n baseUrl = normalizeLightningBaseUrl(settings.lightningBaseUrl || '/services/lightning');\n if (baseUrl) {\n _context41.n = 1;\n break;\n }\n return _context41.a(2, {\n available: false,\n status: 'UNAVAILABLE'\n });\n case 1:\n _context41.n = 2;\n return tryRequests(baseUrl, [{\n path: ''\n }], settings.apiToken);\n case 2:\n result = _context41.v;\n // Return full response so node (depositAddress, balanceSats, balanceUnconfirmedSats) is preserved\n raw = result && result.data && _typeof(result.data) === 'object' ? result.data : {};\n return _context41.a(2, Object.keys(raw).length ? raw : {\n available: false,\n status: 'UNAVAILABLE'\n });\n }\n }, _callee41);\n }));\n return _fetchLightningStatus.apply(this, arguments);\n}\nfunction fetchLightningChannels() {\n return _fetchLightningChannels.apply(this, arguments);\n}\nfunction _fetchLightningChannels() {\n _fetchLightningChannels = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee42() {\n var settings,\n baseUrl,\n result,\n data,\n _args42 = arguments;\n return _regenerator().w(function (_context42) {\n while (1) switch (_context42.n) {\n case 0:\n settings = _args42.length > 0 && _args42[0] !== undefined ? _args42[0] : {};\n baseUrl = normalizeLightningBaseUrl(settings.lightningBaseUrl || '/services/lightning');\n if (baseUrl) {\n _context42.n = 1;\n break;\n }\n return _context42.a(2, {\n channels: [],\n outputs: []\n });\n case 1:\n _context42.n = 2;\n return tryRequests(baseUrl, [{\n path: '/channels'\n }], settings.apiToken);\n case 2:\n result = _context42.v;\n data = result ? result.data : {};\n return _context42.a(2, {\n channels: Array.isArray(data.channels) ? data.channels : [],\n outputs: Array.isArray(data.outputs) ? data.outputs : []\n });\n }\n }, _callee42);\n }));\n return _fetchLightningChannels.apply(this, arguments);\n}\nfunction createLightningChannel() {\n return _createLightningChannel.apply(this, arguments);\n}\nfunction _createLightningChannel() {\n _createLightningChannel = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee43() {\n var settings,\n channel,\n baseUrl,\n remote,\n peerId,\n payload,\n url,\n headers,\n response,\n data,\n text,\n _args43 = arguments,\n _t7;\n return _regenerator().w(function (_context43) {\n while (1) switch (_context43.p = _context43.n) {\n case 0:\n settings = _args43.length > 0 && _args43[0] !== undefined ? _args43[0] : {};\n channel = _args43.length > 1 && _args43[1] !== undefined ? _args43[1] : {};\n baseUrl = normalizeLightningBaseUrl(settings.lightningBaseUrl || '/services/lightning');\n if (baseUrl) {\n _context43.n = 1;\n break;\n }\n throw new Error('Lightning API base URL is not configured.');\n case 1:\n remote = String(channel.remote || channel.connectString || '').trim();\n peerId = String(channel.peerId || channel.peer_id || '').trim();\n if (!(!remote && !peerId)) {\n _context43.n = 2;\n break;\n }\n throw new Error('remote (id@ip:port) or peerId is required');\n case 2:\n payload = {\n peerId: peerId || undefined,\n remote: remote || undefined,\n amountSats: Number(channel.amountSats || channel.amount_sats || 0),\n pushMsat: channel.pushMsat != null ? Number(channel.pushMsat) : channel.push_msat != null ? Number(channel.push_msat) : undefined\n };\n url = assertHubRelativeOrSameOriginRequestUrl(\"\".concat(baseUrl, \"/channels\"));\n headers = makeHeaders(settings.apiToken || '', 'POST');\n _context43.n = 3;\n return fetch(url, {\n method: 'POST',\n headers: headers,\n body: JSON.stringify(payload)\n });\n case 3:\n response = _context43.v;\n data = {};\n _context43.p = 4;\n _context43.n = 5;\n return response.text();\n case 5:\n text = _context43.v;\n data = text ? JSON.parse(text) : {};\n _context43.n = 7;\n break;\n case 6:\n _context43.p = 6;\n _t7 = _context43.v;\n case 7:\n if (response.ok) {\n _context43.n = 8;\n break;\n }\n return _context43.a(2, data && _typeof(data) === 'object' && (data.error || data.detail) ? data : {\n error: 'Channel creation failed',\n detail: response.statusText\n });\n case 8:\n return _context43.a(2, pickObject(data, ['channel', 'result', 'data']) || data);\n }\n }, _callee43, null, [[4, 6]]);\n }));\n return _createLightningChannel.apply(this, arguments);\n}\nmodule.exports = {\n loadUpstreamSettings: loadUpstreamSettings,\n saveUpstreamSettings: saveUpstreamSettings,\n defaultPayjoinPreferences: defaultPayjoinPreferences,\n loadPayjoinPreferences: loadPayjoinPreferences,\n savePayjoinPreferences: savePayjoinPreferences,\n deriveWalletIdFromXpub: deriveWalletIdFromXpub,\n loadSessionBip44Account: loadSessionBip44Account,\n saveSessionBip44Account: saveSessionBip44Account,\n loadPersistedDefaultBip44Raw: loadPersistedDefaultBip44Raw,\n savePersistedDefaultBip44Account: savePersistedDefaultBip44Account,\n hasBip44SessionOverride: hasBip44SessionOverride,\n BITCOIN_PAYMENTS_BIP44_ACCOUNT_INDEX: BITCOIN_PAYMENTS_BIP44_ACCOUNT_INDEX,\n BITCOIN_WALLET_BRANCH_CHANGED: BITCOIN_WALLET_BRANCH_CHANGED,\n deriveFabricBitcoinAccountKeys: deriveFabricBitcoinAccountKeys,\n resolveBitcoinClientAuthToken: resolveBitcoinClientAuthToken,\n loadSpendXpubWatchForIdentity: loadSpendXpubWatchForIdentity,\n saveSpendXpubWatchForIdentity: saveSpendXpubWatchForIdentity,\n clearSpendXpubWatch: clearSpendXpubWatch,\n getWalletContextFromIdentity: getWalletContextFromIdentity,\n getBitcoinBip44AccountForIdentity: getBitcoinBip44AccountForIdentity,\n getSpendWalletContext: getSpendWalletContext,\n getNextReceiveWalletContext: getNextReceiveWalletContext,\n deriveAndStoreReceiveAddress: deriveAndStoreReceiveAddress,\n reserveNextReceiveAddress: reserveNextReceiveAddress,\n getCachedBalance: getCachedBalance,\n setCachedBalance: setCachedBalance,\n clearBalanceCache: clearBalanceCache,\n fetchExplorerData: fetchExplorerData,\n fetchBitcoinStatus: fetchBitcoinStatus,\n fetchBlockByHash: fetchBlockByHash,\n fetchTransactionByHash: fetchTransactionByHash,\n fetchTransactionHex: fetchTransactionHex,\n fetchWalletSummary: fetchWalletSummary,\n fetchWalletSummaryWithCache: fetchWalletSummaryWithCache,\n fetchAddressBalance: fetchAddressBalance,\n fetchReceiveAddress: fetchReceiveAddress,\n fetchUTXOs: fetchUTXOs,\n fetchWalletTransactions: fetchWalletTransactions,\n fetchPayments: fetchPayments,\n fetchCrowdfundingCampaigns: fetchCrowdfundingCampaigns,\n fetchCrowdfundingCampaign: fetchCrowdfundingCampaign,\n createCrowdfundingCampaign: createCrowdfundingCampaign,\n fetchCrowdfundingAcpDonationPsbt: fetchCrowdfundingAcpDonationPsbt,\n fetchCrowdfundingPayoutPsbt: fetchCrowdfundingPayoutPsbt,\n postCrowdfundingPayoutSignArbiter: postCrowdfundingPayoutSignArbiter,\n postCrowdfundingPayoutBroadcast: postCrowdfundingPayoutBroadcast,\n postCrowdfundingRefundPrepare: postCrowdfundingRefundPrepare,\n getCrowdfundingBeneficiaryPubkeyHex: getCrowdfundingBeneficiaryPubkeyHex,\n getCrowdfundingBeneficiaryPrivateKey32: getCrowdfundingBeneficiaryPrivateKey32,\n getCrowdfundingBeneficiaryPayoutAddress: getCrowdfundingBeneficiaryPayoutAddress,\n signCrowdfundingPayoutPsbtBeneficiary: signCrowdfundingPayoutPsbtBeneficiary,\n buildCrowdfundFunderBitcoinUri: buildCrowdfundFunderBitcoinUri,\n buildCrowdfundPaymentsDeepLink: buildCrowdfundPaymentsDeepLink,\n crowdfundCampaignApiUrl: crowdfundCampaignApiUrl,\n fetchPayjoinCapabilities: fetchPayjoinCapabilities,\n createPayjoinDeposit: createPayjoinDeposit,\n fetchPayjoinSessions: fetchPayjoinSessions,\n fetchPayjoinSession: fetchPayjoinSession,\n submitPayjoinProposal: submitPayjoinProposal,\n applyPayjoinAcpHubBoost: applyPayjoinAcpHubBoost,\n generateBlock: generateBlock,\n fetchBitcoinPeers: fetchBitcoinPeers,\n fetchBitcoinNetworkSummary: fetchBitcoinNetworkSummary,\n broadcastRawTransaction: broadcastRawTransaction,\n requestFaucet: requestFaucet,\n sendPayment: sendPayment,\n sendBridgePayment: sendBridgePayment,\n verifyL1Payment: verifyL1Payment,\n createLightningInvoice: createLightningInvoice,\n createLightningChannel: createLightningChannel,\n fetchLightningStatus: fetchLightningStatus,\n fetchLightningChannels: fetchLightningChannels,\n payLightningInvoice: payLightningInvoice,\n decodeLightningInvoice: decodeLightningInvoice\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QkFBdUI7RUFDdkJLLGFBQWEsRUFBYkEsYUFBYTtFQUNiTSxpQkFBaUIsRUFBakJBLGlCQUFpQjtFQUNqQk0sMEJBQTBCLEVBQTFCQSwwQkFBMEI7RUFDMUJNLHVCQUF1QixFQUF2QkEsdUJBQXVCO0VBQ3ZCMUssYUFBYSxFQUFiQSxhQUFhO0VBQ2JNLFdBQVcsRUFBWEEsV0FBVztFQUNYUSxpQkFBaUIsRUFBakJBLGlCQUFpQjtFQUNqQkssZUFBZSxFQUFmQSxlQUFlO0VBQ2Y0SixzQkFBc0IsRUFBdEJBLHNCQUFzQjtFQUN0QjRCLHNCQUFzQixFQUF0QkEsc0JBQXNCO0VBQ3RCWixvQkFBb0IsRUFBcEJBLG9CQUFvQjtFQUNwQkssc0JBQXNCLEVBQXRCQSxzQkFBc0I7RUFDdEJmLG1CQUFtQixFQUFuQkEsbUJBQW1CO0VBQ25CSyxzQkFBc0IsRUFBdEJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2JpdGNvaW5DbGllbnQuanM/OGY4NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3QgQklQMzIgPSByZXF1aXJlKCdiaXAzMicpLmRlZmF1bHQ7XG5jb25zdCBlY2MgPSByZXF1aXJlKCdAZmFicmljL2NvcmUvdHlwZXMvZWNjJyk7XG5jb25zdCBwYXltZW50cyA9IHJlcXVpcmUoJ2JpdGNvaW5qcy1saWIvc3JjL3BheW1lbnRzJyk7XG5jb25zdCB7XG4gIHJlYWRTdG9yYWdlSlNPTixcbiAgd3JpdGVTdG9yYWdlSlNPTixcbiAgcmVhZFN0b3JhZ2VTdHJpbmcsXG4gIHdyaXRlU3RvcmFnZVN0cmluZyxcbiAgcmVtb3ZlU3RvcmFnZUtleVxufSA9IHJlcXVpcmUoJy4vZmFicmljQnJvd3NlclN0YXRlJyk7XG5cbmNvbnN0IFNFVFRJTkdTX0tFWSA9ICdmYWJyaWMuYml0Y29pbi51cHN0cmVhbSc7XG5jb25zdCBQQVlKT0lOX1BSRUZTX0tFWSA9ICdmYWJyaWMuYml0Y29pbi5wYXlqb2luUHJlZmVyZW5jZXMnO1xuY29uc3QgTE9DQUxfV0FMTEVUX0tFWSA9ICdmYWJyaWMuYml0Y29pbi53YWxsZXRzJztcbmNvbnN0IEJBTEFOQ0VfQ0FDSEVfS0VZID0gJ2ZhYnJpYy5iaXRjb2luLmJhbGFuY2VDYWNoZSc7XG5jb25zdCBCQUxBTkNFX0NBQ0hFX01BWF9BR0VfTVMgPSA1ICogNjAgKiAxMDAwOyAvLyA1IG1pbnV0ZXMgLSB1c2UgY2FjaGUgaWYgZmV0Y2ggZmFpbHMgYW5kIGNhY2hlIGlzIG5ld2VyXG4vKiogQGRlcHJlY2F0ZWQgTWlncmF0ZWQgb25jZSBpbnRvIHJlY2VpdmUgKyBzZW5kIGtleXM7IHJlbW92ZWQgYWZ0ZXIgcmVhZC4gKi9cbmNvbnN0IFNFU1NJT05fQklQNDRfQUNDT1VOVF9LRVkgPSAnZmFicmljLmJpdGNvaW4uYmlwNDRBY2NvdW50Jztcbi8qKiBMZWdhY3kgc2Vzc2lvblN0b3JhZ2UgKHBheW1lbnQgZGVyaXZhdGlvbiB1c2VzIGZpeGVkIGFjY291bnQgaW5kZXggMDsga2V5cyBrZXB0IGZvciBtaWdyYXRpb24vdGVzdHMpLiAqL1xuY29uc3QgU0VTU0lPTl9CSVA0NF9SRUNFSVZFX0tFWSA9ICdmYWJyaWMuYml0Y29pbi5iaXA0NFJlY2VpdmVBY2NvdW50Jztcbi8qKiBAc2VlIFNFU1NJT05fQklQNDRfUkVDRUlWRV9LRVkgKi9cbmNvbnN0IFNFU1NJT05fQklQNDRfU0VORF9LRVkgPSAnZmFicmljLmJpdGNvaW4uYmlwNDRTZW5kQWNjb3VudCc7XG4vKiogTGVnYWN5IGxvY2FsU3RvcmFnZSBkZWZhdWx0cyAoU2V0dGluZ3MgVUkgbm8gbG9uZ2VyIHdyaXRlczsgcGF5bWVudCBwYXRoIGlzIGZpeGVkIGFjY291bnQgMCkuICovXG5jb25zdCBMT0NBTF9CSVA0NF9SRUNFSVZFX0RFRkFVTFRfS0VZID0gJ2ZhYnJpYy5iaXRjb2luLmRlZmF1bHRCaXA0NFJlY2VpdmVBY2NvdW50Jztcbi8qKiBAc2VlIExPQ0FMX0JJUDQ0X1JFQ0VJVkVfREVGQVVMVF9LRVkgKi9cbmNvbnN0IExPQ0FMX0JJUDQ0X1NFTkRfREVGQVVMVF9LRVkgPSAnZmFicmljLmJpdGNvaW4uZGVmYXVsdEJpcDQ0U2VuZEFjY291bnQnO1xuLyoqXG4gKiBEZWZhdWx0IEJJUDQ0IGFjY291bnQgaW5kZXggdW5kZXIgdGhlIGlkZW50aXR5IG1hc3RlciB3aGVuIG5vdCB1c2luZyBGYWJyaWMgbXVsdGktYWNjb3VudCBtb2RlLFxuICogb3Igd2hlbiB7QGxpbmsgZmFicmljQWNjb3VudEluZGV4fSBpcyB1bnNldCAoYG0vNDQnLzAnL24nLzAvKmAsIGBtLzQ0Jy8wJy9uJy8xLypgKS5cbiAqL1xuY29uc3QgQklUQ09JTl9QQVlNRU5UU19CSVA0NF9BQ0NPVU5UX0lOREVYID0gMDtcblxuLyoqXG4gKiBCcm93c2VyIEh1YiBCaXRjb2luIGJhbGFuY2Uvc3BlbmQvcmVjZWl2ZSB1c2UgdGhpcyBhY2NvdW50IGluZGV4IHVuZGVyIHRoZSBtYXN0ZXIgeHBydi5cbiAqIFdoZW4ge0BsaW5rIGZhYnJpY0lkZW50aXR5TW9kZX0gaXMgYGFjY291bnRgLCB0aGlzIGZvbGxvd3Mge0BsaW5rIGZhYnJpY0FjY291bnRJbmRleH0gc28gdGhlIHRvcC1iYXJcbiAqIGJhbGFuY2UgbWF0Y2hlcyB0aGUgYWN0aXZlIEZhYnJpYyBhY2NvdW50LlxuICogQHBhcmFtIHtvYmplY3R9IGlkZW50aXR5XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXRCaXRjb2luQmlwNDRBY2NvdW50Rm9ySWRlbnRpdHkgKGlkZW50aXR5ID0ge30pIHtcbiAgaWYgKGlkZW50aXR5ICYmIGlkZW50aXR5LmZhYnJpY0lkZW50aXR5TW9kZSA9PT0gJ2FjY291bnQnKSB7XG4gICAgY29uc3QgcmF3ID0gaWRlbnRpdHkuZmFicmljQWNjb3VudEluZGV4O1xuICAgIGlmIChyYXcgIT0gbnVsbCAmJiByYXcgIT09ICcnKSB7XG4gICAgICBjb25zdCBhaSA9IE1hdGguZmxvb3IoTnVtYmVyKHJhdykpO1xuICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShhaSkgJiYgYWkgPj0gMCAmJiBhaSA8PSAweDdmZmZmZmZmKSByZXR1cm4gYWk7XG4gICAgfVxuICB9XG4gIHJldHVybiBCSVRDT0lOX1BBWU1FTlRTX0JJUDQ0X0FDQ09VTlRfSU5ERVg7XG59XG4vKiogRmlyZWQgd2hlbiBzZXNzaW9uIEJJUDQ0IGtleXMgY2hhbmdlIChsZWdhY3k7IHBheW1lbnQgd2FsbGV0IHVzZXMgYSBmaXhlZCBhY2NvdW50IGFuZCBpZ25vcmVzIHNlc3Npb24gZm9yIGRlcml2YXRpb24pLiAqL1xuY29uc3QgQklUQ09JTl9XQUxMRVRfQlJBTkNIX0NIQU5HRUQgPSAnZmFicmljQml0Y29pbldhbGxldEJyYW5jaENoYW5nZWQnO1xuLyoqXG4gKiBBZnRlciBhIHN1Y2Nlc3NmdWwgdW5sb2NrLCB3ZSBwZXJzaXN0IHRoZSBkZXJpdmVkIEJJUDQ0IHBheW1lbnQtYWNjb3VudCB4cHViIHNvIGEgbG9ja2VkIGlkZW50aXR5XG4gKiAobWFzdGVyIHhwdWIgb25seSkgc3RpbGwgcmVzb2x2ZXMgdGhlIHNhbWUgd2FsbGV0SWQgLyBkZXNjcmlwdG9ycyBhcyB0aGUgYWN0aXZlIGJyb3dzZXIgc2Vzc2lvbi5cbiAqL1xuY29uc3QgU1BFTkRfWFBVQl9XQVRDSF9LRVkgPSAnZmFicmljLmJpdGNvaW4uc3BlbmRYcHViV2F0Y2gnO1xuY29uc3QgeyBzYWZlSWRlbnRpdHlFcnIgfSA9IHJlcXVpcmUoJy4vZmFicmljU2FmZUxvZycpO1xuXG5mdW5jdGlvbiBmYWJyaWNCaXRjb2luV2F0Y2hNYXN0ZXJYcHViIChpZGVudGl0eSA9IHt9KSB7XG4gIGlmIChpZGVudGl0eSAmJiBpZGVudGl0eS5mYWJyaWNJZGVudGl0eU1vZGUgPT09ICdhY2NvdW50JyAmJiBpZGVudGl0eS5tYXN0ZXJYcHViKSB7XG4gICAgcmV0dXJuIFN0cmluZyhpZGVudGl0eS5tYXN0ZXJYcHViKS50cmltKCk7XG4gIH1cbiAgcmV0dXJuIGlkZW50aXR5ICYmIGlkZW50aXR5LnhwdWIgPyBTdHJpbmcoaWRlbnRpdHkueHB1YikudHJpbSgpIDogJyc7XG59XG5cbmZ1bmN0aW9uIGxvYWRTcGVuZFhwdWJXYXRjaEZvcklkZW50aXR5IChpZGVudGl0eSA9IHt9KSB7XG4gIGNvbnN0IGZhYnJpY0lkID0gaWRlbnRpdHkgJiYgaWRlbnRpdHkuaWQgPyBTdHJpbmcoaWRlbnRpdHkuaWQpLnRyaW0oKSA6ICcnO1xuICBjb25zdCBtYXN0ZXJYcHViID0gZmFicmljQml0Y29pbldhdGNoTWFzdGVyWHB1YihpZGVudGl0eSk7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBwID0gcmVhZFN0b3JhZ2VKU09OKFNQRU5EX1hQVUJfV0FUQ0hfS0VZLCBudWxsKTtcbiAgICBpZiAoIXApIHJldHVybiBudWxsO1xuICAgIGlmICghcCB8fCB0eXBlb2YgcCAhPT0gJ29iamVjdCcgfHwgIXAuc3BlbmRBY2NvdW50WHB1YikgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgc3BlbmRYID0gU3RyaW5nKHAuc3BlbmRBY2NvdW50WHB1YikudHJpbSgpO1xuICAgIGlmICghc3BlbmRYKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoZmFicmljSWQpIHtcbiAgICAgIGlmIChTdHJpbmcocC5mYWJyaWNJZGVudGl0eUlkIHx8ICcnKS50cmltKCkgIT09IGZhYnJpY0lkKSByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHAubWFzdGVyWHB1YiAmJiBtYXN0ZXJYcHViICYmIFN0cmluZyhwLm1hc3RlclhwdWIpLnRyaW0oKSAhPT0gbWFzdGVyWHB1Yikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBzcGVuZFg7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzYXZlU3BlbmRYcHViV2F0Y2hGb3JJZGVudGl0eSAoaWRlbnRpdHkgPSB7fSwgd2FsbGV0ID0ge30pIHtcbiAgY29uc3QgZmFicmljSWQgPSBpZGVudGl0eSAmJiBpZGVudGl0eS5pZCA/IFN0cmluZyhpZGVudGl0eS5pZCkudHJpbSgpIDogJyc7XG4gIGNvbnN0IG1hc3RlclhwdWIgPSBmYWJyaWNCaXRjb2luV2F0Y2hNYXN0ZXJYcHViKGlkZW50aXR5KTtcbiAgY29uc3Qgc3BlbmRBY2NvdW50WHB1YiA9IHdhbGxldCAmJiB3YWxsZXQueHB1YiA/IFN0cmluZyh3YWxsZXQueHB1YikudHJpbSgpIDogJyc7XG4gIGlmICghc3BlbmRBY2NvdW50WHB1YiB8fCAhZmFicmljSWRlbnRpdHlIYXNVbmxvY2tlZFNpZ25pbmdGb3JCaXRjb2luKGlkZW50aXR5KSkgcmV0dXJuO1xuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIHdyaXRlU3RvcmFnZUpTT04oU1BFTkRfWFBVQl9XQVRDSF9LRVksIHtcbiAgICAgIGZhYnJpY0lkZW50aXR5SWQ6IGZhYnJpY0lkIHx8IG51bGwsXG4gICAgICBtYXN0ZXJYcHViOiBtYXN0ZXJYcHViIHx8IG51bGwsXG4gICAgICBzcGVuZEFjY291bnRYcHViLFxuICAgICAgd2FsbGV0SWQ6IHdhbGxldC53YWxsZXRJZCA/IFN0cmluZyh3YWxsZXQud2FsbGV0SWQpIDogbnVsbFxuICAgIH0pO1xuICB9IGNhdGNoIChfKSB7fVxufVxuXG5mdW5jdGlvbiBjbGVhclNwZW5kWHB1YldhdGNoICgpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHJlbW92ZVN0b3JhZ2VLZXkoU1BFTkRfWFBVQl9XQVRDSF9LRVkpO1xuICB9IGNhdGNoIChfKSB7fVxufVxuXG5mdW5jdGlvbiBlbWl0Qml0Y29pbldhbGxldEJyYW5jaENoYW5nZWRGcm9tU2Vzc2lvbiAoZGV0YWlsUm9sZSkge1xuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93LmRpc3BhdGNoRXZlbnQpIHJldHVybjtcbiAgICBjb25zdCByID1cbiAgICAgIGRldGFpbFJvbGUgPT09ICdyZWNlaXZlJyB8fCBkZXRhaWxSb2xlID09PSAnc2VuZCcgfHwgZGV0YWlsUm9sZSA9PT0gJ2JvdGgnID8gZGV0YWlsUm9sZSA6ICdib3RoJztcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoQklUQ09JTl9XQUxMRVRfQlJBTkNIX0NIQU5HRUQsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICByb2xlOiByLFxuICAgICAgICByZWNlaXZlOiBsb2FkU2Vzc2lvbkJpcDQ0QWNjb3VudCh7IHJvbGU6ICdyZWNlaXZlJyB9KSxcbiAgICAgICAgc2VuZDogbG9hZFNlc3Npb25CaXA0NEFjY291bnQoeyByb2xlOiAnc2VuZCcgfSlcbiAgICAgIH1cbiAgICB9KSk7XG4gIH0gY2F0Y2ggKF8pIHt9XG59XG5cbmZ1bmN0aW9uIG1pZ3JhdGVMZWdhY3lCaXA0NElmTmVlZGVkICgpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5zZXNzaW9uU3RvcmFnZSkgcmV0dXJuO1xuICAgIGNvbnN0IGxlZ2FjeSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFNFU1NJT05fQklQNDRfQUNDT1VOVF9LRVkpO1xuICAgIGlmIChsZWdhY3kgPT0gbnVsbCB8fCBsZWdhY3kgPT09ICcnKSByZXR1cm47XG4gICAgaWYgKCF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShTRVNTSU9OX0JJUDQ0X1NFTkRfS0VZKSkge1xuICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oU0VTU0lPTl9CSVA0NF9TRU5EX0tFWSwgbGVnYWN5KTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShTRVNTSU9OX0JJUDQ0X1JFQ0VJVkVfS0VZKSkge1xuICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oU0VTU0lPTl9CSVA0NF9SRUNFSVZFX0tFWSwgbGVnYWN5KTtcbiAgICB9XG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oU0VTU0lPTl9CSVA0NF9BQ0NPVU5UX0tFWSk7XG4gIH0gY2F0Y2ggKF8pIHt9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUJhc2VVcmwgKHZhbHVlKSB7XG4gIGNvbnN0IHJhdyA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xuICBpZiAoIXJhdykgcmV0dXJuICcnO1xuICByZXR1cm4gcmF3LnJlcGxhY2UoL1xcLyskLywgJycpO1xufVxuXG4vKipcbiAqIFJlamVjdCBjcm9zcy1vcmlnaW4gYWJzb2x1dGUgVVJMcyBmb3IgaW4tYXBwIEh1YiBBUEkgZmV0Y2hlcyAoTGlnaHRuaW5nIGNoYW5uZWwgY3JlYXRlLCBldGMuKS5cbiAqIEV4cGxvcmVyIGFuZCB0aGlyZC1wYXJ0eSBibG9jayBleHBsb3JlciBVUkxzIGFyZSBoYW5kbGVkIGluIHNlcGFyYXRlIGNvZGUgcGF0aHMuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydEh1YlJlbGF0aXZlT3JTYW1lT3JpZ2luUmVxdWVzdFVybCAodXJsKSB7XG4gIGNvbnN0IHMgPSBTdHJpbmcodXJsIHx8ICcnKTtcbiAgaWYgKCFzKSB0aHJvdyBuZXcgRXJyb3IoJ1VSTCByZXF1aXJlZCcpO1xuICBpZiAocy5zdGFydHNXaXRoKCcvLycpKSB0aHJvdyBuZXcgRXJyb3IoJ1JlZnVzaW5nIHByb3RvY29sLXJlbGF0aXZlIFVSTCcpO1xuICBpZiAoIS9eaHR0cHM/OlxcL1xcLy9pLnRlc3QocykpIHJldHVybiBzO1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5sb2NhdGlvbikgcmV0dXJuIHM7XG4gIGNvbnN0IHAgPSBuZXcgVVJMKHMsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgaWYgKHAub3JpZ2luICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIHJlcXVlc3QgbXVzdCBiZSBzYW1lLW9yaWdpbiBvciBhIHJlbGF0aXZlIHBhdGgnKTtcbiAgfVxuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gbG9hZFVwc3RyZWFtU2V0dGluZ3MgKCkge1xuICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICBleHBsb3JlckJhc2VVcmw6ICcvc2VydmljZXMvYml0Y29pbicsXG4gICAgcGF5bWVudHNCYXNlVXJsOiAnL3BheW1lbnRzJyxcbiAgICBsaWdodG5pbmdCYXNlVXJsOiAnL3NlcnZpY2VzL2xpZ2h0bmluZycsXG4gICAgcGF5am9pbkJhc2VVcmw6ICcvc2VydmljZXMvcGF5am9pbicsXG4gICAgYXBpVG9rZW46ICcnXG4gIH07XG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBkZWZhdWx0cztcbiAgICBjb25zdCBwYXJzZWQgPSByZWFkU3RvcmFnZUpTT04oU0VUVElOR1NfS0VZLCBudWxsKTtcbiAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JykgcmV0dXJuIGRlZmF1bHRzO1xuICAgIHJldHVybiB7XG4gICAgICBleHBsb3JlckJhc2VVcmw6IG5vcm1hbGl6ZUJhc2VVcmwocGFyc2VkICYmIHBhcnNlZC5leHBsb3JlckJhc2VVcmwpIHx8IGRlZmF1bHRzLmV4cGxvcmVyQmFzZVVybCxcbiAgICAgIHBheW1lbnRzQmFzZVVybDogbm9ybWFsaXplUGF5bWVudHNCYXNlVXJsKHBhcnNlZCAmJiBwYXJzZWQucGF5bWVudHNCYXNlVXJsKSxcbiAgICAgIGxpZ2h0bmluZ0Jhc2VVcmw6IG5vcm1hbGl6ZUxpZ2h0bmluZ0Jhc2VVcmwocGFyc2VkICYmIHBhcnNlZC5saWdodG5pbmdCYXNlVXJsKSxcbiAgICAgIHBheWpvaW5CYXNlVXJsOiBub3JtYWxpemVQYXlqb2luQmFzZVVybChwYXJzZWQgJiYgcGFyc2VkLnBheWpvaW5CYXNlVXJsKSxcbiAgICAgIGFwaVRva2VuOiBTdHJpbmcocGFyc2VkICYmIHBhcnNlZC5hcGlUb2tlbiA/IHBhcnNlZC5hcGlUb2tlbiA6ICcnKVxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZGVmYXVsdHM7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0czogUGF5am9pbi1vcmllbnRlZCBmbG93cyBvbiAob3BlcmF0b3IgZGVwb3NpdCwgcGF5bWVudHMgcmVjZWl2ZS9zZW5kIGd1aWRhbmNlKS5cbiAqIFBlcnNpc3RlZCBpbiBsb2NhbFN0b3JhZ2UgZm9yIHRoZSBicm93c2VyIHNlc3Npb24gLyBkZXZpY2UuXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRQYXlqb2luUHJlZmVyZW5jZXMgKCkge1xuICByZXR1cm4ge1xuICAgIG9wZXJhdG9yRGVwb3NpdDogdHJ1ZSxcbiAgICBwYXltZW50c1JlY2VpdmU6IHRydWUsXG4gICAgcGF5bWVudHNTZW5kOiB0cnVlLFxuICAgIC8qKiBEZWZhdWx0IFBheWpvaW4gZGVwb3NpdCBhZGRyZXNzOiBIdWItYnVpbHQgUDJUUiAob3BlcmF0b3IgKyBiZWFjb24gZmVkZXJhdGlvbiByZXNlcnZlIGxlYXZlcykuIEJJUDc3IHVuY2hhbmdlZC4gKi9cbiAgICByZWNlaXZlVGFwcm9vdEpvaW5tYXJrZXQ6IHRydWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9hZFBheWpvaW5QcmVmZXJlbmNlcyAoKSB7XG4gIGNvbnN0IGQgPSBkZWZhdWx0UGF5am9pblByZWZlcmVuY2VzKCk7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4geyAuLi5kIH07XG4gICAgY29uc3QgcCA9IHJlYWRTdG9yYWdlSlNPTihQQVlKT0lOX1BSRUZTX0tFWSwgbnVsbCk7XG4gICAgaWYgKCFwKSByZXR1cm4geyAuLi5kIH07XG4gICAgaWYgKCFwIHx8IHR5cGVvZiBwICE9PSAnb2JqZWN0JykgcmV0dXJuIHsgLi4uZCB9O1xuICAgIHJldHVybiB7IC4uLmQsIC4uLnAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IC4uLmQgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzYXZlUGF5am9pblByZWZlcmVuY2VzIChwYXRjaCA9IHt9KSB7XG4gIGNvbnN0IG5leHQgPSBPYmplY3QuYXNzaWduKGxvYWRQYXlqb2luUHJlZmVyZW5jZXMoKSwgcGF0Y2gpO1xuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd3JpdGVTdG9yYWdlSlNPTihQQVlKT0lOX1BSRUZTX0tFWSwgbmV4dCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gc2F2ZVVwc3RyZWFtU2V0dGluZ3MgKHNldHRpbmdzID0ge30pIHtcbiAgY29uc3QgbmV4dCA9IHtcbiAgICBleHBsb3JlckJhc2VVcmw6IG5vcm1hbGl6ZUJhc2VVcmwoc2V0dGluZ3MuZXhwbG9yZXJCYXNlVXJsKSxcbiAgICBwYXltZW50c0Jhc2VVcmw6IG5vcm1hbGl6ZVBheW1lbnRzQmFzZVVybChzZXR0aW5ncy5wYXltZW50c0Jhc2VVcmwpLFxuICAgIGxpZ2h0bmluZ0Jhc2VVcmw6IG5vcm1hbGl6ZUxpZ2h0bmluZ0Jhc2VVcmwoc2V0dGluZ3MubGlnaHRuaW5nQmFzZVVybCksXG4gICAgcGF5am9pbkJhc2VVcmw6IG5vcm1hbGl6ZVBheWpvaW5CYXNlVXJsKHNldHRpbmdzLnBheWpvaW5CYXNlVXJsKSxcbiAgICBhcGlUb2tlbjogU3RyaW5nKHNldHRpbmdzLmFwaVRva2VuIHx8ICcnKVxuICB9O1xuXG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3cml0ZVN0b3JhZ2VKU09OKFNFVFRJTkdTX0tFWSwgbmV4dCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnZmFicmljQml0Y29pblVwc3RyZWFtQ2hhbmdlZCcsIHsgZGV0YWlsOiBuZXh0IH0pKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuXG4gIHJldHVybiBuZXh0O1xufVxuXG4vKipcbiAqIERlcml2ZSB3YWxsZXQgSUQgZnJvbSB4cHViIHVzaW5nIHRoZSBzYW1lIGZvcm11bGEgYXMgRmFicmljIEJpdGNvaW4gc2VydmljZSAod2FsbGV0TmFtZSkuXG4gKiBFbnN1cmVzIGNsaWVudCB3YWxsZXRJZCBtYXRjaGVzIHRoZSBIdWIncyBpbnRlcm5hbCB3YWxsZXQgbmFtZSB3aGVuIGlkZW50aXRpZXMgYWxpZ24uXG4gKiBAcGFyYW0ge3N0cmluZ30geHB1YiAtIEJJUDMyIGV4dGVuZGVkIHB1YmxpYyBrZXlcbiAqIEByZXR1cm5zIHtzdHJpbmd9IDY0LWNoYXIgaGV4IChTSEEyNTYoU0hBMjU2KHhwdWIpKSlcbiAqL1xuZnVuY3Rpb24gZGVyaXZlV2FsbGV0SWRGcm9tWHB1YiAoeHB1YiA9ICcnKSB7XG4gIGNvbnN0IHJhdyA9IFN0cmluZyh4cHViIHx8ICcnKS50cmltKCk7XG4gIGlmICghcmF3KSByZXR1cm4gJyc7XG4gIGNvbnN0IHByZWltYWdlID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShyYXcpLmRpZ2VzdCgnaGV4Jyk7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHByZWltYWdlKS5kaWdlc3QoJ2hleCcpO1xufVxuXG4vKiogSHViL2NsaWVudCB3YWxsZXQgaWQgZm9yIHRoZSBGYWJyaWMgaWRlbnRpdHkgbWFzdGVyIHhwdWIgKGJlZm9yZSBwZXItYWNjb3VudCBkZXJpdmF0aW9uKS4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5Um9vdFdhbGxldElkIChpZGVudGl0eSA9IHt9KSB7XG4gIGNvbnN0IHhwdWIgPSBpZGVudGl0eSAmJiBpZGVudGl0eS54cHViID8gU3RyaW5nKGlkZW50aXR5LnhwdWIpLnRyaW0oKSA6ICcnO1xuICBpZiAoIXhwdWIpIHJldHVybiAnJztcbiAgcmV0dXJuIGRlcml2ZVdhbGxldElkRnJvbVhwdWIoeHB1Yik7XG59XG5cbmZ1bmN0aW9uIHJlY2VpdmVBY2NvdW50VGFnRnJvbUNvbnRleHQgKHdhbGxldCA9IHt9KSB7XG4gIGNvbnN0IG4gPSB3YWxsZXQuYml0Y29pbkJpcDQ0QWNjb3VudDtcbiAgaWYgKG4gPT0gbnVsbCB8fCBuID09PSAnJykgcmV0dXJuICdtYXN0ZXInO1xuICBjb25zdCBpZHggPSBOdW1iZXIobik7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGlkeCkpIHJldHVybiAnbWFzdGVyJztcbiAgcmV0dXJuIFN0cmluZyhNYXRoLmZsb29yKGlkeCkpO1xufVxuXG4vKipcbiAqIGxvY2FsU3RvcmFnZSBidWNrZXQgZm9yIHRoZSByZWNlaXZlLWFkZHJlc3MgY2hhaW46IG9uZSBpZGVudGl0eSwgb25lIEJJUDQ0IGFjY291bnTigJlzIGV4dGVybmFsIDAvKiBwb29sLlxuICogS2V5cyBieSBpZGVudGl0eSByb290IHNvIHN3aXRjaGluZyDigJxuZXh0IHJlY2VpdmXigJ0gYWNjb3VudCBkb2VzIG5vdCBvcnBoYW4gcHJpb3IgaW5kaWNlcy5cbiAqL1xuZnVuY3Rpb24gcmVjZWl2ZUFkZHJlc3NQb29sU3RvcmFnZUtleSAoaWRlbnRpdHksIHdhbGxldCA9IHt9KSB7XG4gIGNvbnN0IGxlZ2FjeUtleSA9IFN0cmluZyh3YWxsZXQud2FsbGV0SWQgfHwgd2FsbGV0LmlkIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IHJvb3QgPSBpZGVudGl0eVJvb3RXYWxsZXRJZChpZGVudGl0eSk7XG4gIGlmICghcm9vdCB8fCAhbGVnYWN5S2V5KSByZXR1cm4geyBwb29sS2V5OiBsZWdhY3lLZXksIGxlZ2FjeUtleSB9O1xuICBjb25zdCB0YWcgPSByZWNlaXZlQWNjb3VudFRhZ0Zyb21Db250ZXh0KHdhbGxldCk7XG4gIHJldHVybiB7IHBvb2xLZXk6IGAke3Jvb3R9fHJlY3Z8JHt0YWd9YCwgbGVnYWN5S2V5IH07XG59XG5cbmZ1bmN0aW9uIF9iaXA0NEluZGV4RnJvbVN0b3JlZFN0cmluZyAocmF3KSB7XG4gIGlmIChyYXcgPT0gbnVsbCB8fCAhU3RyaW5nKHJhdykudHJpbSgpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcyA9IFN0cmluZyhyYXcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAocyA9PT0gJ21hc3RlcicgfHwgcyA9PT0gJ2xlZ2FjeScpIHJldHVybiBudWxsO1xuICBjb25zdCBuID0gcGFyc2VJbnQocmF3LCAxMCk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG4pIHx8IG4gPCAwIHx8IG4gPiAweDdmZmZmZmZmKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogUmVhZCBwZXJzaXN0ZWQgZGVmYXVsdCBCSVA0NCBicmFuY2ggZnJvbSBsb2NhbFN0b3JhZ2UgKFNldHRpbmdzKS4gRG9lcyBub3QgY29uc2lkZXIgc2Vzc2lvblN0b3JhZ2UuXG4gKiBAcGFyYW0geydyZWNlaXZlJ3wnc2VuZCd9IHJvbGVcbiAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gJ21hc3RlcicsICcwJ+KApiczJywgb3IgbnVsbCBpZiB1bnNldCAoc2FtZSBhcyBtYXN0ZXIgZm9yIGRlcml2YXRpb24pXG4gKi9cbmZ1bmN0aW9uIGxvYWRQZXJzaXN0ZWREZWZhdWx0QmlwNDRSYXcgKHJvbGUpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGtleSA9IHJvbGUgPT09ICdyZWNlaXZlJyA/IExPQ0FMX0JJUDQ0X1JFQ0VJVkVfREVGQVVMVF9LRVkgOiBMT0NBTF9CSVA0NF9TRU5EX0RFRkFVTFRfS0VZO1xuICAgIGNvbnN0IHYgPSByZWFkU3RvcmFnZVN0cmluZyhrZXkpO1xuICAgIGlmICh2ID09IG51bGwgfHwgIVN0cmluZyh2KS50cmltKCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBTdHJpbmcodikudHJpbSgpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geydyZWNlaXZlJ3wnc2VuZCd9IHJvbGVcbiAqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH0gbnVsbCA9IG1hc3RlciB4cHViOyBlbHNlIEJJUDQ0IGFjY291bnQgaW5kZXhcbiAqL1xuZnVuY3Rpb24gX2VmZmVjdGl2ZURlZmF1bHRCaXA0NEluZGV4IChyb2xlKSB7XG4gIHJldHVybiBfYmlwNDRJbmRleEZyb21TdG9yZWRTdHJpbmcobG9hZFBlcnNpc3RlZERlZmF1bHRCaXA0NFJhdyhyb2xlKSk7XG59XG5cbi8qKlxuICogU2F2ZSBkZWZhdWx0IHJlY2VpdmUvc2VuZCBCSVA0NCBicmFuY2ggKFNldHRpbmdzKS4gdmFsdWU6ICdtYXN0ZXInLCAw4oCTMywgb3IgbnVsbCB0byBjbGVhci5cbiAqIEBwYXJhbSB7J3JlY2VpdmUnfCdzZW5kJ30gcm9sZVxuICovXG5mdW5jdGlvbiBzYXZlUGVyc2lzdGVkRGVmYXVsdEJpcDQ0QWNjb3VudCAocm9sZSwgdmFsdWUpIHtcbiAgY29uc3Qga2V5ID0gcm9sZSA9PT0gJ3JlY2VpdmUnID8gTE9DQUxfQklQNDRfUkVDRUlWRV9ERUZBVUxUX0tFWSA6IExPQ0FMX0JJUDQ0X1NFTkRfREVGQVVMVF9LRVk7XG4gIHRyeSB7XG4gICAgbWlncmF0ZUxlZ2FjeUJpcDQ0SWZOZWVkZWQoKTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHJlbW92ZVN0b3JhZ2VLZXkoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xuICAgICAgaWYgKHMgPT09ICdtYXN0ZXInIHx8IHMgPT09ICdsZWdhY3knKSB7XG4gICAgICAgIHdyaXRlU3RvcmFnZVN0cmluZyhrZXksICdtYXN0ZXInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG4gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuKSB8fCBuIDwgMCkgcmVtb3ZlU3RvcmFnZUtleShrZXkpO1xuICAgICAgICBlbHNlIHdyaXRlU3RvcmFnZVN0cmluZyhrZXksIFN0cmluZyhNYXRoLmZsb29yKG4pKSk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGVtaXRCaXRjb2luV2FsbGV0QnJhbmNoQ2hhbmdlZEZyb21TZXNzaW9uKCdib3RoJyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFRydWUgaWYgdGhpcyB0YWIgaGFzIGFuIGV4cGxpY2l0IHNlc3Npb25TdG9yYWdlIG92ZXJyaWRlIChVUkwgcXVlcnkgb3IgbGVnYWN5IHBpY2tlcikuXG4gKiBAcGFyYW0geydyZWNlaXZlJ3wnc2VuZCd9IHJvbGVcbiAqL1xuZnVuY3Rpb24gaGFzQmlwNDRTZXNzaW9uT3ZlcnJpZGUgKHJvbGUpIHtcbiAgdHJ5IHtcbiAgICBtaWdyYXRlTGVnYWN5QmlwNDRJZk5lZWRlZCgpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93LnNlc3Npb25TdG9yYWdlKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgayA9IHJvbGUgPT09ICdyZWNlaXZlJyA/IFNFU1NJT05fQklQNDRfUkVDRUlWRV9LRVkgOiBTRVNTSU9OX0JJUDQ0X1NFTkRfS0VZO1xuICAgIGNvbnN0IHJhdyA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGspO1xuICAgIHJldHVybiByYXcgIT0gbnVsbCAmJiBTdHJpbmcocmF3KS50cmltKCkgIT09ICcnO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogRWZmZWN0aXZlIEJJUDQ0IGFjY291bnQgYWZ0ZXIgc2Vzc2lvbiBvdmVycmlkZSBhbmQgU2V0dGluZ3MgZGVmYXVsdHMuXG4gKiBAcGFyYW0geydyZWNlaXZlJ3wnc2VuZCd9IHJvbGVcbiAqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH0gbnVsbCA9IEZhYnJpYyBtYXN0ZXIgeHB1YjsgMCsgPSBtLzQ0Jy8wJy9uJ1xuICovXG5mdW5jdGlvbiBsb2FkU2Vzc2lvbkJpcDQ0QWNjb3VudCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHJvbGUgPSBvcHRzICYmIG9wdHMucm9sZSA9PT0gJ3JlY2VpdmUnID8gJ3JlY2VpdmUnIDogJ3NlbmQnO1xuICB0cnkge1xuICAgIG1pZ3JhdGVMZWdhY3lCaXA0NElmTmVlZGVkKCk7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiBfZWZmZWN0aXZlRGVmYXVsdEJpcDQ0SW5kZXgocm9sZSk7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHJvbGUgPT09ICdyZWNlaXZlJyA/IFNFU1NJT05fQklQNDRfUkVDRUlWRV9LRVkgOiBTRVNTSU9OX0JJUDQ0X1NFTkRfS0VZO1xuICAgIGNvbnN0IHJhdyA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgaWYgKHJhdyA9PSBudWxsIHx8ICFTdHJpbmcocmF3KS50cmltKCkpIHtcbiAgICAgIHJldHVybiBfZWZmZWN0aXZlRGVmYXVsdEJpcDQ0SW5kZXgocm9sZSk7XG4gICAgfVxuICAgIGNvbnN0IHMgPSBTdHJpbmcocmF3KS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAocyA9PT0gJ21hc3RlcicgfHwgcyA9PT0gJ2xlZ2FjeScpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChyYXcsIDEwKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShuKSB8fCBuIDwgMCB8fCBuID4gMHg3ZmZmZmZmZikge1xuICAgICAgcmV0dXJuIF9lZmZlY3RpdmVEZWZhdWx0QmlwNDRJbmRleChyb2xlKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gX2VmZmVjdGl2ZURlZmF1bHRCaXA0NEluZGV4KHJvbGUpO1xuICB9XG59XG5cbi8qKlxuICogUGVyLXRhYiBzZXNzaW9uU3RvcmFnZSBvdmVycmlkZS4gUGFzcyBudWxsIHRvIHJlbW92ZSBvdmVycmlkZSAodXNlIFNldHRpbmdzIGRlZmF1bHQpLlxuICogUGFzcyAnbWFzdGVyJyB0byBmb3JjZSBtYXN0ZXIgeHB1YiBmb3IgdGhpcyB0YWIgZXZlbiB3aGVuIFNldHRpbmdzIGRlZmF1bHQgaXMgYW4gYWNjb3VudC5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ3xudWxsfHVuZGVmaW5lZH0gdmFsdWUgLSBhY2NvdW50IGluZGV4LCAnbWFzdGVyJywgb3IgbnVsbC8nJyB0byBjbGVhciBvdmVycmlkZVxuICogQHBhcmFtIHt7IHJvbGU/OiAncmVjZWl2ZSd8J3NlbmQnIH19IFtvcHRzXSAtIGRlZmF1bHQgcm9sZSBzZW5kIChQYXltZW50cyAvIEJpdGNvaW4gaG9tZSkuXG4gKi9cbmZ1bmN0aW9uIHNhdmVTZXNzaW9uQmlwNDRBY2NvdW50ICh2YWx1ZSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHJvbGUgPSBvcHRzICYmIG9wdHMucm9sZSA9PT0gJ3JlY2VpdmUnID8gJ3JlY2VpdmUnIDogJ3NlbmQnO1xuICBjb25zdCBrZXkgPSByb2xlID09PSAncmVjZWl2ZScgPyBTRVNTSU9OX0JJUDQ0X1JFQ0VJVkVfS0VZIDogU0VTU0lPTl9CSVA0NF9TRU5EX0tFWTtcbiAgdHJ5IHtcbiAgICBtaWdyYXRlTGVnYWN5QmlwNDRJZk5lZWRlZCgpO1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFN0cmluZyh2YWx1ZSkudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09ICdtYXN0ZXInKSB7XG4gICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGtleSwgJ21hc3RlcicpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFN0cmluZyh2YWx1ZSkudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09ICdsZWdhY3knKSB7XG4gICAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGtleSwgJ21hc3RlcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbiA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG4pIHx8IG4gPCAwKSB7XG4gICAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShrZXksIFN0cmluZyhNYXRoLmZsb29yKG4pKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIGVtaXRCaXRjb2luV2FsbGV0QnJhbmNoQ2hhbmdlZEZyb21TZXNzaW9uKHJvbGUpO1xufVxuXG4vKipcbiAqIERlcml2ZSBleHRlbmRlZCBrZXlzIGF0IG0vNDQnLzAnL2FjY291bnRJbmRleCcgZnJvbSB0aGUgRmFicmljIGlkZW50aXR5IG1hc3RlciAobWF0Y2hlcyBAZmFicmljL2NvcmUgS2V5IEJpdGNvaW4gcGF0aCBzaGFwZSkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFzdGVyWHBydlxuICogQHBhcmFtIHtzdHJpbmd9IG1hc3RlclhwdWIgLSB1c2VkIHRvIHBpY2sgdGVzdC9tYWluIG5ldHdvcmsgZm9yIGJpcDMyIGRlY29kZVxuICogQHBhcmFtIHtudW1iZXJ9IGFjY291bnRJbmRleFxuICovXG5mdW5jdGlvbiBkZXJpdmVGYWJyaWNCaXRjb2luQWNjb3VudEtleXMgKG1hc3RlclhwcnYsIG1hc3RlclhwdWIsIGFjY291bnRJbmRleCkge1xuICBjb25zdCBpZHggPSBNYXRoLmZsb29yKE51bWJlcihhY2NvdW50SW5kZXgpKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaWR4KSB8fCBpZHggPCAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgQklQNDQgYWNjb3VudCBpbmRleC4nKTtcbiAgY29uc3QgZGVjb2RlTmV0d29yayA9IGdldE5ldHdvcmtGcm9tWHB1YihtYXN0ZXJYcHViIHx8IG1hc3RlclhwcnYpO1xuICBjb25zdCBiaXAzMiA9IG5ldyBCSVAzMihlY2MpO1xuICBjb25zdCBtYXN0ZXIgPSBiaXAzMi5mcm9tQmFzZTU4KFN0cmluZyhtYXN0ZXJYcHJ2KS50cmltKCksIGRlY29kZU5ldHdvcmspO1xuICBjb25zdCBwYXRoID0gYG0vNDQnLzAnLyR7aWR4fSdgO1xuICBjb25zdCBhY2N0ID0gbWFzdGVyLmRlcml2ZVBhdGgocGF0aCk7XG4gIHJldHVybiB7XG4gICAgeHBydjogYWNjdC50b0Jhc2U1OCgpLFxuICAgIHhwdWI6IGFjY3QubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgIHBhdGhcbiAgfTtcbn1cblxuLyoqXG4gKiBGYWJyaWMgbWFzdGVyIGtleSBmb3IgQml0Y29pbiBCSVA0NCAobS80NCcvMCcvbicpIGlzIGFsd2F5cyB0aGUgSEQgcm9vdCAobWFzdGVyIHhwcml2KS5cbiAqIFdoZW4ge0BsaW5rIGZhYnJpY0lkZW50aXR5TW9kZX0gaXMgYGFjY291bnRgLCB7QGxpbmsgbWFzdGVyWHBydn0gaG9sZHMgdGhhdCByb290OyB7QGxpbmsgeHBydn0gaXMgdGhlXG4gKiBGYWJyaWMtcHJvdG9jb2wgc2lnbmluZyBrZXkgYXQgbS80NCcvNzc3OCcv4oCmIGFuZCBtdXN0IG5vdCBiZSB1c2VkIGZvciBCaXRjb2luIGRlcml2YXRpb24uXG4gKi9cbmZ1bmN0aW9uIGJpdGNvaW5EZXJpdmF0aW9uU2VjcmV0c0Zyb21GYWJyaWNJZGVudGl0eSAoaWRlbnRpdHkgPSB7fSkge1xuICBpZiAoaWRlbnRpdHkgJiYgaWRlbnRpdHkuZmFicmljSWRlbnRpdHlNb2RlID09PSAnYWNjb3VudCcgJiZcbiAgICAgIHR5cGVvZiBpZGVudGl0eS5tYXN0ZXJYcHJ2ID09PSAnc3RyaW5nJyAmJiBpZGVudGl0eS5tYXN0ZXJYcHJ2LnRyaW0oKSkge1xuICAgIHJldHVybiB7XG4gICAgICB4cHJ2Rm9yQml0Y29pbjogU3RyaW5nKGlkZW50aXR5Lm1hc3RlclhwcnYpLnRyaW0oKSxcbiAgICAgIHhwdWJIaW50OiBpZGVudGl0eS5tYXN0ZXJYcHViID8gU3RyaW5nKGlkZW50aXR5Lm1hc3RlclhwdWIpLnRyaW0oKSA6ICcnXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHhwcnZGb3JCaXRjb2luOiBpZGVudGl0eSAmJiBpZGVudGl0eS54cHJ2ID8gU3RyaW5nKGlkZW50aXR5LnhwcnYpLnRyaW0oKSA6ICcnLFxuICAgIHhwdWJIaW50OiBpZGVudGl0eSAmJiBpZGVudGl0eS54cHViID8gU3RyaW5nKGlkZW50aXR5LnhwdWIpLnRyaW0oKSA6ICcnXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZhYnJpY0lkZW50aXR5SGFzVW5sb2NrZWRTaWduaW5nRm9yQml0Y29pbiAoaWRlbnRpdHkgPSB7fSkge1xuICBpZiAoaWRlbnRpdHkgJiYgaWRlbnRpdHkuZmFicmljSWRlbnRpdHlNb2RlID09PSAnYWNjb3VudCcpIHtcbiAgICByZXR1cm4gISFTdHJpbmcoaWRlbnRpdHkubWFzdGVyWHBydiB8fCAnJykudHJpbSgpO1xuICB9XG4gIHJldHVybiAhIVN0cmluZyhpZGVudGl0eSAmJiBpZGVudGl0eS54cHJ2IHx8ICcnKS50cmltKCk7XG59XG5cbi8qKlxuICogV2FsbGV0IGNvbnRleHQgZm9yIEh1YiBCaXRjb2luIEFQSXMgKHdhbGxldElkLCB4cHViLCDigKYpLlxuICogT25lIGJyb3dzZXIgd2FsbGV0IChvbmUgaWRlbnRpdHkpOiB7QGxpbmsgZ2V0U3BlbmRXYWxsZXRDb250ZXh0fSAvIHtAbGluayBnZXROZXh0UmVjZWl2ZVdhbGxldENvbnRleHR9IGFsd2F5cyB1c2VcbiAqIHtAbGluayBCSVRDT0lOX1BBWU1FTlRTX0JJUDQ0X0FDQ09VTlRfSU5ERVh9IHVuZGVyIHRoZSBtYXN0ZXIuIENhbGxlcnMgbWF5IHBhc3MgYGZpeGVkQml0Y29pbkJpcDQ0QWNjb3VudGAgdG8gb3ZlcnJpZGU7XG4gKiBvdGhlcndpc2Ugc2Vzc2lvbiArIFNldHRpbmdzIGRlZmF1bHRzIGFwcGx5IChsZWdhY3kgLyBhZHZhbmNlZCB1c2UpLlxuICogQHBhcmFtIHtvYmplY3R9IGlkZW50aXR5IC0gRmFicmljIGlkZW50aXR5IChtYXN0ZXIgeHB1YiAvIHhwcnYgb24gdGhlIGlkZW50aXR5IG9iamVjdClcbiAqIEBwYXJhbSB7eyByb2xlPzogJ3JlY2VpdmUnfCdzZW5kJywgZml4ZWRCaXRjb2luQmlwNDRBY2NvdW50PzogbnVtYmVyIH19IFtvcHRzXSAtIHJvbGUgYWZmZWN0cyBsZWdhY3kgc2Vzc2lvbiBsb29rdXAgb25seSB3aGVuIGZpeGVkIGluZGV4IG9taXR0ZWQuXG4gKiBGb3IgSHViIGJyb3dzZXIgcGF5bWVudHMsIHtAbGluayBnZXRTcGVuZFdhbGxldENvbnRleHR9IHBhc3NlcyB7QGxpbmsgZ2V0Qml0Y29pbkJpcDQ0QWNjb3VudEZvcklkZW50aXR5fShpZGVudGl0eSkgc28gaXQgdHJhY2tzIEZhYnJpYyBhY2NvdW50IGluZGV4IHdoZW4gZW5hYmxlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0V2FsbGV0Q29udGV4dEZyb21JZGVudGl0eSAoaWRlbnRpdHkgPSB7fSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1hc3Rlck1hdCA9IGJpdGNvaW5EZXJpdmF0aW9uU2VjcmV0c0Zyb21GYWJyaWNJZGVudGl0eShpZGVudGl0eSk7XG4gIGxldCB4cHViID0gbWFzdGVyTWF0LnhwdWJIaW50O1xuICBsZXQgeHBydiA9IG1hc3Rlck1hdC54cHJ2Rm9yQml0Y29pbjtcbiAgY29uc3QgaWQgPSBpZGVudGl0eSAmJiBpZGVudGl0eS5pZCA/IFN0cmluZyhpZGVudGl0eS5pZCkgOiAnJztcbiAgY29uc3QgYWRkcmVzcyA9IGlkZW50aXR5ICYmIGlkZW50aXR5LmFkZHJlc3MgPyBTdHJpbmcoaWRlbnRpdHkuYWRkcmVzcykgOiAnJztcbiAgY29uc3Qgcm9sZSA9IG9wdHMgJiYgb3B0cy5yb2xlID09PSAncmVjZWl2ZScgPyAncmVjZWl2ZScgOiAnc2VuZCc7XG4gIGNvbnN0IGZpeGVkID0gb3B0cyAmJiBvcHRzLmZpeGVkQml0Y29pbkJpcDQ0QWNjb3VudDtcbiAgY29uc3QgYWNjb3VudE4gPVxuICAgIGZpeGVkICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcihmaXhlZCkpICYmIE51bWJlcihmaXhlZCkgPj0gMFxuICAgICAgPyBNYXRoLmZsb29yKE51bWJlcihmaXhlZCkpXG4gICAgICA6IGxvYWRTZXNzaW9uQmlwNDRBY2NvdW50KHsgcm9sZSB9KTtcblxuICBpZiAoYWNjb3VudE4gIT0gbnVsbCAmJiB4cHJ2KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGQgPSBkZXJpdmVGYWJyaWNCaXRjb2luQWNjb3VudEtleXMoeHBydiwgeHB1YiwgYWNjb3VudE4pO1xuICAgICAgeHB1YiA9IGQueHB1YjtcbiAgICAgIHhwcnYgPSBkLnhwcnY7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbYml0Y29pbkNsaWVudF0gQklQNDQgdGFiIGFjY291bnQgZGVyaXZlIGZhaWxlZDsgdXNpbmcgbWFzdGVyIGtleS4nLCBzYWZlSWRlbnRpdHlFcnIoZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghZmFicmljSWRlbnRpdHlIYXNVbmxvY2tlZFNpZ25pbmdGb3JCaXRjb2luKGlkZW50aXR5KSkge1xuICAgIGNvbnN0IHdhdGNoZWRTcGVuZCA9IGxvYWRTcGVuZFhwdWJXYXRjaEZvcklkZW50aXR5KGlkZW50aXR5KTtcbiAgICBpZiAod2F0Y2hlZFNwZW5kKSB7XG4gICAgICB4cHViID0gd2F0Y2hlZFNwZW5kO1xuICAgICAgeHBydiA9ICcnO1xuICAgIH0gZWxzZSBpZiAoaWRlbnRpdHkgJiYgaWRlbnRpdHkucGFzc3dvcmRQcm90ZWN0ZWQpIHtcbiAgICAgIC8vIExvY2tlZCBGYWJyaWMgaWRlbnRpdHk6IHBheW1lbnQgYWNjb3VudCB4cHViIGlzIG5vdCBkZXJpdmFibGUgZnJvbSB0aGUgc3RvcmVkIG1hc3RlciB4cHViIGFsb25lLlxuICAgICAgLy8gQXZvaWQgcXVlcnlpbmcgdGhlIHdyb25nIGRlc2NyaXB0b3Igc2V0IHVudGlsIGFuIHVubG9jayBwZXJzaXN0cyBzYXZlU3BlbmRYcHViV2F0Y2hGb3JJZGVudGl0eSgpLlxuICAgICAgeHB1YiA9ICcnO1xuICAgICAgeHBydiA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVzZSBGYWJyaWMgSUQgdGhhdCBtYXRjaGVzIGludGVybmFsIHdhbGxldCBuYW1lOiBTSEEyNTYoU0hBMjU2KHhwdWIpKSB3aGVuIHhwdWIgcHJlc2VudFxuICBjb25zdCB3YWxsZXRJZCA9IHhwdWJcbiAgICA/IGRlcml2ZVdhbGxldElkRnJvbVhwdWIoeHB1YilcbiAgICA6IChhZGRyZXNzICYmIC9eW2EtZkEtRjAtOV17NjR9JC8udGVzdChhZGRyZXNzKSA/IGFkZHJlc3MgOiBudWxsKSB8fFxuICAgICAgKGlkICYmIC9eW2EtZkEtRjAtOV17NjR9JC8udGVzdChpZCkgPyBpZCA6IG51bGwpIHx8XG4gICAgICAoKCkgPT4ge1xuICAgICAgICBjb25zdCBiYXNpcyA9IGlkIHx8ICdhbm9ueW1vdXMnO1xuICAgICAgICBjb25zdCBmaW5nZXJwcmludCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoYmFzaXMpLmRpZ2VzdCgnaGV4Jykuc2xpY2UoMCwgMTYpO1xuICAgICAgICByZXR1cm4gYGZhYnJpYy0ke2ZpbmdlcnByaW50fWA7XG4gICAgICB9KSgpO1xuXG4gIGNvbnN0IGZpbmdlcnByaW50ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh4cHViIHx8IGlkIHx8ICdhbm9ueW1vdXMnKS5kaWdlc3QoJ2hleCcpLnNsaWNlKDAsIDE2KTtcblxuICAvKipcbiAgICogQklQODQtc3R5bGUgZGVzY3JpcHRvcnMgZm9yIHRoZSBpZGVudGl0eSdzIHJlY2VpdmUgYW5kIGNoYW5nZSBjaGFpbnMuXG4gICAqIFVzZWQgYnkgdGhlIGFkZHJlc3MgQVBJIChzY2FudHhvdXRzZXQpIHRvIHJldHJpZXZlIHBlci11c2VyIGJhbGFuY2Ugd2hlbiB0eGluZGV4IGlzIGF2YWlsYWJsZS5cbiAgICogRm9ybWF0OiB3cGtoKHhwdWIvMC8qKSByZWNlaXZlLCB3cGtoKHhwdWIvMS8qKSBjaGFuZ2UuXG4gICAqL1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IHhwdWJcbiAgICA/IFtcbiAgICAgICAgeyBkZXNjOiBgd3BraCgke3hwdWJ9LzAvKilgLCBjaGFpbjogJ3JlY2VpdmUnLCBwYXRoOiAnbS8wLyonIH0sXG4gICAgICAgIHsgZGVzYzogYHdwa2goJHt4cHVifS8xLyopYCwgY2hhaW46ICdjaGFuZ2UnLCBwYXRoOiAnbS8xLyonIH1cbiAgICAgIF1cbiAgICA6IFtdO1xuXG4gIGNvbnN0IGhhc1ByaXZhdGVLZXkgPSAhIVN0cmluZyh4cHJ2IHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IG91dCA9IHtcbiAgICB3YWxsZXRJZCxcbiAgICBmaW5nZXJwcmludCxcbiAgICB4cHViLFxuICAgIGhhc1ByaXZhdGVLZXksXG4gICAgZGVzY3JpcHRvcnMsXG4gICAgYml0Y29pbkJpcDQ0QWNjb3VudDogYWNjb3VudE5cbiAgfTtcbiAgaWYgKFN0cmluZyh4cHJ2IHx8ICcnKS50cmltKCkpIG91dC54cHJ2ID0gU3RyaW5nKHhwcnYpLnRyaW0oKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIE9uZSBicm93c2VyIHdhbGxldDogeHB1Yi93YWxsZXRJZCBmb3IgYmFsYW5jZSwgVVRYT3MsIHNwZW5kcywgY2hhbmdlIGNoYWluIChCSVA0NCBhY2NvdW50IGZyb20gRmFicmljIGFjY291bnQgaW5kZXggd2hlbiBpbiBhY2NvdW50IG1vZGUpLiAqL1xuZnVuY3Rpb24gZ2V0U3BlbmRXYWxsZXRDb250ZXh0IChpZGVudGl0eSA9IHt9KSB7XG4gIHJldHVybiBnZXRXYWxsZXRDb250ZXh0RnJvbUlkZW50aXR5KGlkZW50aXR5LCB7XG4gICAgcm9sZTogJ3NlbmQnLFxuICAgIGZpeGVkQml0Y29pbkJpcDQ0QWNjb3VudDogZ2V0Qml0Y29pbkJpcDQ0QWNjb3VudEZvcklkZW50aXR5KGlkZW50aXR5KVxuICB9KTtcbn1cblxuLyoqIFNhbWUgYWNjb3VudCBhcyBzcGVuZHM7IHhwdWIvd2FsbGV0SWQgZm9yIHRoZSBuZXh0IGV4dGVybmFsIHJlY2VpdmUgYWRkcmVzcyAoaW52b2ljZXMsIGRlcG9zaXRzKS4gKi9cbmZ1bmN0aW9uIGdldE5leHRSZWNlaXZlV2FsbGV0Q29udGV4dCAoaWRlbnRpdHkgPSB7fSkge1xuICByZXR1cm4gZ2V0V2FsbGV0Q29udGV4dEZyb21JZGVudGl0eShpZGVudGl0eSwge1xuICAgIHJvbGU6ICdyZWNlaXZlJyxcbiAgICBmaXhlZEJpdGNvaW5CaXA0NEFjY291bnQ6IGdldEJpdGNvaW5CaXA0NEFjY291bnRGb3JJZGVudGl0eShpZGVudGl0eSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE5ldHdvcmtGcm9tWHB1YiAoeHB1YiA9ICcnKSB7XG4gIGNvbnN0IHJhdyA9IFN0cmluZyh4cHViIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGlzVGVzdCA9IHJhdy5zdGFydHNXaXRoKCd0cHViJykgfHwgcmF3LnN0YXJ0c1dpdGgoJ3VwdWInKSB8fCByYXcuc3RhcnRzV2l0aCgndnB1YicpO1xuICByZXR1cm4gaXNUZXN0XG4gICAgPyB7XG4gICAgICAgIGJlY2gzMjogJ3RiJyxcbiAgICAgICAgYmlwMzI6IHsgcHVibGljOiAweDA0MzU4N2NmLCBwcml2YXRlOiAweDA0MzU4Mzk0IH0sXG4gICAgICAgIHB1YktleUhhc2g6IDB4NmYsXG4gICAgICAgIHNjcmlwdEhhc2g6IDB4YzQsXG4gICAgICAgIHdpZjogMHhlZlxuICAgICAgfVxuICAgIDoge1xuICAgICAgICBiZWNoMzI6ICdiYycsXG4gICAgICAgIGJpcDMyOiB7IHB1YmxpYzogMHgwNDg4YjIxZSwgcHJpdmF0ZTogMHgwNDg4YWRlNCB9LFxuICAgICAgICBwdWJLZXlIYXNoOiAweDAwLFxuICAgICAgICBzY3JpcHRIYXNoOiAweDA1LFxuICAgICAgICB3aWY6IDB4ODBcbiAgICAgIH07XG59XG5cbi8qKiBOZXR3b3JrIGNvbmZpZyBmb3IgYml0Y29pbmpzLWxpYiBieSBuYW1lOyB1c2Ugd2hlbiBIdWIgaXMgcmVndGVzdCBzbyBhZGRyZXNzZXMgYXJlIGJjcnQxLiAqL1xuZnVuY3Rpb24gZ2V0TmV0d29ya0ZvckJpdGNvaW5KcyAobmV0d29ya05hbWUgPSAnJykge1xuICBjb25zdCBuID0gU3RyaW5nKG5ldHdvcmtOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAobiA9PT0gJ3JlZ3Rlc3QnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJlY2gzMjogJ2JjcnQnLFxuICAgICAgYmlwMzI6IHsgcHVibGljOiAweDA0MzU4N2NmLCBwcml2YXRlOiAweDA0MzU4Mzk0IH0sXG4gICAgICBwdWJLZXlIYXNoOiAweDZmLFxuICAgICAgc2NyaXB0SGFzaDogMHhjNCxcbiAgICAgIHdpZjogMHhlZlxuICAgIH07XG4gIH1cbiAgaWYgKG4gPT09ICd0ZXN0bmV0JyB8fCBuID09PSAnc2lnbmV0Jykge1xuICAgIHJldHVybiB7XG4gICAgICBiZWNoMzI6ICd0YicsXG4gICAgICBiaXAzMjogeyBwdWJsaWM6IDB4MDQzNTg3Y2YsIHByaXZhdGU6IDB4MDQzNTgzOTQgfSxcbiAgICAgIHB1YktleUhhc2g6IDB4NmYsXG4gICAgICBzY3JpcHRIYXNoOiAweGM0LFxuICAgICAgd2lmOiAweGVmXG4gICAgfTtcbiAgfVxuICBpZiAobiA9PT0gJ21haW5uZXQnIHx8IG4gPT09ICdtYWluJykge1xuICAgIHJldHVybiB7XG4gICAgICBiZWNoMzI6ICdiYycsXG4gICAgICBiaXAzMjogeyBwdWJsaWM6IDB4MDQ4OGIyMWUsIHByaXZhdGU6IDB4MDQ4OGFkZTQgfSxcbiAgICAgIHB1YktleUhhc2g6IDB4MDAsXG4gICAgICBzY3JpcHRIYXNoOiAweDA1LFxuICAgICAgd2lmOiAweDgwXG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbG9hZEJhbGFuY2VDYWNoZSAoKSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4ge307XG4gICAgY29uc3QgcGFyc2VkID0gcmVhZFN0b3JhZ2VKU09OKEJBTEFOQ0VfQ0FDSEVfS0VZLCB7fSk7XG4gICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSByZXR1cm4ge307XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzYXZlQmFsYW5jZUNhY2hlIChzdG9yZSA9IHt9KSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3cml0ZVN0b3JhZ2VKU09OKEJBTEFOQ0VfQ0FDSEVfS0VZLCBzdG9yZSB8fCB7fSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxufVxuXG4vKipcbiAqIEdldCBjYWNoZWQgYmFsYW5jZSBmb3IgYSB3YWxsZXQuIFJldHVybnMgbnVsbCBpZiBubyBjYWNoZSBvciBjYWNoZSBpcyBzdGFsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB3YWxsZXRJZCAtIFdhbGxldCBJRCAoZGVyaXZlZCBmcm9tIHhwdWIpXG4gKiBAcGFyYW0ge251bWJlcn0gW21heEFnZU1zXSAtIE1heCBhZ2UgaW4gbXM7IGlmIGNhY2hlIGlzIG9sZGVyLCByZXR1cm5zIG51bGxcbiAqIEByZXR1cm5zIHt7IGJhbGFuY2VTYXRzOiBudW1iZXIsIGNvbmZpcm1lZFNhdHM6IG51bWJlciwgdW5jb25maXJtZWRTYXRzOiBudW1iZXIsIGZldGNoZWRBdDogbnVtYmVyIH18bnVsbH1cbiAqL1xuZnVuY3Rpb24gZ2V0Q2FjaGVkQmFsYW5jZSAod2FsbGV0SWQgPSAnJywgbWF4QWdlTXMgPSBCQUxBTkNFX0NBQ0hFX01BWF9BR0VfTVMpIHtcbiAgY29uc3QgaWQgPSBTdHJpbmcod2FsbGV0SWQgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XG4gIGlmIChtYXhBZ2VNcyA9PT0gMCkgcmV0dXJuIG51bGw7IC8vIGJ5cGFzcyBjYWNoZSB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkXG4gIGNvbnN0IHN0b3JlID0gbG9hZEJhbGFuY2VDYWNoZSgpO1xuICBjb25zdCBlbnRyeSA9IHN0b3JlW2lkXTtcbiAgaWYgKCFlbnRyeSB8fCB0eXBlb2YgZW50cnkgIT09ICdvYmplY3QnKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgZmV0Y2hlZEF0ID0gTnVtYmVyKGVudHJ5LmZldGNoZWRBdCB8fCAwKTtcbiAgaWYgKGZldGNoZWRBdCA8PSAwIHx8IChtYXhBZ2VNcyA+IDAgJiYgRGF0ZS5ub3coKSAtIGZldGNoZWRBdCA+IG1heEFnZU1zKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7XG4gICAgYmFsYW5jZVNhdHM6IE51bWJlcihlbnRyeS5iYWxhbmNlU2F0cyB8fCAwKSxcbiAgICBjb25maXJtZWRTYXRzOiBOdW1iZXIoZW50cnkuY29uZmlybWVkU2F0cyB8fCBlbnRyeS5iYWxhbmNlU2F0cyB8fCAwKSxcbiAgICB1bmNvbmZpcm1lZFNhdHM6IE51bWJlcihlbnRyeS51bmNvbmZpcm1lZFNhdHMgfHwgMCksXG4gICAgZmV0Y2hlZEF0XG4gIH07XG59XG5cbi8qKlxuICogU2F2ZSBiYWxhbmNlIHRvIGNhY2hlLiBPbmx5IHN0b3JlcyBub24tc2Vuc2l0aXZlIGRhdGEgKG5vIGtleXMpLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZWRCYWxhbmNlICh3YWxsZXRJZCA9ICcnLCBkYXRhID0ge30pIHtcbiAgY29uc3QgaWQgPSBTdHJpbmcod2FsbGV0SWQgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFpZCkgcmV0dXJuO1xuICBjb25zdCBzdG9yZSA9IGxvYWRCYWxhbmNlQ2FjaGUoKTtcbiAgc3RvcmVbaWRdID0ge1xuICAgIGJhbGFuY2VTYXRzOiBOdW1iZXIoZGF0YS5iYWxhbmNlU2F0cyA/PyBkYXRhLmJhbGFuY2UgPz8gMCksXG4gICAgY29uZmlybWVkU2F0czogTnVtYmVyKGRhdGEuY29uZmlybWVkU2F0cyA/PyBkYXRhLmJhbGFuY2VTYXRzID8/IGRhdGEuYmFsYW5jZSA/PyAwKSxcbiAgICB1bmNvbmZpcm1lZFNhdHM6IE51bWJlcihkYXRhLnVuY29uZmlybWVkU2F0cyA/PyAwKSxcbiAgICBmZXRjaGVkQXQ6IERhdGUubm93KClcbiAgfTtcbiAgc2F2ZUJhbGFuY2VDYWNoZShzdG9yZSk7XG59XG5cbi8qKlxuICogQ2xlYXIgYmFsYW5jZSBjYWNoZSBmb3IgYSB3YWxsZXQuIENhbGwgYWZ0ZXIgZmF1Y2V0IG9yIGJsb2NrIGdlbmVyYXRpb24gc28gdGhlIG5leHRcbiAqIGZldGNoIHJldHVybnMgZnJlc2ggZGF0YSBpbnN0ZWFkIG9mIHN0YWxlIDAuXG4gKi9cbmZ1bmN0aW9uIGNsZWFyQmFsYW5jZUNhY2hlICh3YWxsZXRJZCA9ICcnKSB7XG4gIGNvbnN0IGlkID0gU3RyaW5nKHdhbGxldElkIHx8ICcnKS50cmltKCk7XG4gIGlmICghaWQpIHJldHVybjtcbiAgY29uc3Qgc3RvcmUgPSBsb2FkQmFsYW5jZUNhY2hlKCk7XG4gIGRlbGV0ZSBzdG9yZVtpZF07XG4gIHNhdmVCYWxhbmNlQ2FjaGUoc3RvcmUpO1xufVxuXG5mdW5jdGlvbiBsb2FkTG9jYWxXYWxsZXRTdG9yZSAoKSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4ge307XG4gICAgY29uc3QgcGFyc2VkID0gcmVhZFN0b3JhZ2VKU09OKExPQ0FMX1dBTExFVF9LRVksIHt9KTtcbiAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHJldHVybiB7fTtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHNhdmVMb2NhbFdhbGxldFN0b3JlIChzdG9yZSA9IHt9KSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3cml0ZVN0b3JhZ2VKU09OKExPQ0FMX1dBTExFVF9LRVksIHN0b3JlIHx8IHt9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG59XG5cbi8qKlxuICogRGVyaXZlIHJlY2VpdmUgYWRkcmVzcyBmcm9tIHhwdWIgYXQgaW5kZXguXG4gKiBAcGFyYW0ge3N0cmluZ30geHB1YiAtIEV4dGVuZGVkIHB1YmxpYyBrZXlcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIEFkZHJlc3MgaW5kZXhcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmV0d29ya05hbWVdIC0gSHViIG5ldHdvcmsgKCdyZWd0ZXN0JywgJ3Rlc3RuZXQnLCAnbWFpbm5ldCcpIHNvIGFkZHJlc3MgdXNlcyBiY3J0MS90YjEvYmMxOyBvbWl0IHRvIGluZmVyIGZyb20geHB1YlxuICovXG5mdW5jdGlvbiBkZXJpdmVSZWNlaXZlQWRkcmVzc0Zyb21YcHViICh4cHViID0gJycsIGluZGV4ID0gMCwgbmV0d29ya05hbWUgPSAnJykge1xuICBpZiAoIXhwdWIpIHJldHVybiBudWxsO1xuICBjb25zdCBiaXAzMiA9IG5ldyBCSVAzMihlY2MpO1xuICBjb25zdCBkZWNvZGVOZXR3b3JrID0gZ2V0TmV0d29ya0Zyb21YcHViKHhwdWIpO1xuICBjb25zdCBhY2NvdW50ID0gYmlwMzIuZnJvbUJhc2U1OChTdHJpbmcoeHB1YiksIGRlY29kZU5ldHdvcmspO1xuICBjb25zdCBjaGlsZCA9IGFjY291bnQuZGVyaXZlKDApLmRlcml2ZShOdW1iZXIoaW5kZXggfHwgMCkpO1xuICBjb25zdCBwdWJrZXkgPSBjaGlsZC5wdWJsaWNLZXk7XG4gIGNvbnN0IGFkZHJlc3NOZXR3b3JrID0gKG5ldHdvcmtOYW1lICYmIGdldE5ldHdvcmtGb3JCaXRjb2luSnMobmV0d29ya05hbWUpKSB8fCBkZWNvZGVOZXR3b3JrO1xuICBjb25zdCBwYXltZW50ID0gcGF5bWVudHMucDJ3cGtoKHsgcHVia2V5LCBuZXR3b3JrOiBhZGRyZXNzTmV0d29yayB9KTtcbiAgaWYgKCFwYXltZW50IHx8ICFwYXltZW50LmFkZHJlc3MpIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IFN0cmluZyhwYXltZW50LmFkZHJlc3MpLFxuICAgIGRlcml2YXRpb25QYXRoOiBgbS8wLyR7TnVtYmVyKGluZGV4IHx8IDApfWAsXG4gICAgaW5kZXg6IE51bWJlcihpbmRleCB8fCAwKSxcbiAgICB0eXBlOiAncDJ3cGtoJ1xuICB9O1xufVxuXG4vKipcbiAqIERlcml2ZSBhZGRyZXNzIGZyb20geHB1YiBhdCBjaGFpbi9pbmRleC4gQ2hhaW4gMCA9IHJlY2VpdmUsIDEgPSBjaGFuZ2UuXG4gKi9cbmZ1bmN0aW9uIGRlcml2ZUFkZHJlc3NGcm9tWHB1YiAoeHB1YiA9ICcnLCBjaGFpbiA9IDAsIGluZGV4ID0gMCwgbmV0d29ya05hbWUgPSAnJykge1xuICBpZiAoIXhwdWIpIHJldHVybiBudWxsO1xuICBjb25zdCBiaXAzMiA9IG5ldyBCSVAzMihlY2MpO1xuICBjb25zdCBkZWNvZGVOZXR3b3JrID0gZ2V0TmV0d29ya0Zyb21YcHViKHhwdWIpO1xuICBjb25zdCBhY2NvdW50ID0gYmlwMzIuZnJvbUJhc2U1OChTdHJpbmcoeHB1YiksIGRlY29kZU5ldHdvcmspO1xuICBjb25zdCBjaGlsZCA9IGFjY291bnQuZGVyaXZlKE51bWJlcihjaGFpbikpLmRlcml2ZShOdW1iZXIoaW5kZXgpKTtcbiAgY29uc3QgcHVia2V5ID0gY2hpbGQucHVibGljS2V5O1xuICBjb25zdCBhZGRyZXNzTmV0d29yayA9IChuZXR3b3JrTmFtZSAmJiBnZXROZXR3b3JrRm9yQml0Y29pbkpzKG5ldHdvcmtOYW1lKSkgfHwgZGVjb2RlTmV0d29yaztcbiAgY29uc3QgcGF5bWVudCA9IHBheW1lbnRzLnAyd3BraCh7IHB1YmtleSwgbmV0d29yazogYWRkcmVzc05ldHdvcmsgfSk7XG4gIGlmICghcGF5bWVudCB8fCAhcGF5bWVudC5hZGRyZXNzKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHBheW1lbnQuYWRkcmVzcztcbn1cblxuLyoqXG4gKiBEZXJpdmUgd2F0Y2ggYWRkcmVzc2VzIGZvciBtZW1wb29sIHNjYW4uIFJldHVybnMgYWRkcmVzc2VzIGZvciByZWNlaXZlICgwLyopIGFuZCBjaGFuZ2UgKDEvKikuXG4gKiBVc2VkIHRvIGRldGVjdCB1bmNvbmZpcm1lZCBpbmNvbWluZyBwYXltZW50cy5cbiAqL1xuZnVuY3Rpb24gZGVyaXZlV2F0Y2hBZGRyZXNzZXMgKHdhbGxldCA9IHt9LCBuZXR3b3JrTmFtZSA9ICcnLCBtYXhSZWNlaXZlID0gMjUsIG1heENoYW5nZSA9IDI1KSB7XG4gIGNvbnN0IHhwdWIgPSBTdHJpbmcod2FsbGV0LnhwdWIgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCF4cHViKSByZXR1cm4gW107XG4gIGNvbnN0IGFkZHJzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4UmVjZWl2ZTsgaSsrKSB7XG4gICAgY29uc3QgYSA9IGRlcml2ZUFkZHJlc3NGcm9tWHB1Yih4cHViLCAwLCBpLCBuZXR3b3JrTmFtZSk7XG4gICAgaWYgKGEpIGFkZHJzLnB1c2goYSk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhDaGFuZ2U7IGkrKykge1xuICAgIGNvbnN0IGEgPSBkZXJpdmVBZGRyZXNzRnJvbVhwdWIoeHB1YiwgMSwgaSwgbmV0d29ya05hbWUpO1xuICAgIGlmIChhKSBhZGRycy5wdXNoKGEpO1xuICB9XG4gIHJldHVybiBhZGRycztcbn1cblxuZnVuY3Rpb24gZGVyaXZlQW5kU3RvcmVSZWNlaXZlQWRkcmVzcyAod2FsbGV0ID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBpZGVudGl0eSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5pZGVudGl0eTtcbiAgY29uc3QgbmV0d29ya05hbWUgPSBvcHRpb25zICYmIG9wdGlvbnMubmV0d29yaztcbiAgY29uc3QgeHB1YiA9IFN0cmluZyh3YWxsZXQueHB1YiB8fCAnJykudHJpbSgpO1xuICBjb25zdCBsZWdhY3lLZXkgPSBTdHJpbmcod2FsbGV0LndhbGxldElkIHx8IHdhbGxldC5pZCB8fCAnJykudHJpbSgpO1xuICBpZiAoIWxlZ2FjeUtleSB8fCAheHB1YikgcmV0dXJuIG51bGw7XG5cbiAgbGV0IHN0b3JhZ2VLZXkgPSBsZWdhY3lLZXk7XG4gIGlmIChpZGVudGl0eSAmJiB0eXBlb2YgaWRlbnRpdHkgPT09ICdvYmplY3QnICYmIGlkZW50aXR5LnhwdWIpIHtcbiAgICBjb25zdCB7IHBvb2xLZXkgfSA9IHJlY2VpdmVBZGRyZXNzUG9vbFN0b3JhZ2VLZXkoaWRlbnRpdHksIHdhbGxldCk7XG4gICAgaWYgKHBvb2xLZXkpIHN0b3JhZ2VLZXkgPSBwb29sS2V5O1xuICB9XG5cbiAgY29uc3Qgc3RvcmUgPSBsb2FkTG9jYWxXYWxsZXRTdG9yZSgpO1xuICBsZXQgY3VycmVudCA9IChzdG9yZVtzdG9yYWdlS2V5XSAmJiB0eXBlb2Ygc3RvcmVbc3RvcmFnZUtleV0gPT09ICdvYmplY3QnKSA/IHN0b3JlW3N0b3JhZ2VLZXldIDoge307XG4gIGxldCBtaWdyYXRlZEZyb21MZWdhY3kgPSBmYWxzZTtcblxuICBpZiAoXG4gICAgKCFBcnJheS5pc0FycmF5KGN1cnJlbnQucmVjZWl2ZUFkZHJlc3NlcykgfHwgY3VycmVudC5yZWNlaXZlQWRkcmVzc2VzLmxlbmd0aCA9PT0gMCkgJiZcbiAgICBzdG9yYWdlS2V5ICE9PSBsZWdhY3lLZXkgJiZcbiAgICBzdG9yZVtsZWdhY3lLZXldICYmXG4gICAgdHlwZW9mIHN0b3JlW2xlZ2FjeUtleV0gPT09ICdvYmplY3QnXG4gICkge1xuICAgIGNvbnN0IGxlZyA9IHN0b3JlW2xlZ2FjeUtleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGVnLnJlY2VpdmVBZGRyZXNzZXMpICYmIGxlZy5yZWNlaXZlQWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGN1cnJlbnQgPSB7IC4uLmxlZywgeHB1YiB9O1xuICAgICAgbWlncmF0ZWRGcm9tTGVnYWN5ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBhZGRyZXNzZXMgPSBBcnJheS5pc0FycmF5KGN1cnJlbnQucmVjZWl2ZUFkZHJlc3NlcykgPyBjdXJyZW50LnJlY2VpdmVBZGRyZXNzZXMgOiBbXTtcblxuICBpZiAobWlncmF0ZWRGcm9tTGVnYWN5ICYmIGFkZHJlc3Nlcy5sZW5ndGggPiAwICYmIHN0b3JhZ2VLZXkgIT09IGxlZ2FjeUtleSkge1xuICAgIHN0b3JlW3N0b3JhZ2VLZXldID0ge1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIGlkOiBsZWdhY3lLZXksXG4gICAgICB4cHViLFxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICB9O1xuICAgIHNhdmVMb2NhbFdhbGxldFN0b3JlKHN0b3JlKTtcbiAgfVxuXG4gIGlmIChhZGRyZXNzZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxhdGVzdCA9IGFkZHJlc3Nlc1thZGRyZXNzZXMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgaWR4ID0gTnVtYmVyKGxhdGVzdC5pbmRleCA/PyAwKTtcbiAgICBjb25zdCBkZXJpdmVkID0gZGVyaXZlUmVjZWl2ZUFkZHJlc3NGcm9tWHB1Yih4cHViLCBpZHgsIG5ldHdvcmtOYW1lKTtcbiAgICBjb25zdCBjdXJyZW50QWRkcmVzcyA9IGRlcml2ZWQgPyBkZXJpdmVkLmFkZHJlc3MgOiAobGF0ZXN0LmFkZHJlc3MgfHwgJycpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogbGVnYWN5S2V5LFxuICAgICAgY3VycmVudEFkZHJlc3MsXG4gICAgICBjdXJyZW50SW5kZXg6IGlkeCxcbiAgICAgIHJlY2VpdmVBZGRyZXNzZXM6IGFkZHJlc3Nlc1xuICAgIH07XG4gIH1cblxuICBjb25zdCBkZXJpdmVkID0gZGVyaXZlUmVjZWl2ZUFkZHJlc3NGcm9tWHB1Yih4cHViLCAwLCBuZXR3b3JrTmFtZSk7XG4gIGlmICghZGVyaXZlZCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgbmV4dFdhbGxldCA9IHtcbiAgICBpZDogbGVnYWN5S2V5LFxuICAgIHhwdWIsXG4gICAgY3VycmVudEluZGV4OiBkZXJpdmVkLmluZGV4LFxuICAgIGN1cnJlbnRBZGRyZXNzOiBkZXJpdmVkLmFkZHJlc3MsXG4gICAgcmVjZWl2ZUFkZHJlc3NlczogW2Rlcml2ZWRdLFxuICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIH07XG5cbiAgc3RvcmVbc3RvcmFnZUtleV0gPSBuZXh0V2FsbGV0O1xuICBzYXZlTG9jYWxXYWxsZXRTdG9yZShzdG9yZSk7XG4gIHJldHVybiBuZXh0V2FsbGV0O1xufVxuXG5mdW5jdGlvbiByZXNlcnZlTmV4dFJlY2VpdmVBZGRyZXNzICh3YWxsZXQgPSB7fSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGlkZW50aXR5ID0gb3B0aW9ucyAmJiBvcHRpb25zLmlkZW50aXR5O1xuICBjb25zdCBuZXR3b3JrTmFtZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5uZXR3b3JrO1xuICBjb25zdCB4cHViID0gU3RyaW5nKHdhbGxldC54cHViIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGxlZ2FjeUtleSA9IFN0cmluZyh3YWxsZXQud2FsbGV0SWQgfHwgd2FsbGV0LmlkIHx8ICcnKS50cmltKCk7XG4gIGlmICghbGVnYWN5S2V5IHx8ICF4cHViKSByZXR1cm4gbnVsbDtcblxuICBsZXQgc3RvcmFnZUtleSA9IGxlZ2FjeUtleTtcbiAgaWYgKGlkZW50aXR5ICYmIHR5cGVvZiBpZGVudGl0eSA9PT0gJ29iamVjdCcgJiYgaWRlbnRpdHkueHB1Yikge1xuICAgIGNvbnN0IHsgcG9vbEtleSB9ID0gcmVjZWl2ZUFkZHJlc3NQb29sU3RvcmFnZUtleShpZGVudGl0eSwgd2FsbGV0KTtcbiAgICBpZiAocG9vbEtleSkgc3RvcmFnZUtleSA9IHBvb2xLZXk7XG4gIH1cblxuICBjb25zdCBzdG9yZSA9IGxvYWRMb2NhbFdhbGxldFN0b3JlKCk7XG4gIGxldCBjdXJyZW50ID0gKHN0b3JlW3N0b3JhZ2VLZXldICYmIHR5cGVvZiBzdG9yZVtzdG9yYWdlS2V5XSA9PT0gJ29iamVjdCcpID8gc3RvcmVbc3RvcmFnZUtleV0gOiB7XG4gICAgaWQ6IGxlZ2FjeUtleSxcbiAgICB4cHViLFxuICAgIGN1cnJlbnRJbmRleDogLTEsXG4gICAgcmVjZWl2ZUFkZHJlc3NlczogW11cbiAgfTtcblxuICBpZiAoXG4gICAgKCFBcnJheS5pc0FycmF5KGN1cnJlbnQucmVjZWl2ZUFkZHJlc3NlcykgfHwgY3VycmVudC5yZWNlaXZlQWRkcmVzc2VzLmxlbmd0aCA9PT0gMCkgJiZcbiAgICBzdG9yYWdlS2V5ICE9PSBsZWdhY3lLZXkgJiZcbiAgICBzdG9yZVtsZWdhY3lLZXldICYmXG4gICAgdHlwZW9mIHN0b3JlW2xlZ2FjeUtleV0gPT09ICdvYmplY3QnXG4gICkge1xuICAgIGNvbnN0IGxlZyA9IHN0b3JlW2xlZ2FjeUtleV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGVnLnJlY2VpdmVBZGRyZXNzZXMpICYmIGxlZy5yZWNlaXZlQWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGN1cnJlbnQgPSB7IC4uLmxlZywgeHB1YiB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHByZXZBZGRycyA9IEFycmF5LmlzQXJyYXkoY3VycmVudC5yZWNlaXZlQWRkcmVzc2VzKSA/IGN1cnJlbnQucmVjZWl2ZUFkZHJlc3NlcyA6IFtdO1xuICBjb25zdCBuZXh0SW5kZXggPSBOdW1iZXIoY3VycmVudC5jdXJyZW50SW5kZXggIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50LmN1cnJlbnRJbmRleCAhPT0gbnVsbFxuICAgID8gY3VycmVudC5jdXJyZW50SW5kZXhcbiAgICA6IC0xKSArIDE7XG4gIGNvbnN0IGRlcml2ZWQgPSBkZXJpdmVSZWNlaXZlQWRkcmVzc0Zyb21YcHViKHhwdWIsIG5leHRJbmRleCwgbmV0d29ya05hbWUpO1xuICBpZiAoIWRlcml2ZWQpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IG5leHRXYWxsZXQgPSB7XG4gICAgLi4uY3VycmVudCxcbiAgICBpZDogbGVnYWN5S2V5LFxuICAgIHhwdWIsXG4gICAgY3VycmVudEluZGV4OiBuZXh0SW5kZXgsXG4gICAgY3VycmVudEFkZHJlc3M6IGRlcml2ZWQuYWRkcmVzcyxcbiAgICByZWNlaXZlQWRkcmVzc2VzOiBbLi4ucHJldkFkZHJzLCBkZXJpdmVkXSxcbiAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICB9O1xuXG4gIHN0b3JlW3N0b3JhZ2VLZXldID0gbmV4dFdhbGxldDtcbiAgc2F2ZUxvY2FsV2FsbGV0U3RvcmUoc3RvcmUpO1xuICByZXR1cm4gbmV4dFdhbGxldDtcbn1cblxuZnVuY3Rpb24gbWFrZUhlYWRlcnMgKGFwaVRva2VuID0gJycsIG1ldGhvZCA9ICdHRVQnKSB7XG4gIGNvbnN0IGhlYWRlcnMgPSB7IEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH07XG4gIGlmIChtZXRob2QgIT09ICdHRVQnKSBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgaWYgKGFwaVRva2VuKSBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7YXBpVG9rZW59YDtcbiAgcmV0dXJuIGhlYWRlcnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RKU09OICh1cmwsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCAnR0VUJztcbiAgY29uc3QgYm9keSA9IG9wdGlvbnMuYm9keSA/IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuYm9keSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGhlYWRlcnMgPSBtYWtlSGVhZGVycyhvcHRpb25zLmFwaVRva2VuLCBtZXRob2QpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgeyBtZXRob2QsIGhlYWRlcnMsIGJvZHkgfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpLmNhdGNoKCgpID0+ICcnKTtcbiAgICBsZXQgbXNnID0gYCR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZXJySnNvbiA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICBpZiAoZXJySnNvbiAmJiAoZXJySnNvbi5tZXNzYWdlIHx8IGVyckpzb24uZXJyb3IpKSB7XG4gICAgICAgIG1zZyA9IGVyckpzb24ubWVzc2FnZSB8fCBlcnJKc29uLmVycm9yO1xuICAgICAgICBpZiAoZXJySnNvbi5kZXRhaWwpIG1zZyArPSAnOiAnICsgU3RyaW5nKGVyckpzb24uZGV0YWlsKTtcbiAgICAgIH0gZWxzZSBpZiAodGV4dCkgbXNnICs9ICc6ICcgKyB0ZXh0LnNsaWNlKDAsIDIwMCk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgaWYgKHRleHQpIG1zZyArPSAnOiAnICsgdGV4dC5zbGljZSgwLCAyMDApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xufVxuXG5mdW5jdGlvbiBwaWNrQXJyYXkgKHBheWxvYWQsIGtleXMgPSBbXSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkKSkgcmV0dXJuIHBheWxvYWQ7XG4gIGlmICghcGF5bG9hZCB8fCB0eXBlb2YgcGF5bG9hZCAhPT0gJ29iamVjdCcpIHJldHVybiBbXTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWRba2V5XSkpIHJldHVybiBwYXlsb2FkW2tleV07XG4gIH1cbiAgcmV0dXJuIFtdO1xufVxuXG5mdW5jdGlvbiBwaWNrT2JqZWN0IChwYXlsb2FkLCBrZXlzID0gW10pIHtcbiAgaWYgKHBheWxvYWQgJiYgdHlwZW9mIHBheWxvYWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHBheWxvYWQpKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgY29uc3QgdiA9IHBheWxvYWRba2V5XTtcbiAgICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2KSkgcmV0dXJuIHY7XG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG4gIHJldHVybiB7fTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdHJ5UmVxdWVzdHMgKGJhc2VVcmwsIHJlcXVlc3RzID0gW10sIGFwaVRva2VuID0gJycpIHtcbiAgaWYgKCFiYXNlVXJsKSByZXR1cm4gbnVsbDtcbiAgbGV0IGxhc3RFcnJvciA9IG51bGw7XG5cbiAgZm9yIChjb25zdCByZXEgb2YgcmVxdWVzdHMpIHtcbiAgICBjb25zdCBtZXRob2QgPSByZXEubWV0aG9kIHx8ICdHRVQnO1xuICAgIGNvbnN0IHBhdGggPSByZXEucGF0aCA/PyAnJztcbiAgICBjb25zdCByb290ID0gYmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgICBsZXQgdXJsID0gcm9vdDtcbiAgICBpZiAocGF0aCkge1xuICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aCgnPycpKSB1cmwgPSBgJHtyb290fSR7cGF0aH1gO1xuICAgICAgZWxzZSB1cmwgPSBgJHtyb290fSR7cGF0aC5zdGFydHNXaXRoKCcvJykgPyBwYXRoIDogJy8nICsgcGF0aH1gO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcXVlc3RKU09OKHVybCwgeyBtZXRob2QsIGJvZHk6IHJlcS5ib2R5LCBhcGlUb2tlbiB9KTtcbiAgICAgIHJldHVybiB7IGRhdGEsIHBhdGgsIG1ldGhvZCB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbGFzdEVycm9yID0gZXJyO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsYXN0RXJyb3IpIHRocm93IGxhc3RFcnJvcjtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVCYXNlVXJsICh2YWx1ZSwgZmFsbGJhY2sgPSAnL3NlcnZpY2VzL2JpdGNvaW4nKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVCYXNlVXJsKHZhbHVlKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWQgfHwgbm9ybWFsaXplQmFzZVVybChmYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVdhbGxldHNCYXNlVXJsICh2YWx1ZSkge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplQmFzZVVybCh2YWx1ZSk7XG4gIGlmICghbm9ybWFsaXplZCkgcmV0dXJuICcvc2VydmljZXMvYml0Y29pbi93YWxsZXRzJztcbiAgaWYgKG5vcm1hbGl6ZWQgPT09ICcvcGF5bWVudHMnKSByZXR1cm4gJy9zZXJ2aWNlcy9iaXRjb2luL3dhbGxldHMnO1xuICBpZiAoL1xcL3NlcnZpY2VzXFwvYml0Y29pbiQvaS50ZXN0KG5vcm1hbGl6ZWQpKSByZXR1cm4gYCR7bm9ybWFsaXplZH0vd2FsbGV0c2A7XG4gIGlmICgvXFwvc2VydmljZXNcXC9iaXRjb2luXFwvcGF5bWVudHMkL2kudGVzdChub3JtYWxpemVkKSkgcmV0dXJuIG5vcm1hbGl6ZWQucmVwbGFjZSgvXFwvcGF5bWVudHMkL2ksICcvd2FsbGV0cycpO1xuICBpZiAoL1xcL3dhbGxldCQvaS50ZXN0KG5vcm1hbGl6ZWQpKSByZXR1cm4gbm9ybWFsaXplZC5yZXBsYWNlKC9cXC93YWxsZXQkL2ksICcvd2FsbGV0cycpO1xuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqIENhbm9uaWNhbCB3YXRjaC1vbmx5IHhwdWIgSFRUUCBBUEkgKGBHRVQg4oCmL3hwdWJgLCBgL3hwdWIvdXR4b3NgLCBgL3hwdWIvdHJhbnNhY3Rpb25zYCkuICovXG5mdW5jdGlvbiBub3JtYWxpemVYcHViV2F0Y2hCYXNlVXJsICh2YWx1ZSkge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplQmFzZVVybCh2YWx1ZSk7XG4gIGlmICghbm9ybWFsaXplZCkgcmV0dXJuICcvc2VydmljZXMvYml0Y29pbi94cHViJztcbiAgaWYgKG5vcm1hbGl6ZWQgPT09ICcvcGF5bWVudHMnKSByZXR1cm4gJy9zZXJ2aWNlcy9iaXRjb2luL3hwdWInO1xuICBpZiAoL1xcL3NlcnZpY2VzXFwvYml0Y29pbiQvaS50ZXN0KG5vcm1hbGl6ZWQpKSByZXR1cm4gYCR7bm9ybWFsaXplZH0veHB1YmA7XG4gIGlmICgvXFwvc2VydmljZXNcXC9iaXRjb2luXFwvd2FsbGV0cyQvaS50ZXN0KG5vcm1hbGl6ZWQpKSByZXR1cm4gbm9ybWFsaXplZC5yZXBsYWNlKC9cXC93YWxsZXRzJC9pLCAnL3hwdWInKTtcbiAgaWYgKC9cXC9zZXJ2aWNlc1xcL2JpdGNvaW5cXC9wYXltZW50cyQvaS50ZXN0KG5vcm1hbGl6ZWQpKSByZXR1cm4gbm9ybWFsaXplZC5yZXBsYWNlKC9cXC9wYXltZW50cyQvaSwgJy94cHViJyk7XG4gIGlmICgvXFwvd2FsbGV0JC9pLnRlc3Qobm9ybWFsaXplZCkpIHJldHVybiBub3JtYWxpemVkLnJlcGxhY2UoL1xcL3dhbGxldCQvaSwgJy94cHViJyk7XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXltZW50c0Jhc2VVcmwgKHZhbHVlKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVCYXNlVXJsKHZhbHVlKTtcbiAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4gJy9wYXltZW50cyc7XG4gIGlmIChub3JtYWxpemVkID09PSAnL3NlcnZpY2VzL2JpdGNvaW4vcGF5bWVudHMnKSByZXR1cm4gJy9wYXltZW50cyc7XG4gIGlmICgvXFwvc2VydmljZXNcXC9iaXRjb2luXFwvcGF5bWVudHMkL2kudGVzdChub3JtYWxpemVkKSkgcmV0dXJuICcvcGF5bWVudHMnO1xuICBpZiAoL1xcL3NlcnZpY2VzXFwvYml0Y29pbiQvaS50ZXN0KG5vcm1hbGl6ZWQpKSByZXR1cm4gJy9wYXltZW50cyc7XG4gIGlmICgvXFwvc2VydmljZXNcXC9iaXRjb2luXFwvd2FsbGV0cyQvaS50ZXN0KG5vcm1hbGl6ZWQpKSByZXR1cm4gJy9wYXltZW50cyc7XG4gIGlmIChub3JtYWxpemVkID09PSAnL3BheW1lbnRzJykgcmV0dXJuICcvcGF5bWVudHMnO1xuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQWRkcmVzc2VzQmFzZVVybCAodmFsdWUpIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUJhc2VVcmwodmFsdWUpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiAnL3NlcnZpY2VzL2JpdGNvaW4vYWRkcmVzc2VzJztcbiAgaWYgKC9cXC9zZXJ2aWNlc1xcL2JpdGNvaW4kL2kudGVzdChub3JtYWxpemVkKSkgcmV0dXJuIGAke25vcm1hbGl6ZWR9L2FkZHJlc3Nlc2A7XG4gIGlmICgvXFwvc2VydmljZXNcXC9iaXRjb2luXFwvd2FsbGV0cyQvaS50ZXN0KG5vcm1hbGl6ZWQpKSByZXR1cm4gbm9ybWFsaXplZC5yZXBsYWNlKC9cXC93YWxsZXRzJC9pLCAnL2FkZHJlc3NlcycpO1xuICBpZiAoL1xcL3NlcnZpY2VzXFwvYml0Y29pblxcL3BheW1lbnRzJC9pLnRlc3Qobm9ybWFsaXplZCkpIHJldHVybiBub3JtYWxpemVkLnJlcGxhY2UoL1xcL3BheW1lbnRzJC9pLCAnL2FkZHJlc3NlcycpO1xuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTGlnaHRuaW5nQmFzZVVybCAodmFsdWUpIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUJhc2VVcmwodmFsdWUpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiAnL3NlcnZpY2VzL2xpZ2h0bmluZyc7XG4gIGlmICgvXFwvc2VydmljZXNcXC9iaXRjb2luJC9pLnRlc3Qobm9ybWFsaXplZCkpIHJldHVybiAnL3NlcnZpY2VzL2xpZ2h0bmluZyc7XG4gIGlmICgvXFwvc2VydmljZXNcXC9iaXRjb2luXFwvbGlnaHRuaW5nJC9pLnRlc3Qobm9ybWFsaXplZCkpIHJldHVybiAnL3NlcnZpY2VzL2xpZ2h0bmluZyc7XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXlqb2luQmFzZVVybCAodmFsdWUpIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUJhc2VVcmwodmFsdWUpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiAnL3NlcnZpY2VzL3BheWpvaW4nO1xuICBpZiAobm9ybWFsaXplZCA9PT0gJy9zZXJ2aWNlcy9wYXlqb2luJykgcmV0dXJuICcvc2VydmljZXMvcGF5am9pbic7XG4gIGlmICgvXFwvc2VydmljZXNcXC9wYXlqb2luJC9pLnRlc3Qobm9ybWFsaXplZCkpIHJldHVybiAnL3NlcnZpY2VzL3BheWpvaW4nO1xuICBpZiAoL1xcL3BheW1lbnRzXFwvcGF5am9pbiQvaS50ZXN0KG5vcm1hbGl6ZWQpKSByZXR1cm4gJy9zZXJ2aWNlcy9wYXlqb2luJztcbiAgaWYgKC9cXC9zZXJ2aWNlc1xcL2JpdGNvaW5cXC9wYXlqb2luJC9pLnRlc3Qobm9ybWFsaXplZCkpIHJldHVybiAnL3NlcnZpY2VzL3BheWpvaW4nO1xuICBpZiAoL1xcL3NlcnZpY2VzXFwvYml0Y29pbiQvaS50ZXN0KG5vcm1hbGl6ZWQpKSByZXR1cm4gJy9zZXJ2aWNlcy9wYXlqb2luJztcbiAgaWYgKC9cXC9zZXJ2aWNlc1xcL2JpdGNvaW5cXC9wYXltZW50cyQvaS50ZXN0KG5vcm1hbGl6ZWQpKSByZXR1cm4gJy9zZXJ2aWNlcy9wYXlqb2luJztcbiAgaWYgKG5vcm1hbGl6ZWQgPT09ICcvcGF5bWVudHMnKSByZXR1cm4gJy9zZXJ2aWNlcy9wYXlqb2luJztcbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQml0Y29pblNlcnZpY2VFbmRwb2ludCAoYmFzZVVybCA9ICcnKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVCYXNlVXJsKGJhc2VVcmwpO1xuICByZXR1cm4gL1xcL3NlcnZpY2VzXFwvYml0Y29pbiQvaS50ZXN0KG5vcm1hbGl6ZWQpO1xufVxuXG4vKipcbiAqIEF1dGggZm9yIGJpdGNvaW5DbGllbnQgSFRUUDogaHViIGFkbWluIHRva2VuIG9ubHkgd2hlbiB0aGUgYmFzZSB0YXJnZXRzIEh1YlxuICogYC9zZXJ2aWNlcy9iaXRjb2luYCAocmVsYXRpdmUgb3IgYWJzb2x1dGUpLiBFeHRlcm5hbCBleHBsb3JlcnMvcGF5bWVudHMgVVJMc1xuICogZ2V0IGBhcGlUb2tlbmAgb25seSBzbyBhZG1pbiBjcmVkZW50aWFscyBhcmUgbm90IGxlYWtlZCBvZmYtaG9zdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbc2V0dGluZ3NdXG4gKiBAcGFyYW0ge3N0cmluZ30gW2Jhc2VVcmxdXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiByZXNvbHZlQml0Y29pbkNsaWVudEF1dGhUb2tlbiAoc2V0dGluZ3MgPSB7fSwgYmFzZVVybCA9ICcnKSB7XG4gIGNvbnN0IGFwaVRva2VuID0gU3RyaW5nKHNldHRpbmdzLmFwaVRva2VuIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGh1YkFkbWluVG9rZW4gPSBTdHJpbmcoc2V0dGluZ3MuaHViQWRtaW5Ub2tlbiB8fCAnJykudHJpbSgpO1xuICBpZiAoIWh1YkFkbWluVG9rZW4pIHJldHVybiBhcGlUb2tlbjtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUJhc2VVcmwoYmFzZVVybCk7XG4gIGlmICghbm9ybWFsaXplZCkgcmV0dXJuIGFwaVRva2VuO1xuICBpZiAoL15odHRwcz86XFwvXFwvL2kudGVzdChub3JtYWxpemVkKSAmJiAhL1xcL3NlcnZpY2VzXFwvYml0Y29pbihcXC98JCkvaS50ZXN0KG5vcm1hbGl6ZWQpKSB7XG4gICAgcmV0dXJuIGFwaVRva2VuO1xuICB9XG4gIHJldHVybiBodWJBZG1pblRva2VuIHx8IGFwaVRva2VuO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxsQml0Y29pblNlcnZpY2VNZXRob2QgKGJhc2VVcmwsIG1ldGhvZCwgcGFyYW1zID0ge30sIGFwaVRva2VuID0gJycpIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUJhc2VVcmwoYmFzZVVybCk7XG4gIGlmICghbm9ybWFsaXplZCkgdGhyb3cgbmV3IEVycm9yKCdCaXRjb2luIHNlcnZpY2UgZW5kcG9pbnQgaXMgbm90IGNvbmZpZ3VyZWQuJyk7XG4gIHJldHVybiByZXF1ZXN0SlNPTihub3JtYWxpemVkLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgYm9keTogeyBtZXRob2QsIHBhcmFtcyB9LFxuICAgIGFwaVRva2VuXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEV4cGxvcmVyRGF0YUF0QmFzZSAoc2V0dGluZ3MgPSB7fSwgd2FsbGV0ID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBiYXNlVXJsID0gcmVzb2x2ZUJhc2VVcmwoc2V0dGluZ3MuZXhwbG9yZXJCYXNlVXJsLCAnL3NlcnZpY2VzL2JpdGNvaW4nKTtcbiAgaWYgKCFiYXNlVXJsKSByZXR1cm4geyBibG9ja3M6IFtdLCB0cmFuc2FjdGlvbnM6IFtdIH07XG5cbiAgaWYgKGlzQml0Y29pblNlcnZpY2VFbmRwb2ludChiYXNlVXJsKSkge1xuICAgIGNvbnN0IG5ldFJhdyA9IG9wdGlvbnMubmV0d29yayAhPSBudWxsID8gU3RyaW5nKG9wdGlvbnMubmV0d29yaykgOiAnJztcbiAgICBjb25zdCBuZXQgPSBuZXRSYXcgPyBuZXRSYXcudG9Mb3dlckNhc2UoKSA6ICdyZWd0ZXN0JztcbiAgICBjb25zdCBsaXN0VHhQYXJhbXMgPSB7IGxpbWl0OiAxMCB9O1xuICAgIGNvbnN0IGFkbWluVG9rID0gb3B0aW9ucy5hZG1pblRva2VuICE9IG51bGwgPyBTdHJpbmcob3B0aW9ucy5hZG1pblRva2VuKS50cmltKCkgOiAnJztcbiAgICBpZiAoYWRtaW5Ub2spIHtcbiAgICAgIGxpc3RUeFBhcmFtcy5hZG1pblRva2VuID0gYWRtaW5Ub2s7XG4gICAgfSBlbHNlIGlmICh3YWxsZXQgJiYgd2FsbGV0LnhwdWIpIHtcbiAgICAgIGNvbnN0IGFkZHJzID0gZGVyaXZlV2F0Y2hBZGRyZXNzZXMod2FsbGV0LCBuZXQsIDI1LCAyNSk7XG4gICAgICBpZiAoYWRkcnMubGVuZ3RoID4gMCkgbGlzdFR4UGFyYW1zLmFkZHJlc3NlcyA9IGFkZHJzLmpvaW4oJywnKTtcbiAgICB9XG4gICAgY29uc3QgcnBjVG9rID0gcmVzb2x2ZUJpdGNvaW5DbGllbnRBdXRoVG9rZW4oc2V0dGluZ3MsIGJhc2VVcmwpO1xuICAgIGNvbnN0IFtibG9ja3NEYXRhLCB0eERhdGFdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgY2FsbEJpdGNvaW5TZXJ2aWNlTWV0aG9kKGJhc2VVcmwsICdMaXN0QmxvY2tzJywgeyBsaW1pdDogMTAgfSwgcnBjVG9rKS5jYXRjaCgoKSA9PiBbXSksXG4gICAgICBjYWxsQml0Y29pblNlcnZpY2VNZXRob2QoYmFzZVVybCwgJ0xpc3RUcmFuc2FjdGlvbnMnLCBsaXN0VHhQYXJhbXMsIHJwY1RvaykuY2F0Y2goKCkgPT4gW10pXG4gICAgXSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJsb2NrczogcGlja0FycmF5KGJsb2Nrc0RhdGEsIFsnYmxvY2tzJywgJ2l0ZW1zJywgJ3Jlc3VsdHMnLCAnZGF0YSddKSxcbiAgICAgIHRyYW5zYWN0aW9uczogcGlja0FycmF5KHR4RGF0YSwgWyd0cmFuc2FjdGlvbnMnLCAnaXRlbXMnLCAncmVzdWx0cycsICdkYXRhJ10pXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGJsb2Nrc1Jlc3AgPSBhd2FpdCB0cnlSZXF1ZXN0cyhiYXNlVXJsLCBbXG4gICAgeyBwYXRoOiAnL2Jsb2Nrcz9saW1pdD0xMCcgfSxcbiAgICB7IHBhdGg6ICcvYXBpL2Jsb2Nrcz9saW1pdD0xMCcgfSxcbiAgICB7IHBhdGg6ICcvdjEvYmxvY2tzP2xpbWl0PTEwJyB9XG4gIF0sIHNldHRpbmdzLmFwaVRva2VuKTtcblxuICBjb25zdCB0eFJlc3AgPSBhd2FpdCB0cnlSZXF1ZXN0cyhiYXNlVXJsLCBbXG4gICAgeyBwYXRoOiAnL3RyYW5zYWN0aW9ucz9saW1pdD0xMCcgfSxcbiAgICB7IHBhdGg6ICcvYXBpL3RyYW5zYWN0aW9ucz9saW1pdD0xMCcgfSxcbiAgICB7IHBhdGg6ICcvdjEvdHJhbnNhY3Rpb25zP2xpbWl0PTEwJyB9XG4gIF0sIHNldHRpbmdzLmFwaVRva2VuKTtcblxuICByZXR1cm4ge1xuICAgIGJsb2NrczogYmxvY2tzUmVzcCA/IHBpY2tBcnJheShibG9ja3NSZXNwLmRhdGEsIFsnYmxvY2tzJywgJ2l0ZW1zJywgJ3Jlc3VsdHMnLCAnZGF0YSddKSA6IFtdLFxuICAgIHRyYW5zYWN0aW9uczogdHhSZXNwID8gcGlja0FycmF5KHR4UmVzcC5kYXRhLCBbJ3RyYW5zYWN0aW9ucycsICdpdGVtcycsICdyZXN1bHRzJywgJ2RhdGEnXSkgOiBbXVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEV4cGxvcmVyRGF0YSAoc2V0dGluZ3MgPSB7fSwgd2FsbGV0ID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gZmV0Y2hFeHBsb3JlckRhdGFBdEJhc2Uoc2V0dGluZ3MsIHdhbGxldCwgb3B0aW9ucyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQml0Y29pblN0YXR1c0F0QmFzZSAoc2V0dGluZ3MgPSB7fSkge1xuICBjb25zdCBiYXNlVXJsID0gcmVzb2x2ZUJhc2VVcmwoc2V0dGluZ3MuZXhwbG9yZXJCYXNlVXJsLCAnL3NlcnZpY2VzL2JpdGNvaW4nKTtcbiAgaWYgKCFiYXNlVXJsKSByZXR1cm4geyBhdmFpbGFibGU6IGZhbHNlLCBzdGF0dXM6ICdVTkFWQUlMQUJMRScgfTtcbiAgY29uc3QgYXV0aFRvayA9IHJlc29sdmVCaXRjb2luQ2xpZW50QXV0aFRva2VuKHNldHRpbmdzLCBiYXNlVXJsKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJ5UmVxdWVzdHMoYmFzZVVybCwgW1xuICAgIHsgcGF0aDogJycgfVxuICBdLCBhdXRoVG9rKTtcbiAgcmV0dXJuIHBpY2tPYmplY3QocmVzdWx0ID8gcmVzdWx0LmRhdGEgOiB7fSwgWydzdGF0dXMnLCAncmVzdWx0JywgJ2RhdGEnXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQml0Y29pblN0YXR1cyAoc2V0dGluZ3MgPSB7fSkge1xuICByZXR1cm4gZmV0Y2hCaXRjb2luU3RhdHVzQXRCYXNlKHNldHRpbmdzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hCbG9ja0J5SGFzaCAoc2V0dGluZ3MgPSB7fSwgYmxvY2toYXNoID0gJycpIHtcbiAgY29uc3QgYlVybCA9IHJlc29sdmVCYXNlVXJsKHNldHRpbmdzLmV4cGxvcmVyQmFzZVVybCwgJy9zZXJ2aWNlcy9iaXRjb2luJyk7XG4gIGNvbnN0IGhhc2ggPSBTdHJpbmcoYmxvY2toYXNoIHx8ICcnKS50cmltKCk7XG4gIGlmICghYlVybCB8fCAhaGFzaCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyeVJlcXVlc3RzKGJVcmwsIFtcbiAgICB7IHBhdGg6IGAvYmxvY2tzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGhhc2gpfWAgfVxuICBdLCBzZXR0aW5ncy5hcGlUb2tlbik7XG4gIGNvbnN0IG9iaiA9IHBpY2tPYmplY3QocmVzdWx0ID8gcmVzdWx0LmRhdGEgOiB7fSwgWydibG9jaycsICdkYXRhJywgJ3Jlc3VsdCddKTtcbiAgaWYgKG9iaiAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCkgcmV0dXJuIG9iajtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25CeUhhc2ggKHNldHRpbmdzID0ge30sIHR4aGFzaCA9ICcnKSB7XG4gIGNvbnN0IGJVcmwgPSByZXNvbHZlQmFzZVVybChzZXR0aW5ncy5leHBsb3JlckJhc2VVcmwsICcvc2VydmljZXMvYml0Y29pbicpO1xuICBjb25zdCBoYXNoID0gU3RyaW5nKHR4aGFzaCB8fCAnJykudHJpbSgpO1xuICBpZiAoIWJVcmwgfHwgIWhhc2gpIHJldHVybiBudWxsO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cnlSZXF1ZXN0cyhiVXJsLCBbXG4gICAgeyBwYXRoOiBgL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChoYXNoKX1gIH1cbiAgXSwgc2V0dGluZ3MuYXBpVG9rZW4pO1xuICBjb25zdCBvYmogPSBwaWNrT2JqZWN0KHJlc3VsdCA/IHJlc3VsdC5kYXRhIDoge30sIFsndHJhbnNhY3Rpb24nLCAnZGF0YScsICdyZXN1bHQnXSk7XG4gIGlmIChvYmogJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGgpIHJldHVybiBvYmo7XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJhdyB0cmFuc2FjdGlvbiBoZXggZm9yIFBTQlQgcHJldm91dHMuIFNhbWUgR0VUIGFzIGV4cGxvcmVyIHR4IHZpZXc7IHJlcXVpcmVzIHR4aW5kZXggd2hlbiB1bmNvbmZpcm1lZC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IGhleCBvciAnJyBpZiBtaXNzaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25IZXggKHNldHRpbmdzID0ge30sIHR4aGFzaCA9ICcnKSB7XG4gIGNvbnN0IGJVcmwgPSByZXNvbHZlQmFzZVVybChzZXR0aW5ncy5leHBsb3JlckJhc2VVcmwsICcvc2VydmljZXMvYml0Y29pbicpO1xuICBjb25zdCBoYXNoID0gU3RyaW5nKHR4aGFzaCB8fCAnJykudHJpbSgpO1xuICBpZiAoIWJVcmwgfHwgIWhhc2gpIHJldHVybiAnJztcbiAgdHJ5IHtcbiAgICBjb25zdCByb290ID0gbm9ybWFsaXplQmFzZVVybChiVXJsKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVxdWVzdEpTT04oYCR7cm9vdH0vdHJhbnNhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGhhc2gpfWAsIHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBhcGlUb2tlbjogc2V0dGluZ3MuYXBpVG9rZW5cbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YSAmJiBkYXRhLmhleCA/IFN0cmluZyhkYXRhLmhleCkgOiAnJztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFdhbGxldFN1bW1hcnkgKHNldHRpbmdzID0ge30sIHdhbGxldCA9IHt9LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeHB1YiA9IHdhbGxldC54cHViID8gU3RyaW5nKHdhbGxldC54cHViKS50cmltKCkgOiAnJztcbiAgY29uc3Qgd2FsbGV0SWQgPSBTdHJpbmcod2FsbGV0LndhbGxldElkIHx8ICcnKS50cmltKCk7XG4gIGlmICgheHB1YiAmJiAhd2FsbGV0SWQpIHJldHVybiB7fTtcblxuICBpZiAoeHB1Yikge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBub3JtYWxpemVYcHViV2F0Y2hCYXNlVXJsKHNldHRpbmdzLnBheW1lbnRzQmFzZVVybCk7XG4gICAgaWYgKCFiYXNlVXJsKSByZXR1cm4ge307XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5zZXQoJ3hwdWInLCB4cHViKTtcbiAgICBjb25zdCBuZXR3b3JrID0gb3B0aW9ucy5uZXR3b3JrICE9IG51bGwgPyBTdHJpbmcob3B0aW9ucy5uZXR3b3JrKSA6ICcnO1xuICAgIGlmIChuZXR3b3JrKSB7XG4gICAgICBjb25zdCBhZGRycyA9IGRlcml2ZVdhdGNoQWRkcmVzc2VzKHdhbGxldCwgbmV0d29yaywgMjUsIDI1KTtcbiAgICAgIGlmIChhZGRycy5sZW5ndGggPiAwKSBwYXJhbXMuc2V0KCdhZGRyZXNzZXMnLCBhZGRycy5qb2luKCcsJykpO1xuICAgIH1cbiAgICBjb25zdCBxID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGF3YWl0IHRyeVJlcXVlc3RzKGJhc2VVcmwsIFt7IHBhdGg6IHEgPyBgPyR7cX1gIDogJycgfV0sIHJlc29sdmVCaXRjb2luQ2xpZW50QXV0aFRva2VuKHNldHRpbmdzLCBiYXNlVXJsKSk7XG4gICAgY29uc3QgcmF3ID0gcGlja09iamVjdChzdW1tYXJ5ID8gc3VtbWFyeS5kYXRhIDoge30sIFsnd2FsbGV0JywgJ2RhdGEnXSk7XG4gICAgaWYgKHJhdyAmJiB0eXBlb2YgcmF3ID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgYmFsYW5jZVNhdHMgPSByYXcuYmFsYW5jZVNhdHMgPz8gcmF3LmJhbGFuY2Vfc2F0cztcbiAgICAgIGNvbnN0IGNvbmZpcm1lZFNhdHMgPSByYXcuY29uZmlybWVkU2F0cyA/PyByYXcuY29uZmlybWVkX3NhdHMgPz8gYmFsYW5jZVNhdHM7XG4gICAgICBjb25zdCB1bmNvbmZpcm1lZFNhdHMgPSByYXcudW5jb25maXJtZWRTYXRzID8/IHJhdy51bmNvbmZpcm1lZF9zYXRzO1xuICAgICAgY29uc3QgZnJvbVN1bW1hcnkgPSAodikgPT4gKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ251bWJlcicpID8gTWF0aC5yb3VuZCh2ICogMTAwMDAwMDAwKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgLi4ucmF3LFxuICAgICAgICBiYWxhbmNlU2F0czogYmFsYW5jZVNhdHMgIT0gbnVsbCA/IE51bWJlcihiYWxhbmNlU2F0cykgOiAocmF3LnN1bW1hcnkgJiYgcmF3LnN1bW1hcnkudHJ1c3RlZCAhPSBudWxsID8gZnJvbVN1bW1hcnkocmF3LnN1bW1hcnkudHJ1c3RlZCkgOiB1bmRlZmluZWQpLFxuICAgICAgICBjb25maXJtZWRTYXRzOiBjb25maXJtZWRTYXRzICE9IG51bGwgPyBOdW1iZXIoY29uZmlybWVkU2F0cykgOiAocmF3LnN1bW1hcnkgJiYgcmF3LnN1bW1hcnkudHJ1c3RlZCAhPSBudWxsID8gZnJvbVN1bW1hcnkocmF3LnN1bW1hcnkudHJ1c3RlZCkgOiB1bmRlZmluZWQpLFxuICAgICAgICB1bmNvbmZpcm1lZFNhdHM6IHVuY29uZmlybWVkU2F0cyAhPSBudWxsID8gTnVtYmVyKHVuY29uZmlybWVkU2F0cykgOiAocmF3LnN1bW1hcnkgJiYgcmF3LnN1bW1hcnkudW50cnVzdGVkUGVuZGluZyAhPSBudWxsID8gZnJvbVN1bW1hcnkocmF3LnN1bW1hcnkudW50cnVzdGVkUGVuZGluZykgOiB1bmRlZmluZWQpXG4gICAgICB9O1xuICAgICAgc2V0Q2FjaGVkQmFsYW5jZSh3YWxsZXRJZCB8fCBgeHB1Yjoke3hwdWIuc2xpY2UoMCwgNDgpfWAsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmF3O1xuICB9XG5cbiAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZVdhbGxldHNCYXNlVXJsKHNldHRpbmdzLnBheW1lbnRzQmFzZVVybCk7XG4gIGlmICghYmFzZVVybCkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IGVuY29kZWRJZCA9IGVuY29kZVVSSUNvbXBvbmVudCh3YWxsZXRJZCk7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3QgbmV0d29yayA9IG9wdGlvbnMubmV0d29yayAhPSBudWxsID8gU3RyaW5nKG9wdGlvbnMubmV0d29yaykgOiAnJztcbiAgaWYgKG5ldHdvcmsgJiYgd2FsbGV0LnhwdWIpIHtcbiAgICBjb25zdCBhZGRycyA9IGRlcml2ZVdhdGNoQWRkcmVzc2VzKHdhbGxldCwgbmV0d29yaywgMjUsIDI1KTtcbiAgICBpZiAoYWRkcnMubGVuZ3RoID4gMCkgcGFyYW1zLnNldCgnYWRkcmVzc2VzJywgYWRkcnMuam9pbignLCcpKTtcbiAgfVxuXG4gIGNvbnN0IHBhdGggPSBwYXJhbXMudG9TdHJpbmcoKSA/IGAvJHtlbmNvZGVkSWR9PyR7cGFyYW1zLnRvU3RyaW5nKCl9YCA6IGAvJHtlbmNvZGVkSWR9YDtcbiAgY29uc3Qgc3VtbWFyeSA9IGF3YWl0IHRyeVJlcXVlc3RzKGJhc2VVcmwsIFtcbiAgICB7IHBhdGggfVxuICBdLCByZXNvbHZlQml0Y29pbkNsaWVudEF1dGhUb2tlbihzZXR0aW5ncywgYmFzZVVybCkpO1xuXG4gIGNvbnN0IHJhdyA9IHBpY2tPYmplY3Qoc3VtbWFyeSA/IHN1bW1hcnkuZGF0YSA6IHt9LCBbJ3dhbGxldCcsICdkYXRhJ10pO1xuICBpZiAocmF3ICYmIHR5cGVvZiByYXcgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgYmFsYW5jZVNhdHMgPSByYXcuYmFsYW5jZVNhdHMgPz8gcmF3LmJhbGFuY2Vfc2F0cztcbiAgICBjb25zdCBjb25maXJtZWRTYXRzID0gcmF3LmNvbmZpcm1lZFNhdHMgPz8gcmF3LmNvbmZpcm1lZF9zYXRzID8/IGJhbGFuY2VTYXRzO1xuICAgIGNvbnN0IHVuY29uZmlybWVkU2F0cyA9IHJhdy51bmNvbmZpcm1lZFNhdHMgPz8gcmF3LnVuY29uZmlybWVkX3NhdHM7XG4gICAgY29uc3QgZnJvbVN1bW1hcnkgPSAodikgPT4gKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ251bWJlcicpID8gTWF0aC5yb3VuZCh2ICogMTAwMDAwMDAwKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAuLi5yYXcsXG4gICAgICBiYWxhbmNlU2F0czogYmFsYW5jZVNhdHMgIT0gbnVsbCA/IE51bWJlcihiYWxhbmNlU2F0cykgOiAocmF3LnN1bW1hcnkgJiYgcmF3LnN1bW1hcnkudHJ1c3RlZCAhPSBudWxsID8gZnJvbVN1bW1hcnkocmF3LnN1bW1hcnkudHJ1c3RlZCkgOiB1bmRlZmluZWQpLFxuICAgICAgY29uZmlybWVkU2F0czogY29uZmlybWVkU2F0cyAhPSBudWxsID8gTnVtYmVyKGNvbmZpcm1lZFNhdHMpIDogKHJhdy5zdW1tYXJ5ICYmIHJhdy5zdW1tYXJ5LnRydXN0ZWQgIT0gbnVsbCA/IGZyb21TdW1tYXJ5KHJhdy5zdW1tYXJ5LnRydXN0ZWQpIDogdW5kZWZpbmVkKSxcbiAgICAgIHVuY29uZmlybWVkU2F0czogdW5jb25maXJtZWRTYXRzICE9IG51bGwgPyBOdW1iZXIodW5jb25maXJtZWRTYXRzKSA6IChyYXcuc3VtbWFyeSAmJiByYXcuc3VtbWFyeS51bnRydXN0ZWRQZW5kaW5nICE9IG51bGwgPyBmcm9tU3VtbWFyeShyYXcuc3VtbWFyeS51bnRydXN0ZWRQZW5kaW5nKSA6IHVuZGVmaW5lZClcbiAgICB9O1xuICAgIHNldENhY2hlZEJhbGFuY2Uod2FsbGV0SWQsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmF3O1xufVxuXG4vKipcbiAqIEZldGNoIHdhbGxldCBzdW1tYXJ5IHdpdGggY2FjaGUgZmFsbGJhY2suIFVzZXMgY2FjaGVkIGJhbGFuY2Ugd2hlbiBmZXRjaCBmYWlscy5cbiAqIEtleXMgbmV2ZXIgbGVhdmUgdGhlIGJyb3dzZXI7IG9ubHkgeHB1YiBpcyBzZW50IGZvciB3YXRjaC1vbmx5IGJhbGFuY2UuXG4gKiBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgLSBVcHN0cmVhbSBzZXR0aW5nc1xuICogQHBhcmFtIHtvYmplY3R9IHdhbGxldCAtIFdhbGxldCBjb250ZXh0ICh3YWxsZXRJZCwgeHB1YiBmcm9tIGdldFdhbGxldENvbnRleHRGcm9tSWRlbnRpdHkpXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0geyBtYXhDYWNoZUFnZU1zOiBudW1iZXIgfSAtIHVzZSAwIHRvIHNraXAgY2FjaGVcbiAqIEByZXR1cm5zIHtQcm9taXNlPG9iamVjdD59IFN1bW1hcnkgd2l0aCBiYWxhbmNlU2F0cywgY29uZmlybWVkU2F0cywgdW5jb25maXJtZWRTYXRzOyB1c2VzIGNhY2hlIG9uIGZldGNoIGZhaWx1cmVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hXYWxsZXRTdW1tYXJ5V2l0aENhY2hlIChzZXR0aW5ncyA9IHt9LCB3YWxsZXQgPSB7fSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHdhbGxldElkID0gU3RyaW5nKHdhbGxldC53YWxsZXRJZCB8fCAnJykudHJpbSgpO1xuICBjb25zdCB4cHViID0gd2FsbGV0LnhwdWIgPyBTdHJpbmcod2FsbGV0LnhwdWIpLnRyaW0oKSA6ICcnO1xuICBjb25zdCBjYWNoZUtleSA9IHdhbGxldElkIHx8ICh4cHViID8gYHhwdWI6JHt4cHViLnNsaWNlKDAsIDQ4KX1gIDogJycpO1xuICBjb25zdCBieXBhc3NDYWNoZSA9ICEhKG9wdGlvbnMuYnlwYXNzQ2FjaGUgfHwgb3B0aW9ucy5tYXhDYWNoZUFnZU1zID09PSAwKTtcbiAgY29uc3QgbWF4Q2FjaGVBZ2VNcyA9IGJ5cGFzc0NhY2hlID8gMCA6IChvcHRpb25zLm1heENhY2hlQWdlTXMgIT0gbnVsbCA/IE51bWJlcihvcHRpb25zLm1heENhY2hlQWdlTXMpIDogQkFMQU5DRV9DQUNIRV9NQVhfQUdFX01TKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCBmZXRjaFdhbGxldFN1bW1hcnkoc2V0dGluZ3MsIHdhbGxldCwgb3B0aW9ucyk7XG4gICAgaWYgKHN1bW1hcnkgJiYgKHN1bW1hcnkuYmFsYW5jZVNhdHMgIT0gbnVsbCB8fCBzdW1tYXJ5LmJhbGFuY2UgIT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiBzdW1tYXJ5O1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIEZhbGwgdGhyb3VnaCB0byBjYWNoZVxuICB9XG5cbiAgY29uc3QgY2FjaGVkID0gY2FjaGVLZXkgPyBnZXRDYWNoZWRCYWxhbmNlKGNhY2hlS2V5LCBtYXhDYWNoZUFnZU1zKSA6IG51bGw7XG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmFsYW5jZVNhdHM6IGNhY2hlZC5iYWxhbmNlU2F0cyxcbiAgICAgIGNvbmZpcm1lZFNhdHM6IGNhY2hlZC5jb25maXJtZWRTYXRzLFxuICAgICAgdW5jb25maXJtZWRTYXRzOiBjYWNoZWQudW5jb25maXJtZWRTYXRzLFxuICAgICAgX2Zyb21DYWNoZTogdHJ1ZSxcbiAgICAgIF9jYWNoZWRBdDogY2FjaGVkLmZldGNoZWRBdFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIExvb2sgdXAgYmFsYW5jZSBmb3IgYSBzaW5nbGUgYWRkcmVzcy4gU2VydmVyIGRvZXMgbm90IGhvbGQga2V5czsgdXNlcyBzY2FudHhvdXRzZXQuXG4gKiBXb3JrcyBmb3IgYW55IG9uLWNoYWluIGFkZHJlc3MuIFJlcXVpcmVzIEh1YiBCaXRjb2luIHNlcnZpY2Ugd2l0aCB0eGluZGV4LlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaEFkZHJlc3NCYWxhbmNlIChzZXR0aW5ncyA9IHt9LCBhZGRyZXNzID0gJycpIHtcbiAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZUFkZHJlc3Nlc0Jhc2VVcmwoc2V0dGluZ3MucGF5bWVudHNCYXNlVXJsIHx8IHNldHRpbmdzLmV4cGxvcmVyQmFzZVVybCk7XG4gIGlmICghYmFzZVVybCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgcmF3ID0gU3RyaW5nKGFkZHJlc3MgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHBhdGggPSBgLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJhdyl9L2JhbGFuY2VgO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cnlSZXF1ZXN0cyhiYXNlVXJsLCBbeyBwYXRoIH1dLCBzZXR0aW5ncy5hcGlUb2tlbik7XG4gIHJldHVybiBwaWNrT2JqZWN0KHJlc3VsdCA/IHJlc3VsdC5kYXRhIDoge30sIFsnYWRkcmVzcycsICdiYWxhbmNlJywgJ2JhbGFuY2VTYXRzJywgJ2NvbmZpcm1lZFNhdHMnLCAndW5jb25maXJtZWRTYXRzJywgJ2tleXNIZWxkQnlTZXJ2ZXInXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoUmVjZWl2ZUFkZHJlc3MgKHNldHRpbmdzID0ge30sIHdhbGxldCA9IHt9LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgbG9jYWwgPSBkZXJpdmVBbmRTdG9yZVJlY2VpdmVBZGRyZXNzKHdhbGxldCwge1xuICAgIG5ldHdvcms6IG9wdGlvbnMubmV0d29yayxcbiAgICBpZGVudGl0eTogb3B0aW9ucy5pZGVudGl0eVxuICB9KTtcbiAgaWYgKGxvY2FsICYmIGxvY2FsLmN1cnJlbnRBZGRyZXNzKSByZXR1cm4gbG9jYWwuY3VycmVudEFkZHJlc3M7XG5cbiAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZUFkZHJlc3Nlc0Jhc2VVcmwoc2V0dGluZ3MucGF5bWVudHNCYXNlVXJsKTtcbiAgaWYgKCFiYXNlVXJsKSByZXR1cm4gJyc7XG5cbiAgY29uc3Qgd2FsbGV0SWQgPSBlbmNvZGVVUklDb21wb25lbnQod2FsbGV0LndhbGxldElkIHx8ICcnKTtcbiAgaWYgKCF3YWxsZXRJZCkgcmV0dXJuICcnO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cnlSZXF1ZXN0cyhiYXNlVXJsLCBbXG4gICAgeyBwYXRoOiBgP3dhbGxldElkPSR7d2FsbGV0SWR9YCB9XG4gIF0sIHNldHRpbmdzLmFwaVRva2VuKTtcblxuICBjb25zdCBib2R5ID0gcGlja09iamVjdChyZXN1bHQgPyByZXN1bHQuZGF0YSA6IHt9LCBbJ2FkZHJlc3MnLCAnZGF0YScsICdyZXN1bHQnXSk7XG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHJldHVybiBib2R5O1xuICBpZiAoYm9keS5hZGRyZXNzKSByZXR1cm4gU3RyaW5nKGJvZHkuYWRkcmVzcyk7XG4gIGlmIChib2R5LmJlY2gzMikgcmV0dXJuIFN0cmluZyhib2R5LmJlY2gzMik7XG4gIHJldHVybiAnJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hVVFhPcyAoc2V0dGluZ3MgPSB7fSwgd2FsbGV0ID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB4cHViID0gd2FsbGV0LnhwdWIgPyBTdHJpbmcod2FsbGV0LnhwdWIpLnRyaW0oKSA6ICcnO1xuICBjb25zdCB3YWxsZXRJZEVuYyA9IGVuY29kZVVSSUNvbXBvbmVudCh3YWxsZXQud2FsbGV0SWQgfHwgJycpO1xuXG4gIGlmICh4cHViKSB7XG4gICAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZVhwdWJXYXRjaEJhc2VVcmwoc2V0dGluZ3MucGF5bWVudHNCYXNlVXJsKTtcbiAgICBpZiAoIWJhc2VVcmwpIHJldHVybiBbXTtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcGFyYW1zLnNldCgneHB1YicsIHhwdWIpO1xuICAgIGNvbnN0IG5ldHdvcmsgPSBvcHRpb25zLm5ldHdvcmsgIT0gbnVsbCA/IFN0cmluZyhvcHRpb25zLm5ldHdvcmspIDogJyc7XG4gICAgaWYgKG5ldHdvcmspIHtcbiAgICAgIGNvbnN0IGFkZHJzID0gZGVyaXZlV2F0Y2hBZGRyZXNzZXMod2FsbGV0LCBuZXR3b3JrLCAyNSwgMjUpO1xuICAgICAgaWYgKGFkZHJzLmxlbmd0aCA+IDApIHBhcmFtcy5zZXQoJ2FkZHJlc3NlcycsIGFkZHJzLmpvaW4oJywnKSk7XG4gICAgfVxuICAgIGNvbnN0IHFzID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcGF0aCA9IHFzID8gYC91dHhvcz8ke3FzfWAgOiAnL3V0eG9zJztcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cnlSZXF1ZXN0cyhiYXNlVXJsLCBbeyBwYXRoIH1dLCByZXNvbHZlQml0Y29pbkNsaWVudEF1dGhUb2tlbihzZXR0aW5ncywgYmFzZVVybCkpO1xuICAgIHJldHVybiBwaWNrQXJyYXkocmVzdWx0ID8gcmVzdWx0LmRhdGEgOiB7fSwgWyd1dHhvcycsICdpdGVtcycsICdyZXN1bHRzJywgJ2RhdGEnXSk7XG4gIH1cblxuICBjb25zdCBiYXNlVXJsID0gbm9ybWFsaXplV2FsbGV0c0Jhc2VVcmwoc2V0dGluZ3MucGF5bWVudHNCYXNlVXJsKTtcbiAgaWYgKCFiYXNlVXJsKSByZXR1cm4gW107XG4gIGlmICghd2FsbGV0SWRFbmMpIHJldHVybiBbXTtcblxuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIGNvbnN0IG5ldHdvcmsgPSBvcHRpb25zLm5ldHdvcmsgIT0gbnVsbCA/IFN0cmluZyhvcHRpb25zLm5ldHdvcmspIDogJyc7XG4gIGlmIChuZXR3b3JrICYmIHdhbGxldC54cHViKSB7XG4gICAgY29uc3QgYWRkcnMgPSBkZXJpdmVXYXRjaEFkZHJlc3Nlcyh3YWxsZXQsIG5ldHdvcmssIDI1LCAyNSk7XG4gICAgaWYgKGFkZHJzLmxlbmd0aCA+IDApIHBhcmFtcy5zZXQoJ2FkZHJlc3NlcycsIGFkZHJzLmpvaW4oJywnKSk7XG4gIH1cbiAgY29uc3QgcXMgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgY29uc3QgcGF0aCA9IHFzID8gYC8ke3dhbGxldElkRW5jfS91dHhvcz8ke3FzfWAgOiBgLyR7d2FsbGV0SWRFbmN9L3V0eG9zYDtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cnlSZXF1ZXN0cyhiYXNlVXJsLCBbXG4gICAgeyBwYXRoIH1cbiAgXSwgcmVzb2x2ZUJpdGNvaW5DbGllbnRBdXRoVG9rZW4oc2V0dGluZ3MsIGJhc2VVcmwpKTtcblxuICByZXR1cm4gcGlja0FycmF5KHJlc3VsdCA/IHJlc3VsdC5kYXRhIDoge30sIFsndXR4b3MnLCAnaXRlbXMnLCAncmVzdWx0cycsICdkYXRhJ10pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFdhbGxldFRyYW5zYWN0aW9ucyAoc2V0dGluZ3MgPSB7fSwgd2FsbGV0ID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB4cHViID0gd2FsbGV0LnhwdWIgPyBTdHJpbmcod2FsbGV0LnhwdWIpLnRyaW0oKSA6ICcnO1xuICBjb25zdCB3YWxsZXRJZCA9IFN0cmluZyh3YWxsZXQud2FsbGV0SWQgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgbGltaXQgPSBNYXRoLm1heCgxLCBNYXRoLm1pbigxMDAsIE51bWJlcihvcHRpb25zLmxpbWl0IHx8IDUwKSkpO1xuXG4gIGlmICh4cHViKSB7XG4gICAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZVhwdWJXYXRjaEJhc2VVcmwoc2V0dGluZ3MucGF5bWVudHNCYXNlVXJsKTtcbiAgICBpZiAoIWJhc2VVcmwpIHJldHVybiBbXTtcbiAgICBjb25zdCBhdXRoVG9rID0gcmVzb2x2ZUJpdGNvaW5DbGllbnRBdXRoVG9rZW4oc2V0dGluZ3MsIGJhc2VVcmwpO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuc2V0KCd4cHViJywgeHB1Yik7XG4gICAgcGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcobGltaXQpKTtcbiAgICBjb25zdCBuZXR3b3JrID0gb3B0aW9ucy5uZXR3b3JrICE9IG51bGwgPyBTdHJpbmcob3B0aW9ucy5uZXR3b3JrKSA6ICcnO1xuICAgIGlmIChuZXR3b3JrKSB7XG4gICAgICBjb25zdCBhZGRycyA9IGRlcml2ZVdhdGNoQWRkcmVzc2VzKHdhbGxldCwgbmV0d29yaywgMjUsIDI1KTtcbiAgICAgIGlmIChhZGRycy5sZW5ndGggPiAwKSBwYXJhbXMuc2V0KCdhZGRyZXNzZXMnLCBhZGRycy5qb2luKCcsJykpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gYC90cmFuc2FjdGlvbnM/JHtwYXJhbXMudG9TdHJpbmcoKX1gO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyeVJlcXVlc3RzKGJhc2VVcmwsIFt7IHBhdGggfV0sIGF1dGhUb2spO1xuICAgIHJldHVybiBwaWNrQXJyYXkocmVzdWx0ID8gcmVzdWx0LmRhdGEgOiB7fSwgWyd0cmFuc2FjdGlvbnMnLCAnaXRlbXMnLCAncmVzdWx0cycsICdkYXRhJ10pO1xuICB9XG5cbiAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZVdhbGxldHNCYXNlVXJsKHNldHRpbmdzLnBheW1lbnRzQmFzZVVybCk7XG4gIGlmICghYmFzZVVybCkgcmV0dXJuIFtdO1xuICBpZiAoIXdhbGxldElkKSByZXR1cm4gW107XG4gIGNvbnN0IGF1dGhUb2sgPSByZXNvbHZlQml0Y29pbkNsaWVudEF1dGhUb2tlbihzZXR0aW5ncywgYmFzZVVybCk7XG5cbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICBwYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhsaW1pdCkpO1xuICBjb25zdCBuZXR3b3JrID0gb3B0aW9ucy5uZXR3b3JrICE9IG51bGwgPyBTdHJpbmcob3B0aW9ucy5uZXR3b3JrKSA6ICcnO1xuICBpZiAobmV0d29yayAmJiB3YWxsZXQueHB1Yikge1xuICAgIGNvbnN0IGFkZHJzID0gZGVyaXZlV2F0Y2hBZGRyZXNzZXMod2FsbGV0LCBuZXR3b3JrLCAyNSwgMjUpO1xuICAgIGlmIChhZGRycy5sZW5ndGggPiAwKSBwYXJhbXMuc2V0KCdhZGRyZXNzZXMnLCBhZGRycy5qb2luKCcsJykpO1xuICB9XG5cbiAgY29uc3QgcGF0aCA9IGAvJHtlbmNvZGVVUklDb21wb25lbnQod2FsbGV0SWQpfS90cmFuc2FjdGlvbnM/JHtwYXJhbXMudG9TdHJpbmcoKX1gO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cnlSZXF1ZXN0cyhiYXNlVXJsLCBbeyBwYXRoIH1dLCBhdXRoVG9rKTtcbiAgcmV0dXJuIHBpY2tBcnJheShyZXN1bHQgPyByZXN1bHQuZGF0YSA6IHt9LCBbJ3RyYW5zYWN0aW9ucycsICdpdGVtcycsICdyZXN1bHRzJywgJ2RhdGEnXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RGYXVjZXQgKHNldHRpbmdzID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBiYXNlVXJsID0gcmVzb2x2ZUJhc2VVcmwoc2V0dGluZ3MuZXhwbG9yZXJCYXNlVXJsLCAnL3NlcnZpY2VzL2JpdGNvaW4nKTtcbiAgaWYgKCFiYXNlVXJsKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGxvcmVyL2JpdGNvaW4gQVBJIGJhc2UgVVJMIGlzIG5vdCBjb25maWd1cmVkLicpO1xuXG4gIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgYWRkcmVzczogU3RyaW5nKG9wdGlvbnMuYWRkcmVzcyB8fCAnJykudHJpbSgpLFxuICAgIGFtb3VudFNhdHM6IE51bWJlcihvcHRpb25zLmFtb3VudFNhdHMgfHwgMTAwMDApXG4gIH07XG4gIGlmICghcGF5bG9hZC5hZGRyZXNzKSB0aHJvdyBuZXcgRXJyb3IoJ0Rlc3RpbmF0aW9uIGFkZHJlc3MgaXMgcmVxdWlyZWQgZm9yIGZhdWNldC4nKTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cnlSZXF1ZXN0cyhiYXNlVXJsLCBbXG4gICAgeyBtZXRob2Q6ICdQT1NUJywgcGF0aDogJy9mYXVjZXQnLCBib2R5OiBwYXlsb2FkIH1cbiAgXSwgc2V0dGluZ3MuYXBpVG9rZW4pO1xuXG4gIHJldHVybiBwaWNrT2JqZWN0KHJlc3VsdCA/IHJlc3VsdC5kYXRhIDoge30sIFsnc3RhdHVzJywgJ25ldHdvcmsnLCAnc291cmNlJywgJ2ZhdWNldCcsICdlcnJvciddKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VuZFBheW1lbnQgKHNldHRpbmdzID0ge30sIHdhbGxldCA9IHt9LCBwYXltZW50ID0ge30pIHtcbiAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZVBheW1lbnRzQmFzZVVybChzZXR0aW5ncy5wYXltZW50c0Jhc2VVcmwpO1xuICBpZiAoIWJhc2VVcmwpIHRocm93IG5ldyBFcnJvcignUGF5bWVudHMgQVBJIGJhc2UgVVJMIGlzIG5vdCBjb25maWd1cmVkLicpO1xuXG4gIGNvbnN0IGFkbWluVG9rZW4gPSBTdHJpbmcocGF5bWVudC5hZG1pblRva2VuIHx8IHBheW1lbnQudG9rZW4gfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFhZG1pblRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBZG1pbiB0b2tlbiBpcyByZXF1aXJlZDogUE9TVCAvcGF5bWVudHMgKG9yIGxlZ2FjeSBQT1NUIC9zZXJ2aWNlcy9iaXRjb2luL3BheW1lbnRzKSBzcGVuZHMgZnJvbSB0aGlzIGh1YlxcJ3MgYml0Y29pbmQgd2FsbGV0IGFuZCBicm9hZGNhc3RzIGEgcmVhbCB0cmFuc2FjdGlvbiAoaWRlbnRpdHkgeHB1YiBzZWxlY3RzIHdhbGxldCBpZCBmb3IgdGhlIHJlcXVlc3QpLicpO1xuICB9XG5cbiAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICB3YWxsZXRJZDogd2FsbGV0LndhbGxldElkLFxuICAgIHhwdWI6IHdhbGxldC54cHViLFxuICAgIHRvOiBwYXltZW50LnRvLFxuICAgIGFtb3VudFNhdHM6IE51bWJlcihwYXltZW50LmFtb3VudFNhdHMgfHwgMCksXG4gICAgbWVtbzogcGF5bWVudC5tZW1vIHx8ICcnLFxuICAgIGFkbWluVG9rZW5cbiAgfTtcbiAgY29uc3Qgd2FsbGV0SWQgPSBTdHJpbmcod2FsbGV0LndhbGxldElkIHx8ICcnKS50cmltKCk7XG4gIGlmICghd2FsbGV0SWQpIHRocm93IG5ldyBFcnJvcignV2FsbGV0IElEIGlzIHJlcXVpcmVkIGZvciBwYXltZW50IHJlcXVlc3RzLicpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyeVJlcXVlc3RzKGJhc2VVcmwsIFtcbiAgICB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiAnJywgYm9keTogcGF5bG9hZCB9XG4gIF0sIHNldHRpbmdzLmFwaVRva2VuKTtcblxuICByZXR1cm4gcGlja09iamVjdChyZXN1bHQgPyByZXN1bHQuZGF0YSA6IHt9LCBbJ3BheW1lbnQnLCAncmVzdWx0JywgJ2RhdGEnXSk7XG59XG5cbi8qKlxuICogU3BlbmQgZnJvbSB0aGUgSHViIG5vZGUncyBiaXRjb2luZCB3YWxsZXQgKHJlZ3Rlc3Qvb3BzKS4gUmVxdWlyZXMgc2V0dXAgYWRtaW4gdG9rZW4uXG4gKiBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgLSBsb2FkVXBzdHJlYW1TZXR0aW5ncygpOyB1c2VzIGV4cGxvcmVyQmFzZVVybCDihpIgUE9TVCAvc2VydmljZXMvYml0Y29pblxuICogQHBhcmFtIHt7IHRvOiBzdHJpbmcsIGFtb3VudFNhdHM6IG51bWJlciwgbWVtbz86IHN0cmluZyB9fSBwYXltZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gYWRtaW5Ub2tlbiAtIGZhYnJpYy5odWIuYWRtaW5Ub2tlblxuICovXG5hc3luYyBmdW5jdGlvbiBzZW5kQnJpZGdlUGF5bWVudCAoc2V0dGluZ3MgPSB7fSwgcGF5bWVudCA9IHt9LCBhZG1pblRva2VuID0gJycpIHtcbiAgY29uc3QgYmFzZVVybCA9IHJlc29sdmVCYXNlVXJsKHNldHRpbmdzLmV4cGxvcmVyQmFzZVVybCwgJy9zZXJ2aWNlcy9iaXRjb2luJyk7XG4gIGlmICghaXNCaXRjb2luU2VydmljZUVuZHBvaW50KGJhc2VVcmwpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdIdWIgQml0Y29pbiBSUEMgYmFzZSAoL3NlcnZpY2VzL2JpdGNvaW4pIGlzIHJlcXVpcmVkIGZvciBicmlkZ2UgcGF5bWVudHMuJyk7XG4gIH1cbiAgY29uc3QgdG9rZW4gPSBTdHJpbmcoYWRtaW5Ub2tlbiB8fCAnJykudHJpbSgpO1xuICBpZiAoIXRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ0FkbWluIHRva2VuIGlzIHJlcXVpcmVkIHRvIHBheSBmcm9tIHRoZSBIdWIgd2FsbGV0LicpO1xuXG4gIGNvbnN0IHRvID0gU3RyaW5nKHBheW1lbnQudG8gfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgYW1vdW50U2F0cyA9IE1hdGgucm91bmQoTnVtYmVyKHBheW1lbnQuYW1vdW50U2F0cyB8fCAwKSk7XG4gIGlmICghdG8pIHRocm93IG5ldyBFcnJvcignRGVzdGluYXRpb24gYWRkcmVzcyBpcyByZXF1aXJlZC4nKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYW1vdW50U2F0cykgfHwgYW1vdW50U2F0cyA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2Ftb3VudFNhdHMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJyk7XG5cbiAgcmV0dXJuIGNhbGxCaXRjb2luU2VydmljZU1ldGhvZChiYXNlVXJsLCAnc2VuZHBheW1lbnQnLCB7XG4gICAgdG8sXG4gICAgYW1vdW50U2F0cyxcbiAgICBtZW1vOiBTdHJpbmcocGF5bWVudC5tZW1vIHx8ICcnKSxcbiAgICBhZG1pblRva2VuOiB0b2tlblxuICB9LCBzZXR0aW5ncy5hcGlUb2tlbik7XG59XG5cbi8qKlxuICogV2hldGhlciBhIHR4IHBheXMgYXQgbGVhc3QgYW1vdW50U2F0cyB0byBhZGRyZXNzIChMMSBwcm9vZikuXG4gKiBHRVQgYC4uLi90cmFuc2FjdGlvbnMvOnR4aWQ/YWRkcmVzcz0mYW1vdW50U2F0cz1gIChzYW1lIHRyYW5zYWN0aW9uIHJlc291cmNlOyBxdWVyeSBzZWxlY3RzIHBheW1lbnQtcHJvb2YgcmVzcG9uc2UpLlxuICogSlNPTi1SUEMgYHZlcmlmeWwxcGF5bWVudGAgb24gUE9TVCAvc2VydmljZXMvYml0Y29pbiBpcyBhbiBhbHRlcm5hdGUgZm9yIG5vbi1IVFRQIGNsaWVudHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeUwxUGF5bWVudCAoc2V0dGluZ3MgPSB7fSwgcHJvb2YgPSB7fSkge1xuICBjb25zdCB0eGlkID0gU3RyaW5nKHByb29mLnR4aWQgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgYWRkcmVzcyA9IFN0cmluZyhwcm9vZi5hZGRyZXNzIHx8IHByb29mLnRvIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGFtb3VudFNhdHMgPSBOdW1iZXIocHJvb2YuYW1vdW50U2F0cyB8fCAwKTtcbiAgaWYgKCF0eGlkKSB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIGlkICh0eGlkKSBpcyByZXF1aXJlZC4nKTtcbiAgaWYgKCFhZGRyZXNzKSB0aHJvdyBuZXcgRXJyb3IoJ0Rlc3RpbmF0aW9uIGFkZHJlc3MgaXMgcmVxdWlyZWQuJyk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGFtb3VudFNhdHMpIHx8IGFtb3VudFNhdHMgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYW1vdW50U2F0cyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4nKTtcbiAgfVxuXG4gIGNvbnN0IHFzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgYWRkcmVzcyxcbiAgICBhbW91bnRTYXRzOiBTdHJpbmcoTWF0aC5yb3VuZChhbW91bnRTYXRzKSlcbiAgfSk7XG4gIGNvbnN0IHBhdGggPSBgL3RyYW5zYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudCh0eGlkKX0/JHtxcy50b1N0cmluZygpfWA7XG5cbiAgY29uc3QgYmFzZVVybCA9IHJlc29sdmVCYXNlVXJsKHNldHRpbmdzLmV4cGxvcmVyQmFzZVVybCwgJy9zZXJ2aWNlcy9iaXRjb2luJyk7XG4gIGlmICghYmFzZVVybCkgdGhyb3cgbmV3IEVycm9yKCdCaXRjb2luIEFQSSBiYXNlIFVSTCBpcyBub3QgY29uZmlndXJlZC4nKTtcbiAgY29uc3Qgcm9vdCA9IG5vcm1hbGl6ZUJhc2VVcmwoYmFzZVVybCk7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCByZXF1ZXN0SlNPTihgJHtyb290fSR7cGF0aH1gLCB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICBhcGlUb2tlbjogc2V0dGluZ3MuYXBpVG9rZW5cbiAgfSk7XG4gIHJldHVybiBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwgJ3ZlcmlmaWVkJylcbiAgICA/IGRhdGFcbiAgICA6IHsgdmVyaWZpZWQ6IGZhbHNlLCAuLi5kYXRhIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoUGF5bWVudHMgKHNldHRpbmdzID0ge30sIHdhbGxldCA9IHt9LCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZVBheW1lbnRzQmFzZVVybChzZXR0aW5ncy5wYXltZW50c0Jhc2VVcmwpO1xuICBpZiAoIWJhc2VVcmwpIHJldHVybiBbXTtcbiAgY29uc3QgbGltaXQgPSBNYXRoLm1heCgxLCBNYXRoLm1pbigxMDAsIE51bWJlcihvcHRpb25zLmxpbWl0IHx8IDI1KSkpO1xuICBjb25zdCB3YWxsZXRJZCA9IGVuY29kZVVSSUNvbXBvbmVudCh3YWxsZXQud2FsbGV0SWQgfHwgJycpO1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIHBhcmFtcy5zZXQoJ3dhbGxldElkJywgd2FsbGV0LndhbGxldElkIHx8ICcnKTtcbiAgcGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcobGltaXQpKTtcbiAgY29uc3QgbmV0UmF3ID0gb3B0aW9ucy5uZXR3b3JrICE9IG51bGwgPyBTdHJpbmcob3B0aW9ucy5uZXR3b3JrKSA6ICcnO1xuICBjb25zdCBuZXQgPSBuZXRSYXcgPyBuZXRSYXcudG9Mb3dlckNhc2UoKSA6ICdyZWd0ZXN0JztcbiAgaWYgKHdhbGxldCAmJiB3YWxsZXQueHB1Yikge1xuICAgIGNvbnN0IGFkZHJzID0gZGVyaXZlV2F0Y2hBZGRyZXNzZXMod2FsbGV0LCBuZXQsIDI1LCAyNSk7XG4gICAgaWYgKGFkZHJzLmxlbmd0aCA+IDApIHBhcmFtcy5zZXQoJ2FkZHJlc3NlcycsIGFkZHJzLmpvaW4oJywnKSk7XG4gIH1cbiAgY29uc3QgYXV0aFRvayA9IHJlc29sdmVCaXRjb2luQ2xpZW50QXV0aFRva2VuKHNldHRpbmdzLCBiYXNlVXJsKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJ5UmVxdWVzdHMoYmFzZVVybCwgW1xuICAgIHsgcGF0aDogYD8ke3BhcmFtcy50b1N0cmluZygpfWAgfVxuICBdLCBhdXRoVG9rKTtcbiAgcmV0dXJuIHBpY2tBcnJheShyZXN1bHQgPyByZXN1bHQuZGF0YSA6IHt9LCBbJ3BheW1lbnRzJywgJ2l0ZW1zJywgJ3Jlc3VsdHMnLCAnZGF0YSddKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hDcm93ZGZ1bmRpbmdDYW1wYWlnbnMgKHNldHRpbmdzID0ge30pIHtcbiAgY29uc3QgYmFzZVVybCA9IHJlc29sdmVCYXNlVXJsKHNldHRpbmdzLmV4cGxvcmVyQmFzZVVybCwgJy9zZXJ2aWNlcy9iaXRjb2luJyk7XG4gIGNvbnN0IGRhdGEgPSBhd2FpdCByZXF1ZXN0SlNPTihgJHtiYXNlVXJsfS9jcm93ZGZ1bmRpbmcvY2FtcGFpZ25zYCwgeyBtZXRob2Q6ICdHRVQnIH0pO1xuICByZXR1cm4gcGlja0FycmF5KGRhdGEsIFsnY2FtcGFpZ25zJ10pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDcm93ZGZ1bmRpbmdDYW1wYWlnbiAoc2V0dGluZ3MgPSB7fSwgYm9keSA9IHt9LCBhZG1pblRva2VuID0gJycpIHtcbiAgY29uc3QgYmFzZVVybCA9IHJlc29sdmVCYXNlVXJsKHNldHRpbmdzLmV4cGxvcmVyQmFzZVVybCwgJy9zZXJ2aWNlcy9iaXRjb2luJyk7XG4gIGNvbnN0IHRva2VuID0gU3RyaW5nKGFkbWluVG9rZW4gfHwgJycpLnRyaW0oKTtcbiAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdBZG1pbiB0b2tlbiBpcyByZXF1aXJlZCB0byBjcmVhdGUgYSBjYW1wYWlnbi4nKTtcbiAgcmV0dXJuIHJlcXVlc3RKU09OKGAke2Jhc2VVcmx9L2Nyb3dkZnVuZGluZy9jYW1wYWlnbnNgLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgYm9keSxcbiAgICBhcGlUb2tlbjogdG9rZW5cbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQ3Jvd2RmdW5kaW5nQWNwRG9uYXRpb25Qc2J0IChzZXR0aW5ncyA9IHt9LCBjYW1wYWlnbklkID0gJycsIGFtb3VudFNhdHMgPSAwKSB7XG4gIGNvbnN0IGJhc2VVcmwgPSByZXNvbHZlQmFzZVVybChzZXR0aW5ncy5leHBsb3JlckJhc2VVcmwsICcvc2VydmljZXMvYml0Y29pbicpO1xuICBjb25zdCBpZCA9IGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoY2FtcGFpZ25JZCB8fCAnJykudHJpbSgpKTtcbiAgY29uc3QgYW10ID0gTWF0aC5yb3VuZChOdW1iZXIoYW1vdW50U2F0cykpO1xuICBjb25zdCBxID0gTnVtYmVyLmlzRmluaXRlKGFtdCkgJiYgYW10ID4gMCA/IGA/YW1vdW50U2F0cz0ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoYW10KSl9YCA6ICcnO1xuICByZXR1cm4gcmVxdWVzdEpTT04oYCR7YmFzZVVybH0vY3Jvd2RmdW5kaW5nL2NhbXBhaWducy8ke2lkfS9hY3AtZG9uYXRpb24tcHNidCR7cX1gLCB7IG1ldGhvZDogJ0dFVCcgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQ3Jvd2RmdW5kaW5nQ2FtcGFpZ24gKHNldHRpbmdzID0ge30sIGNhbXBhaWduSWQgPSAnJykge1xuICBjb25zdCBiYXNlVXJsID0gcmVzb2x2ZUJhc2VVcmwoc2V0dGluZ3MuZXhwbG9yZXJCYXNlVXJsLCAnL3NlcnZpY2VzL2JpdGNvaW4nKTtcbiAgY29uc3QgaWQgPSBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGNhbXBhaWduSWQgfHwgJycpLnRyaW0oKSk7XG4gIGlmICghaWQpIHRocm93IG5ldyBFcnJvcignY2FtcGFpZ25JZCBpcyByZXF1aXJlZCcpO1xuICByZXR1cm4gcmVxdWVzdEpTT04oYCR7YmFzZVVybH0vY3Jvd2RmdW5kaW5nL2NhbXBhaWducy8ke2lkfWAsIHsgbWV0aG9kOiAnR0VUJyB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hDcm93ZGZ1bmRpbmdQYXlvdXRQc2J0IChzZXR0aW5ncyA9IHt9LCBjYW1wYWlnbklkID0gJycsIG9wdHMgPSB7fSkge1xuICBjb25zdCBiYXNlVXJsID0gcmVzb2x2ZUJhc2VVcmwoc2V0dGluZ3MuZXhwbG9yZXJCYXNlVXJsLCAnL3NlcnZpY2VzL2JpdGNvaW4nKTtcbiAgY29uc3QgaWQgPSBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGNhbXBhaWduSWQgfHwgJycpLnRyaW0oKSk7XG4gIGNvbnN0IGRlc3QgPSBTdHJpbmcoKG9wdHMgJiYgb3B0cy5kZXN0aW5hdGlvbikgfHwgKG9wdHMgJiYgb3B0cy50bykgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgZmVlU2F0cyA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoTnVtYmVyKG9wdHMgJiYgb3B0cy5mZWVTYXRzICE9IG51bGwgPyBvcHRzLmZlZVNhdHMgOiAxMDAwKSkpO1xuICBpZiAoIWlkKSB0aHJvdyBuZXcgRXJyb3IoJ2NhbXBhaWduSWQgaXMgcmVxdWlyZWQnKTtcbiAgaWYgKCFkZXN0KSB0aHJvdyBuZXcgRXJyb3IoJ1BheW91dCBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIHJlcXVpcmVkLicpO1xuICBjb25zdCBxID0gYD9kZXN0aW5hdGlvbj0ke2VuY29kZVVSSUNvbXBvbmVudChkZXN0KX0mZmVlU2F0cz0ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoZmVlU2F0cykpfWA7XG4gIHJldHVybiByZXF1ZXN0SlNPTihgJHtiYXNlVXJsfS9jcm93ZGZ1bmRpbmcvY2FtcGFpZ25zLyR7aWR9L3BheW91dC1wc2J0JHtxfWAsIHsgbWV0aG9kOiAnR0VUJyB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9zdENyb3dkZnVuZGluZ1BheW91dFNpZ25BcmJpdGVyIChzZXR0aW5ncyA9IHt9LCBjYW1wYWlnbklkID0gJycsIHBzYnRCYXNlNjQgPSAnJywgYWRtaW5Ub2tlbiA9ICcnKSB7XG4gIGNvbnN0IGJhc2VVcmwgPSByZXNvbHZlQmFzZVVybChzZXR0aW5ncy5leHBsb3JlckJhc2VVcmwsICcvc2VydmljZXMvYml0Y29pbicpO1xuICBjb25zdCBpZCA9IGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoY2FtcGFpZ25JZCB8fCAnJykudHJpbSgpKTtcbiAgY29uc3QgdG9rZW4gPSBTdHJpbmcoYWRtaW5Ub2tlbiB8fCAnJykudHJpbSgpO1xuICBpZiAoIWlkKSB0aHJvdyBuZXcgRXJyb3IoJ2NhbXBhaWduSWQgaXMgcmVxdWlyZWQnKTtcbiAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdBZG1pbiB0b2tlbiByZXF1aXJlZCBmb3IgYXJiaXRlciBjby1zaWduLicpO1xuICByZXR1cm4gcmVxdWVzdEpTT04oYCR7YmFzZVVybH0vY3Jvd2RmdW5kaW5nL2NhbXBhaWducy8ke2lkfS9wYXlvdXQtc2lnbi1hcmJpdGVyYCwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGJvZHk6IHsgcHNidEJhc2U2NDogU3RyaW5nKHBzYnRCYXNlNjQgfHwgJycpLnRyaW0oKSB9LFxuICAgIGFwaVRva2VuOiB0b2tlblxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcG9zdENyb3dkZnVuZGluZ1BheW91dEJyb2FkY2FzdCAoc2V0dGluZ3MgPSB7fSwgY2FtcGFpZ25JZCA9ICcnLCBwc2J0QmFzZTY0ID0gJycpIHtcbiAgY29uc3QgYmFzZVVybCA9IHJlc29sdmVCYXNlVXJsKHNldHRpbmdzLmV4cGxvcmVyQmFzZVVybCwgJy9zZXJ2aWNlcy9iaXRjb2luJyk7XG4gIGNvbnN0IGlkID0gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhjYW1wYWlnbklkIHx8ICcnKS50cmltKCkpO1xuICBpZiAoIWlkKSB0aHJvdyBuZXcgRXJyb3IoJ2NhbXBhaWduSWQgaXMgcmVxdWlyZWQnKTtcbiAgcmV0dXJuIHJlcXVlc3RKU09OKGAke2Jhc2VVcmx9L2Nyb3dkZnVuZGluZy9jYW1wYWlnbnMvJHtpZH0vcGF5b3V0LWJyb2FkY2FzdGAsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBib2R5OiB7IHBzYnRCYXNlNjQ6IFN0cmluZyhwc2J0QmFzZTY0IHx8ICcnKS50cmltKCkgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBBZG1pbjogYWZ0ZXIgQ0xUViBoZWlnaHQsIGJ1aWxkIGFyYml0ZXItc2lnbmVkIHJlZnVuZCB0eCAodmF1bHQg4oaSIGRlc3RpbmF0aW9uKS5cbiAqIEJvZHk6IGRlc3RpbmF0aW9uQWRkcmVzcywgZnVuZGVkVHhpZCwgZmVlU2F0cz8sIHZvdXQ/IChvcHRpb25hbCBpZiB1bmFtYmlndW91cykuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBvc3RDcm93ZGZ1bmRpbmdSZWZ1bmRQcmVwYXJlIChzZXR0aW5ncyA9IHt9LCBjYW1wYWlnbklkID0gJycsIGJvZHkgPSB7fSwgYWRtaW5Ub2tlbiA9ICcnKSB7XG4gIGNvbnN0IGJhc2VVcmwgPSByZXNvbHZlQmFzZVVybChzZXR0aW5ncy5leHBsb3JlckJhc2VVcmwsICcvc2VydmljZXMvYml0Y29pbicpO1xuICBjb25zdCBpZCA9IGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoY2FtcGFpZ25JZCB8fCAnJykudHJpbSgpKTtcbiAgY29uc3QgdG9rZW4gPSBTdHJpbmcoYWRtaW5Ub2tlbiB8fCAnJykudHJpbSgpO1xuICBpZiAoIWlkKSB0aHJvdyBuZXcgRXJyb3IoJ2NhbXBhaWduSWQgaXMgcmVxdWlyZWQnKTtcbiAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdBZG1pbiB0b2tlbiByZXF1aXJlZCBmb3IgcmVmdW5kIHByZXBhcmUuJyk7XG4gIGNvbnN0IGIgPSBib2R5ICYmIHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyA/IGJvZHkgOiB7fTtcbiAgcmV0dXJuIHJlcXVlc3RKU09OKGAke2Jhc2VVcmx9L2Nyb3dkZnVuZGluZy9jYW1wYWlnbnMvJHtpZH0vcmVmdW5kLXByZXBhcmVgLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgYm9keToge1xuICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiBTdHJpbmcoYi5kZXN0aW5hdGlvbkFkZHJlc3MgfHwgYi50b0FkZHJlc3MgfHwgJycpLnRyaW0oKSxcbiAgICAgIGZ1bmRlZFR4aWQ6IFN0cmluZyhiLmZ1bmRlZFR4aWQgfHwgYi50eGlkIHx8ICcnKS50cmltKCksXG4gICAgICBmZWVTYXRzOiBiLmZlZVNhdHMgIT0gbnVsbCA/IE1hdGgubWF4KDEsIE1hdGgucm91bmQoTnVtYmVyKGIuZmVlU2F0cykpKSA6IHVuZGVmaW5lZCxcbiAgICAgIHZvdXQ6IGIudm91dCAhPSBudWxsICYmIGIudm91dCAhPT0gJycgPyBOdW1iZXIoYi52b3V0KSA6IHVuZGVmaW5lZFxuICAgIH0sXG4gICAgYXBpVG9rZW46IHRva2VuXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmtleSBoZXggZm9yIG0vNDQnLzAnLzAnLzAvMCAoQklQNDQgcGF5bWVudCBhY2NvdW50IGV4dGVybmFsICMwKSDigJQgVGFwcm9vdCBjcm93ZGZ1bmQgYmVuZWZpY2lhcnkuXG4gKiBVc2VzIHRoZSBzYW1lIGFjY291bnQgKyBleHRlcm5hbCBwYXRoIGFzIHtAbGluayBnZXRTcGVuZFdhbGxldENvbnRleHR9IC8gUGF5bWVudHMuIFdpdGggYSBtYXN0ZXIgeHBydiBvbiB0aGUgaWRlbnRpdHksXG4gKiBkZXJpdmVzIG0vNDQnLzAnLzAnLzAvMDsgd2hlbiBsb2NrZWQsIHVzZXMgdGhlIHBlcnNpc3RlZCBzcGVuZC1hY2NvdW50IHhwdWIgZnJvbSB3YWxsZXQgY29udGV4dCBpZiBwcmVzZW50LlxuICogRW1wdHkgc3RyaW5nIGlmIHVuYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiBnZXRDcm93ZGZ1bmRpbmdCZW5lZmljaWFyeVB1YmtleUhleCAoaWRlbnRpdHkgPSB7fSkge1xuICBjb25zdCB3ID0gZ2V0U3BlbmRXYWxsZXRDb250ZXh0KGlkZW50aXR5KTtcbiAgY29uc3QgbWF0ID0gYml0Y29pbkRlcml2YXRpb25TZWNyZXRzRnJvbUZhYnJpY0lkZW50aXR5KGlkZW50aXR5KTtcbiAgY29uc3QgbWFzdGVyWHBydiA9IFN0cmluZyhtYXQueHBydkZvckJpdGNvaW4gfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgbWFzdGVyWHB1YiA9IFN0cmluZyhtYXQueHB1YkhpbnQgfHwgJycpLnRyaW0oKTtcblxuICBsZXQgYWNjb3VudFhwcnYgPSAnJztcbiAgbGV0IGFjY291bnRYcHViID0gJyc7XG5cbiAgaWYgKG1hc3RlclhwcnYpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWNjb3VudE4gPSBnZXRCaXRjb2luQmlwNDRBY2NvdW50Rm9ySWRlbnRpdHkoaWRlbnRpdHkpO1xuICAgICAgY29uc3QgZCA9IGRlcml2ZUZhYnJpY0JpdGNvaW5BY2NvdW50S2V5cyhtYXN0ZXJYcHJ2LCBtYXN0ZXJYcHViLCBhY2NvdW50Tik7XG4gICAgICBhY2NvdW50WHBydiA9IFN0cmluZyhkLnhwcnYgfHwgJycpLnRyaW0oKTtcbiAgICAgIGFjY291bnRYcHViID0gU3RyaW5nKGQueHB1YiB8fCAnJykudHJpbSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFNvbWUgcnVudGltZSBpZGVudGl0eSBzbmFwc2hvdHMgcHJvdmlkZSBub24tbWFzdGVyIHhwcnYgbWF0ZXJpYWwuXG4gICAgICAvLyBGYWxsIGJhY2sgdG8gd2F0Y2gtb25seSBhY2NvdW50IHhwdWIgZGVyaXZhdGlvbiBzbyBcIkZpbGwgZnJvbSB3YWxsZXRcIiBzdGlsbCB3b3Jrcy5cbiAgICAgIGFjY291bnRYcHViID0gU3RyaW5nKHcueHB1YiB8fCBtYXN0ZXJYcHViIHx8ICcnKS50cmltKCk7XG4gICAgICBpZiAoIWFjY291bnRYcHViKSByZXR1cm4gJyc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIENyb3dkZnVuZCBcImJlbmVmaWNpYXJ5IHB1YmtleVwiIHNob3VsZCBzdGlsbCBkZXJpdmUgZnJvbSBhIGxvZ2dlZC1pbiBpZGVudGl0eSB4cHViLFxuICAgIC8vIGV2ZW4gd2hlbiB3YWxsZXQgY29udGV4dCBpbnRlbnRpb25hbGx5IHN1cHByZXNzZXMgd2F0Y2gtb25seSBBUEkgZGVzY3JpcHRvcnMuXG4gICAgYWNjb3VudFhwdWIgPSBTdHJpbmcody54cHViIHx8IG1hc3RlclhwdWIgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIWFjY291bnRYcHViKSByZXR1cm4gJyc7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IG5ldCA9IGdldE5ldHdvcmtGcm9tWHB1YihhY2NvdW50WHB1YiB8fCBhY2NvdW50WHBydik7XG4gICAgY29uc3QgYmlwMzJJbnN0ID0gbmV3IEJJUDMyKGVjYyk7XG4gICAgY29uc3Qgcm9vdCA9IGFjY291bnRYcHJ2XG4gICAgICA/IGJpcDMySW5zdC5mcm9tQmFzZTU4KGFjY291bnRYcHJ2LCBuZXQpXG4gICAgICA6IGJpcDMySW5zdC5mcm9tQmFzZTU4KGFjY291bnRYcHViLCBuZXQpO1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdC5kZXJpdmUoMCkuZGVyaXZlKDApO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShjaGlsZC5wdWJsaWNLZXkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG4vKipcbiAqIDMyLWJ5dGUgc2VjcDI1NmsxIHNlY3JldCBmb3IgbS80NCcvMCcvMCcvMC8wIOKAlCBzYW1lIGxlYWYgYXMge0BsaW5rIGdldENyb3dkZnVuZGluZ0JlbmVmaWNpYXJ5UHVia2V5SGV4fS5cbiAqIE9ubHkgd2hlbiBpZGVudGl0eSBtYXN0ZXIgeHBydiBjYW4gZGVyaXZlIHRoZSBwYXltZW50IGFjY291bnQ7IG51bGwgaWYgbG9ja2VkIC8gd2F0Y2gtb25seS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpZGVudGl0eVxuICogQHJldHVybnMge0J1ZmZlcnxudWxsfVxuICovXG5mdW5jdGlvbiBnZXRDcm93ZGZ1bmRpbmdCZW5lZmljaWFyeVByaXZhdGVLZXkzMiAoaWRlbnRpdHkgPSB7fSkge1xuICBjb25zdCBtYXQgPSBiaXRjb2luRGVyaXZhdGlvblNlY3JldHNGcm9tRmFicmljSWRlbnRpdHkoaWRlbnRpdHkpO1xuICBjb25zdCBtYXN0ZXJYcHJ2ID0gU3RyaW5nKG1hdC54cHJ2Rm9yQml0Y29pbiB8fCAnJykudHJpbSgpO1xuICBjb25zdCBtYXN0ZXJYcHViID0gU3RyaW5nKG1hdC54cHViSGludCB8fCAnJykudHJpbSgpO1xuICBpZiAoIW1hc3RlclhwcnYpIHJldHVybiBudWxsO1xuICBsZXQgYWNjb3VudFhwcnYgPSAnJztcbiAgbGV0IGFjY291bnRYcHViID0gJyc7XG4gIHRyeSB7XG4gICAgY29uc3QgYWNjb3VudE4gPSBnZXRCaXRjb2luQmlwNDRBY2NvdW50Rm9ySWRlbnRpdHkoaWRlbnRpdHkpO1xuICAgIGNvbnN0IGQgPSBkZXJpdmVGYWJyaWNCaXRjb2luQWNjb3VudEtleXMobWFzdGVyWHBydiwgbWFzdGVyWHB1YiwgYWNjb3VudE4pO1xuICAgIGFjY291bnRYcHJ2ID0gU3RyaW5nKGQueHBydiB8fCAnJykudHJpbSgpO1xuICAgIGFjY291bnRYcHViID0gU3RyaW5nKGQueHB1YiB8fCAnJykudHJpbSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFhY2NvdW50WHBydikgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgbmV0ID0gZ2V0TmV0d29ya0Zyb21YcHViKGFjY291bnRYcHViIHx8IGFjY291bnRYcHJ2KTtcbiAgICBjb25zdCBiaXAzMkluc3QgPSBuZXcgQklQMzIoZWNjKTtcbiAgICBjb25zdCByb290ID0gYmlwMzJJbnN0LmZyb21CYXNlNTgoYWNjb3VudFhwcnYsIG5ldCk7XG4gICAgY29uc3QgY2hpbGQgPSByb290LmRlcml2ZSgwKS5kZXJpdmUoMCk7XG4gICAgaWYgKCFjaGlsZC5wcml2YXRlS2V5KSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oY2hpbGQucHJpdmF0ZUtleSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIERlZmF1bHQgb24tY2hhaW4gcGF5b3V0IGRlc3RpbmF0aW9uOiBCSVA0NCBhY2NvdW50IDAgZXh0ZXJuYWwgYWRkcmVzcyBpbmRleCAwICh3cGtoKSwgbWF0Y2hpbmcgYmVuZWZpY2lhcnkgcHVia2V5IHBhdGguXG4gKiBAcGFyYW0ge29iamVjdH0gaWRlbnRpdHlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXR3b3JrTmFtZSAtIEh1YiBuZXR3b3JrIG5hbWUgKHJlZ3Rlc3QsIHRlc3RuZXQsIG1haW5uZXQsIOKApilcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGFkZHJlc3Mgb3IgJydcbiAqL1xuZnVuY3Rpb24gZ2V0Q3Jvd2RmdW5kaW5nQmVuZWZpY2lhcnlQYXlvdXRBZGRyZXNzIChpZGVudGl0eSA9IHt9LCBuZXR3b3JrTmFtZSA9ICcnKSB7XG4gIGNvbnN0IHcgPSBnZXRTcGVuZFdhbGxldENvbnRleHQoaWRlbnRpdHkpO1xuICBjb25zdCB4cHViID0gU3RyaW5nKHcueHB1YiB8fCAnJykudHJpbSgpO1xuICBpZiAoIXhwdWIpIHJldHVybiAnJztcbiAgY29uc3QgZGVyaXZlZCA9IGRlcml2ZVJlY2VpdmVBZGRyZXNzRnJvbVhwdWIoeHB1YiwgMCwgbmV0d29ya05hbWUpO1xuICByZXR1cm4gZGVyaXZlZCAmJiBkZXJpdmVkLmFkZHJlc3MgPyBTdHJpbmcoZGVyaXZlZC5hZGRyZXNzKSA6ICcnO1xufVxuXG4vKipcbiAqIFNpZ24gYWxsIGlucHV0cyBvZiBhIFRhcHJvb3QgY3Jvd2RmdW5kIHBheW91dCBQU0JUIHdpdGggdGhlIGJlbmVmaWNpYXJ5IGtleSAoYnJvd3Nlci1vbmx5KS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwc2J0QmFzZTY0XG4gKiBAcGFyYW0ge29iamVjdH0gaWRlbnRpdHlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuZXR3b3JrTmFtZVxuICogQHJldHVybnMge3N0cmluZ30gcHNidEJhc2U2NFxuICovXG5mdW5jdGlvbiBzaWduQ3Jvd2RmdW5kaW5nUGF5b3V0UHNidEJlbmVmaWNpYXJ5IChwc2J0QmFzZTY0ID0gJycsIGlkZW50aXR5ID0ge30sIG5ldHdvcmtOYW1lID0gJ3JlZ3Rlc3QnKSB7XG4gIGNvbnN0IGI2NCA9IFN0cmluZyhwc2J0QmFzZTY0IHx8ICcnKS50cmltKCk7XG4gIGlmICghYjY0KSB0aHJvdyBuZXcgRXJyb3IoJ1BTQlQgYmFzZTY0IGlzIHJlcXVpcmVkLicpO1xuICBjb25zdCBwcml2ID0gZ2V0Q3Jvd2RmdW5kaW5nQmVuZWZpY2lhcnlQcml2YXRlS2V5MzIoaWRlbnRpdHkpO1xuICBpZiAoIXByaXYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VubG9jayBpZGVudGl0eSBzbyB0aGUgQklQNDQgcGF5bWVudCBrZXkgKG0vNDRcXCcvMFxcJy8wXFwnLzAvMCkgaXMgYXZhaWxhYmxlIHRvIHNpZ24uJyk7XG4gIH1cbiAgY29uc3QgYml0Y29pbiA9IHJlcXVpcmUoJ2JpdGNvaW5qcy1saWInKTtcbiAgY29uc3QgY3Jvd2RmdW5kaW5nVGFwcm9vdCA9IHJlcXVpcmUoJy4vY3Jvd2RmdW5kaW5nVGFwcm9vdCcpO1xuICBjb25zdCBuZXR3b3JrID0gY3Jvd2RmdW5kaW5nVGFwcm9vdC5uZXR3b3JrRm9yRmFicmljTmFtZShuZXR3b3JrTmFtZSk7XG4gIGxldCBwc2J0O1xuICB0cnkge1xuICAgIHBzYnQgPSBiaXRjb2luLlBzYnQuZnJvbUJhc2U2NChiNjQsIHsgbmV0d29yayB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigoZSAmJiBlLm1lc3NhZ2UpID8gZS5tZXNzYWdlIDogJ0ludmFsaWQgUFNCVC4nKTtcbiAgfVxuICBpZiAocHNidC5pbnB1dENvdW50IDwgMSkgdGhyb3cgbmV3IEVycm9yKCdQU0JUIGhhcyBubyBpbnB1dHMuJyk7XG4gIGNyb3dkZnVuZGluZ1RhcHJvb3Quc2lnbkFsbElucHV0c1dpdGhLZXkocHNidCwgcHJpdik7XG4gIHJldHVybiBwc2J0LnRvQmFzZTY0KCk7XG59XG5cbi8qKlxuICogQklQMjEgVVJJIGZvciBvbi1jaGFpbiBwYXltZW50IHRvIGEgY3Jvd2RmdW5kIHZhdWx0IChgYml0Y29pbjrigKY/YW1vdW50PWApLlxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYW1vdW50QnRjXSAtIG9wdGlvbmFsOyBvbWl0IG9yIG5vbi1wb3NpdGl2ZSBmb3IgYWRkcmVzcy1vbmx5IFVSSVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gYnVpbGRDcm93ZGZ1bmRGdW5kZXJCaXRjb2luVXJpIChhZGRyZXNzLCBhbW91bnRCdGMpIHtcbiAgY29uc3QgYWRkciA9IFN0cmluZyhhZGRyZXNzIHx8ICcnKS50cmltKCk7XG4gIGlmICghYWRkcikgcmV0dXJuICcnO1xuICBjb25zdCBuID0gTnVtYmVyKGFtb3VudEJ0Yyk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG4pIHx8IG4gPD0gMCkgcmV0dXJuIGBiaXRjb2luOiR7YWRkcn1gO1xuICBjb25zdCBhbXQgPSBuLnRvRml4ZWQoOCkucmVwbGFjZSgvXFwuPzArJC8sICcnKSB8fCAnMCc7XG4gIHJldHVybiBgYml0Y29pbjoke2FkZHJ9P2Ftb3VudD0ke2FtdH1gO1xufVxuXG4vKipcbiAqIEluLWFwcCBQYXltZW50cyBwYXRoIHdpdGggYHBheVRvYCAvIGBwYXlBbW91bnRTYXRzYCBxdWVyeSAoc2VlIGBCaXRjb2luUGF5bWVudHNIb21lUm91dGVgKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMucGF5VG9dXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuYWRkcmVzc10gLSBhbGlhcyBmb3IgcGF5VG9cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5hbW91bnRTYXRzXVxuICovXG5mdW5jdGlvbiBidWlsZENyb3dkZnVuZFBheW1lbnRzRGVlcExpbmsgKG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXlUbyA9IFN0cmluZyhvcHRzLnBheVRvIHx8IG9wdHMuYWRkcmVzcyB8fCAnJykudHJpbSgpO1xuICBjb25zdCBhbW91bnRTYXRzID0gTWF0aC5yb3VuZChOdW1iZXIob3B0cy5hbW91bnRTYXRzICE9IG51bGwgPyBvcHRzLmFtb3VudFNhdHMgOiBvcHRzLnBheUFtb3VudFNhdHMgfHwgMCkpO1xuICBpZiAoIXBheVRvKSByZXR1cm4gJy9wYXltZW50cyc7XG4gIGNvbnN0IHFzID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICBxcy5zZXQoJ3BheVRvJywgcGF5VG8pO1xuICBpZiAoTnVtYmVyLmlzRmluaXRlKGFtb3VudFNhdHMpICYmIGFtb3VudFNhdHMgPiAwKSBxcy5zZXQoJ3BheUFtb3VudFNhdHMnLCBTdHJpbmcoYW1vdW50U2F0cykpO1xuICByZXR1cm4gYC9wYXltZW50cz8ke3FzLnRvU3RyaW5nKCl9YDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlZCBHRVQgVVJMIGZvciBjYW1wYWlnbiBKU09OIChg4oCmL2Nyb3dkZnVuZGluZy9jYW1wYWlnbnMvOmlkYCkuXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0dGluZ3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBjYW1wYWlnbklkXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjcm93ZGZ1bmRDYW1wYWlnbkFwaVVybCAoc2V0dGluZ3MgPSB7fSwgY2FtcGFpZ25JZCA9ICcnKSB7XG4gIGNvbnN0IGlkID0gU3RyaW5nKGNhbXBhaWduSWQgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFpZCkgcmV0dXJuICcnO1xuICBjb25zdCBiYXNlVXJsID0gcmVzb2x2ZUJhc2VVcmwoc2V0dGluZ3MuZXhwbG9yZXJCYXNlVXJsLCAnL3NlcnZpY2VzL2JpdGNvaW4nKTtcbiAgaWYgKCFiYXNlVXJsKSByZXR1cm4gJyc7XG4gIGNvbnN0IHJvb3QgPSBub3JtYWxpemVCYXNlVXJsKGJhc2VVcmwpO1xuICByZXR1cm4gYCR7cm9vdH0vY3Jvd2RmdW5kaW5nL2NhbXBhaWducy8ke2VuY29kZVVSSUNvbXBvbmVudChpZCl9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hQYXlqb2luQ2FwYWJpbGl0aWVzIChzZXR0aW5ncyA9IHt9KSB7XG4gIGNvbnN0IGJhc2VVcmwgPSBub3JtYWxpemVQYXlqb2luQmFzZVVybChzZXR0aW5ncy5wYXlqb2luQmFzZVVybCB8fCBzZXR0aW5ncy5leHBsb3JlckJhc2VVcmwpO1xuICBpZiAoIWJhc2VVcmwpIHJldHVybiB7IGF2YWlsYWJsZTogZmFsc2UgfTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJ5UmVxdWVzdHMoYmFzZVVybCwgW1xuICAgIHsgcGF0aDogJycgfVxuICBdLCBzZXR0aW5ncy5hcGlUb2tlbik7XG4gIHJldHVybiBwaWNrT2JqZWN0KHJlc3VsdCA/IHJlc3VsdC5kYXRhIDoge30sIFsnY2FwYWJpbGl0aWVzJywgJ3Jlc3VsdCcsICdkYXRhJ10pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVQYXlqb2luRGVwb3NpdCAoc2V0dGluZ3MgPSB7fSwgd2FsbGV0ID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBiYXNlVXJsID0gbm9ybWFsaXplUGF5am9pbkJhc2VVcmwoc2V0dGluZ3MucGF5am9pbkJhc2VVcmwgfHwgc2V0dGluZ3MuZXhwbG9yZXJCYXNlVXJsKTtcbiAgaWYgKCFiYXNlVXJsKSB0aHJvdyBuZXcgRXJyb3IoJ1BheWpvaW4gQVBJIGJhc2UgVVJMIGlzIG5vdCBjb25maWd1cmVkLicpO1xuXG4gIGNvbnN0IHJlY2VpdmVUZW1wbGF0ZSA9IFN0cmluZyhvcHRpb25zLnJlY2VpdmVUZW1wbGF0ZSB8fCAnJykudHJpbSgpO1xuICBjb25zdCBwYXlsb2FkID0ge1xuICAgIHdhbGxldElkOiB3YWxsZXQud2FsbGV0SWQsXG4gICAgeHB1Yjogd2FsbGV0LnhwdWIsXG4gICAgYWRkcmVzczogb3B0aW9ucy5hZGRyZXNzIHx8IHdhbGxldC5hZGRyZXNzIHx8ICcnLFxuICAgIGFtb3VudFNhdHM6IE51bWJlcihvcHRpb25zLmFtb3VudFNhdHMgfHwgMCksXG4gICAgbGFiZWw6IG9wdGlvbnMubGFiZWwgfHwgJycsXG4gICAgbWVtbzogb3B0aW9ucy5tZW1vIHx8ICcnLFxuICAgIGV4cGlyZXNJblNlY29uZHM6IE51bWJlcihvcHRpb25zLmV4cGlyZXNJblNlY29uZHMgfHwgMCkgfHwgdW5kZWZpbmVkXG4gIH07XG4gIGlmIChyZWNlaXZlVGVtcGxhdGUpIHBheWxvYWQucmVjZWl2ZVRlbXBsYXRlID0gcmVjZWl2ZVRlbXBsYXRlO1xuICBjb25zdCBmZWQgPSBTdHJpbmcob3B0aW9ucy5mZWRlcmF0aW9uWE9ubHlIZXggfHwgJycpLnRyaW0oKTtcbiAgaWYgKGZlZCkgcGF5bG9hZC5mZWRlcmF0aW9uWE9ubHlIZXggPSBmZWQ7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJ5UmVxdWVzdHMoYmFzZVVybCwgW1xuICAgIHsgbWV0aG9kOiAnUE9TVCcsIHBhdGg6ICcvc2Vzc2lvbnMnLCBib2R5OiBwYXlsb2FkIH1cbiAgXSwgc2V0dGluZ3MuYXBpVG9rZW4pO1xuXG4gIHJldHVybiBwaWNrT2JqZWN0KHJlc3VsdCA/IHJlc3VsdC5kYXRhIDoge30sIFsnc2Vzc2lvbicsICdyZXN1bHQnLCAnZGF0YSddKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hQYXlqb2luU2Vzc2lvbnMgKHNldHRpbmdzID0ge30sIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBiYXNlVXJsID0gbm9ybWFsaXplUGF5am9pbkJhc2VVcmwoc2V0dGluZ3MucGF5am9pbkJhc2VVcmwgfHwgc2V0dGluZ3MuZXhwbG9yZXJCYXNlVXJsKTtcbiAgaWYgKCFiYXNlVXJsKSByZXR1cm4gW107XG5cbiAgY29uc3QgbGltaXQgPSBNYXRoLm1heCgxLCBNYXRoLm1pbigyMDAsIE51bWJlcihvcHRpb25zLmxpbWl0IHx8IDI1KSkpO1xuICBjb25zdCBpbmNsdWRlRXhwaXJlZCA9IG9wdGlvbnMuaW5jbHVkZUV4cGlyZWQgIT09IGZhbHNlO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cnlSZXF1ZXN0cyhiYXNlVXJsLCBbXG4gICAgeyBwYXRoOiBgL3Nlc3Npb25zP2xpbWl0PSR7bGltaXR9JmluY2x1ZGVFeHBpcmVkPSR7aW5jbHVkZUV4cGlyZWQgPyAndHJ1ZScgOiAnZmFsc2UnfWAgfVxuICBdLCBzZXR0aW5ncy5hcGlUb2tlbik7XG4gIHJldHVybiBwaWNrQXJyYXkocmVzdWx0ID8gcmVzdWx0LmRhdGEgOiB7fSwgWydzZXNzaW9ucycsICdpdGVtcycsICdyZXN1bHRzJywgJ2RhdGEnXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoUGF5am9pblNlc3Npb24gKHNldHRpbmdzID0ge30sIHNlc3Npb25JZCA9ICcnKSB7XG4gIGNvbnN0IGJhc2VVcmwgPSBub3JtYWxpemVQYXlqb2luQmFzZVVybChzZXR0aW5ncy5wYXlqb2luQmFzZVVybCB8fCBzZXR0aW5ncy5leHBsb3JlckJhc2VVcmwpO1xuICBjb25zdCBpZCA9IGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoc2Vzc2lvbklkIHx8ICcnKS50cmltKCkpO1xuICBpZiAoIWJhc2VVcmwgfHwgIWlkKSByZXR1cm4ge307XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyeVJlcXVlc3RzKGJhc2VVcmwsIFtcbiAgICB7IHBhdGg6IGAvc2Vzc2lvbnMvJHtpZH1gIH1cbiAgXSwgc2V0dGluZ3MuYXBpVG9rZW4pO1xuICByZXR1cm4gcGlja09iamVjdChyZXN1bHQgPyByZXN1bHQuZGF0YSA6IHt9LCBbJ3Nlc3Npb24nLCAncmVzdWx0JywgJ2RhdGEnXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFBheWpvaW5Qcm9wb3NhbCAoc2V0dGluZ3MgPSB7fSwgc2Vzc2lvbklkID0gJycsIHByb3Bvc2FsID0ge30pIHtcbiAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZVBheWpvaW5CYXNlVXJsKHNldHRpbmdzLnBheWpvaW5CYXNlVXJsIHx8IHNldHRpbmdzLmV4cGxvcmVyQmFzZVVybCk7XG4gIGNvbnN0IGlkID0gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhzZXNzaW9uSWQgfHwgJycpLnRyaW0oKSk7XG4gIGlmICghYmFzZVVybCkgdGhyb3cgbmV3IEVycm9yKCdQYXlqb2luIEFQSSBiYXNlIFVSTCBpcyBub3QgY29uZmlndXJlZC4nKTtcbiAgaWYgKCFpZCkgdGhyb3cgbmV3IEVycm9yKCdQYXlqb2luIHNlc3Npb24gSUQgaXMgcmVxdWlyZWQuJyk7XG5cbiAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICBwc2J0OiBwcm9wb3NhbC5wc2J0IHx8ICcnLFxuICAgIHR4aGV4OiBwcm9wb3NhbC50eGhleCB8fCAnJ1xuICB9O1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyeVJlcXVlc3RzKGJhc2VVcmwsIFtcbiAgICB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiBgL3Nlc3Npb25zLyR7aWR9L3Byb3Bvc2Fsc2AsIGJvZHk6IHBheWxvYWQgfVxuICBdLCBzZXR0aW5ncy5hcGlUb2tlbik7XG5cbiAgcmV0dXJuIHBpY2tPYmplY3QocmVzdWx0ID8gcmVzdWx0LmRhdGEgOiB7fSwgWydyZXN1bHQnLCAnc2Vzc2lvbicsICdkYXRhJ10pO1xufVxuXG4vKipcbiAqIFBPU1QgLi4uL3Nlc3Npb25zLzppZC9hY3AtaHViLWJvb3N0IOKAlCBIdWIgYXBwZW5kcyArIHNpZ25zIGEgd2FsbGV0IGlucHV0IG9uIGFuIEFOWU9ORUNBTlBBWXxBTEwgcGF5ZXIgUFNCVC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhZG1pblRva2VuIC0gc2V0dXAgYWRtaW4gdG9rZW4gKEJlYXJlcilcbiAqIEBwYXJhbSB7eyBwc2J0Pzogc3RyaW5nIH19IFtvcHRpb25zXSAtIG9wdGlvbmFsIFBTQlQgKGVsc2Ugc2VydmVyIHVzZXMgbGF0ZXN0IHByb3Bvc2FsIG9uIHNlc3Npb24pXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5UGF5am9pbkFjcEh1YkJvb3N0IChzZXR0aW5ncyA9IHt9LCBzZXNzaW9uSWQgPSAnJywgYWRtaW5Ub2tlbiA9ICcnLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZVBheWpvaW5CYXNlVXJsKHNldHRpbmdzLnBheWpvaW5CYXNlVXJsIHx8IHNldHRpbmdzLmV4cGxvcmVyQmFzZVVybCk7XG4gIGNvbnN0IGlkID0gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhzZXNzaW9uSWQgfHwgJycpLnRyaW0oKSk7XG4gIGlmICghYmFzZVVybCkgdGhyb3cgbmV3IEVycm9yKCdQYXlqb2luIEFQSSBiYXNlIFVSTCBpcyBub3QgY29uZmlndXJlZC4nKTtcbiAgaWYgKCFpZCkgdGhyb3cgbmV3IEVycm9yKCdQYXlqb2luIHNlc3Npb24gSUQgaXMgcmVxdWlyZWQuJyk7XG4gIGNvbnN0IHRva2VuID0gU3RyaW5nKGFkbWluVG9rZW4gfHwgJycpLnRyaW0oKTtcbiAgaWYgKCF0b2tlbikgdGhyb3cgbmV3IEVycm9yKCdBZG1pbiB0b2tlbiBpcyByZXF1aXJlZCBmb3IgQUNQIEh1YiBib29zdC4nKTtcbiAgY29uc3Qgcm9vdCA9IG5vcm1hbGl6ZUJhc2VVcmwoYmFzZVVybCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gIGNvbnN0IGJvZHkgPSB7fTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wc2J0KSBib2R5LnBzYnQgPSBTdHJpbmcob3B0aW9ucy5wc2J0KTtcbiAgY29uc3QgZGF0YSA9IGF3YWl0IHJlcXVlc3RKU09OKGAke3Jvb3R9L3Nlc3Npb25zLyR7aWR9L2FjcC1odWItYm9vc3RgLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgYm9keTogT2JqZWN0LmtleXMoYm9keSkubGVuZ3RoID8gYm9keSA6IHVuZGVmaW5lZCxcbiAgICBhcGlUb2tlbjogdG9rZW5cbiAgfSk7XG4gIHJldHVybiBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVCbG9jayAoc2V0dGluZ3MgPSB7fSwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGJhc2VVcmwgPSByZXNvbHZlQmFzZVVybChzZXR0aW5ncy5leHBsb3JlckJhc2VVcmwsICcvc2VydmljZXMvYml0Y29pbicpO1xuICBpZiAoIWJhc2VVcmwpIHRocm93IG5ldyBFcnJvcignRXhwbG9yZXIgQVBJIGJhc2UgVVJMIGlzIG5vdCBjb25maWd1cmVkLicpO1xuXG4gIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgY291bnQ6IE51bWJlcihvcHRpb25zLmNvdW50IHx8IDEpXG4gIH07XG4gIGlmIChvcHRpb25zLmFkZHJlc3MpIHBheWxvYWQuYWRkcmVzcyA9IFN0cmluZyhvcHRpb25zLmFkZHJlc3MpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyeVJlcXVlc3RzKGJhc2VVcmwsIFtcbiAgICB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiAnL2Jsb2NrcycsIGJvZHk6IHBheWxvYWQgfVxuICBdLCBzZXR0aW5ncy5hcGlUb2tlbik7XG5cbiAgcmV0dXJuIHBpY2tPYmplY3QocmVzdWx0ID8gcmVzdWx0LmRhdGEgOiB7fSwgWydyZXN1bHQnLCAnZGF0YSddKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hCaXRjb2luUGVlcnMgKHNldHRpbmdzID0ge30pIHtcbiAgY29uc3QgYmFzZVVybCA9IHJlc29sdmVCYXNlVXJsKHNldHRpbmdzLmV4cGxvcmVyQmFzZVVybCwgJy9zZXJ2aWNlcy9iaXRjb2luJyk7XG4gIGlmICghYmFzZVVybCkgcmV0dXJuIFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyeVJlcXVlc3RzKGJhc2VVcmwsIFtcbiAgICAgIHsgcGF0aDogJy9wZWVycycgfVxuICAgIF0sIHNldHRpbmdzLmFwaVRva2VuKTtcbiAgICBjb25zdCBkYXRhID0gcmVzdWx0ICYmIHJlc3VsdC5kYXRhO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSByZXR1cm4gZGF0YTtcbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIFtdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEJpdGNvaW5OZXR3b3JrU3VtbWFyeSAoc2V0dGluZ3MgPSB7fSkge1xuICBjb25zdCBiYXNlVXJsID0gcmVzb2x2ZUJhc2VVcmwoc2V0dGluZ3MuZXhwbG9yZXJCYXNlVXJsLCAnL3NlcnZpY2VzL2JpdGNvaW4nKTtcbiAgaWYgKCFiYXNlVXJsKSByZXR1cm4ge307XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJ5UmVxdWVzdHMoYmFzZVVybCwgW1xuICAgICAgeyBwYXRoOiAnL25ldHdvcmsnIH1cbiAgICBdLCBzZXR0aW5ncy5hcGlUb2tlbik7XG4gICAgY29uc3QgZGF0YSA9IHJlc3VsdCAmJiByZXN1bHQuZGF0YTtcbiAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHJldHVybiBkYXRhO1xuICB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4ge307XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJyb2FkY2FzdFJhd1RyYW5zYWN0aW9uIChzZXR0aW5ncyA9IHt9LCBoZXggPSAnJywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGJhc2VVcmwgPSByZXNvbHZlQmFzZVVybChzZXR0aW5ncy5leHBsb3JlckJhc2VVcmwsICcvc2VydmljZXMvYml0Y29pbicpO1xuICBpZiAoIWJhc2VVcmwpIHRocm93IG5ldyBFcnJvcignRXhwbG9yZXIgQVBJIGJhc2UgVVJMIGlzIG5vdCBjb25maWd1cmVkLicpO1xuICBjb25zdCByYXcgPSBTdHJpbmcoaGV4IHx8ICcnKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgaWYgKCFyYXcpIHRocm93IG5ldyBFcnJvcignUmF3IHRyYW5zYWN0aW9uIGhleCBpcyByZXF1aXJlZC4nKTtcbiAgY29uc3QgYWRtaW5Ub2tlbiA9IFN0cmluZyhvcHRzLmFkbWluVG9rZW4gfHwgJycpLnRyaW0oKTtcbiAgY29uc3Qgcm9vdCA9IG5vcm1hbGl6ZUJhc2VVcmwoYmFzZVVybCk7XG4gIGNvbnN0IHVybCA9IGAke3Jvb3R9L2Jyb2FkY2FzdGA7XG4gIGNvbnN0IGhlYWRlcnMgPSBtYWtlSGVhZGVycyhzZXR0aW5ncy5hcGlUb2tlbiwgJ1BPU1QnKTtcbiAgaWYgKGFkbWluVG9rZW4pIGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGBCZWFyZXIgJHthZG1pblRva2VufWA7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVycyxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGhleDogcmF3IH0pXG4gIH0pO1xuICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpLmNhdGNoKCgpID0+ICcnKTtcbiAgbGV0IGRhdGEgPSB7fTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gdGV4dCA/IEpTT04ucGFyc2UodGV4dCkgOiB7fTtcbiAgfSBjYXRjaCAoXykge31cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGNvbnN0IG1zZyA9IChkYXRhICYmIChkYXRhLm1lc3NhZ2UgfHwgZGF0YS5lcnJvcikpIHx8IGAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKFN0cmluZyhtc2cpKTtcbiAgfVxuICByZXR1cm4gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhIDoge307XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUxpZ2h0bmluZ0ludm9pY2UgKHNldHRpbmdzID0ge30sIHdhbGxldCA9IHt9LCBpbnZvaWNlID0ge30pIHtcbiAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZUxpZ2h0bmluZ0Jhc2VVcmwoc2V0dGluZ3MubGlnaHRuaW5nQmFzZVVybCB8fCAnL3NlcnZpY2VzL2xpZ2h0bmluZycpO1xuICBpZiAoIWJhc2VVcmwpIHRocm93IG5ldyBFcnJvcignTGlnaHRuaW5nIEFQSSBiYXNlIFVSTCBpcyBub3QgY29uZmlndXJlZC4nKTtcblxuICBjb25zdCBwYXlsb2FkID0ge1xuICAgIHdhbGxldElkOiB3YWxsZXQud2FsbGV0SWQsXG4gICAgYW1vdW50U2F0czogTnVtYmVyKGludm9pY2UuYW1vdW50U2F0cyB8fCAwKSxcbiAgICBtZW1vOiBpbnZvaWNlLm1lbW8gfHwgJydcbiAgfTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cnlSZXF1ZXN0cyhiYXNlVXJsLCBbXG4gICAgeyBtZXRob2Q6ICdQT1NUJywgcGF0aDogJy9pbnZvaWNlcycsIGJvZHk6IHBheWxvYWQgfVxuICBdLCBzZXR0aW5ncy5hcGlUb2tlbik7XG5cbiAgcmV0dXJuIHBpY2tPYmplY3QocmVzdWx0ID8gcmVzdWx0LmRhdGEgOiB7fSwgWydpbnZvaWNlJywgJ3Jlc3VsdCcsICdkYXRhJ10pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXlMaWdodG5pbmdJbnZvaWNlIChzZXR0aW5ncyA9IHt9LCB3YWxsZXQgPSB7fSwgaW52b2ljZSA9ICcnKSB7XG4gIGNvbnN0IGJhc2VVcmwgPSBub3JtYWxpemVMaWdodG5pbmdCYXNlVXJsKHNldHRpbmdzLmxpZ2h0bmluZ0Jhc2VVcmwgfHwgJy9zZXJ2aWNlcy9saWdodG5pbmcnKTtcbiAgaWYgKCFiYXNlVXJsKSB0aHJvdyBuZXcgRXJyb3IoJ0xpZ2h0bmluZyBBUEkgYmFzZSBVUkwgaXMgbm90IGNvbmZpZ3VyZWQuJyk7XG4gIGlmICghaW52b2ljZSkgdGhyb3cgbmV3IEVycm9yKCdJbnZvaWNlIGlzIHJlcXVpcmVkLicpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyeVJlcXVlc3RzKGJhc2VVcmwsIFtcbiAgICB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiAnL3BheW1lbnRzJywgYm9keTogeyB3YWxsZXRJZDogd2FsbGV0LndhbGxldElkLCBpbnZvaWNlIH0gfVxuICBdLCBzZXR0aW5ncy5hcGlUb2tlbik7XG5cbiAgcmV0dXJuIHBpY2tPYmplY3QocmVzdWx0ID8gcmVzdWx0LmRhdGEgOiB7fSwgWydwYXltZW50JywgJ3Jlc3VsdCcsICdkYXRhJ10pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZWNvZGVMaWdodG5pbmdJbnZvaWNlIChzZXR0aW5ncyA9IHt9LCBpbnZvaWNlID0gJycpIHtcbiAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZUxpZ2h0bmluZ0Jhc2VVcmwoc2V0dGluZ3MubGlnaHRuaW5nQmFzZVVybCB8fCAnL3NlcnZpY2VzL2xpZ2h0bmluZycpO1xuICBpZiAoIWJhc2VVcmwpIHRocm93IG5ldyBFcnJvcignTGlnaHRuaW5nIEFQSSBiYXNlIFVSTCBpcyBub3QgY29uZmlndXJlZC4nKTtcbiAgaWYgKCFpbnZvaWNlKSB0aHJvdyBuZXcgRXJyb3IoJ0ludm9pY2UgaXMgcmVxdWlyZWQuJyk7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJ5UmVxdWVzdHMoYmFzZVVybCwgW1xuICAgIHsgbWV0aG9kOiAnUE9TVCcsIHBhdGg6ICcvZGVjb2RlcycsIGJvZHk6IHsgaW52b2ljZSB9IH1cbiAgXSwgc2V0dGluZ3MuYXBpVG9rZW4pO1xuXG4gIHJldHVybiBwaWNrT2JqZWN0KHJlc3VsdCA/IHJlc3VsdC5kYXRhIDoge30sIFsnZGVjb2RlZCcsICdyZXN1bHQnLCAnZGF0YSddKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hMaWdodG5pbmdTdGF0dXMgKHNldHRpbmdzID0ge30pIHtcbiAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZUxpZ2h0bmluZ0Jhc2VVcmwoc2V0dGluZ3MubGlnaHRuaW5nQmFzZVVybCB8fCAnL3NlcnZpY2VzL2xpZ2h0bmluZycpO1xuICBpZiAoIWJhc2VVcmwpIHJldHVybiB7IGF2YWlsYWJsZTogZmFsc2UsIHN0YXR1czogJ1VOQVZBSUxBQkxFJyB9O1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cnlSZXF1ZXN0cyhiYXNlVXJsLCBbXG4gICAgeyBwYXRoOiAnJyB9XG4gIF0sIHNldHRpbmdzLmFwaVRva2VuKTtcbiAgLy8gUmV0dXJuIGZ1bGwgcmVzcG9uc2Ugc28gbm9kZSAoZGVwb3NpdEFkZHJlc3MsIGJhbGFuY2VTYXRzLCBiYWxhbmNlVW5jb25maXJtZWRTYXRzKSBpcyBwcmVzZXJ2ZWRcbiAgY29uc3QgcmF3ID0gcmVzdWx0ICYmIHJlc3VsdC5kYXRhICYmIHR5cGVvZiByZXN1bHQuZGF0YSA9PT0gJ29iamVjdCcgPyByZXN1bHQuZGF0YSA6IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMocmF3KS5sZW5ndGggPyByYXcgOiB7IGF2YWlsYWJsZTogZmFsc2UsIHN0YXR1czogJ1VOQVZBSUxBQkxFJyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaExpZ2h0bmluZ0NoYW5uZWxzIChzZXR0aW5ncyA9IHt9KSB7XG4gIGNvbnN0IGJhc2VVcmwgPSBub3JtYWxpemVMaWdodG5pbmdCYXNlVXJsKHNldHRpbmdzLmxpZ2h0bmluZ0Jhc2VVcmwgfHwgJy9zZXJ2aWNlcy9saWdodG5pbmcnKTtcbiAgaWYgKCFiYXNlVXJsKSByZXR1cm4geyBjaGFubmVsczogW10sIG91dHB1dHM6IFtdIH07XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyeVJlcXVlc3RzKGJhc2VVcmwsIFtcbiAgICB7IHBhdGg6ICcvY2hhbm5lbHMnIH1cbiAgXSwgc2V0dGluZ3MuYXBpVG9rZW4pO1xuICBjb25zdCBkYXRhID0gcmVzdWx0ID8gcmVzdWx0LmRhdGEgOiB7fTtcbiAgcmV0dXJuIHtcbiAgICBjaGFubmVsczogQXJyYXkuaXNBcnJheShkYXRhLmNoYW5uZWxzKSA/IGRhdGEuY2hhbm5lbHMgOiBbXSxcbiAgICBvdXRwdXRzOiBBcnJheS5pc0FycmF5KGRhdGEub3V0cHV0cykgPyBkYXRhLm91dHB1dHMgOiBbXVxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVMaWdodG5pbmdDaGFubmVsIChzZXR0aW5ncyA9IHt9LCBjaGFubmVsID0ge30pIHtcbiAgY29uc3QgYmFzZVVybCA9IG5vcm1hbGl6ZUxpZ2h0bmluZ0Jhc2VVcmwoc2V0dGluZ3MubGlnaHRuaW5nQmFzZVVybCB8fCAnL3NlcnZpY2VzL2xpZ2h0bmluZycpO1xuICBpZiAoIWJhc2VVcmwpIHRocm93IG5ldyBFcnJvcignTGlnaHRuaW5nIEFQSSBiYXNlIFVSTCBpcyBub3QgY29uZmlndXJlZC4nKTtcbiAgY29uc3QgcmVtb3RlID0gU3RyaW5nKGNoYW5uZWwucmVtb3RlIHx8IGNoYW5uZWwuY29ubmVjdFN0cmluZyB8fCAnJykudHJpbSgpO1xuICBjb25zdCBwZWVySWQgPSBTdHJpbmcoY2hhbm5lbC5wZWVySWQgfHwgY2hhbm5lbC5wZWVyX2lkIHx8ICcnKS50cmltKCk7XG4gIGlmICghcmVtb3RlICYmICFwZWVySWQpIHRocm93IG5ldyBFcnJvcigncmVtb3RlIChpZEBpcDpwb3J0KSBvciBwZWVySWQgaXMgcmVxdWlyZWQnKTtcbiAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICBwZWVySWQ6IHBlZXJJZCB8fCB1bmRlZmluZWQsXG4gICAgcmVtb3RlOiByZW1vdGUgfHwgdW5kZWZpbmVkLFxuICAgIGFtb3VudFNhdHM6IE51bWJlcihjaGFubmVsLmFtb3VudFNhdHMgfHwgY2hhbm5lbC5hbW91bnRfc2F0cyB8fCAwKSxcbiAgICBwdXNoTXNhdDogY2hhbm5lbC5wdXNoTXNhdCAhPSBudWxsID8gTnVtYmVyKGNoYW5uZWwucHVzaE1zYXQpIDogKGNoYW5uZWwucHVzaF9tc2F0ICE9IG51bGwgPyBOdW1iZXIoY2hhbm5lbC5wdXNoX21zYXQpIDogdW5kZWZpbmVkKVxuICB9O1xuICBjb25zdCB1cmwgPSBhc3NlcnRIdWJSZWxhdGl2ZU9yU2FtZU9yaWdpblJlcXVlc3RVcmwoYCR7YmFzZVVybH0vY2hhbm5lbHNgKTtcbiAgY29uc3QgaGVhZGVycyA9IG1ha2VIZWFkZXJzKHNldHRpbmdzLmFwaVRva2VuIHx8ICcnLCAnUE9TVCcpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgeyBtZXRob2Q6ICdQT1NUJywgaGVhZGVycywgYm9keTogSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkgfSk7XG4gIGxldCBkYXRhID0ge307XG4gIHRyeSB7XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBkYXRhID0gdGV4dCA/IEpTT04ucGFyc2UodGV4dCkgOiB7fTtcbiAgfSBjYXRjaCAoXykge31cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHJldHVybiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgKGRhdGEuZXJyb3IgfHwgZGF0YS5kZXRhaWwpKSA/IGRhdGEgOiB7IGVycm9yOiAnQ2hhbm5lbCBjcmVhdGlvbiBmYWlsZWQnLCBkZXRhaWw6IHJlc3BvbnNlLnN0YXR1c1RleHQgfTtcbiAgfVxuICByZXR1cm4gcGlja09iamVjdChkYXRhLCBbJ2NoYW5uZWwnLCAncmVzdWx0JywgJ2RhdGEnXSkgfHwgZGF0YTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxvYWRVcHN0cmVhbVNldHRpbmdzLFxuICBzYXZlVXBzdHJlYW1TZXR0aW5ncyxcbiAgZGVmYXVsdFBheWpvaW5QcmVmZXJlbmNlcyxcbiAgbG9hZFBheWpvaW5QcmVmZXJlbmNlcyxcbiAgc2F2ZVBheWpvaW5QcmVmZXJlbmNlcyxcbiAgZGVyaXZlV2FsbGV0SWRGcm9tWHB1YixcbiAgbG9hZFNlc3Npb25CaXA0NEFjY291bnQsXG4gIHNhdmVTZXNzaW9uQmlwNDRBY2NvdW50LFxuICBsb2FkUGVyc2lzdGVkRGVmYXVsdEJpcDQ0UmF3LFxuICBzYXZlUGVyc2lzdGVkRGVmYXVsdEJpcDQ0QWNjb3VudCxcbiAgaGFzQmlwNDRTZXNzaW9uT3ZlcnJpZGUsXG4gIEJJVENPSU5fUEFZTUVOVFNfQklQNDRfQUNDT1VOVF9JTkRFWCxcbiAgQklUQ09JTl9XQUxMRVRfQlJBTkNIX0NIQU5HRUQsXG4gIGRlcml2ZUZhYnJpY0JpdGNvaW5BY2NvdW50S2V5cyxcbiAgcmVzb2x2ZUJpdGNvaW5DbGllbnRBdXRoVG9rZW4sXG4gIGxvYWRTcGVuZFhwdWJXYXRjaEZvcklkZW50aXR5LFxuICBzYXZlU3BlbmRYcHViV2F0Y2hGb3JJZGVudGl0eSxcbiAgY2xlYXJTcGVuZFhwdWJXYXRjaCxcbiAgZ2V0V2FsbGV0Q29udGV4dEZyb21JZGVudGl0eSxcbiAgZ2V0Qml0Y29pbkJpcDQ0QWNjb3VudEZvcklkZW50aXR5LFxuICBnZXRTcGVuZFdhbGxldENvbnRleHQsXG4gIGdldE5leHRSZWNlaXZlV2FsbGV0Q29udGV4dCxcbiAgZGVyaXZlQW5kU3RvcmVSZWNlaXZlQWRkcmVzcyxcbiAgcmVzZXJ2ZU5leHRSZWNlaXZlQWRkcmVzcyxcbiAgZ2V0Q2FjaGVkQmFsYW5jZSxcbiAgc2V0Q2FjaGVkQmFsYW5jZSxcbiAgY2xlYXJCYWxhbmNlQ2FjaGUsXG4gIGZldGNoRXhwbG9yZXJEYXRhLFxuICBmZXRjaEJpdGNvaW5TdGF0dXMsXG4gIGZldGNoQmxvY2tCeUhhc2gsXG4gIGZldGNoVHJhbnNhY3Rpb25CeUhhc2gsXG4gIGZldGNoVHJhbnNhY3Rpb25IZXgsXG4gIGZldGNoV2FsbGV0U3VtbWFyeSxcbiAgZmV0Y2hXYWxsZXRTdW1tYXJ5V2l0aENhY2hlLFxuICBmZXRjaEFkZHJlc3NCYWxhbmNlLFxuICBmZXRjaFJlY2VpdmVBZGRyZXNzLFxuICBmZXRjaFVUWE9zLFxuICBmZXRjaFdhbGxldFRyYW5zYWN0aW9ucyxcbiAgZmV0Y2hQYXltZW50cyxcbiAgZmV0Y2hDcm93ZGZ1bmRpbmdDYW1wYWlnbnMsXG4gIGZldGNoQ3Jvd2RmdW5kaW5nQ2FtcGFpZ24sXG4gIGNyZWF0ZUNyb3dkZnVuZGluZ0NhbXBhaWduLFxuICBmZXRjaENyb3dkZnVuZGluZ0FjcERvbmF0aW9uUHNidCxcbiAgZmV0Y2hDcm93ZGZ1bmRpbmdQYXlvdXRQc2J0LFxuICBwb3N0Q3Jvd2RmdW5kaW5nUGF5b3V0U2lnbkFyYml0ZXIsXG4gIHBvc3RDcm93ZGZ1bmRpbmdQYXlvdXRCcm9hZGNhc3QsXG4gIHBvc3RDcm93ZGZ1bmRpbmdSZWZ1bmRQcmVwYXJlLFxuICBnZXRDcm93ZGZ1bmRpbmdCZW5lZmljaWFyeVB1YmtleUhleCxcbiAgZ2V0Q3Jvd2RmdW5kaW5nQmVuZWZpY2lhcnlQcml2YXRlS2V5MzIsXG4gIGdldENyb3dkZnVuZGluZ0JlbmVmaWNpYXJ5UGF5b3V0QWRkcmVzcyxcbiAgc2lnbkNyb3dkZnVuZGluZ1BheW91dFBzYnRCZW5lZmljaWFyeSxcbiAgYnVpbGRDcm93ZGZ1bmRGdW5kZXJCaXRjb2luVXJpLFxuICBidWlsZENyb3dkZnVuZFBheW1lbnRzRGVlcExpbmssXG4gIGNyb3dkZnVuZENhbXBhaWduQXBpVXJsLFxuICBmZXRjaFBheWpvaW5DYXBhYmlsaXRpZXMsXG4gIGNyZWF0ZVBheWpvaW5EZXBvc2l0LFxuICBmZXRjaFBheWpvaW5TZXNzaW9ucyxcbiAgZmV0Y2hQYXlqb2luU2Vzc2lvbixcbiAgc3VibWl0UGF5am9pblByb3Bvc2FsLFxuICBhcHBseVBheWpvaW5BY3BIdWJCb29zdCxcbiAgZ2VuZXJhdGVCbG9jayxcbiAgZmV0Y2hCaXRjb2luUGVlcnMsXG4gIGZldGNoQml0Y29pbk5ldHdvcmtTdW1tYXJ5LFxuICBicm9hZGNhc3RSYXdUcmFuc2FjdGlvbixcbiAgcmVxdWVzdEZhdWNldCxcbiAgc2VuZFBheW1lbnQsXG4gIHNlbmRCcmlkZ2VQYXltZW50LFxuICB2ZXJpZnlMMVBheW1lbnQsXG4gIGNyZWF0ZUxpZ2h0bmluZ0ludm9pY2UsXG4gIGNyZWF0ZUxpZ2h0bmluZ0NoYW5uZWwsXG4gIGZldGNoTGlnaHRuaW5nU3RhdHVzLFxuICBmZXRjaExpZ2h0bmluZ0NoYW5uZWxzLFxuICBwYXlMaWdodG5pbmdJbnZvaWNlLFxuICBkZWNvZGVMaWdodG5pbmdJbnZvaWNlXG59O1xuIl0sIm5hbWVzIjpbIl9zbGljZWRUb0FycmF5IiwiciIsImUiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwibCIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIm4iLCJpIiwidSIsImEiLCJmIiwibyIsImNhbGwiLCJuZXh0IiwiT2JqZWN0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImxlbmd0aCIsIkFycmF5IiwiaXNBcnJheSIsIl9yZWdlbmVyYXRvciIsInRvU3RyaW5nVGFnIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJwIiwieSIsIkciLCJ2IiwiZCIsImJpbmQiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9uIiwiRiIsInMiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9vYmplY3RTcHJlYWQiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsImNyeXB0byIsInJlcXVpcmUiLCJCSVAzMiIsImVjYyIsInBheW1lbnRzIiwiX3JlcXVpcmUiLCJyZWFkU3RvcmFnZUpTT04iLCJ3cml0ZVN0b3JhZ2VKU09OIiwicmVhZFN0b3JhZ2VTdHJpbmciLCJ3cml0ZVN0b3JhZ2VTdHJpbmciLCJyZW1vdmVTdG9yYWdlS2V5IiwiU0VUVElOR1NfS0VZIiwiUEFZSk9JTl9QUkVGU19LRVkiLCJMT0NBTF9XQUxMRVRfS0VZIiwiQkFMQU5DRV9DQUNIRV9LRVkiLCJCQUxBTkNFX0NBQ0hFX01BWF9BR0VfTVMiLCJTRVNTSU9OX0JJUDQ0X0FDQ09VTlRfS0VZIiwiU0VTU0lPTl9CSVA0NF9SRUNFSVZFX0tFWSIsIlNFU1NJT05fQklQNDRfU0VORF9LRVkiLCJMT0NBTF9CSVA0NF9SRUNFSVZFX0RFRkFVTFRfS0VZIiwiTE9DQUxfQklQNDRfU0VORF9ERUZBVUxUX0tFWSIsIkJJVENPSU5fUEFZTUVOVFNfQklQNDRfQUNDT1VOVF9JTkRFWCIsImdldEJpdGNvaW5CaXA0NEFjY291bnRGb3JJZGVudGl0eSIsImlkZW50aXR5IiwidW5kZWZpbmVkIiwiZmFicmljSWRlbnRpdHlNb2RlIiwicmF3IiwiZmFicmljQWNjb3VudEluZGV4IiwiYWkiLCJNYXRoIiwiZmxvb3IiLCJpc0Zpbml0ZSIsIkJJVENPSU5fV0FMTEVUX0JSQU5DSF9DSEFOR0VEIiwiU1BFTkRfWFBVQl9XQVRDSF9LRVkiLCJfcmVxdWlyZTIiLCJzYWZlSWRlbnRpdHlFcnIiLCJmYWJyaWNCaXRjb2luV2F0Y2hNYXN0ZXJYcHViIiwibWFzdGVyWHB1YiIsInRyaW0iLCJ4cHViIiwibG9hZFNwZW5kWHB1YldhdGNoRm9ySWRlbnRpdHkiLCJmYWJyaWNJZCIsImlkIiwid2luZG93Iiwic3BlbmRBY2NvdW50WHB1YiIsInNwZW5kWCIsImZhYnJpY0lkZW50aXR5SWQiLCJfIiwic2F2ZVNwZW5kWHB1YldhdGNoRm9ySWRlbnRpdHkiLCJ3YWxsZXQiLCJmYWJyaWNJZGVudGl0eUhhc1VubG9ja2VkU2lnbmluZ0ZvckJpdGNvaW4iLCJ3YWxsZXRJZCIsImNsZWFyU3BlbmRYcHViV2F0Y2giLCJlbWl0Qml0Y29pbldhbGxldEJyYW5jaENoYW5nZWRGcm9tU2Vzc2lvbiIsImRldGFpbFJvbGUiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJyb2xlIiwicmVjZWl2ZSIsImxvYWRTZXNzaW9uQmlwNDRBY2NvdW50Iiwic2VuZCIsIm1pZ3JhdGVMZWdhY3lCaXA0NElmTmVlZGVkIiwic2Vzc2lvblN0b3JhZ2UiLCJsZWdhY3kiLCJnZXRJdGVtIiwic2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJub3JtYWxpemVCYXNlVXJsIiwicmVwbGFjZSIsImFzc2VydEh1YlJlbGF0aXZlT3JTYW1lT3JpZ2luUmVxdWVzdFVybCIsInVybCIsIkVycm9yIiwic3RhcnRzV2l0aCIsImxvY2F0aW9uIiwiVVJMIiwiaHJlZiIsIm9yaWdpbiIsImxvYWRVcHN0cmVhbVNldHRpbmdzIiwiZGVmYXVsdHMiLCJleHBsb3JlckJhc2VVcmwiLCJwYXltZW50c0Jhc2VVcmwiLCJsaWdodG5pbmdCYXNlVXJsIiwicGF5am9pbkJhc2VVcmwiLCJhcGlUb2tlbiIsInBhcnNlZCIsIm5vcm1hbGl6ZVBheW1lbnRzQmFzZVVybCIsIm5vcm1hbGl6ZUxpZ2h0bmluZ0Jhc2VVcmwiLCJub3JtYWxpemVQYXlqb2luQmFzZVVybCIsImRlZmF1bHRQYXlqb2luUHJlZmVyZW5jZXMiLCJvcGVyYXRvckRlcG9zaXQiLCJwYXltZW50c1JlY2VpdmUiLCJwYXltZW50c1NlbmQiLCJyZWNlaXZlVGFwcm9vdEpvaW5tYXJrZXQiLCJsb2FkUGF5am9pblByZWZlcmVuY2VzIiwic2F2ZVBheWpvaW5QcmVmZXJlbmNlcyIsInBhdGNoIiwiYXNzaWduIiwic2F2ZVVwc3RyZWFtU2V0dGluZ3MiLCJzZXR0aW5ncyIsImRlcml2ZVdhbGxldElkRnJvbVhwdWIiLCJwcmVpbWFnZSIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJpZGVudGl0eVJvb3RXYWxsZXRJZCIsInJlY2VpdmVBY2NvdW50VGFnRnJvbUNvbnRleHQiLCJiaXRjb2luQmlwNDRBY2NvdW50IiwiaWR4IiwicmVjZWl2ZUFkZHJlc3NQb29sU3RvcmFnZUtleSIsImxlZ2FjeUtleSIsInJvb3QiLCJwb29sS2V5IiwidGFnIiwiY29uY2F0IiwiX2JpcDQ0SW5kZXhGcm9tU3RvcmVkU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJwYXJzZUludCIsImxvYWRQZXJzaXN0ZWREZWZhdWx0QmlwNDRSYXciLCJrZXkiLCJfZWZmZWN0aXZlRGVmYXVsdEJpcDQ0SW5kZXgiLCJzYXZlUGVyc2lzdGVkRGVmYXVsdEJpcDQ0QWNjb3VudCIsImhhc0JpcDQ0U2Vzc2lvbk92ZXJyaWRlIiwiayIsIm9wdHMiLCJzYXZlU2Vzc2lvbkJpcDQ0QWNjb3VudCIsImRlcml2ZUZhYnJpY0JpdGNvaW5BY2NvdW50S2V5cyIsIm1hc3RlclhwcnYiLCJhY2NvdW50SW5kZXgiLCJkZWNvZGVOZXR3b3JrIiwiZ2V0TmV0d29ya0Zyb21YcHViIiwiYmlwMzIiLCJtYXN0ZXIiLCJmcm9tQmFzZTU4IiwicGF0aCIsImFjY3QiLCJkZXJpdmVQYXRoIiwieHBydiIsInRvQmFzZTU4IiwibmV1dGVyZWQiLCJiaXRjb2luRGVyaXZhdGlvblNlY3JldHNGcm9tRmFicmljSWRlbnRpdHkiLCJ4cHJ2Rm9yQml0Y29pbiIsInhwdWJIaW50IiwiZ2V0V2FsbGV0Q29udGV4dEZyb21JZGVudGl0eSIsIm1hc3Rlck1hdCIsImFkZHJlc3MiLCJmaXhlZCIsImZpeGVkQml0Y29pbkJpcDQ0QWNjb3VudCIsImFjY291bnROIiwiY29uc29sZSIsIndhcm4iLCJ3YXRjaGVkU3BlbmQiLCJwYXNzd29yZFByb3RlY3RlZCIsImJhc2lzIiwiZmluZ2VycHJpbnQiLCJkZXNjcmlwdG9ycyIsImRlc2MiLCJjaGFpbiIsImhhc1ByaXZhdGVLZXkiLCJvdXQiLCJnZXRTcGVuZFdhbGxldENvbnRleHQiLCJnZXROZXh0UmVjZWl2ZVdhbGxldENvbnRleHQiLCJpc1Rlc3QiLCJiZWNoMzIiLCJwdWJLZXlIYXNoIiwic2NyaXB0SGFzaCIsIndpZiIsImdldE5ldHdvcmtGb3JCaXRjb2luSnMiLCJuZXR3b3JrTmFtZSIsImxvYWRCYWxhbmNlQ2FjaGUiLCJzYXZlQmFsYW5jZUNhY2hlIiwic3RvcmUiLCJnZXRDYWNoZWRCYWxhbmNlIiwibWF4QWdlTXMiLCJlbnRyeSIsImZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJiYWxhbmNlU2F0cyIsImNvbmZpcm1lZFNhdHMiLCJ1bmNvbmZpcm1lZFNhdHMiLCJzZXRDYWNoZWRCYWxhbmNlIiwiX3JlZiIsIl9kYXRhJGJhbGFuY2VTYXRzIiwiX3JlZjIiLCJfcmVmMyIsIl9kYXRhJGNvbmZpcm1lZFNhdHMiLCJfZGF0YSR1bmNvbmZpcm1lZFNhdHMiLCJkYXRhIiwiYmFsYW5jZSIsImNsZWFyQmFsYW5jZUNhY2hlIiwibG9hZExvY2FsV2FsbGV0U3RvcmUiLCJzYXZlTG9jYWxXYWxsZXRTdG9yZSIsImRlcml2ZVJlY2VpdmVBZGRyZXNzRnJvbVhwdWIiLCJpbmRleCIsImFjY291bnQiLCJjaGlsZCIsImRlcml2ZSIsInB1YmtleSIsInB1YmxpY0tleSIsImFkZHJlc3NOZXR3b3JrIiwicGF5bWVudCIsInAyd3BraCIsIm5ldHdvcmsiLCJkZXJpdmF0aW9uUGF0aCIsInR5cGUiLCJkZXJpdmVBZGRyZXNzRnJvbVhwdWIiLCJkZXJpdmVXYXRjaEFkZHJlc3NlcyIsIm1heFJlY2VpdmUiLCJtYXhDaGFuZ2UiLCJhZGRycyIsImRlcml2ZUFuZFN0b3JlUmVjZWl2ZUFkZHJlc3MiLCJvcHRpb25zIiwic3RvcmFnZUtleSIsIl9yZWNlaXZlQWRkcmVzc1Bvb2xTdCIsImN1cnJlbnQiLCJtaWdyYXRlZEZyb21MZWdhY3kiLCJyZWNlaXZlQWRkcmVzc2VzIiwibGVnIiwiYWRkcmVzc2VzIiwidXBkYXRlZEF0IiwidG9JU09TdHJpbmciLCJfbGF0ZXN0JGluZGV4IiwibGF0ZXN0IiwiZGVyaXZlZCIsImN1cnJlbnRBZGRyZXNzIiwiY3VycmVudEluZGV4IiwibmV4dFdhbGxldCIsInJlc2VydmVOZXh0UmVjZWl2ZUFkZHJlc3MiLCJfcmVjZWl2ZUFkZHJlc3NQb29sU3QyIiwicHJldkFkZHJzIiwibmV4dEluZGV4IiwibWFrZUhlYWRlcnMiLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwiQXV0aG9yaXphdGlvbiIsInJlcXVlc3RKU09OIiwiX3giLCJfcmVxdWVzdEpTT04iLCJfY2FsbGVlIiwiYm9keSIsInJlc3BvbnNlIiwidGV4dCIsIm1zZyIsImVyckpzb24iLCJfYXJncyIsIl9jb250ZXh0IiwiSlNPTiIsInN0cmluZ2lmeSIsImZldGNoIiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwicGFyc2UiLCJtZXNzYWdlIiwiZXJyb3IiLCJqc29uIiwicGlja0FycmF5IiwicGF5bG9hZCIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZXJyIiwicGlja09iamVjdCIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJ0cnlSZXF1ZXN0cyIsIl94MiIsIl90cnlSZXF1ZXN0cyIsIl9jYWxsZWUyIiwiYmFzZVVybCIsInJlcXVlc3RzIiwibGFzdEVycm9yIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIl9yZXEkcGF0aCIsInJlcSIsIl9hcmdzMiIsIl90IiwiX3QyIiwiX2NvbnRleHQyIiwicmVzb2x2ZUJhc2VVcmwiLCJmYWxsYmFjayIsIm5vcm1hbGl6ZWQiLCJub3JtYWxpemVXYWxsZXRzQmFzZVVybCIsIm5vcm1hbGl6ZVhwdWJXYXRjaEJhc2VVcmwiLCJub3JtYWxpemVBZGRyZXNzZXNCYXNlVXJsIiwiaXNCaXRjb2luU2VydmljZUVuZHBvaW50IiwicmVzb2x2ZUJpdGNvaW5DbGllbnRBdXRoVG9rZW4iLCJodWJBZG1pblRva2VuIiwiY2FsbEJpdGNvaW5TZXJ2aWNlTWV0aG9kIiwiX3gzIiwiX3g0IiwiX2NhbGxCaXRjb2luU2VydmljZU1ldGhvZCIsIl9jYWxsZWUzIiwicGFyYW1zIiwiX2FyZ3MzIiwiX2NvbnRleHQzIiwiZmV0Y2hFeHBsb3JlckRhdGFBdEJhc2UiLCJfZmV0Y2hFeHBsb3JlckRhdGFBdEJhc2UiLCJfY2FsbGVlNCIsIm5ldFJhdyIsIm5ldCIsImxpc3RUeFBhcmFtcyIsImFkbWluVG9rIiwicnBjVG9rIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsImJsb2Nrc0RhdGEiLCJ0eERhdGEiLCJibG9ja3NSZXNwIiwidHhSZXNwIiwiX2FyZ3M0IiwiX2NvbnRleHQ0IiwiYmxvY2tzIiwidHJhbnNhY3Rpb25zIiwibGltaXQiLCJhZG1pblRva2VuIiwiam9pbiIsImFsbCIsImZldGNoRXhwbG9yZXJEYXRhIiwiX2ZldGNoRXhwbG9yZXJEYXRhIiwiX2NhbGxlZTUiLCJfYXJnczUiLCJfY29udGV4dDUiLCJmZXRjaEJpdGNvaW5TdGF0dXNBdEJhc2UiLCJfZmV0Y2hCaXRjb2luU3RhdHVzQXRCYXNlIiwiX2NhbGxlZTYiLCJhdXRoVG9rIiwicmVzdWx0IiwiX2FyZ3M2IiwiX2NvbnRleHQ2IiwiYXZhaWxhYmxlIiwiZmV0Y2hCaXRjb2luU3RhdHVzIiwiX2ZldGNoQml0Y29pblN0YXR1cyIsIl9jYWxsZWU3IiwiX2FyZ3M3IiwiX2NvbnRleHQ3IiwiZmV0Y2hCbG9ja0J5SGFzaCIsIl9mZXRjaEJsb2NrQnlIYXNoIiwiX2NhbGxlZTgiLCJibG9ja2hhc2giLCJiVXJsIiwiaGFzaCIsIm9iaiIsIl9hcmdzOCIsIl9jb250ZXh0OCIsImVuY29kZVVSSUNvbXBvbmVudCIsImZldGNoVHJhbnNhY3Rpb25CeUhhc2giLCJfZmV0Y2hUcmFuc2FjdGlvbkJ5SGFzaCIsIl9jYWxsZWU5IiwidHhoYXNoIiwiX2FyZ3M5IiwiX2NvbnRleHQ5IiwiZmV0Y2hUcmFuc2FjdGlvbkhleCIsIl9mZXRjaFRyYW5zYWN0aW9uSGV4IiwiX2NhbGxlZTAiLCJfYXJnczAiLCJfdDMiLCJfY29udGV4dDAiLCJoZXgiLCJmZXRjaFdhbGxldFN1bW1hcnkiLCJfZmV0Y2hXYWxsZXRTdW1tYXJ5IiwiX2NhbGxlZTEiLCJfYmFzZVVybCIsIl9wYXJhbXMiLCJfbmV0d29yayIsInEiLCJfc3VtbWFyeSIsIl9yYXciLCJfcmF3JGJhbGFuY2VTYXRzIiwiX3JlZjQiLCJfcmF3JGNvbmZpcm1lZFNhdHMiLCJfcmF3JHVuY29uZmlybWVkU2F0cyIsImZyb21TdW1tYXJ5IiwiZW5jb2RlZElkIiwiX2FkZHJzIiwic3VtbWFyeSIsIl9yYXckYmFsYW5jZVNhdHMyIiwiX3JlZjUiLCJfcmF3JGNvbmZpcm1lZFNhdHMyIiwiX3JhdyR1bmNvbmZpcm1lZFNhdHMyIiwiX2JhbGFuY2VTYXRzIiwiX2NvbmZpcm1lZFNhdHMiLCJfdW5jb25maXJtZWRTYXRzIiwiX2Zyb21TdW1tYXJ5IiwiX3Jlc3VsdCIsIl9hcmdzMSIsIl9jb250ZXh0MSIsIlVSTFNlYXJjaFBhcmFtcyIsInNldCIsImJhbGFuY2Vfc2F0cyIsImNvbmZpcm1lZF9zYXRzIiwidW5jb25maXJtZWRfc2F0cyIsInJvdW5kIiwidHJ1c3RlZCIsInVudHJ1c3RlZFBlbmRpbmciLCJmZXRjaFdhbGxldFN1bW1hcnlXaXRoQ2FjaGUiLCJfZmV0Y2hXYWxsZXRTdW1tYXJ5V2l0aENhY2hlIiwiX2NhbGxlZTEwIiwiY2FjaGVLZXkiLCJieXBhc3NDYWNoZSIsIm1heENhY2hlQWdlTXMiLCJjYWNoZWQiLCJfYXJnczEwIiwiX3Q0IiwiX2NvbnRleHQxMCIsIl9mcm9tQ2FjaGUiLCJfY2FjaGVkQXQiLCJmZXRjaEFkZHJlc3NCYWxhbmNlIiwiX2ZldGNoQWRkcmVzc0JhbGFuY2UiLCJfY2FsbGVlMTEiLCJfYXJnczExIiwiX2NvbnRleHQxMSIsImZldGNoUmVjZWl2ZUFkZHJlc3MiLCJfZmV0Y2hSZWNlaXZlQWRkcmVzcyIsIl9jYWxsZWUxMiIsImxvY2FsIiwiX2FyZ3MxMiIsIl9jb250ZXh0MTIiLCJmZXRjaFVUWE9zIiwiX2ZldGNoVVRYT3MiLCJfY2FsbGVlMTMiLCJ3YWxsZXRJZEVuYyIsIl9iYXNlVXJsMiIsIl9wYXJhbXMyIiwiX25ldHdvcmsyIiwiX3FzIiwiX3BhdGgiLCJfcmVzdWx0MiIsIl9hZGRyczIiLCJxcyIsIl9hcmdzMTMiLCJfY29udGV4dDEzIiwiZmV0Y2hXYWxsZXRUcmFuc2FjdGlvbnMiLCJfZmV0Y2hXYWxsZXRUcmFuc2FjdGlvbnMiLCJfY2FsbGVlMTQiLCJfYmFzZVVybDMiLCJfYXV0aFRvayIsIl9wYXJhbXMzIiwiX25ldHdvcmszIiwiX3BhdGgyIiwiX3Jlc3VsdDMiLCJfYWRkcnMzIiwiX2FyZ3MxNCIsIl9jb250ZXh0MTQiLCJtYXgiLCJtaW4iLCJyZXF1ZXN0RmF1Y2V0IiwiX3JlcXVlc3RGYXVjZXQiLCJfY2FsbGVlMTUiLCJfYXJnczE1IiwiX2NvbnRleHQxNSIsImFtb3VudFNhdHMiLCJzZW5kUGF5bWVudCIsIl9zZW5kUGF5bWVudCIsIl9jYWxsZWUxNiIsIl9hcmdzMTYiLCJfY29udGV4dDE2IiwidG9rZW4iLCJ0byIsIm1lbW8iLCJzZW5kQnJpZGdlUGF5bWVudCIsIl9zZW5kQnJpZGdlUGF5bWVudCIsIl9jYWxsZWUxNyIsIl9hcmdzMTciLCJfY29udGV4dDE3IiwidmVyaWZ5TDFQYXltZW50IiwiX3ZlcmlmeUwxUGF5bWVudCIsIl9jYWxsZWUxOCIsInByb29mIiwidHhpZCIsIl9hcmdzMTgiLCJfY29udGV4dDE4IiwiaGFzT3duUHJvcGVydHkiLCJ2ZXJpZmllZCIsImZldGNoUGF5bWVudHMiLCJfZmV0Y2hQYXltZW50cyIsIl9jYWxsZWUxOSIsIl9hcmdzMTkiLCJfY29udGV4dDE5IiwiZmV0Y2hDcm93ZGZ1bmRpbmdDYW1wYWlnbnMiLCJfZmV0Y2hDcm93ZGZ1bmRpbmdDYW1wYWlnbnMiLCJfY2FsbGVlMjAiLCJfYXJnczIwIiwiX2NvbnRleHQyMCIsImNyZWF0ZUNyb3dkZnVuZGluZ0NhbXBhaWduIiwiX2NyZWF0ZUNyb3dkZnVuZGluZ0NhbXBhaWduIiwiX2NhbGxlZTIxIiwiX2FyZ3MyMSIsIl9jb250ZXh0MjEiLCJmZXRjaENyb3dkZnVuZGluZ0FjcERvbmF0aW9uUHNidCIsIl9mZXRjaENyb3dkZnVuZGluZ0FjcERvbmF0aW9uUHNidCIsIl9jYWxsZWUyMiIsImNhbXBhaWduSWQiLCJhbXQiLCJfYXJnczIyIiwiX2NvbnRleHQyMiIsImZldGNoQ3Jvd2RmdW5kaW5nQ2FtcGFpZ24iLCJfZmV0Y2hDcm93ZGZ1bmRpbmdDYW1wYWlnbiIsIl9jYWxsZWUyMyIsIl9hcmdzMjMiLCJfY29udGV4dDIzIiwiZmV0Y2hDcm93ZGZ1bmRpbmdQYXlvdXRQc2J0IiwiX2ZldGNoQ3Jvd2RmdW5kaW5nUGF5b3V0UHNidCIsIl9jYWxsZWUyNCIsImRlc3QiLCJmZWVTYXRzIiwiX2FyZ3MyNCIsIl9jb250ZXh0MjQiLCJkZXN0aW5hdGlvbiIsInBvc3RDcm93ZGZ1bmRpbmdQYXlvdXRTaWduQXJiaXRlciIsIl9wb3N0Q3Jvd2RmdW5kaW5nUGF5b3V0U2lnbkFyYml0ZXIiLCJfY2FsbGVlMjUiLCJwc2J0QmFzZTY0IiwiX2FyZ3MyNSIsIl9jb250ZXh0MjUiLCJwb3N0Q3Jvd2RmdW5kaW5nUGF5b3V0QnJvYWRjYXN0IiwiX3Bvc3RDcm93ZGZ1bmRpbmdQYXlvdXRCcm9hZGNhc3QiLCJfY2FsbGVlMjYiLCJfYXJnczI2IiwiX2NvbnRleHQyNiIsInBvc3RDcm93ZGZ1bmRpbmdSZWZ1bmRQcmVwYXJlIiwiX3Bvc3RDcm93ZGZ1bmRpbmdSZWZ1bmRQcmVwYXJlIiwiX2NhbGxlZTI3IiwiYiIsIl9hcmdzMjciLCJfY29udGV4dDI3IiwiZGVzdGluYXRpb25BZGRyZXNzIiwidG9BZGRyZXNzIiwiZnVuZGVkVHhpZCIsInZvdXQiLCJnZXRDcm93ZGZ1bmRpbmdCZW5lZmljaWFyeVB1YmtleUhleCIsIm1hdCIsImFjY291bnRYcHJ2IiwiYWNjb3VudFhwdWIiLCJiaXAzMkluc3QiLCJCdWZmZXIiLCJnZXRDcm93ZGZ1bmRpbmdCZW5lZmljaWFyeVByaXZhdGVLZXkzMiIsInByaXZhdGVLZXkiLCJnZXRDcm93ZGZ1bmRpbmdCZW5lZmljaWFyeVBheW91dEFkZHJlc3MiLCJzaWduQ3Jvd2RmdW5kaW5nUGF5b3V0UHNidEJlbmVmaWNpYXJ5IiwiYjY0IiwicHJpdiIsImJpdGNvaW4iLCJjcm93ZGZ1bmRpbmdUYXByb290IiwibmV0d29ya0ZvckZhYnJpY05hbWUiLCJwc2J0IiwiUHNidCIsImZyb21CYXNlNjQiLCJpbnB1dENvdW50Iiwic2lnbkFsbElucHV0c1dpdGhLZXkiLCJ0b0Jhc2U2NCIsImJ1aWxkQ3Jvd2RmdW5kRnVuZGVyQml0Y29pblVyaSIsImFtb3VudEJ0YyIsImFkZHIiLCJ0b0ZpeGVkIiwiYnVpbGRDcm93ZGZ1bmRQYXltZW50c0RlZXBMaW5rIiwicGF5VG8iLCJwYXlBbW91bnRTYXRzIiwiY3Jvd2RmdW5kQ2FtcGFpZ25BcGlVcmwiLCJmZXRjaFBheWpvaW5DYXBhYmlsaXRpZXMiLCJfZmV0Y2hQYXlqb2luQ2FwYWJpbGl0aWVzIiwiX2NhbGxlZTI4IiwiX2FyZ3MyOCIsIl9jb250ZXh0MjgiLCJjcmVhdGVQYXlqb2luRGVwb3NpdCIsIl9jcmVhdGVQYXlqb2luRGVwb3NpdCIsIl9jYWxsZWUyOSIsInJlY2VpdmVUZW1wbGF0ZSIsImZlZCIsIl9hcmdzMjkiLCJfY29udGV4dDI5IiwibGFiZWwiLCJleHBpcmVzSW5TZWNvbmRzIiwiZmVkZXJhdGlvblhPbmx5SGV4IiwiZmV0Y2hQYXlqb2luU2Vzc2lvbnMiLCJfZmV0Y2hQYXlqb2luU2Vzc2lvbnMiLCJfY2FsbGVlMzAiLCJpbmNsdWRlRXhwaXJlZCIsIl9hcmdzMzAiLCJfY29udGV4dDMwIiwiZmV0Y2hQYXlqb2luU2Vzc2lvbiIsIl9mZXRjaFBheWpvaW5TZXNzaW9uIiwiX2NhbGxlZTMxIiwic2Vzc2lvbklkIiwiX2FyZ3MzMSIsIl9jb250ZXh0MzEiLCJzdWJtaXRQYXlqb2luUHJvcG9zYWwiLCJfc3VibWl0UGF5am9pblByb3Bvc2FsIiwiX2NhbGxlZTMyIiwicHJvcG9zYWwiLCJfYXJnczMyIiwiX2NvbnRleHQzMiIsInR4aGV4IiwiYXBwbHlQYXlqb2luQWNwSHViQm9vc3QiLCJfYXBwbHlQYXlqb2luQWNwSHViQm9vc3QiLCJfY2FsbGVlMzMiLCJfYXJnczMzIiwiX2NvbnRleHQzMyIsImdlbmVyYXRlQmxvY2siLCJfZ2VuZXJhdGVCbG9jayIsIl9jYWxsZWUzNCIsIl9hcmdzMzQiLCJfY29udGV4dDM0IiwiY291bnQiLCJmZXRjaEJpdGNvaW5QZWVycyIsIl9mZXRjaEJpdGNvaW5QZWVycyIsIl9jYWxsZWUzNSIsIl9hcmdzMzUiLCJfdDUiLCJfY29udGV4dDM1IiwiZmV0Y2hCaXRjb2luTmV0d29ya1N1bW1hcnkiLCJfZmV0Y2hCaXRjb2luTmV0d29ya1N1bW1hcnkiLCJfY2FsbGVlMzYiLCJfYXJnczM2IiwiX3Q2IiwiX2NvbnRleHQzNiIsImJyb2FkY2FzdFJhd1RyYW5zYWN0aW9uIiwiX2Jyb2FkY2FzdFJhd1RyYW5zYWN0aW9uIiwiX2NhbGxlZTM3IiwiX2FyZ3MzNyIsIl9jb250ZXh0MzciLCJjcmVhdGVMaWdodG5pbmdJbnZvaWNlIiwiX2NyZWF0ZUxpZ2h0bmluZ0ludm9pY2UiLCJfY2FsbGVlMzgiLCJpbnZvaWNlIiwiX2FyZ3MzOCIsIl9jb250ZXh0MzgiLCJwYXlMaWdodG5pbmdJbnZvaWNlIiwiX3BheUxpZ2h0bmluZ0ludm9pY2UiLCJfY2FsbGVlMzkiLCJfYXJnczM5IiwiX2NvbnRleHQzOSIsImRlY29kZUxpZ2h0bmluZ0ludm9pY2UiLCJfZGVjb2RlTGlnaHRuaW5nSW52b2ljZSIsIl9jYWxsZWU0MCIsIl9hcmdzNDAiLCJfY29udGV4dDQwIiwiZmV0Y2hMaWdodG5pbmdTdGF0dXMiLCJfZmV0Y2hMaWdodG5pbmdTdGF0dXMiLCJfY2FsbGVlNDEiLCJfYXJnczQxIiwiX2NvbnRleHQ0MSIsImZldGNoTGlnaHRuaW5nQ2hhbm5lbHMiLCJfZmV0Y2hMaWdodG5pbmdDaGFubmVscyIsIl9jYWxsZWU0MiIsIl9hcmdzNDIiLCJfY29udGV4dDQyIiwiY2hhbm5lbHMiLCJvdXRwdXRzIiwiY3JlYXRlTGlnaHRuaW5nQ2hhbm5lbCIsIl9jcmVhdGVMaWdodG5pbmdDaGFubmVsIiwiX2NhbGxlZTQzIiwiY2hhbm5lbCIsInJlbW90ZSIsInBlZXJJZCIsIl9hcmdzNDMiLCJfdDciLCJfY29udGV4dDQzIiwiY29ubmVjdFN0cmluZyIsInBlZXJfaWQiLCJhbW91bnRfc2F0cyIsInB1c2hNc2F0IiwicHVzaF9tc2F0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/bitcoinClient.js\n\n}")},"./functions/bitcoinFaucetCapability.js"(module){"use strict";eval("{\n\n/**\n * Regtest Beacon faucet capability for HTTP OPTIONS Application Resource Contracts.\n *\n * Peers discover `services.faucet` via `OPTIONS /`. The service is advertised only when\n * the Hub Bitcoin network is regtest (playnet / local debug). Signet, testnet, and\n * mainnet must not expose a faucet pointer — clients must not assume funding exists.\n */\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar FAUCET_MAX_SATS = 1000000;\nvar FAUCET_DEFAULT_SATS = 10000;\nvar FAUCET_ENDPOINT = '/services/bitcoin/faucet';\nvar FAUCET_SOURCE = 'beacon';\n\n/**\n * @param {string|null|undefined} network\n * @returns {boolean}\n */\nfunction isFaucetNetwork(network) {\n return String(network || '').trim().toLowerCase() === 'regtest';\n}\n\n/**\n * Build OPTIONS `services.faucet` descriptor, or null when the faucet must stay invisible.\n *\n * @param {object} [opts]\n * @param {string} [opts.network]\n * @param {boolean} [opts.bitcoinAvailable] Hub Bitcoin service ready\n * @param {number|null} [opts.balanceSats] Hub / Beacon wallet balance (sats)\n * @param {number|null} [opts.beaconClock]\n * @param {string} [opts.endpointBasePath]\n * @returns {object|null}\n */\nfunction buildFaucetServiceDescriptor() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var network = String(opts.network || '').trim().toLowerCase();\n if (!isFaucetNetwork(network)) return null;\n if (opts.bitcoinAvailable === false) return null;\n var balanceRaw = opts.balanceSats;\n var balanceSats = balanceRaw == null || !Number.isFinite(Number(balanceRaw)) ? null : Math.max(0, Math.round(Number(balanceRaw)));\n var clockRaw = opts.beaconClock;\n var beaconClock = clockRaw == null || !Number.isFinite(Number(clockRaw)) ? null : Math.max(0, Math.floor(Number(clockRaw)));\n var endpointBasePath = String(opts.endpointBasePath || FAUCET_ENDPOINT).trim() || FAUCET_ENDPOINT;\n var funded = balanceSats == null ? null : balanceSats > 0;\n return {\n kind: 'BitcoinFaucet',\n source: FAUCET_SOURCE,\n network: 'regtest',\n endpointBasePath: endpointBasePath,\n method: 'POST',\n maxAmountSats: FAUCET_MAX_SATS,\n defaultAmountSats: FAUCET_DEFAULT_SATS,\n available: true,\n funded: funded,\n balanceSats: balanceSats,\n beacon: beaconClock == null ? undefined : {\n clock: beaconClock,\n balanceSats: balanceSats\n },\n description: 'Regtest Beacon wallet faucet — debug/playnet only; omitted on signet/mainnet.'\n };\n}\n\n/**\n * Extract faucet capability from an OPTIONS Application Resource Contract body.\n * @param {object|null} arc\n * @returns {object|null} Normalized faucet service or null when unavailable / absent\n */\nfunction faucetFromOptionsDocument(arc) {\n if (!arc || _typeof(arc) !== 'object') return null;\n var raw = arc.services && arc.services.faucet;\n if (!raw || _typeof(raw) !== 'object') return null;\n if (raw.available === false) return null;\n var network = String(raw.network || '').toLowerCase();\n if (network && !isFaucetNetwork(network)) return null;\n var endpointBasePath = String(raw.endpointBasePath || FAUCET_ENDPOINT).trim() || FAUCET_ENDPOINT;\n return Object.assign({}, raw, {\n available: true,\n network: network || 'regtest',\n endpointBasePath: endpointBasePath,\n maxAmountSats: Number(raw.maxAmountSats) > 0 ? Number(raw.maxAmountSats) : FAUCET_MAX_SATS,\n defaultAmountSats: Number(raw.defaultAmountSats) > 0 ? Number(raw.defaultAmountSats) : FAUCET_DEFAULT_SATS\n });\n}\nmodule.exports = {\n FAUCET_MAX_SATS: FAUCET_MAX_SATS,\n FAUCET_DEFAULT_SATS: FAUCET_DEFAULT_SATS,\n FAUCET_ENDPOINT: FAUCET_ENDPOINT,\n FAUCET_SOURCE: FAUCET_SOURCE,\n isFaucetNetwork: isFaucetNetwork,\n buildFaucetServiceDescriptor: buildFaucetServiceDescriptor,\n faucetFromOptionsDocument: faucetFromOptionsDocument\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvYml0Y29pbkZhdWNldENhcGFiaWxpdHkuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFOQSxTQUFBQSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQVFBLElBQU1LLGVBQWUsR0FBRyxPQUFPO0FBQy9CLElBQU1DLG1CQUFtQixHQUFHLEtBQUs7QUFDakMsSUFBTUMsZUFBZSxHQUFHLDBCQUEwQjtBQUNsRCxJQUFNQyxhQUFhLEdBQUcsUUFBUTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxlQUFlQSxDQUFFQyxPQUFPLEVBQUU7RUFDakMsT0FBT0MsTUFBTSxDQUFDRCxPQUFPLElBQUksRUFBRSxDQUFDLENBQUNFLElBQUksQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEtBQUssU0FBUztBQUNqRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsNEJBQTRCQSxDQUFBLEVBQWE7RUFBQSxJQUFYQyxJQUFJLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUM5QyxJQUFNTixPQUFPLEdBQUdDLE1BQU0sQ0FBQ0ksSUFBSSxDQUFDTCxPQUFPLElBQUksRUFBRSxDQUFDLENBQUNFLElBQUksQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0VBQy9ELElBQUksQ0FB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T0FBTyxFQUFFQSxPQUFPLElBQUksU0FBUztJQUM3Qm9CLGdCQUFnQixFQUFoQkEsZ0JBQWdCO0lBQ2hCSyxhQUFhLEVBQUViLE1BQU0sQ0FBQ3FCLEdBQUcsQ0FBQ1IsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHYixNQUFNLENBQUNxQixHQUFHLENBQUNSLGFBQWEsQ0FBQyxHQUFHOUIsZUFBZTtJQUMxRitCLGlCQUFpQixFQUFFZCxNQUFNLENBQUNxQixHQUFHLENBQUNQLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUNoRGQsTUFBTSxDQUFDcUIsR0FBRyxDQUFDUCxpQkFBaUIsQ0FBQyxHQUM3QjlCO0VBQ04sQ0FBQyxDQUFDO0FBQ0o7QUFFQTBDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2Y1QyxlQUFlLEVBQWZBLGVBQWU7RUFDZkMsbUJBQW1CLEVBQW5CQSxtQkFBbUI7RUFDbkJDLGVBQWUsRUFBZkEsZUFBZTtFQUNmQyxhQUFhLEVBQWJBLGFBQWE7RUFDYkMsZUFBZSxFQUFmQSxlQUFlO0VBQ2ZLLDRCQUE0QixFQUE1QkEsNEJBQTRCO0VBQzVCMkIseUJBQXlCLEVBQXpCQTtBQUNGLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9iaXRjb2luRmF1Y2V0Q2FwYWJpbGl0eS5qcz85YjliIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBSZWd0ZXN0IEJlYWNvbiBmYXVjZXQgY2FwYWJpbGl0eSBmb3IgSFRUUCBPUFRJT05TIEFwcGxpY2F0aW9uIFJlc291cmNlIENvbnRyYWN0cy5cbiAqXG4gKiBQZWVycyBkaXNjb3ZlciBgc2VydmljZXMuZmF1Y2V0YCB2aWEgYE9QVElPTlMgL2AuIFRoZSBzZXJ2aWNlIGlzIGFkdmVydGlzZWQgb25seSB3aGVuXG4gKiB0aGUgSHViIEJpdGNvaW4gbmV0d29yayBpcyByZWd0ZXN0IChwbGF5bmV0IC8gbG9jYWwgZGVidWcpLiBTaWduZXQsIHRlc3RuZXQsIGFuZFxuICogbWFpbm5ldCBtdXN0IG5vdCBleHBvc2UgYSBmYXVjZXQgcG9pbnRlciDigJQgY2xpZW50cyBtdXN0IG5vdCBhc3N1bWUgZnVuZGluZyBleGlzdHMuXG4gKi9cblxuY29uc3QgRkFVQ0VUX01BWF9TQVRTID0gMTAwMDAwMDtcbmNvbnN0IEZBVUNFVF9ERUZBVUxUX1NBVFMgPSAxMDAwMDtcbmNvbnN0IEZBVUNFVF9FTkRQT0lOVCA9ICcvc2VydmljZXMvYml0Y29pbi9mYXVjZXQnO1xuY29uc3QgRkFVQ0VUX1NPVVJDRSA9ICdiZWFjb24nO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfG51bGx8dW5kZWZpbmVkfSBuZXR3b3JrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGYXVjZXROZXR3b3JrIChuZXR3b3JrKSB7XG4gIHJldHVybiBTdHJpbmcobmV0d29yayB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09ICdyZWd0ZXN0Jztcbn1cblxuLyoqXG4gKiBCdWlsZCBPUFRJT05TIGBzZXJ2aWNlcy5mYXVjZXRgIGRlc2NyaXB0b3IsIG9yIG51bGwgd2hlbiB0aGUgZmF1Y2V0IG11c3Qgc3RheSBpbnZpc2libGUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5ldHdvcmtdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmJpdGNvaW5BdmFpbGFibGVdIEh1YiBCaXRjb2luIHNlcnZpY2UgcmVhZHlcbiAqIEBwYXJhbSB7bnVtYmVyfG51bGx9IFtvcHRzLmJhbGFuY2VTYXRzXSBIdWIgLyBCZWFjb24gd2FsbGV0IGJhbGFuY2UgKHNhdHMpXG4gKiBAcGFyYW0ge251bWJlcnxudWxsfSBbb3B0cy5iZWFjb25DbG9ja11cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5lbmRwb2ludEJhc2VQYXRoXVxuICogQHJldHVybnMge29iamVjdHxudWxsfVxuICovXG5mdW5jdGlvbiBidWlsZEZhdWNldFNlcnZpY2VEZXNjcmlwdG9yIChvcHRzID0ge30pIHtcbiAgY29uc3QgbmV0d29yayA9IFN0cmluZyhvcHRzLm5ldHdvcmsgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIWlzRmF1Y2V0TmV0d29yayhuZXR3b3JrKSkgcmV0dXJuIG51bGw7XG4gIGlmIChvcHRzLmJpdGNvaW5BdmFpbGFibGUgPT09IGZhbHNlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBiYWxhbmNlUmF3ID0gb3B0cy5iYWxhbmNlU2F0cztcbiAgY29uc3QgYmFsYW5jZVNhdHMgPSBiYWxhbmNlUmF3ID09IG51bGwgfHwgIU51bWJlci5pc0Zpbml0ZShOdW1iZXIoYmFsYW5jZVJhdykpXG4gICAgPyBudWxsXG4gICAgOiBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKE51bWJlcihiYWxhbmNlUmF3KSkpO1xuICBjb25zdCBjbG9ja1JhdyA9IG9wdHMuYmVhY29uQ2xvY2s7XG4gIGNvbnN0IGJlYWNvbkNsb2NrID0gY2xvY2tSYXcgPT0gbnVsbCB8fCAhTnVtYmVyLmlzRmluaXRlKE51bWJlcihjbG9ja1JhdykpXG4gICAgPyBudWxsXG4gICAgOiBNYXRoLm1heCgwLCBNYXRoLmZsb29yKE51bWJlcihjbG9ja1JhdykpKTtcblxuICBjb25zdCBlbmRwb2ludEJhc2VQYXRoID0gU3RyaW5nKG9wdHMuZW5kcG9pbnRCYXNlUGF0aCB8fCBGQVVDRVRfRU5EUE9JTlQpLnRyaW0oKSB8fCBGQVVDRVRfRU5EUE9JTlQ7XG4gIGNvbnN0IGZ1bmRlZCA9IGJhbGFuY2VTYXRzID09IG51bGwgPyBudWxsIDogYmFsYW5jZVNhdHMgPiAwO1xuXG4gIHJldHVybiB7XG4gICAga2luZDogJ0JpdGNvaW5GYXVjZXQnLFxuICAgIHNvdXJjZTogRkFVQ0VUX1NPVVJDRSxcbiAgICBuZXR3b3JrOiAncmVndGVzdCcsXG4gICAgZW5kcG9pbnRCYXNlUGF0aCxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBtYXhBbW91bnRTYXRzOiBGQVVDRVRfTUFYX1NBVFMsXG4gICAgZGVmYXVsdEFtb3VudFNhdHM6IEZBVUNFVF9ERUZBVUxUX1NBVFMsXG4gICAgYXZhaWxhYmxlOiB0cnVlLFxuICAgIGZ1bmRlZCxcbiAgICBiYWxhbmNlU2F0cyxcbiAgICBiZWFjb246IGJlYWNvbkNsb2NrID09IG51bGwgPyB1bmRlZmluZWQgOiB7IGNsb2NrOiBiZWFjb25DbG9jaywgYmFsYW5jZVNhdHMgfSxcbiAgICBkZXNjcmlwdGlvbjogJ1JlZ3Rlc3QgQmVhY29uIHdhbGxldCBmYXVjZXQg4oCUIGRlYnVnL3BsYXluZXQgb25seTsgb21pdHRlZCBvbiBzaWduZXQvbWFpbm5ldC4nXG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdCBmYXVjZXQgY2FwYWJpbGl0eSBmcm9tIGFuIE9QVElPTlMgQXBwbGljYXRpb24gUmVzb3VyY2UgQ29udHJhY3QgYm9keS5cbiAqIEBwYXJhbSB7b2JqZWN0fG51bGx9IGFyY1xuICogQHJldHVybnMge29iamVjdHxudWxsfSBOb3JtYWxpemVkIGZhdWNldCBzZXJ2aWNlIG9yIG51bGwgd2hlbiB1bmF2YWlsYWJsZSAvIGFic2VudFxuICovXG5mdW5jdGlvbiBmYXVjZXRGcm9tT3B0aW9uc0RvY3VtZW50IChhcmMpIHtcbiAgaWYgKCFhcmMgfHwgdHlwZW9mIGFyYyAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuICBjb25zdCByYXcgPSBhcmMuc2VydmljZXMgJiYgYXJjLnNlcnZpY2VzLmZhdWNldDtcbiAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuICBpZiAocmF3LmF2YWlsYWJsZSA9PT0gZmFsc2UpIHJldHVybiBudWxsO1xuICBjb25zdCBuZXR3b3JrID0gU3RyaW5nKHJhdy5uZXR3b3JrIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAobmV0d29yayAmJiAhaXNGYXVjZXROZXR3b3JrKG5ldHdvcmspKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgZW5kcG9pbnRCYXNlUGF0aCA9IFN0cmluZyhyYXcuZW5kcG9pbnRCYXNlUGF0aCB8fCBGQVVDRVRfRU5EUE9JTlQpLnRyaW0oKSB8fCBGQVVDRVRfRU5EUE9JTlQ7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByYXcsIHtcbiAgICBhdmFpbGFibGU6IHRydWUsXG4gICAgbmV0d29yazogbmV0d29yayB8fCAncmVndGVzdCcsXG4gICAgZW5kcG9pbnRCYXNlUGF0aCxcbiAgICBtYXhBbW91bnRTYXRzOiBOdW1iZXIocmF3Lm1heEFtb3VudFNhdHMpID4gMCA/IE51bWJlcihyYXcubWF4QW1vdW50U2F0cykgOiBGQVVDRVRfTUFYX1NBVFMsXG4gICAgZGVmYXVsdEFtb3VudFNhdHM6IE51bWJlcihyYXcuZGVmYXVsdEFtb3VudFNhdHMpID4gMFxuICAgICAgPyBOdW1iZXIocmF3LmRlZmF1bHRBbW91bnRTYXRzKVxuICAgICAgOiBGQVVDRVRfREVGQVVMVF9TQVRTXG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRkFVQ0VUX01BWF9TQVRTLFxuICBGQVVDRVRfREVGQVVMVF9TQVRTLFxuICBGQVVDRVRfRU5EUE9JTlQsXG4gIEZBVUNFVF9TT1VSQ0UsXG4gIGlzRmF1Y2V0TmV0d29yayxcbiAgYnVpbGRGYXVjZXRTZXJ2aWNlRGVzY3JpcHRvcixcbiAgZmF1Y2V0RnJvbU9wdGlvbnNEb2N1bWVudFxufTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJGQVVDRVRfTUFYX1NBVFMiLCJGQVVDRVRfREVGQVVMVF9TQVRTIiwiRkFVQ0VUX0VORFBPSU5UIiwiRkFVQ0VUX1NPVVJDRSIsImlzRmF1Y2V0TmV0d29yayIsIm5ldHdvcmsiLCJTdHJpbmciLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJidWlsZEZhdWNldFNlcnZpY2VEZXNjcmlwdG9yIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImJpdGNvaW5BdmFpbGFibGUiLCJiYWxhbmNlUmF3IiwiYmFsYW5jZVNhdHMiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIk1hdGgiLCJtYXgiLCJyb3VuZCIsImNsb2NrUmF3IiwiYmVhY29uQ2xvY2siLCJmbG9vciIsImVuZHBvaW50QmFzZVBhdGgiLCJmdW5kZWQiLCJraW5kIiwic291cmNlIiwibWV0aG9kIiwibWF4QW1vdW50U2F0cyIsImRlZmF1bHRBbW91bnRTYXRzIiwiYXZhaWxhYmxlIiwiYmVhY29uIiwiY2xvY2siLCJkZXNjcmlwdGlvbiIsImZhdWNldEZyb21PcHRpb25zRG9jdW1lbnQiLCJhcmMiLCJyYXciLCJzZXJ2aWNlcyIsImZhdWNldCIsIk9iamVjdCIsImFzc2lnbiIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/bitcoinFaucetCapability.js\n\n}")},"./functions/bitcoinSpendBounds.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/** P2WPKH vbytes (non-witness size * 4 + witness size, /4 rounded up). */\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nvar VB_IN_P2WPKH = 68.25;\nvar VB_OUT_P2WPKH = 31;\nvar VB_TX_BASE = 10.5;\n/** Conservative P2WPKH output dust floor for relay policy (sats). */\nvar DUST_P2WPKH_SATS = 330;\nvar _require = __webpack_require__(/*! ../constants */ "./constants.js"),\n SATS_PER_BTC = _require.SATS_PER_BTC;\nvar FAUCET_CAP_DEFAULT_SATS = 1000000;\nvar MAX_INPUTS_PESSIMISTIC = 12;\nfunction vsizeP2wpkh(numInputs, numOutputs) {\n var vin = Math.max(1, Math.min(200, Math.floor(Number(numInputs) || 1)));\n var vout = Math.max(1, Math.min(20, Math.floor(Number(numOutputs) || 2)));\n return Math.ceil(VB_TX_BASE + VB_IN_P2WPKH * vin + VB_OUT_P2WPKH * vout);\n}\nfunction feeSatsForVsize(vsize, satPerVbyte) {\n return Math.ceil(vsize * satPerVbyte);\n}\nfunction btcPerKbToSatPerVbyte(btcPerKb) {\n var n = Number(btcPerKb);\n if (!Number.isFinite(n) || n <= 0) return null;\n return n * SATS_PER_BTC / 1000;\n}\n\n/**\n * Effective fee rate (sat/vB) from Core-style mempool info + network fallback.\n * @param {object} mempoolInfo - from getmempoolinfo (mempoolminfee, minrelaytxfee as BTC/kB)\n * @param {string} [network]\n * @returns {number}\n */\nfunction satPerVbyteFromMempoolInfo(mempoolInfo, network) {\n var mi = mempoolInfo && _typeof(mempoolInfo) === \'object\' ? mempoolInfo : {};\n var fromMempool = btcPerKbToSatPerVbyte(mi.mempoolminfee);\n var fromRelay = btcPerKbToSatPerVbyte(mi.minrelaytxfee);\n var s = null;\n if (fromMempool != null) s = fromMempool;\n if (fromRelay != null) s = s == null ? fromRelay : Math.max(s, fromRelay);\n if (s == null || !Number.isFinite(s) || s < 0.25) {\n var reg = String(network || \'\').toLowerCase() === \'regtest\';\n s = reg ? 1 : 10;\n }\n return Math.max(1, s);\n}\nfunction utxoAmountsFromList(utxos) {\n if (!Array.isArray(utxos)) return [];\n var out = [];\n var _iterator = _createForOfIteratorHelper(utxos),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var u = _step.value;\n if (!u || _typeof(u) !== \'object\') continue;\n var s = u.amountSats;\n if (s == null && u.amount != null) s = Math.round(Number(u.amount) * SATS_PER_BTC);\n var n = Number(s);\n if (Number.isFinite(n) && n > 0) out.push(Math.round(n));\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return out.sort(function (a, b) {\n return b - a;\n });\n}\n\n/**\n * Greedy largest-first: can we pay `amountSats` with P2WPKH 2 outputs (recipient + change)?\n * Treats tiny positive change as donated to fee (matches common wallet behavior).\n */\nfunction simulateP2wpkhPayment(amountSats, utxoSatsDesc, satPerVbyte) {\n var DUST = DUST_P2WPKH_SATS;\n var sorted = _toConsumableArray(utxoSatsDesc).filter(function (n) {\n return n > 0;\n }).sort(function (a, b) {\n return b - a;\n });\n var picked = [];\n var _iterator2 = _createForOfIteratorHelper(sorted),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var u = _step2.value;\n picked.push(u);\n var vin = picked.length;\n var vsize = vsizeP2wpkh(vin, 2);\n var fee = feeSatsForVsize(vsize, satPerVbyte);\n var totalIn = picked.reduce(function (a, b) {\n return a + b;\n }, 0);\n var after = totalIn - amountSats - fee;\n if (after < 0) continue;\n if (after === 0) return {\n ok: true,\n feeSats: fee,\n inputsUsed: vin\n };\n if (after >= DUST) return {\n ok: true,\n feeSats: fee,\n inputsUsed: vin,\n changeSats: after\n };\n var effFee = fee + after;\n if (totalIn >= amountSats + effFee) return {\n ok: true,\n feeSats: effFee,\n inputsUsed: vin,\n changeSats: 0\n };\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n return {\n ok: false,\n feeSats: feeSatsForVsize(vsizeP2wpkh(Math.max(1, sorted.length || 1), 2), satPerVbyte),\n inputsUsed: sorted.length || 0\n };\n}\nfunction maxSpendableSatsBinarySearch(utxoSatsDesc, satPerVbyte, balanceSats) {\n var amounts = utxoSatsDesc;\n var total = amounts.reduce(function (a, b) {\n return a + b;\n }, 0);\n var cap = Math.min(Math.max(0, Math.floor(Number(balanceSats) || 0)), total);\n if (cap <= 0) return 0;\n var lo = 0;\n var hi = Math.floor(cap);\n for (var i = 0; i < 56; i++) {\n if (lo >= hi) break;\n var mid = Math.floor((lo + hi + 1) / 2);\n var sim = simulateP2wpkhPayment(mid, amounts, satPerVbyte);\n if (sim.ok) lo = mid;else hi = mid - 1;\n }\n return lo;\n}\n\n/**\n * Client-side hints for hub-wallet sends (faucet, payments): fee market + UTXO fragmentation.\n * @param {object} opts\n * @param {number} opts.balanceSats - trusted spendable balance (sats)\n * @param {object[]} [opts.utxos] - listunspent-shaped entries\n * @param {object} [opts.mempoolInfo]\n * @param {string} [opts.network]\n * @param {number} [opts.faucetCapSats]\n * @param {number} [opts.targetAmountSats] - optional amount to validate\n */\nfunction computeHubWalletSpendHints() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var balanceSats = Math.max(0, Math.round(Number(opts.balanceSats) || 0));\n var network = opts.network != null ? String(opts.network) : \'\';\n var mempoolInfo = opts.mempoolInfo;\n var satPerVbyte = satPerVbyteFromMempoolInfo(mempoolInfo, network);\n var amounts = utxoAmountsFromList(opts.utxos);\n var n = amounts.length;\n var largestUtxoSats = n > 0 ? amounts[0] : 0;\n var feeSingleSpendSats = feeSatsForVsize(vsizeP2wpkh(1, 2), satPerVbyte);\n var pessimisticInputs = Math.min(MAX_INPUTS_PESSIMISTIC, Math.max(1, n || 1));\n var feePessimisticSats = feeSatsForVsize(vsizeP2wpkh(pessimisticInputs, 2), satPerVbyte);\n var feeReserveSats = Math.max(feeSingleSpendSats, feePessimisticSats) + DUST_P2WPKH_SATS;\n var maxSpendableSats = 0;\n if (n > 0) maxSpendableSats = maxSpendableSatsBinarySearch(amounts, satPerVbyte, balanceSats);else if (balanceSats > 0) maxSpendableSats = Math.max(0, balanceSats - feeSingleSpendSats - DUST_P2WPKH_SATS);\n var faucetCapSats = Math.max(1, Math.round(Number(opts.faucetCapSats) || FAUCET_CAP_DEFAULT_SATS));\n var maxAffordableSats = Math.min(faucetCapSats, maxSpendableSats);\n var targetAmountSats = opts.targetAmountSats != null ? Math.round(Number(opts.targetAmountSats)) : null;\n var canPayTarget = null;\n var payTargetSim = null;\n if (n > 0 && targetAmountSats != null && Number.isFinite(targetAmountSats) && targetAmountSats > 0) {\n payTargetSim = simulateP2wpkhPayment(targetAmountSats, amounts, satPerVbyte);\n canPayTarget = !!payTargetSim.ok;\n }\n var fragmentedVsSingle = n > 1 && largestUtxoSats > 0 && targetAmountSats != null && Number.isFinite(targetAmountSats) && targetAmountSats + feeSingleSpendSats > largestUtxoSats;\n return {\n satPerVbyte: Math.round(satPerVbyte * 1000) / 1000,\n feeSingleSpendSats: feeSingleSpendSats,\n feePessimisticSats: feePessimisticSats,\n feeReserveSats: feeReserveSats,\n dustRecipientSats: DUST_P2WPKH_SATS,\n utxoCount: n,\n largestUtxoSats: largestUtxoSats,\n maxSpendableSats: maxSpendableSats,\n maxAffordableSats: maxAffordableSats,\n minRecipientSats: DUST_P2WPKH_SATS,\n canPayTarget: canPayTarget,\n payTargetSim: payTargetSim,\n fragmentedVsSingle: fragmentedVsSingle,\n hadUtxoList: n > 0\n };\n}\nmodule.exports = {\n satPerVbyteFromMempoolInfo: satPerVbyteFromMempoolInfo,\n utxoAmountsFromList: utxoAmountsFromList,\n simulateP2wpkhPayment: simulateP2wpkhPayment,\n maxSpendableSatsBinarySearch: maxSpendableSatsBinarySearch,\n computeHubWalletSpendHints: computeHubWalletSpendHints,\n vsizeP2wpkh: vsizeP2wpkh,\n DUST_P2WPKH_SATS: DUST_P2WPKH_SATS\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNIO0FBRUFnSCxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmdkUsMEJBQTBCLEVBQTFCQSwwQkFBMEI7RUFDMUJXLG1CQUFtQixFQUFuQkEsbUJBQW1CO0VBQ25CWSxxQkFBcUIsRUFBckJBLHFCQUFxQjtFQUNyQmlCLDRCQUE0QixFQUE1QkEsNEJBQTRCO0VBQzVCVSwwQkFBMEIsRUFBMUJBLDBCQUEwQjtFQUMxQm5FLFdBQVcsRUFBWEEsV0FBVztFQUNYTixnQkFBZ0IsRUFBaEJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2JpdGNvaW5TcGVuZEJvdW5kcy5qcz82MzZiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqIFAyV1BLSCB2Ynl0ZXMgKG5vbi13aXRuZXNzIHNpemUgKiA0ICsgd2l0bmVzcyBzaXplLCAvNCByb3VuZGVkIHVwKS4gKi9cbmNvbnN0IFZCX0lOX1AyV1BLSCA9IDY4LjI1O1xuY29uc3QgVkJfT1VUX1AyV1BLSCA9IDMxO1xuY29uc3QgVkJfVFhfQkFTRSA9IDEwLjU7XG4vKiogQ29uc2VydmF0aXZlIFAyV1BLSCBvdXRwdXQgZHVzdCBmbG9vciBmb3IgcmVsYXkgcG9saWN5IChzYXRzKS4gKi9cbmNvbnN0IERVU1RfUDJXUEtIX1NBVFMgPSAzMzA7XG5jb25zdCB7IFNBVFNfUEVSX0JUQyB9ID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzJyk7XG5jb25zdCBGQVVDRVRfQ0FQX0RFRkFVTFRfU0FUUyA9IDEwMDAwMDA7XG5jb25zdCBNQVhfSU5QVVRTX1BFU1NJTUlTVElDID0gMTI7XG5cbmZ1bmN0aW9uIHZzaXplUDJ3cGtoIChudW1JbnB1dHMsIG51bU91dHB1dHMpIHtcbiAgY29uc3QgdmluID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oMjAwLCBNYXRoLmZsb29yKE51bWJlcihudW1JbnB1dHMpIHx8IDEpKSk7XG4gIGNvbnN0IHZvdXQgPSBNYXRoLm1heCgxLCBNYXRoLm1pbigyMCwgTWF0aC5mbG9vcihOdW1iZXIobnVtT3V0cHV0cykgfHwgMikpKTtcbiAgcmV0dXJuIE1hdGguY2VpbChWQl9UWF9CQVNFICsgVkJfSU5fUDJXUEtIICogdmluICsgVkJfT1VUX1AyV1BLSCAqIHZvdXQpO1xufVxuXG5mdW5jdGlvbiBmZWVTYXRzRm9yVnNpemUgKHZzaXplLCBzYXRQZXJWYnl0ZSkge1xuICByZXR1cm4gTWF0aC5jZWlsKHZzaXplICogc2F0UGVyVmJ5dGUpO1xufVxuXG5mdW5jdGlvbiBidGNQZXJLYlRvU2F0UGVyVmJ5dGUgKGJ0Y1BlcktiKSB7XG4gIGNvbnN0IG4gPSBOdW1iZXIoYnRjUGVyS2IpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShuKSB8fCBuIDw9IDApIHJldHVybiBudWxsO1xuICByZXR1cm4gKG4gKiBTQVRTX1BFUl9CVEMpIC8gMTAwMDtcbn1cblxuLyoqXG4gKiBFZmZlY3RpdmUgZmVlIHJhdGUgKHNhdC92QikgZnJvbSBDb3JlLXN0eWxlIG1lbXBvb2wgaW5mbyArIG5ldHdvcmsgZmFsbGJhY2suXG4gKiBAcGFyYW0ge29iamVjdH0gbWVtcG9vbEluZm8gLSBmcm9tIGdldG1lbXBvb2xpbmZvIChtZW1wb29sbWluZmVlLCBtaW5yZWxheXR4ZmVlIGFzIEJUQy9rQilcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmV0d29ya11cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHNhdFBlclZieXRlRnJvbU1lbXBvb2xJbmZvIChtZW1wb29sSW5mbywgbmV0d29yaykge1xuICBjb25zdCBtaSA9IG1lbXBvb2xJbmZvICYmIHR5cGVvZiBtZW1wb29sSW5mbyA9PT0gJ29iamVjdCcgPyBtZW1wb29sSW5mbyA6IHt9O1xuICBjb25zdCBmcm9tTWVtcG9vbCA9IGJ0Y1BlcktiVG9TYXRQZXJWYnl0ZShtaS5tZW1wb29sbWluZmVlKTtcbiAgY29uc3QgZnJvbVJlbGF5ID0gYnRjUGVyS2JUb1NhdFBlclZieXRlKG1pLm1pbnJlbGF5dHhmZWUpO1xuICBsZXQgcyA9IG51bGw7XG4gIGlmIChmcm9tTWVtcG9vbCAhPSBudWxsKSBzID0gZnJvbU1lbXBvb2w7XG4gIGlmIChmcm9tUmVsYXkgIT0gbnVsbCkgcyA9IHMgPT0gbnVsbCA/IGZyb21SZWxheSA6IE1hdGgubWF4KHMsIGZyb21SZWxheSk7XG4gIGlmIChzID09IG51bGwgfHwgIU51bWJlci5pc0Zpbml0ZShzKSB8fCBzIDwgMC4yNSkge1xuICAgIGNvbnN0IHJlZyA9IFN0cmluZyhuZXR3b3JrIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAncmVndGVzdCc7XG4gICAgcyA9IHJlZyA/IDEgOiAxMDtcbiAgfVxuICByZXR1cm4gTWF0aC5tYXgoMSwgcyk7XG59XG5cbmZ1bmN0aW9uIHV0eG9BbW91bnRzRnJvbUxpc3QgKHV0eG9zKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh1dHhvcykpIHJldHVybiBbXTtcbiAgY29uc3Qgb3V0ID0gW107XG4gIGZvciAoY29uc3QgdSBvZiB1dHhvcykge1xuICAgIGlmICghdSB8fCB0eXBlb2YgdSAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgIGxldCBzID0gdS5hbW91bnRTYXRzO1xuICAgIGlmIChzID09IG51bGwgJiYgdS5hbW91bnQgIT0gbnVsbCkgcyA9IE1hdGgucm91bmQoTnVtYmVyKHUuYW1vdW50KSAqIFNBVFNfUEVSX0JUQyk7XG4gICAgY29uc3QgbiA9IE51bWJlcihzKTtcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG4pICYmIG4gPiAwKSBvdXQucHVzaChNYXRoLnJvdW5kKG4pKTtcbiAgfVxuICByZXR1cm4gb3V0LnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcbn1cblxuLyoqXG4gKiBHcmVlZHkgbGFyZ2VzdC1maXJzdDogY2FuIHdlIHBheSBgYW1vdW50U2F0c2Agd2l0aCBQMldQS0ggMiBvdXRwdXRzIChyZWNpcGllbnQgKyBjaGFuZ2UpP1xuICogVHJlYXRzIHRpbnkgcG9zaXRpdmUgY2hhbmdlIGFzIGRvbmF0ZWQgdG8gZmVlIChtYXRjaGVzIGNvbW1vbiB3YWxsZXQgYmVoYXZpb3IpLlxuICovXG5mdW5jdGlvbiBzaW11bGF0ZVAyd3BraFBheW1lbnQgKGFtb3VudFNhdHMsIHV0eG9TYXRzRGVzYywgc2F0UGVyVmJ5dGUpIHtcbiAgY29uc3QgRFVTVCA9IERVU1RfUDJXUEtIX1NBVFM7XG4gIGNvbnN0IHNvcnRlZCA9IFsuLi51dHhvU2F0c0Rlc2NdLmZpbHRlcigobikgPT4gbiA+IDApLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcbiAgY29uc3QgcGlja2VkID0gW107XG4gIGZvciAoY29uc3QgdSBvZiBzb3J0ZWQpIHtcbiAgICBwaWNrZWQucHVzaCh1KTtcbiAgICBjb25zdCB2aW4gPSBwaWNrZWQubGVuZ3RoO1xuICAgIGNvbnN0IHZzaXplID0gdnNpemVQMndwa2godmluLCAyKTtcbiAgICBjb25zdCBmZWUgPSBmZWVTYXRzRm9yVnNpemUodnNpemUsIHNhdFBlclZieXRlKTtcbiAgICBjb25zdCB0b3RhbEluID0gcGlja2VkLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICAgIGNvbnN0IGFmdGVyID0gdG90YWxJbiAtIGFtb3VudFNhdHMgLSBmZWU7XG4gICAgaWYgKGFmdGVyIDwgMCkgY29udGludWU7XG4gICAgaWYgKGFmdGVyID09PSAwKSByZXR1cm4geyBvazogdHJ1ZSwgZmVlU2F0czogZmVlLCBpbnB1dHNVc2VkOiB2aW4gfTtcbiAgICBpZiAoYWZ0ZXIgPj0gRFVTVCkgcmV0dXJuIHsgb2s6IHRydWUsIGZlZVNhdHM6IGZlZSwgaW5wdXRzVXNlZDogdmluLCBjaGFuZ2VTYXRzOiBhZnRlciB9O1xuICAgIGNvbnN0IGVmZkZlZSA9IGZlZSArIGFmdGVyO1xuICAgIGlmICh0b3RhbEluID49IGFtb3VudFNhdHMgKyBlZmZGZWUpIHJldHVybiB7IG9rOiB0cnVlLCBmZWVTYXRzOiBlZmZGZWUsIGlucHV0c1VzZWQ6IHZpbiwgY2hhbmdlU2F0czogMCB9O1xuICB9XG4gIHJldHVybiB7IG9rOiBmYWxzZSwgZmVlU2F0czogZmVlU2F0c0ZvclZzaXplKHZzaXplUDJ3cGtoKE1hdGgubWF4KDEsIHNvcnRlZC5sZW5ndGggfHwgMSksIDIpLCBzYXRQZXJWYnl0ZSksIGlucHV0c1VzZWQ6IHNvcnRlZC5sZW5ndGggfHwgMCB9O1xufVxuXG5mdW5jdGlvbiBtYXhTcGVuZGFibGVTYXRzQmluYXJ5U2VhcmNoICh1dHhvU2F0c0Rlc2MsIHNhdFBlclZieXRlLCBiYWxhbmNlU2F0cykge1xuICBjb25zdCBhbW91bnRzID0gdXR4b1NhdHNEZXNjO1xuICBjb25zdCB0b3RhbCA9IGFtb3VudHMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gIGNvbnN0IGNhcCA9IE1hdGgubWluKE1hdGgubWF4KDAsIE1hdGguZmxvb3IoTnVtYmVyKGJhbGFuY2VTYXRzKSB8fCAwKSksIHRvdGFsKTtcbiAgaWYgKGNhcCA8PSAwKSByZXR1cm4gMDtcbiAgbGV0IGxvID0gMDtcbiAgbGV0IGhpID0gTWF0aC5mbG9vcihjYXApO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDU2OyBpKyspIHtcbiAgICBpZiAobG8gPj0gaGkpIGJyZWFrO1xuICAgIGNvbnN0IG1pZCA9IE1hdGguZmxvb3IoKGxvICsgaGkgKyAxKSAvIDIpO1xuICAgIGNvbnN0IHNpbSA9IHNpbXVsYXRlUDJ3cGtoUGF5bWVudChtaWQsIGFtb3VudHMsIHNhdFBlclZieXRlKTtcbiAgICBpZiAoc2ltLm9rKSBsbyA9IG1pZDtcbiAgICBlbHNlIGhpID0gbWlkIC0gMTtcbiAgfVxuICByZXR1cm4gbG87XG59XG5cbi8qKlxuICogQ2xpZW50LXNpZGUgaGludHMgZm9yIGh1Yi13YWxsZXQgc2VuZHMgKGZhdWNldCwgcGF5bWVudHMpOiBmZWUgbWFya2V0ICsgVVRYTyBmcmFnbWVudGF0aW9uLlxuICogQHBhcmFtIHtvYmplY3R9IG9wdHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmJhbGFuY2VTYXRzIC0gdHJ1c3RlZCBzcGVuZGFibGUgYmFsYW5jZSAoc2F0cylcbiAqIEBwYXJhbSB7b2JqZWN0W119IFtvcHRzLnV0eG9zXSAtIGxpc3R1bnNwZW50LXNoYXBlZCBlbnRyaWVzXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdHMubWVtcG9vbEluZm9dXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubmV0d29ya11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5mYXVjZXRDYXBTYXRzXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnRhcmdldEFtb3VudFNhdHNdIC0gb3B0aW9uYWwgYW1vdW50IHRvIHZhbGlkYXRlXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVIdWJXYWxsZXRTcGVuZEhpbnRzIChvcHRzID0ge30pIHtcbiAgY29uc3QgYmFsYW5jZVNhdHMgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKE51bWJlcihvcHRzLmJhbGFuY2VTYXRzKSB8fCAwKSk7XG4gIGNvbnN0IG5ldHdvcmsgPSBvcHRzLm5ldHdvcmsgIT0gbnVsbCA/IFN0cmluZyhvcHRzLm5ldHdvcmspIDogJyc7XG4gIGNvbnN0IG1lbXBvb2xJbmZvID0gb3B0cy5tZW1wb29sSW5mbztcbiAgY29uc3Qgc2F0UGVyVmJ5dGUgPSBzYXRQZXJWYnl0ZUZyb21NZW1wb29sSW5mbyhtZW1wb29sSW5mbywgbmV0d29yayk7XG4gIGNvbnN0IGFtb3VudHMgPSB1dHhvQW1vdW50c0Zyb21MaXN0KG9wdHMudXR4b3MpO1xuICBjb25zdCBuID0gYW1vdW50cy5sZW5ndGg7XG4gIGNvbnN0IGxhcmdlc3RVdHhvU2F0cyA9IG4gPiAwID8gYW1vdW50c1swXSA6IDA7XG4gIGNvbnN0IGZlZVNpbmdsZVNwZW5kU2F0cyA9IGZlZVNhdHNGb3JWc2l6ZSh2c2l6ZVAyd3BraCgxLCAyKSwgc2F0UGVyVmJ5dGUpO1xuICBjb25zdCBwZXNzaW1pc3RpY0lucHV0cyA9IE1hdGgubWluKE1BWF9JTlBVVFNfUEVTU0lNSVNUSUMsIE1hdGgubWF4KDEsIG4gfHwgMSkpO1xuICBjb25zdCBmZWVQZXNzaW1pc3RpY1NhdHMgPSBmZWVTYXRzRm9yVnNpemUodnNpemVQMndwa2gocGVzc2ltaXN0aWNJbnB1dHMsIDIpLCBzYXRQZXJWYnl0ZSk7XG4gIGNvbnN0IGZlZVJlc2VydmVTYXRzID0gTWF0aC5tYXgoZmVlU2luZ2xlU3BlbmRTYXRzLCBmZWVQZXNzaW1pc3RpY1NhdHMpICsgRFVTVF9QMldQS0hfU0FUUztcblxuICBsZXQgbWF4U3BlbmRhYmxlU2F0cyA9IDA7XG4gIGlmIChuID4gMCkgbWF4U3BlbmRhYmxlU2F0cyA9IG1heFNwZW5kYWJsZVNhdHNCaW5hcnlTZWFyY2goYW1vdW50cywgc2F0UGVyVmJ5dGUsIGJhbGFuY2VTYXRzKTtcbiAgZWxzZSBpZiAoYmFsYW5jZVNhdHMgPiAwKSBtYXhTcGVuZGFibGVTYXRzID0gTWF0aC5tYXgoMCwgYmFsYW5jZVNhdHMgLSBmZWVTaW5nbGVTcGVuZFNhdHMgLSBEVVNUX1AyV1BLSF9TQVRTKTtcblxuICBjb25zdCBmYXVjZXRDYXBTYXRzID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChOdW1iZXIob3B0cy5mYXVjZXRDYXBTYXRzKSB8fCBGQVVDRVRfQ0FQX0RFRkFVTFRfU0FUUykpO1xuICBjb25zdCBtYXhBZmZvcmRhYmxlU2F0cyA9IE1hdGgubWluKGZhdWNldENhcFNhdHMsIG1heFNwZW5kYWJsZVNhdHMpO1xuXG4gIGNvbnN0IHRhcmdldEFtb3VudFNhdHMgPSBvcHRzLnRhcmdldEFtb3VudFNhdHMgIT0gbnVsbCA/IE1hdGgucm91bmQoTnVtYmVyKG9wdHMudGFyZ2V0QW1vdW50U2F0cykpIDogbnVsbDtcbiAgbGV0IGNhblBheVRhcmdldCA9IG51bGw7XG4gIGxldCBwYXlUYXJnZXRTaW0gPSBudWxsO1xuICBpZiAobiA+IDAgJiYgdGFyZ2V0QW1vdW50U2F0cyAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh0YXJnZXRBbW91bnRTYXRzKSAmJiB0YXJnZXRBbW91bnRTYXRzID4gMCkge1xuICAgIHBheVRhcmdldFNpbSA9IHNpbXVsYXRlUDJ3cGtoUGF5bWVudCh0YXJnZXRBbW91bnRTYXRzLCBhbW91bnRzLCBzYXRQZXJWYnl0ZSk7XG4gICAgY2FuUGF5VGFyZ2V0ID0gISFwYXlUYXJnZXRTaW0ub2s7XG4gIH1cblxuICBjb25zdCBmcmFnbWVudGVkVnNTaW5nbGUgPVxuICAgIG4gPiAxICYmXG4gICAgbGFyZ2VzdFV0eG9TYXRzID4gMCAmJlxuICAgIHRhcmdldEFtb3VudFNhdHMgIT0gbnVsbCAmJlxuICAgIE51bWJlci5pc0Zpbml0ZSh0YXJnZXRBbW91bnRTYXRzKSAmJlxuICAgIHRhcmdldEFtb3VudFNhdHMgKyBmZWVTaW5nbGVTcGVuZFNhdHMgPiBsYXJnZXN0VXR4b1NhdHM7XG5cbiAgcmV0dXJuIHtcbiAgICBzYXRQZXJWYnl0ZTogTWF0aC5yb3VuZChzYXRQZXJWYnl0ZSAqIDEwMDApIC8gMTAwMCxcbiAgICBmZWVTaW5nbGVTcGVuZFNhdHMsXG4gICAgZmVlUGVzc2ltaXN0aWNTYXRzLFxuICAgIGZlZVJlc2VydmVTYXRzLFxuICAgIGR1c3RSZWNpcGllbnRTYXRzOiBEVVNUX1AyV1BLSF9TQVRTLFxuICAgIHV0eG9Db3VudDogbixcbiAgICBsYXJnZXN0VXR4b1NhdHMsXG4gICAgbWF4U3BlbmRhYmxlU2F0cyxcbiAgICBtYXhBZmZvcmRhYmxlU2F0cyxcbiAgICBtaW5SZWNpcGllbnRTYXRzOiBEVVNUX1AyV1BLSF9TQVRTLFxuICAgIGNhblBheVRhcmdldCxcbiAgICBwYXlUYXJnZXRTaW0sXG4gICAgZnJhZ21lbnRlZFZzU2luZ2xlLFxuICAgIGhhZFV0eG9MaXN0OiBuID4gMFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2F0UGVyVmJ5dGVGcm9tTWVtcG9vbEluZm8sXG4gIHV0eG9BbW91bnRzRnJvbUxpc3QsXG4gIHNpbXVsYXRlUDJ3cGtoUGF5bWVudCxcbiAgbWF4U3BlbmRhYmxlU2F0c0JpbmFyeVNlYXJjaCxcbiAgY29tcHV0ZUh1YldhbGxldFNwZW5kSGludHMsXG4gIHZzaXplUDJ3cGtoLFxuICBEVVNUX1AyV1BLSF9TQVRTXG59O1xuIl0sIm5hbWVzIjpbIl90b0NvbnN1bWFibGVBcnJheSIsInIiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiVHlwZUVycm9yIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImZyb20iLCJpc0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsImUiLCJ0IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsIl90eXBlb2YiLCJwcm90b3R5cGUiLCJWQl9JTl9QMldQS0giLCJWQl9PVVRfUDJXUEtIIiwiVkJfVFhfQkFTRSIsIkRVU1RfUDJXUEtIX1NBVFMiLCJfcmVxdWlyZSIsInJlcXVpcmUiLCJTQVRTX1BFUl9CVEMiLCJGQVVDRVRfQ0FQX0RFRkFVTFRfU0FUUyIsIk1BWF9JTlBVVFNfUEVTU0lNSVNUSUMiLCJ2c2l6ZVAyd3BraCIsIm51bUlucHV0cyIsIm51bU91dHB1dHMiLCJ2aW4iLCJNYXRoIiwibWF4IiwibWluIiwiZmxvb3IiLCJOdW1iZXIiLCJ2b3V0IiwiY2VpbCIsImZlZVNhdHNGb3JWc2l6ZSIsInZzaXplIiwic2F0UGVyVmJ5dGUiLCJidGNQZXJLYlRvU2F0UGVyVmJ5dGUiLCJidGNQZXJLYiIsImlzRmluaXRlIiwic2F0UGVyVmJ5dGVGcm9tTWVtcG9vbEluZm8iLCJtZW1wb29sSW5mbyIsIm5ldHdvcmsiLCJtaSIsImZyb21NZW1wb29sIiwibWVtcG9vbG1pbmZlZSIsImZyb21SZWxheSIsIm1pbnJlbGF5dHhmZWUiLCJyZWciLCJTdHJpbmciLCJ0b0xvd2VyQ2FzZSIsInV0eG9BbW91bnRzRnJvbUxpc3QiLCJ1dHhvcyIsIm91dCIsIl9pdGVyYXRvciIsIl9zdGVwIiwiYW1vdW50U2F0cyIsImFtb3VudCIsInJvdW5kIiwicHVzaCIsImVyciIsInNvcnQiLCJiIiwic2ltdWxhdGVQMndwa2hQYXltZW50IiwidXR4b1NhdHNEZXNjIiwiRFVTVCIsInNvcnRlZCIsImZpbHRlciIsInBpY2tlZCIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJmZWUiLCJ0b3RhbEluIiwicmVkdWNlIiwiYWZ0ZXIiLCJvayIsImZlZVNhdHMiLCJpbnB1dHNVc2VkIiwiY2hhbmdlU2F0cyIsImVmZkZlZSIsIm1heFNwZW5kYWJsZVNhdHNCaW5hcnlTZWFyY2giLCJiYWxhbmNlU2F0cyIsImFtb3VudHMiLCJ0b3RhbCIsImNhcCIsImxvIiwiaGkiLCJpIiwibWlkIiwic2ltIiwiY29tcHV0ZUh1YldhbGxldFNwZW5kSGludHMiLCJvcHRzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwibGFyZ2VzdFV0eG9TYXRzIiwiZmVlU2luZ2xlU3BlbmRTYXRzIiwicGVzc2ltaXN0aWNJbnB1dHMiLCJmZWVQZXNzaW1pc3RpY1NhdHMiLCJmZWVSZXNlcnZlU2F0cyIsIm1heFNwZW5kYWJsZVNhdHMiLCJmYXVjZXRDYXBTYXRzIiwibWF4QWZmb3JkYWJsZVNhdHMiLCJ0YXJnZXRBbW91bnRTYXRzIiwiY2FuUGF5VGFyZ2V0IiwicGF5VGFyZ2V0U2ltIiwiZnJhZ21lbnRlZFZzU2luZ2xlIiwiZHVzdFJlY2lwaWVudFNhdHMiLCJ1dHhvQ291bnQiLCJtaW5SZWNpcGllbnRTYXRzIiwiaGFkVXR4b0xpc3QiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/bitcoinSpendBounds.js\n\n}')},"./functions/contractGraphDot.js"(module){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction escapeDotLabel(s) {\n return String(s || \'\').replace(/\\\\/g, \'\\\\\\\\\').replace(/"/g, \'\\\\"\').replace(/\\r?\\n/g, \' \').trim();\n}\nfunction shortLabel(s) {\n var left = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;\n var right = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 6;\n var t = String(s || \'\');\n if (t.length <= left + right + 1) return t;\n return "".concat(t.slice(0, left), "\\u2026").concat(t.slice(-right));\n}\n\n/**\n * Build Graphviz DOT for a hub contract (storage or execution), for read-only preview.\n * @param {object} contract\n * @param {object} [hubRun] - optional RunExecutionContract result (adds trace hint)\n * @returns {string}\n */\nfunction contractToDot(contract, hubRun) {\n if (!contract || _typeof(contract) !== \'object\') return \'\';\n var isExecution = contract.type === \'ExecutionContract\' || contract.program && Array.isArray(contract.program.steps);\n if (isExecution) {\n var _lines = [\'digraph G {\', \' rankdir=LR;\', \' node [shape=box style="rounded,filled" fontname="Helvetica"];\', \' edge [fontname="Helvetica" fontsize=10];\'];\n var cid = escapeDotLabel(shortLabel(contract.id || \'contract\', 12, 8));\n _lines.push(" c0 [label=\\"Execution contract\\\\n".concat(cid, "\\" fillcolor=lightcyan];"));\n var steps = contract.program && Array.isArray(contract.program.steps) ? contract.program.steps : [];\n var prev = \'c0\';\n for (var idx = 0; idx < steps.length; idx++) {\n var step = steps[idx] || {};\n var op = step.op || step.fabricType || step.fabricOpcode || "step ".concat(idx + 1);\n var nid = "s".concat(idx);\n var lb = escapeDotLabel(shortLabel(String(op), 24, 0));\n _lines.push(" ".concat(nid, " [label=\\"").concat(lb, "\\" fillcolor=lightyellow shape=ellipse];"));\n _lines.push(" ".concat(prev, " -> ").concat(nid, " [label=\\"step ").concat(idx + 1, "\\"];"));\n prev = nid;\n }\n if (hubRun && Array.isArray(hubRun.trace) && hubRun.trace.length > 0 && steps.length === 0) {\n _lines.push(\' tr [label="(program steps unavailable)\\\\nhub trace present" fillcolor=whitesmoke];\');\n _lines.push(\' c0 -> tr;\');\n }\n _lines.push(\'}\');\n return _lines.join(\'\\n\');\n }\n\n // Storage / other contracts\n var lines = [\'digraph G {\', \' rankdir=LR;\', \' node [shape=box style="rounded,filled" fontname="Helvetica"];\', \' edge [fontname="Helvetica" fontsize=10];\', \' contract [label="Storage contract" fillcolor=thistle];\'];\n if (contract.document) {\n var d = escapeDotLabel(shortLabel(String(contract.document), 14, 8));\n lines.push(" doc [label=\\"Document\\\\n".concat(d, "\\" fillcolor=lightyellow];"));\n lines.push(\' contract -> doc [label="covers"];\');\n }\n if (contract.invoiceAddress) {\n var ia = escapeDotLabel(shortLabel(String(contract.invoiceAddress), 14, 8));\n lines.push(" inv [label=\\"Distribute invoice\\\\n".concat(ia, "\\" fillcolor=lightcyan];"));\n lines.push(\' inv -> contract [label="expected payin"];\');\n }\n if (contract.txid) {\n var tx = escapeDotLabel(shortLabel(String(contract.txid), 12, 8));\n lines.push(" pay [label=\\"L1 payment\\\\n".concat(tx, "\\" fillcolor=lightgreen];"));\n lines.push(\' pay -> contract [label="bonds"];\');\n if (contract.invoiceAddress) {\n lines.push(\' inv -> pay [style=dashed label="tx"];\');\n }\n }\n if (contract.desiredCopies != null && Number(contract.desiredCopies) > 1) {\n lines.push(" meta [label=\\"Replicas: ".concat(escapeDotLabel(String(contract.desiredCopies)), "\\" shape=note fillcolor=lightgrey];"));\n lines.push(\' contract -> meta [style=dashed];\');\n }\n lines.push(\'}\');\n return lines.join(\'\\n\');\n}\nmodule.exports = {\n contractToDot: contractToDot,\n escapeDotLabel: escapeDotLabel,\n shortLabel: shortLabel\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QVEsQ0FBQzRCLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUN4RXBCLEtBQUssQ0FBQ0csSUFBSSw4QkFBQWQsTUFBQSxDQUE2QlosY0FBYyxDQUFDRSxNQUFNLENBQUNhLFFBQVEsQ0FBQzRCLGFBQWEsQ0FBQyxDQUFDLHdDQUFvQyxDQUFDO0lBQzFIcEIsS0FBSyxDQUFDRyxJQUFJLENBQUMsb0NBQW9DLENBQUM7RUFDbEQ7RUFDQUgsS0FBSyxDQUFDRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ2YsT0FBT0gsS0FBSyxDQUFDYSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pCO0FBRUFTLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQUVoQyxhQUFhLEVBQWJBLGFBQWE7RUFBRWQsY0FBYyxFQUFkQSxjQUFjO0VBQUVLLFVBQVUsRUFBVkE7QUFBVyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvY29udHJhY3RHcmFwaERvdC5qcz82ZjM1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gZXNjYXBlRG90TGFiZWwgKHMpIHtcbiAgcmV0dXJuIFN0cmluZyhzIHx8ICcnKVxuICAgIC5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpXG4gICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgIC5yZXBsYWNlKC9cXHI/XFxuL2csICcgJylcbiAgICAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBzaG9ydExhYmVsIChzLCBsZWZ0ID0gMTAsIHJpZ2h0ID0gNikge1xuICBjb25zdCB0ID0gU3RyaW5nKHMgfHwgJycpO1xuICBpZiAodC5sZW5ndGggPD0gbGVmdCArIHJpZ2h0ICsgMSkgcmV0dXJuIHQ7XG4gIHJldHVybiBgJHt0LnNsaWNlKDAsIGxlZnQpfeKApiR7dC5zbGljZSgtcmlnaHQpfWA7XG59XG5cbi8qKlxuICogQnVpbGQgR3JhcGh2aXogRE9UIGZvciBhIGh1YiBjb250cmFjdCAoc3RvcmFnZSBvciBleGVjdXRpb24pLCBmb3IgcmVhZC1vbmx5IHByZXZpZXcuXG4gKiBAcGFyYW0ge29iamVjdH0gY29udHJhY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBbaHViUnVuXSAtIG9wdGlvbmFsIFJ1bkV4ZWN1dGlvbkNvbnRyYWN0IHJlc3VsdCAoYWRkcyB0cmFjZSBoaW50KVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29udHJhY3RUb0RvdCAoY29udHJhY3QsIGh1YlJ1bikge1xuICBpZiAoIWNvbnRyYWN0IHx8IHR5cGVvZiBjb250cmFjdCAhPT0gJ29iamVjdCcpIHJldHVybiAnJztcblxuICBjb25zdCBpc0V4ZWN1dGlvbiA9IGNvbnRyYWN0LnR5cGUgPT09ICdFeGVjdXRpb25Db250cmFjdCcgfHxcbiAgICAoY29udHJhY3QucHJvZ3JhbSAmJiBBcnJheS5pc0FycmF5KGNvbnRyYWN0LnByb2dyYW0uc3RlcHMpKTtcblxuICBpZiAoaXNFeGVjdXRpb24pIHtcbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgICdkaWdyYXBoIEcgeycsXG4gICAgICAnICByYW5rZGlyPUxSOycsXG4gICAgICAnICBub2RlIFtzaGFwZT1ib3ggc3R5bGU9XCJyb3VuZGVkLGZpbGxlZFwiIGZvbnRuYW1lPVwiSGVsdmV0aWNhXCJdOycsXG4gICAgICAnICBlZGdlIFtmb250bmFtZT1cIkhlbHZldGljYVwiIGZvbnRzaXplPTEwXTsnXG4gICAgXTtcbiAgICBjb25zdCBjaWQgPSBlc2NhcGVEb3RMYWJlbChzaG9ydExhYmVsKGNvbnRyYWN0LmlkIHx8ICdjb250cmFjdCcsIDEyLCA4KSk7XG4gICAgbGluZXMucHVzaChgICBjMCBbbGFiZWw9XCJFeGVjdXRpb24gY29udHJhY3RcXFxcbiR7Y2lkfVwiIGZpbGxjb2xvcj1saWdodGN5YW5dO2ApO1xuXG4gICAgY29uc3Qgc3RlcHMgPSBjb250cmFjdC5wcm9ncmFtICYmIEFycmF5LmlzQXJyYXkoY29udHJhY3QucHJvZ3JhbS5zdGVwcykgPyBjb250cmFjdC5wcm9ncmFtLnN0ZXBzIDogW107XG4gICAgbGV0IHByZXYgPSAnYzAnO1xuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHN0ZXBzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSBzdGVwc1tpZHhdIHx8IHt9O1xuICAgICAgY29uc3Qgb3AgPSBzdGVwLm9wIHx8IHN0ZXAuZmFicmljVHlwZSB8fCBzdGVwLmZhYnJpY09wY29kZSB8fCBgc3RlcCAke2lkeCArIDF9YDtcbiAgICAgIGNvbnN0IG5pZCA9IGBzJHtpZHh9YDtcbiAgICAgIGNvbnN0IGxiID0gZXNjYXBlRG90TGFiZWwoc2hvcnRMYWJlbChTdHJpbmcob3ApLCAyNCwgMCkpO1xuICAgICAgbGluZXMucHVzaChgICAke25pZH0gW2xhYmVsPVwiJHtsYn1cIiBmaWxsY29sb3I9bGlnaHR5ZWxsb3cgc2hhcGU9ZWxsaXBzZV07YCk7XG4gICAgICBsaW5lcy5wdXNoKGAgICR7cHJldn0gLT4gJHtuaWR9IFtsYWJlbD1cInN0ZXAgJHtpZHggKyAxfVwiXTtgKTtcbiAgICAgIHByZXYgPSBuaWQ7XG4gICAgfVxuXG4gICAgaWYgKGh1YlJ1biAmJiBBcnJheS5pc0FycmF5KGh1YlJ1bi50cmFjZSkgJiYgaHViUnVuLnRyYWNlLmxlbmd0aCA+IDAgJiYgc3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBsaW5lcy5wdXNoKCcgIHRyIFtsYWJlbD1cIihwcm9ncmFtIHN0ZXBzIHVuYXZhaWxhYmxlKVxcXFxuaHViIHRyYWNlIHByZXNlbnRcIiBmaWxsY29sb3I9d2hpdGVzbW9rZV07Jyk7XG4gICAgICBsaW5lcy5wdXNoKCcgIGMwIC0+IHRyOycpO1xuICAgIH1cblxuICAgIGxpbmVzLnB1c2goJ30nKTtcbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG4gIH1cblxuICAvLyBTdG9yYWdlIC8gb3RoZXIgY29udHJhY3RzXG4gIGNvbnN0IGxpbmVzID0gW1xuICAgICdkaWdyYXBoIEcgeycsXG4gICAgJyAgcmFua2Rpcj1MUjsnLFxuICAgICcgIG5vZGUgW3NoYXBlPWJveCBzdHlsZT1cInJvdW5kZWQsZmlsbGVkXCIgZm9udG5hbWU9XCJIZWx2ZXRpY2FcIl07JyxcbiAgICAnICBlZGdlIFtmb250bmFtZT1cIkhlbHZldGljYVwiIGZvbnRzaXplPTEwXTsnLFxuICAgICcgIGNvbnRyYWN0IFtsYWJlbD1cIlN0b3JhZ2UgY29udHJhY3RcIiBmaWxsY29sb3I9dGhpc3RsZV07J1xuICBdO1xuICBpZiAoY29udHJhY3QuZG9jdW1lbnQpIHtcbiAgICBjb25zdCBkID0gZXNjYXBlRG90TGFiZWwoc2hvcnRMYWJlbChTdHJpbmcoY29udHJhY3QuZG9jdW1lbnQpLCAxNCwgOCkpO1xuICAgIGxpbmVzLnB1c2goYCAgZG9jIFtsYWJlbD1cIkRvY3VtZW50XFxcXG4ke2R9XCIgZmlsbGNvbG9yPWxpZ2h0eWVsbG93XTtgKTtcbiAgICBsaW5lcy5wdXNoKCcgIGNvbnRyYWN0IC0+IGRvYyBbbGFiZWw9XCJjb3ZlcnNcIl07Jyk7XG4gIH1cbiAgaWYgKGNvbnRyYWN0Lmludm9pY2VBZGRyZXNzKSB7XG4gICAgY29uc3QgaWEgPSBlc2NhcGVEb3RMYWJlbChzaG9ydExhYmVsKFN0cmluZyhjb250cmFjdC5pbnZvaWNlQWRkcmVzcyksIDE0LCA4KSk7XG4gICAgbGluZXMucHVzaChgICBpbnYgW2xhYmVsPVwiRGlzdHJpYnV0ZSBpbnZvaWNlXFxcXG4ke2lhfVwiIGZpbGxjb2xvcj1saWdodGN5YW5dO2ApO1xuICAgIGxpbmVzLnB1c2goJyAgaW52IC0+IGNvbnRyYWN0IFtsYWJlbD1cImV4cGVjdGVkIHBheWluXCJdOycpO1xuICB9XG4gIGlmIChjb250cmFjdC50eGlkKSB7XG4gICAgY29uc3QgdHggPSBlc2NhcGVEb3RMYWJlbChzaG9ydExhYmVsKFN0cmluZyhjb250cmFjdC50eGlkKSwgMTIsIDgpKTtcbiAgICBsaW5lcy5wdXNoKGAgIHBheSBbbGFiZWw9XCJMMSBwYXltZW50XFxcXG4ke3R4fVwiIGZpbGxjb2xvcj1saWdodGdyZWVuXTtgKTtcbiAgICBsaW5lcy5wdXNoKCcgIHBheSAtPiBjb250cmFjdCBbbGFiZWw9XCJib25kc1wiXTsnKTtcbiAgICBpZiAoY29udHJhY3QuaW52b2ljZUFkZHJlc3MpIHtcbiAgICAgIGxpbmVzLnB1c2goJyAgaW52IC0+IHBheSBbc3R5bGU9ZGFzaGVkIGxhYmVsPVwidHhcIl07Jyk7XG4gICAgfVxuICB9XG4gIGlmIChjb250cmFjdC5kZXNpcmVkQ29waWVzICE9IG51bGwgJiYgTnVtYmVyKGNvbnRyYWN0LmRlc2lyZWRDb3BpZXMpID4gMSkge1xuICAgIGxpbmVzLnB1c2goYCAgbWV0YSBbbGFiZWw9XCJSZXBsaWNhczogJHtlc2NhcGVEb3RMYWJlbChTdHJpbmcoY29udHJhY3QuZGVzaXJlZENvcGllcykpfVwiIHNoYXBlPW5vdGUgZmlsbGNvbG9yPWxpZ2h0Z3JleV07YCk7XG4gICAgbGluZXMucHVzaCgnICBjb250cmFjdCAtPiBtZXRhIFtzdHlsZT1kYXNoZWRdOycpO1xuICB9XG4gIGxpbmVzLnB1c2goJ30nKTtcbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgY29udHJhY3RUb0RvdCwgZXNjYXBlRG90TGFiZWwsIHNob3J0TGFiZWwgfTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJlc2NhcGVEb3RMYWJlbCIsInMiLCJTdHJpbmciLCJyZXBsYWNlIiwidHJpbSIsInNob3J0TGFiZWwiLCJsZWZ0IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwicmlnaHQiLCJ0IiwiY29uY2F0Iiwic2xpY2UiLCJjb250cmFjdFRvRG90IiwiY29udHJhY3QiLCJodWJSdW4iLCJpc0V4ZWN1dGlvbiIsInR5cGUiLCJwcm9ncmFtIiwiQXJyYXkiLCJpc0FycmF5Iiwic3RlcHMiLCJsaW5lcyIsImNpZCIsImlkIiwicHVzaCIsInByZXYiLCJpZHgiLCJzdGVwIiwib3AiLCJmYWJyaWNUeXBlIiwiZmFicmljT3Bjb2RlIiwibmlkIiwibGIiLCJ0cmFjZSIsImpvaW4iLCJkb2N1bWVudCIsImQiLCJpbnZvaWNlQWRkcmVzcyIsImlhIiwidHhpZCIsInR4IiwiZGVzaXJlZENvcGllcyIsIk51bWJlciIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/contractGraphDot.js\n\n}')},"./functions/createTimeoutPromise.js"(module){eval('{module.exports = function createTimeoutPromise(timeoutDuration) {\n var errorMessage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "Fetch timed out";\n return new Promise(function (_, reject) {\n setTimeout(function () {\n reject(new Error(errorMessage));\n }, timeoutDuration);\n });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvY3JlYXRlVGltZW91dFByb21pc2UuanMiLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiY3JlYXRlVGltZW91dFByb21pc2UiLCJ0aW1lb3V0RHVyYXRpb24iLCJlcnJvck1lc3NhZ2UiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJQcm9taXNlIiwiXyIsInJlamVjdCIsInNldFRpbWVvdXQiLCJFcnJvciJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvY3JlYXRlVGltZW91dFByb21pc2UuanM/YWU4MiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZVRpbWVvdXRQcm9taXNlKHRpbWVvdXREdXJhdGlvbiwgZXJyb3JNZXNzYWdlID0gXCJGZXRjaCB0aW1lZCBvdXRcIikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpKTtcbiAgICB9LCB0aW1lb3V0RHVyYXRpb24pO1xuICB9KTtcbn0iXSwibWFwcGluZ3MiOiJBQUFBQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxTQUFTQyxvQkFBb0JBLENBQUNDLGVBQWUsRUFBb0M7RUFBQSxJQUFsQ0MsWUFBWSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxpQkFBaUI7RUFDOUYsT0FBTyxJQUFJRyxPQUFPLENBQUMsVUFBQ0MsQ0FBQyxFQUFFQyxNQUFNLEVBQUs7SUFDaENDLFVBQVUsQ0FBQyxZQUFNO01BQ2ZELE1BQU0sQ0FBQyxJQUFJRSxLQUFLLENBQUNSLFlBQVksQ0FBQyxDQUFDO0lBQ2pDLENBQUMsRUFBRUQsZUFBZSxDQUFDO0VBQ3JCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=\n//# sourceURL=webpack-internal:///./functions/createTimeoutPromise.js\n\n}')},"./functions/crowdfundingTaproot.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * Taproot (BIP 341/342) on-chain crowdfunding vault.\n *\n * Deposits share one P2TR address. Tapscript encodes:\n * - Payout path: 8-byte LE commitments to goalSats + minContributionSats (dropped), then\n * Schnorr 2-of-2 (beneficiary + arbiter x-only keys in script as k0,k1 = sorted pair). The beneficiary\n * cannot move funds alone; the arbiter co-signs only when aggregate confirmed value ≥ goal (policy).\n * When finalizing PSBT witness stacks, signature order follows BIP342 / bitcoinjs tapscript finalizer:\n * pubkey **position in the leaf script, descending** (later OP_CHECKSIG / CHECKSIGADD pubkey first), not\n * lexicographic x-only order.\n * - Refund path: absolute CLTV + arbiter-only signature (sweep after deadline).\n *\n * Bitcoin Script cannot sum balances across separate UTXOs; the goal is enforced by tapleaf\n * commitments binding campaign parameters to the address, plus arbiter policy on payout PSBTs.\n * Min per donation is enforced in Hub APIs when recording UTXOs and is committed in the payout leaf.\n */\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar bitcoin = __webpack_require__(/*! bitcoinjs-lib */ \"./node_modules/bitcoinjs-lib/src/index.js\");\nvar ecc = __webpack_require__(/*! @fabric/core/types/ecc */ \"./node_modules/@fabric/core/types/ecc.js\");\nvar bip341 = __webpack_require__(/*! bitcoinjs-lib/src/payments/bip341 */ \"./node_modules/bitcoinjs-lib/src/payments/bip341.js\");\nvar psbtutils = __webpack_require__(/*! bitcoinjs-lib/src/psbt/psbtutils */ \"./node_modules/bitcoinjs-lib/src/psbt/psbtutils.js\");\nvar ecpairMod = __webpack_require__(/*! ecpair */ \"./node_modules/ecpair/src/index.js\");\nvar ECPairFactory = typeof ecpairMod === 'function' ? ecpairMod : ecpairMod[\"default\"] || ecpairMod.ECPairFactory;\nvar payments = bitcoin.payments,\n networks = bitcoin.networks,\n script = bitcoin.script,\n Psbt = bitcoin.Psbt;\nbitcoin.initEccLib(ecc);\nvar ecpair = ECPairFactory(ecc);\n\n/** BIP341 NUMS x-only internal key (script-path spends only). */\nvar TAPROOT_INTERNAL_NUMS = Buffer.from('50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0', 'hex');\nfunction networkForFabricName() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var n = String(name || '').toLowerCase();\n if (n === 'regtest' || n === 'test') return networks.regtest;\n if (n === 'testnet' || n === 'signet') return networks.testnet;\n return networks.bitcoin;\n}\nfunction toXOnly(pubkey33) {\n if (!Buffer.isBuffer(pubkey33) || pubkey33.length !== 33) return null;\n if (pubkey33[0] !== 0x02 && pubkey33[0] !== 0x03) return null;\n return pubkey33.subarray(1, 33);\n}\nfunction u64LePush(n) {\n var num = Number(n);\n if (!Number.isFinite(num) || num < 0 || num > Number.MAX_SAFE_INTEGER) {\n throw new Error('u64LePush: invalid uint53 value.');\n }\n var b = Buffer.allocUnsafe(8);\n b.writeBigUInt64LE(BigInt(Math.floor(num)), 0);\n return b;\n}\nfunction parseCompressedPubkey33(hex) {\n var s = String(hex || '').trim().toLowerCase();\n if (!/^(02|03)[0-9a-f]{64}$/i.test(s)) {\n throw new Error('Invalid compressed secp256k1 pubkey (expect 33-byte hex 02/03…).');\n }\n return Buffer.from(s, 'hex');\n}\nfunction sortedXOnlyPair(arbiterX, beneficiaryX) {\n var a = Buffer.isBuffer(arbiterX) ? arbiterX : Buffer.from(arbiterX);\n var b = Buffer.isBuffer(beneficiaryX) ? beneficiaryX : Buffer.from(beneficiaryX);\n if (a.length !== 32 || b.length !== 32) throw new Error('sortedXOnlyPair expects 32-byte x-only keys.');\n return a.compare(b) <= 0 ? [a, b] : [b, a];\n}\n\n/**\n * @param {Object} opts\n * @param {string} opts.networkName\n * @param {Buffer} opts.beneficiaryPubkeyCompressed\n * @param {Buffer} opts.arbiterPubkeyCompressed\n * @param {number} opts.goalSats\n * @param {number} opts.minContributionSats\n * @param {number} opts.refundLocktimeHeight - absolute block height for refund leaf\n */\nfunction buildCrowdfundP2tr() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var networkName = opts.networkName,\n beneficiaryPubkeyCompressed = opts.beneficiaryPubkeyCompressed,\n arbiterPubkeyCompressed = opts.arbiterPubkeyCompressed,\n goalSats = opts.goalSats,\n minContributionSats = opts.minContributionSats,\n refundLocktimeHeight = opts.refundLocktimeHeight;\n var benX = toXOnly(beneficiaryPubkeyCompressed);\n var arbX = toXOnly(arbiterPubkeyCompressed);\n if (!benX || !arbX) throw new Error('Invalid beneficiary or arbiter compressed pubkey.');\n var goal = Math.round(Number(goalSats));\n var minC = Math.round(Number(minContributionSats));\n if (!Number.isFinite(goal) || goal < 1) throw new Error('goalSats must be a positive integer.');\n if (!Number.isFinite(minC) || minC < 1) throw new Error('minContributionSats must be a positive integer.');\n if (minC > goal) throw new Error('minContributionSats cannot exceed goalSats.');\n var lock = Number(refundLocktimeHeight);\n if (!Number.isFinite(lock) || lock < 1 || lock >= 500000000) {\n throw new Error('refundLocktimeHeight must be a valid block height (< 500000000).');\n }\n var _sortedXOnlyPair = sortedXOnlyPair(arbX, benX),\n _sortedXOnlyPair2 = _slicedToArray(_sortedXOnlyPair, 2),\n k0 = _sortedXOnlyPair2[0],\n k1 = _sortedXOnlyPair2[1];\n var goalPush = u64LePush(goal);\n var minPush = u64LePush(minC);\n var payoutScript = script.compile([goalPush, script.OPS.OP_DROP, minPush, script.OPS.OP_DROP, k0, script.OPS.OP_CHECKSIG, k1, script.OPS.OP_CHECKSIGADD, script.number.encode(2), script.OPS.OP_NUMEQUAL]);\n var refundScript = script.compile([script.number.encode(lock), script.OPS.OP_CHECKLOCKTIMEVERIFY, script.OPS.OP_DROP, arbX, script.OPS.OP_CHECKSIG]);\n var scriptTree = [{\n output: payoutScript\n }, {\n output: refundScript\n }];\n var pay = payments.p2tr({\n internalPubkey: TAPROOT_INTERNAL_NUMS,\n scriptTree: scriptTree,\n network: networkForFabricName(networkName)\n });\n if (!pay.address || !pay.output) throw new Error('p2tr() did not produce address/output.');\n return {\n address: pay.address,\n output: pay.output,\n payoutScript: payoutScript,\n refundScript: refundScript,\n goalSats: goal,\n minContributionSats: minC,\n refundLocktimeHeight: lock,\n sortedXOnlyHex: [k0.toString('hex'), k1.toString('hex')],\n arbiterXOnlyHex: arbX.toString('hex'),\n beneficiaryXOnlyHex: benX.toString('hex')\n };\n}\nfunction buildTapLeafControlBlock(payoutScript, refundScript, leafScript) {\n var payBuf = Buffer.isBuffer(payoutScript) ? payoutScript : Buffer.from(String(payoutScript), 'hex');\n var refBuf = Buffer.isBuffer(refundScript) ? refundScript : Buffer.from(String(refundScript), 'hex');\n var leafBuf = Buffer.isBuffer(leafScript) ? leafScript : Buffer.from(String(leafScript), 'hex');\n var scriptTree = [{\n output: payBuf\n }, {\n output: refBuf\n }];\n var hashTree = bip341.toHashTree(scriptTree);\n var leafVersion = bip341.LEAF_VERSION_TAPSCRIPT;\n var leafHash = bip341.tapleafHash({\n output: leafBuf,\n version: leafVersion\n });\n var path = bip341.findScriptPath(hashTree, leafHash);\n if (path === undefined) throw new Error('Leaf script not found in crowdfund tap tree.');\n var outputKey = bip341.tweakKey(TAPROOT_INTERNAL_NUMS, hashTree.hash);\n if (!outputKey) throw new Error('Taproot tweak failed.');\n return Buffer.concat([Buffer.from([leafVersion | outputKey.parity]), TAPROOT_INTERNAL_NUMS].concat(_toConsumableArray(path)));\n}\nfunction findP2trVoutForAddress(tx, paymentAddress, network) {\n var addr = String(paymentAddress || '').trim();\n if (!addr) return -1;\n var want = bitcoin.address.toOutputScript(addr, network);\n for (var i = 0; i < tx.outs.length; i++) {\n var sc = tx.outs[i].script;\n if (Buffer.isBuffer(sc) && sc.equals(want)) return i;\n }\n return -1;\n}\n\n/**\n * Unsigned PSBT spending N crowdfund UTXOs (same address) via payout tapscript; enforces sum ≥ goalSats.\n * @param {Object} opts\n * @param {Array<{ txHex: string, vout?: number }>} opts.inputs - vout optional if only one P2TR output per tx\n * @param {string} opts.paymentAddress\n * @param {Buffer|string} opts.payoutScript\n * @param {Buffer|string} opts.refundScript\n * @param {string} opts.destinationAddress\n * @param {number} opts.feeSats\n * @param {number} opts.goalSats\n */\nfunction prepareCrowdfundPayoutPsbt() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var networkName = opts.networkName,\n inputs = opts.inputs,\n paymentAddress = opts.paymentAddress,\n payoutScript = opts.payoutScript,\n refundScript = opts.refundScript,\n destinationAddress = opts.destinationAddress,\n feeSats = opts.feeSats,\n goalSats = opts.goalSats;\n var network = networkForFabricName(networkName);\n var payBuf = Buffer.isBuffer(payoutScript) ? payoutScript : Buffer.from(String(payoutScript), 'hex');\n var refBuf = Buffer.isBuffer(refundScript) ? refundScript : Buffer.from(String(refundScript), 'hex');\n var dest = String(destinationAddress || '').trim();\n if (!dest) throw new Error('destinationAddress is required.');\n var fee = Math.max(1, Math.round(Number(feeSats || 1000)));\n var goal = Math.round(Number(goalSats || 0));\n if (!Number.isFinite(goal) || goal < 1) throw new Error('goalSats is required.');\n var list = Array.isArray(inputs) ? inputs : [];\n if (list.length === 0) throw new Error('At least one funding input is required.');\n var totalIn = 0;\n var rows = [];\n var _iterator = _createForOfIteratorHelper(list),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var row = _step.value;\n var tx = bitcoin.Transaction.fromHex(String(row.txHex || '').trim());\n var vout = row.vout;\n if (vout == null) {\n vout = findP2trVoutForAddress(tx, paymentAddress, network);\n } else {\n vout = Number(vout);\n }\n if (vout < 0 || vout >= tx.outs.length) throw new Error('Invalid vout for crowdfund input.');\n var out = tx.outs[vout];\n var scriptPub = out.script;\n var wantScript = bitcoin.address.toOutputScript(String(paymentAddress).trim(), network);\n if (!Buffer.isBuffer(scriptPub) || !scriptPub.equals(wantScript)) {\n throw new Error('Input does not pay the crowdfund P2TR address.');\n }\n var inputSats = typeof out.value === 'bigint' ? Number(out.value) : Number(out.value);\n if (!Number.isFinite(inputSats) || inputSats <= 0) throw new Error('Invalid input value.');\n totalIn += inputSats;\n rows.push({\n tx: tx,\n vout: vout,\n out: out,\n inputSats: inputSats\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n if (totalIn < goal) {\n throw new Error(\"Confirmed inputs sum \".concat(totalIn, \" sats is below campaign goal \").concat(goal, \" sats.\"));\n }\n var destSats = totalIn - fee;\n if (destSats < 546) throw new Error('Amount after fee is below dust; increase funding or lower fee.');\n var psbt = new Psbt({\n network: network\n });\n var controlBlock = buildTapLeafControlBlock(payBuf, refBuf, payBuf);\n for (var _i = 0, _rows = rows; _i < _rows.length; _i++) {\n var r = _rows[_i];\n psbt.addInput({\n hash: r.tx.getId(),\n index: r.vout,\n witnessUtxo: {\n script: r.out.script,\n value: r.inputSats\n },\n tapInternalKey: TAPROOT_INTERNAL_NUMS,\n tapLeafScript: [{\n leafVersion: bip341.LEAF_VERSION_TAPSCRIPT,\n script: payBuf,\n controlBlock: controlBlock\n }]\n });\n }\n psbt.addOutput({\n address: dest,\n value: destSats\n });\n return {\n psbt: psbt,\n psbtBase64: psbt.toBase64(),\n totalInputSats: totalIn,\n destSats: destSats,\n feeSats: fee,\n inputCount: rows.length\n };\n}\n\n/**\n * Unsigned PSBT for refund path (arbiter only). Sets nLocktime = refundLocktimeHeight; CSV sequence on inputs.\n */\nfunction prepareCrowdfundRefundPsbt() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var networkName = opts.networkName,\n fundedTxHex = opts.fundedTxHex,\n paymentAddress = opts.paymentAddress,\n payoutScript = opts.payoutScript,\n refundScript = opts.refundScript,\n refundLocktimeHeight = opts.refundLocktimeHeight,\n destinationAddress = opts.destinationAddress,\n feeSats = opts.feeSats;\n var network = networkForFabricName(networkName);\n var tx = bitcoin.Transaction.fromHex(String(fundedTxHex || '').trim());\n var vout = findP2trVoutForAddress(tx, paymentAddress, network);\n if (vout < 0) throw new Error('Funding tx has no P2TR output matching paymentAddress.');\n var out = tx.outs[vout];\n var inputSats = typeof out.value === 'bigint' ? Number(out.value) : Number(out.value);\n if (!Number.isFinite(inputSats) || inputSats <= 0) throw new Error('Invalid crowdfund output value.');\n var fee = Math.max(1, Math.round(Number(feeSats || 1000)));\n var destSats = inputSats - fee;\n if (destSats < 546) throw new Error('Amount after fee is below dust.');\n var payBuf = Buffer.isBuffer(payoutScript) ? payoutScript : Buffer.from(String(payoutScript), 'hex');\n var refBuf = Buffer.isBuffer(refundScript) ? refundScript : Buffer.from(String(refundScript), 'hex');\n var lock = Number(refundLocktimeHeight);\n if (!Number.isFinite(lock) || lock < 1) throw new Error('refundLocktimeHeight is required.');\n var controlBlock = buildTapLeafControlBlock(payBuf, refBuf, refBuf);\n var psbt = new Psbt({\n network: network\n });\n psbt.setLocktime(lock);\n psbt.addInput({\n hash: tx.getId(),\n index: vout,\n sequence: 0xfffffffe,\n witnessUtxo: {\n script: out.script,\n value: inputSats\n },\n tapInternalKey: TAPROOT_INTERNAL_NUMS,\n tapLeafScript: [{\n leafVersion: bip341.LEAF_VERSION_TAPSCRIPT,\n script: refBuf,\n controlBlock: controlBlock\n }]\n });\n psbt.addOutput({\n address: String(destinationAddress || '').trim(),\n value: destSats\n });\n return {\n psbt: psbt,\n psbtBase64: psbt.toBase64(),\n inputSats: inputSats,\n destSats: destSats,\n feeSats: fee,\n locktime: lock\n };\n}\nfunction signAllInputsWithKey(psbt, priv32) {\n var priv = Buffer.isBuffer(priv32) ? priv32 : Buffer.from(priv32);\n if (priv.length !== 32) throw new Error('Private key must be 32 bytes.');\n var kp = ecpair.fromPrivateKey(priv);\n for (var i = 0; i < psbt.inputCount; i++) {\n psbt.signInput(i, kp);\n }\n}\n\n/**\n * Finalize payout inputs (2-of-2 tapscript with leading DROP commitments).\n * Witness signature order must match bitcoinjs tapScriptFinalizer / BIP342: sort by\n * pubkey position in the leaf script descending (later CHECKSIG pair first in the witness stack).\n */\nfunction finalizeCrowdfundPayoutPsbt(psbt) {\n for (var i = 0; i < psbt.inputCount; i++) {\n psbt.finalizeInput(i, function (_inputIndex, input) {\n var leaf = (input.tapLeafScript || [])[0];\n if (!leaf || !leaf.script || !leaf.controlBlock) {\n throw new Error('Missing tapLeafScript on PSBT input.');\n }\n var lh = bip341.tapleafHash({\n output: leaf.script,\n version: leaf.leafVersion\n });\n var sigs = (input.tapScriptSig || []).filter(function (t) {\n return t.leafHash.equals(lh);\n });\n if (sigs.length < 2) throw new Error('Need two tapscript signatures for crowdfund payout leaf.');\n var ordered = sigs.map(function (tss) {\n var fake33 = Buffer.concat([Buffer.from([0x02]), tss.pubkey]);\n var positionInScript = psbtutils.pubkeyPositionInScript(fake33, leaf.script);\n if (positionInScript < 0) {\n throw new Error('Crowdfund tapscript pubkey not found in leaf script.');\n }\n return {\n tss: tss,\n positionInScript: positionInScript\n };\n }).sort(function (a, b) {\n return b.positionInScript - a.positionInScript;\n });\n var witness = [];\n var _iterator2 = _createForOfIteratorHelper(ordered),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var tss = _step2.value.tss;\n var sig = tss.signature.length >= 64 ? tss.signature.subarray(0, 64) : tss.signature;\n witness.push(sig);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n witness.push(leaf.script, leaf.controlBlock);\n return {\n finalScriptWitness: psbtutils.witnessStackToScriptWitness(witness)\n };\n });\n }\n}\nfunction finalizeCrowdfundRefundPsbt(psbt) {\n psbt.finalizeInput(0, function (_inputIndex, input) {\n var leaf = (input.tapLeafScript || [])[0];\n if (!leaf || !leaf.script || !leaf.controlBlock) {\n throw new Error('Missing tapLeafScript on refund input.');\n }\n var lh = bip341.tapleafHash({\n output: leaf.script,\n version: leaf.leafVersion\n });\n var tss = (input.tapScriptSig || []).find(function (t) {\n return t.leafHash.equals(lh);\n });\n if (!tss) throw new Error('Missing tapscript signature for refund leaf.');\n var sig = tss.signature.length >= 64 ? tss.signature.subarray(0, 64) : tss.signature;\n var witness = [sig, leaf.script, leaf.controlBlock];\n return {\n finalScriptWitness: psbtutils.witnessStackToScriptWitness(witness)\n };\n });\n}\nfunction extractPsbtTransaction(psbt) {\n var extracted = psbt.extractTransaction();\n return {\n txHex: extracted.toHex(),\n txid: extracted.getId()\n };\n}\nmodule.exports = {\n TAPROOT_INTERNAL_NUMS: TAPROOT_INTERNAL_NUMS,\n networkForFabricName: networkForFabricName,\n parseCompressedPubkey33: parseCompressedPubkey33,\n buildCrowdfundP2tr: buildCrowdfundP2tr,\n buildTapLeafControlBlock: buildTapLeafControlBlock,\n findP2trVoutForAddress: findP2trVoutForAddress,\n prepareCrowdfundPayoutPsbt: prepareCrowdfundPayoutPsbt,\n prepareCrowdfundRefundPsbt: prepareCrowdfundRefundPsbt,\n signAllInputsWithKey: signAllInputsWithKey,\n finalizeCrowdfundPayoutPsbt: finalizeCrowdfundPayoutPsbt,\n finalizeCrowdfundRefundPsbt: finalizeCrowdfundRefundPsbt,\n extractPsbtTransaction: extractPsbtTransaction,\n u64LePush: u64LePush,\n sortedXOnlyPair: sortedXOnlyPair\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEdBQUcsQ0FBQ0csR0FBRyxFQUFFaEIsSUFBSSxDQUFDOUosTUFBTSxFQUFFOEosSUFBSSxDQUFDN0IsWUFBWSxDQUFDO0lBQ3JELE9BQU87TUFBRStDLGtCQUFrQixFQUFFckwsU0FBUyxDQUFDc0wsMkJBQTJCLENBQUNOLE9BQU87SUFBRSxDQUFDO0VBQy9FLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU1Msc0JBQXNCQSxDQUFFcEQsSUFBSSxFQUFFO0VBQ3JDLElBQU1xRCxTQUFTLEdBQUdyRCxJQUFJLENBQUNzRCxrQkFBa0IsQ0FBQyxDQUFDO0VBQzNDLE9BQU87SUFBRTlELEtBQUssRUFBRTZELFNBQVMsQ0FBQ0UsS0FBSyxDQUFDLENBQUM7SUFBRUMsSUFBSSxFQUFFSCxTQUFTLENBQUNoRCxLQUFLLENBQUM7RUFBRSxDQUFDO0FBQzlEO0FBRUFvRCxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmdEwscUJBQXFCLEVBQXJCQSxxQkFBcUI7RUFDckJFLG9CQUFvQixFQUFwQkEsb0JBQW9CO0VBQ3BCdUIsdUJBQXVCLEVBQXZCQSx1QkFBdUI7RUFDdkJPLGtCQUFrQixFQUFsQkEsa0JBQWtCO0VBQ2xCeUMsd0JBQXdCLEVBQXhCQSx3QkFBd0I7RUFDeEJtQixzQkFBc0IsRUFBdEJBLHNCQUFzQjtFQUN0QlMsMEJBQTBCLEVBQTFCQSwwQkFBMEI7RUFDMUJzQywwQkFBMEIsRUFBMUJBLDBCQUEwQjtFQUMxQkssb0JBQW9CLEVBQXBCQSxvQkFBb0I7RUFDcEJNLDJCQUEyQixFQUEzQkEsMkJBQTJCO0VBQzNCd0IsMkJBQTJCLEVBQTNCQSwyQkFBMkI7RUFDM0JFLHNCQUFzQixFQUF0QkEsc0JBQXNCO0VBQ3RCbkssU0FBUyxFQUFUQSxTQUFTO0VBQ1RlLGVBQWUsRUFBZkE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvY3Jvd2RmdW5kaW5nVGFwcm9vdC5qcz8xN2U1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBUYXByb290IChCSVAgMzQxLzM0Mikgb24tY2hhaW4gY3Jvd2RmdW5kaW5nIHZhdWx0LlxuICpcbiAqIERlcG9zaXRzIHNoYXJlIG9uZSBQMlRSIGFkZHJlc3MuIFRhcHNjcmlwdCBlbmNvZGVzOlxuICogICAtIFBheW91dCBwYXRoOiA4LWJ5dGUgTEUgY29tbWl0bWVudHMgdG8gZ29hbFNhdHMgKyBtaW5Db250cmlidXRpb25TYXRzIChkcm9wcGVkKSwgdGhlblxuICogICAgIFNjaG5vcnIgMi1vZi0yIChiZW5lZmljaWFyeSArIGFyYml0ZXIgeC1vbmx5IGtleXMgaW4gc2NyaXB0IGFzIGswLGsxID0gc29ydGVkIHBhaXIpLiBUaGUgYmVuZWZpY2lhcnlcbiAqICAgICBjYW5ub3QgbW92ZSBmdW5kcyBhbG9uZTsgdGhlIGFyYml0ZXIgY28tc2lnbnMgb25seSB3aGVuIGFnZ3JlZ2F0ZSBjb25maXJtZWQgdmFsdWUg4omlIGdvYWwgKHBvbGljeSkuXG4gKiAgICAgV2hlbiBmaW5hbGl6aW5nIFBTQlQgd2l0bmVzcyBzdGFja3MsIHNpZ25hdHVyZSBvcmRlciBmb2xsb3dzIEJJUDM0MiAvIGJpdGNvaW5qcyB0YXBzY3JpcHQgZmluYWxpemVyOlxuICogICAgIHB1YmtleSAqKnBvc2l0aW9uIGluIHRoZSBsZWFmIHNjcmlwdCwgZGVzY2VuZGluZyoqIChsYXRlciBPUF9DSEVDS1NJRyAvIENIRUNLU0lHQUREIHB1YmtleSBmaXJzdCksIG5vdFxuICogICAgIGxleGljb2dyYXBoaWMgeC1vbmx5IG9yZGVyLlxuICogICAtIFJlZnVuZCBwYXRoOiBhYnNvbHV0ZSBDTFRWICsgYXJiaXRlci1vbmx5IHNpZ25hdHVyZSAoc3dlZXAgYWZ0ZXIgZGVhZGxpbmUpLlxuICpcbiAqIEJpdGNvaW4gU2NyaXB0IGNhbm5vdCBzdW0gYmFsYW5jZXMgYWNyb3NzIHNlcGFyYXRlIFVUWE9zOyB0aGUgZ29hbCBpcyBlbmZvcmNlZCBieSB0YXBsZWFmXG4gKiBjb21taXRtZW50cyBiaW5kaW5nIGNhbXBhaWduIHBhcmFtZXRlcnMgdG8gdGhlIGFkZHJlc3MsIHBsdXMgYXJiaXRlciBwb2xpY3kgb24gcGF5b3V0IFBTQlRzLlxuICogTWluIHBlciBkb25hdGlvbiBpcyBlbmZvcmNlZCBpbiBIdWIgQVBJcyB3aGVuIHJlY29yZGluZyBVVFhPcyBhbmQgaXMgY29tbWl0dGVkIGluIHRoZSBwYXlvdXQgbGVhZi5cbiAqL1xuXG5jb25zdCBiaXRjb2luID0gcmVxdWlyZSgnYml0Y29pbmpzLWxpYicpO1xuY29uc3QgZWNjID0gcmVxdWlyZSgnQGZhYnJpYy9jb3JlL3R5cGVzL2VjYycpO1xuY29uc3QgYmlwMzQxID0gcmVxdWlyZSgnYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvYmlwMzQxJyk7XG5jb25zdCBwc2J0dXRpbHMgPSByZXF1aXJlKCdiaXRjb2luanMtbGliL3NyYy9wc2J0L3BzYnR1dGlscycpO1xuY29uc3QgZWNwYWlyTW9kID0gcmVxdWlyZSgnZWNwYWlyJyk7XG5jb25zdCBFQ1BhaXJGYWN0b3J5ID0gdHlwZW9mIGVjcGFpck1vZCA9PT0gJ2Z1bmN0aW9uJyA/IGVjcGFpck1vZCA6IChlY3BhaXJNb2QuZGVmYXVsdCB8fCBlY3BhaXJNb2QuRUNQYWlyRmFjdG9yeSk7XG5jb25zdCB7IHBheW1lbnRzLCBuZXR3b3Jrcywgc2NyaXB0LCBQc2J0IH0gPSBiaXRjb2luO1xuXG5iaXRjb2luLmluaXRFY2NMaWIoZWNjKTtcblxuY29uc3QgZWNwYWlyID0gRUNQYWlyRmFjdG9yeShlY2MpO1xuXG4vKiogQklQMzQxIE5VTVMgeC1vbmx5IGludGVybmFsIGtleSAoc2NyaXB0LXBhdGggc3BlbmRzIG9ubHkpLiAqL1xuY29uc3QgVEFQUk9PVF9JTlRFUk5BTF9OVU1TID0gQnVmZmVyLmZyb20oXG4gICc1MDkyOWI3NGMxYTA0OTU0Yjc4YjRiNjAzNWU5N2E1ZTA3OGE1YTBmMjhlYzk2ZDU0N2JmZWU5YWNlODAzYWMwJyxcbiAgJ2hleCdcbik7XG5cbmZ1bmN0aW9uIG5ldHdvcmtGb3JGYWJyaWNOYW1lIChuYW1lID0gJycpIHtcbiAgY29uc3QgbiA9IFN0cmluZyhuYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAobiA9PT0gJ3JlZ3Rlc3QnIHx8IG4gPT09ICd0ZXN0JykgcmV0dXJuIG5ldHdvcmtzLnJlZ3Rlc3Q7XG4gIGlmIChuID09PSAndGVzdG5ldCcgfHwgbiA9PT0gJ3NpZ25ldCcpIHJldHVybiBuZXR3b3Jrcy50ZXN0bmV0O1xuICByZXR1cm4gbmV0d29ya3MuYml0Y29pbjtcbn1cblxuZnVuY3Rpb24gdG9YT25seSAocHVia2V5MzMpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIocHVia2V5MzMpIHx8IHB1YmtleTMzLmxlbmd0aCAhPT0gMzMpIHJldHVybiBudWxsO1xuICBpZiAocHVia2V5MzNbMF0gIT09IDB4MDIgJiYgcHVia2V5MzNbMF0gIT09IDB4MDMpIHJldHVybiBudWxsO1xuICByZXR1cm4gcHVia2V5MzMuc3ViYXJyYXkoMSwgMzMpO1xufVxuXG5mdW5jdGlvbiB1NjRMZVB1c2ggKG4pIHtcbiAgY29uc3QgbnVtID0gTnVtYmVyKG4pO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShudW0pIHx8IG51bSA8IDAgfHwgbnVtID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3U2NExlUHVzaDogaW52YWxpZCB1aW50NTMgdmFsdWUuJyk7XG4gIH1cbiAgY29uc3QgYiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg4KTtcbiAgYi53cml0ZUJpZ1VJbnQ2NExFKEJpZ0ludChNYXRoLmZsb29yKG51bSkpLCAwKTtcbiAgcmV0dXJuIGI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29tcHJlc3NlZFB1YmtleTMzIChoZXgpIHtcbiAgY29uc3QgcyA9IFN0cmluZyhoZXggfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIS9eKDAyfDAzKVswLTlhLWZdezY0fSQvaS50ZXN0KHMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmtleSAoZXhwZWN0IDMzLWJ5dGUgaGV4IDAyLzAz4oCmKS4nKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20ocywgJ2hleCcpO1xufVxuXG5mdW5jdGlvbiBzb3J0ZWRYT25seVBhaXIgKGFyYml0ZXJYLCBiZW5lZmljaWFyeVgpIHtcbiAgY29uc3QgYSA9IEJ1ZmZlci5pc0J1ZmZlcihhcmJpdGVyWCkgPyBhcmJpdGVyWCA6IEJ1ZmZlci5mcm9tKGFyYml0ZXJYKTtcbiAgY29uc3QgYiA9IEJ1ZmZlci5pc0J1ZmZlcihiZW5lZmljaWFyeVgpID8gYmVuZWZpY2lhcnlYIDogQnVmZmVyLmZyb20oYmVuZWZpY2lhcnlYKTtcbiAgaWYgKGEubGVuZ3RoICE9PSAzMiB8fCBiLmxlbmd0aCAhPT0gMzIpIHRocm93IG5ldyBFcnJvcignc29ydGVkWE9ubHlQYWlyIGV4cGVjdHMgMzItYnl0ZSB4LW9ubHkga2V5cy4nKTtcbiAgcmV0dXJuIGEuY29tcGFyZShiKSA8PSAwID8gW2EsIGJdIDogW2IsIGFdO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5uZXR3b3JrTmFtZVxuICogQHBhcmFtIHtCdWZmZXJ9IG9wdHMuYmVuZWZpY2lhcnlQdWJrZXlDb21wcmVzc2VkXG4gKiBAcGFyYW0ge0J1ZmZlcn0gb3B0cy5hcmJpdGVyUHVia2V5Q29tcHJlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMuZ29hbFNhdHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLm1pbkNvbnRyaWJ1dGlvblNhdHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLnJlZnVuZExvY2t0aW1lSGVpZ2h0IC0gYWJzb2x1dGUgYmxvY2sgaGVpZ2h0IGZvciByZWZ1bmQgbGVhZlxuICovXG5mdW5jdGlvbiBidWlsZENyb3dkZnVuZFAydHIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbmV0d29ya05hbWUsXG4gICAgYmVuZWZpY2lhcnlQdWJrZXlDb21wcmVzc2VkLFxuICAgIGFyYml0ZXJQdWJrZXlDb21wcmVzc2VkLFxuICAgIGdvYWxTYXRzLFxuICAgIG1pbkNvbnRyaWJ1dGlvblNhdHMsXG4gICAgcmVmdW5kTG9ja3RpbWVIZWlnaHRcbiAgfSA9IG9wdHM7XG5cbiAgY29uc3QgYmVuWCA9IHRvWE9ubHkoYmVuZWZpY2lhcnlQdWJrZXlDb21wcmVzc2VkKTtcbiAgY29uc3QgYXJiWCA9IHRvWE9ubHkoYXJiaXRlclB1YmtleUNvbXByZXNzZWQpO1xuICBpZiAoIWJlblggfHwgIWFyYlgpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiZW5lZmljaWFyeSBvciBhcmJpdGVyIGNvbXByZXNzZWQgcHVia2V5LicpO1xuICBjb25zdCBnb2FsID0gTWF0aC5yb3VuZChOdW1iZXIoZ29hbFNhdHMpKTtcbiAgY29uc3QgbWluQyA9IE1hdGgucm91bmQoTnVtYmVyKG1pbkNvbnRyaWJ1dGlvblNhdHMpKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoZ29hbCkgfHwgZ29hbCA8IDEpIHRocm93IG5ldyBFcnJvcignZ29hbFNhdHMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJyk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG1pbkMpIHx8IG1pbkMgPCAxKSB0aHJvdyBuZXcgRXJyb3IoJ21pbkNvbnRyaWJ1dGlvblNhdHMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJyk7XG4gIGlmIChtaW5DID4gZ29hbCkgdGhyb3cgbmV3IEVycm9yKCdtaW5Db250cmlidXRpb25TYXRzIGNhbm5vdCBleGNlZWQgZ29hbFNhdHMuJyk7XG4gIGNvbnN0IGxvY2sgPSBOdW1iZXIocmVmdW5kTG9ja3RpbWVIZWlnaHQpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShsb2NrKSB8fCBsb2NrIDwgMSB8fCBsb2NrID49IDUwMDAwMDAwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVmdW5kTG9ja3RpbWVIZWlnaHQgbXVzdCBiZSBhIHZhbGlkIGJsb2NrIGhlaWdodCAoPCA1MDAwMDAwMDApLicpO1xuICB9XG5cbiAgY29uc3QgW2swLCBrMV0gPSBzb3J0ZWRYT25seVBhaXIoYXJiWCwgYmVuWCk7XG4gIGNvbnN0IGdvYWxQdXNoID0gdTY0TGVQdXNoKGdvYWwpO1xuICBjb25zdCBtaW5QdXNoID0gdTY0TGVQdXNoKG1pbkMpO1xuICBjb25zdCBwYXlvdXRTY3JpcHQgPSBzY3JpcHQuY29tcGlsZShbXG4gICAgZ29hbFB1c2gsXG4gICAgc2NyaXB0Lk9QUy5PUF9EUk9QLFxuICAgIG1pblB1c2gsXG4gICAgc2NyaXB0Lk9QUy5PUF9EUk9QLFxuICAgIGswLFxuICAgIHNjcmlwdC5PUFMuT1BfQ0hFQ0tTSUcsXG4gICAgazEsXG4gICAgc2NyaXB0Lk9QUy5PUF9DSEVDS1NJR0FERCxcbiAgICBzY3JpcHQubnVtYmVyLmVuY29kZSgyKSxcbiAgICBzY3JpcHQuT1BTLk9QX05VTUVRVUFMXG4gIF0pO1xuXG4gIGNvbnN0IHJlZnVuZFNjcmlwdCA9IHNjcmlwdC5jb21waWxlKFtcbiAgICBzY3JpcHQubnVtYmVyLmVuY29kZShsb2NrKSxcbiAgICBzY3JpcHQuT1BTLk9QX0NIRUNLTE9DS1RJTUVWRVJJRlksXG4gICAgc2NyaXB0Lk9QUy5PUF9EUk9QLFxuICAgIGFyYlgsXG4gICAgc2NyaXB0Lk9QUy5PUF9DSEVDS1NJR1xuICBdKTtcblxuICBjb25zdCBzY3JpcHRUcmVlID0gW3sgb3V0cHV0OiBwYXlvdXRTY3JpcHQgfSwgeyBvdXRwdXQ6IHJlZnVuZFNjcmlwdCB9XTtcbiAgY29uc3QgcGF5ID0gcGF5bWVudHMucDJ0cih7XG4gICAgaW50ZXJuYWxQdWJrZXk6IFRBUFJPT1RfSU5URVJOQUxfTlVNUyxcbiAgICBzY3JpcHRUcmVlLFxuICAgIG5ldHdvcms6IG5ldHdvcmtGb3JGYWJyaWNOYW1lKG5ldHdvcmtOYW1lKVxuICB9KTtcbiAgaWYgKCFwYXkuYWRkcmVzcyB8fCAhcGF5Lm91dHB1dCkgdGhyb3cgbmV3IEVycm9yKCdwMnRyKCkgZGlkIG5vdCBwcm9kdWNlIGFkZHJlc3Mvb3V0cHV0LicpO1xuXG4gIHJldHVybiB7XG4gICAgYWRkcmVzczogcGF5LmFkZHJlc3MsXG4gICAgb3V0cHV0OiBwYXkub3V0cHV0LFxuICAgIHBheW91dFNjcmlwdCxcbiAgICByZWZ1bmRTY3JpcHQsXG4gICAgZ29hbFNhdHM6IGdvYWwsXG4gICAgbWluQ29udHJpYnV0aW9uU2F0czogbWluQyxcbiAgICByZWZ1bmRMb2NrdGltZUhlaWdodDogbG9jayxcbiAgICBzb3J0ZWRYT25seUhleDogW2swLnRvU3RyaW5nKCdoZXgnKSwgazEudG9TdHJpbmcoJ2hleCcpXSxcbiAgICBhcmJpdGVyWE9ubHlIZXg6IGFyYlgudG9TdHJpbmcoJ2hleCcpLFxuICAgIGJlbmVmaWNpYXJ5WE9ubHlIZXg6IGJlblgudG9TdHJpbmcoJ2hleCcpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVGFwTGVhZkNvbnRyb2xCbG9jayAocGF5b3V0U2NyaXB0LCByZWZ1bmRTY3JpcHQsIGxlYWZTY3JpcHQpIHtcbiAgY29uc3QgcGF5QnVmID0gQnVmZmVyLmlzQnVmZmVyKHBheW91dFNjcmlwdCkgPyBwYXlvdXRTY3JpcHQgOiBCdWZmZXIuZnJvbShTdHJpbmcocGF5b3V0U2NyaXB0KSwgJ2hleCcpO1xuICBjb25zdCByZWZCdWYgPSBCdWZmZXIuaXNCdWZmZXIocmVmdW5kU2NyaXB0KSA/IHJlZnVuZFNjcmlwdCA6IEJ1ZmZlci5mcm9tKFN0cmluZyhyZWZ1bmRTY3JpcHQpLCAnaGV4Jyk7XG4gIGNvbnN0IGxlYWZCdWYgPSBCdWZmZXIuaXNCdWZmZXIobGVhZlNjcmlwdCkgPyBsZWFmU2NyaXB0IDogQnVmZmVyLmZyb20oU3RyaW5nKGxlYWZTY3JpcHQpLCAnaGV4Jyk7XG4gIGNvbnN0IHNjcmlwdFRyZWUgPSBbeyBvdXRwdXQ6IHBheUJ1ZiB9LCB7IG91dHB1dDogcmVmQnVmIH1dO1xuICBjb25zdCBoYXNoVHJlZSA9IGJpcDM0MS50b0hhc2hUcmVlKHNjcmlwdFRyZWUpO1xuICBjb25zdCBsZWFmVmVyc2lvbiA9IGJpcDM0MS5MRUFGX1ZFUlNJT05fVEFQU0NSSVBUO1xuICBjb25zdCBsZWFmSGFzaCA9IGJpcDM0MS50YXBsZWFmSGFzaCh7IG91dHB1dDogbGVhZkJ1ZiwgdmVyc2lvbjogbGVhZlZlcnNpb24gfSk7XG4gIGNvbnN0IHBhdGggPSBiaXAzNDEuZmluZFNjcmlwdFBhdGgoaGFzaFRyZWUsIGxlYWZIYXNoKTtcbiAgaWYgKHBhdGggPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdMZWFmIHNjcmlwdCBub3QgZm91bmQgaW4gY3Jvd2RmdW5kIHRhcCB0cmVlLicpO1xuICBjb25zdCBvdXRwdXRLZXkgPSBiaXAzNDEudHdlYWtLZXkoVEFQUk9PVF9JTlRFUk5BTF9OVU1TLCBoYXNoVHJlZS5oYXNoKTtcbiAgaWYgKCFvdXRwdXRLZXkpIHRocm93IG5ldyBFcnJvcignVGFwcm9vdCB0d2VhayBmYWlsZWQuJyk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtcbiAgICBCdWZmZXIuZnJvbShbbGVhZlZlcnNpb24gfCBvdXRwdXRLZXkucGFyaXR5XSksXG4gICAgVEFQUk9PVF9JTlRFUk5BTF9OVU1TLFxuICAgIC4uLnBhdGhcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRQMnRyVm91dEZvckFkZHJlc3MgKHR4LCBwYXltZW50QWRkcmVzcywgbmV0d29yaykge1xuICBjb25zdCBhZGRyID0gU3RyaW5nKHBheW1lbnRBZGRyZXNzIHx8ICcnKS50cmltKCk7XG4gIGlmICghYWRkcikgcmV0dXJuIC0xO1xuICBjb25zdCB3YW50ID0gYml0Y29pbi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KGFkZHIsIG5ldHdvcmspO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHR4Lm91dHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzYyA9IHR4Lm91dHNbaV0uc2NyaXB0O1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoc2MpICYmIHNjLmVxdWFscyh3YW50KSkgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIFVuc2lnbmVkIFBTQlQgc3BlbmRpbmcgTiBjcm93ZGZ1bmQgVVRYT3MgKHNhbWUgYWRkcmVzcykgdmlhIHBheW91dCB0YXBzY3JpcHQ7IGVuZm9yY2VzIHN1bSDiiaUgZ29hbFNhdHMuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICogQHBhcmFtIHtBcnJheTx7IHR4SGV4OiBzdHJpbmcsIHZvdXQ/OiBudW1iZXIgfT59IG9wdHMuaW5wdXRzIC0gdm91dCBvcHRpb25hbCBpZiBvbmx5IG9uZSBQMlRSIG91dHB1dCBwZXIgdHhcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLnBheW1lbnRBZGRyZXNzXG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IG9wdHMucGF5b3V0U2NyaXB0XG4gKiBAcGFyYW0ge0J1ZmZlcnxzdHJpbmd9IG9wdHMucmVmdW5kU2NyaXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5kZXN0aW5hdGlvbkFkZHJlc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmZlZVNhdHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmdvYWxTYXRzXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVDcm93ZGZ1bmRQYXlvdXRQc2J0IChvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtOYW1lLFxuICAgIGlucHV0cyxcbiAgICBwYXltZW50QWRkcmVzcyxcbiAgICBwYXlvdXRTY3JpcHQsXG4gICAgcmVmdW5kU2NyaXB0LFxuICAgIGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICBmZWVTYXRzLFxuICAgIGdvYWxTYXRzXG4gIH0gPSBvcHRzO1xuXG4gIGNvbnN0IG5ldHdvcmsgPSBuZXR3b3JrRm9yRmFicmljTmFtZShuZXR3b3JrTmFtZSk7XG4gIGNvbnN0IHBheUJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcihwYXlvdXRTY3JpcHQpID8gcGF5b3V0U2NyaXB0IDogQnVmZmVyLmZyb20oU3RyaW5nKHBheW91dFNjcmlwdCksICdoZXgnKTtcbiAgY29uc3QgcmVmQnVmID0gQnVmZmVyLmlzQnVmZmVyKHJlZnVuZFNjcmlwdCkgPyByZWZ1bmRTY3JpcHQgOiBCdWZmZXIuZnJvbShTdHJpbmcocmVmdW5kU2NyaXB0KSwgJ2hleCcpO1xuICBjb25zdCBkZXN0ID0gU3RyaW5nKGRlc3RpbmF0aW9uQWRkcmVzcyB8fCAnJykudHJpbSgpO1xuICBpZiAoIWRlc3QpIHRocm93IG5ldyBFcnJvcignZGVzdGluYXRpb25BZGRyZXNzIGlzIHJlcXVpcmVkLicpO1xuICBjb25zdCBmZWUgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKE51bWJlcihmZWVTYXRzIHx8IDEwMDApKSk7XG4gIGNvbnN0IGdvYWwgPSBNYXRoLnJvdW5kKE51bWJlcihnb2FsU2F0cyB8fCAwKSk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGdvYWwpIHx8IGdvYWwgPCAxKSB0aHJvdyBuZXcgRXJyb3IoJ2dvYWxTYXRzIGlzIHJlcXVpcmVkLicpO1xuXG4gIGNvbnN0IGxpc3QgPSBBcnJheS5pc0FycmF5KGlucHV0cykgPyBpbnB1dHMgOiBbXTtcbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0F0IGxlYXN0IG9uZSBmdW5kaW5nIGlucHV0IGlzIHJlcXVpcmVkLicpO1xuXG4gIGxldCB0b3RhbEluID0gMDtcbiAgY29uc3Qgcm93cyA9IFtdO1xuICBmb3IgKGNvbnN0IHJvdyBvZiBsaXN0KSB7XG4gICAgY29uc3QgdHggPSBiaXRjb2luLlRyYW5zYWN0aW9uLmZyb21IZXgoU3RyaW5nKHJvdy50eEhleCB8fCAnJykudHJpbSgpKTtcbiAgICBsZXQgdm91dCA9IHJvdy52b3V0O1xuICAgIGlmICh2b3V0ID09IG51bGwpIHtcbiAgICAgIHZvdXQgPSBmaW5kUDJ0clZvdXRGb3JBZGRyZXNzKHR4LCBwYXltZW50QWRkcmVzcywgbmV0d29yayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZvdXQgPSBOdW1iZXIodm91dCk7XG4gICAgfVxuICAgIGlmICh2b3V0IDwgMCB8fCB2b3V0ID49IHR4Lm91dHMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdm91dCBmb3IgY3Jvd2RmdW5kIGlucHV0LicpO1xuICAgIGNvbnN0IG91dCA9IHR4Lm91dHNbdm91dF07XG4gICAgY29uc3Qgc2NyaXB0UHViID0gb3V0LnNjcmlwdDtcbiAgICBjb25zdCB3YW50U2NyaXB0ID0gYml0Y29pbi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KFN0cmluZyhwYXltZW50QWRkcmVzcykudHJpbSgpLCBuZXR3b3JrKTtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzY3JpcHRQdWIpIHx8ICFzY3JpcHRQdWIuZXF1YWxzKHdhbnRTY3JpcHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IGRvZXMgbm90IHBheSB0aGUgY3Jvd2RmdW5kIFAyVFIgYWRkcmVzcy4nKTtcbiAgICB9XG4gICAgY29uc3QgaW5wdXRTYXRzID0gdHlwZW9mIG91dC52YWx1ZSA9PT0gJ2JpZ2ludCcgPyBOdW1iZXIob3V0LnZhbHVlKSA6IE51bWJlcihvdXQudmFsdWUpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGlucHV0U2F0cykgfHwgaW5wdXRTYXRzIDw9IDApIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCB2YWx1ZS4nKTtcbiAgICB0b3RhbEluICs9IGlucHV0U2F0cztcbiAgICByb3dzLnB1c2goeyB0eCwgdm91dCwgb3V0LCBpbnB1dFNhdHMgfSk7XG4gIH1cblxuICBpZiAodG90YWxJbiA8IGdvYWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbmZpcm1lZCBpbnB1dHMgc3VtICR7dG90YWxJbn0gc2F0cyBpcyBiZWxvdyBjYW1wYWlnbiBnb2FsICR7Z29hbH0gc2F0cy5gKTtcbiAgfVxuXG4gIGNvbnN0IGRlc3RTYXRzID0gdG90YWxJbiAtIGZlZTtcbiAgaWYgKGRlc3RTYXRzIDwgNTQ2KSB0aHJvdyBuZXcgRXJyb3IoJ0Ftb3VudCBhZnRlciBmZWUgaXMgYmVsb3cgZHVzdDsgaW5jcmVhc2UgZnVuZGluZyBvciBsb3dlciBmZWUuJyk7XG5cbiAgY29uc3QgcHNidCA9IG5ldyBQc2J0KHsgbmV0d29yayB9KTtcbiAgY29uc3QgY29udHJvbEJsb2NrID0gYnVpbGRUYXBMZWFmQ29udHJvbEJsb2NrKHBheUJ1ZiwgcmVmQnVmLCBwYXlCdWYpO1xuXG4gIGZvciAoY29uc3QgciBvZiByb3dzKSB7XG4gICAgcHNidC5hZGRJbnB1dCh7XG4gICAgICBoYXNoOiByLnR4LmdldElkKCksXG4gICAgICBpbmRleDogci52b3V0LFxuICAgICAgd2l0bmVzc1V0eG86IHtcbiAgICAgICAgc2NyaXB0OiByLm91dC5zY3JpcHQsXG4gICAgICAgIHZhbHVlOiByLmlucHV0U2F0c1xuICAgICAgfSxcbiAgICAgIHRhcEludGVybmFsS2V5OiBUQVBST09UX0lOVEVSTkFMX05VTVMsXG4gICAgICB0YXBMZWFmU2NyaXB0OiBbe1xuICAgICAgICBsZWFmVmVyc2lvbjogYmlwMzQxLkxFQUZfVkVSU0lPTl9UQVBTQ1JJUFQsXG4gICAgICAgIHNjcmlwdDogcGF5QnVmLFxuICAgICAgICBjb250cm9sQmxvY2tcbiAgICAgIH1dXG4gICAgfSk7XG4gIH1cblxuICBwc2J0LmFkZE91dHB1dCh7XG4gICAgYWRkcmVzczogZGVzdCxcbiAgICB2YWx1ZTogZGVzdFNhdHNcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBwc2J0LFxuICAgIHBzYnRCYXNlNjQ6IHBzYnQudG9CYXNlNjQoKSxcbiAgICB0b3RhbElucHV0U2F0czogdG90YWxJbixcbiAgICBkZXN0U2F0cyxcbiAgICBmZWVTYXRzOiBmZWUsXG4gICAgaW5wdXRDb3VudDogcm93cy5sZW5ndGhcbiAgfTtcbn1cblxuLyoqXG4gKiBVbnNpZ25lZCBQU0JUIGZvciByZWZ1bmQgcGF0aCAoYXJiaXRlciBvbmx5KS4gU2V0cyBuTG9ja3RpbWUgPSByZWZ1bmRMb2NrdGltZUhlaWdodDsgQ1NWIHNlcXVlbmNlIG9uIGlucHV0cy5cbiAqL1xuZnVuY3Rpb24gcHJlcGFyZUNyb3dkZnVuZFJlZnVuZFBzYnQgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbmV0d29ya05hbWUsXG4gICAgZnVuZGVkVHhIZXgsXG4gICAgcGF5bWVudEFkZHJlc3MsXG4gICAgcGF5b3V0U2NyaXB0LFxuICAgIHJlZnVuZFNjcmlwdCxcbiAgICByZWZ1bmRMb2NrdGltZUhlaWdodCxcbiAgICBkZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgZmVlU2F0c1xuICB9ID0gb3B0cztcblxuICBjb25zdCBuZXR3b3JrID0gbmV0d29ya0ZvckZhYnJpY05hbWUobmV0d29ya05hbWUpO1xuICBjb25zdCB0eCA9IGJpdGNvaW4uVHJhbnNhY3Rpb24uZnJvbUhleChTdHJpbmcoZnVuZGVkVHhIZXggfHwgJycpLnRyaW0oKSk7XG4gIGNvbnN0IHZvdXQgPSBmaW5kUDJ0clZvdXRGb3JBZGRyZXNzKHR4LCBwYXltZW50QWRkcmVzcywgbmV0d29yayk7XG4gIGlmICh2b3V0IDwgMCkgdGhyb3cgbmV3IEVycm9yKCdGdW5kaW5nIHR4IGhhcyBubyBQMlRSIG91dHB1dCBtYXRjaGluZyBwYXltZW50QWRkcmVzcy4nKTtcbiAgY29uc3Qgb3V0ID0gdHgub3V0c1t2b3V0XTtcbiAgY29uc3QgaW5wdXRTYXRzID0gdHlwZW9mIG91dC52YWx1ZSA9PT0gJ2JpZ2ludCcgPyBOdW1iZXIob3V0LnZhbHVlKSA6IE51bWJlcihvdXQudmFsdWUpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbnB1dFNhdHMpIHx8IGlucHV0U2F0cyA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY3Jvd2RmdW5kIG91dHB1dCB2YWx1ZS4nKTtcbiAgY29uc3QgZmVlID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChOdW1iZXIoZmVlU2F0cyB8fCAxMDAwKSkpO1xuICBjb25zdCBkZXN0U2F0cyA9IGlucHV0U2F0cyAtIGZlZTtcbiAgaWYgKGRlc3RTYXRzIDwgNTQ2KSB0aHJvdyBuZXcgRXJyb3IoJ0Ftb3VudCBhZnRlciBmZWUgaXMgYmVsb3cgZHVzdC4nKTtcbiAgY29uc3QgcGF5QnVmID0gQnVmZmVyLmlzQnVmZmVyKHBheW91dFNjcmlwdCkgPyBwYXlvdXRTY3JpcHQgOiBCdWZmZXIuZnJvbShTdHJpbmcocGF5b3V0U2NyaXB0KSwgJ2hleCcpO1xuICBjb25zdCByZWZCdWYgPSBCdWZmZXIuaXNCdWZmZXIocmVmdW5kU2NyaXB0KSA/IHJlZnVuZFNjcmlwdCA6IEJ1ZmZlci5mcm9tKFN0cmluZyhyZWZ1bmRTY3JpcHQpLCAnaGV4Jyk7XG4gIGNvbnN0IGxvY2sgPSBOdW1iZXIocmVmdW5kTG9ja3RpbWVIZWlnaHQpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShsb2NrKSB8fCBsb2NrIDwgMSkgdGhyb3cgbmV3IEVycm9yKCdyZWZ1bmRMb2NrdGltZUhlaWdodCBpcyByZXF1aXJlZC4nKTtcblxuICBjb25zdCBjb250cm9sQmxvY2sgPSBidWlsZFRhcExlYWZDb250cm9sQmxvY2socGF5QnVmLCByZWZCdWYsIHJlZkJ1Zik7XG4gIGNvbnN0IHBzYnQgPSBuZXcgUHNidCh7IG5ldHdvcmsgfSk7XG4gIHBzYnQuc2V0TG9ja3RpbWUobG9jayk7XG4gIHBzYnQuYWRkSW5wdXQoe1xuICAgIGhhc2g6IHR4LmdldElkKCksXG4gICAgaW5kZXg6IHZvdXQsXG4gICAgc2VxdWVuY2U6IDB4ZmZmZmZmZmUsXG4gICAgd2l0bmVzc1V0eG86IHtcbiAgICAgIHNjcmlwdDogb3V0LnNjcmlwdCxcbiAgICAgIHZhbHVlOiBpbnB1dFNhdHNcbiAgICB9LFxuICAgIHRhcEludGVybmFsS2V5OiBUQVBST09UX0lOVEVSTkFMX05VTVMsXG4gICAgdGFwTGVhZlNjcmlwdDogW3tcbiAgICAgIGxlYWZWZXJzaW9uOiBiaXAzNDEuTEVBRl9WRVJTSU9OX1RBUFNDUklQVCxcbiAgICAgIHNjcmlwdDogcmVmQnVmLFxuICAgICAgY29udHJvbEJsb2NrXG4gICAgfV1cbiAgfSk7XG4gIHBzYnQuYWRkT3V0cHV0KHtcbiAgICBhZGRyZXNzOiBTdHJpbmcoZGVzdGluYXRpb25BZGRyZXNzIHx8ICcnKS50cmltKCksXG4gICAgdmFsdWU6IGRlc3RTYXRzXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcHNidCxcbiAgICBwc2J0QmFzZTY0OiBwc2J0LnRvQmFzZTY0KCksXG4gICAgaW5wdXRTYXRzLFxuICAgIGRlc3RTYXRzLFxuICAgIGZlZVNhdHM6IGZlZSxcbiAgICBsb2NrdGltZTogbG9ja1xuICB9O1xufVxuXG5mdW5jdGlvbiBzaWduQWxsSW5wdXRzV2l0aEtleSAocHNidCwgcHJpdjMyKSB7XG4gIGNvbnN0IHByaXYgPSBCdWZmZXIuaXNCdWZmZXIocHJpdjMyKSA/IHByaXYzMiA6IEJ1ZmZlci5mcm9tKHByaXYzMik7XG4gIGlmIChwcml2Lmxlbmd0aCAhPT0gMzIpIHRocm93IG5ldyBFcnJvcignUHJpdmF0ZSBrZXkgbXVzdCBiZSAzMiBieXRlcy4nKTtcbiAgY29uc3Qga3AgPSBlY3BhaXIuZnJvbVByaXZhdGVLZXkocHJpdik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHNidC5pbnB1dENvdW50OyBpKyspIHtcbiAgICBwc2J0LnNpZ25JbnB1dChpLCBrcCk7XG4gIH1cbn1cblxuLyoqXG4gKiBGaW5hbGl6ZSBwYXlvdXQgaW5wdXRzICgyLW9mLTIgdGFwc2NyaXB0IHdpdGggbGVhZGluZyBEUk9QIGNvbW1pdG1lbnRzKS5cbiAqIFdpdG5lc3Mgc2lnbmF0dXJlIG9yZGVyIG11c3QgbWF0Y2ggYml0Y29pbmpzIHRhcFNjcmlwdEZpbmFsaXplciAvIEJJUDM0Mjogc29ydCBieVxuICogcHVia2V5IHBvc2l0aW9uIGluIHRoZSBsZWFmIHNjcmlwdCBkZXNjZW5kaW5nIChsYXRlciBDSEVDS1NJRyBwYWlyIGZpcnN0IGluIHRoZSB3aXRuZXNzIHN0YWNrKS5cbiAqL1xuZnVuY3Rpb24gZmluYWxpemVDcm93ZGZ1bmRQYXlvdXRQc2J0IChwc2J0KSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHNidC5pbnB1dENvdW50OyBpKyspIHtcbiAgICBwc2J0LmZpbmFsaXplSW5wdXQoaSwgKF9pbnB1dEluZGV4LCBpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgbGVhZiA9IChpbnB1dC50YXBMZWFmU2NyaXB0IHx8IFtdKVswXTtcbiAgICAgIGlmICghbGVhZiB8fCAhbGVhZi5zY3JpcHQgfHwgIWxlYWYuY29udHJvbEJsb2NrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0YXBMZWFmU2NyaXB0IG9uIFBTQlQgaW5wdXQuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBsaCA9IGJpcDM0MS50YXBsZWFmSGFzaCh7IG91dHB1dDogbGVhZi5zY3JpcHQsIHZlcnNpb246IGxlYWYubGVhZlZlcnNpb24gfSk7XG4gICAgICBjb25zdCBzaWdzID0gKGlucHV0LnRhcFNjcmlwdFNpZyB8fCBbXSkuZmlsdGVyKCh0KSA9PiB0LmxlYWZIYXNoLmVxdWFscyhsaCkpO1xuICAgICAgaWYgKHNpZ3MubGVuZ3RoIDwgMikgdGhyb3cgbmV3IEVycm9yKCdOZWVkIHR3byB0YXBzY3JpcHQgc2lnbmF0dXJlcyBmb3IgY3Jvd2RmdW5kIHBheW91dCBsZWFmLicpO1xuICAgICAgY29uc3Qgb3JkZXJlZCA9IHNpZ3NcbiAgICAgICAgLm1hcCgodHNzKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmFrZTMzID0gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oWzB4MDJdKSwgdHNzLnB1YmtleV0pO1xuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uSW5TY3JpcHQgPSBwc2J0dXRpbHMucHVia2V5UG9zaXRpb25JblNjcmlwdChmYWtlMzMsIGxlYWYuc2NyaXB0KTtcbiAgICAgICAgICBpZiAocG9zaXRpb25JblNjcmlwdCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ3Jvd2RmdW5kIHRhcHNjcmlwdCBwdWJrZXkgbm90IGZvdW5kIGluIGxlYWYgc2NyaXB0LicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyB0c3MsIHBvc2l0aW9uSW5TY3JpcHQgfTtcbiAgICAgICAgfSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIucG9zaXRpb25JblNjcmlwdCAtIGEucG9zaXRpb25JblNjcmlwdCk7XG4gICAgICBjb25zdCB3aXRuZXNzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHsgdHNzIH0gb2Ygb3JkZXJlZCkge1xuICAgICAgICBjb25zdCBzaWcgPSB0c3Muc2lnbmF0dXJlLmxlbmd0aCA+PSA2NCA/IHRzcy5zaWduYXR1cmUuc3ViYXJyYXkoMCwgNjQpIDogdHNzLnNpZ25hdHVyZTtcbiAgICAgICAgd2l0bmVzcy5wdXNoKHNpZyk7XG4gICAgICB9XG4gICAgICB3aXRuZXNzLnB1c2gobGVhZi5zY3JpcHQsIGxlYWYuY29udHJvbEJsb2NrKTtcbiAgICAgIHJldHVybiB7IGZpbmFsU2NyaXB0V2l0bmVzczogcHNidHV0aWxzLndpdG5lc3NTdGFja1RvU2NyaXB0V2l0bmVzcyh3aXRuZXNzKSB9O1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmFsaXplQ3Jvd2RmdW5kUmVmdW5kUHNidCAocHNidCkge1xuICBwc2J0LmZpbmFsaXplSW5wdXQoMCwgKF9pbnB1dEluZGV4LCBpbnB1dCkgPT4ge1xuICAgIGNvbnN0IGxlYWYgPSAoaW5wdXQudGFwTGVhZlNjcmlwdCB8fCBbXSlbMF07XG4gICAgaWYgKCFsZWFmIHx8ICFsZWFmLnNjcmlwdCB8fCAhbGVhZi5jb250cm9sQmxvY2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0YXBMZWFmU2NyaXB0IG9uIHJlZnVuZCBpbnB1dC4nKTtcbiAgICB9XG4gICAgY29uc3QgbGggPSBiaXAzNDEudGFwbGVhZkhhc2goeyBvdXRwdXQ6IGxlYWYuc2NyaXB0LCB2ZXJzaW9uOiBsZWFmLmxlYWZWZXJzaW9uIH0pO1xuICAgIGNvbnN0IHRzcyA9IChpbnB1dC50YXBTY3JpcHRTaWcgfHwgW10pLmZpbmQoKHQpID0+IHQubGVhZkhhc2guZXF1YWxzKGxoKSk7XG4gICAgaWYgKCF0c3MpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB0YXBzY3JpcHQgc2lnbmF0dXJlIGZvciByZWZ1bmQgbGVhZi4nKTtcbiAgICBjb25zdCBzaWcgPSB0c3Muc2lnbmF0dXJlLmxlbmd0aCA+PSA2NCA/IHRzcy5zaWduYXR1cmUuc3ViYXJyYXkoMCwgNjQpIDogdHNzLnNpZ25hdHVyZTtcbiAgICBjb25zdCB3aXRuZXNzID0gW3NpZywgbGVhZi5zY3JpcHQsIGxlYWYuY29udHJvbEJsb2NrXTtcbiAgICByZXR1cm4geyBmaW5hbFNjcmlwdFdpdG5lc3M6IHBzYnR1dGlscy53aXRuZXNzU3RhY2tUb1NjcmlwdFdpdG5lc3Mod2l0bmVzcykgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RQc2J0VHJhbnNhY3Rpb24gKHBzYnQpIHtcbiAgY29uc3QgZXh0cmFjdGVkID0gcHNidC5leHRyYWN0VHJhbnNhY3Rpb24oKTtcbiAgcmV0dXJuIHsgdHhIZXg6IGV4dHJhY3RlZC50b0hleCgpLCB0eGlkOiBleHRyYWN0ZWQuZ2V0SWQoKSB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgVEFQUk9PVF9JTlRFUk5BTF9OVU1TLFxuICBuZXR3b3JrRm9yRmFicmljTmFtZSxcbiAgcGFyc2VDb21wcmVzc2VkUHVia2V5MzMsXG4gIGJ1aWxkQ3Jvd2RmdW5kUDJ0cixcbiAgYnVpbGRUYXBMZWFmQ29udHJvbEJsb2NrLFxuICBmaW5kUDJ0clZvdXRGb3JBZGRyZXNzLFxuICBwcmVwYXJlQ3Jvd2RmdW5kUGF5b3V0UHNidCxcbiAgcHJlcGFyZUNyb3dkZnVuZFJlZnVuZFBzYnQsXG4gIHNpZ25BbGxJbnB1dHNXaXRoS2V5LFxuICBmaW5hbGl6ZUNyb3dkZnVuZFBheW91dFBzYnQsXG4gIGZpbmFsaXplQ3Jvd2RmdW5kUmVmdW5kUHNidCxcbiAgZXh0cmFjdFBzYnRUcmFuc2FjdGlvbixcbiAgdTY0TGVQdXNoLFxuICBzb3J0ZWRYT25seVBhaXJcbn07XG4iXSwibmFtZXMiOlsiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsImZyb20iLCJfYXJyYXlMaWtlVG9BcnJheSIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX25vbkl0ZXJhYmxlUmVzdCIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJ0ZXN0IiwibCIsImkiLCJPYmplY3QiLCJwdXNoIiwiYml0Y29pbiIsInJlcXVpcmUiLCJlY2MiLCJiaXAzNDEiLCJwc2J0dXRpbHMiLCJlY3BhaXJNb2QiLCJFQ1BhaXJGYWN0b3J5IiwicGF5bWVudHMiLCJuZXR3b3JrcyIsInNjcmlwdCIsIlBzYnQiLCJpbml0RWNjTGliIiwiZWNwYWlyIiwiVEFQUk9PVF9JTlRFUk5BTF9OVU1TIiwiQnVmZmVyIiwibmV0d29ya0ZvckZhYnJpY05hbWUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJTdHJpbmciLCJ0b0xvd2VyQ2FzZSIsInJlZ3Rlc3QiLCJ0ZXN0bmV0IiwidG9YT25seSIsInB1YmtleTMzIiwiaXNCdWZmZXIiLCJzdWJhcnJheSIsInU2NExlUHVzaCIsIm51bSIsIk51bWJlciIsImlzRmluaXRlIiwiTUFYX1NBRkVfSU5URUdFUiIsIkVycm9yIiwiYiIsImFsbG9jVW5zYWZlIiwid3JpdGVCaWdVSW50NjRMRSIsIkJpZ0ludCIsIk1hdGgiLCJmbG9vciIsInBhcnNlQ29tcHJlc3NlZFB1YmtleTMzIiwiaGV4IiwidHJpbSIsInNvcnRlZFhPbmx5UGFpciIsImFyYml0ZXJYIiwiYmVuZWZpY2lhcnlYIiwiY29tcGFyZSIsImJ1aWxkQ3Jvd2RmdW5kUDJ0ciIsIm9wdHMiLCJuZXR3b3JrTmFtZSIsImJlbmVmaWNpYXJ5UHVia2V5Q29tcHJlc3NlZCIsImFyYml0ZXJQdWJrZXlDb21wcmVzc2VkIiwiZ29hbFNhdHMiLCJtaW5Db250cmlidXRpb25TYXRzIiwicmVmdW5kTG9ja3RpbWVIZWlnaHQiLCJiZW5YIiwiYXJiWCIsImdvYWwiLCJyb3VuZCIsIm1pbkMiLCJsb2NrIiwiX3NvcnRlZFhPbmx5UGFpciIsIl9zb3J0ZWRYT25seVBhaXIyIiwiazAiLCJrMSIsImdvYWxQdXNoIiwibWluUHVzaCIsInBheW91dFNjcmlwdCIsImNvbXBpbGUiLCJPUFMiLCJPUF9EUk9QIiwiT1BfQ0hFQ0tTSUciLCJPUF9DSEVDS1NJR0FERCIsIm51bWJlciIsImVuY29kZSIsIk9QX05VTUVRVUFMIiwicmVmdW5kU2NyaXB0IiwiT1BfQ0hFQ0tMT0NLVElNRVZFUklGWSIsInNjcmlwdFRyZWUiLCJvdXRwdXQiLCJwYXkiLCJwMnRyIiwiaW50ZXJuYWxQdWJrZXkiLCJuZXR3b3JrIiwiYWRkcmVzcyIsInNvcnRlZFhPbmx5SGV4IiwiYXJiaXRlclhPbmx5SGV4IiwiYmVuZWZpY2lhcnlYT25seUhleCIsImJ1aWxkVGFwTGVhZkNvbnRyb2xCbG9jayIsImxlYWZTY3JpcHQiLCJwYXlCdWYiLCJyZWZCdWYiLCJsZWFmQnVmIiwiaGFzaFRyZWUiLCJ0b0hhc2hUcmVlIiwibGVhZlZlcnNpb24iLCJMRUFGX1ZFUlNJT05fVEFQU0NSSVBUIiwibGVhZkhhc2giLCJ0YXBsZWFmSGFzaCIsInZlcnNpb24iLCJwYXRoIiwiZmluZFNjcmlwdFBhdGgiLCJvdXRwdXRLZXkiLCJ0d2Vha0tleSIsImhhc2giLCJjb25jYXQiLCJwYXJpdHkiLCJmaW5kUDJ0clZvdXRGb3JBZGRyZXNzIiwidHgiLCJwYXltZW50QWRkcmVzcyIsImFkZHIiLCJ3YW50IiwidG9PdXRwdXRTY3JpcHQiLCJvdXRzIiwic2MiLCJlcXVhbHMiLCJwcmVwYXJlQ3Jvd2RmdW5kUGF5b3V0UHNidCIsImlucHV0cyIsImRlc3RpbmF0aW9uQWRkcmVzcyIsImZlZVNhdHMiLCJkZXN0IiwiZmVlIiwibWF4IiwibGlzdCIsInRvdGFsSW4iLCJyb3dzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJyb3ciLCJUcmFuc2FjdGlvbiIsImZyb21IZXgiLCJ0eEhleCIsInZvdXQiLCJvdXQiLCJzY3JpcHRQdWIiLCJ3YW50U2NyaXB0IiwiaW5wdXRTYXRzIiwiZXJyIiwiZGVzdFNhdHMiLCJwc2J0IiwiY29udHJvbEJsb2NrIiwiX2kiLCJfcm93cyIsImFkZElucHV0IiwiZ2V0SWQiLCJpbmRleCIsIndpdG5lc3NVdHhvIiwidGFwSW50ZXJuYWxLZXkiLCJ0YXBMZWFmU2NyaXB0IiwiYWRkT3V0cHV0IiwicHNidEJhc2U2NCIsInRvQmFzZTY0IiwidG90YWxJbnB1dFNhdHMiLCJpbnB1dENvdW50IiwicHJlcGFyZUNyb3dkZnVuZFJlZnVuZFBzYnQiLCJmdW5kZWRUeEhleCIsInNldExvY2t0aW1lIiwic2VxdWVuY2UiLCJsb2NrdGltZSIsInNpZ25BbGxJbnB1dHNXaXRoS2V5IiwicHJpdjMyIiwicHJpdiIsImtwIiwiZnJvbVByaXZhdGVLZXkiLCJzaWduSW5wdXQiLCJmaW5hbGl6ZUNyb3dkZnVuZFBheW91dFBzYnQiLCJmaW5hbGl6ZUlucHV0IiwiX2lucHV0SW5kZXgiLCJpbnB1dCIsImxlYWYiLCJsaCIsInNpZ3MiLCJ0YXBTY3JpcHRTaWciLCJmaWx0ZXIiLCJvcmRlcmVkIiwibWFwIiwidHNzIiwiZmFrZTMzIiwicHVia2V5IiwicG9zaXRpb25JblNjcmlwdCIsInB1YmtleVBvc2l0aW9uSW5TY3JpcHQiLCJzb3J0Iiwid2l0bmVzcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJzaWciLCJzaWduYXR1cmUiLCJmaW5hbFNjcmlwdFdpdG5lc3MiLCJ3aXRuZXNzU3RhY2tUb1NjcmlwdFdpdG5lc3MiLCJmaW5hbGl6ZUNyb3dkZnVuZFJlZnVuZFBzYnQiLCJmaW5kIiwiZXh0cmFjdFBzYnRUcmFuc2FjdGlvbiIsImV4dHJhY3RlZCIsImV4dHJhY3RUcmFuc2FjdGlvbiIsInRvSGV4IiwidHhpZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/crowdfundingTaproot.js\n\n}")},"./functions/distributedManifestClient.js"(module){"use strict";eval('{\n\n/**\n * Browser helpers: fetch hub distributed manifest + beacon epoch summary for operator UI.\n * Federation enforcement lives in the hub (sidechain patches, beacon epochs); this module only summarizes public JSON.\n */\n\n/**\n * @returns {Promise<{ manifest: object|null, epoch: object|null, warnings: string[] }>}\n */\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction fetchDistributedHubPolicy() {\n return _fetchDistributedHubPolicy.apply(this, arguments);\n}\n/**\n * @param {object|null} manifest\n * @returns {{ active: boolean, threshold: number, count: number, validators: string[] }}\n */\nfunction _fetchDistributedHubPolicy() {\n _fetchDistributedHubPolicy = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var warnings, manifest, epoch, _yield$Promise$all, _yield$Promise$all2, mRes, eRes, _t, _t2, _t3;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n warnings = [];\n manifest = null;\n epoch = null;\n _context.p = 1;\n _context.n = 2;\n return Promise.all([fetch(\'/services/distributed/manifest\', {\n headers: {\n Accept: \'application/json\'\n }\n }), fetch(\'/services/distributed/epoch\', {\n headers: {\n Accept: \'application/json\'\n }\n })]);\n case 2:\n _yield$Promise$all = _context.v;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);\n mRes = _yield$Promise$all2[0];\n eRes = _yield$Promise$all2[1];\n if (!mRes.ok) {\n _context.n = 7;\n break;\n }\n _context.p = 3;\n _context.n = 4;\n return mRes.json();\n case 4:\n manifest = _context.v;\n _context.n = 6;\n break;\n case 5:\n _context.p = 5;\n _t = _context.v;\n warnings.push(\'manifest: invalid JSON\');\n case 6:\n _context.n = 8;\n break;\n case 7:\n warnings.push("manifest: HTTP ".concat(mRes.status));\n case 8:\n if (!eRes.ok) {\n _context.n = 13;\n break;\n }\n _context.p = 9;\n _context.n = 10;\n return eRes.json();\n case 10:\n epoch = _context.v;\n _context.n = 12;\n break;\n case 11:\n _context.p = 11;\n _t2 = _context.v;\n warnings.push(\'epoch: invalid JSON\');\n case 12:\n _context.n = 14;\n break;\n case 13:\n warnings.push("epoch: HTTP ".concat(eRes.status));\n case 14:\n _context.n = 16;\n break;\n case 15:\n _context.p = 15;\n _t3 = _context.v;\n warnings.push(_t3 && _t3.message ? _t3.message : String(_t3));\n case 16:\n return _context.a(2, {\n manifest: manifest,\n epoch: epoch,\n warnings: warnings\n });\n }\n }, _callee, null, [[9, 11], [3, 5], [1, 15]]);\n }));\n return _fetchDistributedHubPolicy.apply(this, arguments);\n}\nfunction federationSummaryFromManifest(manifest) {\n var f = manifest && manifest.federation;\n var validators = f && Array.isArray(f.validators) ? f.validators.filter(function (v) {\n return typeof v === \'string\' && v.trim();\n }) : [];\n if (!validators.length) {\n return {\n active: false,\n threshold: 1,\n count: 0,\n validators: []\n };\n }\n return {\n active: true,\n threshold: Math.max(1, Number(f.threshold) || 1),\n count: validators.length,\n validators: validators\n };\n}\n\n/**\n * @param {object|null} epochJson — body of GET /services/distributed/epoch\n * @returns {{ hasBeacon: boolean, status?: string, epochCount?: number|null, lastWitnessPresent: boolean, signatureCount: number }}\n */\nfunction beaconEpochWitnessDetail(epochJson) {\n var b = epochJson && epochJson.beacon;\n if (!b || _typeof(b) !== \'object\') {\n return {\n hasBeacon: false,\n lastWitnessPresent: false,\n signatureCount: 0\n };\n }\n var last = b.last;\n var fw = last && last.federationWitness;\n var sigCount = fw && fw.signatures && _typeof(fw.signatures) === \'object\' ? Object.keys(fw.signatures).filter(function (k) {\n return fw.signatures[k];\n }).length : 0;\n return {\n hasBeacon: true,\n status: typeof b.status === \'string\' ? b.status : undefined,\n epochCount: typeof b.epochCount === \'number\' ? b.epochCount : null,\n lastWitnessPresent: sigCount > 0,\n signatureCount: sigCount\n };\n}\nmodule.exports = {\n fetchDistributedHubPolicy: fetchDistributedHubPolicy,\n federationSummaryFromManifest: federationSummaryFromManifest,\n beaconEpochWitnessDetail: beaconEpochWitnessDetail\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZGlzdHJpYnV0ZWRNYW5pZmVzdENsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFGQSxTQUFBQSxhQUFBLElBTkEsdUtBQUFDLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxXQUFBLDhCQUFBQyxFQUFBTixDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLFFBQUFDLENBQUEsR0FBQUwsQ0FBQSxJQUFBQSxDQUFBLENBQUFNLFNBQUEsWUFBQUMsU0FBQSxHQUFBUCxDQUFBLEdBQUFPLFNBQUEsRUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLE1BQUEsQ0FBQUwsQ0FBQSxDQUFBQyxTQUFBLFVBQUFLLG1CQUFBLENBQUFILENBQUEsdUJBQUFWLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLFFBQUFFLENBQUEsRUFBQUMsQ0FBQSxFQUFBRyxDQUFBLEVBQUFJLENBQUEsTUFBQUMsQ0FBQSxHQUFBWCxDQUFBLFFBQUFZLENBQUEsT0FBQUMsQ0FBQSxLQUFBRixDQUFBLEtBQUFiLENBQUEsS0FBQWdCLENBQUEsRUFBQXBCLENBQUEsRUFBQXFCLENBQUEsRUFBQUMsQ0FBQSxFQUFBTixDQUFBLEVBQUFNLENBQUEsQ0FBQUMsSUFBQSxDQUFBdkIsQ0FBQSxNQUFBc0IsQ0FBQSxXQUFBQSxFQUFBckIsQ0FBQSxFQUFBQyxDQUFBLFdBQUFNLENBQUEsR0FBQVAsQ0FBQSxFQUFBUSxDQUFBLE1BQUFHLENBQUEsR0FBQVosQ0FBQSxFQUFBbUIsQ0FBQSxDQUFBZixDQUFBLEdBQUFGLENBQUEsRUFBQW1CLENBQUEsZ0JBQUFDLEVBQUFwQixDQUFBLEVBQUFFLENBQUEsU0FBQUssQ0FBQSxHQUFBUCxDQUFBLEVB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QzlGLE1BQU0sR0FDakUsQ0FBQztFQUNMLE9BQU87SUFDTHFGLFNBQVMsRUFBRSxJQUFJO0lBQ2ZsQixNQUFNLEVBQUUsT0FBT2dCLENBQUMsQ0FBQ2hCLE1BQU0sS0FBSyxRQUFRLEdBQUdnQixDQUFDLENBQUNoQixNQUFNLEdBQUc0QixTQUFTO0lBQzNEQyxVQUFVLEVBQUUsT0FBT2IsQ0FBQyxDQUFDYSxVQUFVLEtBQUssUUFBUSxHQUFHYixDQUFDLENBQUNhLFVBQVUsR0FBRyxJQUFJO0lBQ2xFVixrQkFBa0IsRUFBRUssUUFBUSxHQUFHLENBQUM7SUFDaENKLGNBQWMsRUFBRUk7RUFDbEIsQ0FBQztBQUNIO0FBRUFNLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2ZwRCx5QkFBeUIsRUFBekJBLHlCQUF5QjtFQUN6QndCLDZCQUE2QixFQUE3QkEsNkJBQTZCO0VBQzdCVyx3QkFBd0IsRUFBeEJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2Rpc3RyaWJ1dGVkTWFuaWZlc3RDbGllbnQuanM/MjQ1OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQnJvd3NlciBoZWxwZXJzOiBmZXRjaCBodWIgZGlzdHJpYnV0ZWQgbWFuaWZlc3QgKyBiZWFjb24gZXBvY2ggc3VtbWFyeSBmb3Igb3BlcmF0b3IgVUkuXG4gKiBGZWRlcmF0aW9uIGVuZm9yY2VtZW50IGxpdmVzIGluIHRoZSBodWIgKHNpZGVjaGFpbiBwYXRjaGVzLCBiZWFjb24gZXBvY2hzKTsgdGhpcyBtb2R1bGUgb25seSBzdW1tYXJpemVzIHB1YmxpYyBKU09OLlxuICovXG5cbi8qKlxuICogQHJldHVybnMge1Byb21pc2U8eyBtYW5pZmVzdDogb2JqZWN0fG51bGwsIGVwb2NoOiBvYmplY3R8bnVsbCwgd2FybmluZ3M6IHN0cmluZ1tdIH0+fVxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaERpc3RyaWJ1dGVkSHViUG9saWN5ICgpIHtcbiAgY29uc3Qgd2FybmluZ3MgPSBbXTtcbiAgbGV0IG1hbmlmZXN0ID0gbnVsbDtcbiAgbGV0IGVwb2NoID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBbbVJlcywgZVJlc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBmZXRjaCgnL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL21hbmlmZXN0JywgeyBoZWFkZXJzOiB7IEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0gfSksXG4gICAgICBmZXRjaCgnL3NlcnZpY2VzL2Rpc3RyaWJ1dGVkL2Vwb2NoJywgeyBoZWFkZXJzOiB7IEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0gfSlcbiAgICBdKTtcbiAgICBpZiAobVJlcy5vaykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbWFuaWZlc3QgPSBhd2FpdCBtUmVzLmpzb24oKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgd2FybmluZ3MucHVzaCgnbWFuaWZlc3Q6IGludmFsaWQgSlNPTicpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKGBtYW5pZmVzdDogSFRUUCAke21SZXMuc3RhdHVzfWApO1xuICAgIH1cbiAgICBpZiAoZVJlcy5vaykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXBvY2ggPSBhd2FpdCBlUmVzLmpzb24oKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgd2FybmluZ3MucHVzaCgnZXBvY2g6IGludmFsaWQgSlNPTicpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuaW5ncy5wdXNoKGBlcG9jaDogSFRUUCAke2VSZXMuc3RhdHVzfWApO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHdhcm5pbmdzLnB1c2goZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpO1xuICB9XG4gIHJldHVybiB7IG1hbmlmZXN0LCBlcG9jaCwgd2FybmluZ3MgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdHxudWxsfSBtYW5pZmVzdFxuICogQHJldHVybnMge3sgYWN0aXZlOiBib29sZWFuLCB0aHJlc2hvbGQ6IG51bWJlciwgY291bnQ6IG51bWJlciwgdmFsaWRhdG9yczogc3RyaW5nW10gfX1cbiAqL1xuZnVuY3Rpb24gZmVkZXJhdGlvblN1bW1hcnlGcm9tTWFuaWZlc3QgKG1hbmlmZXN0KSB7XG4gIGNvbnN0IGYgPSBtYW5pZmVzdCAmJiBtYW5pZmVzdC5mZWRlcmF0aW9uO1xuICBjb25zdCB2YWxpZGF0b3JzID0gZiAmJiBBcnJheS5pc0FycmF5KGYudmFsaWRhdG9ycylcbiAgICA/IGYudmFsaWRhdG9ycy5maWx0ZXIoKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2LnRyaW0oKSlcbiAgICA6IFtdO1xuICBpZiAoIXZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgdGhyZXNob2xkOiAxLCBjb3VudDogMCwgdmFsaWRhdG9yczogW10gfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICB0aHJlc2hvbGQ6IE1hdGgubWF4KDEsIE51bWJlcihmLnRocmVzaG9sZCkgfHwgMSksXG4gICAgY291bnQ6IHZhbGlkYXRvcnMubGVuZ3RoLFxuICAgIHZhbGlkYXRvcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdHxudWxsfSBlcG9jaEpzb24g4oCUIGJvZHkgb2YgR0VUIC9zZXJ2aWNlcy9kaXN0cmlidXRlZC9lcG9jaFxuICogQHJldHVybnMge3sgaGFzQmVhY29uOiBib29sZWFuLCBzdGF0dXM/OiBzdHJpbmcsIGVwb2NoQ291bnQ/OiBudW1iZXJ8bnVsbCwgbGFzdFdpdG5lc3NQcmVzZW50OiBib29sZWFuLCBzaWduYXR1cmVDb3VudDogbnVtYmVyIH19XG4gKi9cbmZ1bmN0aW9uIGJlYWNvbkVwb2NoV2l0bmVzc0RldGFpbCAoZXBvY2hKc29uKSB7XG4gIGNvbnN0IGIgPSBlcG9jaEpzb24gJiYgZXBvY2hKc29uLmJlYWNvbjtcbiAgaWYgKCFiIHx8IHR5cGVvZiBiICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7IGhhc0JlYWNvbjogZmFsc2UsIGxhc3RXaXRuZXNzUHJlc2VudDogZmFsc2UsIHNpZ25hdHVyZUNvdW50OiAwIH07XG4gIH1cbiAgY29uc3QgbGFzdCA9IGIubGFzdDtcbiAgY29uc3QgZncgPSBsYXN0ICYmIGxhc3QuZmVkZXJhdGlvbldpdG5lc3M7XG4gIGNvbnN0IHNpZ0NvdW50ID0gZncgJiYgZncuc2lnbmF0dXJlcyAmJiB0eXBlb2YgZncuc2lnbmF0dXJlcyA9PT0gJ29iamVjdCdcbiAgICA/IE9iamVjdC5rZXlzKGZ3LnNpZ25hdHVyZXMpLmZpbHRlcigoaykgPT4gZncuc2lnbmF0dXJlc1trXSkubGVuZ3RoXG4gICAgOiAwO1xuICByZXR1cm4ge1xuICAgIGhhc0JlYWNvbjogdHJ1ZSxcbiAgICBzdGF0dXM6IHR5cGVvZiBiLnN0YXR1cyA9PT0gJ3N0cmluZycgPyBiLnN0YXR1cyA6IHVuZGVmaW5lZCxcbiAgICBlcG9jaENvdW50OiB0eXBlb2YgYi5lcG9jaENvdW50ID09PSAnbnVtYmVyJyA/IGIuZXBvY2hDb3VudCA6IG51bGwsXG4gICAgbGFzdFdpdG5lc3NQcmVzZW50OiBzaWdDb3VudCA+IDAsXG4gICAgc2lnbmF0dXJlQ291bnQ6IHNpZ0NvdW50XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmZXRjaERpc3RyaWJ1dGVkSHViUG9saWN5LFxuICBmZWRlcmF0aW9uU3VtbWFyeUZyb21NYW5pZmVzdCxcbiAgYmVhY29uRXBvY2hXaXRuZXNzRGV0YWlsXG59O1xuIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIlN5bWJvbCIsIm4iLCJpdGVyYXRvciIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsIm5leHQiLCJwdXNoIiwiaXNBcnJheSIsIl90eXBlb2YiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJmZXRjaERpc3RyaWJ1dGVkSHViUG9saWN5IiwiX2ZldGNoRGlzdHJpYnV0ZWRIdWJQb2xpY3kiLCJfY2FsbGVlIiwid2FybmluZ3MiLCJtYW5pZmVzdCIsImVwb2NoIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsIm1SZXMiLCJlUmVzIiwiX3QiLCJfdDIiLCJfdDMiLCJfY29udGV4dCIsImFsbCIsImZldGNoIiwiaGVhZGVycyIsIkFjY2VwdCIsIm9rIiwianNvbiIsImNvbmNhdCIsInN0YXR1cyIsIm1lc3NhZ2UiLCJTdHJpbmciLCJmZWRlcmF0aW9uU3VtbWFyeUZyb21NYW5pZmVzdCIsImZlZGVyYXRpb24iLCJ2YWxpZGF0b3JzIiwiZmlsdGVyIiwidHJpbSIsImFjdGl2ZSIsInRocmVzaG9sZCIsImNvdW50IiwiTWF0aCIsIm1heCIsIk51bWJlciIsImJlYWNvbkVwb2NoV2l0bmVzc0RldGFpbCIsImVwb2NoSnNvbiIsImIiLCJiZWFjb24iLCJoYXNCZWFjb24iLCJsYXN0V2l0bmVzc1ByZXNlbnQiLCJzaWduYXR1cmVDb3VudCIsImxhc3QiLCJmdyIsImZlZGVyYXRpb25XaXRuZXNzIiwic2lnQ291bnQiLCJzaWduYXR1cmVzIiwia2V5cyIsImsiLCJ1bmRlZmluZWQiLCJlcG9jaENvdW50IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/distributedManifestClient.js\n\n}')},"./functions/documentOffer.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _require = __webpack_require__(/*! ./messageTypes */ \"./functions/messageTypes.js\"),\n DOCUMENT_OFFER = _require.DOCUMENT_OFFER;\n\n/**\n * L1-funded document delivery reward offers on logical sidechain `content.documentOffers`,\n * signaled with {@link DOCUMENT_OFFER} (see `components/SidechainHome.js`).\n *\n * On-chain escrow uses the same P2TR two-leaf HTLC as inventory (`functions/inventoryHtlc.js`):\n * **deliverer** = seller leaf (hashlock + deliverer Schnorr); **initiator** = buyer leaf (CLTV + initiator Schnorr).\n * Phases advance via RFC6902 patches; `revealedPreimageHex` is published only after delivery (claim path).\n */\n\n/** @typedef {'proposed'|'funding_pending'|'funded'|'delivery_pending'|'delivered'|'settled'|'cancelled'} DocumentOfferPhase */\n\n/**\n * @param {object} o\n * @param {string} o.offerId\n * @param {string} o.documentId\n * @param {number} o.rewardSats\n * @param {string} o.initiatorFabricId\n * @param {string} [o.memo]\n * @returns {object}\n */\nfunction createOfferRecord(o) {\n var offerId = String(o.offerId || '').trim();\n var documentId = String(o.documentId || '').trim();\n var initiatorFabricId = String(o.initiatorFabricId || '').trim();\n var rewardSats = Math.max(0, Math.floor(Number(o.rewardSats) || 0));\n var base = {\n kind: 'DocumentOffer',\n id: offerId,\n documentId: documentId,\n rewardSats: rewardSats,\n initiatorFabricId: initiatorFabricId,\n memo: typeof o.memo === 'string' ? o.memo.slice(0, 2000) : '',\n phase: (/** @type {DocumentOfferPhase} */'proposed'),\n createdAt: new Date().toISOString(),\n fundingTxid: null,\n fundingVout: null,\n escrowNote: null,\n /** P2TR receive address (document-offer escrow). */\n paymentAddress: null,\n paymentHashHex: null,\n claimScriptHex: null,\n refundScriptHex: null,\n delivererEscrowPubkeyHex: null,\n initiatorRefundPubkeyHex: null,\n refundLockHeight: null,\n delivererFabricId: null,\n deliveryProof: null,\n /** Set when initiator reveals the hash preimage on-chain settlement path (sidechain). */\n revealedPreimageHex: null,\n /** Claim (deliverer) or refund (initiator) txid after exit. */\n exitTxid: null,\n exitKind: null\n };\n var opt = function opt(k, v) {\n if (v !== undefined && v !== null && v !== '') base[k] = v;\n };\n opt('paymentAddress', o.paymentAddress);\n opt('paymentHashHex', o.paymentHashHex);\n opt('claimScriptHex', o.claimScriptHex);\n opt('refundScriptHex', o.refundScriptHex);\n opt('delivererEscrowPubkeyHex', o.delivererEscrowPubkeyHex);\n opt('initiatorRefundPubkeyHex', o.initiatorRefundPubkeyHex);\n if (o.refundLockHeight != null && Number.isFinite(Number(o.refundLockHeight))) {\n base.refundLockHeight = Math.floor(Number(o.refundLockHeight));\n }\n if (o.fundingTxid) base.fundingTxid = String(o.fundingTxid).trim();\n if (o.fundingVout != null && Number.isFinite(Number(o.fundingVout))) base.fundingVout = Math.floor(Number(o.fundingVout));\n if (o.revealedPreimageHex) base.revealedPreimageHex = String(o.revealedPreimageHex).trim().toLowerCase();\n if (o.exitTxid) base.exitTxid = String(o.exitTxid).trim();\n if (o.exitKind) base.exitKind = String(o.exitKind).trim();\n if (o.delivererFabricId) base.delivererFabricId = String(o.delivererFabricId).trim();\n if (o.phase) base.phase = /** @type {DocumentOfferPhase} */String(o.phase);\n return base;\n}\n\n/**\n * RFC6902 patches to insert or replace one offer under `content.documentOffers`.\n * @param {object} content - current sidechain `content` (from GetSidechainState).\n * @param {string} offerId\n * @param {ReturnType} record\n * @returns {object[]}\n */\nfunction patchesForNewOffer(content, offerId, record) {\n var id = String(offerId || '').trim();\n if (!id || !record) return [];\n var c = content && _typeof(content) === 'object' ? content : {};\n var offers = c.documentOffers && _typeof(c.documentOffers) === 'object' ? c.documentOffers : null;\n if (!offers) {\n return [{\n op: 'add',\n path: '/documentOffers',\n value: _defineProperty({}, id, record)\n }];\n }\n if (offers[id] !== undefined) {\n return [{\n op: 'replace',\n path: \"/documentOffers/\".concat(id),\n value: record\n }];\n }\n return [{\n op: 'add',\n path: \"/documentOffers/\".concat(id),\n value: record\n }];\n}\n\n/**\n * Merge-update one offer (test/demo): replace whole record is simplest for clients.\n * @param {string} offerId\n * @param {object} nextRecord\n */\nfunction patchReplaceOffer(offerId, nextRecord) {\n var id = String(offerId || '').trim();\n if (!id || !nextRecord) return [];\n return [{\n op: 'replace',\n path: \"/documentOffers/\".concat(id),\n value: nextRecord\n }];\n}\n\n/**\n * GenericMessage / chat body: domain envelope.\n * @param {object} actor\n * @param {object} object\n */\nfunction buildDocumentOfferEnvelope(actor, object) {\n return {\n type: DOCUMENT_OFFER,\n actor: actor && _typeof(actor) === 'object' ? actor : {},\n object: object && _typeof(object) === 'object' ? object : {}\n };\n}\nmodule.exports = {\n createOfferRecord: createOfferRecord,\n patchesForNewOffer: patchesForNewOffer,\n patchReplaceOffer: patchReplaceOffer,\n buildDocumentOfferEnvelope: buildDocumentOfferEnvelope\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0VBQ2pCdUMsa0JBQWtCLEVBQWxCQSxrQkFBa0I7RUFDbEJTLGlCQUFpQixFQUFqQkEsaUJBQWlCO0VBQ2pCRSwwQkFBMEIsRUFBMUJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2RvY3VtZW50T2ZmZXIuanM/NDcxMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHsgRE9DVU1FTlRfT0ZGRVIgfSA9IHJlcXVpcmUoJy4vbWVzc2FnZVR5cGVzJyk7XG5cbi8qKlxuICogTDEtZnVuZGVkIGRvY3VtZW50IGRlbGl2ZXJ5IHJld2FyZCBvZmZlcnMgb24gbG9naWNhbCBzaWRlY2hhaW4gYGNvbnRlbnQuZG9jdW1lbnRPZmZlcnNgLFxuICogc2lnbmFsZWQgd2l0aCB7QGxpbmsgRE9DVU1FTlRfT0ZGRVJ9IChzZWUgYGNvbXBvbmVudHMvU2lkZWNoYWluSG9tZS5qc2ApLlxuICpcbiAqIE9uLWNoYWluIGVzY3JvdyB1c2VzIHRoZSBzYW1lIFAyVFIgdHdvLWxlYWYgSFRMQyBhcyBpbnZlbnRvcnkgKGBmdW5jdGlvbnMvaW52ZW50b3J5SHRsYy5qc2ApOlxuICogKipkZWxpdmVyZXIqKiA9IHNlbGxlciBsZWFmIChoYXNobG9jayArIGRlbGl2ZXJlciBTY2hub3JyKTsgKippbml0aWF0b3IqKiA9IGJ1eWVyIGxlYWYgKENMVFYgKyBpbml0aWF0b3IgU2Nobm9ycikuXG4gKiBQaGFzZXMgYWR2YW5jZSB2aWEgUkZDNjkwMiBwYXRjaGVzOyBgcmV2ZWFsZWRQcmVpbWFnZUhleGAgaXMgcHVibGlzaGVkIG9ubHkgYWZ0ZXIgZGVsaXZlcnkgKGNsYWltIHBhdGgpLlxuICovXG5cbi8qKiBAdHlwZWRlZiB7J3Byb3Bvc2VkJ3wnZnVuZGluZ19wZW5kaW5nJ3wnZnVuZGVkJ3wnZGVsaXZlcnlfcGVuZGluZyd8J2RlbGl2ZXJlZCd8J3NldHRsZWQnfCdjYW5jZWxsZWQnfSBEb2N1bWVudE9mZmVyUGhhc2UgKi9cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gb1xuICogQHBhcmFtIHtzdHJpbmd9IG8ub2ZmZXJJZFxuICogQHBhcmFtIHtzdHJpbmd9IG8uZG9jdW1lbnRJZFxuICogQHBhcmFtIHtudW1iZXJ9IG8ucmV3YXJkU2F0c1xuICogQHBhcmFtIHtzdHJpbmd9IG8uaW5pdGlhdG9yRmFicmljSWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbby5tZW1vXVxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlT2ZmZXJSZWNvcmQgKG8pIHtcbiAgY29uc3Qgb2ZmZXJJZCA9IFN0cmluZyhvLm9mZmVySWQgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgZG9jdW1lbnRJZCA9IFN0cmluZyhvLmRvY3VtZW50SWQgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgaW5pdGlhdG9yRmFicmljSWQgPSBTdHJpbmcoby5pbml0aWF0b3JGYWJyaWNJZCB8fCAnJykudHJpbSgpO1xuICBjb25zdCByZXdhcmRTYXRzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihOdW1iZXIoby5yZXdhcmRTYXRzKSB8fCAwKSk7XG4gIGNvbnN0IGJhc2UgPSB7XG4gICAga2luZDogJ0RvY3VtZW50T2ZmZXInLFxuICAgIGlkOiBvZmZlcklkLFxuICAgIGRvY3VtZW50SWQsXG4gICAgcmV3YXJkU2F0cyxcbiAgICBpbml0aWF0b3JGYWJyaWNJZCxcbiAgICBtZW1vOiB0eXBlb2Ygby5tZW1vID09PSAnc3RyaW5nJyA/IG8ubWVtby5zbGljZSgwLCAyMDAwKSA6ICcnLFxuICAgIHBoYXNlOiAvKiogQHR5cGUge0RvY3VtZW50T2ZmZXJQaGFzZX0gKi8gKCdwcm9wb3NlZCcpLFxuICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIGZ1bmRpbmdUeGlkOiBudWxsLFxuICAgIGZ1bmRpbmdWb3V0OiBudWxsLFxuICAgIGVzY3Jvd05vdGU6IG51bGwsXG4gICAgLyoqIFAyVFIgcmVjZWl2ZSBhZGRyZXNzIChkb2N1bWVudC1vZmZlciBlc2Nyb3cpLiAqL1xuICAgIHBheW1lbnRBZGRyZXNzOiBudWxsLFxuICAgIHBheW1lbnRIYXNoSGV4OiBudWxsLFxuICAgIGNsYWltU2NyaXB0SGV4OiBudWxsLFxuICAgIHJlZnVuZFNjcmlwdEhleDogbnVsbCxcbiAgICBkZWxpdmVyZXJFc2Nyb3dQdWJrZXlIZXg6IG51bGwsXG4gICAgaW5pdGlhdG9yUmVmdW5kUHVia2V5SGV4OiBudWxsLFxuICAgIHJlZnVuZExvY2tIZWlnaHQ6IG51bGwsXG4gICAgZGVsaXZlcmVyRmFicmljSWQ6IG51bGwsXG4gICAgZGVsaXZlcnlQcm9vZjogbnVsbCxcbiAgICAvKiogU2V0IHdoZW4gaW5pdGlhdG9yIHJldmVhbHMgdGhlIGhhc2ggcHJlaW1hZ2Ugb24tY2hhaW4gc2V0dGxlbWVudCBwYXRoIChzaWRlY2hhaW4pLiAqL1xuICAgIHJldmVhbGVkUHJlaW1hZ2VIZXg6IG51bGwsXG4gICAgLyoqIENsYWltIChkZWxpdmVyZXIpIG9yIHJlZnVuZCAoaW5pdGlhdG9yKSB0eGlkIGFmdGVyIGV4aXQuICovXG4gICAgZXhpdFR4aWQ6IG51bGwsXG4gICAgZXhpdEtpbmQ6IG51bGxcbiAgfTtcbiAgY29uc3Qgb3B0ID0gKGssIHYpID0+IHtcbiAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwgJiYgdiAhPT0gJycpIGJhc2Vba10gPSB2O1xuICB9O1xuICBvcHQoJ3BheW1lbnRBZGRyZXNzJywgby5wYXltZW50QWRkcmVzcyk7XG4gIG9wdCgncGF5bWVudEhhc2hIZXgnLCBvLnBheW1lbnRIYXNoSGV4KTtcbiAgb3B0KCdjbGFpbVNjcmlwdEhleCcsIG8uY2xhaW1TY3JpcHRIZXgpO1xuICBvcHQoJ3JlZnVuZFNjcmlwdEhleCcsIG8ucmVmdW5kU2NyaXB0SGV4KTtcbiAgb3B0KCdkZWxpdmVyZXJFc2Nyb3dQdWJrZXlIZXgnLCBvLmRlbGl2ZXJlckVzY3Jvd1B1YmtleUhleCk7XG4gIG9wdCgnaW5pdGlhdG9yUmVmdW5kUHVia2V5SGV4Jywgby5pbml0aWF0b3JSZWZ1bmRQdWJrZXlIZXgpO1xuICBpZiAoby5yZWZ1bmRMb2NrSGVpZ2h0ICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcihvLnJlZnVuZExvY2tIZWlnaHQpKSkge1xuICAgIGJhc2UucmVmdW5kTG9ja0hlaWdodCA9IE1hdGguZmxvb3IoTnVtYmVyKG8ucmVmdW5kTG9ja0hlaWdodCkpO1xuICB9XG4gIGlmIChvLmZ1bmRpbmdUeGlkKSBiYXNlLmZ1bmRpbmdUeGlkID0gU3RyaW5nKG8uZnVuZGluZ1R4aWQpLnRyaW0oKTtcbiAgaWYgKG8uZnVuZGluZ1ZvdXQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKG8uZnVuZGluZ1ZvdXQpKSkgYmFzZS5mdW5kaW5nVm91dCA9IE1hdGguZmxvb3IoTnVtYmVyKG8uZnVuZGluZ1ZvdXQpKTtcbiAgaWYgKG8ucmV2ZWFsZWRQcmVpbWFnZUhleCkgYmFzZS5yZXZlYWxlZFByZWltYWdlSGV4ID0gU3RyaW5nKG8ucmV2ZWFsZWRQcmVpbWFnZUhleCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChvLmV4aXRUeGlkKSBiYXNlLmV4aXRUeGlkID0gU3RyaW5nKG8uZXhpdFR4aWQpLnRyaW0oKTtcbiAgaWYgKG8uZXhpdEtpbmQpIGJhc2UuZXhpdEtpbmQgPSBTdHJpbmcoby5leGl0S2luZCkudHJpbSgpO1xuICBpZiAoby5kZWxpdmVyZXJGYWJyaWNJZCkgYmFzZS5kZWxpdmVyZXJGYWJyaWNJZCA9IFN0cmluZyhvLmRlbGl2ZXJlckZhYnJpY0lkKS50cmltKCk7XG4gIGlmIChvLnBoYXNlKSBiYXNlLnBoYXNlID0gLyoqIEB0eXBlIHtEb2N1bWVudE9mZmVyUGhhc2V9ICovIChTdHJpbmcoby5waGFzZSkpO1xuICByZXR1cm4gYmFzZTtcbn1cblxuLyoqXG4gKiBSRkM2OTAyIHBhdGNoZXMgdG8gaW5zZXJ0IG9yIHJlcGxhY2Ugb25lIG9mZmVyIHVuZGVyIGBjb250ZW50LmRvY3VtZW50T2ZmZXJzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZW50IC0gY3VycmVudCBzaWRlY2hhaW4gYGNvbnRlbnRgIChmcm9tIEdldFNpZGVjaGFpblN0YXRlKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvZmZlcklkXG4gKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIGNyZWF0ZU9mZmVyUmVjb3JkPn0gcmVjb3JkXG4gKiBAcmV0dXJucyB7b2JqZWN0W119XG4gKi9cbmZ1bmN0aW9uIHBhdGNoZXNGb3JOZXdPZmZlciAoY29udGVudCwgb2ZmZXJJZCwgcmVjb3JkKSB7XG4gIGNvbnN0IGlkID0gU3RyaW5nKG9mZmVySWQgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFpZCB8fCAhcmVjb3JkKSByZXR1cm4gW107XG4gIGNvbnN0IGMgPSBjb250ZW50ICYmIHR5cGVvZiBjb250ZW50ID09PSAnb2JqZWN0JyA/IGNvbnRlbnQgOiB7fTtcbiAgY29uc3Qgb2ZmZXJzID0gYy5kb2N1bWVudE9mZmVycyAmJiB0eXBlb2YgYy5kb2N1bWVudE9mZmVycyA9PT0gJ29iamVjdCcgPyBjLmRvY3VtZW50T2ZmZXJzIDogbnVsbDtcbiAgaWYgKCFvZmZlcnMpIHtcbiAgICByZXR1cm4gW3sgb3A6ICdhZGQnLCBwYXRoOiAnL2RvY3VtZW50T2ZmZXJzJywgdmFsdWU6IHsgW2lkXTogcmVjb3JkIH0gfV07XG4gIH1cbiAgaWYgKG9mZmVyc1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbeyBvcDogJ3JlcGxhY2UnLCBwYXRoOiBgL2RvY3VtZW50T2ZmZXJzLyR7aWR9YCwgdmFsdWU6IHJlY29yZCB9XTtcbiAgfVxuICByZXR1cm4gW3sgb3A6ICdhZGQnLCBwYXRoOiBgL2RvY3VtZW50T2ZmZXJzLyR7aWR9YCwgdmFsdWU6IHJlY29yZCB9XTtcbn1cblxuLyoqXG4gKiBNZXJnZS11cGRhdGUgb25lIG9mZmVyICh0ZXN0L2RlbW8pOiByZXBsYWNlIHdob2xlIHJlY29yZCBpcyBzaW1wbGVzdCBmb3IgY2xpZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvZmZlcklkXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dFJlY29yZFxuICovXG5mdW5jdGlvbiBwYXRjaFJlcGxhY2VPZmZlciAob2ZmZXJJZCwgbmV4dFJlY29yZCkge1xuICBjb25zdCBpZCA9IFN0cmluZyhvZmZlcklkIHx8ICcnKS50cmltKCk7XG4gIGlmICghaWQgfHwgIW5leHRSZWNvcmQpIHJldHVybiBbXTtcbiAgcmV0dXJuIFt7IG9wOiAncmVwbGFjZScsIHBhdGg6IGAvZG9jdW1lbnRPZmZlcnMvJHtpZH1gLCB2YWx1ZTogbmV4dFJlY29yZCB9XTtcbn1cblxuLyoqXG4gKiBHZW5lcmljTWVzc2FnZSAvIGNoYXQgYm9keTogZG9tYWluIGVudmVsb3BlLlxuICogQHBhcmFtIHtvYmplY3R9IGFjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRG9jdW1lbnRPZmZlckVudmVsb3BlIChhY3Rvciwgb2JqZWN0KSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogRE9DVU1FTlRfT0ZGRVIsXG4gICAgYWN0b3I6IGFjdG9yICYmIHR5cGVvZiBhY3RvciA9PT0gJ29iamVjdCcgPyBhY3RvciA6IHt9LFxuICAgIG9iamVjdDogb2JqZWN0ICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnID8gb2JqZWN0IDoge31cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZU9mZmVyUmVjb3JkLFxuICBwYXRjaGVzRm9yTmV3T2ZmZXIsXG4gIHBhdGNoUmVwbGFjZU9mZmVyLFxuICBidWlsZERvY3VtZW50T2ZmZXJFbnZlbG9wZVxufTtcbiJdLCJuYW1lcyI6WyJfZGVmaW5lUHJvcGVydHkiLCJlIiwiciIsInQiLCJfdG9Qcm9wZXJ0eUtleSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwiX3R5cGVvZiIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIm8iLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3JlcXVpcmUiLCJyZXF1aXJlIiwiRE9DVU1FTlRfT0ZGRVIiLCJjcmVhdGVPZmZlclJlY29yZCIsIm9mZmVySWQiLCJ0cmltIiwiZG9jdW1lbnRJZCIsImluaXRpYXRvckZhYnJpY0lkIiwicmV3YXJkU2F0cyIsIk1hdGgiLCJtYXgiLCJmbG9vciIsImJhc2UiLCJraW5kIiwiaWQiLCJtZW1vIiwic2xpY2UiLCJwaGFzZSIsImNyZWF0ZWRBdCIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsImZ1bmRpbmdUeGlkIiwiZnVuZGluZ1ZvdXQiLCJlc2Nyb3dOb3RlIiwicGF5bWVudEFkZHJlc3MiLCJwYXltZW50SGFzaEhleCIsImNsYWltU2NyaXB0SGV4IiwicmVmdW5kU2NyaXB0SGV4IiwiZGVsaXZlcmVyRXNjcm93UHVia2V5SGV4IiwiaW5pdGlhdG9yUmVmdW5kUHVia2V5SGV4IiwicmVmdW5kTG9ja0hlaWdodCIsImRlbGl2ZXJlckZhYnJpY0lkIiwiZGVsaXZlcnlQcm9vZiIsInJldmVhbGVkUHJlaW1hZ2VIZXgiLCJleGl0VHhpZCIsImV4aXRLaW5kIiwib3B0IiwiayIsInYiLCJ1bmRlZmluZWQiLCJpc0Zpbml0ZSIsInRvTG93ZXJDYXNlIiwicGF0Y2hlc0Zvck5ld09mZmVyIiwiY29udGVudCIsInJlY29yZCIsImMiLCJvZmZlcnMiLCJkb2N1bWVudE9mZmVycyIsIm9wIiwicGF0aCIsImNvbmNhdCIsInBhdGNoUmVwbGFjZU9mZmVyIiwibmV4dFJlY29yZCIsImJ1aWxkRG9jdW1lbnRPZmZlckVudmVsb3BlIiwiYWN0b3IiLCJvYmplY3QiLCJ0eXBlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/documentOffer.js\n\n}")},"./functions/documentOfferHubClient.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nvar _require = __webpack_require__(/*! ./sidechainHubClient */ "./functions/sidechainHubClient.js"),\n hubJsonRpc = _require.hubJsonRpc;\n\n/**\n * @param {object} body\n * @returns {Promise<{ ok: boolean, result?: object, error?: string }>}\n */\nfunction buildDocumentOfferEscrow(_x) {\n return _buildDocumentOfferEscrow.apply(this, arguments);\n}\nfunction _buildDocumentOfferEscrow() {\n _buildDocumentOfferEscrow = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(body) {\n var out, r;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n _context.n = 1;\n return hubJsonRpc(\'BuildDocumentOfferEscrow\', [body]);\n case 1:\n out = _context.v;\n if (out.ok) {\n _context.n = 2;\n break;\n }\n return _context.a(2, {\n ok: false,\n error: out.error\n });\n case 2:\n r = out.result;\n if (!(r && r.status === \'error\')) {\n _context.n = 3;\n break;\n }\n return _context.a(2, {\n ok: false,\n error: r.message || \'BuildDocumentOfferEscrow failed\'\n });\n case 3:\n return _context.a(2, {\n ok: true,\n result: r\n });\n }\n }, _callee);\n }));\n return _buildDocumentOfferEscrow.apply(this, arguments);\n}\nfunction verifyDocumentOfferFunding(_x2) {\n return _verifyDocumentOfferFunding.apply(this, arguments);\n}\nfunction _verifyDocumentOfferFunding() {\n _verifyDocumentOfferFunding = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(body) {\n var out, r;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n _context2.n = 1;\n return hubJsonRpc(\'VerifyDocumentOfferFunding\', [body]);\n case 1:\n out = _context2.v;\n if (out.ok) {\n _context2.n = 2;\n break;\n }\n return _context2.a(2, {\n ok: false,\n error: out.error\n });\n case 2:\n r = out.result;\n if (!(r && r.status === \'error\')) {\n _context2.n = 3;\n break;\n }\n return _context2.a(2, {\n ok: false,\n error: r.message || \'verify failed\'\n });\n case 3:\n return _context2.a(2, {\n ok: true,\n result: r\n });\n }\n }, _callee2);\n }));\n return _verifyDocumentOfferFunding.apply(this, arguments);\n}\nfunction prepareDocumentOfferDelivererClaimPsbt(_x3) {\n return _prepareDocumentOfferDelivererClaimPsbt.apply(this, arguments);\n}\nfunction _prepareDocumentOfferDelivererClaimPsbt() {\n _prepareDocumentOfferDelivererClaimPsbt = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(body) {\n var out, r;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n _context3.n = 1;\n return hubJsonRpc(\'PrepareDocumentOfferDelivererClaimPsbt\', [body]);\n case 1:\n out = _context3.v;\n if (out.ok) {\n _context3.n = 2;\n break;\n }\n return _context3.a(2, {\n ok: false,\n error: out.error\n });\n case 2:\n r = out.result;\n if (!(r && r.status === \'error\')) {\n _context3.n = 3;\n break;\n }\n return _context3.a(2, {\n ok: false,\n error: r.message || \'prepare claim failed\'\n });\n case 3:\n return _context3.a(2, {\n ok: true,\n result: r\n });\n }\n }, _callee3);\n }));\n return _prepareDocumentOfferDelivererClaimPsbt.apply(this, arguments);\n}\nfunction prepareDocumentOfferInitiatorRefundPsbt(_x4) {\n return _prepareDocumentOfferInitiatorRefundPsbt.apply(this, arguments);\n}\nfunction _prepareDocumentOfferInitiatorRefundPsbt() {\n _prepareDocumentOfferInitiatorRefundPsbt = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(body) {\n var out, r;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n _context4.n = 1;\n return hubJsonRpc(\'PrepareDocumentOfferInitiatorRefundPsbt\', [body]);\n case 1:\n out = _context4.v;\n if (out.ok) {\n _context4.n = 2;\n break;\n }\n return _context4.a(2, {\n ok: false,\n error: out.error\n });\n case 2:\n r = out.result;\n if (!(r && r.status === \'error\')) {\n _context4.n = 3;\n break;\n }\n return _context4.a(2, {\n ok: false,\n error: r.message || \'prepare refund failed\'\n });\n case 3:\n return _context4.a(2, {\n ok: true,\n result: r\n });\n }\n }, _callee4);\n }));\n return _prepareDocumentOfferInitiatorRefundPsbt.apply(this, arguments);\n}\nfunction broadcastSignedTransaction(_x5) {\n return _broadcastSignedTransaction.apply(this, arguments);\n}\nfunction _broadcastSignedTransaction() {\n _broadcastSignedTransaction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(body) {\n var out, r;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n _context5.n = 1;\n return hubJsonRpc(\'BroadcastSignedTransaction\', [body]);\n case 1:\n out = _context5.v;\n if (out.ok) {\n _context5.n = 2;\n break;\n }\n return _context5.a(2, {\n ok: false,\n error: out.error\n });\n case 2:\n r = out.result;\n if (!(r && r.status === \'error\')) {\n _context5.n = 3;\n break;\n }\n return _context5.a(2, {\n ok: false,\n error: r.message || \'broadcast failed\'\n });\n case 3:\n return _context5.a(2, {\n ok: true,\n result: r\n });\n }\n }, _callee5);\n }));\n return _broadcastSignedTransaction.apply(this, arguments);\n}\nfunction getBitcoinTipHeight() {\n return _getBitcoinTipHeight.apply(this, arguments);\n}\nfunction _getBitcoinTipHeight() {\n _getBitcoinTipHeight = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {\n var out, h;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.n) {\n case 0:\n _context6.n = 1;\n return hubJsonRpc(\'GetBitcoinStatus\', []);\n case 1:\n out = _context6.v;\n if (out.ok) {\n _context6.n = 2;\n break;\n }\n return _context6.a(2, {\n ok: false,\n error: out.error\n });\n case 2:\n h = out.result && out.result.height;\n if (Number.isFinite(Number(h))) {\n _context6.n = 3;\n break;\n }\n return _context6.a(2, {\n ok: false,\n error: \'GetBitcoinStatus missing height\'\n });\n case 3:\n return _context6.a(2, {\n ok: true,\n height: Math.floor(Number(h))\n });\n }\n }, _callee6);\n }));\n return _getBitcoinTipHeight.apply(this, arguments);\n}\nmodule.exports = {\n buildDocumentOfferEscrow: buildDocumentOfferEscrow,\n verifyDocumentOfferFunding: verifyDocumentOfferFunding,\n prepareDocumentOfferDelivererClaimPsbt: prepareDocumentOfferDelivererClaimPsbt,\n prepareDocumentOfferInitiatorRefundPsbt: prepareDocumentOfferInitiatorRefundPsbt,\n broadcastSignedTransaction: broadcastSignedTransaction,\n getBitcoinTipHeight: getBitcoinTipHeight\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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b3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9kb2N1bWVudE9mZmVySHViQ2xpZW50LmpzPzk5NWQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IGh1Ykpzb25ScGMgfSA9IHJlcXVpcmUoJy4vc2lkZWNoYWluSHViQ2xpZW50Jyk7XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGJvZHlcbiAqIEByZXR1cm5zIHtQcm9taXNlPHsgb2s6IGJvb2xlYW4sIHJlc3VsdD86IG9iamVjdCwgZXJyb3I/OiBzdHJpbmcgfT59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkRG9jdW1lbnRPZmZlckVzY3JvdyAoYm9keSkge1xuICBjb25zdCBvdXQgPSBhd2FpdCBodWJKc29uUnBjKCdCdWlsZERvY3VtZW50T2ZmZXJFc2Nyb3cnLCBbYm9keV0pO1xuICBpZiAoIW91dC5vaykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogb3V0LmVycm9yIH07XG4gIGNvbnN0IHIgPSBvdXQucmVzdWx0O1xuICBpZiAociAmJiByLnN0YXR1cyA9PT0gJ2Vycm9yJykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogci5tZXNzYWdlIHx8ICdCdWlsZERvY3VtZW50T2ZmZXJFc2Nyb3cgZmFpbGVkJyB9O1xuICByZXR1cm4geyBvazogdHJ1ZSwgcmVzdWx0OiByIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeURvY3VtZW50T2ZmZXJGdW5kaW5nIChib2R5KSB7XG4gIGNvbnN0IG91dCA9IGF3YWl0IGh1Ykpzb25ScGMoJ1ZlcmlmeURvY3VtZW50T2ZmZXJGdW5kaW5nJywgW2JvZHldKTtcbiAgaWYgKCFvdXQub2spIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IG91dC5lcnJvciB9O1xuICBjb25zdCByID0gb3V0LnJlc3VsdDtcbiAgaWYgKHIgJiYgci5zdGF0dXMgPT09ICdlcnJvcicpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IHIubWVzc2FnZSB8fCAndmVyaWZ5IGZhaWxlZCcgfTtcbiAgcmV0dXJuIHsgb2s6IHRydWUsIHJlc3VsdDogciB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcmVwYXJlRG9jdW1lbnRPZmZlckRlbGl2ZXJlckNsYWltUHNidCAoYm9keSkge1xuICBjb25zdCBvdXQgPSBhd2FpdCBodWJKc29uUnBjKCdQcmVwYXJlRG9jdW1lbnRPZmZlckRlbGl2ZXJlckNsYWltUHNidCcsIFtib2R5XSk7XG4gIGlmICghb3V0Lm9rKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBvdXQuZXJyb3IgfTtcbiAgY29uc3QgciA9IG91dC5yZXN1bHQ7XG4gIGlmIChyICYmIHIuc3RhdHVzID09PSAnZXJyb3InKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiByLm1lc3NhZ2UgfHwgJ3ByZXBhcmUgY2xhaW0gZmFpbGVkJyB9O1xuICByZXR1cm4geyBvazogdHJ1ZSwgcmVzdWx0OiByIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByZXBhcmVEb2N1bWVudE9mZmVySW5pdGlhdG9yUmVmdW5kUHNidCAoYm9keSkge1xuICBjb25zdCBvdXQgPSBhd2FpdCBodWJKc29uUnBjKCdQcmVwYXJlRG9jdW1lbnRPZmZlckluaXRpYXRvclJlZnVuZFBzYnQnLCBbYm9keV0pO1xuICBpZiAoIW91dC5vaykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogb3V0LmVycm9yIH07XG4gIGNvbnN0IHIgPSBvdXQucmVzdWx0O1xuICBpZiAociAmJiByLnN0YXR1cyA9PT0gJ2Vycm9yJykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogci5tZXNzYWdlIHx8ICdwcmVwYXJlIHJlZnVuZCBmYWlsZWQnIH07XG4gIHJldHVybiB7IG9rOiB0cnVlLCByZXN1bHQ6IHIgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnJvYWRjYXN0U2lnbmVkVHJhbnNhY3Rpb24gKGJvZHkpIHtcbiAgY29uc3Qgb3V0ID0gYXdhaXQgaHViSnNvblJwYygnQnJvYWRjYXN0U2lnbmVkVHJhbnNhY3Rpb24nLCBbYm9keV0pO1xuICBpZiAoIW91dC5vaykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogb3V0LmVycm9yIH07XG4gIGNvbnN0IHIgPSBvdXQucmVzdWx0O1xuICBpZiAociAmJiByLnN0YXR1cyA9PT0gJ2Vycm9yJykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogci5tZXNzYWdlIHx8ICdicm9hZGNhc3QgZmFpbGVkJyB9O1xuICByZXR1cm4geyBvazogdHJ1ZSwgcmVzdWx0OiByIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEJpdGNvaW5UaXBIZWlnaHQgKCkge1xuICBjb25zdCBvdXQgPSBhd2FpdCBodWJKc29uUnBjKCdHZXRCaXRjb2luU3RhdHVzJywgW10pO1xuICBpZiAoIW91dC5vaykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogb3V0LmVycm9yIH07XG4gIGNvbnN0IGggPSBvdXQucmVzdWx0ICYmIG91dC5yZXN1bHQuaGVpZ2h0O1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShOdW1iZXIoaCkpKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnR2V0Qml0Y29pblN0YXR1cyBtaXNzaW5nIGhlaWdodCcgfTtcbiAgcmV0dXJuIHsgb2s6IHRydWUsIGhlaWdodDogTWF0aC5mbG9vcihOdW1iZXIoaCkpIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBidWlsZERvY3VtZW50T2ZmZXJFc2Nyb3csXG4gIHZlcmlmeURvY3VtZW50T2ZmZXJGdW5kaW5nLFxuICBwcmVwYXJlRG9jdW1lbnRPZmZlckRlbGl2ZXJlckNsYWltUHNidCxcbiAgcHJlcGFyZURvY3VtZW50T2ZmZXJJbml0aWF0b3JSZWZ1bmRQc2J0LFxuICBicm9hZGNhc3RTaWduZWRUcmFuc2FjdGlvbixcbiAgZ2V0Qml0Y29pblRpcEhlaWdodFxufTtcbiJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJTeW1ib2wiLCJuIiwiaXRlcmF0b3IiLCJvIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl9yZXF1aXJlIiwicmVxdWlyZSIsImh1Ykpzb25ScGMiLCJidWlsZERvY3VtZW50T2ZmZXJFc2Nyb3ciLCJfeCIsIl9idWlsZERvY3VtZW50T2ZmZXJFc2Nyb3ciLCJfY2FsbGVlIiwiYm9keSIsIm91dCIsIl9jb250ZXh0Iiwib2siLCJlcnJvciIsInJlc3VsdCIsInN0YXR1cyIsIm1lc3NhZ2UiLCJ2ZXJpZnlEb2N1bWVudE9mZmVyRnVuZGluZyIsIl94MiIsIl92ZXJpZnlEb2N1bWVudE9mZmVyRnVuZGluZyIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwicHJlcGFyZURvY3VtZW50T2ZmZXJEZWxpdmVyZXJDbGFpbVBzYnQiLCJfeDMiLCJfcHJlcGFyZURvY3VtZW50T2ZmZXJEZWxpdmVyZXJDbGFpbVBzYnQiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsInByZXBhcmVEb2N1bWVudE9mZmVySW5pdGlhdG9yUmVmdW5kUHNidCIsIl94NCIsIl9wcmVwYXJlRG9jdW1lbnRPZmZlckluaXRpYXRvclJlZnVuZFBzYnQiLCJfY2FsbGVlNCIsIl9jb250ZXh0NCIsImJyb2FkY2FzdFNpZ25lZFRyYW5zYWN0aW9uIiwiX3g1IiwiX2Jyb2FkY2FzdFNpZ25lZFRyYW5zYWN0aW9uIiwiX2NhbGxlZTUiLCJfY29udGV4dDUiLCJnZXRCaXRjb2luVGlwSGVpZ2h0IiwiX2dldEJpdGNvaW5UaXBIZWlnaHQiLCJfY2FsbGVlNiIsImgiLCJfY29udGV4dDYiLCJoZWlnaHQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIk1hdGgiLCJmbG9vciIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/documentOfferHubClient.js\n\n}')},"./functions/documentOfferTxBrowser.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * Browser (or Node): sign document-offer Taproot PSBTs with a local secp256k1 key.\n * Used with Hub-prepared PSBT base64 from PrepareDocumentOffer* RPCs.\n */\nvar bitcoin = __webpack_require__(/*! bitcoinjs-lib */ \"./node_modules/bitcoinjs-lib/src/index.js\");\nvar ecc = __webpack_require__(/*! @fabric/core/types/ecc */ \"./node_modules/@fabric/core/types/ecc.js\");\nvar inventoryHtlc = __webpack_require__(/*! ./inventoryHtlc */ \"./functions/inventoryHtlc.js\");\nbitcoin.initEccLib(ecc);\nfunction parsePriv32(privHexOrBuf) {\n if (Buffer.isBuffer(privHexOrBuf)) {\n if (privHexOrBuf.length !== 32) throw new Error('Private key must be 32 bytes.');\n return privHexOrBuf;\n }\n var h = String(privHexOrBuf || '').trim().replace(/^0x/i, '');\n if (!/^[0-9a-f]{64}$/i.test(h)) throw new Error('Private key must be 64 hex characters.');\n return Buffer.from(h, 'hex');\n}\nfunction parsePreimage32(preimageHex) {\n var h = String(preimageHex || '').trim().replace(/^0x/i, '');\n if (!/^[0-9a-f]{64}$/i.test(h)) throw new Error('preimage must be 64 hex characters (32 bytes).');\n return Buffer.from(h, 'hex');\n}\n\n/**\n * @param {string} psbtBase64\n * @param {string} preimageHex\n * @param {string|Buffer} delivererPrivHexOrBuf\n */\nfunction signDelivererClaimFromPsbtBase64(psbtBase64, preimageHex, delivererPrivHexOrBuf) {\n var psbt = bitcoin.Psbt.fromBase64(String(psbtBase64 || '').trim());\n var preimage32 = parsePreimage32(preimageHex);\n var priv = parsePriv32(delivererPrivHexOrBuf);\n return inventoryHtlc.signAndExtractInventoryHtlcSellerClaim({\n psbt: psbt,\n preimage32: preimage32\n }, priv);\n}\n\n/**\n * @param {string} psbtBase64\n * @param {string|Buffer} initiatorPrivHexOrBuf\n */\nfunction signInitiatorRefundFromPsbtBase64(psbtBase64, initiatorPrivHexOrBuf) {\n var psbt = bitcoin.Psbt.fromBase64(String(psbtBase64 || '').trim());\n var priv = parsePriv32(initiatorPrivHexOrBuf);\n return inventoryHtlc.signAndExtractInventoryHtlcBuyerRefund({\n psbt: psbt\n }, priv);\n}\nmodule.exports = {\n signDelivererClaimFromPsbtBase64: signDelivererClaimFromPsbtBase64,\n signInitiatorRefundFromPsbtBase64: signInitiatorRefundFromPsbtBase64\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNGLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9kb2N1bWVudE9mZmVyVHhCcm93c2VyLmpzPzYyN2MiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEJyb3dzZXIgKG9yIE5vZGUpOiBzaWduIGRvY3VtZW50LW9mZmVyIFRhcHJvb3QgUFNCVHMgd2l0aCBhIGxvY2FsIHNlY3AyNTZrMSBrZXkuXG4gKiBVc2VkIHdpdGggSHViLXByZXBhcmVkIFBTQlQgYmFzZTY0IGZyb20gUHJlcGFyZURvY3VtZW50T2ZmZXIqIFJQQ3MuXG4gKi9cblxuY29uc3QgYml0Y29pbiA9IHJlcXVpcmUoJ2JpdGNvaW5qcy1saWInKTtcbmNvbnN0IGVjYyA9IHJlcXVpcmUoJ0BmYWJyaWMvY29yZS90eXBlcy9lY2MnKTtcbmNvbnN0IGludmVudG9yeUh0bGMgPSByZXF1aXJlKCcuL2ludmVudG9yeUh0bGMnKTtcblxuYml0Y29pbi5pbml0RWNjTGliKGVjYyk7XG5cbmZ1bmN0aW9uIHBhcnNlUHJpdjMyIChwcml2SGV4T3JCdWYpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihwcml2SGV4T3JCdWYpKSB7XG4gICAgaWYgKHByaXZIZXhPckJ1Zi5sZW5ndGggIT09IDMyKSB0aHJvdyBuZXcgRXJyb3IoJ1ByaXZhdGUga2V5IG11c3QgYmUgMzIgYnl0ZXMuJyk7XG4gICAgcmV0dXJuIHByaXZIZXhPckJ1ZjtcbiAgfVxuICBjb25zdCBoID0gU3RyaW5nKHByaXZIZXhPckJ1ZiB8fCAnJykudHJpbSgpLnJlcGxhY2UoL14weC9pLCAnJyk7XG4gIGlmICghL15bMC05YS1mXXs2NH0kL2kudGVzdChoKSkgdGhyb3cgbmV3IEVycm9yKCdQcml2YXRlIGtleSBtdXN0IGJlIDY0IGhleCBjaGFyYWN0ZXJzLicpO1xuICByZXR1cm4gQnVmZmVyLmZyb20oaCwgJ2hleCcpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVByZWltYWdlMzIgKHByZWltYWdlSGV4KSB7XG4gIGNvbnN0IGggPSBTdHJpbmcocHJlaW1hZ2VIZXggfHwgJycpLnRyaW0oKS5yZXBsYWNlKC9eMHgvaSwgJycpO1xuICBpZiAoIS9eWzAtOWEtZl17NjR9JC9pLnRlc3QoaCkpIHRocm93IG5ldyBFcnJvcigncHJlaW1hZ2UgbXVzdCBiZSA2NCBoZXggY2hhcmFjdGVycyAoMzIgYnl0ZXMpLicpO1xuICByZXR1cm4gQnVmZmVyLmZyb20oaCwgJ2hleCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwc2J0QmFzZTY0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlaW1hZ2VIZXhcbiAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcn0gZGVsaXZlcmVyUHJpdkhleE9yQnVmXG4gKi9cbmZ1bmN0aW9uIHNpZ25EZWxpdmVyZXJDbGFpbUZyb21Qc2J0QmFzZTY0IChwc2J0QmFzZTY0LCBwcmVpbWFnZUhleCwgZGVsaXZlcmVyUHJpdkhleE9yQnVmKSB7XG4gIGNvbnN0IHBzYnQgPSBiaXRjb2luLlBzYnQuZnJvbUJhc2U2NChTdHJpbmcocHNidEJhc2U2NCB8fCAnJykudHJpbSgpKTtcbiAgY29uc3QgcHJlaW1hZ2UzMiA9IHBhcnNlUHJlaW1hZ2UzMihwcmVpbWFnZUhleCk7XG4gIGNvbnN0IHByaXYgPSBwYXJzZVByaXYzMihkZWxpdmVyZXJQcml2SGV4T3JCdWYpO1xuICByZXR1cm4gaW52ZW50b3J5SHRsYy5zaWduQW5kRXh0cmFjdEludmVudG9yeUh0bGNTZWxsZXJDbGFpbSh7IHBzYnQsIHByZWltYWdlMzIgfSwgcHJpdik7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBzYnRCYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcn0gaW5pdGlhdG9yUHJpdkhleE9yQnVmXG4gKi9cbmZ1bmN0aW9uIHNpZ25Jbml0aWF0b3JSZWZ1bmRGcm9tUHNidEJhc2U2NCAocHNidEJhc2U2NCwgaW5pdGlhdG9yUHJpdkhleE9yQnVmKSB7XG4gIGNvbnN0IHBzYnQgPSBiaXRjb2luLlBzYnQuZnJvbUJhc2U2NChTdHJpbmcocHNidEJhc2U2NCB8fCAnJykudHJpbSgpKTtcbiAgY29uc3QgcHJpdiA9IHBhcnNlUHJpdjMyKGluaXRpYXRvclByaXZIZXhPckJ1Zik7XG4gIHJldHVybiBpbnZlbnRvcnlIdGxjLnNpZ25BbmRFeHRyYWN0SW52ZW50b3J5SHRsY0J1eWVyUmVmdW5kKHsgcHNidCB9LCBwcml2KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNpZ25EZWxpdmVyZXJDbGFpbUZyb21Qc2J0QmFzZTY0LFxuICBzaWduSW5pdGlhdG9yUmVmdW5kRnJvbVBzYnRCYXNlNjRcbn07XG4iXSwibmFtZXMiOlsiYml0Y29pbiIsInJlcXVpcmUiLCJlY2MiLCJpbnZlbnRvcnlIdGxjIiwiaW5pdEVjY0xpYiIsInBhcnNlUHJpdjMyIiwicHJpdkhleE9yQnVmIiwiQnVmZmVyIiwiaXNCdWZmZXIiLCJsZW5ndGgiLCJFcnJvciIsImgiLCJTdHJpbmciLCJ0cmltIiwicmVwbGFjZSIsInRlc3QiLCJmcm9tIiwicGFyc2VQcmVpbWFnZTMyIiwicHJlaW1hZ2VIZXgiLCJzaWduRGVsaXZlcmVyQ2xhaW1Gcm9tUHNidEJhc2U2NCIsInBzYnRCYXNlNjQiLCJkZWxpdmVyZXJQcml2SGV4T3JCdWYiLCJwc2J0IiwiUHNidCIsImZyb21CYXNlNjQiLCJwcmVpbWFnZTMyIiwicHJpdiIsInNpZ25BbmRFeHRyYWN0SW52ZW50b3J5SHRsY1NlbGxlckNsYWltIiwic2lnbkluaXRpYXRvclJlZnVuZEZyb21Qc2J0QmFzZTY0IiwiaW5pdGlhdG9yUHJpdkhleE9yQnVmIiwic2lnbkFuZEV4dHJhY3RJbnZlbnRvcnlIdGxjQnV5ZXJSZWZ1bmQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/documentOfferTxBrowser.js\n\n}")},"./functions/documentPublishSync.js"(module){"use strict";eval('{\n\n/**\n * Browser publish flow: local rows use opaque Actor ids; hub files and PublishDocument use content sha256.\n * After CreateDocument succeeds, Bridge calls publish again with the sha id — that must not re-enter\n * the "upload full content first" path or PublishDocument is never sent.\n *\n * @param {string|number} logicalId - Route / globalState key used for this publish attempt\n * @param {{ sha256?: string, published?: unknown }|null|undefined} doc\n * @returns {boolean}\n */\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction needsCreateDocumentBeforePublish(logicalId, doc) {\n if (!doc || _typeof(doc) !== \'object\') return false;\n if (!doc.sha256 || doc.published) return false;\n var lid = String(logicalId == null ? \'\' : logicalId).trim();\n var sha = String(doc.sha256).trim();\n return !!sha && lid !== sha;\n}\n\n/**\n * When GetNetworkStatus includes `publishedDocuments`, merge published timestamps into local `documents`.\n * Never strips `published` when the doc is missing from the snapshot — empty or stale payloads would\n * undo a successful PublishDocument before the next hub refresh.\n *\n * @param {Record} documents - Bridge globalState.documents (mutated in place)\n * @param {Record} published - hub collections.documents\n * @returns {boolean} whether any row changed\n */\nfunction mergePublishedDocumentsFromHubStatus(documents, published) {\n if (!documents || _typeof(documents) !== \'object\') return false;\n if (!published || _typeof(published) !== \'object\') return false;\n var changed = false;\n for (var _i = 0, _Object$entries = Object.entries(documents); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n docId = _Object$entries$_i[0],\n doc = _Object$entries$_i[1];\n if (!doc || _typeof(doc) !== \'object\') continue;\n var inStore = published[docId] || doc.sha256 && published[doc.sha256];\n if (inStore && !doc.published) {\n documents[docId] = _objectSpread(_objectSpread({}, doc), {}, {\n published: inStore.published || true\n });\n changed = true;\n }\n }\n return changed;\n}\nmodule.exports = {\n needsCreateDocumentBeforePublish: needsCreateDocumentBeforePublish,\n mergePublishedDocumentsFromHubStatus: mergePublishedDocumentsFromHubStatus\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZG9jdW1lbnRQdWJsaXNoU3luYy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQSxTQUFBQSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUYsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsT0FBQWEsT0FBQSxXQUFBZCxDQUFBLElBQUFlLGVBQUEsQ0FBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFsQixDQUFBLEVBQUFHLE1BQUEsQ0FBQWMseUJBQUEsQ0FBQWYsQ0FBQSxLQUFBSCxPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBZ0IsY0FBQSxDQUFBbkIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQU4sQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRCxDQUFBO0FBQUEsU0FBQWdCLGdCQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsWUFBQUQsQ0FBQSxHQUFBbUIsY0FBQSxDQUFBbkIsQ0FBQSxNQUFBRCxDQUFBLEdBQUFHLE1BQUEsQ0FBQWdCLGNBQUEsQ0FBQW5CLENBQUEsRUFBQUMsQ0FBQSxJQUFBb0IsS0FBQSxFQUFBbkIsQ0FBQSxFQUFBTyxVQUFBLE1BQUFhLFlBQUEsTUFBQUMsUUFBQSxVQUFBdkIsQ0FBQSxDQUFBQyxDQUFBLElBQUFDLENBQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFvQixlQUFBbEIsQ0FBQSxRQUFBc0IsQ0FBQSxHQUFBQyxZQUFBLENBQUF2QixDQUFBLGdDQUFBd0IsT0FBQSxDQUFBRixDQUFBLElBQUFBLENBQUEsR0FBQUEsQ0FBQTtBQUFBLFNBQUFDLGFBQUF2QixDQUFBLEVBQUFELENBQUEsb0JBQUF5QixPQUFBLENBQUF4QixDQUFBLE1BQUFBLENBQUEsU0FBQUEsQ0FBQSxNQUFBRixDQUFBLEdBQUFFLENBQUEsQ0FBQXlCLE1BQUEsQ0FBQUMsV0FBQSxrQkFBQTVCLENBQUEsUUFBQXdCLENBQUEsR0FBQXhCLENBQUEsQ0FBQTZCLElBQUEsQ0FBQTNCLENBQUEsRUFBQUQsQ0FBQSxnQ0FBQXlCLE9BQUEsQ0FBQUYsQ0FBQSxVQUFBQSxDQUFBLFlBQUFNLFNBQUEseUVBQUE3QixDQUFBLEdBQUE4QixNQUFBLEdBQUFDLE1BQUEsRUFBQTlCLENBQUE7QUFBQSxTQUFBK0IsZUFBQWhDLENBQUEsRUFBQUQsQ0FBQSxXQUFBa0MsZUFBQSxDQUFBakMsQ0FBQSxLQUFBa0MscUJBQUEsQ0FBQWxDLENBQUEsRUFBQUQsQ0FBQSxLQUFBb0MsMkJBQUEsQ0FBQW5DLENBQUEsRUFBQUQsQ0FBQSxLQUFBcUMsZ0JBQUE7QUFBQSxTQUFBQSxpQkFBQSxjQUFBUCxTQUFBO0FBQUEsU0FBQU0sNEJBQUFuQyxDQUFBLEVBQUFxQyxDQUFBLFFBQUFyQyxDQUFBLDJCQUFBQSxDQUFBLFNBQUFzQyxpQkFBQSxDQUFBdEMsQ0FBQSxFQUFBcUMsQ0FBQSxPQUFBcEMsQ0FBQSxNQUFBc0MsUUFBQSxDQUFBWCxJQUFBLENBQUE1QixDQUFBLEVBQUF3QyxLQUFBLDZCQUFBdkMsQ0FBQSxJQUFBRCxDQUFBLENBQUF5QyxXQUFBLEtBQUF4QyxDQUFBLEdBQUFELENBQUEsQ0FBQXlDLFdBQUEsQ0FBQUMsSUFBQSxhQUFBekMsQ0FBQSxjQUFBQSxDQUFBLEdBQUEwQyxLQUFBLENBQUFDLElBQUEsQ0FBQTVDLENBQUEsb0JBQUFDLENBQUEsK0NBQUE0QyxJQUFBLENBQUE1QyxDQUFBLElBQUFxQyxpQkFBQSxDQUFBdEMsQ0FBQSxFQUFBcUMsQ0FBQTtBQUFBLFNBQUFDLGtCQUFBdEMsQ0FBQSxFQUFBcUMsQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQXJDLENBQUEsQ0FBQWEsTUFBQSxNQUFBd0IsQ0FBQSxHQUFBckMsQ0FBQSxDQUFBYSxNQUFBLFlBQUFkLENBQUEsTUFBQStDLENBQUEsR0FBQUgsS0FBQSxDQUFBTixDQUFBLEdBQUF0QyxDQUFBLEdBQUFzQyxDQUFBLEVBQUF0QyxDQUFBLElBQUErQyxDQUFBLENBQUEvQyxDQUFBLElBQUFDLENBQUEsQ0FBQUQsQ0FBQSxVQUFBK0MsQ0FBQTtBQUFBLFNBQUFaLHNCQUFBbEMsQ0FBQSxFQUFBK0MsQ0FBQSxRQUFBOUMsQ0FBQSxXQUFBRCxDQUFBLGdDQUFBMEIsTUFBQSxJQUFBMUIsQ0FBQSxDQUFBMEIsTUFBQSxDQUFBc0IsUUFBQSxLQUFBaEQsQ0FBQSw0QkFBQUMsQ0FBQSxRQUFBRixDQUFBLEVBQUErQyxDQUFBLEVBQUF2QixDQUFBLEVBQUEwQixDQUFBLEVBQUFaLENBQUEsT0FBQWEsQ0FBQSxPQUFBN0MsQ0FBQSxpQkFBQWtCLENBQUEsSUFBQXRCLENBQUEsR0FBQUEsQ0FBQSxDQUFBMkIsSUFBQSxDQUFBNUIsQ0FBQSxHQUFBbUQsSUFBQSxRQUFBSixDQUFBLFFBQUE3QyxNQUFBLENBQUFELENBQUEsTUFBQUEsQ0FBQSxVQUFBaUQsQ0FBQSx1QkFBQUEsQ0FBQSxJQUFBbkQsQ0FBQSxHQUFBd0IsQ0FBQSxDQUFBSyxJQUFBLENBQUEzQixDQUFBLEdBQUFtRCxJQUFBLE1BQUFmLENBQUEsQ0FBQTVCLElBQUEsQ0FBQVYsQ0FBQSxDQUFBcUIsS0FBQSxHQUFBaUIsQ0FBQSxDQUFBeEIsTUFBQSxLQUFBa0MsQ0FBQSxHQUFBRyxDQUFBLGlCQUFBbEQsQ0FBQSxJQUFBSyxDQUFBLE9BQUF5QyxDQUFBLEdBQUE5QyxDQUFBLHlCQUFBa0QsQ0FBQSxZQUFBakQsQ0FBQSxlQUFBZ0QsQ0FBQSxHQUFBaEQsQ0FBQSxjQUFBQyxNQUFBLENBQUErQyxDQUFBLE1BQUFBLENBQUEsMkJBQUE1QyxDQUFBLFFBQUF5QyxDQUFBLGFBQUFULENBQUE7QUFBQSxTQUFBSixnQkFBQWpDLENBQUEsUUFBQTJDLEtBQUEsQ0FBQVUsT0FBQSxDQUFBckQsQ0FBQSxVQUFBQSxDQUFBO0FBQUEsU0FBQXlCLFFBQUFwQixDQUFBLHNDQUFBb0IsT0FBQSx3QkFBQUMsTUFBQSx1QkFBQUEsTUFBQSxDQUFBc0IsUUFBQSxhQUFBM0MsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBcUIsTUFBQSxJQUFBckIsQ0FBQSxDQUFBb0MsV0FBQSxLQUFBZixNQUFBLElBQUFyQixDQUFBLEtBQUFxQixNQUFBLENBQUE0QixTQUFBLHFCQUFBakQsQ0FBQSxLQUFBb0IsT0FBQSxDQUFBcEIsQ0FBQTtBQVNBLFNBQVNrRCxnQ0FBZ0NBLENBQUVDLFNBQVMsRUFBRUMsR0FBRyxFQUFFO0VBQ3pELElBQUksQ0FBQ0EsR0FBRyxJQUFJaEMsT0FBQSxDQUFPZ0MsR0FBRyxNQUFLLFFBQVEsRUFBRSxPQUFPLEtBQUs7RUFDakQsSUFBSSxDQUFDQSxHQUFHLENBQUNDLE1BQU0sSUFBSUQsR0FBRyxDQUFDRSxTQUFTLEVBQUUsT0FBTyxLQUFLO0VBQzlDLElBQU1DLEdBQUcsR0FBRzlCLE1BQU0sQ0FBQzBCLFNBQVMsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHQSxTQUFTLENBQUMsQ0FBQ0ssSUFBSSxDQUFDLENBQUM7RUFDN0QsSUFBTUMsR0FBRyxHQUFHaEMsTUFBTSxDQUFDMkIsR0FBRyxDQUFDQyxNQUFNLENBQUMsQ0FBQ0csSUFBSSxDQUFDLENBQUM7RUFDckMsT0FBTyxDQUFDLENBQUNDLEdBQUcsSUFBSUYsR0FBRyxLQUFLRSxHQUFHO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLG9DQUFvQ0EsQ0FBRUMsU0FBUyxFQUFFTCxTQUFTLEVBQUU7RUFDbkUsSUFBSSxDQUFDSyxTQUFTLElBQUl2QyxPQUFBLENBQU91QyxTQUFTLE1BQUssUUFBUSxFQUFFLE9BQU8sS0FBSztFQUM3RCxJQUFJLENBQUNMLFNBQVMsSUFBSWxDLE9BQUEsQ0FBT2tDLFNBQVMsTUFBSyxRQUFRLEVBQUUsT0FBTyxLQUFLO0VBQzdELElBQUlNLE9BQU8sR0FBRyxLQUFLO0VBQ25CLFNBQUFDLEVBQUEsTUFBQUMsZUFBQSxHQUEyQmpFLE1BQU0sQ0FBQ2tFLE9BQU8sQ0FBQ0osU0FBUyxDQUFDLEVBQUFFLEVBQUEsR0FBQUMsZUFBQSxDQUFBdEQsTUFBQSxFQUFBcUQsRUFBQSxJQUFFO0lBQWpELElBQUFHLGtCQUFBLEdBQUFyQyxjQUFBLENBQUFtQyxlQUFBLENBQUFELEVBQUE7TUFBT0ksS0FBSyxHQUFBRCxrQkFBQTtNQUFFWixHQUFHLEdBQUFZLGtCQUFBO0lBQ3BCLElBQUksQ0FBQ1osR0FBRyxJQUFJaEMsT0FBQSxDQUFPZ0MsR0FBRyxNQUFLLFFBQVEsRUFBRTtJQUNyQyxJQUFNYyxPQUFPLEdBQUdaLFNBQVMsQ0FBQ1csS0FBSyxDQUFDLElBQUtiLEdBQUcsQ0FBQ0MsTUFBTSxJQUFJQyxTQUFTLENBQUNGLEdBQUcsQ0FBQ0MsTUFBTSxDQUFFO0lBQ3pFLElBQUlhLE9BQU8sSUFBSSxDQUFDZCxHQUFHLENBQUNFLFNBQVMsRUFBRTtNQUM3QkssU0FBUyxDQUFDTSxLQUFLLENBQUMsR0FBQTNELGFBQUEsQ0FBQUEsYUFBQSxLQUFROEMsR0FBRztRQUFFRSxTQUFTLEVBQUVZLE9BQU8sQ0FBQ1osU0FBUyxJQUFJO01BQUksRUFBRTtNQUNuRU0sT0FBTyxHQUFHLElBQUk7SUFDaEI7RUFDRjtFQUNBLE9BQU9BLE9BQU87QUFDaEI7QUFFQU8sTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZmxCLGdDQUFnQyxFQUFoQ0EsZ0NBQWdDO0VBQ2hDUSxvQ0FBb0MsRUFBcENBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2RvY3VtZW50UHVibGlzaFN5bmMuanM/YTBkMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQnJvd3NlciBwdWJsaXNoIGZsb3c6IGxvY2FsIHJvd3MgdXNlIG9wYXF1ZSBBY3RvciBpZHM7IGh1YiBmaWxlcyBhbmQgUHVibGlzaERvY3VtZW50IHVzZSBjb250ZW50IHNoYTI1Ni5cbiAqIEFmdGVyIENyZWF0ZURvY3VtZW50IHN1Y2NlZWRzLCBCcmlkZ2UgY2FsbHMgcHVibGlzaCBhZ2FpbiB3aXRoIHRoZSBzaGEgaWQg4oCUIHRoYXQgbXVzdCBub3QgcmUtZW50ZXJcbiAqIHRoZSBcInVwbG9hZCBmdWxsIGNvbnRlbnQgZmlyc3RcIiBwYXRoIG9yIFB1Ymxpc2hEb2N1bWVudCBpcyBuZXZlciBzZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbG9naWNhbElkIC0gUm91dGUgLyBnbG9iYWxTdGF0ZSBrZXkgdXNlZCBmb3IgdGhpcyBwdWJsaXNoIGF0dGVtcHRcbiAqIEBwYXJhbSB7eyBzaGEyNTY/OiBzdHJpbmcsIHB1Ymxpc2hlZD86IHVua25vd24gfXxudWxsfHVuZGVmaW5lZH0gZG9jXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gbmVlZHNDcmVhdGVEb2N1bWVudEJlZm9yZVB1Ymxpc2ggKGxvZ2ljYWxJZCwgZG9jKSB7XG4gIGlmICghZG9jIHx8IHR5cGVvZiBkb2MgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGlmICghZG9jLnNoYTI1NiB8fCBkb2MucHVibGlzaGVkKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGxpZCA9IFN0cmluZyhsb2dpY2FsSWQgPT0gbnVsbCA/ICcnIDogbG9naWNhbElkKS50cmltKCk7XG4gIGNvbnN0IHNoYSA9IFN0cmluZyhkb2Muc2hhMjU2KS50cmltKCk7XG4gIHJldHVybiAhIXNoYSAmJiBsaWQgIT09IHNoYTtcbn1cblxuLyoqXG4gKiBXaGVuIEdldE5ldHdvcmtTdGF0dXMgaW5jbHVkZXMgYHB1Ymxpc2hlZERvY3VtZW50c2AsIG1lcmdlIHB1Ymxpc2hlZCB0aW1lc3RhbXBzIGludG8gbG9jYWwgYGRvY3VtZW50c2AuXG4gKiBOZXZlciBzdHJpcHMgYHB1Ymxpc2hlZGAgd2hlbiB0aGUgZG9jIGlzIG1pc3NpbmcgZnJvbSB0aGUgc25hcHNob3Qg4oCUIGVtcHR5IG9yIHN0YWxlIHBheWxvYWRzIHdvdWxkXG4gKiB1bmRvIGEgc3VjY2Vzc2Z1bCBQdWJsaXNoRG9jdW1lbnQgYmVmb3JlIHRoZSBuZXh0IGh1YiByZWZyZXNoLlxuICpcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgb2JqZWN0Pn0gZG9jdW1lbnRzIC0gQnJpZGdlIGdsb2JhbFN0YXRlLmRvY3VtZW50cyAobXV0YXRlZCBpbiBwbGFjZSlcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgeyBwdWJsaXNoZWQ/OiBzdHJpbmd8Ym9vbGVhbiB9Pn0gcHVibGlzaGVkIC0gaHViIGNvbGxlY3Rpb25zLmRvY3VtZW50c1xuICogQHJldHVybnMge2Jvb2xlYW59IHdoZXRoZXIgYW55IHJvdyBjaGFuZ2VkXG4gKi9cbmZ1bmN0aW9uIG1lcmdlUHVibGlzaGVkRG9jdW1lbnRzRnJvbUh1YlN0YXR1cyAoZG9jdW1lbnRzLCBwdWJsaXNoZWQpIHtcbiAgaWYgKCFkb2N1bWVudHMgfHwgdHlwZW9mIGRvY3VtZW50cyAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFwdWJsaXNoZWQgfHwgdHlwZW9mIHB1Ymxpc2hlZCAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBbZG9jSWQsIGRvY10gb2YgT2JqZWN0LmVudHJpZXMoZG9jdW1lbnRzKSkge1xuICAgIGlmICghZG9jIHx8IHR5cGVvZiBkb2MgIT09ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICBjb25zdCBpblN0b3JlID0gcHVibGlzaGVkW2RvY0lkXSB8fCAoZG9jLnNoYTI1NiAmJiBwdWJsaXNoZWRbZG9jLnNoYTI1Nl0pO1xuICAgIGlmIChpblN0b3JlICYmICFkb2MucHVibGlzaGVkKSB7XG4gICAgICBkb2N1bWVudHNbZG9jSWRdID0geyAuLi5kb2MsIHB1Ymxpc2hlZDogaW5TdG9yZS5wdWJsaXNoZWQgfHwgdHJ1ZSB9O1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGFuZ2VkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbmVlZHNDcmVhdGVEb2N1bWVudEJlZm9yZVB1Ymxpc2gsXG4gIG1lcmdlUHVibGlzaGVkRG9jdW1lbnRzRnJvbUh1YlN0YXR1c1xufTtcbiJdLCJuYW1lcyI6WyJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJhIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsIm4iLCJsIiwiaXRlcmF0b3IiLCJ1IiwiZiIsIm5leHQiLCJkb25lIiwiaXNBcnJheSIsInByb3RvdHlwZSIsIm5lZWRzQ3JlYXRlRG9jdW1lbnRCZWZvcmVQdWJsaXNoIiwibG9naWNhbElkIiwiZG9jIiwic2hhMjU2IiwicHVibGlzaGVkIiwibGlkIiwidHJpbSIsInNoYSIsIm1lcmdlUHVibGlzaGVkRG9jdW1lbnRzRnJvbUh1YlN0YXR1cyIsImRvY3VtZW50cyIsImNoYW5nZWQiLCJfaSIsIl9PYmplY3QkZW50cmllcyIsImVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJkb2NJZCIsImluU3RvcmUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/documentPublishSync.js\n\n}')},"./functions/executionRunCommitment.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n/**\n * Hub ExecutionRun digests — re-export core bridge so local and hub share bytes.\n *\n * @see @fabric/core/functions/executionRunBridge\n */\nvar bridge = null;\ntry {\n bridge = __webpack_require__(/*! @fabric/core/functions/executionRunBridge */ \"./node_modules/@fabric/core/functions/executionRunBridge.js\");\n} catch (_) {\n bridge = null;\n}\nfunction _bridge() {\n if (!bridge) {\n throw new Error('@fabric/core/functions/executionRunBridge required — npm run link:fabric');\n }\n return bridge;\n}\nfunction computeExecutionRunCommitmentHex(contractId, result) {\n return _bridge().computeExecutionRunCommitmentHex(contractId, result);\n}\nfunction buildExecutionRunOutput(opts) {\n return _bridge().buildExecutionRunOutput(opts);\n}\nmodule.exports = {\n computeExecutionRunCommitmentHex: computeExecutionRunCommitmentHex,\n buildExecutionRunOutput: buildExecutionRunOutput,\n EXECUTION_RUN_COMMITMENT_KIND: 'ExecutionRun',\n FABRIC_PROGRAM_RUN_KIND: 'FabricProgramRun'\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZXhlY3V0aW9uUnVuQ29tbWl0bWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSUEsTUFBTSxHQUFHLElBQUk7QUFDakIsSUFBSTtFQUNGQSxNQUFNLEdBQUdDLG1CQUFPLENBQUMsOEdBQTJDLENBQUM7QUFDL0QsQ0FBQyxDQUFDLE9BQU9DLENBQUMsRUFBRTtFQUNWRixNQUFNLEdBQUcsSUFBSTtBQUNmO0FBRUEsU0FBU0csT0FBT0EsQ0FBQSxFQUFJO0VBQ2xCLElBQUksQ0FBQ0gsTUFBTSxFQUFFO0lBQ1gsTUFBTSxJQUFJSSxLQUFLLENBQUMsMEVBQTBFLENBQUM7RUFDN0Y7RUFDQSxPQUFPSixNQUFNO0FBQ2Y7QUFFQSxTQUFTSyxnQ0FBZ0NBLENBQUVDLFVBQVUsRUFBRUMsTUFBTSxFQUFFO0VBQzdELE9BQU9KLE9BQU8sQ0FBQyxDQUFDLENBQUNFLGdDQUFnQyxDQUFDQyxVQUFVLEVBQUVDLE1BQU0sQ0FBQztBQUN2RTtBQUVBLFNBQVNDLHVCQUF1QkEsQ0FBRUMsSUFBSSxFQUFFO0VBQ3RDLE9BQU9OLE9BQU8sQ0FBQyxDQUFDLENBQUNLLHVCQUF1QixDQUFDQyxJQUFJLENBQUM7QUFDaEQ7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZk4sZ0NBQWdDLEVBQWhDQSxnQ0FBZ0M7RUFDaENHLHVCQUF1QixFQUF2QkEsdUJBQXVCO0VBQ3ZCSSw2QkFBNkIsRUFBRSxjQUFjO0VBQzdDQyx1QkFBdUIsRUFBRTtBQUMzQixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZXhlY3V0aW9uUnVuQ29tbWl0bWVudC5qcz9lZTEyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBIdWIgRXhlY3V0aW9uUnVuIGRpZ2VzdHMg4oCUIHJlLWV4cG9ydCBjb3JlIGJyaWRnZSBzbyBsb2NhbCBhbmQgaHViIHNoYXJlIGJ5dGVzLlxuICpcbiAqIEBzZWUgQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9leGVjdXRpb25SdW5CcmlkZ2VcbiAqL1xuXG5sZXQgYnJpZGdlID0gbnVsbDtcbnRyeSB7XG4gIGJyaWRnZSA9IHJlcXVpcmUoJ0BmYWJyaWMvY29yZS9mdW5jdGlvbnMvZXhlY3V0aW9uUnVuQnJpZGdlJyk7XG59IGNhdGNoIChfKSB7XG4gIGJyaWRnZSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIF9icmlkZ2UgKCkge1xuICBpZiAoIWJyaWRnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9leGVjdXRpb25SdW5CcmlkZ2UgcmVxdWlyZWQg4oCUIG5wbSBydW4gbGluazpmYWJyaWMnKTtcbiAgfVxuICByZXR1cm4gYnJpZGdlO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRXhlY3V0aW9uUnVuQ29tbWl0bWVudEhleCAoY29udHJhY3RJZCwgcmVzdWx0KSB7XG4gIHJldHVybiBfYnJpZGdlKCkuY29tcHV0ZUV4ZWN1dGlvblJ1bkNvbW1pdG1lbnRIZXgoY29udHJhY3RJZCwgcmVzdWx0KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRFeGVjdXRpb25SdW5PdXRwdXQgKG9wdHMpIHtcbiAgcmV0dXJuIF9icmlkZ2UoKS5idWlsZEV4ZWN1dGlvblJ1bk91dHB1dChvcHRzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNvbXB1dGVFeGVjdXRpb25SdW5Db21taXRtZW50SGV4LFxuICBidWlsZEV4ZWN1dGlvblJ1bk91dHB1dCxcbiAgRVhFQ1VUSU9OX1JVTl9DT01NSVRNRU5UX0tJTkQ6ICdFeGVjdXRpb25SdW4nLFxuICBGQUJSSUNfUFJPR1JBTV9SVU5fS0lORDogJ0ZhYnJpY1Byb2dyYW1SdW4nXG59O1xuIl0sIm5hbWVzIjpbImJyaWRnZSIsInJlcXVpcmUiLCJfIiwiX2JyaWRnZSIsIkVycm9yIiwiY29tcHV0ZUV4ZWN1dGlvblJ1bkNvbW1pdG1lbnRIZXgiLCJjb250cmFjdElkIiwicmVzdWx0IiwiYnVpbGRFeGVjdXRpb25SdW5PdXRwdXQiLCJvcHRzIiwibW9kdWxlIiwiZXhwb3J0cyIsIkVYRUNVVElPTl9SVU5fQ09NTUlUTUVOVF9LSU5EIiwiRkFCUklDX1BST0dSQU1fUlVOX0tJTkQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/executionRunCommitment.js\n\n}")},"./functions/fabricAccountDerivedIdentity.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * Fabric-protocol identity derivation: m/44'/{7777|7778}'/account'/0/0\n * (see `@fabric/core` IDENTITY.md / `fabricIdentityDerivationPath`).\n * Bitcoin payments still derive under the Fabric *master* key via deriveFabricBitcoinAccountKeys.\n *\n * Default coin type remains **7778** (non-mainnet / development) for back-compat with existing\n * Hub local identities. Pass `networkOrCoinType` (`mainnet` / `7777` / …) for mainnet paths.\n */\nvar BIP32 = (__webpack_require__(/*! bip32 */ \"./node_modules/bip32/src/index.js\")[\"default\"]);\nvar ecc = __webpack_require__(/*! @fabric/core/types/ecc */ \"./node_modules/@fabric/core/types/ecc.js\");\nvar Hash256 = __webpack_require__(/*! @fabric/core/types/hash256 */ \"./node_modules/@fabric/core/types/hash256.js\");\nvar Bech32 = __webpack_require__(/*! @fabric/core/types/bech32 */ \"./node_modules/@fabric/core/types/bech32.js\");\nvar _require = __webpack_require__(/*! @fabric/core/constants */ \"./node_modules/@fabric/core/constants.js\"),\n fabricIdentityDerivationPath = _require.fabricIdentityDerivationPath,\n FABRIC_COIN_TYPE_TESTNET = _require.FABRIC_COIN_TYPE_TESTNET;\n\n/** Same bip32 network buckets as bitcoinClient#getNetworkFromXpub (extended keys only). */\nfunction bip32DecodeNetworkFromXKey(referenceXkey) {\n var raw = String(referenceXkey || '').trim();\n var isTest = raw.startsWith('tpub') || raw.startsWith('upub') || raw.startsWith('vpub') || raw.startsWith('tprv');\n return isTest ? {\n bech32: 'tb',\n bip32: {\n \"public\": 0x043587cf,\n \"private\": 0x04358394\n },\n pubKeyHash: 0x6f,\n scriptHash: 0xc4,\n wif: 0xef\n } : {\n bech32: 'bc',\n bip32: {\n \"public\": 0x0488b21e,\n \"private\": 0x0488ade4\n },\n pubKeyHash: 0x00,\n scriptHash: 0x05,\n wif: 0x80\n };\n}\n\n/**\n * Default Fabric purpose path (coin type 7778). Kept name for call-site compatibility.\n * @param {number} accountIndex\n * @param {number} addressIndex\n * @param {string|number} [networkOrCoinType=FABRIC_COIN_TYPE_TESTNET]\n * @returns {string}\n */\nfunction fabricPurposePath7778(accountIndex, addressIndex) {\n var networkOrCoinType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : FABRIC_COIN_TYPE_TESTNET;\n return fabricIdentityDerivationPath(accountIndex, addressIndex, networkOrCoinType);\n}\nfunction fabricBech32IdFromCompressedPubHex(compressedPubHex) {\n var hex = String(compressedPubHex || '').trim().toLowerCase();\n // Strict compressed secp256k1 pubkey: 33 bytes, prefix 02/03 — reject malformed hex early.\n if (!/^(02|03)[0-9a-f]{64}$/.test(hex)) {\n throw new Error('Expected compressed secp256k1 pubkey hex (66 chars, 02/03 prefix).');\n }\n var input = Buffer.from(hex, 'hex');\n if (input.length !== 33) throw new Error('Missing pubkey bytes.');\n var pubkeyhash = Hash256.digest(input);\n return new Bech32({\n hrp: 'id',\n content: pubkeyhash\n }).toString();\n}\nfunction fabricRootXpubFromMasterXprv(masterXprv) {\n if (!masterXprv || typeof masterXprv !== 'string') throw new Error('Master xpriv required.');\n var net = bip32DecodeNetworkFromXKey(masterXprv.trim());\n var bip32 = new BIP32(ecc);\n var root = bip32.fromBase58(String(masterXprv).trim(), net);\n return root.neutered().toBase58();\n}\n\n/**\n * Primary Fabric identity signing material at account slot\n * (protocol path m/44'/{7777|7778}'/n'/0/0; default 7778).\n * @param {string} masterXprv\n * @param {number} [fabricAccountIndex=0]\n * @param {number} [addressIndex=0]\n * @param {string|number} [networkOrCoinType] Network name or explicit coin type; omit for 7778.\n */\nfunction deriveFabricAccountIdentityKeys(masterXprv, fabricAccountIndex, addressIndex, networkOrCoinType) {\n if (!masterXprv || typeof masterXprv !== 'string') throw new Error('Master xpriv required.');\n var ai = fabricAccountIndex == null ? 0 : Math.floor(Number(fabricAccountIndex));\n if (!Number.isFinite(ai) || ai < 0) throw new Error('Invalid Fabric account index.');\n var adr = addressIndex != null ? Math.floor(Number(addressIndex)) : 0;\n if (!Number.isFinite(adr) || adr < 0) throw new Error('Invalid Fabric address index.');\n var trimmed = String(masterXprv).trim();\n var net = bip32DecodeNetworkFromXKey(trimmed);\n var bip32 = new BIP32(ecc);\n var masterNode = bip32.fromBase58(trimmed, net);\n var path = fabricIdentityDerivationPath(ai, adr, networkOrCoinType != null ? networkOrCoinType : FABRIC_COIN_TYPE_TESTNET);\n var node = masterNode.derivePath(path);\n var pubHex = Buffer.from(node.publicKey).toString('hex');\n return {\n fabricAccountIndex: ai,\n path: path,\n xprv: node.toBase58(),\n xpub: node.neutered().toBase58(),\n id: fabricBech32IdFromCompressedPubHex(pubHex),\n pubkeyHexCompressed: pubHex\n };\n}\n\n/**\n * Interpret an extended private key as the Fabric protocol signing node\n * (m/44'/{7777|7778}'/n'/0/0), e.g. from an account-only backup.\n * Does not accept a raw HD master for this path.\n */\nfunction identityFromFabricProtocolSigningXprv(accountNodeXprv) {\n var trimmed = String(accountNodeXprv || '').trim();\n if (!trimmed) throw new Error('Account xprv required.');\n var net = bip32DecodeNetworkFromXKey(trimmed);\n var bip32 = new BIP32(ecc);\n var node = bip32.fromBase58(trimmed, net);\n var pubHex = Buffer.from(node.publicKey).toString('hex');\n return {\n fabricHdRole: 'accountNode',\n xprv: trimmed,\n xpub: node.neutered().toBase58(),\n id: fabricBech32IdFromCompressedPubHex(pubHex),\n pubkeyHexCompressed: pubHex\n };\n}\nmodule.exports = {\n fabricPurposePath7778: fabricPurposePath7778,\n fabricRootXpubFromMasterXprv: fabricRootXpubFromMasterXprv,\n deriveFabricAccountIdentityKeys: deriveFabricAccountIdentityKeys,\n fabricBech32IdFromCompressedPubHex: fabricBech32IdFromCompressedPubHex,\n bip32DecodeNetworkFromXKey: bip32DecodeNetworkFromXKey,\n identityFromFabricProtocolSigningXprv: identityFromFabricProtocolSigningXprv\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljQWNjb3VudERlcml2ZWRJZGVudGl0eS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLElBQU1BLEtBQUssR0FBR0Msa0ZBQXdCO0FBQ3RDLElBQU1DLEdBQUcsR0FBR0QsbUJBQU8sQ0FBQyx3RUFBd0IsQ0FBQztBQUM3QyxJQUFNRSxPQUFPLEdBQUdGLG1CQUFPLENBQUMsZ0ZBQTRCLENBQUM7QUFDckQsSUFBTUcsTUFBTSxHQUFHSCxtQkFBTyxDQUFDLDhFQUEyQixDQUFDO0FBQ25ELElBQUFJLFFBQUEsR0FHSUosbUJBQU8sQ0FBQyx3RUFBd0IsQ0FBQztFQUZuQ0ssNEJBQTRCLEdBQUFELFFBQUEsQ0FBNUJDLDRCQUE0QjtFQUM1QkMsd0JBQXdCLEdBQUFGLFFBQUEsQ0FBeEJFLHdCQUF3Qjs7QUFHMUI7QUFDQSxTQUFTQywwQkFBMEJBLENBQUVDLGFBQWEsRUFBRTtFQUNsRCxJQUFNQyxHQUFHLEdBQUdDLE1BQU0sQ0FBQ0YsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDRyxJQUFJLENBQUMsQ0FBQztFQUM5QyxJQUFNQyxNQUFNLEdBQ1ZILEdBQUcsQ0FBQ0ksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJSixHQUFHLENBQUNJLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSUosR0FBRyxDQUFDSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQzFFSixHQUFHLENBQUNJLFVBQVUsQ0FBQyxNQUFNLENBQUM7RUFDeEIsT0FBT0QsTUFBTSxHQUNUO0lBQ0FFLE1BQU0sRUFBRSxJQUFJO0lBQ1pDLEtBQUssRUFBRTtNQUFFLFVBQVEsVUFBVTtNQUFFLFdBQVM7SUFBVyxDQUFDO0lBQ2xEQyxVQUFVLEVBQUUsSUFBSTtJQUNoQkMsVUFBVSxFQUFFLElBQUk7SUFDaEJDLEdBQUcsRUFBRTtFQUNQLENBQUMsR0FDQztJQUNBSixNQUFNLEVBQUUsSUFBSTtJQUNaQyxLQUFLLEVBQUU7TUFBRSxVQUFRLFVBQVU7TUFBRSxXQUFTO0lBQVcsQ0FBQztJQUNsREMsVUFBVSxFQUFFLElBQUk7SUFDaEJDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCQyxHQUFHLEVBQUU7RUFDUCxDQUFDO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxxQkFBcUJBLENBQUVDLFlBQVksRUFBRUMsWUFBWSxFQUFnRDtFQUFBLElBQTlDQyxpQkFBaUIsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUdqQix3QkFBd0I7RUFDdEcsT0FBT0QsNEJBQTRCLENBQUNlLFlBQVksRUFBRUMsWUFBWSxFQUFFQyxpQkFBaUIsQ0FBQztBQUNwRjtBQUVBLFNBQVNJLGtDQUFrQ0EsQ0FBRUMsZ0JBQWdCLEVBQUU7RUFDN0QsSUFBTUMsR0FBRyxHQUFHbEIsTUFBTSxDQUFDaUIsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDa0IsV0FBVyxDQUFDLENBQUM7RUFDL0Q7RUFDQSxJQUFJLENBQUMsdUJBQXVCLENBQUNDLElBQUksQ0FBQ0YsR0FBRyxDQUFDLEVBQUU7SUFDdEMsTUFBTSxJQUFJRyxLQUFLLENBQUMsb0VBQW9FLENBQUM7RUFDdkY7RUFDQSxJQUFNQyxLQUFLLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDTixHQUFHLEVBQUUsS0FBSyxDQUFDO0VBQ3JDLElBQUlJLEtBQUssQ0FBQ1IsTUFBTSxLQUFLLEVBQUUsRUFBRSxNQUFNLElBQUlPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztFQUNqRSxJQUFNSSxVQUFVLEdBQUdqQyxPQUFPLENBQUNrQyxNQUFNLENBQUNKLEtBQUssQ0FBQztFQUN4QyxPQUFPLElBQUk3QixNQUFNLENBQUM7SUFBRWtDLEdBQUcsRUFBRSxJQUFJO0lBQUVDLE9BQU8sRUFBRUg7RUFBVyxDQUFDLENBQUMsQ0FBQ0ksUUFBUSxDQUFDLENBQUM7QUFDbEU7QUFFQSxTQUFTQyw0QkFBNEJBLENBQUVDLFVBQVUsRUFBRTtFQUNqRCxJQUFJLENBQUNBLFVBQVUsSUFBSSxPQUFPQSxVQUFVLEtBQUssUUFBUSxFQUFFLE1BQU0sSUFBSVYsS0FBSyxDQUFDLHdCQUF3QixDQUFDO0VBQzVGLElBQU1XLEdBQUcsR0FBR25DLDBCQUEwQixDQUFDa0MsVUFBVSxDQUFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUN6RCxJQUFNSSxLQUFLLEdBQUcsSUFBSWhCLEtBQUssQ0FBQ0UsR0FBRyxDQUFDO0VBQzVCLElBQU0wQyxJQUFJLEdBQUc1QixLQUFLLENBQUM2QixVQUFVLENBQUNsQyxNQUFNLENBQUMrQixVQUFVLENBQUMsQ0FBQzlCLElBQUksQ0FBQyxDQUFDLEVBQUUrQixHQUFHLENBQUM7RUFDN0QsT0FBT0MsSUFBSSxDQUFDRSxRQUFRLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsQ0FBQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsK0JBQStCQSxDQUFFTixVQUFVLEVBQUVPLGtCQUFrQixFQUFFM0IsWUFBWSxFQUFFQyxpQkFBaUIsRUFBRTtFQUN6RyxJQUFJLENBQUNtQixVQUFVLElBQUksT0FBT0EsVUFBVSxLQUFLLFFBQVEsRUFBRSxNQUFNLElBQUlWLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztFQUM1RixJQUFNa0IsRUFBRSxHQUFHRCxrQkFBa0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHRSxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDSixrQkFBa0IsQ0FBQyxDQUFDO0VBQ2xGLElBQUksQ0FBQ0ksTUFBTSxDQUFDQyxRQUFRLENBQUNKLEVBQUUsQ0FBQyxJQUFJQSxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSWxCLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztFQUNwRixJQUFNdUIsR0FBRyxHQUFHakMsWUFBWSxJQUFJLElBQUksR0FBRzZCLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxNQUFNLENBQUMvQixZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUM7RUFDdkUsSUFBSSxDQUFDK0IsTUFBTSxDQUFDQyxRQUFRLENBQUNDLEdBQUcsQ0FBQyxJQUFJQSxHQUFHLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSXZCLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztFQUN0RixJQUFNd0IsT0FBTyxHQUFHN0MsTUFBTSxDQUFDK0IsVUFBVSxDQUFDLENBQUM5QixJQUFJLENBQUMsQ0FBQztFQUN6QyxJQUFNK0IsR0FBRyxHQUFHbkMsMEJBQTBCLENBQUNnRCxPQUFPLENBQUM7RUFDL0MsSUFBTXhDLEtBQUssR0FBRyxJQUFJaEIsS0FBSyxDQUFDRSxHQUFHLENBQUM7RUFDNUIsSUFBTXVELFVBQVUsR0FBR3pDLEtBQUssQ0FBQzZCLFVBQVUsQ0FBQ1csT0FBTyxFQUFFYixHQUFHLENBQUM7RUFDakQsSUFBTWUsSUFBSSxHQUFHcEQsNEJBQTRCLENBQ3ZDNEMsRUFBRSxFQUNGSyxHQUFHLEVBQ0hoQyxpQkFBaUIsSUFBSSxJQUFJLEdBQUdBLGlCQUFpQixHQUFHaEIsd0JBQ2xELENBQUM7RUFDRCxJQUFNb0QsSUFBSSxHQUFHRixVQUFVLENBQUNHLFVBQVUsQ0FBQ0YsSUFBSSxDQUFDO0VBQ3hDLElBQU1HLE1BQU0sR0FBRzNCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDd0IsSUFBSSxDQUFDRyxTQUFTLENBQUMsQ0FBQ3RCLFFBQVEsQ0FBQyxLQUFLLENBQUM7RUFDMUQsT0FBTztJQUNMUyxrQkFBa0IsRUFBRUMsRUFBRTtJQUN0QlEsSUFBSSxFQUFKQSxJQUFJO0lBQ0pLLElBQUksRUFBRUosSUFBSSxDQUFDWixRQUFRLENBQUMsQ0FBQztJQUNyQmlCLElBQUksRUFBRUwsSUFBSSxDQUFDYixRQUFRLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsQ0FBQztJQUNoQ2tCLEVBQUUsRUFBRXRDLGtDQUFrQyxDQUFDa0MsTUFBTSxDQUFDO0lBQzlDSyxtQkFBbUIsRUFBRUw7RUFDdkIsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTTSxxQ0FBcUNBLENBQUVDLGVBQWUsRUFBRTtFQUMvRCxJQUFNWixPQUFPLEdBQUc3QyxNQUFNLENBQUN5RCxlQUFlLElBQUksRUFBRSxDQUFDLENBQUN4RCxJQUFJLENBQUMsQ0FBQztFQUNwRCxJQUFJLENBQUM0QyxPQUFPLEVBQUUsTUFBTSxJQUFJeEIsS0FBSyxDQUFDLHdCQUF3QixDQUFDO0VBQ3ZELElBQU1XLEdBQUcsR0FBR25DLDBCQUEwQixDQUFDZ0QsT0FBTyxDQUFDO0VBQy9DLElBQU14QyxLQUFLLEdBQUcsSUFBSWhCLEtBQUssQ0FBQ0UsR0FBRyxDQUFDO0VBQzVCLElBQU15RCxJQUFJLEdBQUczQyxLQUFLLENBQUM2QixVQUFVLENBQUNXLE9BQU8sRUFBRWIsR0FBRyxDQUFDO0VBQzNDLElBQU1rQixNQUFNLEdBQUczQixNQUFNLENBQUNDLElBQUksQ0FBQ3dCLElBQUksQ0FBQ0csU0FBUyxDQUFDLENBQUN0QixRQUFRLENBQUMsS0FBSyxDQUFDO0VBQzFELE9BQU87SUFDTDZCLFlBQVksRUFBRSxhQUFhO0lBQzNCTixJQUFJLEVBQUVQLE9BQU87SUFDYlEsSUFBSSxFQUFFTCxJQUFJLENBQUNiLFFBQVEsQ0FBQyxDQUFDLENBQUNDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDa0IsRUFBRSxFQUFFdEMsa0NBQWtDLENBQUNrQyxNQUFNLENBQUM7SUFDOUNLLG1CQUFtQixFQUFFTDtFQUN2QixDQUFDO0FBQ0g7QUFFQVMsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZm5ELHFCQUFxQixFQUFyQkEscUJBQXFCO0VBQ3JCcUIsNEJBQTRCLEVBQTVCQSw0QkFBNEI7RUFDNUJPLCtCQUErQixFQUEvQkEsK0JBQStCO0VBQy9CckIsa0NBQWtDLEVBQWxDQSxrQ0FBa0M7RUFDbENuQiwwQkFBMEIsRUFBMUJBLDBCQUEwQjtFQUMxQjJELHFDQUFxQyxFQUFyQ0E7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljQWNjb3VudERlcml2ZWRJZGVudGl0eS5qcz9lMDM2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBGYWJyaWMtcHJvdG9jb2wgaWRlbnRpdHkgZGVyaXZhdGlvbjogbS80NCcvezc3Nzd8Nzc3OH0nL2FjY291bnQnLzAvMFxuICogKHNlZSBgQGZhYnJpYy9jb3JlYCBJREVOVElUWS5tZCAvIGBmYWJyaWNJZGVudGl0eURlcml2YXRpb25QYXRoYCkuXG4gKiBCaXRjb2luIHBheW1lbnRzIHN0aWxsIGRlcml2ZSB1bmRlciB0aGUgRmFicmljICptYXN0ZXIqIGtleSB2aWEgZGVyaXZlRmFicmljQml0Y29pbkFjY291bnRLZXlzLlxuICpcbiAqIERlZmF1bHQgY29pbiB0eXBlIHJlbWFpbnMgKio3Nzc4KiogKG5vbi1tYWlubmV0IC8gZGV2ZWxvcG1lbnQpIGZvciBiYWNrLWNvbXBhdCB3aXRoIGV4aXN0aW5nXG4gKiBIdWIgbG9jYWwgaWRlbnRpdGllcy4gUGFzcyBgbmV0d29ya09yQ29pblR5cGVgIChgbWFpbm5ldGAgLyBgNzc3N2AgLyDigKYpIGZvciBtYWlubmV0IHBhdGhzLlxuICovXG5cbmNvbnN0IEJJUDMyID0gcmVxdWlyZSgnYmlwMzInKS5kZWZhdWx0O1xuY29uc3QgZWNjID0gcmVxdWlyZSgnQGZhYnJpYy9jb3JlL3R5cGVzL2VjYycpO1xuY29uc3QgSGFzaDI1NiA9IHJlcXVpcmUoJ0BmYWJyaWMvY29yZS90eXBlcy9oYXNoMjU2Jyk7XG5jb25zdCBCZWNoMzIgPSByZXF1aXJlKCdAZmFicmljL2NvcmUvdHlwZXMvYmVjaDMyJyk7XG5jb25zdCB7XG4gIGZhYnJpY0lkZW50aXR5RGVyaXZhdGlvblBhdGgsXG4gIEZBQlJJQ19DT0lOX1RZUEVfVEVTVE5FVFxufSA9IHJlcXVpcmUoJ0BmYWJyaWMvY29yZS9jb25zdGFudHMnKTtcblxuLyoqIFNhbWUgYmlwMzIgbmV0d29yayBidWNrZXRzIGFzIGJpdGNvaW5DbGllbnQjZ2V0TmV0d29ya0Zyb21YcHViIChleHRlbmRlZCBrZXlzIG9ubHkpLiAqL1xuZnVuY3Rpb24gYmlwMzJEZWNvZGVOZXR3b3JrRnJvbVhLZXkgKHJlZmVyZW5jZVhrZXkpIHtcbiAgY29uc3QgcmF3ID0gU3RyaW5nKHJlZmVyZW5jZVhrZXkgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgaXNUZXN0ID1cbiAgICByYXcuc3RhcnRzV2l0aCgndHB1YicpIHx8IHJhdy5zdGFydHNXaXRoKCd1cHViJykgfHwgcmF3LnN0YXJ0c1dpdGgoJ3ZwdWInKSB8fFxuICAgIHJhdy5zdGFydHNXaXRoKCd0cHJ2Jyk7XG4gIHJldHVybiBpc1Rlc3RcbiAgICA/IHtcbiAgICAgIGJlY2gzMjogJ3RiJyxcbiAgICAgIGJpcDMyOiB7IHB1YmxpYzogMHgwNDM1ODdjZiwgcHJpdmF0ZTogMHgwNDM1ODM5NCB9LFxuICAgICAgcHViS2V5SGFzaDogMHg2ZixcbiAgICAgIHNjcmlwdEhhc2g6IDB4YzQsXG4gICAgICB3aWY6IDB4ZWZcbiAgICB9XG4gICAgOiB7XG4gICAgICBiZWNoMzI6ICdiYycsXG4gICAgICBiaXAzMjogeyBwdWJsaWM6IDB4MDQ4OGIyMWUsIHByaXZhdGU6IDB4MDQ4OGFkZTQgfSxcbiAgICAgIHB1YktleUhhc2g6IDB4MDAsXG4gICAgICBzY3JpcHRIYXNoOiAweDA1LFxuICAgICAgd2lmOiAweDgwXG4gICAgfTtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IEZhYnJpYyBwdXJwb3NlIHBhdGggKGNvaW4gdHlwZSA3Nzc4KS4gS2VwdCBuYW1lIGZvciBjYWxsLXNpdGUgY29tcGF0aWJpbGl0eS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhY2NvdW50SW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBhZGRyZXNzSW5kZXhcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW25ldHdvcmtPckNvaW5UeXBlPUZBQlJJQ19DT0lOX1RZUEVfVEVTVE5FVF1cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZhYnJpY1B1cnBvc2VQYXRoNzc3OCAoYWNjb3VudEluZGV4LCBhZGRyZXNzSW5kZXgsIG5ldHdvcmtPckNvaW5UeXBlID0gRkFCUklDX0NPSU5fVFlQRV9URVNUTkVUKSB7XG4gIHJldHVybiBmYWJyaWNJZGVudGl0eURlcml2YXRpb25QYXRoKGFjY291bnRJbmRleCwgYWRkcmVzc0luZGV4LCBuZXR3b3JrT3JDb2luVHlwZSk7XG59XG5cbmZ1bmN0aW9uIGZhYnJpY0JlY2gzMklkRnJvbUNvbXByZXNzZWRQdWJIZXggKGNvbXByZXNzZWRQdWJIZXgpIHtcbiAgY29uc3QgaGV4ID0gU3RyaW5nKGNvbXByZXNzZWRQdWJIZXggfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAvLyBTdHJpY3QgY29tcHJlc3NlZCBzZWNwMjU2azEgcHVia2V5OiAzMyBieXRlcywgcHJlZml4IDAyLzAzIOKAlCByZWplY3QgbWFsZm9ybWVkIGhleCBlYXJseS5cbiAgaWYgKCEvXigwMnwwMylbMC05YS1mXXs2NH0kLy50ZXN0KGhleCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGNvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmtleSBoZXggKDY2IGNoYXJzLCAwMi8wMyBwcmVmaXgpLicpO1xuICB9XG4gIGNvbnN0IGlucHV0ID0gQnVmZmVyLmZyb20oaGV4LCAnaGV4Jyk7XG4gIGlmIChpbnB1dC5sZW5ndGggIT09IDMzKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHVia2V5IGJ5dGVzLicpO1xuICBjb25zdCBwdWJrZXloYXNoID0gSGFzaDI1Ni5kaWdlc3QoaW5wdXQpO1xuICByZXR1cm4gbmV3IEJlY2gzMih7IGhycDogJ2lkJywgY29udGVudDogcHVia2V5aGFzaCB9KS50b1N0cmluZygpO1xufVxuXG5mdW5jdGlvbiBmYWJyaWNSb290WHB1YkZyb21NYXN0ZXJYcHJ2IChtYXN0ZXJYcHJ2KSB7XG4gIGlmICghbWFzdGVyWHBydiB8fCB0eXBlb2YgbWFzdGVyWHBydiAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFcnJvcignTWFzdGVyIHhwcml2IHJlcXVpcmVkLicpO1xuICBjb25zdCBuZXQgPSBiaXAzMkRlY29kZU5ldHdvcmtGcm9tWEtleShtYXN0ZXJYcHJ2LnRyaW0oKSk7XG4gIGNvbnN0IGJpcDMyID0gbmV3IEJJUDMyKGVjYyk7XG4gIGNvbnN0IHJvb3QgPSBiaXAzMi5mcm9tQmFzZTU4KFN0cmluZyhtYXN0ZXJYcHJ2KS50cmltKCksIG5ldCk7XG4gIHJldHVybiByb290Lm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcbn1cblxuLyoqXG4gKiBQcmltYXJ5IEZhYnJpYyBpZGVudGl0eSBzaWduaW5nIG1hdGVyaWFsIGF0IGFjY291bnQgc2xvdFxuICogKHByb3RvY29sIHBhdGggbS80NCcvezc3Nzd8Nzc3OH0nL24nLzAvMDsgZGVmYXVsdCA3Nzc4KS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXN0ZXJYcHJ2XG4gKiBAcGFyYW0ge251bWJlcn0gW2ZhYnJpY0FjY291bnRJbmRleD0wXVxuICogQHBhcmFtIHtudW1iZXJ9IFthZGRyZXNzSW5kZXg9MF1cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW25ldHdvcmtPckNvaW5UeXBlXSBOZXR3b3JrIG5hbWUgb3IgZXhwbGljaXQgY29pbiB0eXBlOyBvbWl0IGZvciA3Nzc4LlxuICovXG5mdW5jdGlvbiBkZXJpdmVGYWJyaWNBY2NvdW50SWRlbnRpdHlLZXlzIChtYXN0ZXJYcHJ2LCBmYWJyaWNBY2NvdW50SW5kZXgsIGFkZHJlc3NJbmRleCwgbmV0d29ya09yQ29pblR5cGUpIHtcbiAgaWYgKCFtYXN0ZXJYcHJ2IHx8IHR5cGVvZiBtYXN0ZXJYcHJ2ICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVycm9yKCdNYXN0ZXIgeHByaXYgcmVxdWlyZWQuJyk7XG4gIGNvbnN0IGFpID0gZmFicmljQWNjb3VudEluZGV4ID09IG51bGwgPyAwIDogTWF0aC5mbG9vcihOdW1iZXIoZmFicmljQWNjb3VudEluZGV4KSk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGFpKSB8fCBhaSA8IDApIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBGYWJyaWMgYWNjb3VudCBpbmRleC4nKTtcbiAgY29uc3QgYWRyID0gYWRkcmVzc0luZGV4ICE9IG51bGwgPyBNYXRoLmZsb29yKE51bWJlcihhZGRyZXNzSW5kZXgpKSA6IDA7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGFkcikgfHwgYWRyIDwgMCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEZhYnJpYyBhZGRyZXNzIGluZGV4LicpO1xuICBjb25zdCB0cmltbWVkID0gU3RyaW5nKG1hc3RlclhwcnYpLnRyaW0oKTtcbiAgY29uc3QgbmV0ID0gYmlwMzJEZWNvZGVOZXR3b3JrRnJvbVhLZXkodHJpbW1lZCk7XG4gIGNvbnN0IGJpcDMyID0gbmV3IEJJUDMyKGVjYyk7XG4gIGNvbnN0IG1hc3Rlck5vZGUgPSBiaXAzMi5mcm9tQmFzZTU4KHRyaW1tZWQsIG5ldCk7XG4gIGNvbnN0IHBhdGggPSBmYWJyaWNJZGVudGl0eURlcml2YXRpb25QYXRoKFxuICAgIGFpLFxuICAgIGFkcixcbiAgICBuZXR3b3JrT3JDb2luVHlwZSAhPSBudWxsID8gbmV0d29ya09yQ29pblR5cGUgOiBGQUJSSUNfQ09JTl9UWVBFX1RFU1RORVRcbiAgKTtcbiAgY29uc3Qgbm9kZSA9IG1hc3Rlck5vZGUuZGVyaXZlUGF0aChwYXRoKTtcbiAgY29uc3QgcHViSGV4ID0gQnVmZmVyLmZyb20obm9kZS5wdWJsaWNLZXkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgcmV0dXJuIHtcbiAgICBmYWJyaWNBY2NvdW50SW5kZXg6IGFpLFxuICAgIHBhdGgsXG4gICAgeHBydjogbm9kZS50b0Jhc2U1OCgpLFxuICAgIHhwdWI6IG5vZGUubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgIGlkOiBmYWJyaWNCZWNoMzJJZEZyb21Db21wcmVzc2VkUHViSGV4KHB1YkhleCksXG4gICAgcHVia2V5SGV4Q29tcHJlc3NlZDogcHViSGV4XG4gIH07XG59XG5cbi8qKlxuICogSW50ZXJwcmV0IGFuIGV4dGVuZGVkIHByaXZhdGUga2V5IGFzIHRoZSBGYWJyaWMgcHJvdG9jb2wgc2lnbmluZyBub2RlXG4gKiAobS80NCcvezc3Nzd8Nzc3OH0nL24nLzAvMCksIGUuZy4gZnJvbSBhbiBhY2NvdW50LW9ubHkgYmFja3VwLlxuICogRG9lcyBub3QgYWNjZXB0IGEgcmF3IEhEIG1hc3RlciBmb3IgdGhpcyBwYXRoLlxuICovXG5mdW5jdGlvbiBpZGVudGl0eUZyb21GYWJyaWNQcm90b2NvbFNpZ25pbmdYcHJ2IChhY2NvdW50Tm9kZVhwcnYpIHtcbiAgY29uc3QgdHJpbW1lZCA9IFN0cmluZyhhY2NvdW50Tm9kZVhwcnYgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkKSB0aHJvdyBuZXcgRXJyb3IoJ0FjY291bnQgeHBydiByZXF1aXJlZC4nKTtcbiAgY29uc3QgbmV0ID0gYmlwMzJEZWNvZGVOZXR3b3JrRnJvbVhLZXkodHJpbW1lZCk7XG4gIGNvbnN0IGJpcDMyID0gbmV3IEJJUDMyKGVjYyk7XG4gIGNvbnN0IG5vZGUgPSBiaXAzMi5mcm9tQmFzZTU4KHRyaW1tZWQsIG5ldCk7XG4gIGNvbnN0IHB1YkhleCA9IEJ1ZmZlci5mcm9tKG5vZGUucHVibGljS2V5KS50b1N0cmluZygnaGV4Jyk7XG4gIHJldHVybiB7XG4gICAgZmFicmljSGRSb2xlOiAnYWNjb3VudE5vZGUnLFxuICAgIHhwcnY6IHRyaW1tZWQsXG4gICAgeHB1Yjogbm9kZS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCksXG4gICAgaWQ6IGZhYnJpY0JlY2gzMklkRnJvbUNvbXByZXNzZWRQdWJIZXgocHViSGV4KSxcbiAgICBwdWJrZXlIZXhDb21wcmVzc2VkOiBwdWJIZXhcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZhYnJpY1B1cnBvc2VQYXRoNzc3OCxcbiAgZmFicmljUm9vdFhwdWJGcm9tTWFzdGVyWHBydixcbiAgZGVyaXZlRmFicmljQWNjb3VudElkZW50aXR5S2V5cyxcbiAgZmFicmljQmVjaDMySWRGcm9tQ29tcHJlc3NlZFB1YkhleCxcbiAgYmlwMzJEZWNvZGVOZXR3b3JrRnJvbVhLZXksXG4gIGlkZW50aXR5RnJvbUZhYnJpY1Byb3RvY29sU2lnbmluZ1hwcnZcbn07XG4iXSwibmFtZXMiOlsiQklQMzIiLCJyZXF1aXJlIiwiZWNjIiwiSGFzaDI1NiIsIkJlY2gzMiIsIl9yZXF1aXJlIiwiZmFicmljSWRlbnRpdHlEZXJpdmF0aW9uUGF0aCIsIkZBQlJJQ19DT0lOX1RZUEVfVEVTVE5FVCIsImJpcDMyRGVjb2RlTmV0d29ya0Zyb21YS2V5IiwicmVmZXJlbmNlWGtleSIsInJhdyIsIlN0cmluZyIsInRyaW0iLCJpc1Rlc3QiLCJzdGFydHNXaXRoIiwiYmVjaDMyIiwiYmlwMzIiLCJwdWJLZXlIYXNoIiwic2NyaXB0SGFzaCIsIndpZiIsImZhYnJpY1B1cnBvc2VQYXRoNzc3OCIsImFjY291bnRJbmRleCIsImFkZHJlc3NJbmRleCIsIm5ldHdvcmtPckNvaW5UeXBlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZmFicmljQmVjaDMySWRGcm9tQ29tcHJlc3NlZFB1YkhleCIsImNvbXByZXNzZWRQdWJIZXgiLCJoZXgiLCJ0b0xvd2VyQ2FzZSIsInRlc3QiLCJFcnJvciIsImlucHV0IiwiQnVmZmVyIiwiZnJvbSIsInB1YmtleWhhc2giLCJkaWdlc3QiLCJocnAiLCJjb250ZW50IiwidG9TdHJpbmciLCJmYWJyaWNSb290WHB1YkZyb21NYXN0ZXJYcHJ2IiwibWFzdGVyWHBydiIsIm5ldCIsInJvb3QiLCJmcm9tQmFzZTU4IiwibmV1dGVyZWQiLCJ0b0Jhc2U1OCIsImRlcml2ZUZhYnJpY0FjY291bnRJZGVudGl0eUtleXMiLCJmYWJyaWNBY2NvdW50SW5kZXgiLCJhaSIsIk1hdGgiLCJmbG9vciIsIk51bWJlciIsImlzRmluaXRlIiwiYWRyIiwidHJpbW1lZCIsIm1hc3Rlck5vZGUiLCJwYXRoIiwibm9kZSIsImRlcml2ZVBhdGgiLCJwdWJIZXgiLCJwdWJsaWNLZXkiLCJ4cHJ2IiwieHB1YiIsImlkIiwicHVia2V5SGV4Q29tcHJlc3NlZCIsImlkZW50aXR5RnJvbUZhYnJpY1Byb3RvY29sU2lnbmluZ1hwcnYiLCJhY2NvdW50Tm9kZVhwcnYiLCJmYWJyaWNIZFJvbGUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/fabricAccountDerivedIdentity.js\n\n}")},"./functions/fabricBridgeEnvelope.js"(module){"use strict";eval('{\n\n/**\n * Reversible JSON payloads for hub ↔ browser messaging inside a Fabric\n * `GenericMessage` body (transitional carrier — see MESSAGE_TRANSPORT.md).\n * Prefer promoting `fabricType` to a dedicated outer `Message.type` in @fabric/core when stable.\n *\n * @see MESSAGE_TRANSPORT.md\n * @see functions/fabricMessageRegistry.js\n */\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nvar SCHEMA = \'@fabric/BridgeEnvelope\';\nvar VERSION = 1;\n\n/**\n * @param {string} fabricType - Stable type id (e.g. HubClientChat, HubClientInventory).\n * @param {Object} payload - JSON-serializable payload (round-trips).\n * @param {Object} [meta] - Optional metadata (transport hints, idempotency keys, etc.)\n * @returns {Object} Object to JSON.stringify into GenericMessage body.\n */\nfunction createEnvelope(fabricType) {\n var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var meta = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var t = String(fabricType || \'\').trim();\n if (!t) throw new Error(\'fabricType required\');\n return _objectSpread(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, SCHEMA, true), "v", VERSION), "fabricType", t), "payload", payload && _typeof(payload) === \'object\' ? payload : {}), meta && _typeof(meta) === \'object\' ? {\n meta: meta\n } : {});\n}\nfunction tryParse(value) {\n if (!value || _typeof(value) !== \'object\' || Array.isArray(value)) return null;\n if (value[SCHEMA] !== true) return null;\n var v = Number(value.v);\n if (!Number.isFinite(v) || v < 1) return null;\n var fabricType = String(value.fabricType || \'\').trim();\n if (!fabricType) return null;\n var payload = value.payload && _typeof(value.payload) === \'object\' && !Array.isArray(value.payload) ? value.payload : {};\n return {\n v: v,\n fabricType: fabricType,\n payload: payload,\n meta: value.meta && _typeof(value.meta) === \'object\' ? value.meta : undefined\n };\n}\n\n/** @returns {string} body for Message.fromVector([\'GenericMessage\', body]) */\nfunction stringifyEnvelope(fabricType, payload, meta) {\n return JSON.stringify(createEnvelope(fabricType, payload, meta));\n}\nmodule.exports = {\n SCHEMA: SCHEMA,\n VERSION: VERSION,\n createEnvelope: createEnvelope,\n tryParse: tryParse,\n stringifyEnvelope: stringifyEnvelope\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljQnJpZGdlRW52ZWxvcGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBQUEsU0FBQUssUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBWCxDQUFBLEdBQUFTLE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFQLENBQUEsR0FBQUEsQ0FBQSxDQUFBWSxNQUFBLFdBQUFMLENBQUEsV0FBQUUsTUFBQSxDQUFBSSx3QkFBQSxDQUFBUCxDQUFBLEVBQUFDLENBQUEsRUFBQU8sVUFBQSxPQUFBTixDQUFBLENBQUFPLElBQUEsQ0FBQUMsS0FBQSxDQUFBUixDQUFBLEVBQUFSLENBQUEsWUFBQVEsQ0FBQTtBQUFBLFNBQUFTLGNBQUFYLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFXLFNBQUEsQ0FBQUMsTUFBQSxFQUFBWixDQUFBLFVBQUFDLENBQUEsV0FBQVUsU0FBQSxDQUFBWCxDQUFBLElBQUFXLFNBQUEsQ0FBQVgsQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFZLE9BQUEsV0FBQWIsQ0FBQSxJQUFBYyxlQUFBLENBQUFmLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYSx5QkFBQSxHQUFBYixNQUFBLENBQUFjLGdCQUFBLENBQUFqQixDQUFBLEVBQUFHLE1BQUEsQ0FBQWEseUJBQUEsQ0FBQWQsQ0FBQSxLQUFBSCxPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBWSxPQUFBLFdBQUFiLENBQUEsSUFBQUUsTUFBQSxDQUFBZSxjQUFBLENBQUFsQixDQUFBLEVBQUFDLENBQUEsRUFBQUUsTUFBQSxDQUFBSSx3QkFBQSxDQUFBTCxDQUFBLEVBQUFELENBQUEsaUJBQUFELENBQUE7QUFBQSxTQUFBZSxnQkFBQWYsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsWUFBQUQsQ0FBQSxHQUFBa0IsY0FBQSxDQUFBbEIsQ0FBQSxNQUFBRCxDQUFBLEdBQUFHLE1BQUEsQ0FBQWUsY0FBQSxDQUFBbEIsQ0FBQSxFQUFBQyxDQUFBLElBQUFtQixLQUFBLEVBQUFsQixDQUFBLEVBQUFNLFVBQUEsTUFBQWEsWUFBQSxNQUFBQyxRQUFBLFVBQUF0QixDQUFBLENBQUFDLENBQUEsSUFBQUMsQ0FBQSxFQUFBRixDQUFBO0FBQUEsU0FBQW1CLGVBQUFqQixDQUFBLFFBQUFxQixDQUFBLEdBQUFDLFlBQUEsQ0FBQXRCLENBQUEsZ0NBQUFULE9BQUEsQ0FBQThCLENBQUEsSUFBQUEsQ0FBQSxHQUFBQSxDQUFBO0FBQUEsU0FBQUMsYUFBQXRCLENBQUEsRUFBQUQsQ0FBQSxvQkFBQVIsT0FBQSxDQUFBUyxDQUFBLE1BQUFBLENBQUEsU0FBQUEsQ0FBQSxNQUFBRixDQUFBLEdBQUFFLENBQUEsQ0FBQVAsTUFBQSxDQUFBOEIsV0FBQSxrQkFBQXpCLENBQUEsUUFBQXVCLENBQUEsR0FBQXZCLENBQUEsQ0FBQTBCLElBQUEsQ0FBQXhCLENBQUEsRUFBQUQsQ0FBQSxnQ0FBQVIsT0FBQSxDQUFBOEIsQ0FBQSxVQUFBQSxDQUFBLFlBQUFJLFNBQUEseUVBQUExQixDQUFBLEdBQUEyQixNQUFBLEdBQUFDLE1BQUEsRUFBQTNCLENBQUE7QUFTQSxJQUFNNEIsTUFBTSxHQUFHLHdCQUF3QjtBQUN2QyxJQUFNQyxPQUFPLEdBQUcsQ0FBQzs7QUFFakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsY0FBY0EsQ0FBRUMsVUFBVSxFQUE2QjtFQUFBLElBQTNCQyxPQUFPLEdBQUF0QixTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBdUIsU0FBQSxHQUFBdkIsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUFBLElBQUV3QixJQUFJLEdBQUF4QixTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBdUIsU0FBQSxHQUFBdkIsU0FBQSxNQUFHLElBQUk7RUFDNUQsSUFBTVYsQ0FBQyxHQUFHMEIsTUFBTSxDQUFDSyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUNJLElBQUksQ0FBQyxDQUFDO0VBQ3pDLElBQUksQ0FBQ25DLENBQUMsRUFBRSxNQUFNLElBQUlvQyxLQUFLLENBQUMscUJBQXFCLENBQUM7RUFDOUMsT0FBQTNCLGFBQUEsQ0FBQUksZUFBQSxDQUFBQSxlQUFBLENBQUFBLGVBQUEsQ0FBQUEsZUFBQSxLQUNHZSxNQUFNLEVBQUcsSUFBSSxRQUNYQyxPQUFPLGlCQUNFN0IsQ0FBQyxjQUNKZ0MsT0FBTyxJQUFJekMsT0FBQSxDQUFPeUMsT0FBTyxNQUFLLFFBQVEsR0FBR0EsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUMxREUsSUFBSSxJQUFJM0MsT0FBQSxDQUFPMkMsSUFBSSxNQUFLLFFBQVEsR0FBRztJQUFFQSxJQUFJLEVBQUpBO0VBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUV4RDtBQUVBLFNBQVNHLFFBQVFBLENBQUVuQixLQUFLLEVBQUU7RUFDeEIsSUFBSSxDQUFDQSxLQUFLLElBQUkzQixPQUFBLENBQU8yQixLQUFLLE1BQUssUUFBUSxJQUFJb0IsS0FBSyxDQUFDQyxPQUFPLENBQUNyQixLQUFLLENBQUMsRUFBRSxPQUFPLElBQUk7RUFDNUUsSUFBSUEsS0FBSyxDQUFDVSxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsT0FBTyxJQUFJO0VBQ3ZDLElBQU1ZLENBQUMsR0FBR2IsTUFBTSxDQUFDVCxLQUFLLENBQUNzQixDQUFDLENBQUM7RUFDekIsSUFBSSxDQUFDYixNQUFNLENBQUNjLFFBQVEsQ0FBQ0QsQ0FBQyxDQUFDLElBQUlBLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJO0VBQzdDLElBQU1ULFVBQVUsR0FBR0wsTUFBTSxDQUFDUixLQUFLLENBQUNhLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQ0ksSUFBSSxDQUFDLENBQUM7RUFDeEQsSUFBSSxDQUFDSixVQUFVLEVBQUUsT0FBTyxJQUFJO0VBQzVCLElBQU1DLE9BQU8sR0FBR2QsS0FBSyxDQUFDYyxPQUFPLElBQUl6QyxPQUFBLENBQU8yQixLQUFLLENBQUNjLE9BQU8sTUFBSyxRQUFRLElBQUksQ0FBQ00sS0FBSyxDQUFDQyxPQUFPLENBQUNyQixLQUFLLENBQUNjLE9BQU8sQ0FBQyxHQUMvRmQsS0FBSyxDQUFDYyxPQUFPLEdBQ2IsQ0FBQyxDQUFDO0VBQ04sT0FBTztJQUNMUSxDQUFDLEVBQURBLENBQUM7SUFDRFQsVUFBVSxFQUFWQSxVQUFVO0lBQ1ZDLE9BQU8sRUFBUEEsT0FBTztJQUNQRSxJQUFJLEVBQUVoQixLQUFLLENBQUNnQixJQUFJLElBQUkzQyxPQUFBLENBQU8yQixLQUFLLENBQUNnQixJQUFJLE1BQUssUUFBUSxHQUFHaEIsS0FBSyxDQUFDZ0IsSUFBSSxHQUFHRDtFQUNwRSxDQUFDO0FBQ0g7O0FBRUE7QUFDQSxTQUFTUyxpQkFBaUJBLENBQUVYLFVBQVUsRUFBRUMsT0FBTyxFQUFFRSxJQUFJLEVBQUU7RUFDckQsT0FBT1MsSUFBSSxDQUFDQyxTQUFTLENBQUNkLGNBQWMsQ0FBQ0MsVUFBVSxFQUFFQyxPQUFPLEVBQUVFLElBQUksQ0FBQyxDQUFDO0FBQ2xFO0FBRUFXLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2ZsQixNQUFNLEVBQU5BLE1BQU07RUFDTkMsT0FBTyxFQUFQQSxPQUFPO0VBQ1BDLGNBQWMsRUFBZEEsY0FBYztFQUNkTyxRQUFRLEVBQVJBLFFBQVE7RUFDUkssaUJBQWlCLEVBQWpCQTtBQUNGLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9mYWJyaWNCcmlkZ2VFbnZlbG9wZS5qcz80NWVhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBSZXZlcnNpYmxlIEpTT04gcGF5bG9hZHMgZm9yIGh1YiDihpQgYnJvd3NlciBtZXNzYWdpbmcgaW5zaWRlIGEgRmFicmljXG4gKiBgR2VuZXJpY01lc3NhZ2VgIGJvZHkgKHRyYW5zaXRpb25hbCBjYXJyaWVyIOKAlCBzZWUgTUVTU0FHRV9UUkFOU1BPUlQubWQpLlxuICogUHJlZmVyIHByb21vdGluZyBgZmFicmljVHlwZWAgdG8gYSBkZWRpY2F0ZWQgb3V0ZXIgYE1lc3NhZ2UudHlwZWAgaW4gQGZhYnJpYy9jb3JlIHdoZW4gc3RhYmxlLlxuICpcbiAqIEBzZWUgTUVTU0FHRV9UUkFOU1BPUlQubWRcbiAqIEBzZWUgZnVuY3Rpb25zL2ZhYnJpY01lc3NhZ2VSZWdpc3RyeS5qc1xuICovXG5cbmNvbnN0IFNDSEVNQSA9ICdAZmFicmljL0JyaWRnZUVudmVsb3BlJztcbmNvbnN0IFZFUlNJT04gPSAxO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmYWJyaWNUeXBlIC0gU3RhYmxlIHR5cGUgaWQgKGUuZy4gSHViQ2xpZW50Q2hhdCwgSHViQ2xpZW50SW52ZW50b3J5KS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkIC0gSlNPTi1zZXJpYWxpemFibGUgcGF5bG9hZCAocm91bmQtdHJpcHMpLlxuICogQHBhcmFtIHtPYmplY3R9IFttZXRhXSAtIE9wdGlvbmFsIG1ldGFkYXRhICh0cmFuc3BvcnQgaGludHMsIGlkZW1wb3RlbmN5IGtleXMsIGV0Yy4pXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBPYmplY3QgdG8gSlNPTi5zdHJpbmdpZnkgaW50byBHZW5lcmljTWVzc2FnZSBib2R5LlxuICovXG5mdW5jdGlvbiBjcmVhdGVFbnZlbG9wZSAoZmFicmljVHlwZSwgcGF5bG9hZCA9IHt9LCBtZXRhID0gbnVsbCkge1xuICBjb25zdCB0ID0gU3RyaW5nKGZhYnJpY1R5cGUgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCF0KSB0aHJvdyBuZXcgRXJyb3IoJ2ZhYnJpY1R5cGUgcmVxdWlyZWQnKTtcbiAgcmV0dXJuIHtcbiAgICBbU0NIRU1BXTogdHJ1ZSxcbiAgICB2OiBWRVJTSU9OLFxuICAgIGZhYnJpY1R5cGU6IHQsXG4gICAgcGF5bG9hZDogcGF5bG9hZCAmJiB0eXBlb2YgcGF5bG9hZCA9PT0gJ29iamVjdCcgPyBwYXlsb2FkIDoge30sXG4gICAgLi4uKG1ldGEgJiYgdHlwZW9mIG1ldGEgPT09ICdvYmplY3QnID8geyBtZXRhIH0gOiB7fSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHJ5UGFyc2UgKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gIGlmICh2YWx1ZVtTQ0hFTUFdICE9PSB0cnVlKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgdiA9IE51bWJlcih2YWx1ZS52KTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodikgfHwgdiA8IDEpIHJldHVybiBudWxsO1xuICBjb25zdCBmYWJyaWNUeXBlID0gU3RyaW5nKHZhbHVlLmZhYnJpY1R5cGUgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFmYWJyaWNUeXBlKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcGF5bG9hZCA9IHZhbHVlLnBheWxvYWQgJiYgdHlwZW9mIHZhbHVlLnBheWxvYWQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlLnBheWxvYWQpXG4gICAgPyB2YWx1ZS5wYXlsb2FkXG4gICAgOiB7fTtcbiAgcmV0dXJuIHtcbiAgICB2LFxuICAgIGZhYnJpY1R5cGUsXG4gICAgcGF5bG9hZCxcbiAgICBtZXRhOiB2YWx1ZS5tZXRhICYmIHR5cGVvZiB2YWx1ZS5tZXRhID09PSAnb2JqZWN0JyA/IHZhbHVlLm1ldGEgOiB1bmRlZmluZWRcbiAgfTtcbn1cblxuLyoqIEByZXR1cm5zIHtzdHJpbmd9IGJvZHkgZm9yIE1lc3NhZ2UuZnJvbVZlY3RvcihbJ0dlbmVyaWNNZXNzYWdlJywgYm9keV0pICovXG5mdW5jdGlvbiBzdHJpbmdpZnlFbnZlbG9wZSAoZmFicmljVHlwZSwgcGF5bG9hZCwgbWV0YSkge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY3JlYXRlRW52ZWxvcGUoZmFicmljVHlwZSwgcGF5bG9hZCwgbWV0YSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU0NIRU1BLFxuICBWRVJTSU9OLFxuICBjcmVhdGVFbnZlbG9wZSxcbiAgdHJ5UGFyc2UsXG4gIHN0cmluZ2lmeUVudmVsb3BlXG59O1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJTQ0hFTUEiLCJWRVJTSU9OIiwiY3JlYXRlRW52ZWxvcGUiLCJmYWJyaWNUeXBlIiwicGF5bG9hZCIsInVuZGVmaW5lZCIsIm1ldGEiLCJ0cmltIiwiRXJyb3IiLCJ0cnlQYXJzZSIsIkFycmF5IiwiaXNBcnJheSIsInYiLCJpc0Zpbml0ZSIsInN0cmluZ2lmeUVudmVsb3BlIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/fabricBridgeEnvelope.js\n\n}')},"./functions/fabricBrowserIdentityDev.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ \"./functions/fabricBrowserState.js\"),\n readStorageJSON = _require.readStorageJSON,\n writeStorageJSON = _require.writeStorageJSON,\n readStorageString = _require.readStorageString,\n writeStorageString = _require.writeStorageString,\n removeStorageKey = _require.removeStorageKey;\n\n/** Persistent marker so a wiped dev seed stays wiped across Hub launches. */\nvar DEV_SEED_SUPPRESSION_KEY = 'fabric.identity.devSeedSuppressedFor';\n\n/**\n * Stable digest of a dev-seed mnemonic (with optional BIP39 passphrase).\n * Used to mark a specific seed as \"wiped\" so the next Hub launch does not\n * silently re-import it, even with `FABRIC_DEV_BROWSER_IDENTITY = 'force'`.\n *\n * @param {string} seed\n * @param {string} [passphrase]\n * @returns {string} hex sha256 digest\n */\nfunction devSeedDigest(seed, passphrase) {\n var s = String(seed || '').trim().toLowerCase().replace(/\\s+/g, ' ');\n var p = String(passphrase || '');\n return crypto.createHash('sha256').update(s + '|' + p).digest('hex');\n}\nfunction readDevSeedSuppressionDigest() {\n try {\n if (typeof window === 'undefined') return '';\n return String(readStorageString(DEV_SEED_SUPPRESSION_KEY) || '');\n } catch (_) {\n return '';\n }\n}\nfunction isDevSeedSuppressed(seed, passphrase) {\n var stored = readDevSeedSuppressionDigest();\n if (!stored) return false;\n if (!seed) return false;\n return stored === devSeedDigest(seed, passphrase);\n}\nfunction suppressDevSeed(seed, passphrase) {\n if (typeof window === 'undefined') return '';\n var d = devSeedDigest(seed, passphrase);\n try {\n writeStorageString(DEV_SEED_SUPPRESSION_KEY, d);\n } catch (_) {}\n return d;\n}\nfunction clearDevSeedSuppression() {\n if (typeof window === 'undefined') return false;\n try {\n removeStorageKey(DEV_SEED_SUPPRESSION_KEY);\n } catch (_) {}\n return true;\n}\n\n/**\n * Store an unlocked Fabric browser identity from a BIP39 mnemonic (and optional BIP39 passphrase).\n * Used by HubInterface dev bootstrap and IdentityManager \"import mnemonic\" flow.\n *\n * Behavior:\n * - If the user explicitly wiped this exact seed via {@link suppressDevSeed},\n * the call returns `{ ok: false, suppressed: true }` regardless of `force`.\n * - Without `force`, an existing `fabric.identity.local` causes `{ ok: false, error: 'Identity already stored ...' }`.\n *\n * @param {Object} opts\n * @param {string} opts.seed - Mnemonic phrase (same field as @fabric/core Identity `seed`).\n * @param {string} [opts.passphrase] - Optional BIP39 extension passphrase (not the UI \"encryption password\").\n * @param {boolean} [opts.force] - When true, replace existing fabric.identity.local.\n * @param {boolean} [opts.ignoreSuppression] - When true (used by Identity manager \"Restore from dev seed\"), bypass the wipe marker.\n * @returns {{ ok: boolean, error?: string, suppressed?: boolean, identity?: { id: string, xpub: string, xprv: string } }}\n */\nfunction storeUnlockedIdentityFromMnemonic() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (typeof window === 'undefined') {\n return {\n ok: false,\n error: 'localStorage unavailable'\n };\n }\n var phrase = String(opts.seed || '').trim();\n if (!phrase) return {\n ok: false,\n error: 'Missing mnemonic'\n };\n var force = !!opts.force;\n var ignoreSuppression = !!opts.ignoreSuppression;\n if (!ignoreSuppression && isDevSeedSuppressed(phrase, opts.passphrase)) {\n return {\n ok: false,\n suppressed: true,\n error: 'Dev-seed bootstrap was suppressed by Forget local identity. Use \"Restore from dev seed\" in the Identity panel to re-enable.'\n };\n }\n try {\n if (!force && readStorageJSON('fabric.identity.local', null)) {\n return {\n ok: false,\n error: 'Identity already stored (use force to replace)'\n };\n }\n } catch (e) {\n return {\n ok: false,\n error: 'Cannot read storage'\n };\n }\n var Identity = __webpack_require__(/*! @fabric/core/types/identity */ \"./node_modules/@fabric/core/types/identity.js\");\n var _require2 = __webpack_require__(/*! ./fabricAccountDerivedIdentity */ \"./functions/fabricAccountDerivedIdentity.js\"),\n deriveFabricAccountIdentityKeys = _require2.deriveFabricAccountIdentityKeys,\n fabricRootXpubFromMasterXprv = _require2.fabricRootXpubFromMasterXprv;\n var pass = opts.passphrase != null && String(opts.passphrase).trim() !== '' ? String(opts.passphrase) : null;\n try {\n var ident = new Identity(pass ? {\n seed: phrase,\n passphrase: pass\n } : {\n seed: phrase\n });\n var xprv = ident.key && ident.key.xprv;\n var xpub = ident.key && ident.key.xpub;\n if (!xprv || !xpub) return {\n ok: false,\n error: 'Key derivation failed'\n };\n var fabricAccountIndex = 0;\n var dk = deriveFabricAccountIdentityKeys(String(xprv).trim(), fabricAccountIndex, 0);\n var masterXpub = fabricRootXpubFromMasterXprv(String(xprv).trim());\n var idStr = String(dk.id);\n var payload = {\n fabricIdentityMode: 'account',\n fabricAccountIndex: fabricAccountIndex,\n masterXpub: masterXpub,\n id: idStr,\n xpub: dk.xpub,\n passwordProtected: false\n };\n writeStorageJSON('fabric.identity.local', payload);\n try {\n if (typeof window !== 'undefined' && window.sessionStorage) {\n window.sessionStorage.setItem('fabric.identity.unlocked', JSON.stringify({\n id: idStr,\n xpub: dk.xpub,\n xprv: dk.xprv,\n masterXprv: String(xprv).trim(),\n masterXpub: masterXpub,\n fabricIdentityMode: 'account',\n fabricAccountIndex: fabricAccountIndex\n }));\n }\n } catch (_) {}\n /** Only drop the wipe marker when this exact seed is the one being restored. */\n try {\n if (readDevSeedSuppressionDigest() === devSeedDigest(phrase, opts.passphrase)) {\n clearDevSeedSuppression();\n }\n } catch (_) {}\n return {\n ok: true,\n identity: {\n id: idStr,\n xpub: dk.xpub,\n xprv: dk.xprv,\n masterXprv: String(xprv).trim(),\n masterXpub: masterXpub,\n fabricIdentityMode: 'account',\n fabricAccountIndex: fabricAccountIndex\n }\n };\n } catch (e) {\n return {\n ok: false,\n error: e && e.message ? e.message : String(e)\n };\n }\n}\n\n/**\n * Apply `window.FABRIC_DEV_BROWSER_SEED` (from `assets/config.local.js` or\n * `FABRIC_DEV_PUSH_BROWSER_IDENTITY` HTML injection) into local browser identity.\n * No-op when the seed is missing or suppressed.\n *\n * @returns {{ ok: boolean, skipped?: boolean, reason?: string, suppressed?: boolean, error?: string, identity?: object }}\n */\nfunction applyFabricDevBrowserSeedBootstrap() {\n if (typeof window === 'undefined') {\n return {\n ok: false,\n skipped: true,\n reason: 'no-window'\n };\n }\n var seed = String(window.FABRIC_DEV_BROWSER_SEED || '').trim();\n if (!seed) return {\n ok: false,\n skipped: true,\n reason: 'no-seed'\n };\n var passRaw = window.FABRIC_DEV_BROWSER_PASSPHRASE;\n var passphrase = passRaw != null && String(passRaw).trim() !== '' ? String(passRaw) : undefined;\n var force = String(window.FABRIC_DEV_BROWSER_IDENTITY || '').toLowerCase() === 'force';\n return storeUnlockedIdentityFromMnemonic({\n seed: seed,\n passphrase: passphrase,\n force: force\n });\n}\n\n/**\n * Merge session unlock material onto a watch-only identity record (constructor / hydrate).\n * @param {object|null} identity\n * @returns {object|null}\n */\nfunction mergeUnlockedSessionIntoIdentity(identity) {\n if (!identity || _typeof(identity) !== 'object') return identity;\n if (typeof window === 'undefined' || !window.sessionStorage) return identity;\n var unlocked = null;\n try {\n unlocked = JSON.parse(window.sessionStorage.getItem('fabric.identity.unlocked') || 'null');\n } catch (_) {\n return identity;\n }\n if (!unlocked || _typeof(unlocked) !== 'object') return identity;\n var idMatch = identity.id != null && unlocked.id != null && String(identity.id) === String(unlocked.id);\n var xpubMatch = identity.xpub && unlocked.xpub && String(identity.xpub) === String(unlocked.xpub);\n if (!idMatch && !xpubMatch) return identity;\n if (!unlocked.xprv) return identity;\n return Object.assign({}, identity, {\n xprv: unlocked.xprv,\n masterXprv: unlocked.masterXprv || identity.masterXprv || undefined,\n masterXpub: unlocked.masterXpub || identity.masterXpub || undefined,\n fabricIdentityMode: unlocked.fabricIdentityMode || identity.fabricIdentityMode,\n fabricAccountIndex: unlocked.fabricAccountIndex != null ? unlocked.fabricAccountIndex : identity.fabricAccountIndex,\n plaintextUnlockAvailable: false,\n passwordProtected: false\n });\n}\nmodule.exports = {\n DEV_SEED_SUPPRESSION_KEY: DEV_SEED_SUPPRESSION_KEY,\n devSeedDigest: devSeedDigest,\n readDevSeedSuppressionDigest: readDevSeedSuppressionDigest,\n isDevSeedSuppressed: isDevSeedSuppressed,\n suppressDevSeed: suppressDevSeed,\n clearDevSeedSuppression: clearDevSeedSuppression,\n storeUnlockedIdentityFromMnemonic: storeUnlockedIdentityFromMnemonic,\n applyFabricDevBrowserSeedBootstrap: applyFabricDevBrowserSeedBootstrap,\n mergeUnlockedSessionIntoIdentity: mergeUnlockedSessionIntoIdentity\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljQnJvd3NlcklkZW50aXR5RGV2LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBRWIsSUFBTUssTUFBTSxHQUFHQyxtQkFBTyxDQUFDLHlEQUFRLENBQUM7QUFDaEMsSUFBQUMsUUFBQSxHQU1JRCxtQkFBTyxDQUFDLCtEQUFzQixDQUFDO0VBTGpDRSxlQUFlLEdBQUFELFFBQUEsQ0FBZkMsZUFBZTtFQUNmQyxnQkFBZ0IsR0FBQUYsUUFBQSxDQUFoQkUsZ0JBQWdCO0VBQ2hCQyxpQkFBaUIsR0FBQUgsUUFBQSxDQUFqQkcsaUJBQWlCO0VBQ2pCQyxrQkFBa0IsR0FBQUosUUFBQSxDQUFsQkksa0JBQWtCO0VBQ2xCQyxnQkFBZ0IsR0FBQUwsUUFBQSxDQUFoQkssZ0JBQWdCOztBQUdsQjtBQUNBLElBQU1DLHdCQUF3QixHQUFHLHNDQUFzQzs7QUFFdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsYUFBYUEsQ0FBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUU7RUFDeEMsSUFBTUMsQ0FBQyxHQUFHQyxNQUFNLENBQUNILElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQ0ksSUFBSSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7RUFDdEUsSUFBTUMsQ0FBQyxHQUFHSixNQUFNLENBQUNGLFVBQVUsSUFBSSxFQUFFLENBQUM7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QUMzQmEsUUFBUSxDQUFDYixrQkFBa0I7SUFDL0I4Qix3QkFBd0IsRUFBRSxLQUFLO0lBQy9CdkIsaUJBQWlCLEVBQUU7RUFDckIsQ0FBQyxDQUFDO0FBQ0o7QUFFQXdCLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2YxRSx3QkFBd0IsRUFBeEJBLHdCQUF3QjtFQUN4QkMsYUFBYSxFQUFiQSxhQUFhO0VBQ2JZLDRCQUE0QixFQUE1QkEsNEJBQTRCO0VBQzVCRyxtQkFBbUIsRUFBbkJBLG1CQUFtQjtFQUNuQkUsZUFBZSxFQUFmQSxlQUFlO0VBQ2ZFLHVCQUF1QixFQUF2QkEsdUJBQXVCO0VBQ3ZCQyxpQ0FBaUMsRUFBakNBLGlDQUFpQztFQUNqQ29DLGtDQUFrQyxFQUFsQ0Esa0NBQWtDO0VBQ2xDTyxnQ0FBZ0MsRUFBaENBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2ZhYnJpY0Jyb3dzZXJJZGVudGl0eURldi5qcz84YmMzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5jb25zdCB7XG4gIHJlYWRTdG9yYWdlSlNPTixcbiAgd3JpdGVTdG9yYWdlSlNPTixcbiAgcmVhZFN0b3JhZ2VTdHJpbmcsXG4gIHdyaXRlU3RvcmFnZVN0cmluZyxcbiAgcmVtb3ZlU3RvcmFnZUtleVxufSA9IHJlcXVpcmUoJy4vZmFicmljQnJvd3NlclN0YXRlJyk7XG5cbi8qKiBQZXJzaXN0ZW50IG1hcmtlciBzbyBhIHdpcGVkIGRldiBzZWVkIHN0YXlzIHdpcGVkIGFjcm9zcyBIdWIgbGF1bmNoZXMuICovXG5jb25zdCBERVZfU0VFRF9TVVBQUkVTU0lPTl9LRVkgPSAnZmFicmljLmlkZW50aXR5LmRldlNlZWRTdXBwcmVzc2VkRm9yJztcblxuLyoqXG4gKiBTdGFibGUgZGlnZXN0IG9mIGEgZGV2LXNlZWQgbW5lbW9uaWMgKHdpdGggb3B0aW9uYWwgQklQMzkgcGFzc3BocmFzZSkuXG4gKiBVc2VkIHRvIG1hcmsgYSBzcGVjaWZpYyBzZWVkIGFzIFwid2lwZWRcIiBzbyB0aGUgbmV4dCBIdWIgbGF1bmNoIGRvZXMgbm90XG4gKiBzaWxlbnRseSByZS1pbXBvcnQgaXQsIGV2ZW4gd2l0aCBgRkFCUklDX0RFVl9CUk9XU0VSX0lERU5USVRZID0gJ2ZvcmNlJ2AuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNlZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcGFzc3BocmFzZV1cbiAqIEByZXR1cm5zIHtzdHJpbmd9IGhleCBzaGEyNTYgZGlnZXN0XG4gKi9cbmZ1bmN0aW9uIGRldlNlZWREaWdlc3QgKHNlZWQsIHBhc3NwaHJhc2UpIHtcbiAgY29uc3QgcyA9IFN0cmluZyhzZWVkIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICcgJyk7XG4gIGNvbnN0IHAgPSBTdHJpbmcocGFzc3BocmFzZSB8fCAnJyk7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHMgKyAnfCcgKyBwKS5kaWdlc3QoJ2hleCcpO1xufVxuXG5mdW5jdGlvbiByZWFkRGV2U2VlZFN1cHByZXNzaW9uRGlnZXN0ICgpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiAnJztcbiAgICByZXR1cm4gU3RyaW5nKHJlYWRTdG9yYWdlU3RyaW5nKERFVl9TRUVEX1NVUFBSRVNTSU9OX0tFWSkgfHwgJycpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzRGV2U2VlZFN1cHByZXNzZWQgKHNlZWQsIHBhc3NwaHJhc2UpIHtcbiAgY29uc3Qgc3RvcmVkID0gcmVhZERldlNlZWRTdXBwcmVzc2lvbkRpZ2VzdCgpO1xuICBpZiAoIXN0b3JlZCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIXNlZWQpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHN0b3JlZCA9PT0gZGV2U2VlZERpZ2VzdChzZWVkLCBwYXNzcGhyYXNlKTtcbn1cblxuZnVuY3Rpb24gc3VwcHJlc3NEZXZTZWVkIChzZWVkLCBwYXNzcGhyYXNlKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuICcnO1xuICBjb25zdCBkID0gZGV2U2VlZERpZ2VzdChzZWVkLCBwYXNzcGhyYXNlKTtcbiAgdHJ5IHsgd3JpdGVTdG9yYWdlU3RyaW5nKERFVl9TRUVEX1NVUFBSRVNTSU9OX0tFWSwgZCk7IH0gY2F0Y2ggKF8pIHt9XG4gIHJldHVybiBkO1xufVxuXG5mdW5jdGlvbiBjbGVhckRldlNlZWRTdXBwcmVzc2lvbiAoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuICB0cnkgeyByZW1vdmVTdG9yYWdlS2V5KERFVl9TRUVEX1NVUFBSRVNTSU9OX0tFWSk7IH0gY2F0Y2ggKF8pIHt9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFN0b3JlIGFuIHVubG9ja2VkIEZhYnJpYyBicm93c2VyIGlkZW50aXR5IGZyb20gYSBCSVAzOSBtbmVtb25pYyAoYW5kIG9wdGlvbmFsIEJJUDM5IHBhc3NwaHJhc2UpLlxuICogVXNlZCBieSBIdWJJbnRlcmZhY2UgZGV2IGJvb3RzdHJhcCBhbmQgSWRlbnRpdHlNYW5hZ2VyIFwiaW1wb3J0IG1uZW1vbmljXCIgZmxvdy5cbiAqXG4gKiBCZWhhdmlvcjpcbiAqIC0gSWYgdGhlIHVzZXIgZXhwbGljaXRseSB3aXBlZCB0aGlzIGV4YWN0IHNlZWQgdmlhIHtAbGluayBzdXBwcmVzc0RldlNlZWR9LFxuICogICB0aGUgY2FsbCByZXR1cm5zIGB7IG9rOiBmYWxzZSwgc3VwcHJlc3NlZDogdHJ1ZSB9YCByZWdhcmRsZXNzIG9mIGBmb3JjZWAuXG4gKiAtIFdpdGhvdXQgYGZvcmNlYCwgYW4gZXhpc3RpbmcgYGZhYnJpYy5pZGVudGl0eS5sb2NhbGAgY2F1c2VzIGB7IG9rOiBmYWxzZSwgZXJyb3I6ICdJZGVudGl0eSBhbHJlYWR5IHN0b3JlZCAuLi4nIH1gLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5zZWVkIC0gTW5lbW9uaWMgcGhyYXNlIChzYW1lIGZpZWxkIGFzIEBmYWJyaWMvY29yZSBJZGVudGl0eSBgc2VlZGApLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLnBhc3NwaHJhc2VdIC0gT3B0aW9uYWwgQklQMzkgZXh0ZW5zaW9uIHBhc3NwaHJhc2UgKG5vdCB0aGUgVUkgXCJlbmNyeXB0aW9uIHBhc3N3b3JkXCIpLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mb3JjZV0gLSBXaGVuIHRydWUsIHJlcGxhY2UgZXhpc3RpbmcgZmFicmljLmlkZW50aXR5LmxvY2FsLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pZ25vcmVTdXBwcmVzc2lvbl0gLSBXaGVuIHRydWUgKHVzZWQgYnkgSWRlbnRpdHkgbWFuYWdlciBcIlJlc3RvcmUgZnJvbSBkZXYgc2VlZFwiKSwgYnlwYXNzIHRoZSB3aXBlIG1hcmtlci5cbiAqIEByZXR1cm5zIHt7IG9rOiBib29sZWFuLCBlcnJvcj86IHN0cmluZywgc3VwcHJlc3NlZD86IGJvb2xlYW4sIGlkZW50aXR5PzogeyBpZDogc3RyaW5nLCB4cHViOiBzdHJpbmcsIHhwcnY6IHN0cmluZyB9IH19XG4gKi9cbmZ1bmN0aW9uIHN0b3JlVW5sb2NrZWRJZGVudGl0eUZyb21NbmVtb25pYyAob3B0cyA9IHt9KSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdsb2NhbFN0b3JhZ2UgdW5hdmFpbGFibGUnIH07XG4gIH1cbiAgY29uc3QgcGhyYXNlID0gU3RyaW5nKG9wdHMuc2VlZCB8fCAnJykudHJpbSgpO1xuICBpZiAoIXBocmFzZSkgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ01pc3NpbmcgbW5lbW9uaWMnIH07XG4gIGNvbnN0IGZvcmNlID0gISFvcHRzLmZvcmNlO1xuICBjb25zdCBpZ25vcmVTdXBwcmVzc2lvbiA9ICEhb3B0cy5pZ25vcmVTdXBwcmVzc2lvbjtcblxuICBpZiAoIWlnbm9yZVN1cHByZXNzaW9uICYmIGlzRGV2U2VlZFN1cHByZXNzZWQocGhyYXNlLCBvcHRzLnBhc3NwaHJhc2UpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9rOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzZWQ6IHRydWUsXG4gICAgICBlcnJvcjogJ0Rldi1zZWVkIGJvb3RzdHJhcCB3YXMgc3VwcHJlc3NlZCBieSBGb3JnZXQgbG9jYWwgaWRlbnRpdHkuIFVzZSBcIlJlc3RvcmUgZnJvbSBkZXYgc2VlZFwiIGluIHRoZSBJZGVudGl0eSBwYW5lbCB0byByZS1lbmFibGUuJ1xuICAgIH07XG4gIH1cblxuICB0cnkge1xuICAgIGlmICghZm9yY2UgJiYgcmVhZFN0b3JhZ2VKU09OKCdmYWJyaWMuaWRlbnRpdHkubG9jYWwnLCBudWxsKSkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ0lkZW50aXR5IGFscmVhZHkgc3RvcmVkICh1c2UgZm9yY2UgdG8gcmVwbGFjZSknIH07XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ0Nhbm5vdCByZWFkIHN0b3JhZ2UnIH07XG4gIH1cblxuICBjb25zdCBJZGVudGl0eSA9IHJlcXVpcmUoJ0BmYWJyaWMvY29yZS90eXBlcy9pZGVudGl0eScpO1xuICBjb25zdCB7XG4gICAgZGVyaXZlRmFicmljQWNjb3VudElkZW50aXR5S2V5cyxcbiAgICBmYWJyaWNSb290WHB1YkZyb21NYXN0ZXJYcHJ2XG4gIH0gPSByZXF1aXJlKCcuL2ZhYnJpY0FjY291bnREZXJpdmVkSWRlbnRpdHknKTtcbiAgY29uc3QgcGFzcyA9IG9wdHMucGFzc3BocmFzZSAhPSBudWxsICYmIFN0cmluZyhvcHRzLnBhc3NwaHJhc2UpLnRyaW0oKSAhPT0gJydcbiAgICA/IFN0cmluZyhvcHRzLnBhc3NwaHJhc2UpXG4gICAgOiBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IGlkZW50ID0gbmV3IElkZW50aXR5KHBhc3MgPyB7IHNlZWQ6IHBocmFzZSwgcGFzc3BocmFzZTogcGFzcyB9IDogeyBzZWVkOiBwaHJhc2UgfSk7XG4gICAgY29uc3QgeHBydiA9IGlkZW50LmtleSAmJiBpZGVudC5rZXkueHBydjtcbiAgICBjb25zdCB4cHViID0gaWRlbnQua2V5ICYmIGlkZW50LmtleS54cHViO1xuICAgIGlmICgheHBydiB8fCAheHB1YikgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ0tleSBkZXJpdmF0aW9uIGZhaWxlZCcgfTtcbiAgICBjb25zdCBmYWJyaWNBY2NvdW50SW5kZXggPSAwO1xuICAgIGNvbnN0IGRrID0gZGVyaXZlRmFicmljQWNjb3VudElkZW50aXR5S2V5cyhTdHJpbmcoeHBydikudHJpbSgpLCBmYWJyaWNBY2NvdW50SW5kZXgsIDApO1xuICAgIGNvbnN0IG1hc3RlclhwdWIgPSBmYWJyaWNSb290WHB1YkZyb21NYXN0ZXJYcHJ2KFN0cmluZyh4cHJ2KS50cmltKCkpO1xuICAgIGNvbnN0IGlkU3RyID0gU3RyaW5nKGRrLmlkKTtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgZmFicmljSWRlbnRpdHlNb2RlOiAnYWNjb3VudCcsXG4gICAgICBmYWJyaWNBY2NvdW50SW5kZXgsXG4gICAgICBtYXN0ZXJYcHViLFxuICAgICAgaWQ6IGlkU3RyLFxuICAgICAgeHB1YjogZGsueHB1YixcbiAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiBmYWxzZVxuICAgIH07XG4gICAgd3JpdGVTdG9yYWdlSlNPTignZmFicmljLmlkZW50aXR5LmxvY2FsJywgcGF5bG9hZCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2ZhYnJpYy5pZGVudGl0eS51bmxvY2tlZCcsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBpZDogaWRTdHIsXG4gICAgICAgICAgeHB1YjogZGsueHB1YixcbiAgICAgICAgICB4cHJ2OiBkay54cHJ2LFxuICAgICAgICAgIG1hc3RlclhwcnY6IFN0cmluZyh4cHJ2KS50cmltKCksXG4gICAgICAgICAgbWFzdGVyWHB1YixcbiAgICAgICAgICBmYWJyaWNJZGVudGl0eU1vZGU6ICdhY2NvdW50JyxcbiAgICAgICAgICBmYWJyaWNBY2NvdW50SW5kZXhcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgLyoqIE9ubHkgZHJvcCB0aGUgd2lwZSBtYXJrZXIgd2hlbiB0aGlzIGV4YWN0IHNlZWQgaXMgdGhlIG9uZSBiZWluZyByZXN0b3JlZC4gKi9cbiAgICB0cnkge1xuICAgICAgaWYgKHJlYWREZXZTZWVkU3VwcHJlc3Npb25EaWdlc3QoKSA9PT0gZGV2U2VlZERpZ2VzdChwaHJhc2UsIG9wdHMucGFzc3BocmFzZSkpIHtcbiAgICAgICAgY2xlYXJEZXZTZWVkU3VwcHJlc3Npb24oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChfKSB7fVxuICAgIHJldHVybiB7XG4gICAgICBvazogdHJ1ZSxcbiAgICAgIGlkZW50aXR5OiB7XG4gICAgICAgIGlkOiBpZFN0cixcbiAgICAgICAgeHB1YjogZGsueHB1YixcbiAgICAgICAgeHBydjogZGsueHBydixcbiAgICAgICAgbWFzdGVyWHBydjogU3RyaW5nKHhwcnYpLnRyaW0oKSxcbiAgICAgICAgbWFzdGVyWHB1YixcbiAgICAgICAgZmFicmljSWRlbnRpdHlNb2RlOiAnYWNjb3VudCcsXG4gICAgICAgIGZhYnJpY0FjY291bnRJbmRleDogZmFicmljQWNjb3VudEluZGV4XG4gICAgICB9XG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IChlICYmIGUubWVzc2FnZSkgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkgfTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcGx5IGB3aW5kb3cuRkFCUklDX0RFVl9CUk9XU0VSX1NFRURgIChmcm9tIGBhc3NldHMvY29uZmlnLmxvY2FsLmpzYCBvclxuICogYEZBQlJJQ19ERVZfUFVTSF9CUk9XU0VSX0lERU5USVRZYCBIVE1MIGluamVjdGlvbikgaW50byBsb2NhbCBicm93c2VyIGlkZW50aXR5LlxuICogTm8tb3Agd2hlbiB0aGUgc2VlZCBpcyBtaXNzaW5nIG9yIHN1cHByZXNzZWQuXG4gKlxuICogQHJldHVybnMge3sgb2s6IGJvb2xlYW4sIHNraXBwZWQ/OiBib29sZWFuLCByZWFzb24/OiBzdHJpbmcsIHN1cHByZXNzZWQ/OiBib29sZWFuLCBlcnJvcj86IHN0cmluZywgaWRlbnRpdHk/OiBvYmplY3QgfX1cbiAqL1xuZnVuY3Rpb24gYXBwbHlGYWJyaWNEZXZCcm93c2VyU2VlZEJvb3RzdHJhcCAoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgc2tpcHBlZDogdHJ1ZSwgcmVhc29uOiAnbm8td2luZG93JyB9O1xuICB9XG4gIGNvbnN0IHNlZWQgPSBTdHJpbmcod2luZG93LkZBQlJJQ19ERVZfQlJPV1NFUl9TRUVEIHx8ICcnKS50cmltKCk7XG4gIGlmICghc2VlZCkgcmV0dXJuIHsgb2s6IGZhbHNlLCBza2lwcGVkOiB0cnVlLCByZWFzb246ICduby1zZWVkJyB9O1xuICBjb25zdCBwYXNzUmF3ID0gd2luZG93LkZBQlJJQ19ERVZfQlJPV1NFUl9QQVNTUEhSQVNFO1xuICBjb25zdCBwYXNzcGhyYXNlID0gcGFzc1JhdyAhPSBudWxsICYmIFN0cmluZyhwYXNzUmF3KS50cmltKCkgIT09ICcnXG4gICAgPyBTdHJpbmcocGFzc1JhdylcbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZm9yY2UgPSBTdHJpbmcod2luZG93LkZBQlJJQ19ERVZfQlJPV1NFUl9JREVOVElUWSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2ZvcmNlJztcbiAgcmV0dXJuIHN0b3JlVW5sb2NrZWRJZGVudGl0eUZyb21NbmVtb25pYyh7XG4gICAgc2VlZCxcbiAgICBwYXNzcGhyYXNlLFxuICAgIGZvcmNlXG4gIH0pO1xufVxuXG4vKipcbiAqIE1lcmdlIHNlc3Npb24gdW5sb2NrIG1hdGVyaWFsIG9udG8gYSB3YXRjaC1vbmx5IGlkZW50aXR5IHJlY29yZCAoY29uc3RydWN0b3IgLyBoeWRyYXRlKS5cbiAqIEBwYXJhbSB7b2JqZWN0fG51bGx9IGlkZW50aXR5XG4gKiBAcmV0dXJucyB7b2JqZWN0fG51bGx9XG4gKi9cbmZ1bmN0aW9uIG1lcmdlVW5sb2NrZWRTZXNzaW9uSW50b0lkZW50aXR5IChpZGVudGl0eSkge1xuICBpZiAoIWlkZW50aXR5IHx8IHR5cGVvZiBpZGVudGl0eSAhPT0gJ29iamVjdCcpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICF3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHJldHVybiBpZGVudGl0eTtcbiAgbGV0IHVubG9ja2VkID0gbnVsbDtcbiAgdHJ5IHtcbiAgICB1bmxvY2tlZCA9IEpTT04ucGFyc2Uod2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2ZhYnJpYy5pZGVudGl0eS51bmxvY2tlZCcpIHx8ICdudWxsJyk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH1cbiAgaWYgKCF1bmxvY2tlZCB8fCB0eXBlb2YgdW5sb2NrZWQgIT09ICdvYmplY3QnKSByZXR1cm4gaWRlbnRpdHk7XG4gIGNvbnN0IGlkTWF0Y2ggPSBpZGVudGl0eS5pZCAhPSBudWxsICYmIHVubG9ja2VkLmlkICE9IG51bGwgJiZcbiAgICBTdHJpbmcoaWRlbnRpdHkuaWQpID09PSBTdHJpbmcodW5sb2NrZWQuaWQpO1xuICBjb25zdCB4cHViTWF0Y2ggPSBpZGVudGl0eS54cHViICYmIHVubG9ja2VkLnhwdWIgJiZcbiAgICBTdHJpbmcoaWRlbnRpdHkueHB1YikgPT09IFN0cmluZyh1bmxvY2tlZC54cHViKTtcbiAgaWYgKCFpZE1hdGNoICYmICF4cHViTWF0Y2gpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCF1bmxvY2tlZC54cHJ2KSByZXR1cm4gaWRlbnRpdHk7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBpZGVudGl0eSwge1xuICAgIHhwcnY6IHVubG9ja2VkLnhwcnYsXG4gICAgbWFzdGVyWHBydjogdW5sb2NrZWQubWFzdGVyWHBydiB8fCBpZGVudGl0eS5tYXN0ZXJYcHJ2IHx8IHVuZGVmaW5lZCxcbiAgICBtYXN0ZXJYcHViOiB1bmxvY2tlZC5tYXN0ZXJYcHViIHx8IGlkZW50aXR5Lm1hc3RlclhwdWIgfHwgdW5kZWZpbmVkLFxuICAgIGZhYnJpY0lkZW50aXR5TW9kZTogdW5sb2NrZWQuZmFicmljSWRlbnRpdHlNb2RlIHx8IGlkZW50aXR5LmZhYnJpY0lkZW50aXR5TW9kZSxcbiAgICBmYWJyaWNBY2NvdW50SW5kZXg6IHVubG9ja2VkLmZhYnJpY0FjY291bnRJbmRleCAhPSBudWxsXG4gICAgICA/IHVubG9ja2VkLmZhYnJpY0FjY291bnRJbmRleFxuICAgICAgOiBpZGVudGl0eS5mYWJyaWNBY2NvdW50SW5kZXgsXG4gICAgcGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlOiBmYWxzZSxcbiAgICBwYXNzd29yZFByb3RlY3RlZDogZmFsc2VcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBERVZfU0VFRF9TVVBQUkVTU0lPTl9LRVksXG4gIGRldlNlZWREaWdlc3QsXG4gIHJlYWREZXZTZWVkU3VwcHJlc3Npb25EaWdlc3QsXG4gIGlzRGV2U2VlZFN1cHByZXNzZWQsXG4gIHN1cHByZXNzRGV2U2VlZCxcbiAgY2xlYXJEZXZTZWVkU3VwcHJlc3Npb24sXG4gIHN0b3JlVW5sb2NrZWRJZGVudGl0eUZyb21NbmVtb25pYyxcbiAgYXBwbHlGYWJyaWNEZXZCcm93c2VyU2VlZEJvb3RzdHJhcCxcbiAgbWVyZ2VVbmxvY2tlZFNlc3Npb25JbnRvSWRlbnRpdHlcbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiY3J5cHRvIiwicmVxdWlyZSIsIl9yZXF1aXJlIiwicmVhZFN0b3JhZ2VKU09OIiwid3JpdGVTdG9yYWdlSlNPTiIsInJlYWRTdG9yYWdlU3RyaW5nIiwid3JpdGVTdG9yYWdlU3RyaW5nIiwicmVtb3ZlU3RvcmFnZUtleSIsIkRFVl9TRUVEX1NVUFBSRVNTSU9OX0tFWSIsImRldlNlZWREaWdlc3QiLCJzZWVkIiwicGFzc3BocmFzZSIsInMiLCJTdHJpbmciLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwicCIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJyZWFkRGV2U2VlZFN1cHByZXNzaW9uRGlnZXN0Iiwid2luZG93IiwiXyIsImlzRGV2U2VlZFN1cHByZXNzZWQiLCJzdG9yZWQiLCJzdXBwcmVzc0RldlNlZWQiLCJkIiwiY2xlYXJEZXZTZWVkU3VwcHJlc3Npb24iLCJzdG9yZVVubG9ja2VkSWRlbnRpdHlGcm9tTW5lbW9uaWMiLCJvcHRzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib2siLCJlcnJvciIsInBocmFzZSIsImZvcmNlIiwiaWdub3JlU3VwcHJlc3Npb24iLCJzdXBwcmVzc2VkIiwiZSIsIklkZW50aXR5IiwiX3JlcXVpcmUyIiwiZGVyaXZlRmFicmljQWNjb3VudElkZW50aXR5S2V5cyIsImZhYnJpY1Jvb3RYcHViRnJvbU1hc3RlclhwcnYiLCJwYXNzIiwiaWRlbnQiLCJ4cHJ2Iiwia2V5IiwieHB1YiIsImZhYnJpY0FjY291bnRJbmRleCIsImRrIiwibWFzdGVyWHB1YiIsImlkU3RyIiwiaWQiLCJwYXlsb2FkIiwiZmFicmljSWRlbnRpdHlNb2RlIiwicGFzc3dvcmRQcm90ZWN0ZWQiLCJzZXNzaW9uU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwibWFzdGVyWHBydiIsImlkZW50aXR5IiwibWVzc2FnZSIsImFwcGx5RmFicmljRGV2QnJvd3NlclNlZWRCb290c3RyYXAiLCJza2lwcGVkIiwicmVhc29uIiwiRkFCUklDX0RFVl9CUk9XU0VSX1NFRUQiLCJwYXNzUmF3IiwiRkFCUklDX0RFVl9CUk9XU0VSX1BBU1NQSFJBU0UiLCJGQUJSSUNfREVWX0JST1dTRVJfSURFTlRJVFkiLCJtZXJnZVVubG9ja2VkU2Vzc2lvbkludG9JZGVudGl0eSIsInVubG9ja2VkIiwicGFyc2UiLCJnZXRJdGVtIiwiaWRNYXRjaCIsInhwdWJNYXRjaCIsIk9iamVjdCIsImFzc2lnbiIsInBsYWludGV4dFVubG9ja0F2YWlsYWJsZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/fabricBrowserIdentityDev.js\n\n}")},"./functions/fabricBrowserState.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _require = __webpack_require__(/*! ./fabricBrowserStore */ \"./functions/fabricBrowserStore.js\"),\n createFabricBrowserStore = _require.createFabricBrowserStore;\nvar FABRIC_STATE_KEY = 'fabric:state';\nfunction getFabricBrowserGlobal() {\n try {\n if (typeof globalThis !== 'undefined' && globalThis.window != null) return globalThis.window;\n } catch (_) {}\n try {\n if (typeof window !== 'undefined') return window;\n } catch (_) {}\n return undefined;\n}\nvar LEGACY_KEY_PATHS = {\n 'fabric.identity.local': '/identity/local',\n 'fabric.hub.adminToken': '/hub/adminToken',\n 'fabric.hub.adminTokenExpiresAt': '/hub/adminTokenExpiresAt',\n 'fabric.hub.identityWizardPending': '/hub/identityWizardPending',\n 'fabric.hub.identityWizardDismissed': '/hub/identityWizardDismissed',\n 'fabric.hub.address': '/hub/address',\n 'fabric.delegation': '/delegation',\n 'fabric.hub.federationSpendingPrefs': '/preferences/federationSpending',\n 'fabric.hub.alertDismissals': '/ui/alertDismissals',\n 'fabric:uiNotifications': '/ui/notifications',\n 'fabric.joinmarket.poolSizesBtc': '/joinmarket/poolSizesBtc',\n 'fabric.bitcoin.upstream': '/bitcoin/upstream',\n 'fabric.bitcoin.payjoinPreferences': '/bitcoin/payjoinPreferences',\n 'fabric.bitcoin.wallets': '/bitcoin/wallets',\n 'fabric.bitcoin.balanceCache': '/bitcoin/balanceCache',\n 'fabric.bitcoin.spendXpubWatch': '/bitcoin/spendXpubWatch',\n 'fabric.bitcoin.defaultBip44ReceiveAccount': '/bitcoin/defaultBip44ReceiveAccount',\n 'fabric.bitcoin.defaultBip44SendAccount': '/bitcoin/defaultBip44SendAccount',\n 'fabric.bitcoin.invoices': '/invoices',\n 'fabric:documents': '/documents',\n 'fabric:messages': '/messages',\n 'fabric:distributeProposals': '/distributeProposals',\n 'fabric.peers.primaryFabricAddress': '/peers/primaryFabricAddress',\n 'fabric.identity.lockTimeoutMinutes': '/preferences/identityLockTimeoutMinutes'\n};\nfunction hasLocalStorage() {\n try {\n var w = getFabricBrowserGlobal();\n return !!w && !!w.localStorage;\n } catch (e) {\n return false;\n }\n}\nvar _fabricStateSingleton = null;\nfunction resetFabricBrowserStateStore() {\n _fabricStateSingleton = null;\n}\n\n/**\n * Single {@link createFabricBrowserStore} for `fabric:state`.\n * Multiple instances used to silently clobber writes (Bridge JSON-PATCH vs hub UI prefs `PUT`).\n */\nfunction store() {\n if (!_fabricStateSingleton) {\n _fabricStateSingleton = createFabricBrowserStore({\n storageKey: FABRIC_STATE_KEY,\n initialState: {}\n });\n }\n return _fabricStateSingleton;\n}\nfunction pathForLegacyKey(legacyKey) {\n return LEGACY_KEY_PATHS[String(legacyKey || '').trim()] || null;\n}\n\n/** True when nested `/identity/local` is useless but legacy `fabric.identity.local` may still hold truth. */\nfunction fabricIdentityLocalNestedLooksEmpty(obj) {\n if (obj == null || _typeof(obj) !== 'object') return true;\n return !(obj.id || obj.xpub || obj.xprvEnc);\n}\nfunction readStorageString(legacyKey) {\n if (!hasLocalStorage()) return '';\n var path = pathForLegacyKey(legacyKey);\n try {\n if (path) {\n var v = store().GET(path);\n if (v != null) return String(v);\n }\n } catch (e) {}\n try {\n var w = getFabricBrowserGlobal();\n if (!w) return '';\n return String(w.localStorage.getItem(legacyKey) || '');\n } catch (e) {\n return '';\n }\n}\nfunction writeStorageString(legacyKey, value) {\n if (!hasLocalStorage()) return false;\n var v = String(value == null ? '' : value);\n var path = pathForLegacyKey(legacyKey);\n try {\n if (path) store().PUT(path, v);\n } catch (e) {}\n try {\n var w = getFabricBrowserGlobal();\n if (!w) return false;\n w.localStorage.setItem(legacyKey, v);\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction readStorageJSON(legacyKey, fallback) {\n if (!hasLocalStorage()) return fallback;\n var path = pathForLegacyKey(legacyKey);\n var fromPath;\n var hasPath = false;\n try {\n if (path) {\n var v = store().GET(path);\n if (typeof v !== 'undefined') {\n fromPath = v;\n hasPath = true;\n }\n }\n } catch (e) {}\n var fromLegacy;\n var hasLegacy = false;\n try {\n var w = getFabricBrowserGlobal();\n if (w) {\n var raw = w.localStorage.getItem(legacyKey);\n if (raw) {\n fromLegacy = JSON.parse(raw);\n hasLegacy = true;\n }\n }\n } catch (e) {\n fromLegacy = undefined;\n }\n if (String(legacyKey) === 'fabric.identity.local' && hasPath && hasLegacy && fabricIdentityLocalNestedLooksEmpty(fromPath) && !fabricIdentityLocalNestedLooksEmpty(fromLegacy)) {\n return fromLegacy;\n }\n if (hasPath) return fromPath;\n if (hasLegacy) return fromLegacy;\n return fallback;\n}\nfunction writeStorageJSON(legacyKey, value) {\n if (!hasLocalStorage()) return false;\n var path = pathForLegacyKey(legacyKey);\n try {\n if (path) store().PUT(path, value);\n } catch (e) {}\n try {\n var w = getFabricBrowserGlobal();\n if (!w) return false;\n w.localStorage.setItem(legacyKey, JSON.stringify(value));\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction removeStorageKey(legacyKey) {\n if (!hasLocalStorage()) return false;\n var path = pathForLegacyKey(legacyKey);\n try {\n if (path) store().DELETE(path);\n } catch (e) {}\n try {\n var w = getFabricBrowserGlobal();\n if (!w) return false;\n w.localStorage.removeItem(legacyKey);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Remove `identity.local` from persisted `fabric:state` JSON when present (defensive).\n * The nested-store singleton can otherwise keep serving `/identity/local` after a partial delete.\n */\nfunction scrubFabricStateIdentitySubtree(w) {\n if (!w || !w.localStorage) return;\n try {\n var raw = w.localStorage.getItem(FABRIC_STATE_KEY);\n if (!raw) return;\n var st = JSON.parse(raw);\n if (!st || _typeof(st) !== 'object' || Array.isArray(st)) return;\n if (!Object.prototype.hasOwnProperty.call(st, 'identity')) return;\n var idNode = st.identity;\n if (!idNode || _typeof(idNode) !== 'object' || Array.isArray(idNode)) return;\n if (Object.prototype.hasOwnProperty.call(idNode, 'local')) {\n delete idNode.local;\n }\n if (Object.keys(idNode).length === 0) {\n delete st.identity;\n }\n w.localStorage.setItem(FABRIC_STATE_KEY, JSON.stringify(st));\n } catch (e) {}\n}\n\n/**\n * Full browser Fabric identity wipe for Forget / Destroy: nested `fabric:state` path,\n * legacy `fabric.identity.local`, session unlock blob, dev-seed suppression marker.\n * Resets the `fabric:state` singleton so the next read sees disk truth.\n */\nfunction clearFabricBrowserIdentityLocal() {\n if (!hasLocalStorage()) return false;\n var w = getFabricBrowserGlobal();\n if (!w || !w.localStorage) return false;\n try {\n var path = pathForLegacyKey('fabric.identity.local');\n try {\n if (path) store().DELETE(path);\n } catch (e) {}\n try {\n w.localStorage.removeItem('fabric.identity.local');\n } catch (e) {}\n scrubFabricStateIdentitySubtree(w);\n resetFabricBrowserStateStore();\n try {\n if (w.sessionStorage) {\n w.sessionStorage.removeItem('fabric.identity.unlocked');\n }\n } catch (e) {}\n try {\n w.localStorage.removeItem('fabric.identity.devSeedSuppressedFor');\n } catch (e) {}\n return true;\n } catch (e) {\n return false;\n }\n}\nmodule.exports = {\n FABRIC_STATE_KEY: FABRIC_STATE_KEY,\n store: store,\n resetFabricBrowserStateStore: resetFabricBrowserStateStore,\n getFabricBrowserGlobal: getFabricBrowserGlobal,\n pathForLegacyKey: pathForLegacyKey,\n readStorageString: readStorageString,\n writeStorageString: writeStorageString,\n readStorageJSON: readStorageJSON,\n writeStorageJSON: writeStorageJSON,\n removeStorageKey: removeStorageKey,\n clearFabricBrowserIdentityLocal: clearFabricBrowserIdentityLocal\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljQnJvd3NlclN0YXRlLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBRWIsSUFBQUssUUFBQSxHQUFxQ0MsbUJBQU8sQ0FBQywrREFBc0IsQ0FBQztFQUE1REMsd0JBQXdCLEdBQUFGLFFBQUEsQ0FBeEJFLHdCQUF3QjtBQUVoQyxJQUFNQyxnQkFBZ0IsR0FBRyxjQUFjO0FBRXZDLFNBQVNDLHNCQUFzQkEsQ0FBQSxFQUFJO0VBQ2pDLElBQUk7SUFDRixJQUFJLE9BQU9DLFVBQVUsS0FBSyxXQUFXLElBQUlBLFVBQVUsQ0FBQ0MsTUFBTSxJQUFJLElBQUksRUFBRSxPQUFPRCxVQUFVLENBQUNDLE1BQU07RUFDOUYsQ0FBQyxDQUFDLE9BQU9DLENBQUMsRUFBRSxDQUFDO0VBQ2IsSUFBSTtJQUNGLElBQUksT0FBT0QsTUFBTSxLQUFLLFdBQVcsRUFBRSxPQUFPQSxNQUFNO0VBQ2xELENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUUsQ0FBQztFQUNiLE9BQU9DLFNBQVM7QUFDbEI7QUFFQSxJQUFNQyxnQkFBZ0IsR0FBRztFQUN2Qix1QkFBdUIsRUFBRSxpQkFBaUI7RUFDMUMsdUJBQXVCLEVBQUUsaUJBQWlCO0VBQzFDLGdDQUFnQyxFQUFFLDBCQUEwQjtFQUM1RCxrQ0FBa0MsRUFBRSw0QkFBNEI7RUFDaEUsb0NBQW9DLEVBQUUsOEJBQThCO0VBQ3BFLG9CQUFvQixFQUFFLGNBQWM7RUFDcEMsbUJBQW1CLEVBQUUsYUFBYTtFQUNsQyxvQ0FBb0MsRUFBRSxpQ0FBaUM7RUFDdkUsNEJBQTRCLEVBQUUscUJBQXFCO0VBQ25ELHdCQUF3QixFQUFFLG1CQUFtQjtFQUM3QyxnQ0FBZ0MsRUFBRSwwQkFBMEI7RUFDNUQseUJBQXlCLEVBQUUsbUJBQW1CO0VBQzlDLG1DQUFtQyxFQUFFLDZCQUE2QjtFQUNsRSx3QkFBd0IsRUFBRSxrQkFBa0I7RUFDNUMsNkJBQTZCLEVBQUUsdUJBQXVCO0VBQ3RELCtCQUErQixFQUFFLHlCQUF5QjtFQUMxRCwyQ0FBMkMsRUFBRSxxQ0FBcUM7RUFDbEYsd0NBQXdDLEVBQUUsa0NBQWtDO0VBQzVFLHlCQUF5QixFQUFFLFdBQVc7RUFDdEMsa0JBQWtCLEVBQUUsWUFBWTtFQUNoQyxpQkFBaUIsRUFBRSxXQUFXO0VBQzlCLDRCQUE0QixFQUFFLHNCQUFzQjtFQUNwRCxtQ0FBbUMsRUFBRSw2QkFBNkI7RUFDbEUsb0NBQW9DLEVBQUU7QUFDeEMsQ0FBQztBQUVELFNBQVNDLGVBQWVBLENBQUEsRUFBSTtFQUMxQixJQUFJO0lBQ0YsSUFBTUMsQ0FBQyxHQUFHUCxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sQ0FBQyxDQUFDTyxDQUFDLElBQUksQ0FBQyxDQUFDQSxDQUFDLENBQUNDLFlBQVk7RUFDaEMsQ0FBQyxDQUFDLE9BQU9DLENBQUMsRUFBRTtJQUNWLE9BQU8sS0FBSztFQUNkO0FBQ0Y7QUFFQSxJQUFJQyxxQkFBcUIsR0FBRyxJQUFJO0FBRWhDLFNBQVNDLDRCQUE0QkEsQ0FBQSxFQUFJO0VBQ3ZDRCxxQkFBcUIsR0FBRyxJQUFJO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0UsS0FBS0EsQ0FBQSxFQUFJO0VBQ2hCLElBQUksQ0FBQ0YscUJBQXFCLEVBQUU7SUFDMUJBLHFCQUFxQixHQUFHWix3QkFBd0IsQ0FBQztNQUMvQ2UsVUFBVSxFQUFFZCxnQkFBZ0I7TUFDNUJlLFlBQVksRUFBRSxDQUFDO0lBQ2pCLENBQUMsQ0FBQztFQUNKO0VBQ0EsT0FBT0oscUJBQXFCO0FBQzlCO0FBRUEsU0FBU0ssZ0JBQWdCQSxDQUFFQyxTQUFTLEVBQUU7RUFDcEMsT0FBT1gsZ0JBQWdCLENBQUNZLE1BQU0sQ0FBQ0QsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSTtBQUNqRTs7QUFFQTtBQUNBLFNBQVNDLG1DQUFtQ0EsQ0FBRUMsR0FBRyxFQUFFO0VBQ2pELElBQUlBLEdBQUcsSUFBSSxJQUFJLElBQUk5QixPQUFBLENBQU84QixHQUFHLE1BQUssUUFBUSxFQUFFLE9BQU8sSUFBSTtFQUN2RCxPQUFPLEVBQUVBLEdBQUcsQ0FBQ0MsRUFBRSxJQUFJRCxHQUFHLENBQUNFLElBQUksSUFBSUYsR0FBRyxDQUFDRyxPQUFPLENBQUM7QUFDN0M7QUFFQSxTQUFTQyxpQkFBaUJBLENBQUVSLFNBQVMsRUFBRTtFQUNyQyxJQUFJLENBQUNWLGVBQWUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFO0VBQ2pDLElBQU1tQixJQUFJLEdBQUdWLGdCQUFnQixDQUFDQyxTQUFTLENBQUM7RUFDeEMsSUFBSTtJQUNGLElBQUlTLElBQUksRUFBRTtNQUNSLElBQU1DLENBQUMsR0FBR2QsS0FBSyxDQUFDLENBQUMsQ0FBQ2UsR0FBRyxDQUFDRixJQUFJLENBQUM7TUFDM0IsSUFBSUMsQ0FBQyxJQUFJLElBQUksRUFBRSxPQUFPVCxNQUFNLENBQUNTLENBQUMsQ0FBQztJQUNqQztFQUNGLENBQUMsQ0FBQyxPQUFPakIsQ0FBQyxFQUFFLENBQUM7RUFDYixJQUFJO0lBQ0YsSUFBTUYsQ0FBQyxHQUFHUCxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQ08sQ0FBQyxFQUFFLE9BQU8sRUFBRTtJQUNqQixPQUFPVSxNQUFNLENBQUNWLENBQUMsQ0FBQ0MsWUFBWSxDQUFDb0IsT0FBTyxDQUFDWixTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7RUFDeEQsQ0FBQyxDQUFDLE9BQU9QLENBQUMsRUFBRTtJQUNWLE9BQU8sRUFBRTtFQUNYO0FBQ0Y7QUFFQSxTQUFTb0Isa0JBQWtCQSxDQUFFYixTQUFTLEVBQUVjLEtBQUssRUFBRTtFQUM3QyxJQUFJLENBQUN4QixlQUFlLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSztFQUNwQyxJQUFNb0IsQ0FBQyxHQUFHVCxNQUFNLENBQUNhLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHQSxLQUFLLENBQUM7RUFDNUMsSUFBTUwsSUFBSSxHQUFHVixnQkFBZ0IsQ0FBQ0MsU0FBUyxDQUFDO0VBQ3hDLElBQUk7SUFDRixJQUFJUyxJQUFJLEVBQUViLEtBQUssQ0FBQyxDQUFDLENBQUNtQixHQUFHLENBQUNOLElBQUksRUFBRUMsQ0FBQyxDQUFDO0VBQ2hDLENBQUMsQ0FBQyxPQUFPakIsQ0FBQyxFQUFFLENBQUM7RUFDYixJQUFJO0lBQ0YsSUFBTUYsQ0FBQyxHQUFHUCxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQ08sQ0FBQyxFQUFFLE9BQU8sS0FBSztJQUNwQkEsQ0FBQyxDQUFDQyxZQUFZLENBQUN3QixPQUFPLENBQUNoQixTQUFTLEVBQUVVLENBQUMsQ0FBQztJQUNwQyxPQUFPLElBQUk7RUFDYixDQUFDLENBQUMsT0FBT2pCLENBQUMsRUFBRTtJQUNWLE9BQU8sS0FBSztFQUNkO0FBQ0Y7QUFFQSxTQUFTd0IsZUFBZUEsQ0FBRWpCLFNBQVMsRUFBRWtCLFFBQVEsRUFBRTtFQUM3QyxJQUFJLENBQUM1QixlQUFlLENBQUMsQ0FBQyxFQUFFLE9BQU80QixRQUFRO0VBQ3ZDLElBQU1ULElBQUksR0FBR1YsZ0JBQWdCLENBQUNDLFNBQVMsQ0FBQztFQUN4QyxJQUFJbUIsUUFBUTtFQUNaLElBQUlDLE9BQU8sR0FBRyxLQUFLO0VBQ25CLElBQUk7SUFDRixJQUFJWCxJQUFJLEVBQUU7TUFDUixJQUFNQyxDQUFDLEdBQUdkLEtBQUssQ0FBQyxDQUFDLENBQUNlLEdBQUcsQ0FBQ0YsSUFBSSxDQUFDO01BQzNCLElBQUksT0FBT0MsQ0FBQyxLQUFLLFdBQVcsRUFBRTtRQUM1QlMsUUFBUSxHQUFHVCxDQUFDO1FBQ1pVLE9BQU8sR0FBRyxJQUFJO01BQ2hCO0lBQ0Y7RUFDRixDQUFDLENBQUMsT0FBTzNCLENBQUMsRUFBRSxDQUFDO0VBQ2IsSUFBSTRCLFVBQVU7RUFDZCxJQUFJQyxTQUFTLEdBQUcsS0FBSztFQUNyQixJQUFJO0lBQ0YsSUFBTS9CLENBQUMsR0FBR1Asc0JBQXNCLENBQUMsQ0FBQztJQUNsQyxJQUFJTyxDQUFDLEVBQUU7TUFDTCxJQUFNZ0MsR0FBRyxHQUFHaEMsQ0FBQyxDQUFDQyxZQUFZLENBQUNvQixPQUFPLENBQUNaLFNBQVMsQ0FBQztNQUM3QyxJQUFJdUIsR0FBRyxFQUFFO1FBQ1BGLFVBQVUsR0FBR0csSUFBSSxDQUFDQyxLQUFLLENBQUNGLEdBQUcsQ0FBQztRQUM1QkQsU0FBUyxHQUFHLElBQUk7TUFDbEI7SUFDRjtFQUNGLENBQUMsQ0FBQyxPQUFPN0IsQ0FBQyxFQUFFO0lBQ1Y0QixVQUFVLEdBQUdqQyxTQUFTO0VBQ3hCO0VBQ0EsSUFDRWEsTUFBTSxDQUFDRCxTQUFTLENBQUMsS0FBSyx1QkFBdUIsSUFDN0NvQixPQUFPLElBQ1BFLFNBQVMsSUFDVG5CLG1DQUFtQyxDQUFDZ0IsUUFBUSxDQUFDLElBQzdDLENBQUNoQixtQ0FBbUMsQ0FBQ2tCLFVBQVUsQ0FBQyxFQUNoRDtJQUNBLE9BQU9BLFVBQVU7RUFDbkI7RUFDQSxJQUFJRCxPQUFPLEVBQUUsT0FBT0QsUUFBUTtFQUM1QixJQUFJRyxTQUFTLEVBQUUsT0FBT0QsVUFBVTtFQUNoQyxPQUFPSCxRQUFRO0FBQ2pCO0FBRUEsU0FBU1EsZ0JBQWdCQSxDQUFFMUIsU0FBUyxFQUFFYyxLQUFLLEVBQUU7RUFDM0MsSUFBSSxDQUFDeEIsZUFBZSxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUs7RUFDcEMsSUFBTW1CLElBQUksR0FBR1YsZ0JBQWdCLENBQUNDLFNBQVMsQ0FBQztFQUN4QyxJQUFJO0lBQ0YsSUFBSVMsSUFBSSxFQUFFYixLQUFLLENBQUMsQ0FBQyxDQUFDbUIsR0FBRyxDQUFDTixJQUFJLEVBQUVLLEtBQUssQ0FBQztFQUNwQyxDQUFDLENBQUMsT0FBT3JCLENBQUMsRUFBRSxDQUFDO0VBQ2IsSUFBSTtJQUNGLElBQU1GLENBQUMsR0FBR1Asc0JBQXNCLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUNPLENBQUMsRUFBRSxPQUFPLEtBQUs7SUFDcEJBLENBQUMsQ0FBQ0MsWUFBWSxDQUFDd0IsT0FBTyxDQUFDaEIsU0FBUyxFQUFFd0IsSUFBSSxDQUFDRyxTQUFTLENBQUNiLEtBQUssQ0FBQyxDQUFDO0lBQ3hELE9BQU8sSUFBSTtFQUNiLENBQUMsQ0FBQyxPQUFPckIsQ0FBQyxFQUFFO0lBQ1YsT0FBTyxLQUFLO0VBQ2Q7QUFDRjtBQUVBLFNBQVNtQyxnQkFBZ0JBLENBQUU1QixTQUFTLEVBQUU7RUFDcEMsSUFBSSxDQUFDVixlQUFlLENBQUMsQ0FBQyxFQUFFLE9BQU8sS0FBSztFQUNwQyxJQUFNbUIsSUFBSSxHQUFHVixnQkFBZ0IsQ0FBQ0MsU0FBUyxDQUFDO0VBQ3hDLElBQUk7SUFDRixJQUFJUyxJQUFJLEVBQUViLEtBQUssQ0FBQyxDQUFDLENBQUNpQyxNQUFNLENBQUNwQixJQUFJLENBQUM7RUFDaEMsQ0FBQyxDQUFDLE9BQU9oQixDQUFDLEVBQUUsQ0FBQztFQUNiLElBQUk7SUFDRixJQUFNRixDQUFDLEdBQUdQLHNCQUFzQixDQUFDLENBQUM7SUFDbEMsSUFBSSxDQUFDTyxDQUFDLEVBQUUsT0FBTyxLQUFLO0lBQ3BCQSxDQUFDLENBQUNDLFlBQVksQ0FBQ3NDLFVBQVUsQ0FBQzlCLFNBQVMsQ0FBQztJQUNwQyxPQUFPLElBQUk7RUFDYixDQUFDLENBQUMsT0FBT1AsQ0FBQyxFQUFFO0lBQ1YsT0FBTyxLQUFLO0VBQ2Q7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNzQywrQkFBK0JBLENBQUV4QyxDQUFDLEVBQUU7RUFDM0MsSUFBSSxDQUFDQSxDQUFDLElBQUksQ0FBQ0EsQ0FBQyxDQUFDQyxZQUFZLEVBQUU7RUFDM0IsSUFBSTtJQUNGLElBQU0rQixHQUFHLEdBQUdoQyxDQUFDLENBQUNDLFlBQVksQ0FBQ29CLE9BQU8sQ0FBQzdCLGdCQUFnQixDQUFDO0lBQ3BELElBQUksQ0FBQ3dDLEdBQUcsRUFBRTtJQUNWLElBQU1TLEVBQUUsR0FBR1IsSUFBSSxDQUFDQyxLQUFLLENBQUNGLEdBQUcsQ0FBQztJQUMxQixJQUFJLENBQUNTLEVBQUUsSUFBSTFELE9BQUEsQ0FBTzBELEVBQUUsTUFBSyxRQUFRLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDRixFQUFFLENBQUMsRUFBRTtJQUN4RCxJQUFJLENBQUNHLE1BQU0sQ0FBQ3hELFNBQVMsQ0FBQ3lELGNBQWMsQ0FBQ0MsSUFBSSxDQUFDTCxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUU7SUFDM0QsSUFBTU0sTUFBTSxHQUFHTixFQUFFLENBQUNPLFFBQVE7SUFDMUIsSUFBSSxDQUFDRCxNQUFNLElBQUloRSxPQUFBLENBQU9nRSxNQUFNLE1BQUssUUFBUSxJQUFJTCxLQUFLLENBQUNDLE9BQU8sQ0FBQ0ksTUFBTSxDQUFDLEVBQUU7SUFDcEUsSUFBSUgsTUFBTSxDQUFDeEQsU0FBUyxDQUFDeUQsY0FBYyxDQUFDQyxJQUFJLENBQUNDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRTtNQUN6RCxPQUFPQSxNQUFNLENBQUNFLEtBQUs7SUFDckI7SUFDQSxJQUFJTCxNQUFNLENBQUNNLElBQUksQ0FBQ0gsTUFBTSxDQUFDLENBQUNJLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDcEMsT0FBT1YsRUFBRSxDQUFDTyxRQUFRO0lBQ3BCO0lBQ0FoRCxDQUFDLENBQUNDLFlBQVksQ0FBQ3dCLE9BQU8sQ0FBQ2pDLGdCQUFnQixFQUFFeUMsSUFBSSxDQUFDRyxTQUFTLENBQUNLLEVBQUUsQ0FBQyxDQUFDO0VBQzlELENBQUMsQ0FBQyxPQUFPdkMsQ0FBQyxFQUFFLENBQUM7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU2tELCtCQUErQkEsQ0FBQSxFQUFJO0VBQzFDLElBQUksQ0FBQ3JELGVBQWUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLO0VBQ3BDLElBQU1DLENBQUMsR0FBR1Asc0JBQXNCLENBQUMsQ0FBQztFQUNsQyxJQUFJLENBQUNPLENBQUMsSUFBSSxDQUFDQSxDQUFDLENBQUNDLFlBQVksRUFBRSxPQUFPLEtBQUs7RUFDdkMsSUFBSTtJQUNGLElBQU1pQixJQUFJLEdBQUdWLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDO0lBQ3RELElBQUk7TUFDRixJQUFJVSxJQUFJLEVBQUViLEtBQUssQ0FBQyxDQUFDLENBQUNpQyxNQUFNLENBQUNwQixJQUFJLENBQUM7SUFDaEMsQ0FBQyxDQUFDLE9BQU9oQixDQUFDLEVBQUUsQ0FBQztJQUNiLElBQUk7TUFDRkYsQ0FBQyxDQUFDQyxZQUFZLENBQUNzQyxVQUFVLENBQUMsdUJBQXVCLENBQUM7SUFDcEQsQ0FBQyxDQUFDLE9BQU9yQyxDQUFDLEVBQUUsQ0FBQztJQUNic0MsK0JBQStCLENBQUN4QyxDQUFDLENBQUM7SUFDbENJLDRCQUE0QixDQUFDLENBQUM7SUFDOUIsSUFBSTtNQUNGLElBQUlKLENBQUMsQ0FBQ3FELGNBQWMsRUFBRTtRQUNwQnJELENBQUMsQ0FBQ3FELGNBQWMsQ0FBQ2QsVUFBVSxDQUFDLDBCQUEwQixDQUFDO01BQ3pEO0lBQ0YsQ0FBQyxDQUFDLE9BQU9yQyxDQUFDLEVBQUUsQ0FBQztJQUNiLElBQUk7TUFDRkYsQ0FBQyxDQUFDQyxZQUFZLENBQUNzQyxVQUFVLENBQUMsc0NBQXNDLENBQUM7SUFDbkUsQ0FBQyxDQUFDLE9BQU9yQyxDQUFDLEVBQUUsQ0FBQztJQUNiLE9BQU8sSUFBSTtFQUNiLENBQUMsQ0FBQyxPQUFPQSxDQUFDLEVBQUU7SUFDVixPQUFPLEtBQUs7RUFDZDtBQUNGO0FBRUFvRCxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmL0QsZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7RUFDaEJhLEtBQUssRUFBTEEsS0FBSztFQUNMRCw0QkFBNEIsRUFBNUJBLDRCQUE0QjtFQUM1Qlgsc0JBQXNCLEVBQXRCQSxzQkFBc0I7RUFDdEJlLGdCQUFnQixFQUFoQkEsZ0JBQWdCO0VBQ2hCUyxpQkFBaUIsRUFBakJBLGlCQUFpQjtFQUNqQkssa0JBQWtCLEVBQWxCQSxrQkFBa0I7RUFDbEJJLGVBQWUsRUFBZkEsZUFBZTtFQUNmUyxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtFQUNoQkUsZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7RUFDaEJlLCtCQUErQixFQUEvQkE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljQnJvd3NlclN0YXRlLmpzPzE1ZmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IGNyZWF0ZUZhYnJpY0Jyb3dzZXJTdG9yZSB9ID0gcmVxdWlyZSgnLi9mYWJyaWNCcm93c2VyU3RvcmUnKTtcblxuY29uc3QgRkFCUklDX1NUQVRFX0tFWSA9ICdmYWJyaWM6c3RhdGUnO1xuXG5mdW5jdGlvbiBnZXRGYWJyaWNCcm93c2VyR2xvYmFsICgpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMud2luZG93ICE9IG51bGwpIHJldHVybiBnbG9iYWxUaGlzLndpbmRvdztcbiAgfSBjYXRjaCAoXykge31cbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiB3aW5kb3c7XG4gIH0gY2F0Y2ggKF8pIHt9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IExFR0FDWV9LRVlfUEFUSFMgPSB7XG4gICdmYWJyaWMuaWRlbnRpdHkubG9jYWwnOiAnL2lkZW50aXR5L2xvY2FsJyxcbiAgJ2ZhYnJpYy5odWIuYWRtaW5Ub2tlbic6ICcvaHViL2FkbWluVG9rZW4nLFxuICAnZmFicmljLmh1Yi5hZG1pblRva2VuRXhwaXJlc0F0JzogJy9odWIvYWRtaW5Ub2tlbkV4cGlyZXNBdCcsXG4gICdmYWJyaWMuaHViLmlkZW50aXR5V2l6YXJkUGVuZGluZyc6ICcvaHViL2lkZW50aXR5V2l6YXJkUGVuZGluZycsXG4gICdmYWJyaWMuaHViLmlkZW50aXR5V2l6YXJkRGlzbWlzc2VkJzogJy9odWIvaWRlbnRpdHlXaXphcmREaXNtaXNzZWQnLFxuICAnZmFicmljLmh1Yi5hZGRyZXNzJzogJy9odWIvYWRkcmVzcycsXG4gICdmYWJyaWMuZGVsZWdhdGlvbic6ICcvZGVsZWdhdGlvbicsXG4gICdmYWJyaWMuaHViLmZlZGVyYXRpb25TcGVuZGluZ1ByZWZzJzogJy9wcmVmZXJlbmNlcy9mZWRlcmF0aW9uU3BlbmRpbmcnLFxuICAnZmFicmljLmh1Yi5hbGVydERpc21pc3NhbHMnOiAnL3VpL2FsZXJ0RGlzbWlzc2FscycsXG4gICdmYWJyaWM6dWlOb3RpZmljYXRpb25zJzogJy91aS9ub3RpZmljYXRpb25zJyxcbiAgJ2ZhYnJpYy5qb2lubWFya2V0LnBvb2xTaXplc0J0Yyc6ICcvam9pbm1hcmtldC9wb29sU2l6ZXNCdGMnLFxuICAnZmFicmljLmJpdGNvaW4udXBzdHJlYW0nOiAnL2JpdGNvaW4vdXBzdHJlYW0nLFxuICAnZmFicmljLmJpdGNvaW4ucGF5am9pblByZWZlcmVuY2VzJzogJy9iaXRjb2luL3BheWpvaW5QcmVmZXJlbmNlcycsXG4gICdmYWJyaWMuYml0Y29pbi53YWxsZXRzJzogJy9iaXRjb2luL3dhbGxldHMnLFxuICAnZmFicmljLmJpdGNvaW4uYmFsYW5jZUNhY2hlJzogJy9iaXRjb2luL2JhbGFuY2VDYWNoZScsXG4gICdmYWJyaWMuYml0Y29pbi5zcGVuZFhwdWJXYXRjaCc6ICcvYml0Y29pbi9zcGVuZFhwdWJXYXRjaCcsXG4gICdmYWJyaWMuYml0Y29pbi5kZWZhdWx0QmlwNDRSZWNlaXZlQWNjb3VudCc6ICcvYml0Y29pbi9kZWZhdWx0QmlwNDRSZWNlaXZlQWNjb3VudCcsXG4gICdmYWJyaWMuYml0Y29pbi5kZWZhdWx0QmlwNDRTZW5kQWNjb3VudCc6ICcvYml0Y29pbi9kZWZhdWx0QmlwNDRTZW5kQWNjb3VudCcsXG4gICdmYWJyaWMuYml0Y29pbi5pbnZvaWNlcyc6ICcvaW52b2ljZXMnLFxuICAnZmFicmljOmRvY3VtZW50cyc6ICcvZG9jdW1lbnRzJyxcbiAgJ2ZhYnJpYzptZXNzYWdlcyc6ICcvbWVzc2FnZXMnLFxuICAnZmFicmljOmRpc3RyaWJ1dGVQcm9wb3NhbHMnOiAnL2Rpc3RyaWJ1dGVQcm9wb3NhbHMnLFxuICAnZmFicmljLnBlZXJzLnByaW1hcnlGYWJyaWNBZGRyZXNzJzogJy9wZWVycy9wcmltYXJ5RmFicmljQWRkcmVzcycsXG4gICdmYWJyaWMuaWRlbnRpdHkubG9ja1RpbWVvdXRNaW51dGVzJzogJy9wcmVmZXJlbmNlcy9pZGVudGl0eUxvY2tUaW1lb3V0TWludXRlcydcbn07XG5cbmZ1bmN0aW9uIGhhc0xvY2FsU3RvcmFnZSAoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgdyA9IGdldEZhYnJpY0Jyb3dzZXJHbG9iYWwoKTtcbiAgICByZXR1cm4gISF3ICYmICEhdy5sb2NhbFN0b3JhZ2U7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubGV0IF9mYWJyaWNTdGF0ZVNpbmdsZXRvbiA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlc2V0RmFicmljQnJvd3NlclN0YXRlU3RvcmUgKCkge1xuICBfZmFicmljU3RhdGVTaW5nbGV0b24gPSBudWxsO1xufVxuXG4vKipcbiAqIFNpbmdsZSB7QGxpbmsgY3JlYXRlRmFicmljQnJvd3NlclN0b3JlfSBmb3IgYGZhYnJpYzpzdGF0ZWAuXG4gKiBNdWx0aXBsZSBpbnN0YW5jZXMgdXNlZCB0byBzaWxlbnRseSBjbG9iYmVyIHdyaXRlcyAoQnJpZGdlIEpTT04tUEFUQ0ggdnMgaHViIFVJIHByZWZzIGBQVVRgKS5cbiAqL1xuZnVuY3Rpb24gc3RvcmUgKCkge1xuICBpZiAoIV9mYWJyaWNTdGF0ZVNpbmdsZXRvbikge1xuICAgIF9mYWJyaWNTdGF0ZVNpbmdsZXRvbiA9IGNyZWF0ZUZhYnJpY0Jyb3dzZXJTdG9yZSh7XG4gICAgICBzdG9yYWdlS2V5OiBGQUJSSUNfU1RBVEVfS0VZLFxuICAgICAgaW5pdGlhbFN0YXRlOiB7fVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBfZmFicmljU3RhdGVTaW5nbGV0b247XG59XG5cbmZ1bmN0aW9uIHBhdGhGb3JMZWdhY3lLZXkgKGxlZ2FjeUtleSkge1xuICByZXR1cm4gTEVHQUNZX0tFWV9QQVRIU1tTdHJpbmcobGVnYWN5S2V5IHx8ICcnKS50cmltKCldIHx8IG51bGw7XG59XG5cbi8qKiBUcnVlIHdoZW4gbmVzdGVkIGAvaWRlbnRpdHkvbG9jYWxgIGlzIHVzZWxlc3MgYnV0IGxlZ2FjeSBgZmFicmljLmlkZW50aXR5LmxvY2FsYCBtYXkgc3RpbGwgaG9sZCB0cnV0aC4gKi9cbmZ1bmN0aW9uIGZhYnJpY0lkZW50aXR5TG9jYWxOZXN0ZWRMb29rc0VtcHR5IChvYmopIHtcbiAgaWYgKG9iaiA9PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuICEob2JqLmlkIHx8IG9iai54cHViIHx8IG9iai54cHJ2RW5jKTtcbn1cblxuZnVuY3Rpb24gcmVhZFN0b3JhZ2VTdHJpbmcgKGxlZ2FjeUtleSkge1xuICBpZiAoIWhhc0xvY2FsU3RvcmFnZSgpKSByZXR1cm4gJyc7XG4gIGNvbnN0IHBhdGggPSBwYXRoRm9yTGVnYWN5S2V5KGxlZ2FjeUtleSk7XG4gIHRyeSB7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHYgPSBzdG9yZSgpLkdFVChwYXRoKTtcbiAgICAgIGlmICh2ICE9IG51bGwpIHJldHVybiBTdHJpbmcodik7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuICB0cnkge1xuICAgIGNvbnN0IHcgPSBnZXRGYWJyaWNCcm93c2VyR2xvYmFsKCk7XG4gICAgaWYgKCF3KSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIFN0cmluZyh3LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGxlZ2FjeUtleSkgfHwgJycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RvcmFnZVN0cmluZyAobGVnYWN5S2V5LCB2YWx1ZSkge1xuICBpZiAoIWhhc0xvY2FsU3RvcmFnZSgpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHYgPSBTdHJpbmcodmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xuICBjb25zdCBwYXRoID0gcGF0aEZvckxlZ2FjeUtleShsZWdhY3lLZXkpO1xuICB0cnkge1xuICAgIGlmIChwYXRoKSBzdG9yZSgpLlBVVChwYXRoLCB2KTtcbiAgfSBjYXRjaCAoZSkge31cbiAgdHJ5IHtcbiAgICBjb25zdCB3ID0gZ2V0RmFicmljQnJvd3Nlckdsb2JhbCgpO1xuICAgIGlmICghdykgcmV0dXJuIGZhbHNlO1xuICAgIHcubG9jYWxTdG9yYWdlLnNldEl0ZW0obGVnYWN5S2V5LCB2KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkU3RvcmFnZUpTT04gKGxlZ2FjeUtleSwgZmFsbGJhY2spIHtcbiAgaWYgKCFoYXNMb2NhbFN0b3JhZ2UoKSkgcmV0dXJuIGZhbGxiYWNrO1xuICBjb25zdCBwYXRoID0gcGF0aEZvckxlZ2FjeUtleShsZWdhY3lLZXkpO1xuICBsZXQgZnJvbVBhdGg7XG4gIGxldCBoYXNQYXRoID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNvbnN0IHYgPSBzdG9yZSgpLkdFVChwYXRoKTtcbiAgICAgIGlmICh0eXBlb2YgdiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZnJvbVBhdGggPSB2O1xuICAgICAgICBoYXNQYXRoID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIGxldCBmcm9tTGVnYWN5O1xuICBsZXQgaGFzTGVnYWN5ID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgdyA9IGdldEZhYnJpY0Jyb3dzZXJHbG9iYWwoKTtcbiAgICBpZiAodykge1xuICAgICAgY29uc3QgcmF3ID0gdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShsZWdhY3lLZXkpO1xuICAgICAgaWYgKHJhdykge1xuICAgICAgICBmcm9tTGVnYWN5ID0gSlNPTi5wYXJzZShyYXcpO1xuICAgICAgICBoYXNMZWdhY3kgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGZyb21MZWdhY3kgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKFxuICAgIFN0cmluZyhsZWdhY3lLZXkpID09PSAnZmFicmljLmlkZW50aXR5LmxvY2FsJyAmJlxuICAgIGhhc1BhdGggJiZcbiAgICBoYXNMZWdhY3kgJiZcbiAgICBmYWJyaWNJZGVudGl0eUxvY2FsTmVzdGVkTG9va3NFbXB0eShmcm9tUGF0aCkgJiZcbiAgICAhZmFicmljSWRlbnRpdHlMb2NhbE5lc3RlZExvb2tzRW1wdHkoZnJvbUxlZ2FjeSlcbiAgKSB7XG4gICAgcmV0dXJuIGZyb21MZWdhY3k7XG4gIH1cbiAgaWYgKGhhc1BhdGgpIHJldHVybiBmcm9tUGF0aDtcbiAgaWYgKGhhc0xlZ2FjeSkgcmV0dXJuIGZyb21MZWdhY3k7XG4gIHJldHVybiBmYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gd3JpdGVTdG9yYWdlSlNPTiAobGVnYWN5S2V5LCB2YWx1ZSkge1xuICBpZiAoIWhhc0xvY2FsU3RvcmFnZSgpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHBhdGggPSBwYXRoRm9yTGVnYWN5S2V5KGxlZ2FjeUtleSk7XG4gIHRyeSB7XG4gICAgaWYgKHBhdGgpIHN0b3JlKCkuUFVUKHBhdGgsIHZhbHVlKTtcbiAgfSBjYXRjaCAoZSkge31cbiAgdHJ5IHtcbiAgICBjb25zdCB3ID0gZ2V0RmFicmljQnJvd3Nlckdsb2JhbCgpO1xuICAgIGlmICghdykgcmV0dXJuIGZhbHNlO1xuICAgIHcubG9jYWxTdG9yYWdlLnNldEl0ZW0obGVnYWN5S2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN0b3JhZ2VLZXkgKGxlZ2FjeUtleSkge1xuICBpZiAoIWhhc0xvY2FsU3RvcmFnZSgpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHBhdGggPSBwYXRoRm9yTGVnYWN5S2V5KGxlZ2FjeUtleSk7XG4gIHRyeSB7XG4gICAgaWYgKHBhdGgpIHN0b3JlKCkuREVMRVRFKHBhdGgpO1xuICB9IGNhdGNoIChlKSB7fVxuICB0cnkge1xuICAgIGNvbnN0IHcgPSBnZXRGYWJyaWNCcm93c2VyR2xvYmFsKCk7XG4gICAgaWYgKCF3KSByZXR1cm4gZmFsc2U7XG4gICAgdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShsZWdhY3lLZXkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlIGBpZGVudGl0eS5sb2NhbGAgZnJvbSBwZXJzaXN0ZWQgYGZhYnJpYzpzdGF0ZWAgSlNPTiB3aGVuIHByZXNlbnQgKGRlZmVuc2l2ZSkuXG4gKiBUaGUgbmVzdGVkLXN0b3JlIHNpbmdsZXRvbiBjYW4gb3RoZXJ3aXNlIGtlZXAgc2VydmluZyBgL2lkZW50aXR5L2xvY2FsYCBhZnRlciBhIHBhcnRpYWwgZGVsZXRlLlxuICovXG5mdW5jdGlvbiBzY3J1YkZhYnJpY1N0YXRlSWRlbnRpdHlTdWJ0cmVlICh3KSB7XG4gIGlmICghdyB8fCAhdy5sb2NhbFN0b3JhZ2UpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSB3LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEZBQlJJQ19TVEFURV9LRVkpO1xuICAgIGlmICghcmF3KSByZXR1cm47XG4gICAgY29uc3Qgc3QgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgaWYgKCFzdCB8fCB0eXBlb2Ygc3QgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoc3QpKSByZXR1cm47XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3QsICdpZGVudGl0eScpKSByZXR1cm47XG4gICAgY29uc3QgaWROb2RlID0gc3QuaWRlbnRpdHk7XG4gICAgaWYgKCFpZE5vZGUgfHwgdHlwZW9mIGlkTm9kZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShpZE5vZGUpKSByZXR1cm47XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpZE5vZGUsICdsb2NhbCcpKSB7XG4gICAgICBkZWxldGUgaWROb2RlLmxvY2FsO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoaWROb2RlKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGRlbGV0ZSBzdC5pZGVudGl0eTtcbiAgICB9XG4gICAgdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShGQUJSSUNfU1RBVEVfS0VZLCBKU09OLnN0cmluZ2lmeShzdCkpO1xuICB9IGNhdGNoIChlKSB7fVxufVxuXG4vKipcbiAqIEZ1bGwgYnJvd3NlciBGYWJyaWMgaWRlbnRpdHkgd2lwZSBmb3IgRm9yZ2V0IC8gRGVzdHJveTogbmVzdGVkIGBmYWJyaWM6c3RhdGVgIHBhdGgsXG4gKiBsZWdhY3kgYGZhYnJpYy5pZGVudGl0eS5sb2NhbGAsIHNlc3Npb24gdW5sb2NrIGJsb2IsIGRldi1zZWVkIHN1cHByZXNzaW9uIG1hcmtlci5cbiAqIFJlc2V0cyB0aGUgYGZhYnJpYzpzdGF0ZWAgc2luZ2xldG9uIHNvIHRoZSBuZXh0IHJlYWQgc2VlcyBkaXNrIHRydXRoLlxuICovXG5mdW5jdGlvbiBjbGVhckZhYnJpY0Jyb3dzZXJJZGVudGl0eUxvY2FsICgpIHtcbiAgaWYgKCFoYXNMb2NhbFN0b3JhZ2UoKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB3ID0gZ2V0RmFicmljQnJvd3Nlckdsb2JhbCgpO1xuICBpZiAoIXcgfHwgIXcubG9jYWxTdG9yYWdlKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF0aCA9IHBhdGhGb3JMZWdhY3lLZXkoJ2ZhYnJpYy5pZGVudGl0eS5sb2NhbCcpO1xuICAgIHRyeSB7XG4gICAgICBpZiAocGF0aCkgc3RvcmUoKS5ERUxFVEUocGF0aCk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnZmFicmljLmlkZW50aXR5LmxvY2FsJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICBzY3J1YkZhYnJpY1N0YXRlSWRlbnRpdHlTdWJ0cmVlKHcpO1xuICAgIHJlc2V0RmFicmljQnJvd3NlclN0YXRlU3RvcmUoKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHcuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgICAgdy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdmYWJyaWMuaWRlbnRpdHkudW5sb2NrZWQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICB3LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdmYWJyaWMuaWRlbnRpdHkuZGV2U2VlZFN1cHByZXNzZWRGb3InKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBGQUJSSUNfU1RBVEVfS0VZLFxuICBzdG9yZSxcbiAgcmVzZXRGYWJyaWNCcm93c2VyU3RhdGVTdG9yZSxcbiAgZ2V0RmFicmljQnJvd3Nlckdsb2JhbCxcbiAgcGF0aEZvckxlZ2FjeUtleSxcbiAgcmVhZFN0b3JhZ2VTdHJpbmcsXG4gIHdyaXRlU3RvcmFnZVN0cmluZyxcbiAgcmVhZFN0b3JhZ2VKU09OLFxuICB3cml0ZVN0b3JhZ2VKU09OLFxuICByZW1vdmVTdG9yYWdlS2V5LFxuICBjbGVhckZhYnJpY0Jyb3dzZXJJZGVudGl0eUxvY2FsXG59O1xuXG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3JlcXVpcmUiLCJyZXF1aXJlIiwiY3JlYXRlRmFicmljQnJvd3NlclN0b3JlIiwiRkFCUklDX1NUQVRFX0tFWSIsImdldEZhYnJpY0Jyb3dzZXJHbG9iYWwiLCJnbG9iYWxUaGlzIiwid2luZG93IiwiXyIsInVuZGVmaW5lZCIsIkxFR0FDWV9LRVlfUEFUSFMiLCJoYXNMb2NhbFN0b3JhZ2UiLCJ3IiwibG9jYWxTdG9yYWdlIiwiZSIsIl9mYWJyaWNTdGF0ZVNpbmdsZXRvbiIsInJlc2V0RmFicmljQnJvd3NlclN0YXRlU3RvcmUiLCJzdG9yZSIsInN0b3JhZ2VLZXkiLCJpbml0aWFsU3RhdGUiLCJwYXRoRm9yTGVnYWN5S2V5IiwibGVnYWN5S2V5IiwiU3RyaW5nIiwidHJpbSIsImZhYnJpY0lkZW50aXR5TG9jYWxOZXN0ZWRMb29rc0VtcHR5Iiwib2JqIiwiaWQiLCJ4cHViIiwieHBydkVuYyIsInJlYWRTdG9yYWdlU3RyaW5nIiwicGF0aCIsInYiLCJHRVQiLCJnZXRJdGVtIiwid3JpdGVTdG9yYWdlU3RyaW5nIiwidmFsdWUiLCJQVVQiLCJzZXRJdGVtIiwicmVhZFN0b3JhZ2VKU09OIiwiZmFsbGJhY2siLCJmcm9tUGF0aCIsImhhc1BhdGgiLCJmcm9tTGVnYWN5IiwiaGFzTGVnYWN5IiwicmF3IiwiSlNPTiIsInBhcnNlIiwid3JpdGVTdG9yYWdlSlNPTiIsInN0cmluZ2lmeSIsInJlbW92ZVN0b3JhZ2VLZXkiLCJERUxFVEUiLCJyZW1vdmVJdGVtIiwic2NydWJGYWJyaWNTdGF0ZUlkZW50aXR5U3VidHJlZSIsInN0IiwiQXJyYXkiLCJpc0FycmF5IiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaWROb2RlIiwiaWRlbnRpdHkiLCJsb2NhbCIsImtleXMiLCJsZW5ndGgiLCJjbGVhckZhYnJpY0Jyb3dzZXJJZGVudGl0eUxvY2FsIiwic2Vzc2lvblN0b3JhZ2UiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/fabricBrowserState.js\n\n}")},"./functions/fabricBrowserStore.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar _require = __webpack_require__(/*! fast-json-patch */ \"./node_modules/fast-json-patch/index.mjs\"),\n applyPatch = _require.applyPatch;\nfunction getFabricBrowserGlobal() {\n try {\n if (typeof globalThis !== 'undefined' && globalThis.window != null) return globalThis.window;\n } catch (_) {}\n try {\n if (typeof window !== 'undefined') return window;\n } catch (_) {}\n return undefined;\n}\nfunction cloneJSON(value) {\n return JSON.parse(JSON.stringify(value));\n}\nfunction splitPointer(path) {\n if (path == null || path === '' || path === '/') return [];\n var s = String(path);\n var raw = s.startsWith('/') ? s.slice(1) : s;\n if (!raw) return [];\n return raw.split('/').map(function (seg) {\n return seg.replace(/~1/g, '/').replace(/~0/g, '~');\n });\n}\nfunction getAtPointer(doc, path) {\n var segs = splitPointer(path);\n var cur = doc;\n var _iterator = _createForOfIteratorHelper(segs),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var seg = _step.value;\n if (cur == null || _typeof(cur) !== 'object') return undefined;\n if (!Object.prototype.hasOwnProperty.call(cur, seg)) return undefined;\n cur = cur[seg];\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return cur;\n}\nfunction normalizePatchOps(input, currentState) {\n var ops = Array.isArray(input) ? input : [input];\n var normalized = [];\n var _iterator2 = _createForOfIteratorHelper(ops),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var op = _step2.value;\n if (!op || _typeof(op) !== 'object') continue;\n var kind = String(op.op || '').trim().toLowerCase();\n var path = String(op.path || '').trim() || '/';\n if (kind === 'add' || kind === 'replace' || kind === 'remove') {\n normalized.push({\n op: kind,\n path: path,\n value: op.value\n });\n continue;\n }\n if (kind === 'set' || kind === 'put') {\n var existing = getAtPointer(currentState, path);\n normalized.push({\n op: typeof existing === 'undefined' ? 'add' : 'replace',\n path: path,\n value: op.value\n });\n continue;\n }\n if (kind === 'delete' || kind === 'unset') {\n normalized.push({\n op: 'remove',\n path: path\n });\n continue;\n }\n if (kind === 'merge') {\n var _existing = getAtPointer(currentState, path);\n var a = _existing && _typeof(_existing) === 'object' && !Array.isArray(_existing) ? _existing : {};\n var b = op.value && _typeof(op.value) === 'object' && !Array.isArray(op.value) ? op.value : {};\n var merged = Object.create(null);\n for (var _i = 0, _Object$keys = Object.keys(a); _i < _Object$keys.length; _i++) {\n var k = _Object$keys[_i];\n if (k === '__proto__' || k === 'constructor' || k === 'prototype') continue;\n merged[k] = a[k];\n }\n for (var _i2 = 0, _Object$keys2 = Object.keys(b); _i2 < _Object$keys2.length; _i2++) {\n var _k = _Object$keys2[_i2];\n if (_k === '__proto__' || _k === 'constructor' || _k === 'prototype') continue;\n merged[_k] = b[_k];\n }\n normalized.push({\n op: 'replace',\n path: path,\n value: merged\n });\n continue;\n }\n if (!kind && Object.prototype.hasOwnProperty.call(op, 'value')) {\n var _existing2 = getAtPointer(currentState, path);\n normalized.push({\n op: typeof _existing2 === 'undefined' ? 'add' : 'replace',\n path: path,\n value: op.value\n });\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n return normalized;\n}\nfunction createFabricBrowserStore() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var storageKey = String(opts.storageKey || 'fabric:state');\n var initialState = opts.initialState && _typeof(opts.initialState) === 'object' ? cloneJSON(opts.initialState) : {};\n var state = initialState;\n function hasStorage() {\n try {\n var w = getFabricBrowserGlobal();\n return !!w && !!w.localStorage;\n } catch (e) {\n return false;\n }\n }\n function save() {\n if (!hasStorage()) return false;\n try {\n var w = getFabricBrowserGlobal();\n if (!w) return false;\n w.localStorage.setItem(storageKey, JSON.stringify(state));\n return true;\n } catch (e) {\n return false;\n }\n }\n function load() {\n if (!hasStorage()) return false;\n try {\n var w = getFabricBrowserGlobal();\n if (!w) return false;\n var raw = w.localStorage.getItem(storageKey);\n if (!raw) return false;\n var parsed = JSON.parse(raw);\n if (!parsed || _typeof(parsed) !== 'object' || Array.isArray(parsed)) return false;\n state = parsed;\n return true;\n } catch (e) {\n return false;\n }\n }\n load();\n function GET() {\n var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '/';\n if (path === '/' || path == null || path === '') return state;\n return getAtPointer(state, path);\n }\n function PUT() {\n var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '/';\n var value = arguments.length > 1 ? arguments[1] : undefined;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (path === '/' || path == null || path === '') {\n state = value && _typeof(value) === 'object' ? cloneJSON(value) : {};\n if (options.persist !== false) save();\n return state;\n }\n var ops = normalizePatchOps([{\n op: 'put',\n path: path,\n value: value\n }], state);\n var result = applyPatch(state, ops, true, false);\n state = result.newDocument;\n if (options.persist !== false) save();\n return state;\n }\n function PATCH(ops) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var normalized = normalizePatchOps(ops, state);\n if (!normalized.length) return state;\n var result = applyPatch(state, normalized, true, false);\n state = result.newDocument;\n if (options.persist !== false) save();\n return state;\n }\n function DELETE() {\n var path = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '/';\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (path === '/' || path == null || path === '') {\n state = {};\n if (options.persist !== false) save();\n return state;\n }\n var ops = normalizePatchOps([{\n op: 'delete',\n path: path\n }], state);\n if (!ops.length) return state;\n var result = applyPatch(state, ops, true, false);\n state = result.newDocument;\n if (options.persist !== false) save();\n return state;\n }\n return {\n GET: GET,\n PUT: PUT,\n PATCH: PATCH,\n DELETE: DELETE,\n getState: function getState() {\n return state;\n },\n save: save,\n load: load\n };\n}\nmodule.exports = {\n createFabricBrowserStore: createFabricBrowserStore,\n normalizePatchOps: normalizePatchOps\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QU87SUFDTFMsR0FBRyxFQUFIQSxHQUFHO0lBQ0hDLEdBQUcsRUFBSEEsR0FBRztJQUNISyxLQUFLLEVBQUxBLEtBQUs7SUFDTEMsTUFBTSxFQUFOQSxNQUFNO0lBQ05DLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFBO01BQUEsT0FBUWpCLEtBQUs7SUFBQTtJQUNyQkksSUFBSSxFQUFKQSxJQUFJO0lBQ0pFLElBQUksRUFBSkE7RUFDRixDQUFDO0FBQ0g7QUFFQVksTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZnhCLHdCQUF3QixFQUF4QkEsd0JBQXdCO0VBQ3hCdEIsaUJBQWlCLEVBQWpCQTtBQUNGLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9mYWJyaWNCcm93c2VyU3RvcmUuanM/OWM4YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHsgYXBwbHlQYXRjaCB9ID0gcmVxdWlyZSgnZmFzdC1qc29uLXBhdGNoJyk7XG5cbmZ1bmN0aW9uIGdldEZhYnJpY0Jyb3dzZXJHbG9iYWwgKCkge1xuICB0cnkge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcy53aW5kb3cgIT0gbnVsbCkgcmV0dXJuIGdsb2JhbFRoaXMud2luZG93O1xuICB9IGNhdGNoIChfKSB7fVxuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHdpbmRvdztcbiAgfSBjYXRjaCAoXykge31cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2xvbmVKU09OICh2YWx1ZSkge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBzcGxpdFBvaW50ZXIgKHBhdGgpIHtcbiAgaWYgKHBhdGggPT0gbnVsbCB8fCBwYXRoID09PSAnJyB8fCBwYXRoID09PSAnLycpIHJldHVybiBbXTtcbiAgY29uc3QgcyA9IFN0cmluZyhwYXRoKTtcbiAgY29uc3QgcmF3ID0gcy5zdGFydHNXaXRoKCcvJykgPyBzLnNsaWNlKDEpIDogcztcbiAgaWYgKCFyYXcpIHJldHVybiBbXTtcbiAgcmV0dXJuIHJhdy5zcGxpdCgnLycpLm1hcCgoc2VnKSA9PiBzZWcucmVwbGFjZSgvfjEvZywgJy8nKS5yZXBsYWNlKC9+MC9nLCAnficpKTtcbn1cblxuZnVuY3Rpb24gZ2V0QXRQb2ludGVyIChkb2MsIHBhdGgpIHtcbiAgY29uc3Qgc2VncyA9IHNwbGl0UG9pbnRlcihwYXRoKTtcbiAgbGV0IGN1ciA9IGRvYztcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2Vncykge1xuICAgIGlmIChjdXIgPT0gbnVsbCB8fCB0eXBlb2YgY3VyICE9PSAnb2JqZWN0JykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjdXIsIHNlZykpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY3VyID0gY3VyW3NlZ107XG4gIH1cbiAgcmV0dXJuIGN1cjtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0Y2hPcHMgKGlucHV0LCBjdXJyZW50U3RhdGUpIHtcbiAgY29uc3Qgb3BzID0gQXJyYXkuaXNBcnJheShpbnB1dCkgPyBpbnB1dCA6IFtpbnB1dF07XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBbXTtcbiAgZm9yIChjb25zdCBvcCBvZiBvcHMpIHtcbiAgICBpZiAoIW9wIHx8IHR5cGVvZiBvcCAhPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGtpbmQgPSBTdHJpbmcob3Aub3AgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHBhdGggPSBTdHJpbmcob3AucGF0aCB8fCAnJykudHJpbSgpIHx8ICcvJztcbiAgICBpZiAoa2luZCA9PT0gJ2FkZCcgfHwga2luZCA9PT0gJ3JlcGxhY2UnIHx8IGtpbmQgPT09ICdyZW1vdmUnKSB7XG4gICAgICBub3JtYWxpemVkLnB1c2goeyBvcDoga2luZCwgcGF0aCwgdmFsdWU6IG9wLnZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChraW5kID09PSAnc2V0JyB8fCBraW5kID09PSAncHV0Jykge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBnZXRBdFBvaW50ZXIoY3VycmVudFN0YXRlLCBwYXRoKTtcbiAgICAgIG5vcm1hbGl6ZWQucHVzaCh7IG9wOiAodHlwZW9mIGV4aXN0aW5nID09PSAndW5kZWZpbmVkJykgPyAnYWRkJyA6ICdyZXBsYWNlJywgcGF0aCwgdmFsdWU6IG9wLnZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChraW5kID09PSAnZGVsZXRlJyB8fCBraW5kID09PSAndW5zZXQnKSB7XG4gICAgICBub3JtYWxpemVkLnB1c2goeyBvcDogJ3JlbW92ZScsIHBhdGggfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGtpbmQgPT09ICdtZXJnZScpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gZ2V0QXRQb2ludGVyKGN1cnJlbnRTdGF0ZSwgcGF0aCk7XG4gICAgICBjb25zdCBhID0gKGV4aXN0aW5nICYmIHR5cGVvZiBleGlzdGluZyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZXhpc3RpbmcpKSA/IGV4aXN0aW5nIDoge307XG4gICAgICBjb25zdCBiID0gKG9wLnZhbHVlICYmIHR5cGVvZiBvcC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkob3AudmFsdWUpKSA/IG9wLnZhbHVlIDoge307XG4gICAgICBjb25zdCBtZXJnZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKGEpKSB7XG4gICAgICAgIGlmIChrID09PSAnX19wcm90b19fJyB8fCBrID09PSAnY29uc3RydWN0b3InIHx8IGsgPT09ICdwcm90b3R5cGUnKSBjb250aW51ZTtcbiAgICAgICAgbWVyZ2VkW2tdID0gYVtrXTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhiKSkge1xuICAgICAgICBpZiAoayA9PT0gJ19fcHJvdG9fXycgfHwgayA9PT0gJ2NvbnN0cnVjdG9yJyB8fCBrID09PSAncHJvdG90eXBlJykgY29udGludWU7XG4gICAgICAgIG1lcmdlZFtrXSA9IGJba107XG4gICAgICB9XG4gICAgICBub3JtYWxpemVkLnB1c2goeyBvcDogJ3JlcGxhY2UnLCBwYXRoLCB2YWx1ZTogbWVyZ2VkIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICgha2luZCAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3AsICd2YWx1ZScpKSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGdldEF0UG9pbnRlcihjdXJyZW50U3RhdGUsIHBhdGgpO1xuICAgICAgbm9ybWFsaXplZC5wdXNoKHsgb3A6ICh0eXBlb2YgZXhpc3RpbmcgPT09ICd1bmRlZmluZWQnKSA/ICdhZGQnIDogJ3JlcGxhY2UnLCBwYXRoLCB2YWx1ZTogb3AudmFsdWUgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGYWJyaWNCcm93c2VyU3RvcmUgKG9wdHMgPSB7fSkge1xuICBjb25zdCBzdG9yYWdlS2V5ID0gU3RyaW5nKG9wdHMuc3RvcmFnZUtleSB8fCAnZmFicmljOnN0YXRlJyk7XG4gIGNvbnN0IGluaXRpYWxTdGF0ZSA9IChvcHRzLmluaXRpYWxTdGF0ZSAmJiB0eXBlb2Ygb3B0cy5pbml0aWFsU3RhdGUgPT09ICdvYmplY3QnKSA/IGNsb25lSlNPTihvcHRzLmluaXRpYWxTdGF0ZSkgOiB7fTtcbiAgbGV0IHN0YXRlID0gaW5pdGlhbFN0YXRlO1xuXG4gIGZ1bmN0aW9uIGhhc1N0b3JhZ2UgKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB3ID0gZ2V0RmFicmljQnJvd3Nlckdsb2JhbCgpO1xuICAgICAgcmV0dXJuICEhdyAmJiAhIXcubG9jYWxTdG9yYWdlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzYXZlICgpIHtcbiAgICBpZiAoIWhhc1N0b3JhZ2UoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB3ID0gZ2V0RmFicmljQnJvd3Nlckdsb2JhbCgpO1xuICAgICAgaWYgKCF3KSByZXR1cm4gZmFsc2U7XG4gICAgICB3LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KHN0YXRlKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbG9hZCAoKSB7XG4gICAgaWYgKCFoYXNTdG9yYWdlKCkpIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdyA9IGdldEZhYnJpY0Jyb3dzZXJHbG9iYWwoKTtcbiAgICAgIGlmICghdykgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgcmF3ID0gdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShzdG9yYWdlS2V5KTtcbiAgICAgIGlmICghcmF3KSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHJldHVybiBmYWxzZTtcbiAgICAgIHN0YXRlID0gcGFyc2VkO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGxvYWQoKTtcblxuICBmdW5jdGlvbiBHRVQgKHBhdGggPSAnLycpIHtcbiAgICBpZiAocGF0aCA9PT0gJy8nIHx8IHBhdGggPT0gbnVsbCB8fCBwYXRoID09PSAnJykgcmV0dXJuIHN0YXRlO1xuICAgIHJldHVybiBnZXRBdFBvaW50ZXIoc3RhdGUsIHBhdGgpO1xuICB9XG5cbiAgZnVuY3Rpb24gUFVUIChwYXRoID0gJy8nLCB2YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHBhdGggPT09ICcvJyB8fCBwYXRoID09IG51bGwgfHwgcGF0aCA9PT0gJycpIHtcbiAgICAgIHN0YXRlID0gKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpID8gY2xvbmVKU09OKHZhbHVlKSA6IHt9O1xuICAgICAgaWYgKG9wdGlvbnMucGVyc2lzdCAhPT0gZmFsc2UpIHNhdmUoKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3Qgb3BzID0gbm9ybWFsaXplUGF0Y2hPcHMoW3sgb3A6ICdwdXQnLCBwYXRoLCB2YWx1ZSB9XSwgc3RhdGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGFwcGx5UGF0Y2goc3RhdGUsIG9wcywgdHJ1ZSwgZmFsc2UpO1xuICAgIHN0YXRlID0gcmVzdWx0Lm5ld0RvY3VtZW50O1xuICAgIGlmIChvcHRpb25zLnBlcnNpc3QgIT09IGZhbHNlKSBzYXZlKCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gUEFUQ0ggKG9wcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGNoT3BzKG9wcywgc3RhdGUpO1xuICAgIGlmICghbm9ybWFsaXplZC5sZW5ndGgpIHJldHVybiBzdGF0ZTtcbiAgICBjb25zdCByZXN1bHQgPSBhcHBseVBhdGNoKHN0YXRlLCBub3JtYWxpemVkLCB0cnVlLCBmYWxzZSk7XG4gICAgc3RhdGUgPSByZXN1bHQubmV3RG9jdW1lbnQ7XG4gICAgaWYgKG9wdGlvbnMucGVyc2lzdCAhPT0gZmFsc2UpIHNhdmUoKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBmdW5jdGlvbiBERUxFVEUgKHBhdGggPSAnLycsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmIChwYXRoID09PSAnLycgfHwgcGF0aCA9PSBudWxsIHx8IHBhdGggPT09ICcnKSB7XG4gICAgICBzdGF0ZSA9IHt9O1xuICAgICAgaWYgKG9wdGlvbnMucGVyc2lzdCAhPT0gZmFsc2UpIHNhdmUoKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3Qgb3BzID0gbm9ybWFsaXplUGF0Y2hPcHMoW3sgb3A6ICdkZWxldGUnLCBwYXRoIH1dLCBzdGF0ZSk7XG4gICAgaWYgKCFvcHMubGVuZ3RoKSByZXR1cm4gc3RhdGU7XG4gICAgY29uc3QgcmVzdWx0ID0gYXBwbHlQYXRjaChzdGF0ZSwgb3BzLCB0cnVlLCBmYWxzZSk7XG4gICAgc3RhdGUgPSByZXN1bHQubmV3RG9jdW1lbnQ7XG4gICAgaWYgKG9wdGlvbnMucGVyc2lzdCAhPT0gZmFsc2UpIHNhdmUoKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIEdFVCxcbiAgICBQVVQsXG4gICAgUEFUQ0gsXG4gICAgREVMRVRFLFxuICAgIGdldFN0YXRlOiAoKSA9PiBzdGF0ZSxcbiAgICBzYXZlLFxuICAgIGxvYWRcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZUZhYnJpY0Jyb3dzZXJTdG9yZSxcbiAgbm9ybWFsaXplUGF0Y2hPcHNcbn07XG5cbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfcmVxdWlyZSIsInJlcXVpcmUiLCJhcHBseVBhdGNoIiwiZ2V0RmFicmljQnJvd3Nlckdsb2JhbCIsImdsb2JhbFRoaXMiLCJ3aW5kb3ciLCJfIiwidW5kZWZpbmVkIiwiY2xvbmVKU09OIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5Iiwic3BsaXRQb2ludGVyIiwicGF0aCIsIlN0cmluZyIsInJhdyIsInN0YXJ0c1dpdGgiLCJzcGxpdCIsIm1hcCIsInNlZyIsInJlcGxhY2UiLCJnZXRBdFBvaW50ZXIiLCJkb2MiLCJzZWdzIiwiY3VyIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJPYmplY3QiLCJoYXNPd25Qcm9wZXJ0eSIsImVyciIsIm5vcm1hbGl6ZVBhdGNoT3BzIiwiaW5wdXQiLCJjdXJyZW50U3RhdGUiLCJvcHMiLCJub3JtYWxpemVkIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsIm9wIiwia2luZCIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInB1c2giLCJleGlzdGluZyIsImIiLCJtZXJnZWQiLCJjcmVhdGUiLCJfaSIsIl9PYmplY3Qka2V5cyIsImtleXMiLCJrIiwiX2kyIiwiX09iamVjdCRrZXlzMiIsImNyZWF0ZUZhYnJpY0Jyb3dzZXJTdG9yZSIsIm9wdHMiLCJhcmd1bWVudHMiLCJzdG9yYWdlS2V5IiwiaW5pdGlhbFN0YXRlIiwic3RhdGUiLCJoYXNTdG9yYWdlIiwidyIsImxvY2FsU3RvcmFnZSIsInNhdmUiLCJzZXRJdGVtIiwibG9hZCIsImdldEl0ZW0iLCJwYXJzZWQiLCJHRVQiLCJQVVQiLCJvcHRpb25zIiwicGVyc2lzdCIsInJlc3VsdCIsIm5ld0RvY3VtZW50IiwiUEFUQ0giLCJERUxFVEUiLCJnZXRTdGF0ZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/fabricBrowserStore.js\n\n}")},"./functions/fabricChatNormalize.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Re-export chat normalize from `@fabric/http`, with a Hub-side guard for\n * `Number(null)` / empty-string coerced timestamps (epoch 0).\n */\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nvar base;\ntry {\n base = __webpack_require__(/*! @fabric/http/functions/fabricChatNormalize */ "./node_modules/@fabric/http/functions/fabricChatNormalize.js");\n} catch (_) {\n base = __webpack_require__(/*! ./fabricChatNormalize.local */ "./functions/fabricChatNormalize.local.js");\n}\nfunction sanitizeCreated(value) {\n var n = Number(value);\n // Reject non-finite and epoch-0 (Number(null) / Number(\'\')) so sorts stay sane.\n if (!Number.isFinite(n) || n <= 0) return Date.now();\n return n;\n}\nfunction normalizeP2pChatMessage(chat) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var out = base.normalizeP2pChatMessage(chat, opts);\n if (!out || !out.object || _typeof(out.object) !== \'object\') return out;\n out.object.created = sanitizeCreated(out.object.created);\n return out;\n}\nmodule.exports = Object.assign({}, base, {\n normalizeP2pChatMessage: normalizeP2pChatMessage\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljQ2hhdE5vcm1hbGl6ZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUhBLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBSUEsSUFBSUssSUFBSTtBQUNSLElBQUk7RUFDRkEsSUFBSSxHQUFHQyxtQkFBTyxDQUFDLGdIQUE0QyxDQUFDO0FBQzlELENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUU7RUFDVkYsSUFBSSxHQUFHQyxtQkFBTyxDQUFDLDZFQUE2QixDQUFDO0FBQy9DO0FBRUEsU0FBU0UsZUFBZUEsQ0FBRUMsS0FBSyxFQUFFO0VBQy9CLElBQU1DLENBQUMsR0FBR0MsTUFBTSxDQUFDRixLQUFLLENBQUM7RUFDdkI7RUFDQSxJQUFJLENBQUNFLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixDQUFDLENBQUMsSUFBSUEsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPRyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BELE9BQU9KLENBQUM7QUFDVjtBQUVBLFNBQVNLLHVCQUF1QkEsQ0FBRUMsSUFBSSxFQUFhO0VBQUEsSUFBWEMsSUFBSSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFDL0MsSUFBTUcsR0FBRyxHQUFHaEIsSUFBSSxDQUFDVSx1QkFBdUIsQ0FBQ0MsSUFBSSxFQUFFQyxJQUFJLENBQUM7RUFDcEQsSUFBSSxDQUFDSSxHQUFHLElBQUksQ0FBQ0EsR0FBRyxDQUFDQyxNQUFNLElBQUl2QixPQUFBLENBQU9zQixHQUFHLENBQUNDLE1BQU0sTUFBSyxRQUFRLEVBQUUsT0FBT0QsR0FBRztFQUNyRUEsR0FBRyxDQUFDQyxNQUFNLENBQUNDLE9BQU8sR0FBR2YsZUFBZSxDQUFDYSxHQUFHLENBQUNDLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDO0VBQ3hELE9BQU9GLEdBQUc7QUFDWjtBQUVBRyxNQUFNLENBQUNDLE9BQU8sR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUV0QixJQUFJLEVBQUU7RUFDdkNVLHVCQUF1QixFQUF2QkE7QUFDRixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9mYWJyaWNDaGF0Tm9ybWFsaXplLmpzP2U2YmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFJlLWV4cG9ydCBjaGF0IG5vcm1hbGl6ZSBmcm9tIGBAZmFicmljL2h0dHBgLCB3aXRoIGEgSHViLXNpZGUgZ3VhcmQgZm9yXG4gKiBgTnVtYmVyKG51bGwpYCAvIGVtcHR5LXN0cmluZyBjb2VyY2VkIHRpbWVzdGFtcHMgKGVwb2NoIDApLlxuICovXG5sZXQgYmFzZTtcbnRyeSB7XG4gIGJhc2UgPSByZXF1aXJlKCdAZmFicmljL2h0dHAvZnVuY3Rpb25zL2ZhYnJpY0NoYXROb3JtYWxpemUnKTtcbn0gY2F0Y2ggKF8pIHtcbiAgYmFzZSA9IHJlcXVpcmUoJy4vZmFicmljQ2hhdE5vcm1hbGl6ZS5sb2NhbCcpO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUNyZWF0ZWQgKHZhbHVlKSB7XG4gIGNvbnN0IG4gPSBOdW1iZXIodmFsdWUpO1xuICAvLyBSZWplY3Qgbm9uLWZpbml0ZSBhbmQgZXBvY2gtMCAoTnVtYmVyKG51bGwpIC8gTnVtYmVyKCcnKSkgc28gc29ydHMgc3RheSBzYW5lLlxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShuKSB8fCBuIDw9IDApIHJldHVybiBEYXRlLm5vdygpO1xuICByZXR1cm4gbjtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUDJwQ2hhdE1lc3NhZ2UgKGNoYXQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBvdXQgPSBiYXNlLm5vcm1hbGl6ZVAycENoYXRNZXNzYWdlKGNoYXQsIG9wdHMpO1xuICBpZiAoIW91dCB8fCAhb3V0Lm9iamVjdCB8fCB0eXBlb2Ygb3V0Lm9iamVjdCAhPT0gJ29iamVjdCcpIHJldHVybiBvdXQ7XG4gIG91dC5vYmplY3QuY3JlYXRlZCA9IHNhbml0aXplQ3JlYXRlZChvdXQub2JqZWN0LmNyZWF0ZWQpO1xuICByZXR1cm4gb3V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgbm9ybWFsaXplUDJwQ2hhdE1lc3NhZ2Vcbn0pO1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsImJhc2UiLCJyZXF1aXJlIiwiXyIsInNhbml0aXplQ3JlYXRlZCIsInZhbHVlIiwibiIsIk51bWJlciIsImlzRmluaXRlIiwiRGF0ZSIsIm5vdyIsIm5vcm1hbGl6ZVAycENoYXRNZXNzYWdlIiwiY2hhdCIsIm9wdHMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJvdXQiLCJvYmplY3QiLCJjcmVhdGVkIiwibW9kdWxlIiwiZXhwb3J0cyIsIk9iamVjdCIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/fabricChatNormalize.js\n\n}')},"./functions/fabricChatNormalize.local.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n/**\n * Normalize Fabric shoutbox chat for Hub UI / cache and LiveRelay mesh ingest.\n *\n * Mesh wire (first-class P2P_CHAT_MESSAGE): body = raw UTF-8 text only.\n * Peer emits: `{ text, type: 'P2P_CHAT_MESSAGE' }` (+ meta.signer).\n *\n * Hub SPA / WebSocket may still use a JSON ChatMessage carrier with\n * `{ type, actor, object: { content, … } }` — that is the HTTP edge, not the P2P body.\n */\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _require = __webpack_require__(/*! ./fabricPubkey */ \"./functions/fabricPubkey.js\"),\n pubkeyXOnly = _require.pubkeyXOnly;\n\n/**\n * Extract displayable text from a chat payload or Peer chat event.\n * @param {object|string|null|undefined} chat\n * @returns {string}\n */\nfunction chatTextOf(chat) {\n if (chat == null) return '';\n if (typeof chat === 'string') return chat;\n if (_typeof(chat) !== 'object') return '';\n if (chat.text != null && String(chat.text).trim()) return String(chat.text);\n var obj = chat.object && _typeof(chat.object) === 'object' ? chat.object : {};\n if (obj.content != null && String(obj.content).trim()) return String(obj.content);\n if (obj.body != null && String(obj.body).trim()) return String(obj.body);\n if (chat.content != null && String(chat.content).trim()) return String(chat.content);\n if (chat.body != null && String(chat.body).trim()) return String(chat.body);\n return '';\n}\n\n/**\n * Actor / author id (pubkey) from Hub UI shape or Peer meta/signer.\n * Prefers x-only when the value is a parseable secp256k1 pubkey hex.\n * @param {object|null|undefined} chat\n * @param {{ defaultActorId?: string|null, signer?: string|null }} [opts]\n * @returns {string|null}\n */\nfunction chatActorIdOf(chat) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var raw = null;\n if (opts.signer) raw = String(opts.signer);else if (chat && _typeof(chat) === 'object') {\n var actor = chat.actor && _typeof(chat.actor) === 'object' ? chat.actor : {};\n raw = actor.id || actor.publicKey || actor.pubkey || null;\n if (!raw) {\n var obj = chat.object && _typeof(chat.object) === 'object' ? chat.object : {};\n if (obj.author) raw = obj.author;\n }\n }\n if (!raw && opts.defaultActorId) raw = opts.defaultActorId;\n if (!raw) return null;\n var s = String(raw);\n var x = pubkeyXOnly(s);\n return x || s;\n}\n\n/**\n * Normalize inbound chat into a Hub-cacheable shape for WS UI.\n * @param {object|string} chat\n * @param {{ defaultActorId?: string|null, signer?: string|null }} [opts]\n * @returns {object|null}\n */\nfunction normalizeP2pChatMessage(chat) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var text = chatTextOf(chat);\n if (!text.trim()) return null;\n var objIn = chat && _typeof(chat) === 'object' && chat.object && _typeof(chat.object) === 'object' ? chat.object : {};\n var actorId = chatActorIdOf(chat, opts) || 'unknown';\n var created = Number(objIn.created);\n // Number(null) and Number('') are 0 — treat as missing, not Unix epoch.\n if (objIn.created == null || objIn.created === '' || !Number.isFinite(created) || created <= 0) {\n created = NaN;\n }\n if (!Number.isFinite(created) && objIn.ts) {\n var parsed = Date.parse(objIn.ts);\n created = Number.isFinite(parsed) ? parsed : Date.now();\n }\n if (!Number.isFinite(created) && chat && _typeof(chat) === 'object' && chat.created != null && chat.created !== '') {\n created = Number(chat.created);\n if (!Number.isFinite(created) || created <= 0) created = NaN;\n }\n if (!Number.isFinite(created)) created = Date.now();\n var object = {\n content: text,\n created: created\n };\n if (objIn.clientId != null) object.clientId = String(objIn.clientId);\n if (objIn.id != null) object.id = String(objIn.id);\n var out = {\n type: 'P2P_CHAT_MESSAGE',\n actor: _objectSpread(_objectSpread({\n id: actorId\n }, chat && chat.actor && chat.actor.publicKey ? {\n publicKey: String(chat.actor.publicKey)\n } : {}), chat && chat.actor && chat.actor.pubkey ? {\n pubkey: String(chat.actor.pubkey)\n } : {}),\n object: object\n };\n if (chat && _typeof(chat) === 'object' && chat.target != null) out.target = chat.target;\n return out;\n}\nmodule.exports = {\n chatTextOf: chatTextOf,\n chatActorIdOf: chatActorIdOf,\n normalizeP2pChatMessage: normalizeP2pChatMessage\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljQ2hhdE5vcm1hbGl6ZS5sb2NhbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQSxTQUFBQSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUYsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsT0FBQWEsT0FBQSxXQUFBZCxDQUFBLElBQUFlLGVBQUEsQ0FBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFsQixDQUFBLEVBQUFHLE1BQUEsQ0FBQWMseUJBQUEsQ0FBQWYsQ0FBQSxLQUFBSCxPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBZ0IsY0FBQSxDQUFBbkIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFF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ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljQ2hhdE5vcm1hbGl6ZS5sb2NhbC5qcz9jZTkzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBOb3JtYWxpemUgRmFicmljIHNob3V0Ym94IGNoYXQgZm9yIEh1YiBVSSAvIGNhY2hlIGFuZCBMaXZlUmVsYXkgbWVzaCBpbmdlc3QuXG4gKlxuICogTWVzaCB3aXJlIChmaXJzdC1jbGFzcyBQMlBfQ0hBVF9NRVNTQUdFKTogYm9keSA9IHJhdyBVVEYtOCB0ZXh0IG9ubHkuXG4gKiBQZWVyIGVtaXRzOiBgeyB0ZXh0LCB0eXBlOiAnUDJQX0NIQVRfTUVTU0FHRScgfWAgKCsgbWV0YS5zaWduZXIpLlxuICpcbiAqIEh1YiBTUEEgLyBXZWJTb2NrZXQgbWF5IHN0aWxsIHVzZSBhIEpTT04gQ2hhdE1lc3NhZ2UgY2FycmllciB3aXRoXG4gKiBgeyB0eXBlLCBhY3Rvciwgb2JqZWN0OiB7IGNvbnRlbnQsIOKApiB9IH1gIOKAlCB0aGF0IGlzIHRoZSBIVFRQIGVkZ2UsIG5vdCB0aGUgUDJQIGJvZHkuXG4gKi9cblxuY29uc3QgeyBwdWJrZXlYT25seSB9ID0gcmVxdWlyZSgnLi9mYWJyaWNQdWJrZXknKTtcblxuLyoqXG4gKiBFeHRyYWN0IGRpc3BsYXlhYmxlIHRleHQgZnJvbSBhIGNoYXQgcGF5bG9hZCBvciBQZWVyIGNoYXQgZXZlbnQuXG4gKiBAcGFyYW0ge29iamVjdHxzdHJpbmd8bnVsbHx1bmRlZmluZWR9IGNoYXRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNoYXRUZXh0T2YgKGNoYXQpIHtcbiAgaWYgKGNoYXQgPT0gbnVsbCkgcmV0dXJuICcnO1xuICBpZiAodHlwZW9mIGNoYXQgPT09ICdzdHJpbmcnKSByZXR1cm4gY2hhdDtcbiAgaWYgKHR5cGVvZiBjaGF0ICE9PSAnb2JqZWN0JykgcmV0dXJuICcnO1xuICBpZiAoY2hhdC50ZXh0ICE9IG51bGwgJiYgU3RyaW5nKGNoYXQudGV4dCkudHJpbSgpKSByZXR1cm4gU3RyaW5nKGNoYXQudGV4dCk7XG4gIGNvbnN0IG9iaiA9IGNoYXQub2JqZWN0ICYmIHR5cGVvZiBjaGF0Lm9iamVjdCA9PT0gJ29iamVjdCcgPyBjaGF0Lm9iamVjdCA6IHt9O1xuICBpZiAob2JqLmNvbnRlbnQgIT0gbnVsbCAmJiBTdHJpbmcob2JqLmNvbnRlbnQpLnRyaW0oKSkgcmV0dXJuIFN0cmluZyhvYmouY29udGVudCk7XG4gIGlmIChvYmouYm9keSAhPSBudWxsICYmIFN0cmluZyhvYmouYm9keSkudHJpbSgpKSByZXR1cm4gU3RyaW5nKG9iai5ib2R5KTtcbiAgaWYgKGNoYXQuY29udGVudCAhPSBudWxsICYmIFN0cmluZyhjaGF0LmNvbnRlbnQpLnRyaW0oKSkgcmV0dXJuIFN0cmluZyhjaGF0LmNvbnRlbnQpO1xuICBpZiAoY2hhdC5ib2R5ICE9IG51bGwgJiYgU3RyaW5nKGNoYXQuYm9keSkudHJpbSgpKSByZXR1cm4gU3RyaW5nKGNoYXQuYm9keSk7XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBBY3RvciAvIGF1dGhvciBpZCAocHVia2V5KSBmcm9tIEh1YiBVSSBzaGFwZSBvciBQZWVyIG1ldGEvc2lnbmVyLlxuICogUHJlZmVycyB4LW9ubHkgd2hlbiB0aGUgdmFsdWUgaXMgYSBwYXJzZWFibGUgc2VjcDI1NmsxIHB1YmtleSBoZXguXG4gKiBAcGFyYW0ge29iamVjdHxudWxsfHVuZGVmaW5lZH0gY2hhdFxuICogQHBhcmFtIHt7IGRlZmF1bHRBY3RvcklkPzogc3RyaW5nfG51bGwsIHNpZ25lcj86IHN0cmluZ3xudWxsIH19IFtvcHRzXVxuICogQHJldHVybnMge3N0cmluZ3xudWxsfVxuICovXG5mdW5jdGlvbiBjaGF0QWN0b3JJZE9mIChjaGF0LCBvcHRzID0ge30pIHtcbiAgbGV0IHJhdyA9IG51bGw7XG4gIGlmIChvcHRzLnNpZ25lcikgcmF3ID0gU3RyaW5nKG9wdHMuc2lnbmVyKTtcbiAgZWxzZSBpZiAoY2hhdCAmJiB0eXBlb2YgY2hhdCA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBhY3RvciA9IGNoYXQuYWN0b3IgJiYgdHlwZW9mIGNoYXQuYWN0b3IgPT09ICdvYmplY3QnID8gY2hhdC5hY3RvciA6IHt9O1xuICAgIHJhdyA9IGFjdG9yLmlkIHx8IGFjdG9yLnB1YmxpY0tleSB8fCBhY3Rvci5wdWJrZXkgfHwgbnVsbDtcbiAgICBpZiAoIXJhdykge1xuICAgICAgY29uc3Qgb2JqID0gY2hhdC5vYmplY3QgJiYgdHlwZW9mIGNoYXQub2JqZWN0ID09PSAnb2JqZWN0JyA/IGNoYXQub2JqZWN0IDoge307XG4gICAgICBpZiAob2JqLmF1dGhvcikgcmF3ID0gb2JqLmF1dGhvcjtcbiAgICB9XG4gIH1cbiAgaWYgKCFyYXcgJiYgb3B0cy5kZWZhdWx0QWN0b3JJZCkgcmF3ID0gb3B0cy5kZWZhdWx0QWN0b3JJZDtcbiAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuICBjb25zdCBzID0gU3RyaW5nKHJhdyk7XG4gIGNvbnN0IHggPSBwdWJrZXlYT25seShzKTtcbiAgcmV0dXJuIHggfHwgcztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgaW5ib3VuZCBjaGF0IGludG8gYSBIdWItY2FjaGVhYmxlIHNoYXBlIGZvciBXUyBVSS5cbiAqIEBwYXJhbSB7b2JqZWN0fHN0cmluZ30gY2hhdFxuICogQHBhcmFtIHt7IGRlZmF1bHRBY3RvcklkPzogc3RyaW5nfG51bGwsIHNpZ25lcj86IHN0cmluZ3xudWxsIH19IFtvcHRzXVxuICogQHJldHVybnMge29iamVjdHxudWxsfVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQMnBDaGF0TWVzc2FnZSAoY2hhdCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHRleHQgPSBjaGF0VGV4dE9mKGNoYXQpO1xuICBpZiAoIXRleHQudHJpbSgpKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBvYmpJbiA9IChjaGF0ICYmIHR5cGVvZiBjaGF0ID09PSAnb2JqZWN0JyAmJiBjaGF0Lm9iamVjdCAmJiB0eXBlb2YgY2hhdC5vYmplY3QgPT09ICdvYmplY3QnKVxuICAgID8gY2hhdC5vYmplY3RcbiAgICA6IHt9O1xuICBjb25zdCBhY3RvcklkID0gY2hhdEFjdG9ySWRPZihjaGF0LCBvcHRzKSB8fCAndW5rbm93bic7XG4gIGxldCBjcmVhdGVkID0gTnVtYmVyKG9iakluLmNyZWF0ZWQpO1xuICAvLyBOdW1iZXIobnVsbCkgYW5kIE51bWJlcignJykgYXJlIDAg4oCUIHRyZWF0IGFzIG1pc3NpbmcsIG5vdCBVbml4IGVwb2NoLlxuICBpZiAob2JqSW4uY3JlYXRlZCA9PSBudWxsIHx8IG9iakluLmNyZWF0ZWQgPT09ICcnIHx8ICFOdW1iZXIuaXNGaW5pdGUoY3JlYXRlZCkgfHwgY3JlYXRlZCA8PSAwKSB7XG4gICAgY3JlYXRlZCA9IE5hTjtcbiAgfVxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShjcmVhdGVkKSAmJiBvYmpJbi50cykge1xuICAgIGNvbnN0IHBhcnNlZCA9IERhdGUucGFyc2Uob2JqSW4udHMpO1xuICAgIGNyZWF0ZWQgPSBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IERhdGUubm93KCk7XG4gIH1cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoY3JlYXRlZCkgJiYgY2hhdCAmJiB0eXBlb2YgY2hhdCA9PT0gJ29iamVjdCcgJiYgY2hhdC5jcmVhdGVkICE9IG51bGwgJiYgY2hhdC5jcmVhdGVkICE9PSAnJykge1xuICAgIGNyZWF0ZWQgPSBOdW1iZXIoY2hhdC5jcmVhdGVkKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShjcmVhdGVkKSB8fCBjcmVhdGVkIDw9IDApIGNyZWF0ZWQgPSBOYU47XG4gIH1cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoY3JlYXRlZCkpIGNyZWF0ZWQgPSBEYXRlLm5vdygpO1xuXG4gIGNvbnN0IG9iamVjdCA9IHtcbiAgICBjb250ZW50OiB0ZXh0LFxuICAgIGNyZWF0ZWRcbiAgfTtcbiAgaWYgKG9iakluLmNsaWVudElkICE9IG51bGwpIG9iamVjdC5jbGllbnRJZCA9IFN0cmluZyhvYmpJbi5jbGllbnRJZCk7XG4gIGlmIChvYmpJbi5pZCAhPSBudWxsKSBvYmplY3QuaWQgPSBTdHJpbmcob2JqSW4uaWQpO1xuXG4gIGNvbnN0IG91dCA9IHtcbiAgICB0eXBlOiAnUDJQX0NIQVRfTUVTU0FHRScsXG4gICAgYWN0b3I6IHtcbiAgICAgIGlkOiBhY3RvcklkLFxuICAgICAgLi4uKGNoYXQgJiYgY2hhdC5hY3RvciAmJiBjaGF0LmFjdG9yLnB1YmxpY0tleSA/IHsgcHVibGljS2V5OiBTdHJpbmcoY2hhdC5hY3Rvci5wdWJsaWNLZXkpIH0gOiB7fSksXG4gICAgICAuLi4oY2hhdCAmJiBjaGF0LmFjdG9yICYmIGNoYXQuYWN0b3IucHVia2V5ID8geyBwdWJrZXk6IFN0cmluZyhjaGF0LmFjdG9yLnB1YmtleSkgfSA6IHt9KVxuICAgIH0sXG4gICAgb2JqZWN0XG4gIH07XG4gIGlmIChjaGF0ICYmIHR5cGVvZiBjaGF0ID09PSAnb2JqZWN0JyAmJiBjaGF0LnRhcmdldCAhPSBudWxsKSBvdXQudGFyZ2V0ID0gY2hhdC50YXJnZXQ7XG4gIHJldHVybiBvdXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjaGF0VGV4dE9mLFxuICBjaGF0QWN0b3JJZE9mLFxuICBub3JtYWxpemVQMnBDaGF0TWVzc2FnZVxufTtcbiJdLCJuYW1lcyI6WyJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIl90eXBlb2YiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3JlcXVpcmUiLCJyZXF1aXJlIiwicHVia2V5WE9ubHkiLCJjaGF0VGV4dE9mIiwiY2hhdCIsInRleHQiLCJ0cmltIiwib2JqIiwib2JqZWN0IiwiY29udGVudCIsImJvZHkiLCJjaGF0QWN0b3JJZE9mIiwib3B0cyIsInVuZGVmaW5lZCIsInJhdyIsInNpZ25lciIsImFjdG9yIiwiaWQiLCJwdWJsaWNLZXkiLCJwdWJrZXkiLCJhdXRob3IiLCJkZWZhdWx0QWN0b3JJZCIsInMiLCJ4Iiwibm9ybWFsaXplUDJwQ2hhdE1lc3NhZ2UiLCJvYmpJbiIsImFjdG9ySWQiLCJjcmVhdGVkIiwiaXNGaW5pdGUiLCJOYU4iLCJ0cyIsInBhcnNlZCIsIkRhdGUiLCJwYXJzZSIsIm5vdyIsImNsaWVudElkIiwib3V0IiwidHlwZSIsInRhcmdldCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/fabricChatNormalize.local.js\n\n}")},"./functions/fabricDelegationLocal.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ \"./functions/fabricBrowserState.js\"),\n readStorageJSON = _require.readStorageJSON;\n\n/**\n * Browser localStorage key for Hub delegation token + same-tab sync event\n * (IdentityManager writes; SecurityHome and others listen).\n */\n\nvar DELEGATION_STORAGE_KEY = 'fabric.delegation';\nvar DELEGATION_CHANGED_EVENT = 'fabric:delegationChanged';\nfunction notifyDelegationStorageChanged() {\n if (typeof window === 'undefined') return;\n try {\n window.dispatchEvent(new CustomEvent(DELEGATION_CHANGED_EVENT));\n } catch (_) {}\n}\n\n/** True after desktop browser login: Hub signs by delegation; browser holds xpub + token only. */\nfunction hasExternalSigningDelegation() {\n if (typeof window === 'undefined') return false;\n try {\n var d = readStorageJSON(DELEGATION_STORAGE_KEY, null);\n if (!d) return false;\n return !!(d && d.token && d.externalSigning);\n } catch (e) {\n return false;\n }\n}\nmodule.exports = {\n DELEGATION_STORAGE_KEY: DELEGATION_STORAGE_KEY,\n DELEGATION_CHANGED_EVENT: DELEGATION_CHANGED_EVENT,\n notifyDelegationStorageChanged: notifyDelegationStorageChanged,\n hasExternalSigningDelegation: hasExternalSigningDelegation\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljRGVsZWdhdGlvbkxvY2FsLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUFBLFFBQUEsR0FFSUMsbUJBQU8sQ0FBQywrREFBc0IsQ0FBQztFQURqQ0MsZUFBZSxHQUFBRixRQUFBLENBQWZFLGVBQWU7O0FBR2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQU1DLHNCQUFzQixHQUFHLG1CQUFtQjtBQUNsRCxJQUFNQyx3QkFBd0IsR0FBRywwQkFBMEI7QUFFM0QsU0FBU0MsOEJBQThCQSxDQUFBLEVBQUk7RUFDekMsSUFBSSxPQUFPQyxNQUFNLEtBQUssV0FBVyxFQUFFO0VBQ25DLElBQUk7SUFDRkEsTUFBTSxDQUFDQyxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDSix3QkFBd0IsQ0FBQyxDQUFDO0VBQ2pFLENBQUMsQ0FBQyxPQUFPSyxDQUFDLEVBQUUsQ0FBQztBQUNmOztBQUVBO0FBQ0EsU0FBU0MsNEJBQTRCQSxDQUFBLEVBQUk7RUFDdkMsSUFBSSxPQUFPSixNQUFNLEtBQUssV0FBVyxFQUFFLE9BQU8sS0FBSztFQUMvQyxJQUFJO0lBQ0YsSUFBTUssQ0FBQyxHQUFHVCxlQUFlLENBQUNDLHNCQUFzQixFQUFFLElBQUksQ0FBQztJQUN2RCxJQUFJLENBQUNRLENBQUMsRUFBRSxPQUFPLEtBQUs7SUFDcEIsT0FBTyxDQUFDLEVBQUVBLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxLQUFLLElBQUlELENBQUMsQ0FBQ0UsZUFBZSxDQUFDO0VBQzlDLENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUU7SUFDVixPQUFPLEtBQUs7RUFDZDtBQUNGO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2ZiLHNCQUFzQixFQUF0QkEsc0JBQXNCO0VBQ3RCQyx3QkFBd0IsRUFBeEJBLHdCQUF3QjtFQUN4QkMsOEJBQThCLEVBQTlCQSw4QkFBOEI7RUFDOUJLLDRCQUE0QixFQUE1QkE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljRGVsZWdhdGlvbkxvY2FsLmpzPzY4MGIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7XG4gIHJlYWRTdG9yYWdlSlNPTlxufSA9IHJlcXVpcmUoJy4vZmFicmljQnJvd3NlclN0YXRlJyk7XG5cbi8qKlxuICogQnJvd3NlciBsb2NhbFN0b3JhZ2Uga2V5IGZvciBIdWIgZGVsZWdhdGlvbiB0b2tlbiArIHNhbWUtdGFiIHN5bmMgZXZlbnRcbiAqIChJZGVudGl0eU1hbmFnZXIgd3JpdGVzOyBTZWN1cml0eUhvbWUgYW5kIG90aGVycyBsaXN0ZW4pLlxuICovXG5cbmNvbnN0IERFTEVHQVRJT05fU1RPUkFHRV9LRVkgPSAnZmFicmljLmRlbGVnYXRpb24nO1xuY29uc3QgREVMRUdBVElPTl9DSEFOR0VEX0VWRU5UID0gJ2ZhYnJpYzpkZWxlZ2F0aW9uQ2hhbmdlZCc7XG5cbmZ1bmN0aW9uIG5vdGlmeURlbGVnYXRpb25TdG9yYWdlQ2hhbmdlZCAoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICB0cnkge1xuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChERUxFR0FUSU9OX0NIQU5HRURfRVZFTlQpKTtcbiAgfSBjYXRjaCAoXykge31cbn1cblxuLyoqIFRydWUgYWZ0ZXIgZGVza3RvcCBicm93c2VyIGxvZ2luOiBIdWIgc2lnbnMgYnkgZGVsZWdhdGlvbjsgYnJvd3NlciBob2xkcyB4cHViICsgdG9rZW4gb25seS4gKi9cbmZ1bmN0aW9uIGhhc0V4dGVybmFsU2lnbmluZ0RlbGVnYXRpb24gKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBkID0gcmVhZFN0b3JhZ2VKU09OKERFTEVHQVRJT05fU1RPUkFHRV9LRVksIG51bGwpO1xuICAgIGlmICghZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIShkICYmIGQudG9rZW4gJiYgZC5leHRlcm5hbFNpZ25pbmcpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBERUxFR0FUSU9OX1NUT1JBR0VfS0VZLFxuICBERUxFR0FUSU9OX0NIQU5HRURfRVZFTlQsXG4gIG5vdGlmeURlbGVnYXRpb25TdG9yYWdlQ2hhbmdlZCxcbiAgaGFzRXh0ZXJuYWxTaWduaW5nRGVsZWdhdGlvblxufTtcbiJdLCJuYW1lcyI6WyJfcmVxdWlyZSIsInJlcXVpcmUiLCJyZWFkU3RvcmFnZUpTT04iLCJERUxFR0FUSU9OX1NUT1JBR0VfS0VZIiwiREVMRUdBVElPTl9DSEFOR0VEX0VWRU5UIiwibm90aWZ5RGVsZWdhdGlvblN0b3JhZ2VDaGFuZ2VkIiwid2luZG93IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiXyIsImhhc0V4dGVybmFsU2lnbmluZ0RlbGVnYXRpb24iLCJkIiwidG9rZW4iLCJleHRlcm5hbFNpZ25pbmciLCJlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/fabricDelegationLocal.js\n\n}")},"./functions/fabricDesktopLoginVerify.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Re-export site-login verify from `@fabric/http`.\n */\nmodule.exports = __webpack_require__(/*! @fabric/http/functions/fabricSiteLoginVerify */ "./node_modules/@fabric/http/functions/fabricSiteLoginVerify.js");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljRGVza3RvcExvZ2luVmVyaWZ5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBQSwwSkFBd0UiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9mYWJyaWNEZXNrdG9wTG9naW5WZXJpZnkuanM/MWE0OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUmUtZXhwb3J0IHNpdGUtbG9naW4gdmVyaWZ5IGZyb20gYEBmYWJyaWMvaHR0cGAuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnQGZhYnJpYy9odHRwL2Z1bmN0aW9ucy9mYWJyaWNTaXRlTG9naW5WZXJpZnknKTtcbiJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/fabricDesktopLoginVerify.js\n\n}')},"./functions/fabricDeviceLinkClient.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nmodule.exports = __webpack_require__(/*! @fabric/http/functions/fabricDeviceLinkClient */ "./node_modules/@fabric/http/functions/fabricDeviceLinkClient.js");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljRGV2aWNlTGlua0NsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYkEsNEpBQXlFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljRGV2aWNlTGlua0NsaWVudC5qcz8zYTA4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdAZmFicmljL2h0dHAvZnVuY3Rpb25zL2ZhYnJpY0RldmljZUxpbmtDbGllbnQnKTtcbiJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/fabricDeviceLinkClient.js\n\n}')},"./functions/fabricDocumentOfferEnvelope.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Document-offer envelope types — `@fabric/core` publishedDocumentEnvelope\n * (offer aliases live on that module; no separate core file).\n */\nvar core = __webpack_require__(/*! @fabric/core/functions/publishedDocumentEnvelope */ "./node_modules/@fabric/core/functions/publishedDocumentEnvelope.js");\nmodule.exports = {\n FABRIC_DOCUMENT_OFFER: core.FABRIC_DOCUMENT_OFFER,\n FABRIC_DOCUMENT_OFFER_REQUEST: core.FABRIC_DOCUMENT_OFFER_REQUEST,\n FABRIC_DOCUMENT_OFFER_RESPONSE: core.FABRIC_DOCUMENT_OFFER_RESPONSE,\n FABRIC_DOCUMENT_OFFER_REPLY: core.FABRIC_DOCUMENT_OFFER_REPLY,\n TO_LEGACY_INVENTORY: core.TO_LEGACY_INVENTORY,\n fabricDocumentOfferEnvelopeToLegacy: core.fabricDocumentOfferEnvelopeToLegacy,\n normalizeFabricDocumentOfferEnvelopeForHandlers: core.normalizeFabricDocumentOfferEnvelopeForHandlers,\n isDocumentInventoryRequestType: core.isDocumentInventoryRequestType,\n isDocumentInventoryResponseType: core.isDocumentInventoryResponseType,\n isDocumentInventoryDocumentsOfferResponse: core.isDocumentInventoryDocumentsOfferResponse\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljRG9jdW1lbnRPZmZlckVudmVsb3BlLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBTUEsSUFBSSxHQUFHQyxtQkFBTyxDQUFDLDRIQUFrRCxDQUFDO0FBRXhFQyxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmQyxxQkFBcUIsRUFBRUosSUFBSSxDQUFDSSxxQkFBcUI7RUFDakRDLDZCQUE2QixFQUFFTCxJQUFJLENBQUNLLDZCQUE2QjtFQUNqRUMsOEJBQThCLEVBQUVOLElBQUksQ0FBQ00sOEJBQThCO0VBQ25FQywyQkFBMkIsRUFBRVAsSUFBSSxDQUFDTywyQkFBMkI7RUFDN0RDLG1CQUFtQixFQUFFUixJQUFJLENBQUNRLG1CQUFtQjtFQUM3Q0MsbUNBQW1DLEVBQUVULElBQUksQ0FBQ1MsbUNBQW1DO0VBQzdFQywrQ0FBK0MsRUFBRVYsSUFBSSxDQUFDVSwrQ0FBK0M7RUFDckdDLDhCQUE4QixFQUFFWCxJQUFJLENBQUNXLDhCQUE4QjtFQUNuRUMsK0JBQStCLEVBQUVaLElBQUksQ0FBQ1ksK0JBQStCO0VBQ3JFQyx5Q0FBeUMsRUFBRWIsSUFBSSxDQUFDYTtBQUNsRCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljRG9jdW1lbnRPZmZlckVudmVsb3BlLmpzP2ZmYTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERvY3VtZW50LW9mZmVyIGVudmVsb3BlIHR5cGVzIOKAlCBgQGZhYnJpYy9jb3JlYCBwdWJsaXNoZWREb2N1bWVudEVudmVsb3BlXG4gKiAob2ZmZXIgYWxpYXNlcyBsaXZlIG9uIHRoYXQgbW9kdWxlOyBubyBzZXBhcmF0ZSBjb3JlIGZpbGUpLlxuICovXG5cbmNvbnN0IGNvcmUgPSByZXF1aXJlKCdAZmFicmljL2NvcmUvZnVuY3Rpb25zL3B1Ymxpc2hlZERvY3VtZW50RW52ZWxvcGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEZBQlJJQ19ET0NVTUVOVF9PRkZFUjogY29yZS5GQUJSSUNfRE9DVU1FTlRfT0ZGRVIsXG4gIEZBQlJJQ19ET0NVTUVOVF9PRkZFUl9SRVFVRVNUOiBjb3JlLkZBQlJJQ19ET0NVTUVOVF9PRkZFUl9SRVFVRVNULFxuICBGQUJSSUNfRE9DVU1FTlRfT0ZGRVJfUkVTUE9OU0U6IGNvcmUuRkFCUklDX0RPQ1VNRU5UX09GRkVSX1JFU1BPTlNFLFxuICBGQUJSSUNfRE9DVU1FTlRfT0ZGRVJfUkVQTFk6IGNvcmUuRkFCUklDX0RPQ1VNRU5UX09GRkVSX1JFUExZLFxuICBUT19MRUdBQ1lfSU5WRU5UT1JZOiBjb3JlLlRPX0xFR0FDWV9JTlZFTlRPUlksXG4gIGZhYnJpY0RvY3VtZW50T2ZmZXJFbnZlbG9wZVRvTGVnYWN5OiBjb3JlLmZhYnJpY0RvY3VtZW50T2ZmZXJFbnZlbG9wZVRvTGVnYWN5LFxuICBub3JtYWxpemVGYWJyaWNEb2N1bWVudE9mZmVyRW52ZWxvcGVGb3JIYW5kbGVyczogY29yZS5ub3JtYWxpemVGYWJyaWNEb2N1bWVudE9mZmVyRW52ZWxvcGVGb3JIYW5kbGVycyxcbiAgaXNEb2N1bWVudEludmVudG9yeVJlcXVlc3RUeXBlOiBjb3JlLmlzRG9jdW1lbnRJbnZlbnRvcnlSZXF1ZXN0VHlwZSxcbiAgaXNEb2N1bWVudEludmVudG9yeVJlc3BvbnNlVHlwZTogY29yZS5pc0RvY3VtZW50SW52ZW50b3J5UmVzcG9uc2VUeXBlLFxuICBpc0RvY3VtZW50SW52ZW50b3J5RG9jdW1lbnRzT2ZmZXJSZXNwb25zZTogY29yZS5pc0RvY3VtZW50SW52ZW50b3J5RG9jdW1lbnRzT2ZmZXJSZXNwb25zZVxufTtcbiJdLCJuYW1lcyI6WyJjb3JlIiwicmVxdWlyZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJGQUJSSUNfRE9DVU1FTlRfT0ZGRVIiLCJGQUJSSUNfRE9DVU1FTlRfT0ZGRVJfUkVRVUVTVCIsIkZBQlJJQ19ET0NVTUVOVF9PRkZFUl9SRVNQT05TRSIsIkZBQlJJQ19ET0NVTUVOVF9PRkZFUl9SRVBMWSIsIlRPX0xFR0FDWV9JTlZFTlRPUlkiLCJmYWJyaWNEb2N1bWVudE9mZmVyRW52ZWxvcGVUb0xlZ2FjeSIsIm5vcm1hbGl6ZUZhYnJpY0RvY3VtZW50T2ZmZXJFbnZlbG9wZUZvckhhbmRsZXJzIiwiaXNEb2N1bWVudEludmVudG9yeVJlcXVlc3RUeXBlIiwiaXNEb2N1bWVudEludmVudG9yeVJlc3BvbnNlVHlwZSIsImlzRG9jdW1lbnRJbnZlbnRvcnlEb2N1bWVudHNPZmZlclJlc3BvbnNlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/fabricDocumentOfferEnvelope.js\n\n}')},"./functions/fabricExecutionMachine.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n/**\n * Hub execution contracts — thin wrapper over `@fabric/core` Machine/Program\n * runner (`fabric-execution` language).\n *\n * Injects Hub message-registry FabricOpcode resolution so ChatMessage etc.\n * resolve to canonical outer types (Ping/Pong remain rejected).\n *\n * @see @fabric/core/functions/executionProgramRunner\n */\nvar _require = __webpack_require__(/*! ./fabricMessageRegistry */ \"./functions/fabricMessageRegistry.js\"),\n findOuterByName = _require.findOuterByName,\n findOuterByOpcodeDec = _require.findOuterByOpcodeDec;\nvar runner = null;\ntry {\n runner = __webpack_require__(/*! @fabric/core/functions/executionProgramRunner */ \"./node_modules/@fabric/core/functions/executionProgramRunner.js\");\n} catch (_) {\n runner = null;\n}\nfunction _runner() {\n if (!runner) {\n throw new Error('@fabric/core/functions/executionProgramRunner required — npm run link:fabric');\n }\n return runner;\n}\n\n/** Outer wire names that are transport keepalives — not allowed in FabricOpcode steps. */\nvar NON_EXECUTION_FABRIC_TYPES = new Set(['Ping', 'Pong']);\nfunction assertExecutableOuterType(entry) {\n if (!entry || !entry.name) return;\n if (NON_EXECUTION_FABRIC_TYPES.has(entry.name)) {\n throw new Error(\"\".concat(entry.name, \" is a transport keepalive, not an Execution program opcode\"));\n }\n}\nfunction resolveFabricEntry(step) {\n var hasName = step.fabricType != null && String(step.fabricType).trim() !== '';\n var hasOpcode = step.fabricOpcode != null && step.fabricOpcode !== '';\n var entry = null;\n if (hasName && hasOpcode) {\n var byName = findOuterByName(step.fabricType);\n var byOp = findOuterByOpcodeDec(step.fabricOpcode);\n if (!byName || !byOp || byName.opcodeDec !== byOp.opcodeDec) {\n throw new Error('fabricType and fabricOpcode disagree');\n }\n entry = byName;\n } else if (hasName) {\n entry = findOuterByName(step.fabricType);\n if (!entry) throw new Error(\"unknown fabricType: \".concat(step.fabricType));\n } else if (hasOpcode) {\n entry = findOuterByOpcodeDec(step.fabricOpcode);\n if (!entry) throw new Error(\"unknown fabricOpcode: \".concat(step.fabricOpcode));\n } else {\n throw new Error('FabricOpcode requires fabricType or fabricOpcode');\n }\n assertExecutableOuterType(entry);\n return entry;\n}\n\n/**\n * Run a sandboxed Fabric execution program on core Machine/Program.\n *\n * @param {Object} program - `{ version?: number, steps: Array<{ op: string, ... }> }`\n * @param {Object} [options]\n * @returns {{ ok: boolean, stepsExecuted?: number, stack?: any[], trace?: any[], error?: string, programHash?: string, runCommitmentHex?: string, program?: object }}\n */\nfunction runExecutionProgram(program) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return _runner().runExecutionProgram(program, Object.assign({}, options, {\n resolveFabricEntry: resolveFabricEntry\n }));\n}\nfunction executionProgramDigest(program) {\n var _runner2 = _runner(),\n executionProgramFromHub = _runner2.executionProgramFromHub;\n return executionProgramFromHub(program).programHash;\n}\n\n// Install Hub resolver as core default when this module loads.\ntry {\n _runner().setFabricEntryResolver(resolveFabricEntry);\n} catch (_) {/* core not linked yet */}\nmodule.exports = {\n runExecutionProgram: runExecutionProgram,\n executionProgramDigest: executionProgramDigest,\n resolveFabricEntry: resolveFabricEntry,\n DEFAULT_MAX_STEPS: 256,\n DEFAULT_MAX_STACK: 64,\n NON_EXECUTION_FABRIC_TYPES: NON_EXECUTION_FABRIC_TYPES\n};\ntry {\n var r = _runner();\n module.exports.DEFAULT_MAX_STEPS = r.DEFAULT_MAX_STEPS;\n module.exports.DEFAULT_MAX_STACK = r.DEFAULT_MAX_STACK;\n} catch (_) {/* defaults above */}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUdJLENBQUMsQ0FBQ0QsaUJBQWlCO0FBQ3hELENBQUMsQ0FBQyxPQUFPckMsQ0FBQyxFQUFFLENBQUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9mYWJyaWNFeGVjdXRpb25NYWNoaW5lLmpzPzYyYzIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEh1YiBleGVjdXRpb24gY29udHJhY3RzIOKAlCB0aGluIHdyYXBwZXIgb3ZlciBgQGZhYnJpYy9jb3JlYCBNYWNoaW5lL1Byb2dyYW1cbiAqIHJ1bm5lciAoYGZhYnJpYy1leGVjdXRpb25gIGxhbmd1YWdlKS5cbiAqXG4gKiBJbmplY3RzIEh1YiBtZXNzYWdlLXJlZ2lzdHJ5IEZhYnJpY09wY29kZSByZXNvbHV0aW9uIHNvIENoYXRNZXNzYWdlIGV0Yy5cbiAqIHJlc29sdmUgdG8gY2Fub25pY2FsIG91dGVyIHR5cGVzIChQaW5nL1BvbmcgcmVtYWluIHJlamVjdGVkKS5cbiAqXG4gKiBAc2VlIEBmYWJyaWMvY29yZS9mdW5jdGlvbnMvZXhlY3V0aW9uUHJvZ3JhbVJ1bm5lclxuICovXG5cbmNvbnN0IHsgZmluZE91dGVyQnlOYW1lLCBmaW5kT3V0ZXJCeU9wY29kZURlYyB9ID0gcmVxdWlyZSgnLi9mYWJyaWNNZXNzYWdlUmVnaXN0cnknKTtcblxubGV0IHJ1bm5lciA9IG51bGw7XG50cnkge1xuICBydW5uZXIgPSByZXF1aXJlKCdAZmFicmljL2NvcmUvZnVuY3Rpb25zL2V4ZWN1dGlvblByb2dyYW1SdW5uZXInKTtcbn0gY2F0Y2ggKF8pIHtcbiAgcnVubmVyID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gX3J1bm5lciAoKSB7XG4gIGlmICghcnVubmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdAZmFicmljL2NvcmUvZnVuY3Rpb25zL2V4ZWN1dGlvblByb2dyYW1SdW5uZXIgcmVxdWlyZWQg4oCUIG5wbSBydW4gbGluazpmYWJyaWMnKTtcbiAgfVxuICByZXR1cm4gcnVubmVyO1xufVxuXG4vKiogT3V0ZXIgd2lyZSBuYW1lcyB0aGF0IGFyZSB0cmFuc3BvcnQga2VlcGFsaXZlcyDigJQgbm90IGFsbG93ZWQgaW4gRmFicmljT3Bjb2RlIHN0ZXBzLiAqL1xuY29uc3QgTk9OX0VYRUNVVElPTl9GQUJSSUNfVFlQRVMgPSBuZXcgU2V0KFsnUGluZycsICdQb25nJ10pO1xuXG5mdW5jdGlvbiBhc3NlcnRFeGVjdXRhYmxlT3V0ZXJUeXBlIChlbnRyeSkge1xuICBpZiAoIWVudHJ5IHx8ICFlbnRyeS5uYW1lKSByZXR1cm47XG4gIGlmIChOT05fRVhFQ1VUSU9OX0ZBQlJJQ19UWVBFUy5oYXMoZW50cnkubmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZW50cnkubmFtZX0gaXMgYSB0cmFuc3BvcnQga2VlcGFsaXZlLCBub3QgYW4gRXhlY3V0aW9uIHByb2dyYW0gb3Bjb2RlYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUZhYnJpY0VudHJ5IChzdGVwKSB7XG4gIGNvbnN0IGhhc05hbWUgPSBzdGVwLmZhYnJpY1R5cGUgIT0gbnVsbCAmJiBTdHJpbmcoc3RlcC5mYWJyaWNUeXBlKS50cmltKCkgIT09ICcnO1xuICBjb25zdCBoYXNPcGNvZGUgPSBzdGVwLmZhYnJpY09wY29kZSAhPSBudWxsICYmIHN0ZXAuZmFicmljT3Bjb2RlICE9PSAnJztcbiAgbGV0IGVudHJ5ID0gbnVsbDtcbiAgaWYgKGhhc05hbWUgJiYgaGFzT3Bjb2RlKSB7XG4gICAgY29uc3QgYnlOYW1lID0gZmluZE91dGVyQnlOYW1lKHN0ZXAuZmFicmljVHlwZSk7XG4gICAgY29uc3QgYnlPcCA9IGZpbmRPdXRlckJ5T3Bjb2RlRGVjKHN0ZXAuZmFicmljT3Bjb2RlKTtcbiAgICBpZiAoIWJ5TmFtZSB8fCAhYnlPcCB8fCBieU5hbWUub3Bjb2RlRGVjICE9PSBieU9wLm9wY29kZURlYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmYWJyaWNUeXBlIGFuZCBmYWJyaWNPcGNvZGUgZGlzYWdyZWUnKTtcbiAgICB9XG4gICAgZW50cnkgPSBieU5hbWU7XG4gIH0gZWxzZSBpZiAoaGFzTmFtZSkge1xuICAgIGVudHJ5ID0gZmluZE91dGVyQnlOYW1lKHN0ZXAuZmFicmljVHlwZSk7XG4gICAgaWYgKCFlbnRyeSkgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIGZhYnJpY1R5cGU6ICR7c3RlcC5mYWJyaWNUeXBlfWApO1xuICB9IGVsc2UgaWYgKGhhc09wY29kZSkge1xuICAgIGVudHJ5ID0gZmluZE91dGVyQnlPcGNvZGVEZWMoc3RlcC5mYWJyaWNPcGNvZGUpO1xuICAgIGlmICghZW50cnkpIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBmYWJyaWNPcGNvZGU6ICR7c3RlcC5mYWJyaWNPcGNvZGV9YCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWJyaWNPcGNvZGUgcmVxdWlyZXMgZmFicmljVHlwZSBvciBmYWJyaWNPcGNvZGUnKTtcbiAgfVxuICBhc3NlcnRFeGVjdXRhYmxlT3V0ZXJUeXBlKGVudHJ5KTtcbiAgcmV0dXJuIGVudHJ5O1xufVxuXG4vKipcbiAqIFJ1biBhIHNhbmRib3hlZCBGYWJyaWMgZXhlY3V0aW9uIHByb2dyYW0gb24gY29yZSBNYWNoaW5lL1Byb2dyYW0uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb2dyYW0gLSBgeyB2ZXJzaW9uPzogbnVtYmVyLCBzdGVwczogQXJyYXk8eyBvcDogc3RyaW5nLCAuLi4gfT4gfWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHt7IG9rOiBib29sZWFuLCBzdGVwc0V4ZWN1dGVkPzogbnVtYmVyLCBzdGFjaz86IGFueVtdLCB0cmFjZT86IGFueVtdLCBlcnJvcj86IHN0cmluZywgcHJvZ3JhbUhhc2g/OiBzdHJpbmcsIHJ1bkNvbW1pdG1lbnRIZXg/OiBzdHJpbmcsIHByb2dyYW0/OiBvYmplY3QgfX1cbiAqL1xuZnVuY3Rpb24gcnVuRXhlY3V0aW9uUHJvZ3JhbSAocHJvZ3JhbSwgb3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBfcnVubmVyKCkucnVuRXhlY3V0aW9uUHJvZ3JhbShwcm9ncmFtLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgcmVzb2x2ZUZhYnJpY0VudHJ5XG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0aW9uUHJvZ3JhbURpZ2VzdCAocHJvZ3JhbSkge1xuICBjb25zdCB7IGV4ZWN1dGlvblByb2dyYW1Gcm9tSHViIH0gPSBfcnVubmVyKCk7XG4gIHJldHVybiBleGVjdXRpb25Qcm9ncmFtRnJvbUh1Yihwcm9ncmFtKS5wcm9ncmFtSGFzaDtcbn1cblxuLy8gSW5zdGFsbCBIdWIgcmVzb2x2ZXIgYXMgY29yZSBkZWZhdWx0IHdoZW4gdGhpcyBtb2R1bGUgbG9hZHMuXG50cnkge1xuICBfcnVubmVyKCkuc2V0RmFicmljRW50cnlSZXNvbHZlcihyZXNvbHZlRmFicmljRW50cnkpO1xufSBjYXRjaCAoXykgeyAvKiBjb3JlIG5vdCBsaW5rZWQgeWV0ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJ1bkV4ZWN1dGlvblByb2dyYW0sXG4gIGV4ZWN1dGlvblByb2dyYW1EaWdlc3QsXG4gIHJlc29sdmVGYWJyaWNFbnRyeSxcbiAgREVGQVVMVF9NQVhfU1RFUFM6IDI1NixcbiAgREVGQVVMVF9NQVhfU1RBQ0s6IDY0LFxuICBOT05fRVhFQ1VUSU9OX0ZBQlJJQ19UWVBFU1xufTtcblxudHJ5IHtcbiAgY29uc3QgciA9IF9ydW5uZXIoKTtcbiAgbW9kdWxlLmV4cG9ydHMuREVGQVVMVF9NQVhfU1RFUFMgPSByLkRFRkFVTFRfTUFYX1NURVBTO1xuICBtb2R1bGUuZXhwb3J0cy5ERUZBVUxUX01BWF9TVEFDSyA9IHIuREVGQVVMVF9NQVhfU1RBQ0s7XG59IGNhdGNoIChfKSB7IC8qIGRlZmF1bHRzIGFib3ZlICovIH1cbiJdLCJuYW1lcyI6WyJfcmVxdWlyZSIsInJlcXVpcmUiLCJmaW5kT3V0ZXJCeU5hbWUiLCJmaW5kT3V0ZXJCeU9wY29kZURlYyIsInJ1bm5lciIsIl8iLCJfcnVubmVyIiwiRXJyb3IiLCJOT05fRVhFQ1VUSU9OX0ZBQlJJQ19UWVBFUyIsIlNldCIsImFzc2VydEV4ZWN1dGFibGVPdXRlclR5cGUiLCJlbnRyeSIsIm5hbWUiLCJoYXMiLCJjb25jYXQiLCJyZXNvbHZlRmFicmljRW50cnkiLCJzdGVwIiwiaGFzTmFtZSIsImZhYnJpY1R5cGUiLCJTdHJpbmciLCJ0cmltIiwiaGFzT3Bjb2RlIiwiZmFicmljT3Bjb2RlIiwiYnlOYW1lIiwiYnlPcCIsIm9wY29kZURlYyIsInJ1bkV4ZWN1dGlvblByb2dyYW0iLCJwcm9ncmFtIiwib3B0aW9ucyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIk9iamVjdCIsImFzc2lnbiIsImV4ZWN1dGlvblByb2dyYW1EaWdlc3QiLCJfcnVubmVyMiIsImV4ZWN1dGlvblByb2dyYW1Gcm9tSHViIiwicHJvZ3JhbUhhc2giLCJzZXRGYWJyaWNFbnRyeVJlc29sdmVyIiwibW9kdWxlIiwiZXhwb3J0cyIsIkRFRkFVTFRfTUFYX1NURVBTIiwiREVGQVVMVF9NQVhfU1RBQ0siLCJyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/fabricExecutionMachine.js\n\n}")},"./functions/fabricHubLocalIdentity.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar crypto = __webpack_require__(/*! crypto */ \"./node_modules/crypto-browserify/index.js\");\nvar Identity = __webpack_require__(/*! @fabric/core/types/identity */ \"./node_modules/@fabric/core/types/identity.js\");\nvar Key = __webpack_require__(/*! @fabric/core/types/key */ \"./node_modules/@fabric/core/types/key.js\");\nvar _require = __webpack_require__(/*! ./fabricAccountDerivedIdentity */ \"./functions/fabricAccountDerivedIdentity.js\"),\n deriveFabricAccountIdentityKeys = _require.deriveFabricAccountIdentityKeys,\n fabricRootXpubFromMasterXprv = _require.fabricRootXpubFromMasterXprv,\n identityFromFabricProtocolSigningXprv = _require.identityFromFabricProtocolSigningXprv;\nvar LOCAL_IDENTITY_PASSWORD_MIN = 8;\nfunction buildLocalFabricIdentityPayload() {\n var parsed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!parsed || _typeof(parsed) !== 'object') return {\n resolved: false,\n record: null\n };\n try {\n if (parsed.xprv && !parsed.passwordProtected) {\n // Strict model: never treat plaintext on-disk private keys as valid state.\n // Identity-at-rest must be encrypted (passwordProtected) or watch-only (xpub only).\n return {\n resolved: false,\n record: null\n };\n }\n if (parsed.passwordProtected && parsed.id && parsed.xpub && parsed.xprvEnc && parsed.passwordSalt) {\n return {\n resolved: true,\n record: {\n id: parsed.id,\n xpub: parsed.xpub,\n xprv: null,\n passwordProtected: true,\n fabricIdentityMode: parsed.fabricIdentityMode === 'account' ? 'account' : 'master',\n fabricHdRole: parsed.fabricHdRole === 'accountNode' ? 'accountNode' : undefined,\n fabricAccountIndex: parsed.fabricAccountIndex != null && String(parsed.fabricAccountIndex).trim() !== '' ? Math.floor(Number(parsed.fabricAccountIndex)) : 0,\n plaintextUnlockAvailable: false\n }\n };\n }\n if (parsed.xpub) {\n /** Fabric account-slot xpub-only (watch-only protocol identity). */\n if (parsed.fabricIdentityMode === 'account' && !parsed.xprv) {\n try {\n var key = new Key({\n xpub: parsed.xpub\n });\n var _require2 = __webpack_require__(/*! ./fabricAccountDerivedIdentity */ \"./functions/fabricAccountDerivedIdentity.js\"),\n fabricBech32IdFromCompressedPubHex = _require2.fabricBech32IdFromCompressedPubHex;\n var ai = parsed.fabricAccountIndex != null && String(parsed.fabricAccountIndex).trim() !== '' ? Math.floor(Number(parsed.fabricAccountIndex)) : 0;\n return {\n resolved: true,\n record: {\n id: fabricBech32IdFromCompressedPubHex(key.pubkey),\n xpub: key.xpub,\n xprv: null,\n masterXprv: null,\n masterXpub: null,\n fabricIdentityMode: 'account',\n fabricHdRole: 'watchAccount',\n fabricAccountIndex: ai,\n plaintextUnlockAvailable: false,\n passwordProtected: false\n }\n };\n } catch (e) {\n return {\n resolved: false,\n record: null,\n error: String(e.message || e)\n };\n }\n }\n try {\n var _key = new Key({\n xpub: parsed.xpub\n });\n var ident = new Identity(_key);\n return {\n resolved: true,\n record: {\n id: ident.id,\n xpub: _key.xpub,\n xprv: null,\n fabricIdentityMode: 'master',\n fabricHdRole: 'master',\n fabricAccountIndex: 0,\n plaintextUnlockAvailable: false,\n passwordProtected: false\n }\n };\n } catch (e) {\n return {\n resolved: false,\n record: null,\n error: String(e.message || e)\n };\n }\n }\n } catch (err) {\n return {\n resolved: false,\n record: null,\n error: String(err.message || err)\n };\n }\n return {\n resolved: false,\n record: null\n };\n}\n\n/** Prefer `masterXprv` then legacy `xprv` for HD master-only storage (plaintext). */\nfunction plaintextMasterFromStored(parsed) {\n if (!parsed || _typeof(parsed) !== 'object') return '';\n // Strict model: plaintext key material at rest is unsupported.\n return '';\n}\n\n/** Plaintext on disk can unlock signing: HD master (`masterXprv`/`xprv`) or account-node-only `xprv`. */\nfunction fabricPlaintextSigningUnlockable(parsed) {\n if (!parsed || _typeof(parsed) !== 'object') return false;\n // Strict model: plaintext key material at rest is unsupported.\n return false;\n}\n\n/**\n * Builds in-memory unlocked identity snapshot after decrypt/paste master xprv material.\n * For account mode (`fabricIdentityMode` account), decrypted material is Fabric HD master; signing key is derived.\n */\nfunction unlockedSessionFromDecryptedMaster(decryptedMasterXprv) {\n var parsed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var master = String(decryptedMasterXprv || '').trim();\n if (!master) throw new Error('Missing decrypted key material.');\n var pwProt = !!(parsed && parsed.passwordProtected);\n if (parsed && parsed.fabricHdRole === 'accountNode') {\n var mat = identityFromFabricProtocolSigningXprv(master);\n if (parsed.id != null && String(parsed.id).trim() && String(parsed.id).trim() !== String(mat.id)) {\n throw new Error('Imported key does not match stored Fabric identity id.');\n }\n var ai = parsed.fabricAccountIndex != null && String(parsed.fabricAccountIndex).trim() !== '' ? Math.floor(Number(parsed.fabricAccountIndex)) : 0;\n return {\n id: mat.id != null ? String(mat.id) : undefined,\n xpub: mat.xpub != null ? String(mat.xpub) : undefined,\n xprv: mat.xprv != null ? String(mat.xprv) : undefined,\n masterXprv: null,\n masterXpub: null,\n fabricIdentityMode: 'account',\n fabricAccountIndex: ai,\n fabricHdRole: 'accountNode',\n passwordProtected: pwProt,\n plaintextUnlockAvailable: false\n };\n }\n if (parsed && parsed.fabricIdentityMode === 'account') {\n var _ai = parsed.fabricAccountIndex != null && String(parsed.fabricAccountIndex).trim() !== '' ? Math.floor(Number(parsed.fabricAccountIndex)) : 0;\n var dk = deriveFabricAccountIdentityKeys(master, _ai, 0);\n var mxp = parsed.masterXpub && String(parsed.masterXpub).trim() ? String(parsed.masterXpub).trim() : fabricRootXpubFromMasterXprv(master);\n return {\n id: dk.id != null ? String(dk.id) : undefined,\n xpub: dk.xpub != null ? String(dk.xpub) : undefined,\n xprv: dk.xprv != null ? String(dk.xprv) : undefined,\n masterXprv: master,\n masterXpub: mxp,\n fabricIdentityMode: 'account',\n fabricAccountIndex: _ai,\n fabricHdRole: 'master',\n passwordProtected: pwProt,\n plaintextUnlockAvailable: false\n };\n }\n var ident = new Identity({\n xprv: master\n });\n var key = ident.key;\n return {\n id: ident.id != null ? String(ident.id) : undefined,\n xpub: key.xpub != null ? String(key.xpub) : undefined,\n xprv: master,\n fabricIdentityMode: 'master',\n fabricAccountIndex: 0,\n fabricHdRole: 'master',\n passwordProtected: pwProt,\n plaintextUnlockAvailable: false\n };\n}\n\n/**\n * Re-encrypt plaintext key material in `parsed` (localStorage record) with `password`.\n * Strips on-disk xprv / masterXprv; caller should write the return value to storage.\n */\nfunction encryptLocalIdentityAtRest(parsed, password) {\n var pwd = String(password || '').trim();\n if (pwd.length < LOCAL_IDENTITY_PASSWORD_MIN) {\n var err = new Error(\"Password must be at least \".concat(LOCAL_IDENTITY_PASSWORD_MIN, \" characters.\"));\n err.code = 'FABRIC_LOCAL_PASSWORD_POLICY';\n throw err;\n }\n if (!parsed || _typeof(parsed) !== 'object' || parsed.passwordProtected) {\n throw new Error('Cannot encrypt this identity state.');\n }\n if (parsed.fabricHdRole === 'accountNode') {\n var _material = String(parsed.xprv || '').trim();\n if (!_material) throw new Error('Missing account signing key.');\n var _salt = crypto.randomBytes(16).toString('hex');\n var _keyBytes = crypto.createHash('sha256').update(_salt + pwd).digest();\n var _iv = crypto.randomBytes(16);\n var _cipher = crypto.createCipheriv('aes-256-cbc', _keyBytes, _iv);\n var _enc = _cipher.update(_material, 'utf8', 'hex');\n _enc += _cipher[\"final\"]('hex');\n var fabricAccountIndex = parsed.fabricAccountIndex != null && String(parsed.fabricAccountIndex).trim() !== '' ? Math.floor(Number(parsed.fabricAccountIndex)) : 0;\n var _out = {\n fabricIdentityMode: 'account',\n fabricHdRole: 'accountNode',\n fabricAccountIndex: fabricAccountIndex,\n id: parsed.id,\n xpub: parsed.xpub,\n xprvEnc: _iv.toString('hex') + ':' + _enc,\n passwordSalt: _salt,\n passwordProtected: true\n };\n if (parsed.linkedFromDesktop) _out.linkedFromDesktop = true;\n return _out;\n }\n if (parsed.fabricIdentityMode === 'account') {\n var _material2 = String(parsed.masterXprv || parsed.xprv || '').trim();\n if (!_material2) throw new Error('Missing HD master key.');\n var _fabricAccountIndex = parsed.fabricAccountIndex != null && String(parsed.fabricAccountIndex).trim() !== '' ? Math.floor(Number(parsed.fabricAccountIndex)) : 0;\n var dk = deriveFabricAccountIdentityKeys(_material2, _fabricAccountIndex, 0);\n var masterXpub = parsed.masterXpub && String(parsed.masterXpub).trim() ? String(parsed.masterXpub).trim() : fabricRootXpubFromMasterXprv(_material2);\n var _salt2 = crypto.randomBytes(16).toString('hex');\n var _keyBytes2 = crypto.createHash('sha256').update(_salt2 + pwd).digest();\n var _iv2 = crypto.randomBytes(16);\n var _cipher2 = crypto.createCipheriv('aes-256-cbc', _keyBytes2, _iv2);\n var _enc2 = _cipher2.update(String(_material2).trim(), 'utf8', 'hex');\n _enc2 += _cipher2[\"final\"]('hex');\n var _out2 = {\n fabricIdentityMode: 'account',\n fabricAccountIndex: _fabricAccountIndex,\n masterXpub: masterXpub,\n id: dk.id,\n xpub: dk.xpub,\n xprvEnc: _iv2.toString('hex') + ':' + _enc2,\n passwordSalt: _salt2,\n passwordProtected: true\n };\n if (parsed.linkedFromDesktop) _out2.linkedFromDesktop = true;\n return _out2;\n }\n var material = String(parsed.masterXprv || parsed.xprv || '').trim();\n if (!material) throw new Error('Missing extended private key.');\n var ident = new Identity({\n xprv: material\n });\n var salt = crypto.randomBytes(16).toString('hex');\n var keyBytes = crypto.createHash('sha256').update(salt + pwd).digest();\n var iv = crypto.randomBytes(16);\n var cipher = crypto.createCipheriv('aes-256-cbc', keyBytes, iv);\n var enc = cipher.update(String(material).trim(), 'utf8', 'hex');\n enc += cipher[\"final\"]('hex');\n var out = {\n fabricIdentityMode: 'master',\n fabricHdRole: 'master',\n fabricAccountIndex: 0,\n id: ident.id,\n xpub: ident.key.xpub,\n xprvEnc: iv.toString('hex') + ':' + enc,\n passwordSalt: salt,\n passwordProtected: true\n };\n if (parsed.linkedFromDesktop) out.linkedFromDesktop = true;\n return out;\n}\n\n/** Decrypt stored master/signing key material (same format as IdentityManager unlock). */\nfunction decryptLocalIdentityMasterMaterial(parsed, password) {\n if (!parsed || !parsed.passwordProtected || !parsed.xprvEnc || !parsed.passwordSalt) {\n throw new Error('Stored identity does not use encryption password storage.');\n }\n var pwd = String(password || '').trim();\n var keyBytes = crypto.createHash('sha256').update(String(parsed.passwordSalt) + pwd).digest();\n var parts = String(parsed.xprvEnc).split(':');\n if (parts.length !== 2) throw new Error('Invalid encrypted key format.');\n var iv = Buffer.from(parts[0], 'hex');\n var blob = Buffer.from(parts[1], 'hex');\n var decipher = crypto.createDecipheriv('aes-256-cbc', keyBytes, iv);\n var decrypted = decipher.update(blob, 'hex', 'utf8');\n decrypted += decipher[\"final\"]('utf8');\n return decrypted.trim();\n}\nmodule.exports = {\n LOCAL_IDENTITY_PASSWORD_MIN: LOCAL_IDENTITY_PASSWORD_MIN,\n buildLocalFabricIdentityPayload: buildLocalFabricIdentityPayload,\n plaintextMasterFromStored: plaintextMasterFromStored,\n fabricPlaintextSigningUnlockable: fabricPlaintextSigningUnlockable,\n unlockedSessionFromDecryptedMaster: unlockedSessionFromDecryptedMaster,\n encryptLocalIdentityAtRest: encryptLocalIdentityAtRest,\n decryptLocalIdentityMasterMaterial: decryptLocalIdentityMasterMaterial,\n deriveFabricAccountIdentityKeys: deriveFabricAccountIdentityKeys,\n fabricRootXpubFromMasterXprv: fabricRootXpubFromMasterXprv\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljSHViTG9jYWxJZGVudGl0eS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7O0FBQUEsU0FBQUEsUUFBQUMsQ0FBQSxzQ0FBQUQsT0FBQSx3QkFBQUUsTUFBQSx1QkFBQUEsTUFBQSxDQUFBQyxRQUFBLGFBQUFGLENBQUEsa0JBQUFBLENBQUEsZ0JBQUFBLENBQUEsV0FBQUEsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBRCxDQUFBLENBQUFHLFdBQUEsS0FBQUYsTUFBQSxJQUFBRCxDQUFBLEtBQUFDLE1BQUEsQ0FBQUcsU0FBQSxxQkFBQUosQ0FBQSxLQUFBRCxPQUFBLENBQUFDLENBQUE7QUFFYixJQUFNSyxNQUFNLEdBQUdDLG1CQUFPLENBQUMseURBQVEsQ0FBQztBQUNoQyxJQUFNQyxRQUFRLEdBQUdELG1CQUFPLENBQUMsa0ZBQTZCLENBQUM7QUFDdkQsSUFBTUUsR0FBRyxHQUFHRixtQkFBTyxDQUFDLHdFQUF3QixDQUFDO0FBQzdDLElBQUFHLFFBQUEsR0FJSUgsbUJBQU8sQ0FBQyxtRkFBZ0MsQ0FBQztFQUgzQ0ksK0JBQStCLEdBQUFELFFBQUEsQ0FBL0JDLCtCQUErQjtFQUMvQkMsNEJBQTRCLEdBQUFGLFFBQUEsQ0FBNUJFLDRCQUE0QjtFQUM1QkMscUNBQXFDLEdBQUFILFFBQUEsQ0FBckNHLHFDQUFxQztBQUd2QyxJQUFNQywyQkFBMkIsR0FBRyxDQUFDO0FBRXJDLFNBQVNDLCtCQUErQkEsQ0FBQSxFQUFlO0VBQUEsSUFBYkMsTUFBTSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDLENBQUM7RUFDbkQsSUFBSSxDQUFDRCxNQUFNLElBQUloQixPQUFBLENBQU9nQixNQUFNLE1BQUssUUFBUSxFQUFFLE9BQU87SUFBRUksUUFBUSxFQUFFLEtBQUs7SUFBRUMsTUFBTSxFQUFFO0VBQUssQ0FBQztFQUVuRixJQUFJO0lBQ0YsSUFBSUwsTUFBTSxDQUFDTSxJQUFJLElBQUksQ0FBQ04sTUFBTSxDQUFDTyxpQkFBaUIsRUFBRTtNQUM1QztNQUNBO01BQ0EsT0FBTztRQUFFSCxRQUFRLEVBQUUsS0FBSztRQUFFQyxNQUFNLEVBQUU7TUFBSyxDQUFDO0lBQzFDO0lBRUEsSUFBSUwsTUFBTSxDQUFDTyxpQkFBaUIsSUFBSVAsTUFBTSxDQUFDUSxFQUFFLElBQUlSLE1BQU0sQ0FBQ1MsSUFBSSxJQUFJVCxNQUFNLENBQUNVLE9BQU8sSUFBSVYsTUFBTSxDQUFDVyxZQUFZLEVBQUU7TUFDakcsT0FBTztRQUNMUCxRQUFRLEVBQUUsSUFBSTtRQUNkQyxNQUFNLEVBQUU7VUFDTkcsRUFBRSxFQUFFUixNQUFNLENBQUNRLEVBQUU7VUFDYkMsSUFBSSxFQUFFVCxNQUFNLENBQUNTLElBQUk7VUFDakJILElBQUksRUFBRSxJQUFJO1VBQ1ZDLGlCQUFpQixFQUFFLElBQUk7VUFDdkJLLGtCQUFrQixFQUFFWixNQUFNLENBQUNZLGtCQUFrQixLQUFLLFNBQVMsR0FBRyxTQUFTLEdBQUcsUUFBUTtVQUNsRkMsWUFBWSxFQUFFYixNQUFNLENBQUNhLFlBQVksS0FBSyxhQUFhLEdBQUcsYUFBYSxHQUFHVixTQUFTO1VBQy9FVyxrQkFBa0IsRUFDaEJkLE1BQU0sQ0FBQ2Msa0JBQWtCLElBQUksSUFBSSxJQUFJQyxNQUFNLENBQUNmLE1BQU0sQ0FBQ2Msa0JBQWtCLENBQUMsQ0FBQ0UsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQ2hGQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDbkIsTUFBTSxDQUFDYyxrQkFBa0IsQ0FBQyxDQUFDLEdBQzdDLENBQUM7VUFDUE0sd0JBQXdCLEVBQUU7UUFDNUI7TUFDRixDQUFDO0lBQ0g7SUFFQSxJQUFJcEIsTUFBTSxDQUFDUyxJQUFJLEVBQUU7TUFDZjtNQUNBLElBQUlULE1BQU0sQ0FBQ1ksa0JBQWtCLEtBQUssU0FBUyxJQUFJLENBQUNaLE1BQU0sQ0FBQ00sSUFBSSxFQUFFO1FBQzNELElBQUk7VUFDRixJQUFNZSxHQUFHLEdBQUcsSUFBSTVCLEdBQUcsQ0FBQztZQUFFZ0IsSUFBSSxFQUFFVCxNQUFNLENBQUNTO1VBQUssQ0FBQyxDQUFDO1VBQzFDLElBQUFhLFNBQUEsR0FFSS9CLG1CQUFPLENBQUMsbUZBQWdDLENBQUM7WUFEM0NnQyxrQ0FBa0MsR0FBQUQsU0FBQSxDQUFsQ0Msa0NBQWtDO1VBRXBDLElBQU1DLEVBQUUsR0FDTnhCLE1BQU0sQ0FBQ2Msa0JBQWtCLElBQUksSUFBSSxJQUFJQyxNQUFNLENBQUNmLE1BQU0sQ0FBQ2Msa0JBQWtCLENBQUMsQ0FBQ0UsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQ2hGQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDbkIsTUFBTSxDQUFDYyxrQkFBa0IsQ0FBQyxDQUFDLEdBQzdDLENBQUM7VUFDUCxPQUFPO1lBQ0xWLFFBQVEsRUFBRSxJQUFJO1lBQ2RDLE1BQU0sRUFBRTtjQUNORyxFQUFFLEVBQUVlLGtDQUFrQyxDQUFDRixHQUFHLENBQUNJLE1BQU0sQ0FBQztjQUNsRGhCLElBQUksRUFBRVksR0FBRyxDQUFDWixJQUFJO2NBQ2RILElBQUksRUFBRSxJQUFJO2NBQ1ZvQixVQUFVLEVBQUUsSUFBSTtjQUNoQkMsVUFBVSxFQUFFLElBQUk7Y0FDaEJmLGtCQUFrQixFQUFFLFNBQVM7Y0FDN0JDLFlBQVksRUFBRSxjQUFjO2NBQzVCQyxrQkFBa0IsRUFBRVUsRUFBRTtjQUN0Qkosd0JBQXdCLEVBQUUsS0FBSztjQUMvQmIsaUJBQWlCLEVBQUU7WUFDckI7VUFDRixDQUFDO1FBQ0gsQ0FBQyxDQUFDLE9BQU9xQixDQUFDLEVBQUU7VUFDVixPQUFPO1lBQUV4QixRQUFRLEVBQUUsS0FBSztZQUFFQyxNQUFNLEVBQUUsSUFBSTtZQUFFd0IsS0FBSyxFQUFFZCxNQUFNLENBQUNhLENBQUMsQ0FBQ0UsT0FBTyxJQUFJRixDQUFDO1VBQUUsQ0FBQztRQUN6RTtNQUNGO01BRUEsSUFBSTtRQUNGLElBQU1QLElBQUcsR0FBRyxJQUFJNUIsR0FBRyxDQUFDO1VBQUVnQixJQUFJLEVBQUVULE1BQU0sQ0FBQ1M7UUFBSyxDQUFDLENBQUM7UUFDMUMsSUFBTXNCLEtBQUssR0FBRyxJQUFJdkMsUUFBUSxDQUFDNkIsSUFBRyxDQUFDO1FBQy9CLE9BQU87VUFDTGpCLFFBQVEsRUFBRSxJQUFJO1VBQ2RDLE1BQU0sRUFBRTtZQUNORyxFQUFFLEVBQUV1QixLQUFLLENBQUN2QixFQUFFO1lBQ1pDLElBQUksRUFBRVksSUFBRyxDQUFDWixJQUFJO1lBQ2RILElBQUksRUFBRSxJQUFJO1lBQ1ZNLGtCQUFrQixFQUFFLFFBQVE7WUFDNUJDLFlBQVksRUFBRSxRQUFRO1lBQ3RCQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCTSx3QkFBd0IsRUFBRSxLQUFLO1lBQy9CYixpQkFBaUIsRUFBRTtVQUNyQjtRQUNGLENBQUM7TUFDSCxDQUFDLENBQUMsT0FBT3FCLENBQUMsRUFBRTtRQUNWLE9BQU87VUFBRXhCLFFBQVEsRUFBRSxLQUFLO1VBQUVDLE1BQU0sRUFBRSxJQUFJO1VBQUV3QixLQUFLLEVBQUVkLE1BQU0sQ0FBQ2EsQ0FBQyxDQUFDRSxPQUFPLElBQUlGLENBQUM7UUFBRSxDQUFDO01BQ3pFO0lBQ0Y7RUFDRixDQUFDLENBQUMsT0FBT0ksR0FBRyxFQUFFO0lBQ1osT0FBTztNQUFFNUIsUUFBUSxFQUFFLEtBQUs7TUFBRUMsTUFBTSxFQUFFLElBQUk7TUFBRXdCLEtBQUssRUFBRWQsTUFBTSxDQUFDaUIsR0FBRyxDQUFDRixPQUFPLElBQUlFLEdBQUc7SUFBRSxDQUFDO0VBQzdFO0VBQ0EsT0FBTztJQUFFNUIsUUFBUSxFQUFFLEtBQUs7SUFBRUMsTUFBTSxFQUFFO0VBQUssQ0FBQztBQUMxQzs7QUFFQTtBQUNBLFNBQVM0Qix5QkFBeUJBLENBQUVqQyxNQUFNLEVBQUU7RUFDMUMsSUFBSSxDQUFDQSxNQUFNLElBQUloQixPQUFBLENBQU9nQixNQUFNLE1BQUssUUFBUSxFQUFFLE9BQU8sRUFBRTtFQUNwRDtFQUNBLE9BQU8sRUFBRTtBQUNYOztBQUVBO0FBQ0EsU0FBU2tDLGdDQUFnQ0EsQ0FBRWxDLE1BQU0sRUFBRTtFQUNqRCxJQUFJLENBQUNBLE1BQU0sSUFBSWhCLE9BQUEsQ0FBT2dCLE1BQU0sTUFBSyxRQUFRLEVBQUUsT0FBTyxLQUFLO0VBQ3ZEO0VBQ0EsT0FBTyxLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTbUMsa0NBQWtDQSxDQUFFQyxtQkFBbUIsRUFBZTtFQUFBLElBQWJwQyxNQUFNLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUMzRSxJQUFNb0MsTUFBTSxHQUFHdEIsTUFBTSxDQUFDcUIsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUNwQixJQUFJLENBQUMsQ0FBQztFQUN2RCxJQUFJLENBQUNxQixNQUFNLEVBQUUsTUFBTSxJQUFJQyxLQUFLLENBQUMsaUNBQWlDLENBQUM7RUFDL0QsSUFBTUMsTUFBTSxHQUFHLENBQUMsRUFBRXZDLE1BQU0sSUFBSUEsTUFBTSxDQUFDTyxpQkFBaUIsQ0FBQztFQUVyRCxJQUFJUCxNQUFNLElBQUlBLE1BQU0sQ0FBQ2EsWUFBWSxLQUFLLGFBQWEsRUFBRTtJQUNuRCxJQUFNMkIsR0FBRyxHQUFHM0MscUNBQXFDLENBQUN3QyxNQUFNLENBQUM7SUFDekQsSUFBSXJDLE1BQU0sQ0FBQ1EsRUFBRSxJQUFJLElBQUksSUFBSU8sTUFBTSxDQUFDZixNQUFNLENBQUNRLEVBQUUsQ0FBQyxDQUFDUSxJQUFJLENBQUMsQ0FBQyxJQUFJRCxNQUFNLENBQUNmLE1BQU0sQ0FBQ1EsRUFBRSxDQUFDLENBQUNRLElBQUksQ0FBQyxDQUFDLEtBQUtELE1BQU0sQ0FBQ3lCLEdBQUcsQ0FBQ2hDLEVBQUUsQ0FBQyxFQUFFO01BQ2hHLE1BQU0sSUFBSThCLEtBQUssQ0FBQyx3REFBd0QsQ0FBQztJQUMzRTtJQUNBLElBQU1kLEVBQUUsR0FDTnhCLE1BQU0sQ0FBQ2Msa0JBQWtCLElBQUksSUFBSSxJQUFJQyxNQUFNLENBQUNmLE1BQU0sQ0FBQ2Msa0JBQWtCLENBQUMsQ0FBQ0UsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQ2hGQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDbkIsTUFBTSxDQUFDYyxrQkFBa0IsQ0FBQyxDQUFDLEdBQzdDLENBQUM7SUFDUCxPQUFPO01BQ0xOLEVBQUUsRUFBRWdDLEdBQUcsQ0FBQ2hDLEVBQUUsSUFBSSxJQUFJLEdBQUdPLE1BQU0sQ0FBQ3lCLEdBQUcsQ0FBQ2hDLEVBQUUsQ0FBQyxHQUFHTCxTQUFTO01BQy9DTSxJQUFJLEVBQUUrQixHQUFHLENBQUMvQixJQUFJLElBQUksSUFBSSxHQUFHTSxNQUFNLENBQUN5QixHQUFHLENBQUMvQixJQUFJLENBQUMsR0FBR04sU0FBUztNQUNyREcsSUFBSSxFQUFFa0MsR0FBRyxDQUFDbEMsSUFBSSxJQUFJLElBQUksR0FBR1MsTUFBTSxDQUFDeUIsR0FBRyxDQUFDbEMsSUFBSSxDQUFDLEdBQUdILFNBQVM7TUFDckR1QixVQUFVLEVBQUUsSUFBSTtNQUNoQkMsVUFBVSxFQUFFLElBQUk7TUFDaEJmLGtCQUFrQixFQUFFLFNBQVM7TUFDN0JFLGtCQUFrQixFQUFFVSxFQUFFO01BQ3RCWCxZQUFZLEVBQUUsYUFBYTtNQUMzQk4saUJBQWlCLEVBQUVnQyxNQUFNO01BQ3pCbkIsd0JBQXdCLEVBQUU7SUFDNUIsQ0FBQztFQUNIO0VBRUEsSUFBSXBCLE1BQU0sSUFBSUEsTUFBTSxDQUFDWSxrQkFBa0IsS0FBSyxTQUFTLEVBQUU7SUFDckQsSUFBTVksR0FBRSxHQUNOeEIsTUFBTSxDQUFDYyxrQkFBa0IsSUFBSSxJQUFJLElBQUlDLE1BQU0sQ0FBQ2YsTUFBTSxDQUFDYyxrQkFBa0IsQ0FBQyxDQUFDRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FDaEZDLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxNQUFNLENBQUNuQixNQUFNLENBQUNjLGtCQUFrQixDQUFDLENBQUMsR0FDN0MsQ0FBQztJQUNQLElBQU0yQixFQUFFLEdBQUc5QywrQkFBK0IsQ0FBQzBDLE1BQU0sRUFBRWIsR0FBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxJQUFNa0IsR0FBRyxHQUNQMUMsTUFBTSxDQUFDMkIsVUFBVSxJQUFJWixNQUFNLENBQUNmLE1BQU0sQ0FBQzJCLFVBQVUsQ0FBQyxDQUFDWCxJQUFJLENBQUMsQ0FBQyxHQUNqREQsTUFBTSxDQUFDZixNQUFNLENBQUMyQixVQUFVLENBQUMsQ0FBQ1gsSUFBSSxDQUFDLENBQUMsR0FDaENwQiw0QkFBNEIsQ0FBQ3lDLE1BQU0sQ0FBQztJQUMxQyxPQUFPO01BQ0w3QixFQUFFLEVBQUVpQyxFQUFFLENBQUNqQyxFQUFFLElBQUksSUFBSSxHQUFHTyxNQUFNLENBQUMwQixFQUFFLENBQUNqQyxFQUFFLENBQUMsR0FBR0wsU0FBUztNQUM3Q00sSUFBSSxFQUFFZ0MsRUFBRSxDQUFDaEMsSUFBSSxJQUFJLElBQUksR0FBR00sTUFBTSxDQUFDMEIsRUFBRSxDQUFDaEMsSUFBSSxDQUFDLEdBQUdOLFNBQVM7TUFDbkRHLElBQUksRUFBRW1DLEVBQUUsQ0FBQ25DLElBQUksSUFBSSxJQUFJLEdBQUdTLE1BQU0sQ0FBQzBCLEVBQUUsQ0FBQ25DLElBQUksQ0FBQyxHQUFHSCxTQUFTO01BQ25EdUIsVUFBVSxFQUFFVyxNQUFNO01BQ2xCVixVQUFVLEVBQUVlLEdBQUc7TUFDZjlCLGtCQUFrQixFQUFFLFNBQVM7TUFDN0JFLGtCQUFrQixFQUFFVSxHQUFFO01BQ3RCWCxZQUFZLEVBQUUsUUFBUTtNQUN0Qk4saUJBQWlCLEVBQUVnQyxNQUFNO01BQ3pCbkIsd0JBQXdCLEVBQUU7SUFDNUIsQ0FBQztFQUNIO0VBQ0EsSUFBTVcsS0FBSyxHQUFHLElBQUl2QyxRQUFRLENBQUM7SUFBRWMsSUFBSSxFQUFFK0I7RUFBTyxDQUFDLENBQUM7RUFDNUMsSUFBTWhCLEdBQUcsR0FBR1UsS0FBSyxDQUFDVixHQUFHO0VBQ3JCLE9BQU87SUFDTGIsRUFBRSxFQUFFdUIsS0FBSyxDQUFDdkIsRUFBRSxJQUFJLElBQUksR0FBR08sTUFBTSxDQUFDZ0IsS0FBSyxDQUFDdkIsRUFBRSxDQUFDLEdBQUdMLFNBQVM7SUFDbkRNLElBQUksRUFBRVksR0FBRyxDQUFDWixJQUFJLElBQUksSUFBSSxHQUFHTSxNQUFNLENBQUNNLEdBQUcsQ0FBQ1osSUFBSSxDQUFDLEdBQUdOLFNBQVM7SUFDckRHLElBQUksRUFBRStCLE1BQU07SUFDWnpCLGtCQUFrQixFQUFFLFFBQVE7SUFDNUJFLGtCQUFrQixFQUFFLENBQUM7SUFDckJELFlBQVksRUFBRSxRQUFRO0lBQ3RCTixpQkFBaUIsRUFBRWdDLE1BQU07SUFDekJuQix3QkFBd0IsRUFBRTtFQUM1QixDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTdUIsMEJBQTBCQSxDQUFFM0MsTUFBTSxFQUFFNEMsUUFBUSxFQUFFO0VBQ3JELElBQU1DLEdBQUcsR0FBRzlCLE1BQU0sQ0FBQzZCLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQzVCLElBQUksQ0FBQyxDQUFDO0VBQ3pDLElBQUk2QixHQUFHLENBQUMzQyxNQUFNLEdBQUdKLDJCQUEyQixFQUFFO0lBQzVDLElBQU1rQyxHQUFHLEdBQUcsSUFBSU0sS0FBSyw4QkFBQVEsTUFBQSxDQUE4QmhELDJCQUEyQixpQkFBYyxDQUFDO0lBQzdGa0MsR0FBRyxDQUFDZSxJQUFJLEdBQUcsOEJBQThCO0lBQ3pDLE1BQU1mLEdBQUc7RUFDWDtFQUNBLElBQUksQ0FBQ2hDLE1BQU0sSUFBSWhCLE9BQUEsQ0FBT2dCLE1BQU0sTUFBSyxRQUFRLElBQUlBLE1BQU0sQ0FBQ08saUJBQWlCLEVBQUU7SUFDckUsTUFBTSxJQUFJK0IsS0FBSyxDQUFDLHFDQUFxQyxDQUFDO0VBQ3hEO0VBRUEsSUFBSXRDLE1BQU0sQ0FBQ2EsWUFBWSxLQUFLLGFBQWEsRUFBRTtJQUN6QyxJQUFNbUMsU0FBUSxHQUFHakMsTUFBTSxDQUFDZixNQUFNLENBQUNNLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQ1UsSUFBSSxDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDZ0MsU0FBUSxFQUFFLE1BQU0sSUFBSVYsS0FBSyxDQUFDLDhCQUE4QixDQUFDO0lBQzlELElBQU1XLEtBQUksR0FBRzNELE1BQU0sQ0FBQzRELFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUNuRCxJQUFNQyxTQUFRLEdBQUc5RCxNQUFNLENBQUMrRCxVQUFVLENBQUMsUUFBUSxDQUFDLENBQ3pDQyxNQUFNLENBQUNMLEtBQUksR0FBR0osR0FBRyxDQUFDLENBQ2xCVSxNQUFNLENBQUMsQ0FBQztJQUNYLElBQU1DLEdBQUUsR0FBR2xFLE1BQU0sQ0FBQzRELFdBQVcsQ0FBQyxFQUFFLENBQUM7SUFDakMsSUFBTU8sT0FBTSxHQUFHbkUsTUFBTSxDQUFDb0UsY0FBYyxDQUFDLGFBQWEsRUFBRU4sU0FBUSxFQUFFSSxHQUFFLENBQUM7SUFDakUsSUFBSUcsSUFBRyxHQUFHRixPQUFNLENBQUNILE1BQU0sQ0FBQ04sU0FBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7SUFDaERXLElBQUcsSUFBSUYsT0FBTSxTQUFNLENBQUMsS0FBSyxDQUFDO0lBQzFCLElBQU0zQyxrQkFBa0IsR0FDdEJkLE1BQU0sQ0FBQ2Msa0JBQWtCLElBQUksSUFBSSxJQUFJQyxNQUFNLENBQUNmLE1BQU0sQ0FBQ2Msa0JBQWtCLENBQUMsQ0FBQ0UsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQ2hGQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDbkIsTUFBTSxDQUFDYyxrQkFBa0IsQ0FBQyxDQUFDLEdBQzdDLENBQUM7SUFDUCxJQUFNOEMsSUFBRyxHQUFHO01BQ1ZoRCxrQkFBa0IsRUFBRSxTQUFTO01BQzdCQyxZQUFZLEVBQUUsYUFBYTtNQUMzQkMsa0JBQWtCLEVBQWxCQSxrQkFBa0I7TUFDbEJOLEVBQUUsRUFBRVIsTUFBTSxDQUFDUSxFQUFFO01BQ2JDLElBQUksRUFBRVQsTUFBTSxDQUFDUyxJQUFJO01BQ2pCQyxPQUFPLEVBQUU4QyxHQUFFLENBQUNMLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUdRLElBQUc7TUFDdkNoRCxZQUFZLEVBQUVzQyxLQUFJO01BQ2xCMUMsaUJBQWlCLEVBQUU7SUFDckIsQ0FBQztJQUNELElBQUlQLE1BQU0sQ0FBQzZELGlCQUFpQixFQUFFRCxJQUFHLENBQUNDLGlCQUFpQixHQUFHLElBQUk7SUFDMUQsT0FBT0QsSUFBRztFQUNaO0VBRUEsSUFBSTVELE1BQU0sQ0FBQ1ksa0JBQWtCLEtBQUssU0FBUyxFQUFFO0lBQzNDLElBQU1vQyxVQUFRLEdBQUdqQyxNQUFNLENBQUNmLE1BQU0sQ0FBQzBCLFVBQVUsSUFBSTFCLE1BQU0sQ0FBQ00sSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDVSxJQUFJLENBQUMsQ0FBQztJQUN0RSxJQUFJLENBQUNnQyxVQUFRLEVBQUUsTUFBTSxJQUFJVixLQUFLLENBQUMsd0JBQXdCLENBQUM7SUFDeEQsSUFBTXhCLG1CQUFrQixHQUN0QmQsTUFBTSxDQUFDYyxrQkFBa0IsSUFBSSxJQUFJLElBQUlDLE1BQU0sQ0FBQ2YsTUFBTSxDQUFDYyxrQkFBa0IsQ0FBQyxDQUFDRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FDaEZDLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxNQUFNLENBQUNuQixNQUFNLENBQUNjLGtCQUFrQixDQUFDLENBQUMsR0FDN0MsQ0FBQztJQUNQLElBQU0yQixFQUFFLEdBQUc5QywrQkFBK0IsQ0FBQ3FELFVBQVEsRUFBRWxDLG1CQUFrQixFQUFFLENBQUMsQ0FBQztJQUMzRSxJQUFNYSxVQUFVLEdBQ2QzQixNQUFNLENBQUMyQixVQUFVLElBQUlaLE1BQU0sQ0FBQ2YsTUFBTSxDQUFDMkIsVUFBVSxDQUFDLENBQUNYLElBQUksQ0FBQyxDQUFDLEdBQ2pERCxNQUFNLENBQUNmLE1BQU0sQ0FBQzJCLFVBQVUsQ0FBQyxDQUFDWCxJQUFJLENBQUMsQ0FBQyxHQUNoQ3BCLDRCQUE0QixDQUFDb0QsVUFBUSxDQUFDO0lBQzVDLElBQU1DLE1BQUksR0FBRzNELE1BQU0sQ0FBQzRELFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUNuRCxJQUFNQyxVQUFRLEdBQUc5RCxNQUFNLENBQUMrRCxVQUFVLENBQUMsUUFBUSxDQUFDLENBQ3pDQyxNQUFNLENBQUNMLE1BQUksR0FBR0osR0FBRyxDQUFDLENBQ2xCVSxNQUFNLENBQUMsQ0FBQztJQUNYLElBQU1DLElBQUUsR0FBR2xFLE1BQU0sQ0FBQzRELFdBQVcsQ0FBQyxFQUFFLENBQUM7SUFDakMsSUFBTU8sUUFBTSxHQUFHbkUsTUFBTSxDQUFDb0UsY0FBYyxDQUFDLGFBQWEsRUFBRU4sVUFBUSxFQUFFSSxJQUFFLENBQUM7SUFDakUsSUFBSUcsS0FBRyxHQUFHRixRQUFNLENBQUNILE1BQU0sQ0FBQ3ZDLE1BQU0sQ0FBQ2lDLFVBQVEsQ0FBQyxDQUFDaEMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO0lBQy9EMkMsS0FBRyxJQUFJRixRQUFNLFNBQU0sQ0FBQyxLQUFLLENBQUM7SUFDMUIsSUFBTUcsS0FBRyxHQUFHO01BQ1ZoRCxrQkFBa0IsRUFBRSxTQUFTO01BQzdCRSxrQkFBa0IsRUFBbEJBLG1CQUFrQjtNQUNsQmEsVUFBVSxFQUFWQSxVQUFVO01BQ1ZuQixFQUFFLEVBQUVpQyxFQUFFLENBQUNqQyxFQUFFO01BQ1RDLElBQUksRUFBRWdDLEVBQUUsQ0FBQ2hDLElBQUk7TUFDYkMsT0FBTyxFQUFFOEMsSUFBRSxDQUFDTCxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHUSxLQUFHO01BQ3ZDaEQsWUFBWSxFQUFFc0MsTUFBSTtNQUNsQjFDLGlCQUFpQixFQUFFO0lBQ3JCLENBQUM7SUFDRCxJQUFJUCxNQUFNLENBQUM2RCxpQkFBaUIsRUFBRUQsS0FBRyxDQUFDQyxpQkFBaUIsR0FBRyxJQUFJO0lBQzFELE9BQU9ELEtBQUc7RUFDWjtFQUVBLElBQU1aLFFBQVEsR0FBR2pDLE1BQU0sQ0FBQ2YsTUFBTSxDQUFDMEIsVUFBVSxJQUFJMUIsTUFBTSxDQUFDTSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUNVLElBQUksQ0FBQyxDQUFDO0VBQ3RFLElBQUksQ0FBQ2dDLFFBQVEsRUFBRSxNQUFNLElBQUlWLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztFQUMvRCxJQUFNUCxLQUFLLEdBQUcsSUFBSXZDLFFBQVEsQ0FBQztJQUFFYyxJQUFJLEVBQUUwQztFQUFTLENBQUMsQ0FBQztFQUM5QyxJQUFNQyxJQUFJLEdBQUczRCxNQUFNLENBQUM0RCxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUNDLFFBQVEsQ0FBQyxLQUFLLENBQUM7RUFDbkQsSUFBTUMsUUFBUSxHQUFHOUQsTUFBTSxDQUFDK0QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUN6Q0MsTUFBTSxDQUFDTCxJQUFJLEdBQUdKLEdBQUcsQ0FBQyxDQUNsQlUsTUFBTSxDQUFDLENBQUM7RUFDWCxJQUFNQyxFQUFFLEdBQUdsRSxNQUFNLENBQUM0RCxXQUFXLENBQUMsRUFBRSxDQUFDO0VBQ2pDLElBQU1PLE1BQU0sR0FBR25FLE1BQU0sQ0FBQ29FLGNBQWMsQ0FBQyxhQUFhLEVBQUVOLFFBQVEsRUFBRUksRUFBRSxDQUFDO0VBQ2pFLElBQUlHLEdBQUcsR0FBR0YsTUFBTSxDQUFDSCxNQUFNLENBQUN2QyxNQUFNLENBQUNpQyxRQUFRLENBQUMsQ0FBQ2hDLElBQUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztFQUMvRDJDLEdBQUcsSUFBSUYsTUFBTSxTQUFNLENBQUMsS0FBSyxDQUFDO0VBQzFCLElBQU1HLEdBQUcsR0FBRztJQUNWaEQsa0JBQWtCLEVBQUUsUUFBUTtJQUM1QkMsWUFBWSxFQUFFLFFBQVE7SUFDdEJDLGtCQUFrQixFQUFFLENBQUM7SUFDckJOLEVBQUUsRUFBRXVCLEtBQUssQ0FBQ3ZCLEVBQUU7SUFDWkMsSUFBSSxFQUFFc0IsS0FBSyxDQUFDVixHQUFHLENBQUNaLElBQUk7SUFDcEJDLE9BQU8sRUFBRThDLEVBQUUsQ0FBQ0wsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBR1EsR0FBRztJQUN2Q2hELFlBQVksRUFBRXNDLElBQUk7SUFDbEIxQyxpQkFBaUIsRUFBRTtFQUNyQixDQUFDO0VBQ0QsSUFBSVAsTUFBTSxDQUFDNkQsaUJBQWlCLEVBQUVELEdBQUcsQ0FBQ0MsaUJBQWlCLEdBQUcsSUFBSTtFQUMxRCxPQUFPRCxHQUFHO0FBQ1o7O0FBRUE7QUFDQSxTQUFTRSxrQ0FBa0NBLENBQUU5RCxNQUFNLEVBQUU0QyxRQUFRLEVBQUU7RUFDN0QsSUFBSSxDQUFDNUMsTUFBTSxJQUFJLENBQUNBLE1BQU0sQ0FBQ08saUJBQWlCLElBQUksQ0FBQ1AsTUFBTSxDQUFDVSxPQUFPLElBQUksQ0FBQ1YsTUFBTSxDQUFDVyxZQUFZLEVBQUU7SUFDbkYsTUFBTSxJQUFJMkIsS0FBSyxDQUFDLDJEQUEyRCxDQUFDO0VBQzlFO0VBQ0EsSUFBTU8sR0FBRyxHQUFHOUIsTUFBTSxDQUFDNkIsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDNUIsSUFBSSxDQUFDLENBQUM7RUFDekMsSUFBTW9DLFFBQVEsR0FBRzlELE1BQU0sQ0FBQytELFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FDekNDLE1BQU0sQ0FBQ3ZDLE1BQU0sQ0FBQ2YsTUFBTSxDQUFDVyxZQUFZLENBQUMsR0FBR2tDLEdBQUcsQ0FBQyxDQUN6Q1UsTUFBTSxDQUFDLENBQUM7RUFDWCxJQUFNUSxLQUFLLEdBQUdoRCxNQUFNLENBQUNmLE1BQU0sQ0FBQ1UsT0FBTyxDQUFDLENBQUNzRCxLQUFLLENBQUMsR0FBRyxDQUFDO0VBQy9DLElBQUlELEtBQUssQ0FBQzdELE1BQU0sS0FBSyxDQUFDLEVBQUUsTUFBTSxJQUFJb0MsS0FBSyxDQUFDLCtCQUErQixDQUFDO0VBQ3hFLElBQU1rQixFQUFFLEdBQUdTLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO0VBQ3ZDLElBQU1JLElBQUksR0FBR0YsTUFBTSxDQUFDQyxJQUFJLENBQUNILEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7RUFDekMsSUFBTUssUUFBUSxHQUFHOUUsTUFBTSxDQUFDK0UsZ0JBQWdCLENBQUMsYUFBYSxFQUFFakIsUUFBUSxFQUFFSSxFQUFFLENBQUM7RUFDckUsSUFBSWMsU0FBUyxHQUFHRixRQUFRLENBQUNkLE1BQU0sQ0FBQ2EsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUM7RUFDcERHLFNBQVMsSUFBSUYsUUFBUSxTQUFNLENBQUMsTUFBTSxDQUFDO0VBQ25DLE9BQU9FLFNBQVMsQ0FBQ3RELElBQUksQ0FBQyxDQUFDO0FBQ3pCO0FBRUF1RCxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmMUUsMkJBQTJCLEVBQTNCQSwyQkFBMkI7RUFDM0JDLCtCQUErQixFQUEvQkEsK0JBQStCO0VBQy9Ca0MseUJBQXlCLEVBQXpCQSx5QkFBeUI7RUFDekJDLGdDQUFnQyxFQUFoQ0EsZ0NBQWdDO0VBQ2hDQyxrQ0FBa0MsRUFBbENBLGtDQUFrQztFQUNsQ1EsMEJBQTBCLEVBQTFCQSwwQkFBMEI7RUFDMUJtQixrQ0FBa0MsRUFBbENBLGtDQUFrQztFQUNsQ25FLCtCQUErQixFQUEvQkEsK0JBQStCO0VBQy9CQyw0QkFBNEIsRUFBNUJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2ZhYnJpY0h1YkxvY2FsSWRlbnRpdHkuanM/YjUwNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuY29uc3QgSWRlbnRpdHkgPSByZXF1aXJlKCdAZmFicmljL2NvcmUvdHlwZXMvaWRlbnRpdHknKTtcbmNvbnN0IEtleSA9IHJlcXVpcmUoJ0BmYWJyaWMvY29yZS90eXBlcy9rZXknKTtcbmNvbnN0IHtcbiAgZGVyaXZlRmFicmljQWNjb3VudElkZW50aXR5S2V5cyxcbiAgZmFicmljUm9vdFhwdWJGcm9tTWFzdGVyWHBydixcbiAgaWRlbnRpdHlGcm9tRmFicmljUHJvdG9jb2xTaWduaW5nWHBydlxufSA9IHJlcXVpcmUoJy4vZmFicmljQWNjb3VudERlcml2ZWRJZGVudGl0eScpO1xuXG5jb25zdCBMT0NBTF9JREVOVElUWV9QQVNTV09SRF9NSU4gPSA4O1xuXG5mdW5jdGlvbiBidWlsZExvY2FsRmFicmljSWRlbnRpdHlQYXlsb2FkIChwYXJzZWQgPSB7fSkge1xuICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JykgcmV0dXJuIHsgcmVzb2x2ZWQ6IGZhbHNlLCByZWNvcmQ6IG51bGwgfTtcblxuICB0cnkge1xuICAgIGlmIChwYXJzZWQueHBydiAmJiAhcGFyc2VkLnBhc3N3b3JkUHJvdGVjdGVkKSB7XG4gICAgICAvLyBTdHJpY3QgbW9kZWw6IG5ldmVyIHRyZWF0IHBsYWludGV4dCBvbi1kaXNrIHByaXZhdGUga2V5cyBhcyB2YWxpZCBzdGF0ZS5cbiAgICAgIC8vIElkZW50aXR5LWF0LXJlc3QgbXVzdCBiZSBlbmNyeXB0ZWQgKHBhc3N3b3JkUHJvdGVjdGVkKSBvciB3YXRjaC1vbmx5ICh4cHViIG9ubHkpLlxuICAgICAgcmV0dXJuIHsgcmVzb2x2ZWQ6IGZhbHNlLCByZWNvcmQ6IG51bGwgfTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VkLnBhc3N3b3JkUHJvdGVjdGVkICYmIHBhcnNlZC5pZCAmJiBwYXJzZWQueHB1YiAmJiBwYXJzZWQueHBydkVuYyAmJiBwYXJzZWQucGFzc3dvcmRTYWx0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNvbHZlZDogdHJ1ZSxcbiAgICAgICAgcmVjb3JkOiB7XG4gICAgICAgICAgaWQ6IHBhcnNlZC5pZCxcbiAgICAgICAgICB4cHViOiBwYXJzZWQueHB1YixcbiAgICAgICAgICB4cHJ2OiBudWxsLFxuICAgICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiB0cnVlLFxuICAgICAgICAgIGZhYnJpY0lkZW50aXR5TW9kZTogcGFyc2VkLmZhYnJpY0lkZW50aXR5TW9kZSA9PT0gJ2FjY291bnQnID8gJ2FjY291bnQnIDogJ21hc3RlcicsXG4gICAgICAgICAgZmFicmljSGRSb2xlOiBwYXJzZWQuZmFicmljSGRSb2xlID09PSAnYWNjb3VudE5vZGUnID8gJ2FjY291bnROb2RlJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBmYWJyaWNBY2NvdW50SW5kZXg6XG4gICAgICAgICAgICBwYXJzZWQuZmFicmljQWNjb3VudEluZGV4ICE9IG51bGwgJiYgU3RyaW5nKHBhcnNlZC5mYWJyaWNBY2NvdW50SW5kZXgpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgICAgPyBNYXRoLmZsb29yKE51bWJlcihwYXJzZWQuZmFicmljQWNjb3VudEluZGV4KSlcbiAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgIHBsYWludGV4dFVubG9ja0F2YWlsYWJsZTogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VkLnhwdWIpIHtcbiAgICAgIC8qKiBGYWJyaWMgYWNjb3VudC1zbG90IHhwdWItb25seSAod2F0Y2gtb25seSBwcm90b2NvbCBpZGVudGl0eSkuICovXG4gICAgICBpZiAocGFyc2VkLmZhYnJpY0lkZW50aXR5TW9kZSA9PT0gJ2FjY291bnQnICYmICFwYXJzZWQueHBydikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGtleSA9IG5ldyBLZXkoeyB4cHViOiBwYXJzZWQueHB1YiB9KTtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBmYWJyaWNCZWNoMzJJZEZyb21Db21wcmVzc2VkUHViSGV4XG4gICAgICAgICAgfSA9IHJlcXVpcmUoJy4vZmFicmljQWNjb3VudERlcml2ZWRJZGVudGl0eScpO1xuICAgICAgICAgIGNvbnN0IGFpID1cbiAgICAgICAgICAgIHBhcnNlZC5mYWJyaWNBY2NvdW50SW5kZXggIT0gbnVsbCAmJiBTdHJpbmcocGFyc2VkLmZhYnJpY0FjY291bnRJbmRleCkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgICA/IE1hdGguZmxvb3IoTnVtYmVyKHBhcnNlZC5mYWJyaWNBY2NvdW50SW5kZXgpKVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc29sdmVkOiB0cnVlLFxuICAgICAgICAgICAgcmVjb3JkOiB7XG4gICAgICAgICAgICAgIGlkOiBmYWJyaWNCZWNoMzJJZEZyb21Db21wcmVzc2VkUHViSGV4KGtleS5wdWJrZXkpLFxuICAgICAgICAgICAgICB4cHViOiBrZXkueHB1YixcbiAgICAgICAgICAgICAgeHBydjogbnVsbCxcbiAgICAgICAgICAgICAgbWFzdGVyWHBydjogbnVsbCxcbiAgICAgICAgICAgICAgbWFzdGVyWHB1YjogbnVsbCxcbiAgICAgICAgICAgICAgZmFicmljSWRlbnRpdHlNb2RlOiAnYWNjb3VudCcsXG4gICAgICAgICAgICAgIGZhYnJpY0hkUm9sZTogJ3dhdGNoQWNjb3VudCcsXG4gICAgICAgICAgICAgIGZhYnJpY0FjY291bnRJbmRleDogYWksXG4gICAgICAgICAgICAgIHBsYWludGV4dFVubG9ja0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIHBhc3N3b3JkUHJvdGVjdGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4geyByZXNvbHZlZDogZmFsc2UsIHJlY29yZDogbnVsbCwgZXJyb3I6IFN0cmluZyhlLm1lc3NhZ2UgfHwgZSkgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgS2V5KHsgeHB1YjogcGFyc2VkLnhwdWIgfSk7XG4gICAgICAgIGNvbnN0IGlkZW50ID0gbmV3IElkZW50aXR5KGtleSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzb2x2ZWQ6IHRydWUsXG4gICAgICAgICAgcmVjb3JkOiB7XG4gICAgICAgICAgICBpZDogaWRlbnQuaWQsXG4gICAgICAgICAgICB4cHViOiBrZXkueHB1YixcbiAgICAgICAgICAgIHhwcnY6IG51bGwsXG4gICAgICAgICAgICBmYWJyaWNJZGVudGl0eU1vZGU6ICdtYXN0ZXInLFxuICAgICAgICAgICAgZmFicmljSGRSb2xlOiAnbWFzdGVyJyxcbiAgICAgICAgICAgIGZhYnJpY0FjY291bnRJbmRleDogMCxcbiAgICAgICAgICAgIHBsYWludGV4dFVubG9ja0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBwYXNzd29yZFByb3RlY3RlZDogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7IHJlc29sdmVkOiBmYWxzZSwgcmVjb3JkOiBudWxsLCBlcnJvcjogU3RyaW5nKGUubWVzc2FnZSB8fCBlKSB9O1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIHsgcmVzb2x2ZWQ6IGZhbHNlLCByZWNvcmQ6IG51bGwsIGVycm9yOiBTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKSB9O1xuICB9XG4gIHJldHVybiB7IHJlc29sdmVkOiBmYWxzZSwgcmVjb3JkOiBudWxsIH07XG59XG5cbi8qKiBQcmVmZXIgYG1hc3RlclhwcnZgIHRoZW4gbGVnYWN5IGB4cHJ2YCBmb3IgSEQgbWFzdGVyLW9ubHkgc3RvcmFnZSAocGxhaW50ZXh0KS4gKi9cbmZ1bmN0aW9uIHBsYWludGV4dE1hc3RlckZyb21TdG9yZWQgKHBhcnNlZCkge1xuICBpZiAoIXBhcnNlZCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JykgcmV0dXJuICcnO1xuICAvLyBTdHJpY3QgbW9kZWw6IHBsYWludGV4dCBrZXkgbWF0ZXJpYWwgYXQgcmVzdCBpcyB1bnN1cHBvcnRlZC5cbiAgcmV0dXJuICcnO1xufVxuXG4vKiogUGxhaW50ZXh0IG9uIGRpc2sgY2FuIHVubG9jayBzaWduaW5nOiBIRCBtYXN0ZXIgKGBtYXN0ZXJYcHJ2YC9geHBydmApIG9yIGFjY291bnQtbm9kZS1vbmx5IGB4cHJ2YC4gKi9cbmZ1bmN0aW9uIGZhYnJpY1BsYWludGV4dFNpZ25pbmdVbmxvY2thYmxlIChwYXJzZWQpIHtcbiAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgLy8gU3RyaWN0IG1vZGVsOiBwbGFpbnRleHQga2V5IG1hdGVyaWFsIGF0IHJlc3QgaXMgdW5zdXBwb3J0ZWQuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgaW4tbWVtb3J5IHVubG9ja2VkIGlkZW50aXR5IHNuYXBzaG90IGFmdGVyIGRlY3J5cHQvcGFzdGUgbWFzdGVyIHhwcnYgbWF0ZXJpYWwuXG4gKiBGb3IgYWNjb3VudCBtb2RlIChgZmFicmljSWRlbnRpdHlNb2RlYCBhY2NvdW50KSwgZGVjcnlwdGVkIG1hdGVyaWFsIGlzIEZhYnJpYyBIRCBtYXN0ZXI7IHNpZ25pbmcga2V5IGlzIGRlcml2ZWQuXG4gKi9cbmZ1bmN0aW9uIHVubG9ja2VkU2Vzc2lvbkZyb21EZWNyeXB0ZWRNYXN0ZXIgKGRlY3J5cHRlZE1hc3RlclhwcnYsIHBhcnNlZCA9IHt9KSB7XG4gIGNvbnN0IG1hc3RlciA9IFN0cmluZyhkZWNyeXB0ZWRNYXN0ZXJYcHJ2IHx8ICcnKS50cmltKCk7XG4gIGlmICghbWFzdGVyKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgZGVjcnlwdGVkIGtleSBtYXRlcmlhbC4nKTtcbiAgY29uc3QgcHdQcm90ID0gISEocGFyc2VkICYmIHBhcnNlZC5wYXNzd29yZFByb3RlY3RlZCk7XG5cbiAgaWYgKHBhcnNlZCAmJiBwYXJzZWQuZmFicmljSGRSb2xlID09PSAnYWNjb3VudE5vZGUnKSB7XG4gICAgY29uc3QgbWF0ID0gaWRlbnRpdHlGcm9tRmFicmljUHJvdG9jb2xTaWduaW5nWHBydihtYXN0ZXIpO1xuICAgIGlmIChwYXJzZWQuaWQgIT0gbnVsbCAmJiBTdHJpbmcocGFyc2VkLmlkKS50cmltKCkgJiYgU3RyaW5nKHBhcnNlZC5pZCkudHJpbSgpICE9PSBTdHJpbmcobWF0LmlkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvcnRlZCBrZXkgZG9lcyBub3QgbWF0Y2ggc3RvcmVkIEZhYnJpYyBpZGVudGl0eSBpZC4nKTtcbiAgICB9XG4gICAgY29uc3QgYWkgPVxuICAgICAgcGFyc2VkLmZhYnJpY0FjY291bnRJbmRleCAhPSBudWxsICYmIFN0cmluZyhwYXJzZWQuZmFicmljQWNjb3VudEluZGV4KS50cmltKCkgIT09ICcnXG4gICAgICAgID8gTWF0aC5mbG9vcihOdW1iZXIocGFyc2VkLmZhYnJpY0FjY291bnRJbmRleCkpXG4gICAgICAgIDogMDtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IG1hdC5pZCAhPSBudWxsID8gU3RyaW5nKG1hdC5pZCkgOiB1bmRlZmluZWQsXG4gICAgICB4cHViOiBtYXQueHB1YiAhPSBudWxsID8gU3RyaW5nKG1hdC54cHViKSA6IHVuZGVmaW5lZCxcbiAgICAgIHhwcnY6IG1hdC54cHJ2ICE9IG51bGwgPyBTdHJpbmcobWF0LnhwcnYpIDogdW5kZWZpbmVkLFxuICAgICAgbWFzdGVyWHBydjogbnVsbCxcbiAgICAgIG1hc3RlclhwdWI6IG51bGwsXG4gICAgICBmYWJyaWNJZGVudGl0eU1vZGU6ICdhY2NvdW50JyxcbiAgICAgIGZhYnJpY0FjY291bnRJbmRleDogYWksXG4gICAgICBmYWJyaWNIZFJvbGU6ICdhY2NvdW50Tm9kZScsXG4gICAgICBwYXNzd29yZFByb3RlY3RlZDogcHdQcm90LFxuICAgICAgcGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBpZiAocGFyc2VkICYmIHBhcnNlZC5mYWJyaWNJZGVudGl0eU1vZGUgPT09ICdhY2NvdW50Jykge1xuICAgIGNvbnN0IGFpID1cbiAgICAgIHBhcnNlZC5mYWJyaWNBY2NvdW50SW5kZXggIT0gbnVsbCAmJiBTdHJpbmcocGFyc2VkLmZhYnJpY0FjY291bnRJbmRleCkudHJpbSgpICE9PSAnJ1xuICAgICAgICA/IE1hdGguZmxvb3IoTnVtYmVyKHBhcnNlZC5mYWJyaWNBY2NvdW50SW5kZXgpKVxuICAgICAgICA6IDA7XG4gICAgY29uc3QgZGsgPSBkZXJpdmVGYWJyaWNBY2NvdW50SWRlbnRpdHlLZXlzKG1hc3RlciwgYWksIDApO1xuICAgIGNvbnN0IG14cCA9XG4gICAgICBwYXJzZWQubWFzdGVyWHB1YiAmJiBTdHJpbmcocGFyc2VkLm1hc3RlclhwdWIpLnRyaW0oKVxuICAgICAgICA/IFN0cmluZyhwYXJzZWQubWFzdGVyWHB1YikudHJpbSgpXG4gICAgICAgIDogZmFicmljUm9vdFhwdWJGcm9tTWFzdGVyWHBydihtYXN0ZXIpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZGsuaWQgIT0gbnVsbCA/IFN0cmluZyhkay5pZCkgOiB1bmRlZmluZWQsXG4gICAgICB4cHViOiBkay54cHViICE9IG51bGwgPyBTdHJpbmcoZGsueHB1YikgOiB1bmRlZmluZWQsXG4gICAgICB4cHJ2OiBkay54cHJ2ICE9IG51bGwgPyBTdHJpbmcoZGsueHBydikgOiB1bmRlZmluZWQsXG4gICAgICBtYXN0ZXJYcHJ2OiBtYXN0ZXIsXG4gICAgICBtYXN0ZXJYcHViOiBteHAsXG4gICAgICBmYWJyaWNJZGVudGl0eU1vZGU6ICdhY2NvdW50JyxcbiAgICAgIGZhYnJpY0FjY291bnRJbmRleDogYWksXG4gICAgICBmYWJyaWNIZFJvbGU6ICdtYXN0ZXInLFxuICAgICAgcGFzc3dvcmRQcm90ZWN0ZWQ6IHB3UHJvdCxcbiAgICAgIHBsYWludGV4dFVubG9ja0F2YWlsYWJsZTogZmFsc2VcbiAgICB9O1xuICB9XG4gIGNvbnN0IGlkZW50ID0gbmV3IElkZW50aXR5KHsgeHBydjogbWFzdGVyIH0pO1xuICBjb25zdCBrZXkgPSBpZGVudC5rZXk7XG4gIHJldHVybiB7XG4gICAgaWQ6IGlkZW50LmlkICE9IG51bGwgPyBTdHJpbmcoaWRlbnQuaWQpIDogdW5kZWZpbmVkLFxuICAgIHhwdWI6IGtleS54cHViICE9IG51bGwgPyBTdHJpbmcoa2V5LnhwdWIpIDogdW5kZWZpbmVkLFxuICAgIHhwcnY6IG1hc3RlcixcbiAgICBmYWJyaWNJZGVudGl0eU1vZGU6ICdtYXN0ZXInLFxuICAgIGZhYnJpY0FjY291bnRJbmRleDogMCxcbiAgICBmYWJyaWNIZFJvbGU6ICdtYXN0ZXInLFxuICAgIHBhc3N3b3JkUHJvdGVjdGVkOiBwd1Byb3QsXG4gICAgcGxhaW50ZXh0VW5sb2NrQXZhaWxhYmxlOiBmYWxzZVxuICB9O1xufVxuXG4vKipcbiAqIFJlLWVuY3J5cHQgcGxhaW50ZXh0IGtleSBtYXRlcmlhbCBpbiBgcGFyc2VkYCAobG9jYWxTdG9yYWdlIHJlY29yZCkgd2l0aCBgcGFzc3dvcmRgLlxuICogU3RyaXBzIG9uLWRpc2sgeHBydiAvIG1hc3RlclhwcnY7IGNhbGxlciBzaG91bGQgd3JpdGUgdGhlIHJldHVybiB2YWx1ZSB0byBzdG9yYWdlLlxuICovXG5mdW5jdGlvbiBlbmNyeXB0TG9jYWxJZGVudGl0eUF0UmVzdCAocGFyc2VkLCBwYXNzd29yZCkge1xuICBjb25zdCBwd2QgPSBTdHJpbmcocGFzc3dvcmQgfHwgJycpLnRyaW0oKTtcbiAgaWYgKHB3ZC5sZW5ndGggPCBMT0NBTF9JREVOVElUWV9QQVNTV09SRF9NSU4pIHtcbiAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFBhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgJHtMT0NBTF9JREVOVElUWV9QQVNTV09SRF9NSU59IGNoYXJhY3RlcnMuYCk7XG4gICAgZXJyLmNvZGUgPSAnRkFCUklDX0xPQ0FMX1BBU1NXT1JEX1BPTElDWSc7XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IHBhcnNlZC5wYXNzd29yZFByb3RlY3RlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGVuY3J5cHQgdGhpcyBpZGVudGl0eSBzdGF0ZS4nKTtcbiAgfVxuXG4gIGlmIChwYXJzZWQuZmFicmljSGRSb2xlID09PSAnYWNjb3VudE5vZGUnKSB7XG4gICAgY29uc3QgbWF0ZXJpYWwgPSBTdHJpbmcocGFyc2VkLnhwcnYgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIW1hdGVyaWFsKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYWNjb3VudCBzaWduaW5nIGtleS4nKTtcbiAgICBjb25zdCBzYWx0ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3Qga2V5Qnl0ZXMgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JylcbiAgICAgIC51cGRhdGUoc2FsdCArIHB3ZClcbiAgICAgIC5kaWdlc3QoKTtcbiAgICBjb25zdCBpdiA9IGNyeXB0by5yYW5kb21CeXRlcygxNik7XG4gICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWNiYycsIGtleUJ5dGVzLCBpdik7XG4gICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUobWF0ZXJpYWwsICd1dGY4JywgJ2hleCcpO1xuICAgIGVuYyArPSBjaXBoZXIuZmluYWwoJ2hleCcpO1xuICAgIGNvbnN0IGZhYnJpY0FjY291bnRJbmRleCA9XG4gICAgICBwYXJzZWQuZmFicmljQWNjb3VudEluZGV4ICE9IG51bGwgJiYgU3RyaW5nKHBhcnNlZC5mYWJyaWNBY2NvdW50SW5kZXgpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgPyBNYXRoLmZsb29yKE51bWJlcihwYXJzZWQuZmFicmljQWNjb3VudEluZGV4KSlcbiAgICAgICAgOiAwO1xuICAgIGNvbnN0IG91dCA9IHtcbiAgICAgIGZhYnJpY0lkZW50aXR5TW9kZTogJ2FjY291bnQnLFxuICAgICAgZmFicmljSGRSb2xlOiAnYWNjb3VudE5vZGUnLFxuICAgICAgZmFicmljQWNjb3VudEluZGV4LFxuICAgICAgaWQ6IHBhcnNlZC5pZCxcbiAgICAgIHhwdWI6IHBhcnNlZC54cHViLFxuICAgICAgeHBydkVuYzogaXYudG9TdHJpbmcoJ2hleCcpICsgJzonICsgZW5jLFxuICAgICAgcGFzc3dvcmRTYWx0OiBzYWx0LFxuICAgICAgcGFzc3dvcmRQcm90ZWN0ZWQ6IHRydWVcbiAgICB9O1xuICAgIGlmIChwYXJzZWQubGlua2VkRnJvbURlc2t0b3ApIG91dC5saW5rZWRGcm9tRGVza3RvcCA9IHRydWU7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGlmIChwYXJzZWQuZmFicmljSWRlbnRpdHlNb2RlID09PSAnYWNjb3VudCcpIHtcbiAgICBjb25zdCBtYXRlcmlhbCA9IFN0cmluZyhwYXJzZWQubWFzdGVyWHBydiB8fCBwYXJzZWQueHBydiB8fCAnJykudHJpbSgpO1xuICAgIGlmICghbWF0ZXJpYWwpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBIRCBtYXN0ZXIga2V5LicpO1xuICAgIGNvbnN0IGZhYnJpY0FjY291bnRJbmRleCA9XG4gICAgICBwYXJzZWQuZmFicmljQWNjb3VudEluZGV4ICE9IG51bGwgJiYgU3RyaW5nKHBhcnNlZC5mYWJyaWNBY2NvdW50SW5kZXgpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgPyBNYXRoLmZsb29yKE51bWJlcihwYXJzZWQuZmFicmljQWNjb3VudEluZGV4KSlcbiAgICAgICAgOiAwO1xuICAgIGNvbnN0IGRrID0gZGVyaXZlRmFicmljQWNjb3VudElkZW50aXR5S2V5cyhtYXRlcmlhbCwgZmFicmljQWNjb3VudEluZGV4LCAwKTtcbiAgICBjb25zdCBtYXN0ZXJYcHViID1cbiAgICAgIHBhcnNlZC5tYXN0ZXJYcHViICYmIFN0cmluZyhwYXJzZWQubWFzdGVyWHB1YikudHJpbSgpXG4gICAgICAgID8gU3RyaW5nKHBhcnNlZC5tYXN0ZXJYcHViKS50cmltKClcbiAgICAgICAgOiBmYWJyaWNSb290WHB1YkZyb21NYXN0ZXJYcHJ2KG1hdGVyaWFsKTtcbiAgICBjb25zdCBzYWx0ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3Qga2V5Qnl0ZXMgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JylcbiAgICAgIC51cGRhdGUoc2FsdCArIHB3ZClcbiAgICAgIC5kaWdlc3QoKTtcbiAgICBjb25zdCBpdiA9IGNyeXB0by5yYW5kb21CeXRlcygxNik7XG4gICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWNiYycsIGtleUJ5dGVzLCBpdik7XG4gICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoU3RyaW5nKG1hdGVyaWFsKS50cmltKCksICd1dGY4JywgJ2hleCcpO1xuICAgIGVuYyArPSBjaXBoZXIuZmluYWwoJ2hleCcpO1xuICAgIGNvbnN0IG91dCA9IHtcbiAgICAgIGZhYnJpY0lkZW50aXR5TW9kZTogJ2FjY291bnQnLFxuICAgICAgZmFicmljQWNjb3VudEluZGV4LFxuICAgICAgbWFzdGVyWHB1YixcbiAgICAgIGlkOiBkay5pZCxcbiAgICAgIHhwdWI6IGRrLnhwdWIsXG4gICAgICB4cHJ2RW5jOiBpdi50b1N0cmluZygnaGV4JykgKyAnOicgKyBlbmMsXG4gICAgICBwYXNzd29yZFNhbHQ6IHNhbHQsXG4gICAgICBwYXNzd29yZFByb3RlY3RlZDogdHJ1ZVxuICAgIH07XG4gICAgaWYgKHBhcnNlZC5saW5rZWRGcm9tRGVza3RvcCkgb3V0LmxpbmtlZEZyb21EZXNrdG9wID0gdHJ1ZTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgY29uc3QgbWF0ZXJpYWwgPSBTdHJpbmcocGFyc2VkLm1hc3RlclhwcnYgfHwgcGFyc2VkLnhwcnYgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFtYXRlcmlhbCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGV4dGVuZGVkIHByaXZhdGUga2V5LicpO1xuICBjb25zdCBpZGVudCA9IG5ldyBJZGVudGl0eSh7IHhwcnY6IG1hdGVyaWFsIH0pO1xuICBjb25zdCBzYWx0ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnaGV4Jyk7XG4gIGNvbnN0IGtleUJ5dGVzID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpXG4gICAgLnVwZGF0ZShzYWx0ICsgcHdkKVxuICAgIC5kaWdlc3QoKTtcbiAgY29uc3QgaXYgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpO1xuICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywga2V5Qnl0ZXMsIGl2KTtcbiAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoU3RyaW5nKG1hdGVyaWFsKS50cmltKCksICd1dGY4JywgJ2hleCcpO1xuICBlbmMgKz0gY2lwaGVyLmZpbmFsKCdoZXgnKTtcbiAgY29uc3Qgb3V0ID0ge1xuICAgIGZhYnJpY0lkZW50aXR5TW9kZTogJ21hc3RlcicsXG4gICAgZmFicmljSGRSb2xlOiAnbWFzdGVyJyxcbiAgICBmYWJyaWNBY2NvdW50SW5kZXg6IDAsXG4gICAgaWQ6IGlkZW50LmlkLFxuICAgIHhwdWI6IGlkZW50LmtleS54cHViLFxuICAgIHhwcnZFbmM6IGl2LnRvU3RyaW5nKCdoZXgnKSArICc6JyArIGVuYyxcbiAgICBwYXNzd29yZFNhbHQ6IHNhbHQsXG4gICAgcGFzc3dvcmRQcm90ZWN0ZWQ6IHRydWVcbiAgfTtcbiAgaWYgKHBhcnNlZC5saW5rZWRGcm9tRGVza3RvcCkgb3V0LmxpbmtlZEZyb21EZXNrdG9wID0gdHJ1ZTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIERlY3J5cHQgc3RvcmVkIG1hc3Rlci9zaWduaW5nIGtleSBtYXRlcmlhbCAoc2FtZSBmb3JtYXQgYXMgSWRlbnRpdHlNYW5hZ2VyIHVubG9jaykuICovXG5mdW5jdGlvbiBkZWNyeXB0TG9jYWxJZGVudGl0eU1hc3Rlck1hdGVyaWFsIChwYXJzZWQsIHBhc3N3b3JkKSB7XG4gIGlmICghcGFyc2VkIHx8ICFwYXJzZWQucGFzc3dvcmRQcm90ZWN0ZWQgfHwgIXBhcnNlZC54cHJ2RW5jIHx8ICFwYXJzZWQucGFzc3dvcmRTYWx0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdG9yZWQgaWRlbnRpdHkgZG9lcyBub3QgdXNlIGVuY3J5cHRpb24gcGFzc3dvcmQgc3RvcmFnZS4nKTtcbiAgfVxuICBjb25zdCBwd2QgPSBTdHJpbmcocGFzc3dvcmQgfHwgJycpLnRyaW0oKTtcbiAgY29uc3Qga2V5Qnl0ZXMgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JylcbiAgICAudXBkYXRlKFN0cmluZyhwYXJzZWQucGFzc3dvcmRTYWx0KSArIHB3ZClcbiAgICAuZGlnZXN0KCk7XG4gIGNvbnN0IHBhcnRzID0gU3RyaW5nKHBhcnNlZC54cHJ2RW5jKS5zcGxpdCgnOicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAyKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW5jcnlwdGVkIGtleSBmb3JtYXQuJyk7XG4gIGNvbnN0IGl2ID0gQnVmZmVyLmZyb20ocGFydHNbMF0sICdoZXgnKTtcbiAgY29uc3QgYmxvYiA9IEJ1ZmZlci5mcm9tKHBhcnRzWzFdLCAnaGV4Jyk7XG4gIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywga2V5Qnl0ZXMsIGl2KTtcbiAgbGV0IGRlY3J5cHRlZCA9IGRlY2lwaGVyLnVwZGF0ZShibG9iLCAnaGV4JywgJ3V0ZjgnKTtcbiAgZGVjcnlwdGVkICs9IGRlY2lwaGVyLmZpbmFsKCd1dGY4Jyk7XG4gIHJldHVybiBkZWNyeXB0ZWQudHJpbSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTE9DQUxfSURFTlRJVFlfUEFTU1dPUkRfTUlOLFxuICBidWlsZExvY2FsRmFicmljSWRlbnRpdHlQYXlsb2FkLFxuICBwbGFpbnRleHRNYXN0ZXJGcm9tU3RvcmVkLFxuICBmYWJyaWNQbGFpbnRleHRTaWduaW5nVW5sb2NrYWJsZSxcbiAgdW5sb2NrZWRTZXNzaW9uRnJvbURlY3J5cHRlZE1hc3RlcixcbiAgZW5jcnlwdExvY2FsSWRlbnRpdHlBdFJlc3QsXG4gIGRlY3J5cHRMb2NhbElkZW50aXR5TWFzdGVyTWF0ZXJpYWwsXG4gIGRlcml2ZUZhYnJpY0FjY291bnRJZGVudGl0eUtleXMsXG4gIGZhYnJpY1Jvb3RYcHViRnJvbU1hc3RlclhwcnZcbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiY3J5cHRvIiwicmVxdWlyZSIsIklkZW50aXR5IiwiS2V5IiwiX3JlcXVpcmUiLCJkZXJpdmVGYWJyaWNBY2NvdW50SWRlbnRpdHlLZXlzIiwiZmFicmljUm9vdFhwdWJGcm9tTWFzdGVyWHBydiIsImlkZW50aXR5RnJvbUZhYnJpY1Byb3RvY29sU2lnbmluZ1hwcnYiLCJMT0NBTF9JREVOVElUWV9QQVNTV09SRF9NSU4iLCJidWlsZExvY2FsRmFicmljSWRlbnRpdHlQYXlsb2FkIiwicGFyc2VkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwicmVzb2x2ZWQiLCJyZWNvcmQiLCJ4cHJ2IiwicGFzc3dvcmRQcm90ZWN0ZWQiLCJpZCIsInhwdWIiLCJ4cHJ2RW5jIiwicGFzc3dvcmRTYWx0IiwiZmFicmljSWRlbnRpdHlNb2RlIiwiZmFicmljSGRSb2xlIiwiZmFicmljQWNjb3VudEluZGV4IiwiU3RyaW5nIiwidHJpbSIsIk1hdGgiLCJmbG9vciIsIk51bWJlciIsInBsYWludGV4dFVubG9ja0F2YWlsYWJsZSIsImtleSIsIl9yZXF1aXJlMiIsImZhYnJpY0JlY2gzMklkRnJvbUNvbXByZXNzZWRQdWJIZXgiLCJhaSIsInB1YmtleSIsIm1hc3RlclhwcnYiLCJtYXN0ZXJYcHViIiwiZSIsImVycm9yIiwibWVzc2FnZSIsImlkZW50IiwiZXJyIiwicGxhaW50ZXh0TWFzdGVyRnJvbVN0b3JlZCIsImZhYnJpY1BsYWludGV4dFNpZ25pbmdVbmxvY2thYmxlIiwidW5sb2NrZWRTZXNzaW9uRnJvbURlY3J5cHRlZE1hc3RlciIsImRlY3J5cHRlZE1hc3RlclhwcnYiLCJtYXN0ZXIiLCJFcnJvciIsInB3UHJvdCIsIm1hdCIsImRrIiwibXhwIiwiZW5jcnlwdExvY2FsSWRlbnRpdHlBdFJlc3QiLCJwYXNzd29yZCIsInB3ZCIsImNvbmNhdCIsImNvZGUiLCJtYXRlcmlhbCIsInNhbHQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwia2V5Qnl0ZXMiLCJjcmVhdGVIYXNoIiwidXBkYXRlIiwiZGlnZXN0IiwiaXYiLCJjaXBoZXIiLCJjcmVhdGVDaXBoZXJpdiIsImVuYyIsIm91dCIsImxpbmtlZEZyb21EZXNrdG9wIiwiZGVjcnlwdExvY2FsSWRlbnRpdHlNYXN0ZXJNYXRlcmlhbCIsInBhcnRzIiwic3BsaXQiLCJCdWZmZXIiLCJmcm9tIiwiYmxvYiIsImRlY2lwaGVyIiwiY3JlYXRlRGVjaXBoZXJpdiIsImRlY3J5cHRlZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/fabricHubLocalIdentity.js\n\n}")},"./functions/fabricIdentityBackupCrypto.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * Encrypt a Fabric identity backup JSON payload for download (browser Web Crypto).\n * @param {object} plaintextPayload - Keys to encrypt (xprv, mnemonic, etc.)\n * @param {string} password - User-chosen password for the file\n * @returns {Promise} Serializable backup object (version 2)\n */\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction encryptFabricIdentityBackupPayload(_x, _x2) {\n return _encryptFabricIdentityBackupPayload.apply(this, arguments);\n}\nfunction _encryptFabricIdentityBackupPayload() {\n _encryptFabricIdentityBackupPayload = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(plaintextPayload, password) {\n var subtle, encoder, plaintextBytes, salt, iv, baseKey, bits, aesKey, ciphertext, u8ToB64;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n u8ToB64 = function _u8ToB(u8) {\n var s = '';\n u8.forEach(function (b) {\n s += String.fromCharCode(b);\n });\n if (typeof btoa !== 'undefined') return btoa(s);\n return Buffer.from(u8).toString('base64');\n };\n if (!(typeof password !== 'string' || password.length < 8)) {\n _context.n = 1;\n break;\n }\n throw new Error('Backup password must be at least 8 characters.');\n case 1:\n if (!(typeof globalThis.crypto === 'undefined' || !globalThis.crypto.subtle || typeof globalThis.crypto.getRandomValues !== 'function')) {\n _context.n = 2;\n break;\n }\n throw new Error('Secure backup requires Web Crypto (HTTPS or localhost).');\n case 2:\n subtle = globalThis.crypto.subtle;\n encoder = new TextEncoder();\n plaintextBytes = encoder.encode(JSON.stringify(plaintextPayload));\n salt = globalThis.crypto.getRandomValues(new Uint8Array(16));\n iv = globalThis.crypto.getRandomValues(new Uint8Array(12));\n _context.n = 3;\n return subtle.importKey('raw', encoder.encode(password), 'PBKDF2', false, ['deriveBits']);\n case 3:\n baseKey = _context.v;\n _context.n = 4;\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: 210000,\n hash: 'SHA-256'\n }, baseKey, 256);\n case 4:\n bits = _context.v;\n _context.n = 5;\n return subtle.importKey('raw', bits, {\n name: 'AES-GCM',\n length: 256\n }, false, ['encrypt']);\n case 5:\n aesKey = _context.v;\n _context.n = 6;\n return subtle.encrypt({\n name: 'AES-GCM',\n iv: iv\n }, aesKey, plaintextBytes);\n case 6:\n ciphertext = _context.v;\n return _context.a(2, {\n type: 'fabric-identity-backup',\n version: 2,\n encryption: 'aes-256-gcm-pbkdf2-sha256',\n kdf: {\n iterations: 210000,\n salt: u8ToB64(salt)\n },\n iv: u8ToB64(iv),\n ciphertext: u8ToB64(new Uint8Array(ciphertext))\n });\n }\n }, _callee);\n }));\n return _encryptFabricIdentityBackupPayload.apply(this, arguments);\n}\nfunction b64ToU8(b64) {\n if (typeof atob !== 'undefined') {\n var bin = atob(b64);\n var out = new Uint8Array(bin.length);\n for (var i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n }\n return Uint8Array.from(Buffer.from(b64, 'base64'));\n}\n\n/**\n * Decrypt a version-2 backup file back to the inner JSON object (same shape as v1 plaintext backups).\n * @param {object} encryptedFile\n * @param {string} password\n * @returns {Promise}\n */\nfunction decryptFabricIdentityBackupToPayload(_x3, _x4) {\n return _decryptFabricIdentityBackupToPayload.apply(this, arguments);\n}\nfunction _decryptFabricIdentityBackupToPayload() {\n _decryptFabricIdentityBackupToPayload = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(encryptedFile, password) {\n var _encryptedFile$kdf, _encryptedFile$kdf2;\n var subtle, encoder, salt, iv, rawCipher, baseKey, iterations, bits, aesKey, plainBuf, decoder, text;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n if (!(!encryptedFile || _typeof(encryptedFile) !== 'object')) {\n _context2.n = 1;\n break;\n }\n throw new Error('Invalid backup file.');\n case 1:\n if (!(encryptedFile.version !== 2 || !encryptedFile.ciphertext)) {\n _context2.n = 2;\n break;\n }\n throw new Error('Not an encrypted Fabric identity backup.');\n case 2:\n if (!(typeof password !== 'string' || password.length < 8)) {\n _context2.n = 3;\n break;\n }\n throw new Error('Backup password must be at least 8 characters.');\n case 3:\n if (!(typeof globalThis.crypto === 'undefined' || !globalThis.crypto.subtle)) {\n _context2.n = 4;\n break;\n }\n throw new Error('Secure backup decryption requires Web Crypto (HTTPS or localhost).');\n case 4:\n subtle = globalThis.crypto.subtle;\n encoder = new TextEncoder();\n salt = b64ToU8(String(((_encryptedFile$kdf = encryptedFile.kdf) === null || _encryptedFile$kdf === void 0 ? void 0 : _encryptedFile$kdf.salt) || ''));\n iv = b64ToU8(String(encryptedFile.iv || ''));\n rawCipher = b64ToU8(String(encryptedFile.ciphertext || ''));\n if (!(salt.length < 16)) {\n _context2.n = 5;\n break;\n }\n throw new Error('Backup KDF salt is too short.');\n case 5:\n if (!(iv.length !== 12)) {\n _context2.n = 6;\n break;\n }\n throw new Error('Backup AES-GCM iv must be 12 bytes.');\n case 6:\n if (rawCipher.length) {\n _context2.n = 7;\n break;\n }\n throw new Error('Backup ciphertext is empty.');\n case 7:\n _context2.n = 8;\n return subtle.importKey('raw', encoder.encode(password), 'PBKDF2', false, ['deriveBits']);\n case 8:\n baseKey = _context2.v;\n iterations = Number(((_encryptedFile$kdf2 = encryptedFile.kdf) === null || _encryptedFile$kdf2 === void 0 ? void 0 : _encryptedFile$kdf2.iterations) || 210000);\n if (!(!Number.isFinite(iterations) || iterations < 100000 || iterations > 1000000)) {\n _context2.n = 9;\n break;\n }\n throw new Error('Backup KDF iterations are out of range.');\n case 9:\n _context2.n = 10;\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: 'SHA-256'\n }, baseKey, 256);\n case 10:\n bits = _context2.v;\n _context2.n = 11;\n return subtle.importKey('raw', bits, {\n name: 'AES-GCM',\n length: 256\n }, false, ['decrypt']);\n case 11:\n aesKey = _context2.v;\n _context2.n = 12;\n return subtle.decrypt({\n name: 'AES-GCM',\n iv: iv\n }, aesKey, rawCipher);\n case 12:\n plainBuf = _context2.v;\n decoder = new TextDecoder();\n text = decoder.decode(plainBuf);\n return _context2.a(2, JSON.parse(text));\n }\n }, _callee2);\n }));\n return _decryptFabricIdentityBackupToPayload.apply(this, arguments);\n}\nmodule.exports = {\n encryptFabricIdentityBackupPayload: encryptFabricIdentityBackupPayload,\n decryptFabricIdentityBackupToPayload: decryptFabricIdentityBackupToPayload\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RkE7VUFBRyxDQUFDLEVBQUVHLE1BQU0sRUFBRWdELFNBQVMsQ0FBQztRQUFBO1VBQTNFQyxRQUFRLEdBQUFHLFNBQUEsQ0FBQW5HLENBQUE7VUFDUmlHLE9BQU8sR0FBRyxJQUFJTSxXQUFXLENBQUMsQ0FBQztVQUMzQkwsSUFBSSxHQUFHRCxPQUFPLENBQUNPLE1BQU0sQ0FBQ1IsUUFBUSxDQUFDO1VBQUEsT0FBQUcsU0FBQSxDQUFBbEcsQ0FBQSxJQUM5Qm1FLElBQUksQ0FBQ3FDLEtBQUssQ0FBQ1AsSUFBSSxDQUFDO01BQUE7SUFBQSxHQUFBUCxRQUFBO0VBQUEsQ0FDeEI7RUFBQSxPQUFBRCxxQ0FBQSxDQUFBNUQsS0FBQSxPQUFBRCxTQUFBO0FBQUE7QUFFRDZFLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2YxRSxrQ0FBa0MsRUFBbENBLGtDQUFrQztFQUNsQ3NELG9DQUFvQyxFQUFwQ0E7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljSWRlbnRpdHlCYWNrdXBDcnlwdG8uanM/NDVkMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRW5jcnlwdCBhIEZhYnJpYyBpZGVudGl0eSBiYWNrdXAgSlNPTiBwYXlsb2FkIGZvciBkb3dubG9hZCAoYnJvd3NlciBXZWIgQ3J5cHRvKS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwbGFpbnRleHRQYXlsb2FkIC0gS2V5cyB0byBlbmNyeXB0ICh4cHJ2LCBtbmVtb25pYywgZXRjLilcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCAtIFVzZXItY2hvc2VuIHBhc3N3b3JkIGZvciB0aGUgZmlsZVxuICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0Pn0gU2VyaWFsaXphYmxlIGJhY2t1cCBvYmplY3QgKHZlcnNpb24gMilcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZW5jcnlwdEZhYnJpY0lkZW50aXR5QmFja3VwUGF5bG9hZCAocGxhaW50ZXh0UGF5bG9hZCwgcGFzc3dvcmQpIHtcbiAgaWYgKHR5cGVvZiBwYXNzd29yZCAhPT0gJ3N0cmluZycgfHwgcGFzc3dvcmQubGVuZ3RoIDwgOCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQmFja3VwIHBhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgOCBjaGFyYWN0ZXJzLicpO1xuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcy5jcnlwdG8gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgIWdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZSB8fFxuICAgIHR5cGVvZiBnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZWN1cmUgYmFja3VwIHJlcXVpcmVzIFdlYiBDcnlwdG8gKEhUVFBTIG9yIGxvY2FsaG9zdCkuJyk7XG4gIH1cbiAgY29uc3Qgc3VidGxlID0gZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlO1xuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIGNvbnN0IHBsYWludGV4dEJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocGxhaW50ZXh0UGF5bG9hZCkpO1xuXG4gIGNvbnN0IHNhbHQgPSBnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgY29uc3QgaXYgPSBnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTIpKTtcblxuICBjb25zdCBiYXNlS2V5ID0gYXdhaXQgc3VidGxlLmltcG9ydEtleShcbiAgICAncmF3JyxcbiAgICBlbmNvZGVyLmVuY29kZShwYXNzd29yZCksXG4gICAgJ1BCS0RGMicsXG4gICAgZmFsc2UsXG4gICAgWydkZXJpdmVCaXRzJ11cbiAgKTtcbiAgY29uc3QgYml0cyA9IGF3YWl0IHN1YnRsZS5kZXJpdmVCaXRzKFxuICAgIHtcbiAgICAgIG5hbWU6ICdQQktERjInLFxuICAgICAgc2FsdCxcbiAgICAgIGl0ZXJhdGlvbnM6IDIxMDAwMCxcbiAgICAgIGhhc2g6ICdTSEEtMjU2J1xuICAgIH0sXG4gICAgYmFzZUtleSxcbiAgICAyNTZcbiAgKTtcbiAgY29uc3QgYWVzS2V5ID0gYXdhaXQgc3VidGxlLmltcG9ydEtleShcbiAgICAncmF3JyxcbiAgICBiaXRzLFxuICAgIHsgbmFtZTogJ0FFUy1HQ00nLCBsZW5ndGg6IDI1NiB9LFxuICAgIGZhbHNlLFxuICAgIFsnZW5jcnlwdCddXG4gICk7XG5cbiAgY29uc3QgY2lwaGVydGV4dCA9IGF3YWl0IHN1YnRsZS5lbmNyeXB0KHsgbmFtZTogJ0FFUy1HQ00nLCBpdiB9LCBhZXNLZXksIHBsYWludGV4dEJ5dGVzKTtcblxuICBmdW5jdGlvbiB1OFRvQjY0ICh1OCkge1xuICAgIGxldCBzID0gJyc7XG4gICAgdTguZm9yRWFjaCgoYikgPT4ge1xuICAgICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGIpO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgYnRvYSAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBidG9hKHMpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh1OCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnZmFicmljLWlkZW50aXR5LWJhY2t1cCcsXG4gICAgdmVyc2lvbjogMixcbiAgICBlbmNyeXB0aW9uOiAnYWVzLTI1Ni1nY20tcGJrZGYyLXNoYTI1NicsXG4gICAga2RmOiB7IGl0ZXJhdGlvbnM6IDIxMDAwMCwgc2FsdDogdThUb0I2NChzYWx0KSB9LFxuICAgIGl2OiB1OFRvQjY0KGl2KSxcbiAgICBjaXBoZXJ0ZXh0OiB1OFRvQjY0KG5ldyBVaW50OEFycmF5KGNpcGhlcnRleHQpKVxuICB9O1xufVxuXG5mdW5jdGlvbiBiNjRUb1U4IChiNjQpIHtcbiAgaWYgKHR5cGVvZiBhdG9iICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IGJpbiA9IGF0b2IoYjY0KTtcbiAgICBjb25zdCBvdXQgPSBuZXcgVWludDhBcnJheShiaW4ubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpbi5sZW5ndGg7IGkrKykgb3V0W2ldID0gYmluLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICByZXR1cm4gVWludDhBcnJheS5mcm9tKEJ1ZmZlci5mcm9tKGI2NCwgJ2Jhc2U2NCcpKTtcbn1cblxuLyoqXG4gKiBEZWNyeXB0IGEgdmVyc2lvbi0yIGJhY2t1cCBmaWxlIGJhY2sgdG8gdGhlIGlubmVyIEpTT04gb2JqZWN0IChzYW1lIHNoYXBlIGFzIHYxIHBsYWludGV4dCBiYWNrdXBzKS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBlbmNyeXB0ZWRGaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmRcbiAqIEByZXR1cm5zIHtQcm9taXNlPG9iamVjdD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlY3J5cHRGYWJyaWNJZGVudGl0eUJhY2t1cFRvUGF5bG9hZCAoZW5jcnlwdGVkRmlsZSwgcGFzc3dvcmQpIHtcbiAgaWYgKCFlbmNyeXB0ZWRGaWxlIHx8IHR5cGVvZiBlbmNyeXB0ZWRGaWxlICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiYWNrdXAgZmlsZS4nKTtcbiAgfVxuICBpZiAoZW5jcnlwdGVkRmlsZS52ZXJzaW9uICE9PSAyIHx8ICFlbmNyeXB0ZWRGaWxlLmNpcGhlcnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbiBlbmNyeXB0ZWQgRmFicmljIGlkZW50aXR5IGJhY2t1cC4nKTtcbiAgfVxuICBpZiAodHlwZW9mIHBhc3N3b3JkICE9PSAnc3RyaW5nJyB8fCBwYXNzd29yZC5sZW5ndGggPCA4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCYWNrdXAgcGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMuJyk7XG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiBnbG9iYWxUaGlzLmNyeXB0byA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICAhZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2VjdXJlIGJhY2t1cCBkZWNyeXB0aW9uIHJlcXVpcmVzIFdlYiBDcnlwdG8gKEhUVFBTIG9yIGxvY2FsaG9zdCkuJyk7XG4gIH1cbiAgY29uc3Qgc3VidGxlID0gZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlO1xuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG5cbiAgY29uc3Qgc2FsdCA9IGI2NFRvVTgoU3RyaW5nKGVuY3J5cHRlZEZpbGUua2RmPy5zYWx0IHx8ICcnKSk7XG4gIGNvbnN0IGl2ID0gYjY0VG9VOChTdHJpbmcoZW5jcnlwdGVkRmlsZS5pdiB8fCAnJykpO1xuICBjb25zdCByYXdDaXBoZXIgPSBiNjRUb1U4KFN0cmluZyhlbmNyeXB0ZWRGaWxlLmNpcGhlcnRleHQgfHwgJycpKTtcbiAgaWYgKHNhbHQubGVuZ3RoIDwgMTYpIHRocm93IG5ldyBFcnJvcignQmFja3VwIEtERiBzYWx0IGlzIHRvbyBzaG9ydC4nKTtcbiAgaWYgKGl2Lmxlbmd0aCAhPT0gMTIpIHRocm93IG5ldyBFcnJvcignQmFja3VwIEFFUy1HQ00gaXYgbXVzdCBiZSAxMiBieXRlcy4nKTtcbiAgaWYgKCFyYXdDaXBoZXIubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ0JhY2t1cCBjaXBoZXJ0ZXh0IGlzIGVtcHR5LicpO1xuXG4gIGNvbnN0IGJhc2VLZXkgPSBhd2FpdCBzdWJ0bGUuaW1wb3J0S2V5KFxuICAgICdyYXcnLFxuICAgIGVuY29kZXIuZW5jb2RlKHBhc3N3b3JkKSxcbiAgICAnUEJLREYyJyxcbiAgICBmYWxzZSxcbiAgICBbJ2Rlcml2ZUJpdHMnXVxuICApO1xuICBjb25zdCBpdGVyYXRpb25zID0gTnVtYmVyKGVuY3J5cHRlZEZpbGUua2RmPy5pdGVyYXRpb25zIHx8IDIxMDAwMCk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGl0ZXJhdGlvbnMpIHx8IGl0ZXJhdGlvbnMgPCAxMDAwMDAgfHwgaXRlcmF0aW9ucyA+IDEwMDAwMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JhY2t1cCBLREYgaXRlcmF0aW9ucyBhcmUgb3V0IG9mIHJhbmdlLicpO1xuICB9XG4gIGNvbnN0IGJpdHMgPSBhd2FpdCBzdWJ0bGUuZGVyaXZlQml0cyhcbiAgICB7XG4gICAgICBuYW1lOiAnUEJLREYyJyxcbiAgICAgIHNhbHQsXG4gICAgICBpdGVyYXRpb25zLFxuICAgICAgaGFzaDogJ1NIQS0yNTYnXG4gICAgfSxcbiAgICBiYXNlS2V5LFxuICAgIDI1NlxuICApO1xuICBjb25zdCBhZXNLZXkgPSBhd2FpdCBzdWJ0bGUuaW1wb3J0S2V5KFxuICAgICdyYXcnLFxuICAgIGJpdHMsXG4gICAgeyBuYW1lOiAnQUVTLUdDTScsIGxlbmd0aDogMjU2IH0sXG4gICAgZmFsc2UsXG4gICAgWydkZWNyeXB0J11cbiAgKTtcblxuICBjb25zdCBwbGFpbkJ1ZiA9IGF3YWl0IHN1YnRsZS5kZWNyeXB0KHsgbmFtZTogJ0FFUy1HQ00nLCBpdiB9LCBhZXNLZXksIHJhd0NpcGhlcik7XG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgY29uc3QgdGV4dCA9IGRlY29kZXIuZGVjb2RlKHBsYWluQnVmKTtcbiAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlbmNyeXB0RmFicmljSWRlbnRpdHlCYWNrdXBQYXlsb2FkLFxuICBkZWNyeXB0RmFicmljSWRlbnRpdHlCYWNrdXBUb1BheWxvYWRcbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3JlZ2VuZXJhdG9yIiwiZSIsInQiLCJyIiwibiIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJlbmNyeXB0RmFicmljSWRlbnRpdHlCYWNrdXBQYXlsb2FkIiwiX3giLCJfeDIiLCJfZW5jcnlwdEZhYnJpY0lkZW50aXR5QmFja3VwUGF5bG9hZCIsIl9jYWxsZWUiLCJwbGFpbnRleHRQYXlsb2FkIiwicGFzc3dvcmQiLCJzdWJ0bGUiLCJlbmNvZGVyIiwicGxhaW50ZXh0Qnl0ZXMiLCJzYWx0IiwiaXYiLCJiYXNlS2V5IiwiYml0cyIsImFlc0tleSIsImNpcGhlcnRleHQiLCJ1OFRvQjY0IiwiX2NvbnRleHQiLCJfdThUb0IiLCJ1OCIsInMiLCJmb3JFYWNoIiwiYiIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsImJ0b2EiLCJCdWZmZXIiLCJmcm9tIiwidG9TdHJpbmciLCJFcnJvciIsImdsb2JhbFRoaXMiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJUZXh0RW5jb2RlciIsImVuY29kZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJVaW50OEFycmF5IiwiaW1wb3J0S2V5IiwiZGVyaXZlQml0cyIsIm5hbWUiLCJpdGVyYXRpb25zIiwiaGFzaCIsImVuY3J5cHQiLCJ0eXBlIiwidmVyc2lvbiIsImVuY3J5cHRpb24iLCJrZGYiLCJiNjRUb1U4IiwiYjY0IiwiYXRvYiIsImJpbiIsIm91dCIsImNoYXJDb2RlQXQiLCJkZWNyeXB0RmFicmljSWRlbnRpdHlCYWNrdXBUb1BheWxvYWQiLCJfeDMiLCJfeDQiLCJfZGVjcnlwdEZhYnJpY0lkZW50aXR5QmFja3VwVG9QYXlsb2FkIiwiX2NhbGxlZTIiLCJlbmNyeXB0ZWRGaWxlIiwiX2VuY3J5cHRlZEZpbGUka2RmIiwiX2VuY3J5cHRlZEZpbGUka2RmMiIsInJhd0NpcGhlciIsInBsYWluQnVmIiwiZGVjb2RlciIsInRleHQiLCJfY29udGV4dDIiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImRlY3J5cHQiLCJUZXh0RGVjb2RlciIsImRlY29kZSIsInBhcnNlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/fabricIdentityBackupCrypto.js\n\n}")},"./functions/fabricIdentityCapabilities.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _require = __webpack_require__(/*! ./fabricHubLocalIdentity */ \"./functions/fabricHubLocalIdentity.js\"),\n plaintextMasterFromStored = _require.plaintextMasterFromStored;\n\n/**\n * UI / policy hints for what an in-browser Fabric identity can do.\n * @param {object|null} parsed - Raw `fabric.identity.local` JSON (or null).\n * @returns {object}\n */\nfunction describeFabricIdentityCapabilities(parsed) {\n if (!parsed || _typeof(parsed) !== 'object') {\n return {\n scope: 'none',\n hasHdMasterOnDevice: false,\n canSwitchFabricAccount: false,\n canExportFabricAccountSubtreeBackup: false,\n supportsExternalSigningAttachments: false\n };\n }\n var role = parsed.fabricHdRole != null ? String(parsed.fabricHdRole) : '';\n var mode = parsed.fabricIdentityMode != null ? String(parsed.fabricIdentityMode) : 'legacy';\n // Strict storage clears on-disk masters; unlocked session / in-memory snapshots carry masterXprv.\n var hasMaster = !!(String(parsed.masterXprv || '').trim() || plaintextMasterFromStored(parsed));\n var isWatch = role === 'watchAccount';\n var isAccountNode = role === 'accountNode';\n var isAccountMode = mode === 'account';\n return {\n scope: mode,\n fabricHdRole: role || undefined,\n hasHdMasterOnDevice: hasMaster,\n canSwitchFabricAccount: isAccountMode && !isAccountNode && !isWatch && hasMaster && !parsed.passwordProtected,\n canExportFabricAccountSubtreeBackup: isAccountMode && !isWatch && hasMaster && !parsed.passwordProtected,\n supportsExternalSigningAttachments: false\n };\n}\n\n/**\n * Payload encrypted inside fabric-identity-backup v2 files — Fabric account subtree only (no HD master).\n * Caller must supply signing xprv (protocol node m/44'/7778'/n'/0/0).\n */\nfunction buildFabricAccountSubtreeBackupInner(_ref) {\n var fabricAccountIndex = _ref.fabricAccountIndex,\n id = _ref.id,\n xpub = _ref.xpub,\n xprv = _ref.xprv;\n var ai = fabricAccountIndex != null ? Math.floor(Number(fabricAccountIndex)) : 0;\n if (!Number.isFinite(ai) || ai < 0) throw new Error('Invalid Fabric account index.');\n var xv = String(xprv || '').trim();\n if (!xv) throw new Error('Account signing xprv required for account-subtree backup.');\n return {\n type: 'fabric-identity-backup-inner',\n version: 2,\n backupScope: 'fabricAccountSubtree',\n fabricHdRole: 'accountNode',\n fabricAccountIndex: ai,\n id: id != null ? String(id) : undefined,\n xpub: xpub != null ? String(xpub) : undefined,\n xprv: xv\n };\n}\nmodule.exports = {\n describeFabricIdentityCapabilities: describeFabricIdentityCapabilities,\n buildFabricAccountSubtreeBackupInner: buildFabricAccountSubtreeBackupInner\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljSWRlbnRpdHlDYXBhYmlsaXRpZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBQUEsU0FBQUEsUUFBQUMsQ0FBQSxzQ0FBQUQsT0FBQSx3QkFBQUUsTUFBQSx1QkFBQUEsTUFBQSxDQUFBQyxRQUFBLGFBQUFGLENBQUEsa0JBQUFBLENBQUEsZ0JBQUFBLENBQUEsV0FBQUEsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBRCxDQUFBLENBQUFHLFdBQUEsS0FBQUYsTUFBQSxJQUFBRCxDQUFBLEtBQUFDLE1BQUEsQ0FBQUcsU0FBQSxxQkFBQUosQ0FBQSxLQUFBRCxPQUFBLENBQUFDLENBQUE7QUFFYixJQUFBSyxRQUFBLEdBQXNDQyxtQkFBTyxDQUFDLHVFQUEwQixDQUFDO0VBQWpFQyx5QkFBeUIsR0FBQUYsUUFBQSxDQUF6QkUseUJBQXlCOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0Msa0NBQWtDQSxDQUFFQyxNQUFNLEVBQUU7RUFDbkQsSUFBSSxDQUFDQSxNQUFNLElBQUlWLE9BQUEsQ0FBT1UsTUFBTSxNQUFLLFFBQVEsRUFBRTtJQUN6QyxPQUFPO01BQ0xDLEtBQUssRUFBRSxNQUFNO01BQ2JDLG1CQUFtQixFQUFFLEtBQUs7TUFDMUJDLHNCQUFzQixFQUFFLEtBQUs7TUFDN0JDLG1DQUFtQyxFQUFFLEtBQUs7TUFDMUNDLGtDQUFrQyxFQUFFO0lBQ3RDLENBQUM7RUFDSDtFQUNBLElBQU1DLElBQUksR0FBR04sTUFBTSxDQUFDTyxZQUFZLElBQUksSUFBSSxHQUFHQyxNQUFNLENBQUNSLE1BQU0sQ0FBQ08sWUFBWSxDQUFDLEdBQUcsRUFBRTtFQUMzRSxJQUFNRSxJQUFJLEdBQUdULE1BQU0sQ0FBQ1Usa0JBQWtCLElBQUksSUFBSSxHQUFHRixNQUFNLENBQUNSLE1BQU0sQ0FBQ1Usa0JBQWtCLENBQUMsR0FBRyxRQUFRO0VBQzdGO0VBQ0EsSUFBTUMsU0FBUyxHQUFHLENBQUMsRUFDakJILE1BQU0sQ0FBQ1IsTUFBTSxDQUFDWSxVQUFVLElBQUksRUFBRSxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQ3RDZix5QkFBeUIsQ0FBQ0UsTUFBTSxDQUFDLENBQ2xDO0VBQ0QsSUFBTWMsT0FBTyxHQUFHUixJQUFJLEtBQUssY0FBYztFQUN2QyxJQUFNUyxhQUFhLEdBQUdULElBQUksS0FBSyxhQUFhO0VBQzVDLElBQU1VLGFBQWEsR0FBR1AsSUFBSSxLQUFLLFNBQVM7RUFFeEMsT0FBTztJQUNMUixLQUFLLEVBQUVRLElBQUk7SUFDWEYsWUFBWSxFQUFFRCxJQUFJLElBQUlXLFNBQVM7SUFDL0JmLG1CQUFtQixFQUFFUyxTQUFTO0lBQzlCUixzQkFBc0IsRUFDcEJhLGFBQWEsSUFBSSxDQUFDRCxhQUFhLElBQUksQ0FBQ0QsT0FBTyxJQUFJSCxTQUFTLElBQUksQ0FBQ1gsTUFBTSxDQUFDa0IsaUJBQWlCO0lBQ3ZGZCxtQ0FBbUMsRUFDakNZLGFBQWEsSUFBSSxDQUFDRixPQUFPLElBQUlILFNBQVMsSUFBSSxDQUFDWCxNQUFNLENBQUNrQixpQkFBaUI7SUFDckViLGtDQUFrQyxFQUFFO0VBQ3RDLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNjLG9DQUFvQ0EsQ0FBQUMsSUFBQSxFQUsxQztFQUFBLElBSkRDLGtCQUFrQixHQUFBRCxJQUFBLENBQWxCQyxrQkFBa0I7SUFDbEJDLEVBQUUsR0FBQUYsSUFBQSxDQUFGRSxFQUFFO0lBQ0ZDLElBQUksR0FBQUgsSUFBQSxDQUFKRyxJQUFJO0lBQ0pDLElBQUksR0FBQUosSUFBQSxDQUFKSSxJQUFJO0VBRUosSUFBTUMsRUFBRSxHQUFHSixrQkFBa0IsSUFBSSxJQUFJLEdBQUdLLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxNQUFNLENBQUNQLGtCQUFrQixDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ2xGLElBQUksQ0FBQ08sTUFBTSxDQUFDQyxRQUFRLENBQUNKLEVBQUUsQ0FBQyxJQUFJQSxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSUssS0FBSyxDQUFDLCtCQUErQixDQUFDO0VBQ3BGLElBQU1DLEVBQUUsR0FBR3ZCLE1BQU0sQ0FBQ2dCLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQ1gsSUFBSSxDQUFDLENBQUM7RUFDcEMsSUFBSSxDQUFDa0IsRUFBRSxFQUFFLE1BQU0sSUFBSUQsS0FBSyxDQUFDLDJEQUEyRCxDQUFDO0VBQ3JGLE9BQU87SUFDTEUsSUFBSSxFQUFFLDhCQUE4QjtJQUNwQ0MsT0FBTyxFQUFFLENBQUM7SUFDVkMsV0FBVyxFQUFFLHNCQUFzQjtJQUNuQzNCLFlBQVksRUFBRSxhQUFhO0lBQzNCYyxrQkFBa0IsRUFBRUksRUFBRTtJQUN0QkgsRUFBRSxFQUFFQSxFQUFFLElBQUksSUFBSSxHQUFHZCxNQUFNLENBQUNjLEVBQUUsQ0FBQyxHQUFHTCxTQUFTO0lBQ3ZDTSxJQUFJLEVBQUVBLElBQUksSUFBSSxJQUFJLEdBQUdmLE1BQU0sQ0FBQ2UsSUFBSSxDQUFDLEdBQUdOLFNBQVM7SUFDN0NPLElBQUksRUFBRU87RUFDUixDQUFDO0FBQ0g7QUFFQUksTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZnJDLGtDQUFrQyxFQUFsQ0Esa0NBQWtDO0VBQ2xDb0Isb0NBQW9DLEVBQXBDQTtBQUNGLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9mYWJyaWNJZGVudGl0eUNhcGFiaWxpdGllcy5qcz8zNWIxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgeyBwbGFpbnRleHRNYXN0ZXJGcm9tU3RvcmVkIH0gPSByZXF1aXJlKCcuL2ZhYnJpY0h1YkxvY2FsSWRlbnRpdHknKTtcblxuLyoqXG4gKiBVSSAvIHBvbGljeSBoaW50cyBmb3Igd2hhdCBhbiBpbi1icm93c2VyIEZhYnJpYyBpZGVudGl0eSBjYW4gZG8uXG4gKiBAcGFyYW0ge29iamVjdHxudWxsfSBwYXJzZWQgLSBSYXcgYGZhYnJpYy5pZGVudGl0eS5sb2NhbGAgSlNPTiAob3IgbnVsbCkuXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBkZXNjcmliZUZhYnJpY0lkZW50aXR5Q2FwYWJpbGl0aWVzIChwYXJzZWQpIHtcbiAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NvcGU6ICdub25lJyxcbiAgICAgIGhhc0hkTWFzdGVyT25EZXZpY2U6IGZhbHNlLFxuICAgICAgY2FuU3dpdGNoRmFicmljQWNjb3VudDogZmFsc2UsXG4gICAgICBjYW5FeHBvcnRGYWJyaWNBY2NvdW50U3VidHJlZUJhY2t1cDogZmFsc2UsXG4gICAgICBzdXBwb3J0c0V4dGVybmFsU2lnbmluZ0F0dGFjaG1lbnRzOiBmYWxzZVxuICAgIH07XG4gIH1cbiAgY29uc3Qgcm9sZSA9IHBhcnNlZC5mYWJyaWNIZFJvbGUgIT0gbnVsbCA/IFN0cmluZyhwYXJzZWQuZmFicmljSGRSb2xlKSA6ICcnO1xuICBjb25zdCBtb2RlID0gcGFyc2VkLmZhYnJpY0lkZW50aXR5TW9kZSAhPSBudWxsID8gU3RyaW5nKHBhcnNlZC5mYWJyaWNJZGVudGl0eU1vZGUpIDogJ2xlZ2FjeSc7XG4gIC8vIFN0cmljdCBzdG9yYWdlIGNsZWFycyBvbi1kaXNrIG1hc3RlcnM7IHVubG9ja2VkIHNlc3Npb24gLyBpbi1tZW1vcnkgc25hcHNob3RzIGNhcnJ5IG1hc3RlclhwcnYuXG4gIGNvbnN0IGhhc01hc3RlciA9ICEhKFxuICAgIFN0cmluZyhwYXJzZWQubWFzdGVyWHBydiB8fCAnJykudHJpbSgpIHx8XG4gICAgcGxhaW50ZXh0TWFzdGVyRnJvbVN0b3JlZChwYXJzZWQpXG4gICk7XG4gIGNvbnN0IGlzV2F0Y2ggPSByb2xlID09PSAnd2F0Y2hBY2NvdW50JztcbiAgY29uc3QgaXNBY2NvdW50Tm9kZSA9IHJvbGUgPT09ICdhY2NvdW50Tm9kZSc7XG4gIGNvbnN0IGlzQWNjb3VudE1vZGUgPSBtb2RlID09PSAnYWNjb3VudCc7XG5cbiAgcmV0dXJuIHtcbiAgICBzY29wZTogbW9kZSxcbiAgICBmYWJyaWNIZFJvbGU6IHJvbGUgfHwgdW5kZWZpbmVkLFxuICAgIGhhc0hkTWFzdGVyT25EZXZpY2U6IGhhc01hc3RlcixcbiAgICBjYW5Td2l0Y2hGYWJyaWNBY2NvdW50OlxuICAgICAgaXNBY2NvdW50TW9kZSAmJiAhaXNBY2NvdW50Tm9kZSAmJiAhaXNXYXRjaCAmJiBoYXNNYXN0ZXIgJiYgIXBhcnNlZC5wYXNzd29yZFByb3RlY3RlZCxcbiAgICBjYW5FeHBvcnRGYWJyaWNBY2NvdW50U3VidHJlZUJhY2t1cDpcbiAgICAgIGlzQWNjb3VudE1vZGUgJiYgIWlzV2F0Y2ggJiYgaGFzTWFzdGVyICYmICFwYXJzZWQucGFzc3dvcmRQcm90ZWN0ZWQsXG4gICAgc3VwcG9ydHNFeHRlcm5hbFNpZ25pbmdBdHRhY2htZW50czogZmFsc2VcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXlsb2FkIGVuY3J5cHRlZCBpbnNpZGUgZmFicmljLWlkZW50aXR5LWJhY2t1cCB2MiBmaWxlcyDigJQgRmFicmljIGFjY291bnQgc3VidHJlZSBvbmx5IChubyBIRCBtYXN0ZXIpLlxuICogQ2FsbGVyIG11c3Qgc3VwcGx5IHNpZ25pbmcgeHBydiAocHJvdG9jb2wgbm9kZSBtLzQ0Jy83Nzc4Jy9uJy8wLzApLlxuICovXG5mdW5jdGlvbiBidWlsZEZhYnJpY0FjY291bnRTdWJ0cmVlQmFja3VwSW5uZXIgKHtcbiAgZmFicmljQWNjb3VudEluZGV4LFxuICBpZCxcbiAgeHB1YixcbiAgeHBydlxufSkge1xuICBjb25zdCBhaSA9IGZhYnJpY0FjY291bnRJbmRleCAhPSBudWxsID8gTWF0aC5mbG9vcihOdW1iZXIoZmFicmljQWNjb3VudEluZGV4KSkgOiAwO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShhaSkgfHwgYWkgPCAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgRmFicmljIGFjY291bnQgaW5kZXguJyk7XG4gIGNvbnN0IHh2ID0gU3RyaW5nKHhwcnYgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCF4dikgdGhyb3cgbmV3IEVycm9yKCdBY2NvdW50IHNpZ25pbmcgeHBydiByZXF1aXJlZCBmb3IgYWNjb3VudC1zdWJ0cmVlIGJhY2t1cC4nKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnZmFicmljLWlkZW50aXR5LWJhY2t1cC1pbm5lcicsXG4gICAgdmVyc2lvbjogMixcbiAgICBiYWNrdXBTY29wZTogJ2ZhYnJpY0FjY291bnRTdWJ0cmVlJyxcbiAgICBmYWJyaWNIZFJvbGU6ICdhY2NvdW50Tm9kZScsXG4gICAgZmFicmljQWNjb3VudEluZGV4OiBhaSxcbiAgICBpZDogaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWQsXG4gICAgeHB1YjogeHB1YiAhPSBudWxsID8gU3RyaW5nKHhwdWIpIDogdW5kZWZpbmVkLFxuICAgIHhwcnY6IHh2XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBkZXNjcmliZUZhYnJpY0lkZW50aXR5Q2FwYWJpbGl0aWVzLFxuICBidWlsZEZhYnJpY0FjY291bnRTdWJ0cmVlQmFja3VwSW5uZXJcbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3JlcXVpcmUiLCJyZXF1aXJlIiwicGxhaW50ZXh0TWFzdGVyRnJvbVN0b3JlZCIsImRlc2NyaWJlRmFicmljSWRlbnRpdHlDYXBhYmlsaXRpZXMiLCJwYXJzZWQiLCJzY29wZSIsImhhc0hkTWFzdGVyT25EZXZpY2UiLCJjYW5Td2l0Y2hGYWJyaWNBY2NvdW50IiwiY2FuRXhwb3J0RmFicmljQWNjb3VudFN1YnRyZWVCYWNrdXAiLCJzdXBwb3J0c0V4dGVybmFsU2lnbmluZ0F0dGFjaG1lbnRzIiwicm9sZSIsImZhYnJpY0hkUm9sZSIsIlN0cmluZyIsIm1vZGUiLCJmYWJyaWNJZGVudGl0eU1vZGUiLCJoYXNNYXN0ZXIiLCJtYXN0ZXJYcHJ2IiwidHJpbSIsImlzV2F0Y2giLCJpc0FjY291bnROb2RlIiwiaXNBY2NvdW50TW9kZSIsInVuZGVmaW5lZCIsInBhc3N3b3JkUHJvdGVjdGVkIiwiYnVpbGRGYWJyaWNBY2NvdW50U3VidHJlZUJhY2t1cElubmVyIiwiX3JlZiIsImZhYnJpY0FjY291bnRJbmRleCIsImlkIiwieHB1YiIsInhwcnYiLCJhaSIsIk1hdGgiLCJmbG9vciIsIk51bWJlciIsImlzRmluaXRlIiwiRXJyb3IiLCJ4diIsInR5cGUiLCJ2ZXJzaW9uIiwiYmFja3VwU2NvcGUiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/fabricIdentityCapabilities.js\n\n}")},"./functions/fabricIdentityLockPrefs.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ \"./functions/fabricBrowserState.js\"),\n readStorageJSON = _require.readStorageJSON,\n writeStorageJSON = _require.writeStorageJSON;\nvar STORAGE_KEY = 'fabric.identity.lockTimeoutMinutes';\n/** Hub default when unset — matches prior IdentityManager hard-coded 30m. */\nvar DEFAULT_LOCK_TIMEOUT_MINUTES = 30;\nvar MIN_MINUTES = 1;\nvar MAX_MINUTES = 24 * 60;\n\n/**\n * @returns {number} Minutes until auto-lock (0 = disabled).\n */\nfunction readFabricIdentityLockTimeoutMinutes() {\n try {\n var v = readStorageJSON(STORAGE_KEY, null);\n if (v === null || typeof v === 'undefined') return DEFAULT_LOCK_TIMEOUT_MINUTES;\n if (v === '' || v === false) return DEFAULT_LOCK_TIMEOUT_MINUTES;\n var n = Math.floor(Number(v));\n if (!Number.isFinite(n)) return DEFAULT_LOCK_TIMEOUT_MINUTES;\n if (n === 0) return 0;\n return Math.min(MAX_MINUTES, Math.max(MIN_MINUTES, n));\n } catch (e) {\n return DEFAULT_LOCK_TIMEOUT_MINUTES;\n }\n}\n\n/**\n * @param {number} minutes - 0 disables auto-lock; otherwise clamped to [1, 1440].\n * @returns {boolean}\n */\nfunction writeFabricIdentityLockTimeoutMinutes(minutes) {\n var n = Math.floor(Number(minutes));\n if (!Number.isFinite(n)) return false;\n if (n === 0) return writeStorageJSON(STORAGE_KEY, 0);\n var clamped = Math.min(MAX_MINUTES, Math.max(MIN_MINUTES, n));\n return writeStorageJSON(STORAGE_KEY, clamped);\n}\nfunction lockTimeoutMinutesToMs(minutes) {\n if (!minutes || minutes <= 0) return 0;\n return minutes * 60 * 1000;\n}\nmodule.exports = {\n STORAGE_KEY: STORAGE_KEY,\n DEFAULT_LOCK_TIMEOUT_MINUTES: DEFAULT_LOCK_TIMEOUT_MINUTES,\n MIN_LOCK_TIMEOUT_MINUTES: MIN_MINUTES,\n MAX_LOCK_TIMEOUT_MINUTES: MAX_MINUTES,\n readFabricIdentityLockTimeoutMinutes: readFabricIdentityLockTimeoutMinutes,\n writeFabricIdentityLockTimeoutMinutes: writeFabricIdentityLockTimeoutMinutes,\n lockTimeoutMinutesToMs: lockTimeoutMinutesToMs\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljSWRlbnRpdHlMb2NrUHJlZnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBQUEsUUFBQSxHQUE4Q0MsbUJBQU8sQ0FBQywrREFBc0IsQ0FBQztFQUFyRUMsZUFBZSxHQUFBRixRQUFBLENBQWZFLGVBQWU7RUFBRUMsZ0JBQWdCLEdBQUFILFFBQUEsQ0FBaEJHLGdCQUFnQjtBQUV6QyxJQUFNQyxXQUFXLEdBQUcsb0NBQW9DO0FBQ3hEO0FBQ0EsSUFBTUMsNEJBQTRCLEdBQUcsRUFBRTtBQUN2QyxJQUFNQyxXQUFXLEdBQUcsQ0FBQztBQUNyQixJQUFNQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUU7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLG9DQUFvQ0EsQ0FBQSxFQUFJO0VBQy9DLElBQUk7SUFDRixJQUFNQyxDQUFDLEdBQUdQLGVBQWUsQ0FBQ0UsV0FBVyxFQUFFLElBQUksQ0FBQztJQUM1QyxJQUFJSyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU9BLENBQUMsS0FBSyxXQUFXLEVBQUUsT0FBT0osNEJBQTRCO0lBQy9FLElBQUlJLENBQUMsS0FBSyxFQUFFLElBQUlBLENBQUMsS0FBSyxLQUFLLEVBQUUsT0FBT0osNEJBQTRCO0lBQ2hFLElBQU1LLENBQUMsR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNDLE1BQU0sQ0FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDSSxNQUFNLENBQUNDLFFBQVEsQ0FBQ0osQ0FBQyxDQUFDLEVBQUUsT0FBT0wsNEJBQTRCO0lBQzVELElBQUlLLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ3JCLE9BQU9DLElBQUksQ0FBQ0ksR0FBRyxDQUFDUixXQUFXLEVBQUVJLElBQUksQ0FBQ0ssR0FBRyxDQUFDVixXQUFXLEVBQUVJLENBQUMsQ0FBQyxDQUFDO0VBQ3hELENBQUMsQ0FBQyxPQUFPTyxDQUFDLEVBQUU7SUFDVixPQUFPWiw0QkFBNEI7RUFDckM7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNhLHFDQUFxQ0EsQ0FBRUMsT0FBTyxFQUFFO0VBQ3ZELElBQU1ULENBQUMsR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNDLE1BQU0sQ0FBQ00sT0FBTyxDQUFDLENBQUM7RUFDckMsSUFBSSxDQUFDTixNQUFNLENBQUNDLFFBQVEsQ0FBQ0osQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLO0VBQ3JDLElBQUlBLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBT1AsZ0JBQWdCLENBQUNDLFdBQVcsRUFBRSxDQUFDLENBQUM7RUFDcEQsSUFBTWdCLE9BQU8sR0FBR1QsSUFBSSxDQUFDSSxHQUFHLENBQUNSLFdBQVcsRUFBRUksSUFBSSxDQUFDSyxHQUFHLENBQUNWLFdBQVcsRUFBRUksQ0FBQyxDQUFDLENBQUM7RUFDL0QsT0FBT1AsZ0JBQWdCLENBQUNDLFdBQVcsRUFBRWdCLE9BQU8sQ0FBQztBQUMvQztBQUVBLFNBQVNDLHNCQUFzQkEsQ0FBRUYsT0FBTyxFQUFFO0VBQ3hDLElBQUksQ0FBQ0EsT0FBTyxJQUFJQSxPQUFPLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQztFQUN0QyxPQUFPQSxPQUFPLEdBQUcsRUFBRSxHQUFHLElBQUk7QUFDNUI7QUFFQUcsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZm5CLFdBQVcsRUFBWEEsV0FBVztFQUNYQyw0QkFBNEIsRUFBNUJBLDRCQUE0QjtFQUM1Qm1CLHdCQUF3QixFQUFFbEIsV0FBVztFQUNyQ21CLHdCQUF3QixFQUFFbEIsV0FBVztFQUNyQ0Msb0NBQW9DLEVBQXBDQSxvQ0FBb0M7RUFDcENVLHFDQUFxQyxFQUFyQ0EscUNBQXFDO0VBQ3JDRyxzQkFBc0IsRUFBdEJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2ZhYnJpY0lkZW50aXR5TG9ja1ByZWZzLmpzPzVmZTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IHJlYWRTdG9yYWdlSlNPTiwgd3JpdGVTdG9yYWdlSlNPTiB9ID0gcmVxdWlyZSgnLi9mYWJyaWNCcm93c2VyU3RhdGUnKTtcblxuY29uc3QgU1RPUkFHRV9LRVkgPSAnZmFicmljLmlkZW50aXR5LmxvY2tUaW1lb3V0TWludXRlcyc7XG4vKiogSHViIGRlZmF1bHQgd2hlbiB1bnNldCDigJQgbWF0Y2hlcyBwcmlvciBJZGVudGl0eU1hbmFnZXIgaGFyZC1jb2RlZCAzMG0uICovXG5jb25zdCBERUZBVUxUX0xPQ0tfVElNRU9VVF9NSU5VVEVTID0gMzA7XG5jb25zdCBNSU5fTUlOVVRFUyA9IDE7XG5jb25zdCBNQVhfTUlOVVRFUyA9IDI0ICogNjA7XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn0gTWludXRlcyB1bnRpbCBhdXRvLWxvY2sgKDAgPSBkaXNhYmxlZCkuXG4gKi9cbmZ1bmN0aW9uIHJlYWRGYWJyaWNJZGVudGl0eUxvY2tUaW1lb3V0TWludXRlcyAoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgdiA9IHJlYWRTdG9yYWdlSlNPTihTVE9SQUdFX0tFWSwgbnVsbCk7XG4gICAgaWYgKHYgPT09IG51bGwgfHwgdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gREVGQVVMVF9MT0NLX1RJTUVPVVRfTUlOVVRFUztcbiAgICBpZiAodiA9PT0gJycgfHwgdiA9PT0gZmFsc2UpIHJldHVybiBERUZBVUxUX0xPQ0tfVElNRU9VVF9NSU5VVEVTO1xuICAgIGNvbnN0IG4gPSBNYXRoLmZsb29yKE51bWJlcih2KSk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobikpIHJldHVybiBERUZBVUxUX0xPQ0tfVElNRU9VVF9NSU5VVEVTO1xuICAgIGlmIChuID09PSAwKSByZXR1cm4gMDtcbiAgICByZXR1cm4gTWF0aC5taW4oTUFYX01JTlVURVMsIE1hdGgubWF4KE1JTl9NSU5VVEVTLCBuKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gREVGQVVMVF9MT0NLX1RJTUVPVVRfTUlOVVRFUztcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW51dGVzIC0gMCBkaXNhYmxlcyBhdXRvLWxvY2s7IG90aGVyd2lzZSBjbGFtcGVkIHRvIFsxLCAxNDQwXS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB3cml0ZUZhYnJpY0lkZW50aXR5TG9ja1RpbWVvdXRNaW51dGVzIChtaW51dGVzKSB7XG4gIGNvbnN0IG4gPSBNYXRoLmZsb29yKE51bWJlcihtaW51dGVzKSk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG4pKSByZXR1cm4gZmFsc2U7XG4gIGlmIChuID09PSAwKSByZXR1cm4gd3JpdGVTdG9yYWdlSlNPTihTVE9SQUdFX0tFWSwgMCk7XG4gIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1pbihNQVhfTUlOVVRFUywgTWF0aC5tYXgoTUlOX01JTlVURVMsIG4pKTtcbiAgcmV0dXJuIHdyaXRlU3RvcmFnZUpTT04oU1RPUkFHRV9LRVksIGNsYW1wZWQpO1xufVxuXG5mdW5jdGlvbiBsb2NrVGltZW91dE1pbnV0ZXNUb01zIChtaW51dGVzKSB7XG4gIGlmICghbWludXRlcyB8fCBtaW51dGVzIDw9IDApIHJldHVybiAwO1xuICByZXR1cm4gbWludXRlcyAqIDYwICogMTAwMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFNUT1JBR0VfS0VZLFxuICBERUZBVUxUX0xPQ0tfVElNRU9VVF9NSU5VVEVTLFxuICBNSU5fTE9DS19USU1FT1VUX01JTlVURVM6IE1JTl9NSU5VVEVTLFxuICBNQVhfTE9DS19USU1FT1VUX01JTlVURVM6IE1BWF9NSU5VVEVTLFxuICByZWFkRmFicmljSWRlbnRpdHlMb2NrVGltZW91dE1pbnV0ZXMsXG4gIHdyaXRlRmFicmljSWRlbnRpdHlMb2NrVGltZW91dE1pbnV0ZXMsXG4gIGxvY2tUaW1lb3V0TWludXRlc1RvTXNcbn07XG4iXSwibmFtZXMiOlsiX3JlcXVpcmUiLCJyZXF1aXJlIiwicmVhZFN0b3JhZ2VKU09OIiwid3JpdGVTdG9yYWdlSlNPTiIsIlNUT1JBR0VfS0VZIiwiREVGQVVMVF9MT0NLX1RJTUVPVVRfTUlOVVRFUyIsIk1JTl9NSU5VVEVTIiwiTUFYX01JTlVURVMiLCJyZWFkRmFicmljSWRlbnRpdHlMb2NrVGltZW91dE1pbnV0ZXMiLCJ2IiwibiIsIk1hdGgiLCJmbG9vciIsIk51bWJlciIsImlzRmluaXRlIiwibWluIiwibWF4IiwiZSIsIndyaXRlRmFicmljSWRlbnRpdHlMb2NrVGltZW91dE1pbnV0ZXMiLCJtaW51dGVzIiwiY2xhbXBlZCIsImxvY2tUaW1lb3V0TWludXRlc1RvTXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiTUlOX0xPQ0tfVElNRU9VVF9NSU5VVEVTIiwiTUFYX0xPQ0tfVElNRU9VVF9NSU5VVEVTIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/fabricIdentityLockPrefs.js\n\n}")},"./functions/fabricLinkedDevices.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Browser-local linked-device roster + IdentityCrossSign publish/revoke.\n * Pairing remains /device-links; this is the network-visible BIP340 proof.\n */\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nvar Key = __webpack_require__(/*! @fabric/core/types/key */ "./node_modules/@fabric/core/types/key.js");\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ "./functions/fabricBrowserState.js"),\n readStorageJSON = _require.readStorageJSON,\n writeStorageJSON = _require.writeStorageJSON;\nvar _require2 = __webpack_require__(/*! ./identityCrossSignVerify */ "./functions/identityCrossSignVerify.js"),\n signCrossSign = _require2.signCrossSign;\nvar _require3 = __webpack_require__(/*! ./identityCrossSign */ "./functions/identityCrossSign.js"),\n REVOKE_TYPE = _require3.REVOKE_TYPE;\nvar STORAGE_LINKED_DEVICES = \'fabric.linkedDevices\';\nfunction readLinkedDevices() {\n try {\n if (typeof window === \'undefined\') return [];\n var j = readStorageJSON(STORAGE_LINKED_DEVICES, []);\n return Array.isArray(j) ? j : [];\n } catch (e) {\n return [];\n }\n}\nfunction writeLinkedDevices(list) {\n try {\n if (typeof window === \'undefined\') return;\n writeStorageJSON(STORAGE_LINKED_DEVICES, Array.isArray(list) ? list : []);\n } catch (e) {/* ignore */}\n}\nfunction mergeLinkedDevice(entry) {\n try {\n if (typeof window === \'undefined\' || !entry) return;\n var list = readLinkedDevices();\n if (entry.peerFabricId) {\n list = list.filter(function (d) {\n return !(d && d.peerFabricId === entry.peerFabricId);\n });\n } else {\n list = list.filter(function (d) {\n return !(d && d.kind === entry.kind && d.hubOrigin === entry.hubOrigin);\n });\n }\n list.push(entry);\n writeLinkedDevices(list);\n } catch (e) {/* ignore */}\n}\nfunction peerIdOf(device) {\n if (!device || _typeof(device) !== \'object\') return \'\';\n return String(device.peerFabricId || device.pubkey || device.id || device.peerPubkey || \'\');\n}\nfunction removeLinkedDevice(peerFabricId) {\n var id = String(peerFabricId || \'\');\n var next = readLinkedDevices().filter(function (d) {\n return peerIdOf(d) !== id;\n });\n writeLinkedDevices(next);\n return next;\n}\nfunction publishHubIdentityCrossSign(_x, _x2, _x3, _x4) {\n return _publishHubIdentityCrossSign.apply(this, arguments);\n}\nfunction _publishHubIdentityCrossSign() {\n _publishHubIdentityCrossSign = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(key, peerPubkey, nonce, kind) {\n var obj, res, data, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n if (!(!peerPubkey || !nonce)) {\n _context.n = 1;\n break;\n }\n return _context.a(2, {\n ok: false,\n error: \'peerPubkey and nonce required\'\n });\n case 1:\n _context.p = 1;\n obj = signCrossSign(key, {\n peerPubkey: peerPubkey,\n nonce: nonce\n }, kind);\n _context.n = 2;\n return fetch(\'/identity/cross-sign\', {\n method: \'POST\',\n headers: {\n Accept: \'application/json\',\n \'Content-Type\': \'application/json\'\n },\n body: JSON.stringify(obj),\n cache: \'no-store\'\n });\n case 2:\n res = _context.v;\n _context.n = 3;\n return res.json()["catch"](function () {\n return {};\n });\n case 3:\n data = _context.v;\n if (res.ok) {\n _context.n = 4;\n break;\n }\n return _context.a(2, {\n ok: false,\n error: data && data.error || "HTTP ".concat(res.status)\n });\n case 4:\n return _context.a(2, {\n ok: true,\n data: data\n });\n case 5:\n _context.p = 5;\n _t = _context.v;\n return _context.a(2, {\n ok: false,\n error: _t && _t.message ? _t.message : String(_t)\n });\n }\n }, _callee, null, [[1, 5]]);\n }));\n return _publishHubIdentityCrossSign.apply(this, arguments);\n}\nfunction unlockedHubKey() {\n try {\n if (typeof window === \'undefined\' || !window.sessionStorage) return null;\n var unlocked = JSON.parse(window.sessionStorage.getItem(\'fabric.identity.unlocked\') || \'null\');\n if (!unlocked || !unlocked.xprv) return null;\n return new Key({\n xprv: unlocked.xprv\n });\n } catch (_) {\n return null;\n }\n}\n\n/**\n * Publish IdentityCrossSignRevoke then drop the local roster row.\n * @param {object} device linked-device row\n * @param {object} [keyOpt] unlocked Fabric Key (IdentityManager); else session unlock\n */\nfunction revokeLinkedDevice(_x5, _x6) {\n return _revokeLinkedDevice.apply(this, arguments);\n}\nfunction _revokeLinkedDevice() {\n _revokeLinkedDevice = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(device, keyOpt) {\n var peerPubkey, nonce, peerFabricId, key, posted;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n peerPubkey = device && (device.peerPubkey || device.pubkey);\n nonce = device && device.nonce;\n peerFabricId = peerIdOf(device);\n if (!(!nonce || !peerPubkey)) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2, {\n ok: false,\n error: \'No pairing nonce — complete fabric://link again before revoking.\'\n });\n case 1:\n key = keyOpt || unlockedHubKey();\n if (key) {\n _context2.n = 2;\n break;\n }\n return _context2.a(2, {\n ok: false,\n error: \'Unlock your Fabric identity before revoking a device.\'\n });\n case 2:\n _context2.n = 3;\n return publishHubIdentityCrossSign(key, peerPubkey, nonce, REVOKE_TYPE);\n case 3:\n posted = _context2.v;\n if (posted.ok) {\n _context2.n = 4;\n break;\n }\n return _context2.a(2, posted);\n case 4:\n removeLinkedDevice(peerFabricId);\n return _context2.a(2, {\n ok: true\n });\n }\n }, _callee2);\n }));\n return _revokeLinkedDevice.apply(this, arguments);\n}\nmodule.exports = {\n STORAGE_LINKED_DEVICES: STORAGE_LINKED_DEVICES,\n readLinkedDevices: readLinkedDevices,\n writeLinkedDevices: writeLinkedDevices,\n mergeLinkedDevice: mergeLinkedDevice,\n removeLinkedDevice: removeLinkedDevice,\n peerIdOf: peerIdOf,\n publishHubIdentityCrossSign: publishHubIdentityCrossSign,\n unlockedHubKey: unlockedHubKey,\n revokeLinkedDevice: revokeLinkedDevice\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUUsS0FBSztZQUFFQyxLQUFLLEVBQUU7VUFBd0QsQ0FBQztRQUFBO1VBQUEyQixTQUFBLENBQUE3SCxDQUFBO1VBQUEsT0FFakVtRiwyQkFBMkIsQ0FBQ08sR0FBRyxFQUFFVixVQUFVLEVBQUVXLEtBQUssRUFBRWhDLFdBQVcsQ0FBQztRQUFBO1VBQS9FaUUsTUFBTSxHQUFBQyxTQUFBLENBQUE3RyxDQUFBO1VBQUEsSUFDUDRHLE1BQU0sQ0FBQzNCLEVBQUU7WUFBQTRCLFNBQUEsQ0FBQTdILENBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQTZILFNBQUEsQ0FBQTVHLENBQUEsSUFBUzJHLE1BQU07UUFBQTtVQUM3QjNDLGtCQUFrQixDQUFDWCxZQUFZLENBQUM7VUFBQyxPQUFBdUQsU0FBQSxDQUFBNUcsQ0FBQSxJQUMxQjtZQUFFZ0YsRUFBRSxFQUFFO1VBQUssQ0FBQztNQUFBO0lBQUEsR0FBQXlCLFFBQUE7RUFBQSxDQUNwQjtFQUFBLE9BQUFELG1CQUFBLENBQUEzRSxLQUFBLE9BQUFELFNBQUE7QUFBQTtBQUVEaUYsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZm5FLHNCQUFzQixFQUF0QkEsc0JBQXNCO0VBQ3RCQyxpQkFBaUIsRUFBakJBLGlCQUFpQjtFQUNqQkssa0JBQWtCLEVBQWxCQSxrQkFBa0I7RUFDbEJFLGlCQUFpQixFQUFqQkEsaUJBQWlCO0VBQ2pCYSxrQkFBa0IsRUFBbEJBLGtCQUFrQjtFQUNsQk4sUUFBUSxFQUFSQSxRQUFRO0VBQ1JRLDJCQUEyQixFQUEzQkEsMkJBQTJCO0VBQzNCNEIsY0FBYyxFQUFkQSxjQUFjO0VBQ2RPLGtCQUFrQixFQUFsQkE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljTGlua2VkRGV2aWNlcy5qcz83YTUyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBCcm93c2VyLWxvY2FsIGxpbmtlZC1kZXZpY2Ugcm9zdGVyICsgSWRlbnRpdHlDcm9zc1NpZ24gcHVibGlzaC9yZXZva2UuXG4gKiBQYWlyaW5nIHJlbWFpbnMgL2RldmljZS1saW5rczsgdGhpcyBpcyB0aGUgbmV0d29yay12aXNpYmxlIEJJUDM0MCBwcm9vZi5cbiAqL1xuXG5jb25zdCBLZXkgPSByZXF1aXJlKCdAZmFicmljL2NvcmUvdHlwZXMva2V5Jyk7XG5jb25zdCB7XG4gIHJlYWRTdG9yYWdlSlNPTixcbiAgd3JpdGVTdG9yYWdlSlNPTlxufSA9IHJlcXVpcmUoJy4vZmFicmljQnJvd3NlclN0YXRlJyk7XG5jb25zdCB7IHNpZ25Dcm9zc1NpZ24gfSA9IHJlcXVpcmUoJy4vaWRlbnRpdHlDcm9zc1NpZ25WZXJpZnknKTtcbmNvbnN0IHsgUkVWT0tFX1RZUEUgfSA9IHJlcXVpcmUoJy4vaWRlbnRpdHlDcm9zc1NpZ24nKTtcblxuY29uc3QgU1RPUkFHRV9MSU5LRURfREVWSUNFUyA9ICdmYWJyaWMubGlua2VkRGV2aWNlcyc7XG5cbmZ1bmN0aW9uIHJlYWRMaW5rZWREZXZpY2VzICgpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBbXTtcbiAgICBjb25zdCBqID0gcmVhZFN0b3JhZ2VKU09OKFNUT1JBR0VfTElOS0VEX0RFVklDRVMsIFtdKTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShqKSA/IGogOiBbXTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZUxpbmtlZERldmljZXMgKGxpc3QpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICB3cml0ZVN0b3JhZ2VKU09OKFNUT1JBR0VfTElOS0VEX0RFVklDRVMsIEFycmF5LmlzQXJyYXkobGlzdCkgPyBsaXN0IDogW10pO1xuICB9IGNhdGNoIChlKSB7IC8qIGlnbm9yZSAqLyB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlTGlua2VkRGV2aWNlIChlbnRyeSkge1xuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZW50cnkpIHJldHVybjtcbiAgICBsZXQgbGlzdCA9IHJlYWRMaW5rZWREZXZpY2VzKCk7XG4gICAgaWYgKGVudHJ5LnBlZXJGYWJyaWNJZCkge1xuICAgICAgbGlzdCA9IGxpc3QuZmlsdGVyKChkKSA9PiAhKGQgJiYgZC5wZWVyRmFicmljSWQgPT09IGVudHJ5LnBlZXJGYWJyaWNJZCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0ID0gbGlzdC5maWx0ZXIoKGQpID0+ICEoZCAmJiBkLmtpbmQgPT09IGVudHJ5LmtpbmQgJiYgZC5odWJPcmlnaW4gPT09IGVudHJ5Lmh1Yk9yaWdpbikpO1xuICAgIH1cbiAgICBsaXN0LnB1c2goZW50cnkpO1xuICAgIHdyaXRlTGlua2VkRGV2aWNlcyhsaXN0KTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxufVxuXG5mdW5jdGlvbiBwZWVySWRPZiAoZGV2aWNlKSB7XG4gIGlmICghZGV2aWNlIHx8IHR5cGVvZiBkZXZpY2UgIT09ICdvYmplY3QnKSByZXR1cm4gJyc7XG4gIHJldHVybiBTdHJpbmcoZGV2aWNlLnBlZXJGYWJyaWNJZCB8fCBkZXZpY2UucHVia2V5IHx8IGRldmljZS5pZCB8fCBkZXZpY2UucGVlclB1YmtleSB8fCAnJyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUxpbmtlZERldmljZSAocGVlckZhYnJpY0lkKSB7XG4gIGNvbnN0IGlkID0gU3RyaW5nKHBlZXJGYWJyaWNJZCB8fCAnJyk7XG4gIGNvbnN0IG5leHQgPSByZWFkTGlua2VkRGV2aWNlcygpLmZpbHRlcigoZCkgPT4gcGVlcklkT2YoZCkgIT09IGlkKTtcbiAgd3JpdGVMaW5rZWREZXZpY2VzKG5leHQpO1xuICByZXR1cm4gbmV4dDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHVibGlzaEh1YklkZW50aXR5Q3Jvc3NTaWduIChrZXksIHBlZXJQdWJrZXksIG5vbmNlLCBraW5kKSB7XG4gIGlmICghcGVlclB1YmtleSB8fCAhbm9uY2UpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdwZWVyUHVia2V5IGFuZCBub25jZSByZXF1aXJlZCcgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCBvYmogPSBzaWduQ3Jvc3NTaWduKGtleSwgeyBwZWVyUHVia2V5LCBub25jZSB9LCBraW5kKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL2lkZW50aXR5L2Nyb3NzLXNpZ24nLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KG9iaiksXG4gICAgICBjYWNoZTogJ25vLXN0b3JlJ1xuICAgIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgIGlmICghcmVzLm9rKSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAoZGF0YSAmJiBkYXRhLmVycm9yKSB8fCBgSFRUUCAke3Jlcy5zdGF0dXN9YCB9O1xuICAgIH1cbiAgICByZXR1cm4geyBvazogdHJ1ZSwgZGF0YSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogKGUgJiYgZS5tZXNzYWdlKSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHVubG9ja2VkSHViS2V5ICgpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5zZXNzaW9uU3RvcmFnZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgdW5sb2NrZWQgPSBKU09OLnBhcnNlKHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmYWJyaWMuaWRlbnRpdHkudW5sb2NrZWQnKSB8fCAnbnVsbCcpO1xuICAgIGlmICghdW5sb2NrZWQgfHwgIXVubG9ja2VkLnhwcnYpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgS2V5KHsgeHBydjogdW5sb2NrZWQueHBydiB9KTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogUHVibGlzaCBJZGVudGl0eUNyb3NzU2lnblJldm9rZSB0aGVuIGRyb3AgdGhlIGxvY2FsIHJvc3RlciByb3cuXG4gKiBAcGFyYW0ge29iamVjdH0gZGV2aWNlIGxpbmtlZC1kZXZpY2Ugcm93XG4gKiBAcGFyYW0ge29iamVjdH0gW2tleU9wdF0gdW5sb2NrZWQgRmFicmljIEtleSAoSWRlbnRpdHlNYW5hZ2VyKTsgZWxzZSBzZXNzaW9uIHVubG9ja1xuICovXG5hc3luYyBmdW5jdGlvbiByZXZva2VMaW5rZWREZXZpY2UgKGRldmljZSwga2V5T3B0KSB7XG4gIGNvbnN0IHBlZXJQdWJrZXkgPSBkZXZpY2UgJiYgKGRldmljZS5wZWVyUHVia2V5IHx8IGRldmljZS5wdWJrZXkpO1xuICBjb25zdCBub25jZSA9IGRldmljZSAmJiBkZXZpY2Uubm9uY2U7XG4gIGNvbnN0IHBlZXJGYWJyaWNJZCA9IHBlZXJJZE9mKGRldmljZSk7XG4gIGlmICghbm9uY2UgfHwgIXBlZXJQdWJrZXkpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnTm8gcGFpcmluZyBub25jZSDigJQgY29tcGxldGUgZmFicmljOi8vbGluayBhZ2FpbiBiZWZvcmUgcmV2b2tpbmcuJyB9O1xuICB9XG4gIGNvbnN0IGtleSA9IGtleU9wdCB8fCB1bmxvY2tlZEh1YktleSgpO1xuICBpZiAoIWtleSkge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdVbmxvY2sgeW91ciBGYWJyaWMgaWRlbnRpdHkgYmVmb3JlIHJldm9raW5nIGEgZGV2aWNlLicgfTtcbiAgfVxuICBjb25zdCBwb3N0ZWQgPSBhd2FpdCBwdWJsaXNoSHViSWRlbnRpdHlDcm9zc1NpZ24oa2V5LCBwZWVyUHVia2V5LCBub25jZSwgUkVWT0tFX1RZUEUpO1xuICBpZiAoIXBvc3RlZC5vaykgcmV0dXJuIHBvc3RlZDtcbiAgcmVtb3ZlTGlua2VkRGV2aWNlKHBlZXJGYWJyaWNJZCk7XG4gIHJldHVybiB7IG9rOiB0cnVlIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBTVE9SQUdFX0xJTktFRF9ERVZJQ0VTLFxuICByZWFkTGlua2VkRGV2aWNlcyxcbiAgd3JpdGVMaW5rZWREZXZpY2VzLFxuICBtZXJnZUxpbmtlZERldmljZSxcbiAgcmVtb3ZlTGlua2VkRGV2aWNlLFxuICBwZWVySWRPZixcbiAgcHVibGlzaEh1YklkZW50aXR5Q3Jvc3NTaWduLFxuICB1bmxvY2tlZEh1YktleSxcbiAgcmV2b2tlTGlua2VkRGV2aWNlXG59O1xuIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIlN5bWJvbCIsIm4iLCJpdGVyYXRvciIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX3R5cGVvZiIsImNvbnN0cnVjdG9yIiwiS2V5IiwicmVxdWlyZSIsIl9yZXF1aXJlIiwicmVhZFN0b3JhZ2VKU09OIiwid3JpdGVTdG9yYWdlSlNPTiIsIl9yZXF1aXJlMiIsInNpZ25Dcm9zc1NpZ24iLCJfcmVxdWlyZTMiLCJSRVZPS0VfVFlQRSIsIlNUT1JBR0VfTElOS0VEX0RFVklDRVMiLCJyZWFkTGlua2VkRGV2aWNlcyIsIndpbmRvdyIsImoiLCJBcnJheSIsImlzQXJyYXkiLCJ3cml0ZUxpbmtlZERldmljZXMiLCJsaXN0IiwibWVyZ2VMaW5rZWREZXZpY2UiLCJlbnRyeSIsInBlZXJGYWJyaWNJZCIsImZpbHRlciIsImtpbmQiLCJodWJPcmlnaW4iLCJwdXNoIiwicGVlcklkT2YiLCJkZXZpY2UiLCJTdHJpbmciLCJwdWJrZXkiLCJpZCIsInBlZXJQdWJrZXkiLCJyZW1vdmVMaW5rZWREZXZpY2UiLCJuZXh0IiwicHVibGlzaEh1YklkZW50aXR5Q3Jvc3NTaWduIiwiX3giLCJfeDIiLCJfeDMiLCJfeDQiLCJfcHVibGlzaEh1YklkZW50aXR5Q3Jvc3NTaWduIiwiX2NhbGxlZSIsImtleSIsIm5vbmNlIiwib2JqIiwicmVzIiwiZGF0YSIsIl90IiwiX2NvbnRleHQiLCJvayIsImVycm9yIiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjYWNoZSIsImpzb24iLCJjb25jYXQiLCJzdGF0dXMiLCJtZXNzYWdlIiwidW5sb2NrZWRIdWJLZXkiLCJzZXNzaW9uU3RvcmFnZSIsInVubG9ja2VkIiwicGFyc2UiLCJnZXRJdGVtIiwieHBydiIsIl8iLCJyZXZva2VMaW5rZWREZXZpY2UiLCJfeDUiLCJfeDYiLCJfcmV2b2tlTGlua2VkRGV2aWNlIiwiX2NhbGxlZTIiLCJrZXlPcHQiLCJwb3N0ZWQiLCJfY29udGV4dDIiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/fabricLinkedDevices.js\n\n}')},"./functions/fabricMessageEnvelope.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n/**\n * v1 envelope for JSON inside {@link Message} bodies (GenericMessage data).\n * Privacy / Taproot: logical author is `author.hex` (32-byte pubkey hash) when\n * `author.kind` is `taproot_contract_pubkey_hash`; wire `Message.raw.author`\n * remains the signer identity when the Hub builds the message.\n *\n * Encryption: `none` for sign-in and open delegation; `chacha20-poly1305-v1` reserves\n * ciphertext + nonce for privacy-sensitive paths (decrypt outside this module).\n *\n * Multisig: `signers[]` lists parties to notify / threshold (Schnorr MuSig future).\n */\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar Message = __webpack_require__(/*! @fabric/core/types/message */ \"./node_modules/@fabric/core/types/message.js\");\nvar ENVELOPE_KEY = '@fabric/MessageEnvelope';\nvar ENCRYPTION = {\n NONE: 'none',\n CHACHA20_POLY1305_V1: 'chacha20-poly1305-v1'\n};\nvar AUTHOR_KIND = {\n TAPROOT_CONTRACT_PUBKEY_HASH: 'taproot_contract_pubkey_hash',\n IDENTITY_XONLY_PUBKEY: 'identity_xonly_pubkey',\n UNKNOWN: 'unknown'\n};\nvar DEFAULT_SIGN_PROMPT = 'The following would like you to sign the following message:';\nfunction validateEnvelopeV1(e) {\n if (!e || _typeof(e) !== 'object') return {\n ok: false,\n error: 'envelope must be an object'\n };\n var ver = e[ENVELOPE_KEY];\n if (ver !== '1' && ver !== 1) return {\n ok: false,\n error: \"\".concat(ENVELOPE_KEY, \" must be \\\"1\\\"\")\n };\n var enc = e.encryption;\n if (enc !== ENCRYPTION.NONE && enc !== ENCRYPTION.CHACHA20_POLY1305_V1) {\n return {\n ok: false,\n error: \"unsupported encryption: \".concat(enc)\n };\n }\n if (enc === ENCRYPTION.CHACHA20_POLY1305_V1) {\n if (typeof e.ciphertextHex !== 'string' || typeof e.nonceHex !== 'string') {\n return {\n ok: false,\n error: 'encrypted envelope requires ciphertextHex and nonceHex'\n };\n }\n }\n var author = e.author;\n if (!author || _typeof(author) !== 'object') return {\n ok: false,\n error: 'author object required'\n };\n if (typeof author.kind !== 'string' || !author.kind) return {\n ok: false,\n error: 'author.kind required'\n };\n if (typeof author.hex !== 'string' || !/^[0-9a-fA-F]{64}$/.test(author.hex)) {\n return {\n ok: false,\n error: 'author.hex must be 64 hex chars (32 bytes)'\n };\n }\n if (e.signers != null && !Array.isArray(e.signers)) return {\n ok: false,\n error: 'signers must be an array'\n };\n if (Array.isArray(e.signers)) {\n for (var i = 0; i < e.signers.length; i++) {\n var s = e.signers[i];\n if (!s || _typeof(s) !== 'object') return {\n ok: false,\n error: \"signers[\".concat(i, \"] invalid\")\n };\n if (s.pubkeyHashHex != null && typeof s.pubkeyHashHex === 'string' && !/^[0-9a-fA-F]{0,64}$/.test(s.pubkeyHashHex)) {\n return {\n ok: false,\n error: \"signers[\".concat(i, \"].pubkeyHashHex invalid\")\n };\n }\n }\n }\n if (e.display != null && _typeof(e.display) !== 'object') return {\n ok: false,\n error: 'display must be an object'\n };\n return {\n ok: true\n };\n}\n\n/**\n * Build an unsigned {@link Message} whose body is the envelope JSON (encryption `none` only).\n * @param {object} envelope - validated v1 envelope\n */\nfunction buildGenericMessageFromEnvelope(envelope) {\n var v = validateEnvelopeV1(envelope);\n if (!v.ok) throw new Error(v.error);\n if (envelope.encryption !== ENCRYPTION.NONE) {\n throw new Error('buildGenericMessageFromEnvelope requires encryption \"none\" (decrypt first for sealed bodies)');\n }\n return new Message({\n type: 'GenericMessage',\n data: envelope\n });\n}\nmodule.exports = {\n ENVELOPE_KEY: ENVELOPE_KEY,\n ENCRYPTION: ENCRYPTION,\n AUTHOR_KIND: AUTHOR_KIND,\n DEFAULT_SIGN_PROMPT: DEFAULT_SIGN_PROMPT,\n validateEnvelopeV1: validateEnvelopeV1,\n buildGenericMessageFromEnvelope: buildGenericMessageFromEnvelope\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU29CLCtCQUErQkEsQ0FBRUMsUUFBUSxFQUFFO0VBQ2xELElBQU1DLENBQUMsR0FBR3hCLGtCQUFrQixDQUFDdUIsUUFBUSxDQUFDO0VBQ3RDLElBQUksQ0FBQ0MsQ0FBQyxDQUFDdEIsRUFBRSxFQUFFLE1BQU0sSUFBSXVCLEtBQUssQ0FBQ0QsQ0FBQyxDQUFDckIsS0FBSyxDQUFDO0VBQ25DLElBQUlvQixRQUFRLENBQUNoQixVQUFVLEtBQUtmLFVBQVUsQ0FBQ0MsSUFBSSxFQUFFO0lBQzNDLE1BQU0sSUFBSWdDLEtBQUssQ0FBQyw4RkFBOEYsQ0FBQztFQUNqSDtFQUNBLE9BQU8sSUFBSXBDLE9BQU8sQ0FBQztJQUNqQnFDLElBQUksRUFBRSxnQkFBZ0I7SUFDdEJDLElBQUksRUFBRUo7RUFDUixDQUFDLENBQUM7QUFDSjtBQUVBSyxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmdEMsWUFBWSxFQUFaQSxZQUFZO0VBQ1pDLFVBQVUsRUFBVkEsVUFBVTtFQUNWRyxXQUFXLEVBQVhBLFdBQVc7RUFDWEksbUJBQW1CLEVBQW5CQSxtQkFBbUI7RUFDbkJDLGtCQUFrQixFQUFsQkEsa0JBQWtCO0VBQ2xCc0IsK0JBQStCLEVBQS9CQTtBQUNGLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9mYWJyaWNNZXNzYWdlRW52ZWxvcGUuanM/YjkzZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogdjEgZW52ZWxvcGUgZm9yIEpTT04gaW5zaWRlIHtAbGluayBNZXNzYWdlfSBib2RpZXMgKEdlbmVyaWNNZXNzYWdlIGRhdGEpLlxuICogUHJpdmFjeSAvIFRhcHJvb3Q6IGxvZ2ljYWwgYXV0aG9yIGlzIGBhdXRob3IuaGV4YCAoMzItYnl0ZSBwdWJrZXkgaGFzaCkgd2hlblxuICogYGF1dGhvci5raW5kYCBpcyBgdGFwcm9vdF9jb250cmFjdF9wdWJrZXlfaGFzaGA7IHdpcmUgYE1lc3NhZ2UucmF3LmF1dGhvcmBcbiAqIHJlbWFpbnMgdGhlIHNpZ25lciBpZGVudGl0eSB3aGVuIHRoZSBIdWIgYnVpbGRzIHRoZSBtZXNzYWdlLlxuICpcbiAqIEVuY3J5cHRpb246IGBub25lYCBmb3Igc2lnbi1pbiBhbmQgb3BlbiBkZWxlZ2F0aW9uOyBgY2hhY2hhMjAtcG9seTEzMDUtdjFgIHJlc2VydmVzXG4gKiBjaXBoZXJ0ZXh0ICsgbm9uY2UgZm9yIHByaXZhY3ktc2Vuc2l0aXZlIHBhdGhzIChkZWNyeXB0IG91dHNpZGUgdGhpcyBtb2R1bGUpLlxuICpcbiAqIE11bHRpc2lnOiBgc2lnbmVyc1tdYCBsaXN0cyBwYXJ0aWVzIHRvIG5vdGlmeSAvIHRocmVzaG9sZCAoU2Nobm9yciBNdVNpZyBmdXR1cmUpLlxuICovXG5cbmNvbnN0IE1lc3NhZ2UgPSByZXF1aXJlKCdAZmFicmljL2NvcmUvdHlwZXMvbWVzc2FnZScpO1xuXG5jb25zdCBFTlZFTE9QRV9LRVkgPSAnQGZhYnJpYy9NZXNzYWdlRW52ZWxvcGUnO1xuXG5jb25zdCBFTkNSWVBUSU9OID0ge1xuICBOT05FOiAnbm9uZScsXG4gIENIQUNIQTIwX1BPTFkxMzA1X1YxOiAnY2hhY2hhMjAtcG9seTEzMDUtdjEnXG59O1xuXG5jb25zdCBBVVRIT1JfS0lORCA9IHtcbiAgVEFQUk9PVF9DT05UUkFDVF9QVUJLRVlfSEFTSDogJ3RhcHJvb3RfY29udHJhY3RfcHVia2V5X2hhc2gnLFxuICBJREVOVElUWV9YT05MWV9QVUJLRVk6ICdpZGVudGl0eV94b25seV9wdWJrZXknLFxuICBVTktOT1dOOiAndW5rbm93bidcbn07XG5cbmNvbnN0IERFRkFVTFRfU0lHTl9QUk9NUFQgPSAnVGhlIGZvbGxvd2luZyB3b3VsZCBsaWtlIHlvdSB0byBzaWduIHRoZSBmb2xsb3dpbmcgbWVzc2FnZTonO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUVudmVsb3BlVjEgKGUpIHtcbiAgaWYgKCFlIHx8IHR5cGVvZiBlICE9PSAnb2JqZWN0JykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ2VudmVsb3BlIG11c3QgYmUgYW4gb2JqZWN0JyB9O1xuICBjb25zdCB2ZXIgPSBlW0VOVkVMT1BFX0tFWV07XG4gIGlmICh2ZXIgIT09ICcxJyAmJiB2ZXIgIT09IDEpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGAke0VOVkVMT1BFX0tFWX0gbXVzdCBiZSBcIjFcImAgfTtcblxuICBjb25zdCBlbmMgPSBlLmVuY3J5cHRpb247XG4gIGlmIChlbmMgIT09IEVOQ1JZUFRJT04uTk9ORSAmJiBlbmMgIT09IEVOQ1JZUFRJT04uQ0hBQ0hBMjBfUE9MWTEzMDVfVjEpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBgdW5zdXBwb3J0ZWQgZW5jcnlwdGlvbjogJHtlbmN9YCB9O1xuICB9XG4gIGlmIChlbmMgPT09IEVOQ1JZUFRJT04uQ0hBQ0hBMjBfUE9MWTEzMDVfVjEpIHtcbiAgICBpZiAodHlwZW9mIGUuY2lwaGVydGV4dEhleCAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIGUubm9uY2VIZXggIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnZW5jcnlwdGVkIGVudmVsb3BlIHJlcXVpcmVzIGNpcGhlcnRleHRIZXggYW5kIG5vbmNlSGV4JyB9O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGF1dGhvciA9IGUuYXV0aG9yO1xuICBpZiAoIWF1dGhvciB8fCB0eXBlb2YgYXV0aG9yICE9PSAnb2JqZWN0JykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ2F1dGhvciBvYmplY3QgcmVxdWlyZWQnIH07XG4gIGlmICh0eXBlb2YgYXV0aG9yLmtpbmQgIT09ICdzdHJpbmcnIHx8ICFhdXRob3Iua2luZCkgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ2F1dGhvci5raW5kIHJlcXVpcmVkJyB9O1xuICBpZiAodHlwZW9mIGF1dGhvci5oZXggIT09ICdzdHJpbmcnIHx8ICEvXlswLTlhLWZBLUZdezY0fSQvLnRlc3QoYXV0aG9yLmhleCkpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnYXV0aG9yLmhleCBtdXN0IGJlIDY0IGhleCBjaGFycyAoMzIgYnl0ZXMpJyB9O1xuICB9XG5cbiAgaWYgKGUuc2lnbmVycyAhPSBudWxsICYmICFBcnJheS5pc0FycmF5KGUuc2lnbmVycykpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdzaWduZXJzIG11c3QgYmUgYW4gYXJyYXknIH07XG4gIGlmIChBcnJheS5pc0FycmF5KGUuc2lnbmVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGUuc2lnbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcyA9IGUuc2lnbmVyc1tpXTtcbiAgICAgIGlmICghcyB8fCB0eXBlb2YgcyAhPT0gJ29iamVjdCcpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGBzaWduZXJzWyR7aX1dIGludmFsaWRgIH07XG4gICAgICBpZiAocy5wdWJrZXlIYXNoSGV4ICE9IG51bGwgJiYgdHlwZW9mIHMucHVia2V5SGFzaEhleCA9PT0gJ3N0cmluZycgJiYgIS9eWzAtOWEtZkEtRl17MCw2NH0kLy50ZXN0KHMucHVia2V5SGFzaEhleCkpIHtcbiAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogYHNpZ25lcnNbJHtpfV0ucHVia2V5SGFzaEhleCBpbnZhbGlkYCB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlLmRpc3BsYXkgIT0gbnVsbCAmJiB0eXBlb2YgZS5kaXNwbGF5ICE9PSAnb2JqZWN0JykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ2Rpc3BsYXkgbXVzdCBiZSBhbiBvYmplY3QnIH07XG5cbiAgcmV0dXJuIHsgb2s6IHRydWUgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhbiB1bnNpZ25lZCB7QGxpbmsgTWVzc2FnZX0gd2hvc2UgYm9keSBpcyB0aGUgZW52ZWxvcGUgSlNPTiAoZW5jcnlwdGlvbiBgbm9uZWAgb25seSkuXG4gKiBAcGFyYW0ge29iamVjdH0gZW52ZWxvcGUgLSB2YWxpZGF0ZWQgdjEgZW52ZWxvcGVcbiAqL1xuZnVuY3Rpb24gYnVpbGRHZW5lcmljTWVzc2FnZUZyb21FbnZlbG9wZSAoZW52ZWxvcGUpIHtcbiAgY29uc3QgdiA9IHZhbGlkYXRlRW52ZWxvcGVWMShlbnZlbG9wZSk7XG4gIGlmICghdi5vaykgdGhyb3cgbmV3IEVycm9yKHYuZXJyb3IpO1xuICBpZiAoZW52ZWxvcGUuZW5jcnlwdGlvbiAhPT0gRU5DUllQVElPTi5OT05FKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdidWlsZEdlbmVyaWNNZXNzYWdlRnJvbUVudmVsb3BlIHJlcXVpcmVzIGVuY3J5cHRpb24gXCJub25lXCIgKGRlY3J5cHQgZmlyc3QgZm9yIHNlYWxlZCBib2RpZXMpJyk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNZXNzYWdlKHtcbiAgICB0eXBlOiAnR2VuZXJpY01lc3NhZ2UnLFxuICAgIGRhdGE6IGVudmVsb3BlXG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRU5WRUxPUEVfS0VZLFxuICBFTkNSWVBUSU9OLFxuICBBVVRIT1JfS0lORCxcbiAgREVGQVVMVF9TSUdOX1BST01QVCxcbiAgdmFsaWRhdGVFbnZlbG9wZVYxLFxuICBidWlsZEdlbmVyaWNNZXNzYWdlRnJvbUVudmVsb3BlXG59O1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIk1lc3NhZ2UiLCJyZXF1aXJlIiwiRU5WRUxPUEVfS0VZIiwiRU5DUllQVElPTiIsIk5PTkUiLCJDSEFDSEEyMF9QT0xZMTMwNV9WMSIsIkFVVEhPUl9LSU5EIiwiVEFQUk9PVF9DT05UUkFDVF9QVUJLRVlfSEFTSCIsIklERU5USVRZX1hPTkxZX1BVQktFWSIsIlVOS05PV04iLCJERUZBVUxUX1NJR05fUFJPTVBUIiwidmFsaWRhdGVFbnZlbG9wZVYxIiwiZSIsIm9rIiwiZXJyb3IiLCJ2ZXIiLCJjb25jYXQiLCJlbmMiLCJlbmNyeXB0aW9uIiwiY2lwaGVydGV4dEhleCIsIm5vbmNlSGV4IiwiYXV0aG9yIiwia2luZCIsImhleCIsInRlc3QiLCJzaWduZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwiaSIsImxlbmd0aCIsInMiLCJwdWJrZXlIYXNoSGV4IiwiZGlzcGxheSIsImJ1aWxkR2VuZXJpY01lc3NhZ2VGcm9tRW52ZWxvcGUiLCJlbnZlbG9wZSIsInYiLCJFcnJvciIsInR5cGUiLCJkYXRhIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/fabricMessageEnvelope.js\n\n}")},"./functions/fabricMessageRegistry.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n/**\n * Canonical catalog of Fabric **outer** wire types (`Message.type` ↔ numeric opcode).\n *\n * - **Source of truth for opcodes** remains `@fabric/core` (`constants.js` + `types/message.js` `Message.types`).\n * - **`GenericMessage` / `JSONBlob`** are *transitional*: UTF-8 JSON in the message body until a type\n * earns a dedicated opcode and a structured (eventually fully binary) payload layout.\n *\n * @see MESSAGE_TRANSPORT.md\n * @see PAYMENTS_PROTOCOL.md\n * @see ./messageTypes.js — shared constants for domain `type` strings (incl. delegation activity + Fabric log alignment).\n */\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar Stability = Object.freeze({\n stable: 'stable',\n transitional: 'transitional',\n planned: 'planned'\n});\n\n/** How the message `data` / body is encoded today. */\nvar PayloadEncoding = Object.freeze({\n utf8Json: 'utf8-json',\n utf8Text: 'utf8-text',\n structuredBinary: 'structured-binary'\n});\n\n/**\n * Suggested IANA-style block for **future** first-class hub/bridge opcodes in `@fabric/core`\n * (not allocated until reviewed). Do not emit on the wire until registered in `Message.types`.\n */\nvar SUGGESTED_HUB_OPCODE_BLOCK_START = 16200;\nvar SUGGESTED_HUB_OPCODE_BLOCK_END = 16299;\n\n/**\n * Outer AMP types currently registered in Fabric `Message` (string name → opcode decimal).\n * Opcodes MUST stay in sync with `node_modules/@fabric/core/types/message.js` and `constants.js`.\n */\nvar OUTER_WIRE_TYPES = [{\n name: 'JSONCall',\n opcodeDec: 16000,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'Hub/browser JSON-RPC; body { method, params }.'\n}, {\n name: 'JSONPatch',\n opcodeDec: 1024,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'State patch to clients.'\n}, {\n name: 'ChatMessage',\n opcodeDec: 103,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'Chat broadcast (0x67); legacy re-signed relay path.'\n}, {\n name: 'P2P_CHAT_MESSAGE',\n opcodeDec: 104,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'First-class peer chat frame (0x68). Relayed with per-hop re-sign for key-pinning continuity; author carried in body.'\n}, {\n name: 'Ping',\n opcodeDec: 18,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Text,\n notes: 'P2P_PING keepalive.'\n}, {\n name: 'Pong',\n opcodeDec: 19,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Text,\n notes: 'P2P_PONG response.'\n}, {\n name: 'P2P_RELAY',\n opcodeDec: 67,\n stability: Stability.stable,\n encoding: PayloadEncoding.structuredBinary,\n notes: 'Peer mesh flood: body = raw inner Message bytes. Hub↔browser WS may still use JSON { original, originalType, hops }. Not IP-hiding — use P2P_FORWARD.'\n}, {\n name: 'P2P_MESSAGE_RECEIPT',\n opcodeDec: 68,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'Server ack after handling inbound frame.'\n}, {\n name: 'P2P_FORWARD',\n opcodeDec: 69,\n stability: Stability.stable,\n encoding: PayloadEncoding.structuredBinary,\n notes: 'Directed onion hop (0x45): fields nextPeer (bytes32 x-only), ttl (u8), inner (nested Message). TCP Peer / Hub SendOnion only — do not WS-flood.'\n}, {\n name: 'JSONBlob',\n opcodeDec: 15104,\n stability: Stability.transitional,\n encoding: PayloadEncoding.utf8Json,\n notes: 'GENERIC+1; JSON payload, prefer named type when available.'\n}, {\n name: 'GenericMessage',\n opcodeDec: 15103,\n stability: Stability.transitional,\n encoding: PayloadEncoding.utf8Json,\n notes: 'Registered in @fabric/core as GENERIC_MESSAGE (15103); prefer dedicated opcodes when stable.'\n}, {\n name: 'PeerMessage',\n opcodeDec: 49,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'P2P_BASE_MESSAGE; generic peer payload carrier.'\n}, {\n name: 'DocumentPublish',\n opcodeDec: 998,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'Document publish.'\n}, {\n name: 'DocumentRequest',\n opcodeDec: 999,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'Document request.'\n}, {\n name: 'ContractProposal',\n opcodeDec: 138,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'Batched messages + chain Merkle root + JSON Patch (+ optional PSBT); optional `contractId` namespace; see @fabric/core docs/CONTRACT_PROPOSAL.md.'\n}, {\n name: 'CONTRACT_PUBLISH',\n opcodeDec: 95,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'Publishes a contract definition; registers under a deterministic Actor id (contract namespace). Emits contract:publish (0x5f). Alias: P2P_CONTRACT_PUBLISH. See @fabric/core docs/APPLICATION_NAMESPACES.md.'\n}, {\n name: 'CONTRACT_MESSAGE',\n opcodeDec: 96,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'Namespaced contract event; body carries `contract: `. Dispatch routes by namespace (contract:message). State ops apply only to locally registered contracts (0x60). Alias: P2P_CONTRACT_MESSAGE.'\n},\n// Encode aliases (same opcodes) — Message.fromVector accepts these names.\n{\n name: 'P2P_CONTRACT_PUBLISH',\n opcodeDec: 95,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'Alias of CONTRACT_PUBLISH (0x5f).'\n}, {\n name: 'P2P_CONTRACT_MESSAGE',\n opcodeDec: 96,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'Alias of CONTRACT_MESSAGE (0x60).'\n}, {\n name: 'P2P_CONTRACT_PROPOSAL',\n opcodeDec: 138,\n stability: Stability.stable,\n encoding: PayloadEncoding.utf8Json,\n notes: 'Alias of ContractProposal / CONTRACT_PROPOSAL (0x8a).'\n}];\n\n/**\n * Shared CONTRACT_MESSAGE body `type` strings (application namespaces).\n * Prefer `@fabric/core/functions/applicationNamespaces`; Hub metadata rows\n * annotate which apps use each type.\n */\nvar APPLICATION_CONTRACT_BODY_META = Object.freeze({\n FederationContractInvite: {\n apps: ['hub', 'application'],\n notes: 'Hub-shaped join / co-signer invite (v2 + proposedPolicy).'\n },\n FederationContractInviteResponse: {\n apps: ['hub', 'application'],\n notes: 'Accept / reject invite.'\n },\n MissionCreated: {\n apps: ['application'],\n notes: 'Network mission register upsert (application genesis).'\n },\n MissionBroadcast: {\n apps: ['application'],\n notes: 'Network mission offer.'\n },\n SCEventBatch: {\n apps: ['application'],\n notes: 'Log / event batch.'\n },\n GameStateSnapshot: {\n apps: ['hub', 'application'],\n notes: 'Cumulative analytics snapshot for Hub / Beacon seal.'\n },\n GroupChat: {\n apps: ['application'],\n notes: 'Group Federation channel chat.'\n },\n GroupChange: {\n apps: ['application'],\n notes: 'Group membership / meta change.'\n },\n GroupShare: {\n apps: ['application'],\n notes: 'Group-scoped share (e.g. mission offer).'\n }\n});\nfunction buildApplicationContractBodyTypes() {\n var bodyTypes = null;\n try {\n bodyTypes = (__webpack_require__(/*! @fabric/core/functions/applicationNamespaces */ \"./node_modules/@fabric/core/functions/applicationNamespaces.js\").CONTRACT_BODY_TYPES);\n } catch (_) {\n bodyTypes = null;\n }\n // Merge core shared types with Hub/app meta (MissionBroadcast, etc.).\n var keys = bodyTypes ? _toConsumableArray(new Set([].concat(_toConsumableArray(Object.keys(bodyTypes)), _toConsumableArray(Object.keys(APPLICATION_CONTRACT_BODY_META))))) : Object.keys(APPLICATION_CONTRACT_BODY_META);\n return keys.map(function (type) {\n var meta = APPLICATION_CONTRACT_BODY_META[type] || {\n apps: [],\n notes: ''\n };\n return {\n type: type,\n apps: meta.apps || [],\n notes: meta.notes || ''\n };\n });\n}\nvar APPLICATION_CONTRACT_BODY_TYPES = buildApplicationContractBodyTypes();\n\n/**\n * **Inner** domain payloads often carried today inside `GenericMessage` UTF-8 JSON (ActivityStreams-style `type` field).\n * These should graduate to **outer** `Message.type` values (+ opcode in `Message.types`) with versioned binary layouts.\n */\nvar INNER_DOMAIN_PENDING_PROMOTION = [{\n innerType: 'INVENTORY_REQUEST',\n typicalCarrier: 'GenericMessage JSON body',\n stability: Stability.planned\n}, {\n innerType: 'INVENTORY_RESPONSE',\n typicalCarrier: 'GenericMessage JSON body',\n stability: Stability.planned\n}, {\n innerType: 'FABRIC_DOCUMENT_OFFER',\n typicalCarrier: 'GenericMessage JSON body',\n stability: Stability.planned,\n notes: 'Canonical document-offer request; aliases INVENTORY_REQUEST on wire (@fabric/core).'\n}, {\n innerType: 'FABRIC_DOCUMENT_OFFER_RESPONSE',\n typicalCarrier: 'GenericMessage JSON body',\n stability: Stability.planned,\n notes: 'Canonical document-offer reply; aliases INVENTORY_RESPONSE on wire (@fabric/core).'\n}, {\n innerType: 'P2P_FILE_SEND',\n typicalCarrier: 'Peer P2P / GenericMessage fanout',\n stability: Stability.stable\n}, {\n innerType: 'P2P_PEER_GOSSIP',\n typicalCarrier: 'GenericMessage / P2P_RELAY',\n stability: Stability.stable\n}, {\n innerType: 'P2P_PEERING_OFFER',\n typicalCarrier: 'GenericMessage / P2P_RELAY',\n stability: Stability.stable\n}, {\n innerType: 'Tombstone',\n typicalCarrier: 'GenericMessage (hub broadcast) + Fabric log type',\n stability: Stability.stable,\n notes: 'Hub `EmitTombstone`; object carries activityMessageId and/or documentId.'\n}, {\n innerType: 'WebRTCSignal',\n typicalCarrier: 'JSONCall result payload',\n stability: Stability.transitional,\n notes: 'Could become dedicated outer type for fanout.'\n}, {\n innerType: 'DELEGATION_SIGNATURE_REQUEST',\n typicalCarrier: 'Hub fabric message log (collections.messages)',\n stability: Stability.stable,\n notes: 'Browser asks Hub identity to sign; desktop resolves via ResolveDelegationSignatureMessage.'\n}, {\n innerType: 'DELEGATION_SIGNATURE_RESOLUTION',\n typicalCarrier: 'Hub fabric message log',\n stability: Stability.stable,\n notes: 'Approved/rejected; references parentMessageId.'\n}];\nfunction outerTypeNames() {\n // Unique names only (aliases share opcodes with canonical rows).\n return _toConsumableArray(new Set(OUTER_WIRE_TYPES.map(function (t) {\n return t.name;\n })));\n}\nfunction findOuterByName(name) {\n var n = String(name || '').trim();\n return OUTER_WIRE_TYPES.find(function (t) {\n return t.name === n;\n }) || null;\n}\nfunction findOuterByOpcodeDec(opcode) {\n var n = Number(opcode);\n if (!Number.isFinite(n)) return null;\n return OUTER_WIRE_TYPES.find(function (t) {\n return t.opcodeDec === n;\n }) || null;\n}\nmodule.exports = {\n Stability: Stability,\n PayloadEncoding: PayloadEncoding,\n SUGGESTED_HUB_OPCODE_BLOCK_START: SUGGESTED_HUB_OPCODE_BLOCK_START,\n SUGGESTED_HUB_OPCODE_BLOCK_END: SUGGESTED_HUB_OPCODE_BLOCK_END,\n OUTER_WIRE_TYPES: OUTER_WIRE_TYPES,\n APPLICATION_CONTRACT_BODY_TYPES: APPLICATION_CONTRACT_BODY_TYPES,\n INNER_DOMAIN_PENDING_PROMOTION: INNER_DOMAIN_PENDING_PROMOTION,\n outerTypeNames: outerTypeNames,\n findOuterByName: findOuterByName,\n findOuterByOpcodeDec: findOuterByOpcodeDec\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUEsU0FBU3NELGVBQWVBLENBQUV0RCxJQUFJLEVBQUU7RUFDOUIsSUFBTVMsQ0FBQyxHQUFHOEMsTUFBTSxDQUFDdkQsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDd0QsSUFBSSxDQUFDLENBQUM7RUFDbkMsT0FBT2xDLGdCQUFnQixDQUFDbUMsSUFBSSxDQUFDLFVBQUM5RCxDQUFDO0lBQUEsT0FBS0EsQ0FBQyxDQUFDSyxJQUFJLEtBQUtTLENBQUM7RUFBQSxFQUFDLElBQUksSUFBSTtBQUMzRDtBQUVBLFNBQVNpRCxvQkFBb0JBLENBQUVDLE1BQU0sRUFBRTtFQUNyQyxJQUFNbEQsQ0FBQyxHQUFHbUQsTUFBTSxDQUFDRCxNQUFNLENBQUM7RUFDeEIsSUFBSSxDQUFDQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ3BELENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSTtFQUNwQyxPQUFPYSxnQkFBZ0IsQ0FBQ21DLElBQUksQ0FBQyxVQUFDOUQsQ0FBQztJQUFBLE9BQUtBLENBQUMsQ0FBQzRCLFNBQVMsS0FBS2QsQ0FBQztFQUFBLEVBQUMsSUFBSSxJQUFJO0FBQ2hFO0FBRUFxRCxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmckQsU0FBUyxFQUFUQSxTQUFTO0VBQ1RNLGVBQWUsRUFBZkEsZUFBZTtFQUNmSSxnQ0FBZ0MsRUFBaENBLGdDQUFnQztFQUNoQ0MsOEJBQThCLEVBQTlCQSw4QkFBOEI7RUFDOUJDLGdCQUFnQixFQUFoQkEsZ0JBQWdCO0VBQ2hCMkIsK0JBQStCLEVBQS9CQSwrQkFBK0I7RUFDL0JDLDhCQUE4QixFQUE5QkEsOEJBQThCO0VBQzlCRyxjQUFjLEVBQWRBLGNBQWM7RUFDZEMsZUFBZSxFQUFmQSxlQUFlO0VBQ2ZJLG9CQUFvQixFQUFwQkE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljTWVzc2FnZVJlZ2lzdHJ5LmpzPzc5NzciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbm9uaWNhbCBjYXRhbG9nIG9mIEZhYnJpYyAqKm91dGVyKiogd2lyZSB0eXBlcyAoYE1lc3NhZ2UudHlwZWAg4oaUIG51bWVyaWMgb3Bjb2RlKS5cbiAqXG4gKiAtICoqU291cmNlIG9mIHRydXRoIGZvciBvcGNvZGVzKiogcmVtYWlucyBgQGZhYnJpYy9jb3JlYCAoYGNvbnN0YW50cy5qc2AgKyBgdHlwZXMvbWVzc2FnZS5qc2AgYE1lc3NhZ2UudHlwZXNgKS5cbiAqIC0gKipgR2VuZXJpY01lc3NhZ2VgIC8gYEpTT05CbG9iYCoqIGFyZSAqdHJhbnNpdGlvbmFsKjogVVRGLTggSlNPTiBpbiB0aGUgbWVzc2FnZSBib2R5IHVudGlsIGEgdHlwZVxuICogICBlYXJucyBhIGRlZGljYXRlZCBvcGNvZGUgYW5kIGEgc3RydWN0dXJlZCAoZXZlbnR1YWxseSBmdWxseSBiaW5hcnkpIHBheWxvYWQgbGF5b3V0LlxuICpcbiAqIEBzZWUgTUVTU0FHRV9UUkFOU1BPUlQubWRcbiAqIEBzZWUgUEFZTUVOVFNfUFJPVE9DT0wubWRcbiAqIEBzZWUgLi9tZXNzYWdlVHlwZXMuanMg4oCUIHNoYXJlZCBjb25zdGFudHMgZm9yIGRvbWFpbiBgdHlwZWAgc3RyaW5ncyAoaW5jbC4gZGVsZWdhdGlvbiBhY3Rpdml0eSArIEZhYnJpYyBsb2cgYWxpZ25tZW50KS5cbiAqL1xuXG5jb25zdCBTdGFiaWxpdHkgPSBPYmplY3QuZnJlZXplKHtcbiAgc3RhYmxlOiAnc3RhYmxlJyxcbiAgdHJhbnNpdGlvbmFsOiAndHJhbnNpdGlvbmFsJyxcbiAgcGxhbm5lZDogJ3BsYW5uZWQnXG59KTtcblxuLyoqIEhvdyB0aGUgbWVzc2FnZSBgZGF0YWAgLyBib2R5IGlzIGVuY29kZWQgdG9kYXkuICovXG5jb25zdCBQYXlsb2FkRW5jb2RpbmcgPSBPYmplY3QuZnJlZXplKHtcbiAgdXRmOEpzb246ICd1dGY4LWpzb24nLFxuICB1dGY4VGV4dDogJ3V0ZjgtdGV4dCcsXG4gIHN0cnVjdHVyZWRCaW5hcnk6ICdzdHJ1Y3R1cmVkLWJpbmFyeSdcbn0pO1xuXG4vKipcbiAqIFN1Z2dlc3RlZCBJQU5BLXN0eWxlIGJsb2NrIGZvciAqKmZ1dHVyZSoqIGZpcnN0LWNsYXNzIGh1Yi9icmlkZ2Ugb3Bjb2RlcyBpbiBgQGZhYnJpYy9jb3JlYFxuICogKG5vdCBhbGxvY2F0ZWQgdW50aWwgcmV2aWV3ZWQpLiBEbyBub3QgZW1pdCBvbiB0aGUgd2lyZSB1bnRpbCByZWdpc3RlcmVkIGluIGBNZXNzYWdlLnR5cGVzYC5cbiAqL1xuY29uc3QgU1VHR0VTVEVEX0hVQl9PUENPREVfQkxPQ0tfU1RBUlQgPSAxNjIwMDtcbmNvbnN0IFNVR0dFU1RFRF9IVUJfT1BDT0RFX0JMT0NLX0VORCA9IDE2Mjk5O1xuXG4vKipcbiAqIE91dGVyIEFNUCB0eXBlcyBjdXJyZW50bHkgcmVnaXN0ZXJlZCBpbiBGYWJyaWMgYE1lc3NhZ2VgIChzdHJpbmcgbmFtZSDihpIgb3Bjb2RlIGRlY2ltYWwpLlxuICogT3Bjb2RlcyBNVVNUIHN0YXkgaW4gc3luYyB3aXRoIGBub2RlX21vZHVsZXMvQGZhYnJpYy9jb3JlL3R5cGVzL21lc3NhZ2UuanNgIGFuZCBgY29uc3RhbnRzLmpzYC5cbiAqL1xuY29uc3QgT1VURVJfV0lSRV9UWVBFUyA9IFtcbiAgeyBuYW1lOiAnSlNPTkNhbGwnLCBvcGNvZGVEZWM6IDE2MDAwLCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIGVuY29kaW5nOiBQYXlsb2FkRW5jb2RpbmcudXRmOEpzb24sIG5vdGVzOiAnSHViL2Jyb3dzZXIgSlNPTi1SUEM7IGJvZHkgeyBtZXRob2QsIHBhcmFtcyB9LicgfSxcbiAgeyBuYW1lOiAnSlNPTlBhdGNoJywgb3Bjb2RlRGVjOiAxMDI0LCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIGVuY29kaW5nOiBQYXlsb2FkRW5jb2RpbmcudXRmOEpzb24sIG5vdGVzOiAnU3RhdGUgcGF0Y2ggdG8gY2xpZW50cy4nIH0sXG4gIHsgbmFtZTogJ0NoYXRNZXNzYWdlJywgb3Bjb2RlRGVjOiAxMDMsIHN0YWJpbGl0eTogU3RhYmlsaXR5LnN0YWJsZSwgZW5jb2Rpbmc6IFBheWxvYWRFbmNvZGluZy51dGY4SnNvbiwgbm90ZXM6ICdDaGF0IGJyb2FkY2FzdCAoMHg2Nyk7IGxlZ2FjeSByZS1zaWduZWQgcmVsYXkgcGF0aC4nIH0sXG4gIHsgbmFtZTogJ1AyUF9DSEFUX01FU1NBR0UnLCBvcGNvZGVEZWM6IDEwNCwgc3RhYmlsaXR5OiBTdGFiaWxpdHkuc3RhYmxlLCBlbmNvZGluZzogUGF5bG9hZEVuY29kaW5nLnV0ZjhKc29uLCBub3RlczogJ0ZpcnN0LWNsYXNzIHBlZXIgY2hhdCBmcmFtZSAoMHg2OCkuIFJlbGF5ZWQgd2l0aCBwZXItaG9wIHJlLXNpZ24gZm9yIGtleS1waW5uaW5nIGNvbnRpbnVpdHk7IGF1dGhvciBjYXJyaWVkIGluIGJvZHkuJyB9LFxuICB7IG5hbWU6ICdQaW5nJywgb3Bjb2RlRGVjOiAxOCwgc3RhYmlsaXR5OiBTdGFiaWxpdHkuc3RhYmxlLCBlbmNvZGluZzogUGF5bG9hZEVuY29kaW5nLnV0ZjhUZXh0LCBub3RlczogJ1AyUF9QSU5HIGtlZXBhbGl2ZS4nIH0sXG4gIHsgbmFtZTogJ1BvbmcnLCBvcGNvZGVEZWM6IDE5LCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIGVuY29kaW5nOiBQYXlsb2FkRW5jb2RpbmcudXRmOFRleHQsIG5vdGVzOiAnUDJQX1BPTkcgcmVzcG9uc2UuJyB9LFxuICB7IG5hbWU6ICdQMlBfUkVMQVknLCBvcGNvZGVEZWM6IDY3LCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIGVuY29kaW5nOiBQYXlsb2FkRW5jb2Rpbmcuc3RydWN0dXJlZEJpbmFyeSwgbm90ZXM6ICdQZWVyIG1lc2ggZmxvb2Q6IGJvZHkgPSByYXcgaW5uZXIgTWVzc2FnZSBieXRlcy4gSHVi4oaUYnJvd3NlciBXUyBtYXkgc3RpbGwgdXNlIEpTT04geyBvcmlnaW5hbCwgb3JpZ2luYWxUeXBlLCBob3BzIH0uIE5vdCBJUC1oaWRpbmcg4oCUIHVzZSBQMlBfRk9SV0FSRC4nIH0sXG4gIHsgbmFtZTogJ1AyUF9NRVNTQUdFX1JFQ0VJUFQnLCBvcGNvZGVEZWM6IDY4LCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIGVuY29kaW5nOiBQYXlsb2FkRW5jb2RpbmcudXRmOEpzb24sIG5vdGVzOiAnU2VydmVyIGFjayBhZnRlciBoYW5kbGluZyBpbmJvdW5kIGZyYW1lLicgfSxcbiAgeyBuYW1lOiAnUDJQX0ZPUldBUkQnLCBvcGNvZGVEZWM6IDY5LCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIGVuY29kaW5nOiBQYXlsb2FkRW5jb2Rpbmcuc3RydWN0dXJlZEJpbmFyeSwgbm90ZXM6ICdEaXJlY3RlZCBvbmlvbiBob3AgKDB4NDUpOiBmaWVsZHMgbmV4dFBlZXIgKGJ5dGVzMzIgeC1vbmx5KSwgdHRsICh1OCksIGlubmVyIChuZXN0ZWQgTWVzc2FnZSkuIFRDUCBQZWVyIC8gSHViIFNlbmRPbmlvbiBvbmx5IOKAlCBkbyBub3QgV1MtZmxvb2QuJyB9LFxuICB7IG5hbWU6ICdKU09OQmxvYicsIG9wY29kZURlYzogMTUxMDQsIHN0YWJpbGl0eTogU3RhYmlsaXR5LnRyYW5zaXRpb25hbCwgZW5jb2Rpbmc6IFBheWxvYWRFbmNvZGluZy51dGY4SnNvbiwgbm90ZXM6ICdHRU5FUklDKzE7IEpTT04gcGF5bG9hZCwgcHJlZmVyIG5hbWVkIHR5cGUgd2hlbiBhdmFpbGFibGUuJyB9LFxuICB7IG5hbWU6ICdHZW5lcmljTWVzc2FnZScsIG9wY29kZURlYzogMTUxMDMsIHN0YWJpbGl0eTogU3RhYmlsaXR5LnRyYW5zaXRpb25hbCwgZW5jb2Rpbmc6IFBheWxvYWRFbmNvZGluZy51dGY4SnNvbiwgbm90ZXM6ICdSZWdpc3RlcmVkIGluIEBmYWJyaWMvY29yZSBhcyBHRU5FUklDX01FU1NBR0UgKDE1MTAzKTsgcHJlZmVyIGRlZGljYXRlZCBvcGNvZGVzIHdoZW4gc3RhYmxlLicgfSxcbiAgeyBuYW1lOiAnUGVlck1lc3NhZ2UnLCBvcGNvZGVEZWM6IDQ5LCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIGVuY29kaW5nOiBQYXlsb2FkRW5jb2RpbmcudXRmOEpzb24sIG5vdGVzOiAnUDJQX0JBU0VfTUVTU0FHRTsgZ2VuZXJpYyBwZWVyIHBheWxvYWQgY2Fycmllci4nIH0sXG4gIHsgbmFtZTogJ0RvY3VtZW50UHVibGlzaCcsIG9wY29kZURlYzogOTk4LCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIGVuY29kaW5nOiBQYXlsb2FkRW5jb2RpbmcudXRmOEpzb24sIG5vdGVzOiAnRG9jdW1lbnQgcHVibGlzaC4nIH0sXG4gIHsgbmFtZTogJ0RvY3VtZW50UmVxdWVzdCcsIG9wY29kZURlYzogOTk5LCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIGVuY29kaW5nOiBQYXlsb2FkRW5jb2RpbmcudXRmOEpzb24sIG5vdGVzOiAnRG9jdW1lbnQgcmVxdWVzdC4nIH0sXG4gIHsgbmFtZTogJ0NvbnRyYWN0UHJvcG9zYWwnLCBvcGNvZGVEZWM6IDEzOCwgc3RhYmlsaXR5OiBTdGFiaWxpdHkuc3RhYmxlLCBlbmNvZGluZzogUGF5bG9hZEVuY29kaW5nLnV0ZjhKc29uLCBub3RlczogJ0JhdGNoZWQgbWVzc2FnZXMgKyBjaGFpbiBNZXJrbGUgcm9vdCArIEpTT04gUGF0Y2ggKCsgb3B0aW9uYWwgUFNCVCk7IG9wdGlvbmFsIGBjb250cmFjdElkYCBuYW1lc3BhY2U7IHNlZSBAZmFicmljL2NvcmUgZG9jcy9DT05UUkFDVF9QUk9QT1NBTC5tZC4nIH0sXG4gIHsgbmFtZTogJ0NPTlRSQUNUX1BVQkxJU0gnLCBvcGNvZGVEZWM6IDk1LCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIGVuY29kaW5nOiBQYXlsb2FkRW5jb2RpbmcudXRmOEpzb24sIG5vdGVzOiAnUHVibGlzaGVzIGEgY29udHJhY3QgZGVmaW5pdGlvbjsgcmVnaXN0ZXJzIHVuZGVyIGEgZGV0ZXJtaW5pc3RpYyBBY3RvciBpZCAoY29udHJhY3QgbmFtZXNwYWNlKS4gRW1pdHMgY29udHJhY3Q6cHVibGlzaCAoMHg1ZikuIEFsaWFzOiBQMlBfQ09OVFJBQ1RfUFVCTElTSC4gU2VlIEBmYWJyaWMvY29yZSBkb2NzL0FQUExJQ0FUSU9OX05BTUVTUEFDRVMubWQuJyB9LFxuICB7IG5hbWU6ICdDT05UUkFDVF9NRVNTQUdFJywgb3Bjb2RlRGVjOiA5Niwgc3RhYmlsaXR5OiBTdGFiaWxpdHkuc3RhYmxlLCBlbmNvZGluZzogUGF5bG9hZEVuY29kaW5nLnV0ZjhKc29uLCBub3RlczogJ05hbWVzcGFjZWQgY29udHJhY3QgZXZlbnQ7IGJvZHkgY2FycmllcyBgY29udHJhY3Q6IDxpZD5gLiBEaXNwYXRjaCByb3V0ZXMgYnkgbmFtZXNwYWNlIChjb250cmFjdDptZXNzYWdlKS4gU3RhdGUgb3BzIGFwcGx5IG9ubHkgdG8gbG9jYWxseSByZWdpc3RlcmVkIGNvbnRyYWN0cyAoMHg2MCkuIEFsaWFzOiBQMlBfQ09OVFJBQ1RfTUVTU0FHRS4nIH0sXG4gIC8vIEVuY29kZSBhbGlhc2VzIChzYW1lIG9wY29kZXMpIOKAlCBNZXNzYWdlLmZyb21WZWN0b3IgYWNjZXB0cyB0aGVzZSBuYW1lcy5cbiAgeyBuYW1lOiAnUDJQX0NPTlRSQUNUX1BVQkxJU0gnLCBvcGNvZGVEZWM6IDk1LCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIGVuY29kaW5nOiBQYXlsb2FkRW5jb2RpbmcudXRmOEpzb24sIG5vdGVzOiAnQWxpYXMgb2YgQ09OVFJBQ1RfUFVCTElTSCAoMHg1ZikuJyB9LFxuICB7IG5hbWU6ICdQMlBfQ09OVFJBQ1RfTUVTU0FHRScsIG9wY29kZURlYzogOTYsIHN0YWJpbGl0eTogU3RhYmlsaXR5LnN0YWJsZSwgZW5jb2Rpbmc6IFBheWxvYWRFbmNvZGluZy51dGY4SnNvbiwgbm90ZXM6ICdBbGlhcyBvZiBDT05UUkFDVF9NRVNTQUdFICgweDYwKS4nIH0sXG4gIHsgbmFtZTogJ1AyUF9DT05UUkFDVF9QUk9QT1NBTCcsIG9wY29kZURlYzogMTM4LCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIGVuY29kaW5nOiBQYXlsb2FkRW5jb2RpbmcudXRmOEpzb24sIG5vdGVzOiAnQWxpYXMgb2YgQ29udHJhY3RQcm9wb3NhbCAvIENPTlRSQUNUX1BST1BPU0FMICgweDhhKS4nIH1cbl07XG5cbi8qKlxuICogU2hhcmVkIENPTlRSQUNUX01FU1NBR0UgYm9keSBgdHlwZWAgc3RyaW5ncyAoYXBwbGljYXRpb24gbmFtZXNwYWNlcykuXG4gKiBQcmVmZXIgYEBmYWJyaWMvY29yZS9mdW5jdGlvbnMvYXBwbGljYXRpb25OYW1lc3BhY2VzYDsgSHViIG1ldGFkYXRhIHJvd3NcbiAqIGFubm90YXRlIHdoaWNoIGFwcHMgdXNlIGVhY2ggdHlwZS5cbiAqL1xuY29uc3QgQVBQTElDQVRJT05fQ09OVFJBQ1RfQk9EWV9NRVRBID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEZlZGVyYXRpb25Db250cmFjdEludml0ZTogeyBhcHBzOiBbJ2h1YicsICdhcHBsaWNhdGlvbiddLCBub3RlczogJ0h1Yi1zaGFwZWQgam9pbiAvIGNvLXNpZ25lciBpbnZpdGUgKHYyICsgcHJvcG9zZWRQb2xpY3kpLicgfSxcbiAgRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlUmVzcG9uc2U6IHsgYXBwczogWydodWInLCAnYXBwbGljYXRpb24nXSwgbm90ZXM6ICdBY2NlcHQgLyByZWplY3QgaW52aXRlLicgfSxcbiAgTWlzc2lvbkNyZWF0ZWQ6IHsgYXBwczogWydhcHBsaWNhdGlvbiddLCBub3RlczogJ05ldHdvcmsgbWlzc2lvbiByZWdpc3RlciB1cHNlcnQgKGFwcGxpY2F0aW9uIGdlbmVzaXMpLicgfSxcbiAgTWlzc2lvbkJyb2FkY2FzdDogeyBhcHBzOiBbJ2FwcGxpY2F0aW9uJ10sIG5vdGVzOiAnTmV0d29yayBtaXNzaW9uIG9mZmVyLicgfSxcbiAgU0NFdmVudEJhdGNoOiB7IGFwcHM6IFsnYXBwbGljYXRpb24nXSwgbm90ZXM6ICdMb2cgLyBldmVudCBiYXRjaC4nIH0sXG4gIEdhbWVTdGF0ZVNuYXBzaG90OiB7IGFwcHM6IFsnaHViJywgJ2FwcGxpY2F0aW9uJ10sIG5vdGVzOiAnQ3VtdWxhdGl2ZSBhbmFseXRpY3Mgc25hcHNob3QgZm9yIEh1YiAvIEJlYWNvbiBzZWFsLicgfSxcbiAgR3JvdXBDaGF0OiB7IGFwcHM6IFsnYXBwbGljYXRpb24nXSwgbm90ZXM6ICdHcm91cCBGZWRlcmF0aW9uIGNoYW5uZWwgY2hhdC4nIH0sXG4gIEdyb3VwQ2hhbmdlOiB7IGFwcHM6IFsnYXBwbGljYXRpb24nXSwgbm90ZXM6ICdHcm91cCBtZW1iZXJzaGlwIC8gbWV0YSBjaGFuZ2UuJyB9LFxuICBHcm91cFNoYXJlOiB7IGFwcHM6IFsnYXBwbGljYXRpb24nXSwgbm90ZXM6ICdHcm91cC1zY29wZWQgc2hhcmUgKGUuZy4gbWlzc2lvbiBvZmZlcikuJyB9XG59KTtcblxuZnVuY3Rpb24gYnVpbGRBcHBsaWNhdGlvbkNvbnRyYWN0Qm9keVR5cGVzICgpIHtcbiAgbGV0IGJvZHlUeXBlcyA9IG51bGw7XG4gIHRyeSB7XG4gICAgYm9keVR5cGVzID0gcmVxdWlyZSgnQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9hcHBsaWNhdGlvbk5hbWVzcGFjZXMnKS5DT05UUkFDVF9CT0RZX1RZUEVTO1xuICB9IGNhdGNoIChfKSB7XG4gICAgYm9keVR5cGVzID0gbnVsbDtcbiAgfVxuICAvLyBNZXJnZSBjb3JlIHNoYXJlZCB0eXBlcyB3aXRoIEh1Yi9hcHAgbWV0YSAoTWlzc2lvbkJyb2FkY2FzdCwgZXRjLikuXG4gIGNvbnN0IGtleXMgPSBib2R5VHlwZXNcbiAgICA/IFsuLi5uZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhib2R5VHlwZXMpLCAuLi5PYmplY3Qua2V5cyhBUFBMSUNBVElPTl9DT05UUkFDVF9CT0RZX01FVEEpXSldXG4gICAgOiBPYmplY3Qua2V5cyhBUFBMSUNBVElPTl9DT05UUkFDVF9CT0RZX01FVEEpO1xuICByZXR1cm4ga2V5cy5tYXAoKHR5cGUpID0+IHtcbiAgICBjb25zdCBtZXRhID0gQVBQTElDQVRJT05fQ09OVFJBQ1RfQk9EWV9NRVRBW3R5cGVdIHx8IHsgYXBwczogW10sIG5vdGVzOiAnJyB9O1xuICAgIHJldHVybiB7IHR5cGUsIGFwcHM6IG1ldGEuYXBwcyB8fCBbXSwgbm90ZXM6IG1ldGEubm90ZXMgfHwgJycgfTtcbiAgfSk7XG59XG5cbmNvbnN0IEFQUExJQ0FUSU9OX0NPTlRSQUNUX0JPRFlfVFlQRVMgPSBidWlsZEFwcGxpY2F0aW9uQ29udHJhY3RCb2R5VHlwZXMoKTtcblxuLyoqXG4gKiAqKklubmVyKiogZG9tYWluIHBheWxvYWRzIG9mdGVuIGNhcnJpZWQgdG9kYXkgaW5zaWRlIGBHZW5lcmljTWVzc2FnZWAgVVRGLTggSlNPTiAoQWN0aXZpdHlTdHJlYW1zLXN0eWxlIGB0eXBlYCBmaWVsZCkuXG4gKiBUaGVzZSBzaG91bGQgZ3JhZHVhdGUgdG8gKipvdXRlcioqIGBNZXNzYWdlLnR5cGVgIHZhbHVlcyAoKyBvcGNvZGUgaW4gYE1lc3NhZ2UudHlwZXNgKSB3aXRoIHZlcnNpb25lZCBiaW5hcnkgbGF5b3V0cy5cbiAqL1xuY29uc3QgSU5ORVJfRE9NQUlOX1BFTkRJTkdfUFJPTU9USU9OID0gW1xuICB7IGlubmVyVHlwZTogJ0lOVkVOVE9SWV9SRVFVRVNUJywgdHlwaWNhbENhcnJpZXI6ICdHZW5lcmljTWVzc2FnZSBKU09OIGJvZHknLCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5wbGFubmVkIH0sXG4gIHsgaW5uZXJUeXBlOiAnSU5WRU5UT1JZX1JFU1BPTlNFJywgdHlwaWNhbENhcnJpZXI6ICdHZW5lcmljTWVzc2FnZSBKU09OIGJvZHknLCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5wbGFubmVkIH0sXG4gIHsgaW5uZXJUeXBlOiAnRkFCUklDX0RPQ1VNRU5UX09GRkVSJywgdHlwaWNhbENhcnJpZXI6ICdHZW5lcmljTWVzc2FnZSBKU09OIGJvZHknLCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5wbGFubmVkLCBub3RlczogJ0Nhbm9uaWNhbCBkb2N1bWVudC1vZmZlciByZXF1ZXN0OyBhbGlhc2VzIElOVkVOVE9SWV9SRVFVRVNUIG9uIHdpcmUgKEBmYWJyaWMvY29yZSkuJyB9LFxuICB7IGlubmVyVHlwZTogJ0ZBQlJJQ19ET0NVTUVOVF9PRkZFUl9SRVNQT05TRScsIHR5cGljYWxDYXJyaWVyOiAnR2VuZXJpY01lc3NhZ2UgSlNPTiBib2R5Jywgc3RhYmlsaXR5OiBTdGFiaWxpdHkucGxhbm5lZCwgbm90ZXM6ICdDYW5vbmljYWwgZG9jdW1lbnQtb2ZmZXIgcmVwbHk7IGFsaWFzZXMgSU5WRU5UT1JZX1JFU1BPTlNFIG9uIHdpcmUgKEBmYWJyaWMvY29yZSkuJyB9LFxuICB7IGlubmVyVHlwZTogJ1AyUF9GSUxFX1NFTkQnLCB0eXBpY2FsQ2FycmllcjogJ1BlZXIgUDJQIC8gR2VuZXJpY01lc3NhZ2UgZmFub3V0Jywgc3RhYmlsaXR5OiBTdGFiaWxpdHkuc3RhYmxlIH0sXG4gIHsgaW5uZXJUeXBlOiAnUDJQX1BFRVJfR09TU0lQJywgdHlwaWNhbENhcnJpZXI6ICdHZW5lcmljTWVzc2FnZSAvIFAyUF9SRUxBWScsIHN0YWJpbGl0eTogU3RhYmlsaXR5LnN0YWJsZSB9LFxuICB7IGlubmVyVHlwZTogJ1AyUF9QRUVSSU5HX09GRkVSJywgdHlwaWNhbENhcnJpZXI6ICdHZW5lcmljTWVzc2FnZSAvIFAyUF9SRUxBWScsIHN0YWJpbGl0eTogU3RhYmlsaXR5LnN0YWJsZSB9LFxuICB7IGlubmVyVHlwZTogJ1RvbWJzdG9uZScsIHR5cGljYWxDYXJyaWVyOiAnR2VuZXJpY01lc3NhZ2UgKGh1YiBicm9hZGNhc3QpICsgRmFicmljIGxvZyB0eXBlJywgc3RhYmlsaXR5OiBTdGFiaWxpdHkuc3RhYmxlLCBub3RlczogJ0h1YiBgRW1pdFRvbWJzdG9uZWA7IG9iamVjdCBjYXJyaWVzIGFjdGl2aXR5TWVzc2FnZUlkIGFuZC9vciBkb2N1bWVudElkLicgfSxcbiAgeyBpbm5lclR5cGU6ICdXZWJSVENTaWduYWwnLCB0eXBpY2FsQ2FycmllcjogJ0pTT05DYWxsIHJlc3VsdCBwYXlsb2FkJywgc3RhYmlsaXR5OiBTdGFiaWxpdHkudHJhbnNpdGlvbmFsLCBub3RlczogJ0NvdWxkIGJlY29tZSBkZWRpY2F0ZWQgb3V0ZXIgdHlwZSBmb3IgZmFub3V0LicgfSxcbiAgeyBpbm5lclR5cGU6ICdERUxFR0FUSU9OX1NJR05BVFVSRV9SRVFVRVNUJywgdHlwaWNhbENhcnJpZXI6ICdIdWIgZmFicmljIG1lc3NhZ2UgbG9nIChjb2xsZWN0aW9ucy5tZXNzYWdlcyknLCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIG5vdGVzOiAnQnJvd3NlciBhc2tzIEh1YiBpZGVudGl0eSB0byBzaWduOyBkZXNrdG9wIHJlc29sdmVzIHZpYSBSZXNvbHZlRGVsZWdhdGlvblNpZ25hdHVyZU1lc3NhZ2UuJyB9LFxuICB7IGlubmVyVHlwZTogJ0RFTEVHQVRJT05fU0lHTkFUVVJFX1JFU09MVVRJT04nLCB0eXBpY2FsQ2FycmllcjogJ0h1YiBmYWJyaWMgbWVzc2FnZSBsb2cnLCBzdGFiaWxpdHk6IFN0YWJpbGl0eS5zdGFibGUsIG5vdGVzOiAnQXBwcm92ZWQvcmVqZWN0ZWQ7IHJlZmVyZW5jZXMgcGFyZW50TWVzc2FnZUlkLicgfVxuXTtcblxuZnVuY3Rpb24gb3V0ZXJUeXBlTmFtZXMgKCkge1xuICAvLyBVbmlxdWUgbmFtZXMgb25seSAoYWxpYXNlcyBzaGFyZSBvcGNvZGVzIHdpdGggY2Fub25pY2FsIHJvd3MpLlxuICByZXR1cm4gWy4uLm5ldyBTZXQoT1VURVJfV0lSRV9UWVBFUy5tYXAoKHQpID0+IHQubmFtZSkpXTtcbn1cblxuZnVuY3Rpb24gZmluZE91dGVyQnlOYW1lIChuYW1lKSB7XG4gIGNvbnN0IG4gPSBTdHJpbmcobmFtZSB8fCAnJykudHJpbSgpO1xuICByZXR1cm4gT1VURVJfV0lSRV9UWVBFUy5maW5kKCh0KSA9PiB0Lm5hbWUgPT09IG4pIHx8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpbmRPdXRlckJ5T3Bjb2RlRGVjIChvcGNvZGUpIHtcbiAgY29uc3QgbiA9IE51bWJlcihvcGNvZGUpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShuKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBPVVRFUl9XSVJFX1RZUEVTLmZpbmQoKHQpID0+IHQub3Bjb2RlRGVjID09PSBuKSB8fCBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU3RhYmlsaXR5LFxuICBQYXlsb2FkRW5jb2RpbmcsXG4gIFNVR0dFU1RFRF9IVUJfT1BDT0RFX0JMT0NLX1NUQVJULFxuICBTVUdHRVNURURfSFVCX09QQ09ERV9CTE9DS19FTkQsXG4gIE9VVEVSX1dJUkVfVFlQRVMsXG4gIEFQUExJQ0FUSU9OX0NPTlRSQUNUX0JPRFlfVFlQRVMsXG4gIElOTkVSX0RPTUFJTl9QRU5ESU5HX1BST01PVElPTixcbiAgb3V0ZXJUeXBlTmFtZXMsXG4gIGZpbmRPdXRlckJ5TmFtZSxcbiAgZmluZE91dGVyQnlPcGNvZGVEZWNcbn07XG4iXSwibmFtZXMiOlsiX3RvQ29uc3VtYWJsZUFycmF5IiwiciIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJUeXBlRXJyb3IiLCJhIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0IiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpc0FycmF5IiwibGVuZ3RoIiwiZSIsIm4iLCJTdGFiaWxpdHkiLCJPYmplY3QiLCJmcmVlemUiLCJzdGFibGUiLCJ0cmFuc2l0aW9uYWwiLCJwbGFubmVkIiwiUGF5bG9hZEVuY29kaW5nIiwidXRmOEpzb24iLCJ1dGY4VGV4dCIsInN0cnVjdHVyZWRCaW5hcnkiLCJTVUdHRVNURURfSFVCX09QQ09ERV9CTE9DS19TVEFSVCIsIlNVR0dFU1RFRF9IVUJfT1BDT0RFX0JMT0NLX0VORCIsIk9VVEVSX1dJUkVfVFlQRVMiLCJvcGNvZGVEZWMiLCJzdGFiaWxpdHkiLCJlbmNvZGluZyIsIm5vdGVzIiwiQVBQTElDQVRJT05fQ09OVFJBQ1RfQk9EWV9NRVRBIiwiRmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlIiwiYXBwcyIsIkZlZGVyYXRpb25Db250cmFjdEludml0ZVJlc3BvbnNlIiwiTWlzc2lvbkNyZWF0ZWQiLCJNaXNzaW9uQnJvYWRjYXN0IiwiU0NFdmVudEJhdGNoIiwiR2FtZVN0YXRlU25hcHNob3QiLCJHcm91cENoYXQiLCJHcm91cENoYW5nZSIsIkdyb3VwU2hhcmUiLCJidWlsZEFwcGxpY2F0aW9uQ29udHJhY3RCb2R5VHlwZXMiLCJib2R5VHlwZXMiLCJyZXF1aXJlIiwiQ09OVFJBQ1RfQk9EWV9UWVBFUyIsIl8iLCJrZXlzIiwiU2V0IiwiY29uY2F0IiwibWFwIiwidHlwZSIsIm1ldGEiLCJBUFBMSUNBVElPTl9DT05UUkFDVF9CT0RZX1RZUEVTIiwiSU5ORVJfRE9NQUlOX1BFTkRJTkdfUFJPTU9USU9OIiwiaW5uZXJUeXBlIiwidHlwaWNhbENhcnJpZXIiLCJvdXRlclR5cGVOYW1lcyIsImZpbmRPdXRlckJ5TmFtZSIsIlN0cmluZyIsInRyaW0iLCJmaW5kIiwiZmluZE91dGVyQnlPcGNvZGVEZWMiLCJvcGNvZGUiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/fabricMessageRegistry.js\n\n}")},"./functions/fabricPostSetupBrowserIdentity.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ "./functions/fabricBrowserState.js"),\n readStorageJSON = _require.readStorageJSON;\n\n/**\n * Whether `fabric.identity.local` holds a browser-created Fabric identity for Hub UI purposes.\n * Desktop shell handoff (`linkedFromDesktop`) supplies id/xpub for mesh/sync but is not the same as\n * completing Generate / import in the post-setup wizard — exclude it so the wizard stays until then.\n *\n * @param {object|null|undefined} [parsedOpt] - Pre-read payload, or omit to read storage.\n * @returns {boolean}\n */\nfunction hasCompletedPostSetupBrowserIdentity(parsedOpt) {\n var p = parsedOpt !== undefined ? parsedOpt : readStorageJSON(\'fabric.identity.local\', null);\n if (!p || _typeof(p) !== \'object\') return false;\n if (!(p.id || p.xpub)) return false;\n if (p.linkedFromDesktop === true) return false;\n return true;\n}\nmodule.exports = {\n hasCompletedPostSetupBrowserIdentity: hasCompletedPostSetupBrowserIdentity\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljUG9zdFNldHVwQnJvd3NlcklkZW50aXR5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUFBLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBRWIsSUFBQUssUUFBQSxHQUE0QkMsbUJBQU8sQ0FBQywrREFBc0IsQ0FBQztFQUFuREMsZUFBZSxHQUFBRixRQUFBLENBQWZFLGVBQWU7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxvQ0FBb0NBLENBQUVDLFNBQVMsRUFBRTtFQUN4RCxJQUFNQyxDQUFDLEdBQUdELFNBQVMsS0FBS0UsU0FBUyxHQUFHRixTQUFTLEdBQUdGLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUM7RUFDOUYsSUFBSSxDQUFDRyxDQUFDLElBQUlYLE9BQUEsQ0FBT1csQ0FBQyxNQUFLLFFBQVEsRUFBRSxPQUFPLEtBQUs7RUFDN0MsSUFBSSxFQUFFQSxDQUFDLENBQUNFLEVBQUUsSUFBSUYsQ0FBQyxDQUFDRyxJQUFJLENBQUMsRUFBRSxPQUFPLEtBQUs7RUFDbkMsSUFBSUgsQ0FBQyxDQUFDSSxpQkFBaUIsS0FBSyxJQUFJLEVBQUUsT0FBTyxLQUFLO0VBQzlDLE9BQU8sSUFBSTtBQUNiO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2ZSLG9DQUFvQyxFQUFwQ0E7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljUG9zdFNldHVwQnJvd3NlcklkZW50aXR5LmpzPzk2MjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IHJlYWRTdG9yYWdlSlNPTiB9ID0gcmVxdWlyZSgnLi9mYWJyaWNCcm93c2VyU3RhdGUnKTtcblxuLyoqXG4gKiBXaGV0aGVyIGBmYWJyaWMuaWRlbnRpdHkubG9jYWxgIGhvbGRzIGEgYnJvd3Nlci1jcmVhdGVkIEZhYnJpYyBpZGVudGl0eSBmb3IgSHViIFVJIHB1cnBvc2VzLlxuICogRGVza3RvcCBzaGVsbCBoYW5kb2ZmIChgbGlua2VkRnJvbURlc2t0b3BgKSBzdXBwbGllcyBpZC94cHViIGZvciBtZXNoL3N5bmMgYnV0IGlzIG5vdCB0aGUgc2FtZSBhc1xuICogY29tcGxldGluZyBHZW5lcmF0ZSAvIGltcG9ydCBpbiB0aGUgcG9zdC1zZXR1cCB3aXphcmQg4oCUIGV4Y2x1ZGUgaXQgc28gdGhlIHdpemFyZCBzdGF5cyB1bnRpbCB0aGVuLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fG51bGx8dW5kZWZpbmVkfSBbcGFyc2VkT3B0XSAtIFByZS1yZWFkIHBheWxvYWQsIG9yIG9taXQgdG8gcmVhZCBzdG9yYWdlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0NvbXBsZXRlZFBvc3RTZXR1cEJyb3dzZXJJZGVudGl0eSAocGFyc2VkT3B0KSB7XG4gIGNvbnN0IHAgPSBwYXJzZWRPcHQgIT09IHVuZGVmaW5lZCA/IHBhcnNlZE9wdCA6IHJlYWRTdG9yYWdlSlNPTignZmFicmljLmlkZW50aXR5LmxvY2FsJywgbnVsbCk7XG4gIGlmICghcCB8fCB0eXBlb2YgcCAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgaWYgKCEocC5pZCB8fCBwLnhwdWIpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChwLmxpbmtlZEZyb21EZXNrdG9wID09PSB0cnVlKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaGFzQ29tcGxldGVkUG9zdFNldHVwQnJvd3NlcklkZW50aXR5XG59O1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZXF1aXJlIiwicmVxdWlyZSIsInJlYWRTdG9yYWdlSlNPTiIsImhhc0NvbXBsZXRlZFBvc3RTZXR1cEJyb3dzZXJJZGVudGl0eSIsInBhcnNlZE9wdCIsInAiLCJ1bmRlZmluZWQiLCJpZCIsInhwdWIiLCJsaW5rZWRGcm9tRGVza3RvcCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/fabricPostSetupBrowserIdentity.js\n\n}')},"./functions/fabricProtocolUrl.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n\n/**\n * `fabric:` protocol — opaque **fabric:<hex>** carries only a serialized {@link Message} (no `//` host).\n * Legacy: `fabric://login?…`, `fabric://message?hex=…` (see `scripts/desktop.js`).\n * @see `functions/fabricMessageEnvelope.js` for JSON body envelope v1.\n */\nvar Message = __webpack_require__(/*! @fabric/core/types/message */ \"./node_modules/@fabric/core/types/message.js\");\nfunction normalizeHex(s) {\n if (typeof s !== 'string') return '';\n var t = s.trim();\n if (t.startsWith('0x') || t.startsWith('0X')) t = t.slice(2);\n return t;\n}\n\n/**\n * Decode hex → Buffer and parse with `Message.fromBuffer`.\n * @param {string} hex\n * @returns {{ ok: true, buffer: Buffer, message: import('@fabric/core/types/message') } | { ok: false, error: string }}\n */\nfunction parseHexFabricMessage(hex) {\n var norm = normalizeHex(hex);\n if (!norm) return {\n ok: false,\n error: 'empty hex'\n };\n if (norm.length % 2 !== 0) return {\n ok: false,\n error: 'odd hex length'\n };\n if (!/^[0-9a-fA-F]+$/.test(norm)) return {\n ok: false,\n error: 'invalid hex'\n };\n var buffer;\n try {\n buffer = Buffer.from(norm, 'hex');\n } catch (e) {\n return {\n ok: false,\n error: 'hex decode failed'\n };\n }\n if (buffer.length < 32) return {\n ok: false,\n error: 'buffer too short for Fabric message header'\n };\n try {\n var message = Message.fromBuffer(buffer);\n return {\n ok: true,\n buffer: buffer,\n message: message\n };\n } catch (e) {\n return {\n ok: false,\n error: e && e.message ? String(e.message) : 'Message.fromBuffer failed'\n };\n }\n}\n\n/**\n * @param {import('@fabric/core/types/message')} m\n */\nfunction envelopeMetaFromUtf8Body(bodyUtf8) {\n if (typeof bodyUtf8 !== 'string' || !bodyUtf8.trim().startsWith('{')) return null;\n try {\n var j = JSON.parse(bodyUtf8);\n if (!j || j['@fabric/MessageEnvelope'] !== '1' && j['@fabric/MessageEnvelope'] !== 1) return null;\n return {\n prompt: j.display && typeof j.display.prompt === 'string' ? j.display.prompt : null,\n intent: j.intent != null ? String(j.intent) : null,\n encryption: j.encryption != null ? String(j.encryption) : null,\n authorKind: j.author && j.author.kind != null ? String(j.author.kind) : null,\n authorContractHash: j.author && j.author.hex ? String(j.author.hex) : null,\n signersCount: Array.isArray(j.signers) ? j.signers.length : 0\n };\n } catch (e) {\n return null;\n }\n}\nfunction summarizeFabricMessage(m) {\n if (!m || !m.raw || !m.raw.type) {\n return {\n typeName: 'unknown',\n typeCode: null,\n authorHex: '',\n bodyPreview: '',\n byteLength: 0,\n envelopeMeta: null\n };\n }\n var code = m.raw.type.readUInt32BE(0);\n var typeName = m.codes && m.codes[code] ? m.codes[code] : \"type_\".concat(code);\n var authorHex = m.raw.author && typeof m.raw.author.toString === 'function' ? m.raw.author.toString('hex') : '';\n var bodyPreview = '';\n var envelopeMeta = null;\n try {\n var data = m.raw.data;\n if (data && data.length) {\n var u8 = Buffer.isBuffer(data) ? data : Buffer.from(data);\n bodyPreview = u8.toString('utf8').slice(0, 600);\n if (!bodyPreview || /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/.test(bodyPreview)) {\n bodyPreview = u8.toString('hex').slice(0, 200) + (u8.length > 100 ? '…' : '');\n } else {\n envelopeMeta = envelopeMetaFromUtf8Body(u8.toString('utf8'));\n }\n }\n } catch (e) {\n bodyPreview = '';\n }\n var byteLength = 0;\n try {\n if (typeof m.asRaw === 'function') byteLength = m.asRaw().length;else byteLength = (m.raw.data ? m.raw.data.length : 0) + 208;\n } catch (e) {\n byteLength = bufferLengthSafe(m);\n }\n return {\n typeName: typeName,\n typeCode: code,\n authorHex: authorHex,\n bodyPreview: bodyPreview,\n byteLength: byteLength,\n envelopeMeta: envelopeMeta\n };\n}\nfunction bufferLengthSafe(m) {\n try {\n var d = m.raw && m.raw.data;\n return (d && d.length ? d.length : 0) + 208;\n } catch (e) {\n return 0;\n }\n}\n\n/**\n * Structured summary for IPC / UI (no Message class on renderer unless bundled).\n * @param {string} hex\n */\nfunction fabricMessageSummaryFromHex(hex) {\n var parsed = parseHexFabricMessage(hex);\n if (!parsed.ok) return {\n ok: false,\n error: parsed.error\n };\n var summary = summarizeFabricMessage(parsed.message);\n return {\n ok: true,\n hex: normalizeHex(hex),\n summary: summary\n };\n}\n\n/**\n * Opaque form: `fabric:deadbeef…` (see WHATWG URL: empty hostname, hex in pathname).\n * @param {string} urlStr\n * @returns {string|null} normalized hex or null\n */\nfunction parseOpaqueFabricMessageHex(urlStr) {\n if (typeof urlStr !== 'string') return null;\n var url;\n try {\n url = new URL(urlStr.trim());\n } catch (e) {\n return null;\n }\n if (url.protocol !== 'fabric:') return null;\n if (url.hostname) return null;\n var raw = url.pathname ? String(url.pathname).replace(/^\\//, '') : '';\n if (!raw) return null;\n var hex = normalizeHex(raw);\n if (!hex || hex.length % 2 !== 0) return null;\n if (!/^[0-9a-fA-F]+$/.test(hex)) return null;\n return hex;\n}\nmodule.exports = {\n normalizeHex: normalizeHex,\n parseHexFabricMessage: parseHexFabricMessage,\n summarizeFabricMessage: summarizeFabricMessage,\n fabricMessageSummaryFromHex: fabricMessageSummaryFromHex,\n parseOpaqueFabricMessageHex: parseOpaqueFabricMessageHex,\n envelopeMetaFromUtf8Body: envelopeMetaFromUtf8Body\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TTNCLEdBQUcsR0FBR3dCLEdBQUcsQ0FBQ0ksUUFBUSxHQUFHaEQsTUFBTSxDQUFDNEMsR0FBRyxDQUFDSSxRQUFRLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFO0VBQ3ZFLElBQUksQ0FBQzdCLEdBQUcsRUFBRSxPQUFPLElBQUk7RUFDckIsSUFBTWhDLEdBQUcsR0FBR1AsWUFBWSxDQUFDdUMsR0FBRyxDQUFDO0VBQzdCLElBQUksQ0FBQ2hDLEdBQUcsSUFBSUEsR0FBRyxDQUFDSSxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUk7RUFDN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDQyxJQUFJLENBQUNMLEdBQUcsQ0FBQyxFQUFFLE9BQU8sSUFBSTtFQUM1QyxPQUFPQSxHQUFHO0FBQ1o7QUFFQThELE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2Z0RSxZQUFZLEVBQVpBLFlBQVk7RUFDWk0scUJBQXFCLEVBQXJCQSxxQkFBcUI7RUFDckIrQixzQkFBc0IsRUFBdEJBLHNCQUFzQjtFQUN0QnFCLDJCQUEyQixFQUEzQkEsMkJBQTJCO0VBQzNCRywyQkFBMkIsRUFBM0JBLDJCQUEyQjtFQUMzQnpDLHdCQUF3QixFQUF4QkE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljUHJvdG9jb2xVcmwuanM/ZDNkNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogYGZhYnJpYzpgIHByb3RvY29sIOKAlCBvcGFxdWUgKipmYWJyaWM6Jmx0O2hleCZndDsqKiBjYXJyaWVzIG9ubHkgYSBzZXJpYWxpemVkIHtAbGluayBNZXNzYWdlfSAobm8gYC8vYCBob3N0KS5cbiAqIExlZ2FjeTogYGZhYnJpYzovL2xvZ2luP+KApmAsIGBmYWJyaWM6Ly9tZXNzYWdlP2hleD3igKZgIChzZWUgYHNjcmlwdHMvZGVza3RvcC5qc2ApLlxuICogQHNlZSBgZnVuY3Rpb25zL2ZhYnJpY01lc3NhZ2VFbnZlbG9wZS5qc2AgZm9yIEpTT04gYm9keSBlbnZlbG9wZSB2MS5cbiAqL1xuXG5jb25zdCBNZXNzYWdlID0gcmVxdWlyZSgnQGZhYnJpYy9jb3JlL3R5cGVzL21lc3NhZ2UnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGV4IChzKSB7XG4gIGlmICh0eXBlb2YgcyAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgbGV0IHQgPSBzLnRyaW0oKTtcbiAgaWYgKHQuc3RhcnRzV2l0aCgnMHgnKSB8fCB0LnN0YXJ0c1dpdGgoJzBYJykpIHQgPSB0LnNsaWNlKDIpO1xuICByZXR1cm4gdDtcbn1cblxuLyoqXG4gKiBEZWNvZGUgaGV4IOKGkiBCdWZmZXIgYW5kIHBhcnNlIHdpdGggYE1lc3NhZ2UuZnJvbUJ1ZmZlcmAuXG4gKiBAcGFyYW0ge3N0cmluZ30gaGV4XG4gKiBAcmV0dXJucyB7eyBvazogdHJ1ZSwgYnVmZmVyOiBCdWZmZXIsIG1lc3NhZ2U6IGltcG9ydCgnQGZhYnJpYy9jb3JlL3R5cGVzL21lc3NhZ2UnKSB9IHwgeyBvazogZmFsc2UsIGVycm9yOiBzdHJpbmcgfX1cbiAqL1xuZnVuY3Rpb24gcGFyc2VIZXhGYWJyaWNNZXNzYWdlIChoZXgpIHtcbiAgY29uc3Qgbm9ybSA9IG5vcm1hbGl6ZUhleChoZXgpO1xuICBpZiAoIW5vcm0pIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdlbXB0eSBoZXgnIH07XG4gIGlmIChub3JtLmxlbmd0aCAlIDIgIT09IDApIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdvZGQgaGV4IGxlbmd0aCcgfTtcbiAgaWYgKCEvXlswLTlhLWZBLUZdKyQvLnRlc3Qobm9ybSkpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6ICdpbnZhbGlkIGhleCcgfTtcbiAgbGV0IGJ1ZmZlcjtcbiAgdHJ5IHtcbiAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShub3JtLCAnaGV4Jyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAnaGV4IGRlY29kZSBmYWlsZWQnIH07XG4gIH1cbiAgaWYgKGJ1ZmZlci5sZW5ndGggPCAzMikgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogJ2J1ZmZlciB0b28gc2hvcnQgZm9yIEZhYnJpYyBtZXNzYWdlIGhlYWRlcicgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tQnVmZmVyKGJ1ZmZlcik7XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIGJ1ZmZlciwgbWVzc2FnZSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogKGUgJiYgZS5tZXNzYWdlKSA/IFN0cmluZyhlLm1lc3NhZ2UpIDogJ01lc3NhZ2UuZnJvbUJ1ZmZlciBmYWlsZWQnIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnQGZhYnJpYy9jb3JlL3R5cGVzL21lc3NhZ2UnKX0gbVxuICovXG5mdW5jdGlvbiBlbnZlbG9wZU1ldGFGcm9tVXRmOEJvZHkgKGJvZHlVdGY4KSB7XG4gIGlmICh0eXBlb2YgYm9keVV0ZjggIT09ICdzdHJpbmcnIHx8ICFib2R5VXRmOC50cmltKCkuc3RhcnRzV2l0aCgneycpKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBqID0gSlNPTi5wYXJzZShib2R5VXRmOCk7XG4gICAgaWYgKCFqIHx8IChqWydAZmFicmljL01lc3NhZ2VFbnZlbG9wZSddICE9PSAnMScgJiYgalsnQGZhYnJpYy9NZXNzYWdlRW52ZWxvcGUnXSAhPT0gMSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9tcHQ6IGouZGlzcGxheSAmJiB0eXBlb2Ygai5kaXNwbGF5LnByb21wdCA9PT0gJ3N0cmluZycgPyBqLmRpc3BsYXkucHJvbXB0IDogbnVsbCxcbiAgICAgIGludGVudDogai5pbnRlbnQgIT0gbnVsbCA/IFN0cmluZyhqLmludGVudCkgOiBudWxsLFxuICAgICAgZW5jcnlwdGlvbjogai5lbmNyeXB0aW9uICE9IG51bGwgPyBTdHJpbmcoai5lbmNyeXB0aW9uKSA6IG51bGwsXG4gICAgICBhdXRob3JLaW5kOiBqLmF1dGhvciAmJiBqLmF1dGhvci5raW5kICE9IG51bGwgPyBTdHJpbmcoai5hdXRob3Iua2luZCkgOiBudWxsLFxuICAgICAgYXV0aG9yQ29udHJhY3RIYXNoOiBqLmF1dGhvciAmJiBqLmF1dGhvci5oZXggPyBTdHJpbmcoai5hdXRob3IuaGV4KSA6IG51bGwsXG4gICAgICBzaWduZXJzQ291bnQ6IEFycmF5LmlzQXJyYXkoai5zaWduZXJzKSA/IGouc2lnbmVycy5sZW5ndGggOiAwXG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN1bW1hcml6ZUZhYnJpY01lc3NhZ2UgKG0pIHtcbiAgaWYgKCFtIHx8ICFtLnJhdyB8fCAhbS5yYXcudHlwZSkge1xuICAgIHJldHVybiB7IHR5cGVOYW1lOiAndW5rbm93bicsIHR5cGVDb2RlOiBudWxsLCBhdXRob3JIZXg6ICcnLCBib2R5UHJldmlldzogJycsIGJ5dGVMZW5ndGg6IDAsIGVudmVsb3BlTWV0YTogbnVsbCB9O1xuICB9XG4gIGNvbnN0IGNvZGUgPSBtLnJhdy50eXBlLnJlYWRVSW50MzJCRSgwKTtcbiAgY29uc3QgdHlwZU5hbWUgPSBtLmNvZGVzICYmIG0uY29kZXNbY29kZV0gPyBtLmNvZGVzW2NvZGVdIDogYHR5cGVfJHtjb2RlfWA7XG4gIGNvbnN0IGF1dGhvckhleCA9IG0ucmF3LmF1dGhvciAmJiB0eXBlb2YgbS5yYXcuYXV0aG9yLnRvU3RyaW5nID09PSAnZnVuY3Rpb24nXG4gICAgPyBtLnJhdy5hdXRob3IudG9TdHJpbmcoJ2hleCcpXG4gICAgOiAnJztcbiAgbGV0IGJvZHlQcmV2aWV3ID0gJyc7XG4gIGxldCBlbnZlbG9wZU1ldGEgPSBudWxsO1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBtLnJhdy5kYXRhO1xuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICBjb25zdCB1OCA9IEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSA/IGRhdGEgOiBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICAgIGJvZHlQcmV2aWV3ID0gdTgudG9TdHJpbmcoJ3V0ZjgnKS5zbGljZSgwLCA2MDApO1xuICAgICAgaWYgKCFib2R5UHJldmlldyB8fCAvW1xceDAwLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXS8udGVzdChib2R5UHJldmlldykpIHtcbiAgICAgICAgYm9keVByZXZpZXcgPSB1OC50b1N0cmluZygnaGV4Jykuc2xpY2UoMCwgMjAwKSArICh1OC5sZW5ndGggPiAxMDAgPyAn4oCmJyA6ICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudmVsb3BlTWV0YSA9IGVudmVsb3BlTWV0YUZyb21VdGY4Qm9keSh1OC50b1N0cmluZygndXRmOCcpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBib2R5UHJldmlldyA9ICcnO1xuICB9XG4gIGxldCBieXRlTGVuZ3RoID0gMDtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIG0uYXNSYXcgPT09ICdmdW5jdGlvbicpIGJ5dGVMZW5ndGggPSBtLmFzUmF3KCkubGVuZ3RoO1xuICAgIGVsc2UgYnl0ZUxlbmd0aCA9IChtLnJhdy5kYXRhID8gbS5yYXcuZGF0YS5sZW5ndGggOiAwKSArIDIwODtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGJ5dGVMZW5ndGggPSBidWZmZXJMZW5ndGhTYWZlKG0pO1xuICB9XG4gIHJldHVybiB7IHR5cGVOYW1lLCB0eXBlQ29kZTogY29kZSwgYXV0aG9ySGV4LCBib2R5UHJldmlldywgYnl0ZUxlbmd0aCwgZW52ZWxvcGVNZXRhIH07XG59XG5cbmZ1bmN0aW9uIGJ1ZmZlckxlbmd0aFNhZmUgKG0pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkID0gbS5yYXcgJiYgbS5yYXcuZGF0YTtcbiAgICByZXR1cm4gKGQgJiYgZC5sZW5ndGggPyBkLmxlbmd0aCA6IDApICsgMjA4O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmVkIHN1bW1hcnkgZm9yIElQQyAvIFVJIChubyBNZXNzYWdlIGNsYXNzIG9uIHJlbmRlcmVyIHVubGVzcyBidW5kbGVkKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoZXhcbiAqL1xuZnVuY3Rpb24gZmFicmljTWVzc2FnZVN1bW1hcnlGcm9tSGV4IChoZXgpIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VIZXhGYWJyaWNNZXNzYWdlKGhleCk7XG4gIGlmICghcGFyc2VkLm9rKSByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBwYXJzZWQuZXJyb3IgfTtcbiAgY29uc3Qgc3VtbWFyeSA9IHN1bW1hcml6ZUZhYnJpY01lc3NhZ2UocGFyc2VkLm1lc3NhZ2UpO1xuICByZXR1cm4ge1xuICAgIG9rOiB0cnVlLFxuICAgIGhleDogbm9ybWFsaXplSGV4KGhleCksXG4gICAgc3VtbWFyeVxuICB9O1xufVxuXG4vKipcbiAqIE9wYXF1ZSBmb3JtOiBgZmFicmljOmRlYWRiZWVm4oCmYCAoc2VlIFdIQVRXRyBVUkw6IGVtcHR5IGhvc3RuYW1lLCBoZXggaW4gcGF0aG5hbWUpLlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFN0clxuICogQHJldHVybnMge3N0cmluZ3xudWxsfSBub3JtYWxpemVkIGhleCBvciBudWxsXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3BhcXVlRmFicmljTWVzc2FnZUhleCAodXJsU3RyKSB7XG4gIGlmICh0eXBlb2YgdXJsU3RyICE9PSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG4gIGxldCB1cmw7XG4gIHRyeSB7XG4gICAgdXJsID0gbmV3IFVSTCh1cmxTdHIudHJpbSgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICh1cmwucHJvdG9jb2wgIT09ICdmYWJyaWM6JykgcmV0dXJuIG51bGw7XG4gIGlmICh1cmwuaG9zdG5hbWUpIHJldHVybiBudWxsO1xuICBjb25zdCByYXcgPSB1cmwucGF0aG5hbWUgPyBTdHJpbmcodXJsLnBhdGhuYW1lKS5yZXBsYWNlKC9eXFwvLywgJycpIDogJyc7XG4gIGlmICghcmF3KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgaGV4ID0gbm9ybWFsaXplSGV4KHJhdyk7XG4gIGlmICghaGV4IHx8IGhleC5sZW5ndGggJSAyICE9PSAwKSByZXR1cm4gbnVsbDtcbiAgaWYgKCEvXlswLTlhLWZBLUZdKyQvLnRlc3QoaGV4KSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBoZXg7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBub3JtYWxpemVIZXgsXG4gIHBhcnNlSGV4RmFicmljTWVzc2FnZSxcbiAgc3VtbWFyaXplRmFicmljTWVzc2FnZSxcbiAgZmFicmljTWVzc2FnZVN1bW1hcnlGcm9tSGV4LFxuICBwYXJzZU9wYXF1ZUZhYnJpY01lc3NhZ2VIZXgsXG4gIGVudmVsb3BlTWV0YUZyb21VdGY4Qm9keVxufTtcbiJdLCJuYW1lcyI6WyJNZXNzYWdlIiwicmVxdWlyZSIsIm5vcm1hbGl6ZUhleCIsInMiLCJ0IiwidHJpbSIsInN0YXJ0c1dpdGgiLCJzbGljZSIsInBhcnNlSGV4RmFicmljTWVzc2FnZSIsImhleCIsIm5vcm0iLCJvayIsImVycm9yIiwibGVuZ3RoIiwidGVzdCIsImJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJlIiwibWVzc2FnZSIsImZyb21CdWZmZXIiLCJTdHJpbmciLCJlbnZlbG9wZU1ldGFGcm9tVXRmOEJvZHkiLCJib2R5VXRmOCIsImoiLCJKU09OIiwicGFyc2UiLCJwcm9tcHQiLCJkaXNwbGF5IiwiaW50ZW50IiwiZW5jcnlwdGlvbiIsImF1dGhvcktpbmQiLCJhdXRob3IiLCJraW5kIiwiYXV0aG9yQ29udHJhY3RIYXNoIiwic2lnbmVyc0NvdW50IiwiQXJyYXkiLCJpc0FycmF5Iiwic2lnbmVycyIsInN1bW1hcml6ZUZhYnJpY01lc3NhZ2UiLCJtIiwicmF3IiwidHlwZSIsInR5cGVOYW1lIiwidHlwZUNvZGUiLCJhdXRob3JIZXgiLCJib2R5UHJldmlldyIsImJ5dGVMZW5ndGgiLCJlbnZlbG9wZU1ldGEiLCJjb2RlIiwicmVhZFVJbnQzMkJFIiwiY29kZXMiLCJjb25jYXQiLCJ0b1N0cmluZyIsImRhdGEiLCJ1OCIsImlzQnVmZmVyIiwiYXNSYXciLCJidWZmZXJMZW5ndGhTYWZlIiwiZCIsImZhYnJpY01lc3NhZ2VTdW1tYXJ5RnJvbUhleCIsInBhcnNlZCIsInN1bW1hcnkiLCJwYXJzZU9wYXF1ZUZhYnJpY01lc3NhZ2VIZXgiLCJ1cmxTdHIiLCJ1cmwiLCJVUkwiLCJwcm90b2NvbCIsImhvc3RuYW1lIiwicGF0aG5hbWUiLCJyZXBsYWNlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/fabricProtocolUrl.js\n\n}")},"./functions/fabricPubkey.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Re-export pubkey helpers from `@fabric/http`.\n */\ntry {\n module.exports = __webpack_require__(/*! @fabric/http/functions/fabricPubkey */ "./node_modules/@fabric/http/functions/fabricPubkey.js");\n} catch (_) {\n module.exports = __webpack_require__(/*! ./fabricPubkey.local */ "./functions/fabricPubkey.local.js");\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljUHVia2V5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLElBQUk7RUFDRkEsd0lBQStEO0FBQ2pFLENBQUMsQ0FBQyxPQUFPRyxDQUFDLEVBQUU7RUFDVkgscUdBQWdEO0FBQ2xEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljUHVia2V5LmpzPzE4ZjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFJlLWV4cG9ydCBwdWJrZXkgaGVscGVycyBmcm9tIGBAZmFicmljL2h0dHBgLlxuICovXG50cnkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ0BmYWJyaWMvaHR0cC9mdW5jdGlvbnMvZmFicmljUHVia2V5Jyk7XG59IGNhdGNoIChfKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWJyaWNQdWJrZXkubG9jYWwnKTtcbn1cbiJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSIsIl8iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/fabricPubkey.js\n\n}')},"./functions/fabricPubkey.local.js"(module){"use strict";eval("{\n\n/**\n * Secp256k1 pubkey normalize helpers for Fabric chat / membership.\n * Compressed (02/03||x) and x-only (64-hex) forms compare equal via {@link pubkeysMatch}.\n */\n\n/**\n * @param {*} hex\n * @returns {string|null} lowercase 64-hex x-only, or null\n */\nfunction pubkeyXOnly(hex) {\n var s = String(hex || '').toLowerCase().replace(/^0x/, '');\n if (/^0[23][0-9a-f]{64}$/.test(s)) return s.slice(2);\n if (/^[0-9a-f]{64}$/.test(s)) return s;\n return null;\n}\n\n/**\n * @param {*} a\n * @param {*} b\n * @returns {boolean}\n */\nfunction pubkeysMatch(a, b) {\n var xa = pubkeyXOnly(a);\n var xb = pubkeyXOnly(b);\n return !!(xa && xb && xa === xb);\n}\n\n/**\n * Canonical chat actor id = x-only pubkey hex.\n * AMP P2P_CHAT_MESSAGE authors are x-only; many app identities use compressed Key.pubkey.\n * @param {*} hex\n * @returns {string}\n */\nfunction canonicalChatAuthor(hex) {\n var x = pubkeyXOnly(hex);\n if (!x) throw new Error('invalid author pubkey');\n return x;\n}\n\n/**\n * Prefer a compressed actor pubkey when it matches the wire signer (x-only).\n * @param {string|null} signerHex\n * @param {object|null} actor\n * @returns {string|null}\n */\nfunction resolveSignerPubkey(signerHex, actor) {\n var candidate = actor && (actor.publicKey || actor.pubkey || actor.id);\n if (candidate && (!signerHex || pubkeysMatch(candidate, signerHex))) return String(candidate);\n return signerHex ? String(signerHex) : candidate ? String(candidate) : null;\n}\nmodule.exports = {\n pubkeyXOnly: pubkeyXOnly,\n pubkeysMatch: pubkeysMatch,\n canonicalChatAuthor: canonicalChatAuthor,\n resolveSignerPubkey: resolveSignerPubkey\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljUHVia2V5LmxvY2FsLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsV0FBV0EsQ0FBRUMsR0FBRyxFQUFFO0VBQ3pCLElBQU1DLENBQUMsR0FBR0MsTUFBTSxDQUFDRixHQUFHLElBQUksRUFBRSxDQUFDLENBQUNHLFdBQVcsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0VBQzVELElBQUkscUJBQXFCLENBQUNDLElBQUksQ0FBQ0osQ0FBQyxDQUFDLEVBQUUsT0FBT0EsQ0FBQyxDQUFDSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ3BELElBQUksZ0JBQWdCLENBQUNELElBQUksQ0FBQ0osQ0FBQyxDQUFDLEVBQUUsT0FBT0EsQ0FBQztFQUN0QyxPQUFPLElBQUk7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU00sWUFBWUEsQ0FBRUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDM0IsSUFBTUMsRUFBRSxHQUFHWCxXQUFXLENBQUNTLENBQUMsQ0FBQztFQUN6QixJQUFNRyxFQUFFLEdBQUdaLFdBQVcsQ0FBQ1UsQ0FBQyxDQUFDO0VBQ3pCLE9BQU8sQ0FBQyxFQUFFQyxFQUFFLElBQUlDLEVBQUUsSUFBSUQsRUFBRSxLQUFLQyxFQUFFLENBQUM7QUFDbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsbUJBQW1CQSxDQUFFWixHQUFHLEVBQUU7RUFDakMsSUFBTWEsQ0FBQyxHQUFHZCxXQUFXLENBQUNDLEdBQUcsQ0FBQztFQUMxQixJQUFJLENBQUNhLENBQUMsRUFBRSxNQUFNLElBQUlDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztFQUNoRCxPQUFPRCxDQUFDO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0UsbUJBQW1CQSxDQUFFQyxTQUFTLEVBQUVDLEtBQUssRUFBRTtFQUM5QyxJQUFNQyxTQUFTLEdBQUdELEtBQUssS0FBS0EsS0FBSyxDQUFDRSxTQUFTLElBQUlGLEtBQUssQ0FBQ0csTUFBTSxJQUFJSCxLQUFLLENBQUNJLEVBQUUsQ0FBQztFQUN4RSxJQUFJSCxTQUFTLEtBQUssQ0FBQ0YsU0FBUyxJQUFJVCxZQUFZLENBQUNXLFNBQVMsRUFBRUYsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPZCxNQUFNLENBQUNnQixTQUFTLENBQUM7RUFDN0YsT0FBT0YsU0FBUyxHQUFHZCxNQUFNLENBQUNjLFNBQVMsQ0FBQyxHQUFJRSxTQUFTLEdBQUdoQixNQUFNLENBQUNnQixTQUFTLENBQUMsR0FBRyxJQUFLO0FBQy9FO0FBRUFJLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2Z4QixXQUFXLEVBQVhBLFdBQVc7RUFDWFEsWUFBWSxFQUFaQSxZQUFZO0VBQ1pLLG1CQUFtQixFQUFuQkEsbUJBQW1CO0VBQ25CRyxtQkFBbUIsRUFBbkJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2ZhYnJpY1B1YmtleS5sb2NhbC5qcz9jOThhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTZWNwMjU2azEgcHVia2V5IG5vcm1hbGl6ZSBoZWxwZXJzIGZvciBGYWJyaWMgY2hhdCAvIG1lbWJlcnNoaXAuXG4gKiBDb21wcmVzc2VkICgwMi8wM3x8eCkgYW5kIHgtb25seSAoNjQtaGV4KSBmb3JtcyBjb21wYXJlIGVxdWFsIHZpYSB7QGxpbmsgcHVia2V5c01hdGNofS5cbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7Kn0gaGV4XG4gKiBAcmV0dXJucyB7c3RyaW5nfG51bGx9IGxvd2VyY2FzZSA2NC1oZXggeC1vbmx5LCBvciBudWxsXG4gKi9cbmZ1bmN0aW9uIHB1YmtleVhPbmx5IChoZXgpIHtcbiAgY29uc3QgcyA9IFN0cmluZyhoZXggfHwgJycpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXjB4LywgJycpO1xuICBpZiAoL14wWzIzXVswLTlhLWZdezY0fSQvLnRlc3QocykpIHJldHVybiBzLnNsaWNlKDIpO1xuICBpZiAoL15bMC05YS1mXXs2NH0kLy50ZXN0KHMpKSByZXR1cm4gcztcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBwdWJrZXlzTWF0Y2ggKGEsIGIpIHtcbiAgY29uc3QgeGEgPSBwdWJrZXlYT25seShhKTtcbiAgY29uc3QgeGIgPSBwdWJrZXlYT25seShiKTtcbiAgcmV0dXJuICEhKHhhICYmIHhiICYmIHhhID09PSB4Yik7XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIGNoYXQgYWN0b3IgaWQgPSB4LW9ubHkgcHVia2V5IGhleC5cbiAqIEFNUCBQMlBfQ0hBVF9NRVNTQUdFIGF1dGhvcnMgYXJlIHgtb25seTsgbWFueSBhcHAgaWRlbnRpdGllcyB1c2UgY29tcHJlc3NlZCBLZXkucHVia2V5LlxuICogQHBhcmFtIHsqfSBoZXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNhbm9uaWNhbENoYXRBdXRob3IgKGhleCkge1xuICBjb25zdCB4ID0gcHVia2V5WE9ubHkoaGV4KTtcbiAgaWYgKCF4KSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYXV0aG9yIHB1YmtleScpO1xuICByZXR1cm4geDtcbn1cblxuLyoqXG4gKiBQcmVmZXIgYSBjb21wcmVzc2VkIGFjdG9yIHB1YmtleSB3aGVuIGl0IG1hdGNoZXMgdGhlIHdpcmUgc2lnbmVyICh4LW9ubHkpLlxuICogQHBhcmFtIHtzdHJpbmd8bnVsbH0gc2lnbmVySGV4XG4gKiBAcGFyYW0ge29iamVjdHxudWxsfSBhY3RvclxuICogQHJldHVybnMge3N0cmluZ3xudWxsfVxuICovXG5mdW5jdGlvbiByZXNvbHZlU2lnbmVyUHVia2V5IChzaWduZXJIZXgsIGFjdG9yKSB7XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IGFjdG9yICYmIChhY3Rvci5wdWJsaWNLZXkgfHwgYWN0b3IucHVia2V5IHx8IGFjdG9yLmlkKTtcbiAgaWYgKGNhbmRpZGF0ZSAmJiAoIXNpZ25lckhleCB8fCBwdWJrZXlzTWF0Y2goY2FuZGlkYXRlLCBzaWduZXJIZXgpKSkgcmV0dXJuIFN0cmluZyhjYW5kaWRhdGUpO1xuICByZXR1cm4gc2lnbmVySGV4ID8gU3RyaW5nKHNpZ25lckhleCkgOiAoY2FuZGlkYXRlID8gU3RyaW5nKGNhbmRpZGF0ZSkgOiBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHB1YmtleVhPbmx5LFxuICBwdWJrZXlzTWF0Y2gsXG4gIGNhbm9uaWNhbENoYXRBdXRob3IsXG4gIHJlc29sdmVTaWduZXJQdWJrZXlcbn07XG4iXSwibmFtZXMiOlsicHVia2V5WE9ubHkiLCJoZXgiLCJzIiwiU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwidGVzdCIsInNsaWNlIiwicHVia2V5c01hdGNoIiwiYSIsImIiLCJ4YSIsInhiIiwiY2Fub25pY2FsQ2hhdEF1dGhvciIsIngiLCJFcnJvciIsInJlc29sdmVTaWduZXJQdWJrZXkiLCJzaWduZXJIZXgiLCJhY3RvciIsImNhbmRpZGF0ZSIsInB1YmxpY0tleSIsInB1YmtleSIsImlkIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/fabricPubkey.local.js\n\n}")},"./functions/fabricReportHint.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var process = __webpack_require__(/*! process/browser */ \"./node_modules/process/browser.js\");\n\n\n/**\n * Default URL for bug reports (Hub + browser bundle).\n * Override with FABRIC_ISSUES_URL (Node) or window.FABRIC_ISSUES_URL (browser).\n */\nvar DEFAULT_ISSUES_URL = 'https://github.com/FabricLabs/hub.fabric.pub/issues';\nfunction reportIssuesUrl() {\n if (typeof process !== 'undefined' && process.env && process.env.FABRIC_ISSUES_URL) {\n return String(process.env.FABRIC_ISSUES_URL);\n }\n if (typeof window !== 'undefined' && window.FABRIC_ISSUES_URL) {\n return String(window.FABRIC_ISSUES_URL);\n }\n return DEFAULT_ISSUES_URL;\n}\nfunction reportHintLine() {\n return \"If this looks like a Fabric bug, report it at: \".concat(reportIssuesUrl());\n}\n\n/**\n * After logging the crash, print where to file an issue (same console stream).\n * @param {string} [prefix] - e.g. '[FABRIC:HUB]' or '[BRIDGE]'\n */\nfunction logCrashReportHint(prefix) {\n var p = prefix != null ? prefix : '[FABRIC]';\n console.error(p, reportHintLine());\n}\nmodule.exports = {\n reportIssuesUrl: reportIssuesUrl,\n reportHintLine: reportHintLine,\n logCrashReportHint: logCrashReportHint\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmFicmljUmVwb3J0SGludC5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNQSxrQkFBa0IsR0FBRyxxREFBcUQ7QUFFaEYsU0FBU0MsZUFBZUEsQ0FBQSxFQUFJO0VBQzFCLElBQUksT0FBT0MsT0FBTyxLQUFLLFdBQVcsSUFBSUEsT0FBTyxDQUFDQyxHQUFHLElBQUlELE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxpQkFBaUIsRUFBRTtJQUNsRixPQUFPQyxNQUFNLENBQUNILE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxpQkFBaUIsQ0FBQztFQUM5QztFQUNBLElBQUksT0FBT0UsTUFBTSxLQUFLLFdBQVcsSUFBSUEsTUFBTSxDQUFDRixpQkFBaUIsRUFBRTtJQUM3RCxPQUFPQyxNQUFNLENBQUNDLE1BQU0sQ0FBQ0YsaUJBQWlCLENBQUM7RUFDekM7RUFDQSxPQUFPSixrQkFBa0I7QUFDM0I7QUFFQSxTQUFTTyxjQUFjQSxDQUFBLEVBQUk7RUFDekIseURBQUFDLE1BQUEsQ0FBeURQLGVBQWUsQ0FBQyxDQUFDO0FBQzVFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU1Esa0JBQWtCQSxDQUFFQyxNQUFNLEVBQUU7RUFDbkMsSUFBTUMsQ0FBQyxHQUFHRCxNQUFNLElBQUksSUFBSSxHQUFHQSxNQUFNLEdBQUcsVUFBVTtFQUM5Q0UsT0FBTyxDQUFDQyxLQUFLLENBQUNGLENBQUMsRUFBRUosY0FBYyxDQUFDLENBQUMsQ0FBQztBQUNwQztBQUVBTyxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmZCxlQUFlLEVBQWZBLGVBQWU7RUFDZk0sY0FBYyxFQUFkQSxjQUFjO0VBQ2RFLGtCQUFrQixFQUFsQkE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljUmVwb3J0SGludC5qcz9iNTcxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZWZhdWx0IFVSTCBmb3IgYnVnIHJlcG9ydHMgKEh1YiArIGJyb3dzZXIgYnVuZGxlKS5cbiAqIE92ZXJyaWRlIHdpdGggRkFCUklDX0lTU1VFU19VUkwgKE5vZGUpIG9yIHdpbmRvdy5GQUJSSUNfSVNTVUVTX1VSTCAoYnJvd3NlcikuXG4gKi9cbmNvbnN0IERFRkFVTFRfSVNTVUVTX1VSTCA9ICdodHRwczovL2dpdGh1Yi5jb20vRmFicmljTGFicy9odWIuZmFicmljLnB1Yi9pc3N1ZXMnO1xuXG5mdW5jdGlvbiByZXBvcnRJc3N1ZXNVcmwgKCkge1xuICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LkZBQlJJQ19JU1NVRVNfVVJMKSB7XG4gICAgcmV0dXJuIFN0cmluZyhwcm9jZXNzLmVudi5GQUJSSUNfSVNTVUVTX1VSTCk7XG4gIH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5GQUJSSUNfSVNTVUVTX1VSTCkge1xuICAgIHJldHVybiBTdHJpbmcod2luZG93LkZBQlJJQ19JU1NVRVNfVVJMKTtcbiAgfVxuICByZXR1cm4gREVGQVVMVF9JU1NVRVNfVVJMO1xufVxuXG5mdW5jdGlvbiByZXBvcnRIaW50TGluZSAoKSB7XG4gIHJldHVybiBgSWYgdGhpcyBsb29rcyBsaWtlIGEgRmFicmljIGJ1ZywgcmVwb3J0IGl0IGF0OiAke3JlcG9ydElzc3Vlc1VybCgpfWA7XG59XG5cbi8qKlxuICogQWZ0ZXIgbG9nZ2luZyB0aGUgY3Jhc2gsIHByaW50IHdoZXJlIHRvIGZpbGUgYW4gaXNzdWUgKHNhbWUgY29uc29sZSBzdHJlYW0pLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwcmVmaXhdIC0gZS5nLiAnW0ZBQlJJQzpIVUJdJyBvciAnW0JSSURHRV0nXG4gKi9cbmZ1bmN0aW9uIGxvZ0NyYXNoUmVwb3J0SGludCAocHJlZml4KSB7XG4gIGNvbnN0IHAgPSBwcmVmaXggIT0gbnVsbCA/IHByZWZpeCA6ICdbRkFCUklDXSc7XG4gIGNvbnNvbGUuZXJyb3IocCwgcmVwb3J0SGludExpbmUoKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICByZXBvcnRJc3N1ZXNVcmwsXG4gIHJlcG9ydEhpbnRMaW5lLFxuICBsb2dDcmFzaFJlcG9ydEhpbnRcbn07XG4iXSwibmFtZXMiOlsiREVGQVVMVF9JU1NVRVNfVVJMIiwicmVwb3J0SXNzdWVzVXJsIiwicHJvY2VzcyIsImVudiIsIkZBQlJJQ19JU1NVRVNfVVJMIiwiU3RyaW5nIiwid2luZG93IiwicmVwb3J0SGludExpbmUiLCJjb25jYXQiLCJsb2dDcmFzaFJlcG9ydEhpbnQiLCJwcmVmaXgiLCJwIiwiY29uc29sZSIsImVycm9yIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/fabricReportHint.js\n\n}")},"./functions/fabricSafeLog.js"(module){"use strict";eval("{\n\n/**\n * Message-only string for logging crypto/identity failures — avoids printing full Error stacks\n * (paths, internals) to the browser console.\n * @param {unknown} err\n * @returns {string}\n */\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction safeIdentityErr(err) {\n if (err == null) return '';\n if (typeof err.message === 'string' && err.message) return err.message;\n try {\n return String(err);\n } catch (e) {\n return 'unknown';\n }\n}\n\n/**\n * Non-sensitive preview for dev-only UI (e.g. Bridge debug render). Avoids dumping full JSON\n * that may include message bodies or wallet-adjacent fields.\n * @param {unknown} value\n * @returns {string}\n */\nfunction safeDebugStatePreview(value) {\n if (value == null) return 'null';\n var t = _typeof(value);\n if (t !== 'object' || Array.isArray(value)) {\n return t;\n }\n try {\n var keys = Object.keys(value);\n return JSON.stringify({\n _type: 'object',\n keys: keys,\n keyCount: keys.length\n });\n } catch (e) {\n return 'object';\n }\n}\n\n/**\n * User-facing or Error message from API/unknown value without dumping full JSON (may include tokens, PSBT hints).\n * @param {unknown} val\n * @param {string} [fallback]\n * @returns {string}\n */\nfunction safeBriefMessage(val) {\n var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Request failed';\n if (val == null || val === '') return fallback;\n if (typeof val === 'string') return val;\n if (_typeof(val) === 'object') {\n if (typeof val.message === 'string' && val.message) return val.message;\n if (typeof val.error === 'string' && val.error) return val.error;\n }\n return fallback;\n}\n\n/**\n * Log-safe hub / WebSocket URL: host, port, path only — no query (tokens) or hash.\n * @param {unknown} raw\n * @returns {string}\n */\nfunction safeUrlForLog(raw) {\n var s = String(raw || '').trim();\n if (!s) return '(empty)';\n try {\n var withHttp = s.replace(/^wss:\\/\\//i, 'https://').replace(/^ws:\\/\\//i, 'http://');\n var u = new URL(withHttp);\n var host = u.hostname;\n var port = u.port ? \":\".concat(u.port) : '';\n var path = u.pathname && u.pathname !== '/' ? u.pathname : '';\n return \"\".concat(host).concat(port).concat(path);\n } catch (_) {\n return s.length > 72 ? \"\".concat(s.slice(0, 36), \"\\u2026(len \").concat(s.length, \")\") : s;\n }\n}\nmodule.exports = {\n safeIdentityErr: safeIdentityErr,\n safeDebugStatePreview: safeDebugStatePreview,\n safeBriefMessage: safeBriefMessage,\n safeUrlForLog: safeUrlForLog\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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R0FBR0YsQ0FBQyxDQUFDRyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDQSxPQUFPLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQztJQUNwRixJQUFNQyxDQUFDLEdBQUcsSUFBSUMsR0FBRyxDQUFDSCxRQUFRLENBQUM7SUFDM0IsSUFBTUksSUFBSSxHQUFHRixDQUFDLENBQUNHLFFBQVE7SUFDdkIsSUFBTUMsSUFBSSxHQUFHSixDQUFDLENBQUNJLElBQUksT0FBQUMsTUFBQSxDQUFPTCxDQUFDLENBQUNJLElBQUksSUFBSyxFQUFFO0lBQ3ZDLElBQU1FLElBQUksR0FBR04sQ0FBQyxDQUFDTyxRQUFRLElBQUlQLENBQUMsQ0FBQ08sUUFBUSxLQUFLLEdBQUcsR0FBR1AsQ0FBQyxDQUFDTyxRQUFRLEdBQUcsRUFBRTtJQUMvRCxVQUFBRixNQUFBLENBQVVILElBQUksRUFBQUcsTUFBQSxDQUFHRCxJQUFJLEVBQUFDLE1BQUEsQ0FBR0MsSUFBSTtFQUM5QixDQUFDLENBQUMsT0FBT0UsQ0FBQyxFQUFFO0lBQ1YsT0FBT1osQ0FBQyxDQUFDVCxNQUFNLEdBQUcsRUFBRSxNQUFBa0IsTUFBQSxDQUFNVCxDQUFDLENBQUNhLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFBSixNQUFBLENBQVNULENBQUMsQ0FBQ1QsTUFBTSxTQUFNUyxDQUFDO0VBQ2xFO0FBQ0Y7QUFFQWMsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZnhDLGVBQWUsRUFBZkEsZUFBZTtFQUNmSyxxQkFBcUIsRUFBckJBLHFCQUFxQjtFQUNyQlksZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7RUFDaEJNLGFBQWEsRUFBYkE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZmFicmljU2FmZUxvZy5qcz9jOTAzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBNZXNzYWdlLW9ubHkgc3RyaW5nIGZvciBsb2dnaW5nIGNyeXB0by9pZGVudGl0eSBmYWlsdXJlcyDigJQgYXZvaWRzIHByaW50aW5nIGZ1bGwgRXJyb3Igc3RhY2tzXG4gKiAocGF0aHMsIGludGVybmFscykgdG8gdGhlIGJyb3dzZXIgY29uc29sZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzYWZlSWRlbnRpdHlFcnIgKGVycikge1xuICBpZiAoZXJyID09IG51bGwpIHJldHVybiAnJztcbiAgaWYgKHR5cGVvZiBlcnIubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgZXJyLm1lc3NhZ2UpIHJldHVybiBlcnIubWVzc2FnZTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gU3RyaW5nKGVycik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gJ3Vua25vd24nO1xuICB9XG59XG5cbi8qKlxuICogTm9uLXNlbnNpdGl2ZSBwcmV2aWV3IGZvciBkZXYtb25seSBVSSAoZS5nLiBCcmlkZ2UgZGVidWcgcmVuZGVyKS4gQXZvaWRzIGR1bXBpbmcgZnVsbCBKU09OXG4gKiB0aGF0IG1heSBpbmNsdWRlIG1lc3NhZ2UgYm9kaWVzIG9yIHdhbGxldC1hZGphY2VudCBmaWVsZHMuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzYWZlRGVidWdTdGF0ZVByZXZpZXcgKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICBjb25zdCB0ID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdDtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgX3R5cGU6ICdvYmplY3QnLCBrZXlzLCBrZXlDb3VudDoga2V5cy5sZW5ndGggfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gJ29iamVjdCc7XG4gIH1cbn1cblxuLyoqXG4gKiBVc2VyLWZhY2luZyBvciBFcnJvciBtZXNzYWdlIGZyb20gQVBJL3Vua25vd24gdmFsdWUgd2l0aG91dCBkdW1waW5nIGZ1bGwgSlNPTiAobWF5IGluY2x1ZGUgdG9rZW5zLCBQU0JUIGhpbnRzKS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZhbGxiYWNrXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc2FmZUJyaWVmTWVzc2FnZSAodmFsLCBmYWxsYmFjayA9ICdSZXF1ZXN0IGZhaWxlZCcpIHtcbiAgaWYgKHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gJycpIHJldHVybiBmYWxsYmFjaztcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAodHlwZW9mIHZhbC5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiB2YWwubWVzc2FnZSkgcmV0dXJuIHZhbC5tZXNzYWdlO1xuICAgIGlmICh0eXBlb2YgdmFsLmVycm9yID09PSAnc3RyaW5nJyAmJiB2YWwuZXJyb3IpIHJldHVybiB2YWwuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIGZhbGxiYWNrO1xufVxuXG4vKipcbiAqIExvZy1zYWZlIGh1YiAvIFdlYlNvY2tldCBVUkw6IGhvc3QsIHBvcnQsIHBhdGggb25seSDigJQgbm8gcXVlcnkgKHRva2Vucykgb3IgaGFzaC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcmF3XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzYWZlVXJsRm9yTG9nIChyYXcpIHtcbiAgY29uc3QgcyA9IFN0cmluZyhyYXcgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFzKSByZXR1cm4gJyhlbXB0eSknO1xuICB0cnkge1xuICAgIGNvbnN0IHdpdGhIdHRwID0gcy5yZXBsYWNlKC9ed3NzOlxcL1xcLy9pLCAnaHR0cHM6Ly8nKS5yZXBsYWNlKC9ed3M6XFwvXFwvL2ksICdodHRwOi8vJyk7XG4gICAgY29uc3QgdSA9IG5ldyBVUkwod2l0aEh0dHApO1xuICAgIGNvbnN0IGhvc3QgPSB1Lmhvc3RuYW1lO1xuICAgIGNvbnN0IHBvcnQgPSB1LnBvcnQgPyBgOiR7dS5wb3J0fWAgOiAnJztcbiAgICBjb25zdCBwYXRoID0gdS5wYXRobmFtZSAmJiB1LnBhdGhuYW1lICE9PSAnLycgPyB1LnBhdGhuYW1lIDogJyc7XG4gICAgcmV0dXJuIGAke2hvc3R9JHtwb3J0fSR7cGF0aH1gO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoID4gNzIgPyBgJHtzLnNsaWNlKDAsIDM2KX3igKYobGVuICR7cy5sZW5ndGh9KWAgOiBzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzYWZlSWRlbnRpdHlFcnIsXG4gIHNhZmVEZWJ1Z1N0YXRlUHJldmlldyxcbiAgc2FmZUJyaWVmTWVzc2FnZSxcbiAgc2FmZVVybEZvckxvZ1xufTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJzYWZlSWRlbnRpdHlFcnIiLCJlcnIiLCJtZXNzYWdlIiwiU3RyaW5nIiwiZSIsInNhZmVEZWJ1Z1N0YXRlUHJldmlldyIsInZhbHVlIiwidCIsIkFycmF5IiwiaXNBcnJheSIsImtleXMiLCJPYmplY3QiLCJKU09OIiwic3RyaW5naWZ5IiwiX3R5cGUiLCJrZXlDb3VudCIsImxlbmd0aCIsInNhZmVCcmllZk1lc3NhZ2UiLCJ2YWwiLCJmYWxsYmFjayIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImVycm9yIiwic2FmZVVybEZvckxvZyIsInJhdyIsInMiLCJ0cmltIiwid2l0aEh0dHAiLCJyZXBsYWNlIiwidSIsIlVSTCIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJjb25jYXQiLCJwYXRoIiwicGF0aG5hbWUiLCJfIiwic2xpY2UiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/fabricSafeLog.js\n\n}")},"./functions/fabricTransportSession.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer;\n\n\n/**\n * Per-transport Fabric session: Merkle tree + ordered commitment chain over inbound\n * AMP {@link Message} bodies so browser-side sequencing matches hub/Federation expectations.\n * Reputation fields mirror {@link Peer} wire budget semantics at a coarse level.\n */\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nvar Tree = __webpack_require__(/*! @fabric/core/types/tree */ "./node_modules/@fabric/core/types/tree.js");\nvar Hash256 = __webpack_require__(/*! @fabric/core/types/hash256 */ "./node_modules/@fabric/core/types/hash256.js");\nvar _require = __webpack_require__(/*! @fabric/core/constants */ "./node_modules/@fabric/core/constants.js"),\n HEADER_SIZE = _require.HEADER_SIZE;\n\n/** Stable id for the browser ↔ hub WebSocket leg (this Bridge instance). */\nvar HUB_FABRIC_SESSION_ID = \'fabric:hub-websocket\';\nvar SESSION_KIND_HUB = \'hub_websocket\';\nvar SESSION_KIND_WEBRTC = \'webrtc_mesh\';\n\n/** Match WebRTC binary cap in Bridge — hub JSONCall payloads can exceed core MAX_MESSAGE_SIZE. */\nvar BRIDGE_INBOUND_WIRE_MAX_BYTES = 8 * 1024 * 1024;\n\n/**\n * Body integrity: header `hash` must be double-SHA256(body), same as {@link Peer#_handleFabricMessage}.\n * @param {*} message\n * @returns {boolean}\n */\nfunction fabricWireBodyIntegrityOk(message) {\n if (!message || !message.raw) return false;\n var bodyBuf = message.raw.data || Buffer.alloc(0);\n var checksum = Hash256.doubleDigest(bodyBuf);\n var expectedHash = Buffer.isBuffer(message.raw.hash) ? message.raw.hash.toString(\'hex\') : String(message.raw.hash || \'\');\n return checksum === expectedHash;\n}\nvar FabricTransportSession = /*#__PURE__*/function () {\n /**\n * @param {string} sessionId\n * @param {\'hub_websocket\'|\'webrtc_mesh\'} kind\n */\n function FabricTransportSession(sessionId, kind) {\n _classCallCheck(this, FabricTransportSession);\n this.sessionId = String(sessionId);\n this.kind = kind;\n this.score = 100;\n this.misbehavior = 0;\n this.updatedAt = Date.now();\n /** @type {import(\'@fabric/core/types/tree\')|null} */\n this._tree = null;\n /**\n * Ordered commitments (Federation-style deterministic append log).\n * Each entry: body double-SHA256 leaf + Merkle root after append.\n * @type {{ seq: number, leafHex: string, merkleRootHex: string|null, wireType: string, at: number }[]}\n */\n this.chain = [];\n this._seq = 0;\n }\n return _createClass(FabricTransportSession, [{\n key: "reward",\n value: function reward(delta) {\n var d = Number.isFinite(delta) && delta > 0 ? delta : 1;\n this.score = Math.min(1000, (Number(this.score) || 0) + d);\n this.misbehavior = Math.max(0, (Number(this.misbehavior) || 0) - 1);\n this.updatedAt = Date.now();\n }\n\n /**\n * @param {*} message — Fabric {@link Message} after `fromBuffer`\n * @returns {{ seq: number, leafHex: string, merkleRootHex: string|null, wireType: string, at: number }}\n */\n }, {\n key: "commitWireMessage",\n value: function commitWireMessage(message) {\n var bodyBuf = message.raw && message.raw.data ? message.raw.data : Buffer.alloc(0);\n var leafHex = Hash256.doubleDigest(bodyBuf);\n this._seq += 1;\n if (!this._tree) {\n this._tree = new Tree({\n leaves: [leafHex]\n });\n } else {\n this._tree.addLeaf(leafHex);\n }\n var root = this._tree && this._tree.root;\n var merkleRootHex = Buffer.isBuffer(root) ? root.toString(\'hex\') : root != null ? String(root) : null;\n var entry = {\n seq: this._seq,\n leafHex: leafHex,\n merkleRootHex: merkleRootHex,\n wireType: message.type || \'\',\n at: Date.now()\n };\n this.chain.push(entry);\n this.updatedAt = Date.now();\n return entry;\n }\n }, {\n key: "getMerkleRootHex",\n value: function getMerkleRootHex() {\n if (!this._tree || !this._tree.root) return null;\n var root = this._tree.root;\n return Buffer.isBuffer(root) ? root.toString(\'hex\') : String(root);\n }\n\n /**\n * @param {number} penalty\n * @returns {{ disconnect: boolean, score: number, misbehavior: number }}\n */\n }, {\n key: "penalize",\n value: function penalize(penalty) {\n var pen = Number.isFinite(penalty) && penalty > 0 ? penalty : 20;\n this.score = Math.max(0, (Number(this.score) || 0) - pen);\n var bump = Math.max(1, Math.min(100, Math.ceil(pen / 2)));\n this.misbehavior = Math.min(100, (Number(this.misbehavior) || 0) + bump);\n this.updatedAt = Date.now();\n var disconnect = this.score <= 0 || this.misbehavior >= 80;\n return {\n disconnect: disconnect,\n score: this.score,\n misbehavior: this.misbehavior\n };\n }\n }]);\n}();\nmodule.exports = {\n HUB_FABRIC_SESSION_ID: HUB_FABRIC_SESSION_ID,\n SESSION_KIND_HUB: SESSION_KIND_HUB,\n SESSION_KIND_WEBRTC: SESSION_KIND_WEBRTC,\n fabricWireBodyIntegrityOk: fabricWireBodyIntegrityOk,\n HEADER_SIZE: HEADER_SIZE,\n BRIDGE_INBOUND_WIRE_MAX_BYTES: BRIDGE_INBOUND_WIRE_MAX_BYTES,\n FabricTransportSession: FabricTransportSession\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0VBQ1hJLDZCQUE2QixFQUE3QkEsNkJBQTZCO0VBQzdCYyxzQkFBc0IsRUFBdEJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2ZhYnJpY1RyYW5zcG9ydFNlc3Npb24uanM/OGE3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUGVyLXRyYW5zcG9ydCBGYWJyaWMgc2Vzc2lvbjogTWVya2xlIHRyZWUgKyBvcmRlcmVkIGNvbW1pdG1lbnQgY2hhaW4gb3ZlciBpbmJvdW5kXG4gKiBBTVAge0BsaW5rIE1lc3NhZ2V9IGJvZGllcyBzbyBicm93c2VyLXNpZGUgc2VxdWVuY2luZyBtYXRjaGVzIGh1Yi9GZWRlcmF0aW9uIGV4cGVjdGF0aW9ucy5cbiAqIFJlcHV0YXRpb24gZmllbGRzIG1pcnJvciB7QGxpbmsgUGVlcn0gd2lyZSBidWRnZXQgc2VtYW50aWNzIGF0IGEgY29hcnNlIGxldmVsLlxuICovXG5cbmNvbnN0IFRyZWUgPSByZXF1aXJlKCdAZmFicmljL2NvcmUvdHlwZXMvdHJlZScpO1xuY29uc3QgSGFzaDI1NiA9IHJlcXVpcmUoJ0BmYWJyaWMvY29yZS90eXBlcy9oYXNoMjU2Jyk7XG5jb25zdCB7IEhFQURFUl9TSVpFIH0gPSByZXF1aXJlKCdAZmFicmljL2NvcmUvY29uc3RhbnRzJyk7XG5cbi8qKiBTdGFibGUgaWQgZm9yIHRoZSBicm93c2VyIOKGlCBodWIgV2ViU29ja2V0IGxlZyAodGhpcyBCcmlkZ2UgaW5zdGFuY2UpLiAqL1xuY29uc3QgSFVCX0ZBQlJJQ19TRVNTSU9OX0lEID0gJ2ZhYnJpYzpodWItd2Vic29ja2V0JztcblxuY29uc3QgU0VTU0lPTl9LSU5EX0hVQiA9ICdodWJfd2Vic29ja2V0JztcbmNvbnN0IFNFU1NJT05fS0lORF9XRUJSVEMgPSAnd2VicnRjX21lc2gnO1xuXG4vKiogTWF0Y2ggV2ViUlRDIGJpbmFyeSBjYXAgaW4gQnJpZGdlIOKAlCBodWIgSlNPTkNhbGwgcGF5bG9hZHMgY2FuIGV4Y2VlZCBjb3JlIE1BWF9NRVNTQUdFX1NJWkUuICovXG5jb25zdCBCUklER0VfSU5CT1VORF9XSVJFX01BWF9CWVRFUyA9IDggKiAxMDI0ICogMTAyNDtcblxuLyoqXG4gKiBCb2R5IGludGVncml0eTogaGVhZGVyIGBoYXNoYCBtdXN0IGJlIGRvdWJsZS1TSEEyNTYoYm9keSksIHNhbWUgYXMge0BsaW5rIFBlZXIjX2hhbmRsZUZhYnJpY01lc3NhZ2V9LlxuICogQHBhcmFtIHsqfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZmFicmljV2lyZUJvZHlJbnRlZ3JpdHlPayAobWVzc2FnZSkge1xuICBpZiAoIW1lc3NhZ2UgfHwgIW1lc3NhZ2UucmF3KSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGJvZHlCdWYgPSBtZXNzYWdlLnJhdy5kYXRhIHx8IEJ1ZmZlci5hbGxvYygwKTtcbiAgY29uc3QgY2hlY2tzdW0gPSBIYXNoMjU2LmRvdWJsZURpZ2VzdChib2R5QnVmKTtcbiAgY29uc3QgZXhwZWN0ZWRIYXNoID0gQnVmZmVyLmlzQnVmZmVyKG1lc3NhZ2UucmF3Lmhhc2gpXG4gICAgPyBtZXNzYWdlLnJhdy5oYXNoLnRvU3RyaW5nKCdoZXgnKVxuICAgIDogU3RyaW5nKG1lc3NhZ2UucmF3Lmhhc2ggfHwgJycpO1xuICByZXR1cm4gY2hlY2tzdW0gPT09IGV4cGVjdGVkSGFzaDtcbn1cblxuY2xhc3MgRmFicmljVHJhbnNwb3J0U2Vzc2lvbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkXG4gICAqIEBwYXJhbSB7J2h1Yl93ZWJzb2NrZXQnfCd3ZWJydGNfbWVzaCd9IGtpbmRcbiAgICovXG4gIGNvbnN0cnVjdG9yIChzZXNzaW9uSWQsIGtpbmQpIHtcbiAgICB0aGlzLnNlc3Npb25JZCA9IFN0cmluZyhzZXNzaW9uSWQpO1xuICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgdGhpcy5zY29yZSA9IDEwMDtcbiAgICB0aGlzLm1pc2JlaGF2aW9yID0gMDtcbiAgICB0aGlzLnVwZGF0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJ0BmYWJyaWMvY29yZS90eXBlcy90cmVlJyl8bnVsbH0gKi9cbiAgICB0aGlzLl90cmVlID0gbnVsbDtcbiAgICAvKipcbiAgICAgKiBPcmRlcmVkIGNvbW1pdG1lbnRzIChGZWRlcmF0aW9uLXN0eWxlIGRldGVybWluaXN0aWMgYXBwZW5kIGxvZykuXG4gICAgICogRWFjaCBlbnRyeTogYm9keSBkb3VibGUtU0hBMjU2IGxlYWYgKyBNZXJrbGUgcm9vdCBhZnRlciBhcHBlbmQuXG4gICAgICogQHR5cGUge3sgc2VxOiBudW1iZXIsIGxlYWZIZXg6IHN0cmluZywgbWVya2xlUm9vdEhleDogc3RyaW5nfG51bGwsIHdpcmVUeXBlOiBzdHJpbmcsIGF0OiBudW1iZXIgfVtdfVxuICAgICAqL1xuICAgIHRoaXMuY2hhaW4gPSBbXTtcbiAgICB0aGlzLl9zZXEgPSAwO1xuICB9XG5cbiAgcmV3YXJkIChkZWx0YSkge1xuICAgIGNvbnN0IGQgPSBOdW1iZXIuaXNGaW5pdGUoZGVsdGEpICYmIGRlbHRhID4gMCA/IGRlbHRhIDogMTtcbiAgICB0aGlzLnNjb3JlID0gTWF0aC5taW4oMTAwMCwgKE51bWJlcih0aGlzLnNjb3JlKSB8fCAwKSArIGQpO1xuICAgIHRoaXMubWlzYmVoYXZpb3IgPSBNYXRoLm1heCgwLCAoTnVtYmVyKHRoaXMubWlzYmVoYXZpb3IpIHx8IDApIC0gMSk7XG4gICAgdGhpcy51cGRhdGVkQXQgPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gbWVzc2FnZSDigJQgRmFicmljIHtAbGluayBNZXNzYWdlfSBhZnRlciBgZnJvbUJ1ZmZlcmBcbiAgICogQHJldHVybnMge3sgc2VxOiBudW1iZXIsIGxlYWZIZXg6IHN0cmluZywgbWVya2xlUm9vdEhleDogc3RyaW5nfG51bGwsIHdpcmVUeXBlOiBzdHJpbmcsIGF0OiBudW1iZXIgfX1cbiAgICovXG4gIGNvbW1pdFdpcmVNZXNzYWdlIChtZXNzYWdlKSB7XG4gICAgY29uc3QgYm9keUJ1ZiA9IG1lc3NhZ2UucmF3ICYmIG1lc3NhZ2UucmF3LmRhdGEgPyBtZXNzYWdlLnJhdy5kYXRhIDogQnVmZmVyLmFsbG9jKDApO1xuICAgIGNvbnN0IGxlYWZIZXggPSBIYXNoMjU2LmRvdWJsZURpZ2VzdChib2R5QnVmKTtcbiAgICB0aGlzLl9zZXEgKz0gMTtcbiAgICBpZiAoIXRoaXMuX3RyZWUpIHtcbiAgICAgIHRoaXMuX3RyZWUgPSBuZXcgVHJlZSh7IGxlYXZlczogW2xlYWZIZXhdIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90cmVlLmFkZExlYWYobGVhZkhleCk7XG4gICAgfVxuICAgIGNvbnN0IHJvb3QgPSB0aGlzLl90cmVlICYmIHRoaXMuX3RyZWUucm9vdDtcbiAgICBjb25zdCBtZXJrbGVSb290SGV4ID0gQnVmZmVyLmlzQnVmZmVyKHJvb3QpXG4gICAgICA/IHJvb3QudG9TdHJpbmcoJ2hleCcpXG4gICAgICA6IChyb290ICE9IG51bGwgPyBTdHJpbmcocm9vdCkgOiBudWxsKTtcbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgIHNlcTogdGhpcy5fc2VxLFxuICAgICAgbGVhZkhleCxcbiAgICAgIG1lcmtsZVJvb3RIZXgsXG4gICAgICB3aXJlVHlwZTogbWVzc2FnZS50eXBlIHx8ICcnLFxuICAgICAgYXQ6IERhdGUubm93KClcbiAgICB9O1xuICAgIHRoaXMuY2hhaW4ucHVzaChlbnRyeSk7XG4gICAgdGhpcy51cGRhdGVkQXQgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIGdldE1lcmtsZVJvb3RIZXggKCkge1xuICAgIGlmICghdGhpcy5fdHJlZSB8fCAhdGhpcy5fdHJlZS5yb290KSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByb290ID0gdGhpcy5fdHJlZS5yb290O1xuICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIocm9vdCkgPyByb290LnRvU3RyaW5nKCdoZXgnKSA6IFN0cmluZyhyb290KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGVuYWx0eVxuICAgKiBAcmV0dXJucyB7eyBkaXNjb25uZWN0OiBib29sZWFuLCBzY29yZTogbnVtYmVyLCBtaXNiZWhhdmlvcjogbnVtYmVyIH19XG4gICAqL1xuICBwZW5hbGl6ZSAocGVuYWx0eSkge1xuICAgIGNvbnN0IHBlbiA9IE51bWJlci5pc0Zpbml0ZShwZW5hbHR5KSAmJiBwZW5hbHR5ID4gMCA/IHBlbmFsdHkgOiAyMDtcbiAgICB0aGlzLnNjb3JlID0gTWF0aC5tYXgoMCwgKE51bWJlcih0aGlzLnNjb3JlKSB8fCAwKSAtIHBlbik7XG4gICAgY29uc3QgYnVtcCA9IE1hdGgubWF4KDEsIE1hdGgubWluKDEwMCwgTWF0aC5jZWlsKHBlbiAvIDIpKSk7XG4gICAgdGhpcy5taXNiZWhhdmlvciA9IE1hdGgubWluKDEwMCwgKE51bWJlcih0aGlzLm1pc2JlaGF2aW9yKSB8fCAwKSArIGJ1bXApO1xuICAgIHRoaXMudXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkaXNjb25uZWN0ID0gdGhpcy5zY29yZSA8PSAwIHx8IHRoaXMubWlzYmVoYXZpb3IgPj0gODA7XG4gICAgcmV0dXJuIHsgZGlzY29ubmVjdCwgc2NvcmU6IHRoaXMuc2NvcmUsIG1pc2JlaGF2aW9yOiB0aGlzLm1pc2JlaGF2aW9yIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEhVQl9GQUJSSUNfU0VTU0lPTl9JRCxcbiAgU0VTU0lPTl9LSU5EX0hVQixcbiAgU0VTU0lPTl9LSU5EX1dFQlJUQyxcbiAgZmFicmljV2lyZUJvZHlJbnRlZ3JpdHlPayxcbiAgSEVBREVSX1NJWkUsXG4gIEJSSURHRV9JTkJPVU5EX1dJUkVfTUFYX0JZVEVTLFxuICBGYWJyaWNUcmFuc3BvcnRTZXNzaW9uXG59O1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9jbGFzc0NhbGxDaGVjayIsImEiLCJuIiwiVHlwZUVycm9yIiwiX2RlZmluZVByb3BlcnRpZXMiLCJlIiwiciIsInQiLCJsZW5ndGgiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiaSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlN0cmluZyIsIk51bWJlciIsIlRyZWUiLCJyZXF1aXJlIiwiSGFzaDI1NiIsIl9yZXF1aXJlIiwiSEVBREVSX1NJWkUiLCJIVUJfRkFCUklDX1NFU1NJT05fSUQiLCJTRVNTSU9OX0tJTkRfSFVCIiwiU0VTU0lPTl9LSU5EX1dFQlJUQyIsIkJSSURHRV9JTkJPVU5EX1dJUkVfTUFYX0JZVEVTIiwiZmFicmljV2lyZUJvZHlJbnRlZ3JpdHlPayIsIm1lc3NhZ2UiLCJyYXciLCJib2R5QnVmIiwiZGF0YSIsIkJ1ZmZlciIsImFsbG9jIiwiY2hlY2tzdW0iLCJkb3VibGVEaWdlc3QiLCJleHBlY3RlZEhhc2giLCJpc0J1ZmZlciIsImhhc2giLCJ0b1N0cmluZyIsIkZhYnJpY1RyYW5zcG9ydFNlc3Npb24iLCJzZXNzaW9uSWQiLCJraW5kIiwic2NvcmUiLCJtaXNiZWhhdmlvciIsInVwZGF0ZWRBdCIsIkRhdGUiLCJub3ciLCJfdHJlZSIsImNoYWluIiwiX3NlcSIsInZhbHVlIiwicmV3YXJkIiwiZGVsdGEiLCJkIiwiaXNGaW5pdGUiLCJNYXRoIiwibWluIiwibWF4IiwiY29tbWl0V2lyZU1lc3NhZ2UiLCJsZWFmSGV4IiwibGVhdmVzIiwiYWRkTGVhZiIsInJvb3QiLCJtZXJrbGVSb290SGV4IiwiZW50cnkiLCJzZXEiLCJ3aXJlVHlwZSIsInR5cGUiLCJhdCIsInB1c2giLCJnZXRNZXJrbGVSb290SGV4IiwicGVuYWxpemUiLCJwZW5hbHR5IiwicGVuIiwiYnVtcCIsImNlaWwiLCJkaXNjb25uZWN0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/fabricTransportSession.js\n\n}')},"./functions/federationContractInvite.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Thin re-export — invite JSON parse/build lives in `@fabric/http`.\n * Keep JSON bridges out of `@fabric/core`; Hub and applications share one shape.\n *\n * @see @fabric/http/functions/federationContractInvite\n */\nmodule.exports = __webpack_require__(/*! @fabric/http/functions/federationContractInvite */ "./node_modules/@fabric/http/functions/federationContractInvite.js");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBQSxnS0FBMkUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9mZWRlcmF0aW9uQ29udHJhY3RJbnZpdGUuanM/YTg5MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVGhpbiByZS1leHBvcnQg4oCUIGludml0ZSBKU09OIHBhcnNlL2J1aWxkIGxpdmVzIGluIGBAZmFicmljL2h0dHBgLlxuICogS2VlcCBKU09OIGJyaWRnZXMgb3V0IG9mIGBAZmFicmljL2NvcmVgOyBIdWIgYW5kIGFwcGxpY2F0aW9ucyBzaGFyZSBvbmUgc2hhcGUuXG4gKlxuICogQHNlZSBAZmFicmljL2h0dHAvZnVuY3Rpb25zL2ZlZGVyYXRpb25Db250cmFjdEludml0ZVxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnQGZhYnJpYy9odHRwL2Z1bmN0aW9ucy9mZWRlcmF0aW9uQ29udHJhY3RJbnZpdGUnKTtcbiJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/federationContractInvite.js\n\n}')},"./functions/federationSpendingPrefs.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ "./functions/fabricBrowserState.js"),\n readStorageJSON = _require.readStorageJSON,\n writeStorageJSON = _require.writeStorageJSON;\n\n/**\n * Browser-only draft for how a federation should treat spends (human text).\n * Not enforced by the hub — used for operator notes / payment memos and UI hints.\n */\nvar STORAGE_KEY = \'fabric.hub.federationSpendingPrefs\';\nvar CHANGED_EVENT = \'fabricFederationSpendingPrefsChanged\';\nfunction defaultPrefs() {\n return {\n spendingCriteriaDraft: \'\',\n /** When true, Federations / wallet UIs show the drafting textarea by default. */\n draftingUiOpen: false\n };\n}\nfunction loadFederationSpendingPrefs() {\n if (typeof window === \'undefined\') return defaultPrefs();\n try {\n var p = readStorageJSON(STORAGE_KEY, null);\n if (!p || _typeof(p) !== \'object\') return defaultPrefs();\n return _objectSpread(_objectSpread({}, defaultPrefs()), {}, {\n spendingCriteriaDraft: typeof p.spendingCriteriaDraft === \'string\' ? p.spendingCriteriaDraft : \'\',\n draftingUiOpen: !!p.draftingUiOpen\n });\n } catch (_) {\n return defaultPrefs();\n }\n}\nfunction saveFederationSpendingPrefs(patch) {\n if (typeof window === \'undefined\') return loadFederationSpendingPrefs();\n var cur = loadFederationSpendingPrefs();\n var next = _objectSpread(_objectSpread({}, cur), patch && _typeof(patch) === \'object\' ? patch : {});\n try {\n writeStorageJSON(STORAGE_KEY, next);\n window.dispatchEvent(new CustomEvent(CHANGED_EVENT, {\n detail: next\n }));\n } catch (_) {/* ignore */}\n return next;\n}\n\n/**\n * @param {ReturnType} prefs\n * @returns {string} Non-empty memo fragment for hub sendpayment memo field\n */\nfunction federationMemoFragmentFromPrefs(prefs) {\n var d = prefs && typeof prefs.spendingCriteriaDraft === \'string\' ? prefs.spendingCriteriaDraft.trim() : \'\';\n if (!d) return \'\';\n var max = 500;\n var body = d.length > max ? "".concat(d.slice(0, max), "\\u2026") : d;\n return "[Fabric federation spending criteria] ".concat(body);\n}\n\n/**\n * @param {string} userMemo\n * @param {ReturnType} prefs\n * @param {boolean} attachFederationContext\n */\nfunction mergePaymentMemoWithFederation(userMemo, prefs, attachFederationContext) {\n var base = String(userMemo || \'\').trim();\n var tag = attachFederationContext ? federationMemoFragmentFromPrefs(prefs) : \'\';\n if (!tag) return base;\n if (!base) return tag;\n return "".concat(base, " | ").concat(tag);\n}\nfunction subscribeFederationSpendingPrefs(fn) {\n if (typeof window === \'undefined\') return function () {};\n var h = function h() {\n return fn(loadFederationSpendingPrefs());\n };\n window.addEventListener(CHANGED_EVENT, h);\n return function () {\n return window.removeEventListener(CHANGED_EVENT, h);\n };\n}\nmodule.exports = {\n loadFederationSpendingPrefs: loadFederationSpendingPrefs,\n saveFederationSpendingPrefs: saveFederationSpendingPrefs,\n federationMemoFragmentFromPrefs: federationMemoFragmentFromPrefs,\n mergePaymentMemoWithFederation: mergePaymentMemoWithFederation,\n subscribeFederationSpendingPrefs: subscribeFederationSpendingPrefs,\n FEDERATION_SPENDING_PREFS_CHANGED: CHANGED_EVENT\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZmVkZXJhdGlvblNwZW5kaW5nUHJlZnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBQUEsU0FBQUEsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBZSxlQUFBLENBQUFoQixDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFFLE1BQUEsQ0FBQWMseUJBQUEsR0FBQWQsTUFBQSxDQUFBZSxnQkFBQSxDQUFBbEIsQ0FBQSxFQUFBRyxNQUFBLENBQUFjLHlCQUFBLENBQUFmLENBQUEsS0FBQUgsT0FBQSxDQUFBSSxNQUFBLENBQUFELENBQUEsR0FBQWEsT0FBQSxXQUFBZCxDQUFBLElBQUFFLE1BQUEsQ0FBQWdCLGNBQUEsQ0FBQW5CLENBQUEsRUFBQUMsQ0FBQSxFQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFOLENBQUEsRUFBQUQsQ0FBQSxpQkFBQUQs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UyxHQUFHLEdBQUdGLHVCQUF1QixHQUFHViwrQkFBK0IsQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsRUFBRTtFQUNqRixJQUFJLENBQUNXLEdBQUcsRUFBRSxPQUFPRCxJQUFJO0VBQ3JCLElBQUksQ0FBQ0EsSUFBSSxFQUFFLE9BQU9DLEdBQUc7RUFDckIsVUFBQU4sTUFBQSxDQUFVSyxJQUFJLFNBQUFMLE1BQUEsQ0FBTU0sR0FBRztBQUN6QjtBQUVBLFNBQVNDLGdDQUFnQ0EsQ0FBRUMsRUFBRSxFQUFFO0VBQzdDLElBQUksT0FBT3hCLE1BQU0sS0FBSyxXQUFXLEVBQUUsT0FBTyxZQUFNLENBQUMsQ0FBQztFQUNsRCxJQUFNeUIsQ0FBQyxHQUFHLFNBQUpBLENBQUNBLENBQUE7SUFBQSxPQUFTRCxFQUFFLENBQUN6QiwyQkFBMkIsQ0FBQyxDQUFDLENBQUM7RUFBQTtFQUNqREMsTUFBTSxDQUFDMEIsZ0JBQWdCLENBQUMvQixhQUFhLEVBQUU4QixDQUFDLENBQUM7RUFDekMsT0FBTztJQUFBLE9BQU16QixNQUFNLENBQUMyQixtQkFBbUIsQ0FBQ2hDLGFBQWEsRUFBRThCLENBQUMsQ0FBQztFQUFBO0FBQzNEO0FBRUFHLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2Y5QiwyQkFBMkIsRUFBM0JBLDJCQUEyQjtFQUMzQkksMkJBQTJCLEVBQTNCQSwyQkFBMkI7RUFDM0JPLCtCQUErQixFQUEvQkEsK0JBQStCO0VBQy9CUSw4QkFBOEIsRUFBOUJBLDhCQUE4QjtFQUM5QkssZ0NBQWdDLEVBQWhDQSxnQ0FBZ0M7RUFDaENPLGlDQUFpQyxFQUFFbkM7QUFDckMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2ZlZGVyYXRpb25TcGVuZGluZ1ByZWZzLmpzPzE3NTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7XG4gIHJlYWRTdG9yYWdlSlNPTixcbiAgd3JpdGVTdG9yYWdlSlNPTlxufSA9IHJlcXVpcmUoJy4vZmFicmljQnJvd3NlclN0YXRlJyk7XG5cbi8qKlxuICogQnJvd3Nlci1vbmx5IGRyYWZ0IGZvciBob3cgYSBmZWRlcmF0aW9uIHNob3VsZCB0cmVhdCBzcGVuZHMgKGh1bWFuIHRleHQpLlxuICogTm90IGVuZm9yY2VkIGJ5IHRoZSBodWIg4oCUIHVzZWQgZm9yIG9wZXJhdG9yIG5vdGVzIC8gcGF5bWVudCBtZW1vcyBhbmQgVUkgaGludHMuXG4gKi9cbmNvbnN0IFNUT1JBR0VfS0VZID0gJ2ZhYnJpYy5odWIuZmVkZXJhdGlvblNwZW5kaW5nUHJlZnMnO1xuY29uc3QgQ0hBTkdFRF9FVkVOVCA9ICdmYWJyaWNGZWRlcmF0aW9uU3BlbmRpbmdQcmVmc0NoYW5nZWQnO1xuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZnMgKCkge1xuICByZXR1cm4ge1xuICAgIHNwZW5kaW5nQ3JpdGVyaWFEcmFmdDogJycsXG4gICAgLyoqIFdoZW4gdHJ1ZSwgRmVkZXJhdGlvbnMgLyB3YWxsZXQgVUlzIHNob3cgdGhlIGRyYWZ0aW5nIHRleHRhcmVhIGJ5IGRlZmF1bHQuICovXG4gICAgZHJhZnRpbmdVaU9wZW46IGZhbHNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIGxvYWRGZWRlcmF0aW9uU3BlbmRpbmdQcmVmcyAoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGRlZmF1bHRQcmVmcygpO1xuICB0cnkge1xuICAgIGNvbnN0IHAgPSByZWFkU3RvcmFnZUpTT04oU1RPUkFHRV9LRVksIG51bGwpO1xuICAgIGlmICghcCB8fCB0eXBlb2YgcCAhPT0gJ29iamVjdCcpIHJldHVybiBkZWZhdWx0UHJlZnMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdFByZWZzKCksXG4gICAgICBzcGVuZGluZ0NyaXRlcmlhRHJhZnQ6IHR5cGVvZiBwLnNwZW5kaW5nQ3JpdGVyaWFEcmFmdCA9PT0gJ3N0cmluZycgPyBwLnNwZW5kaW5nQ3JpdGVyaWFEcmFmdCA6ICcnLFxuICAgICAgZHJhZnRpbmdVaU9wZW46ICEhcC5kcmFmdGluZ1VpT3BlblxuICAgIH07XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZGVmYXVsdFByZWZzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2F2ZUZlZGVyYXRpb25TcGVuZGluZ1ByZWZzIChwYXRjaCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBsb2FkRmVkZXJhdGlvblNwZW5kaW5nUHJlZnMoKTtcbiAgY29uc3QgY3VyID0gbG9hZEZlZGVyYXRpb25TcGVuZGluZ1ByZWZzKCk7XG4gIGNvbnN0IG5leHQgPSB7XG4gICAgLi4uY3VyLFxuICAgIC4uLihwYXRjaCAmJiB0eXBlb2YgcGF0Y2ggPT09ICdvYmplY3QnID8gcGF0Y2ggOiB7fSlcbiAgfTtcbiAgdHJ5IHtcbiAgICB3cml0ZVN0b3JhZ2VKU09OKFNUT1JBR0VfS0VZLCBuZXh0KTtcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoQ0hBTkdFRF9FVkVOVCwgeyBkZXRhaWw6IG5leHQgfSkpO1xuICB9IGNhdGNoIChfKSB7IC8qIGlnbm9yZSAqLyB9XG4gIHJldHVybiBuZXh0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTxsb2FkRmVkZXJhdGlvblNwZW5kaW5nUHJlZnM+fSBwcmVmc1xuICogQHJldHVybnMge3N0cmluZ30gTm9uLWVtcHR5IG1lbW8gZnJhZ21lbnQgZm9yIGh1YiBzZW5kcGF5bWVudCBtZW1vIGZpZWxkXG4gKi9cbmZ1bmN0aW9uIGZlZGVyYXRpb25NZW1vRnJhZ21lbnRGcm9tUHJlZnMgKHByZWZzKSB7XG4gIGNvbnN0IGQgPSBwcmVmcyAmJiB0eXBlb2YgcHJlZnMuc3BlbmRpbmdDcml0ZXJpYURyYWZ0ID09PSAnc3RyaW5nJ1xuICAgID8gcHJlZnMuc3BlbmRpbmdDcml0ZXJpYURyYWZ0LnRyaW0oKVxuICAgIDogJyc7XG4gIGlmICghZCkgcmV0dXJuICcnO1xuICBjb25zdCBtYXggPSA1MDA7XG4gIGNvbnN0IGJvZHkgPSBkLmxlbmd0aCA+IG1heCA/IGAke2Quc2xpY2UoMCwgbWF4KX3igKZgIDogZDtcbiAgcmV0dXJuIGBbRmFicmljIGZlZGVyYXRpb24gc3BlbmRpbmcgY3JpdGVyaWFdICR7Ym9keX1gO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyTWVtb1xuICogQHBhcmFtIHtSZXR1cm5UeXBlPGxvYWRGZWRlcmF0aW9uU3BlbmRpbmdQcmVmcz59IHByZWZzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGF0dGFjaEZlZGVyYXRpb25Db250ZXh0XG4gKi9cbmZ1bmN0aW9uIG1lcmdlUGF5bWVudE1lbW9XaXRoRmVkZXJhdGlvbiAodXNlck1lbW8sIHByZWZzLCBhdHRhY2hGZWRlcmF0aW9uQ29udGV4dCkge1xuICBjb25zdCBiYXNlID0gU3RyaW5nKHVzZXJNZW1vIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IHRhZyA9IGF0dGFjaEZlZGVyYXRpb25Db250ZXh0ID8gZmVkZXJhdGlvbk1lbW9GcmFnbWVudEZyb21QcmVmcyhwcmVmcykgOiAnJztcbiAgaWYgKCF0YWcpIHJldHVybiBiYXNlO1xuICBpZiAoIWJhc2UpIHJldHVybiB0YWc7XG4gIHJldHVybiBgJHtiYXNlfSB8ICR7dGFnfWA7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZUZlZGVyYXRpb25TcGVuZGluZ1ByZWZzIChmbikge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiAoKSA9PiB7fTtcbiAgY29uc3QgaCA9ICgpID0+IGZuKGxvYWRGZWRlcmF0aW9uU3BlbmRpbmdQcmVmcygpKTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoQ0hBTkdFRF9FVkVOVCwgaCk7XG4gIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihDSEFOR0VEX0VWRU5ULCBoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxvYWRGZWRlcmF0aW9uU3BlbmRpbmdQcmVmcyxcbiAgc2F2ZUZlZGVyYXRpb25TcGVuZGluZ1ByZWZzLFxuICBmZWRlcmF0aW9uTWVtb0ZyYWdtZW50RnJvbVByZWZzLFxuICBtZXJnZVBheW1lbnRNZW1vV2l0aEZlZGVyYXRpb24sXG4gIHN1YnNjcmliZUZlZGVyYXRpb25TcGVuZGluZ1ByZWZzLFxuICBGRURFUkFUSU9OX1NQRU5ESU5HX1BSRUZTX0NIQU5HRUQ6IENIQU5HRURfRVZFTlRcbn07XG4iXSwibmFtZXMiOlsib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImkiLCJfdG9QcmltaXRpdmUiLCJfdHlwZW9mIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZXF1aXJlIiwicmVxdWlyZSIsInJlYWRTdG9yYWdlSlNPTiIsIndyaXRlU3RvcmFnZUpTT04iLCJTVE9SQUdFX0tFWSIsIkNIQU5HRURfRVZFTlQiLCJkZWZhdWx0UHJlZnMiLCJzcGVuZGluZ0NyaXRlcmlhRHJhZnQiLCJkcmFmdGluZ1VpT3BlbiIsImxvYWRGZWRlcmF0aW9uU3BlbmRpbmdQcmVmcyIsIndpbmRvdyIsInAiLCJfIiwic2F2ZUZlZGVyYXRpb25TcGVuZGluZ1ByZWZzIiwicGF0Y2giLCJjdXIiLCJuZXh0IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZmVkZXJhdGlvbk1lbW9GcmFnbWVudEZyb21QcmVmcyIsInByZWZzIiwiZCIsInRyaW0iLCJtYXgiLCJib2R5IiwiY29uY2F0Iiwic2xpY2UiLCJtZXJnZVBheW1lbnRNZW1vV2l0aEZlZGVyYXRpb24iLCJ1c2VyTWVtbyIsImF0dGFjaEZlZGVyYXRpb25Db250ZXh0IiwiYmFzZSIsInRhZyIsInN1YnNjcmliZUZlZGVyYXRpb25TcGVuZGluZ1ByZWZzIiwiZm4iLCJoIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJtb2R1bGUiLCJleHBvcnRzIiwiRkVERVJBVElPTl9TUEVORElOR19QUkVGU19DSEFOR0VEIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/federationSpendingPrefs.js\n\n}')},"./functions/formatSats.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nvar _require = __webpack_require__(/*! ../constants */ \"./constants.js\"),\n SATS_PER_BTC = _require.SATS_PER_BTC,\n SUB_SAT_EPS = _require.SUB_SATOSHI_EPSILON;\n\n/**\n * Format satoshis for UI. Whole sats: grouped locale integer. Sub-satoshi: 2 fraction digits (centisat).\n * @param {number|string} value\n * @returns {string}\n */\nfunction formatSatsDisplay(value) {\n var n = Number(value);\n if (!Number.isFinite(n)) return String(value);\n var hasSubSat = Math.abs(n % 1) > SUB_SAT_EPS;\n if (hasSubSat) {\n return n.toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n });\n }\n return Math.round(n).toLocaleString('en-US', {\n maximumFractionDigits: 0\n });\n}\n\n/**\n * BTC string from a possibly fractional sat count; extra decimals when sub-satoshi is present.\n * @param {number|string} sats\n * @returns {string}\n */\nfunction formatBtcFromSats(sats) {\n var n = Number(sats || 0);\n if (!Number.isFinite(n)) return '0.00000000';\n var sub = Math.abs(n % 1) > SUB_SAT_EPS;\n if (!sub) return (n / SATS_PER_BTC).toFixed(8);\n var raw = (n / SATS_PER_BTC).toFixed(10);\n return raw.replace(/0+$/, '').replace(/\\.$/, '');\n}\nmodule.exports = {\n formatSatsDisplay: formatSatsDisplay,\n formatBtcFromSats: formatBtcFromSats\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZm9ybWF0U2F0cy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFBQSxRQUFBLEdBQTJEQyxtQkFBTyxDQUFDLG9DQUFjLENBQUM7RUFBMUVDLFlBQVksR0FBQUYsUUFBQSxDQUFaRSxZQUFZO0VBQXVCQyxXQUFXLEdBQUFILFFBQUEsQ0FBaENJLG1CQUFtQjs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLGlCQUFpQkEsQ0FBRUMsS0FBSyxFQUFFO0VBQ2pDLElBQU1DLENBQUMsR0FBR0MsTUFBTSxDQUFDRixLQUFLLENBQUM7RUFDdkIsSUFBSSxDQUFDRSxNQUFNLENBQUNDLFFBQVEsQ0FBQ0YsQ0FBQyxDQUFDLEVBQUUsT0FBT0csTUFBTSxDQUFDSixLQUFLLENBQUM7RUFDN0MsSUFBTUssU0FBUyxHQUFHQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHSixXQUFXO0VBQy9DLElBQUlRLFNBQVMsRUFBRTtJQUNiLE9BQU9KLENBQUMsQ0FBQ08sY0FBYyxDQUFDLE9BQU8sRUFBRTtNQUFFQyxxQkFBcUIsRUFBRSxDQUFDO01BQUVDLHFCQUFxQixFQUFFO0lBQUUsQ0FBQyxDQUFDO0VBQzFGO0VBQ0EsT0FBT0osSUFBSSxDQUFDSyxLQUFLLENBQUNWLENBQUMsQ0FBQyxDQUFDTyxjQUFjLENBQUMsT0FBTyxFQUFFO0lBQUVFLHFCQUFxQixFQUFFO0VBQUUsQ0FBQyxDQUFDO0FBQzVFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTRSxpQkFBaUJBLENBQUVDLElBQUksRUFBRTtFQUNoQyxJQUFNWixDQUFDLEdBQUdDLE1BQU0sQ0FBQ1csSUFBSSxJQUFJLENBQUMsQ0FBQztFQUMzQixJQUFJLENBQUNYLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRixDQUFDLENBQUMsRUFBRSxPQUFPLFlBQVk7RUFDNUMsSUFBTWEsR0FBRyxHQUFHUixJQUFJLENBQUNDLEdBQUcsQ0FBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHSixXQUFXO0VBQ3pDLElBQUksQ0FBQ2lCLEdBQUcsRUFBRSxPQUFPLENBQUNiLENBQUMsR0FBR0wsWUFBWSxFQUFFbUIsT0FBTyxDQUFDLENBQUMsQ0FBQztFQUM5QyxJQUFNQyxHQUFHLEdBQUcsQ0FBQ2YsQ0FBQyxHQUFHTCxZQUFZLEVBQUVtQixPQUFPLENBQUMsRUFBRSxDQUFDO0VBQzFDLE9BQU9DLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQ0EsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7QUFDbEQ7QUFFQUMsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZnBCLGlCQUFpQixFQUFqQkEsaUJBQWlCO0VBQ2pCYSxpQkFBaUIsRUFBakJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2Zvcm1hdFNhdHMuanM/ODg1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHsgU0FUU19QRVJfQlRDLCBTVUJfU0FUT1NISV9FUFNJTE9OOiBTVUJfU0FUX0VQUyB9ID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzJyk7XG5cbi8qKlxuICogRm9ybWF0IHNhdG9zaGlzIGZvciBVSS4gV2hvbGUgc2F0czogZ3JvdXBlZCBsb2NhbGUgaW50ZWdlci4gU3ViLXNhdG9zaGk6IDIgZnJhY3Rpb24gZGlnaXRzIChjZW50aXNhdCkuXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmb3JtYXRTYXRzRGlzcGxheSAodmFsdWUpIHtcbiAgY29uc3QgbiA9IE51bWJlcih2YWx1ZSk7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG4pKSByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgY29uc3QgaGFzU3ViU2F0ID0gTWF0aC5hYnMobiAlIDEpID4gU1VCX1NBVF9FUFM7XG4gIGlmIChoYXNTdWJTYXQpIHtcbiAgICByZXR1cm4gbi50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMiwgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyIH0pO1xuICB9XG4gIHJldHVybiBNYXRoLnJvdW5kKG4pLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pO1xufVxuXG4vKipcbiAqIEJUQyBzdHJpbmcgZnJvbSBhIHBvc3NpYmx5IGZyYWN0aW9uYWwgc2F0IGNvdW50OyBleHRyYSBkZWNpbWFscyB3aGVuIHN1Yi1zYXRvc2hpIGlzIHByZXNlbnQuXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHNhdHNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEJ0Y0Zyb21TYXRzIChzYXRzKSB7XG4gIGNvbnN0IG4gPSBOdW1iZXIoc2F0cyB8fCAwKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobikpIHJldHVybiAnMC4wMDAwMDAwMCc7XG4gIGNvbnN0IHN1YiA9IE1hdGguYWJzKG4gJSAxKSA+IFNVQl9TQVRfRVBTO1xuICBpZiAoIXN1YikgcmV0dXJuIChuIC8gU0FUU19QRVJfQlRDKS50b0ZpeGVkKDgpO1xuICBjb25zdCByYXcgPSAobiAvIFNBVFNfUEVSX0JUQykudG9GaXhlZCgxMCk7XG4gIHJldHVybiByYXcucmVwbGFjZSgvMCskLywgJycpLnJlcGxhY2UoL1xcLiQvLCAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmb3JtYXRTYXRzRGlzcGxheSxcbiAgZm9ybWF0QnRjRnJvbVNhdHNcbn07XG4iXSwibmFtZXMiOlsiX3JlcXVpcmUiLCJyZXF1aXJlIiwiU0FUU19QRVJfQlRDIiwiU1VCX1NBVF9FUFMiLCJTVUJfU0FUT1NISV9FUFNJTE9OIiwiZm9ybWF0U2F0c0Rpc3BsYXkiLCJ2YWx1ZSIsIm4iLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIlN0cmluZyIsImhhc1N1YlNhdCIsIk1hdGgiLCJhYnMiLCJ0b0xvY2FsZVN0cmluZyIsIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIsIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIsInJvdW5kIiwiZm9ybWF0QnRjRnJvbVNhdHMiLCJzYXRzIiwic3ViIiwidG9GaXhlZCIsInJhdyIsInJlcGxhY2UiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/formatSats.js\n\n}")},"./functions/fundLocalKeyFromHubFaucet.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Fund the browser / desktop local Fabric identity from the Hub Beacon faucet\n * (regtest / local desktop only — not for production shared hosts). Optionally\n * mine a confirmation so the top-bar balance updates.\n */\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nvar _require = __webpack_require__(/*! ./bitcoinClient */ "./functions/bitcoinClient.js"),\n requestFaucet = _require.requestFaucet,\n fetchReceiveAddress = _require.fetchReceiveAddress,\n getNextReceiveWalletContext = _require.getNextReceiveWalletContext,\n generateBlock = _require.generateBlock,\n clearBalanceCache = _require.clearBalanceCache,\n loadUpstreamSettings = _require.loadUpstreamSettings,\n fetchBitcoinStatus = _require.fetchBitcoinStatus;\nvar _require2 = __webpack_require__(/*! ./hubAdminTokenBrowser */ "./functions/hubAdminTokenBrowser.js"),\n readHubAdminTokenFromBrowser = _require2.readHubAdminTokenFromBrowser;\nvar _require3 = __webpack_require__(/*! ./bitcoinFaucetCapability */ "./functions/bitcoinFaucetCapability.js"),\n faucetFromOptionsDocument = _require3.faucetFromOptionsDocument;\nvar AUTO_FAUCET_SESSION_KEY = \'fabric.desktop.autoFaucetDone\';\nfunction isDesktopShell() {\n try {\n return !!(typeof window !== \'undefined\' && window.fabricDesktop && window.fabricDesktop.isDesktopShell);\n } catch (_) {\n return false;\n }\n}\nfunction autoFaucetAlreadyDone() {\n try {\n if (typeof window === \'undefined\' || !window.sessionStorage) return false;\n return window.sessionStorage.getItem(AUTO_FAUCET_SESSION_KEY) === \'1\';\n } catch (_) {\n return false;\n }\n}\nfunction markAutoFaucetDone() {\n try {\n if (typeof window !== \'undefined\' && window.sessionStorage) {\n window.sessionStorage.setItem(AUTO_FAUCET_SESSION_KEY, \'1\');\n }\n } catch (_) {}\n}\n\n/**\n * @param {object} opts\n * @param {object} opts.identity - local Fabric identity (needs xpub)\n * @param {string} [opts.adminToken]\n * @param {number} [opts.amountSats]\n * @param {string} [opts.network]\n * @param {boolean} [opts.mineConfirm] - default true when admin token present\n * @param {object} [opts.upstream]\n * @returns {Promise}\n */\nfunction fundLocalKeyFromHubFaucet() {\n return _fundLocalKeyFromHubFaucet.apply(this, arguments);\n}\n/**\n * Whether desktop should auto-pull faucet funds once this session.\n * @param {object} opts\n * @param {object|null} opts.identity\n * @param {object|null} opts.clientBalance\n * @param {string} [opts.network]\n * @returns {boolean}\n */\nfunction _fundLocalKeyFromHubFaucet() {\n _fundLocalKeyFromHubFaucet = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var opts,\n identity,\n network,\n adminToken,\n upstream,\n wallet,\n address,\n amountSats,\n status,\n result,\n faucetBody,\n txid,\n mined,\n wantMine,\n _args = arguments,\n _t,\n _t2;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n opts = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};\n identity = opts.identity || {};\n if (identity.xpub) {\n _context.n = 1;\n break;\n }\n throw new Error(\'Local identity with xpub is required to fund from the faucet.\');\n case 1:\n network = String(opts.network || \'regtest\').toLowerCase();\n if (!(network !== \'regtest\')) {\n _context.n = 2;\n break;\n }\n throw new Error(\'Hub faucet is regtest-only.\');\n case 2:\n adminToken = readHubAdminTokenFromBrowser(opts.adminToken) || \'\';\n upstream = Object.assign({}, loadUpstreamSettings(), opts.upstream || {}, {\n hubAdminToken: adminToken,\n apiToken: adminToken || undefined\n });\n wallet = getNextReceiveWalletContext(identity);\n _context.n = 3;\n return fetchReceiveAddress(upstream, wallet, {\n network: network,\n identity: identity\n });\n case 3:\n address = _context.v;\n if (address) {\n _context.n = 4;\n break;\n }\n throw new Error(\'Could not derive a receive address for the local key.\');\n case 4:\n amountSats = Math.round(Number(opts.amountSats) || 0);\n if (!(!Number.isFinite(amountSats) || amountSats <= 0)) {\n _context.n = 8;\n break;\n }\n amountSats = 10000;\n _context.p = 5;\n _context.n = 6;\n return fetchBitcoinStatus(upstream);\n case 6:\n status = _context.v;\n // Prefer advertised faucet default when present on OPTIONS via status side-channels — keep 10k.\n if (status && status.faucet && status.faucet.defaultAmountSats) {\n amountSats = Math.max(1, Math.round(Number(status.faucet.defaultAmountSats)));\n }\n _context.n = 8;\n break;\n case 7:\n _context.p = 7;\n _t = _context.v;\n case 8:\n amountSats = Math.max(1, Math.min(1000000, amountSats));\n _context.n = 9;\n return requestFaucet(upstream, {\n address: address,\n amountSats: amountSats\n });\n case 9:\n result = _context.v;\n if (!(result && result.error)) {\n _context.n = 10;\n break;\n }\n throw new Error(String(result.error));\n case 10:\n faucetBody = result && result.faucet && _typeof(result.faucet) === \'object\' ? result.faucet : result;\n txid = faucetBody && (faucetBody.txid || faucetBody.transactionId || faucetBody.id) ? String(faucetBody.txid || faucetBody.transactionId || faucetBody.id) : \'\';\n if (!(!txid && result && result.status && String(result.status).toLowerCase() !== \'success\')) {\n _context.n = 11;\n break;\n }\n throw new Error(result && result.message || \'Faucet request failed.\');\n case 11:\n mined = null;\n wantMine = opts.mineConfirm !== false && !!adminToken;\n if (!wantMine) {\n _context.n = 15;\n break;\n }\n _context.p = 12;\n _context.n = 13;\n return generateBlock(_objectSpread(_objectSpread({}, upstream), {}, {\n apiToken: adminToken\n }), {\n count: 1\n });\n case 13:\n mined = _context.v;\n _context.n = 15;\n break;\n case 14:\n _context.p = 14;\n _t2 = _context.v;\n mined = {\n error: _t2 && _t2.message ? _t2.message : String(_t2)\n };\n case 15:\n if (wallet.walletId) {\n try {\n clearBalanceCache(wallet.walletId);\n } catch (_) {}\n }\n if (typeof window !== \'undefined\' && typeof window.dispatchEvent === \'function\') {\n try {\n window.dispatchEvent(new CustomEvent(\'clientBalanceUpdate\', {\n detail: {\n source: \'fundLocalKeyFromHubFaucet\',\n address: address,\n amountSats: amountSats,\n txid: txid\n }\n }));\n } catch (_) {}\n }\n return _context.a(2, {\n ok: true,\n address: address,\n amountSats: amountSats,\n txid: txid,\n mined: mined,\n network: network\n });\n }\n }, _callee, null, [[12, 14], [5, 7]]);\n }));\n return _fundLocalKeyFromHubFaucet.apply(this, arguments);\n}\nfunction shouldAutoFundDesktopLocalKey() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!isDesktopShell()) return false;\n if (autoFaucetAlreadyDone()) return false;\n if (typeof window !== \'undefined\' && window.FABRIC_DESKTOP_AUTO_FAUCET === false) return false;\n if (typeof window !== \'undefined\' && (window.FABRIC_DESKTOP_AUTO_FAUCET === \'0\' || window.FABRIC_DESKTOP_AUTO_FAUCET === 0)) {\n return false;\n }\n var network = String(opts.network || \'regtest\').toLowerCase();\n if (network !== \'regtest\') return false;\n var identity = opts.identity || {};\n if (!identity.xpub) return false;\n var bal = opts.clientBalance;\n if (bal && Number(bal.balanceSats) > 0) return false;\n return true;\n}\n\n/**\n * Probe OPTIONS / hub status for faucet availability (best-effort).\n * @param {object} [upstream]\n * @returns {Promise<{ available: boolean, funded?: boolean, reason?: string, faucet?: object }>}\n */\nfunction discoverLocalHubFaucet() {\n return _discoverLocalHubFaucet.apply(this, arguments);\n}\nfunction _discoverLocalHubFaucet() {\n _discoverLocalHubFaucet = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var upstream,\n origin,\n res,\n doc,\n faucet,\n _args2 = arguments,\n _t3;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n upstream = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n _context2.p = 1;\n if (!(typeof window === \'undefined\' || typeof window.fetch !== \'function\')) {\n _context2.n = 2;\n break;\n }\n return _context2.a(2, {\n available: false,\n reason: \'no-window\'\n });\n case 2:\n origin = String(window.location && window.location.origin ? window.location.origin : \'\').replace(/\\/$/, \'\');\n if (origin) {\n _context2.n = 3;\n break;\n }\n return _context2.a(2, {\n available: false,\n reason: \'no-origin\'\n });\n case 3:\n _context2.n = 4;\n return fetch(origin + \'/\', {\n method: \'OPTIONS\',\n headers: {\n Accept: \'application/json\'\n }\n });\n case 4:\n res = _context2.v;\n _context2.n = 5;\n return res.json();\n case 5:\n doc = _context2.v;\n faucet = faucetFromOptionsDocument(doc);\n if (faucet) {\n _context2.n = 6;\n break;\n }\n return _context2.a(2, {\n available: false,\n reason: \'not-advertised\'\n });\n case 6:\n return _context2.a(2, {\n available: !!faucet.available,\n funded: faucet.funded !== false && Number(faucet.balanceSats || 0) > 0,\n faucet: faucet\n });\n case 7:\n _context2.p = 7;\n _t3 = _context2.v;\n return _context2.a(2, {\n available: false,\n reason: _t3 && _t3.message ? _t3.message : String(_t3)\n });\n }\n }, _callee2, null, [[1, 7]]);\n }));\n return _discoverLocalHubFaucet.apply(this, arguments);\n}\nmodule.exports = {\n AUTO_FAUCET_SESSION_KEY: AUTO_FAUCET_SESSION_KEY,\n isDesktopShell: isDesktopShell,\n autoFaucetAlreadyDone: autoFaucetAlreadyDone,\n markAutoFaucetDone: markAutoFaucetDone,\n fundLocalKeyFromHubFaucet: fundLocalKeyFromHubFaucet,\n shouldAutoFundDesktopLocalKey: shouldAutoFundDesktopLocalKey,\n discoverLocalHubFaucet: discoverLocalHubFaucet\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvZnVuZExvY2FsS2V5RnJvbUh1YkZhdWNldC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkEsU0FBQUEsYUFBQSxJQURBLHVLQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssV0FBQSw4QkFBQUMsRUFBQU4sQ0FBQSxFQUFBRSxDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxRQUFBQyxDQUFBLEdBQUFMLENBQUEsSUFBQUEsQ0FBQSxDQUFBTSxTQUFBLFlBQUFDLFNBQUEsR0FBQVAsQ0FBQSxHQUFBTyxTQUFBLEVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxNQUFBLENBQUFMLENBQUEsQ0FBQUMsU0FBQSxVQUFBSyxtQkFBQSxDQUFBSCxDQUFBLHVCQUFBVixDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxRQUFBRSxDQUFBLEVBQUFDLENBQUEsRUFBQUcsQ0FBQSxFQUFBSSxDQUFBLE1BQUFDLENBQUEsR0FBQVgsQ0FBQSxRQUFBWSxDQUFBLE9BQUFDLENBQUEsS0FBQUYsQ0FBQSxLQUFBYixDQUFBLEtBQUFnQixDQUFBLEVBQUFwQixDQUFBLEVBQUFxQixDQUFBLEVBQUFDLENBQUEsRUFBQU4sQ0FBQSxFQUFBTSxDQUFBLENBQUFDLElBQUEsQ0FBQXZCLENBQUEsTUFBQXNCLENBQUEsV0FBQUEsRUFBQXJCLENBQUEsRUFBQUMsQ0FBQSxXQUFBTSxDQUFBLEdBQUFQLENBQUEsRUFBQVEsQ0FBQSxNQUFBRyxDQUFBLEdBQUFaLENBQUEsRUFBQW1CLENBQUEsQ0FBQWYsQ0FBQSxHQUFBRixDQUFBLEVBQUFtQixDQUFBLGdCQUFBQyxFQUFBcEIsQ0FBQSxFQUFBRSxDQUFBLFNBQUFLLENBQUEsR0FBQVAsQ0FBQSxFQUFBVSxDQUFBLEdB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QUEsT0FBQUgsU0FBQSxDQUFBckksQ0FBQSxJQUMzRDtZQUNMdUksU0FBUyxFQUFFLENBQUMsQ0FBQy9CLE1BQU0sQ0FBQytCLFNBQVM7WUFDN0JRLE1BQU0sRUFBRXZDLE1BQU0sQ0FBQ3VDLE1BQU0sS0FBSyxLQUFLLElBQUl0RyxNQUFNLENBQUMrRCxNQUFNLENBQUNvQixXQUFXLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUN0RXBCLE1BQU0sRUFBTkE7VUFDRixDQUFDO1FBQUE7VUFBQTZCLFNBQUEsQ0FBQXpJLENBQUE7VUFBQXdJLEdBQUEsR0FBQUMsU0FBQSxDQUFBdEksQ0FBQTtVQUFBLE9BQUFzSSxTQUFBLENBQUFySSxDQUFBLElBRU07WUFBRXVJLFNBQVMsRUFBRSxLQUFLO1lBQUVDLE1BQU0sRUFBRUosR0FBQSxJQUFLQSxHQUFBLENBQUVyQixPQUFPLEdBQUdxQixHQUFBLENBQUVyQixPQUFPLEdBQUd2RSxNQUFNLENBQUE0RixHQUFFO1VBQUUsQ0FBQztNQUFBO0lBQUEsR0FBQUwsUUFBQTtFQUFBLENBRTlFO0VBQUEsT0FBQUQsdUJBQUEsQ0FBQWpHLEtBQUEsT0FBQUUsU0FBQTtBQUFBO0FBRURpSCxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmbEYsdUJBQXVCLEVBQXZCQSx1QkFBdUI7RUFDdkJDLGNBQWMsRUFBZEEsY0FBYztFQUNkSSxxQkFBcUIsRUFBckJBLHFCQUFxQjtFQUNyQkcsa0JBQWtCLEVBQWxCQSxrQkFBa0I7RUFDbEJFLHlCQUF5QixFQUF6QkEseUJBQXlCO0VBQ3pCK0MsNkJBQTZCLEVBQTdCQSw2QkFBNkI7RUFDN0JLLHNCQUFzQixFQUF0QkE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvZnVuZExvY2FsS2V5RnJvbUh1YkZhdWNldC5qcz9hN2Y5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBGdW5kIHRoZSBicm93c2VyIC8gZGVza3RvcCBsb2NhbCBGYWJyaWMgaWRlbnRpdHkgZnJvbSB0aGUgSHViIEJlYWNvbiBmYXVjZXRcbiAqIChyZWd0ZXN0IC8gbG9jYWwgZGVza3RvcCBvbmx5IOKAlCBub3QgZm9yIHByb2R1Y3Rpb24gc2hhcmVkIGhvc3RzKS4gT3B0aW9uYWxseVxuICogbWluZSBhIGNvbmZpcm1hdGlvbiBzbyB0aGUgdG9wLWJhciBiYWxhbmNlIHVwZGF0ZXMuXG4gKi9cblxuY29uc3Qge1xuICByZXF1ZXN0RmF1Y2V0LFxuICBmZXRjaFJlY2VpdmVBZGRyZXNzLFxuICBnZXROZXh0UmVjZWl2ZVdhbGxldENvbnRleHQsXG4gIGdlbmVyYXRlQmxvY2ssXG4gIGNsZWFyQmFsYW5jZUNhY2hlLFxuICBsb2FkVXBzdHJlYW1TZXR0aW5ncyxcbiAgZmV0Y2hCaXRjb2luU3RhdHVzXG59ID0gcmVxdWlyZSgnLi9iaXRjb2luQ2xpZW50Jyk7XG5jb25zdCB7IHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIgfSA9IHJlcXVpcmUoJy4vaHViQWRtaW5Ub2tlbkJyb3dzZXInKTtcbmNvbnN0IHsgZmF1Y2V0RnJvbU9wdGlvbnNEb2N1bWVudCB9ID0gcmVxdWlyZSgnLi9iaXRjb2luRmF1Y2V0Q2FwYWJpbGl0eScpO1xuXG5jb25zdCBBVVRPX0ZBVUNFVF9TRVNTSU9OX0tFWSA9ICdmYWJyaWMuZGVza3RvcC5hdXRvRmF1Y2V0RG9uZSc7XG5cbmZ1bmN0aW9uIGlzRGVza3RvcFNoZWxsICgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIHdpbmRvdy5mYWJyaWNEZXNrdG9wICYmXG4gICAgICB3aW5kb3cuZmFicmljRGVza3RvcC5pc0Rlc2t0b3BTaGVsbCk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXV0b0ZhdWNldEFscmVhZHlEb25lICgpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5zZXNzaW9uU3RvcmFnZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShBVVRPX0ZBVUNFVF9TRVNTSU9OX0tFWSkgPT09ICcxJztcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrQXV0b0ZhdWNldERvbmUgKCkge1xuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UpIHtcbiAgICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKEFVVE9fRkFVQ0VUX1NFU1NJT05fS0VZLCAnMScpO1xuICAgIH1cbiAgfSBjYXRjaCAoXykge31cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0c1xuICogQHBhcmFtIHtvYmplY3R9IG9wdHMuaWRlbnRpdHkgLSBsb2NhbCBGYWJyaWMgaWRlbnRpdHkgKG5lZWRzIHhwdWIpXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuYWRtaW5Ub2tlbl1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy5hbW91bnRTYXRzXVxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm5ldHdvcmtdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLm1pbmVDb25maXJtXSAtIGRlZmF1bHQgdHJ1ZSB3aGVuIGFkbWluIHRva2VuIHByZXNlbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0cy51cHN0cmVhbV1cbiAqIEByZXR1cm5zIHtQcm9taXNlPG9iamVjdD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZ1bmRMb2NhbEtleUZyb21IdWJGYXVjZXQgKG9wdHMgPSB7fSkge1xuICBjb25zdCBpZGVudGl0eSA9IG9wdHMuaWRlbnRpdHkgfHwge307XG4gIGlmICghaWRlbnRpdHkueHB1Yikge1xuICAgIHRocm93IG5ldyBFcnJvcignTG9jYWwgaWRlbnRpdHkgd2l0aCB4cHViIGlzIHJlcXVpcmVkIHRvIGZ1bmQgZnJvbSB0aGUgZmF1Y2V0LicpO1xuICB9XG4gIGNvbnN0IG5ldHdvcmsgPSBTdHJpbmcob3B0cy5uZXR3b3JrIHx8ICdyZWd0ZXN0JykudG9Mb3dlckNhc2UoKTtcbiAgaWYgKG5ldHdvcmsgIT09ICdyZWd0ZXN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignSHViIGZhdWNldCBpcyByZWd0ZXN0LW9ubHkuJyk7XG4gIH1cbiAgY29uc3QgYWRtaW5Ub2tlbiA9IHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIob3B0cy5hZG1pblRva2VuKSB8fCAnJztcbiAgY29uc3QgdXBzdHJlYW0gPSBPYmplY3QuYXNzaWduKHt9LCBsb2FkVXBzdHJlYW1TZXR0aW5ncygpLCBvcHRzLnVwc3RyZWFtIHx8IHt9LCB7XG4gICAgaHViQWRtaW5Ub2tlbjogYWRtaW5Ub2tlbixcbiAgICBhcGlUb2tlbjogYWRtaW5Ub2tlbiB8fCB1bmRlZmluZWRcbiAgfSk7XG5cbiAgY29uc3Qgd2FsbGV0ID0gZ2V0TmV4dFJlY2VpdmVXYWxsZXRDb250ZXh0KGlkZW50aXR5KTtcbiAgY29uc3QgYWRkcmVzcyA9IGF3YWl0IGZldGNoUmVjZWl2ZUFkZHJlc3ModXBzdHJlYW0sIHdhbGxldCwgeyBuZXR3b3JrLCBpZGVudGl0eSB9KTtcbiAgaWYgKCFhZGRyZXNzKSB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkZXJpdmUgYSByZWNlaXZlIGFkZHJlc3MgZm9yIHRoZSBsb2NhbCBrZXkuJyk7XG5cbiAgbGV0IGFtb3VudFNhdHMgPSBNYXRoLnJvdW5kKE51bWJlcihvcHRzLmFtb3VudFNhdHMpIHx8IDApO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShhbW91bnRTYXRzKSB8fCBhbW91bnRTYXRzIDw9IDApIHtcbiAgICBhbW91bnRTYXRzID0gMTAwMDA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGZldGNoQml0Y29pblN0YXR1cyh1cHN0cmVhbSk7XG4gICAgICAvLyBQcmVmZXIgYWR2ZXJ0aXNlZCBmYXVjZXQgZGVmYXVsdCB3aGVuIHByZXNlbnQgb24gT1BUSU9OUyB2aWEgc3RhdHVzIHNpZGUtY2hhbm5lbHMg4oCUIGtlZXAgMTBrLlxuICAgICAgaWYgKHN0YXR1cyAmJiBzdGF0dXMuZmF1Y2V0ICYmIHN0YXR1cy5mYXVjZXQuZGVmYXVsdEFtb3VudFNhdHMpIHtcbiAgICAgICAgYW1vdW50U2F0cyA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoTnVtYmVyKHN0YXR1cy5mYXVjZXQuZGVmYXVsdEFtb3VudFNhdHMpKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoXykge31cbiAgfVxuICBhbW91bnRTYXRzID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oMTAwMDAwMCwgYW1vdW50U2F0cykpO1xuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3RGYXVjZXQodXBzdHJlYW0sIHsgYWRkcmVzcywgYW1vdW50U2F0cyB9KTtcbiAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoU3RyaW5nKHJlc3VsdC5lcnJvcikpO1xuICB9XG4gIGNvbnN0IGZhdWNldEJvZHkgPSAocmVzdWx0ICYmIHJlc3VsdC5mYXVjZXQgJiYgdHlwZW9mIHJlc3VsdC5mYXVjZXQgPT09ICdvYmplY3QnKVxuICAgID8gcmVzdWx0LmZhdWNldFxuICAgIDogcmVzdWx0O1xuICBjb25zdCB0eGlkID0gZmF1Y2V0Qm9keSAmJiAoZmF1Y2V0Qm9keS50eGlkIHx8IGZhdWNldEJvZHkudHJhbnNhY3Rpb25JZCB8fCBmYXVjZXRCb2R5LmlkKVxuICAgID8gU3RyaW5nKGZhdWNldEJvZHkudHhpZCB8fCBmYXVjZXRCb2R5LnRyYW5zYWN0aW9uSWQgfHwgZmF1Y2V0Qm9keS5pZClcbiAgICA6ICcnO1xuICBpZiAoIXR4aWQgJiYgcmVzdWx0ICYmIHJlc3VsdC5zdGF0dXMgJiYgU3RyaW5nKHJlc3VsdC5zdGF0dXMpLnRvTG93ZXJDYXNlKCkgIT09ICdzdWNjZXNzJykge1xuICAgIHRocm93IG5ldyBFcnJvcigocmVzdWx0ICYmIHJlc3VsdC5tZXNzYWdlKSB8fCAnRmF1Y2V0IHJlcXVlc3QgZmFpbGVkLicpO1xuICB9XG5cbiAgbGV0IG1pbmVkID0gbnVsbDtcbiAgY29uc3Qgd2FudE1pbmUgPSBvcHRzLm1pbmVDb25maXJtICE9PSBmYWxzZSAmJiAhIWFkbWluVG9rZW47XG4gIGlmICh3YW50TWluZSkge1xuICAgIHRyeSB7XG4gICAgICBtaW5lZCA9IGF3YWl0IGdlbmVyYXRlQmxvY2soe1xuICAgICAgICAuLi51cHN0cmVhbSxcbiAgICAgICAgYXBpVG9rZW46IGFkbWluVG9rZW5cbiAgICAgIH0sIHsgY291bnQ6IDEgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbWluZWQgPSB7IGVycm9yOiBlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSB9O1xuICAgIH1cbiAgfVxuXG4gIGlmICh3YWxsZXQud2FsbGV0SWQpIHtcbiAgICB0cnkgeyBjbGVhckJhbGFuY2VDYWNoZSh3YWxsZXQud2FsbGV0SWQpOyB9IGNhdGNoIChfKSB7fVxuICB9XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjbGllbnRCYWxhbmNlVXBkYXRlJywge1xuICAgICAgICBkZXRhaWw6IHsgc291cmNlOiAnZnVuZExvY2FsS2V5RnJvbUh1YkZhdWNldCcsIGFkZHJlc3MsIGFtb3VudFNhdHMsIHR4aWQgfVxuICAgICAgfSkpO1xuICAgIH0gY2F0Y2ggKF8pIHt9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG9rOiB0cnVlLFxuICAgIGFkZHJlc3MsXG4gICAgYW1vdW50U2F0cyxcbiAgICB0eGlkLFxuICAgIG1pbmVkLFxuICAgIG5ldHdvcmtcbiAgfTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGRlc2t0b3Agc2hvdWxkIGF1dG8tcHVsbCBmYXVjZXQgZnVuZHMgb25jZSB0aGlzIHNlc3Npb24uXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0c1xuICogQHBhcmFtIHtvYmplY3R8bnVsbH0gb3B0cy5pZGVudGl0eVxuICogQHBhcmFtIHtvYmplY3R8bnVsbH0gb3B0cy5jbGllbnRCYWxhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubmV0d29ya11cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBzaG91bGRBdXRvRnVuZERlc2t0b3BMb2NhbEtleSAob3B0cyA9IHt9KSB7XG4gIGlmICghaXNEZXNrdG9wU2hlbGwoKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoYXV0b0ZhdWNldEFscmVhZHlEb25lKCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5GQUJSSUNfREVTS1RPUF9BVVRPX0ZBVUNFVCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAod2luZG93LkZBQlJJQ19ERVNLVE9QX0FVVE9fRkFVQ0VUID09PSAnMCcgfHwgd2luZG93LkZBQlJJQ19ERVNLVE9QX0FVVE9fRkFVQ0VUID09PSAwKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBuZXR3b3JrID0gU3RyaW5nKG9wdHMubmV0d29yayB8fCAncmVndGVzdCcpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChuZXR3b3JrICE9PSAncmVndGVzdCcpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgaWRlbnRpdHkgPSBvcHRzLmlkZW50aXR5IHx8IHt9O1xuICBpZiAoIWlkZW50aXR5LnhwdWIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgYmFsID0gb3B0cy5jbGllbnRCYWxhbmNlO1xuICBpZiAoYmFsICYmIE51bWJlcihiYWwuYmFsYW5jZVNhdHMpID4gMCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBQcm9iZSBPUFRJT05TIC8gaHViIHN0YXR1cyBmb3IgZmF1Y2V0IGF2YWlsYWJpbGl0eSAoYmVzdC1lZmZvcnQpLlxuICogQHBhcmFtIHtvYmplY3R9IFt1cHN0cmVhbV1cbiAqIEByZXR1cm5zIHtQcm9taXNlPHsgYXZhaWxhYmxlOiBib29sZWFuLCBmdW5kZWQ/OiBib29sZWFuLCByZWFzb24/OiBzdHJpbmcsIGZhdWNldD86IG9iamVjdCB9Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGlzY292ZXJMb2NhbEh1YkZhdWNldCAodXBzdHJlYW0gPSB7fSkge1xuICB0cnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93LmZldGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4geyBhdmFpbGFibGU6IGZhbHNlLCByZWFzb246ICduby13aW5kb3cnIH07XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpbiA9IFN0cmluZyh3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLm9yaWdpbiA/IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gOiAnJykucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgICBpZiAoIW9yaWdpbikgcmV0dXJuIHsgYXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiAnbm8tb3JpZ2luJyB9O1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKG9yaWdpbiArICcvJywge1xuICAgICAgbWV0aG9kOiAnT1BUSU9OUycsXG4gICAgICBoZWFkZXJzOiB7IEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH1cbiAgICB9KTtcbiAgICBjb25zdCBkb2MgPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGNvbnN0IGZhdWNldCA9IGZhdWNldEZyb21PcHRpb25zRG9jdW1lbnQoZG9jKTtcbiAgICBpZiAoIWZhdWNldCkgcmV0dXJuIHsgYXZhaWxhYmxlOiBmYWxzZSwgcmVhc29uOiAnbm90LWFkdmVydGlzZWQnIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGF2YWlsYWJsZTogISFmYXVjZXQuYXZhaWxhYmxlLFxuICAgICAgZnVuZGVkOiBmYXVjZXQuZnVuZGVkICE9PSBmYWxzZSAmJiBOdW1iZXIoZmF1Y2V0LmJhbGFuY2VTYXRzIHx8IDApID4gMCxcbiAgICAgIGZhdWNldFxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBhdmFpbGFibGU6IGZhbHNlLCByZWFzb246IGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFVVE9fRkFVQ0VUX1NFU1NJT05fS0VZLFxuICBpc0Rlc2t0b3BTaGVsbCxcbiAgYXV0b0ZhdWNldEFscmVhZHlEb25lLFxuICBtYXJrQXV0b0ZhdWNldERvbmUsXG4gIGZ1bmRMb2NhbEtleUZyb21IdWJGYXVjZXQsXG4gIHNob3VsZEF1dG9GdW5kRGVza3RvcExvY2FsS2V5LFxuICBkaXNjb3ZlckxvY2FsSHViRmF1Y2V0XG59O1xuIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIlN5bWJvbCIsIm4iLCJpdGVyYXRvciIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJfdHlwZW9mIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJjb25zdHJ1Y3RvciIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX25leHQiLCJfdGhyb3ciLCJfcmVxdWlyZSIsInJlcXVpcmUiLCJyZXF1ZXN0RmF1Y2V0IiwiZmV0Y2hSZWNlaXZlQWRkcmVzcyIsImdldE5leHRSZWNlaXZlV2FsbGV0Q29udGV4dCIsImdlbmVyYXRlQmxvY2siLCJjbGVhckJhbGFuY2VDYWNoZSIsImxvYWRVcHN0cmVhbVNldHRpbmdzIiwiZmV0Y2hCaXRjb2luU3RhdHVzIiwiX3JlcXVpcmUyIiwicmVhZEh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciIsIl9yZXF1aXJlMyIsImZhdWNldEZyb21PcHRpb25zRG9jdW1lbnQiLCJBVVRPX0ZBVUNFVF9TRVNTSU9OX0tFWSIsImlzRGVza3RvcFNoZWxsIiwid2luZG93IiwiZmFicmljRGVza3RvcCIsIl8iLCJhdXRvRmF1Y2V0QWxyZWFkeURvbmUiLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJtYXJrQXV0b0ZhdWNldERvbmUiLCJzZXRJdGVtIiwiZnVuZExvY2FsS2V5RnJvbUh1YkZhdWNldCIsIl9mdW5kTG9jYWxLZXlGcm9tSHViRmF1Y2V0IiwiX2NhbGxlZSIsIm9wdHMiLCJpZGVudGl0eSIsIm5ldHdvcmsiLCJhZG1pblRva2VuIiwidXBzdHJlYW0iLCJ3YWxsZXQiLCJhZGRyZXNzIiwiYW1vdW50U2F0cyIsInN0YXR1cyIsInJlc3VsdCIsImZhdWNldEJvZHkiLCJ0eGlkIiwibWluZWQiLCJ3YW50TWluZSIsIl9hcmdzIiwiX3QiLCJfdDIiLCJfY29udGV4dCIsInVuZGVmaW5lZCIsInhwdWIiLCJFcnJvciIsInRvTG93ZXJDYXNlIiwiYXNzaWduIiwiaHViQWRtaW5Ub2tlbiIsImFwaVRva2VuIiwiTWF0aCIsInJvdW5kIiwiaXNGaW5pdGUiLCJmYXVjZXQiLCJkZWZhdWx0QW1vdW50U2F0cyIsIm1heCIsIm1pbiIsImVycm9yIiwidHJhbnNhY3Rpb25JZCIsImlkIiwibWVzc2FnZSIsIm1pbmVDb25maXJtIiwiY291bnQiLCJ3YWxsZXRJZCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsInNvdXJjZSIsIm9rIiwic2hvdWxkQXV0b0Z1bmREZXNrdG9wTG9jYWxLZXkiLCJGQUJSSUNfREVTS1RPUF9BVVRPX0ZBVUNFVCIsImJhbCIsImNsaWVudEJhbGFuY2UiLCJiYWxhbmNlU2F0cyIsImRpc2NvdmVyTG9jYWxIdWJGYXVjZXQiLCJfZGlzY292ZXJMb2NhbEh1YkZhdWNldCIsIl9jYWxsZWUyIiwib3JpZ2luIiwicmVzIiwiZG9jIiwiX2FyZ3MyIiwiX3QzIiwiX2NvbnRleHQyIiwiZmV0Y2giLCJhdmFpbGFibGUiLCJyZWFzb24iLCJsb2NhdGlvbiIsInJlcGxhY2UiLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwianNvbiIsImZ1bmRlZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/fundLocalKeyFromHubFaucet.js\n\n}')},"./functions/hubAdminTokenBrowser.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ \"./functions/fabricBrowserState.js\"),\n readStorageString = _require.readStorageString,\n writeStorageString = _require.writeStorageString,\n removeStorageKey = _require.removeStorageKey;\n\n/**\n * Hub setup admin token in the browser (localStorage). Used for regtest Hub-wallet sends.\n * @param {string|null|undefined} adminTokenProp - From HubInterface state when available\n * @returns {string}\n */\nfunction readHubAdminTokenFromBrowser(adminTokenProp) {\n var fromProp = adminTokenProp != null && String(adminTokenProp).trim() ? String(adminTokenProp).trim() : '';\n if (fromProp) return fromProp;\n try {\n if (typeof window !== 'undefined') {\n return readStorageString('fabric.hub.adminToken').trim();\n }\n } catch (e) {}\n return '';\n}\n\n/**\n * Persist token and notify shell (HubInterface) to refresh state.\n * @param {string} token\n * @returns {boolean}\n */\nfunction saveHubAdminTokenToBrowser(token) {\n var t = String(token || '').trim();\n if (!t) return false;\n try {\n if (typeof window !== 'undefined') {\n writeStorageString('fabric.hub.adminToken', t);\n window.dispatchEvent(new CustomEvent('fabricHubAdminTokenSaved', {\n detail: {\n ok: true\n }\n }));\n return true;\n }\n } catch (e) {}\n return false;\n}\nfunction clearHubAdminTokenFromBrowser() {\n try {\n if (typeof window !== 'undefined') {\n removeStorageKey('fabric.hub.adminToken');\n removeStorageKey('fabric.hub.adminTokenExpiresAt');\n window.dispatchEvent(new CustomEvent('fabricHubAdminTokenSaved', {\n detail: {\n ok: false,\n cleared: true\n }\n }));\n return true;\n }\n } catch (e) {}\n return false;\n}\nmodule.exports = {\n readHubAdminTokenFromBrowser: readHubAdminTokenFromBrowser,\n saveHubAdminTokenToBrowser: saveHubAdminTokenToBrowser,\n clearHubAdminTokenFromBrowser: clearHubAdminTokenFromBrowser\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvaHViQWRtaW5Ub2tlbkJyb3dzZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBQUEsUUFBQSxHQUlJQyxtQkFBTyxDQUFDLCtEQUFzQixDQUFDO0VBSGpDQyxpQkFBaUIsR0FBQUYsUUFBQSxDQUFqQkUsaUJBQWlCO0VBQ2pCQyxrQkFBa0IsR0FBQUgsUUFBQSxDQUFsQkcsa0JBQWtCO0VBQ2xCQyxnQkFBZ0IsR0FBQUosUUFBQSxDQUFoQkksZ0JBQWdCOztBQUdsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsNEJBQTRCQSxDQUFFQyxjQUFjLEVBQUU7RUFDckQsSUFBTUMsUUFBUSxHQUFHRCxjQUFjLElBQUksSUFBSSxJQUFJRSxNQUFNLENBQUNGLGNBQWMsQ0FBQyxDQUFDRyxJQUFJLENBQUMsQ0FBQyxHQUNwRUQsTUFBTSxDQUFDRixjQUFjLENBQUMsQ0FBQ0csSUFBSSxDQUFDLENBQUMsR0FDN0IsRUFBRTtFQUNOLElBQUlGLFFBQVEsRUFBRSxPQUFPQSxRQUFRO0VBQzdCLElBQUk7SUFDRixJQUFJLE9BQU9HLE1BQU0sS0FBSyxXQUFXLEVBQUU7TUFDakMsT0FBT1IsaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsQ0FBQ08sSUFBSSxDQUFDLENBQUM7SUFDMUQ7RUFDRixDQUFDLENBQUMsT0FBT0UsQ0FBQyxFQUFFLENBQUM7RUFDYixPQUFPLEVBQUU7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0MsMEJBQTBCQSxDQUFFQyxLQUFLLEVBQUU7RUFDMUMsSUFBTUMsQ0FBQyxHQUFHTixNQUFNLENBQUNLLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQ0osSUFBSSxDQUFDLENBQUM7RUFDcEMsSUFBSSxDQUFDSyxDQUFDLEVBQUUsT0FBTyxLQUFLO0VBQ3BCLElBQUk7SUFDRixJQUFJLE9BQU9KLE1BQU0sS0FBSyxXQUFXLEVBQUU7TUFDakNQLGtCQUFrQixDQUFDLHVCQUF1QixFQUFFVyxDQUFDLENBQUM7TUFDOUNKLE1BQU0sQ0FBQ0ssYUFBYSxDQUFDLElBQUlDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRTtRQUFFQyxNQUFNLEVBQUU7VUFBRUMsRUFBRSxFQUFFO1FBQUs7TUFBRSxDQUFDLENBQUMsQ0FBQztNQUMzRixPQUFPLElBQUk7SUFDYjtFQUNGLENBQUMsQ0FBQyxPQUFPUCxDQUFDLEVBQUUsQ0FBQztFQUNiLE9BQU8sS0FBSztBQUNkO0FBRUEsU0FBU1EsNkJBQTZCQSxDQUFBLEVBQUk7RUFDeEMsSUFBSTtJQUNGLElBQUksT0FBT1QsTUFBTSxLQUFLLFdBQVcsRUFBRTtNQUNqQ04sZ0JBQWdCLENBQUMsdUJBQXVCLENBQUM7TUFDekNBLGdCQUFnQixDQUFDLGdDQUFnQyxDQUFDO01BQ2xETSxNQUFNLENBQUNLLGFBQWEsQ0FBQyxJQUFJQyxXQUFXLENBQUMsMEJBQTBCLEVBQUU7UUFBRUMsTUFBTSxFQUFFO1VBQUVDLEVBQUUsRUFBRSxLQUFLO1VBQUVFLE9BQU8sRUFBRTtRQUFLO01BQUUsQ0FBQyxDQUFDLENBQUM7TUFDM0csT0FBTyxJQUFJO0lBQ2I7RUFDRixDQUFDLENBQUMsT0FBT1QsQ0FBQyxFQUFFLENBQUM7RUFDYixPQUFPLEtBQUs7QUFDZDtBQUVBVSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmakIsNEJBQTRCLEVBQTVCQSw0QkFBNEI7RUFDNUJPLDBCQUEwQixFQUExQkEsMEJBQTBCO0VBQzFCTyw2QkFBNkIsRUFBN0JBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2h1YkFkbWluVG9rZW5Ccm93c2VyLmpzPzFiNjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7XG4gIHJlYWRTdG9yYWdlU3RyaW5nLFxuICB3cml0ZVN0b3JhZ2VTdHJpbmcsXG4gIHJlbW92ZVN0b3JhZ2VLZXlcbn0gPSByZXF1aXJlKCcuL2ZhYnJpY0Jyb3dzZXJTdGF0ZScpO1xuXG4vKipcbiAqIEh1YiBzZXR1cCBhZG1pbiB0b2tlbiBpbiB0aGUgYnJvd3NlciAobG9jYWxTdG9yYWdlKS4gVXNlZCBmb3IgcmVndGVzdCBIdWItd2FsbGV0IHNlbmRzLlxuICogQHBhcmFtIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IGFkbWluVG9rZW5Qcm9wIC0gRnJvbSBIdWJJbnRlcmZhY2Ugc3RhdGUgd2hlbiBhdmFpbGFibGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIgKGFkbWluVG9rZW5Qcm9wKSB7XG4gIGNvbnN0IGZyb21Qcm9wID0gYWRtaW5Ub2tlblByb3AgIT0gbnVsbCAmJiBTdHJpbmcoYWRtaW5Ub2tlblByb3ApLnRyaW0oKVxuICAgID8gU3RyaW5nKGFkbWluVG9rZW5Qcm9wKS50cmltKClcbiAgICA6ICcnO1xuICBpZiAoZnJvbVByb3ApIHJldHVybiBmcm9tUHJvcDtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiByZWFkU3RvcmFnZVN0cmluZygnZmFicmljLmh1Yi5hZG1pblRva2VuJykudHJpbSgpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIFBlcnNpc3QgdG9rZW4gYW5kIG5vdGlmeSBzaGVsbCAoSHViSW50ZXJmYWNlKSB0byByZWZyZXNoIHN0YXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gc2F2ZUh1YkFkbWluVG9rZW5Ub0Jyb3dzZXIgKHRva2VuKSB7XG4gIGNvbnN0IHQgPSBTdHJpbmcodG9rZW4gfHwgJycpLnRyaW0oKTtcbiAgaWYgKCF0KSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3cml0ZVN0b3JhZ2VTdHJpbmcoJ2ZhYnJpYy5odWIuYWRtaW5Ub2tlbicsIHQpO1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdmYWJyaWNIdWJBZG1pblRva2VuU2F2ZWQnLCB7IGRldGFpbDogeyBvazogdHJ1ZSB9IH0pKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge31cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjbGVhckh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlciAoKSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZW1vdmVTdG9yYWdlS2V5KCdmYWJyaWMuaHViLmFkbWluVG9rZW4nKTtcbiAgICAgIHJlbW92ZVN0b3JhZ2VLZXkoJ2ZhYnJpYy5odWIuYWRtaW5Ub2tlbkV4cGlyZXNBdCcpO1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdmYWJyaWNIdWJBZG1pblRva2VuU2F2ZWQnLCB7IGRldGFpbDogeyBvazogZmFsc2UsIGNsZWFyZWQ6IHRydWUgfSB9KSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHJlYWRIdWJBZG1pblRva2VuRnJvbUJyb3dzZXIsXG4gIHNhdmVIdWJBZG1pblRva2VuVG9Ccm93c2VyLFxuICBjbGVhckh1YkFkbWluVG9rZW5Gcm9tQnJvd3NlclxufTtcbiJdLCJuYW1lcyI6WyJfcmVxdWlyZSIsInJlcXVpcmUiLCJyZWFkU3RvcmFnZVN0cmluZyIsIndyaXRlU3RvcmFnZVN0cmluZyIsInJlbW92ZVN0b3JhZ2VLZXkiLCJyZWFkSHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIiwiYWRtaW5Ub2tlblByb3AiLCJmcm9tUHJvcCIsIlN0cmluZyIsInRyaW0iLCJ3aW5kb3ciLCJlIiwic2F2ZUh1YkFkbWluVG9rZW5Ub0Jyb3dzZXIiLCJ0b2tlbiIsInQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJvayIsImNsZWFySHViQWRtaW5Ub2tlbkZyb21Ccm93c2VyIiwiY2xlYXJlZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/hubAdminTokenBrowser.js\n\n}")},"./functions/hubIdentityUiHints.js"(module){"use strict";eval("{\n\n/**\n * Browser identity classification for copy (matches TopPanel: password-locked vs watch-only).\n * @param {object|null|undefined} authLike Hub `auth` / identity: xprv, private, xpub, id, passwordProtected\n * @returns {'unlocked'|'password_locked'|'watch_only'|'none'}\n */\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction classifyHubBrowserIdentity(authLike) {\n if (!authLike || _typeof(authLike) !== 'object') return 'none';\n var hasPrivate = !!(authLike.xprv || authLike[\"private\"]);\n if (hasPrivate) return 'unlocked';\n var hasPublic = !!(authLike.xpub || authLike.id);\n if (!hasPublic) return 'none';\n if (authLike.passwordProtected) return 'password_locked';\n return 'watch_only';\n}\n\n/**\n * Appended to chat/peer unlock lines (Bridge toasts, fabric:chatWarning).\n * @param {object|null|undefined} authLike\n * @returns {string}\n */\nfunction fabricIdentityUnlockSuffixPlain(authLike) {\n var c = classifyHubBrowserIdentity(authLike);\n if (c === 'password_locked') {\n return ' Use Settings → Fabric identity or the top-bar Locked control to enter your encryption password.';\n }\n if (c === 'watch_only') {\n return ' Use Settings → Fabric identity or the top-bar identity menu to import a full key or use desktop signing (watch-only cannot sign).';\n }\n return ' Use Settings → Fabric identity or Log in in the top bar to create or restore a key.';\n}\nfunction fabricIdentityChatDisabledReasonPlain(authLike) {\n return \"Unlock identity to send chat messages.\".concat(fabricIdentityUnlockSuffixPlain(authLike));\n}\nfunction fabricIdentityPeerDisabledReasonPlain(authLike) {\n return \"Unlock identity to send peer messages.\".concat(fabricIdentityUnlockSuffixPlain(authLike));\n}\n\n/**\n * Short operator hint when signing / xprv is required (documents, payments, sidechain).\n * @param {object|null|undefined} authLike\n * @returns {string}\n */\nfunction fabricIdentityNeedFullKeyPlain(authLike) {\n var c = classifyHubBrowserIdentity(authLike);\n if (c === 'password_locked') {\n return 'Unlock with your encryption password (Settings → Fabric identity or top-bar Locked).';\n }\n if (c === 'watch_only') {\n return 'Import a full key or use desktop signing (Settings → Fabric identity or top-bar identity menu — watch-only cannot sign).';\n }\n return 'Create or restore a Fabric identity (Settings → Fabric identity or Log in).';\n}\n\n/**\n * Features page / storage-driven label when not using full React props (localStorage shape).\n * @param {{ xprv?: string, xpub?: string, id?: string, passwordProtected?: boolean }|null} local\n * @param {{ xprv?: string, xpub?: string }|null} sessionUnlocked\n * @returns {string}\n */\nfunction featuresPageIdentityButtonLabelFromStorage(local, sessionUnlocked) {\n var sessXprv = sessionUnlocked && sessionUnlocked.xprv && String(sessionUnlocked.xprv).trim();\n var sessXpub = sessionUnlocked && sessionUnlocked.xpub ? String(sessionUnlocked.xpub) : '';\n if (sessXprv && sessXpub) {\n return \"\".concat(sessXpub.slice(0, 8), \"\\u2026\").concat(sessXpub.slice(-8));\n }\n if (!local || _typeof(local) !== 'object') return 'Log in';\n var locXprv = local.xprv && String(local.xprv).trim();\n var locXpub = local.xpub ? String(local.xpub) : '';\n if (locXprv && !local.passwordProtected && locXpub) {\n return \"\".concat(locXpub.slice(0, 8), \"\\u2026\").concat(locXpub.slice(-8));\n }\n if (local.passwordProtected) return 'Locked';\n if (local.xpub || local.id) return 'Watch-only';\n return 'Log in';\n}\nmodule.exports = {\n classifyHubBrowserIdentity: classifyHubBrowserIdentity,\n fabricIdentityUnlockSuffixPlain: fabricIdentityUnlockSuffixPlain,\n fabricIdentityChatDisabledReasonPlain: fabricIdentityChatDisabledReasonPlain,\n fabricIdentityPeerDisabledReasonPlain: fabricIdentityPeerDisabledReasonPlain,\n fabricIdentityNeedFullKeyPlain: fabricIdentityNeedFullKeyPlain,\n featuresPageIdentityButtonLabelFromStorage: featuresPageIdentityButtonLabelFromStorage\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsQ0FBQyxDQUFDO0VBQ3REO0VBQ0EsSUFBSSxDQUFDTixLQUFLLElBQUlyQixPQUFBLENBQU9xQixLQUFLLE1BQUssUUFBUSxFQUFFLE9BQU8sUUFBUTtFQUN4RCxJQUFNTyxPQUFPLEdBQUdQLEtBQUssQ0FBQ1osSUFBSSxJQUFJZSxNQUFNLENBQUNILEtBQUssQ0FBQ1osSUFBSSxDQUFDLENBQUNnQixJQUFJLENBQUMsQ0FBQztFQUN2RCxJQUFNSSxPQUFPLEdBQUdSLEtBQUssQ0FBQ1YsSUFBSSxHQUFHYSxNQUFNLENBQUNILEtBQUssQ0FBQ1YsSUFBSSxDQUFDLEdBQUcsRUFBRTtFQUNwRCxJQUFJaUIsT0FBTyxJQUFJLENBQUNQLEtBQUssQ0FBQ1IsaUJBQWlCLElBQUlnQixPQUFPLEVBQUU7SUFDbEQsVUFBQVosTUFBQSxDQUFVWSxPQUFPLENBQUNGLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQUFWLE1BQUEsQ0FBSVksT0FBTyxDQUFDRixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDcEQ7RUFDQSxJQUFJTixLQUFLLENBQUNSLGlCQUFpQixFQUFFLE9BQU8sUUFBUTtFQUM1QyxJQUFJUSxLQUFLLENBQUNWLElBQUksSUFBSVUsS0FBSyxDQUFDVCxFQUFFLEVBQUUsT0FBTyxZQUFZO0VBQy9DLE9BQU8sUUFBUTtBQUNqQjtBQUVBa0IsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZnpCLDBCQUEwQixFQUExQkEsMEJBQTBCO0VBQzFCUSwrQkFBK0IsRUFBL0JBLCtCQUErQjtFQUMvQkUscUNBQXFDLEVBQXJDQSxxQ0FBcUM7RUFDckNFLHFDQUFxQyxFQUFyQ0EscUNBQXFDO0VBQ3JDQyw4QkFBOEIsRUFBOUJBLDhCQUE4QjtFQUM5QkMsMENBQTBDLEVBQTFDQTtBQUNGLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9odWJJZGVudGl0eVVpSGludHMuanM/YWQwZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQnJvd3NlciBpZGVudGl0eSBjbGFzc2lmaWNhdGlvbiBmb3IgY29weSAobWF0Y2hlcyBUb3BQYW5lbDogcGFzc3dvcmQtbG9ja2VkIHZzIHdhdGNoLW9ubHkpLlxuICogQHBhcmFtIHtvYmplY3R8bnVsbHx1bmRlZmluZWR9IGF1dGhMaWtlIEh1YiBgYXV0aGAgLyBpZGVudGl0eTogeHBydiwgcHJpdmF0ZSwgeHB1YiwgaWQsIHBhc3N3b3JkUHJvdGVjdGVkXG4gKiBAcmV0dXJucyB7J3VubG9ja2VkJ3wncGFzc3dvcmRfbG9ja2VkJ3wnd2F0Y2hfb25seSd8J25vbmUnfVxuICovXG5mdW5jdGlvbiBjbGFzc2lmeUh1YkJyb3dzZXJJZGVudGl0eSAoYXV0aExpa2UpIHtcbiAgaWYgKCFhdXRoTGlrZSB8fCB0eXBlb2YgYXV0aExpa2UgIT09ICdvYmplY3QnKSByZXR1cm4gJ25vbmUnO1xuICBjb25zdCBoYXNQcml2YXRlID0gISEoYXV0aExpa2UueHBydiB8fCBhdXRoTGlrZS5wcml2YXRlKTtcbiAgaWYgKGhhc1ByaXZhdGUpIHJldHVybiAndW5sb2NrZWQnO1xuICBjb25zdCBoYXNQdWJsaWMgPSAhIShhdXRoTGlrZS54cHViIHx8IGF1dGhMaWtlLmlkKTtcbiAgaWYgKCFoYXNQdWJsaWMpIHJldHVybiAnbm9uZSc7XG4gIGlmIChhdXRoTGlrZS5wYXNzd29yZFByb3RlY3RlZCkgcmV0dXJuICdwYXNzd29yZF9sb2NrZWQnO1xuICByZXR1cm4gJ3dhdGNoX29ubHknO1xufVxuXG4vKipcbiAqIEFwcGVuZGVkIHRvIGNoYXQvcGVlciB1bmxvY2sgbGluZXMgKEJyaWRnZSB0b2FzdHMsIGZhYnJpYzpjaGF0V2FybmluZykuXG4gKiBAcGFyYW0ge29iamVjdHxudWxsfHVuZGVmaW5lZH0gYXV0aExpa2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZhYnJpY0lkZW50aXR5VW5sb2NrU3VmZml4UGxhaW4gKGF1dGhMaWtlKSB7XG4gIGNvbnN0IGMgPSBjbGFzc2lmeUh1YkJyb3dzZXJJZGVudGl0eShhdXRoTGlrZSk7XG4gIGlmIChjID09PSAncGFzc3dvcmRfbG9ja2VkJykge1xuICAgIHJldHVybiAnIFVzZSBTZXR0aW5ncyDihpIgRmFicmljIGlkZW50aXR5IG9yIHRoZSB0b3AtYmFyIExvY2tlZCBjb250cm9sIHRvIGVudGVyIHlvdXIgZW5jcnlwdGlvbiBwYXNzd29yZC4nO1xuICB9XG4gIGlmIChjID09PSAnd2F0Y2hfb25seScpIHtcbiAgICByZXR1cm4gJyBVc2UgU2V0dGluZ3Mg4oaSIEZhYnJpYyBpZGVudGl0eSBvciB0aGUgdG9wLWJhciBpZGVudGl0eSBtZW51IHRvIGltcG9ydCBhIGZ1bGwga2V5IG9yIHVzZSBkZXNrdG9wIHNpZ25pbmcgKHdhdGNoLW9ubHkgY2Fubm90IHNpZ24pLic7XG4gIH1cbiAgcmV0dXJuICcgVXNlIFNldHRpbmdzIOKGkiBGYWJyaWMgaWRlbnRpdHkgb3IgTG9nIGluIGluIHRoZSB0b3AgYmFyIHRvIGNyZWF0ZSBvciByZXN0b3JlIGEga2V5Lic7XG59XG5cbmZ1bmN0aW9uIGZhYnJpY0lkZW50aXR5Q2hhdERpc2FibGVkUmVhc29uUGxhaW4gKGF1dGhMaWtlKSB7XG4gIHJldHVybiBgVW5sb2NrIGlkZW50aXR5IHRvIHNlbmQgY2hhdCBtZXNzYWdlcy4ke2ZhYnJpY0lkZW50aXR5VW5sb2NrU3VmZml4UGxhaW4oYXV0aExpa2UpfWA7XG59XG5cbmZ1bmN0aW9uIGZhYnJpY0lkZW50aXR5UGVlckRpc2FibGVkUmVhc29uUGxhaW4gKGF1dGhMaWtlKSB7XG4gIHJldHVybiBgVW5sb2NrIGlkZW50aXR5IHRvIHNlbmQgcGVlciBtZXNzYWdlcy4ke2ZhYnJpY0lkZW50aXR5VW5sb2NrU3VmZml4UGxhaW4oYXV0aExpa2UpfWA7XG59XG5cbi8qKlxuICogU2hvcnQgb3BlcmF0b3IgaGludCB3aGVuIHNpZ25pbmcgLyB4cHJ2IGlzIHJlcXVpcmVkIChkb2N1bWVudHMsIHBheW1lbnRzLCBzaWRlY2hhaW4pLlxuICogQHBhcmFtIHtvYmplY3R8bnVsbHx1bmRlZmluZWR9IGF1dGhMaWtlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmYWJyaWNJZGVudGl0eU5lZWRGdWxsS2V5UGxhaW4gKGF1dGhMaWtlKSB7XG4gIGNvbnN0IGMgPSBjbGFzc2lmeUh1YkJyb3dzZXJJZGVudGl0eShhdXRoTGlrZSk7XG4gIGlmIChjID09PSAncGFzc3dvcmRfbG9ja2VkJykge1xuICAgIHJldHVybiAnVW5sb2NrIHdpdGggeW91ciBlbmNyeXB0aW9uIHBhc3N3b3JkIChTZXR0aW5ncyDihpIgRmFicmljIGlkZW50aXR5IG9yIHRvcC1iYXIgTG9ja2VkKS4nO1xuICB9XG4gIGlmIChjID09PSAnd2F0Y2hfb25seScpIHtcbiAgICByZXR1cm4gJ0ltcG9ydCBhIGZ1bGwga2V5IG9yIHVzZSBkZXNrdG9wIHNpZ25pbmcgKFNldHRpbmdzIOKGkiBGYWJyaWMgaWRlbnRpdHkgb3IgdG9wLWJhciBpZGVudGl0eSBtZW51IOKAlCB3YXRjaC1vbmx5IGNhbm5vdCBzaWduKS4nO1xuICB9XG4gIHJldHVybiAnQ3JlYXRlIG9yIHJlc3RvcmUgYSBGYWJyaWMgaWRlbnRpdHkgKFNldHRpbmdzIOKGkiBGYWJyaWMgaWRlbnRpdHkgb3IgTG9nIGluKS4nO1xufVxuXG4vKipcbiAqIEZlYXR1cmVzIHBhZ2UgLyBzdG9yYWdlLWRyaXZlbiBsYWJlbCB3aGVuIG5vdCB1c2luZyBmdWxsIFJlYWN0IHByb3BzIChsb2NhbFN0b3JhZ2Ugc2hhcGUpLlxuICogQHBhcmFtIHt7IHhwcnY/OiBzdHJpbmcsIHhwdWI/OiBzdHJpbmcsIGlkPzogc3RyaW5nLCBwYXNzd29yZFByb3RlY3RlZD86IGJvb2xlYW4gfXxudWxsfSBsb2NhbFxuICogQHBhcmFtIHt7IHhwcnY/OiBzdHJpbmcsIHhwdWI/OiBzdHJpbmcgfXxudWxsfSBzZXNzaW9uVW5sb2NrZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVzUGFnZUlkZW50aXR5QnV0dG9uTGFiZWxGcm9tU3RvcmFnZSAobG9jYWwsIHNlc3Npb25VbmxvY2tlZCkge1xuICBjb25zdCBzZXNzWHBydiA9IHNlc3Npb25VbmxvY2tlZCAmJiBzZXNzaW9uVW5sb2NrZWQueHBydiAmJiBTdHJpbmcoc2Vzc2lvblVubG9ja2VkLnhwcnYpLnRyaW0oKTtcbiAgY29uc3Qgc2Vzc1hwdWIgPSBzZXNzaW9uVW5sb2NrZWQgJiYgc2Vzc2lvblVubG9ja2VkLnhwdWIgPyBTdHJpbmcoc2Vzc2lvblVubG9ja2VkLnhwdWIpIDogJyc7XG4gIGlmIChzZXNzWHBydiAmJiBzZXNzWHB1Yikge1xuICAgIHJldHVybiBgJHtzZXNzWHB1Yi5zbGljZSgwLCA4KX3igKYke3Nlc3NYcHViLnNsaWNlKC04KX1gO1xuICB9XG4gIGlmICghbG9jYWwgfHwgdHlwZW9mIGxvY2FsICE9PSAnb2JqZWN0JykgcmV0dXJuICdMb2cgaW4nO1xuICBjb25zdCBsb2NYcHJ2ID0gbG9jYWwueHBydiAmJiBTdHJpbmcobG9jYWwueHBydikudHJpbSgpO1xuICBjb25zdCBsb2NYcHViID0gbG9jYWwueHB1YiA/IFN0cmluZyhsb2NhbC54cHViKSA6ICcnO1xuICBpZiAobG9jWHBydiAmJiAhbG9jYWwucGFzc3dvcmRQcm90ZWN0ZWQgJiYgbG9jWHB1Yikge1xuICAgIHJldHVybiBgJHtsb2NYcHViLnNsaWNlKDAsIDgpfeKApiR7bG9jWHB1Yi5zbGljZSgtOCl9YDtcbiAgfVxuICBpZiAobG9jYWwucGFzc3dvcmRQcm90ZWN0ZWQpIHJldHVybiAnTG9ja2VkJztcbiAgaWYgKGxvY2FsLnhwdWIgfHwgbG9jYWwuaWQpIHJldHVybiAnV2F0Y2gtb25seSc7XG4gIHJldHVybiAnTG9nIGluJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNsYXNzaWZ5SHViQnJvd3NlcklkZW50aXR5LFxuICBmYWJyaWNJZGVudGl0eVVubG9ja1N1ZmZpeFBsYWluLFxuICBmYWJyaWNJZGVudGl0eUNoYXREaXNhYmxlZFJlYXNvblBsYWluLFxuICBmYWJyaWNJZGVudGl0eVBlZXJEaXNhYmxlZFJlYXNvblBsYWluLFxuICBmYWJyaWNJZGVudGl0eU5lZWRGdWxsS2V5UGxhaW4sXG4gIGZlYXR1cmVzUGFnZUlkZW50aXR5QnV0dG9uTGFiZWxGcm9tU3RvcmFnZVxufTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJjbGFzc2lmeUh1YkJyb3dzZXJJZGVudGl0eSIsImF1dGhMaWtlIiwiaGFzUHJpdmF0ZSIsInhwcnYiLCJoYXNQdWJsaWMiLCJ4cHViIiwiaWQiLCJwYXNzd29yZFByb3RlY3RlZCIsImZhYnJpY0lkZW50aXR5VW5sb2NrU3VmZml4UGxhaW4iLCJjIiwiZmFicmljSWRlbnRpdHlDaGF0RGlzYWJsZWRSZWFzb25QbGFpbiIsImNvbmNhdCIsImZhYnJpY0lkZW50aXR5UGVlckRpc2FibGVkUmVhc29uUGxhaW4iLCJmYWJyaWNJZGVudGl0eU5lZWRGdWxsS2V5UGxhaW4iLCJmZWF0dXJlc1BhZ2VJZGVudGl0eUJ1dHRvbkxhYmVsRnJvbVN0b3JhZ2UiLCJsb2NhbCIsInNlc3Npb25VbmxvY2tlZCIsInNlc3NYcHJ2IiwiU3RyaW5nIiwidHJpbSIsInNlc3NYcHViIiwic2xpY2UiLCJsb2NYcHJ2IiwibG9jWHB1YiIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/hubIdentityUiHints.js\n\n}")},"./functions/hubJsonRpc.js"(module){"use strict";eval('{\n\n/**\n * POST JSON-RPC 2.0 to same-origin `/services/rpc` (browser / Electron shell).\n * @param {string} method\n * @param {unknown[]} [params]\n * @returns {Promise}\n */\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction hubJsonRpc(_x) {\n return _hubJsonRpc.apply(this, arguments);\n}\nfunction _hubJsonRpc() {\n _hubJsonRpc = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(method) {\n var params,\n origin,\n res,\n body,\n _args = arguments,\n _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n params = _args.length > 1 && _args[1] !== undefined ? _args[1] : [];\n origin = typeof window !== \'undefined\' ? window.location.origin : \'\';\n _context.n = 1;\n return fetch("".concat(origin, "/services/rpc"), {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n },\n body: JSON.stringify({\n jsonrpc: \'2.0\',\n id: 1,\n method: method,\n params: params\n })\n });\n case 1:\n res = _context.v;\n body = {};\n _context.p = 2;\n _context.n = 3;\n return res.json();\n case 3:\n body = _context.v;\n _context.n = 5;\n break;\n case 4:\n _context.p = 4;\n _t = _context.v;\n throw new Error(\'Hub returned non-JSON\');\n case 5:\n if (!(!res.ok || body.error)) {\n _context.n = 6;\n break;\n }\n throw new Error(body.error && body.error.message || "HTTP ".concat(res.status));\n case 6:\n return _context.a(2, body.result);\n }\n }, _callee, null, [[2, 4]]);\n }));\n return _hubJsonRpc.apply(this, arguments);\n}\nmodule.exports = {\n hubJsonRpc: hubJsonRpc\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQ0MsT0FBTyxHQUFHO0VBQUUvQixVQUFVLEVBQVZBO0FBQVcsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2h1Ykpzb25ScGMuanM/MDk4YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUE9TVCBKU09OLVJQQyAyLjAgdG8gc2FtZS1vcmlnaW4gYC9zZXJ2aWNlcy9ycGNgIChicm93c2VyIC8gRWxlY3Ryb24gc2hlbGwpLlxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICogQHBhcmFtIHt1bmtub3duW119IFtwYXJhbXNdXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaHViSnNvblJwYyAobWV0aG9kLCBwYXJhbXMgPSBbXSkge1xuICBjb25zdCBvcmlnaW4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gOiAnJztcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7b3JpZ2lufS9zZXJ2aWNlcy9ycGNgLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsganNvbnJwYzogJzIuMCcsIGlkOiAxLCBtZXRob2QsIHBhcmFtcyB9KVxuICB9KTtcbiAgbGV0IGJvZHkgPSB7fTtcbiAgdHJ5IHtcbiAgICBib2R5ID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHRocm93IG5ldyBFcnJvcignSHViIHJldHVybmVkIG5vbi1KU09OJyk7XG4gIH1cbiAgaWYgKCFyZXMub2sgfHwgYm9keS5lcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcigoYm9keS5lcnJvciAmJiBib2R5LmVycm9yLm1lc3NhZ2UpIHx8IGBIVFRQICR7cmVzLnN0YXR1c31gKTtcbiAgfVxuICByZXR1cm4gYm9keS5yZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBodWJKc29uUnBjIH07XG4iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yIiwiZSIsInQiLCJyIiwiU3ltYm9sIiwibiIsIml0ZXJhdG9yIiwibyIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJwcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJodWJKc29uUnBjIiwiX3giLCJfaHViSnNvblJwYyIsIl9jYWxsZWUiLCJtZXRob2QiLCJwYXJhbXMiLCJvcmlnaW4iLCJyZXMiLCJib2R5IiwiX2FyZ3MiLCJfdCIsIl9jb250ZXh0IiwidW5kZWZpbmVkIiwid2luZG93IiwibG9jYXRpb24iLCJmZXRjaCIsImNvbmNhdCIsImhlYWRlcnMiLCJBY2NlcHQiLCJKU09OIiwic3RyaW5naWZ5IiwianNvbnJwYyIsImlkIiwianNvbiIsIkVycm9yIiwib2siLCJlcnJvciIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJyZXN1bHQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/hubJsonRpc.js\n\n}')},"./functions/hubListPagination.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar DEFAULT_HUB_LIST_PAGE_SIZE = 10;\n\n/**\n * @param {unknown[]} items\n * @param {number} requestedPage\n * @param {number} [pageSize]\n * @returns {{\n * slice: unknown[],\n * totalPages: number,\n * page: number,\n * total: number,\n * rangeFrom: number,\n * rangeTo: number,\n * pageSize: number\n * }}\n */\nfunction paginateArray(items, requestedPage, pageSize) {\n var arr = Array.isArray(items) ? items : [];\n var n = Math.max(1, Number(pageSize) || DEFAULT_HUB_LIST_PAGE_SIZE);\n var total = arr.length;\n var totalPages = Math.max(1, Math.ceil(total / n));\n var raw = Number(requestedPage);\n var requested = Number.isFinite(raw) && raw >= 1 ? Math.floor(raw) : 1;\n var page = Math.min(requested, totalPages);\n var start = (page - 1) * n;\n var slice = arr.slice(start, start + n);\n var rangeFrom = total ? start + 1 : 0;\n var rangeTo = Math.min(start + n, total);\n return {\n slice: slice,\n totalPages: totalPages,\n page: page,\n total: total,\n rangeFrom: rangeFrom,\n rangeTo: rangeTo,\n pageSize: n\n };\n}\n\n/**\n * @param {unknown[]} items\n * @param {string} resetKey When this changes, active page resets to 1.\n * @param {number} [pageSize]\n */\nfunction useHubListPagination(items, resetKey, pageSize) {\n var _React$useState = React.useState(1),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n page = _React$useState2[0],\n setPage = _React$useState2[1];\n React.useEffect(function () {\n setPage(1);\n }, [resetKey]);\n var model = paginateArray(items, page, pageSize);\n React.useEffect(function () {\n if (model.page !== page) setPage(model.page);\n }, [model.page, page]);\n return _objectSpread(_objectSpread({}, model), {}, {\n setPage: setPage\n });\n}\nmodule.exports = {\n DEFAULT_HUB_LIST_PAGE_SIZE: DEFAULT_HUB_LIST_PAGE_SIZE,\n paginateArray: paginateArray,\n useHubListPagination: useHubListPagination\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzZCLG9CQUFvQkEsQ0FBRWxCLEtBQUssRUFBRW1CLFFBQVEsRUFBRWpCLFFBQVEsRUFBRTtFQUN4RCxJQUFBa0IsZUFBQSxHQUF3QnhCLEtBQUssQ0FBQ3lCLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFBQUMsZ0JBQUEsR0FBQTlDLGNBQUEsQ0FBQTRDLGVBQUE7SUFBbENQLElBQUksR0FBQVMsZ0JBQUE7SUFBRUMsT0FBTyxHQUFBRCxnQkFBQTtFQUNwQjFCLEtBQUssQ0FBQzRCLFNBQVMsQ0FBQyxZQUFNO0lBQ3BCRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0VBQ1osQ0FBQyxFQUFFLENBQUNKLFFBQVEsQ0FBQyxDQUFDO0VBQ2QsSUFBTU0sS0FBSyxHQUFHMUIsYUFBYSxDQUFDQyxLQUFLLEVBQUVhLElBQUksRUFBRVgsUUFBUSxDQUFDO0VBQ2xETixLQUFLLENBQUM0QixTQUFTLENBQUMsWUFBTTtJQUNwQixJQUFJQyxLQUFLLENBQUNaLElBQUksS0FBS0EsSUFBSSxFQUFFVSxPQUFPLENBQUNFLEtBQUssQ0FBQ1osSUFBSSxDQUFDO0VBQzlDLENBQUMsRUFBRSxDQUFDWSxLQUFLLENBQUNaLElBQUksRUFBRUEsSUFBSSxDQUFDLENBQUM7RUFDdEIsT0FBQXhELGFBQUEsQ0FBQUEsYUFBQSxLQUFZb0UsS0FBSztJQUFFRixPQUFPLEVBQVBBO0VBQU87QUFDNUI7QUFFQUcsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZjdCLDBCQUEwQixFQUExQkEsMEJBQTBCO0VBQzFCQyxhQUFhLEVBQWJBLGFBQWE7RUFDYm1CLG9CQUFvQixFQUFwQkE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvaHViTGlzdFBhZ2luYXRpb24uanM/ZDU5YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxuY29uc3QgREVGQVVMVF9IVUJfTElTVF9QQUdFX1NJWkUgPSAxMDtcblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd25bXX0gaXRlbXNcbiAqIEBwYXJhbSB7bnVtYmVyfSByZXF1ZXN0ZWRQYWdlXG4gKiBAcGFyYW0ge251bWJlcn0gW3BhZ2VTaXplXVxuICogQHJldHVybnMge3tcbiAqICAgc2xpY2U6IHVua25vd25bXSxcbiAqICAgdG90YWxQYWdlczogbnVtYmVyLFxuICogICBwYWdlOiBudW1iZXIsXG4gKiAgIHRvdGFsOiBudW1iZXIsXG4gKiAgIHJhbmdlRnJvbTogbnVtYmVyLFxuICogICByYW5nZVRvOiBudW1iZXIsXG4gKiAgIHBhZ2VTaXplOiBudW1iZXJcbiAqIH19XG4gKi9cbmZ1bmN0aW9uIHBhZ2luYXRlQXJyYXkgKGl0ZW1zLCByZXF1ZXN0ZWRQYWdlLCBwYWdlU2l6ZSkge1xuICBjb25zdCBhcnIgPSBBcnJheS5pc0FycmF5KGl0ZW1zKSA/IGl0ZW1zIDogW107XG4gIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBOdW1iZXIocGFnZVNpemUpIHx8IERFRkFVTFRfSFVCX0xJU1RfUEFHRV9TSVpFKTtcbiAgY29uc3QgdG90YWwgPSBhcnIubGVuZ3RoO1xuICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHRvdGFsIC8gbikpO1xuICBjb25zdCByYXcgPSBOdW1iZXIocmVxdWVzdGVkUGFnZSk7XG4gIGNvbnN0IHJlcXVlc3RlZCA9IE51bWJlci5pc0Zpbml0ZShyYXcpICYmIHJhdyA+PSAxID8gTWF0aC5mbG9vcihyYXcpIDogMTtcbiAgY29uc3QgcGFnZSA9IE1hdGgubWluKHJlcXVlc3RlZCwgdG90YWxQYWdlcyk7XG4gIGNvbnN0IHN0YXJ0ID0gKHBhZ2UgLSAxKSAqIG47XG4gIGNvbnN0IHNsaWNlID0gYXJyLnNsaWNlKHN0YXJ0LCBzdGFydCArIG4pO1xuICBjb25zdCByYW5nZUZyb20gPSB0b3RhbCA/IHN0YXJ0ICsgMSA6IDA7XG4gIGNvbnN0IHJhbmdlVG8gPSBNYXRoLm1pbihzdGFydCArIG4sIHRvdGFsKTtcbiAgcmV0dXJuIHtcbiAgICBzbGljZSxcbiAgICB0b3RhbFBhZ2VzLFxuICAgIHBhZ2UsXG4gICAgdG90YWwsXG4gICAgcmFuZ2VGcm9tLFxuICAgIHJhbmdlVG8sXG4gICAgcGFnZVNpemU6IG5cbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3Vua25vd25bXX0gaXRlbXNcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXNldEtleSBXaGVuIHRoaXMgY2hhbmdlcywgYWN0aXZlIHBhZ2UgcmVzZXRzIHRvIDEuXG4gKiBAcGFyYW0ge251bWJlcn0gW3BhZ2VTaXplXVxuICovXG5mdW5jdGlvbiB1c2VIdWJMaXN0UGFnaW5hdGlvbiAoaXRlbXMsIHJlc2V0S2V5LCBwYWdlU2l6ZSkge1xuICBjb25zdCBbcGFnZSwgc2V0UGFnZV0gPSBSZWFjdC51c2VTdGF0ZSgxKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRQYWdlKDEpO1xuICB9LCBbcmVzZXRLZXldKTtcbiAgY29uc3QgbW9kZWwgPSBwYWdpbmF0ZUFycmF5KGl0ZW1zLCBwYWdlLCBwYWdlU2l6ZSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGVsLnBhZ2UgIT09IHBhZ2UpIHNldFBhZ2UobW9kZWwucGFnZSk7XG4gIH0sIFttb2RlbC5wYWdlLCBwYWdlXSk7XG4gIHJldHVybiB7IC4uLm1vZGVsLCBzZXRQYWdlIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBERUZBVUxUX0hVQl9MSVNUX1BBR0VfU0laRSxcbiAgcGFnaW5hdGVBcnJheSxcbiAgdXNlSHViTGlzdFBhZ2luYXRpb25cbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsIm4iLCJsIiwidSIsImYiLCJuZXh0IiwiZG9uZSIsImlzQXJyYXkiLCJSZWFjdCIsInJlcXVpcmUiLCJERUZBVUxUX0hVQl9MSVNUX1BBR0VfU0laRSIsInBhZ2luYXRlQXJyYXkiLCJpdGVtcyIsInJlcXVlc3RlZFBhZ2UiLCJwYWdlU2l6ZSIsImFyciIsIk1hdGgiLCJtYXgiLCJ0b3RhbCIsInRvdGFsUGFnZXMiLCJjZWlsIiwicmF3IiwicmVxdWVzdGVkIiwiaXNGaW5pdGUiLCJmbG9vciIsInBhZ2UiLCJtaW4iLCJzdGFydCIsInJhbmdlRnJvbSIsInJhbmdlVG8iLCJ1c2VIdWJMaXN0UGFnaW5hdGlvbiIsInJlc2V0S2V5IiwiX1JlYWN0JHVzZVN0YXRlIiwidXNlU3RhdGUiLCJfUmVhY3QkdXNlU3RhdGUyIiwic2V0UGFnZSIsInVzZUVmZmVjdCIsIm1vZGVsIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/hubListPagination.js\n\n}')},"./functions/hubNetworkStatus.js"(module){"use strict";eval("{\n\n/**\n * True when `obj` looks like a {@link GetNetworkStatus} payload from the Hub\n * (as stored on Bridge `networkStatus` / `lastNetworkStatus`).\n */\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction isHubNetworkStatusShape(obj) {\n if (!obj || _typeof(obj) !== 'object') return false;\n if (obj.network && _typeof(obj.network) === 'object') return true;\n if (Array.isArray(obj.peers)) return true;\n if (typeof obj.fabricPeerId === 'string' && obj.fabricPeerId.trim()) return true;\n if (obj.bitcoin && _typeof(obj.bitcoin) === 'object') return true;\n if (obj.setup && _typeof(obj.setup) === 'object' && ('configured' in obj.setup || 'needsSetup' in obj.setup)) {\n return true;\n }\n if (obj.publishedDocuments && _typeof(obj.publishedDocuments) === 'object') return true;\n if (obj.state && _typeof(obj.state) === 'object' && (obj.state.status != null || obj.state.services)) {\n return true;\n }\n return false;\n}\n\n/**\n * When {@link GetNetworkStatus} has not arrived yet, explain whether the WebSocket is open\n * (avoids implying the hub is down when the socket is up but RPC is slow).\n * @param {object|null|undefined} bridgeInstance Bridge component instance (`bridgeRef.current`)\n * @returns {string|null} User-facing line, or null to use a generic default\n */\nfunction bridgeWebSocketLoadingHint(bridgeInstance) {\n if (!bridgeInstance || typeof bridgeInstance.getConnectionStatus !== 'function') return null;\n try {\n var cs = bridgeInstance.getConnectionStatus();\n var ws = cs && cs.websocket;\n if (!ws) return null;\n if (ws.connected && ws.readyState === 1) {\n return 'WebSocket connected — waiting for network status from the hub.';\n }\n if (ws.readyState === 0) {\n return 'Opening WebSocket to the hub…';\n }\n return 'Reconnecting to the hub…';\n } catch (_) {\n return null;\n }\n}\nmodule.exports = {\n isHubNetworkStatusShape: isHubNetworkStatusShape,\n bridgeWebSocketLoadingHint: bridgeWebSocketLoadingHint\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LDBCQUEwQixFQUExQkE7QUFBMkIsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2h1Yk5ldHdvcmtTdGF0dXMuanM/MDcyZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGBvYmpgIGxvb2tzIGxpa2UgYSB7QGxpbmsgR2V0TmV0d29ya1N0YXR1c30gcGF5bG9hZCBmcm9tIHRoZSBIdWJcbiAqIChhcyBzdG9yZWQgb24gQnJpZGdlIGBuZXR3b3JrU3RhdHVzYCAvIGBsYXN0TmV0d29ya1N0YXR1c2ApLlxuICovXG5mdW5jdGlvbiBpc0h1Yk5ldHdvcmtTdGF0dXNTaGFwZSAob2JqKSB7XG4gIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGlmIChvYmoubmV0d29yayAmJiB0eXBlb2Ygb2JqLm5ldHdvcmsgPT09ICdvYmplY3QnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqLnBlZXJzKSkgcmV0dXJuIHRydWU7XG4gIGlmICh0eXBlb2Ygb2JqLmZhYnJpY1BlZXJJZCA9PT0gJ3N0cmluZycgJiYgb2JqLmZhYnJpY1BlZXJJZC50cmltKCkpIHJldHVybiB0cnVlO1xuICBpZiAob2JqLmJpdGNvaW4gJiYgdHlwZW9mIG9iai5iaXRjb2luID09PSAnb2JqZWN0JykgcmV0dXJuIHRydWU7XG4gIGlmIChvYmouc2V0dXAgJiYgdHlwZW9mIG9iai5zZXR1cCA9PT0gJ29iamVjdCcgJiYgKCdjb25maWd1cmVkJyBpbiBvYmouc2V0dXAgfHwgJ25lZWRzU2V0dXAnIGluIG9iai5zZXR1cCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAob2JqLnB1Ymxpc2hlZERvY3VtZW50cyAmJiB0eXBlb2Ygb2JqLnB1Ymxpc2hlZERvY3VtZW50cyA9PT0gJ29iamVjdCcpIHJldHVybiB0cnVlO1xuICBpZiAob2JqLnN0YXRlICYmIHR5cGVvZiBvYmouc3RhdGUgPT09ICdvYmplY3QnICYmIChvYmouc3RhdGUuc3RhdHVzICE9IG51bGwgfHwgb2JqLnN0YXRlLnNlcnZpY2VzKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBXaGVuIHtAbGluayBHZXROZXR3b3JrU3RhdHVzfSBoYXMgbm90IGFycml2ZWQgeWV0LCBleHBsYWluIHdoZXRoZXIgdGhlIFdlYlNvY2tldCBpcyBvcGVuXG4gKiAoYXZvaWRzIGltcGx5aW5nIHRoZSBodWIgaXMgZG93biB3aGVuIHRoZSBzb2NrZXQgaXMgdXAgYnV0IFJQQyBpcyBzbG93KS5cbiAqIEBwYXJhbSB7b2JqZWN0fG51bGx8dW5kZWZpbmVkfSBicmlkZ2VJbnN0YW5jZSBCcmlkZ2UgY29tcG9uZW50IGluc3RhbmNlIChgYnJpZGdlUmVmLmN1cnJlbnRgKVxuICogQHJldHVybnMge3N0cmluZ3xudWxsfSBVc2VyLWZhY2luZyBsaW5lLCBvciBudWxsIHRvIHVzZSBhIGdlbmVyaWMgZGVmYXVsdFxuICovXG5mdW5jdGlvbiBicmlkZ2VXZWJTb2NrZXRMb2FkaW5nSGludCAoYnJpZGdlSW5zdGFuY2UpIHtcbiAgaWYgKCFicmlkZ2VJbnN0YW5jZSB8fCB0eXBlb2YgYnJpZGdlSW5zdGFuY2UuZ2V0Q29ubmVjdGlvblN0YXR1cyAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3QgY3MgPSBicmlkZ2VJbnN0YW5jZS5nZXRDb25uZWN0aW9uU3RhdHVzKCk7XG4gICAgY29uc3Qgd3MgPSBjcyAmJiBjcy53ZWJzb2NrZXQ7XG4gICAgaWYgKCF3cykgcmV0dXJuIG51bGw7XG4gICAgaWYgKHdzLmNvbm5lY3RlZCAmJiB3cy5yZWFkeVN0YXRlID09PSAxKSB7XG4gICAgICByZXR1cm4gJ1dlYlNvY2tldCBjb25uZWN0ZWQg4oCUIHdhaXRpbmcgZm9yIG5ldHdvcmsgc3RhdHVzIGZyb20gdGhlIGh1Yi4nO1xuICAgIH1cbiAgICBpZiAod3MucmVhZHlTdGF0ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuICdPcGVuaW5nIFdlYlNvY2tldCB0byB0aGUgaHVi4oCmJztcbiAgICB9XG4gICAgcmV0dXJuICdSZWNvbm5lY3RpbmcgdG8gdGhlIGh1YuKApic7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgaXNIdWJOZXR3b3JrU3RhdHVzU2hhcGUsIGJyaWRnZVdlYlNvY2tldExvYWRpbmdIaW50IH07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiaXNIdWJOZXR3b3JrU3RhdHVzU2hhcGUiLCJvYmoiLCJuZXR3b3JrIiwiQXJyYXkiLCJpc0FycmF5IiwicGVlcnMiLCJmYWJyaWNQZWVySWQiLCJ0cmltIiwiYml0Y29pbiIsInNldHVwIiwicHVibGlzaGVkRG9jdW1lbnRzIiwic3RhdGUiLCJzdGF0dXMiLCJzZXJ2aWNlcyIsImJyaWRnZVdlYlNvY2tldExvYWRpbmdIaW50IiwiYnJpZGdlSW5zdGFuY2UiLCJnZXRDb25uZWN0aW9uU3RhdHVzIiwiY3MiLCJ3cyIsIndlYnNvY2tldCIsImNvbm5lY3RlZCIsInJlYWR5U3RhdGUiLCJfIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/hubNetworkStatus.js\n\n}")},"./functions/hubPublicVisitor.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ "./functions/fabricBrowserState.js"),\n readStorageJSON = _require.readStorageJSON;\nvar _require2 = __webpack_require__(/*! ./fabricDelegationLocal */ "./functions/fabricDelegationLocal.js"),\n hasExternalSigningDelegation = _require2.hasExternalSigningDelegation;\nfunction hasPersistedFabricIdentity() {\n if (typeof window === \'undefined\') return false;\n try {\n var p = readStorageJSON(\'fabric.identity.local\', null);\n return !!(p && (p.id || p.xpub));\n } catch (e) {\n return false;\n }\n}\n\n/**\n * True when `localIdentity` or `propsAuth` carries signing material in memory (xprv or legacy private).\n * Locked or watch-only shells still need unlock/import before signing even when this is false.\n * @param {{ localIdentity?: object|null, propsAuth?: object|null }} args\n * @returns {boolean}\n */\nfunction hasUnlockedHubSigningIdentity(_ref) {\n var localIdentity = _ref.localIdentity,\n propsAuth = _ref.propsAuth;\n var fromLocal = !!(localIdentity && (localIdentity.xprv || localIdentity["private"]));\n var fromProps = !!(propsAuth && (propsAuth.xprv || propsAuth["private"]));\n return fromLocal || fromProps;\n}\n\n/**\n * True only for anonymous browsers with **no** enrolled Hub shell identity.\n *\n * Once `HubInterface` has hydrated `localIdentity` from disk (password-locked, watch-only xpub, or\n * desktop-linked profile), we return **false** so the normal shell renders — TopPanel shows\n * Unlock / watch-only / signed-in — instead of replacing routes with {@link PublicVisitorGate}.\n *\n * Signing-protected flows still require `xprv` in memory or delegation elsewhere.\n *\n * @param {{ localIdentity?: object|null, propsAuth?: object|null }} args\n * @returns {boolean}\n */\nfunction computePublicHubVisitor(_ref2) {\n var localIdentity = _ref2.localIdentity,\n propsAuth = _ref2.propsAuth;\n if (hasUnlockedHubSigningIdentity({\n localIdentity: localIdentity,\n propsAuth: propsAuth\n })) return false;\n if (localIdentity && (localIdentity.id || localIdentity.xpub)) {\n return false;\n }\n // Before HubInterface hydrates `localIdentity`, a locked/watch-only record on\n // disk must not be treated as an anonymous public visitor.\n if (hasPersistedFabricIdentity()) return false;\n if (hasExternalSigningDelegation()) return false;\n return true;\n}\nmodule.exports = {\n computePublicHubVisitor: computePublicHubVisitor,\n hasPersistedFabricIdentity: hasPersistedFabricIdentity,\n hasUnlockedHubSigningIdentity: hasUnlockedHubSigningIdentity\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvaHViUHVibGljVmlzaXRvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFBQSxRQUFBLEdBQTRCQyxtQkFBTyxDQUFDLCtEQUFzQixDQUFDO0VBQW5EQyxlQUFlLEdBQUFGLFFBQUEsQ0FBZkUsZUFBZTtBQUN2QixJQUFBQyxTQUFBLEdBQXlDRixtQkFBTyxDQUFDLHFFQUF5QixDQUFDO0VBQW5FRyw0QkFBNEIsR0FBQUQsU0FBQSxDQUE1QkMsNEJBQTRCO0FBRXBDLFNBQVNDLDBCQUEwQkEsQ0FBQSxFQUFJO0VBQ3JDLElBQUksT0FBT0MsTUFBTSxLQUFLLFdBQVcsRUFBRSxPQUFPLEtBQUs7RUFDL0MsSUFBSTtJQUNGLElBQU1DLENBQUMsR0FBR0wsZUFBZSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQztJQUN4RCxPQUFPLENBQUMsRUFBRUssQ0FBQyxLQUFLQSxDQUFDLENBQUNDLEVBQUUsSUFBSUQsQ0FBQyxDQUFDRSxJQUFJLENBQUMsQ0FBQztFQUNsQyxDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFO0lBQ1YsT0FBTyxLQUFLO0VBQ2Q7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyw2QkFBNkJBLENBQUFDLElBQUEsRUFBZ0M7RUFBQSxJQUE1QkMsYUFBYSxHQUFBRCxJQUFBLENBQWJDLGFBQWE7SUFBRUMsU0FBUyxHQUFBRixJQUFBLENBQVRFLFNBQVM7RUFDaEUsSUFBTUMsU0FBUyxHQUFHLENBQUMsRUFBRUYsYUFBYSxLQUFLQSxhQUFhLENBQUNHLElBQUksSUFBSUgsYUFBYSxXQUFRLENBQUMsQ0FBQztFQUNwRixJQUFNSSxTQUFTLEdBQUcsQ0FBQyxFQUFFSCxTQUFTLEtBQUtBLFNBQVMsQ0FBQ0UsSUFBSSxJQUFJRixTQUFTLFdBQVEsQ0FBQyxDQUFDO0VBQ3hFLE9BQU9DLFNBQVMsSUFBSUUsU0FBUztBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyx1QkFBdUJBLENBQUFDLEtBQUEsRUFBZ0M7RUFBQSxJQUE1Qk4sYUFBYSxHQUFBTSxLQUFBLENBQWJOLGFBQWE7SUFBRUMsU0FBUyxHQUFBSyxLQUFBLENBQVRMLFNBQVM7RUFDMUQsSUFBSUgsNkJBQTZCLENBQUM7SUFBRUUsYUFBYSxFQUFiQSxhQUFhO0lBQUVDLFNBQVMsRUFBVEE7RUFBVSxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUs7RUFDN0UsSUFDRUQsYUFBYSxLQUNaQSxhQUFhLENBQUNMLEVBQUUsSUFBSUssYUFBYSxDQUFDSixJQUFJLENBQUMsRUFDeEM7SUFDQSxPQUFPLEtBQUs7RUFDZDtFQUNBO0VBQ0E7RUFDQSxJQUFJSiwwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsT0FBTyxLQUFLO0VBQzlDLElBQUlELDRCQUE0QixDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUs7RUFDaEQsT0FBTyxJQUFJO0FBQ2I7QUFFQWdCLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2ZILHVCQUF1QixFQUF2QkEsdUJBQXVCO0VBQ3ZCYiwwQkFBMEIsRUFBMUJBLDBCQUEwQjtFQUMxQk0sNkJBQTZCLEVBQTdCQTtBQUNGLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9odWJQdWJsaWNWaXNpdG9yLmpzPzhjZWUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7IHJlYWRTdG9yYWdlSlNPTiB9ID0gcmVxdWlyZSgnLi9mYWJyaWNCcm93c2VyU3RhdGUnKTtcbmNvbnN0IHsgaGFzRXh0ZXJuYWxTaWduaW5nRGVsZWdhdGlvbiB9ID0gcmVxdWlyZSgnLi9mYWJyaWNEZWxlZ2F0aW9uTG9jYWwnKTtcblxuZnVuY3Rpb24gaGFzUGVyc2lzdGVkRmFicmljSWRlbnRpdHkgKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwID0gcmVhZFN0b3JhZ2VKU09OKCdmYWJyaWMuaWRlbnRpdHkubG9jYWwnLCBudWxsKTtcbiAgICByZXR1cm4gISEocCAmJiAocC5pZCB8fCBwLnhwdWIpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRydWUgd2hlbiBgbG9jYWxJZGVudGl0eWAgb3IgYHByb3BzQXV0aGAgY2FycmllcyBzaWduaW5nIG1hdGVyaWFsIGluIG1lbW9yeSAoeHBydiBvciBsZWdhY3kgcHJpdmF0ZSkuXG4gKiBMb2NrZWQgb3Igd2F0Y2gtb25seSBzaGVsbHMgc3RpbGwgbmVlZCB1bmxvY2svaW1wb3J0IGJlZm9yZSBzaWduaW5nIGV2ZW4gd2hlbiB0aGlzIGlzIGZhbHNlLlxuICogQHBhcmFtIHt7IGxvY2FsSWRlbnRpdHk/OiBvYmplY3R8bnVsbCwgcHJvcHNBdXRoPzogb2JqZWN0fG51bGwgfX0gYXJnc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc1VubG9ja2VkSHViU2lnbmluZ0lkZW50aXR5ICh7IGxvY2FsSWRlbnRpdHksIHByb3BzQXV0aCB9KSB7XG4gIGNvbnN0IGZyb21Mb2NhbCA9ICEhKGxvY2FsSWRlbnRpdHkgJiYgKGxvY2FsSWRlbnRpdHkueHBydiB8fCBsb2NhbElkZW50aXR5LnByaXZhdGUpKTtcbiAgY29uc3QgZnJvbVByb3BzID0gISEocHJvcHNBdXRoICYmIChwcm9wc0F1dGgueHBydiB8fCBwcm9wc0F1dGgucHJpdmF0ZSkpO1xuICByZXR1cm4gZnJvbUxvY2FsIHx8IGZyb21Qcm9wcztcbn1cblxuLyoqXG4gKiBUcnVlIG9ubHkgZm9yIGFub255bW91cyBicm93c2VycyB3aXRoICoqbm8qKiBlbnJvbGxlZCBIdWIgc2hlbGwgaWRlbnRpdHkuXG4gKlxuICogT25jZSBgSHViSW50ZXJmYWNlYCBoYXMgaHlkcmF0ZWQgYGxvY2FsSWRlbnRpdHlgIGZyb20gZGlzayAocGFzc3dvcmQtbG9ja2VkLCB3YXRjaC1vbmx5IHhwdWIsIG9yXG4gKiBkZXNrdG9wLWxpbmtlZCBwcm9maWxlKSwgd2UgcmV0dXJuICoqZmFsc2UqKiBzbyB0aGUgbm9ybWFsIHNoZWxsIHJlbmRlcnMg4oCUIFRvcFBhbmVsIHNob3dzXG4gKiBVbmxvY2sgLyB3YXRjaC1vbmx5IC8gc2lnbmVkLWluIOKAlCBpbnN0ZWFkIG9mIHJlcGxhY2luZyByb3V0ZXMgd2l0aCB7QGxpbmsgUHVibGljVmlzaXRvckdhdGV9LlxuICpcbiAqIFNpZ25pbmctcHJvdGVjdGVkIGZsb3dzIHN0aWxsIHJlcXVpcmUgYHhwcnZgIGluIG1lbW9yeSBvciBkZWxlZ2F0aW9uIGVsc2V3aGVyZS5cbiAqXG4gKiBAcGFyYW0ge3sgbG9jYWxJZGVudGl0eT86IG9iamVjdHxudWxsLCBwcm9wc0F1dGg/OiBvYmplY3R8bnVsbCB9fSBhcmdzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29tcHV0ZVB1YmxpY0h1YlZpc2l0b3IgKHsgbG9jYWxJZGVudGl0eSwgcHJvcHNBdXRoIH0pIHtcbiAgaWYgKGhhc1VubG9ja2VkSHViU2lnbmluZ0lkZW50aXR5KHsgbG9jYWxJZGVudGl0eSwgcHJvcHNBdXRoIH0pKSByZXR1cm4gZmFsc2U7XG4gIGlmIChcbiAgICBsb2NhbElkZW50aXR5ICYmXG4gICAgKGxvY2FsSWRlbnRpdHkuaWQgfHwgbG9jYWxJZGVudGl0eS54cHViKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQmVmb3JlIEh1YkludGVyZmFjZSBoeWRyYXRlcyBgbG9jYWxJZGVudGl0eWAsIGEgbG9ja2VkL3dhdGNoLW9ubHkgcmVjb3JkIG9uXG4gIC8vIGRpc2sgbXVzdCBub3QgYmUgdHJlYXRlZCBhcyBhbiBhbm9ueW1vdXMgcHVibGljIHZpc2l0b3IuXG4gIGlmIChoYXNQZXJzaXN0ZWRGYWJyaWNJZGVudGl0eSgpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChoYXNFeHRlcm5hbFNpZ25pbmdEZWxlZ2F0aW9uKCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wdXRlUHVibGljSHViVmlzaXRvcixcbiAgaGFzUGVyc2lzdGVkRmFicmljSWRlbnRpdHksXG4gIGhhc1VubG9ja2VkSHViU2lnbmluZ0lkZW50aXR5XG59O1xuIl0sIm5hbWVzIjpbIl9yZXF1aXJlIiwicmVxdWlyZSIsInJlYWRTdG9yYWdlSlNPTiIsIl9yZXF1aXJlMiIsImhhc0V4dGVybmFsU2lnbmluZ0RlbGVnYXRpb24iLCJoYXNQZXJzaXN0ZWRGYWJyaWNJZGVudGl0eSIsIndpbmRvdyIsInAiLCJpZCIsInhwdWIiLCJlIiwiaGFzVW5sb2NrZWRIdWJTaWduaW5nSWRlbnRpdHkiLCJfcmVmIiwibG9jYWxJZGVudGl0eSIsInByb3BzQXV0aCIsImZyb21Mb2NhbCIsInhwcnYiLCJmcm9tUHJvcHMiLCJjb21wdXRlUHVibGljSHViVmlzaXRvciIsIl9yZWYyIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/hubPublicVisitor.js\n\n}')},"./functions/hubRpcHints.js"(module){"use strict";eval('{\n\n/**\n * JSON-RPC -32601 / older hubs: avoid blaming Bitcoin or transport when the method is missing.\n * @param {unknown} err\n * @param {string} [transportHint]\n * @returns {string}\n */\nfunction describeHubRpcFailure(err, transportHint) {\n var msg = String(err || \'Request failed.\');\n if (/method not found/i.test(msg)) {\n return "".concat(msg, " Restart the Hub (or run the latest `services/hub.js`) so JSON-RPC includes this method.");\n }\n var hint = transportHint != null ? String(transportHint).trim() : \'\';\n return hint ? "".concat(msg, " ").concat(hint) : msg;\n}\nmodule.exports = {\n describeHubRpcFailure: describeHubRpcFailure\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvaHViUnBjSGludHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EscUJBQXFCQSxDQUFFQyxHQUFHLEVBQUVDLGFBQWEsRUFBRTtFQUNsRCxJQUFNQyxHQUFHLEdBQUdDLE1BQU0sQ0FBQ0gsR0FBRyxJQUFJLGlCQUFpQixDQUFDO0VBQzVDLElBQUksbUJBQW1CLENBQUNJLElBQUksQ0FBQ0YsR0FBRyxDQUFDLEVBQUU7SUFDakMsVUFBQUcsTUFBQSxDQUFVSCxHQUFHO0VBQ2Y7RUFDQSxJQUFNSSxJQUFJLEdBQUdMLGFBQWEsSUFBSSxJQUFJLEdBQUdFLE1BQU0sQ0FBQ0YsYUFBYSxDQUFDLENBQUNNLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRTtFQUN0RSxPQUFPRCxJQUFJLE1BQUFELE1BQUEsQ0FBTUgsR0FBRyxPQUFBRyxNQUFBLENBQUlDLElBQUksSUFBS0osR0FBRztBQUN0QztBQUVBTSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUFFVixxQkFBcUIsRUFBckJBO0FBQXNCLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9odWJScGNIaW50cy5qcz9lZjQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBKU09OLVJQQyAtMzI2MDEgLyBvbGRlciBodWJzOiBhdm9pZCBibGFtaW5nIEJpdGNvaW4gb3IgdHJhbnNwb3J0IHdoZW4gdGhlIG1ldGhvZCBpcyBtaXNzaW5nLlxuICogQHBhcmFtIHt1bmtub3dufSBlcnJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdHJhbnNwb3J0SGludF1cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlSHViUnBjRmFpbHVyZSAoZXJyLCB0cmFuc3BvcnRIaW50KSB7XG4gIGNvbnN0IG1zZyA9IFN0cmluZyhlcnIgfHwgJ1JlcXVlc3QgZmFpbGVkLicpO1xuICBpZiAoL21ldGhvZCBub3QgZm91bmQvaS50ZXN0KG1zZykpIHtcbiAgICByZXR1cm4gYCR7bXNnfSBSZXN0YXJ0IHRoZSBIdWIgKG9yIHJ1biB0aGUgbGF0ZXN0IFxcYHNlcnZpY2VzL2h1Yi5qc1xcYCkgc28gSlNPTi1SUEMgaW5jbHVkZXMgdGhpcyBtZXRob2QuYDtcbiAgfVxuICBjb25zdCBoaW50ID0gdHJhbnNwb3J0SGludCAhPSBudWxsID8gU3RyaW5nKHRyYW5zcG9ydEhpbnQpLnRyaW0oKSA6ICcnO1xuICByZXR1cm4gaGludCA/IGAke21zZ30gJHtoaW50fWAgOiBtc2c7XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBkZXNjcmliZUh1YlJwY0ZhaWx1cmUgfTtcbiJdLCJuYW1lcyI6WyJkZXNjcmliZUh1YlJwY0ZhaWx1cmUiLCJlcnIiLCJ0cmFuc3BvcnRIaW50IiwibXNnIiwiU3RyaW5nIiwidGVzdCIsImNvbmNhdCIsImhpbnQiLCJ0cmltIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/hubRpcHints.js\n\n}')},"./functions/hubServerFeatureFlags.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Browser helpers for server `FEATURE_FLAGS` exposed on GetNetworkStatus (`featureFlags`).\n */\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ "./functions/fabricBrowserState.js"),\n getFabricBrowserGlobal = _require.getFabricBrowserGlobal;\n\n/**\n * @param {object|null|undefined} networkStatus - Bridge networkStatus / GetNetworkStatus result\n * @returns {{ bitcoin:boolean, documentPurchase:boolean, payjoin:boolean, invoices:boolean, distribute:boolean, lightning:boolean, webrtc:boolean }}\n */\nfunction serverFeatureFlagsFromStatus(networkStatus) {\n var f = networkStatus && networkStatus.featureFlags && _typeof(networkStatus.featureFlags) === \'object\' ? networkStatus.featureFlags : {};\n return {\n bitcoin: f.bitcoin !== false,\n documentPurchase: f.documentPurchase !== false,\n payjoin: !!f.payjoin,\n invoices: f.invoices !== false,\n distribute: !!f.distribute,\n lightning: !!f.lightning,\n webrtc: !!f.webrtc\n };\n}\n\n/**\n * Read from Bridge instance or window.__FABRIC_BRIDGE__ / last network status event.\n * @param {{ networkStatus?: object, state?: { networkStatus?: object } }|null} bridge\n * @returns {ReturnType}\n */\nfunction loadServerFeatureFlags(bridge) {\n var fromBridge = bridge && (bridge.networkStatus || bridge.state && bridge.state.networkStatus);\n if (fromBridge) return serverFeatureFlagsFromStatus(fromBridge);\n try {\n var w = getFabricBrowserGlobal();\n if (w && w.__FABRIC_LAST_NETWORK_STATUS__) {\n return serverFeatureFlagsFromStatus(w.__FABRIC_LAST_NETWORK_STATUS__);\n }\n } catch (_) {}\n // Safe defaults aligned with constants.js when status not yet loaded.\n return {\n bitcoin: true,\n documentPurchase: true,\n payjoin: false,\n invoices: true,\n distribute: false,\n lightning: false,\n webrtc: false\n };\n}\nmodule.exports = {\n serverFeatureFlagsFromStatus: serverFeatureFlagsFromStatus,\n loadServerFeatureFlags: loadServerFeatureFlags\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvaHViU2VydmVyRmVhdHVyZUZsYWdzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUZBLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBSUEsSUFBQUssUUFBQSxHQUFtQ0MsbUJBQU8sQ0FBQywrREFBc0IsQ0FBQztFQUExREMsc0JBQXNCLEdBQUFGLFFBQUEsQ0FBdEJFLHNCQUFzQjs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyw0QkFBNEJBLENBQUVDLGFBQWEsRUFBRTtFQUNwRCxJQUFNQyxDQUFDLEdBQUdELGFBQWEsSUFBSUEsYUFBYSxDQUFDRSxZQUFZLElBQUlaLE9BQUEsQ0FBT1UsYUFBYSxDQUFDRSxZQUFZLE1BQUssUUFBUSxHQUNuR0YsYUFBYSxDQUFDRSxZQUFZLEdBQzFCLENBQUMsQ0FBQztFQUNOLE9BQU87SUFDTEMsT0FBTyxFQUFFRixDQUFDLENBQUNFLE9BQU8sS0FBSyxLQUFLO0lBQzVCQyxnQkFBZ0IsRUFBRUgsQ0FBQyxDQUFDRyxnQkFBZ0IsS0FBSyxLQUFLO0lBQzlDQyxPQUFPLEVBQUUsQ0FBQyxDQUFDSixDQUFDLENBQUNJLE9BQU87SUFDcEJDLFFBQVEsRUFBRUwsQ0FBQyxDQUFDSyxRQUFRLEtBQUssS0FBSztJQUM5QkMsVUFBVSxFQUFFLENBQUMsQ0FBQ04sQ0FBQyxDQUFDTSxVQUFVO0lBQzFCQyxTQUFTLEVBQUUsQ0FBQyxDQUFDUCxDQUFDLENBQUNPLFNBQVM7SUFDeEJDLE1BQU0sRUFBRSxDQUFDLENBQUNSLENBQUMsQ0FBQ1E7RUFDZCxDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLHNCQUFzQkEsQ0FBRUMsTUFBTSxFQUFFO0VBQ3ZDLElBQU1DLFVBQVUsR0FBR0QsTUFBTSxLQUFLQSxNQUFNLENBQUNYLGFBQWEsSUFBS1csTUFBTSxDQUFDRSxLQUFLLElBQUlGLE1BQU0sQ0FBQ0UsS0FBSyxDQUFDYixhQUFjLENBQUM7RUFDbkcsSUFBSVksVUFBVSxFQUFFLE9BQU9iLDRCQUE0QixDQUFDYSxVQUFVLENBQUM7RUFDL0QsSUFBSTtJQUNGLElBQU1FLENBQUMsR0FBR2hCLHNCQUFzQixDQUFDLENBQUM7SUFDbEMsSUFBSWdCLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyw4QkFBOEIsRUFBRTtNQUN6QyxPQUFPaEIsNEJBQTRCLENBQUNlLENBQUMsQ0FBQ0MsOEJBQThCLENBQUM7SUFDdkU7RUFDRixDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFLENBQUM7RUFDYjtFQUNBLE9BQU87SUFDTGIsT0FBTyxFQUFFLElBQUk7SUFDYkMsZ0JBQWdCLEVBQUUsSUFBSTtJQUN0QkMsT0FBTyxFQUFFLEtBQUs7SUFDZEMsUUFBUSxFQUFFLElBQUk7SUFDZEMsVUFBVSxFQUFFLEtBQUs7SUFDakJDLFNBQVMsRUFBRSxLQUFLO0lBQ2hCQyxNQUFNLEVBQUU7RUFDVixDQUFDO0FBQ0g7QUFFQVEsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZm5CLDRCQUE0QixFQUE1QkEsNEJBQTRCO0VBQzVCVyxzQkFBc0IsRUFBdEJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2h1YlNlcnZlckZlYXR1cmVGbGFncy5qcz9lMGFjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBCcm93c2VyIGhlbHBlcnMgZm9yIHNlcnZlciBgRkVBVFVSRV9GTEFHU2AgZXhwb3NlZCBvbiBHZXROZXR3b3JrU3RhdHVzIChgZmVhdHVyZUZsYWdzYCkuXG4gKi9cblxuY29uc3QgeyBnZXRGYWJyaWNCcm93c2VyR2xvYmFsIH0gPSByZXF1aXJlKCcuL2ZhYnJpY0Jyb3dzZXJTdGF0ZScpO1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fG51bGx8dW5kZWZpbmVkfSBuZXR3b3JrU3RhdHVzIC0gQnJpZGdlIG5ldHdvcmtTdGF0dXMgLyBHZXROZXR3b3JrU3RhdHVzIHJlc3VsdFxuICogQHJldHVybnMge3sgYml0Y29pbjpib29sZWFuLCBkb2N1bWVudFB1cmNoYXNlOmJvb2xlYW4sIHBheWpvaW46Ym9vbGVhbiwgaW52b2ljZXM6Ym9vbGVhbiwgZGlzdHJpYnV0ZTpib29sZWFuLCBsaWdodG5pbmc6Ym9vbGVhbiwgd2VicnRjOmJvb2xlYW4gfX1cbiAqL1xuZnVuY3Rpb24gc2VydmVyRmVhdHVyZUZsYWdzRnJvbVN0YXR1cyAobmV0d29ya1N0YXR1cykge1xuICBjb25zdCBmID0gbmV0d29ya1N0YXR1cyAmJiBuZXR3b3JrU3RhdHVzLmZlYXR1cmVGbGFncyAmJiB0eXBlb2YgbmV0d29ya1N0YXR1cy5mZWF0dXJlRmxhZ3MgPT09ICdvYmplY3QnXG4gICAgPyBuZXR3b3JrU3RhdHVzLmZlYXR1cmVGbGFnc1xuICAgIDoge307XG4gIHJldHVybiB7XG4gICAgYml0Y29pbjogZi5iaXRjb2luICE9PSBmYWxzZSxcbiAgICBkb2N1bWVudFB1cmNoYXNlOiBmLmRvY3VtZW50UHVyY2hhc2UgIT09IGZhbHNlLFxuICAgIHBheWpvaW46ICEhZi5wYXlqb2luLFxuICAgIGludm9pY2VzOiBmLmludm9pY2VzICE9PSBmYWxzZSxcbiAgICBkaXN0cmlidXRlOiAhIWYuZGlzdHJpYnV0ZSxcbiAgICBsaWdodG5pbmc6ICEhZi5saWdodG5pbmcsXG4gICAgd2VicnRjOiAhIWYud2VicnRjXG4gIH07XG59XG5cbi8qKlxuICogUmVhZCBmcm9tIEJyaWRnZSBpbnN0YW5jZSBvciB3aW5kb3cuX19GQUJSSUNfQlJJREdFX18gLyBsYXN0IG5ldHdvcmsgc3RhdHVzIGV2ZW50LlxuICogQHBhcmFtIHt7IG5ldHdvcmtTdGF0dXM/OiBvYmplY3QsIHN0YXRlPzogeyBuZXR3b3JrU3RhdHVzPzogb2JqZWN0IH0gfXxudWxsfSBicmlkZ2VcbiAqIEByZXR1cm5zIHtSZXR1cm5UeXBlPHR5cGVvZiBzZXJ2ZXJGZWF0dXJlRmxhZ3NGcm9tU3RhdHVzPn1cbiAqL1xuZnVuY3Rpb24gbG9hZFNlcnZlckZlYXR1cmVGbGFncyAoYnJpZGdlKSB7XG4gIGNvbnN0IGZyb21CcmlkZ2UgPSBicmlkZ2UgJiYgKGJyaWRnZS5uZXR3b3JrU3RhdHVzIHx8IChicmlkZ2Uuc3RhdGUgJiYgYnJpZGdlLnN0YXRlLm5ldHdvcmtTdGF0dXMpKTtcbiAgaWYgKGZyb21CcmlkZ2UpIHJldHVybiBzZXJ2ZXJGZWF0dXJlRmxhZ3NGcm9tU3RhdHVzKGZyb21CcmlkZ2UpO1xuICB0cnkge1xuICAgIGNvbnN0IHcgPSBnZXRGYWJyaWNCcm93c2VyR2xvYmFsKCk7XG4gICAgaWYgKHcgJiYgdy5fX0ZBQlJJQ19MQVNUX05FVFdPUktfU1RBVFVTX18pIHtcbiAgICAgIHJldHVybiBzZXJ2ZXJGZWF0dXJlRmxhZ3NGcm9tU3RhdHVzKHcuX19GQUJSSUNfTEFTVF9ORVRXT1JLX1NUQVRVU19fKTtcbiAgICB9XG4gIH0gY2F0Y2ggKF8pIHt9XG4gIC8vIFNhZmUgZGVmYXVsdHMgYWxpZ25lZCB3aXRoIGNvbnN0YW50cy5qcyB3aGVuIHN0YXR1cyBub3QgeWV0IGxvYWRlZC5cbiAgcmV0dXJuIHtcbiAgICBiaXRjb2luOiB0cnVlLFxuICAgIGRvY3VtZW50UHVyY2hhc2U6IHRydWUsXG4gICAgcGF5am9pbjogZmFsc2UsXG4gICAgaW52b2ljZXM6IHRydWUsXG4gICAgZGlzdHJpYnV0ZTogZmFsc2UsXG4gICAgbGlnaHRuaW5nOiBmYWxzZSxcbiAgICB3ZWJydGM6IGZhbHNlXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXJ2ZXJGZWF0dXJlRmxhZ3NGcm9tU3RhdHVzLFxuICBsb2FkU2VydmVyRmVhdHVyZUZsYWdzXG59O1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZXF1aXJlIiwicmVxdWlyZSIsImdldEZhYnJpY0Jyb3dzZXJHbG9iYWwiLCJzZXJ2ZXJGZWF0dXJlRmxhZ3NGcm9tU3RhdHVzIiwibmV0d29ya1N0YXR1cyIsImYiLCJmZWF0dXJlRmxhZ3MiLCJiaXRjb2luIiwiZG9jdW1lbnRQdXJjaGFzZSIsInBheWpvaW4iLCJpbnZvaWNlcyIsImRpc3RyaWJ1dGUiLCJsaWdodG5pbmciLCJ3ZWJydGMiLCJsb2FkU2VydmVyRmVhdHVyZUZsYWdzIiwiYnJpZGdlIiwiZnJvbUJyaWRnZSIsInN0YXRlIiwidyIsIl9fRkFCUklDX0xBU1RfTkVUV09SS19TVEFUVVNfXyIsIl8iLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/hubServerFeatureFlags.js\n\n}')},"./functions/hubUiAlerts.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _toArray(r) { return _arrayWithHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ \"./functions/fabricBrowserState.js\"),\n readStorageJSON = _require.readStorageJSON,\n writeStorageJSON = _require.writeStorageJSON;\n\n/**\n * Hub SPA alerts: configurable short messages under the top panel; dismiss sets a cookie\n * named {@link HubUiAlertDef#elementName} and optionally persists dismissal ids via\n * `GET|PUT /settings/HUB_UI_ALERT_DISMISSALS` (admin token on PUT), same pattern as feature flags.\n */\n\nvar LS_KEY = 'fabric.hub.alertDismissals';\nvar SETTINGS_KEY = 'HUB_UI_ALERT_DISMISSALS';\nvar CHANGED_EVENT = 'fabricHubUiAlertsDismissedChanged';\nvar COOKIE_MAX_AGE_SEC = 365 * 24 * 60 * 60;\nfunction defaultElementName(id) {\n var s = String(id || '').replace(/[^a-zA-Z0-9-]/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');\n return s ? \"fabric-hub-alert-\".concat(s) : 'fabric-hub-alert';\n}\n\n/**\n * @param {unknown} raw\n * @returns {{ id: string, elementName: string, message: string, severity: string }[]}\n */\nfunction normalizeHubUiAlerts(raw) {\n if (!Array.isArray(raw)) return [];\n var out = [];\n var seen = new Set();\n var _iterator = _createForOfIteratorHelper(raw),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var item = _step.value;\n if (!item || _typeof(item) !== 'object') continue;\n var id = String(item.id || '').trim();\n if (!id || seen.has(id)) continue;\n seen.add(id);\n var baseName = String(item.elementName || defaultElementName(id)).trim();\n var elementName = baseName.replace(/[^a-zA-Z0-9_-]/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '') || defaultElementName(id);\n var message = String(item.message || '').trim();\n if (!message || message.length > 400) continue;\n var severity = String(item.severity || 'info').toLowerCase();\n if (!['info', 'warning', 'error', 'success'].includes(severity)) severity = 'info';\n out.push({\n id: id,\n elementName: elementName,\n message: message,\n severity: severity\n });\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return out;\n}\nfunction mergeAlertLists(serverList, windowList) {\n var a = normalizeHubUiAlerts(serverList);\n var b = normalizeHubUiAlerts(windowList);\n var seen = new Set();\n var out = [];\n for (var _i = 0, _arr = [].concat(_toConsumableArray(a), _toConsumableArray(b)); _i < _arr.length; _i++) {\n var x = _arr[_i];\n if (seen.has(x.id)) continue;\n seen.add(x.id);\n out.push(x);\n }\n return out;\n}\nfunction readDismissedIdsFromLocalStorage() {\n if (typeof window === 'undefined') return [];\n try {\n var parsed = readStorageJSON(LS_KEY, null);\n if (!parsed || _typeof(parsed) !== 'object') return [];\n var ids = parsed && Array.isArray(parsed.dismissedIds) ? parsed.dismissedIds : [];\n return ids.map(function (x) {\n return String(x || '').trim();\n }).filter(Boolean);\n } catch (e) {\n return [];\n }\n}\nfunction writeDismissedIdsToLocalStorage(ids) {\n if (typeof window === 'undefined') return;\n var unique = _toConsumableArray(new Set((ids || []).map(function (x) {\n return String(x || '').trim();\n }).filter(Boolean)));\n writeStorageJSON(LS_KEY, {\n dismissedIds: unique\n });\n try {\n window.dispatchEvent(new CustomEvent(CHANGED_EVENT, {\n detail: {\n dismissedIds: unique\n }\n }));\n } catch (e) {/* ignore */}\n}\nfunction getCookieValue(name) {\n if (typeof document === 'undefined' || !document.cookie) return '';\n var key = String(name || '').trim();\n if (!key) return '';\n var parts = document.cookie.split(';');\n var _iterator2 = _createForOfIteratorHelper(parts),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var p = _step2.value;\n var _p$trim$split = p.trim().split('='),\n _p$trim$split2 = _toArray(_p$trim$split),\n k = _p$trim$split2[0],\n rest = _arrayLikeToArray(_p$trim$split2).slice(1);\n if (decodeURIComponent(k) === key) return decodeURIComponent(rest.join('=') || '');\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n return '';\n}\nfunction setDismissCookie(elementName) {\n if (typeof document === 'undefined') return;\n var name = String(elementName || '').trim();\n if (!name) return;\n document.cookie = \"\".concat(encodeURIComponent(name), \"=1; path=/; max-age=\").concat(COOKIE_MAX_AGE_SEC, \"; samesite=lax\");\n}\n\n/**\n * @param {{ id: string, elementName: string }[]} alerts — full list (for cookie↔id mapping)\n * @param {string[]} serverDismissedIds\n * @returns {Set}\n */\nfunction computeDismissedIdSet(alerts, serverDismissedIds) {\n var dismissed = new Set();\n var _iterator3 = _createForOfIteratorHelper((serverDismissedIds || []).map(function (x) {\n return String(x || '').trim();\n }).filter(Boolean)),\n _step3;\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var id = _step3.value;\n dismissed.add(id);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n var _iterator4 = _createForOfIteratorHelper(readDismissedIdsFromLocalStorage()),\n _step4;\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _id = _step4.value;\n dismissed.add(_id);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n var _iterator5 = _createForOfIteratorHelper(alerts || []),\n _step5;\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var a = _step5.value;\n if (!a || !a.elementName || !a.id) continue;\n var v = getCookieValue(a.elementName);\n if (v === '1' || v === 'true' || v === 'yes') dismissed.add(a.id);\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n return dismissed;\n}\nfunction filterActiveAlerts(alerts, dismissedIds) {\n var set = dismissedIds instanceof Set ? dismissedIds : new Set(dismissedIds || []);\n return normalizeHubUiAlerts(alerts).filter(function (a) {\n return !set.has(a.id);\n });\n}\n\n/**\n * @returns {Promise}\n */\nfunction fetchPersistedDismissedIds() {\n return _fetchPersistedDismissedIds.apply(this, arguments);\n}\n/**\n * Merge new ids with server + localStorage, PUT when admin token present.\n * @param {string[]} newIds\n * @param {string} adminToken\n * @returns {Promise<{ ok: boolean, persisted: boolean, dismissedIds: string[], message?: string }>}\n */\nfunction _fetchPersistedDismissedIds() {\n _fetchPersistedDismissedIds = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var res, body, value, ids, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n if (!(typeof window === 'undefined' || typeof fetch !== 'function')) {\n _context.n = 1;\n break;\n }\n return _context.a(2, []);\n case 1:\n _context.p = 1;\n _context.n = 2;\n return fetch(\"/settings/\".concat(encodeURIComponent(SETTINGS_KEY)), {\n method: 'GET',\n headers: {\n Accept: 'application/json'\n }\n });\n case 2:\n res = _context.v;\n if (!(res.status === 404)) {\n _context.n = 3;\n break;\n }\n return _context.a(2, []);\n case 3:\n if (res.ok) {\n _context.n = 4;\n break;\n }\n return _context.a(2, []);\n case 4:\n _context.n = 5;\n return res.json()[\"catch\"](function () {\n return {};\n });\n case 5:\n body = _context.v;\n value = body && body.value && _typeof(body.value) === 'object' ? body.value : null;\n ids = value && Array.isArray(value.dismissedIds) ? value.dismissedIds : [];\n return _context.a(2, ids.map(function (x) {\n return String(x || '').trim();\n }).filter(Boolean));\n case 6:\n _context.p = 6;\n _t = _context.v;\n return _context.a(2, []);\n }\n }, _callee, null, [[1, 6]]);\n }));\n return _fetchPersistedDismissedIds.apply(this, arguments);\n}\nfunction persistDismissedAlertIds(_x, _x2) {\n return _persistDismissedAlertIds.apply(this, arguments);\n}\n/**\n * @param {{ id: string, elementName: string }} alert\n * @param {{ adminToken?: string }} [opts]\n */\nfunction _persistDismissedAlertIds() {\n _persistDismissedAlertIds = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(newIds, adminToken) {\n var add, ls, unionLocal, token, prev, res, body, value, ids, merged, put, text, _t2, _t3;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n add = _toConsumableArray(new Set((newIds || []).map(function (x) {\n return String(x || '').trim();\n }).filter(Boolean)));\n ls = readDismissedIdsFromLocalStorage();\n unionLocal = _toConsumableArray(new Set([].concat(_toConsumableArray(ls), _toConsumableArray(add))));\n writeDismissedIdsToLocalStorage(unionLocal);\n if (!(typeof window === 'undefined' || typeof fetch !== 'function')) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2, {\n ok: false,\n persisted: false,\n dismissedIds: unionLocal,\n message: 'no fetch'\n });\n case 1:\n token = String(adminToken || '').trim();\n if (token) {\n _context2.n = 2;\n break;\n }\n return _context2.a(2, {\n ok: true,\n persisted: false,\n dismissedIds: unionLocal\n });\n case 2:\n prev = [];\n _context2.p = 3;\n _context2.n = 4;\n return fetch(\"/settings/\".concat(encodeURIComponent(SETTINGS_KEY)), {\n method: 'GET',\n headers: {\n Accept: 'application/json'\n }\n });\n case 4:\n res = _context2.v;\n if (!res.ok) {\n _context2.n = 6;\n break;\n }\n _context2.n = 5;\n return res.json()[\"catch\"](function () {\n return {};\n });\n case 5:\n body = _context2.v;\n value = body && body.value && _typeof(body.value) === 'object' ? body.value : null;\n ids = value && Array.isArray(value.dismissedIds) ? value.dismissedIds : [];\n prev = ids.map(function (x) {\n return String(x || '').trim();\n }).filter(Boolean);\n case 6:\n _context2.n = 8;\n break;\n case 7:\n _context2.p = 7;\n _t2 = _context2.v;\n case 8:\n merged = _toConsumableArray(new Set([].concat(_toConsumableArray(prev), _toConsumableArray(unionLocal))));\n _context2.p = 9;\n _context2.n = 10;\n return fetch(\"/settings/\".concat(encodeURIComponent(SETTINGS_KEY)), {\n method: 'PUT',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: \"Bearer \".concat(token)\n },\n body: JSON.stringify({\n value: {\n dismissedIds: merged\n }\n })\n });\n case 10:\n put = _context2.v;\n if (put.ok) {\n _context2.n = 12;\n break;\n }\n _context2.n = 11;\n return put.text()[\"catch\"](function () {\n return '';\n });\n case 11:\n text = _context2.v;\n return _context2.a(2, {\n ok: false,\n persisted: false,\n dismissedIds: merged,\n message: text || \"\".concat(put.status)\n });\n case 12:\n return _context2.a(2, {\n ok: true,\n persisted: true,\n dismissedIds: merged\n });\n case 13:\n _context2.p = 13;\n _t3 = _context2.v;\n return _context2.a(2, {\n ok: false,\n persisted: false,\n dismissedIds: merged,\n message: _t3 && _t3.message ? _t3.message : String(_t3)\n });\n }\n }, _callee2, null, [[9, 13], [3, 7]]);\n }));\n return _persistDismissedAlertIds.apply(this, arguments);\n}\nfunction dismissHubUiAlert(_x3) {\n return _dismissHubUiAlert.apply(this, arguments);\n}\nfunction _dismissHubUiAlert() {\n _dismissHubUiAlert = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(alert) {\n var opts,\n cur,\n next,\n admin,\n _args3 = arguments,\n _t4;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.p = _context3.n) {\n case 0:\n opts = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : {};\n if (!(!alert || !alert.id || !alert.elementName)) {\n _context3.n = 1;\n break;\n }\n return _context3.a(2);\n case 1:\n setDismissCookie(alert.elementName);\n cur = readDismissedIdsFromLocalStorage();\n next = _toConsumableArray(new Set([].concat(_toConsumableArray(cur), [String(alert.id)])));\n writeDismissedIdsToLocalStorage(next);\n admin = opts && opts.adminToken != null ? String(opts.adminToken).trim() : '';\n if (!admin) {\n _context3.n = 5;\n break;\n }\n _context3.p = 2;\n _context3.n = 3;\n return persistDismissedAlertIds([alert.id], admin);\n case 3:\n _context3.n = 5;\n break;\n case 4:\n _context3.p = 4;\n _t4 = _context3.v;\n case 5:\n return _context3.a(2);\n }\n }, _callee3, null, [[2, 4]]);\n }));\n return _dismissHubUiAlert.apply(this, arguments);\n}\nfunction subscribeHubUiAlertDismissals(callback) {\n if (typeof window === 'undefined' || typeof callback !== 'function') {\n return function noop() {};\n }\n var handler = function handler() {\n try {\n callback(readDismissedIdsFromLocalStorage());\n } catch (e) {/* ignore */}\n };\n window.addEventListener(CHANGED_EVENT, handler);\n return function () {\n return window.removeEventListener(CHANGED_EVENT, handler);\n };\n}\nmodule.exports = {\n LS_KEY: LS_KEY,\n SETTINGS_KEY: SETTINGS_KEY,\n CHANGED_EVENT: CHANGED_EVENT,\n COOKIE_MAX_AGE_SEC: COOKIE_MAX_AGE_SEC,\n normalizeHubUiAlerts: normalizeHubUiAlerts,\n mergeAlertLists: mergeAlertLists,\n readDismissedIdsFromLocalStorage: readDismissedIdsFromLocalStorage,\n writeDismissedIdsToLocalStorage: writeDismissedIdsToLocalStorage,\n getCookieValue: getCookieValue,\n setDismissCookie: setDismissCookie,\n computeDismissedIdSet: computeDismissedIdSet,\n filterActiveAlerts: filterActiveAlerts,\n fetchPersistedDismissedIds: fetchPersistedDismissedIds,\n persistDismissedAlertIds: persistDismissedAlertIds,\n dismissHubUiAlert: dismissHubUiAlert,\n subscribeHubUiAlertDismissals: subscribeHubUiAlertDismissals,\n HUB_UI_ALERT_DISMISSALS_SETTING_KEY: SETTINGS_KEY\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDOUgsYUFBYSxFQUFFNEgsT0FBTyxDQUFDO0VBQUE7QUFDakU7QUFFQUcsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZmxJLE1BQU0sRUFBTkEsTUFBTTtFQUNOQyxZQUFZLEVBQVpBLFlBQVk7RUFDWkMsYUFBYSxFQUFiQSxhQUFhO0VBQ2JDLGtCQUFrQixFQUFsQkEsa0JBQWtCO0VBQ2xCTSxvQkFBb0IsRUFBcEJBLG9CQUFvQjtFQUNwQm1CLGVBQWUsRUFBZkEsZUFBZTtFQUNmTyxnQ0FBZ0MsRUFBaENBLGdDQUFnQztFQUNoQ1EsK0JBQStCLEVBQS9CQSwrQkFBK0I7RUFDL0JLLGNBQWMsRUFBZEEsY0FBYztFQUNkYyxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtFQUNoQkUscUJBQXFCLEVBQXJCQSxxQkFBcUI7RUFDckJVLGtCQUFrQixFQUFsQkEsa0JBQWtCO0VBQ2xCRSwwQkFBMEIsRUFBMUJBLDBCQUEwQjtFQUMxQmMsd0JBQXdCLEVBQXhCQSx3QkFBd0I7RUFDeEJxQixpQkFBaUIsRUFBakJBLGlCQUFpQjtFQUNqQlksNkJBQTZCLEVBQTdCQSw2QkFBNkI7RUFDN0JRLG1DQUFtQyxFQUFFbEk7QUFDdkMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2h1YlVpQWxlcnRzLmpzPzk2ODMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB7XG4gIHJlYWRTdG9yYWdlSlNPTixcbiAgd3JpdGVTdG9yYWdlSlNPTlxufSA9IHJlcXVpcmUoJy4vZmFicmljQnJvd3NlclN0YXRlJyk7XG5cbi8qKlxuICogSHViIFNQQSBhbGVydHM6IGNvbmZpZ3VyYWJsZSBzaG9ydCBtZXNzYWdlcyB1bmRlciB0aGUgdG9wIHBhbmVsOyBkaXNtaXNzIHNldHMgYSBjb29raWVcbiAqIG5hbWVkIHtAbGluayBIdWJVaUFsZXJ0RGVmI2VsZW1lbnROYW1lfSBhbmQgb3B0aW9uYWxseSBwZXJzaXN0cyBkaXNtaXNzYWwgaWRzIHZpYVxuICogYEdFVHxQVVQgL3NldHRpbmdzL0hVQl9VSV9BTEVSVF9ESVNNSVNTQUxTYCAoYWRtaW4gdG9rZW4gb24gUFVUKSwgc2FtZSBwYXR0ZXJuIGFzIGZlYXR1cmUgZmxhZ3MuXG4gKi9cblxuY29uc3QgTFNfS0VZID0gJ2ZhYnJpYy5odWIuYWxlcnREaXNtaXNzYWxzJztcbmNvbnN0IFNFVFRJTkdTX0tFWSA9ICdIVUJfVUlfQUxFUlRfRElTTUlTU0FMUyc7XG5jb25zdCBDSEFOR0VEX0VWRU5UID0gJ2ZhYnJpY0h1YlVpQWxlcnRzRGlzbWlzc2VkQ2hhbmdlZCc7XG5jb25zdCBDT09LSUVfTUFYX0FHRV9TRUMgPSAzNjUgKiAyNCAqIDYwICogNjA7XG5cbmZ1bmN0aW9uIGRlZmF1bHRFbGVtZW50TmFtZSAoaWQpIHtcbiAgY29uc3QgcyA9IFN0cmluZyhpZCB8fCAnJykucmVwbGFjZSgvW15hLXpBLVowLTktXS9nLCAnLScpLnJlcGxhY2UoLy0rL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpO1xuICByZXR1cm4gcyA/IGBmYWJyaWMtaHViLWFsZXJ0LSR7c31gIDogJ2ZhYnJpYy1odWItYWxlcnQnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7dW5rbm93bn0gcmF3XG4gKiBAcmV0dXJucyB7eyBpZDogc3RyaW5nLCBlbGVtZW50TmFtZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIHNldmVyaXR5OiBzdHJpbmcgfVtdfVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVIdWJVaUFsZXJ0cyAocmF3KSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyYXcpKSByZXR1cm4gW107XG4gIGNvbnN0IG91dCA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmF3KSB7XG4gICAgaWYgKCFpdGVtIHx8IHR5cGVvZiBpdGVtICE9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgY29uc3QgaWQgPSBTdHJpbmcoaXRlbS5pZCB8fCAnJykudHJpbSgpO1xuICAgIGlmICghaWQgfHwgc2Vlbi5oYXMoaWQpKSBjb250aW51ZTtcbiAgICBzZWVuLmFkZChpZCk7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBTdHJpbmcoaXRlbS5lbGVtZW50TmFtZSB8fCBkZWZhdWx0RWxlbWVudE5hbWUoaWQpKS50cmltKCk7XG4gICAgY29uc3QgZWxlbWVudE5hbWUgPSBiYXNlTmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV8tXS9nLCAnLScpLnJlcGxhY2UoLy0rL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpIHx8IGRlZmF1bHRFbGVtZW50TmFtZShpZCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IFN0cmluZyhpdGVtLm1lc3NhZ2UgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2FnZS5sZW5ndGggPiA0MDApIGNvbnRpbnVlO1xuICAgIGxldCBzZXZlcml0eSA9IFN0cmluZyhpdGVtLnNldmVyaXR5IHx8ICdpbmZvJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIVsnaW5mbycsICd3YXJuaW5nJywgJ2Vycm9yJywgJ3N1Y2Nlc3MnXS5pbmNsdWRlcyhzZXZlcml0eSkpIHNldmVyaXR5ID0gJ2luZm8nO1xuICAgIG91dC5wdXNoKHsgaWQsIGVsZW1lbnROYW1lLCBtZXNzYWdlLCBzZXZlcml0eSB9KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBtZXJnZUFsZXJ0TGlzdHMgKHNlcnZlckxpc3QsIHdpbmRvd0xpc3QpIHtcbiAgY29uc3QgYSA9IG5vcm1hbGl6ZUh1YlVpQWxlcnRzKHNlcnZlckxpc3QpO1xuICBjb25zdCBiID0gbm9ybWFsaXplSHViVWlBbGVydHMod2luZG93TGlzdCk7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0KCk7XG4gIGNvbnN0IG91dCA9IFtdO1xuICBmb3IgKGNvbnN0IHggb2YgWy4uLmEsIC4uLmJdKSB7XG4gICAgaWYgKHNlZW4uaGFzKHguaWQpKSBjb250aW51ZTtcbiAgICBzZWVuLmFkZCh4LmlkKTtcbiAgICBvdXQucHVzaCh4KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiByZWFkRGlzbWlzc2VkSWRzRnJvbUxvY2FsU3RvcmFnZSAoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHJlYWRTdG9yYWdlSlNPTihMU19LRVksIG51bGwpO1xuICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnKSByZXR1cm4gW107XG4gICAgY29uc3QgaWRzID0gcGFyc2VkICYmIEFycmF5LmlzQXJyYXkocGFyc2VkLmRpc21pc3NlZElkcykgPyBwYXJzZWQuZGlzbWlzc2VkSWRzIDogW107XG4gICAgcmV0dXJuIGlkcy5tYXAoKHgpID0+IFN0cmluZyh4IHx8ICcnKS50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZURpc21pc3NlZElkc1RvTG9jYWxTdG9yYWdlIChpZHMpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gIGNvbnN0IHVuaXF1ZSA9IFsuLi5uZXcgU2V0KChpZHMgfHwgW10pLm1hcCgoeCkgPT4gU3RyaW5nKHggfHwgJycpLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pKV07XG4gIHdyaXRlU3RvcmFnZUpTT04oTFNfS0VZLCB7IGRpc21pc3NlZElkczogdW5pcXVlIH0pO1xuICB0cnkge1xuICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChDSEFOR0VEX0VWRU5ULCB7IGRldGFpbDogeyBkaXNtaXNzZWRJZHM6IHVuaXF1ZSB9IH0pKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxufVxuXG5mdW5jdGlvbiBnZXRDb29raWVWYWx1ZSAobmFtZSkge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCAhZG9jdW1lbnQuY29va2llKSByZXR1cm4gJyc7XG4gIGNvbnN0IGtleSA9IFN0cmluZyhuYW1lIHx8ICcnKS50cmltKCk7XG4gIGlmICgha2V5KSByZXR1cm4gJyc7XG4gIGNvbnN0IHBhcnRzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XG4gIGZvciAoY29uc3QgcCBvZiBwYXJ0cykge1xuICAgIGNvbnN0IFtrLCAuLi5yZXN0XSA9IHAudHJpbSgpLnNwbGl0KCc9Jyk7XG4gICAgaWYgKGRlY29kZVVSSUNvbXBvbmVudChrKSA9PT0ga2V5KSByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHJlc3Quam9pbignPScpIHx8ICcnKTtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIHNldERpc21pc3NDb29raWUgKGVsZW1lbnROYW1lKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gIGNvbnN0IG5hbWUgPSBTdHJpbmcoZWxlbWVudE5hbWUgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFuYW1lKSByZXR1cm47XG4gIGRvY3VtZW50LmNvb2tpZSA9IGAke2VuY29kZVVSSUNvbXBvbmVudChuYW1lKX09MTsgcGF0aD0vOyBtYXgtYWdlPSR7Q09PS0lFX01BWF9BR0VfU0VDfTsgc2FtZXNpdGU9bGF4YDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgaWQ6IHN0cmluZywgZWxlbWVudE5hbWU6IHN0cmluZyB9W119IGFsZXJ0cyDigJQgZnVsbCBsaXN0IChmb3IgY29va2ll4oaUaWQgbWFwcGluZylcbiAqIEBwYXJhbSB7c3RyaW5nW119IHNlcnZlckRpc21pc3NlZElkc1xuICogQHJldHVybnMge1NldDxzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBjb21wdXRlRGlzbWlzc2VkSWRTZXQgKGFsZXJ0cywgc2VydmVyRGlzbWlzc2VkSWRzKSB7XG4gIGNvbnN0IGRpc21pc3NlZCA9IG5ldyBTZXQoKTtcbiAgZm9yIChjb25zdCBpZCBvZiAoc2VydmVyRGlzbWlzc2VkSWRzIHx8IFtdKS5tYXAoKHgpID0+IFN0cmluZyh4IHx8ICcnKS50cmltKCkpLmZpbHRlcihCb29sZWFuKSkge1xuICAgIGRpc21pc3NlZC5hZGQoaWQpO1xuICB9XG4gIGZvciAoY29uc3QgaWQgb2YgcmVhZERpc21pc3NlZElkc0Zyb21Mb2NhbFN0b3JhZ2UoKSkgZGlzbWlzc2VkLmFkZChpZCk7XG4gIGZvciAoY29uc3QgYSBvZiBhbGVydHMgfHwgW10pIHtcbiAgICBpZiAoIWEgfHwgIWEuZWxlbWVudE5hbWUgfHwgIWEuaWQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHYgPSBnZXRDb29raWVWYWx1ZShhLmVsZW1lbnROYW1lKTtcbiAgICBpZiAodiA9PT0gJzEnIHx8IHYgPT09ICd0cnVlJyB8fCB2ID09PSAneWVzJykgZGlzbWlzc2VkLmFkZChhLmlkKTtcbiAgfVxuICByZXR1cm4gZGlzbWlzc2VkO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJBY3RpdmVBbGVydHMgKGFsZXJ0cywgZGlzbWlzc2VkSWRzKSB7XG4gIGNvbnN0IHNldCA9IGRpc21pc3NlZElkcyBpbnN0YW5jZW9mIFNldCA/IGRpc21pc3NlZElkcyA6IG5ldyBTZXQoZGlzbWlzc2VkSWRzIHx8IFtdKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZUh1YlVpQWxlcnRzKGFsZXJ0cykuZmlsdGVyKChhKSA9PiAhc2V0LmhhcyhhLmlkKSk7XG59XG5cbi8qKlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fVxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaFBlcnNpc3RlZERpc21pc3NlZElkcyAoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZmV0Y2ggIT09ICdmdW5jdGlvbicpIHJldHVybiBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgL3NldHRpbmdzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFNFVFRJTkdTX0tFWSl9YCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfVxuICAgIH0pO1xuICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDQpIHJldHVybiBbXTtcbiAgICBpZiAoIXJlcy5vaykgcmV0dXJuIFtdO1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXMuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgIGNvbnN0IHZhbHVlID0gYm9keSAmJiBib2R5LnZhbHVlICYmIHR5cGVvZiBib2R5LnZhbHVlID09PSAnb2JqZWN0JyA/IGJvZHkudmFsdWUgOiBudWxsO1xuICAgIGNvbnN0IGlkcyA9IHZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsdWUuZGlzbWlzc2VkSWRzKSA/IHZhbHVlLmRpc21pc3NlZElkcyA6IFtdO1xuICAgIHJldHVybiBpZHMubWFwKCh4KSA9PiBTdHJpbmcoeCB8fCAnJykudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZSBuZXcgaWRzIHdpdGggc2VydmVyICsgbG9jYWxTdG9yYWdlLCBQVVQgd2hlbiBhZG1pbiB0b2tlbiBwcmVzZW50LlxuICogQHBhcmFtIHtzdHJpbmdbXX0gbmV3SWRzXG4gKiBAcGFyYW0ge3N0cmluZ30gYWRtaW5Ub2tlblxuICogQHJldHVybnMge1Byb21pc2U8eyBvazogYm9vbGVhbiwgcGVyc2lzdGVkOiBib29sZWFuLCBkaXNtaXNzZWRJZHM6IHN0cmluZ1tdLCBtZXNzYWdlPzogc3RyaW5nIH0+fVxuICovXG5hc3luYyBmdW5jdGlvbiBwZXJzaXN0RGlzbWlzc2VkQWxlcnRJZHMgKG5ld0lkcywgYWRtaW5Ub2tlbikge1xuICBjb25zdCBhZGQgPSBbLi4ubmV3IFNldCgobmV3SWRzIHx8IFtdKS5tYXAoKHgpID0+IFN0cmluZyh4IHx8ICcnKS50cmltKCkpLmZpbHRlcihCb29sZWFuKSldO1xuICBjb25zdCBscyA9IHJlYWREaXNtaXNzZWRJZHNGcm9tTG9jYWxTdG9yYWdlKCk7XG4gIGNvbnN0IHVuaW9uTG9jYWwgPSBbLi4ubmV3IFNldChbLi4ubHMsIC4uLmFkZF0pXTtcbiAgd3JpdGVEaXNtaXNzZWRJZHNUb0xvY2FsU3RvcmFnZSh1bmlvbkxvY2FsKTtcblxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGZldGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBwZXJzaXN0ZWQ6IGZhbHNlLCBkaXNtaXNzZWRJZHM6IHVuaW9uTG9jYWwsIG1lc3NhZ2U6ICdubyBmZXRjaCcgfTtcbiAgfVxuICBjb25zdCB0b2tlbiA9IFN0cmluZyhhZG1pblRva2VuIHx8ICcnKS50cmltKCk7XG4gIGlmICghdG9rZW4pIHtcbiAgICByZXR1cm4geyBvazogdHJ1ZSwgcGVyc2lzdGVkOiBmYWxzZSwgZGlzbWlzc2VkSWRzOiB1bmlvbkxvY2FsIH07XG4gIH1cbiAgbGV0IHByZXYgPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgL3NldHRpbmdzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFNFVFRJTkdTX0tFWSl9YCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfVxuICAgIH0pO1xuICAgIGlmIChyZXMub2spIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXMuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgICAgY29uc3QgdmFsdWUgPSBib2R5ICYmIGJvZHkudmFsdWUgJiYgdHlwZW9mIGJvZHkudmFsdWUgPT09ICdvYmplY3QnID8gYm9keS52YWx1ZSA6IG51bGw7XG4gICAgICBjb25zdCBpZHMgPSB2YWx1ZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlLmRpc21pc3NlZElkcykgPyB2YWx1ZS5kaXNtaXNzZWRJZHMgOiBbXTtcbiAgICAgIHByZXYgPSBpZHMubWFwKCh4KSA9PiBTdHJpbmcoeCB8fCAnJykudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgfVxuICB9IGNhdGNoIChfKSB7IC8qIGlnbm9yZSAqLyB9XG4gIGNvbnN0IG1lcmdlZCA9IFsuLi5uZXcgU2V0KFsuLi5wcmV2LCAuLi51bmlvbkxvY2FsXSldO1xuICB0cnkge1xuICAgIGNvbnN0IHB1dCA9IGF3YWl0IGZldGNoKGAvc2V0dGluZ3MvJHtlbmNvZGVVUklDb21wb25lbnQoU0VUVElOR1NfS0VZKX1gLCB7XG4gICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWBcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHZhbHVlOiB7IGRpc21pc3NlZElkczogbWVyZ2VkIH0gfSlcbiAgICB9KTtcbiAgICBpZiAoIXB1dC5vaykge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHB1dC50ZXh0KCkuY2F0Y2goKCkgPT4gJycpO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBwZXJzaXN0ZWQ6IGZhbHNlLCBkaXNtaXNzZWRJZHM6IG1lcmdlZCwgbWVzc2FnZTogdGV4dCB8fCBgJHtwdXQuc3RhdHVzfWAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIHBlcnNpc3RlZDogdHJ1ZSwgZGlzbWlzc2VkSWRzOiBtZXJnZWQgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7XG4gICAgICBvazogZmFsc2UsXG4gICAgICBwZXJzaXN0ZWQ6IGZhbHNlLFxuICAgICAgZGlzbWlzc2VkSWRzOiBtZXJnZWQsXG4gICAgICBtZXNzYWdlOiBlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgaWQ6IHN0cmluZywgZWxlbWVudE5hbWU6IHN0cmluZyB9fSBhbGVydFxuICogQHBhcmFtIHt7IGFkbWluVG9rZW4/OiBzdHJpbmcgfX0gW29wdHNdXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRpc21pc3NIdWJVaUFsZXJ0IChhbGVydCwgb3B0cyA9IHt9KSB7XG4gIGlmICghYWxlcnQgfHwgIWFsZXJ0LmlkIHx8ICFhbGVydC5lbGVtZW50TmFtZSkgcmV0dXJuO1xuICBzZXREaXNtaXNzQ29va2llKGFsZXJ0LmVsZW1lbnROYW1lKTtcbiAgY29uc3QgY3VyID0gcmVhZERpc21pc3NlZElkc0Zyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgY29uc3QgbmV4dCA9IFsuLi5uZXcgU2V0KFsuLi5jdXIsIFN0cmluZyhhbGVydC5pZCldKV07XG4gIHdyaXRlRGlzbWlzc2VkSWRzVG9Mb2NhbFN0b3JhZ2UobmV4dCk7XG4gIGNvbnN0IGFkbWluID0gb3B0cyAmJiBvcHRzLmFkbWluVG9rZW4gIT0gbnVsbCA/IFN0cmluZyhvcHRzLmFkbWluVG9rZW4pLnRyaW0oKSA6ICcnO1xuICBpZiAoYWRtaW4pIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcGVyc2lzdERpc21pc3NlZEFsZXJ0SWRzKFthbGVydC5pZF0sIGFkbWluKTtcbiAgICB9IGNhdGNoIChfKSB7IC8qIGlnbm9yZSAqLyB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3Vic2NyaWJlSHViVWlBbGVydERpc21pc3NhbHMgKGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbm9vcCAoKSB7fTtcbiAgfVxuICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhyZWFkRGlzbWlzc2VkSWRzRnJvbUxvY2FsU3RvcmFnZSgpKTtcbiAgICB9IGNhdGNoIChlKSB7IC8qIGlnbm9yZSAqLyB9XG4gIH07XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKENIQU5HRURfRVZFTlQsIGhhbmRsZXIpO1xuICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoQ0hBTkdFRF9FVkVOVCwgaGFuZGxlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBMU19LRVksXG4gIFNFVFRJTkdTX0tFWSxcbiAgQ0hBTkdFRF9FVkVOVCxcbiAgQ09PS0lFX01BWF9BR0VfU0VDLFxuICBub3JtYWxpemVIdWJVaUFsZXJ0cyxcbiAgbWVyZ2VBbGVydExpc3RzLFxuICByZWFkRGlzbWlzc2VkSWRzRnJvbUxvY2FsU3RvcmFnZSxcbiAgd3JpdGVEaXNtaXNzZWRJZHNUb0xvY2FsU3RvcmFnZSxcbiAgZ2V0Q29va2llVmFsdWUsXG4gIHNldERpc21pc3NDb29raWUsXG4gIGNvbXB1dGVEaXNtaXNzZWRJZFNldCxcbiAgZmlsdGVyQWN0aXZlQWxlcnRzLFxuICBmZXRjaFBlcnNpc3RlZERpc21pc3NlZElkcyxcbiAgcGVyc2lzdERpc21pc3NlZEFsZXJ0SWRzLFxuICBkaXNtaXNzSHViVWlBbGVydCxcbiAgc3Vic2NyaWJlSHViVWlBbGVydERpc21pc3NhbHMsXG4gIEhVQl9VSV9BTEVSVF9ESVNNSVNTQUxTX1NFVFRJTkdfS0VZOiBTRVRUSU5HU19LRVlcbn07XG4iXSwibmFtZXMiOlsiX3JlZ2VuZXJhdG9yIiwiZSIsInQiLCJyIiwiU3ltYm9sIiwibiIsIml0ZXJhdG9yIiwibyIsInRvU3RyaW5nVGFnIiwiaSIsImMiLCJwcm90b3R5cGUiLCJHZW5lcmF0b3IiLCJ1IiwiT2JqZWN0IiwiY3JlYXRlIiwiX3JlZ2VuZXJhdG9yRGVmaW5lMiIsImYiLCJwIiwieSIsIkciLCJ2IiwiYSIsImQiLCJiaW5kIiwibGVuZ3RoIiwibCIsIlR5cGVFcnJvciIsImNhbGwiLCJkb25lIiwidmFsdWUiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJkZWZpbmVQcm9wZXJ0eSIsIl9yZWdlbmVyYXRvckRlZmluZSIsIl9pbnZva2UiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfdG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiQXJyYXkiLCJpc0FycmF5IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiZnJvbSIsIl9hcnJheUxpa2VUb0FycmF5IiwiX3R5cGVvZiIsImNvbnN0cnVjdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfbiIsIkYiLCJzIiwibmV4dCIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwidGVzdCIsIl9yZXF1aXJlIiwicmVxdWlyZSIsInJlYWRTdG9yYWdlSlNPTiIsIndyaXRlU3RvcmFnZUpTT04iLCJMU19LRVkiLCJTRVRUSU5HU19LRVkiLCJDSEFOR0VEX0VWRU5UIiwiQ09PS0lFX01BWF9BR0VfU0VDIiwiZGVmYXVsdEVsZW1lbnROYW1lIiwiaWQiLCJTdHJpbmciLCJyZXBsYWNlIiwiY29uY2F0Iiwibm9ybWFsaXplSHViVWlBbGVydHMiLCJyYXciLCJvdXQiLCJzZWVuIiwiU2V0IiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJpdGVtIiwidHJpbSIsImhhcyIsImFkZCIsImJhc2VOYW1lIiwiZWxlbWVudE5hbWUiLCJtZXNzYWdlIiwic2V2ZXJpdHkiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwicHVzaCIsImVyciIsIm1lcmdlQWxlcnRMaXN0cyIsInNlcnZlckxpc3QiLCJ3aW5kb3dMaXN0IiwiYiIsIl9pIiwiX2FyciIsIngiLCJyZWFkRGlzbWlzc2VkSWRzRnJvbUxvY2FsU3RvcmFnZSIsIndpbmRvdyIsInBhcnNlZCIsImlkcyIsImRpc21pc3NlZElkcyIsIm1hcCIsImZpbHRlciIsIkJvb2xlYW4iLCJ3cml0ZURpc21pc3NlZElkc1RvTG9jYWxTdG9yYWdlIiwidW5pcXVlIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZ2V0Q29va2llVmFsdWUiLCJkb2N1bWVudCIsImNvb2tpZSIsImtleSIsInBhcnRzIiwic3BsaXQiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiX3AkdHJpbSRzcGxpdCIsIl9wJHRyaW0kc3BsaXQyIiwiayIsInJlc3QiLCJkZWNvZGVVUklDb21wb25lbnQiLCJqb2luIiwic2V0RGlzbWlzc0Nvb2tpZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImNvbXB1dGVEaXNtaXNzZWRJZFNldCIsImFsZXJ0cyIsInNlcnZlckRpc21pc3NlZElkcyIsImRpc21pc3NlZCIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsImZpbHRlckFjdGl2ZUFsZXJ0cyIsInNldCIsImZldGNoUGVyc2lzdGVkRGlzbWlzc2VkSWRzIiwiX2ZldGNoUGVyc2lzdGVkRGlzbWlzc2VkSWRzIiwiX2NhbGxlZSIsInJlcyIsImJvZHkiLCJfdCIsIl9jb250ZXh0IiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0Iiwic3RhdHVzIiwib2siLCJqc29uIiwicGVyc2lzdERpc21pc3NlZEFsZXJ0SWRzIiwiX3giLCJfeDIiLCJfcGVyc2lzdERpc21pc3NlZEFsZXJ0SWRzIiwiX2NhbGxlZTIiLCJuZXdJZHMiLCJhZG1pblRva2VuIiwibHMiLCJ1bmlvbkxvY2FsIiwidG9rZW4iLCJwcmV2IiwibWVyZ2VkIiwicHV0IiwidGV4dCIsIl90MiIsIl90MyIsIl9jb250ZXh0MiIsInBlcnNpc3RlZCIsIkF1dGhvcml6YXRpb24iLCJKU09OIiwic3RyaW5naWZ5IiwiZGlzbWlzc0h1YlVpQWxlcnQiLCJfeDMiLCJfZGlzbWlzc0h1YlVpQWxlcnQiLCJfY2FsbGVlMyIsImFsZXJ0Iiwib3B0cyIsImN1ciIsImFkbWluIiwiX2FyZ3MzIiwiX3Q0IiwiX2NvbnRleHQzIiwidW5kZWZpbmVkIiwic3Vic2NyaWJlSHViVWlBbGVydERpc21pc3NhbHMiLCJjYWxsYmFjayIsIm5vb3AiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJtb2R1bGUiLCJleHBvcnRzIiwiSFVCX1VJX0FMRVJUX0RJU01JU1NBTFNfU0VUVElOR19LRVkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/hubUiAlerts.js\n\n}")},"./functions/hubUiFeatureFlags.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ \"./functions/fabricBrowserState.js\"),\n store = _require.store,\n getFabricBrowserGlobal = _require.getFabricBrowserGlobal;\n\n/**\n * Browser-only feature visibility for the hub SPA (`fabric:state` → `ui.featureFlags`).\n * Defaults favor the **Document market** (Documents + Peers + Bitcoin invoices/explorer).\n * Persisted `{ value }` from `GET /settings/HUB_UI_FEATURE_FLAGS` overwrites locals.\n *\n * **`advancedMode`** is still used for UX that truly needs an explicit “power user” opt-in elsewhere.\n *\n * Explicit **`peers: false`** hides Peers nav; Bitcoin explorer remains routable; sub-areas use\n * bitcoinPayments, bitcoinResources, etc.\n */\n/** Path under `fabric:state` JSON (see {@link ./fabricBrowserState.js}). */\nvar UI_FEATURE_FLAGS_STATE_PATH = '/ui/featureFlags';\nvar CHANGED_EVENT = 'fabricHubUiFeatureFlagsChanged';\nvar SETTINGS_KEY = 'HUB_UI_FEATURE_FLAGS';\nvar BITCOIN_UI_FLAG_KEYS = ['bitcoinPayments', 'bitcoinInvoices', 'bitcoinResources', 'bitcoinExplorer', 'bitcoinLightning', 'bitcoinCrowdfund'];\nvar FLAG_KEYS = ['promo', 'advancedMode', 'peers', 'activities', 'features', 'sidechain'].concat(BITCOIN_UI_FLAG_KEYS);\n\n/** @deprecated No keys are forced on; kept as an empty list for older callers. */\nvar ALWAYS_ON_FLAG_KEYS = [];\n\n/** Document-market profile: peers + invoices/explorer; unrelated surfaces off. */\nfunction defaultFlags() {\n return {\n promo: false,\n advancedMode: false,\n peers: true,\n activities: false,\n features: false,\n sidechain: false,\n bitcoinPayments: false,\n bitcoinInvoices: true,\n bitcoinResources: false,\n bitcoinExplorer: true,\n bitcoinLightning: false,\n bitcoinCrowdfund: false\n };\n}\n\n/** Alias for Admin preset / callers that want an explicit name. */\nfunction documentMarketUiFlags() {\n return defaultFlags();\n}\nfunction hasStoredUiFlagShape(raw) {\n if (!raw || _typeof(raw) !== 'object' || Array.isArray(raw)) return false;\n /** `bitcoin: true` is a sentinel that enables all BTC sub-features. */\n if (Object.prototype.hasOwnProperty.call(raw, 'bitcoin')) return true;\n return FLAG_KEYS.some(function (k) {\n return Object.prototype.hasOwnProperty.call(raw, k);\n });\n}\nfunction normalizeFlags(raw) {\n var d = defaultFlags();\n if (!raw || _typeof(raw) !== 'object') return d;\n // Empty `{}` is not intentional config; real storage can accidentally hold `{}` under fabric:state only.\n if (!hasStoredUiFlagShape(raw)) return d;\n if (raw.bitcoin === true) {\n var _iterator = _createForOfIteratorHelper(BITCOIN_UI_FLAG_KEYS),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var k = _step.value;\n d[k] = true;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n var _iterator2 = _createForOfIteratorHelper(FLAG_KEYS),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _k2 = _step2.value;\n if (Object.prototype.hasOwnProperty.call(raw, _k2)) {\n d[_k2] = !!raw[_k2];\n }\n }\n // Without Advanced Mode, keys omitted from `raw` keep bundled defaults (`defaultFlags`), not implicit off.\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n if (!d.advancedMode) {\n var baseWhenUnset = defaultFlags();\n var KEYS_INHERIT_WHEN_ABSENT_FROM_RAW = ['peers', 'activities', 'features', 'sidechain', 'bitcoinResources', 'bitcoinExplorer', 'bitcoinLightning', 'bitcoinCrowdfund'];\n for (var _i = 0, _KEYS_INHERIT_WHEN_AB = KEYS_INHERIT_WHEN_ABSENT_FROM_RAW; _i < _KEYS_INHERIT_WHEN_AB.length; _i++) {\n var _k = _KEYS_INHERIT_WHEN_AB[_i];\n if (!Object.prototype.hasOwnProperty.call(raw, _k)) {\n d[_k] = !!baseWhenUnset[_k];\n }\n }\n }\n return d;\n}\nfunction loadHubUiFeatureFlags() {\n if (!getFabricBrowserGlobal()) return defaultFlags();\n try {\n var v = store().GET(UI_FEATURE_FLAGS_STATE_PATH);\n if (!v || _typeof(v) !== 'object' || Array.isArray(v)) return defaultFlags();\n return normalizeFlags(v);\n } catch (e) {\n return defaultFlags();\n }\n}\n\n/**\n * Test / automation hook: keep in-memory `fabric:state` and localStorage aligned.\n * Installed once on first browser access (Hub SPA + Puppeteer helpers).\n */\nfunction installHubUiFeatureFlagsWindowApi() {\n var w = getFabricBrowserGlobal();\n if (!w || w.__fabricHubUiFeatureFlags) return;\n w.__fabricHubUiFeatureFlags = {\n load: loadHubUiFeatureFlags,\n setAll: setAllHubUiFeatureFlags,\n set: setHubUiFeatureFlag,\n save: saveHubUiFeatureFlags,\n persist: persistHubUiFeatureFlags,\n defaultFlags: defaultFlags\n };\n}\nfunction saveHubUiFeatureFlags(flags) {\n if (!getFabricBrowserGlobal()) return;\n var next = normalizeFlags(flags);\n try {\n var st = store();\n var ui = st.GET('/ui');\n var merged = ui && _typeof(ui) === 'object' && !Array.isArray(ui) ? Object.assign({}, ui, {\n featureFlags: next\n }) : {\n featureFlags: next\n };\n st.PUT('/ui', merged);\n } catch (e) {/* ignore */}\n try {\n var w = getFabricBrowserGlobal();\n if (w) w.dispatchEvent(new CustomEvent(CHANGED_EVENT, {\n detail: next\n }));\n } catch (e) {/* ignore */}\n}\nfunction setHubUiFeatureFlag(key, value) {\n if (!FLAG_KEYS.includes(key)) return loadHubUiFeatureFlags();\n var f = loadHubUiFeatureFlags();\n f[key] = !!value;\n saveHubUiFeatureFlags(f);\n return f;\n}\nfunction setAllHubUiFeatureFlags(patch) {\n var f = loadHubUiFeatureFlags();\n var p = patch && _typeof(patch) === 'object' ? patch : {};\n var _iterator3 = _createForOfIteratorHelper(FLAG_KEYS),\n _step3;\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var k = _step3.value;\n if (Object.prototype.hasOwnProperty.call(p, k)) f[k] = !!p[k];\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n saveHubUiFeatureFlags(f);\n return f;\n}\nfunction subscribeHubUiFeatureFlags(callback) {\n var w = getFabricBrowserGlobal();\n if (!w || typeof callback !== 'function') {\n return function noop() {};\n }\n var handler = function handler() {\n try {\n callback(loadHubUiFeatureFlags());\n } catch (e) {/* ignore */}\n };\n w.addEventListener(CHANGED_EVENT, handler);\n return function () {\n return w.removeEventListener(CHANGED_EVENT, handler);\n };\n}\n\n/**\n * Load hub UI feature flags persisted in Hub settings (disk-backed on server).\n * Falls back to localStorage defaults when unavailable.\n * @returns {Promise}\n */\nfunction fetchPersistedHubUiFeatureFlags() {\n return _fetchPersistedHubUiFeatureFlags.apply(this, arguments);\n}\n/**\n * Persist hub UI feature flags to Hub settings (disk-backed on server).\n * Requires admin token.\n * @param {object} flags\n * @param {string} adminToken\n * @returns {Promise<{ok:boolean, flags:object, persisted:boolean, message?:string}>}\n */\nfunction _fetchPersistedHubUiFeatureFlags() {\n _fetchPersistedHubUiFeatureFlags = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n var res, body, raw, next, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n if (!(!getFabricBrowserGlobal() || typeof fetch !== 'function')) {\n _context.n = 1;\n break;\n }\n return _context.a(2, loadHubUiFeatureFlags());\n case 1:\n installHubUiFeatureFlagsWindowApi();\n _context.p = 2;\n // Re-read localStorage first so Puppeteer / other-tab writes are not clobbered by a stale\n // in-memory fabric:state singleton (common browser-test race).\n try {\n if (typeof store().load === 'function') store().load();\n } catch (_) {/* ignore */}\n _context.n = 3;\n return fetch(\"/settings/\".concat(encodeURIComponent(SETTINGS_KEY)), {\n method: 'GET',\n headers: {\n Accept: 'application/json'\n }\n });\n case 3:\n res = _context.v;\n if (!(res.status === 404)) {\n _context.n = 4;\n break;\n }\n return _context.a(2, loadHubUiFeatureFlags());\n case 4:\n if (res.ok) {\n _context.n = 5;\n break;\n }\n return _context.a(2, loadHubUiFeatureFlags());\n case 5:\n _context.n = 6;\n return res.json()[\"catch\"](function () {\n return {};\n });\n case 6:\n body = _context.v;\n raw = body && Object.prototype.hasOwnProperty.call(body, 'value') ? body.value : null;\n if (typeof raw === 'string') {\n try {\n raw = JSON.parse(raw);\n } catch (_) {\n raw = null;\n }\n }\n if (!(!raw || _typeof(raw) !== 'object' || Array.isArray(raw) || !hasStoredUiFlagShape(raw))) {\n _context.n = 7;\n break;\n }\n return _context.a(2, loadHubUiFeatureFlags());\n case 7:\n // Normalize the persisted server payload directly. Omitted keys fall back to\n // bundled defaults inside normalizeFlags — do not re-merge stale localStorage\n // toggles that can pin disabled features on.\n next = normalizeFlags(raw);\n saveHubUiFeatureFlags(next);\n return _context.a(2, next);\n case 8:\n _context.p = 8;\n _t = _context.v;\n return _context.a(2, loadHubUiFeatureFlags());\n }\n }, _callee, null, [[2, 8]]);\n }));\n return _fetchPersistedHubUiFeatureFlags.apply(this, arguments);\n}\nfunction persistHubUiFeatureFlags(_x, _x2) {\n return _persistHubUiFeatureFlags.apply(this, arguments);\n}\n/** True if any Bitcoin sub-feature toggle is on (for optional grouped UI). */\nfunction _persistHubUiFeatureFlags() {\n _persistHubUiFeatureFlags = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(flags, adminToken) {\n var next, token, res, text, _t2;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n next = normalizeFlags(flags);\n saveHubUiFeatureFlags(next);\n if (!(!getFabricBrowserGlobal() || typeof fetch !== 'function')) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2, {\n ok: false,\n flags: next,\n persisted: false,\n message: 'window/fetch unavailable'\n });\n case 1:\n token = String(adminToken || '').trim();\n if (token) {\n _context2.n = 2;\n break;\n }\n return _context2.a(2, {\n ok: false,\n flags: next,\n persisted: false,\n message: 'admin token required'\n });\n case 2:\n _context2.p = 2;\n _context2.n = 3;\n return fetch(\"/settings/\".concat(encodeURIComponent(SETTINGS_KEY)), {\n method: 'PUT',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n Authorization: \"Bearer \".concat(token)\n },\n body: JSON.stringify({\n value: next\n })\n });\n case 3:\n res = _context2.v;\n if (res.ok) {\n _context2.n = 5;\n break;\n }\n _context2.n = 4;\n return res.text()[\"catch\"](function () {\n return '';\n });\n case 4:\n text = _context2.v;\n return _context2.a(2, {\n ok: false,\n flags: next,\n persisted: false,\n message: text || \"\".concat(res.status)\n });\n case 5:\n return _context2.a(2, {\n ok: true,\n flags: next,\n persisted: true\n });\n case 6:\n _context2.p = 6;\n _t2 = _context2.v;\n return _context2.a(2, {\n ok: false,\n flags: next,\n persisted: false,\n message: _t2 && _t2.message ? _t2.message : String(_t2)\n });\n }\n }, _callee2, null, [[2, 6]]);\n }));\n return _persistHubUiFeatureFlags.apply(this, arguments);\n}\nfunction anyBitcoinSubFeatureEnabled(f) {\n if (!f || _typeof(f) !== 'object') return false;\n return BITCOIN_UI_FLAG_KEYS.some(function (k) {\n return f[k] === true;\n });\n}\nmodule.exports = {\n FLAG_KEYS: FLAG_KEYS,\n ALWAYS_ON_FLAG_KEYS: ALWAYS_ON_FLAG_KEYS,\n BITCOIN_UI_FLAG_KEYS: BITCOIN_UI_FLAG_KEYS,\n loadHubUiFeatureFlags: loadHubUiFeatureFlags,\n saveHubUiFeatureFlags: saveHubUiFeatureFlags,\n setHubUiFeatureFlag: setHubUiFeatureFlag,\n setAllHubUiFeatureFlags: setAllHubUiFeatureFlags,\n subscribeHubUiFeatureFlags: subscribeHubUiFeatureFlags,\n fetchPersistedHubUiFeatureFlags: fetchPersistedHubUiFeatureFlags,\n persistHubUiFeatureFlags: persistHubUiFeatureFlags,\n installHubUiFeatureFlagsWindowApi: installHubUiFeatureFlagsWindowApi,\n anyBitcoinSubFeatureEnabled: anyBitcoinSubFeatureEnabled,\n defaultHubUiFeatureFlags: defaultFlags,\n documentMarketUiFlags: documentMarketUiFlags,\n HUB_UI_FEATURE_FLAGS_SETTING_KEY: SETTINGS_KEY\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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WTtFQUN0Q2EscUJBQXFCLEVBQXJCQSxxQkFBcUI7RUFDckJ3RixnQ0FBZ0MsRUFBRTFHO0FBQ3BDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9odWJVaUZlYXR1cmVGbGFncy5qcz85NDBmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgeyBzdG9yZSwgZ2V0RmFicmljQnJvd3Nlckdsb2JhbCB9ID0gcmVxdWlyZSgnLi9mYWJyaWNCcm93c2VyU3RhdGUnKTtcblxuLyoqXG4gKiBCcm93c2VyLW9ubHkgZmVhdHVyZSB2aXNpYmlsaXR5IGZvciB0aGUgaHViIFNQQSAoYGZhYnJpYzpzdGF0ZWAg4oaSIGB1aS5mZWF0dXJlRmxhZ3NgKS5cbiAqIERlZmF1bHRzIGZhdm9yIHRoZSAqKkRvY3VtZW50IG1hcmtldCoqIChEb2N1bWVudHMgKyBQZWVycyArIEJpdGNvaW4gaW52b2ljZXMvZXhwbG9yZXIpLlxuICogUGVyc2lzdGVkIGB7IHZhbHVlIH1gIGZyb20gYEdFVCAvc2V0dGluZ3MvSFVCX1VJX0ZFQVRVUkVfRkxBR1NgIG92ZXJ3cml0ZXMgbG9jYWxzLlxuICpcbiAqICoqYGFkdmFuY2VkTW9kZWAqKiBpcyBzdGlsbCB1c2VkIGZvciBVWCB0aGF0IHRydWx5IG5lZWRzIGFuIGV4cGxpY2l0IOKAnHBvd2VyIHVzZXLigJ0gb3B0LWluIGVsc2V3aGVyZS5cbiAqXG4gKiBFeHBsaWNpdCAqKmBwZWVyczogZmFsc2VgKiogaGlkZXMgUGVlcnMgbmF2OyBCaXRjb2luIGV4cGxvcmVyIHJlbWFpbnMgcm91dGFibGU7IHN1Yi1hcmVhcyB1c2VcbiAqIGJpdGNvaW5QYXltZW50cywgYml0Y29pblJlc291cmNlcywgZXRjLlxuICovXG4vKiogUGF0aCB1bmRlciBgZmFicmljOnN0YXRlYCBKU09OIChzZWUge0BsaW5rIC4vZmFicmljQnJvd3NlclN0YXRlLmpzfSkuICovXG5jb25zdCBVSV9GRUFUVVJFX0ZMQUdTX1NUQVRFX1BBVEggPSAnL3VpL2ZlYXR1cmVGbGFncyc7XG5cbmNvbnN0IENIQU5HRURfRVZFTlQgPSAnZmFicmljSHViVWlGZWF0dXJlRmxhZ3NDaGFuZ2VkJztcbmNvbnN0IFNFVFRJTkdTX0tFWSA9ICdIVUJfVUlfRkVBVFVSRV9GTEFHUyc7XG5cbmNvbnN0IEJJVENPSU5fVUlfRkxBR19LRVlTID0gW1xuICAnYml0Y29pblBheW1lbnRzJyxcbiAgJ2JpdGNvaW5JbnZvaWNlcycsXG4gICdiaXRjb2luUmVzb3VyY2VzJyxcbiAgJ2JpdGNvaW5FeHBsb3JlcicsXG4gICdiaXRjb2luTGlnaHRuaW5nJyxcbiAgJ2JpdGNvaW5Dcm93ZGZ1bmQnXG5dO1xuXG5jb25zdCBGTEFHX0tFWVMgPSBbXG4gICdwcm9tbycsXG4gICdhZHZhbmNlZE1vZGUnLFxuICAncGVlcnMnLFxuICAnYWN0aXZpdGllcycsXG4gICdmZWF0dXJlcycsXG4gICdzaWRlY2hhaW4nLFxuICAuLi5CSVRDT0lOX1VJX0ZMQUdfS0VZU1xuXTtcblxuLyoqIEBkZXByZWNhdGVkIE5vIGtleXMgYXJlIGZvcmNlZCBvbjsga2VwdCBhcyBhbiBlbXB0eSBsaXN0IGZvciBvbGRlciBjYWxsZXJzLiAqL1xuY29uc3QgQUxXQVlTX09OX0ZMQUdfS0VZUyA9IFtdO1xuXG4vKiogRG9jdW1lbnQtbWFya2V0IHByb2ZpbGU6IHBlZXJzICsgaW52b2ljZXMvZXhwbG9yZXI7IHVucmVsYXRlZCBzdXJmYWNlcyBvZmYuICovXG5mdW5jdGlvbiBkZWZhdWx0RmxhZ3MgKCkge1xuICByZXR1cm4ge1xuICAgIHByb21vOiBmYWxzZSxcbiAgICBhZHZhbmNlZE1vZGU6IGZhbHNlLFxuICAgIHBlZXJzOiB0cnVlLFxuICAgIGFjdGl2aXRpZXM6IGZhbHNlLFxuICAgIGZlYXR1cmVzOiBmYWxzZSxcbiAgICBzaWRlY2hhaW46IGZhbHNlLFxuICAgIGJpdGNvaW5QYXltZW50czogZmFsc2UsXG4gICAgYml0Y29pbkludm9pY2VzOiB0cnVlLFxuICAgIGJpdGNvaW5SZXNvdXJjZXM6IGZhbHNlLFxuICAgIGJpdGNvaW5FeHBsb3JlcjogdHJ1ZSxcbiAgICBiaXRjb2luTGlnaHRuaW5nOiBmYWxzZSxcbiAgICBiaXRjb2luQ3Jvd2RmdW5kOiBmYWxzZVxuICB9O1xufVxuXG4vKiogQWxpYXMgZm9yIEFkbWluIHByZXNldCAvIGNhbGxlcnMgdGhhdCB3YW50IGFuIGV4cGxpY2l0IG5hbWUuICovXG5mdW5jdGlvbiBkb2N1bWVudE1hcmtldFVpRmxhZ3MgKCkge1xuICByZXR1cm4gZGVmYXVsdEZsYWdzKCk7XG59XG5cbmZ1bmN0aW9uIGhhc1N0b3JlZFVpRmxhZ1NoYXBlIChyYXcpIHtcbiAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShyYXcpKSByZXR1cm4gZmFsc2U7XG4gIC8qKiBgYml0Y29pbjogdHJ1ZWAgaXMgYSBzZW50aW5lbCB0aGF0IGVuYWJsZXMgYWxsIEJUQyBzdWItZmVhdHVyZXMuICovXG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3LCAnYml0Y29pbicpKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIEZMQUdfS0VZUy5zb21lKChrKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3LCBrKSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZsYWdzIChyYXcpIHtcbiAgY29uc3QgZCA9IGRlZmF1bHRGbGFncygpO1xuICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnb2JqZWN0JykgcmV0dXJuIGQ7XG4gIC8vIEVtcHR5IGB7fWAgaXMgbm90IGludGVudGlvbmFsIGNvbmZpZzsgcmVhbCBzdG9yYWdlIGNhbiBhY2NpZGVudGFsbHkgaG9sZCBge31gIHVuZGVyIGZhYnJpYzpzdGF0ZSBvbmx5LlxuICBpZiAoIWhhc1N0b3JlZFVpRmxhZ1NoYXBlKHJhdykpIHJldHVybiBkO1xuICBpZiAocmF3LmJpdGNvaW4gPT09IHRydWUpIHtcbiAgICBmb3IgKGNvbnN0IGsgb2YgQklUQ09JTl9VSV9GTEFHX0tFWVMpIGRba10gPSB0cnVlO1xuICB9XG4gIGZvciAoY29uc3QgayBvZiBGTEFHX0tFWVMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhdywgaykpIHtcbiAgICAgIGRba10gPSAhIXJhd1trXTtcbiAgICB9XG4gIH1cbiAgLy8gV2l0aG91dCBBZHZhbmNlZCBNb2RlLCBrZXlzIG9taXR0ZWQgZnJvbSBgcmF3YCBrZWVwIGJ1bmRsZWQgZGVmYXVsdHMgKGBkZWZhdWx0RmxhZ3NgKSwgbm90IGltcGxpY2l0IG9mZi5cbiAgaWYgKCFkLmFkdmFuY2VkTW9kZSkge1xuICAgIGNvbnN0IGJhc2VXaGVuVW5zZXQgPSBkZWZhdWx0RmxhZ3MoKTtcbiAgICBjb25zdCBLRVlTX0lOSEVSSVRfV0hFTl9BQlNFTlRfRlJPTV9SQVcgPSBbXG4gICAgICAncGVlcnMnLFxuICAgICAgJ2FjdGl2aXRpZXMnLFxuICAgICAgJ2ZlYXR1cmVzJyxcbiAgICAgICdzaWRlY2hhaW4nLFxuICAgICAgJ2JpdGNvaW5SZXNvdXJjZXMnLFxuICAgICAgJ2JpdGNvaW5FeHBsb3JlcicsXG4gICAgICAnYml0Y29pbkxpZ2h0bmluZycsXG4gICAgICAnYml0Y29pbkNyb3dkZnVuZCdcbiAgICBdO1xuICAgIGZvciAoY29uc3QgayBvZiBLRVlTX0lOSEVSSVRfV0hFTl9BQlNFTlRfRlJPTV9SQVcpIHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJhdywgaykpIHtcbiAgICAgICAgZFtrXSA9ICEhYmFzZVdoZW5VbnNldFtrXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGQ7XG59XG5cbmZ1bmN0aW9uIGxvYWRIdWJVaUZlYXR1cmVGbGFncyAoKSB7XG4gIGlmICghZ2V0RmFicmljQnJvd3Nlckdsb2JhbCgpKSByZXR1cm4gZGVmYXVsdEZsYWdzKCk7XG4gIHRyeSB7XG4gICAgY29uc3QgdiA9IHN0b3JlKCkuR0VUKFVJX0ZFQVRVUkVfRkxBR1NfU1RBVEVfUEFUSCk7XG4gICAgaWYgKCF2IHx8IHR5cGVvZiB2ICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHYpKSByZXR1cm4gZGVmYXVsdEZsYWdzKCk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUZsYWdzKHYpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRGbGFncygpO1xuICB9XG59XG5cbi8qKlxuICogVGVzdCAvIGF1dG9tYXRpb24gaG9vazoga2VlcCBpbi1tZW1vcnkgYGZhYnJpYzpzdGF0ZWAgYW5kIGxvY2FsU3RvcmFnZSBhbGlnbmVkLlxuICogSW5zdGFsbGVkIG9uY2Ugb24gZmlyc3QgYnJvd3NlciBhY2Nlc3MgKEh1YiBTUEEgKyBQdXBwZXRlZXIgaGVscGVycykuXG4gKi9cbmZ1bmN0aW9uIGluc3RhbGxIdWJVaUZlYXR1cmVGbGFnc1dpbmRvd0FwaSAoKSB7XG4gIGNvbnN0IHcgPSBnZXRGYWJyaWNCcm93c2VyR2xvYmFsKCk7XG4gIGlmICghdyB8fCB3Ll9fZmFicmljSHViVWlGZWF0dXJlRmxhZ3MpIHJldHVybjtcbiAgdy5fX2ZhYnJpY0h1YlVpRmVhdHVyZUZsYWdzID0ge1xuICAgIGxvYWQ6IGxvYWRIdWJVaUZlYXR1cmVGbGFncyxcbiAgICBzZXRBbGw6IHNldEFsbEh1YlVpRmVhdHVyZUZsYWdzLFxuICAgIHNldDogc2V0SHViVWlGZWF0dXJlRmxhZyxcbiAgICBzYXZlOiBzYXZlSHViVWlGZWF0dXJlRmxhZ3MsXG4gICAgcGVyc2lzdDogcGVyc2lzdEh1YlVpRmVhdHVyZUZsYWdzLFxuICAgIGRlZmF1bHRGbGFnc1xuICB9O1xufVxuXG5mdW5jdGlvbiBzYXZlSHViVWlGZWF0dXJlRmxhZ3MgKGZsYWdzKSB7XG4gIGlmICghZ2V0RmFicmljQnJvd3Nlckdsb2JhbCgpKSByZXR1cm47XG4gIGNvbnN0IG5leHQgPSBub3JtYWxpemVGbGFncyhmbGFncyk7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3QgPSBzdG9yZSgpO1xuICAgIGNvbnN0IHVpID0gc3QuR0VUKCcvdWknKTtcbiAgICBjb25zdCBtZXJnZWQgPVxuICAgICAgdWkgJiYgdHlwZW9mIHVpID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh1aSlcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKHt9LCB1aSwgeyBmZWF0dXJlRmxhZ3M6IG5leHQgfSlcbiAgICAgICAgOiB7IGZlYXR1cmVGbGFnczogbmV4dCB9O1xuICAgIHN0LlBVVCgnL3VpJywgbWVyZ2VkKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICB0cnkge1xuICAgIGNvbnN0IHcgPSBnZXRGYWJyaWNCcm93c2VyR2xvYmFsKCk7XG4gICAgaWYgKHcpIHcuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoQ0hBTkdFRF9FVkVOVCwgeyBkZXRhaWw6IG5leHQgfSkpO1xuICB9IGNhdGNoIChlKSB7IC8qIGlnbm9yZSAqLyB9XG59XG5cbmZ1bmN0aW9uIHNldEh1YlVpRmVhdHVyZUZsYWcgKGtleSwgdmFsdWUpIHtcbiAgaWYgKCFGTEFHX0tFWVMuaW5jbHVkZXMoa2V5KSkgcmV0dXJuIGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuICBjb25zdCBmID0gbG9hZEh1YlVpRmVhdHVyZUZsYWdzKCk7XG4gIGZba2V5XSA9ICEhdmFsdWU7XG4gIHNhdmVIdWJVaUZlYXR1cmVGbGFncyhmKTtcbiAgcmV0dXJuIGY7XG59XG5cbmZ1bmN0aW9uIHNldEFsbEh1YlVpRmVhdHVyZUZsYWdzIChwYXRjaCkge1xuICBjb25zdCBmID0gbG9hZEh1YlVpRmVhdHVyZUZsYWdzKCk7XG4gIGNvbnN0IHAgPSBwYXRjaCAmJiB0eXBlb2YgcGF0Y2ggPT09ICdvYmplY3QnID8gcGF0Y2ggOiB7fTtcbiAgZm9yIChjb25zdCBrIG9mIEZMQUdfS0VZUykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocCwgaykpIGZba10gPSAhIXBba107XG4gIH1cbiAgc2F2ZUh1YlVpRmVhdHVyZUZsYWdzKGYpO1xuICByZXR1cm4gZjtcbn1cblxuZnVuY3Rpb24gc3Vic2NyaWJlSHViVWlGZWF0dXJlRmxhZ3MgKGNhbGxiYWNrKSB7XG4gIGNvbnN0IHcgPSBnZXRGYWJyaWNCcm93c2VyR2xvYmFsKCk7XG4gIGlmICghdyB8fCB0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbm9vcCAoKSB7fTtcbiAgfVxuICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKSk7XG4gICAgfSBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICB9O1xuICB3LmFkZEV2ZW50TGlzdGVuZXIoQ0hBTkdFRF9FVkVOVCwgaGFuZGxlcik7XG4gIHJldHVybiAoKSA9PiB3LnJlbW92ZUV2ZW50TGlzdGVuZXIoQ0hBTkdFRF9FVkVOVCwgaGFuZGxlcik7XG59XG5cbi8qKlxuICogTG9hZCBodWIgVUkgZmVhdHVyZSBmbGFncyBwZXJzaXN0ZWQgaW4gSHViIHNldHRpbmdzIChkaXNrLWJhY2tlZCBvbiBzZXJ2ZXIpLlxuICogRmFsbHMgYmFjayB0byBsb2NhbFN0b3JhZ2UgZGVmYXVsdHMgd2hlbiB1bmF2YWlsYWJsZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPG9iamVjdD59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoUGVyc2lzdGVkSHViVWlGZWF0dXJlRmxhZ3MgKCkge1xuICBpZiAoIWdldEZhYnJpY0Jyb3dzZXJHbG9iYWwoKSB8fCB0eXBlb2YgZmV0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbG9hZEh1YlVpRmVhdHVyZUZsYWdzKCk7XG4gIH1cbiAgaW5zdGFsbEh1YlVpRmVhdHVyZUZsYWdzV2luZG93QXBpKCk7XG4gIHRyeSB7XG4gICAgLy8gUmUtcmVhZCBsb2NhbFN0b3JhZ2UgZmlyc3Qgc28gUHVwcGV0ZWVyIC8gb3RoZXItdGFiIHdyaXRlcyBhcmUgbm90IGNsb2JiZXJlZCBieSBhIHN0YWxlXG4gICAgLy8gaW4tbWVtb3J5IGZhYnJpYzpzdGF0ZSBzaW5nbGV0b24gKGNvbW1vbiBicm93c2VyLXRlc3QgcmFjZSkuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2Ygc3RvcmUoKS5sb2FkID09PSAnZnVuY3Rpb24nKSBzdG9yZSgpLmxvYWQoKTtcbiAgICB9IGNhdGNoIChfKSB7IC8qIGlnbm9yZSAqLyB9XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChgL3NldHRpbmdzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KFNFVFRJTkdTX0tFWSl9YCwge1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfVxuICAgIH0pO1xuICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDQpIHJldHVybiBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgICBpZiAoIXJlcy5vaykgcmV0dXJuIGxvYWRIdWJVaUZlYXR1cmVGbGFncygpO1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXMuanNvbigpLmNhdGNoKCgpID0+ICh7fSkpO1xuICAgIGxldCByYXcgPSBib2R5ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChib2R5LCAndmFsdWUnKSA/IGJvZHkudmFsdWUgOiBudWxsO1xuICAgIGlmICh0eXBlb2YgcmF3ID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmF3ID0gSlNPTi5wYXJzZShyYXcpO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICByYXcgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXJhdyB8fCB0eXBlb2YgcmF3ICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHJhdykgfHwgIWhhc1N0b3JlZFVpRmxhZ1NoYXBlKHJhdykpIHtcbiAgICAgIHJldHVybiBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgICB9XG4gICAgLy8gTm9ybWFsaXplIHRoZSBwZXJzaXN0ZWQgc2VydmVyIHBheWxvYWQgZGlyZWN0bHkuIE9taXR0ZWQga2V5cyBmYWxsIGJhY2sgdG9cbiAgICAvLyBidW5kbGVkIGRlZmF1bHRzIGluc2lkZSBub3JtYWxpemVGbGFncyDigJQgZG8gbm90IHJlLW1lcmdlIHN0YWxlIGxvY2FsU3RvcmFnZVxuICAgIC8vIHRvZ2dsZXMgdGhhdCBjYW4gcGluIGRpc2FibGVkIGZlYXR1cmVzIG9uLlxuICAgIGNvbnN0IG5leHQgPSBub3JtYWxpemVGbGFncyhyYXcpO1xuICAgIHNhdmVIdWJVaUZlYXR1cmVGbGFncyhuZXh0KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBsb2FkSHViVWlGZWF0dXJlRmxhZ3MoKTtcbiAgfVxufVxuXG4vKipcbiAqIFBlcnNpc3QgaHViIFVJIGZlYXR1cmUgZmxhZ3MgdG8gSHViIHNldHRpbmdzIChkaXNrLWJhY2tlZCBvbiBzZXJ2ZXIpLlxuICogUmVxdWlyZXMgYWRtaW4gdG9rZW4uXG4gKiBAcGFyYW0ge29iamVjdH0gZmxhZ3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZG1pblRva2VuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7b2s6Ym9vbGVhbiwgZmxhZ3M6b2JqZWN0LCBwZXJzaXN0ZWQ6Ym9vbGVhbiwgbWVzc2FnZT86c3RyaW5nfT59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RIdWJVaUZlYXR1cmVGbGFncyAoZmxhZ3MsIGFkbWluVG9rZW4pIHtcbiAgY29uc3QgbmV4dCA9IG5vcm1hbGl6ZUZsYWdzKGZsYWdzKTtcbiAgc2F2ZUh1YlVpRmVhdHVyZUZsYWdzKG5leHQpO1xuICBpZiAoIWdldEZhYnJpY0Jyb3dzZXJHbG9iYWwoKSB8fCB0eXBlb2YgZmV0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGZsYWdzOiBuZXh0LCBwZXJzaXN0ZWQ6IGZhbHNlLCBtZXNzYWdlOiAnd2luZG93L2ZldGNoIHVuYXZhaWxhYmxlJyB9O1xuICB9XG4gIGNvbnN0IHRva2VuID0gU3RyaW5nKGFkbWluVG9rZW4gfHwgJycpLnRyaW0oKTtcbiAgaWYgKCF0b2tlbikge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZmxhZ3M6IG5leHQsIHBlcnNpc3RlZDogZmFsc2UsIG1lc3NhZ2U6ICdhZG1pbiB0b2tlbiByZXF1aXJlZCcgfTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAvc2V0dGluZ3MvJHtlbmNvZGVVUklDb21wb25lbnQoU0VUVElOR1NfS0VZKX1gLCB7XG4gICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWBcbiAgICAgIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHZhbHVlOiBuZXh0IH0pXG4gICAgfSk7XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpLmNhdGNoKCgpID0+ICcnKTtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZmxhZ3M6IG5leHQsIHBlcnNpc3RlZDogZmFsc2UsIG1lc3NhZ2U6IHRleHQgfHwgYCR7cmVzLnN0YXR1c31gIH07XG4gICAgfVxuICAgIHJldHVybiB7IG9rOiB0cnVlLCBmbGFnczogbmV4dCwgcGVyc2lzdGVkOiB0cnVlIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGZsYWdzOiBuZXh0LCBwZXJzaXN0ZWQ6IGZhbHNlLCBtZXNzYWdlOiBlICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSB9O1xuICB9XG59XG5cbi8qKiBUcnVlIGlmIGFueSBCaXRjb2luIHN1Yi1mZWF0dXJlIHRvZ2dsZSBpcyBvbiAoZm9yIG9wdGlvbmFsIGdyb3VwZWQgVUkpLiAqL1xuZnVuY3Rpb24gYW55Qml0Y29pblN1YkZlYXR1cmVFbmFibGVkIChmKSB7XG4gIGlmICghZiB8fCB0eXBlb2YgZiAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEJJVENPSU5fVUlfRkxBR19LRVlTLnNvbWUoKGspID0+IGZba10gPT09IHRydWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRkxBR19LRVlTLFxuICBBTFdBWVNfT05fRkxBR19LRVlTLFxuICBCSVRDT0lOX1VJX0ZMQUdfS0VZUyxcbiAgbG9hZEh1YlVpRmVhdHVyZUZsYWdzLFxuICBzYXZlSHViVWlGZWF0dXJlRmxhZ3MsXG4gIHNldEh1YlVpRmVhdHVyZUZsYWcsXG4gIHNldEFsbEh1YlVpRmVhdHVyZUZsYWdzLFxuICBzdWJzY3JpYmVIdWJVaUZlYXR1cmVGbGFncyxcbiAgZmV0Y2hQZXJzaXN0ZWRIdWJVaUZlYXR1cmVGbGFncyxcbiAgcGVyc2lzdEh1YlVpRmVhdHVyZUZsYWdzLFxuICBpbnN0YWxsSHViVWlGZWF0dXJlRmxhZ3NXaW5kb3dBcGksXG4gIGFueUJpdGNvaW5TdWJGZWF0dXJlRW5hYmxlZCxcbiAgZGVmYXVsdEh1YlVpRmVhdHVyZUZsYWdzOiBkZWZhdWx0RmxhZ3MsXG4gIGRvY3VtZW50TWFya2V0VWlGbGFncyxcbiAgSFVCX1VJX0ZFQVRVUkVfRkxBR1NfU0VUVElOR19LRVk6IFNFVFRJTkdTX0tFWVxufTtcbiJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJTeW1ib2wiLCJuIiwiaXRlcmF0b3IiLCJvIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX24iLCJGIiwicyIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl90eXBlb2YiLCJfcmVxdWlyZSIsInJlcXVpcmUiLCJzdG9yZSIsImdldEZhYnJpY0Jyb3dzZXJHbG9iYWwiLCJVSV9GRUFUVVJFX0ZMQUdTX1NUQVRFX1BBVEgiLCJDSEFOR0VEX0VWRU5UIiwiU0VUVElOR1NfS0VZIiwiQklUQ09JTl9VSV9GTEFHX0tFWVMiLCJGTEFHX0tFWVMiLCJjb25jYXQiLCJBTFdBWVNfT05fRkxBR19LRVlTIiwiZGVmYXVsdEZsYWdzIiwicHJvbW8iLCJhZHZhbmNlZE1vZGUiLCJwZWVycyIsImFjdGl2aXRpZXMiLCJmZWF0dXJlcyIsInNpZGVjaGFpbiIsImJpdGNvaW5QYXltZW50cyIsImJpdGNvaW5JbnZvaWNlcyIsImJpdGNvaW5SZXNvdXJjZXMiLCJiaXRjb2luRXhwbG9yZXIiLCJiaXRjb2luTGlnaHRuaW5nIiwiYml0Y29pbkNyb3dkZnVuZCIsImRvY3VtZW50TWFya2V0VWlGbGFncyIsImhhc1N0b3JlZFVpRmxhZ1NoYXBlIiwicmF3IiwiaGFzT3duUHJvcGVydHkiLCJzb21lIiwiayIsIm5vcm1hbGl6ZUZsYWdzIiwiYml0Y29pbiIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZXJyIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImJhc2VXaGVuVW5zZXQiLCJLRVlTX0lOSEVSSVRfV0hFTl9BQlNFTlRfRlJPTV9SQVciLCJfaSIsIl9LRVlTX0lOSEVSSVRfV0hFTl9BQiIsImxvYWRIdWJVaUZlYXR1cmVGbGFncyIsIkdFVCIsImluc3RhbGxIdWJVaUZlYXR1cmVGbGFnc1dpbmRvd0FwaSIsIl9fZmFicmljSHViVWlGZWF0dXJlRmxhZ3MiLCJsb2FkIiwic2V0QWxsIiwic2V0QWxsSHViVWlGZWF0dXJlRmxhZ3MiLCJzZXQiLCJzZXRIdWJVaUZlYXR1cmVGbGFnIiwic2F2ZSIsInNhdmVIdWJVaUZlYXR1cmVGbGFncyIsInBlcnNpc3QiLCJwZXJzaXN0SHViVWlGZWF0dXJlRmxhZ3MiLCJmbGFncyIsInN0IiwidWkiLCJtZXJnZWQiLCJhc3NpZ24iLCJmZWF0dXJlRmxhZ3MiLCJQVVQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJrZXkiLCJpbmNsdWRlcyIsInBhdGNoIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsInN1YnNjcmliZUh1YlVpRmVhdHVyZUZsYWdzIiwiY2FsbGJhY2siLCJub29wIiwiaGFuZGxlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZmV0Y2hQZXJzaXN0ZWRIdWJVaUZlYXR1cmVGbGFncyIsIl9mZXRjaFBlcnNpc3RlZEh1YlVpRmVhdHVyZUZsYWdzIiwiX2NhbGxlZSIsInJlcyIsImJvZHkiLCJfdCIsIl9jb250ZXh0IiwiZmV0Y2giLCJfIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibWV0aG9kIiwiaGVhZGVycyIsIkFjY2VwdCIsInN0YXR1cyIsIm9rIiwianNvbiIsIkpTT04iLCJwYXJzZSIsIl94IiwiX3gyIiwiX3BlcnNpc3RIdWJVaUZlYXR1cmVGbGFncyIsIl9jYWxsZWUyIiwiYWRtaW5Ub2tlbiIsInRva2VuIiwidGV4dCIsIl90MiIsIl9jb250ZXh0MiIsInBlcnNpc3RlZCIsIm1lc3NhZ2UiLCJTdHJpbmciLCJ0cmltIiwiQXV0aG9yaXphdGlvbiIsInN0cmluZ2lmeSIsImFueUJpdGNvaW5TdWJGZWF0dXJlRW5hYmxlZCIsIm1vZHVsZSIsImV4cG9ydHMiLCJkZWZhdWx0SHViVWlGZWF0dXJlRmxhZ3MiLCJIVUJfVUlfRkVBVFVSRV9GTEFHU19TRVRUSU5HX0tFWSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/hubUiFeatureFlags.js\n\n}")},"./functions/hydrateHubNetworkStatusViaHttp.js"(module){"use strict";eval('{\n\n/**\n * When the WebSocket is slow, pull {@link GetNetworkStatus} over same-origin HTTP JSON-RPC\n * and merge into Bridge state (dispatches `networkStatusUpdate` like the WS path).\n *\n * @param {{ applyHubNetworkStatusPayload?: (result: object) => boolean }} bridgeInstance\n * @param {string} origin - e.g. `window.location.origin`\n * @returns {Promise} whether payload was applied\n */\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction hydrateHubNetworkStatusViaHttp(_x, _x2) {\n return _hydrateHubNetworkStatusViaHttp.apply(this, arguments);\n}\nfunction _hydrateHubNetworkStatusViaHttp() {\n _hydrateHubNetworkStatusViaHttp = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(bridgeInstance, origin) {\n var root, res, body, _t;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n if (!(!bridgeInstance || typeof bridgeInstance.applyHubNetworkStatusPayload !== \'function\')) {\n _context.n = 1;\n break;\n }\n return _context.a(2, false);\n case 1:\n root = String(origin || \'\').trim().replace(/\\/+$/, \'\');\n if (root) {\n _context.n = 2;\n break;\n }\n return _context.a(2, false);\n case 2:\n _context.p = 2;\n _context.n = 3;\n return fetch("".concat(root, "/services/rpc"), {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n },\n body: JSON.stringify({\n jsonrpc: \'2.0\',\n id: 1,\n method: \'GetNetworkStatus\',\n params: []\n })\n });\n case 3:\n res = _context.v;\n _context.n = 5;\n break;\n case 4:\n _context.p = 4;\n _t = _context.v;\n return _context.a(2, false);\n case 5:\n _context.n = 6;\n return res.json()["catch"](function () {\n return null;\n });\n case 6:\n body = _context.v;\n if (!(!body || body.result == null)) {\n _context.n = 7;\n break;\n }\n return _context.a(2, false);\n case 7:\n return _context.a(2, !!bridgeInstance.applyHubNetworkStatusPayload(body.result));\n }\n }, _callee, null, [[2, 4]]);\n }));\n return _hydrateHubNetworkStatusViaHttp.apply(this, arguments);\n}\nmodule.exports = {\n hydrateHubNetworkStatusViaHttp: hydrateHubNetworkStatusViaHttp\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvaHlkcmF0ZUh1Yk5ldHdvcmtTdGF0dXNWaWFIdHRwLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQSxTQUFBQSxhQUFBLElBREEsdUtBQUFDLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxXQUFBLDhCQUFBQyxFQUFBTixDQUFBLEVBQUFFLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLFFBQUFDLENBQUEsR0FBQUwsQ0FBQSxJQUFBQSxDQUFBLENBQUFNLFNBQUEsWUFBQUMsU0FBQSxHQUFBUCxDQUFBLEdBQUFPLFNBQUEsRUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLE1BQUEsQ0FBQUwsQ0FBQSxDQUFBQyxTQUFBLFVBQUFLLG1CQUFBLENBQUFILENBQUEsdUJBQUFWLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLFFBQUFFLENBQUEsRUFBQUMsQ0FBQSxFQUFBRyxDQUFBLEVBQUFJLENBQUEsTUFBQUMsQ0FBQSxHQUFBWCxDQUFBLFFBQUFZLENBQUEsT0FBQUMsQ0FBQSxLQUFBRixDQUFBLEtBQUFiLENBQUEsS0FBQWdCLENBQUEsRUFBQXBCLENBQUEsRUFBQXFCLENBQUEsRUFBQUMsQ0FBQSxFQUFBTixDQUFBLEVBQUFNLENBQUEsQ0FBQUMsSUFBQSxDQUFBdkIsQ0FBQSxNQUFBc0IsQ0FBQSxXQUFBQSxFQUFBckIsQ0FBQSxFQUFBQyxDQUFBLFdBQUFNLENBQUEsR0FBQVAsQ0FBQSxFQUFBUSxDQUFBLE1BQUFHLENBQUEsR0FBQVosQ0FBQSxFQUFBbUIsQ0FBQSxDQUFBZixDQUFBLEdBQUFGLENBQUEsRUFBQW1CLENBQUEsZ0JBQUFDLEVBQUFwQixDQUFBLEVBQUFFLENBQUEsU0FBQUssQ0FBQSxHQUFBUCxDQUFBLEVBQUFVLENBQUEsR0FBQVIsQ0FBQSxFQUFBSCxDQUFBLE9BQUFpQixDQUFBLElBQUFGLENBQUEsS0FBQVYsQ0FBQSxJQUFBTCxDQUFBLEdBQUFnQixDQUFBLENBQUFPLE1BQUEsRUFBQXZCLENBQUEsVUFBQUssQ0FBQSxFQUFBRSxDQUFBLEdBQUFTLENBQUEsQ0FBQWhCLENBQUEsR0FBQXFCLENBQUEsR0FBQUgsQ0FBQSxDQUFBRixDQUFBLEVBQUFRLENBQUEsR0FBQWpCLENBQUEsS0FBQU4sQ0FBQSxRQUFBSSxDQUFBLEdBQUFtQixDQUFBLEtBQUFyQixDQUFBLE1BQUFRLENBQUEsR0FBQUosQ0FBQSxFQUFBQyxDQUFBLEdBQUFELENBQUEsWUFBQUMsQ0FBQSxXQUFBRCxDQUFBLE1BQUFBLENBQUEsTUFBQVIsQ0FBQSxJQUFBUSxDQUFBLE9BQUFjLENBQUEsTUFBQWhCLENBQUEsR0FBQUosQ0FBQSxRQUFBb0IsQ0FBQSxHQUFBZCxDQUFBLFFBQUFDLENBQUEsTUFBQVUsQ0FBQSxDQUFBQyxDQUFBLEdBQUFoQixDQUFBLEVBQUFlLENBQUEsQ0FBQWYsQ0FBQSxHQUFBSSxDQUFBLE9BQUFjLENBQUEsR0FBQUcsQ0FBQSxLQUFBbkIsQ0FBQSxHQUFBSixDQUFBLFFBQUFNLENBQUEsTUFBQUosQ0FBQSxJQUFBQSxDQUFBLEdBQUFxQixDQUFBLE1BQUFqQixDQUFBLE1BQUFOLENBQUEsRUFBQU0sQ0FBQSxNQUFBSixDQUFBLEVBQUFlLENBQUEsQ0FBQWYsQ0FBQSxHQUFBcUIsQ0FBQSxFQUFBaEIsQ0FBQSxjQUFBSCxDQUFBLElBQUFKLENBQUEsYUFBQW1CLENBQUEsUUFBQUgsQ0FBQSxPQUFBZCxDQUFBLHFCQUFBRSxDQUFBLEVBQUFXLENBQUEsRUFBQVEsQ0FBQSxRQUFBVCxDQUFBLFlBQUFVLFNBQUEsdUNBQUFSLENBQUEsVUFBQUQsQ0FBQSxJQUFBSyxDQUFBLENBQUFMLENBQUEsRUFBQVEsQ0FBQSxHQUFBaEIsQ0FBQSxHQUFBUSxDQUFBLEVBQUFMLENBQUEsR0FBQWEsQ0FBQSxHQUFBeEIsQ0FBQSxHQUFBUSxDQUFBLE9BQUFULENBQUEsR0FBQVksQ0FBQSxNQUFBTSxDQUFBLEtBQUFWLENBQUEsS0FBQUMsQ0FBQSxHQUFBQSxDQUFBLFFBQUFBLENBQUEsU0FBQVUsQ0FBQSxDQUFBZixDQUFBLFFBQUFrQixDQUFBLENBQUFiLENBQUEsRUFBQUcsQ0FBQSxLQUFBTyxDQUFBLENBQUFmLENBQUEsR0FBQVEsQ0FBQSxHQUFBTyxDQUFBLENBQUFDLENBQUEsR0FBQVIsQ0FBQSxhQUFBSSxDQUFBLE1BQUFSLENBQUEsUUFBQUMsQ0FBQSxLQUFBSCxDQUFBLFlBQUFMLENBQUEsR0FBQU8sQ0FBQSxDQUFBRixDQUFBLFdBQUFMLENBQUEsR0FBQUEsQ0FBQSxDQUFBMEIsSUFBQSxDQUFBbkIsQ0FBQSxFQUFBSSxDQUFBLFVBQUFjLFNBQUEsMkNBQUF6QixDQUFBLENBQUEyQixJQUFBLFNBQUEzQixDQUFBLEVBQUFXLENBQUEsR0FBQVgsQ0FBQSxDQUFBNEIsS0FBQSxFQUFBcEIsQ0FBQSxTQUFBQSxDQUFBLG9CQUFBQSxDQUFBLEtBQUFSLENBQUEsR0FBQU8sQ0FBQSxlQUFBUCxDQUFBLENBQUEwQixJQUFBLENBQUFuQixDQUFBLEdBQUFDLENBQUEsU0FBQUcsQ0FBQSxHQUFBYyxTQUFBLHVDQUFBcEIsQ0FBQSxnQkFBQUcsQ0FBQSxPQUFBRCxDQUFBLEdBQUFSLENBQUEsY0FBQUMsQ0FBQSxJQUFBaUIsQ0FBQSxHQUFBQyxDQUFBLENBQUFmLENBQUEsUUFBQVEsQ0FBQSxHQUFBVixDQUFBLENBQUF5QixJQUFBLENBQUF2QixDQUFBLEVBQUFlLENBQUEsT0FBQUUsQ0FBQSxrQkFBQXBCLENBQUEsSUFBQU8sQ0FBQSxHQUFBUixDQUFBLEVBQUFTLENBQUEsTUFBQUcsQ0FBQSxHQUFBWCxDQUFBLGNBQUFlLENBQUEsbUJBQUFhLEtBQUEsRUFBQTVCLENBQUEsRUFBQTJCLElBQUEsRUFBQVYsQ0FBQSxTQUFBaEIsQ0FBQSxFQUFBSSxDQUFBLEVBQUFFLENBQUEsUUFBQUksQ0FBQSxRQUFBUyxDQUFBLGdCQUFBVixVQUFBLGNBQUFtQixrQkFBQSxjQUFBQywyQkFBQSxLQUFBOUIsQ0FBQSxHQUFBWSxNQUFBLENBQUFtQixjQUFBLE1BQUF2QixDQUFBLE1BQUFMLENBQUEsSUFBQUgsQ0FBQSxDQUFBQSxDQUFBLElBQUFHLENBQUEsU0FBQVcsbUJBQUEsQ0FBQWQsQ0FBQSxPQUFBRyxDQUFBLGlDQUFBSCxDQUFBLEdBQUFXLENBQUEsR0FBQW1CLDBCQUFBLENBQUFyQixTQUFBLEdBQUFDLFNBQUEsQ0FBQUQsU0FBQSxHQUFBRyxNQUFBLENBQUFDLE1BQUEsQ0FBQUwsQ0FBQSxZQUFBTyxFQUFBaEIsQ0FBQSxXQUFBYSxNQUFBLENBQUFvQixjQUFBLEdBQUFwQixNQUFBLENBQUFvQixjQUFBLENBQUFqQyxDQUFBLEVBQUErQiwwQkFBQSxLQUFBL0IsQ0FBQSxDQUFBa0MsU0FBQSxHQUFBSCwwQkFBQSxFQUFBaEIsbUJBQUEsQ0FBQWYsQ0FBQSxFQUFBTSxDQUFBLHlCQUFBTixDQUFBLENBQUFVLFNBQUEsR0FBQUcsTUFBQSxDQUFBQyxNQUFBLENBQUFGLENBQUEsR0FBQVosQ0FBQSxXQUFBOEIsaUJBQUEsQ0FBQXBCLFNBQUEsR0FBQXFCLDBCQUFBLEVBQUFoQixtQkFBQSxDQUFBSCxDQUFBLGlCQUFBbUIsMEJBQUEsR0FBQWhCLG1CQUFBLENBQUFnQiwwQkFBQSxpQkFBQUQsaUJBQUEsR0FBQUEsaUJBQUEsQ0FBQUssV0FBQSx3QkFBQXBCLG1CQUFBLENBQUFnQiwwQkFBQSxFQUFBekIsQ0FBQSx3QkFBQVMsbUJBQUEsQ0FBQUgsQ0FBQSxHQUFBRyxtQkFBQSxDQUFBSCxDQUFBLEVBQUFOLENBQUEsZ0JBQUFTLG1CQUFBLENBQUFILENBQUEsRUFBQVIsQ0FBQSxpQ0FBQVcsbUJBQUEsQ0FBQUgsQ0FBQSw4REFBQWIsWUFBQSxZQUFBQSxhQUFBLGFBQUFxQyxDQUFBLEVBQUE1QixDQUFBLEVBQUE2QixDQUFBLEVBQUFyQixDQUFBO0FBQUEsU0FBQUQsb0JBQUFmLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLEVBQUFILENBQUEsUUFBQU8sQ0FBQSxHQUFBSyxNQUFBLENBQUF5QixjQUFBLFFBQUE5QixDQUFBLHVCQUFBUixDQUFBLElBQUFRLENBQUEsUUFBQU8sbUJBQUEsWUFBQXdCLG1CQUFBdkMsQ0FBQSxFQUFBRSxDQUFBLEVBQUFFLENBQUEsRUFBQUgsQ0FBQSxhQUFBSyxFQUFBSixDQUFBLEVBQUFFLENBQUEsSUFBQVcsbUJBQUEsQ0FBQWYsQ0FBQSxFQUFBRSxDQUFBLFlBQUFGLENBQUEsZ0JBQUF3QyxPQUFBLENBQUF0QyxDQUFBLEVBQUFFLENBQUEsRUFBQUosQ0FBQSxTQUFBRSxDQUFBLEdBQUFNLENBQUEsR0FBQUEsQ0FBQSxDQUFBUixDQUFBLEVBQUFFLENBQUEsSUFBQTJCLEtBQUEsRUFBQXpCLENBQUEsRUFBQXFDLFVBQUEsR0FBQXhDLENBQUEsRUFBQXlDLFlBQUEsR0FBQXpDLENBQUEsRUFBQTBDLFFBQUEsR0FBQTFDLENBQUEsTUFBQUQsQ0FBQSxDQUFBRSxDQUFBLElBQUFFLENBQUEsSUFBQUUsQ0FBQSxhQUFBQSxDQUFBLGNBQUFBLENBQUEsbUJBQUFTLG1CQUFBLENBQUFmLENBQUEsRUFBQUUsQ0FBQSxFQUFBRSxDQUFBLEVBQUFILENBQUE7QUFBQSxTQUFBMkMsbUJBQUF4QyxDQUFBLEVBQUFILENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLEVBQUFJLENBQUEsRUFBQWUsQ0FBQSxFQUFBWixDQUFBLGNBQUFELENBQUEsR0FBQUosQ0FBQSxDQUFBaUIsQ0FBQSxFQUFBWixDQUFBLEdBQUFHLENBQUEsR0FBQUosQ0FBQSxDQUFBcUIsS0FBQSxXQUFBekIsQ0FBQSxnQkFBQUosQ0FBQSxDQUFBSSxDQUFBLEtBQUFJLENBQUEsQ0FBQW9CLElBQUEsR0FBQTNCLENBQUEsQ0FBQVcsQ0FBQSxJQUFBaUMsT0FBQSxDQUFBQyxPQUFBLENBQUFsQyxDQUFBLEVBQUFtQyxJQUFBLENBQUE3QyxDQUFBLEVBQUFJLENBQUE7QUFBQSxTQUFBMEMsa0JBQUE1QyxDQUFBLDZCQUFBSCxDQUFBLFNBQUFELENBQUEsR0FBQWlELFNBQUEsYUFBQUosT0FBQSxXQUFBM0MsQ0FBQSxFQUFBSSxDQUFBLFFBQUFlLENBQUEsR0FBQWpCLENBQUEsQ0FBQThDLEtBQUEsQ0FBQWpELENBQUEsRUFBQUQsQ0FBQSxZQUFBbUQsTUFBQS9DLENBQUEsSUFBQXdDLGtCQUFBLENBQUF2QixDQUFBLEVBQUFuQixDQUFBLEVBQUFJLENBQUEsRUFBQTZDLEtBQUEsRUFBQUMsTUFBQSxVQUFBaEQsQ0FBQSxjQUFBZ0QsT0FBQWhELENBQUEsSUFBQXdDLGtCQUFBLENBQUF2QixDQUFBLEVBQUFuQixDQUFBLEVBQUFJLENBQUEsRUFBQTZDLEtBQUEsRUFBQUMsTUFBQSxXQUFBaEQsQ0FBQSxLQUFBK0MsS0FBQTtBQUFBLFNBU2VFLDhCQUE4QkEsQ0FBQUMsRUFBQSxFQUFBQyxHQUFBO0VBQUEsT0FBQUMsK0JBQUEsQ0FBQU4sS0FBQSxPQUFBRCxTQUFBO0FBQUE7QUFBQSxTQUFBTyxnQ0FBQTtFQUFBQSwrQkFBQSxHQUFBUixpQkFBQSxjQUFBakQsWUFBQSxHQUFBc0MsQ0FBQSxDQUE3QyxTQUFBb0IsUUFBK0NDLGNBQWMsRUFBRUMsTUFBTTtJQUFBLElBQUFDLElBQUEsRUFBQUMsR0FBQSxFQUFBQyxJQUFBLEVBQUFDLEVBQUE7SUFBQSxPQUFBaEUsWUFBQSxHQUFBcUMsQ0FBQSxXQUFBNEIsUUFBQTtNQUFBLGtCQUFBQSxRQUFBLENBQUEvQyxDQUFBLEdBQUErQyxRQUFBLENBQUE1RCxDQUFBO1FBQUE7VUFBQSxNQUMvRCxDQUFDc0QsY0FBYyxJQUFJLE9BQU9BLGNBQWMsQ0FBQ08sNEJBQTRCLEtBQUssVUFBVTtZQUFBRCxRQUFBLENBQUE1RCxDQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUE0RCxRQUFBLENBQUEzQyxDQUFBLElBQVMsS0FBSztRQUFBO1VBQ2hHdUMsSUFBSSxHQUFHTSxNQUFNLENBQUNQLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQ1EsSUFBSSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7VUFBQSxJQUN2RFIsSUFBSTtZQUFBSSxRQUFBLENBQUE1RCxDQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUE0RCxRQUFBLENBQUEzQyxDQUFBLElBQVMsS0FBSztRQUFBO1VBQUEyQyxRQUFBLENBQUEvQyxDQUFBO1VBQUErQyxRQUFBLENBQUE1RCxDQUFBO1VBQUEsT0FHVGlFLEtBQUssSUFBQUMsTUFBQSxDQUFJVixJQUFJLG9CQUFpQjtZQUN4Q1csTUFBTSxFQUFFLE1BQU07WUFDZEMsT0FBTyxFQUFFO2NBQUUsY0FBYyxFQUFFLGtCQUFrQjtjQUFFQyxNQUFNLEVBQUU7WUFBbUIsQ0FBQztZQUMzRVgsSUFBSSxFQUFFWSxJQUFJLENBQUNDLFNBQVMsQ0FBQztjQUFFQyxPQUFPLEVBQUUsS0FBSztjQUFFQyxFQUFFLEVBQUUsQ0FBQztjQUFFTixNQUFNLEVBQUUsa0JBQWtCO2NBQUVPLE1BQU0sRUFBRTtZQUFHLENBQUM7VUFDeEYsQ0FBQyxDQUFDO1FBQUE7VUFKRmpCLEdBQUcsR0FBQUcsUUFBQSxDQUFBNUMsQ0FBQTtVQUFBNEMsUUFBQSxDQUFBNUQsQ0FBQTtVQUFBO1FBQUE7VUFBQTRELFFBQUEsQ0FBQS9DLENBQUE7VUFBQThDLEVBQUEsR0FBQUMsUUFBQSxDQUFBNUMsQ0FBQTtVQUFBLE9BQUE0QyxRQUFBLENBQUEzQyxDQUFBLElBTUksS0FBSztRQUFBO1VBQUEyQyxRQUFBLENBQUE1RCxDQUFBO1VBQUEsT0FFS3lELEdBQUcsQ0FBQ2tCLElBQUksQ0FBQyxDQUFDLFNBQU0sQ0FBQztZQUFBLE9BQU0sSUFBSTtVQUFBLEVBQUM7UUFBQTtVQUF6Q2pCLElBQUksR0FBQUUsUUFBQSxDQUFBNUMsQ0FBQTtVQUFBLE1BQ04sQ0FBQzBDLElBQUksSUFBSUEsSUFBSSxDQUFDa0IsTUFBTSxJQUFJLElBQUk7WUFBQWhCLFFBQUEsQ0FBQTVELENBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQTRELFFBQUEsQ0FBQTNDLENBQUEsSUFBUyxLQUFLO1FBQUE7VUFBQSxPQUFBMkMsUUFBQSxDQUFBM0MsQ0FBQSxJQUN2QyxDQUFDLENBQUNxQyxjQUFjLENBQUNPLDRCQUE0QixDQUFDSCxJQUFJLENBQUNrQixNQUFNLENBQUM7TUFBQTtJQUFBLEdBQUF2QixPQUFBO0VBQUEsQ0FDbEU7RUFBQSxPQUFBRCwrQkFBQSxDQUFBTixLQUFBLE9BQUFELFNBQUE7QUFBQTtBQUVEZ0MsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFBRTdCLDhCQUE4QixFQUE5QkE7QUFBK0IsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2h5ZHJhdGVIdWJOZXR3b3JrU3RhdHVzVmlhSHR0cC5qcz9hZThjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBXaGVuIHRoZSBXZWJTb2NrZXQgaXMgc2xvdywgcHVsbCB7QGxpbmsgR2V0TmV0d29ya1N0YXR1c30gb3ZlciBzYW1lLW9yaWdpbiBIVFRQIEpTT04tUlBDXG4gKiBhbmQgbWVyZ2UgaW50byBCcmlkZ2Ugc3RhdGUgKGRpc3BhdGNoZXMgYG5ldHdvcmtTdGF0dXNVcGRhdGVgIGxpa2UgdGhlIFdTIHBhdGgpLlxuICpcbiAqIEBwYXJhbSB7eyBhcHBseUh1Yk5ldHdvcmtTdGF0dXNQYXlsb2FkPzogKHJlc3VsdDogb2JqZWN0KSA9PiBib29sZWFuIH19IGJyaWRnZUluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luIC0gZS5nLiBgd2luZG93LmxvY2F0aW9uLm9yaWdpbmBcbiAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSB3aGV0aGVyIHBheWxvYWQgd2FzIGFwcGxpZWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUh1Yk5ldHdvcmtTdGF0dXNWaWFIdHRwIChicmlkZ2VJbnN0YW5jZSwgb3JpZ2luKSB7XG4gIGlmICghYnJpZGdlSW5zdGFuY2UgfHwgdHlwZW9mIGJyaWRnZUluc3RhbmNlLmFwcGx5SHViTmV0d29ya1N0YXR1c1BheWxvYWQgIT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgcm9vdCA9IFN0cmluZyhvcmlnaW4gfHwgJycpLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgaWYgKCFyb290KSByZXR1cm4gZmFsc2U7XG4gIGxldCByZXM7XG4gIHRyeSB7XG4gICAgcmVzID0gYXdhaXQgZmV0Y2goYCR7cm9vdH0vc2VydmljZXMvcnBjYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGpzb25ycGM6ICcyLjAnLCBpZDogMSwgbWV0aG9kOiAnR2V0TmV0d29ya1N0YXR1cycsIHBhcmFtczogW10gfSlcbiAgICB9KTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBib2R5ID0gYXdhaXQgcmVzLmpzb24oKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgaWYgKCFib2R5IHx8IGJvZHkucmVzdWx0ID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICEhYnJpZGdlSW5zdGFuY2UuYXBwbHlIdWJOZXR3b3JrU3RhdHVzUGF5bG9hZChib2R5LnJlc3VsdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBoeWRyYXRlSHViTmV0d29ya1N0YXR1c1ZpYUh0dHAgfTtcbiJdLCJuYW1lcyI6WyJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJTeW1ib2wiLCJuIiwiaXRlcmF0b3IiLCJvIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsInByb3RvdHlwZSIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsImh5ZHJhdGVIdWJOZXR3b3JrU3RhdHVzVmlhSHR0cCIsIl94IiwiX3gyIiwiX2h5ZHJhdGVIdWJOZXR3b3JrU3RhdHVzVmlhSHR0cCIsIl9jYWxsZWUiLCJicmlkZ2VJbnN0YW5jZSIsIm9yaWdpbiIsInJvb3QiLCJyZXMiLCJib2R5IiwiX3QiLCJfY29udGV4dCIsImFwcGx5SHViTmV0d29ya1N0YXR1c1BheWxvYWQiLCJTdHJpbmciLCJ0cmltIiwicmVwbGFjZSIsImZldGNoIiwiY29uY2F0IiwibWV0aG9kIiwiaGVhZGVycyIsIkFjY2VwdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJqc29ucnBjIiwiaWQiLCJwYXJhbXMiLCJqc29uIiwicmVzdWx0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/hydrateHubNetworkStatusViaHttp.js\n\n}')},"./functions/identityCrossSign.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/** Re-export canonical IdentityCrossSign strings from `@fabric/core`. */\nmodule.exports = __webpack_require__(/*! @fabric/core/functions/identityCrossSign */ "./node_modules/@fabric/core/functions/identityCrossSign.js");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvaWRlbnRpdHlDcm9zc1NpZ24uanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQUEsa0pBQW9FIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvaWRlbnRpdHlDcm9zc1NpZ24uanM/YjEyZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKiBSZS1leHBvcnQgY2Fub25pY2FsIElkZW50aXR5Q3Jvc3NTaWduIHN0cmluZ3MgZnJvbSBgQGZhYnJpYy9jb3JlYC4gKi9cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9pZGVudGl0eUNyb3NzU2lnbicpO1xuIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJyZXF1aXJlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/identityCrossSign.js\n\n}')},"./functions/identityCrossSignVerify.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/** Re-export IdentityCrossSign Schnorr from `@fabric/core`. */\nmodule.exports = __webpack_require__(/*! @fabric/core/functions/identityCrossSignVerify */ "./node_modules/@fabric/core/functions/identityCrossSignVerify.js");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvaWRlbnRpdHlDcm9zc1NpZ25WZXJpZnkuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQUEsOEpBQTBFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvaWRlbnRpdHlDcm9zc1NpZ25WZXJpZnkuanM/OTAwMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKiBSZS1leHBvcnQgSWRlbnRpdHlDcm9zc1NpZ24gU2Nobm9yciBmcm9tIGBAZmFicmljL2NvcmVgLiAqL1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdAZmFicmljL2NvcmUvZnVuY3Rpb25zL2lkZW50aXR5Q3Jvc3NTaWduVmVyaWZ5Jyk7XG4iXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInJlcXVpcmUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/identityCrossSignVerify.js\n\n}')},"./functions/inAppNotificationOpenHref.js"(module){"use strict";eval("{\n\n/**\n * Hide deep links when the matching Bitcoin sub-flag is off (avoids redirect-to-home).\n * @param {string|null|undefined} href\n * @param {Record} uf\n * @returns {string|null}\n */\nfunction inAppNotificationOpenHref(href, uf) {\n if (!href || !uf) return href || null;\n var h = String(href);\n var path = h.split(/[?#]/)[0];\n if (path === '/services/bitcoin') return href;\n if (path.startsWith('/payments') || path.startsWith('/services/bitcoin/payments')) {\n return uf.bitcoinPayments ? href : null;\n }\n if (path.startsWith('/services/bitcoin/invoices')) return uf.bitcoinInvoices ? href : null;\n if (path.startsWith('/services/bitcoin/resources')) return uf.bitcoinResources ? href : null;\n if (path.startsWith('/services/bitcoin/blocks') || path.startsWith('/services/bitcoin/transactions')) {\n return uf.bitcoinExplorer ? href : null;\n }\n if (path.startsWith('/services/bitcoin/channels')) return uf.bitcoinLightning ? href : null;\n if (path.startsWith('/services/bitcoin/crowdfunding') || path.startsWith('/services/bitcoin/crowdfunds')) {\n return uf.bitcoinCrowdfund ? href : null;\n }\n if (path.startsWith('/services/bitcoin/')) return href;\n return href;\n}\nmodule.exports = {\n inAppNotificationOpenHref: inAppNotificationOpenHref\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvaW5BcHBOb3RpZmljYXRpb25PcGVuSHJlZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSx5QkFBeUJBLENBQUVDLElBQUksRUFBRUMsRUFBRSxFQUFFO0VBQzVDLElBQUksQ0FBQ0QsSUFBSSxJQUFJLENBQUNDLEVBQUUsRUFBRSxPQUFPRCxJQUFJLElBQUksSUFBSTtFQUNyQyxJQUFNRSxDQUFDLEdBQUdDLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDO0VBQ3RCLElBQU1JLElBQUksR0FBR0YsQ0FBQyxDQUFDRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQy9CLElBQUlELElBQUksS0FBSyxtQkFBbUIsRUFBRSxPQUFPSixJQUFJO0VBQzdDLElBQUlJLElBQUksQ0FBQ0UsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJRixJQUFJLENBQUNFLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFO0lBQ2pGLE9BQU9MLEVBQUUsQ0FBQ00sZUFBZSxHQUFHUCxJQUFJLEdBQUcsSUFBSTtFQUN6QztFQUNBLElBQUlJLElBQUksQ0FBQ0UsVUFBVSxDQUFDLDRCQUE0QixDQUFDLEVBQUUsT0FBT0wsRUFBRSxDQUFDTyxlQUFlLEdBQUdSLElBQUksR0FBRyxJQUFJO0VBQzFGLElBQUlJLElBQUksQ0FBQ0UsVUFBVSxDQUFDLDZCQUE2QixDQUFDLEVBQUUsT0FBT0wsRUFBRSxDQUFDUSxnQkFBZ0IsR0FBR1QsSUFBSSxHQUFHLElBQUk7RUFDNUYsSUFBSUksSUFBSSxDQUFDRSxVQUFVLENBQUMsMEJBQTBCLENBQUMsSUFBSUYsSUFBSSxDQUFDRSxVQUFVLENBQUMsZ0NBQWdDLENBQUMsRUFBRTtJQUNwRyxPQUFPTCxFQUFFLENBQUNTLGVBQWUsR0FBR1YsSUFBSSxHQUFHLElBQUk7RUFDekM7RUFDQSxJQUFJSSxJQUFJLENBQUNFLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLE9BQU9MLEVBQUUsQ0FBQ1UsZ0JBQWdCLEdBQUdYLElBQUksR0FBRyxJQUFJO0VBQzNGLElBQUlJLElBQUksQ0FBQ0UsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLElBQUlGLElBQUksQ0FBQ0UsVUFBVSxDQUFDLDhCQUE4QixDQUFDLEVBQUU7SUFDeEcsT0FBT0wsRUFBRSxDQUFDVyxnQkFBZ0IsR0FBR1osSUFBSSxHQUFHLElBQUk7RUFDMUM7RUFDQSxJQUFJSSxJQUFJLENBQUNFLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLE9BQU9OLElBQUk7RUFDdEQsT0FBT0EsSUFBSTtBQUNiO0FBRUFhLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQUVmLHlCQUF5QixFQUF6QkE7QUFBMEIsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2luQXBwTm90aWZpY2F0aW9uT3BlbkhyZWYuanM/NDViYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogSGlkZSBkZWVwIGxpbmtzIHdoZW4gdGhlIG1hdGNoaW5nIEJpdGNvaW4gc3ViLWZsYWcgaXMgb2ZmIChhdm9pZHMgcmVkaXJlY3QtdG8taG9tZSkuXG4gKiBAcGFyYW0ge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gaHJlZlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBib29sZWFuPn0gdWZcbiAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH1cbiAqL1xuZnVuY3Rpb24gaW5BcHBOb3RpZmljYXRpb25PcGVuSHJlZiAoaHJlZiwgdWYpIHtcbiAgaWYgKCFocmVmIHx8ICF1ZikgcmV0dXJuIGhyZWYgfHwgbnVsbDtcbiAgY29uc3QgaCA9IFN0cmluZyhocmVmKTtcbiAgY29uc3QgcGF0aCA9IGguc3BsaXQoL1s/I10vKVswXTtcbiAgaWYgKHBhdGggPT09ICcvc2VydmljZXMvYml0Y29pbicpIHJldHVybiBocmVmO1xuICBpZiAocGF0aC5zdGFydHNXaXRoKCcvcGF5bWVudHMnKSB8fCBwYXRoLnN0YXJ0c1dpdGgoJy9zZXJ2aWNlcy9iaXRjb2luL3BheW1lbnRzJykpIHtcbiAgICByZXR1cm4gdWYuYml0Y29pblBheW1lbnRzID8gaHJlZiA6IG51bGw7XG4gIH1cbiAgaWYgKHBhdGguc3RhcnRzV2l0aCgnL3NlcnZpY2VzL2JpdGNvaW4vaW52b2ljZXMnKSkgcmV0dXJuIHVmLmJpdGNvaW5JbnZvaWNlcyA/IGhyZWYgOiBudWxsO1xuICBpZiAocGF0aC5zdGFydHNXaXRoKCcvc2VydmljZXMvYml0Y29pbi9yZXNvdXJjZXMnKSkgcmV0dXJuIHVmLmJpdGNvaW5SZXNvdXJjZXMgPyBocmVmIDogbnVsbDtcbiAgaWYgKHBhdGguc3RhcnRzV2l0aCgnL3NlcnZpY2VzL2JpdGNvaW4vYmxvY2tzJykgfHwgcGF0aC5zdGFydHNXaXRoKCcvc2VydmljZXMvYml0Y29pbi90cmFuc2FjdGlvbnMnKSkge1xuICAgIHJldHVybiB1Zi5iaXRjb2luRXhwbG9yZXIgPyBocmVmIDogbnVsbDtcbiAgfVxuICBpZiAocGF0aC5zdGFydHNXaXRoKCcvc2VydmljZXMvYml0Y29pbi9jaGFubmVscycpKSByZXR1cm4gdWYuYml0Y29pbkxpZ2h0bmluZyA/IGhyZWYgOiBudWxsO1xuICBpZiAocGF0aC5zdGFydHNXaXRoKCcvc2VydmljZXMvYml0Y29pbi9jcm93ZGZ1bmRpbmcnKSB8fCBwYXRoLnN0YXJ0c1dpdGgoJy9zZXJ2aWNlcy9iaXRjb2luL2Nyb3dkZnVuZHMnKSkge1xuICAgIHJldHVybiB1Zi5iaXRjb2luQ3Jvd2RmdW5kID8gaHJlZiA6IG51bGw7XG4gIH1cbiAgaWYgKHBhdGguc3RhcnRzV2l0aCgnL3NlcnZpY2VzL2JpdGNvaW4vJykpIHJldHVybiBocmVmO1xuICByZXR1cm4gaHJlZjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IGluQXBwTm90aWZpY2F0aW9uT3BlbkhyZWYgfTtcbiJdLCJuYW1lcyI6WyJpbkFwcE5vdGlmaWNhdGlvbk9wZW5IcmVmIiwiaHJlZiIsInVmIiwiaCIsIlN0cmluZyIsInBhdGgiLCJzcGxpdCIsInN0YXJ0c1dpdGgiLCJiaXRjb2luUGF5bWVudHMiLCJiaXRjb2luSW52b2ljZXMiLCJiaXRjb2luUmVzb3VyY2VzIiwiYml0Y29pbkV4cGxvcmVyIiwiYml0Y29pbkxpZ2h0bmluZyIsImJpdGNvaW5Dcm93ZGZ1bmQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/inAppNotificationOpenHref.js\n\n}")},"./functions/inventoryHtlc.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n/**\n * Canonical implementation: `@fabric/core/functions/inventoryHtlc`.\n * Local path kept so existing `require('../functions/inventoryHtlc')` continues to work.\n */\nmodule.exports = __webpack_require__(/*! @fabric/core/functions/inventoryHtlc */ \"./node_modules/@fabric/core/functions/inventoryHtlc.js\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvaW52ZW50b3J5SHRsYy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUVBQSwwSUFBZ0UiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9pbnZlbnRvcnlIdGxjLmpzP2UzNWMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbm9uaWNhbCBpbXBsZW1lbnRhdGlvbjogYEBmYWJyaWMvY29yZS9mdW5jdGlvbnMvaW52ZW50b3J5SHRsY2AuXG4gKiBMb2NhbCBwYXRoIGtlcHQgc28gZXhpc3RpbmcgYHJlcXVpcmUoJy4uL2Z1bmN0aW9ucy9pbnZlbnRvcnlIdGxjJylgIGNvbnRpbnVlcyB0byB3b3JrLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnQGZhYnJpYy9jb3JlL2Z1bmN0aW9ucy9pbnZlbnRvcnlIdGxjJyk7XG4iXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInJlcXVpcmUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/inventoryHtlc.js\n\n}")},"./functions/invoiceStore.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nvar Actor = __webpack_require__(/*! @fabric/core/types/actor */ "./node_modules/@fabric/core/types/actor.js");\nvar _require = __webpack_require__(/*! ./fabricBrowserStore */ "./functions/fabricBrowserStore.js"),\n createFabricBrowserStore = _require.createFabricBrowserStore;\nvar INVOICES_KEY = \'fabric.bitcoin.invoices\';\nvar FABRIC_STATE_KEY = \'fabric:state\';\nfunction getStore() {\n return createFabricBrowserStore({\n storageKey: FABRIC_STATE_KEY,\n initialState: {\n invoices: []\n }\n });\n}\n\n/**\n * Load all invoices from localStorage. Not in global state.\n * @returns {Array<{id:string,address:string,amountSats:number,memo?:string,label?:string,createdAt:string,network?:string}>}\n */\nfunction loadInvoices() {\n try {\n if (typeof window === \'undefined\' || !window.localStorage) return [];\n var store = getStore();\n var unified = store.GET(\'/invoices\');\n if (Array.isArray(unified)) {\n return unified.map(function (inv) {\n return _objectSpread(_objectSpread({}, inv), {}, {\n txids: Array.isArray(inv.txids) ? inv.txids : []\n });\n });\n }\n var raw = window.localStorage.getItem(INVOICES_KEY);\n if (!raw) return [];\n var parsed = JSON.parse(raw);\n if (!Array.isArray(parsed)) return [];\n var migrated = parsed.map(function (inv) {\n return _objectSpread(_objectSpread({}, inv), {}, {\n txids: Array.isArray(inv.txids) ? inv.txids : []\n });\n });\n store.PUT(\'/invoices\', migrated);\n return migrated;\n } catch (e) {\n return [];\n }\n}\n\n/**\n * Save invoices to localStorage.\n * @param {Array} invoices\n */\nfunction saveInvoices() {\n var invoices = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n try {\n if (typeof window !== \'undefined\' && window.localStorage) {\n var normalized = Array.isArray(invoices) ? invoices : [];\n getStore().PUT(\'/invoices\', normalized);\n // Keep legacy key for compatibility with older builds.\n window.localStorage.setItem(INVOICES_KEY, JSON.stringify(normalized));\n }\n } catch (e) {}\n}\n\n/**\n * Create a new invoice and store it locally.\n * @param {{address:string,amountSats:number,memo?:string,label?:string,network?:string}} invoice\n * @returns {{id:string,...}} The stored invoice with id\n */\nfunction createInvoice() {\n var invoice = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var address = String(invoice.address || \'\').trim();\n var amountSats = Number(invoice.amountSats || 0);\n if (!address || !Number.isFinite(amountSats) || amountSats <= 0) return null;\n var id = "inv_".concat(new Actor({\n type: \'HubEphemeralId\',\n purpose: \'fabric.bitcoin.invoice\',\n nonce: Actor.randomBytes(8).toString(\'hex\'),\n at: new Date().toISOString()\n }).id);\n var entry = {\n id: id,\n address: address,\n amountSats: amountSats,\n memo: String(invoice.memo || \'\').trim(),\n label: String(invoice.label || \'\').trim(),\n createdAt: new Date().toISOString(),\n network: String(invoice.network || \'regtest\').toLowerCase(),\n txids: []\n };\n var list = loadInvoices();\n list.unshift(entry);\n saveInvoices(list);\n return entry;\n}\n\n/**\n * Delete an invoice by id.\n * @param {string} id\n * @returns {boolean} true if removed\n */\nfunction deleteInvoice(id) {\n var before = loadInvoices();\n var list = before.filter(function (inv) {\n return inv.id !== id;\n });\n if (list.length === before.length) return false;\n saveInvoices(list);\n return true;\n}\n\n/**\n * Get a single invoice by id.\n * @param {string} id\n * @returns {Object|null}\n */\nfunction getInvoice(id) {\n return loadInvoices().find(function (inv) {\n return inv.id === id;\n }) || null;\n}\n\n/**\n * Record a payment (txid) on an invoice. Appends to txids array.\n * @param {string} id - Invoice id\n * @param {string} txid - Transaction ID of the payment\n * @returns {boolean} true if updated\n */\nfunction addPaymentToInvoice(id, txid) {\n var txidStr = String(txid || \'\').trim();\n if (!txidStr) return false;\n var list = loadInvoices();\n var inv = list.find(function (i) {\n return i.id === id;\n });\n if (!inv) return false;\n var txids = Array.isArray(inv.txids) ? _toConsumableArray(inv.txids) : [];\n if (txids.includes(txidStr)) return true; // already recorded\n txids.push(txidStr);\n inv.txids = txids;\n saveInvoices(list);\n return true;\n}\nmodule.exports = {\n loadInvoices: loadInvoices,\n saveInvoices: saveInvoices,\n createInvoice: createInvoice,\n deleteInvoice: deleteInvoice,\n getInvoice: getInvoice,\n addPaymentToInvoice: addPaymentToInvoice\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZS5qcz80ODUwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgQWN0b3IgPSByZXF1aXJlKCdAZmFicmljL2NvcmUvdHlwZXMvYWN0b3InKTtcbmNvbnN0IHsgY3JlYXRlRmFicmljQnJvd3NlclN0b3JlIH0gPSByZXF1aXJlKCcuL2ZhYnJpY0Jyb3dzZXJTdG9yZScpO1xuXG5jb25zdCBJTlZPSUNFU19LRVkgPSAnZmFicmljLmJpdGNvaW4uaW52b2ljZXMnO1xuY29uc3QgRkFCUklDX1NUQVRFX0tFWSA9ICdmYWJyaWM6c3RhdGUnO1xuXG5mdW5jdGlvbiBnZXRTdG9yZSAoKSB7XG4gIHJldHVybiBjcmVhdGVGYWJyaWNCcm93c2VyU3RvcmUoe1xuICAgIHN0b3JhZ2VLZXk6IEZBQlJJQ19TVEFURV9LRVksXG4gICAgaW5pdGlhbFN0YXRlOiB7IGludm9pY2VzOiBbXSB9XG4gIH0pO1xufVxuXG4vKipcbiAqIExvYWQgYWxsIGludm9pY2VzIGZyb20gbG9jYWxTdG9yYWdlLiBOb3QgaW4gZ2xvYmFsIHN0YXRlLlxuICogQHJldHVybnMge0FycmF5PHtpZDpzdHJpbmcsYWRkcmVzczpzdHJpbmcsYW1vdW50U2F0czpudW1iZXIsbWVtbz86c3RyaW5nLGxhYmVsPzpzdHJpbmcsY3JlYXRlZEF0OnN0cmluZyxuZXR3b3JrPzpzdHJpbmd9Pn1cbiAqL1xuZnVuY3Rpb24gbG9hZEludm9pY2VzICgpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIXdpbmRvdy5sb2NhbFN0b3JhZ2UpIHJldHVybiBbXTtcbiAgICBjb25zdCBzdG9yZSA9IGdldFN0b3JlKCk7XG4gICAgY29uc3QgdW5pZmllZCA9IHN0b3JlLkdFVCgnL2ludm9pY2VzJyk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodW5pZmllZCkpIHtcbiAgICAgIHJldHVybiB1bmlmaWVkLm1hcCgoaW52KSA9PiAoe1xuICAgICAgICAuLi5pbnYsXG4gICAgICAgIHR4aWRzOiBBcnJheS5pc0FycmF5KGludi50eGlkcykgPyBpbnYudHhpZHMgOiBbXVxuICAgICAgfSkpO1xuICAgIH1cbiAgICBjb25zdCByYXcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oSU5WT0lDRVNfS0VZKTtcbiAgICBpZiAoIXJhdykgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyc2VkKSkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IG1pZ3JhdGVkID0gcGFyc2VkLm1hcCgoaW52KSA9PiAoe1xuICAgICAgLi4uaW52LFxuICAgICAgdHhpZHM6IEFycmF5LmlzQXJyYXkoaW52LnR4aWRzKSA/IGludi50eGlkcyA6IFtdXG4gICAgfSkpO1xuICAgIHN0b3JlLlBVVCgnL2ludm9pY2VzJywgbWlncmF0ZWQpO1xuICAgIHJldHVybiBtaWdyYXRlZDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG4vKipcbiAqIFNhdmUgaW52b2ljZXMgdG8gbG9jYWxTdG9yYWdlLlxuICogQHBhcmFtIHtBcnJheX0gaW52b2ljZXNcbiAqL1xuZnVuY3Rpb24gc2F2ZUludm9pY2VzIChpbnZvaWNlcyA9IFtdKSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBBcnJheS5pc0FycmF5KGludm9pY2VzKSA/IGludm9pY2VzIDogW107XG4gICAgICBnZXRTdG9yZSgpLlBVVCgnL2ludm9pY2VzJywgbm9ybWFsaXplZCk7XG4gICAgICAvLyBLZWVwIGxlZ2FjeSBrZXkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBidWlsZHMuXG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oSU5WT0lDRVNfS0VZLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkKSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnZvaWNlIGFuZCBzdG9yZSBpdCBsb2NhbGx5LlxuICogQHBhcmFtIHt7YWRkcmVzczpzdHJpbmcsYW1vdW50U2F0czpudW1iZXIsbWVtbz86c3RyaW5nLGxhYmVsPzpzdHJpbmcsbmV0d29yaz86c3RyaW5nfX0gaW52b2ljZVxuICogQHJldHVybnMge3tpZDpzdHJpbmcsLi4ufX0gVGhlIHN0b3JlZCBpbnZvaWNlIHdpdGggaWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW52b2ljZSAoaW52b2ljZSA9IHt9KSB7XG4gIGNvbnN0IGFkZHJlc3MgPSBTdHJpbmcoaW52b2ljZS5hZGRyZXNzIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGFtb3VudFNhdHMgPSBOdW1iZXIoaW52b2ljZS5hbW91bnRTYXRzIHx8IDApO1xuICBpZiAoIWFkZHJlc3MgfHwgIU51bWJlci5pc0Zpbml0ZShhbW91bnRTYXRzKSB8fCBhbW91bnRTYXRzIDw9IDApIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGlkID0gYGludl8ke25ldyBBY3Rvcih7XG4gICAgdHlwZTogJ0h1YkVwaGVtZXJhbElkJyxcbiAgICBwdXJwb3NlOiAnZmFicmljLmJpdGNvaW4uaW52b2ljZScsXG4gICAgbm9uY2U6IEFjdG9yLnJhbmRvbUJ5dGVzKDgpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIH0pLmlkfWA7XG4gIGNvbnN0IGVudHJ5ID0ge1xuICAgIGlkLFxuICAgIGFkZHJlc3MsXG4gICAgYW1vdW50U2F0cyxcbiAgICBtZW1vOiBTdHJpbmcoaW52b2ljZS5tZW1vIHx8ICcnKS50cmltKCksXG4gICAgbGFiZWw6IFN0cmluZyhpbnZvaWNlLmxhYmVsIHx8ICcnKS50cmltKCksXG4gICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgbmV0d29yazogU3RyaW5nKGludm9pY2UubmV0d29yayB8fCAncmVndGVzdCcpLnRvTG93ZXJDYXNlKCksXG4gICAgdHhpZHM6IFtdXG4gIH07XG5cbiAgY29uc3QgbGlzdCA9IGxvYWRJbnZvaWNlcygpO1xuICBsaXN0LnVuc2hpZnQoZW50cnkpO1xuICBzYXZlSW52b2ljZXMobGlzdCk7XG4gIHJldHVybiBlbnRyeTtcbn1cblxuLyoqXG4gKiBEZWxldGUgYW4gaW52b2ljZSBieSBpZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgcmVtb3ZlZFxuICovXG5mdW5jdGlvbiBkZWxldGVJbnZvaWNlIChpZCkge1xuICBjb25zdCBiZWZvcmUgPSBsb2FkSW52b2ljZXMoKTtcbiAgY29uc3QgbGlzdCA9IGJlZm9yZS5maWx0ZXIoKGludikgPT4gaW52LmlkICE9PSBpZCk7XG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gYmVmb3JlLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBzYXZlSW52b2ljZXMobGlzdCk7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEdldCBhIHNpbmdsZSBpbnZvaWNlIGJ5IGlkLlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKiBAcmV0dXJucyB7T2JqZWN0fG51bGx9XG4gKi9cbmZ1bmN0aW9uIGdldEludm9pY2UgKGlkKSB7XG4gIHJldHVybiBsb2FkSW52b2ljZXMoKS5maW5kKChpbnYpID0+IGludi5pZCA9PT0gaWQpIHx8IG51bGw7XG59XG5cbi8qKlxuICogUmVjb3JkIGEgcGF5bWVudCAodHhpZCkgb24gYW4gaW52b2ljZS4gQXBwZW5kcyB0byB0eGlkcyBhcnJheS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIEludm9pY2UgaWRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eGlkIC0gVHJhbnNhY3Rpb24gSUQgb2YgdGhlIHBheW1lbnRcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHVwZGF0ZWRcbiAqL1xuZnVuY3Rpb24gYWRkUGF5bWVudFRvSW52b2ljZSAoaWQsIHR4aWQpIHtcbiAgY29uc3QgdHhpZFN0ciA9IFN0cmluZyh0eGlkIHx8ICcnKS50cmltKCk7XG4gIGlmICghdHhpZFN0cikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBsaXN0ID0gbG9hZEludm9pY2VzKCk7XG4gIGNvbnN0IGludiA9IGxpc3QuZmluZCgoaSkgPT4gaS5pZCA9PT0gaWQpO1xuICBpZiAoIWludikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB0eGlkcyA9IEFycmF5LmlzQXJyYXkoaW52LnR4aWRzKSA/IFsuLi5pbnYudHhpZHNdIDogW107XG4gIGlmICh0eGlkcy5pbmNsdWRlcyh0eGlkU3RyKSkgcmV0dXJuIHRydWU7IC8vIGFscmVhZHkgcmVjb3JkZWRcbiAgdHhpZHMucHVzaCh0eGlkU3RyKTtcbiAgaW52LnR4aWRzID0gdHhpZHM7XG4gIHNhdmVJbnZvaWNlcyhsaXN0KTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBsb2FkSW52b2ljZXMsXG4gIHNhdmVJbnZvaWNlcyxcbiAgY3JlYXRlSW52b2ljZSxcbiAgZGVsZXRlSW52b2ljZSxcbiAgZ2V0SW52b2ljZSxcbiAgYWRkUGF5bWVudFRvSW52b2ljZVxufTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIlR5cGVFcnJvciIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInQiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwiaXNBcnJheSIsImxlbmd0aCIsImUiLCJuIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiQWN0b3IiLCJyZXF1aXJlIiwiX3JlcXVpcmUiLCJjcmVhdGVGYWJyaWNCcm93c2VyU3RvcmUiLCJJTlZPSUNFU19LRVkiLCJGQUJSSUNfU1RBVEVfS0VZIiwiZ2V0U3RvcmUiLCJzdG9yYWdlS2V5IiwiaW5pdGlhbFN0YXRlIiwiaW52b2ljZXMiLCJsb2FkSW52b2ljZXMiLCJ3aW5kb3ciLCJsb2NhbFN0b3JhZ2UiLCJzdG9yZSIsInVuaWZpZWQiLCJHRVQiLCJtYXAiLCJpbnYiLCJ0eGlkcyIsInJhdyIsImdldEl0ZW0iLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJtaWdyYXRlZCIsIlBVVCIsInNhdmVJbnZvaWNlcyIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZWQiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiY3JlYXRlSW52b2ljZSIsImludm9pY2UiLCJhZGRyZXNzIiwidHJpbSIsImFtb3VudFNhdHMiLCJpc0Zpbml0ZSIsImlkIiwiY29uY2F0IiwidHlwZSIsInB1cnBvc2UiLCJub25jZSIsInJhbmRvbUJ5dGVzIiwiYXQiLCJEYXRlIiwidG9JU09TdHJpbmciLCJlbnRyeSIsIm1lbW8iLCJsYWJlbCIsImNyZWF0ZWRBdCIsIm5ldHdvcmsiLCJ0b0xvd2VyQ2FzZSIsImxpc3QiLCJ1bnNoaWZ0IiwiZGVsZXRlSW52b2ljZSIsImJlZm9yZSIsImdldEludm9pY2UiLCJmaW5kIiwiYWRkUGF5bWVudFRvSW52b2ljZSIsInR4aWQiLCJ0eGlkU3RyIiwiaW5jbHVkZXMiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./functions/invoiceStore.js\n\n}')},"./functions/isLikelyBip32ExtendedKey.js"(module){"use strict";eval("{\n\n/**\n * True when `str` looks like a BIP32 serialized extended public or private key (xpub/tpub/…).\n * Used to avoid treating these as Fabric peer route ids in Activity links and PeerView.\n */\nfunction isLikelyBip32ExtendedKey(str) {\n var s = String(str || '').trim();\n if (s.length < 28) return false;\n return /^[xyztu](pub|prv)[1-9A-HJ-NP-Za-km-z]+$/i.test(s);\n}\nmodule.exports = {\n isLikelyBip32ExtendedKey: isLikelyBip32ExtendedKey\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvaXNMaWtlbHlCaXAzMkV4dGVuZGVkS2V5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0Esd0JBQXdCQSxDQUFFQyxHQUFHLEVBQUU7RUFDdEMsSUFBTUMsQ0FBQyxHQUFHQyxNQUFNLENBQUNGLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQ0csSUFBSSxDQUFDLENBQUM7RUFDbEMsSUFBSUYsQ0FBQyxDQUFDRyxNQUFNLEdBQUcsRUFBRSxFQUFFLE9BQU8sS0FBSztFQUMvQixPQUFPLDBDQUEwQyxDQUFDQyxJQUFJLENBQUNKLENBQUMsQ0FBQztBQUMzRDtBQUVBSyxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUFFUix3QkFBd0IsRUFBeEJBO0FBQXlCLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9pc0xpa2VseUJpcDMyRXh0ZW5kZWRLZXkuanM/MWVkZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGBzdHJgIGxvb2tzIGxpa2UgYSBCSVAzMiBzZXJpYWxpemVkIGV4dGVuZGVkIHB1YmxpYyBvciBwcml2YXRlIGtleSAoeHB1Yi90cHViL+KApikuXG4gKiBVc2VkIHRvIGF2b2lkIHRyZWF0aW5nIHRoZXNlIGFzIEZhYnJpYyBwZWVyIHJvdXRlIGlkcyBpbiBBY3Rpdml0eSBsaW5rcyBhbmQgUGVlclZpZXcuXG4gKi9cbmZ1bmN0aW9uIGlzTGlrZWx5QmlwMzJFeHRlbmRlZEtleSAoc3RyKSB7XG4gIGNvbnN0IHMgPSBTdHJpbmcoc3RyIHx8ICcnKS50cmltKCk7XG4gIGlmIChzLmxlbmd0aCA8IDI4KSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAvXlt4eXp0dV0ocHVifHBydilbMS05QS1ISi1OUC1aYS1rbS16XSskL2kudGVzdChzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IGlzTGlrZWx5QmlwMzJFeHRlbmRlZEtleSB9O1xuIl0sIm5hbWVzIjpbImlzTGlrZWx5QmlwMzJFeHRlbmRlZEtleSIsInN0ciIsInMiLCJTdHJpbmciLCJ0cmltIiwibGVuZ3RoIiwidGVzdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/isLikelyBip32ExtendedKey.js\n\n}")},"./functions/joinmarketPoolPreferences.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n/**\n * Browser-local Joinmarket liquidity pool targets (BTC). Three tiers from largest to smallest.\n * Used as operator reference for staging hub-wallet UTXOs / ACP-friendly chunk sizes — not enforced on-chain.\n */\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ "./functions/fabricBrowserState.js"),\n readStorageJSON = _require.readStorageJSON,\n writeStorageJSON = _require.writeStorageJSON;\nvar _require2 = __webpack_require__(/*! ../constants */ "./constants.js"),\n SATS_PER_BTC = _require2.SATS_PER_BTC,\n MAX_BTC_SUPPLY = _require2.BITCOIN_MAX_SUPPLY_BTC,\n STORAGE_KEY = _require2.JOINMARKET_POOL_SIZES_STORAGE_KEY;\n\n/** Default pools: 0.05 → 0.005 → 0.0005 BTC */\nvar DEFAULT_POOLS_BTC = Object.freeze([0.05, 0.005, 1 / 2000]);\nvar LABELS = Object.freeze([\'Pool A (largest)\', \'Pool B\', \'Pool C (smallest)\']);\n\n/**\n * @returns {number[]} three positive BTC amounts\n */\nfunction loadJoinmarketPoolSizesBtc() {\n if (typeof window === \'undefined\') return _toConsumableArray(DEFAULT_POOLS_BTC);\n try {\n var parsed = readStorageJSON(STORAGE_KEY, null);\n if (!parsed) return _toConsumableArray(DEFAULT_POOLS_BTC);\n if (!Array.isArray(parsed) || parsed.length !== 3) return _toConsumableArray(DEFAULT_POOLS_BTC);\n var out = [];\n for (var i = 0; i < 3; i++) {\n var n = Number(parsed[i]);\n var d = DEFAULT_POOLS_BTC[i];\n if (!Number.isFinite(n) || n <= 0 || n > MAX_BTC_SUPPLY) out.push(d);else out.push(n);\n }\n return out;\n } catch (e) {\n return _toConsumableArray(DEFAULT_POOLS_BTC);\n }\n}\n\n/**\n * @param {number[]} pools - must be length 3, positive BTC\n * @returns {number[]} normalized pools (always length 3)\n */\nfunction saveJoinmarketPoolSizesBtc(pools) {\n var base = Array.isArray(pools) ? pools : [];\n var next = [];\n for (var i = 0; i < 3; i++) {\n var n = Number(base[i]);\n var d = DEFAULT_POOLS_BTC[i];\n if (!Number.isFinite(n) || n <= 0 || n > MAX_BTC_SUPPLY) next.push(d);else next.push(n);\n }\n if (typeof window !== \'undefined\') {\n try {\n writeStorageJSON(STORAGE_KEY, next);\n } catch (e) {}\n }\n return next;\n}\nfunction poolLabels() {\n return _toConsumableArray(LABELS);\n}\nfunction btcToSats(btc) {\n var n = Number(btc);\n if (!Number.isFinite(n) || n <= 0) return 0;\n return Math.round(n * SATS_PER_BTC);\n}\nmodule.exports = {\n STORAGE_KEY: STORAGE_KEY,\n DEFAULT_POOLS_BTC: DEFAULT_POOLS_BTC,\n loadJoinmarketPoolSizesBtc: loadJoinmarketPoolSizesBtc,\n saveJoinmarketPoolSizesBtc: saveJoinmarketPoolSizesBtc,\n poolLabels: poolLabels,\n btcToSats: btcToSats\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvam9pbm1hcmtldFBvb2xQcmVmZXJlbmNlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUhBLFNBQUFBLG1CQUFBQyxDQUFBLFdBQUFDLGtCQUFBLENBQUFELENBQUEsS0FBQUUsZ0JBQUEsQ0FBQUYsQ0FBQSxLQUFBRywyQkFBQSxDQUFBSCxDQUFBLEtBQUFJLGtCQUFBO0FBQUEsU0FBQUEsbUJBQUEsY0FBQUMsU0FBQTtBQUFBLFNBQUFGLDRCQUFBSCxDQUFBLEVBQUFNLENBQUEsUUFBQU4sQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBTyxpQkFBQSxDQUFBUCxDQUFBLEVBQUFNLENBQUEsT0FBQUUsQ0FBQSxNQUFBQyxRQUFBLENBQUFDLElBQUEsQ0FBQVYsQ0FBQSxFQUFBVyxLQUFBLDZCQUFBSCxDQUFBLElBQUFSLENBQUEsQ0FBQVksV0FBQSxLQUFBSixDQUFBLEdBQUFSLENBQUEsQ0FBQVksV0FBQSxDQUFBQyxJQUFBLGFBQUFMLENBQUEsY0FBQUEsQ0FBQSxHQUFBTSxLQUFBLENBQUFDLElBQUEsQ0FBQWYsQ0FBQSxvQkFBQVEsQ0FBQSwrQ0FBQVEsSUFBQSxDQUFBUixDQUFBLElBQUFELGlCQUFBLENBQUFQLENBQUEsRUFBQU0sQ0FBQTtBQUFBLFNBQUFKLGlCQUFBRixDQUFBLDhCQUFBaUIsTUFBQSxZQUFBakIsQ0FBQSxDQUFBaUIsTUFBQSxDQUFBQyxRQUFBLGFBQUFsQixDQUFBLHVCQUFBYyxLQUFBLENBQUFDLElBQUEsQ0FBQWYsQ0FBQTtBQUFBLFNBQUFDLG1CQUFBRCxDQUFBLFFBQUFjLEtBQUEsQ0FBQUssT0FBQSxDQUFBbkIsQ0FBQSxVQUFBTyxpQkFBQSxDQUFBUCxDQUFBO0FBQUEsU0FBQU8sa0JBQUFQLENBQUEsRUFBQU0sQ0FBQSxhQUFBQSxDQUFBLElBQUFBLENBQUEsR0FBQU4sQ0FBQSxDQUFBb0IsTUFBQSxNQUFBZCxDQUFBLEdBQUFOLENBQUEsQ0FBQW9CLE1BQUEsWUFBQUMsQ0FB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LElBQUlBLENBQUMsSUFBSSxDQUFDLElBQUlBLENBQUMsR0FBR08sY0FBYyxFQUFFb0IsSUFBSSxDQUFDSixJQUFJLENBQUNGLENBQUMsQ0FBQyxDQUFDLEtBQ2pFTSxJQUFJLENBQUNKLElBQUksQ0FBQ3ZCLENBQUMsQ0FBQztFQUNuQjtFQUNBLElBQUksT0FBT2dCLE1BQU0sS0FBSyxXQUFXLEVBQUU7SUFDakMsSUFBSTtNQUNGWixnQkFBZ0IsQ0FBQ0ssV0FBVyxFQUFFa0IsSUFBSSxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxPQUFPNUIsQ0FBQyxFQUFFLENBQUM7RUFDZjtFQUNBLE9BQU80QixJQUFJO0FBQ2I7QUFFQSxTQUFTQyxVQUFVQSxDQUFBLEVBQUk7RUFDckIsT0FBQW5ELGtCQUFBLENBQVdxQyxNQUFNO0FBQ25CO0FBRUEsU0FBU2UsU0FBU0EsQ0FBRUMsR0FBRyxFQUFFO0VBQ3ZCLElBQU05QixDQUFDLEdBQUdvQixNQUFNLENBQUNVLEdBQUcsQ0FBQztFQUNyQixJQUFJLENBQUNWLE1BQU0sQ0FBQ0UsUUFBUSxDQUFDdEIsQ0FBQyxDQUFDLElBQUlBLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDO0VBQzNDLE9BQU8rQixJQUFJLENBQUNDLEtBQUssQ0FBQ2hDLENBQUMsR0FBR00sWUFBWSxDQUFDO0FBQ3JDO0FBRUEyQixNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmekIsV0FBVyxFQUFYQSxXQUFXO0VBQ1hFLGlCQUFpQixFQUFqQkEsaUJBQWlCO0VBQ2pCSSwwQkFBMEIsRUFBMUJBLDBCQUEwQjtFQUMxQlMsMEJBQTBCLEVBQTFCQSwwQkFBMEI7RUFDMUJJLFVBQVUsRUFBVkEsVUFBVTtFQUNWQyxTQUFTLEVBQVRBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL2pvaW5tYXJrZXRQb29sUHJlZmVyZW5jZXMuanM/NTVlZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQnJvd3Nlci1sb2NhbCBKb2lubWFya2V0IGxpcXVpZGl0eSBwb29sIHRhcmdldHMgKEJUQykuIFRocmVlIHRpZXJzIGZyb20gbGFyZ2VzdCB0byBzbWFsbGVzdC5cbiAqIFVzZWQgYXMgb3BlcmF0b3IgcmVmZXJlbmNlIGZvciBzdGFnaW5nIGh1Yi13YWxsZXQgVVRYT3MgLyBBQ1AtZnJpZW5kbHkgY2h1bmsgc2l6ZXMg4oCUIG5vdCBlbmZvcmNlZCBvbi1jaGFpbi5cbiAqL1xuXG5jb25zdCB7XG4gIHJlYWRTdG9yYWdlSlNPTixcbiAgd3JpdGVTdG9yYWdlSlNPTlxufSA9IHJlcXVpcmUoJy4vZmFicmljQnJvd3NlclN0YXRlJyk7XG5jb25zdCB7XG4gIFNBVFNfUEVSX0JUQyxcbiAgQklUQ09JTl9NQVhfU1VQUExZX0JUQzogTUFYX0JUQ19TVVBQTFksXG4gIEpPSU5NQVJLRVRfUE9PTF9TSVpFU19TVE9SQUdFX0tFWTogU1RPUkFHRV9LRVlcbn0gPSByZXF1aXJlKCcuLi9jb25zdGFudHMnKTtcblxuLyoqIERlZmF1bHQgcG9vbHM6IDAuMDUg4oaSIDAuMDA1IOKGkiAwLjAwMDUgQlRDICovXG5jb25zdCBERUZBVUxUX1BPT0xTX0JUQyA9IE9iamVjdC5mcmVlemUoWzAuMDUsIDAuMDA1LCAxIC8gMjAwMF0pO1xuXG5jb25zdCBMQUJFTFMgPSBPYmplY3QuZnJlZXplKFsnUG9vbCBBIChsYXJnZXN0KScsICdQb29sIEInLCAnUG9vbCBDIChzbWFsbGVzdCknXSk7XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcltdfSB0aHJlZSBwb3NpdGl2ZSBCVEMgYW1vdW50c1xuICovXG5mdW5jdGlvbiBsb2FkSm9pbm1hcmtldFBvb2xTaXplc0J0YyAoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuIFsuLi5ERUZBVUxUX1BPT0xTX0JUQ107XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gcmVhZFN0b3JhZ2VKU09OKFNUT1JBR0VfS0VZLCBudWxsKTtcbiAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIFsuLi5ERUZBVUxUX1BPT0xTX0JUQ107XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnNlZCkgfHwgcGFyc2VkLmxlbmd0aCAhPT0gMykgcmV0dXJuIFsuLi5ERUZBVUxUX1BPT0xTX0JUQ107XG4gICAgY29uc3Qgb3V0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgIGNvbnN0IG4gPSBOdW1iZXIocGFyc2VkW2ldKTtcbiAgICAgIGNvbnN0IGQgPSBERUZBVUxUX1BPT0xTX0JUQ1tpXTtcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG4pIHx8IG4gPD0gMCB8fCBuID4gTUFYX0JUQ19TVVBQTFkpIG91dC5wdXNoKGQpO1xuICAgICAgZWxzZSBvdXQucHVzaChuKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBbLi4uREVGQVVMVF9QT09MU19CVENdO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJbXX0gcG9vbHMgLSBtdXN0IGJlIGxlbmd0aCAzLCBwb3NpdGl2ZSBCVENcbiAqIEByZXR1cm5zIHtudW1iZXJbXX0gbm9ybWFsaXplZCBwb29scyAoYWx3YXlzIGxlbmd0aCAzKVxuICovXG5mdW5jdGlvbiBzYXZlSm9pbm1hcmtldFBvb2xTaXplc0J0YyAocG9vbHMpIHtcbiAgY29uc3QgYmFzZSA9IEFycmF5LmlzQXJyYXkocG9vbHMpID8gcG9vbHMgOiBbXTtcbiAgY29uc3QgbmV4dCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgIGNvbnN0IG4gPSBOdW1iZXIoYmFzZVtpXSk7XG4gICAgY29uc3QgZCA9IERFRkFVTFRfUE9PTFNfQlRDW2ldO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG4pIHx8IG4gPD0gMCB8fCBuID4gTUFYX0JUQ19TVVBQTFkpIG5leHQucHVzaChkKTtcbiAgICBlbHNlIG5leHQucHVzaChuKTtcbiAgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0cnkge1xuICAgICAgd3JpdGVTdG9yYWdlSlNPTihTVE9SQUdFX0tFWSwgbmV4dCk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gcG9vbExhYmVscyAoKSB7XG4gIHJldHVybiBbLi4uTEFCRUxTXTtcbn1cblxuZnVuY3Rpb24gYnRjVG9TYXRzIChidGMpIHtcbiAgY29uc3QgbiA9IE51bWJlcihidGMpO1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShuKSB8fCBuIDw9IDApIHJldHVybiAwO1xuICByZXR1cm4gTWF0aC5yb3VuZChuICogU0FUU19QRVJfQlRDKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFNUT1JBR0VfS0VZLFxuICBERUZBVUxUX1BPT0xTX0JUQyxcbiAgbG9hZEpvaW5tYXJrZXRQb29sU2l6ZXNCdGMsXG4gIHNhdmVKb2lubWFya2V0UG9vbFNpemVzQnRjLFxuICBwb29sTGFiZWxzLFxuICBidGNUb1NhdHNcbn07XG4iXSwibmFtZXMiOlsiX3RvQ29uc3VtYWJsZUFycmF5IiwiciIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJUeXBlRXJyb3IiLCJhIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0IiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpc0FycmF5IiwibGVuZ3RoIiwiZSIsIm4iLCJfcmVxdWlyZSIsInJlcXVpcmUiLCJyZWFkU3RvcmFnZUpTT04iLCJ3cml0ZVN0b3JhZ2VKU09OIiwiX3JlcXVpcmUyIiwiU0FUU19QRVJfQlRDIiwiTUFYX0JUQ19TVVBQTFkiLCJCSVRDT0lOX01BWF9TVVBQTFlfQlRDIiwiU1RPUkFHRV9LRVkiLCJKT0lOTUFSS0VUX1BPT0xfU0laRVNfU1RPUkFHRV9LRVkiLCJERUZBVUxUX1BPT0xTX0JUQyIsIk9iamVjdCIsImZyZWV6ZSIsIkxBQkVMUyIsImxvYWRKb2lubWFya2V0UG9vbFNpemVzQnRjIiwid2luZG93IiwicGFyc2VkIiwib3V0IiwiaSIsIk51bWJlciIsImQiLCJpc0Zpbml0ZSIsInB1c2giLCJzYXZlSm9pbm1hcmtldFBvb2xTaXplc0J0YyIsInBvb2xzIiwiYmFzZSIsIm5leHQiLCJwb29sTGFiZWxzIiwiYnRjVG9TYXRzIiwiYnRjIiwiTWF0aCIsInJvdW5kIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/joinmarketPoolPreferences.js\n\n}')},"./functions/messageTypes.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n/**\n * Canonical string names for Hub/Fabric **domain** message kinds (JSON `type` fields,\n * Fabric log `entry.type`, and matching activity rows in `globalState.messages`).\n *\n * - **Wire outer** opcodes (`Message.fromVector([name, …])`) stay in\n * {@link ./fabricMessageRegistry.js} — mixed `PascalCase` (e.g. `ChatMessage`) and\n * `SCREAMING_SNAKE` where Fabric registered them that way (e.g. `P2P_RELAY`).\n * - **ActivityStreams-style** hub activities from `recordActivity` often use verb\n * types (`Send`, `Receive`, `Announce`, …) — see `services/hub.js`.\n * - **Domain events** in the activity feed and Fabric collections use\n * `SCREAMING_SNAKE` for protocol-ish names (`P2P_CHAT_MESSAGE`, …).\n */\n\n/** @deprecated Prefer {@link DELEGATION_SIGNATURE_REQUEST}. Old client localStorage rows. */\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar LEGACY_DELEGATION_SIGN_REQUEST = 'DELEGATION_SIGN_REQUEST';\nvar DELEGATION_SIGNATURE_REQUEST = 'DELEGATION_SIGNATURE_REQUEST';\nvar DELEGATION_SIGNATURE_RESOLUTION = 'DELEGATION_SIGNATURE_RESOLUTION';\n\n/** GenericMessage / activity envelope: document delivery reward offer (sidechain + L1 demo). */\nvar DOCUMENT_OFFER = 'DOCUMENT_OFFER';\nvar _require = __webpack_require__(/*! ./federationContractInvite */ \"./functions/federationContractInvite.js\"),\n FEDERATION_CONTRACT_INVITE = _require.FEDERATION_CONTRACT_INVITE,\n FEDERATION_CONTRACT_INVITE_RESPONSE = _require.FEDERATION_CONTRACT_INVITE_RESPONSE;\nvar appNs = null;\ntry {\n appNs = __webpack_require__(/*! @fabric/core/functions/applicationNamespaces */ \"./node_modules/@fabric/core/functions/applicationNamespaces.js\");\n} catch (_) {\n appNs = null;\n}\n\n/** Fabric log types for application-namespace events (see APPLICATION_NAMESPACES). */\nvar CONTRACT_PUBLISH_LOG = appNs && appNs.LOG_TYPES && appNs.LOG_TYPES.ContractPublish || 'ContractPublish';\nvar CONTRACT_MESSAGE_LOG = appNs && appNs.LOG_TYPES && appNs.LOG_TYPES.ContractMessage || 'ContractMessage';\n\n/** Beacon Federation epoch signature collection (ADR-001; GenericMessage body `type`). */\nvar FEDERATION_SIGN_REQUEST = appNs && appNs.ACTIVITY_TYPES && appNs.ACTIVITY_TYPES.FederationSignRequest || 'FederationSignRequest';\nvar FEDERATION_SIGN_RESPONSE = appNs && appNs.ACTIVITY_TYPES && appNs.ACTIVITY_TYPES.FederationSignResponse || 'FederationSignResponse';\n\n/**\n * Whether `m` is a delegation-signing activity row (pending UI / notifications).\n * Accepts the legacy alias written before the name was aligned with the Fabric log.\n * @param {{ type?: string }|null|undefined} m\n */\nfunction isDelegationSignatureRequestActivity(m) {\n if (!m || _typeof(m) !== 'object') return false;\n var t = m.type;\n return t === DELEGATION_SIGNATURE_REQUEST || t === LEGACY_DELEGATION_SIGN_REQUEST;\n}\nmodule.exports = {\n LEGACY_DELEGATION_SIGN_REQUEST: LEGACY_DELEGATION_SIGN_REQUEST,\n DELEGATION_SIGNATURE_REQUEST: DELEGATION_SIGNATURE_REQUEST,\n DELEGATION_SIGNATURE_RESOLUTION: DELEGATION_SIGNATURE_RESOLUTION,\n DOCUMENT_OFFER: DOCUMENT_OFFER,\n FEDERATION_CONTRACT_INVITE: FEDERATION_CONTRACT_INVITE,\n FEDERATION_CONTRACT_INVITE_RESPONSE: FEDERATION_CONTRACT_INVITE_RESPONSE,\n CONTRACT_PUBLISH_LOG: CONTRACT_PUBLISH_LOG,\n CONTRACT_MESSAGE_LOG: CONTRACT_MESSAGE_LOG,\n FEDERATION_SIGN_REQUEST: FEDERATION_SIGN_REQUEST,\n FEDERATION_SIGN_RESPONSE: FEDERATION_SIGN_RESPONSE,\n isDelegationSignatureRequestActivity: isDelegationSignatureRequestActivity\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvbWVzc2FnZVR5cGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUFBLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBQ0EsSUFBTUssOEJBQThCLEdBQUcseUJBQXlCO0FBRWhFLElBQU1DLDRCQUE0QixHQUFHLDhCQUE4QjtBQUNuRSxJQUFNQywrQkFBK0IsR0FBRyxpQ0FBaUM7O0FBRXpFO0FBQ0EsSUFBTUMsY0FBYyxHQUFHLGdCQUFnQjtBQUV2QyxJQUFBQyxRQUFBLEdBR0lDLG1CQUFPLENBQUMsMkVBQTRCLENBQUM7RUFGdkNDLDBCQUEwQixHQUFBRixRQUFBLENBQTFCRSwwQkFBMEI7RUFDMUJDLG1DQUFtQyxHQUFBSCxRQUFBLENBQW5DRyxtQ0FBbUM7QUFHckMsSUFBSUMsS0FBSyxHQUFHLElBQUk7QUFDaEIsSUFBSTtFQUNGQSxLQUFLLEdBQUdILG1CQUFPLENBQUMsb0hBQThDLENBQUM7QUFDakUsQ0FBQyxDQUFDLE9BQU9JLENBQUMsRUFBRTtFQUNWRCxLQUFLLEdBQUcsSUFBSTtBQUNkOztBQUVBO0FBQ0EsSUFBTUUsb0JBQW9CLEdBQUlGLEtBQUssSUFBSUEsS0FBSyxDQUFDRyxTQUFTLElBQUlILEtBQUssQ0FBQ0csU0FBUyxDQUFDQyxlQUFlLElBQUssaUJBQWlCO0FBQy9HLElBQU1DLG9CQUFvQixHQUFJTCxLQUFLLElBQUlBLEtBQUssQ0FBQ0csU0FBUyxJQUFJSCxLQUFLLENBQUNHLFNBQVMsQ0FBQ0csZUFBZSxJQUFLLGlCQUFpQjs7QUFFL0c7QUFDQSxJQUFNQyx1QkFBdUIsR0FBSVAsS0FBSyxJQUFJQSxLQUFLLENBQUNRLGNBQWMsSUFBSVIsS0FBSyxDQUFDUSxjQUFjLENBQUNDLHFCQUFxQixJQUFLLHVCQUF1QjtBQUN4SSxJQUFNQyx3QkFBd0IsR0FBSVYsS0FBSyxJQUFJQSxLQUFLLENBQUNRLGNBQWMsSUFBSVIsS0FBSyxDQUFDUSxjQUFjLENBQUNHLHNCQUFzQixJQUFLLHdCQUF3Qjs7QUFFM0k7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLG9DQUFvQ0EsQ0FBRUMsQ0FBQyxFQUFFO0VBQ2hELElBQUksQ0FBQ0EsQ0FBQyxJQUFJM0IsT0FBQSxDQUFPMkIsQ0FBQyxNQUFLLFFBQVEsRUFBRSxPQUFPLEtBQUs7RUFDN0MsSUFBTUMsQ0FBQyxHQUFHRCxDQUFDLENBQUNFLElBQUk7RUFDaEIsT0FBT0QsQ0FBQyxLQUFLckIsNEJBQTRCLElBQUlxQixDQUFDLEtBQUt0Qiw4QkFBOEI7QUFDbkY7QUFFQXdCLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2Z6Qiw4QkFBOEIsRUFBOUJBLDhCQUE4QjtFQUM5QkMsNEJBQTRCLEVBQTVCQSw0QkFBNEI7RUFDNUJDLCtCQUErQixFQUEvQkEsK0JBQStCO0VBQy9CQyxjQUFjLEVBQWRBLGNBQWM7RUFDZEcsMEJBQTBCLEVBQTFCQSwwQkFBMEI7RUFDMUJDLG1DQUFtQyxFQUFuQ0EsbUNBQW1DO0VBQ25DRyxvQkFBb0IsRUFBcEJBLG9CQUFvQjtFQUNwQkcsb0JBQW9CLEVBQXBCQSxvQkFBb0I7RUFDcEJFLHVCQUF1QixFQUF2QkEsdUJBQXVCO0VBQ3ZCRyx3QkFBd0IsRUFBeEJBLHdCQUF3QjtFQUN4QkUsb0NBQW9DLEVBQXBDQTtBQUNGLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9tZXNzYWdlVHlwZXMuanM/MDgxYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2Fub25pY2FsIHN0cmluZyBuYW1lcyBmb3IgSHViL0ZhYnJpYyAqKmRvbWFpbioqIG1lc3NhZ2Uga2luZHMgKEpTT04gYHR5cGVgIGZpZWxkcyxcbiAqIEZhYnJpYyBsb2cgYGVudHJ5LnR5cGVgLCBhbmQgbWF0Y2hpbmcgYWN0aXZpdHkgcm93cyBpbiBgZ2xvYmFsU3RhdGUubWVzc2FnZXNgKS5cbiAqXG4gKiAtICoqV2lyZSBvdXRlcioqIG9wY29kZXMgKGBNZXNzYWdlLmZyb21WZWN0b3IoW25hbWUsIOKApl0pYCkgc3RheSBpblxuICogICB7QGxpbmsgLi9mYWJyaWNNZXNzYWdlUmVnaXN0cnkuanN9IOKAlCBtaXhlZCBgUGFzY2FsQ2FzZWAgKGUuZy4gYENoYXRNZXNzYWdlYCkgYW5kXG4gKiAgIGBTQ1JFQU1JTkdfU05BS0VgIHdoZXJlIEZhYnJpYyByZWdpc3RlcmVkIHRoZW0gdGhhdCB3YXkgKGUuZy4gYFAyUF9SRUxBWWApLlxuICogLSAqKkFjdGl2aXR5U3RyZWFtcy1zdHlsZSoqIGh1YiBhY3Rpdml0aWVzIGZyb20gYHJlY29yZEFjdGl2aXR5YCBvZnRlbiB1c2UgdmVyYlxuICogICB0eXBlcyAoYFNlbmRgLCBgUmVjZWl2ZWAsIGBBbm5vdW5jZWAsIOKApikg4oCUIHNlZSBgc2VydmljZXMvaHViLmpzYC5cbiAqIC0gKipEb21haW4gZXZlbnRzKiogaW4gdGhlIGFjdGl2aXR5IGZlZWQgYW5kIEZhYnJpYyBjb2xsZWN0aW9ucyB1c2VcbiAqICAgYFNDUkVBTUlOR19TTkFLRWAgZm9yIHByb3RvY29sLWlzaCBuYW1lcyAoYFAyUF9DSEFUX01FU1NBR0VgLCDigKYpLlxuICovXG5cbi8qKiBAZGVwcmVjYXRlZCBQcmVmZXIge0BsaW5rIERFTEVHQVRJT05fU0lHTkFUVVJFX1JFUVVFU1R9LiBPbGQgY2xpZW50IGxvY2FsU3RvcmFnZSByb3dzLiAqL1xuY29uc3QgTEVHQUNZX0RFTEVHQVRJT05fU0lHTl9SRVFVRVNUID0gJ0RFTEVHQVRJT05fU0lHTl9SRVFVRVNUJztcblxuY29uc3QgREVMRUdBVElPTl9TSUdOQVRVUkVfUkVRVUVTVCA9ICdERUxFR0FUSU9OX1NJR05BVFVSRV9SRVFVRVNUJztcbmNvbnN0IERFTEVHQVRJT05fU0lHTkFUVVJFX1JFU09MVVRJT04gPSAnREVMRUdBVElPTl9TSUdOQVRVUkVfUkVTT0xVVElPTic7XG5cbi8qKiBHZW5lcmljTWVzc2FnZSAvIGFjdGl2aXR5IGVudmVsb3BlOiBkb2N1bWVudCBkZWxpdmVyeSByZXdhcmQgb2ZmZXIgKHNpZGVjaGFpbiArIEwxIGRlbW8pLiAqL1xuY29uc3QgRE9DVU1FTlRfT0ZGRVIgPSAnRE9DVU1FTlRfT0ZGRVInO1xuXG5jb25zdCB7XG4gIEZFREVSQVRJT05fQ09OVFJBQ1RfSU5WSVRFLFxuICBGRURFUkFUSU9OX0NPTlRSQUNUX0lOVklURV9SRVNQT05TRVxufSA9IHJlcXVpcmUoJy4vZmVkZXJhdGlvbkNvbnRyYWN0SW52aXRlJyk7XG5cbmxldCBhcHBOcyA9IG51bGw7XG50cnkge1xuICBhcHBOcyA9IHJlcXVpcmUoJ0BmYWJyaWMvY29yZS9mdW5jdGlvbnMvYXBwbGljYXRpb25OYW1lc3BhY2VzJyk7XG59IGNhdGNoIChfKSB7XG4gIGFwcE5zID0gbnVsbDtcbn1cblxuLyoqIEZhYnJpYyBsb2cgdHlwZXMgZm9yIGFwcGxpY2F0aW9uLW5hbWVzcGFjZSBldmVudHMgKHNlZSBBUFBMSUNBVElPTl9OQU1FU1BBQ0VTKS4gKi9cbmNvbnN0IENPTlRSQUNUX1BVQkxJU0hfTE9HID0gKGFwcE5zICYmIGFwcE5zLkxPR19UWVBFUyAmJiBhcHBOcy5MT0dfVFlQRVMuQ29udHJhY3RQdWJsaXNoKSB8fCAnQ29udHJhY3RQdWJsaXNoJztcbmNvbnN0IENPTlRSQUNUX01FU1NBR0VfTE9HID0gKGFwcE5zICYmIGFwcE5zLkxPR19UWVBFUyAmJiBhcHBOcy5MT0dfVFlQRVMuQ29udHJhY3RNZXNzYWdlKSB8fCAnQ29udHJhY3RNZXNzYWdlJztcblxuLyoqIEJlYWNvbiBGZWRlcmF0aW9uIGVwb2NoIHNpZ25hdHVyZSBjb2xsZWN0aW9uIChBRFItMDAxOyBHZW5lcmljTWVzc2FnZSBib2R5IGB0eXBlYCkuICovXG5jb25zdCBGRURFUkFUSU9OX1NJR05fUkVRVUVTVCA9IChhcHBOcyAmJiBhcHBOcy5BQ1RJVklUWV9UWVBFUyAmJiBhcHBOcy5BQ1RJVklUWV9UWVBFUy5GZWRlcmF0aW9uU2lnblJlcXVlc3QpIHx8ICdGZWRlcmF0aW9uU2lnblJlcXVlc3QnO1xuY29uc3QgRkVERVJBVElPTl9TSUdOX1JFU1BPTlNFID0gKGFwcE5zICYmIGFwcE5zLkFDVElWSVRZX1RZUEVTICYmIGFwcE5zLkFDVElWSVRZX1RZUEVTLkZlZGVyYXRpb25TaWduUmVzcG9uc2UpIHx8ICdGZWRlcmF0aW9uU2lnblJlc3BvbnNlJztcblxuLyoqXG4gKiBXaGV0aGVyIGBtYCBpcyBhIGRlbGVnYXRpb24tc2lnbmluZyBhY3Rpdml0eSByb3cgKHBlbmRpbmcgVUkgLyBub3RpZmljYXRpb25zKS5cbiAqIEFjY2VwdHMgdGhlIGxlZ2FjeSBhbGlhcyB3cml0dGVuIGJlZm9yZSB0aGUgbmFtZSB3YXMgYWxpZ25lZCB3aXRoIHRoZSBGYWJyaWMgbG9nLlxuICogQHBhcmFtIHt7IHR5cGU/OiBzdHJpbmcgfXxudWxsfHVuZGVmaW5lZH0gbVxuICovXG5mdW5jdGlvbiBpc0RlbGVnYXRpb25TaWduYXR1cmVSZXF1ZXN0QWN0aXZpdHkgKG0pIHtcbiAgaWYgKCFtIHx8IHR5cGVvZiBtICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB0ID0gbS50eXBlO1xuICByZXR1cm4gdCA9PT0gREVMRUdBVElPTl9TSUdOQVRVUkVfUkVRVUVTVCB8fCB0ID09PSBMRUdBQ1lfREVMRUdBVElPTl9TSUdOX1JFUVVFU1Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBMRUdBQ1lfREVMRUdBVElPTl9TSUdOX1JFUVVFU1QsXG4gIERFTEVHQVRJT05fU0lHTkFUVVJFX1JFUVVFU1QsXG4gIERFTEVHQVRJT05fU0lHTkFUVVJFX1JFU09MVVRJT04sXG4gIERPQ1VNRU5UX09GRkVSLFxuICBGRURFUkFUSU9OX0NPTlRSQUNUX0lOVklURSxcbiAgRkVERVJBVElPTl9DT05UUkFDVF9JTlZJVEVfUkVTUE9OU0UsXG4gIENPTlRSQUNUX1BVQkxJU0hfTE9HLFxuICBDT05UUkFDVF9NRVNTQUdFX0xPRyxcbiAgRkVERVJBVElPTl9TSUdOX1JFUVVFU1QsXG4gIEZFREVSQVRJT05fU0lHTl9SRVNQT05TRSxcbiAgaXNEZWxlZ2F0aW9uU2lnbmF0dXJlUmVxdWVzdEFjdGl2aXR5XG59O1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIkxFR0FDWV9ERUxFR0FUSU9OX1NJR05fUkVRVUVTVCIsIkRFTEVHQVRJT05fU0lHTkFUVVJFX1JFUVVFU1QiLCJERUxFR0FUSU9OX1NJR05BVFVSRV9SRVNPTFVUSU9OIiwiRE9DVU1FTlRfT0ZGRVIiLCJfcmVxdWlyZSIsInJlcXVpcmUiLCJGRURFUkFUSU9OX0NPTlRSQUNUX0lOVklURSIsIkZFREVSQVRJT05fQ09OVFJBQ1RfSU5WSVRFX1JFU1BPTlNFIiwiYXBwTnMiLCJfIiwiQ09OVFJBQ1RfUFVCTElTSF9MT0ciLCJMT0dfVFlQRVMiLCJDb250cmFjdFB1Ymxpc2giLCJDT05UUkFDVF9NRVNTQUdFX0xPRyIsIkNvbnRyYWN0TWVzc2FnZSIsIkZFREVSQVRJT05fU0lHTl9SRVFVRVNUIiwiQUNUSVZJVFlfVFlQRVMiLCJGZWRlcmF0aW9uU2lnblJlcXVlc3QiLCJGRURFUkFUSU9OX1NJR05fUkVTUE9OU0UiLCJGZWRlcmF0aW9uU2lnblJlc3BvbnNlIiwiaXNEZWxlZ2F0aW9uU2lnbmF0dXJlUmVxdWVzdEFjdGl2aXR5IiwibSIsInQiLCJ0eXBlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/messageTypes.js\n\n}")},"./functions/payjoinBrowserWallet.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n/**\n * Client-side Payjoin (BIP78) payer helpers for browser / extension / Electron.\n *\n * Security & privacy:\n * - xprv is used only in memory to sign; never sent to the Hub or logged.\n * - PSBTs and payjoin HTTP bodies go to the recipient's `pj=` endpoint (third party).\n * Prefer HTTPS endpoints you trust; the receiver learns input/amount structure.\n * - Do not `console.log` PSBTs or keys in production builds.\n *\n * CORS: browsers cannot POST to arbitrary `pj=` origins unless the receiver allows it.\n * Use `window.fabricDesktop.payjoinPost` (Electron) when available, or same-origin\n * payjoin URLs (e.g. another Fabric Hub you control).\n */\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorValues(e) { if (null != e) { var t = e[\"function\" == typeof Symbol && Symbol.iterator || \"@@iterator\"], r = 0; if (t) return t.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + \" is not iterable\"); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = \"function\" == typeof Symbol ? Symbol : {}, n = r.iterator || \"@@iterator\", o = r.toStringTag || \"@@toStringTag\"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, \"_invoke\", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError(\"Generator is already running\"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = \"next\"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError(\"iterator result is not an object\"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i[\"return\"]) && t.call(i), c < 2 && (u = TypeError(\"The iterator does not provide a '\" + o + \"' method\"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, \"GeneratorFunction\")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, \"constructor\", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction), GeneratorFunction.displayName = \"GeneratorFunction\", _regeneratorDefine2(GeneratorFunctionPrototype, o, \"GeneratorFunction\"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, \"Generator\"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, \"toString\", function () { return \"[object Generator]\"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, \"\", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o(\"next\", 0), o(\"throw\", 1), o(\"return\", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n); } _next(void 0); }); }; }\nvar bitcoin = __webpack_require__(/*! bitcoinjs-lib */ \"./node_modules/bitcoinjs-lib/src/index.js\");\nvar ecc = __webpack_require__(/*! @fabric/core/types/ecc */ \"./node_modules/@fabric/core/types/ecc.js\");\nvar BIP32Factory = (__webpack_require__(/*! bip32 */ \"./node_modules/bip32/src/index.js\")[\"default\"]);\nvar ecpairMod = __webpack_require__(/*! ecpair */ \"./node_modules/ecpair/src/index.js\");\nvar ECPairFactory = typeof ecpairMod === 'function' ? ecpairMod : ecpairMod[\"default\"] || ecpairMod.ECPairFactory;\nbitcoin.initEccLib(ecc);\nvar ecpair = ECPairFactory(ecc);\nvar _require = __webpack_require__(/*! ../constants */ \"./constants.js\"),\n SATS_PER_BTC = _require.SATS_PER_BTC;\n\n/** 0x81 — commit to all outputs; only this input is bound (others may be appended). */\nvar SIGHASH_ALL_ANYONECANPAY = bitcoin.Transaction.SIGHASH_ALL | bitcoin.Transaction.SIGHASH_ANYONECANPAY;\nfunction networkFromName() {\n var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var n = String(name || '').toLowerCase();\n if (n === 'regtest' || n === 'test') return bitcoin.networks.regtest;\n if (n === 'testnet' || n === 'signet') return bitcoin.networks.testnet;\n return bitcoin.networks.bitcoin;\n}\n\n/** bip32.fromBase58 network for extended keys (matches Hub regtest vs tpub). */\nfunction bip32NetworkForKeys(xpub, networkName) {\n var n = String(networkName || '').toLowerCase();\n if (n === 'regtest') return bitcoin.networks.regtest;\n if (n === 'testnet' || n === 'signet') return bitcoin.networks.testnet;\n if (n === 'mainnet' || n === 'main') return bitcoin.networks.bitcoin;\n var xs = String(xpub || '');\n if (xs.startsWith('tpub') || xs.startsWith('vpub') || xs.startsWith('upub')) return bitcoin.networks.testnet;\n return bitcoin.networks.bitcoin;\n}\n\n/**\n * @returns {{ address: string, amountSats: number|null, pjUrl: string, label?: string, message?: string }|null}\n */\nfunction parseBitcoinUriForPayjoin(uri) {\n var s = String(uri || '').trim();\n if (!/^bitcoin:/i.test(s)) return null;\n var noScheme = s.replace(/^bitcoin:/i, '');\n var q = noScheme.indexOf('?');\n var addressPart = (q >= 0 ? noScheme.slice(0, q) : noScheme).split('/')[0];\n var address = addressPart;\n var search = q >= 0 ? noScheme.slice(q) : '';\n var params = new URLSearchParams(search);\n var pjRaw = params.get('pj');\n if (!pjRaw) return null;\n var pjUrl;\n try {\n pjUrl = decodeURIComponent(String(pjRaw).replace(/\\+/g, '%20'));\n } catch (_) {\n return null;\n }\n if (!/^https?:\\/\\//i.test(pjUrl)) return null;\n var amountStr = params.get('amount');\n var amountBtc = amountStr != null ? Number(amountStr) : NaN;\n var amountSats = Number.isFinite(amountBtc) ? Math.round(amountBtc * SATS_PER_BTC) : null;\n return {\n address: address,\n amountSats: amountSats,\n pjUrl: pjUrl,\n label: params.get('label') || '',\n message: params.get('message') || ''\n };\n}\n\n/**\n * @param {string} pjUrl - Payjoin POST URL from BIP21 `pj=` (Fabric: .../sessions//proposals)\n * @returns {string} session id or ''\n */\nfunction extractFabricPayjoinSessionIdFromPjUrl(pjUrl) {\n var u = String(pjUrl || '');\n var m = u.match(/\\/sessions\\/([^/?#]+)\\/proposals(?:\\?|#|$)/);\n return m ? decodeURIComponent(m[1]) : '';\n}\n\n/**\n * @param {string} desc - Output descriptor from Bitcoin Core scantxoutset\n * @returns {{ chain: number, index: number }|null}\n */\nfunction chainIndexFromDescriptor(desc) {\n var m = String(desc || '').match(/\\/([01])\\/(\\d+)\\)(?:#|$)/);\n if (!m) return null;\n return {\n chain: Number(m[1]),\n index: Number(m[2])\n };\n}\nfunction estimateP2wpkhFeeSats(inputCount, outputCount, satPerVbyte) {\n var rate = Math.max(1, Number(satPerVbyte || 2));\n var vbytes = 10 + inputCount * 68 + outputCount * 31;\n return Math.ceil(vbytes * rate);\n}\n\n/**\n * POST original PSBT (base64) to BIP78 receiver; returns proposed PSBT base64 body.\n * @param {string} pjUrl\n * @param {string} psbtBase64\n * @param {{ fetchFn?: typeof fetch }} [opts]\n */\nfunction postPayjoinProposal(_x, _x2) {\n return _postPayjoinProposal.apply(this, arguments);\n}\n/**\n * Prefer Electron main-process POST (no CORS) when `window.fabricDesktop.payjoinPost` exists.\n */\nfunction _postPayjoinProposal() {\n _postPayjoinProposal = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(pjUrl, psbtBase64) {\n var opts,\n fetchFn,\n res,\n text,\n trimmed,\n _args = arguments;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n opts = _args.length > 2 && _args[2] !== undefined ? _args[2] : {};\n fetchFn = opts.fetchFn || (typeof fetch === 'function' ? fetch.bind(typeof globalThis !== 'undefined' ? globalThis : window) : null);\n if (fetchFn) {\n _context.n = 1;\n break;\n }\n throw new Error('fetch is not available for Payjoin POST.');\n case 1:\n _context.n = 2;\n return fetchFn(String(pjUrl).trim(), {\n method: 'POST',\n headers: {\n 'Content-Type': 'text/plain'\n },\n body: String(psbtBase64 || '')\n });\n case 2:\n res = _context.v;\n _context.n = 3;\n return res.text();\n case 3:\n text = _context.v;\n if (res.ok) {\n _context.n = 4;\n break;\n }\n throw new Error(\"Payjoin endpoint returned \".concat(res.status, \": \").concat(text.slice(0, 400)));\n case 4:\n trimmed = String(text || '').trim();\n if (trimmed) {\n _context.n = 5;\n break;\n }\n throw new Error('Empty Payjoin response.');\n case 5:\n return _context.a(2, trimmed);\n }\n }, _callee);\n }));\n return _postPayjoinProposal.apply(this, arguments);\n}\nfunction postPayjoinProposalWithDesktopFallback(_x3, _x4) {\n return _postPayjoinProposalWithDesktopFallback.apply(this, arguments);\n}\n/**\n * @param {object} opts\n * @param {string} opts.xprv\n * @param {string} opts.xpub\n * @param {string} opts.networkName - Hub network id (regtest, mainnet, …)\n * @param {Array<{ txid: string, vout: number, amount?: number, amountSats?: number, desc?: string }>} opts.utxos\n * @param {string} opts.payAddress - BIP21 address (output)\n * @param {number} opts.sendAmountSats - value to payee output\n * @param {string} opts.changeAddress\n * @param {(txid: string) => Promise} opts.getPrevTxHex\n * @param {number} [opts.feeSatPerVbyte]\n * @param {boolean} [opts.anyoneCanPayAll] - if true, sign with SIGHASH_ALL|ANYONECANPAY so a receiver may add inputs without changing outputs\n * @returns {Promise<{ psbtBase64: string, ourInputIndices: number[], usedUtxos: object[] }>}\n */\nfunction _postPayjoinProposalWithDesktopFallback() {\n _postPayjoinProposalWithDesktopFallback = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(pjUrl, psbtBase64) {\n var opts,\n g,\n desk,\n _args2 = arguments;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n opts = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : {};\n g = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : null;\n desk = g && g.fabricDesktop && typeof g.fabricDesktop.payjoinPost === 'function' ? g.fabricDesktop.payjoinPost : null;\n if (!desk) {\n _context2.n = 1;\n break;\n }\n return _context2.a(2, desk(String(pjUrl || '').trim(), String(psbtBase64 || '')));\n case 1:\n return _context2.a(2, postPayjoinProposal(pjUrl, psbtBase64, opts));\n }\n }, _callee2);\n }));\n return _postPayjoinProposalWithDesktopFallback.apply(this, arguments);\n}\nfunction buildOriginalSignedPayjoinPsbt() {\n return _buildOriginalSignedPayjoinPsbt.apply(this, arguments);\n}\n/**\n * After receiver returns an updated PSBT, re-sign our inputs (indices unchanged for typical BIP78 v1).\n * @param {string} psbtBase64\n * @param {number[]} ourInputIndices\n * @param {string} xprv\n * @param {string} xpub - for network decode only\n * @param {string} networkName\n * @param {boolean} [anyoneCanPayAll] - must match original PSBT sighash when re-signing after payjoin round-trip\n */\nfunction _buildOriginalSignedPayjoinPsbt() {\n _buildOriginalSignedPayjoinPsbt = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n var opts,\n xprv,\n xpub,\n payAddress,\n changeAddress,\n sendAmountSats,\n utxos,\n getPrevTxHex,\n network,\n feeSatPerVbyte,\n anyoneCanPayAll,\n sighashTypes,\n decodeNetwork,\n bip32,\n root,\n sorted,\n dustLimit,\n picked,\n sum,\n outputs,\n _iterator2,\n _step2,\n _u2,\n fee2,\n change2,\n _iterator3,\n _step3,\n u,\n fee1,\n psbt,\n ourInputIndices,\n usedUtxos,\n i,\n _u,\n hex,\n prev,\n out,\n ci,\n child,\n pay,\n inputOpts,\n _iterator4,\n _step4,\n o,\n _loop,\n _i,\n _args4 = arguments,\n _t,\n _t2;\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.p = _context4.n) {\n case 0:\n opts = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {};\n xprv = String(opts.xprv || '').trim();\n xpub = String(opts.xpub || '').trim();\n payAddress = String(opts.payAddress || '').trim();\n changeAddress = String(opts.changeAddress || '').trim();\n sendAmountSats = Math.round(Number(opts.sendAmountSats || 0));\n utxos = Array.isArray(opts.utxos) ? opts.utxos : [];\n getPrevTxHex = opts.getPrevTxHex;\n network = networkFromName(opts.networkName);\n feeSatPerVbyte = Number(opts.feeSatPerVbyte || 2);\n anyoneCanPayAll = !!opts.anyoneCanPayAll;\n sighashTypes = anyoneCanPayAll ? [SIGHASH_ALL_ANYONECANPAY] : [bitcoin.Transaction.SIGHASH_ALL];\n if (!(!xprv || !xpub)) {\n _context4.n = 1;\n break;\n }\n throw new Error('Extended private and public keys are required for local Payjoin.');\n case 1:\n if (!(!payAddress || !changeAddress)) {\n _context4.n = 2;\n break;\n }\n throw new Error('Payee and change addresses are required.');\n case 2:\n if (!(!Number.isFinite(sendAmountSats) || sendAmountSats <= 0)) {\n _context4.n = 3;\n break;\n }\n throw new Error('sendAmountSats must be > 0.');\n case 3:\n if (!(typeof getPrevTxHex !== 'function')) {\n _context4.n = 4;\n break;\n }\n throw new Error('getPrevTxHex is required.');\n case 4:\n if (!(utxos.length === 0)) {\n _context4.n = 5;\n break;\n }\n throw new Error('No UTXOs available for this wallet.');\n case 5:\n decodeNetwork = bip32NetworkForKeys(xpub, opts.networkName);\n bip32 = BIP32Factory(ecc);\n root = bip32.fromBase58(xprv, decodeNetwork);\n sorted = utxos.map(function (u) {\n return _objectSpread(_objectSpread({}, u), {}, {\n _sats: Math.round(Number(u.amountSats != null ? u.amountSats : u.amount != null ? u.amount * SATS_PER_BTC : 0))\n });\n }).filter(function (u) {\n return u.txid && Number.isFinite(u.vout) && u._sats > 0;\n }).sort(function (a, b) {\n return b._sats - a._sats;\n });\n dustLimit = 546;\n /** Greedy largest-first; fee always uses actual picked input count. */\n picked = [];\n sum = 0;\n outputs = null;\n _iterator2 = _createForOfIteratorHelper(sorted);\n _context4.p = 6;\n _iterator2.s();\n case 7:\n if ((_step2 = _iterator2.n()).done) {\n _context4.n = 9;\n break;\n }\n _u2 = _step2.value;\n picked.push(_u2);\n sum += _u2._sats;\n fee2 = estimateP2wpkhFeeSats(picked.length, 2, feeSatPerVbyte);\n change2 = sum - sendAmountSats - fee2;\n if (!(change2 >= dustLimit)) {\n _context4.n = 8;\n break;\n }\n outputs = [{\n address: payAddress,\n value: sendAmountSats\n }, {\n address: changeAddress,\n value: change2\n }];\n return _context4.a(3, 9);\n case 8:\n _context4.n = 7;\n break;\n case 9:\n _context4.n = 11;\n break;\n case 10:\n _context4.p = 10;\n _t = _context4.v;\n _iterator2.e(_t);\n case 11:\n _context4.p = 11;\n _iterator2.f();\n return _context4.f(11);\n case 12:\n if (outputs) {\n _context4.n = 19;\n break;\n }\n picked = [];\n sum = 0;\n _iterator3 = _createForOfIteratorHelper(sorted);\n _context4.p = 13;\n _iterator3.s();\n case 14:\n if ((_step3 = _iterator3.n()).done) {\n _context4.n = 16;\n break;\n }\n u = _step3.value;\n picked.push(u);\n sum += u._sats;\n fee1 = estimateP2wpkhFeeSats(picked.length, 1, feeSatPerVbyte);\n if (!(sum >= sendAmountSats + fee1)) {\n _context4.n = 15;\n break;\n }\n outputs = [{\n address: payAddress,\n value: sendAmountSats\n }];\n return _context4.a(3, 16);\n case 15:\n _context4.n = 14;\n break;\n case 16:\n _context4.n = 18;\n break;\n case 17:\n _context4.p = 17;\n _t2 = _context4.v;\n _iterator3.e(_t2);\n case 18:\n _context4.p = 18;\n _iterator3.f();\n return _context4.f(18);\n case 19:\n if (!(!outputs || picked.length === 0)) {\n _context4.n = 20;\n break;\n }\n throw new Error('Insufficient funds for amount plus estimated fee (try single-output after dust change).');\n case 20:\n psbt = new bitcoin.Psbt({\n network: network\n });\n ourInputIndices = [];\n usedUtxos = [];\n i = 0;\n case 21:\n if (!(i < picked.length)) {\n _context4.n = 28;\n break;\n }\n _u = picked[i];\n _context4.n = 22;\n return getPrevTxHex(String(_u.txid));\n case 22:\n hex = _context4.v;\n if (!(!hex || !/^[0-9a-fA-F]+$/i.test(hex))) {\n _context4.n = 23;\n break;\n }\n throw new Error(\"Prev tx hex missing for \".concat(_u.txid));\n case 23:\n prev = bitcoin.Transaction.fromHex(hex);\n out = prev.outs[_u.vout];\n if (out) {\n _context4.n = 24;\n break;\n }\n throw new Error(\"vout \".concat(_u.vout, \" missing for \").concat(_u.txid));\n case 24:\n ci = chainIndexFromDescriptor(_u.desc);\n if (ci) {\n _context4.n = 25;\n break;\n }\n throw new Error('UTXO missing descriptor path (chain/index). Refresh UTXOs from Hub with a current Core.');\n case 25:\n child = root.derive(ci.chain).derive(ci.index);\n pay = bitcoin.payments.p2wpkh({\n pubkey: child.publicKey,\n network: network\n });\n if (!(!pay.output || !pay.output.equals(out.script))) {\n _context4.n = 26;\n break;\n }\n throw new Error('Descriptor path does not match UTXO script for ' + _u.txid + ':' + _u.vout);\n case 26:\n inputOpts = {\n hash: _u.txid,\n index: _u.vout,\n witnessUtxo: {\n script: out.script,\n value: out.value\n },\n bip32Derivation: [{\n masterFingerprint: root.fingerprint,\n path: \"m/\".concat(ci.chain, \"/\").concat(ci.index),\n pubkey: child.publicKey\n }]\n };\n if (anyoneCanPayAll) inputOpts.sighashType = SIGHASH_ALL_ANYONECANPAY;\n psbt.addInput(inputOpts);\n ourInputIndices.push(i);\n usedUtxos.push(_u);\n case 27:\n i++;\n _context4.n = 21;\n break;\n case 28:\n _iterator4 = _createForOfIteratorHelper(outputs);\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n o = _step4.value;\n psbt.addOutput({\n address: o.address,\n value: o.value\n });\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n _loop = /*#__PURE__*/_regenerator().m(function _loop(_i) {\n var child, kp;\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n child = function () {\n var ders = psbt.data.inputs[_i].bip32Derivation || [];\n var m = ders[0];\n if (!m || !m.path) return null;\n var parts = String(m.path).split('/').filter(Boolean);\n if (parts.length < 2) return null;\n var chain = Number(parts[parts.length - 2]);\n var idx = Number(parts[parts.length - 1]);\n if (!Number.isFinite(chain) || !Number.isFinite(idx)) return null;\n return root.derive(chain).derive(idx);\n }();\n if (!(!child || !child.privateKey)) {\n _context3.n = 1;\n break;\n }\n throw new Error('Cannot derive signing key for input ' + _i);\n case 1:\n kp = ecpair.fromPrivateKey(child.privateKey);\n psbt.signInput(_i, kp, sighashTypes);\n case 2:\n return _context3.a(2);\n }\n }, _loop);\n });\n _i = 0;\n case 29:\n if (!(_i < psbt.data.inputs.length)) {\n _context4.n = 31;\n break;\n }\n return _context4.d(_regeneratorValues(_loop(_i)), 30);\n case 30:\n _i++;\n _context4.n = 29;\n break;\n case 31:\n return _context4.a(2, {\n psbtBase64: psbt.toBase64(),\n ourInputIndices: ourInputIndices,\n usedUtxos: usedUtxos\n });\n }\n }, _callee3, null, [[13, 17, 18, 19], [6, 10, 11, 12]]);\n }));\n return _buildOriginalSignedPayjoinPsbt.apply(this, arguments);\n}\nfunction signOurPayjoinInputs(psbtBase64, ourInputIndices, xprv, xpub, networkName) {\n var anyoneCanPayAll = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n var network = networkFromName(networkName);\n var decodeNetwork = bip32NetworkForKeys(xpub, networkName);\n var bip32 = BIP32Factory(ecc);\n var root = bip32.fromBase58(String(xprv).trim(), decodeNetwork);\n var psbt = bitcoin.Psbt.fromBase64(String(psbtBase64 || '').trim(), {\n network: network\n });\n var sighashTypes = anyoneCanPayAll ? [SIGHASH_ALL_ANYONECANPAY] : [bitcoin.Transaction.SIGHASH_ALL];\n var _iterator = _createForOfIteratorHelper(ourInputIndices),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var idx = _step.value;\n if (idx < 0 || idx >= psbt.data.inputs.length) continue;\n var ders = psbt.data.inputs[idx].bip32Derivation || [];\n var m = ders[0];\n if (!m || !m.path) continue;\n var parts = String(m.path).split('/').filter(Boolean);\n var chain = Number(parts[parts.length - 2]);\n var i = Number(parts[parts.length - 1]);\n var child = root.derive(chain).derive(i);\n var kp = ecpair.fromPrivateKey(child.privateKey);\n if (anyoneCanPayAll) {\n psbt.updateInput(idx, {\n sighashType: SIGHASH_ALL_ANYONECANPAY\n });\n }\n psbt.signInput(idx, kp, sighashTypes);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return psbt.toBase64();\n}\nfunction finalizeAndExtractHex(psbtBase64, networkName) {\n var network = networkFromName(networkName);\n var psbt = bitcoin.Psbt.fromBase64(String(psbtBase64 || '').trim(), {\n network: network\n });\n psbt.finalizeAllInputs();\n return psbt.extractTransaction().toHex();\n}\nmodule.exports = {\n parseBitcoinUriForPayjoin: parseBitcoinUriForPayjoin,\n extractFabricPayjoinSessionIdFromPjUrl: extractFabricPayjoinSessionIdFromPjUrl,\n chainIndexFromDescriptor: chainIndexFromDescriptor,\n postPayjoinProposal: postPayjoinProposal,\n postPayjoinProposalWithDesktopFallback: postPayjoinProposalWithDesktopFallback,\n buildOriginalSignedPayjoinPsbt: buildOriginalSignedPayjoinPsbt,\n signOurPayjoinInputs: signOurPayjoinInputs,\n finalizeAndExtractHex: finalizeAndExtractHex,\n estimateP2wpkhFeeSats: estimateP2wpkhFeeSats,\n SIGHASH_ALL_ANYONECANPAY: SIGHASH_ALL_ANYONECANPAY\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBO0lBQUFlLFNBQUEsQ0FBQWhSLENBQUEsQ0FBQWlRLEdBQUE7RUFBQTtJQUFBZSxTQUFBLENBQUF0TyxDQUFBO0VBQUE7RUFFRCxPQUFPd0ssSUFBSSxDQUFDMkQsUUFBUSxDQUFDLENBQUM7QUFDeEI7QUFFQSxTQUFTTSxxQkFBcUJBLENBQUUzSCxVQUFVLEVBQUVqRCxXQUFXLEVBQUU7RUFDdkQsSUFBTXVGLE9BQU8sR0FBRy9GLGVBQWUsQ0FBQ1EsV0FBVyxDQUFDO0VBQzVDLElBQU0yRyxJQUFJLEdBQUdqSSxPQUFPLENBQUM0SixJQUFJLENBQUNrQyxVQUFVLENBQUMvTyxNQUFNLENBQUN3SCxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM1QyxJQUFJLENBQUMsQ0FBQyxFQUFFO0lBQUVrRixPQUFPLEVBQVBBO0VBQVEsQ0FBQyxDQUFDO0VBQ2xGb0IsSUFBSSxDQUFDa0UsaUJBQWlCLENBQUMsQ0FBQztFQUN4QixPQUFPbEUsSUFBSSxDQUFDbUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUMsQ0FBQztBQUMxQztBQUVBQyxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmOUsseUJBQXlCLEVBQXpCQSx5QkFBeUI7RUFDekIyQixzQ0FBc0MsRUFBdENBLHNDQUFzQztFQUN0Q0Usd0JBQXdCLEVBQXhCQSx3QkFBd0I7RUFDeEJZLG1CQUFtQixFQUFuQkEsbUJBQW1CO0VBQ25CdUIsc0NBQXNDLEVBQXRDQSxzQ0FBc0M7RUFDdENXLDhCQUE4QixFQUE5QkEsOEJBQThCO0VBQzlCeUYsb0JBQW9CLEVBQXBCQSxvQkFBb0I7RUFDcEJLLHFCQUFxQixFQUFyQkEscUJBQXFCO0VBQ3JCeEkscUJBQXFCLEVBQXJCQSxxQkFBcUI7RUFDckJoRCx3QkFBd0IsRUFBeEJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL3BheWpvaW5Ccm93c2VyV2FsbGV0LmpzPzU2NjQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENsaWVudC1zaWRlIFBheWpvaW4gKEJJUDc4KSBwYXllciBoZWxwZXJzIGZvciBicm93c2VyIC8gZXh0ZW5zaW9uIC8gRWxlY3Ryb24uXG4gKlxuICogU2VjdXJpdHkgJiBwcml2YWN5OlxuICogLSB4cHJ2IGlzIHVzZWQgb25seSBpbiBtZW1vcnkgdG8gc2lnbjsgbmV2ZXIgc2VudCB0byB0aGUgSHViIG9yIGxvZ2dlZC5cbiAqIC0gUFNCVHMgYW5kIHBheWpvaW4gSFRUUCBib2RpZXMgZ28gdG8gdGhlIHJlY2lwaWVudCdzIGBwaj1gIGVuZHBvaW50ICh0aGlyZCBwYXJ0eSkuXG4gKiAgIFByZWZlciBIVFRQUyBlbmRwb2ludHMgeW91IHRydXN0OyB0aGUgcmVjZWl2ZXIgbGVhcm5zIGlucHV0L2Ftb3VudCBzdHJ1Y3R1cmUuXG4gKiAtIERvIG5vdCBgY29uc29sZS5sb2dgIFBTQlRzIG9yIGtleXMgaW4gcHJvZHVjdGlvbiBidWlsZHMuXG4gKlxuICogQ09SUzogYnJvd3NlcnMgY2Fubm90IFBPU1QgdG8gYXJiaXRyYXJ5IGBwaj1gIG9yaWdpbnMgdW5sZXNzIHRoZSByZWNlaXZlciBhbGxvd3MgaXQuXG4gKiBVc2UgYHdpbmRvdy5mYWJyaWNEZXNrdG9wLnBheWpvaW5Qb3N0YCAoRWxlY3Ryb24pIHdoZW4gYXZhaWxhYmxlLCBvciBzYW1lLW9yaWdpblxuICogcGF5am9pbiBVUkxzIChlLmcuIGFub3RoZXIgRmFicmljIEh1YiB5b3UgY29udHJvbCkuXG4gKi9cblxuY29uc3QgYml0Y29pbiA9IHJlcXVpcmUoJ2JpdGNvaW5qcy1saWInKTtcbmNvbnN0IGVjYyA9IHJlcXVpcmUoJ0BmYWJyaWMvY29yZS90eXBlcy9lY2MnKTtcbmNvbnN0IEJJUDMyRmFjdG9yeSA9IHJlcXVpcmUoJ2JpcDMyJykuZGVmYXVsdDtcbmNvbnN0IGVjcGFpck1vZCA9IHJlcXVpcmUoJ2VjcGFpcicpO1xuY29uc3QgRUNQYWlyRmFjdG9yeSA9IHR5cGVvZiBlY3BhaXJNb2QgPT09ICdmdW5jdGlvbicgPyBlY3BhaXJNb2QgOiAoZWNwYWlyTW9kLmRlZmF1bHQgfHwgZWNwYWlyTW9kLkVDUGFpckZhY3RvcnkpO1xuXG5iaXRjb2luLmluaXRFY2NMaWIoZWNjKTtcbmNvbnN0IGVjcGFpciA9IEVDUGFpckZhY3RvcnkoZWNjKTtcbmNvbnN0IHsgU0FUU19QRVJfQlRDIH0gPSByZXF1aXJlKCcuLi9jb25zdGFudHMnKTtcblxuLyoqIDB4ODEg4oCUIGNvbW1pdCB0byBhbGwgb3V0cHV0czsgb25seSB0aGlzIGlucHV0IGlzIGJvdW5kIChvdGhlcnMgbWF5IGJlIGFwcGVuZGVkKS4gKi9cbmNvbnN0IFNJR0hBU0hfQUxMX0FOWU9ORUNBTlBBWSA9IGJpdGNvaW4uVHJhbnNhY3Rpb24uU0lHSEFTSF9BTEwgfCBiaXRjb2luLlRyYW5zYWN0aW9uLlNJR0hBU0hfQU5ZT05FQ0FOUEFZO1xuXG5mdW5jdGlvbiBuZXR3b3JrRnJvbU5hbWUgKG5hbWUgPSAnJykge1xuICBjb25zdCBuID0gU3RyaW5nKG5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChuID09PSAncmVndGVzdCcgfHwgbiA9PT0gJ3Rlc3QnKSByZXR1cm4gYml0Y29pbi5uZXR3b3Jrcy5yZWd0ZXN0O1xuICBpZiAobiA9PT0gJ3Rlc3RuZXQnIHx8IG4gPT09ICdzaWduZXQnKSByZXR1cm4gYml0Y29pbi5uZXR3b3Jrcy50ZXN0bmV0O1xuICByZXR1cm4gYml0Y29pbi5uZXR3b3Jrcy5iaXRjb2luO1xufVxuXG4vKiogYmlwMzIuZnJvbUJhc2U1OCBuZXR3b3JrIGZvciBleHRlbmRlZCBrZXlzIChtYXRjaGVzIEh1YiByZWd0ZXN0IHZzIHRwdWIpLiAqL1xuZnVuY3Rpb24gYmlwMzJOZXR3b3JrRm9yS2V5cyAoeHB1YiwgbmV0d29ya05hbWUpIHtcbiAgY29uc3QgbiA9IFN0cmluZyhuZXR3b3JrTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgaWYgKG4gPT09ICdyZWd0ZXN0JykgcmV0dXJuIGJpdGNvaW4ubmV0d29ya3MucmVndGVzdDtcbiAgaWYgKG4gPT09ICd0ZXN0bmV0JyB8fCBuID09PSAnc2lnbmV0JykgcmV0dXJuIGJpdGNvaW4ubmV0d29ya3MudGVzdG5ldDtcbiAgaWYgKG4gPT09ICdtYWlubmV0JyB8fCBuID09PSAnbWFpbicpIHJldHVybiBiaXRjb2luLm5ldHdvcmtzLmJpdGNvaW47XG4gIGNvbnN0IHhzID0gU3RyaW5nKHhwdWIgfHwgJycpO1xuICBpZiAoeHMuc3RhcnRzV2l0aCgndHB1YicpIHx8IHhzLnN0YXJ0c1dpdGgoJ3ZwdWInKSB8fCB4cy5zdGFydHNXaXRoKCd1cHViJykpIHJldHVybiBiaXRjb2luLm5ldHdvcmtzLnRlc3RuZXQ7XG4gIHJldHVybiBiaXRjb2luLm5ldHdvcmtzLmJpdGNvaW47XG59XG5cbi8qKlxuICogQHJldHVybnMge3sgYWRkcmVzczogc3RyaW5nLCBhbW91bnRTYXRzOiBudW1iZXJ8bnVsbCwgcGpVcmw6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcgfXxudWxsfVxuICovXG5mdW5jdGlvbiBwYXJzZUJpdGNvaW5VcmlGb3JQYXlqb2luICh1cmkpIHtcbiAgY29uc3QgcyA9IFN0cmluZyh1cmkgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCEvXmJpdGNvaW46L2kudGVzdChzKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IG5vU2NoZW1lID0gcy5yZXBsYWNlKC9eYml0Y29pbjovaSwgJycpO1xuICBjb25zdCBxID0gbm9TY2hlbWUuaW5kZXhPZignPycpO1xuICBjb25zdCBhZGRyZXNzUGFydCA9IChxID49IDAgPyBub1NjaGVtZS5zbGljZSgwLCBxKSA6IG5vU2NoZW1lKS5zcGxpdCgnLycpWzBdO1xuICBjb25zdCBhZGRyZXNzID0gYWRkcmVzc1BhcnQ7XG4gIGNvbnN0IHNlYXJjaCA9IHEgPj0gMCA/IG5vU2NoZW1lLnNsaWNlKHEpIDogJyc7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgY29uc3QgcGpSYXcgPSBwYXJhbXMuZ2V0KCdwaicpO1xuICBpZiAoIXBqUmF3KSByZXR1cm4gbnVsbDtcbiAgbGV0IHBqVXJsO1xuICB0cnkge1xuICAgIHBqVXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KFN0cmluZyhwalJhdykucmVwbGFjZSgvXFwrL2csICclMjAnKSk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoIS9eaHR0cHM/OlxcL1xcLy9pLnRlc3QocGpVcmwpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYW1vdW50U3RyID0gcGFyYW1zLmdldCgnYW1vdW50Jyk7XG4gIGNvbnN0IGFtb3VudEJ0YyA9IGFtb3VudFN0ciAhPSBudWxsID8gTnVtYmVyKGFtb3VudFN0cikgOiBOYU47XG4gIGNvbnN0IGFtb3VudFNhdHMgPSBOdW1iZXIuaXNGaW5pdGUoYW1vdW50QnRjKSA/IE1hdGgucm91bmQoYW1vdW50QnRjICogU0FUU19QRVJfQlRDKSA6IG51bGw7XG4gIHJldHVybiB7XG4gICAgYWRkcmVzcyxcbiAgICBhbW91bnRTYXRzLFxuICAgIHBqVXJsLFxuICAgIGxhYmVsOiBwYXJhbXMuZ2V0KCdsYWJlbCcpIHx8ICcnLFxuICAgIG1lc3NhZ2U6IHBhcmFtcy5nZXQoJ21lc3NhZ2UnKSB8fCAnJ1xuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwalVybCAtIFBheWpvaW4gUE9TVCBVUkwgZnJvbSBCSVAyMSBgcGo9YCAoRmFicmljOiAuLi4vc2Vzc2lvbnMvPGlkPi9wcm9wb3NhbHMpXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBzZXNzaW9uIGlkIG9yICcnXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RGYWJyaWNQYXlqb2luU2Vzc2lvbklkRnJvbVBqVXJsIChwalVybCkge1xuICBjb25zdCB1ID0gU3RyaW5nKHBqVXJsIHx8ICcnKTtcbiAgY29uc3QgbSA9IHUubWF0Y2goL1xcL3Nlc3Npb25zXFwvKFteLz8jXSspXFwvcHJvcG9zYWxzKD86XFw/fCN8JCkvKTtcbiAgcmV0dXJuIG0gPyBkZWNvZGVVUklDb21wb25lbnQobVsxXSkgOiAnJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzYyAtIE91dHB1dCBkZXNjcmlwdG9yIGZyb20gQml0Y29pbiBDb3JlIHNjYW50eG91dHNldFxuICogQHJldHVybnMge3sgY2hhaW46IG51bWJlciwgaW5kZXg6IG51bWJlciB9fG51bGx9XG4gKi9cbmZ1bmN0aW9uIGNoYWluSW5kZXhGcm9tRGVzY3JpcHRvciAoZGVzYykge1xuICBjb25zdCBtID0gU3RyaW5nKGRlc2MgfHwgJycpLm1hdGNoKC9cXC8oWzAxXSlcXC8oXFxkKylcXCkoPzojfCQpLyk7XG4gIGlmICghbSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7IGNoYWluOiBOdW1iZXIobVsxXSksIGluZGV4OiBOdW1iZXIobVsyXSkgfTtcbn1cblxuZnVuY3Rpb24gZXN0aW1hdGVQMndwa2hGZWVTYXRzIChpbnB1dENvdW50LCBvdXRwdXRDb3VudCwgc2F0UGVyVmJ5dGUpIHtcbiAgY29uc3QgcmF0ZSA9IE1hdGgubWF4KDEsIE51bWJlcihzYXRQZXJWYnl0ZSB8fCAyKSk7XG4gIGNvbnN0IHZieXRlcyA9IDEwICsgaW5wdXRDb3VudCAqIDY4ICsgb3V0cHV0Q291bnQgKiAzMTtcbiAgcmV0dXJuIE1hdGguY2VpbCh2Ynl0ZXMgKiByYXRlKTtcbn1cblxuLyoqXG4gKiBQT1NUIG9yaWdpbmFsIFBTQlQgKGJhc2U2NCkgdG8gQklQNzggcmVjZWl2ZXI7IHJldHVybnMgcHJvcG9zZWQgUFNCVCBiYXNlNjQgYm9keS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwalVybFxuICogQHBhcmFtIHtzdHJpbmd9IHBzYnRCYXNlNjRcbiAqIEBwYXJhbSB7eyBmZXRjaEZuPzogdHlwZW9mIGZldGNoIH19IFtvcHRzXVxuICovXG5hc3luYyBmdW5jdGlvbiBwb3N0UGF5am9pblByb3Bvc2FsIChwalVybCwgcHNidEJhc2U2NCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGZldGNoRm4gPSBvcHRzLmZldGNoRm4gfHwgKHR5cGVvZiBmZXRjaCA9PT0gJ2Z1bmN0aW9uJyA/IGZldGNoLmJpbmQodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IHdpbmRvdykgOiBudWxsKTtcbiAgaWYgKCFmZXRjaEZuKSB0aHJvdyBuZXcgRXJyb3IoJ2ZldGNoIGlzIG5vdCBhdmFpbGFibGUgZm9yIFBheWpvaW4gUE9TVC4nKTtcbiAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2hGbihTdHJpbmcocGpVcmwpLnRyaW0oKSwge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJyB9LFxuICAgIGJvZHk6IFN0cmluZyhwc2J0QmFzZTY0IHx8ICcnKVxuICB9KTtcbiAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gIGlmICghcmVzLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXlqb2luIGVuZHBvaW50IHJldHVybmVkICR7cmVzLnN0YXR1c306ICR7dGV4dC5zbGljZSgwLCA0MDApfWApO1xuICB9XG4gIGNvbnN0IHRyaW1tZWQgPSBTdHJpbmcodGV4dCB8fCAnJykudHJpbSgpO1xuICBpZiAoIXRyaW1tZWQpIHRocm93IG5ldyBFcnJvcignRW1wdHkgUGF5am9pbiByZXNwb25zZS4nKTtcbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbi8qKlxuICogUHJlZmVyIEVsZWN0cm9uIG1haW4tcHJvY2VzcyBQT1NUIChubyBDT1JTKSB3aGVuIGB3aW5kb3cuZmFicmljRGVza3RvcC5wYXlqb2luUG9zdGAgZXhpc3RzLlxuICovXG5hc3luYyBmdW5jdGlvbiBwb3N0UGF5am9pblByb3Bvc2FsV2l0aERlc2t0b3BGYWxsYmFjayAocGpVcmwsIHBzYnRCYXNlNjQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBnID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IG51bGwpO1xuICBjb25zdCBkZXNrID0gZyAmJiBnLmZhYnJpY0Rlc2t0b3AgJiYgdHlwZW9mIGcuZmFicmljRGVza3RvcC5wYXlqb2luUG9zdCA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZy5mYWJyaWNEZXNrdG9wLnBheWpvaW5Qb3N0XG4gICAgOiBudWxsO1xuICBpZiAoZGVzaykge1xuICAgIHJldHVybiBkZXNrKFN0cmluZyhwalVybCB8fCAnJykudHJpbSgpLCBTdHJpbmcocHNidEJhc2U2NCB8fCAnJykpO1xuICB9XG4gIHJldHVybiBwb3N0UGF5am9pblByb3Bvc2FsKHBqVXJsLCBwc2J0QmFzZTY0LCBvcHRzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0c1xuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMueHBydlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMueHB1YlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubmV0d29ya05hbWUgLSBIdWIgbmV0d29yayBpZCAocmVndGVzdCwgbWFpbm5ldCwg4oCmKVxuICogQHBhcmFtIHtBcnJheTx7IHR4aWQ6IHN0cmluZywgdm91dDogbnVtYmVyLCBhbW91bnQ/OiBudW1iZXIsIGFtb3VudFNhdHM/OiBudW1iZXIsIGRlc2M/OiBzdHJpbmcgfT59IG9wdHMudXR4b3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLnBheUFkZHJlc3MgLSBCSVAyMSBhZGRyZXNzIChvdXRwdXQpXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0cy5zZW5kQW1vdW50U2F0cyAtIHZhbHVlIHRvIHBheWVlIG91dHB1dFxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuY2hhbmdlQWRkcmVzc1xuICogQHBhcmFtIHsodHhpZDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz59IG9wdHMuZ2V0UHJldlR4SGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMuZmVlU2F0UGVyVmJ5dGVdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmFueW9uZUNhblBheUFsbF0gLSBpZiB0cnVlLCBzaWduIHdpdGggU0lHSEFTSF9BTEx8QU5ZT05FQ0FOUEFZIHNvIGEgcmVjZWl2ZXIgbWF5IGFkZCBpbnB1dHMgd2l0aG91dCBjaGFuZ2luZyBvdXRwdXRzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7IHBzYnRCYXNlNjQ6IHN0cmluZywgb3VySW5wdXRJbmRpY2VzOiBudW1iZXJbXSwgdXNlZFV0eG9zOiBvYmplY3RbXSB9Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRPcmlnaW5hbFNpZ25lZFBheWpvaW5Qc2J0IChvcHRzID0ge30pIHtcbiAgY29uc3QgeHBydiA9IFN0cmluZyhvcHRzLnhwcnYgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgeHB1YiA9IFN0cmluZyhvcHRzLnhwdWIgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgcGF5QWRkcmVzcyA9IFN0cmluZyhvcHRzLnBheUFkZHJlc3MgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgY2hhbmdlQWRkcmVzcyA9IFN0cmluZyhvcHRzLmNoYW5nZUFkZHJlc3MgfHwgJycpLnRyaW0oKTtcbiAgY29uc3Qgc2VuZEFtb3VudFNhdHMgPSBNYXRoLnJvdW5kKE51bWJlcihvcHRzLnNlbmRBbW91bnRTYXRzIHx8IDApKTtcbiAgY29uc3QgdXR4b3MgPSBBcnJheS5pc0FycmF5KG9wdHMudXR4b3MpID8gb3B0cy51dHhvcyA6IFtdO1xuICBjb25zdCBnZXRQcmV2VHhIZXggPSBvcHRzLmdldFByZXZUeEhleDtcbiAgY29uc3QgbmV0d29yayA9IG5ldHdvcmtGcm9tTmFtZShvcHRzLm5ldHdvcmtOYW1lKTtcbiAgY29uc3QgZmVlU2F0UGVyVmJ5dGUgPSBOdW1iZXIob3B0cy5mZWVTYXRQZXJWYnl0ZSB8fCAyKTtcbiAgY29uc3QgYW55b25lQ2FuUGF5QWxsID0gISFvcHRzLmFueW9uZUNhblBheUFsbDtcbiAgY29uc3Qgc2lnaGFzaFR5cGVzID0gYW55b25lQ2FuUGF5QWxsID8gW1NJR0hBU0hfQUxMX0FOWU9ORUNBTlBBWV0gOiBbYml0Y29pbi5UcmFuc2FjdGlvbi5TSUdIQVNIX0FMTF07XG5cbiAgaWYgKCF4cHJ2IHx8ICF4cHViKSB0aHJvdyBuZXcgRXJyb3IoJ0V4dGVuZGVkIHByaXZhdGUgYW5kIHB1YmxpYyBrZXlzIGFyZSByZXF1aXJlZCBmb3IgbG9jYWwgUGF5am9pbi4nKTtcbiAgaWYgKCFwYXlBZGRyZXNzIHx8ICFjaGFuZ2VBZGRyZXNzKSB0aHJvdyBuZXcgRXJyb3IoJ1BheWVlIGFuZCBjaGFuZ2UgYWRkcmVzc2VzIGFyZSByZXF1aXJlZC4nKTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc2VuZEFtb3VudFNhdHMpIHx8IHNlbmRBbW91bnRTYXRzIDw9IDApIHRocm93IG5ldyBFcnJvcignc2VuZEFtb3VudFNhdHMgbXVzdCBiZSA+IDAuJyk7XG4gIGlmICh0eXBlb2YgZ2V0UHJldlR4SGV4ICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRXJyb3IoJ2dldFByZXZUeEhleCBpcyByZXF1aXJlZC4nKTtcbiAgaWYgKHV0eG9zLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdObyBVVFhPcyBhdmFpbGFibGUgZm9yIHRoaXMgd2FsbGV0LicpO1xuXG4gIGNvbnN0IGRlY29kZU5ldHdvcmsgPSBiaXAzMk5ldHdvcmtGb3JLZXlzKHhwdWIsIG9wdHMubmV0d29ya05hbWUpO1xuICBjb25zdCBiaXAzMiA9IEJJUDMyRmFjdG9yeShlY2MpO1xuICBjb25zdCByb290ID0gYmlwMzIuZnJvbUJhc2U1OCh4cHJ2LCBkZWNvZGVOZXR3b3JrKTtcblxuICBjb25zdCBzb3J0ZWQgPSB1dHhvc1xuICAgIC5tYXAoKHUpID0+ICh7XG4gICAgICAuLi51LFxuICAgICAgX3NhdHM6IE1hdGgucm91bmQoTnVtYmVyKHUuYW1vdW50U2F0cyAhPSBudWxsID8gdS5hbW91bnRTYXRzIDogKHUuYW1vdW50ICE9IG51bGwgPyB1LmFtb3VudCAqIFNBVFNfUEVSX0JUQyA6IDApKSlcbiAgICB9KSlcbiAgICAuZmlsdGVyKCh1KSA9PiB1LnR4aWQgJiYgTnVtYmVyLmlzRmluaXRlKHUudm91dCkgJiYgdS5fc2F0cyA+IDApXG4gICAgLnNvcnQoKGEsIGIpID0+IGIuX3NhdHMgLSBhLl9zYXRzKTtcblxuICBjb25zdCBkdXN0TGltaXQgPSA1NDY7XG4gIC8qKiBHcmVlZHkgbGFyZ2VzdC1maXJzdDsgZmVlIGFsd2F5cyB1c2VzIGFjdHVhbCBwaWNrZWQgaW5wdXQgY291bnQuICovXG4gIGxldCBwaWNrZWQgPSBbXTtcbiAgbGV0IHN1bSA9IDA7XG4gIGxldCBvdXRwdXRzID0gbnVsbDtcbiAgZm9yIChjb25zdCB1IG9mIHNvcnRlZCkge1xuICAgIHBpY2tlZC5wdXNoKHUpO1xuICAgIHN1bSArPSB1Ll9zYXRzO1xuICAgIGNvbnN0IGZlZTIgPSBlc3RpbWF0ZVAyd3BraEZlZVNhdHMocGlja2VkLmxlbmd0aCwgMiwgZmVlU2F0UGVyVmJ5dGUpO1xuICAgIGNvbnN0IGNoYW5nZTIgPSBzdW0gLSBzZW5kQW1vdW50U2F0cyAtIGZlZTI7XG4gICAgaWYgKGNoYW5nZTIgPj0gZHVzdExpbWl0KSB7XG4gICAgICBvdXRwdXRzID0gW1xuICAgICAgICB7IGFkZHJlc3M6IHBheUFkZHJlc3MsIHZhbHVlOiBzZW5kQW1vdW50U2F0cyB9LFxuICAgICAgICB7IGFkZHJlc3M6IGNoYW5nZUFkZHJlc3MsIHZhbHVlOiBjaGFuZ2UyIH1cbiAgICAgIF07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFvdXRwdXRzKSB7XG4gICAgcGlja2VkID0gW107XG4gICAgc3VtID0gMDtcbiAgICBmb3IgKGNvbnN0IHUgb2Ygc29ydGVkKSB7XG4gICAgICBwaWNrZWQucHVzaCh1KTtcbiAgICAgIHN1bSArPSB1Ll9zYXRzO1xuICAgICAgY29uc3QgZmVlMSA9IGVzdGltYXRlUDJ3cGtoRmVlU2F0cyhwaWNrZWQubGVuZ3RoLCAxLCBmZWVTYXRQZXJWYnl0ZSk7XG4gICAgICBpZiAoc3VtID49IHNlbmRBbW91bnRTYXRzICsgZmVlMSkge1xuICAgICAgICBvdXRwdXRzID0gW3sgYWRkcmVzczogcGF5QWRkcmVzcywgdmFsdWU6IHNlbmRBbW91bnRTYXRzIH1dO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFvdXRwdXRzIHx8IHBpY2tlZC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc3VmZmljaWVudCBmdW5kcyBmb3IgYW1vdW50IHBsdXMgZXN0aW1hdGVkIGZlZSAodHJ5IHNpbmdsZS1vdXRwdXQgYWZ0ZXIgZHVzdCBjaGFuZ2UpLicpO1xuICB9XG5cbiAgY29uc3QgcHNidCA9IG5ldyBiaXRjb2luLlBzYnQoeyBuZXR3b3JrIH0pO1xuICBjb25zdCBvdXJJbnB1dEluZGljZXMgPSBbXTtcbiAgY29uc3QgdXNlZFV0eG9zID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwaWNrZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB1ID0gcGlja2VkW2ldO1xuICAgIGNvbnN0IGhleCA9IGF3YWl0IGdldFByZXZUeEhleChTdHJpbmcodS50eGlkKSk7XG4gICAgaWYgKCFoZXggfHwgIS9eWzAtOWEtZkEtRl0rJC9pLnRlc3QoaGV4KSkgdGhyb3cgbmV3IEVycm9yKGBQcmV2IHR4IGhleCBtaXNzaW5nIGZvciAke3UudHhpZH1gKTtcbiAgICBjb25zdCBwcmV2ID0gYml0Y29pbi5UcmFuc2FjdGlvbi5mcm9tSGV4KGhleCk7XG4gICAgY29uc3Qgb3V0ID0gcHJldi5vdXRzW3Uudm91dF07XG4gICAgaWYgKCFvdXQpIHRocm93IG5ldyBFcnJvcihgdm91dCAke3Uudm91dH0gbWlzc2luZyBmb3IgJHt1LnR4aWR9YCk7XG5cbiAgICBjb25zdCBjaSA9IGNoYWluSW5kZXhGcm9tRGVzY3JpcHRvcih1LmRlc2MpO1xuICAgIGlmICghY2kpIHRocm93IG5ldyBFcnJvcignVVRYTyBtaXNzaW5nIGRlc2NyaXB0b3IgcGF0aCAoY2hhaW4vaW5kZXgpLiBSZWZyZXNoIFVUWE9zIGZyb20gSHViIHdpdGggYSBjdXJyZW50IENvcmUuJyk7XG4gICAgY29uc3QgY2hpbGQgPSByb290LmRlcml2ZShjaS5jaGFpbikuZGVyaXZlKGNpLmluZGV4KTtcbiAgICBjb25zdCBwYXkgPSBiaXRjb2luLnBheW1lbnRzLnAyd3BraCh7IHB1YmtleTogY2hpbGQucHVibGljS2V5LCBuZXR3b3JrIH0pO1xuICAgIGlmICghcGF5Lm91dHB1dCB8fCAhcGF5Lm91dHB1dC5lcXVhbHMob3V0LnNjcmlwdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVzY3JpcHRvciBwYXRoIGRvZXMgbm90IG1hdGNoIFVUWE8gc2NyaXB0IGZvciAnICsgdS50eGlkICsgJzonICsgdS52b3V0KTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dE9wdHMgPSB7XG4gICAgICBoYXNoOiB1LnR4aWQsXG4gICAgICBpbmRleDogdS52b3V0LFxuICAgICAgd2l0bmVzc1V0eG86IHtcbiAgICAgICAgc2NyaXB0OiBvdXQuc2NyaXB0LFxuICAgICAgICB2YWx1ZTogb3V0LnZhbHVlXG4gICAgICB9LFxuICAgICAgYmlwMzJEZXJpdmF0aW9uOiBbe1xuICAgICAgICBtYXN0ZXJGaW5nZXJwcmludDogcm9vdC5maW5nZXJwcmludCxcbiAgICAgICAgcGF0aDogYG0vJHtjaS5jaGFpbn0vJHtjaS5pbmRleH1gLFxuICAgICAgICBwdWJrZXk6IGNoaWxkLnB1YmxpY0tleVxuICAgICAgfV1cbiAgICB9O1xuICAgIGlmIChhbnlvbmVDYW5QYXlBbGwpIGlucHV0T3B0cy5zaWdoYXNoVHlwZSA9IFNJR0hBU0hfQUxMX0FOWU9ORUNBTlBBWTtcbiAgICBwc2J0LmFkZElucHV0KGlucHV0T3B0cyk7XG4gICAgb3VySW5wdXRJbmRpY2VzLnB1c2goaSk7XG4gICAgdXNlZFV0eG9zLnB1c2godSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IG8gb2Ygb3V0cHV0cykge1xuICAgIHBzYnQuYWRkT3V0cHV0KHsgYWRkcmVzczogby5hZGRyZXNzLCB2YWx1ZTogby52YWx1ZSB9KTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHNidC5kYXRhLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoaWxkID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IGRlcnMgPSBwc2J0LmRhdGEuaW5wdXRzW2ldLmJpcDMyRGVyaXZhdGlvbiB8fCBbXTtcbiAgICAgIGNvbnN0IG0gPSBkZXJzWzBdO1xuICAgICAgaWYgKCFtIHx8ICFtLnBhdGgpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgcGFydHMgPSBTdHJpbmcobS5wYXRoKS5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyKSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IGNoYWluID0gTnVtYmVyKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdKTtcbiAgICAgIGNvbnN0IGlkeCA9IE51bWJlcihwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSk7XG4gICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShjaGFpbikgfHwgIU51bWJlci5pc0Zpbml0ZShpZHgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiByb290LmRlcml2ZShjaGFpbikuZGVyaXZlKGlkeCk7XG4gICAgfSkoKTtcbiAgICBpZiAoIWNoaWxkIHx8ICFjaGlsZC5wcml2YXRlS2V5KSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZXJpdmUgc2lnbmluZyBrZXkgZm9yIGlucHV0ICcgKyBpKTtcbiAgICBjb25zdCBrcCA9IGVjcGFpci5mcm9tUHJpdmF0ZUtleShjaGlsZC5wcml2YXRlS2V5KTtcbiAgICBwc2J0LnNpZ25JbnB1dChpLCBrcCwgc2lnaGFzaFR5cGVzKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHNidEJhc2U2NDogcHNidC50b0Jhc2U2NCgpLFxuICAgIG91cklucHV0SW5kaWNlcyxcbiAgICB1c2VkVXR4b3NcbiAgfTtcbn1cblxuLyoqXG4gKiBBZnRlciByZWNlaXZlciByZXR1cm5zIGFuIHVwZGF0ZWQgUFNCVCwgcmUtc2lnbiBvdXIgaW5wdXRzIChpbmRpY2VzIHVuY2hhbmdlZCBmb3IgdHlwaWNhbCBCSVA3OCB2MSkuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHNidEJhc2U2NFxuICogQHBhcmFtIHtudW1iZXJbXX0gb3VySW5wdXRJbmRpY2VzXG4gKiBAcGFyYW0ge3N0cmluZ30geHBydlxuICogQHBhcmFtIHtzdHJpbmd9IHhwdWIgLSBmb3IgbmV0d29yayBkZWNvZGUgb25seVxuICogQHBhcmFtIHtzdHJpbmd9IG5ldHdvcmtOYW1lXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbnlvbmVDYW5QYXlBbGxdIC0gbXVzdCBtYXRjaCBvcmlnaW5hbCBQU0JUIHNpZ2hhc2ggd2hlbiByZS1zaWduaW5nIGFmdGVyIHBheWpvaW4gcm91bmQtdHJpcFxuICovXG5mdW5jdGlvbiBzaWduT3VyUGF5am9pbklucHV0cyAocHNidEJhc2U2NCwgb3VySW5wdXRJbmRpY2VzLCB4cHJ2LCB4cHViLCBuZXR3b3JrTmFtZSwgYW55b25lQ2FuUGF5QWxsID0gZmFsc2UpIHtcbiAgY29uc3QgbmV0d29yayA9IG5ldHdvcmtGcm9tTmFtZShuZXR3b3JrTmFtZSk7XG4gIGNvbnN0IGRlY29kZU5ldHdvcmsgPSBiaXAzMk5ldHdvcmtGb3JLZXlzKHhwdWIsIG5ldHdvcmtOYW1lKTtcbiAgY29uc3QgYmlwMzIgPSBCSVAzMkZhY3RvcnkoZWNjKTtcbiAgY29uc3Qgcm9vdCA9IGJpcDMyLmZyb21CYXNlNTgoU3RyaW5nKHhwcnYpLnRyaW0oKSwgZGVjb2RlTmV0d29yayk7XG4gIGNvbnN0IHBzYnQgPSBiaXRjb2luLlBzYnQuZnJvbUJhc2U2NChTdHJpbmcocHNidEJhc2U2NCB8fCAnJykudHJpbSgpLCB7IG5ldHdvcmsgfSk7XG4gIGNvbnN0IHNpZ2hhc2hUeXBlcyA9IGFueW9uZUNhblBheUFsbCA/IFtTSUdIQVNIX0FMTF9BTllPTkVDQU5QQVldIDogW2JpdGNvaW4uVHJhbnNhY3Rpb24uU0lHSEFTSF9BTExdO1xuXG4gIGZvciAoY29uc3QgaWR4IG9mIG91cklucHV0SW5kaWNlcykge1xuICAgIGlmIChpZHggPCAwIHx8IGlkeCA+PSBwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCkgY29udGludWU7XG4gICAgY29uc3QgZGVycyA9IHBzYnQuZGF0YS5pbnB1dHNbaWR4XS5iaXAzMkRlcml2YXRpb24gfHwgW107XG4gICAgY29uc3QgbSA9IGRlcnNbMF07XG4gICAgaWYgKCFtIHx8ICFtLnBhdGgpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHBhcnRzID0gU3RyaW5nKG0ucGF0aCkuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgY29uc3QgY2hhaW4gPSBOdW1iZXIocGFydHNbcGFydHMubGVuZ3RoIC0gMl0pO1xuICAgIGNvbnN0IGkgPSBOdW1iZXIocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pO1xuICAgIGNvbnN0IGNoaWxkID0gcm9vdC5kZXJpdmUoY2hhaW4pLmRlcml2ZShpKTtcbiAgICBjb25zdCBrcCA9IGVjcGFpci5mcm9tUHJpdmF0ZUtleShjaGlsZC5wcml2YXRlS2V5KTtcbiAgICBpZiAoYW55b25lQ2FuUGF5QWxsKSB7XG4gICAgICBwc2J0LnVwZGF0ZUlucHV0KGlkeCwgeyBzaWdoYXNoVHlwZTogU0lHSEFTSF9BTExfQU5ZT05FQ0FOUEFZIH0pO1xuICAgIH1cbiAgICBwc2J0LnNpZ25JbnB1dChpZHgsIGtwLCBzaWdoYXNoVHlwZXMpO1xuICB9XG5cbiAgcmV0dXJuIHBzYnQudG9CYXNlNjQoKTtcbn1cblxuZnVuY3Rpb24gZmluYWxpemVBbmRFeHRyYWN0SGV4IChwc2J0QmFzZTY0LCBuZXR3b3JrTmFtZSkge1xuICBjb25zdCBuZXR3b3JrID0gbmV0d29ya0Zyb21OYW1lKG5ldHdvcmtOYW1lKTtcbiAgY29uc3QgcHNidCA9IGJpdGNvaW4uUHNidC5mcm9tQmFzZTY0KFN0cmluZyhwc2J0QmFzZTY0IHx8ICcnKS50cmltKCksIHsgbmV0d29yayB9KTtcbiAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICByZXR1cm4gcHNidC5leHRyYWN0VHJhbnNhY3Rpb24oKS50b0hleCgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFyc2VCaXRjb2luVXJpRm9yUGF5am9pbixcbiAgZXh0cmFjdEZhYnJpY1BheWpvaW5TZXNzaW9uSWRGcm9tUGpVcmwsXG4gIGNoYWluSW5kZXhGcm9tRGVzY3JpcHRvcixcbiAgcG9zdFBheWpvaW5Qcm9wb3NhbCxcbiAgcG9zdFBheWpvaW5Qcm9wb3NhbFdpdGhEZXNrdG9wRmFsbGJhY2ssXG4gIGJ1aWxkT3JpZ2luYWxTaWduZWRQYXlqb2luUHNidCxcbiAgc2lnbk91clBheWpvaW5JbnB1dHMsXG4gIGZpbmFsaXplQW5kRXh0cmFjdEhleCxcbiAgZXN0aW1hdGVQMndwa2hGZWVTYXRzLFxuICBTSUdIQVNIX0FMTF9BTllPTkVDQU5QQVlcbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZSIsInQiLCJyIiwiY2FsbCIsIm5leHQiLCJpc05hTiIsImxlbmd0aCIsInZhbHVlIiwiZG9uZSIsIlR5cGVFcnJvciIsIm93bktleXMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJfcmVnZW5lcmF0b3IiLCJuIiwidG9TdHJpbmdUYWciLCJjIiwiR2VuZXJhdG9yIiwidSIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImwiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZ2V0UHJvdG90eXBlT2YiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImRpc3BsYXlOYW1lIiwidyIsIm0iLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbiIsIkYiLCJzIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfbmV4dCIsIl90aHJvdyIsImJpdGNvaW4iLCJyZXF1aXJlIiwiZWNjIiwiQklQMzJGYWN0b3J5IiwiZWNwYWlyTW9kIiwiRUNQYWlyRmFjdG9yeSIsImluaXRFY2NMaWIiLCJlY3BhaXIiLCJfcmVxdWlyZSIsIlNBVFNfUEVSX0JUQyIsIlNJR0hBU0hfQUxMX0FOWU9ORUNBTlBBWSIsIlRyYW5zYWN0aW9uIiwiU0lHSEFTSF9BTEwiLCJTSUdIQVNIX0FOWU9ORUNBTlBBWSIsIm5ldHdvcmtGcm9tTmFtZSIsInVuZGVmaW5lZCIsInRvTG93ZXJDYXNlIiwibmV0d29ya3MiLCJyZWd0ZXN0IiwidGVzdG5ldCIsImJpcDMyTmV0d29ya0ZvcktleXMiLCJ4cHViIiwibmV0d29ya05hbWUiLCJ4cyIsInN0YXJ0c1dpdGgiLCJwYXJzZUJpdGNvaW5VcmlGb3JQYXlqb2luIiwidXJpIiwidHJpbSIsIm5vU2NoZW1lIiwicmVwbGFjZSIsInEiLCJpbmRleE9mIiwiYWRkcmVzc1BhcnQiLCJzcGxpdCIsImFkZHJlc3MiLCJzZWFyY2giLCJwYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJwalJhdyIsImdldCIsInBqVXJsIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiXyIsImFtb3VudFN0ciIsImFtb3VudEJ0YyIsIk5hTiIsImFtb3VudFNhdHMiLCJpc0Zpbml0ZSIsIk1hdGgiLCJyb3VuZCIsImxhYmVsIiwibWVzc2FnZSIsImV4dHJhY3RGYWJyaWNQYXlqb2luU2Vzc2lvbklkRnJvbVBqVXJsIiwibWF0Y2giLCJjaGFpbkluZGV4RnJvbURlc2NyaXB0b3IiLCJkZXNjIiwiY2hhaW4iLCJpbmRleCIsImVzdGltYXRlUDJ3cGtoRmVlU2F0cyIsImlucHV0Q291bnQiLCJvdXRwdXRDb3VudCIsInNhdFBlclZieXRlIiwicmF0ZSIsIm1heCIsInZieXRlcyIsImNlaWwiLCJwb3N0UGF5am9pblByb3Bvc2FsIiwiX3giLCJfeDIiLCJfcG9zdFBheWpvaW5Qcm9wb3NhbCIsIl9jYWxsZWUiLCJwc2J0QmFzZTY0Iiwib3B0cyIsImZldGNoRm4iLCJyZXMiLCJ0ZXh0IiwidHJpbW1lZCIsIl9hcmdzIiwiX2NvbnRleHQiLCJmZXRjaCIsImdsb2JhbFRoaXMiLCJ3aW5kb3ciLCJFcnJvciIsIm1ldGhvZCIsImhlYWRlcnMiLCJib2R5Iiwib2siLCJjb25jYXQiLCJzdGF0dXMiLCJwb3N0UGF5am9pblByb3Bvc2FsV2l0aERlc2t0b3BGYWxsYmFjayIsIl94MyIsIl94NCIsIl9wb3N0UGF5am9pblByb3Bvc2FsV2l0aERlc2t0b3BGYWxsYmFjayIsIl9jYWxsZWUyIiwiZyIsImRlc2siLCJfYXJnczIiLCJfY29udGV4dDIiLCJmYWJyaWNEZXNrdG9wIiwicGF5am9pblBvc3QiLCJidWlsZE9yaWdpbmFsU2lnbmVkUGF5am9pblBzYnQiLCJfYnVpbGRPcmlnaW5hbFNpZ25lZFBheWpvaW5Qc2J0IiwiX2NhbGxlZTMiLCJ4cHJ2IiwicGF5QWRkcmVzcyIsImNoYW5nZUFkZHJlc3MiLCJzZW5kQW1vdW50U2F0cyIsInV0eG9zIiwiZ2V0UHJldlR4SGV4IiwibmV0d29yayIsImZlZVNhdFBlclZieXRlIiwiYW55b25lQ2FuUGF5QWxsIiwic2lnaGFzaFR5cGVzIiwiZGVjb2RlTmV0d29yayIsImJpcDMyIiwicm9vdCIsInNvcnRlZCIsImR1c3RMaW1pdCIsInBpY2tlZCIsInN1bSIsIm91dHB1dHMiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiX3UyIiwiZmVlMiIsImNoYW5nZTIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZmVlMSIsInBzYnQiLCJvdXJJbnB1dEluZGljZXMiLCJ1c2VkVXR4b3MiLCJfdSIsImhleCIsInByZXYiLCJvdXQiLCJjaSIsImNoaWxkIiwicGF5IiwiaW5wdXRPcHRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsIl9sb29wIiwiX2kiLCJfYXJnczQiLCJfdCIsIl90MiIsIl9jb250ZXh0NCIsImZyb21CYXNlNTgiLCJtYXAiLCJfc2F0cyIsImFtb3VudCIsInR4aWQiLCJ2b3V0Iiwic29ydCIsImIiLCJQc2J0IiwiZnJvbUhleCIsIm91dHMiLCJkZXJpdmUiLCJwYXltZW50cyIsInAyd3BraCIsInB1YmtleSIsInB1YmxpY0tleSIsIm91dHB1dCIsImVxdWFscyIsInNjcmlwdCIsImhhc2giLCJ3aXRuZXNzVXR4byIsImJpcDMyRGVyaXZhdGlvbiIsIm1hc3RlckZpbmdlcnByaW50IiwiZmluZ2VycHJpbnQiLCJwYXRoIiwic2lnaGFzaFR5cGUiLCJhZGRJbnB1dCIsImFkZE91dHB1dCIsImVyciIsImtwIiwiX2NvbnRleHQzIiwiZGVycyIsImRhdGEiLCJpbnB1dHMiLCJwYXJ0cyIsIkJvb2xlYW4iLCJpZHgiLCJwcml2YXRlS2V5IiwiZnJvbVByaXZhdGVLZXkiLCJzaWduSW5wdXQiLCJ0b0Jhc2U2NCIsInNpZ25PdXJQYXlqb2luSW5wdXRzIiwiZnJvbUJhc2U2NCIsIl9pdGVyYXRvciIsIl9zdGVwIiwidXBkYXRlSW5wdXQiLCJmaW5hbGl6ZUFuZEV4dHJhY3RIZXgiLCJmaW5hbGl6ZUFsbElucHV0cyIsImV4dHJhY3RUcmFuc2FjdGlvbiIsInRvSGV4IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/payjoinBrowserWallet.js\n\n}")},"./functions/peerIdentity.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelper(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t[\"return\"] || t[\"return\"](); } finally { if (u) throw o; } } }; }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _require = __webpack_require__(/*! ./isLikelyBip32ExtendedKey */ \"./functions/isLikelyBip32ExtendedKey.js\"),\n isLikelyBip32ExtendedKey = _require.isLikelyBip32ExtendedKey;\nfunction normalizeFabricPeerAddress(a) {\n var s = String(a || '').trim();\n if (!s) return '';\n return s.includes(':') ? s : \"\".concat(s, \":7777\");\n}\n\n/**\n * Normalize user-entered Fabric TCP peer addresses: trim, strip http(s)/ws(s)/fabric:// prefixes,\n * drop path/query fragments (paste from browser), then apply {@link normalizeFabricPeerAddress}.\n * Hub validates with `^[^:]+:\\d+$` (host must not contain unbracketed colons except the port separator).\n *\n * @param {string} raw\n * @returns {string}\n */\nfunction normalizePeerAddressInput(raw) {\n var s = String(raw || '').trim();\n if (!s) return '';\n s = s.replace(/^wss?:\\/\\//i, '').replace(/^https?:\\/\\//i, '').replace(/^fabric:\\/\\//i, '').replace(/^tcp:\\/\\//i, '');\n var slash = s.indexOf('/');\n if (slash !== -1) s = s.slice(0, slash);\n var q = s.indexOf('?');\n if (q !== -1) s = s.slice(0, q);\n var h = s.indexOf('#');\n if (h !== -1) s = s.slice(0, h);\n s = s.trim();\n if (!s) return '';\n return normalizeFabricPeerAddress(s);\n}\n\n/**\n * @param {object|null|undefined} p\n * @returns {string}\n */\nfunction extractPeerXpub(p) {\n if (!p || _typeof(p) !== 'object') return '';\n var m = p.metadata && _typeof(p.metadata) === 'object' ? p.metadata : {};\n var cands = [m.xpub, p.xpub];\n for (var i = 0; i < cands.length; i++) {\n var c = cands[i];\n if (c && isLikelyBip32ExtendedKey(String(c))) return String(c).trim();\n }\n return '';\n}\n\n/**\n * @param {string} s\n * @param {number} [head]\n * @param {number} [tail]\n * @returns {string}\n */\nfunction shortenPublicId(s) {\n var head = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;\n var tail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 8;\n var str = String(s || '').trim();\n if (!str) return '';\n if (str.length <= head + tail + 1) return str;\n return \"\".concat(str.slice(0, head), \"\\u2026\").concat(str.slice(-tail));\n}\nfunction sameLogicalFabricPeer(a, b) {\n if (!a || !b) return false;\n var aid = String(a.id || '').trim();\n var bid = String(b.id || '').trim();\n var aad = String(a.address || '').trim();\n var bad = String(b.address || '').trim();\n if (aid && bid && aid === bid) return true;\n var an = aad ? normalizeFabricPeerAddress(aad) : '';\n var bn = bad ? normalizeFabricPeerAddress(bad) : '';\n if (an && bn && an === bn) return true;\n if (aid && (aid === bad || aid === bn)) return true;\n if (bid && (bid === aad || bid === an)) return true;\n var xa = extractPeerXpub(a);\n var xb = extractPeerXpub(b);\n if (xa && xb && xa === xb) return true;\n var ma = a && a.metadata && a.metadata.fabricPeerId != null ? String(a.metadata.fabricPeerId).trim() : '';\n var mb = b && b.metadata && b.metadata.fabricPeerId != null ? String(b.metadata.fabricPeerId).trim() : '';\n if (ma && mb && ma === mb) return true;\n return false;\n}\nfunction mergeFabricPeerRows(a, b) {\n var connected = (a && a.status) === 'connected' || (b && b.status) === 'connected';\n var status = connected ? 'connected' : a && a.status || b && b.status || 'unknown';\n var sa = Number(a && a.score);\n var sb = Number(b && b.score);\n var score = Number.isFinite(sa) && Number.isFinite(sb) ? Math.max(sa, sb) : Number.isFinite(sa) ? sa : Number.isFinite(sb) ? sb : a && a.score != null ? a.score : b && b.score;\n var ma = Number(a && a.misbehavior);\n var mb = Number(b && b.misbehavior);\n var misbehavior = Number.isFinite(ma) || Number.isFinite(mb) ? Math.max(Number.isFinite(ma) ? ma : 0, Number.isFinite(mb) ? mb : 0) : a && a.misbehavior != null ? a.misbehavior : b && b.misbehavior;\n var na = a && a.nickname && String(a.nickname).trim();\n var nb = b && b.nickname && String(b.nickname).trim();\n var nickname = na || nb || null;\n var id = a && a.id || b && b.id;\n var address = a && a.address || b && b.address;\n var metaA = a && a.metadata && _typeof(a.metadata) === 'object' ? a.metadata : {};\n var metaB = b && b.metadata && _typeof(b.metadata) === 'object' ? b.metadata : {};\n var metadata = _objectSpread(_objectSpread({}, metaB), metaA);\n return _objectSpread(_objectSpread(_objectSpread({}, b), a), {}, {\n id: id || a.id || b.id,\n address: address || a.address || b.address,\n status: status,\n score: score,\n misbehavior: misbehavior,\n nickname: nickname || a.nickname || b.nickname,\n metadata: metadata\n });\n}\n\n/**\n * Collapse duplicate Fabric TCP peer snapshots (same id, same host:port, or same xpub).\n * @param {object[]} peers\n * @returns {object[]}\n */\nfunction dedupeFabricPeers(peers) {\n var arr = Array.isArray(peers) ? peers.filter(function (p) {\n return p && _typeof(p) === 'object';\n }) : [];\n var out = [];\n var consumed = new Set();\n for (var i = 0; i < arr.length; i++) {\n if (consumed.has(i)) continue;\n var merged = _objectSpread({}, arr[i]);\n for (var j = i + 1; j < arr.length; j++) {\n if (consumed.has(j)) continue;\n if (sameLogicalFabricPeer(merged, arr[j])) {\n merged = mergeFabricPeerRows(merged, arr[j]);\n consumed.add(j);\n }\n }\n out.push(merged);\n consumed.add(i);\n }\n return out;\n}\nvar FABRIC_IDENTITY_HRP_PREFIX = 'id1';\n\n/**\n * @param {string} s\n * @returns {boolean}\n */\nfunction isLikelyFabricBech32Id(s) {\n var t = String(s || '').trim();\n if (!t.startsWith(FABRIC_IDENTITY_HRP_PREFIX)) return false;\n if (t.length < 16) return false;\n return /^id1[02-9ac-hj-np-z]+$/.test(t);\n}\n\n/**\n * Canonical Fabric P2P identity string (bech32m, {@link Identity#toString} / hub fabricPeerId) when present.\n * @param {object|null|undefined} peer\n * @returns {string}\n */\nfunction fabricPeerBech32Id(peer) {\n if (!peer || _typeof(peer) !== 'object') return '';\n var m = peer.metadata && _typeof(peer.metadata) === 'object' ? peer.metadata : {};\n var fromMeta = m.fabricPeerId != null ? String(m.fabricPeerId).trim() : '';\n if (fromMeta && isLikelyFabricBech32Id(fromMeta)) return fromMeta;\n var fromId = peer.id != null ? String(peer.id).trim() : '';\n if (fromId && isLikelyFabricBech32Id(fromId)) return fromId;\n if (fromMeta) return fromMeta;\n return fromId || '';\n}\n\n/**\n * True when s looks like a compressed secp256k1 pubkey hex (33 bytes).\n * @param {string} s\n * @returns {boolean}\n */\nfunction isLikelyCompressedPubkeyHex(s) {\n var t = String(s || '').trim().toLowerCase();\n return /^(02|03)[0-9a-f]{64}$/.test(t);\n}\n\n/**\n * Dial-pin identity: compressed pubkey hex when present on the peer row.\n * Checked fields: publicKey, pubkey, hex-shaped id,\n * metadata.fabricPeerId / metadata.publicKey.\n * @param {object|null|undefined} peer\n * @returns {string} lowercase hex or ''\n */\nfunction fabricPeerPubkeyHex(peer) {\n if (!peer || _typeof(peer) !== 'object') return '';\n var m = peer.metadata && _typeof(peer.metadata) === 'object' ? peer.metadata : {};\n var cands = [peer.publicKey, peer.pubkey, m.publicKey, m.pubkey, m.fabricPeerId, peer.id];\n for (var i = 0; i < cands.length; i++) {\n var c = cands[i] != null ? String(cands[i]).trim() : '';\n if (isLikelyCompressedPubkeyHex(c)) return c.toLowerCase();\n }\n return '';\n}\n\n/**\n * Left-hand side for a native peering string: hex pubkey preferred, else bech32/id.\n * @param {object|null|undefined} peer\n * @returns {string}\n */\nfunction fabricPeerDialIdentity(peer) {\n return fabricPeerPubkeyHex(peer) || fabricPeerBech32Id(peer) || '';\n}\n\n/**\n * @param {object} peer - Fabric P2P row from GetNetworkStatus\n * @returns {string}\n */\nfunction fabricPeerPrimaryLabel(peer) {\n if (!peer || _typeof(peer) !== 'object') return '';\n var nick = peer.nickname && String(peer.nickname).trim();\n if (nick) return nick;\n var fb = fabricPeerBech32Id(peer);\n if (fb && isLikelyFabricBech32Id(fb)) return shortenPublicId(fb, 14, 12);\n var x = extractPeerXpub(peer);\n if (x) return shortenPublicId(x, 12, 10);\n if (peer.alias && String(peer.alias).trim()) return String(peer.alias).trim();\n if (fb) return shortenPublicId(fb, 14, 12);\n var id = peer.id && String(peer.id).trim();\n if (id) return shortenPublicId(id, 12, 10);\n var addr = peer.address && String(peer.address).trim();\n return addr ? shortenPublicId(addr, 14, 8) : 'peer';\n}\n\n/**\n * Merge hub signaling WebRTC entries with local mesh rows by peer id (one row per id).\n * @param {object[]} signaling\n * @param {object[]} local\n * @param {string|null} selfPeerId\n * @returns {{ id: string, signaling: object|null, local: object|null }[]}\n */\nfunction buildWebrtcCombinedRows(signaling, local, selfPeerId) {\n var self = selfPeerId != null ? String(selfPeerId) : '';\n var byId = new Map();\n var sig = Array.isArray(signaling) ? signaling : [];\n var loc = Array.isArray(local) ? local : [];\n for (var i = 0; i < sig.length; i++) {\n var p = sig[i];\n var id = p && p.id != null ? String(p.id) : '';\n if (!id || self && id === self) continue;\n byId.set(id, {\n id: id,\n signaling: p,\n local: null\n });\n }\n for (var j = 0; j < loc.length; j++) {\n var _p = loc[j];\n var _id = _p && _p.id != null ? String(_p.id) : '';\n if (!_id) continue;\n var prev = byId.get(_id) || {\n id: _id,\n signaling: null,\n local: null\n };\n prev.local = _p;\n byId.set(_id, prev);\n }\n var rows = Array.from(byId.values());\n rows.sort(function (a, b) {\n var la = a.local && a.local.status === 'connected' ? 1 : 0;\n var lb = b.local && b.local.status === 'connected' ? 1 : 0;\n if (la !== lb) return lb - la;\n var sa = a.signaling ? 1 : 0;\n var sb = b.signaling ? 1 : 0;\n if (sa !== sb) return sb - sa;\n return a.id.localeCompare(b.id);\n });\n return rows;\n}\n\n/**\n * @param {object|null} signaling\n * @param {object|null} local\n * @returns {string}\n */\nfunction webrtcRowPrimaryLabel(signaling, local) {\n var meta = signaling && signaling.metadata && _typeof(signaling.metadata) === 'object' ? signaling.metadata : {};\n var x = meta.xpub && isLikelyBip32ExtendedKey(meta.xpub) ? String(meta.xpub).trim() : '';\n if (x) return shortenPublicId(x, 12, 10);\n var fp = meta.fabricPeerId && String(meta.fabricPeerId).trim();\n if (fp) return shortenPublicId(fp, 12, 10);\n var id = signaling && signaling.id || local && local.id || '';\n return id ? shortenPublicId(String(id), 14, 10) : 'peer';\n}\nvar WEBRTC_TRANSPORT = 'webrtc';\n\n/**\n * Map a combined WebRTC row into the same peer row shape the Peers page uses for TCP Fabric peers,\n * so browser mesh links appear in one list with score / status / disconnect.\n * @param {{ id: string, signaling: object|null, local: object|null }} row\n * @param {{ score?: number, misbehavior?: number }|null|undefined} rep\n * @returns {object}\n */\nfunction webrtcCombinedRowToFabricPeerShape(row, rep) {\n var peerId = row && row.id != null ? String(row.id) : '';\n var sig = row && row.signaling;\n var loc = row && row.local;\n var meta = sig && sig.metadata && _typeof(sig.metadata) === 'object' ? _objectSpread({}, sig.metadata) : {};\n meta.transport = WEBRTC_TRANSPORT;\n meta.webrtcSignalingId = peerId;\n var meshConnected = loc && loc.status === 'connected';\n var status = meshConnected ? 'connected' : loc && loc.status || (sig ? 'signaling' : 'unknown');\n var rs = rep && rep.score != null ? Number(rep.score) : NaN;\n var rm = rep && rep.misbehavior != null ? Number(rep.misbehavior) : NaN;\n return {\n id: peerId,\n address: \"webrtc:\".concat(peerId),\n status: status,\n score: Number.isFinite(rs) ? rs : 100,\n misbehavior: Number.isFinite(rm) ? rm : 0,\n nickname: null,\n metadata: meta,\n lastSeen: loc && loc.lastSeen || sig && (sig.lastSeen || sig.registeredAt || sig.connectedAt) || null\n };\n}\n\n/**\n * @param {object[]} combined - {@link buildWebrtcCombinedRows}\n * @param {(peerId: string) => { score?: number, misbehavior?: number }|null|undefined} repLookup\n * @returns {object[]}\n */\nfunction webrtcCombinedToFabricPeerRows(combined, repLookup) {\n var rows = Array.isArray(combined) ? combined : [];\n var fn = typeof repLookup === 'function' ? repLookup : function () {\n return null;\n };\n return rows.map(function (r) {\n return webrtcCombinedRowToFabricPeerShape(r, fn(r && r.id != null ? String(r.id) : ''));\n });\n}\n\n/**\n * Sort TCP Fabric peers (primary first) then merge with WebRTC mesh rows by score / connection.\n * @param {object[]} tcpPeersSorted - already deduped + authority-sorted TCP rows\n * @param {object[]} webrtcAsFabric - {@link webrtcCombinedToFabricPeerRows}\n * @param {string} primaryNorm - normalized primary TCP address (optional)\n * @returns {object[]}\n */\nfunction mergeTcpAndWebrtcPeerRows(tcpPeersSorted, webrtcAsFabric, primaryNorm) {\n var tcp = Array.isArray(tcpPeersSorted) ? tcpPeersSorted : [];\n var w = Array.isArray(webrtcAsFabric) ? webrtcAsFabric : [];\n var pn = String(primaryNorm || '').trim();\n var isMesh = function isMesh(p) {\n return !!(p && p.metadata && p.metadata.transport === WEBRTC_TRANSPORT);\n };\n var scoreOf = function scoreOf(p) {\n var s = Number(p && p.score);\n return Number.isFinite(s) ? s : 0;\n };\n var connectedRank = function connectedRank(p) {\n return (p && p.status) === 'connected' ? 1 : 0;\n };\n var isPrimaryTcp = function isPrimaryTcp(p) {\n if (!p || isMesh(p) || !pn) return false;\n var addr = normalizeFabricPeerAddress(p.address);\n return addr === pn || String(p.address || '') === pn;\n };\n var all = [].concat(_toConsumableArray(tcp), _toConsumableArray(w));\n all.sort(function (a, b) {\n var ap = isPrimaryTcp(a);\n var bp = isPrimaryTcp(b);\n if (ap !== bp) return ap ? -1 : 1;\n var sc = scoreOf(b) - scoreOf(a);\n if (sc !== 0) return sc;\n var cc = connectedRank(b) - connectedRank(a);\n if (cc !== 0) return cc;\n return fabricPeerPrimaryLabel(a).localeCompare(fabricPeerPrimaryLabel(b));\n });\n return all;\n}\nfunction isWebrtcTransportPeerRow(peer) {\n return !!(peer && peer.metadata && peer.metadata.transport === WEBRTC_TRANSPORT);\n}\n\n/**\n * Prefer a real Fabric TCP host:port; otherwise WebRTC signaling origin (window.location.host shape).\n * Browser clients will later dial the web origin over WebRTC using the same identity left-hand side;\n * hubs remain signaling until mesh gossip can survive hub loss.\n * @param {object|null|undefined} peer\n * @param {string} [signalingHostPort]\n * @returns {string}\n */\nfunction peerPublicConnectionTargetHostPort(peer, signalingHostPort) {\n var addr = peer && peer.address != null ? String(peer.address).trim() : '';\n if (addr && !addr.toLowerCase().startsWith('webrtc:')) {\n return normalizeFabricPeerAddress(addr);\n }\n var sig = String(signalingHostPort || '').trim();\n if (sig) return sig;\n return '';\n}\n\n/**\n * True when the peering endpoint is WebRTC signaling (no Fabric TCP address on the row).\n * @param {object|null|undefined} peer\n * @returns {boolean}\n */\nfunction peerPeeringEndpointIsSignaling(peer) {\n if (!peer || _typeof(peer) !== 'object') return false;\n if (isWebrtcTransportPeerRow(peer)) return true;\n var addr = peer.address != null ? String(peer.address).trim() : '';\n return !addr || addr.toLowerCase().startsWith('webrtc:');\n}\n\n/**\n * Native Fabric peering string for clipboard / CLI dial pins:\n * pubkey@host:port (compressed hex when known; bech32/id fallback).\n * Endpoint is TCP host:port, or the web signaling host for WebRTC-only rows.\n * @param {object|null|undefined} peer\n * @param {string} [signalingHostPort]\n * @returns {string}\n */\nfunction peerNativePeeringString(peer, signalingHostPort) {\n var pk = fabricPeerDialIdentity(peer);\n var target = peerPublicConnectionTargetHostPort(peer, signalingHostPort);\n if (!pk && !target) return '';\n if (!target) return pk;\n if (!pk) return \"@\".concat(target);\n return \"\".concat(pk, \"@\").concat(target);\n}\n\n/**\n * @deprecated Prefer {@link peerNativePeeringString} (hex-first dial pin).\n * @param {object|null|undefined} peer\n * @param {string} [signalingHostPort]\n * @returns {string}\n */\nfunction peerConnectionPubkeyAtHostPort(peer, signalingHostPort) {\n return peerNativePeeringString(peer, signalingHostPort);\n}\n\n/**\n * True when this row represents an active Fabric TCP session where the hub learned the peer’s bech32 id from the wire.\n * @param {object|null|undefined} peer\n * @returns {boolean}\n */\nfunction fabricP2PIdentityConfirmed(peer) {\n if (!peer || _typeof(peer) !== 'object') return false;\n if (isWebrtcTransportPeerRow(peer)) return false;\n return peer.status === 'connected' && !!fabricPeerBech32Id(peer);\n}\n\n/**\n * Merge rows that share the same {@link fabricPeerBech32Id} (and related keys) so TCP + mesh duplicates show one score/inventory surface.\n * @param {object[]} peers\n * @returns {object[]}\n */\nfunction consolidateUnifiedPeersByFabricId(peers) {\n var arr = Array.isArray(peers) ? peers.filter(function (p) {\n return p && _typeof(p) === 'object';\n }) : [];\n var groups = new Map();\n var _iterator = _createForOfIteratorHelper(arr),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var p = _step.value;\n var fid = fabricPeerBech32Id(p);\n var key = fid || '';\n if (!key) {\n if (p.metadata && p.metadata.transport === WEBRTC_TRANSPORT) {\n var sid = p.metadata.webrtcSignalingId != null ? String(p.metadata.webrtcSignalingId) : String(p.id || '');\n key = sid ? \"webrtc:\".concat(sid) : \"anon:\".concat(String(p.address || p.id || ''));\n } else {\n key = String(p.address || p.id || '') || \"anon:\".concat(arr.indexOf(p));\n }\n }\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key).push(p);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n var out = [];\n var _iterator2 = _createForOfIteratorHelper(groups),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _step2$value = _slicedToArray(_step2.value, 2),\n rows = _step2$value[1];\n if (!rows.length) continue;\n var merged = rows[0];\n for (var i = 1; i < rows.length; i++) merged = mergeFabricPeerRows(merged, rows[i]);\n var tcpRow = rows.find(function (r) {\n var a = r && r.address != null ? String(r.address) : '';\n return a && !a.startsWith('webrtc:');\n });\n if (tcpRow && tcpRow.address) {\n merged = _objectSpread(_objectSpread({}, merged), {}, {\n address: tcpRow.address\n });\n if (merged.metadata && merged.metadata.transport === WEBRTC_TRANSPORT) {\n var md = _objectSpread({}, merged.metadata);\n delete md.transport;\n merged = _objectSpread(_objectSpread({}, merged), {}, {\n metadata: md\n });\n }\n }\n out.push(merged);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n return out;\n}\nmodule.exports = {\n normalizeFabricPeerAddress: normalizeFabricPeerAddress,\n normalizePeerAddressInput: normalizePeerAddressInput,\n extractPeerXpub: extractPeerXpub,\n shortenPublicId: shortenPublicId,\n isLikelyFabricBech32Id: isLikelyFabricBech32Id,\n isLikelyCompressedPubkeyHex: isLikelyCompressedPubkeyHex,\n fabricPeerBech32Id: fabricPeerBech32Id,\n fabricPeerPubkeyHex: fabricPeerPubkeyHex,\n fabricPeerDialIdentity: fabricPeerDialIdentity,\n peerPublicConnectionTargetHostPort: peerPublicConnectionTargetHostPort,\n peerPeeringEndpointIsSignaling: peerPeeringEndpointIsSignaling,\n peerNativePeeringString: peerNativePeeringString,\n peerConnectionPubkeyAtHostPort: peerConnectionPubkeyAtHostPort,\n fabricP2PIdentityConfirmed: fabricP2PIdentityConfirmed,\n consolidateUnifiedPeersByFabricId: consolidateUnifiedPeersByFabricId,\n dedupeFabricPeers: dedupeFabricPeers,\n fabricPeerPrimaryLabel: fabricPeerPrimaryLabel,\n buildWebrtcCombinedRows: buildWebrtcCombinedRows,\n webrtcRowPrimaryLabel: webrtcRowPrimaryLabel,\n webrtcCombinedRowToFabricPeerShape: webrtcCombinedRowToFabricPeerShape,\n webrtcCombinedToFabricPeerRows: webrtcCombinedToFabricPeerRows,\n mergeTcpAndWebrtcPeerRows: mergeTcpAndWebrtcPeerRows,\n isWebrtcTransportPeerRow: isWebrtcTransportPeerRow,\n WEBRTC_TRANSPORT: WEBRTC_TRANSPORT\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEVBQXpCQSx5QkFBeUI7RUFDekJPLGVBQWUsRUFBZkEsZUFBZTtFQUNmTyxlQUFlLEVBQWZBLGVBQWU7RUFDZjhDLHNCQUFzQixFQUF0QkEsc0JBQXNCO0VBQ3RCTSwyQkFBMkIsRUFBM0JBLDJCQUEyQjtFQUMzQkosa0JBQWtCLEVBQWxCQSxrQkFBa0I7RUFDbEJNLG1CQUFtQixFQUFuQkEsbUJBQW1CO0VBQ25CRyxzQkFBc0IsRUFBdEJBLHNCQUFzQjtFQUN0QmdFLGtDQUFrQyxFQUFsQ0Esa0NBQWtDO0VBQ2xDRSw4QkFBOEIsRUFBOUJBLDhCQUE4QjtFQUM5QkMsdUJBQXVCLEVBQXZCQSx1QkFBdUI7RUFDdkJHLDhCQUE4QixFQUE5QkEsOEJBQThCO0VBQzlCQywwQkFBMEIsRUFBMUJBLDBCQUEwQjtFQUMxQkMsaUNBQWlDLEVBQWpDQSxpQ0FBaUM7RUFDakM5RixpQkFBaUIsRUFBakJBLGlCQUFpQjtFQUNqQnVCLHNCQUFzQixFQUF0QkEsc0JBQXNCO0VBQ3RCTSx1QkFBdUIsRUFBdkJBLHVCQUF1QjtFQUN2QmtCLHFCQUFxQixFQUFyQkEscUJBQXFCO0VBQ3JCSSxrQ0FBa0MsRUFBbENBLGtDQUFrQztFQUNsQ2EsOEJBQThCLEVBQTlCQSw4QkFBOEI7RUFDOUJLLHlCQUF5QixFQUF6QkEseUJBQXlCO0VBQ3pCZ0Isd0JBQXdCLEVBQXhCQSx3QkFBd0I7RUFDeEJuQyxnQkFBZ0IsRUFBaEJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL3BlZXJJZGVudGl0eS5qcz9hNjA2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgeyBpc0xpa2VseUJpcDMyRXh0ZW5kZWRLZXkgfSA9IHJlcXVpcmUoJy4vaXNMaWtlbHlCaXAzMkV4dGVuZGVkS2V5Jyk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZhYnJpY1BlZXJBZGRyZXNzIChhKSB7XG4gIGNvbnN0IHMgPSBTdHJpbmcoYSB8fCAnJykudHJpbSgpO1xuICBpZiAoIXMpIHJldHVybiAnJztcbiAgcmV0dXJuIHMuaW5jbHVkZXMoJzonKSA/IHMgOiBgJHtzfTo3Nzc3YDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdXNlci1lbnRlcmVkIEZhYnJpYyBUQ1AgcGVlciBhZGRyZXNzZXM6IHRyaW0sIHN0cmlwIGh0dHAocykvd3MocykvZmFicmljOi8vIHByZWZpeGVzLFxuICogZHJvcCBwYXRoL3F1ZXJ5IGZyYWdtZW50cyAocGFzdGUgZnJvbSBicm93c2VyKSwgdGhlbiBhcHBseSB7QGxpbmsgbm9ybWFsaXplRmFicmljUGVlckFkZHJlc3N9LlxuICogSHViIHZhbGlkYXRlcyB3aXRoIGBeW146XSs6XFxkKyRgIChob3N0IG11c3Qgbm90IGNvbnRhaW4gdW5icmFja2V0ZWQgY29sb25zIGV4Y2VwdCB0aGUgcG9ydCBzZXBhcmF0b3IpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYXdcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBlZXJBZGRyZXNzSW5wdXQgKHJhdykge1xuICBsZXQgcyA9IFN0cmluZyhyYXcgfHwgJycpLnRyaW0oKTtcbiAgaWYgKCFzKSByZXR1cm4gJyc7XG4gIHMgPSBzLnJlcGxhY2UoL153c3M/OlxcL1xcLy9pLCAnJylcbiAgICAucmVwbGFjZSgvXmh0dHBzPzpcXC9cXC8vaSwgJycpXG4gICAgLnJlcGxhY2UoL15mYWJyaWM6XFwvXFwvL2ksICcnKVxuICAgIC5yZXBsYWNlKC9edGNwOlxcL1xcLy9pLCAnJyk7XG4gIGNvbnN0IHNsYXNoID0gcy5pbmRleE9mKCcvJyk7XG4gIGlmIChzbGFzaCAhPT0gLTEpIHMgPSBzLnNsaWNlKDAsIHNsYXNoKTtcbiAgY29uc3QgcSA9IHMuaW5kZXhPZignPycpO1xuICBpZiAocSAhPT0gLTEpIHMgPSBzLnNsaWNlKDAsIHEpO1xuICBjb25zdCBoID0gcy5pbmRleE9mKCcjJyk7XG4gIGlmIChoICE9PSAtMSkgcyA9IHMuc2xpY2UoMCwgaCk7XG4gIHMgPSBzLnRyaW0oKTtcbiAgaWYgKCFzKSByZXR1cm4gJyc7XG4gIHJldHVybiBub3JtYWxpemVGYWJyaWNQZWVyQWRkcmVzcyhzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdHxudWxsfHVuZGVmaW5lZH0gcFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFBlZXJYcHViIChwKSB7XG4gIGlmICghcCB8fCB0eXBlb2YgcCAhPT0gJ29iamVjdCcpIHJldHVybiAnJztcbiAgY29uc3QgbSA9IHAubWV0YWRhdGEgJiYgdHlwZW9mIHAubWV0YWRhdGEgPT09ICdvYmplY3QnID8gcC5tZXRhZGF0YSA6IHt9O1xuICBjb25zdCBjYW5kcyA9IFttLnhwdWIsIHAueHB1Yl07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2FuZHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjID0gY2FuZHNbaV07XG4gICAgaWYgKGMgJiYgaXNMaWtlbHlCaXAzMkV4dGVuZGVkS2V5KFN0cmluZyhjKSkpIHJldHVybiBTdHJpbmcoYykudHJpbSgpO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc1xuICogQHBhcmFtIHtudW1iZXJ9IFtoZWFkXVxuICogQHBhcmFtIHtudW1iZXJ9IFt0YWlsXVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc2hvcnRlblB1YmxpY0lkIChzLCBoZWFkID0gMTAsIHRhaWwgPSA4KSB7XG4gIGNvbnN0IHN0ciA9IFN0cmluZyhzIHx8ICcnKS50cmltKCk7XG4gIGlmICghc3RyKSByZXR1cm4gJyc7XG4gIGlmIChzdHIubGVuZ3RoIDw9IGhlYWQgKyB0YWlsICsgMSkgcmV0dXJuIHN0cjtcbiAgcmV0dXJuIGAke3N0ci5zbGljZSgwLCBoZWFkKX3igKYke3N0ci5zbGljZSgtdGFpbCl9YDtcbn1cblxuZnVuY3Rpb24gc2FtZUxvZ2ljYWxGYWJyaWNQZWVyIChhLCBiKSB7XG4gIGlmICghYSB8fCAhYikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBhaWQgPSBTdHJpbmcoYS5pZCB8fCAnJykudHJpbSgpO1xuICBjb25zdCBiaWQgPSBTdHJpbmcoYi5pZCB8fCAnJykudHJpbSgpO1xuICBjb25zdCBhYWQgPSBTdHJpbmcoYS5hZGRyZXNzIHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IGJhZCA9IFN0cmluZyhiLmFkZHJlc3MgfHwgJycpLnRyaW0oKTtcbiAgaWYgKGFpZCAmJiBiaWQgJiYgYWlkID09PSBiaWQpIHJldHVybiB0cnVlO1xuICBjb25zdCBhbiA9IGFhZCA/IG5vcm1hbGl6ZUZhYnJpY1BlZXJBZGRyZXNzKGFhZCkgOiAnJztcbiAgY29uc3QgYm4gPSBiYWQgPyBub3JtYWxpemVGYWJyaWNQZWVyQWRkcmVzcyhiYWQpIDogJyc7XG4gIGlmIChhbiAmJiBibiAmJiBhbiA9PT0gYm4pIHJldHVybiB0cnVlO1xuICBpZiAoYWlkICYmIChhaWQgPT09IGJhZCB8fCBhaWQgPT09IGJuKSkgcmV0dXJuIHRydWU7XG4gIGlmIChiaWQgJiYgKGJpZCA9PT0gYWFkIHx8IGJpZCA9PT0gYW4pKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgeGEgPSBleHRyYWN0UGVlclhwdWIoYSk7XG4gIGNvbnN0IHhiID0gZXh0cmFjdFBlZXJYcHViKGIpO1xuICBpZiAoeGEgJiYgeGIgJiYgeGEgPT09IHhiKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgbWEgPSBhICYmIGEubWV0YWRhdGEgJiYgYS5tZXRhZGF0YS5mYWJyaWNQZWVySWQgIT0gbnVsbCA/IFN0cmluZyhhLm1ldGFkYXRhLmZhYnJpY1BlZXJJZCkudHJpbSgpIDogJyc7XG4gIGNvbnN0IG1iID0gYiAmJiBiLm1ldGFkYXRhICYmIGIubWV0YWRhdGEuZmFicmljUGVlcklkICE9IG51bGwgPyBTdHJpbmcoYi5tZXRhZGF0YS5mYWJyaWNQZWVySWQpLnRyaW0oKSA6ICcnO1xuICBpZiAobWEgJiYgbWIgJiYgbWEgPT09IG1iKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBtZXJnZUZhYnJpY1BlZXJSb3dzIChhLCBiKSB7XG4gIGNvbnN0IGNvbm5lY3RlZCA9IChhICYmIGEuc3RhdHVzKSA9PT0gJ2Nvbm5lY3RlZCcgfHwgKGIgJiYgYi5zdGF0dXMpID09PSAnY29ubmVjdGVkJztcbiAgY29uc3Qgc3RhdHVzID0gY29ubmVjdGVkID8gJ2Nvbm5lY3RlZCcgOiAoKGEgJiYgYS5zdGF0dXMpIHx8IChiICYmIGIuc3RhdHVzKSB8fCAndW5rbm93bicpO1xuICBjb25zdCBzYSA9IE51bWJlcihhICYmIGEuc2NvcmUpO1xuICBjb25zdCBzYiA9IE51bWJlcihiICYmIGIuc2NvcmUpO1xuICBjb25zdCBzY29yZSA9IChOdW1iZXIuaXNGaW5pdGUoc2EpICYmIE51bWJlci5pc0Zpbml0ZShzYikpXG4gICAgPyBNYXRoLm1heChzYSwgc2IpXG4gICAgOiAoTnVtYmVyLmlzRmluaXRlKHNhKSA/IHNhIDogKE51bWJlci5pc0Zpbml0ZShzYikgPyBzYiA6IChhICYmIGEuc2NvcmUgIT0gbnVsbCA/IGEuc2NvcmUgOiBiICYmIGIuc2NvcmUpKSk7XG4gIGNvbnN0IG1hID0gTnVtYmVyKGEgJiYgYS5taXNiZWhhdmlvcik7XG4gIGNvbnN0IG1iID0gTnVtYmVyKGIgJiYgYi5taXNiZWhhdmlvcik7XG4gIGNvbnN0IG1pc2JlaGF2aW9yID0gKE51bWJlci5pc0Zpbml0ZShtYSkgfHwgTnVtYmVyLmlzRmluaXRlKG1iKSlcbiAgICA/IE1hdGgubWF4KE51bWJlci5pc0Zpbml0ZShtYSkgPyBtYSA6IDAsIE51bWJlci5pc0Zpbml0ZShtYikgPyBtYiA6IDApXG4gICAgOiAoYSAmJiBhLm1pc2JlaGF2aW9yICE9IG51bGwgPyBhLm1pc2JlaGF2aW9yIDogYiAmJiBiLm1pc2JlaGF2aW9yKTtcbiAgY29uc3QgbmEgPSBhICYmIGEubmlja25hbWUgJiYgU3RyaW5nKGEubmlja25hbWUpLnRyaW0oKTtcbiAgY29uc3QgbmIgPSBiICYmIGIubmlja25hbWUgJiYgU3RyaW5nKGIubmlja25hbWUpLnRyaW0oKTtcbiAgY29uc3Qgbmlja25hbWUgPSBuYSB8fCBuYiB8fCBudWxsO1xuICBjb25zdCBpZCA9IChhICYmIGEuaWQpIHx8IChiICYmIGIuaWQpO1xuICBjb25zdCBhZGRyZXNzID0gKGEgJiYgYS5hZGRyZXNzKSB8fCAoYiAmJiBiLmFkZHJlc3MpO1xuICBjb25zdCBtZXRhQSA9IGEgJiYgYS5tZXRhZGF0YSAmJiB0eXBlb2YgYS5tZXRhZGF0YSA9PT0gJ29iamVjdCcgPyBhLm1ldGFkYXRhIDoge307XG4gIGNvbnN0IG1ldGFCID0gYiAmJiBiLm1ldGFkYXRhICYmIHR5cGVvZiBiLm1ldGFkYXRhID09PSAnb2JqZWN0JyA/IGIubWV0YWRhdGEgOiB7fTtcbiAgY29uc3QgbWV0YWRhdGEgPSB7IC4uLm1ldGFCLCAuLi5tZXRhQSB9O1xuICByZXR1cm4ge1xuICAgIC4uLmIsXG4gICAgLi4uYSxcbiAgICBpZDogaWQgfHwgYS5pZCB8fCBiLmlkLFxuICAgIGFkZHJlc3M6IGFkZHJlc3MgfHwgYS5hZGRyZXNzIHx8IGIuYWRkcmVzcyxcbiAgICBzdGF0dXMsXG4gICAgc2NvcmUsXG4gICAgbWlzYmVoYXZpb3IsXG4gICAgbmlja25hbWU6IG5pY2tuYW1lIHx8IGEubmlja25hbWUgfHwgYi5uaWNrbmFtZSxcbiAgICBtZXRhZGF0YVxuICB9O1xufVxuXG4vKipcbiAqIENvbGxhcHNlIGR1cGxpY2F0ZSBGYWJyaWMgVENQIHBlZXIgc25hcHNob3RzIChzYW1lIGlkLCBzYW1lIGhvc3Q6cG9ydCwgb3Igc2FtZSB4cHViKS5cbiAqIEBwYXJhbSB7b2JqZWN0W119IHBlZXJzXG4gKiBAcmV0dXJucyB7b2JqZWN0W119XG4gKi9cbmZ1bmN0aW9uIGRlZHVwZUZhYnJpY1BlZXJzIChwZWVycykge1xuICBjb25zdCBhcnIgPSBBcnJheS5pc0FycmF5KHBlZXJzKSA/IHBlZXJzLmZpbHRlcigocCkgPT4gcCAmJiB0eXBlb2YgcCA9PT0gJ29iamVjdCcpIDogW107XG4gIGNvbnN0IG91dCA9IFtdO1xuICBjb25zdCBjb25zdW1lZCA9IG5ldyBTZXQoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY29uc3VtZWQuaGFzKGkpKSBjb250aW51ZTtcbiAgICBsZXQgbWVyZ2VkID0geyAuLi5hcnJbaV0gfTtcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBhcnIubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChjb25zdW1lZC5oYXMoaikpIGNvbnRpbnVlO1xuICAgICAgaWYgKHNhbWVMb2dpY2FsRmFicmljUGVlcihtZXJnZWQsIGFycltqXSkpIHtcbiAgICAgICAgbWVyZ2VkID0gbWVyZ2VGYWJyaWNQZWVyUm93cyhtZXJnZWQsIGFycltqXSk7XG4gICAgICAgIGNvbnN1bWVkLmFkZChqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0LnB1c2gobWVyZ2VkKTtcbiAgICBjb25zdW1lZC5hZGQoaSk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuY29uc3QgRkFCUklDX0lERU5USVRZX0hSUF9QUkVGSVggPSAnaWQxJztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTGlrZWx5RmFicmljQmVjaDMySWQgKHMpIHtcbiAgY29uc3QgdCA9IFN0cmluZyhzIHx8ICcnKS50cmltKCk7XG4gIGlmICghdC5zdGFydHNXaXRoKEZBQlJJQ19JREVOVElUWV9IUlBfUFJFRklYKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodC5sZW5ndGggPCAxNikgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gL15pZDFbMDItOWFjLWhqLW5wLXpdKyQvLnRlc3QodCk7XG59XG5cbi8qKlxuICogQ2Fub25pY2FsIEZhYnJpYyBQMlAgaWRlbnRpdHkgc3RyaW5nIChiZWNoMzJtLCB7QGxpbmsgSWRlbnRpdHkjdG9TdHJpbmd9IC8gaHViIDxjb2RlPmZhYnJpY1BlZXJJZDwvY29kZT4pIHdoZW4gcHJlc2VudC5cbiAqIEBwYXJhbSB7b2JqZWN0fG51bGx8dW5kZWZpbmVkfSBwZWVyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmYWJyaWNQZWVyQmVjaDMySWQgKHBlZXIpIHtcbiAgaWYgKCFwZWVyIHx8IHR5cGVvZiBwZWVyICE9PSAnb2JqZWN0JykgcmV0dXJuICcnO1xuICBjb25zdCBtID0gcGVlci5tZXRhZGF0YSAmJiB0eXBlb2YgcGVlci5tZXRhZGF0YSA9PT0gJ29iamVjdCcgPyBwZWVyLm1ldGFkYXRhIDoge307XG4gIGNvbnN0IGZyb21NZXRhID0gbS5mYWJyaWNQZWVySWQgIT0gbnVsbCA/IFN0cmluZyhtLmZhYnJpY1BlZXJJZCkudHJpbSgpIDogJyc7XG4gIGlmIChmcm9tTWV0YSAmJiBpc0xpa2VseUZhYnJpY0JlY2gzMklkKGZyb21NZXRhKSkgcmV0dXJuIGZyb21NZXRhO1xuICBjb25zdCBmcm9tSWQgPSBwZWVyLmlkICE9IG51bGwgPyBTdHJpbmcocGVlci5pZCkudHJpbSgpIDogJyc7XG4gIGlmIChmcm9tSWQgJiYgaXNMaWtlbHlGYWJyaWNCZWNoMzJJZChmcm9tSWQpKSByZXR1cm4gZnJvbUlkO1xuICBpZiAoZnJvbU1ldGEpIHJldHVybiBmcm9tTWV0YTtcbiAgcmV0dXJuIGZyb21JZCB8fCAnJztcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gPGNvZGU+czwvY29kZT4gbG9va3MgbGlrZSBhIGNvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmtleSBoZXggKDMzIGJ5dGVzKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNMaWtlbHlDb21wcmVzc2VkUHVia2V5SGV4IChzKSB7XG4gIGNvbnN0IHQgPSBTdHJpbmcocyB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAvXigwMnwwMylbMC05YS1mXXs2NH0kLy50ZXN0KHQpO1xufVxuXG4vKipcbiAqIERpYWwtcGluIGlkZW50aXR5OiBjb21wcmVzc2VkIHB1YmtleSBoZXggd2hlbiBwcmVzZW50IG9uIHRoZSBwZWVyIHJvdy5cbiAqIENoZWNrZWQgZmllbGRzOiA8Y29kZT5wdWJsaWNLZXk8L2NvZGU+LCA8Y29kZT5wdWJrZXk8L2NvZGU+LCBoZXgtc2hhcGVkIDxjb2RlPmlkPC9jb2RlPixcbiAqIDxjb2RlPm1ldGFkYXRhLmZhYnJpY1BlZXJJZDwvY29kZT4gLyA8Y29kZT5tZXRhZGF0YS5wdWJsaWNLZXk8L2NvZGU+LlxuICogQHBhcmFtIHtvYmplY3R8bnVsbHx1bmRlZmluZWR9IHBlZXJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGxvd2VyY2FzZSBoZXggb3IgJydcbiAqL1xuZnVuY3Rpb24gZmFicmljUGVlclB1YmtleUhleCAocGVlcikge1xuICBpZiAoIXBlZXIgfHwgdHlwZW9mIHBlZXIgIT09ICdvYmplY3QnKSByZXR1cm4gJyc7XG4gIGNvbnN0IG0gPSBwZWVyLm1ldGFkYXRhICYmIHR5cGVvZiBwZWVyLm1ldGFkYXRhID09PSAnb2JqZWN0JyA/IHBlZXIubWV0YWRhdGEgOiB7fTtcbiAgY29uc3QgY2FuZHMgPSBbXG4gICAgcGVlci5wdWJsaWNLZXksXG4gICAgcGVlci5wdWJrZXksXG4gICAgbS5wdWJsaWNLZXksXG4gICAgbS5wdWJrZXksXG4gICAgbS5mYWJyaWNQZWVySWQsXG4gICAgcGVlci5pZFxuICBdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYyA9IGNhbmRzW2ldICE9IG51bGwgPyBTdHJpbmcoY2FuZHNbaV0pLnRyaW0oKSA6ICcnO1xuICAgIGlmIChpc0xpa2VseUNvbXByZXNzZWRQdWJrZXlIZXgoYykpIHJldHVybiBjLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIExlZnQtaGFuZCBzaWRlIGZvciBhIG5hdGl2ZSBwZWVyaW5nIHN0cmluZzogaGV4IHB1YmtleSBwcmVmZXJyZWQsIGVsc2UgYmVjaDMyL2lkLlxuICogQHBhcmFtIHtvYmplY3R8bnVsbHx1bmRlZmluZWR9IHBlZXJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZhYnJpY1BlZXJEaWFsSWRlbnRpdHkgKHBlZXIpIHtcbiAgcmV0dXJuIGZhYnJpY1BlZXJQdWJrZXlIZXgocGVlcikgfHwgZmFicmljUGVlckJlY2gzMklkKHBlZXIpIHx8ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBwZWVyIC0gRmFicmljIFAyUCByb3cgZnJvbSBHZXROZXR3b3JrU3RhdHVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmYWJyaWNQZWVyUHJpbWFyeUxhYmVsIChwZWVyKSB7XG4gIGlmICghcGVlciB8fCB0eXBlb2YgcGVlciAhPT0gJ29iamVjdCcpIHJldHVybiAnJztcbiAgY29uc3QgbmljayA9IHBlZXIubmlja25hbWUgJiYgU3RyaW5nKHBlZXIubmlja25hbWUpLnRyaW0oKTtcbiAgaWYgKG5pY2spIHJldHVybiBuaWNrO1xuICBjb25zdCBmYiA9IGZhYnJpY1BlZXJCZWNoMzJJZChwZWVyKTtcbiAgaWYgKGZiICYmIGlzTGlrZWx5RmFicmljQmVjaDMySWQoZmIpKSByZXR1cm4gc2hvcnRlblB1YmxpY0lkKGZiLCAxNCwgMTIpO1xuICBjb25zdCB4ID0gZXh0cmFjdFBlZXJYcHViKHBlZXIpO1xuICBpZiAoeCkgcmV0dXJuIHNob3J0ZW5QdWJsaWNJZCh4LCAxMiwgMTApO1xuICBpZiAocGVlci5hbGlhcyAmJiBTdHJpbmcocGVlci5hbGlhcykudHJpbSgpKSByZXR1cm4gU3RyaW5nKHBlZXIuYWxpYXMpLnRyaW0oKTtcbiAgaWYgKGZiKSByZXR1cm4gc2hvcnRlblB1YmxpY0lkKGZiLCAxNCwgMTIpO1xuICBjb25zdCBpZCA9IHBlZXIuaWQgJiYgU3RyaW5nKHBlZXIuaWQpLnRyaW0oKTtcbiAgaWYgKGlkKSByZXR1cm4gc2hvcnRlblB1YmxpY0lkKGlkLCAxMiwgMTApO1xuICBjb25zdCBhZGRyID0gcGVlci5hZGRyZXNzICYmIFN0cmluZyhwZWVyLmFkZHJlc3MpLnRyaW0oKTtcbiAgcmV0dXJuIGFkZHIgPyBzaG9ydGVuUHVibGljSWQoYWRkciwgMTQsIDgpIDogJ3BlZXInO1xufVxuXG4vKipcbiAqIE1lcmdlIGh1YiBzaWduYWxpbmcgV2ViUlRDIGVudHJpZXMgd2l0aCBsb2NhbCBtZXNoIHJvd3MgYnkgcGVlciBpZCAob25lIHJvdyBwZXIgaWQpLlxuICogQHBhcmFtIHtvYmplY3RbXX0gc2lnbmFsaW5nXG4gKiBAcGFyYW0ge29iamVjdFtdfSBsb2NhbFxuICogQHBhcmFtIHtzdHJpbmd8bnVsbH0gc2VsZlBlZXJJZFxuICogQHJldHVybnMge3sgaWQ6IHN0cmluZywgc2lnbmFsaW5nOiBvYmplY3R8bnVsbCwgbG9jYWw6IG9iamVjdHxudWxsIH1bXX1cbiAqL1xuZnVuY3Rpb24gYnVpbGRXZWJydGNDb21iaW5lZFJvd3MgKHNpZ25hbGluZywgbG9jYWwsIHNlbGZQZWVySWQpIHtcbiAgY29uc3Qgc2VsZiA9IHNlbGZQZWVySWQgIT0gbnVsbCA/IFN0cmluZyhzZWxmUGVlcklkKSA6ICcnO1xuICBjb25zdCBieUlkID0gbmV3IE1hcCgpO1xuICBjb25zdCBzaWcgPSBBcnJheS5pc0FycmF5KHNpZ25hbGluZykgPyBzaWduYWxpbmcgOiBbXTtcbiAgY29uc3QgbG9jID0gQXJyYXkuaXNBcnJheShsb2NhbCkgPyBsb2NhbCA6IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNpZy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHAgPSBzaWdbaV07XG4gICAgY29uc3QgaWQgPSBwICYmIHAuaWQgIT0gbnVsbCA/IFN0cmluZyhwLmlkKSA6ICcnO1xuICAgIGlmICghaWQgfHwgKHNlbGYgJiYgaWQgPT09IHNlbGYpKSBjb250aW51ZTtcbiAgICBieUlkLnNldChpZCwgeyBpZCwgc2lnbmFsaW5nOiBwLCBsb2NhbDogbnVsbCB9KTtcbiAgfVxuICBmb3IgKGxldCBqID0gMDsgaiA8IGxvYy5sZW5ndGg7IGorKykge1xuICAgIGNvbnN0IHAgPSBsb2Nbal07XG4gICAgY29uc3QgaWQgPSBwICYmIHAuaWQgIT0gbnVsbCA/IFN0cmluZyhwLmlkKSA6ICcnO1xuICAgIGlmICghaWQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHByZXYgPSBieUlkLmdldChpZCkgfHwgeyBpZCwgc2lnbmFsaW5nOiBudWxsLCBsb2NhbDogbnVsbCB9O1xuICAgIHByZXYubG9jYWwgPSBwO1xuICAgIGJ5SWQuc2V0KGlkLCBwcmV2KTtcbiAgfVxuICBjb25zdCByb3dzID0gQXJyYXkuZnJvbShieUlkLnZhbHVlcygpKTtcbiAgcm93cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgbGEgPSBhLmxvY2FsICYmIGEubG9jYWwuc3RhdHVzID09PSAnY29ubmVjdGVkJyA/IDEgOiAwO1xuICAgIGNvbnN0IGxiID0gYi5sb2NhbCAmJiBiLmxvY2FsLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcgPyAxIDogMDtcbiAgICBpZiAobGEgIT09IGxiKSByZXR1cm4gbGIgLSBsYTtcbiAgICBjb25zdCBzYSA9IGEuc2lnbmFsaW5nID8gMSA6IDA7XG4gICAgY29uc3Qgc2IgPSBiLnNpZ25hbGluZyA/IDEgOiAwO1xuICAgIGlmIChzYSAhPT0gc2IpIHJldHVybiBzYiAtIHNhO1xuICAgIHJldHVybiBhLmlkLmxvY2FsZUNvbXBhcmUoYi5pZCk7XG4gIH0pO1xuICByZXR1cm4gcm93cztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdHxudWxsfSBzaWduYWxpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fG51bGx9IGxvY2FsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiB3ZWJydGNSb3dQcmltYXJ5TGFiZWwgKHNpZ25hbGluZywgbG9jYWwpIHtcbiAgY29uc3QgbWV0YSA9IHNpZ25hbGluZyAmJiBzaWduYWxpbmcubWV0YWRhdGEgJiYgdHlwZW9mIHNpZ25hbGluZy5tZXRhZGF0YSA9PT0gJ29iamVjdCdcbiAgICA/IHNpZ25hbGluZy5tZXRhZGF0YVxuICAgIDoge307XG4gIGNvbnN0IHggPSBtZXRhLnhwdWIgJiYgaXNMaWtlbHlCaXAzMkV4dGVuZGVkS2V5KG1ldGEueHB1YikgPyBTdHJpbmcobWV0YS54cHViKS50cmltKCkgOiAnJztcbiAgaWYgKHgpIHJldHVybiBzaG9ydGVuUHVibGljSWQoeCwgMTIsIDEwKTtcbiAgY29uc3QgZnAgPSBtZXRhLmZhYnJpY1BlZXJJZCAmJiBTdHJpbmcobWV0YS5mYWJyaWNQZWVySWQpLnRyaW0oKTtcbiAgaWYgKGZwKSByZXR1cm4gc2hvcnRlblB1YmxpY0lkKGZwLCAxMiwgMTApO1xuICBjb25zdCBpZCA9IChzaWduYWxpbmcgJiYgc2lnbmFsaW5nLmlkKSB8fCAobG9jYWwgJiYgbG9jYWwuaWQpIHx8ICcnO1xuICByZXR1cm4gaWQgPyBzaG9ydGVuUHVibGljSWQoU3RyaW5nKGlkKSwgMTQsIDEwKSA6ICdwZWVyJztcbn1cblxuY29uc3QgV0VCUlRDX1RSQU5TUE9SVCA9ICd3ZWJydGMnO1xuXG4vKipcbiAqIE1hcCBhIGNvbWJpbmVkIFdlYlJUQyByb3cgaW50byB0aGUgc2FtZSBwZWVyIHJvdyBzaGFwZSB0aGUgUGVlcnMgcGFnZSB1c2VzIGZvciBUQ1AgRmFicmljIHBlZXJzLFxuICogc28gYnJvd3NlciBtZXNoIGxpbmtzIGFwcGVhciBpbiBvbmUgbGlzdCB3aXRoIHNjb3JlIC8gc3RhdHVzIC8gZGlzY29ubmVjdC5cbiAqIEBwYXJhbSB7eyBpZDogc3RyaW5nLCBzaWduYWxpbmc6IG9iamVjdHxudWxsLCBsb2NhbDogb2JqZWN0fG51bGwgfX0gcm93XG4gKiBAcGFyYW0ge3sgc2NvcmU/OiBudW1iZXIsIG1pc2JlaGF2aW9yPzogbnVtYmVyIH18bnVsbHx1bmRlZmluZWR9IHJlcFxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gd2VicnRjQ29tYmluZWRSb3dUb0ZhYnJpY1BlZXJTaGFwZSAocm93LCByZXApIHtcbiAgY29uc3QgcGVlcklkID0gcm93ICYmIHJvdy5pZCAhPSBudWxsID8gU3RyaW5nKHJvdy5pZCkgOiAnJztcbiAgY29uc3Qgc2lnID0gcm93ICYmIHJvdy5zaWduYWxpbmc7XG4gIGNvbnN0IGxvYyA9IHJvdyAmJiByb3cubG9jYWw7XG4gIGNvbnN0IG1ldGEgPSBzaWcgJiYgc2lnLm1ldGFkYXRhICYmIHR5cGVvZiBzaWcubWV0YWRhdGEgPT09ICdvYmplY3QnID8geyAuLi5zaWcubWV0YWRhdGEgfSA6IHt9O1xuICBtZXRhLnRyYW5zcG9ydCA9IFdFQlJUQ19UUkFOU1BPUlQ7XG4gIG1ldGEud2VicnRjU2lnbmFsaW5nSWQgPSBwZWVySWQ7XG4gIGNvbnN0IG1lc2hDb25uZWN0ZWQgPSBsb2MgJiYgbG9jLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCc7XG4gIGNvbnN0IHN0YXR1cyA9IG1lc2hDb25uZWN0ZWQgPyAnY29ubmVjdGVkJyA6IChsb2MgJiYgbG9jLnN0YXR1cykgfHwgKHNpZyA/ICdzaWduYWxpbmcnIDogJ3Vua25vd24nKTtcbiAgY29uc3QgcnMgPSByZXAgJiYgcmVwLnNjb3JlICE9IG51bGwgPyBOdW1iZXIocmVwLnNjb3JlKSA6IE5hTjtcbiAgY29uc3Qgcm0gPSByZXAgJiYgcmVwLm1pc2JlaGF2aW9yICE9IG51bGwgPyBOdW1iZXIocmVwLm1pc2JlaGF2aW9yKSA6IE5hTjtcbiAgcmV0dXJuIHtcbiAgICBpZDogcGVlcklkLFxuICAgIGFkZHJlc3M6IGB3ZWJydGM6JHtwZWVySWR9YCxcbiAgICBzdGF0dXMsXG4gICAgc2NvcmU6IE51bWJlci5pc0Zpbml0ZShycykgPyBycyA6IDEwMCxcbiAgICBtaXNiZWhhdmlvcjogTnVtYmVyLmlzRmluaXRlKHJtKSA/IHJtIDogMCxcbiAgICBuaWNrbmFtZTogbnVsbCxcbiAgICBtZXRhZGF0YTogbWV0YSxcbiAgICBsYXN0U2VlbjogKGxvYyAmJiBsb2MubGFzdFNlZW4pIHx8IChzaWcgJiYgKHNpZy5sYXN0U2VlbiB8fCBzaWcucmVnaXN0ZXJlZEF0IHx8IHNpZy5jb25uZWN0ZWRBdCkpIHx8IG51bGxcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjb21iaW5lZCAtIHtAbGluayBidWlsZFdlYnJ0Y0NvbWJpbmVkUm93c31cbiAqIEBwYXJhbSB7KHBlZXJJZDogc3RyaW5nKSA9PiB7IHNjb3JlPzogbnVtYmVyLCBtaXNiZWhhdmlvcj86IG51bWJlciB9fG51bGx8dW5kZWZpbmVkfSByZXBMb29rdXBcbiAqIEByZXR1cm5zIHtvYmplY3RbXX1cbiAqL1xuZnVuY3Rpb24gd2VicnRjQ29tYmluZWRUb0ZhYnJpY1BlZXJSb3dzIChjb21iaW5lZCwgcmVwTG9va3VwKSB7XG4gIGNvbnN0IHJvd3MgPSBBcnJheS5pc0FycmF5KGNvbWJpbmVkKSA/IGNvbWJpbmVkIDogW107XG4gIGNvbnN0IGZuID0gdHlwZW9mIHJlcExvb2t1cCA9PT0gJ2Z1bmN0aW9uJyA/IHJlcExvb2t1cCA6ICgpID0+IG51bGw7XG4gIHJldHVybiByb3dzLm1hcCgocikgPT4gd2VicnRjQ29tYmluZWRSb3dUb0ZhYnJpY1BlZXJTaGFwZShyLCBmbihyICYmIHIuaWQgIT0gbnVsbCA/IFN0cmluZyhyLmlkKSA6ICcnKSkpO1xufVxuXG4vKipcbiAqIFNvcnQgVENQIEZhYnJpYyBwZWVycyAocHJpbWFyeSBmaXJzdCkgdGhlbiBtZXJnZSB3aXRoIFdlYlJUQyBtZXNoIHJvd3MgYnkgc2NvcmUgLyBjb25uZWN0aW9uLlxuICogQHBhcmFtIHtvYmplY3RbXX0gdGNwUGVlcnNTb3J0ZWQgLSBhbHJlYWR5IGRlZHVwZWQgKyBhdXRob3JpdHktc29ydGVkIFRDUCByb3dzXG4gKiBAcGFyYW0ge29iamVjdFtdfSB3ZWJydGNBc0ZhYnJpYyAtIHtAbGluayB3ZWJydGNDb21iaW5lZFRvRmFicmljUGVlclJvd3N9XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJpbWFyeU5vcm0gLSBub3JtYWxpemVkIHByaW1hcnkgVENQIGFkZHJlc3MgKG9wdGlvbmFsKVxuICogQHJldHVybnMge29iamVjdFtdfVxuICovXG5mdW5jdGlvbiBtZXJnZVRjcEFuZFdlYnJ0Y1BlZXJSb3dzICh0Y3BQZWVyc1NvcnRlZCwgd2VicnRjQXNGYWJyaWMsIHByaW1hcnlOb3JtKSB7XG4gIGNvbnN0IHRjcCA9IEFycmF5LmlzQXJyYXkodGNwUGVlcnNTb3J0ZWQpID8gdGNwUGVlcnNTb3J0ZWQgOiBbXTtcbiAgY29uc3QgdyA9IEFycmF5LmlzQXJyYXkod2VicnRjQXNGYWJyaWMpID8gd2VicnRjQXNGYWJyaWMgOiBbXTtcbiAgY29uc3QgcG4gPSBTdHJpbmcocHJpbWFyeU5vcm0gfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgaXNNZXNoID0gKHApID0+ICEhKHAgJiYgcC5tZXRhZGF0YSAmJiBwLm1ldGFkYXRhLnRyYW5zcG9ydCA9PT0gV0VCUlRDX1RSQU5TUE9SVCk7XG4gIGNvbnN0IHNjb3JlT2YgPSAocCkgPT4ge1xuICAgIGNvbnN0IHMgPSBOdW1iZXIocCAmJiBwLnNjb3JlKTtcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHMpID8gcyA6IDA7XG4gIH07XG4gIGNvbnN0IGNvbm5lY3RlZFJhbmsgPSAocCkgPT4gKChwICYmIHAuc3RhdHVzKSA9PT0gJ2Nvbm5lY3RlZCcgPyAxIDogMCk7XG4gIGNvbnN0IGlzUHJpbWFyeVRjcCA9IChwKSA9PiB7XG4gICAgaWYgKCFwIHx8IGlzTWVzaChwKSB8fCAhcG4pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBhZGRyID0gbm9ybWFsaXplRmFicmljUGVlckFkZHJlc3MocC5hZGRyZXNzKTtcbiAgICByZXR1cm4gYWRkciA9PT0gcG4gfHwgU3RyaW5nKHAuYWRkcmVzcyB8fCAnJykgPT09IHBuO1xuICB9O1xuICBjb25zdCBhbGwgPSBbLi4udGNwLCAuLi53XTtcbiAgYWxsLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBhcCA9IGlzUHJpbWFyeVRjcChhKTtcbiAgICBjb25zdCBicCA9IGlzUHJpbWFyeVRjcChiKTtcbiAgICBpZiAoYXAgIT09IGJwKSByZXR1cm4gYXAgPyAtMSA6IDE7XG4gICAgY29uc3Qgc2MgPSBzY29yZU9mKGIpIC0gc2NvcmVPZihhKTtcbiAgICBpZiAoc2MgIT09IDApIHJldHVybiBzYztcbiAgICBjb25zdCBjYyA9IGNvbm5lY3RlZFJhbmsoYikgLSBjb25uZWN0ZWRSYW5rKGEpO1xuICAgIGlmIChjYyAhPT0gMCkgcmV0dXJuIGNjO1xuICAgIHJldHVybiBmYWJyaWNQZWVyUHJpbWFyeUxhYmVsKGEpLmxvY2FsZUNvbXBhcmUoZmFicmljUGVlclByaW1hcnlMYWJlbChiKSk7XG4gIH0pO1xuICByZXR1cm4gYWxsO1xufVxuXG5mdW5jdGlvbiBpc1dlYnJ0Y1RyYW5zcG9ydFBlZXJSb3cgKHBlZXIpIHtcbiAgcmV0dXJuICEhKHBlZXIgJiYgcGVlci5tZXRhZGF0YSAmJiBwZWVyLm1ldGFkYXRhLnRyYW5zcG9ydCA9PT0gV0VCUlRDX1RSQU5TUE9SVCk7XG59XG5cbi8qKlxuICogUHJlZmVyIGEgcmVhbCBGYWJyaWMgVENQIDxjb2RlPmhvc3Q6cG9ydDwvY29kZT47IG90aGVyd2lzZSBXZWJSVEMgc2lnbmFsaW5nIG9yaWdpbiAoPGNvZGU+d2luZG93LmxvY2F0aW9uLmhvc3Q8L2NvZGU+IHNoYXBlKS5cbiAqIEJyb3dzZXIgY2xpZW50cyB3aWxsIGxhdGVyIGRpYWwgdGhlIHdlYiBvcmlnaW4gb3ZlciBXZWJSVEMgdXNpbmcgdGhlIHNhbWUgaWRlbnRpdHkgbGVmdC1oYW5kIHNpZGU7XG4gKiBodWJzIHJlbWFpbiBzaWduYWxpbmcgdW50aWwgbWVzaCBnb3NzaXAgY2FuIHN1cnZpdmUgaHViIGxvc3MuXG4gKiBAcGFyYW0ge29iamVjdHxudWxsfHVuZGVmaW5lZH0gcGVlclxuICogQHBhcmFtIHtzdHJpbmd9IFtzaWduYWxpbmdIb3N0UG9ydF1cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHBlZXJQdWJsaWNDb25uZWN0aW9uVGFyZ2V0SG9zdFBvcnQgKHBlZXIsIHNpZ25hbGluZ0hvc3RQb3J0KSB7XG4gIGNvbnN0IGFkZHIgPSBwZWVyICYmIHBlZXIuYWRkcmVzcyAhPSBudWxsID8gU3RyaW5nKHBlZXIuYWRkcmVzcykudHJpbSgpIDogJyc7XG4gIGlmIChhZGRyICYmICFhZGRyLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnd2VicnRjOicpKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUZhYnJpY1BlZXJBZGRyZXNzKGFkZHIpO1xuICB9XG4gIGNvbnN0IHNpZyA9IFN0cmluZyhzaWduYWxpbmdIb3N0UG9ydCB8fCAnJykudHJpbSgpO1xuICBpZiAoc2lnKSByZXR1cm4gc2lnO1xuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogVHJ1ZSB3aGVuIHRoZSBwZWVyaW5nIGVuZHBvaW50IGlzIFdlYlJUQyBzaWduYWxpbmcgKG5vIEZhYnJpYyBUQ1AgYWRkcmVzcyBvbiB0aGUgcm93KS5cbiAqIEBwYXJhbSB7b2JqZWN0fG51bGx8dW5kZWZpbmVkfSBwZWVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcGVlclBlZXJpbmdFbmRwb2ludElzU2lnbmFsaW5nIChwZWVyKSB7XG4gIGlmICghcGVlciB8fCB0eXBlb2YgcGVlciAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgaWYgKGlzV2VicnRjVHJhbnNwb3J0UGVlclJvdyhwZWVyKSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGFkZHIgPSBwZWVyLmFkZHJlc3MgIT0gbnVsbCA/IFN0cmluZyhwZWVyLmFkZHJlc3MpLnRyaW0oKSA6ICcnO1xuICByZXR1cm4gIWFkZHIgfHwgYWRkci50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ3dlYnJ0YzonKTtcbn1cblxuLyoqXG4gKiBOYXRpdmUgRmFicmljIHBlZXJpbmcgc3RyaW5nIGZvciBjbGlwYm9hcmQgLyBDTEkgZGlhbCBwaW5zOlxuICogPGNvZGU+cHVia2V5QGhvc3Q6cG9ydDwvY29kZT4gKGNvbXByZXNzZWQgaGV4IHdoZW4ga25vd247IGJlY2gzMi9pZCBmYWxsYmFjaykuXG4gKiBFbmRwb2ludCBpcyBUQ1AgPGNvZGU+aG9zdDpwb3J0PC9jb2RlPiwgb3IgdGhlIHdlYiBzaWduYWxpbmcgaG9zdCBmb3IgV2ViUlRDLW9ubHkgcm93cy5cbiAqIEBwYXJhbSB7b2JqZWN0fG51bGx8dW5kZWZpbmVkfSBwZWVyXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NpZ25hbGluZ0hvc3RQb3J0XVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcGVlck5hdGl2ZVBlZXJpbmdTdHJpbmcgKHBlZXIsIHNpZ25hbGluZ0hvc3RQb3J0KSB7XG4gIGNvbnN0IHBrID0gZmFicmljUGVlckRpYWxJZGVudGl0eShwZWVyKTtcbiAgY29uc3QgdGFyZ2V0ID0gcGVlclB1YmxpY0Nvbm5lY3Rpb25UYXJnZXRIb3N0UG9ydChwZWVyLCBzaWduYWxpbmdIb3N0UG9ydCk7XG4gIGlmICghcGsgJiYgIXRhcmdldCkgcmV0dXJuICcnO1xuICBpZiAoIXRhcmdldCkgcmV0dXJuIHBrO1xuICBpZiAoIXBrKSByZXR1cm4gYEAke3RhcmdldH1gO1xuICByZXR1cm4gYCR7cGt9QCR7dGFyZ2V0fWA7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgUHJlZmVyIHtAbGluayBwZWVyTmF0aXZlUGVlcmluZ1N0cmluZ30gKGhleC1maXJzdCBkaWFsIHBpbikuXG4gKiBAcGFyYW0ge29iamVjdHxudWxsfHVuZGVmaW5lZH0gcGVlclxuICogQHBhcmFtIHtzdHJpbmd9IFtzaWduYWxpbmdIb3N0UG9ydF1cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHBlZXJDb25uZWN0aW9uUHVia2V5QXRIb3N0UG9ydCAocGVlciwgc2lnbmFsaW5nSG9zdFBvcnQpIHtcbiAgcmV0dXJuIHBlZXJOYXRpdmVQZWVyaW5nU3RyaW5nKHBlZXIsIHNpZ25hbGluZ0hvc3RQb3J0KTtcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gdGhpcyByb3cgcmVwcmVzZW50cyBhbiBhY3RpdmUgRmFicmljIFRDUCBzZXNzaW9uIHdoZXJlIHRoZSBodWIgbGVhcm5lZCB0aGUgcGVlcuKAmXMgYmVjaDMyIGlkIGZyb20gdGhlIHdpcmUuXG4gKiBAcGFyYW0ge29iamVjdHxudWxsfHVuZGVmaW5lZH0gcGVlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGZhYnJpY1AyUElkZW50aXR5Q29uZmlybWVkIChwZWVyKSB7XG4gIGlmICghcGVlciB8fCB0eXBlb2YgcGVlciAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgaWYgKGlzV2VicnRjVHJhbnNwb3J0UGVlclJvdyhwZWVyKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gcGVlci5zdGF0dXMgPT09ICdjb25uZWN0ZWQnICYmICEhZmFicmljUGVlckJlY2gzMklkKHBlZXIpO1xufVxuXG4vKipcbiAqIE1lcmdlIHJvd3MgdGhhdCBzaGFyZSB0aGUgc2FtZSB7QGxpbmsgZmFicmljUGVlckJlY2gzMklkfSAoYW5kIHJlbGF0ZWQga2V5cykgc28gVENQICsgbWVzaCBkdXBsaWNhdGVzIHNob3cgb25lIHNjb3JlL2ludmVudG9yeSBzdXJmYWNlLlxuICogQHBhcmFtIHtvYmplY3RbXX0gcGVlcnNcbiAqIEByZXR1cm5zIHtvYmplY3RbXX1cbiAqL1xuZnVuY3Rpb24gY29uc29saWRhdGVVbmlmaWVkUGVlcnNCeUZhYnJpY0lkIChwZWVycykge1xuICBjb25zdCBhcnIgPSBBcnJheS5pc0FycmF5KHBlZXJzKSA/IHBlZXJzLmZpbHRlcigocCkgPT4gcCAmJiB0eXBlb2YgcCA9PT0gJ29iamVjdCcpIDogW107XG4gIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXAoKTtcbiAgZm9yIChjb25zdCBwIG9mIGFycikge1xuICAgIGNvbnN0IGZpZCA9IGZhYnJpY1BlZXJCZWNoMzJJZChwKTtcbiAgICBsZXQga2V5ID0gZmlkIHx8ICcnO1xuICAgIGlmICgha2V5KSB7XG4gICAgICBpZiAocC5tZXRhZGF0YSAmJiBwLm1ldGFkYXRhLnRyYW5zcG9ydCA9PT0gV0VCUlRDX1RSQU5TUE9SVCkge1xuICAgICAgICBjb25zdCBzaWQgPSBwLm1ldGFkYXRhLndlYnJ0Y1NpZ25hbGluZ0lkICE9IG51bGxcbiAgICAgICAgICA/IFN0cmluZyhwLm1ldGFkYXRhLndlYnJ0Y1NpZ25hbGluZ0lkKVxuICAgICAgICAgIDogU3RyaW5nKHAuaWQgfHwgJycpO1xuICAgICAgICBrZXkgPSBzaWQgPyBgd2VicnRjOiR7c2lkfWAgOiBgYW5vbjoke1N0cmluZyhwLmFkZHJlc3MgfHwgcC5pZCB8fCAnJyl9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleSA9IFN0cmluZyhwLmFkZHJlc3MgfHwgcC5pZCB8fCAnJykgfHwgYGFub246JHthcnIuaW5kZXhPZihwKX1gO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWdyb3Vwcy5oYXMoa2V5KSkgZ3JvdXBzLnNldChrZXksIFtdKTtcbiAgICBncm91cHMuZ2V0KGtleSkucHVzaChwKTtcbiAgfVxuICBjb25zdCBvdXQgPSBbXTtcbiAgZm9yIChjb25zdCBbLCByb3dzXSBvZiBncm91cHMpIHtcbiAgICBpZiAoIXJvd3MubGVuZ3RoKSBjb250aW51ZTtcbiAgICBsZXQgbWVyZ2VkID0gcm93c1swXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIG1lcmdlZCA9IG1lcmdlRmFicmljUGVlclJvd3MobWVyZ2VkLCByb3dzW2ldKTtcbiAgICBjb25zdCB0Y3BSb3cgPSByb3dzLmZpbmQoKHIpID0+IHtcbiAgICAgIGNvbnN0IGEgPSByICYmIHIuYWRkcmVzcyAhPSBudWxsID8gU3RyaW5nKHIuYWRkcmVzcykgOiAnJztcbiAgICAgIHJldHVybiBhICYmICFhLnN0YXJ0c1dpdGgoJ3dlYnJ0YzonKTtcbiAgICB9KTtcbiAgICBpZiAodGNwUm93ICYmIHRjcFJvdy5hZGRyZXNzKSB7XG4gICAgICBtZXJnZWQgPSB7IC4uLm1lcmdlZCwgYWRkcmVzczogdGNwUm93LmFkZHJlc3MgfTtcbiAgICAgIGlmIChtZXJnZWQubWV0YWRhdGEgJiYgbWVyZ2VkLm1ldGFkYXRhLnRyYW5zcG9ydCA9PT0gV0VCUlRDX1RSQU5TUE9SVCkge1xuICAgICAgICBjb25zdCBtZCA9IHsgLi4ubWVyZ2VkLm1ldGFkYXRhIH07XG4gICAgICAgIGRlbGV0ZSBtZC50cmFuc3BvcnQ7XG4gICAgICAgIG1lcmdlZCA9IHsgLi4ubWVyZ2VkLCBtZXRhZGF0YTogbWQgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0LnB1c2gobWVyZ2VkKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbm9ybWFsaXplRmFicmljUGVlckFkZHJlc3MsXG4gIG5vcm1hbGl6ZVBlZXJBZGRyZXNzSW5wdXQsXG4gIGV4dHJhY3RQZWVyWHB1YixcbiAgc2hvcnRlblB1YmxpY0lkLFxuICBpc0xpa2VseUZhYnJpY0JlY2gzMklkLFxuICBpc0xpa2VseUNvbXByZXNzZWRQdWJrZXlIZXgsXG4gIGZhYnJpY1BlZXJCZWNoMzJJZCxcbiAgZmFicmljUGVlclB1YmtleUhleCxcbiAgZmFicmljUGVlckRpYWxJZGVudGl0eSxcbiAgcGVlclB1YmxpY0Nvbm5lY3Rpb25UYXJnZXRIb3N0UG9ydCxcbiAgcGVlclBlZXJpbmdFbmRwb2ludElzU2lnbmFsaW5nLFxuICBwZWVyTmF0aXZlUGVlcmluZ1N0cmluZyxcbiAgcGVlckNvbm5lY3Rpb25QdWJrZXlBdEhvc3RQb3J0LFxuICBmYWJyaWNQMlBJZGVudGl0eUNvbmZpcm1lZCxcbiAgY29uc29saWRhdGVVbmlmaWVkUGVlcnNCeUZhYnJpY0lkLFxuICBkZWR1cGVGYWJyaWNQZWVycyxcbiAgZmFicmljUGVlclByaW1hcnlMYWJlbCxcbiAgYnVpbGRXZWJydGNDb21iaW5lZFJvd3MsXG4gIHdlYnJ0Y1Jvd1ByaW1hcnlMYWJlbCxcbiAgd2VicnRjQ29tYmluZWRSb3dUb0ZhYnJpY1BlZXJTaGFwZSxcbiAgd2VicnRjQ29tYmluZWRUb0ZhYnJpY1BlZXJSb3dzLFxuICBtZXJnZVRjcEFuZFdlYnJ0Y1BlZXJSb3dzLFxuICBpc1dlYnJ0Y1RyYW5zcG9ydFBlZXJSb3csXG4gIFdFQlJUQ19UUkFOU1BPUlRcbn07XG4iXSwibmFtZXMiOlsiX3NsaWNlZFRvQXJyYXkiLCJyIiwiZSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJsIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwibiIsImkiLCJ1IiwiYSIsImYiLCJvIiwiY2FsbCIsIm5leHQiLCJPYmplY3QiLCJkb25lIiwicHVzaCIsInZhbHVlIiwibGVuZ3RoIiwiQXJyYXkiLCJpc0FycmF5IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfbiIsIkYiLCJzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3RvUHJpbWl0aXZlIiwiX3R5cGVvZiIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwicHJvdG90eXBlIiwiX3JlcXVpcmUiLCJyZXF1aXJlIiwiaXNMaWtlbHlCaXAzMkV4dGVuZGVkS2V5Iiwibm9ybWFsaXplRmFicmljUGVlckFkZHJlc3MiLCJ0cmltIiwiaW5jbHVkZXMiLCJjb25jYXQiLCJub3JtYWxpemVQZWVyQWRkcmVzc0lucHV0IiwicmF3IiwicmVwbGFjZSIsInNsYXNoIiwiaW5kZXhPZiIsInEiLCJoIiwiZXh0cmFjdFBlZXJYcHViIiwicCIsIm0iLCJtZXRhZGF0YSIsImNhbmRzIiwieHB1YiIsImMiLCJzaG9ydGVuUHVibGljSWQiLCJoZWFkIiwidW5kZWZpbmVkIiwidGFpbCIsInN0ciIsInNhbWVMb2dpY2FsRmFicmljUGVlciIsImIiLCJhaWQiLCJpZCIsImJpZCIsImFhZCIsImFkZHJlc3MiLCJiYWQiLCJhbiIsImJuIiwieGEiLCJ4YiIsIm1hIiwiZmFicmljUGVlcklkIiwibWIiLCJtZXJnZUZhYnJpY1BlZXJSb3dzIiwiY29ubmVjdGVkIiwic3RhdHVzIiwic2EiLCJzY29yZSIsInNiIiwiaXNGaW5pdGUiLCJNYXRoIiwibWF4IiwibWlzYmVoYXZpb3IiLCJuYSIsIm5pY2tuYW1lIiwibmIiLCJtZXRhQSIsIm1ldGFCIiwiZGVkdXBlRmFicmljUGVlcnMiLCJwZWVycyIsImFyciIsIm91dCIsImNvbnN1bWVkIiwiU2V0IiwiaGFzIiwibWVyZ2VkIiwiaiIsImFkZCIsIkZBQlJJQ19JREVOVElUWV9IUlBfUFJFRklYIiwiaXNMaWtlbHlGYWJyaWNCZWNoMzJJZCIsInN0YXJ0c1dpdGgiLCJmYWJyaWNQZWVyQmVjaDMySWQiLCJwZWVyIiwiZnJvbU1ldGEiLCJmcm9tSWQiLCJpc0xpa2VseUNvbXByZXNzZWRQdWJrZXlIZXgiLCJ0b0xvd2VyQ2FzZSIsImZhYnJpY1BlZXJQdWJrZXlIZXgiLCJwdWJsaWNLZXkiLCJwdWJrZXkiLCJmYWJyaWNQZWVyRGlhbElkZW50aXR5IiwiZmFicmljUGVlclByaW1hcnlMYWJlbCIsIm5pY2siLCJmYiIsIngiLCJhbGlhcyIsImFkZHIiLCJidWlsZFdlYnJ0Y0NvbWJpbmVkUm93cyIsInNpZ25hbGluZyIsImxvY2FsIiwic2VsZlBlZXJJZCIsInNlbGYiLCJieUlkIiwiTWFwIiwic2lnIiwibG9jIiwic2V0IiwicHJldiIsImdldCIsInJvd3MiLCJ2YWx1ZXMiLCJzb3J0IiwibGEiLCJsYiIsImxvY2FsZUNvbXBhcmUiLCJ3ZWJydGNSb3dQcmltYXJ5TGFiZWwiLCJtZXRhIiwiZnAiLCJXRUJSVENfVFJBTlNQT1JUIiwid2VicnRjQ29tYmluZWRSb3dUb0ZhYnJpY1BlZXJTaGFwZSIsInJvdyIsInJlcCIsInBlZXJJZCIsInRyYW5zcG9ydCIsIndlYnJ0Y1NpZ25hbGluZ0lkIiwibWVzaENvbm5lY3RlZCIsInJzIiwiTmFOIiwicm0iLCJsYXN0U2VlbiIsInJlZ2lzdGVyZWRBdCIsImNvbm5lY3RlZEF0Iiwid2VicnRjQ29tYmluZWRUb0ZhYnJpY1BlZXJSb3dzIiwiY29tYmluZWQiLCJyZXBMb29rdXAiLCJmbiIsIm1hcCIsIm1lcmdlVGNwQW5kV2VicnRjUGVlclJvd3MiLCJ0Y3BQZWVyc1NvcnRlZCIsIndlYnJ0Y0FzRmFicmljIiwicHJpbWFyeU5vcm0iLCJ0Y3AiLCJ3IiwicG4iLCJpc01lc2giLCJzY29yZU9mIiwiY29ubmVjdGVkUmFuayIsImlzUHJpbWFyeVRjcCIsImFsbCIsImFwIiwiYnAiLCJzYyIsImNjIiwiaXNXZWJydGNUcmFuc3BvcnRQZWVyUm93IiwicGVlclB1YmxpY0Nvbm5lY3Rpb25UYXJnZXRIb3N0UG9ydCIsInNpZ25hbGluZ0hvc3RQb3J0IiwicGVlclBlZXJpbmdFbmRwb2ludElzU2lnbmFsaW5nIiwicGVlck5hdGl2ZVBlZXJpbmdTdHJpbmciLCJwayIsInRhcmdldCIsInBlZXJDb25uZWN0aW9uUHVia2V5QXRIb3N0UG9ydCIsImZhYnJpY1AyUElkZW50aXR5Q29uZmlybWVkIiwiY29uc29saWRhdGVVbmlmaWVkUGVlcnNCeUZhYnJpY0lkIiwiZ3JvdXBzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJmaWQiLCJrZXkiLCJzaWQiLCJlcnIiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiX3N0ZXAyJHZhbHVlIiwidGNwUm93IiwiZmluZCIsIm1kIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/peerIdentity.js\n\n}")},"./functions/peerTopologyDot.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar _require = __webpack_require__(/*! ../constants */ "./constants.js"),\n FNV1A_32_OFFSET = _require.FNV1A_32_OFFSET,\n FNV1A_32_PRIME = _require.FNV1A_32_PRIME;\nvar _require2 = __webpack_require__(/*! ./contractGraphDot */ "./functions/contractGraphDot.js"),\n escapeDotLabel = _require2.escapeDotLabel,\n shortLabel = _require2.shortLabel;\n\n/**\n * Stable graphviz node name for a Fabric id / address (avoids special chars in node ids).\n */\nfunction nodeName(raw) {\n var s = String(raw || \'unknown\');\n var h = FNV1A_32_OFFSET;\n for (var i = 0; i < s.length; i++) {\n h ^= s.charCodeAt(i);\n h = Math.imul(h, FNV1A_32_PRIME);\n }\n return \'N\' + (h >>> 0).toString(16);\n}\n\n/**\n * @param {object} opts\n * @param {string} [opts.selfId]\n * @param {string} [opts.selfLabel]\n * @param {Array} opts.directPeers - knownPeers rows (use status === \'connected\' for solid edges)\n * @param {{ byReporter?: Record }} [opts.gossip]\n * @returns {string} DOT source or \'\' if empty\n */\nfunction peerTopologyToDot(opts) {\n var selfId = opts && opts.selfId ? String(opts.selfId) : \'\';\n var selfLabel = opts && opts.selfLabel || \'This Fabric node\';\n var directPeers = Array.isArray(opts && opts.directPeers) ? opts.directPeers : [];\n var gossip = opts && opts.gossip && opts.gossip.byReporter ? opts.gossip.byReporter : {};\n var connected = directPeers.filter(function (p) {\n return p && p.status === \'connected\';\n });\n if (!selfId && connected.length === 0 && Object.keys(gossip).length === 0) return \'\';\n var lines = [\'digraph P {\', \' rankdir=TB;\', \' node [fontname="Helvetica" fontsize=10];\', \' edge [fontname="Helvetica" fontsize=9];\'];\n var selfN = selfId ? nodeName(selfId) : \'LOCAL\';\n var sl = escapeDotLabel(shortLabel(selfLabel, 20, 0));\n lines.push(" ".concat(selfN, " [label=\\"").concat(sl, "\\" shape=cylinder fillcolor=lightblue style=filled];"));\n var directIds = new Set();\n var _iterator = _createForOfIteratorHelper(connected),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var p = _step.value;\n var pid = p.id ? String(p.id) : \'\';\n if (!pid) continue;\n directIds.add(pid);\n var pn = nodeName(pid);\n var pl = escapeDotLabel(shortLabel(pid, 10, 6));\n var nick = p.nickname ? "\\\\n(".concat(escapeDotLabel(shortLabel(p.nickname, 12, 0)), ")") : \'\';\n lines.push(" ".concat(pn, " [label=\\"TCP peer\\\\n").concat(pl).concat(nick, "\\" fillcolor=lightyellow style=filled shape=box];"));\n lines.push(" ".concat(selfN, " -> ").concat(pn, " [label=\\"connected\\"];"));\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n var maxGossipEdges = 48;\n var gossipCount = 0;\n var seenGossip = new Set();\n var _iterator2 = _createForOfIteratorHelper(connected),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var _p = _step2.value;\n var _pid = _p.id ? String(_p.id) : \'\';\n if (!_pid) continue;\n var entry = gossip[_pid] || gossip[_p.address] || null;\n if (!entry || !Array.isArray(entry.neighbors)) continue;\n var fromN = nodeName(_pid);\n var _iterator3 = _createForOfIteratorHelper(entry.neighbors),\n _step3;\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var nb = _step3.value;\n var nid = String(nb || \'\').trim();\n if (!nid || nid === selfId || nid === _pid) continue;\n if (gossipCount >= maxGossipEdges) break;\n var key = "".concat(_pid, "->").concat(nid);\n if (seenGossip.has(key)) continue;\n seenGossip.add(key);\n gossipCount++;\n var toN = nodeName(nid);\n var isDirect = directIds.has(nid);\n if (!isDirect) {\n var nl = escapeDotLabel(shortLabel(nid, 10, 6));\n lines.push(" ".concat(toN, " [label=\\"via gossip\\\\n").concat(nl, "\\" fillcolor=whitesmoke style=filled shape=ellipse];"));\n }\n lines.push(" ".concat(fromN, " -> ").concat(toN, " [style=dotted label=\\"P2P_PEER_GOSSIP\\"];"));\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n lines.push(\'}\');\n return lines.join(\'\\n\');\n}\n\n/**\n * Local view: one peer and neighbors reported in its last P2P_PEER_GOSSIP.\n */\nfunction peerNeighborhoodToDot(centerId, neighbors) {\n if (!centerId || !Array.isArray(neighbors) || neighbors.length === 0) return \'\';\n var c = nodeName(centerId);\n var lines = [\'digraph N {\', \' rankdir=LR;\', \' node [fontname="Helvetica" fontsize=10];\'];\n lines.push(" ".concat(c, " [label=\\"Selected peer\\\\n").concat(escapeDotLabel(shortLabel(centerId, 10, 6)), "\\" fillcolor=lightblue style=filled shape=box];"));\n var slice = neighbors.slice(0, 36);\n for (var i = 0; i < slice.length; i++) {\n var nb = String(slice[i] || \'\').trim();\n if (!nb || nb === centerId) continue;\n var n = nodeName(nb);\n lines.push(" ".concat(n, " [label=\\"").concat(escapeDotLabel(shortLabel(nb, 10, 6)), "\\" fillcolor=whitesmoke style=filled shape=ellipse];"));\n lines.push(" ".concat(c, " -> ").concat(n, " [label=\\"seen in gossip\\" style=dotted];"));\n }\n lines.push(\'}\');\n return lines.join(\'\\n\');\n}\nmodule.exports = {\n peerTopologyToDot: peerTopologyToDot,\n peerNeighborhoodToDot: peerNeighborhoodToDot,\n nodeName: nodeName\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RCxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG9EQUFnRCxDQUFDO0VBQ3pJLElBQU12RSxLQUFLLEdBQUd5RCxTQUFTLENBQUN6RCxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNwQyxLQUFLLElBQUlnQixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdoQixLQUFLLENBQUNoQixNQUFNLEVBQUVnQyxDQUFDLEVBQUUsRUFBRTtJQUNyQyxJQUFNNkMsRUFBRSxHQUFHL0MsTUFBTSxDQUFDZCxLQUFLLENBQUNnQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQytDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLElBQUksQ0FBQ0YsRUFBRSxJQUFJQSxFQUFFLEtBQUtVLFFBQVEsRUFBRTtJQUM1QixJQUFNbkYsQ0FBQyxHQUFHd0IsUUFBUSxDQUFDaUQsRUFBRSxDQUFDO0lBQ3RCNUIsS0FBSyxDQUFDRyxJQUFJLE1BQUFDLE1BQUEsQ0FBTWpELENBQUMsZ0JBQUFpRCxNQUFBLENBQVkzQixjQUFjLENBQUNDLFVBQVUsQ0FBQ2tELEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMseURBQXFELENBQUM7SUFDeEg1QixLQUFLLENBQUNHLElBQUksTUFBQUMsTUFBQSxDQUFNbUMsQ0FBQyxVQUFBbkMsTUFBQSxDQUFPakQsQ0FBQyw4Q0FBeUMsQ0FBQztFQUNyRTtFQUNBNkMsS0FBSyxDQUFDRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ2YsT0FBT0gsS0FBSyxDQUFDb0MsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN6QjtBQUVBSSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUFFdEQsaUJBQWlCLEVBQWpCQSxpQkFBaUI7RUFBRWtELHFCQUFxQixFQUFyQkEscUJBQXFCO0VBQUUxRCxRQUFRLEVBQVJBO0FBQVMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL3BlZXJUb3BvbG9neURvdC5qcz8yY2FkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuY29uc3QgeyBGTlYxQV8zMl9PRkZTRVQsIEZOVjFBXzMyX1BSSU1FIH0gPSByZXF1aXJlKCcuLi9jb25zdGFudHMnKTtcbmNvbnN0IHsgZXNjYXBlRG90TGFiZWwsIHNob3J0TGFiZWwgfSA9IHJlcXVpcmUoJy4vY29udHJhY3RHcmFwaERvdCcpO1xuXG4vKipcbiAqIFN0YWJsZSBncmFwaHZpeiBub2RlIG5hbWUgZm9yIGEgRmFicmljIGlkIC8gYWRkcmVzcyAoYXZvaWRzIHNwZWNpYWwgY2hhcnMgaW4gbm9kZSBpZHMpLlxuICovXG5mdW5jdGlvbiBub2RlTmFtZSAocmF3KSB7XG4gIGNvbnN0IHMgPSBTdHJpbmcocmF3IHx8ICd1bmtub3duJyk7XG4gIGxldCBoID0gRk5WMUFfMzJfT0ZGU0VUO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICBoIF49IHMuY2hhckNvZGVBdChpKTtcbiAgICBoID0gTWF0aC5pbXVsKGgsIEZOVjFBXzMyX1BSSU1FKTtcbiAgfVxuICByZXR1cm4gJ04nICsgKGggPj4+IDApLnRvU3RyaW5nKDE2KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0c1xuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLnNlbGZJZF1cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5zZWxmTGFiZWxdXG4gKiBAcGFyYW0ge0FycmF5PG9iamVjdD59IG9wdHMuZGlyZWN0UGVlcnMgLSBrbm93blBlZXJzIHJvd3MgKHVzZSBzdGF0dXMgPT09ICdjb25uZWN0ZWQnIGZvciBzb2xpZCBlZGdlcylcbiAqIEBwYXJhbSB7eyBieVJlcG9ydGVyPzogUmVjb3JkPHN0cmluZywgeyBhdDogbnVtYmVyLCBuZWlnaGJvcnM6IHN0cmluZ1tdIH0+IH19IFtvcHRzLmdvc3NpcF1cbiAqIEByZXR1cm5zIHtzdHJpbmd9IERPVCBzb3VyY2Ugb3IgJycgaWYgZW1wdHlcbiAqL1xuZnVuY3Rpb24gcGVlclRvcG9sb2d5VG9Eb3QgKG9wdHMpIHtcbiAgY29uc3Qgc2VsZklkID0gb3B0cyAmJiBvcHRzLnNlbGZJZCA/IFN0cmluZyhvcHRzLnNlbGZJZCkgOiAnJztcbiAgY29uc3Qgc2VsZkxhYmVsID0gKG9wdHMgJiYgb3B0cy5zZWxmTGFiZWwpIHx8ICdUaGlzIEZhYnJpYyBub2RlJztcbiAgY29uc3QgZGlyZWN0UGVlcnMgPSBBcnJheS5pc0FycmF5KG9wdHMgJiYgb3B0cy5kaXJlY3RQZWVycykgPyBvcHRzLmRpcmVjdFBlZXJzIDogW107XG4gIGNvbnN0IGdvc3NpcCA9IG9wdHMgJiYgb3B0cy5nb3NzaXAgJiYgb3B0cy5nb3NzaXAuYnlSZXBvcnRlciA/IG9wdHMuZ29zc2lwLmJ5UmVwb3J0ZXIgOiB7fTtcblxuICBjb25zdCBjb25uZWN0ZWQgPSBkaXJlY3RQZWVycy5maWx0ZXIoKHApID0+IHAgJiYgcC5zdGF0dXMgPT09ICdjb25uZWN0ZWQnKTtcbiAgaWYgKCFzZWxmSWQgJiYgY29ubmVjdGVkLmxlbmd0aCA9PT0gMCAmJiBPYmplY3Qua2V5cyhnb3NzaXApLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuXG4gIGNvbnN0IGxpbmVzID0gW1xuICAgICdkaWdyYXBoIFAgeycsXG4gICAgJyAgcmFua2Rpcj1UQjsnLFxuICAgICcgIG5vZGUgW2ZvbnRuYW1lPVwiSGVsdmV0aWNhXCIgZm9udHNpemU9MTBdOycsXG4gICAgJyAgZWRnZSBbZm9udG5hbWU9XCJIZWx2ZXRpY2FcIiBmb250c2l6ZT05XTsnXG4gIF07XG5cbiAgY29uc3Qgc2VsZk4gPSBzZWxmSWQgPyBub2RlTmFtZShzZWxmSWQpIDogJ0xPQ0FMJztcbiAgY29uc3Qgc2wgPSBlc2NhcGVEb3RMYWJlbChzaG9ydExhYmVsKHNlbGZMYWJlbCwgMjAsIDApKTtcbiAgbGluZXMucHVzaChgICAke3NlbGZOfSBbbGFiZWw9XCIke3NsfVwiIHNoYXBlPWN5bGluZGVyIGZpbGxjb2xvcj1saWdodGJsdWUgc3R5bGU9ZmlsbGVkXTtgKTtcblxuICBjb25zdCBkaXJlY3RJZHMgPSBuZXcgU2V0KCk7XG4gIGZvciAoY29uc3QgcCBvZiBjb25uZWN0ZWQpIHtcbiAgICBjb25zdCBwaWQgPSBwLmlkID8gU3RyaW5nKHAuaWQpIDogJyc7XG4gICAgaWYgKCFwaWQpIGNvbnRpbnVlO1xuICAgIGRpcmVjdElkcy5hZGQocGlkKTtcbiAgICBjb25zdCBwbiA9IG5vZGVOYW1lKHBpZCk7XG4gICAgY29uc3QgcGwgPSBlc2NhcGVEb3RMYWJlbChzaG9ydExhYmVsKHBpZCwgMTAsIDYpKTtcbiAgICBjb25zdCBuaWNrID0gcC5uaWNrbmFtZSA/IGBcXFxcbigke2VzY2FwZURvdExhYmVsKHNob3J0TGFiZWwocC5uaWNrbmFtZSwgMTIsIDApKX0pYCA6ICcnO1xuICAgIGxpbmVzLnB1c2goYCAgJHtwbn0gW2xhYmVsPVwiVENQIHBlZXJcXFxcbiR7cGx9JHtuaWNrfVwiIGZpbGxjb2xvcj1saWdodHllbGxvdyBzdHlsZT1maWxsZWQgc2hhcGU9Ym94XTtgKTtcbiAgICBsaW5lcy5wdXNoKGAgICR7c2VsZk59IC0+ICR7cG59IFtsYWJlbD1cImNvbm5lY3RlZFwiXTtgKTtcbiAgfVxuXG4gIGNvbnN0IG1heEdvc3NpcEVkZ2VzID0gNDg7XG4gIGxldCBnb3NzaXBDb3VudCA9IDA7XG4gIGNvbnN0IHNlZW5Hb3NzaXAgPSBuZXcgU2V0KCk7XG5cbiAgZm9yIChjb25zdCBwIG9mIGNvbm5lY3RlZCkge1xuICAgIGNvbnN0IHBpZCA9IHAuaWQgPyBTdHJpbmcocC5pZCkgOiAnJztcbiAgICBpZiAoIXBpZCkgY29udGludWU7XG4gICAgY29uc3QgZW50cnkgPSBnb3NzaXBbcGlkXSB8fCBnb3NzaXBbcC5hZGRyZXNzXSB8fCBudWxsO1xuICAgIGlmICghZW50cnkgfHwgIUFycmF5LmlzQXJyYXkoZW50cnkubmVpZ2hib3JzKSkgY29udGludWU7XG4gICAgY29uc3QgZnJvbU4gPSBub2RlTmFtZShwaWQpO1xuICAgIGZvciAoY29uc3QgbmIgb2YgZW50cnkubmVpZ2hib3JzKSB7XG4gICAgICBjb25zdCBuaWQgPSBTdHJpbmcobmIgfHwgJycpLnRyaW0oKTtcbiAgICAgIGlmICghbmlkIHx8IG5pZCA9PT0gc2VsZklkIHx8IG5pZCA9PT0gcGlkKSBjb250aW51ZTtcbiAgICAgIGlmIChnb3NzaXBDb3VudCA+PSBtYXhHb3NzaXBFZGdlcykgYnJlYWs7XG4gICAgICBjb25zdCBrZXkgPSBgJHtwaWR9LT4ke25pZH1gO1xuICAgICAgaWYgKHNlZW5Hb3NzaXAuaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgc2Vlbkdvc3NpcC5hZGQoa2V5KTtcbiAgICAgIGdvc3NpcENvdW50Kys7XG4gICAgICBjb25zdCB0b04gPSBub2RlTmFtZShuaWQpO1xuICAgICAgY29uc3QgaXNEaXJlY3QgPSBkaXJlY3RJZHMuaGFzKG5pZCk7XG4gICAgICBpZiAoIWlzRGlyZWN0KSB7XG4gICAgICAgIGNvbnN0IG5sID0gZXNjYXBlRG90TGFiZWwoc2hvcnRMYWJlbChuaWQsIDEwLCA2KSk7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgJHt0b059IFtsYWJlbD1cInZpYSBnb3NzaXBcXFxcbiR7bmx9XCIgZmlsbGNvbG9yPXdoaXRlc21va2Ugc3R5bGU9ZmlsbGVkIHNoYXBlPWVsbGlwc2VdO2ApO1xuICAgICAgfVxuICAgICAgbGluZXMucHVzaChgICAke2Zyb21OfSAtPiAke3RvTn0gW3N0eWxlPWRvdHRlZCBsYWJlbD1cIlAyUF9QRUVSX0dPU1NJUFwiXTtgKTtcbiAgICB9XG4gIH1cblxuICBsaW5lcy5wdXNoKCd9Jyk7XG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBMb2NhbCB2aWV3OiBvbmUgcGVlciBhbmQgbmVpZ2hib3JzIHJlcG9ydGVkIGluIGl0cyBsYXN0IFAyUF9QRUVSX0dPU1NJUC5cbiAqL1xuZnVuY3Rpb24gcGVlck5laWdoYm9yaG9vZFRvRG90IChjZW50ZXJJZCwgbmVpZ2hib3JzKSB7XG4gIGlmICghY2VudGVySWQgfHwgIUFycmF5LmlzQXJyYXkobmVpZ2hib3JzKSB8fCBuZWlnaGJvcnMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIGNvbnN0IGMgPSBub2RlTmFtZShjZW50ZXJJZCk7XG4gIGNvbnN0IGxpbmVzID0gW1xuICAgICdkaWdyYXBoIE4geycsXG4gICAgJyAgcmFua2Rpcj1MUjsnLFxuICAgICcgIG5vZGUgW2ZvbnRuYW1lPVwiSGVsdmV0aWNhXCIgZm9udHNpemU9MTBdOydcbiAgXTtcbiAgbGluZXMucHVzaChgICAke2N9IFtsYWJlbD1cIlNlbGVjdGVkIHBlZXJcXFxcbiR7ZXNjYXBlRG90TGFiZWwoc2hvcnRMYWJlbChjZW50ZXJJZCwgMTAsIDYpKX1cIiBmaWxsY29sb3I9bGlnaHRibHVlIHN0eWxlPWZpbGxlZCBzaGFwZT1ib3hdO2ApO1xuICBjb25zdCBzbGljZSA9IG5laWdoYm9ycy5zbGljZSgwLCAzNik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpY2UubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBuYiA9IFN0cmluZyhzbGljZVtpXSB8fCAnJykudHJpbSgpO1xuICAgIGlmICghbmIgfHwgbmIgPT09IGNlbnRlcklkKSBjb250aW51ZTtcbiAgICBjb25zdCBuID0gbm9kZU5hbWUobmIpO1xuICAgIGxpbmVzLnB1c2goYCAgJHtufSBbbGFiZWw9XCIke2VzY2FwZURvdExhYmVsKHNob3J0TGFiZWwobmIsIDEwLCA2KSl9XCIgZmlsbGNvbG9yPXdoaXRlc21va2Ugc3R5bGU9ZmlsbGVkIHNoYXBlPWVsbGlwc2VdO2ApO1xuICAgIGxpbmVzLnB1c2goYCAgJHtjfSAtPiAke259IFtsYWJlbD1cInNlZW4gaW4gZ29zc2lwXCIgc3R5bGU9ZG90dGVkXTtgKTtcbiAgfVxuICBsaW5lcy5wdXNoKCd9Jyk7XG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IHBlZXJUb3BvbG9neVRvRG90LCBwZWVyTmVpZ2hib3Job29kVG9Eb3QsIG5vZGVOYW1lIH07XG4iXSwibmFtZXMiOlsiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfcmVxdWlyZSIsInJlcXVpcmUiLCJGTlYxQV8zMl9PRkZTRVQiLCJGTlYxQV8zMl9QUklNRSIsIl9yZXF1aXJlMiIsImVzY2FwZURvdExhYmVsIiwic2hvcnRMYWJlbCIsIm5vZGVOYW1lIiwicmF3IiwiU3RyaW5nIiwiaCIsImkiLCJjaGFyQ29kZUF0IiwiTWF0aCIsImltdWwiLCJwZWVyVG9wb2xvZ3lUb0RvdCIsIm9wdHMiLCJzZWxmSWQiLCJzZWxmTGFiZWwiLCJkaXJlY3RQZWVycyIsImdvc3NpcCIsImJ5UmVwb3J0ZXIiLCJjb25uZWN0ZWQiLCJmaWx0ZXIiLCJwIiwic3RhdHVzIiwiT2JqZWN0Iiwia2V5cyIsImxpbmVzIiwic2VsZk4iLCJzbCIsInB1c2giLCJjb25jYXQiLCJkaXJlY3RJZHMiLCJTZXQiLCJfaXRlcmF0b3IiLCJfc3RlcCIsInBpZCIsImlkIiwiYWRkIiwicG4iLCJwbCIsIm5pY2siLCJuaWNrbmFtZSIsImVyciIsIm1heEdvc3NpcEVkZ2VzIiwiZ29zc2lwQ291bnQiLCJzZWVuR29zc2lwIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImVudHJ5IiwiYWRkcmVzcyIsIm5laWdoYm9ycyIsImZyb21OIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm5iIiwibmlkIiwidHJpbSIsImtleSIsImhhcyIsInRvTiIsImlzRGlyZWN0IiwibmwiLCJqb2luIiwicGVlck5laWdoYm9yaG9vZFRvRG90IiwiY2VudGVySWQiLCJjIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/peerTopologyDot.js\n\n}')},"./functions/sidechainHubClient.js"(module){"use strict";eval('{\n\n/**\n * Browser helpers for Hub sidechain / statechain + distributed epoch HTTP surfaces.\n * Uses same-origin `/services/rpc` and `/services/distributed/*` (works for LAN hubs\n * like `http://192.168.50.5:8080` when the UI is loaded from that origin).\n */\n\n/**\n * @param {string} method\n * @param {unknown[]} [params]\n * @returns {Promise<{ ok: boolean, result?: unknown, error?: string }>}\n */\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nfunction hubJsonRpc(_x) {\n return _hubJsonRpc.apply(this, arguments);\n}\n/**\n * @param {string} path\n * @returns {Promise<{ ok: boolean, data?: object, error?: string }>}\n */\nfunction _hubJsonRpc() {\n _hubJsonRpc = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(method) {\n var params,\n res,\n body,\n msg,\n _args = arguments,\n _t,\n _t2;\n return _regenerator().w(function (_context) {\n while (1) switch (_context.p = _context.n) {\n case 0:\n params = _args.length > 1 && _args[1] !== undefined ? _args[1] : [];\n _context.p = 1;\n _context.n = 2;\n return fetch(\'/services/rpc\', {\n method: \'POST\',\n headers: {\n \'Content-Type\': \'application/json\',\n Accept: \'application/json\'\n },\n body: JSON.stringify({\n jsonrpc: \'2.0\',\n id: 1,\n method: method,\n params: params\n })\n });\n case 2:\n res = _context.v;\n body = {};\n _context.p = 3;\n _context.n = 4;\n return res.json();\n case 4:\n body = _context.v;\n _context.n = 6;\n break;\n case 5:\n _context.p = 5;\n _t = _context.v;\n case 6:\n if (res.ok) {\n _context.n = 7;\n break;\n }\n msg = body && body.error && body.error.message || res.statusText || "HTTP ".concat(res.status);\n return _context.a(2, {\n ok: false,\n error: msg\n });\n case 7:\n if (!(body && body.error)) {\n _context.n = 8;\n break;\n }\n return _context.a(2, {\n ok: false,\n error: body.error.message || \'RPC error\'\n });\n case 8:\n return _context.a(2, {\n ok: true,\n result: body && body.result != null ? body.result : null\n });\n case 9:\n _context.p = 9;\n _t2 = _context.v;\n return _context.a(2, {\n ok: false,\n error: _t2 && _t2.message ? _t2.message : String(_t2)\n });\n }\n }, _callee, null, [[3, 5], [1, 9]]);\n }));\n return _hubJsonRpc.apply(this, arguments);\n}\nfunction fetchDistributedJson(_x2) {\n return _fetchDistributedJson.apply(this, arguments);\n}\n/**\n * @returns {Promise<{ ok: boolean, data?: object, error?: string }>}\n */\nfunction _fetchDistributedJson() {\n _fetchDistributedJson = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(path) {\n var res, data, _t3, _t4;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.p = _context2.n) {\n case 0:\n _context2.p = 0;\n _context2.n = 1;\n return fetch(path, {\n headers: {\n Accept: \'application/json\'\n }\n });\n case 1:\n res = _context2.v;\n data = null;\n _context2.p = 2;\n _context2.n = 3;\n return res.json();\n case 3:\n data = _context2.v;\n _context2.n = 5;\n break;\n case 4:\n _context2.p = 4;\n _t3 = _context2.v;\n case 5:\n if (res.ok) {\n _context2.n = 6;\n break;\n }\n return _context2.a(2, {\n ok: false,\n error: data && data.message || res.statusText || "HTTP ".concat(res.status)\n });\n case 6:\n return _context2.a(2, {\n ok: true,\n data: data && _typeof(data) === \'object\' ? data : {}\n });\n case 7:\n _context2.p = 7;\n _t4 = _context2.v;\n return _context2.a(2, {\n ok: false,\n error: _t4 && _t4.message ? _t4.message : String(_t4)\n });\n }\n }, _callee2, null, [[2, 4], [0, 7]]);\n }));\n return _fetchDistributedJson.apply(this, arguments);\n}\nfunction fetchDistributedEpoch() {\n return _fetchDistributedEpoch.apply(this, arguments);\n}\n/**\n * @returns {Promise<{ ok: boolean, data?: object, error?: string }>}\n */\nfunction _fetchDistributedEpoch() {\n _fetchDistributedEpoch = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {\n return _regenerator().w(function (_context3) {\n while (1) switch (_context3.n) {\n case 0:\n return _context3.a(2, fetchDistributedJson(\'/services/distributed/epoch\'));\n }\n }, _callee3);\n }));\n return _fetchDistributedEpoch.apply(this, arguments);\n}\nfunction fetchDistributedManifest() {\n return _fetchDistributedManifest.apply(this, arguments);\n}\n/**\n * @returns {Promise<{ ok: boolean, state?: object, error?: string }>}\n */\nfunction _fetchDistributedManifest() {\n _fetchDistributedManifest = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {\n return _regenerator().w(function (_context4) {\n while (1) switch (_context4.n) {\n case 0:\n return _context4.a(2, fetchDistributedJson(\'/services/distributed/manifest\'));\n }\n }, _callee4);\n }));\n return _fetchDistributedManifest.apply(this, arguments);\n}\nfunction getSidechainState() {\n return _getSidechainState.apply(this, arguments);\n}\n/**\n * @param {{ limit?: number, includePatches?: boolean }} [opts]\n */\nfunction _getSidechainState() {\n _getSidechainState = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {\n var out, r;\n return _regenerator().w(function (_context5) {\n while (1) switch (_context5.n) {\n case 0:\n _context5.n = 1;\n return hubJsonRpc(\'GetSidechainState\', []);\n case 1:\n out = _context5.v;\n if (out.ok) {\n _context5.n = 2;\n break;\n }\n return _context5.a(2, {\n ok: false,\n error: out.error\n });\n case 2:\n r = out.result;\n if (!(r && r.status === \'error\')) {\n _context5.n = 3;\n break;\n }\n return _context5.a(2, {\n ok: false,\n error: r.message || \'GetSidechainState failed\'\n });\n case 3:\n return _context5.a(2, {\n ok: true,\n state: r\n });\n }\n }, _callee5);\n }));\n return _getSidechainState.apply(this, arguments);\n}\nfunction getSidechainJournal() {\n return _getSidechainJournal.apply(this, arguments);\n}\n/**\n * @param {{ limit?: number, includeContent?: boolean }} [opts]\n */\nfunction _getSidechainJournal() {\n _getSidechainJournal = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {\n var opts,\n out,\n r,\n _args6 = arguments;\n return _regenerator().w(function (_context6) {\n while (1) switch (_context6.n) {\n case 0:\n opts = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : {};\n _context6.n = 1;\n return hubJsonRpc(\'GetSidechainJournal\', [opts]);\n case 1:\n out = _context6.v;\n if (out.ok) {\n _context6.n = 2;\n break;\n }\n return _context6.a(2, {\n ok: false,\n error: out.error\n });\n case 2:\n r = out.result;\n if (!(r && r.status === \'error\')) {\n _context6.n = 3;\n break;\n }\n return _context6.a(2, {\n ok: false,\n error: r.message || \'GetSidechainJournal failed\'\n });\n case 3:\n return _context6.a(2, {\n ok: true,\n journal: r\n });\n }\n }, _callee6);\n }));\n return _getSidechainJournal.apply(this, arguments);\n}\nfunction getSidechainSnapshots() {\n return _getSidechainSnapshots.apply(this, arguments);\n}\n/**\n * Submit an RFC6902 patch sequence to Hub sidechain STATE.\n * Multi-op arrays are first-class on the Hub RPC path. When encoding the same\n * proposal as a typed `SIDECHAIN_STATE_PATCH` Message (P2P / activity), use\n * `@fabric/http/functions/messageBodyJsonBridge` so `patchesCanonical` preserves\n * the full sequence (not only a collapsed `/registry` catalog write).\n *\n * @param {{ patches: object[], basisClock: number, adminToken?: string|null, federationWitness?: object|null }} p\n */\nfunction _getSidechainSnapshots() {\n _getSidechainSnapshots = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {\n var opts,\n out,\n r,\n _args7 = arguments;\n return _regenerator().w(function (_context7) {\n while (1) switch (_context7.n) {\n case 0:\n opts = _args7.length > 0 && _args7[0] !== undefined ? _args7[0] : {};\n _context7.n = 1;\n return hubJsonRpc(\'GetSidechainSnapshots\', [opts]);\n case 1:\n out = _context7.v;\n if (out.ok) {\n _context7.n = 2;\n break;\n }\n return _context7.a(2, {\n ok: false,\n error: out.error\n });\n case 2:\n r = out.result;\n if (!(r && r.status === \'error\')) {\n _context7.n = 3;\n break;\n }\n return _context7.a(2, {\n ok: false,\n error: r.message || \'GetSidechainSnapshots failed\'\n });\n case 3:\n return _context7.a(2, {\n ok: true,\n snapshots: r\n });\n }\n }, _callee7);\n }));\n return _getSidechainSnapshots.apply(this, arguments);\n}\nfunction submitSidechainStatePatch(_x3) {\n return _submitSidechainStatePatch.apply(this, arguments);\n}\nfunction _submitSidechainStatePatch() {\n _submitSidechainStatePatch = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8(p) {\n var out, r;\n return _regenerator().w(function (_context8) {\n while (1) switch (_context8.n) {\n case 0:\n _context8.n = 1;\n return hubJsonRpc(\'SubmitSidechainStatePatch\', [p]);\n case 1:\n out = _context8.v;\n if (out.ok) {\n _context8.n = 2;\n break;\n }\n return _context8.a(2, {\n ok: false,\n error: out.error\n });\n case 2:\n r = out.result;\n if (!(r && r.status === \'error\')) {\n _context8.n = 3;\n break;\n }\n return _context8.a(2, {\n ok: false,\n error: r.message || \'patch rejected\'\n });\n case 3:\n return _context8.a(2, {\n ok: true,\n result: r\n });\n }\n }, _callee8);\n }));\n return _submitSidechainStatePatch.apply(this, arguments);\n}\nmodule.exports = {\n hubJsonRpc: hubJsonRpc,\n fetchDistributedJson: fetchDistributedJson,\n fetchDistributedEpoch: fetchDistributedEpoch,\n fetchDistributedManifest: fetchDistributedManifest,\n getSidechainState: getSidechainState,\n getSidechainJournal: getSidechainJournal,\n getSidechainSnapshots: getSidechainSnapshots,\n submitSidechainStatePatch: submitSidechainStatePatch\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvc2lkZWNoYWluSHViQ2xpZW50LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBQUEsU0FBQUssYUFBQSxJQVBBLHVLQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSx3QkFBQVAsTUFBQSxHQUFBQSxNQUFBLE9BQUFRLENBQUEsR0FBQUQsQ0FBQSxDQUFBTixRQUFBLGtCQUFBRixDQUFBLEdBQUFRLENBQUEsQ0FBQUUsV0FBQSw4QkFBQUMsRUFBQUgsQ0FBQSxFQUFBQyxDQUFBLEVBQUFULENBQUEsRUFBQVcsQ0FBQSxRQUFBQyxDQUFBLEdBQUFILENBQUEsSUFBQUEsQ0FBQSxDQUFBTCxTQUFBLFlBQUFTLFNBQUEsR0FBQUosQ0FBQSxHQUFBSSxTQUFBLEVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxNQUFBLENBQUFKLENBQUEsQ0FBQVIsU0FBQSxVQUFBYSxtQkFBQSxDQUFBSCxDQUFBLHVCQUFBTixDQUFBLEVBQUFDLENBQUEsRUFBQVQsQ0FBQSxRQUFBVyxDQUFBLEVBQUFDLENBQUEsRUFBQUUsQ0FBQSxFQUFBSSxDQUFBLE1BQUFDLENBQUEsR0FBQW5CLENBQUEsUUFBQW9CLENBQUEsT0FBQUMsQ0FBQSxLQUFBRixDQUFBLEtBQUFWLENBQUEsS0FBQWEsQ0FBQSxFQUFBaEIsQ0FBQSxFQUFBaUIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFOLENBQUEsRUFBQU0sQ0FBQSxDQUFBQyxJQUFBLENBQUFuQixDQUFBLE1BQUFrQixDQUFBLFdBQUFBLEVBQUFqQixDQUFBLEVBQUFDLENBQUEsV0FBQUcsQ0FBQSxHQUFBSixDQUFBLEVBQUFLLENBQUEsTUFBQUUsQ0FBQSxHQUFBUixDQUFBLEVBQUFlLENBQUEsQ0FBQVosQ0FBQSxHQUFBRCxDQUFBLEVBQUFlLENBQUEsZ0JBQUFDLEVBQUFoQixDQUFBLEVBQUFDLENBQUEsU0FBQUcsQ0FBQSxHQUFBSixDQUFBLEVBQUFNLENBQUEsR0FBQUwsQ0FBQSxFQUFBRixDQUFBLE9BQUFhLENBQUEsSUFBQUYsQ0FBQSxLQUFBbEIsQ0FBQSxJQUFBTyxDQUFBLEdBQUFZLENBQUEsQ0FBQU8sTUFBQSxFQUFBbkIsQ0FBQSxVQUFBUCxDQUFBLEVBQUFXLENBQUEsR0FBQVEsQ0FBQSxDQUFBWixDQUFBLEdBQUFpQixDQUFBLEdBQUFILENBQUEsQ0FBQUYsQ0FBQSxFQUFBUSxDQUFBLEdBQUFoQixDQUFBLEtBQUFILENBQUEsUUFBQVIsQ0FBQSxHQUFBMkIsQ0FBQSxLQUFBbEIsQ0FBQSxNQUFBSyxDQUFBLEdBQUFILENBQUEsRUFBQUMsQ0FBQSxHQUFBRCxDQUFBLFlBQUFDLENBQUEsV0FBQUQsQ0FBQSxNQUFBQSxDQUFBLE1BQUFMLENBQUEsSUFBQUssQ0FBQSxPQUFBYSxDQUFBLE1BQUF4QixDQUFBLEdBQUFRLENBQUEsUUFBQWdCLENBQUEsR0FBQWIsQ0FBQSxRQUFBQyxDQUFBLE1BQUFTLENBQUEsQ0FBQUMsQ0FBQSxHQUFBYixDQUFBLEVBQUFZLENBQUEsQ0FBQVosQ0FBQSxHQUFBRSxDQUFBLE9BQUFhLENBQUEsR0FBQUcsQ0FBQSxLQUFBM0IsQ0FBQSxHQUFBUSxDQUFBLFFBQUFHLENBQUEsTUFBQUYsQ0FBQSxJQUFBQSxDQUFBLEdBQUFrQixDQUFBLE1BQUFoQixDQUFBLE1BQUFILENBQUEsRUFBQUcsQ0FBQSxNQUFBRixDQUFBLEVBQUFZLENBQUEsQ0FBQVosQ0FBQSxHQUFBa0IsQ0FBQSxFQUFBZixDQUFBLGNBQUFaLENBQUEsSUFBQVEsQ0FBQSxhQUFBZSxDQUFBLFFBQUFILENBQUEsT0FBQVgsQ0FBQSxxQkFBQVQsQ0FBQSxFQUFBbUIsQ0FBQSxFQUFBUSxDQUFBLFFBQUFULENBQUEsWUFBQVUsU0FBQSx1Q0FBQVIsQ0FBQSxVQUFBRCxDQUFBLElBQUFLLENBQUEsQ0FBQUwsQ0FBQSxFQUFBUSxDQUFBLEdBQUFmLENBQUEsR0FBQU8sQ0FBQSxFQUFBTCxDQUFBLEdBQUFhLENBQUEsR0FBQXBCLENBQUEsR0FBQUssQ0FBQSxPQUFBTixDQUFBLEdBQUFRLENBQUEsTUFBQU0sQ0FBQSxLQUFBVCxDQUFBLEtBQUFDLENBQUEsR0FBQUEsQ0FBQSxRQUFBQSxDQUFBLFNBQUFTLENBQUEsQ0FBQVosQ0FBQSxRQUFBZSxDQUFBLENBQUFaLENBQUEsRUFBQUUsQ0FBQSxLQUFBTyxDQUFBLENBQUFaLENBQUEsR0FBQUssQ0FBQSxHQUFBTyxDQUFBLENBQUFDLENBQUEsR0FBQVIsQ0FBQSxhQUFBSSxDQUFBLE1BQUFQLENBQUEsUUFBQUMsQ0FBQSxLQUFBWixDQUFBLFlBQUFPLENBQUEsR0FBQUksQ0FBQSxDQUFBWCxDQUFBLFdBQUFPLENBQUEsR0FBQUEsQ0FBQSxDQUFBc0IsSUFBQSxDQUFBbEIsQ0FBQSxFQUFBRyxDQUFBLFVBQUFjLFNBQUEsMkNBQUFyQixDQUFBLENBQUF1QixJQUFBLFNBQUF2QixDQUFBLEVBQUFPLENBQUEsR0FBQVAsQ0FBQSxDQUFBd0IsS0FBQSxFQUFBbkIsQ0FBQSxTQUFBQSxDQUFBLG9CQUFBQSxDQUFBLEtBQUFMLENBQUEsR0FBQUksQ0FBQSxlQUFBSixDQUFBLENBQUFzQixJQUFBLENBQUFsQixDQUFBLEdBQUFDLENBQUEsU0FBQUUsQ0FBQSxHQUFBYyxTQUFBLHVDQUFBNUIsQ0FBQSxnQkFBQVksQ0FBQSxPQUFBRCxDQUFBLEdBQUFMLENBQUEsY0FBQUMsQ0FBQSxJQUFBYSxDQUFBLEdBQUFDLENBQUEsQ0FBQVosQ0FBQSxRQUFBSyxDQUFBLEdBQUFOLENBQUEsQ0FBQXFCLElBQUEsQ0FBQXBCLENBQUEsRUFBQVksQ0FBQSxPQUFBRSxDQUFBLGtCQUFBaEIsQ0FBQSxJQUFBSSxDQUFBLEdBQUFMLENBQUEsRUFBQU0sQ0FBQSxNQUFBRSxDQUFBLEdBQUFQLENBQUEsY0FBQVcsQ0FBQSxtQkFBQWEsS0FBQSxFQUFBeEIsQ0FBQSxFQUFBdUIsSUFBQSxFQUFBVixDQUFBLFNBQUFaLENBQUEsRUFBQVIsQ0FBQSxFQUFBVyxDQUFBLFFBQUFHLENBQUEsUUFBQVMsQ0FBQSxnQkFBQVYsVUFBQSxjQUFBbUIsa0JBQUEsY0FBQUMsMkJBQUEsS0FBQTFCLENBQUEsR0FBQVEsTUFBQSxDQUFBbUIsY0FBQSxNQUFBdEIsQ0FBQSxNQUFBSCxDQUFBLElBQUFGLENBQUEsQ0FBQUEsQ0FBQSxJQUFBRSxDQUFBLFNBQUFRLG1CQUFBLENBQUFWLENBQUEsT0FBQUUsQ0FBQSxpQ0FBQUYsQ0FBQSxHQUFBTyxDQUFBLEdBQUFtQiwwQkFBQSxDQUFBN0IsU0FBQSxHQUFBUyxTQUFBLENBQUFULFNBQUEsR0FBQVcsTUFBQSxDQUFBQyxNQUFBLENBQUFKLENBQUEsWUFBQU0sRUFBQVosQ0FBQSxXQUFBUyxNQUFBLENBQUFvQixjQUFBLEdBQUFwQixNQUFBLENBQUFvQixjQUFBLENBQUE3QixDQUFBLEVBQUEyQiwwQkFBQSxLQUFBM0IsQ0FBQSxDQUFBOEIsU0FBQSxHQUFBSCwwQkFBQSxFQUFBaEIsbUJBQUEsQ0FBQVgsQ0FBQSxFQUFBTixDQUFBLHlCQUFBTSxDQUFBLENBQUFGLFNBQUEsR0FBQVcsTUFBQSxDQUFBQyxNQUFBLENBQUFGLENBQUEsR0FBQVIsQ0FBQSxXQUFBMEIsaUJBQUEsQ0FBQTVCLFNBQUEsR0FBQTZCLDBCQUFBLEVBQUFoQixtQkFBQSxDQUFBSCxDQUFBLGlCQUFBbUIsMEJBQUEsR0FBQWhCLG1CQUFBLENBQUFnQiwwQkFBQSxpQkFBQUQsaUJBQUEsR0FBQUEsaUJBQUEsQ0FBQUssV0FBQSx3QkFBQXBCLG1CQUFBLENBQUFnQiwwQkFBQSxFQUFBakMsQ0FBQSx3QkFBQWlCLG1CQUFBLENBQUFILENBQUEsR0FBQUcsbUJBQUEsQ0FBQUgsQ0FBQSxFQUFBZCxDQUFBLGdCQUFBaUIsbUJBQUEsQ0FBQUgsQ0FBQSxFQUFBTCxDQUFBLGlDQUFBUSxtQkFBQSxDQUFBSCxDQUFBLDhEQUFBVCxZQUFBLFlBQUFBLGFBQUEsYUFBQWlDLENBQUEsRUFBQTNCLENBQUEsRUFBQTRCLENBQUEsRUFBQXJCLENBQUE7QUFBQSxTQUFBRCxvQkFBQVgsQ0FBQSxFQUFBRSxDQUFBLEVBQUFDLENBQUEsRUFBQUYsQ0FBQSxRQUFBSSxDQUFBLEdBQUFJLE1BQUEsQ0FBQXlCLGNBQUEsUUFBQTdCLENBQUEsdUJBQUFMLENBQUEsSUFBQUssQ0FBQSxRQUFBTSxtQkFBQSxZQUFBd0IsbUJBQUFuQyxDQUFBLEVBQUFFLENBQUEsRUFBQUMsQ0FBQSxFQUFBRixDQUFBLGFBQUFQLEVBQUFRLENBQUEsRUFBQUMsQ0FBQSxJQUFBUSxtQkFBQSxDQUFBWCxDQUFBLEVBQUFFLENBQUEsWUFBQUYsQ0FBQSxnQkFBQW9DLE9BQUEsQ0FBQWxDLENBQUEsRUFBQUMsQ0FBQSxFQUFBSCxDQUFBLFNBQUFFLENBQUEsR0FBQUcsQ0FBQSxHQUFBQSxDQUFBLENBQUFMLENBQUEsRUFBQUUsQ0FBQSxJQUFBdUIsS0FBQSxFQUFBdEIsQ0FBQSxFQUFBa0MsVUFBQSxHQUFBcEMsQ0FBQSxFQUFBcUMsWUFBQSxHQUFBckMsQ0FBQSxFQUFBc0MsUUFBQSxHQUFBdEMsQ0FBQSxNQUFBRCxDQUFBLENBQUFFLENBQUEsSUFBQUMsQ0FBQSxJQUFBVCxDQUFBLGFBQUFBLENBQUEsY0FBQUEsQ0FBQSxtQkFBQWlCLG1CQUFBLENBQUFYLENBQUEsRUFBQUUsQ0FBQSxFQUFBQyxDQUFBLEVBQUFGLENBQUE7QUFBQSxTQUFBdUMsbUJBQUFyQyxDQUFBLEVBQUFGLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLEVBQUFSLENBQUEsRUFBQXVCLENBQUEsRUFBQVgsQ0FBQSxjQUFBRCxDQUFBLEdBQUFGLENBQUEsQ0FBQWMsQ0FBQSxFQUFBWCxDQUFBLEdBQUFFLENBQUEsR0FBQUgsQ0FBQSxDQUFBb0IsS0FBQSxXQUFBdEIsQ0FBQSxnQkFBQUgsQ0FBQSxDQUFBRyxDQUFBLEtBQUFFLENBQUEsQ0FBQW1CLElBQUEsR0FBQXZCLENBQUEsQ0FBQU8sQ0FBQSxJQUFBaUMsT0FBQSxDQUFBQyxPQUFBLENBQUFsQyxDQUFBLEVBQUFtQyxJQUFBLENBQUF6QyxDQUFBLEVBQUFSLENBQUE7QUFBQSxTQUFBa0Qsa0JBQUF6QyxDQUFBLDZCQUFBRixDQUFBLFNBQUFELENBQUEsR0FBQTZDLFNBQUEsYUFBQUosT0FBQSxXQUFBdkMsQ0FBQSxFQUFBUixDQUFBLFFBQUF1QixDQUFBLEdBQUFkLENBQUEsQ0FBQTJDLEtBQUEsQ0FBQTdDLENBQUEsRUFBQUQsQ0FBQSxZQUFBK0MsTUFBQTVDLENBQUEsSUFBQXFDLGtCQUFBLENBQUF2QixDQUFBLEVBQUFmLENBQUEsRUFBQVIsQ0FBQSxFQUFBcUQsS0FBQSxFQUFBQyxNQUFBLFVBQUE3QyxDQUFBLGNBQUE2QyxPQUFBN0MsQ0FBQSxJQUFBcUMsa0JBQUEsQ0FBQXZCLENBQUEsRUFBQWYsQ0FBQSxFQUFBUixDQUFBLEVBQUFxRCxLQUFBLEVBQUFDLE1BQUEsV0FBQTdDLENBQUEsS0FBQTRDLEtBQUE7QUFBQSxTQVllRSxVQUFVQSxDQUFBQyxFQUFBO0VBQUEsT0FBQUMsV0FBQSxDQUFBTCxLQUFBLE9BQUFELFNBQUE7QUFBQTtBQXdCekI7QUFDQTtBQUNBO0FBQ0E7QUFIQSxTQUFBTSxZQUFBO0VBQUFBLFdBQUEsR0FBQVAsaUJBQUEsY0FBQTdDLFlBQUEsR0FBQWtDLENBQUEsQ0F4QkEsU0FBQW1CLFFBQTJCQyxNQUFNO0lBQUEsSUFBQUMsTUFBQTtNQUFBQyxHQUFBO01BQUFDLElBQUE7TUFBQUMsR0FBQTtNQUFBQyxLQUFBLEdBQUFiLFNBQUE7TUFBQWMsRUFBQTtNQUFBQyxHQUFBO0lBQUEsT0FBQTdELFlBQUEsR0FBQWlDLENBQUEsV0FBQTZCLFFBQUE7TUFBQSxrQkFBQUEsUUFBQSxDQUFBaEQsQ0FBQSxHQUFBZ0QsUUFBQSxDQUFBMUQsQ0FBQTtRQUFBO1VBQUVtRCxNQUFNLEdBQUFJLEtBQUEsQ0FBQXRDLE1BQUEsUUFBQXNDLEtBQUEsUUFBQUksU0FBQSxHQUFBSixLQUFBLE1BQUcsRUFBRTtVQUFBRyxRQUFBLENBQUFoRCxDQUFBO1VBQUFnRCxRQUFBLENBQUExRCxDQUFBO1VBQUEsT0FFeEI0RCxLQUFLLENBQUMsZUFBZSxFQUFFO1lBQ3ZDVixNQUFNLEVBQUUsTUFBTTtZQUNkVyxPQUFPLEVBQUU7Y0FBRSxjQUFjLEVBQUUsa0JBQWtCO2NBQUVDLE1BQU0sRUFBRTtZQUFtQixDQUFDO1lBQzNFVCxJQUFJLEVBQUVVLElBQUksQ0FBQ0MsU0FBUyxDQUFDO2NBQUVDLE9BQU8sRUFBRSxLQUFLO2NBQUVDLEVBQUUsRUFBRSxDQUFDO2NBQUVoQixNQUFNLEVBQU5BLE1BQU07Y0FBRUMsTUFBTSxFQUFOQTtZQUFPLENBQUM7VUFDaEUsQ0FBQyxDQUFDO1FBQUE7VUFKSUMsR0FBRyxHQUFBTSxRQUFBLENBQUE3QyxDQUFBO1VBS0x3QyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1VBQUFLLFFBQUEsQ0FBQWhELENBQUE7VUFBQWdELFFBQUEsQ0FBQTFELENBQUE7VUFBQSxPQUVFb0QsR0FBRyxDQUFDZSxJQUFJLENBQUMsQ0FBQztRQUFBO1VBQXZCZCxJQUFJLEdBQUFLLFFBQUEsQ0FBQTdDLENBQUE7VUFBQTZDLFFBQUEsQ0FBQTFELENBQUE7VUFBQTtRQUFBO1VBQUEwRCxRQUFBLENBQUFoRCxDQUFBO1VBQUE4QyxFQUFBLEdBQUFFLFFBQUEsQ0FBQTdDLENBQUE7UUFBQTtVQUFBLElBRUR1QyxHQUFHLENBQUNnQixFQUFFO1lBQUFWLFFBQUEsQ0FBQTFELENBQUE7WUFBQTtVQUFBO1VBQ0hzRCxHQUFHLEdBQUlELElBQUksSUFBSUEsSUFBSSxDQUFDZ0IsS0FBSyxJQUFJaEIsSUFBSSxDQUFDZ0IsS0FBSyxDQUFDQyxPQUFPLElBQUtsQixHQUFHLENBQUNtQixVQUFVLFlBQUFDLE1BQUEsQ0FBWXBCLEdBQUcsQ0FBQ3FCLE1BQU0sQ0FBRTtVQUFBLE9BQUFmLFFBQUEsQ0FBQTVDLENBQUEsSUFDekY7WUFBRXNELEVBQUUsRUFBRSxLQUFLO1lBQUVDLEtBQUssRUFBRWY7VUFBSSxDQUFDO1FBQUE7VUFBQSxNQUU5QkQsSUFBSSxJQUFJQSxJQUFJLENBQUNnQixLQUFLO1lBQUFYLFFBQUEsQ0FBQTFELENBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQTBELFFBQUEsQ0FBQTVDLENBQUEsSUFDYjtZQUFFc0QsRUFBRSxFQUFFLEtBQUs7WUFBRUMsS0FBSyxFQUFFaEIsSUFBSSxDQUFDZ0IsS0FBSyxDQUFDQyxPQUFPLElBQUk7VUFBWSxDQUFDO1FBQUE7VUFBQSxPQUFBWixRQUFBLENBQUE1QyxDQUFBLElBRXpEO1lBQUVzRCxFQUFFLEVBQUUsSUFBSTtZQUFFTSxNQUFNLEVBQUVyQixJQUFJLElBQUlBLElBQUksQ0FBQ3FCLE1BQU0sSUFBSSxJQUFJLEdBQUdyQixJQUFJLENBQUNxQixNQUFNLEdBQUc7VUFBSyxDQUFDO1FBQUE7VUFBQWhCLFFBQUEsQ0FBQWhELENBQUE7VUFBQStDLEdBQUEsR0FBQUMsUUFBQSxDQUFBN0MsQ0FBQTtVQUFBLE9BQUE2QyxRQUFBLENBQUE1QyxDQUFBLElBRXRFO1lBQUVzRCxFQUFFLEVBQUUsS0FBSztZQUFFQyxLQUFLLEVBQUVaLEdBQUEsSUFBS0EsR0FBQSxDQUFFYSxPQUFPLEdBQUdiLEdBQUEsQ0FBRWEsT0FBTyxHQUFHSyxNQUFNLENBQUFsQixHQUFFO1VBQUUsQ0FBQztNQUFBO0lBQUEsR0FBQVIsT0FBQTtFQUFBLENBRXRFO0VBQUEsT0FBQUQsV0FBQSxDQUFBTCxLQUFBLE9BQUFELFNBQUE7QUFBQTtBQUFBLFNBTWNrQyxvQkFBb0JBLENBQUFDLEdBQUE7RUFBQSxPQUFBQyxxQkFBQSxDQUFBbkMsS0FBQSxPQUFBRCxTQUFBO0FBQUE7QUFnQm5DO0FBQ0E7QUFDQTtBQUZBLFNBQUFvQyxzQkFBQTtFQUFBQSxxQkFBQSxHQUFBckMsaUJBQUEsY0FBQTdDLFlBQUEsR0FBQWtDLENBQUEsQ0FoQkEsU0FBQWlELFNBQXFDQyxJQUFJO0lBQUEsSUFBQTVCLEdBQUEsRUFBQTZCLElBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBO0lBQUEsT0FBQXZGLFlBQUEsR0FBQWlDLENBQUEsV0FBQXVELFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBMUUsQ0FBQSxHQUFBMEUsU0FBQSxDQUFBcEYsQ0FBQTtRQUFBO1VBQUFvRixTQUFBLENBQUExRSxDQUFBO1VBQUEwRSxTQUFBLENBQUFwRixDQUFBO1VBQUEsT0FFbkI0RCxLQUFLLENBQUNvQixJQUFJLEVBQUU7WUFBRW5CLE9BQU8sRUFBRTtjQUFFQyxNQUFNLEVBQUU7WUFBbUI7VUFBRSxDQUFDLENBQUM7UUFBQTtVQUFwRVYsR0FBRyxHQUFBZ0MsU0FBQSxDQUFBdkUsQ0FBQTtVQUNMb0UsSUFBSSxHQUFHLElBQUk7VUFBQUcsU0FBQSxDQUFBMUUsQ0FBQTtVQUFBMEUsU0FBQSxDQUFBcEYsQ0FBQTtVQUFBLE9BRUFvRCxHQUFHLENBQUNlLElBQUksQ0FBQyxDQUFDO1FBQUE7VUFBdkJjLElBQUksR0FBQUcsU0FBQSxDQUFBdkUsQ0FBQTtVQUFBdUUsU0FBQSxDQUFBcEYsQ0FBQTtVQUFBO1FBQUE7VUFBQW9GLFNBQUEsQ0FBQTFFLENBQUE7VUFBQXdFLEdBQUEsR0FBQUUsU0FBQSxDQUFBdkUsQ0FBQTtRQUFBO1VBQUEsSUFFRHVDLEdBQUcsQ0FBQ2dCLEVBQUU7WUFBQWdCLFNBQUEsQ0FBQXBGLENBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQW9GLFNBQUEsQ0FBQXRFLENBQUEsSUFDRjtZQUFFc0QsRUFBRSxFQUFFLEtBQUs7WUFBRUMsS0FBSyxFQUFHWSxJQUFJLElBQUlBLElBQUksQ0FBQ1gsT0FBTyxJQUFLbEIsR0FBRyxDQUFDbUIsVUFBVSxZQUFBQyxNQUFBLENBQVlwQixHQUFHLENBQUNxQixNQUFNO1VBQUcsQ0FBQztRQUFBO1VBQUEsT0FBQVcsU0FBQSxDQUFBdEUsQ0FBQSxJQUV4RjtZQUFFc0QsRUFBRSxFQUFFLElBQUk7WUFBRWEsSUFBSSxFQUFFQSxJQUFJLElBQUkzRixPQUFBLENBQU8yRixJQUFJLE1BQUssUUFBUSxHQUFHQSxJQUFJLEdBQUcsQ0FBQztVQUFFLENBQUM7UUFBQTtVQUFBRyxTQUFBLENBQUExRSxDQUFBO1VBQUF5RSxHQUFBLEdBQUFDLFNBQUEsQ0FBQXZFLENBQUE7VUFBQSxPQUFBdUUsU0FBQSxDQUFBdEUsQ0FBQSxJQUVoRTtZQUFFc0QsRUFBRSxFQUFFLEtBQUs7WUFBRUMsS0FBSyxFQUFFYyxHQUFBLElBQUtBLEdBQUEsQ0FBRWIsT0FBTyxHQUFHYSxHQUFBLENBQUViLE9BQU8sR0FBR0ssTUFBTSxDQUFBUSxHQUFFO1VBQUUsQ0FBQztNQUFBO0lBQUEsR0FBQUosUUFBQTtFQUFBLENBRXRFO0VBQUEsT0FBQUQscUJBQUEsQ0FBQW5DLEtBQUEsT0FBQUQsU0FBQTtBQUFBO0FBQUEsU0FLYzJDLHFCQUFxQkEsQ0FBQTtFQUFBLE9BQUFDLHNCQUFBLENBQUEzQyxLQUFBLE9BQUFELFNBQUE7QUFBQTtBQUlwQztBQUNBO0FBQ0E7QUFGQSxTQUFBNEMsdUJBQUE7RUFBQUEsc0JBQUEsR0FBQTdDLGlCQUFBLGNBQUE3QyxZQUFBLEdBQUFrQyxDQUFBLENBSkEsU0FBQXlELFNBQUE7SUFBQSxPQUFBM0YsWUFBQSxHQUFBaUMsQ0FBQSxXQUFBMkQsU0FBQTtNQUFBLGtCQUFBQSxTQUFBLENBQUF4RixDQUFBO1FBQUE7VUFBQSxPQUFBd0YsU0FBQSxDQUFBMUUsQ0FBQSxJQUNTOEQsb0JBQW9CLENBQUMsNkJBQTZCLENBQUM7TUFBQTtJQUFBLEdBQUFXLFFBQUE7RUFBQSxDQUMzRDtFQUFBLE9BQUFELHNCQUFBLENBQUEzQyxLQUFBLE9BQUFELFNBQUE7QUFBQTtBQUFBLFNBS2MrQyx3QkFBd0JBLENBQUE7RUFBQSxPQUFBQyx5QkFBQSxDQUFBL0MsS0FBQSxPQUFBRCxTQUFBO0FBQUE7QUFJdkM7QUFDQTtBQUNBO0FBRkEsU0FBQWdELDBCQUFBO0VBQUFBLHlCQUFBLEdBQUFqRCxpQkFBQSxjQUFBN0MsWUFBQSxHQUFBa0MsQ0FBQSxDQUpBLFNBQUE2RCxTQUFBO0lBQUEsT0FBQS9GLFlBQUEsR0FBQWlDLENBQUEsV0FBQStELFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBNUYsQ0FBQTtRQUFBO1VBQUEsT0FBQTRGLFNBQUEsQ0FBQTlFLENBQUEsSUFDUzhELG9CQUFvQixDQUFDLGdDQUFnQyxDQUFDO01BQUE7SUFBQSxHQUFBZSxRQUFBO0VBQUEsQ0FDOUQ7RUFBQSxPQUFBRCx5QkFBQSxDQUFBL0MsS0FBQSxPQUFBRCxTQUFBO0FBQUE7QUFBQSxTQUtjbUQsaUJBQWlCQSxDQUFBO0VBQUEsT0FBQUMsa0JBQUEsQ0FBQW5ELEtBQUEsT0FBQUQsU0FBQTtBQUFBO0FBVWhDO0FBQ0E7QUFDQTtBQUZBLFNBQUFvRCxtQkFBQTtFQUFBQSxrQkFBQSxHQUFBckQsaUJBQUEsY0FBQTdDLFlBQUEsR0FBQWtDLENBQUEsQ0FWQSxTQUFBaUUsU0FBQTtJQUFBLElBQUFDLEdBQUEsRUFBQWpHLENBQUE7SUFBQSxPQUFBSCxZQUFBLEdBQUFpQyxDQUFBLFdBQUFvRSxTQUFBO01BQUEsa0JBQUFBLFNBQUEsQ0FBQWpHLENBQUE7UUFBQTtVQUFBaUcsU0FBQSxDQUFBakcsQ0FBQTtVQUFBLE9BQ29COEMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQztRQUFBO1VBQS9Da0QsR0FBRyxHQUFBQyxTQUFBLENBQUFwRixDQUFBO1VBQUEsSUFDSm1GLEdBQUcsQ0FBQzVCLEVBQUU7WUFBQTZCLFNBQUEsQ0FBQWpHLENBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQWlHLFNBQUEsQ0FBQW5GLENBQUEsSUFBUztZQUFFc0QsRUFBRSxFQUFFLEtBQUs7WUFBRUMsS0FBSyxFQUFFMkIsR0FBRyxDQUFDM0I7VUFBTSxDQUFDO1FBQUE7VUFDN0N0RSxDQUFDLEdBQUdpRyxHQUFHLENBQUN0QixNQUFNO1VBQUEsTUFDaEIzRSxDQUFDLElBQUlBLENBQUMsQ0FBQzBFLE1BQU0sS0FBSyxPQUFPO1lBQUF3QixTQUFBLENBQUFqRyxDQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUFpRyxTQUFBLENBQUFuRixDQUFBLElBQ3BCO1lBQUVzRCxFQUFFLEVBQUUsS0FBSztZQUFFQyxLQUFLLEVBQUV0RSxDQUFDLENBQUN1RSxPQUFPLElBQUk7VUFBMkIsQ0FBQztRQUFBO1VBQUEsT0FBQTJCLFNBQUEsQ0FBQW5GLENBQUEsSUFFL0Q7WUFBRXNELEVBQUUsRUFBRSxJQUFJO1lBQUU4QixLQUFLLEVBQUVuRztVQUFFLENBQUM7TUFBQTtJQUFBLEdBQUFnRyxRQUFBO0VBQUEsQ0FDOUI7RUFBQSxPQUFBRCxrQkFBQSxDQUFBbkQsS0FBQSxPQUFBRCxTQUFBO0FBQUE7QUFBQSxTQUtjeUQsbUJBQW1CQSxDQUFBO0VBQUEsT0FBQUMsb0JBQUEsQ0FBQXpELEtBQUEsT0FBQUQsU0FBQTtBQUFBO0FBVWxDO0FBQ0E7QUFDQTtBQUZBLFNBQUEwRCxxQkFBQTtFQUFBQSxvQkFBQSxHQUFBM0QsaUJBQUEsY0FBQTdDLFlBQUEsR0FBQWtDLENBQUEsQ0FWQSxTQUFBdUUsU0FBQTtJQUFBLElBQUFDLElBQUE7TUFBQU4sR0FBQTtNQUFBakcsQ0FBQTtNQUFBd0csTUFBQSxHQUFBN0QsU0FBQTtJQUFBLE9BQUE5QyxZQUFBLEdBQUFpQyxDQUFBLFdBQUEyRSxTQUFBO01BQUEsa0JBQUFBLFNBQUEsQ0FBQXhHLENBQUE7UUFBQTtVQUFvQ3NHLElBQUksR0FBQUMsTUFBQSxDQUFBdEYsTUFBQSxRQUFBc0YsTUFBQSxRQUFBNUMsU0FBQSxHQUFBNEMsTUFBQSxNQUFHLENBQUMsQ0FBQztVQUFBQyxTQUFBLENBQUF4RyxDQUFBO1VBQUEsT0FDekI4QyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQ3dELElBQUksQ0FBQyxDQUFDO1FBQUE7VUFBckROLEdBQUcsR0FBQVEsU0FBQSxDQUFBM0YsQ0FBQTtVQUFBLElBQ0ptRixHQUFHLENBQUM1QixFQUFFO1lBQUFvQyxTQUFBLENBQUF4RyxDQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUF3RyxTQUFBLENBQUExRixDQUFBLElBQVM7WUFBRXNELEVBQUUsRUFBRSxLQUFLO1lBQUVDLEtBQUssRUFBRTJCLEdBQUcsQ0FBQzNCO1VBQU0sQ0FBQztRQUFBO1VBQzdDdEUsQ0FBQyxHQUFHaUcsR0FBRyxDQUFDdEIsTUFBTTtVQUFBLE1BQ2hCM0UsQ0FBQyxJQUFJQSxDQUFDLENBQUMwRSxNQUFNLEtBQUssT0FBTztZQUFBK0IsU0FBQSxDQUFBeEcsQ0FBQTtZQUFBO1VBQUE7VUFBQSxPQUFBd0csU0FBQSxDQUFBMUYsQ0FBQSxJQUNwQjtZQUFFc0QsRUFBRSxFQUFFLEtBQUs7WUFBRUMsS0FBSyxFQUFFdEUsQ0FBQyxDQUFDdUUsT0FBTyxJQUFJO1VBQTZCLENBQUM7UUFBQTtVQUFBLE9BQUFrQyxTQUFBLENBQUExRixDQUFBLElBRWpFO1lBQUVzRCxFQUFFLEVBQUUsSUFBSTtZQUFFcUMsT0FBTyxFQUFFMUc7VUFBRSxDQUFDO01BQUE7SUFBQSxHQUFBc0csUUFBQTtFQUFBLENBQ2hDO0VBQUEsT0FBQUQsb0JBQUEsQ0FBQXpELEtBQUEsT0FBQUQsU0FBQTtBQUFBO0FBQUEsU0FLY2dFLHFCQUFxQkEsQ0FBQTtFQUFBLE9BQUFDLHNCQUFBLENBQUFoRSxLQUFBLE9BQUFELFNBQUE7QUFBQTtBQVVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQSxTQUFBaUUsdUJBQUE7RUFBQUEsc0JBQUEsR0FBQWxFLGlCQUFBLGNBQUE3QyxZQUFBLEdBQUFrQyxDQUFBLENBVkEsU0FBQThFLFNBQUE7SUFBQSxJQUFBTixJQUFBO01BQUFOLEdBQUE7TUFBQWpHLENBQUE7TUFBQThHLE1BQUEsR0FBQW5FLFNBQUE7SUFBQSxPQUFBOUMsWUFBQSxHQUFBaUMsQ0FBQSxXQUFBaUYsU0FBQTtNQUFBLGtCQUFBQSxTQUFBLENBQUE5RyxDQUFBO1FBQUE7VUFBc0NzRyxJQUFJLEdBQUFPLE1BQUEsQ0FBQTVGLE1BQUEsUUFBQTRGLE1BQUEsUUFBQWxELFNBQUEsR0FBQWtELE1BQUEsTUFBRyxDQUFDLENBQUM7VUFBQUMsU0FBQSxDQUFBOUcsQ0FBQTtVQUFBLE9BQzNCOEMsVUFBVSxDQUFDLHVCQUF1QixFQUFFLENBQUN3RCxJQUFJLENBQUMsQ0FBQztRQUFBO1VBQXZETixHQUFHLEdBQUFjLFNBQUEsQ0FBQWpHLENBQUE7VUFBQSxJQUNKbUYsR0FBRyxDQUFDNUIsRUFBRTtZQUFBMEMsU0FBQSxDQUFBOUcsQ0FBQTtZQUFBO1VBQUE7VUFBQSxPQUFBOEcsU0FBQSxDQUFBaEcsQ0FBQSxJQUFTO1lBQUVzRCxFQUFFLEVBQUUsS0FBSztZQUFFQyxLQUFLLEVBQUUyQixHQUFHLENBQUMzQjtVQUFNLENBQUM7UUFBQTtVQUM3Q3RFLENBQUMsR0FBR2lHLEdBQUcsQ0FBQ3RCLE1BQU07VUFBQSxNQUNoQjNFLENBQUMsSUFBSUEsQ0FBQyxDQUFDMEUsTUFBTSxLQUFLLE9BQU87WUFBQXFDLFNBQUEsQ0FBQTlHLENBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQThHLFNBQUEsQ0FBQWhHLENBQUEsSUFDcEI7WUFBRXNELEVBQUUsRUFBRSxLQUFLO1lBQUVDLEtBQUssRUFBRXRFLENBQUMsQ0FBQ3VFLE9BQU8sSUFBSTtVQUErQixDQUFDO1FBQUE7VUFBQSxPQUFBd0MsU0FBQSxDQUFBaEcsQ0FBQSxJQUVuRTtZQUFFc0QsRUFBRSxFQUFFLElBQUk7WUFBRTJDLFNBQVMsRUFBRWhIO1VBQUUsQ0FBQztNQUFBO0lBQUEsR0FBQTZHLFFBQUE7RUFBQSxDQUNsQztFQUFBLE9BQUFELHNCQUFBLENBQUFoRSxLQUFBLE9BQUFELFNBQUE7QUFBQTtBQUFBLFNBV2NzRSx5QkFBeUJBLENBQUFDLEdBQUE7RUFBQSxPQUFBQywwQkFBQSxDQUFBdkUsS0FBQSxPQUFBRCxTQUFBO0FBQUE7QUFBQSxTQUFBd0UsMkJBQUE7RUFBQUEsMEJBQUEsR0FBQXpFLGlCQUFBLGNBQUE3QyxZQUFBLEdBQUFrQyxDQUFBLENBQXhDLFNBQUFxRixTQUEwQ3pHLENBQUM7SUFBQSxJQUFBc0YsR0FBQSxFQUFBakcsQ0FBQTtJQUFBLE9BQUFILFlBQUEsR0FBQWlDLENBQUEsV0FBQXVGLFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBcEgsQ0FBQTtRQUFBO1VBQUFvSCxTQUFBLENBQUFwSCxDQUFBO1VBQUEsT0FDdkI4QyxVQUFVLENBQUMsMkJBQTJCLEVBQUUsQ0FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQUE7VUFBeERzRixHQUFHLEdBQUFvQixTQUFBLENBQUF2RyxDQUFBO1VBQUEsSUFDSm1GLEdBQUcsQ0FBQzVCLEVBQUU7WUFBQWdELFNBQUEsQ0FBQXBILENBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQW9ILFNBQUEsQ0FBQXRHLENBQUEsSUFBUztZQUFFc0QsRUFBRSxFQUFFLEtBQUs7WUFBRUMsS0FBSyxFQUFFMkIsR0FBRyxDQUFDM0I7VUFBTSxDQUFDO1FBQUE7VUFDN0N0RSxDQUFDLEdBQUdpRyxHQUFHLENBQUN0QixNQUFNO1VBQUEsTUFDaEIzRSxDQUFDLElBQUlBLENBQUMsQ0FBQzBFLE1BQU0sS0FBSyxPQUFPO1lBQUEyQyxTQUFBLENBQUFwSCxDQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUFvSCxTQUFBLENBQUF0RyxDQUFBLElBQ3BCO1lBQUVzRCxFQUFFLEVBQUUsS0FBSztZQUFFQyxLQUFLLEVBQUV0RSxDQUFDLENBQUN1RSxPQUFPLElBQUk7VUFBaUIsQ0FBQztRQUFBO1VBQUEsT0FBQThDLFNBQUEsQ0FBQXRHLENBQUEsSUFFckQ7WUFBRXNELEVBQUUsRUFBRSxJQUFJO1lBQUVNLE1BQU0sRUFBRTNFO1VBQUUsQ0FBQztNQUFBO0lBQUEsR0FBQW9ILFFBQUE7RUFBQSxDQUMvQjtFQUFBLE9BQUFELDBCQUFBLENBQUF2RSxLQUFBLE9BQUFELFNBQUE7QUFBQTtBQUVEMkUsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZnhFLFVBQVUsRUFBVkEsVUFBVTtFQUNWOEIsb0JBQW9CLEVBQXBCQSxvQkFBb0I7RUFDcEJTLHFCQUFxQixFQUFyQkEscUJBQXFCO0VBQ3JCSSx3QkFBd0IsRUFBeEJBLHdCQUF3QjtFQUN4QkksaUJBQWlCLEVBQWpCQSxpQkFBaUI7RUFDakJNLG1CQUFtQixFQUFuQkEsbUJBQW1CO0VBQ25CTyxxQkFBcUIsRUFBckJBLHFCQUFxQjtFQUNyQk0seUJBQXlCLEVBQXpCQTtBQUNGLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy9zaWRlY2hhaW5IdWJDbGllbnQuanM/Yjk5OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQnJvd3NlciBoZWxwZXJzIGZvciBIdWIgc2lkZWNoYWluIC8gc3RhdGVjaGFpbiArIGRpc3RyaWJ1dGVkIGVwb2NoIEhUVFAgc3VyZmFjZXMuXG4gKiBVc2VzIHNhbWUtb3JpZ2luIGAvc2VydmljZXMvcnBjYCBhbmQgYC9zZXJ2aWNlcy9kaXN0cmlidXRlZC8qYCAod29ya3MgZm9yIExBTiBodWJzXG4gKiBsaWtlIGBodHRwOi8vMTkyLjE2OC41MC41OjgwODBgIHdoZW4gdGhlIFVJIGlzIGxvYWRlZCBmcm9tIHRoYXQgb3JpZ2luKS5cbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqIEBwYXJhbSB7dW5rbm93bltdfSBbcGFyYW1zXVxuICogQHJldHVybnMge1Byb21pc2U8eyBvazogYm9vbGVhbiwgcmVzdWx0PzogdW5rbm93biwgZXJyb3I/OiBzdHJpbmcgfT59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGh1Ykpzb25ScGMgKG1ldGhvZCwgcGFyYW1zID0gW10pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCgnL3NlcnZpY2VzL3JwYycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBqc29ucnBjOiAnMi4wJywgaWQ6IDEsIG1ldGhvZCwgcGFyYW1zIH0pXG4gICAgfSk7XG4gICAgbGV0IGJvZHkgPSB7fTtcbiAgICB0cnkge1xuICAgICAgYm9keSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgfSBjYXRjaCAoXykge31cbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgY29uc3QgbXNnID0gKGJvZHkgJiYgYm9keS5lcnJvciAmJiBib2R5LmVycm9yLm1lc3NhZ2UpIHx8IHJlcy5zdGF0dXNUZXh0IHx8IGBIVFRQICR7cmVzLnN0YXR1c31gO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogbXNnIH07XG4gICAgfVxuICAgIGlmIChib2R5ICYmIGJvZHkuZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGJvZHkuZXJyb3IubWVzc2FnZSB8fCAnUlBDIGVycm9yJyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBvazogdHJ1ZSwgcmVzdWx0OiBib2R5ICYmIGJvZHkucmVzdWx0ICE9IG51bGwgPyBib2R5LnJlc3VsdCA6IG51bGwgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGUgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybnMge1Byb21pc2U8eyBvazogYm9vbGVhbiwgZGF0YT86IG9iamVjdCwgZXJyb3I/OiBzdHJpbmcgfT59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoRGlzdHJpYnV0ZWRKc29uIChwYXRoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2gocGF0aCwgeyBoZWFkZXJzOiB7IEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0gfSk7XG4gICAgbGV0IGRhdGEgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICB9IGNhdGNoIChfKSB7fVxuICAgIGlmICghcmVzLm9rKSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiAoZGF0YSAmJiBkYXRhLm1lc3NhZ2UpIHx8IHJlcy5zdGF0dXNUZXh0IHx8IGBIVFRQICR7cmVzLnN0YXR1c31gIH07XG4gICAgfVxuICAgIHJldHVybiB7IG9rOiB0cnVlLCBkYXRhOiBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGEgOiB7fSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogZSAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkgfTtcbiAgfVxufVxuXG4vKipcbiAqIEByZXR1cm5zIHtQcm9taXNlPHsgb2s6IGJvb2xlYW4sIGRhdGE/OiBvYmplY3QsIGVycm9yPzogc3RyaW5nIH0+fVxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaERpc3RyaWJ1dGVkRXBvY2ggKCkge1xuICByZXR1cm4gZmV0Y2hEaXN0cmlidXRlZEpzb24oJy9zZXJ2aWNlcy9kaXN0cmlidXRlZC9lcG9jaCcpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtQcm9taXNlPHsgb2s6IGJvb2xlYW4sIGRhdGE/OiBvYmplY3QsIGVycm9yPzogc3RyaW5nIH0+fVxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaERpc3RyaWJ1dGVkTWFuaWZlc3QgKCkge1xuICByZXR1cm4gZmV0Y2hEaXN0cmlidXRlZEpzb24oJy9zZXJ2aWNlcy9kaXN0cmlidXRlZC9tYW5pZmVzdCcpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtQcm9taXNlPHsgb2s6IGJvb2xlYW4sIHN0YXRlPzogb2JqZWN0LCBlcnJvcj86IHN0cmluZyB9Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0U2lkZWNoYWluU3RhdGUgKCkge1xuICBjb25zdCBvdXQgPSBhd2FpdCBodWJKc29uUnBjKCdHZXRTaWRlY2hhaW5TdGF0ZScsIFtdKTtcbiAgaWYgKCFvdXQub2spIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IG91dC5lcnJvciB9O1xuICBjb25zdCByID0gb3V0LnJlc3VsdDtcbiAgaWYgKHIgJiYgci5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiByLm1lc3NhZ2UgfHwgJ0dldFNpZGVjaGFpblN0YXRlIGZhaWxlZCcgfTtcbiAgfVxuICByZXR1cm4geyBvazogdHJ1ZSwgc3RhdGU6IHIgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgbGltaXQ/OiBudW1iZXIsIGluY2x1ZGVQYXRjaGVzPzogYm9vbGVhbiB9fSBbb3B0c11cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0U2lkZWNoYWluSm91cm5hbCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IG91dCA9IGF3YWl0IGh1Ykpzb25ScGMoJ0dldFNpZGVjaGFpbkpvdXJuYWwnLCBbb3B0c10pO1xuICBpZiAoIW91dC5vaykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogb3V0LmVycm9yIH07XG4gIGNvbnN0IHIgPSBvdXQucmVzdWx0O1xuICBpZiAociAmJiByLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IHIubWVzc2FnZSB8fCAnR2V0U2lkZWNoYWluSm91cm5hbCBmYWlsZWQnIH07XG4gIH1cbiAgcmV0dXJuIHsgb2s6IHRydWUsIGpvdXJuYWw6IHIgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgbGltaXQ/OiBudW1iZXIsIGluY2x1ZGVDb250ZW50PzogYm9vbGVhbiB9fSBbb3B0c11cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0U2lkZWNoYWluU25hcHNob3RzIChvcHRzID0ge30pIHtcbiAgY29uc3Qgb3V0ID0gYXdhaXQgaHViSnNvblJwYygnR2V0U2lkZWNoYWluU25hcHNob3RzJywgW29wdHNdKTtcbiAgaWYgKCFvdXQub2spIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IG91dC5lcnJvciB9O1xuICBjb25zdCByID0gb3V0LnJlc3VsdDtcbiAgaWYgKHIgJiYgci5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiByLm1lc3NhZ2UgfHwgJ0dldFNpZGVjaGFpblNuYXBzaG90cyBmYWlsZWQnIH07XG4gIH1cbiAgcmV0dXJuIHsgb2s6IHRydWUsIHNuYXBzaG90czogciB9O1xufVxuXG4vKipcbiAqIFN1Ym1pdCBhbiBSRkM2OTAyIHBhdGNoIHNlcXVlbmNlIHRvIEh1YiBzaWRlY2hhaW4gU1RBVEUuXG4gKiBNdWx0aS1vcCBhcnJheXMgYXJlIGZpcnN0LWNsYXNzIG9uIHRoZSBIdWIgUlBDIHBhdGguIFdoZW4gZW5jb2RpbmcgdGhlIHNhbWVcbiAqIHByb3Bvc2FsIGFzIGEgdHlwZWQgYFNJREVDSEFJTl9TVEFURV9QQVRDSGAgTWVzc2FnZSAoUDJQIC8gYWN0aXZpdHkpLCB1c2VcbiAqIGBAZmFicmljL2h0dHAvZnVuY3Rpb25zL21lc3NhZ2VCb2R5SnNvbkJyaWRnZWAgc28gYHBhdGNoZXNDYW5vbmljYWxgIHByZXNlcnZlc1xuICogdGhlIGZ1bGwgc2VxdWVuY2UgKG5vdCBvbmx5IGEgY29sbGFwc2VkIGAvcmVnaXN0cnlgIGNhdGFsb2cgd3JpdGUpLlxuICpcbiAqIEBwYXJhbSB7eyBwYXRjaGVzOiBvYmplY3RbXSwgYmFzaXNDbG9jazogbnVtYmVyLCBhZG1pblRva2VuPzogc3RyaW5nfG51bGwsIGZlZGVyYXRpb25XaXRuZXNzPzogb2JqZWN0fG51bGwgfX0gcFxuICovXG5hc3luYyBmdW5jdGlvbiBzdWJtaXRTaWRlY2hhaW5TdGF0ZVBhdGNoIChwKSB7XG4gIGNvbnN0IG91dCA9IGF3YWl0IGh1Ykpzb25ScGMoJ1N1Ym1pdFNpZGVjaGFpblN0YXRlUGF0Y2gnLCBbcF0pO1xuICBpZiAoIW91dC5vaykgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogb3V0LmVycm9yIH07XG4gIGNvbnN0IHIgPSBvdXQucmVzdWx0O1xuICBpZiAociAmJiByLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IHIubWVzc2FnZSB8fCAncGF0Y2ggcmVqZWN0ZWQnIH07XG4gIH1cbiAgcmV0dXJuIHsgb2s6IHRydWUsIHJlc3VsdDogciB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaHViSnNvblJwYyxcbiAgZmV0Y2hEaXN0cmlidXRlZEpzb24sXG4gIGZldGNoRGlzdHJpYnV0ZWRFcG9jaCxcbiAgZmV0Y2hEaXN0cmlidXRlZE1hbmlmZXN0LFxuICBnZXRTaWRlY2hhaW5TdGF0ZSxcbiAgZ2V0U2lkZWNoYWluSm91cm5hbCxcbiAgZ2V0U2lkZWNoYWluU25hcHNob3RzLFxuICBzdWJtaXRTaWRlY2hhaW5TdGF0ZVBhdGNoXG59O1xuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIm4iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiaHViSnNvblJwYyIsIl94IiwiX2h1Ykpzb25ScGMiLCJfY2FsbGVlIiwibWV0aG9kIiwicGFyYW1zIiwicmVzIiwiYm9keSIsIm1zZyIsIl9hcmdzIiwiX3QiLCJfdDIiLCJfY29udGV4dCIsInVuZGVmaW5lZCIsImZldGNoIiwiaGVhZGVycyIsIkFjY2VwdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJqc29ucnBjIiwiaWQiLCJqc29uIiwib2siLCJlcnJvciIsIm1lc3NhZ2UiLCJzdGF0dXNUZXh0IiwiY29uY2F0Iiwic3RhdHVzIiwicmVzdWx0IiwiU3RyaW5nIiwiZmV0Y2hEaXN0cmlidXRlZEpzb24iLCJfeDIiLCJfZmV0Y2hEaXN0cmlidXRlZEpzb24iLCJfY2FsbGVlMiIsInBhdGgiLCJkYXRhIiwiX3QzIiwiX3Q0IiwiX2NvbnRleHQyIiwiZmV0Y2hEaXN0cmlidXRlZEVwb2NoIiwiX2ZldGNoRGlzdHJpYnV0ZWRFcG9jaCIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwiZmV0Y2hEaXN0cmlidXRlZE1hbmlmZXN0IiwiX2ZldGNoRGlzdHJpYnV0ZWRNYW5pZmVzdCIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0IiwiZ2V0U2lkZWNoYWluU3RhdGUiLCJfZ2V0U2lkZWNoYWluU3RhdGUiLCJfY2FsbGVlNSIsIm91dCIsIl9jb250ZXh0NSIsInN0YXRlIiwiZ2V0U2lkZWNoYWluSm91cm5hbCIsIl9nZXRTaWRlY2hhaW5Kb3VybmFsIiwiX2NhbGxlZTYiLCJvcHRzIiwiX2FyZ3M2IiwiX2NvbnRleHQ2Iiwiam91cm5hbCIsImdldFNpZGVjaGFpblNuYXBzaG90cyIsIl9nZXRTaWRlY2hhaW5TbmFwc2hvdHMiLCJfY2FsbGVlNyIsIl9hcmdzNyIsIl9jb250ZXh0NyIsInNuYXBzaG90cyIsInN1Ym1pdFNpZGVjaGFpblN0YXRlUGF0Y2giLCJfeDMiLCJfc3VibWl0U2lkZWNoYWluU3RhdGVQYXRjaCIsIl9jYWxsZWU4IiwiX2NvbnRleHQ4IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/sidechainHubClient.js\n\n}')},"./functions/sortDocumentsByHostOfferThenPrice.js"(module){"use strict";eval("{\n\n/**\n * Document list ordering: open host/distribute offers first (highest sats first),\n * then by buyer list price ascending (purchasePriceSats), then newest created.\n */\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction proposalMatchesDocument(proposal, doc) {\n if (!proposal || !doc) return false;\n var docId = doc.id != null ? String(doc.id) : '';\n var docSha = doc.sha256 || doc.sha;\n var docShaStr = docSha != null ? String(docSha) : '';\n var pid = proposal.documentId != null ? String(proposal.documentId) : '';\n if (pid && (pid === docId || docShaStr && pid === docShaStr)) return true;\n var nested = proposal.document;\n if (nested && _typeof(nested) === 'object') {\n var nid = nested.id != null ? String(nested.id) : '';\n var nsha = nested.sha256 || nested.sha;\n var nshaStr = nsha != null ? String(nsha) : '';\n if (docId && (nid === docId || nshaStr === docId)) return true;\n if (docShaStr && (nid === docShaStr || nshaStr === docShaStr)) return true;\n }\n return false;\n}\n\n/** Pending / accepted proposals still represent a host-side income opportunity. */\nvar OPEN_HOST_STATUSES = new Set(['pending', 'accepted']);\nfunction maxOpenHostOfferSatsForDocument(doc, distributeProposals) {\n if (!doc || !distributeProposals || _typeof(distributeProposals) !== 'object') return 0;\n var max = 0;\n for (var _i = 0, _Object$values = Object.values(distributeProposals); _i < _Object$values.length; _i++) {\n var p = _Object$values[_i];\n if (!p || !OPEN_HOST_STATUSES.has(String(p.status || ''))) continue;\n if (!proposalMatchesDocument(p, doc)) continue;\n var n = Number(p.amountSats);\n if (Number.isFinite(n) && n > max) max = n;\n }\n return max;\n}\nfunction purchasePriceSatsForSort(doc) {\n if (!doc) return Infinity;\n var n = Number(doc.purchasePriceSats);\n if (Number.isFinite(n) && n > 0) return n;\n return Infinity;\n}\nfunction compareDocumentsByHostOfferThenPurchasePrice(a, b, distributeProposals) {\n var offerA = maxOpenHostOfferSatsForDocument(a, distributeProposals);\n var offerB = maxOpenHostOfferSatsForDocument(b, distributeProposals);\n var hasA = offerA > 0;\n var hasB = offerB > 0;\n if (hasA !== hasB) return (hasB ? 1 : 0) - (hasA ? 1 : 0);\n if (hasA && offerA !== offerB) return offerB - offerA;\n var pa = purchasePriceSatsForSort(a);\n var pb = purchasePriceSatsForSort(b);\n if (pa !== pb) return pa - pb;\n var ta = a.created ? new Date(a.created).getTime() : 0;\n var tb = b.created ? new Date(b.created).getTime() : 0;\n return tb - ta;\n}\nmodule.exports = {\n proposalMatchesDocument: proposalMatchesDocument,\n maxOpenHostOfferSatsForDocument: maxOpenHostOfferSatsForDocument,\n purchasePriceSatsForSort: purchasePriceSatsForSort,\n compareDocumentsByHostOfferThenPurchasePrice: compareDocumentsByHostOfferThenPurchasePrice\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvc29ydERvY3VtZW50c0J5SG9zdE9mZmVyVGhlblByaWNlLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBSEEsU0FBQUEsUUFBQUMsQ0FBQSxzQ0FBQUQsT0FBQSx3QkFBQUUsTUFBQSx1QkFBQUEsTUFBQSxDQUFBQyxRQUFBLGFBQUFGLENBQUEsa0JBQUFBLENBQUEsZ0JBQUFBLENBQUEsV0FBQUEsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBRCxDQUFBLENBQUFHLFdBQUEsS0FBQUYsTUFBQSxJQUFBRCxDQUFBLEtBQUFDLE1BQUEsQ0FBQUcsU0FBQSxxQkFBQUosQ0FBQSxLQUFBRCxPQUFBLENBQUFDLENBQUE7QUFLQSxTQUFTSyx1QkFBdUJBLENBQUVDLFFBQVEsRUFBRUMsR0FBRyxFQUFFO0VBQy9DLElBQUksQ0FBQ0QsUUFBUSxJQUFJLENBQUNDLEdBQUcsRUFBRSxPQUFPLEtBQUs7RUFDbkMsSUFBTUMsS0FBSyxHQUFHRCxHQUFHLENBQUNFLEVBQUUsSUFBSSxJQUFJLEdBQUdDLE1BQU0sQ0FBQ0gsR0FBRyxDQUFDRSxFQUFFLENBQUMsR0FBRyxFQUFFO0VBQ2xELElBQU1FLE1BQU0sR0FBR0osR0FBRyxDQUFDSyxNQUFNLElBQUlMLEdBQUcsQ0FBQ00sR0FBRztFQUNwQyxJQUFNQyxTQUFTLEdBQUdILE1BQU0sSUFBSSxJQUFJLEdBQUdELE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLEdBQUcsRUFBRTtFQUN0RCxJQUFNSSxHQUFHLEdBQUdULFFBQVEsQ0FBQ1UsVUFBVSxJQUFJLElBQUksR0FBR04sTUFBTSxDQUFDSixRQUFRLENBQUNVLFVBQVUsQ0FBQyxHQUFHLEVBQUU7RUFDMUUsSUFBSUQsR0FBRyxLQUFLQSxHQUFHLEtBQUtQLEtBQUssSUFBS00sU0FBUyxJQUFJQyxHQUFHLEtBQUtELFNBQVUsQ0FBQyxFQUFFLE9BQU8sSUFBSTtFQUMzRSxJQUFNRyxNQUFNLEdBQUdYLFFBQVEsQ0FBQ1ksUUFBUTtFQUNo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LENBQUMsR0FBRyxDQUFDLENBQUM7RUFDekQsSUFBSUEsSUFBSSxJQUFJRixNQUFNLEtBQUtDLE1BQU0sRUFBRSxPQUFPQSxNQUFNLEdBQUdELE1BQU07RUFDckQsSUFBTUksRUFBRSxHQUFHVix3QkFBd0IsQ0FBQ0ksQ0FBQyxDQUFDO0VBQ3RDLElBQU1PLEVBQUUsR0FBR1gsd0JBQXdCLENBQUNLLENBQUMsQ0FBQztFQUN0QyxJQUFJSyxFQUFFLEtBQUtDLEVBQUUsRUFBRSxPQUFPRCxFQUFFLEdBQUdDLEVBQUU7RUFDN0IsSUFBTUMsRUFBRSxHQUFHUixDQUFDLENBQUNTLE9BQU8sR0FBRyxJQUFJQyxJQUFJLENBQUNWLENBQUMsQ0FBQ1MsT0FBTyxDQUFDLENBQUNFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQztFQUN4RCxJQUFNQyxFQUFFLEdBQUdYLENBQUMsQ0FBQ1EsT0FBTyxHQUFHLElBQUlDLElBQUksQ0FBQ1QsQ0FBQyxDQUFDUSxPQUFPLENBQUMsQ0FBQ0UsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDO0VBQ3hELE9BQU9DLEVBQUUsR0FBR0osRUFBRTtBQUNoQjtBQUVBSyxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmcEQsdUJBQXVCLEVBQXZCQSx1QkFBdUI7RUFDdkJtQiwrQkFBK0IsRUFBL0JBLCtCQUErQjtFQUMvQmUsd0JBQXdCLEVBQXhCQSx3QkFBd0I7RUFDeEJHLDRDQUE0QyxFQUE1Q0E7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvc29ydERvY3VtZW50c0J5SG9zdE9mZmVyVGhlblByaWNlLmpzP2ZmZTQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERvY3VtZW50IGxpc3Qgb3JkZXJpbmc6IG9wZW4gaG9zdC9kaXN0cmlidXRlIG9mZmVycyBmaXJzdCAoaGlnaGVzdCBzYXRzIGZpcnN0KSxcbiAqIHRoZW4gYnkgYnV5ZXIgbGlzdCBwcmljZSBhc2NlbmRpbmcgKHB1cmNoYXNlUHJpY2VTYXRzKSwgdGhlbiBuZXdlc3QgY3JlYXRlZC5cbiAqL1xuXG5mdW5jdGlvbiBwcm9wb3NhbE1hdGNoZXNEb2N1bWVudCAocHJvcG9zYWwsIGRvYykge1xuICBpZiAoIXByb3Bvc2FsIHx8ICFkb2MpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZG9jSWQgPSBkb2MuaWQgIT0gbnVsbCA/IFN0cmluZyhkb2MuaWQpIDogJyc7XG4gIGNvbnN0IGRvY1NoYSA9IGRvYy5zaGEyNTYgfHwgZG9jLnNoYTtcbiAgY29uc3QgZG9jU2hhU3RyID0gZG9jU2hhICE9IG51bGwgPyBTdHJpbmcoZG9jU2hhKSA6ICcnO1xuICBjb25zdCBwaWQgPSBwcm9wb3NhbC5kb2N1bWVudElkICE9IG51bGwgPyBTdHJpbmcocHJvcG9zYWwuZG9jdW1lbnRJZCkgOiAnJztcbiAgaWYgKHBpZCAmJiAocGlkID09PSBkb2NJZCB8fCAoZG9jU2hhU3RyICYmIHBpZCA9PT0gZG9jU2hhU3RyKSkpIHJldHVybiB0cnVlO1xuICBjb25zdCBuZXN0ZWQgPSBwcm9wb3NhbC5kb2N1bWVudDtcbiAgaWYgKG5lc3RlZCAmJiB0eXBlb2YgbmVzdGVkID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IG5pZCA9IG5lc3RlZC5pZCAhPSBudWxsID8gU3RyaW5nKG5lc3RlZC5pZCkgOiAnJztcbiAgICBjb25zdCBuc2hhID0gbmVzdGVkLnNoYTI1NiB8fCBuZXN0ZWQuc2hhO1xuICAgIGNvbnN0IG5zaGFTdHIgPSBuc2hhICE9IG51bGwgPyBTdHJpbmcobnNoYSkgOiAnJztcbiAgICBpZiAoZG9jSWQgJiYgKG5pZCA9PT0gZG9jSWQgfHwgbnNoYVN0ciA9PT0gZG9jSWQpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZG9jU2hhU3RyICYmIChuaWQgPT09IGRvY1NoYVN0ciB8fCBuc2hhU3RyID09PSBkb2NTaGFTdHIpKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBQZW5kaW5nIC8gYWNjZXB0ZWQgcHJvcG9zYWxzIHN0aWxsIHJlcHJlc2VudCBhIGhvc3Qtc2lkZSBpbmNvbWUgb3Bwb3J0dW5pdHkuICovXG5jb25zdCBPUEVOX0hPU1RfU1RBVFVTRVMgPSBuZXcgU2V0KFsncGVuZGluZycsICdhY2NlcHRlZCddKTtcblxuZnVuY3Rpb24gbWF4T3Blbkhvc3RPZmZlclNhdHNGb3JEb2N1bWVudCAoZG9jLCBkaXN0cmlidXRlUHJvcG9zYWxzKSB7XG4gIGlmICghZG9jIHx8ICFkaXN0cmlidXRlUHJvcG9zYWxzIHx8IHR5cGVvZiBkaXN0cmlidXRlUHJvcG9zYWxzICE9PSAnb2JqZWN0JykgcmV0dXJuIDA7XG4gIGxldCBtYXggPSAwO1xuICBmb3IgKGNvbnN0IHAgb2YgT2JqZWN0LnZhbHVlcyhkaXN0cmlidXRlUHJvcG9zYWxzKSkge1xuICAgIGlmICghcCB8fCAhT1BFTl9IT1NUX1NUQVRVU0VTLmhhcyhTdHJpbmcocC5zdGF0dXMgfHwgJycpKSkgY29udGludWU7XG4gICAgaWYgKCFwcm9wb3NhbE1hdGNoZXNEb2N1bWVudChwLCBkb2MpKSBjb250aW51ZTtcbiAgICBjb25zdCBuID0gTnVtYmVyKHAuYW1vdW50U2F0cyk7XG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShuKSAmJiBuID4gbWF4KSBtYXggPSBuO1xuICB9XG4gIHJldHVybiBtYXg7XG59XG5cbmZ1bmN0aW9uIHB1cmNoYXNlUHJpY2VTYXRzRm9yU29ydCAoZG9jKSB7XG4gIGlmICghZG9jKSByZXR1cm4gSW5maW5pdHk7XG4gIGNvbnN0IG4gPSBOdW1iZXIoZG9jLnB1cmNoYXNlUHJpY2VTYXRzKTtcbiAgaWYgKE51bWJlci5pc0Zpbml0ZShuKSAmJiBuID4gMCkgcmV0dXJuIG47XG4gIHJldHVybiBJbmZpbml0eTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZURvY3VtZW50c0J5SG9zdE9mZmVyVGhlblB1cmNoYXNlUHJpY2UgKGEsIGIsIGRpc3RyaWJ1dGVQcm9wb3NhbHMpIHtcbiAgY29uc3Qgb2ZmZXJBID0gbWF4T3Blbkhvc3RPZmZlclNhdHNGb3JEb2N1bWVudChhLCBkaXN0cmlidXRlUHJvcG9zYWxzKTtcbiAgY29uc3Qgb2ZmZXJCID0gbWF4T3Blbkhvc3RPZmZlclNhdHNGb3JEb2N1bWVudChiLCBkaXN0cmlidXRlUHJvcG9zYWxzKTtcbiAgY29uc3QgaGFzQSA9IG9mZmVyQSA+IDA7XG4gIGNvbnN0IGhhc0IgPSBvZmZlckIgPiAwO1xuICBpZiAoaGFzQSAhPT0gaGFzQikgcmV0dXJuIChoYXNCID8gMSA6IDApIC0gKGhhc0EgPyAxIDogMCk7XG4gIGlmIChoYXNBICYmIG9mZmVyQSAhPT0gb2ZmZXJCKSByZXR1cm4gb2ZmZXJCIC0gb2ZmZXJBO1xuICBjb25zdCBwYSA9IHB1cmNoYXNlUHJpY2VTYXRzRm9yU29ydChhKTtcbiAgY29uc3QgcGIgPSBwdXJjaGFzZVByaWNlU2F0c0ZvclNvcnQoYik7XG4gIGlmIChwYSAhPT0gcGIpIHJldHVybiBwYSAtIHBiO1xuICBjb25zdCB0YSA9IGEuY3JlYXRlZCA/IG5ldyBEYXRlKGEuY3JlYXRlZCkuZ2V0VGltZSgpIDogMDtcbiAgY29uc3QgdGIgPSBiLmNyZWF0ZWQgPyBuZXcgRGF0ZShiLmNyZWF0ZWQpLmdldFRpbWUoKSA6IDA7XG4gIHJldHVybiB0YiAtIHRhO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcHJvcG9zYWxNYXRjaGVzRG9jdW1lbnQsXG4gIG1heE9wZW5Ib3N0T2ZmZXJTYXRzRm9yRG9jdW1lbnQsXG4gIHB1cmNoYXNlUHJpY2VTYXRzRm9yU29ydCxcbiAgY29tcGFyZURvY3VtZW50c0J5SG9zdE9mZmVyVGhlblB1cmNoYXNlUHJpY2Vcbn07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwicHJvcG9zYWxNYXRjaGVzRG9jdW1lbnQiLCJwcm9wb3NhbCIsImRvYyIsImRvY0lkIiwiaWQiLCJTdHJpbmciLCJkb2NTaGEiLCJzaGEyNTYiLCJzaGEiLCJkb2NTaGFTdHIiLCJwaWQiLCJkb2N1bWVudElkIiwibmVzdGVkIiwiZG9jdW1lbnQiLCJuaWQiLCJuc2hhIiwibnNoYVN0ciIsIk9QRU5fSE9TVF9TVEFUVVNFUyIsIlNldCIsIm1heE9wZW5Ib3N0T2ZmZXJTYXRzRm9yRG9jdW1lbnQiLCJkaXN0cmlidXRlUHJvcG9zYWxzIiwibWF4IiwiX2kiLCJfT2JqZWN0JHZhbHVlcyIsIk9iamVjdCIsInZhbHVlcyIsImxlbmd0aCIsInAiLCJoYXMiLCJzdGF0dXMiLCJuIiwiTnVtYmVyIiwiYW1vdW50U2F0cyIsImlzRmluaXRlIiwicHVyY2hhc2VQcmljZVNhdHNGb3JTb3J0IiwiSW5maW5pdHkiLCJwdXJjaGFzZVByaWNlU2F0cyIsImNvbXBhcmVEb2N1bWVudHNCeUhvc3RPZmZlclRoZW5QdXJjaGFzZVByaWNlIiwiYSIsImIiLCJvZmZlckEiLCJvZmZlckIiLCJoYXNBIiwiaGFzQiIsInBhIiwicGIiLCJ0YSIsImNyZWF0ZWQiLCJEYXRlIiwiZ2V0VGltZSIsInRiIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/sortDocumentsByHostOfferThenPrice.js\n\n}")},"./functions/tabPayerDemoUrl.js"(module){"use strict";eval("{\n\n/**\n * Absolute URL to open Bitcoin Payments with Make Payment prefilled (two-tab invoice demo).\n * Uses only `payTo` / `payAmountSats` — payer wallet is always BIP44 account 0 under the Fabric identity (no query override).\n * @param {string} address - Invoice receive address\n * @param {number} amountSats\n * @param {string} [origin] - Optional origin (for tests); defaults to `window.location.origin`\n * @returns {string}\n */\nfunction buildTabPayerDemoUrl(address, amountSats, origin) {\n var addr = String(address || '').trim();\n if (!addr) return '#';\n var base = origin != null ? String(origin).replace(/\\/$/, '') : '';\n if (!base && typeof window !== 'undefined' && window.location && window.location.origin) {\n base = String(window.location.origin).replace(/\\/$/, '');\n }\n if (!base) return '#';\n var q = new URLSearchParams();\n q.set('payTo', addr);\n var n = Number(amountSats);\n if (Number.isFinite(n) && n > 0) {\n q.set('payAmountSats', String(Math.round(n)));\n }\n return \"\".concat(base, \"/payments?\").concat(q.toString(), \"#fabric-btc-make-payment-h4\");\n}\n\n/**\n * Open Bitcoin Payments with a full BIP21 URI (e.g. Payjoin with pj=) in the Make Payment field.\n * @param {string} bip21Uri - bitcoin:… URI\n * @param {string} [origin]\n * @returns {string}\n */\nfunction buildTabPayerPayjoinUrl(bip21Uri, origin) {\n var uri = String(bip21Uri || '').trim();\n if (!uri || !/^bitcoin:/i.test(uri)) return '#';\n var base = origin != null ? String(origin).replace(/\\/$/, '') : '';\n if (!base && typeof window !== 'undefined' && window.location && window.location.origin) {\n base = String(window.location.origin).replace(/\\/$/, '');\n }\n if (!base) return '#';\n var q = new URLSearchParams();\n q.set('bitcoinUri', uri);\n return \"\".concat(base, \"/payments?\").concat(q.toString(), \"#fabric-btc-make-payment-h4\");\n}\nmodule.exports = {\n buildTabPayerDemoUrl: buildTabPayerDemoUrl,\n buildTabPayerPayjoinUrl: buildTabPayerPayjoinUrl\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxPQUFPLEdBQUc7RUFDZjFCLG9CQUFvQixFQUFwQkEsb0JBQW9CO0VBQ3BCcUIsdUJBQXVCLEVBQXZCQTtBQUNGLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy90YWJQYXllckRlbW9VcmwuanM/YjdlMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQWJzb2x1dGUgVVJMIHRvIG9wZW4gQml0Y29pbiBQYXltZW50cyB3aXRoIE1ha2UgUGF5bWVudCBwcmVmaWxsZWQgKHR3by10YWIgaW52b2ljZSBkZW1vKS5cbiAqIFVzZXMgb25seSBgcGF5VG9gIC8gYHBheUFtb3VudFNhdHNgIOKAlCBwYXllciB3YWxsZXQgaXMgYWx3YXlzIEJJUDQ0IGFjY291bnQgMCB1bmRlciB0aGUgRmFicmljIGlkZW50aXR5IChubyBxdWVyeSBvdmVycmlkZSkuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyAtIEludm9pY2UgcmVjZWl2ZSBhZGRyZXNzXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50U2F0c1xuICogQHBhcmFtIHtzdHJpbmd9IFtvcmlnaW5dIC0gT3B0aW9uYWwgb3JpZ2luIChmb3IgdGVzdHMpOyBkZWZhdWx0cyB0byBgd2luZG93LmxvY2F0aW9uLm9yaWdpbmBcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVGFiUGF5ZXJEZW1vVXJsIChhZGRyZXNzLCBhbW91bnRTYXRzLCBvcmlnaW4pIHtcbiAgY29uc3QgYWRkciA9IFN0cmluZyhhZGRyZXNzIHx8ICcnKS50cmltKCk7XG4gIGlmICghYWRkcikgcmV0dXJuICcjJztcblxuICBsZXQgYmFzZSA9IG9yaWdpbiAhPSBudWxsID8gU3RyaW5nKG9yaWdpbikucmVwbGFjZSgvXFwvJC8sICcnKSA6ICcnO1xuICBpZiAoIWJhc2UgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pIHtcbiAgICBiYXNlID0gU3RyaW5nKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSByZXR1cm4gJyMnO1xuXG4gIGNvbnN0IHEgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIHEuc2V0KCdwYXlUbycsIGFkZHIpO1xuICBjb25zdCBuID0gTnVtYmVyKGFtb3VudFNhdHMpO1xuICBpZiAoTnVtYmVyLmlzRmluaXRlKG4pICYmIG4gPiAwKSB7XG4gICAgcS5zZXQoJ3BheUFtb3VudFNhdHMnLCBTdHJpbmcoTWF0aC5yb3VuZChuKSkpO1xuICB9XG4gIHJldHVybiBgJHtiYXNlfS9wYXltZW50cz8ke3EudG9TdHJpbmcoKX0jZmFicmljLWJ0Yy1tYWtlLXBheW1lbnQtaDRgO1xufVxuXG4vKipcbiAqIE9wZW4gQml0Y29pbiBQYXltZW50cyB3aXRoIGEgZnVsbCBCSVAyMSBVUkkgKGUuZy4gUGF5am9pbiB3aXRoIDxjb2RlPnBqPTwvY29kZT4pIGluIHRoZSBNYWtlIFBheW1lbnQgZmllbGQuXG4gKiBAcGFyYW0ge3N0cmluZ30gYmlwMjFVcmkgLSA8Y29kZT5iaXRjb2luOjwvY29kZT7igKYgVVJJXG4gKiBAcGFyYW0ge3N0cmluZ30gW29yaWdpbl1cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVGFiUGF5ZXJQYXlqb2luVXJsIChiaXAyMVVyaSwgb3JpZ2luKSB7XG4gIGNvbnN0IHVyaSA9IFN0cmluZyhiaXAyMVVyaSB8fCAnJykudHJpbSgpO1xuICBpZiAoIXVyaSB8fCAhL15iaXRjb2luOi9pLnRlc3QodXJpKSkgcmV0dXJuICcjJztcblxuICBsZXQgYmFzZSA9IG9yaWdpbiAhPSBudWxsID8gU3RyaW5nKG9yaWdpbikucmVwbGFjZSgvXFwvJC8sICcnKSA6ICcnO1xuICBpZiAoIWJhc2UgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pIHtcbiAgICBiYXNlID0gU3RyaW5nKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSByZXR1cm4gJyMnO1xuXG4gIGNvbnN0IHEgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIHEuc2V0KCdiaXRjb2luVXJpJywgdXJpKTtcbiAgcmV0dXJuIGAke2Jhc2V9L3BheW1lbnRzPyR7cS50b1N0cmluZygpfSNmYWJyaWMtYnRjLW1ha2UtcGF5bWVudC1oNGA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBidWlsZFRhYlBheWVyRGVtb1VybCxcbiAgYnVpbGRUYWJQYXllclBheWpvaW5Vcmxcbn07XG4iXSwibmFtZXMiOlsiYnVpbGRUYWJQYXllckRlbW9VcmwiLCJhZGRyZXNzIiwiYW1vdW50U2F0cyIsIm9yaWdpbiIsImFkZHIiLCJTdHJpbmciLCJ0cmltIiwiYmFzZSIsInJlcGxhY2UiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInEiLCJVUkxTZWFyY2hQYXJhbXMiLCJzZXQiLCJuIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJNYXRoIiwicm91bmQiLCJjb25jYXQiLCJ0b1N0cmluZyIsImJ1aWxkVGFiUGF5ZXJQYXlqb2luVXJsIiwiYmlwMjFVcmkiLCJ1cmkiLCJ0ZXN0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/tabPayerDemoUrl.js\n\n}")},"./functions/toRelativeTime.js"(module){eval('{module.exports = function toRelativeTime(date) {\n var now = new Date();\n var then = new Date(date);\n var diff = now - then;\n var seconds = Math.floor(diff / 1000);\n var minutes = Math.floor(seconds / 60);\n var hours = Math.floor(minutes / 60);\n var days = Math.floor(hours / 24);\n var weeks = Math.floor(days / 7);\n var months = Math.floor(weeks / 4);\n var years = Math.floor(months / 12);\n if (years > 0) return "".concat(years, " year").concat(years === 1 ? \'\' : \'s\', " ago");\n if (months > 0) return "".concat(months, " month").concat(months === 1 ? \'\' : \'s\', " ago");\n if (weeks > 0) return "".concat(weeks, " week").concat(weeks === 1 ? \'\' : \'s\', " ago");\n if (days > 0) return "".concat(days, " day").concat(days === 1 ? \'\' : \'s\', " ago");\n if (hours > 0) return "".concat(hours, " hour").concat(hours === 1 ? \'\' : \'s\', " ago");\n if (minutes > 0) return "".concat(minutes, " minute").concat(minutes === 1 ? \'\' : \'s\', " ago");\n if (seconds > 0) return "".concat(seconds, " second").concat(seconds === 1 ? \'\' : \'s\', " ago");\n return \'just now\';\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvdG9SZWxhdGl2ZVRpbWUuanMiLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwidG9SZWxhdGl2ZVRpbWUiLCJkYXRlIiwibm93IiwiRGF0ZSIsInRoZW4iLCJkaWZmIiwic2Vjb25kcyIsIk1hdGgiLCJmbG9vciIsIm1pbnV0ZXMiLCJob3VycyIsImRheXMiLCJ3ZWVrcyIsIm1vbnRocyIsInllYXJzIiwiY29uY2F0Il0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2Z1bmN0aW9ucy90b1JlbGF0aXZlVGltZS5qcz9lMTc0Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdG9SZWxhdGl2ZVRpbWUgKGRhdGUpIHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgY29uc3QgdGhlbiA9IG5ldyBEYXRlKGRhdGUpO1xuICBjb25zdCBkaWZmID0gbm93IC0gdGhlbjtcbiAgY29uc3Qgc2Vjb25kcyA9IE1hdGguZmxvb3IoZGlmZiAvIDEwMDApO1xuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApO1xuICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IobWludXRlcyAvIDYwKTtcbiAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IoaG91cnMgLyAyNCk7XG4gIGNvbnN0IHdlZWtzID0gTWF0aC5mbG9vcihkYXlzIC8gNyk7XG4gIGNvbnN0IG1vbnRocyA9IE1hdGguZmxvb3Iod2Vla3MgLyA0KTtcbiAgY29uc3QgeWVhcnMgPSBNYXRoLmZsb29yKG1vbnRocyAvIDEyKTtcblxuICBpZiAoeWVhcnMgPiAwKSByZXR1cm4gYCR7eWVhcnN9IHllYXIke3llYXJzID09PSAxID8gJycgOiAncyd9IGFnb2A7XG4gIGlmIChtb250aHMgPiAwKSByZXR1cm4gYCR7bW9udGhzfSBtb250aCR7bW9udGhzID09PSAxID8gJycgOiAncyd9IGFnb2A7XG4gIGlmICh3ZWVrcyA+IDApIHJldHVybiBgJHt3ZWVrc30gd2VlayR7d2Vla3MgPT09IDEgPyAnJyA6ICdzJ30gYWdvYDtcbiAgaWYgKGRheXMgPiAwKSByZXR1cm4gYCR7ZGF5c30gZGF5JHtkYXlzID09PSAxID8gJycgOiAncyd9IGFnb2A7XG4gIGlmIChob3VycyA+IDApIHJldHVybiBgJHtob3Vyc30gaG91ciR7aG91cnMgPT09IDEgPyAnJyA6ICdzJ30gYWdvYDtcbiAgaWYgKG1pbnV0ZXMgPiAwKSByZXR1cm4gYCR7bWludXRlc30gbWludXRlJHttaW51dGVzID09PSAxID8gJycgOiAncyd9IGFnb2A7XG4gIGlmIChzZWNvbmRzID4gMCkgcmV0dXJuIGAke3NlY29uZHN9IHNlY29uZCR7c2Vjb25kcyA9PT0gMSA/ICcnIDogJ3MnfSBhZ29gO1xuICByZXR1cm4gJ2p1c3Qgbm93Jztcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxTQUFTQyxjQUFjQSxDQUFFQyxJQUFJLEVBQUU7RUFDOUMsSUFBTUMsR0FBRyxHQUFHLElBQUlDLElBQUksQ0FBQyxDQUFDO0VBQ3RCLElBQU1DLElBQUksR0FBRyxJQUFJRCxJQUFJLENBQUNGLElBQUksQ0FBQztFQUMzQixJQUFNSSxJQUFJLEdBQUdILEdBQUcsR0FBR0UsSUFBSTtFQUN2QixJQUFNRSxPQUFPLEdBQUdDLElBQUksQ0FBQ0MsS0FBSyxDQUFDSCxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQ3ZDLElBQU1JLE9BQU8sR0FBR0YsSUFBSSxDQUFDQyxLQUFLLENBQUNGLE9BQU8sR0FBRyxFQUFFLENBQUM7RUFDeEMsSUFBTUksS0FBSyxHQUFHSCxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxHQUFHLEVBQUUsQ0FBQztFQUN0QyxJQUFNRSxJQUFJLEdBQUdKLElBQUksQ0FBQ0MsS0FBSyxDQUFDRSxLQUFLLEdBQUcsRUFBRSxDQUFDO0VBQ25DLElBQU1FLEtBQUssR0FBR0wsSUFBSSxDQUFDQyxLQUFLLENBQUNHLElBQUksR0FBRyxDQUFDLENBQUM7RUFDbEMsSUFBTUUsTUFBTSxHQUFHTixJQUFJLENBQUNDLEtBQUssQ0FBQ0ksS0FBSyxHQUFHLENBQUMsQ0FBQztFQUNwQyxJQUFNRSxLQUFLLEdBQUdQLElBQUksQ0FBQ0MsS0FBSyxDQUFDSyxNQUFNLEdBQUcsRUFBRSxDQUFDO0VBRXJDLElBQUlDLEtBQUssR0FBRyxDQUFDLEVBQUUsVUFBQUMsTUFBQSxDQUFVRCxLQUFLLFdBQUFDLE1BQUEsQ0FBUUQsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRztFQUM1RCxJQUFJRCxNQUFNLEdBQUcsQ0FBQyxFQUFFLFVBQUFFLE1BQUEsQ0FBVUYsTUFBTSxZQUFBRSxNQUFBLENBQVNGLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUc7RUFDaEUsSUFBSUQsS0FBSyxHQUFHLENBQUMsRUFBRSxVQUFBRyxNQUFBLENBQVVILEtBQUssV0FBQUcsTUFBQSxDQUFRSCxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHO0VBQzVELElBQUlELElBQUksR0FBRyxDQUFDLEVBQUUsVUFBQUksTUFBQSxDQUFVSixJQUFJLFVBQUFJLE1BQUEsQ0FBT0osSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRztFQUN4RCxJQUFJRCxLQUFLLEdBQUcsQ0FBQyxFQUFFLFVBQUFLLE1BQUEsQ0FBVUwsS0FBSyxXQUFBSyxNQUFBLENBQVFMLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUc7RUFDNUQsSUFBSUQsT0FBTyxHQUFHLENBQUMsRUFBRSxVQUFBTSxNQUFBLENBQVVOLE9BQU8sYUFBQU0sTUFBQSxDQUFVTixPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHO0VBQ3BFLElBQUlILE9BQU8sR0FBRyxDQUFDLEVBQUUsVUFBQVMsTUFBQSxDQUFVVCxPQUFPLGFBQUFTLE1BQUEsQ0FBVVQsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRztFQUNwRSxPQUFPLFVBQVU7QUFDbkIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==\n//# sourceURL=webpack-internal:///./functions/toRelativeTime.js\n\n}')},"./functions/toast.js"(module){"use strict";eval('{\n\n/**\n * Global toast emitter — Dashboard listens via toast.addListener.\n * Use with react-toastify in HubInterface.\n */\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nvar ToastEmitter = /*#__PURE__*/function () {\n function ToastEmitter() {\n _classCallCheck(this, ToastEmitter);\n this.listeners = [];\n }\n return _createClass(ToastEmitter, [{\n key: "addListener",\n value: function addListener(callback) {\n var _this = this;\n this.listeners.push(callback);\n return function () {\n _this.listeners = _this.listeners.filter(function (l) {\n return l !== callback;\n });\n };\n }\n }, {\n key: "emit",\n value: function emit(toast) {\n this.listeners.forEach(function (listener) {\n return listener(toast);\n });\n }\n }]);\n}();\nvar toastEmitter = new ToastEmitter();\nvar toastIdCounter = 0;\nvar generateToastId = function generateToastId() {\n return "toast_".concat(++toastIdCounter, "_").concat(Date.now());\n};\nvar toast = {\n success: function success(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n toastEmitter.emit(_objectSpread({\n id: generateToastId(),\n type: \'success\',\n message: message,\n duration: options.duration || 4000,\n dismissOnClick: options.dismissOnClick !== false,\n header: options.header\n }, options));\n },\n error: function error(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n toastEmitter.emit(_objectSpread({\n id: generateToastId(),\n type: \'error\',\n message: message,\n duration: options.duration || 6000,\n dismissOnClick: options.dismissOnClick !== false,\n header: options.header\n }, options));\n },\n warning: function warning(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n toastEmitter.emit(_objectSpread({\n id: generateToastId(),\n type: \'warning\',\n message: message,\n duration: options.duration || 5000,\n dismissOnClick: options.dismissOnClick !== false,\n header: options.header\n }, options));\n },\n info: function info(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n toastEmitter.emit(_objectSpread({\n id: generateToastId(),\n type: \'info\',\n message: message,\n duration: options.duration || 4000,\n dismissOnClick: options.dismissOnClick !== false,\n header: options.header\n }, options));\n },\n "default": function _default(message) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return toast.info(message, options);\n },\n addListener: function addListener(callback) {\n return toastEmitter.addListener(callback);\n }\n};\nmodule.exports = {\n toast: toast\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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WSxDQUFDSCxJQUFJLENBQUFwQyxhQUFBO01BQ2ZpRCxFQUFFLEVBQUVSLGVBQWUsQ0FBQyxDQUFDO01BQ3JCUyxJQUFJLEVBQUUsTUFBTTtNQUNaSixPQUFPLEVBQVBBLE9BQU87TUFDUEssUUFBUSxFQUFFSixPQUFPLENBQUNJLFFBQVEsSUFBSSxJQUFJO01BQ2xDQyxjQUFjLEVBQUVMLE9BQU8sQ0FBQ0ssY0FBYyxLQUFLLEtBQUs7TUFDaERDLE1BQU0sRUFBRU4sT0FBTyxDQUFDTTtJQUFNLEdBQ25CTixPQUFPLENBQ1gsQ0FBQztFQUNKLENBQUM7RUFDRCxXQUFTLFNBQVRVLFFBQU9BLENBQUdYLE9BQU87SUFBQSxJQUFFQyxPQUFPLEdBQUE5QyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBK0MsU0FBQSxHQUFBL0MsU0FBQSxNQUFHLENBQUMsQ0FBQztJQUFBLE9BQUtvQyxLQUFLLENBQUNtQixJQUFJLENBQUNWLE9BQU8sRUFBRUMsT0FBTyxDQUFDO0VBQUE7RUFDaEVmLFdBQVcsRUFBRSxTQUFiQSxXQUFXQSxDQUFHQyxRQUFRO0lBQUEsT0FBS00sWUFBWSxDQUFDUCxXQUFXLENBQUNDLFFBQVEsQ0FBQztFQUFBO0FBQy9ELENBQUM7QUFFRHlCLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQUV0QixLQUFLLEVBQUxBO0FBQU0sQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL3RvYXN0LmpzPzQzMjEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEdsb2JhbCB0b2FzdCBlbWl0dGVyIOKAlCBEYXNoYm9hcmQgbGlzdGVucyB2aWEgdG9hc3QuYWRkTGlzdGVuZXIuXG4gKiBVc2Ugd2l0aCByZWFjdC10b2FzdGlmeSBpbiBIdWJJbnRlcmZhY2UuXG4gKi9cbmNsYXNzIFRvYXN0RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IFtdO1xuICB9XG5cbiAgYWRkTGlzdGVuZXIgKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnMuZmlsdGVyKChsKSA9PiBsICE9PSBjYWxsYmFjayk7XG4gICAgfTtcbiAgfVxuXG4gIGVtaXQgKHRvYXN0KSB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKHRvYXN0KSk7XG4gIH1cbn1cblxuY29uc3QgdG9hc3RFbWl0dGVyID0gbmV3IFRvYXN0RW1pdHRlcigpO1xubGV0IHRvYXN0SWRDb3VudGVyID0gMDtcbmNvbnN0IGdlbmVyYXRlVG9hc3RJZCA9ICgpID0+IGB0b2FzdF8keysrdG9hc3RJZENvdW50ZXJ9XyR7RGF0ZS5ub3coKX1gO1xuXG5jb25zdCB0b2FzdCA9IHtcbiAgc3VjY2VzczogKG1lc3NhZ2UsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIHRvYXN0RW1pdHRlci5lbWl0KHtcbiAgICAgIGlkOiBnZW5lcmF0ZVRvYXN0SWQoKSxcbiAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbiB8fCA0MDAwLFxuICAgICAgZGlzbWlzc09uQ2xpY2s6IG9wdGlvbnMuZGlzbWlzc09uQ2xpY2sgIT09IGZhbHNlLFxuICAgICAgaGVhZGVyOiBvcHRpb25zLmhlYWRlcixcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9KTtcbiAgfSxcbiAgZXJyb3I6IChtZXNzYWdlLCBvcHRpb25zID0ge30pID0+IHtcbiAgICB0b2FzdEVtaXR0ZXIuZW1pdCh7XG4gICAgICBpZDogZ2VuZXJhdGVUb2FzdElkKCksXG4gICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uIHx8IDYwMDAsXG4gICAgICBkaXNtaXNzT25DbGljazogb3B0aW9ucy5kaXNtaXNzT25DbGljayAhPT0gZmFsc2UsXG4gICAgICBoZWFkZXI6IG9wdGlvbnMuaGVhZGVyLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pO1xuICB9LFxuICB3YXJuaW5nOiAobWVzc2FnZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgdG9hc3RFbWl0dGVyLmVtaXQoe1xuICAgICAgaWQ6IGdlbmVyYXRlVG9hc3RJZCgpLFxuICAgICAgdHlwZTogJ3dhcm5pbmcnLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uIHx8IDUwMDAsXG4gICAgICBkaXNtaXNzT25DbGljazogb3B0aW9ucy5kaXNtaXNzT25DbGljayAhPT0gZmFsc2UsXG4gICAgICBoZWFkZXI6IG9wdGlvbnMuaGVhZGVyLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pO1xuICB9LFxuICBpbmZvOiAobWVzc2FnZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgdG9hc3RFbWl0dGVyLmVtaXQoe1xuICAgICAgaWQ6IGdlbmVyYXRlVG9hc3RJZCgpLFxuICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uIHx8IDQwMDAsXG4gICAgICBkaXNtaXNzT25DbGljazogb3B0aW9ucy5kaXNtaXNzT25DbGljayAhPT0gZmFsc2UsXG4gICAgICBoZWFkZXI6IG9wdGlvbnMuaGVhZGVyLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pO1xuICB9LFxuICBkZWZhdWx0OiAobWVzc2FnZSwgb3B0aW9ucyA9IHt9KSA9PiB0b2FzdC5pbmZvKG1lc3NhZ2UsIG9wdGlvbnMpLFxuICBhZGRMaXN0ZW5lcjogKGNhbGxiYWNrKSA9PiB0b2FzdEVtaXR0ZXIuYWRkTGlzdGVuZXIoY2FsbGJhY2spXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHsgdG9hc3QgfTtcbiJdLCJuYW1lcyI6WyJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3R5cGVvZiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfY2xhc3NDYWxsQ2hlY2siLCJhIiwibiIsIlR5cGVFcnJvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiaSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlN0cmluZyIsIk51bWJlciIsIlRvYXN0RW1pdHRlciIsImxpc3RlbmVycyIsImFkZExpc3RlbmVyIiwiY2FsbGJhY2siLCJfdGhpcyIsImwiLCJlbWl0IiwidG9hc3QiLCJsaXN0ZW5lciIsInRvYXN0RW1pdHRlciIsInRvYXN0SWRDb3VudGVyIiwiZ2VuZXJhdGVUb2FzdElkIiwiY29uY2F0IiwiRGF0ZSIsIm5vdyIsInN1Y2Nlc3MiLCJtZXNzYWdlIiwib3B0aW9ucyIsInVuZGVmaW5lZCIsImlkIiwidHlwZSIsImR1cmF0aW9uIiwiZGlzbWlzc09uQ2xpY2siLCJoZWFkZXIiLCJlcnJvciIsIndhcm5pbmciLCJpbmZvIiwiZGVmYXVsdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/toast.js\n\n}')},"./functions/txContractLabels.js"(module){"use strict";eval('{\n\n/**\n * Human-readable names for Fabric L1 / contract flows (wallet transaction labels).\n * Keys are stable machine ids; UI uses {@link summarizeContractTypes}.\n */\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar CONTRACT_TYPE_DISPLAY = {\n storage_contract: \'Storage contract\',\n document_purchase: \'Document purchase\',\n inventory_htlc: \'Inventory HTLC\',\n inventory_htlc_claim: \'HTLC seller claim\',\n payjoin: \'Payjoin\',\n payjoin_deposit: \'Payjoin deposit\',\n bridge_payment: \'Hub wallet payment\',\n faucet_payment: \'Faucet (regtest)\',\n contract_proposal: \'Contract proposal\',\n fabric_invoice: \'Invoice (local)\',\n distribute_invoice: \'Distribute invoice\',\n execution_registry: \'Execution registry\'\n};\nfunction summarizeContractTypes(types) {\n if (!Array.isArray(types) || types.length === 0) return \'\';\n return types.map(function (t) {\n return CONTRACT_TYPE_DISPLAY[t] || t;\n }).join(\' · \');\n}\nfunction attachFabricContractField(tx, entry) {\n if (!entry || !Array.isArray(entry.types) || entry.types.length === 0) return tx;\n var types = _toConsumableArray(new Set(entry.types));\n return _objectSpread(_objectSpread({}, tx), {}, {\n fabricContract: {\n types: types,\n label: summarizeContractTypes(types),\n meta: entry.meta && _typeof(entry.meta) === \'object\' ? entry.meta : {}\n }\n });\n}\n\n/**\n * @param {Array} transactions - items with `txid`\n * @param {Object} labelMap - lower-case txid keys\n */\nfunction mergeLabelsOntoTransactions(transactions, labelMap) {\n if (!Array.isArray(transactions)) return [];\n var map = labelMap || {};\n return transactions.map(function (tx) {\n var id = tx && tx.txid ? String(tx.txid).trim().toLowerCase() : \'\';\n if (!id || !map[id]) return tx;\n return attachFabricContractField(tx, map[id]);\n });\n}\n\n/**\n * Client-only: map txids from locally stored invoices (see `invoiceStore.js`).\n * @param {Array<{ id?: string, txids?: string[], memo?: string }>} invoices\n * @returns {Object}\n */\nfunction buildInvoiceTxLabels(invoices) {\n var out = {};\n if (!Array.isArray(invoices)) return out;\n var _iterator = _createForOfIteratorHelper(invoices),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var inv = _step.value;\n if (!inv || !Array.isArray(inv.txids)) continue;\n var _iterator2 = _createForOfIteratorHelper(inv.txids),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var tid = _step2.value;\n var t = String(tid || \'\').trim().toLowerCase();\n if (!/^[a-f0-9]{64}$/.test(t)) continue;\n if (!out[t]) out[t] = {\n types: [],\n meta: {}\n };\n if (!out[t].types.includes(\'fabric_invoice\')) out[t].types.push(\'fabric_invoice\');\n if (inv.id) out[t].meta.invoiceId = inv.id;\n if (inv.memo) out[t].meta.memo = String(inv.memo);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return out;\n}\n\n/**\n * Merge two label maps (e.g. server `fabricContract` map + local invoices).\n * @param {Object} a\n * @param {Object} b\n */\nfunction mergeLabelMaps(a, b) {\n var out = {};\n var add = function add(src) {\n if (!src || _typeof(src) !== \'object\') return;\n for (var _i = 0, _Object$entries = Object.entries(src); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n k = _Object$entries$_i[0],\n v = _Object$entries$_i[1];\n var key = String(k).trim().toLowerCase();\n if (!out[key]) out[key] = {\n types: [],\n meta: {}\n };\n if (v && Array.isArray(v.types)) {\n var _iterator3 = _createForOfIteratorHelper(v.types),\n _step3;\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var t = _step3.value;\n if (!out[key].types.includes(t)) out[key].types.push(t);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n }\n if (v && v.meta && _typeof(v.meta) === \'object\') Object.assign(out[key].meta, v.meta);\n }\n };\n add(a);\n add(b);\n return out;\n}\n\n/**\n * Combine server-annotated transactions with an extra label map (e.g. invoices).\n * @param {Array} transactions - may already include `fabricContract`\n * @param {Object} extraByTxid - from {@link buildInvoiceTxLabels}\n */\nfunction mergeServerAndLocalLabels(transactions, extraByTxid) {\n if (!Array.isArray(transactions)) return [];\n var extra = extraByTxid || {};\n return transactions.map(function (tx) {\n var id = tx && tx.txid ? String(tx.txid).trim().toLowerCase() : \'\';\n if (!id) return tx;\n var loc = extra[id];\n var srv = tx.fabricContract;\n if (!loc && !srv) return tx;\n var types = _toConsumableArray(new Set([].concat(_toConsumableArray(srv && srv.types || []), _toConsumableArray(loc && loc.types || []))));\n var meta = _objectSpread(_objectSpread({}, srv && srv.meta || {}), loc && loc.meta || {});\n return _objectSpread(_objectSpread({}, tx), {}, {\n fabricContract: {\n types: types,\n label: summarizeContractTypes(types),\n meta: meta\n }\n });\n });\n}\nmodule.exports = {\n CONTRACT_TYPE_DISPLAY: CONTRACT_TYPE_DISPLAY,\n summarizeContractTypes: summarizeContractTypes,\n attachFabricContractField: attachFabricContractField,\n mergeLabelsOntoTransactions: mergeLabelsOntoTransactions,\n buildInvoiceTxLabels: buildInvoiceTxLabels,\n mergeLabelMaps: mergeLabelMaps,\n mergeServerAndLocalLabels: mergeServerAndLocalLabels\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9mdW5jdGlvbnMvdHhDb250cmFjdExhYmVscy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUhBLFNBQUFBLGVBQUFDLENBQUEsRUFBQUMsQ0FBQSxXQUFBQyxlQUFBLENBQUFGLENBQUEsS0FBQUcscUJBQUEsQ0FBQUgsQ0FBQSxFQUFBQyxDQUFBLEtBQUFHLDJCQUFBLENBQUFKLENBQUEsRUFBQUMsQ0FBQSxLQUFBSSxnQkFBQTtBQUFBLFNBQUFBLGlCQUFBLGNBQUFDLFNBQUE7QUFBQSxTQUFBSCxzQkFBQUgsQ0FBQSxFQUFBTyxDQUFBLFFBQUFDLENBQUEsV0FBQVIsQ0FBQSxnQ0FBQVMsTUFBQSxJQUFBVCxDQUFBLENBQUFTLE1BQUEsQ0FBQUMsUUFBQSxLQUFBVixDQUFBLDRCQUFBUSxDQUFBLFFBQUFQLENBQUEsRUFBQVUsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxPQUFBQyxDQUFBLE9BQUFDLENBQUEsaUJBQUFKLENBQUEsSUFBQUosQ0FBQSxHQUFBQSxDQUFBLENBQUFTLElBQUEsQ0FBQWpCLENBQUEsR0FBQWtCLElBQUEsUUFBQVgsQ0FBQSxRQUFBWSxNQUFBLENBQUFYLENBQUEsTUFBQUEsQ0FBQSxVQUFBTyxDQUFBLHVCQUFBQSxDQUFBLElBQUFkLENBQUEsR0FBQVcsQ0FBQSxDQUFBSyxJQUFBLENBQUFULENBQUEsR0FBQVksSUFBQSxNQUFBTixDQUFBLENBQUFPLElBQUEsQ0FBQXBCLENBQUEsQ0FBQXFCLEtBQUEsR0FBQVIsQ0FBQSxDQUFBUyxNQUFBLEtBQUFoQixDQUFBLEdBQUFRLENBQUEsaUJBQUFmLENBQUEsSUFBQWdCLENBQUEsT0FBQUwsQ0FBQSxHQUFBWCxDQUFBLHlCQUFBZSxDQUFBLFlBQUFQLENBQUEsZUFBQUssQ0FBQSxHQUFBTCxDQUFBLGNBQUFXLE1BQUEsQ0FBQU4sQ0FBQSxNQUFBQSxDQUFBLDJCQUFBRyxDQUFBLFFBQUFMLENBQUEsYUFBQUcsQ0FBQTtBQUFBLFNBQUFaLGdCQUFBRixDQUFBLFFBQUF3QixLQUFBLENBQUFDLE9BQUEsQ0FBQXpCLENBQUEsVUFBQUEsQ0FBQTtBQUFBLFNBQUEwQiwyQkFBQTFCLENBQUEsRUFBQUMsQ0FBQSxRQUFBTyxDQUFBLHlCQUFBQyxNQUFBLElBQUFULENBQUEsQ0FBQVMsTUFBQSxDQUFBQyxRQUFBLEtBQUFWLENBQUEscUJBQUFRLENBQUEsUUFBQWdCLEtBQUEsQ0FBQUMsT0FBQSxDQUFBekIsQ0FBQSxNQUFBUSxDQUFBLEdBQUFKLDJCQUFBLENBQUFKLENBQUEsTUFBQUMsQ0FBQSxJQUFBRCxDQUFBLHVCQUFBQSxDQUFBLENBQUF1QixNQUFBLElBQUFmLENBQUEsS0FBQVIsQ0FBQSxHQUFBUSxDQUFBLE9BQUFtQixFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQWpCLENBQUEsV0FBQUEsRUFBQSxXQUFBZ0IsRUFBQSxJQUFBM0IsQ0FBQSxDQUFBdUIsTUFBQSxLQUFBSCxJQUFBLFdBQUFBLElBQUEsTUFBQUUsS0FBQSxFQUFBdEIsQ0FBQSxDQUFBMkIsRUFBQSxVQUFBMUIsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLFVBQUFBLENBQUEsS0FBQWUsQ0FBQSxFQUFBYSxDQUFBLGdCQUFBdEIsU0FBQSxpSkFBQVUsQ0FBQSxFQUFBRixDQUFBLE9BQUFELENBQUEsZ0JBQUFnQixDQUFBLFdBQUFBLEVBQUEsSUFBQXJCLENBQUEsR0FBQUEsQ0FBQSxDQUFBUyxJQUFBLENBQUFqQixDQUFBLE1BQUFXLENBQUEsV0FBQUEsRUFBQSxRQUFBWCxDQUFBLEdBQUFRLENBQUEsQ0FBQVUsSUFBQSxXQUFBSixDQUFBLEdBQUFkLENBQUEsQ0FBQW9CLElBQUEsRUFBQXBCLENBQUEsS0FBQUMsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLElBQUFhLENBQUEsT0FBQUcsQ0FBQSxHQUFBaEIsQ0FBQSxLQUFBZSxDQUFBLFdBQUFBLEVBQUEsVUFBQUQsQ0FBQSxZQUFBTixDQUFBLGNBQUFBLENBQUEsOEJBQUFLLENBQUEsUUFBQUcsQ0FBQTtBQUFBLFNBQUFjLFFBQUFkLENBQUEsc0NBQUFjLE9BQUEsd0JBQUFyQixNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQU0sQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBUCxNQUFBLElBQUFPLENBQUEsQ0FBQWUsV0FBQSxLQUFBdEIsTUFBQSxJQUFBTyxDQUFBLEtBQUFQLE1BQUEsQ0FBQXVCLFNBQUEscUJBQUFoQixDQUFBLEtBQUFjLE9BQUEsQ0FBQWQsQ0FBQTtBQUFBLFNBQUFpQixRQUFBaEMsQ0FBQSxFQUFBRCxDQUFBLFFBQUFRLENBQUEsR0FBQVcsTUFBQSxDQUFBZSxJQUFBLENBQUFqQyxDQUFBLE9BQUFrQixNQUFBLENBQUFnQixxQkFBQSxRQUFBbkIsQ0FBQSxHQUFBRyxNQUFBLENBQUFnQixxQkFBQSxDQUFBbEMsQ0FBQSxHQUFBRCxDQUFBLEtBQUFnQixDQUFBLEdBQUFBLENBQUEsQ0FBQW9CLE1BQUEsV0FBQXBDLENBQUEsV0FBQW1CLE1BQUEsQ0FBQWtCLHdCQUFBLENBQUFwQyxDQUFBLEVBQUFELENBQUEsRUFBQXNDLFVBQUEsT0FBQTlCLENBQUEsQ0FBQWEsSUFBQSxDQUFBa0IsS0FBQSxDQUFBL0IsQ0FBQSxFQUFBUSxDQUFBLFlBQUFSLENBQUE7QUFBQSxTQUFBZ0MsY0FBQXZDLENBQUEsYUFBQUQsQ0FBQSxNQUFBQSxDQUFBLEdBQUF5QyxTQUFBLENBQUFsQixNQUFBLEVBQUF2QixDQUFBLFVBQUFRLENBQUEsV0FBQWlDLFNBQUEsQ0FBQXpDLENBQUEsSUFBQXlDLFNBQUEsQ0FBQXpDLENBQUEsUUFBQUEsQ0FBQSxPQUFBaUMsT0FBQSxDQUFBZCxNQUFBLENBQUFYLENBQUEsT0FBQWtDLE9BQUEsV0FBQTFDLENBQUEsSUFBQTJDLGVBQUEsQ0FBQTFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBUSxDQUFBLENBQUFSLENBQUEsU0FBQW1CLE1BQUEsQ0FBQXlCLHlCQUFBLEdBQUF6QixNQUFBLENBQUEwQixnQkFBQSxDQUFBNUMsQ0FBQSxFQUFBa0IsTUFBQSxDQUFBeUIseUJBQUEsQ0FBQXBDLENBQUEsS0FBQXlCLE9BQUEsQ0FBQWQsTUFBQSxDQUFBWCxDQUFBLEdBQUFrQyxPQUFBLFdBQUExQyxDQUFBLElBQUFtQixNQUFBLENBQUEyQixjQUFBLENBQUE3QyxDQUFBLEVBQUFELENBQUEsRUFBQW1CLE1BQUEsQ0FBQWtCLHdCQUFBLENBQUE3QixDQUFBLEVBQUFSLENBQUEsaUJBQUFDLENBQUE7QUFBQSxTQUFBMEMsZ0JBQUExQyxDQUFBLEVBQUFELENBQUEsRUFBQVEsQ0FBQSxZQUFBUixDQUFBLEdBQUErQyxjQUFBLENBQUEvQyxDQUFBLE1BQUFDLENBQUEsR0FBQWtCLE1BQUEsQ0FBQTJCLGNBQUEsQ0FBQTdDLENBQUEsRUFBQUQsQ0FBQSxJQUFBc0IsS0FBQSxFQUFBZCxDQUFBLEVBQUE4QixVQUFBLE1BQUFVLFlBQUEsTUFBQUMsUUFBQSxVQUFBaEQsQ0FBQSxDQUFBRCxDQUFBLElBQUFRLENBQUEsRUFBQVAsQ0FBQTtBQUFBLFNBQUE4QyxlQUFBdkMsQ0FBQSxRQUFBSSxDQUFBLEdBQUFzQyxZQUFBLENBQUExQyxDQUFBLGdDQUFBc0IsT0FBQSxDQUFBbEIsQ0FBQSxJQUFBQSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBc0MsYUFBQTFDLENBQUEsRUFBQVIsQ0FBQSxvQkFBQThCLE9BQUEsQ0FBQXRCLENBQUEsTUFBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFQLENBQUEsR0FBQU8sQ0FBQSxDQUFBQyxNQUFBLENBQUEwQyxXQUFBLGtCQUFBbEQsQ0FBQSxRQUFBVyxDQUFBLEdBQUFYLENBQUEsQ0FBQWdCLElBQUEsQ0FBQVQsQ0FBQSxFQUFBUixDQUFBLGdDQUFBOEIsT0FBQSxDQUFBbEIsQ0FBQSxVQUFBQSxDQUFBLFlBQUFOLFNBQUEseUVBQUFOLENBQUEsR0FBQW9ELE1BQUEsR0FBQUMsTUFBQSxFQUFBN0MsQ0FBQTtBQUFBLFNBQUE4QyxtQkFBQXRELENBQUEsV0FBQXVELGtCQUFBLENBQUF2RCxDQUFBLEtBQUF3RCxnQkFBQSxDQUFBeEQsQ0FBQSxLQUFBSSwyQkFBQSxDQUFBSixDQUFBLEtBQUF5RCxrQkFBQTtBQUFBLFNBQUFBLG1CQUFBLGNBQUFuRCxTQUFBO0FBQUEsU0FBQUYsNEJBQUFKLENBQUEsRUFBQWMsQ0FBQSxRQUFBZCxDQUFBLDJCQUFBQSxDQUFBLFNBQUEwRCxpQkFBQSxDQUFBMUQsQ0FBQSxFQUFBYyxDQUFBLE9BQUFOLENBQUEsTUFBQW1ELFFBQUEsQ0FBQTFDLElBQUEsQ0FBQWpCLENBQUEsRUFBQTRELEtBQUEsNkJBQUFwRCxDQUFBLElBQUFSLENBQUEsQ0FBQStCLFdBQUEsS0FBQXZCLENBQUEsR0FBQVIsQ0FBQSxDQUFBK0IsV0FBQSxDQUFBOEIsSUFBQSxhQUFBckQsQ0FBQSxjQUFBQSxDQUFBLEdBQUFnQixLQUFBLENBQUFzQyxJQUFBLENBQUE5RCxDQUFBLG9CQUFBUSxDQUFBLCtDQUFBdUQsSUFBQSxDQUFBdkQsQ0FBQSxJQUFBa0QsaUJBQUEsQ0FBQTFELENBQUEsRUFBQWMsQ0FBQTtBQUFBLFNBQUEwQyxpQkFBQXhELENBQUEsOEJBQUFTLE1BQUEsWUFBQVQsQ0FBQSxDQUFBUyxNQUFBLENBQUFDLFFBQUEsYUFBQVYsQ0FBQSx1QkFBQXdCLEtBQUEsQ0FBQXNDLElBQUEsQ0FBQTlELENBQUE7QUFBQSxTQUFBdUQsbUJBQUF2RCxDQUFBLFFBQUF3QixLQUFBLENBQUFDLE9BQUEsQ0FBQXpCLENBQUEsVUFBQTBELGlCQUFBLENBQUExRCxDQUFBO0FBQUEsU0FBQTBELGtCQUFBMUQsQ0FBQSxFQUFBYyxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBZCxDQUFBLENBQUF1QixNQUFBLE1BQUFULENBQUEsR0FBQWQsQ0FBQSxDQUFBdUIsTUFBQSxZQUFBdEIsQ0FBQSxNQUFBVSxDQUFBLEdBQUFhLEtBQUEsQ0FBQVYsQ0FBQSxHQUFBYixDQUFBLEdBQUFhLENBQUEsRUFBQWIsQ0FBQSxJQUFBVSxDQUFBLENBQUFWLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFVBQUFVLENBQUE7QUFJQSxJQUFNcUQscUJBQXFCLEdBQUc7RUFDNUJDLGdCQUFnQixFQUFFLGtCQUFrQjtFQUNwQ0MsaUJBQWlCLEVBQUUsbUJBQW1CO0VBQ3RDQyxjQUFjLEVBQUUsZ0JBQWdCO0VBQ2hDQyxvQkFBb0IsRUFBRSxtQkFBbUI7RUFDekNDLE9BQU8sRUFBRSxTQUFTO0VBQ2xCQyxlQUFlLEVBQUUsaUJBQWlCO0VBQ2xDQyxjQUFjLEVBQUUsb0JBQW9CO0VBQ3BDQyxjQUFjLEVBQUUsa0JBQWtCO0VBQ2xDQyxpQkFBaUIsRUFBRSxtQkFBbUI7RUFDdENDLGNBQWMsRUFBRSxpQkFBaUI7RUFDakNDLGtCQUFrQixFQUFFLG9CQUFvQjtFQUN4Q0Msa0JBQWtCLEVBQUU7QUFDdEIsQ0FBQztBQUVELFNBQVNDLHNCQUFzQkEsQ0FBRUMsS0FBSyxFQUFFO0VBQ3RDLElBQUksQ0FBQ3RELEtBQUssQ0FBQ0MsT0FBTyxDQUFDcUQsS0FBSyxDQUFDLElBQUlBLEtBQUssQ0FBQ3ZELE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFO0VBQzFELE9BQU91RCxLQUFLLENBQUNDLEdBQUcsQ0FBQyxVQUFDdkUsQ0FBQztJQUFBLE9BQUt3RCxxQkFBcUIsQ0FBQ3hELENBQUMsQ0FBQyxJQUFJQSxDQUFDO0VBQUEsRUFBQyxDQUFDd0UsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNwRTtBQUVBLFNBQVNDLHlCQUF5QkEsQ0FBRUMsRUFBRSxFQUFFQyxLQUFLLEVBQUU7RUFDN0MsSUFBSSxDQUFDQSxLQUFLLElBQUksQ0FBQzNELEtBQUssQ0FBQ0MsT0FBTyxDQUFDMEQsS0FBSyxDQUFDTCxLQUFLLENBQUMsSUFBSUssS0FBSyxDQUFDTCxLQUFLLENBQUN2RCxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8yRCxFQUFFO0VBQ2hGLElBQU1KLEtBQUssR0FBQXhCLGtCQUFBLENBQU8sSUFBSThCLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDTCxLQUFLLENBQUMsQ0FBQztFQUN2QyxPQUFBdEMsYUFBQSxDQUFBQSxhQUFBLEtBQ0swQyxFQUFFO0lBQ0xHLGNBQWMsRUFBRTtNQUNkUCxLQUFLLEVBQUxBLEtBQUs7TUFDTFEsS0FBSyxFQUFFVCxzQkFBc0IsQ0FBQ0MsS0FBSyxDQUFDO01BQ3BDUyxJQUFJLEVBQUVKLEtBQUssQ0FBQ0ksSUFBSSxJQUFJekQsT0FBQSxDQUFPcUQsS0FBSyxDQUFDSSxJQUFJLE1BQUssUUFBUSxHQUFHSixLQUFLLENBQUNJLElBQUksR0FBRyxDQUFDO0lBQ3JFO0VBQUM7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLDJCQUEyQkEsQ0FBRUMsWUFBWSxFQUFFQyxRQUFRLEVBQUU7RUFDNUQsSUFBSSxDQUFDbEUsS0FBSyxDQUFDQyxPQUFPLENBQUNnRSxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUU7RUFDM0MsSUFBTVYsR0FBRyxHQUFHVyxRQUFRLElBQUksQ0FBQyxDQUFDO0VBQzFCLE9BQU9ELFlBQVksQ0FBQ1YsR0FBRyxDQUFDLFVBQUNHLEVBQUUsRUFBSztJQUM5QixJQUFNUyxFQUFFLEdBQUdULEVBQUUsSUFBSUEsRUFBRSxDQUFDVSxJQUFJLEdBQUd4QyxNQUFNLENBQUM4QixFQUFFLENBQUNVLElBQUksQ0FBQyxDQUFDQyxJQUFJLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUU7SUFDcEUsSUFBSSxDQUFDSCxFQUFFLElBQUksQ0FBQ1osR0FBRyxDQUFDWSxFQUFFLENBQUMsRUFBRSxPQUFPVCxFQUFFO0lBQzlCLE9BQU9ELHlCQUF5QixDQUFDQyxFQUFFLEVBQUVILEdBQUcsQ0FBQ1ksRUFBRSxDQUFDLENBQUM7RUFDL0MsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNJLG9CQUFvQkEsQ0FBRUMsUUFBUSxFQUFFO0VBQ3ZDLElBQU1DLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDZCxJQUFJLENBQUN6RSxLQUFLLENBQUNDLE9BQU8sQ0FBQ3VFLFFBQVEsQ0FBQyxFQUFFLE9BQU9DLEdBQUc7RUFBQyxJQUFBQyxTQUFBLEdBQUF4RSwwQkFBQSxDQUN2QnNFLFFBQVE7SUFBQUcsS0FBQTtFQUFBO0lBQTFCLEtBQUFELFNBQUEsQ0FBQXJFLENBQUEsTUFBQXNFLEtBQUEsR0FBQUQsU0FBQSxDQUFBdkYsQ0FBQSxJQUFBUyxJQUFBLEdBQTRCO01BQUEsSUFBakJnRixHQUFHLEdBQUFELEtBQUEsQ0FBQTdFLEtBQUE7TUFDWixJQUFJLENBQUM4RSxHQUFHLElBQUksQ0FBQzVFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDMkUsR0FBRyxDQUFDQyxLQUFLLENBQUMsRUFBRTtNQUFTLElBQUFDLFVBQUEsR0FBQTVFLDBCQUFBLENBQzlCMEUsR0FBRyxDQUFDQyxLQUFLO1FBQUFFLE1BQUE7TUFBQTtRQUEzQixLQUFBRCxVQUFBLENBQUF6RSxDQUFBLE1BQUEwRSxNQUFBLEdBQUFELFVBQUEsQ0FBQTNGLENBQUEsSUFBQVMsSUFBQSxHQUE2QjtVQUFBLElBQWxCb0YsR0FBRyxHQUFBRCxNQUFBLENBQUFqRixLQUFBO1VBQ1osSUFBTWQsQ0FBQyxHQUFHNEMsTUFBTSxDQUFDb0QsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDWCxJQUFJLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQztVQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMvQixJQUFJLENBQUN2RCxDQUFDLENBQUMsRUFBRTtVQUMvQixJQUFJLENBQUN5RixHQUFHLENBQUN6RixDQUFDLENBQUMsRUFBRXlGLEdBQUcsQ0FBQ3pGLENBQUMsQ0FBQyxHQUFHO1lBQUVzRSxLQUFLLEVBQUUsRUFBRTtZQUFFUyxJQUFJLEVBQUUsQ0FBQztVQUFFLENBQUM7VUFDN0MsSUFBSSxDQUFDVSxHQUFHLENBQUN6RixDQUFDLENBQUMsQ0FBQ3NFLEtBQUssQ0FBQzJCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFUixHQUFHLENBQUN6RixDQUFDLENBQUMsQ0FBQ3NFLEtBQUssQ0FBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztVQUNqRixJQUFJK0UsR0FBRyxDQUFDVCxFQUFFLEVBQUVNLEdBQUcsQ0FBQ3pGLENBQUMsQ0FBQyxDQUFDK0UsSUFBSSxDQUFDbUIsU0FBUyxHQUFHTixHQUFHLENBQUNULEVBQUU7VUFDMUMsSUFBSVMsR0FBRyxDQUFDTyxJQUFJLEVBQUVWLEdBQUcsQ0FBQ3pGLENBQUMsQ0FBQyxDQUFDK0UsSUFBSSxDQUFDb0IsSUFBSSxHQUFHdkQsTUFBTSxDQUFDZ0QsR0FBRyxDQUFDTyxJQUFJLENBQUM7UUFDbkQ7TUFBQyxTQUFBQyxHQUFBO1FBQUFOLFVBQUEsQ0FBQXJHLENBQUEsQ0FBQTJHLEdBQUE7TUFBQTtRQUFBTixVQUFBLENBQUF2RixDQUFBO01BQUE7SUFDSDtFQUFDLFNBQUE2RixHQUFBO0lBQUFWLFNBQUEsQ0FBQWpHLENBQUEsQ0FBQTJHLEdBQUE7RUFBQTtJQUFBVixTQUFBLENBQUFuRixDQUFBO0VBQUE7RUFDRCxPQUFPa0YsR0FBRztBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTWSxjQUFjQSxDQUFFL0YsQ0FBQyxFQUFFZ0csQ0FBQyxFQUFFO0VBQzdCLElBQU1iLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDZCxJQUFNYyxHQUFHLEdBQUcsU0FBTkEsR0FBR0EsQ0FBSUMsR0FBRyxFQUFLO0lBQ25CLElBQUksQ0FBQ0EsR0FBRyxJQUFJbEYsT0FBQSxDQUFPa0YsR0FBRyxNQUFLLFFBQVEsRUFBRTtJQUNyQyxTQUFBQyxFQUFBLE1BQUFDLGVBQUEsR0FBcUIvRixNQUFNLENBQUNnRyxPQUFPLENBQUNILEdBQUcsQ0FBQyxFQUFBQyxFQUFBLEdBQUFDLGVBQUEsQ0FBQTNGLE1BQUEsRUFBQTBGLEVBQUEsSUFBRTtNQUFyQyxJQUFBRyxrQkFBQSxHQUFBckgsY0FBQSxDQUFBbUgsZUFBQSxDQUFBRCxFQUFBO1FBQU9JLENBQUMsR0FBQUQsa0JBQUE7UUFBRUUsQ0FBQyxHQUFBRixrQkFBQTtNQUNkLElBQU1HLEdBQUcsR0FBR25FLE1BQU0sQ0FBQ2lFLENBQUMsQ0FBQyxDQUFDeEIsSUFBSSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUM7TUFDMUMsSUFBSSxDQUFDRyxHQUFHLENBQUNzQixHQUFHLENBQUMsRUFBRXRCLEdBQUcsQ0FBQ3NCLEdBQUcsQ0FBQyxHQUFHO1FBQUV6QyxLQUFLLEVBQUUsRUFBRTtRQUFFUyxJQUFJLEVBQUUsQ0FBQztNQUFFLENBQUM7TUFDakQsSUFBSStCLENBQUMsSUFBSTlGLEtBQUssQ0FBQ0MsT0FBTyxDQUFDNkYsQ0FBQyxDQUFDeEMsS0FBSyxDQUFDLEVBQUU7UUFBQSxJQUFBMEMsVUFBQSxHQUFBOUYsMEJBQUEsQ0FDZjRGLENBQUMsQ0FBQ3hDLEtBQUs7VUFBQTJDLE1BQUE7UUFBQTtVQUF2QixLQUFBRCxVQUFBLENBQUEzRixDQUFBLE1BQUE0RixNQUFBLEdBQUFELFVBQUEsQ0FBQTdHLENBQUEsSUFBQVMsSUFBQSxHQUF5QjtZQUFBLElBQWRaLENBQUMsR0FBQWlILE1BQUEsQ0FBQW5HLEtBQUE7WUFDVixJQUFJLENBQUMyRSxHQUFHLENBQUNzQixHQUFHLENBQUMsQ0FBQ3pDLEtBQUssQ0FBQzJCLFFBQVEsQ0FBQ2pHLENBQUMsQ0FBQyxFQUFFeUYsR0FBRyxDQUFDc0IsR0FBRyxDQUFDLENBQUN6QyxLQUFLLENBQUN6RCxJQUFJLENBQUNiLENBQUMsQ0FBQztVQUN6RDtRQUFDLFNBQUFvRyxHQUFBO1VBQUFZLFVBQUEsQ0FBQXZILENBQUEsQ0FBQTJHLEdBQUE7UUFBQTtVQUFBWSxVQUFBLENBQUF6RyxDQUFBO1FBQUE7TUFDSDtNQUNBLElBQUl1RyxDQUFDLElBQUlBLENBQUMsQ0FBQy9CLElBQUksSUFBSXpELE9BQUEsQ0FBT3dGLENBQUMsQ0FBQy9CLElBQUksTUFBSyxRQUFRLEVBQUVwRSxNQUFNLENBQUN1RyxNQUFNLENBQUN6QixHQUFHLENBQUNzQixHQUFHLENBQUMsQ0FBQ2hDLElBQUksRUFBRStCLENBQUMsQ0FBQy9CLElBQUksQ0FBQztJQUNyRjtFQUNGLENBQUM7RUFDRHdCLEdBQUcsQ0FBQ2pHLENBQUMsQ0FBQztFQUNOaUcsR0FBRyxDQUFDRCxDQUFDLENBQUM7RUFDTixPQUFPYixHQUFHO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMwQix5QkFBeUJBLENBQUVsQyxZQUFZLEVBQUVtQyxXQUFXLEVBQUU7RUFDN0QsSUFBSSxDQUFDcEcsS0FBSyxDQUFDQyxPQUFPLENBQUNnRSxZQUFZLENBQUMsRUFBRSxPQUFPLEVBQUU7RUFDM0MsSUFBTW9DLEtBQUssR0FBR0QsV0FBVyxJQUFJLENBQUMsQ0FBQztFQUMvQixPQUFPbkMsWUFBWSxDQUFDVixHQUFHLENBQUMsVUFBQ0csRUFBRSxFQUFLO0lBQzlCLElBQU1TLEVBQUUsR0FBR1QsRUFBRSxJQUFJQSxFQUFFLENBQUNVLElBQUksR0FBR3hDLE1BQU0sQ0FBQzhCLEVBQUUsQ0FBQ1UsSUFBSSxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRTtJQUNwRSxJQUFJLENBQUNILEVBQUUsRUFBRSxPQUFPVCxFQUFFO0lBQ2xCLElBQU00QyxHQUFHLEdBQUdELEtBQUssQ0FBQ2xDLEVBQUUsQ0FBQztJQUNyQixJQUFNb0MsR0FBRyxHQUFHN0MsRUFBRSxDQUFDRyxjQUFjO0lBQzdCLElBQUksQ0FBQ3lDLEdBQUcsSUFBSSxDQUFDQyxHQUFHLEVBQUUsT0FBTzdDLEVBQUU7SUFDM0IsSUFBTUosS0FBSyxHQUFBeEIsa0JBQUEsQ0FDTixJQUFJOEIsR0FBRyxJQUFBNEMsTUFBQSxDQUFBMUUsa0JBQUEsQ0FDSHlFLEdBQUcsSUFBSUEsR0FBRyxDQUFDakQsS0FBSyxJQUFLLEVBQUUsR0FBQXhCLGtCQUFBLENBQ3ZCd0UsR0FBRyxJQUFJQSxHQUFHLENBQUNoRCxLQUFLLElBQUssRUFBRSxFQUM3QixDQUFDLENBQ0g7SUFDRCxJQUFNUyxJQUFJLEdBQUEvQyxhQUFBLENBQUFBLGFBQUEsS0FDSHVGLEdBQUcsSUFBSUEsR0FBRyxDQUFDeEMsSUFBSSxJQUFLLENBQUMsQ0FBQyxHQUN0QnVDLEdBQUcsSUFBSUEsR0FBRyxDQUFDdkMsSUFBSSxJQUFLLENBQUMsQ0FBQyxDQUM1QjtJQUNELE9BQUEvQyxhQUFBLENBQUFBLGFBQUEsS0FDSzBDLEVBQUU7TUFDTEcsY0FBYyxFQUFFO1FBQ2RQLEtBQUssRUFBTEEsS0FBSztRQUNMUSxLQUFLLEVBQUVULHNCQUFzQixDQUFDQyxLQUFLLENBQUM7UUFDcENTLElBQUksRUFBSkE7TUFDRjtJQUFDO0VBRUwsQ0FBQyxDQUFDO0FBQ0o7QUFFQTBDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQ2ZsRSxxQkFBcUIsRUFBckJBLHFCQUFxQjtFQUNyQmEsc0JBQXNCLEVBQXRCQSxzQkFBc0I7RUFDdEJJLHlCQUF5QixFQUF6QkEseUJBQXlCO0VBQ3pCTywyQkFBMkIsRUFBM0JBLDJCQUEyQjtFQUMzQk8sb0JBQW9CLEVBQXBCQSxvQkFBb0I7RUFDcEJjLGNBQWMsRUFBZEEsY0FBYztFQUNkYyx5QkFBeUIsRUFBekJBO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vZnVuY3Rpb25zL3R4Q29udHJhY3RMYWJlbHMuanM/YWZmNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogSHVtYW4tcmVhZGFibGUgbmFtZXMgZm9yIEZhYnJpYyBMMSAvIGNvbnRyYWN0IGZsb3dzICh3YWxsZXQgdHJhbnNhY3Rpb24gbGFiZWxzKS5cbiAqIEtleXMgYXJlIHN0YWJsZSBtYWNoaW5lIGlkczsgVUkgdXNlcyB7QGxpbmsgc3VtbWFyaXplQ29udHJhY3RUeXBlc30uXG4gKi9cbmNvbnN0IENPTlRSQUNUX1RZUEVfRElTUExBWSA9IHtcbiAgc3RvcmFnZV9jb250cmFjdDogJ1N0b3JhZ2UgY29udHJhY3QnLFxuICBkb2N1bWVudF9wdXJjaGFzZTogJ0RvY3VtZW50IHB1cmNoYXNlJyxcbiAgaW52ZW50b3J5X2h0bGM6ICdJbnZlbnRvcnkgSFRMQycsXG4gIGludmVudG9yeV9odGxjX2NsYWltOiAnSFRMQyBzZWxsZXIgY2xhaW0nLFxuICBwYXlqb2luOiAnUGF5am9pbicsXG4gIHBheWpvaW5fZGVwb3NpdDogJ1BheWpvaW4gZGVwb3NpdCcsXG4gIGJyaWRnZV9wYXltZW50OiAnSHViIHdhbGxldCBwYXltZW50JyxcbiAgZmF1Y2V0X3BheW1lbnQ6ICdGYXVjZXQgKHJlZ3Rlc3QpJyxcbiAgY29udHJhY3RfcHJvcG9zYWw6ICdDb250cmFjdCBwcm9wb3NhbCcsXG4gIGZhYnJpY19pbnZvaWNlOiAnSW52b2ljZSAobG9jYWwpJyxcbiAgZGlzdHJpYnV0ZV9pbnZvaWNlOiAnRGlzdHJpYnV0ZSBpbnZvaWNlJyxcbiAgZXhlY3V0aW9uX3JlZ2lzdHJ5OiAnRXhlY3V0aW9uIHJlZ2lzdHJ5J1xufTtcblxuZnVuY3Rpb24gc3VtbWFyaXplQ29udHJhY3RUeXBlcyAodHlwZXMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHR5cGVzKSB8fCB0eXBlcy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgcmV0dXJuIHR5cGVzLm1hcCgodCkgPT4gQ09OVFJBQ1RfVFlQRV9ESVNQTEFZW3RdIHx8IHQpLmpvaW4oJyDCtyAnKTtcbn1cblxuZnVuY3Rpb24gYXR0YWNoRmFicmljQ29udHJhY3RGaWVsZCAodHgsIGVudHJ5KSB7XG4gIGlmICghZW50cnkgfHwgIUFycmF5LmlzQXJyYXkoZW50cnkudHlwZXMpIHx8IGVudHJ5LnR5cGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHR4O1xuICBjb25zdCB0eXBlcyA9IFsuLi5uZXcgU2V0KGVudHJ5LnR5cGVzKV07XG4gIHJldHVybiB7XG4gICAgLi4udHgsXG4gICAgZmFicmljQ29udHJhY3Q6IHtcbiAgICAgIHR5cGVzLFxuICAgICAgbGFiZWw6IHN1bW1hcml6ZUNvbnRyYWN0VHlwZXModHlwZXMpLFxuICAgICAgbWV0YTogZW50cnkubWV0YSAmJiB0eXBlb2YgZW50cnkubWV0YSA9PT0gJ29iamVjdCcgPyBlbnRyeS5tZXRhIDoge31cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxvYmplY3Q+fSB0cmFuc2FjdGlvbnMgLSBpdGVtcyB3aXRoIGB0eGlkYFxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCB7IHR5cGVzOiBzdHJpbmdbXSwgbWV0YT86IG9iamVjdCB9Pn0gbGFiZWxNYXAgLSBsb3dlci1jYXNlIHR4aWQga2V5c1xuICovXG5mdW5jdGlvbiBtZXJnZUxhYmVsc09udG9UcmFuc2FjdGlvbnMgKHRyYW5zYWN0aW9ucywgbGFiZWxNYXApIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHRyYW5zYWN0aW9ucykpIHJldHVybiBbXTtcbiAgY29uc3QgbWFwID0gbGFiZWxNYXAgfHwge307XG4gIHJldHVybiB0cmFuc2FjdGlvbnMubWFwKCh0eCkgPT4ge1xuICAgIGNvbnN0IGlkID0gdHggJiYgdHgudHhpZCA/IFN0cmluZyh0eC50eGlkKS50cmltKCkudG9Mb3dlckNhc2UoKSA6ICcnO1xuICAgIGlmICghaWQgfHwgIW1hcFtpZF0pIHJldHVybiB0eDtcbiAgICByZXR1cm4gYXR0YWNoRmFicmljQ29udHJhY3RGaWVsZCh0eCwgbWFwW2lkXSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENsaWVudC1vbmx5OiBtYXAgdHhpZHMgZnJvbSBsb2NhbGx5IHN0b3JlZCBpbnZvaWNlcyAoc2VlIGBpbnZvaWNlU3RvcmUuanNgKS5cbiAqIEBwYXJhbSB7QXJyYXk8eyBpZD86IHN0cmluZywgdHhpZHM/OiBzdHJpbmdbXSwgbWVtbz86IHN0cmluZyB9Pn0gaW52b2ljZXNcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCB7IHR5cGVzOiBzdHJpbmdbXSwgbWV0YTogb2JqZWN0IH0+fVxuICovXG5mdW5jdGlvbiBidWlsZEludm9pY2VUeExhYmVscyAoaW52b2ljZXMpIHtcbiAgY29uc3Qgb3V0ID0ge307XG4gIGlmICghQXJyYXkuaXNBcnJheShpbnZvaWNlcykpIHJldHVybiBvdXQ7XG4gIGZvciAoY29uc3QgaW52IG9mIGludm9pY2VzKSB7XG4gICAgaWYgKCFpbnYgfHwgIUFycmF5LmlzQXJyYXkoaW52LnR4aWRzKSkgY29udGludWU7XG4gICAgZm9yIChjb25zdCB0aWQgb2YgaW52LnR4aWRzKSB7XG4gICAgICBjb25zdCB0ID0gU3RyaW5nKHRpZCB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoIS9eW2EtZjAtOV17NjR9JC8udGVzdCh0KSkgY29udGludWU7XG4gICAgICBpZiAoIW91dFt0XSkgb3V0W3RdID0geyB0eXBlczogW10sIG1ldGE6IHt9IH07XG4gICAgICBpZiAoIW91dFt0XS50eXBlcy5pbmNsdWRlcygnZmFicmljX2ludm9pY2UnKSkgb3V0W3RdLnR5cGVzLnB1c2goJ2ZhYnJpY19pbnZvaWNlJyk7XG4gICAgICBpZiAoaW52LmlkKSBvdXRbdF0ubWV0YS5pbnZvaWNlSWQgPSBpbnYuaWQ7XG4gICAgICBpZiAoaW52Lm1lbW8pIG91dFt0XS5tZXRhLm1lbW8gPSBTdHJpbmcoaW52Lm1lbW8pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIE1lcmdlIHR3byBsYWJlbCBtYXBzIChlLmcuIHNlcnZlciBgZmFicmljQ29udHJhY3RgIG1hcCArIGxvY2FsIGludm9pY2VzKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhXG4gKiBAcGFyYW0ge09iamVjdH0gYlxuICovXG5mdW5jdGlvbiBtZXJnZUxhYmVsTWFwcyAoYSwgYikge1xuICBjb25zdCBvdXQgPSB7fTtcbiAgY29uc3QgYWRkID0gKHNyYykgPT4ge1xuICAgIGlmICghc3JjIHx8IHR5cGVvZiBzcmMgIT09ICdvYmplY3QnKSByZXR1cm47XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoc3JjKSkge1xuICAgICAgY29uc3Qga2V5ID0gU3RyaW5nKGspLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKCFvdXRba2V5XSkgb3V0W2tleV0gPSB7IHR5cGVzOiBbXSwgbWV0YToge30gfTtcbiAgICAgIGlmICh2ICYmIEFycmF5LmlzQXJyYXkodi50eXBlcykpIHtcbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHYudHlwZXMpIHtcbiAgICAgICAgICBpZiAoIW91dFtrZXldLnR5cGVzLmluY2x1ZGVzKHQpKSBvdXRba2V5XS50eXBlcy5wdXNoKHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodiAmJiB2Lm1ldGEgJiYgdHlwZW9mIHYubWV0YSA9PT0gJ29iamVjdCcpIE9iamVjdC5hc3NpZ24ob3V0W2tleV0ubWV0YSwgdi5tZXRhKTtcbiAgICB9XG4gIH07XG4gIGFkZChhKTtcbiAgYWRkKGIpO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIENvbWJpbmUgc2VydmVyLWFubm90YXRlZCB0cmFuc2FjdGlvbnMgd2l0aCBhbiBleHRyYSBsYWJlbCBtYXAgKGUuZy4gaW52b2ljZXMpLlxuICogQHBhcmFtIHtBcnJheTxvYmplY3Q+fSB0cmFuc2FjdGlvbnMgLSBtYXkgYWxyZWFkeSBpbmNsdWRlIGBmYWJyaWNDb250cmFjdGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBleHRyYUJ5VHhpZCAtIGZyb20ge0BsaW5rIGJ1aWxkSW52b2ljZVR4TGFiZWxzfVxuICovXG5mdW5jdGlvbiBtZXJnZVNlcnZlckFuZExvY2FsTGFiZWxzICh0cmFuc2FjdGlvbnMsIGV4dHJhQnlUeGlkKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh0cmFuc2FjdGlvbnMpKSByZXR1cm4gW107XG4gIGNvbnN0IGV4dHJhID0gZXh0cmFCeVR4aWQgfHwge307XG4gIHJldHVybiB0cmFuc2FjdGlvbnMubWFwKCh0eCkgPT4ge1xuICAgIGNvbnN0IGlkID0gdHggJiYgdHgudHhpZCA/IFN0cmluZyh0eC50eGlkKS50cmltKCkudG9Mb3dlckNhc2UoKSA6ICcnO1xuICAgIGlmICghaWQpIHJldHVybiB0eDtcbiAgICBjb25zdCBsb2MgPSBleHRyYVtpZF07XG4gICAgY29uc3Qgc3J2ID0gdHguZmFicmljQ29udHJhY3Q7XG4gICAgaWYgKCFsb2MgJiYgIXNydikgcmV0dXJuIHR4O1xuICAgIGNvbnN0IHR5cGVzID0gW1xuICAgICAgLi4ubmV3IFNldChbXG4gICAgICAgIC4uLigoc3J2ICYmIHNydi50eXBlcykgfHwgW10pLFxuICAgICAgICAuLi4oKGxvYyAmJiBsb2MudHlwZXMpIHx8IFtdKVxuICAgICAgXSlcbiAgICBdO1xuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICAuLi4oKHNydiAmJiBzcnYubWV0YSkgfHwge30pLFxuICAgICAgLi4uKChsb2MgJiYgbG9jLm1ldGEpIHx8IHt9KVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnR4LFxuICAgICAgZmFicmljQ29udHJhY3Q6IHtcbiAgICAgICAgdHlwZXMsXG4gICAgICAgIGxhYmVsOiBzdW1tYXJpemVDb250cmFjdFR5cGVzKHR5cGVzKSxcbiAgICAgICAgbWV0YVxuICAgICAgfVxuICAgIH07XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ09OVFJBQ1RfVFlQRV9ESVNQTEFZLFxuICBzdW1tYXJpemVDb250cmFjdFR5cGVzLFxuICBhdHRhY2hGYWJyaWNDb250cmFjdEZpZWxkLFxuICBtZXJnZUxhYmVsc09udG9UcmFuc2FjdGlvbnMsXG4gIGJ1aWxkSW52b2ljZVR4TGFiZWxzLFxuICBtZXJnZUxhYmVsTWFwcyxcbiAgbWVyZ2VTZXJ2ZXJBbmRMb2NhbExhYmVsc1xufTtcbiJdLCJuYW1lcyI6WyJfc2xpY2VkVG9BcnJheSIsInIiLCJlIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsImwiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJuIiwiaSIsInUiLCJhIiwiZiIsIm8iLCJjYWxsIiwibmV4dCIsIk9iamVjdCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJsZW5ndGgiLCJBcnJheSIsImlzQXJyYXkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9uIiwiRiIsInMiLCJfdHlwZW9mIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl90b1Byb3BlcnR5S2V5IiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJDT05UUkFDVF9UWVBFX0RJU1BMQVkiLCJzdG9yYWdlX2NvbnRyYWN0IiwiZG9jdW1lbnRfcHVyY2hhc2UiLCJpbnZlbnRvcnlfaHRsYyIsImludmVudG9yeV9odGxjX2NsYWltIiwicGF5am9pbiIsInBheWpvaW5fZGVwb3NpdCIsImJyaWRnZV9wYXltZW50IiwiZmF1Y2V0X3BheW1lbnQiLCJjb250cmFjdF9wcm9wb3NhbCIsImZhYnJpY19pbnZvaWNlIiwiZGlzdHJpYnV0ZV9pbnZvaWNlIiwiZXhlY3V0aW9uX3JlZ2lzdHJ5Iiwic3VtbWFyaXplQ29udHJhY3RUeXBlcyIsInR5cGVzIiwibWFwIiwiam9pbiIsImF0dGFjaEZhYnJpY0NvbnRyYWN0RmllbGQiLCJ0eCIsImVudHJ5IiwiU2V0IiwiZmFicmljQ29udHJhY3QiLCJsYWJlbCIsIm1ldGEiLCJtZXJnZUxhYmVsc09udG9UcmFuc2FjdGlvbnMiLCJ0cmFuc2FjdGlvbnMiLCJsYWJlbE1hcCIsImlkIiwidHhpZCIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImJ1aWxkSW52b2ljZVR4TGFiZWxzIiwiaW52b2ljZXMiLCJvdXQiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImludiIsInR4aWRzIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInRpZCIsImluY2x1ZGVzIiwiaW52b2ljZUlkIiwibWVtbyIsImVyciIsIm1lcmdlTGFiZWxNYXBzIiwiYiIsImFkZCIsInNyYyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsImsiLCJ2Iiwia2V5IiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsImFzc2lnbiIsIm1lcmdlU2VydmVyQW5kTG9jYWxMYWJlbHMiLCJleHRyYUJ5VHhpZCIsImV4dHJhIiwibG9jIiwic3J2IiwiY29uY2F0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./functions/txContractLabels.js\n\n}')},"./functions/uiNotifications.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nvar Actor = __webpack_require__(/*! @fabric/core/types/actor */ \"./node_modules/@fabric/core/types/actor.js\");\nvar _require = __webpack_require__(/*! ./fabricBrowserState */ \"./functions/fabricBrowserState.js\"),\n readStorageJSON = _require.readStorageJSON,\n writeStorageJSON = _require.writeStorageJSON,\n removeStorageKey = _require.removeStorageKey;\n\n/** @typedef {{ id: string, kind?: string, title: string, subtitle?: string, href?: string, copyText?: string, ts?: number }} UiNotification */\n\nvar STORAGE_KEY = 'fabric:uiNotifications';\nvar MAX_ITEMS = 40;\nvar UPDATED_EVENT = 'fabric:uiNotificationsUpdated';\n\n/**\n * @returns {UiNotification[]}\n */\nfunction readUiNotifications() {\n try {\n if (typeof window === 'undefined') return [];\n var p = readStorageJSON(STORAGE_KEY, []);\n return Array.isArray(p) ? p : [];\n } catch (e) {\n return [];\n }\n}\n\n/**\n * @param {UiNotification[]} list\n */\nfunction writeUiNotifications(list) {\n try {\n if (typeof window === 'undefined') return;\n writeStorageJSON(STORAGE_KEY, list.slice(0, MAX_ITEMS));\n } catch (e) {/* quota */}\n}\nfunction emitUpdated(list) {\n if (typeof window === 'undefined') return;\n window.dispatchEvent(new CustomEvent(UPDATED_EVENT, {\n detail: {\n notifications: list\n }\n }));\n}\n\n/**\n * Add or replace a notification (same `id` updates in place).\n * @param {Omit & { ts?: number }} item\n */\nfunction pushUiNotification(item) {\n if (typeof window === 'undefined') return;\n var id = String(item.id || '').trim() || \"n-\".concat(new Actor({\n type: 'HubEphemeralId',\n purpose: 'uiNotification',\n nonce: Actor.randomBytes(8).toString('hex'),\n at: Date.now()\n }).id);\n var entry = {\n id: id,\n kind: item.kind || 'info',\n title: String(item.title || 'Notice'),\n subtitle: item.subtitle != null ? String(item.subtitle) : undefined,\n href: item.href != null ? String(item.href) : undefined,\n copyText: item.copyText != null ? String(item.copyText) : undefined,\n ts: item.ts != null ? Number(item.ts) : Date.now()\n };\n var prev = readUiNotifications().filter(function (n) {\n return n && n.id !== id;\n });\n var next = [entry].concat(_toConsumableArray(prev)).slice(0, MAX_ITEMS);\n writeUiNotifications(next);\n emitUpdated(next);\n}\nfunction clearUiNotifications() {\n if (typeof window === 'undefined') return;\n try {\n removeStorageKey(STORAGE_KEY);\n } catch (e) {}\n emitUpdated([]);\n}\n\n/**\n * @param {string} id\n */\nfunction removeUiNotification(id) {\n var want = String(id || '').trim();\n if (!want) return;\n var next = readUiNotifications().filter(function (n) {\n return n && n.id !== want;\n });\n writeUiNotifications(next);\n emitUpdated(next);\n}\nfunction copyToClipboard(text) {\n var t = String(text || '');\n if (!t) return Promise.resolve(false);\n if (typeof navigator !== 'undefined' && navigator.clipboard && navigator.clipboard.writeText) {\n return navigator.clipboard.writeText(t).then(function () {\n return true;\n })[\"catch\"](function () {\n return fallbackCopy(t);\n });\n }\n return Promise.resolve(fallbackCopy(t));\n}\nfunction fallbackCopy(t) {\n try {\n var ta = document.createElement('textarea');\n ta.value = t;\n ta.style.position = 'fixed';\n ta.style.opacity = '0';\n document.body.appendChild(ta);\n ta.select();\n var ok = document.execCommand('copy');\n document.body.removeChild(ta);\n return ok;\n } catch (e) {\n return false;\n }\n}\nmodule.exports = {\n STORAGE_KEY: STORAGE_KEY,\n UPDATED_EVENT: UPDATED_EVENT,\n readUiNotifications: readUiNotifications,\n pushUiNotification: pushUiNotification,\n clearUiNotifications: clearUiNotifications,\n removeUiNotification: removeUiNotification,\n copyToClipboard: copyToClipboard\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LENBQUNDLFdBQVcsQ0FBQ1IsRUFBRSxDQUFDO0lBQzdCQSxFQUFFLENBQUNTLE1BQU0sQ0FBQyxDQUFDO0lBQ1gsSUFBTUMsRUFBRSxHQUFHVCxRQUFRLENBQUNVLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDdkNWLFFBQVEsQ0FBQ00sSUFBSSxDQUFDSyxXQUFXLENBQUNaLEVBQUUsQ0FBQztJQUM3QixPQUFPVSxFQUFFO0VBQ1gsQ0FBQyxDQUFDLE9BQU9wRSxDQUFDLEVBQUU7SUFDVixPQUFPLEtBQUs7RUFDZDtBQUNGO0FBRUF1RSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmaEUsV0FBVyxFQUFYQSxXQUFXO0VBQ1hFLGFBQWEsRUFBYkEsYUFBYTtFQUNiQyxtQkFBbUIsRUFBbkJBLG1CQUFtQjtFQUNuQlUsa0JBQWtCLEVBQWxCQSxrQkFBa0I7RUFDbEJ5QixvQkFBb0IsRUFBcEJBLG9CQUFvQjtFQUNwQkMsb0JBQW9CLEVBQXBCQSxvQkFBb0I7RUFDcEJFLGVBQWUsRUFBZkE7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9mdW5jdGlvbnMvdWlOb3RpZmljYXRpb25zLmpzPzQ4YjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBBY3RvciA9IHJlcXVpcmUoJ0BmYWJyaWMvY29yZS90eXBlcy9hY3RvcicpO1xuXG5jb25zdCB7XG4gIHJlYWRTdG9yYWdlSlNPTixcbiAgd3JpdGVTdG9yYWdlSlNPTixcbiAgcmVtb3ZlU3RvcmFnZUtleVxufSA9IHJlcXVpcmUoJy4vZmFicmljQnJvd3NlclN0YXRlJyk7XG5cbi8qKiBAdHlwZWRlZiB7eyBpZDogc3RyaW5nLCBraW5kPzogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCBzdWJ0aXRsZT86IHN0cmluZywgaHJlZj86IHN0cmluZywgY29weVRleHQ/OiBzdHJpbmcsIHRzPzogbnVtYmVyIH19IFVpTm90aWZpY2F0aW9uICovXG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gJ2ZhYnJpYzp1aU5vdGlmaWNhdGlvbnMnO1xuY29uc3QgTUFYX0lURU1TID0gNDA7XG5jb25zdCBVUERBVEVEX0VWRU5UID0gJ2ZhYnJpYzp1aU5vdGlmaWNhdGlvbnNVcGRhdGVkJztcblxuLyoqXG4gKiBAcmV0dXJucyB7VWlOb3RpZmljYXRpb25bXX1cbiAqL1xuZnVuY3Rpb24gcmVhZFVpTm90aWZpY2F0aW9ucyAoKSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gW107XG4gICAgY29uc3QgcCA9IHJlYWRTdG9yYWdlSlNPTihTVE9SQUdFX0tFWSwgW10pO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHApID8gcCA6IFtdO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtVaU5vdGlmaWNhdGlvbltdfSBsaXN0XG4gKi9cbmZ1bmN0aW9uIHdyaXRlVWlOb3RpZmljYXRpb25zIChsaXN0KSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgd3JpdGVTdG9yYWdlSlNPTihTVE9SQUdFX0tFWSwgbGlzdC5zbGljZSgwLCBNQVhfSVRFTVMpKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBxdW90YSAqLyB9XG59XG5cbmZ1bmN0aW9uIGVtaXRVcGRhdGVkIChsaXN0KSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoVVBEQVRFRF9FVkVOVCwgeyBkZXRhaWw6IHsgbm90aWZpY2F0aW9uczogbGlzdCB9IH0pKTtcbn1cblxuLyoqXG4gKiBBZGQgb3IgcmVwbGFjZSBhIG5vdGlmaWNhdGlvbiAoc2FtZSBgaWRgIHVwZGF0ZXMgaW4gcGxhY2UpLlxuICogQHBhcmFtIHtPbWl0PFVpTm90aWZpY2F0aW9uLCAndHMnPiAmIHsgdHM/OiBudW1iZXIgfX0gaXRlbVxuICovXG5mdW5jdGlvbiBwdXNoVWlOb3RpZmljYXRpb24gKGl0ZW0pIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gIGNvbnN0IGlkID0gU3RyaW5nKGl0ZW0uaWQgfHwgJycpLnRyaW0oKSB8fCBgbi0ke25ldyBBY3Rvcih7XG4gICAgdHlwZTogJ0h1YkVwaGVtZXJhbElkJyxcbiAgICBwdXJwb3NlOiAndWlOb3RpZmljYXRpb24nLFxuICAgIG5vbmNlOiBBY3Rvci5yYW5kb21CeXRlcyg4KS50b1N0cmluZygnaGV4JyksXG4gICAgYXQ6IERhdGUubm93KClcbiAgfSkuaWR9YDtcbiAgY29uc3QgZW50cnkgPSB7XG4gICAgaWQsXG4gICAga2luZDogaXRlbS5raW5kIHx8ICdpbmZvJyxcbiAgICB0aXRsZTogU3RyaW5nKGl0ZW0udGl0bGUgfHwgJ05vdGljZScpLFxuICAgIHN1YnRpdGxlOiBpdGVtLnN1YnRpdGxlICE9IG51bGwgPyBTdHJpbmcoaXRlbS5zdWJ0aXRsZSkgOiB1bmRlZmluZWQsXG4gICAgaHJlZjogaXRlbS5ocmVmICE9IG51bGwgPyBTdHJpbmcoaXRlbS5ocmVmKSA6IHVuZGVmaW5lZCxcbiAgICBjb3B5VGV4dDogaXRlbS5jb3B5VGV4dCAhPSBudWxsID8gU3RyaW5nKGl0ZW0uY29weVRleHQpIDogdW5kZWZpbmVkLFxuICAgIHRzOiBpdGVtLnRzICE9IG51bGwgPyBOdW1iZXIoaXRlbS50cykgOiBEYXRlLm5vdygpXG4gIH07XG4gIGNvbnN0IHByZXYgPSByZWFkVWlOb3RpZmljYXRpb25zKCkuZmlsdGVyKChuKSA9PiBuICYmIG4uaWQgIT09IGlkKTtcbiAgY29uc3QgbmV4dCA9IFtlbnRyeSwgLi4ucHJldl0uc2xpY2UoMCwgTUFYX0lURU1TKTtcbiAgd3JpdGVVaU5vdGlmaWNhdGlvbnMobmV4dCk7XG4gIGVtaXRVcGRhdGVkKG5leHQpO1xufVxuXG5mdW5jdGlvbiBjbGVhclVpTm90aWZpY2F0aW9ucyAoKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICB0cnkge1xuICAgIHJlbW92ZVN0b3JhZ2VLZXkoU1RPUkFHRV9LRVkpO1xuICB9IGNhdGNoIChlKSB7fVxuICBlbWl0VXBkYXRlZChbXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZVVpTm90aWZpY2F0aW9uIChpZCkge1xuICBjb25zdCB3YW50ID0gU3RyaW5nKGlkIHx8ICcnKS50cmltKCk7XG4gIGlmICghd2FudCkgcmV0dXJuO1xuICBjb25zdCBuZXh0ID0gcmVhZFVpTm90aWZpY2F0aW9ucygpLmZpbHRlcigobikgPT4gbiAmJiBuLmlkICE9PSB3YW50KTtcbiAgd3JpdGVVaU5vdGlmaWNhdGlvbnMobmV4dCk7XG4gIGVtaXRVcGRhdGVkKG5leHQpO1xufVxuXG5mdW5jdGlvbiBjb3B5VG9DbGlwYm9hcmQgKHRleHQpIHtcbiAgY29uc3QgdCA9IFN0cmluZyh0ZXh0IHx8ICcnKTtcbiAgaWYgKCF0KSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodCkudGhlbigoKSA9PiB0cnVlKS5jYXRjaCgoKSA9PiBmYWxsYmFja0NvcHkodCkpO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsbGJhY2tDb3B5KHQpKTtcbn1cblxuZnVuY3Rpb24gZmFsbGJhY2tDb3B5ICh0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIHRhLnZhbHVlID0gdDtcbiAgICB0YS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgdGEuc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRhKTtcbiAgICB0YS5zZWxlY3QoKTtcbiAgICBjb25zdCBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0YSk7XG4gICAgcmV0dXJuIG9rO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBTVE9SQUdFX0tFWSxcbiAgVVBEQVRFRF9FVkVOVCxcbiAgcmVhZFVpTm90aWZpY2F0aW9ucyxcbiAgcHVzaFVpTm90aWZpY2F0aW9uLFxuICBjbGVhclVpTm90aWZpY2F0aW9ucyxcbiAgcmVtb3ZlVWlOb3RpZmljYXRpb24sXG4gIGNvcHlUb0NsaXBib2FyZFxufTtcbiJdLCJuYW1lcyI6WyJfdG9Db25zdW1hYmxlQXJyYXkiLCJyIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIlR5cGVFcnJvciIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInQiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJTeW1ib2wiLCJpdGVyYXRvciIsImlzQXJyYXkiLCJsZW5ndGgiLCJlIiwibiIsIkFjdG9yIiwicmVxdWlyZSIsIl9yZXF1aXJlIiwicmVhZFN0b3JhZ2VKU09OIiwid3JpdGVTdG9yYWdlSlNPTiIsInJlbW92ZVN0b3JhZ2VLZXkiLCJTVE9SQUdFX0tFWSIsIk1BWF9JVEVNUyIsIlVQREFURURfRVZFTlQiLCJyZWFkVWlOb3RpZmljYXRpb25zIiwid2luZG93IiwicCIsIndyaXRlVWlOb3RpZmljYXRpb25zIiwibGlzdCIsImVtaXRVcGRhdGVkIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwibm90aWZpY2F0aW9ucyIsInB1c2hVaU5vdGlmaWNhdGlvbiIsIml0ZW0iLCJpZCIsIlN0cmluZyIsInRyaW0iLCJjb25jYXQiLCJ0eXBlIiwicHVycG9zZSIsIm5vbmNlIiwicmFuZG9tQnl0ZXMiLCJhdCIsIkRhdGUiLCJub3ciLCJlbnRyeSIsImtpbmQiLCJ0aXRsZSIsInN1YnRpdGxlIiwidW5kZWZpbmVkIiwiaHJlZiIsImNvcHlUZXh0IiwidHMiLCJOdW1iZXIiLCJwcmV2IiwiZmlsdGVyIiwibmV4dCIsImNsZWFyVWlOb3RpZmljYXRpb25zIiwicmVtb3ZlVWlOb3RpZmljYXRpb24iLCJ3YW50IiwiY29weVRvQ2xpcGJvYXJkIiwidGV4dCIsIlByb21pc2UiLCJyZXNvbHZlIiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0IiwidGhlbiIsImZhbGxiYWNrQ29weSIsInRhIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidmFsdWUiLCJzdHlsZSIsInBvc2l0aW9uIiwib3BhY2l0eSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsInNlbGVjdCIsIm9rIiwiZXhlY0NvbW1hbmQiLCJyZW1vdmVDaGlsZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./functions/uiNotifications.js\n\n}")},"./locales/en/index.js"(module){"use strict";eval("{\n\nmodule.exports = {\n BRAND_NAME: 'hub.fabric.pub',\n BRAND_TAGLINE: 'self-hosted bitcoin infrastructure',\n PITCH_CTA_TEXT: 'Get Started',\n PITCH_CTA_LINK: '/settings'\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9sb2NhbGVzL2VuL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViQSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNmQyxVQUFVLEVBQUUsZ0JBQWdCO0VBQzVCQyxhQUFhLEVBQUUsb0NBQW9DO0VBQ25EQyxjQUFjLEVBQUUsYUFBYTtFQUM3QkMsY0FBYyxFQUFFO0FBQ2xCLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL2xvY2FsZXMvZW4vaW5kZXguanM/YWE4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCUkFORF9OQU1FOiAnaHViLmZhYnJpYy5wdWInLFxuICBCUkFORF9UQUdMSU5FOiAnc2VsZi1ob3N0ZWQgYml0Y29pbiBpbmZyYXN0cnVjdHVyZScsXG4gIFBJVENIX0NUQV9URVhUOiAnR2V0IFN0YXJ0ZWQnLFxuICBQSVRDSF9DVEFfTElOSzogJy9zZXR0aW5ncydcbn07XG4iXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIkJSQU5EX05BTUUiLCJCUkFORF9UQUdMSU5FIiwiUElUQ0hfQ1RBX1RFWFQiLCJQSVRDSF9DVEFfTElOSyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./locales/en/index.js\n\n}")},"./reducers/bridgeReducer.js"(module,__unused_webpack_exports,__webpack_require__){eval('{function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nvar _require = __webpack_require__(/*! ../actions/bridgeActions */ "./actions/bridgeActions.js"),\n BRIDGE_SYNC_REQUEST = _require.BRIDGE_SYNC_REQUEST,\n BRIDGE_SYNC_SUCCESS = _require.BRIDGE_SYNC_SUCCESS,\n BRIDGE_SYNC_FAILURE = _require.BRIDGE_SYNC_FAILURE,\n BRIDGE_NETWORK_STATUS_UPDATE = _require.BRIDGE_NETWORK_STATUS_UPDATE;\nvar initialState = {\n status: \'INITIALIZED\',\n current: {},\n loading: false,\n error: null\n};\nfunction bridgeReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n switch (action.type) {\n case BRIDGE_SYNC_REQUEST:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: true,\n error: null\n });\n case BRIDGE_SYNC_SUCCESS:\n // Never clobber existing state like `networkStatus` during sync.\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: false,\n current: _objectSpread(_objectSpread({}, state.current), action.payload)\n });\n case BRIDGE_SYNC_FAILURE:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: false,\n error: action.payload\n });\n case BRIDGE_NETWORK_STATUS_UPDATE:\n // Ignore non-network payloads (e.g. `{ status: "success" }`) to prevent UI flicker.\n if (!action.payload || _typeof(action.payload) !== \'object\') return state;\n if (!action.payload.network && !Array.isArray(action.payload.peers)) return state;\n return _objectSpread(_objectSpread({}, state), {}, {\n current: _objectSpread(_objectSpread({}, state.current), {}, {\n networkStatus: action.payload,\n lastNetworkStatus: action.payload\n })\n });\n default:\n // console.warn(\'Unhandled action in bridge reducer:\', action);\n return state;\n }\n}\nmodule.exports = bridgeReducer;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZWR1Y2Vycy9icmlkZ2VSZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FLSUMsbUJBQU8sQ0FBQyw0REFBMEIsQ0FBQztFQUpyQ0MsbUJBQW1CLEdBQUFGLFFBQUEsQ0FBbkJFLG1CQUFtQjtFQUNuQkMsbUJBQW1CLEdBQUFILFFBQUEsQ0FBbkJHLG1CQUFtQjtFQUNuQkMsbUJBQW1CLEdBQUFKLFFBQUEsQ0FBbkJJLG1CQUFtQjtFQUNuQkMsNEJBQTRCLEdBQUFMLFFBQUEsQ0FBNUJLLDRCQUE0QjtBQUc5QixJQUFNQyxZQUFZLEdBQUc7RUFDbkJDLE1BQU0sRUFBRSxhQUFhO0VBQ3JCQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0VBQ1hDLE9BQU8sRUFBRSxLQUFLO0VBQ2RDLEtBQUssRUFBRTtBQUNULENBQUM7QUFFRCxTQUFTQyxhQUFhQSxDQUFBLEVBQWdDO0VBQUEsSUFBOUJDLEtBQUssR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUdQLFlBQVk7RUFBQSxJQUFFVSxNQUFNLEdBQUFILFNBQUEsQ0FBQUMsTUFBQSxPQUFBRCxTQUFBLE1BQUFFLFNBQUE7RUFDbEQsUUFBUUMsTUFBTSxDQUFDQyxJQUFJO0lBQ2pCLEtBQUtmLG1CQUFtQjtNQUN0QixPQUFBZ0IsYUFBQSxDQUFBQSxhQUFBLEtBQVlOLEtBQUs7UUFBRUgsT0FBTyxFQUFFLElBQUk7UUFBRUMsS0FBSyxFQUFFO01BQUk7SUFDL0MsS0FBS1AsbUJBQW1CO01BQ3RCO01BQ0EsT0FBQWUsYUFBQSxDQUFBQSxhQUFBLEtBQVlOLEtBQUs7UUFBRUgsT0FBTyxFQUFFLEtBQUs7UUFBRUQsT0FBTyxFQUFBVSxhQUFBLENBQUFBLGFBQUEsS0FBT04sS0FBSyxDQUFDSixPQUFPLEdBQUtRLE1BQU0sQ0FBQ0csT0FBTztNQUFFO0lBQ3JGLEtBQUtmLG1CQUFtQjtNQUN0QixPQUFBYyxhQUFBLENBQUFBLGFBQUEsS0FBWU4sS0FBSztRQUFFSCxPQUFPLEVBQUUsS0FBSztRQUFFQyxLQUFLLEVBQUVNLE1BQU0sQ0FBQ0c7TUFBTztJQUMxRCxLQUFLZCw0QkFBNEI7TUFDL0I7TUFDQSxJQUFJLENBQUNXLE1BQU0sQ0FBQ0csT0FBTyxJQUFJQyxPQUFBLENBQU9KLE1BQU0sQ0FBQ0csT0FBTyxNQUFLLFFBQVEsRUFBRSxPQUFPUCxLQUFLO01BQ3ZFLElBQUksQ0FBQ0ksTUFBTSxDQUFDRyxPQUFPLENBQUNFLE9BQU8sSUFBSSxDQUFDQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ1AsTUFBTSxDQUFDRyxPQUFPLENBQUNLLEtBQUssQ0FBQyxFQUFFLE9BQU9aLEtBQUs7TUFDakYsT0FBQU0sYUFBQSxDQUFBQSxhQUFBLEtBQ0tOLEtBQUs7UUFDUkosT0FBTyxFQUFBVSxhQUFBLENBQUFBLGFBQUEsS0FDRk4sS0FBSyxDQUFDSixPQUFPO1VBQ2hCaUIsYUFBYSxFQUFFVCxNQUFNLENBQUNHLE9BQU87VUFDN0JPLGlCQUFpQixFQUFFVixNQUFNLENBQUNHO1FBQU87TUFDbEM7SUFFTDtNQUNFO01BQ0EsT0FBT1AsS0FBSztFQUNoQjtBQUNGO0FBRUFlLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHakIsYUFBYSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vcmVkdWNlcnMvYnJpZGdlUmVkdWNlci5qcz8yZWE3Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHtcbiAgQlJJREdFX1NZTkNfUkVRVUVTVCxcbiAgQlJJREdFX1NZTkNfU1VDQ0VTUyxcbiAgQlJJREdFX1NZTkNfRkFJTFVSRSxcbiAgQlJJREdFX05FVFdPUktfU1RBVFVTX1VQREFURVxufSA9IHJlcXVpcmUoJy4uL2FjdGlvbnMvYnJpZGdlQWN0aW9ucycpO1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gIHN0YXR1czogJ0lOSVRJQUxJWkVEJyxcbiAgY3VycmVudDoge30sXG4gIGxvYWRpbmc6IGZhbHNlLFxuICBlcnJvcjogbnVsbFxufTtcblxuZnVuY3Rpb24gYnJpZGdlUmVkdWNlciAoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBCUklER0VfU1lOQ19SRVFVRVNUOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGxvYWRpbmc6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgY2FzZSBCUklER0VfU1lOQ19TVUNDRVNTOlxuICAgICAgLy8gTmV2ZXIgY2xvYmJlciBleGlzdGluZyBzdGF0ZSBsaWtlIGBuZXR3b3JrU3RhdHVzYCBkdXJpbmcgc3luYy5cbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBsb2FkaW5nOiBmYWxzZSwgY3VycmVudDogeyAuLi5zdGF0ZS5jdXJyZW50LCAuLi5hY3Rpb24ucGF5bG9hZCB9IH07XG4gICAgY2FzZSBCUklER0VfU1lOQ19GQUlMVVJFOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGxvYWRpbmc6IGZhbHNlLCBlcnJvcjogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlIEJSSURHRV9ORVRXT1JLX1NUQVRVU19VUERBVEU6XG4gICAgICAvLyBJZ25vcmUgbm9uLW5ldHdvcmsgcGF5bG9hZHMgKGUuZy4gYHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiB9YCkgdG8gcHJldmVudCBVSSBmbGlja2VyLlxuICAgICAgaWYgKCFhY3Rpb24ucGF5bG9hZCB8fCB0eXBlb2YgYWN0aW9uLnBheWxvYWQgIT09ICdvYmplY3QnKSByZXR1cm4gc3RhdGU7XG4gICAgICBpZiAoIWFjdGlvbi5wYXlsb2FkLm5ldHdvcmsgJiYgIUFycmF5LmlzQXJyYXkoYWN0aW9uLnBheWxvYWQucGVlcnMpKSByZXR1cm4gc3RhdGU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgY3VycmVudDoge1xuICAgICAgICAgIC4uLnN0YXRlLmN1cnJlbnQsXG4gICAgICAgICAgbmV0d29ya1N0YXR1czogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgbGFzdE5ldHdvcmtTdGF0dXM6IGFjdGlvbi5wYXlsb2FkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGNvbnNvbGUud2FybignVW5oYW5kbGVkIGFjdGlvbiBpbiBicmlkZ2UgcmVkdWNlcjonLCBhY3Rpb24pO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnJpZGdlUmVkdWNlcjtcbiJdLCJuYW1lcyI6WyJfcmVxdWlyZSIsInJlcXVpcmUiLCJCUklER0VfU1lOQ19SRVFVRVNUIiwiQlJJREdFX1NZTkNfU1VDQ0VTUyIsIkJSSURHRV9TWU5DX0ZBSUxVUkUiLCJCUklER0VfTkVUV09SS19TVEFUVVNfVVBEQVRFIiwiaW5pdGlhbFN0YXRlIiwic3RhdHVzIiwiY3VycmVudCIsImxvYWRpbmciLCJlcnJvciIsImJyaWRnZVJlZHVjZXIiLCJzdGF0ZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImFjdGlvbiIsInR5cGUiLCJfb2JqZWN0U3ByZWFkIiwicGF5bG9hZCIsIl90eXBlb2YiLCJuZXR3b3JrIiwiQXJyYXkiLCJpc0FycmF5IiwicGVlcnMiLCJuZXR3b3JrU3RhdHVzIiwibGFzdE5ldHdvcmtTdGF0dXMiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./reducers/bridgeReducer.js\n\n}')},"./reducers/contractReducer.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n// Actions\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nvar _require = __webpack_require__(/*! ../actions/contractActions */ "./actions/contractActions.js"),\n FETCH_CONTRACT_REQUEST = _require.FETCH_CONTRACT_REQUEST,\n FETCH_CONTRACT_SUCCESS = _require.FETCH_CONTRACT_SUCCESS,\n FETCH_CONTRACT_FAILURE = _require.FETCH_CONTRACT_FAILURE,\n SIGN_CONTRACT_REQUEST = _require.SIGN_CONTRACT_REQUEST,\n SIGN_CONTRACT_SUCCESS = _require.SIGN_CONTRACT_SUCCESS,\n SIGN_CONTRACT_FAILURE = _require.SIGN_CONTRACT_FAILURE,\n GET_CONTRACTS_REQUEST = _require.GET_CONTRACTS_REQUEST,\n GET_CONTRACTS_SUCCESS = _require.GET_CONTRACTS_SUCCESS,\n GET_CONTRACTS_FAILURE = _require.GET_CONTRACTS_FAILURE;\n\n// State\nvar initialState = {\n error: null,\n contract: {},\n contracts: {},\n isCompliant: false\n};\n\n// Reducer\nfunction contractReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n switch (action.type) {\n case FETCH_CONTRACT_REQUEST:\n return _objectSpread(_objectSpread({}, state), {}, {\n contract: action.payload\n });\n case FETCH_CONTRACT_SUCCESS:\n return _objectSpread(_objectSpread({}, state), {}, {\n contract: action.payload\n });\n case FETCH_CONTRACT_FAILURE:\n return _objectSpread(_objectSpread({}, state), {}, {\n error: action.payload\n });\n case GET_CONTRACTS_SUCCESS:\n return _objectSpread(_objectSpread({}, state), {}, {\n messages: action.payload.messages,\n isSending: false,\n loading: false\n });\n case SIGN_CONTRACT_SUCCESS:\n return _objectSpread(_objectSpread({}, state), {}, {\n contract: action.payload,\n isCompliant: true\n });\n default:\n return state;\n }\n}\nmodule.exports = contractReducer;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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c0I7TUFDekIsT0FBQXZCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLb0MsS0FBSztRQUNSTCxLQUFLLEVBQUVPLE1BQU0sQ0FBQ0U7TUFBTztJQUV6QixLQUFLWixxQkFBcUI7TUFDeEIsT0FBQTVCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLb0MsS0FBSztRQUNSSyxRQUFRLEVBQUVILE1BQU0sQ0FBQ0UsT0FBTyxDQUFDQyxRQUFRO1FBQ2pDQyxTQUFTLEVBQUUsS0FBSztRQUNoQkMsT0FBTyxFQUFFO01BQUs7SUFFbEIsS0FBS2xCLHFCQUFxQjtNQUN4QixPQUFBekIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tvQyxLQUFLO1FBQ1JKLFFBQVEsRUFBRU0sTUFBTSxDQUFDRSxPQUFPO1FBQ3hCTixXQUFXLEVBQUU7TUFBSTtJQUVyQjtNQUNFLE9BQU9FLEtBQUs7RUFDaEI7QUFDRjtBQUVBUSxNQUFNLENBQUNDLE9BQU8sR0FBR1YsZUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vcmVkdWNlcnMvY29udHJhY3RSZWR1Y2VyLmpzPzkzYTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBBY3Rpb25zXG5jb25zdCB7XG4gIEZFVENIX0NPTlRSQUNUX1JFUVVFU1QsXG4gIEZFVENIX0NPTlRSQUNUX1NVQ0NFU1MsXG4gIEZFVENIX0NPTlRSQUNUX0ZBSUxVUkUsXG4gIFNJR05fQ09OVFJBQ1RfUkVRVUVTVCxcbiAgU0lHTl9DT05UUkFDVF9TVUNDRVNTLFxuICBTSUdOX0NPTlRSQUNUX0ZBSUxVUkUsXG4gIEdFVF9DT05UUkFDVFNfUkVRVUVTVCxcbiAgR0VUX0NPTlRSQUNUU19TVUNDRVNTLFxuICBHRVRfQ09OVFJBQ1RTX0ZBSUxVUkVcbn0gPSByZXF1aXJlKCcuLi9hY3Rpb25zL2NvbnRyYWN0QWN0aW9ucycpO1xuXG4vLyBTdGF0ZVxuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBlcnJvcjogbnVsbCxcbiAgY29udHJhY3Q6IHt9LFxuICBjb250cmFjdHM6IHt9LFxuICBpc0NvbXBsaWFudDogZmFsc2Vcbn07XG5cbi8vIFJlZHVjZXJcbmZ1bmN0aW9uIGNvbnRyYWN0UmVkdWNlciAoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBGRVRDSF9DT05UUkFDVF9SRVFVRVNUOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGNvbnRyYWN0OiBhY3Rpb24ucGF5bG9hZFxuICAgICAgfTtcbiAgICBjYXNlIEZFVENIX0NPTlRSQUNUX1NVQ0NFU1M6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgY29udHJhY3Q6IGFjdGlvbi5wYXlsb2FkXG4gICAgICB9O1xuICAgIGNhc2UgRkVUQ0hfQ09OVFJBQ1RfRkFJTFVSRTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlcnJvcjogYWN0aW9uLnBheWxvYWRcbiAgICAgIH07XG4gICAgY2FzZSBHRVRfQ09OVFJBQ1RTX1NVQ0NFU1M6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbWVzc2FnZXM6IGFjdGlvbi5wYXlsb2FkLm1lc3NhZ2VzLFxuICAgICAgICBpc1NlbmRpbmc6IGZhbHNlLFxuICAgICAgICBsb2FkaW5nOiBmYWxzZVxuICAgICAgfTtcbiAgICBjYXNlIFNJR05fQ09OVFJBQ1RfU1VDQ0VTUzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjb250cmFjdDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIGlzQ29tcGxpYW50OiB0cnVlXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb250cmFjdFJlZHVjZXI7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9yZXF1aXJlIiwicmVxdWlyZSIsIkZFVENIX0NPTlRSQUNUX1JFUVVFU1QiLCJGRVRDSF9DT05UUkFDVF9TVUNDRVNTIiwiRkVUQ0hfQ09OVFJBQ1RfRkFJTFVSRSIsIlNJR05fQ09OVFJBQ1RfUkVRVUVTVCIsIlNJR05fQ09OVFJBQ1RfU1VDQ0VTUyIsIlNJR05fQ09OVFJBQ1RfRkFJTFVSRSIsIkdFVF9DT05UUkFDVFNfUkVRVUVTVCIsIkdFVF9DT05UUkFDVFNfU1VDQ0VTUyIsIkdFVF9DT05UUkFDVFNfRkFJTFVSRSIsImluaXRpYWxTdGF0ZSIsImVycm9yIiwiY29udHJhY3QiLCJjb250cmFjdHMiLCJpc0NvbXBsaWFudCIsImNvbnRyYWN0UmVkdWNlciIsInN0YXRlIiwidW5kZWZpbmVkIiwiYWN0aW9uIiwidHlwZSIsInBheWxvYWQiLCJtZXNzYWdlcyIsImlzU2VuZGluZyIsImxvYWRpbmciLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./reducers/contractReducer.js\n\n}')},"./reducers/documentReducer.js"(module,__unused_webpack_exports,__webpack_require__){eval('{function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nvar _require = __webpack_require__(/*! ../actions/documentActions */ "./actions/documentActions.js"),\n FETCH_DOCUMENT_REQUEST = _require.FETCH_DOCUMENT_REQUEST,\n FETCH_DOCUMENT_SUCCESS = _require.FETCH_DOCUMENT_SUCCESS,\n FETCH_DOCUMENT_FAILURE = _require.FETCH_DOCUMENT_FAILURE,\n FETCH_DOCUMENTS_REQUEST = _require.FETCH_DOCUMENTS_REQUEST,\n FETCH_DOCUMENTS_SUCCESS = _require.FETCH_DOCUMENTS_SUCCESS,\n FETCH_DOCUMENTS_FAILURE = _require.FETCH_DOCUMENTS_FAILURE,\n UPLOAD_DOCUMENT_REQUEST = _require.UPLOAD_DOCUMENT_REQUEST,\n UPLOAD_DOCUMENT_SUCCESS = _require.UPLOAD_DOCUMENT_SUCCESS,\n UPLOAD_DOCUMENT_FAILURE = _require.UPLOAD_DOCUMENT_FAILURE,\n SEARCH_DOCUMENT_REQUEST = _require.SEARCH_DOCUMENT_REQUEST,\n SEARCH_DOCUMENT_SUCCESS = _require.SEARCH_DOCUMENT_SUCCESS,\n SEARCH_DOCUMENT_FAILURE = _require.SEARCH_DOCUMENT_FAILURE,\n CREATE_DOCUMENT_REQUEST = _require.CREATE_DOCUMENT_REQUEST,\n CREATE_DOCUMENT_SUCCESS = _require.CREATE_DOCUMENT_SUCCESS,\n CREATE_DOCUMENT_FAILURE = _require.CREATE_DOCUMENT_FAILURE,\n EDIT_DOCUMENT_REQUEST = _require.EDIT_DOCUMENT_REQUEST,\n EDIT_DOCUMENT_SUCCESS = _require.EDIT_DOCUMENT_SUCCESS,\n EDIT_DOCUMENT_FAILURE = _require.EDIT_DOCUMENT_FAILURE,\n DELETE_DOCUMENT_REQUEST = _require.DELETE_DOCUMENT_REQUEST,\n DELETE_DOCUMENT_SUCCESS = _require.DELETE_DOCUMENT_SUCCESS,\n DELETE_DOCUMENT_FAILURE = _require.DELETE_DOCUMENT_FAILURE;\nvar initialState = {\n document: {},\n documents: [],\n loading: false,\n editing: false,\n error: null,\n fileUploaded: false,\n // fabric_id: null, //this is the id inserted in table \'files\' in the db after creating the file\n results: [],\n creationSuccess: false,\n editionSuccess: false,\n deleteSuccess: false\n};\nfunction documentReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n switch (action.type) {\n case FETCH_DOCUMENT_REQUEST:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: true,\n error: null\n });\n case FETCH_DOCUMENT_SUCCESS:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: false,\n document: action.payload\n });\n case FETCH_DOCUMENT_FAILURE:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: false,\n error: action.payload\n });\n case FETCH_DOCUMENTS_REQUEST:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: true,\n error: null\n });\n case FETCH_DOCUMENTS_SUCCESS:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: false,\n documents: action.payload\n });\n case FETCH_DOCUMENTS_FAILURE:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: false,\n error: action.payload\n });\n case UPLOAD_DOCUMENT_REQUEST:\n return _objectSpread(_objectSpread({}, state), {}, _defineProperty({\n loading: true,\n error: null,\n fileUploaded: false,\n fabric_id: null\n }, "error", null));\n case UPLOAD_DOCUMENT_SUCCESS:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: false,\n fileUploaded: true,\n fabric_id: action.payload,\n error: null\n });\n case UPLOAD_DOCUMENT_FAILURE:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: false,\n error: action.payload,\n fileUploaded: false,\n fabric_id: null\n });\n case SEARCH_DOCUMENT_REQUEST:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: true,\n error: null,\n results: []\n });\n case SEARCH_DOCUMENT_SUCCESS:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: false,\n results: action.payload,\n error: null\n });\n case SEARCH_DOCUMENT_FAILURE:\n return _objectSpread(_objectSpread({}, state), {}, {\n loading: false,\n error: action.payload,\n results: []\n });\n case CREATE_DOCUMENT_REQUEST:\n return _objectSpread(_objectSpread({}, state), {}, {\n creating: true,\n error: null,\n document: {},\n creationSuccess: false\n });\n case CREATE_DOCUMENT_SUCCESS:\n console.log(action.payload);\n return _objectSpread(_objectSpread({}, state), {}, {\n creating: false,\n document: action.payload,\n error: null,\n creationSuccess: true\n });\n case CREATE_DOCUMENT_FAILURE:\n return _objectSpread(_objectSpread({}, state), {}, {\n creating: false,\n error: action.payload,\n document: {},\n creationSuccess: false\n });\n case EDIT_DOCUMENT_REQUEST:\n return _objectSpread(_objectSpread({}, state), {}, {\n editing: true,\n error: null,\n editionSuccess: false\n });\n case EDIT_DOCUMENT_SUCCESS:\n console.log(action.payload);\n return _objectSpread(_objectSpread({}, state), {}, {\n editing: false,\n error: null,\n document: action.payload,\n editionSuccess: true\n });\n case EDIT_DOCUMENT_FAILURE:\n return _objectSpread(_objectSpread({}, state), {}, {\n editing: false,\n error: action.payload,\n editionSuccess: false\n });\n case DELETE_DOCUMENT_REQUEST:\n return _objectSpread(_objectSpread({}, state), {}, {\n editing: true,\n error: null,\n deleteSuccess: false\n });\n case DELETE_DOCUMENT_SUCCESS:\n console.log(action.payload);\n return _objectSpread(_objectSpread({}, state), {}, {\n editing: false,\n error: null,\n deleteSuccess: true\n });\n case DELETE_DOCUMENT_FAILURE:\n return _objectSpread(_objectSpread({}, state), {}, {\n editing: false,\n error: action.payload,\n deleteSuccess: false\n });\n default:\n // console.warn(\'Unhandled action in documents reducer:\', action);\n return state;\n }\n}\nmodule.exports = documentReducer;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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T0FBTyxDQUFDQyxHQUFHLENBQUNSLE1BQU0sQ0FBQ0csT0FBTyxDQUFDO01BQzNCLE9BQUFELGFBQUEsQ0FBQUEsYUFBQSxLQUFZTixLQUFLO1FBQUVSLE9BQU8sRUFBRSxLQUFLO1FBQUVDLEtBQUssRUFBRSxJQUFJO1FBQUVKLFFBQVEsRUFBRWUsTUFBTSxDQUFDRyxPQUFPO1FBQUVWLGNBQWMsRUFBRTtNQUFJO0lBQ2hHLEtBQUtiLHFCQUFxQjtNQUN4QixPQUFBc0IsYUFBQSxDQUFBQSxhQUFBLEtBQVlOLEtBQUs7UUFBRVIsT0FBTyxFQUFFLEtBQUs7UUFBRUMsS0FBSyxFQUFFVyxNQUFNLENBQUNHLE9BQU87UUFBRVYsY0FBYyxFQUFFO01BQUs7SUFFakYsS0FBS1osdUJBQXVCO01BQzFCLE9BQUFxQixhQUFBLENBQUFBLGFBQUEsS0FBWU4sS0FBSztRQUFFUixPQUFPLEVBQUUsSUFBSTtRQUFFQyxLQUFLLEVBQUUsSUFBSTtRQUFFSyxhQUFhLEVBQUU7TUFBSztJQUNyRSxLQUFLWix1QkFBdUI7TUFDMUJ5QixPQUFPLENBQUNDLEdBQUcsQ0FBQ1IsTUFBTSxDQUFDRyxPQUFPLENBQUM7TUFDM0IsT0FBQUQsYUFBQSxDQUFBQSxhQUFBLEtBQVlOLEtBQUs7UUFBRVIsT0FBTyxFQUFFLEtBQUs7UUFBRUMsS0FBSyxFQUFFLElBQUk7UUFBRUssYUFBYSxFQUFFO01BQUk7SUFDckUsS0FBS1gsdUJBQXVCO01BQzFCLE9BQUFtQixhQUFBLENBQUFBLGFBQUEsS0FBWU4sS0FBSztRQUFFUixPQUFPLEVBQUUsS0FBSztRQUFFQyxLQUFLLEVBQUVXLE1BQU0sQ0FBQ0csT0FBTztRQUFFVCxhQUFhLEVBQUU7TUFBSztJQUVoRjtNQUNFO01BQ0EsT0FBT0UsS0FBSztFQUNoQjtBQUNGO0FBRUFhLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHZixlQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9yZWR1Y2Vycy9kb2N1bWVudFJlZHVjZXIuanM/MGRmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7XG4gIEZFVENIX0RPQ1VNRU5UX1JFUVVFU1QsXG4gIEZFVENIX0RPQ1VNRU5UX1NVQ0NFU1MsXG4gIEZFVENIX0RPQ1VNRU5UX0ZBSUxVUkUsXG4gIEZFVENIX0RPQ1VNRU5UU19SRVFVRVNULFxuICBGRVRDSF9ET0NVTUVOVFNfU1VDQ0VTUyxcbiAgRkVUQ0hfRE9DVU1FTlRTX0ZBSUxVUkUsXG4gIFVQTE9BRF9ET0NVTUVOVF9SRVFVRVNULFxuICBVUExPQURfRE9DVU1FTlRfU1VDQ0VTUyxcbiAgVVBMT0FEX0RPQ1VNRU5UX0ZBSUxVUkUsXG4gIFNFQVJDSF9ET0NVTUVOVF9SRVFVRVNULFxuICBTRUFSQ0hfRE9DVU1FTlRfU1VDQ0VTUyxcbiAgU0VBUkNIX0RPQ1VNRU5UX0ZBSUxVUkUsXG4gIENSRUFURV9ET0NVTUVOVF9SRVFVRVNULFxuICBDUkVBVEVfRE9DVU1FTlRfU1VDQ0VTUyxcbiAgQ1JFQVRFX0RPQ1VNRU5UX0ZBSUxVUkUsXG4gIEVESVRfRE9DVU1FTlRfUkVRVUVTVCxcbiAgRURJVF9ET0NVTUVOVF9TVUNDRVNTLFxuICBFRElUX0RPQ1VNRU5UX0ZBSUxVUkUsXG4gIERFTEVURV9ET0NVTUVOVF9SRVFVRVNULFxuICBERUxFVEVfRE9DVU1FTlRfU1VDQ0VTUyxcbiAgREVMRVRFX0RPQ1VNRU5UX0ZBSUxVUkUsXG59ID0gcmVxdWlyZSgnLi4vYWN0aW9ucy9kb2N1bWVudEFjdGlvbnMnKTtcblxuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICBkb2N1bWVudDoge30sXG4gIGRvY3VtZW50czogW10sXG4gIGxvYWRpbmc6IGZhbHNlLFxuICBlZGl0aW5nOiBmYWxzZSxcbiAgZXJyb3I6IG51bGwsXG4gIGZpbGVVcGxvYWRlZDogZmFsc2UsXG4gIC8vIGZhYnJpY19pZDogbnVsbCwgLy90aGlzIGlzIHRoZSBpZCBpbnNlcnRlZCBpbiB0YWJsZSAnZmlsZXMnIGluIHRoZSBkYiBhZnRlciBjcmVhdGluZyB0aGUgZmlsZVxuICByZXN1bHRzOiBbXSxcbiAgY3JlYXRpb25TdWNjZXNzOiBmYWxzZSxcbiAgZWRpdGlvblN1Y2Nlc3M6IGZhbHNlLFxuICBkZWxldGVTdWNjZXNzOiBmYWxzZSxcbn07XG5cbmZ1bmN0aW9uIGRvY3VtZW50UmVkdWNlciAoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBGRVRDSF9ET0NVTUVOVF9SRVFVRVNUOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGxvYWRpbmc6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgY2FzZSBGRVRDSF9ET0NVTUVOVF9TVUNDRVNTOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGxvYWRpbmc6IGZhbHNlLCBkb2N1bWVudDogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlIEZFVENIX0RPQ1VNRU5UX0ZBSUxVUkU6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgbG9hZGluZzogZmFsc2UsIGVycm9yOiBhY3Rpb24ucGF5bG9hZCB9O1xuXG4gICAgY2FzZSBGRVRDSF9ET0NVTUVOVFNfUkVRVUVTVDpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBsb2FkaW5nOiB0cnVlLCBlcnJvcjogbnVsbCB9O1xuICAgIGNhc2UgRkVUQ0hfRE9DVU1FTlRTX1NVQ0NFU1M6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgbG9hZGluZzogZmFsc2UsIGRvY3VtZW50czogYWN0aW9uLnBheWxvYWQgfTtcbiAgICBjYXNlIEZFVENIX0RPQ1VNRU5UU19GQUlMVVJFOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGxvYWRpbmc6IGZhbHNlLCBlcnJvcjogYWN0aW9uLnBheWxvYWQgfTtcblxuICAgIGNhc2UgVVBMT0FEX0RPQ1VNRU5UX1JFUVVFU1Q6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgbG9hZGluZzogdHJ1ZSwgZXJyb3I6IG51bGwsIGZpbGVVcGxvYWRlZDogZmFsc2UsIGZhYnJpY19pZDogbnVsbCwgZXJyb3I6IG51bGwgfTtcbiAgICBjYXNlIFVQTE9BRF9ET0NVTUVOVF9TVUNDRVNTOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGxvYWRpbmc6IGZhbHNlLCBmaWxlVXBsb2FkZWQ6IHRydWUsIGZhYnJpY19pZDogYWN0aW9uLnBheWxvYWQsIGVycm9yOiBudWxsIH07XG4gICAgY2FzZSBVUExPQURfRE9DVU1FTlRfRkFJTFVSRTpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBsb2FkaW5nOiBmYWxzZSwgZXJyb3I6IGFjdGlvbi5wYXlsb2FkLCBmaWxlVXBsb2FkZWQ6IGZhbHNlLCBmYWJyaWNfaWQ6IG51bGwgfTtcblxuICAgIGNhc2UgU0VBUkNIX0RPQ1VNRU5UX1JFUVVFU1Q6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgbG9hZGluZzogdHJ1ZSwgZXJyb3I6IG51bGwsIHJlc3VsdHM6IFtdLCB9O1xuICAgIGNhc2UgU0VBUkNIX0RPQ1VNRU5UX1NVQ0NFU1M6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgbG9hZGluZzogZmFsc2UsIHJlc3VsdHM6IGFjdGlvbi5wYXlsb2FkLCBlcnJvcjogbnVsbCB9O1xuICAgIGNhc2UgU0VBUkNIX0RPQ1VNRU5UX0ZBSUxVUkU6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgbG9hZGluZzogZmFsc2UsIGVycm9yOiBhY3Rpb24ucGF5bG9hZCwgcmVzdWx0czogW10gfTtcblxuICAgIGNhc2UgQ1JFQVRFX0RPQ1VNRU5UX1JFUVVFU1Q6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgY3JlYXRpbmc6IHRydWUsIGVycm9yOiBudWxsLCBkb2N1bWVudDoge30sIGNyZWF0aW9uU3VjY2VzczogZmFsc2UgfTtcbiAgICBjYXNlIENSRUFURV9ET0NVTUVOVF9TVUNDRVNTOlxuICAgICAgY29uc29sZS5sb2coYWN0aW9uLnBheWxvYWQpO1xuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGNyZWF0aW5nOiBmYWxzZSwgZG9jdW1lbnQ6IGFjdGlvbi5wYXlsb2FkLCBlcnJvcjogbnVsbCwgY3JlYXRpb25TdWNjZXNzOiB0cnVlIH07XG4gICAgY2FzZSBDUkVBVEVfRE9DVU1FTlRfRkFJTFVSRTpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBjcmVhdGluZzogZmFsc2UsIGVycm9yOiBhY3Rpb24ucGF5bG9hZCwgZG9jdW1lbnQ6IHt9LCBjcmVhdGlvblN1Y2Nlc3M6IGZhbHNlIH07XG5cbiAgICBjYXNlIEVESVRfRE9DVU1FTlRfUkVRVUVTVDpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBlZGl0aW5nOiB0cnVlLCBlcnJvcjogbnVsbCwgZWRpdGlvblN1Y2Nlc3M6IGZhbHNlIH07XG4gICAgY2FzZSBFRElUX0RPQ1VNRU5UX1NVQ0NFU1M6XG4gICAgICBjb25zb2xlLmxvZyhhY3Rpb24ucGF5bG9hZCk7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgZWRpdGluZzogZmFsc2UsIGVycm9yOiBudWxsLCBkb2N1bWVudDogYWN0aW9uLnBheWxvYWQsIGVkaXRpb25TdWNjZXNzOiB0cnVlIH07XG4gICAgY2FzZSBFRElUX0RPQ1VNRU5UX0ZBSUxVUkU6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgZWRpdGluZzogZmFsc2UsIGVycm9yOiBhY3Rpb24ucGF5bG9hZCwgZWRpdGlvblN1Y2Nlc3M6IGZhbHNlIH07XG5cbiAgICBjYXNlIERFTEVURV9ET0NVTUVOVF9SRVFVRVNUOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGVkaXRpbmc6IHRydWUsIGVycm9yOiBudWxsLCBkZWxldGVTdWNjZXNzOiBmYWxzZSB9O1xuICAgIGNhc2UgREVMRVRFX0RPQ1VNRU5UX1NVQ0NFU1M6XG4gICAgICBjb25zb2xlLmxvZyhhY3Rpb24ucGF5bG9hZCk7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgZWRpdGluZzogZmFsc2UsIGVycm9yOiBudWxsLCBkZWxldGVTdWNjZXNzOiB0cnVlIH07XG4gICAgY2FzZSBERUxFVEVfRE9DVU1FTlRfRkFJTFVSRTpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBlZGl0aW5nOiBmYWxzZSwgZXJyb3I6IGFjdGlvbi5wYXlsb2FkLCBkZWxldGVTdWNjZXNzOiBmYWxzZSB9O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGNvbnNvbGUud2FybignVW5oYW5kbGVkIGFjdGlvbiBpbiBkb2N1bWVudHMgcmVkdWNlcjonLCBhY3Rpb24pO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnRSZWR1Y2VyO1xuIl0sIm5hbWVzIjpbIl9yZXF1aXJlIiwicmVxdWlyZSIsIkZFVENIX0RPQ1VNRU5UX1JFUVVFU1QiLCJGRVRDSF9ET0NVTUVOVF9TVUNDRVNTIiwiRkVUQ0hfRE9DVU1FTlRfRkFJTFVSRSIsIkZFVENIX0RPQ1VNRU5UU19SRVFVRVNUIiwiRkVUQ0hfRE9DVU1FTlRTX1NVQ0NFU1MiLCJGRVRDSF9ET0NVTUVOVFNfRkFJTFVSRSIsIlVQTE9BRF9ET0NVTUVOVF9SRVFVRVNUIiwiVVBMT0FEX0RPQ1VNRU5UX1NVQ0NFU1MiLCJVUExPQURfRE9DVU1FTlRfRkFJTFVSRSIsIlNFQVJDSF9ET0NVTUVOVF9SRVFVRVNUIiwiU0VBUkNIX0RPQ1VNRU5UX1NVQ0NFU1MiLCJTRUFSQ0hfRE9DVU1FTlRfRkFJTFVSRSIsIkNSRUFURV9ET0NVTUVOVF9SRVFVRVNUIiwiQ1JFQVRFX0RPQ1VNRU5UX1NVQ0NFU1MiLCJDUkVBVEVfRE9DVU1FTlRfRkFJTFVSRSIsIkVESVRfRE9DVU1FTlRfUkVRVUVTVCIsIkVESVRfRE9DVU1FTlRfU1VDQ0VTUyIsIkVESVRfRE9DVU1FTlRfRkFJTFVSRSIsIkRFTEVURV9ET0NVTUVOVF9SRVFVRVNUIiwiREVMRVRFX0RPQ1VNRU5UX1NVQ0NFU1MiLCJERUxFVEVfRE9DVU1FTlRfRkFJTFVSRSIsImluaXRpYWxTdGF0ZSIsImRvY3VtZW50IiwiZG9jdW1lbnRzIiwibG9hZGluZyIsImVkaXRpbmciLCJlcnJvciIsImZpbGVVcGxvYWRlZCIsInJlc3VsdHMiLCJjcmVhdGlvblN1Y2Nlc3MiLCJlZGl0aW9uU3VjY2VzcyIsImRlbGV0ZVN1Y2Nlc3MiLCJkb2N1bWVudFJlZHVjZXIiLCJzdGF0ZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImFjdGlvbiIsInR5cGUiLCJfb2JqZWN0U3ByZWFkIiwicGF5bG9hZCIsIl9kZWZpbmVQcm9wZXJ0eSIsImZhYnJpY19pZCIsImNyZWF0aW5nIiwiY29uc29sZSIsImxvZyIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./reducers/documentReducer.js\n\n}')},"./reducers/searchReducer.js"(module,__unused_webpack_exports,__webpack_require__){eval('{function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nvar _require = __webpack_require__(/*! ../actions/searchActions */ "./actions/searchActions.js"),\n SEARCH_GLOBAL_REQUEST = _require.SEARCH_GLOBAL_REQUEST,\n SEARCH_GLOBAL_SUCCESS = _require.SEARCH_GLOBAL_SUCCESS,\n SEARCH_GLOBAL_FAILURE = _require.SEARCH_GLOBAL_FAILURE;\nvar initialState = {\n result: {},\n searching: false,\n error: null\n};\nfunction searchReducer() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n switch (action.type) {\n case SEARCH_GLOBAL_REQUEST:\n return _objectSpread(_objectSpread({}, state), {}, {\n searching: true,\n error: null\n });\n case SEARCH_GLOBAL_SUCCESS:\n return _objectSpread(_objectSpread({}, state), {}, {\n searching: false,\n result: action.payload,\n error: null\n });\n case SEARCH_GLOBAL_FAILURE:\n return _objectSpread(_objectSpread({}, state), {}, {\n searching: false,\n error: action.payload,\n result: {}\n });\n default:\n return state;\n }\n}\nmodule.exports = searchReducer;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZWR1Y2Vycy9zZWFyY2hSZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FJSUMsbUJBQU8sQ0FBQyw0REFBMEIsQ0FBQztFQUhyQ0MscUJBQXFCLEdBQUFGLFFBQUEsQ0FBckJFLHFCQUFxQjtFQUNyQkMscUJBQXFCLEdBQUFILFFBQUEsQ0FBckJHLHFCQUFxQjtFQUNyQkMscUJBQXFCLEdBQUFKLFFBQUEsQ0FBckJJLHFCQUFxQjtBQUd2QixJQUFNQyxZQUFZLEdBQUc7RUFDbkJDLE1BQU0sRUFBRSxDQUFDLENBQUM7RUFDVkMsU0FBUyxFQUFFLEtBQUs7RUFDaEJDLEtBQUssRUFBRTtBQUNULENBQUM7QUFFRCxTQUFTQyxhQUFhQSxDQUFBLEVBQWdDO0VBQUEsSUFBOUJDLEtBQUssR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUdOLFlBQVk7RUFBQSxJQUFFUyxNQUFNLEdBQUFILFNBQUEsQ0FBQUMsTUFBQSxPQUFBRCxTQUFBLE1BQUFFLFNBQUE7RUFDbEQsUUFBUUMsTUFBTSxDQUFDQyxJQUFJO0lBQ2pCLEtBQUtiLHFCQUFxQjtNQUN4QixPQUFBYyxhQUFBLENBQUFBLGFBQUEsS0FBWU4sS0FBSztRQUFFSCxTQUFTLEVBQUUsSUFBSTtRQUFFQyxLQUFLLEVBQUU7TUFBSTtJQUNqRCxLQUFLTCxxQkFBcUI7TUFDeEIsT0FBQWEsYUFBQSxDQUFBQSxhQUFBLEtBQVlOLEtBQUs7UUFBRUgsU0FBUyxFQUFFLEtBQUs7UUFBRUQsTUFBTSxFQUFFUSxNQUFNLENBQUNHLE9BQU87UUFBRVQsS0FBSyxFQUFFO01BQUk7SUFDMUUsS0FBS0oscUJBQXFCO01BQ3hCLE9BQUFZLGFBQUEsQ0FBQUEsYUFBQSxLQUFZTixLQUFLO1FBQUVILFNBQVMsRUFBRSxLQUFLO1FBQUVDLEtBQUssRUFBRU0sTUFBTSxDQUFDRyxPQUFPO1FBQUVYLE1BQU0sRUFBRSxDQUFDO01BQUM7SUFDeEU7TUFDRSxPQUFPSSxLQUFLO0VBQ2hCO0FBQ0Y7QUFFQVEsTUFBTSxDQUFDQyxPQUFPLEdBQUdWLGFBQWEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL3JlZHVjZXJzL3NlYXJjaFJlZHVjZXIuanM/Yzg1NCJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7XG4gIFNFQVJDSF9HTE9CQUxfUkVRVUVTVCxcbiAgU0VBUkNIX0dMT0JBTF9TVUNDRVNTLFxuICBTRUFSQ0hfR0xPQkFMX0ZBSUxVUkVcbn0gPSByZXF1aXJlKCcuLi9hY3Rpb25zL3NlYXJjaEFjdGlvbnMnKTtcblxuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICByZXN1bHQ6IHt9LFxuICBzZWFyY2hpbmc6IGZhbHNlLFxuICBlcnJvcjogbnVsbCxcbn07XG5cbmZ1bmN0aW9uIHNlYXJjaFJlZHVjZXIgKHN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb24pIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgU0VBUkNIX0dMT0JBTF9SRVFVRVNUOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaGluZzogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICBjYXNlIFNFQVJDSF9HTE9CQUxfU1VDQ0VTUzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBzZWFyY2hpbmc6IGZhbHNlLCByZXN1bHQ6IGFjdGlvbi5wYXlsb2FkLCBlcnJvcjogbnVsbCB9O1xuICAgIGNhc2UgU0VBUkNIX0dMT0JBTF9GQUlMVVJFOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIHNlYXJjaGluZzogZmFsc2UsIGVycm9yOiBhY3Rpb24ucGF5bG9hZCwgcmVzdWx0OiB7fSB9OyBcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2VhcmNoUmVkdWNlcjtcbiJdLCJuYW1lcyI6WyJfcmVxdWlyZSIsInJlcXVpcmUiLCJTRUFSQ0hfR0xPQkFMX1JFUVVFU1QiLCJTRUFSQ0hfR0xPQkFMX1NVQ0NFU1MiLCJTRUFSQ0hfR0xPQkFMX0ZBSUxVUkUiLCJpbml0aWFsU3RhdGUiLCJyZXN1bHQiLCJzZWFyY2hpbmciLCJlcnJvciIsInNlYXJjaFJlZHVjZXIiLCJzdGF0ZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImFjdGlvbiIsInR5cGUiLCJfb2JqZWN0U3ByZWFkIiwicGF5bG9hZCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./reducers/searchReducer.js\n\n}')},"./scripts/browser.js"(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{// # Browser\n// This file runs in the browser, and is responsible for rendering the UI.\n\n// ## Overview\n\n\n// Dependencies\nfunction _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a \'" + o + "\' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }\nfunction _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nvar React = __webpack_require__(/*! react */ "./node_modules/react/index.js");\nvar ReactDOM = __webpack_require__(/*! react-dom/client */ "./node_modules/react-dom/client.js");\nvar _require = __webpack_require__(/*! react-redux */ "./node_modules/react-redux/es/index.js"),\n Provider = _require.Provider,\n connect = _require.connect;\n\n// Fabric Components\n// const FabricChatBar = require(\'@fabric/http/components/FabricChatBar\');\n\n// Functions\nvar toRelativeTime = __webpack_require__(/*! ../functions/toRelativeTime */ "./functions/toRelativeTime.js");\nvar _require2 = __webpack_require__(/*! ../functions/fabricReportHint */ "./functions/fabricReportHint.js"),\n logCrashReportHint = _require2.logCrashReportHint;\nvar _require3 = __webpack_require__(/*! ../functions/fabricSafeLog */ "./functions/fabricSafeLog.js"),\n safeIdentityErr = _require3.safeIdentityErr;\n\n// Components (toast styles bundled here — HubInterface is also loaded in Node for SSR/build)\n__webpack_require__(/*! react-toastify/dist/ReactToastify.css */ "./node_modules/react-toastify/dist/ReactToastify.css");\nvar HubInterface = __webpack_require__(/*! ../components/HubInterface */ "./components/HubInterface.js");\n\n// Settings\nvar settings = {\n currency: \'BTC\'\n};\n\n// Redux\nvar store = __webpack_require__(/*! ../stores/redux */ "./stores/redux.js");\nvar actions = __webpack_require__(/*! ../actions */ "./actions/index.js");\n\n// ## Main Process\nfunction main() {\n return _main.apply(this, arguments);\n} // Run Main Process\nfunction _main() {\n _main = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {\n var input,\n mapStateToProps,\n connector,\n ConnectedUI,\n container,\n fallback,\n root,\n _args2 = arguments;\n return _regenerator().w(function (_context2) {\n while (1) switch (_context2.n) {\n case 0:\n input = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : {};\n console.log(\'[FABRIC:HUB] main() executing...\');\n\n // Surface errors even if UI catches them.\n window.addEventListener(\'error\', function (event) {\n var err = event && event.error ? event.error : event;\n console.error(\'[FABRIC:HUB]\', \'window.error:\', safeIdentityErr(err));\n if (event && event.error instanceof Error) {\n logCrashReportHint(\'[FABRIC:HUB]\');\n }\n });\n window.addEventListener(\'unhandledrejection\', function (event) {\n var reason = event && event.reason != null ? event.reason : event;\n console.error(\'[FABRIC:HUB]\', \'unhandledrejection:\', safeIdentityErr(reason));\n logCrashReportHint(\'[FABRIC:HUB]\');\n });\n\n // ### Custom HTML Elements\n // customElements.define(\'fabric-chat-bar\', FabricChatBar);\n\n // ### Event Listeners\n window.addEventListener(\'load\', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {\n return _regenerator().w(function (_context) {\n while (1) switch (_context.n) {\n case 0:\n console.debug(\'[HUB]\', \'Window loaded!\');\n // TODO: restore fabric-chat-bar\n // TODO: consider localforage\n // TODO: consider schema from Knex / MySQL\n // TODO: consider GraphQL to pass schema\n // const chatbar = document.createElement(\'fabric-chat-bar\');\n // chatbar.style = \'position: absolute; bottom: 1em;\';\n // document.body.append(chatbar);\n case 1:\n return _context.a(2);\n }\n }, _callee);\n })));\n\n // ### React Application\n // #### Connect Actions (Redux)\n // TODO: migrate this to `functions/mapStateToProps.js`?\n mapStateToProps = function mapStateToProps(state) {\n return {\n bridge: state.bridge,\n contracts: state.contracts,\n documents: state.documents,\n search: state.search\n };\n };\n console.debug(\'[HUB]\', \'Connecting UI...\');\n connector = connect(mapStateToProps, actions);\n ConnectedUI = connector(HubInterface); // ### DOM Attachment\n // Render\n // TODO: render to `fabric-application-target`?\n container = document.getElementById(\'application-target\');\n if (container) {\n _context2.n = 1;\n break;\n }\n console.error(\'[FABRIC:HUB] Missing #application-target — index.html shell is wrong or not from this hub build.\');\n fallback = document.createElement(\'div\');\n fallback.setAttribute(\'style\', \'padding:1.5rem;font-family:system-ui,sans-serif;max-width:36rem\');\n fallback.innerHTML = \'

Fabric Hub UI did not load

\' + \'

The page is missing #application-target. Run npm run build:browser and open the hub URL served from assets/index.html (Electron uses http://127.0.0.1:<port>/).

\';\n document.body.appendChild(fallback);\n return _context2.a(2, {});\n case 1:\n root = ReactDOM.createRoot(container);\n console.debug(\'[HUB]\', \'Rendering UI...\');\n root.render(/*#__PURE__*/React.createElement(Provider, {\n store: store\n }, /*#__PURE__*/React.createElement(ConnectedUI, null)));\n\n // Updates (1s) — use textContent for defense in depth (avoids innerHTML XSS)\n setInterval(function () {\n document.querySelectorAll(\'abbr.relative-time\').forEach(function (el) {\n el.textContent = toRelativeTime(el.getAttribute(\'title\'));\n });\n }, 1000); // 1 second\n\n // Return\n return _context2.a(2, {\n // react: { root }\n });\n }\n }, _callee2);\n }));\n return _main.apply(this, arguments);\n}\nmain(settings)["catch"](function (exception) {\n console.error(\'[FABRIC:HUB] Main Process Exception:\', exception);\n}).then(function () {\n console.debug(\'[FABRIC:HUB] main() completed (React root rendered).\');\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFFLElBQUksQ0FBQyxDQUFDLENBQUM7O1VBRVY7VUFBQSxPQUFBakMsU0FBQSxDQUFBM0QsQ0FBQSxJQUNPO1lBQ0w7VUFBQSxDQUNEO01BQUE7SUFBQSxHQUFBa0QsUUFBQTtFQUFBLENBQ0Y7RUFBQSxPQUFBRCxLQUFBLENBQUFwQixLQUFBLE9BQUFELFNBQUE7QUFBQTtBQUdEb0IsSUFBSSxDQUFDSixRQUFRLENBQUMsU0FBTSxDQUFDLFVBQUNpRCxTQUFTLEVBQUs7RUFDbENoQyxPQUFPLENBQUNNLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRTBCLFNBQVMsQ0FBQztBQUNsRSxDQUFDLENBQUMsQ0FBQ25FLElBQUksQ0FBQyxZQUFNO0VBQ1ptQyxPQUFPLENBQUNXLEtBQUssQ0FBQyxzREFBc0QsQ0FBQztBQUN2RSxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL3NjcmlwdHMvYnJvd3Nlci5qcz8xYTRhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vICMgQnJvd3NlclxuLy8gVGhpcyBmaWxlIHJ1bnMgaW4gdGhlIGJyb3dzZXIsIGFuZCBpcyByZXNwb25zaWJsZSBmb3IgcmVuZGVyaW5nIHRoZSBVSS5cblxuLy8gIyMgT3ZlcnZpZXdcbid1c2Ugc3RyaWN0JztcblxuLy8gRGVwZW5kZW5jaWVzXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5jb25zdCBSZWFjdERPTSA9IHJlcXVpcmUoJ3JlYWN0LWRvbS9jbGllbnQnKTtcbmNvbnN0IHsgUHJvdmlkZXIsIGNvbm5lY3QgfSA9IHJlcXVpcmUoJ3JlYWN0LXJlZHV4Jyk7XG5cbi8vIEZhYnJpYyBDb21wb25lbnRzXG4vLyBjb25zdCBGYWJyaWNDaGF0QmFyID0gcmVxdWlyZSgnQGZhYnJpYy9odHRwL2NvbXBvbmVudHMvRmFicmljQ2hhdEJhcicpO1xuXG4vLyBGdW5jdGlvbnNcbmNvbnN0IHRvUmVsYXRpdmVUaW1lID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL3RvUmVsYXRpdmVUaW1lJyk7XG5jb25zdCB7IGxvZ0NyYXNoUmVwb3J0SGludCB9ID0gcmVxdWlyZSgnLi4vZnVuY3Rpb25zL2ZhYnJpY1JlcG9ydEhpbnQnKTtcbmNvbnN0IHsgc2FmZUlkZW50aXR5RXJyIH0gPSByZXF1aXJlKCcuLi9mdW5jdGlvbnMvZmFicmljU2FmZUxvZycpO1xuXG4vLyBDb21wb25lbnRzICh0b2FzdCBzdHlsZXMgYnVuZGxlZCBoZXJlIOKAlCBIdWJJbnRlcmZhY2UgaXMgYWxzbyBsb2FkZWQgaW4gTm9kZSBmb3IgU1NSL2J1aWxkKVxucmVxdWlyZSgncmVhY3QtdG9hc3RpZnkvZGlzdC9SZWFjdFRvYXN0aWZ5LmNzcycpO1xuY29uc3QgSHViSW50ZXJmYWNlID0gcmVxdWlyZSgnLi4vY29tcG9uZW50cy9IdWJJbnRlcmZhY2UnKTtcblxuLy8gU2V0dGluZ3NcbmNvbnN0IHNldHRpbmdzID0ge1xuICBjdXJyZW5jeTogJ0JUQydcbn07XG5cbi8vIFJlZHV4XG5jb25zdCBzdG9yZSA9IHJlcXVpcmUoJy4uL3N0b3Jlcy9yZWR1eCcpO1xuY29uc3QgYWN0aW9ucyA9IHJlcXVpcmUoJy4uL2FjdGlvbnMnKTtcblxuLy8gIyMgTWFpbiBQcm9jZXNzXG5hc3luYyBmdW5jdGlvbiBtYWluIChpbnB1dCA9IHt9KSB7XG4gIGNvbnNvbGUubG9nKCdbRkFCUklDOkhVQl0gbWFpbigpIGV4ZWN1dGluZy4uLicpO1xuXG4gIC8vIFN1cmZhY2UgZXJyb3JzIGV2ZW4gaWYgVUkgY2F0Y2hlcyB0aGVtLlxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCAoZXZlbnQpID0+IHtcbiAgICBjb25zdCBlcnIgPSBldmVudCAmJiBldmVudC5lcnJvciA/IGV2ZW50LmVycm9yIDogZXZlbnQ7XG4gICAgY29uc29sZS5lcnJvcignW0ZBQlJJQzpIVUJdJywgJ3dpbmRvdy5lcnJvcjonLCBzYWZlSWRlbnRpdHlFcnIoZXJyKSk7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGxvZ0NyYXNoUmVwb3J0SGludCgnW0ZBQlJJQzpIVUJdJyk7XG4gICAgfVxuICB9KTtcblxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJywgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgcmVhc29uID0gZXZlbnQgJiYgZXZlbnQucmVhc29uICE9IG51bGwgPyBldmVudC5yZWFzb24gOiBldmVudDtcbiAgICBjb25zb2xlLmVycm9yKCdbRkFCUklDOkhVQl0nLCAndW5oYW5kbGVkcmVqZWN0aW9uOicsIHNhZmVJZGVudGl0eUVycihyZWFzb24pKTtcbiAgICBsb2dDcmFzaFJlcG9ydEhpbnQoJ1tGQUJSSUM6SFVCXScpO1xuICB9KTtcblxuICAvLyAjIyMgQ3VzdG9tIEhUTUwgRWxlbWVudHNcbiAgLy8gY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdmYWJyaWMtY2hhdC1iYXInLCBGYWJyaWNDaGF0QmFyKTtcblxuICAvLyAjIyMgRXZlbnQgTGlzdGVuZXJzXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUuZGVidWcoJ1tIVUJdJywgJ1dpbmRvdyBsb2FkZWQhJyk7XG4gICAgLy8gVE9ETzogcmVzdG9yZSBmYWJyaWMtY2hhdC1iYXJcbiAgICAvLyBUT0RPOiBjb25zaWRlciBsb2NhbGZvcmFnZVxuICAgIC8vIFRPRE86IGNvbnNpZGVyIHNjaGVtYSBmcm9tIEtuZXggLyBNeVNRTFxuICAgIC8vIFRPRE86IGNvbnNpZGVyIEdyYXBoUUwgdG8gcGFzcyBzY2hlbWFcbiAgICAvLyBjb25zdCBjaGF0YmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmFicmljLWNoYXQtYmFyJyk7XG4gICAgLy8gY2hhdGJhci5zdHlsZSA9ICdwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogMWVtOyc7XG4gICAgLy8gZG9jdW1lbnQuYm9keS5hcHBlbmQoY2hhdGJhcik7XG4gIH0pO1xuXG4gIC8vICMjIyBSZWFjdCBBcHBsaWNhdGlvblxuICAvLyAjIyMjIENvbm5lY3QgQWN0aW9ucyAoUmVkdXgpXG4gIC8vIFRPRE86IG1pZ3JhdGUgdGhpcyB0byBgZnVuY3Rpb25zL21hcFN0YXRlVG9Qcm9wcy5qc2A/XG4gIGNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IChzdGF0ZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBicmlkZ2U6IHN0YXRlLmJyaWRnZSxcbiAgICAgIGNvbnRyYWN0czogc3RhdGUuY29udHJhY3RzLFxuICAgICAgZG9jdW1lbnRzOiBzdGF0ZS5kb2N1bWVudHMsXG4gICAgICBzZWFyY2g6IHN0YXRlLnNlYXJjaFxuICAgIH1cbiAgfTtcblxuICBjb25zb2xlLmRlYnVnKCdbSFVCXScsICdDb25uZWN0aW5nIFVJLi4uJyk7XG4gIGNvbnN0IGNvbm5lY3RvciA9IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBhY3Rpb25zKTtcbiAgY29uc3QgQ29ubmVjdGVkVUkgPSBjb25uZWN0b3IoSHViSW50ZXJmYWNlKTtcblxuICAvLyAjIyMgRE9NIEF0dGFjaG1lbnRcbiAgLy8gUmVuZGVyXG4gIC8vIFRPRE86IHJlbmRlciB0byBgZmFicmljLWFwcGxpY2F0aW9uLXRhcmdldGA/XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHBsaWNhdGlvbi10YXJnZXQnKTtcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbRkFCUklDOkhVQl0gTWlzc2luZyAjYXBwbGljYXRpb24tdGFyZ2V0IOKAlCBpbmRleC5odG1sIHNoZWxsIGlzIHdyb25nIG9yIG5vdCBmcm9tIHRoaXMgaHViIGJ1aWxkLicpO1xuICAgIGNvbnN0IGZhbGxiYWNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZmFsbGJhY2suc2V0QXR0cmlidXRlKCdzdHlsZScsICdwYWRkaW5nOjEuNXJlbTtmb250LWZhbWlseTpzeXN0ZW0tdWksc2Fucy1zZXJpZjttYXgtd2lkdGg6MzZyZW0nKTtcbiAgICBmYWxsYmFjay5pbm5lckhUTUwgPVxuICAgICAgJzxoMSBzdHlsZT1cImZvbnQtc2l6ZToxLjFyZW1cIj5GYWJyaWMgSHViIFVJIGRpZCBub3QgbG9hZDwvaDE+JyArXG4gICAgICAnPHA+VGhlIHBhZ2UgaXMgbWlzc2luZyA8Y29kZT4jYXBwbGljYXRpb24tdGFyZ2V0PC9jb2RlPi4gUnVuIDxjb2RlPm5wbSBydW4gYnVpbGQ6YnJvd3NlcjwvY29kZT4gYW5kIG9wZW4gdGhlIGh1YiBVUkwgc2VydmVkIGZyb20gPGNvZGU+YXNzZXRzL2luZGV4Lmh0bWw8L2NvZGU+IChFbGVjdHJvbiB1c2VzIDxjb2RlPmh0dHA6Ly8xMjcuMC4wLjE6Jmx0O3BvcnQmZ3Q7LzwvY29kZT4pLjwvcD4nO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZmFsbGJhY2spO1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCByb290ID0gUmVhY3RET00uY3JlYXRlUm9vdChjb250YWluZXIpO1xuXG4gIGNvbnNvbGUuZGVidWcoJ1tIVUJdJywgJ1JlbmRlcmluZyBVSS4uLicpO1xuICByb290LnJlbmRlcihcbiAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlfT5cbiAgICAgIDxDb25uZWN0ZWRVSSAvPlxuICAgIDwvUHJvdmlkZXI+XG4gICk7XG5cbiAgLy8gVXBkYXRlcyAoMXMpIOKAlCB1c2UgdGV4dENvbnRlbnQgZm9yIGRlZmVuc2UgaW4gZGVwdGggKGF2b2lkcyBpbm5lckhUTUwgWFNTKVxuICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYWJici5yZWxhdGl2ZS10aW1lJykuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgIGVsLnRleHRDb250ZW50ID0gdG9SZWxhdGl2ZVRpbWUoZWwuZ2V0QXR0cmlidXRlKCd0aXRsZScpKTtcbiAgICB9KTtcbiAgfSwgMTAwMCk7IC8vIDEgc2Vjb25kXG5cbiAgLy8gUmV0dXJuXG4gIHJldHVybiB7XG4gICAgLy8gcmVhY3Q6IHsgcm9vdCB9XG4gIH1cbn1cblxuLy8gUnVuIE1haW4gUHJvY2Vzc1xubWFpbihzZXR0aW5ncykuY2F0Y2goKGV4Y2VwdGlvbikgPT4ge1xuICBjb25zb2xlLmVycm9yKCdbRkFCUklDOkhVQl0gTWFpbiBQcm9jZXNzIEV4Y2VwdGlvbjonLCBleGNlcHRpb24pO1xufSkudGhlbigoKSA9PiB7XG4gIGNvbnNvbGUuZGVidWcoJ1tGQUJSSUM6SFVCXSBtYWluKCkgY29tcGxldGVkIChSZWFjdCByb290IHJlbmRlcmVkKS4nKTtcbn0pO1xuIl0sIm5hbWVzIjpbIl9yZWdlbmVyYXRvciIsImUiLCJ0IiwiciIsIlN5bWJvbCIsIm4iLCJpdGVyYXRvciIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsIk9iamVjdCIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJUeXBlRXJyb3IiLCJjYWxsIiwiZG9uZSIsInZhbHVlIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJkaXNwbGF5TmFtZSIsInciLCJtIiwiZGVmaW5lUHJvcGVydHkiLCJfcmVnZW5lcmF0b3JEZWZpbmUiLCJfaW52b2tlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiUmVhY3QiLCJyZXF1aXJlIiwiUmVhY3RET00iLCJfcmVxdWlyZSIsIlByb3ZpZGVyIiwiY29ubmVjdCIsInRvUmVsYXRpdmVUaW1lIiwiX3JlcXVpcmUyIiwibG9nQ3Jhc2hSZXBvcnRIaW50IiwiX3JlcXVpcmUzIiwic2FmZUlkZW50aXR5RXJyIiwiSHViSW50ZXJmYWNlIiwic2V0dGluZ3MiLCJjdXJyZW5jeSIsInN0b3JlIiwiYWN0aW9ucyIsIm1haW4iLCJfbWFpbiIsIl9jYWxsZWUyIiwiaW5wdXQiLCJtYXBTdGF0ZVRvUHJvcHMiLCJjb25uZWN0b3IiLCJDb25uZWN0ZWRVSSIsImNvbnRhaW5lciIsImZhbGxiYWNrIiwicm9vdCIsIl9hcmdzMiIsIl9jb250ZXh0MiIsInVuZGVmaW5lZCIsImNvbnNvbGUiLCJsb2ciLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJlcnIiLCJlcnJvciIsIkVycm9yIiwicmVhc29uIiwiX2NhbGxlZSIsIl9jb250ZXh0IiwiZGVidWciLCJzdGF0ZSIsImJyaWRnZSIsImNvbnRyYWN0cyIsImRvY3VtZW50cyIsInNlYXJjaCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiaW5uZXJIVE1MIiwiYm9keSIsImFwcGVuZENoaWxkIiwiY3JlYXRlUm9vdCIsInJlbmRlciIsInNldEludGVydmFsIiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJlbCIsInRleHRDb250ZW50IiwiZ2V0QXR0cmlidXRlIiwiZXhjZXB0aW9uIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./scripts/browser.js\n\n}')},"./stores/redux.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\n// Dependencies\nvar _require = __webpack_require__(/*! redux */ "./node_modules/redux/es/redux.js"),\n createStore = _require.createStore,\n combineReducers = _require.combineReducers,\n applyMiddleware = _require.applyMiddleware;\nvar thunkMiddleware = (__webpack_require__(/*! redux-thunk */ "./node_modules/redux-thunk/es/index.js")["default"]);\n\n// Reducers\nvar bridgeReducer = __webpack_require__(/*! ../reducers/bridgeReducer */ "./reducers/bridgeReducer.js");\nvar contractReducer = __webpack_require__(/*! ../reducers/contractReducer */ "./reducers/contractReducer.js");\nvar documentReducer = __webpack_require__(/*! ../reducers/documentReducer */ "./reducers/documentReducer.js");\nvar searchReducer = __webpack_require__(/*! ../reducers/searchReducer */ "./reducers/searchReducer.js");\n\n// Root\nvar rootReducer = combineReducers({\n bridge: bridgeReducer,\n contracts: contractReducer,\n documents: documentReducer,\n search: searchReducer\n});\nmodule.exports = createStore(rootReducer, applyMiddleware(thunkMiddleware));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zdG9yZXMvcmVkdXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQSxJQUFBQSxRQUFBLEdBQTBEQyxtQkFBTyxDQUFDLCtDQUFPLENBQUM7RUFBbEVDLFdBQVcsR0FBQUYsUUFBQSxDQUFYRSxXQUFXO0VBQUVDLGVBQWUsR0FBQUgsUUFBQSxDQUFmRyxlQUFlO0VBQUVDLGVBQWUsR0FBQUosUUFBQSxDQUFmSSxlQUFlO0FBQ3JELElBQU1DLGVBQWUsR0FBR0osNkZBQThCOztBQUV0RDtBQUNBLElBQU1LLGFBQWEsR0FBR0wsbUJBQU8sQ0FBQyw4REFBMkIsQ0FBQztBQUMxRCxJQUFNTSxlQUFlLEdBQUdOLG1CQUFPLENBQUMsa0VBQTZCLENBQUM7QUFDOUQsSUFBTU8sZUFBZSxHQUFHUCxtQkFBTyxDQUFDLGtFQUE2QixDQUFDO0FBQzlELElBQU1RLGFBQWEsR0FBR1IsbUJBQU8sQ0FBQyw4REFBMkIsQ0FBQzs7QUFFMUQ7QUFDQSxJQUFNUyxXQUFXLEdBQUdQLGVBQWUsQ0FBQztFQUNsQ1EsTUFBTSxFQUFFTCxhQUFhO0VBQ3JCTSxTQUFTLEVBQUVMLGVBQWU7RUFDMUJNLFNBQVMsRUFBRUwsZUFBZTtFQUMxQk0sTUFBTSxFQUFFTDtBQUNWLENBQUMsQ0FBQztBQUVGTSxNQUFNLENBQUNDLE9BQU8sR0FBR2QsV0FBVyxDQUFDUSxXQUFXLEVBQUVOLGVBQWUsQ0FBQ0MsZUFBZSxDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL3N0b3Jlcy9yZWR1eC5qcz82M2I3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gRGVwZW5kZW5jaWVzXG5jb25zdCB7IGNyZWF0ZVN0b3JlLCBjb21iaW5lUmVkdWNlcnMsIGFwcGx5TWlkZGxld2FyZSB9ID0gcmVxdWlyZSgncmVkdXgnKTtcbmNvbnN0IHRodW5rTWlkZGxld2FyZSA9IHJlcXVpcmUoJ3JlZHV4LXRodW5rJykuZGVmYXVsdDtcblxuLy8gUmVkdWNlcnNcbmNvbnN0IGJyaWRnZVJlZHVjZXIgPSByZXF1aXJlKCcuLi9yZWR1Y2Vycy9icmlkZ2VSZWR1Y2VyJyk7XG5jb25zdCBjb250cmFjdFJlZHVjZXIgPSByZXF1aXJlKCcuLi9yZWR1Y2Vycy9jb250cmFjdFJlZHVjZXInKTtcbmNvbnN0IGRvY3VtZW50UmVkdWNlciA9IHJlcXVpcmUoJy4uL3JlZHVjZXJzL2RvY3VtZW50UmVkdWNlcicpO1xuY29uc3Qgc2VhcmNoUmVkdWNlciA9IHJlcXVpcmUoJy4uL3JlZHVjZXJzL3NlYXJjaFJlZHVjZXInKTtcblxuLy8gUm9vdFxuY29uc3Qgcm9vdFJlZHVjZXIgPSBjb21iaW5lUmVkdWNlcnMoe1xuICBicmlkZ2U6IGJyaWRnZVJlZHVjZXIsXG4gIGNvbnRyYWN0czogY29udHJhY3RSZWR1Y2VyLFxuICBkb2N1bWVudHM6IGRvY3VtZW50UmVkdWNlcixcbiAgc2VhcmNoOiBzZWFyY2hSZWR1Y2VyXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVTdG9yZShyb290UmVkdWNlciwgYXBwbHlNaWRkbGV3YXJlKHRodW5rTWlkZGxld2FyZSkpO1xuIl0sIm5hbWVzIjpbIl9yZXF1aXJlIiwicmVxdWlyZSIsImNyZWF0ZVN0b3JlIiwiY29tYmluZVJlZHVjZXJzIiwiYXBwbHlNaWRkbGV3YXJlIiwidGh1bmtNaWRkbGV3YXJlIiwiYnJpZGdlUmVkdWNlciIsImNvbnRyYWN0UmVkdWNlciIsImRvY3VtZW50UmVkdWNlciIsInNlYXJjaFJlZHVjZXIiLCJyb290UmVkdWNlciIsImJyaWRnZSIsImNvbnRyYWN0cyIsImRvY3VtZW50cyIsInNlYXJjaCIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./stores/redux.js\n\n}')},"./types/bridgeMessageCollection.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nfunction _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }\nfunction _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn\'t been initialised - super() hasn\'t been called"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nvar Collection = __webpack_require__(/*! @fabric/core/types/collection */ "./node_modules/@fabric/core/types/collection.js");\nvar BridgeMessageCollection = /*#__PURE__*/function (_Collection) {\n function BridgeMessageCollection() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _classCallCheck(this, BridgeMessageCollection);\n return _callSuper(this, BridgeMessageCollection, [Object.assign({\n name: \'BridgeMessage\',\n key: \'id\',\n data: {}\n }, settings)]);\n }\n _inherits(BridgeMessageCollection, _Collection);\n return _createClass(BridgeMessageCollection, [{\n key: "_map",\n value: function _map() {\n var m = this.value && this.value[this.path] ? this.value[this.path] : {};\n return m && _typeof(m) === \'object\' ? m : {};\n }\n }, {\n key: "loadMap",\n value: function loadMap() {\n var map = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.value[this.path] = {};\n if (!map || _typeof(map) !== \'object\') return this;\n var out = {};\n for (var _i = 0, _Object$keys = Object.keys(map); _i < _Object$keys.length; _i++) {\n var id = _Object$keys[_i];\n out[id] = map[id];\n }\n this.value[this.path] = out;\n return this;\n }\n }, {\n key: "exportMap",\n value: function exportMap() {\n var map = this._map();\n var out = {};\n for (var _i2 = 0, _Object$keys2 = Object.keys(map); _i2 < _Object$keys2.length; _i2++) {\n var id = _Object$keys2[_i2];\n out[id] = map[id];\n }\n return out;\n }\n }, {\n key: "upsert",\n value: function upsert(id, message) {\n if (!id) return this;\n this.value[this.path] = this._map();\n this.value[this.path][String(id)] = message;\n return this;\n }\n }, {\n key: "replay",\n value: function replay(applyMessage) {\n if (typeof applyMessage !== \'function\') return 0;\n var map = this._map();\n var ids = Object.keys(map).sort(function (a, b) {\n var ta = Number(map[a] && map[a].object && map[a].object.created || 0);\n var tb = Number(map[b] && map[b].object && map[b].object.created || 0);\n return ta - tb;\n });\n var _iterator = _createForOfIteratorHelper(ids),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var id = _step.value;\n applyMessage(id, map[id]);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n return ids.length;\n }\n }]);\n}(Collection);\nmodule.exports = BridgeMessageCollection;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi90eXBlcy9icmlkZ2VNZXNzYWdlQ29sbGVjdGlvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFBQSxTQUFBQSwyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEsS0FBQUosQ0FBQSxxQkFBQUUsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxNQUFBRSxDQUFBLEdBQUFLLDJCQUFBLENBQUFQLENBQUEsTUFBQUMsQ0FBQSxJQUFBRCxDQUFBLHVCQUFBQSxDQUFBLENBQUFRLE1BQUEsSUFBQU4sQ0FBQSxLQUFBRixDQUFBLEdBQUFFLENBQUEsT0FBQU8sRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUEsRUFBQSxXQUFBSCxFQUFBLElBQUFULENBQUEsQ0FBQVEsTUFBQSxLQUFBSyxJQUFBLFdBQUFBLElBQUEsTUFBQUMsS0FBQSxFQUFBZCxDQUFBLENBQUFTLEVBQUEsVUFBQVIsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLFVBQUFBLENBQUEsS0FBQWUsQ0FBQSxFQUFBTCxDQUFBLGdCQUFBTSxTQUFBLGlKQUFBQyxDQUFBLEVBQUFDLENBQUEsT0FBQUMsQ0FBQSxnQkFBQVIsQ0FBQSxXQUFBQSxFQUFBLElBQUFULENBQUEsR0FBQUEsQ0FBQSxDQUFBa0IsSUFBQSxDQUFBcEIsQ0FBQSxNQUFBWSxDQUFBLFdBQUFBLEVBQUEsUUFBQVosQ0FBQSxHQUFBRSxDQUFBLENBQUFtQixJQUFBLFdBQUFILENBQUEsR0FBQWxCLENBQUEsQ0FBQWEsSUFBQSxFQUFBYixDQUFBLEtBQUFDLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxJQUFBbUIsQ0FBQSxPQUFBRixDQUFBLEdBQUFqQixDQUFBLEtBQUFlLENBQUEsV0FBQUEsRUFBQSxVQUFBRyxDQUFBLFlBQUFoQixDQUFBLGNBQUFBLENBQUEsOEJBQUFp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ZWN0aW9uLmpzPzBlZTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBDb2xsZWN0aW9uID0gcmVxdWlyZSgnQGZhYnJpYy9jb3JlL3R5cGVzL2NvbGxlY3Rpb24nKTtcblxuY2xhc3MgQnJpZGdlTWVzc2FnZUNvbGxlY3Rpb24gZXh0ZW5kcyBDb2xsZWN0aW9uIHtcbiAgY29uc3RydWN0b3IgKHNldHRpbmdzID0ge30pIHtcbiAgICBzdXBlcihPYmplY3QuYXNzaWduKHtcbiAgICAgIG5hbWU6ICdCcmlkZ2VNZXNzYWdlJyxcbiAgICAgIGtleTogJ2lkJyxcbiAgICAgIGRhdGE6IHt9XG4gICAgfSwgc2V0dGluZ3MpKTtcbiAgfVxuXG4gIF9tYXAgKCkge1xuICAgIGNvbnN0IG0gPSB0aGlzLnZhbHVlICYmIHRoaXMudmFsdWVbdGhpcy5wYXRoXSA/IHRoaXMudmFsdWVbdGhpcy5wYXRoXSA6IHt9O1xuICAgIHJldHVybiAobSAmJiB0eXBlb2YgbSA9PT0gJ29iamVjdCcpID8gbSA6IHt9O1xuICB9XG5cbiAgbG9hZE1hcCAobWFwID0ge30pIHtcbiAgICB0aGlzLnZhbHVlW3RoaXMucGF0aF0gPSB7fTtcbiAgICBpZiAoIW1hcCB8fCB0eXBlb2YgbWFwICE9PSAnb2JqZWN0JykgcmV0dXJuIHRoaXM7XG4gICAgY29uc3Qgb3V0ID0ge307XG4gICAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyhtYXApKSBvdXRbaWRdID0gbWFwW2lkXTtcbiAgICB0aGlzLnZhbHVlW3RoaXMucGF0aF0gPSBvdXQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBleHBvcnRNYXAgKCkge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMuX21hcCgpO1xuICAgIGNvbnN0IG91dCA9IHt9O1xuICAgIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXMobWFwKSkgb3V0W2lkXSA9IG1hcFtpZF07XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHVwc2VydCAoaWQsIG1lc3NhZ2UpIHtcbiAgICBpZiAoIWlkKSByZXR1cm4gdGhpcztcbiAgICB0aGlzLnZhbHVlW3RoaXMucGF0aF0gPSB0aGlzLl9tYXAoKTtcbiAgICB0aGlzLnZhbHVlW3RoaXMucGF0aF1bU3RyaW5nKGlkKV0gPSBtZXNzYWdlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVwbGF5IChhcHBseU1lc3NhZ2UpIHtcbiAgICBpZiAodHlwZW9mIGFwcGx5TWVzc2FnZSAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIDA7XG4gICAgY29uc3QgbWFwID0gdGhpcy5fbWFwKCk7XG4gICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXMobWFwKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCB0YSA9IE51bWJlcigobWFwW2FdICYmIG1hcFthXS5vYmplY3QgJiYgbWFwW2FdLm9iamVjdC5jcmVhdGVkKSB8fCAwKTtcbiAgICAgIGNvbnN0IHRiID0gTnVtYmVyKChtYXBbYl0gJiYgbWFwW2JdLm9iamVjdCAmJiBtYXBbYl0ub2JqZWN0LmNyZWF0ZWQpIHx8IDApO1xuICAgICAgcmV0dXJuIHRhIC0gdGI7XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIGFwcGx5TWVzc2FnZShpZCwgbWFwW2lkXSk7XG4gICAgcmV0dXJuIGlkcy5sZW5ndGg7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCcmlkZ2VNZXNzYWdlQ29sbGVjdGlvbjtcbiJdLCJuYW1lcyI6WyJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJlIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl90eXBlb2YiLCJwcm90b3R5cGUiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydGllcyIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJpIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImFwcGx5IiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJzZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiYmluZCIsIl9fcHJvdG9fXyIsIl9pbmhlcml0cyIsImNyZWF0ZSIsIl9zZXRQcm90b3R5cGVPZiIsIkNvbGxlY3Rpb24iLCJyZXF1aXJlIiwiQnJpZGdlTWVzc2FnZUNvbGxlY3Rpb24iLCJfQ29sbGVjdGlvbiIsInNldHRpbmdzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiYXNzaWduIiwiZGF0YSIsIl9tYXAiLCJtIiwicGF0aCIsImxvYWRNYXAiLCJtYXAiLCJvdXQiLCJfaSIsIl9PYmplY3Qka2V5cyIsImtleXMiLCJpZCIsImV4cG9ydE1hcCIsIl9pMiIsIl9PYmplY3Qka2V5czIiLCJ1cHNlcnQiLCJtZXNzYWdlIiwicmVwbGF5IiwiYXBwbHlNZXNzYWdlIiwiaWRzIiwic29ydCIsImIiLCJ0YSIsIm9iamVjdCIsImNyZWF0ZWQiLCJ0YiIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZXJyIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./types/bridgeMessageCollection.js\n\n}')},"./node_modules/base-x/src/index.js"(module){"use strict";eval("{\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) {\n } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source)\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Find code of next character\n var charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n var carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = new Uint8Array(zeroes + (size - it4))\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFzZS14L3NyYy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0MsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsNkNBQTZDO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZLFNBQVM7QUFDaEM7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQSwrQkFBK0IsNkNBQTZDO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYmFzZS14L3NyYy9pbmRleC5qcz80MmE3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuLy8gYmFzZS14IGVuY29kaW5nIC8gZGVjb2Rpbmdcbi8vIENvcHlyaWdodCAoYykgMjAxOCBiYXNlLXggY29udHJpYnV0b3JzXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxOCBUaGUgQml0Y29pbiBDb3JlIGRldmVsb3BlcnMgKGJhc2U1OC5jcHApXG4vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIHNvZnR3YXJlIGxpY2Vuc2UsIHNlZSB0aGUgYWNjb21wYW55aW5nXG4vLyBmaWxlIExJQ0VOU0Ugb3IgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAuXG5mdW5jdGlvbiBiYXNlIChBTFBIQUJFVCkge1xuICBpZiAoQUxQSEFCRVQubGVuZ3RoID49IDI1NSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHBoYWJldCB0b28gbG9uZycpIH1cbiAgdmFyIEJBU0VfTUFQID0gbmV3IFVpbnQ4QXJyYXkoMjU2KVxuICBmb3IgKHZhciBqID0gMDsgaiA8IEJBU0VfTUFQLmxlbmd0aDsgaisrKSB7XG4gICAgQkFTRV9NQVBbal0gPSAyNTVcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IEFMUEhBQkVULmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHggPSBBTFBIQUJFVC5jaGFyQXQoaSlcbiAgICB2YXIgeGMgPSB4LmNoYXJDb2RlQXQoMClcbiAgICBpZiAoQkFTRV9NQVBbeGNdICE9PSAyNTUpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcih4ICsgJyBpcyBhbWJpZ3VvdXMnKSB9XG4gICAgQkFTRV9NQVBbeGNdID0gaVxuICB9XG4gIHZhciBCQVNFID0gQUxQSEFCRVQubGVuZ3RoXG4gIHZhciBMRUFERVIgPSBBTFBIQUJFVC5jaGFyQXQoMClcbiAgdmFyIEZBQ1RPUiA9IE1hdGgubG9nKEJBU0UpIC8gTWF0aC5sb2coMjU2KSAvLyBsb2coQkFTRSkgLyBsb2coMjU2KSwgcm91bmRlZCB1cFxuICB2YXIgaUZBQ1RPUiA9IE1hdGgubG9nKDI1NikgLyBNYXRoLmxvZyhCQVNFKSAvLyBsb2coMjU2KSAvIGxvZyhCQVNFKSwgcm91bmRlZCB1cFxuICBmdW5jdGlvbiBlbmNvZGUgKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc291cmNlKSkge1xuICAgICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkoc291cmNlLmJ1ZmZlciwgc291cmNlLmJ5dGVPZmZzZXQsIHNvdXJjZS5ieXRlTGVuZ3RoKVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICBzb3VyY2UgPSBVaW50OEFycmF5LmZyb20oc291cmNlKVxuICAgIH1cbiAgICBpZiAoIShzb3VyY2UgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBVaW50OEFycmF5JykgfVxuICAgIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJyB9XG4gICAgICAgIC8vIFNraXAgJiBjb3VudCBsZWFkaW5nIHplcm9lcy5cbiAgICB2YXIgemVyb2VzID0gMFxuICAgIHZhciBsZW5ndGggPSAwXG4gICAgdmFyIHBiZWdpbiA9IDBcbiAgICB2YXIgcGVuZCA9IHNvdXJjZS5sZW5ndGhcbiAgICB3aGlsZSAocGJlZ2luICE9PSBwZW5kICYmIHNvdXJjZVtwYmVnaW5dID09PSAwKSB7XG4gICAgICBwYmVnaW4rK1xuICAgICAgemVyb2VzKytcbiAgICB9XG4gICAgICAgIC8vIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBpbiBiaWctZW5kaWFuIGJhc2U1OCByZXByZXNlbnRhdGlvbi5cbiAgICB2YXIgc2l6ZSA9ICgocGVuZCAtIHBiZWdpbikgKiBpRkFDVE9SICsgMSkgPj4+IDBcbiAgICB2YXIgYjU4ID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSlcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnl0ZXMuXG4gICAgd2hpbGUgKHBiZWdpbiAhPT0gcGVuZCkge1xuICAgICAgdmFyIGNhcnJ5ID0gc291cmNlW3BiZWdpbl1cbiAgICAgICAgICAgIC8vIEFwcGx5IFwiYjU4ID0gYjU4ICogMjU2ICsgY2hcIi5cbiAgICAgIHZhciBpID0gMFxuICAgICAgZm9yICh2YXIgaXQxID0gc2l6ZSAtIDE7IChjYXJyeSAhPT0gMCB8fCBpIDwgbGVuZ3RoKSAmJiAoaXQxICE9PSAtMSk7IGl0MS0tLCBpKyspIHtcbiAgICAgICAgY2FycnkgKz0gKDI1NiAqIGI1OFtpdDFdKSA+Pj4gMFxuICAgICAgICBiNThbaXQxXSA9IChjYXJyeSAlIEJBU0UpID4+PiAwXG4gICAgICAgIGNhcnJ5ID0gKGNhcnJ5IC8gQkFTRSkgPj4+IDBcbiAgICAgIH1cbiAgICAgIGlmIChjYXJyeSAhPT0gMCkgeyB0aHJvdyBuZXcgRXJyb3IoJ05vbi16ZXJvIGNhcnJ5JykgfVxuICAgICAgbGVuZ3RoID0gaVxuICAgICAgcGJlZ2luKytcbiAgICB9XG4gICAgICAgIC8vIFNraXAgbGVhZGluZyB6ZXJvZXMgaW4gYmFzZTU4IHJlc3VsdC5cbiAgICB2YXIgaXQyID0gc2l6ZSAtIGxlbmd0aFxuICAgIHdoaWxlIChpdDIgIT09IHNpemUgJiYgYjU4W2l0Ml0gPT09IDApIHtcbiAgICAgIGl0MisrXG4gICAgfVxuICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIHJlc3VsdCBpbnRvIGEgc3RyaW5nLlxuICAgIHZhciBzdHIgPSBMRUFERVIucmVwZWF0KHplcm9lcylcbiAgICBmb3IgKDsgaXQyIDwgc2l6ZTsgKytpdDIpIHsgc3RyICs9IEFMUEhBQkVULmNoYXJBdChiNThbaXQyXSkgfVxuICAgIHJldHVybiBzdHJcbiAgfVxuICBmdW5jdGlvbiBkZWNvZGVVbnNhZmUgKHNvdXJjZSkge1xuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnc3RyaW5nJykgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBTdHJpbmcnKSB9XG4gICAgaWYgKHNvdXJjZS5sZW5ndGggPT09IDApIHsgcmV0dXJuIG5ldyBVaW50OEFycmF5KCkgfVxuICAgIHZhciBwc3ogPSAwXG4gICAgICAgIC8vIFNraXAgYW5kIGNvdW50IGxlYWRpbmcgJzEncy5cbiAgICB2YXIgemVyb2VzID0gMFxuICAgIHZhciBsZW5ndGggPSAwXG4gICAgd2hpbGUgKHNvdXJjZVtwc3pdID09PSBMRUFERVIpIHtcbiAgICAgIHplcm9lcysrXG4gICAgICBwc3orK1xuICAgIH1cbiAgICAgICAgLy8gQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGluIGJpZy1lbmRpYW4gYmFzZTI1NiByZXByZXNlbnRhdGlvbi5cbiAgICB2YXIgc2l6ZSA9ICgoKHNvdXJjZS5sZW5ndGggLSBwc3opICogRkFDVE9SKSArIDEpID4+PiAwIC8vIGxvZyg1OCkgLyBsb2coMjU2KSwgcm91bmRlZCB1cC5cbiAgICB2YXIgYjI1NiA9IG5ldyBVaW50OEFycmF5KHNpemUpXG4gICAgICAgIC8vIFByb2Nlc3MgdGhlIGNoYXJhY3RlcnMuXG4gICAgd2hpbGUgKHNvdXJjZVtwc3pdKSB7XG4gICAgICAgICAgICAvLyBGaW5kIGNvZGUgb2YgbmV4dCBjaGFyYWN0ZXJcbiAgICAgIHZhciBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KHBzeilcbiAgICAgICAgICAgIC8vIEJhc2UgbWFwIGNhbiBub3QgYmUgaW5kZXhlZCB1c2luZyBjaGFyIGNvZGVcbiAgICAgIGlmIChjaGFyQ29kZSA+IDI1NSkgeyByZXR1cm4gfVxuICAgICAgICAgICAgLy8gRGVjb2RlIGNoYXJhY3RlclxuICAgICAgdmFyIGNhcnJ5ID0gQkFTRV9NQVBbY2hhckNvZGVdXG4gICAgICAgICAgICAvLyBJbnZhbGlkIGNoYXJhY3RlclxuICAgICAgaWYgKGNhcnJ5ID09PSAyNTUpIHsgcmV0dXJuIH1cbiAgICAgIHZhciBpID0gMFxuICAgICAgZm9yICh2YXIgaXQzID0gc2l6ZSAtIDE7IChjYXJyeSAhPT0gMCB8fCBpIDwgbGVuZ3RoKSAmJiAoaXQzICE9PSAtMSk7IGl0My0tLCBpKyspIHtcbiAgICAgICAgY2FycnkgKz0gKEJBU0UgKiBiMjU2W2l0M10pID4+PiAwXG4gICAgICAgIGIyNTZbaXQzXSA9IChjYXJyeSAlIDI1NikgPj4+IDBcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyAyNTYpID4+PiAwXG4gICAgICB9XG4gICAgICBpZiAoY2FycnkgIT09IDApIHsgdGhyb3cgbmV3IEVycm9yKCdOb24temVybyBjYXJyeScpIH1cbiAgICAgIGxlbmd0aCA9IGlcbiAgICAgIHBzeisrXG4gICAgfVxuICAgICAgICAvLyBTa2lwIGxlYWRpbmcgemVyb2VzIGluIGIyNTYuXG4gICAgdmFyIGl0NCA9IHNpemUgLSBsZW5ndGhcbiAgICB3aGlsZSAoaXQ0ICE9PSBzaXplICYmIGIyNTZbaXQ0XSA9PT0gMCkge1xuICAgICAgaXQ0KytcbiAgICB9XG4gICAgdmFyIHZjaCA9IG5ldyBVaW50OEFycmF5KHplcm9lcyArIChzaXplIC0gaXQ0KSlcbiAgICB2YXIgaiA9IHplcm9lc1xuICAgIHdoaWxlIChpdDQgIT09IHNpemUpIHtcbiAgICAgIHZjaFtqKytdID0gYjI1NltpdDQrK11cbiAgICB9XG4gICAgcmV0dXJuIHZjaFxuICB9XG4gIGZ1bmN0aW9uIGRlY29kZSAoc3RyaW5nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IGRlY29kZVVuc2FmZShzdHJpbmcpXG4gICAgaWYgKGJ1ZmZlcikgeyByZXR1cm4gYnVmZmVyIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1iYXNlJyArIEJBU0UgKyAnIGNoYXJhY3RlcicpXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBlbmNvZGU6IGVuY29kZSxcbiAgICBkZWNvZGVVbnNhZmU6IGRlY29kZVVuc2FmZSxcbiAgICBkZWNvZGU6IGRlY29kZVxuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/base-x/src/index.js\n\n}")},"./node_modules/base64-js/index.js"(__unused_webpack_module,exports){"use strict";eval("{\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFzZTY0LWpzL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFZOztBQUVaLGtCQUFrQjtBQUNsQixtQkFBbUI7QUFDbkIscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUMsU0FBUztBQUM1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLFNBQVM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixTQUFTO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDLFVBQVU7QUFDckQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcz8xZmI1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/base64-js/index.js\n\n}")},"./node_modules/bech32/dist/index.js"(__unused_webpack_module,exports){"use strict";eval("{\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.bech32m = exports.bech32 = void 0;\nconst ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\nconst ALPHABET_MAP = {};\nfor (let z = 0; z < ALPHABET.length; z++) {\n const x = ALPHABET.charAt(z);\n ALPHABET_MAP[x] = z;\n}\nfunction polymodStep(pre) {\n const b = pre >> 25;\n return (((pre & 0x1ffffff) << 5) ^\n (-((b >> 0) & 1) & 0x3b6a57b2) ^\n (-((b >> 1) & 1) & 0x26508e6d) ^\n (-((b >> 2) & 1) & 0x1ea119fa) ^\n (-((b >> 3) & 1) & 0x3d4233dd) ^\n (-((b >> 4) & 1) & 0x2a1462b3));\n}\nfunction prefixChk(prefix) {\n let chk = 1;\n for (let i = 0; i < prefix.length; ++i) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126)\n return 'Invalid prefix (' + prefix + ')';\n chk = polymodStep(chk) ^ (c >> 5);\n }\n chk = polymodStep(chk);\n for (let i = 0; i < prefix.length; ++i) {\n const v = prefix.charCodeAt(i);\n chk = polymodStep(chk) ^ (v & 0x1f);\n }\n return chk;\n}\nfunction convert(data, inBits, outBits, pad) {\n let value = 0;\n let bits = 0;\n const maxV = (1 << outBits) - 1;\n const result = [];\n for (let i = 0; i < data.length; ++i) {\n value = (value << inBits) | data[i];\n bits += inBits;\n while (bits >= outBits) {\n bits -= outBits;\n result.push((value >> bits) & maxV);\n }\n }\n if (pad) {\n if (bits > 0) {\n result.push((value << (outBits - bits)) & maxV);\n }\n }\n else {\n if (bits >= inBits)\n return 'Excess padding';\n if ((value << (outBits - bits)) & maxV)\n return 'Non-zero padding';\n }\n return result;\n}\nfunction toWords(bytes) {\n return convert(bytes, 8, 5, true);\n}\nfunction fromWordsUnsafe(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n}\nfunction fromWords(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n throw new Error(res);\n}\nfunction getLibraryFromEncoding(encoding) {\n let ENCODING_CONST;\n if (encoding === 'bech32') {\n ENCODING_CONST = 1;\n }\n else {\n ENCODING_CONST = 0x2bc830a3;\n }\n function encode(prefix, words, LIMIT) {\n LIMIT = LIMIT || 90;\n if (prefix.length + 7 + words.length > LIMIT)\n throw new TypeError('Exceeds length limit');\n prefix = prefix.toLowerCase();\n // determine chk mod\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n throw new Error(chk);\n let result = prefix + '1';\n for (let i = 0; i < words.length; ++i) {\n const x = words[i];\n if (x >> 5 !== 0)\n throw new Error('Non 5-bit word');\n chk = polymodStep(chk) ^ x;\n result += ALPHABET.charAt(x);\n }\n for (let i = 0; i < 6; ++i) {\n chk = polymodStep(chk);\n }\n chk ^= ENCODING_CONST;\n for (let i = 0; i < 6; ++i) {\n const v = (chk >> ((5 - i) * 5)) & 0x1f;\n result += ALPHABET.charAt(v);\n }\n return result;\n }\n function __decode(str, LIMIT) {\n LIMIT = LIMIT || 90;\n if (str.length < 8)\n return str + ' too short';\n if (str.length > LIMIT)\n return 'Exceeds length limit';\n // don't allow mixed case\n const lowered = str.toLowerCase();\n const uppered = str.toUpperCase();\n if (str !== lowered && str !== uppered)\n return 'Mixed-case string ' + str;\n str = lowered;\n const split = str.lastIndexOf('1');\n if (split === -1)\n return 'No separator character for ' + str;\n if (split === 0)\n return 'Missing prefix for ' + str;\n const prefix = str.slice(0, split);\n const wordChars = str.slice(split + 1);\n if (wordChars.length < 6)\n return 'Data too short';\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n return chk;\n const words = [];\n for (let i = 0; i < wordChars.length; ++i) {\n const c = wordChars.charAt(i);\n const v = ALPHABET_MAP[c];\n if (v === undefined)\n return 'Unknown character ' + c;\n chk = polymodStep(chk) ^ v;\n // not in the checksum?\n if (i + 6 >= wordChars.length)\n continue;\n words.push(v);\n }\n if (chk !== ENCODING_CONST)\n return 'Invalid checksum for ' + str;\n return { prefix, words };\n }\n function decodeUnsafe(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n }\n function decode(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n throw new Error(res);\n }\n return {\n decodeUnsafe,\n decode,\n encode,\n toWords,\n fromWordsUnsafe,\n fromWords,\n };\n}\nexports.bech32 = getLibraryFromEncoding('bech32');\nexports.bech32m = getLibraryFromEncoding('bech32m');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmVjaDMyL2Rpc3QvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsZUFBZSxHQUFHLGNBQWM7QUFDaEM7QUFDQTtBQUNBLGdCQUFnQixxQkFBcUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtQkFBbUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isa0JBQWtCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixPQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixPQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxlQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYmVjaDMyL2Rpc3QvaW5kZXguanM/NzBmYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmJlY2gzMm0gPSBleHBvcnRzLmJlY2gzMiA9IHZvaWQgMDtcbmNvbnN0IEFMUEhBQkVUID0gJ3FwenJ5OXg4Z2YydHZkdzBzM2puNTRraGNlNm11YTdsJztcbmNvbnN0IEFMUEhBQkVUX01BUCA9IHt9O1xuZm9yIChsZXQgeiA9IDA7IHogPCBBTFBIQUJFVC5sZW5ndGg7IHorKykge1xuICAgIGNvbnN0IHggPSBBTFBIQUJFVC5jaGFyQXQoeik7XG4gICAgQUxQSEFCRVRfTUFQW3hdID0gejtcbn1cbmZ1bmN0aW9uIHBvbHltb2RTdGVwKHByZSkge1xuICAgIGNvbnN0IGIgPSBwcmUgPj4gMjU7XG4gICAgcmV0dXJuICgoKHByZSAmIDB4MWZmZmZmZikgPDwgNSkgXlxuICAgICAgICAoLSgoYiA+PiAwKSAmIDEpICYgMHgzYjZhNTdiMikgXlxuICAgICAgICAoLSgoYiA+PiAxKSAmIDEpICYgMHgyNjUwOGU2ZCkgXlxuICAgICAgICAoLSgoYiA+PiAyKSAmIDEpICYgMHgxZWExMTlmYSkgXlxuICAgICAgICAoLSgoYiA+PiAzKSAmIDEpICYgMHgzZDQyMzNkZCkgXlxuICAgICAgICAoLSgoYiA+PiA0KSAmIDEpICYgMHgyYTE0NjJiMykpO1xufVxuZnVuY3Rpb24gcHJlZml4Q2hrKHByZWZpeCkge1xuICAgIGxldCBjaGsgPSAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlZml4Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGMgPSBwcmVmaXguY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGMgPCAzMyB8fCBjID4gMTI2KVxuICAgICAgICAgICAgcmV0dXJuICdJbnZhbGlkIHByZWZpeCAoJyArIHByZWZpeCArICcpJztcbiAgICAgICAgY2hrID0gcG9seW1vZFN0ZXAoY2hrKSBeIChjID4+IDUpO1xuICAgIH1cbiAgICBjaGsgPSBwb2x5bW9kU3RlcChjaGspO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlZml4Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IHYgPSBwcmVmaXguY2hhckNvZGVBdChpKTtcbiAgICAgICAgY2hrID0gcG9seW1vZFN0ZXAoY2hrKSBeICh2ICYgMHgxZik7XG4gICAgfVxuICAgIHJldHVybiBjaGs7XG59XG5mdW5jdGlvbiBjb252ZXJ0KGRhdGEsIGluQml0cywgb3V0Qml0cywgcGFkKSB7XG4gICAgbGV0IHZhbHVlID0gMDtcbiAgICBsZXQgYml0cyA9IDA7XG4gICAgY29uc3QgbWF4ViA9ICgxIDw8IG91dEJpdHMpIC0gMTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgaW5CaXRzKSB8IGRhdGFbaV07XG4gICAgICAgIGJpdHMgKz0gaW5CaXRzO1xuICAgICAgICB3aGlsZSAoYml0cyA+PSBvdXRCaXRzKSB7XG4gICAgICAgICAgICBiaXRzIC09IG91dEJpdHM7XG4gICAgICAgICAgICByZXN1bHQucHVzaCgodmFsdWUgPj4gYml0cykgJiBtYXhWKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFkKSB7XG4gICAgICAgIGlmIChiaXRzID4gMCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goKHZhbHVlIDw8IChvdXRCaXRzIC0gYml0cykpICYgbWF4Vik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChiaXRzID49IGluQml0cylcbiAgICAgICAgICAgIHJldHVybiAnRXhjZXNzIHBhZGRpbmcnO1xuICAgICAgICBpZiAoKHZhbHVlIDw8IChvdXRCaXRzIC0gYml0cykpICYgbWF4VilcbiAgICAgICAgICAgIHJldHVybiAnTm9uLXplcm8gcGFkZGluZyc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiB0b1dvcmRzKGJ5dGVzKSB7XG4gICAgcmV0dXJuIGNvbnZlcnQoYnl0ZXMsIDgsIDUsIHRydWUpO1xufVxuZnVuY3Rpb24gZnJvbVdvcmRzVW5zYWZlKHdvcmRzKSB7XG4gICAgY29uc3QgcmVzID0gY29udmVydCh3b3JkcywgNSwgOCwgZmFsc2UpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykpXG4gICAgICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBmcm9tV29yZHMod29yZHMpIHtcbiAgICBjb25zdCByZXMgPSBjb252ZXJ0KHdvcmRzLCA1LCA4LCBmYWxzZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzKSlcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB0aHJvdyBuZXcgRXJyb3IocmVzKTtcbn1cbmZ1bmN0aW9uIGdldExpYnJhcnlGcm9tRW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgICBsZXQgRU5DT0RJTkdfQ09OU1Q7XG4gICAgaWYgKGVuY29kaW5nID09PSAnYmVjaDMyJykge1xuICAgICAgICBFTkNPRElOR19DT05TVCA9IDE7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBFTkNPRElOR19DT05TVCA9IDB4MmJjODMwYTM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVuY29kZShwcmVmaXgsIHdvcmRzLCBMSU1JVCkge1xuICAgICAgICBMSU1JVCA9IExJTUlUIHx8IDkwO1xuICAgICAgICBpZiAocHJlZml4Lmxlbmd0aCArIDcgKyB3b3Jkcy5sZW5ndGggPiBMSU1JVClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4Y2VlZHMgbGVuZ3RoIGxpbWl0Jyk7XG4gICAgICAgIHByZWZpeCA9IHByZWZpeC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBkZXRlcm1pbmUgY2hrIG1vZFxuICAgICAgICBsZXQgY2hrID0gcHJlZml4Q2hrKHByZWZpeCk7XG4gICAgICAgIGlmICh0eXBlb2YgY2hrID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihjaGspO1xuICAgICAgICBsZXQgcmVzdWx0ID0gcHJlZml4ICsgJzEnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBjb25zdCB4ID0gd29yZHNbaV07XG4gICAgICAgICAgICBpZiAoeCA+PiA1ICE9PSAwKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm9uIDUtYml0IHdvcmQnKTtcbiAgICAgICAgICAgIGNoayA9IHBvbHltb2RTdGVwKGNoaykgXiB4O1xuICAgICAgICAgICAgcmVzdWx0ICs9IEFMUEhBQkVULmNoYXJBdCh4KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7ICsraSkge1xuICAgICAgICAgICAgY2hrID0gcG9seW1vZFN0ZXAoY2hrKTtcbiAgICAgICAgfVxuICAgICAgICBjaGsgXj0gRU5DT0RJTkdfQ09OU1Q7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgKytpKSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gKGNoayA+PiAoKDUgLSBpKSAqIDUpKSAmIDB4MWY7XG4gICAgICAgICAgICByZXN1bHQgKz0gQUxQSEFCRVQuY2hhckF0KHYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9fZGVjb2RlKHN0ciwgTElNSVQpIHtcbiAgICAgICAgTElNSVQgPSBMSU1JVCB8fCA5MDtcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPCA4KVxuICAgICAgICAgICAgcmV0dXJuIHN0ciArICcgdG9vIHNob3J0JztcbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPiBMSU1JVClcbiAgICAgICAgICAgIHJldHVybiAnRXhjZWVkcyBsZW5ndGggbGltaXQnO1xuICAgICAgICAvLyBkb24ndCBhbGxvdyBtaXhlZCBjYXNlXG4gICAgICAgIGNvbnN0IGxvd2VyZWQgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdXBwZXJlZCA9IHN0ci50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBpZiAoc3RyICE9PSBsb3dlcmVkICYmIHN0ciAhPT0gdXBwZXJlZClcbiAgICAgICAgICAgIHJldHVybiAnTWl4ZWQtY2FzZSBzdHJpbmcgJyArIHN0cjtcbiAgICAgICAgc3RyID0gbG93ZXJlZDtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBzdHIubGFzdEluZGV4T2YoJzEnKTtcbiAgICAgICAgaWYgKHNwbGl0ID09PSAtMSlcbiAgICAgICAgICAgIHJldHVybiAnTm8gc2VwYXJhdG9yIGNoYXJhY3RlciBmb3IgJyArIHN0cjtcbiAgICAgICAgaWYgKHNwbGl0ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuICdNaXNzaW5nIHByZWZpeCBmb3IgJyArIHN0cjtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gc3RyLnNsaWNlKDAsIHNwbGl0KTtcbiAgICAgICAgY29uc3Qgd29yZENoYXJzID0gc3RyLnNsaWNlKHNwbGl0ICsgMSk7XG4gICAgICAgIGlmICh3b3JkQ2hhcnMubGVuZ3RoIDwgNilcbiAgICAgICAgICAgIHJldHVybiAnRGF0YSB0b28gc2hvcnQnO1xuICAgICAgICBsZXQgY2hrID0gcHJlZml4Q2hrKHByZWZpeCk7XG4gICAgICAgIGlmICh0eXBlb2YgY2hrID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBjaGs7XG4gICAgICAgIGNvbnN0IHdvcmRzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd29yZENoYXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gd29yZENoYXJzLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBBTFBIQUJFVF9NQVBbY107XG4gICAgICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybiAnVW5rbm93biBjaGFyYWN0ZXIgJyArIGM7XG4gICAgICAgICAgICBjaGsgPSBwb2x5bW9kU3RlcChjaGspIF4gdjtcbiAgICAgICAgICAgIC8vIG5vdCBpbiB0aGUgY2hlY2tzdW0/XG4gICAgICAgICAgICBpZiAoaSArIDYgPj0gd29yZENoYXJzLmxlbmd0aClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHdvcmRzLnB1c2godik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoayAhPT0gRU5DT0RJTkdfQ09OU1QpXG4gICAgICAgICAgICByZXR1cm4gJ0ludmFsaWQgY2hlY2tzdW0gZm9yICcgKyBzdHI7XG4gICAgICAgIHJldHVybiB7IHByZWZpeCwgd29yZHMgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVjb2RlVW5zYWZlKHN0ciwgTElNSVQpIHtcbiAgICAgICAgY29uc3QgcmVzID0gX19kZWNvZGUoc3RyLCBMSU1JVCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlY29kZShzdHIsIExJTUlUKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IF9fZGVjb2RlKHN0ciwgTElNSVQpO1xuICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVjb2RlVW5zYWZlLFxuICAgICAgICBkZWNvZGUsXG4gICAgICAgIGVuY29kZSxcbiAgICAgICAgdG9Xb3JkcyxcbiAgICAgICAgZnJvbVdvcmRzVW5zYWZlLFxuICAgICAgICBmcm9tV29yZHMsXG4gICAgfTtcbn1cbmV4cG9ydHMuYmVjaDMyID0gZ2V0TGlicmFyeUZyb21FbmNvZGluZygnYmVjaDMyJyk7XG5leHBvcnRzLmJlY2gzMm0gPSBnZXRMaWJyYXJ5RnJvbUVuY29kaW5nKCdiZWNoMzJtJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bech32/dist/index.js\n\n}")},"./node_modules/bip174/src/lib/combiner/index.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst parser_1 = __webpack_require__(/*! ../parser */ \"./node_modules/bip174/src/lib/parser/index.js\");\nfunction combine(psbts) {\n const self = psbts[0];\n const selfKeyVals = parser_1.psbtToKeyVals(self);\n const others = psbts.slice(1);\n if (others.length === 0) throw new Error('Combine: Nothing to combine');\n const selfTx = getTx(self);\n if (selfTx === undefined) {\n throw new Error('Combine: Self missing transaction');\n }\n const selfGlobalSet = getKeySet(selfKeyVals.globalKeyVals);\n const selfInputSets = selfKeyVals.inputKeyVals.map(getKeySet);\n const selfOutputSets = selfKeyVals.outputKeyVals.map(getKeySet);\n for (const other of others) {\n const otherTx = getTx(other);\n if (\n otherTx === undefined ||\n !otherTx.toBuffer().equals(selfTx.toBuffer())\n ) {\n throw new Error(\n 'Combine: One of the Psbts does not have the same transaction.',\n );\n }\n const otherKeyVals = parser_1.psbtToKeyVals(other);\n const otherGlobalSet = getKeySet(otherKeyVals.globalKeyVals);\n otherGlobalSet.forEach(\n keyPusher(\n selfGlobalSet,\n selfKeyVals.globalKeyVals,\n otherKeyVals.globalKeyVals,\n ),\n );\n const otherInputSets = otherKeyVals.inputKeyVals.map(getKeySet);\n otherInputSets.forEach((inputSet, idx) =>\n inputSet.forEach(\n keyPusher(\n selfInputSets[idx],\n selfKeyVals.inputKeyVals[idx],\n otherKeyVals.inputKeyVals[idx],\n ),\n ),\n );\n const otherOutputSets = otherKeyVals.outputKeyVals.map(getKeySet);\n otherOutputSets.forEach((outputSet, idx) =>\n outputSet.forEach(\n keyPusher(\n selfOutputSets[idx],\n selfKeyVals.outputKeyVals[idx],\n otherKeyVals.outputKeyVals[idx],\n ),\n ),\n );\n }\n return parser_1.psbtFromKeyVals(selfTx, {\n globalMapKeyVals: selfKeyVals.globalKeyVals,\n inputKeyVals: selfKeyVals.inputKeyVals,\n outputKeyVals: selfKeyVals.outputKeyVals,\n });\n}\nexports.combine = combine;\nfunction keyPusher(selfSet, selfKeyVals, otherKeyVals) {\n return key => {\n if (selfSet.has(key)) return;\n const newKv = otherKeyVals.filter(kv => kv.key.toString('hex') === key)[0];\n selfKeyVals.push(newKv);\n selfSet.add(key);\n };\n}\nfunction getTx(psbt) {\n return psbt.globalMap.unsignedTx;\n}\nfunction getKeySet(keyVals) {\n const set = new Set();\n keyVals.forEach(keyVal => {\n const hex = keyVal.key.toString('hex');\n if (set.has(hex))\n throw new Error('Combine: KeyValue Map keys should be unique');\n set.add(hex);\n });\n return set;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29tYmluZXIvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsaUJBQWlCLG1CQUFPLENBQUMsZ0VBQVc7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpcDE3NC9zcmMvbGliL2NvbWJpbmVyL2luZGV4LmpzP2ExY2IiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHBhcnNlcl8xID0gcmVxdWlyZSgnLi4vcGFyc2VyJyk7XG5mdW5jdGlvbiBjb21iaW5lKHBzYnRzKSB7XG4gIGNvbnN0IHNlbGYgPSBwc2J0c1swXTtcbiAgY29uc3Qgc2VsZktleVZhbHMgPSBwYXJzZXJfMS5wc2J0VG9LZXlWYWxzKHNlbGYpO1xuICBjb25zdCBvdGhlcnMgPSBwc2J0cy5zbGljZSgxKTtcbiAgaWYgKG90aGVycy5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcignQ29tYmluZTogTm90aGluZyB0byBjb21iaW5lJyk7XG4gIGNvbnN0IHNlbGZUeCA9IGdldFR4KHNlbGYpO1xuICBpZiAoc2VsZlR4ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbWJpbmU6IFNlbGYgbWlzc2luZyB0cmFuc2FjdGlvbicpO1xuICB9XG4gIGNvbnN0IHNlbGZHbG9iYWxTZXQgPSBnZXRLZXlTZXQoc2VsZktleVZhbHMuZ2xvYmFsS2V5VmFscyk7XG4gIGNvbnN0IHNlbGZJbnB1dFNldHMgPSBzZWxmS2V5VmFscy5pbnB1dEtleVZhbHMubWFwKGdldEtleVNldCk7XG4gIGNvbnN0IHNlbGZPdXRwdXRTZXRzID0gc2VsZktleVZhbHMub3V0cHV0S2V5VmFscy5tYXAoZ2V0S2V5U2V0KTtcbiAgZm9yIChjb25zdCBvdGhlciBvZiBvdGhlcnMpIHtcbiAgICBjb25zdCBvdGhlclR4ID0gZ2V0VHgob3RoZXIpO1xuICAgIGlmIChcbiAgICAgIG90aGVyVHggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgIW90aGVyVHgudG9CdWZmZXIoKS5lcXVhbHMoc2VsZlR4LnRvQnVmZmVyKCkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDb21iaW5lOiBPbmUgb2YgdGhlIFBzYnRzIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgdHJhbnNhY3Rpb24uJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IG90aGVyS2V5VmFscyA9IHBhcnNlcl8xLnBzYnRUb0tleVZhbHMob3RoZXIpO1xuICAgIGNvbnN0IG90aGVyR2xvYmFsU2V0ID0gZ2V0S2V5U2V0KG90aGVyS2V5VmFscy5nbG9iYWxLZXlWYWxzKTtcbiAgICBvdGhlckdsb2JhbFNldC5mb3JFYWNoKFxuICAgICAga2V5UHVzaGVyKFxuICAgICAgICBzZWxmR2xvYmFsU2V0LFxuICAgICAgICBzZWxmS2V5VmFscy5nbG9iYWxLZXlWYWxzLFxuICAgICAgICBvdGhlcktleVZhbHMuZ2xvYmFsS2V5VmFscyxcbiAgICAgICksXG4gICAgKTtcbiAgICBjb25zdCBvdGhlcklucHV0U2V0cyA9IG90aGVyS2V5VmFscy5pbnB1dEtleVZhbHMubWFwKGdldEtleVNldCk7XG4gICAgb3RoZXJJbnB1dFNldHMuZm9yRWFjaCgoaW5wdXRTZXQsIGlkeCkgPT5cbiAgICAgIGlucHV0U2V0LmZvckVhY2goXG4gICAgICAgIGtleVB1c2hlcihcbiAgICAgICAgICBzZWxmSW5wdXRTZXRzW2lkeF0sXG4gICAgICAgICAgc2VsZktleVZhbHMuaW5wdXRLZXlWYWxzW2lkeF0sXG4gICAgICAgICAgb3RoZXJLZXlWYWxzLmlucHV0S2V5VmFsc1tpZHhdLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApO1xuICAgIGNvbnN0IG90aGVyT3V0cHV0U2V0cyA9IG90aGVyS2V5VmFscy5vdXRwdXRLZXlWYWxzLm1hcChnZXRLZXlTZXQpO1xuICAgIG90aGVyT3V0cHV0U2V0cy5mb3JFYWNoKChvdXRwdXRTZXQsIGlkeCkgPT5cbiAgICAgIG91dHB1dFNldC5mb3JFYWNoKFxuICAgICAgICBrZXlQdXNoZXIoXG4gICAgICAgICAgc2VsZk91dHB1dFNldHNbaWR4XSxcbiAgICAgICAgICBzZWxmS2V5VmFscy5vdXRwdXRLZXlWYWxzW2lkeF0sXG4gICAgICAgICAgb3RoZXJLZXlWYWxzLm91dHB1dEtleVZhbHNbaWR4XSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcGFyc2VyXzEucHNidEZyb21LZXlWYWxzKHNlbGZUeCwge1xuICAgIGdsb2JhbE1hcEtleVZhbHM6IHNlbGZLZXlWYWxzLmdsb2JhbEtleVZhbHMsXG4gICAgaW5wdXRLZXlWYWxzOiBzZWxmS2V5VmFscy5pbnB1dEtleVZhbHMsXG4gICAgb3V0cHV0S2V5VmFsczogc2VsZktleVZhbHMub3V0cHV0S2V5VmFscyxcbiAgfSk7XG59XG5leHBvcnRzLmNvbWJpbmUgPSBjb21iaW5lO1xuZnVuY3Rpb24ga2V5UHVzaGVyKHNlbGZTZXQsIHNlbGZLZXlWYWxzLCBvdGhlcktleVZhbHMpIHtcbiAgcmV0dXJuIGtleSA9PiB7XG4gICAgaWYgKHNlbGZTZXQuaGFzKGtleSkpIHJldHVybjtcbiAgICBjb25zdCBuZXdLdiA9IG90aGVyS2V5VmFscy5maWx0ZXIoa3YgPT4ga3Yua2V5LnRvU3RyaW5nKCdoZXgnKSA9PT0ga2V5KVswXTtcbiAgICBzZWxmS2V5VmFscy5wdXNoKG5ld0t2KTtcbiAgICBzZWxmU2V0LmFkZChrZXkpO1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0VHgocHNidCkge1xuICByZXR1cm4gcHNidC5nbG9iYWxNYXAudW5zaWduZWRUeDtcbn1cbmZ1bmN0aW9uIGdldEtleVNldChrZXlWYWxzKSB7XG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAga2V5VmFscy5mb3JFYWNoKGtleVZhbCA9PiB7XG4gICAgY29uc3QgaGV4ID0ga2V5VmFsLmtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgaWYgKHNldC5oYXMoaGV4KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29tYmluZTogS2V5VmFsdWUgTWFwIGtleXMgc2hvdWxkIGJlIHVuaXF1ZScpO1xuICAgIHNldC5hZGQoaGV4KTtcbiAgfSk7XG4gIHJldHVybiBzZXQ7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/combiner/index.js\n\n}")},"./node_modules/bip174/src/lib/converter/global/globalXpub.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nconst range = n => [...Array(n).keys()];\nfunction decode(keyVal) {\n if (keyVal.key[0] !== typeFields_1.GlobalTypes.GLOBAL_XPUB) {\n throw new Error(\n 'Decode Error: could not decode globalXpub with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n if (keyVal.key.length !== 79 || ![2, 3].includes(keyVal.key[46])) {\n throw new Error(\n 'Decode Error: globalXpub has invalid extended pubkey in key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n if ((keyVal.value.length / 4) % 1 !== 0) {\n throw new Error(\n 'Decode Error: Global GLOBAL_XPUB value length should be multiple of 4',\n );\n }\n const extendedPubkey = keyVal.key.slice(1);\n const data = {\n masterFingerprint: keyVal.value.slice(0, 4),\n extendedPubkey,\n path: 'm',\n };\n for (const i of range(keyVal.value.length / 4 - 1)) {\n const val = keyVal.value.readUInt32LE(i * 4 + 4);\n const isHard = !!(val & 0x80000000);\n const idx = val & 0x7fffffff;\n data.path += '/' + idx.toString(10) + (isHard ? \"'\" : '');\n }\n return data;\n}\nexports.decode = decode;\nfunction encode(data) {\n const head = Buffer.from([typeFields_1.GlobalTypes.GLOBAL_XPUB]);\n const key = Buffer.concat([head, data.extendedPubkey]);\n const splitPath = data.path.split('/');\n const value = Buffer.allocUnsafe(splitPath.length * 4);\n data.masterFingerprint.copy(value, 0);\n let offset = 4;\n splitPath.slice(1).forEach(level => {\n const isHard = level.slice(-1) === \"'\";\n let num = 0x7fffffff & parseInt(isHard ? level.slice(0, -1) : level, 10);\n if (isHard) num += 0x80000000;\n value.writeUInt32LE(num, offset);\n offset += 4;\n });\n return {\n key,\n value,\n };\n}\nexports.encode = encode;\nexports.expected =\n '{ masterFingerprint: Buffer; extendedPubkey: Buffer; path: string; }';\nfunction check(data) {\n const epk = data.extendedPubkey;\n const mfp = data.masterFingerprint;\n const p = data.path;\n return (\n Buffer.isBuffer(epk) &&\n epk.length === 78 &&\n [2, 3].indexOf(epk[45]) > -1 &&\n Buffer.isBuffer(mfp) &&\n mfp.length === 4 &&\n typeof p === 'string' &&\n !!p.match(/^m(\\/\\d+'?)*$/)\n );\n}\nexports.check = check;\nfunction canAddToArray(array, item, dupeSet) {\n const dupeString = item.extendedPubkey.toString('hex');\n if (dupeSet.has(dupeString)) return false;\n dupeSet.add(dupeString);\n return (\n array.filter(v => v.extendedPubkey.equals(item.extendedPubkey)).length === 0\n );\n}\nexports.canAddToArray = canAddToArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2dsb2JhbC9nbG9iYWxYcHViLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxxQkFBcUIsbUJBQU8sQ0FBQyxxRUFBa0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGNBQWMsTUFBTTtBQUNwQjtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxnQkFBZ0I7QUFDaEIsS0FBSywyQkFBMkIsd0JBQXdCLGVBQWU7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTTtBQUNWO0FBQ0E7QUFDQSxJQUFJLE1BQU07QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvZ2xvYmFsL2dsb2JhbFhwdWIuanM/YjQ4MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHlwZUZpZWxkc18xID0gcmVxdWlyZSgnLi4vLi4vdHlwZUZpZWxkcycpO1xuY29uc3QgcmFuZ2UgPSBuID0+IFsuLi5BcnJheShuKS5rZXlzKCldO1xuZnVuY3Rpb24gZGVjb2RlKGtleVZhbCkge1xuICBpZiAoa2V5VmFsLmtleVswXSAhPT0gdHlwZUZpZWxkc18xLkdsb2JhbFR5cGVzLkdMT0JBTF9YUFVCKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0RlY29kZSBFcnJvcjogY291bGQgbm90IGRlY29kZSBnbG9iYWxYcHViIHdpdGgga2V5IDB4JyArXG4gICAgICAgIGtleVZhbC5rZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgICk7XG4gIH1cbiAgaWYgKGtleVZhbC5rZXkubGVuZ3RoICE9PSA3OSB8fCAhWzIsIDNdLmluY2x1ZGVzKGtleVZhbC5rZXlbNDZdKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdEZWNvZGUgRXJyb3I6IGdsb2JhbFhwdWIgaGFzIGludmFsaWQgZXh0ZW5kZWQgcHVia2V5IGluIGtleSAweCcgK1xuICAgICAgICBrZXlWYWwua2V5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICApO1xuICB9XG4gIGlmICgoa2V5VmFsLnZhbHVlLmxlbmd0aCAvIDQpICUgMSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdEZWNvZGUgRXJyb3I6IEdsb2JhbCBHTE9CQUxfWFBVQiB2YWx1ZSBsZW5ndGggc2hvdWxkIGJlIG11bHRpcGxlIG9mIDQnLFxuICAgICk7XG4gIH1cbiAgY29uc3QgZXh0ZW5kZWRQdWJrZXkgPSBrZXlWYWwua2V5LnNsaWNlKDEpO1xuICBjb25zdCBkYXRhID0ge1xuICAgIG1hc3RlckZpbmdlcnByaW50OiBrZXlWYWwudmFsdWUuc2xpY2UoMCwgNCksXG4gICAgZXh0ZW5kZWRQdWJrZXksXG4gICAgcGF0aDogJ20nLFxuICB9O1xuICBmb3IgKGNvbnN0IGkgb2YgcmFuZ2Uoa2V5VmFsLnZhbHVlLmxlbmd0aCAvIDQgLSAxKSkge1xuICAgIGNvbnN0IHZhbCA9IGtleVZhbC52YWx1ZS5yZWFkVUludDMyTEUoaSAqIDQgKyA0KTtcbiAgICBjb25zdCBpc0hhcmQgPSAhISh2YWwgJiAweDgwMDAwMDAwKTtcbiAgICBjb25zdCBpZHggPSB2YWwgJiAweDdmZmZmZmZmO1xuICAgIGRhdGEucGF0aCArPSAnLycgKyBpZHgudG9TdHJpbmcoMTApICsgKGlzSGFyZCA/IFwiJ1wiIDogJycpO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuZXhwb3J0cy5kZWNvZGUgPSBkZWNvZGU7XG5mdW5jdGlvbiBlbmNvZGUoZGF0YSkge1xuICBjb25zdCBoZWFkID0gQnVmZmVyLmZyb20oW3R5cGVGaWVsZHNfMS5HbG9iYWxUeXBlcy5HTE9CQUxfWFBVQl0pO1xuICBjb25zdCBrZXkgPSBCdWZmZXIuY29uY2F0KFtoZWFkLCBkYXRhLmV4dGVuZGVkUHVia2V5XSk7XG4gIGNvbnN0IHNwbGl0UGF0aCA9IGRhdGEucGF0aC5zcGxpdCgnLycpO1xuICBjb25zdCB2YWx1ZSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShzcGxpdFBhdGgubGVuZ3RoICogNCk7XG4gIGRhdGEubWFzdGVyRmluZ2VycHJpbnQuY29weSh2YWx1ZSwgMCk7XG4gIGxldCBvZmZzZXQgPSA0O1xuICBzcGxpdFBhdGguc2xpY2UoMSkuZm9yRWFjaChsZXZlbCA9PiB7XG4gICAgY29uc3QgaXNIYXJkID0gbGV2ZWwuc2xpY2UoLTEpID09PSBcIidcIjtcbiAgICBsZXQgbnVtID0gMHg3ZmZmZmZmZiAmIHBhcnNlSW50KGlzSGFyZCA/IGxldmVsLnNsaWNlKDAsIC0xKSA6IGxldmVsLCAxMCk7XG4gICAgaWYgKGlzSGFyZCkgbnVtICs9IDB4ODAwMDAwMDA7XG4gICAgdmFsdWUud3JpdGVVSW50MzJMRShudW0sIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IDQ7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGtleSxcbiAgICB2YWx1ZSxcbiAgfTtcbn1cbmV4cG9ydHMuZW5jb2RlID0gZW5jb2RlO1xuZXhwb3J0cy5leHBlY3RlZCA9XG4gICd7IG1hc3RlckZpbmdlcnByaW50OiBCdWZmZXI7IGV4dGVuZGVkUHVia2V5OiBCdWZmZXI7IHBhdGg6IHN0cmluZzsgfSc7XG5mdW5jdGlvbiBjaGVjayhkYXRhKSB7XG4gIGNvbnN0IGVwayA9IGRhdGEuZXh0ZW5kZWRQdWJrZXk7XG4gIGNvbnN0IG1mcCA9IGRhdGEubWFzdGVyRmluZ2VycHJpbnQ7XG4gIGNvbnN0IHAgPSBkYXRhLnBhdGg7XG4gIHJldHVybiAoXG4gICAgQnVmZmVyLmlzQnVmZmVyKGVwaykgJiZcbiAgICBlcGsubGVuZ3RoID09PSA3OCAmJlxuICAgIFsyLCAzXS5pbmRleE9mKGVwa1s0NV0pID4gLTEgJiZcbiAgICBCdWZmZXIuaXNCdWZmZXIobWZwKSAmJlxuICAgIG1mcC5sZW5ndGggPT09IDQgJiZcbiAgICB0eXBlb2YgcCA9PT0gJ3N0cmluZycgJiZcbiAgICAhIXAubWF0Y2goL15tKFxcL1xcZCsnPykqJC8pXG4gICk7XG59XG5leHBvcnRzLmNoZWNrID0gY2hlY2s7XG5mdW5jdGlvbiBjYW5BZGRUb0FycmF5KGFycmF5LCBpdGVtLCBkdXBlU2V0KSB7XG4gIGNvbnN0IGR1cGVTdHJpbmcgPSBpdGVtLmV4dGVuZGVkUHVia2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgaWYgKGR1cGVTZXQuaGFzKGR1cGVTdHJpbmcpKSByZXR1cm4gZmFsc2U7XG4gIGR1cGVTZXQuYWRkKGR1cGVTdHJpbmcpO1xuICByZXR1cm4gKFxuICAgIGFycmF5LmZpbHRlcih2ID0+IHYuZXh0ZW5kZWRQdWJrZXkuZXF1YWxzKGl0ZW0uZXh0ZW5kZWRQdWJrZXkpKS5sZW5ndGggPT09IDBcbiAgKTtcbn1cbmV4cG9ydHMuY2FuQWRkVG9BcnJheSA9IGNhbkFkZFRvQXJyYXk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/global/globalXpub.js\n\n}")},"./node_modules/bip174/src/lib/converter/global/unsignedTx.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer;\n\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ "./node_modules/bip174/src/lib/typeFields.js");\nfunction encode(data) {\n return {\n key: Buffer.from([typeFields_1.GlobalTypes.UNSIGNED_TX]),\n value: data.toBuffer(),\n };\n}\nexports.encode = encode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2dsb2JhbC91bnNpZ25lZFR4LmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxxQkFBcUIsbUJBQU8sQ0FBQyxxRUFBa0I7QUFDL0M7QUFDQTtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGNBQWMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvZ2xvYmFsL3Vuc2lnbmVkVHguanM/OTg3MCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHlwZUZpZWxkc18xID0gcmVxdWlyZSgnLi4vLi4vdHlwZUZpZWxkcycpO1xuZnVuY3Rpb24gZW5jb2RlKGRhdGEpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IEJ1ZmZlci5mcm9tKFt0eXBlRmllbGRzXzEuR2xvYmFsVHlwZXMuVU5TSUdORURfVFhdKSxcbiAgICB2YWx1ZTogZGF0YS50b0J1ZmZlcigpLFxuICB9O1xufVxuZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/global/unsignedTx.js\n\n}')},"./node_modules/bip174/src/lib/converter/index.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../typeFields */ "./node_modules/bip174/src/lib/typeFields.js");\nconst globalXpub = __webpack_require__(/*! ./global/globalXpub */ "./node_modules/bip174/src/lib/converter/global/globalXpub.js");\nconst unsignedTx = __webpack_require__(/*! ./global/unsignedTx */ "./node_modules/bip174/src/lib/converter/global/unsignedTx.js");\nconst finalScriptSig = __webpack_require__(/*! ./input/finalScriptSig */ "./node_modules/bip174/src/lib/converter/input/finalScriptSig.js");\nconst finalScriptWitness = __webpack_require__(/*! ./input/finalScriptWitness */ "./node_modules/bip174/src/lib/converter/input/finalScriptWitness.js");\nconst nonWitnessUtxo = __webpack_require__(/*! ./input/nonWitnessUtxo */ "./node_modules/bip174/src/lib/converter/input/nonWitnessUtxo.js");\nconst partialSig = __webpack_require__(/*! ./input/partialSig */ "./node_modules/bip174/src/lib/converter/input/partialSig.js");\nconst porCommitment = __webpack_require__(/*! ./input/porCommitment */ "./node_modules/bip174/src/lib/converter/input/porCommitment.js");\nconst sighashType = __webpack_require__(/*! ./input/sighashType */ "./node_modules/bip174/src/lib/converter/input/sighashType.js");\nconst tapKeySig = __webpack_require__(/*! ./input/tapKeySig */ "./node_modules/bip174/src/lib/converter/input/tapKeySig.js");\nconst tapLeafScript = __webpack_require__(/*! ./input/tapLeafScript */ "./node_modules/bip174/src/lib/converter/input/tapLeafScript.js");\nconst tapMerkleRoot = __webpack_require__(/*! ./input/tapMerkleRoot */ "./node_modules/bip174/src/lib/converter/input/tapMerkleRoot.js");\nconst tapScriptSig = __webpack_require__(/*! ./input/tapScriptSig */ "./node_modules/bip174/src/lib/converter/input/tapScriptSig.js");\nconst witnessUtxo = __webpack_require__(/*! ./input/witnessUtxo */ "./node_modules/bip174/src/lib/converter/input/witnessUtxo.js");\nconst tapTree = __webpack_require__(/*! ./output/tapTree */ "./node_modules/bip174/src/lib/converter/output/tapTree.js");\nconst bip32Derivation = __webpack_require__(/*! ./shared/bip32Derivation */ "./node_modules/bip174/src/lib/converter/shared/bip32Derivation.js");\nconst checkPubkey = __webpack_require__(/*! ./shared/checkPubkey */ "./node_modules/bip174/src/lib/converter/shared/checkPubkey.js");\nconst redeemScript = __webpack_require__(/*! ./shared/redeemScript */ "./node_modules/bip174/src/lib/converter/shared/redeemScript.js");\nconst tapBip32Derivation = __webpack_require__(/*! ./shared/tapBip32Derivation */ "./node_modules/bip174/src/lib/converter/shared/tapBip32Derivation.js");\nconst tapInternalKey = __webpack_require__(/*! ./shared/tapInternalKey */ "./node_modules/bip174/src/lib/converter/shared/tapInternalKey.js");\nconst witnessScript = __webpack_require__(/*! ./shared/witnessScript */ "./node_modules/bip174/src/lib/converter/shared/witnessScript.js");\nconst globals = {\n unsignedTx,\n globalXpub,\n // pass an Array of key bytes that require pubkey beside the key\n checkPubkey: checkPubkey.makeChecker([]),\n};\nexports.globals = globals;\nconst inputs = {\n nonWitnessUtxo,\n partialSig,\n sighashType,\n finalScriptSig,\n finalScriptWitness,\n porCommitment,\n witnessUtxo,\n bip32Derivation: bip32Derivation.makeConverter(\n typeFields_1.InputTypes.BIP32_DERIVATION,\n ),\n redeemScript: redeemScript.makeConverter(\n typeFields_1.InputTypes.REDEEM_SCRIPT,\n ),\n witnessScript: witnessScript.makeConverter(\n typeFields_1.InputTypes.WITNESS_SCRIPT,\n ),\n checkPubkey: checkPubkey.makeChecker([\n typeFields_1.InputTypes.PARTIAL_SIG,\n typeFields_1.InputTypes.BIP32_DERIVATION,\n ]),\n tapKeySig,\n tapScriptSig,\n tapLeafScript,\n tapBip32Derivation: tapBip32Derivation.makeConverter(\n typeFields_1.InputTypes.TAP_BIP32_DERIVATION,\n ),\n tapInternalKey: tapInternalKey.makeConverter(\n typeFields_1.InputTypes.TAP_INTERNAL_KEY,\n ),\n tapMerkleRoot,\n};\nexports.inputs = inputs;\nconst outputs = {\n bip32Derivation: bip32Derivation.makeConverter(\n typeFields_1.OutputTypes.BIP32_DERIVATION,\n ),\n redeemScript: redeemScript.makeConverter(\n typeFields_1.OutputTypes.REDEEM_SCRIPT,\n ),\n witnessScript: witnessScript.makeConverter(\n typeFields_1.OutputTypes.WITNESS_SCRIPT,\n ),\n checkPubkey: checkPubkey.makeChecker([\n typeFields_1.OutputTypes.BIP32_DERIVATION,\n ]),\n tapBip32Derivation: tapBip32Derivation.makeConverter(\n typeFields_1.OutputTypes.TAP_BIP32_DERIVATION,\n ),\n tapTree,\n tapInternalKey: tapInternalKey.makeConverter(\n typeFields_1.OutputTypes.TAP_INTERNAL_KEY,\n ),\n};\nexports.outputs = outputs;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHFCQUFxQixtQkFBTyxDQUFDLGtFQUFlO0FBQzVDLG1CQUFtQixtQkFBTyxDQUFDLHlGQUFxQjtBQUNoRCxtQkFBbUIsbUJBQU8sQ0FBQyx5RkFBcUI7QUFDaEQsdUJBQXVCLG1CQUFPLENBQUMsK0ZBQXdCO0FBQ3ZELDJCQUEyQixtQkFBTyxDQUFDLHVHQUE0QjtBQUMvRCx1QkFBdUIsbUJBQU8sQ0FBQywrRkFBd0I7QUFDdkQsbUJBQW1CLG1CQUFPLENBQUMsdUZBQW9CO0FBQy9DLHNCQUFzQixtQkFBTyxDQUFDLDZGQUF1QjtBQUNyRCxvQkFBb0IsbUJBQU8sQ0FBQyx5RkFBcUI7QUFDakQsa0JBQWtCLG1CQUFPLENBQUMscUZBQW1CO0FBQzdDLHNCQUFzQixtQkFBTyxDQUFDLDZGQUF1QjtBQUNyRCxzQkFBc0IsbUJBQU8sQ0FBQyw2RkFBdUI7QUFDckQscUJBQXFCLG1CQUFPLENBQUMsMkZBQXNCO0FBQ25ELG9CQUFvQixtQkFBTyxDQUFDLHlGQUFxQjtBQUNqRCxnQkFBZ0IsbUJBQU8sQ0FBQyxtRkFBa0I7QUFDMUMsd0JBQXdCLG1CQUFPLENBQUMsbUdBQTBCO0FBQzFELG9CQUFvQixtQkFBTyxDQUFDLDJGQUFzQjtBQUNsRCxxQkFBcUIsbUJBQU8sQ0FBQyw2RkFBdUI7QUFDcEQsMkJBQTJCLG1CQUFPLENBQUMseUdBQTZCO0FBQ2hFLHVCQUF1QixtQkFBTyxDQUFDLGlHQUF5QjtBQUN4RCxzQkFBc0IsbUJBQU8sQ0FBQywrRkFBd0I7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpcDE3NC9zcmMvbGliL2NvbnZlcnRlci9pbmRleC5qcz8zY2ZhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0eXBlRmllbGRzXzEgPSByZXF1aXJlKCcuLi90eXBlRmllbGRzJyk7XG5jb25zdCBnbG9iYWxYcHViID0gcmVxdWlyZSgnLi9nbG9iYWwvZ2xvYmFsWHB1YicpO1xuY29uc3QgdW5zaWduZWRUeCA9IHJlcXVpcmUoJy4vZ2xvYmFsL3Vuc2lnbmVkVHgnKTtcbmNvbnN0IGZpbmFsU2NyaXB0U2lnID0gcmVxdWlyZSgnLi9pbnB1dC9maW5hbFNjcmlwdFNpZycpO1xuY29uc3QgZmluYWxTY3JpcHRXaXRuZXNzID0gcmVxdWlyZSgnLi9pbnB1dC9maW5hbFNjcmlwdFdpdG5lc3MnKTtcbmNvbnN0IG5vbldpdG5lc3NVdHhvID0gcmVxdWlyZSgnLi9pbnB1dC9ub25XaXRuZXNzVXR4bycpO1xuY29uc3QgcGFydGlhbFNpZyA9IHJlcXVpcmUoJy4vaW5wdXQvcGFydGlhbFNpZycpO1xuY29uc3QgcG9yQ29tbWl0bWVudCA9IHJlcXVpcmUoJy4vaW5wdXQvcG9yQ29tbWl0bWVudCcpO1xuY29uc3Qgc2lnaGFzaFR5cGUgPSByZXF1aXJlKCcuL2lucHV0L3NpZ2hhc2hUeXBlJyk7XG5jb25zdCB0YXBLZXlTaWcgPSByZXF1aXJlKCcuL2lucHV0L3RhcEtleVNpZycpO1xuY29uc3QgdGFwTGVhZlNjcmlwdCA9IHJlcXVpcmUoJy4vaW5wdXQvdGFwTGVhZlNjcmlwdCcpO1xuY29uc3QgdGFwTWVya2xlUm9vdCA9IHJlcXVpcmUoJy4vaW5wdXQvdGFwTWVya2xlUm9vdCcpO1xuY29uc3QgdGFwU2NyaXB0U2lnID0gcmVxdWlyZSgnLi9pbnB1dC90YXBTY3JpcHRTaWcnKTtcbmNvbnN0IHdpdG5lc3NVdHhvID0gcmVxdWlyZSgnLi9pbnB1dC93aXRuZXNzVXR4bycpO1xuY29uc3QgdGFwVHJlZSA9IHJlcXVpcmUoJy4vb3V0cHV0L3RhcFRyZWUnKTtcbmNvbnN0IGJpcDMyRGVyaXZhdGlvbiA9IHJlcXVpcmUoJy4vc2hhcmVkL2JpcDMyRGVyaXZhdGlvbicpO1xuY29uc3QgY2hlY2tQdWJrZXkgPSByZXF1aXJlKCcuL3NoYXJlZC9jaGVja1B1YmtleScpO1xuY29uc3QgcmVkZWVtU2NyaXB0ID0gcmVxdWlyZSgnLi9zaGFyZWQvcmVkZWVtU2NyaXB0Jyk7XG5jb25zdCB0YXBCaXAzMkRlcml2YXRpb24gPSByZXF1aXJlKCcuL3NoYXJlZC90YXBCaXAzMkRlcml2YXRpb24nKTtcbmNvbnN0IHRhcEludGVybmFsS2V5ID0gcmVxdWlyZSgnLi9zaGFyZWQvdGFwSW50ZXJuYWxLZXknKTtcbmNvbnN0IHdpdG5lc3NTY3JpcHQgPSByZXF1aXJlKCcuL3NoYXJlZC93aXRuZXNzU2NyaXB0Jyk7XG5jb25zdCBnbG9iYWxzID0ge1xuICB1bnNpZ25lZFR4LFxuICBnbG9iYWxYcHViLFxuICAvLyBwYXNzIGFuIEFycmF5IG9mIGtleSBieXRlcyB0aGF0IHJlcXVpcmUgcHVia2V5IGJlc2lkZSB0aGUga2V5XG4gIGNoZWNrUHVia2V5OiBjaGVja1B1YmtleS5tYWtlQ2hlY2tlcihbXSksXG59O1xuZXhwb3J0cy5nbG9iYWxzID0gZ2xvYmFscztcbmNvbnN0IGlucHV0cyA9IHtcbiAgbm9uV2l0bmVzc1V0eG8sXG4gIHBhcnRpYWxTaWcsXG4gIHNpZ2hhc2hUeXBlLFxuICBmaW5hbFNjcmlwdFNpZyxcbiAgZmluYWxTY3JpcHRXaXRuZXNzLFxuICBwb3JDb21taXRtZW50LFxuICB3aXRuZXNzVXR4byxcbiAgYmlwMzJEZXJpdmF0aW9uOiBiaXAzMkRlcml2YXRpb24ubWFrZUNvbnZlcnRlcihcbiAgICB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5CSVAzMl9ERVJJVkFUSU9OLFxuICApLFxuICByZWRlZW1TY3JpcHQ6IHJlZGVlbVNjcmlwdC5tYWtlQ29udmVydGVyKFxuICAgIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlJFREVFTV9TQ1JJUFQsXG4gICksXG4gIHdpdG5lc3NTY3JpcHQ6IHdpdG5lc3NTY3JpcHQubWFrZUNvbnZlcnRlcihcbiAgICB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5XSVRORVNTX1NDUklQVCxcbiAgKSxcbiAgY2hlY2tQdWJrZXk6IGNoZWNrUHVia2V5Lm1ha2VDaGVja2VyKFtcbiAgICB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5QQVJUSUFMX1NJRyxcbiAgICB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5CSVAzMl9ERVJJVkFUSU9OLFxuICBdKSxcbiAgdGFwS2V5U2lnLFxuICB0YXBTY3JpcHRTaWcsXG4gIHRhcExlYWZTY3JpcHQsXG4gIHRhcEJpcDMyRGVyaXZhdGlvbjogdGFwQmlwMzJEZXJpdmF0aW9uLm1ha2VDb252ZXJ0ZXIoXG4gICAgdHlwZUZpZWxkc18xLklucHV0VHlwZXMuVEFQX0JJUDMyX0RFUklWQVRJT04sXG4gICksXG4gIHRhcEludGVybmFsS2V5OiB0YXBJbnRlcm5hbEtleS5tYWtlQ29udmVydGVyKFxuICAgIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlRBUF9JTlRFUk5BTF9LRVksXG4gICksXG4gIHRhcE1lcmtsZVJvb3QsXG59O1xuZXhwb3J0cy5pbnB1dHMgPSBpbnB1dHM7XG5jb25zdCBvdXRwdXRzID0ge1xuICBiaXAzMkRlcml2YXRpb246IGJpcDMyRGVyaXZhdGlvbi5tYWtlQ29udmVydGVyKFxuICAgIHR5cGVGaWVsZHNfMS5PdXRwdXRUeXBlcy5CSVAzMl9ERVJJVkFUSU9OLFxuICApLFxuICByZWRlZW1TY3JpcHQ6IHJlZGVlbVNjcmlwdC5tYWtlQ29udmVydGVyKFxuICAgIHR5cGVGaWVsZHNfMS5PdXRwdXRUeXBlcy5SRURFRU1fU0NSSVBULFxuICApLFxuICB3aXRuZXNzU2NyaXB0OiB3aXRuZXNzU2NyaXB0Lm1ha2VDb252ZXJ0ZXIoXG4gICAgdHlwZUZpZWxkc18xLk91dHB1dFR5cGVzLldJVE5FU1NfU0NSSVBULFxuICApLFxuICBjaGVja1B1YmtleTogY2hlY2tQdWJrZXkubWFrZUNoZWNrZXIoW1xuICAgIHR5cGVGaWVsZHNfMS5PdXRwdXRUeXBlcy5CSVAzMl9ERVJJVkFUSU9OLFxuICBdKSxcbiAgdGFwQmlwMzJEZXJpdmF0aW9uOiB0YXBCaXAzMkRlcml2YXRpb24ubWFrZUNvbnZlcnRlcihcbiAgICB0eXBlRmllbGRzXzEuT3V0cHV0VHlwZXMuVEFQX0JJUDMyX0RFUklWQVRJT04sXG4gICksXG4gIHRhcFRyZWUsXG4gIHRhcEludGVybmFsS2V5OiB0YXBJbnRlcm5hbEtleS5tYWtlQ29udmVydGVyKFxuICAgIHR5cGVGaWVsZHNfMS5PdXRwdXRUeXBlcy5UQVBfSU5URVJOQUxfS0VZLFxuICApLFxufTtcbmV4cG9ydHMub3V0cHV0cyA9IG91dHB1dHM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/index.js\n\n}')},"./node_modules/bip174/src/lib/converter/input/finalScriptSig.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nfunction decode(keyVal) {\n if (keyVal.key[0] !== typeFields_1.InputTypes.FINAL_SCRIPTSIG) {\n throw new Error(\n 'Decode Error: could not decode finalScriptSig with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n return keyVal.value;\n}\nexports.decode = decode;\nfunction encode(data) {\n const key = Buffer.from([typeFields_1.InputTypes.FINAL_SCRIPTSIG]);\n return {\n key,\n value: data,\n };\n}\nexports.encode = encode;\nexports.expected = 'Buffer';\nfunction check(data) {\n return Buffer.isBuffer(data);\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n return !!currentData && !!newData && currentData.finalScriptSig === undefined;\n}\nexports.canAdd = canAdd;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L2ZpbmFsU2NyaXB0U2lnLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxxQkFBcUIsbUJBQU8sQ0FBQyxxRUFBa0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsZ0JBQWdCO0FBQ2hCO0FBQ0EsU0FBUyxNQUFNO0FBQ2Y7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsY0FBYyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpcDE3NC9zcmMvbGliL2NvbnZlcnRlci9pbnB1dC9maW5hbFNjcmlwdFNpZy5qcz83ZWMyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0eXBlRmllbGRzXzEgPSByZXF1aXJlKCcuLi8uLi90eXBlRmllbGRzJyk7XG5mdW5jdGlvbiBkZWNvZGUoa2V5VmFsKSB7XG4gIGlmIChrZXlWYWwua2V5WzBdICE9PSB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5GSU5BTF9TQ1JJUFRTSUcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnRGVjb2RlIEVycm9yOiBjb3VsZCBub3QgZGVjb2RlIGZpbmFsU2NyaXB0U2lnIHdpdGgga2V5IDB4JyArXG4gICAgICAgIGtleVZhbC5rZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGtleVZhbC52YWx1ZTtcbn1cbmV4cG9ydHMuZGVjb2RlID0gZGVjb2RlO1xuZnVuY3Rpb24gZW5jb2RlKGRhdGEpIHtcbiAgY29uc3Qga2V5ID0gQnVmZmVyLmZyb20oW3R5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLkZJTkFMX1NDUklQVFNJR10pO1xuICByZXR1cm4ge1xuICAgIGtleSxcbiAgICB2YWx1ZTogZGF0YSxcbiAgfTtcbn1cbmV4cG9ydHMuZW5jb2RlID0gZW5jb2RlO1xuZXhwb3J0cy5leHBlY3RlZCA9ICdCdWZmZXInO1xuZnVuY3Rpb24gY2hlY2soZGF0YSkge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGRhdGEpO1xufVxuZXhwb3J0cy5jaGVjayA9IGNoZWNrO1xuZnVuY3Rpb24gY2FuQWRkKGN1cnJlbnREYXRhLCBuZXdEYXRhKSB7XG4gIHJldHVybiAhIWN1cnJlbnREYXRhICYmICEhbmV3RGF0YSAmJiBjdXJyZW50RGF0YS5maW5hbFNjcmlwdFNpZyA9PT0gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5jYW5BZGQgPSBjYW5BZGQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/input/finalScriptSig.js\n\n}")},"./node_modules/bip174/src/lib/converter/input/finalScriptWitness.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nfunction decode(keyVal) {\n if (keyVal.key[0] !== typeFields_1.InputTypes.FINAL_SCRIPTWITNESS) {\n throw new Error(\n 'Decode Error: could not decode finalScriptWitness with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n return keyVal.value;\n}\nexports.decode = decode;\nfunction encode(data) {\n const key = Buffer.from([typeFields_1.InputTypes.FINAL_SCRIPTWITNESS]);\n return {\n key,\n value: data,\n };\n}\nexports.encode = encode;\nexports.expected = 'Buffer';\nfunction check(data) {\n return Buffer.isBuffer(data);\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n return (\n !!currentData && !!newData && currentData.finalScriptWitness === undefined\n );\n}\nexports.canAdd = canAdd;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L2ZpbmFsU2NyaXB0V2l0bmVzcy5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QscUJBQXFCLG1CQUFPLENBQUMscUVBQWtCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWMsTUFBTTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLGdCQUFnQjtBQUNoQjtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L2ZpbmFsU2NyaXB0V2l0bmVzcy5qcz8zYWNkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0eXBlRmllbGRzXzEgPSByZXF1aXJlKCcuLi8uLi90eXBlRmllbGRzJyk7XG5mdW5jdGlvbiBkZWNvZGUoa2V5VmFsKSB7XG4gIGlmIChrZXlWYWwua2V5WzBdICE9PSB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5GSU5BTF9TQ1JJUFRXSVRORVNTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0RlY29kZSBFcnJvcjogY291bGQgbm90IGRlY29kZSBmaW5hbFNjcmlwdFdpdG5lc3Mgd2l0aCBrZXkgMHgnICtcbiAgICAgICAga2V5VmFsLmtleS50b1N0cmluZygnaGV4JyksXG4gICAgKTtcbiAgfVxuICByZXR1cm4ga2V5VmFsLnZhbHVlO1xufVxuZXhwb3J0cy5kZWNvZGUgPSBkZWNvZGU7XG5mdW5jdGlvbiBlbmNvZGUoZGF0YSkge1xuICBjb25zdCBrZXkgPSBCdWZmZXIuZnJvbShbdHlwZUZpZWxkc18xLklucHV0VHlwZXMuRklOQUxfU0NSSVBUV0lUTkVTU10pO1xuICByZXR1cm4ge1xuICAgIGtleSxcbiAgICB2YWx1ZTogZGF0YSxcbiAgfTtcbn1cbmV4cG9ydHMuZW5jb2RlID0gZW5jb2RlO1xuZXhwb3J0cy5leHBlY3RlZCA9ICdCdWZmZXInO1xuZnVuY3Rpb24gY2hlY2soZGF0YSkge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGRhdGEpO1xufVxuZXhwb3J0cy5jaGVjayA9IGNoZWNrO1xuZnVuY3Rpb24gY2FuQWRkKGN1cnJlbnREYXRhLCBuZXdEYXRhKSB7XG4gIHJldHVybiAoXG4gICAgISFjdXJyZW50RGF0YSAmJiAhIW5ld0RhdGEgJiYgY3VycmVudERhdGEuZmluYWxTY3JpcHRXaXRuZXNzID09PSB1bmRlZmluZWRcbiAgKTtcbn1cbmV4cG9ydHMuY2FuQWRkID0gY2FuQWRkO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/input/finalScriptWitness.js\n\n}")},"./node_modules/bip174/src/lib/converter/input/nonWitnessUtxo.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nfunction decode(keyVal) {\n if (keyVal.key[0] !== typeFields_1.InputTypes.NON_WITNESS_UTXO) {\n throw new Error(\n 'Decode Error: could not decode nonWitnessUtxo with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n return keyVal.value;\n}\nexports.decode = decode;\nfunction encode(data) {\n return {\n key: Buffer.from([typeFields_1.InputTypes.NON_WITNESS_UTXO]),\n value: data,\n };\n}\nexports.encode = encode;\nexports.expected = 'Buffer';\nfunction check(data) {\n return Buffer.isBuffer(data);\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n return !!currentData && !!newData && currentData.nonWitnessUtxo === undefined;\n}\nexports.canAdd = canAdd;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L25vbldpdG5lc3NVdHhvLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxxQkFBcUIsbUJBQU8sQ0FBQyxxRUFBa0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsZ0JBQWdCO0FBQ2hCO0FBQ0EsU0FBUyxNQUFNO0FBQ2Y7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsY0FBYyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpcDE3NC9zcmMvbGliL2NvbnZlcnRlci9pbnB1dC9ub25XaXRuZXNzVXR4by5qcz83NGJhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0eXBlRmllbGRzXzEgPSByZXF1aXJlKCcuLi8uLi90eXBlRmllbGRzJyk7XG5mdW5jdGlvbiBkZWNvZGUoa2V5VmFsKSB7XG4gIGlmIChrZXlWYWwua2V5WzBdICE9PSB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5OT05fV0lUTkVTU19VVFhPKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0RlY29kZSBFcnJvcjogY291bGQgbm90IGRlY29kZSBub25XaXRuZXNzVXR4byB3aXRoIGtleSAweCcgK1xuICAgICAgICBrZXlWYWwua2V5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICApO1xuICB9XG4gIHJldHVybiBrZXlWYWwudmFsdWU7XG59XG5leHBvcnRzLmRlY29kZSA9IGRlY29kZTtcbmZ1bmN0aW9uIGVuY29kZShkYXRhKSB7XG4gIHJldHVybiB7XG4gICAga2V5OiBCdWZmZXIuZnJvbShbdHlwZUZpZWxkc18xLklucHV0VHlwZXMuTk9OX1dJVE5FU1NfVVRYT10pLFxuICAgIHZhbHVlOiBkYXRhLFxuICB9O1xufVxuZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGU7XG5leHBvcnRzLmV4cGVjdGVkID0gJ0J1ZmZlcic7XG5mdW5jdGlvbiBjaGVjayhkYXRhKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZGF0YSk7XG59XG5leHBvcnRzLmNoZWNrID0gY2hlY2s7XG5mdW5jdGlvbiBjYW5BZGQoY3VycmVudERhdGEsIG5ld0RhdGEpIHtcbiAgcmV0dXJuICEhY3VycmVudERhdGEgJiYgISFuZXdEYXRhICYmIGN1cnJlbnREYXRhLm5vbldpdG5lc3NVdHhvID09PSB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmNhbkFkZCA9IGNhbkFkZDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/input/nonWitnessUtxo.js\n\n}")},"./node_modules/bip174/src/lib/converter/input/partialSig.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nfunction decode(keyVal) {\n if (keyVal.key[0] !== typeFields_1.InputTypes.PARTIAL_SIG) {\n throw new Error(\n 'Decode Error: could not decode partialSig with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n if (\n !(keyVal.key.length === 34 || keyVal.key.length === 66) ||\n ![2, 3, 4].includes(keyVal.key[1])\n ) {\n throw new Error(\n 'Decode Error: partialSig has invalid pubkey in key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n const pubkey = keyVal.key.slice(1);\n return {\n pubkey,\n signature: keyVal.value,\n };\n}\nexports.decode = decode;\nfunction encode(pSig) {\n const head = Buffer.from([typeFields_1.InputTypes.PARTIAL_SIG]);\n return {\n key: Buffer.concat([head, pSig.pubkey]),\n value: pSig.signature,\n };\n}\nexports.encode = encode;\nexports.expected = '{ pubkey: Buffer; signature: Buffer; }';\nfunction check(data) {\n return (\n Buffer.isBuffer(data.pubkey) &&\n Buffer.isBuffer(data.signature) &&\n [33, 65].includes(data.pubkey.length) &&\n [2, 3, 4].includes(data.pubkey[0]) &&\n isDerSigWithSighash(data.signature)\n );\n}\nexports.check = check;\nfunction isDerSigWithSighash(buf) {\n if (!Buffer.isBuffer(buf) || buf.length < 9) return false;\n if (buf[0] !== 0x30) return false;\n if (buf.length !== buf[1] + 3) return false;\n if (buf[2] !== 0x02) return false;\n const rLen = buf[3];\n if (rLen > 33 || rLen < 1) return false;\n if (buf[3 + rLen + 1] !== 0x02) return false;\n const sLen = buf[3 + rLen + 2];\n if (sLen > 33 || sLen < 1) return false;\n if (buf.length !== 3 + rLen + 2 + sLen + 2) return false;\n return true;\n}\nfunction canAddToArray(array, item, dupeSet) {\n const dupeString = item.pubkey.toString('hex');\n if (dupeSet.has(dupeString)) return false;\n dupeSet.add(dupeString);\n return array.filter(v => v.pubkey.equals(item.pubkey)).length === 0;\n}\nexports.canAddToArray = canAddToArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L3BhcnRpYWxTaWcuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHFCQUFxQixtQkFBTyxDQUFDLHFFQUFrQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxnQkFBZ0IsTUFBTSxnQkFBZ0Isb0JBQW9CO0FBQzFEO0FBQ0E7QUFDQSxJQUFJLE1BQU07QUFDVixJQUFJLE1BQU07QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsT0FBTyxNQUFNO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpcDE3NC9zcmMvbGliL2NvbnZlcnRlci9pbnB1dC9wYXJ0aWFsU2lnLmpzPzgyNmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHR5cGVGaWVsZHNfMSA9IHJlcXVpcmUoJy4uLy4uL3R5cGVGaWVsZHMnKTtcbmZ1bmN0aW9uIGRlY29kZShrZXlWYWwpIHtcbiAgaWYgKGtleVZhbC5rZXlbMF0gIT09IHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlBBUlRJQUxfU0lHKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0RlY29kZSBFcnJvcjogY291bGQgbm90IGRlY29kZSBwYXJ0aWFsU2lnIHdpdGgga2V5IDB4JyArXG4gICAgICAgIGtleVZhbC5rZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgICEoa2V5VmFsLmtleS5sZW5ndGggPT09IDM0IHx8IGtleVZhbC5rZXkubGVuZ3RoID09PSA2NikgfHxcbiAgICAhWzIsIDMsIDRdLmluY2x1ZGVzKGtleVZhbC5rZXlbMV0pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdEZWNvZGUgRXJyb3I6IHBhcnRpYWxTaWcgaGFzIGludmFsaWQgcHVia2V5IGluIGtleSAweCcgK1xuICAgICAgICBrZXlWYWwua2V5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICApO1xuICB9XG4gIGNvbnN0IHB1YmtleSA9IGtleVZhbC5rZXkuc2xpY2UoMSk7XG4gIHJldHVybiB7XG4gICAgcHVia2V5LFxuICAgIHNpZ25hdHVyZToga2V5VmFsLnZhbHVlLFxuICB9O1xufVxuZXhwb3J0cy5kZWNvZGUgPSBkZWNvZGU7XG5mdW5jdGlvbiBlbmNvZGUocFNpZykge1xuICBjb25zdCBoZWFkID0gQnVmZmVyLmZyb20oW3R5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlBBUlRJQUxfU0lHXSk7XG4gIHJldHVybiB7XG4gICAga2V5OiBCdWZmZXIuY29uY2F0KFtoZWFkLCBwU2lnLnB1YmtleV0pLFxuICAgIHZhbHVlOiBwU2lnLnNpZ25hdHVyZSxcbiAgfTtcbn1cbmV4cG9ydHMuZW5jb2RlID0gZW5jb2RlO1xuZXhwb3J0cy5leHBlY3RlZCA9ICd7IHB1YmtleTogQnVmZmVyOyBzaWduYXR1cmU6IEJ1ZmZlcjsgfSc7XG5mdW5jdGlvbiBjaGVjayhkYXRhKSB7XG4gIHJldHVybiAoXG4gICAgQnVmZmVyLmlzQnVmZmVyKGRhdGEucHVia2V5KSAmJlxuICAgIEJ1ZmZlci5pc0J1ZmZlcihkYXRhLnNpZ25hdHVyZSkgJiZcbiAgICBbMzMsIDY1XS5pbmNsdWRlcyhkYXRhLnB1YmtleS5sZW5ndGgpICYmXG4gICAgWzIsIDMsIDRdLmluY2x1ZGVzKGRhdGEucHVia2V5WzBdKSAmJlxuICAgIGlzRGVyU2lnV2l0aFNpZ2hhc2goZGF0YS5zaWduYXR1cmUpXG4gICk7XG59XG5leHBvcnRzLmNoZWNrID0gY2hlY2s7XG5mdW5jdGlvbiBpc0RlclNpZ1dpdGhTaWdoYXNoKGJ1Zikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpIHx8IGJ1Zi5sZW5ndGggPCA5KSByZXR1cm4gZmFsc2U7XG4gIGlmIChidWZbMF0gIT09IDB4MzApIHJldHVybiBmYWxzZTtcbiAgaWYgKGJ1Zi5sZW5ndGggIT09IGJ1ZlsxXSArIDMpIHJldHVybiBmYWxzZTtcbiAgaWYgKGJ1ZlsyXSAhPT0gMHgwMikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCByTGVuID0gYnVmWzNdO1xuICBpZiAockxlbiA+IDMzIHx8IHJMZW4gPCAxKSByZXR1cm4gZmFsc2U7XG4gIGlmIChidWZbMyArIHJMZW4gKyAxXSAhPT0gMHgwMikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBzTGVuID0gYnVmWzMgKyByTGVuICsgMl07XG4gIGlmIChzTGVuID4gMzMgfHwgc0xlbiA8IDEpIHJldHVybiBmYWxzZTtcbiAgaWYgKGJ1Zi5sZW5ndGggIT09IDMgKyByTGVuICsgMiArIHNMZW4gKyAyKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gY2FuQWRkVG9BcnJheShhcnJheSwgaXRlbSwgZHVwZVNldCkge1xuICBjb25zdCBkdXBlU3RyaW5nID0gaXRlbS5wdWJrZXkudG9TdHJpbmcoJ2hleCcpO1xuICBpZiAoZHVwZVNldC5oYXMoZHVwZVN0cmluZykpIHJldHVybiBmYWxzZTtcbiAgZHVwZVNldC5hZGQoZHVwZVN0cmluZyk7XG4gIHJldHVybiBhcnJheS5maWx0ZXIodiA9PiB2LnB1YmtleS5lcXVhbHMoaXRlbS5wdWJrZXkpKS5sZW5ndGggPT09IDA7XG59XG5leHBvcnRzLmNhbkFkZFRvQXJyYXkgPSBjYW5BZGRUb0FycmF5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/input/partialSig.js\n\n}")},"./node_modules/bip174/src/lib/converter/input/porCommitment.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nfunction decode(keyVal) {\n if (keyVal.key[0] !== typeFields_1.InputTypes.POR_COMMITMENT) {\n throw new Error(\n 'Decode Error: could not decode porCommitment with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n return keyVal.value.toString('utf8');\n}\nexports.decode = decode;\nfunction encode(data) {\n const key = Buffer.from([typeFields_1.InputTypes.POR_COMMITMENT]);\n return {\n key,\n value: Buffer.from(data, 'utf8'),\n };\n}\nexports.encode = encode;\nexports.expected = 'string';\nfunction check(data) {\n return typeof data === 'string';\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n return !!currentData && !!newData && currentData.porCommitment === undefined;\n}\nexports.canAdd = canAdd;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L3BvckNvbW1pdG1lbnQuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHFCQUFxQixtQkFBTyxDQUFDLHFFQUFrQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0EsY0FBYztBQUNkLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsY0FBYyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpcDE3NC9zcmMvbGliL2NvbnZlcnRlci9pbnB1dC9wb3JDb21taXRtZW50LmpzPzYyYzciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHR5cGVGaWVsZHNfMSA9IHJlcXVpcmUoJy4uLy4uL3R5cGVGaWVsZHMnKTtcbmZ1bmN0aW9uIGRlY29kZShrZXlWYWwpIHtcbiAgaWYgKGtleVZhbC5rZXlbMF0gIT09IHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlBPUl9DT01NSVRNRU5UKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0RlY29kZSBFcnJvcjogY291bGQgbm90IGRlY29kZSBwb3JDb21taXRtZW50IHdpdGgga2V5IDB4JyArXG4gICAgICAgIGtleVZhbC5rZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGtleVZhbC52YWx1ZS50b1N0cmluZygndXRmOCcpO1xufVxuZXhwb3J0cy5kZWNvZGUgPSBkZWNvZGU7XG5mdW5jdGlvbiBlbmNvZGUoZGF0YSkge1xuICBjb25zdCBrZXkgPSBCdWZmZXIuZnJvbShbdHlwZUZpZWxkc18xLklucHV0VHlwZXMuUE9SX0NPTU1JVE1FTlRdKTtcbiAgcmV0dXJuIHtcbiAgICBrZXksXG4gICAgdmFsdWU6IEJ1ZmZlci5mcm9tKGRhdGEsICd1dGY4JyksXG4gIH07XG59XG5leHBvcnRzLmVuY29kZSA9IGVuY29kZTtcbmV4cG9ydHMuZXhwZWN0ZWQgPSAnc3RyaW5nJztcbmZ1bmN0aW9uIGNoZWNrKGRhdGEpIHtcbiAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuY2hlY2sgPSBjaGVjaztcbmZ1bmN0aW9uIGNhbkFkZChjdXJyZW50RGF0YSwgbmV3RGF0YSkge1xuICByZXR1cm4gISFjdXJyZW50RGF0YSAmJiAhIW5ld0RhdGEgJiYgY3VycmVudERhdGEucG9yQ29tbWl0bWVudCA9PT0gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5jYW5BZGQgPSBjYW5BZGQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/input/porCommitment.js\n\n}")},"./node_modules/bip174/src/lib/converter/input/sighashType.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nfunction decode(keyVal) {\n if (keyVal.key[0] !== typeFields_1.InputTypes.SIGHASH_TYPE) {\n throw new Error(\n 'Decode Error: could not decode sighashType with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n return keyVal.value.readUInt32LE(0);\n}\nexports.decode = decode;\nfunction encode(data) {\n const key = Buffer.from([typeFields_1.InputTypes.SIGHASH_TYPE]);\n const value = Buffer.allocUnsafe(4);\n value.writeUInt32LE(data, 0);\n return {\n key,\n value,\n };\n}\nexports.encode = encode;\nexports.expected = 'number';\nfunction check(data) {\n return typeof data === 'number';\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n return !!currentData && !!newData && currentData.sighashType === undefined;\n}\nexports.canAdd = canAdd;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L3NpZ2hhc2hUeXBlLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxxQkFBcUIsbUJBQU8sQ0FBQyxxRUFBa0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvaW5wdXQvc2lnaGFzaFR5cGUuanM/NzEwNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHlwZUZpZWxkc18xID0gcmVxdWlyZSgnLi4vLi4vdHlwZUZpZWxkcycpO1xuZnVuY3Rpb24gZGVjb2RlKGtleVZhbCkge1xuICBpZiAoa2V5VmFsLmtleVswXSAhPT0gdHlwZUZpZWxkc18xLklucHV0VHlwZXMuU0lHSEFTSF9UWVBFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0RlY29kZSBFcnJvcjogY291bGQgbm90IGRlY29kZSBzaWdoYXNoVHlwZSB3aXRoIGtleSAweCcgK1xuICAgICAgICBrZXlWYWwua2V5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICApO1xuICB9XG4gIHJldHVybiBrZXlWYWwudmFsdWUucmVhZFVJbnQzMkxFKDApO1xufVxuZXhwb3J0cy5kZWNvZGUgPSBkZWNvZGU7XG5mdW5jdGlvbiBlbmNvZGUoZGF0YSkge1xuICBjb25zdCBrZXkgPSBCdWZmZXIuZnJvbShbdHlwZUZpZWxkc18xLklucHV0VHlwZXMuU0lHSEFTSF9UWVBFXSk7XG4gIGNvbnN0IHZhbHVlID0gQnVmZmVyLmFsbG9jVW5zYWZlKDQpO1xuICB2YWx1ZS53cml0ZVVJbnQzMkxFKGRhdGEsIDApO1xuICByZXR1cm4ge1xuICAgIGtleSxcbiAgICB2YWx1ZSxcbiAgfTtcbn1cbmV4cG9ydHMuZW5jb2RlID0gZW5jb2RlO1xuZXhwb3J0cy5leHBlY3RlZCA9ICdudW1iZXInO1xuZnVuY3Rpb24gY2hlY2soZGF0YSkge1xuICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5jaGVjayA9IGNoZWNrO1xuZnVuY3Rpb24gY2FuQWRkKGN1cnJlbnREYXRhLCBuZXdEYXRhKSB7XG4gIHJldHVybiAhIWN1cnJlbnREYXRhICYmICEhbmV3RGF0YSAmJiBjdXJyZW50RGF0YS5zaWdoYXNoVHlwZSA9PT0gdW5kZWZpbmVkO1xufVxuZXhwb3J0cy5jYW5BZGQgPSBjYW5BZGQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/input/sighashType.js\n\n}")},"./node_modules/bip174/src/lib/converter/input/tapKeySig.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nfunction decode(keyVal) {\n if (\n keyVal.key[0] !== typeFields_1.InputTypes.TAP_KEY_SIG ||\n keyVal.key.length !== 1\n ) {\n throw new Error(\n 'Decode Error: could not decode tapKeySig with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n if (!check(keyVal.value)) {\n throw new Error(\n 'Decode Error: tapKeySig not a valid 64-65-byte BIP340 signature',\n );\n }\n return keyVal.value;\n}\nexports.decode = decode;\nfunction encode(value) {\n const key = Buffer.from([typeFields_1.InputTypes.TAP_KEY_SIG]);\n return { key, value };\n}\nexports.encode = encode;\nexports.expected = 'Buffer';\nfunction check(data) {\n return Buffer.isBuffer(data) && (data.length === 64 || data.length === 65);\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n return !!currentData && !!newData && currentData.tapKeySig === undefined;\n}\nexports.canAdd = canAdd;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L3RhcEtleVNpZy5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QscUJBQXFCLG1CQUFPLENBQUMscUVBQWtCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjLE1BQU07QUFDcEIsV0FBVztBQUNYO0FBQ0EsY0FBYztBQUNkLGdCQUFnQjtBQUNoQjtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvaW5wdXQvdGFwS2V5U2lnLmpzP2Q3MDYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHR5cGVGaWVsZHNfMSA9IHJlcXVpcmUoJy4uLy4uL3R5cGVGaWVsZHMnKTtcbmZ1bmN0aW9uIGRlY29kZShrZXlWYWwpIHtcbiAgaWYgKFxuICAgIGtleVZhbC5rZXlbMF0gIT09IHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlRBUF9LRVlfU0lHIHx8XG4gICAga2V5VmFsLmtleS5sZW5ndGggIT09IDFcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0RlY29kZSBFcnJvcjogY291bGQgbm90IGRlY29kZSB0YXBLZXlTaWcgd2l0aCBrZXkgMHgnICtcbiAgICAgICAga2V5VmFsLmtleS50b1N0cmluZygnaGV4JyksXG4gICAgKTtcbiAgfVxuICBpZiAoIWNoZWNrKGtleVZhbC52YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnRGVjb2RlIEVycm9yOiB0YXBLZXlTaWcgbm90IGEgdmFsaWQgNjQtNjUtYnl0ZSBCSVAzNDAgc2lnbmF0dXJlJyxcbiAgICApO1xuICB9XG4gIHJldHVybiBrZXlWYWwudmFsdWU7XG59XG5leHBvcnRzLmRlY29kZSA9IGRlY29kZTtcbmZ1bmN0aW9uIGVuY29kZSh2YWx1ZSkge1xuICBjb25zdCBrZXkgPSBCdWZmZXIuZnJvbShbdHlwZUZpZWxkc18xLklucHV0VHlwZXMuVEFQX0tFWV9TSUddKTtcbiAgcmV0dXJuIHsga2V5LCB2YWx1ZSB9O1xufVxuZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGU7XG5leHBvcnRzLmV4cGVjdGVkID0gJ0J1ZmZlcic7XG5mdW5jdGlvbiBjaGVjayhkYXRhKSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZGF0YSkgJiYgKGRhdGEubGVuZ3RoID09PSA2NCB8fCBkYXRhLmxlbmd0aCA9PT0gNjUpO1xufVxuZXhwb3J0cy5jaGVjayA9IGNoZWNrO1xuZnVuY3Rpb24gY2FuQWRkKGN1cnJlbnREYXRhLCBuZXdEYXRhKSB7XG4gIHJldHVybiAhIWN1cnJlbnREYXRhICYmICEhbmV3RGF0YSAmJiBjdXJyZW50RGF0YS50YXBLZXlTaWcgPT09IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuY2FuQWRkID0gY2FuQWRkO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/input/tapKeySig.js\n\n}")},"./node_modules/bip174/src/lib/converter/input/tapLeafScript.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nfunction decode(keyVal) {\n if (keyVal.key[0] !== typeFields_1.InputTypes.TAP_LEAF_SCRIPT) {\n throw new Error(\n 'Decode Error: could not decode tapLeafScript with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n if ((keyVal.key.length - 2) % 32 !== 0) {\n throw new Error(\n 'Decode Error: tapLeafScript has invalid control block in key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n const leafVersion = keyVal.value[keyVal.value.length - 1];\n if ((keyVal.key[1] & 0xfe) !== leafVersion) {\n throw new Error(\n 'Decode Error: tapLeafScript bad leaf version in key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n const script = keyVal.value.slice(0, -1);\n const controlBlock = keyVal.key.slice(1);\n return { controlBlock, script, leafVersion };\n}\nexports.decode = decode;\nfunction encode(tScript) {\n const head = Buffer.from([typeFields_1.InputTypes.TAP_LEAF_SCRIPT]);\n const verBuf = Buffer.from([tScript.leafVersion]);\n return {\n key: Buffer.concat([head, tScript.controlBlock]),\n value: Buffer.concat([tScript.script, verBuf]),\n };\n}\nexports.encode = encode;\nexports.expected =\n '{ controlBlock: Buffer; leafVersion: number, script: Buffer; }';\nfunction check(data) {\n return (\n Buffer.isBuffer(data.controlBlock) &&\n (data.controlBlock.length - 1) % 32 === 0 &&\n (data.controlBlock[0] & 0xfe) === data.leafVersion &&\n Buffer.isBuffer(data.script)\n );\n}\nexports.check = check;\nfunction canAddToArray(array, item, dupeSet) {\n const dupeString = item.controlBlock.toString('hex');\n if (dupeSet.has(dupeString)) return false;\n dupeSet.add(dupeString);\n return (\n array.filter(v => v.controlBlock.equals(item.controlBlock)).length === 0\n );\n}\nexports.canAddToArray = canAddToArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L3RhcExlYWZTY3JpcHQuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHFCQUFxQixtQkFBTyxDQUFDLHFFQUFrQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLGNBQWM7QUFDZDtBQUNBLGVBQWUsTUFBTTtBQUNyQixpQkFBaUIsTUFBTTtBQUN2QjtBQUNBLFNBQVMsTUFBTTtBQUNmLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0EsY0FBYztBQUNkLGdCQUFnQjtBQUNoQixLQUFLLHNCQUFzQixzQ0FBc0M7QUFDakU7QUFDQTtBQUNBLElBQUksTUFBTTtBQUNWO0FBQ0E7QUFDQSxJQUFJLE1BQU07QUFDVjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvaW5wdXQvdGFwTGVhZlNjcmlwdC5qcz8xNzBkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0eXBlRmllbGRzXzEgPSByZXF1aXJlKCcuLi8uLi90eXBlRmllbGRzJyk7XG5mdW5jdGlvbiBkZWNvZGUoa2V5VmFsKSB7XG4gIGlmIChrZXlWYWwua2V5WzBdICE9PSB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5UQVBfTEVBRl9TQ1JJUFQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnRGVjb2RlIEVycm9yOiBjb3VsZCBub3QgZGVjb2RlIHRhcExlYWZTY3JpcHQgd2l0aCBrZXkgMHgnICtcbiAgICAgICAga2V5VmFsLmtleS50b1N0cmluZygnaGV4JyksXG4gICAgKTtcbiAgfVxuICBpZiAoKGtleVZhbC5rZXkubGVuZ3RoIC0gMikgJSAzMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdEZWNvZGUgRXJyb3I6IHRhcExlYWZTY3JpcHQgaGFzIGludmFsaWQgY29udHJvbCBibG9jayBpbiBrZXkgMHgnICtcbiAgICAgICAga2V5VmFsLmtleS50b1N0cmluZygnaGV4JyksXG4gICAgKTtcbiAgfVxuICBjb25zdCBsZWFmVmVyc2lvbiA9IGtleVZhbC52YWx1ZVtrZXlWYWwudmFsdWUubGVuZ3RoIC0gMV07XG4gIGlmICgoa2V5VmFsLmtleVsxXSAmIDB4ZmUpICE9PSBsZWFmVmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdEZWNvZGUgRXJyb3I6IHRhcExlYWZTY3JpcHQgYmFkIGxlYWYgdmVyc2lvbiBpbiBrZXkgMHgnICtcbiAgICAgICAga2V5VmFsLmtleS50b1N0cmluZygnaGV4JyksXG4gICAgKTtcbiAgfVxuICBjb25zdCBzY3JpcHQgPSBrZXlWYWwudmFsdWUuc2xpY2UoMCwgLTEpO1xuICBjb25zdCBjb250cm9sQmxvY2sgPSBrZXlWYWwua2V5LnNsaWNlKDEpO1xuICByZXR1cm4geyBjb250cm9sQmxvY2ssIHNjcmlwdCwgbGVhZlZlcnNpb24gfTtcbn1cbmV4cG9ydHMuZGVjb2RlID0gZGVjb2RlO1xuZnVuY3Rpb24gZW5jb2RlKHRTY3JpcHQpIHtcbiAgY29uc3QgaGVhZCA9IEJ1ZmZlci5mcm9tKFt0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5UQVBfTEVBRl9TQ1JJUFRdKTtcbiAgY29uc3QgdmVyQnVmID0gQnVmZmVyLmZyb20oW3RTY3JpcHQubGVhZlZlcnNpb25dKTtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IEJ1ZmZlci5jb25jYXQoW2hlYWQsIHRTY3JpcHQuY29udHJvbEJsb2NrXSksXG4gICAgdmFsdWU6IEJ1ZmZlci5jb25jYXQoW3RTY3JpcHQuc2NyaXB0LCB2ZXJCdWZdKSxcbiAgfTtcbn1cbmV4cG9ydHMuZW5jb2RlID0gZW5jb2RlO1xuZXhwb3J0cy5leHBlY3RlZCA9XG4gICd7IGNvbnRyb2xCbG9jazogQnVmZmVyOyBsZWFmVmVyc2lvbjogbnVtYmVyLCBzY3JpcHQ6IEJ1ZmZlcjsgfSc7XG5mdW5jdGlvbiBjaGVjayhkYXRhKSB7XG4gIHJldHVybiAoXG4gICAgQnVmZmVyLmlzQnVmZmVyKGRhdGEuY29udHJvbEJsb2NrKSAmJlxuICAgIChkYXRhLmNvbnRyb2xCbG9jay5sZW5ndGggLSAxKSAlIDMyID09PSAwICYmXG4gICAgKGRhdGEuY29udHJvbEJsb2NrWzBdICYgMHhmZSkgPT09IGRhdGEubGVhZlZlcnNpb24gJiZcbiAgICBCdWZmZXIuaXNCdWZmZXIoZGF0YS5zY3JpcHQpXG4gICk7XG59XG5leHBvcnRzLmNoZWNrID0gY2hlY2s7XG5mdW5jdGlvbiBjYW5BZGRUb0FycmF5KGFycmF5LCBpdGVtLCBkdXBlU2V0KSB7XG4gIGNvbnN0IGR1cGVTdHJpbmcgPSBpdGVtLmNvbnRyb2xCbG9jay50b1N0cmluZygnaGV4Jyk7XG4gIGlmIChkdXBlU2V0LmhhcyhkdXBlU3RyaW5nKSkgcmV0dXJuIGZhbHNlO1xuICBkdXBlU2V0LmFkZChkdXBlU3RyaW5nKTtcbiAgcmV0dXJuIChcbiAgICBhcnJheS5maWx0ZXIodiA9PiB2LmNvbnRyb2xCbG9jay5lcXVhbHMoaXRlbS5jb250cm9sQmxvY2spKS5sZW5ndGggPT09IDBcbiAgKTtcbn1cbmV4cG9ydHMuY2FuQWRkVG9BcnJheSA9IGNhbkFkZFRvQXJyYXk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/input/tapLeafScript.js\n\n}")},"./node_modules/bip174/src/lib/converter/input/tapMerkleRoot.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nfunction decode(keyVal) {\n if (\n keyVal.key[0] !== typeFields_1.InputTypes.TAP_MERKLE_ROOT ||\n keyVal.key.length !== 1\n ) {\n throw new Error(\n 'Decode Error: could not decode tapMerkleRoot with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n if (!check(keyVal.value)) {\n throw new Error('Decode Error: tapMerkleRoot not a 32-byte hash');\n }\n return keyVal.value;\n}\nexports.decode = decode;\nfunction encode(value) {\n const key = Buffer.from([typeFields_1.InputTypes.TAP_MERKLE_ROOT]);\n return { key, value };\n}\nexports.encode = encode;\nexports.expected = 'Buffer';\nfunction check(data) {\n return Buffer.isBuffer(data) && data.length === 32;\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n return !!currentData && !!newData && currentData.tapMerkleRoot === undefined;\n}\nexports.canAdd = canAdd;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L3RhcE1lcmtsZVJvb3QuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELHFCQUFxQixtQkFBTyxDQUFDLHFFQUFrQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjLE1BQU07QUFDcEIsV0FBVztBQUNYO0FBQ0EsY0FBYztBQUNkLGdCQUFnQjtBQUNoQjtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvaW5wdXQvdGFwTWVya2xlUm9vdC5qcz9jNmYwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0eXBlRmllbGRzXzEgPSByZXF1aXJlKCcuLi8uLi90eXBlRmllbGRzJyk7XG5mdW5jdGlvbiBkZWNvZGUoa2V5VmFsKSB7XG4gIGlmIChcbiAgICBrZXlWYWwua2V5WzBdICE9PSB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5UQVBfTUVSS0xFX1JPT1QgfHxcbiAgICBrZXlWYWwua2V5Lmxlbmd0aCAhPT0gMVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnRGVjb2RlIEVycm9yOiBjb3VsZCBub3QgZGVjb2RlIHRhcE1lcmtsZVJvb3Qgd2l0aCBrZXkgMHgnICtcbiAgICAgICAga2V5VmFsLmtleS50b1N0cmluZygnaGV4JyksXG4gICAgKTtcbiAgfVxuICBpZiAoIWNoZWNrKGtleVZhbC52YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlY29kZSBFcnJvcjogdGFwTWVya2xlUm9vdCBub3QgYSAzMi1ieXRlIGhhc2gnKTtcbiAgfVxuICByZXR1cm4ga2V5VmFsLnZhbHVlO1xufVxuZXhwb3J0cy5kZWNvZGUgPSBkZWNvZGU7XG5mdW5jdGlvbiBlbmNvZGUodmFsdWUpIHtcbiAgY29uc3Qga2V5ID0gQnVmZmVyLmZyb20oW3R5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlRBUF9NRVJLTEVfUk9PVF0pO1xuICByZXR1cm4geyBrZXksIHZhbHVlIH07XG59XG5leHBvcnRzLmVuY29kZSA9IGVuY29kZTtcbmV4cG9ydHMuZXhwZWN0ZWQgPSAnQnVmZmVyJztcbmZ1bmN0aW9uIGNoZWNrKGRhdGEpIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSAmJiBkYXRhLmxlbmd0aCA9PT0gMzI7XG59XG5leHBvcnRzLmNoZWNrID0gY2hlY2s7XG5mdW5jdGlvbiBjYW5BZGQoY3VycmVudERhdGEsIG5ld0RhdGEpIHtcbiAgcmV0dXJuICEhY3VycmVudERhdGEgJiYgISFuZXdEYXRhICYmIGN1cnJlbnREYXRhLnRhcE1lcmtsZVJvb3QgPT09IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuY2FuQWRkID0gY2FuQWRkO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/input/tapMerkleRoot.js\n\n}")},"./node_modules/bip174/src/lib/converter/input/tapScriptSig.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nfunction decode(keyVal) {\n if (keyVal.key[0] !== typeFields_1.InputTypes.TAP_SCRIPT_SIG) {\n throw new Error(\n 'Decode Error: could not decode tapScriptSig with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n if (keyVal.key.length !== 65) {\n throw new Error(\n 'Decode Error: tapScriptSig has invalid key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n if (keyVal.value.length !== 64 && keyVal.value.length !== 65) {\n throw new Error(\n 'Decode Error: tapScriptSig has invalid signature in key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n const pubkey = keyVal.key.slice(1, 33);\n const leafHash = keyVal.key.slice(33);\n return {\n pubkey,\n leafHash,\n signature: keyVal.value,\n };\n}\nexports.decode = decode;\nfunction encode(tSig) {\n const head = Buffer.from([typeFields_1.InputTypes.TAP_SCRIPT_SIG]);\n return {\n key: Buffer.concat([head, tSig.pubkey, tSig.leafHash]),\n value: tSig.signature,\n };\n}\nexports.encode = encode;\nexports.expected = '{ pubkey: Buffer; leafHash: Buffer; signature: Buffer; }';\nfunction check(data) {\n return (\n Buffer.isBuffer(data.pubkey) &&\n Buffer.isBuffer(data.leafHash) &&\n Buffer.isBuffer(data.signature) &&\n data.pubkey.length === 32 &&\n data.leafHash.length === 32 &&\n (data.signature.length === 64 || data.signature.length === 65)\n );\n}\nexports.check = check;\nfunction canAddToArray(array, item, dupeSet) {\n const dupeString =\n item.pubkey.toString('hex') + item.leafHash.toString('hex');\n if (dupeSet.has(dupeString)) return false;\n dupeSet.add(dupeString);\n return (\n array.filter(\n v => v.pubkey.equals(item.pubkey) && v.leafHash.equals(item.leafHash),\n ).length === 0\n );\n}\nexports.canAddToArray = canAddToArray;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L3RhcFNjcmlwdFNpZy5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QscUJBQXFCLG1CQUFPLENBQUMscUVBQWtCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxnQkFBZ0IsTUFBTSxnQkFBZ0Isa0JBQWtCLG9CQUFvQjtBQUM1RTtBQUNBO0FBQ0EsSUFBSSxNQUFNO0FBQ1YsSUFBSSxNQUFNO0FBQ1YsSUFBSSxNQUFNO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L3RhcFNjcmlwdFNpZy5qcz9jMzY4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB0eXBlRmllbGRzXzEgPSByZXF1aXJlKCcuLi8uLi90eXBlRmllbGRzJyk7XG5mdW5jdGlvbiBkZWNvZGUoa2V5VmFsKSB7XG4gIGlmIChrZXlWYWwua2V5WzBdICE9PSB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5UQVBfU0NSSVBUX1NJRykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdEZWNvZGUgRXJyb3I6IGNvdWxkIG5vdCBkZWNvZGUgdGFwU2NyaXB0U2lnIHdpdGgga2V5IDB4JyArXG4gICAgICAgIGtleVZhbC5rZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgICk7XG4gIH1cbiAgaWYgKGtleVZhbC5rZXkubGVuZ3RoICE9PSA2NSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdEZWNvZGUgRXJyb3I6IHRhcFNjcmlwdFNpZyBoYXMgaW52YWxpZCBrZXkgMHgnICtcbiAgICAgICAga2V5VmFsLmtleS50b1N0cmluZygnaGV4JyksXG4gICAgKTtcbiAgfVxuICBpZiAoa2V5VmFsLnZhbHVlLmxlbmd0aCAhPT0gNjQgJiYga2V5VmFsLnZhbHVlLmxlbmd0aCAhPT0gNjUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnRGVjb2RlIEVycm9yOiB0YXBTY3JpcHRTaWcgaGFzIGludmFsaWQgc2lnbmF0dXJlIGluIGtleSAweCcgK1xuICAgICAgICBrZXlWYWwua2V5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICApO1xuICB9XG4gIGNvbnN0IHB1YmtleSA9IGtleVZhbC5rZXkuc2xpY2UoMSwgMzMpO1xuICBjb25zdCBsZWFmSGFzaCA9IGtleVZhbC5rZXkuc2xpY2UoMzMpO1xuICByZXR1cm4ge1xuICAgIHB1YmtleSxcbiAgICBsZWFmSGFzaCxcbiAgICBzaWduYXR1cmU6IGtleVZhbC52YWx1ZSxcbiAgfTtcbn1cbmV4cG9ydHMuZGVjb2RlID0gZGVjb2RlO1xuZnVuY3Rpb24gZW5jb2RlKHRTaWcpIHtcbiAgY29uc3QgaGVhZCA9IEJ1ZmZlci5mcm9tKFt0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5UQVBfU0NSSVBUX1NJR10pO1xuICByZXR1cm4ge1xuICAgIGtleTogQnVmZmVyLmNvbmNhdChbaGVhZCwgdFNpZy5wdWJrZXksIHRTaWcubGVhZkhhc2hdKSxcbiAgICB2YWx1ZTogdFNpZy5zaWduYXR1cmUsXG4gIH07XG59XG5leHBvcnRzLmVuY29kZSA9IGVuY29kZTtcbmV4cG9ydHMuZXhwZWN0ZWQgPSAneyBwdWJrZXk6IEJ1ZmZlcjsgbGVhZkhhc2g6IEJ1ZmZlcjsgc2lnbmF0dXJlOiBCdWZmZXI7IH0nO1xuZnVuY3Rpb24gY2hlY2soZGF0YSkge1xuICByZXR1cm4gKFxuICAgIEJ1ZmZlci5pc0J1ZmZlcihkYXRhLnB1YmtleSkgJiZcbiAgICBCdWZmZXIuaXNCdWZmZXIoZGF0YS5sZWFmSGFzaCkgJiZcbiAgICBCdWZmZXIuaXNCdWZmZXIoZGF0YS5zaWduYXR1cmUpICYmXG4gICAgZGF0YS5wdWJrZXkubGVuZ3RoID09PSAzMiAmJlxuICAgIGRhdGEubGVhZkhhc2gubGVuZ3RoID09PSAzMiAmJlxuICAgIChkYXRhLnNpZ25hdHVyZS5sZW5ndGggPT09IDY0IHx8IGRhdGEuc2lnbmF0dXJlLmxlbmd0aCA9PT0gNjUpXG4gICk7XG59XG5leHBvcnRzLmNoZWNrID0gY2hlY2s7XG5mdW5jdGlvbiBjYW5BZGRUb0FycmF5KGFycmF5LCBpdGVtLCBkdXBlU2V0KSB7XG4gIGNvbnN0IGR1cGVTdHJpbmcgPVxuICAgIGl0ZW0ucHVia2V5LnRvU3RyaW5nKCdoZXgnKSArIGl0ZW0ubGVhZkhhc2gudG9TdHJpbmcoJ2hleCcpO1xuICBpZiAoZHVwZVNldC5oYXMoZHVwZVN0cmluZykpIHJldHVybiBmYWxzZTtcbiAgZHVwZVNldC5hZGQoZHVwZVN0cmluZyk7XG4gIHJldHVybiAoXG4gICAgYXJyYXkuZmlsdGVyKFxuICAgICAgdiA9PiB2LnB1YmtleS5lcXVhbHMoaXRlbS5wdWJrZXkpICYmIHYubGVhZkhhc2guZXF1YWxzKGl0ZW0ubGVhZkhhc2gpLFxuICAgICkubGVuZ3RoID09PSAwXG4gICk7XG59XG5leHBvcnRzLmNhbkFkZFRvQXJyYXkgPSBjYW5BZGRUb0FycmF5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/input/tapScriptSig.js\n\n}")},"./node_modules/bip174/src/lib/converter/input/witnessUtxo.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nconst tools_1 = __webpack_require__(/*! ../tools */ \"./node_modules/bip174/src/lib/converter/tools.js\");\nconst varuint = __webpack_require__(/*! ../varint */ \"./node_modules/bip174/src/lib/converter/varint.js\");\nfunction decode(keyVal) {\n if (keyVal.key[0] !== typeFields_1.InputTypes.WITNESS_UTXO) {\n throw new Error(\n 'Decode Error: could not decode witnessUtxo with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n const value = tools_1.readUInt64LE(keyVal.value, 0);\n let _offset = 8;\n const scriptLen = varuint.decode(keyVal.value, _offset);\n _offset += varuint.encodingLength(scriptLen);\n const script = keyVal.value.slice(_offset);\n if (script.length !== scriptLen) {\n throw new Error('Decode Error: WITNESS_UTXO script is not proper length');\n }\n return {\n script,\n value,\n };\n}\nexports.decode = decode;\nfunction encode(data) {\n const { script, value } = data;\n const varintLen = varuint.encodingLength(script.length);\n const result = Buffer.allocUnsafe(8 + varintLen + script.length);\n tools_1.writeUInt64LE(result, value, 0);\n varuint.encode(script.length, result, 8);\n script.copy(result, 8 + varintLen);\n return {\n key: Buffer.from([typeFields_1.InputTypes.WITNESS_UTXO]),\n value: result,\n };\n}\nexports.encode = encode;\nexports.expected = '{ script: Buffer; value: number; }';\nfunction check(data) {\n return Buffer.isBuffer(data.script) && typeof data.value === 'number';\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n return !!currentData && !!newData && currentData.witnessUtxo === undefined;\n}\nexports.canAdd = canAdd;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL2lucHV0L3dpdG5lc3NVdHhvLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxxQkFBcUIsbUJBQU8sQ0FBQyxxRUFBa0I7QUFDL0MsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQVU7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsb0VBQVc7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLFVBQVUsZ0JBQWdCO0FBQzFCO0FBQ0EsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsZ0JBQWdCLE1BQU0sZ0JBQWdCLGdCQUFnQjtBQUN0RDtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvaW5wdXQvd2l0bmVzc1V0eG8uanM/MGMzNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHlwZUZpZWxkc18xID0gcmVxdWlyZSgnLi4vLi4vdHlwZUZpZWxkcycpO1xuY29uc3QgdG9vbHNfMSA9IHJlcXVpcmUoJy4uL3Rvb2xzJyk7XG5jb25zdCB2YXJ1aW50ID0gcmVxdWlyZSgnLi4vdmFyaW50Jyk7XG5mdW5jdGlvbiBkZWNvZGUoa2V5VmFsKSB7XG4gIGlmIChrZXlWYWwua2V5WzBdICE9PSB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5XSVRORVNTX1VUWE8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnRGVjb2RlIEVycm9yOiBjb3VsZCBub3QgZGVjb2RlIHdpdG5lc3NVdHhvIHdpdGgga2V5IDB4JyArXG4gICAgICAgIGtleVZhbC5rZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgICk7XG4gIH1cbiAgY29uc3QgdmFsdWUgPSB0b29sc18xLnJlYWRVSW50NjRMRShrZXlWYWwudmFsdWUsIDApO1xuICBsZXQgX29mZnNldCA9IDg7XG4gIGNvbnN0IHNjcmlwdExlbiA9IHZhcnVpbnQuZGVjb2RlKGtleVZhbC52YWx1ZSwgX29mZnNldCk7XG4gIF9vZmZzZXQgKz0gdmFydWludC5lbmNvZGluZ0xlbmd0aChzY3JpcHRMZW4pO1xuICBjb25zdCBzY3JpcHQgPSBrZXlWYWwudmFsdWUuc2xpY2UoX29mZnNldCk7XG4gIGlmIChzY3JpcHQubGVuZ3RoICE9PSBzY3JpcHRMZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlY29kZSBFcnJvcjogV0lUTkVTU19VVFhPIHNjcmlwdCBpcyBub3QgcHJvcGVyIGxlbmd0aCcpO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NyaXB0LFxuICAgIHZhbHVlLFxuICB9O1xufVxuZXhwb3J0cy5kZWNvZGUgPSBkZWNvZGU7XG5mdW5jdGlvbiBlbmNvZGUoZGF0YSkge1xuICBjb25zdCB7IHNjcmlwdCwgdmFsdWUgfSA9IGRhdGE7XG4gIGNvbnN0IHZhcmludExlbiA9IHZhcnVpbnQuZW5jb2RpbmdMZW5ndGgoc2NyaXB0Lmxlbmd0aCk7XG4gIGNvbnN0IHJlc3VsdCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg4ICsgdmFyaW50TGVuICsgc2NyaXB0Lmxlbmd0aCk7XG4gIHRvb2xzXzEud3JpdGVVSW50NjRMRShyZXN1bHQsIHZhbHVlLCAwKTtcbiAgdmFydWludC5lbmNvZGUoc2NyaXB0Lmxlbmd0aCwgcmVzdWx0LCA4KTtcbiAgc2NyaXB0LmNvcHkocmVzdWx0LCA4ICsgdmFyaW50TGVuKTtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IEJ1ZmZlci5mcm9tKFt0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5XSVRORVNTX1VUWE9dKSxcbiAgICB2YWx1ZTogcmVzdWx0LFxuICB9O1xufVxuZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGU7XG5leHBvcnRzLmV4cGVjdGVkID0gJ3sgc2NyaXB0OiBCdWZmZXI7IHZhbHVlOiBudW1iZXI7IH0nO1xuZnVuY3Rpb24gY2hlY2soZGF0YSkge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGRhdGEuc2NyaXB0KSAmJiB0eXBlb2YgZGF0YS52YWx1ZSA9PT0gJ251bWJlcic7XG59XG5leHBvcnRzLmNoZWNrID0gY2hlY2s7XG5mdW5jdGlvbiBjYW5BZGQoY3VycmVudERhdGEsIG5ld0RhdGEpIHtcbiAgcmV0dXJuICEhY3VycmVudERhdGEgJiYgISFuZXdEYXRhICYmIGN1cnJlbnREYXRhLndpdG5lc3NVdHhvID09PSB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmNhbkFkZCA9IGNhbkFkZDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/input/witnessUtxo.js\n\n}")},"./node_modules/bip174/src/lib/converter/output/tapTree.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer;\n\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nconst typeFields_1 = __webpack_require__(/*! ../../typeFields */ "./node_modules/bip174/src/lib/typeFields.js");\nconst varuint = __webpack_require__(/*! ../varint */ "./node_modules/bip174/src/lib/converter/varint.js");\nfunction decode(keyVal) {\n if (\n keyVal.key[0] !== typeFields_1.OutputTypes.TAP_TREE ||\n keyVal.key.length !== 1\n ) {\n throw new Error(\n \'Decode Error: could not decode tapTree with key 0x\' +\n keyVal.key.toString(\'hex\'),\n );\n }\n let _offset = 0;\n const data = [];\n while (_offset < keyVal.value.length) {\n const depth = keyVal.value[_offset++];\n const leafVersion = keyVal.value[_offset++];\n const scriptLen = varuint.decode(keyVal.value, _offset);\n _offset += varuint.encodingLength(scriptLen);\n data.push({\n depth,\n leafVersion,\n script: keyVal.value.slice(_offset, _offset + scriptLen),\n });\n _offset += scriptLen;\n }\n return { leaves: data };\n}\nexports.decode = decode;\nfunction encode(tree) {\n const key = Buffer.from([typeFields_1.OutputTypes.TAP_TREE]);\n const bufs = [].concat(\n ...tree.leaves.map(tapLeaf => [\n Buffer.of(tapLeaf.depth, tapLeaf.leafVersion),\n varuint.encode(tapLeaf.script.length),\n tapLeaf.script,\n ]),\n );\n return {\n key,\n value: Buffer.concat(bufs),\n };\n}\nexports.encode = encode;\nexports.expected =\n \'{ leaves: [{ depth: number; leafVersion: number, script: Buffer; }] }\';\nfunction check(data) {\n return (\n Array.isArray(data.leaves) &&\n data.leaves.every(\n tapLeaf =>\n tapLeaf.depth >= 0 &&\n tapLeaf.depth <= 128 &&\n (tapLeaf.leafVersion & 0xfe) === tapLeaf.leafVersion &&\n Buffer.isBuffer(tapLeaf.script),\n )\n );\n}\nexports.check = check;\nfunction canAdd(currentData, newData) {\n return !!currentData && !!newData && currentData.tapTree === undefined;\n}\nexports.canAdd = canAdd;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL291dHB1dC90YXBUcmVlLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxxQkFBcUIsbUJBQU8sQ0FBQyxxRUFBa0I7QUFDL0MsZ0JBQWdCLG1CQUFPLENBQUMsb0VBQVc7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQTtBQUNBLE1BQU0sTUFBTTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0EsY0FBYztBQUNkLGdCQUFnQjtBQUNoQixLQUFLLFdBQVcsZUFBZSxzQ0FBc0MsR0FBRztBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxNQUFNO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvb3V0cHV0L3RhcFRyZWUuanM/M2Q5MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdHlwZUZpZWxkc18xID0gcmVxdWlyZSgnLi4vLi4vdHlwZUZpZWxkcycpO1xuY29uc3QgdmFydWludCA9IHJlcXVpcmUoJy4uL3ZhcmludCcpO1xuZnVuY3Rpb24gZGVjb2RlKGtleVZhbCkge1xuICBpZiAoXG4gICAga2V5VmFsLmtleVswXSAhPT0gdHlwZUZpZWxkc18xLk91dHB1dFR5cGVzLlRBUF9UUkVFIHx8XG4gICAga2V5VmFsLmtleS5sZW5ndGggIT09IDFcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0RlY29kZSBFcnJvcjogY291bGQgbm90IGRlY29kZSB0YXBUcmVlIHdpdGgga2V5IDB4JyArXG4gICAgICAgIGtleVZhbC5rZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgICk7XG4gIH1cbiAgbGV0IF9vZmZzZXQgPSAwO1xuICBjb25zdCBkYXRhID0gW107XG4gIHdoaWxlIChfb2Zmc2V0IDwga2V5VmFsLnZhbHVlLmxlbmd0aCkge1xuICAgIGNvbnN0IGRlcHRoID0ga2V5VmFsLnZhbHVlW19vZmZzZXQrK107XG4gICAgY29uc3QgbGVhZlZlcnNpb24gPSBrZXlWYWwudmFsdWVbX29mZnNldCsrXTtcbiAgICBjb25zdCBzY3JpcHRMZW4gPSB2YXJ1aW50LmRlY29kZShrZXlWYWwudmFsdWUsIF9vZmZzZXQpO1xuICAgIF9vZmZzZXQgKz0gdmFydWludC5lbmNvZGluZ0xlbmd0aChzY3JpcHRMZW4pO1xuICAgIGRhdGEucHVzaCh7XG4gICAgICBkZXB0aCxcbiAgICAgIGxlYWZWZXJzaW9uLFxuICAgICAgc2NyaXB0OiBrZXlWYWwudmFsdWUuc2xpY2UoX29mZnNldCwgX29mZnNldCArIHNjcmlwdExlbiksXG4gICAgfSk7XG4gICAgX29mZnNldCArPSBzY3JpcHRMZW47XG4gIH1cbiAgcmV0dXJuIHsgbGVhdmVzOiBkYXRhIH07XG59XG5leHBvcnRzLmRlY29kZSA9IGRlY29kZTtcbmZ1bmN0aW9uIGVuY29kZSh0cmVlKSB7XG4gIGNvbnN0IGtleSA9IEJ1ZmZlci5mcm9tKFt0eXBlRmllbGRzXzEuT3V0cHV0VHlwZXMuVEFQX1RSRUVdKTtcbiAgY29uc3QgYnVmcyA9IFtdLmNvbmNhdChcbiAgICAuLi50cmVlLmxlYXZlcy5tYXAodGFwTGVhZiA9PiBbXG4gICAgICBCdWZmZXIub2YodGFwTGVhZi5kZXB0aCwgdGFwTGVhZi5sZWFmVmVyc2lvbiksXG4gICAgICB2YXJ1aW50LmVuY29kZSh0YXBMZWFmLnNjcmlwdC5sZW5ndGgpLFxuICAgICAgdGFwTGVhZi5zY3JpcHQsXG4gICAgXSksXG4gICk7XG4gIHJldHVybiB7XG4gICAga2V5LFxuICAgIHZhbHVlOiBCdWZmZXIuY29uY2F0KGJ1ZnMpLFxuICB9O1xufVxuZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGU7XG5leHBvcnRzLmV4cGVjdGVkID1cbiAgJ3sgbGVhdmVzOiBbeyBkZXB0aDogbnVtYmVyOyBsZWFmVmVyc2lvbjogbnVtYmVyLCBzY3JpcHQ6IEJ1ZmZlcjsgfV0gfSc7XG5mdW5jdGlvbiBjaGVjayhkYXRhKSB7XG4gIHJldHVybiAoXG4gICAgQXJyYXkuaXNBcnJheShkYXRhLmxlYXZlcykgJiZcbiAgICBkYXRhLmxlYXZlcy5ldmVyeShcbiAgICAgIHRhcExlYWYgPT5cbiAgICAgICAgdGFwTGVhZi5kZXB0aCA+PSAwICYmXG4gICAgICAgIHRhcExlYWYuZGVwdGggPD0gMTI4ICYmXG4gICAgICAgICh0YXBMZWFmLmxlYWZWZXJzaW9uICYgMHhmZSkgPT09IHRhcExlYWYubGVhZlZlcnNpb24gJiZcbiAgICAgICAgQnVmZmVyLmlzQnVmZmVyKHRhcExlYWYuc2NyaXB0KSxcbiAgICApXG4gICk7XG59XG5leHBvcnRzLmNoZWNrID0gY2hlY2s7XG5mdW5jdGlvbiBjYW5BZGQoY3VycmVudERhdGEsIG5ld0RhdGEpIHtcbiAgcmV0dXJuICEhY3VycmVudERhdGEgJiYgISFuZXdEYXRhICYmIGN1cnJlbnREYXRhLnRhcFRyZWUgPT09IHVuZGVmaW5lZDtcbn1cbmV4cG9ydHMuY2FuQWRkID0gY2FuQWRkO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/output/tapTree.js\n\n}')},"./node_modules/bip174/src/lib/converter/shared/bip32Derivation.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst range = n => [...Array(n).keys()];\nconst isValidDERKey = pubkey =>\n (pubkey.length === 33 && [2, 3].includes(pubkey[0])) ||\n (pubkey.length === 65 && 4 === pubkey[0]);\nfunction makeConverter(TYPE_BYTE, isValidPubkey = isValidDERKey) {\n function decode(keyVal) {\n if (keyVal.key[0] !== TYPE_BYTE) {\n throw new Error(\n 'Decode Error: could not decode bip32Derivation with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n const pubkey = keyVal.key.slice(1);\n if (!isValidPubkey(pubkey)) {\n throw new Error(\n 'Decode Error: bip32Derivation has invalid pubkey in key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n if ((keyVal.value.length / 4) % 1 !== 0) {\n throw new Error(\n 'Decode Error: Input BIP32_DERIVATION value length should be multiple of 4',\n );\n }\n const data = {\n masterFingerprint: keyVal.value.slice(0, 4),\n pubkey,\n path: 'm',\n };\n for (const i of range(keyVal.value.length / 4 - 1)) {\n const val = keyVal.value.readUInt32LE(i * 4 + 4);\n const isHard = !!(val & 0x80000000);\n const idx = val & 0x7fffffff;\n data.path += '/' + idx.toString(10) + (isHard ? \"'\" : '');\n }\n return data;\n }\n function encode(data) {\n const head = Buffer.from([TYPE_BYTE]);\n const key = Buffer.concat([head, data.pubkey]);\n const splitPath = data.path.split('/');\n const value = Buffer.allocUnsafe(splitPath.length * 4);\n data.masterFingerprint.copy(value, 0);\n let offset = 4;\n splitPath.slice(1).forEach(level => {\n const isHard = level.slice(-1) === \"'\";\n let num = 0x7fffffff & parseInt(isHard ? level.slice(0, -1) : level, 10);\n if (isHard) num += 0x80000000;\n value.writeUInt32LE(num, offset);\n offset += 4;\n });\n return {\n key,\n value,\n };\n }\n const expected =\n '{ masterFingerprint: Buffer; pubkey: Buffer; path: string; }';\n function check(data) {\n return (\n Buffer.isBuffer(data.pubkey) &&\n Buffer.isBuffer(data.masterFingerprint) &&\n typeof data.path === 'string' &&\n isValidPubkey(data.pubkey) &&\n data.masterFingerprint.length === 4\n );\n }\n function canAddToArray(array, item, dupeSet) {\n const dupeString = item.pubkey.toString('hex');\n if (dupeSet.has(dupeString)) return false;\n dupeSet.add(dupeString);\n return array.filter(v => v.pubkey.equals(item.pubkey)).length === 0;\n }\n return {\n decode,\n encode,\n check,\n expected,\n canAddToArray,\n };\n}\nexports.makeConverter = makeConverter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL3NoYXJlZC9iaXAzMkRlcml2YXRpb24uanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsTUFBTTtBQUN2QixnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLGtCQUFrQixNQUFNO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTywyQkFBMkIsZ0JBQWdCLGVBQWU7QUFDakU7QUFDQTtBQUNBLE1BQU0sTUFBTTtBQUNaLE1BQU0sTUFBTTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL3NoYXJlZC9iaXAzMkRlcml2YXRpb24uanM/M2QyNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcmFuZ2UgPSBuID0+IFsuLi5BcnJheShuKS5rZXlzKCldO1xuY29uc3QgaXNWYWxpZERFUktleSA9IHB1YmtleSA9PlxuICAocHVia2V5Lmxlbmd0aCA9PT0gMzMgJiYgWzIsIDNdLmluY2x1ZGVzKHB1YmtleVswXSkpIHx8XG4gIChwdWJrZXkubGVuZ3RoID09PSA2NSAmJiA0ID09PSBwdWJrZXlbMF0pO1xuZnVuY3Rpb24gbWFrZUNvbnZlcnRlcihUWVBFX0JZVEUsIGlzVmFsaWRQdWJrZXkgPSBpc1ZhbGlkREVSS2V5KSB7XG4gIGZ1bmN0aW9uIGRlY29kZShrZXlWYWwpIHtcbiAgICBpZiAoa2V5VmFsLmtleVswXSAhPT0gVFlQRV9CWVRFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdEZWNvZGUgRXJyb3I6IGNvdWxkIG5vdCBkZWNvZGUgYmlwMzJEZXJpdmF0aW9uIHdpdGgga2V5IDB4JyArXG4gICAgICAgICAga2V5VmFsLmtleS50b1N0cmluZygnaGV4JyksXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBwdWJrZXkgPSBrZXlWYWwua2V5LnNsaWNlKDEpO1xuICAgIGlmICghaXNWYWxpZFB1YmtleShwdWJrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdEZWNvZGUgRXJyb3I6IGJpcDMyRGVyaXZhdGlvbiBoYXMgaW52YWxpZCBwdWJrZXkgaW4ga2V5IDB4JyArXG4gICAgICAgICAga2V5VmFsLmtleS50b1N0cmluZygnaGV4JyksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoKGtleVZhbC52YWx1ZS5sZW5ndGggLyA0KSAlIDEgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0RlY29kZSBFcnJvcjogSW5wdXQgQklQMzJfREVSSVZBVElPTiB2YWx1ZSBsZW5ndGggc2hvdWxkIGJlIG11bHRpcGxlIG9mIDQnLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIG1hc3RlckZpbmdlcnByaW50OiBrZXlWYWwudmFsdWUuc2xpY2UoMCwgNCksXG4gICAgICBwdWJrZXksXG4gICAgICBwYXRoOiAnbScsXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGkgb2YgcmFuZ2Uoa2V5VmFsLnZhbHVlLmxlbmd0aCAvIDQgLSAxKSkge1xuICAgICAgY29uc3QgdmFsID0ga2V5VmFsLnZhbHVlLnJlYWRVSW50MzJMRShpICogNCArIDQpO1xuICAgICAgY29uc3QgaXNIYXJkID0gISEodmFsICYgMHg4MDAwMDAwMCk7XG4gICAgICBjb25zdCBpZHggPSB2YWwgJiAweDdmZmZmZmZmO1xuICAgICAgZGF0YS5wYXRoICs9ICcvJyArIGlkeC50b1N0cmluZygxMCkgKyAoaXNIYXJkID8gXCInXCIgOiAnJyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGZ1bmN0aW9uIGVuY29kZShkYXRhKSB7XG4gICAgY29uc3QgaGVhZCA9IEJ1ZmZlci5mcm9tKFtUWVBFX0JZVEVdKTtcbiAgICBjb25zdCBrZXkgPSBCdWZmZXIuY29uY2F0KFtoZWFkLCBkYXRhLnB1YmtleV0pO1xuICAgIGNvbnN0IHNwbGl0UGF0aCA9IGRhdGEucGF0aC5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmFsbG9jVW5zYWZlKHNwbGl0UGF0aC5sZW5ndGggKiA0KTtcbiAgICBkYXRhLm1hc3RlckZpbmdlcnByaW50LmNvcHkodmFsdWUsIDApO1xuICAgIGxldCBvZmZzZXQgPSA0O1xuICAgIHNwbGl0UGF0aC5zbGljZSgxKS5mb3JFYWNoKGxldmVsID0+IHtcbiAgICAgIGNvbnN0IGlzSGFyZCA9IGxldmVsLnNsaWNlKC0xKSA9PT0gXCInXCI7XG4gICAgICBsZXQgbnVtID0gMHg3ZmZmZmZmZiAmIHBhcnNlSW50KGlzSGFyZCA/IGxldmVsLnNsaWNlKDAsIC0xKSA6IGxldmVsLCAxMCk7XG4gICAgICBpZiAoaXNIYXJkKSBudW0gKz0gMHg4MDAwMDAwMDtcbiAgICAgIHZhbHVlLndyaXRlVUludDMyTEUobnVtLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlLFxuICAgIH07XG4gIH1cbiAgY29uc3QgZXhwZWN0ZWQgPVxuICAgICd7IG1hc3RlckZpbmdlcnByaW50OiBCdWZmZXI7IHB1YmtleTogQnVmZmVyOyBwYXRoOiBzdHJpbmc7IH0nO1xuICBmdW5jdGlvbiBjaGVjayhkYXRhKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIEJ1ZmZlci5pc0J1ZmZlcihkYXRhLnB1YmtleSkgJiZcbiAgICAgIEJ1ZmZlci5pc0J1ZmZlcihkYXRhLm1hc3RlckZpbmdlcnByaW50KSAmJlxuICAgICAgdHlwZW9mIGRhdGEucGF0aCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIGlzVmFsaWRQdWJrZXkoZGF0YS5wdWJrZXkpICYmXG4gICAgICBkYXRhLm1hc3RlckZpbmdlcnByaW50Lmxlbmd0aCA9PT0gNFxuICAgICk7XG4gIH1cbiAgZnVuY3Rpb24gY2FuQWRkVG9BcnJheShhcnJheSwgaXRlbSwgZHVwZVNldCkge1xuICAgIGNvbnN0IGR1cGVTdHJpbmcgPSBpdGVtLnB1YmtleS50b1N0cmluZygnaGV4Jyk7XG4gICAgaWYgKGR1cGVTZXQuaGFzKGR1cGVTdHJpbmcpKSByZXR1cm4gZmFsc2U7XG4gICAgZHVwZVNldC5hZGQoZHVwZVN0cmluZyk7XG4gICAgcmV0dXJuIGFycmF5LmZpbHRlcih2ID0+IHYucHVia2V5LmVxdWFscyhpdGVtLnB1YmtleSkpLmxlbmd0aCA9PT0gMDtcbiAgfVxuICByZXR1cm4ge1xuICAgIGRlY29kZSxcbiAgICBlbmNvZGUsXG4gICAgY2hlY2ssXG4gICAgZXhwZWN0ZWQsXG4gICAgY2FuQWRkVG9BcnJheSxcbiAgfTtcbn1cbmV4cG9ydHMubWFrZUNvbnZlcnRlciA9IG1ha2VDb252ZXJ0ZXI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/shared/bip32Derivation.js\n\n}")},"./node_modules/bip174/src/lib/converter/shared/checkPubkey.js"(__unused_webpack_module,exports){"use strict";eval("{\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction makeChecker(pubkeyTypes) {\n return checkPubkey;\n function checkPubkey(keyVal) {\n let pubkey;\n if (pubkeyTypes.includes(keyVal.key[0])) {\n pubkey = keyVal.key.slice(1);\n if (\n !(pubkey.length === 33 || pubkey.length === 65) ||\n ![2, 3, 4].includes(pubkey[0])\n ) {\n throw new Error(\n 'Format Error: invalid pubkey in key 0x' + keyVal.key.toString('hex'),\n );\n }\n }\n return pubkey;\n }\n}\nexports.makeChecker = makeChecker;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL3NoYXJlZC9jaGVja1B1YmtleS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvc2hhcmVkL2NoZWNrUHVia2V5LmpzPzBjMWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIG1ha2VDaGVja2VyKHB1YmtleVR5cGVzKSB7XG4gIHJldHVybiBjaGVja1B1YmtleTtcbiAgZnVuY3Rpb24gY2hlY2tQdWJrZXkoa2V5VmFsKSB7XG4gICAgbGV0IHB1YmtleTtcbiAgICBpZiAocHVia2V5VHlwZXMuaW5jbHVkZXMoa2V5VmFsLmtleVswXSkpIHtcbiAgICAgIHB1YmtleSA9IGtleVZhbC5rZXkuc2xpY2UoMSk7XG4gICAgICBpZiAoXG4gICAgICAgICEocHVia2V5Lmxlbmd0aCA9PT0gMzMgfHwgcHVia2V5Lmxlbmd0aCA9PT0gNjUpIHx8XG4gICAgICAgICFbMiwgMywgNF0uaW5jbHVkZXMocHVia2V5WzBdKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnRm9ybWF0IEVycm9yOiBpbnZhbGlkIHB1YmtleSBpbiBrZXkgMHgnICsga2V5VmFsLmtleS50b1N0cmluZygnaGV4JyksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwdWJrZXk7XG4gIH1cbn1cbmV4cG9ydHMubWFrZUNoZWNrZXIgPSBtYWtlQ2hlY2tlcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/shared/checkPubkey.js\n\n}")},"./node_modules/bip174/src/lib/converter/shared/redeemScript.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction makeConverter(TYPE_BYTE) {\n function decode(keyVal) {\n if (keyVal.key[0] !== TYPE_BYTE) {\n throw new Error(\n 'Decode Error: could not decode redeemScript with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n return keyVal.value;\n }\n function encode(data) {\n const key = Buffer.from([TYPE_BYTE]);\n return {\n key,\n value: data,\n };\n }\n const expected = 'Buffer';\n function check(data) {\n return Buffer.isBuffer(data);\n }\n function canAdd(currentData, newData) {\n return !!currentData && !!newData && currentData.redeemScript === undefined;\n }\n return {\n decode,\n encode,\n check,\n expected,\n canAdd,\n };\n}\nexports.makeConverter = makeConverter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL3NoYXJlZC9yZWRlZW1TY3JpcHQuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvc2hhcmVkL3JlZGVlbVNjcmlwdC5qcz9lOTE5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBtYWtlQ29udmVydGVyKFRZUEVfQllURSkge1xuICBmdW5jdGlvbiBkZWNvZGUoa2V5VmFsKSB7XG4gICAgaWYgKGtleVZhbC5rZXlbMF0gIT09IFRZUEVfQllURSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnRGVjb2RlIEVycm9yOiBjb3VsZCBub3QgZGVjb2RlIHJlZGVlbVNjcmlwdCB3aXRoIGtleSAweCcgK1xuICAgICAgICAgIGtleVZhbC5rZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleVZhbC52YWx1ZTtcbiAgfVxuICBmdW5jdGlvbiBlbmNvZGUoZGF0YSkge1xuICAgIGNvbnN0IGtleSA9IEJ1ZmZlci5mcm9tKFtUWVBFX0JZVEVdKTtcbiAgICByZXR1cm4ge1xuICAgICAga2V5LFxuICAgICAgdmFsdWU6IGRhdGEsXG4gICAgfTtcbiAgfVxuICBjb25zdCBleHBlY3RlZCA9ICdCdWZmZXInO1xuICBmdW5jdGlvbiBjaGVjayhkYXRhKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihkYXRhKTtcbiAgfVxuICBmdW5jdGlvbiBjYW5BZGQoY3VycmVudERhdGEsIG5ld0RhdGEpIHtcbiAgICByZXR1cm4gISFjdXJyZW50RGF0YSAmJiAhIW5ld0RhdGEgJiYgY3VycmVudERhdGEucmVkZWVtU2NyaXB0ID09PSB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBkZWNvZGUsXG4gICAgZW5jb2RlLFxuICAgIGNoZWNrLFxuICAgIGV4cGVjdGVkLFxuICAgIGNhbkFkZCxcbiAgfTtcbn1cbmV4cG9ydHMubWFrZUNvbnZlcnRlciA9IG1ha2VDb252ZXJ0ZXI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/shared/redeemScript.js\n\n}")},"./node_modules/bip174/src/lib/converter/shared/tapBip32Derivation.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst varuint = __webpack_require__(/*! ../varint */ \"./node_modules/bip174/src/lib/converter/varint.js\");\nconst bip32Derivation = __webpack_require__(/*! ./bip32Derivation */ \"./node_modules/bip174/src/lib/converter/shared/bip32Derivation.js\");\nconst isValidBIP340Key = pubkey => pubkey.length === 32;\nfunction makeConverter(TYPE_BYTE) {\n const parent = bip32Derivation.makeConverter(TYPE_BYTE, isValidBIP340Key);\n function decode(keyVal) {\n const nHashes = varuint.decode(keyVal.value);\n const nHashesLen = varuint.encodingLength(nHashes);\n const base = parent.decode({\n key: keyVal.key,\n value: keyVal.value.slice(nHashesLen + nHashes * 32),\n });\n const leafHashes = new Array(nHashes);\n for (let i = 0, _offset = nHashesLen; i < nHashes; i++, _offset += 32) {\n leafHashes[i] = keyVal.value.slice(_offset, _offset + 32);\n }\n return Object.assign({}, base, { leafHashes });\n }\n function encode(data) {\n const base = parent.encode(data);\n const nHashesLen = varuint.encodingLength(data.leafHashes.length);\n const nHashesBuf = Buffer.allocUnsafe(nHashesLen);\n varuint.encode(data.leafHashes.length, nHashesBuf);\n const value = Buffer.concat([nHashesBuf, ...data.leafHashes, base.value]);\n return Object.assign({}, base, { value });\n }\n const expected =\n '{ ' +\n 'masterFingerprint: Buffer; ' +\n 'pubkey: Buffer; ' +\n 'path: string; ' +\n 'leafHashes: Buffer[]; ' +\n '}';\n function check(data) {\n return (\n Array.isArray(data.leafHashes) &&\n data.leafHashes.every(\n leafHash => Buffer.isBuffer(leafHash) && leafHash.length === 32,\n ) &&\n parent.check(data)\n );\n }\n return {\n decode,\n encode,\n check,\n expected,\n canAddToArray: parent.canAddToArray,\n };\n}\nexports.makeConverter = makeConverter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL3NoYXJlZC90YXBCaXAzMkRlcml2YXRpb24uanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGdCQUFnQixtQkFBTyxDQUFDLG9FQUFXO0FBQ25DLHdCQUF3QixtQkFBTyxDQUFDLDRGQUFtQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwwQ0FBMEMsYUFBYTtBQUN2RDtBQUNBO0FBQ0EsMkJBQTJCLFVBQVUsWUFBWTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixNQUFNO0FBQzdCO0FBQ0Esa0JBQWtCLE1BQU07QUFDeEIsMkJBQTJCLFVBQVUsT0FBTztBQUM1QztBQUNBO0FBQ0EsT0FBTztBQUNQLGdDQUFnQztBQUNoQyxxQkFBcUI7QUFDckIsbUJBQW1CO0FBQ25CLDJCQUEyQjtBQUMzQixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsTUFBTTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvc2hhcmVkL3RhcEJpcDMyRGVyaXZhdGlvbi5qcz85ZDg1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCB2YXJ1aW50ID0gcmVxdWlyZSgnLi4vdmFyaW50Jyk7XG5jb25zdCBiaXAzMkRlcml2YXRpb24gPSByZXF1aXJlKCcuL2JpcDMyRGVyaXZhdGlvbicpO1xuY29uc3QgaXNWYWxpZEJJUDM0MEtleSA9IHB1YmtleSA9PiBwdWJrZXkubGVuZ3RoID09PSAzMjtcbmZ1bmN0aW9uIG1ha2VDb252ZXJ0ZXIoVFlQRV9CWVRFKSB7XG4gIGNvbnN0IHBhcmVudCA9IGJpcDMyRGVyaXZhdGlvbi5tYWtlQ29udmVydGVyKFRZUEVfQllURSwgaXNWYWxpZEJJUDM0MEtleSk7XG4gIGZ1bmN0aW9uIGRlY29kZShrZXlWYWwpIHtcbiAgICBjb25zdCBuSGFzaGVzID0gdmFydWludC5kZWNvZGUoa2V5VmFsLnZhbHVlKTtcbiAgICBjb25zdCBuSGFzaGVzTGVuID0gdmFydWludC5lbmNvZGluZ0xlbmd0aChuSGFzaGVzKTtcbiAgICBjb25zdCBiYXNlID0gcGFyZW50LmRlY29kZSh7XG4gICAgICBrZXk6IGtleVZhbC5rZXksXG4gICAgICB2YWx1ZToga2V5VmFsLnZhbHVlLnNsaWNlKG5IYXNoZXNMZW4gKyBuSGFzaGVzICogMzIpLFxuICAgIH0pO1xuICAgIGNvbnN0IGxlYWZIYXNoZXMgPSBuZXcgQXJyYXkobkhhc2hlcyk7XG4gICAgZm9yIChsZXQgaSA9IDAsIF9vZmZzZXQgPSBuSGFzaGVzTGVuOyBpIDwgbkhhc2hlczsgaSsrLCBfb2Zmc2V0ICs9IDMyKSB7XG4gICAgICBsZWFmSGFzaGVzW2ldID0ga2V5VmFsLnZhbHVlLnNsaWNlKF9vZmZzZXQsIF9vZmZzZXQgKyAzMik7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7IGxlYWZIYXNoZXMgfSk7XG4gIH1cbiAgZnVuY3Rpb24gZW5jb2RlKGRhdGEpIHtcbiAgICBjb25zdCBiYXNlID0gcGFyZW50LmVuY29kZShkYXRhKTtcbiAgICBjb25zdCBuSGFzaGVzTGVuID0gdmFydWludC5lbmNvZGluZ0xlbmd0aChkYXRhLmxlYWZIYXNoZXMubGVuZ3RoKTtcbiAgICBjb25zdCBuSGFzaGVzQnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKG5IYXNoZXNMZW4pO1xuICAgIHZhcnVpbnQuZW5jb2RlKGRhdGEubGVhZkhhc2hlcy5sZW5ndGgsIG5IYXNoZXNCdWYpO1xuICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmNvbmNhdChbbkhhc2hlc0J1ZiwgLi4uZGF0YS5sZWFmSGFzaGVzLCBiYXNlLnZhbHVlXSk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHsgdmFsdWUgfSk7XG4gIH1cbiAgY29uc3QgZXhwZWN0ZWQgPVxuICAgICd7ICcgK1xuICAgICdtYXN0ZXJGaW5nZXJwcmludDogQnVmZmVyOyAnICtcbiAgICAncHVia2V5OiBCdWZmZXI7ICcgK1xuICAgICdwYXRoOiBzdHJpbmc7ICcgK1xuICAgICdsZWFmSGFzaGVzOiBCdWZmZXJbXTsgJyArXG4gICAgJ30nO1xuICBmdW5jdGlvbiBjaGVjayhkYXRhKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIEFycmF5LmlzQXJyYXkoZGF0YS5sZWFmSGFzaGVzKSAmJlxuICAgICAgZGF0YS5sZWFmSGFzaGVzLmV2ZXJ5KFxuICAgICAgICBsZWFmSGFzaCA9PiBCdWZmZXIuaXNCdWZmZXIobGVhZkhhc2gpICYmIGxlYWZIYXNoLmxlbmd0aCA9PT0gMzIsXG4gICAgICApICYmXG4gICAgICBwYXJlbnQuY2hlY2soZGF0YSlcbiAgICApO1xuICB9XG4gIHJldHVybiB7XG4gICAgZGVjb2RlLFxuICAgIGVuY29kZSxcbiAgICBjaGVjayxcbiAgICBleHBlY3RlZCxcbiAgICBjYW5BZGRUb0FycmF5OiBwYXJlbnQuY2FuQWRkVG9BcnJheSxcbiAgfTtcbn1cbmV4cG9ydHMubWFrZUNvbnZlcnRlciA9IG1ha2VDb252ZXJ0ZXI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/shared/tapBip32Derivation.js\n\n}")},"./node_modules/bip174/src/lib/converter/shared/tapInternalKey.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction makeConverter(TYPE_BYTE) {\n function decode(keyVal) {\n if (keyVal.key[0] !== TYPE_BYTE || keyVal.key.length !== 1) {\n throw new Error(\n 'Decode Error: could not decode tapInternalKey with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n if (keyVal.value.length !== 32) {\n throw new Error(\n 'Decode Error: tapInternalKey not a 32-byte x-only pubkey',\n );\n }\n return keyVal.value;\n }\n function encode(value) {\n const key = Buffer.from([TYPE_BYTE]);\n return { key, value };\n }\n const expected = 'Buffer';\n function check(data) {\n return Buffer.isBuffer(data) && data.length === 32;\n }\n function canAdd(currentData, newData) {\n return (\n !!currentData && !!newData && currentData.tapInternalKey === undefined\n );\n }\n return {\n decode,\n encode,\n check,\n expected,\n canAdd,\n };\n}\nexports.makeConverter = makeConverter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL3NoYXJlZC90YXBJbnRlcm5hbEtleS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvc2hhcmVkL3RhcEludGVybmFsS2V5LmpzP2I4ZjUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmZ1bmN0aW9uIG1ha2VDb252ZXJ0ZXIoVFlQRV9CWVRFKSB7XG4gIGZ1bmN0aW9uIGRlY29kZShrZXlWYWwpIHtcbiAgICBpZiAoa2V5VmFsLmtleVswXSAhPT0gVFlQRV9CWVRFIHx8IGtleVZhbC5rZXkubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdEZWNvZGUgRXJyb3I6IGNvdWxkIG5vdCBkZWNvZGUgdGFwSW50ZXJuYWxLZXkgd2l0aCBrZXkgMHgnICtcbiAgICAgICAgICBrZXlWYWwua2V5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChrZXlWYWwudmFsdWUubGVuZ3RoICE9PSAzMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnRGVjb2RlIEVycm9yOiB0YXBJbnRlcm5hbEtleSBub3QgYSAzMi1ieXRlIHgtb25seSBwdWJrZXknLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleVZhbC52YWx1ZTtcbiAgfVxuICBmdW5jdGlvbiBlbmNvZGUodmFsdWUpIHtcbiAgICBjb25zdCBrZXkgPSBCdWZmZXIuZnJvbShbVFlQRV9CWVRFXSk7XG4gICAgcmV0dXJuIHsga2V5LCB2YWx1ZSB9O1xuICB9XG4gIGNvbnN0IGV4cGVjdGVkID0gJ0J1ZmZlcic7XG4gIGZ1bmN0aW9uIGNoZWNrKGRhdGEpIHtcbiAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGRhdGEpICYmIGRhdGEubGVuZ3RoID09PSAzMjtcbiAgfVxuICBmdW5jdGlvbiBjYW5BZGQoY3VycmVudERhdGEsIG5ld0RhdGEpIHtcbiAgICByZXR1cm4gKFxuICAgICAgISFjdXJyZW50RGF0YSAmJiAhIW5ld0RhdGEgJiYgY3VycmVudERhdGEudGFwSW50ZXJuYWxLZXkgPT09IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBkZWNvZGUsXG4gICAgZW5jb2RlLFxuICAgIGNoZWNrLFxuICAgIGV4cGVjdGVkLFxuICAgIGNhbkFkZCxcbiAgfTtcbn1cbmV4cG9ydHMubWFrZUNvbnZlcnRlciA9IG1ha2VDb252ZXJ0ZXI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/shared/tapInternalKey.js\n\n}")},"./node_modules/bip174/src/lib/converter/shared/witnessScript.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction makeConverter(TYPE_BYTE) {\n function decode(keyVal) {\n if (keyVal.key[0] !== TYPE_BYTE) {\n throw new Error(\n 'Decode Error: could not decode witnessScript with key 0x' +\n keyVal.key.toString('hex'),\n );\n }\n return keyVal.value;\n }\n function encode(data) {\n const key = Buffer.from([TYPE_BYTE]);\n return {\n key,\n value: data,\n };\n }\n const expected = 'Buffer';\n function check(data) {\n return Buffer.isBuffer(data);\n }\n function canAdd(currentData, newData) {\n return (\n !!currentData && !!newData && currentData.witnessScript === undefined\n );\n }\n return {\n decode,\n encode,\n check,\n expected,\n canAdd,\n };\n}\nexports.makeConverter = makeConverter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL3NoYXJlZC93aXRuZXNzU2NyaXB0LmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpcDE3NC9zcmMvbGliL2NvbnZlcnRlci9zaGFyZWQvd2l0bmVzc1NjcmlwdC5qcz9lYTg2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5mdW5jdGlvbiBtYWtlQ29udmVydGVyKFRZUEVfQllURSkge1xuICBmdW5jdGlvbiBkZWNvZGUoa2V5VmFsKSB7XG4gICAgaWYgKGtleVZhbC5rZXlbMF0gIT09IFRZUEVfQllURSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnRGVjb2RlIEVycm9yOiBjb3VsZCBub3QgZGVjb2RlIHdpdG5lc3NTY3JpcHQgd2l0aCBrZXkgMHgnICtcbiAgICAgICAgICBrZXlWYWwua2V5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBrZXlWYWwudmFsdWU7XG4gIH1cbiAgZnVuY3Rpb24gZW5jb2RlKGRhdGEpIHtcbiAgICBjb25zdCBrZXkgPSBCdWZmZXIuZnJvbShbVFlQRV9CWVRFXSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlOiBkYXRhLFxuICAgIH07XG4gIH1cbiAgY29uc3QgZXhwZWN0ZWQgPSAnQnVmZmVyJztcbiAgZnVuY3Rpb24gY2hlY2soZGF0YSkge1xuICAgIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoZGF0YSk7XG4gIH1cbiAgZnVuY3Rpb24gY2FuQWRkKGN1cnJlbnREYXRhLCBuZXdEYXRhKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhY3VycmVudERhdGEgJiYgISFuZXdEYXRhICYmIGN1cnJlbnREYXRhLndpdG5lc3NTY3JpcHQgPT09IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBkZWNvZGUsXG4gICAgZW5jb2RlLFxuICAgIGNoZWNrLFxuICAgIGV4cGVjdGVkLFxuICAgIGNhbkFkZCxcbiAgfTtcbn1cbmV4cG9ydHMubWFrZUNvbnZlcnRlciA9IG1ha2VDb252ZXJ0ZXI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/shared/witnessScript.js\n\n}")},"./node_modules/bip174/src/lib/converter/tools.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst varuint = __webpack_require__(/*! ./varint */ \"./node_modules/bip174/src/lib/converter/varint.js\");\nexports.range = n => [...Array(n).keys()];\nfunction reverseBuffer(buffer) {\n if (buffer.length < 1) return buffer;\n let j = buffer.length - 1;\n let tmp = 0;\n for (let i = 0; i < buffer.length / 2; i++) {\n tmp = buffer[i];\n buffer[i] = buffer[j];\n buffer[j] = tmp;\n j--;\n }\n return buffer;\n}\nexports.reverseBuffer = reverseBuffer;\nfunction keyValsToBuffer(keyVals) {\n const buffers = keyVals.map(keyValToBuffer);\n buffers.push(Buffer.from([0]));\n return Buffer.concat(buffers);\n}\nexports.keyValsToBuffer = keyValsToBuffer;\nfunction keyValToBuffer(keyVal) {\n const keyLen = keyVal.key.length;\n const valLen = keyVal.value.length;\n const keyVarIntLen = varuint.encodingLength(keyLen);\n const valVarIntLen = varuint.encodingLength(valLen);\n const buffer = Buffer.allocUnsafe(\n keyVarIntLen + keyLen + valVarIntLen + valLen,\n );\n varuint.encode(keyLen, buffer, 0);\n keyVal.key.copy(buffer, keyVarIntLen);\n varuint.encode(valLen, buffer, keyVarIntLen + keyLen);\n keyVal.value.copy(buffer, keyVarIntLen + keyLen + valVarIntLen);\n return buffer;\n}\nexports.keyValToBuffer = keyValToBuffer;\n// https://github.com/feross/buffer/blob/master/index.js#L1127\nfunction verifuint(value, max) {\n if (typeof value !== 'number')\n throw new Error('cannot write a non-number as a number');\n if (value < 0)\n throw new Error('specified a negative value for writing an unsigned value');\n if (value > max) throw new Error('RangeError: value out of range');\n if (Math.floor(value) !== value)\n throw new Error('value has a fractional component');\n}\nfunction readUInt64LE(buffer, offset) {\n const a = buffer.readUInt32LE(offset);\n let b = buffer.readUInt32LE(offset + 4);\n b *= 0x100000000;\n verifuint(b + a, 0x001fffffffffffff);\n return b + a;\n}\nexports.readUInt64LE = readUInt64LE;\nfunction writeUInt64LE(buffer, value, offset) {\n verifuint(value, 0x001fffffffffffff);\n buffer.writeInt32LE(value & -1, offset);\n buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4);\n return offset + 8;\n}\nexports.writeUInt64LE = writeUInt64LE;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL3Rvb2xzLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxnQkFBZ0IsbUJBQU8sQ0FBQyxtRUFBVTtBQUNsQyxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsdUJBQXVCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckIsU0FBUyxNQUFNO0FBQ2Y7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvdG9vbHMuanM/ODA5OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgdmFydWludCA9IHJlcXVpcmUoJy4vdmFyaW50Jyk7XG5leHBvcnRzLnJhbmdlID0gbiA9PiBbLi4uQXJyYXkobikua2V5cygpXTtcbmZ1bmN0aW9uIHJldmVyc2VCdWZmZXIoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgcmV0dXJuIGJ1ZmZlcjtcbiAgbGV0IGogPSBidWZmZXIubGVuZ3RoIC0gMTtcbiAgbGV0IHRtcCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmZmVyLmxlbmd0aCAvIDI7IGkrKykge1xuICAgIHRtcCA9IGJ1ZmZlcltpXTtcbiAgICBidWZmZXJbaV0gPSBidWZmZXJbal07XG4gICAgYnVmZmVyW2pdID0gdG1wO1xuICAgIGotLTtcbiAgfVxuICByZXR1cm4gYnVmZmVyO1xufVxuZXhwb3J0cy5yZXZlcnNlQnVmZmVyID0gcmV2ZXJzZUJ1ZmZlcjtcbmZ1bmN0aW9uIGtleVZhbHNUb0J1ZmZlcihrZXlWYWxzKSB7XG4gIGNvbnN0IGJ1ZmZlcnMgPSBrZXlWYWxzLm1hcChrZXlWYWxUb0J1ZmZlcik7XG4gIGJ1ZmZlcnMucHVzaChCdWZmZXIuZnJvbShbMF0pKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmZmVycyk7XG59XG5leHBvcnRzLmtleVZhbHNUb0J1ZmZlciA9IGtleVZhbHNUb0J1ZmZlcjtcbmZ1bmN0aW9uIGtleVZhbFRvQnVmZmVyKGtleVZhbCkge1xuICBjb25zdCBrZXlMZW4gPSBrZXlWYWwua2V5Lmxlbmd0aDtcbiAgY29uc3QgdmFsTGVuID0ga2V5VmFsLnZhbHVlLmxlbmd0aDtcbiAgY29uc3Qga2V5VmFySW50TGVuID0gdmFydWludC5lbmNvZGluZ0xlbmd0aChrZXlMZW4pO1xuICBjb25zdCB2YWxWYXJJbnRMZW4gPSB2YXJ1aW50LmVuY29kaW5nTGVuZ3RoKHZhbExlbik7XG4gIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShcbiAgICBrZXlWYXJJbnRMZW4gKyBrZXlMZW4gKyB2YWxWYXJJbnRMZW4gKyB2YWxMZW4sXG4gICk7XG4gIHZhcnVpbnQuZW5jb2RlKGtleUxlbiwgYnVmZmVyLCAwKTtcbiAga2V5VmFsLmtleS5jb3B5KGJ1ZmZlciwga2V5VmFySW50TGVuKTtcbiAgdmFydWludC5lbmNvZGUodmFsTGVuLCBidWZmZXIsIGtleVZhckludExlbiArIGtleUxlbik7XG4gIGtleVZhbC52YWx1ZS5jb3B5KGJ1ZmZlciwga2V5VmFySW50TGVuICsga2V5TGVuICsgdmFsVmFySW50TGVuKTtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmV4cG9ydHMua2V5VmFsVG9CdWZmZXIgPSBrZXlWYWxUb0J1ZmZlcjtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2Jsb2IvbWFzdGVyL2luZGV4LmpzI0wxMTI3XG5mdW5jdGlvbiB2ZXJpZnVpbnQodmFsdWUsIG1heCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCB3cml0ZSBhIG5vbi1udW1iZXIgYXMgYSBudW1iZXInKTtcbiAgaWYgKHZhbHVlIDwgMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NwZWNpZmllZCBhIG5lZ2F0aXZlIHZhbHVlIGZvciB3cml0aW5nIGFuIHVuc2lnbmVkIHZhbHVlJyk7XG4gIGlmICh2YWx1ZSA+IG1heCkgdGhyb3cgbmV3IEVycm9yKCdSYW5nZUVycm9yOiB2YWx1ZSBvdXQgb2YgcmFuZ2UnKTtcbiAgaWYgKE1hdGguZmxvb3IodmFsdWUpICE9PSB2YWx1ZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbHVlIGhhcyBhIGZyYWN0aW9uYWwgY29tcG9uZW50Jyk7XG59XG5mdW5jdGlvbiByZWFkVUludDY0TEUoYnVmZmVyLCBvZmZzZXQpIHtcbiAgY29uc3QgYSA9IGJ1ZmZlci5yZWFkVUludDMyTEUob2Zmc2V0KTtcbiAgbGV0IGIgPSBidWZmZXIucmVhZFVJbnQzMkxFKG9mZnNldCArIDQpO1xuICBiICo9IDB4MTAwMDAwMDAwO1xuICB2ZXJpZnVpbnQoYiArIGEsIDB4MDAxZmZmZmZmZmZmZmZmZik7XG4gIHJldHVybiBiICsgYTtcbn1cbmV4cG9ydHMucmVhZFVJbnQ2NExFID0gcmVhZFVJbnQ2NExFO1xuZnVuY3Rpb24gd3JpdGVVSW50NjRMRShidWZmZXIsIHZhbHVlLCBvZmZzZXQpIHtcbiAgdmVyaWZ1aW50KHZhbHVlLCAweDAwMWZmZmZmZmZmZmZmZmYpO1xuICBidWZmZXIud3JpdGVJbnQzMkxFKHZhbHVlICYgLTEsIG9mZnNldCk7XG4gIGJ1ZmZlci53cml0ZVVJbnQzMkxFKE1hdGguZmxvb3IodmFsdWUgLyAweDEwMDAwMDAwMCksIG9mZnNldCArIDQpO1xuICByZXR1cm4gb2Zmc2V0ICsgODtcbn1cbmV4cG9ydHMud3JpdGVVSW50NjRMRSA9IHdyaXRlVUludDY0TEU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/tools.js\n\n}")},"./node_modules/bip174/src/lib/converter/varint.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n// Number.MAX_SAFE_INTEGER\nconst MAX_SAFE_INTEGER = 9007199254740991;\nfunction checkUInt53(n) {\n if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0)\n throw new RangeError('value out of range');\n}\nfunction encode(_number, buffer, offset) {\n checkUInt53(_number);\n if (!buffer) buffer = Buffer.allocUnsafe(encodingLength(_number));\n if (!Buffer.isBuffer(buffer))\n throw new TypeError('buffer must be a Buffer instance');\n if (!offset) offset = 0;\n // 8 bit\n if (_number < 0xfd) {\n buffer.writeUInt8(_number, offset);\n Object.assign(encode, { bytes: 1 });\n // 16 bit\n } else if (_number <= 0xffff) {\n buffer.writeUInt8(0xfd, offset);\n buffer.writeUInt16LE(_number, offset + 1);\n Object.assign(encode, { bytes: 3 });\n // 32 bit\n } else if (_number <= 0xffffffff) {\n buffer.writeUInt8(0xfe, offset);\n buffer.writeUInt32LE(_number, offset + 1);\n Object.assign(encode, { bytes: 5 });\n // 64 bit\n } else {\n buffer.writeUInt8(0xff, offset);\n buffer.writeUInt32LE(_number >>> 0, offset + 1);\n buffer.writeUInt32LE((_number / 0x100000000) | 0, offset + 5);\n Object.assign(encode, { bytes: 9 });\n }\n return buffer;\n}\nexports.encode = encode;\nfunction decode(buffer, offset) {\n if (!Buffer.isBuffer(buffer))\n throw new TypeError('buffer must be a Buffer instance');\n if (!offset) offset = 0;\n const first = buffer.readUInt8(offset);\n // 8 bit\n if (first < 0xfd) {\n Object.assign(decode, { bytes: 1 });\n return first;\n // 16 bit\n } else if (first === 0xfd) {\n Object.assign(decode, { bytes: 3 });\n return buffer.readUInt16LE(offset + 1);\n // 32 bit\n } else if (first === 0xfe) {\n Object.assign(decode, { bytes: 5 });\n return buffer.readUInt32LE(offset + 1);\n // 64 bit\n } else {\n Object.assign(decode, { bytes: 9 });\n const lo = buffer.readUInt32LE(offset + 1);\n const hi = buffer.readUInt32LE(offset + 5);\n const _number = hi * 0x0100000000 + lo;\n checkUInt53(_number);\n return _number;\n }\n}\nexports.decode = decode;\nfunction encodingLength(_number) {\n checkUInt53(_number);\n return _number < 0xfd\n ? 1\n : _number <= 0xffff\n ? 3\n : _number <= 0xffffffff\n ? 5\n : 9;\n}\nexports.encodingLength = encodingLength;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvY29udmVydGVyL3ZhcmludC5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixNQUFNO0FBQzlCLE9BQU8sTUFBTTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTtBQUN0QztBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsNEJBQTRCLFVBQVU7QUFDdEM7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLDRCQUE0QixVQUFVO0FBQ3RDO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLE9BQU8sTUFBTTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTtBQUN0QztBQUNBO0FBQ0EsSUFBSTtBQUNKLDRCQUE0QixVQUFVO0FBQ3RDO0FBQ0E7QUFDQSxJQUFJO0FBQ0osNEJBQTRCLFVBQVU7QUFDdEM7QUFDQTtBQUNBLElBQUk7QUFDSiw0QkFBNEIsVUFBVTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpcDE3NC9zcmMvbGliL2NvbnZlcnRlci92YXJpbnQuanM/MzUxZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbmNvbnN0IE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuZnVuY3Rpb24gY2hlY2tVSW50NTMobikge1xuICBpZiAobiA8IDAgfHwgbiA+IE1BWF9TQUZFX0lOVEVHRVIgfHwgbiAlIDEgIT09IDApXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3ZhbHVlIG91dCBvZiByYW5nZScpO1xufVxuZnVuY3Rpb24gZW5jb2RlKF9udW1iZXIsIGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIGNoZWNrVUludDUzKF9udW1iZXIpO1xuICBpZiAoIWJ1ZmZlcikgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGVuY29kaW5nTGVuZ3RoKF9udW1iZXIpKTtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmZmVyKSlcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdidWZmZXIgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO1xuICBpZiAoIW9mZnNldCkgb2Zmc2V0ID0gMDtcbiAgLy8gOCBiaXRcbiAgaWYgKF9udW1iZXIgPCAweGZkKSB7XG4gICAgYnVmZmVyLndyaXRlVUludDgoX251bWJlciwgb2Zmc2V0KTtcbiAgICBPYmplY3QuYXNzaWduKGVuY29kZSwgeyBieXRlczogMSB9KTtcbiAgICAvLyAxNiBiaXRcbiAgfSBlbHNlIGlmIChfbnVtYmVyIDw9IDB4ZmZmZikge1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDB4ZmQsIG9mZnNldCk7XG4gICAgYnVmZmVyLndyaXRlVUludDE2TEUoX251bWJlciwgb2Zmc2V0ICsgMSk7XG4gICAgT2JqZWN0LmFzc2lnbihlbmNvZGUsIHsgYnl0ZXM6IDMgfSk7XG4gICAgLy8gMzIgYml0XG4gIH0gZWxzZSBpZiAoX251bWJlciA8PSAweGZmZmZmZmZmKSB7XG4gICAgYnVmZmVyLndyaXRlVUludDgoMHhmZSwgb2Zmc2V0KTtcbiAgICBidWZmZXIud3JpdGVVSW50MzJMRShfbnVtYmVyLCBvZmZzZXQgKyAxKTtcbiAgICBPYmplY3QuYXNzaWduKGVuY29kZSwgeyBieXRlczogNSB9KTtcbiAgICAvLyA2NCBiaXRcbiAgfSBlbHNlIHtcbiAgICBidWZmZXIud3JpdGVVSW50OCgweGZmLCBvZmZzZXQpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQzMkxFKF9udW1iZXIgPj4+IDAsIG9mZnNldCArIDEpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQzMkxFKChfbnVtYmVyIC8gMHgxMDAwMDAwMDApIHwgMCwgb2Zmc2V0ICsgNSk7XG4gICAgT2JqZWN0LmFzc2lnbihlbmNvZGUsIHsgYnl0ZXM6IDkgfSk7XG4gIH1cbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmV4cG9ydHMuZW5jb2RlID0gZW5jb2RlO1xuZnVuY3Rpb24gZGVjb2RlKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcikpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYnVmZmVyIG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtcbiAgaWYgKCFvZmZzZXQpIG9mZnNldCA9IDA7XG4gIGNvbnN0IGZpcnN0ID0gYnVmZmVyLnJlYWRVSW50OChvZmZzZXQpO1xuICAvLyA4IGJpdFxuICBpZiAoZmlyc3QgPCAweGZkKSB7XG4gICAgT2JqZWN0LmFzc2lnbihkZWNvZGUsIHsgYnl0ZXM6IDEgfSk7XG4gICAgcmV0dXJuIGZpcnN0O1xuICAgIC8vIDE2IGJpdFxuICB9IGVsc2UgaWYgKGZpcnN0ID09PSAweGZkKSB7XG4gICAgT2JqZWN0LmFzc2lnbihkZWNvZGUsIHsgYnl0ZXM6IDMgfSk7XG4gICAgcmV0dXJuIGJ1ZmZlci5yZWFkVUludDE2TEUob2Zmc2V0ICsgMSk7XG4gICAgLy8gMzIgYml0XG4gIH0gZWxzZSBpZiAoZmlyc3QgPT09IDB4ZmUpIHtcbiAgICBPYmplY3QuYXNzaWduKGRlY29kZSwgeyBieXRlczogNSB9KTtcbiAgICByZXR1cm4gYnVmZmVyLnJlYWRVSW50MzJMRShvZmZzZXQgKyAxKTtcbiAgICAvLyA2NCBiaXRcbiAgfSBlbHNlIHtcbiAgICBPYmplY3QuYXNzaWduKGRlY29kZSwgeyBieXRlczogOSB9KTtcbiAgICBjb25zdCBsbyA9IGJ1ZmZlci5yZWFkVUludDMyTEUob2Zmc2V0ICsgMSk7XG4gICAgY29uc3QgaGkgPSBidWZmZXIucmVhZFVJbnQzMkxFKG9mZnNldCArIDUpO1xuICAgIGNvbnN0IF9udW1iZXIgPSBoaSAqIDB4MDEwMDAwMDAwMCArIGxvO1xuICAgIGNoZWNrVUludDUzKF9udW1iZXIpO1xuICAgIHJldHVybiBfbnVtYmVyO1xuICB9XG59XG5leHBvcnRzLmRlY29kZSA9IGRlY29kZTtcbmZ1bmN0aW9uIGVuY29kaW5nTGVuZ3RoKF9udW1iZXIpIHtcbiAgY2hlY2tVSW50NTMoX251bWJlcik7XG4gIHJldHVybiBfbnVtYmVyIDwgMHhmZFxuICAgID8gMVxuICAgIDogX251bWJlciA8PSAweGZmZmZcbiAgICA/IDNcbiAgICA6IF9udW1iZXIgPD0gMHhmZmZmZmZmZlxuICAgID8gNVxuICAgIDogOTtcbn1cbmV4cG9ydHMuZW5jb2RpbmdMZW5ndGggPSBlbmNvZGluZ0xlbmd0aDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/converter/varint.js\n\n}")},"./node_modules/bip174/src/lib/parser/fromBuffer.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst convert = __webpack_require__(/*! ../converter */ \"./node_modules/bip174/src/lib/converter/index.js\");\nconst tools_1 = __webpack_require__(/*! ../converter/tools */ \"./node_modules/bip174/src/lib/converter/tools.js\");\nconst varuint = __webpack_require__(/*! ../converter/varint */ \"./node_modules/bip174/src/lib/converter/varint.js\");\nconst typeFields_1 = __webpack_require__(/*! ../typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nfunction psbtFromBuffer(buffer, txGetter) {\n let offset = 0;\n function varSlice() {\n const keyLen = varuint.decode(buffer, offset);\n offset += varuint.encodingLength(keyLen);\n const key = buffer.slice(offset, offset + keyLen);\n offset += keyLen;\n return key;\n }\n function readUInt32BE() {\n const num = buffer.readUInt32BE(offset);\n offset += 4;\n return num;\n }\n function readUInt8() {\n const num = buffer.readUInt8(offset);\n offset += 1;\n return num;\n }\n function getKeyValue() {\n const key = varSlice();\n const value = varSlice();\n return {\n key,\n value,\n };\n }\n function checkEndOfKeyValPairs() {\n if (offset >= buffer.length) {\n throw new Error('Format Error: Unexpected End of PSBT');\n }\n const isEnd = buffer.readUInt8(offset) === 0;\n if (isEnd) {\n offset++;\n }\n return isEnd;\n }\n if (readUInt32BE() !== 0x70736274) {\n throw new Error('Format Error: Invalid Magic Number');\n }\n if (readUInt8() !== 0xff) {\n throw new Error(\n 'Format Error: Magic Number must be followed by 0xff separator',\n );\n }\n const globalMapKeyVals = [];\n const globalKeyIndex = {};\n while (!checkEndOfKeyValPairs()) {\n const keyVal = getKeyValue();\n const hexKey = keyVal.key.toString('hex');\n if (globalKeyIndex[hexKey]) {\n throw new Error(\n 'Format Error: Keys must be unique for global keymap: key ' + hexKey,\n );\n }\n globalKeyIndex[hexKey] = 1;\n globalMapKeyVals.push(keyVal);\n }\n const unsignedTxMaps = globalMapKeyVals.filter(\n keyVal => keyVal.key[0] === typeFields_1.GlobalTypes.UNSIGNED_TX,\n );\n if (unsignedTxMaps.length !== 1) {\n throw new Error('Format Error: Only one UNSIGNED_TX allowed');\n }\n const unsignedTx = txGetter(unsignedTxMaps[0].value);\n // Get input and output counts to loop the respective fields\n const { inputCount, outputCount } = unsignedTx.getInputOutputCounts();\n const inputKeyVals = [];\n const outputKeyVals = [];\n // Get input fields\n for (const index of tools_1.range(inputCount)) {\n const inputKeyIndex = {};\n const input = [];\n while (!checkEndOfKeyValPairs()) {\n const keyVal = getKeyValue();\n const hexKey = keyVal.key.toString('hex');\n if (inputKeyIndex[hexKey]) {\n throw new Error(\n 'Format Error: Keys must be unique for each input: ' +\n 'input index ' +\n index +\n ' key ' +\n hexKey,\n );\n }\n inputKeyIndex[hexKey] = 1;\n input.push(keyVal);\n }\n inputKeyVals.push(input);\n }\n for (const index of tools_1.range(outputCount)) {\n const outputKeyIndex = {};\n const output = [];\n while (!checkEndOfKeyValPairs()) {\n const keyVal = getKeyValue();\n const hexKey = keyVal.key.toString('hex');\n if (outputKeyIndex[hexKey]) {\n throw new Error(\n 'Format Error: Keys must be unique for each output: ' +\n 'output index ' +\n index +\n ' key ' +\n hexKey,\n );\n }\n outputKeyIndex[hexKey] = 1;\n output.push(keyVal);\n }\n outputKeyVals.push(output);\n }\n return psbtFromKeyVals(unsignedTx, {\n globalMapKeyVals,\n inputKeyVals,\n outputKeyVals,\n });\n}\nexports.psbtFromBuffer = psbtFromBuffer;\nfunction checkKeyBuffer(type, keyBuf, keyNum) {\n if (!keyBuf.equals(Buffer.from([keyNum]))) {\n throw new Error(\n `Format Error: Invalid ${type} key: ${keyBuf.toString('hex')}`,\n );\n }\n}\nexports.checkKeyBuffer = checkKeyBuffer;\nfunction psbtFromKeyVals(\n unsignedTx,\n { globalMapKeyVals, inputKeyVals, outputKeyVals },\n) {\n // That was easy :-)\n const globalMap = {\n unsignedTx,\n };\n let txCount = 0;\n for (const keyVal of globalMapKeyVals) {\n // If a globalMap item needs pubkey, uncomment\n // const pubkey = convert.globals.checkPubkey(keyVal);\n switch (keyVal.key[0]) {\n case typeFields_1.GlobalTypes.UNSIGNED_TX:\n checkKeyBuffer(\n 'global',\n keyVal.key,\n typeFields_1.GlobalTypes.UNSIGNED_TX,\n );\n if (txCount > 0) {\n throw new Error('Format Error: GlobalMap has multiple UNSIGNED_TX');\n }\n txCount++;\n break;\n case typeFields_1.GlobalTypes.GLOBAL_XPUB:\n if (globalMap.globalXpub === undefined) {\n globalMap.globalXpub = [];\n }\n globalMap.globalXpub.push(convert.globals.globalXpub.decode(keyVal));\n break;\n default:\n // This will allow inclusion during serialization.\n if (!globalMap.unknownKeyVals) globalMap.unknownKeyVals = [];\n globalMap.unknownKeyVals.push(keyVal);\n }\n }\n // Get input and output counts to loop the respective fields\n const inputCount = inputKeyVals.length;\n const outputCount = outputKeyVals.length;\n const inputs = [];\n const outputs = [];\n // Get input fields\n for (const index of tools_1.range(inputCount)) {\n const input = {};\n for (const keyVal of inputKeyVals[index]) {\n convert.inputs.checkPubkey(keyVal);\n switch (keyVal.key[0]) {\n case typeFields_1.InputTypes.NON_WITNESS_UTXO:\n checkKeyBuffer(\n 'input',\n keyVal.key,\n typeFields_1.InputTypes.NON_WITNESS_UTXO,\n );\n if (input.nonWitnessUtxo !== undefined) {\n throw new Error(\n 'Format Error: Input has multiple NON_WITNESS_UTXO',\n );\n }\n input.nonWitnessUtxo = convert.inputs.nonWitnessUtxo.decode(keyVal);\n break;\n case typeFields_1.InputTypes.WITNESS_UTXO:\n checkKeyBuffer(\n 'input',\n keyVal.key,\n typeFields_1.InputTypes.WITNESS_UTXO,\n );\n if (input.witnessUtxo !== undefined) {\n throw new Error('Format Error: Input has multiple WITNESS_UTXO');\n }\n input.witnessUtxo = convert.inputs.witnessUtxo.decode(keyVal);\n break;\n case typeFields_1.InputTypes.PARTIAL_SIG:\n if (input.partialSig === undefined) {\n input.partialSig = [];\n }\n input.partialSig.push(convert.inputs.partialSig.decode(keyVal));\n break;\n case typeFields_1.InputTypes.SIGHASH_TYPE:\n checkKeyBuffer(\n 'input',\n keyVal.key,\n typeFields_1.InputTypes.SIGHASH_TYPE,\n );\n if (input.sighashType !== undefined) {\n throw new Error('Format Error: Input has multiple SIGHASH_TYPE');\n }\n input.sighashType = convert.inputs.sighashType.decode(keyVal);\n break;\n case typeFields_1.InputTypes.REDEEM_SCRIPT:\n checkKeyBuffer(\n 'input',\n keyVal.key,\n typeFields_1.InputTypes.REDEEM_SCRIPT,\n );\n if (input.redeemScript !== undefined) {\n throw new Error('Format Error: Input has multiple REDEEM_SCRIPT');\n }\n input.redeemScript = convert.inputs.redeemScript.decode(keyVal);\n break;\n case typeFields_1.InputTypes.WITNESS_SCRIPT:\n checkKeyBuffer(\n 'input',\n keyVal.key,\n typeFields_1.InputTypes.WITNESS_SCRIPT,\n );\n if (input.witnessScript !== undefined) {\n throw new Error('Format Error: Input has multiple WITNESS_SCRIPT');\n }\n input.witnessScript = convert.inputs.witnessScript.decode(keyVal);\n break;\n case typeFields_1.InputTypes.BIP32_DERIVATION:\n if (input.bip32Derivation === undefined) {\n input.bip32Derivation = [];\n }\n input.bip32Derivation.push(\n convert.inputs.bip32Derivation.decode(keyVal),\n );\n break;\n case typeFields_1.InputTypes.FINAL_SCRIPTSIG:\n checkKeyBuffer(\n 'input',\n keyVal.key,\n typeFields_1.InputTypes.FINAL_SCRIPTSIG,\n );\n input.finalScriptSig = convert.inputs.finalScriptSig.decode(keyVal);\n break;\n case typeFields_1.InputTypes.FINAL_SCRIPTWITNESS:\n checkKeyBuffer(\n 'input',\n keyVal.key,\n typeFields_1.InputTypes.FINAL_SCRIPTWITNESS,\n );\n input.finalScriptWitness = convert.inputs.finalScriptWitness.decode(\n keyVal,\n );\n break;\n case typeFields_1.InputTypes.POR_COMMITMENT:\n checkKeyBuffer(\n 'input',\n keyVal.key,\n typeFields_1.InputTypes.POR_COMMITMENT,\n );\n input.porCommitment = convert.inputs.porCommitment.decode(keyVal);\n break;\n case typeFields_1.InputTypes.TAP_KEY_SIG:\n checkKeyBuffer(\n 'input',\n keyVal.key,\n typeFields_1.InputTypes.TAP_KEY_SIG,\n );\n input.tapKeySig = convert.inputs.tapKeySig.decode(keyVal);\n break;\n case typeFields_1.InputTypes.TAP_SCRIPT_SIG:\n if (input.tapScriptSig === undefined) {\n input.tapScriptSig = [];\n }\n input.tapScriptSig.push(convert.inputs.tapScriptSig.decode(keyVal));\n break;\n case typeFields_1.InputTypes.TAP_LEAF_SCRIPT:\n if (input.tapLeafScript === undefined) {\n input.tapLeafScript = [];\n }\n input.tapLeafScript.push(convert.inputs.tapLeafScript.decode(keyVal));\n break;\n case typeFields_1.InputTypes.TAP_BIP32_DERIVATION:\n if (input.tapBip32Derivation === undefined) {\n input.tapBip32Derivation = [];\n }\n input.tapBip32Derivation.push(\n convert.inputs.tapBip32Derivation.decode(keyVal),\n );\n break;\n case typeFields_1.InputTypes.TAP_INTERNAL_KEY:\n checkKeyBuffer(\n 'input',\n keyVal.key,\n typeFields_1.InputTypes.TAP_INTERNAL_KEY,\n );\n input.tapInternalKey = convert.inputs.tapInternalKey.decode(keyVal);\n break;\n case typeFields_1.InputTypes.TAP_MERKLE_ROOT:\n checkKeyBuffer(\n 'input',\n keyVal.key,\n typeFields_1.InputTypes.TAP_MERKLE_ROOT,\n );\n input.tapMerkleRoot = convert.inputs.tapMerkleRoot.decode(keyVal);\n break;\n default:\n // This will allow inclusion during serialization.\n if (!input.unknownKeyVals) input.unknownKeyVals = [];\n input.unknownKeyVals.push(keyVal);\n }\n }\n inputs.push(input);\n }\n for (const index of tools_1.range(outputCount)) {\n const output = {};\n for (const keyVal of outputKeyVals[index]) {\n convert.outputs.checkPubkey(keyVal);\n switch (keyVal.key[0]) {\n case typeFields_1.OutputTypes.REDEEM_SCRIPT:\n checkKeyBuffer(\n 'output',\n keyVal.key,\n typeFields_1.OutputTypes.REDEEM_SCRIPT,\n );\n if (output.redeemScript !== undefined) {\n throw new Error('Format Error: Output has multiple REDEEM_SCRIPT');\n }\n output.redeemScript = convert.outputs.redeemScript.decode(keyVal);\n break;\n case typeFields_1.OutputTypes.WITNESS_SCRIPT:\n checkKeyBuffer(\n 'output',\n keyVal.key,\n typeFields_1.OutputTypes.WITNESS_SCRIPT,\n );\n if (output.witnessScript !== undefined) {\n throw new Error('Format Error: Output has multiple WITNESS_SCRIPT');\n }\n output.witnessScript = convert.outputs.witnessScript.decode(keyVal);\n break;\n case typeFields_1.OutputTypes.BIP32_DERIVATION:\n if (output.bip32Derivation === undefined) {\n output.bip32Derivation = [];\n }\n output.bip32Derivation.push(\n convert.outputs.bip32Derivation.decode(keyVal),\n );\n break;\n case typeFields_1.OutputTypes.TAP_INTERNAL_KEY:\n checkKeyBuffer(\n 'output',\n keyVal.key,\n typeFields_1.OutputTypes.TAP_INTERNAL_KEY,\n );\n output.tapInternalKey = convert.outputs.tapInternalKey.decode(keyVal);\n break;\n case typeFields_1.OutputTypes.TAP_TREE:\n checkKeyBuffer(\n 'output',\n keyVal.key,\n typeFields_1.OutputTypes.TAP_TREE,\n );\n output.tapTree = convert.outputs.tapTree.decode(keyVal);\n break;\n case typeFields_1.OutputTypes.TAP_BIP32_DERIVATION:\n if (output.tapBip32Derivation === undefined) {\n output.tapBip32Derivation = [];\n }\n output.tapBip32Derivation.push(\n convert.outputs.tapBip32Derivation.decode(keyVal),\n );\n break;\n default:\n if (!output.unknownKeyVals) output.unknownKeyVals = [];\n output.unknownKeyVals.push(keyVal);\n }\n }\n outputs.push(output);\n }\n return { globalMap, inputs, outputs };\n}\nexports.psbtFromKeyVals = psbtFromKeyVals;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvcGFyc2VyL2Zyb21CdWZmZXIuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGdCQUFnQixtQkFBTyxDQUFDLHNFQUFjO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLDRFQUFvQjtBQUM1QyxnQkFBZ0IsbUJBQU8sQ0FBQyw4RUFBcUI7QUFDN0MscUJBQXFCLG1CQUFPLENBQUMsa0VBQWU7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSwwQkFBMEI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBLHFCQUFxQixNQUFNO0FBQzNCO0FBQ0EsK0JBQStCLE1BQU0sT0FBTyx1QkFBdUI7QUFDbkU7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLCtDQUErQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLHVCQUF1QiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpcDE3NC9zcmMvbGliL3BhcnNlci9mcm9tQnVmZmVyLmpzPzViZTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvbnZlcnQgPSByZXF1aXJlKCcuLi9jb252ZXJ0ZXInKTtcbmNvbnN0IHRvb2xzXzEgPSByZXF1aXJlKCcuLi9jb252ZXJ0ZXIvdG9vbHMnKTtcbmNvbnN0IHZhcnVpbnQgPSByZXF1aXJlKCcuLi9jb252ZXJ0ZXIvdmFyaW50Jyk7XG5jb25zdCB0eXBlRmllbGRzXzEgPSByZXF1aXJlKCcuLi90eXBlRmllbGRzJyk7XG5mdW5jdGlvbiBwc2J0RnJvbUJ1ZmZlcihidWZmZXIsIHR4R2V0dGVyKSB7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBmdW5jdGlvbiB2YXJTbGljZSgpIHtcbiAgICBjb25zdCBrZXlMZW4gPSB2YXJ1aW50LmRlY29kZShidWZmZXIsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IHZhcnVpbnQuZW5jb2RpbmdMZW5ndGgoa2V5TGVuKTtcbiAgICBjb25zdCBrZXkgPSBidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBrZXlMZW4pO1xuICAgIG9mZnNldCArPSBrZXlMZW47XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuICBmdW5jdGlvbiByZWFkVUludDMyQkUoKSB7XG4gICAgY29uc3QgbnVtID0gYnVmZmVyLnJlYWRVSW50MzJCRShvZmZzZXQpO1xuICAgIG9mZnNldCArPSA0O1xuICAgIHJldHVybiBudW07XG4gIH1cbiAgZnVuY3Rpb24gcmVhZFVJbnQ4KCkge1xuICAgIGNvbnN0IG51bSA9IGJ1ZmZlci5yZWFkVUludDgob2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gMTtcbiAgICByZXR1cm4gbnVtO1xuICB9XG4gIGZ1bmN0aW9uIGdldEtleVZhbHVlKCkge1xuICAgIGNvbnN0IGtleSA9IHZhclNsaWNlKCk7XG4gICAgY29uc3QgdmFsdWUgPSB2YXJTbGljZSgpO1xuICAgIHJldHVybiB7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGNoZWNrRW5kT2ZLZXlWYWxQYWlycygpIHtcbiAgICBpZiAob2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybWF0IEVycm9yOiBVbmV4cGVjdGVkIEVuZCBvZiBQU0JUJyk7XG4gICAgfVxuICAgIGNvbnN0IGlzRW5kID0gYnVmZmVyLnJlYWRVSW50OChvZmZzZXQpID09PSAwO1xuICAgIGlmIChpc0VuZCkge1xuICAgICAgb2Zmc2V0Kys7XG4gICAgfVxuICAgIHJldHVybiBpc0VuZDtcbiAgfVxuICBpZiAocmVhZFVJbnQzMkJFKCkgIT09IDB4NzA3MzYyNzQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Zvcm1hdCBFcnJvcjogSW52YWxpZCBNYWdpYyBOdW1iZXInKTtcbiAgfVxuICBpZiAocmVhZFVJbnQ4KCkgIT09IDB4ZmYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnRm9ybWF0IEVycm9yOiBNYWdpYyBOdW1iZXIgbXVzdCBiZSBmb2xsb3dlZCBieSAweGZmIHNlcGFyYXRvcicsXG4gICAgKTtcbiAgfVxuICBjb25zdCBnbG9iYWxNYXBLZXlWYWxzID0gW107XG4gIGNvbnN0IGdsb2JhbEtleUluZGV4ID0ge307XG4gIHdoaWxlICghY2hlY2tFbmRPZktleVZhbFBhaXJzKCkpIHtcbiAgICBjb25zdCBrZXlWYWwgPSBnZXRLZXlWYWx1ZSgpO1xuICAgIGNvbnN0IGhleEtleSA9IGtleVZhbC5rZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGlmIChnbG9iYWxLZXlJbmRleFtoZXhLZXldKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdGb3JtYXQgRXJyb3I6IEtleXMgbXVzdCBiZSB1bmlxdWUgZm9yIGdsb2JhbCBrZXltYXA6IGtleSAnICsgaGV4S2V5LFxuICAgICAgKTtcbiAgICB9XG4gICAgZ2xvYmFsS2V5SW5kZXhbaGV4S2V5XSA9IDE7XG4gICAgZ2xvYmFsTWFwS2V5VmFscy5wdXNoKGtleVZhbCk7XG4gIH1cbiAgY29uc3QgdW5zaWduZWRUeE1hcHMgPSBnbG9iYWxNYXBLZXlWYWxzLmZpbHRlcihcbiAgICBrZXlWYWwgPT4ga2V5VmFsLmtleVswXSA9PT0gdHlwZUZpZWxkc18xLkdsb2JhbFR5cGVzLlVOU0lHTkVEX1RYLFxuICApO1xuICBpZiAodW5zaWduZWRUeE1hcHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGb3JtYXQgRXJyb3I6IE9ubHkgb25lIFVOU0lHTkVEX1RYIGFsbG93ZWQnKTtcbiAgfVxuICBjb25zdCB1bnNpZ25lZFR4ID0gdHhHZXR0ZXIodW5zaWduZWRUeE1hcHNbMF0udmFsdWUpO1xuICAvLyBHZXQgaW5wdXQgYW5kIG91dHB1dCBjb3VudHMgdG8gbG9vcCB0aGUgcmVzcGVjdGl2ZSBmaWVsZHNcbiAgY29uc3QgeyBpbnB1dENvdW50LCBvdXRwdXRDb3VudCB9ID0gdW5zaWduZWRUeC5nZXRJbnB1dE91dHB1dENvdW50cygpO1xuICBjb25zdCBpbnB1dEtleVZhbHMgPSBbXTtcbiAgY29uc3Qgb3V0cHV0S2V5VmFscyA9IFtdO1xuICAvLyBHZXQgaW5wdXQgZmllbGRzXG4gIGZvciAoY29uc3QgaW5kZXggb2YgdG9vbHNfMS5yYW5nZShpbnB1dENvdW50KSkge1xuICAgIGNvbnN0IGlucHV0S2V5SW5kZXggPSB7fTtcbiAgICBjb25zdCBpbnB1dCA9IFtdO1xuICAgIHdoaWxlICghY2hlY2tFbmRPZktleVZhbFBhaXJzKCkpIHtcbiAgICAgIGNvbnN0IGtleVZhbCA9IGdldEtleVZhbHVlKCk7XG4gICAgICBjb25zdCBoZXhLZXkgPSBrZXlWYWwua2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGlmIChpbnB1dEtleUluZGV4W2hleEtleV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdGb3JtYXQgRXJyb3I6IEtleXMgbXVzdCBiZSB1bmlxdWUgZm9yIGVhY2ggaW5wdXQ6ICcgK1xuICAgICAgICAgICAgJ2lucHV0IGluZGV4ICcgK1xuICAgICAgICAgICAgaW5kZXggK1xuICAgICAgICAgICAgJyBrZXkgJyArXG4gICAgICAgICAgICBoZXhLZXksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpbnB1dEtleUluZGV4W2hleEtleV0gPSAxO1xuICAgICAgaW5wdXQucHVzaChrZXlWYWwpO1xuICAgIH1cbiAgICBpbnB1dEtleVZhbHMucHVzaChpbnB1dCk7XG4gIH1cbiAgZm9yIChjb25zdCBpbmRleCBvZiB0b29sc18xLnJhbmdlKG91dHB1dENvdW50KSkge1xuICAgIGNvbnN0IG91dHB1dEtleUluZGV4ID0ge307XG4gICAgY29uc3Qgb3V0cHV0ID0gW107XG4gICAgd2hpbGUgKCFjaGVja0VuZE9mS2V5VmFsUGFpcnMoKSkge1xuICAgICAgY29uc3Qga2V5VmFsID0gZ2V0S2V5VmFsdWUoKTtcbiAgICAgIGNvbnN0IGhleEtleSA9IGtleVZhbC5rZXkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgaWYgKG91dHB1dEtleUluZGV4W2hleEtleV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdGb3JtYXQgRXJyb3I6IEtleXMgbXVzdCBiZSB1bmlxdWUgZm9yIGVhY2ggb3V0cHV0OiAnICtcbiAgICAgICAgICAgICdvdXRwdXQgaW5kZXggJyArXG4gICAgICAgICAgICBpbmRleCArXG4gICAgICAgICAgICAnIGtleSAnICtcbiAgICAgICAgICAgIGhleEtleSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG91dHB1dEtleUluZGV4W2hleEtleV0gPSAxO1xuICAgICAgb3V0cHV0LnB1c2goa2V5VmFsKTtcbiAgICB9XG4gICAgb3V0cHV0S2V5VmFscy5wdXNoKG91dHB1dCk7XG4gIH1cbiAgcmV0dXJuIHBzYnRGcm9tS2V5VmFscyh1bnNpZ25lZFR4LCB7XG4gICAgZ2xvYmFsTWFwS2V5VmFscyxcbiAgICBpbnB1dEtleVZhbHMsXG4gICAgb3V0cHV0S2V5VmFscyxcbiAgfSk7XG59XG5leHBvcnRzLnBzYnRGcm9tQnVmZmVyID0gcHNidEZyb21CdWZmZXI7XG5mdW5jdGlvbiBjaGVja0tleUJ1ZmZlcih0eXBlLCBrZXlCdWYsIGtleU51bSkge1xuICBpZiAoIWtleUJ1Zi5lcXVhbHMoQnVmZmVyLmZyb20oW2tleU51bV0pKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGb3JtYXQgRXJyb3I6IEludmFsaWQgJHt0eXBlfSBrZXk6ICR7a2V5QnVmLnRvU3RyaW5nKCdoZXgnKX1gLFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydHMuY2hlY2tLZXlCdWZmZXIgPSBjaGVja0tleUJ1ZmZlcjtcbmZ1bmN0aW9uIHBzYnRGcm9tS2V5VmFscyhcbiAgdW5zaWduZWRUeCxcbiAgeyBnbG9iYWxNYXBLZXlWYWxzLCBpbnB1dEtleVZhbHMsIG91dHB1dEtleVZhbHMgfSxcbikge1xuICAvLyBUaGF0IHdhcyBlYXN5IDotKVxuICBjb25zdCBnbG9iYWxNYXAgPSB7XG4gICAgdW5zaWduZWRUeCxcbiAgfTtcbiAgbGV0IHR4Q291bnQgPSAwO1xuICBmb3IgKGNvbnN0IGtleVZhbCBvZiBnbG9iYWxNYXBLZXlWYWxzKSB7XG4gICAgLy8gSWYgYSBnbG9iYWxNYXAgaXRlbSBuZWVkcyBwdWJrZXksIHVuY29tbWVudFxuICAgIC8vIGNvbnN0IHB1YmtleSA9IGNvbnZlcnQuZ2xvYmFscy5jaGVja1B1YmtleShrZXlWYWwpO1xuICAgIHN3aXRjaCAoa2V5VmFsLmtleVswXSkge1xuICAgICAgY2FzZSB0eXBlRmllbGRzXzEuR2xvYmFsVHlwZXMuVU5TSUdORURfVFg6XG4gICAgICAgIGNoZWNrS2V5QnVmZmVyKFxuICAgICAgICAgICdnbG9iYWwnLFxuICAgICAgICAgIGtleVZhbC5rZXksXG4gICAgICAgICAgdHlwZUZpZWxkc18xLkdsb2JhbFR5cGVzLlVOU0lHTkVEX1RYLFxuICAgICAgICApO1xuICAgICAgICBpZiAodHhDb3VudCA+IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Zvcm1hdCBFcnJvcjogR2xvYmFsTWFwIGhhcyBtdWx0aXBsZSBVTlNJR05FRF9UWCcpO1xuICAgICAgICB9XG4gICAgICAgIHR4Q291bnQrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHR5cGVGaWVsZHNfMS5HbG9iYWxUeXBlcy5HTE9CQUxfWFBVQjpcbiAgICAgICAgaWYgKGdsb2JhbE1hcC5nbG9iYWxYcHViID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBnbG9iYWxNYXAuZ2xvYmFsWHB1YiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGdsb2JhbE1hcC5nbG9iYWxYcHViLnB1c2goY29udmVydC5nbG9iYWxzLmdsb2JhbFhwdWIuZGVjb2RlKGtleVZhbCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBpbmNsdXNpb24gZHVyaW5nIHNlcmlhbGl6YXRpb24uXG4gICAgICAgIGlmICghZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzKSBnbG9iYWxNYXAudW5rbm93bktleVZhbHMgPSBbXTtcbiAgICAgICAgZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzLnB1c2goa2V5VmFsKTtcbiAgICB9XG4gIH1cbiAgLy8gR2V0IGlucHV0IGFuZCBvdXRwdXQgY291bnRzIHRvIGxvb3AgdGhlIHJlc3BlY3RpdmUgZmllbGRzXG4gIGNvbnN0IGlucHV0Q291bnQgPSBpbnB1dEtleVZhbHMubGVuZ3RoO1xuICBjb25zdCBvdXRwdXRDb3VudCA9IG91dHB1dEtleVZhbHMubGVuZ3RoO1xuICBjb25zdCBpbnB1dHMgPSBbXTtcbiAgY29uc3Qgb3V0cHV0cyA9IFtdO1xuICAvLyBHZXQgaW5wdXQgZmllbGRzXG4gIGZvciAoY29uc3QgaW5kZXggb2YgdG9vbHNfMS5yYW5nZShpbnB1dENvdW50KSkge1xuICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgZm9yIChjb25zdCBrZXlWYWwgb2YgaW5wdXRLZXlWYWxzW2luZGV4XSkge1xuICAgICAgY29udmVydC5pbnB1dHMuY2hlY2tQdWJrZXkoa2V5VmFsKTtcbiAgICAgIHN3aXRjaCAoa2V5VmFsLmtleVswXSkge1xuICAgICAgICBjYXNlIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLk5PTl9XSVRORVNTX1VUWE86XG4gICAgICAgICAgY2hlY2tLZXlCdWZmZXIoXG4gICAgICAgICAgICAnaW5wdXQnLFxuICAgICAgICAgICAga2V5VmFsLmtleSxcbiAgICAgICAgICAgIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLk5PTl9XSVRORVNTX1VUWE8sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoaW5wdXQubm9uV2l0bmVzc1V0eG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAnRm9ybWF0IEVycm9yOiBJbnB1dCBoYXMgbXVsdGlwbGUgTk9OX1dJVE5FU1NfVVRYTycsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnB1dC5ub25XaXRuZXNzVXR4byA9IGNvbnZlcnQuaW5wdXRzLm5vbldpdG5lc3NVdHhvLmRlY29kZShrZXlWYWwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLldJVE5FU1NfVVRYTzpcbiAgICAgICAgICBjaGVja0tleUJ1ZmZlcihcbiAgICAgICAgICAgICdpbnB1dCcsXG4gICAgICAgICAgICBrZXlWYWwua2V5LFxuICAgICAgICAgICAgdHlwZUZpZWxkc18xLklucHV0VHlwZXMuV0lUTkVTU19VVFhPLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGlucHV0LndpdG5lc3NVdHhvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybWF0IEVycm9yOiBJbnB1dCBoYXMgbXVsdGlwbGUgV0lUTkVTU19VVFhPJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlucHV0LndpdG5lc3NVdHhvID0gY29udmVydC5pbnB1dHMud2l0bmVzc1V0eG8uZGVjb2RlKGtleVZhbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgdHlwZUZpZWxkc18xLklucHV0VHlwZXMuUEFSVElBTF9TSUc6XG4gICAgICAgICAgaWYgKGlucHV0LnBhcnRpYWxTaWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaW5wdXQucGFydGlhbFNpZyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnB1dC5wYXJ0aWFsU2lnLnB1c2goY29udmVydC5pbnB1dHMucGFydGlhbFNpZy5kZWNvZGUoa2V5VmFsKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgdHlwZUZpZWxkc18xLklucHV0VHlwZXMuU0lHSEFTSF9UWVBFOlxuICAgICAgICAgIGNoZWNrS2V5QnVmZmVyKFxuICAgICAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgICAgIGtleVZhbC5rZXksXG4gICAgICAgICAgICB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5TSUdIQVNIX1RZUEUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoaW5wdXQuc2lnaGFzaFR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3JtYXQgRXJyb3I6IElucHV0IGhhcyBtdWx0aXBsZSBTSUdIQVNIX1RZUEUnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5wdXQuc2lnaGFzaFR5cGUgPSBjb252ZXJ0LmlucHV0cy5zaWdoYXNoVHlwZS5kZWNvZGUoa2V5VmFsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5SRURFRU1fU0NSSVBUOlxuICAgICAgICAgIGNoZWNrS2V5QnVmZmVyKFxuICAgICAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgICAgIGtleVZhbC5rZXksXG4gICAgICAgICAgICB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5SRURFRU1fU0NSSVBULFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGlucHV0LnJlZGVlbVNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Zvcm1hdCBFcnJvcjogSW5wdXQgaGFzIG11bHRpcGxlIFJFREVFTV9TQ1JJUFQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5wdXQucmVkZWVtU2NyaXB0ID0gY29udmVydC5pbnB1dHMucmVkZWVtU2NyaXB0LmRlY29kZShrZXlWYWwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLldJVE5FU1NfU0NSSVBUOlxuICAgICAgICAgIGNoZWNrS2V5QnVmZmVyKFxuICAgICAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgICAgIGtleVZhbC5rZXksXG4gICAgICAgICAgICB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5XSVRORVNTX1NDUklQVCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpbnB1dC53aXRuZXNzU2NyaXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybWF0IEVycm9yOiBJbnB1dCBoYXMgbXVsdGlwbGUgV0lUTkVTU19TQ1JJUFQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5wdXQud2l0bmVzc1NjcmlwdCA9IGNvbnZlcnQuaW5wdXRzLndpdG5lc3NTY3JpcHQuZGVjb2RlKGtleVZhbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgdHlwZUZpZWxkc18xLklucHV0VHlwZXMuQklQMzJfREVSSVZBVElPTjpcbiAgICAgICAgICBpZiAoaW5wdXQuYmlwMzJEZXJpdmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlucHV0LmJpcDMyRGVyaXZhdGlvbiA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnB1dC5iaXAzMkRlcml2YXRpb24ucHVzaChcbiAgICAgICAgICAgIGNvbnZlcnQuaW5wdXRzLmJpcDMyRGVyaXZhdGlvbi5kZWNvZGUoa2V5VmFsKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLkZJTkFMX1NDUklQVFNJRzpcbiAgICAgICAgICBjaGVja0tleUJ1ZmZlcihcbiAgICAgICAgICAgICdpbnB1dCcsXG4gICAgICAgICAgICBrZXlWYWwua2V5LFxuICAgICAgICAgICAgdHlwZUZpZWxkc18xLklucHV0VHlwZXMuRklOQUxfU0NSSVBUU0lHLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaW5wdXQuZmluYWxTY3JpcHRTaWcgPSBjb252ZXJ0LmlucHV0cy5maW5hbFNjcmlwdFNpZy5kZWNvZGUoa2V5VmFsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5GSU5BTF9TQ1JJUFRXSVRORVNTOlxuICAgICAgICAgIGNoZWNrS2V5QnVmZmVyKFxuICAgICAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgICAgIGtleVZhbC5rZXksXG4gICAgICAgICAgICB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5GSU5BTF9TQ1JJUFRXSVRORVNTLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaW5wdXQuZmluYWxTY3JpcHRXaXRuZXNzID0gY29udmVydC5pbnB1dHMuZmluYWxTY3JpcHRXaXRuZXNzLmRlY29kZShcbiAgICAgICAgICAgIGtleVZhbCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlBPUl9DT01NSVRNRU5UOlxuICAgICAgICAgIGNoZWNrS2V5QnVmZmVyKFxuICAgICAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgICAgIGtleVZhbC5rZXksXG4gICAgICAgICAgICB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5QT1JfQ09NTUlUTUVOVCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlucHV0LnBvckNvbW1pdG1lbnQgPSBjb252ZXJ0LmlucHV0cy5wb3JDb21taXRtZW50LmRlY29kZShrZXlWYWwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlRBUF9LRVlfU0lHOlxuICAgICAgICAgIGNoZWNrS2V5QnVmZmVyKFxuICAgICAgICAgICAgJ2lucHV0JyxcbiAgICAgICAgICAgIGtleVZhbC5rZXksXG4gICAgICAgICAgICB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5UQVBfS0VZX1NJRyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlucHV0LnRhcEtleVNpZyA9IGNvbnZlcnQuaW5wdXRzLnRhcEtleVNpZy5kZWNvZGUoa2V5VmFsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5UQVBfU0NSSVBUX1NJRzpcbiAgICAgICAgICBpZiAoaW5wdXQudGFwU2NyaXB0U2lnID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlucHV0LnRhcFNjcmlwdFNpZyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnB1dC50YXBTY3JpcHRTaWcucHVzaChjb252ZXJ0LmlucHV0cy50YXBTY3JpcHRTaWcuZGVjb2RlKGtleVZhbCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlRBUF9MRUFGX1NDUklQVDpcbiAgICAgICAgICBpZiAoaW5wdXQudGFwTGVhZlNjcmlwdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpbnB1dC50YXBMZWFmU2NyaXB0ID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIGlucHV0LnRhcExlYWZTY3JpcHQucHVzaChjb252ZXJ0LmlucHV0cy50YXBMZWFmU2NyaXB0LmRlY29kZShrZXlWYWwpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSB0eXBlRmllbGRzXzEuSW5wdXRUeXBlcy5UQVBfQklQMzJfREVSSVZBVElPTjpcbiAgICAgICAgICBpZiAoaW5wdXQudGFwQmlwMzJEZXJpdmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlucHV0LnRhcEJpcDMyRGVyaXZhdGlvbiA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnB1dC50YXBCaXAzMkRlcml2YXRpb24ucHVzaChcbiAgICAgICAgICAgIGNvbnZlcnQuaW5wdXRzLnRhcEJpcDMyRGVyaXZhdGlvbi5kZWNvZGUoa2V5VmFsKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlRBUF9JTlRFUk5BTF9LRVk6XG4gICAgICAgICAgY2hlY2tLZXlCdWZmZXIoXG4gICAgICAgICAgICAnaW5wdXQnLFxuICAgICAgICAgICAga2V5VmFsLmtleSxcbiAgICAgICAgICAgIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlRBUF9JTlRFUk5BTF9LRVksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpbnB1dC50YXBJbnRlcm5hbEtleSA9IGNvbnZlcnQuaW5wdXRzLnRhcEludGVybmFsS2V5LmRlY29kZShrZXlWYWwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzLlRBUF9NRVJLTEVfUk9PVDpcbiAgICAgICAgICBjaGVja0tleUJ1ZmZlcihcbiAgICAgICAgICAgICdpbnB1dCcsXG4gICAgICAgICAgICBrZXlWYWwua2V5LFxuICAgICAgICAgICAgdHlwZUZpZWxkc18xLklucHV0VHlwZXMuVEFQX01FUktMRV9ST09ULFxuICAgICAgICAgICk7XG4gICAgICAgICAgaW5wdXQudGFwTWVya2xlUm9vdCA9IGNvbnZlcnQuaW5wdXRzLnRhcE1lcmtsZVJvb3QuZGVjb2RlKGtleVZhbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gVGhpcyB3aWxsIGFsbG93IGluY2x1c2lvbiBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAgICAgICAgICBpZiAoIWlucHV0LnVua25vd25LZXlWYWxzKSBpbnB1dC51bmtub3duS2V5VmFscyA9IFtdO1xuICAgICAgICAgIGlucHV0LnVua25vd25LZXlWYWxzLnB1c2goa2V5VmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaW5wdXRzLnB1c2goaW5wdXQpO1xuICB9XG4gIGZvciAoY29uc3QgaW5kZXggb2YgdG9vbHNfMS5yYW5nZShvdXRwdXRDb3VudCkpIHtcbiAgICBjb25zdCBvdXRwdXQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleVZhbCBvZiBvdXRwdXRLZXlWYWxzW2luZGV4XSkge1xuICAgICAgY29udmVydC5vdXRwdXRzLmNoZWNrUHVia2V5KGtleVZhbCk7XG4gICAgICBzd2l0Y2ggKGtleVZhbC5rZXlbMF0pIHtcbiAgICAgICAgY2FzZSB0eXBlRmllbGRzXzEuT3V0cHV0VHlwZXMuUkVERUVNX1NDUklQVDpcbiAgICAgICAgICBjaGVja0tleUJ1ZmZlcihcbiAgICAgICAgICAgICdvdXRwdXQnLFxuICAgICAgICAgICAga2V5VmFsLmtleSxcbiAgICAgICAgICAgIHR5cGVGaWVsZHNfMS5PdXRwdXRUeXBlcy5SRURFRU1fU0NSSVBULFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG91dHB1dC5yZWRlZW1TY3JpcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3JtYXQgRXJyb3I6IE91dHB1dCBoYXMgbXVsdGlwbGUgUkVERUVNX1NDUklQVCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXRwdXQucmVkZWVtU2NyaXB0ID0gY29udmVydC5vdXRwdXRzLnJlZGVlbVNjcmlwdC5kZWNvZGUoa2V5VmFsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSB0eXBlRmllbGRzXzEuT3V0cHV0VHlwZXMuV0lUTkVTU19TQ1JJUFQ6XG4gICAgICAgICAgY2hlY2tLZXlCdWZmZXIoXG4gICAgICAgICAgICAnb3V0cHV0JyxcbiAgICAgICAgICAgIGtleVZhbC5rZXksXG4gICAgICAgICAgICB0eXBlRmllbGRzXzEuT3V0cHV0VHlwZXMuV0lUTkVTU19TQ1JJUFQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob3V0cHV0LndpdG5lc3NTY3JpcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3JtYXQgRXJyb3I6IE91dHB1dCBoYXMgbXVsdGlwbGUgV0lUTkVTU19TQ1JJUFQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0cHV0LndpdG5lc3NTY3JpcHQgPSBjb252ZXJ0Lm91dHB1dHMud2l0bmVzc1NjcmlwdC5kZWNvZGUoa2V5VmFsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSB0eXBlRmllbGRzXzEuT3V0cHV0VHlwZXMuQklQMzJfREVSSVZBVElPTjpcbiAgICAgICAgICBpZiAob3V0cHV0LmJpcDMyRGVyaXZhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBvdXRwdXQuYmlwMzJEZXJpdmF0aW9uID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dHB1dC5iaXAzMkRlcml2YXRpb24ucHVzaChcbiAgICAgICAgICAgIGNvbnZlcnQub3V0cHV0cy5iaXAzMkRlcml2YXRpb24uZGVjb2RlKGtleVZhbCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSB0eXBlRmllbGRzXzEuT3V0cHV0VHlwZXMuVEFQX0lOVEVSTkFMX0tFWTpcbiAgICAgICAgICBjaGVja0tleUJ1ZmZlcihcbiAgICAgICAgICAgICdvdXRwdXQnLFxuICAgICAgICAgICAga2V5VmFsLmtleSxcbiAgICAgICAgICAgIHR5cGVGaWVsZHNfMS5PdXRwdXRUeXBlcy5UQVBfSU5URVJOQUxfS0VZLFxuICAgICAgICAgICk7XG4gICAgICAgICAgb3V0cHV0LnRhcEludGVybmFsS2V5ID0gY29udmVydC5vdXRwdXRzLnRhcEludGVybmFsS2V5LmRlY29kZShrZXlWYWwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHR5cGVGaWVsZHNfMS5PdXRwdXRUeXBlcy5UQVBfVFJFRTpcbiAgICAgICAgICBjaGVja0tleUJ1ZmZlcihcbiAgICAgICAgICAgICdvdXRwdXQnLFxuICAgICAgICAgICAga2V5VmFsLmtleSxcbiAgICAgICAgICAgIHR5cGVGaWVsZHNfMS5PdXRwdXRUeXBlcy5UQVBfVFJFRSxcbiAgICAgICAgICApO1xuICAgICAgICAgIG91dHB1dC50YXBUcmVlID0gY29udmVydC5vdXRwdXRzLnRhcFRyZWUuZGVjb2RlKGtleVZhbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgdHlwZUZpZWxkc18xLk91dHB1dFR5cGVzLlRBUF9CSVAzMl9ERVJJVkFUSU9OOlxuICAgICAgICAgIGlmIChvdXRwdXQudGFwQmlwMzJEZXJpdmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG91dHB1dC50YXBCaXAzMkRlcml2YXRpb24gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0cHV0LnRhcEJpcDMyRGVyaXZhdGlvbi5wdXNoKFxuICAgICAgICAgICAgY29udmVydC5vdXRwdXRzLnRhcEJpcDMyRGVyaXZhdGlvbi5kZWNvZGUoa2V5VmFsKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghb3V0cHV0LnVua25vd25LZXlWYWxzKSBvdXRwdXQudW5rbm93bktleVZhbHMgPSBbXTtcbiAgICAgICAgICBvdXRwdXQudW5rbm93bktleVZhbHMucHVzaChrZXlWYWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBvdXRwdXRzLnB1c2gob3V0cHV0KTtcbiAgfVxuICByZXR1cm4geyBnbG9iYWxNYXAsIGlucHV0cywgb3V0cHV0cyB9O1xufVxuZXhwb3J0cy5wc2J0RnJvbUtleVZhbHMgPSBwc2J0RnJvbUtleVZhbHM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/parser/fromBuffer.js\n\n}")},"./node_modules/bip174/src/lib/parser/index.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, "__esModule", ({ value: true }));\n__export(__webpack_require__(/*! ./fromBuffer */ "./node_modules/bip174/src/lib/parser/fromBuffer.js"));\n__export(__webpack_require__(/*! ./toBuffer */ "./node_modules/bip174/src/lib/parser/toBuffer.js"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvcGFyc2VyL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELFNBQVMsbUJBQU8sQ0FBQyx3RUFBYztBQUMvQixTQUFTLG1CQUFPLENBQUMsb0VBQVkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAxNzQvc3JjL2xpYi9wYXJzZXIvaW5kZXguanM/ZDMzMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5mdW5jdGlvbiBfX2V4cG9ydChtKSB7XG4gIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcbn1cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5fX2V4cG9ydChyZXF1aXJlKCcuL2Zyb21CdWZmZXInKSk7XG5fX2V4cG9ydChyZXF1aXJlKCcuL3RvQnVmZmVyJykpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/parser/index.js\n\n}')},"./node_modules/bip174/src/lib/parser/toBuffer.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst convert = __webpack_require__(/*! ../converter */ \"./node_modules/bip174/src/lib/converter/index.js\");\nconst tools_1 = __webpack_require__(/*! ../converter/tools */ \"./node_modules/bip174/src/lib/converter/tools.js\");\nfunction psbtToBuffer({ globalMap, inputs, outputs }) {\n const { globalKeyVals, inputKeyVals, outputKeyVals } = psbtToKeyVals({\n globalMap,\n inputs,\n outputs,\n });\n const globalBuffer = tools_1.keyValsToBuffer(globalKeyVals);\n const keyValsOrEmptyToBuffer = keyVals =>\n keyVals.length === 0\n ? [Buffer.from([0])]\n : keyVals.map(tools_1.keyValsToBuffer);\n const inputBuffers = keyValsOrEmptyToBuffer(inputKeyVals);\n const outputBuffers = keyValsOrEmptyToBuffer(outputKeyVals);\n const header = Buffer.allocUnsafe(5);\n header.writeUIntBE(0x70736274ff, 0, 5);\n return Buffer.concat(\n [header, globalBuffer].concat(inputBuffers, outputBuffers),\n );\n}\nexports.psbtToBuffer = psbtToBuffer;\nconst sortKeyVals = (a, b) => {\n return a.key.compare(b.key);\n};\nfunction keyValsFromMap(keyValMap, converterFactory) {\n const keyHexSet = new Set();\n const keyVals = Object.entries(keyValMap).reduce((result, [key, value]) => {\n if (key === 'unknownKeyVals') return result;\n // We are checking for undefined anyways. So ignore TS error\n // @ts-ignore\n const converter = converterFactory[key];\n if (converter === undefined) return result;\n const encodedKeyVals = (Array.isArray(value) ? value : [value]).map(\n converter.encode,\n );\n const keyHexes = encodedKeyVals.map(kv => kv.key.toString('hex'));\n keyHexes.forEach(hex => {\n if (keyHexSet.has(hex))\n throw new Error('Serialize Error: Duplicate key: ' + hex);\n keyHexSet.add(hex);\n });\n return result.concat(encodedKeyVals);\n }, []);\n // Get other keyVals that have not yet been gotten\n const otherKeyVals = keyValMap.unknownKeyVals\n ? keyValMap.unknownKeyVals.filter(keyVal => {\n return !keyHexSet.has(keyVal.key.toString('hex'));\n })\n : [];\n return keyVals.concat(otherKeyVals).sort(sortKeyVals);\n}\nfunction psbtToKeyVals({ globalMap, inputs, outputs }) {\n // First parse the global keyVals\n // Get any extra keyvals to pass along\n return {\n globalKeyVals: keyValsFromMap(globalMap, convert.globals),\n inputKeyVals: inputs.map(i => keyValsFromMap(i, convert.inputs)),\n outputKeyVals: outputs.map(o => keyValsFromMap(o, convert.outputs)),\n };\n}\nexports.psbtToKeyVals = psbtToKeyVals;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvcGFyc2VyL3RvQnVmZmVyLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxnQkFBZ0IsbUJBQU8sQ0FBQyxzRUFBYztBQUN0QyxnQkFBZ0IsbUJBQU8sQ0FBQyw0RUFBb0I7QUFDNUMsd0JBQXdCLDRCQUE0QjtBQUNwRCxVQUFVLDZDQUE2QztBQUN2RDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsU0FBUyxNQUFNO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE1BQU07QUFDdkI7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDRCQUE0QjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvcGFyc2VyL3RvQnVmZmVyLmpzP2JmMjkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvbnZlcnQgPSByZXF1aXJlKCcuLi9jb252ZXJ0ZXInKTtcbmNvbnN0IHRvb2xzXzEgPSByZXF1aXJlKCcuLi9jb252ZXJ0ZXIvdG9vbHMnKTtcbmZ1bmN0aW9uIHBzYnRUb0J1ZmZlcih7IGdsb2JhbE1hcCwgaW5wdXRzLCBvdXRwdXRzIH0pIHtcbiAgY29uc3QgeyBnbG9iYWxLZXlWYWxzLCBpbnB1dEtleVZhbHMsIG91dHB1dEtleVZhbHMgfSA9IHBzYnRUb0tleVZhbHMoe1xuICAgIGdsb2JhbE1hcCxcbiAgICBpbnB1dHMsXG4gICAgb3V0cHV0cyxcbiAgfSk7XG4gIGNvbnN0IGdsb2JhbEJ1ZmZlciA9IHRvb2xzXzEua2V5VmFsc1RvQnVmZmVyKGdsb2JhbEtleVZhbHMpO1xuICBjb25zdCBrZXlWYWxzT3JFbXB0eVRvQnVmZmVyID0ga2V5VmFscyA9PlxuICAgIGtleVZhbHMubGVuZ3RoID09PSAwXG4gICAgICA/IFtCdWZmZXIuZnJvbShbMF0pXVxuICAgICAgOiBrZXlWYWxzLm1hcCh0b29sc18xLmtleVZhbHNUb0J1ZmZlcik7XG4gIGNvbnN0IGlucHV0QnVmZmVycyA9IGtleVZhbHNPckVtcHR5VG9CdWZmZXIoaW5wdXRLZXlWYWxzKTtcbiAgY29uc3Qgb3V0cHV0QnVmZmVycyA9IGtleVZhbHNPckVtcHR5VG9CdWZmZXIob3V0cHV0S2V5VmFscyk7XG4gIGNvbnN0IGhlYWRlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg1KTtcbiAgaGVhZGVyLndyaXRlVUludEJFKDB4NzA3MzYyNzRmZiwgMCwgNSk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFxuICAgIFtoZWFkZXIsIGdsb2JhbEJ1ZmZlcl0uY29uY2F0KGlucHV0QnVmZmVycywgb3V0cHV0QnVmZmVycyksXG4gICk7XG59XG5leHBvcnRzLnBzYnRUb0J1ZmZlciA9IHBzYnRUb0J1ZmZlcjtcbmNvbnN0IHNvcnRLZXlWYWxzID0gKGEsIGIpID0+IHtcbiAgcmV0dXJuIGEua2V5LmNvbXBhcmUoYi5rZXkpO1xufTtcbmZ1bmN0aW9uIGtleVZhbHNGcm9tTWFwKGtleVZhbE1hcCwgY29udmVydGVyRmFjdG9yeSkge1xuICBjb25zdCBrZXlIZXhTZXQgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IGtleVZhbHMgPSBPYmplY3QuZW50cmllcyhrZXlWYWxNYXApLnJlZHVjZSgocmVzdWx0LCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBpZiAoa2V5ID09PSAndW5rbm93bktleVZhbHMnKSByZXR1cm4gcmVzdWx0O1xuICAgIC8vIFdlIGFyZSBjaGVja2luZyBmb3IgdW5kZWZpbmVkIGFueXdheXMuIFNvIGlnbm9yZSBUUyBlcnJvclxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBjb252ZXJ0ZXIgPSBjb252ZXJ0ZXJGYWN0b3J5W2tleV07XG4gICAgaWYgKGNvbnZlcnRlciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gcmVzdWx0O1xuICAgIGNvbnN0IGVuY29kZWRLZXlWYWxzID0gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKS5tYXAoXG4gICAgICBjb252ZXJ0ZXIuZW5jb2RlLFxuICAgICk7XG4gICAgY29uc3Qga2V5SGV4ZXMgPSBlbmNvZGVkS2V5VmFscy5tYXAoa3YgPT4ga3Yua2V5LnRvU3RyaW5nKCdoZXgnKSk7XG4gICAga2V5SGV4ZXMuZm9yRWFjaChoZXggPT4ge1xuICAgICAgaWYgKGtleUhleFNldC5oYXMoaGV4KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJpYWxpemUgRXJyb3I6IER1cGxpY2F0ZSBrZXk6ICcgKyBoZXgpO1xuICAgICAga2V5SGV4U2V0LmFkZChoZXgpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQuY29uY2F0KGVuY29kZWRLZXlWYWxzKTtcbiAgfSwgW10pO1xuICAvLyBHZXQgb3RoZXIga2V5VmFscyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIGdvdHRlblxuICBjb25zdCBvdGhlcktleVZhbHMgPSBrZXlWYWxNYXAudW5rbm93bktleVZhbHNcbiAgICA/IGtleVZhbE1hcC51bmtub3duS2V5VmFscy5maWx0ZXIoa2V5VmFsID0+IHtcbiAgICAgICAgcmV0dXJuICFrZXlIZXhTZXQuaGFzKGtleVZhbC5rZXkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICAgIH0pXG4gICAgOiBbXTtcbiAgcmV0dXJuIGtleVZhbHMuY29uY2F0KG90aGVyS2V5VmFscykuc29ydChzb3J0S2V5VmFscyk7XG59XG5mdW5jdGlvbiBwc2J0VG9LZXlWYWxzKHsgZ2xvYmFsTWFwLCBpbnB1dHMsIG91dHB1dHMgfSkge1xuICAvLyBGaXJzdCBwYXJzZSB0aGUgZ2xvYmFsIGtleVZhbHNcbiAgLy8gR2V0IGFueSBleHRyYSBrZXl2YWxzIHRvIHBhc3MgYWxvbmdcbiAgcmV0dXJuIHtcbiAgICBnbG9iYWxLZXlWYWxzOiBrZXlWYWxzRnJvbU1hcChnbG9iYWxNYXAsIGNvbnZlcnQuZ2xvYmFscyksXG4gICAgaW5wdXRLZXlWYWxzOiBpbnB1dHMubWFwKGkgPT4ga2V5VmFsc0Zyb21NYXAoaSwgY29udmVydC5pbnB1dHMpKSxcbiAgICBvdXRwdXRLZXlWYWxzOiBvdXRwdXRzLm1hcChvID0+IGtleVZhbHNGcm9tTWFwKG8sIGNvbnZlcnQub3V0cHV0cykpLFxuICB9O1xufVxuZXhwb3J0cy5wc2J0VG9LZXlWYWxzID0gcHNidFRvS2V5VmFscztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/parser/toBuffer.js\n\n}")},"./node_modules/bip174/src/lib/psbt.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst combiner_1 = __webpack_require__(/*! ./combiner */ \"./node_modules/bip174/src/lib/combiner/index.js\");\nconst parser_1 = __webpack_require__(/*! ./parser */ \"./node_modules/bip174/src/lib/parser/index.js\");\nconst typeFields_1 = __webpack_require__(/*! ./typeFields */ \"./node_modules/bip174/src/lib/typeFields.js\");\nconst utils_1 = __webpack_require__(/*! ./utils */ \"./node_modules/bip174/src/lib/utils.js\");\nclass Psbt {\n constructor(tx) {\n this.inputs = [];\n this.outputs = [];\n this.globalMap = {\n unsignedTx: tx,\n };\n }\n static fromBase64(data, txFromBuffer) {\n const buffer = Buffer.from(data, 'base64');\n return this.fromBuffer(buffer, txFromBuffer);\n }\n static fromHex(data, txFromBuffer) {\n const buffer = Buffer.from(data, 'hex');\n return this.fromBuffer(buffer, txFromBuffer);\n }\n static fromBuffer(buffer, txFromBuffer) {\n const results = parser_1.psbtFromBuffer(buffer, txFromBuffer);\n const psbt = new this(results.globalMap.unsignedTx);\n Object.assign(psbt, results);\n return psbt;\n }\n toBase64() {\n const buffer = this.toBuffer();\n return buffer.toString('base64');\n }\n toHex() {\n const buffer = this.toBuffer();\n return buffer.toString('hex');\n }\n toBuffer() {\n return parser_1.psbtToBuffer(this);\n }\n updateGlobal(updateData) {\n utils_1.updateGlobal(updateData, this.globalMap);\n return this;\n }\n updateInput(inputIndex, updateData) {\n const input = utils_1.checkForInput(this.inputs, inputIndex);\n utils_1.updateInput(updateData, input);\n return this;\n }\n updateOutput(outputIndex, updateData) {\n const output = utils_1.checkForOutput(this.outputs, outputIndex);\n utils_1.updateOutput(updateData, output);\n return this;\n }\n addUnknownKeyValToGlobal(keyVal) {\n utils_1.checkHasKey(\n keyVal,\n this.globalMap.unknownKeyVals,\n utils_1.getEnumLength(typeFields_1.GlobalTypes),\n );\n if (!this.globalMap.unknownKeyVals) this.globalMap.unknownKeyVals = [];\n this.globalMap.unknownKeyVals.push(keyVal);\n return this;\n }\n addUnknownKeyValToInput(inputIndex, keyVal) {\n const input = utils_1.checkForInput(this.inputs, inputIndex);\n utils_1.checkHasKey(\n keyVal,\n input.unknownKeyVals,\n utils_1.getEnumLength(typeFields_1.InputTypes),\n );\n if (!input.unknownKeyVals) input.unknownKeyVals = [];\n input.unknownKeyVals.push(keyVal);\n return this;\n }\n addUnknownKeyValToOutput(outputIndex, keyVal) {\n const output = utils_1.checkForOutput(this.outputs, outputIndex);\n utils_1.checkHasKey(\n keyVal,\n output.unknownKeyVals,\n utils_1.getEnumLength(typeFields_1.OutputTypes),\n );\n if (!output.unknownKeyVals) output.unknownKeyVals = [];\n output.unknownKeyVals.push(keyVal);\n return this;\n }\n addInput(inputData) {\n this.globalMap.unsignedTx.addInput(inputData);\n this.inputs.push({\n unknownKeyVals: [],\n });\n const addKeyVals = inputData.unknownKeyVals || [];\n const inputIndex = this.inputs.length - 1;\n if (!Array.isArray(addKeyVals)) {\n throw new Error('unknownKeyVals must be an Array');\n }\n addKeyVals.forEach(keyVal =>\n this.addUnknownKeyValToInput(inputIndex, keyVal),\n );\n utils_1.addInputAttributes(this.inputs, inputData);\n return this;\n }\n addOutput(outputData) {\n this.globalMap.unsignedTx.addOutput(outputData);\n this.outputs.push({\n unknownKeyVals: [],\n });\n const addKeyVals = outputData.unknownKeyVals || [];\n const outputIndex = this.outputs.length - 1;\n if (!Array.isArray(addKeyVals)) {\n throw new Error('unknownKeyVals must be an Array');\n }\n addKeyVals.forEach(keyVal =>\n this.addUnknownKeyValToOutput(outputIndex, keyVal),\n );\n utils_1.addOutputAttributes(this.outputs, outputData);\n return this;\n }\n clearFinalizedInput(inputIndex) {\n const input = utils_1.checkForInput(this.inputs, inputIndex);\n utils_1.inputCheckUncleanFinalized(inputIndex, input);\n for (const key of Object.keys(input)) {\n if (\n ![\n 'witnessUtxo',\n 'nonWitnessUtxo',\n 'finalScriptSig',\n 'finalScriptWitness',\n 'unknownKeyVals',\n ].includes(key)\n ) {\n // @ts-ignore\n delete input[key];\n }\n }\n return this;\n }\n combine(...those) {\n // Combine this with those.\n // Return self for chaining.\n const result = combiner_1.combine([this].concat(those));\n Object.assign(this, result);\n return this;\n }\n getTransaction() {\n return this.globalMap.unsignedTx.toBuffer();\n }\n}\nexports.Psbt = Psbt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvcHNidC5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsbUJBQW1CLG1CQUFPLENBQUMsbUVBQVk7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsK0RBQVU7QUFDbkMscUJBQXFCLG1CQUFPLENBQUMsaUVBQWM7QUFDM0MsZ0JBQWdCLG1CQUFPLENBQUMsdURBQVM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE1BQU07QUFDekI7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE1BQU07QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpcDE3NC9zcmMvbGliL3BzYnQuanM/MGM4YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY29tYmluZXJfMSA9IHJlcXVpcmUoJy4vY29tYmluZXInKTtcbmNvbnN0IHBhcnNlcl8xID0gcmVxdWlyZSgnLi9wYXJzZXInKTtcbmNvbnN0IHR5cGVGaWVsZHNfMSA9IHJlcXVpcmUoJy4vdHlwZUZpZWxkcycpO1xuY29uc3QgdXRpbHNfMSA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbmNsYXNzIFBzYnQge1xuICBjb25zdHJ1Y3Rvcih0eCkge1xuICAgIHRoaXMuaW5wdXRzID0gW107XG4gICAgdGhpcy5vdXRwdXRzID0gW107XG4gICAgdGhpcy5nbG9iYWxNYXAgPSB7XG4gICAgICB1bnNpZ25lZFR4OiB0eCxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBmcm9tQmFzZTY0KGRhdGEsIHR4RnJvbUJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGRhdGEsICdiYXNlNjQnKTtcbiAgICByZXR1cm4gdGhpcy5mcm9tQnVmZmVyKGJ1ZmZlciwgdHhGcm9tQnVmZmVyKTtcbiAgfVxuICBzdGF0aWMgZnJvbUhleChkYXRhLCB0eEZyb21CdWZmZXIpIHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShkYXRhLCAnaGV4Jyk7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUJ1ZmZlcihidWZmZXIsIHR4RnJvbUJ1ZmZlcik7XG4gIH1cbiAgc3RhdGljIGZyb21CdWZmZXIoYnVmZmVyLCB0eEZyb21CdWZmZXIpIHtcbiAgICBjb25zdCByZXN1bHRzID0gcGFyc2VyXzEucHNidEZyb21CdWZmZXIoYnVmZmVyLCB0eEZyb21CdWZmZXIpO1xuICAgIGNvbnN0IHBzYnQgPSBuZXcgdGhpcyhyZXN1bHRzLmdsb2JhbE1hcC51bnNpZ25lZFR4KTtcbiAgICBPYmplY3QuYXNzaWduKHBzYnQsIHJlc3VsdHMpO1xuICAgIHJldHVybiBwc2J0O1xuICB9XG4gIHRvQmFzZTY0KCkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMudG9CdWZmZXIoKTtcbiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuICB0b0hleCgpIHtcbiAgICBjb25zdCBidWZmZXIgPSB0aGlzLnRvQnVmZmVyKCk7XG4gICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygnaGV4Jyk7XG4gIH1cbiAgdG9CdWZmZXIoKSB7XG4gICAgcmV0dXJuIHBhcnNlcl8xLnBzYnRUb0J1ZmZlcih0aGlzKTtcbiAgfVxuICB1cGRhdGVHbG9iYWwodXBkYXRlRGF0YSkge1xuICAgIHV0aWxzXzEudXBkYXRlR2xvYmFsKHVwZGF0ZURhdGEsIHRoaXMuZ2xvYmFsTWFwKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB1cGRhdGVJbnB1dChpbnB1dEluZGV4LCB1cGRhdGVEYXRhKSB7XG4gICAgY29uc3QgaW5wdXQgPSB1dGlsc18xLmNoZWNrRm9ySW5wdXQodGhpcy5pbnB1dHMsIGlucHV0SW5kZXgpO1xuICAgIHV0aWxzXzEudXBkYXRlSW5wdXQodXBkYXRlRGF0YSwgaW5wdXQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHVwZGF0ZU91dHB1dChvdXRwdXRJbmRleCwgdXBkYXRlRGF0YSkge1xuICAgIGNvbnN0IG91dHB1dCA9IHV0aWxzXzEuY2hlY2tGb3JPdXRwdXQodGhpcy5vdXRwdXRzLCBvdXRwdXRJbmRleCk7XG4gICAgdXRpbHNfMS51cGRhdGVPdXRwdXQodXBkYXRlRGF0YSwgb3V0cHV0KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhZGRVbmtub3duS2V5VmFsVG9HbG9iYWwoa2V5VmFsKSB7XG4gICAgdXRpbHNfMS5jaGVja0hhc0tleShcbiAgICAgIGtleVZhbCxcbiAgICAgIHRoaXMuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzLFxuICAgICAgdXRpbHNfMS5nZXRFbnVtTGVuZ3RoKHR5cGVGaWVsZHNfMS5HbG9iYWxUeXBlcyksXG4gICAgKTtcbiAgICBpZiAoIXRoaXMuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzKSB0aGlzLmdsb2JhbE1hcC51bmtub3duS2V5VmFscyA9IFtdO1xuICAgIHRoaXMuZ2xvYmFsTWFwLnVua25vd25LZXlWYWxzLnB1c2goa2V5VmFsKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhZGRVbmtub3duS2V5VmFsVG9JbnB1dChpbnB1dEluZGV4LCBrZXlWYWwpIHtcbiAgICBjb25zdCBpbnB1dCA9IHV0aWxzXzEuY2hlY2tGb3JJbnB1dCh0aGlzLmlucHV0cywgaW5wdXRJbmRleCk7XG4gICAgdXRpbHNfMS5jaGVja0hhc0tleShcbiAgICAgIGtleVZhbCxcbiAgICAgIGlucHV0LnVua25vd25LZXlWYWxzLFxuICAgICAgdXRpbHNfMS5nZXRFbnVtTGVuZ3RoKHR5cGVGaWVsZHNfMS5JbnB1dFR5cGVzKSxcbiAgICApO1xuICAgIGlmICghaW5wdXQudW5rbm93bktleVZhbHMpIGlucHV0LnVua25vd25LZXlWYWxzID0gW107XG4gICAgaW5wdXQudW5rbm93bktleVZhbHMucHVzaChrZXlWYWwpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGFkZFVua25vd25LZXlWYWxUb091dHB1dChvdXRwdXRJbmRleCwga2V5VmFsKSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gdXRpbHNfMS5jaGVja0Zvck91dHB1dCh0aGlzLm91dHB1dHMsIG91dHB1dEluZGV4KTtcbiAgICB1dGlsc18xLmNoZWNrSGFzS2V5KFxuICAgICAga2V5VmFsLFxuICAgICAgb3V0cHV0LnVua25vd25LZXlWYWxzLFxuICAgICAgdXRpbHNfMS5nZXRFbnVtTGVuZ3RoKHR5cGVGaWVsZHNfMS5PdXRwdXRUeXBlcyksXG4gICAgKTtcbiAgICBpZiAoIW91dHB1dC51bmtub3duS2V5VmFscykgb3V0cHV0LnVua25vd25LZXlWYWxzID0gW107XG4gICAgb3V0cHV0LnVua25vd25LZXlWYWxzLnB1c2goa2V5VmFsKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhZGRJbnB1dChpbnB1dERhdGEpIHtcbiAgICB0aGlzLmdsb2JhbE1hcC51bnNpZ25lZFR4LmFkZElucHV0KGlucHV0RGF0YSk7XG4gICAgdGhpcy5pbnB1dHMucHVzaCh7XG4gICAgICB1bmtub3duS2V5VmFsczogW10sXG4gICAgfSk7XG4gICAgY29uc3QgYWRkS2V5VmFscyA9IGlucHV0RGF0YS51bmtub3duS2V5VmFscyB8fCBbXTtcbiAgICBjb25zdCBpbnB1dEluZGV4ID0gdGhpcy5pbnB1dHMubGVuZ3RoIC0gMTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWRkS2V5VmFscykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93bktleVZhbHMgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgIH1cbiAgICBhZGRLZXlWYWxzLmZvckVhY2goa2V5VmFsID0+XG4gICAgICB0aGlzLmFkZFVua25vd25LZXlWYWxUb0lucHV0KGlucHV0SW5kZXgsIGtleVZhbCksXG4gICAgKTtcbiAgICB1dGlsc18xLmFkZElucHV0QXR0cmlidXRlcyh0aGlzLmlucHV0cywgaW5wdXREYXRhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhZGRPdXRwdXQob3V0cHV0RGF0YSkge1xuICAgIHRoaXMuZ2xvYmFsTWFwLnVuc2lnbmVkVHguYWRkT3V0cHV0KG91dHB1dERhdGEpO1xuICAgIHRoaXMub3V0cHV0cy5wdXNoKHtcbiAgICAgIHVua25vd25LZXlWYWxzOiBbXSxcbiAgICB9KTtcbiAgICBjb25zdCBhZGRLZXlWYWxzID0gb3V0cHV0RGF0YS51bmtub3duS2V5VmFscyB8fCBbXTtcbiAgICBjb25zdCBvdXRwdXRJbmRleCA9IHRoaXMub3V0cHV0cy5sZW5ndGggLSAxO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhZGRLZXlWYWxzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duS2V5VmFscyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgfVxuICAgIGFkZEtleVZhbHMuZm9yRWFjaChrZXlWYWwgPT5cbiAgICAgIHRoaXMuYWRkVW5rbm93bktleVZhbFRvT3V0cHV0KG91dHB1dEluZGV4LCBrZXlWYWwpLFxuICAgICk7XG4gICAgdXRpbHNfMS5hZGRPdXRwdXRBdHRyaWJ1dGVzKHRoaXMub3V0cHV0cywgb3V0cHV0RGF0YSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgY2xlYXJGaW5hbGl6ZWRJbnB1dChpbnB1dEluZGV4KSB7XG4gICAgY29uc3QgaW5wdXQgPSB1dGlsc18xLmNoZWNrRm9ySW5wdXQodGhpcy5pbnB1dHMsIGlucHV0SW5kZXgpO1xuICAgIHV0aWxzXzEuaW5wdXRDaGVja1VuY2xlYW5GaW5hbGl6ZWQoaW5wdXRJbmRleCwgaW5wdXQpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGlucHV0KSkge1xuICAgICAgaWYgKFxuICAgICAgICAhW1xuICAgICAgICAgICd3aXRuZXNzVXR4bycsXG4gICAgICAgICAgJ25vbldpdG5lc3NVdHhvJyxcbiAgICAgICAgICAnZmluYWxTY3JpcHRTaWcnLFxuICAgICAgICAgICdmaW5hbFNjcmlwdFdpdG5lc3MnLFxuICAgICAgICAgICd1bmtub3duS2V5VmFscycsXG4gICAgICAgIF0uaW5jbHVkZXMoa2V5KVxuICAgICAgKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZGVsZXRlIGlucHV0W2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGNvbWJpbmUoLi4udGhvc2UpIHtcbiAgICAvLyBDb21iaW5lIHRoaXMgd2l0aCB0aG9zZS5cbiAgICAvLyBSZXR1cm4gc2VsZiBmb3IgY2hhaW5pbmcuXG4gICAgY29uc3QgcmVzdWx0ID0gY29tYmluZXJfMS5jb21iaW5lKFt0aGlzXS5jb25jYXQodGhvc2UpKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0VHJhbnNhY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2xvYmFsTWFwLnVuc2lnbmVkVHgudG9CdWZmZXIoKTtcbiAgfVxufVxuZXhwb3J0cy5Qc2J0ID0gUHNidDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/psbt.js\n\n}")},"./node_modules/bip174/src/lib/typeFields.js"(__unused_webpack_module,exports){"use strict";eval("{\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nvar GlobalTypes;\n(function(GlobalTypes) {\n GlobalTypes[(GlobalTypes['UNSIGNED_TX'] = 0)] = 'UNSIGNED_TX';\n GlobalTypes[(GlobalTypes['GLOBAL_XPUB'] = 1)] = 'GLOBAL_XPUB';\n})((GlobalTypes = exports.GlobalTypes || (exports.GlobalTypes = {})));\nexports.GLOBAL_TYPE_NAMES = ['unsignedTx', 'globalXpub'];\nvar InputTypes;\n(function(InputTypes) {\n InputTypes[(InputTypes['NON_WITNESS_UTXO'] = 0)] = 'NON_WITNESS_UTXO';\n InputTypes[(InputTypes['WITNESS_UTXO'] = 1)] = 'WITNESS_UTXO';\n InputTypes[(InputTypes['PARTIAL_SIG'] = 2)] = 'PARTIAL_SIG';\n InputTypes[(InputTypes['SIGHASH_TYPE'] = 3)] = 'SIGHASH_TYPE';\n InputTypes[(InputTypes['REDEEM_SCRIPT'] = 4)] = 'REDEEM_SCRIPT';\n InputTypes[(InputTypes['WITNESS_SCRIPT'] = 5)] = 'WITNESS_SCRIPT';\n InputTypes[(InputTypes['BIP32_DERIVATION'] = 6)] = 'BIP32_DERIVATION';\n InputTypes[(InputTypes['FINAL_SCRIPTSIG'] = 7)] = 'FINAL_SCRIPTSIG';\n InputTypes[(InputTypes['FINAL_SCRIPTWITNESS'] = 8)] = 'FINAL_SCRIPTWITNESS';\n InputTypes[(InputTypes['POR_COMMITMENT'] = 9)] = 'POR_COMMITMENT';\n InputTypes[(InputTypes['TAP_KEY_SIG'] = 19)] = 'TAP_KEY_SIG';\n InputTypes[(InputTypes['TAP_SCRIPT_SIG'] = 20)] = 'TAP_SCRIPT_SIG';\n InputTypes[(InputTypes['TAP_LEAF_SCRIPT'] = 21)] = 'TAP_LEAF_SCRIPT';\n InputTypes[(InputTypes['TAP_BIP32_DERIVATION'] = 22)] =\n 'TAP_BIP32_DERIVATION';\n InputTypes[(InputTypes['TAP_INTERNAL_KEY'] = 23)] = 'TAP_INTERNAL_KEY';\n InputTypes[(InputTypes['TAP_MERKLE_ROOT'] = 24)] = 'TAP_MERKLE_ROOT';\n})((InputTypes = exports.InputTypes || (exports.InputTypes = {})));\nexports.INPUT_TYPE_NAMES = [\n 'nonWitnessUtxo',\n 'witnessUtxo',\n 'partialSig',\n 'sighashType',\n 'redeemScript',\n 'witnessScript',\n 'bip32Derivation',\n 'finalScriptSig',\n 'finalScriptWitness',\n 'porCommitment',\n 'tapKeySig',\n 'tapScriptSig',\n 'tapLeafScript',\n 'tapBip32Derivation',\n 'tapInternalKey',\n 'tapMerkleRoot',\n];\nvar OutputTypes;\n(function(OutputTypes) {\n OutputTypes[(OutputTypes['REDEEM_SCRIPT'] = 0)] = 'REDEEM_SCRIPT';\n OutputTypes[(OutputTypes['WITNESS_SCRIPT'] = 1)] = 'WITNESS_SCRIPT';\n OutputTypes[(OutputTypes['BIP32_DERIVATION'] = 2)] = 'BIP32_DERIVATION';\n OutputTypes[(OutputTypes['TAP_INTERNAL_KEY'] = 5)] = 'TAP_INTERNAL_KEY';\n OutputTypes[(OutputTypes['TAP_TREE'] = 6)] = 'TAP_TREE';\n OutputTypes[(OutputTypes['TAP_BIP32_DERIVATION'] = 7)] =\n 'TAP_BIP32_DERIVATION';\n})((OutputTypes = exports.OutputTypes || (exports.OutputTypes = {})));\nexports.OUTPUT_TYPE_NAMES = [\n 'redeemScript',\n 'witnessScript',\n 'bip32Derivation',\n 'tapInternalKey',\n 'tapTree',\n 'tapBip32Derivation',\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvdHlwZUZpZWxkcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMseUNBQXlDLG1CQUFtQixLQUFLO0FBQ2xFLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsdUNBQXVDLGtCQUFrQixLQUFLO0FBQy9ELHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyx5Q0FBeUMsbUJBQW1CLEtBQUs7QUFDbEUseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvdHlwZUZpZWxkcy5qcz8yNzJmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgR2xvYmFsVHlwZXM7XG4oZnVuY3Rpb24oR2xvYmFsVHlwZXMpIHtcbiAgR2xvYmFsVHlwZXNbKEdsb2JhbFR5cGVzWydVTlNJR05FRF9UWCddID0gMCldID0gJ1VOU0lHTkVEX1RYJztcbiAgR2xvYmFsVHlwZXNbKEdsb2JhbFR5cGVzWydHTE9CQUxfWFBVQiddID0gMSldID0gJ0dMT0JBTF9YUFVCJztcbn0pKChHbG9iYWxUeXBlcyA9IGV4cG9ydHMuR2xvYmFsVHlwZXMgfHwgKGV4cG9ydHMuR2xvYmFsVHlwZXMgPSB7fSkpKTtcbmV4cG9ydHMuR0xPQkFMX1RZUEVfTkFNRVMgPSBbJ3Vuc2lnbmVkVHgnLCAnZ2xvYmFsWHB1YiddO1xudmFyIElucHV0VHlwZXM7XG4oZnVuY3Rpb24oSW5wdXRUeXBlcykge1xuICBJbnB1dFR5cGVzWyhJbnB1dFR5cGVzWydOT05fV0lUTkVTU19VVFhPJ10gPSAwKV0gPSAnTk9OX1dJVE5FU1NfVVRYTyc7XG4gIElucHV0VHlwZXNbKElucHV0VHlwZXNbJ1dJVE5FU1NfVVRYTyddID0gMSldID0gJ1dJVE5FU1NfVVRYTyc7XG4gIElucHV0VHlwZXNbKElucHV0VHlwZXNbJ1BBUlRJQUxfU0lHJ10gPSAyKV0gPSAnUEFSVElBTF9TSUcnO1xuICBJbnB1dFR5cGVzWyhJbnB1dFR5cGVzWydTSUdIQVNIX1RZUEUnXSA9IDMpXSA9ICdTSUdIQVNIX1RZUEUnO1xuICBJbnB1dFR5cGVzWyhJbnB1dFR5cGVzWydSRURFRU1fU0NSSVBUJ10gPSA0KV0gPSAnUkVERUVNX1NDUklQVCc7XG4gIElucHV0VHlwZXNbKElucHV0VHlwZXNbJ1dJVE5FU1NfU0NSSVBUJ10gPSA1KV0gPSAnV0lUTkVTU19TQ1JJUFQnO1xuICBJbnB1dFR5cGVzWyhJbnB1dFR5cGVzWydCSVAzMl9ERVJJVkFUSU9OJ10gPSA2KV0gPSAnQklQMzJfREVSSVZBVElPTic7XG4gIElucHV0VHlwZXNbKElucHV0VHlwZXNbJ0ZJTkFMX1NDUklQVFNJRyddID0gNyldID0gJ0ZJTkFMX1NDUklQVFNJRyc7XG4gIElucHV0VHlwZXNbKElucHV0VHlwZXNbJ0ZJTkFMX1NDUklQVFdJVE5FU1MnXSA9IDgpXSA9ICdGSU5BTF9TQ1JJUFRXSVRORVNTJztcbiAgSW5wdXRUeXBlc1soSW5wdXRUeXBlc1snUE9SX0NPTU1JVE1FTlQnXSA9IDkpXSA9ICdQT1JfQ09NTUlUTUVOVCc7XG4gIElucHV0VHlwZXNbKElucHV0VHlwZXNbJ1RBUF9LRVlfU0lHJ10gPSAxOSldID0gJ1RBUF9LRVlfU0lHJztcbiAgSW5wdXRUeXBlc1soSW5wdXRUeXBlc1snVEFQX1NDUklQVF9TSUcnXSA9IDIwKV0gPSAnVEFQX1NDUklQVF9TSUcnO1xuICBJbnB1dFR5cGVzWyhJbnB1dFR5cGVzWydUQVBfTEVBRl9TQ1JJUFQnXSA9IDIxKV0gPSAnVEFQX0xFQUZfU0NSSVBUJztcbiAgSW5wdXRUeXBlc1soSW5wdXRUeXBlc1snVEFQX0JJUDMyX0RFUklWQVRJT04nXSA9IDIyKV0gPVxuICAgICdUQVBfQklQMzJfREVSSVZBVElPTic7XG4gIElucHV0VHlwZXNbKElucHV0VHlwZXNbJ1RBUF9JTlRFUk5BTF9LRVknXSA9IDIzKV0gPSAnVEFQX0lOVEVSTkFMX0tFWSc7XG4gIElucHV0VHlwZXNbKElucHV0VHlwZXNbJ1RBUF9NRVJLTEVfUk9PVCddID0gMjQpXSA9ICdUQVBfTUVSS0xFX1JPT1QnO1xufSkoKElucHV0VHlwZXMgPSBleHBvcnRzLklucHV0VHlwZXMgfHwgKGV4cG9ydHMuSW5wdXRUeXBlcyA9IHt9KSkpO1xuZXhwb3J0cy5JTlBVVF9UWVBFX05BTUVTID0gW1xuICAnbm9uV2l0bmVzc1V0eG8nLFxuICAnd2l0bmVzc1V0eG8nLFxuICAncGFydGlhbFNpZycsXG4gICdzaWdoYXNoVHlwZScsXG4gICdyZWRlZW1TY3JpcHQnLFxuICAnd2l0bmVzc1NjcmlwdCcsXG4gICdiaXAzMkRlcml2YXRpb24nLFxuICAnZmluYWxTY3JpcHRTaWcnLFxuICAnZmluYWxTY3JpcHRXaXRuZXNzJyxcbiAgJ3BvckNvbW1pdG1lbnQnLFxuICAndGFwS2V5U2lnJyxcbiAgJ3RhcFNjcmlwdFNpZycsXG4gICd0YXBMZWFmU2NyaXB0JyxcbiAgJ3RhcEJpcDMyRGVyaXZhdGlvbicsXG4gICd0YXBJbnRlcm5hbEtleScsXG4gICd0YXBNZXJrbGVSb290Jyxcbl07XG52YXIgT3V0cHV0VHlwZXM7XG4oZnVuY3Rpb24oT3V0cHV0VHlwZXMpIHtcbiAgT3V0cHV0VHlwZXNbKE91dHB1dFR5cGVzWydSRURFRU1fU0NSSVBUJ10gPSAwKV0gPSAnUkVERUVNX1NDUklQVCc7XG4gIE91dHB1dFR5cGVzWyhPdXRwdXRUeXBlc1snV0lUTkVTU19TQ1JJUFQnXSA9IDEpXSA9ICdXSVRORVNTX1NDUklQVCc7XG4gIE91dHB1dFR5cGVzWyhPdXRwdXRUeXBlc1snQklQMzJfREVSSVZBVElPTiddID0gMildID0gJ0JJUDMyX0RFUklWQVRJT04nO1xuICBPdXRwdXRUeXBlc1soT3V0cHV0VHlwZXNbJ1RBUF9JTlRFUk5BTF9LRVknXSA9IDUpXSA9ICdUQVBfSU5URVJOQUxfS0VZJztcbiAgT3V0cHV0VHlwZXNbKE91dHB1dFR5cGVzWydUQVBfVFJFRSddID0gNildID0gJ1RBUF9UUkVFJztcbiAgT3V0cHV0VHlwZXNbKE91dHB1dFR5cGVzWydUQVBfQklQMzJfREVSSVZBVElPTiddID0gNyldID1cbiAgICAnVEFQX0JJUDMyX0RFUklWQVRJT04nO1xufSkoKE91dHB1dFR5cGVzID0gZXhwb3J0cy5PdXRwdXRUeXBlcyB8fCAoZXhwb3J0cy5PdXRwdXRUeXBlcyA9IHt9KSkpO1xuZXhwb3J0cy5PVVRQVVRfVFlQRV9OQU1FUyA9IFtcbiAgJ3JlZGVlbVNjcmlwdCcsXG4gICd3aXRuZXNzU2NyaXB0JyxcbiAgJ2JpcDMyRGVyaXZhdGlvbicsXG4gICd0YXBJbnRlcm5hbEtleScsXG4gICd0YXBUcmVlJyxcbiAgJ3RhcEJpcDMyRGVyaXZhdGlvbicsXG5dO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/typeFields.js\n\n}")},"./node_modules/bip174/src/lib/utils.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst converter = __webpack_require__(/*! ./converter */ \"./node_modules/bip174/src/lib/converter/index.js\");\nfunction checkForInput(inputs, inputIndex) {\n const input = inputs[inputIndex];\n if (input === undefined) throw new Error(`No input #${inputIndex}`);\n return input;\n}\nexports.checkForInput = checkForInput;\nfunction checkForOutput(outputs, outputIndex) {\n const output = outputs[outputIndex];\n if (output === undefined) throw new Error(`No output #${outputIndex}`);\n return output;\n}\nexports.checkForOutput = checkForOutput;\nfunction checkHasKey(checkKeyVal, keyVals, enumLength) {\n if (checkKeyVal.key[0] < enumLength) {\n throw new Error(\n `Use the method for your specific key instead of addUnknownKeyVal*`,\n );\n }\n if (\n keyVals &&\n keyVals.filter(kv => kv.key.equals(checkKeyVal.key)).length !== 0\n ) {\n throw new Error(`Duplicate Key: ${checkKeyVal.key.toString('hex')}`);\n }\n}\nexports.checkHasKey = checkHasKey;\nfunction getEnumLength(myenum) {\n let count = 0;\n Object.keys(myenum).forEach(val => {\n if (Number(isNaN(Number(val)))) {\n count++;\n }\n });\n return count;\n}\nexports.getEnumLength = getEnumLength;\nfunction inputCheckUncleanFinalized(inputIndex, input) {\n let result = false;\n if (input.nonWitnessUtxo || input.witnessUtxo) {\n const needScriptSig = !!input.redeemScript;\n const needWitnessScript = !!input.witnessScript;\n const scriptSigOK = !needScriptSig || !!input.finalScriptSig;\n const witnessScriptOK = !needWitnessScript || !!input.finalScriptWitness;\n const hasOneFinal = !!input.finalScriptSig || !!input.finalScriptWitness;\n result = scriptSigOK && witnessScriptOK && hasOneFinal;\n }\n if (result === false) {\n throw new Error(\n `Input #${inputIndex} has too much or too little data to clean`,\n );\n }\n}\nexports.inputCheckUncleanFinalized = inputCheckUncleanFinalized;\nfunction throwForUpdateMaker(typeName, name, expected, data) {\n throw new Error(\n `Data for ${typeName} key ${name} is incorrect: Expected ` +\n `${expected} and got ${JSON.stringify(data)}`,\n );\n}\nfunction updateMaker(typeName) {\n return (updateData, mainData) => {\n for (const name of Object.keys(updateData)) {\n // @ts-ignore\n const data = updateData[name];\n // @ts-ignore\n const { canAdd, canAddToArray, check, expected } =\n // @ts-ignore\n converter[typeName + 's'][name] || {};\n const isArray = !!canAddToArray;\n // If unknown data. ignore and do not add\n if (check) {\n if (isArray) {\n if (\n !Array.isArray(data) ||\n // @ts-ignore\n (mainData[name] && !Array.isArray(mainData[name]))\n ) {\n throw new Error(`Key type ${name} must be an array`);\n }\n if (!data.every(check)) {\n throwForUpdateMaker(typeName, name, expected, data);\n }\n // @ts-ignore\n const arr = mainData[name] || [];\n const dupeCheckSet = new Set();\n if (!data.every(v => canAddToArray(arr, v, dupeCheckSet))) {\n throw new Error('Can not add duplicate data to array');\n }\n // @ts-ignore\n mainData[name] = arr.concat(data);\n } else {\n if (!check(data)) {\n throwForUpdateMaker(typeName, name, expected, data);\n }\n if (!canAdd(mainData, data)) {\n throw new Error(`Can not add duplicate data to ${typeName}`);\n }\n // @ts-ignore\n mainData[name] = data;\n }\n }\n }\n };\n}\nexports.updateGlobal = updateMaker('global');\nexports.updateInput = updateMaker('input');\nexports.updateOutput = updateMaker('output');\nfunction addInputAttributes(inputs, data) {\n const index = inputs.length - 1;\n const input = checkForInput(inputs, index);\n exports.updateInput(data, input);\n}\nexports.addInputAttributes = addInputAttributes;\nfunction addOutputAttributes(outputs, data) {\n const index = outputs.length - 1;\n const output = checkForOutput(outputs, index);\n exports.updateOutput(data, output);\n}\nexports.addOutputAttributes = addOutputAttributes;\nfunction defaultVersionSetter(version, txBuf) {\n if (!Buffer.isBuffer(txBuf) || txBuf.length < 4) {\n throw new Error('Set Version: Invalid Transaction');\n }\n txBuf.writeUInt32LE(version, 0);\n return txBuf;\n}\nexports.defaultVersionSetter = defaultVersionSetter;\nfunction defaultLocktimeSetter(locktime, txBuf) {\n if (!Buffer.isBuffer(txBuf) || txBuf.length < 4) {\n throw new Error('Set Locktime: Invalid Transaction');\n }\n txBuf.writeUInt32LE(locktime, txBuf.length - 4);\n return txBuf;\n}\nexports.defaultLocktimeSetter = defaultLocktimeSetter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMTc0L3NyYy9saWIvdXRpbHMuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGtCQUFrQixtQkFBTyxDQUFDLHFFQUFhO0FBQ3ZDO0FBQ0E7QUFDQSx3REFBd0QsV0FBVztBQUNuRTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSwwREFBMEQsWUFBWTtBQUN0RTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGdDQUFnQztBQUN0RTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0EsZ0JBQWdCLFVBQVUsTUFBTSxNQUFNO0FBQ3RDLFNBQVMsVUFBVSxVQUFVLHFCQUFxQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyx5Q0FBeUM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxNQUFNO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxTQUFTO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIsbUJBQW1CO0FBQ25CLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQSxPQUFPLE1BQU07QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsT0FBTyxNQUFNO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpcDE3NC9zcmMvbGliL3V0aWxzLmpzP2EyOGIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IGNvbnZlcnRlciA9IHJlcXVpcmUoJy4vY29udmVydGVyJyk7XG5mdW5jdGlvbiBjaGVja0ZvcklucHV0KGlucHV0cywgaW5wdXRJbmRleCkge1xuICBjb25zdCBpbnB1dCA9IGlucHV0c1tpbnB1dEluZGV4XTtcbiAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihgTm8gaW5wdXQgIyR7aW5wdXRJbmRleH1gKTtcbiAgcmV0dXJuIGlucHV0O1xufVxuZXhwb3J0cy5jaGVja0ZvcklucHV0ID0gY2hlY2tGb3JJbnB1dDtcbmZ1bmN0aW9uIGNoZWNrRm9yT3V0cHV0KG91dHB1dHMsIG91dHB1dEluZGV4KSB7XG4gIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbb3V0cHV0SW5kZXhdO1xuICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihgTm8gb3V0cHV0ICMke291dHB1dEluZGV4fWApO1xuICByZXR1cm4gb3V0cHV0O1xufVxuZXhwb3J0cy5jaGVja0Zvck91dHB1dCA9IGNoZWNrRm9yT3V0cHV0O1xuZnVuY3Rpb24gY2hlY2tIYXNLZXkoY2hlY2tLZXlWYWwsIGtleVZhbHMsIGVudW1MZW5ndGgpIHtcbiAgaWYgKGNoZWNrS2V5VmFsLmtleVswXSA8IGVudW1MZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVXNlIHRoZSBtZXRob2QgZm9yIHlvdXIgc3BlY2lmaWMga2V5IGluc3RlYWQgb2YgYWRkVW5rbm93bktleVZhbCpgLFxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgIGtleVZhbHMgJiZcbiAgICBrZXlWYWxzLmZpbHRlcihrdiA9PiBrdi5rZXkuZXF1YWxzKGNoZWNrS2V5VmFsLmtleSkpLmxlbmd0aCAhPT0gMFxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBLZXk6ICR7Y2hlY2tLZXlWYWwua2V5LnRvU3RyaW5nKCdoZXgnKX1gKTtcbiAgfVxufVxuZXhwb3J0cy5jaGVja0hhc0tleSA9IGNoZWNrSGFzS2V5O1xuZnVuY3Rpb24gZ2V0RW51bUxlbmd0aChteWVudW0pIHtcbiAgbGV0IGNvdW50ID0gMDtcbiAgT2JqZWN0LmtleXMobXllbnVtKS5mb3JFYWNoKHZhbCA9PiB7XG4gICAgaWYgKE51bWJlcihpc05hTihOdW1iZXIodmFsKSkpKSB7XG4gICAgICBjb3VudCsrO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3VudDtcbn1cbmV4cG9ydHMuZ2V0RW51bUxlbmd0aCA9IGdldEVudW1MZW5ndGg7XG5mdW5jdGlvbiBpbnB1dENoZWNrVW5jbGVhbkZpbmFsaXplZChpbnB1dEluZGV4LCBpbnB1dCkge1xuICBsZXQgcmVzdWx0ID0gZmFsc2U7XG4gIGlmIChpbnB1dC5ub25XaXRuZXNzVXR4byB8fCBpbnB1dC53aXRuZXNzVXR4bykge1xuICAgIGNvbnN0IG5lZWRTY3JpcHRTaWcgPSAhIWlucHV0LnJlZGVlbVNjcmlwdDtcbiAgICBjb25zdCBuZWVkV2l0bmVzc1NjcmlwdCA9ICEhaW5wdXQud2l0bmVzc1NjcmlwdDtcbiAgICBjb25zdCBzY3JpcHRTaWdPSyA9ICFuZWVkU2NyaXB0U2lnIHx8ICEhaW5wdXQuZmluYWxTY3JpcHRTaWc7XG4gICAgY29uc3Qgd2l0bmVzc1NjcmlwdE9LID0gIW5lZWRXaXRuZXNzU2NyaXB0IHx8ICEhaW5wdXQuZmluYWxTY3JpcHRXaXRuZXNzO1xuICAgIGNvbnN0IGhhc09uZUZpbmFsID0gISFpbnB1dC5maW5hbFNjcmlwdFNpZyB8fCAhIWlucHV0LmZpbmFsU2NyaXB0V2l0bmVzcztcbiAgICByZXN1bHQgPSBzY3JpcHRTaWdPSyAmJiB3aXRuZXNzU2NyaXB0T0sgJiYgaGFzT25lRmluYWw7XG4gIH1cbiAgaWYgKHJlc3VsdCA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW5wdXQgIyR7aW5wdXRJbmRleH0gaGFzIHRvbyBtdWNoIG9yIHRvbyBsaXR0bGUgZGF0YSB0byBjbGVhbmAsXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0cy5pbnB1dENoZWNrVW5jbGVhbkZpbmFsaXplZCA9IGlucHV0Q2hlY2tVbmNsZWFuRmluYWxpemVkO1xuZnVuY3Rpb24gdGhyb3dGb3JVcGRhdGVNYWtlcih0eXBlTmFtZSwgbmFtZSwgZXhwZWN0ZWQsIGRhdGEpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBEYXRhIGZvciAke3R5cGVOYW1lfSBrZXkgJHtuYW1lfSBpcyBpbmNvcnJlY3Q6IEV4cGVjdGVkIGAgK1xuICAgICAgYCR7ZXhwZWN0ZWR9IGFuZCBnb3QgJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gLFxuICApO1xufVxuZnVuY3Rpb24gdXBkYXRlTWFrZXIodHlwZU5hbWUpIHtcbiAgcmV0dXJuICh1cGRhdGVEYXRhLCBtYWluRGF0YSkgPT4ge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyh1cGRhdGVEYXRhKSkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgZGF0YSA9IHVwZGF0ZURhdGFbbmFtZV07XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCB7IGNhbkFkZCwgY2FuQWRkVG9BcnJheSwgY2hlY2ssIGV4cGVjdGVkIH0gPVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnZlcnRlclt0eXBlTmFtZSArICdzJ11bbmFtZV0gfHwge307XG4gICAgICBjb25zdCBpc0FycmF5ID0gISFjYW5BZGRUb0FycmF5O1xuICAgICAgLy8gSWYgdW5rbm93biBkYXRhLiBpZ25vcmUgYW5kIGRvIG5vdCBhZGRcbiAgICAgIGlmIChjaGVjaykge1xuICAgICAgICBpZiAoaXNBcnJheSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KGRhdGEpIHx8XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAobWFpbkRhdGFbbmFtZV0gJiYgIUFycmF5LmlzQXJyYXkobWFpbkRhdGFbbmFtZV0pKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXkgdHlwZSAke25hbWV9IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFkYXRhLmV2ZXJ5KGNoZWNrKSkge1xuICAgICAgICAgICAgdGhyb3dGb3JVcGRhdGVNYWtlcih0eXBlTmFtZSwgbmFtZSwgZXhwZWN0ZWQsIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgY29uc3QgYXJyID0gbWFpbkRhdGFbbmFtZV0gfHwgW107XG4gICAgICAgICAgY29uc3QgZHVwZUNoZWNrU2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgIGlmICghZGF0YS5ldmVyeSh2ID0+IGNhbkFkZFRvQXJyYXkoYXJyLCB2LCBkdXBlQ2hlY2tTZXQpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGFkZCBkdXBsaWNhdGUgZGF0YSB0byBhcnJheScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgbWFpbkRhdGFbbmFtZV0gPSBhcnIuY29uY2F0KGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghY2hlY2soZGF0YSkpIHtcbiAgICAgICAgICAgIHRocm93Rm9yVXBkYXRlTWFrZXIodHlwZU5hbWUsIG5hbWUsIGV4cGVjdGVkLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFjYW5BZGQobWFpbkRhdGEsIGRhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgYWRkIGR1cGxpY2F0ZSBkYXRhIHRvICR7dHlwZU5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICBtYWluRGF0YVtuYW1lXSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5leHBvcnRzLnVwZGF0ZUdsb2JhbCA9IHVwZGF0ZU1ha2VyKCdnbG9iYWwnKTtcbmV4cG9ydHMudXBkYXRlSW5wdXQgPSB1cGRhdGVNYWtlcignaW5wdXQnKTtcbmV4cG9ydHMudXBkYXRlT3V0cHV0ID0gdXBkYXRlTWFrZXIoJ291dHB1dCcpO1xuZnVuY3Rpb24gYWRkSW5wdXRBdHRyaWJ1dGVzKGlucHV0cywgZGF0YSkge1xuICBjb25zdCBpbmRleCA9IGlucHV0cy5sZW5ndGggLSAxO1xuICBjb25zdCBpbnB1dCA9IGNoZWNrRm9ySW5wdXQoaW5wdXRzLCBpbmRleCk7XG4gIGV4cG9ydHMudXBkYXRlSW5wdXQoZGF0YSwgaW5wdXQpO1xufVxuZXhwb3J0cy5hZGRJbnB1dEF0dHJpYnV0ZXMgPSBhZGRJbnB1dEF0dHJpYnV0ZXM7XG5mdW5jdGlvbiBhZGRPdXRwdXRBdHRyaWJ1dGVzKG91dHB1dHMsIGRhdGEpIHtcbiAgY29uc3QgaW5kZXggPSBvdXRwdXRzLmxlbmd0aCAtIDE7XG4gIGNvbnN0IG91dHB1dCA9IGNoZWNrRm9yT3V0cHV0KG91dHB1dHMsIGluZGV4KTtcbiAgZXhwb3J0cy51cGRhdGVPdXRwdXQoZGF0YSwgb3V0cHV0KTtcbn1cbmV4cG9ydHMuYWRkT3V0cHV0QXR0cmlidXRlcyA9IGFkZE91dHB1dEF0dHJpYnV0ZXM7XG5mdW5jdGlvbiBkZWZhdWx0VmVyc2lvblNldHRlcih2ZXJzaW9uLCB0eEJ1Zikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0eEJ1ZikgfHwgdHhCdWYubGVuZ3RoIDwgNCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2V0IFZlcnNpb246IEludmFsaWQgVHJhbnNhY3Rpb24nKTtcbiAgfVxuICB0eEJ1Zi53cml0ZVVJbnQzMkxFKHZlcnNpb24sIDApO1xuICByZXR1cm4gdHhCdWY7XG59XG5leHBvcnRzLmRlZmF1bHRWZXJzaW9uU2V0dGVyID0gZGVmYXVsdFZlcnNpb25TZXR0ZXI7XG5mdW5jdGlvbiBkZWZhdWx0TG9ja3RpbWVTZXR0ZXIobG9ja3RpbWUsIHR4QnVmKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHR4QnVmKSB8fCB0eEJ1Zi5sZW5ndGggPCA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTZXQgTG9ja3RpbWU6IEludmFsaWQgVHJhbnNhY3Rpb24nKTtcbiAgfVxuICB0eEJ1Zi53cml0ZVVJbnQzMkxFKGxvY2t0aW1lLCB0eEJ1Zi5sZW5ndGggLSA0KTtcbiAgcmV0dXJuIHR4QnVmO1xufVxuZXhwb3J0cy5kZWZhdWx0TG9ja3RpbWVTZXR0ZXIgPSBkZWZhdWx0TG9ja3RpbWVTZXR0ZXI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip174/src/lib/utils.js\n\n}")},"./node_modules/bip32/src/bip32.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.BIP32Factory = void 0;\nconst crypto = __webpack_require__(/*! ./crypto */ \"./node_modules/bip32/src/crypto.js\");\nconst testecc_1 = __webpack_require__(/*! ./testecc */ \"./node_modules/bip32/src/testecc.js\");\nconst base_1 = __webpack_require__(/*! @scure/base */ \"./node_modules/@scure/base/lib/index.js\");\nconst sha256_1 = __webpack_require__(/*! @noble/hashes/sha256 */ \"./node_modules/@noble/hashes/sha2.js\");\nconst typeforce = __webpack_require__(/*! typeforce */ \"./node_modules/typeforce/index.js\");\nconst wif = __webpack_require__(/*! wif */ \"./node_modules/wif/index.js\");\nconst _bs58check = (0, base_1.base58check)(sha256_1.sha256);\nconst bs58check = {\n encode: (data) => _bs58check.encode(Uint8Array.from(data)),\n decode: (str) => Buffer.from(_bs58check.decode(str)),\n};\nfunction BIP32Factory(ecc) {\n (0, testecc_1.testEcc)(ecc);\n const UINT256_TYPE = typeforce.BufferN(32);\n const NETWORK_TYPE = typeforce.compile({\n wif: typeforce.UInt8,\n bip32: {\n public: typeforce.UInt32,\n private: typeforce.UInt32,\n },\n });\n const BITCOIN = {\n messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n bech32: 'bc',\n bip32: {\n public: 0x0488b21e,\n private: 0x0488ade4,\n },\n pubKeyHash: 0x00,\n scriptHash: 0x05,\n wif: 0x80,\n };\n const HIGHEST_BIT = 0x80000000;\n const UINT31_MAX = Math.pow(2, 31) - 1;\n function BIP32Path(value) {\n return (typeforce.String(value) && value.match(/^(m\\/)?(\\d+'?\\/)*\\d+'?$/) !== null);\n }\n function UInt31(value) {\n return typeforce.UInt32(value) && value <= UINT31_MAX;\n }\n function toXOnly(pubKey) {\n return pubKey.length === 32 ? pubKey : pubKey.slice(1, 33);\n }\n class Bip32Signer {\n constructor(__D, __Q) {\n this.__D = __D;\n this.__Q = __Q;\n this.lowR = false;\n }\n get publicKey() {\n if (this.__Q === undefined)\n this.__Q = Buffer.from(ecc.pointFromScalar(this.__D, true));\n return this.__Q;\n }\n get privateKey() {\n return this.__D;\n }\n sign(hash, lowR) {\n if (!this.privateKey)\n throw new Error('Missing private key');\n if (lowR === undefined)\n lowR = this.lowR;\n if (lowR === false) {\n return Buffer.from(ecc.sign(hash, this.privateKey));\n }\n else {\n let sig = Buffer.from(ecc.sign(hash, this.privateKey));\n const extraData = Buffer.alloc(32, 0);\n let counter = 0;\n // if first try is lowR, skip the loop\n // for second try and on, add extra entropy counting up\n while (sig[0] > 0x7f) {\n counter++;\n extraData.writeUIntLE(counter, 0, 6);\n sig = Buffer.from(ecc.sign(hash, this.privateKey, extraData));\n }\n return sig;\n }\n }\n signSchnorr(hash) {\n if (!this.privateKey)\n throw new Error('Missing private key');\n if (!ecc.signSchnorr)\n throw new Error('signSchnorr not supported by ecc library');\n return Buffer.from(ecc.signSchnorr(hash, this.privateKey));\n }\n verify(hash, signature) {\n return ecc.verify(hash, this.publicKey, signature);\n }\n verifySchnorr(hash, signature) {\n if (!ecc.verifySchnorr)\n throw new Error('verifySchnorr not supported by ecc library');\n return ecc.verifySchnorr(hash, this.publicKey.subarray(1, 33), signature);\n }\n }\n class BIP32 extends Bip32Signer {\n constructor(__D, __Q, chainCode, network, __DEPTH = 0, __INDEX = 0, __PARENT_FINGERPRINT = 0x00000000) {\n super(__D, __Q);\n this.chainCode = chainCode;\n this.network = network;\n this.__DEPTH = __DEPTH;\n this.__INDEX = __INDEX;\n this.__PARENT_FINGERPRINT = __PARENT_FINGERPRINT;\n typeforce(NETWORK_TYPE, network);\n }\n get depth() {\n return this.__DEPTH;\n }\n get index() {\n return this.__INDEX;\n }\n get parentFingerprint() {\n return this.__PARENT_FINGERPRINT;\n }\n get identifier() {\n return crypto.hash160(this.publicKey);\n }\n get fingerprint() {\n return this.identifier.slice(0, 4);\n }\n get compressed() {\n return true;\n }\n // Private === not neutered\n // Public === neutered\n isNeutered() {\n return this.__D === undefined;\n }\n neutered() {\n return fromPublicKeyLocal(this.publicKey, this.chainCode, this.network, this.depth, this.index, this.parentFingerprint);\n }\n toBase58() {\n const network = this.network;\n const version = !this.isNeutered()\n ? network.bip32.private\n : network.bip32.public;\n const buffer = Buffer.allocUnsafe(78);\n // 4 bytes: version bytes\n buffer.writeUInt32BE(version, 0);\n // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....\n buffer.writeUInt8(this.depth, 4);\n // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)\n buffer.writeUInt32BE(this.parentFingerprint, 5);\n // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.\n // This is encoded in big endian. (0x00000000 if master key)\n buffer.writeUInt32BE(this.index, 9);\n // 32 bytes: the chain code\n this.chainCode.copy(buffer, 13);\n // 33 bytes: the public key or private key data\n if (!this.isNeutered()) {\n // 0x00 + k for private keys\n buffer.writeUInt8(0, 45);\n this.privateKey.copy(buffer, 46);\n // 33 bytes: the public key\n }\n else {\n // X9.62 encoding for public keys\n this.publicKey.copy(buffer, 45);\n }\n return bs58check.encode(buffer);\n }\n toWIF() {\n if (!this.privateKey)\n throw new TypeError('Missing private key');\n return wif.encode(this.network.wif, this.privateKey, true);\n }\n // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions\n derive(index) {\n typeforce(typeforce.UInt32, index);\n const isHardened = index >= HIGHEST_BIT;\n const data = Buffer.allocUnsafe(37);\n // Hardened child\n if (isHardened) {\n if (this.isNeutered())\n throw new TypeError('Missing private key for hardened child key');\n // data = 0x00 || ser256(kpar) || ser32(index)\n data[0] = 0x00;\n this.privateKey.copy(data, 1);\n data.writeUInt32BE(index, 33);\n // Normal child\n }\n else {\n // data = serP(point(kpar)) || ser32(index)\n // = serP(Kpar) || ser32(index)\n this.publicKey.copy(data, 0);\n data.writeUInt32BE(index, 33);\n }\n const I = crypto.hmacSHA512(this.chainCode, data);\n const IL = I.slice(0, 32);\n const IR = I.slice(32);\n // if parse256(IL) >= n, proceed with the next value for i\n if (!ecc.isPrivate(IL))\n return this.derive(index + 1);\n // Private parent key -> private child key\n let hd;\n if (!this.isNeutered()) {\n // ki = parse256(IL) + kpar (mod n)\n const ki = Buffer.from(ecc.privateAdd(this.privateKey, IL));\n // In case ki == 0, proceed with the next value for i\n if (ki == null)\n return this.derive(index + 1);\n hd = fromPrivateKeyLocal(ki, IR, this.network, this.depth + 1, index, this.fingerprint.readUInt32BE(0));\n // Public parent key -> public child key\n }\n else {\n // Ki = point(parse256(IL)) + Kpar\n // = G*IL + Kpar\n const Ki = Buffer.from(ecc.pointAddScalar(this.publicKey, IL, true));\n // In case Ki is the point at infinity, proceed with the next value for i\n if (Ki === null)\n return this.derive(index + 1);\n hd = fromPublicKeyLocal(Ki, IR, this.network, this.depth + 1, index, this.fingerprint.readUInt32BE(0));\n }\n return hd;\n }\n deriveHardened(index) {\n typeforce(UInt31, index);\n // Only derives hardened private keys by default\n return this.derive(index + HIGHEST_BIT);\n }\n derivePath(path) {\n typeforce(BIP32Path, path);\n let splitPath = path.split('/');\n if (splitPath[0] === 'm') {\n if (this.parentFingerprint)\n throw new TypeError('Expected master, got child');\n splitPath = splitPath.slice(1);\n }\n return splitPath.reduce((prevHd, indexStr) => {\n let index;\n if (indexStr.slice(-1) === `'`) {\n index = parseInt(indexStr.slice(0, -1), 10);\n return prevHd.deriveHardened(index);\n }\n else {\n index = parseInt(indexStr, 10);\n return prevHd.derive(index);\n }\n }, this);\n }\n tweak(t) {\n if (this.privateKey)\n return this.tweakFromPrivateKey(t);\n return this.tweakFromPublicKey(t);\n }\n tweakFromPublicKey(t) {\n const xOnlyPubKey = toXOnly(this.publicKey);\n if (!ecc.xOnlyPointAddTweak)\n throw new Error('xOnlyPointAddTweak not supported by ecc library');\n const tweakedPublicKey = ecc.xOnlyPointAddTweak(xOnlyPubKey, t);\n if (!tweakedPublicKey || tweakedPublicKey.xOnlyPubkey === null)\n throw new Error('Cannot tweak public key!');\n const parityByte = Buffer.from([\n tweakedPublicKey.parity === 0 ? 0x02 : 0x03,\n ]);\n const tweakedPublicKeyCompresed = Buffer.concat([\n parityByte,\n tweakedPublicKey.xOnlyPubkey,\n ]);\n return new Bip32Signer(undefined, tweakedPublicKeyCompresed);\n }\n tweakFromPrivateKey(t) {\n const hasOddY = this.publicKey[0] === 3 ||\n (this.publicKey[0] === 4 && (this.publicKey[64] & 1) === 1);\n const privateKey = (() => {\n if (!hasOddY)\n return this.privateKey;\n else if (!ecc.privateNegate)\n throw new Error('privateNegate not supported by ecc library');\n else\n return ecc.privateNegate(this.privateKey);\n })();\n const tweakedPrivateKey = ecc.privateAdd(privateKey, t);\n if (!tweakedPrivateKey)\n throw new Error('Invalid tweaked private key!');\n return new Bip32Signer(Buffer.from(tweakedPrivateKey), undefined);\n }\n }\n function fromBase58(inString, network) {\n const buffer = bs58check.decode(inString);\n if (buffer.length !== 78)\n throw new TypeError('Invalid buffer length');\n network = network || BITCOIN;\n // 4 bytes: version bytes\n const version = buffer.readUInt32BE(0);\n if (version !== network.bip32.private && version !== network.bip32.public)\n throw new TypeError('Invalid network version');\n // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...\n const depth = buffer[4];\n // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)\n const parentFingerprint = buffer.readUInt32BE(5);\n if (depth === 0) {\n if (parentFingerprint !== 0x00000000)\n throw new TypeError('Invalid parent fingerprint');\n }\n // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.\n // This is encoded in MSB order. (0x00000000 if master key)\n const index = buffer.readUInt32BE(9);\n if (depth === 0 && index !== 0)\n throw new TypeError('Invalid index');\n // 32 bytes: the chain code\n const chainCode = buffer.slice(13, 45);\n let hd;\n // 33 bytes: private key data (0x00 + k)\n if (version === network.bip32.private) {\n if (buffer.readUInt8(45) !== 0x00)\n throw new TypeError('Invalid private key');\n const k = buffer.slice(46, 78);\n hd = fromPrivateKeyLocal(k, chainCode, network, depth, index, parentFingerprint);\n // 33 bytes: public key data (0x02 + X or 0x03 + X)\n }\n else {\n const X = buffer.slice(45, 78);\n hd = fromPublicKeyLocal(X, chainCode, network, depth, index, parentFingerprint);\n }\n return hd;\n }\n function fromPrivateKey(privateKey, chainCode, network) {\n return fromPrivateKeyLocal(privateKey, chainCode, network);\n }\n function fromPrivateKeyLocal(privateKey, chainCode, network, depth, index, parentFingerprint) {\n typeforce({\n privateKey: UINT256_TYPE,\n chainCode: UINT256_TYPE,\n }, { privateKey, chainCode });\n network = network || BITCOIN;\n if (!ecc.isPrivate(privateKey))\n throw new TypeError('Private key not in range [1, n)');\n return new BIP32(privateKey, undefined, chainCode, network, depth, index, parentFingerprint);\n }\n function fromPublicKey(publicKey, chainCode, network) {\n return fromPublicKeyLocal(publicKey, chainCode, network);\n }\n function fromPublicKeyLocal(publicKey, chainCode, network, depth, index, parentFingerprint) {\n typeforce({\n publicKey: typeforce.BufferN(33),\n chainCode: UINT256_TYPE,\n }, { publicKey, chainCode });\n network = network || BITCOIN;\n // verify the X coordinate is a point on the curve\n if (!ecc.isPoint(publicKey))\n throw new TypeError('Point is not on the curve');\n return new BIP32(undefined, publicKey, chainCode, network, depth, index, parentFingerprint);\n }\n function fromSeed(seed, network) {\n typeforce(typeforce.Buffer, seed);\n if (seed.length < 16)\n throw new TypeError('Seed should be at least 128 bits');\n if (seed.length > 64)\n throw new TypeError('Seed should be at most 512 bits');\n network = network || BITCOIN;\n const I = crypto.hmacSHA512(Buffer.from('Bitcoin seed', 'utf8'), seed);\n const IL = I.slice(0, 32);\n const IR = I.slice(32);\n return fromPrivateKey(IL, IR, network);\n }\n return {\n fromSeed,\n fromBase58,\n fromPublicKey,\n fromPrivateKey,\n };\n}\nexports.BIP32Factory = BIP32Factory;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMzIvc3JjL2JpcDMyLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxvQkFBb0I7QUFDcEIsZUFBZSxtQkFBTyxDQUFDLG9EQUFVO0FBQ2pDLGtCQUFrQixtQkFBTyxDQUFDLHNEQUFXO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyw0REFBYTtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxrRUFBc0I7QUFDL0Msa0JBQWtCLG1CQUFPLENBQUMsb0RBQVc7QUFDckMsWUFBWSxtQkFBTyxDQUFDLHdDQUFLO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixNQUFNO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE1BQU07QUFDN0I7QUFDQTtBQUNBLDBCQUEwQixNQUFNO0FBQ2hDLGtDQUFrQyxNQUFNO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixNQUFNO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixNQUFNO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixNQUFNO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixNQUFNO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsTUFBTTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsTUFBTTtBQUNyQztBQUNBO0FBQ0EsOENBQThDLE1BQU07QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxNQUFNO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsSUFBSSx1QkFBdUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxJQUFJLHNCQUFzQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAzMi9zcmMvYmlwMzIuanM/Y2Y0YiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQklQMzJGYWN0b3J5ID0gdm9pZCAwO1xuY29uc3QgY3J5cHRvID0gcmVxdWlyZShcIi4vY3J5cHRvXCIpO1xuY29uc3QgdGVzdGVjY18xID0gcmVxdWlyZShcIi4vdGVzdGVjY1wiKTtcbmNvbnN0IGJhc2VfMSA9IHJlcXVpcmUoXCJAc2N1cmUvYmFzZVwiKTtcbmNvbnN0IHNoYTI1Nl8xID0gcmVxdWlyZShcIkBub2JsZS9oYXNoZXMvc2hhMjU2XCIpO1xuY29uc3QgdHlwZWZvcmNlID0gcmVxdWlyZSgndHlwZWZvcmNlJyk7XG5jb25zdCB3aWYgPSByZXF1aXJlKCd3aWYnKTtcbmNvbnN0IF9iczU4Y2hlY2sgPSAoMCwgYmFzZV8xLmJhc2U1OGNoZWNrKShzaGEyNTZfMS5zaGEyNTYpO1xuY29uc3QgYnM1OGNoZWNrID0ge1xuICAgIGVuY29kZTogKGRhdGEpID0+IF9iczU4Y2hlY2suZW5jb2RlKFVpbnQ4QXJyYXkuZnJvbShkYXRhKSksXG4gICAgZGVjb2RlOiAoc3RyKSA9PiBCdWZmZXIuZnJvbShfYnM1OGNoZWNrLmRlY29kZShzdHIpKSxcbn07XG5mdW5jdGlvbiBCSVAzMkZhY3RvcnkoZWNjKSB7XG4gICAgKDAsIHRlc3RlY2NfMS50ZXN0RWNjKShlY2MpO1xuICAgIGNvbnN0IFVJTlQyNTZfVFlQRSA9IHR5cGVmb3JjZS5CdWZmZXJOKDMyKTtcbiAgICBjb25zdCBORVRXT1JLX1RZUEUgPSB0eXBlZm9yY2UuY29tcGlsZSh7XG4gICAgICAgIHdpZjogdHlwZWZvcmNlLlVJbnQ4LFxuICAgICAgICBiaXAzMjoge1xuICAgICAgICAgICAgcHVibGljOiB0eXBlZm9yY2UuVUludDMyLFxuICAgICAgICAgICAgcHJpdmF0ZTogdHlwZWZvcmNlLlVJbnQzMixcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBCSVRDT0lOID0ge1xuICAgICAgICBtZXNzYWdlUHJlZml4OiAnXFx4MThCaXRjb2luIFNpZ25lZCBNZXNzYWdlOlxcbicsXG4gICAgICAgIGJlY2gzMjogJ2JjJyxcbiAgICAgICAgYmlwMzI6IHtcbiAgICAgICAgICAgIHB1YmxpYzogMHgwNDg4YjIxZSxcbiAgICAgICAgICAgIHByaXZhdGU6IDB4MDQ4OGFkZTQsXG4gICAgICAgIH0sXG4gICAgICAgIHB1YktleUhhc2g6IDB4MDAsXG4gICAgICAgIHNjcmlwdEhhc2g6IDB4MDUsXG4gICAgICAgIHdpZjogMHg4MCxcbiAgICB9O1xuICAgIGNvbnN0IEhJR0hFU1RfQklUID0gMHg4MDAwMDAwMDtcbiAgICBjb25zdCBVSU5UMzFfTUFYID0gTWF0aC5wb3coMiwgMzEpIC0gMTtcbiAgICBmdW5jdGlvbiBCSVAzMlBhdGgodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICh0eXBlZm9yY2UuU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZS5tYXRjaCgvXihtXFwvKT8oXFxkKyc/XFwvKSpcXGQrJz8kLykgIT09IG51bGwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBVSW50MzEodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVmb3JjZS5VSW50MzIodmFsdWUpICYmIHZhbHVlIDw9IFVJTlQzMV9NQVg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvWE9ubHkocHViS2V5KSB7XG4gICAgICAgIHJldHVybiBwdWJLZXkubGVuZ3RoID09PSAzMiA/IHB1YktleSA6IHB1YktleS5zbGljZSgxLCAzMyk7XG4gICAgfVxuICAgIGNsYXNzIEJpcDMyU2lnbmVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoX19ELCBfX1EpIHtcbiAgICAgICAgICAgIHRoaXMuX19EID0gX19EO1xuICAgICAgICAgICAgdGhpcy5fX1EgPSBfX1E7XG4gICAgICAgICAgICB0aGlzLmxvd1IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcHVibGljS2V5KCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX19RID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgdGhpcy5fX1EgPSBCdWZmZXIuZnJvbShlY2MucG9pbnRGcm9tU2NhbGFyKHRoaXMuX19ELCB0cnVlKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX1E7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHByaXZhdGVLZXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX0Q7XG4gICAgICAgIH1cbiAgICAgICAgc2lnbihoYXNoLCBsb3dSKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJpdmF0ZUtleSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgICAgIGlmIChsb3dSID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgbG93UiA9IHRoaXMubG93UjtcbiAgICAgICAgICAgIGlmIChsb3dSID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShlY2Muc2lnbihoYXNoLCB0aGlzLnByaXZhdGVLZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBzaWcgPSBCdWZmZXIuZnJvbShlY2Muc2lnbihoYXNoLCB0aGlzLnByaXZhdGVLZXkpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYURhdGEgPSBCdWZmZXIuYWxsb2MoMzIsIDApO1xuICAgICAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICAgICAgICAvLyBpZiBmaXJzdCB0cnkgaXMgbG93Uiwgc2tpcCB0aGUgbG9vcFxuICAgICAgICAgICAgICAgIC8vIGZvciBzZWNvbmQgdHJ5IGFuZCBvbiwgYWRkIGV4dHJhIGVudHJvcHkgY291bnRpbmcgdXBcbiAgICAgICAgICAgICAgICB3aGlsZSAoc2lnWzBdID4gMHg3Zikge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhRGF0YS53cml0ZVVJbnRMRShjb3VudGVyLCAwLCA2KTtcbiAgICAgICAgICAgICAgICAgICAgc2lnID0gQnVmZmVyLmZyb20oZWNjLnNpZ24oaGFzaCwgdGhpcy5wcml2YXRlS2V5LCBleHRyYURhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzaWduU2Nobm9ycihoYXNoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJpdmF0ZUtleSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgICAgIGlmICghZWNjLnNpZ25TY2hub3JyKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2lnblNjaG5vcnIgbm90IHN1cHBvcnRlZCBieSBlY2MgbGlicmFyeScpO1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGVjYy5zaWduU2Nobm9ycihoYXNoLCB0aGlzLnByaXZhdGVLZXkpKTtcbiAgICAgICAgfVxuICAgICAgICB2ZXJpZnkoaGFzaCwgc2lnbmF0dXJlKSB7XG4gICAgICAgICAgICByZXR1cm4gZWNjLnZlcmlmeShoYXNoLCB0aGlzLnB1YmxpY0tleSwgc2lnbmF0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICB2ZXJpZnlTY2hub3JyKGhhc2gsIHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgaWYgKCFlY2MudmVyaWZ5U2Nobm9ycilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZlcmlmeVNjaG5vcnIgbm90IHN1cHBvcnRlZCBieSBlY2MgbGlicmFyeScpO1xuICAgICAgICAgICAgcmV0dXJuIGVjYy52ZXJpZnlTY2hub3JyKGhhc2gsIHRoaXMucHVibGljS2V5LnN1YmFycmF5KDEsIDMzKSwgc2lnbmF0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBCSVAzMiBleHRlbmRzIEJpcDMyU2lnbmVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoX19ELCBfX1EsIGNoYWluQ29kZSwgbmV0d29yaywgX19ERVBUSCA9IDAsIF9fSU5ERVggPSAwLCBfX1BBUkVOVF9GSU5HRVJQUklOVCA9IDB4MDAwMDAwMDApIHtcbiAgICAgICAgICAgIHN1cGVyKF9fRCwgX19RKTtcbiAgICAgICAgICAgIHRoaXMuY2hhaW5Db2RlID0gY2hhaW5Db2RlO1xuICAgICAgICAgICAgdGhpcy5uZXR3b3JrID0gbmV0d29yaztcbiAgICAgICAgICAgIHRoaXMuX19ERVBUSCA9IF9fREVQVEg7XG4gICAgICAgICAgICB0aGlzLl9fSU5ERVggPSBfX0lOREVYO1xuICAgICAgICAgICAgdGhpcy5fX1BBUkVOVF9GSU5HRVJQUklOVCA9IF9fUEFSRU5UX0ZJTkdFUlBSSU5UO1xuICAgICAgICAgICAgdHlwZWZvcmNlKE5FVFdPUktfVFlQRSwgbmV0d29yayk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGRlcHRoKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19ERVBUSDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaW5kZXgoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fX0lOREVYO1xuICAgICAgICB9XG4gICAgICAgIGdldCBwYXJlbnRGaW5nZXJwcmludCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9fUEFSRU5UX0ZJTkdFUlBSSU5UO1xuICAgICAgICB9XG4gICAgICAgIGdldCBpZGVudGlmaWVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5oYXNoMTYwKHRoaXMucHVibGljS2V5KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZmluZ2VycHJpbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZGVudGlmaWVyLnNsaWNlKDAsIDQpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjb21wcmVzc2VkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJpdmF0ZSA9PT0gbm90IG5ldXRlcmVkXG4gICAgICAgIC8vIFB1YmxpYyA9PT0gbmV1dGVyZWRcbiAgICAgICAgaXNOZXV0ZXJlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9fRCA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIG5ldXRlcmVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21QdWJsaWNLZXlMb2NhbCh0aGlzLnB1YmxpY0tleSwgdGhpcy5jaGFpbkNvZGUsIHRoaXMubmV0d29yaywgdGhpcy5kZXB0aCwgdGhpcy5pbmRleCwgdGhpcy5wYXJlbnRGaW5nZXJwcmludCk7XG4gICAgICAgIH1cbiAgICAgICAgdG9CYXNlNTgoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXR3b3JrID0gdGhpcy5uZXR3b3JrO1xuICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9ICF0aGlzLmlzTmV1dGVyZWQoKVxuICAgICAgICAgICAgICAgID8gbmV0d29yay5iaXAzMi5wcml2YXRlXG4gICAgICAgICAgICAgICAgOiBuZXR3b3JrLmJpcDMyLnB1YmxpYztcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg3OCk7XG4gICAgICAgICAgICAvLyA0IGJ5dGVzOiB2ZXJzaW9uIGJ5dGVzXG4gICAgICAgICAgICBidWZmZXIud3JpdGVVSW50MzJCRSh2ZXJzaW9uLCAwKTtcbiAgICAgICAgICAgIC8vIDEgYnl0ZTogZGVwdGg6IDB4MDAgZm9yIG1hc3RlciBub2RlcywgMHgwMSBmb3IgbGV2ZWwtMSBkZXNjZW5kYW50cywgLi4uLlxuICAgICAgICAgICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5kZXB0aCwgNCk7XG4gICAgICAgICAgICAvLyA0IGJ5dGVzOiB0aGUgZmluZ2VycHJpbnQgb2YgdGhlIHBhcmVudCdzIGtleSAoMHgwMDAwMDAwMCBpZiBtYXN0ZXIga2V5KVxuICAgICAgICAgICAgYnVmZmVyLndyaXRlVUludDMyQkUodGhpcy5wYXJlbnRGaW5nZXJwcmludCwgNSk7XG4gICAgICAgICAgICAvLyA0IGJ5dGVzOiBjaGlsZCBudW1iZXIuIFRoaXMgaXMgdGhlIG51bWJlciBpIGluIHhpID0geHBhci9pLCB3aXRoIHhpIHRoZSBrZXkgYmVpbmcgc2VyaWFsaXplZC5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgZW5jb2RlZCBpbiBiaWcgZW5kaWFuLiAoMHgwMDAwMDAwMCBpZiBtYXN0ZXIga2V5KVxuICAgICAgICAgICAgYnVmZmVyLndyaXRlVUludDMyQkUodGhpcy5pbmRleCwgOSk7XG4gICAgICAgICAgICAvLyAzMiBieXRlczogdGhlIGNoYWluIGNvZGVcbiAgICAgICAgICAgIHRoaXMuY2hhaW5Db2RlLmNvcHkoYnVmZmVyLCAxMyk7XG4gICAgICAgICAgICAvLyAzMyBieXRlczogdGhlIHB1YmxpYyBrZXkgb3IgcHJpdmF0ZSBrZXkgZGF0YVxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTmV1dGVyZWQoKSkge1xuICAgICAgICAgICAgICAgIC8vIDB4MDAgKyBrIGZvciBwcml2YXRlIGtleXNcbiAgICAgICAgICAgICAgICBidWZmZXIud3JpdGVVSW50OCgwLCA0NSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcml2YXRlS2V5LmNvcHkoYnVmZmVyLCA0Nik7XG4gICAgICAgICAgICAgICAgLy8gMzMgYnl0ZXM6IHRoZSBwdWJsaWMga2V5XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBYOS42MiBlbmNvZGluZyBmb3IgcHVibGljIGtleXNcbiAgICAgICAgICAgICAgICB0aGlzLnB1YmxpY0tleS5jb3B5KGJ1ZmZlciwgNDUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJzNThjaGVjay5lbmNvZGUoYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0b1dJRigpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wcml2YXRlS2V5KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICAgICAgICAgIHJldHVybiB3aWYuZW5jb2RlKHRoaXMubmV0d29yay53aWYsIHRoaXMucHJpdmF0ZUtleSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDAzMi5tZWRpYXdpa2kjY2hpbGQta2V5LWRlcml2YXRpb24tY2tkLWZ1bmN0aW9uc1xuICAgICAgICBkZXJpdmUoaW5kZXgpIHtcbiAgICAgICAgICAgIHR5cGVmb3JjZSh0eXBlZm9yY2UuVUludDMyLCBpbmRleCk7XG4gICAgICAgICAgICBjb25zdCBpc0hhcmRlbmVkID0gaW5kZXggPj0gSElHSEVTVF9CSVQ7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDM3KTtcbiAgICAgICAgICAgIC8vIEhhcmRlbmVkIGNoaWxkXG4gICAgICAgICAgICBpZiAoaXNIYXJkZW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTmV1dGVyZWQoKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWlzc2luZyBwcml2YXRlIGtleSBmb3IgaGFyZGVuZWQgY2hpbGQga2V5Jyk7XG4gICAgICAgICAgICAgICAgLy8gZGF0YSA9IDB4MDAgfHwgc2VyMjU2KGtwYXIpIHx8IHNlcjMyKGluZGV4KVxuICAgICAgICAgICAgICAgIGRhdGFbMF0gPSAweDAwO1xuICAgICAgICAgICAgICAgIHRoaXMucHJpdmF0ZUtleS5jb3B5KGRhdGEsIDEpO1xuICAgICAgICAgICAgICAgIGRhdGEud3JpdGVVSW50MzJCRShpbmRleCwgMzMpO1xuICAgICAgICAgICAgICAgIC8vIE5vcm1hbCBjaGlsZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGF0YSA9IHNlclAocG9pbnQoa3BhcikpIHx8IHNlcjMyKGluZGV4KVxuICAgICAgICAgICAgICAgIC8vICAgICAgPSBzZXJQKEtwYXIpIHx8IHNlcjMyKGluZGV4KVxuICAgICAgICAgICAgICAgIHRoaXMucHVibGljS2V5LmNvcHkoZGF0YSwgMCk7XG4gICAgICAgICAgICAgICAgZGF0YS53cml0ZVVJbnQzMkJFKGluZGV4LCAzMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBJID0gY3J5cHRvLmhtYWNTSEE1MTIodGhpcy5jaGFpbkNvZGUsIGRhdGEpO1xuICAgICAgICAgICAgY29uc3QgSUwgPSBJLnNsaWNlKDAsIDMyKTtcbiAgICAgICAgICAgIGNvbnN0IElSID0gSS5zbGljZSgzMik7XG4gICAgICAgICAgICAvLyBpZiBwYXJzZTI1NihJTCkgPj0gbiwgcHJvY2VlZCB3aXRoIHRoZSBuZXh0IHZhbHVlIGZvciBpXG4gICAgICAgICAgICBpZiAoIWVjYy5pc1ByaXZhdGUoSUwpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlcml2ZShpbmRleCArIDEpO1xuICAgICAgICAgICAgLy8gUHJpdmF0ZSBwYXJlbnQga2V5IC0+IHByaXZhdGUgY2hpbGQga2V5XG4gICAgICAgICAgICBsZXQgaGQ7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNOZXV0ZXJlZCgpKSB7XG4gICAgICAgICAgICAgICAgLy8ga2kgPSBwYXJzZTI1NihJTCkgKyBrcGFyIChtb2QgbilcbiAgICAgICAgICAgICAgICBjb25zdCBraSA9IEJ1ZmZlci5mcm9tKGVjYy5wcml2YXRlQWRkKHRoaXMucHJpdmF0ZUtleSwgSUwpKTtcbiAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIGtpID09IDAsIHByb2NlZWQgd2l0aCB0aGUgbmV4dCB2YWx1ZSBmb3IgaVxuICAgICAgICAgICAgICAgIGlmIChraSA9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXJpdmUoaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBoZCA9IGZyb21Qcml2YXRlS2V5TG9jYWwoa2ksIElSLCB0aGlzLm5ldHdvcmssIHRoaXMuZGVwdGggKyAxLCBpbmRleCwgdGhpcy5maW5nZXJwcmludC5yZWFkVUludDMyQkUoMCkpO1xuICAgICAgICAgICAgICAgIC8vIFB1YmxpYyBwYXJlbnQga2V5IC0+IHB1YmxpYyBjaGlsZCBrZXlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEtpID0gcG9pbnQocGFyc2UyNTYoSUwpKSArIEtwYXJcbiAgICAgICAgICAgICAgICAvLyAgICA9IEcqSUwgKyBLcGFyXG4gICAgICAgICAgICAgICAgY29uc3QgS2kgPSBCdWZmZXIuZnJvbShlY2MucG9pbnRBZGRTY2FsYXIodGhpcy5wdWJsaWNLZXksIElMLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBLaSBpcyB0aGUgcG9pbnQgYXQgaW5maW5pdHksIHByb2NlZWQgd2l0aCB0aGUgbmV4dCB2YWx1ZSBmb3IgaVxuICAgICAgICAgICAgICAgIGlmIChLaSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVyaXZlKGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgaGQgPSBmcm9tUHVibGljS2V5TG9jYWwoS2ksIElSLCB0aGlzLm5ldHdvcmssIHRoaXMuZGVwdGggKyAxLCBpbmRleCwgdGhpcy5maW5nZXJwcmludC5yZWFkVUludDMyQkUoMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhkO1xuICAgICAgICB9XG4gICAgICAgIGRlcml2ZUhhcmRlbmVkKGluZGV4KSB7XG4gICAgICAgICAgICB0eXBlZm9yY2UoVUludDMxLCBpbmRleCk7XG4gICAgICAgICAgICAvLyBPbmx5IGRlcml2ZXMgaGFyZGVuZWQgcHJpdmF0ZSBrZXlzIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlcml2ZShpbmRleCArIEhJR0hFU1RfQklUKTtcbiAgICAgICAgfVxuICAgICAgICBkZXJpdmVQYXRoKHBhdGgpIHtcbiAgICAgICAgICAgIHR5cGVmb3JjZShCSVAzMlBhdGgsIHBhdGgpO1xuICAgICAgICAgICAgbGV0IHNwbGl0UGF0aCA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGlmIChzcGxpdFBhdGhbMF0gPT09ICdtJykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudEZpbmdlcnByaW50KVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBtYXN0ZXIsIGdvdCBjaGlsZCcpO1xuICAgICAgICAgICAgICAgIHNwbGl0UGF0aCA9IHNwbGl0UGF0aC5zbGljZSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzcGxpdFBhdGgucmVkdWNlKChwcmV2SGQsIGluZGV4U3RyKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4O1xuICAgICAgICAgICAgICAgIGlmIChpbmRleFN0ci5zbGljZSgtMSkgPT09IGAnYCkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHBhcnNlSW50KGluZGV4U3RyLnNsaWNlKDAsIC0xKSwgMTApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldkhkLmRlcml2ZUhhcmRlbmVkKGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcGFyc2VJbnQoaW5kZXhTdHIsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZIZC5kZXJpdmUoaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHR3ZWFrKHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByaXZhdGVLZXkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHdlYWtGcm9tUHJpdmF0ZUtleSh0KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnR3ZWFrRnJvbVB1YmxpY0tleSh0KTtcbiAgICAgICAgfVxuICAgICAgICB0d2Vha0Zyb21QdWJsaWNLZXkodCkge1xuICAgICAgICAgICAgY29uc3QgeE9ubHlQdWJLZXkgPSB0b1hPbmx5KHRoaXMucHVibGljS2V5KTtcbiAgICAgICAgICAgIGlmICghZWNjLnhPbmx5UG9pbnRBZGRUd2VhaylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3hPbmx5UG9pbnRBZGRUd2VhayBub3Qgc3VwcG9ydGVkIGJ5IGVjYyBsaWJyYXJ5Jyk7XG4gICAgICAgICAgICBjb25zdCB0d2Vha2VkUHVibGljS2V5ID0gZWNjLnhPbmx5UG9pbnRBZGRUd2Vhayh4T25seVB1YktleSwgdCk7XG4gICAgICAgICAgICBpZiAoIXR3ZWFrZWRQdWJsaWNLZXkgfHwgdHdlYWtlZFB1YmxpY0tleS54T25seVB1YmtleSA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB0d2VhayBwdWJsaWMga2V5IScpO1xuICAgICAgICAgICAgY29uc3QgcGFyaXR5Qnl0ZSA9IEJ1ZmZlci5mcm9tKFtcbiAgICAgICAgICAgICAgICB0d2Vha2VkUHVibGljS2V5LnBhcml0eSA9PT0gMCA/IDB4MDIgOiAweDAzLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICBjb25zdCB0d2Vha2VkUHVibGljS2V5Q29tcHJlc2VkID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICAgICAgICAgICAgcGFyaXR5Qnl0ZSxcbiAgICAgICAgICAgICAgICB0d2Vha2VkUHVibGljS2V5LnhPbmx5UHVia2V5LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJpcDMyU2lnbmVyKHVuZGVmaW5lZCwgdHdlYWtlZFB1YmxpY0tleUNvbXByZXNlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdHdlYWtGcm9tUHJpdmF0ZUtleSh0KSB7XG4gICAgICAgICAgICBjb25zdCBoYXNPZGRZID0gdGhpcy5wdWJsaWNLZXlbMF0gPT09IDMgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5wdWJsaWNLZXlbMF0gPT09IDQgJiYgKHRoaXMucHVibGljS2V5WzY0XSAmIDEpID09PSAxKTtcbiAgICAgICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaGFzT2RkWSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJpdmF0ZUtleTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZWNjLnByaXZhdGVOZWdhdGUpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJpdmF0ZU5lZ2F0ZSBub3Qgc3VwcG9ydGVkIGJ5IGVjYyBsaWJyYXJ5Jyk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWNjLnByaXZhdGVOZWdhdGUodGhpcy5wcml2YXRlS2V5KTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICBjb25zdCB0d2Vha2VkUHJpdmF0ZUtleSA9IGVjYy5wcml2YXRlQWRkKHByaXZhdGVLZXksIHQpO1xuICAgICAgICAgICAgaWYgKCF0d2Vha2VkUHJpdmF0ZUtleSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdHdlYWtlZCBwcml2YXRlIGtleSEnKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmlwMzJTaWduZXIoQnVmZmVyLmZyb20odHdlYWtlZFByaXZhdGVLZXkpLCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZyb21CYXNlNTgoaW5TdHJpbmcsIG5ldHdvcmspIHtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYnM1OGNoZWNrLmRlY29kZShpblN0cmluZyk7XG4gICAgICAgIGlmIChidWZmZXIubGVuZ3RoICE9PSA3OClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYnVmZmVyIGxlbmd0aCcpO1xuICAgICAgICBuZXR3b3JrID0gbmV0d29yayB8fCBCSVRDT0lOO1xuICAgICAgICAvLyA0IGJ5dGVzOiB2ZXJzaW9uIGJ5dGVzXG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBidWZmZXIucmVhZFVJbnQzMkJFKDApO1xuICAgICAgICBpZiAodmVyc2lvbiAhPT0gbmV0d29yay5iaXAzMi5wcml2YXRlICYmIHZlcnNpb24gIT09IG5ldHdvcmsuYmlwMzIucHVibGljKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBuZXR3b3JrIHZlcnNpb24nKTtcbiAgICAgICAgLy8gMSBieXRlOiBkZXB0aDogMHgwMCBmb3IgbWFzdGVyIG5vZGVzLCAweDAxIGZvciBsZXZlbC0xIGRlc2NlbmRhbnRzLCAuLi5cbiAgICAgICAgY29uc3QgZGVwdGggPSBidWZmZXJbNF07XG4gICAgICAgIC8vIDQgYnl0ZXM6IHRoZSBmaW5nZXJwcmludCBvZiB0aGUgcGFyZW50J3Mga2V5ICgweDAwMDAwMDAwIGlmIG1hc3RlciBrZXkpXG4gICAgICAgIGNvbnN0IHBhcmVudEZpbmdlcnByaW50ID0gYnVmZmVyLnJlYWRVSW50MzJCRSg1KTtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50RmluZ2VycHJpbnQgIT09IDB4MDAwMDAwMDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBwYXJlbnQgZmluZ2VycHJpbnQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyA0IGJ5dGVzOiBjaGlsZCBudW1iZXIuIFRoaXMgaXMgdGhlIG51bWJlciBpIGluIHhpID0geHBhci9pLCB3aXRoIHhpIHRoZSBrZXkgYmVpbmcgc2VyaWFsaXplZC5cbiAgICAgICAgLy8gVGhpcyBpcyBlbmNvZGVkIGluIE1TQiBvcmRlci4gKDB4MDAwMDAwMDAgaWYgbWFzdGVyIGtleSlcbiAgICAgICAgY29uc3QgaW5kZXggPSBidWZmZXIucmVhZFVJbnQzMkJFKDkpO1xuICAgICAgICBpZiAoZGVwdGggPT09IDAgJiYgaW5kZXggIT09IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgICAgIC8vIDMyIGJ5dGVzOiB0aGUgY2hhaW4gY29kZVxuICAgICAgICBjb25zdCBjaGFpbkNvZGUgPSBidWZmZXIuc2xpY2UoMTMsIDQ1KTtcbiAgICAgICAgbGV0IGhkO1xuICAgICAgICAvLyAzMyBieXRlczogcHJpdmF0ZSBrZXkgZGF0YSAoMHgwMCArIGspXG4gICAgICAgIGlmICh2ZXJzaW9uID09PSBuZXR3b3JrLmJpcDMyLnByaXZhdGUpIHtcbiAgICAgICAgICAgIGlmIChidWZmZXIucmVhZFVJbnQ4KDQ1KSAhPT0gMHgwMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHByaXZhdGUga2V5Jyk7XG4gICAgICAgICAgICBjb25zdCBrID0gYnVmZmVyLnNsaWNlKDQ2LCA3OCk7XG4gICAgICAgICAgICBoZCA9IGZyb21Qcml2YXRlS2V5TG9jYWwoaywgY2hhaW5Db2RlLCBuZXR3b3JrLCBkZXB0aCwgaW5kZXgsIHBhcmVudEZpbmdlcnByaW50KTtcbiAgICAgICAgICAgIC8vIDMzIGJ5dGVzOiBwdWJsaWMga2V5IGRhdGEgKDB4MDIgKyBYIG9yIDB4MDMgKyBYKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgWCA9IGJ1ZmZlci5zbGljZSg0NSwgNzgpO1xuICAgICAgICAgICAgaGQgPSBmcm9tUHVibGljS2V5TG9jYWwoWCwgY2hhaW5Db2RlLCBuZXR3b3JrLCBkZXB0aCwgaW5kZXgsIHBhcmVudEZpbmdlcnByaW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZyb21Qcml2YXRlS2V5KHByaXZhdGVLZXksIGNoYWluQ29kZSwgbmV0d29yaykge1xuICAgICAgICByZXR1cm4gZnJvbVByaXZhdGVLZXlMb2NhbChwcml2YXRlS2V5LCBjaGFpbkNvZGUsIG5ldHdvcmspO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmcm9tUHJpdmF0ZUtleUxvY2FsKHByaXZhdGVLZXksIGNoYWluQ29kZSwgbmV0d29yaywgZGVwdGgsIGluZGV4LCBwYXJlbnRGaW5nZXJwcmludCkge1xuICAgICAgICB0eXBlZm9yY2Uoe1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogVUlOVDI1Nl9UWVBFLFxuICAgICAgICAgICAgY2hhaW5Db2RlOiBVSU5UMjU2X1RZUEUsXG4gICAgICAgIH0sIHsgcHJpdmF0ZUtleSwgY2hhaW5Db2RlIH0pO1xuICAgICAgICBuZXR3b3JrID0gbmV0d29yayB8fCBCSVRDT0lOO1xuICAgICAgICBpZiAoIWVjYy5pc1ByaXZhdGUocHJpdmF0ZUtleSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcml2YXRlIGtleSBub3QgaW4gcmFuZ2UgWzEsIG4pJyk7XG4gICAgICAgIHJldHVybiBuZXcgQklQMzIocHJpdmF0ZUtleSwgdW5kZWZpbmVkLCBjaGFpbkNvZGUsIG5ldHdvcmssIGRlcHRoLCBpbmRleCwgcGFyZW50RmluZ2VycHJpbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmcm9tUHVibGljS2V5KHB1YmxpY0tleSwgY2hhaW5Db2RlLCBuZXR3b3JrKSB7XG4gICAgICAgIHJldHVybiBmcm9tUHVibGljS2V5TG9jYWwocHVibGljS2V5LCBjaGFpbkNvZGUsIG5ldHdvcmspO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmcm9tUHVibGljS2V5TG9jYWwocHVibGljS2V5LCBjaGFpbkNvZGUsIG5ldHdvcmssIGRlcHRoLCBpbmRleCwgcGFyZW50RmluZ2VycHJpbnQpIHtcbiAgICAgICAgdHlwZWZvcmNlKHtcbiAgICAgICAgICAgIHB1YmxpY0tleTogdHlwZWZvcmNlLkJ1ZmZlck4oMzMpLFxuICAgICAgICAgICAgY2hhaW5Db2RlOiBVSU5UMjU2X1RZUEUsXG4gICAgICAgIH0sIHsgcHVibGljS2V5LCBjaGFpbkNvZGUgfSk7XG4gICAgICAgIG5ldHdvcmsgPSBuZXR3b3JrIHx8IEJJVENPSU47XG4gICAgICAgIC8vIHZlcmlmeSB0aGUgWCBjb29yZGluYXRlIGlzIGEgcG9pbnQgb24gdGhlIGN1cnZlXG4gICAgICAgIGlmICghZWNjLmlzUG9pbnQocHVibGljS2V5KSlcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BvaW50IGlzIG5vdCBvbiB0aGUgY3VydmUnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBCSVAzMih1bmRlZmluZWQsIHB1YmxpY0tleSwgY2hhaW5Db2RlLCBuZXR3b3JrLCBkZXB0aCwgaW5kZXgsIHBhcmVudEZpbmdlcnByaW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZnJvbVNlZWQoc2VlZCwgbmV0d29yaykge1xuICAgICAgICB0eXBlZm9yY2UodHlwZWZvcmNlLkJ1ZmZlciwgc2VlZCk7XG4gICAgICAgIGlmIChzZWVkLmxlbmd0aCA8IDE2KVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2VlZCBzaG91bGQgYmUgYXQgbGVhc3QgMTI4IGJpdHMnKTtcbiAgICAgICAgaWYgKHNlZWQubGVuZ3RoID4gNjQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTZWVkIHNob3VsZCBiZSBhdCBtb3N0IDUxMiBiaXRzJyk7XG4gICAgICAgIG5ldHdvcmsgPSBuZXR3b3JrIHx8IEJJVENPSU47XG4gICAgICAgIGNvbnN0IEkgPSBjcnlwdG8uaG1hY1NIQTUxMihCdWZmZXIuZnJvbSgnQml0Y29pbiBzZWVkJywgJ3V0ZjgnKSwgc2VlZCk7XG4gICAgICAgIGNvbnN0IElMID0gSS5zbGljZSgwLCAzMik7XG4gICAgICAgIGNvbnN0IElSID0gSS5zbGljZSgzMik7XG4gICAgICAgIHJldHVybiBmcm9tUHJpdmF0ZUtleShJTCwgSVIsIG5ldHdvcmspO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBmcm9tU2VlZCxcbiAgICAgICAgZnJvbUJhc2U1OCxcbiAgICAgICAgZnJvbVB1YmxpY0tleSxcbiAgICAgICAgZnJvbVByaXZhdGVLZXksXG4gICAgfTtcbn1cbmV4cG9ydHMuQklQMzJGYWN0b3J5ID0gQklQMzJGYWN0b3J5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bip32/src/bip32.js\n\n}")},"./node_modules/bip32/src/crypto.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer;\n\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nexports.hmacSHA512 = exports.hash160 = void 0;\nconst hmac_1 = __webpack_require__(/*! @noble/hashes/hmac */ "./node_modules/@noble/hashes/hmac.js");\nconst ripemd160_1 = __webpack_require__(/*! @noble/hashes/ripemd160 */ "./node_modules/@noble/hashes/legacy.js");\nconst sha256_1 = __webpack_require__(/*! @noble/hashes/sha256 */ "./node_modules/@noble/hashes/sha2.js");\nconst sha512_1 = __webpack_require__(/*! @noble/hashes/sha512 */ "./node_modules/@noble/hashes/sha2.js");\nfunction hash160(buffer) {\n const sha256Hash = (0, sha256_1.sha256)(Uint8Array.from(buffer));\n return Buffer.from((0, ripemd160_1.ripemd160)(sha256Hash));\n}\nexports.hash160 = hash160;\nfunction hmacSHA512(key, data) {\n return Buffer.from((0, hmac_1.hmac)(sha512_1.sha512, key, data));\n}\nexports.hmacSHA512 = hmacSHA512;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMzIvc3JjL2NyeXB0by5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsa0JBQWtCLEdBQUcsZUFBZTtBQUNwQyxlQUFlLG1CQUFPLENBQUMsZ0VBQW9CO0FBQzNDLG9CQUFvQixtQkFBTyxDQUFDLHVFQUF5QjtBQUNyRCxpQkFBaUIsbUJBQU8sQ0FBQyxrRUFBc0I7QUFDL0MsaUJBQWlCLG1CQUFPLENBQUMsa0VBQXNCO0FBQy9DO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQSxrQkFBa0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXAzMi9zcmMvY3J5cHRvLmpzPzk2MWYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmhtYWNTSEE1MTIgPSBleHBvcnRzLmhhc2gxNjAgPSB2b2lkIDA7XG5jb25zdCBobWFjXzEgPSByZXF1aXJlKFwiQG5vYmxlL2hhc2hlcy9obWFjXCIpO1xuY29uc3QgcmlwZW1kMTYwXzEgPSByZXF1aXJlKFwiQG5vYmxlL2hhc2hlcy9yaXBlbWQxNjBcIik7XG5jb25zdCBzaGEyNTZfMSA9IHJlcXVpcmUoXCJAbm9ibGUvaGFzaGVzL3NoYTI1NlwiKTtcbmNvbnN0IHNoYTUxMl8xID0gcmVxdWlyZShcIkBub2JsZS9oYXNoZXMvc2hhNTEyXCIpO1xuZnVuY3Rpb24gaGFzaDE2MChidWZmZXIpIHtcbiAgICBjb25zdCBzaGEyNTZIYXNoID0gKDAsIHNoYTI1Nl8xLnNoYTI1NikoVWludDhBcnJheS5mcm9tKGJ1ZmZlcikpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSgoMCwgcmlwZW1kMTYwXzEucmlwZW1kMTYwKShzaGEyNTZIYXNoKSk7XG59XG5leHBvcnRzLmhhc2gxNjAgPSBoYXNoMTYwO1xuZnVuY3Rpb24gaG1hY1NIQTUxMihrZXksIGRhdGEpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oKDAsIGhtYWNfMS5obWFjKShzaGE1MTJfMS5zaGE1MTIsIGtleSwgZGF0YSkpO1xufVxuZXhwb3J0cy5obWFjU0hBNTEyID0gaG1hY1NIQTUxMjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bip32/src/crypto.js\n\n}')},"./node_modules/bip32/src/index.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nexports.BIP32Factory = exports["default"] = void 0;\nvar bip32_1 = __webpack_require__(/*! ./bip32 */ "./node_modules/bip32/src/bip32.js");\nObject.defineProperty(exports, "default", ({ enumerable: true, get: function () { return bip32_1.BIP32Factory; } }));\nObject.defineProperty(exports, "BIP32Factory", ({ enumerable: true, get: function () { return bip32_1.BIP32Factory; } }));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMzIvc3JjL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELG9CQUFvQixHQUFHLGtCQUFlO0FBQ3RDLGNBQWMsbUJBQU8sQ0FBQyxrREFBUztBQUMvQiwyQ0FBMEMsRUFBRSxxQ0FBcUMsZ0NBQWdDLEVBQUM7QUFDbEgsZ0RBQStDLEVBQUUscUNBQXFDLGdDQUFnQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYmlwMzIvc3JjL2luZGV4LmpzP2IwNzUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJJUDMyRmFjdG9yeSA9IGV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBiaXAzMl8xID0gcmVxdWlyZShcIi4vYmlwMzJcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBiaXAzMl8xLkJJUDMyRmFjdG9yeTsgfSB9KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJJUDMyRmFjdG9yeVwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gYmlwMzJfMS5CSVAzMkZhY3Rvcnk7IH0gfSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bip32/src/index.js\n\n}')},"./node_modules/bip32/src/testecc.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.testEcc = void 0;\nconst h = (hex) => Buffer.from(hex, 'hex');\nfunction testEcc(ecc) {\n assert(ecc.isPoint(h('0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798')));\n assert(!ecc.isPoint(h('030000000000000000000000000000000000000000000000000000000000000005')));\n assert(ecc.isPrivate(h('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798')));\n // order - 1\n assert(ecc.isPrivate(h('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140')));\n // 0\n assert(!ecc.isPrivate(h('0000000000000000000000000000000000000000000000000000000000000000')));\n // order\n assert(!ecc.isPrivate(h('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141')));\n // order + 1\n assert(!ecc.isPrivate(h('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142')));\n assert(Buffer.from(ecc.pointFromScalar(h('b1121e4088a66a28f5b6b0f5844943ecd9f610196d7bb83b25214b60452c09af'))).equals(h('02b07ba9dca9523b7ef4bd97703d43d20399eb698e194704791a25ce77a400df99')));\n if (ecc.xOnlyPointAddTweak) {\n assert(ecc.xOnlyPointAddTweak(h('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'), h('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140')) === null);\n let xOnlyRes = ecc.xOnlyPointAddTweak(h('1617d38ed8d8657da4d4761e8057bc396ea9e4b9d29776d4be096016dbd2509b'), h('a8397a935f0dfceba6ba9618f6451ef4d80637abf4e6af2669fbc9de6a8fd2ac'));\n assert(Buffer.from(xOnlyRes.xOnlyPubkey).equals(h('e478f99dab91052ab39a33ea35fd5e6e4933f4d28023cd597c9a1f6760346adf')) && xOnlyRes.parity === 1);\n xOnlyRes = ecc.xOnlyPointAddTweak(h('2c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e668680991'), h('823c3cd2142744b075a87eade7e1b8678ba308d566226a0056ca2b7a76f86b47'));\n }\n assert(Buffer.from(ecc.pointAddScalar(h('0379be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'), h('0000000000000000000000000000000000000000000000000000000000000003'))).equals(h('02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5')));\n assert(Buffer.from(ecc.privateAdd(h('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413e'), h('0000000000000000000000000000000000000000000000000000000000000002'))).equals(h('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140')));\n if (ecc.privateNegate) {\n assert(Buffer.from(ecc.privateNegate(h('0000000000000000000000000000000000000000000000000000000000000001'))).equals(h('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140')));\n assert(Buffer.from(ecc.privateNegate(h('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413e'))).equals(h('0000000000000000000000000000000000000000000000000000000000000003')));\n assert(Buffer.from(ecc.privateNegate(h('b1121e4088a66a28f5b6b0f5844943ecd9f610196d7bb83b25214b60452c09af'))).equals(h('4eede1bf775995d70a494f0a7bb6bc11e0b8cccd41cce8009ab1132c8b0a3792')));\n }\n assert(Buffer.from(ecc.sign(h('5e9f0a0d593efdcf78ac923bc3313e4e7d408d574354ee2b3288c0da9fbba6ed'), h('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140'))).equals(h('54c4a33c6423d689378f160a7ff8b61330444abb58fb470f96ea16d99d4a2fed07082304410efa6b2943111b6a4e0aaa7b7db55a07e9861d1fb3cb1f421044a5')));\n assert(ecc.verify(h('5e9f0a0d593efdcf78ac923bc3313e4e7d408d574354ee2b3288c0da9fbba6ed'), h('0379be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'), h('54c4a33c6423d689378f160a7ff8b61330444abb58fb470f96ea16d99d4a2fed07082304410efa6b2943111b6a4e0aaa7b7db55a07e9861d1fb3cb1f421044a5')));\n if (ecc.signSchnorr) {\n assert(Buffer.from(ecc.signSchnorr(h('7e2d58d8b3bcdf1abadec7829054f90dda9805aab56c77333024b9d0a508b75c'), h('c90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b14e5c9'), h('c87aa53824b4d7ae2eb035a2b5bbbccc080e76cdc6d1692c4b0b62d798e6d906'))).equals(h('5831aaeed7b44bb74e5eab94ba9d4294c49bcf2a60728d8b4c200f50dd313c1bab745879a5ad954a72c45a91c3a51d3c7adea98d82f8481e0e1e03674a6f3fb7')));\n }\n if (ecc.verifySchnorr) {\n assert(ecc.verifySchnorr(h('7e2d58d8b3bcdf1abadec7829054f90dda9805aab56c77333024b9d0a508b75c'), h('dd308afec5777e13121fa72b9cc1b7cc0139715309b086c960e18fd969774eb8'), h('5831aaeed7b44bb74e5eab94ba9d4294c49bcf2a60728d8b4c200f50dd313c1bab745879a5ad954a72c45a91c3a51d3c7adea98d82f8481e0e1e03674a6f3fb7')));\n }\n}\nexports.testEcc = testEcc;\nfunction assert(bool) {\n if (!bool)\n throw new Error('ecc library invalid');\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmlwMzIvc3JjL3Rlc3RlY2MuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGVBQWU7QUFDZixtQkFBbUIsTUFBTTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQTtBQUNBO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsV0FBVyxNQUFNO0FBQ2pCO0FBQ0EsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsTUFBTTtBQUNyQixlQUFlLE1BQU07QUFDckI7QUFDQSxXQUFXLE1BQU07QUFDakI7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYmlwMzIvc3JjL3Rlc3RlY2MuanM/OTVjYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGVzdEVjYyA9IHZvaWQgMDtcbmNvbnN0IGggPSAoaGV4KSA9PiBCdWZmZXIuZnJvbShoZXgsICdoZXgnKTtcbmZ1bmN0aW9uIHRlc3RFY2MoZWNjKSB7XG4gICAgYXNzZXJ0KGVjYy5pc1BvaW50KGgoJzAyNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCcpKSk7XG4gICAgYXNzZXJ0KCFlY2MuaXNQb2ludChoKCcwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnKSkpO1xuICAgIGFzc2VydChlY2MuaXNQcml2YXRlKGgoJzc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgnKSkpO1xuICAgIC8vIG9yZGVyIC0gMVxuICAgIGFzc2VydChlY2MuaXNQcml2YXRlKGgoJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYmFhZWRjZTZhZjQ4YTAzYmJmZDI1ZThjZDAzNjQxNDAnKSkpO1xuICAgIC8vIDBcbiAgICBhc3NlcnQoIWVjYy5pc1ByaXZhdGUoaCgnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcpKSk7XG4gICAgLy8gb3JkZXJcbiAgICBhc3NlcnQoIWVjYy5pc1ByaXZhdGUoaCgnZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmViYWFlZGNlNmFmNDhhMDNiYmZkMjVlOGNkMDM2NDE0MScpKSk7XG4gICAgLy8gb3JkZXIgKyAxXG4gICAgYXNzZXJ0KCFlY2MuaXNQcml2YXRlKGgoJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYmFhZWRjZTZhZjQ4YTAzYmJmZDI1ZThjZDAzNjQxNDInKSkpO1xuICAgIGFzc2VydChCdWZmZXIuZnJvbShlY2MucG9pbnRGcm9tU2NhbGFyKGgoJ2IxMTIxZTQwODhhNjZhMjhmNWI2YjBmNTg0NDk0M2VjZDlmNjEwMTk2ZDdiYjgzYjI1MjE0YjYwNDUyYzA5YWYnKSkpLmVxdWFscyhoKCcwMmIwN2JhOWRjYTk1MjNiN2VmNGJkOTc3MDNkNDNkMjAzOTllYjY5OGUxOTQ3MDQ3OTFhMjVjZTc3YTQwMGRmOTknKSkpO1xuICAgIGlmIChlY2MueE9ubHlQb2ludEFkZFR3ZWFrKSB7XG4gICAgICAgIGFzc2VydChlY2MueE9ubHlQb2ludEFkZFR3ZWFrKGgoJzc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgnKSwgaCgnZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmViYWFlZGNlNmFmNDhhMDNiYmZkMjVlOGNkMDM2NDE0MCcpKSA9PT0gbnVsbCk7XG4gICAgICAgIGxldCB4T25seVJlcyA9IGVjYy54T25seVBvaW50QWRkVHdlYWsoaCgnMTYxN2QzOGVkOGQ4NjU3ZGE0ZDQ3NjFlODA1N2JjMzk2ZWE5ZTRiOWQyOTc3NmQ0YmUwOTYwMTZkYmQyNTA5YicpLCBoKCdhODM5N2E5MzVmMGRmY2ViYTZiYTk2MThmNjQ1MWVmNGQ4MDYzN2FiZjRlNmFmMjY2OWZiYzlkZTZhOGZkMmFjJykpO1xuICAgICAgICBhc3NlcnQoQnVmZmVyLmZyb20oeE9ubHlSZXMueE9ubHlQdWJrZXkpLmVxdWFscyhoKCdlNDc4Zjk5ZGFiOTEwNTJhYjM5YTMzZWEzNWZkNWU2ZTQ5MzNmNGQyODAyM2NkNTk3YzlhMWY2NzYwMzQ2YWRmJykpICYmIHhPbmx5UmVzLnBhcml0eSA9PT0gMSk7XG4gICAgICAgIHhPbmx5UmVzID0gZWNjLnhPbmx5UG9pbnRBZGRUd2VhayhoKCcyYzBiN2NmOTUzMjRhMDdkMDUzOThiMjQwMTc0ZGMwYzJiZTQ0NGQ5NmIxNTlhYTZjN2Y3YjFlNjY4NjgwOTkxJyksIGgoJzgyM2MzY2QyMTQyNzQ0YjA3NWE4N2VhZGU3ZTFiODY3OGJhMzA4ZDU2NjIyNmEwMDU2Y2EyYjdhNzZmODZiNDcnKSk7XG4gICAgfVxuICAgIGFzc2VydChCdWZmZXIuZnJvbShlY2MucG9pbnRBZGRTY2FsYXIoaCgnMDM3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4JyksIGgoJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMnKSkpLmVxdWFscyhoKCcwMmM2MDQ3Zjk0NDFlZDdkNmQzMDQ1NDA2ZTk1YzA3Y2Q4NWM3NzhlNGI4Y2VmM2NhN2FiYWMwOWI5NWM3MDllZTUnKSkpO1xuICAgIGFzc2VydChCdWZmZXIuZnJvbShlY2MucHJpdmF0ZUFkZChoKCdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTNlJyksIGgoJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDInKSkpLmVxdWFscyhoKCdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQwJykpKTtcbiAgICBpZiAoZWNjLnByaXZhdGVOZWdhdGUpIHtcbiAgICAgICAgYXNzZXJ0KEJ1ZmZlci5mcm9tKGVjYy5wcml2YXRlTmVnYXRlKGgoJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnKSkpLmVxdWFscyhoKCdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQwJykpKTtcbiAgICAgICAgYXNzZXJ0KEJ1ZmZlci5mcm9tKGVjYy5wcml2YXRlTmVnYXRlKGgoJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlYmFhZWRjZTZhZjQ4YTAzYmJmZDI1ZThjZDAzNjQxM2UnKSkpLmVxdWFscyhoKCcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzJykpKTtcbiAgICAgICAgYXNzZXJ0KEJ1ZmZlci5mcm9tKGVjYy5wcml2YXRlTmVnYXRlKGgoJ2IxMTIxZTQwODhhNjZhMjhmNWI2YjBmNTg0NDk0M2VjZDlmNjEwMTk2ZDdiYjgzYjI1MjE0YjYwNDUyYzA5YWYnKSkpLmVxdWFscyhoKCc0ZWVkZTFiZjc3NTk5NWQ3MGE0OTRmMGE3YmI2YmMxMWUwYjhjY2NkNDFjY2U4MDA5YWIxMTMyYzhiMGEzNzkyJykpKTtcbiAgICB9XG4gICAgYXNzZXJ0KEJ1ZmZlci5mcm9tKGVjYy5zaWduKGgoJzVlOWYwYTBkNTkzZWZkY2Y3OGFjOTIzYmMzMzEzZTRlN2Q0MDhkNTc0MzU0ZWUyYjMyODhjMGRhOWZiYmE2ZWQnKSwgaCgnZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmViYWFlZGNlNmFmNDhhMDNiYmZkMjVlOGNkMDM2NDE0MCcpKSkuZXF1YWxzKGgoJzU0YzRhMzNjNjQyM2Q2ODkzNzhmMTYwYTdmZjhiNjEzMzA0NDRhYmI1OGZiNDcwZjk2ZWExNmQ5OWQ0YTJmZWQwNzA4MjMwNDQxMGVmYTZiMjk0MzExMWI2YTRlMGFhYTdiN2RiNTVhMDdlOTg2MWQxZmIzY2IxZjQyMTA0NGE1JykpKTtcbiAgICBhc3NlcnQoZWNjLnZlcmlmeShoKCc1ZTlmMGEwZDU5M2VmZGNmNzhhYzkyM2JjMzMxM2U0ZTdkNDA4ZDU3NDM1NGVlMmIzMjg4YzBkYTlmYmJhNmVkJyksIGgoJzAzNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCcpLCBoKCc1NGM0YTMzYzY0MjNkNjg5Mzc4ZjE2MGE3ZmY4YjYxMzMwNDQ0YWJiNThmYjQ3MGY5NmVhMTZkOTlkNGEyZmVkMDcwODIzMDQ0MTBlZmE2YjI5NDMxMTFiNmE0ZTBhYWE3YjdkYjU1YTA3ZTk4NjFkMWZiM2NiMWY0MjEwNDRhNScpKSk7XG4gICAgaWYgKGVjYy5zaWduU2Nobm9ycikge1xuICAgICAgICBhc3NlcnQoQnVmZmVyLmZyb20oZWNjLnNpZ25TY2hub3JyKGgoJzdlMmQ1OGQ4YjNiY2RmMWFiYWRlYzc4MjkwNTRmOTBkZGE5ODA1YWFiNTZjNzczMzMwMjRiOWQwYTUwOGI3NWMnKSwgaCgnYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjE0ZTVjOScpLCBoKCdjODdhYTUzODI0YjRkN2FlMmViMDM1YTJiNWJiYmNjYzA4MGU3NmNkYzZkMTY5MmM0YjBiNjJkNzk4ZTZkOTA2JykpKS5lcXVhbHMoaCgnNTgzMWFhZWVkN2I0NGJiNzRlNWVhYjk0YmE5ZDQyOTRjNDliY2YyYTYwNzI4ZDhiNGMyMDBmNTBkZDMxM2MxYmFiNzQ1ODc5YTVhZDk1NGE3MmM0NWE5MWMzYTUxZDNjN2FkZWE5OGQ4MmY4NDgxZTBlMWUwMzY3NGE2ZjNmYjcnKSkpO1xuICAgIH1cbiAgICBpZiAoZWNjLnZlcmlmeVNjaG5vcnIpIHtcbiAgICAgICAgYXNzZXJ0KGVjYy52ZXJpZnlTY2hub3JyKGgoJzdlMmQ1OGQ4YjNiY2RmMWFiYWRlYzc4MjkwNTRmOTBkZGE5ODA1YWFiNTZjNzczMzMwMjRiOWQwYTUwOGI3NWMnKSwgaCgnZGQzMDhhZmVjNTc3N2UxMzEyMWZhNzJiOWNjMWI3Y2MwMTM5NzE1MzA5YjA4NmM5NjBlMThmZDk2OTc3NGViOCcpLCBoKCc1ODMxYWFlZWQ3YjQ0YmI3NGU1ZWFiOTRiYTlkNDI5NGM0OWJjZjJhNjA3MjhkOGI0YzIwMGY1MGRkMzEzYzFiYWI3NDU4NzlhNWFkOTU0YTcyYzQ1YTkxYzNhNTFkM2M3YWRlYTk4ZDgyZjg0ODFlMGUxZTAzNjc0YTZmM2ZiNycpKSk7XG4gICAgfVxufVxuZXhwb3J0cy50ZXN0RWNjID0gdGVzdEVjYztcbmZ1bmN0aW9uIGFzc2VydChib29sKSB7XG4gICAgaWYgKCFib29sKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VjYyBsaWJyYXJ5IGludmFsaWQnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bip32/src/testecc.js\n\n}")},"./node_modules/bitcoinjs-lib/src/address.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.toOutputScript =\n exports.fromOutputScript =\n exports.toBech32 =\n exports.toBase58Check =\n exports.fromBech32 =\n exports.fromBase58Check =\n void 0;\nconst networks = __webpack_require__(/*! ./networks */ \"./node_modules/bitcoinjs-lib/src/networks.js\");\nconst payments = __webpack_require__(/*! ./payments */ \"./node_modules/bitcoinjs-lib/src/payments/index.js\");\nconst bscript = __webpack_require__(/*! ./script */ \"./node_modules/bitcoinjs-lib/src/script.js\");\nconst types_1 = __webpack_require__(/*! ./types */ \"./node_modules/bitcoinjs-lib/src/types.js\");\nconst bech32_1 = __webpack_require__(/*! bech32 */ \"./node_modules/bech32/dist/index.js\");\nconst bs58check = __webpack_require__(/*! bs58check */ \"./node_modules/bs58check/index.js\");\nconst FUTURE_SEGWIT_MAX_SIZE = 40;\nconst FUTURE_SEGWIT_MIN_SIZE = 2;\nconst FUTURE_SEGWIT_MAX_VERSION = 16;\nconst FUTURE_SEGWIT_MIN_VERSION = 2;\nconst FUTURE_SEGWIT_VERSION_DIFF = 0x50;\nconst FUTURE_SEGWIT_VERSION_WARNING =\n 'WARNING: Sending to a future segwit version address can lead to loss of funds. ' +\n 'End users MUST be warned carefully in the GUI and asked if they wish to proceed ' +\n 'with caution. Wallets should verify the segwit version from the output of fromBech32, ' +\n 'then decide when it is safe to use which version of segwit.';\nfunction _toFutureSegwitAddress(output, network) {\n const data = output.slice(2);\n if (\n data.length < FUTURE_SEGWIT_MIN_SIZE ||\n data.length > FUTURE_SEGWIT_MAX_SIZE\n )\n throw new TypeError('Invalid program length for segwit address');\n const version = output[0] - FUTURE_SEGWIT_VERSION_DIFF;\n if (\n version < FUTURE_SEGWIT_MIN_VERSION ||\n version > FUTURE_SEGWIT_MAX_VERSION\n )\n throw new TypeError('Invalid version for segwit address');\n if (output[1] !== data.length)\n throw new TypeError('Invalid script for segwit address');\n console.warn(FUTURE_SEGWIT_VERSION_WARNING);\n return toBech32(data, version, network.bech32);\n}\n/**\n * decode address with base58 specification, return address version and address hash if valid\n */\nfunction fromBase58Check(address) {\n const payload = Buffer.from(bs58check.decode(address));\n // TODO: 4.0.0, move to \"toOutputScript\"\n if (payload.length < 21) throw new TypeError(address + ' is too short');\n if (payload.length > 21) throw new TypeError(address + ' is too long');\n const version = payload.readUInt8(0);\n const hash = payload.slice(1);\n return { version, hash };\n}\nexports.fromBase58Check = fromBase58Check;\n/**\n * decode address with bech32 specification, return address version、address prefix and address data if valid\n */\nfunction fromBech32(address) {\n let result;\n let version;\n try {\n result = bech32_1.bech32.decode(address);\n } catch (e) {}\n if (result) {\n version = result.words[0];\n if (version !== 0) throw new TypeError(address + ' uses wrong encoding');\n } else {\n result = bech32_1.bech32m.decode(address);\n version = result.words[0];\n if (version === 0) throw new TypeError(address + ' uses wrong encoding');\n }\n const data = bech32_1.bech32.fromWords(result.words.slice(1));\n return {\n version,\n prefix: result.prefix,\n data: Buffer.from(data),\n };\n}\nexports.fromBech32 = fromBech32;\n/**\n * encode address hash to base58 address with version\n */\nfunction toBase58Check(hash, version) {\n (0, types_1.typeforce)(\n (0, types_1.tuple)(types_1.Hash160bit, types_1.UInt8),\n arguments,\n );\n const payload = Buffer.allocUnsafe(21);\n payload.writeUInt8(version, 0);\n hash.copy(payload, 1);\n return bs58check.encode(payload);\n}\nexports.toBase58Check = toBase58Check;\n/**\n * encode address hash to bech32 address with version and prefix\n */\nfunction toBech32(data, version, prefix) {\n const words = bech32_1.bech32.toWords(data);\n words.unshift(version);\n return version === 0\n ? bech32_1.bech32.encode(prefix, words)\n : bech32_1.bech32m.encode(prefix, words);\n}\nexports.toBech32 = toBech32;\n/**\n * decode address from output script with network, return address if matched\n */\nfunction fromOutputScript(output, network) {\n // TODO: Network\n network = network || networks.bitcoin;\n try {\n return payments.p2pkh({ output, network }).address;\n } catch (e) {}\n try {\n return payments.p2sh({ output, network }).address;\n } catch (e) {}\n try {\n return payments.p2wpkh({ output, network }).address;\n } catch (e) {}\n try {\n return payments.p2wsh({ output, network }).address;\n } catch (e) {}\n try {\n return payments.p2tr({ output, network }).address;\n } catch (e) {}\n try {\n return _toFutureSegwitAddress(output, network);\n } catch (e) {}\n throw new Error(bscript.toASM(output) + ' has no matching Address');\n}\nexports.fromOutputScript = fromOutputScript;\n/**\n * encodes address to output script with network, return output script if address matched\n */\nfunction toOutputScript(address, network) {\n network = network || networks.bitcoin;\n let decodeBase58;\n let decodeBech32;\n try {\n decodeBase58 = fromBase58Check(address);\n } catch (e) {}\n if (decodeBase58) {\n if (decodeBase58.version === network.pubKeyHash)\n return payments.p2pkh({ hash: decodeBase58.hash }).output;\n if (decodeBase58.version === network.scriptHash)\n return payments.p2sh({ hash: decodeBase58.hash }).output;\n } else {\n try {\n decodeBech32 = fromBech32(address);\n } catch (e) {}\n if (decodeBech32) {\n if (decodeBech32.prefix !== network.bech32)\n throw new Error(address + ' has an invalid prefix');\n if (decodeBech32.version === 0) {\n if (decodeBech32.data.length === 20)\n return payments.p2wpkh({ hash: decodeBech32.data }).output;\n if (decodeBech32.data.length === 32)\n return payments.p2wsh({ hash: decodeBech32.data }).output;\n } else if (decodeBech32.version === 1) {\n if (decodeBech32.data.length === 32)\n return payments.p2tr({ pubkey: decodeBech32.data }).output;\n } else if (\n decodeBech32.version >= FUTURE_SEGWIT_MIN_VERSION &&\n decodeBech32.version <= FUTURE_SEGWIT_MAX_VERSION &&\n decodeBech32.data.length >= FUTURE_SEGWIT_MIN_SIZE &&\n decodeBech32.data.length <= FUTURE_SEGWIT_MAX_SIZE\n ) {\n console.warn(FUTURE_SEGWIT_VERSION_WARNING);\n return bscript.compile([\n decodeBech32.version + FUTURE_SEGWIT_VERSION_DIFF,\n decodeBech32.data,\n ]);\n }\n }\n }\n throw new Error(address + ' has no matching Script');\n}\nexports.toOutputScript = toOutputScript;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvYWRkcmVzcy5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsc0JBQXNCO0FBQ3RCLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsdUJBQXVCO0FBQ3pCO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsZ0VBQVk7QUFDckMsaUJBQWlCLG1CQUFPLENBQUMsc0VBQVk7QUFDckMsZ0JBQWdCLG1CQUFPLENBQUMsNERBQVU7QUFDbEMsZ0JBQWdCLG1CQUFPLENBQUMsMERBQVM7QUFDakMsaUJBQWlCLG1CQUFPLENBQUMsbURBQVE7QUFDakMsa0JBQWtCLG1CQUFPLENBQUMsb0RBQVc7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixNQUFNO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsTUFBTTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixpQkFBaUI7QUFDN0MsSUFBSTtBQUNKO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QyxJQUFJO0FBQ0o7QUFDQSw2QkFBNkIsaUJBQWlCO0FBQzlDLElBQUk7QUFDSjtBQUNBLDRCQUE0QixpQkFBaUI7QUFDN0MsSUFBSTtBQUNKO0FBQ0EsMkJBQTJCLGlCQUFpQjtBQUM1QyxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsOEJBQThCLHlCQUF5QjtBQUN2RDtBQUNBLDZCQUE2Qix5QkFBeUI7QUFDdEQsSUFBSTtBQUNKO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx5QkFBeUI7QUFDNUQ7QUFDQSxrQ0FBa0MseUJBQXlCO0FBQzNELFFBQVE7QUFDUjtBQUNBLGlDQUFpQywyQkFBMkI7QUFDNUQsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL2FkZHJlc3MuanM/OTRjMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50b091dHB1dFNjcmlwdCA9XG4gIGV4cG9ydHMuZnJvbU91dHB1dFNjcmlwdCA9XG4gIGV4cG9ydHMudG9CZWNoMzIgPVxuICBleHBvcnRzLnRvQmFzZTU4Q2hlY2sgPVxuICBleHBvcnRzLmZyb21CZWNoMzIgPVxuICBleHBvcnRzLmZyb21CYXNlNThDaGVjayA9XG4gICAgdm9pZCAwO1xuY29uc3QgbmV0d29ya3MgPSByZXF1aXJlKCcuL25ldHdvcmtzJyk7XG5jb25zdCBwYXltZW50cyA9IHJlcXVpcmUoJy4vcGF5bWVudHMnKTtcbmNvbnN0IGJzY3JpcHQgPSByZXF1aXJlKCcuL3NjcmlwdCcpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcbmNvbnN0IGJlY2gzMl8xID0gcmVxdWlyZSgnYmVjaDMyJyk7XG5jb25zdCBiczU4Y2hlY2sgPSByZXF1aXJlKCdiczU4Y2hlY2snKTtcbmNvbnN0IEZVVFVSRV9TRUdXSVRfTUFYX1NJWkUgPSA0MDtcbmNvbnN0IEZVVFVSRV9TRUdXSVRfTUlOX1NJWkUgPSAyO1xuY29uc3QgRlVUVVJFX1NFR1dJVF9NQVhfVkVSU0lPTiA9IDE2O1xuY29uc3QgRlVUVVJFX1NFR1dJVF9NSU5fVkVSU0lPTiA9IDI7XG5jb25zdCBGVVRVUkVfU0VHV0lUX1ZFUlNJT05fRElGRiA9IDB4NTA7XG5jb25zdCBGVVRVUkVfU0VHV0lUX1ZFUlNJT05fV0FSTklORyA9XG4gICdXQVJOSU5HOiBTZW5kaW5nIHRvIGEgZnV0dXJlIHNlZ3dpdCB2ZXJzaW9uIGFkZHJlc3MgY2FuIGxlYWQgdG8gbG9zcyBvZiBmdW5kcy4gJyArXG4gICdFbmQgdXNlcnMgTVVTVCBiZSB3YXJuZWQgY2FyZWZ1bGx5IGluIHRoZSBHVUkgYW5kIGFza2VkIGlmIHRoZXkgd2lzaCB0byBwcm9jZWVkICcgK1xuICAnd2l0aCBjYXV0aW9uLiBXYWxsZXRzIHNob3VsZCB2ZXJpZnkgdGhlIHNlZ3dpdCB2ZXJzaW9uIGZyb20gdGhlIG91dHB1dCBvZiBmcm9tQmVjaDMyLCAnICtcbiAgJ3RoZW4gZGVjaWRlIHdoZW4gaXQgaXMgc2FmZSB0byB1c2Ugd2hpY2ggdmVyc2lvbiBvZiBzZWd3aXQuJztcbmZ1bmN0aW9uIF90b0Z1dHVyZVNlZ3dpdEFkZHJlc3Mob3V0cHV0LCBuZXR3b3JrKSB7XG4gIGNvbnN0IGRhdGEgPSBvdXRwdXQuc2xpY2UoMik7XG4gIGlmIChcbiAgICBkYXRhLmxlbmd0aCA8IEZVVFVSRV9TRUdXSVRfTUlOX1NJWkUgfHxcbiAgICBkYXRhLmxlbmd0aCA+IEZVVFVSRV9TRUdXSVRfTUFYX1NJWkVcbiAgKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgcHJvZ3JhbSBsZW5ndGggZm9yIHNlZ3dpdCBhZGRyZXNzJyk7XG4gIGNvbnN0IHZlcnNpb24gPSBvdXRwdXRbMF0gLSBGVVRVUkVfU0VHV0lUX1ZFUlNJT05fRElGRjtcbiAgaWYgKFxuICAgIHZlcnNpb24gPCBGVVRVUkVfU0VHV0lUX01JTl9WRVJTSU9OIHx8XG4gICAgdmVyc2lvbiA+IEZVVFVSRV9TRUdXSVRfTUFYX1ZFUlNJT05cbiAgKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdmVyc2lvbiBmb3Igc2Vnd2l0IGFkZHJlc3MnKTtcbiAgaWYgKG91dHB1dFsxXSAhPT0gZGF0YS5sZW5ndGgpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzY3JpcHQgZm9yIHNlZ3dpdCBhZGRyZXNzJyk7XG4gIGNvbnNvbGUud2FybihGVVRVUkVfU0VHV0lUX1ZFUlNJT05fV0FSTklORyk7XG4gIHJldHVybiB0b0JlY2gzMihkYXRhLCB2ZXJzaW9uLCBuZXR3b3JrLmJlY2gzMik7XG59XG4vKipcbiAqIGRlY29kZSBhZGRyZXNzIHdpdGggYmFzZTU4IHNwZWNpZmljYXRpb24sICByZXR1cm4gYWRkcmVzcyB2ZXJzaW9uIGFuZCBhZGRyZXNzIGhhc2ggaWYgdmFsaWRcbiAqL1xuZnVuY3Rpb24gZnJvbUJhc2U1OENoZWNrKGFkZHJlc3MpIHtcbiAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5mcm9tKGJzNThjaGVjay5kZWNvZGUoYWRkcmVzcykpO1xuICAvLyBUT0RPOiA0LjAuMCwgbW92ZSB0byBcInRvT3V0cHV0U2NyaXB0XCJcbiAgaWYgKHBheWxvYWQubGVuZ3RoIDwgMjEpIHRocm93IG5ldyBUeXBlRXJyb3IoYWRkcmVzcyArICcgaXMgdG9vIHNob3J0Jyk7XG4gIGlmIChwYXlsb2FkLmxlbmd0aCA+IDIxKSB0aHJvdyBuZXcgVHlwZUVycm9yKGFkZHJlc3MgKyAnIGlzIHRvbyBsb25nJyk7XG4gIGNvbnN0IHZlcnNpb24gPSBwYXlsb2FkLnJlYWRVSW50OCgwKTtcbiAgY29uc3QgaGFzaCA9IHBheWxvYWQuc2xpY2UoMSk7XG4gIHJldHVybiB7IHZlcnNpb24sIGhhc2ggfTtcbn1cbmV4cG9ydHMuZnJvbUJhc2U1OENoZWNrID0gZnJvbUJhc2U1OENoZWNrO1xuLyoqXG4gKiBkZWNvZGUgYWRkcmVzcyB3aXRoIGJlY2gzMiBzcGVjaWZpY2F0aW9uLCAgcmV0dXJuIGFkZHJlc3MgdmVyc2lvbuOAgWFkZHJlc3MgcHJlZml4IGFuZCBhZGRyZXNzIGRhdGEgaWYgdmFsaWRcbiAqL1xuZnVuY3Rpb24gZnJvbUJlY2gzMihhZGRyZXNzKSB7XG4gIGxldCByZXN1bHQ7XG4gIGxldCB2ZXJzaW9uO1xuICB0cnkge1xuICAgIHJlc3VsdCA9IGJlY2gzMl8xLmJlY2gzMi5kZWNvZGUoYWRkcmVzcyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIGlmIChyZXN1bHQpIHtcbiAgICB2ZXJzaW9uID0gcmVzdWx0LndvcmRzWzBdO1xuICAgIGlmICh2ZXJzaW9uICE9PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKGFkZHJlc3MgKyAnIHVzZXMgd3JvbmcgZW5jb2RpbmcnKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBiZWNoMzJfMS5iZWNoMzJtLmRlY29kZShhZGRyZXNzKTtcbiAgICB2ZXJzaW9uID0gcmVzdWx0LndvcmRzWzBdO1xuICAgIGlmICh2ZXJzaW9uID09PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKGFkZHJlc3MgKyAnIHVzZXMgd3JvbmcgZW5jb2RpbmcnKTtcbiAgfVxuICBjb25zdCBkYXRhID0gYmVjaDMyXzEuYmVjaDMyLmZyb21Xb3JkcyhyZXN1bHQud29yZHMuc2xpY2UoMSkpO1xuICByZXR1cm4ge1xuICAgIHZlcnNpb24sXG4gICAgcHJlZml4OiByZXN1bHQucHJlZml4LFxuICAgIGRhdGE6IEJ1ZmZlci5mcm9tKGRhdGEpLFxuICB9O1xufVxuZXhwb3J0cy5mcm9tQmVjaDMyID0gZnJvbUJlY2gzMjtcbi8qKlxuICogZW5jb2RlIGFkZHJlc3MgaGFzaCB0byBiYXNlNTggYWRkcmVzcyB3aXRoIHZlcnNpb25cbiAqL1xuZnVuY3Rpb24gdG9CYXNlNThDaGVjayhoYXNoLCB2ZXJzaW9uKSB7XG4gICgwLCB0eXBlc18xLnR5cGVmb3JjZSkoXG4gICAgKDAsIHR5cGVzXzEudHVwbGUpKHR5cGVzXzEuSGFzaDE2MGJpdCwgdHlwZXNfMS5VSW50OCksXG4gICAgYXJndW1lbnRzLFxuICApO1xuICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIxKTtcbiAgcGF5bG9hZC53cml0ZVVJbnQ4KHZlcnNpb24sIDApO1xuICBoYXNoLmNvcHkocGF5bG9hZCwgMSk7XG4gIHJldHVybiBiczU4Y2hlY2suZW5jb2RlKHBheWxvYWQpO1xufVxuZXhwb3J0cy50b0Jhc2U1OENoZWNrID0gdG9CYXNlNThDaGVjaztcbi8qKlxuICogZW5jb2RlIGFkZHJlc3MgaGFzaCB0byBiZWNoMzIgYWRkcmVzcyB3aXRoIHZlcnNpb24gYW5kIHByZWZpeFxuICovXG5mdW5jdGlvbiB0b0JlY2gzMihkYXRhLCB2ZXJzaW9uLCBwcmVmaXgpIHtcbiAgY29uc3Qgd29yZHMgPSBiZWNoMzJfMS5iZWNoMzIudG9Xb3JkcyhkYXRhKTtcbiAgd29yZHMudW5zaGlmdCh2ZXJzaW9uKTtcbiAgcmV0dXJuIHZlcnNpb24gPT09IDBcbiAgICA/IGJlY2gzMl8xLmJlY2gzMi5lbmNvZGUocHJlZml4LCB3b3JkcylcbiAgICA6IGJlY2gzMl8xLmJlY2gzMm0uZW5jb2RlKHByZWZpeCwgd29yZHMpO1xufVxuZXhwb3J0cy50b0JlY2gzMiA9IHRvQmVjaDMyO1xuLyoqXG4gKiBkZWNvZGUgYWRkcmVzcyBmcm9tIG91dHB1dCBzY3JpcHQgd2l0aCBuZXR3b3JrLCByZXR1cm4gYWRkcmVzcyBpZiBtYXRjaGVkXG4gKi9cbmZ1bmN0aW9uIGZyb21PdXRwdXRTY3JpcHQob3V0cHV0LCBuZXR3b3JrKSB7XG4gIC8vIFRPRE86IE5ldHdvcmtcbiAgbmV0d29yayA9IG5ldHdvcmsgfHwgbmV0d29ya3MuYml0Y29pbjtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGF5bWVudHMucDJwa2goeyBvdXRwdXQsIG5ldHdvcmsgfSkuYWRkcmVzcztcbiAgfSBjYXRjaCAoZSkge31cbiAgdHJ5IHtcbiAgICByZXR1cm4gcGF5bWVudHMucDJzaCh7IG91dHB1dCwgbmV0d29yayB9KS5hZGRyZXNzO1xuICB9IGNhdGNoIChlKSB7fVxuICB0cnkge1xuICAgIHJldHVybiBwYXltZW50cy5wMndwa2goeyBvdXRwdXQsIG5ldHdvcmsgfSkuYWRkcmVzcztcbiAgfSBjYXRjaCAoZSkge31cbiAgdHJ5IHtcbiAgICByZXR1cm4gcGF5bWVudHMucDJ3c2goeyBvdXRwdXQsIG5ldHdvcmsgfSkuYWRkcmVzcztcbiAgfSBjYXRjaCAoZSkge31cbiAgdHJ5IHtcbiAgICByZXR1cm4gcGF5bWVudHMucDJ0cih7IG91dHB1dCwgbmV0d29yayB9KS5hZGRyZXNzO1xuICB9IGNhdGNoIChlKSB7fVxuICB0cnkge1xuICAgIHJldHVybiBfdG9GdXR1cmVTZWd3aXRBZGRyZXNzKG91dHB1dCwgbmV0d29yayk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHRocm93IG5ldyBFcnJvcihic2NyaXB0LnRvQVNNKG91dHB1dCkgKyAnIGhhcyBubyBtYXRjaGluZyBBZGRyZXNzJyk7XG59XG5leHBvcnRzLmZyb21PdXRwdXRTY3JpcHQgPSBmcm9tT3V0cHV0U2NyaXB0O1xuLyoqXG4gKiBlbmNvZGVzIGFkZHJlc3MgdG8gb3V0cHV0IHNjcmlwdCB3aXRoIG5ldHdvcmssIHJldHVybiBvdXRwdXQgc2NyaXB0IGlmIGFkZHJlc3MgbWF0Y2hlZFxuICovXG5mdW5jdGlvbiB0b091dHB1dFNjcmlwdChhZGRyZXNzLCBuZXR3b3JrKSB7XG4gIG5ldHdvcmsgPSBuZXR3b3JrIHx8IG5ldHdvcmtzLmJpdGNvaW47XG4gIGxldCBkZWNvZGVCYXNlNTg7XG4gIGxldCBkZWNvZGVCZWNoMzI7XG4gIHRyeSB7XG4gICAgZGVjb2RlQmFzZTU4ID0gZnJvbUJhc2U1OENoZWNrKGFkZHJlc3MpO1xuICB9IGNhdGNoIChlKSB7fVxuICBpZiAoZGVjb2RlQmFzZTU4KSB7XG4gICAgaWYgKGRlY29kZUJhc2U1OC52ZXJzaW9uID09PSBuZXR3b3JrLnB1YktleUhhc2gpXG4gICAgICByZXR1cm4gcGF5bWVudHMucDJwa2goeyBoYXNoOiBkZWNvZGVCYXNlNTguaGFzaCB9KS5vdXRwdXQ7XG4gICAgaWYgKGRlY29kZUJhc2U1OC52ZXJzaW9uID09PSBuZXR3b3JrLnNjcmlwdEhhc2gpXG4gICAgICByZXR1cm4gcGF5bWVudHMucDJzaCh7IGhhc2g6IGRlY29kZUJhc2U1OC5oYXNoIH0pLm91dHB1dDtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgZGVjb2RlQmVjaDMyID0gZnJvbUJlY2gzMihhZGRyZXNzKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIGlmIChkZWNvZGVCZWNoMzIpIHtcbiAgICAgIGlmIChkZWNvZGVCZWNoMzIucHJlZml4ICE9PSBuZXR3b3JrLmJlY2gzMilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFkZHJlc3MgKyAnIGhhcyBhbiBpbnZhbGlkIHByZWZpeCcpO1xuICAgICAgaWYgKGRlY29kZUJlY2gzMi52ZXJzaW9uID09PSAwKSB7XG4gICAgICAgIGlmIChkZWNvZGVCZWNoMzIuZGF0YS5sZW5ndGggPT09IDIwKVxuICAgICAgICAgIHJldHVybiBwYXltZW50cy5wMndwa2goeyBoYXNoOiBkZWNvZGVCZWNoMzIuZGF0YSB9KS5vdXRwdXQ7XG4gICAgICAgIGlmIChkZWNvZGVCZWNoMzIuZGF0YS5sZW5ndGggPT09IDMyKVxuICAgICAgICAgIHJldHVybiBwYXltZW50cy5wMndzaCh7IGhhc2g6IGRlY29kZUJlY2gzMi5kYXRhIH0pLm91dHB1dDtcbiAgICAgIH0gZWxzZSBpZiAoZGVjb2RlQmVjaDMyLnZlcnNpb24gPT09IDEpIHtcbiAgICAgICAgaWYgKGRlY29kZUJlY2gzMi5kYXRhLmxlbmd0aCA9PT0gMzIpXG4gICAgICAgICAgcmV0dXJuIHBheW1lbnRzLnAydHIoeyBwdWJrZXk6IGRlY29kZUJlY2gzMi5kYXRhIH0pLm91dHB1dDtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGRlY29kZUJlY2gzMi52ZXJzaW9uID49IEZVVFVSRV9TRUdXSVRfTUlOX1ZFUlNJT04gJiZcbiAgICAgICAgZGVjb2RlQmVjaDMyLnZlcnNpb24gPD0gRlVUVVJFX1NFR1dJVF9NQVhfVkVSU0lPTiAmJlxuICAgICAgICBkZWNvZGVCZWNoMzIuZGF0YS5sZW5ndGggPj0gRlVUVVJFX1NFR1dJVF9NSU5fU0laRSAmJlxuICAgICAgICBkZWNvZGVCZWNoMzIuZGF0YS5sZW5ndGggPD0gRlVUVVJFX1NFR1dJVF9NQVhfU0laRVxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihGVVRVUkVfU0VHV0lUX1ZFUlNJT05fV0FSTklORyk7XG4gICAgICAgIHJldHVybiBic2NyaXB0LmNvbXBpbGUoW1xuICAgICAgICAgIGRlY29kZUJlY2gzMi52ZXJzaW9uICsgRlVUVVJFX1NFR1dJVF9WRVJTSU9OX0RJRkYsXG4gICAgICAgICAgZGVjb2RlQmVjaDMyLmRhdGEsXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYWRkcmVzcyArICcgaGFzIG5vIG1hdGNoaW5nIFNjcmlwdCcpO1xufVxuZXhwb3J0cy50b091dHB1dFNjcmlwdCA9IHRvT3V0cHV0U2NyaXB0O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/address.js\n\n}")},"./node_modules/bitcoinjs-lib/src/bip66.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\n// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki\n// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]\n// NOTE: SIGHASH byte ignored AND restricted, truncate before use\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.encode = exports.decode = exports.check = void 0;\nfunction check(buffer) {\n if (buffer.length < 8) return false;\n if (buffer.length > 72) return false;\n if (buffer[0] !== 0x30) return false;\n if (buffer[1] !== buffer.length - 2) return false;\n if (buffer[2] !== 0x02) return false;\n const lenR = buffer[3];\n if (lenR === 0) return false;\n if (5 + lenR >= buffer.length) return false;\n if (buffer[4 + lenR] !== 0x02) return false;\n const lenS = buffer[5 + lenR];\n if (lenS === 0) return false;\n if (6 + lenR + lenS !== buffer.length) return false;\n if (buffer[4] & 0x80) return false;\n if (lenR > 1 && buffer[4] === 0x00 && !(buffer[5] & 0x80)) return false;\n if (buffer[lenR + 6] & 0x80) return false;\n if (lenS > 1 && buffer[lenR + 6] === 0x00 && !(buffer[lenR + 7] & 0x80))\n return false;\n return true;\n}\nexports.check = check;\nfunction decode(buffer) {\n if (buffer.length < 8) throw new Error('DER sequence length is too short');\n if (buffer.length > 72) throw new Error('DER sequence length is too long');\n if (buffer[0] !== 0x30) throw new Error('Expected DER sequence');\n if (buffer[1] !== buffer.length - 2)\n throw new Error('DER sequence length is invalid');\n if (buffer[2] !== 0x02) throw new Error('Expected DER integer');\n const lenR = buffer[3];\n if (lenR === 0) throw new Error('R length is zero');\n if (5 + lenR >= buffer.length) throw new Error('R length is too long');\n if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)');\n const lenS = buffer[5 + lenR];\n if (lenS === 0) throw new Error('S length is zero');\n if (6 + lenR + lenS !== buffer.length) throw new Error('S length is invalid');\n if (buffer[4] & 0x80) throw new Error('R value is negative');\n if (lenR > 1 && buffer[4] === 0x00 && !(buffer[5] & 0x80))\n throw new Error('R value excessively padded');\n if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative');\n if (lenS > 1 && buffer[lenR + 6] === 0x00 && !(buffer[lenR + 7] & 0x80))\n throw new Error('S value excessively padded');\n // non-BIP66 - extract R, S values\n return {\n r: buffer.slice(4, 4 + lenR),\n s: buffer.slice(6 + lenR),\n };\n}\nexports.decode = decode;\n/*\n * Expects r and s to be positive DER integers.\n *\n * The DER format uses the most significant bit as a sign bit (& 0x80).\n * If the significant bit is set AND the integer is positive, a 0x00 is prepended.\n *\n * Examples:\n *\n * 0 => 0x00\n * 1 => 0x01\n * -1 => 0xff\n * 127 => 0x7f\n * -127 => 0x81\n * 128 => 0x0080\n * -128 => 0x80\n * 255 => 0x00ff\n * -255 => 0xff01\n * 16300 => 0x3fac\n * -16300 => 0xc054\n * 62300 => 0x00f35c\n * -62300 => 0xff0ca4\n */\nfunction encode(r, s) {\n const lenR = r.length;\n const lenS = s.length;\n if (lenR === 0) throw new Error('R length is zero');\n if (lenS === 0) throw new Error('S length is zero');\n if (lenR > 33) throw new Error('R length is too long');\n if (lenS > 33) throw new Error('S length is too long');\n if (r[0] & 0x80) throw new Error('R value is negative');\n if (s[0] & 0x80) throw new Error('S value is negative');\n if (lenR > 1 && r[0] === 0x00 && !(r[1] & 0x80))\n throw new Error('R value excessively padded');\n if (lenS > 1 && s[0] === 0x00 && !(s[1] & 0x80))\n throw new Error('S value excessively padded');\n const signature = Buffer.allocUnsafe(6 + lenR + lenS);\n // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]\n signature[0] = 0x30;\n signature[1] = signature.length - 2;\n signature[2] = 0x02;\n signature[3] = r.length;\n r.copy(signature, 4);\n signature[4 + lenR] = 0x02;\n signature[5 + lenR] = s.length;\n s.copy(signature, 6 + lenR);\n return signature;\n}\nexports.encode = encode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvYmlwNjYuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGNBQWMsR0FBRyxjQUFjLEdBQUcsYUFBYTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixNQUFNO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvYmlwNjYuanM/Nzk2MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG4vLyBSZWZlcmVuY2UgaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDA2Ni5tZWRpYXdpa2lcbi8vIEZvcm1hdDogMHgzMCBbdG90YWwtbGVuZ3RoXSAweDAyIFtSLWxlbmd0aF0gW1JdIDB4MDIgW1MtbGVuZ3RoXSBbU11cbi8vIE5PVEU6IFNJR0hBU0ggYnl0ZSBpZ25vcmVkIEFORCByZXN0cmljdGVkLCB0cnVuY2F0ZSBiZWZvcmUgdXNlXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLmRlY29kZSA9IGV4cG9ydHMuY2hlY2sgPSB2b2lkIDA7XG5mdW5jdGlvbiBjaGVjayhidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPCA4KSByZXR1cm4gZmFsc2U7XG4gIGlmIChidWZmZXIubGVuZ3RoID4gNzIpIHJldHVybiBmYWxzZTtcbiAgaWYgKGJ1ZmZlclswXSAhPT0gMHgzMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoYnVmZmVyWzFdICE9PSBidWZmZXIubGVuZ3RoIC0gMikgcmV0dXJuIGZhbHNlO1xuICBpZiAoYnVmZmVyWzJdICE9PSAweDAyKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGxlblIgPSBidWZmZXJbM107XG4gIGlmIChsZW5SID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIGlmICg1ICsgbGVuUiA+PSBidWZmZXIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIGlmIChidWZmZXJbNCArIGxlblJdICE9PSAweDAyKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGxlblMgPSBidWZmZXJbNSArIGxlblJdO1xuICBpZiAobGVuUyA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoNiArIGxlblIgKyBsZW5TICE9PSBidWZmZXIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIGlmIChidWZmZXJbNF0gJiAweDgwKSByZXR1cm4gZmFsc2U7XG4gIGlmIChsZW5SID4gMSAmJiBidWZmZXJbNF0gPT09IDB4MDAgJiYgIShidWZmZXJbNV0gJiAweDgwKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoYnVmZmVyW2xlblIgKyA2XSAmIDB4ODApIHJldHVybiBmYWxzZTtcbiAgaWYgKGxlblMgPiAxICYmIGJ1ZmZlcltsZW5SICsgNl0gPT09IDB4MDAgJiYgIShidWZmZXJbbGVuUiArIDddICYgMHg4MCkpXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydHMuY2hlY2sgPSBjaGVjaztcbmZ1bmN0aW9uIGRlY29kZShidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPCA4KSB0aHJvdyBuZXcgRXJyb3IoJ0RFUiBzZXF1ZW5jZSBsZW5ndGggaXMgdG9vIHNob3J0Jyk7XG4gIGlmIChidWZmZXIubGVuZ3RoID4gNzIpIHRocm93IG5ldyBFcnJvcignREVSIHNlcXVlbmNlIGxlbmd0aCBpcyB0b28gbG9uZycpO1xuICBpZiAoYnVmZmVyWzBdICE9PSAweDMwKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIERFUiBzZXF1ZW5jZScpO1xuICBpZiAoYnVmZmVyWzFdICE9PSBidWZmZXIubGVuZ3RoIC0gMilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RFUiBzZXF1ZW5jZSBsZW5ndGggaXMgaW52YWxpZCcpO1xuICBpZiAoYnVmZmVyWzJdICE9PSAweDAyKSB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIERFUiBpbnRlZ2VyJyk7XG4gIGNvbnN0IGxlblIgPSBidWZmZXJbM107XG4gIGlmIChsZW5SID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1IgbGVuZ3RoIGlzIHplcm8nKTtcbiAgaWYgKDUgKyBsZW5SID49IGJ1ZmZlci5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignUiBsZW5ndGggaXMgdG9vIGxvbmcnKTtcbiAgaWYgKGJ1ZmZlcls0ICsgbGVuUl0gIT09IDB4MDIpIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgREVSIGludGVnZXIgKDIpJyk7XG4gIGNvbnN0IGxlblMgPSBidWZmZXJbNSArIGxlblJdO1xuICBpZiAobGVuUyA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdTIGxlbmd0aCBpcyB6ZXJvJyk7XG4gIGlmICg2ICsgbGVuUiArIGxlblMgIT09IGJ1ZmZlci5sZW5ndGgpIHRocm93IG5ldyBFcnJvcignUyBsZW5ndGggaXMgaW52YWxpZCcpO1xuICBpZiAoYnVmZmVyWzRdICYgMHg4MCkgdGhyb3cgbmV3IEVycm9yKCdSIHZhbHVlIGlzIG5lZ2F0aXZlJyk7XG4gIGlmIChsZW5SID4gMSAmJiBidWZmZXJbNF0gPT09IDB4MDAgJiYgIShidWZmZXJbNV0gJiAweDgwKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1IgdmFsdWUgZXhjZXNzaXZlbHkgcGFkZGVkJyk7XG4gIGlmIChidWZmZXJbbGVuUiArIDZdICYgMHg4MCkgdGhyb3cgbmV3IEVycm9yKCdTIHZhbHVlIGlzIG5lZ2F0aXZlJyk7XG4gIGlmIChsZW5TID4gMSAmJiBidWZmZXJbbGVuUiArIDZdID09PSAweDAwICYmICEoYnVmZmVyW2xlblIgKyA3XSAmIDB4ODApKVxuICAgIHRocm93IG5ldyBFcnJvcignUyB2YWx1ZSBleGNlc3NpdmVseSBwYWRkZWQnKTtcbiAgLy8gbm9uLUJJUDY2IC0gZXh0cmFjdCBSLCBTIHZhbHVlc1xuICByZXR1cm4ge1xuICAgIHI6IGJ1ZmZlci5zbGljZSg0LCA0ICsgbGVuUiksXG4gICAgczogYnVmZmVyLnNsaWNlKDYgKyBsZW5SKSxcbiAgfTtcbn1cbmV4cG9ydHMuZGVjb2RlID0gZGVjb2RlO1xuLypcbiAqIEV4cGVjdHMgciBhbmQgcyB0byBiZSBwb3NpdGl2ZSBERVIgaW50ZWdlcnMuXG4gKlxuICogVGhlIERFUiBmb3JtYXQgdXNlcyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgYXMgYSBzaWduIGJpdCAoJiAweDgwKS5cbiAqIElmIHRoZSBzaWduaWZpY2FudCBiaXQgaXMgc2V0IEFORCB0aGUgaW50ZWdlciBpcyBwb3NpdGl2ZSwgYSAweDAwIGlzIHByZXBlbmRlZC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgIDAgPT4gICAgIDB4MDBcbiAqICAgICAgMSA9PiAgICAgMHgwMVxuICogICAgIC0xID0+ICAgICAweGZmXG4gKiAgICAxMjcgPT4gICAgIDB4N2ZcbiAqICAgLTEyNyA9PiAgICAgMHg4MVxuICogICAgMTI4ID0+ICAgMHgwMDgwXG4gKiAgIC0xMjggPT4gICAgIDB4ODBcbiAqICAgIDI1NSA9PiAgIDB4MDBmZlxuICogICAtMjU1ID0+ICAgMHhmZjAxXG4gKiAgMTYzMDAgPT4gICAweDNmYWNcbiAqIC0xNjMwMCA9PiAgIDB4YzA1NFxuICogIDYyMzAwID0+IDB4MDBmMzVjXG4gKiAtNjIzMDAgPT4gMHhmZjBjYTRcbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHIsIHMpIHtcbiAgY29uc3QgbGVuUiA9IHIubGVuZ3RoO1xuICBjb25zdCBsZW5TID0gcy5sZW5ndGg7XG4gIGlmIChsZW5SID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1IgbGVuZ3RoIGlzIHplcm8nKTtcbiAgaWYgKGxlblMgPT09IDApIHRocm93IG5ldyBFcnJvcignUyBsZW5ndGggaXMgemVybycpO1xuICBpZiAobGVuUiA+IDMzKSB0aHJvdyBuZXcgRXJyb3IoJ1IgbGVuZ3RoIGlzIHRvbyBsb25nJyk7XG4gIGlmIChsZW5TID4gMzMpIHRocm93IG5ldyBFcnJvcignUyBsZW5ndGggaXMgdG9vIGxvbmcnKTtcbiAgaWYgKHJbMF0gJiAweDgwKSB0aHJvdyBuZXcgRXJyb3IoJ1IgdmFsdWUgaXMgbmVnYXRpdmUnKTtcbiAgaWYgKHNbMF0gJiAweDgwKSB0aHJvdyBuZXcgRXJyb3IoJ1MgdmFsdWUgaXMgbmVnYXRpdmUnKTtcbiAgaWYgKGxlblIgPiAxICYmIHJbMF0gPT09IDB4MDAgJiYgIShyWzFdICYgMHg4MCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdSIHZhbHVlIGV4Y2Vzc2l2ZWx5IHBhZGRlZCcpO1xuICBpZiAobGVuUyA+IDEgJiYgc1swXSA9PT0gMHgwMCAmJiAhKHNbMV0gJiAweDgwKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1MgdmFsdWUgZXhjZXNzaXZlbHkgcGFkZGVkJyk7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg2ICsgbGVuUiArIGxlblMpO1xuICAvLyAweDMwIFt0b3RhbC1sZW5ndGhdIDB4MDIgW1ItbGVuZ3RoXSBbUl0gMHgwMiBbUy1sZW5ndGhdIFtTXVxuICBzaWduYXR1cmVbMF0gPSAweDMwO1xuICBzaWduYXR1cmVbMV0gPSBzaWduYXR1cmUubGVuZ3RoIC0gMjtcbiAgc2lnbmF0dXJlWzJdID0gMHgwMjtcbiAgc2lnbmF0dXJlWzNdID0gci5sZW5ndGg7XG4gIHIuY29weShzaWduYXR1cmUsIDQpO1xuICBzaWduYXR1cmVbNCArIGxlblJdID0gMHgwMjtcbiAgc2lnbmF0dXJlWzUgKyBsZW5SXSA9IHMubGVuZ3RoO1xuICBzLmNvcHkoc2lnbmF0dXJlLCA2ICsgbGVuUik7XG4gIHJldHVybiBzaWduYXR1cmU7XG59XG5leHBvcnRzLmVuY29kZSA9IGVuY29kZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/bip66.js\n\n}")},"./node_modules/bitcoinjs-lib/src/block.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Block = void 0;\nconst bufferutils_1 = __webpack_require__(/*! ./bufferutils */ \"./node_modules/bitcoinjs-lib/src/bufferutils.js\");\nconst bcrypto = __webpack_require__(/*! ./crypto */ \"./node_modules/bitcoinjs-lib/src/crypto.js\");\nconst merkle_1 = __webpack_require__(/*! ./merkle */ \"./node_modules/bitcoinjs-lib/src/merkle.js\");\nconst transaction_1 = __webpack_require__(/*! ./transaction */ \"./node_modules/bitcoinjs-lib/src/transaction.js\");\nconst types = __webpack_require__(/*! ./types */ \"./node_modules/bitcoinjs-lib/src/types.js\");\nconst { typeforce } = types;\nconst errorMerkleNoTxes = new TypeError(\n 'Cannot compute merkle root for zero transactions',\n);\nconst errorWitnessNotSegwit = new TypeError(\n 'Cannot compute witness commit for non-segwit block',\n);\nclass Block {\n constructor() {\n this.version = 1;\n this.prevHash = undefined;\n this.merkleRoot = undefined;\n this.timestamp = 0;\n this.witnessCommit = undefined;\n this.bits = 0;\n this.nonce = 0;\n this.transactions = undefined;\n }\n static fromBuffer(buffer) {\n if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)');\n const bufferReader = new bufferutils_1.BufferReader(buffer);\n const block = new Block();\n block.version = bufferReader.readInt32();\n block.prevHash = bufferReader.readSlice(32);\n block.merkleRoot = bufferReader.readSlice(32);\n block.timestamp = bufferReader.readUInt32();\n block.bits = bufferReader.readUInt32();\n block.nonce = bufferReader.readUInt32();\n if (buffer.length === 80) return block;\n const readTransaction = () => {\n const tx = transaction_1.Transaction.fromBuffer(\n bufferReader.buffer.slice(bufferReader.offset),\n true,\n );\n bufferReader.offset += tx.byteLength();\n return tx;\n };\n const nTransactions = bufferReader.readVarInt();\n block.transactions = [];\n for (let i = 0; i < nTransactions; ++i) {\n const tx = readTransaction();\n block.transactions.push(tx);\n }\n const witnessCommit = block.getWitnessCommit();\n // This Block contains a witness commit\n if (witnessCommit) block.witnessCommit = witnessCommit;\n return block;\n }\n static fromHex(hex) {\n return Block.fromBuffer(Buffer.from(hex, 'hex'));\n }\n static calculateTarget(bits) {\n const exponent = ((bits & 0xff000000) >> 24) - 3;\n const mantissa = bits & 0x007fffff;\n const target = Buffer.alloc(32, 0);\n target.writeUIntBE(mantissa, 29 - exponent, 3);\n return target;\n }\n static calculateMerkleRoot(transactions, forWitness) {\n typeforce([{ getHash: types.Function }], transactions);\n if (transactions.length === 0) throw errorMerkleNoTxes;\n if (forWitness && !txesHaveWitnessCommit(transactions))\n throw errorWitnessNotSegwit;\n const hashes = transactions.map(transaction =>\n transaction.getHash(forWitness),\n );\n const rootHash = (0, merkle_1.fastMerkleRoot)(hashes, bcrypto.hash256);\n return forWitness\n ? bcrypto.hash256(\n Buffer.concat([rootHash, transactions[0].ins[0].witness[0]]),\n )\n : rootHash;\n }\n getWitnessCommit() {\n if (!txesHaveWitnessCommit(this.transactions)) return null;\n // The merkle root for the witness data is in an OP_RETURN output.\n // There is no rule for the index of the output, so use filter to find it.\n // The root is prepended with 0xaa21a9ed so check for 0x6a24aa21a9ed\n // If multiple commits are found, the output with highest index is assumed.\n const witnessCommits = this.transactions[0].outs\n .filter(out =>\n out.script.slice(0, 6).equals(Buffer.from('6a24aa21a9ed', 'hex')),\n )\n .map(out => out.script.slice(6, 38));\n if (witnessCommits.length === 0) return null;\n // Use the commit with the highest output (should only be one though)\n const result = witnessCommits[witnessCommits.length - 1];\n if (!(result instanceof Buffer && result.length === 32)) return null;\n return result;\n }\n hasWitnessCommit() {\n if (\n this.witnessCommit instanceof Buffer &&\n this.witnessCommit.length === 32\n )\n return true;\n if (this.getWitnessCommit() !== null) return true;\n return false;\n }\n hasWitness() {\n return anyTxHasWitness(this.transactions);\n }\n weight() {\n const base = this.byteLength(false, false);\n const total = this.byteLength(false, true);\n return base * 3 + total;\n }\n byteLength(headersOnly, allowWitness = true) {\n if (headersOnly || !this.transactions) return 80;\n return (\n 80 +\n bufferutils_1.varuint.encodingLength(this.transactions.length) +\n this.transactions.reduce((a, x) => a + x.byteLength(allowWitness), 0)\n );\n }\n getHash() {\n return bcrypto.hash256(this.toBuffer(true));\n }\n getId() {\n return (0, bufferutils_1.reverseBuffer)(this.getHash()).toString('hex');\n }\n getUTCDate() {\n const date = new Date(0); // epoch\n date.setUTCSeconds(this.timestamp);\n return date;\n }\n // TODO: buffer, offset compatibility\n toBuffer(headersOnly) {\n const buffer = Buffer.allocUnsafe(this.byteLength(headersOnly));\n const bufferWriter = new bufferutils_1.BufferWriter(buffer);\n bufferWriter.writeInt32(this.version);\n bufferWriter.writeSlice(this.prevHash);\n bufferWriter.writeSlice(this.merkleRoot);\n bufferWriter.writeUInt32(this.timestamp);\n bufferWriter.writeUInt32(this.bits);\n bufferWriter.writeUInt32(this.nonce);\n if (headersOnly || !this.transactions) return buffer;\n bufferutils_1.varuint.encode(\n this.transactions.length,\n buffer,\n bufferWriter.offset,\n );\n bufferWriter.offset += bufferutils_1.varuint.encode.bytes;\n this.transactions.forEach(tx => {\n const txSize = tx.byteLength(); // TODO: extract from toBuffer?\n tx.toBuffer(buffer, bufferWriter.offset);\n bufferWriter.offset += txSize;\n });\n return buffer;\n }\n toHex(headersOnly) {\n return this.toBuffer(headersOnly).toString('hex');\n }\n checkTxRoots() {\n // If the Block has segwit transactions but no witness commit,\n // there's no way it can be valid, so fail the check.\n const hasWitnessCommit = this.hasWitnessCommit();\n if (!hasWitnessCommit && this.hasWitness()) return false;\n return (\n this.__checkMerkleRoot() &&\n (hasWitnessCommit ? this.__checkWitnessCommit() : true)\n );\n }\n checkProofOfWork() {\n const hash = (0, bufferutils_1.reverseBuffer)(this.getHash());\n const target = Block.calculateTarget(this.bits);\n return hash.compare(target) <= 0;\n }\n __checkMerkleRoot() {\n if (!this.transactions) throw errorMerkleNoTxes;\n const actualMerkleRoot = Block.calculateMerkleRoot(this.transactions);\n return this.merkleRoot.compare(actualMerkleRoot) === 0;\n }\n __checkWitnessCommit() {\n if (!this.transactions) throw errorMerkleNoTxes;\n if (!this.hasWitnessCommit()) throw errorWitnessNotSegwit;\n const actualWitnessCommit = Block.calculateMerkleRoot(\n this.transactions,\n true,\n );\n return this.witnessCommit.compare(actualWitnessCommit) === 0;\n }\n}\nexports.Block = Block;\nfunction txesHaveWitnessCommit(transactions) {\n return (\n transactions instanceof Array &&\n transactions[0] &&\n transactions[0].ins &&\n transactions[0].ins instanceof Array &&\n transactions[0].ins[0] &&\n transactions[0].ins[0].witness &&\n transactions[0].ins[0].witness instanceof Array &&\n transactions[0].ins[0].witness.length > 0\n );\n}\nfunction anyTxHasWitness(transactions) {\n return (\n transactions instanceof Array &&\n transactions.some(\n tx =>\n typeof tx === 'object' &&\n tx.ins instanceof Array &&\n tx.ins.some(\n input =>\n typeof input === 'object' &&\n input.witness instanceof Array &&\n input.witness.length > 0,\n ),\n )\n );\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvYmxvY2suanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGFBQWE7QUFDYixzQkFBc0IsbUJBQU8sQ0FBQyxzRUFBZTtBQUM3QyxnQkFBZ0IsbUJBQU8sQ0FBQyw0REFBVTtBQUNsQyxpQkFBaUIsbUJBQU8sQ0FBQyw0REFBVTtBQUNuQyxzQkFBc0IsbUJBQU8sQ0FBQyxzRUFBZTtBQUM3QyxjQUFjLG1CQUFPLENBQUMsMERBQVM7QUFDL0IsUUFBUSxZQUFZO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixNQUFNO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE1BQU07QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIseUJBQXlCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLE1BQU07QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixNQUFNO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLE1BQU07QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE1BQU07QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL2Jsb2NrLmpzPzQwMzMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQmxvY2sgPSB2b2lkIDA7XG5jb25zdCBidWZmZXJ1dGlsc18xID0gcmVxdWlyZSgnLi9idWZmZXJ1dGlscycpO1xuY29uc3QgYmNyeXB0byA9IHJlcXVpcmUoJy4vY3J5cHRvJyk7XG5jb25zdCBtZXJrbGVfMSA9IHJlcXVpcmUoJy4vbWVya2xlJyk7XG5jb25zdCB0cmFuc2FjdGlvbl8xID0gcmVxdWlyZSgnLi90cmFuc2FjdGlvbicpO1xuY29uc3QgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG5jb25zdCB7IHR5cGVmb3JjZSB9ID0gdHlwZXM7XG5jb25zdCBlcnJvck1lcmtsZU5vVHhlcyA9IG5ldyBUeXBlRXJyb3IoXG4gICdDYW5ub3QgY29tcHV0ZSBtZXJrbGUgcm9vdCBmb3IgemVybyB0cmFuc2FjdGlvbnMnLFxuKTtcbmNvbnN0IGVycm9yV2l0bmVzc05vdFNlZ3dpdCA9IG5ldyBUeXBlRXJyb3IoXG4gICdDYW5ub3QgY29tcHV0ZSB3aXRuZXNzIGNvbW1pdCBmb3Igbm9uLXNlZ3dpdCBibG9jaycsXG4pO1xuY2xhc3MgQmxvY2sge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnZlcnNpb24gPSAxO1xuICAgIHRoaXMucHJldkhhc2ggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tZXJrbGVSb290ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudGltZXN0YW1wID0gMDtcbiAgICB0aGlzLndpdG5lc3NDb21taXQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5iaXRzID0gMDtcbiAgICB0aGlzLm5vbmNlID0gMDtcbiAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHVuZGVmaW5lZDtcbiAgfVxuICBzdGF0aWMgZnJvbUJ1ZmZlcihidWZmZXIpIHtcbiAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDgwKSB0aHJvdyBuZXcgRXJyb3IoJ0J1ZmZlciB0b28gc21hbGwgKDwgODAgYnl0ZXMpJyk7XG4gICAgY29uc3QgYnVmZmVyUmVhZGVyID0gbmV3IGJ1ZmZlcnV0aWxzXzEuQnVmZmVyUmVhZGVyKGJ1ZmZlcik7XG4gICAgY29uc3QgYmxvY2sgPSBuZXcgQmxvY2soKTtcbiAgICBibG9jay52ZXJzaW9uID0gYnVmZmVyUmVhZGVyLnJlYWRJbnQzMigpO1xuICAgIGJsb2NrLnByZXZIYXNoID0gYnVmZmVyUmVhZGVyLnJlYWRTbGljZSgzMik7XG4gICAgYmxvY2subWVya2xlUm9vdCA9IGJ1ZmZlclJlYWRlci5yZWFkU2xpY2UoMzIpO1xuICAgIGJsb2NrLnRpbWVzdGFtcCA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCk7XG4gICAgYmxvY2suYml0cyA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCk7XG4gICAgYmxvY2subm9uY2UgPSBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpO1xuICAgIGlmIChidWZmZXIubGVuZ3RoID09PSA4MCkgcmV0dXJuIGJsb2NrO1xuICAgIGNvbnN0IHJlYWRUcmFuc2FjdGlvbiA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gdHJhbnNhY3Rpb25fMS5UcmFuc2FjdGlvbi5mcm9tQnVmZmVyKFxuICAgICAgICBidWZmZXJSZWFkZXIuYnVmZmVyLnNsaWNlKGJ1ZmZlclJlYWRlci5vZmZzZXQpLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcbiAgICAgIGJ1ZmZlclJlYWRlci5vZmZzZXQgKz0gdHguYnl0ZUxlbmd0aCgpO1xuICAgICAgcmV0dXJuIHR4O1xuICAgIH07XG4gICAgY29uc3QgblRyYW5zYWN0aW9ucyA9IGJ1ZmZlclJlYWRlci5yZWFkVmFySW50KCk7XG4gICAgYmxvY2sudHJhbnNhY3Rpb25zID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuVHJhbnNhY3Rpb25zOyArK2kpIHtcbiAgICAgIGNvbnN0IHR4ID0gcmVhZFRyYW5zYWN0aW9uKCk7XG4gICAgICBibG9jay50cmFuc2FjdGlvbnMucHVzaCh0eCk7XG4gICAgfVxuICAgIGNvbnN0IHdpdG5lc3NDb21taXQgPSBibG9jay5nZXRXaXRuZXNzQ29tbWl0KCk7XG4gICAgLy8gVGhpcyBCbG9jayBjb250YWlucyBhIHdpdG5lc3MgY29tbWl0XG4gICAgaWYgKHdpdG5lc3NDb21taXQpIGJsb2NrLndpdG5lc3NDb21taXQgPSB3aXRuZXNzQ29tbWl0O1xuICAgIHJldHVybiBibG9jaztcbiAgfVxuICBzdGF0aWMgZnJvbUhleChoZXgpIHtcbiAgICByZXR1cm4gQmxvY2suZnJvbUJ1ZmZlcihCdWZmZXIuZnJvbShoZXgsICdoZXgnKSk7XG4gIH1cbiAgc3RhdGljIGNhbGN1bGF0ZVRhcmdldChiaXRzKSB7XG4gICAgY29uc3QgZXhwb25lbnQgPSAoKGJpdHMgJiAweGZmMDAwMDAwKSA+PiAyNCkgLSAzO1xuICAgIGNvbnN0IG1hbnRpc3NhID0gYml0cyAmIDB4MDA3ZmZmZmY7XG4gICAgY29uc3QgdGFyZ2V0ID0gQnVmZmVyLmFsbG9jKDMyLCAwKTtcbiAgICB0YXJnZXQud3JpdGVVSW50QkUobWFudGlzc2EsIDI5IC0gZXhwb25lbnQsIDMpO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cbiAgc3RhdGljIGNhbGN1bGF0ZU1lcmtsZVJvb3QodHJhbnNhY3Rpb25zLCBmb3JXaXRuZXNzKSB7XG4gICAgdHlwZWZvcmNlKFt7IGdldEhhc2g6IHR5cGVzLkZ1bmN0aW9uIH1dLCB0cmFuc2FjdGlvbnMpO1xuICAgIGlmICh0cmFuc2FjdGlvbnMubGVuZ3RoID09PSAwKSB0aHJvdyBlcnJvck1lcmtsZU5vVHhlcztcbiAgICBpZiAoZm9yV2l0bmVzcyAmJiAhdHhlc0hhdmVXaXRuZXNzQ29tbWl0KHRyYW5zYWN0aW9ucykpXG4gICAgICB0aHJvdyBlcnJvcldpdG5lc3NOb3RTZWd3aXQ7XG4gICAgY29uc3QgaGFzaGVzID0gdHJhbnNhY3Rpb25zLm1hcCh0cmFuc2FjdGlvbiA9PlxuICAgICAgdHJhbnNhY3Rpb24uZ2V0SGFzaChmb3JXaXRuZXNzKSxcbiAgICApO1xuICAgIGNvbnN0IHJvb3RIYXNoID0gKDAsIG1lcmtsZV8xLmZhc3RNZXJrbGVSb290KShoYXNoZXMsIGJjcnlwdG8uaGFzaDI1Nik7XG4gICAgcmV0dXJuIGZvcldpdG5lc3NcbiAgICAgID8gYmNyeXB0by5oYXNoMjU2KFxuICAgICAgICAgIEJ1ZmZlci5jb25jYXQoW3Jvb3RIYXNoLCB0cmFuc2FjdGlvbnNbMF0uaW5zWzBdLndpdG5lc3NbMF1dKSxcbiAgICAgICAgKVxuICAgICAgOiByb290SGFzaDtcbiAgfVxuICBnZXRXaXRuZXNzQ29tbWl0KCkge1xuICAgIGlmICghdHhlc0hhdmVXaXRuZXNzQ29tbWl0KHRoaXMudHJhbnNhY3Rpb25zKSkgcmV0dXJuIG51bGw7XG4gICAgLy8gVGhlIG1lcmtsZSByb290IGZvciB0aGUgd2l0bmVzcyBkYXRhIGlzIGluIGFuIE9QX1JFVFVSTiBvdXRwdXQuXG4gICAgLy8gVGhlcmUgaXMgbm8gcnVsZSBmb3IgdGhlIGluZGV4IG9mIHRoZSBvdXRwdXQsIHNvIHVzZSBmaWx0ZXIgdG8gZmluZCBpdC5cbiAgICAvLyBUaGUgcm9vdCBpcyBwcmVwZW5kZWQgd2l0aCAweGFhMjFhOWVkIHNvIGNoZWNrIGZvciAweDZhMjRhYTIxYTllZFxuICAgIC8vIElmIG11bHRpcGxlIGNvbW1pdHMgYXJlIGZvdW5kLCB0aGUgb3V0cHV0IHdpdGggaGlnaGVzdCBpbmRleCBpcyBhc3N1bWVkLlxuICAgIGNvbnN0IHdpdG5lc3NDb21taXRzID0gdGhpcy50cmFuc2FjdGlvbnNbMF0ub3V0c1xuICAgICAgLmZpbHRlcihvdXQgPT5cbiAgICAgICAgb3V0LnNjcmlwdC5zbGljZSgwLCA2KS5lcXVhbHMoQnVmZmVyLmZyb20oJzZhMjRhYTIxYTllZCcsICdoZXgnKSksXG4gICAgICApXG4gICAgICAubWFwKG91dCA9PiBvdXQuc2NyaXB0LnNsaWNlKDYsIDM4KSk7XG4gICAgaWYgKHdpdG5lc3NDb21taXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgLy8gVXNlIHRoZSBjb21taXQgd2l0aCB0aGUgaGlnaGVzdCBvdXRwdXQgKHNob3VsZCBvbmx5IGJlIG9uZSB0aG91Z2gpXG4gICAgY29uc3QgcmVzdWx0ID0gd2l0bmVzc0NvbW1pdHNbd2l0bmVzc0NvbW1pdHMubGVuZ3RoIC0gMV07XG4gICAgaWYgKCEocmVzdWx0IGluc3RhbmNlb2YgQnVmZmVyICYmIHJlc3VsdC5sZW5ndGggPT09IDMyKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBoYXNXaXRuZXNzQ29tbWl0KCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMud2l0bmVzc0NvbW1pdCBpbnN0YW5jZW9mIEJ1ZmZlciAmJlxuICAgICAgdGhpcy53aXRuZXNzQ29tbWl0Lmxlbmd0aCA9PT0gMzJcbiAgICApXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5nZXRXaXRuZXNzQ29tbWl0KCkgIT09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBoYXNXaXRuZXNzKCkge1xuICAgIHJldHVybiBhbnlUeEhhc1dpdG5lc3ModGhpcy50cmFuc2FjdGlvbnMpO1xuICB9XG4gIHdlaWdodCgpIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5ieXRlTGVuZ3RoKGZhbHNlLCBmYWxzZSk7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLmJ5dGVMZW5ndGgoZmFsc2UsIHRydWUpO1xuICAgIHJldHVybiBiYXNlICogMyArIHRvdGFsO1xuICB9XG4gIGJ5dGVMZW5ndGgoaGVhZGVyc09ubHksIGFsbG93V2l0bmVzcyA9IHRydWUpIHtcbiAgICBpZiAoaGVhZGVyc09ubHkgfHwgIXRoaXMudHJhbnNhY3Rpb25zKSByZXR1cm4gODA7XG4gICAgcmV0dXJuIChcbiAgICAgIDgwICtcbiAgICAgIGJ1ZmZlcnV0aWxzXzEudmFydWludC5lbmNvZGluZ0xlbmd0aCh0aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGgpICtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25zLnJlZHVjZSgoYSwgeCkgPT4gYSArIHguYnl0ZUxlbmd0aChhbGxvd1dpdG5lc3MpLCAwKVxuICAgICk7XG4gIH1cbiAgZ2V0SGFzaCgpIHtcbiAgICByZXR1cm4gYmNyeXB0by5oYXNoMjU2KHRoaXMudG9CdWZmZXIodHJ1ZSkpO1xuICB9XG4gIGdldElkKCkge1xuICAgIHJldHVybiAoMCwgYnVmZmVydXRpbHNfMS5yZXZlcnNlQnVmZmVyKSh0aGlzLmdldEhhc2goKSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG4gIGdldFVUQ0RhdGUoKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDApOyAvLyBlcG9jaFxuICAgIGRhdGUuc2V0VVRDU2Vjb25kcyh0aGlzLnRpbWVzdGFtcCk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgLy8gVE9ETzogYnVmZmVyLCBvZmZzZXQgY29tcGF0aWJpbGl0eVxuICB0b0J1ZmZlcihoZWFkZXJzT25seSkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSh0aGlzLmJ5dGVMZW5ndGgoaGVhZGVyc09ubHkpKTtcbiAgICBjb25zdCBidWZmZXJXcml0ZXIgPSBuZXcgYnVmZmVydXRpbHNfMS5CdWZmZXJXcml0ZXIoYnVmZmVyKTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVJbnQzMih0aGlzLnZlcnNpb24pO1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVNsaWNlKHRoaXMucHJldkhhc2gpO1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVNsaWNlKHRoaXMubWVya2xlUm9vdCk7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHRoaXMudGltZXN0YW1wKTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodGhpcy5iaXRzKTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodGhpcy5ub25jZSk7XG4gICAgaWYgKGhlYWRlcnNPbmx5IHx8ICF0aGlzLnRyYW5zYWN0aW9ucykgcmV0dXJuIGJ1ZmZlcjtcbiAgICBidWZmZXJ1dGlsc18xLnZhcnVpbnQuZW5jb2RlKFxuICAgICAgdGhpcy50cmFuc2FjdGlvbnMubGVuZ3RoLFxuICAgICAgYnVmZmVyLFxuICAgICAgYnVmZmVyV3JpdGVyLm9mZnNldCxcbiAgICApO1xuICAgIGJ1ZmZlcldyaXRlci5vZmZzZXQgKz0gYnVmZmVydXRpbHNfMS52YXJ1aW50LmVuY29kZS5ieXRlcztcbiAgICB0aGlzLnRyYW5zYWN0aW9ucy5mb3JFYWNoKHR4ID0+IHtcbiAgICAgIGNvbnN0IHR4U2l6ZSA9IHR4LmJ5dGVMZW5ndGgoKTsgLy8gVE9ETzogZXh0cmFjdCBmcm9tIHRvQnVmZmVyP1xuICAgICAgdHgudG9CdWZmZXIoYnVmZmVyLCBidWZmZXJXcml0ZXIub2Zmc2V0KTtcbiAgICAgIGJ1ZmZlcldyaXRlci5vZmZzZXQgKz0gdHhTaXplO1xuICAgIH0pO1xuICAgIHJldHVybiBidWZmZXI7XG4gIH1cbiAgdG9IZXgoaGVhZGVyc09ubHkpIHtcbiAgICByZXR1cm4gdGhpcy50b0J1ZmZlcihoZWFkZXJzT25seSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG4gIGNoZWNrVHhSb290cygpIHtcbiAgICAvLyBJZiB0aGUgQmxvY2sgaGFzIHNlZ3dpdCB0cmFuc2FjdGlvbnMgYnV0IG5vIHdpdG5lc3MgY29tbWl0LFxuICAgIC8vIHRoZXJlJ3Mgbm8gd2F5IGl0IGNhbiBiZSB2YWxpZCwgc28gZmFpbCB0aGUgY2hlY2suXG4gICAgY29uc3QgaGFzV2l0bmVzc0NvbW1pdCA9IHRoaXMuaGFzV2l0bmVzc0NvbW1pdCgpO1xuICAgIGlmICghaGFzV2l0bmVzc0NvbW1pdCAmJiB0aGlzLmhhc1dpdG5lc3MoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9fY2hlY2tNZXJrbGVSb290KCkgJiZcbiAgICAgIChoYXNXaXRuZXNzQ29tbWl0ID8gdGhpcy5fX2NoZWNrV2l0bmVzc0NvbW1pdCgpIDogdHJ1ZSlcbiAgICApO1xuICB9XG4gIGNoZWNrUHJvb2ZPZldvcmsoKSB7XG4gICAgY29uc3QgaGFzaCA9ICgwLCBidWZmZXJ1dGlsc18xLnJldmVyc2VCdWZmZXIpKHRoaXMuZ2V0SGFzaCgpKTtcbiAgICBjb25zdCB0YXJnZXQgPSBCbG9jay5jYWxjdWxhdGVUYXJnZXQodGhpcy5iaXRzKTtcbiAgICByZXR1cm4gaGFzaC5jb21wYXJlKHRhcmdldCkgPD0gMDtcbiAgfVxuICBfX2NoZWNrTWVya2xlUm9vdCgpIHtcbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb25zKSB0aHJvdyBlcnJvck1lcmtsZU5vVHhlcztcbiAgICBjb25zdCBhY3R1YWxNZXJrbGVSb290ID0gQmxvY2suY2FsY3VsYXRlTWVya2xlUm9vdCh0aGlzLnRyYW5zYWN0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMubWVya2xlUm9vdC5jb21wYXJlKGFjdHVhbE1lcmtsZVJvb3QpID09PSAwO1xuICB9XG4gIF9fY2hlY2tXaXRuZXNzQ29tbWl0KCkge1xuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbnMpIHRocm93IGVycm9yTWVya2xlTm9UeGVzO1xuICAgIGlmICghdGhpcy5oYXNXaXRuZXNzQ29tbWl0KCkpIHRocm93IGVycm9yV2l0bmVzc05vdFNlZ3dpdDtcbiAgICBjb25zdCBhY3R1YWxXaXRuZXNzQ29tbWl0ID0gQmxvY2suY2FsY3VsYXRlTWVya2xlUm9vdChcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25zLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLndpdG5lc3NDb21taXQuY29tcGFyZShhY3R1YWxXaXRuZXNzQ29tbWl0KSA9PT0gMDtcbiAgfVxufVxuZXhwb3J0cy5CbG9jayA9IEJsb2NrO1xuZnVuY3Rpb24gdHhlc0hhdmVXaXRuZXNzQ29tbWl0KHRyYW5zYWN0aW9ucykge1xuICByZXR1cm4gKFxuICAgIHRyYW5zYWN0aW9ucyBpbnN0YW5jZW9mIEFycmF5ICYmXG4gICAgdHJhbnNhY3Rpb25zWzBdICYmXG4gICAgdHJhbnNhY3Rpb25zWzBdLmlucyAmJlxuICAgIHRyYW5zYWN0aW9uc1swXS5pbnMgaW5zdGFuY2VvZiBBcnJheSAmJlxuICAgIHRyYW5zYWN0aW9uc1swXS5pbnNbMF0gJiZcbiAgICB0cmFuc2FjdGlvbnNbMF0uaW5zWzBdLndpdG5lc3MgJiZcbiAgICB0cmFuc2FjdGlvbnNbMF0uaW5zWzBdLndpdG5lc3MgaW5zdGFuY2VvZiBBcnJheSAmJlxuICAgIHRyYW5zYWN0aW9uc1swXS5pbnNbMF0ud2l0bmVzcy5sZW5ndGggPiAwXG4gICk7XG59XG5mdW5jdGlvbiBhbnlUeEhhc1dpdG5lc3ModHJhbnNhY3Rpb25zKSB7XG4gIHJldHVybiAoXG4gICAgdHJhbnNhY3Rpb25zIGluc3RhbmNlb2YgQXJyYXkgJiZcbiAgICB0cmFuc2FjdGlvbnMuc29tZShcbiAgICAgIHR4ID0+XG4gICAgICAgIHR5cGVvZiB0eCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgdHguaW5zIGluc3RhbmNlb2YgQXJyYXkgJiZcbiAgICAgICAgdHguaW5zLnNvbWUoXG4gICAgICAgICAgaW5wdXQgPT5cbiAgICAgICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIGlucHV0LndpdG5lc3MgaW5zdGFuY2VvZiBBcnJheSAmJlxuICAgICAgICAgICAgaW5wdXQud2l0bmVzcy5sZW5ndGggPiAwLFxuICAgICAgICApLFxuICAgIClcbiAgKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/block.js\n\n}")},"./node_modules/bitcoinjs-lib/src/bufferutils.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.BufferReader =\n exports.BufferWriter =\n exports.cloneBuffer =\n exports.reverseBuffer =\n exports.writeUInt64LE =\n exports.readUInt64LE =\n exports.varuint =\n void 0;\nconst types = __webpack_require__(/*! ./types */ \"./node_modules/bitcoinjs-lib/src/types.js\");\nconst { typeforce } = types;\nconst varuint = __webpack_require__(/*! varuint-bitcoin */ \"./node_modules/varuint-bitcoin/index.js\");\nexports.varuint = varuint;\n// https://github.com/feross/buffer/blob/master/index.js#L1127\nfunction verifuint(value, max) {\n if (typeof value !== 'number')\n throw new Error('cannot write a non-number as a number');\n if (value < 0)\n throw new Error('specified a negative value for writing an unsigned value');\n if (value > max) throw new Error('RangeError: value out of range');\n if (Math.floor(value) !== value)\n throw new Error('value has a fractional component');\n}\nfunction readUInt64LE(buffer, offset) {\n const a = buffer.readUInt32LE(offset);\n let b = buffer.readUInt32LE(offset + 4);\n b *= 0x100000000;\n verifuint(b + a, 0x001fffffffffffff);\n return b + a;\n}\nexports.readUInt64LE = readUInt64LE;\n/**\n * Writes a 64-bit unsigned integer in little-endian format to the specified buffer at the given offset.\n *\n * @param buffer - The buffer to write the value to.\n * @param value - The 64-bit unsigned integer value to write.\n * @param offset - The offset in the buffer where the value should be written.\n * @returns The new offset after writing the value.\n */\nfunction writeUInt64LE(buffer, value, offset) {\n verifuint(value, 0x001fffffffffffff);\n buffer.writeInt32LE(value & -1, offset);\n buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4);\n return offset + 8;\n}\nexports.writeUInt64LE = writeUInt64LE;\n/**\n * Reverses the order of bytes in a buffer.\n * @param buffer - The buffer to reverse.\n * @returns A new buffer with the bytes reversed.\n */\nfunction reverseBuffer(buffer) {\n if (buffer.length < 1) return buffer;\n let j = buffer.length - 1;\n let tmp = 0;\n for (let i = 0; i < buffer.length / 2; i++) {\n tmp = buffer[i];\n buffer[i] = buffer[j];\n buffer[j] = tmp;\n j--;\n }\n return buffer;\n}\nexports.reverseBuffer = reverseBuffer;\nfunction cloneBuffer(buffer) {\n const clone = Buffer.allocUnsafe(buffer.length);\n buffer.copy(clone);\n return clone;\n}\nexports.cloneBuffer = cloneBuffer;\n/**\n * Helper class for serialization of bitcoin data types into a pre-allocated buffer.\n */\nclass BufferWriter {\n static withCapacity(size) {\n return new BufferWriter(Buffer.alloc(size));\n }\n constructor(buffer, offset = 0) {\n this.buffer = buffer;\n this.offset = offset;\n typeforce(types.tuple(types.Buffer, types.UInt32), [buffer, offset]);\n }\n writeUInt8(i) {\n this.offset = this.buffer.writeUInt8(i, this.offset);\n }\n writeInt32(i) {\n this.offset = this.buffer.writeInt32LE(i, this.offset);\n }\n writeUInt32(i) {\n this.offset = this.buffer.writeUInt32LE(i, this.offset);\n }\n writeUInt64(i) {\n this.offset = writeUInt64LE(this.buffer, i, this.offset);\n }\n writeVarInt(i) {\n varuint.encode(i, this.buffer, this.offset);\n this.offset += varuint.encode.bytes;\n }\n writeSlice(slice) {\n if (this.buffer.length < this.offset + slice.length) {\n throw new Error('Cannot write slice out of bounds');\n }\n this.offset += slice.copy(this.buffer, this.offset);\n }\n writeVarSlice(slice) {\n this.writeVarInt(slice.length);\n this.writeSlice(slice);\n }\n writeVector(vector) {\n this.writeVarInt(vector.length);\n vector.forEach(buf => this.writeVarSlice(buf));\n }\n end() {\n if (this.buffer.length === this.offset) {\n return this.buffer;\n }\n throw new Error(`buffer size ${this.buffer.length}, offset ${this.offset}`);\n }\n}\nexports.BufferWriter = BufferWriter;\n/**\n * Helper class for reading of bitcoin data types from a buffer.\n */\nclass BufferReader {\n constructor(buffer, offset = 0) {\n this.buffer = buffer;\n this.offset = offset;\n typeforce(types.tuple(types.Buffer, types.UInt32), [buffer, offset]);\n }\n readUInt8() {\n const result = this.buffer.readUInt8(this.offset);\n this.offset++;\n return result;\n }\n readInt32() {\n const result = this.buffer.readInt32LE(this.offset);\n this.offset += 4;\n return result;\n }\n readUInt32() {\n const result = this.buffer.readUInt32LE(this.offset);\n this.offset += 4;\n return result;\n }\n readUInt64() {\n const result = readUInt64LE(this.buffer, this.offset);\n this.offset += 8;\n return result;\n }\n readVarInt() {\n const vi = varuint.decode(this.buffer, this.offset);\n this.offset += varuint.decode.bytes;\n return vi;\n }\n readSlice(n) {\n if (this.buffer.length < this.offset + n) {\n throw new Error('Cannot read slice out of bounds');\n }\n const result = this.buffer.slice(this.offset, this.offset + n);\n this.offset += n;\n return result;\n }\n readVarSlice() {\n return this.readSlice(this.readVarInt());\n }\n readVector() {\n const count = this.readVarInt();\n const vector = [];\n for (let i = 0; i < count; i++) vector.push(this.readVarSlice());\n return vector;\n }\n}\nexports.BufferReader = BufferReader;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvYnVmZmVydXRpbHMuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELG9CQUFvQjtBQUNwQixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLGVBQWU7QUFDakI7QUFDQSxjQUFjLG1CQUFPLENBQUMsMERBQVM7QUFDL0IsUUFBUSxZQUFZO0FBQ3BCLGdCQUFnQixtQkFBTyxDQUFDLGdFQUFpQjtBQUN6QyxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQix1QkFBdUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixNQUFNO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLG1CQUFtQixXQUFXLFlBQVk7QUFDN0U7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsV0FBVztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXRjb2luanMtbGliL3NyYy9idWZmZXJ1dGlscy5qcz85ZmMzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJ1ZmZlclJlYWRlciA9XG4gIGV4cG9ydHMuQnVmZmVyV3JpdGVyID1cbiAgZXhwb3J0cy5jbG9uZUJ1ZmZlciA9XG4gIGV4cG9ydHMucmV2ZXJzZUJ1ZmZlciA9XG4gIGV4cG9ydHMud3JpdGVVSW50NjRMRSA9XG4gIGV4cG9ydHMucmVhZFVJbnQ2NExFID1cbiAgZXhwb3J0cy52YXJ1aW50ID1cbiAgICB2b2lkIDA7XG5jb25zdCB0eXBlcyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcbmNvbnN0IHsgdHlwZWZvcmNlIH0gPSB0eXBlcztcbmNvbnN0IHZhcnVpbnQgPSByZXF1aXJlKCd2YXJ1aW50LWJpdGNvaW4nKTtcbmV4cG9ydHMudmFydWludCA9IHZhcnVpbnQ7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9ibG9iL21hc3Rlci9pbmRleC5qcyNMMTEyN1xuZnVuY3Rpb24gdmVyaWZ1aW50KHZhbHVlLCBtYXgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3Qgd3JpdGUgYSBub24tbnVtYmVyIGFzIGEgbnVtYmVyJyk7XG4gIGlmICh2YWx1ZSA8IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdzcGVjaWZpZWQgYSBuZWdhdGl2ZSB2YWx1ZSBmb3Igd3JpdGluZyBhbiB1bnNpZ25lZCB2YWx1ZScpO1xuICBpZiAodmFsdWUgPiBtYXgpIHRocm93IG5ldyBFcnJvcignUmFuZ2VFcnJvcjogdmFsdWUgb3V0IG9mIHJhbmdlJyk7XG4gIGlmIChNYXRoLmZsb29yKHZhbHVlKSAhPT0gdmFsdWUpXG4gICAgdGhyb3cgbmV3IEVycm9yKCd2YWx1ZSBoYXMgYSBmcmFjdGlvbmFsIGNvbXBvbmVudCcpO1xufVxuZnVuY3Rpb24gcmVhZFVJbnQ2NExFKGJ1ZmZlciwgb2Zmc2V0KSB7XG4gIGNvbnN0IGEgPSBidWZmZXIucmVhZFVJbnQzMkxFKG9mZnNldCk7XG4gIGxldCBiID0gYnVmZmVyLnJlYWRVSW50MzJMRShvZmZzZXQgKyA0KTtcbiAgYiAqPSAweDEwMDAwMDAwMDtcbiAgdmVyaWZ1aW50KGIgKyBhLCAweDAwMWZmZmZmZmZmZmZmZmYpO1xuICByZXR1cm4gYiArIGE7XG59XG5leHBvcnRzLnJlYWRVSW50NjRMRSA9IHJlYWRVSW50NjRMRTtcbi8qKlxuICogV3JpdGVzIGEgNjQtYml0IHVuc2lnbmVkIGludGVnZXIgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQgdG8gdGhlIHNwZWNpZmllZCBidWZmZXIgYXQgdGhlIGdpdmVuIG9mZnNldC5cbiAqXG4gKiBAcGFyYW0gYnVmZmVyIC0gVGhlIGJ1ZmZlciB0byB3cml0ZSB0aGUgdmFsdWUgdG8uXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgNjQtYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgdG8gd3JpdGUuXG4gKiBAcGFyYW0gb2Zmc2V0IC0gVGhlIG9mZnNldCBpbiB0aGUgYnVmZmVyIHdoZXJlIHRoZSB2YWx1ZSBzaG91bGQgYmUgd3JpdHRlbi5cbiAqIEByZXR1cm5zIFRoZSBuZXcgb2Zmc2V0IGFmdGVyIHdyaXRpbmcgdGhlIHZhbHVlLlxuICovXG5mdW5jdGlvbiB3cml0ZVVJbnQ2NExFKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCkge1xuICB2ZXJpZnVpbnQodmFsdWUsIDB4MDAxZmZmZmZmZmZmZmZmZik7XG4gIGJ1ZmZlci53cml0ZUludDMyTEUodmFsdWUgJiAtMSwgb2Zmc2V0KTtcbiAgYnVmZmVyLndyaXRlVUludDMyTEUoTWF0aC5mbG9vcih2YWx1ZSAvIDB4MTAwMDAwMDAwKSwgb2Zmc2V0ICsgNCk7XG4gIHJldHVybiBvZmZzZXQgKyA4O1xufVxuZXhwb3J0cy53cml0ZVVJbnQ2NExFID0gd3JpdGVVSW50NjRMRTtcbi8qKlxuICogUmV2ZXJzZXMgdGhlIG9yZGVyIG9mIGJ5dGVzIGluIGEgYnVmZmVyLlxuICogQHBhcmFtIGJ1ZmZlciAtIFRoZSBidWZmZXIgdG8gcmV2ZXJzZS5cbiAqIEByZXR1cm5zIEEgbmV3IGJ1ZmZlciB3aXRoIHRoZSBieXRlcyByZXZlcnNlZC5cbiAqL1xuZnVuY3Rpb24gcmV2ZXJzZUJ1ZmZlcihidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSByZXR1cm4gYnVmZmVyO1xuICBsZXQgaiA9IGJ1ZmZlci5sZW5ndGggLSAxO1xuICBsZXQgdG1wID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoIC8gMjsgaSsrKSB7XG4gICAgdG1wID0gYnVmZmVyW2ldO1xuICAgIGJ1ZmZlcltpXSA9IGJ1ZmZlcltqXTtcbiAgICBidWZmZXJbal0gPSB0bXA7XG4gICAgai0tO1xuICB9XG4gIHJldHVybiBidWZmZXI7XG59XG5leHBvcnRzLnJldmVyc2VCdWZmZXIgPSByZXZlcnNlQnVmZmVyO1xuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyKSB7XG4gIGNvbnN0IGNsb25lID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJ1ZmZlci5sZW5ndGgpO1xuICBidWZmZXIuY29weShjbG9uZSk7XG4gIHJldHVybiBjbG9uZTtcbn1cbmV4cG9ydHMuY2xvbmVCdWZmZXIgPSBjbG9uZUJ1ZmZlcjtcbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBzZXJpYWxpemF0aW9uIG9mIGJpdGNvaW4gZGF0YSB0eXBlcyBpbnRvIGEgcHJlLWFsbG9jYXRlZCBidWZmZXIuXG4gKi9cbmNsYXNzIEJ1ZmZlcldyaXRlciB7XG4gIHN0YXRpYyB3aXRoQ2FwYWNpdHkoc2l6ZSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyV3JpdGVyKEJ1ZmZlci5hbGxvYyhzaXplKSk7XG4gIH1cbiAgY29uc3RydWN0b3IoYnVmZmVyLCBvZmZzZXQgPSAwKSB7XG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgdHlwZWZvcmNlKHR5cGVzLnR1cGxlKHR5cGVzLkJ1ZmZlciwgdHlwZXMuVUludDMyKSwgW2J1ZmZlciwgb2Zmc2V0XSk7XG4gIH1cbiAgd3JpdGVVSW50OChpKSB7XG4gICAgdGhpcy5vZmZzZXQgPSB0aGlzLmJ1ZmZlci53cml0ZVVJbnQ4KGksIHRoaXMub2Zmc2V0KTtcbiAgfVxuICB3cml0ZUludDMyKGkpIHtcbiAgICB0aGlzLm9mZnNldCA9IHRoaXMuYnVmZmVyLndyaXRlSW50MzJMRShpLCB0aGlzLm9mZnNldCk7XG4gIH1cbiAgd3JpdGVVSW50MzIoaSkge1xuICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5idWZmZXIud3JpdGVVSW50MzJMRShpLCB0aGlzLm9mZnNldCk7XG4gIH1cbiAgd3JpdGVVSW50NjQoaSkge1xuICAgIHRoaXMub2Zmc2V0ID0gd3JpdGVVSW50NjRMRSh0aGlzLmJ1ZmZlciwgaSwgdGhpcy5vZmZzZXQpO1xuICB9XG4gIHdyaXRlVmFySW50KGkpIHtcbiAgICB2YXJ1aW50LmVuY29kZShpLCB0aGlzLmJ1ZmZlciwgdGhpcy5vZmZzZXQpO1xuICAgIHRoaXMub2Zmc2V0ICs9IHZhcnVpbnQuZW5jb2RlLmJ5dGVzO1xuICB9XG4gIHdyaXRlU2xpY2Uoc2xpY2UpIHtcbiAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoIDwgdGhpcy5vZmZzZXQgKyBzbGljZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHdyaXRlIHNsaWNlIG91dCBvZiBib3VuZHMnKTtcbiAgICB9XG4gICAgdGhpcy5vZmZzZXQgKz0gc2xpY2UuY29weSh0aGlzLmJ1ZmZlciwgdGhpcy5vZmZzZXQpO1xuICB9XG4gIHdyaXRlVmFyU2xpY2Uoc2xpY2UpIHtcbiAgICB0aGlzLndyaXRlVmFySW50KHNsaWNlLmxlbmd0aCk7XG4gICAgdGhpcy53cml0ZVNsaWNlKHNsaWNlKTtcbiAgfVxuICB3cml0ZVZlY3Rvcih2ZWN0b3IpIHtcbiAgICB0aGlzLndyaXRlVmFySW50KHZlY3Rvci5sZW5ndGgpO1xuICAgIHZlY3Rvci5mb3JFYWNoKGJ1ZiA9PiB0aGlzLndyaXRlVmFyU2xpY2UoYnVmKSk7XG4gIH1cbiAgZW5kKCkge1xuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPT09IHRoaXMub2Zmc2V0KSB7XG4gICAgICByZXR1cm4gdGhpcy5idWZmZXI7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgYnVmZmVyIHNpemUgJHt0aGlzLmJ1ZmZlci5sZW5ndGh9LCBvZmZzZXQgJHt0aGlzLm9mZnNldH1gKTtcbiAgfVxufVxuZXhwb3J0cy5CdWZmZXJXcml0ZXIgPSBCdWZmZXJXcml0ZXI7XG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgcmVhZGluZyBvZiBiaXRjb2luIGRhdGEgdHlwZXMgZnJvbSBhIGJ1ZmZlci5cbiAqL1xuY2xhc3MgQnVmZmVyUmVhZGVyIHtcbiAgY29uc3RydWN0b3IoYnVmZmVyLCBvZmZzZXQgPSAwKSB7XG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgdHlwZWZvcmNlKHR5cGVzLnR1cGxlKHR5cGVzLkJ1ZmZlciwgdHlwZXMuVUludDMyKSwgW2J1ZmZlciwgb2Zmc2V0XSk7XG4gIH1cbiAgcmVhZFVJbnQ4KCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuYnVmZmVyLnJlYWRVSW50OCh0aGlzLm9mZnNldCk7XG4gICAgdGhpcy5vZmZzZXQrKztcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJlYWRJbnQzMigpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmJ1ZmZlci5yZWFkSW50MzJMRSh0aGlzLm9mZnNldCk7XG4gICAgdGhpcy5vZmZzZXQgKz0gNDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJlYWRVSW50MzIoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5idWZmZXIucmVhZFVJbnQzMkxFKHRoaXMub2Zmc2V0KTtcbiAgICB0aGlzLm9mZnNldCArPSA0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmVhZFVJbnQ2NCgpIHtcbiAgICBjb25zdCByZXN1bHQgPSByZWFkVUludDY0TEUodGhpcy5idWZmZXIsIHRoaXMub2Zmc2V0KTtcbiAgICB0aGlzLm9mZnNldCArPSA4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmVhZFZhckludCgpIHtcbiAgICBjb25zdCB2aSA9IHZhcnVpbnQuZGVjb2RlKHRoaXMuYnVmZmVyLCB0aGlzLm9mZnNldCk7XG4gICAgdGhpcy5vZmZzZXQgKz0gdmFydWludC5kZWNvZGUuYnl0ZXM7XG4gICAgcmV0dXJuIHZpO1xuICB9XG4gIHJlYWRTbGljZShuKSB7XG4gICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA8IHRoaXMub2Zmc2V0ICsgbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcmVhZCBzbGljZSBvdXQgb2YgYm91bmRzJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuYnVmZmVyLnNsaWNlKHRoaXMub2Zmc2V0LCB0aGlzLm9mZnNldCArIG4pO1xuICAgIHRoaXMub2Zmc2V0ICs9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZWFkVmFyU2xpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZFNsaWNlKHRoaXMucmVhZFZhckludCgpKTtcbiAgfVxuICByZWFkVmVjdG9yKCkge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5yZWFkVmFySW50KCk7XG4gICAgY29uc3QgdmVjdG9yID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB2ZWN0b3IucHVzaCh0aGlzLnJlYWRWYXJTbGljZSgpKTtcbiAgICByZXR1cm4gdmVjdG9yO1xuICB9XG59XG5leHBvcnRzLkJ1ZmZlclJlYWRlciA9IEJ1ZmZlclJlYWRlcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/bufferutils.js\n\n}")},"./node_modules/bitcoinjs-lib/src/crypto.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.taggedHash =\n exports.TAGGED_HASH_PREFIXES =\n exports.TAGS =\n exports.hash256 =\n exports.hash160 =\n exports.sha256 =\n exports.sha1 =\n exports.ripemd160 =\n void 0;\n/**\n * A module for hashing functions.\n * include ripemd160、sha1、sha256、hash160、hash256、taggedHash\n *\n * @packageDocumentation\n */\nconst ripemd160_1 = __webpack_require__(/*! @noble/hashes/ripemd160 */ \"./node_modules/@noble/hashes/legacy.js\");\nconst sha1_1 = __webpack_require__(/*! @noble/hashes/sha1 */ \"./node_modules/@noble/hashes/legacy.js\");\nconst sha256_1 = __webpack_require__(/*! @noble/hashes/sha256 */ \"./node_modules/@noble/hashes/sha2.js\");\nfunction ripemd160(buffer) {\n return Buffer.from((0, ripemd160_1.ripemd160)(Uint8Array.from(buffer)));\n}\nexports.ripemd160 = ripemd160;\nfunction sha1(buffer) {\n return Buffer.from((0, sha1_1.sha1)(Uint8Array.from(buffer)));\n}\nexports.sha1 = sha1;\nfunction sha256(buffer) {\n return Buffer.from((0, sha256_1.sha256)(Uint8Array.from(buffer)));\n}\nexports.sha256 = sha256;\nfunction hash160(buffer) {\n return Buffer.from(\n (0, ripemd160_1.ripemd160)((0, sha256_1.sha256)(Uint8Array.from(buffer))),\n );\n}\nexports.hash160 = hash160;\nfunction hash256(buffer) {\n return Buffer.from(\n (0, sha256_1.sha256)((0, sha256_1.sha256)(Uint8Array.from(buffer))),\n );\n}\nexports.hash256 = hash256;\nexports.TAGS = [\n 'BIP0340/challenge',\n 'BIP0340/aux',\n 'BIP0340/nonce',\n 'TapLeaf',\n 'TapBranch',\n 'TapSighash',\n 'TapTweak',\n 'KeyAgg list',\n 'KeyAgg coefficient',\n];\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\n/**\n * Defines the tagged hash prefixes used in the crypto module.\n */\nexports.TAGGED_HASH_PREFIXES = {\n 'BIP0340/challenge': Buffer.from([\n 123, 181, 45, 122, 159, 239, 88, 50, 62, 177, 191, 122, 64, 125, 179, 130,\n 210, 243, 242, 216, 27, 177, 34, 79, 73, 254, 81, 143, 109, 72, 211, 124,\n 123, 181, 45, 122, 159, 239, 88, 50, 62, 177, 191, 122, 64, 125, 179, 130,\n 210, 243, 242, 216, 27, 177, 34, 79, 73, 254, 81, 143, 109, 72, 211, 124,\n ]),\n 'BIP0340/aux': Buffer.from([\n 241, 239, 78, 94, 192, 99, 202, 218, 109, 148, 202, 250, 157, 152, 126, 160,\n 105, 38, 88, 57, 236, 193, 31, 151, 45, 119, 165, 46, 216, 193, 204, 144,\n 241, 239, 78, 94, 192, 99, 202, 218, 109, 148, 202, 250, 157, 152, 126, 160,\n 105, 38, 88, 57, 236, 193, 31, 151, 45, 119, 165, 46, 216, 193, 204, 144,\n ]),\n 'BIP0340/nonce': Buffer.from([\n 7, 73, 119, 52, 167, 155, 203, 53, 91, 155, 140, 125, 3, 79, 18, 28, 244,\n 52, 215, 62, 247, 45, 218, 25, 135, 0, 97, 251, 82, 191, 235, 47, 7, 73,\n 119, 52, 167, 155, 203, 53, 91, 155, 140, 125, 3, 79, 18, 28, 244, 52, 215,\n 62, 247, 45, 218, 25, 135, 0, 97, 251, 82, 191, 235, 47,\n ]),\n TapLeaf: Buffer.from([\n 174, 234, 143, 220, 66, 8, 152, 49, 5, 115, 75, 88, 8, 29, 30, 38, 56, 211,\n 95, 28, 181, 64, 8, 212, 211, 87, 202, 3, 190, 120, 233, 238, 174, 234, 143,\n 220, 66, 8, 152, 49, 5, 115, 75, 88, 8, 29, 30, 38, 56, 211, 95, 28, 181,\n 64, 8, 212, 211, 87, 202, 3, 190, 120, 233, 238,\n ]),\n TapBranch: Buffer.from([\n 25, 65, 161, 242, 229, 110, 185, 95, 162, 169, 241, 148, 190, 92, 1, 247,\n 33, 111, 51, 237, 130, 176, 145, 70, 52, 144, 208, 91, 245, 22, 160, 21, 25,\n 65, 161, 242, 229, 110, 185, 95, 162, 169, 241, 148, 190, 92, 1, 247, 33,\n 111, 51, 237, 130, 176, 145, 70, 52, 144, 208, 91, 245, 22, 160, 21,\n ]),\n TapSighash: Buffer.from([\n 244, 10, 72, 223, 75, 42, 112, 200, 180, 146, 75, 242, 101, 70, 97, 237, 61,\n 149, 253, 102, 163, 19, 235, 135, 35, 117, 151, 198, 40, 228, 160, 49, 244,\n 10, 72, 223, 75, 42, 112, 200, 180, 146, 75, 242, 101, 70, 97, 237, 61, 149,\n 253, 102, 163, 19, 235, 135, 35, 117, 151, 198, 40, 228, 160, 49,\n ]),\n TapTweak: Buffer.from([\n 232, 15, 225, 99, 156, 156, 160, 80, 227, 175, 27, 57, 193, 67, 198, 62, 66,\n 156, 188, 235, 21, 217, 64, 251, 181, 197, 161, 244, 175, 87, 197, 233, 232,\n 15, 225, 99, 156, 156, 160, 80, 227, 175, 27, 57, 193, 67, 198, 62, 66, 156,\n 188, 235, 21, 217, 64, 251, 181, 197, 161, 244, 175, 87, 197, 233,\n ]),\n 'KeyAgg list': Buffer.from([\n 72, 28, 151, 28, 60, 11, 70, 215, 240, 178, 117, 174, 89, 141, 78, 44, 126,\n 215, 49, 156, 89, 74, 92, 110, 199, 158, 160, 212, 153, 2, 148, 240, 72, 28,\n 151, 28, 60, 11, 70, 215, 240, 178, 117, 174, 89, 141, 78, 44, 126, 215, 49,\n 156, 89, 74, 92, 110, 199, 158, 160, 212, 153, 2, 148, 240,\n ]),\n 'KeyAgg coefficient': Buffer.from([\n 191, 201, 4, 3, 77, 28, 136, 232, 200, 14, 34, 229, 61, 36, 86, 109, 100,\n 130, 78, 214, 66, 114, 129, 192, 145, 0, 249, 77, 205, 82, 201, 129, 191,\n 201, 4, 3, 77, 28, 136, 232, 200, 14, 34, 229, 61, 36, 86, 109, 100, 130,\n 78, 214, 66, 114, 129, 192, 145, 0, 249, 77, 205, 82, 201, 129,\n ]),\n};\nfunction taggedHash(prefix, data) {\n return sha256(Buffer.concat([exports.TAGGED_HASH_PREFIXES[prefix], data]));\n}\nexports.taggedHash = taggedHash;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvY3J5cHRvLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0I7QUFDbEIsRUFBRSw0QkFBNEI7QUFDOUIsRUFBRSxZQUFZO0FBQ2QsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsZUFBZTtBQUNqQixFQUFFLGNBQWM7QUFDaEIsRUFBRSxZQUFZO0FBQ2QsRUFBRSxpQkFBaUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsbUJBQU8sQ0FBQyx1RUFBeUI7QUFDckQsZUFBZSxtQkFBTyxDQUFDLGtFQUFvQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyxrRUFBc0I7QUFDL0M7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsU0FBUyxNQUFNO0FBQ2Y7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsdUJBQXVCLE1BQU07QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsTUFBTTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE1BQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsTUFBTTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLE1BQU07QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBLGtCQUFrQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL2NyeXB0by5qcz85NjI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnRhZ2dlZEhhc2ggPVxuICBleHBvcnRzLlRBR0dFRF9IQVNIX1BSRUZJWEVTID1cbiAgZXhwb3J0cy5UQUdTID1cbiAgZXhwb3J0cy5oYXNoMjU2ID1cbiAgZXhwb3J0cy5oYXNoMTYwID1cbiAgZXhwb3J0cy5zaGEyNTYgPVxuICBleHBvcnRzLnNoYTEgPVxuICBleHBvcnRzLnJpcGVtZDE2MCA9XG4gICAgdm9pZCAwO1xuLyoqXG4gKiBBIG1vZHVsZSBmb3IgaGFzaGluZyBmdW5jdGlvbnMuXG4gKiBpbmNsdWRlIHJpcGVtZDE2MOOAgXNoYTHjgIFzaGEyNTbjgIFoYXNoMTYw44CBaGFzaDI1NuOAgXRhZ2dlZEhhc2hcbiAqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqL1xuY29uc3QgcmlwZW1kMTYwXzEgPSByZXF1aXJlKCdAbm9ibGUvaGFzaGVzL3JpcGVtZDE2MCcpO1xuY29uc3Qgc2hhMV8xID0gcmVxdWlyZSgnQG5vYmxlL2hhc2hlcy9zaGExJyk7XG5jb25zdCBzaGEyNTZfMSA9IHJlcXVpcmUoJ0Bub2JsZS9oYXNoZXMvc2hhMjU2Jyk7XG5mdW5jdGlvbiByaXBlbWQxNjAoYnVmZmVyKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbSgoMCwgcmlwZW1kMTYwXzEucmlwZW1kMTYwKShVaW50OEFycmF5LmZyb20oYnVmZmVyKSkpO1xufVxuZXhwb3J0cy5yaXBlbWQxNjAgPSByaXBlbWQxNjA7XG5mdW5jdGlvbiBzaGExKGJ1ZmZlcikge1xuICByZXR1cm4gQnVmZmVyLmZyb20oKDAsIHNoYTFfMS5zaGExKShVaW50OEFycmF5LmZyb20oYnVmZmVyKSkpO1xufVxuZXhwb3J0cy5zaGExID0gc2hhMTtcbmZ1bmN0aW9uIHNoYTI1NihidWZmZXIpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKCgwLCBzaGEyNTZfMS5zaGEyNTYpKFVpbnQ4QXJyYXkuZnJvbShidWZmZXIpKSk7XG59XG5leHBvcnRzLnNoYTI1NiA9IHNoYTI1NjtcbmZ1bmN0aW9uIGhhc2gxNjAoYnVmZmVyKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShcbiAgICAoMCwgcmlwZW1kMTYwXzEucmlwZW1kMTYwKSgoMCwgc2hhMjU2XzEuc2hhMjU2KShVaW50OEFycmF5LmZyb20oYnVmZmVyKSkpLFxuICApO1xufVxuZXhwb3J0cy5oYXNoMTYwID0gaGFzaDE2MDtcbmZ1bmN0aW9uIGhhc2gyNTYoYnVmZmVyKSB7XG4gIHJldHVybiBCdWZmZXIuZnJvbShcbiAgICAoMCwgc2hhMjU2XzEuc2hhMjU2KSgoMCwgc2hhMjU2XzEuc2hhMjU2KShVaW50OEFycmF5LmZyb20oYnVmZmVyKSkpLFxuICApO1xufVxuZXhwb3J0cy5oYXNoMjU2ID0gaGFzaDI1NjtcbmV4cG9ydHMuVEFHUyA9IFtcbiAgJ0JJUDAzNDAvY2hhbGxlbmdlJyxcbiAgJ0JJUDAzNDAvYXV4JyxcbiAgJ0JJUDAzNDAvbm9uY2UnLFxuICAnVGFwTGVhZicsXG4gICdUYXBCcmFuY2gnLFxuICAnVGFwU2lnaGFzaCcsXG4gICdUYXBUd2VhaycsXG4gICdLZXlBZ2cgbGlzdCcsXG4gICdLZXlBZ2cgY29lZmZpY2llbnQnLFxuXTtcbi8qKiBBbiBvYmplY3QgbWFwcGluZyB0YWdzIHRvIHRoZWlyIHRhZ2dlZCBoYXNoIHByZWZpeCBvZiBbU0hBMjU2KHRhZykgfCBTSEEyNTYodGFnKV0gKi9cbi8qKlxuICogRGVmaW5lcyB0aGUgdGFnZ2VkIGhhc2ggcHJlZml4ZXMgdXNlZCBpbiB0aGUgY3J5cHRvIG1vZHVsZS5cbiAqL1xuZXhwb3J0cy5UQUdHRURfSEFTSF9QUkVGSVhFUyA9IHtcbiAgJ0JJUDAzNDAvY2hhbGxlbmdlJzogQnVmZmVyLmZyb20oW1xuICAgIDEyMywgMTgxLCA0NSwgMTIyLCAxNTksIDIzOSwgODgsIDUwLCA2MiwgMTc3LCAxOTEsIDEyMiwgNjQsIDEyNSwgMTc5LCAxMzAsXG4gICAgMjEwLCAyNDMsIDI0MiwgMjE2LCAyNywgMTc3LCAzNCwgNzksIDczLCAyNTQsIDgxLCAxNDMsIDEwOSwgNzIsIDIxMSwgMTI0LFxuICAgIDEyMywgMTgxLCA0NSwgMTIyLCAxNTksIDIzOSwgODgsIDUwLCA2MiwgMTc3LCAxOTEsIDEyMiwgNjQsIDEyNSwgMTc5LCAxMzAsXG4gICAgMjEwLCAyNDMsIDI0MiwgMjE2LCAyNywgMTc3LCAzNCwgNzksIDczLCAyNTQsIDgxLCAxNDMsIDEwOSwgNzIsIDIxMSwgMTI0LFxuICBdKSxcbiAgJ0JJUDAzNDAvYXV4JzogQnVmZmVyLmZyb20oW1xuICAgIDI0MSwgMjM5LCA3OCwgOTQsIDE5MiwgOTksIDIwMiwgMjE4LCAxMDksIDE0OCwgMjAyLCAyNTAsIDE1NywgMTUyLCAxMjYsIDE2MCxcbiAgICAxMDUsIDM4LCA4OCwgNTcsIDIzNiwgMTkzLCAzMSwgMTUxLCA0NSwgMTE5LCAxNjUsIDQ2LCAyMTYsIDE5MywgMjA0LCAxNDQsXG4gICAgMjQxLCAyMzksIDc4LCA5NCwgMTkyLCA5OSwgMjAyLCAyMTgsIDEwOSwgMTQ4LCAyMDIsIDI1MCwgMTU3LCAxNTIsIDEyNiwgMTYwLFxuICAgIDEwNSwgMzgsIDg4LCA1NywgMjM2LCAxOTMsIDMxLCAxNTEsIDQ1LCAxMTksIDE2NSwgNDYsIDIxNiwgMTkzLCAyMDQsIDE0NCxcbiAgXSksXG4gICdCSVAwMzQwL25vbmNlJzogQnVmZmVyLmZyb20oW1xuICAgIDcsIDczLCAxMTksIDUyLCAxNjcsIDE1NSwgMjAzLCA1MywgOTEsIDE1NSwgMTQwLCAxMjUsIDMsIDc5LCAxOCwgMjgsIDI0NCxcbiAgICA1MiwgMjE1LCA2MiwgMjQ3LCA0NSwgMjE4LCAyNSwgMTM1LCAwLCA5NywgMjUxLCA4MiwgMTkxLCAyMzUsIDQ3LCA3LCA3MyxcbiAgICAxMTksIDUyLCAxNjcsIDE1NSwgMjAzLCA1MywgOTEsIDE1NSwgMTQwLCAxMjUsIDMsIDc5LCAxOCwgMjgsIDI0NCwgNTIsIDIxNSxcbiAgICA2MiwgMjQ3LCA0NSwgMjE4LCAyNSwgMTM1LCAwLCA5NywgMjUxLCA4MiwgMTkxLCAyMzUsIDQ3LFxuICBdKSxcbiAgVGFwTGVhZjogQnVmZmVyLmZyb20oW1xuICAgIDE3NCwgMjM0LCAxNDMsIDIyMCwgNjYsIDgsIDE1MiwgNDksIDUsIDExNSwgNzUsIDg4LCA4LCAyOSwgMzAsIDM4LCA1NiwgMjExLFxuICAgIDk1LCAyOCwgMTgxLCA2NCwgOCwgMjEyLCAyMTEsIDg3LCAyMDIsIDMsIDE5MCwgMTIwLCAyMzMsIDIzOCwgMTc0LCAyMzQsIDE0MyxcbiAgICAyMjAsIDY2LCA4LCAxNTIsIDQ5LCA1LCAxMTUsIDc1LCA4OCwgOCwgMjksIDMwLCAzOCwgNTYsIDIxMSwgOTUsIDI4LCAxODEsXG4gICAgNjQsIDgsIDIxMiwgMjExLCA4NywgMjAyLCAzLCAxOTAsIDEyMCwgMjMzLCAyMzgsXG4gIF0pLFxuICBUYXBCcmFuY2g6IEJ1ZmZlci5mcm9tKFtcbiAgICAyNSwgNjUsIDE2MSwgMjQyLCAyMjksIDExMCwgMTg1LCA5NSwgMTYyLCAxNjksIDI0MSwgMTQ4LCAxOTAsIDkyLCAxLCAyNDcsXG4gICAgMzMsIDExMSwgNTEsIDIzNywgMTMwLCAxNzYsIDE0NSwgNzAsIDUyLCAxNDQsIDIwOCwgOTEsIDI0NSwgMjIsIDE2MCwgMjEsIDI1LFxuICAgIDY1LCAxNjEsIDI0MiwgMjI5LCAxMTAsIDE4NSwgOTUsIDE2MiwgMTY5LCAyNDEsIDE0OCwgMTkwLCA5MiwgMSwgMjQ3LCAzMyxcbiAgICAxMTEsIDUxLCAyMzcsIDEzMCwgMTc2LCAxNDUsIDcwLCA1MiwgMTQ0LCAyMDgsIDkxLCAyNDUsIDIyLCAxNjAsIDIxLFxuICBdKSxcbiAgVGFwU2lnaGFzaDogQnVmZmVyLmZyb20oW1xuICAgIDI0NCwgMTAsIDcyLCAyMjMsIDc1LCA0MiwgMTEyLCAyMDAsIDE4MCwgMTQ2LCA3NSwgMjQyLCAxMDEsIDcwLCA5NywgMjM3LCA2MSxcbiAgICAxNDksIDI1MywgMTAyLCAxNjMsIDE5LCAyMzUsIDEzNSwgMzUsIDExNywgMTUxLCAxOTgsIDQwLCAyMjgsIDE2MCwgNDksIDI0NCxcbiAgICAxMCwgNzIsIDIyMywgNzUsIDQyLCAxMTIsIDIwMCwgMTgwLCAxNDYsIDc1LCAyNDIsIDEwMSwgNzAsIDk3LCAyMzcsIDYxLCAxNDksXG4gICAgMjUzLCAxMDIsIDE2MywgMTksIDIzNSwgMTM1LCAzNSwgMTE3LCAxNTEsIDE5OCwgNDAsIDIyOCwgMTYwLCA0OSxcbiAgXSksXG4gIFRhcFR3ZWFrOiBCdWZmZXIuZnJvbShbXG4gICAgMjMyLCAxNSwgMjI1LCA5OSwgMTU2LCAxNTYsIDE2MCwgODAsIDIyNywgMTc1LCAyNywgNTcsIDE5MywgNjcsIDE5OCwgNjIsIDY2LFxuICAgIDE1NiwgMTg4LCAyMzUsIDIxLCAyMTcsIDY0LCAyNTEsIDE4MSwgMTk3LCAxNjEsIDI0NCwgMTc1LCA4NywgMTk3LCAyMzMsIDIzMixcbiAgICAxNSwgMjI1LCA5OSwgMTU2LCAxNTYsIDE2MCwgODAsIDIyNywgMTc1LCAyNywgNTcsIDE5MywgNjcsIDE5OCwgNjIsIDY2LCAxNTYsXG4gICAgMTg4LCAyMzUsIDIxLCAyMTcsIDY0LCAyNTEsIDE4MSwgMTk3LCAxNjEsIDI0NCwgMTc1LCA4NywgMTk3LCAyMzMsXG4gIF0pLFxuICAnS2V5QWdnIGxpc3QnOiBCdWZmZXIuZnJvbShbXG4gICAgNzIsIDI4LCAxNTEsIDI4LCA2MCwgMTEsIDcwLCAyMTUsIDI0MCwgMTc4LCAxMTcsIDE3NCwgODksIDE0MSwgNzgsIDQ0LCAxMjYsXG4gICAgMjE1LCA0OSwgMTU2LCA4OSwgNzQsIDkyLCAxMTAsIDE5OSwgMTU4LCAxNjAsIDIxMiwgMTUzLCAyLCAxNDgsIDI0MCwgNzIsIDI4LFxuICAgIDE1MSwgMjgsIDYwLCAxMSwgNzAsIDIxNSwgMjQwLCAxNzgsIDExNywgMTc0LCA4OSwgMTQxLCA3OCwgNDQsIDEyNiwgMjE1LCA0OSxcbiAgICAxNTYsIDg5LCA3NCwgOTIsIDExMCwgMTk5LCAxNTgsIDE2MCwgMjEyLCAxNTMsIDIsIDE0OCwgMjQwLFxuICBdKSxcbiAgJ0tleUFnZyBjb2VmZmljaWVudCc6IEJ1ZmZlci5mcm9tKFtcbiAgICAxOTEsIDIwMSwgNCwgMywgNzcsIDI4LCAxMzYsIDIzMiwgMjAwLCAxNCwgMzQsIDIyOSwgNjEsIDM2LCA4NiwgMTA5LCAxMDAsXG4gICAgMTMwLCA3OCwgMjE0LCA2NiwgMTE0LCAxMjksIDE5MiwgMTQ1LCAwLCAyNDksIDc3LCAyMDUsIDgyLCAyMDEsIDEyOSwgMTkxLFxuICAgIDIwMSwgNCwgMywgNzcsIDI4LCAxMzYsIDIzMiwgMjAwLCAxNCwgMzQsIDIyOSwgNjEsIDM2LCA4NiwgMTA5LCAxMDAsIDEzMCxcbiAgICA3OCwgMjE0LCA2NiwgMTE0LCAxMjksIDE5MiwgMTQ1LCAwLCAyNDksIDc3LCAyMDUsIDgyLCAyMDEsIDEyOSxcbiAgXSksXG59O1xuZnVuY3Rpb24gdGFnZ2VkSGFzaChwcmVmaXgsIGRhdGEpIHtcbiAgcmV0dXJuIHNoYTI1NihCdWZmZXIuY29uY2F0KFtleHBvcnRzLlRBR0dFRF9IQVNIX1BSRUZJWEVTW3ByZWZpeF0sIGRhdGFdKSk7XG59XG5leHBvcnRzLnRhZ2dlZEhhc2ggPSB0YWdnZWRIYXNoO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/crypto.js\n\n}")},"./node_modules/bitcoinjs-lib/src/ecc_lib.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.getEccLib = exports.initEccLib = void 0;\nconst _ECCLIB_CACHE = {};\n/**\n * Initializes the ECC library with the provided instance.\n * If `eccLib` is `undefined`, the library will be cleared.\n * If `eccLib` is a new instance, it will be verified before setting it as the active library.\n *\n * @param eccLib The instance of the ECC library to initialize.\n * @param opts Extra initialization options. Use {DANGER_DO_NOT_VERIFY_ECCLIB:true} if ecc verification should not be executed. Not recommended!\n */\nfunction initEccLib(eccLib, opts) {\n if (!eccLib) {\n // allow clearing the library\n _ECCLIB_CACHE.eccLib = eccLib;\n } else if (eccLib !== _ECCLIB_CACHE.eccLib) {\n if (!opts?.DANGER_DO_NOT_VERIFY_ECCLIB)\n // new instance, verify it\n verifyEcc(eccLib);\n _ECCLIB_CACHE.eccLib = eccLib;\n }\n}\nexports.initEccLib = initEccLib;\n/**\n * Retrieves the ECC Library instance.\n * Throws an error if the ECC Library is not provided.\n * You must call initEccLib() with a valid TinySecp256k1Interface instance before calling this function.\n * @returns The ECC Library instance.\n * @throws Error if the ECC Library is not provided.\n */\nfunction getEccLib() {\n if (!_ECCLIB_CACHE.eccLib)\n throw new Error(\n 'No ECC Library provided. You must call initEccLib() with a valid TinySecp256k1Interface instance',\n );\n return _ECCLIB_CACHE.eccLib;\n}\nexports.getEccLib = getEccLib;\nconst h = hex => Buffer.from(hex, 'hex');\n/**\n * Verifies the ECC functionality.\n *\n * @param ecc - The TinySecp256k1Interface object.\n */\nfunction verifyEcc(ecc) {\n assert(typeof ecc.isXOnlyPoint === 'function');\n assert(\n ecc.isXOnlyPoint(\n h('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'),\n ),\n );\n assert(\n ecc.isXOnlyPoint(\n h('fffffffffffffffffffffffffffffffffffffffffffffffffffffffeeffffc2e'),\n ),\n );\n assert(\n ecc.isXOnlyPoint(\n h('f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9'),\n ),\n );\n assert(\n ecc.isXOnlyPoint(\n h('0000000000000000000000000000000000000000000000000000000000000001'),\n ),\n );\n assert(\n !ecc.isXOnlyPoint(\n h('0000000000000000000000000000000000000000000000000000000000000000'),\n ),\n );\n assert(\n !ecc.isXOnlyPoint(\n h('fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'),\n ),\n );\n assert(typeof ecc.xOnlyPointAddTweak === 'function');\n tweakAddVectors.forEach(t => {\n const r = ecc.xOnlyPointAddTweak(h(t.pubkey), h(t.tweak));\n if (t.result === null) {\n assert(r === null);\n } else {\n assert(r !== null);\n assert(r.parity === t.parity);\n assert(Buffer.from(r.xOnlyPubkey).equals(h(t.result)));\n }\n });\n}\nfunction assert(bool) {\n if (!bool) throw new Error('ecc library invalid');\n}\nconst tweakAddVectors = [\n {\n pubkey: '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n tweak: 'fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140',\n parity: -1,\n result: null,\n },\n {\n pubkey: '1617d38ed8d8657da4d4761e8057bc396ea9e4b9d29776d4be096016dbd2509b',\n tweak: 'a8397a935f0dfceba6ba9618f6451ef4d80637abf4e6af2669fbc9de6a8fd2ac',\n parity: 1,\n result: 'e478f99dab91052ab39a33ea35fd5e6e4933f4d28023cd597c9a1f6760346adf',\n },\n {\n pubkey: '2c0b7cf95324a07d05398b240174dc0c2be444d96b159aa6c7f7b1e668680991',\n tweak: '823c3cd2142744b075a87eade7e1b8678ba308d566226a0056ca2b7a76f86b47',\n parity: 0,\n result: '9534f8dc8c6deda2dc007655981c78b49c5d96c778fbf363462a11ec9dfd948c',\n },\n];\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvZWNjX2xpYi5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsaUJBQWlCLEdBQUcsa0JBQWtCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELGtDQUFrQztBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL2VjY19saWIuanM/YWYyOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRFY2NMaWIgPSBleHBvcnRzLmluaXRFY2NMaWIgPSB2b2lkIDA7XG5jb25zdCBfRUNDTElCX0NBQ0hFID0ge307XG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBFQ0MgbGlicmFyeSB3aXRoIHRoZSBwcm92aWRlZCBpbnN0YW5jZS5cbiAqIElmIGBlY2NMaWJgIGlzIGB1bmRlZmluZWRgLCB0aGUgbGlicmFyeSB3aWxsIGJlIGNsZWFyZWQuXG4gKiBJZiBgZWNjTGliYCBpcyBhIG5ldyBpbnN0YW5jZSwgaXQgd2lsbCBiZSB2ZXJpZmllZCBiZWZvcmUgc2V0dGluZyBpdCBhcyB0aGUgYWN0aXZlIGxpYnJhcnkuXG4gKlxuICogQHBhcmFtIGVjY0xpYiBUaGUgaW5zdGFuY2Ugb2YgdGhlIEVDQyBsaWJyYXJ5IHRvIGluaXRpYWxpemUuXG4gKiBAcGFyYW0gb3B0cyBFeHRyYSBpbml0aWFsaXphdGlvbiBvcHRpb25zLiBVc2Uge0RBTkdFUl9ET19OT1RfVkVSSUZZX0VDQ0xJQjp0cnVlfSBpZiBlY2MgdmVyaWZpY2F0aW9uIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQuIE5vdCByZWNvbW1lbmRlZCFcbiAqL1xuZnVuY3Rpb24gaW5pdEVjY0xpYihlY2NMaWIsIG9wdHMpIHtcbiAgaWYgKCFlY2NMaWIpIHtcbiAgICAvLyBhbGxvdyBjbGVhcmluZyB0aGUgbGlicmFyeVxuICAgIF9FQ0NMSUJfQ0FDSEUuZWNjTGliID0gZWNjTGliO1xuICB9IGVsc2UgaWYgKGVjY0xpYiAhPT0gX0VDQ0xJQl9DQUNIRS5lY2NMaWIpIHtcbiAgICBpZiAoIW9wdHM/LkRBTkdFUl9ET19OT1RfVkVSSUZZX0VDQ0xJQilcbiAgICAgIC8vIG5ldyBpbnN0YW5jZSwgdmVyaWZ5IGl0XG4gICAgICB2ZXJpZnlFY2MoZWNjTGliKTtcbiAgICBfRUNDTElCX0NBQ0hFLmVjY0xpYiA9IGVjY0xpYjtcbiAgfVxufVxuZXhwb3J0cy5pbml0RWNjTGliID0gaW5pdEVjY0xpYjtcbi8qKlxuICogUmV0cmlldmVzIHRoZSBFQ0MgTGlicmFyeSBpbnN0YW5jZS5cbiAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgRUNDIExpYnJhcnkgaXMgbm90IHByb3ZpZGVkLlxuICogWW91IG11c3QgY2FsbCBpbml0RWNjTGliKCkgd2l0aCBhIHZhbGlkIFRpbnlTZWNwMjU2azFJbnRlcmZhY2UgaW5zdGFuY2UgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBFQ0MgTGlicmFyeSBpbnN0YW5jZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIEVDQyBMaWJyYXJ5IGlzIG5vdCBwcm92aWRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RWNjTGliKCkge1xuICBpZiAoIV9FQ0NMSUJfQ0FDSEUuZWNjTGliKVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdObyBFQ0MgTGlicmFyeSBwcm92aWRlZC4gWW91IG11c3QgY2FsbCBpbml0RWNjTGliKCkgd2l0aCBhIHZhbGlkIFRpbnlTZWNwMjU2azFJbnRlcmZhY2UgaW5zdGFuY2UnLFxuICAgICk7XG4gIHJldHVybiBfRUNDTElCX0NBQ0hFLmVjY0xpYjtcbn1cbmV4cG9ydHMuZ2V0RWNjTGliID0gZ2V0RWNjTGliO1xuY29uc3QgaCA9IGhleCA9PiBCdWZmZXIuZnJvbShoZXgsICdoZXgnKTtcbi8qKlxuICogVmVyaWZpZXMgdGhlIEVDQyBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEBwYXJhbSBlY2MgLSBUaGUgVGlueVNlY3AyNTZrMUludGVyZmFjZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHZlcmlmeUVjYyhlY2MpIHtcbiAgYXNzZXJ0KHR5cGVvZiBlY2MuaXNYT25seVBvaW50ID09PSAnZnVuY3Rpb24nKTtcbiAgYXNzZXJ0KFxuICAgIGVjYy5pc1hPbmx5UG9pbnQoXG4gICAgICBoKCc3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4JyksXG4gICAgKSxcbiAgKTtcbiAgYXNzZXJ0KFxuICAgIGVjYy5pc1hPbmx5UG9pbnQoXG4gICAgICBoKCdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWVmZmZmYzJlJyksXG4gICAgKSxcbiAgKTtcbiAgYXNzZXJ0KFxuICAgIGVjYy5pc1hPbmx5UG9pbnQoXG4gICAgICBoKCdmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5JyksXG4gICAgKSxcbiAgKTtcbiAgYXNzZXJ0KFxuICAgIGVjYy5pc1hPbmx5UG9pbnQoXG4gICAgICBoKCcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyksXG4gICAgKSxcbiAgKTtcbiAgYXNzZXJ0KFxuICAgICFlY2MuaXNYT25seVBvaW50KFxuICAgICAgaCgnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcpLFxuICAgICksXG4gICk7XG4gIGFzc2VydChcbiAgICAhZWNjLmlzWE9ubHlQb2ludChcbiAgICAgIGgoJ2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlZmZmZmZjMmYnKSxcbiAgICApLFxuICApO1xuICBhc3NlcnQodHlwZW9mIGVjYy54T25seVBvaW50QWRkVHdlYWsgPT09ICdmdW5jdGlvbicpO1xuICB0d2Vha0FkZFZlY3RvcnMuZm9yRWFjaCh0ID0+IHtcbiAgICBjb25zdCByID0gZWNjLnhPbmx5UG9pbnRBZGRUd2VhayhoKHQucHVia2V5KSwgaCh0LnR3ZWFrKSk7XG4gICAgaWYgKHQucmVzdWx0ID09PSBudWxsKSB7XG4gICAgICBhc3NlcnQociA9PT0gbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChyICE9PSBudWxsKTtcbiAgICAgIGFzc2VydChyLnBhcml0eSA9PT0gdC5wYXJpdHkpO1xuICAgICAgYXNzZXJ0KEJ1ZmZlci5mcm9tKHIueE9ubHlQdWJrZXkpLmVxdWFscyhoKHQucmVzdWx0KSkpO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBhc3NlcnQoYm9vbCkge1xuICBpZiAoIWJvb2wpIHRocm93IG5ldyBFcnJvcignZWNjIGxpYnJhcnkgaW52YWxpZCcpO1xufVxuY29uc3QgdHdlYWtBZGRWZWN0b3JzID0gW1xuICB7XG4gICAgcHVia2V5OiAnNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCcsXG4gICAgdHdlYWs6ICdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQwJyxcbiAgICBwYXJpdHk6IC0xLFxuICAgIHJlc3VsdDogbnVsbCxcbiAgfSxcbiAge1xuICAgIHB1YmtleTogJzE2MTdkMzhlZDhkODY1N2RhNGQ0NzYxZTgwNTdiYzM5NmVhOWU0YjlkMjk3NzZkNGJlMDk2MDE2ZGJkMjUwOWInLFxuICAgIHR3ZWFrOiAnYTgzOTdhOTM1ZjBkZmNlYmE2YmE5NjE4ZjY0NTFlZjRkODA2MzdhYmY0ZTZhZjI2NjlmYmM5ZGU2YThmZDJhYycsXG4gICAgcGFyaXR5OiAxLFxuICAgIHJlc3VsdDogJ2U0NzhmOTlkYWI5MTA1MmFiMzlhMzNlYTM1ZmQ1ZTZlNDkzM2Y0ZDI4MDIzY2Q1OTdjOWExZjY3NjAzNDZhZGYnLFxuICB9LFxuICB7XG4gICAgcHVia2V5OiAnMmMwYjdjZjk1MzI0YTA3ZDA1Mzk4YjI0MDE3NGRjMGMyYmU0NDRkOTZiMTU5YWE2YzdmN2IxZTY2ODY4MDk5MScsXG4gICAgdHdlYWs6ICc4MjNjM2NkMjE0Mjc0NGIwNzVhODdlYWRlN2UxYjg2NzhiYTMwOGQ1NjYyMjZhMDA1NmNhMmI3YTc2Zjg2YjQ3JyxcbiAgICBwYXJpdHk6IDAsXG4gICAgcmVzdWx0OiAnOTUzNGY4ZGM4YzZkZWRhMmRjMDA3NjU1OTgxYzc4YjQ5YzVkOTZjNzc4ZmJmMzYzNDYyYTExZWM5ZGZkOTQ4YycsXG4gIH0sXG5dO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/ecc_lib.js\n\n}")},"./node_modules/bitcoinjs-lib/src/index.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nexports.initEccLib =\n exports.Transaction =\n exports.opcodes =\n exports.Psbt =\n exports.Block =\n exports.script =\n exports.payments =\n exports.networks =\n exports.crypto =\n exports.address =\n void 0;\nconst address = __webpack_require__(/*! ./address */ "./node_modules/bitcoinjs-lib/src/address.js");\nexports.address = address;\nconst crypto = __webpack_require__(/*! ./crypto */ "./node_modules/bitcoinjs-lib/src/crypto.js");\nexports.crypto = crypto;\nconst networks = __webpack_require__(/*! ./networks */ "./node_modules/bitcoinjs-lib/src/networks.js");\nexports.networks = networks;\nconst payments = __webpack_require__(/*! ./payments */ "./node_modules/bitcoinjs-lib/src/payments/index.js");\nexports.payments = payments;\nconst script = __webpack_require__(/*! ./script */ "./node_modules/bitcoinjs-lib/src/script.js");\nexports.script = script;\nvar block_1 = __webpack_require__(/*! ./block */ "./node_modules/bitcoinjs-lib/src/block.js");\nObject.defineProperty(exports, "Block", ({\n enumerable: true,\n get: function () {\n return block_1.Block;\n },\n}));\nvar psbt_1 = __webpack_require__(/*! ./psbt */ "./node_modules/bitcoinjs-lib/src/psbt.js");\nObject.defineProperty(exports, "Psbt", ({\n enumerable: true,\n get: function () {\n return psbt_1.Psbt;\n },\n}));\n/** @hidden */\nvar ops_1 = __webpack_require__(/*! ./ops */ "./node_modules/bitcoinjs-lib/src/ops.js");\nObject.defineProperty(exports, "opcodes", ({\n enumerable: true,\n get: function () {\n return ops_1.OPS;\n },\n}));\nvar transaction_1 = __webpack_require__(/*! ./transaction */ "./node_modules/bitcoinjs-lib/src/transaction.js");\nObject.defineProperty(exports, "Transaction", ({\n enumerable: true,\n get: function () {\n return transaction_1.Transaction;\n },\n}));\nvar ecc_lib_1 = __webpack_require__(/*! ./ecc_lib */ "./node_modules/bitcoinjs-lib/src/ecc_lib.js");\nObject.defineProperty(exports, "initEccLib", ({\n enumerable: true,\n get: function () {\n return ecc_lib_1.initEccLib;\n },\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsa0JBQWtCO0FBQ2xCLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsZUFBZTtBQUNqQixFQUFFLFlBQVk7QUFDZCxFQUFFLGFBQWE7QUFDZixFQUFFLGNBQWM7QUFDaEIsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsZUFBZTtBQUNqQjtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLDhEQUFXO0FBQ25DLGVBQWU7QUFDZixlQUFlLG1CQUFPLENBQUMsNERBQVU7QUFDakMsY0FBYztBQUNkLGlCQUFpQixtQkFBTyxDQUFDLGdFQUFZO0FBQ3JDLGdCQUFnQjtBQUNoQixpQkFBaUIsbUJBQU8sQ0FBQyxzRUFBWTtBQUNyQyxnQkFBZ0I7QUFDaEIsZUFBZSxtQkFBTyxDQUFDLDREQUFVO0FBQ2pDLGNBQWM7QUFDZCxjQUFjLG1CQUFPLENBQUMsMERBQVM7QUFDL0IseUNBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEVBQUM7QUFDRixhQUFhLG1CQUFPLENBQUMsd0RBQVE7QUFDN0Isd0NBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEVBQUM7QUFDRjtBQUNBLFlBQVksbUJBQU8sQ0FBQyxzREFBTztBQUMzQiwyQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMsRUFBQztBQUNGLG9CQUFvQixtQkFBTyxDQUFDLHNFQUFlO0FBQzNDLCtDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFQUFDO0FBQ0YsZ0JBQWdCLG1CQUFPLENBQUMsOERBQVc7QUFDbkMsOENBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXRjb2luanMtbGliL3NyYy9pbmRleC5qcz81OWRhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmluaXRFY2NMaWIgPVxuICBleHBvcnRzLlRyYW5zYWN0aW9uID1cbiAgZXhwb3J0cy5vcGNvZGVzID1cbiAgZXhwb3J0cy5Qc2J0ID1cbiAgZXhwb3J0cy5CbG9jayA9XG4gIGV4cG9ydHMuc2NyaXB0ID1cbiAgZXhwb3J0cy5wYXltZW50cyA9XG4gIGV4cG9ydHMubmV0d29ya3MgPVxuICBleHBvcnRzLmNyeXB0byA9XG4gIGV4cG9ydHMuYWRkcmVzcyA9XG4gICAgdm9pZCAwO1xuY29uc3QgYWRkcmVzcyA9IHJlcXVpcmUoJy4vYWRkcmVzcycpO1xuZXhwb3J0cy5hZGRyZXNzID0gYWRkcmVzcztcbmNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJy4vY3J5cHRvJyk7XG5leHBvcnRzLmNyeXB0byA9IGNyeXB0bztcbmNvbnN0IG5ldHdvcmtzID0gcmVxdWlyZSgnLi9uZXR3b3JrcycpO1xuZXhwb3J0cy5uZXR3b3JrcyA9IG5ldHdvcmtzO1xuY29uc3QgcGF5bWVudHMgPSByZXF1aXJlKCcuL3BheW1lbnRzJyk7XG5leHBvcnRzLnBheW1lbnRzID0gcGF5bWVudHM7XG5jb25zdCBzY3JpcHQgPSByZXF1aXJlKCcuL3NjcmlwdCcpO1xuZXhwb3J0cy5zY3JpcHQgPSBzY3JpcHQ7XG52YXIgYmxvY2tfMSA9IHJlcXVpcmUoJy4vYmxvY2snKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnQmxvY2snLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBibG9ja18xLkJsb2NrO1xuICB9LFxufSk7XG52YXIgcHNidF8xID0gcmVxdWlyZSgnLi9wc2J0Jyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ1BzYnQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwc2J0XzEuUHNidDtcbiAgfSxcbn0pO1xuLyoqIEBoaWRkZW4gKi9cbnZhciBvcHNfMSA9IHJlcXVpcmUoJy4vb3BzJyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ29wY29kZXMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBvcHNfMS5PUFM7XG4gIH0sXG59KTtcbnZhciB0cmFuc2FjdGlvbl8xID0gcmVxdWlyZSgnLi90cmFuc2FjdGlvbicpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdUcmFuc2FjdGlvbicsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uXzEuVHJhbnNhY3Rpb247XG4gIH0sXG59KTtcbnZhciBlY2NfbGliXzEgPSByZXF1aXJlKCcuL2VjY19saWInKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnaW5pdEVjY0xpYicsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGVjY19saWJfMS5pbml0RWNjTGliO1xuICB9LFxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/index.js\n\n}')},"./node_modules/bitcoinjs-lib/src/merkle.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.fastMerkleRoot = void 0;\n/**\n * Calculates the Merkle root of an array of buffers using a specified digest function.\n *\n * @param values - The array of buffers.\n * @param digestFn - The digest function used to calculate the hash of the concatenated buffers.\n * @returns The Merkle root as a buffer.\n * @throws {TypeError} If the values parameter is not an array or the digestFn parameter is not a function.\n */\nfunction fastMerkleRoot(values, digestFn) {\n if (!Array.isArray(values)) throw TypeError('Expected values Array');\n if (typeof digestFn !== 'function')\n throw TypeError('Expected digest Function');\n let length = values.length;\n const results = values.concat();\n while (length > 1) {\n let j = 0;\n for (let i = 0; i < length; i += 2, ++j) {\n const left = results[i];\n const right = i + 1 === length ? left : results[i + 1];\n const data = Buffer.concat([left, right]);\n results[j] = digestFn(data);\n }\n length = j;\n }\n return results[0];\n}\nexports.fastMerkleRoot = fastMerkleRoot;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvbWVya2xlLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxXQUFXO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixZQUFZO0FBQ2hDO0FBQ0E7QUFDQSxtQkFBbUIsTUFBTTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXRjb2luanMtbGliL3NyYy9tZXJrbGUuanM/YWIyZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5mYXN0TWVya2xlUm9vdCA9IHZvaWQgMDtcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgTWVya2xlIHJvb3Qgb2YgYW4gYXJyYXkgb2YgYnVmZmVycyB1c2luZyBhIHNwZWNpZmllZCBkaWdlc3QgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHZhbHVlcyAtIFRoZSBhcnJheSBvZiBidWZmZXJzLlxuICogQHBhcmFtIGRpZ2VzdEZuIC0gVGhlIGRpZ2VzdCBmdW5jdGlvbiB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaGFzaCBvZiB0aGUgY29uY2F0ZW5hdGVkIGJ1ZmZlcnMuXG4gKiBAcmV0dXJucyBUaGUgTWVya2xlIHJvb3QgYXMgYSBidWZmZXIuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSB2YWx1ZXMgcGFyYW1ldGVyIGlzIG5vdCBhbiBhcnJheSBvciB0aGUgZGlnZXN0Rm4gcGFyYW1ldGVyIGlzIG5vdCBhIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBmYXN0TWVya2xlUm9vdCh2YWx1ZXMsIGRpZ2VzdEZuKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB0aHJvdyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHZhbHVlcyBBcnJheScpO1xuICBpZiAodHlwZW9mIGRpZ2VzdEZuICE9PSAnZnVuY3Rpb24nKVxuICAgIHRocm93IFR5cGVFcnJvcignRXhwZWN0ZWQgZGlnZXN0IEZ1bmN0aW9uJyk7XG4gIGxldCBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoO1xuICBjb25zdCByZXN1bHRzID0gdmFsdWVzLmNvbmNhdCgpO1xuICB3aGlsZSAobGVuZ3RoID4gMSkge1xuICAgIGxldCBqID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAyLCArK2opIHtcbiAgICAgIGNvbnN0IGxlZnQgPSByZXN1bHRzW2ldO1xuICAgICAgY29uc3QgcmlnaHQgPSBpICsgMSA9PT0gbGVuZ3RoID8gbGVmdCA6IHJlc3VsdHNbaSArIDFdO1xuICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5jb25jYXQoW2xlZnQsIHJpZ2h0XSk7XG4gICAgICByZXN1bHRzW2pdID0gZGlnZXN0Rm4oZGF0YSk7XG4gICAgfVxuICAgIGxlbmd0aCA9IGo7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHNbMF07XG59XG5leHBvcnRzLmZhc3RNZXJrbGVSb290ID0gZmFzdE1lcmtsZVJvb3Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/merkle.js\n\n}")},"./node_modules/bitcoinjs-lib/src/networks.js"(__unused_webpack_module,exports){"use strict";eval("{\n// https://en.bitcoin.it/wiki/List_of_address_prefixes\n// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.testnet = exports.regtest = exports.bitcoin = void 0;\n/**\n * Represents the Bitcoin network configuration.\n */\nexports.bitcoin = {\n /**\n * The message prefix used for signing Bitcoin messages.\n */\n messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n /**\n * The Bech32 prefix used for Bitcoin addresses.\n */\n bech32: 'bc',\n /**\n * The BIP32 key prefixes for Bitcoin.\n */\n bip32: {\n /**\n * The public key prefix for BIP32 extended public keys.\n */\n public: 0x0488b21e,\n /**\n * The private key prefix for BIP32 extended private keys.\n */\n private: 0x0488ade4,\n },\n /**\n * The prefix for Bitcoin public key hashes.\n */\n pubKeyHash: 0x00,\n /**\n * The prefix for Bitcoin script hashes.\n */\n scriptHash: 0x05,\n /**\n * The prefix for Bitcoin Wallet Import Format (WIF) private keys.\n */\n wif: 0x80,\n};\n/**\n * Represents the regtest network configuration.\n */\nexports.regtest = {\n messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n bech32: 'bcrt',\n bip32: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n pubKeyHash: 0x6f,\n scriptHash: 0xc4,\n wif: 0xef,\n};\n/**\n * Represents the testnet network configuration.\n */\nexports.testnet = {\n messagePrefix: '\\x18Bitcoin Signed Message:\\n',\n bech32: 'tb',\n bip32: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n pubKeyHash: 0x6f,\n scriptHash: 0xc4,\n wif: 0xef,\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvbmV0d29ya3MuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGVBQWUsR0FBRyxlQUFlLEdBQUcsZUFBZTtBQUNuRDtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXRjb2luanMtbGliL3NyYy9uZXR3b3Jrcy5qcz8wM2EzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZW4uYml0Y29pbi5pdC93aWtpL0xpc3Rfb2ZfYWRkcmVzc19wcmVmaXhlc1xuLy8gRG9nZWNvaW4gQklQMzIgaXMgYSBwcm9wb3NlZCBzdGFuZGFyZDogaHR0cHM6Ly9iaXRjb2ludGFsay5vcmcvaW5kZXgucGhwP3RvcGljPTQwOTczMVxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMudGVzdG5ldCA9IGV4cG9ydHMucmVndGVzdCA9IGV4cG9ydHMuYml0Y29pbiA9IHZvaWQgMDtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgQml0Y29pbiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydHMuYml0Y29pbiA9IHtcbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHByZWZpeCB1c2VkIGZvciBzaWduaW5nIEJpdGNvaW4gbWVzc2FnZXMuXG4gICAqL1xuICBtZXNzYWdlUHJlZml4OiAnXFx4MThCaXRjb2luIFNpZ25lZCBNZXNzYWdlOlxcbicsXG4gIC8qKlxuICAgKiBUaGUgQmVjaDMyIHByZWZpeCB1c2VkIGZvciBCaXRjb2luIGFkZHJlc3Nlcy5cbiAgICovXG4gIGJlY2gzMjogJ2JjJyxcbiAgLyoqXG4gICAqIFRoZSBCSVAzMiBrZXkgcHJlZml4ZXMgZm9yIEJpdGNvaW4uXG4gICAqL1xuICBiaXAzMjoge1xuICAgIC8qKlxuICAgICAqIFRoZSBwdWJsaWMga2V5IHByZWZpeCBmb3IgQklQMzIgZXh0ZW5kZWQgcHVibGljIGtleXMuXG4gICAgICovXG4gICAgcHVibGljOiAweDA0ODhiMjFlLFxuICAgIC8qKlxuICAgICAqIFRoZSBwcml2YXRlIGtleSBwcmVmaXggZm9yIEJJUDMyIGV4dGVuZGVkIHByaXZhdGUga2V5cy5cbiAgICAgKi9cbiAgICBwcml2YXRlOiAweDA0ODhhZGU0LFxuICB9LFxuICAvKipcbiAgICogVGhlIHByZWZpeCBmb3IgQml0Y29pbiBwdWJsaWMga2V5IGhhc2hlcy5cbiAgICovXG4gIHB1YktleUhhc2g6IDB4MDAsXG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IGZvciBCaXRjb2luIHNjcmlwdCBoYXNoZXMuXG4gICAqL1xuICBzY3JpcHRIYXNoOiAweDA1LFxuICAvKipcbiAgICogVGhlIHByZWZpeCBmb3IgQml0Y29pbiBXYWxsZXQgSW1wb3J0IEZvcm1hdCAoV0lGKSBwcml2YXRlIGtleXMuXG4gICAqL1xuICB3aWY6IDB4ODAsXG59O1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSByZWd0ZXN0IG5ldHdvcmsgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0cy5yZWd0ZXN0ID0ge1xuICBtZXNzYWdlUHJlZml4OiAnXFx4MThCaXRjb2luIFNpZ25lZCBNZXNzYWdlOlxcbicsXG4gIGJlY2gzMjogJ2JjcnQnLFxuICBiaXAzMjoge1xuICAgIHB1YmxpYzogMHgwNDM1ODdjZixcbiAgICBwcml2YXRlOiAweDA0MzU4Mzk0LFxuICB9LFxuICBwdWJLZXlIYXNoOiAweDZmLFxuICBzY3JpcHRIYXNoOiAweGM0LFxuICB3aWY6IDB4ZWYsXG59O1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSB0ZXN0bmV0IG5ldHdvcmsgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0cy50ZXN0bmV0ID0ge1xuICBtZXNzYWdlUHJlZml4OiAnXFx4MThCaXRjb2luIFNpZ25lZCBNZXNzYWdlOlxcbicsXG4gIGJlY2gzMjogJ3RiJyxcbiAgYmlwMzI6IHtcbiAgICBwdWJsaWM6IDB4MDQzNTg3Y2YsXG4gICAgcHJpdmF0ZTogMHgwNDM1ODM5NCxcbiAgfSxcbiAgcHViS2V5SGFzaDogMHg2ZixcbiAgc2NyaXB0SGFzaDogMHhjNCxcbiAgd2lmOiAweGVmLFxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/networks.js\n\n}")},"./node_modules/bitcoinjs-lib/src/ops.js"(__unused_webpack_module,exports){"use strict";eval('{\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nexports.REVERSE_OPS = exports.OPS = void 0;\nconst OPS = {\n OP_FALSE: 0,\n OP_0: 0,\n OP_PUSHDATA1: 76,\n OP_PUSHDATA2: 77,\n OP_PUSHDATA4: 78,\n OP_1NEGATE: 79,\n OP_RESERVED: 80,\n OP_TRUE: 81,\n OP_1: 81,\n OP_2: 82,\n OP_3: 83,\n OP_4: 84,\n OP_5: 85,\n OP_6: 86,\n OP_7: 87,\n OP_8: 88,\n OP_9: 89,\n OP_10: 90,\n OP_11: 91,\n OP_12: 92,\n OP_13: 93,\n OP_14: 94,\n OP_15: 95,\n OP_16: 96,\n OP_NOP: 97,\n OP_VER: 98,\n OP_IF: 99,\n OP_NOTIF: 100,\n OP_VERIF: 101,\n OP_VERNOTIF: 102,\n OP_ELSE: 103,\n OP_ENDIF: 104,\n OP_VERIFY: 105,\n OP_RETURN: 106,\n OP_TOALTSTACK: 107,\n OP_FROMALTSTACK: 108,\n OP_2DROP: 109,\n OP_2DUP: 110,\n OP_3DUP: 111,\n OP_2OVER: 112,\n OP_2ROT: 113,\n OP_2SWAP: 114,\n OP_IFDUP: 115,\n OP_DEPTH: 116,\n OP_DROP: 117,\n OP_DUP: 118,\n OP_NIP: 119,\n OP_OVER: 120,\n OP_PICK: 121,\n OP_ROLL: 122,\n OP_ROT: 123,\n OP_SWAP: 124,\n OP_TUCK: 125,\n OP_CAT: 126,\n OP_SUBSTR: 127,\n OP_LEFT: 128,\n OP_RIGHT: 129,\n OP_SIZE: 130,\n OP_INVERT: 131,\n OP_AND: 132,\n OP_OR: 133,\n OP_XOR: 134,\n OP_EQUAL: 135,\n OP_EQUALVERIFY: 136,\n OP_RESERVED1: 137,\n OP_RESERVED2: 138,\n OP_1ADD: 139,\n OP_1SUB: 140,\n OP_2MUL: 141,\n OP_2DIV: 142,\n OP_NEGATE: 143,\n OP_ABS: 144,\n OP_NOT: 145,\n OP_0NOTEQUAL: 146,\n OP_ADD: 147,\n OP_SUB: 148,\n OP_MUL: 149,\n OP_DIV: 150,\n OP_MOD: 151,\n OP_LSHIFT: 152,\n OP_RSHIFT: 153,\n OP_BOOLAND: 154,\n OP_BOOLOR: 155,\n OP_NUMEQUAL: 156,\n OP_NUMEQUALVERIFY: 157,\n OP_NUMNOTEQUAL: 158,\n OP_LESSTHAN: 159,\n OP_GREATERTHAN: 160,\n OP_LESSTHANOREQUAL: 161,\n OP_GREATERTHANOREQUAL: 162,\n OP_MIN: 163,\n OP_MAX: 164,\n OP_WITHIN: 165,\n OP_RIPEMD160: 166,\n OP_SHA1: 167,\n OP_SHA256: 168,\n OP_HASH160: 169,\n OP_HASH256: 170,\n OP_CODESEPARATOR: 171,\n OP_CHECKSIG: 172,\n OP_CHECKSIGVERIFY: 173,\n OP_CHECKMULTISIG: 174,\n OP_CHECKMULTISIGVERIFY: 175,\n OP_NOP1: 176,\n OP_NOP2: 177,\n OP_CHECKLOCKTIMEVERIFY: 177,\n OP_NOP3: 178,\n OP_CHECKSEQUENCEVERIFY: 178,\n OP_NOP4: 179,\n OP_NOP5: 180,\n OP_NOP6: 181,\n OP_NOP7: 182,\n OP_NOP8: 183,\n OP_NOP9: 184,\n OP_NOP10: 185,\n OP_CHECKSIGADD: 186,\n OP_PUBKEYHASH: 253,\n OP_PUBKEY: 254,\n OP_INVALIDOPCODE: 255,\n};\nexports.OPS = OPS;\nconst REVERSE_OPS = {};\nexports.REVERSE_OPS = REVERSE_OPS;\nfor (const op of Object.keys(OPS)) {\n const code = OPS[op];\n REVERSE_OPS[code] = op;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvb3BzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELG1CQUFtQixHQUFHLFdBQVc7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXRjb2luanMtbGliL3NyYy9vcHMuanM/ZGI5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5SRVZFUlNFX09QUyA9IGV4cG9ydHMuT1BTID0gdm9pZCAwO1xuY29uc3QgT1BTID0ge1xuICBPUF9GQUxTRTogMCxcbiAgT1BfMDogMCxcbiAgT1BfUFVTSERBVEExOiA3NixcbiAgT1BfUFVTSERBVEEyOiA3NyxcbiAgT1BfUFVTSERBVEE0OiA3OCxcbiAgT1BfMU5FR0FURTogNzksXG4gIE9QX1JFU0VSVkVEOiA4MCxcbiAgT1BfVFJVRTogODEsXG4gIE9QXzE6IDgxLFxuICBPUF8yOiA4MixcbiAgT1BfMzogODMsXG4gIE9QXzQ6IDg0LFxuICBPUF81OiA4NSxcbiAgT1BfNjogODYsXG4gIE9QXzc6IDg3LFxuICBPUF84OiA4OCxcbiAgT1BfOTogODksXG4gIE9QXzEwOiA5MCxcbiAgT1BfMTE6IDkxLFxuICBPUF8xMjogOTIsXG4gIE9QXzEzOiA5MyxcbiAgT1BfMTQ6IDk0LFxuICBPUF8xNTogOTUsXG4gIE9QXzE2OiA5NixcbiAgT1BfTk9QOiA5NyxcbiAgT1BfVkVSOiA5OCxcbiAgT1BfSUY6IDk5LFxuICBPUF9OT1RJRjogMTAwLFxuICBPUF9WRVJJRjogMTAxLFxuICBPUF9WRVJOT1RJRjogMTAyLFxuICBPUF9FTFNFOiAxMDMsXG4gIE9QX0VORElGOiAxMDQsXG4gIE9QX1ZFUklGWTogMTA1LFxuICBPUF9SRVRVUk46IDEwNixcbiAgT1BfVE9BTFRTVEFDSzogMTA3LFxuICBPUF9GUk9NQUxUU1RBQ0s6IDEwOCxcbiAgT1BfMkRST1A6IDEwOSxcbiAgT1BfMkRVUDogMTEwLFxuICBPUF8zRFVQOiAxMTEsXG4gIE9QXzJPVkVSOiAxMTIsXG4gIE9QXzJST1Q6IDExMyxcbiAgT1BfMlNXQVA6IDExNCxcbiAgT1BfSUZEVVA6IDExNSxcbiAgT1BfREVQVEg6IDExNixcbiAgT1BfRFJPUDogMTE3LFxuICBPUF9EVVA6IDExOCxcbiAgT1BfTklQOiAxMTksXG4gIE9QX09WRVI6IDEyMCxcbiAgT1BfUElDSzogMTIxLFxuICBPUF9ST0xMOiAxMjIsXG4gIE9QX1JPVDogMTIzLFxuICBPUF9TV0FQOiAxMjQsXG4gIE9QX1RVQ0s6IDEyNSxcbiAgT1BfQ0FUOiAxMjYsXG4gIE9QX1NVQlNUUjogMTI3LFxuICBPUF9MRUZUOiAxMjgsXG4gIE9QX1JJR0hUOiAxMjksXG4gIE9QX1NJWkU6IDEzMCxcbiAgT1BfSU5WRVJUOiAxMzEsXG4gIE9QX0FORDogMTMyLFxuICBPUF9PUjogMTMzLFxuICBPUF9YT1I6IDEzNCxcbiAgT1BfRVFVQUw6IDEzNSxcbiAgT1BfRVFVQUxWRVJJRlk6IDEzNixcbiAgT1BfUkVTRVJWRUQxOiAxMzcsXG4gIE9QX1JFU0VSVkVEMjogMTM4LFxuICBPUF8xQUREOiAxMzksXG4gIE9QXzFTVUI6IDE0MCxcbiAgT1BfMk1VTDogMTQxLFxuICBPUF8yRElWOiAxNDIsXG4gIE9QX05FR0FURTogMTQzLFxuICBPUF9BQlM6IDE0NCxcbiAgT1BfTk9UOiAxNDUsXG4gIE9QXzBOT1RFUVVBTDogMTQ2LFxuICBPUF9BREQ6IDE0NyxcbiAgT1BfU1VCOiAxNDgsXG4gIE9QX01VTDogMTQ5LFxuICBPUF9ESVY6IDE1MCxcbiAgT1BfTU9EOiAxNTEsXG4gIE9QX0xTSElGVDogMTUyLFxuICBPUF9SU0hJRlQ6IDE1MyxcbiAgT1BfQk9PTEFORDogMTU0LFxuICBPUF9CT09MT1I6IDE1NSxcbiAgT1BfTlVNRVFVQUw6IDE1NixcbiAgT1BfTlVNRVFVQUxWRVJJRlk6IDE1NyxcbiAgT1BfTlVNTk9URVFVQUw6IDE1OCxcbiAgT1BfTEVTU1RIQU46IDE1OSxcbiAgT1BfR1JFQVRFUlRIQU46IDE2MCxcbiAgT1BfTEVTU1RIQU5PUkVRVUFMOiAxNjEsXG4gIE9QX0dSRUFURVJUSEFOT1JFUVVBTDogMTYyLFxuICBPUF9NSU46IDE2MyxcbiAgT1BfTUFYOiAxNjQsXG4gIE9QX1dJVEhJTjogMTY1LFxuICBPUF9SSVBFTUQxNjA6IDE2NixcbiAgT1BfU0hBMTogMTY3LFxuICBPUF9TSEEyNTY6IDE2OCxcbiAgT1BfSEFTSDE2MDogMTY5LFxuICBPUF9IQVNIMjU2OiAxNzAsXG4gIE9QX0NPREVTRVBBUkFUT1I6IDE3MSxcbiAgT1BfQ0hFQ0tTSUc6IDE3MixcbiAgT1BfQ0hFQ0tTSUdWRVJJRlk6IDE3MyxcbiAgT1BfQ0hFQ0tNVUxUSVNJRzogMTc0LFxuICBPUF9DSEVDS01VTFRJU0lHVkVSSUZZOiAxNzUsXG4gIE9QX05PUDE6IDE3NixcbiAgT1BfTk9QMjogMTc3LFxuICBPUF9DSEVDS0xPQ0tUSU1FVkVSSUZZOiAxNzcsXG4gIE9QX05PUDM6IDE3OCxcbiAgT1BfQ0hFQ0tTRVFVRU5DRVZFUklGWTogMTc4LFxuICBPUF9OT1A0OiAxNzksXG4gIE9QX05PUDU6IDE4MCxcbiAgT1BfTk9QNjogMTgxLFxuICBPUF9OT1A3OiAxODIsXG4gIE9QX05PUDg6IDE4MyxcbiAgT1BfTk9QOTogMTg0LFxuICBPUF9OT1AxMDogMTg1LFxuICBPUF9DSEVDS1NJR0FERDogMTg2LFxuICBPUF9QVUJLRVlIQVNIOiAyNTMsXG4gIE9QX1BVQktFWTogMjU0LFxuICBPUF9JTlZBTElET1BDT0RFOiAyNTUsXG59O1xuZXhwb3J0cy5PUFMgPSBPUFM7XG5jb25zdCBSRVZFUlNFX09QUyA9IHt9O1xuZXhwb3J0cy5SRVZFUlNFX09QUyA9IFJFVkVSU0VfT1BTO1xuZm9yIChjb25zdCBvcCBvZiBPYmplY3Qua2V5cyhPUFMpKSB7XG4gIGNvbnN0IGNvZGUgPSBPUFNbb3BdO1xuICBSRVZFUlNFX09QU1tjb2RlXSA9IG9wO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/ops.js\n\n}')},"./node_modules/bitcoinjs-lib/src/payments/bip341.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nexports.tweakKey =\n exports.tapTweakHash =\n exports.tapleafHash =\n exports.findScriptPath =\n exports.toHashTree =\n exports.rootHashFromPath =\n exports.MAX_TAPTREE_DEPTH =\n exports.LEAF_VERSION_TAPSCRIPT =\n void 0;\nconst buffer_1 = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js");\nconst ecc_lib_1 = __webpack_require__(/*! ../ecc_lib */ "./node_modules/bitcoinjs-lib/src/ecc_lib.js");\nconst bcrypto = __webpack_require__(/*! ../crypto */ "./node_modules/bitcoinjs-lib/src/crypto.js");\nconst bufferutils_1 = __webpack_require__(/*! ../bufferutils */ "./node_modules/bitcoinjs-lib/src/bufferutils.js");\nconst types_1 = __webpack_require__(/*! ../types */ "./node_modules/bitcoinjs-lib/src/types.js");\nexports.LEAF_VERSION_TAPSCRIPT = 0xc0;\nexports.MAX_TAPTREE_DEPTH = 128;\nconst isHashBranch = ht => \'left\' in ht && \'right\' in ht;\n/**\n * Calculates the root hash from a given control block and leaf hash.\n * @param controlBlock - The control block buffer.\n * @param leafHash - The leaf hash buffer.\n * @returns The root hash buffer.\n * @throws {TypeError} If the control block length is less than 33.\n */\nfunction rootHashFromPath(controlBlock, leafHash) {\n if (controlBlock.length < 33)\n throw new TypeError(\n `The control-block length is too small. Got ${controlBlock.length}, expected min 33.`,\n );\n const m = (controlBlock.length - 33) / 32;\n let kj = leafHash;\n for (let j = 0; j < m; j++) {\n const ej = controlBlock.slice(33 + 32 * j, 65 + 32 * j);\n if (kj.compare(ej) < 0) {\n kj = tapBranchHash(kj, ej);\n } else {\n kj = tapBranchHash(ej, kj);\n }\n }\n return kj;\n}\nexports.rootHashFromPath = rootHashFromPath;\n/**\n * Build a hash tree of merkle nodes from the scripts binary tree.\n * @param scriptTree - the tree of scripts to pairwise hash.\n */\nfunction toHashTree(scriptTree) {\n if ((0, types_1.isTapleaf)(scriptTree))\n return { hash: tapleafHash(scriptTree) };\n const hashes = [toHashTree(scriptTree[0]), toHashTree(scriptTree[1])];\n hashes.sort((a, b) => a.hash.compare(b.hash));\n const [left, right] = hashes;\n return {\n hash: tapBranchHash(left.hash, right.hash),\n left,\n right,\n };\n}\nexports.toHashTree = toHashTree;\n/**\n * Given a HashTree, finds the path from a particular hash to the root.\n * @param node - the root of the tree\n * @param hash - the hash to search for\n * @returns - array of sibling hashes, from leaf (inclusive) to root\n * (exclusive) needed to prove inclusion of the specified hash. undefined if no\n * path is found\n */\nfunction findScriptPath(node, hash) {\n if (isHashBranch(node)) {\n const leftPath = findScriptPath(node.left, hash);\n if (leftPath !== undefined) return [...leftPath, node.right.hash];\n const rightPath = findScriptPath(node.right, hash);\n if (rightPath !== undefined) return [...rightPath, node.left.hash];\n } else if (node.hash.equals(hash)) {\n return [];\n }\n return undefined;\n}\nexports.findScriptPath = findScriptPath;\nfunction tapleafHash(leaf) {\n const version = leaf.version || exports.LEAF_VERSION_TAPSCRIPT;\n return bcrypto.taggedHash(\n \'TapLeaf\',\n buffer_1.Buffer.concat([\n buffer_1.Buffer.from([version]),\n serializeScript(leaf.output),\n ]),\n );\n}\nexports.tapleafHash = tapleafHash;\nfunction tapTweakHash(pubKey, h) {\n return bcrypto.taggedHash(\n \'TapTweak\',\n buffer_1.Buffer.concat(h ? [pubKey, h] : [pubKey]),\n );\n}\nexports.tapTweakHash = tapTweakHash;\nfunction tweakKey(pubKey, h) {\n if (!buffer_1.Buffer.isBuffer(pubKey)) return null;\n if (pubKey.length !== 32) return null;\n if (h && h.length !== 32) return null;\n const tweakHash = tapTweakHash(pubKey, h);\n const res = (0, ecc_lib_1.getEccLib)().xOnlyPointAddTweak(pubKey, tweakHash);\n if (!res || res.xOnlyPubkey === null) return null;\n return {\n parity: res.parity,\n x: buffer_1.Buffer.from(res.xOnlyPubkey),\n };\n}\nexports.tweakKey = tweakKey;\nfunction tapBranchHash(a, b) {\n return bcrypto.taggedHash(\'TapBranch\', buffer_1.Buffer.concat([a, b]));\n}\nfunction serializeScript(s) {\n const varintLen = bufferutils_1.varuint.encodingLength(s.length);\n const buffer = buffer_1.Buffer.allocUnsafe(varintLen); // better\n bufferutils_1.varuint.encode(s.length, buffer);\n return buffer_1.Buffer.concat([buffer, s]);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvYmlwMzQxLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGdCQUFnQjtBQUNoQixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLHdCQUF3QjtBQUMxQixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLDhCQUE4QjtBQUNoQztBQUNBLGlCQUFpQixtQkFBTyxDQUFDLDhDQUFRO0FBQ2pDLGtCQUFrQixtQkFBTyxDQUFDLCtEQUFZO0FBQ3RDLGdCQUFnQixtQkFBTyxDQUFDLDZEQUFXO0FBQ25DLHNCQUFzQixtQkFBTyxDQUFDLHVFQUFnQjtBQUM5QyxnQkFBZ0IsbUJBQU8sQ0FBQywyREFBVTtBQUNsQyw4QkFBOEI7QUFDOUIseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksV0FBVztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxvQkFBb0I7QUFDeEU7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekI7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXRjb2luanMtbGliL3NyYy9wYXltZW50cy9iaXAzNDEuanM/MGFlZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy50d2Vha0tleSA9XG4gIGV4cG9ydHMudGFwVHdlYWtIYXNoID1cbiAgZXhwb3J0cy50YXBsZWFmSGFzaCA9XG4gIGV4cG9ydHMuZmluZFNjcmlwdFBhdGggPVxuICBleHBvcnRzLnRvSGFzaFRyZWUgPVxuICBleHBvcnRzLnJvb3RIYXNoRnJvbVBhdGggPVxuICBleHBvcnRzLk1BWF9UQVBUUkVFX0RFUFRIID1cbiAgZXhwb3J0cy5MRUFGX1ZFUlNJT05fVEFQU0NSSVBUID1cbiAgICB2b2lkIDA7XG5jb25zdCBidWZmZXJfMSA9IHJlcXVpcmUoJ2J1ZmZlcicpO1xuY29uc3QgZWNjX2xpYl8xID0gcmVxdWlyZSgnLi4vZWNjX2xpYicpO1xuY29uc3QgYmNyeXB0byA9IHJlcXVpcmUoJy4uL2NyeXB0bycpO1xuY29uc3QgYnVmZmVydXRpbHNfMSA9IHJlcXVpcmUoJy4uL2J1ZmZlcnV0aWxzJyk7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZSgnLi4vdHlwZXMnKTtcbmV4cG9ydHMuTEVBRl9WRVJTSU9OX1RBUFNDUklQVCA9IDB4YzA7XG5leHBvcnRzLk1BWF9UQVBUUkVFX0RFUFRIID0gMTI4O1xuY29uc3QgaXNIYXNoQnJhbmNoID0gaHQgPT4gJ2xlZnQnIGluIGh0ICYmICdyaWdodCcgaW4gaHQ7XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHJvb3QgaGFzaCBmcm9tIGEgZ2l2ZW4gY29udHJvbCBibG9jayBhbmQgbGVhZiBoYXNoLlxuICogQHBhcmFtIGNvbnRyb2xCbG9jayAtIFRoZSBjb250cm9sIGJsb2NrIGJ1ZmZlci5cbiAqIEBwYXJhbSBsZWFmSGFzaCAtIFRoZSBsZWFmIGhhc2ggYnVmZmVyLlxuICogQHJldHVybnMgVGhlIHJvb3QgaGFzaCBidWZmZXIuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSBjb250cm9sIGJsb2NrIGxlbmd0aCBpcyBsZXNzIHRoYW4gMzMuXG4gKi9cbmZ1bmN0aW9uIHJvb3RIYXNoRnJvbVBhdGgoY29udHJvbEJsb2NrLCBsZWFmSGFzaCkge1xuICBpZiAoY29udHJvbEJsb2NrLmxlbmd0aCA8IDMzKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgVGhlIGNvbnRyb2wtYmxvY2sgbGVuZ3RoIGlzIHRvbyBzbWFsbC4gR290ICR7Y29udHJvbEJsb2NrLmxlbmd0aH0sIGV4cGVjdGVkIG1pbiAzMy5gLFxuICAgICk7XG4gIGNvbnN0IG0gPSAoY29udHJvbEJsb2NrLmxlbmd0aCAtIDMzKSAvIDMyO1xuICBsZXQga2ogPSBsZWFmSGFzaDtcbiAgZm9yIChsZXQgaiA9IDA7IGogPCBtOyBqKyspIHtcbiAgICBjb25zdCBlaiA9IGNvbnRyb2xCbG9jay5zbGljZSgzMyArIDMyICogaiwgNjUgKyAzMiAqIGopO1xuICAgIGlmIChrai5jb21wYXJlKGVqKSA8IDApIHtcbiAgICAgIGtqID0gdGFwQnJhbmNoSGFzaChraiwgZWopO1xuICAgIH0gZWxzZSB7XG4gICAgICBraiA9IHRhcEJyYW5jaEhhc2goZWosIGtqKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGtqO1xufVxuZXhwb3J0cy5yb290SGFzaEZyb21QYXRoID0gcm9vdEhhc2hGcm9tUGF0aDtcbi8qKlxuICogQnVpbGQgYSBoYXNoIHRyZWUgb2YgbWVya2xlIG5vZGVzIGZyb20gdGhlIHNjcmlwdHMgYmluYXJ5IHRyZWUuXG4gKiBAcGFyYW0gc2NyaXB0VHJlZSAtIHRoZSB0cmVlIG9mIHNjcmlwdHMgdG8gcGFpcndpc2UgaGFzaC5cbiAqL1xuZnVuY3Rpb24gdG9IYXNoVHJlZShzY3JpcHRUcmVlKSB7XG4gIGlmICgoMCwgdHlwZXNfMS5pc1RhcGxlYWYpKHNjcmlwdFRyZWUpKVxuICAgIHJldHVybiB7IGhhc2g6IHRhcGxlYWZIYXNoKHNjcmlwdFRyZWUpIH07XG4gIGNvbnN0IGhhc2hlcyA9IFt0b0hhc2hUcmVlKHNjcmlwdFRyZWVbMF0pLCB0b0hhc2hUcmVlKHNjcmlwdFRyZWVbMV0pXTtcbiAgaGFzaGVzLnNvcnQoKGEsIGIpID0+IGEuaGFzaC5jb21wYXJlKGIuaGFzaCkpO1xuICBjb25zdCBbbGVmdCwgcmlnaHRdID0gaGFzaGVzO1xuICByZXR1cm4ge1xuICAgIGhhc2g6IHRhcEJyYW5jaEhhc2gobGVmdC5oYXNoLCByaWdodC5oYXNoKSxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICB9O1xufVxuZXhwb3J0cy50b0hhc2hUcmVlID0gdG9IYXNoVHJlZTtcbi8qKlxuICogR2l2ZW4gYSBIYXNoVHJlZSwgZmluZHMgdGhlIHBhdGggZnJvbSBhIHBhcnRpY3VsYXIgaGFzaCB0byB0aGUgcm9vdC5cbiAqIEBwYXJhbSBub2RlIC0gdGhlIHJvb3Qgb2YgdGhlIHRyZWVcbiAqIEBwYXJhbSBoYXNoIC0gdGhlIGhhc2ggdG8gc2VhcmNoIGZvclxuICogQHJldHVybnMgLSBhcnJheSBvZiBzaWJsaW5nIGhhc2hlcywgZnJvbSBsZWFmIChpbmNsdXNpdmUpIHRvIHJvb3RcbiAqIChleGNsdXNpdmUpIG5lZWRlZCB0byBwcm92ZSBpbmNsdXNpb24gb2YgdGhlIHNwZWNpZmllZCBoYXNoLiB1bmRlZmluZWQgaWYgbm9cbiAqIHBhdGggaXMgZm91bmRcbiAqL1xuZnVuY3Rpb24gZmluZFNjcmlwdFBhdGgobm9kZSwgaGFzaCkge1xuICBpZiAoaXNIYXNoQnJhbmNoKG5vZGUpKSB7XG4gICAgY29uc3QgbGVmdFBhdGggPSBmaW5kU2NyaXB0UGF0aChub2RlLmxlZnQsIGhhc2gpO1xuICAgIGlmIChsZWZ0UGF0aCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gWy4uLmxlZnRQYXRoLCBub2RlLnJpZ2h0Lmhhc2hdO1xuICAgIGNvbnN0IHJpZ2h0UGF0aCA9IGZpbmRTY3JpcHRQYXRoKG5vZGUucmlnaHQsIGhhc2gpO1xuICAgIGlmIChyaWdodFBhdGggIT09IHVuZGVmaW5lZCkgcmV0dXJuIFsuLi5yaWdodFBhdGgsIG5vZGUubGVmdC5oYXNoXTtcbiAgfSBlbHNlIGlmIChub2RlLmhhc2guZXF1YWxzKGhhc2gpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5leHBvcnRzLmZpbmRTY3JpcHRQYXRoID0gZmluZFNjcmlwdFBhdGg7XG5mdW5jdGlvbiB0YXBsZWFmSGFzaChsZWFmKSB7XG4gIGNvbnN0IHZlcnNpb24gPSBsZWFmLnZlcnNpb24gfHwgZXhwb3J0cy5MRUFGX1ZFUlNJT05fVEFQU0NSSVBUO1xuICByZXR1cm4gYmNyeXB0by50YWdnZWRIYXNoKFxuICAgICdUYXBMZWFmJyxcbiAgICBidWZmZXJfMS5CdWZmZXIuY29uY2F0KFtcbiAgICAgIGJ1ZmZlcl8xLkJ1ZmZlci5mcm9tKFt2ZXJzaW9uXSksXG4gICAgICBzZXJpYWxpemVTY3JpcHQobGVhZi5vdXRwdXQpLFxuICAgIF0pLFxuICApO1xufVxuZXhwb3J0cy50YXBsZWFmSGFzaCA9IHRhcGxlYWZIYXNoO1xuZnVuY3Rpb24gdGFwVHdlYWtIYXNoKHB1YktleSwgaCkge1xuICByZXR1cm4gYmNyeXB0by50YWdnZWRIYXNoKFxuICAgICdUYXBUd2VhaycsXG4gICAgYnVmZmVyXzEuQnVmZmVyLmNvbmNhdChoID8gW3B1YktleSwgaF0gOiBbcHViS2V5XSksXG4gICk7XG59XG5leHBvcnRzLnRhcFR3ZWFrSGFzaCA9IHRhcFR3ZWFrSGFzaDtcbmZ1bmN0aW9uIHR3ZWFrS2V5KHB1YktleSwgaCkge1xuICBpZiAoIWJ1ZmZlcl8xLkJ1ZmZlci5pc0J1ZmZlcihwdWJLZXkpKSByZXR1cm4gbnVsbDtcbiAgaWYgKHB1YktleS5sZW5ndGggIT09IDMyKSByZXR1cm4gbnVsbDtcbiAgaWYgKGggJiYgaC5sZW5ndGggIT09IDMyKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgdHdlYWtIYXNoID0gdGFwVHdlYWtIYXNoKHB1YktleSwgaCk7XG4gIGNvbnN0IHJlcyA9ICgwLCBlY2NfbGliXzEuZ2V0RWNjTGliKSgpLnhPbmx5UG9pbnRBZGRUd2VhayhwdWJLZXksIHR3ZWFrSGFzaCk7XG4gIGlmICghcmVzIHx8IHJlcy54T25seVB1YmtleSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7XG4gICAgcGFyaXR5OiByZXMucGFyaXR5LFxuICAgIHg6IGJ1ZmZlcl8xLkJ1ZmZlci5mcm9tKHJlcy54T25seVB1YmtleSksXG4gIH07XG59XG5leHBvcnRzLnR3ZWFrS2V5ID0gdHdlYWtLZXk7XG5mdW5jdGlvbiB0YXBCcmFuY2hIYXNoKGEsIGIpIHtcbiAgcmV0dXJuIGJjcnlwdG8udGFnZ2VkSGFzaCgnVGFwQnJhbmNoJywgYnVmZmVyXzEuQnVmZmVyLmNvbmNhdChbYSwgYl0pKTtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZVNjcmlwdChzKSB7XG4gIGNvbnN0IHZhcmludExlbiA9IGJ1ZmZlcnV0aWxzXzEudmFydWludC5lbmNvZGluZ0xlbmd0aChzLmxlbmd0aCk7XG4gIGNvbnN0IGJ1ZmZlciA9IGJ1ZmZlcl8xLkJ1ZmZlci5hbGxvY1Vuc2FmZSh2YXJpbnRMZW4pOyAvLyBiZXR0ZXJcbiAgYnVmZmVydXRpbHNfMS52YXJ1aW50LmVuY29kZShzLmxlbmd0aCwgYnVmZmVyKTtcbiAgcmV0dXJuIGJ1ZmZlcl8xLkJ1ZmZlci5jb25jYXQoW2J1ZmZlciwgc10pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/payments/bip341.js\n\n}')},"./node_modules/bitcoinjs-lib/src/payments/embed.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.p2data = void 0;\nconst networks_1 = __webpack_require__(/*! ../networks */ \"./node_modules/bitcoinjs-lib/src/networks.js\");\nconst bscript = __webpack_require__(/*! ../script */ \"./node_modules/bitcoinjs-lib/src/script.js\");\nconst types_1 = __webpack_require__(/*! ../types */ \"./node_modules/bitcoinjs-lib/src/types.js\");\nconst lazy = __webpack_require__(/*! ./lazy */ \"./node_modules/bitcoinjs-lib/src/payments/lazy.js\");\nconst OPS = bscript.OPS;\n// output: OP_RETURN ...\n/**\n * Embeds data in a Bitcoin payment.\n * @param a - The payment object.\n * @param opts - Optional payment options.\n * @returns The modified payment object.\n * @throws {TypeError} If there is not enough data or if the output is invalid.\n */\nfunction p2data(a, opts) {\n if (!a.data && !a.output) throw new TypeError('Not enough data');\n opts = Object.assign({ validate: true }, opts || {});\n (0, types_1.typeforce)(\n {\n network: types_1.typeforce.maybe(types_1.typeforce.Object),\n output: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n data: types_1.typeforce.maybe(\n types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n ),\n },\n a,\n );\n const network = a.network || networks_1.bitcoin;\n const o = { name: 'embed', network };\n lazy.prop(o, 'output', () => {\n if (!a.data) return;\n return bscript.compile([OPS.OP_RETURN].concat(a.data));\n });\n lazy.prop(o, 'data', () => {\n if (!a.output) return;\n return bscript.decompile(a.output).slice(1);\n });\n // extended validation\n if (opts.validate) {\n if (a.output) {\n const chunks = bscript.decompile(a.output);\n if (chunks[0] !== OPS.OP_RETURN) throw new TypeError('Output is invalid');\n if (!chunks.slice(1).every(types_1.typeforce.Buffer))\n throw new TypeError('Output is invalid');\n if (a.data && !(0, types_1.stacksEqual)(a.data, o.data))\n throw new TypeError('Data mismatch');\n }\n }\n return Object.assign(o, a);\n}\nexports.p2data = p2data;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvZW1iZWQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsY0FBYztBQUNkLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFhO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLDZEQUFXO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLDJEQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxpRUFBUTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksV0FBVztBQUN2QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsZ0JBQWdCLFlBQVk7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvZW1iZWQuanM/NWJjZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wMmRhdGEgPSB2b2lkIDA7XG5jb25zdCBuZXR3b3Jrc18xID0gcmVxdWlyZSgnLi4vbmV0d29ya3MnKTtcbmNvbnN0IGJzY3JpcHQgPSByZXF1aXJlKCcuLi9zY3JpcHQnKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKCcuLi90eXBlcycpO1xuY29uc3QgbGF6eSA9IHJlcXVpcmUoJy4vbGF6eScpO1xuY29uc3QgT1BTID0gYnNjcmlwdC5PUFM7XG4vLyBvdXRwdXQ6IE9QX1JFVFVSTiAuLi5cbi8qKlxuICogRW1iZWRzIGRhdGEgaW4gYSBCaXRjb2luIHBheW1lbnQuXG4gKiBAcGFyYW0gYSAtIFRoZSBwYXltZW50IG9iamVjdC5cbiAqIEBwYXJhbSBvcHRzIC0gT3B0aW9uYWwgcGF5bWVudCBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIHBheW1lbnQgb2JqZWN0LlxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIGRhdGEgb3IgaWYgdGhlIG91dHB1dCBpcyBpbnZhbGlkLlxuICovXG5mdW5jdGlvbiBwMmRhdGEoYSwgb3B0cykge1xuICBpZiAoIWEuZGF0YSAmJiAhYS5vdXRwdXQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vdCBlbm91Z2ggZGF0YScpO1xuICBvcHRzID0gT2JqZWN0LmFzc2lnbih7IHZhbGlkYXRlOiB0cnVlIH0sIG9wdHMgfHwge30pO1xuICAoMCwgdHlwZXNfMS50eXBlZm9yY2UpKFxuICAgIHtcbiAgICAgIG5ldHdvcms6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLk9iamVjdCksXG4gICAgICBvdXRwdXQ6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlciksXG4gICAgICBkYXRhOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZShcbiAgICAgICAgdHlwZXNfMS50eXBlZm9yY2UuYXJyYXlPZih0eXBlc18xLnR5cGVmb3JjZS5CdWZmZXIpLFxuICAgICAgKSxcbiAgICB9LFxuICAgIGEsXG4gICk7XG4gIGNvbnN0IG5ldHdvcmsgPSBhLm5ldHdvcmsgfHwgbmV0d29ya3NfMS5iaXRjb2luO1xuICBjb25zdCBvID0geyBuYW1lOiAnZW1iZWQnLCBuZXR3b3JrIH07XG4gIGxhenkucHJvcChvLCAnb3V0cHV0JywgKCkgPT4ge1xuICAgIGlmICghYS5kYXRhKSByZXR1cm47XG4gICAgcmV0dXJuIGJzY3JpcHQuY29tcGlsZShbT1BTLk9QX1JFVFVSTl0uY29uY2F0KGEuZGF0YSkpO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdkYXRhJywgKCkgPT4ge1xuICAgIGlmICghYS5vdXRwdXQpIHJldHVybjtcbiAgICByZXR1cm4gYnNjcmlwdC5kZWNvbXBpbGUoYS5vdXRwdXQpLnNsaWNlKDEpO1xuICB9KTtcbiAgLy8gZXh0ZW5kZWQgdmFsaWRhdGlvblxuICBpZiAob3B0cy52YWxpZGF0ZSkge1xuICAgIGlmIChhLm91dHB1dCkge1xuICAgICAgY29uc3QgY2h1bmtzID0gYnNjcmlwdC5kZWNvbXBpbGUoYS5vdXRwdXQpO1xuICAgICAgaWYgKGNodW5rc1swXSAhPT0gT1BTLk9QX1JFVFVSTikgdGhyb3cgbmV3IFR5cGVFcnJvcignT3V0cHV0IGlzIGludmFsaWQnKTtcbiAgICAgIGlmICghY2h1bmtzLnNsaWNlKDEpLmV2ZXJ5KHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlcikpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ091dHB1dCBpcyBpbnZhbGlkJyk7XG4gICAgICBpZiAoYS5kYXRhICYmICEoMCwgdHlwZXNfMS5zdGFja3NFcXVhbCkoYS5kYXRhLCBvLmRhdGEpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEYXRhIG1pc21hdGNoJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG8sIGEpO1xufVxuZXhwb3J0cy5wMmRhdGEgPSBwMmRhdGE7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/payments/embed.js\n\n}")},"./node_modules/bitcoinjs-lib/src/payments/index.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nexports.p2tr =\n exports.p2wsh =\n exports.p2wpkh =\n exports.p2sh =\n exports.p2pkh =\n exports.p2pk =\n exports.p2ms =\n exports.embed =\n void 0;\nconst embed_1 = __webpack_require__(/*! ./embed */ "./node_modules/bitcoinjs-lib/src/payments/embed.js");\nObject.defineProperty(exports, "embed", ({\n enumerable: true,\n get: function () {\n return embed_1.p2data;\n },\n}));\nconst p2ms_1 = __webpack_require__(/*! ./p2ms */ "./node_modules/bitcoinjs-lib/src/payments/p2ms.js");\nObject.defineProperty(exports, "p2ms", ({\n enumerable: true,\n get: function () {\n return p2ms_1.p2ms;\n },\n}));\nconst p2pk_1 = __webpack_require__(/*! ./p2pk */ "./node_modules/bitcoinjs-lib/src/payments/p2pk.js");\nObject.defineProperty(exports, "p2pk", ({\n enumerable: true,\n get: function () {\n return p2pk_1.p2pk;\n },\n}));\nconst p2pkh_1 = __webpack_require__(/*! ./p2pkh */ "./node_modules/bitcoinjs-lib/src/payments/p2pkh.js");\nObject.defineProperty(exports, "p2pkh", ({\n enumerable: true,\n get: function () {\n return p2pkh_1.p2pkh;\n },\n}));\nconst p2sh_1 = __webpack_require__(/*! ./p2sh */ "./node_modules/bitcoinjs-lib/src/payments/p2sh.js");\nObject.defineProperty(exports, "p2sh", ({\n enumerable: true,\n get: function () {\n return p2sh_1.p2sh;\n },\n}));\nconst p2wpkh_1 = __webpack_require__(/*! ./p2wpkh */ "./node_modules/bitcoinjs-lib/src/payments/p2wpkh.js");\nObject.defineProperty(exports, "p2wpkh", ({\n enumerable: true,\n get: function () {\n return p2wpkh_1.p2wpkh;\n },\n}));\nconst p2wsh_1 = __webpack_require__(/*! ./p2wsh */ "./node_modules/bitcoinjs-lib/src/payments/p2wsh.js");\nObject.defineProperty(exports, "p2wsh", ({\n enumerable: true,\n get: function () {\n return p2wsh_1.p2wsh;\n },\n}));\nconst p2tr_1 = __webpack_require__(/*! ./p2tr */ "./node_modules/bitcoinjs-lib/src/payments/p2tr.js");\nObject.defineProperty(exports, "p2tr", ({\n enumerable: true,\n get: function () {\n return p2tr_1.p2tr;\n },\n}));\n// TODO\n// witness commitment\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsWUFBWTtBQUNaLEVBQUUsYUFBYTtBQUNmLEVBQUUsY0FBYztBQUNoQixFQUFFLFlBQVk7QUFDZCxFQUFFLGFBQWE7QUFDZixFQUFFLFlBQVk7QUFDZCxFQUFFLFlBQVk7QUFDZCxFQUFFLGFBQWE7QUFDZjtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLG1FQUFTO0FBQ2pDLHlDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFQUFDO0FBQ0YsZUFBZSxtQkFBTyxDQUFDLGlFQUFRO0FBQy9CLHdDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFQUFDO0FBQ0YsZUFBZSxtQkFBTyxDQUFDLGlFQUFRO0FBQy9CLHdDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFQUFDO0FBQ0YsZ0JBQWdCLG1CQUFPLENBQUMsbUVBQVM7QUFDakMseUNBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEVBQUM7QUFDRixlQUFlLG1CQUFPLENBQUMsaUVBQVE7QUFDL0Isd0NBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDLEVBQUM7QUFDRixpQkFBaUIsbUJBQU8sQ0FBQyxxRUFBVTtBQUNuQywwQ0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMsRUFBQztBQUNGLGdCQUFnQixtQkFBTyxDQUFDLG1FQUFTO0FBQ2pDLHlDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFQUFDO0FBQ0YsZUFBZSxtQkFBTyxDQUFDLGlFQUFRO0FBQy9CLHdDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFQUFDO0FBQ0Y7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL3BheW1lbnRzL2luZGV4LmpzPzg5MTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucDJ0ciA9XG4gIGV4cG9ydHMucDJ3c2ggPVxuICBleHBvcnRzLnAyd3BraCA9XG4gIGV4cG9ydHMucDJzaCA9XG4gIGV4cG9ydHMucDJwa2ggPVxuICBleHBvcnRzLnAycGsgPVxuICBleHBvcnRzLnAybXMgPVxuICBleHBvcnRzLmVtYmVkID1cbiAgICB2b2lkIDA7XG5jb25zdCBlbWJlZF8xID0gcmVxdWlyZSgnLi9lbWJlZCcpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdlbWJlZCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGVtYmVkXzEucDJkYXRhO1xuICB9LFxufSk7XG5jb25zdCBwMm1zXzEgPSByZXF1aXJlKCcuL3AybXMnKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAncDJtcycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHAybXNfMS5wMm1zO1xuICB9LFxufSk7XG5jb25zdCBwMnBrXzEgPSByZXF1aXJlKCcuL3AycGsnKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAncDJwaycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHAycGtfMS5wMnBrO1xuICB9LFxufSk7XG5jb25zdCBwMnBraF8xID0gcmVxdWlyZSgnLi9wMnBraCcpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdwMnBraCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHAycGtoXzEucDJwa2g7XG4gIH0sXG59KTtcbmNvbnN0IHAyc2hfMSA9IHJlcXVpcmUoJy4vcDJzaCcpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdwMnNoJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcDJzaF8xLnAyc2g7XG4gIH0sXG59KTtcbmNvbnN0IHAyd3BraF8xID0gcmVxdWlyZSgnLi9wMndwa2gnKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAncDJ3cGtoJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcDJ3cGtoXzEucDJ3cGtoO1xuICB9LFxufSk7XG5jb25zdCBwMndzaF8xID0gcmVxdWlyZSgnLi9wMndzaCcpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdwMndzaCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHAyd3NoXzEucDJ3c2g7XG4gIH0sXG59KTtcbmNvbnN0IHAydHJfMSA9IHJlcXVpcmUoJy4vcDJ0cicpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdwMnRyJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcDJ0cl8xLnAydHI7XG4gIH0sXG59KTtcbi8vIFRPRE9cbi8vIHdpdG5lc3MgY29tbWl0bWVudFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/payments/index.js\n\n}')},"./node_modules/bitcoinjs-lib/src/payments/lazy.js"(__unused_webpack_module,exports){"use strict";eval('{\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nexports.value = exports.prop = void 0;\nfunction prop(object, name, f) {\n Object.defineProperty(object, name, {\n configurable: true,\n enumerable: true,\n get() {\n const _value = f.call(this);\n this[name] = _value;\n return _value;\n },\n set(_value) {\n Object.defineProperty(this, name, {\n configurable: true,\n enumerable: true,\n value: _value,\n writable: true,\n });\n },\n });\n}\nexports.prop = prop;\nfunction value(f) {\n let _value;\n return () => {\n if (_value !== undefined) return _value;\n _value = f();\n return _value;\n };\n}\nexports.value = value;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvbGF6eS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxhQUFhLEdBQUcsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvbGF6eS5qcz81Y2FjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnZhbHVlID0gZXhwb3J0cy5wcm9wID0gdm9pZCAwO1xuZnVuY3Rpb24gcHJvcChvYmplY3QsIG5hbWUsIGYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgbmFtZSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIGNvbnN0IF92YWx1ZSA9IGYuY2FsbCh0aGlzKTtcbiAgICAgIHRoaXNbbmFtZV0gPSBfdmFsdWU7XG4gICAgICByZXR1cm4gX3ZhbHVlO1xuICAgIH0sXG4gICAgc2V0KF92YWx1ZSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogX3ZhbHVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pO1xufVxuZXhwb3J0cy5wcm9wID0gcHJvcDtcbmZ1bmN0aW9uIHZhbHVlKGYpIHtcbiAgbGV0IF92YWx1ZTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoX3ZhbHVlICE9PSB1bmRlZmluZWQpIHJldHVybiBfdmFsdWU7XG4gICAgX3ZhbHVlID0gZigpO1xuICAgIHJldHVybiBfdmFsdWU7XG4gIH07XG59XG5leHBvcnRzLnZhbHVlID0gdmFsdWU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/payments/lazy.js\n\n}')},"./node_modules/bitcoinjs-lib/src/payments/p2ms.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.p2ms = void 0;\nconst networks_1 = __webpack_require__(/*! ../networks */ \"./node_modules/bitcoinjs-lib/src/networks.js\");\nconst bscript = __webpack_require__(/*! ../script */ \"./node_modules/bitcoinjs-lib/src/script.js\");\nconst types_1 = __webpack_require__(/*! ../types */ \"./node_modules/bitcoinjs-lib/src/types.js\");\nconst lazy = __webpack_require__(/*! ./lazy */ \"./node_modules/bitcoinjs-lib/src/payments/lazy.js\");\nconst OPS = bscript.OPS;\nconst OP_INT_BASE = OPS.OP_RESERVED; // OP_1 - 1\n// input: OP_0 [signatures ...]\n// output: m [pubKeys ...] n OP_CHECKMULTISIG\n/**\n * Represents a function that creates a Pay-to-Multisig (P2MS) payment object.\n * @param a - The payment object.\n * @param opts - Optional payment options.\n * @returns The created payment object.\n * @throws {TypeError} If the provided data is not valid.\n */\nfunction p2ms(a, opts) {\n if (\n !a.input &&\n !a.output &&\n !(a.pubkeys && a.m !== undefined) &&\n !a.signatures\n )\n throw new TypeError('Not enough data');\n opts = Object.assign({ validate: true }, opts || {});\n function isAcceptableSignature(x) {\n return (\n bscript.isCanonicalScriptSignature(x) ||\n (opts.allowIncomplete && x === OPS.OP_0) !== undefined\n );\n }\n (0, types_1.typeforce)(\n {\n network: types_1.typeforce.maybe(types_1.typeforce.Object),\n m: types_1.typeforce.maybe(types_1.typeforce.Number),\n n: types_1.typeforce.maybe(types_1.typeforce.Number),\n output: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n pubkeys: types_1.typeforce.maybe(\n types_1.typeforce.arrayOf(types_1.isPoint),\n ),\n signatures: types_1.typeforce.maybe(\n types_1.typeforce.arrayOf(isAcceptableSignature),\n ),\n input: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n },\n a,\n );\n const network = a.network || networks_1.bitcoin;\n const o = { network };\n let chunks = [];\n let decoded = false;\n function decode(output) {\n if (decoded) return;\n decoded = true;\n chunks = bscript.decompile(output);\n o.m = chunks[0] - OP_INT_BASE;\n o.n = chunks[chunks.length - 2] - OP_INT_BASE;\n o.pubkeys = chunks.slice(1, -2);\n }\n lazy.prop(o, 'output', () => {\n if (!a.m) return;\n if (!o.n) return;\n if (!a.pubkeys) return;\n return bscript.compile(\n [].concat(\n OP_INT_BASE + a.m,\n a.pubkeys,\n OP_INT_BASE + o.n,\n OPS.OP_CHECKMULTISIG,\n ),\n );\n });\n lazy.prop(o, 'm', () => {\n if (!o.output) return;\n decode(o.output);\n return o.m;\n });\n lazy.prop(o, 'n', () => {\n if (!o.pubkeys) return;\n return o.pubkeys.length;\n });\n lazy.prop(o, 'pubkeys', () => {\n if (!a.output) return;\n decode(a.output);\n return o.pubkeys;\n });\n lazy.prop(o, 'signatures', () => {\n if (!a.input) return;\n return bscript.decompile(a.input).slice(1);\n });\n lazy.prop(o, 'input', () => {\n if (!a.signatures) return;\n return bscript.compile([OPS.OP_0].concat(a.signatures));\n });\n lazy.prop(o, 'witness', () => {\n if (!o.input) return;\n return [];\n });\n lazy.prop(o, 'name', () => {\n if (!o.m || !o.n) return;\n return `p2ms(${o.m} of ${o.n})`;\n });\n // extended validation\n if (opts.validate) {\n if (a.output) {\n decode(a.output);\n if (!types_1.typeforce.Number(chunks[0]))\n throw new TypeError('Output is invalid');\n if (!types_1.typeforce.Number(chunks[chunks.length - 2]))\n throw new TypeError('Output is invalid');\n if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG)\n throw new TypeError('Output is invalid');\n if (o.m <= 0 || o.n > 16 || o.m > o.n || o.n !== chunks.length - 3)\n throw new TypeError('Output is invalid');\n if (!o.pubkeys.every(x => (0, types_1.isPoint)(x)))\n throw new TypeError('Output is invalid');\n if (a.m !== undefined && a.m !== o.m) throw new TypeError('m mismatch');\n if (a.n !== undefined && a.n !== o.n) throw new TypeError('n mismatch');\n if (a.pubkeys && !(0, types_1.stacksEqual)(a.pubkeys, o.pubkeys))\n throw new TypeError('Pubkeys mismatch');\n }\n if (a.pubkeys) {\n if (a.n !== undefined && a.n !== a.pubkeys.length)\n throw new TypeError('Pubkey count mismatch');\n o.n = a.pubkeys.length;\n if (o.n < o.m) throw new TypeError('Pubkey count cannot be less than m');\n }\n if (a.signatures) {\n if (a.signatures.length < o.m)\n throw new TypeError('Not enough signatures provided');\n if (a.signatures.length > o.m)\n throw new TypeError('Too many signatures provided');\n }\n if (a.input) {\n if (a.input[0] !== OPS.OP_0) throw new TypeError('Input is invalid');\n if (\n o.signatures.length === 0 ||\n !o.signatures.every(isAcceptableSignature)\n )\n throw new TypeError('Input has invalid signature(s)');\n if (a.signatures && !(0, types_1.stacksEqual)(a.signatures, o.signatures))\n throw new TypeError('Signature mismatch');\n if (a.m !== undefined && a.m !== a.signatures.length)\n throw new TypeError('Signature count mismatch');\n }\n }\n return Object.assign(o, a);\n}\nexports.p2ms = p2ms;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvcDJtcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxZQUFZO0FBQ1osbUJBQW1CLG1CQUFPLENBQUMsaUVBQWE7QUFDeEMsZ0JBQWdCLG1CQUFPLENBQUMsNkRBQVc7QUFDbkMsZ0JBQWdCLG1CQUFPLENBQUMsMkRBQVU7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLGlFQUFRO0FBQzdCO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxXQUFXO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0IsWUFBWTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxtQkFBbUIsS0FBSyxLQUFLLElBQUk7QUFDakMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL3BheW1lbnRzL3AybXMuanM/MjJjZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wMm1zID0gdm9pZCAwO1xuY29uc3QgbmV0d29ya3NfMSA9IHJlcXVpcmUoJy4uL25ldHdvcmtzJyk7XG5jb25zdCBic2NyaXB0ID0gcmVxdWlyZSgnLi4vc2NyaXB0Jyk7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZSgnLi4vdHlwZXMnKTtcbmNvbnN0IGxhenkgPSByZXF1aXJlKCcuL2xhenknKTtcbmNvbnN0IE9QUyA9IGJzY3JpcHQuT1BTO1xuY29uc3QgT1BfSU5UX0JBU0UgPSBPUFMuT1BfUkVTRVJWRUQ7IC8vIE9QXzEgLSAxXG4vLyBpbnB1dDogT1BfMCBbc2lnbmF0dXJlcyAuLi5dXG4vLyBvdXRwdXQ6IG0gW3B1YktleXMgLi4uXSBuIE9QX0NIRUNLTVVMVElTSUdcbi8qKlxuICogUmVwcmVzZW50cyBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIFBheS10by1NdWx0aXNpZyAoUDJNUykgcGF5bWVudCBvYmplY3QuXG4gKiBAcGFyYW0gYSAtIFRoZSBwYXltZW50IG9iamVjdC5cbiAqIEBwYXJhbSBvcHRzIC0gT3B0aW9uYWwgcGF5bWVudCBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIGNyZWF0ZWQgcGF5bWVudCBvYmplY3QuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSBwcm92aWRlZCBkYXRhIGlzIG5vdCB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gcDJtcyhhLCBvcHRzKSB7XG4gIGlmIChcbiAgICAhYS5pbnB1dCAmJlxuICAgICFhLm91dHB1dCAmJlxuICAgICEoYS5wdWJrZXlzICYmIGEubSAhPT0gdW5kZWZpbmVkKSAmJlxuICAgICFhLnNpZ25hdHVyZXNcbiAgKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vdCBlbm91Z2ggZGF0YScpO1xuICBvcHRzID0gT2JqZWN0LmFzc2lnbih7IHZhbGlkYXRlOiB0cnVlIH0sIG9wdHMgfHwge30pO1xuICBmdW5jdGlvbiBpc0FjY2VwdGFibGVTaWduYXR1cmUoeCkge1xuICAgIHJldHVybiAoXG4gICAgICBic2NyaXB0LmlzQ2Fub25pY2FsU2NyaXB0U2lnbmF0dXJlKHgpIHx8XG4gICAgICAob3B0cy5hbGxvd0luY29tcGxldGUgJiYgeCA9PT0gT1BTLk9QXzApICE9PSB1bmRlZmluZWRcbiAgICApO1xuICB9XG4gICgwLCB0eXBlc18xLnR5cGVmb3JjZSkoXG4gICAge1xuICAgICAgbmV0d29yazogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuT2JqZWN0KSxcbiAgICAgIG06IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLk51bWJlciksXG4gICAgICBuOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5OdW1iZXIpLFxuICAgICAgb3V0cHV0OiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5CdWZmZXIpLFxuICAgICAgcHVia2V5czogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUoXG4gICAgICAgIHR5cGVzXzEudHlwZWZvcmNlLmFycmF5T2YodHlwZXNfMS5pc1BvaW50KSxcbiAgICAgICksXG4gICAgICBzaWduYXR1cmVzOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZShcbiAgICAgICAgdHlwZXNfMS50eXBlZm9yY2UuYXJyYXlPZihpc0FjY2VwdGFibGVTaWduYXR1cmUpLFxuICAgICAgKSxcbiAgICAgIGlucHV0OiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5CdWZmZXIpLFxuICAgIH0sXG4gICAgYSxcbiAgKTtcbiAgY29uc3QgbmV0d29yayA9IGEubmV0d29yayB8fCBuZXR3b3Jrc18xLmJpdGNvaW47XG4gIGNvbnN0IG8gPSB7IG5ldHdvcmsgfTtcbiAgbGV0IGNodW5rcyA9IFtdO1xuICBsZXQgZGVjb2RlZCA9IGZhbHNlO1xuICBmdW5jdGlvbiBkZWNvZGUob3V0cHV0KSB7XG4gICAgaWYgKGRlY29kZWQpIHJldHVybjtcbiAgICBkZWNvZGVkID0gdHJ1ZTtcbiAgICBjaHVua3MgPSBic2NyaXB0LmRlY29tcGlsZShvdXRwdXQpO1xuICAgIG8ubSA9IGNodW5rc1swXSAtIE9QX0lOVF9CQVNFO1xuICAgIG8ubiA9IGNodW5rc1tjaHVua3MubGVuZ3RoIC0gMl0gLSBPUF9JTlRfQkFTRTtcbiAgICBvLnB1YmtleXMgPSBjaHVua3Muc2xpY2UoMSwgLTIpO1xuICB9XG4gIGxhenkucHJvcChvLCAnb3V0cHV0JywgKCkgPT4ge1xuICAgIGlmICghYS5tKSByZXR1cm47XG4gICAgaWYgKCFvLm4pIHJldHVybjtcbiAgICBpZiAoIWEucHVia2V5cykgcmV0dXJuO1xuICAgIHJldHVybiBic2NyaXB0LmNvbXBpbGUoXG4gICAgICBbXS5jb25jYXQoXG4gICAgICAgIE9QX0lOVF9CQVNFICsgYS5tLFxuICAgICAgICBhLnB1YmtleXMsXG4gICAgICAgIE9QX0lOVF9CQVNFICsgby5uLFxuICAgICAgICBPUFMuT1BfQ0hFQ0tNVUxUSVNJRyxcbiAgICAgICksXG4gICAgKTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnbScsICgpID0+IHtcbiAgICBpZiAoIW8ub3V0cHV0KSByZXR1cm47XG4gICAgZGVjb2RlKG8ub3V0cHV0KTtcbiAgICByZXR1cm4gby5tO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICduJywgKCkgPT4ge1xuICAgIGlmICghby5wdWJrZXlzKSByZXR1cm47XG4gICAgcmV0dXJuIG8ucHVia2V5cy5sZW5ndGg7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ3B1YmtleXMnLCAoKSA9PiB7XG4gICAgaWYgKCFhLm91dHB1dCkgcmV0dXJuO1xuICAgIGRlY29kZShhLm91dHB1dCk7XG4gICAgcmV0dXJuIG8ucHVia2V5cztcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnc2lnbmF0dXJlcycsICgpID0+IHtcbiAgICBpZiAoIWEuaW5wdXQpIHJldHVybjtcbiAgICByZXR1cm4gYnNjcmlwdC5kZWNvbXBpbGUoYS5pbnB1dCkuc2xpY2UoMSk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ2lucHV0JywgKCkgPT4ge1xuICAgIGlmICghYS5zaWduYXR1cmVzKSByZXR1cm47XG4gICAgcmV0dXJuIGJzY3JpcHQuY29tcGlsZShbT1BTLk9QXzBdLmNvbmNhdChhLnNpZ25hdHVyZXMpKTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnd2l0bmVzcycsICgpID0+IHtcbiAgICBpZiAoIW8uaW5wdXQpIHJldHVybjtcbiAgICByZXR1cm4gW107XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ25hbWUnLCAoKSA9PiB7XG4gICAgaWYgKCFvLm0gfHwgIW8ubikgcmV0dXJuO1xuICAgIHJldHVybiBgcDJtcygke28ubX0gb2YgJHtvLm59KWA7XG4gIH0pO1xuICAvLyBleHRlbmRlZCB2YWxpZGF0aW9uXG4gIGlmIChvcHRzLnZhbGlkYXRlKSB7XG4gICAgaWYgKGEub3V0cHV0KSB7XG4gICAgICBkZWNvZGUoYS5vdXRwdXQpO1xuICAgICAgaWYgKCF0eXBlc18xLnR5cGVmb3JjZS5OdW1iZXIoY2h1bmtzWzBdKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3V0cHV0IGlzIGludmFsaWQnKTtcbiAgICAgIGlmICghdHlwZXNfMS50eXBlZm9yY2UuTnVtYmVyKGNodW5rc1tjaHVua3MubGVuZ3RoIC0gMl0pKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPdXRwdXQgaXMgaW52YWxpZCcpO1xuICAgICAgaWYgKGNodW5rc1tjaHVua3MubGVuZ3RoIC0gMV0gIT09IE9QUy5PUF9DSEVDS01VTFRJU0lHKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPdXRwdXQgaXMgaW52YWxpZCcpO1xuICAgICAgaWYgKG8ubSA8PSAwIHx8IG8ubiA+IDE2IHx8IG8ubSA+IG8ubiB8fCBvLm4gIT09IGNodW5rcy5sZW5ndGggLSAzKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPdXRwdXQgaXMgaW52YWxpZCcpO1xuICAgICAgaWYgKCFvLnB1YmtleXMuZXZlcnkoeCA9PiAoMCwgdHlwZXNfMS5pc1BvaW50KSh4KSkpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ091dHB1dCBpcyBpbnZhbGlkJyk7XG4gICAgICBpZiAoYS5tICE9PSB1bmRlZmluZWQgJiYgYS5tICE9PSBvLm0pIHRocm93IG5ldyBUeXBlRXJyb3IoJ20gbWlzbWF0Y2gnKTtcbiAgICAgIGlmIChhLm4gIT09IHVuZGVmaW5lZCAmJiBhLm4gIT09IG8ubikgdGhyb3cgbmV3IFR5cGVFcnJvcignbiBtaXNtYXRjaCcpO1xuICAgICAgaWYgKGEucHVia2V5cyAmJiAhKDAsIHR5cGVzXzEuc3RhY2tzRXF1YWwpKGEucHVia2V5cywgby5wdWJrZXlzKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHVia2V5cyBtaXNtYXRjaCcpO1xuICAgIH1cbiAgICBpZiAoYS5wdWJrZXlzKSB7XG4gICAgICBpZiAoYS5uICE9PSB1bmRlZmluZWQgJiYgYS5uICE9PSBhLnB1YmtleXMubGVuZ3RoKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQdWJrZXkgY291bnQgbWlzbWF0Y2gnKTtcbiAgICAgIG8ubiA9IGEucHVia2V5cy5sZW5ndGg7XG4gICAgICBpZiAoby5uIDwgby5tKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQdWJrZXkgY291bnQgY2Fubm90IGJlIGxlc3MgdGhhbiBtJyk7XG4gICAgfVxuICAgIGlmIChhLnNpZ25hdHVyZXMpIHtcbiAgICAgIGlmIChhLnNpZ25hdHVyZXMubGVuZ3RoIDwgby5tKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb3QgZW5vdWdoIHNpZ25hdHVyZXMgcHJvdmlkZWQnKTtcbiAgICAgIGlmIChhLnNpZ25hdHVyZXMubGVuZ3RoID4gby5tKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUb28gbWFueSBzaWduYXR1cmVzIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIGlmIChhLmlucHV0KSB7XG4gICAgICBpZiAoYS5pbnB1dFswXSAhPT0gT1BTLk9QXzApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGlzIGludmFsaWQnKTtcbiAgICAgIGlmIChcbiAgICAgICAgby5zaWduYXR1cmVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAhby5zaWduYXR1cmVzLmV2ZXJ5KGlzQWNjZXB0YWJsZVNpZ25hdHVyZSlcbiAgICAgIClcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5wdXQgaGFzIGludmFsaWQgc2lnbmF0dXJlKHMpJyk7XG4gICAgICBpZiAoYS5zaWduYXR1cmVzICYmICEoMCwgdHlwZXNfMS5zdGFja3NFcXVhbCkoYS5zaWduYXR1cmVzLCBvLnNpZ25hdHVyZXMpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTaWduYXR1cmUgbWlzbWF0Y2gnKTtcbiAgICAgIGlmIChhLm0gIT09IHVuZGVmaW5lZCAmJiBhLm0gIT09IGEuc2lnbmF0dXJlcy5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpZ25hdHVyZSBjb3VudCBtaXNtYXRjaCcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihvLCBhKTtcbn1cbmV4cG9ydHMucDJtcyA9IHAybXM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/payments/p2ms.js\n\n}")},"./node_modules/bitcoinjs-lib/src/payments/p2pk.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.p2pk = void 0;\nconst networks_1 = __webpack_require__(/*! ../networks */ \"./node_modules/bitcoinjs-lib/src/networks.js\");\nconst bscript = __webpack_require__(/*! ../script */ \"./node_modules/bitcoinjs-lib/src/script.js\");\nconst types_1 = __webpack_require__(/*! ../types */ \"./node_modules/bitcoinjs-lib/src/types.js\");\nconst lazy = __webpack_require__(/*! ./lazy */ \"./node_modules/bitcoinjs-lib/src/payments/lazy.js\");\nconst OPS = bscript.OPS;\n// input: {signature}\n// output: {pubKey} OP_CHECKSIG\n/**\n * Creates a pay-to-public-key (P2PK) payment object.\n *\n * @param a - The payment object containing the necessary data.\n * @param opts - Optional payment options.\n * @returns The P2PK payment object.\n * @throws {TypeError} If the required data is not provided or if the data is invalid.\n */\nfunction p2pk(a, opts) {\n if (!a.input && !a.output && !a.pubkey && !a.input && !a.signature)\n throw new TypeError('Not enough data');\n opts = Object.assign({ validate: true }, opts || {});\n (0, types_1.typeforce)(\n {\n network: types_1.typeforce.maybe(types_1.typeforce.Object),\n output: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n pubkey: types_1.typeforce.maybe(types_1.isPoint),\n signature: types_1.typeforce.maybe(bscript.isCanonicalScriptSignature),\n input: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n },\n a,\n );\n const _chunks = lazy.value(() => {\n return bscript.decompile(a.input);\n });\n const network = a.network || networks_1.bitcoin;\n const o = { name: 'p2pk', network };\n lazy.prop(o, 'output', () => {\n if (!a.pubkey) return;\n return bscript.compile([a.pubkey, OPS.OP_CHECKSIG]);\n });\n lazy.prop(o, 'pubkey', () => {\n if (!a.output) return;\n return a.output.slice(1, -1);\n });\n lazy.prop(o, 'signature', () => {\n if (!a.input) return;\n return _chunks()[0];\n });\n lazy.prop(o, 'input', () => {\n if (!a.signature) return;\n return bscript.compile([a.signature]);\n });\n lazy.prop(o, 'witness', () => {\n if (!o.input) return;\n return [];\n });\n // extended validation\n if (opts.validate) {\n if (a.output) {\n if (a.output[a.output.length - 1] !== OPS.OP_CHECKSIG)\n throw new TypeError('Output is invalid');\n if (!(0, types_1.isPoint)(o.pubkey))\n throw new TypeError('Output pubkey is invalid');\n if (a.pubkey && !a.pubkey.equals(o.pubkey))\n throw new TypeError('Pubkey mismatch');\n }\n if (a.signature) {\n if (a.input && !a.input.equals(o.input))\n throw new TypeError('Signature mismatch');\n }\n if (a.input) {\n if (_chunks().length !== 1) throw new TypeError('Input is invalid');\n if (!bscript.isCanonicalScriptSignature(o.signature))\n throw new TypeError('Input has invalid signature');\n }\n }\n return Object.assign(o, a);\n}\nexports.p2pk = p2pk;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvcDJway5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxZQUFZO0FBQ1osbUJBQW1CLG1CQUFPLENBQUMsaUVBQWE7QUFDeEMsZ0JBQWdCLG1CQUFPLENBQUMsNkRBQVc7QUFDbkMsZ0JBQWdCLG1CQUFPLENBQUMsMkRBQVU7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLGlFQUFRO0FBQzdCO0FBQ0EsV0FBVztBQUNYLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFdBQVc7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsZ0JBQWdCLFlBQVk7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXRjb2luanMtbGliL3NyYy9wYXltZW50cy9wMnBrLmpzP2JlYzEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucDJwayA9IHZvaWQgMDtcbmNvbnN0IG5ldHdvcmtzXzEgPSByZXF1aXJlKCcuLi9uZXR3b3JrcycpO1xuY29uc3QgYnNjcmlwdCA9IHJlcXVpcmUoJy4uL3NjcmlwdCcpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoJy4uL3R5cGVzJyk7XG5jb25zdCBsYXp5ID0gcmVxdWlyZSgnLi9sYXp5Jyk7XG5jb25zdCBPUFMgPSBic2NyaXB0Lk9QUztcbi8vIGlucHV0OiB7c2lnbmF0dXJlfVxuLy8gb3V0cHV0OiB7cHViS2V5fSBPUF9DSEVDS1NJR1xuLyoqXG4gKiBDcmVhdGVzIGEgcGF5LXRvLXB1YmxpYy1rZXkgKFAyUEspIHBheW1lbnQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBhIC0gVGhlIHBheW1lbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBkYXRhLlxuICogQHBhcmFtIG9wdHMgLSBPcHRpb25hbCBwYXltZW50IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgUDJQSyBwYXltZW50IG9iamVjdC5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgdGhlIHJlcXVpcmVkIGRhdGEgaXMgbm90IHByb3ZpZGVkIG9yIGlmIHRoZSBkYXRhIGlzIGludmFsaWQuXG4gKi9cbmZ1bmN0aW9uIHAycGsoYSwgb3B0cykge1xuICBpZiAoIWEuaW5wdXQgJiYgIWEub3V0cHV0ICYmICFhLnB1YmtleSAmJiAhYS5pbnB1dCAmJiAhYS5zaWduYXR1cmUpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm90IGVub3VnaCBkYXRhJyk7XG4gIG9wdHMgPSBPYmplY3QuYXNzaWduKHsgdmFsaWRhdGU6IHRydWUgfSwgb3B0cyB8fCB7fSk7XG4gICgwLCB0eXBlc18xLnR5cGVmb3JjZSkoXG4gICAge1xuICAgICAgbmV0d29yazogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuT2JqZWN0KSxcbiAgICAgIG91dHB1dDogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyKSxcbiAgICAgIHB1YmtleTogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS5pc1BvaW50KSxcbiAgICAgIHNpZ25hdHVyZTogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUoYnNjcmlwdC5pc0Nhbm9uaWNhbFNjcmlwdFNpZ25hdHVyZSksXG4gICAgICBpbnB1dDogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyKSxcbiAgICB9LFxuICAgIGEsXG4gICk7XG4gIGNvbnN0IF9jaHVua3MgPSBsYXp5LnZhbHVlKCgpID0+IHtcbiAgICByZXR1cm4gYnNjcmlwdC5kZWNvbXBpbGUoYS5pbnB1dCk7XG4gIH0pO1xuICBjb25zdCBuZXR3b3JrID0gYS5uZXR3b3JrIHx8IG5ldHdvcmtzXzEuYml0Y29pbjtcbiAgY29uc3QgbyA9IHsgbmFtZTogJ3AycGsnLCBuZXR3b3JrIH07XG4gIGxhenkucHJvcChvLCAnb3V0cHV0JywgKCkgPT4ge1xuICAgIGlmICghYS5wdWJrZXkpIHJldHVybjtcbiAgICByZXR1cm4gYnNjcmlwdC5jb21waWxlKFthLnB1YmtleSwgT1BTLk9QX0NIRUNLU0lHXSk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ3B1YmtleScsICgpID0+IHtcbiAgICBpZiAoIWEub3V0cHV0KSByZXR1cm47XG4gICAgcmV0dXJuIGEub3V0cHV0LnNsaWNlKDEsIC0xKTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnc2lnbmF0dXJlJywgKCkgPT4ge1xuICAgIGlmICghYS5pbnB1dCkgcmV0dXJuO1xuICAgIHJldHVybiBfY2h1bmtzKClbMF07XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ2lucHV0JywgKCkgPT4ge1xuICAgIGlmICghYS5zaWduYXR1cmUpIHJldHVybjtcbiAgICByZXR1cm4gYnNjcmlwdC5jb21waWxlKFthLnNpZ25hdHVyZV0pO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICd3aXRuZXNzJywgKCkgPT4ge1xuICAgIGlmICghby5pbnB1dCkgcmV0dXJuO1xuICAgIHJldHVybiBbXTtcbiAgfSk7XG4gIC8vIGV4dGVuZGVkIHZhbGlkYXRpb25cbiAgaWYgKG9wdHMudmFsaWRhdGUpIHtcbiAgICBpZiAoYS5vdXRwdXQpIHtcbiAgICAgIGlmIChhLm91dHB1dFthLm91dHB1dC5sZW5ndGggLSAxXSAhPT0gT1BTLk9QX0NIRUNLU0lHKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPdXRwdXQgaXMgaW52YWxpZCcpO1xuICAgICAgaWYgKCEoMCwgdHlwZXNfMS5pc1BvaW50KShvLnB1YmtleSkpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ091dHB1dCBwdWJrZXkgaXMgaW52YWxpZCcpO1xuICAgICAgaWYgKGEucHVia2V5ICYmICFhLnB1YmtleS5lcXVhbHMoby5wdWJrZXkpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQdWJrZXkgbWlzbWF0Y2gnKTtcbiAgICB9XG4gICAgaWYgKGEuc2lnbmF0dXJlKSB7XG4gICAgICBpZiAoYS5pbnB1dCAmJiAhYS5pbnB1dC5lcXVhbHMoby5pbnB1dCkpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpZ25hdHVyZSBtaXNtYXRjaCcpO1xuICAgIH1cbiAgICBpZiAoYS5pbnB1dCkge1xuICAgICAgaWYgKF9jaHVua3MoKS5sZW5ndGggIT09IDEpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGlzIGludmFsaWQnKTtcbiAgICAgIGlmICghYnNjcmlwdC5pc0Nhbm9uaWNhbFNjcmlwdFNpZ25hdHVyZShvLnNpZ25hdHVyZSkpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGhhcyBpbnZhbGlkIHNpZ25hdHVyZScpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihvLCBhKTtcbn1cbmV4cG9ydHMucDJwayA9IHAycGs7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/payments/p2pk.js\n\n}")},"./node_modules/bitcoinjs-lib/src/payments/p2pkh.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.p2pkh = void 0;\nconst bcrypto = __webpack_require__(/*! ../crypto */ \"./node_modules/bitcoinjs-lib/src/crypto.js\");\nconst networks_1 = __webpack_require__(/*! ../networks */ \"./node_modules/bitcoinjs-lib/src/networks.js\");\nconst bscript = __webpack_require__(/*! ../script */ \"./node_modules/bitcoinjs-lib/src/script.js\");\nconst types_1 = __webpack_require__(/*! ../types */ \"./node_modules/bitcoinjs-lib/src/types.js\");\nconst lazy = __webpack_require__(/*! ./lazy */ \"./node_modules/bitcoinjs-lib/src/payments/lazy.js\");\nconst bs58check = __webpack_require__(/*! bs58check */ \"./node_modules/bs58check/index.js\");\nconst OPS = bscript.OPS;\n// input: {signature} {pubkey}\n// output: OP_DUP OP_HASH160 {hash160(pubkey)} OP_EQUALVERIFY OP_CHECKSIG\n/**\n * Creates a Pay-to-Public-Key-Hash (P2PKH) payment object.\n *\n * @param a - The payment object containing the necessary data.\n * @param opts - Optional payment options.\n * @returns The P2PKH payment object.\n * @throws {TypeError} If the required data is not provided or if the data is invalid.\n */\nfunction p2pkh(a, opts) {\n if (!a.address && !a.hash && !a.output && !a.pubkey && !a.input)\n throw new TypeError('Not enough data');\n opts = Object.assign({ validate: true }, opts || {});\n (0, types_1.typeforce)(\n {\n network: types_1.typeforce.maybe(types_1.typeforce.Object),\n address: types_1.typeforce.maybe(types_1.typeforce.String),\n hash: types_1.typeforce.maybe(types_1.typeforce.BufferN(20)),\n output: types_1.typeforce.maybe(types_1.typeforce.BufferN(25)),\n pubkey: types_1.typeforce.maybe(types_1.isPoint),\n signature: types_1.typeforce.maybe(bscript.isCanonicalScriptSignature),\n input: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n },\n a,\n );\n const _address = lazy.value(() => {\n const payload = Buffer.from(bs58check.decode(a.address));\n const version = payload.readUInt8(0);\n const hash = payload.slice(1);\n return { version, hash };\n });\n const _chunks = lazy.value(() => {\n return bscript.decompile(a.input);\n });\n const network = a.network || networks_1.bitcoin;\n const o = { name: 'p2pkh', network };\n lazy.prop(o, 'address', () => {\n if (!o.hash) return;\n const payload = Buffer.allocUnsafe(21);\n payload.writeUInt8(network.pubKeyHash, 0);\n o.hash.copy(payload, 1);\n return bs58check.encode(payload);\n });\n lazy.prop(o, 'hash', () => {\n if (a.output) return a.output.slice(3, 23);\n if (a.address) return _address().hash;\n if (a.pubkey || o.pubkey) return bcrypto.hash160(a.pubkey || o.pubkey);\n });\n lazy.prop(o, 'output', () => {\n if (!o.hash) return;\n return bscript.compile([\n OPS.OP_DUP,\n OPS.OP_HASH160,\n o.hash,\n OPS.OP_EQUALVERIFY,\n OPS.OP_CHECKSIG,\n ]);\n });\n lazy.prop(o, 'pubkey', () => {\n if (!a.input) return;\n return _chunks()[1];\n });\n lazy.prop(o, 'signature', () => {\n if (!a.input) return;\n return _chunks()[0];\n });\n lazy.prop(o, 'input', () => {\n if (!a.pubkey) return;\n if (!a.signature) return;\n return bscript.compile([a.signature, a.pubkey]);\n });\n lazy.prop(o, 'witness', () => {\n if (!o.input) return;\n return [];\n });\n // extended validation\n if (opts.validate) {\n let hash = Buffer.from([]);\n if (a.address) {\n if (_address().version !== network.pubKeyHash)\n throw new TypeError('Invalid version or Network mismatch');\n if (_address().hash.length !== 20) throw new TypeError('Invalid address');\n hash = _address().hash;\n }\n if (a.hash) {\n if (hash.length > 0 && !hash.equals(a.hash))\n throw new TypeError('Hash mismatch');\n else hash = a.hash;\n }\n if (a.output) {\n if (\n a.output.length !== 25 ||\n a.output[0] !== OPS.OP_DUP ||\n a.output[1] !== OPS.OP_HASH160 ||\n a.output[2] !== 0x14 ||\n a.output[23] !== OPS.OP_EQUALVERIFY ||\n a.output[24] !== OPS.OP_CHECKSIG\n )\n throw new TypeError('Output is invalid');\n const hash2 = a.output.slice(3, 23);\n if (hash.length > 0 && !hash.equals(hash2))\n throw new TypeError('Hash mismatch');\n else hash = hash2;\n }\n if (a.pubkey) {\n const pkh = bcrypto.hash160(a.pubkey);\n if (hash.length > 0 && !hash.equals(pkh))\n throw new TypeError('Hash mismatch');\n else hash = pkh;\n }\n if (a.input) {\n const chunks = _chunks();\n if (chunks.length !== 2) throw new TypeError('Input is invalid');\n if (!bscript.isCanonicalScriptSignature(chunks[0]))\n throw new TypeError('Input has invalid signature');\n if (!(0, types_1.isPoint)(chunks[1]))\n throw new TypeError('Input has invalid pubkey');\n if (a.signature && !a.signature.equals(chunks[0]))\n throw new TypeError('Signature mismatch');\n if (a.pubkey && !a.pubkey.equals(chunks[1]))\n throw new TypeError('Pubkey mismatch');\n const pkh = bcrypto.hash160(chunks[1]);\n if (hash.length > 0 && !hash.equals(pkh))\n throw new TypeError('Hash mismatch');\n }\n }\n return Object.assign(o, a);\n}\nexports.p2pkh = p2pkh;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvcDJwa2guanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGFBQWE7QUFDYixnQkFBZ0IsbUJBQU8sQ0FBQyw2REFBVztBQUNuQyxtQkFBbUIsbUJBQU8sQ0FBQyxpRUFBYTtBQUN4QyxnQkFBZ0IsbUJBQU8sQ0FBQyw2REFBVztBQUNuQyxnQkFBZ0IsbUJBQU8sQ0FBQywyREFBVTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsaUVBQVE7QUFDN0Isa0JBQWtCLG1CQUFPLENBQUMsb0RBQVc7QUFDckM7QUFDQSxXQUFXLFlBQVk7QUFDdkIsOEJBQThCLGlCQUFpQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFdBQVc7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsZ0JBQWdCLFlBQVk7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixNQUFNO0FBQzFCO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLG9CQUFvQixNQUFNO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL3BheW1lbnRzL3AycGtoLmpzP2FjYjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMucDJwa2ggPSB2b2lkIDA7XG5jb25zdCBiY3J5cHRvID0gcmVxdWlyZSgnLi4vY3J5cHRvJyk7XG5jb25zdCBuZXR3b3Jrc18xID0gcmVxdWlyZSgnLi4vbmV0d29ya3MnKTtcbmNvbnN0IGJzY3JpcHQgPSByZXF1aXJlKCcuLi9zY3JpcHQnKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKCcuLi90eXBlcycpO1xuY29uc3QgbGF6eSA9IHJlcXVpcmUoJy4vbGF6eScpO1xuY29uc3QgYnM1OGNoZWNrID0gcmVxdWlyZSgnYnM1OGNoZWNrJyk7XG5jb25zdCBPUFMgPSBic2NyaXB0Lk9QUztcbi8vIGlucHV0OiB7c2lnbmF0dXJlfSB7cHVia2V5fVxuLy8gb3V0cHV0OiBPUF9EVVAgT1BfSEFTSDE2MCB7aGFzaDE2MChwdWJrZXkpfSBPUF9FUVVBTFZFUklGWSBPUF9DSEVDS1NJR1xuLyoqXG4gKiBDcmVhdGVzIGEgUGF5LXRvLVB1YmxpYy1LZXktSGFzaCAoUDJQS0gpIHBheW1lbnQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBhIC0gVGhlIHBheW1lbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBkYXRhLlxuICogQHBhcmFtIG9wdHMgLSBPcHRpb25hbCBwYXltZW50IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgUDJQS0ggcGF5bWVudCBvYmplY3QuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSByZXF1aXJlZCBkYXRhIGlzIG5vdCBwcm92aWRlZCBvciBpZiB0aGUgZGF0YSBpcyBpbnZhbGlkLlxuICovXG5mdW5jdGlvbiBwMnBraChhLCBvcHRzKSB7XG4gIGlmICghYS5hZGRyZXNzICYmICFhLmhhc2ggJiYgIWEub3V0cHV0ICYmICFhLnB1YmtleSAmJiAhYS5pbnB1dClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb3QgZW5vdWdoIGRhdGEnKTtcbiAgb3B0cyA9IE9iamVjdC5hc3NpZ24oeyB2YWxpZGF0ZTogdHJ1ZSB9LCBvcHRzIHx8IHt9KTtcbiAgKDAsIHR5cGVzXzEudHlwZWZvcmNlKShcbiAgICB7XG4gICAgICBuZXR3b3JrOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5PYmplY3QpLFxuICAgICAgYWRkcmVzczogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuU3RyaW5nKSxcbiAgICAgIGhhc2g6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlck4oMjApKSxcbiAgICAgIG91dHB1dDogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyTigyNSkpLFxuICAgICAgcHVia2V5OiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLmlzUG9pbnQpLFxuICAgICAgc2lnbmF0dXJlOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZShic2NyaXB0LmlzQ2Fub25pY2FsU2NyaXB0U2lnbmF0dXJlKSxcbiAgICAgIGlucHV0OiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5CdWZmZXIpLFxuICAgIH0sXG4gICAgYSxcbiAgKTtcbiAgY29uc3QgX2FkZHJlc3MgPSBsYXp5LnZhbHVlKCgpID0+IHtcbiAgICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmZyb20oYnM1OGNoZWNrLmRlY29kZShhLmFkZHJlc3MpKTtcbiAgICBjb25zdCB2ZXJzaW9uID0gcGF5bG9hZC5yZWFkVUludDgoMCk7XG4gICAgY29uc3QgaGFzaCA9IHBheWxvYWQuc2xpY2UoMSk7XG4gICAgcmV0dXJuIHsgdmVyc2lvbiwgaGFzaCB9O1xuICB9KTtcbiAgY29uc3QgX2NodW5rcyA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIHJldHVybiBic2NyaXB0LmRlY29tcGlsZShhLmlucHV0KTtcbiAgfSk7XG4gIGNvbnN0IG5ldHdvcmsgPSBhLm5ldHdvcmsgfHwgbmV0d29ya3NfMS5iaXRjb2luO1xuICBjb25zdCBvID0geyBuYW1lOiAncDJwa2gnLCBuZXR3b3JrIH07XG4gIGxhenkucHJvcChvLCAnYWRkcmVzcycsICgpID0+IHtcbiAgICBpZiAoIW8uaGFzaCkgcmV0dXJuO1xuICAgIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMjEpO1xuICAgIHBheWxvYWQud3JpdGVVSW50OChuZXR3b3JrLnB1YktleUhhc2gsIDApO1xuICAgIG8uaGFzaC5jb3B5KHBheWxvYWQsIDEpO1xuICAgIHJldHVybiBiczU4Y2hlY2suZW5jb2RlKHBheWxvYWQpO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdoYXNoJywgKCkgPT4ge1xuICAgIGlmIChhLm91dHB1dCkgcmV0dXJuIGEub3V0cHV0LnNsaWNlKDMsIDIzKTtcbiAgICBpZiAoYS5hZGRyZXNzKSByZXR1cm4gX2FkZHJlc3MoKS5oYXNoO1xuICAgIGlmIChhLnB1YmtleSB8fCBvLnB1YmtleSkgcmV0dXJuIGJjcnlwdG8uaGFzaDE2MChhLnB1YmtleSB8fCBvLnB1YmtleSk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ291dHB1dCcsICgpID0+IHtcbiAgICBpZiAoIW8uaGFzaCkgcmV0dXJuO1xuICAgIHJldHVybiBic2NyaXB0LmNvbXBpbGUoW1xuICAgICAgT1BTLk9QX0RVUCxcbiAgICAgIE9QUy5PUF9IQVNIMTYwLFxuICAgICAgby5oYXNoLFxuICAgICAgT1BTLk9QX0VRVUFMVkVSSUZZLFxuICAgICAgT1BTLk9QX0NIRUNLU0lHLFxuICAgIF0pO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdwdWJrZXknLCAoKSA9PiB7XG4gICAgaWYgKCFhLmlucHV0KSByZXR1cm47XG4gICAgcmV0dXJuIF9jaHVua3MoKVsxXTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnc2lnbmF0dXJlJywgKCkgPT4ge1xuICAgIGlmICghYS5pbnB1dCkgcmV0dXJuO1xuICAgIHJldHVybiBfY2h1bmtzKClbMF07XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ2lucHV0JywgKCkgPT4ge1xuICAgIGlmICghYS5wdWJrZXkpIHJldHVybjtcbiAgICBpZiAoIWEuc2lnbmF0dXJlKSByZXR1cm47XG4gICAgcmV0dXJuIGJzY3JpcHQuY29tcGlsZShbYS5zaWduYXR1cmUsIGEucHVia2V5XSk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ3dpdG5lc3MnLCAoKSA9PiB7XG4gICAgaWYgKCFvLmlucHV0KSByZXR1cm47XG4gICAgcmV0dXJuIFtdO1xuICB9KTtcbiAgLy8gZXh0ZW5kZWQgdmFsaWRhdGlvblxuICBpZiAob3B0cy52YWxpZGF0ZSkge1xuICAgIGxldCBoYXNoID0gQnVmZmVyLmZyb20oW10pO1xuICAgIGlmIChhLmFkZHJlc3MpIHtcbiAgICAgIGlmIChfYWRkcmVzcygpLnZlcnNpb24gIT09IG5ldHdvcmsucHViS2V5SGFzaClcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB2ZXJzaW9uIG9yIE5ldHdvcmsgbWlzbWF0Y2gnKTtcbiAgICAgIGlmIChfYWRkcmVzcygpLmhhc2gubGVuZ3RoICE9PSAyMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhZGRyZXNzJyk7XG4gICAgICBoYXNoID0gX2FkZHJlc3MoKS5oYXNoO1xuICAgIH1cbiAgICBpZiAoYS5oYXNoKSB7XG4gICAgICBpZiAoaGFzaC5sZW5ndGggPiAwICYmICFoYXNoLmVxdWFscyhhLmhhc2gpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIYXNoIG1pc21hdGNoJyk7XG4gICAgICBlbHNlIGhhc2ggPSBhLmhhc2g7XG4gICAgfVxuICAgIGlmIChhLm91dHB1dCkge1xuICAgICAgaWYgKFxuICAgICAgICBhLm91dHB1dC5sZW5ndGggIT09IDI1IHx8XG4gICAgICAgIGEub3V0cHV0WzBdICE9PSBPUFMuT1BfRFVQIHx8XG4gICAgICAgIGEub3V0cHV0WzFdICE9PSBPUFMuT1BfSEFTSDE2MCB8fFxuICAgICAgICBhLm91dHB1dFsyXSAhPT0gMHgxNCB8fFxuICAgICAgICBhLm91dHB1dFsyM10gIT09IE9QUy5PUF9FUVVBTFZFUklGWSB8fFxuICAgICAgICBhLm91dHB1dFsyNF0gIT09IE9QUy5PUF9DSEVDS1NJR1xuICAgICAgKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPdXRwdXQgaXMgaW52YWxpZCcpO1xuICAgICAgY29uc3QgaGFzaDIgPSBhLm91dHB1dC5zbGljZSgzLCAyMyk7XG4gICAgICBpZiAoaGFzaC5sZW5ndGggPiAwICYmICFoYXNoLmVxdWFscyhoYXNoMikpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hhc2ggbWlzbWF0Y2gnKTtcbiAgICAgIGVsc2UgaGFzaCA9IGhhc2gyO1xuICAgIH1cbiAgICBpZiAoYS5wdWJrZXkpIHtcbiAgICAgIGNvbnN0IHBraCA9IGJjcnlwdG8uaGFzaDE2MChhLnB1YmtleSk7XG4gICAgICBpZiAoaGFzaC5sZW5ndGggPiAwICYmICFoYXNoLmVxdWFscyhwa2gpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIYXNoIG1pc21hdGNoJyk7XG4gICAgICBlbHNlIGhhc2ggPSBwa2g7XG4gICAgfVxuICAgIGlmIChhLmlucHV0KSB7XG4gICAgICBjb25zdCBjaHVua3MgPSBfY2h1bmtzKCk7XG4gICAgICBpZiAoY2h1bmtzLmxlbmd0aCAhPT0gMikgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5wdXQgaXMgaW52YWxpZCcpO1xuICAgICAgaWYgKCFic2NyaXB0LmlzQ2Fub25pY2FsU2NyaXB0U2lnbmF0dXJlKGNodW5rc1swXSkpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGhhcyBpbnZhbGlkIHNpZ25hdHVyZScpO1xuICAgICAgaWYgKCEoMCwgdHlwZXNfMS5pc1BvaW50KShjaHVua3NbMV0pKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnB1dCBoYXMgaW52YWxpZCBwdWJrZXknKTtcbiAgICAgIGlmIChhLnNpZ25hdHVyZSAmJiAhYS5zaWduYXR1cmUuZXF1YWxzKGNodW5rc1swXSkpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpZ25hdHVyZSBtaXNtYXRjaCcpO1xuICAgICAgaWYgKGEucHVia2V5ICYmICFhLnB1YmtleS5lcXVhbHMoY2h1bmtzWzFdKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHVia2V5IG1pc21hdGNoJyk7XG4gICAgICBjb25zdCBwa2ggPSBiY3J5cHRvLmhhc2gxNjAoY2h1bmtzWzFdKTtcbiAgICAgIGlmIChoYXNoLmxlbmd0aCA+IDAgJiYgIWhhc2guZXF1YWxzKHBraCkpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hhc2ggbWlzbWF0Y2gnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obywgYSk7XG59XG5leHBvcnRzLnAycGtoID0gcDJwa2g7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/payments/p2pkh.js\n\n}")},"./node_modules/bitcoinjs-lib/src/payments/p2sh.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.p2sh = void 0;\nconst bcrypto = __webpack_require__(/*! ../crypto */ \"./node_modules/bitcoinjs-lib/src/crypto.js\");\nconst networks_1 = __webpack_require__(/*! ../networks */ \"./node_modules/bitcoinjs-lib/src/networks.js\");\nconst bscript = __webpack_require__(/*! ../script */ \"./node_modules/bitcoinjs-lib/src/script.js\");\nconst types_1 = __webpack_require__(/*! ../types */ \"./node_modules/bitcoinjs-lib/src/types.js\");\nconst lazy = __webpack_require__(/*! ./lazy */ \"./node_modules/bitcoinjs-lib/src/payments/lazy.js\");\nconst bs58check = __webpack_require__(/*! bs58check */ \"./node_modules/bs58check/index.js\");\nconst OPS = bscript.OPS;\n// input: [redeemScriptSig ...] {redeemScript}\n// witness: \n// output: OP_HASH160 {hash160(redeemScript)} OP_EQUAL\n/**\n * Creates a Pay-to-Script-Hash (P2SH) payment object.\n *\n * @param a - The payment object containing the necessary data.\n * @param opts - Optional payment options.\n * @returns The P2SH payment object.\n * @throws {TypeError} If the required data is not provided or if the data is invalid.\n */\nfunction p2sh(a, opts) {\n if (!a.address && !a.hash && !a.output && !a.redeem && !a.input)\n throw new TypeError('Not enough data');\n opts = Object.assign({ validate: true }, opts || {});\n (0, types_1.typeforce)(\n {\n network: types_1.typeforce.maybe(types_1.typeforce.Object),\n address: types_1.typeforce.maybe(types_1.typeforce.String),\n hash: types_1.typeforce.maybe(types_1.typeforce.BufferN(20)),\n output: types_1.typeforce.maybe(types_1.typeforce.BufferN(23)),\n redeem: types_1.typeforce.maybe({\n network: types_1.typeforce.maybe(types_1.typeforce.Object),\n output: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n input: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n witness: types_1.typeforce.maybe(\n types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n ),\n }),\n input: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n witness: types_1.typeforce.maybe(\n types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n ),\n },\n a,\n );\n let network = a.network;\n if (!network) {\n network = (a.redeem && a.redeem.network) || networks_1.bitcoin;\n }\n const o = { network };\n const _address = lazy.value(() => {\n const payload = Buffer.from(bs58check.decode(a.address));\n const version = payload.readUInt8(0);\n const hash = payload.slice(1);\n return { version, hash };\n });\n const _chunks = lazy.value(() => {\n return bscript.decompile(a.input);\n });\n const _redeem = lazy.value(() => {\n const chunks = _chunks();\n const lastChunk = chunks[chunks.length - 1];\n return {\n network,\n output: lastChunk === OPS.OP_FALSE ? Buffer.from([]) : lastChunk,\n input: bscript.compile(chunks.slice(0, -1)),\n witness: a.witness || [],\n };\n });\n // output dependents\n lazy.prop(o, 'address', () => {\n if (!o.hash) return;\n const payload = Buffer.allocUnsafe(21);\n payload.writeUInt8(o.network.scriptHash, 0);\n o.hash.copy(payload, 1);\n return bs58check.encode(payload);\n });\n lazy.prop(o, 'hash', () => {\n // in order of least effort\n if (a.output) return a.output.slice(2, 22);\n if (a.address) return _address().hash;\n if (o.redeem && o.redeem.output) return bcrypto.hash160(o.redeem.output);\n });\n lazy.prop(o, 'output', () => {\n if (!o.hash) return;\n return bscript.compile([OPS.OP_HASH160, o.hash, OPS.OP_EQUAL]);\n });\n // input dependents\n lazy.prop(o, 'redeem', () => {\n if (!a.input) return;\n return _redeem();\n });\n lazy.prop(o, 'input', () => {\n if (!a.redeem || !a.redeem.input || !a.redeem.output) return;\n return bscript.compile(\n [].concat(bscript.decompile(a.redeem.input), a.redeem.output),\n );\n });\n lazy.prop(o, 'witness', () => {\n if (o.redeem && o.redeem.witness) return o.redeem.witness;\n if (o.input) return [];\n });\n lazy.prop(o, 'name', () => {\n const nameParts = ['p2sh'];\n if (o.redeem !== undefined && o.redeem.name !== undefined)\n nameParts.push(o.redeem.name);\n return nameParts.join('-');\n });\n if (opts.validate) {\n let hash = Buffer.from([]);\n if (a.address) {\n if (_address().version !== network.scriptHash)\n throw new TypeError('Invalid version or Network mismatch');\n if (_address().hash.length !== 20) throw new TypeError('Invalid address');\n hash = _address().hash;\n }\n if (a.hash) {\n if (hash.length > 0 && !hash.equals(a.hash))\n throw new TypeError('Hash mismatch');\n else hash = a.hash;\n }\n if (a.output) {\n if (\n a.output.length !== 23 ||\n a.output[0] !== OPS.OP_HASH160 ||\n a.output[1] !== 0x14 ||\n a.output[22] !== OPS.OP_EQUAL\n )\n throw new TypeError('Output is invalid');\n const hash2 = a.output.slice(2, 22);\n if (hash.length > 0 && !hash.equals(hash2))\n throw new TypeError('Hash mismatch');\n else hash = hash2;\n }\n // inlined to prevent 'no-inner-declarations' failing\n const checkRedeem = redeem => {\n // is the redeem output empty/invalid?\n if (redeem.output) {\n const decompile = bscript.decompile(redeem.output);\n if (!decompile || decompile.length < 1)\n throw new TypeError('Redeem.output too short');\n if (redeem.output.byteLength > 520)\n throw new TypeError(\n 'Redeem.output unspendable if larger than 520 bytes',\n );\n if (bscript.countNonPushOnlyOPs(decompile) > 201)\n throw new TypeError(\n 'Redeem.output unspendable with more than 201 non-push ops',\n );\n // match hash against other sources\n const hash2 = bcrypto.hash160(redeem.output);\n if (hash.length > 0 && !hash.equals(hash2))\n throw new TypeError('Hash mismatch');\n else hash = hash2;\n }\n if (redeem.input) {\n const hasInput = redeem.input.length > 0;\n const hasWitness = redeem.witness && redeem.witness.length > 0;\n if (!hasInput && !hasWitness) throw new TypeError('Empty input');\n if (hasInput && hasWitness)\n throw new TypeError('Input and witness provided');\n if (hasInput) {\n const richunks = bscript.decompile(redeem.input);\n if (!bscript.isPushOnly(richunks))\n throw new TypeError('Non push-only scriptSig');\n }\n }\n };\n if (a.input) {\n const chunks = _chunks();\n if (!chunks || chunks.length < 1) throw new TypeError('Input too short');\n if (!Buffer.isBuffer(_redeem().output))\n throw new TypeError('Input is invalid');\n checkRedeem(_redeem());\n }\n if (a.redeem) {\n if (a.redeem.network && a.redeem.network !== network)\n throw new TypeError('Network mismatch');\n if (a.input) {\n const redeem = _redeem();\n if (a.redeem.output && !a.redeem.output.equals(redeem.output))\n throw new TypeError('Redeem.output mismatch');\n if (a.redeem.input && !a.redeem.input.equals(redeem.input))\n throw new TypeError('Redeem.input mismatch');\n }\n checkRedeem(a.redeem);\n }\n if (a.witness) {\n if (\n a.redeem &&\n a.redeem.witness &&\n !(0, types_1.stacksEqual)(a.redeem.witness, a.witness)\n )\n throw new TypeError('Witness and redeem.witness mismatch');\n }\n }\n return Object.assign(o, a);\n}\nexports.p2sh = p2sh;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvcDJzaC5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsWUFBWTtBQUNaLGdCQUFnQixtQkFBTyxDQUFDLDZEQUFXO0FBQ25DLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFhO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLDZEQUFXO0FBQ25DLGdCQUFnQixtQkFBTyxDQUFDLDJEQUFVO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxpRUFBUTtBQUM3QixrQkFBa0IsbUJBQU8sQ0FBQyxvREFBVztBQUNyQztBQUNBLGlDQUFpQztBQUNqQztBQUNBLHVCQUF1Qix1QkFBdUI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxXQUFXO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGdCQUFnQixZQUFZO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLG9CQUFvQixNQUFNO0FBQzFCO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxNQUFNO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsTUFBTTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL3BheW1lbnRzL3Ayc2guanM/YzRiYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wMnNoID0gdm9pZCAwO1xuY29uc3QgYmNyeXB0byA9IHJlcXVpcmUoJy4uL2NyeXB0bycpO1xuY29uc3QgbmV0d29ya3NfMSA9IHJlcXVpcmUoJy4uL25ldHdvcmtzJyk7XG5jb25zdCBic2NyaXB0ID0gcmVxdWlyZSgnLi4vc2NyaXB0Jyk7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZSgnLi4vdHlwZXMnKTtcbmNvbnN0IGxhenkgPSByZXF1aXJlKCcuL2xhenknKTtcbmNvbnN0IGJzNThjaGVjayA9IHJlcXVpcmUoJ2JzNThjaGVjaycpO1xuY29uc3QgT1BTID0gYnNjcmlwdC5PUFM7XG4vLyBpbnB1dDogW3JlZGVlbVNjcmlwdFNpZyAuLi5dIHtyZWRlZW1TY3JpcHR9XG4vLyB3aXRuZXNzOiA8Pz5cbi8vIG91dHB1dDogT1BfSEFTSDE2MCB7aGFzaDE2MChyZWRlZW1TY3JpcHQpfSBPUF9FUVVBTFxuLyoqXG4gKiBDcmVhdGVzIGEgUGF5LXRvLVNjcmlwdC1IYXNoIChQMlNIKSBwYXltZW50IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gYSAtIFRoZSBwYXltZW50IG9iamVjdCBjb250YWluaW5nIHRoZSBuZWNlc3NhcnkgZGF0YS5cbiAqIEBwYXJhbSBvcHRzIC0gT3B0aW9uYWwgcGF5bWVudCBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIFAyU0ggcGF5bWVudCBvYmplY3QuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSByZXF1aXJlZCBkYXRhIGlzIG5vdCBwcm92aWRlZCBvciBpZiB0aGUgZGF0YSBpcyBpbnZhbGlkLlxuICovXG5mdW5jdGlvbiBwMnNoKGEsIG9wdHMpIHtcbiAgaWYgKCFhLmFkZHJlc3MgJiYgIWEuaGFzaCAmJiAhYS5vdXRwdXQgJiYgIWEucmVkZWVtICYmICFhLmlucHV0KVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vdCBlbm91Z2ggZGF0YScpO1xuICBvcHRzID0gT2JqZWN0LmFzc2lnbih7IHZhbGlkYXRlOiB0cnVlIH0sIG9wdHMgfHwge30pO1xuICAoMCwgdHlwZXNfMS50eXBlZm9yY2UpKFxuICAgIHtcbiAgICAgIG5ldHdvcms6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLk9iamVjdCksXG4gICAgICBhZGRyZXNzOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5TdHJpbmcpLFxuICAgICAgaGFzaDogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyTigyMCkpLFxuICAgICAgb3V0cHV0OiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5CdWZmZXJOKDIzKSksXG4gICAgICByZWRlZW06IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHtcbiAgICAgICAgbmV0d29yazogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuT2JqZWN0KSxcbiAgICAgICAgb3V0cHV0OiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5CdWZmZXIpLFxuICAgICAgICBpbnB1dDogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyKSxcbiAgICAgICAgd2l0bmVzczogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUoXG4gICAgICAgICAgdHlwZXNfMS50eXBlZm9yY2UuYXJyYXlPZih0eXBlc18xLnR5cGVmb3JjZS5CdWZmZXIpLFxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgICBpbnB1dDogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyKSxcbiAgICAgIHdpdG5lc3M6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKFxuICAgICAgICB0eXBlc18xLnR5cGVmb3JjZS5hcnJheU9mKHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlciksXG4gICAgICApLFxuICAgIH0sXG4gICAgYSxcbiAgKTtcbiAgbGV0IG5ldHdvcmsgPSBhLm5ldHdvcms7XG4gIGlmICghbmV0d29yaykge1xuICAgIG5ldHdvcmsgPSAoYS5yZWRlZW0gJiYgYS5yZWRlZW0ubmV0d29yaykgfHwgbmV0d29ya3NfMS5iaXRjb2luO1xuICB9XG4gIGNvbnN0IG8gPSB7IG5ldHdvcmsgfTtcbiAgY29uc3QgX2FkZHJlc3MgPSBsYXp5LnZhbHVlKCgpID0+IHtcbiAgICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmZyb20oYnM1OGNoZWNrLmRlY29kZShhLmFkZHJlc3MpKTtcbiAgICBjb25zdCB2ZXJzaW9uID0gcGF5bG9hZC5yZWFkVUludDgoMCk7XG4gICAgY29uc3QgaGFzaCA9IHBheWxvYWQuc2xpY2UoMSk7XG4gICAgcmV0dXJuIHsgdmVyc2lvbiwgaGFzaCB9O1xuICB9KTtcbiAgY29uc3QgX2NodW5rcyA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIHJldHVybiBic2NyaXB0LmRlY29tcGlsZShhLmlucHV0KTtcbiAgfSk7XG4gIGNvbnN0IF9yZWRlZW0gPSBsYXp5LnZhbHVlKCgpID0+IHtcbiAgICBjb25zdCBjaHVua3MgPSBfY2h1bmtzKCk7XG4gICAgY29uc3QgbGFzdENodW5rID0gY2h1bmtzW2NodW5rcy5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4ge1xuICAgICAgbmV0d29yayxcbiAgICAgIG91dHB1dDogbGFzdENodW5rID09PSBPUFMuT1BfRkFMU0UgPyBCdWZmZXIuZnJvbShbXSkgOiBsYXN0Q2h1bmssXG4gICAgICBpbnB1dDogYnNjcmlwdC5jb21waWxlKGNodW5rcy5zbGljZSgwLCAtMSkpLFxuICAgICAgd2l0bmVzczogYS53aXRuZXNzIHx8IFtdLFxuICAgIH07XG4gIH0pO1xuICAvLyBvdXRwdXQgZGVwZW5kZW50c1xuICBsYXp5LnByb3AobywgJ2FkZHJlc3MnLCAoKSA9PiB7XG4gICAgaWYgKCFvLmhhc2gpIHJldHVybjtcbiAgICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIxKTtcbiAgICBwYXlsb2FkLndyaXRlVUludDgoby5uZXR3b3JrLnNjcmlwdEhhc2gsIDApO1xuICAgIG8uaGFzaC5jb3B5KHBheWxvYWQsIDEpO1xuICAgIHJldHVybiBiczU4Y2hlY2suZW5jb2RlKHBheWxvYWQpO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdoYXNoJywgKCkgPT4ge1xuICAgIC8vIGluIG9yZGVyIG9mIGxlYXN0IGVmZm9ydFxuICAgIGlmIChhLm91dHB1dCkgcmV0dXJuIGEub3V0cHV0LnNsaWNlKDIsIDIyKTtcbiAgICBpZiAoYS5hZGRyZXNzKSByZXR1cm4gX2FkZHJlc3MoKS5oYXNoO1xuICAgIGlmIChvLnJlZGVlbSAmJiBvLnJlZGVlbS5vdXRwdXQpIHJldHVybiBiY3J5cHRvLmhhc2gxNjAoby5yZWRlZW0ub3V0cHV0KTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnb3V0cHV0JywgKCkgPT4ge1xuICAgIGlmICghby5oYXNoKSByZXR1cm47XG4gICAgcmV0dXJuIGJzY3JpcHQuY29tcGlsZShbT1BTLk9QX0hBU0gxNjAsIG8uaGFzaCwgT1BTLk9QX0VRVUFMXSk7XG4gIH0pO1xuICAvLyBpbnB1dCBkZXBlbmRlbnRzXG4gIGxhenkucHJvcChvLCAncmVkZWVtJywgKCkgPT4ge1xuICAgIGlmICghYS5pbnB1dCkgcmV0dXJuO1xuICAgIHJldHVybiBfcmVkZWVtKCk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ2lucHV0JywgKCkgPT4ge1xuICAgIGlmICghYS5yZWRlZW0gfHwgIWEucmVkZWVtLmlucHV0IHx8ICFhLnJlZGVlbS5vdXRwdXQpIHJldHVybjtcbiAgICByZXR1cm4gYnNjcmlwdC5jb21waWxlKFxuICAgICAgW10uY29uY2F0KGJzY3JpcHQuZGVjb21waWxlKGEucmVkZWVtLmlucHV0KSwgYS5yZWRlZW0ub3V0cHV0KSxcbiAgICApO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICd3aXRuZXNzJywgKCkgPT4ge1xuICAgIGlmIChvLnJlZGVlbSAmJiBvLnJlZGVlbS53aXRuZXNzKSByZXR1cm4gby5yZWRlZW0ud2l0bmVzcztcbiAgICBpZiAoby5pbnB1dCkgcmV0dXJuIFtdO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICduYW1lJywgKCkgPT4ge1xuICAgIGNvbnN0IG5hbWVQYXJ0cyA9IFsncDJzaCddO1xuICAgIGlmIChvLnJlZGVlbSAhPT0gdW5kZWZpbmVkICYmIG8ucmVkZWVtLm5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgIG5hbWVQYXJ0cy5wdXNoKG8ucmVkZWVtLm5hbWUpO1xuICAgIHJldHVybiBuYW1lUGFydHMuam9pbignLScpO1xuICB9KTtcbiAgaWYgKG9wdHMudmFsaWRhdGUpIHtcbiAgICBsZXQgaGFzaCA9IEJ1ZmZlci5mcm9tKFtdKTtcbiAgICBpZiAoYS5hZGRyZXNzKSB7XG4gICAgICBpZiAoX2FkZHJlc3MoKS52ZXJzaW9uICE9PSBuZXR3b3JrLnNjcmlwdEhhc2gpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdmVyc2lvbiBvciBOZXR3b3JrIG1pc21hdGNoJyk7XG4gICAgICBpZiAoX2FkZHJlc3MoKS5oYXNoLmxlbmd0aCAhPT0gMjApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYWRkcmVzcycpO1xuICAgICAgaGFzaCA9IF9hZGRyZXNzKCkuaGFzaDtcbiAgICB9XG4gICAgaWYgKGEuaGFzaCkge1xuICAgICAgaWYgKGhhc2gubGVuZ3RoID4gMCAmJiAhaGFzaC5lcXVhbHMoYS5oYXNoKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSGFzaCBtaXNtYXRjaCcpO1xuICAgICAgZWxzZSBoYXNoID0gYS5oYXNoO1xuICAgIH1cbiAgICBpZiAoYS5vdXRwdXQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgYS5vdXRwdXQubGVuZ3RoICE9PSAyMyB8fFxuICAgICAgICBhLm91dHB1dFswXSAhPT0gT1BTLk9QX0hBU0gxNjAgfHxcbiAgICAgICAgYS5vdXRwdXRbMV0gIT09IDB4MTQgfHxcbiAgICAgICAgYS5vdXRwdXRbMjJdICE9PSBPUFMuT1BfRVFVQUxcbiAgICAgIClcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3V0cHV0IGlzIGludmFsaWQnKTtcbiAgICAgIGNvbnN0IGhhc2gyID0gYS5vdXRwdXQuc2xpY2UoMiwgMjIpO1xuICAgICAgaWYgKGhhc2gubGVuZ3RoID4gMCAmJiAhaGFzaC5lcXVhbHMoaGFzaDIpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIYXNoIG1pc21hdGNoJyk7XG4gICAgICBlbHNlIGhhc2ggPSBoYXNoMjtcbiAgICB9XG4gICAgLy8gaW5saW5lZCB0byBwcmV2ZW50ICduby1pbm5lci1kZWNsYXJhdGlvbnMnIGZhaWxpbmdcbiAgICBjb25zdCBjaGVja1JlZGVlbSA9IHJlZGVlbSA9PiB7XG4gICAgICAvLyBpcyB0aGUgcmVkZWVtIG91dHB1dCBlbXB0eS9pbnZhbGlkP1xuICAgICAgaWYgKHJlZGVlbS5vdXRwdXQpIHtcbiAgICAgICAgY29uc3QgZGVjb21waWxlID0gYnNjcmlwdC5kZWNvbXBpbGUocmVkZWVtLm91dHB1dCk7XG4gICAgICAgIGlmICghZGVjb21waWxlIHx8IGRlY29tcGlsZS5sZW5ndGggPCAxKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZGVlbS5vdXRwdXQgdG9vIHNob3J0Jyk7XG4gICAgICAgIGlmIChyZWRlZW0ub3V0cHV0LmJ5dGVMZW5ndGggPiA1MjApXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICdSZWRlZW0ub3V0cHV0IHVuc3BlbmRhYmxlIGlmIGxhcmdlciB0aGFuIDUyMCBieXRlcycsXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGJzY3JpcHQuY291bnROb25QdXNoT25seU9QcyhkZWNvbXBpbGUpID4gMjAxKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnUmVkZWVtLm91dHB1dCB1bnNwZW5kYWJsZSB3aXRoIG1vcmUgdGhhbiAyMDEgbm9uLXB1c2ggb3BzJyxcbiAgICAgICAgICApO1xuICAgICAgICAvLyBtYXRjaCBoYXNoIGFnYWluc3Qgb3RoZXIgc291cmNlc1xuICAgICAgICBjb25zdCBoYXNoMiA9IGJjcnlwdG8uaGFzaDE2MChyZWRlZW0ub3V0cHV0KTtcbiAgICAgICAgaWYgKGhhc2gubGVuZ3RoID4gMCAmJiAhaGFzaC5lcXVhbHMoaGFzaDIpKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hhc2ggbWlzbWF0Y2gnKTtcbiAgICAgICAgZWxzZSBoYXNoID0gaGFzaDI7XG4gICAgICB9XG4gICAgICBpZiAocmVkZWVtLmlucHV0KSB7XG4gICAgICAgIGNvbnN0IGhhc0lucHV0ID0gcmVkZWVtLmlucHV0Lmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IGhhc1dpdG5lc3MgPSByZWRlZW0ud2l0bmVzcyAmJiByZWRlZW0ud2l0bmVzcy5sZW5ndGggPiAwO1xuICAgICAgICBpZiAoIWhhc0lucHV0ICYmICFoYXNXaXRuZXNzKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbXB0eSBpbnB1dCcpO1xuICAgICAgICBpZiAoaGFzSW5wdXQgJiYgaGFzV2l0bmVzcylcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnB1dCBhbmQgd2l0bmVzcyBwcm92aWRlZCcpO1xuICAgICAgICBpZiAoaGFzSW5wdXQpIHtcbiAgICAgICAgICBjb25zdCByaWNodW5rcyA9IGJzY3JpcHQuZGVjb21waWxlKHJlZGVlbS5pbnB1dCk7XG4gICAgICAgICAgaWYgKCFic2NyaXB0LmlzUHVzaE9ubHkocmljaHVua3MpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9uIHB1c2gtb25seSBzY3JpcHRTaWcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKGEuaW5wdXQpIHtcbiAgICAgIGNvbnN0IGNodW5rcyA9IF9jaHVua3MoKTtcbiAgICAgIGlmICghY2h1bmtzIHx8IGNodW5rcy5sZW5ndGggPCAxKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnB1dCB0b28gc2hvcnQnKTtcbiAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKF9yZWRlZW0oKS5vdXRwdXQpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnB1dCBpcyBpbnZhbGlkJyk7XG4gICAgICBjaGVja1JlZGVlbShfcmVkZWVtKCkpO1xuICAgIH1cbiAgICBpZiAoYS5yZWRlZW0pIHtcbiAgICAgIGlmIChhLnJlZGVlbS5uZXR3b3JrICYmIGEucmVkZWVtLm5ldHdvcmsgIT09IG5ldHdvcmspXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgbWlzbWF0Y2gnKTtcbiAgICAgIGlmIChhLmlucHV0KSB7XG4gICAgICAgIGNvbnN0IHJlZGVlbSA9IF9yZWRlZW0oKTtcbiAgICAgICAgaWYgKGEucmVkZWVtLm91dHB1dCAmJiAhYS5yZWRlZW0ub3V0cHV0LmVxdWFscyhyZWRlZW0ub3V0cHV0KSlcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWRlZW0ub3V0cHV0IG1pc21hdGNoJyk7XG4gICAgICAgIGlmIChhLnJlZGVlbS5pbnB1dCAmJiAhYS5yZWRlZW0uaW5wdXQuZXF1YWxzKHJlZGVlbS5pbnB1dCkpXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVkZWVtLmlucHV0IG1pc21hdGNoJyk7XG4gICAgICB9XG4gICAgICBjaGVja1JlZGVlbShhLnJlZGVlbSk7XG4gICAgfVxuICAgIGlmIChhLndpdG5lc3MpIHtcbiAgICAgIGlmIChcbiAgICAgICAgYS5yZWRlZW0gJiZcbiAgICAgICAgYS5yZWRlZW0ud2l0bmVzcyAmJlxuICAgICAgICAhKDAsIHR5cGVzXzEuc3RhY2tzRXF1YWwpKGEucmVkZWVtLndpdG5lc3MsIGEud2l0bmVzcylcbiAgICAgIClcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignV2l0bmVzcyBhbmQgcmVkZWVtLndpdG5lc3MgbWlzbWF0Y2gnKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24obywgYSk7XG59XG5leHBvcnRzLnAyc2ggPSBwMnNoO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/payments/p2sh.js\n\n}")},"./node_modules/bitcoinjs-lib/src/payments/p2tr.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.p2tr = void 0;\nconst buffer_1 = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\");\nconst networks_1 = __webpack_require__(/*! ../networks */ \"./node_modules/bitcoinjs-lib/src/networks.js\");\nconst bscript = __webpack_require__(/*! ../script */ \"./node_modules/bitcoinjs-lib/src/script.js\");\nconst types_1 = __webpack_require__(/*! ../types */ \"./node_modules/bitcoinjs-lib/src/types.js\");\nconst ecc_lib_1 = __webpack_require__(/*! ../ecc_lib */ \"./node_modules/bitcoinjs-lib/src/ecc_lib.js\");\nconst bip341_1 = __webpack_require__(/*! ./bip341 */ \"./node_modules/bitcoinjs-lib/src/payments/bip341.js\");\nconst lazy = __webpack_require__(/*! ./lazy */ \"./node_modules/bitcoinjs-lib/src/payments/lazy.js\");\nconst bech32_1 = __webpack_require__(/*! bech32 */ \"./node_modules/bech32/dist/index.js\");\nconst address_1 = __webpack_require__(/*! ../address */ \"./node_modules/bitcoinjs-lib/src/address.js\");\nconst OPS = bscript.OPS;\nconst TAPROOT_WITNESS_VERSION = 0x01;\nconst ANNEX_PREFIX = 0x50;\n/**\n * Creates a Pay-to-Taproot (P2TR) payment object.\n *\n * @param a - The payment object containing the necessary data for P2TR.\n * @param opts - Optional payment options.\n * @returns The P2TR payment object.\n * @throws {TypeError} If the provided data is invalid or insufficient.\n */\nfunction p2tr(a, opts) {\n if (\n !a.address &&\n !a.output &&\n !a.pubkey &&\n !a.internalPubkey &&\n !(a.witness && a.witness.length > 1)\n )\n throw new TypeError('Not enough data');\n opts = Object.assign({ validate: true }, opts || {});\n (0, types_1.typeforce)(\n {\n address: types_1.typeforce.maybe(types_1.typeforce.String),\n input: types_1.typeforce.maybe(types_1.typeforce.BufferN(0)),\n network: types_1.typeforce.maybe(types_1.typeforce.Object),\n output: types_1.typeforce.maybe(types_1.typeforce.BufferN(34)),\n internalPubkey: types_1.typeforce.maybe(types_1.typeforce.BufferN(32)),\n hash: types_1.typeforce.maybe(types_1.typeforce.BufferN(32)),\n pubkey: types_1.typeforce.maybe(types_1.typeforce.BufferN(32)),\n signature: types_1.typeforce.maybe(\n types_1.typeforce.anyOf(\n types_1.typeforce.BufferN(64),\n types_1.typeforce.BufferN(65),\n ),\n ),\n witness: types_1.typeforce.maybe(\n types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n ),\n scriptTree: types_1.typeforce.maybe(types_1.isTaptree),\n redeem: types_1.typeforce.maybe({\n output: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n redeemVersion: types_1.typeforce.maybe(types_1.typeforce.Number),\n witness: types_1.typeforce.maybe(\n types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n ),\n }),\n redeemVersion: types_1.typeforce.maybe(types_1.typeforce.Number),\n },\n a,\n );\n const _address = lazy.value(() => {\n return (0, address_1.fromBech32)(a.address);\n });\n // remove annex if present, ignored by taproot\n const _witness = lazy.value(() => {\n if (!a.witness || !a.witness.length) return;\n if (\n a.witness.length >= 2 &&\n a.witness[a.witness.length - 1][0] === ANNEX_PREFIX\n ) {\n return a.witness.slice(0, -1);\n }\n return a.witness.slice();\n });\n const _hashTree = lazy.value(() => {\n if (a.scriptTree) return (0, bip341_1.toHashTree)(a.scriptTree);\n if (a.hash) return { hash: a.hash };\n return;\n });\n const network = a.network || networks_1.bitcoin;\n const o = { name: 'p2tr', network };\n lazy.prop(o, 'address', () => {\n if (!o.pubkey) return;\n const words = bech32_1.bech32m.toWords(o.pubkey);\n words.unshift(TAPROOT_WITNESS_VERSION);\n return bech32_1.bech32m.encode(network.bech32, words);\n });\n lazy.prop(o, 'hash', () => {\n const hashTree = _hashTree();\n if (hashTree) return hashTree.hash;\n const w = _witness();\n if (w && w.length > 1) {\n const controlBlock = w[w.length - 1];\n const leafVersion = controlBlock[0] & types_1.TAPLEAF_VERSION_MASK;\n const script = w[w.length - 2];\n const leafHash = (0, bip341_1.tapleafHash)({\n output: script,\n version: leafVersion,\n });\n return (0, bip341_1.rootHashFromPath)(controlBlock, leafHash);\n }\n return null;\n });\n lazy.prop(o, 'output', () => {\n if (!o.pubkey) return;\n return bscript.compile([OPS.OP_1, o.pubkey]);\n });\n lazy.prop(o, 'redeemVersion', () => {\n if (a.redeemVersion) return a.redeemVersion;\n if (\n a.redeem &&\n a.redeem.redeemVersion !== undefined &&\n a.redeem.redeemVersion !== null\n ) {\n return a.redeem.redeemVersion;\n }\n return bip341_1.LEAF_VERSION_TAPSCRIPT;\n });\n lazy.prop(o, 'redeem', () => {\n const witness = _witness(); // witness without annex\n if (!witness || witness.length < 2) return;\n return {\n output: witness[witness.length - 2],\n witness: witness.slice(0, -2),\n redeemVersion:\n witness[witness.length - 1][0] & types_1.TAPLEAF_VERSION_MASK,\n };\n });\n lazy.prop(o, 'pubkey', () => {\n if (a.pubkey) return a.pubkey;\n if (a.output) return a.output.slice(2);\n if (a.address) return _address().data;\n if (o.internalPubkey) {\n const tweakedKey = (0, bip341_1.tweakKey)(o.internalPubkey, o.hash);\n if (tweakedKey) return tweakedKey.x;\n }\n });\n lazy.prop(o, 'internalPubkey', () => {\n if (a.internalPubkey) return a.internalPubkey;\n const witness = _witness();\n if (witness && witness.length > 1)\n return witness[witness.length - 1].slice(1, 33);\n });\n lazy.prop(o, 'signature', () => {\n if (a.signature) return a.signature;\n const witness = _witness(); // witness without annex\n if (!witness || witness.length !== 1) return;\n return witness[0];\n });\n lazy.prop(o, 'witness', () => {\n if (a.witness) return a.witness;\n const hashTree = _hashTree();\n if (hashTree && a.redeem && a.redeem.output && a.internalPubkey) {\n const leafHash = (0, bip341_1.tapleafHash)({\n output: a.redeem.output,\n version: o.redeemVersion,\n });\n const path = (0, bip341_1.findScriptPath)(hashTree, leafHash);\n if (!path) return;\n const outputKey = (0, bip341_1.tweakKey)(a.internalPubkey, hashTree.hash);\n if (!outputKey) return;\n const controlBock = buffer_1.Buffer.concat(\n [\n buffer_1.Buffer.from([o.redeemVersion | outputKey.parity]),\n a.internalPubkey,\n ].concat(path),\n );\n return [a.redeem.output, controlBock];\n }\n if (a.signature) return [a.signature];\n });\n // extended validation\n if (opts.validate) {\n let pubkey = buffer_1.Buffer.from([]);\n if (a.address) {\n if (network && network.bech32 !== _address().prefix)\n throw new TypeError('Invalid prefix or Network mismatch');\n if (_address().version !== TAPROOT_WITNESS_VERSION)\n throw new TypeError('Invalid address version');\n if (_address().data.length !== 32)\n throw new TypeError('Invalid address data');\n pubkey = _address().data;\n }\n if (a.pubkey) {\n if (pubkey.length > 0 && !pubkey.equals(a.pubkey))\n throw new TypeError('Pubkey mismatch');\n else pubkey = a.pubkey;\n }\n if (a.output) {\n if (\n a.output.length !== 34 ||\n a.output[0] !== OPS.OP_1 ||\n a.output[1] !== 0x20\n )\n throw new TypeError('Output is invalid');\n if (pubkey.length > 0 && !pubkey.equals(a.output.slice(2)))\n throw new TypeError('Pubkey mismatch');\n else pubkey = a.output.slice(2);\n }\n if (a.internalPubkey) {\n const tweakedKey = (0, bip341_1.tweakKey)(a.internalPubkey, o.hash);\n if (pubkey.length > 0 && !pubkey.equals(tweakedKey.x))\n throw new TypeError('Pubkey mismatch');\n else pubkey = tweakedKey.x;\n }\n if (pubkey && pubkey.length) {\n if (!(0, ecc_lib_1.getEccLib)().isXOnlyPoint(pubkey))\n throw new TypeError('Invalid pubkey for p2tr');\n }\n const hashTree = _hashTree();\n if (a.hash && hashTree) {\n if (!a.hash.equals(hashTree.hash)) throw new TypeError('Hash mismatch');\n }\n if (a.redeem && a.redeem.output && hashTree) {\n const leafHash = (0, bip341_1.tapleafHash)({\n output: a.redeem.output,\n version: o.redeemVersion,\n });\n if (!(0, bip341_1.findScriptPath)(hashTree, leafHash))\n throw new TypeError('Redeem script not in tree');\n }\n const witness = _witness();\n // compare the provided redeem data with the one computed from witness\n if (a.redeem && o.redeem) {\n if (a.redeem.redeemVersion) {\n if (a.redeem.redeemVersion !== o.redeem.redeemVersion)\n throw new TypeError('Redeem.redeemVersion and witness mismatch');\n }\n if (a.redeem.output) {\n if (bscript.decompile(a.redeem.output).length === 0)\n throw new TypeError('Redeem.output is invalid');\n // output redeem is constructed from the witness\n if (o.redeem.output && !a.redeem.output.equals(o.redeem.output))\n throw new TypeError('Redeem.output and witness mismatch');\n }\n if (a.redeem.witness) {\n if (\n o.redeem.witness &&\n !(0, types_1.stacksEqual)(a.redeem.witness, o.redeem.witness)\n )\n throw new TypeError('Redeem.witness and witness mismatch');\n }\n }\n if (witness && witness.length) {\n if (witness.length === 1) {\n // key spending\n if (a.signature && !a.signature.equals(witness[0]))\n throw new TypeError('Signature mismatch');\n } else {\n // script path spending\n const controlBlock = witness[witness.length - 1];\n if (controlBlock.length < 33)\n throw new TypeError(\n `The control-block length is too small. Got ${controlBlock.length}, expected min 33.`,\n );\n if ((controlBlock.length - 33) % 32 !== 0)\n throw new TypeError(\n `The control-block length of ${controlBlock.length} is incorrect!`,\n );\n const m = (controlBlock.length - 33) / 32;\n if (m > 128)\n throw new TypeError(\n `The script path is too long. Got ${m}, expected max 128.`,\n );\n const internalPubkey = controlBlock.slice(1, 33);\n if (a.internalPubkey && !a.internalPubkey.equals(internalPubkey))\n throw new TypeError('Internal pubkey mismatch');\n if (!(0, ecc_lib_1.getEccLib)().isXOnlyPoint(internalPubkey))\n throw new TypeError('Invalid internalPubkey for p2tr witness');\n const leafVersion = controlBlock[0] & types_1.TAPLEAF_VERSION_MASK;\n const script = witness[witness.length - 2];\n const leafHash = (0, bip341_1.tapleafHash)({\n output: script,\n version: leafVersion,\n });\n const hash = (0, bip341_1.rootHashFromPath)(controlBlock, leafHash);\n const outputKey = (0, bip341_1.tweakKey)(internalPubkey, hash);\n if (!outputKey)\n // todo: needs test data\n throw new TypeError('Invalid outputKey for p2tr witness');\n if (pubkey.length && !pubkey.equals(outputKey.x))\n throw new TypeError('Pubkey mismatch for p2tr witness');\n if (outputKey.parity !== (controlBlock[0] & 1))\n throw new Error('Incorrect parity');\n }\n }\n }\n return Object.assign(o, a);\n}\nexports.p2tr = p2tr;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvcDJ0ci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxZQUFZO0FBQ1osaUJBQWlCLG1CQUFPLENBQUMsOENBQVE7QUFDakMsbUJBQW1CLG1CQUFPLENBQUMsaUVBQWE7QUFDeEMsZ0JBQWdCLG1CQUFPLENBQUMsNkRBQVc7QUFDbkMsZ0JBQWdCLG1CQUFPLENBQUMsMkRBQVU7QUFDbEMsa0JBQWtCLG1CQUFPLENBQUMsK0RBQVk7QUFDdEMsaUJBQWlCLG1CQUFPLENBQUMscUVBQVU7QUFDbkMsYUFBYSxtQkFBTyxDQUFDLGlFQUFRO0FBQzdCLGlCQUFpQixtQkFBTyxDQUFDLG1EQUFRO0FBQ2pDLGtCQUFrQixtQkFBTyxDQUFDLCtEQUFZO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksV0FBVztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0IsWUFBWTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0EsR0FBRztBQUNIO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELG9CQUFvQjtBQUM5RTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkMscUJBQXFCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEVBQUU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL3BheW1lbnRzL3AydHIuanM/OGM0MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wMnRyID0gdm9pZCAwO1xuY29uc3QgYnVmZmVyXzEgPSByZXF1aXJlKCdidWZmZXInKTtcbmNvbnN0IG5ldHdvcmtzXzEgPSByZXF1aXJlKCcuLi9uZXR3b3JrcycpO1xuY29uc3QgYnNjcmlwdCA9IHJlcXVpcmUoJy4uL3NjcmlwdCcpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoJy4uL3R5cGVzJyk7XG5jb25zdCBlY2NfbGliXzEgPSByZXF1aXJlKCcuLi9lY2NfbGliJyk7XG5jb25zdCBiaXAzNDFfMSA9IHJlcXVpcmUoJy4vYmlwMzQxJyk7XG5jb25zdCBsYXp5ID0gcmVxdWlyZSgnLi9sYXp5Jyk7XG5jb25zdCBiZWNoMzJfMSA9IHJlcXVpcmUoJ2JlY2gzMicpO1xuY29uc3QgYWRkcmVzc18xID0gcmVxdWlyZSgnLi4vYWRkcmVzcycpO1xuY29uc3QgT1BTID0gYnNjcmlwdC5PUFM7XG5jb25zdCBUQVBST09UX1dJVE5FU1NfVkVSU0lPTiA9IDB4MDE7XG5jb25zdCBBTk5FWF9QUkVGSVggPSAweDUwO1xuLyoqXG4gKiBDcmVhdGVzIGEgUGF5LXRvLVRhcHJvb3QgKFAyVFIpIHBheW1lbnQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBhIC0gVGhlIHBheW1lbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBkYXRhIGZvciBQMlRSLlxuICogQHBhcmFtIG9wdHMgLSBPcHRpb25hbCBwYXltZW50IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgUDJUUiBwYXltZW50IG9iamVjdC5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgdGhlIHByb3ZpZGVkIGRhdGEgaXMgaW52YWxpZCBvciBpbnN1ZmZpY2llbnQuXG4gKi9cbmZ1bmN0aW9uIHAydHIoYSwgb3B0cykge1xuICBpZiAoXG4gICAgIWEuYWRkcmVzcyAmJlxuICAgICFhLm91dHB1dCAmJlxuICAgICFhLnB1YmtleSAmJlxuICAgICFhLmludGVybmFsUHVia2V5ICYmXG4gICAgIShhLndpdG5lc3MgJiYgYS53aXRuZXNzLmxlbmd0aCA+IDEpXG4gIClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb3QgZW5vdWdoIGRhdGEnKTtcbiAgb3B0cyA9IE9iamVjdC5hc3NpZ24oeyB2YWxpZGF0ZTogdHJ1ZSB9LCBvcHRzIHx8IHt9KTtcbiAgKDAsIHR5cGVzXzEudHlwZWZvcmNlKShcbiAgICB7XG4gICAgICBhZGRyZXNzOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5TdHJpbmcpLFxuICAgICAgaW5wdXQ6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlck4oMCkpLFxuICAgICAgbmV0d29yazogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuT2JqZWN0KSxcbiAgICAgIG91dHB1dDogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyTigzNCkpLFxuICAgICAgaW50ZXJuYWxQdWJrZXk6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlck4oMzIpKSxcbiAgICAgIGhhc2g6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlck4oMzIpKSxcbiAgICAgIHB1YmtleTogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyTigzMikpLFxuICAgICAgc2lnbmF0dXJlOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZShcbiAgICAgICAgdHlwZXNfMS50eXBlZm9yY2UuYW55T2YoXG4gICAgICAgICAgdHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyTig2NCksXG4gICAgICAgICAgdHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyTig2NSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgd2l0bmVzczogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUoXG4gICAgICAgIHR5cGVzXzEudHlwZWZvcmNlLmFycmF5T2YodHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyKSxcbiAgICAgICksXG4gICAgICBzY3JpcHRUcmVlOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLmlzVGFwdHJlZSksXG4gICAgICByZWRlZW06IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHtcbiAgICAgICAgb3V0cHV0OiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5CdWZmZXIpLFxuICAgICAgICByZWRlZW1WZXJzaW9uOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5OdW1iZXIpLFxuICAgICAgICB3aXRuZXNzOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZShcbiAgICAgICAgICB0eXBlc18xLnR5cGVmb3JjZS5hcnJheU9mKHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlciksXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICAgIHJlZGVlbVZlcnNpb246IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLk51bWJlciksXG4gICAgfSxcbiAgICBhLFxuICApO1xuICBjb25zdCBfYWRkcmVzcyA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIHJldHVybiAoMCwgYWRkcmVzc18xLmZyb21CZWNoMzIpKGEuYWRkcmVzcyk7XG4gIH0pO1xuICAvLyByZW1vdmUgYW5uZXggaWYgcHJlc2VudCwgaWdub3JlZCBieSB0YXByb290XG4gIGNvbnN0IF93aXRuZXNzID0gbGF6eS52YWx1ZSgoKSA9PiB7XG4gICAgaWYgKCFhLndpdG5lc3MgfHwgIWEud2l0bmVzcy5sZW5ndGgpIHJldHVybjtcbiAgICBpZiAoXG4gICAgICBhLndpdG5lc3MubGVuZ3RoID49IDIgJiZcbiAgICAgIGEud2l0bmVzc1thLndpdG5lc3MubGVuZ3RoIC0gMV1bMF0gPT09IEFOTkVYX1BSRUZJWFxuICAgICkge1xuICAgICAgcmV0dXJuIGEud2l0bmVzcy5zbGljZSgwLCAtMSk7XG4gICAgfVxuICAgIHJldHVybiBhLndpdG5lc3Muc2xpY2UoKTtcbiAgfSk7XG4gIGNvbnN0IF9oYXNoVHJlZSA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIGlmIChhLnNjcmlwdFRyZWUpIHJldHVybiAoMCwgYmlwMzQxXzEudG9IYXNoVHJlZSkoYS5zY3JpcHRUcmVlKTtcbiAgICBpZiAoYS5oYXNoKSByZXR1cm4geyBoYXNoOiBhLmhhc2ggfTtcbiAgICByZXR1cm47XG4gIH0pO1xuICBjb25zdCBuZXR3b3JrID0gYS5uZXR3b3JrIHx8IG5ldHdvcmtzXzEuYml0Y29pbjtcbiAgY29uc3QgbyA9IHsgbmFtZTogJ3AydHInLCBuZXR3b3JrIH07XG4gIGxhenkucHJvcChvLCAnYWRkcmVzcycsICgpID0+IHtcbiAgICBpZiAoIW8ucHVia2V5KSByZXR1cm47XG4gICAgY29uc3Qgd29yZHMgPSBiZWNoMzJfMS5iZWNoMzJtLnRvV29yZHMoby5wdWJrZXkpO1xuICAgIHdvcmRzLnVuc2hpZnQoVEFQUk9PVF9XSVRORVNTX1ZFUlNJT04pO1xuICAgIHJldHVybiBiZWNoMzJfMS5iZWNoMzJtLmVuY29kZShuZXR3b3JrLmJlY2gzMiwgd29yZHMpO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdoYXNoJywgKCkgPT4ge1xuICAgIGNvbnN0IGhhc2hUcmVlID0gX2hhc2hUcmVlKCk7XG4gICAgaWYgKGhhc2hUcmVlKSByZXR1cm4gaGFzaFRyZWUuaGFzaDtcbiAgICBjb25zdCB3ID0gX3dpdG5lc3MoKTtcbiAgICBpZiAodyAmJiB3Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xCbG9jayA9IHdbdy5sZW5ndGggLSAxXTtcbiAgICAgIGNvbnN0IGxlYWZWZXJzaW9uID0gY29udHJvbEJsb2NrWzBdICYgdHlwZXNfMS5UQVBMRUFGX1ZFUlNJT05fTUFTSztcbiAgICAgIGNvbnN0IHNjcmlwdCA9IHdbdy5sZW5ndGggLSAyXTtcbiAgICAgIGNvbnN0IGxlYWZIYXNoID0gKDAsIGJpcDM0MV8xLnRhcGxlYWZIYXNoKSh7XG4gICAgICAgIG91dHB1dDogc2NyaXB0LFxuICAgICAgICB2ZXJzaW9uOiBsZWFmVmVyc2lvbixcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICgwLCBiaXAzNDFfMS5yb290SGFzaEZyb21QYXRoKShjb250cm9sQmxvY2ssIGxlYWZIYXNoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ291dHB1dCcsICgpID0+IHtcbiAgICBpZiAoIW8ucHVia2V5KSByZXR1cm47XG4gICAgcmV0dXJuIGJzY3JpcHQuY29tcGlsZShbT1BTLk9QXzEsIG8ucHVia2V5XSk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ3JlZGVlbVZlcnNpb24nLCAoKSA9PiB7XG4gICAgaWYgKGEucmVkZWVtVmVyc2lvbikgcmV0dXJuIGEucmVkZWVtVmVyc2lvbjtcbiAgICBpZiAoXG4gICAgICBhLnJlZGVlbSAmJlxuICAgICAgYS5yZWRlZW0ucmVkZWVtVmVyc2lvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhLnJlZGVlbS5yZWRlZW1WZXJzaW9uICE9PSBudWxsXG4gICAgKSB7XG4gICAgICByZXR1cm4gYS5yZWRlZW0ucmVkZWVtVmVyc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIGJpcDM0MV8xLkxFQUZfVkVSU0lPTl9UQVBTQ1JJUFQ7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ3JlZGVlbScsICgpID0+IHtcbiAgICBjb25zdCB3aXRuZXNzID0gX3dpdG5lc3MoKTsgLy8gd2l0bmVzcyB3aXRob3V0IGFubmV4XG4gICAgaWYgKCF3aXRuZXNzIHx8IHdpdG5lc3MubGVuZ3RoIDwgMikgcmV0dXJuO1xuICAgIHJldHVybiB7XG4gICAgICBvdXRwdXQ6IHdpdG5lc3Nbd2l0bmVzcy5sZW5ndGggLSAyXSxcbiAgICAgIHdpdG5lc3M6IHdpdG5lc3Muc2xpY2UoMCwgLTIpLFxuICAgICAgcmVkZWVtVmVyc2lvbjpcbiAgICAgICAgd2l0bmVzc1t3aXRuZXNzLmxlbmd0aCAtIDFdWzBdICYgdHlwZXNfMS5UQVBMRUFGX1ZFUlNJT05fTUFTSyxcbiAgICB9O1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdwdWJrZXknLCAoKSA9PiB7XG4gICAgaWYgKGEucHVia2V5KSByZXR1cm4gYS5wdWJrZXk7XG4gICAgaWYgKGEub3V0cHV0KSByZXR1cm4gYS5vdXRwdXQuc2xpY2UoMik7XG4gICAgaWYgKGEuYWRkcmVzcykgcmV0dXJuIF9hZGRyZXNzKCkuZGF0YTtcbiAgICBpZiAoby5pbnRlcm5hbFB1YmtleSkge1xuICAgICAgY29uc3QgdHdlYWtlZEtleSA9ICgwLCBiaXAzNDFfMS50d2Vha0tleSkoby5pbnRlcm5hbFB1YmtleSwgby5oYXNoKTtcbiAgICAgIGlmICh0d2Vha2VkS2V5KSByZXR1cm4gdHdlYWtlZEtleS54O1xuICAgIH1cbiAgfSk7XG4gIGxhenkucHJvcChvLCAnaW50ZXJuYWxQdWJrZXknLCAoKSA9PiB7XG4gICAgaWYgKGEuaW50ZXJuYWxQdWJrZXkpIHJldHVybiBhLmludGVybmFsUHVia2V5O1xuICAgIGNvbnN0IHdpdG5lc3MgPSBfd2l0bmVzcygpO1xuICAgIGlmICh3aXRuZXNzICYmIHdpdG5lc3MubGVuZ3RoID4gMSlcbiAgICAgIHJldHVybiB3aXRuZXNzW3dpdG5lc3MubGVuZ3RoIC0gMV0uc2xpY2UoMSwgMzMpO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdzaWduYXR1cmUnLCAoKSA9PiB7XG4gICAgaWYgKGEuc2lnbmF0dXJlKSByZXR1cm4gYS5zaWduYXR1cmU7XG4gICAgY29uc3Qgd2l0bmVzcyA9IF93aXRuZXNzKCk7IC8vIHdpdG5lc3Mgd2l0aG91dCBhbm5leFxuICAgIGlmICghd2l0bmVzcyB8fCB3aXRuZXNzLmxlbmd0aCAhPT0gMSkgcmV0dXJuO1xuICAgIHJldHVybiB3aXRuZXNzWzBdO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICd3aXRuZXNzJywgKCkgPT4ge1xuICAgIGlmIChhLndpdG5lc3MpIHJldHVybiBhLndpdG5lc3M7XG4gICAgY29uc3QgaGFzaFRyZWUgPSBfaGFzaFRyZWUoKTtcbiAgICBpZiAoaGFzaFRyZWUgJiYgYS5yZWRlZW0gJiYgYS5yZWRlZW0ub3V0cHV0ICYmIGEuaW50ZXJuYWxQdWJrZXkpIHtcbiAgICAgIGNvbnN0IGxlYWZIYXNoID0gKDAsIGJpcDM0MV8xLnRhcGxlYWZIYXNoKSh7XG4gICAgICAgIG91dHB1dDogYS5yZWRlZW0ub3V0cHV0LFxuICAgICAgICB2ZXJzaW9uOiBvLnJlZGVlbVZlcnNpb24sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhdGggPSAoMCwgYmlwMzQxXzEuZmluZFNjcmlwdFBhdGgpKGhhc2hUcmVlLCBsZWFmSGFzaCk7XG4gICAgICBpZiAoIXBhdGgpIHJldHVybjtcbiAgICAgIGNvbnN0IG91dHB1dEtleSA9ICgwLCBiaXAzNDFfMS50d2Vha0tleSkoYS5pbnRlcm5hbFB1YmtleSwgaGFzaFRyZWUuaGFzaCk7XG4gICAgICBpZiAoIW91dHB1dEtleSkgcmV0dXJuO1xuICAgICAgY29uc3QgY29udHJvbEJvY2sgPSBidWZmZXJfMS5CdWZmZXIuY29uY2F0KFxuICAgICAgICBbXG4gICAgICAgICAgYnVmZmVyXzEuQnVmZmVyLmZyb20oW28ucmVkZWVtVmVyc2lvbiB8IG91dHB1dEtleS5wYXJpdHldKSxcbiAgICAgICAgICBhLmludGVybmFsUHVia2V5LFxuICAgICAgICBdLmNvbmNhdChwYXRoKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gW2EucmVkZWVtLm91dHB1dCwgY29udHJvbEJvY2tdO1xuICAgIH1cbiAgICBpZiAoYS5zaWduYXR1cmUpIHJldHVybiBbYS5zaWduYXR1cmVdO1xuICB9KTtcbiAgLy8gZXh0ZW5kZWQgdmFsaWRhdGlvblxuICBpZiAob3B0cy52YWxpZGF0ZSkge1xuICAgIGxldCBwdWJrZXkgPSBidWZmZXJfMS5CdWZmZXIuZnJvbShbXSk7XG4gICAgaWYgKGEuYWRkcmVzcykge1xuICAgICAgaWYgKG5ldHdvcmsgJiYgbmV0d29yay5iZWNoMzIgIT09IF9hZGRyZXNzKCkucHJlZml4KVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHByZWZpeCBvciBOZXR3b3JrIG1pc21hdGNoJyk7XG4gICAgICBpZiAoX2FkZHJlc3MoKS52ZXJzaW9uICE9PSBUQVBST09UX1dJVE5FU1NfVkVSU0lPTilcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhZGRyZXNzIHZlcnNpb24nKTtcbiAgICAgIGlmIChfYWRkcmVzcygpLmRhdGEubGVuZ3RoICE9PSAzMilcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhZGRyZXNzIGRhdGEnKTtcbiAgICAgIHB1YmtleSA9IF9hZGRyZXNzKCkuZGF0YTtcbiAgICB9XG4gICAgaWYgKGEucHVia2V5KSB7XG4gICAgICBpZiAocHVia2V5Lmxlbmd0aCA+IDAgJiYgIXB1YmtleS5lcXVhbHMoYS5wdWJrZXkpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQdWJrZXkgbWlzbWF0Y2gnKTtcbiAgICAgIGVsc2UgcHVia2V5ID0gYS5wdWJrZXk7XG4gICAgfVxuICAgIGlmIChhLm91dHB1dCkge1xuICAgICAgaWYgKFxuICAgICAgICBhLm91dHB1dC5sZW5ndGggIT09IDM0IHx8XG4gICAgICAgIGEub3V0cHV0WzBdICE9PSBPUFMuT1BfMSB8fFxuICAgICAgICBhLm91dHB1dFsxXSAhPT0gMHgyMFxuICAgICAgKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPdXRwdXQgaXMgaW52YWxpZCcpO1xuICAgICAgaWYgKHB1YmtleS5sZW5ndGggPiAwICYmICFwdWJrZXkuZXF1YWxzKGEub3V0cHV0LnNsaWNlKDIpKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHVia2V5IG1pc21hdGNoJyk7XG4gICAgICBlbHNlIHB1YmtleSA9IGEub3V0cHV0LnNsaWNlKDIpO1xuICAgIH1cbiAgICBpZiAoYS5pbnRlcm5hbFB1YmtleSkge1xuICAgICAgY29uc3QgdHdlYWtlZEtleSA9ICgwLCBiaXAzNDFfMS50d2Vha0tleSkoYS5pbnRlcm5hbFB1YmtleSwgby5oYXNoKTtcbiAgICAgIGlmIChwdWJrZXkubGVuZ3RoID4gMCAmJiAhcHVia2V5LmVxdWFscyh0d2Vha2VkS2V5LngpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQdWJrZXkgbWlzbWF0Y2gnKTtcbiAgICAgIGVsc2UgcHVia2V5ID0gdHdlYWtlZEtleS54O1xuICAgIH1cbiAgICBpZiAocHVia2V5ICYmIHB1YmtleS5sZW5ndGgpIHtcbiAgICAgIGlmICghKDAsIGVjY19saWJfMS5nZXRFY2NMaWIpKCkuaXNYT25seVBvaW50KHB1YmtleSkpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgcHVia2V5IGZvciBwMnRyJyk7XG4gICAgfVxuICAgIGNvbnN0IGhhc2hUcmVlID0gX2hhc2hUcmVlKCk7XG4gICAgaWYgKGEuaGFzaCAmJiBoYXNoVHJlZSkge1xuICAgICAgaWYgKCFhLmhhc2guZXF1YWxzKGhhc2hUcmVlLmhhc2gpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdIYXNoIG1pc21hdGNoJyk7XG4gICAgfVxuICAgIGlmIChhLnJlZGVlbSAmJiBhLnJlZGVlbS5vdXRwdXQgJiYgaGFzaFRyZWUpIHtcbiAgICAgIGNvbnN0IGxlYWZIYXNoID0gKDAsIGJpcDM0MV8xLnRhcGxlYWZIYXNoKSh7XG4gICAgICAgIG91dHB1dDogYS5yZWRlZW0ub3V0cHV0LFxuICAgICAgICB2ZXJzaW9uOiBvLnJlZGVlbVZlcnNpb24sXG4gICAgICB9KTtcbiAgICAgIGlmICghKDAsIGJpcDM0MV8xLmZpbmRTY3JpcHRQYXRoKShoYXNoVHJlZSwgbGVhZkhhc2gpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWRlZW0gc2NyaXB0IG5vdCBpbiB0cmVlJyk7XG4gICAgfVxuICAgIGNvbnN0IHdpdG5lc3MgPSBfd2l0bmVzcygpO1xuICAgIC8vIGNvbXBhcmUgdGhlIHByb3ZpZGVkIHJlZGVlbSBkYXRhIHdpdGggdGhlIG9uZSBjb21wdXRlZCBmcm9tIHdpdG5lc3NcbiAgICBpZiAoYS5yZWRlZW0gJiYgby5yZWRlZW0pIHtcbiAgICAgIGlmIChhLnJlZGVlbS5yZWRlZW1WZXJzaW9uKSB7XG4gICAgICAgIGlmIChhLnJlZGVlbS5yZWRlZW1WZXJzaW9uICE9PSBvLnJlZGVlbS5yZWRlZW1WZXJzaW9uKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZGVlbS5yZWRlZW1WZXJzaW9uIGFuZCB3aXRuZXNzIG1pc21hdGNoJyk7XG4gICAgICB9XG4gICAgICBpZiAoYS5yZWRlZW0ub3V0cHV0KSB7XG4gICAgICAgIGlmIChic2NyaXB0LmRlY29tcGlsZShhLnJlZGVlbS5vdXRwdXQpLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWRlZW0ub3V0cHV0IGlzIGludmFsaWQnKTtcbiAgICAgICAgLy8gb3V0cHV0IHJlZGVlbSBpcyBjb25zdHJ1Y3RlZCBmcm9tIHRoZSB3aXRuZXNzXG4gICAgICAgIGlmIChvLnJlZGVlbS5vdXRwdXQgJiYgIWEucmVkZWVtLm91dHB1dC5lcXVhbHMoby5yZWRlZW0ub3V0cHV0KSlcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWRlZW0ub3V0cHV0IGFuZCB3aXRuZXNzIG1pc21hdGNoJyk7XG4gICAgICB9XG4gICAgICBpZiAoYS5yZWRlZW0ud2l0bmVzcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgby5yZWRlZW0ud2l0bmVzcyAmJlxuICAgICAgICAgICEoMCwgdHlwZXNfMS5zdGFja3NFcXVhbCkoYS5yZWRlZW0ud2l0bmVzcywgby5yZWRlZW0ud2l0bmVzcylcbiAgICAgICAgKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZGVlbS53aXRuZXNzIGFuZCB3aXRuZXNzIG1pc21hdGNoJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh3aXRuZXNzICYmIHdpdG5lc3MubGVuZ3RoKSB7XG4gICAgICBpZiAod2l0bmVzcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8ga2V5IHNwZW5kaW5nXG4gICAgICAgIGlmIChhLnNpZ25hdHVyZSAmJiAhYS5zaWduYXR1cmUuZXF1YWxzKHdpdG5lc3NbMF0pKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpZ25hdHVyZSBtaXNtYXRjaCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc2NyaXB0IHBhdGggc3BlbmRpbmdcbiAgICAgICAgY29uc3QgY29udHJvbEJsb2NrID0gd2l0bmVzc1t3aXRuZXNzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoY29udHJvbEJsb2NrLmxlbmd0aCA8IDMzKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgVGhlIGNvbnRyb2wtYmxvY2sgbGVuZ3RoIGlzIHRvbyBzbWFsbC4gR290ICR7Y29udHJvbEJsb2NrLmxlbmd0aH0sIGV4cGVjdGVkIG1pbiAzMy5gLFxuICAgICAgICAgICk7XG4gICAgICAgIGlmICgoY29udHJvbEJsb2NrLmxlbmd0aCAtIDMzKSAlIDMyICE9PSAwKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgVGhlIGNvbnRyb2wtYmxvY2sgbGVuZ3RoIG9mICR7Y29udHJvbEJsb2NrLmxlbmd0aH0gaXMgaW5jb3JyZWN0IWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbSA9IChjb250cm9sQmxvY2subGVuZ3RoIC0gMzMpIC8gMzI7XG4gICAgICAgIGlmIChtID4gMTI4KVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgVGhlIHNjcmlwdCBwYXRoIGlzIHRvbyBsb25nLiBHb3QgJHttfSwgZXhwZWN0ZWQgbWF4IDEyOC5gLFxuICAgICAgICAgICk7XG4gICAgICAgIGNvbnN0IGludGVybmFsUHVia2V5ID0gY29udHJvbEJsb2NrLnNsaWNlKDEsIDMzKTtcbiAgICAgICAgaWYgKGEuaW50ZXJuYWxQdWJrZXkgJiYgIWEuaW50ZXJuYWxQdWJrZXkuZXF1YWxzKGludGVybmFsUHVia2V5KSlcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnRlcm5hbCBwdWJrZXkgbWlzbWF0Y2gnKTtcbiAgICAgICAgaWYgKCEoMCwgZWNjX2xpYl8xLmdldEVjY0xpYikoKS5pc1hPbmx5UG9pbnQoaW50ZXJuYWxQdWJrZXkpKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaW50ZXJuYWxQdWJrZXkgZm9yIHAydHIgd2l0bmVzcycpO1xuICAgICAgICBjb25zdCBsZWFmVmVyc2lvbiA9IGNvbnRyb2xCbG9ja1swXSAmIHR5cGVzXzEuVEFQTEVBRl9WRVJTSU9OX01BU0s7XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IHdpdG5lc3Nbd2l0bmVzcy5sZW5ndGggLSAyXTtcbiAgICAgICAgY29uc3QgbGVhZkhhc2ggPSAoMCwgYmlwMzQxXzEudGFwbGVhZkhhc2gpKHtcbiAgICAgICAgICBvdXRwdXQ6IHNjcmlwdCxcbiAgICAgICAgICB2ZXJzaW9uOiBsZWFmVmVyc2lvbixcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGhhc2ggPSAoMCwgYmlwMzQxXzEucm9vdEhhc2hGcm9tUGF0aCkoY29udHJvbEJsb2NrLCBsZWFmSGFzaCk7XG4gICAgICAgIGNvbnN0IG91dHB1dEtleSA9ICgwLCBiaXAzNDFfMS50d2Vha0tleSkoaW50ZXJuYWxQdWJrZXksIGhhc2gpO1xuICAgICAgICBpZiAoIW91dHB1dEtleSlcbiAgICAgICAgICAvLyB0b2RvOiBuZWVkcyB0ZXN0IGRhdGFcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG91dHB1dEtleSBmb3IgcDJ0ciB3aXRuZXNzJyk7XG4gICAgICAgIGlmIChwdWJrZXkubGVuZ3RoICYmICFwdWJrZXkuZXF1YWxzKG91dHB1dEtleS54KSlcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQdWJrZXkgbWlzbWF0Y2ggZm9yIHAydHIgd2l0bmVzcycpO1xuICAgICAgICBpZiAob3V0cHV0S2V5LnBhcml0eSAhPT0gKGNvbnRyb2xCbG9ja1swXSAmIDEpKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0IHBhcml0eScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihvLCBhKTtcbn1cbmV4cG9ydHMucDJ0ciA9IHAydHI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/payments/p2tr.js\n\n}")},"./node_modules/bitcoinjs-lib/src/payments/p2wpkh.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.p2wpkh = void 0;\nconst bcrypto = __webpack_require__(/*! ../crypto */ \"./node_modules/bitcoinjs-lib/src/crypto.js\");\nconst networks_1 = __webpack_require__(/*! ../networks */ \"./node_modules/bitcoinjs-lib/src/networks.js\");\nconst bscript = __webpack_require__(/*! ../script */ \"./node_modules/bitcoinjs-lib/src/script.js\");\nconst types_1 = __webpack_require__(/*! ../types */ \"./node_modules/bitcoinjs-lib/src/types.js\");\nconst lazy = __webpack_require__(/*! ./lazy */ \"./node_modules/bitcoinjs-lib/src/payments/lazy.js\");\nconst bech32_1 = __webpack_require__(/*! bech32 */ \"./node_modules/bech32/dist/index.js\");\nconst OPS = bscript.OPS;\nconst EMPTY_BUFFER = Buffer.alloc(0);\n// witness: {signature} {pubKey}\n// input: <>\n// output: OP_0 {pubKeyHash}\n/**\n * Creates a pay-to-witness-public-key-hash (p2wpkh) payment object.\n *\n * @param a - The payment object containing the necessary data.\n * @param opts - Optional payment options.\n * @returns The p2wpkh payment object.\n * @throws {TypeError} If the required data is missing or invalid.\n */\nfunction p2wpkh(a, opts) {\n if (!a.address && !a.hash && !a.output && !a.pubkey && !a.witness)\n throw new TypeError('Not enough data');\n opts = Object.assign({ validate: true }, opts || {});\n (0, types_1.typeforce)(\n {\n address: types_1.typeforce.maybe(types_1.typeforce.String),\n hash: types_1.typeforce.maybe(types_1.typeforce.BufferN(20)),\n input: types_1.typeforce.maybe(types_1.typeforce.BufferN(0)),\n network: types_1.typeforce.maybe(types_1.typeforce.Object),\n output: types_1.typeforce.maybe(types_1.typeforce.BufferN(22)),\n pubkey: types_1.typeforce.maybe(types_1.isPoint),\n signature: types_1.typeforce.maybe(bscript.isCanonicalScriptSignature),\n witness: types_1.typeforce.maybe(\n types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n ),\n },\n a,\n );\n const _address = lazy.value(() => {\n const result = bech32_1.bech32.decode(a.address);\n const version = result.words.shift();\n const data = bech32_1.bech32.fromWords(result.words);\n return {\n version,\n prefix: result.prefix,\n data: Buffer.from(data),\n };\n });\n const network = a.network || networks_1.bitcoin;\n const o = { name: 'p2wpkh', network };\n lazy.prop(o, 'address', () => {\n if (!o.hash) return;\n const words = bech32_1.bech32.toWords(o.hash);\n words.unshift(0x00);\n return bech32_1.bech32.encode(network.bech32, words);\n });\n lazy.prop(o, 'hash', () => {\n if (a.output) return a.output.slice(2, 22);\n if (a.address) return _address().data;\n if (a.pubkey || o.pubkey) return bcrypto.hash160(a.pubkey || o.pubkey);\n });\n lazy.prop(o, 'output', () => {\n if (!o.hash) return;\n return bscript.compile([OPS.OP_0, o.hash]);\n });\n lazy.prop(o, 'pubkey', () => {\n if (a.pubkey) return a.pubkey;\n if (!a.witness) return;\n return a.witness[1];\n });\n lazy.prop(o, 'signature', () => {\n if (!a.witness) return;\n return a.witness[0];\n });\n lazy.prop(o, 'input', () => {\n if (!o.witness) return;\n return EMPTY_BUFFER;\n });\n lazy.prop(o, 'witness', () => {\n if (!a.pubkey) return;\n if (!a.signature) return;\n return [a.signature, a.pubkey];\n });\n // extended validation\n if (opts.validate) {\n let hash = Buffer.from([]);\n if (a.address) {\n if (network && network.bech32 !== _address().prefix)\n throw new TypeError('Invalid prefix or Network mismatch');\n if (_address().version !== 0x00)\n throw new TypeError('Invalid address version');\n if (_address().data.length !== 20)\n throw new TypeError('Invalid address data');\n hash = _address().data;\n }\n if (a.hash) {\n if (hash.length > 0 && !hash.equals(a.hash))\n throw new TypeError('Hash mismatch');\n else hash = a.hash;\n }\n if (a.output) {\n if (\n a.output.length !== 22 ||\n a.output[0] !== OPS.OP_0 ||\n a.output[1] !== 0x14\n )\n throw new TypeError('Output is invalid');\n if (hash.length > 0 && !hash.equals(a.output.slice(2)))\n throw new TypeError('Hash mismatch');\n else hash = a.output.slice(2);\n }\n if (a.pubkey) {\n const pkh = bcrypto.hash160(a.pubkey);\n if (hash.length > 0 && !hash.equals(pkh))\n throw new TypeError('Hash mismatch');\n else hash = pkh;\n if (!(0, types_1.isPoint)(a.pubkey) || a.pubkey.length !== 33)\n throw new TypeError('Invalid pubkey for p2wpkh');\n }\n if (a.witness) {\n if (a.witness.length !== 2) throw new TypeError('Witness is invalid');\n if (!bscript.isCanonicalScriptSignature(a.witness[0]))\n throw new TypeError('Witness has invalid signature');\n if (!(0, types_1.isPoint)(a.witness[1]) || a.witness[1].length !== 33)\n throw new TypeError('Witness has invalid pubkey');\n if (a.signature && !a.signature.equals(a.witness[0]))\n throw new TypeError('Signature mismatch');\n if (a.pubkey && !a.pubkey.equals(a.witness[1]))\n throw new TypeError('Pubkey mismatch');\n const pkh = bcrypto.hash160(a.witness[1]);\n if (hash.length > 0 && !hash.equals(pkh))\n throw new TypeError('Hash mismatch');\n }\n }\n return Object.assign(o, a);\n}\nexports.p2wpkh = p2wpkh;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvcDJ3cGtoLmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxjQUFjO0FBQ2QsZ0JBQWdCLG1CQUFPLENBQUMsNkRBQVc7QUFDbkMsbUJBQW1CLG1CQUFPLENBQUMsaUVBQWE7QUFDeEMsZ0JBQWdCLG1CQUFPLENBQUMsNkRBQVc7QUFDbkMsZ0JBQWdCLG1CQUFPLENBQUMsMkRBQVU7QUFDbEMsYUFBYSxtQkFBTyxDQUFDLGlFQUFRO0FBQzdCLGlCQUFpQixtQkFBTyxDQUFDLG1EQUFRO0FBQ2pDO0FBQ0EscUJBQXFCLE1BQU07QUFDM0IsYUFBYSxZQUFZO0FBQ3pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksV0FBVztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixnQkFBZ0IsWUFBWTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsR0FBRztBQUNIO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL3BheW1lbnRzL3Ayd3BraC5qcz9mMDY1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnAyd3BraCA9IHZvaWQgMDtcbmNvbnN0IGJjcnlwdG8gPSByZXF1aXJlKCcuLi9jcnlwdG8nKTtcbmNvbnN0IG5ldHdvcmtzXzEgPSByZXF1aXJlKCcuLi9uZXR3b3JrcycpO1xuY29uc3QgYnNjcmlwdCA9IHJlcXVpcmUoJy4uL3NjcmlwdCcpO1xuY29uc3QgdHlwZXNfMSA9IHJlcXVpcmUoJy4uL3R5cGVzJyk7XG5jb25zdCBsYXp5ID0gcmVxdWlyZSgnLi9sYXp5Jyk7XG5jb25zdCBiZWNoMzJfMSA9IHJlcXVpcmUoJ2JlY2gzMicpO1xuY29uc3QgT1BTID0gYnNjcmlwdC5PUFM7XG5jb25zdCBFTVBUWV9CVUZGRVIgPSBCdWZmZXIuYWxsb2MoMCk7XG4vLyB3aXRuZXNzOiB7c2lnbmF0dXJlfSB7cHViS2V5fVxuLy8gaW5wdXQ6IDw+XG4vLyBvdXRwdXQ6IE9QXzAge3B1YktleUhhc2h9XG4vKipcbiAqIENyZWF0ZXMgYSBwYXktdG8td2l0bmVzcy1wdWJsaWMta2V5LWhhc2ggKHAyd3BraCkgcGF5bWVudCBvYmplY3QuXG4gKlxuICogQHBhcmFtIGEgLSBUaGUgcGF5bWVudCBvYmplY3QgY29udGFpbmluZyB0aGUgbmVjZXNzYXJ5IGRhdGEuXG4gKiBAcGFyYW0gb3B0cyAtIE9wdGlvbmFsIHBheW1lbnQgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBwMndwa2ggcGF5bWVudCBvYmplY3QuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSByZXF1aXJlZCBkYXRhIGlzIG1pc3Npbmcgb3IgaW52YWxpZC5cbiAqL1xuZnVuY3Rpb24gcDJ3cGtoKGEsIG9wdHMpIHtcbiAgaWYgKCFhLmFkZHJlc3MgJiYgIWEuaGFzaCAmJiAhYS5vdXRwdXQgJiYgIWEucHVia2V5ICYmICFhLndpdG5lc3MpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm90IGVub3VnaCBkYXRhJyk7XG4gIG9wdHMgPSBPYmplY3QuYXNzaWduKHsgdmFsaWRhdGU6IHRydWUgfSwgb3B0cyB8fCB7fSk7XG4gICgwLCB0eXBlc18xLnR5cGVmb3JjZSkoXG4gICAge1xuICAgICAgYWRkcmVzczogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuU3RyaW5nKSxcbiAgICAgIGhhc2g6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlck4oMjApKSxcbiAgICAgIGlucHV0OiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5CdWZmZXJOKDApKSxcbiAgICAgIG5ldHdvcms6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLk9iamVjdCksXG4gICAgICBvdXRwdXQ6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlck4oMjIpKSxcbiAgICAgIHB1YmtleTogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS5pc1BvaW50KSxcbiAgICAgIHNpZ25hdHVyZTogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUoYnNjcmlwdC5pc0Nhbm9uaWNhbFNjcmlwdFNpZ25hdHVyZSksXG4gICAgICB3aXRuZXNzOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZShcbiAgICAgICAgdHlwZXNfMS50eXBlZm9yY2UuYXJyYXlPZih0eXBlc18xLnR5cGVmb3JjZS5CdWZmZXIpLFxuICAgICAgKSxcbiAgICB9LFxuICAgIGEsXG4gICk7XG4gIGNvbnN0IF9hZGRyZXNzID0gbGF6eS52YWx1ZSgoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYmVjaDMyXzEuYmVjaDMyLmRlY29kZShhLmFkZHJlc3MpO1xuICAgIGNvbnN0IHZlcnNpb24gPSByZXN1bHQud29yZHMuc2hpZnQoKTtcbiAgICBjb25zdCBkYXRhID0gYmVjaDMyXzEuYmVjaDMyLmZyb21Xb3JkcyhyZXN1bHQud29yZHMpO1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uLFxuICAgICAgcHJlZml4OiByZXN1bHQucHJlZml4LFxuICAgICAgZGF0YTogQnVmZmVyLmZyb20oZGF0YSksXG4gICAgfTtcbiAgfSk7XG4gIGNvbnN0IG5ldHdvcmsgPSBhLm5ldHdvcmsgfHwgbmV0d29ya3NfMS5iaXRjb2luO1xuICBjb25zdCBvID0geyBuYW1lOiAncDJ3cGtoJywgbmV0d29yayB9O1xuICBsYXp5LnByb3AobywgJ2FkZHJlc3MnLCAoKSA9PiB7XG4gICAgaWYgKCFvLmhhc2gpIHJldHVybjtcbiAgICBjb25zdCB3b3JkcyA9IGJlY2gzMl8xLmJlY2gzMi50b1dvcmRzKG8uaGFzaCk7XG4gICAgd29yZHMudW5zaGlmdCgweDAwKTtcbiAgICByZXR1cm4gYmVjaDMyXzEuYmVjaDMyLmVuY29kZShuZXR3b3JrLmJlY2gzMiwgd29yZHMpO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdoYXNoJywgKCkgPT4ge1xuICAgIGlmIChhLm91dHB1dCkgcmV0dXJuIGEub3V0cHV0LnNsaWNlKDIsIDIyKTtcbiAgICBpZiAoYS5hZGRyZXNzKSByZXR1cm4gX2FkZHJlc3MoKS5kYXRhO1xuICAgIGlmIChhLnB1YmtleSB8fCBvLnB1YmtleSkgcmV0dXJuIGJjcnlwdG8uaGFzaDE2MChhLnB1YmtleSB8fCBvLnB1YmtleSk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ291dHB1dCcsICgpID0+IHtcbiAgICBpZiAoIW8uaGFzaCkgcmV0dXJuO1xuICAgIHJldHVybiBic2NyaXB0LmNvbXBpbGUoW09QUy5PUF8wLCBvLmhhc2hdKTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAncHVia2V5JywgKCkgPT4ge1xuICAgIGlmIChhLnB1YmtleSkgcmV0dXJuIGEucHVia2V5O1xuICAgIGlmICghYS53aXRuZXNzKSByZXR1cm47XG4gICAgcmV0dXJuIGEud2l0bmVzc1sxXTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnc2lnbmF0dXJlJywgKCkgPT4ge1xuICAgIGlmICghYS53aXRuZXNzKSByZXR1cm47XG4gICAgcmV0dXJuIGEud2l0bmVzc1swXTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnaW5wdXQnLCAoKSA9PiB7XG4gICAgaWYgKCFvLndpdG5lc3MpIHJldHVybjtcbiAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICd3aXRuZXNzJywgKCkgPT4ge1xuICAgIGlmICghYS5wdWJrZXkpIHJldHVybjtcbiAgICBpZiAoIWEuc2lnbmF0dXJlKSByZXR1cm47XG4gICAgcmV0dXJuIFthLnNpZ25hdHVyZSwgYS5wdWJrZXldO1xuICB9KTtcbiAgLy8gZXh0ZW5kZWQgdmFsaWRhdGlvblxuICBpZiAob3B0cy52YWxpZGF0ZSkge1xuICAgIGxldCBoYXNoID0gQnVmZmVyLmZyb20oW10pO1xuICAgIGlmIChhLmFkZHJlc3MpIHtcbiAgICAgIGlmIChuZXR3b3JrICYmIG5ldHdvcmsuYmVjaDMyICE9PSBfYWRkcmVzcygpLnByZWZpeClcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBwcmVmaXggb3IgTmV0d29yayBtaXNtYXRjaCcpO1xuICAgICAgaWYgKF9hZGRyZXNzKCkudmVyc2lvbiAhPT0gMHgwMClcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhZGRyZXNzIHZlcnNpb24nKTtcbiAgICAgIGlmIChfYWRkcmVzcygpLmRhdGEubGVuZ3RoICE9PSAyMClcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhZGRyZXNzIGRhdGEnKTtcbiAgICAgIGhhc2ggPSBfYWRkcmVzcygpLmRhdGE7XG4gICAgfVxuICAgIGlmIChhLmhhc2gpIHtcbiAgICAgIGlmIChoYXNoLmxlbmd0aCA+IDAgJiYgIWhhc2guZXF1YWxzKGEuaGFzaCkpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hhc2ggbWlzbWF0Y2gnKTtcbiAgICAgIGVsc2UgaGFzaCA9IGEuaGFzaDtcbiAgICB9XG4gICAgaWYgKGEub3V0cHV0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGEub3V0cHV0Lmxlbmd0aCAhPT0gMjIgfHxcbiAgICAgICAgYS5vdXRwdXRbMF0gIT09IE9QUy5PUF8wIHx8XG4gICAgICAgIGEub3V0cHV0WzFdICE9PSAweDE0XG4gICAgICApXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ091dHB1dCBpcyBpbnZhbGlkJyk7XG4gICAgICBpZiAoaGFzaC5sZW5ndGggPiAwICYmICFoYXNoLmVxdWFscyhhLm91dHB1dC5zbGljZSgyKSkpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0hhc2ggbWlzbWF0Y2gnKTtcbiAgICAgIGVsc2UgaGFzaCA9IGEub3V0cHV0LnNsaWNlKDIpO1xuICAgIH1cbiAgICBpZiAoYS5wdWJrZXkpIHtcbiAgICAgIGNvbnN0IHBraCA9IGJjcnlwdG8uaGFzaDE2MChhLnB1YmtleSk7XG4gICAgICBpZiAoaGFzaC5sZW5ndGggPiAwICYmICFoYXNoLmVxdWFscyhwa2gpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIYXNoIG1pc21hdGNoJyk7XG4gICAgICBlbHNlIGhhc2ggPSBwa2g7XG4gICAgICBpZiAoISgwLCB0eXBlc18xLmlzUG9pbnQpKGEucHVia2V5KSB8fCBhLnB1YmtleS5sZW5ndGggIT09IDMzKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHB1YmtleSBmb3IgcDJ3cGtoJyk7XG4gICAgfVxuICAgIGlmIChhLndpdG5lc3MpIHtcbiAgICAgIGlmIChhLndpdG5lc3MubGVuZ3RoICE9PSAyKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdXaXRuZXNzIGlzIGludmFsaWQnKTtcbiAgICAgIGlmICghYnNjcmlwdC5pc0Nhbm9uaWNhbFNjcmlwdFNpZ25hdHVyZShhLndpdG5lc3NbMF0pKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdXaXRuZXNzIGhhcyBpbnZhbGlkIHNpZ25hdHVyZScpO1xuICAgICAgaWYgKCEoMCwgdHlwZXNfMS5pc1BvaW50KShhLndpdG5lc3NbMV0pIHx8IGEud2l0bmVzc1sxXS5sZW5ndGggIT09IDMzKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdXaXRuZXNzIGhhcyBpbnZhbGlkIHB1YmtleScpO1xuICAgICAgaWYgKGEuc2lnbmF0dXJlICYmICFhLnNpZ25hdHVyZS5lcXVhbHMoYS53aXRuZXNzWzBdKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2lnbmF0dXJlIG1pc21hdGNoJyk7XG4gICAgICBpZiAoYS5wdWJrZXkgJiYgIWEucHVia2V5LmVxdWFscyhhLndpdG5lc3NbMV0pKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQdWJrZXkgbWlzbWF0Y2gnKTtcbiAgICAgIGNvbnN0IHBraCA9IGJjcnlwdG8uaGFzaDE2MChhLndpdG5lc3NbMV0pO1xuICAgICAgaWYgKGhhc2gubGVuZ3RoID4gMCAmJiAhaGFzaC5lcXVhbHMocGtoKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSGFzaCBtaXNtYXRjaCcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihvLCBhKTtcbn1cbmV4cG9ydHMucDJ3cGtoID0gcDJ3cGtoO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/payments/p2wpkh.js\n\n}")},"./node_modules/bitcoinjs-lib/src/payments/p2wsh.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.p2wsh = void 0;\nconst bcrypto = __webpack_require__(/*! ../crypto */ \"./node_modules/bitcoinjs-lib/src/crypto.js\");\nconst networks_1 = __webpack_require__(/*! ../networks */ \"./node_modules/bitcoinjs-lib/src/networks.js\");\nconst bscript = __webpack_require__(/*! ../script */ \"./node_modules/bitcoinjs-lib/src/script.js\");\nconst types_1 = __webpack_require__(/*! ../types */ \"./node_modules/bitcoinjs-lib/src/types.js\");\nconst lazy = __webpack_require__(/*! ./lazy */ \"./node_modules/bitcoinjs-lib/src/payments/lazy.js\");\nconst bech32_1 = __webpack_require__(/*! bech32 */ \"./node_modules/bech32/dist/index.js\");\nconst OPS = bscript.OPS;\nconst EMPTY_BUFFER = Buffer.alloc(0);\nfunction chunkHasUncompressedPubkey(chunk) {\n if (\n Buffer.isBuffer(chunk) &&\n chunk.length === 65 &&\n chunk[0] === 0x04 &&\n (0, types_1.isPoint)(chunk)\n ) {\n return true;\n } else {\n return false;\n }\n}\n// input: <>\n// witness: [redeemScriptSig ...] {redeemScript}\n// output: OP_0 {sha256(redeemScript)}\n/**\n * Creates a Pay-to-Witness-Script-Hash (P2WSH) payment object.\n *\n * @param a - The payment object containing the necessary data.\n * @param opts - Optional payment options.\n * @returns The P2WSH payment object.\n * @throws {TypeError} If the required data is missing or invalid.\n */\nfunction p2wsh(a, opts) {\n if (!a.address && !a.hash && !a.output && !a.redeem && !a.witness)\n throw new TypeError('Not enough data');\n opts = Object.assign({ validate: true }, opts || {});\n (0, types_1.typeforce)(\n {\n network: types_1.typeforce.maybe(types_1.typeforce.Object),\n address: types_1.typeforce.maybe(types_1.typeforce.String),\n hash: types_1.typeforce.maybe(types_1.typeforce.BufferN(32)),\n output: types_1.typeforce.maybe(types_1.typeforce.BufferN(34)),\n redeem: types_1.typeforce.maybe({\n input: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n network: types_1.typeforce.maybe(types_1.typeforce.Object),\n output: types_1.typeforce.maybe(types_1.typeforce.Buffer),\n witness: types_1.typeforce.maybe(\n types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n ),\n }),\n input: types_1.typeforce.maybe(types_1.typeforce.BufferN(0)),\n witness: types_1.typeforce.maybe(\n types_1.typeforce.arrayOf(types_1.typeforce.Buffer),\n ),\n },\n a,\n );\n const _address = lazy.value(() => {\n const result = bech32_1.bech32.decode(a.address);\n const version = result.words.shift();\n const data = bech32_1.bech32.fromWords(result.words);\n return {\n version,\n prefix: result.prefix,\n data: Buffer.from(data),\n };\n });\n const _rchunks = lazy.value(() => {\n return bscript.decompile(a.redeem.input);\n });\n let network = a.network;\n if (!network) {\n network = (a.redeem && a.redeem.network) || networks_1.bitcoin;\n }\n const o = { network };\n lazy.prop(o, 'address', () => {\n if (!o.hash) return;\n const words = bech32_1.bech32.toWords(o.hash);\n words.unshift(0x00);\n return bech32_1.bech32.encode(network.bech32, words);\n });\n lazy.prop(o, 'hash', () => {\n if (a.output) return a.output.slice(2);\n if (a.address) return _address().data;\n if (o.redeem && o.redeem.output) return bcrypto.sha256(o.redeem.output);\n });\n lazy.prop(o, 'output', () => {\n if (!o.hash) return;\n return bscript.compile([OPS.OP_0, o.hash]);\n });\n lazy.prop(o, 'redeem', () => {\n if (!a.witness) return;\n return {\n output: a.witness[a.witness.length - 1],\n input: EMPTY_BUFFER,\n witness: a.witness.slice(0, -1),\n };\n });\n lazy.prop(o, 'input', () => {\n if (!o.witness) return;\n return EMPTY_BUFFER;\n });\n lazy.prop(o, 'witness', () => {\n // transform redeem input to witness stack?\n if (\n a.redeem &&\n a.redeem.input &&\n a.redeem.input.length > 0 &&\n a.redeem.output &&\n a.redeem.output.length > 0\n ) {\n const stack = bscript.toStack(_rchunks());\n // assign, and blank the existing input\n o.redeem = Object.assign({ witness: stack }, a.redeem);\n o.redeem.input = EMPTY_BUFFER;\n return [].concat(stack, a.redeem.output);\n }\n if (!a.redeem) return;\n if (!a.redeem.output) return;\n if (!a.redeem.witness) return;\n return [].concat(a.redeem.witness, a.redeem.output);\n });\n lazy.prop(o, 'name', () => {\n const nameParts = ['p2wsh'];\n if (o.redeem !== undefined && o.redeem.name !== undefined)\n nameParts.push(o.redeem.name);\n return nameParts.join('-');\n });\n // extended validation\n if (opts.validate) {\n let hash = Buffer.from([]);\n if (a.address) {\n if (_address().prefix !== network.bech32)\n throw new TypeError('Invalid prefix or Network mismatch');\n if (_address().version !== 0x00)\n throw new TypeError('Invalid address version');\n if (_address().data.length !== 32)\n throw new TypeError('Invalid address data');\n hash = _address().data;\n }\n if (a.hash) {\n if (hash.length > 0 && !hash.equals(a.hash))\n throw new TypeError('Hash mismatch');\n else hash = a.hash;\n }\n if (a.output) {\n if (\n a.output.length !== 34 ||\n a.output[0] !== OPS.OP_0 ||\n a.output[1] !== 0x20\n )\n throw new TypeError('Output is invalid');\n const hash2 = a.output.slice(2);\n if (hash.length > 0 && !hash.equals(hash2))\n throw new TypeError('Hash mismatch');\n else hash = hash2;\n }\n if (a.redeem) {\n if (a.redeem.network && a.redeem.network !== network)\n throw new TypeError('Network mismatch');\n // is there two redeem sources?\n if (\n a.redeem.input &&\n a.redeem.input.length > 0 &&\n a.redeem.witness &&\n a.redeem.witness.length > 0\n )\n throw new TypeError('Ambiguous witness source');\n // is the redeem output non-empty/valid?\n if (a.redeem.output) {\n const decompile = bscript.decompile(a.redeem.output);\n if (!decompile || decompile.length < 1)\n throw new TypeError('Redeem.output is invalid');\n if (a.redeem.output.byteLength > 3600)\n throw new TypeError(\n 'Redeem.output unspendable if larger than 3600 bytes',\n );\n if (bscript.countNonPushOnlyOPs(decompile) > 201)\n throw new TypeError(\n 'Redeem.output unspendable with more than 201 non-push ops',\n );\n // match hash against other sources\n const hash2 = bcrypto.sha256(a.redeem.output);\n if (hash.length > 0 && !hash.equals(hash2))\n throw new TypeError('Hash mismatch');\n else hash = hash2;\n }\n if (a.redeem.input && !bscript.isPushOnly(_rchunks()))\n throw new TypeError('Non push-only scriptSig');\n if (\n a.witness &&\n a.redeem.witness &&\n !(0, types_1.stacksEqual)(a.witness, a.redeem.witness)\n )\n throw new TypeError('Witness and redeem.witness mismatch');\n if (\n (a.redeem.input && _rchunks().some(chunkHasUncompressedPubkey)) ||\n (a.redeem.output &&\n (bscript.decompile(a.redeem.output) || []).some(\n chunkHasUncompressedPubkey,\n ))\n ) {\n throw new TypeError(\n 'redeem.input or redeem.output contains uncompressed pubkey',\n );\n }\n }\n if (a.witness && a.witness.length > 0) {\n const wScript = a.witness[a.witness.length - 1];\n if (a.redeem && a.redeem.output && !a.redeem.output.equals(wScript))\n throw new TypeError('Witness and redeem.output mismatch');\n if (\n a.witness.some(chunkHasUncompressedPubkey) ||\n (bscript.decompile(wScript) || []).some(chunkHasUncompressedPubkey)\n )\n throw new TypeError('Witness contains uncompressed pubkey');\n }\n }\n return Object.assign(o, a);\n}\nexports.p2wsh = p2wsh;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcGF5bWVudHMvcDJ3c2guanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGFBQWE7QUFDYixnQkFBZ0IsbUJBQU8sQ0FBQyw2REFBVztBQUNuQyxtQkFBbUIsbUJBQU8sQ0FBQyxpRUFBYTtBQUN4QyxnQkFBZ0IsbUJBQU8sQ0FBQyw2REFBVztBQUNuQyxnQkFBZ0IsbUJBQU8sQ0FBQywyREFBVTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsaUVBQVE7QUFDN0IsaUJBQWlCLG1CQUFPLENBQUMsbURBQVE7QUFDakM7QUFDQSxxQkFBcUIsTUFBTTtBQUMzQjtBQUNBO0FBQ0EsSUFBSSxNQUFNO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQyxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxXQUFXO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGdCQUFnQixZQUFZO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGdCQUFnQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxlQUFlLE1BQU07QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXRjb2luanMtbGliL3NyYy9wYXltZW50cy9wMndzaC5qcz85NDQxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0Jztcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnAyd3NoID0gdm9pZCAwO1xuY29uc3QgYmNyeXB0byA9IHJlcXVpcmUoJy4uL2NyeXB0bycpO1xuY29uc3QgbmV0d29ya3NfMSA9IHJlcXVpcmUoJy4uL25ldHdvcmtzJyk7XG5jb25zdCBic2NyaXB0ID0gcmVxdWlyZSgnLi4vc2NyaXB0Jyk7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZSgnLi4vdHlwZXMnKTtcbmNvbnN0IGxhenkgPSByZXF1aXJlKCcuL2xhenknKTtcbmNvbnN0IGJlY2gzMl8xID0gcmVxdWlyZSgnYmVjaDMyJyk7XG5jb25zdCBPUFMgPSBic2NyaXB0Lk9QUztcbmNvbnN0IEVNUFRZX0JVRkZFUiA9IEJ1ZmZlci5hbGxvYygwKTtcbmZ1bmN0aW9uIGNodW5rSGFzVW5jb21wcmVzc2VkUHVia2V5KGNodW5rKSB7XG4gIGlmIChcbiAgICBCdWZmZXIuaXNCdWZmZXIoY2h1bmspICYmXG4gICAgY2h1bmsubGVuZ3RoID09PSA2NSAmJlxuICAgIGNodW5rWzBdID09PSAweDA0ICYmXG4gICAgKDAsIHR5cGVzXzEuaXNQb2ludCkoY2h1bmspXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLy8gaW5wdXQ6IDw+XG4vLyB3aXRuZXNzOiBbcmVkZWVtU2NyaXB0U2lnIC4uLl0ge3JlZGVlbVNjcmlwdH1cbi8vIG91dHB1dDogT1BfMCB7c2hhMjU2KHJlZGVlbVNjcmlwdCl9XG4vKipcbiAqIENyZWF0ZXMgYSBQYXktdG8tV2l0bmVzcy1TY3JpcHQtSGFzaCAoUDJXU0gpIHBheW1lbnQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBhIC0gVGhlIHBheW1lbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBkYXRhLlxuICogQHBhcmFtIG9wdHMgLSBPcHRpb25hbCBwYXltZW50IG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgUDJXU0ggcGF5bWVudCBvYmplY3QuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSByZXF1aXJlZCBkYXRhIGlzIG1pc3Npbmcgb3IgaW52YWxpZC5cbiAqL1xuZnVuY3Rpb24gcDJ3c2goYSwgb3B0cykge1xuICBpZiAoIWEuYWRkcmVzcyAmJiAhYS5oYXNoICYmICFhLm91dHB1dCAmJiAhYS5yZWRlZW0gJiYgIWEud2l0bmVzcylcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb3QgZW5vdWdoIGRhdGEnKTtcbiAgb3B0cyA9IE9iamVjdC5hc3NpZ24oeyB2YWxpZGF0ZTogdHJ1ZSB9LCBvcHRzIHx8IHt9KTtcbiAgKDAsIHR5cGVzXzEudHlwZWZvcmNlKShcbiAgICB7XG4gICAgICBuZXR3b3JrOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5PYmplY3QpLFxuICAgICAgYWRkcmVzczogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuU3RyaW5nKSxcbiAgICAgIGhhc2g6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlck4oMzIpKSxcbiAgICAgIG91dHB1dDogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUodHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyTigzNCkpLFxuICAgICAgcmVkZWVtOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh7XG4gICAgICAgIGlucHV0OiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5CdWZmZXIpLFxuICAgICAgICBuZXR3b3JrOiB0eXBlc18xLnR5cGVmb3JjZS5tYXliZSh0eXBlc18xLnR5cGVmb3JjZS5PYmplY3QpLFxuICAgICAgICBvdXRwdXQ6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlciksXG4gICAgICAgIHdpdG5lc3M6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKFxuICAgICAgICAgIHR5cGVzXzEudHlwZWZvcmNlLmFycmF5T2YodHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyKSxcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgICAgaW5wdXQ6IHR5cGVzXzEudHlwZWZvcmNlLm1heWJlKHR5cGVzXzEudHlwZWZvcmNlLkJ1ZmZlck4oMCkpLFxuICAgICAgd2l0bmVzczogdHlwZXNfMS50eXBlZm9yY2UubWF5YmUoXG4gICAgICAgIHR5cGVzXzEudHlwZWZvcmNlLmFycmF5T2YodHlwZXNfMS50eXBlZm9yY2UuQnVmZmVyKSxcbiAgICAgICksXG4gICAgfSxcbiAgICBhLFxuICApO1xuICBjb25zdCBfYWRkcmVzcyA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGJlY2gzMl8xLmJlY2gzMi5kZWNvZGUoYS5hZGRyZXNzKTtcbiAgICBjb25zdCB2ZXJzaW9uID0gcmVzdWx0LndvcmRzLnNoaWZ0KCk7XG4gICAgY29uc3QgZGF0YSA9IGJlY2gzMl8xLmJlY2gzMi5mcm9tV29yZHMocmVzdWx0LndvcmRzKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmVyc2lvbixcbiAgICAgIHByZWZpeDogcmVzdWx0LnByZWZpeCxcbiAgICAgIGRhdGE6IEJ1ZmZlci5mcm9tKGRhdGEpLFxuICAgIH07XG4gIH0pO1xuICBjb25zdCBfcmNodW5rcyA9IGxhenkudmFsdWUoKCkgPT4ge1xuICAgIHJldHVybiBic2NyaXB0LmRlY29tcGlsZShhLnJlZGVlbS5pbnB1dCk7XG4gIH0pO1xuICBsZXQgbmV0d29yayA9IGEubmV0d29yaztcbiAgaWYgKCFuZXR3b3JrKSB7XG4gICAgbmV0d29yayA9IChhLnJlZGVlbSAmJiBhLnJlZGVlbS5uZXR3b3JrKSB8fCBuZXR3b3Jrc18xLmJpdGNvaW47XG4gIH1cbiAgY29uc3QgbyA9IHsgbmV0d29yayB9O1xuICBsYXp5LnByb3AobywgJ2FkZHJlc3MnLCAoKSA9PiB7XG4gICAgaWYgKCFvLmhhc2gpIHJldHVybjtcbiAgICBjb25zdCB3b3JkcyA9IGJlY2gzMl8xLmJlY2gzMi50b1dvcmRzKG8uaGFzaCk7XG4gICAgd29yZHMudW5zaGlmdCgweDAwKTtcbiAgICByZXR1cm4gYmVjaDMyXzEuYmVjaDMyLmVuY29kZShuZXR3b3JrLmJlY2gzMiwgd29yZHMpO1xuICB9KTtcbiAgbGF6eS5wcm9wKG8sICdoYXNoJywgKCkgPT4ge1xuICAgIGlmIChhLm91dHB1dCkgcmV0dXJuIGEub3V0cHV0LnNsaWNlKDIpO1xuICAgIGlmIChhLmFkZHJlc3MpIHJldHVybiBfYWRkcmVzcygpLmRhdGE7XG4gICAgaWYgKG8ucmVkZWVtICYmIG8ucmVkZWVtLm91dHB1dCkgcmV0dXJuIGJjcnlwdG8uc2hhMjU2KG8ucmVkZWVtLm91dHB1dCk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ291dHB1dCcsICgpID0+IHtcbiAgICBpZiAoIW8uaGFzaCkgcmV0dXJuO1xuICAgIHJldHVybiBic2NyaXB0LmNvbXBpbGUoW09QUy5PUF8wLCBvLmhhc2hdKTtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAncmVkZWVtJywgKCkgPT4ge1xuICAgIGlmICghYS53aXRuZXNzKSByZXR1cm47XG4gICAgcmV0dXJuIHtcbiAgICAgIG91dHB1dDogYS53aXRuZXNzW2Eud2l0bmVzcy5sZW5ndGggLSAxXSxcbiAgICAgIGlucHV0OiBFTVBUWV9CVUZGRVIsXG4gICAgICB3aXRuZXNzOiBhLndpdG5lc3Muc2xpY2UoMCwgLTEpLFxuICAgIH07XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ2lucHV0JywgKCkgPT4ge1xuICAgIGlmICghby53aXRuZXNzKSByZXR1cm47XG4gICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcbiAgfSk7XG4gIGxhenkucHJvcChvLCAnd2l0bmVzcycsICgpID0+IHtcbiAgICAvLyB0cmFuc2Zvcm0gcmVkZWVtIGlucHV0IHRvIHdpdG5lc3Mgc3RhY2s/XG4gICAgaWYgKFxuICAgICAgYS5yZWRlZW0gJiZcbiAgICAgIGEucmVkZWVtLmlucHV0ICYmXG4gICAgICBhLnJlZGVlbS5pbnB1dC5sZW5ndGggPiAwICYmXG4gICAgICBhLnJlZGVlbS5vdXRwdXQgJiZcbiAgICAgIGEucmVkZWVtLm91dHB1dC5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBjb25zdCBzdGFjayA9IGJzY3JpcHQudG9TdGFjayhfcmNodW5rcygpKTtcbiAgICAgIC8vIGFzc2lnbiwgYW5kIGJsYW5rIHRoZSBleGlzdGluZyBpbnB1dFxuICAgICAgby5yZWRlZW0gPSBPYmplY3QuYXNzaWduKHsgd2l0bmVzczogc3RhY2sgfSwgYS5yZWRlZW0pO1xuICAgICAgby5yZWRlZW0uaW5wdXQgPSBFTVBUWV9CVUZGRVI7XG4gICAgICByZXR1cm4gW10uY29uY2F0KHN0YWNrLCBhLnJlZGVlbS5vdXRwdXQpO1xuICAgIH1cbiAgICBpZiAoIWEucmVkZWVtKSByZXR1cm47XG4gICAgaWYgKCFhLnJlZGVlbS5vdXRwdXQpIHJldHVybjtcbiAgICBpZiAoIWEucmVkZWVtLndpdG5lc3MpIHJldHVybjtcbiAgICByZXR1cm4gW10uY29uY2F0KGEucmVkZWVtLndpdG5lc3MsIGEucmVkZWVtLm91dHB1dCk7XG4gIH0pO1xuICBsYXp5LnByb3AobywgJ25hbWUnLCAoKSA9PiB7XG4gICAgY29uc3QgbmFtZVBhcnRzID0gWydwMndzaCddO1xuICAgIGlmIChvLnJlZGVlbSAhPT0gdW5kZWZpbmVkICYmIG8ucmVkZWVtLm5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgIG5hbWVQYXJ0cy5wdXNoKG8ucmVkZWVtLm5hbWUpO1xuICAgIHJldHVybiBuYW1lUGFydHMuam9pbignLScpO1xuICB9KTtcbiAgLy8gZXh0ZW5kZWQgdmFsaWRhdGlvblxuICBpZiAob3B0cy52YWxpZGF0ZSkge1xuICAgIGxldCBoYXNoID0gQnVmZmVyLmZyb20oW10pO1xuICAgIGlmIChhLmFkZHJlc3MpIHtcbiAgICAgIGlmIChfYWRkcmVzcygpLnByZWZpeCAhPT0gbmV0d29yay5iZWNoMzIpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgcHJlZml4IG9yIE5ldHdvcmsgbWlzbWF0Y2gnKTtcbiAgICAgIGlmIChfYWRkcmVzcygpLnZlcnNpb24gIT09IDB4MDApXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYWRkcmVzcyB2ZXJzaW9uJyk7XG4gICAgICBpZiAoX2FkZHJlc3MoKS5kYXRhLmxlbmd0aCAhPT0gMzIpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYWRkcmVzcyBkYXRhJyk7XG4gICAgICBoYXNoID0gX2FkZHJlc3MoKS5kYXRhO1xuICAgIH1cbiAgICBpZiAoYS5oYXNoKSB7XG4gICAgICBpZiAoaGFzaC5sZW5ndGggPiAwICYmICFoYXNoLmVxdWFscyhhLmhhc2gpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIYXNoIG1pc21hdGNoJyk7XG4gICAgICBlbHNlIGhhc2ggPSBhLmhhc2g7XG4gICAgfVxuICAgIGlmIChhLm91dHB1dCkge1xuICAgICAgaWYgKFxuICAgICAgICBhLm91dHB1dC5sZW5ndGggIT09IDM0IHx8XG4gICAgICAgIGEub3V0cHV0WzBdICE9PSBPUFMuT1BfMCB8fFxuICAgICAgICBhLm91dHB1dFsxXSAhPT0gMHgyMFxuICAgICAgKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPdXRwdXQgaXMgaW52YWxpZCcpO1xuICAgICAgY29uc3QgaGFzaDIgPSBhLm91dHB1dC5zbGljZSgyKTtcbiAgICAgIGlmIChoYXNoLmxlbmd0aCA+IDAgJiYgIWhhc2guZXF1YWxzKGhhc2gyKSlcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSGFzaCBtaXNtYXRjaCcpO1xuICAgICAgZWxzZSBoYXNoID0gaGFzaDI7XG4gICAgfVxuICAgIGlmIChhLnJlZGVlbSkge1xuICAgICAgaWYgKGEucmVkZWVtLm5ldHdvcmsgJiYgYS5yZWRlZW0ubmV0d29yayAhPT0gbmV0d29yaylcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTmV0d29yayBtaXNtYXRjaCcpO1xuICAgICAgLy8gaXMgdGhlcmUgdHdvIHJlZGVlbSBzb3VyY2VzP1xuICAgICAgaWYgKFxuICAgICAgICBhLnJlZGVlbS5pbnB1dCAmJlxuICAgICAgICBhLnJlZGVlbS5pbnB1dC5sZW5ndGggPiAwICYmXG4gICAgICAgIGEucmVkZWVtLndpdG5lc3MgJiZcbiAgICAgICAgYS5yZWRlZW0ud2l0bmVzcy5sZW5ndGggPiAwXG4gICAgICApXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FtYmlndW91cyB3aXRuZXNzIHNvdXJjZScpO1xuICAgICAgLy8gaXMgdGhlIHJlZGVlbSBvdXRwdXQgbm9uLWVtcHR5L3ZhbGlkP1xuICAgICAgaWYgKGEucmVkZWVtLm91dHB1dCkge1xuICAgICAgICBjb25zdCBkZWNvbXBpbGUgPSBic2NyaXB0LmRlY29tcGlsZShhLnJlZGVlbS5vdXRwdXQpO1xuICAgICAgICBpZiAoIWRlY29tcGlsZSB8fCBkZWNvbXBpbGUubGVuZ3RoIDwgMSlcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWRlZW0ub3V0cHV0IGlzIGludmFsaWQnKTtcbiAgICAgICAgaWYgKGEucmVkZWVtLm91dHB1dC5ieXRlTGVuZ3RoID4gMzYwMClcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgJ1JlZGVlbS5vdXRwdXQgdW5zcGVuZGFibGUgaWYgbGFyZ2VyIHRoYW4gMzYwMCBieXRlcycsXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGJzY3JpcHQuY291bnROb25QdXNoT25seU9QcyhkZWNvbXBpbGUpID4gMjAxKVxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICAnUmVkZWVtLm91dHB1dCB1bnNwZW5kYWJsZSB3aXRoIG1vcmUgdGhhbiAyMDEgbm9uLXB1c2ggb3BzJyxcbiAgICAgICAgICApO1xuICAgICAgICAvLyBtYXRjaCBoYXNoIGFnYWluc3Qgb3RoZXIgc291cmNlc1xuICAgICAgICBjb25zdCBoYXNoMiA9IGJjcnlwdG8uc2hhMjU2KGEucmVkZWVtLm91dHB1dCk7XG4gICAgICAgIGlmIChoYXNoLmxlbmd0aCA+IDAgJiYgIWhhc2guZXF1YWxzKGhhc2gyKSlcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdIYXNoIG1pc21hdGNoJyk7XG4gICAgICAgIGVsc2UgaGFzaCA9IGhhc2gyO1xuICAgICAgfVxuICAgICAgaWYgKGEucmVkZWVtLmlucHV0ICYmICFic2NyaXB0LmlzUHVzaE9ubHkoX3JjaHVua3MoKSkpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbiBwdXNoLW9ubHkgc2NyaXB0U2lnJyk7XG4gICAgICBpZiAoXG4gICAgICAgIGEud2l0bmVzcyAmJlxuICAgICAgICBhLnJlZGVlbS53aXRuZXNzICYmXG4gICAgICAgICEoMCwgdHlwZXNfMS5zdGFja3NFcXVhbCkoYS53aXRuZXNzLCBhLnJlZGVlbS53aXRuZXNzKVxuICAgICAgKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdXaXRuZXNzIGFuZCByZWRlZW0ud2l0bmVzcyBtaXNtYXRjaCcpO1xuICAgICAgaWYgKFxuICAgICAgICAoYS5yZWRlZW0uaW5wdXQgJiYgX3JjaHVua3MoKS5zb21lKGNodW5rSGFzVW5jb21wcmVzc2VkUHVia2V5KSkgfHxcbiAgICAgICAgKGEucmVkZWVtLm91dHB1dCAmJlxuICAgICAgICAgIChic2NyaXB0LmRlY29tcGlsZShhLnJlZGVlbS5vdXRwdXQpIHx8IFtdKS5zb21lKFxuICAgICAgICAgICAgY2h1bmtIYXNVbmNvbXByZXNzZWRQdWJrZXksXG4gICAgICAgICAgKSlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdyZWRlZW0uaW5wdXQgb3IgcmVkZWVtLm91dHB1dCBjb250YWlucyB1bmNvbXByZXNzZWQgcHVia2V5JyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGEud2l0bmVzcyAmJiBhLndpdG5lc3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgd1NjcmlwdCA9IGEud2l0bmVzc1thLndpdG5lc3MubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoYS5yZWRlZW0gJiYgYS5yZWRlZW0ub3V0cHV0ICYmICFhLnJlZGVlbS5vdXRwdXQuZXF1YWxzKHdTY3JpcHQpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdXaXRuZXNzIGFuZCByZWRlZW0ub3V0cHV0IG1pc21hdGNoJyk7XG4gICAgICBpZiAoXG4gICAgICAgIGEud2l0bmVzcy5zb21lKGNodW5rSGFzVW5jb21wcmVzc2VkUHVia2V5KSB8fFxuICAgICAgICAoYnNjcmlwdC5kZWNvbXBpbGUod1NjcmlwdCkgfHwgW10pLnNvbWUoY2h1bmtIYXNVbmNvbXByZXNzZWRQdWJrZXkpXG4gICAgICApXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1dpdG5lc3MgY29udGFpbnMgdW5jb21wcmVzc2VkIHB1YmtleScpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihvLCBhKTtcbn1cbmV4cG9ydHMucDJ3c2ggPSBwMndzaDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/payments/p2wsh.js\n\n}")},"./node_modules/bitcoinjs-lib/src/psbt.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Psbt = void 0;\nconst bip174_1 = __webpack_require__(/*! bip174 */ \"./node_modules/bip174/src/lib/psbt.js\");\nconst varuint = __webpack_require__(/*! bip174/src/lib/converter/varint */ \"./node_modules/bip174/src/lib/converter/varint.js\");\nconst utils_1 = __webpack_require__(/*! bip174/src/lib/utils */ \"./node_modules/bip174/src/lib/utils.js\");\nconst address_1 = __webpack_require__(/*! ./address */ \"./node_modules/bitcoinjs-lib/src/address.js\");\nconst bufferutils_1 = __webpack_require__(/*! ./bufferutils */ \"./node_modules/bitcoinjs-lib/src/bufferutils.js\");\nconst networks_1 = __webpack_require__(/*! ./networks */ \"./node_modules/bitcoinjs-lib/src/networks.js\");\nconst payments = __webpack_require__(/*! ./payments */ \"./node_modules/bitcoinjs-lib/src/payments/index.js\");\nconst bip341_1 = __webpack_require__(/*! ./payments/bip341 */ \"./node_modules/bitcoinjs-lib/src/payments/bip341.js\");\nconst bscript = __webpack_require__(/*! ./script */ \"./node_modules/bitcoinjs-lib/src/script.js\");\nconst transaction_1 = __webpack_require__(/*! ./transaction */ \"./node_modules/bitcoinjs-lib/src/transaction.js\");\nconst bip371_1 = __webpack_require__(/*! ./psbt/bip371 */ \"./node_modules/bitcoinjs-lib/src/psbt/bip371.js\");\nconst psbtutils_1 = __webpack_require__(/*! ./psbt/psbtutils */ \"./node_modules/bitcoinjs-lib/src/psbt/psbtutils.js\");\n/**\n * These are the default arguments for a Psbt instance.\n */\nconst DEFAULT_OPTS = {\n /**\n * A bitcoinjs Network object. This is only used if you pass an `address`\n * parameter to addOutput. Otherwise it is not needed and can be left default.\n */\n network: networks_1.bitcoin,\n /**\n * When extractTransaction is called, the fee rate is checked.\n * THIS IS NOT TO BE RELIED ON.\n * It is only here as a last ditch effort to prevent sending a 500 BTC fee etc.\n */\n maximumFeeRate: 5000, // satoshi per byte\n};\n/**\n * Psbt class can parse and generate a PSBT binary based off of the BIP174.\n * There are 6 roles that this class fulfills. (Explained in BIP174)\n *\n * Creator: This can be done with `new Psbt()`\n *\n * Updater: This can be done with `psbt.addInput(input)`, `psbt.addInputs(inputs)`,\n * `psbt.addOutput(output)`, `psbt.addOutputs(outputs)` when you are looking to\n * add new inputs and outputs to the PSBT, and `psbt.updateGlobal(itemObject)`,\n * `psbt.updateInput(itemObject)`, `psbt.updateOutput(itemObject)`\n * addInput requires hash: Buffer | string; and index: number; as attributes\n * and can also include any attributes that are used in updateInput method.\n * addOutput requires script: Buffer; and value: number; and likewise can include\n * data for updateOutput.\n * For a list of what attributes should be what types. Check the bip174 library.\n * Also, check the integration tests for some examples of usage.\n *\n * Signer: There are a few methods. signAllInputs and signAllInputsAsync, which will search all input\n * information for your pubkey or pubkeyhash, and only sign inputs where it finds\n * your info. Or you can explicitly sign a specific input with signInput and\n * signInputAsync. For the async methods you can create a SignerAsync object\n * and use something like a hardware wallet to sign with. (You must implement this)\n *\n * Combiner: psbts can be combined easily with `psbt.combine(psbt2, psbt3, psbt4 ...)`\n * the psbt calling combine will always have precedence when a conflict occurs.\n * Combine checks if the internal bitcoin transaction is the same, so be sure that\n * all sequences, version, locktime, etc. are the same before combining.\n *\n * Input Finalizer: This role is fairly important. Not only does it need to construct\n * the input scriptSigs and witnesses, but it SHOULD verify the signatures etc.\n * Before running `psbt.finalizeAllInputs()` please run `psbt.validateSignaturesOfAllInputs()`\n * Running any finalize method will delete any data in the input(s) that are no longer\n * needed due to the finalized scripts containing the information.\n *\n * Transaction Extractor: This role will perform some checks before returning a\n * Transaction object. Such as fee rate not being larger than maximumFeeRate etc.\n */\nclass Psbt {\n static fromBase64(data, opts = {}) {\n const buffer = Buffer.from(data, 'base64');\n return this.fromBuffer(buffer, opts);\n }\n static fromHex(data, opts = {}) {\n const buffer = Buffer.from(data, 'hex');\n return this.fromBuffer(buffer, opts);\n }\n static fromBuffer(buffer, opts = {}) {\n const psbtBase = bip174_1.Psbt.fromBuffer(buffer, transactionFromBuffer);\n const psbt = new Psbt(opts, psbtBase);\n checkTxForDupeIns(psbt.__CACHE.__TX, psbt.__CACHE);\n return psbt;\n }\n constructor(opts = {}, data = new bip174_1.Psbt(new PsbtTransaction())) {\n this.data = data;\n // set defaults\n this.opts = Object.assign({}, DEFAULT_OPTS, opts);\n this.__CACHE = {\n __NON_WITNESS_UTXO_TX_CACHE: [],\n __NON_WITNESS_UTXO_BUF_CACHE: [],\n __TX_IN_CACHE: {},\n __TX: this.data.globalMap.unsignedTx.tx,\n // Psbt's predecessor (TransactionBuilder - now removed) behavior\n // was to not confirm input values before signing.\n // Even though we highly encourage people to get\n // the full parent transaction to verify values, the ability to\n // sign non-segwit inputs without the full transaction was often\n // requested. So the only way to activate is to use @ts-ignore.\n // We will disable exporting the Psbt when unsafe sign is active.\n // because it is not BIP174 compliant.\n __UNSAFE_SIGN_NONSEGWIT: false,\n };\n if (this.data.inputs.length === 0) this.setVersion(2);\n // Make data hidden when enumerating\n const dpew = (obj, attr, enumerable, writable) =>\n Object.defineProperty(obj, attr, {\n enumerable,\n writable,\n });\n dpew(this, '__CACHE', false, true);\n dpew(this, 'opts', false, true);\n }\n get inputCount() {\n return this.data.inputs.length;\n }\n get version() {\n return this.__CACHE.__TX.version;\n }\n set version(version) {\n this.setVersion(version);\n }\n get locktime() {\n return this.__CACHE.__TX.locktime;\n }\n set locktime(locktime) {\n this.setLocktime(locktime);\n }\n get txInputs() {\n return this.__CACHE.__TX.ins.map(input => ({\n hash: (0, bufferutils_1.cloneBuffer)(input.hash),\n index: input.index,\n sequence: input.sequence,\n }));\n }\n get txOutputs() {\n return this.__CACHE.__TX.outs.map(output => {\n let address;\n try {\n address = (0, address_1.fromOutputScript)(\n output.script,\n this.opts.network,\n );\n } catch (_) {}\n return {\n script: (0, bufferutils_1.cloneBuffer)(output.script),\n value: output.value,\n address,\n };\n });\n }\n combine(...those) {\n this.data.combine(...those.map(o => o.data));\n return this;\n }\n clone() {\n // TODO: more efficient cloning\n const res = Psbt.fromBuffer(this.data.toBuffer());\n res.opts = JSON.parse(JSON.stringify(this.opts));\n return res;\n }\n setMaximumFeeRate(satoshiPerByte) {\n check32Bit(satoshiPerByte); // 42.9 BTC per byte IS excessive... so throw\n this.opts.maximumFeeRate = satoshiPerByte;\n }\n setVersion(version) {\n check32Bit(version);\n checkInputsForPartialSig(this.data.inputs, 'setVersion');\n const c = this.__CACHE;\n c.__TX.version = version;\n c.__EXTRACTED_TX = undefined;\n return this;\n }\n setLocktime(locktime) {\n check32Bit(locktime);\n checkInputsForPartialSig(this.data.inputs, 'setLocktime');\n const c = this.__CACHE;\n c.__TX.locktime = locktime;\n c.__EXTRACTED_TX = undefined;\n return this;\n }\n setInputSequence(inputIndex, sequence) {\n check32Bit(sequence);\n checkInputsForPartialSig(this.data.inputs, 'setInputSequence');\n const c = this.__CACHE;\n if (c.__TX.ins.length <= inputIndex) {\n throw new Error('Input index too high');\n }\n c.__TX.ins[inputIndex].sequence = sequence;\n c.__EXTRACTED_TX = undefined;\n return this;\n }\n addInputs(inputDatas) {\n inputDatas.forEach(inputData => this.addInput(inputData));\n return this;\n }\n addInput(inputData) {\n if (\n arguments.length > 1 ||\n !inputData ||\n inputData.hash === undefined ||\n inputData.index === undefined\n ) {\n throw new Error(\n `Invalid arguments for Psbt.addInput. ` +\n `Requires single object with at least [hash] and [index]`,\n );\n }\n (0, bip371_1.checkTaprootInputFields)(inputData, inputData, 'addInput');\n checkInputsForPartialSig(this.data.inputs, 'addInput');\n if (inputData.witnessScript) checkInvalidP2WSH(inputData.witnessScript);\n const c = this.__CACHE;\n this.data.addInput(inputData);\n const txIn = c.__TX.ins[c.__TX.ins.length - 1];\n checkTxInputCache(c, txIn);\n const inputIndex = this.data.inputs.length - 1;\n const input = this.data.inputs[inputIndex];\n if (input.nonWitnessUtxo) {\n addNonWitnessTxCache(this.__CACHE, input, inputIndex);\n }\n c.__FEE = undefined;\n c.__FEE_RATE = undefined;\n c.__EXTRACTED_TX = undefined;\n return this;\n }\n addOutputs(outputDatas) {\n outputDatas.forEach(outputData => this.addOutput(outputData));\n return this;\n }\n addOutput(outputData) {\n if (\n arguments.length > 1 ||\n !outputData ||\n outputData.value === undefined ||\n (outputData.address === undefined && outputData.script === undefined)\n ) {\n throw new Error(\n `Invalid arguments for Psbt.addOutput. ` +\n `Requires single object with at least [script or address] and [value]`,\n );\n }\n checkInputsForPartialSig(this.data.inputs, 'addOutput');\n const { address } = outputData;\n if (typeof address === 'string') {\n const { network } = this.opts;\n const script = (0, address_1.toOutputScript)(address, network);\n outputData = Object.assign({}, outputData, { script });\n }\n (0, bip371_1.checkTaprootOutputFields)(outputData, outputData, 'addOutput');\n const c = this.__CACHE;\n this.data.addOutput(outputData);\n c.__FEE = undefined;\n c.__FEE_RATE = undefined;\n c.__EXTRACTED_TX = undefined;\n return this;\n }\n extractTransaction(disableFeeCheck) {\n if (!this.data.inputs.every(isFinalized)) throw new Error('Not finalized');\n const c = this.__CACHE;\n if (!disableFeeCheck) {\n checkFees(this, c, this.opts);\n }\n if (c.__EXTRACTED_TX) return c.__EXTRACTED_TX;\n const tx = c.__TX.clone();\n inputFinalizeGetAmts(this.data.inputs, tx, c, true);\n return tx;\n }\n getFeeRate() {\n return getTxCacheValue(\n '__FEE_RATE',\n 'fee rate',\n this.data.inputs,\n this.__CACHE,\n );\n }\n getFee() {\n return getTxCacheValue('__FEE', 'fee', this.data.inputs, this.__CACHE);\n }\n finalizeAllInputs() {\n (0, utils_1.checkForInput)(this.data.inputs, 0); // making sure we have at least one\n range(this.data.inputs.length).forEach(idx => this.finalizeInput(idx));\n return this;\n }\n finalizeInput(inputIndex, finalScriptsFunc) {\n const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n if ((0, bip371_1.isTaprootInput)(input))\n return this._finalizeTaprootInput(\n inputIndex,\n input,\n undefined,\n finalScriptsFunc,\n );\n return this._finalizeInput(inputIndex, input, finalScriptsFunc);\n }\n finalizeTaprootInput(\n inputIndex,\n tapLeafHashToFinalize,\n finalScriptsFunc = bip371_1.tapScriptFinalizer,\n ) {\n const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n if ((0, bip371_1.isTaprootInput)(input))\n return this._finalizeTaprootInput(\n inputIndex,\n input,\n tapLeafHashToFinalize,\n finalScriptsFunc,\n );\n throw new Error(`Cannot finalize input #${inputIndex}. Not Taproot.`);\n }\n _finalizeInput(inputIndex, input, finalScriptsFunc = getFinalScripts) {\n const { script, isP2SH, isP2WSH, isSegwit } = getScriptFromInput(\n inputIndex,\n input,\n this.__CACHE,\n );\n if (!script) throw new Error(`No script found for input #${inputIndex}`);\n checkPartialSigSighashes(input);\n const { finalScriptSig, finalScriptWitness } = finalScriptsFunc(\n inputIndex,\n input,\n script,\n isSegwit,\n isP2SH,\n isP2WSH,\n );\n if (finalScriptSig) this.data.updateInput(inputIndex, { finalScriptSig });\n if (finalScriptWitness)\n this.data.updateInput(inputIndex, { finalScriptWitness });\n if (!finalScriptSig && !finalScriptWitness)\n throw new Error(`Unknown error finalizing input #${inputIndex}`);\n this.data.clearFinalizedInput(inputIndex);\n return this;\n }\n _finalizeTaprootInput(\n inputIndex,\n input,\n tapLeafHashToFinalize,\n finalScriptsFunc = bip371_1.tapScriptFinalizer,\n ) {\n if (!input.witnessUtxo)\n throw new Error(\n `Cannot finalize input #${inputIndex}. Missing withness utxo.`,\n );\n // Check key spend first. Increased privacy and reduced block space.\n if (input.tapKeySig) {\n const payment = payments.p2tr({\n output: input.witnessUtxo.script,\n signature: input.tapKeySig,\n });\n const finalScriptWitness = (0, psbtutils_1.witnessStackToScriptWitness)(\n payment.witness,\n );\n this.data.updateInput(inputIndex, { finalScriptWitness });\n } else {\n const { finalScriptWitness } = finalScriptsFunc(\n inputIndex,\n input,\n tapLeafHashToFinalize,\n );\n this.data.updateInput(inputIndex, { finalScriptWitness });\n }\n this.data.clearFinalizedInput(inputIndex);\n return this;\n }\n getInputType(inputIndex) {\n const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n const script = getScriptFromUtxo(inputIndex, input, this.__CACHE);\n const result = getMeaningfulScript(\n script,\n inputIndex,\n 'input',\n input.redeemScript || redeemFromFinalScriptSig(input.finalScriptSig),\n input.witnessScript ||\n redeemFromFinalWitnessScript(input.finalScriptWitness),\n );\n const type = result.type === 'raw' ? '' : result.type + '-';\n const mainType = classifyScript(result.meaningfulScript);\n return type + mainType;\n }\n inputHasPubkey(inputIndex, pubkey) {\n const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n return pubkeyInInput(pubkey, input, inputIndex, this.__CACHE);\n }\n inputHasHDKey(inputIndex, root) {\n const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n const derivationIsMine = bip32DerivationIsMine(root);\n return (\n !!input.bip32Derivation && input.bip32Derivation.some(derivationIsMine)\n );\n }\n outputHasPubkey(outputIndex, pubkey) {\n const output = (0, utils_1.checkForOutput)(this.data.outputs, outputIndex);\n return pubkeyInOutput(pubkey, output, outputIndex, this.__CACHE);\n }\n outputHasHDKey(outputIndex, root) {\n const output = (0, utils_1.checkForOutput)(this.data.outputs, outputIndex);\n const derivationIsMine = bip32DerivationIsMine(root);\n return (\n !!output.bip32Derivation && output.bip32Derivation.some(derivationIsMine)\n );\n }\n validateSignaturesOfAllInputs(validator) {\n (0, utils_1.checkForInput)(this.data.inputs, 0); // making sure we have at least one\n const results = range(this.data.inputs.length).map(idx =>\n this.validateSignaturesOfInput(idx, validator),\n );\n return results.reduce((final, res) => res === true && final, true);\n }\n validateSignaturesOfInput(inputIndex, validator, pubkey) {\n const input = this.data.inputs[inputIndex];\n if ((0, bip371_1.isTaprootInput)(input))\n return this.validateSignaturesOfTaprootInput(\n inputIndex,\n validator,\n pubkey,\n );\n return this._validateSignaturesOfInput(inputIndex, validator, pubkey);\n }\n _validateSignaturesOfInput(inputIndex, validator, pubkey) {\n const input = this.data.inputs[inputIndex];\n const partialSig = (input || {}).partialSig;\n if (!input || !partialSig || partialSig.length < 1)\n throw new Error('No signatures to validate');\n if (typeof validator !== 'function')\n throw new Error('Need validator function to validate signatures');\n const mySigs = pubkey\n ? partialSig.filter(sig => sig.pubkey.equals(pubkey))\n : partialSig;\n if (mySigs.length < 1) throw new Error('No signatures for this pubkey');\n const results = [];\n let hashCache;\n let scriptCache;\n let sighashCache;\n for (const pSig of mySigs) {\n const sig = bscript.signature.decode(pSig.signature);\n const { hash, script } =\n sighashCache !== sig.hashType\n ? getHashForSig(\n inputIndex,\n Object.assign({}, input, { sighashType: sig.hashType }),\n this.__CACHE,\n true,\n )\n : { hash: hashCache, script: scriptCache };\n sighashCache = sig.hashType;\n hashCache = hash;\n scriptCache = script;\n checkScriptForPubkey(pSig.pubkey, script, 'verify');\n results.push(validator(pSig.pubkey, hash, sig.signature));\n }\n return results.every(res => res === true);\n }\n validateSignaturesOfTaprootInput(inputIndex, validator, pubkey) {\n const input = this.data.inputs[inputIndex];\n const tapKeySig = (input || {}).tapKeySig;\n const tapScriptSig = (input || {}).tapScriptSig;\n if (!input && !tapKeySig && !(tapScriptSig && !tapScriptSig.length))\n throw new Error('No signatures to validate');\n if (typeof validator !== 'function')\n throw new Error('Need validator function to validate signatures');\n pubkey = pubkey && (0, bip371_1.toXOnly)(pubkey);\n const allHashses = pubkey\n ? getTaprootHashesForSig(\n inputIndex,\n input,\n this.data.inputs,\n pubkey,\n this.__CACHE,\n )\n : getAllTaprootHashesForSig(\n inputIndex,\n input,\n this.data.inputs,\n this.__CACHE,\n );\n if (!allHashses.length) throw new Error('No signatures for this pubkey');\n const tapKeyHash = allHashses.find(h => !h.leafHash);\n let validationResultCount = 0;\n if (tapKeySig && tapKeyHash) {\n const isValidTapkeySig = validator(\n tapKeyHash.pubkey,\n tapKeyHash.hash,\n trimTaprootSig(tapKeySig),\n );\n if (!isValidTapkeySig) return false;\n validationResultCount++;\n }\n if (tapScriptSig) {\n for (const tapSig of tapScriptSig) {\n const tapSigHash = allHashses.find(h => tapSig.pubkey.equals(h.pubkey));\n if (tapSigHash) {\n const isValidTapScriptSig = validator(\n tapSig.pubkey,\n tapSigHash.hash,\n trimTaprootSig(tapSig.signature),\n );\n if (!isValidTapScriptSig) return false;\n validationResultCount++;\n }\n }\n }\n return validationResultCount > 0;\n }\n signAllInputsHD(\n hdKeyPair,\n sighashTypes = [transaction_1.Transaction.SIGHASH_ALL],\n ) {\n if (!hdKeyPair || !hdKeyPair.publicKey || !hdKeyPair.fingerprint) {\n throw new Error('Need HDSigner to sign input');\n }\n const results = [];\n for (const i of range(this.data.inputs.length)) {\n try {\n this.signInputHD(i, hdKeyPair, sighashTypes);\n results.push(true);\n } catch (err) {\n results.push(false);\n }\n }\n if (results.every(v => v === false)) {\n throw new Error('No inputs were signed');\n }\n return this;\n }\n signAllInputsHDAsync(\n hdKeyPair,\n sighashTypes = [transaction_1.Transaction.SIGHASH_ALL],\n ) {\n return new Promise((resolve, reject) => {\n if (!hdKeyPair || !hdKeyPair.publicKey || !hdKeyPair.fingerprint) {\n return reject(new Error('Need HDSigner to sign input'));\n }\n const results = [];\n const promises = [];\n for (const i of range(this.data.inputs.length)) {\n promises.push(\n this.signInputHDAsync(i, hdKeyPair, sighashTypes).then(\n () => {\n results.push(true);\n },\n () => {\n results.push(false);\n },\n ),\n );\n }\n return Promise.all(promises).then(() => {\n if (results.every(v => v === false)) {\n return reject(new Error('No inputs were signed'));\n }\n resolve();\n });\n });\n }\n signInputHD(\n inputIndex,\n hdKeyPair,\n sighashTypes = [transaction_1.Transaction.SIGHASH_ALL],\n ) {\n if (!hdKeyPair || !hdKeyPair.publicKey || !hdKeyPair.fingerprint) {\n throw new Error('Need HDSigner to sign input');\n }\n const signers = getSignersFromHD(inputIndex, this.data.inputs, hdKeyPair);\n signers.forEach(signer => this.signInput(inputIndex, signer, sighashTypes));\n return this;\n }\n signInputHDAsync(\n inputIndex,\n hdKeyPair,\n sighashTypes = [transaction_1.Transaction.SIGHASH_ALL],\n ) {\n return new Promise((resolve, reject) => {\n if (!hdKeyPair || !hdKeyPair.publicKey || !hdKeyPair.fingerprint) {\n return reject(new Error('Need HDSigner to sign input'));\n }\n const signers = getSignersFromHD(inputIndex, this.data.inputs, hdKeyPair);\n const promises = signers.map(signer =>\n this.signInputAsync(inputIndex, signer, sighashTypes),\n );\n return Promise.all(promises)\n .then(() => {\n resolve();\n })\n .catch(reject);\n });\n }\n signAllInputs(keyPair, sighashTypes) {\n if (!keyPair || !keyPair.publicKey)\n throw new Error('Need Signer to sign input');\n // TODO: Add a pubkey/pubkeyhash cache to each input\n // as input information is added, then eventually\n // optimize this method.\n const results = [];\n for (const i of range(this.data.inputs.length)) {\n try {\n this.signInput(i, keyPair, sighashTypes);\n results.push(true);\n } catch (err) {\n results.push(false);\n }\n }\n if (results.every(v => v === false)) {\n throw new Error('No inputs were signed');\n }\n return this;\n }\n signAllInputsAsync(keyPair, sighashTypes) {\n return new Promise((resolve, reject) => {\n if (!keyPair || !keyPair.publicKey)\n return reject(new Error('Need Signer to sign input'));\n // TODO: Add a pubkey/pubkeyhash cache to each input\n // as input information is added, then eventually\n // optimize this method.\n const results = [];\n const promises = [];\n for (const [i] of this.data.inputs.entries()) {\n promises.push(\n this.signInputAsync(i, keyPair, sighashTypes).then(\n () => {\n results.push(true);\n },\n () => {\n results.push(false);\n },\n ),\n );\n }\n return Promise.all(promises).then(() => {\n if (results.every(v => v === false)) {\n return reject(new Error('No inputs were signed'));\n }\n resolve();\n });\n });\n }\n signInput(inputIndex, keyPair, sighashTypes) {\n if (!keyPair || !keyPair.publicKey)\n throw new Error('Need Signer to sign input');\n const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n if ((0, bip371_1.isTaprootInput)(input)) {\n return this._signTaprootInput(\n inputIndex,\n input,\n keyPair,\n undefined,\n sighashTypes,\n );\n }\n return this._signInput(inputIndex, keyPair, sighashTypes);\n }\n signTaprootInput(inputIndex, keyPair, tapLeafHashToSign, sighashTypes) {\n if (!keyPair || !keyPair.publicKey)\n throw new Error('Need Signer to sign input');\n const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n if ((0, bip371_1.isTaprootInput)(input))\n return this._signTaprootInput(\n inputIndex,\n input,\n keyPair,\n tapLeafHashToSign,\n sighashTypes,\n );\n throw new Error(`Input #${inputIndex} is not of type Taproot.`);\n }\n _signInput(\n inputIndex,\n keyPair,\n sighashTypes = [transaction_1.Transaction.SIGHASH_ALL],\n ) {\n const { hash, sighashType } = getHashAndSighashType(\n this.data.inputs,\n inputIndex,\n keyPair.publicKey,\n this.__CACHE,\n sighashTypes,\n );\n const partialSig = [\n {\n pubkey: keyPair.publicKey,\n signature: bscript.signature.encode(keyPair.sign(hash), sighashType),\n },\n ];\n this.data.updateInput(inputIndex, { partialSig });\n return this;\n }\n _signTaprootInput(\n inputIndex,\n input,\n keyPair,\n tapLeafHashToSign,\n allowedSighashTypes = [transaction_1.Transaction.SIGHASH_DEFAULT],\n ) {\n const hashesForSig = this.checkTaprootHashesForSig(\n inputIndex,\n input,\n keyPair,\n tapLeafHashToSign,\n allowedSighashTypes,\n );\n const tapKeySig = hashesForSig\n .filter(h => !h.leafHash)\n .map(h =>\n (0, bip371_1.serializeTaprootSignature)(\n keyPair.signSchnorr(h.hash),\n input.sighashType,\n ),\n )[0];\n const tapScriptSig = hashesForSig\n .filter(h => !!h.leafHash)\n .map(h => ({\n pubkey: (0, bip371_1.toXOnly)(keyPair.publicKey),\n signature: (0, bip371_1.serializeTaprootSignature)(\n keyPair.signSchnorr(h.hash),\n input.sighashType,\n ),\n leafHash: h.leafHash,\n }));\n if (tapKeySig) {\n this.data.updateInput(inputIndex, { tapKeySig });\n }\n if (tapScriptSig.length) {\n this.data.updateInput(inputIndex, { tapScriptSig });\n }\n return this;\n }\n signInputAsync(inputIndex, keyPair, sighashTypes) {\n return Promise.resolve().then(() => {\n if (!keyPair || !keyPair.publicKey)\n throw new Error('Need Signer to sign input');\n const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n if ((0, bip371_1.isTaprootInput)(input))\n return this._signTaprootInputAsync(\n inputIndex,\n input,\n keyPair,\n undefined,\n sighashTypes,\n );\n return this._signInputAsync(inputIndex, keyPair, sighashTypes);\n });\n }\n signTaprootInputAsync(inputIndex, keyPair, tapLeafHash, sighashTypes) {\n return Promise.resolve().then(() => {\n if (!keyPair || !keyPair.publicKey)\n throw new Error('Need Signer to sign input');\n const input = (0, utils_1.checkForInput)(this.data.inputs, inputIndex);\n if ((0, bip371_1.isTaprootInput)(input))\n return this._signTaprootInputAsync(\n inputIndex,\n input,\n keyPair,\n tapLeafHash,\n sighashTypes,\n );\n throw new Error(`Input #${inputIndex} is not of type Taproot.`);\n });\n }\n _signInputAsync(\n inputIndex,\n keyPair,\n sighashTypes = [transaction_1.Transaction.SIGHASH_ALL],\n ) {\n const { hash, sighashType } = getHashAndSighashType(\n this.data.inputs,\n inputIndex,\n keyPair.publicKey,\n this.__CACHE,\n sighashTypes,\n );\n return Promise.resolve(keyPair.sign(hash)).then(signature => {\n const partialSig = [\n {\n pubkey: keyPair.publicKey,\n signature: bscript.signature.encode(signature, sighashType),\n },\n ];\n this.data.updateInput(inputIndex, { partialSig });\n });\n }\n async _signTaprootInputAsync(\n inputIndex,\n input,\n keyPair,\n tapLeafHash,\n sighashTypes = [transaction_1.Transaction.SIGHASH_DEFAULT],\n ) {\n const hashesForSig = this.checkTaprootHashesForSig(\n inputIndex,\n input,\n keyPair,\n tapLeafHash,\n sighashTypes,\n );\n const signaturePromises = [];\n const tapKeyHash = hashesForSig.filter(h => !h.leafHash)[0];\n if (tapKeyHash) {\n const tapKeySigPromise = Promise.resolve(\n keyPair.signSchnorr(tapKeyHash.hash),\n ).then(sig => {\n return {\n tapKeySig: (0, bip371_1.serializeTaprootSignature)(\n sig,\n input.sighashType,\n ),\n };\n });\n signaturePromises.push(tapKeySigPromise);\n }\n const tapScriptHashes = hashesForSig.filter(h => !!h.leafHash);\n if (tapScriptHashes.length) {\n const tapScriptSigPromises = tapScriptHashes.map(tsh => {\n return Promise.resolve(keyPair.signSchnorr(tsh.hash)).then(\n signature => {\n const tapScriptSig = [\n {\n pubkey: (0, bip371_1.toXOnly)(keyPair.publicKey),\n signature: (0, bip371_1.serializeTaprootSignature)(\n signature,\n input.sighashType,\n ),\n leafHash: tsh.leafHash,\n },\n ];\n return { tapScriptSig };\n },\n );\n });\n signaturePromises.push(...tapScriptSigPromises);\n }\n return Promise.all(signaturePromises).then(results => {\n results.forEach(v => this.data.updateInput(inputIndex, v));\n });\n }\n checkTaprootHashesForSig(\n inputIndex,\n input,\n keyPair,\n tapLeafHashToSign,\n allowedSighashTypes,\n ) {\n if (typeof keyPair.signSchnorr !== 'function')\n throw new Error(\n `Need Schnorr Signer to sign taproot input #${inputIndex}.`,\n );\n const hashesForSig = getTaprootHashesForSig(\n inputIndex,\n input,\n this.data.inputs,\n keyPair.publicKey,\n this.__CACHE,\n tapLeafHashToSign,\n allowedSighashTypes,\n );\n if (!hashesForSig || !hashesForSig.length)\n throw new Error(\n `Can not sign for input #${inputIndex} with the key ${keyPair.publicKey.toString(\n 'hex',\n )}`,\n );\n return hashesForSig;\n }\n toBuffer() {\n checkCache(this.__CACHE);\n return this.data.toBuffer();\n }\n toHex() {\n checkCache(this.__CACHE);\n return this.data.toHex();\n }\n toBase64() {\n checkCache(this.__CACHE);\n return this.data.toBase64();\n }\n updateGlobal(updateData) {\n this.data.updateGlobal(updateData);\n return this;\n }\n updateInput(inputIndex, updateData) {\n if (updateData.witnessScript) checkInvalidP2WSH(updateData.witnessScript);\n (0, bip371_1.checkTaprootInputFields)(\n this.data.inputs[inputIndex],\n updateData,\n 'updateInput',\n );\n this.data.updateInput(inputIndex, updateData);\n if (updateData.nonWitnessUtxo) {\n addNonWitnessTxCache(\n this.__CACHE,\n this.data.inputs[inputIndex],\n inputIndex,\n );\n }\n return this;\n }\n updateOutput(outputIndex, updateData) {\n const outputData = this.data.outputs[outputIndex];\n (0, bip371_1.checkTaprootOutputFields)(\n outputData,\n updateData,\n 'updateOutput',\n );\n this.data.updateOutput(outputIndex, updateData);\n return this;\n }\n addUnknownKeyValToGlobal(keyVal) {\n this.data.addUnknownKeyValToGlobal(keyVal);\n return this;\n }\n addUnknownKeyValToInput(inputIndex, keyVal) {\n this.data.addUnknownKeyValToInput(inputIndex, keyVal);\n return this;\n }\n addUnknownKeyValToOutput(outputIndex, keyVal) {\n this.data.addUnknownKeyValToOutput(outputIndex, keyVal);\n return this;\n }\n clearFinalizedInput(inputIndex) {\n this.data.clearFinalizedInput(inputIndex);\n return this;\n }\n}\nexports.Psbt = Psbt;\n/**\n * This function is needed to pass to the bip174 base class's fromBuffer.\n * It takes the \"transaction buffer\" portion of the psbt buffer and returns a\n * Transaction (From the bip174 library) interface.\n */\nconst transactionFromBuffer = buffer => new PsbtTransaction(buffer);\n/**\n * This class implements the Transaction interface from bip174 library.\n * It contains a bitcoinjs-lib Transaction object.\n */\nclass PsbtTransaction {\n constructor(buffer = Buffer.from([2, 0, 0, 0, 0, 0, 0, 0, 0, 0])) {\n this.tx = transaction_1.Transaction.fromBuffer(buffer);\n checkTxEmpty(this.tx);\n Object.defineProperty(this, 'tx', {\n enumerable: false,\n writable: true,\n });\n }\n getInputOutputCounts() {\n return {\n inputCount: this.tx.ins.length,\n outputCount: this.tx.outs.length,\n };\n }\n addInput(input) {\n if (\n input.hash === undefined ||\n input.index === undefined ||\n (!Buffer.isBuffer(input.hash) && typeof input.hash !== 'string') ||\n typeof input.index !== 'number'\n ) {\n throw new Error('Error adding input.');\n }\n const hash =\n typeof input.hash === 'string'\n ? (0, bufferutils_1.reverseBuffer)(Buffer.from(input.hash, 'hex'))\n : input.hash;\n this.tx.addInput(hash, input.index, input.sequence);\n }\n addOutput(output) {\n if (\n output.script === undefined ||\n output.value === undefined ||\n !Buffer.isBuffer(output.script) ||\n typeof output.value !== 'number'\n ) {\n throw new Error('Error adding output.');\n }\n this.tx.addOutput(output.script, output.value);\n }\n toBuffer() {\n return this.tx.toBuffer();\n }\n}\nfunction canFinalize(input, script, scriptType) {\n switch (scriptType) {\n case 'pubkey':\n case 'pubkeyhash':\n case 'witnesspubkeyhash':\n return hasSigs(1, input.partialSig);\n case 'multisig':\n const p2ms = payments.p2ms({ output: script });\n return hasSigs(p2ms.m, input.partialSig, p2ms.pubkeys);\n default:\n return false;\n }\n}\nfunction checkCache(cache) {\n if (cache.__UNSAFE_SIGN_NONSEGWIT !== false) {\n throw new Error('Not BIP174 compliant, can not export');\n }\n}\nfunction hasSigs(neededSigs, partialSig, pubkeys) {\n if (!partialSig) return false;\n let sigs;\n if (pubkeys) {\n sigs = pubkeys\n .map(pkey => {\n const pubkey = compressPubkey(pkey);\n return partialSig.find(pSig => pSig.pubkey.equals(pubkey));\n })\n .filter(v => !!v);\n } else {\n sigs = partialSig;\n }\n if (sigs.length > neededSigs) throw new Error('Too many signatures');\n return sigs.length === neededSigs;\n}\nfunction isFinalized(input) {\n return !!input.finalScriptSig || !!input.finalScriptWitness;\n}\nfunction bip32DerivationIsMine(root) {\n return d => {\n if (!d.masterFingerprint.equals(root.fingerprint)) return false;\n if (!root.derivePath(d.path).publicKey.equals(d.pubkey)) return false;\n return true;\n };\n}\nfunction check32Bit(num) {\n if (\n typeof num !== 'number' ||\n num !== Math.floor(num) ||\n num > 0xffffffff ||\n num < 0\n ) {\n throw new Error('Invalid 32 bit integer');\n }\n}\nfunction checkFees(psbt, cache, opts) {\n const feeRate = cache.__FEE_RATE || psbt.getFeeRate();\n const vsize = cache.__EXTRACTED_TX.virtualSize();\n const satoshis = feeRate * vsize;\n if (feeRate >= opts.maximumFeeRate) {\n throw new Error(\n `Warning: You are paying around ${(satoshis / 1e8).toFixed(8)} in ` +\n `fees, which is ${feeRate} satoshi per byte for a transaction ` +\n `with a VSize of ${vsize} bytes (segwit counted as 0.25 byte per ` +\n `byte). Use setMaximumFeeRate method to raise your threshold, or ` +\n `pass true to the first arg of extractTransaction.`,\n );\n }\n}\nfunction checkInputsForPartialSig(inputs, action) {\n inputs.forEach(input => {\n const throws = (0, bip371_1.isTaprootInput)(input)\n ? (0, bip371_1.checkTaprootInputForSigs)(input, action)\n : (0, psbtutils_1.checkInputForSig)(input, action);\n if (throws)\n throw new Error('Can not modify transaction, signatures exist.');\n });\n}\nfunction checkPartialSigSighashes(input) {\n if (!input.sighashType || !input.partialSig) return;\n const { partialSig, sighashType } = input;\n partialSig.forEach(pSig => {\n const { hashType } = bscript.signature.decode(pSig.signature);\n if (sighashType !== hashType) {\n throw new Error('Signature sighash does not match input sighash type');\n }\n });\n}\nfunction checkScriptForPubkey(pubkey, script, action) {\n if (!(0, psbtutils_1.pubkeyInScript)(pubkey, script)) {\n throw new Error(\n `Can not ${action} for this input with the key ${pubkey.toString('hex')}`,\n );\n }\n}\nfunction checkTxEmpty(tx) {\n const isEmpty = tx.ins.every(\n input =>\n input.script &&\n input.script.length === 0 &&\n input.witness &&\n input.witness.length === 0,\n );\n if (!isEmpty) {\n throw new Error('Format Error: Transaction ScriptSigs are not empty');\n }\n}\nfunction checkTxForDupeIns(tx, cache) {\n tx.ins.forEach(input => {\n checkTxInputCache(cache, input);\n });\n}\nfunction checkTxInputCache(cache, input) {\n const key =\n (0, bufferutils_1.reverseBuffer)(Buffer.from(input.hash)).toString('hex') +\n ':' +\n input.index;\n if (cache.__TX_IN_CACHE[key]) throw new Error('Duplicate input detected.');\n cache.__TX_IN_CACHE[key] = 1;\n}\nfunction scriptCheckerFactory(payment, paymentScriptName) {\n return (inputIndex, scriptPubKey, redeemScript, ioType) => {\n const redeemScriptOutput = payment({\n redeem: { output: redeemScript },\n }).output;\n if (!scriptPubKey.equals(redeemScriptOutput)) {\n throw new Error(\n `${paymentScriptName} for ${ioType} #${inputIndex} doesn't match the scriptPubKey in the prevout`,\n );\n }\n };\n}\nconst checkRedeemScript = scriptCheckerFactory(payments.p2sh, 'Redeem script');\nconst checkWitnessScript = scriptCheckerFactory(\n payments.p2wsh,\n 'Witness script',\n);\nfunction getTxCacheValue(key, name, inputs, c) {\n if (!inputs.every(isFinalized))\n throw new Error(`PSBT must be finalized to calculate ${name}`);\n if (key === '__FEE_RATE' && c.__FEE_RATE) return c.__FEE_RATE;\n if (key === '__FEE' && c.__FEE) return c.__FEE;\n let tx;\n let mustFinalize = true;\n if (c.__EXTRACTED_TX) {\n tx = c.__EXTRACTED_TX;\n mustFinalize = false;\n } else {\n tx = c.__TX.clone();\n }\n inputFinalizeGetAmts(inputs, tx, c, mustFinalize);\n if (key === '__FEE_RATE') return c.__FEE_RATE;\n else if (key === '__FEE') return c.__FEE;\n}\nfunction getFinalScripts(inputIndex, input, script, isSegwit, isP2SH, isP2WSH) {\n const scriptType = classifyScript(script);\n if (!canFinalize(input, script, scriptType))\n throw new Error(`Can not finalize input #${inputIndex}`);\n return prepareFinalScripts(\n script,\n scriptType,\n input.partialSig,\n isSegwit,\n isP2SH,\n isP2WSH,\n );\n}\nfunction prepareFinalScripts(\n script,\n scriptType,\n partialSig,\n isSegwit,\n isP2SH,\n isP2WSH,\n) {\n let finalScriptSig;\n let finalScriptWitness;\n // Wow, the payments API is very handy\n const payment = getPayment(script, scriptType, partialSig);\n const p2wsh = !isP2WSH ? null : payments.p2wsh({ redeem: payment });\n const p2sh = !isP2SH ? null : payments.p2sh({ redeem: p2wsh || payment });\n if (isSegwit) {\n if (p2wsh) {\n finalScriptWitness = (0, psbtutils_1.witnessStackToScriptWitness)(\n p2wsh.witness,\n );\n } else {\n finalScriptWitness = (0, psbtutils_1.witnessStackToScriptWitness)(\n payment.witness,\n );\n }\n if (p2sh) {\n finalScriptSig = p2sh.input;\n }\n } else {\n if (p2sh) {\n finalScriptSig = p2sh.input;\n } else {\n finalScriptSig = payment.input;\n }\n }\n return {\n finalScriptSig,\n finalScriptWitness,\n };\n}\nfunction getHashAndSighashType(\n inputs,\n inputIndex,\n pubkey,\n cache,\n sighashTypes,\n) {\n const input = (0, utils_1.checkForInput)(inputs, inputIndex);\n const { hash, sighashType, script } = getHashForSig(\n inputIndex,\n input,\n cache,\n false,\n sighashTypes,\n );\n checkScriptForPubkey(pubkey, script, 'sign');\n return {\n hash,\n sighashType,\n };\n}\nfunction getHashForSig(inputIndex, input, cache, forValidate, sighashTypes) {\n const unsignedTx = cache.__TX;\n const sighashType =\n input.sighashType || transaction_1.Transaction.SIGHASH_ALL;\n checkSighashTypeAllowed(sighashType, sighashTypes);\n let hash;\n let prevout;\n if (input.nonWitnessUtxo) {\n const nonWitnessUtxoTx = nonWitnessUtxoTxFromCache(\n cache,\n input,\n inputIndex,\n );\n const prevoutHash = unsignedTx.ins[inputIndex].hash;\n const utxoHash = nonWitnessUtxoTx.getHash();\n // If a non-witness UTXO is provided, its hash must match the hash specified in the prevout\n if (!prevoutHash.equals(utxoHash)) {\n throw new Error(\n `Non-witness UTXO hash for input #${inputIndex} doesn't match the hash specified in the prevout`,\n );\n }\n const prevoutIndex = unsignedTx.ins[inputIndex].index;\n prevout = nonWitnessUtxoTx.outs[prevoutIndex];\n } else if (input.witnessUtxo) {\n prevout = input.witnessUtxo;\n } else {\n throw new Error('Need a Utxo input item for signing');\n }\n const { meaningfulScript, type } = getMeaningfulScript(\n prevout.script,\n inputIndex,\n 'input',\n input.redeemScript,\n input.witnessScript,\n );\n if (['p2sh-p2wsh', 'p2wsh'].indexOf(type) >= 0) {\n hash = unsignedTx.hashForWitnessV0(\n inputIndex,\n meaningfulScript,\n prevout.value,\n sighashType,\n );\n } else if ((0, psbtutils_1.isP2WPKH)(meaningfulScript)) {\n // P2WPKH uses the P2PKH template for prevoutScript when signing\n const signingScript = payments.p2pkh({\n hash: meaningfulScript.slice(2),\n }).output;\n hash = unsignedTx.hashForWitnessV0(\n inputIndex,\n signingScript,\n prevout.value,\n sighashType,\n );\n } else {\n // non-segwit\n if (\n input.nonWitnessUtxo === undefined &&\n cache.__UNSAFE_SIGN_NONSEGWIT === false\n )\n throw new Error(\n `Input #${inputIndex} has witnessUtxo but non-segwit script: ` +\n `${meaningfulScript.toString('hex')}`,\n );\n if (!forValidate && cache.__UNSAFE_SIGN_NONSEGWIT !== false)\n console.warn(\n 'Warning: Signing non-segwit inputs without the full parent transaction ' +\n 'means there is a chance that a miner could feed you incorrect information ' +\n \"to trick you into paying large fees. This behavior is the same as Psbt's predecessor \" +\n '(TransactionBuilder - now removed) when signing non-segwit scripts. You are not ' +\n 'able to export this Psbt with toBuffer|toBase64|toHex since it is not ' +\n 'BIP174 compliant.\\n*********************\\nPROCEED WITH CAUTION!\\n' +\n '*********************',\n );\n hash = unsignedTx.hashForSignature(\n inputIndex,\n meaningfulScript,\n sighashType,\n );\n }\n return {\n script: meaningfulScript,\n sighashType,\n hash,\n };\n}\nfunction getAllTaprootHashesForSig(inputIndex, input, inputs, cache) {\n const allPublicKeys = [];\n if (input.tapInternalKey) {\n const key = getPrevoutTaprootKey(inputIndex, input, cache);\n if (key) {\n allPublicKeys.push(key);\n }\n }\n if (input.tapScriptSig) {\n const tapScriptPubkeys = input.tapScriptSig.map(tss => tss.pubkey);\n allPublicKeys.push(...tapScriptPubkeys);\n }\n const allHashes = allPublicKeys.map(pubicKey =>\n getTaprootHashesForSig(inputIndex, input, inputs, pubicKey, cache),\n );\n return allHashes.flat();\n}\nfunction getPrevoutTaprootKey(inputIndex, input, cache) {\n const { script } = getScriptAndAmountFromUtxo(inputIndex, input, cache);\n return (0, psbtutils_1.isP2TR)(script) ? script.subarray(2, 34) : null;\n}\nfunction trimTaprootSig(signature) {\n return signature.length === 64 ? signature : signature.subarray(0, 64);\n}\nfunction getTaprootHashesForSig(\n inputIndex,\n input,\n inputs,\n pubkey,\n cache,\n tapLeafHashToSign,\n allowedSighashTypes,\n) {\n const unsignedTx = cache.__TX;\n const sighashType =\n input.sighashType || transaction_1.Transaction.SIGHASH_DEFAULT;\n checkSighashTypeAllowed(sighashType, allowedSighashTypes);\n const prevOuts = inputs.map((i, index) =>\n getScriptAndAmountFromUtxo(index, i, cache),\n );\n const signingScripts = prevOuts.map(o => o.script);\n const values = prevOuts.map(o => o.value);\n const hashes = [];\n if (input.tapInternalKey && !tapLeafHashToSign) {\n const outputKey =\n getPrevoutTaprootKey(inputIndex, input, cache) || Buffer.from([]);\n if ((0, bip371_1.toXOnly)(pubkey).equals(outputKey)) {\n const tapKeyHash = unsignedTx.hashForWitnessV1(\n inputIndex,\n signingScripts,\n values,\n sighashType,\n );\n hashes.push({ pubkey, hash: tapKeyHash });\n }\n }\n const tapLeafHashes = (input.tapLeafScript || [])\n .filter(tapLeaf => (0, psbtutils_1.pubkeyInScript)(pubkey, tapLeaf.script))\n .map(tapLeaf => {\n const hash = (0, bip341_1.tapleafHash)({\n output: tapLeaf.script,\n version: tapLeaf.leafVersion,\n });\n return Object.assign({ hash }, tapLeaf);\n })\n .filter(\n tapLeaf => !tapLeafHashToSign || tapLeafHashToSign.equals(tapLeaf.hash),\n )\n .map(tapLeaf => {\n const tapScriptHash = unsignedTx.hashForWitnessV1(\n inputIndex,\n signingScripts,\n values,\n sighashType,\n tapLeaf.hash,\n );\n return {\n pubkey,\n hash: tapScriptHash,\n leafHash: tapLeaf.hash,\n };\n });\n return hashes.concat(tapLeafHashes);\n}\nfunction checkSighashTypeAllowed(sighashType, sighashTypes) {\n if (sighashTypes && sighashTypes.indexOf(sighashType) < 0) {\n const str = sighashTypeToString(sighashType);\n throw new Error(\n `Sighash type is not allowed. Retry the sign method passing the ` +\n `sighashTypes array of whitelisted types. Sighash type: ${str}`,\n );\n }\n}\nfunction getPayment(script, scriptType, partialSig) {\n let payment;\n switch (scriptType) {\n case 'multisig':\n const sigs = getSortedSigs(script, partialSig);\n payment = payments.p2ms({\n output: script,\n signatures: sigs,\n });\n break;\n case 'pubkey':\n payment = payments.p2pk({\n output: script,\n signature: partialSig[0].signature,\n });\n break;\n case 'pubkeyhash':\n payment = payments.p2pkh({\n output: script,\n pubkey: partialSig[0].pubkey,\n signature: partialSig[0].signature,\n });\n break;\n case 'witnesspubkeyhash':\n payment = payments.p2wpkh({\n output: script,\n pubkey: partialSig[0].pubkey,\n signature: partialSig[0].signature,\n });\n break;\n }\n return payment;\n}\nfunction getScriptFromInput(inputIndex, input, cache) {\n const unsignedTx = cache.__TX;\n const res = {\n script: null,\n isSegwit: false,\n isP2SH: false,\n isP2WSH: false,\n };\n res.isP2SH = !!input.redeemScript;\n res.isP2WSH = !!input.witnessScript;\n if (input.witnessScript) {\n res.script = input.witnessScript;\n } else if (input.redeemScript) {\n res.script = input.redeemScript;\n } else {\n if (input.nonWitnessUtxo) {\n const nonWitnessUtxoTx = nonWitnessUtxoTxFromCache(\n cache,\n input,\n inputIndex,\n );\n const prevoutIndex = unsignedTx.ins[inputIndex].index;\n res.script = nonWitnessUtxoTx.outs[prevoutIndex].script;\n } else if (input.witnessUtxo) {\n res.script = input.witnessUtxo.script;\n }\n }\n if (input.witnessScript || (0, psbtutils_1.isP2WPKH)(res.script)) {\n res.isSegwit = true;\n }\n return res;\n}\nfunction getSignersFromHD(inputIndex, inputs, hdKeyPair) {\n const input = (0, utils_1.checkForInput)(inputs, inputIndex);\n if (!input.bip32Derivation || input.bip32Derivation.length === 0) {\n throw new Error('Need bip32Derivation to sign with HD');\n }\n const myDerivations = input.bip32Derivation\n .map(bipDv => {\n if (bipDv.masterFingerprint.equals(hdKeyPair.fingerprint)) {\n return bipDv;\n } else {\n return;\n }\n })\n .filter(v => !!v);\n if (myDerivations.length === 0) {\n throw new Error(\n 'Need one bip32Derivation masterFingerprint to match the HDSigner fingerprint',\n );\n }\n const signers = myDerivations.map(bipDv => {\n const node = hdKeyPair.derivePath(bipDv.path);\n if (!bipDv.pubkey.equals(node.publicKey)) {\n throw new Error('pubkey did not match bip32Derivation');\n }\n return node;\n });\n return signers;\n}\nfunction getSortedSigs(script, partialSig) {\n const p2ms = payments.p2ms({ output: script });\n // for each pubkey in order of p2ms script\n return p2ms.pubkeys\n .map(pk => {\n // filter partialSig array by pubkey being equal\n return (\n partialSig.filter(ps => {\n return ps.pubkey.equals(pk);\n })[0] || {}\n ).signature;\n // Any pubkey without a match will return undefined\n // this last filter removes all the undefined items in the array.\n })\n .filter(v => !!v);\n}\nfunction scriptWitnessToWitnessStack(buffer) {\n let offset = 0;\n function readSlice(n) {\n offset += n;\n return buffer.slice(offset - n, offset);\n }\n function readVarInt() {\n const vi = varuint.decode(buffer, offset);\n offset += varuint.decode.bytes;\n return vi;\n }\n function readVarSlice() {\n return readSlice(readVarInt());\n }\n function readVector() {\n const count = readVarInt();\n const vector = [];\n for (let i = 0; i < count; i++) vector.push(readVarSlice());\n return vector;\n }\n return readVector();\n}\nfunction sighashTypeToString(sighashType) {\n let text =\n sighashType & transaction_1.Transaction.SIGHASH_ANYONECANPAY\n ? 'SIGHASH_ANYONECANPAY | '\n : '';\n const sigMod = sighashType & 0x1f;\n switch (sigMod) {\n case transaction_1.Transaction.SIGHASH_ALL:\n text += 'SIGHASH_ALL';\n break;\n case transaction_1.Transaction.SIGHASH_SINGLE:\n text += 'SIGHASH_SINGLE';\n break;\n case transaction_1.Transaction.SIGHASH_NONE:\n text += 'SIGHASH_NONE';\n break;\n }\n return text;\n}\nfunction addNonWitnessTxCache(cache, input, inputIndex) {\n cache.__NON_WITNESS_UTXO_BUF_CACHE[inputIndex] = input.nonWitnessUtxo;\n const tx = transaction_1.Transaction.fromBuffer(input.nonWitnessUtxo);\n cache.__NON_WITNESS_UTXO_TX_CACHE[inputIndex] = tx;\n const self = cache;\n const selfIndex = inputIndex;\n delete input.nonWitnessUtxo;\n Object.defineProperty(input, 'nonWitnessUtxo', {\n enumerable: true,\n get() {\n const buf = self.__NON_WITNESS_UTXO_BUF_CACHE[selfIndex];\n const txCache = self.__NON_WITNESS_UTXO_TX_CACHE[selfIndex];\n if (buf !== undefined) {\n return buf;\n } else {\n const newBuf = txCache.toBuffer();\n self.__NON_WITNESS_UTXO_BUF_CACHE[selfIndex] = newBuf;\n return newBuf;\n }\n },\n set(data) {\n self.__NON_WITNESS_UTXO_BUF_CACHE[selfIndex] = data;\n },\n });\n}\nfunction inputFinalizeGetAmts(inputs, tx, cache, mustFinalize) {\n let inputAmount = 0;\n inputs.forEach((input, idx) => {\n if (mustFinalize && input.finalScriptSig)\n tx.ins[idx].script = input.finalScriptSig;\n if (mustFinalize && input.finalScriptWitness) {\n tx.ins[idx].witness = scriptWitnessToWitnessStack(\n input.finalScriptWitness,\n );\n }\n if (input.witnessUtxo) {\n inputAmount += input.witnessUtxo.value;\n } else if (input.nonWitnessUtxo) {\n const nwTx = nonWitnessUtxoTxFromCache(cache, input, idx);\n const vout = tx.ins[idx].index;\n const out = nwTx.outs[vout];\n inputAmount += out.value;\n }\n });\n const outputAmount = tx.outs.reduce((total, o) => total + o.value, 0);\n const fee = inputAmount - outputAmount;\n if (fee < 0) {\n throw new Error('Outputs are spending more than Inputs');\n }\n const bytes = tx.virtualSize();\n cache.__FEE = fee;\n cache.__EXTRACTED_TX = tx;\n cache.__FEE_RATE = Math.floor(fee / bytes);\n}\nfunction nonWitnessUtxoTxFromCache(cache, input, inputIndex) {\n const c = cache.__NON_WITNESS_UTXO_TX_CACHE;\n if (!c[inputIndex]) {\n addNonWitnessTxCache(cache, input, inputIndex);\n }\n return c[inputIndex];\n}\nfunction getScriptFromUtxo(inputIndex, input, cache) {\n const { script } = getScriptAndAmountFromUtxo(inputIndex, input, cache);\n return script;\n}\nfunction getScriptAndAmountFromUtxo(inputIndex, input, cache) {\n if (input.witnessUtxo !== undefined) {\n return {\n script: input.witnessUtxo.script,\n value: input.witnessUtxo.value,\n };\n } else if (input.nonWitnessUtxo !== undefined) {\n const nonWitnessUtxoTx = nonWitnessUtxoTxFromCache(\n cache,\n input,\n inputIndex,\n );\n const o = nonWitnessUtxoTx.outs[cache.__TX.ins[inputIndex].index];\n return { script: o.script, value: o.value };\n } else {\n throw new Error(\"Can't find pubkey in input without Utxo data\");\n }\n}\nfunction pubkeyInInput(pubkey, input, inputIndex, cache) {\n const script = getScriptFromUtxo(inputIndex, input, cache);\n const { meaningfulScript } = getMeaningfulScript(\n script,\n inputIndex,\n 'input',\n input.redeemScript,\n input.witnessScript,\n );\n return (0, psbtutils_1.pubkeyInScript)(pubkey, meaningfulScript);\n}\nfunction pubkeyInOutput(pubkey, output, outputIndex, cache) {\n const script = cache.__TX.outs[outputIndex].script;\n const { meaningfulScript } = getMeaningfulScript(\n script,\n outputIndex,\n 'output',\n output.redeemScript,\n output.witnessScript,\n );\n return (0, psbtutils_1.pubkeyInScript)(pubkey, meaningfulScript);\n}\nfunction redeemFromFinalScriptSig(finalScript) {\n if (!finalScript) return;\n const decomp = bscript.decompile(finalScript);\n if (!decomp) return;\n const lastItem = decomp[decomp.length - 1];\n if (\n !Buffer.isBuffer(lastItem) ||\n isPubkeyLike(lastItem) ||\n isSigLike(lastItem)\n )\n return;\n const sDecomp = bscript.decompile(lastItem);\n if (!sDecomp) return;\n return lastItem;\n}\nfunction redeemFromFinalWitnessScript(finalScript) {\n if (!finalScript) return;\n const decomp = scriptWitnessToWitnessStack(finalScript);\n const lastItem = decomp[decomp.length - 1];\n if (isPubkeyLike(lastItem)) return;\n const sDecomp = bscript.decompile(lastItem);\n if (!sDecomp) return;\n return lastItem;\n}\nfunction compressPubkey(pubkey) {\n if (pubkey.length === 65) {\n const parity = pubkey[64] & 1;\n const newKey = pubkey.slice(0, 33);\n newKey[0] = 2 | parity;\n return newKey;\n }\n return pubkey.slice();\n}\nfunction isPubkeyLike(buf) {\n return buf.length === 33 && bscript.isCanonicalPubKey(buf);\n}\nfunction isSigLike(buf) {\n return bscript.isCanonicalScriptSignature(buf);\n}\nfunction getMeaningfulScript(\n script,\n index,\n ioType,\n redeemScript,\n witnessScript,\n) {\n const isP2SH = (0, psbtutils_1.isP2SHScript)(script);\n const isP2SHP2WSH =\n isP2SH && redeemScript && (0, psbtutils_1.isP2WSHScript)(redeemScript);\n const isP2WSH = (0, psbtutils_1.isP2WSHScript)(script);\n if (isP2SH && redeemScript === undefined)\n throw new Error('scriptPubkey is P2SH but redeemScript missing');\n if ((isP2WSH || isP2SHP2WSH) && witnessScript === undefined)\n throw new Error(\n 'scriptPubkey or redeemScript is P2WSH but witnessScript missing',\n );\n let meaningfulScript;\n if (isP2SHP2WSH) {\n meaningfulScript = witnessScript;\n checkRedeemScript(index, script, redeemScript, ioType);\n checkWitnessScript(index, redeemScript, witnessScript, ioType);\n checkInvalidP2WSH(meaningfulScript);\n } else if (isP2WSH) {\n meaningfulScript = witnessScript;\n checkWitnessScript(index, script, witnessScript, ioType);\n checkInvalidP2WSH(meaningfulScript);\n } else if (isP2SH) {\n meaningfulScript = redeemScript;\n checkRedeemScript(index, script, redeemScript, ioType);\n } else {\n meaningfulScript = script;\n }\n return {\n meaningfulScript,\n type: isP2SHP2WSH\n ? 'p2sh-p2wsh'\n : isP2SH\n ? 'p2sh'\n : isP2WSH\n ? 'p2wsh'\n : 'raw',\n };\n}\nfunction checkInvalidP2WSH(script) {\n if (\n (0, psbtutils_1.isP2WPKH)(script) ||\n (0, psbtutils_1.isP2SHScript)(script)\n ) {\n throw new Error('P2WPKH or P2SH can not be contained within P2WSH');\n }\n}\nfunction classifyScript(script) {\n if ((0, psbtutils_1.isP2WPKH)(script)) return 'witnesspubkeyhash';\n if ((0, psbtutils_1.isP2PKH)(script)) return 'pubkeyhash';\n if ((0, psbtutils_1.isP2MS)(script)) return 'multisig';\n if ((0, psbtutils_1.isP2PK)(script)) return 'pubkey';\n return 'nonstandard';\n}\nfunction range(n) {\n return [...Array(n).keys()];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcHNidC5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsWUFBWTtBQUNaLGlCQUFpQixtQkFBTyxDQUFDLHFEQUFRO0FBQ2pDLGdCQUFnQixtQkFBTyxDQUFDLDBGQUFpQztBQUN6RCxnQkFBZ0IsbUJBQU8sQ0FBQyxvRUFBc0I7QUFDOUMsa0JBQWtCLG1CQUFPLENBQUMsOERBQVc7QUFDckMsc0JBQXNCLG1CQUFPLENBQUMsc0VBQWU7QUFDN0MsbUJBQW1CLG1CQUFPLENBQUMsZ0VBQVk7QUFDdkMsaUJBQWlCLG1CQUFPLENBQUMsc0VBQVk7QUFDckMsaUJBQWlCLG1CQUFPLENBQUMsOEVBQW1CO0FBQzVDLGdCQUFnQixtQkFBTyxDQUFDLDREQUFVO0FBQ2xDLHNCQUFzQixtQkFBTyxDQUFDLHNFQUFlO0FBQzdDLGlCQUFpQixtQkFBTyxDQUFDLHNFQUFlO0FBQ3hDLG9CQUFvQixtQkFBTyxDQUFDLDRFQUFrQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLG1CQUFtQjtBQUNqRTtBQUNBLHdDQUF3QyxtQkFBbUI7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkMsbUJBQW1CLE1BQU07QUFDekI7QUFDQTtBQUNBLGdDQUFnQztBQUNoQyxtQkFBbUIsTUFBTTtBQUN6QjtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksVUFBVTtBQUN0QjtBQUNBLGNBQWMsVUFBVTtBQUN4QjtBQUNBLG1DQUFtQyxn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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixNQUFNO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxNQUFNO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxnQkFBZ0I7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLE1BQU07QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL3BzYnQuanM/NDVlZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Qc2J0ID0gdm9pZCAwO1xuY29uc3QgYmlwMTc0XzEgPSByZXF1aXJlKCdiaXAxNzQnKTtcbmNvbnN0IHZhcnVpbnQgPSByZXF1aXJlKCdiaXAxNzQvc3JjL2xpYi9jb252ZXJ0ZXIvdmFyaW50Jyk7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZSgnYmlwMTc0L3NyYy9saWIvdXRpbHMnKTtcbmNvbnN0IGFkZHJlc3NfMSA9IHJlcXVpcmUoJy4vYWRkcmVzcycpO1xuY29uc3QgYnVmZmVydXRpbHNfMSA9IHJlcXVpcmUoJy4vYnVmZmVydXRpbHMnKTtcbmNvbnN0IG5ldHdvcmtzXzEgPSByZXF1aXJlKCcuL25ldHdvcmtzJyk7XG5jb25zdCBwYXltZW50cyA9IHJlcXVpcmUoJy4vcGF5bWVudHMnKTtcbmNvbnN0IGJpcDM0MV8xID0gcmVxdWlyZSgnLi9wYXltZW50cy9iaXAzNDEnKTtcbmNvbnN0IGJzY3JpcHQgPSByZXF1aXJlKCcuL3NjcmlwdCcpO1xuY29uc3QgdHJhbnNhY3Rpb25fMSA9IHJlcXVpcmUoJy4vdHJhbnNhY3Rpb24nKTtcbmNvbnN0IGJpcDM3MV8xID0gcmVxdWlyZSgnLi9wc2J0L2JpcDM3MScpO1xuY29uc3QgcHNidHV0aWxzXzEgPSByZXF1aXJlKCcuL3BzYnQvcHNidHV0aWxzJyk7XG4vKipcbiAqIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBhcmd1bWVudHMgZm9yIGEgUHNidCBpbnN0YW5jZS5cbiAqL1xuY29uc3QgREVGQVVMVF9PUFRTID0ge1xuICAvKipcbiAgICogQSBiaXRjb2luanMgTmV0d29yayBvYmplY3QuIFRoaXMgaXMgb25seSB1c2VkIGlmIHlvdSBwYXNzIGFuIGBhZGRyZXNzYFxuICAgKiBwYXJhbWV0ZXIgdG8gYWRkT3V0cHV0LiBPdGhlcndpc2UgaXQgaXMgbm90IG5lZWRlZCBhbmQgY2FuIGJlIGxlZnQgZGVmYXVsdC5cbiAgICovXG4gIG5ldHdvcms6IG5ldHdvcmtzXzEuYml0Y29pbixcbiAgLyoqXG4gICAqIFdoZW4gZXh0cmFjdFRyYW5zYWN0aW9uIGlzIGNhbGxlZCwgdGhlIGZlZSByYXRlIGlzIGNoZWNrZWQuXG4gICAqIFRISVMgSVMgTk9UIFRPIEJFIFJFTElFRCBPTi5cbiAgICogSXQgaXMgb25seSBoZXJlIGFzIGEgbGFzdCBkaXRjaCBlZmZvcnQgdG8gcHJldmVudCBzZW5kaW5nIGEgNTAwIEJUQyBmZWUgZXRjLlxuICAgKi9cbiAgbWF4aW11bUZlZVJhdGU6IDUwMDAsIC8vIHNhdG9zaGkgcGVyIGJ5dGVcbn07XG4vKipcbiAqIFBzYnQgY2xhc3MgY2FuIHBhcnNlIGFuZCBnZW5lcmF0ZSBhIFBTQlQgYmluYXJ5IGJhc2VkIG9mZiBvZiB0aGUgQklQMTc0LlxuICogVGhlcmUgYXJlIDYgcm9sZXMgdGhhdCB0aGlzIGNsYXNzIGZ1bGZpbGxzLiAoRXhwbGFpbmVkIGluIEJJUDE3NClcbiAqXG4gKiBDcmVhdG9yOiBUaGlzIGNhbiBiZSBkb25lIHdpdGggYG5ldyBQc2J0KClgXG4gKlxuICogVXBkYXRlcjogVGhpcyBjYW4gYmUgZG9uZSB3aXRoIGBwc2J0LmFkZElucHV0KGlucHV0KWAsIGBwc2J0LmFkZElucHV0cyhpbnB1dHMpYCxcbiAqICAgYHBzYnQuYWRkT3V0cHV0KG91dHB1dClgLCBgcHNidC5hZGRPdXRwdXRzKG91dHB1dHMpYCB3aGVuIHlvdSBhcmUgbG9va2luZyB0b1xuICogICBhZGQgbmV3IGlucHV0cyBhbmQgb3V0cHV0cyB0byB0aGUgUFNCVCwgYW5kIGBwc2J0LnVwZGF0ZUdsb2JhbChpdGVtT2JqZWN0KWAsXG4gKiAgIGBwc2J0LnVwZGF0ZUlucHV0KGl0ZW1PYmplY3QpYCwgYHBzYnQudXBkYXRlT3V0cHV0KGl0ZW1PYmplY3QpYFxuICogICBhZGRJbnB1dCByZXF1aXJlcyBoYXNoOiBCdWZmZXIgfCBzdHJpbmc7IGFuZCBpbmRleDogbnVtYmVyOyBhcyBhdHRyaWJ1dGVzXG4gKiAgIGFuZCBjYW4gYWxzbyBpbmNsdWRlIGFueSBhdHRyaWJ1dGVzIHRoYXQgYXJlIHVzZWQgaW4gdXBkYXRlSW5wdXQgbWV0aG9kLlxuICogICBhZGRPdXRwdXQgcmVxdWlyZXMgc2NyaXB0OiBCdWZmZXI7IGFuZCB2YWx1ZTogbnVtYmVyOyBhbmQgbGlrZXdpc2UgY2FuIGluY2x1ZGVcbiAqICAgZGF0YSBmb3IgdXBkYXRlT3V0cHV0LlxuICogICBGb3IgYSBsaXN0IG9mIHdoYXQgYXR0cmlidXRlcyBzaG91bGQgYmUgd2hhdCB0eXBlcy4gQ2hlY2sgdGhlIGJpcDE3NCBsaWJyYXJ5LlxuICogICBBbHNvLCBjaGVjayB0aGUgaW50ZWdyYXRpb24gdGVzdHMgZm9yIHNvbWUgZXhhbXBsZXMgb2YgdXNhZ2UuXG4gKlxuICogU2lnbmVyOiBUaGVyZSBhcmUgYSBmZXcgbWV0aG9kcy4gc2lnbkFsbElucHV0cyBhbmQgc2lnbkFsbElucHV0c0FzeW5jLCB3aGljaCB3aWxsIHNlYXJjaCBhbGwgaW5wdXRcbiAqICAgaW5mb3JtYXRpb24gZm9yIHlvdXIgcHVia2V5IG9yIHB1YmtleWhhc2gsIGFuZCBvbmx5IHNpZ24gaW5wdXRzIHdoZXJlIGl0IGZpbmRzXG4gKiAgIHlvdXIgaW5mby4gT3IgeW91IGNhbiBleHBsaWNpdGx5IHNpZ24gYSBzcGVjaWZpYyBpbnB1dCB3aXRoIHNpZ25JbnB1dCBhbmRcbiAqICAgc2lnbklucHV0QXN5bmMuIEZvciB0aGUgYXN5bmMgbWV0aG9kcyB5b3UgY2FuIGNyZWF0ZSBhIFNpZ25lckFzeW5jIG9iamVjdFxuICogICBhbmQgdXNlIHNvbWV0aGluZyBsaWtlIGEgaGFyZHdhcmUgd2FsbGV0IHRvIHNpZ24gd2l0aC4gKFlvdSBtdXN0IGltcGxlbWVudCB0aGlzKVxuICpcbiAqIENvbWJpbmVyOiBwc2J0cyBjYW4gYmUgY29tYmluZWQgZWFzaWx5IHdpdGggYHBzYnQuY29tYmluZShwc2J0MiwgcHNidDMsIHBzYnQ0IC4uLilgXG4gKiAgIHRoZSBwc2J0IGNhbGxpbmcgY29tYmluZSB3aWxsIGFsd2F5cyBoYXZlIHByZWNlZGVuY2Ugd2hlbiBhIGNvbmZsaWN0IG9jY3Vycy5cbiAqICAgQ29tYmluZSBjaGVja3MgaWYgdGhlIGludGVybmFsIGJpdGNvaW4gdHJhbnNhY3Rpb24gaXMgdGhlIHNhbWUsIHNvIGJlIHN1cmUgdGhhdFxuICogICBhbGwgc2VxdWVuY2VzLCB2ZXJzaW9uLCBsb2NrdGltZSwgZXRjLiBhcmUgdGhlIHNhbWUgYmVmb3JlIGNvbWJpbmluZy5cbiAqXG4gKiBJbnB1dCBGaW5hbGl6ZXI6IFRoaXMgcm9sZSBpcyBmYWlybHkgaW1wb3J0YW50LiBOb3Qgb25seSBkb2VzIGl0IG5lZWQgdG8gY29uc3RydWN0XG4gKiAgIHRoZSBpbnB1dCBzY3JpcHRTaWdzIGFuZCB3aXRuZXNzZXMsIGJ1dCBpdCBTSE9VTEQgdmVyaWZ5IHRoZSBzaWduYXR1cmVzIGV0Yy5cbiAqICAgQmVmb3JlIHJ1bm5pbmcgYHBzYnQuZmluYWxpemVBbGxJbnB1dHMoKWAgcGxlYXNlIHJ1biBgcHNidC52YWxpZGF0ZVNpZ25hdHVyZXNPZkFsbElucHV0cygpYFxuICogICBSdW5uaW5nIGFueSBmaW5hbGl6ZSBtZXRob2Qgd2lsbCBkZWxldGUgYW55IGRhdGEgaW4gdGhlIGlucHV0KHMpIHRoYXQgYXJlIG5vIGxvbmdlclxuICogICBuZWVkZWQgZHVlIHRvIHRoZSBmaW5hbGl6ZWQgc2NyaXB0cyBjb250YWluaW5nIHRoZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBUcmFuc2FjdGlvbiBFeHRyYWN0b3I6IFRoaXMgcm9sZSB3aWxsIHBlcmZvcm0gc29tZSBjaGVja3MgYmVmb3JlIHJldHVybmluZyBhXG4gKiAgIFRyYW5zYWN0aW9uIG9iamVjdC4gU3VjaCBhcyBmZWUgcmF0ZSBub3QgYmVpbmcgbGFyZ2VyIHRoYW4gbWF4aW11bUZlZVJhdGUgZXRjLlxuICovXG5jbGFzcyBQc2J0IHtcbiAgc3RhdGljIGZyb21CYXNlNjQoZGF0YSwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YSwgJ2Jhc2U2NCcpO1xuICAgIHJldHVybiB0aGlzLmZyb21CdWZmZXIoYnVmZmVyLCBvcHRzKTtcbiAgfVxuICBzdGF0aWMgZnJvbUhleChkYXRhLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShkYXRhLCAnaGV4Jyk7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUJ1ZmZlcihidWZmZXIsIG9wdHMpO1xuICB9XG4gIHN0YXRpYyBmcm9tQnVmZmVyKGJ1ZmZlciwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgcHNidEJhc2UgPSBiaXAxNzRfMS5Qc2J0LmZyb21CdWZmZXIoYnVmZmVyLCB0cmFuc2FjdGlvbkZyb21CdWZmZXIpO1xuICAgIGNvbnN0IHBzYnQgPSBuZXcgUHNidChvcHRzLCBwc2J0QmFzZSk7XG4gICAgY2hlY2tUeEZvckR1cGVJbnMocHNidC5fX0NBQ0hFLl9fVFgsIHBzYnQuX19DQUNIRSk7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9LCBkYXRhID0gbmV3IGJpcDE3NF8xLlBzYnQobmV3IFBzYnRUcmFuc2FjdGlvbigpKSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgLy8gc2V0IGRlZmF1bHRzXG4gICAgdGhpcy5vcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRTLCBvcHRzKTtcbiAgICB0aGlzLl9fQ0FDSEUgPSB7XG4gICAgICBfX05PTl9XSVRORVNTX1VUWE9fVFhfQ0FDSEU6IFtdLFxuICAgICAgX19OT05fV0lUTkVTU19VVFhPX0JVRl9DQUNIRTogW10sXG4gICAgICBfX1RYX0lOX0NBQ0hFOiB7fSxcbiAgICAgIF9fVFg6IHRoaXMuZGF0YS5nbG9iYWxNYXAudW5zaWduZWRUeC50eCxcbiAgICAgIC8vIFBzYnQncyBwcmVkZWNlc3NvciAoVHJhbnNhY3Rpb25CdWlsZGVyIC0gbm93IHJlbW92ZWQpIGJlaGF2aW9yXG4gICAgICAvLyB3YXMgdG8gbm90IGNvbmZpcm0gaW5wdXQgdmFsdWVzICBiZWZvcmUgc2lnbmluZy5cbiAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGhpZ2hseSBlbmNvdXJhZ2UgcGVvcGxlIHRvIGdldFxuICAgICAgLy8gdGhlIGZ1bGwgcGFyZW50IHRyYW5zYWN0aW9uIHRvIHZlcmlmeSB2YWx1ZXMsIHRoZSBhYmlsaXR5IHRvXG4gICAgICAvLyBzaWduIG5vbi1zZWd3aXQgaW5wdXRzIHdpdGhvdXQgdGhlIGZ1bGwgdHJhbnNhY3Rpb24gd2FzIG9mdGVuXG4gICAgICAvLyByZXF1ZXN0ZWQuIFNvIHRoZSBvbmx5IHdheSB0byBhY3RpdmF0ZSBpcyB0byB1c2UgQHRzLWlnbm9yZS5cbiAgICAgIC8vIFdlIHdpbGwgZGlzYWJsZSBleHBvcnRpbmcgdGhlIFBzYnQgd2hlbiB1bnNhZmUgc2lnbiBpcyBhY3RpdmUuXG4gICAgICAvLyBiZWNhdXNlIGl0IGlzIG5vdCBCSVAxNzQgY29tcGxpYW50LlxuICAgICAgX19VTlNBRkVfU0lHTl9OT05TRUdXSVQ6IGZhbHNlLFxuICAgIH07XG4gICAgaWYgKHRoaXMuZGF0YS5pbnB1dHMubGVuZ3RoID09PSAwKSB0aGlzLnNldFZlcnNpb24oMik7XG4gICAgLy8gTWFrZSBkYXRhIGhpZGRlbiB3aGVuIGVudW1lcmF0aW5nXG4gICAgY29uc3QgZHBldyA9IChvYmosIGF0dHIsIGVudW1lcmFibGUsIHdyaXRhYmxlKSA9PlxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgYXR0ciwge1xuICAgICAgICBlbnVtZXJhYmxlLFxuICAgICAgICB3cml0YWJsZSxcbiAgICAgIH0pO1xuICAgIGRwZXcodGhpcywgJ19fQ0FDSEUnLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZHBldyh0aGlzLCAnb3B0cycsIGZhbHNlLCB0cnVlKTtcbiAgfVxuICBnZXQgaW5wdXRDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmlucHV0cy5sZW5ndGg7XG4gIH1cbiAgZ2V0IHZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX19DQUNIRS5fX1RYLnZlcnNpb247XG4gIH1cbiAgc2V0IHZlcnNpb24odmVyc2lvbikge1xuICAgIHRoaXMuc2V0VmVyc2lvbih2ZXJzaW9uKTtcbiAgfVxuICBnZXQgbG9ja3RpbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX19DQUNIRS5fX1RYLmxvY2t0aW1lO1xuICB9XG4gIHNldCBsb2NrdGltZShsb2NrdGltZSkge1xuICAgIHRoaXMuc2V0TG9ja3RpbWUobG9ja3RpbWUpO1xuICB9XG4gIGdldCB0eElucHV0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fX0NBQ0hFLl9fVFguaW5zLm1hcChpbnB1dCA9PiAoe1xuICAgICAgaGFzaDogKDAsIGJ1ZmZlcnV0aWxzXzEuY2xvbmVCdWZmZXIpKGlucHV0Lmhhc2gpLFxuICAgICAgaW5kZXg6IGlucHV0LmluZGV4LFxuICAgICAgc2VxdWVuY2U6IGlucHV0LnNlcXVlbmNlLFxuICAgIH0pKTtcbiAgfVxuICBnZXQgdHhPdXRwdXRzKCkge1xuICAgIHJldHVybiB0aGlzLl9fQ0FDSEUuX19UWC5vdXRzLm1hcChvdXRwdXQgPT4ge1xuICAgICAgbGV0IGFkZHJlc3M7XG4gICAgICB0cnkge1xuICAgICAgICBhZGRyZXNzID0gKDAsIGFkZHJlc3NfMS5mcm9tT3V0cHV0U2NyaXB0KShcbiAgICAgICAgICBvdXRwdXQuc2NyaXB0LFxuICAgICAgICAgIHRoaXMub3B0cy5uZXR3b3JrLFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjcmlwdDogKDAsIGJ1ZmZlcnV0aWxzXzEuY2xvbmVCdWZmZXIpKG91dHB1dC5zY3JpcHQpLFxuICAgICAgICB2YWx1ZTogb3V0cHV0LnZhbHVlLFxuICAgICAgICBhZGRyZXNzLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBjb21iaW5lKC4uLnRob3NlKSB7XG4gICAgdGhpcy5kYXRhLmNvbWJpbmUoLi4udGhvc2UubWFwKG8gPT4gby5kYXRhKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgY2xvbmUoKSB7XG4gICAgLy8gVE9ETzogbW9yZSBlZmZpY2llbnQgY2xvbmluZ1xuICAgIGNvbnN0IHJlcyA9IFBzYnQuZnJvbUJ1ZmZlcih0aGlzLmRhdGEudG9CdWZmZXIoKSk7XG4gICAgcmVzLm9wdHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3B0cykpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgc2V0TWF4aW11bUZlZVJhdGUoc2F0b3NoaVBlckJ5dGUpIHtcbiAgICBjaGVjazMyQml0KHNhdG9zaGlQZXJCeXRlKTsgLy8gNDIuOSBCVEMgcGVyIGJ5dGUgSVMgZXhjZXNzaXZlLi4uIHNvIHRocm93XG4gICAgdGhpcy5vcHRzLm1heGltdW1GZWVSYXRlID0gc2F0b3NoaVBlckJ5dGU7XG4gIH1cbiAgc2V0VmVyc2lvbih2ZXJzaW9uKSB7XG4gICAgY2hlY2szMkJpdCh2ZXJzaW9uKTtcbiAgICBjaGVja0lucHV0c0ZvclBhcnRpYWxTaWcodGhpcy5kYXRhLmlucHV0cywgJ3NldFZlcnNpb24nKTtcbiAgICBjb25zdCBjID0gdGhpcy5fX0NBQ0hFO1xuICAgIGMuX19UWC52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICBjLl9fRVhUUkFDVEVEX1RYID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHNldExvY2t0aW1lKGxvY2t0aW1lKSB7XG4gICAgY2hlY2szMkJpdChsb2NrdGltZSk7XG4gICAgY2hlY2tJbnB1dHNGb3JQYXJ0aWFsU2lnKHRoaXMuZGF0YS5pbnB1dHMsICdzZXRMb2NrdGltZScpO1xuICAgIGNvbnN0IGMgPSB0aGlzLl9fQ0FDSEU7XG4gICAgYy5fX1RYLmxvY2t0aW1lID0gbG9ja3RpbWU7XG4gICAgYy5fX0VYVFJBQ1RFRF9UWCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBzZXRJbnB1dFNlcXVlbmNlKGlucHV0SW5kZXgsIHNlcXVlbmNlKSB7XG4gICAgY2hlY2szMkJpdChzZXF1ZW5jZSk7XG4gICAgY2hlY2tJbnB1dHNGb3JQYXJ0aWFsU2lnKHRoaXMuZGF0YS5pbnB1dHMsICdzZXRJbnB1dFNlcXVlbmNlJyk7XG4gICAgY29uc3QgYyA9IHRoaXMuX19DQUNIRTtcbiAgICBpZiAoYy5fX1RYLmlucy5sZW5ndGggPD0gaW5wdXRJbmRleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBpbmRleCB0b28gaGlnaCcpO1xuICAgIH1cbiAgICBjLl9fVFguaW5zW2lucHV0SW5kZXhdLnNlcXVlbmNlID0gc2VxdWVuY2U7XG4gICAgYy5fX0VYVFJBQ1RFRF9UWCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhZGRJbnB1dHMoaW5wdXREYXRhcykge1xuICAgIGlucHV0RGF0YXMuZm9yRWFjaChpbnB1dERhdGEgPT4gdGhpcy5hZGRJbnB1dChpbnB1dERhdGEpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhZGRJbnB1dChpbnB1dERhdGEpIHtcbiAgICBpZiAoXG4gICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSB8fFxuICAgICAgIWlucHV0RGF0YSB8fFxuICAgICAgaW5wdXREYXRhLmhhc2ggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgaW5wdXREYXRhLmluZGV4ID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgYXJndW1lbnRzIGZvciBQc2J0LmFkZElucHV0LiBgICtcbiAgICAgICAgICBgUmVxdWlyZXMgc2luZ2xlIG9iamVjdCB3aXRoIGF0IGxlYXN0IFtoYXNoXSBhbmQgW2luZGV4XWAsXG4gICAgICApO1xuICAgIH1cbiAgICAoMCwgYmlwMzcxXzEuY2hlY2tUYXByb290SW5wdXRGaWVsZHMpKGlucHV0RGF0YSwgaW5wdXREYXRhLCAnYWRkSW5wdXQnKTtcbiAgICBjaGVja0lucHV0c0ZvclBhcnRpYWxTaWcodGhpcy5kYXRhLmlucHV0cywgJ2FkZElucHV0Jyk7XG4gICAgaWYgKGlucHV0RGF0YS53aXRuZXNzU2NyaXB0KSBjaGVja0ludmFsaWRQMldTSChpbnB1dERhdGEud2l0bmVzc1NjcmlwdCk7XG4gICAgY29uc3QgYyA9IHRoaXMuX19DQUNIRTtcbiAgICB0aGlzLmRhdGEuYWRkSW5wdXQoaW5wdXREYXRhKTtcbiAgICBjb25zdCB0eEluID0gYy5fX1RYLmluc1tjLl9fVFguaW5zLmxlbmd0aCAtIDFdO1xuICAgIGNoZWNrVHhJbnB1dENhY2hlKGMsIHR4SW4pO1xuICAgIGNvbnN0IGlucHV0SW5kZXggPSB0aGlzLmRhdGEuaW5wdXRzLmxlbmd0aCAtIDE7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICAgIGlmIChpbnB1dC5ub25XaXRuZXNzVXR4bykge1xuICAgICAgYWRkTm9uV2l0bmVzc1R4Q2FjaGUodGhpcy5fX0NBQ0hFLCBpbnB1dCwgaW5wdXRJbmRleCk7XG4gICAgfVxuICAgIGMuX19GRUUgPSB1bmRlZmluZWQ7XG4gICAgYy5fX0ZFRV9SQVRFID0gdW5kZWZpbmVkO1xuICAgIGMuX19FWFRSQUNURURfVFggPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgYWRkT3V0cHV0cyhvdXRwdXREYXRhcykge1xuICAgIG91dHB1dERhdGFzLmZvckVhY2gob3V0cHV0RGF0YSA9PiB0aGlzLmFkZE91dHB1dChvdXRwdXREYXRhKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgYWRkT3V0cHV0KG91dHB1dERhdGEpIHtcbiAgICBpZiAoXG4gICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSB8fFxuICAgICAgIW91dHB1dERhdGEgfHxcbiAgICAgIG91dHB1dERhdGEudmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgKG91dHB1dERhdGEuYWRkcmVzcyA9PT0gdW5kZWZpbmVkICYmIG91dHB1dERhdGEuc2NyaXB0ID09PSB1bmRlZmluZWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgUHNidC5hZGRPdXRwdXQuIGAgK1xuICAgICAgICAgIGBSZXF1aXJlcyBzaW5nbGUgb2JqZWN0IHdpdGggYXQgbGVhc3QgW3NjcmlwdCBvciBhZGRyZXNzXSBhbmQgW3ZhbHVlXWAsXG4gICAgICApO1xuICAgIH1cbiAgICBjaGVja0lucHV0c0ZvclBhcnRpYWxTaWcodGhpcy5kYXRhLmlucHV0cywgJ2FkZE91dHB1dCcpO1xuICAgIGNvbnN0IHsgYWRkcmVzcyB9ID0gb3V0cHV0RGF0YTtcbiAgICBpZiAodHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB7IG5ldHdvcmsgfSA9IHRoaXMub3B0cztcbiAgICAgIGNvbnN0IHNjcmlwdCA9ICgwLCBhZGRyZXNzXzEudG9PdXRwdXRTY3JpcHQpKGFkZHJlc3MsIG5ldHdvcmspO1xuICAgICAgb3V0cHV0RGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIG91dHB1dERhdGEsIHsgc2NyaXB0IH0pO1xuICAgIH1cbiAgICAoMCwgYmlwMzcxXzEuY2hlY2tUYXByb290T3V0cHV0RmllbGRzKShvdXRwdXREYXRhLCBvdXRwdXREYXRhLCAnYWRkT3V0cHV0Jyk7XG4gICAgY29uc3QgYyA9IHRoaXMuX19DQUNIRTtcbiAgICB0aGlzLmRhdGEuYWRkT3V0cHV0KG91dHB1dERhdGEpO1xuICAgIGMuX19GRUUgPSB1bmRlZmluZWQ7XG4gICAgYy5fX0ZFRV9SQVRFID0gdW5kZWZpbmVkO1xuICAgIGMuX19FWFRSQUNURURfVFggPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZXh0cmFjdFRyYW5zYWN0aW9uKGRpc2FibGVGZWVDaGVjaykge1xuICAgIGlmICghdGhpcy5kYXRhLmlucHV0cy5ldmVyeShpc0ZpbmFsaXplZCkpIHRocm93IG5ldyBFcnJvcignTm90IGZpbmFsaXplZCcpO1xuICAgIGNvbnN0IGMgPSB0aGlzLl9fQ0FDSEU7XG4gICAgaWYgKCFkaXNhYmxlRmVlQ2hlY2spIHtcbiAgICAgIGNoZWNrRmVlcyh0aGlzLCBjLCB0aGlzLm9wdHMpO1xuICAgIH1cbiAgICBpZiAoYy5fX0VYVFJBQ1RFRF9UWCkgcmV0dXJuIGMuX19FWFRSQUNURURfVFg7XG4gICAgY29uc3QgdHggPSBjLl9fVFguY2xvbmUoKTtcbiAgICBpbnB1dEZpbmFsaXplR2V0QW10cyh0aGlzLmRhdGEuaW5wdXRzLCB0eCwgYywgdHJ1ZSk7XG4gICAgcmV0dXJuIHR4O1xuICB9XG4gIGdldEZlZVJhdGUoKSB7XG4gICAgcmV0dXJuIGdldFR4Q2FjaGVWYWx1ZShcbiAgICAgICdfX0ZFRV9SQVRFJyxcbiAgICAgICdmZWUgcmF0ZScsXG4gICAgICB0aGlzLmRhdGEuaW5wdXRzLFxuICAgICAgdGhpcy5fX0NBQ0hFLFxuICAgICk7XG4gIH1cbiAgZ2V0RmVlKCkge1xuICAgIHJldHVybiBnZXRUeENhY2hlVmFsdWUoJ19fRkVFJywgJ2ZlZScsIHRoaXMuZGF0YS5pbnB1dHMsIHRoaXMuX19DQUNIRSk7XG4gIH1cbiAgZmluYWxpemVBbGxJbnB1dHMoKSB7XG4gICAgKDAsIHV0aWxzXzEuY2hlY2tGb3JJbnB1dCkodGhpcy5kYXRhLmlucHV0cywgMCk7IC8vIG1ha2luZyBzdXJlIHdlIGhhdmUgYXQgbGVhc3Qgb25lXG4gICAgcmFuZ2UodGhpcy5kYXRhLmlucHV0cy5sZW5ndGgpLmZvckVhY2goaWR4ID0+IHRoaXMuZmluYWxpemVJbnB1dChpZHgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmaW5hbGl6ZUlucHV0KGlucHV0SW5kZXgsIGZpbmFsU2NyaXB0c0Z1bmMpIHtcbiAgICBjb25zdCBpbnB1dCA9ICgwLCB1dGlsc18xLmNoZWNrRm9ySW5wdXQpKHRoaXMuZGF0YS5pbnB1dHMsIGlucHV0SW5kZXgpO1xuICAgIGlmICgoMCwgYmlwMzcxXzEuaXNUYXByb290SW5wdXQpKGlucHV0KSlcbiAgICAgIHJldHVybiB0aGlzLl9maW5hbGl6ZVRhcHJvb3RJbnB1dChcbiAgICAgICAgaW5wdXRJbmRleCxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgZmluYWxTY3JpcHRzRnVuYyxcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbmFsaXplSW5wdXQoaW5wdXRJbmRleCwgaW5wdXQsIGZpbmFsU2NyaXB0c0Z1bmMpO1xuICB9XG4gIGZpbmFsaXplVGFwcm9vdElucHV0KFxuICAgIGlucHV0SW5kZXgsXG4gICAgdGFwTGVhZkhhc2hUb0ZpbmFsaXplLFxuICAgIGZpbmFsU2NyaXB0c0Z1bmMgPSBiaXAzNzFfMS50YXBTY3JpcHRGaW5hbGl6ZXIsXG4gICkge1xuICAgIGNvbnN0IGlucHV0ID0gKDAsIHV0aWxzXzEuY2hlY2tGb3JJbnB1dCkodGhpcy5kYXRhLmlucHV0cywgaW5wdXRJbmRleCk7XG4gICAgaWYgKCgwLCBiaXAzNzFfMS5pc1RhcHJvb3RJbnB1dCkoaW5wdXQpKVxuICAgICAgcmV0dXJuIHRoaXMuX2ZpbmFsaXplVGFwcm9vdElucHV0KFxuICAgICAgICBpbnB1dEluZGV4LFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgdGFwTGVhZkhhc2hUb0ZpbmFsaXplLFxuICAgICAgICBmaW5hbFNjcmlwdHNGdW5jLFxuICAgICAgKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5hbGl6ZSBpbnB1dCAjJHtpbnB1dEluZGV4fS4gTm90IFRhcHJvb3QuYCk7XG4gIH1cbiAgX2ZpbmFsaXplSW5wdXQoaW5wdXRJbmRleCwgaW5wdXQsIGZpbmFsU2NyaXB0c0Z1bmMgPSBnZXRGaW5hbFNjcmlwdHMpIHtcbiAgICBjb25zdCB7IHNjcmlwdCwgaXNQMlNILCBpc1AyV1NILCBpc1NlZ3dpdCB9ID0gZ2V0U2NyaXB0RnJvbUlucHV0KFxuICAgICAgaW5wdXRJbmRleCxcbiAgICAgIGlucHV0LFxuICAgICAgdGhpcy5fX0NBQ0hFLFxuICAgICk7XG4gICAgaWYgKCFzY3JpcHQpIHRocm93IG5ldyBFcnJvcihgTm8gc2NyaXB0IGZvdW5kIGZvciBpbnB1dCAjJHtpbnB1dEluZGV4fWApO1xuICAgIGNoZWNrUGFydGlhbFNpZ1NpZ2hhc2hlcyhpbnB1dCk7XG4gICAgY29uc3QgeyBmaW5hbFNjcmlwdFNpZywgZmluYWxTY3JpcHRXaXRuZXNzIH0gPSBmaW5hbFNjcmlwdHNGdW5jKFxuICAgICAgaW5wdXRJbmRleCxcbiAgICAgIGlucHV0LFxuICAgICAgc2NyaXB0LFxuICAgICAgaXNTZWd3aXQsXG4gICAgICBpc1AyU0gsXG4gICAgICBpc1AyV1NILFxuICAgICk7XG4gICAgaWYgKGZpbmFsU2NyaXB0U2lnKSB0aGlzLmRhdGEudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwgeyBmaW5hbFNjcmlwdFNpZyB9KTtcbiAgICBpZiAoZmluYWxTY3JpcHRXaXRuZXNzKVxuICAgICAgdGhpcy5kYXRhLnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHsgZmluYWxTY3JpcHRXaXRuZXNzIH0pO1xuICAgIGlmICghZmluYWxTY3JpcHRTaWcgJiYgIWZpbmFsU2NyaXB0V2l0bmVzcylcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBlcnJvciBmaW5hbGl6aW5nIGlucHV0ICMke2lucHV0SW5kZXh9YCk7XG4gICAgdGhpcy5kYXRhLmNsZWFyRmluYWxpemVkSW5wdXQoaW5wdXRJbmRleCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgX2ZpbmFsaXplVGFwcm9vdElucHV0KFxuICAgIGlucHV0SW5kZXgsXG4gICAgaW5wdXQsXG4gICAgdGFwTGVhZkhhc2hUb0ZpbmFsaXplLFxuICAgIGZpbmFsU2NyaXB0c0Z1bmMgPSBiaXAzNzFfMS50YXBTY3JpcHRGaW5hbGl6ZXIsXG4gICkge1xuICAgIGlmICghaW5wdXQud2l0bmVzc1V0eG8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZmluYWxpemUgaW5wdXQgIyR7aW5wdXRJbmRleH0uIE1pc3Npbmcgd2l0aG5lc3MgdXR4by5gLFxuICAgICAgKTtcbiAgICAvLyBDaGVjayBrZXkgc3BlbmQgZmlyc3QuIEluY3JlYXNlZCBwcml2YWN5IGFuZCByZWR1Y2VkIGJsb2NrIHNwYWNlLlxuICAgIGlmIChpbnB1dC50YXBLZXlTaWcpIHtcbiAgICAgIGNvbnN0IHBheW1lbnQgPSBwYXltZW50cy5wMnRyKHtcbiAgICAgICAgb3V0cHV0OiBpbnB1dC53aXRuZXNzVXR4by5zY3JpcHQsXG4gICAgICAgIHNpZ25hdHVyZTogaW5wdXQudGFwS2V5U2lnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmaW5hbFNjcmlwdFdpdG5lc3MgPSAoMCwgcHNidHV0aWxzXzEud2l0bmVzc1N0YWNrVG9TY3JpcHRXaXRuZXNzKShcbiAgICAgICAgcGF5bWVudC53aXRuZXNzLFxuICAgICAgKTtcbiAgICAgIHRoaXMuZGF0YS51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IGZpbmFsU2NyaXB0V2l0bmVzcyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBmaW5hbFNjcmlwdFdpdG5lc3MgfSA9IGZpbmFsU2NyaXB0c0Z1bmMoXG4gICAgICAgIGlucHV0SW5kZXgsXG4gICAgICAgIGlucHV0LFxuICAgICAgICB0YXBMZWFmSGFzaFRvRmluYWxpemUsXG4gICAgICApO1xuICAgICAgdGhpcy5kYXRhLnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHsgZmluYWxTY3JpcHRXaXRuZXNzIH0pO1xuICAgIH1cbiAgICB0aGlzLmRhdGEuY2xlYXJGaW5hbGl6ZWRJbnB1dChpbnB1dEluZGV4KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBnZXRJbnB1dFR5cGUoaW5wdXRJbmRleCkge1xuICAgIGNvbnN0IGlucHV0ID0gKDAsIHV0aWxzXzEuY2hlY2tGb3JJbnB1dCkodGhpcy5kYXRhLmlucHV0cywgaW5wdXRJbmRleCk7XG4gICAgY29uc3Qgc2NyaXB0ID0gZ2V0U2NyaXB0RnJvbVV0eG8oaW5wdXRJbmRleCwgaW5wdXQsIHRoaXMuX19DQUNIRSk7XG4gICAgY29uc3QgcmVzdWx0ID0gZ2V0TWVhbmluZ2Z1bFNjcmlwdChcbiAgICAgIHNjcmlwdCxcbiAgICAgIGlucHV0SW5kZXgsXG4gICAgICAnaW5wdXQnLFxuICAgICAgaW5wdXQucmVkZWVtU2NyaXB0IHx8IHJlZGVlbUZyb21GaW5hbFNjcmlwdFNpZyhpbnB1dC5maW5hbFNjcmlwdFNpZyksXG4gICAgICBpbnB1dC53aXRuZXNzU2NyaXB0IHx8XG4gICAgICAgIHJlZGVlbUZyb21GaW5hbFdpdG5lc3NTY3JpcHQoaW5wdXQuZmluYWxTY3JpcHRXaXRuZXNzKSxcbiAgICApO1xuICAgIGNvbnN0IHR5cGUgPSByZXN1bHQudHlwZSA9PT0gJ3JhdycgPyAnJyA6IHJlc3VsdC50eXBlICsgJy0nO1xuICAgIGNvbnN0IG1haW5UeXBlID0gY2xhc3NpZnlTY3JpcHQocmVzdWx0Lm1lYW5pbmdmdWxTY3JpcHQpO1xuICAgIHJldHVybiB0eXBlICsgbWFpblR5cGU7XG4gIH1cbiAgaW5wdXRIYXNQdWJrZXkoaW5wdXRJbmRleCwgcHVia2V5KSB7XG4gICAgY29uc3QgaW5wdXQgPSAoMCwgdXRpbHNfMS5jaGVja0ZvcklucHV0KSh0aGlzLmRhdGEuaW5wdXRzLCBpbnB1dEluZGV4KTtcbiAgICByZXR1cm4gcHVia2V5SW5JbnB1dChwdWJrZXksIGlucHV0LCBpbnB1dEluZGV4LCB0aGlzLl9fQ0FDSEUpO1xuICB9XG4gIGlucHV0SGFzSERLZXkoaW5wdXRJbmRleCwgcm9vdCkge1xuICAgIGNvbnN0IGlucHV0ID0gKDAsIHV0aWxzXzEuY2hlY2tGb3JJbnB1dCkodGhpcy5kYXRhLmlucHV0cywgaW5wdXRJbmRleCk7XG4gICAgY29uc3QgZGVyaXZhdGlvbklzTWluZSA9IGJpcDMyRGVyaXZhdGlvbklzTWluZShyb290KTtcbiAgICByZXR1cm4gKFxuICAgICAgISFpbnB1dC5iaXAzMkRlcml2YXRpb24gJiYgaW5wdXQuYmlwMzJEZXJpdmF0aW9uLnNvbWUoZGVyaXZhdGlvbklzTWluZSlcbiAgICApO1xuICB9XG4gIG91dHB1dEhhc1B1YmtleShvdXRwdXRJbmRleCwgcHVia2V5KSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gKDAsIHV0aWxzXzEuY2hlY2tGb3JPdXRwdXQpKHRoaXMuZGF0YS5vdXRwdXRzLCBvdXRwdXRJbmRleCk7XG4gICAgcmV0dXJuIHB1YmtleUluT3V0cHV0KHB1YmtleSwgb3V0cHV0LCBvdXRwdXRJbmRleCwgdGhpcy5fX0NBQ0hFKTtcbiAgfVxuICBvdXRwdXRIYXNIREtleShvdXRwdXRJbmRleCwgcm9vdCkge1xuICAgIGNvbnN0IG91dHB1dCA9ICgwLCB1dGlsc18xLmNoZWNrRm9yT3V0cHV0KSh0aGlzLmRhdGEub3V0cHV0cywgb3V0cHV0SW5kZXgpO1xuICAgIGNvbnN0IGRlcml2YXRpb25Jc01pbmUgPSBiaXAzMkRlcml2YXRpb25Jc01pbmUocm9vdCk7XG4gICAgcmV0dXJuIChcbiAgICAgICEhb3V0cHV0LmJpcDMyRGVyaXZhdGlvbiAmJiBvdXRwdXQuYmlwMzJEZXJpdmF0aW9uLnNvbWUoZGVyaXZhdGlvbklzTWluZSlcbiAgICApO1xuICB9XG4gIHZhbGlkYXRlU2lnbmF0dXJlc09mQWxsSW5wdXRzKHZhbGlkYXRvcikge1xuICAgICgwLCB1dGlsc18xLmNoZWNrRm9ySW5wdXQpKHRoaXMuZGF0YS5pbnB1dHMsIDApOyAvLyBtYWtpbmcgc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IG9uZVxuICAgIGNvbnN0IHJlc3VsdHMgPSByYW5nZSh0aGlzLmRhdGEuaW5wdXRzLmxlbmd0aCkubWFwKGlkeCA9PlxuICAgICAgdGhpcy52YWxpZGF0ZVNpZ25hdHVyZXNPZklucHV0KGlkeCwgdmFsaWRhdG9yKSxcbiAgICApO1xuICAgIHJldHVybiByZXN1bHRzLnJlZHVjZSgoZmluYWwsIHJlcykgPT4gcmVzID09PSB0cnVlICYmIGZpbmFsLCB0cnVlKTtcbiAgfVxuICB2YWxpZGF0ZVNpZ25hdHVyZXNPZklucHV0KGlucHV0SW5kZXgsIHZhbGlkYXRvciwgcHVia2V5KSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICAgIGlmICgoMCwgYmlwMzcxXzEuaXNUYXByb290SW5wdXQpKGlucHV0KSlcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlU2lnbmF0dXJlc09mVGFwcm9vdElucHV0KFxuICAgICAgICBpbnB1dEluZGV4LFxuICAgICAgICB2YWxpZGF0b3IsXG4gICAgICAgIHB1YmtleSxcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlU2lnbmF0dXJlc09mSW5wdXQoaW5wdXRJbmRleCwgdmFsaWRhdG9yLCBwdWJrZXkpO1xuICB9XG4gIF92YWxpZGF0ZVNpZ25hdHVyZXNPZklucHV0KGlucHV0SW5kZXgsIHZhbGlkYXRvciwgcHVia2V5KSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICAgIGNvbnN0IHBhcnRpYWxTaWcgPSAoaW5wdXQgfHwge30pLnBhcnRpYWxTaWc7XG4gICAgaWYgKCFpbnB1dCB8fCAhcGFydGlhbFNpZyB8fCBwYXJ0aWFsU2lnLmxlbmd0aCA8IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNpZ25hdHVyZXMgdG8gdmFsaWRhdGUnKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkYXRvciAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgIHRocm93IG5ldyBFcnJvcignTmVlZCB2YWxpZGF0b3IgZnVuY3Rpb24gdG8gdmFsaWRhdGUgc2lnbmF0dXJlcycpO1xuICAgIGNvbnN0IG15U2lncyA9IHB1YmtleVxuICAgICAgPyBwYXJ0aWFsU2lnLmZpbHRlcihzaWcgPT4gc2lnLnB1YmtleS5lcXVhbHMocHVia2V5KSlcbiAgICAgIDogcGFydGlhbFNpZztcbiAgICBpZiAobXlTaWdzLmxlbmd0aCA8IDEpIHRocm93IG5ldyBFcnJvcignTm8gc2lnbmF0dXJlcyBmb3IgdGhpcyBwdWJrZXknKTtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgbGV0IGhhc2hDYWNoZTtcbiAgICBsZXQgc2NyaXB0Q2FjaGU7XG4gICAgbGV0IHNpZ2hhc2hDYWNoZTtcbiAgICBmb3IgKGNvbnN0IHBTaWcgb2YgbXlTaWdzKSB7XG4gICAgICBjb25zdCBzaWcgPSBic2NyaXB0LnNpZ25hdHVyZS5kZWNvZGUocFNpZy5zaWduYXR1cmUpO1xuICAgICAgY29uc3QgeyBoYXNoLCBzY3JpcHQgfSA9XG4gICAgICAgIHNpZ2hhc2hDYWNoZSAhPT0gc2lnLmhhc2hUeXBlXG4gICAgICAgICAgPyBnZXRIYXNoRm9yU2lnKFxuICAgICAgICAgICAgICBpbnB1dEluZGV4LFxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBpbnB1dCwgeyBzaWdoYXNoVHlwZTogc2lnLmhhc2hUeXBlIH0pLFxuICAgICAgICAgICAgICB0aGlzLl9fQ0FDSEUsXG4gICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiB7IGhhc2g6IGhhc2hDYWNoZSwgc2NyaXB0OiBzY3JpcHRDYWNoZSB9O1xuICAgICAgc2lnaGFzaENhY2hlID0gc2lnLmhhc2hUeXBlO1xuICAgICAgaGFzaENhY2hlID0gaGFzaDtcbiAgICAgIHNjcmlwdENhY2hlID0gc2NyaXB0O1xuICAgICAgY2hlY2tTY3JpcHRGb3JQdWJrZXkocFNpZy5wdWJrZXksIHNjcmlwdCwgJ3ZlcmlmeScpO1xuICAgICAgcmVzdWx0cy5wdXNoKHZhbGlkYXRvcihwU2lnLnB1YmtleSwgaGFzaCwgc2lnLnNpZ25hdHVyZSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cy5ldmVyeShyZXMgPT4gcmVzID09PSB0cnVlKTtcbiAgfVxuICB2YWxpZGF0ZVNpZ25hdHVyZXNPZlRhcHJvb3RJbnB1dChpbnB1dEluZGV4LCB2YWxpZGF0b3IsIHB1YmtleSkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5kYXRhLmlucHV0c1tpbnB1dEluZGV4XTtcbiAgICBjb25zdCB0YXBLZXlTaWcgPSAoaW5wdXQgfHwge30pLnRhcEtleVNpZztcbiAgICBjb25zdCB0YXBTY3JpcHRTaWcgPSAoaW5wdXQgfHwge30pLnRhcFNjcmlwdFNpZztcbiAgICBpZiAoIWlucHV0ICYmICF0YXBLZXlTaWcgJiYgISh0YXBTY3JpcHRTaWcgJiYgIXRhcFNjcmlwdFNpZy5sZW5ndGgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzaWduYXR1cmVzIHRvIHZhbGlkYXRlJyk7XG4gICAgaWYgKHR5cGVvZiB2YWxpZGF0b3IgIT09ICdmdW5jdGlvbicpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05lZWQgdmFsaWRhdG9yIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHNpZ25hdHVyZXMnKTtcbiAgICBwdWJrZXkgPSBwdWJrZXkgJiYgKDAsIGJpcDM3MV8xLnRvWE9ubHkpKHB1YmtleSk7XG4gICAgY29uc3QgYWxsSGFzaHNlcyA9IHB1YmtleVxuICAgICAgPyBnZXRUYXByb290SGFzaGVzRm9yU2lnKFxuICAgICAgICAgIGlucHV0SW5kZXgsXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgdGhpcy5kYXRhLmlucHV0cyxcbiAgICAgICAgICBwdWJrZXksXG4gICAgICAgICAgdGhpcy5fX0NBQ0hFLFxuICAgICAgICApXG4gICAgICA6IGdldEFsbFRhcHJvb3RIYXNoZXNGb3JTaWcoXG4gICAgICAgICAgaW5wdXRJbmRleCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICB0aGlzLmRhdGEuaW5wdXRzLFxuICAgICAgICAgIHRoaXMuX19DQUNIRSxcbiAgICAgICAgKTtcbiAgICBpZiAoIWFsbEhhc2hzZXMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ05vIHNpZ25hdHVyZXMgZm9yIHRoaXMgcHVia2V5Jyk7XG4gICAgY29uc3QgdGFwS2V5SGFzaCA9IGFsbEhhc2hzZXMuZmluZChoID0+ICFoLmxlYWZIYXNoKTtcbiAgICBsZXQgdmFsaWRhdGlvblJlc3VsdENvdW50ID0gMDtcbiAgICBpZiAodGFwS2V5U2lnICYmIHRhcEtleUhhc2gpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWRUYXBrZXlTaWcgPSB2YWxpZGF0b3IoXG4gICAgICAgIHRhcEtleUhhc2gucHVia2V5LFxuICAgICAgICB0YXBLZXlIYXNoLmhhc2gsXG4gICAgICAgIHRyaW1UYXByb290U2lnKHRhcEtleVNpZyksXG4gICAgICApO1xuICAgICAgaWYgKCFpc1ZhbGlkVGFwa2V5U2lnKSByZXR1cm4gZmFsc2U7XG4gICAgICB2YWxpZGF0aW9uUmVzdWx0Q291bnQrKztcbiAgICB9XG4gICAgaWYgKHRhcFNjcmlwdFNpZykge1xuICAgICAgZm9yIChjb25zdCB0YXBTaWcgb2YgdGFwU2NyaXB0U2lnKSB7XG4gICAgICAgIGNvbnN0IHRhcFNpZ0hhc2ggPSBhbGxIYXNoc2VzLmZpbmQoaCA9PiB0YXBTaWcucHVia2V5LmVxdWFscyhoLnB1YmtleSkpO1xuICAgICAgICBpZiAodGFwU2lnSGFzaCkge1xuICAgICAgICAgIGNvbnN0IGlzVmFsaWRUYXBTY3JpcHRTaWcgPSB2YWxpZGF0b3IoXG4gICAgICAgICAgICB0YXBTaWcucHVia2V5LFxuICAgICAgICAgICAgdGFwU2lnSGFzaC5oYXNoLFxuICAgICAgICAgICAgdHJpbVRhcHJvb3RTaWcodGFwU2lnLnNpZ25hdHVyZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWlzVmFsaWRUYXBTY3JpcHRTaWcpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB2YWxpZGF0aW9uUmVzdWx0Q291bnQrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdENvdW50ID4gMDtcbiAgfVxuICBzaWduQWxsSW5wdXRzSEQoXG4gICAgaGRLZXlQYWlyLFxuICAgIHNpZ2hhc2hUeXBlcyA9IFt0cmFuc2FjdGlvbl8xLlRyYW5zYWN0aW9uLlNJR0hBU0hfQUxMXSxcbiAgKSB7XG4gICAgaWYgKCFoZEtleVBhaXIgfHwgIWhkS2V5UGFpci5wdWJsaWNLZXkgfHwgIWhkS2V5UGFpci5maW5nZXJwcmludCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZWVkIEhEU2lnbmVyIHRvIHNpZ24gaW5wdXQnKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgaSBvZiByYW5nZSh0aGlzLmRhdGEuaW5wdXRzLmxlbmd0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc2lnbklucHV0SEQoaSwgaGRLZXlQYWlyLCBzaWdoYXNoVHlwZXMpO1xuICAgICAgICByZXN1bHRzLnB1c2godHJ1ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlc3VsdHMuZXZlcnkodiA9PiB2ID09PSBmYWxzZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gaW5wdXRzIHdlcmUgc2lnbmVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHNpZ25BbGxJbnB1dHNIREFzeW5jKFxuICAgIGhkS2V5UGFpcixcbiAgICBzaWdoYXNoVHlwZXMgPSBbdHJhbnNhY3Rpb25fMS5UcmFuc2FjdGlvbi5TSUdIQVNIX0FMTF0sXG4gICkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIWhkS2V5UGFpciB8fCAhaGRLZXlQYWlyLnB1YmxpY0tleSB8fCAhaGRLZXlQYWlyLmZpbmdlcnByaW50KSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdOZWVkIEhEU2lnbmVyIHRvIHNpZ24gaW5wdXQnKSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBpIG9mIHJhbmdlKHRoaXMuZGF0YS5pbnB1dHMubGVuZ3RoKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgIHRoaXMuc2lnbklucHV0SERBc3luYyhpLCBoZEtleVBhaXIsIHNpZ2hhc2hUeXBlcykudGhlbihcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHRzLmV2ZXJ5KHYgPT4gdiA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ05vIGlucHV0cyB3ZXJlIHNpZ25lZCcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBzaWduSW5wdXRIRChcbiAgICBpbnB1dEluZGV4LFxuICAgIGhkS2V5UGFpcixcbiAgICBzaWdoYXNoVHlwZXMgPSBbdHJhbnNhY3Rpb25fMS5UcmFuc2FjdGlvbi5TSUdIQVNIX0FMTF0sXG4gICkge1xuICAgIGlmICghaGRLZXlQYWlyIHx8ICFoZEtleVBhaXIucHVibGljS2V5IHx8ICFoZEtleVBhaXIuZmluZ2VycHJpbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTmVlZCBIRFNpZ25lciB0byBzaWduIGlucHV0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNpZ25lcnMgPSBnZXRTaWduZXJzRnJvbUhEKGlucHV0SW5kZXgsIHRoaXMuZGF0YS5pbnB1dHMsIGhkS2V5UGFpcik7XG4gICAgc2lnbmVycy5mb3JFYWNoKHNpZ25lciA9PiB0aGlzLnNpZ25JbnB1dChpbnB1dEluZGV4LCBzaWduZXIsIHNpZ2hhc2hUeXBlcykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHNpZ25JbnB1dEhEQXN5bmMoXG4gICAgaW5wdXRJbmRleCxcbiAgICBoZEtleVBhaXIsXG4gICAgc2lnaGFzaFR5cGVzID0gW3RyYW5zYWN0aW9uXzEuVHJhbnNhY3Rpb24uU0lHSEFTSF9BTExdLFxuICApIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFoZEtleVBhaXIgfHwgIWhkS2V5UGFpci5wdWJsaWNLZXkgfHwgIWhkS2V5UGFpci5maW5nZXJwcmludCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTmVlZCBIRFNpZ25lciB0byBzaWduIGlucHV0JykpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lnbmVycyA9IGdldFNpZ25lcnNGcm9tSEQoaW5wdXRJbmRleCwgdGhpcy5kYXRhLmlucHV0cywgaGRLZXlQYWlyKTtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gc2lnbmVycy5tYXAoc2lnbmVyID0+XG4gICAgICAgIHRoaXMuc2lnbklucHV0QXN5bmMoaW5wdXRJbmRleCwgc2lnbmVyLCBzaWdoYXNoVHlwZXMpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH1cbiAgc2lnbkFsbElucHV0cyhrZXlQYWlyLCBzaWdoYXNoVHlwZXMpIHtcbiAgICBpZiAoIWtleVBhaXIgfHwgIWtleVBhaXIucHVibGljS2V5KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZWVkIFNpZ25lciB0byBzaWduIGlucHV0Jyk7XG4gICAgLy8gVE9ETzogQWRkIGEgcHVia2V5L3B1YmtleWhhc2ggY2FjaGUgdG8gZWFjaCBpbnB1dFxuICAgIC8vIGFzIGlucHV0IGluZm9ybWF0aW9uIGlzIGFkZGVkLCB0aGVuIGV2ZW50dWFsbHlcbiAgICAvLyBvcHRpbWl6ZSB0aGlzIG1ldGhvZC5cbiAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgZm9yIChjb25zdCBpIG9mIHJhbmdlKHRoaXMuZGF0YS5pbnB1dHMubGVuZ3RoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zaWduSW5wdXQoaSwga2V5UGFpciwgc2lnaGFzaFR5cGVzKTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHRydWUpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaChmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXN1bHRzLmV2ZXJ5KHYgPT4gdiA9PT0gZmFsc2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGlucHV0cyB3ZXJlIHNpZ25lZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBzaWduQWxsSW5wdXRzQXN5bmMoa2V5UGFpciwgc2lnaGFzaFR5cGVzKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICgha2V5UGFpciB8fCAha2V5UGFpci5wdWJsaWNLZXkpXG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdOZWVkIFNpZ25lciB0byBzaWduIGlucHV0JykpO1xuICAgICAgLy8gVE9ETzogQWRkIGEgcHVia2V5L3B1YmtleWhhc2ggY2FjaGUgdG8gZWFjaCBpbnB1dFxuICAgICAgLy8gYXMgaW5wdXQgaW5mb3JtYXRpb24gaXMgYWRkZWQsIHRoZW4gZXZlbnR1YWxseVxuICAgICAgLy8gb3B0aW1pemUgdGhpcyBtZXRob2QuXG4gICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBbaV0gb2YgdGhpcy5kYXRhLmlucHV0cy5lbnRyaWVzKCkpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICB0aGlzLnNpZ25JbnB1dEFzeW5jKGksIGtleVBhaXIsIHNpZ2hhc2hUeXBlcykudGhlbihcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHRzLmV2ZXJ5KHYgPT4gdiA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ05vIGlucHV0cyB3ZXJlIHNpZ25lZCcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBzaWduSW5wdXQoaW5wdXRJbmRleCwga2V5UGFpciwgc2lnaGFzaFR5cGVzKSB7XG4gICAgaWYgKCFrZXlQYWlyIHx8ICFrZXlQYWlyLnB1YmxpY0tleSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignTmVlZCBTaWduZXIgdG8gc2lnbiBpbnB1dCcpO1xuICAgIGNvbnN0IGlucHV0ID0gKDAsIHV0aWxzXzEuY2hlY2tGb3JJbnB1dCkodGhpcy5kYXRhLmlucHV0cywgaW5wdXRJbmRleCk7XG4gICAgaWYgKCgwLCBiaXAzNzFfMS5pc1RhcHJvb3RJbnB1dCkoaW5wdXQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2lnblRhcHJvb3RJbnB1dChcbiAgICAgICAgaW5wdXRJbmRleCxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIGtleVBhaXIsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgc2lnaGFzaFR5cGVzLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25JbnB1dChpbnB1dEluZGV4LCBrZXlQYWlyLCBzaWdoYXNoVHlwZXMpO1xuICB9XG4gIHNpZ25UYXByb290SW5wdXQoaW5wdXRJbmRleCwga2V5UGFpciwgdGFwTGVhZkhhc2hUb1NpZ24sIHNpZ2hhc2hUeXBlcykge1xuICAgIGlmICgha2V5UGFpciB8fCAha2V5UGFpci5wdWJsaWNLZXkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05lZWQgU2lnbmVyIHRvIHNpZ24gaW5wdXQnKTtcbiAgICBjb25zdCBpbnB1dCA9ICgwLCB1dGlsc18xLmNoZWNrRm9ySW5wdXQpKHRoaXMuZGF0YS5pbnB1dHMsIGlucHV0SW5kZXgpO1xuICAgIGlmICgoMCwgYmlwMzcxXzEuaXNUYXByb290SW5wdXQpKGlucHV0KSlcbiAgICAgIHJldHVybiB0aGlzLl9zaWduVGFwcm9vdElucHV0KFxuICAgICAgICBpbnB1dEluZGV4LFxuICAgICAgICBpbnB1dCxcbiAgICAgICAga2V5UGFpcixcbiAgICAgICAgdGFwTGVhZkhhc2hUb1NpZ24sXG4gICAgICAgIHNpZ2hhc2hUeXBlcyxcbiAgICAgICk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAjJHtpbnB1dEluZGV4fSBpcyBub3Qgb2YgdHlwZSBUYXByb290LmApO1xuICB9XG4gIF9zaWduSW5wdXQoXG4gICAgaW5wdXRJbmRleCxcbiAgICBrZXlQYWlyLFxuICAgIHNpZ2hhc2hUeXBlcyA9IFt0cmFuc2FjdGlvbl8xLlRyYW5zYWN0aW9uLlNJR0hBU0hfQUxMXSxcbiAgKSB7XG4gICAgY29uc3QgeyBoYXNoLCBzaWdoYXNoVHlwZSB9ID0gZ2V0SGFzaEFuZFNpZ2hhc2hUeXBlKFxuICAgICAgdGhpcy5kYXRhLmlucHV0cyxcbiAgICAgIGlucHV0SW5kZXgsXG4gICAgICBrZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuX19DQUNIRSxcbiAgICAgIHNpZ2hhc2hUeXBlcyxcbiAgICApO1xuICAgIGNvbnN0IHBhcnRpYWxTaWcgPSBbXG4gICAgICB7XG4gICAgICAgIHB1YmtleToga2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgIHNpZ25hdHVyZTogYnNjcmlwdC5zaWduYXR1cmUuZW5jb2RlKGtleVBhaXIuc2lnbihoYXNoKSwgc2lnaGFzaFR5cGUpLFxuICAgICAgfSxcbiAgICBdO1xuICAgIHRoaXMuZGF0YS51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHBhcnRpYWxTaWcgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgX3NpZ25UYXByb290SW5wdXQoXG4gICAgaW5wdXRJbmRleCxcbiAgICBpbnB1dCxcbiAgICBrZXlQYWlyLFxuICAgIHRhcExlYWZIYXNoVG9TaWduLFxuICAgIGFsbG93ZWRTaWdoYXNoVHlwZXMgPSBbdHJhbnNhY3Rpb25fMS5UcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFRdLFxuICApIHtcbiAgICBjb25zdCBoYXNoZXNGb3JTaWcgPSB0aGlzLmNoZWNrVGFwcm9vdEhhc2hlc0ZvclNpZyhcbiAgICAgIGlucHV0SW5kZXgsXG4gICAgICBpbnB1dCxcbiAgICAgIGtleVBhaXIsXG4gICAgICB0YXBMZWFmSGFzaFRvU2lnbixcbiAgICAgIGFsbG93ZWRTaWdoYXNoVHlwZXMsXG4gICAgKTtcbiAgICBjb25zdCB0YXBLZXlTaWcgPSBoYXNoZXNGb3JTaWdcbiAgICAgIC5maWx0ZXIoaCA9PiAhaC5sZWFmSGFzaClcbiAgICAgIC5tYXAoaCA9PlxuICAgICAgICAoMCwgYmlwMzcxXzEuc2VyaWFsaXplVGFwcm9vdFNpZ25hdHVyZSkoXG4gICAgICAgICAga2V5UGFpci5zaWduU2Nobm9ycihoLmhhc2gpLFxuICAgICAgICAgIGlucHV0LnNpZ2hhc2hUeXBlLFxuICAgICAgICApLFxuICAgICAgKVswXTtcbiAgICBjb25zdCB0YXBTY3JpcHRTaWcgPSBoYXNoZXNGb3JTaWdcbiAgICAgIC5maWx0ZXIoaCA9PiAhIWgubGVhZkhhc2gpXG4gICAgICAubWFwKGggPT4gKHtcbiAgICAgICAgcHVia2V5OiAoMCwgYmlwMzcxXzEudG9YT25seSkoa2V5UGFpci5wdWJsaWNLZXkpLFxuICAgICAgICBzaWduYXR1cmU6ICgwLCBiaXAzNzFfMS5zZXJpYWxpemVUYXByb290U2lnbmF0dXJlKShcbiAgICAgICAgICBrZXlQYWlyLnNpZ25TY2hub3JyKGguaGFzaCksXG4gICAgICAgICAgaW5wdXQuc2lnaGFzaFR5cGUsXG4gICAgICAgICksXG4gICAgICAgIGxlYWZIYXNoOiBoLmxlYWZIYXNoLFxuICAgICAgfSkpO1xuICAgIGlmICh0YXBLZXlTaWcpIHtcbiAgICAgIHRoaXMuZGF0YS51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHRhcEtleVNpZyB9KTtcbiAgICB9XG4gICAgaWYgKHRhcFNjcmlwdFNpZy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGF0YS51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHRhcFNjcmlwdFNpZyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgc2lnbklucHV0QXN5bmMoaW5wdXRJbmRleCwga2V5UGFpciwgc2lnaGFzaFR5cGVzKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKCFrZXlQYWlyIHx8ICFrZXlQYWlyLnB1YmxpY0tleSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZWVkIFNpZ25lciB0byBzaWduIGlucHV0Jyk7XG4gICAgICBjb25zdCBpbnB1dCA9ICgwLCB1dGlsc18xLmNoZWNrRm9ySW5wdXQpKHRoaXMuZGF0YS5pbnB1dHMsIGlucHV0SW5kZXgpO1xuICAgICAgaWYgKCgwLCBiaXAzNzFfMS5pc1RhcHJvb3RJbnB1dCkoaW5wdXQpKVxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnblRhcHJvb3RJbnB1dEFzeW5jKFxuICAgICAgICAgIGlucHV0SW5kZXgsXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAga2V5UGFpcixcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgc2lnaGFzaFR5cGVzLFxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHRoaXMuX3NpZ25JbnB1dEFzeW5jKGlucHV0SW5kZXgsIGtleVBhaXIsIHNpZ2hhc2hUeXBlcyk7XG4gICAgfSk7XG4gIH1cbiAgc2lnblRhcHJvb3RJbnB1dEFzeW5jKGlucHV0SW5kZXgsIGtleVBhaXIsIHRhcExlYWZIYXNoLCBzaWdoYXNoVHlwZXMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICBpZiAoIWtleVBhaXIgfHwgIWtleVBhaXIucHVibGljS2V5KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05lZWQgU2lnbmVyIHRvIHNpZ24gaW5wdXQnKTtcbiAgICAgIGNvbnN0IGlucHV0ID0gKDAsIHV0aWxzXzEuY2hlY2tGb3JJbnB1dCkodGhpcy5kYXRhLmlucHV0cywgaW5wdXRJbmRleCk7XG4gICAgICBpZiAoKDAsIGJpcDM3MV8xLmlzVGFwcm9vdElucHV0KShpbnB1dCkpXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduVGFwcm9vdElucHV0QXN5bmMoXG4gICAgICAgICAgaW5wdXRJbmRleCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBrZXlQYWlyLFxuICAgICAgICAgIHRhcExlYWZIYXNoLFxuICAgICAgICAgIHNpZ2hhc2hUeXBlcyxcbiAgICAgICAgKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgIyR7aW5wdXRJbmRleH0gaXMgbm90IG9mIHR5cGUgVGFwcm9vdC5gKTtcbiAgICB9KTtcbiAgfVxuICBfc2lnbklucHV0QXN5bmMoXG4gICAgaW5wdXRJbmRleCxcbiAgICBrZXlQYWlyLFxuICAgIHNpZ2hhc2hUeXBlcyA9IFt0cmFuc2FjdGlvbl8xLlRyYW5zYWN0aW9uLlNJR0hBU0hfQUxMXSxcbiAgKSB7XG4gICAgY29uc3QgeyBoYXNoLCBzaWdoYXNoVHlwZSB9ID0gZ2V0SGFzaEFuZFNpZ2hhc2hUeXBlKFxuICAgICAgdGhpcy5kYXRhLmlucHV0cyxcbiAgICAgIGlucHV0SW5kZXgsXG4gICAgICBrZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuX19DQUNIRSxcbiAgICAgIHNpZ2hhc2hUeXBlcyxcbiAgICApO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5UGFpci5zaWduKGhhc2gpKS50aGVuKHNpZ25hdHVyZSA9PiB7XG4gICAgICBjb25zdCBwYXJ0aWFsU2lnID0gW1xuICAgICAgICB7XG4gICAgICAgICAgcHVia2V5OiBrZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICBzaWduYXR1cmU6IGJzY3JpcHQuc2lnbmF0dXJlLmVuY29kZShzaWduYXR1cmUsIHNpZ2hhc2hUeXBlKSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICB0aGlzLmRhdGEudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwgeyBwYXJ0aWFsU2lnIH0pO1xuICAgIH0pO1xuICB9XG4gIGFzeW5jIF9zaWduVGFwcm9vdElucHV0QXN5bmMoXG4gICAgaW5wdXRJbmRleCxcbiAgICBpbnB1dCxcbiAgICBrZXlQYWlyLFxuICAgIHRhcExlYWZIYXNoLFxuICAgIHNpZ2hhc2hUeXBlcyA9IFt0cmFuc2FjdGlvbl8xLlRyYW5zYWN0aW9uLlNJR0hBU0hfREVGQVVMVF0sXG4gICkge1xuICAgIGNvbnN0IGhhc2hlc0ZvclNpZyA9IHRoaXMuY2hlY2tUYXByb290SGFzaGVzRm9yU2lnKFxuICAgICAgaW5wdXRJbmRleCxcbiAgICAgIGlucHV0LFxuICAgICAga2V5UGFpcixcbiAgICAgIHRhcExlYWZIYXNoLFxuICAgICAgc2lnaGFzaFR5cGVzLFxuICAgICk7XG4gICAgY29uc3Qgc2lnbmF0dXJlUHJvbWlzZXMgPSBbXTtcbiAgICBjb25zdCB0YXBLZXlIYXNoID0gaGFzaGVzRm9yU2lnLmZpbHRlcihoID0+ICFoLmxlYWZIYXNoKVswXTtcbiAgICBpZiAodGFwS2V5SGFzaCkge1xuICAgICAgY29uc3QgdGFwS2V5U2lnUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShcbiAgICAgICAga2V5UGFpci5zaWduU2Nobm9ycih0YXBLZXlIYXNoLmhhc2gpLFxuICAgICAgKS50aGVuKHNpZyA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGFwS2V5U2lnOiAoMCwgYmlwMzcxXzEuc2VyaWFsaXplVGFwcm9vdFNpZ25hdHVyZSkoXG4gICAgICAgICAgICBzaWcsXG4gICAgICAgICAgICBpbnB1dC5zaWdoYXNoVHlwZSxcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBzaWduYXR1cmVQcm9taXNlcy5wdXNoKHRhcEtleVNpZ1Byb21pc2UpO1xuICAgIH1cbiAgICBjb25zdCB0YXBTY3JpcHRIYXNoZXMgPSBoYXNoZXNGb3JTaWcuZmlsdGVyKGggPT4gISFoLmxlYWZIYXNoKTtcbiAgICBpZiAodGFwU2NyaXB0SGFzaGVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgdGFwU2NyaXB0U2lnUHJvbWlzZXMgPSB0YXBTY3JpcHRIYXNoZXMubWFwKHRzaCA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5UGFpci5zaWduU2Nobm9ycih0c2guaGFzaCkpLnRoZW4oXG4gICAgICAgICAgc2lnbmF0dXJlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcFNjcmlwdFNpZyA9IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHB1YmtleTogKDAsIGJpcDM3MV8xLnRvWE9ubHkpKGtleVBhaXIucHVibGljS2V5KSxcbiAgICAgICAgICAgICAgICBzaWduYXR1cmU6ICgwLCBiaXAzNzFfMS5zZXJpYWxpemVUYXByb290U2lnbmF0dXJlKShcbiAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICAgIGlucHV0LnNpZ2hhc2hUeXBlLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbGVhZkhhc2g6IHRzaC5sZWFmSGFzaCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm4geyB0YXBTY3JpcHRTaWcgfTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBzaWduYXR1cmVQcm9taXNlcy5wdXNoKC4uLnRhcFNjcmlwdFNpZ1Byb21pc2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHNpZ25hdHVyZVByb21pc2VzKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgcmVzdWx0cy5mb3JFYWNoKHYgPT4gdGhpcy5kYXRhLnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHYpKTtcbiAgICB9KTtcbiAgfVxuICBjaGVja1RhcHJvb3RIYXNoZXNGb3JTaWcoXG4gICAgaW5wdXRJbmRleCxcbiAgICBpbnB1dCxcbiAgICBrZXlQYWlyLFxuICAgIHRhcExlYWZIYXNoVG9TaWduLFxuICAgIGFsbG93ZWRTaWdoYXNoVHlwZXMsXG4gICkge1xuICAgIGlmICh0eXBlb2Yga2V5UGFpci5zaWduU2Nobm9yciAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5lZWQgU2Nobm9yciBTaWduZXIgdG8gc2lnbiB0YXByb290IGlucHV0ICMke2lucHV0SW5kZXh9LmAsXG4gICAgICApO1xuICAgIGNvbnN0IGhhc2hlc0ZvclNpZyA9IGdldFRhcHJvb3RIYXNoZXNGb3JTaWcoXG4gICAgICBpbnB1dEluZGV4LFxuICAgICAgaW5wdXQsXG4gICAgICB0aGlzLmRhdGEuaW5wdXRzLFxuICAgICAga2V5UGFpci5wdWJsaWNLZXksXG4gICAgICB0aGlzLl9fQ0FDSEUsXG4gICAgICB0YXBMZWFmSGFzaFRvU2lnbixcbiAgICAgIGFsbG93ZWRTaWdoYXNoVHlwZXMsXG4gICAgKTtcbiAgICBpZiAoIWhhc2hlc0ZvclNpZyB8fCAhaGFzaGVzRm9yU2lnLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbiBub3Qgc2lnbiBmb3IgaW5wdXQgIyR7aW5wdXRJbmRleH0gd2l0aCB0aGUga2V5ICR7a2V5UGFpci5wdWJsaWNLZXkudG9TdHJpbmcoXG4gICAgICAgICAgJ2hleCcsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgcmV0dXJuIGhhc2hlc0ZvclNpZztcbiAgfVxuICB0b0J1ZmZlcigpIHtcbiAgICBjaGVja0NhY2hlKHRoaXMuX19DQUNIRSk7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS50b0J1ZmZlcigpO1xuICB9XG4gIHRvSGV4KCkge1xuICAgIGNoZWNrQ2FjaGUodGhpcy5fX0NBQ0hFKTtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnRvSGV4KCk7XG4gIH1cbiAgdG9CYXNlNjQoKSB7XG4gICAgY2hlY2tDYWNoZSh0aGlzLl9fQ0FDSEUpO1xuICAgIHJldHVybiB0aGlzLmRhdGEudG9CYXNlNjQoKTtcbiAgfVxuICB1cGRhdGVHbG9iYWwodXBkYXRlRGF0YSkge1xuICAgIHRoaXMuZGF0YS51cGRhdGVHbG9iYWwodXBkYXRlRGF0YSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgdXBkYXRlSW5wdXQoaW5wdXRJbmRleCwgdXBkYXRlRGF0YSkge1xuICAgIGlmICh1cGRhdGVEYXRhLndpdG5lc3NTY3JpcHQpIGNoZWNrSW52YWxpZFAyV1NIKHVwZGF0ZURhdGEud2l0bmVzc1NjcmlwdCk7XG4gICAgKDAsIGJpcDM3MV8xLmNoZWNrVGFwcm9vdElucHV0RmllbGRzKShcbiAgICAgIHRoaXMuZGF0YS5pbnB1dHNbaW5wdXRJbmRleF0sXG4gICAgICB1cGRhdGVEYXRhLFxuICAgICAgJ3VwZGF0ZUlucHV0JyxcbiAgICApO1xuICAgIHRoaXMuZGF0YS51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB1cGRhdGVEYXRhKTtcbiAgICBpZiAodXBkYXRlRGF0YS5ub25XaXRuZXNzVXR4bykge1xuICAgICAgYWRkTm9uV2l0bmVzc1R4Q2FjaGUoXG4gICAgICAgIHRoaXMuX19DQUNIRSxcbiAgICAgICAgdGhpcy5kYXRhLmlucHV0c1tpbnB1dEluZGV4XSxcbiAgICAgICAgaW5wdXRJbmRleCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHVwZGF0ZU91dHB1dChvdXRwdXRJbmRleCwgdXBkYXRlRGF0YSkge1xuICAgIGNvbnN0IG91dHB1dERhdGEgPSB0aGlzLmRhdGEub3V0cHV0c1tvdXRwdXRJbmRleF07XG4gICAgKDAsIGJpcDM3MV8xLmNoZWNrVGFwcm9vdE91dHB1dEZpZWxkcykoXG4gICAgICBvdXRwdXREYXRhLFxuICAgICAgdXBkYXRlRGF0YSxcbiAgICAgICd1cGRhdGVPdXRwdXQnLFxuICAgICk7XG4gICAgdGhpcy5kYXRhLnVwZGF0ZU91dHB1dChvdXRwdXRJbmRleCwgdXBkYXRlRGF0YSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgYWRkVW5rbm93bktleVZhbFRvR2xvYmFsKGtleVZhbCkge1xuICAgIHRoaXMuZGF0YS5hZGRVbmtub3duS2V5VmFsVG9HbG9iYWwoa2V5VmFsKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhZGRVbmtub3duS2V5VmFsVG9JbnB1dChpbnB1dEluZGV4LCBrZXlWYWwpIHtcbiAgICB0aGlzLmRhdGEuYWRkVW5rbm93bktleVZhbFRvSW5wdXQoaW5wdXRJbmRleCwga2V5VmFsKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhZGRVbmtub3duS2V5VmFsVG9PdXRwdXQob3V0cHV0SW5kZXgsIGtleVZhbCkge1xuICAgIHRoaXMuZGF0YS5hZGRVbmtub3duS2V5VmFsVG9PdXRwdXQob3V0cHV0SW5kZXgsIGtleVZhbCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgY2xlYXJGaW5hbGl6ZWRJbnB1dChpbnB1dEluZGV4KSB7XG4gICAgdGhpcy5kYXRhLmNsZWFyRmluYWxpemVkSW5wdXQoaW5wdXRJbmRleCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbmV4cG9ydHMuUHNidCA9IFBzYnQ7XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkIHRvIHBhc3MgdG8gdGhlIGJpcDE3NCBiYXNlIGNsYXNzJ3MgZnJvbUJ1ZmZlci5cbiAqIEl0IHRha2VzIHRoZSBcInRyYW5zYWN0aW9uIGJ1ZmZlclwiIHBvcnRpb24gb2YgdGhlIHBzYnQgYnVmZmVyIGFuZCByZXR1cm5zIGFcbiAqIFRyYW5zYWN0aW9uIChGcm9tIHRoZSBiaXAxNzQgbGlicmFyeSkgaW50ZXJmYWNlLlxuICovXG5jb25zdCB0cmFuc2FjdGlvbkZyb21CdWZmZXIgPSBidWZmZXIgPT4gbmV3IFBzYnRUcmFuc2FjdGlvbihidWZmZXIpO1xuLyoqXG4gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIFRyYW5zYWN0aW9uIGludGVyZmFjZSBmcm9tIGJpcDE3NCBsaWJyYXJ5LlxuICogSXQgY29udGFpbnMgYSBiaXRjb2luanMtbGliIFRyYW5zYWN0aW9uIG9iamVjdC5cbiAqL1xuY2xhc3MgUHNidFRyYW5zYWN0aW9uIHtcbiAgY29uc3RydWN0b3IoYnVmZmVyID0gQnVmZmVyLmZyb20oWzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdKSkge1xuICAgIHRoaXMudHggPSB0cmFuc2FjdGlvbl8xLlRyYW5zYWN0aW9uLmZyb21CdWZmZXIoYnVmZmVyKTtcbiAgICBjaGVja1R4RW1wdHkodGhpcy50eCk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0eCcsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgfSk7XG4gIH1cbiAgZ2V0SW5wdXRPdXRwdXRDb3VudHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0Q291bnQ6IHRoaXMudHguaW5zLmxlbmd0aCxcbiAgICAgIG91dHB1dENvdW50OiB0aGlzLnR4Lm91dHMubGVuZ3RoLFxuICAgIH07XG4gIH1cbiAgYWRkSW5wdXQoaW5wdXQpIHtcbiAgICBpZiAoXG4gICAgICBpbnB1dC5oYXNoID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGlucHV0LmluZGV4ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICghQnVmZmVyLmlzQnVmZmVyKGlucHV0Lmhhc2gpICYmIHR5cGVvZiBpbnB1dC5oYXNoICE9PSAnc3RyaW5nJykgfHxcbiAgICAgIHR5cGVvZiBpbnB1dC5pbmRleCAhPT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgYWRkaW5nIGlucHV0LicpO1xuICAgIH1cbiAgICBjb25zdCBoYXNoID1cbiAgICAgIHR5cGVvZiBpbnB1dC5oYXNoID09PSAnc3RyaW5nJ1xuICAgICAgICA/ICgwLCBidWZmZXJ1dGlsc18xLnJldmVyc2VCdWZmZXIpKEJ1ZmZlci5mcm9tKGlucHV0Lmhhc2gsICdoZXgnKSlcbiAgICAgICAgOiBpbnB1dC5oYXNoO1xuICAgIHRoaXMudHguYWRkSW5wdXQoaGFzaCwgaW5wdXQuaW5kZXgsIGlucHV0LnNlcXVlbmNlKTtcbiAgfVxuICBhZGRPdXRwdXQob3V0cHV0KSB7XG4gICAgaWYgKFxuICAgICAgb3V0cHV0LnNjcmlwdCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBvdXRwdXQudmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgIUJ1ZmZlci5pc0J1ZmZlcihvdXRwdXQuc2NyaXB0KSB8fFxuICAgICAgdHlwZW9mIG91dHB1dC52YWx1ZSAhPT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgYWRkaW5nIG91dHB1dC4nKTtcbiAgICB9XG4gICAgdGhpcy50eC5hZGRPdXRwdXQob3V0cHV0LnNjcmlwdCwgb3V0cHV0LnZhbHVlKTtcbiAgfVxuICB0b0J1ZmZlcigpIHtcbiAgICByZXR1cm4gdGhpcy50eC50b0J1ZmZlcigpO1xuICB9XG59XG5mdW5jdGlvbiBjYW5GaW5hbGl6ZShpbnB1dCwgc2NyaXB0LCBzY3JpcHRUeXBlKSB7XG4gIHN3aXRjaCAoc2NyaXB0VHlwZSkge1xuICAgIGNhc2UgJ3B1YmtleSc6XG4gICAgY2FzZSAncHVia2V5aGFzaCc6XG4gICAgY2FzZSAnd2l0bmVzc3B1YmtleWhhc2gnOlxuICAgICAgcmV0dXJuIGhhc1NpZ3MoMSwgaW5wdXQucGFydGlhbFNpZyk7XG4gICAgY2FzZSAnbXVsdGlzaWcnOlxuICAgICAgY29uc3QgcDJtcyA9IHBheW1lbnRzLnAybXMoeyBvdXRwdXQ6IHNjcmlwdCB9KTtcbiAgICAgIHJldHVybiBoYXNTaWdzKHAybXMubSwgaW5wdXQucGFydGlhbFNpZywgcDJtcy5wdWJrZXlzKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBjaGVja0NhY2hlKGNhY2hlKSB7XG4gIGlmIChjYWNoZS5fX1VOU0FGRV9TSUdOX05PTlNFR1dJVCAhPT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBCSVAxNzQgY29tcGxpYW50LCBjYW4gbm90IGV4cG9ydCcpO1xuICB9XG59XG5mdW5jdGlvbiBoYXNTaWdzKG5lZWRlZFNpZ3MsIHBhcnRpYWxTaWcsIHB1YmtleXMpIHtcbiAgaWYgKCFwYXJ0aWFsU2lnKSByZXR1cm4gZmFsc2U7XG4gIGxldCBzaWdzO1xuICBpZiAocHVia2V5cykge1xuICAgIHNpZ3MgPSBwdWJrZXlzXG4gICAgICAubWFwKHBrZXkgPT4ge1xuICAgICAgICBjb25zdCBwdWJrZXkgPSBjb21wcmVzc1B1YmtleShwa2V5KTtcbiAgICAgICAgcmV0dXJuIHBhcnRpYWxTaWcuZmluZChwU2lnID0+IHBTaWcucHVia2V5LmVxdWFscyhwdWJrZXkpKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKHYgPT4gISF2KTtcbiAgfSBlbHNlIHtcbiAgICBzaWdzID0gcGFydGlhbFNpZztcbiAgfVxuICBpZiAoc2lncy5sZW5ndGggPiBuZWVkZWRTaWdzKSB0aHJvdyBuZXcgRXJyb3IoJ1RvbyBtYW55IHNpZ25hdHVyZXMnKTtcbiAgcmV0dXJuIHNpZ3MubGVuZ3RoID09PSBuZWVkZWRTaWdzO1xufVxuZnVuY3Rpb24gaXNGaW5hbGl6ZWQoaW5wdXQpIHtcbiAgcmV0dXJuICEhaW5wdXQuZmluYWxTY3JpcHRTaWcgfHwgISFpbnB1dC5maW5hbFNjcmlwdFdpdG5lc3M7XG59XG5mdW5jdGlvbiBiaXAzMkRlcml2YXRpb25Jc01pbmUocm9vdCkge1xuICByZXR1cm4gZCA9PiB7XG4gICAgaWYgKCFkLm1hc3RlckZpbmdlcnByaW50LmVxdWFscyhyb290LmZpbmdlcnByaW50KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghcm9vdC5kZXJpdmVQYXRoKGQucGF0aCkucHVibGljS2V5LmVxdWFscyhkLnB1YmtleSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNoZWNrMzJCaXQobnVtKSB7XG4gIGlmIChcbiAgICB0eXBlb2YgbnVtICE9PSAnbnVtYmVyJyB8fFxuICAgIG51bSAhPT0gTWF0aC5mbG9vcihudW0pIHx8XG4gICAgbnVtID4gMHhmZmZmZmZmZiB8fFxuICAgIG51bSA8IDBcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIDMyIGJpdCBpbnRlZ2VyJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGNoZWNrRmVlcyhwc2J0LCBjYWNoZSwgb3B0cykge1xuICBjb25zdCBmZWVSYXRlID0gY2FjaGUuX19GRUVfUkFURSB8fCBwc2J0LmdldEZlZVJhdGUoKTtcbiAgY29uc3QgdnNpemUgPSBjYWNoZS5fX0VYVFJBQ1RFRF9UWC52aXJ0dWFsU2l6ZSgpO1xuICBjb25zdCBzYXRvc2hpcyA9IGZlZVJhdGUgKiB2c2l6ZTtcbiAgaWYgKGZlZVJhdGUgPj0gb3B0cy5tYXhpbXVtRmVlUmF0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBXYXJuaW5nOiBZb3UgYXJlIHBheWluZyBhcm91bmQgJHsoc2F0b3NoaXMgLyAxZTgpLnRvRml4ZWQoOCl9IGluIGAgK1xuICAgICAgICBgZmVlcywgd2hpY2ggaXMgJHtmZWVSYXRlfSBzYXRvc2hpIHBlciBieXRlIGZvciBhIHRyYW5zYWN0aW9uIGAgK1xuICAgICAgICBgd2l0aCBhIFZTaXplIG9mICR7dnNpemV9IGJ5dGVzIChzZWd3aXQgY291bnRlZCBhcyAwLjI1IGJ5dGUgcGVyIGAgK1xuICAgICAgICBgYnl0ZSkuIFVzZSBzZXRNYXhpbXVtRmVlUmF0ZSBtZXRob2QgdG8gcmFpc2UgeW91ciB0aHJlc2hvbGQsIG9yIGAgK1xuICAgICAgICBgcGFzcyB0cnVlIHRvIHRoZSBmaXJzdCBhcmcgb2YgZXh0cmFjdFRyYW5zYWN0aW9uLmAsXG4gICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gY2hlY2tJbnB1dHNGb3JQYXJ0aWFsU2lnKGlucHV0cywgYWN0aW9uKSB7XG4gIGlucHV0cy5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICBjb25zdCB0aHJvd3MgPSAoMCwgYmlwMzcxXzEuaXNUYXByb290SW5wdXQpKGlucHV0KVxuICAgICAgPyAoMCwgYmlwMzcxXzEuY2hlY2tUYXByb290SW5wdXRGb3JTaWdzKShpbnB1dCwgYWN0aW9uKVxuICAgICAgOiAoMCwgcHNidHV0aWxzXzEuY2hlY2tJbnB1dEZvclNpZykoaW5wdXQsIGFjdGlvbik7XG4gICAgaWYgKHRocm93cylcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBtb2RpZnkgdHJhbnNhY3Rpb24sIHNpZ25hdHVyZXMgZXhpc3QuJyk7XG4gIH0pO1xufVxuZnVuY3Rpb24gY2hlY2tQYXJ0aWFsU2lnU2lnaGFzaGVzKGlucHV0KSB7XG4gIGlmICghaW5wdXQuc2lnaGFzaFR5cGUgfHwgIWlucHV0LnBhcnRpYWxTaWcpIHJldHVybjtcbiAgY29uc3QgeyBwYXJ0aWFsU2lnLCBzaWdoYXNoVHlwZSB9ID0gaW5wdXQ7XG4gIHBhcnRpYWxTaWcuZm9yRWFjaChwU2lnID0+IHtcbiAgICBjb25zdCB7IGhhc2hUeXBlIH0gPSBic2NyaXB0LnNpZ25hdHVyZS5kZWNvZGUocFNpZy5zaWduYXR1cmUpO1xuICAgIGlmIChzaWdoYXNoVHlwZSAhPT0gaGFzaFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2lnbmF0dXJlIHNpZ2hhc2ggZG9lcyBub3QgbWF0Y2ggaW5wdXQgc2lnaGFzaCB0eXBlJyk7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIGNoZWNrU2NyaXB0Rm9yUHVia2V5KHB1YmtleSwgc2NyaXB0LCBhY3Rpb24pIHtcbiAgaWYgKCEoMCwgcHNidHV0aWxzXzEucHVia2V5SW5TY3JpcHQpKHB1YmtleSwgc2NyaXB0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDYW4gbm90ICR7YWN0aW9ufSBmb3IgdGhpcyBpbnB1dCB3aXRoIHRoZSBrZXkgJHtwdWJrZXkudG9TdHJpbmcoJ2hleCcpfWAsXG4gICAgKTtcbiAgfVxufVxuZnVuY3Rpb24gY2hlY2tUeEVtcHR5KHR4KSB7XG4gIGNvbnN0IGlzRW1wdHkgPSB0eC5pbnMuZXZlcnkoXG4gICAgaW5wdXQgPT5cbiAgICAgIGlucHV0LnNjcmlwdCAmJlxuICAgICAgaW5wdXQuc2NyaXB0Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgaW5wdXQud2l0bmVzcyAmJlxuICAgICAgaW5wdXQud2l0bmVzcy5sZW5ndGggPT09IDAsXG4gICk7XG4gIGlmICghaXNFbXB0eSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRm9ybWF0IEVycm9yOiBUcmFuc2FjdGlvbiBTY3JpcHRTaWdzIGFyZSBub3QgZW1wdHknKTtcbiAgfVxufVxuZnVuY3Rpb24gY2hlY2tUeEZvckR1cGVJbnModHgsIGNhY2hlKSB7XG4gIHR4Lmlucy5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICBjaGVja1R4SW5wdXRDYWNoZShjYWNoZSwgaW5wdXQpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGNoZWNrVHhJbnB1dENhY2hlKGNhY2hlLCBpbnB1dCkge1xuICBjb25zdCBrZXkgPVxuICAgICgwLCBidWZmZXJ1dGlsc18xLnJldmVyc2VCdWZmZXIpKEJ1ZmZlci5mcm9tKGlucHV0Lmhhc2gpKS50b1N0cmluZygnaGV4JykgK1xuICAgICc6JyArXG4gICAgaW5wdXQuaW5kZXg7XG4gIGlmIChjYWNoZS5fX1RYX0lOX0NBQ0hFW2tleV0pIHRocm93IG5ldyBFcnJvcignRHVwbGljYXRlIGlucHV0IGRldGVjdGVkLicpO1xuICBjYWNoZS5fX1RYX0lOX0NBQ0hFW2tleV0gPSAxO1xufVxuZnVuY3Rpb24gc2NyaXB0Q2hlY2tlckZhY3RvcnkocGF5bWVudCwgcGF5bWVudFNjcmlwdE5hbWUpIHtcbiAgcmV0dXJuIChpbnB1dEluZGV4LCBzY3JpcHRQdWJLZXksIHJlZGVlbVNjcmlwdCwgaW9UeXBlKSA9PiB7XG4gICAgY29uc3QgcmVkZWVtU2NyaXB0T3V0cHV0ID0gcGF5bWVudCh7XG4gICAgICByZWRlZW06IHsgb3V0cHV0OiByZWRlZW1TY3JpcHQgfSxcbiAgICB9KS5vdXRwdXQ7XG4gICAgaWYgKCFzY3JpcHRQdWJLZXkuZXF1YWxzKHJlZGVlbVNjcmlwdE91dHB1dCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7cGF5bWVudFNjcmlwdE5hbWV9IGZvciAke2lvVHlwZX0gIyR7aW5wdXRJbmRleH0gZG9lc24ndCBtYXRjaCB0aGUgc2NyaXB0UHViS2V5IGluIHRoZSBwcmV2b3V0YCxcbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuY29uc3QgY2hlY2tSZWRlZW1TY3JpcHQgPSBzY3JpcHRDaGVja2VyRmFjdG9yeShwYXltZW50cy5wMnNoLCAnUmVkZWVtIHNjcmlwdCcpO1xuY29uc3QgY2hlY2tXaXRuZXNzU2NyaXB0ID0gc2NyaXB0Q2hlY2tlckZhY3RvcnkoXG4gIHBheW1lbnRzLnAyd3NoLFxuICAnV2l0bmVzcyBzY3JpcHQnLFxuKTtcbmZ1bmN0aW9uIGdldFR4Q2FjaGVWYWx1ZShrZXksIG5hbWUsIGlucHV0cywgYykge1xuICBpZiAoIWlucHV0cy5ldmVyeShpc0ZpbmFsaXplZCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBQU0JUIG11c3QgYmUgZmluYWxpemVkIHRvIGNhbGN1bGF0ZSAke25hbWV9YCk7XG4gIGlmIChrZXkgPT09ICdfX0ZFRV9SQVRFJyAmJiBjLl9fRkVFX1JBVEUpIHJldHVybiBjLl9fRkVFX1JBVEU7XG4gIGlmIChrZXkgPT09ICdfX0ZFRScgJiYgYy5fX0ZFRSkgcmV0dXJuIGMuX19GRUU7XG4gIGxldCB0eDtcbiAgbGV0IG11c3RGaW5hbGl6ZSA9IHRydWU7XG4gIGlmIChjLl9fRVhUUkFDVEVEX1RYKSB7XG4gICAgdHggPSBjLl9fRVhUUkFDVEVEX1RYO1xuICAgIG11c3RGaW5hbGl6ZSA9IGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHR4ID0gYy5fX1RYLmNsb25lKCk7XG4gIH1cbiAgaW5wdXRGaW5hbGl6ZUdldEFtdHMoaW5wdXRzLCB0eCwgYywgbXVzdEZpbmFsaXplKTtcbiAgaWYgKGtleSA9PT0gJ19fRkVFX1JBVEUnKSByZXR1cm4gYy5fX0ZFRV9SQVRFO1xuICBlbHNlIGlmIChrZXkgPT09ICdfX0ZFRScpIHJldHVybiBjLl9fRkVFO1xufVxuZnVuY3Rpb24gZ2V0RmluYWxTY3JpcHRzKGlucHV0SW5kZXgsIGlucHV0LCBzY3JpcHQsIGlzU2Vnd2l0LCBpc1AyU0gsIGlzUDJXU0gpIHtcbiAgY29uc3Qgc2NyaXB0VHlwZSA9IGNsYXNzaWZ5U2NyaXB0KHNjcmlwdCk7XG4gIGlmICghY2FuRmluYWxpemUoaW5wdXQsIHNjcmlwdCwgc2NyaXB0VHlwZSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGZpbmFsaXplIGlucHV0ICMke2lucHV0SW5kZXh9YCk7XG4gIHJldHVybiBwcmVwYXJlRmluYWxTY3JpcHRzKFxuICAgIHNjcmlwdCxcbiAgICBzY3JpcHRUeXBlLFxuICAgIGlucHV0LnBhcnRpYWxTaWcsXG4gICAgaXNTZWd3aXQsXG4gICAgaXNQMlNILFxuICAgIGlzUDJXU0gsXG4gICk7XG59XG5mdW5jdGlvbiBwcmVwYXJlRmluYWxTY3JpcHRzKFxuICBzY3JpcHQsXG4gIHNjcmlwdFR5cGUsXG4gIHBhcnRpYWxTaWcsXG4gIGlzU2Vnd2l0LFxuICBpc1AyU0gsXG4gIGlzUDJXU0gsXG4pIHtcbiAgbGV0IGZpbmFsU2NyaXB0U2lnO1xuICBsZXQgZmluYWxTY3JpcHRXaXRuZXNzO1xuICAvLyBXb3csIHRoZSBwYXltZW50cyBBUEkgaXMgdmVyeSBoYW5keVxuICBjb25zdCBwYXltZW50ID0gZ2V0UGF5bWVudChzY3JpcHQsIHNjcmlwdFR5cGUsIHBhcnRpYWxTaWcpO1xuICBjb25zdCBwMndzaCA9ICFpc1AyV1NIID8gbnVsbCA6IHBheW1lbnRzLnAyd3NoKHsgcmVkZWVtOiBwYXltZW50IH0pO1xuICBjb25zdCBwMnNoID0gIWlzUDJTSCA/IG51bGwgOiBwYXltZW50cy5wMnNoKHsgcmVkZWVtOiBwMndzaCB8fCBwYXltZW50IH0pO1xuICBpZiAoaXNTZWd3aXQpIHtcbiAgICBpZiAocDJ3c2gpIHtcbiAgICAgIGZpbmFsU2NyaXB0V2l0bmVzcyA9ICgwLCBwc2J0dXRpbHNfMS53aXRuZXNzU3RhY2tUb1NjcmlwdFdpdG5lc3MpKFxuICAgICAgICBwMndzaC53aXRuZXNzLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmluYWxTY3JpcHRXaXRuZXNzID0gKDAsIHBzYnR1dGlsc18xLndpdG5lc3NTdGFja1RvU2NyaXB0V2l0bmVzcykoXG4gICAgICAgIHBheW1lbnQud2l0bmVzcyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwMnNoKSB7XG4gICAgICBmaW5hbFNjcmlwdFNpZyA9IHAyc2guaW5wdXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChwMnNoKSB7XG4gICAgICBmaW5hbFNjcmlwdFNpZyA9IHAyc2guaW5wdXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbmFsU2NyaXB0U2lnID0gcGF5bWVudC5pbnB1dDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBmaW5hbFNjcmlwdFNpZyxcbiAgICBmaW5hbFNjcmlwdFdpdG5lc3MsXG4gIH07XG59XG5mdW5jdGlvbiBnZXRIYXNoQW5kU2lnaGFzaFR5cGUoXG4gIGlucHV0cyxcbiAgaW5wdXRJbmRleCxcbiAgcHVia2V5LFxuICBjYWNoZSxcbiAgc2lnaGFzaFR5cGVzLFxuKSB7XG4gIGNvbnN0IGlucHV0ID0gKDAsIHV0aWxzXzEuY2hlY2tGb3JJbnB1dCkoaW5wdXRzLCBpbnB1dEluZGV4KTtcbiAgY29uc3QgeyBoYXNoLCBzaWdoYXNoVHlwZSwgc2NyaXB0IH0gPSBnZXRIYXNoRm9yU2lnKFxuICAgIGlucHV0SW5kZXgsXG4gICAgaW5wdXQsXG4gICAgY2FjaGUsXG4gICAgZmFsc2UsXG4gICAgc2lnaGFzaFR5cGVzLFxuICApO1xuICBjaGVja1NjcmlwdEZvclB1YmtleShwdWJrZXksIHNjcmlwdCwgJ3NpZ24nKTtcbiAgcmV0dXJuIHtcbiAgICBoYXNoLFxuICAgIHNpZ2hhc2hUeXBlLFxuICB9O1xufVxuZnVuY3Rpb24gZ2V0SGFzaEZvclNpZyhpbnB1dEluZGV4LCBpbnB1dCwgY2FjaGUsIGZvclZhbGlkYXRlLCBzaWdoYXNoVHlwZXMpIHtcbiAgY29uc3QgdW5zaWduZWRUeCA9IGNhY2hlLl9fVFg7XG4gIGNvbnN0IHNpZ2hhc2hUeXBlID1cbiAgICBpbnB1dC5zaWdoYXNoVHlwZSB8fCB0cmFuc2FjdGlvbl8xLlRyYW5zYWN0aW9uLlNJR0hBU0hfQUxMO1xuICBjaGVja1NpZ2hhc2hUeXBlQWxsb3dlZChzaWdoYXNoVHlwZSwgc2lnaGFzaFR5cGVzKTtcbiAgbGV0IGhhc2g7XG4gIGxldCBwcmV2b3V0O1xuICBpZiAoaW5wdXQubm9uV2l0bmVzc1V0eG8pIHtcbiAgICBjb25zdCBub25XaXRuZXNzVXR4b1R4ID0gbm9uV2l0bmVzc1V0eG9UeEZyb21DYWNoZShcbiAgICAgIGNhY2hlLFxuICAgICAgaW5wdXQsXG4gICAgICBpbnB1dEluZGV4LFxuICAgICk7XG4gICAgY29uc3QgcHJldm91dEhhc2ggPSB1bnNpZ25lZFR4Lmluc1tpbnB1dEluZGV4XS5oYXNoO1xuICAgIGNvbnN0IHV0eG9IYXNoID0gbm9uV2l0bmVzc1V0eG9UeC5nZXRIYXNoKCk7XG4gICAgLy8gSWYgYSBub24td2l0bmVzcyBVVFhPIGlzIHByb3ZpZGVkLCBpdHMgaGFzaCBtdXN0IG1hdGNoIHRoZSBoYXNoIHNwZWNpZmllZCBpbiB0aGUgcHJldm91dFxuICAgIGlmICghcHJldm91dEhhc2guZXF1YWxzKHV0eG9IYXNoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTm9uLXdpdG5lc3MgVVRYTyBoYXNoIGZvciBpbnB1dCAjJHtpbnB1dEluZGV4fSBkb2Vzbid0IG1hdGNoIHRoZSBoYXNoIHNwZWNpZmllZCBpbiB0aGUgcHJldm91dGAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBwcmV2b3V0SW5kZXggPSB1bnNpZ25lZFR4Lmluc1tpbnB1dEluZGV4XS5pbmRleDtcbiAgICBwcmV2b3V0ID0gbm9uV2l0bmVzc1V0eG9UeC5vdXRzW3ByZXZvdXRJbmRleF07XG4gIH0gZWxzZSBpZiAoaW5wdXQud2l0bmVzc1V0eG8pIHtcbiAgICBwcmV2b3V0ID0gaW5wdXQud2l0bmVzc1V0eG87XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOZWVkIGEgVXR4byBpbnB1dCBpdGVtIGZvciBzaWduaW5nJyk7XG4gIH1cbiAgY29uc3QgeyBtZWFuaW5nZnVsU2NyaXB0LCB0eXBlIH0gPSBnZXRNZWFuaW5nZnVsU2NyaXB0KFxuICAgIHByZXZvdXQuc2NyaXB0LFxuICAgIGlucHV0SW5kZXgsXG4gICAgJ2lucHV0JyxcbiAgICBpbnB1dC5yZWRlZW1TY3JpcHQsXG4gICAgaW5wdXQud2l0bmVzc1NjcmlwdCxcbiAgKTtcbiAgaWYgKFsncDJzaC1wMndzaCcsICdwMndzaCddLmluZGV4T2YodHlwZSkgPj0gMCkge1xuICAgIGhhc2ggPSB1bnNpZ25lZFR4Lmhhc2hGb3JXaXRuZXNzVjAoXG4gICAgICBpbnB1dEluZGV4LFxuICAgICAgbWVhbmluZ2Z1bFNjcmlwdCxcbiAgICAgIHByZXZvdXQudmFsdWUsXG4gICAgICBzaWdoYXNoVHlwZSxcbiAgICApO1xuICB9IGVsc2UgaWYgKCgwLCBwc2J0dXRpbHNfMS5pc1AyV1BLSCkobWVhbmluZ2Z1bFNjcmlwdCkpIHtcbiAgICAvLyBQMldQS0ggdXNlcyB0aGUgUDJQS0ggdGVtcGxhdGUgZm9yIHByZXZvdXRTY3JpcHQgd2hlbiBzaWduaW5nXG4gICAgY29uc3Qgc2lnbmluZ1NjcmlwdCA9IHBheW1lbnRzLnAycGtoKHtcbiAgICAgIGhhc2g6IG1lYW5pbmdmdWxTY3JpcHQuc2xpY2UoMiksXG4gICAgfSkub3V0cHV0O1xuICAgIGhhc2ggPSB1bnNpZ25lZFR4Lmhhc2hGb3JXaXRuZXNzVjAoXG4gICAgICBpbnB1dEluZGV4LFxuICAgICAgc2lnbmluZ1NjcmlwdCxcbiAgICAgIHByZXZvdXQudmFsdWUsXG4gICAgICBzaWdoYXNoVHlwZSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIG5vbi1zZWd3aXRcbiAgICBpZiAoXG4gICAgICBpbnB1dC5ub25XaXRuZXNzVXR4byA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBjYWNoZS5fX1VOU0FGRV9TSUdOX05PTlNFR1dJVCA9PT0gZmFsc2VcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnB1dCAjJHtpbnB1dEluZGV4fSBoYXMgd2l0bmVzc1V0eG8gYnV0IG5vbi1zZWd3aXQgc2NyaXB0OiBgICtcbiAgICAgICAgICBgJHttZWFuaW5nZnVsU2NyaXB0LnRvU3RyaW5nKCdoZXgnKX1gLFxuICAgICAgKTtcbiAgICBpZiAoIWZvclZhbGlkYXRlICYmIGNhY2hlLl9fVU5TQUZFX1NJR05fTk9OU0VHV0lUICE9PSBmYWxzZSlcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1dhcm5pbmc6IFNpZ25pbmcgbm9uLXNlZ3dpdCBpbnB1dHMgd2l0aG91dCB0aGUgZnVsbCBwYXJlbnQgdHJhbnNhY3Rpb24gJyArXG4gICAgICAgICAgJ21lYW5zIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgYSBtaW5lciBjb3VsZCBmZWVkIHlvdSBpbmNvcnJlY3QgaW5mb3JtYXRpb24gJyArXG4gICAgICAgICAgXCJ0byB0cmljayB5b3UgaW50byBwYXlpbmcgbGFyZ2UgZmVlcy4gVGhpcyBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBQc2J0J3MgcHJlZGVjZXNzb3IgXCIgK1xuICAgICAgICAgICcoVHJhbnNhY3Rpb25CdWlsZGVyIC0gbm93IHJlbW92ZWQpIHdoZW4gc2lnbmluZyBub24tc2Vnd2l0IHNjcmlwdHMuIFlvdSBhcmUgbm90ICcgK1xuICAgICAgICAgICdhYmxlIHRvIGV4cG9ydCB0aGlzIFBzYnQgd2l0aCB0b0J1ZmZlcnx0b0Jhc2U2NHx0b0hleCBzaW5jZSBpdCBpcyBub3QgJyArXG4gICAgICAgICAgJ0JJUDE3NCBjb21wbGlhbnQuXFxuKioqKioqKioqKioqKioqKioqKioqXFxuUFJPQ0VFRCBXSVRIIENBVVRJT04hXFxuJyArXG4gICAgICAgICAgJyoqKioqKioqKioqKioqKioqKioqKicsXG4gICAgICApO1xuICAgIGhhc2ggPSB1bnNpZ25lZFR4Lmhhc2hGb3JTaWduYXR1cmUoXG4gICAgICBpbnB1dEluZGV4LFxuICAgICAgbWVhbmluZ2Z1bFNjcmlwdCxcbiAgICAgIHNpZ2hhc2hUeXBlLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JpcHQ6IG1lYW5pbmdmdWxTY3JpcHQsXG4gICAgc2lnaGFzaFR5cGUsXG4gICAgaGFzaCxcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldEFsbFRhcHJvb3RIYXNoZXNGb3JTaWcoaW5wdXRJbmRleCwgaW5wdXQsIGlucHV0cywgY2FjaGUpIHtcbiAgY29uc3QgYWxsUHVibGljS2V5cyA9IFtdO1xuICBpZiAoaW5wdXQudGFwSW50ZXJuYWxLZXkpIHtcbiAgICBjb25zdCBrZXkgPSBnZXRQcmV2b3V0VGFwcm9vdEtleShpbnB1dEluZGV4LCBpbnB1dCwgY2FjaGUpO1xuICAgIGlmIChrZXkpIHtcbiAgICAgIGFsbFB1YmxpY0tleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICBpZiAoaW5wdXQudGFwU2NyaXB0U2lnKSB7XG4gICAgY29uc3QgdGFwU2NyaXB0UHVia2V5cyA9IGlucHV0LnRhcFNjcmlwdFNpZy5tYXAodHNzID0+IHRzcy5wdWJrZXkpO1xuICAgIGFsbFB1YmxpY0tleXMucHVzaCguLi50YXBTY3JpcHRQdWJrZXlzKTtcbiAgfVxuICBjb25zdCBhbGxIYXNoZXMgPSBhbGxQdWJsaWNLZXlzLm1hcChwdWJpY0tleSA9PlxuICAgIGdldFRhcHJvb3RIYXNoZXNGb3JTaWcoaW5wdXRJbmRleCwgaW5wdXQsIGlucHV0cywgcHViaWNLZXksIGNhY2hlKSxcbiAgKTtcbiAgcmV0dXJuIGFsbEhhc2hlcy5mbGF0KCk7XG59XG5mdW5jdGlvbiBnZXRQcmV2b3V0VGFwcm9vdEtleShpbnB1dEluZGV4LCBpbnB1dCwgY2FjaGUpIHtcbiAgY29uc3QgeyBzY3JpcHQgfSA9IGdldFNjcmlwdEFuZEFtb3VudEZyb21VdHhvKGlucHV0SW5kZXgsIGlucHV0LCBjYWNoZSk7XG4gIHJldHVybiAoMCwgcHNidHV0aWxzXzEuaXNQMlRSKShzY3JpcHQpID8gc2NyaXB0LnN1YmFycmF5KDIsIDM0KSA6IG51bGw7XG59XG5mdW5jdGlvbiB0cmltVGFwcm9vdFNpZyhzaWduYXR1cmUpIHtcbiAgcmV0dXJuIHNpZ25hdHVyZS5sZW5ndGggPT09IDY0ID8gc2lnbmF0dXJlIDogc2lnbmF0dXJlLnN1YmFycmF5KDAsIDY0KTtcbn1cbmZ1bmN0aW9uIGdldFRhcHJvb3RIYXNoZXNGb3JTaWcoXG4gIGlucHV0SW5kZXgsXG4gIGlucHV0LFxuICBpbnB1dHMsXG4gIHB1YmtleSxcbiAgY2FjaGUsXG4gIHRhcExlYWZIYXNoVG9TaWduLFxuICBhbGxvd2VkU2lnaGFzaFR5cGVzLFxuKSB7XG4gIGNvbnN0IHVuc2lnbmVkVHggPSBjYWNoZS5fX1RYO1xuICBjb25zdCBzaWdoYXNoVHlwZSA9XG4gICAgaW5wdXQuc2lnaGFzaFR5cGUgfHwgdHJhbnNhY3Rpb25fMS5UcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFQ7XG4gIGNoZWNrU2lnaGFzaFR5cGVBbGxvd2VkKHNpZ2hhc2hUeXBlLCBhbGxvd2VkU2lnaGFzaFR5cGVzKTtcbiAgY29uc3QgcHJldk91dHMgPSBpbnB1dHMubWFwKChpLCBpbmRleCkgPT5cbiAgICBnZXRTY3JpcHRBbmRBbW91bnRGcm9tVXR4byhpbmRleCwgaSwgY2FjaGUpLFxuICApO1xuICBjb25zdCBzaWduaW5nU2NyaXB0cyA9IHByZXZPdXRzLm1hcChvID0+IG8uc2NyaXB0KTtcbiAgY29uc3QgdmFsdWVzID0gcHJldk91dHMubWFwKG8gPT4gby52YWx1ZSk7XG4gIGNvbnN0IGhhc2hlcyA9IFtdO1xuICBpZiAoaW5wdXQudGFwSW50ZXJuYWxLZXkgJiYgIXRhcExlYWZIYXNoVG9TaWduKSB7XG4gICAgY29uc3Qgb3V0cHV0S2V5ID1cbiAgICAgIGdldFByZXZvdXRUYXByb290S2V5KGlucHV0SW5kZXgsIGlucHV0LCBjYWNoZSkgfHwgQnVmZmVyLmZyb20oW10pO1xuICAgIGlmICgoMCwgYmlwMzcxXzEudG9YT25seSkocHVia2V5KS5lcXVhbHMob3V0cHV0S2V5KSkge1xuICAgICAgY29uc3QgdGFwS2V5SGFzaCA9IHVuc2lnbmVkVHguaGFzaEZvcldpdG5lc3NWMShcbiAgICAgICAgaW5wdXRJbmRleCxcbiAgICAgICAgc2lnbmluZ1NjcmlwdHMsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgc2lnaGFzaFR5cGUsXG4gICAgICApO1xuICAgICAgaGFzaGVzLnB1c2goeyBwdWJrZXksIGhhc2g6IHRhcEtleUhhc2ggfSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHRhcExlYWZIYXNoZXMgPSAoaW5wdXQudGFwTGVhZlNjcmlwdCB8fCBbXSlcbiAgICAuZmlsdGVyKHRhcExlYWYgPT4gKDAsIHBzYnR1dGlsc18xLnB1YmtleUluU2NyaXB0KShwdWJrZXksIHRhcExlYWYuc2NyaXB0KSlcbiAgICAubWFwKHRhcExlYWYgPT4ge1xuICAgICAgY29uc3QgaGFzaCA9ICgwLCBiaXAzNDFfMS50YXBsZWFmSGFzaCkoe1xuICAgICAgICBvdXRwdXQ6IHRhcExlYWYuc2NyaXB0LFxuICAgICAgICB2ZXJzaW9uOiB0YXBMZWFmLmxlYWZWZXJzaW9uLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7IGhhc2ggfSwgdGFwTGVhZik7XG4gICAgfSlcbiAgICAuZmlsdGVyKFxuICAgICAgdGFwTGVhZiA9PiAhdGFwTGVhZkhhc2hUb1NpZ24gfHwgdGFwTGVhZkhhc2hUb1NpZ24uZXF1YWxzKHRhcExlYWYuaGFzaCksXG4gICAgKVxuICAgIC5tYXAodGFwTGVhZiA9PiB7XG4gICAgICBjb25zdCB0YXBTY3JpcHRIYXNoID0gdW5zaWduZWRUeC5oYXNoRm9yV2l0bmVzc1YxKFxuICAgICAgICBpbnB1dEluZGV4LFxuICAgICAgICBzaWduaW5nU2NyaXB0cyxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBzaWdoYXNoVHlwZSxcbiAgICAgICAgdGFwTGVhZi5oYXNoLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHB1YmtleSxcbiAgICAgICAgaGFzaDogdGFwU2NyaXB0SGFzaCxcbiAgICAgICAgbGVhZkhhc2g6IHRhcExlYWYuaGFzaCxcbiAgICAgIH07XG4gICAgfSk7XG4gIHJldHVybiBoYXNoZXMuY29uY2F0KHRhcExlYWZIYXNoZXMpO1xufVxuZnVuY3Rpb24gY2hlY2tTaWdoYXNoVHlwZUFsbG93ZWQoc2lnaGFzaFR5cGUsIHNpZ2hhc2hUeXBlcykge1xuICBpZiAoc2lnaGFzaFR5cGVzICYmIHNpZ2hhc2hUeXBlcy5pbmRleE9mKHNpZ2hhc2hUeXBlKSA8IDApIHtcbiAgICBjb25zdCBzdHIgPSBzaWdoYXNoVHlwZVRvU3RyaW5nKHNpZ2hhc2hUeXBlKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgU2lnaGFzaCB0eXBlIGlzIG5vdCBhbGxvd2VkLiBSZXRyeSB0aGUgc2lnbiBtZXRob2QgcGFzc2luZyB0aGUgYCArXG4gICAgICAgIGBzaWdoYXNoVHlwZXMgYXJyYXkgb2Ygd2hpdGVsaXN0ZWQgdHlwZXMuIFNpZ2hhc2ggdHlwZTogJHtzdHJ9YCxcbiAgICApO1xuICB9XG59XG5mdW5jdGlvbiBnZXRQYXltZW50KHNjcmlwdCwgc2NyaXB0VHlwZSwgcGFydGlhbFNpZykge1xuICBsZXQgcGF5bWVudDtcbiAgc3dpdGNoIChzY3JpcHRUeXBlKSB7XG4gICAgY2FzZSAnbXVsdGlzaWcnOlxuICAgICAgY29uc3Qgc2lncyA9IGdldFNvcnRlZFNpZ3Moc2NyaXB0LCBwYXJ0aWFsU2lnKTtcbiAgICAgIHBheW1lbnQgPSBwYXltZW50cy5wMm1zKHtcbiAgICAgICAgb3V0cHV0OiBzY3JpcHQsXG4gICAgICAgIHNpZ25hdHVyZXM6IHNpZ3MsXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3B1YmtleSc6XG4gICAgICBwYXltZW50ID0gcGF5bWVudHMucDJwayh7XG4gICAgICAgIG91dHB1dDogc2NyaXB0LFxuICAgICAgICBzaWduYXR1cmU6IHBhcnRpYWxTaWdbMF0uc2lnbmF0dXJlLFxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwdWJrZXloYXNoJzpcbiAgICAgIHBheW1lbnQgPSBwYXltZW50cy5wMnBraCh7XG4gICAgICAgIG91dHB1dDogc2NyaXB0LFxuICAgICAgICBwdWJrZXk6IHBhcnRpYWxTaWdbMF0ucHVia2V5LFxuICAgICAgICBzaWduYXR1cmU6IHBhcnRpYWxTaWdbMF0uc2lnbmF0dXJlLFxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd3aXRuZXNzcHVia2V5aGFzaCc6XG4gICAgICBwYXltZW50ID0gcGF5bWVudHMucDJ3cGtoKHtcbiAgICAgICAgb3V0cHV0OiBzY3JpcHQsXG4gICAgICAgIHB1YmtleTogcGFydGlhbFNpZ1swXS5wdWJrZXksXG4gICAgICAgIHNpZ25hdHVyZTogcGFydGlhbFNpZ1swXS5zaWduYXR1cmUsXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBwYXltZW50O1xufVxuZnVuY3Rpb24gZ2V0U2NyaXB0RnJvbUlucHV0KGlucHV0SW5kZXgsIGlucHV0LCBjYWNoZSkge1xuICBjb25zdCB1bnNpZ25lZFR4ID0gY2FjaGUuX19UWDtcbiAgY29uc3QgcmVzID0ge1xuICAgIHNjcmlwdDogbnVsbCxcbiAgICBpc1NlZ3dpdDogZmFsc2UsXG4gICAgaXNQMlNIOiBmYWxzZSxcbiAgICBpc1AyV1NIOiBmYWxzZSxcbiAgfTtcbiAgcmVzLmlzUDJTSCA9ICEhaW5wdXQucmVkZWVtU2NyaXB0O1xuICByZXMuaXNQMldTSCA9ICEhaW5wdXQud2l0bmVzc1NjcmlwdDtcbiAgaWYgKGlucHV0LndpdG5lc3NTY3JpcHQpIHtcbiAgICByZXMuc2NyaXB0ID0gaW5wdXQud2l0bmVzc1NjcmlwdDtcbiAgfSBlbHNlIGlmIChpbnB1dC5yZWRlZW1TY3JpcHQpIHtcbiAgICByZXMuc2NyaXB0ID0gaW5wdXQucmVkZWVtU2NyaXB0O1xuICB9IGVsc2Uge1xuICAgIGlmIChpbnB1dC5ub25XaXRuZXNzVXR4bykge1xuICAgICAgY29uc3Qgbm9uV2l0bmVzc1V0eG9UeCA9IG5vbldpdG5lc3NVdHhvVHhGcm9tQ2FjaGUoXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgaW5wdXRJbmRleCxcbiAgICAgICk7XG4gICAgICBjb25zdCBwcmV2b3V0SW5kZXggPSB1bnNpZ25lZFR4Lmluc1tpbnB1dEluZGV4XS5pbmRleDtcbiAgICAgIHJlcy5zY3JpcHQgPSBub25XaXRuZXNzVXR4b1R4Lm91dHNbcHJldm91dEluZGV4XS5zY3JpcHQ7XG4gICAgfSBlbHNlIGlmIChpbnB1dC53aXRuZXNzVXR4bykge1xuICAgICAgcmVzLnNjcmlwdCA9IGlucHV0LndpdG5lc3NVdHhvLnNjcmlwdDtcbiAgICB9XG4gIH1cbiAgaWYgKGlucHV0LndpdG5lc3NTY3JpcHQgfHwgKDAsIHBzYnR1dGlsc18xLmlzUDJXUEtIKShyZXMuc2NyaXB0KSkge1xuICAgIHJlcy5pc1NlZ3dpdCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGdldFNpZ25lcnNGcm9tSEQoaW5wdXRJbmRleCwgaW5wdXRzLCBoZEtleVBhaXIpIHtcbiAgY29uc3QgaW5wdXQgPSAoMCwgdXRpbHNfMS5jaGVja0ZvcklucHV0KShpbnB1dHMsIGlucHV0SW5kZXgpO1xuICBpZiAoIWlucHV0LmJpcDMyRGVyaXZhdGlvbiB8fCBpbnB1dC5iaXAzMkRlcml2YXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOZWVkIGJpcDMyRGVyaXZhdGlvbiB0byBzaWduIHdpdGggSEQnKTtcbiAgfVxuICBjb25zdCBteURlcml2YXRpb25zID0gaW5wdXQuYmlwMzJEZXJpdmF0aW9uXG4gICAgLm1hcChiaXBEdiA9PiB7XG4gICAgICBpZiAoYmlwRHYubWFzdGVyRmluZ2VycHJpbnQuZXF1YWxzKGhkS2V5UGFpci5maW5nZXJwcmludCkpIHtcbiAgICAgICAgcmV0dXJuIGJpcER2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmZpbHRlcih2ID0+ICEhdik7XG4gIGlmIChteURlcml2YXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdOZWVkIG9uZSBiaXAzMkRlcml2YXRpb24gbWFzdGVyRmluZ2VycHJpbnQgdG8gbWF0Y2ggdGhlIEhEU2lnbmVyIGZpbmdlcnByaW50JyxcbiAgICApO1xuICB9XG4gIGNvbnN0IHNpZ25lcnMgPSBteURlcml2YXRpb25zLm1hcChiaXBEdiA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IGhkS2V5UGFpci5kZXJpdmVQYXRoKGJpcER2LnBhdGgpO1xuICAgIGlmICghYmlwRHYucHVia2V5LmVxdWFscyhub2RlLnB1YmxpY0tleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHVia2V5IGRpZCBub3QgbWF0Y2ggYmlwMzJEZXJpdmF0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9KTtcbiAgcmV0dXJuIHNpZ25lcnM7XG59XG5mdW5jdGlvbiBnZXRTb3J0ZWRTaWdzKHNjcmlwdCwgcGFydGlhbFNpZykge1xuICBjb25zdCBwMm1zID0gcGF5bWVudHMucDJtcyh7IG91dHB1dDogc2NyaXB0IH0pO1xuICAvLyBmb3IgZWFjaCBwdWJrZXkgaW4gb3JkZXIgb2YgcDJtcyBzY3JpcHRcbiAgcmV0dXJuIHAybXMucHVia2V5c1xuICAgIC5tYXAocGsgPT4ge1xuICAgICAgLy8gZmlsdGVyIHBhcnRpYWxTaWcgYXJyYXkgYnkgcHVia2V5IGJlaW5nIGVxdWFsXG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXJ0aWFsU2lnLmZpbHRlcihwcyA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBzLnB1YmtleS5lcXVhbHMocGspO1xuICAgICAgICB9KVswXSB8fCB7fVxuICAgICAgKS5zaWduYXR1cmU7XG4gICAgICAvLyBBbnkgcHVia2V5IHdpdGhvdXQgYSBtYXRjaCB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICAgIC8vIHRoaXMgbGFzdCBmaWx0ZXIgcmVtb3ZlcyBhbGwgdGhlIHVuZGVmaW5lZCBpdGVtcyBpbiB0aGUgYXJyYXkuXG4gICAgfSlcbiAgICAuZmlsdGVyKHYgPT4gISF2KTtcbn1cbmZ1bmN0aW9uIHNjcmlwdFdpdG5lc3NUb1dpdG5lc3NTdGFjayhidWZmZXIpIHtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGZ1bmN0aW9uIHJlYWRTbGljZShuKSB7XG4gICAgb2Zmc2V0ICs9IG47XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZShvZmZzZXQgLSBuLCBvZmZzZXQpO1xuICB9XG4gIGZ1bmN0aW9uIHJlYWRWYXJJbnQoKSB7XG4gICAgY29uc3QgdmkgPSB2YXJ1aW50LmRlY29kZShidWZmZXIsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IHZhcnVpbnQuZGVjb2RlLmJ5dGVzO1xuICAgIHJldHVybiB2aTtcbiAgfVxuICBmdW5jdGlvbiByZWFkVmFyU2xpY2UoKSB7XG4gICAgcmV0dXJuIHJlYWRTbGljZShyZWFkVmFySW50KCkpO1xuICB9XG4gIGZ1bmN0aW9uIHJlYWRWZWN0b3IoKSB7XG4gICAgY29uc3QgY291bnQgPSByZWFkVmFySW50KCk7XG4gICAgY29uc3QgdmVjdG9yID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB2ZWN0b3IucHVzaChyZWFkVmFyU2xpY2UoKSk7XG4gICAgcmV0dXJuIHZlY3RvcjtcbiAgfVxuICByZXR1cm4gcmVhZFZlY3RvcigpO1xufVxuZnVuY3Rpb24gc2lnaGFzaFR5cGVUb1N0cmluZyhzaWdoYXNoVHlwZSkge1xuICBsZXQgdGV4dCA9XG4gICAgc2lnaGFzaFR5cGUgJiB0cmFuc2FjdGlvbl8xLlRyYW5zYWN0aW9uLlNJR0hBU0hfQU5ZT05FQ0FOUEFZXG4gICAgICA/ICdTSUdIQVNIX0FOWU9ORUNBTlBBWSB8ICdcbiAgICAgIDogJyc7XG4gIGNvbnN0IHNpZ01vZCA9IHNpZ2hhc2hUeXBlICYgMHgxZjtcbiAgc3dpdGNoIChzaWdNb2QpIHtcbiAgICBjYXNlIHRyYW5zYWN0aW9uXzEuVHJhbnNhY3Rpb24uU0lHSEFTSF9BTEw6XG4gICAgICB0ZXh0ICs9ICdTSUdIQVNIX0FMTCc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIHRyYW5zYWN0aW9uXzEuVHJhbnNhY3Rpb24uU0lHSEFTSF9TSU5HTEU6XG4gICAgICB0ZXh0ICs9ICdTSUdIQVNIX1NJTkdMRSc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIHRyYW5zYWN0aW9uXzEuVHJhbnNhY3Rpb24uU0lHSEFTSF9OT05FOlxuICAgICAgdGV4dCArPSAnU0lHSEFTSF9OT05FJztcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufVxuZnVuY3Rpb24gYWRkTm9uV2l0bmVzc1R4Q2FjaGUoY2FjaGUsIGlucHV0LCBpbnB1dEluZGV4KSB7XG4gIGNhY2hlLl9fTk9OX1dJVE5FU1NfVVRYT19CVUZfQ0FDSEVbaW5wdXRJbmRleF0gPSBpbnB1dC5ub25XaXRuZXNzVXR4bztcbiAgY29uc3QgdHggPSB0cmFuc2FjdGlvbl8xLlRyYW5zYWN0aW9uLmZyb21CdWZmZXIoaW5wdXQubm9uV2l0bmVzc1V0eG8pO1xuICBjYWNoZS5fX05PTl9XSVRORVNTX1VUWE9fVFhfQ0FDSEVbaW5wdXRJbmRleF0gPSB0eDtcbiAgY29uc3Qgc2VsZiA9IGNhY2hlO1xuICBjb25zdCBzZWxmSW5kZXggPSBpbnB1dEluZGV4O1xuICBkZWxldGUgaW5wdXQubm9uV2l0bmVzc1V0eG87XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnB1dCwgJ25vbldpdG5lc3NVdHhvJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgY29uc3QgYnVmID0gc2VsZi5fX05PTl9XSVRORVNTX1VUWE9fQlVGX0NBQ0hFW3NlbGZJbmRleF07XG4gICAgICBjb25zdCB0eENhY2hlID0gc2VsZi5fX05PTl9XSVRORVNTX1VUWE9fVFhfQ0FDSEVbc2VsZkluZGV4XTtcbiAgICAgIGlmIChidWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gYnVmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3QnVmID0gdHhDYWNoZS50b0J1ZmZlcigpO1xuICAgICAgICBzZWxmLl9fTk9OX1dJVE5FU1NfVVRYT19CVUZfQ0FDSEVbc2VsZkluZGV4XSA9IG5ld0J1ZjtcbiAgICAgICAgcmV0dXJuIG5ld0J1ZjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldChkYXRhKSB7XG4gICAgICBzZWxmLl9fTk9OX1dJVE5FU1NfVVRYT19CVUZfQ0FDSEVbc2VsZkluZGV4XSA9IGRhdGE7XG4gICAgfSxcbiAgfSk7XG59XG5mdW5jdGlvbiBpbnB1dEZpbmFsaXplR2V0QW10cyhpbnB1dHMsIHR4LCBjYWNoZSwgbXVzdEZpbmFsaXplKSB7XG4gIGxldCBpbnB1dEFtb3VudCA9IDA7XG4gIGlucHV0cy5mb3JFYWNoKChpbnB1dCwgaWR4KSA9PiB7XG4gICAgaWYgKG11c3RGaW5hbGl6ZSAmJiBpbnB1dC5maW5hbFNjcmlwdFNpZylcbiAgICAgIHR4Lmluc1tpZHhdLnNjcmlwdCA9IGlucHV0LmZpbmFsU2NyaXB0U2lnO1xuICAgIGlmIChtdXN0RmluYWxpemUgJiYgaW5wdXQuZmluYWxTY3JpcHRXaXRuZXNzKSB7XG4gICAgICB0eC5pbnNbaWR4XS53aXRuZXNzID0gc2NyaXB0V2l0bmVzc1RvV2l0bmVzc1N0YWNrKFxuICAgICAgICBpbnB1dC5maW5hbFNjcmlwdFdpdG5lc3MsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaW5wdXQud2l0bmVzc1V0eG8pIHtcbiAgICAgIGlucHV0QW1vdW50ICs9IGlucHV0LndpdG5lc3NVdHhvLnZhbHVlO1xuICAgIH0gZWxzZSBpZiAoaW5wdXQubm9uV2l0bmVzc1V0eG8pIHtcbiAgICAgIGNvbnN0IG53VHggPSBub25XaXRuZXNzVXR4b1R4RnJvbUNhY2hlKGNhY2hlLCBpbnB1dCwgaWR4KTtcbiAgICAgIGNvbnN0IHZvdXQgPSB0eC5pbnNbaWR4XS5pbmRleDtcbiAgICAgIGNvbnN0IG91dCA9IG53VHgub3V0c1t2b3V0XTtcbiAgICAgIGlucHV0QW1vdW50ICs9IG91dC52YWx1ZTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBvdXRwdXRBbW91bnQgPSB0eC5vdXRzLnJlZHVjZSgodG90YWwsIG8pID0+IHRvdGFsICsgby52YWx1ZSwgMCk7XG4gIGNvbnN0IGZlZSA9IGlucHV0QW1vdW50IC0gb3V0cHV0QW1vdW50O1xuICBpZiAoZmVlIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignT3V0cHV0cyBhcmUgc3BlbmRpbmcgbW9yZSB0aGFuIElucHV0cycpO1xuICB9XG4gIGNvbnN0IGJ5dGVzID0gdHgudmlydHVhbFNpemUoKTtcbiAgY2FjaGUuX19GRUUgPSBmZWU7XG4gIGNhY2hlLl9fRVhUUkFDVEVEX1RYID0gdHg7XG4gIGNhY2hlLl9fRkVFX1JBVEUgPSBNYXRoLmZsb29yKGZlZSAvIGJ5dGVzKTtcbn1cbmZ1bmN0aW9uIG5vbldpdG5lc3NVdHhvVHhGcm9tQ2FjaGUoY2FjaGUsIGlucHV0LCBpbnB1dEluZGV4KSB7XG4gIGNvbnN0IGMgPSBjYWNoZS5fX05PTl9XSVRORVNTX1VUWE9fVFhfQ0FDSEU7XG4gIGlmICghY1tpbnB1dEluZGV4XSkge1xuICAgIGFkZE5vbldpdG5lc3NUeENhY2hlKGNhY2hlLCBpbnB1dCwgaW5wdXRJbmRleCk7XG4gIH1cbiAgcmV0dXJuIGNbaW5wdXRJbmRleF07XG59XG5mdW5jdGlvbiBnZXRTY3JpcHRGcm9tVXR4byhpbnB1dEluZGV4LCBpbnB1dCwgY2FjaGUpIHtcbiAgY29uc3QgeyBzY3JpcHQgfSA9IGdldFNjcmlwdEFuZEFtb3VudEZyb21VdHhvKGlucHV0SW5kZXgsIGlucHV0LCBjYWNoZSk7XG4gIHJldHVybiBzY3JpcHQ7XG59XG5mdW5jdGlvbiBnZXRTY3JpcHRBbmRBbW91bnRGcm9tVXR4byhpbnB1dEluZGV4LCBpbnB1dCwgY2FjaGUpIHtcbiAgaWYgKGlucHV0LndpdG5lc3NVdHhvICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NyaXB0OiBpbnB1dC53aXRuZXNzVXR4by5zY3JpcHQsXG4gICAgICB2YWx1ZTogaW5wdXQud2l0bmVzc1V0eG8udmFsdWUsXG4gICAgfTtcbiAgfSBlbHNlIGlmIChpbnB1dC5ub25XaXRuZXNzVXR4byAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3Qgbm9uV2l0bmVzc1V0eG9UeCA9IG5vbldpdG5lc3NVdHhvVHhGcm9tQ2FjaGUoXG4gICAgICBjYWNoZSxcbiAgICAgIGlucHV0LFxuICAgICAgaW5wdXRJbmRleCxcbiAgICApO1xuICAgIGNvbnN0IG8gPSBub25XaXRuZXNzVXR4b1R4Lm91dHNbY2FjaGUuX19UWC5pbnNbaW5wdXRJbmRleF0uaW5kZXhdO1xuICAgIHJldHVybiB7IHNjcmlwdDogby5zY3JpcHQsIHZhbHVlOiBvLnZhbHVlIH07XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCBwdWJrZXkgaW4gaW5wdXQgd2l0aG91dCBVdHhvIGRhdGFcIik7XG4gIH1cbn1cbmZ1bmN0aW9uIHB1YmtleUluSW5wdXQocHVia2V5LCBpbnB1dCwgaW5wdXRJbmRleCwgY2FjaGUpIHtcbiAgY29uc3Qgc2NyaXB0ID0gZ2V0U2NyaXB0RnJvbVV0eG8oaW5wdXRJbmRleCwgaW5wdXQsIGNhY2hlKTtcbiAgY29uc3QgeyBtZWFuaW5nZnVsU2NyaXB0IH0gPSBnZXRNZWFuaW5nZnVsU2NyaXB0KFxuICAgIHNjcmlwdCxcbiAgICBpbnB1dEluZGV4LFxuICAgICdpbnB1dCcsXG4gICAgaW5wdXQucmVkZWVtU2NyaXB0LFxuICAgIGlucHV0LndpdG5lc3NTY3JpcHQsXG4gICk7XG4gIHJldHVybiAoMCwgcHNidHV0aWxzXzEucHVia2V5SW5TY3JpcHQpKHB1YmtleSwgbWVhbmluZ2Z1bFNjcmlwdCk7XG59XG5mdW5jdGlvbiBwdWJrZXlJbk91dHB1dChwdWJrZXksIG91dHB1dCwgb3V0cHV0SW5kZXgsIGNhY2hlKSB7XG4gIGNvbnN0IHNjcmlwdCA9IGNhY2hlLl9fVFgub3V0c1tvdXRwdXRJbmRleF0uc2NyaXB0O1xuICBjb25zdCB7IG1lYW5pbmdmdWxTY3JpcHQgfSA9IGdldE1lYW5pbmdmdWxTY3JpcHQoXG4gICAgc2NyaXB0LFxuICAgIG91dHB1dEluZGV4LFxuICAgICdvdXRwdXQnLFxuICAgIG91dHB1dC5yZWRlZW1TY3JpcHQsXG4gICAgb3V0cHV0LndpdG5lc3NTY3JpcHQsXG4gICk7XG4gIHJldHVybiAoMCwgcHNidHV0aWxzXzEucHVia2V5SW5TY3JpcHQpKHB1YmtleSwgbWVhbmluZ2Z1bFNjcmlwdCk7XG59XG5mdW5jdGlvbiByZWRlZW1Gcm9tRmluYWxTY3JpcHRTaWcoZmluYWxTY3JpcHQpIHtcbiAgaWYgKCFmaW5hbFNjcmlwdCkgcmV0dXJuO1xuICBjb25zdCBkZWNvbXAgPSBic2NyaXB0LmRlY29tcGlsZShmaW5hbFNjcmlwdCk7XG4gIGlmICghZGVjb21wKSByZXR1cm47XG4gIGNvbnN0IGxhc3RJdGVtID0gZGVjb21wW2RlY29tcC5sZW5ndGggLSAxXTtcbiAgaWYgKFxuICAgICFCdWZmZXIuaXNCdWZmZXIobGFzdEl0ZW0pIHx8XG4gICAgaXNQdWJrZXlMaWtlKGxhc3RJdGVtKSB8fFxuICAgIGlzU2lnTGlrZShsYXN0SXRlbSlcbiAgKVxuICAgIHJldHVybjtcbiAgY29uc3Qgc0RlY29tcCA9IGJzY3JpcHQuZGVjb21waWxlKGxhc3RJdGVtKTtcbiAgaWYgKCFzRGVjb21wKSByZXR1cm47XG4gIHJldHVybiBsYXN0SXRlbTtcbn1cbmZ1bmN0aW9uIHJlZGVlbUZyb21GaW5hbFdpdG5lc3NTY3JpcHQoZmluYWxTY3JpcHQpIHtcbiAgaWYgKCFmaW5hbFNjcmlwdCkgcmV0dXJuO1xuICBjb25zdCBkZWNvbXAgPSBzY3JpcHRXaXRuZXNzVG9XaXRuZXNzU3RhY2soZmluYWxTY3JpcHQpO1xuICBjb25zdCBsYXN0SXRlbSA9IGRlY29tcFtkZWNvbXAubGVuZ3RoIC0gMV07XG4gIGlmIChpc1B1YmtleUxpa2UobGFzdEl0ZW0pKSByZXR1cm47XG4gIGNvbnN0IHNEZWNvbXAgPSBic2NyaXB0LmRlY29tcGlsZShsYXN0SXRlbSk7XG4gIGlmICghc0RlY29tcCkgcmV0dXJuO1xuICByZXR1cm4gbGFzdEl0ZW07XG59XG5mdW5jdGlvbiBjb21wcmVzc1B1YmtleShwdWJrZXkpIHtcbiAgaWYgKHB1YmtleS5sZW5ndGggPT09IDY1KSB7XG4gICAgY29uc3QgcGFyaXR5ID0gcHVia2V5WzY0XSAmIDE7XG4gICAgY29uc3QgbmV3S2V5ID0gcHVia2V5LnNsaWNlKDAsIDMzKTtcbiAgICBuZXdLZXlbMF0gPSAyIHwgcGFyaXR5O1xuICAgIHJldHVybiBuZXdLZXk7XG4gIH1cbiAgcmV0dXJuIHB1YmtleS5zbGljZSgpO1xufVxuZnVuY3Rpb24gaXNQdWJrZXlMaWtlKGJ1Zikge1xuICByZXR1cm4gYnVmLmxlbmd0aCA9PT0gMzMgJiYgYnNjcmlwdC5pc0Nhbm9uaWNhbFB1YktleShidWYpO1xufVxuZnVuY3Rpb24gaXNTaWdMaWtlKGJ1Zikge1xuICByZXR1cm4gYnNjcmlwdC5pc0Nhbm9uaWNhbFNjcmlwdFNpZ25hdHVyZShidWYpO1xufVxuZnVuY3Rpb24gZ2V0TWVhbmluZ2Z1bFNjcmlwdChcbiAgc2NyaXB0LFxuICBpbmRleCxcbiAgaW9UeXBlLFxuICByZWRlZW1TY3JpcHQsXG4gIHdpdG5lc3NTY3JpcHQsXG4pIHtcbiAgY29uc3QgaXNQMlNIID0gKDAsIHBzYnR1dGlsc18xLmlzUDJTSFNjcmlwdCkoc2NyaXB0KTtcbiAgY29uc3QgaXNQMlNIUDJXU0ggPVxuICAgIGlzUDJTSCAmJiByZWRlZW1TY3JpcHQgJiYgKDAsIHBzYnR1dGlsc18xLmlzUDJXU0hTY3JpcHQpKHJlZGVlbVNjcmlwdCk7XG4gIGNvbnN0IGlzUDJXU0ggPSAoMCwgcHNidHV0aWxzXzEuaXNQMldTSFNjcmlwdCkoc2NyaXB0KTtcbiAgaWYgKGlzUDJTSCAmJiByZWRlZW1TY3JpcHQgPT09IHVuZGVmaW5lZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjcmlwdFB1YmtleSBpcyBQMlNIIGJ1dCByZWRlZW1TY3JpcHQgbWlzc2luZycpO1xuICBpZiAoKGlzUDJXU0ggfHwgaXNQMlNIUDJXU0gpICYmIHdpdG5lc3NTY3JpcHQgPT09IHVuZGVmaW5lZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnc2NyaXB0UHVia2V5IG9yIHJlZGVlbVNjcmlwdCBpcyBQMldTSCBidXQgd2l0bmVzc1NjcmlwdCBtaXNzaW5nJyxcbiAgICApO1xuICBsZXQgbWVhbmluZ2Z1bFNjcmlwdDtcbiAgaWYgKGlzUDJTSFAyV1NIKSB7XG4gICAgbWVhbmluZ2Z1bFNjcmlwdCA9IHdpdG5lc3NTY3JpcHQ7XG4gICAgY2hlY2tSZWRlZW1TY3JpcHQoaW5kZXgsIHNjcmlwdCwgcmVkZWVtU2NyaXB0LCBpb1R5cGUpO1xuICAgIGNoZWNrV2l0bmVzc1NjcmlwdChpbmRleCwgcmVkZWVtU2NyaXB0LCB3aXRuZXNzU2NyaXB0LCBpb1R5cGUpO1xuICAgIGNoZWNrSW52YWxpZFAyV1NIKG1lYW5pbmdmdWxTY3JpcHQpO1xuICB9IGVsc2UgaWYgKGlzUDJXU0gpIHtcbiAgICBtZWFuaW5nZnVsU2NyaXB0ID0gd2l0bmVzc1NjcmlwdDtcbiAgICBjaGVja1dpdG5lc3NTY3JpcHQoaW5kZXgsIHNjcmlwdCwgd2l0bmVzc1NjcmlwdCwgaW9UeXBlKTtcbiAgICBjaGVja0ludmFsaWRQMldTSChtZWFuaW5nZnVsU2NyaXB0KTtcbiAgfSBlbHNlIGlmIChpc1AyU0gpIHtcbiAgICBtZWFuaW5nZnVsU2NyaXB0ID0gcmVkZWVtU2NyaXB0O1xuICAgIGNoZWNrUmVkZWVtU2NyaXB0KGluZGV4LCBzY3JpcHQsIHJlZGVlbVNjcmlwdCwgaW9UeXBlKTtcbiAgfSBlbHNlIHtcbiAgICBtZWFuaW5nZnVsU2NyaXB0ID0gc2NyaXB0O1xuICB9XG4gIHJldHVybiB7XG4gICAgbWVhbmluZ2Z1bFNjcmlwdCxcbiAgICB0eXBlOiBpc1AyU0hQMldTSFxuICAgICAgPyAncDJzaC1wMndzaCdcbiAgICAgIDogaXNQMlNIXG4gICAgICA/ICdwMnNoJ1xuICAgICAgOiBpc1AyV1NIXG4gICAgICA/ICdwMndzaCdcbiAgICAgIDogJ3JhdycsXG4gIH07XG59XG5mdW5jdGlvbiBjaGVja0ludmFsaWRQMldTSChzY3JpcHQpIHtcbiAgaWYgKFxuICAgICgwLCBwc2J0dXRpbHNfMS5pc1AyV1BLSCkoc2NyaXB0KSB8fFxuICAgICgwLCBwc2J0dXRpbHNfMS5pc1AyU0hTY3JpcHQpKHNjcmlwdClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQMldQS0ggb3IgUDJTSCBjYW4gbm90IGJlIGNvbnRhaW5lZCB3aXRoaW4gUDJXU0gnKTtcbiAgfVxufVxuZnVuY3Rpb24gY2xhc3NpZnlTY3JpcHQoc2NyaXB0KSB7XG4gIGlmICgoMCwgcHNidHV0aWxzXzEuaXNQMldQS0gpKHNjcmlwdCkpIHJldHVybiAnd2l0bmVzc3B1YmtleWhhc2gnO1xuICBpZiAoKDAsIHBzYnR1dGlsc18xLmlzUDJQS0gpKHNjcmlwdCkpIHJldHVybiAncHVia2V5aGFzaCc7XG4gIGlmICgoMCwgcHNidHV0aWxzXzEuaXNQMk1TKShzY3JpcHQpKSByZXR1cm4gJ211bHRpc2lnJztcbiAgaWYgKCgwLCBwc2J0dXRpbHNfMS5pc1AyUEspKHNjcmlwdCkpIHJldHVybiAncHVia2V5JztcbiAgcmV0dXJuICdub25zdGFuZGFyZCc7XG59XG5mdW5jdGlvbiByYW5nZShuKSB7XG4gIHJldHVybiBbLi4uQXJyYXkobikua2V5cygpXTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/psbt.js\n\n}")},"./node_modules/bitcoinjs-lib/src/psbt/bip371.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer;\n\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nexports.checkTaprootInputForSigs =\n exports.tapTreeFromList =\n exports.tapTreeToList =\n exports.tweakInternalPubKey =\n exports.checkTaprootOutputFields =\n exports.checkTaprootInputFields =\n exports.isTaprootOutput =\n exports.isTaprootInput =\n exports.serializeTaprootSignature =\n exports.tapScriptFinalizer =\n exports.toXOnly =\n void 0;\nconst types_1 = __webpack_require__(/*! ../types */ "./node_modules/bitcoinjs-lib/src/types.js");\nconst transaction_1 = __webpack_require__(/*! ../transaction */ "./node_modules/bitcoinjs-lib/src/transaction.js");\nconst psbtutils_1 = __webpack_require__(/*! ./psbtutils */ "./node_modules/bitcoinjs-lib/src/psbt/psbtutils.js");\nconst bip341_1 = __webpack_require__(/*! ../payments/bip341 */ "./node_modules/bitcoinjs-lib/src/payments/bip341.js");\nconst payments_1 = __webpack_require__(/*! ../payments */ "./node_modules/bitcoinjs-lib/src/payments/index.js");\nconst psbtutils_2 = __webpack_require__(/*! ./psbtutils */ "./node_modules/bitcoinjs-lib/src/psbt/psbtutils.js");\nconst toXOnly = pubKey => (pubKey.length === 32 ? pubKey : pubKey.slice(1, 33));\nexports.toXOnly = toXOnly;\n/**\n * Default tapscript finalizer. It searches for the `tapLeafHashToFinalize` if provided.\n * Otherwise it will search for the tapleaf that has at least one signature and has the shortest path.\n * @param inputIndex the position of the PSBT input.\n * @param input the PSBT input.\n * @param tapLeafHashToFinalize optional, if provided the finalizer will search for a tapleaf that has this hash\n * and will try to build the finalScriptWitness.\n * @returns the finalScriptWitness or throws an exception if no tapleaf found.\n */\nfunction tapScriptFinalizer(inputIndex, input, tapLeafHashToFinalize) {\n const tapLeaf = findTapLeafToFinalize(\n input,\n inputIndex,\n tapLeafHashToFinalize,\n );\n try {\n const sigs = sortSignatures(input, tapLeaf);\n const witness = sigs.concat(tapLeaf.script).concat(tapLeaf.controlBlock);\n return {\n finalScriptWitness: (0, psbtutils_1.witnessStackToScriptWitness)(witness),\n };\n } catch (err) {\n throw new Error(`Can not finalize taproot input #${inputIndex}: ${err}`);\n }\n}\nexports.tapScriptFinalizer = tapScriptFinalizer;\nfunction serializeTaprootSignature(sig, sighashType) {\n const sighashTypeByte = sighashType\n ? Buffer.from([sighashType])\n : Buffer.from([]);\n return Buffer.concat([sig, sighashTypeByte]);\n}\nexports.serializeTaprootSignature = serializeTaprootSignature;\nfunction isTaprootInput(input) {\n return (\n input &&\n !!(\n input.tapInternalKey ||\n input.tapMerkleRoot ||\n (input.tapLeafScript && input.tapLeafScript.length) ||\n (input.tapBip32Derivation && input.tapBip32Derivation.length) ||\n (input.witnessUtxo && (0, psbtutils_1.isP2TR)(input.witnessUtxo.script))\n )\n );\n}\nexports.isTaprootInput = isTaprootInput;\nfunction isTaprootOutput(output, script) {\n return (\n output &&\n !!(\n output.tapInternalKey ||\n output.tapTree ||\n (output.tapBip32Derivation && output.tapBip32Derivation.length) ||\n (script && (0, psbtutils_1.isP2TR)(script))\n )\n );\n}\nexports.isTaprootOutput = isTaprootOutput;\nfunction checkTaprootInputFields(inputData, newInputData, action) {\n checkMixedTaprootAndNonTaprootInputFields(inputData, newInputData, action);\n checkIfTapLeafInTree(inputData, newInputData, action);\n}\nexports.checkTaprootInputFields = checkTaprootInputFields;\nfunction checkTaprootOutputFields(outputData, newOutputData, action) {\n checkMixedTaprootAndNonTaprootOutputFields(outputData, newOutputData, action);\n checkTaprootScriptPubkey(outputData, newOutputData);\n}\nexports.checkTaprootOutputFields = checkTaprootOutputFields;\nfunction checkTaprootScriptPubkey(outputData, newOutputData) {\n if (!newOutputData.tapTree && !newOutputData.tapInternalKey) return;\n const tapInternalKey =\n newOutputData.tapInternalKey || outputData.tapInternalKey;\n const tapTree = newOutputData.tapTree || outputData.tapTree;\n if (tapInternalKey) {\n const { script: scriptPubkey } = outputData;\n const script = getTaprootScripPubkey(tapInternalKey, tapTree);\n if (scriptPubkey && !scriptPubkey.equals(script))\n throw new Error(\'Error adding output. Script or address missmatch.\');\n }\n}\nfunction getTaprootScripPubkey(tapInternalKey, tapTree) {\n const scriptTree = tapTree && tapTreeFromList(tapTree.leaves);\n const { output } = (0, payments_1.p2tr)({\n internalPubkey: tapInternalKey,\n scriptTree,\n });\n return output;\n}\nfunction tweakInternalPubKey(inputIndex, input) {\n const tapInternalKey = input.tapInternalKey;\n const outputKey =\n tapInternalKey &&\n (0, bip341_1.tweakKey)(tapInternalKey, input.tapMerkleRoot);\n if (!outputKey)\n throw new Error(\n `Cannot tweak tap internal key for input #${inputIndex}. Public key: ${\n tapInternalKey && tapInternalKey.toString(\'hex\')\n }`,\n );\n return outputKey.x;\n}\nexports.tweakInternalPubKey = tweakInternalPubKey;\n/**\n * Convert a binary tree to a BIP371 type list. Each element of the list is (according to BIP371):\n * One or more tuples representing the depth, leaf version, and script for a leaf in the Taproot tree,\n * allowing the entire tree to be reconstructed. The tuples must be in depth first search order so that\n * the tree is correctly reconstructed.\n * @param tree the binary tap tree\n * @returns a list of BIP 371 tapleaves\n */\nfunction tapTreeToList(tree) {\n if (!(0, types_1.isTaptree)(tree))\n throw new Error(\n \'Cannot convert taptree to tapleaf list. Expecting a tapree structure.\',\n );\n return _tapTreeToList(tree);\n}\nexports.tapTreeToList = tapTreeToList;\n/**\n * Convert a BIP371 TapLeaf list to a TapTree (binary).\n * @param leaves a list of tapleaves where each element of the list is (according to BIP371):\n * One or more tuples representing the depth, leaf version, and script for a leaf in the Taproot tree,\n * allowing the entire tree to be reconstructed. The tuples must be in depth first search order so that\n * the tree is correctly reconstructed.\n * @returns the corresponding taptree, or throws an exception if the tree cannot be reconstructed\n */\nfunction tapTreeFromList(leaves = []) {\n if (leaves.length === 1 && leaves[0].depth === 0)\n return {\n output: leaves[0].script,\n version: leaves[0].leafVersion,\n };\n return instertLeavesInTree(leaves);\n}\nexports.tapTreeFromList = tapTreeFromList;\nfunction checkTaprootInputForSigs(input, action) {\n const sigs = extractTaprootSigs(input);\n return sigs.some(sig =>\n (0, psbtutils_2.signatureBlocksAction)(sig, decodeSchnorrSignature, action),\n );\n}\nexports.checkTaprootInputForSigs = checkTaprootInputForSigs;\nfunction decodeSchnorrSignature(signature) {\n return {\n signature: signature.slice(0, 64),\n hashType:\n signature.slice(64)[0] || transaction_1.Transaction.SIGHASH_DEFAULT,\n };\n}\nfunction extractTaprootSigs(input) {\n const sigs = [];\n if (input.tapKeySig) sigs.push(input.tapKeySig);\n if (input.tapScriptSig)\n sigs.push(...input.tapScriptSig.map(s => s.signature));\n if (!sigs.length) {\n const finalTapKeySig = getTapKeySigFromWithness(input.finalScriptWitness);\n if (finalTapKeySig) sigs.push(finalTapKeySig);\n }\n return sigs;\n}\nfunction getTapKeySigFromWithness(finalScriptWitness) {\n if (!finalScriptWitness) return;\n const witness = finalScriptWitness.slice(2);\n // todo: add schnorr signature validation\n if (witness.length === 64 || witness.length === 65) return witness;\n}\nfunction _tapTreeToList(tree, leaves = [], depth = 0) {\n if (depth > bip341_1.MAX_TAPTREE_DEPTH)\n throw new Error(\'Max taptree depth exceeded.\');\n if (!tree) return [];\n if ((0, types_1.isTapleaf)(tree)) {\n leaves.push({\n depth,\n leafVersion: tree.version || bip341_1.LEAF_VERSION_TAPSCRIPT,\n script: tree.output,\n });\n return leaves;\n }\n if (tree[0]) _tapTreeToList(tree[0], leaves, depth + 1);\n if (tree[1]) _tapTreeToList(tree[1], leaves, depth + 1);\n return leaves;\n}\nfunction instertLeavesInTree(leaves) {\n let tree;\n for (const leaf of leaves) {\n tree = instertLeafInTree(leaf, tree);\n if (!tree) throw new Error(`No room left to insert tapleaf in tree`);\n }\n return tree;\n}\nfunction instertLeafInTree(leaf, tree, depth = 0) {\n if (depth > bip341_1.MAX_TAPTREE_DEPTH)\n throw new Error(\'Max taptree depth exceeded.\');\n if (leaf.depth === depth) {\n if (!tree)\n return {\n output: leaf.script,\n version: leaf.leafVersion,\n };\n return;\n }\n if ((0, types_1.isTapleaf)(tree)) return;\n const leftSide = instertLeafInTree(leaf, tree && tree[0], depth + 1);\n if (leftSide) return [leftSide, tree && tree[1]];\n const rightSide = instertLeafInTree(leaf, tree && tree[1], depth + 1);\n if (rightSide) return [tree && tree[0], rightSide];\n}\nfunction checkMixedTaprootAndNonTaprootInputFields(\n inputData,\n newInputData,\n action,\n) {\n const isBadTaprootUpdate =\n isTaprootInput(inputData) && hasNonTaprootFields(newInputData);\n const isBadNonTaprootUpdate =\n hasNonTaprootFields(inputData) && isTaprootInput(newInputData);\n const hasMixedFields =\n inputData === newInputData &&\n isTaprootInput(newInputData) &&\n hasNonTaprootFields(newInputData); // todo: bad? use !===\n if (isBadTaprootUpdate || isBadNonTaprootUpdate || hasMixedFields)\n throw new Error(\n `Invalid arguments for Psbt.${action}. ` +\n `Cannot use both taproot and non-taproot fields.`,\n );\n}\nfunction checkMixedTaprootAndNonTaprootOutputFields(\n inputData,\n newInputData,\n action,\n) {\n const isBadTaprootUpdate =\n isTaprootOutput(inputData) && hasNonTaprootFields(newInputData);\n const isBadNonTaprootUpdate =\n hasNonTaprootFields(inputData) && isTaprootOutput(newInputData);\n const hasMixedFields =\n inputData === newInputData &&\n isTaprootOutput(newInputData) &&\n hasNonTaprootFields(newInputData);\n if (isBadTaprootUpdate || isBadNonTaprootUpdate || hasMixedFields)\n throw new Error(\n `Invalid arguments for Psbt.${action}. ` +\n `Cannot use both taproot and non-taproot fields.`,\n );\n}\n/**\n * Checks if the tap leaf is part of the tap tree for the given input data.\n * Throws an error if the tap leaf is not part of the tap tree.\n * @param inputData - The original PsbtInput data.\n * @param newInputData - The new PsbtInput data.\n * @param action - The action being performed.\n * @throws {Error} - If the tap leaf is not part of the tap tree.\n */\nfunction checkIfTapLeafInTree(inputData, newInputData, action) {\n if (newInputData.tapMerkleRoot) {\n const newLeafsInTree = (newInputData.tapLeafScript || []).every(l =>\n isTapLeafInTree(l, newInputData.tapMerkleRoot),\n );\n const oldLeafsInTree = (inputData.tapLeafScript || []).every(l =>\n isTapLeafInTree(l, newInputData.tapMerkleRoot),\n );\n if (!newLeafsInTree || !oldLeafsInTree)\n throw new Error(\n `Invalid arguments for Psbt.${action}. Tapleaf not part of taptree.`,\n );\n } else if (inputData.tapMerkleRoot) {\n const newLeafsInTree = (newInputData.tapLeafScript || []).every(l =>\n isTapLeafInTree(l, inputData.tapMerkleRoot),\n );\n if (!newLeafsInTree)\n throw new Error(\n `Invalid arguments for Psbt.${action}. Tapleaf not part of taptree.`,\n );\n }\n}\n/**\n * Checks if a TapLeafScript is present in a Merkle tree.\n * @param tapLeaf The TapLeafScript to check.\n * @param merkleRoot The Merkle root of the tree. If not provided, the function assumes the TapLeafScript is present.\n * @returns A boolean indicating whether the TapLeafScript is present in the tree.\n */\nfunction isTapLeafInTree(tapLeaf, merkleRoot) {\n if (!merkleRoot) return true;\n const leafHash = (0, bip341_1.tapleafHash)({\n output: tapLeaf.script,\n version: tapLeaf.leafVersion,\n });\n const rootHash = (0, bip341_1.rootHashFromPath)(\n tapLeaf.controlBlock,\n leafHash,\n );\n return rootHash.equals(merkleRoot);\n}\n/**\n * Sorts the signatures in the input\'s tapScriptSig array based on their position in the tapLeaf script.\n *\n * @param input - The PsbtInput object.\n * @param tapLeaf - The TapLeafScript object.\n * @returns An array of sorted signatures as Buffers.\n */\nfunction sortSignatures(input, tapLeaf) {\n const leafHash = (0, bip341_1.tapleafHash)({\n output: tapLeaf.script,\n version: tapLeaf.leafVersion,\n });\n return (input.tapScriptSig || [])\n .filter(tss => tss.leafHash.equals(leafHash))\n .map(tss => addPubkeyPositionInScript(tapLeaf.script, tss))\n .sort((t1, t2) => t2.positionInScript - t1.positionInScript)\n .map(t => t.signature);\n}\n/**\n * Adds the position of a public key in a script to a TapScriptSig object.\n * @param script The script in which to find the position of the public key.\n * @param tss The TapScriptSig object to add the position to.\n * @returns A TapScriptSigWitPosition object with the added position.\n */\nfunction addPubkeyPositionInScript(script, tss) {\n return Object.assign(\n {\n positionInScript: (0, psbtutils_1.pubkeyPositionInScript)(\n tss.pubkey,\n script,\n ),\n },\n tss,\n );\n}\n/**\n * Find tapleaf by hash, or get the signed tapleaf with the shortest path.\n */\nfunction findTapLeafToFinalize(input, inputIndex, leafHashToFinalize) {\n if (!input.tapScriptSig || !input.tapScriptSig.length)\n throw new Error(\n `Can not finalize taproot input #${inputIndex}. No tapleaf script signature provided.`,\n );\n const tapLeaf = (input.tapLeafScript || [])\n .sort((a, b) => a.controlBlock.length - b.controlBlock.length)\n .find(leaf =>\n canFinalizeLeaf(leaf, input.tapScriptSig, leafHashToFinalize),\n );\n if (!tapLeaf)\n throw new Error(\n `Can not finalize taproot input #${inputIndex}. Signature for tapleaf script not found.`,\n );\n return tapLeaf;\n}\n/**\n * Determines whether a TapLeafScript can be finalized.\n *\n * @param leaf - The TapLeafScript to check.\n * @param tapScriptSig - The array of TapScriptSig objects.\n * @param hash - The optional hash to compare with the leaf hash.\n * @returns A boolean indicating whether the TapLeafScript can be finalized.\n */\nfunction canFinalizeLeaf(leaf, tapScriptSig, hash) {\n const leafHash = (0, bip341_1.tapleafHash)({\n output: leaf.script,\n version: leaf.leafVersion,\n });\n const whiteListedHash = !hash || hash.equals(leafHash);\n return (\n whiteListedHash &&\n tapScriptSig.find(tss => tss.leafHash.equals(leafHash)) !== undefined\n );\n}\n/**\n * Checks if the given PsbtInput or PsbtOutput has non-taproot fields.\n * Non-taproot fields include redeemScript, witnessScript, and bip32Derivation.\n * @param io The PsbtInput or PsbtOutput to check.\n * @returns A boolean indicating whether the given input or output has non-taproot fields.\n */\nfunction hasNonTaprootFields(io) {\n return (\n io &&\n !!(\n io.redeemScript ||\n io.witnessScript ||\n (io.bip32Derivation && io.bip32Derivation.length)\n )\n );\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcHNidC9iaXAzNzEuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGdDQUFnQztBQUNoQyxFQUFFLHVCQUF1QjtBQUN6QixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLDJCQUEyQjtBQUM3QixFQUFFLGdDQUFnQztBQUNsQyxFQUFFLCtCQUErQjtBQUNqQyxFQUFFLHVCQUF1QjtBQUN6QixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLGlDQUFpQztBQUNuQyxFQUFFLDBCQUEwQjtBQUM1QixFQUFFLGVBQWU7QUFDakI7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQywyREFBVTtBQUNsQyxzQkFBc0IsbUJBQU8sQ0FBQyx1RUFBZ0I7QUFDOUMsb0JBQW9CLG1CQUFPLENBQUMsdUVBQWE7QUFDekMsaUJBQWlCLG1CQUFPLENBQUMsK0VBQW9CO0FBQzdDLG1CQUFtQixtQkFBTyxDQUFDLHVFQUFhO0FBQ3hDLG9CQUFvQixtQkFBTyxDQUFDLHVFQUFhO0FBQ3pDO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSix1REFBdUQsV0FBVyxJQUFJLElBQUk7QUFDMUU7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0EsTUFBTSxNQUFNO0FBQ1osTUFBTSxNQUFNO0FBQ1osU0FBUyxNQUFNO0FBQ2Y7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcHNidC9iaXAzNzEuanM/ODI1MyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5jaGVja1RhcHJvb3RJbnB1dEZvclNpZ3MgPVxuICBleHBvcnRzLnRhcFRyZWVGcm9tTGlzdCA9XG4gIGV4cG9ydHMudGFwVHJlZVRvTGlzdCA9XG4gIGV4cG9ydHMudHdlYWtJbnRlcm5hbFB1YktleSA9XG4gIGV4cG9ydHMuY2hlY2tUYXByb290T3V0cHV0RmllbGRzID1cbiAgZXhwb3J0cy5jaGVja1RhcHJvb3RJbnB1dEZpZWxkcyA9XG4gIGV4cG9ydHMuaXNUYXByb290T3V0cHV0ID1cbiAgZXhwb3J0cy5pc1RhcHJvb3RJbnB1dCA9XG4gIGV4cG9ydHMuc2VyaWFsaXplVGFwcm9vdFNpZ25hdHVyZSA9XG4gIGV4cG9ydHMudGFwU2NyaXB0RmluYWxpemVyID1cbiAgZXhwb3J0cy50b1hPbmx5ID1cbiAgICB2b2lkIDA7XG5jb25zdCB0eXBlc18xID0gcmVxdWlyZSgnLi4vdHlwZXMnKTtcbmNvbnN0IHRyYW5zYWN0aW9uXzEgPSByZXF1aXJlKCcuLi90cmFuc2FjdGlvbicpO1xuY29uc3QgcHNidHV0aWxzXzEgPSByZXF1aXJlKCcuL3BzYnR1dGlscycpO1xuY29uc3QgYmlwMzQxXzEgPSByZXF1aXJlKCcuLi9wYXltZW50cy9iaXAzNDEnKTtcbmNvbnN0IHBheW1lbnRzXzEgPSByZXF1aXJlKCcuLi9wYXltZW50cycpO1xuY29uc3QgcHNidHV0aWxzXzIgPSByZXF1aXJlKCcuL3BzYnR1dGlscycpO1xuY29uc3QgdG9YT25seSA9IHB1YktleSA9PiAocHViS2V5Lmxlbmd0aCA9PT0gMzIgPyBwdWJLZXkgOiBwdWJLZXkuc2xpY2UoMSwgMzMpKTtcbmV4cG9ydHMudG9YT25seSA9IHRvWE9ubHk7XG4vKipcbiAqIERlZmF1bHQgdGFwc2NyaXB0IGZpbmFsaXplci4gSXQgc2VhcmNoZXMgZm9yIHRoZSBgdGFwTGVhZkhhc2hUb0ZpbmFsaXplYCBpZiBwcm92aWRlZC5cbiAqIE90aGVyd2lzZSBpdCB3aWxsIHNlYXJjaCBmb3IgdGhlIHRhcGxlYWYgdGhhdCBoYXMgYXQgbGVhc3Qgb25lIHNpZ25hdHVyZSBhbmQgaGFzIHRoZSBzaG9ydGVzdCBwYXRoLlxuICogQHBhcmFtIGlucHV0SW5kZXggdGhlIHBvc2l0aW9uIG9mIHRoZSBQU0JUIGlucHV0LlxuICogQHBhcmFtIGlucHV0IHRoZSBQU0JUIGlucHV0LlxuICogQHBhcmFtIHRhcExlYWZIYXNoVG9GaW5hbGl6ZSBvcHRpb25hbCwgaWYgcHJvdmlkZWQgdGhlIGZpbmFsaXplciB3aWxsIHNlYXJjaCBmb3IgYSB0YXBsZWFmIHRoYXQgaGFzIHRoaXMgaGFzaFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgd2lsbCB0cnkgdG8gYnVpbGQgdGhlIGZpbmFsU2NyaXB0V2l0bmVzcy5cbiAqIEByZXR1cm5zIHRoZSBmaW5hbFNjcmlwdFdpdG5lc3Mgb3IgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBubyB0YXBsZWFmIGZvdW5kLlxuICovXG5mdW5jdGlvbiB0YXBTY3JpcHRGaW5hbGl6ZXIoaW5wdXRJbmRleCwgaW5wdXQsIHRhcExlYWZIYXNoVG9GaW5hbGl6ZSkge1xuICBjb25zdCB0YXBMZWFmID0gZmluZFRhcExlYWZUb0ZpbmFsaXplKFxuICAgIGlucHV0LFxuICAgIGlucHV0SW5kZXgsXG4gICAgdGFwTGVhZkhhc2hUb0ZpbmFsaXplLFxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IHNpZ3MgPSBzb3J0U2lnbmF0dXJlcyhpbnB1dCwgdGFwTGVhZik7XG4gICAgY29uc3Qgd2l0bmVzcyA9IHNpZ3MuY29uY2F0KHRhcExlYWYuc2NyaXB0KS5jb25jYXQodGFwTGVhZi5jb250cm9sQmxvY2spO1xuICAgIHJldHVybiB7XG4gICAgICBmaW5hbFNjcmlwdFdpdG5lc3M6ICgwLCBwc2J0dXRpbHNfMS53aXRuZXNzU3RhY2tUb1NjcmlwdFdpdG5lc3MpKHdpdG5lc3MpLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCBmaW5hbGl6ZSB0YXByb290IGlucHV0ICMke2lucHV0SW5kZXh9OiAke2Vycn1gKTtcbiAgfVxufVxuZXhwb3J0cy50YXBTY3JpcHRGaW5hbGl6ZXIgPSB0YXBTY3JpcHRGaW5hbGl6ZXI7XG5mdW5jdGlvbiBzZXJpYWxpemVUYXByb290U2lnbmF0dXJlKHNpZywgc2lnaGFzaFR5cGUpIHtcbiAgY29uc3Qgc2lnaGFzaFR5cGVCeXRlID0gc2lnaGFzaFR5cGVcbiAgICA/IEJ1ZmZlci5mcm9tKFtzaWdoYXNoVHlwZV0pXG4gICAgOiBCdWZmZXIuZnJvbShbXSk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KFtzaWcsIHNpZ2hhc2hUeXBlQnl0ZV0pO1xufVxuZXhwb3J0cy5zZXJpYWxpemVUYXByb290U2lnbmF0dXJlID0gc2VyaWFsaXplVGFwcm9vdFNpZ25hdHVyZTtcbmZ1bmN0aW9uIGlzVGFwcm9vdElucHV0KGlucHV0KSB7XG4gIHJldHVybiAoXG4gICAgaW5wdXQgJiZcbiAgICAhIShcbiAgICAgIGlucHV0LnRhcEludGVybmFsS2V5IHx8XG4gICAgICBpbnB1dC50YXBNZXJrbGVSb290IHx8XG4gICAgICAoaW5wdXQudGFwTGVhZlNjcmlwdCAmJiBpbnB1dC50YXBMZWFmU2NyaXB0Lmxlbmd0aCkgfHxcbiAgICAgIChpbnB1dC50YXBCaXAzMkRlcml2YXRpb24gJiYgaW5wdXQudGFwQmlwMzJEZXJpdmF0aW9uLmxlbmd0aCkgfHxcbiAgICAgIChpbnB1dC53aXRuZXNzVXR4byAmJiAoMCwgcHNidHV0aWxzXzEuaXNQMlRSKShpbnB1dC53aXRuZXNzVXR4by5zY3JpcHQpKVxuICAgIClcbiAgKTtcbn1cbmV4cG9ydHMuaXNUYXByb290SW5wdXQgPSBpc1RhcHJvb3RJbnB1dDtcbmZ1bmN0aW9uIGlzVGFwcm9vdE91dHB1dChvdXRwdXQsIHNjcmlwdCkge1xuICByZXR1cm4gKFxuICAgIG91dHB1dCAmJlxuICAgICEhKFxuICAgICAgb3V0cHV0LnRhcEludGVybmFsS2V5IHx8XG4gICAgICBvdXRwdXQudGFwVHJlZSB8fFxuICAgICAgKG91dHB1dC50YXBCaXAzMkRlcml2YXRpb24gJiYgb3V0cHV0LnRhcEJpcDMyRGVyaXZhdGlvbi5sZW5ndGgpIHx8XG4gICAgICAoc2NyaXB0ICYmICgwLCBwc2J0dXRpbHNfMS5pc1AyVFIpKHNjcmlwdCkpXG4gICAgKVxuICApO1xufVxuZXhwb3J0cy5pc1RhcHJvb3RPdXRwdXQgPSBpc1RhcHJvb3RPdXRwdXQ7XG5mdW5jdGlvbiBjaGVja1RhcHJvb3RJbnB1dEZpZWxkcyhpbnB1dERhdGEsIG5ld0lucHV0RGF0YSwgYWN0aW9uKSB7XG4gIGNoZWNrTWl4ZWRUYXByb290QW5kTm9uVGFwcm9vdElucHV0RmllbGRzKGlucHV0RGF0YSwgbmV3SW5wdXREYXRhLCBhY3Rpb24pO1xuICBjaGVja0lmVGFwTGVhZkluVHJlZShpbnB1dERhdGEsIG5ld0lucHV0RGF0YSwgYWN0aW9uKTtcbn1cbmV4cG9ydHMuY2hlY2tUYXByb290SW5wdXRGaWVsZHMgPSBjaGVja1RhcHJvb3RJbnB1dEZpZWxkcztcbmZ1bmN0aW9uIGNoZWNrVGFwcm9vdE91dHB1dEZpZWxkcyhvdXRwdXREYXRhLCBuZXdPdXRwdXREYXRhLCBhY3Rpb24pIHtcbiAgY2hlY2tNaXhlZFRhcHJvb3RBbmROb25UYXByb290T3V0cHV0RmllbGRzKG91dHB1dERhdGEsIG5ld091dHB1dERhdGEsIGFjdGlvbik7XG4gIGNoZWNrVGFwcm9vdFNjcmlwdFB1YmtleShvdXRwdXREYXRhLCBuZXdPdXRwdXREYXRhKTtcbn1cbmV4cG9ydHMuY2hlY2tUYXByb290T3V0cHV0RmllbGRzID0gY2hlY2tUYXByb290T3V0cHV0RmllbGRzO1xuZnVuY3Rpb24gY2hlY2tUYXByb290U2NyaXB0UHVia2V5KG91dHB1dERhdGEsIG5ld091dHB1dERhdGEpIHtcbiAgaWYgKCFuZXdPdXRwdXREYXRhLnRhcFRyZWUgJiYgIW5ld091dHB1dERhdGEudGFwSW50ZXJuYWxLZXkpIHJldHVybjtcbiAgY29uc3QgdGFwSW50ZXJuYWxLZXkgPVxuICAgIG5ld091dHB1dERhdGEudGFwSW50ZXJuYWxLZXkgfHwgb3V0cHV0RGF0YS50YXBJbnRlcm5hbEtleTtcbiAgY29uc3QgdGFwVHJlZSA9IG5ld091dHB1dERhdGEudGFwVHJlZSB8fCBvdXRwdXREYXRhLnRhcFRyZWU7XG4gIGlmICh0YXBJbnRlcm5hbEtleSkge1xuICAgIGNvbnN0IHsgc2NyaXB0OiBzY3JpcHRQdWJrZXkgfSA9IG91dHB1dERhdGE7XG4gICAgY29uc3Qgc2NyaXB0ID0gZ2V0VGFwcm9vdFNjcmlwUHVia2V5KHRhcEludGVybmFsS2V5LCB0YXBUcmVlKTtcbiAgICBpZiAoc2NyaXB0UHVia2V5ICYmICFzY3JpcHRQdWJrZXkuZXF1YWxzKHNjcmlwdCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGFkZGluZyBvdXRwdXQuIFNjcmlwdCBvciBhZGRyZXNzIG1pc3NtYXRjaC4nKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0VGFwcm9vdFNjcmlwUHVia2V5KHRhcEludGVybmFsS2V5LCB0YXBUcmVlKSB7XG4gIGNvbnN0IHNjcmlwdFRyZWUgPSB0YXBUcmVlICYmIHRhcFRyZWVGcm9tTGlzdCh0YXBUcmVlLmxlYXZlcyk7XG4gIGNvbnN0IHsgb3V0cHV0IH0gPSAoMCwgcGF5bWVudHNfMS5wMnRyKSh7XG4gICAgaW50ZXJuYWxQdWJrZXk6IHRhcEludGVybmFsS2V5LFxuICAgIHNjcmlwdFRyZWUsXG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuZnVuY3Rpb24gdHdlYWtJbnRlcm5hbFB1YktleShpbnB1dEluZGV4LCBpbnB1dCkge1xuICBjb25zdCB0YXBJbnRlcm5hbEtleSA9IGlucHV0LnRhcEludGVybmFsS2V5O1xuICBjb25zdCBvdXRwdXRLZXkgPVxuICAgIHRhcEludGVybmFsS2V5ICYmXG4gICAgKDAsIGJpcDM0MV8xLnR3ZWFrS2V5KSh0YXBJbnRlcm5hbEtleSwgaW5wdXQudGFwTWVya2xlUm9vdCk7XG4gIGlmICghb3V0cHV0S2V5KVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDYW5ub3QgdHdlYWsgdGFwIGludGVybmFsIGtleSBmb3IgaW5wdXQgIyR7aW5wdXRJbmRleH0uIFB1YmxpYyBrZXk6ICR7XG4gICAgICAgIHRhcEludGVybmFsS2V5ICYmIHRhcEludGVybmFsS2V5LnRvU3RyaW5nKCdoZXgnKVxuICAgICAgfWAsXG4gICAgKTtcbiAgcmV0dXJuIG91dHB1dEtleS54O1xufVxuZXhwb3J0cy50d2Vha0ludGVybmFsUHViS2V5ID0gdHdlYWtJbnRlcm5hbFB1YktleTtcbi8qKlxuICogQ29udmVydCBhIGJpbmFyeSB0cmVlIHRvIGEgQklQMzcxIHR5cGUgbGlzdC4gRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0IGlzIChhY2NvcmRpbmcgdG8gQklQMzcxKTpcbiAqIE9uZSBvciBtb3JlIHR1cGxlcyByZXByZXNlbnRpbmcgdGhlIGRlcHRoLCBsZWFmIHZlcnNpb24sIGFuZCBzY3JpcHQgZm9yIGEgbGVhZiBpbiB0aGUgVGFwcm9vdCB0cmVlLFxuICogYWxsb3dpbmcgdGhlIGVudGlyZSB0cmVlIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRoZSB0dXBsZXMgbXVzdCBiZSBpbiBkZXB0aCBmaXJzdCBzZWFyY2ggb3JkZXIgc28gdGhhdFxuICogdGhlIHRyZWUgaXMgY29ycmVjdGx5IHJlY29uc3RydWN0ZWQuXG4gKiBAcGFyYW0gdHJlZSB0aGUgYmluYXJ5IHRhcCB0cmVlXG4gKiBAcmV0dXJucyBhIGxpc3Qgb2YgQklQIDM3MSB0YXBsZWF2ZXNcbiAqL1xuZnVuY3Rpb24gdGFwVHJlZVRvTGlzdCh0cmVlKSB7XG4gIGlmICghKDAsIHR5cGVzXzEuaXNUYXB0cmVlKSh0cmVlKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQ2Fubm90IGNvbnZlcnQgdGFwdHJlZSB0byB0YXBsZWFmIGxpc3QuIEV4cGVjdGluZyBhIHRhcHJlZSBzdHJ1Y3R1cmUuJyxcbiAgICApO1xuICByZXR1cm4gX3RhcFRyZWVUb0xpc3QodHJlZSk7XG59XG5leHBvcnRzLnRhcFRyZWVUb0xpc3QgPSB0YXBUcmVlVG9MaXN0O1xuLyoqXG4gKiBDb252ZXJ0IGEgQklQMzcxIFRhcExlYWYgbGlzdCB0byBhIFRhcFRyZWUgKGJpbmFyeSkuXG4gKiBAcGFyYW0gbGVhdmVzIGEgbGlzdCBvZiB0YXBsZWF2ZXMgd2hlcmUgZWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0IGlzIChhY2NvcmRpbmcgdG8gQklQMzcxKTpcbiAqIE9uZSBvciBtb3JlIHR1cGxlcyByZXByZXNlbnRpbmcgdGhlIGRlcHRoLCBsZWFmIHZlcnNpb24sIGFuZCBzY3JpcHQgZm9yIGEgbGVhZiBpbiB0aGUgVGFwcm9vdCB0cmVlLFxuICogYWxsb3dpbmcgdGhlIGVudGlyZSB0cmVlIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRoZSB0dXBsZXMgbXVzdCBiZSBpbiBkZXB0aCBmaXJzdCBzZWFyY2ggb3JkZXIgc28gdGhhdFxuICogdGhlIHRyZWUgaXMgY29ycmVjdGx5IHJlY29uc3RydWN0ZWQuXG4gKiBAcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyB0YXB0cmVlLCBvciB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSB0cmVlIGNhbm5vdCBiZSByZWNvbnN0cnVjdGVkXG4gKi9cbmZ1bmN0aW9uIHRhcFRyZWVGcm9tTGlzdChsZWF2ZXMgPSBbXSkge1xuICBpZiAobGVhdmVzLmxlbmd0aCA9PT0gMSAmJiBsZWF2ZXNbMF0uZGVwdGggPT09IDApXG4gICAgcmV0dXJuIHtcbiAgICAgIG91dHB1dDogbGVhdmVzWzBdLnNjcmlwdCxcbiAgICAgIHZlcnNpb246IGxlYXZlc1swXS5sZWFmVmVyc2lvbixcbiAgICB9O1xuICByZXR1cm4gaW5zdGVydExlYXZlc0luVHJlZShsZWF2ZXMpO1xufVxuZXhwb3J0cy50YXBUcmVlRnJvbUxpc3QgPSB0YXBUcmVlRnJvbUxpc3Q7XG5mdW5jdGlvbiBjaGVja1RhcHJvb3RJbnB1dEZvclNpZ3MoaW5wdXQsIGFjdGlvbikge1xuICBjb25zdCBzaWdzID0gZXh0cmFjdFRhcHJvb3RTaWdzKGlucHV0KTtcbiAgcmV0dXJuIHNpZ3Muc29tZShzaWcgPT5cbiAgICAoMCwgcHNidHV0aWxzXzIuc2lnbmF0dXJlQmxvY2tzQWN0aW9uKShzaWcsIGRlY29kZVNjaG5vcnJTaWduYXR1cmUsIGFjdGlvbiksXG4gICk7XG59XG5leHBvcnRzLmNoZWNrVGFwcm9vdElucHV0Rm9yU2lncyA9IGNoZWNrVGFwcm9vdElucHV0Rm9yU2lncztcbmZ1bmN0aW9uIGRlY29kZVNjaG5vcnJTaWduYXR1cmUoc2lnbmF0dXJlKSB7XG4gIHJldHVybiB7XG4gICAgc2lnbmF0dXJlOiBzaWduYXR1cmUuc2xpY2UoMCwgNjQpLFxuICAgIGhhc2hUeXBlOlxuICAgICAgc2lnbmF0dXJlLnNsaWNlKDY0KVswXSB8fCB0cmFuc2FjdGlvbl8xLlRyYW5zYWN0aW9uLlNJR0hBU0hfREVGQVVMVCxcbiAgfTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RUYXByb290U2lncyhpbnB1dCkge1xuICBjb25zdCBzaWdzID0gW107XG4gIGlmIChpbnB1dC50YXBLZXlTaWcpIHNpZ3MucHVzaChpbnB1dC50YXBLZXlTaWcpO1xuICBpZiAoaW5wdXQudGFwU2NyaXB0U2lnKVxuICAgIHNpZ3MucHVzaCguLi5pbnB1dC50YXBTY3JpcHRTaWcubWFwKHMgPT4gcy5zaWduYXR1cmUpKTtcbiAgaWYgKCFzaWdzLmxlbmd0aCkge1xuICAgIGNvbnN0IGZpbmFsVGFwS2V5U2lnID0gZ2V0VGFwS2V5U2lnRnJvbVdpdGhuZXNzKGlucHV0LmZpbmFsU2NyaXB0V2l0bmVzcyk7XG4gICAgaWYgKGZpbmFsVGFwS2V5U2lnKSBzaWdzLnB1c2goZmluYWxUYXBLZXlTaWcpO1xuICB9XG4gIHJldHVybiBzaWdzO1xufVxuZnVuY3Rpb24gZ2V0VGFwS2V5U2lnRnJvbVdpdGhuZXNzKGZpbmFsU2NyaXB0V2l0bmVzcykge1xuICBpZiAoIWZpbmFsU2NyaXB0V2l0bmVzcykgcmV0dXJuO1xuICBjb25zdCB3aXRuZXNzID0gZmluYWxTY3JpcHRXaXRuZXNzLnNsaWNlKDIpO1xuICAvLyB0b2RvOiBhZGQgc2Nobm9yciBzaWduYXR1cmUgdmFsaWRhdGlvblxuICBpZiAod2l0bmVzcy5sZW5ndGggPT09IDY0IHx8IHdpdG5lc3MubGVuZ3RoID09PSA2NSkgcmV0dXJuIHdpdG5lc3M7XG59XG5mdW5jdGlvbiBfdGFwVHJlZVRvTGlzdCh0cmVlLCBsZWF2ZXMgPSBbXSwgZGVwdGggPSAwKSB7XG4gIGlmIChkZXB0aCA+IGJpcDM0MV8xLk1BWF9UQVBUUkVFX0RFUFRIKVxuICAgIHRocm93IG5ldyBFcnJvcignTWF4IHRhcHRyZWUgZGVwdGggZXhjZWVkZWQuJyk7XG4gIGlmICghdHJlZSkgcmV0dXJuIFtdO1xuICBpZiAoKDAsIHR5cGVzXzEuaXNUYXBsZWFmKSh0cmVlKSkge1xuICAgIGxlYXZlcy5wdXNoKHtcbiAgICAgIGRlcHRoLFxuICAgICAgbGVhZlZlcnNpb246IHRyZWUudmVyc2lvbiB8fCBiaXAzNDFfMS5MRUFGX1ZFUlNJT05fVEFQU0NSSVBULFxuICAgICAgc2NyaXB0OiB0cmVlLm91dHB1dCxcbiAgICB9KTtcbiAgICByZXR1cm4gbGVhdmVzO1xuICB9XG4gIGlmICh0cmVlWzBdKSBfdGFwVHJlZVRvTGlzdCh0cmVlWzBdLCBsZWF2ZXMsIGRlcHRoICsgMSk7XG4gIGlmICh0cmVlWzFdKSBfdGFwVHJlZVRvTGlzdCh0cmVlWzFdLCBsZWF2ZXMsIGRlcHRoICsgMSk7XG4gIHJldHVybiBsZWF2ZXM7XG59XG5mdW5jdGlvbiBpbnN0ZXJ0TGVhdmVzSW5UcmVlKGxlYXZlcykge1xuICBsZXQgdHJlZTtcbiAgZm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuICAgIHRyZWUgPSBpbnN0ZXJ0TGVhZkluVHJlZShsZWFmLCB0cmVlKTtcbiAgICBpZiAoIXRyZWUpIHRocm93IG5ldyBFcnJvcihgTm8gcm9vbSBsZWZ0IHRvIGluc2VydCB0YXBsZWFmIGluIHRyZWVgKTtcbiAgfVxuICByZXR1cm4gdHJlZTtcbn1cbmZ1bmN0aW9uIGluc3RlcnRMZWFmSW5UcmVlKGxlYWYsIHRyZWUsIGRlcHRoID0gMCkge1xuICBpZiAoZGVwdGggPiBiaXAzNDFfMS5NQVhfVEFQVFJFRV9ERVBUSClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01heCB0YXB0cmVlIGRlcHRoIGV4Y2VlZGVkLicpO1xuICBpZiAobGVhZi5kZXB0aCA9PT0gZGVwdGgpIHtcbiAgICBpZiAoIXRyZWUpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXQ6IGxlYWYuc2NyaXB0LFxuICAgICAgICB2ZXJzaW9uOiBsZWFmLmxlYWZWZXJzaW9uLFxuICAgICAgfTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCgwLCB0eXBlc18xLmlzVGFwbGVhZikodHJlZSkpIHJldHVybjtcbiAgY29uc3QgbGVmdFNpZGUgPSBpbnN0ZXJ0TGVhZkluVHJlZShsZWFmLCB0cmVlICYmIHRyZWVbMF0sIGRlcHRoICsgMSk7XG4gIGlmIChsZWZ0U2lkZSkgcmV0dXJuIFtsZWZ0U2lkZSwgdHJlZSAmJiB0cmVlWzFdXTtcbiAgY29uc3QgcmlnaHRTaWRlID0gaW5zdGVydExlYWZJblRyZWUobGVhZiwgdHJlZSAmJiB0cmVlWzFdLCBkZXB0aCArIDEpO1xuICBpZiAocmlnaHRTaWRlKSByZXR1cm4gW3RyZWUgJiYgdHJlZVswXSwgcmlnaHRTaWRlXTtcbn1cbmZ1bmN0aW9uIGNoZWNrTWl4ZWRUYXByb290QW5kTm9uVGFwcm9vdElucHV0RmllbGRzKFxuICBpbnB1dERhdGEsXG4gIG5ld0lucHV0RGF0YSxcbiAgYWN0aW9uLFxuKSB7XG4gIGNvbnN0IGlzQmFkVGFwcm9vdFVwZGF0ZSA9XG4gICAgaXNUYXByb290SW5wdXQoaW5wdXREYXRhKSAmJiBoYXNOb25UYXByb290RmllbGRzKG5ld0lucHV0RGF0YSk7XG4gIGNvbnN0IGlzQmFkTm9uVGFwcm9vdFVwZGF0ZSA9XG4gICAgaGFzTm9uVGFwcm9vdEZpZWxkcyhpbnB1dERhdGEpICYmIGlzVGFwcm9vdElucHV0KG5ld0lucHV0RGF0YSk7XG4gIGNvbnN0IGhhc01peGVkRmllbGRzID1cbiAgICBpbnB1dERhdGEgPT09IG5ld0lucHV0RGF0YSAmJlxuICAgIGlzVGFwcm9vdElucHV0KG5ld0lucHV0RGF0YSkgJiZcbiAgICBoYXNOb25UYXByb290RmllbGRzKG5ld0lucHV0RGF0YSk7IC8vIHRvZG86IGJhZD8gdXNlICE9PT1cbiAgaWYgKGlzQmFkVGFwcm9vdFVwZGF0ZSB8fCBpc0JhZE5vblRhcHJvb3RVcGRhdGUgfHwgaGFzTWl4ZWRGaWVsZHMpXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgYXJndW1lbnRzIGZvciBQc2J0LiR7YWN0aW9ufS4gYCArXG4gICAgICAgIGBDYW5ub3QgdXNlIGJvdGggdGFwcm9vdCBhbmQgbm9uLXRhcHJvb3QgZmllbGRzLmAsXG4gICAgKTtcbn1cbmZ1bmN0aW9uIGNoZWNrTWl4ZWRUYXByb290QW5kTm9uVGFwcm9vdE91dHB1dEZpZWxkcyhcbiAgaW5wdXREYXRhLFxuICBuZXdJbnB1dERhdGEsXG4gIGFjdGlvbixcbikge1xuICBjb25zdCBpc0JhZFRhcHJvb3RVcGRhdGUgPVxuICAgIGlzVGFwcm9vdE91dHB1dChpbnB1dERhdGEpICYmIGhhc05vblRhcHJvb3RGaWVsZHMobmV3SW5wdXREYXRhKTtcbiAgY29uc3QgaXNCYWROb25UYXByb290VXBkYXRlID1cbiAgICBoYXNOb25UYXByb290RmllbGRzKGlucHV0RGF0YSkgJiYgaXNUYXByb290T3V0cHV0KG5ld0lucHV0RGF0YSk7XG4gIGNvbnN0IGhhc01peGVkRmllbGRzID1cbiAgICBpbnB1dERhdGEgPT09IG5ld0lucHV0RGF0YSAmJlxuICAgIGlzVGFwcm9vdE91dHB1dChuZXdJbnB1dERhdGEpICYmXG4gICAgaGFzTm9uVGFwcm9vdEZpZWxkcyhuZXdJbnB1dERhdGEpO1xuICBpZiAoaXNCYWRUYXByb290VXBkYXRlIHx8IGlzQmFkTm9uVGFwcm9vdFVwZGF0ZSB8fCBoYXNNaXhlZEZpZWxkcylcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBhcmd1bWVudHMgZm9yIFBzYnQuJHthY3Rpb259LiBgICtcbiAgICAgICAgYENhbm5vdCB1c2UgYm90aCB0YXByb290IGFuZCBub24tdGFwcm9vdCBmaWVsZHMuYCxcbiAgICApO1xufVxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHRhcCBsZWFmIGlzIHBhcnQgb2YgdGhlIHRhcCB0cmVlIGZvciB0aGUgZ2l2ZW4gaW5wdXQgZGF0YS5cbiAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgdGFwIGxlYWYgaXMgbm90IHBhcnQgb2YgdGhlIHRhcCB0cmVlLlxuICogQHBhcmFtIGlucHV0RGF0YSAtIFRoZSBvcmlnaW5hbCBQc2J0SW5wdXQgZGF0YS5cbiAqIEBwYXJhbSBuZXdJbnB1dERhdGEgLSBUaGUgbmV3IFBzYnRJbnB1dCBkYXRhLlxuICogQHBhcmFtIGFjdGlvbiAtIFRoZSBhY3Rpb24gYmVpbmcgcGVyZm9ybWVkLlxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgdGhlIHRhcCBsZWFmIGlzIG5vdCBwYXJ0IG9mIHRoZSB0YXAgdHJlZS5cbiAqL1xuZnVuY3Rpb24gY2hlY2tJZlRhcExlYWZJblRyZWUoaW5wdXREYXRhLCBuZXdJbnB1dERhdGEsIGFjdGlvbikge1xuICBpZiAobmV3SW5wdXREYXRhLnRhcE1lcmtsZVJvb3QpIHtcbiAgICBjb25zdCBuZXdMZWFmc0luVHJlZSA9IChuZXdJbnB1dERhdGEudGFwTGVhZlNjcmlwdCB8fCBbXSkuZXZlcnkobCA9PlxuICAgICAgaXNUYXBMZWFmSW5UcmVlKGwsIG5ld0lucHV0RGF0YS50YXBNZXJrbGVSb290KSxcbiAgICApO1xuICAgIGNvbnN0IG9sZExlYWZzSW5UcmVlID0gKGlucHV0RGF0YS50YXBMZWFmU2NyaXB0IHx8IFtdKS5ldmVyeShsID0+XG4gICAgICBpc1RhcExlYWZJblRyZWUobCwgbmV3SW5wdXREYXRhLnRhcE1lcmtsZVJvb3QpLFxuICAgICk7XG4gICAgaWYgKCFuZXdMZWFmc0luVHJlZSB8fCAhb2xkTGVhZnNJblRyZWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgUHNidC4ke2FjdGlvbn0uIFRhcGxlYWYgbm90IHBhcnQgb2YgdGFwdHJlZS5gLFxuICAgICAgKTtcbiAgfSBlbHNlIGlmIChpbnB1dERhdGEudGFwTWVya2xlUm9vdCkge1xuICAgIGNvbnN0IG5ld0xlYWZzSW5UcmVlID0gKG5ld0lucHV0RGF0YS50YXBMZWFmU2NyaXB0IHx8IFtdKS5ldmVyeShsID0+XG4gICAgICBpc1RhcExlYWZJblRyZWUobCwgaW5wdXREYXRhLnRhcE1lcmtsZVJvb3QpLFxuICAgICk7XG4gICAgaWYgKCFuZXdMZWFmc0luVHJlZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgYXJndW1lbnRzIGZvciBQc2J0LiR7YWN0aW9ufS4gVGFwbGVhZiBub3QgcGFydCBvZiB0YXB0cmVlLmAsXG4gICAgICApO1xuICB9XG59XG4vKipcbiAqIENoZWNrcyBpZiBhIFRhcExlYWZTY3JpcHQgaXMgcHJlc2VudCBpbiBhIE1lcmtsZSB0cmVlLlxuICogQHBhcmFtIHRhcExlYWYgVGhlIFRhcExlYWZTY3JpcHQgdG8gY2hlY2suXG4gKiBAcGFyYW0gbWVya2xlUm9vdCBUaGUgTWVya2xlIHJvb3Qgb2YgdGhlIHRyZWUuIElmIG5vdCBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIFRhcExlYWZTY3JpcHQgaXMgcHJlc2VudC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFRhcExlYWZTY3JpcHQgaXMgcHJlc2VudCBpbiB0aGUgdHJlZS5cbiAqL1xuZnVuY3Rpb24gaXNUYXBMZWFmSW5UcmVlKHRhcExlYWYsIG1lcmtsZVJvb3QpIHtcbiAgaWYgKCFtZXJrbGVSb290KSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgbGVhZkhhc2ggPSAoMCwgYmlwMzQxXzEudGFwbGVhZkhhc2gpKHtcbiAgICBvdXRwdXQ6IHRhcExlYWYuc2NyaXB0LFxuICAgIHZlcnNpb246IHRhcExlYWYubGVhZlZlcnNpb24sXG4gIH0pO1xuICBjb25zdCByb290SGFzaCA9ICgwLCBiaXAzNDFfMS5yb290SGFzaEZyb21QYXRoKShcbiAgICB0YXBMZWFmLmNvbnRyb2xCbG9jayxcbiAgICBsZWFmSGFzaCxcbiAgKTtcbiAgcmV0dXJuIHJvb3RIYXNoLmVxdWFscyhtZXJrbGVSb290KTtcbn1cbi8qKlxuICogU29ydHMgdGhlIHNpZ25hdHVyZXMgaW4gdGhlIGlucHV0J3MgdGFwU2NyaXB0U2lnIGFycmF5IGJhc2VkIG9uIHRoZWlyIHBvc2l0aW9uIGluIHRoZSB0YXBMZWFmIHNjcmlwdC5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBUaGUgUHNidElucHV0IG9iamVjdC5cbiAqIEBwYXJhbSB0YXBMZWFmIC0gVGhlIFRhcExlYWZTY3JpcHQgb2JqZWN0LlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc29ydGVkIHNpZ25hdHVyZXMgYXMgQnVmZmVycy5cbiAqL1xuZnVuY3Rpb24gc29ydFNpZ25hdHVyZXMoaW5wdXQsIHRhcExlYWYpIHtcbiAgY29uc3QgbGVhZkhhc2ggPSAoMCwgYmlwMzQxXzEudGFwbGVhZkhhc2gpKHtcbiAgICBvdXRwdXQ6IHRhcExlYWYuc2NyaXB0LFxuICAgIHZlcnNpb246IHRhcExlYWYubGVhZlZlcnNpb24sXG4gIH0pO1xuICByZXR1cm4gKGlucHV0LnRhcFNjcmlwdFNpZyB8fCBbXSlcbiAgICAuZmlsdGVyKHRzcyA9PiB0c3MubGVhZkhhc2guZXF1YWxzKGxlYWZIYXNoKSlcbiAgICAubWFwKHRzcyA9PiBhZGRQdWJrZXlQb3NpdGlvbkluU2NyaXB0KHRhcExlYWYuc2NyaXB0LCB0c3MpKVxuICAgIC5zb3J0KCh0MSwgdDIpID0+IHQyLnBvc2l0aW9uSW5TY3JpcHQgLSB0MS5wb3NpdGlvbkluU2NyaXB0KVxuICAgIC5tYXAodCA9PiB0LnNpZ25hdHVyZSk7XG59XG4vKipcbiAqIEFkZHMgdGhlIHBvc2l0aW9uIG9mIGEgcHVibGljIGtleSBpbiBhIHNjcmlwdCB0byBhIFRhcFNjcmlwdFNpZyBvYmplY3QuXG4gKiBAcGFyYW0gc2NyaXB0IFRoZSBzY3JpcHQgaW4gd2hpY2ggdG8gZmluZCB0aGUgcG9zaXRpb24gb2YgdGhlIHB1YmxpYyBrZXkuXG4gKiBAcGFyYW0gdHNzIFRoZSBUYXBTY3JpcHRTaWcgb2JqZWN0IHRvIGFkZCB0aGUgcG9zaXRpb24gdG8uXG4gKiBAcmV0dXJucyBBIFRhcFNjcmlwdFNpZ1dpdFBvc2l0aW9uIG9iamVjdCB3aXRoIHRoZSBhZGRlZCBwb3NpdGlvbi5cbiAqL1xuZnVuY3Rpb24gYWRkUHVia2V5UG9zaXRpb25JblNjcmlwdChzY3JpcHQsIHRzcykge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7XG4gICAgICBwb3NpdGlvbkluU2NyaXB0OiAoMCwgcHNidHV0aWxzXzEucHVia2V5UG9zaXRpb25JblNjcmlwdCkoXG4gICAgICAgIHRzcy5wdWJrZXksXG4gICAgICAgIHNjcmlwdCxcbiAgICAgICksXG4gICAgfSxcbiAgICB0c3MsXG4gICk7XG59XG4vKipcbiAqIEZpbmQgdGFwbGVhZiBieSBoYXNoLCBvciBnZXQgdGhlIHNpZ25lZCB0YXBsZWFmIHdpdGggdGhlIHNob3J0ZXN0IHBhdGguXG4gKi9cbmZ1bmN0aW9uIGZpbmRUYXBMZWFmVG9GaW5hbGl6ZShpbnB1dCwgaW5wdXRJbmRleCwgbGVhZkhhc2hUb0ZpbmFsaXplKSB7XG4gIGlmICghaW5wdXQudGFwU2NyaXB0U2lnIHx8ICFpbnB1dC50YXBTY3JpcHRTaWcubGVuZ3RoKVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDYW4gbm90IGZpbmFsaXplIHRhcHJvb3QgaW5wdXQgIyR7aW5wdXRJbmRleH0uIE5vIHRhcGxlYWYgc2NyaXB0IHNpZ25hdHVyZSBwcm92aWRlZC5gLFxuICAgICk7XG4gIGNvbnN0IHRhcExlYWYgPSAoaW5wdXQudGFwTGVhZlNjcmlwdCB8fCBbXSlcbiAgICAuc29ydCgoYSwgYikgPT4gYS5jb250cm9sQmxvY2subGVuZ3RoIC0gYi5jb250cm9sQmxvY2subGVuZ3RoKVxuICAgIC5maW5kKGxlYWYgPT5cbiAgICAgIGNhbkZpbmFsaXplTGVhZihsZWFmLCBpbnB1dC50YXBTY3JpcHRTaWcsIGxlYWZIYXNoVG9GaW5hbGl6ZSksXG4gICAgKTtcbiAgaWYgKCF0YXBMZWFmKVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDYW4gbm90IGZpbmFsaXplIHRhcHJvb3QgaW5wdXQgIyR7aW5wdXRJbmRleH0uIFNpZ25hdHVyZSBmb3IgdGFwbGVhZiBzY3JpcHQgbm90IGZvdW5kLmAsXG4gICAgKTtcbiAgcmV0dXJuIHRhcExlYWY7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIFRhcExlYWZTY3JpcHQgY2FuIGJlIGZpbmFsaXplZC5cbiAqXG4gKiBAcGFyYW0gbGVhZiAtIFRoZSBUYXBMZWFmU2NyaXB0IHRvIGNoZWNrLlxuICogQHBhcmFtIHRhcFNjcmlwdFNpZyAtIFRoZSBhcnJheSBvZiBUYXBTY3JpcHRTaWcgb2JqZWN0cy5cbiAqIEBwYXJhbSBoYXNoIC0gVGhlIG9wdGlvbmFsIGhhc2ggdG8gY29tcGFyZSB3aXRoIHRoZSBsZWFmIGhhc2guXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBUYXBMZWFmU2NyaXB0IGNhbiBiZSBmaW5hbGl6ZWQuXG4gKi9cbmZ1bmN0aW9uIGNhbkZpbmFsaXplTGVhZihsZWFmLCB0YXBTY3JpcHRTaWcsIGhhc2gpIHtcbiAgY29uc3QgbGVhZkhhc2ggPSAoMCwgYmlwMzQxXzEudGFwbGVhZkhhc2gpKHtcbiAgICBvdXRwdXQ6IGxlYWYuc2NyaXB0LFxuICAgIHZlcnNpb246IGxlYWYubGVhZlZlcnNpb24sXG4gIH0pO1xuICBjb25zdCB3aGl0ZUxpc3RlZEhhc2ggPSAhaGFzaCB8fCBoYXNoLmVxdWFscyhsZWFmSGFzaCk7XG4gIHJldHVybiAoXG4gICAgd2hpdGVMaXN0ZWRIYXNoICYmXG4gICAgdGFwU2NyaXB0U2lnLmZpbmQodHNzID0+IHRzcy5sZWFmSGFzaC5lcXVhbHMobGVhZkhhc2gpKSAhPT0gdW5kZWZpbmVkXG4gICk7XG59XG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gUHNidElucHV0IG9yIFBzYnRPdXRwdXQgaGFzIG5vbi10YXByb290IGZpZWxkcy5cbiAqIE5vbi10YXByb290IGZpZWxkcyBpbmNsdWRlIHJlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCwgYW5kIGJpcDMyRGVyaXZhdGlvbi5cbiAqIEBwYXJhbSBpbyBUaGUgUHNidElucHV0IG9yIFBzYnRPdXRwdXQgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBnaXZlbiBpbnB1dCBvciBvdXRwdXQgaGFzIG5vbi10YXByb290IGZpZWxkcy5cbiAqL1xuZnVuY3Rpb24gaGFzTm9uVGFwcm9vdEZpZWxkcyhpbykge1xuICByZXR1cm4gKFxuICAgIGlvICYmXG4gICAgISEoXG4gICAgICBpby5yZWRlZW1TY3JpcHQgfHxcbiAgICAgIGlvLndpdG5lc3NTY3JpcHQgfHxcbiAgICAgIChpby5iaXAzMkRlcml2YXRpb24gJiYgaW8uYmlwMzJEZXJpdmF0aW9uLmxlbmd0aClcbiAgICApXG4gICk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/psbt/bip371.js\n\n}')},"./node_modules/bitcoinjs-lib/src/psbt/psbtutils.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer;\n\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nexports.signatureBlocksAction =\n exports.checkInputForSig =\n exports.pubkeyInScript =\n exports.pubkeyPositionInScript =\n exports.witnessStackToScriptWitness =\n exports.isP2TR =\n exports.isP2SHScript =\n exports.isP2WSHScript =\n exports.isP2WPKH =\n exports.isP2PKH =\n exports.isP2PK =\n exports.isP2MS =\n void 0;\nconst varuint = __webpack_require__(/*! bip174/src/lib/converter/varint */ "./node_modules/bip174/src/lib/converter/varint.js");\nconst bscript = __webpack_require__(/*! ../script */ "./node_modules/bitcoinjs-lib/src/script.js");\nconst transaction_1 = __webpack_require__(/*! ../transaction */ "./node_modules/bitcoinjs-lib/src/transaction.js");\nconst crypto_1 = __webpack_require__(/*! ../crypto */ "./node_modules/bitcoinjs-lib/src/crypto.js");\nconst payments = __webpack_require__(/*! ../payments */ "./node_modules/bitcoinjs-lib/src/payments/index.js");\nfunction isPaymentFactory(payment) {\n return script => {\n try {\n payment({ output: script });\n return true;\n } catch (err) {\n return false;\n }\n };\n}\nexports.isP2MS = isPaymentFactory(payments.p2ms);\nexports.isP2PK = isPaymentFactory(payments.p2pk);\nexports.isP2PKH = isPaymentFactory(payments.p2pkh);\nexports.isP2WPKH = isPaymentFactory(payments.p2wpkh);\nexports.isP2WSHScript = isPaymentFactory(payments.p2wsh);\nexports.isP2SHScript = isPaymentFactory(payments.p2sh);\nexports.isP2TR = isPaymentFactory(payments.p2tr);\n/**\n * Converts a witness stack to a script witness.\n * @param witness The witness stack to convert.\n * @returns The script witness as a Buffer.\n */\n/**\n * Converts a witness stack to a script witness.\n * @param witness The witness stack to convert.\n * @returns The converted script witness.\n */\nfunction witnessStackToScriptWitness(witness) {\n let buffer = Buffer.allocUnsafe(0);\n function writeSlice(slice) {\n buffer = Buffer.concat([buffer, Buffer.from(slice)]);\n }\n function writeVarInt(i) {\n const currentLen = buffer.length;\n const varintLen = varuint.encodingLength(i);\n buffer = Buffer.concat([buffer, Buffer.allocUnsafe(varintLen)]);\n varuint.encode(i, buffer, currentLen);\n }\n function writeVarSlice(slice) {\n writeVarInt(slice.length);\n writeSlice(slice);\n }\n function writeVector(vector) {\n writeVarInt(vector.length);\n vector.forEach(writeVarSlice);\n }\n writeVector(witness);\n return buffer;\n}\nexports.witnessStackToScriptWitness = witnessStackToScriptWitness;\n/**\n * Finds the position of a public key in a script.\n * @param pubkey The public key to search for.\n * @param script The script to search in.\n * @returns The index of the public key in the script, or -1 if not found.\n * @throws {Error} If there is an unknown script error.\n */\nfunction pubkeyPositionInScript(pubkey, script) {\n const pubkeyHash = (0, crypto_1.hash160)(pubkey);\n const pubkeyXOnly = pubkey.slice(1, 33); // slice before calling?\n const decompiled = bscript.decompile(script);\n if (decompiled === null) throw new Error(\'Unknown script error\');\n return decompiled.findIndex(element => {\n if (typeof element === \'number\') return false;\n return (\n element.equals(pubkey) ||\n element.equals(pubkeyHash) ||\n element.equals(pubkeyXOnly)\n );\n });\n}\nexports.pubkeyPositionInScript = pubkeyPositionInScript;\n/**\n * Checks if a public key is present in a script.\n * @param pubkey The public key to check.\n * @param script The script to search in.\n * @returns A boolean indicating whether the public key is present in the script.\n */\nfunction pubkeyInScript(pubkey, script) {\n return pubkeyPositionInScript(pubkey, script) !== -1;\n}\nexports.pubkeyInScript = pubkeyInScript;\n/**\n * Checks if an input contains a signature for a specific action.\n * @param input - The input to check.\n * @param action - The action to check for.\n * @returns A boolean indicating whether the input contains a signature for the specified action.\n */\nfunction checkInputForSig(input, action) {\n const pSigs = extractPartialSigs(input);\n return pSigs.some(pSig =>\n signatureBlocksAction(pSig, bscript.signature.decode, action),\n );\n}\nexports.checkInputForSig = checkInputForSig;\n/**\n * Determines if a given action is allowed for a signature block.\n * @param signature - The signature block.\n * @param signatureDecodeFn - The function used to decode the signature.\n * @param action - The action to be checked.\n * @returns True if the action is allowed, false otherwise.\n */\nfunction signatureBlocksAction(signature, signatureDecodeFn, action) {\n const { hashType } = signatureDecodeFn(signature);\n const whitelist = [];\n const isAnyoneCanPay =\n hashType & transaction_1.Transaction.SIGHASH_ANYONECANPAY;\n if (isAnyoneCanPay) whitelist.push(\'addInput\');\n const hashMod = hashType & 0x1f;\n switch (hashMod) {\n case transaction_1.Transaction.SIGHASH_ALL:\n break;\n case transaction_1.Transaction.SIGHASH_SINGLE:\n case transaction_1.Transaction.SIGHASH_NONE:\n whitelist.push(\'addOutput\');\n whitelist.push(\'setInputSequence\');\n break;\n }\n if (whitelist.indexOf(action) === -1) {\n return true;\n }\n return false;\n}\nexports.signatureBlocksAction = signatureBlocksAction;\n/**\n * Extracts the signatures from a PsbtInput object.\n * If the input has partial signatures, it returns an array of the signatures.\n * If the input does not have partial signatures, it checks if it has a finalScriptSig or finalScriptWitness.\n * If it does, it extracts the signatures from the final scripts and returns them.\n * If none of the above conditions are met, it returns an empty array.\n *\n * @param input - The PsbtInput object from which to extract the signatures.\n * @returns An array of signatures extracted from the PsbtInput object.\n */\nfunction extractPartialSigs(input) {\n let pSigs = [];\n if ((input.partialSig || []).length === 0) {\n if (!input.finalScriptSig && !input.finalScriptWitness) return [];\n pSigs = getPsigsFromInputFinalScripts(input);\n } else {\n pSigs = input.partialSig;\n }\n return pSigs.map(p => p.signature);\n}\n/**\n * Retrieves the partial signatures (Psigs) from the input\'s final scripts.\n * Psigs are extracted from both the final scriptSig and final scriptWitness of the input.\n * Only canonical script signatures are considered.\n *\n * @param input - The PsbtInput object representing the input.\n * @returns An array of PartialSig objects containing the extracted Psigs.\n */\nfunction getPsigsFromInputFinalScripts(input) {\n const scriptItems = !input.finalScriptSig\n ? []\n : bscript.decompile(input.finalScriptSig) || [];\n const witnessItems = !input.finalScriptWitness\n ? []\n : bscript.decompile(input.finalScriptWitness) || [];\n return scriptItems\n .concat(witnessItems)\n .filter(item => {\n return Buffer.isBuffer(item) && bscript.isCanonicalScriptSignature(item);\n })\n .map(sig => ({ signature: sig }));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcHNidC9wc2J0dXRpbHMuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDZCQUE2QjtBQUM3QixFQUFFLHdCQUF3QjtBQUMxQixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLDhCQUE4QjtBQUNoQyxFQUFFLG1DQUFtQztBQUNyQyxFQUFFLGNBQWM7QUFDaEIsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsY0FBYztBQUNoQixFQUFFLGNBQWM7QUFDaEI7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQywwRkFBaUM7QUFDekQsZ0JBQWdCLG1CQUFPLENBQUMsNkRBQVc7QUFDbkMsc0JBQXNCLG1CQUFPLENBQUMsdUVBQWdCO0FBQzlDLGlCQUFpQixtQkFBTyxDQUFDLDZEQUFXO0FBQ3BDLGlCQUFpQixtQkFBTyxDQUFDLHVFQUFhO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsY0FBYztBQUNkLGVBQWU7QUFDZixnQkFBZ0I7QUFDaEIscUJBQXFCO0FBQ3JCLG9CQUFvQjtBQUNwQixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsTUFBTTtBQUNyQjtBQUNBLGFBQWEsTUFBTSxpQkFBaUIsTUFBTTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTSxpQkFBaUIsTUFBTTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxXQUFXO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQixLQUFLO0FBQ0wsbUJBQW1CLGdCQUFnQjtBQUNuQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL3BzYnQvcHNidHV0aWxzLmpzPzhhOWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2lnbmF0dXJlQmxvY2tzQWN0aW9uID1cbiAgZXhwb3J0cy5jaGVja0lucHV0Rm9yU2lnID1cbiAgZXhwb3J0cy5wdWJrZXlJblNjcmlwdCA9XG4gIGV4cG9ydHMucHVia2V5UG9zaXRpb25JblNjcmlwdCA9XG4gIGV4cG9ydHMud2l0bmVzc1N0YWNrVG9TY3JpcHRXaXRuZXNzID1cbiAgZXhwb3J0cy5pc1AyVFIgPVxuICBleHBvcnRzLmlzUDJTSFNjcmlwdCA9XG4gIGV4cG9ydHMuaXNQMldTSFNjcmlwdCA9XG4gIGV4cG9ydHMuaXNQMldQS0ggPVxuICBleHBvcnRzLmlzUDJQS0ggPVxuICBleHBvcnRzLmlzUDJQSyA9XG4gIGV4cG9ydHMuaXNQMk1TID1cbiAgICB2b2lkIDA7XG5jb25zdCB2YXJ1aW50ID0gcmVxdWlyZSgnYmlwMTc0L3NyYy9saWIvY29udmVydGVyL3ZhcmludCcpO1xuY29uc3QgYnNjcmlwdCA9IHJlcXVpcmUoJy4uL3NjcmlwdCcpO1xuY29uc3QgdHJhbnNhY3Rpb25fMSA9IHJlcXVpcmUoJy4uL3RyYW5zYWN0aW9uJyk7XG5jb25zdCBjcnlwdG9fMSA9IHJlcXVpcmUoJy4uL2NyeXB0bycpO1xuY29uc3QgcGF5bWVudHMgPSByZXF1aXJlKCcuLi9wYXltZW50cycpO1xuZnVuY3Rpb24gaXNQYXltZW50RmFjdG9yeShwYXltZW50KSB7XG4gIHJldHVybiBzY3JpcHQgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwYXltZW50KHsgb3V0cHV0OiBzY3JpcHQgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG59XG5leHBvcnRzLmlzUDJNUyA9IGlzUGF5bWVudEZhY3RvcnkocGF5bWVudHMucDJtcyk7XG5leHBvcnRzLmlzUDJQSyA9IGlzUGF5bWVudEZhY3RvcnkocGF5bWVudHMucDJwayk7XG5leHBvcnRzLmlzUDJQS0ggPSBpc1BheW1lbnRGYWN0b3J5KHBheW1lbnRzLnAycGtoKTtcbmV4cG9ydHMuaXNQMldQS0ggPSBpc1BheW1lbnRGYWN0b3J5KHBheW1lbnRzLnAyd3BraCk7XG5leHBvcnRzLmlzUDJXU0hTY3JpcHQgPSBpc1BheW1lbnRGYWN0b3J5KHBheW1lbnRzLnAyd3NoKTtcbmV4cG9ydHMuaXNQMlNIU2NyaXB0ID0gaXNQYXltZW50RmFjdG9yeShwYXltZW50cy5wMnNoKTtcbmV4cG9ydHMuaXNQMlRSID0gaXNQYXltZW50RmFjdG9yeShwYXltZW50cy5wMnRyKTtcbi8qKlxuICogQ29udmVydHMgYSB3aXRuZXNzIHN0YWNrIHRvIGEgc2NyaXB0IHdpdG5lc3MuXG4gKiBAcGFyYW0gd2l0bmVzcyBUaGUgd2l0bmVzcyBzdGFjayB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIHNjcmlwdCB3aXRuZXNzIGFzIGEgQnVmZmVyLlxuICovXG4vKipcbiAqIENvbnZlcnRzIGEgd2l0bmVzcyBzdGFjayB0byBhIHNjcmlwdCB3aXRuZXNzLlxuICogQHBhcmFtIHdpdG5lc3MgVGhlIHdpdG5lc3Mgc3RhY2sgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgc2NyaXB0IHdpdG5lc3MuXG4gKi9cbmZ1bmN0aW9uIHdpdG5lc3NTdGFja1RvU2NyaXB0V2l0bmVzcyh3aXRuZXNzKSB7XG4gIGxldCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMCk7XG4gIGZ1bmN0aW9uIHdyaXRlU2xpY2Uoc2xpY2UpIHtcbiAgICBidWZmZXIgPSBCdWZmZXIuY29uY2F0KFtidWZmZXIsIEJ1ZmZlci5mcm9tKHNsaWNlKV0pO1xuICB9XG4gIGZ1bmN0aW9uIHdyaXRlVmFySW50KGkpIHtcbiAgICBjb25zdCBjdXJyZW50TGVuID0gYnVmZmVyLmxlbmd0aDtcbiAgICBjb25zdCB2YXJpbnRMZW4gPSB2YXJ1aW50LmVuY29kaW5nTGVuZ3RoKGkpO1xuICAgIGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW2J1ZmZlciwgQnVmZmVyLmFsbG9jVW5zYWZlKHZhcmludExlbildKTtcbiAgICB2YXJ1aW50LmVuY29kZShpLCBidWZmZXIsIGN1cnJlbnRMZW4pO1xuICB9XG4gIGZ1bmN0aW9uIHdyaXRlVmFyU2xpY2Uoc2xpY2UpIHtcbiAgICB3cml0ZVZhckludChzbGljZS5sZW5ndGgpO1xuICAgIHdyaXRlU2xpY2Uoc2xpY2UpO1xuICB9XG4gIGZ1bmN0aW9uIHdyaXRlVmVjdG9yKHZlY3Rvcikge1xuICAgIHdyaXRlVmFySW50KHZlY3Rvci5sZW5ndGgpO1xuICAgIHZlY3Rvci5mb3JFYWNoKHdyaXRlVmFyU2xpY2UpO1xuICB9XG4gIHdyaXRlVmVjdG9yKHdpdG5lc3MpO1xuICByZXR1cm4gYnVmZmVyO1xufVxuZXhwb3J0cy53aXRuZXNzU3RhY2tUb1NjcmlwdFdpdG5lc3MgPSB3aXRuZXNzU3RhY2tUb1NjcmlwdFdpdG5lc3M7XG4vKipcbiAqIEZpbmRzIHRoZSBwb3NpdGlvbiBvZiBhIHB1YmxpYyBrZXkgaW4gYSBzY3JpcHQuXG4gKiBAcGFyYW0gcHVia2V5IFRoZSBwdWJsaWMga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0gc2NyaXB0IFRoZSBzY3JpcHQgdG8gc2VhcmNoIGluLlxuICogQHJldHVybnMgVGhlIGluZGV4IG9mIHRoZSBwdWJsaWMga2V5IGluIHRoZSBzY3JpcHQsIG9yIC0xIGlmIG5vdCBmb3VuZC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSBpcyBhbiB1bmtub3duIHNjcmlwdCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gcHVia2V5UG9zaXRpb25JblNjcmlwdChwdWJrZXksIHNjcmlwdCkge1xuICBjb25zdCBwdWJrZXlIYXNoID0gKDAsIGNyeXB0b18xLmhhc2gxNjApKHB1YmtleSk7XG4gIGNvbnN0IHB1YmtleVhPbmx5ID0gcHVia2V5LnNsaWNlKDEsIDMzKTsgLy8gc2xpY2UgYmVmb3JlIGNhbGxpbmc/XG4gIGNvbnN0IGRlY29tcGlsZWQgPSBic2NyaXB0LmRlY29tcGlsZShzY3JpcHQpO1xuICBpZiAoZGVjb21waWxlZCA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHNjcmlwdCBlcnJvcicpO1xuICByZXR1cm4gZGVjb21waWxlZC5maW5kSW5kZXgoZWxlbWVudCA9PiB7XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoXG4gICAgICBlbGVtZW50LmVxdWFscyhwdWJrZXkpIHx8XG4gICAgICBlbGVtZW50LmVxdWFscyhwdWJrZXlIYXNoKSB8fFxuICAgICAgZWxlbWVudC5lcXVhbHMocHVia2V5WE9ubHkpXG4gICAgKTtcbiAgfSk7XG59XG5leHBvcnRzLnB1YmtleVBvc2l0aW9uSW5TY3JpcHQgPSBwdWJrZXlQb3NpdGlvbkluU2NyaXB0O1xuLyoqXG4gKiBDaGVja3MgaWYgYSBwdWJsaWMga2V5IGlzIHByZXNlbnQgaW4gYSBzY3JpcHQuXG4gKiBAcGFyYW0gcHVia2V5IFRoZSBwdWJsaWMga2V5IHRvIGNoZWNrLlxuICogQHBhcmFtIHNjcmlwdCBUaGUgc2NyaXB0IHRvIHNlYXJjaCBpbi5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHB1YmxpYyBrZXkgaXMgcHJlc2VudCBpbiB0aGUgc2NyaXB0LlxuICovXG5mdW5jdGlvbiBwdWJrZXlJblNjcmlwdChwdWJrZXksIHNjcmlwdCkge1xuICByZXR1cm4gcHVia2V5UG9zaXRpb25JblNjcmlwdChwdWJrZXksIHNjcmlwdCkgIT09IC0xO1xufVxuZXhwb3J0cy5wdWJrZXlJblNjcmlwdCA9IHB1YmtleUluU2NyaXB0O1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gaW5wdXQgY29udGFpbnMgYSBzaWduYXR1cmUgZm9yIGEgc3BlY2lmaWMgYWN0aW9uLlxuICogQHBhcmFtIGlucHV0IC0gVGhlIGlucHV0IHRvIGNoZWNrLlxuICogQHBhcmFtIGFjdGlvbiAtIFRoZSBhY3Rpb24gdG8gY2hlY2sgZm9yLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgaW5wdXQgY29udGFpbnMgYSBzaWduYXR1cmUgZm9yIHRoZSBzcGVjaWZpZWQgYWN0aW9uLlxuICovXG5mdW5jdGlvbiBjaGVja0lucHV0Rm9yU2lnKGlucHV0LCBhY3Rpb24pIHtcbiAgY29uc3QgcFNpZ3MgPSBleHRyYWN0UGFydGlhbFNpZ3MoaW5wdXQpO1xuICByZXR1cm4gcFNpZ3Muc29tZShwU2lnID0+XG4gICAgc2lnbmF0dXJlQmxvY2tzQWN0aW9uKHBTaWcsIGJzY3JpcHQuc2lnbmF0dXJlLmRlY29kZSwgYWN0aW9uKSxcbiAgKTtcbn1cbmV4cG9ydHMuY2hlY2tJbnB1dEZvclNpZyA9IGNoZWNrSW5wdXRGb3JTaWc7XG4vKipcbiAqIERldGVybWluZXMgaWYgYSBnaXZlbiBhY3Rpb24gaXMgYWxsb3dlZCBmb3IgYSBzaWduYXR1cmUgYmxvY2suXG4gKiBAcGFyYW0gc2lnbmF0dXJlIC0gVGhlIHNpZ25hdHVyZSBibG9jay5cbiAqIEBwYXJhbSBzaWduYXR1cmVEZWNvZGVGbiAtIFRoZSBmdW5jdGlvbiB1c2VkIHRvIGRlY29kZSB0aGUgc2lnbmF0dXJlLlxuICogQHBhcmFtIGFjdGlvbiAtIFRoZSBhY3Rpb24gdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGFjdGlvbiBpcyBhbGxvd2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIHNpZ25hdHVyZUJsb2Nrc0FjdGlvbihzaWduYXR1cmUsIHNpZ25hdHVyZURlY29kZUZuLCBhY3Rpb24pIHtcbiAgY29uc3QgeyBoYXNoVHlwZSB9ID0gc2lnbmF0dXJlRGVjb2RlRm4oc2lnbmF0dXJlKTtcbiAgY29uc3Qgd2hpdGVsaXN0ID0gW107XG4gIGNvbnN0IGlzQW55b25lQ2FuUGF5ID1cbiAgICBoYXNoVHlwZSAmIHRyYW5zYWN0aW9uXzEuVHJhbnNhY3Rpb24uU0lHSEFTSF9BTllPTkVDQU5QQVk7XG4gIGlmIChpc0FueW9uZUNhblBheSkgd2hpdGVsaXN0LnB1c2goJ2FkZElucHV0Jyk7XG4gIGNvbnN0IGhhc2hNb2QgPSBoYXNoVHlwZSAmIDB4MWY7XG4gIHN3aXRjaCAoaGFzaE1vZCkge1xuICAgIGNhc2UgdHJhbnNhY3Rpb25fMS5UcmFuc2FjdGlvbi5TSUdIQVNIX0FMTDpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdHJhbnNhY3Rpb25fMS5UcmFuc2FjdGlvbi5TSUdIQVNIX1NJTkdMRTpcbiAgICBjYXNlIHRyYW5zYWN0aW9uXzEuVHJhbnNhY3Rpb24uU0lHSEFTSF9OT05FOlxuICAgICAgd2hpdGVsaXN0LnB1c2goJ2FkZE91dHB1dCcpO1xuICAgICAgd2hpdGVsaXN0LnB1c2goJ3NldElucHV0U2VxdWVuY2UnKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmICh3aGl0ZWxpc3QuaW5kZXhPZihhY3Rpb24pID09PSAtMSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydHMuc2lnbmF0dXJlQmxvY2tzQWN0aW9uID0gc2lnbmF0dXJlQmxvY2tzQWN0aW9uO1xuLyoqXG4gKiBFeHRyYWN0cyB0aGUgc2lnbmF0dXJlcyBmcm9tIGEgUHNidElucHV0IG9iamVjdC5cbiAqIElmIHRoZSBpbnB1dCBoYXMgcGFydGlhbCBzaWduYXR1cmVzLCBpdCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBzaWduYXR1cmVzLlxuICogSWYgdGhlIGlucHV0IGRvZXMgbm90IGhhdmUgcGFydGlhbCBzaWduYXR1cmVzLCBpdCBjaGVja3MgaWYgaXQgaGFzIGEgZmluYWxTY3JpcHRTaWcgb3IgZmluYWxTY3JpcHRXaXRuZXNzLlxuICogSWYgaXQgZG9lcywgaXQgZXh0cmFjdHMgdGhlIHNpZ25hdHVyZXMgZnJvbSB0aGUgZmluYWwgc2NyaXB0cyBhbmQgcmV0dXJucyB0aGVtLlxuICogSWYgbm9uZSBvZiB0aGUgYWJvdmUgY29uZGl0aW9ucyBhcmUgbWV0LCBpdCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBQc2J0SW5wdXQgb2JqZWN0IGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgc2lnbmF0dXJlcy5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNpZ25hdHVyZXMgZXh0cmFjdGVkIGZyb20gdGhlIFBzYnRJbnB1dCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RQYXJ0aWFsU2lncyhpbnB1dCkge1xuICBsZXQgcFNpZ3MgPSBbXTtcbiAgaWYgKChpbnB1dC5wYXJ0aWFsU2lnIHx8IFtdKS5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoIWlucHV0LmZpbmFsU2NyaXB0U2lnICYmICFpbnB1dC5maW5hbFNjcmlwdFdpdG5lc3MpIHJldHVybiBbXTtcbiAgICBwU2lncyA9IGdldFBzaWdzRnJvbUlucHV0RmluYWxTY3JpcHRzKGlucHV0KTtcbiAgfSBlbHNlIHtcbiAgICBwU2lncyA9IGlucHV0LnBhcnRpYWxTaWc7XG4gIH1cbiAgcmV0dXJuIHBTaWdzLm1hcChwID0+IHAuc2lnbmF0dXJlKTtcbn1cbi8qKlxuICogUmV0cmlldmVzIHRoZSBwYXJ0aWFsIHNpZ25hdHVyZXMgKFBzaWdzKSBmcm9tIHRoZSBpbnB1dCdzIGZpbmFsIHNjcmlwdHMuXG4gKiBQc2lncyBhcmUgZXh0cmFjdGVkIGZyb20gYm90aCB0aGUgZmluYWwgc2NyaXB0U2lnIGFuZCBmaW5hbCBzY3JpcHRXaXRuZXNzIG9mIHRoZSBpbnB1dC5cbiAqIE9ubHkgY2Fub25pY2FsIHNjcmlwdCBzaWduYXR1cmVzIGFyZSBjb25zaWRlcmVkLlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBQc2J0SW5wdXQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgaW5wdXQuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBQYXJ0aWFsU2lnIG9iamVjdHMgY29udGFpbmluZyB0aGUgZXh0cmFjdGVkIFBzaWdzLlxuICovXG5mdW5jdGlvbiBnZXRQc2lnc0Zyb21JbnB1dEZpbmFsU2NyaXB0cyhpbnB1dCkge1xuICBjb25zdCBzY3JpcHRJdGVtcyA9ICFpbnB1dC5maW5hbFNjcmlwdFNpZ1xuICAgID8gW11cbiAgICA6IGJzY3JpcHQuZGVjb21waWxlKGlucHV0LmZpbmFsU2NyaXB0U2lnKSB8fCBbXTtcbiAgY29uc3Qgd2l0bmVzc0l0ZW1zID0gIWlucHV0LmZpbmFsU2NyaXB0V2l0bmVzc1xuICAgID8gW11cbiAgICA6IGJzY3JpcHQuZGVjb21waWxlKGlucHV0LmZpbmFsU2NyaXB0V2l0bmVzcykgfHwgW107XG4gIHJldHVybiBzY3JpcHRJdGVtc1xuICAgIC5jb25jYXQod2l0bmVzc0l0ZW1zKVxuICAgIC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGl0ZW0pICYmIGJzY3JpcHQuaXNDYW5vbmljYWxTY3JpcHRTaWduYXR1cmUoaXRlbSk7XG4gICAgfSlcbiAgICAubWFwKHNpZyA9PiAoeyBzaWduYXR1cmU6IHNpZyB9KSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/psbt/psbtutils.js\n\n}')},"./node_modules/bitcoinjs-lib/src/push_data.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nexports.decode = exports.encode = exports.encodingLength = void 0;\nconst ops_1 = __webpack_require__(/*! ./ops */ "./node_modules/bitcoinjs-lib/src/ops.js");\n/**\n * Calculates the encoding length of a number used for push data in Bitcoin transactions.\n * @param i The number to calculate the encoding length for.\n * @returns The encoding length of the number.\n */\nfunction encodingLength(i) {\n return i < ops_1.OPS.OP_PUSHDATA1 ? 1 : i <= 0xff ? 2 : i <= 0xffff ? 3 : 5;\n}\nexports.encodingLength = encodingLength;\n/**\n * Encodes a number into a buffer using a variable-length encoding scheme.\n * The encoded buffer is written starting at the specified offset.\n * Returns the size of the encoded buffer.\n *\n * @param buffer - The buffer to write the encoded data into.\n * @param num - The number to encode.\n * @param offset - The offset at which to start writing the encoded buffer.\n * @returns The size of the encoded buffer.\n */\nfunction encode(buffer, num, offset) {\n const size = encodingLength(num);\n // ~6 bit\n if (size === 1) {\n buffer.writeUInt8(num, offset);\n // 8 bit\n } else if (size === 2) {\n buffer.writeUInt8(ops_1.OPS.OP_PUSHDATA1, offset);\n buffer.writeUInt8(num, offset + 1);\n // 16 bit\n } else if (size === 3) {\n buffer.writeUInt8(ops_1.OPS.OP_PUSHDATA2, offset);\n buffer.writeUInt16LE(num, offset + 1);\n // 32 bit\n } else {\n buffer.writeUInt8(ops_1.OPS.OP_PUSHDATA4, offset);\n buffer.writeUInt32LE(num, offset + 1);\n }\n return size;\n}\nexports.encode = encode;\n/**\n * Decodes a buffer and returns information about the opcode, number, and size.\n * @param buffer - The buffer to decode.\n * @param offset - The offset within the buffer to start decoding.\n * @returns An object containing the opcode, number, and size, or null if decoding fails.\n */\nfunction decode(buffer, offset) {\n const opcode = buffer.readUInt8(offset);\n let num;\n let size;\n // ~6 bit\n if (opcode < ops_1.OPS.OP_PUSHDATA1) {\n num = opcode;\n size = 1;\n // 8 bit\n } else if (opcode === ops_1.OPS.OP_PUSHDATA1) {\n if (offset + 2 > buffer.length) return null;\n num = buffer.readUInt8(offset + 1);\n size = 2;\n // 16 bit\n } else if (opcode === ops_1.OPS.OP_PUSHDATA2) {\n if (offset + 3 > buffer.length) return null;\n num = buffer.readUInt16LE(offset + 1);\n size = 3;\n // 32 bit\n } else {\n if (offset + 5 > buffer.length) return null;\n if (opcode !== ops_1.OPS.OP_PUSHDATA4) throw new Error(\'Unexpected opcode\');\n num = buffer.readUInt32LE(offset + 1);\n size = 5;\n }\n return {\n opcode,\n number: num,\n size,\n };\n}\nexports.decode = decode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvcHVzaF9kYXRhLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGNBQWMsR0FBRyxjQUFjLEdBQUcsc0JBQXNCO0FBQ3hELGNBQWMsbUJBQU8sQ0FBQyxzREFBTztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iaXRjb2luanMtbGliL3NyYy9wdXNoX2RhdGEuanM/ZTBhYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5kZWNvZGUgPSBleHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuZW5jb2RpbmdMZW5ndGggPSB2b2lkIDA7XG5jb25zdCBvcHNfMSA9IHJlcXVpcmUoJy4vb3BzJyk7XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGVuY29kaW5nIGxlbmd0aCBvZiBhIG51bWJlciB1c2VkIGZvciBwdXNoIGRhdGEgaW4gQml0Y29pbiB0cmFuc2FjdGlvbnMuXG4gKiBAcGFyYW0gaSBUaGUgbnVtYmVyIHRvIGNhbGN1bGF0ZSB0aGUgZW5jb2RpbmcgbGVuZ3RoIGZvci5cbiAqIEByZXR1cm5zIFRoZSBlbmNvZGluZyBsZW5ndGggb2YgdGhlIG51bWJlci5cbiAqL1xuZnVuY3Rpb24gZW5jb2RpbmdMZW5ndGgoaSkge1xuICByZXR1cm4gaSA8IG9wc18xLk9QUy5PUF9QVVNIREFUQTEgPyAxIDogaSA8PSAweGZmID8gMiA6IGkgPD0gMHhmZmZmID8gMyA6IDU7XG59XG5leHBvcnRzLmVuY29kaW5nTGVuZ3RoID0gZW5jb2RpbmdMZW5ndGg7XG4vKipcbiAqIEVuY29kZXMgYSBudW1iZXIgaW50byBhIGJ1ZmZlciB1c2luZyBhIHZhcmlhYmxlLWxlbmd0aCBlbmNvZGluZyBzY2hlbWUuXG4gKiBUaGUgZW5jb2RlZCBidWZmZXIgaXMgd3JpdHRlbiBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIG9mZnNldC5cbiAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGVuY29kZWQgYnVmZmVyLlxuICpcbiAqIEBwYXJhbSBidWZmZXIgLSBUaGUgYnVmZmVyIHRvIHdyaXRlIHRoZSBlbmNvZGVkIGRhdGEgaW50by5cbiAqIEBwYXJhbSBudW0gLSBUaGUgbnVtYmVyIHRvIGVuY29kZS5cbiAqIEBwYXJhbSBvZmZzZXQgLSBUaGUgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0YXJ0IHdyaXRpbmcgdGhlIGVuY29kZWQgYnVmZmVyLlxuICogQHJldHVybnMgVGhlIHNpemUgb2YgdGhlIGVuY29kZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBlbmNvZGUoYnVmZmVyLCBudW0sIG9mZnNldCkge1xuICBjb25zdCBzaXplID0gZW5jb2RpbmdMZW5ndGgobnVtKTtcbiAgLy8gfjYgYml0XG4gIGlmIChzaXplID09PSAxKSB7XG4gICAgYnVmZmVyLndyaXRlVUludDgobnVtLCBvZmZzZXQpO1xuICAgIC8vIDggYml0XG4gIH0gZWxzZSBpZiAoc2l6ZSA9PT0gMikge1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KG9wc18xLk9QUy5PUF9QVVNIREFUQTEsIG9mZnNldCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgobnVtLCBvZmZzZXQgKyAxKTtcbiAgICAvLyAxNiBiaXRcbiAgfSBlbHNlIGlmIChzaXplID09PSAzKSB7XG4gICAgYnVmZmVyLndyaXRlVUludDgob3BzXzEuT1BTLk9QX1BVU0hEQVRBMiwgb2Zmc2V0KTtcbiAgICBidWZmZXIud3JpdGVVSW50MTZMRShudW0sIG9mZnNldCArIDEpO1xuICAgIC8vIDMyIGJpdFxuICB9IGVsc2Uge1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KG9wc18xLk9QUy5PUF9QVVNIREFUQTQsIG9mZnNldCk7XG4gICAgYnVmZmVyLndyaXRlVUludDMyTEUobnVtLCBvZmZzZXQgKyAxKTtcbiAgfVxuICByZXR1cm4gc2l6ZTtcbn1cbmV4cG9ydHMuZW5jb2RlID0gZW5jb2RlO1xuLyoqXG4gKiBEZWNvZGVzIGEgYnVmZmVyIGFuZCByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcGNvZGUsIG51bWJlciwgYW5kIHNpemUuXG4gKiBAcGFyYW0gYnVmZmVyIC0gVGhlIGJ1ZmZlciB0byBkZWNvZGUuXG4gKiBAcGFyYW0gb2Zmc2V0IC0gVGhlIG9mZnNldCB3aXRoaW4gdGhlIGJ1ZmZlciB0byBzdGFydCBkZWNvZGluZy5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBvcGNvZGUsIG51bWJlciwgYW5kIHNpemUsIG9yIG51bGwgaWYgZGVjb2RpbmcgZmFpbHMuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZShidWZmZXIsIG9mZnNldCkge1xuICBjb25zdCBvcGNvZGUgPSBidWZmZXIucmVhZFVJbnQ4KG9mZnNldCk7XG4gIGxldCBudW07XG4gIGxldCBzaXplO1xuICAvLyB+NiBiaXRcbiAgaWYgKG9wY29kZSA8IG9wc18xLk9QUy5PUF9QVVNIREFUQTEpIHtcbiAgICBudW0gPSBvcGNvZGU7XG4gICAgc2l6ZSA9IDE7XG4gICAgLy8gOCBiaXRcbiAgfSBlbHNlIGlmIChvcGNvZGUgPT09IG9wc18xLk9QUy5PUF9QVVNIREFUQTEpIHtcbiAgICBpZiAob2Zmc2V0ICsgMiA+IGJ1ZmZlci5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIG51bSA9IGJ1ZmZlci5yZWFkVUludDgob2Zmc2V0ICsgMSk7XG4gICAgc2l6ZSA9IDI7XG4gICAgLy8gMTYgYml0XG4gIH0gZWxzZSBpZiAob3Bjb2RlID09PSBvcHNfMS5PUFMuT1BfUFVTSERBVEEyKSB7XG4gICAgaWYgKG9mZnNldCArIDMgPiBidWZmZXIubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICBudW0gPSBidWZmZXIucmVhZFVJbnQxNkxFKG9mZnNldCArIDEpO1xuICAgIHNpemUgPSAzO1xuICAgIC8vIDMyIGJpdFxuICB9IGVsc2Uge1xuICAgIGlmIChvZmZzZXQgKyA1ID4gYnVmZmVyLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKG9wY29kZSAhPT0gb3BzXzEuT1BTLk9QX1BVU0hEQVRBNCkgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIG9wY29kZScpO1xuICAgIG51bSA9IGJ1ZmZlci5yZWFkVUludDMyTEUob2Zmc2V0ICsgMSk7XG4gICAgc2l6ZSA9IDU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvcGNvZGUsXG4gICAgbnVtYmVyOiBudW0sXG4gICAgc2l6ZSxcbiAgfTtcbn1cbmV4cG9ydHMuZGVjb2RlID0gZGVjb2RlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/push_data.js\n\n}')},"./node_modules/bitcoinjs-lib/src/script.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer;\n\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nexports.signature =\n exports.number =\n exports.isCanonicalScriptSignature =\n exports.isDefinedHashType =\n exports.isCanonicalPubKey =\n exports.toStack =\n exports.fromASM =\n exports.toASM =\n exports.decompile =\n exports.compile =\n exports.countNonPushOnlyOPs =\n exports.isPushOnly =\n exports.OPS =\n void 0;\n/**\n * Script tools, including decompile, compile, toASM, fromASM, toStack, isCanonicalPubKey, isCanonicalScriptSignature\n * @packageDocumentation\n */\nconst bip66 = __webpack_require__(/*! ./bip66 */ "./node_modules/bitcoinjs-lib/src/bip66.js");\nconst ops_1 = __webpack_require__(/*! ./ops */ "./node_modules/bitcoinjs-lib/src/ops.js");\nObject.defineProperty(exports, "OPS", ({\n enumerable: true,\n get: function () {\n return ops_1.OPS;\n },\n}));\nconst pushdata = __webpack_require__(/*! ./push_data */ "./node_modules/bitcoinjs-lib/src/push_data.js");\nconst scriptNumber = __webpack_require__(/*! ./script_number */ "./node_modules/bitcoinjs-lib/src/script_number.js");\nconst scriptSignature = __webpack_require__(/*! ./script_signature */ "./node_modules/bitcoinjs-lib/src/script_signature.js");\nconst types = __webpack_require__(/*! ./types */ "./node_modules/bitcoinjs-lib/src/types.js");\nconst { typeforce } = types;\nconst OP_INT_BASE = ops_1.OPS.OP_RESERVED; // OP_1 - 1\nfunction isOPInt(value) {\n return (\n types.Number(value) &&\n (value === ops_1.OPS.OP_0 ||\n (value >= ops_1.OPS.OP_1 && value <= ops_1.OPS.OP_16) ||\n value === ops_1.OPS.OP_1NEGATE)\n );\n}\nfunction isPushOnlyChunk(value) {\n return types.Buffer(value) || isOPInt(value);\n}\nfunction isPushOnly(value) {\n return types.Array(value) && value.every(isPushOnlyChunk);\n}\nexports.isPushOnly = isPushOnly;\nfunction countNonPushOnlyOPs(value) {\n return value.length - value.filter(isPushOnlyChunk).length;\n}\nexports.countNonPushOnlyOPs = countNonPushOnlyOPs;\nfunction asMinimalOP(buffer) {\n if (buffer.length === 0) return ops_1.OPS.OP_0;\n if (buffer.length !== 1) return;\n if (buffer[0] >= 1 && buffer[0] <= 16) return OP_INT_BASE + buffer[0];\n if (buffer[0] === 0x81) return ops_1.OPS.OP_1NEGATE;\n}\nfunction chunksIsBuffer(buf) {\n return Buffer.isBuffer(buf);\n}\nfunction chunksIsArray(buf) {\n return types.Array(buf);\n}\nfunction singleChunkIsBuffer(buf) {\n return Buffer.isBuffer(buf);\n}\n/**\n * Compiles an array of chunks into a Buffer.\n *\n * @param chunks - The array of chunks to compile.\n * @returns The compiled Buffer.\n * @throws Error if the compilation fails.\n */\nfunction compile(chunks) {\n // TODO: remove me\n if (chunksIsBuffer(chunks)) return chunks;\n typeforce(types.Array, chunks);\n const bufferSize = chunks.reduce((accum, chunk) => {\n // data chunk\n if (singleChunkIsBuffer(chunk)) {\n // adhere to BIP62.3, minimal push policy\n if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) {\n return accum + 1;\n }\n return accum + pushdata.encodingLength(chunk.length) + chunk.length;\n }\n // opcode\n return accum + 1;\n }, 0.0);\n const buffer = Buffer.allocUnsafe(bufferSize);\n let offset = 0;\n chunks.forEach(chunk => {\n // data chunk\n if (singleChunkIsBuffer(chunk)) {\n // adhere to BIP62.3, minimal push policy\n const opcode = asMinimalOP(chunk);\n if (opcode !== undefined) {\n buffer.writeUInt8(opcode, offset);\n offset += 1;\n return;\n }\n offset += pushdata.encode(buffer, chunk.length, offset);\n chunk.copy(buffer, offset);\n offset += chunk.length;\n // opcode\n } else {\n buffer.writeUInt8(chunk, offset);\n offset += 1;\n }\n });\n if (offset !== buffer.length) throw new Error(\'Could not decode chunks\');\n return buffer;\n}\nexports.compile = compile;\nfunction decompile(buffer) {\n // TODO: remove me\n if (chunksIsArray(buffer)) return buffer;\n typeforce(types.Buffer, buffer);\n const chunks = [];\n let i = 0;\n while (i < buffer.length) {\n const opcode = buffer[i];\n // data chunk\n if (opcode > ops_1.OPS.OP_0 && opcode <= ops_1.OPS.OP_PUSHDATA4) {\n const d = pushdata.decode(buffer, i);\n // did reading a pushDataInt fail?\n if (d === null) return null;\n i += d.size;\n // attempt to read too much data?\n if (i + d.number > buffer.length) return null;\n const data = buffer.slice(i, i + d.number);\n i += d.number;\n // decompile minimally\n const op = asMinimalOP(data);\n if (op !== undefined) {\n chunks.push(op);\n } else {\n chunks.push(data);\n }\n // opcode\n } else {\n chunks.push(opcode);\n i += 1;\n }\n }\n return chunks;\n}\nexports.decompile = decompile;\n/**\n * Converts the given chunks into an ASM (Assembly) string representation.\n * If the chunks parameter is a Buffer, it will be decompiled into a Stack before conversion.\n * @param chunks - The chunks to convert into ASM.\n * @returns The ASM string representation of the chunks.\n */\nfunction toASM(chunks) {\n if (chunksIsBuffer(chunks)) {\n chunks = decompile(chunks);\n }\n if (!chunks) {\n throw new Error(\'Could not convert invalid chunks to ASM\');\n }\n return chunks\n .map(chunk => {\n // data?\n if (singleChunkIsBuffer(chunk)) {\n const op = asMinimalOP(chunk);\n if (op === undefined) return chunk.toString(\'hex\');\n chunk = op;\n }\n // opcode!\n return ops_1.REVERSE_OPS[chunk];\n })\n .join(\' \');\n}\nexports.toASM = toASM;\n/**\n * Converts an ASM string to a Buffer.\n * @param asm The ASM string to convert.\n * @returns The converted Buffer.\n */\nfunction fromASM(asm) {\n typeforce(types.String, asm);\n return compile(\n asm.split(\' \').map(chunkStr => {\n // opcode?\n if (ops_1.OPS[chunkStr] !== undefined) return ops_1.OPS[chunkStr];\n typeforce(types.Hex, chunkStr);\n // data!\n return Buffer.from(chunkStr, \'hex\');\n }),\n );\n}\nexports.fromASM = fromASM;\n/**\n * Converts the given chunks into a stack of buffers.\n *\n * @param chunks - The chunks to convert.\n * @returns The stack of buffers.\n */\nfunction toStack(chunks) {\n chunks = decompile(chunks);\n typeforce(isPushOnly, chunks);\n return chunks.map(op => {\n if (singleChunkIsBuffer(op)) return op;\n if (op === ops_1.OPS.OP_0) return Buffer.allocUnsafe(0);\n return scriptNumber.encode(op - OP_INT_BASE);\n });\n}\nexports.toStack = toStack;\nfunction isCanonicalPubKey(buffer) {\n return types.isPoint(buffer);\n}\nexports.isCanonicalPubKey = isCanonicalPubKey;\nfunction isDefinedHashType(hashType) {\n const hashTypeMod = hashType & ~0x80;\n // return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE\n return hashTypeMod > 0x00 && hashTypeMod < 0x04;\n}\nexports.isDefinedHashType = isDefinedHashType;\nfunction isCanonicalScriptSignature(buffer) {\n if (!Buffer.isBuffer(buffer)) return false;\n if (!isDefinedHashType(buffer[buffer.length - 1])) return false;\n return bip66.check(buffer.slice(0, -1));\n}\nexports.isCanonicalScriptSignature = isCanonicalScriptSignature;\nexports.number = scriptNumber;\nexports.signature = scriptSignature;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvc2NyaXB0LmpzIiwibWFwcGluZ3MiOiI7QUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxpQkFBaUI7QUFDakIsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsa0NBQWtDO0FBQ3BDLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsZUFBZTtBQUNqQixFQUFFLGVBQWU7QUFDakIsRUFBRSxhQUFhO0FBQ2YsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsV0FBVztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLG1CQUFPLENBQUMsMERBQVM7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLHNEQUFPO0FBQzdCLHVDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQyxFQUFDO0FBQ0YsaUJBQWlCLG1CQUFPLENBQUMsa0VBQWE7QUFDdEMscUJBQXFCLG1CQUFPLENBQUMsMEVBQWlCO0FBQzlDLHdCQUF3QixtQkFBTyxDQUFDLGdGQUFvQjtBQUNwRCxjQUFjLG1CQUFPLENBQUMsMERBQVM7QUFDL0IsUUFBUSxZQUFZO0FBQ3BCLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLE1BQU07QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CLEtBQUs7QUFDTDtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsTUFBTTtBQUM1QztBQUNBLEdBQUc7QUFDSDtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBLE9BQU8sTUFBTTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxjQUFjO0FBQ2QsaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvc2NyaXB0LmpzPzNiOTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc2lnbmF0dXJlID1cbiAgZXhwb3J0cy5udW1iZXIgPVxuICBleHBvcnRzLmlzQ2Fub25pY2FsU2NyaXB0U2lnbmF0dXJlID1cbiAgZXhwb3J0cy5pc0RlZmluZWRIYXNoVHlwZSA9XG4gIGV4cG9ydHMuaXNDYW5vbmljYWxQdWJLZXkgPVxuICBleHBvcnRzLnRvU3RhY2sgPVxuICBleHBvcnRzLmZyb21BU00gPVxuICBleHBvcnRzLnRvQVNNID1cbiAgZXhwb3J0cy5kZWNvbXBpbGUgPVxuICBleHBvcnRzLmNvbXBpbGUgPVxuICBleHBvcnRzLmNvdW50Tm9uUHVzaE9ubHlPUHMgPVxuICBleHBvcnRzLmlzUHVzaE9ubHkgPVxuICBleHBvcnRzLk9QUyA9XG4gICAgdm9pZCAwO1xuLyoqXG4gKiBTY3JpcHQgdG9vbHMsIGluY2x1ZGluZyBkZWNvbXBpbGUsIGNvbXBpbGUsIHRvQVNNLCBmcm9tQVNNLCB0b1N0YWNrLCBpc0Nhbm9uaWNhbFB1YktleSwgaXNDYW5vbmljYWxTY3JpcHRTaWduYXR1cmVcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICovXG5jb25zdCBiaXA2NiA9IHJlcXVpcmUoJy4vYmlwNjYnKTtcbmNvbnN0IG9wc18xID0gcmVxdWlyZSgnLi9vcHMnKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnT1BTJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gb3BzXzEuT1BTO1xuICB9LFxufSk7XG5jb25zdCBwdXNoZGF0YSA9IHJlcXVpcmUoJy4vcHVzaF9kYXRhJyk7XG5jb25zdCBzY3JpcHROdW1iZXIgPSByZXF1aXJlKCcuL3NjcmlwdF9udW1iZXInKTtcbmNvbnN0IHNjcmlwdFNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vc2NyaXB0X3NpZ25hdHVyZScpO1xuY29uc3QgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG5jb25zdCB7IHR5cGVmb3JjZSB9ID0gdHlwZXM7XG5jb25zdCBPUF9JTlRfQkFTRSA9IG9wc18xLk9QUy5PUF9SRVNFUlZFRDsgLy8gT1BfMSAtIDFcbmZ1bmN0aW9uIGlzT1BJbnQodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlcy5OdW1iZXIodmFsdWUpICYmXG4gICAgKHZhbHVlID09PSBvcHNfMS5PUFMuT1BfMCB8fFxuICAgICAgKHZhbHVlID49IG9wc18xLk9QUy5PUF8xICYmIHZhbHVlIDw9IG9wc18xLk9QUy5PUF8xNikgfHxcbiAgICAgIHZhbHVlID09PSBvcHNfMS5PUFMuT1BfMU5FR0FURSlcbiAgKTtcbn1cbmZ1bmN0aW9uIGlzUHVzaE9ubHlDaHVuayh2YWx1ZSkge1xuICByZXR1cm4gdHlwZXMuQnVmZmVyKHZhbHVlKSB8fCBpc09QSW50KHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzUHVzaE9ubHkodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVzLkFycmF5KHZhbHVlKSAmJiB2YWx1ZS5ldmVyeShpc1B1c2hPbmx5Q2h1bmspO1xufVxuZXhwb3J0cy5pc1B1c2hPbmx5ID0gaXNQdXNoT25seTtcbmZ1bmN0aW9uIGNvdW50Tm9uUHVzaE9ubHlPUHModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLmxlbmd0aCAtIHZhbHVlLmZpbHRlcihpc1B1c2hPbmx5Q2h1bmspLmxlbmd0aDtcbn1cbmV4cG9ydHMuY291bnROb25QdXNoT25seU9QcyA9IGNvdW50Tm9uUHVzaE9ubHlPUHM7XG5mdW5jdGlvbiBhc01pbmltYWxPUChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiBvcHNfMS5PUFMuT1BfMDtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggIT09IDEpIHJldHVybjtcbiAgaWYgKGJ1ZmZlclswXSA+PSAxICYmIGJ1ZmZlclswXSA8PSAxNikgcmV0dXJuIE9QX0lOVF9CQVNFICsgYnVmZmVyWzBdO1xuICBpZiAoYnVmZmVyWzBdID09PSAweDgxKSByZXR1cm4gb3BzXzEuT1BTLk9QXzFORUdBVEU7XG59XG5mdW5jdGlvbiBjaHVua3NJc0J1ZmZlcihidWYpIHtcbiAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihidWYpO1xufVxuZnVuY3Rpb24gY2h1bmtzSXNBcnJheShidWYpIHtcbiAgcmV0dXJuIHR5cGVzLkFycmF5KGJ1Zik7XG59XG5mdW5jdGlvbiBzaW5nbGVDaHVua0lzQnVmZmVyKGJ1Zikge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGJ1Zik7XG59XG4vKipcbiAqIENvbXBpbGVzIGFuIGFycmF5IG9mIGNodW5rcyBpbnRvIGEgQnVmZmVyLlxuICpcbiAqIEBwYXJhbSBjaHVua3MgLSBUaGUgYXJyYXkgb2YgY2h1bmtzIHRvIGNvbXBpbGUuXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgQnVmZmVyLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgY29tcGlsYXRpb24gZmFpbHMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGUoY2h1bmtzKSB7XG4gIC8vIFRPRE86IHJlbW92ZSBtZVxuICBpZiAoY2h1bmtzSXNCdWZmZXIoY2h1bmtzKSkgcmV0dXJuIGNodW5rcztcbiAgdHlwZWZvcmNlKHR5cGVzLkFycmF5LCBjaHVua3MpO1xuICBjb25zdCBidWZmZXJTaXplID0gY2h1bmtzLnJlZHVjZSgoYWNjdW0sIGNodW5rKSA9PiB7XG4gICAgLy8gZGF0YSBjaHVua1xuICAgIGlmIChzaW5nbGVDaHVua0lzQnVmZmVyKGNodW5rKSkge1xuICAgICAgLy8gYWRoZXJlIHRvIEJJUDYyLjMsIG1pbmltYWwgcHVzaCBwb2xpY3lcbiAgICAgIGlmIChjaHVuay5sZW5ndGggPT09IDEgJiYgYXNNaW5pbWFsT1AoY2h1bmspICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGFjY3VtICsgMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bSArIHB1c2hkYXRhLmVuY29kaW5nTGVuZ3RoKGNodW5rLmxlbmd0aCkgKyBjaHVuay5sZW5ndGg7XG4gICAgfVxuICAgIC8vIG9wY29kZVxuICAgIHJldHVybiBhY2N1bSArIDE7XG4gIH0sIDAuMCk7XG4gIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShidWZmZXJTaXplKTtcbiAgbGV0IG9mZnNldCA9IDA7XG4gIGNodW5rcy5mb3JFYWNoKGNodW5rID0+IHtcbiAgICAvLyBkYXRhIGNodW5rXG4gICAgaWYgKHNpbmdsZUNodW5rSXNCdWZmZXIoY2h1bmspKSB7XG4gICAgICAvLyBhZGhlcmUgdG8gQklQNjIuMywgbWluaW1hbCBwdXNoIHBvbGljeVxuICAgICAgY29uc3Qgb3Bjb2RlID0gYXNNaW5pbWFsT1AoY2h1bmspO1xuICAgICAgaWYgKG9wY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KG9wY29kZSwgb2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9mZnNldCArPSBwdXNoZGF0YS5lbmNvZGUoYnVmZmVyLCBjaHVuay5sZW5ndGgsIG9mZnNldCk7XG4gICAgICBjaHVuay5jb3B5KGJ1ZmZlciwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCArPSBjaHVuay5sZW5ndGg7XG4gICAgICAvLyBvcGNvZGVcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyLndyaXRlVUludDgoY2h1bmssIG9mZnNldCk7XG4gICAgICBvZmZzZXQgKz0gMTtcbiAgICB9XG4gIH0pO1xuICBpZiAob2Zmc2V0ICE9PSBidWZmZXIubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkZWNvZGUgY2h1bmtzJyk7XG4gIHJldHVybiBidWZmZXI7XG59XG5leHBvcnRzLmNvbXBpbGUgPSBjb21waWxlO1xuZnVuY3Rpb24gZGVjb21waWxlKGJ1ZmZlcikge1xuICAvLyBUT0RPOiByZW1vdmUgbWVcbiAgaWYgKGNodW5rc0lzQXJyYXkoYnVmZmVyKSkgcmV0dXJuIGJ1ZmZlcjtcbiAgdHlwZWZvcmNlKHR5cGVzLkJ1ZmZlciwgYnVmZmVyKTtcbiAgY29uc3QgY2h1bmtzID0gW107XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKGkgPCBidWZmZXIubGVuZ3RoKSB7XG4gICAgY29uc3Qgb3Bjb2RlID0gYnVmZmVyW2ldO1xuICAgIC8vIGRhdGEgY2h1bmtcbiAgICBpZiAob3Bjb2RlID4gb3BzXzEuT1BTLk9QXzAgJiYgb3Bjb2RlIDw9IG9wc18xLk9QUy5PUF9QVVNIREFUQTQpIHtcbiAgICAgIGNvbnN0IGQgPSBwdXNoZGF0YS5kZWNvZGUoYnVmZmVyLCBpKTtcbiAgICAgIC8vIGRpZCByZWFkaW5nIGEgcHVzaERhdGFJbnQgZmFpbD9cbiAgICAgIGlmIChkID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgIGkgKz0gZC5zaXplO1xuICAgICAgLy8gYXR0ZW1wdCB0byByZWFkIHRvbyBtdWNoIGRhdGE/XG4gICAgICBpZiAoaSArIGQubnVtYmVyID4gYnVmZmVyLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBkYXRhID0gYnVmZmVyLnNsaWNlKGksIGkgKyBkLm51bWJlcik7XG4gICAgICBpICs9IGQubnVtYmVyO1xuICAgICAgLy8gZGVjb21waWxlIG1pbmltYWxseVxuICAgICAgY29uc3Qgb3AgPSBhc01pbmltYWxPUChkYXRhKTtcbiAgICAgIGlmIChvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKG9wKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNodW5rcy5wdXNoKGRhdGEpO1xuICAgICAgfVxuICAgICAgLy8gb3Bjb2RlXG4gICAgfSBlbHNlIHtcbiAgICAgIGNodW5rcy5wdXNoKG9wY29kZSk7XG4gICAgICBpICs9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaHVua3M7XG59XG5leHBvcnRzLmRlY29tcGlsZSA9IGRlY29tcGlsZTtcbi8qKlxuICogQ29udmVydHMgdGhlIGdpdmVuIGNodW5rcyBpbnRvIGFuIEFTTSAoQXNzZW1ibHkpIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqIElmIHRoZSBjaHVua3MgcGFyYW1ldGVyIGlzIGEgQnVmZmVyLCBpdCB3aWxsIGJlIGRlY29tcGlsZWQgaW50byBhIFN0YWNrIGJlZm9yZSBjb252ZXJzaW9uLlxuICogQHBhcmFtIGNodW5rcyAtIFRoZSBjaHVua3MgdG8gY29udmVydCBpbnRvIEFTTS5cbiAqIEByZXR1cm5zIFRoZSBBU00gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjaHVua3MuXG4gKi9cbmZ1bmN0aW9uIHRvQVNNKGNodW5rcykge1xuICBpZiAoY2h1bmtzSXNCdWZmZXIoY2h1bmtzKSkge1xuICAgIGNodW5rcyA9IGRlY29tcGlsZShjaHVua3MpO1xuICB9XG4gIGlmICghY2h1bmtzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgY29udmVydCBpbnZhbGlkIGNodW5rcyB0byBBU00nKTtcbiAgfVxuICByZXR1cm4gY2h1bmtzXG4gICAgLm1hcChjaHVuayA9PiB7XG4gICAgICAvLyBkYXRhP1xuICAgICAgaWYgKHNpbmdsZUNodW5rSXNCdWZmZXIoY2h1bmspKSB7XG4gICAgICAgIGNvbnN0IG9wID0gYXNNaW5pbWFsT1AoY2h1bmspO1xuICAgICAgICBpZiAob3AgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGNodW5rLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgY2h1bmsgPSBvcDtcbiAgICAgIH1cbiAgICAgIC8vIG9wY29kZSFcbiAgICAgIHJldHVybiBvcHNfMS5SRVZFUlNFX09QU1tjaHVua107XG4gICAgfSlcbiAgICAuam9pbignICcpO1xufVxuZXhwb3J0cy50b0FTTSA9IHRvQVNNO1xuLyoqXG4gKiBDb252ZXJ0cyBhbiBBU00gc3RyaW5nIHRvIGEgQnVmZmVyLlxuICogQHBhcmFtIGFzbSBUaGUgQVNNIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBCdWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGZyb21BU00oYXNtKSB7XG4gIHR5cGVmb3JjZSh0eXBlcy5TdHJpbmcsIGFzbSk7XG4gIHJldHVybiBjb21waWxlKFxuICAgIGFzbS5zcGxpdCgnICcpLm1hcChjaHVua1N0ciA9PiB7XG4gICAgICAvLyBvcGNvZGU/XG4gICAgICBpZiAob3BzXzEuT1BTW2NodW5rU3RyXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gb3BzXzEuT1BTW2NodW5rU3RyXTtcbiAgICAgIHR5cGVmb3JjZSh0eXBlcy5IZXgsIGNodW5rU3RyKTtcbiAgICAgIC8vIGRhdGEhXG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oY2h1bmtTdHIsICdoZXgnKTtcbiAgICB9KSxcbiAgKTtcbn1cbmV4cG9ydHMuZnJvbUFTTSA9IGZyb21BU007XG4vKipcbiAqIENvbnZlcnRzIHRoZSBnaXZlbiBjaHVua3MgaW50byBhIHN0YWNrIG9mIGJ1ZmZlcnMuXG4gKlxuICogQHBhcmFtIGNodW5rcyAtIFRoZSBjaHVua3MgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBzdGFjayBvZiBidWZmZXJzLlxuICovXG5mdW5jdGlvbiB0b1N0YWNrKGNodW5rcykge1xuICBjaHVua3MgPSBkZWNvbXBpbGUoY2h1bmtzKTtcbiAgdHlwZWZvcmNlKGlzUHVzaE9ubHksIGNodW5rcyk7XG4gIHJldHVybiBjaHVua3MubWFwKG9wID0+IHtcbiAgICBpZiAoc2luZ2xlQ2h1bmtJc0J1ZmZlcihvcCkpIHJldHVybiBvcDtcbiAgICBpZiAob3AgPT09IG9wc18xLk9QUy5PUF8wKSByZXR1cm4gQnVmZmVyLmFsbG9jVW5zYWZlKDApO1xuICAgIHJldHVybiBzY3JpcHROdW1iZXIuZW5jb2RlKG9wIC0gT1BfSU5UX0JBU0UpO1xuICB9KTtcbn1cbmV4cG9ydHMudG9TdGFjayA9IHRvU3RhY2s7XG5mdW5jdGlvbiBpc0Nhbm9uaWNhbFB1YktleShidWZmZXIpIHtcbiAgcmV0dXJuIHR5cGVzLmlzUG9pbnQoYnVmZmVyKTtcbn1cbmV4cG9ydHMuaXNDYW5vbmljYWxQdWJLZXkgPSBpc0Nhbm9uaWNhbFB1YktleTtcbmZ1bmN0aW9uIGlzRGVmaW5lZEhhc2hUeXBlKGhhc2hUeXBlKSB7XG4gIGNvbnN0IGhhc2hUeXBlTW9kID0gaGFzaFR5cGUgJiB+MHg4MDtcbiAgLy8gcmV0dXJuIGhhc2hUeXBlTW9kID4gU0lHSEFTSF9BTEwgJiYgaGFzaFR5cGVNb2QgPCBTSUdIQVNIX1NJTkdMRVxuICByZXR1cm4gaGFzaFR5cGVNb2QgPiAweDAwICYmIGhhc2hUeXBlTW9kIDwgMHgwNDtcbn1cbmV4cG9ydHMuaXNEZWZpbmVkSGFzaFR5cGUgPSBpc0RlZmluZWRIYXNoVHlwZTtcbmZ1bmN0aW9uIGlzQ2Fub25pY2FsU2NyaXB0U2lnbmF0dXJlKGJ1ZmZlcikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNEZWZpbmVkSGFzaFR5cGUoYnVmZmVyW2J1ZmZlci5sZW5ndGggLSAxXSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGJpcDY2LmNoZWNrKGJ1ZmZlci5zbGljZSgwLCAtMSkpO1xufVxuZXhwb3J0cy5pc0Nhbm9uaWNhbFNjcmlwdFNpZ25hdHVyZSA9IGlzQ2Fub25pY2FsU2NyaXB0U2lnbmF0dXJlO1xuZXhwb3J0cy5udW1iZXIgPSBzY3JpcHROdW1iZXI7XG5leHBvcnRzLnNpZ25hdHVyZSA9IHNjcmlwdFNpZ25hdHVyZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/script.js\n\n}')},"./node_modules/bitcoinjs-lib/src/script_number.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.encode = exports.decode = void 0;\n/**\n * Decodes a script number from a buffer.\n *\n * @param buffer - The buffer containing the script number.\n * @param maxLength - The maximum length of the script number. Defaults to 4.\n * @param minimal - Whether the script number should be minimal. Defaults to true.\n * @returns The decoded script number.\n * @throws {TypeError} If the script number overflows the maximum length.\n * @throws {Error} If the script number is not minimally encoded when minimal is true.\n */\nfunction decode(buffer, maxLength, minimal) {\n maxLength = maxLength || 4;\n minimal = minimal === undefined ? true : minimal;\n const length = buffer.length;\n if (length === 0) return 0;\n if (length > maxLength) throw new TypeError('Script number overflow');\n if (minimal) {\n if ((buffer[length - 1] & 0x7f) === 0) {\n if (length <= 1 || (buffer[length - 2] & 0x80) === 0)\n throw new Error('Non-minimally encoded script number');\n }\n }\n // 40-bit\n if (length === 5) {\n const a = buffer.readUInt32LE(0);\n const b = buffer.readUInt8(4);\n if (b & 0x80) return -((b & ~0x80) * 0x100000000 + a);\n return b * 0x100000000 + a;\n }\n // 32-bit / 24-bit / 16-bit / 8-bit\n let result = 0;\n for (let i = 0; i < length; ++i) {\n result |= buffer[i] << (8 * i);\n }\n if (buffer[length - 1] & 0x80)\n return -(result & ~(0x80 << (8 * (length - 1))));\n return result;\n}\nexports.decode = decode;\nfunction scriptNumSize(i) {\n return i > 0x7fffffff\n ? 5\n : i > 0x7fffff\n ? 4\n : i > 0x7fff\n ? 3\n : i > 0x7f\n ? 2\n : i > 0x00\n ? 1\n : 0;\n}\n/**\n * Encodes a number into a Buffer using a specific format.\n *\n * @param _number - The number to encode.\n * @returns The encoded number as a Buffer.\n */\nfunction encode(_number) {\n let value = Math.abs(_number);\n const size = scriptNumSize(value);\n const buffer = Buffer.allocUnsafe(size);\n const negative = _number < 0;\n for (let i = 0; i < size; ++i) {\n buffer.writeUInt8(value & 0xff, i);\n value >>= 8;\n }\n if (buffer[size - 1] & 0x80) {\n buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1);\n } else if (negative) {\n buffer[size - 1] |= 0x80;\n }\n return buffer;\n}\nexports.encode = encode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvc2NyaXB0X251bWJlci5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsY0FBYyxHQUFHLGNBQWM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFdBQVc7QUFDdkIsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFlBQVk7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE1BQU07QUFDdkI7QUFDQSxrQkFBa0IsVUFBVTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL3NjcmlwdF9udW1iZXIuanM/NzVmOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLmRlY29kZSA9IHZvaWQgMDtcbi8qKlxuICogRGVjb2RlcyBhIHNjcmlwdCBudW1iZXIgZnJvbSBhIGJ1ZmZlci5cbiAqXG4gKiBAcGFyYW0gYnVmZmVyIC0gVGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBzY3JpcHQgbnVtYmVyLlxuICogQHBhcmFtIG1heExlbmd0aCAtIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgc2NyaXB0IG51bWJlci4gRGVmYXVsdHMgdG8gNC5cbiAqIEBwYXJhbSBtaW5pbWFsIC0gV2hldGhlciB0aGUgc2NyaXB0IG51bWJlciBzaG91bGQgYmUgbWluaW1hbC4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqIEByZXR1cm5zIFRoZSBkZWNvZGVkIHNjcmlwdCBudW1iZXIuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIHRoZSBzY3JpcHQgbnVtYmVyIG92ZXJmbG93cyB0aGUgbWF4aW11bSBsZW5ndGguXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHNjcmlwdCBudW1iZXIgaXMgbm90IG1pbmltYWxseSBlbmNvZGVkIHdoZW4gbWluaW1hbCBpcyB0cnVlLlxuICovXG5mdW5jdGlvbiBkZWNvZGUoYnVmZmVyLCBtYXhMZW5ndGgsIG1pbmltYWwpIHtcbiAgbWF4TGVuZ3RoID0gbWF4TGVuZ3RoIHx8IDQ7XG4gIG1pbmltYWwgPSBtaW5pbWFsID09PSB1bmRlZmluZWQgPyB0cnVlIDogbWluaW1hbDtcbiAgY29uc3QgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gIGlmIChsZW5ndGggPiBtYXhMZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjcmlwdCBudW1iZXIgb3ZlcmZsb3cnKTtcbiAgaWYgKG1pbmltYWwpIHtcbiAgICBpZiAoKGJ1ZmZlcltsZW5ndGggLSAxXSAmIDB4N2YpID09PSAwKSB7XG4gICAgICBpZiAobGVuZ3RoIDw9IDEgfHwgKGJ1ZmZlcltsZW5ndGggLSAyXSAmIDB4ODApID09PSAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1taW5pbWFsbHkgZW5jb2RlZCBzY3JpcHQgbnVtYmVyJyk7XG4gICAgfVxuICB9XG4gIC8vIDQwLWJpdFxuICBpZiAobGVuZ3RoID09PSA1KSB7XG4gICAgY29uc3QgYSA9IGJ1ZmZlci5yZWFkVUludDMyTEUoMCk7XG4gICAgY29uc3QgYiA9IGJ1ZmZlci5yZWFkVUludDgoNCk7XG4gICAgaWYgKGIgJiAweDgwKSByZXR1cm4gLSgoYiAmIH4weDgwKSAqIDB4MTAwMDAwMDAwICsgYSk7XG4gICAgcmV0dXJuIGIgKiAweDEwMDAwMDAwMCArIGE7XG4gIH1cbiAgLy8gMzItYml0IC8gMjQtYml0IC8gMTYtYml0IC8gOC1iaXRcbiAgbGV0IHJlc3VsdCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICByZXN1bHQgfD0gYnVmZmVyW2ldIDw8ICg4ICogaSk7XG4gIH1cbiAgaWYgKGJ1ZmZlcltsZW5ndGggLSAxXSAmIDB4ODApXG4gICAgcmV0dXJuIC0ocmVzdWx0ICYgfigweDgwIDw8ICg4ICogKGxlbmd0aCAtIDEpKSkpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0cy5kZWNvZGUgPSBkZWNvZGU7XG5mdW5jdGlvbiBzY3JpcHROdW1TaXplKGkpIHtcbiAgcmV0dXJuIGkgPiAweDdmZmZmZmZmXG4gICAgPyA1XG4gICAgOiBpID4gMHg3ZmZmZmZcbiAgICA/IDRcbiAgICA6IGkgPiAweDdmZmZcbiAgICA/IDNcbiAgICA6IGkgPiAweDdmXG4gICAgPyAyXG4gICAgOiBpID4gMHgwMFxuICAgID8gMVxuICAgIDogMDtcbn1cbi8qKlxuICogRW5jb2RlcyBhIG51bWJlciBpbnRvIGEgQnVmZmVyIHVzaW5nIGEgc3BlY2lmaWMgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSBfbnVtYmVyIC0gVGhlIG51bWJlciB0byBlbmNvZGUuXG4gKiBAcmV0dXJucyBUaGUgZW5jb2RlZCBudW1iZXIgYXMgYSBCdWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShfbnVtYmVyKSB7XG4gIGxldCB2YWx1ZSA9IE1hdGguYWJzKF9udW1iZXIpO1xuICBjb25zdCBzaXplID0gc2NyaXB0TnVtU2l6ZSh2YWx1ZSk7XG4gIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShzaXplKTtcbiAgY29uc3QgbmVnYXRpdmUgPSBfbnVtYmVyIDwgMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICBidWZmZXIud3JpdGVVSW50OCh2YWx1ZSAmIDB4ZmYsIGkpO1xuICAgIHZhbHVlID4+PSA4O1xuICB9XG4gIGlmIChidWZmZXJbc2l6ZSAtIDFdICYgMHg4MCkge1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KG5lZ2F0aXZlID8gMHg4MCA6IDB4MDAsIHNpemUgLSAxKTtcbiAgfSBlbHNlIGlmIChuZWdhdGl2ZSkge1xuICAgIGJ1ZmZlcltzaXplIC0gMV0gfD0gMHg4MDtcbiAgfVxuICByZXR1cm4gYnVmZmVyO1xufVxuZXhwb3J0cy5lbmNvZGUgPSBlbmNvZGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/script_number.js\n\n}")},"./node_modules/bitcoinjs-lib/src/script_signature.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval('{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer;\n\nObject.defineProperty(exports, "__esModule", ({ value: true }));\nexports.encode = exports.decode = void 0;\nconst bip66 = __webpack_require__(/*! ./bip66 */ "./node_modules/bitcoinjs-lib/src/bip66.js");\nconst script_1 = __webpack_require__(/*! ./script */ "./node_modules/bitcoinjs-lib/src/script.js");\nconst types = __webpack_require__(/*! ./types */ "./node_modules/bitcoinjs-lib/src/types.js");\nconst { typeforce } = types;\nconst ZERO = Buffer.alloc(1, 0);\n/**\n * Converts a buffer to a DER-encoded buffer.\n * @param x - The buffer to be converted.\n * @returns The DER-encoded buffer.\n */\nfunction toDER(x) {\n let i = 0;\n while (x[i] === 0) ++i;\n if (i === x.length) return ZERO;\n x = x.slice(i);\n if (x[0] & 0x80) return Buffer.concat([ZERO, x], 1 + x.length);\n return x;\n}\n/**\n * Converts a DER-encoded signature to a buffer.\n * If the first byte of the input buffer is 0x00, it is skipped.\n * The resulting buffer is 32 bytes long, filled with zeros if necessary.\n * @param x - The DER-encoded signature.\n * @returns The converted buffer.\n */\nfunction fromDER(x) {\n if (x[0] === 0x00) x = x.slice(1);\n const buffer = Buffer.alloc(32, 0);\n const bstart = Math.max(0, 32 - x.length);\n x.copy(buffer, bstart);\n return buffer;\n}\n// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)\n/**\n * Decodes a buffer into a ScriptSignature object.\n * @param buffer - The buffer to decode.\n * @returns The decoded ScriptSignature object.\n * @throws Error if the hashType is invalid.\n */\nfunction decode(buffer) {\n const hashType = buffer.readUInt8(buffer.length - 1);\n if (!(0, script_1.isDefinedHashType)(hashType)) {\n throw new Error(\'Invalid hashType \' + hashType);\n }\n const decoded = bip66.decode(buffer.slice(0, -1));\n const r = fromDER(decoded.r);\n const s = fromDER(decoded.s);\n const signature = Buffer.concat([r, s], 64);\n return { signature, hashType };\n}\nexports.decode = decode;\n/**\n * Encodes a signature and hash type into a buffer.\n * @param signature - The signature to encode.\n * @param hashType - The hash type to encode.\n * @returns The encoded buffer.\n * @throws Error if the hashType is invalid.\n */\nfunction encode(signature, hashType) {\n typeforce(\n {\n signature: types.BufferN(64),\n hashType: types.UInt8,\n },\n { signature, hashType },\n );\n if (!(0, script_1.isDefinedHashType)(hashType)) {\n throw new Error(\'Invalid hashType \' + hashType);\n }\n const hashTypeBuffer = Buffer.allocUnsafe(1);\n hashTypeBuffer.writeUInt8(hashType, 0);\n const r = toDER(signature.slice(0, 32));\n const s = toDER(signature.slice(32, 64));\n return Buffer.concat([bip66.encode(r, s), hashTypeBuffer]);\n}\nexports.encode = encode;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvc2NyaXB0X3NpZ25hdHVyZS5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsY0FBYyxHQUFHLGNBQWM7QUFDL0IsY0FBYyxtQkFBTyxDQUFDLDBEQUFTO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLDREQUFVO0FBQ25DLGNBQWMsbUJBQU8sQ0FBQywwREFBUztBQUMvQixRQUFRLFlBQVk7QUFDcEIsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLE1BQU07QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLE1BQU07QUFDMUIsV0FBVztBQUNYO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxNQUFNLHFCQUFxQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixNQUFNO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLFNBQVMsTUFBTTtBQUNmO0FBQ0EsY0FBYyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL3NjcmlwdF9zaWduYXR1cmUuanM/M2M3NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5lbmNvZGUgPSBleHBvcnRzLmRlY29kZSA9IHZvaWQgMDtcbmNvbnN0IGJpcDY2ID0gcmVxdWlyZSgnLi9iaXA2NicpO1xuY29uc3Qgc2NyaXB0XzEgPSByZXF1aXJlKCcuL3NjcmlwdCcpO1xuY29uc3QgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG5jb25zdCB7IHR5cGVmb3JjZSB9ID0gdHlwZXM7XG5jb25zdCBaRVJPID0gQnVmZmVyLmFsbG9jKDEsIDApO1xuLyoqXG4gKiBDb252ZXJ0cyBhIGJ1ZmZlciB0byBhIERFUi1lbmNvZGVkIGJ1ZmZlci5cbiAqIEBwYXJhbSB4IC0gVGhlIGJ1ZmZlciB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJucyBUaGUgREVSLWVuY29kZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiB0b0RFUih4KSB7XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKHhbaV0gPT09IDApICsraTtcbiAgaWYgKGkgPT09IHgubGVuZ3RoKSByZXR1cm4gWkVSTztcbiAgeCA9IHguc2xpY2UoaSk7XG4gIGlmICh4WzBdICYgMHg4MCkgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW1pFUk8sIHhdLCAxICsgeC5sZW5ndGgpO1xuICByZXR1cm4geDtcbn1cbi8qKlxuICogQ29udmVydHMgYSBERVItZW5jb2RlZCBzaWduYXR1cmUgdG8gYSBidWZmZXIuXG4gKiBJZiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgaW5wdXQgYnVmZmVyIGlzIDB4MDAsIGl0IGlzIHNraXBwZWQuXG4gKiBUaGUgcmVzdWx0aW5nIGJ1ZmZlciBpcyAzMiBieXRlcyBsb25nLCBmaWxsZWQgd2l0aCB6ZXJvcyBpZiBuZWNlc3NhcnkuXG4gKiBAcGFyYW0geCAtIFRoZSBERVItZW5jb2RlZCBzaWduYXR1cmUuXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIGJ1ZmZlci5cbiAqL1xuZnVuY3Rpb24gZnJvbURFUih4KSB7XG4gIGlmICh4WzBdID09PSAweDAwKSB4ID0geC5zbGljZSgxKTtcbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKDMyLCAwKTtcbiAgY29uc3QgYnN0YXJ0ID0gTWF0aC5tYXgoMCwgMzIgLSB4Lmxlbmd0aCk7XG4gIHguY29weShidWZmZXIsIGJzdGFydCk7XG4gIHJldHVybiBidWZmZXI7XG59XG4vLyBCSVA2MjogMSBieXRlIGhhc2hUeXBlIGZsYWcgKG9ubHkgMHgwMSwgMHgwMiwgMHgwMywgMHg4MSwgMHg4MiBhbmQgMHg4MyBhcmUgYWxsb3dlZClcbi8qKlxuICogRGVjb2RlcyBhIGJ1ZmZlciBpbnRvIGEgU2NyaXB0U2lnbmF0dXJlIG9iamVjdC5cbiAqIEBwYXJhbSBidWZmZXIgLSBUaGUgYnVmZmVyIHRvIGRlY29kZS5cbiAqIEByZXR1cm5zIFRoZSBkZWNvZGVkIFNjcmlwdFNpZ25hdHVyZSBvYmplY3QuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBoYXNoVHlwZSBpcyBpbnZhbGlkLlxuICovXG5mdW5jdGlvbiBkZWNvZGUoYnVmZmVyKSB7XG4gIGNvbnN0IGhhc2hUeXBlID0gYnVmZmVyLnJlYWRVSW50OChidWZmZXIubGVuZ3RoIC0gMSk7XG4gIGlmICghKDAsIHNjcmlwdF8xLmlzRGVmaW5lZEhhc2hUeXBlKShoYXNoVHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGFzaFR5cGUgJyArIGhhc2hUeXBlKTtcbiAgfVxuICBjb25zdCBkZWNvZGVkID0gYmlwNjYuZGVjb2RlKGJ1ZmZlci5zbGljZSgwLCAtMSkpO1xuICBjb25zdCByID0gZnJvbURFUihkZWNvZGVkLnIpO1xuICBjb25zdCBzID0gZnJvbURFUihkZWNvZGVkLnMpO1xuICBjb25zdCBzaWduYXR1cmUgPSBCdWZmZXIuY29uY2F0KFtyLCBzXSwgNjQpO1xuICByZXR1cm4geyBzaWduYXR1cmUsIGhhc2hUeXBlIH07XG59XG5leHBvcnRzLmRlY29kZSA9IGRlY29kZTtcbi8qKlxuICogRW5jb2RlcyBhIHNpZ25hdHVyZSBhbmQgaGFzaCB0eXBlIGludG8gYSBidWZmZXIuXG4gKiBAcGFyYW0gc2lnbmF0dXJlIC0gVGhlIHNpZ25hdHVyZSB0byBlbmNvZGUuXG4gKiBAcGFyYW0gaGFzaFR5cGUgLSBUaGUgaGFzaCB0eXBlIHRvIGVuY29kZS5cbiAqIEByZXR1cm5zIFRoZSBlbmNvZGVkIGJ1ZmZlci5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGhhc2hUeXBlIGlzIGludmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShzaWduYXR1cmUsIGhhc2hUeXBlKSB7XG4gIHR5cGVmb3JjZShcbiAgICB7XG4gICAgICBzaWduYXR1cmU6IHR5cGVzLkJ1ZmZlck4oNjQpLFxuICAgICAgaGFzaFR5cGU6IHR5cGVzLlVJbnQ4LFxuICAgIH0sXG4gICAgeyBzaWduYXR1cmUsIGhhc2hUeXBlIH0sXG4gICk7XG4gIGlmICghKDAsIHNjcmlwdF8xLmlzRGVmaW5lZEhhc2hUeXBlKShoYXNoVHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGFzaFR5cGUgJyArIGhhc2hUeXBlKTtcbiAgfVxuICBjb25zdCBoYXNoVHlwZUJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxKTtcbiAgaGFzaFR5cGVCdWZmZXIud3JpdGVVSW50OChoYXNoVHlwZSwgMCk7XG4gIGNvbnN0IHIgPSB0b0RFUihzaWduYXR1cmUuc2xpY2UoMCwgMzIpKTtcbiAgY29uc3QgcyA9IHRvREVSKHNpZ25hdHVyZS5zbGljZSgzMiwgNjQpKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2JpcDY2LmVuY29kZShyLCBzKSwgaGFzaFR5cGVCdWZmZXJdKTtcbn1cbmV4cG9ydHMuZW5jb2RlID0gZW5jb2RlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/script_signature.js\n\n}')},"./node_modules/bitcoinjs-lib/src/transaction.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\").Buffer;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Transaction = void 0;\nconst bufferutils_1 = __webpack_require__(/*! ./bufferutils */ \"./node_modules/bitcoinjs-lib/src/bufferutils.js\");\nconst bcrypto = __webpack_require__(/*! ./crypto */ \"./node_modules/bitcoinjs-lib/src/crypto.js\");\nconst bscript = __webpack_require__(/*! ./script */ \"./node_modules/bitcoinjs-lib/src/script.js\");\nconst script_1 = __webpack_require__(/*! ./script */ \"./node_modules/bitcoinjs-lib/src/script.js\");\nconst types = __webpack_require__(/*! ./types */ \"./node_modules/bitcoinjs-lib/src/types.js\");\nconst { typeforce } = types;\nfunction varSliceSize(someScript) {\n const length = someScript.length;\n return bufferutils_1.varuint.encodingLength(length) + length;\n}\nfunction vectorSize(someVector) {\n const length = someVector.length;\n return (\n bufferutils_1.varuint.encodingLength(length) +\n someVector.reduce((sum, witness) => {\n return sum + varSliceSize(witness);\n }, 0)\n );\n}\nconst EMPTY_BUFFER = Buffer.allocUnsafe(0);\nconst EMPTY_WITNESS = [];\nconst ZERO = Buffer.from(\n '0000000000000000000000000000000000000000000000000000000000000000',\n 'hex',\n);\nconst ONE = Buffer.from(\n '0000000000000000000000000000000000000000000000000000000000000001',\n 'hex',\n);\nconst VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex');\nconst BLANK_OUTPUT = {\n script: EMPTY_BUFFER,\n valueBuffer: VALUE_UINT64_MAX,\n};\nfunction isOutput(out) {\n return out.value !== undefined;\n}\n/**\n * Represents a Bitcoin transaction.\n */\nclass Transaction {\n constructor() {\n this.version = 1;\n this.locktime = 0;\n this.ins = [];\n this.outs = [];\n }\n static fromBuffer(buffer, _NO_STRICT) {\n const bufferReader = new bufferutils_1.BufferReader(buffer);\n const tx = new Transaction();\n tx.version = bufferReader.readInt32();\n const marker = bufferReader.readUInt8();\n const flag = bufferReader.readUInt8();\n let hasWitnesses = false;\n if (\n marker === Transaction.ADVANCED_TRANSACTION_MARKER &&\n flag === Transaction.ADVANCED_TRANSACTION_FLAG\n ) {\n hasWitnesses = true;\n } else {\n bufferReader.offset -= 2;\n }\n const vinLen = bufferReader.readVarInt();\n for (let i = 0; i < vinLen; ++i) {\n tx.ins.push({\n hash: bufferReader.readSlice(32),\n index: bufferReader.readUInt32(),\n script: bufferReader.readVarSlice(),\n sequence: bufferReader.readUInt32(),\n witness: EMPTY_WITNESS,\n });\n }\n const voutLen = bufferReader.readVarInt();\n for (let i = 0; i < voutLen; ++i) {\n tx.outs.push({\n value: bufferReader.readUInt64(),\n script: bufferReader.readVarSlice(),\n });\n }\n if (hasWitnesses) {\n for (let i = 0; i < vinLen; ++i) {\n tx.ins[i].witness = bufferReader.readVector();\n }\n // was this pointless?\n if (!tx.hasWitnesses())\n throw new Error('Transaction has superfluous witness data');\n }\n tx.locktime = bufferReader.readUInt32();\n if (_NO_STRICT) return tx;\n if (bufferReader.offset !== buffer.length)\n throw new Error('Transaction has unexpected data');\n return tx;\n }\n static fromHex(hex) {\n return Transaction.fromBuffer(Buffer.from(hex, 'hex'), false);\n }\n static isCoinbaseHash(buffer) {\n typeforce(types.Hash256bit, buffer);\n for (let i = 0; i < 32; ++i) {\n if (buffer[i] !== 0) return false;\n }\n return true;\n }\n isCoinbase() {\n return (\n this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)\n );\n }\n addInput(hash, index, sequence, scriptSig) {\n typeforce(\n types.tuple(\n types.Hash256bit,\n types.UInt32,\n types.maybe(types.UInt32),\n types.maybe(types.Buffer),\n ),\n arguments,\n );\n if (types.Null(sequence)) {\n sequence = Transaction.DEFAULT_SEQUENCE;\n }\n // Add the input and return the input's index\n return (\n this.ins.push({\n hash,\n index,\n script: scriptSig || EMPTY_BUFFER,\n sequence: sequence,\n witness: EMPTY_WITNESS,\n }) - 1\n );\n }\n addOutput(scriptPubKey, value) {\n typeforce(types.tuple(types.Buffer, types.Satoshi), arguments);\n // Add the output and return the output's index\n return (\n this.outs.push({\n script: scriptPubKey,\n value,\n }) - 1\n );\n }\n hasWitnesses() {\n return this.ins.some(x => {\n return x.witness.length !== 0;\n });\n }\n stripWitnesses() {\n this.ins.forEach(input => {\n input.witness = EMPTY_WITNESS; // Set witness data to an empty array\n });\n }\n weight() {\n const base = this.byteLength(false);\n const total = this.byteLength(true);\n return base * 3 + total;\n }\n virtualSize() {\n return Math.ceil(this.weight() / 4);\n }\n byteLength(_ALLOW_WITNESS = true) {\n const hasWitnesses = _ALLOW_WITNESS && this.hasWitnesses();\n return (\n (hasWitnesses ? 10 : 8) +\n bufferutils_1.varuint.encodingLength(this.ins.length) +\n bufferutils_1.varuint.encodingLength(this.outs.length) +\n this.ins.reduce((sum, input) => {\n return sum + 40 + varSliceSize(input.script);\n }, 0) +\n this.outs.reduce((sum, output) => {\n return sum + 8 + varSliceSize(output.script);\n }, 0) +\n (hasWitnesses\n ? this.ins.reduce((sum, input) => {\n return sum + vectorSize(input.witness);\n }, 0)\n : 0)\n );\n }\n clone() {\n const newTx = new Transaction();\n newTx.version = this.version;\n newTx.locktime = this.locktime;\n newTx.ins = this.ins.map(txIn => {\n return {\n hash: txIn.hash,\n index: txIn.index,\n script: txIn.script,\n sequence: txIn.sequence,\n witness: txIn.witness,\n };\n });\n newTx.outs = this.outs.map(txOut => {\n return {\n script: txOut.script,\n value: txOut.value,\n };\n });\n return newTx;\n }\n /**\n * Hash transaction for signing a specific input.\n *\n * Bitcoin uses a different hash for each signed transaction input.\n * This method copies the transaction, makes the necessary changes based on the\n * hashType, and then hashes the result.\n * This hash can then be used to sign the provided transaction input.\n */\n hashForSignature(inIndex, prevOutScript, hashType) {\n typeforce(\n types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number),\n arguments,\n );\n // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29\n if (inIndex >= this.ins.length) return ONE;\n // ignore OP_CODESEPARATOR\n const ourScript = bscript.compile(\n bscript.decompile(prevOutScript).filter(x => {\n return x !== script_1.OPS.OP_CODESEPARATOR;\n }),\n );\n const txTmp = this.clone();\n // SIGHASH_NONE: ignore all outputs? (wildcard payee)\n if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {\n txTmp.outs = [];\n // ignore sequence numbers (except at inIndex)\n txTmp.ins.forEach((input, i) => {\n if (i === inIndex) return;\n input.sequence = 0;\n });\n // SIGHASH_SINGLE: ignore all outputs, except at the same index?\n } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {\n // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60\n if (inIndex >= this.outs.length) return ONE;\n // truncate outputs after\n txTmp.outs.length = inIndex + 1;\n // \"blank\" outputs before\n for (let i = 0; i < inIndex; i++) {\n txTmp.outs[i] = BLANK_OUTPUT;\n }\n // ignore sequence numbers (except at inIndex)\n txTmp.ins.forEach((input, y) => {\n if (y === inIndex) return;\n input.sequence = 0;\n });\n }\n // SIGHASH_ANYONECANPAY: ignore inputs entirely?\n if (hashType & Transaction.SIGHASH_ANYONECANPAY) {\n txTmp.ins = [txTmp.ins[inIndex]];\n txTmp.ins[0].script = ourScript;\n // SIGHASH_ALL: only ignore input scripts\n } else {\n // \"blank\" others input scripts\n txTmp.ins.forEach(input => {\n input.script = EMPTY_BUFFER;\n });\n txTmp.ins[inIndex].script = ourScript;\n }\n // serialize and hash\n const buffer = Buffer.allocUnsafe(txTmp.byteLength(false) + 4);\n buffer.writeInt32LE(hashType, buffer.length - 4);\n txTmp.__toBuffer(buffer, 0, false);\n return bcrypto.hash256(buffer);\n }\n hashForWitnessV1(inIndex, prevOutScripts, values, hashType, leafHash, annex) {\n // https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#common-signature-message\n typeforce(\n types.tuple(\n types.UInt32,\n typeforce.arrayOf(types.Buffer),\n typeforce.arrayOf(types.Satoshi),\n types.UInt32,\n ),\n arguments,\n );\n if (\n values.length !== this.ins.length ||\n prevOutScripts.length !== this.ins.length\n ) {\n throw new Error('Must supply prevout script and value for all inputs');\n }\n const outputType =\n hashType === Transaction.SIGHASH_DEFAULT\n ? Transaction.SIGHASH_ALL\n : hashType & Transaction.SIGHASH_OUTPUT_MASK;\n const inputType = hashType & Transaction.SIGHASH_INPUT_MASK;\n const isAnyoneCanPay = inputType === Transaction.SIGHASH_ANYONECANPAY;\n const isNone = outputType === Transaction.SIGHASH_NONE;\n const isSingle = outputType === Transaction.SIGHASH_SINGLE;\n let hashPrevouts = EMPTY_BUFFER;\n let hashAmounts = EMPTY_BUFFER;\n let hashScriptPubKeys = EMPTY_BUFFER;\n let hashSequences = EMPTY_BUFFER;\n let hashOutputs = EMPTY_BUFFER;\n if (!isAnyoneCanPay) {\n let bufferWriter = bufferutils_1.BufferWriter.withCapacity(\n 36 * this.ins.length,\n );\n this.ins.forEach(txIn => {\n bufferWriter.writeSlice(txIn.hash);\n bufferWriter.writeUInt32(txIn.index);\n });\n hashPrevouts = bcrypto.sha256(bufferWriter.end());\n bufferWriter = bufferutils_1.BufferWriter.withCapacity(\n 8 * this.ins.length,\n );\n values.forEach(value => bufferWriter.writeUInt64(value));\n hashAmounts = bcrypto.sha256(bufferWriter.end());\n bufferWriter = bufferutils_1.BufferWriter.withCapacity(\n prevOutScripts.map(varSliceSize).reduce((a, b) => a + b),\n );\n prevOutScripts.forEach(prevOutScript =>\n bufferWriter.writeVarSlice(prevOutScript),\n );\n hashScriptPubKeys = bcrypto.sha256(bufferWriter.end());\n bufferWriter = bufferutils_1.BufferWriter.withCapacity(\n 4 * this.ins.length,\n );\n this.ins.forEach(txIn => bufferWriter.writeUInt32(txIn.sequence));\n hashSequences = bcrypto.sha256(bufferWriter.end());\n }\n if (!(isNone || isSingle)) {\n const txOutsSize = this.outs\n .map(output => 8 + varSliceSize(output.script))\n .reduce((a, b) => a + b);\n const bufferWriter = bufferutils_1.BufferWriter.withCapacity(txOutsSize);\n this.outs.forEach(out => {\n bufferWriter.writeUInt64(out.value);\n bufferWriter.writeVarSlice(out.script);\n });\n hashOutputs = bcrypto.sha256(bufferWriter.end());\n } else if (isSingle && inIndex < this.outs.length) {\n const output = this.outs[inIndex];\n const bufferWriter = bufferutils_1.BufferWriter.withCapacity(\n 8 + varSliceSize(output.script),\n );\n bufferWriter.writeUInt64(output.value);\n bufferWriter.writeVarSlice(output.script);\n hashOutputs = bcrypto.sha256(bufferWriter.end());\n }\n const spendType = (leafHash ? 2 : 0) + (annex ? 1 : 0);\n // Length calculation from:\n // https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-14\n // With extension from:\n // https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki#signature-validation\n const sigMsgSize =\n 174 -\n (isAnyoneCanPay ? 49 : 0) -\n (isNone ? 32 : 0) +\n (annex ? 32 : 0) +\n (leafHash ? 37 : 0);\n const sigMsgWriter = bufferutils_1.BufferWriter.withCapacity(sigMsgSize);\n sigMsgWriter.writeUInt8(hashType);\n // Transaction\n sigMsgWriter.writeInt32(this.version);\n sigMsgWriter.writeUInt32(this.locktime);\n sigMsgWriter.writeSlice(hashPrevouts);\n sigMsgWriter.writeSlice(hashAmounts);\n sigMsgWriter.writeSlice(hashScriptPubKeys);\n sigMsgWriter.writeSlice(hashSequences);\n if (!(isNone || isSingle)) {\n sigMsgWriter.writeSlice(hashOutputs);\n }\n // Input\n sigMsgWriter.writeUInt8(spendType);\n if (isAnyoneCanPay) {\n const input = this.ins[inIndex];\n sigMsgWriter.writeSlice(input.hash);\n sigMsgWriter.writeUInt32(input.index);\n sigMsgWriter.writeUInt64(values[inIndex]);\n sigMsgWriter.writeVarSlice(prevOutScripts[inIndex]);\n sigMsgWriter.writeUInt32(input.sequence);\n } else {\n sigMsgWriter.writeUInt32(inIndex);\n }\n if (annex) {\n const bufferWriter = bufferutils_1.BufferWriter.withCapacity(\n varSliceSize(annex),\n );\n bufferWriter.writeVarSlice(annex);\n sigMsgWriter.writeSlice(bcrypto.sha256(bufferWriter.end()));\n }\n // Output\n if (isSingle) {\n sigMsgWriter.writeSlice(hashOutputs);\n }\n // BIP342 extension\n if (leafHash) {\n sigMsgWriter.writeSlice(leafHash);\n sigMsgWriter.writeUInt8(0);\n sigMsgWriter.writeUInt32(0xffffffff);\n }\n // Extra zero byte because:\n // https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite_note-19\n return bcrypto.taggedHash(\n 'TapSighash',\n Buffer.concat([Buffer.from([0x00]), sigMsgWriter.end()]),\n );\n }\n hashForWitnessV0(inIndex, prevOutScript, value, hashType) {\n typeforce(\n types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32),\n arguments,\n );\n let tbuffer = Buffer.from([]);\n let bufferWriter;\n let hashOutputs = ZERO;\n let hashPrevouts = ZERO;\n let hashSequence = ZERO;\n if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {\n tbuffer = Buffer.allocUnsafe(36 * this.ins.length);\n bufferWriter = new bufferutils_1.BufferWriter(tbuffer, 0);\n this.ins.forEach(txIn => {\n bufferWriter.writeSlice(txIn.hash);\n bufferWriter.writeUInt32(txIn.index);\n });\n hashPrevouts = bcrypto.hash256(tbuffer);\n }\n if (\n !(hashType & Transaction.SIGHASH_ANYONECANPAY) &&\n (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&\n (hashType & 0x1f) !== Transaction.SIGHASH_NONE\n ) {\n tbuffer = Buffer.allocUnsafe(4 * this.ins.length);\n bufferWriter = new bufferutils_1.BufferWriter(tbuffer, 0);\n this.ins.forEach(txIn => {\n bufferWriter.writeUInt32(txIn.sequence);\n });\n hashSequence = bcrypto.hash256(tbuffer);\n }\n if (\n (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&\n (hashType & 0x1f) !== Transaction.SIGHASH_NONE\n ) {\n const txOutsSize = this.outs.reduce((sum, output) => {\n return sum + 8 + varSliceSize(output.script);\n }, 0);\n tbuffer = Buffer.allocUnsafe(txOutsSize);\n bufferWriter = new bufferutils_1.BufferWriter(tbuffer, 0);\n this.outs.forEach(out => {\n bufferWriter.writeUInt64(out.value);\n bufferWriter.writeVarSlice(out.script);\n });\n hashOutputs = bcrypto.hash256(tbuffer);\n } else if (\n (hashType & 0x1f) === Transaction.SIGHASH_SINGLE &&\n inIndex < this.outs.length\n ) {\n const output = this.outs[inIndex];\n tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script));\n bufferWriter = new bufferutils_1.BufferWriter(tbuffer, 0);\n bufferWriter.writeUInt64(output.value);\n bufferWriter.writeVarSlice(output.script);\n hashOutputs = bcrypto.hash256(tbuffer);\n }\n tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript));\n bufferWriter = new bufferutils_1.BufferWriter(tbuffer, 0);\n const input = this.ins[inIndex];\n bufferWriter.writeInt32(this.version);\n bufferWriter.writeSlice(hashPrevouts);\n bufferWriter.writeSlice(hashSequence);\n bufferWriter.writeSlice(input.hash);\n bufferWriter.writeUInt32(input.index);\n bufferWriter.writeVarSlice(prevOutScript);\n bufferWriter.writeUInt64(value);\n bufferWriter.writeUInt32(input.sequence);\n bufferWriter.writeSlice(hashOutputs);\n bufferWriter.writeUInt32(this.locktime);\n bufferWriter.writeUInt32(hashType);\n return bcrypto.hash256(tbuffer);\n }\n getHash(forWitness) {\n // wtxid for coinbase is always 32 bytes of 0x00\n if (forWitness && this.isCoinbase()) return Buffer.alloc(32, 0);\n return bcrypto.hash256(this.__toBuffer(undefined, undefined, forWitness));\n }\n getId() {\n // transaction hash's are displayed in reverse order\n return (0, bufferutils_1.reverseBuffer)(this.getHash(false)).toString(\n 'hex',\n );\n }\n toBuffer(buffer, initialOffset) {\n return this.__toBuffer(buffer, initialOffset, true);\n }\n toHex() {\n return this.toBuffer(undefined, undefined).toString('hex');\n }\n setInputScript(index, scriptSig) {\n typeforce(types.tuple(types.Number, types.Buffer), arguments);\n this.ins[index].script = scriptSig;\n }\n setWitness(index, witness) {\n typeforce(types.tuple(types.Number, [types.Buffer]), arguments);\n this.ins[index].witness = witness;\n }\n __toBuffer(buffer, initialOffset, _ALLOW_WITNESS = false) {\n if (!buffer) buffer = Buffer.allocUnsafe(this.byteLength(_ALLOW_WITNESS));\n const bufferWriter = new bufferutils_1.BufferWriter(\n buffer,\n initialOffset || 0,\n );\n bufferWriter.writeInt32(this.version);\n const hasWitnesses = _ALLOW_WITNESS && this.hasWitnesses();\n if (hasWitnesses) {\n bufferWriter.writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER);\n bufferWriter.writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG);\n }\n bufferWriter.writeVarInt(this.ins.length);\n this.ins.forEach(txIn => {\n bufferWriter.writeSlice(txIn.hash);\n bufferWriter.writeUInt32(txIn.index);\n bufferWriter.writeVarSlice(txIn.script);\n bufferWriter.writeUInt32(txIn.sequence);\n });\n bufferWriter.writeVarInt(this.outs.length);\n this.outs.forEach(txOut => {\n if (isOutput(txOut)) {\n bufferWriter.writeUInt64(txOut.value);\n } else {\n bufferWriter.writeSlice(txOut.valueBuffer);\n }\n bufferWriter.writeVarSlice(txOut.script);\n });\n if (hasWitnesses) {\n this.ins.forEach(input => {\n bufferWriter.writeVector(input.witness);\n });\n }\n bufferWriter.writeUInt32(this.locktime);\n // avoid slicing unless necessary\n if (initialOffset !== undefined)\n return buffer.slice(initialOffset, bufferWriter.offset);\n return buffer;\n }\n}\nexports.Transaction = Transaction;\nTransaction.DEFAULT_SEQUENCE = 0xffffffff;\nTransaction.SIGHASH_DEFAULT = 0x00;\nTransaction.SIGHASH_ALL = 0x01;\nTransaction.SIGHASH_NONE = 0x02;\nTransaction.SIGHASH_SINGLE = 0x03;\nTransaction.SIGHASH_ANYONECANPAY = 0x80;\nTransaction.SIGHASH_OUTPUT_MASK = 0x03;\nTransaction.SIGHASH_INPUT_MASK = 0x80;\nTransaction.ADVANCED_TRANSACTION_MARKER = 0x00;\nTransaction.ADVANCED_TRANSACTION_FLAG = 0x01;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvdHJhbnNhY3Rpb24uanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELG1CQUFtQjtBQUNuQixzQkFBc0IsbUJBQU8sQ0FBQyxzRUFBZTtBQUM3QyxnQkFBZ0IsbUJBQU8sQ0FBQyw0REFBVTtBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyw0REFBVTtBQUNsQyxpQkFBaUIsbUJBQU8sQ0FBQyw0REFBVTtBQUNuQyxjQUFjLG1CQUFPLENBQUMsMERBQVM7QUFDL0IsUUFBUSxZQUFZO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxxQkFBcUIsTUFBTTtBQUMzQjtBQUNBLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQSxZQUFZLE1BQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLE1BQU07QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsWUFBWTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLG9CQUFvQixhQUFhO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0Esc0JBQXNCLFlBQVk7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsTUFBTTtBQUN4QztBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixhQUFhO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixNQUFNO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLE1BQU0sU0FBUyxNQUFNO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE1BQU07QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsZ0JBQWdCLE1BQU07QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsTUFBTTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLE1BQU07QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvdHJhbnNhY3Rpb24uanM/MzRmNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UcmFuc2FjdGlvbiA9IHZvaWQgMDtcbmNvbnN0IGJ1ZmZlcnV0aWxzXzEgPSByZXF1aXJlKCcuL2J1ZmZlcnV0aWxzJyk7XG5jb25zdCBiY3J5cHRvID0gcmVxdWlyZSgnLi9jcnlwdG8nKTtcbmNvbnN0IGJzY3JpcHQgPSByZXF1aXJlKCcuL3NjcmlwdCcpO1xuY29uc3Qgc2NyaXB0XzEgPSByZXF1aXJlKCcuL3NjcmlwdCcpO1xuY29uc3QgdHlwZXMgPSByZXF1aXJlKCcuL3R5cGVzJyk7XG5jb25zdCB7IHR5cGVmb3JjZSB9ID0gdHlwZXM7XG5mdW5jdGlvbiB2YXJTbGljZVNpemUoc29tZVNjcmlwdCkge1xuICBjb25zdCBsZW5ndGggPSBzb21lU2NyaXB0Lmxlbmd0aDtcbiAgcmV0dXJuIGJ1ZmZlcnV0aWxzXzEudmFydWludC5lbmNvZGluZ0xlbmd0aChsZW5ndGgpICsgbGVuZ3RoO1xufVxuZnVuY3Rpb24gdmVjdG9yU2l6ZShzb21lVmVjdG9yKSB7XG4gIGNvbnN0IGxlbmd0aCA9IHNvbWVWZWN0b3IubGVuZ3RoO1xuICByZXR1cm4gKFxuICAgIGJ1ZmZlcnV0aWxzXzEudmFydWludC5lbmNvZGluZ0xlbmd0aChsZW5ndGgpICtcbiAgICBzb21lVmVjdG9yLnJlZHVjZSgoc3VtLCB3aXRuZXNzKSA9PiB7XG4gICAgICByZXR1cm4gc3VtICsgdmFyU2xpY2VTaXplKHdpdG5lc3MpO1xuICAgIH0sIDApXG4gICk7XG59XG5jb25zdCBFTVBUWV9CVUZGRVIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMCk7XG5jb25zdCBFTVBUWV9XSVRORVNTID0gW107XG5jb25zdCBaRVJPID0gQnVmZmVyLmZyb20oXG4gICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgJ2hleCcsXG4pO1xuY29uc3QgT05FID0gQnVmZmVyLmZyb20oXG4gICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyxcbiAgJ2hleCcsXG4pO1xuY29uc3QgVkFMVUVfVUlOVDY0X01BWCA9IEJ1ZmZlci5mcm9tKCdmZmZmZmZmZmZmZmZmZmZmJywgJ2hleCcpO1xuY29uc3QgQkxBTktfT1VUUFVUID0ge1xuICBzY3JpcHQ6IEVNUFRZX0JVRkZFUixcbiAgdmFsdWVCdWZmZXI6IFZBTFVFX1VJTlQ2NF9NQVgsXG59O1xuZnVuY3Rpb24gaXNPdXRwdXQob3V0KSB7XG4gIHJldHVybiBvdXQudmFsdWUgIT09IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogUmVwcmVzZW50cyBhIEJpdGNvaW4gdHJhbnNhY3Rpb24uXG4gKi9cbmNsYXNzIFRyYW5zYWN0aW9uIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy52ZXJzaW9uID0gMTtcbiAgICB0aGlzLmxvY2t0aW1lID0gMDtcbiAgICB0aGlzLmlucyA9IFtdO1xuICAgIHRoaXMub3V0cyA9IFtdO1xuICB9XG4gIHN0YXRpYyBmcm9tQnVmZmVyKGJ1ZmZlciwgX05PX1NUUklDVCkge1xuICAgIGNvbnN0IGJ1ZmZlclJlYWRlciA9IG5ldyBidWZmZXJ1dGlsc18xLkJ1ZmZlclJlYWRlcihidWZmZXIpO1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKCk7XG4gICAgdHgudmVyc2lvbiA9IGJ1ZmZlclJlYWRlci5yZWFkSW50MzIoKTtcbiAgICBjb25zdCBtYXJrZXIgPSBidWZmZXJSZWFkZXIucmVhZFVJbnQ4KCk7XG4gICAgY29uc3QgZmxhZyA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDgoKTtcbiAgICBsZXQgaGFzV2l0bmVzc2VzID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgbWFya2VyID09PSBUcmFuc2FjdGlvbi5BRFZBTkNFRF9UUkFOU0FDVElPTl9NQVJLRVIgJiZcbiAgICAgIGZsYWcgPT09IFRyYW5zYWN0aW9uLkFEVkFOQ0VEX1RSQU5TQUNUSU9OX0ZMQUdcbiAgICApIHtcbiAgICAgIGhhc1dpdG5lc3NlcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlclJlYWRlci5vZmZzZXQgLT0gMjtcbiAgICB9XG4gICAgY29uc3QgdmluTGVuID0gYnVmZmVyUmVhZGVyLnJlYWRWYXJJbnQoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpbkxlbjsgKytpKSB7XG4gICAgICB0eC5pbnMucHVzaCh7XG4gICAgICAgIGhhc2g6IGJ1ZmZlclJlYWRlci5yZWFkU2xpY2UoMzIpLFxuICAgICAgICBpbmRleDogYnVmZmVyUmVhZGVyLnJlYWRVSW50MzIoKSxcbiAgICAgICAgc2NyaXB0OiBidWZmZXJSZWFkZXIucmVhZFZhclNsaWNlKCksXG4gICAgICAgIHNlcXVlbmNlOiBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpLFxuICAgICAgICB3aXRuZXNzOiBFTVBUWV9XSVRORVNTLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHZvdXRMZW4gPSBidWZmZXJSZWFkZXIucmVhZFZhckludCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdm91dExlbjsgKytpKSB7XG4gICAgICB0eC5vdXRzLnB1c2goe1xuICAgICAgICB2YWx1ZTogYnVmZmVyUmVhZGVyLnJlYWRVSW50NjQoKSxcbiAgICAgICAgc2NyaXB0OiBidWZmZXJSZWFkZXIucmVhZFZhclNsaWNlKCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGhhc1dpdG5lc3Nlcykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aW5MZW47ICsraSkge1xuICAgICAgICB0eC5pbnNbaV0ud2l0bmVzcyA9IGJ1ZmZlclJlYWRlci5yZWFkVmVjdG9yKCk7XG4gICAgICB9XG4gICAgICAvLyB3YXMgdGhpcyBwb2ludGxlc3M/XG4gICAgICBpZiAoIXR4Lmhhc1dpdG5lc3NlcygpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyBzdXBlcmZsdW91cyB3aXRuZXNzIGRhdGEnKTtcbiAgICB9XG4gICAgdHgubG9ja3RpbWUgPSBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpO1xuICAgIGlmIChfTk9fU1RSSUNUKSByZXR1cm4gdHg7XG4gICAgaWYgKGJ1ZmZlclJlYWRlci5vZmZzZXQgIT09IGJ1ZmZlci5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyB1bmV4cGVjdGVkIGRhdGEnKTtcbiAgICByZXR1cm4gdHg7XG4gIH1cbiAgc3RhdGljIGZyb21IZXgoaGV4KSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uLmZyb21CdWZmZXIoQnVmZmVyLmZyb20oaGV4LCAnaGV4JyksIGZhbHNlKTtcbiAgfVxuICBzdGF0aWMgaXNDb2luYmFzZUhhc2goYnVmZmVyKSB7XG4gICAgdHlwZWZvcmNlKHR5cGVzLkhhc2gyNTZiaXQsIGJ1ZmZlcik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzMjsgKytpKSB7XG4gICAgICBpZiAoYnVmZmVyW2ldICE9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlzQ29pbmJhc2UoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaW5zLmxlbmd0aCA9PT0gMSAmJiBUcmFuc2FjdGlvbi5pc0NvaW5iYXNlSGFzaCh0aGlzLmluc1swXS5oYXNoKVxuICAgICk7XG4gIH1cbiAgYWRkSW5wdXQoaGFzaCwgaW5kZXgsIHNlcXVlbmNlLCBzY3JpcHRTaWcpIHtcbiAgICB0eXBlZm9yY2UoXG4gICAgICB0eXBlcy50dXBsZShcbiAgICAgICAgdHlwZXMuSGFzaDI1NmJpdCxcbiAgICAgICAgdHlwZXMuVUludDMyLFxuICAgICAgICB0eXBlcy5tYXliZSh0eXBlcy5VSW50MzIpLFxuICAgICAgICB0eXBlcy5tYXliZSh0eXBlcy5CdWZmZXIpLFxuICAgICAgKSxcbiAgICAgIGFyZ3VtZW50cyxcbiAgICApO1xuICAgIGlmICh0eXBlcy5OdWxsKHNlcXVlbmNlKSkge1xuICAgICAgc2VxdWVuY2UgPSBUcmFuc2FjdGlvbi5ERUZBVUxUX1NFUVVFTkNFO1xuICAgIH1cbiAgICAvLyBBZGQgdGhlIGlucHV0IGFuZCByZXR1cm4gdGhlIGlucHV0J3MgaW5kZXhcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pbnMucHVzaCh7XG4gICAgICAgIGhhc2gsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBzY3JpcHQ6IHNjcmlwdFNpZyB8fCBFTVBUWV9CVUZGRVIsXG4gICAgICAgIHNlcXVlbmNlOiBzZXF1ZW5jZSxcbiAgICAgICAgd2l0bmVzczogRU1QVFlfV0lUTkVTUyxcbiAgICAgIH0pIC0gMVxuICAgICk7XG4gIH1cbiAgYWRkT3V0cHV0KHNjcmlwdFB1YktleSwgdmFsdWUpIHtcbiAgICB0eXBlZm9yY2UodHlwZXMudHVwbGUodHlwZXMuQnVmZmVyLCB0eXBlcy5TYXRvc2hpKSwgYXJndW1lbnRzKTtcbiAgICAvLyBBZGQgdGhlIG91dHB1dCBhbmQgcmV0dXJuIHRoZSBvdXRwdXQncyBpbmRleFxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm91dHMucHVzaCh7XG4gICAgICAgIHNjcmlwdDogc2NyaXB0UHViS2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICAgIH0pIC0gMVxuICAgICk7XG4gIH1cbiAgaGFzV2l0bmVzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmlucy5zb21lKHggPT4ge1xuICAgICAgcmV0dXJuIHgud2l0bmVzcy5sZW5ndGggIT09IDA7XG4gICAgfSk7XG4gIH1cbiAgc3RyaXBXaXRuZXNzZXMoKSB7XG4gICAgdGhpcy5pbnMuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICBpbnB1dC53aXRuZXNzID0gRU1QVFlfV0lUTkVTUzsgLy8gU2V0IHdpdG5lc3MgZGF0YSB0byBhbiBlbXB0eSBhcnJheVxuICAgIH0pO1xuICB9XG4gIHdlaWdodCgpIHtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5ieXRlTGVuZ3RoKGZhbHNlKTtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMuYnl0ZUxlbmd0aCh0cnVlKTtcbiAgICByZXR1cm4gYmFzZSAqIDMgKyB0b3RhbDtcbiAgfVxuICB2aXJ0dWFsU2l6ZSgpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMud2VpZ2h0KCkgLyA0KTtcbiAgfVxuICBieXRlTGVuZ3RoKF9BTExPV19XSVRORVNTID0gdHJ1ZSkge1xuICAgIGNvbnN0IGhhc1dpdG5lc3NlcyA9IF9BTExPV19XSVRORVNTICYmIHRoaXMuaGFzV2l0bmVzc2VzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIChoYXNXaXRuZXNzZXMgPyAxMCA6IDgpICtcbiAgICAgIGJ1ZmZlcnV0aWxzXzEudmFydWludC5lbmNvZGluZ0xlbmd0aCh0aGlzLmlucy5sZW5ndGgpICtcbiAgICAgIGJ1ZmZlcnV0aWxzXzEudmFydWludC5lbmNvZGluZ0xlbmd0aCh0aGlzLm91dHMubGVuZ3RoKSArXG4gICAgICB0aGlzLmlucy5yZWR1Y2UoKHN1bSwgaW5wdXQpID0+IHtcbiAgICAgICAgcmV0dXJuIHN1bSArIDQwICsgdmFyU2xpY2VTaXplKGlucHV0LnNjcmlwdCk7XG4gICAgICB9LCAwKSArXG4gICAgICB0aGlzLm91dHMucmVkdWNlKChzdW0sIG91dHB1dCkgPT4ge1xuICAgICAgICByZXR1cm4gc3VtICsgOCArIHZhclNsaWNlU2l6ZShvdXRwdXQuc2NyaXB0KTtcbiAgICAgIH0sIDApICtcbiAgICAgIChoYXNXaXRuZXNzZXNcbiAgICAgICAgPyB0aGlzLmlucy5yZWR1Y2UoKHN1bSwgaW5wdXQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdW0gKyB2ZWN0b3JTaXplKGlucHV0LndpdG5lc3MpO1xuICAgICAgICAgIH0sIDApXG4gICAgICAgIDogMClcbiAgICApO1xuICB9XG4gIGNsb25lKCkge1xuICAgIGNvbnN0IG5ld1R4ID0gbmV3IFRyYW5zYWN0aW9uKCk7XG4gICAgbmV3VHgudmVyc2lvbiA9IHRoaXMudmVyc2lvbjtcbiAgICBuZXdUeC5sb2NrdGltZSA9IHRoaXMubG9ja3RpbWU7XG4gICAgbmV3VHguaW5zID0gdGhpcy5pbnMubWFwKHR4SW4gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGFzaDogdHhJbi5oYXNoLFxuICAgICAgICBpbmRleDogdHhJbi5pbmRleCxcbiAgICAgICAgc2NyaXB0OiB0eEluLnNjcmlwdCxcbiAgICAgICAgc2VxdWVuY2U6IHR4SW4uc2VxdWVuY2UsXG4gICAgICAgIHdpdG5lc3M6IHR4SW4ud2l0bmVzcyxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgbmV3VHgub3V0cyA9IHRoaXMub3V0cy5tYXAodHhPdXQgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NyaXB0OiB0eE91dC5zY3JpcHQsXG4gICAgICAgIHZhbHVlOiB0eE91dC52YWx1ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld1R4O1xuICB9XG4gIC8qKlxuICAgKiBIYXNoIHRyYW5zYWN0aW9uIGZvciBzaWduaW5nIGEgc3BlY2lmaWMgaW5wdXQuXG4gICAqXG4gICAqIEJpdGNvaW4gdXNlcyBhIGRpZmZlcmVudCBoYXNoIGZvciBlYWNoIHNpZ25lZCB0cmFuc2FjdGlvbiBpbnB1dC5cbiAgICogVGhpcyBtZXRob2QgY29waWVzIHRoZSB0cmFuc2FjdGlvbiwgbWFrZXMgdGhlIG5lY2Vzc2FyeSBjaGFuZ2VzIGJhc2VkIG9uIHRoZVxuICAgKiBoYXNoVHlwZSwgYW5kIHRoZW4gaGFzaGVzIHRoZSByZXN1bHQuXG4gICAqIFRoaXMgaGFzaCBjYW4gdGhlbiBiZSB1c2VkIHRvIHNpZ24gdGhlIHByb3ZpZGVkIHRyYW5zYWN0aW9uIGlucHV0LlxuICAgKi9cbiAgaGFzaEZvclNpZ25hdHVyZShpbkluZGV4LCBwcmV2T3V0U2NyaXB0LCBoYXNoVHlwZSkge1xuICAgIHR5cGVmb3JjZShcbiAgICAgIHR5cGVzLnR1cGxlKHR5cGVzLlVJbnQzMiwgdHlwZXMuQnVmZmVyLCAvKiB0eXBlcy5VSW50OCAqLyB0eXBlcy5OdW1iZXIpLFxuICAgICAgYXJndW1lbnRzLFxuICAgICk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYml0Y29pbi9ibG9iL21hc3Rlci9zcmMvdGVzdC9zaWdoYXNoX3Rlc3RzLmNwcCNMMjlcbiAgICBpZiAoaW5JbmRleCA+PSB0aGlzLmlucy5sZW5ndGgpIHJldHVybiBPTkU7XG4gICAgLy8gaWdub3JlIE9QX0NPREVTRVBBUkFUT1JcbiAgICBjb25zdCBvdXJTY3JpcHQgPSBic2NyaXB0LmNvbXBpbGUoXG4gICAgICBic2NyaXB0LmRlY29tcGlsZShwcmV2T3V0U2NyaXB0KS5maWx0ZXIoeCA9PiB7XG4gICAgICAgIHJldHVybiB4ICE9PSBzY3JpcHRfMS5PUFMuT1BfQ09ERVNFUEFSQVRPUjtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgdHhUbXAgPSB0aGlzLmNsb25lKCk7XG4gICAgLy8gU0lHSEFTSF9OT05FOiBpZ25vcmUgYWxsIG91dHB1dHM/ICh3aWxkY2FyZCBwYXllZSlcbiAgICBpZiAoKGhhc2hUeXBlICYgMHgxZikgPT09IFRyYW5zYWN0aW9uLlNJR0hBU0hfTk9ORSkge1xuICAgICAgdHhUbXAub3V0cyA9IFtdO1xuICAgICAgLy8gaWdub3JlIHNlcXVlbmNlIG51bWJlcnMgKGV4Y2VwdCBhdCBpbkluZGV4KVxuICAgICAgdHhUbXAuaW5zLmZvckVhY2goKGlucHV0LCBpKSA9PiB7XG4gICAgICAgIGlmIChpID09PSBpbkluZGV4KSByZXR1cm47XG4gICAgICAgIGlucHV0LnNlcXVlbmNlID0gMDtcbiAgICAgIH0pO1xuICAgICAgLy8gU0lHSEFTSF9TSU5HTEU6IGlnbm9yZSBhbGwgb3V0cHV0cywgZXhjZXB0IGF0IHRoZSBzYW1lIGluZGV4P1xuICAgIH0gZWxzZSBpZiAoKGhhc2hUeXBlICYgMHgxZikgPT09IFRyYW5zYWN0aW9uLlNJR0hBU0hfU0lOR0xFKSB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXRjb2luL2Jsb2IvbWFzdGVyL3NyYy90ZXN0L3NpZ2hhc2hfdGVzdHMuY3BwI0w2MFxuICAgICAgaWYgKGluSW5kZXggPj0gdGhpcy5vdXRzLmxlbmd0aCkgcmV0dXJuIE9ORTtcbiAgICAgIC8vIHRydW5jYXRlIG91dHB1dHMgYWZ0ZXJcbiAgICAgIHR4VG1wLm91dHMubGVuZ3RoID0gaW5JbmRleCArIDE7XG4gICAgICAvLyBcImJsYW5rXCIgb3V0cHV0cyBiZWZvcmVcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5JbmRleDsgaSsrKSB7XG4gICAgICAgIHR4VG1wLm91dHNbaV0gPSBCTEFOS19PVVRQVVQ7XG4gICAgICB9XG4gICAgICAvLyBpZ25vcmUgc2VxdWVuY2UgbnVtYmVycyAoZXhjZXB0IGF0IGluSW5kZXgpXG4gICAgICB0eFRtcC5pbnMuZm9yRWFjaCgoaW5wdXQsIHkpID0+IHtcbiAgICAgICAgaWYgKHkgPT09IGluSW5kZXgpIHJldHVybjtcbiAgICAgICAgaW5wdXQuc2VxdWVuY2UgPSAwO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFNJR0hBU0hfQU5ZT05FQ0FOUEFZOiBpZ25vcmUgaW5wdXRzIGVudGlyZWx5P1xuICAgIGlmIChoYXNoVHlwZSAmIFRyYW5zYWN0aW9uLlNJR0hBU0hfQU5ZT05FQ0FOUEFZKSB7XG4gICAgICB0eFRtcC5pbnMgPSBbdHhUbXAuaW5zW2luSW5kZXhdXTtcbiAgICAgIHR4VG1wLmluc1swXS5zY3JpcHQgPSBvdXJTY3JpcHQ7XG4gICAgICAvLyBTSUdIQVNIX0FMTDogb25seSBpZ25vcmUgaW5wdXQgc2NyaXB0c1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBcImJsYW5rXCIgb3RoZXJzIGlucHV0IHNjcmlwdHNcbiAgICAgIHR4VG1wLmlucy5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICAgICAgaW5wdXQuc2NyaXB0ID0gRU1QVFlfQlVGRkVSO1xuICAgICAgfSk7XG4gICAgICB0eFRtcC5pbnNbaW5JbmRleF0uc2NyaXB0ID0gb3VyU2NyaXB0O1xuICAgIH1cbiAgICAvLyBzZXJpYWxpemUgYW5kIGhhc2hcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUodHhUbXAuYnl0ZUxlbmd0aChmYWxzZSkgKyA0KTtcbiAgICBidWZmZXIud3JpdGVJbnQzMkxFKGhhc2hUeXBlLCBidWZmZXIubGVuZ3RoIC0gNCk7XG4gICAgdHhUbXAuX190b0J1ZmZlcihidWZmZXIsIDAsIGZhbHNlKTtcbiAgICByZXR1cm4gYmNyeXB0by5oYXNoMjU2KGJ1ZmZlcik7XG4gIH1cbiAgaGFzaEZvcldpdG5lc3NWMShpbkluZGV4LCBwcmV2T3V0U2NyaXB0cywgdmFsdWVzLCBoYXNoVHlwZSwgbGVhZkhhc2gsIGFubmV4KSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDM0MS5tZWRpYXdpa2kjY29tbW9uLXNpZ25hdHVyZS1tZXNzYWdlXG4gICAgdHlwZWZvcmNlKFxuICAgICAgdHlwZXMudHVwbGUoXG4gICAgICAgIHR5cGVzLlVJbnQzMixcbiAgICAgICAgdHlwZWZvcmNlLmFycmF5T2YodHlwZXMuQnVmZmVyKSxcbiAgICAgICAgdHlwZWZvcmNlLmFycmF5T2YodHlwZXMuU2F0b3NoaSksXG4gICAgICAgIHR5cGVzLlVJbnQzMixcbiAgICAgICksXG4gICAgICBhcmd1bWVudHMsXG4gICAgKTtcbiAgICBpZiAoXG4gICAgICB2YWx1ZXMubGVuZ3RoICE9PSB0aGlzLmlucy5sZW5ndGggfHxcbiAgICAgIHByZXZPdXRTY3JpcHRzLmxlbmd0aCAhPT0gdGhpcy5pbnMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3VwcGx5IHByZXZvdXQgc2NyaXB0IGFuZCB2YWx1ZSBmb3IgYWxsIGlucHV0cycpO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXRUeXBlID1cbiAgICAgIGhhc2hUeXBlID09PSBUcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFRcbiAgICAgICAgPyBUcmFuc2FjdGlvbi5TSUdIQVNIX0FMTFxuICAgICAgICA6IGhhc2hUeXBlICYgVHJhbnNhY3Rpb24uU0lHSEFTSF9PVVRQVVRfTUFTSztcbiAgICBjb25zdCBpbnB1dFR5cGUgPSBoYXNoVHlwZSAmIFRyYW5zYWN0aW9uLlNJR0hBU0hfSU5QVVRfTUFTSztcbiAgICBjb25zdCBpc0FueW9uZUNhblBheSA9IGlucHV0VHlwZSA9PT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9BTllPTkVDQU5QQVk7XG4gICAgY29uc3QgaXNOb25lID0gb3V0cHV0VHlwZSA9PT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9OT05FO1xuICAgIGNvbnN0IGlzU2luZ2xlID0gb3V0cHV0VHlwZSA9PT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9TSU5HTEU7XG4gICAgbGV0IGhhc2hQcmV2b3V0cyA9IEVNUFRZX0JVRkZFUjtcbiAgICBsZXQgaGFzaEFtb3VudHMgPSBFTVBUWV9CVUZGRVI7XG4gICAgbGV0IGhhc2hTY3JpcHRQdWJLZXlzID0gRU1QVFlfQlVGRkVSO1xuICAgIGxldCBoYXNoU2VxdWVuY2VzID0gRU1QVFlfQlVGRkVSO1xuICAgIGxldCBoYXNoT3V0cHV0cyA9IEVNUFRZX0JVRkZFUjtcbiAgICBpZiAoIWlzQW55b25lQ2FuUGF5KSB7XG4gICAgICBsZXQgYnVmZmVyV3JpdGVyID0gYnVmZmVydXRpbHNfMS5CdWZmZXJXcml0ZXIud2l0aENhcGFjaXR5KFxuICAgICAgICAzNiAqIHRoaXMuaW5zLmxlbmd0aCxcbiAgICAgICk7XG4gICAgICB0aGlzLmlucy5mb3JFYWNoKHR4SW4gPT4ge1xuICAgICAgICBidWZmZXJXcml0ZXIud3JpdGVTbGljZSh0eEluLmhhc2gpO1xuICAgICAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHhJbi5pbmRleCk7XG4gICAgICB9KTtcbiAgICAgIGhhc2hQcmV2b3V0cyA9IGJjcnlwdG8uc2hhMjU2KGJ1ZmZlcldyaXRlci5lbmQoKSk7XG4gICAgICBidWZmZXJXcml0ZXIgPSBidWZmZXJ1dGlsc18xLkJ1ZmZlcldyaXRlci53aXRoQ2FwYWNpdHkoXG4gICAgICAgIDggKiB0aGlzLmlucy5sZW5ndGgsXG4gICAgICApO1xuICAgICAgdmFsdWVzLmZvckVhY2godmFsdWUgPT4gYnVmZmVyV3JpdGVyLndyaXRlVUludDY0KHZhbHVlKSk7XG4gICAgICBoYXNoQW1vdW50cyA9IGJjcnlwdG8uc2hhMjU2KGJ1ZmZlcldyaXRlci5lbmQoKSk7XG4gICAgICBidWZmZXJXcml0ZXIgPSBidWZmZXJ1dGlsc18xLkJ1ZmZlcldyaXRlci53aXRoQ2FwYWNpdHkoXG4gICAgICAgIHByZXZPdXRTY3JpcHRzLm1hcCh2YXJTbGljZVNpemUpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpLFxuICAgICAgKTtcbiAgICAgIHByZXZPdXRTY3JpcHRzLmZvckVhY2gocHJldk91dFNjcmlwdCA9PlxuICAgICAgICBidWZmZXJXcml0ZXIud3JpdGVWYXJTbGljZShwcmV2T3V0U2NyaXB0KSxcbiAgICAgICk7XG4gICAgICBoYXNoU2NyaXB0UHViS2V5cyA9IGJjcnlwdG8uc2hhMjU2KGJ1ZmZlcldyaXRlci5lbmQoKSk7XG4gICAgICBidWZmZXJXcml0ZXIgPSBidWZmZXJ1dGlsc18xLkJ1ZmZlcldyaXRlci53aXRoQ2FwYWNpdHkoXG4gICAgICAgIDQgKiB0aGlzLmlucy5sZW5ndGgsXG4gICAgICApO1xuICAgICAgdGhpcy5pbnMuZm9yRWFjaCh0eEluID0+IGJ1ZmZlcldyaXRlci53cml0ZVVJbnQzMih0eEluLnNlcXVlbmNlKSk7XG4gICAgICBoYXNoU2VxdWVuY2VzID0gYmNyeXB0by5zaGEyNTYoYnVmZmVyV3JpdGVyLmVuZCgpKTtcbiAgICB9XG4gICAgaWYgKCEoaXNOb25lIHx8IGlzU2luZ2xlKSkge1xuICAgICAgY29uc3QgdHhPdXRzU2l6ZSA9IHRoaXMub3V0c1xuICAgICAgICAubWFwKG91dHB1dCA9PiA4ICsgdmFyU2xpY2VTaXplKG91dHB1dC5zY3JpcHQpKVxuICAgICAgICAucmVkdWNlKChhLCBiKSA9PiBhICsgYik7XG4gICAgICBjb25zdCBidWZmZXJXcml0ZXIgPSBidWZmZXJ1dGlsc18xLkJ1ZmZlcldyaXRlci53aXRoQ2FwYWNpdHkodHhPdXRzU2l6ZSk7XG4gICAgICB0aGlzLm91dHMuZm9yRWFjaChvdXQgPT4ge1xuICAgICAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50NjQob3V0LnZhbHVlKTtcbiAgICAgICAgYnVmZmVyV3JpdGVyLndyaXRlVmFyU2xpY2Uob3V0LnNjcmlwdCk7XG4gICAgICB9KTtcbiAgICAgIGhhc2hPdXRwdXRzID0gYmNyeXB0by5zaGEyNTYoYnVmZmVyV3JpdGVyLmVuZCgpKTtcbiAgICB9IGVsc2UgaWYgKGlzU2luZ2xlICYmIGluSW5kZXggPCB0aGlzLm91dHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0aGlzLm91dHNbaW5JbmRleF07XG4gICAgICBjb25zdCBidWZmZXJXcml0ZXIgPSBidWZmZXJ1dGlsc18xLkJ1ZmZlcldyaXRlci53aXRoQ2FwYWNpdHkoXG4gICAgICAgIDggKyB2YXJTbGljZVNpemUob3V0cHV0LnNjcmlwdCksXG4gICAgICApO1xuICAgICAgYnVmZmVyV3JpdGVyLndyaXRlVUludDY0KG91dHB1dC52YWx1ZSk7XG4gICAgICBidWZmZXJXcml0ZXIud3JpdGVWYXJTbGljZShvdXRwdXQuc2NyaXB0KTtcbiAgICAgIGhhc2hPdXRwdXRzID0gYmNyeXB0by5zaGEyNTYoYnVmZmVyV3JpdGVyLmVuZCgpKTtcbiAgICB9XG4gICAgY29uc3Qgc3BlbmRUeXBlID0gKGxlYWZIYXNoID8gMiA6IDApICsgKGFubmV4ID8gMSA6IDApO1xuICAgIC8vIExlbmd0aCBjYWxjdWxhdGlvbiBmcm9tOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAzNDEubWVkaWF3aWtpI2NpdGVfbm90ZS0xNFxuICAgIC8vIFdpdGggZXh0ZW5zaW9uIGZyb206XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDM0Mi5tZWRpYXdpa2kjc2lnbmF0dXJlLXZhbGlkYXRpb25cbiAgICBjb25zdCBzaWdNc2dTaXplID1cbiAgICAgIDE3NCAtXG4gICAgICAoaXNBbnlvbmVDYW5QYXkgPyA0OSA6IDApIC1cbiAgICAgIChpc05vbmUgPyAzMiA6IDApICtcbiAgICAgIChhbm5leCA/IDMyIDogMCkgK1xuICAgICAgKGxlYWZIYXNoID8gMzcgOiAwKTtcbiAgICBjb25zdCBzaWdNc2dXcml0ZXIgPSBidWZmZXJ1dGlsc18xLkJ1ZmZlcldyaXRlci53aXRoQ2FwYWNpdHkoc2lnTXNnU2l6ZSk7XG4gICAgc2lnTXNnV3JpdGVyLndyaXRlVUludDgoaGFzaFR5cGUpO1xuICAgIC8vIFRyYW5zYWN0aW9uXG4gICAgc2lnTXNnV3JpdGVyLndyaXRlSW50MzIodGhpcy52ZXJzaW9uKTtcbiAgICBzaWdNc2dXcml0ZXIud3JpdGVVSW50MzIodGhpcy5sb2NrdGltZSk7XG4gICAgc2lnTXNnV3JpdGVyLndyaXRlU2xpY2UoaGFzaFByZXZvdXRzKTtcbiAgICBzaWdNc2dXcml0ZXIud3JpdGVTbGljZShoYXNoQW1vdW50cyk7XG4gICAgc2lnTXNnV3JpdGVyLndyaXRlU2xpY2UoaGFzaFNjcmlwdFB1YktleXMpO1xuICAgIHNpZ01zZ1dyaXRlci53cml0ZVNsaWNlKGhhc2hTZXF1ZW5jZXMpO1xuICAgIGlmICghKGlzTm9uZSB8fCBpc1NpbmdsZSkpIHtcbiAgICAgIHNpZ01zZ1dyaXRlci53cml0ZVNsaWNlKGhhc2hPdXRwdXRzKTtcbiAgICB9XG4gICAgLy8gSW5wdXRcbiAgICBzaWdNc2dXcml0ZXIud3JpdGVVSW50OChzcGVuZFR5cGUpO1xuICAgIGlmIChpc0FueW9uZUNhblBheSkge1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmluc1tpbkluZGV4XTtcbiAgICAgIHNpZ01zZ1dyaXRlci53cml0ZVNsaWNlKGlucHV0Lmhhc2gpO1xuICAgICAgc2lnTXNnV3JpdGVyLndyaXRlVUludDMyKGlucHV0LmluZGV4KTtcbiAgICAgIHNpZ01zZ1dyaXRlci53cml0ZVVJbnQ2NCh2YWx1ZXNbaW5JbmRleF0pO1xuICAgICAgc2lnTXNnV3JpdGVyLndyaXRlVmFyU2xpY2UocHJldk91dFNjcmlwdHNbaW5JbmRleF0pO1xuICAgICAgc2lnTXNnV3JpdGVyLndyaXRlVUludDMyKGlucHV0LnNlcXVlbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2lnTXNnV3JpdGVyLndyaXRlVUludDMyKGluSW5kZXgpO1xuICAgIH1cbiAgICBpZiAoYW5uZXgpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlcldyaXRlciA9IGJ1ZmZlcnV0aWxzXzEuQnVmZmVyV3JpdGVyLndpdGhDYXBhY2l0eShcbiAgICAgICAgdmFyU2xpY2VTaXplKGFubmV4KSxcbiAgICAgICk7XG4gICAgICBidWZmZXJXcml0ZXIud3JpdGVWYXJTbGljZShhbm5leCk7XG4gICAgICBzaWdNc2dXcml0ZXIud3JpdGVTbGljZShiY3J5cHRvLnNoYTI1NihidWZmZXJXcml0ZXIuZW5kKCkpKTtcbiAgICB9XG4gICAgLy8gT3V0cHV0XG4gICAgaWYgKGlzU2luZ2xlKSB7XG4gICAgICBzaWdNc2dXcml0ZXIud3JpdGVTbGljZShoYXNoT3V0cHV0cyk7XG4gICAgfVxuICAgIC8vIEJJUDM0MiBleHRlbnNpb25cbiAgICBpZiAobGVhZkhhc2gpIHtcbiAgICAgIHNpZ01zZ1dyaXRlci53cml0ZVNsaWNlKGxlYWZIYXNoKTtcbiAgICAgIHNpZ01zZ1dyaXRlci53cml0ZVVJbnQ4KDApO1xuICAgICAgc2lnTXNnV3JpdGVyLndyaXRlVUludDMyKDB4ZmZmZmZmZmYpO1xuICAgIH1cbiAgICAvLyBFeHRyYSB6ZXJvIGJ5dGUgYmVjYXVzZTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzQxLm1lZGlhd2lraSNjaXRlX25vdGUtMTlcbiAgICByZXR1cm4gYmNyeXB0by50YWdnZWRIYXNoKFxuICAgICAgJ1RhcFNpZ2hhc2gnLFxuICAgICAgQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oWzB4MDBdKSwgc2lnTXNnV3JpdGVyLmVuZCgpXSksXG4gICAgKTtcbiAgfVxuICBoYXNoRm9yV2l0bmVzc1YwKGluSW5kZXgsIHByZXZPdXRTY3JpcHQsIHZhbHVlLCBoYXNoVHlwZSkge1xuICAgIHR5cGVmb3JjZShcbiAgICAgIHR5cGVzLnR1cGxlKHR5cGVzLlVJbnQzMiwgdHlwZXMuQnVmZmVyLCB0eXBlcy5TYXRvc2hpLCB0eXBlcy5VSW50MzIpLFxuICAgICAgYXJndW1lbnRzLFxuICAgICk7XG4gICAgbGV0IHRidWZmZXIgPSBCdWZmZXIuZnJvbShbXSk7XG4gICAgbGV0IGJ1ZmZlcldyaXRlcjtcbiAgICBsZXQgaGFzaE91dHB1dHMgPSBaRVJPO1xuICAgIGxldCBoYXNoUHJldm91dHMgPSBaRVJPO1xuICAgIGxldCBoYXNoU2VxdWVuY2UgPSBaRVJPO1xuICAgIGlmICghKGhhc2hUeXBlICYgVHJhbnNhY3Rpb24uU0lHSEFTSF9BTllPTkVDQU5QQVkpKSB7XG4gICAgICB0YnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKDM2ICogdGhpcy5pbnMubGVuZ3RoKTtcbiAgICAgIGJ1ZmZlcldyaXRlciA9IG5ldyBidWZmZXJ1dGlsc18xLkJ1ZmZlcldyaXRlcih0YnVmZmVyLCAwKTtcbiAgICAgIHRoaXMuaW5zLmZvckVhY2godHhJbiA9PiB7XG4gICAgICAgIGJ1ZmZlcldyaXRlci53cml0ZVNsaWNlKHR4SW4uaGFzaCk7XG4gICAgICAgIGJ1ZmZlcldyaXRlci53cml0ZVVJbnQzMih0eEluLmluZGV4KTtcbiAgICAgIH0pO1xuICAgICAgaGFzaFByZXZvdXRzID0gYmNyeXB0by5oYXNoMjU2KHRidWZmZXIpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhKGhhc2hUeXBlICYgVHJhbnNhY3Rpb24uU0lHSEFTSF9BTllPTkVDQU5QQVkpICYmXG4gICAgICAoaGFzaFR5cGUgJiAweDFmKSAhPT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9TSU5HTEUgJiZcbiAgICAgIChoYXNoVHlwZSAmIDB4MWYpICE9PSBUcmFuc2FjdGlvbi5TSUdIQVNIX05PTkVcbiAgICApIHtcbiAgICAgIHRidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoNCAqIHRoaXMuaW5zLmxlbmd0aCk7XG4gICAgICBidWZmZXJXcml0ZXIgPSBuZXcgYnVmZmVydXRpbHNfMS5CdWZmZXJXcml0ZXIodGJ1ZmZlciwgMCk7XG4gICAgICB0aGlzLmlucy5mb3JFYWNoKHR4SW4gPT4ge1xuICAgICAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHhJbi5zZXF1ZW5jZSk7XG4gICAgICB9KTtcbiAgICAgIGhhc2hTZXF1ZW5jZSA9IGJjcnlwdG8uaGFzaDI1Nih0YnVmZmVyKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGhhc2hUeXBlICYgMHgxZikgIT09IFRyYW5zYWN0aW9uLlNJR0hBU0hfU0lOR0xFICYmXG4gICAgICAoaGFzaFR5cGUgJiAweDFmKSAhPT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9OT05FXG4gICAgKSB7XG4gICAgICBjb25zdCB0eE91dHNTaXplID0gdGhpcy5vdXRzLnJlZHVjZSgoc3VtLCBvdXRwdXQpID0+IHtcbiAgICAgICAgcmV0dXJuIHN1bSArIDggKyB2YXJTbGljZVNpemUob3V0cHV0LnNjcmlwdCk7XG4gICAgICB9LCAwKTtcbiAgICAgIHRidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUodHhPdXRzU2l6ZSk7XG4gICAgICBidWZmZXJXcml0ZXIgPSBuZXcgYnVmZmVydXRpbHNfMS5CdWZmZXJXcml0ZXIodGJ1ZmZlciwgMCk7XG4gICAgICB0aGlzLm91dHMuZm9yRWFjaChvdXQgPT4ge1xuICAgICAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50NjQob3V0LnZhbHVlKTtcbiAgICAgICAgYnVmZmVyV3JpdGVyLndyaXRlVmFyU2xpY2Uob3V0LnNjcmlwdCk7XG4gICAgICB9KTtcbiAgICAgIGhhc2hPdXRwdXRzID0gYmNyeXB0by5oYXNoMjU2KHRidWZmZXIpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAoaGFzaFR5cGUgJiAweDFmKSA9PT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9TSU5HTEUgJiZcbiAgICAgIGluSW5kZXggPCB0aGlzLm91dHMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB0aGlzLm91dHNbaW5JbmRleF07XG4gICAgICB0YnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKDggKyB2YXJTbGljZVNpemUob3V0cHV0LnNjcmlwdCkpO1xuICAgICAgYnVmZmVyV3JpdGVyID0gbmV3IGJ1ZmZlcnV0aWxzXzEuQnVmZmVyV3JpdGVyKHRidWZmZXIsIDApO1xuICAgICAgYnVmZmVyV3JpdGVyLndyaXRlVUludDY0KG91dHB1dC52YWx1ZSk7XG4gICAgICBidWZmZXJXcml0ZXIud3JpdGVWYXJTbGljZShvdXRwdXQuc2NyaXB0KTtcbiAgICAgIGhhc2hPdXRwdXRzID0gYmNyeXB0by5oYXNoMjU2KHRidWZmZXIpO1xuICAgIH1cbiAgICB0YnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKDE1NiArIHZhclNsaWNlU2l6ZShwcmV2T3V0U2NyaXB0KSk7XG4gICAgYnVmZmVyV3JpdGVyID0gbmV3IGJ1ZmZlcnV0aWxzXzEuQnVmZmVyV3JpdGVyKHRidWZmZXIsIDApO1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnNbaW5JbmRleF07XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlSW50MzIodGhpcy52ZXJzaW9uKTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVTbGljZShoYXNoUHJldm91dHMpO1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVNsaWNlKGhhc2hTZXF1ZW5jZSk7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlU2xpY2UoaW5wdXQuaGFzaCk7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKGlucHV0LmluZGV4KTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVWYXJTbGljZShwcmV2T3V0U2NyaXB0KTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50NjQodmFsdWUpO1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVVJbnQzMihpbnB1dC5zZXF1ZW5jZSk7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlU2xpY2UoaGFzaE91dHB1dHMpO1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVVJbnQzMih0aGlzLmxvY2t0aW1lKTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIoaGFzaFR5cGUpO1xuICAgIHJldHVybiBiY3J5cHRvLmhhc2gyNTYodGJ1ZmZlcik7XG4gIH1cbiAgZ2V0SGFzaChmb3JXaXRuZXNzKSB7XG4gICAgLy8gd3R4aWQgZm9yIGNvaW5iYXNlIGlzIGFsd2F5cyAzMiBieXRlcyBvZiAweDAwXG4gICAgaWYgKGZvcldpdG5lc3MgJiYgdGhpcy5pc0NvaW5iYXNlKCkpIHJldHVybiBCdWZmZXIuYWxsb2MoMzIsIDApO1xuICAgIHJldHVybiBiY3J5cHRvLmhhc2gyNTYodGhpcy5fX3RvQnVmZmVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmb3JXaXRuZXNzKSk7XG4gIH1cbiAgZ2V0SWQoKSB7XG4gICAgLy8gdHJhbnNhY3Rpb24gaGFzaCdzIGFyZSBkaXNwbGF5ZWQgaW4gcmV2ZXJzZSBvcmRlclxuICAgIHJldHVybiAoMCwgYnVmZmVydXRpbHNfMS5yZXZlcnNlQnVmZmVyKSh0aGlzLmdldEhhc2goZmFsc2UpKS50b1N0cmluZyhcbiAgICAgICdoZXgnLFxuICAgICk7XG4gIH1cbiAgdG9CdWZmZXIoYnVmZmVyLCBpbml0aWFsT2Zmc2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuX190b0J1ZmZlcihidWZmZXIsIGluaXRpYWxPZmZzZXQsIHRydWUpO1xuICB9XG4gIHRvSGV4KCkge1xuICAgIHJldHVybiB0aGlzLnRvQnVmZmVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cbiAgc2V0SW5wdXRTY3JpcHQoaW5kZXgsIHNjcmlwdFNpZykge1xuICAgIHR5cGVmb3JjZSh0eXBlcy50dXBsZSh0eXBlcy5OdW1iZXIsIHR5cGVzLkJ1ZmZlciksIGFyZ3VtZW50cyk7XG4gICAgdGhpcy5pbnNbaW5kZXhdLnNjcmlwdCA9IHNjcmlwdFNpZztcbiAgfVxuICBzZXRXaXRuZXNzKGluZGV4LCB3aXRuZXNzKSB7XG4gICAgdHlwZWZvcmNlKHR5cGVzLnR1cGxlKHR5cGVzLk51bWJlciwgW3R5cGVzLkJ1ZmZlcl0pLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5zW2luZGV4XS53aXRuZXNzID0gd2l0bmVzcztcbiAgfVxuICBfX3RvQnVmZmVyKGJ1ZmZlciwgaW5pdGlhbE9mZnNldCwgX0FMTE9XX1dJVE5FU1MgPSBmYWxzZSkge1xuICAgIGlmICghYnVmZmVyKSBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUodGhpcy5ieXRlTGVuZ3RoKF9BTExPV19XSVRORVNTKSk7XG4gICAgY29uc3QgYnVmZmVyV3JpdGVyID0gbmV3IGJ1ZmZlcnV0aWxzXzEuQnVmZmVyV3JpdGVyKFxuICAgICAgYnVmZmVyLFxuICAgICAgaW5pdGlhbE9mZnNldCB8fCAwLFxuICAgICk7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlSW50MzIodGhpcy52ZXJzaW9uKTtcbiAgICBjb25zdCBoYXNXaXRuZXNzZXMgPSBfQUxMT1dfV0lUTkVTUyAmJiB0aGlzLmhhc1dpdG5lc3NlcygpO1xuICAgIGlmIChoYXNXaXRuZXNzZXMpIHtcbiAgICAgIGJ1ZmZlcldyaXRlci53cml0ZVVJbnQ4KFRyYW5zYWN0aW9uLkFEVkFOQ0VEX1RSQU5TQUNUSU9OX01BUktFUik7XG4gICAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50OChUcmFuc2FjdGlvbi5BRFZBTkNFRF9UUkFOU0FDVElPTl9GTEFHKTtcbiAgICB9XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KHRoaXMuaW5zLmxlbmd0aCk7XG4gICAgdGhpcy5pbnMuZm9yRWFjaCh0eEluID0+IHtcbiAgICAgIGJ1ZmZlcldyaXRlci53cml0ZVNsaWNlKHR4SW4uaGFzaCk7XG4gICAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHhJbi5pbmRleCk7XG4gICAgICBidWZmZXJXcml0ZXIud3JpdGVWYXJTbGljZSh0eEluLnNjcmlwdCk7XG4gICAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHhJbi5zZXF1ZW5jZSk7XG4gICAgfSk7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KHRoaXMub3V0cy5sZW5ndGgpO1xuICAgIHRoaXMub3V0cy5mb3JFYWNoKHR4T3V0ID0+IHtcbiAgICAgIGlmIChpc091dHB1dCh0eE91dCkpIHtcbiAgICAgICAgYnVmZmVyV3JpdGVyLndyaXRlVUludDY0KHR4T3V0LnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1ZmZlcldyaXRlci53cml0ZVNsaWNlKHR4T3V0LnZhbHVlQnVmZmVyKTtcbiAgICAgIH1cbiAgICAgIGJ1ZmZlcldyaXRlci53cml0ZVZhclNsaWNlKHR4T3V0LnNjcmlwdCk7XG4gICAgfSk7XG4gICAgaWYgKGhhc1dpdG5lc3Nlcykge1xuICAgICAgdGhpcy5pbnMuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICAgIGJ1ZmZlcldyaXRlci53cml0ZVZlY3RvcihpbnB1dC53aXRuZXNzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodGhpcy5sb2NrdGltZSk7XG4gICAgLy8gYXZvaWQgc2xpY2luZyB1bmxlc3MgbmVjZXNzYXJ5XG4gICAgaWYgKGluaXRpYWxPZmZzZXQgIT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBidWZmZXIuc2xpY2UoaW5pdGlhbE9mZnNldCwgYnVmZmVyV3JpdGVyLm9mZnNldCk7XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxufVxuZXhwb3J0cy5UcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uO1xuVHJhbnNhY3Rpb24uREVGQVVMVF9TRVFVRU5DRSA9IDB4ZmZmZmZmZmY7XG5UcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFQgPSAweDAwO1xuVHJhbnNhY3Rpb24uU0lHSEFTSF9BTEwgPSAweDAxO1xuVHJhbnNhY3Rpb24uU0lHSEFTSF9OT05FID0gMHgwMjtcblRyYW5zYWN0aW9uLlNJR0hBU0hfU0lOR0xFID0gMHgwMztcblRyYW5zYWN0aW9uLlNJR0hBU0hfQU5ZT05FQ0FOUEFZID0gMHg4MDtcblRyYW5zYWN0aW9uLlNJR0hBU0hfT1VUUFVUX01BU0sgPSAweDAzO1xuVHJhbnNhY3Rpb24uU0lHSEFTSF9JTlBVVF9NQVNLID0gMHg4MDtcblRyYW5zYWN0aW9uLkFEVkFOQ0VEX1RSQU5TQUNUSU9OX01BUktFUiA9IDB4MDA7XG5UcmFuc2FjdGlvbi5BRFZBTkNFRF9UUkFOU0FDVElPTl9GTEFHID0gMHgwMTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/transaction.js\n\n}")},"./node_modules/bitcoinjs-lib/src/types.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.oneOf =\n exports.Null =\n exports.BufferN =\n exports.Function =\n exports.UInt32 =\n exports.UInt8 =\n exports.tuple =\n exports.maybe =\n exports.Hex =\n exports.Buffer =\n exports.String =\n exports.Boolean =\n exports.Array =\n exports.Number =\n exports.Hash256bit =\n exports.Hash160bit =\n exports.Buffer256bit =\n exports.isTaptree =\n exports.isTapleaf =\n exports.TAPLEAF_VERSION_MASK =\n exports.Satoshi =\n exports.isPoint =\n exports.stacksEqual =\n exports.typeforce =\n void 0;\nconst buffer_1 = __webpack_require__(/*! buffer */ \"./node_modules/buffer/index.js\");\nexports.typeforce = __webpack_require__(/*! typeforce */ \"./node_modules/typeforce/index.js\");\nconst ZERO32 = buffer_1.Buffer.alloc(32, 0);\nconst EC_P = buffer_1.Buffer.from(\n 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f',\n 'hex',\n);\n/**\n * Checks if two arrays of Buffers are equal.\n * @param a - The first array of Buffers.\n * @param b - The second array of Buffers.\n * @returns True if the arrays are equal, false otherwise.\n */\nfunction stacksEqual(a, b) {\n if (a.length !== b.length) return false;\n return a.every((x, i) => {\n return x.equals(b[i]);\n });\n}\nexports.stacksEqual = stacksEqual;\n/**\n * Checks if the given value is a valid elliptic curve point.\n * @param p - The value to check.\n * @returns True if the value is a valid elliptic curve point, false otherwise.\n */\nfunction isPoint(p) {\n if (!buffer_1.Buffer.isBuffer(p)) return false;\n if (p.length < 33) return false;\n const t = p[0];\n const x = p.slice(1, 33);\n if (x.compare(ZERO32) === 0) return false;\n if (x.compare(EC_P) >= 0) return false;\n if ((t === 0x02 || t === 0x03) && p.length === 33) {\n return true;\n }\n const y = p.slice(33);\n if (y.compare(ZERO32) === 0) return false;\n if (y.compare(EC_P) >= 0) return false;\n if (t === 0x04 && p.length === 65) return true;\n return false;\n}\nexports.isPoint = isPoint;\nconst SATOSHI_MAX = 21 * 1e14;\nfunction Satoshi(value) {\n return exports.typeforce.UInt53(value) && value <= SATOSHI_MAX;\n}\nexports.Satoshi = Satoshi;\nexports.TAPLEAF_VERSION_MASK = 0xfe;\nfunction isTapleaf(o) {\n if (!o || !('output' in o)) return false;\n if (!buffer_1.Buffer.isBuffer(o.output)) return false;\n if (o.version !== undefined)\n return (o.version & exports.TAPLEAF_VERSION_MASK) === o.version;\n return true;\n}\nexports.isTapleaf = isTapleaf;\nfunction isTaptree(scriptTree) {\n if (!(0, exports.Array)(scriptTree)) return isTapleaf(scriptTree);\n if (scriptTree.length !== 2) return false;\n return scriptTree.every(t => isTaptree(t));\n}\nexports.isTaptree = isTaptree;\nexports.Buffer256bit = exports.typeforce.BufferN(32);\nexports.Hash160bit = exports.typeforce.BufferN(20);\nexports.Hash256bit = exports.typeforce.BufferN(32);\nexports.Number = exports.typeforce.Number;\nexports.Array = exports.typeforce.Array;\nexports.Boolean = exports.typeforce.Boolean;\nexports.String = exports.typeforce.String;\nexports.Buffer = exports.typeforce.Buffer;\nexports.Hex = exports.typeforce.Hex;\nexports.maybe = exports.typeforce.maybe;\nexports.tuple = exports.typeforce.tuple;\nexports.UInt8 = exports.typeforce.UInt8;\nexports.UInt32 = exports.typeforce.UInt32;\nexports.Function = exports.typeforce.Function;\nexports.BufferN = exports.typeforce.BufferN;\nexports.Null = exports.typeforce.Null;\nexports.oneOf = exports.typeforce.oneOf;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYml0Y29pbmpzLWxpYi9zcmMvdHlwZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsYUFBYTtBQUNiLEVBQUUsWUFBWTtBQUNkLEVBQUUsZUFBZTtBQUNqQixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLGNBQWM7QUFDaEIsRUFBRSxhQUFhO0FBQ2YsRUFBRSxhQUFhO0FBQ2YsRUFBRSxhQUFhO0FBQ2YsRUFBRSxXQUFXO0FBQ2IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsY0FBYztBQUNoQixFQUFFLGVBQWU7QUFDakIsRUFBRSxhQUFhO0FBQ2YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsNEJBQTRCO0FBQzlCLEVBQUUsZUFBZTtBQUNqQixFQUFFLGVBQWU7QUFDakIsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxpQkFBaUI7QUFDbkI7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyw4Q0FBUTtBQUNqQyw2RkFBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZiw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixvQkFBb0I7QUFDcEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixjQUFjO0FBQ2QsYUFBYTtBQUNiLGVBQWU7QUFDZixjQUFjO0FBQ2QsY0FBYztBQUNkLFdBQVc7QUFDWCxhQUFhO0FBQ2IsYUFBYTtBQUNiLGFBQWE7QUFDYixjQUFjO0FBQ2QsZ0JBQWdCO0FBQ2hCLGVBQWU7QUFDZixZQUFZO0FBQ1osYUFBYSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JpdGNvaW5qcy1saWIvc3JjL3R5cGVzLmpzP2MyNjIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMub25lT2YgPVxuICBleHBvcnRzLk51bGwgPVxuICBleHBvcnRzLkJ1ZmZlck4gPVxuICBleHBvcnRzLkZ1bmN0aW9uID1cbiAgZXhwb3J0cy5VSW50MzIgPVxuICBleHBvcnRzLlVJbnQ4ID1cbiAgZXhwb3J0cy50dXBsZSA9XG4gIGV4cG9ydHMubWF5YmUgPVxuICBleHBvcnRzLkhleCA9XG4gIGV4cG9ydHMuQnVmZmVyID1cbiAgZXhwb3J0cy5TdHJpbmcgPVxuICBleHBvcnRzLkJvb2xlYW4gPVxuICBleHBvcnRzLkFycmF5ID1cbiAgZXhwb3J0cy5OdW1iZXIgPVxuICBleHBvcnRzLkhhc2gyNTZiaXQgPVxuICBleHBvcnRzLkhhc2gxNjBiaXQgPVxuICBleHBvcnRzLkJ1ZmZlcjI1NmJpdCA9XG4gIGV4cG9ydHMuaXNUYXB0cmVlID1cbiAgZXhwb3J0cy5pc1RhcGxlYWYgPVxuICBleHBvcnRzLlRBUExFQUZfVkVSU0lPTl9NQVNLID1cbiAgZXhwb3J0cy5TYXRvc2hpID1cbiAgZXhwb3J0cy5pc1BvaW50ID1cbiAgZXhwb3J0cy5zdGFja3NFcXVhbCA9XG4gIGV4cG9ydHMudHlwZWZvcmNlID1cbiAgICB2b2lkIDA7XG5jb25zdCBidWZmZXJfMSA9IHJlcXVpcmUoJ2J1ZmZlcicpO1xuZXhwb3J0cy50eXBlZm9yY2UgPSByZXF1aXJlKCd0eXBlZm9yY2UnKTtcbmNvbnN0IFpFUk8zMiA9IGJ1ZmZlcl8xLkJ1ZmZlci5hbGxvYygzMiwgMCk7XG5jb25zdCBFQ19QID0gYnVmZmVyXzEuQnVmZmVyLmZyb20oXG4gICdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWZmZmZmYzJmJyxcbiAgJ2hleCcsXG4pO1xuLyoqXG4gKiBDaGVja3MgaWYgdHdvIGFycmF5cyBvZiBCdWZmZXJzIGFyZSBlcXVhbC5cbiAqIEBwYXJhbSBhIC0gVGhlIGZpcnN0IGFycmF5IG9mIEJ1ZmZlcnMuXG4gKiBAcGFyYW0gYiAtIFRoZSBzZWNvbmQgYXJyYXkgb2YgQnVmZmVycy5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGFycmF5cyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tzRXF1YWwoYSwgYikge1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBhLmV2ZXJ5KCh4LCBpKSA9PiB7XG4gICAgcmV0dXJuIHguZXF1YWxzKGJbaV0pO1xuICB9KTtcbn1cbmV4cG9ydHMuc3RhY2tzRXF1YWwgPSBzdGFja3NFcXVhbDtcbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIHZhbGlkIGVsbGlwdGljIGN1cnZlIHBvaW50LlxuICogQHBhcmFtIHAgLSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHZhbGlkIGVsbGlwdGljIGN1cnZlIHBvaW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGlzUG9pbnQocCkge1xuICBpZiAoIWJ1ZmZlcl8xLkJ1ZmZlci5pc0J1ZmZlcihwKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAocC5sZW5ndGggPCAzMykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB0ID0gcFswXTtcbiAgY29uc3QgeCA9IHAuc2xpY2UoMSwgMzMpO1xuICBpZiAoeC5jb21wYXJlKFpFUk8zMikgPT09IDApIHJldHVybiBmYWxzZTtcbiAgaWYgKHguY29tcGFyZShFQ19QKSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gIGlmICgodCA9PT0gMHgwMiB8fCB0ID09PSAweDAzKSAmJiBwLmxlbmd0aCA9PT0gMzMpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCB5ID0gcC5zbGljZSgzMyk7XG4gIGlmICh5LmNvbXBhcmUoWkVSTzMyKSA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoeS5jb21wYXJlKEVDX1ApID49IDApIHJldHVybiBmYWxzZTtcbiAgaWYgKHQgPT09IDB4MDQgJiYgcC5sZW5ndGggPT09IDY1KSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5pc1BvaW50ID0gaXNQb2ludDtcbmNvbnN0IFNBVE9TSElfTUFYID0gMjEgKiAxZTE0O1xuZnVuY3Rpb24gU2F0b3NoaSh2YWx1ZSkge1xuICByZXR1cm4gZXhwb3J0cy50eXBlZm9yY2UuVUludDUzKHZhbHVlKSAmJiB2YWx1ZSA8PSBTQVRPU0hJX01BWDtcbn1cbmV4cG9ydHMuU2F0b3NoaSA9IFNhdG9zaGk7XG5leHBvcnRzLlRBUExFQUZfVkVSU0lPTl9NQVNLID0gMHhmZTtcbmZ1bmN0aW9uIGlzVGFwbGVhZihvKSB7XG4gIGlmICghbyB8fCAhKCdvdXRwdXQnIGluIG8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghYnVmZmVyXzEuQnVmZmVyLmlzQnVmZmVyKG8ub3V0cHV0KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoby52ZXJzaW9uICE9PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIChvLnZlcnNpb24gJiBleHBvcnRzLlRBUExFQUZfVkVSU0lPTl9NQVNLKSA9PT0gby52ZXJzaW9uO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydHMuaXNUYXBsZWFmID0gaXNUYXBsZWFmO1xuZnVuY3Rpb24gaXNUYXB0cmVlKHNjcmlwdFRyZWUpIHtcbiAgaWYgKCEoMCwgZXhwb3J0cy5BcnJheSkoc2NyaXB0VHJlZSkpIHJldHVybiBpc1RhcGxlYWYoc2NyaXB0VHJlZSk7XG4gIGlmIChzY3JpcHRUcmVlLmxlbmd0aCAhPT0gMikgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gc2NyaXB0VHJlZS5ldmVyeSh0ID0+IGlzVGFwdHJlZSh0KSk7XG59XG5leHBvcnRzLmlzVGFwdHJlZSA9IGlzVGFwdHJlZTtcbmV4cG9ydHMuQnVmZmVyMjU2Yml0ID0gZXhwb3J0cy50eXBlZm9yY2UuQnVmZmVyTigzMik7XG5leHBvcnRzLkhhc2gxNjBiaXQgPSBleHBvcnRzLnR5cGVmb3JjZS5CdWZmZXJOKDIwKTtcbmV4cG9ydHMuSGFzaDI1NmJpdCA9IGV4cG9ydHMudHlwZWZvcmNlLkJ1ZmZlck4oMzIpO1xuZXhwb3J0cy5OdW1iZXIgPSBleHBvcnRzLnR5cGVmb3JjZS5OdW1iZXI7XG5leHBvcnRzLkFycmF5ID0gZXhwb3J0cy50eXBlZm9yY2UuQXJyYXk7XG5leHBvcnRzLkJvb2xlYW4gPSBleHBvcnRzLnR5cGVmb3JjZS5Cb29sZWFuO1xuZXhwb3J0cy5TdHJpbmcgPSBleHBvcnRzLnR5cGVmb3JjZS5TdHJpbmc7XG5leHBvcnRzLkJ1ZmZlciA9IGV4cG9ydHMudHlwZWZvcmNlLkJ1ZmZlcjtcbmV4cG9ydHMuSGV4ID0gZXhwb3J0cy50eXBlZm9yY2UuSGV4O1xuZXhwb3J0cy5tYXliZSA9IGV4cG9ydHMudHlwZWZvcmNlLm1heWJlO1xuZXhwb3J0cy50dXBsZSA9IGV4cG9ydHMudHlwZWZvcmNlLnR1cGxlO1xuZXhwb3J0cy5VSW50OCA9IGV4cG9ydHMudHlwZWZvcmNlLlVJbnQ4O1xuZXhwb3J0cy5VSW50MzIgPSBleHBvcnRzLnR5cGVmb3JjZS5VSW50MzI7XG5leHBvcnRzLkZ1bmN0aW9uID0gZXhwb3J0cy50eXBlZm9yY2UuRnVuY3Rpb247XG5leHBvcnRzLkJ1ZmZlck4gPSBleHBvcnRzLnR5cGVmb3JjZS5CdWZmZXJOO1xuZXhwb3J0cy5OdWxsID0gZXhwb3J0cy50eXBlZm9yY2UuTnVsbDtcbmV4cG9ydHMub25lT2YgPSBleHBvcnRzLnR5cGVmb3JjZS5vbmVPZjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bitcoinjs-lib/src/types.js\n\n}")},"./node_modules/bn.js/lib/bn.js"(module,__unused_webpack_exports,__webpack_require__){eval("{/* module decorator */ module = __webpack_require__.nmd(module);\n(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = (__webpack_require__(/*! buffer */ \"?8131\").Buffer);\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n i++;\n }\n\n // Clear words above the requested width so the result stays below 2 ** width\n for (; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n if (num === 0) {\n this.length = 1;\n this._normSign();\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.mod.abs();\n\n var half = num.abs().iushrn(1);\n var r2 = num.words[0] & 1;\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up, away from zero\n var up = new BN(1);\n up.negative = this.negative ^ num.negative;\n return dm.div.iadd(up);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})( false || module, this);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsaUJBQWlCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsaUJBQWlCO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtCQUErQixpQkFBaUI7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELFdBQVc7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxXQUFXO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsT0FBTztBQUMzQjtBQUNBOztBQUVBO0FBQ0E7O0FB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QUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixjQUFjO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MsUUFBUTtBQUMxQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxrQ0FBa0MsUUFBUTtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhCQUE4QixtQ0FBbUM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCLG1DQUFtQztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDhCQUE4QixtQ0FBbUM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEIsbUNBQW1DO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QiwwQkFBMEI7QUFDbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLGdDQUFnQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDLFFBQVE7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsWUFBWTtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLG9CQUFvQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixRQUFRO0FBQ3JDO0FBQ0EsOEJBQThCLFFBQVE7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRSxNQUE2QiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JuLmpzL2xpYi9ibi5qcz8zOTlmIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBVdGlsc1xuICBmdW5jdGlvbiBhc3NlcnQgKHZhbCwgbXNnKSB7XG4gICAgaWYgKCF2YWwpIHRocm93IG5ldyBFcnJvcihtc2cgfHwgJ0Fzc2VydGlvbiBmYWlsZWQnKTtcbiAgfVxuXG4gIC8vIENvdWxkIHVzZSBgaW5oZXJpdHNgIG1vZHVsZSwgYnV0IGRvbid0IHdhbnQgdG8gbW92ZSBmcm9tIHNpbmdsZSBmaWxlXG4gIC8vIGFyY2hpdGVjdHVyZSB5ZXQuXG4gIGZ1bmN0aW9uIGluaGVyaXRzIChjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvcjtcbiAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlO1xuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKCk7XG4gICAgY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yO1xuICB9XG5cbiAgLy8gQk5cblxuICBmdW5jdGlvbiBCTiAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAoQk4uaXNCTihudW1iZXIpKSB7XG4gICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cblxuICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgIHRoaXMud29yZHMgPSBudWxsO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcblxuICAgIC8vIFJlZHVjdGlvbiBjb250ZXh0XG4gICAgdGhpcy5yZWQgPSBudWxsO1xuXG4gICAgaWYgKG51bWJlciAhPT0gbnVsbCkge1xuICAgICAgaWYgKGJhc2UgPT09ICdsZScgfHwgYmFzZSA9PT0gJ2JlJykge1xuICAgICAgICBlbmRpYW4gPSBiYXNlO1xuICAgICAgICBiYXNlID0gMTA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2luaXQobnVtYmVyIHx8IDAsIGJhc2UgfHwgMTAsIGVuZGlhbiB8fCAnYmUnKTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBCTjtcbiAgfSBlbHNlIHtcbiAgICBleHBvcnRzLkJOID0gQk47XG4gIH1cblxuICBCTi5CTiA9IEJOO1xuICBCTi53b3JkU2l6ZSA9IDI2O1xuXG4gIHZhciBCdWZmZXI7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuQnVmZmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgQnVmZmVyID0gd2luZG93LkJ1ZmZlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyJykuQnVmZmVyO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICB9XG5cbiAgQk4uaXNCTiA9IGZ1bmN0aW9uIGlzQk4gKG51bSkge1xuICAgIGlmIChudW0gaW5zdGFuY2VvZiBCTikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bSAhPT0gbnVsbCAmJiB0eXBlb2YgbnVtID09PSAnb2JqZWN0JyAmJlxuICAgICAgbnVtLmNvbnN0cnVjdG9yLndvcmRTaXplID09PSBCTi53b3JkU2l6ZSAmJiBBcnJheS5pc0FycmF5KG51bS53b3Jkcyk7XG4gIH07XG5cbiAgQk4ubWF4ID0gZnVuY3Rpb24gbWF4IChsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0LmNtcChyaWdodCkgPiAwKSByZXR1cm4gbGVmdDtcbiAgICByZXR1cm4gcmlnaHQ7XG4gIH07XG5cbiAgQk4ubWluID0gZnVuY3Rpb24gbWluIChsZWZ0LCByaWdodCkge1xuICAgIGlmIChsZWZ0LmNtcChyaWdodCkgPCAwKSByZXR1cm4gbGVmdDtcbiAgICByZXR1cm4gcmlnaHQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdCAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbml0TnVtYmVyKG51bWJlciwgYmFzZSwgZW5kaWFuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG51bWJlciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbml0QXJyYXkobnVtYmVyLCBiYXNlLCBlbmRpYW4pO1xuICAgIH1cblxuICAgIGlmIChiYXNlID09PSAnaGV4Jykge1xuICAgICAgYmFzZSA9IDE2O1xuICAgIH1cbiAgICBhc3NlcnQoYmFzZSA9PT0gKGJhc2UgfCAwKSAmJiBiYXNlID49IDIgJiYgYmFzZSA8PSAzNik7XG5cbiAgICBudW1iZXIgPSBudW1iZXIudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIGlmIChudW1iZXJbMF0gPT09ICctJykge1xuICAgICAgc3RhcnQrKztcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA8IG51bWJlci5sZW5ndGgpIHtcbiAgICAgIGlmIChiYXNlID09PSAxNikge1xuICAgICAgICB0aGlzLl9wYXJzZUhleChudW1iZXIsIHN0YXJ0LCBlbmRpYW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcGFyc2VCYXNlKG51bWJlciwgYmFzZSwgc3RhcnQpO1xuICAgICAgICBpZiAoZW5kaWFuID09PSAnbGUnKSB7XG4gICAgICAgICAgdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLCBiYXNlLCBlbmRpYW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faW5pdE51bWJlciA9IGZ1bmN0aW9uIF9pbml0TnVtYmVyIChudW1iZXIsIGJhc2UsIGVuZGlhbikge1xuICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICAgIG51bWJlciA9IC1udW1iZXI7XG4gICAgfVxuICAgIGlmIChudW1iZXIgPCAweDQwMDAwMDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbbnVtYmVyICYgMHgzZmZmZmZmXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9IGVsc2UgaWYgKG51bWJlciA8IDB4MTAwMDAwMDAwMDAwMDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbXG4gICAgICAgIG51bWJlciAmIDB4M2ZmZmZmZixcbiAgICAgICAgKG51bWJlciAvIDB4NDAwMDAwMCkgJiAweDNmZmZmZmZcbiAgICAgIF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChudW1iZXIgPCAweDIwMDAwMDAwMDAwMDAwKTsgLy8gMiBeIDUzICh1bnNhZmUpXG4gICAgICB0aGlzLndvcmRzID0gW1xuICAgICAgICBudW1iZXIgJiAweDNmZmZmZmYsXG4gICAgICAgIChudW1iZXIgLyAweDQwMDAwMDApICYgMHgzZmZmZmZmLFxuICAgICAgICAxXG4gICAgICBdO1xuICAgICAgdGhpcy5sZW5ndGggPSAzO1xuICAgIH1cblxuICAgIGlmIChlbmRpYW4gIT09ICdsZScpIHJldHVybjtcblxuICAgIC8vIFJldmVyc2UgdGhlIGJ5dGVzXG4gICAgdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLCBiYXNlLCBlbmRpYW4pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5faW5pdEFycmF5ID0gZnVuY3Rpb24gX2luaXRBcnJheSAobnVtYmVyLCBiYXNlLCBlbmRpYW4pIHtcbiAgICAvLyBQZXJoYXBzIGEgVWludDhBcnJheVxuICAgIGFzc2VydCh0eXBlb2YgbnVtYmVyLmxlbmd0aCA9PT0gJ251bWJlcicpO1xuICAgIGlmIChudW1iZXIubGVuZ3RoIDw9IDApIHtcbiAgICAgIHRoaXMud29yZHMgPSBbMF07XG4gICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguY2VpbChudW1iZXIubGVuZ3RoIC8gMyk7XG4gICAgdGhpcy53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICB9XG5cbiAgICB2YXIgaiwgdztcbiAgICB2YXIgb2ZmID0gMDtcbiAgICBpZiAoZW5kaWFuID09PSAnYmUnKSB7XG4gICAgICBmb3IgKGkgPSBudW1iZXIubGVuZ3RoIC0gMSwgaiA9IDA7IGkgPj0gMDsgaSAtPSAzKSB7XG4gICAgICAgIHcgPSBudW1iZXJbaV0gfCAobnVtYmVyW2kgLSAxXSA8PCA4KSB8IChudW1iZXJbaSAtIDJdIDw8IDE2KTtcbiAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSAodyA8PCBvZmYpICYgMHgzZmZmZmZmO1xuICAgICAgICB0aGlzLndvcmRzW2ogKyAxXSA9ICh3ID4+PiAoMjYgLSBvZmYpKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgb2ZmICs9IDI0O1xuICAgICAgICBpZiAob2ZmID49IDI2KSB7XG4gICAgICAgICAgb2ZmIC09IDI2O1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW5kaWFuID09PSAnbGUnKSB7XG4gICAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG51bWJlci5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB3ID0gbnVtYmVyW2ldIHwgKG51bWJlcltpICsgMV0gPDwgOCkgfCAobnVtYmVyW2kgKyAyXSA8PCAxNik7XG4gICAgICAgIHRoaXMud29yZHNbal0gfD0gKHcgPDwgb2ZmKSAmIDB4M2ZmZmZmZjtcbiAgICAgICAgdGhpcy53b3Jkc1tqICsgMV0gPSAodyA+Pj4gKDI2IC0gb2ZmKSkgJiAweDNmZmZmZmY7XG4gICAgICAgIG9mZiArPSAyNDtcbiAgICAgICAgaWYgKG9mZiA+PSAyNikge1xuICAgICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcGFyc2VIZXg0Qml0cyAoc3RyaW5nLCBpbmRleCkge1xuICAgIHZhciBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgIC8vICcwJyAtICc5J1xuICAgIGlmIChjID49IDQ4ICYmIGMgPD0gNTcpIHtcbiAgICAgIHJldHVybiBjIC0gNDg7XG4gICAgLy8gJ0EnIC0gJ0YnXG4gICAgfSBlbHNlIGlmIChjID49IDY1ICYmIGMgPD0gNzApIHtcbiAgICAgIHJldHVybiBjIC0gNTU7XG4gICAgLy8gJ2EnIC0gJ2YnXG4gICAgfSBlbHNlIGlmIChjID49IDk3ICYmIGMgPD0gMTAyKSB7XG4gICAgICByZXR1cm4gYyAtIDg3O1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UsICdJbnZhbGlkIGNoYXJhY3RlciBpbiAnICsgc3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUhleEJ5dGUgKHN0cmluZywgbG93ZXJCb3VuZCwgaW5kZXgpIHtcbiAgICB2YXIgciA9IHBhcnNlSGV4NEJpdHMoc3RyaW5nLCBpbmRleCk7XG4gICAgaWYgKGluZGV4IC0gMSA+PSBsb3dlckJvdW5kKSB7XG4gICAgICByIHw9IHBhcnNlSGV4NEJpdHMoc3RyaW5nLCBpbmRleCAtIDEpIDw8IDQ7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl9wYXJzZUhleCA9IGZ1bmN0aW9uIF9wYXJzZUhleCAobnVtYmVyLCBzdGFydCwgZW5kaWFuKSB7XG4gICAgLy8gQ3JlYXRlIHBvc3NpYmx5IGJpZ2dlciBhcnJheSB0byBlbnN1cmUgdGhhdCBpdCBmaXRzIHRoZSBudW1iZXJcbiAgICB0aGlzLmxlbmd0aCA9IE1hdGguY2VpbCgobnVtYmVyLmxlbmd0aCAtIHN0YXJ0KSAvIDYpO1xuICAgIHRoaXMud29yZHMgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IDA7XG4gICAgfVxuXG4gICAgLy8gMjQtYml0cyBjaHVua3NcbiAgICB2YXIgb2ZmID0gMDtcbiAgICB2YXIgaiA9IDA7XG5cbiAgICB2YXIgdztcbiAgICBpZiAoZW5kaWFuID09PSAnYmUnKSB7XG4gICAgICBmb3IgKGkgPSBudW1iZXIubGVuZ3RoIC0gMTsgaSA+PSBzdGFydDsgaSAtPSAyKSB7XG4gICAgICAgIHcgPSBwYXJzZUhleEJ5dGUobnVtYmVyLCBzdGFydCwgaSkgPDwgb2ZmO1xuICAgICAgICB0aGlzLndvcmRzW2pdIHw9IHcgJiAweDNmZmZmZmY7XG4gICAgICAgIGlmIChvZmYgPj0gMTgpIHtcbiAgICAgICAgICBvZmYgLT0gMTg7XG4gICAgICAgICAgaiArPSAxO1xuICAgICAgICAgIHRoaXMud29yZHNbal0gfD0gdyA+Pj4gMjY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2ZmICs9IDg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhcnNlTGVuZ3RoID0gbnVtYmVyLmxlbmd0aCAtIHN0YXJ0O1xuICAgICAgZm9yIChpID0gcGFyc2VMZW5ndGggJSAyID09PSAwID8gc3RhcnQgKyAxIDogc3RhcnQ7IGkgPCBudW1iZXIubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdyA9IHBhcnNlSGV4Qnl0ZShudW1iZXIsIHN0YXJ0LCBpKSA8PCBvZmY7XG4gICAgICAgIHRoaXMud29yZHNbal0gfD0gdyAmIDB4M2ZmZmZmZjtcbiAgICAgICAgaWYgKG9mZiA+PSAxOCkge1xuICAgICAgICAgIG9mZiAtPSAxODtcbiAgICAgICAgICBqICs9IDE7XG4gICAgICAgICAgdGhpcy53b3Jkc1tqXSB8PSB3ID4+PiAyNjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvZmYgKz0gODtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcGFyc2VCYXNlIChzdHIsIHN0YXJ0LCBlbmQsIG11bCkge1xuICAgIHZhciByID0gMDtcbiAgICB2YXIgYiA9IDA7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKHN0ci5sZW5ndGgsIGVuZCk7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSkgLSA0ODtcblxuICAgICAgciAqPSBtdWw7XG5cbiAgICAgIC8vICdhJ1xuICAgICAgaWYgKGMgPj0gNDkpIHtcbiAgICAgICAgYiA9IGMgLSA0OSArIDB4YTtcblxuICAgICAgLy8gJ0EnXG4gICAgICB9IGVsc2UgaWYgKGMgPj0gMTcpIHtcbiAgICAgICAgYiA9IGMgLSAxNyArIDB4YTtcblxuICAgICAgLy8gJzAnIC0gJzknXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiID0gYztcbiAgICAgIH1cbiAgICAgIGFzc2VydChjID49IDAgJiYgYiA8IG11bCwgJ0ludmFsaWQgY2hhcmFjdGVyJyk7XG4gICAgICByICs9IGI7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl9wYXJzZUJhc2UgPSBmdW5jdGlvbiBfcGFyc2VCYXNlIChudW1iZXIsIGJhc2UsIHN0YXJ0KSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBhcyB6ZXJvXG4gICAgdGhpcy53b3JkcyA9IFswXTtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG5cbiAgICAvLyBGaW5kIGxlbmd0aCBvZiBsaW1iIGluIGJhc2VcbiAgICBmb3IgKHZhciBsaW1iTGVuID0gMCwgbGltYlBvdyA9IDE7IGxpbWJQb3cgPD0gMHgzZmZmZmZmOyBsaW1iUG93ICo9IGJhc2UpIHtcbiAgICAgIGxpbWJMZW4rKztcbiAgICB9XG4gICAgbGltYkxlbi0tO1xuICAgIGxpbWJQb3cgPSAobGltYlBvdyAvIGJhc2UpIHwgMDtcblxuICAgIHZhciB0b3RhbCA9IG51bWJlci5sZW5ndGggLSBzdGFydDtcbiAgICB2YXIgbW9kID0gdG90YWwgJSBsaW1iTGVuO1xuICAgIHZhciBlbmQgPSBNYXRoLm1pbih0b3RhbCwgdG90YWwgLSBtb2QpICsgc3RhcnQ7XG5cbiAgICB2YXIgd29yZCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGxpbWJMZW4pIHtcbiAgICAgIHdvcmQgPSBwYXJzZUJhc2UobnVtYmVyLCBpLCBpICsgbGltYkxlbiwgYmFzZSk7XG5cbiAgICAgIHRoaXMuaW11bG4obGltYlBvdyk7XG4gICAgICBpZiAodGhpcy53b3Jkc1swXSArIHdvcmQgPCAweDQwMDAwMDApIHtcbiAgICAgICAgdGhpcy53b3Jkc1swXSArPSB3b3JkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faWFkZG4od29yZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZCAhPT0gMCkge1xuICAgICAgdmFyIHBvdyA9IDE7XG4gICAgICB3b3JkID0gcGFyc2VCYXNlKG51bWJlciwgaSwgbnVtYmVyLmxlbmd0aCwgYmFzZSk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtb2Q7IGkrKykge1xuICAgICAgICBwb3cgKj0gYmFzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbXVsbihwb3cpO1xuICAgICAgaWYgKHRoaXMud29yZHNbMF0gKyB3b3JkIDwgMHg0MDAwMDAwKSB7XG4gICAgICAgIHRoaXMud29yZHNbMF0gKz0gd29yZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2lhZGRuKHdvcmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5IChkZXN0KSB7XG4gICAgZGVzdC53b3JkcyA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZXN0LndvcmRzW2ldID0gdGhpcy53b3Jkc1tpXTtcbiAgICB9XG4gICAgZGVzdC5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICBkZXN0Lm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZTtcbiAgICBkZXN0LnJlZCA9IHRoaXMucmVkO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1vdmUgKGRlc3QsIHNyYykge1xuICAgIGRlc3Qud29yZHMgPSBzcmMud29yZHM7XG4gICAgZGVzdC5sZW5ndGggPSBzcmMubGVuZ3RoO1xuICAgIGRlc3QubmVnYXRpdmUgPSBzcmMubmVnYXRpdmU7XG4gICAgZGVzdC5yZWQgPSBzcmMucmVkO1xuICB9XG5cbiAgQk4ucHJvdG90eXBlLl9tb3ZlID0gZnVuY3Rpb24gX21vdmUgKGRlc3QpIHtcbiAgICBtb3ZlKGRlc3QsIHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lICgpIHtcbiAgICB2YXIgciA9IG5ldyBCTihudWxsKTtcbiAgICB0aGlzLmNvcHkocik7XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9leHBhbmQgPSBmdW5jdGlvbiBfZXhwYW5kIChzaXplKSB7XG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXSA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIFJlbW92ZSBsZWFkaW5nIGAwYCBmcm9tIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuX3N0cmlwID0gZnVuY3Rpb24gc3RyaXAgKCkge1xuICAgIHdoaWxlICh0aGlzLmxlbmd0aCA+IDEgJiYgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCAtIDFdID09PSAwKSB7XG4gICAgICB0aGlzLmxlbmd0aC0tO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbm9ybVNpZ24oKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuX25vcm1TaWduID0gZnVuY3Rpb24gX25vcm1TaWduICgpIHtcbiAgICAvLyAtMCA9IDBcbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDEgJiYgdGhpcy53b3Jkc1swXSA9PT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIENoZWNrIFN5bWJvbC5mb3IgYmVjYXVzZSBub3QgZXZlcnl3aGVyZSB3aGVyZSBTeW1ib2wgZGVmaW5lZFxuICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3ltYm9sI0Jyb3dzZXJfY29tcGF0aWJpbGl0eVxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgQk4ucHJvdG90eXBlW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gaW5zcGVjdDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBCTi5wcm90b3R5cGUuaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIEJOLnByb3RvdHlwZS5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICAgIHJldHVybiAodGhpcy5yZWQgPyAnPEJOLVI6ICcgOiAnPEJOOiAnKSArIHRoaXMudG9TdHJpbmcoMTYpICsgJz4nO1xuICB9XG5cbiAgLypcblxuICB2YXIgemVyb3MgPSBbXTtcbiAgdmFyIGdyb3VwU2l6ZXMgPSBbXTtcbiAgdmFyIGdyb3VwQmFzZXMgPSBbXTtcblxuICB2YXIgcyA9ICcnO1xuICB2YXIgaSA9IC0xO1xuICB3aGlsZSAoKytpIDwgQk4ud29yZFNpemUpIHtcbiAgICB6ZXJvc1tpXSA9IHM7XG4gICAgcyArPSAnMCc7XG4gIH1cbiAgZ3JvdXBTaXplc1swXSA9IDA7XG4gIGdyb3VwU2l6ZXNbMV0gPSAwO1xuICBncm91cEJhc2VzWzBdID0gMDtcbiAgZ3JvdXBCYXNlc1sxXSA9IDA7XG4gIHZhciBiYXNlID0gMiAtIDE7XG4gIHdoaWxlICgrK2Jhc2UgPCAzNiArIDEpIHtcbiAgICB2YXIgZ3JvdXBTaXplID0gMDtcbiAgICB2YXIgZ3JvdXBCYXNlID0gMTtcbiAgICB3aGlsZSAoZ3JvdXBCYXNlIDwgKDEgPDwgQk4ud29yZFNpemUpIC8gYmFzZSkge1xuICAgICAgZ3JvdXBCYXNlICo9IGJhc2U7XG4gICAgICBncm91cFNpemUgKz0gMTtcbiAgICB9XG4gICAgZ3JvdXBTaXplc1tiYXNlXSA9IGdyb3VwU2l6ZTtcbiAgICBncm91cEJhc2VzW2Jhc2VdID0gZ3JvdXBCYXNlO1xuICB9XG5cbiAgKi9cblxuICB2YXIgemVyb3MgPSBbXG4gICAgJycsXG4gICAgJzAnLFxuICAgICcwMCcsXG4gICAgJzAwMCcsXG4gICAgJzAwMDAnLFxuICAgICcwMDAwMCcsXG4gICAgJzAwMDAwMCcsXG4gICAgJzAwMDAwMDAnLFxuICAgICcwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnXG4gIF07XG5cbiAgdmFyIGdyb3VwU2l6ZXMgPSBbXG4gICAgMCwgMCxcbiAgICAyNSwgMTYsIDEyLCAxMSwgMTAsIDksIDgsXG4gICAgOCwgNywgNywgNywgNywgNiwgNixcbiAgICA2LCA2LCA2LCA2LCA2LCA1LCA1LFxuICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsXG4gICAgNSwgNSwgNSwgNSwgNSwgNSwgNVxuICBdO1xuXG4gIHZhciBncm91cEJhc2VzID0gW1xuICAgIDAsIDAsXG4gICAgMzM1NTQ0MzIsIDQzMDQ2NzIxLCAxNjc3NzIxNiwgNDg4MjgxMjUsIDYwNDY2MTc2LCA0MDM1MzYwNywgMTY3NzcyMTYsXG4gICAgNDMwNDY3MjEsIDEwMDAwMDAwLCAxOTQ4NzE3MSwgMzU4MzE4MDgsIDYyNzQ4NTE3LCA3NTI5NTM2LCAxMTM5MDYyNSxcbiAgICAxNjc3NzIxNiwgMjQxMzc1NjksIDM0MDEyMjI0LCA0NzA0NTg4MSwgNjQwMDAwMDAsIDQwODQxMDEsIDUxNTM2MzIsXG4gICAgNjQzNjM0MywgNzk2MjYyNCwgOTc2NTYyNSwgMTE4ODEzNzYsIDE0MzQ4OTA3LCAxNzIxMDM2OCwgMjA1MTExNDksXG4gICAgMjQzMDAwMDAsIDI4NjI5MTUxLCAzMzU1NDQzMiwgMzkxMzUzOTMsIDQ1NDM1NDI0LCA1MjUyMTg3NSwgNjA0NjYxNzZcbiAgXTtcblxuICBCTi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoYmFzZSwgcGFkZGluZykge1xuICAgIGJhc2UgPSBiYXNlIHx8IDEwO1xuICAgIHBhZGRpbmcgPSBwYWRkaW5nIHwgMCB8fCAxO1xuXG4gICAgdmFyIG91dDtcbiAgICBpZiAoYmFzZSA9PT0gMTYgfHwgYmFzZSA9PT0gJ2hleCcpIHtcbiAgICAgIG91dCA9ICcnO1xuICAgICAgdmFyIG9mZiA9IDA7XG4gICAgICB2YXIgY2FycnkgPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB3ID0gdGhpcy53b3Jkc1tpXTtcbiAgICAgICAgdmFyIHdvcmQgPSAoKCh3IDw8IG9mZikgfCBjYXJyeSkgJiAweGZmZmZmZikudG9TdHJpbmcoMTYpO1xuICAgICAgICBjYXJyeSA9ICh3ID4+PiAoMjQgLSBvZmYpKSAmIDB4ZmZmZmZmO1xuICAgICAgICBvZmYgKz0gMjtcbiAgICAgICAgaWYgKG9mZiA+PSAyNikge1xuICAgICAgICAgIG9mZiAtPSAyNjtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhcnJ5ICE9PSAwIHx8IGkgIT09IHRoaXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG91dCA9IHplcm9zWzYgLSB3b3JkLmxlbmd0aF0gKyB3b3JkICsgb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IHdvcmQgKyBvdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgICBvdXQgPSBjYXJyeS50b1N0cmluZygxNikgKyBvdXQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAob3V0Lmxlbmd0aCAlIHBhZGRpbmcgIT09IDApIHtcbiAgICAgICAgb3V0ID0gJzAnICsgb3V0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgb3V0ID0gJy0nICsgb3V0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBpZiAoYmFzZSA9PT0gKGJhc2UgfCAwKSAmJiBiYXNlID49IDIgJiYgYmFzZSA8PSAzNikge1xuICAgICAgLy8gdmFyIGdyb3VwU2l6ZSA9IE1hdGguZmxvb3IoQk4ud29yZFNpemUgKiBNYXRoLkxOMiAvIE1hdGgubG9nKGJhc2UpKTtcbiAgICAgIHZhciBncm91cFNpemUgPSBncm91cFNpemVzW2Jhc2VdO1xuICAgICAgLy8gdmFyIGdyb3VwQmFzZSA9IE1hdGgucG93KGJhc2UsIGdyb3VwU2l6ZSk7XG4gICAgICB2YXIgZ3JvdXBCYXNlID0gZ3JvdXBCYXNlc1tiYXNlXTtcbiAgICAgIG91dCA9ICcnO1xuICAgICAgdmFyIGMgPSB0aGlzLmNsb25lKCk7XG4gICAgICBjLm5lZ2F0aXZlID0gMDtcbiAgICAgIHdoaWxlICghYy5pc1plcm8oKSkge1xuICAgICAgICB2YXIgciA9IGMubW9kcm4oZ3JvdXBCYXNlKS50b1N0cmluZyhiYXNlKTtcbiAgICAgICAgYyA9IGMuaWRpdm4oZ3JvdXBCYXNlKTtcblxuICAgICAgICBpZiAoIWMuaXNaZXJvKCkpIHtcbiAgICAgICAgICBvdXQgPSB6ZXJvc1tncm91cFNpemUgLSByLmxlbmd0aF0gKyByICsgb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCA9IHIgKyBvdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzWmVybygpKSB7XG4gICAgICAgIG91dCA9ICcwJyArIG91dDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChvdXQubGVuZ3RoICUgcGFkZGluZyAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnMCcgKyBvdXQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgICBvdXQgPSAnLScgKyBvdXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGFzc2VydChmYWxzZSwgJ0Jhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYnKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiB0b051bWJlciAoKSB7XG4gICAgdmFyIHJldCA9IHRoaXMud29yZHNbMF07XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXQgKz0gdGhpcy53b3Jkc1sxXSAqIDB4NDAwMDAwMDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGVuZ3RoID09PSAzICYmIHRoaXMud29yZHNbMl0gPT09IDB4MDEpIHtcbiAgICAgIC8vIE5PVEU6IGF0IHRoaXMgc3RhZ2UgaXQgaXMga25vd24gdGhhdCB0aGUgdG9wIGJpdCBpcyBzZXRcbiAgICAgIHJldCArPSAweDEwMDAwMDAwMDAwMDAwICsgKHRoaXMud29yZHNbMV0gKiAweDQwMDAwMDApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sZW5ndGggPiAyKSB7XG4gICAgICBhc3NlcnQoZmFsc2UsICdOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMnKTtcbiAgICB9XG4gICAgcmV0dXJuICh0aGlzLm5lZ2F0aXZlICE9PSAwKSA/IC1yZXQgOiByZXQ7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoMTYsIDIpO1xuICB9O1xuXG4gIGlmIChCdWZmZXIpIHtcbiAgICBCTi5wcm90b3R5cGUudG9CdWZmZXIgPSBmdW5jdGlvbiB0b0J1ZmZlciAoZW5kaWFuLCBsZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvQXJyYXlMaWtlKEJ1ZmZlciwgZW5kaWFuLCBsZW5ndGgpO1xuICAgIH07XG4gIH1cblxuICBCTi5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIHRvQXJyYXkgKGVuZGlhbiwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksIGVuZGlhbiwgbGVuZ3RoKTtcbiAgfTtcblxuICB2YXIgYWxsb2NhdGUgPSBmdW5jdGlvbiBhbGxvY2F0ZSAoQXJyYXlUeXBlLCBzaXplKSB7XG4gICAgaWYgKEFycmF5VHlwZS5hbGxvY1Vuc2FmZSkge1xuICAgICAgcmV0dXJuIEFycmF5VHlwZS5hbGxvY1Vuc2FmZShzaXplKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBcnJheVR5cGUoc2l6ZSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnRvQXJyYXlMaWtlID0gZnVuY3Rpb24gdG9BcnJheUxpa2UgKEFycmF5VHlwZSwgZW5kaWFuLCBsZW5ndGgpIHtcbiAgICB0aGlzLl9zdHJpcCgpO1xuXG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0aGlzLmJ5dGVMZW5ndGgoKTtcbiAgICB2YXIgcmVxTGVuZ3RoID0gbGVuZ3RoIHx8IE1hdGgubWF4KDEsIGJ5dGVMZW5ndGgpO1xuICAgIGFzc2VydChieXRlTGVuZ3RoIDw9IHJlcUxlbmd0aCwgJ2J5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgnKTtcbiAgICBhc3NlcnQocmVxTGVuZ3RoID4gMCwgJ1JlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCcpO1xuXG4gICAgdmFyIHJlcyA9IGFsbG9jYXRlKEFycmF5VHlwZSwgcmVxTGVuZ3RoKTtcbiAgICB2YXIgcG9zdGZpeCA9IGVuZGlhbiA9PT0gJ2xlJyA/ICdMRScgOiAnQkUnO1xuICAgIHRoaXNbJ190b0FycmF5TGlrZScgKyBwb3N0Zml4XShyZXMsIGJ5dGVMZW5ndGgpO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl90b0FycmF5TGlrZUxFID0gZnVuY3Rpb24gX3RvQXJyYXlMaWtlTEUgKHJlcywgYnl0ZUxlbmd0aCkge1xuICAgIHZhciBwb3NpdGlvbiA9IDA7XG4gICAgdmFyIGNhcnJ5ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwLCBzaGlmdCA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgd29yZCA9ICh0aGlzLndvcmRzW2ldIDw8IHNoaWZ0KSB8IGNhcnJ5O1xuXG4gICAgICByZXNbcG9zaXRpb24rK10gPSB3b3JkICYgMHhmZjtcbiAgICAgIGlmIChwb3NpdGlvbiA8IHJlcy5sZW5ndGgpIHtcbiAgICAgICAgcmVzW3Bvc2l0aW9uKytdID0gKHdvcmQgPj4gOCkgJiAweGZmO1xuICAgICAgfVxuICAgICAgaWYgKHBvc2l0aW9uIDwgcmVzLmxlbmd0aCkge1xuICAgICAgICByZXNbcG9zaXRpb24rK10gPSAod29yZCA+PiAxNikgJiAweGZmO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hpZnQgPT09IDYpIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgcmVzLmxlbmd0aCkge1xuICAgICAgICAgIHJlc1twb3NpdGlvbisrXSA9ICh3b3JkID4+IDI0KSAmIDB4ZmY7XG4gICAgICAgIH1cbiAgICAgICAgY2FycnkgPSAwO1xuICAgICAgICBzaGlmdCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXJyeSA9IHdvcmQgPj4+IDI0O1xuICAgICAgICBzaGlmdCArPSAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA8IHJlcy5sZW5ndGgpIHtcbiAgICAgIHJlc1twb3NpdGlvbisrXSA9IGNhcnJ5O1xuXG4gICAgICB3aGlsZSAocG9zaXRpb24gPCByZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlc1twb3NpdGlvbisrXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fdG9BcnJheUxpa2VCRSA9IGZ1bmN0aW9uIF90b0FycmF5TGlrZUJFIChyZXMsIGJ5dGVMZW5ndGgpIHtcbiAgICB2YXIgcG9zaXRpb24gPSByZXMubGVuZ3RoIC0gMTtcbiAgICB2YXIgY2FycnkgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIHNoaWZ0ID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3b3JkID0gKHRoaXMud29yZHNbaV0gPDwgc2hpZnQpIHwgY2Fycnk7XG5cbiAgICAgIHJlc1twb3NpdGlvbi0tXSA9IHdvcmQgJiAweGZmO1xuICAgICAgaWYgKHBvc2l0aW9uID49IDApIHtcbiAgICAgICAgcmVzW3Bvc2l0aW9uLS1dID0gKHdvcmQgPj4gOCkgJiAweGZmO1xuICAgICAgfVxuICAgICAgaWYgKHBvc2l0aW9uID49IDApIHtcbiAgICAgICAgcmVzW3Bvc2l0aW9uLS1dID0gKHdvcmQgPj4gMTYpICYgMHhmZjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNoaWZ0ID09PSA2KSB7XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XG4gICAgICAgICAgcmVzW3Bvc2l0aW9uLS1dID0gKHdvcmQgPj4gMjQpICYgMHhmZjtcbiAgICAgICAgfVxuICAgICAgICBjYXJyeSA9IDA7XG4gICAgICAgIHNoaWZ0ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcnJ5ID0gd29yZCA+Pj4gMjQ7XG4gICAgICAgIHNoaWZ0ICs9IDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uID49IDApIHtcbiAgICAgIHJlc1twb3NpdGlvbi0tXSA9IGNhcnJ5O1xuXG4gICAgICB3aGlsZSAocG9zaXRpb24gPj0gMCkge1xuICAgICAgICByZXNbcG9zaXRpb24tLV0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBpZiAoTWF0aC5jbHozMikge1xuICAgIEJOLnByb3RvdHlwZS5fY291bnRCaXRzID0gZnVuY3Rpb24gX2NvdW50Qml0cyAodykge1xuICAgICAgcmV0dXJuIDMyIC0gTWF0aC5jbHozMih3KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIEJOLnByb3RvdHlwZS5fY291bnRCaXRzID0gZnVuY3Rpb24gX2NvdW50Qml0cyAodykge1xuICAgICAgdmFyIHQgPSB3O1xuICAgICAgdmFyIHIgPSAwO1xuICAgICAgaWYgKHQgPj0gMHgxMDAwKSB7XG4gICAgICAgIHIgKz0gMTM7XG4gICAgICAgIHQgPj4+PSAxMztcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4NDApIHtcbiAgICAgICAgciArPSA3O1xuICAgICAgICB0ID4+Pj0gNztcbiAgICAgIH1cbiAgICAgIGlmICh0ID49IDB4OCkge1xuICAgICAgICByICs9IDQ7XG4gICAgICAgIHQgPj4+PSA0O1xuICAgICAgfVxuICAgICAgaWYgKHQgPj0gMHgwMikge1xuICAgICAgICByICs9IDI7XG4gICAgICAgIHQgPj4+PSAyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHIgKyB0O1xuICAgIH07XG4gIH1cblxuICBCTi5wcm90b3R5cGUuX3plcm9CaXRzID0gZnVuY3Rpb24gX3plcm9CaXRzICh3KSB7XG4gICAgLy8gU2hvcnQtY3V0XG4gICAgaWYgKHcgPT09IDApIHJldHVybiAyNjtcblxuICAgIHZhciB0ID0gdztcbiAgICB2YXIgciA9IDA7XG4gICAgaWYgKCh0ICYgMHgxZmZmKSA9PT0gMCkge1xuICAgICAgciArPSAxMztcbiAgICAgIHQgPj4+PSAxMztcbiAgICB9XG4gICAgaWYgKCh0ICYgMHg3ZikgPT09IDApIHtcbiAgICAgIHIgKz0gNztcbiAgICAgIHQgPj4+PSA3O1xuICAgIH1cbiAgICBpZiAoKHQgJiAweGYpID09PSAwKSB7XG4gICAgICByICs9IDQ7XG4gICAgICB0ID4+Pj0gNDtcbiAgICB9XG4gICAgaWYgKCh0ICYgMHgzKSA9PT0gMCkge1xuICAgICAgciArPSAyO1xuICAgICAgdCA+Pj49IDI7XG4gICAgfVxuICAgIGlmICgodCAmIDB4MSkgPT09IDApIHtcbiAgICAgIHIrKztcbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG51bWJlciBvZiB1c2VkIGJpdHMgaW4gYSBCTlxuICBCTi5wcm90b3R5cGUuYml0TGVuZ3RoID0gZnVuY3Rpb24gYml0TGVuZ3RoICgpIHtcbiAgICB2YXIgdyA9IHRoaXMud29yZHNbdGhpcy5sZW5ndGggLSAxXTtcbiAgICB2YXIgaGkgPSB0aGlzLl9jb3VudEJpdHModyk7XG4gICAgcmV0dXJuICh0aGlzLmxlbmd0aCAtIDEpICogMjYgKyBoaTtcbiAgfTtcblxuICBmdW5jdGlvbiB0b0JpdEFycmF5IChudW0pIHtcbiAgICB2YXIgdyA9IG5ldyBBcnJheShudW0uYml0TGVuZ3RoKCkpO1xuXG4gICAgZm9yICh2YXIgYml0ID0gMDsgYml0IDwgdy5sZW5ndGg7IGJpdCsrKSB7XG4gICAgICB2YXIgb2ZmID0gKGJpdCAvIDI2KSB8IDA7XG4gICAgICB2YXIgd2JpdCA9IGJpdCAlIDI2O1xuXG4gICAgICB3W2JpdF0gPSAobnVtLndvcmRzW29mZl0gPj4+IHdiaXQpICYgMHgwMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdztcbiAgfVxuXG4gIC8vIE51bWJlciBvZiB0cmFpbGluZyB6ZXJvIGJpdHNcbiAgQk4ucHJvdG90eXBlLnplcm9CaXRzID0gZnVuY3Rpb24gemVyb0JpdHMgKCkge1xuICAgIGlmICh0aGlzLmlzWmVybygpKSByZXR1cm4gMDtcblxuICAgIHZhciByID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBiID0gdGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tpXSk7XG4gICAgICByICs9IGI7XG4gICAgICBpZiAoYiAhPT0gMjYpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuYnl0ZUxlbmd0aCA9IGZ1bmN0aW9uIGJ5dGVMZW5ndGggKCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKSAvIDgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b1R3b3MgPSBmdW5jdGlvbiB0b1R3b3MgKHdpZHRoKSB7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmFicygpLmlub3RuKHdpZHRoKS5pYWRkbigxKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZnJvbVR3b3MgPSBmdW5jdGlvbiBmcm9tVHdvcyAod2lkdGgpIHtcbiAgICBpZiAodGhpcy50ZXN0bih3aWR0aCAtIDEpKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub3RuKHdpZHRoKS5pYWRkbigxKS5pbmVnKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsb25lKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzTmVnID0gZnVuY3Rpb24gaXNOZWcgKCkge1xuICAgIHJldHVybiB0aGlzLm5lZ2F0aXZlICE9PSAwO1xuICB9O1xuXG4gIC8vIFJldHVybiBuZWdhdGl2ZSBjbG9uZSBvZiBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uIG5lZyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmluZWcgPSBmdW5jdGlvbiBpbmVnICgpIHtcbiAgICBpZiAoIXRoaXMuaXNaZXJvKCkpIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgXj0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBPciBgbnVtYCB3aXRoIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXVvciA9IGZ1bmN0aW9uIGl1b3IgKG51bSkge1xuICAgIHdoaWxlICh0aGlzLmxlbmd0aCA8IG51bS5sZW5ndGgpIHtcbiAgICAgIHRoaXMud29yZHNbdGhpcy5sZW5ndGgrK10gPSAwO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gdGhpcy53b3Jkc1tpXSB8IG51bS53b3Jkc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaW9yID0gZnVuY3Rpb24gaW9yIChudW0pIHtcbiAgICBhc3NlcnQoKHRoaXMubmVnYXRpdmUgfCBudW0ubmVnYXRpdmUpID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdW9yKG51bSk7XG4gIH07XG5cbiAgLy8gT3IgYG51bWAgd2l0aCBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gb3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaW9yKG51bSk7XG4gICAgcmV0dXJuIG51bS5jbG9uZSgpLmlvcih0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudW9yID0gZnVuY3Rpb24gdW9yIChudW0pIHtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSByZXR1cm4gdGhpcy5jbG9uZSgpLml1b3IobnVtKTtcbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaXVvcih0aGlzKTtcbiAgfTtcblxuICAvLyBBbmQgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1YW5kID0gZnVuY3Rpb24gaXVhbmQgKG51bSkge1xuICAgIC8vIGIgPSBtaW4tbGVuZ3RoKG51bSwgdGhpcylcbiAgICB2YXIgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBiID0gbnVtO1xuICAgIH0gZWxzZSB7XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB0aGlzLndvcmRzW2ldICYgbnVtLndvcmRzW2ldO1xuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYi5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFuZCA9IGZ1bmN0aW9uIGlhbmQgKG51bSkge1xuICAgIGFzc2VydCgodGhpcy5uZWdhdGl2ZSB8IG51bS5uZWdhdGl2ZSkgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1YW5kKG51bSk7XG4gIH07XG5cbiAgLy8gQW5kIGBudW1gIHdpdGggYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaWFuZChudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pYW5kKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51YW5kID0gZnVuY3Rpb24gdWFuZCAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdWFuZChudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pdWFuZCh0aGlzKTtcbiAgfTtcblxuICAvLyBYb3IgYG51bWAgd2l0aCBgdGhpc2AgaW4tcGxhY2VcbiAgQk4ucHJvdG90eXBlLml1eG9yID0gZnVuY3Rpb24gaXV4b3IgKG51bSkge1xuICAgIC8vIGEubGVuZ3RoID4gYi5sZW5ndGhcbiAgICB2YXIgYTtcbiAgICB2YXIgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBhID0gdGhpcztcbiAgICAgIGIgPSBudW07XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBudW07XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldIF4gYi53b3Jkc1tpXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcyAhPT0gYSkge1xuICAgICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gYS5sZW5ndGg7XG5cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaXhvciA9IGZ1bmN0aW9uIGl4b3IgKG51bSkge1xuICAgIGFzc2VydCgodGhpcy5uZWdhdGl2ZSB8IG51bS5uZWdhdGl2ZSkgPT09IDApO1xuICAgIHJldHVybiB0aGlzLml1eG9yKG51bSk7XG4gIH07XG5cbiAgLy8gWG9yIGBudW1gIHdpdGggYHRoaXNgXG4gIEJOLnByb3RvdHlwZS54b3IgPSBmdW5jdGlvbiB4b3IgKG51bSkge1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IG51bS5sZW5ndGgpIHJldHVybiB0aGlzLmNsb25lKCkuaXhvcihudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5peG9yKHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51eG9yID0gZnVuY3Rpb24gdXhvciAobnVtKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pdXhvcihudW0pO1xuICAgIHJldHVybiBudW0uY2xvbmUoKS5pdXhvcih0aGlzKTtcbiAgfTtcblxuICAvLyBOb3QgYGB0aGlzYGAgd2l0aCBgYHdpZHRoYGAgYml0d2lkdGhcbiAgQk4ucHJvdG90eXBlLmlub3RuID0gZnVuY3Rpb24gaW5vdG4gKHdpZHRoKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiB3aWR0aCA9PT0gJ251bWJlcicgJiYgd2lkdGggPj0gMCk7XG5cbiAgICB2YXIgYnl0ZXNOZWVkZWQgPSBNYXRoLmNlaWwod2lkdGggLyAyNikgfCAwO1xuICAgIHZhciBiaXRzTGVmdCA9IHdpZHRoICUgMjY7XG5cbiAgICAvLyBFeHRlbmQgdGhlIGJ1ZmZlciB3aXRoIGxlYWRpbmcgemVyb2VzXG4gICAgdGhpcy5fZXhwYW5kKGJ5dGVzTmVlZGVkKTtcblxuICAgIGlmIChiaXRzTGVmdCA+IDApIHtcbiAgICAgIGJ5dGVzTmVlZGVkLS07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGNvbXBsZXRlIHdvcmRzXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlc05lZWRlZDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gfnRoaXMud29yZHNbaV0gJiAweDNmZmZmZmY7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSByZXNpZHVlXG4gICAgaWYgKGJpdHNMZWZ0ID4gMCkge1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IH50aGlzLndvcmRzW2ldICYgKDB4M2ZmZmZmZiA+PiAoMjYgLSBiaXRzTGVmdCkpO1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIC8vIENsZWFyIHdvcmRzIGFib3ZlIHRoZSByZXF1ZXN0ZWQgd2lkdGggc28gdGhlIHJlc3VsdCBzdGF5cyBiZWxvdyAyICoqIHdpZHRoXG4gICAgZm9yICg7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLndvcmRzW2ldID0gMDtcbiAgICB9XG5cbiAgICAvLyBBbmQgcmVtb3ZlIGxlYWRpbmcgemVyb2VzXG4gICAgcmV0dXJuIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLm5vdG4gPSBmdW5jdGlvbiBub3RuICh3aWR0aCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW5vdG4od2lkdGgpO1xuICB9O1xuXG4gIC8vIFNldCBgYml0YCBvZiBgdGhpc2BcbiAgQk4ucHJvdG90eXBlLnNldG4gPSBmdW5jdGlvbiBzZXRuIChiaXQsIHZhbCkge1xuICAgIGFzc2VydCh0eXBlb2YgYml0ID09PSAnbnVtYmVyJyAmJiBiaXQgPj0gMCk7XG5cbiAgICB2YXIgb2ZmID0gKGJpdCAvIDI2KSB8IDA7XG4gICAgdmFyIHdiaXQgPSBiaXQgJSAyNjtcblxuICAgIHRoaXMuX2V4cGFuZChvZmYgKyAxKTtcblxuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMud29yZHNbb2ZmXSA9IHRoaXMud29yZHNbb2ZmXSB8ICgxIDw8IHdiaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndvcmRzW29mZl0gPSB0aGlzLndvcmRzW29mZl0gJiB+KDEgPDwgd2JpdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgLy8gQWRkIGBudW1gIHRvIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaWFkZCA9IGZ1bmN0aW9uIGlhZGQgKG51bSkge1xuICAgIHZhciByO1xuXG4gICAgLy8gbmVnYXRpdmUgKyBwb3NpdGl2ZVxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwICYmIG51bS5uZWdhdGl2ZSA9PT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICByID0gdGhpcy5pc3ViKG51bSk7XG4gICAgICB0aGlzLm5lZ2F0aXZlIF49IDE7XG4gICAgICByZXR1cm4gdGhpcy5fbm9ybVNpZ24oKTtcblxuICAgIC8vIHBvc2l0aXZlICsgbmVnYXRpdmVcbiAgICB9IGVsc2UgaWYgKHRoaXMubmVnYXRpdmUgPT09IDAgJiYgbnVtLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICBudW0ubmVnYXRpdmUgPSAwO1xuICAgICAgciA9IHRoaXMuaXN1YihudW0pO1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiByLl9ub3JtU2lnbigpO1xuICAgIH1cblxuICAgIC8vIGEubGVuZ3RoID4gYi5sZW5ndGhcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAodGhpcy5sZW5ndGggPiBudW0ubGVuZ3RoKSB7XG4gICAgICBhID0gdGhpcztcbiAgICAgIGIgPSBudW07XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBudW07XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgciA9IChhLndvcmRzW2ldIHwgMCkgKyAoYi53b3Jkc1tpXSB8IDApICsgY2Fycnk7XG4gICAgICB0aGlzLndvcmRzW2ldID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgIGNhcnJ5ID0gciA+Pj4gMjY7XG4gICAgfVxuICAgIGZvciAoOyBjYXJyeSAhPT0gMCAmJiBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgciA9IChhLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIHRoaXMud29yZHNbaV0gPSByICYgMHgzZmZmZmZmO1xuICAgICAgY2FycnkgPSByID4+PiAyNjtcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCA9IGEubGVuZ3RoO1xuICAgIGlmIChjYXJyeSAhPT0gMCkge1xuICAgICAgdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF0gPSBjYXJyeTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgLy8gQ29weSB0aGUgcmVzdCBvZiB0aGUgd29yZHNcbiAgICB9IGVsc2UgaWYgKGEgIT09IHRoaXMpIHtcbiAgICAgIGZvciAoOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gYS53b3Jkc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvLyBBZGQgYG51bWAgdG8gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQgKG51bSkge1xuICAgIHZhciByZXM7XG4gICAgaWYgKG51bS5uZWdhdGl2ZSAhPT0gMCAmJiB0aGlzLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICBudW0ubmVnYXRpdmUgPSAwO1xuICAgICAgcmVzID0gdGhpcy5zdWIobnVtKTtcbiAgICAgIG51bS5uZWdhdGl2ZSBePSAxO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2UgaWYgKG51bS5uZWdhdGl2ZSA9PT0gMCAmJiB0aGlzLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHJlcyA9IG51bS5zdWIodGhpcyk7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkKG51bSk7XG5cbiAgICByZXR1cm4gbnVtLmNsb25lKCkuaWFkZCh0aGlzKTtcbiAgfTtcblxuICAvLyBTdWJ0cmFjdCBgbnVtYCBmcm9tIGB0aGlzYCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXN1YiA9IGZ1bmN0aW9uIGlzdWIgKG51bSkge1xuICAgIC8vIHRoaXMgLSAoLW51bSkgPSB0aGlzICsgbnVtXG4gICAgaWYgKG51bS5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgbnVtLm5lZ2F0aXZlID0gMDtcbiAgICAgIHZhciByID0gdGhpcy5pYWRkKG51bSk7XG4gICAgICBudW0ubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHIuX25vcm1TaWduKCk7XG5cbiAgICAvLyAtdGhpcyAtIG51bSA9IC0odGhpcyArIG51bSlcbiAgICB9IGVsc2UgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgdGhpcy5pYWRkKG51bSk7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiB0aGlzLl9ub3JtU2lnbigpO1xuICAgIH1cblxuICAgIC8vIEF0IHRoaXMgcG9pbnQgYm90aCBudW1iZXJzIGFyZSBwb3NpdGl2ZVxuICAgIHZhciBjbXAgPSB0aGlzLmNtcChudW0pO1xuXG4gICAgLy8gT3B0aW1pemF0aW9uIC0gemVyb2lmeVxuICAgIGlmIChjbXAgPT09IDApIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuICAgICAgdGhpcy5sZW5ndGggPSAxO1xuICAgICAgdGhpcy53b3Jkc1swXSA9IDA7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBhID4gYlxuICAgIHZhciBhLCBiO1xuICAgIGlmIChjbXAgPiAwKSB7XG4gICAgICBhID0gdGhpcztcbiAgICAgIGIgPSBudW07XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBudW07XG4gICAgICBiID0gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgciA9IChhLndvcmRzW2ldIHwgMCkgLSAoYi53b3Jkc1tpXSB8IDApICsgY2Fycnk7XG4gICAgICBjYXJyeSA9IHIgPj4gMjY7XG4gICAgICB0aGlzLndvcmRzW2ldID0gciAmIDB4M2ZmZmZmZjtcbiAgICB9XG4gICAgZm9yICg7IGNhcnJ5ICE9PSAwICYmIGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICByID0gKGEud29yZHNbaV0gfCAwKSArIGNhcnJ5O1xuICAgICAgY2FycnkgPSByID4+IDI2O1xuICAgICAgdGhpcy53b3Jkc1tpXSA9IHIgJiAweDNmZmZmZmY7XG4gICAgfVxuXG4gICAgLy8gQ29weSByZXN0IG9mIHRoZSB3b3Jkc1xuICAgIGlmIChjYXJyeSA9PT0gMCAmJiBpIDwgYS5sZW5ndGggJiYgYSAhPT0gdGhpcykge1xuICAgICAgZm9yICg7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBhLndvcmRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGVuZ3RoID0gTWF0aC5tYXgodGhpcy5sZW5ndGgsIGkpO1xuXG4gICAgaWYgKGEgIT09IHRoaXMpIHtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIC8vIFN1YnRyYWN0IGBudW1gIGZyb20gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiBzdWIgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXN1YihudW0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHNtYWxsTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgb3V0Lm5lZ2F0aXZlID0gbnVtLm5lZ2F0aXZlIF4gc2VsZi5uZWdhdGl2ZTtcbiAgICB2YXIgbGVuID0gKHNlbGYubGVuZ3RoICsgbnVtLmxlbmd0aCkgfCAwO1xuICAgIG91dC5sZW5ndGggPSBsZW47XG4gICAgbGVuID0gKGxlbiAtIDEpIHwgMDtcblxuICAgIC8vIFBlZWwgb25lIGl0ZXJhdGlvbiAoY29tcGlsZXIgY2FuJ3QgZG8gaXQsIGJlY2F1c2Ugb2YgY29kZSBjb21wbGV4aXR5KVxuICAgIHZhciBhID0gc2VsZi53b3Jkc1swXSB8IDA7XG4gICAgdmFyIGIgPSBudW0ud29yZHNbMF0gfCAwO1xuICAgIHZhciByID0gYSAqIGI7XG5cbiAgICB2YXIgbG8gPSByICYgMHgzZmZmZmZmO1xuICAgIHZhciBjYXJyeSA9IChyIC8gMHg0MDAwMDAwKSB8IDA7XG4gICAgb3V0LndvcmRzWzBdID0gbG87XG5cbiAgICBmb3IgKHZhciBrID0gMTsgayA8IGxlbjsgaysrKSB7XG4gICAgICAvLyBTdW0gYWxsIHdvcmRzIHdpdGggdGhlIHNhbWUgYGkgKyBqID0ga2AgYW5kIGFjY3VtdWxhdGUgYG5jYXJyeWAsXG4gICAgICAvLyBub3RlIHRoYXQgbmNhcnJ5IGNvdWxkIGJlID49IDB4M2ZmZmZmZlxuICAgICAgdmFyIG5jYXJyeSA9IGNhcnJ5ID4+PiAyNjtcbiAgICAgIHZhciByd29yZCA9IGNhcnJ5ICYgMHgzZmZmZmZmO1xuICAgICAgdmFyIG1heEogPSBNYXRoLm1pbihrLCBudW0ubGVuZ3RoIC0gMSk7XG4gICAgICBmb3IgKHZhciBqID0gTWF0aC5tYXgoMCwgayAtIHNlbGYubGVuZ3RoICsgMSk7IGogPD0gbWF4SjsgaisrKSB7XG4gICAgICAgIHZhciBpID0gKGsgLSBqKSB8IDA7XG4gICAgICAgIGEgPSBzZWxmLndvcmRzW2ldIHwgMDtcbiAgICAgICAgYiA9IG51bS53b3Jkc1tqXSB8IDA7XG4gICAgICAgIHIgPSBhICogYiArIHJ3b3JkO1xuICAgICAgICBuY2FycnkgKz0gKHIgLyAweDQwMDAwMDApIHwgMDtcbiAgICAgICAgcndvcmQgPSByICYgMHgzZmZmZmZmO1xuICAgICAgfVxuICAgICAgb3V0LndvcmRzW2tdID0gcndvcmQgfCAwO1xuICAgICAgY2FycnkgPSBuY2FycnkgfCAwO1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG91dC53b3Jkc1trXSA9IGNhcnJ5IHwgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0Lmxlbmd0aC0tO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQuX3N0cmlwKCk7XG4gIH1cblxuICAvLyBUT0RPKGluZHV0bnkpOiBpdCBtYXkgYmUgcmVhc29uYWJsZSB0byBvbWl0IGl0IGZvciB1c2VycyB3aG8gZG9uJ3QgbmVlZFxuICAvLyB0byB3b3JrIHdpdGggMjU2LWJpdCBudW1iZXJzLCBvdGhlcndpc2UgaXQgZ2l2ZXMgMjAlIGltcHJvdmVtZW50IGZvciAyNTYtYml0XG4gIC8vIG11bHRpcGxpY2F0aW9uIChsaWtlIGVsbGlwdGljIHNlY3AyNTZrMSkuXG4gIHZhciBjb21iMTBNdWxUbyA9IGZ1bmN0aW9uIGNvbWIxME11bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIHZhciBhID0gc2VsZi53b3JkcztcbiAgICB2YXIgYiA9IG51bS53b3JkcztcbiAgICB2YXIgbyA9IG91dC53b3JkcztcbiAgICB2YXIgYyA9IDA7XG4gICAgdmFyIGxvO1xuICAgIHZhciBtaWQ7XG4gICAgdmFyIGhpO1xuICAgIHZhciBhMCA9IGFbMF0gfCAwO1xuICAgIHZhciBhbDAgPSBhMCAmIDB4MWZmZjtcbiAgICB2YXIgYWgwID0gYTAgPj4+IDEzO1xuICAgIHZhciBhMSA9IGFbMV0gfCAwO1xuICAgIHZhciBhbDEgPSBhMSAmIDB4MWZmZjtcbiAgICB2YXIgYWgxID0gYTEgPj4+IDEzO1xuICAgIHZhciBhMiA9IGFbMl0gfCAwO1xuICAgIHZhciBhbDIgPSBhMiAmIDB4MWZmZjtcbiAgICB2YXIgYWgyID0gYTIgPj4+IDEzO1xuICAgIHZhciBhMyA9IGFbM10gfCAwO1xuICAgIHZhciBhbDMgPSBhMyAmIDB4MWZmZjtcbiAgICB2YXIgYWgzID0gYTMgPj4+IDEzO1xuICAgIHZhciBhNCA9IGFbNF0gfCAwO1xuICAgIHZhciBhbDQgPSBhNCAmIDB4MWZmZjtcbiAgICB2YXIgYWg0ID0gYTQgPj4+IDEzO1xuICAgIHZhciBhNSA9IGFbNV0gfCAwO1xuICAgIHZhciBhbDUgPSBhNSAmIDB4MWZmZjtcbiAgICB2YXIgYWg1ID0gYTUgPj4+IDEzO1xuICAgIHZhciBhNiA9IGFbNl0gfCAwO1xuICAgIHZhciBhbDYgPSBhNiAmIDB4MWZmZjtcbiAgICB2YXIgYWg2ID0gYTYgPj4+IDEzO1xuICAgIHZhciBhNyA9IGFbN10gfCAwO1xuICAgIHZhciBhbDcgPSBhNyAmIDB4MWZmZjtcbiAgICB2YXIgYWg3ID0gYTcgPj4+IDEzO1xuICAgIHZhciBhOCA9IGFbOF0gfCAwO1xuICAgIHZhciBhbDggPSBhOCAmIDB4MWZmZjtcbiAgICB2YXIgYWg4ID0gYTggPj4+IDEzO1xuICAgIHZhciBhOSA9IGFbOV0gfCAwO1xuICAgIHZhciBhbDkgPSBhOSAmIDB4MWZmZjtcbiAgICB2YXIgYWg5ID0gYTkgPj4+IDEzO1xuICAgIHZhciBiMCA9IGJbMF0gfCAwO1xuICAgIHZhciBibDAgPSBiMCAmIDB4MWZmZjtcbiAgICB2YXIgYmgwID0gYjAgPj4+IDEzO1xuICAgIHZhciBiMSA9IGJbMV0gfCAwO1xuICAgIHZhciBibDEgPSBiMSAmIDB4MWZmZjtcbiAgICB2YXIgYmgxID0gYjEgPj4+IDEzO1xuICAgIHZhciBiMiA9IGJbMl0gfCAwO1xuICAgIHZhciBibDIgPSBiMiAmIDB4MWZmZjtcbiAgICB2YXIgYmgyID0gYjIgPj4+IDEzO1xuICAgIHZhciBiMyA9IGJbM10gfCAwO1xuICAgIHZhciBibDMgPSBiMyAmIDB4MWZmZjtcbiAgICB2YXIgYmgzID0gYjMgPj4+IDEzO1xuICAgIHZhciBiNCA9IGJbNF0gfCAwO1xuICAgIHZhciBibDQgPSBiNCAmIDB4MWZmZjtcbiAgICB2YXIgYmg0ID0gYjQgPj4+IDEzO1xuICAgIHZhciBiNSA9IGJbNV0gfCAwO1xuICAgIHZhciBibDUgPSBiNSAmIDB4MWZmZjtcbiAgICB2YXIgYmg1ID0gYjUgPj4+IDEzO1xuICAgIHZhciBiNiA9IGJbNl0gfCAwO1xuICAgIHZhciBibDYgPSBiNiAmIDB4MWZmZjtcbiAgICB2YXIgYmg2ID0gYjYgPj4+IDEzO1xuICAgIHZhciBiNyA9IGJbN10gfCAwO1xuICAgIHZhciBibDcgPSBiNyAmIDB4MWZmZjtcbiAgICB2YXIgYmg3ID0gYjcgPj4+IDEzO1xuICAgIHZhciBiOCA9IGJbOF0gfCAwO1xuICAgIHZhciBibDggPSBiOCAmIDB4MWZmZjtcbiAgICB2YXIgYmg4ID0gYjggPj4+IDEzO1xuICAgIHZhciBiOSA9IGJbOV0gfCAwO1xuICAgIHZhciBibDkgPSBiOSAmIDB4MWZmZjtcbiAgICB2YXIgYmg5ID0gYjkgPj4+IDEzO1xuXG4gICAgb3V0Lm5lZ2F0aXZlID0gc2VsZi5uZWdhdGl2ZSBeIG51bS5uZWdhdGl2ZTtcbiAgICBvdXQubGVuZ3RoID0gMTk7XG4gICAgLyogayA9IDAgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDAsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMCwgYmgwKTtcbiAgICB2YXIgdzAgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcwID4+PiAyNikpIHwgMDtcbiAgICB3MCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDEsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDEpKSB8IDA7XG4gICAgdmFyIHcxID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MSA+Pj4gMjYpKSB8IDA7XG4gICAgdzEgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSAyICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWwyLCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDIsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDIsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDIsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMikpIHwgMDtcbiAgICB2YXIgdzIgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcyID4+PiAyNikpIHwgMDtcbiAgICB3MiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDMgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDMsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsMywgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMywgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoMywgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoMykpIHwgMDtcbiAgICB2YXIgdzMgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHczID4+PiAyNikpIHwgMDtcbiAgICB3MyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDQgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDQsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNCwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNCwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDQpKSB8IDA7XG4gICAgdmFyIHc0ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3NCA+Pj4gMjYpKSB8IDA7XG4gICAgdzQgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA1ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw1LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDUsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDUsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDUsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNSkpIHwgMDtcbiAgICB2YXIgdzUgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc1ID4+PiAyNikpIHwgMDtcbiAgICB3NSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDYgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDYsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNiwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNiwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNiwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoNikpIHwgMDtcbiAgICB2YXIgdzYgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc2ID4+PiAyNikpIHwgMDtcbiAgICB3NiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDcgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDcsIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsNywgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoNywgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDAsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMCwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgwLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgwLCBiaDcpKSB8IDA7XG4gICAgdmFyIHc3ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3NyA+Pj4gMjYpKSB8IDA7XG4gICAgdzcgJj0gMHgzZmZmZmZmO1xuICAgIC8qIGsgPSA4ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw4LCBibDApO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDgsIGJoMCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDgsIGJsMCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDgsIGJoMCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDEpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwxKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgxKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwyKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmgzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDMpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDMpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw0KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg0KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNSkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDYpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDYpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw3KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg3KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsOCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoOCkpIHwgMDtcbiAgICB2YXIgdzggPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc4ID4+PiAyNikpIHwgMDtcbiAgICB3OCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDkgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMCk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgwKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwwKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgwKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsMSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmgxKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDEpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDEpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDIsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMiwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgyLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgyLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwxLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDEsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMSwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMSwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMCwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwwLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDAsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDAsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzkgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHc5ID4+PiAyNikpIHwgMDtcbiAgICB3OSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEwICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDEpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoMSk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsMSkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoMSk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDIpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoMikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwyKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmgyKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmwzKSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsMykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoMykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMSwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwxLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDEsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDEsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzEwID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTAgPj4+IDI2KSkgfCAwO1xuICAgIHcxMCAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDExICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDIpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoMik7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsMikpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoMik7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDMpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoMykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmwzKSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmgzKSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDQpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNCkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNCkpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg1KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDUpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDUpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDMsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsMywgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWgzLCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWgzLCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWwyLCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDIsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoMiwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoMiwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTEgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxMSA+Pj4gMjYpKSB8IDA7XG4gICAgdzExICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTIgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsMyk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmgzKTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmwzKSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmgzKTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg0KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDQpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDQpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDUsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNSwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg1LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg1LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw0LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDQsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNCwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsMywgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWwzLCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDMsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDMsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzEyID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTIgPj4+IDI2KSkgfCAwO1xuICAgIHcxMiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDEzICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDQpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDUpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoNSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw1KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg1KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw2KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNikpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNikpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNCwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw0LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDQsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDQsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzEzID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTMgPj4+IDI2KSkgfCAwO1xuICAgIHcxMyAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE0ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDUpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNSk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNSkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNSk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDYpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoNikpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw2KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg2KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDcpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsNykpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoNykpIHwgMDtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDYsIGJsOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsNiwgYmg4KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg2LCBibDgpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg2LCBiaDgpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw1LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDUsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNSwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNSwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTQgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNCA+Pj4gMjYpKSB8IDA7XG4gICAgdzE0ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTUgKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsNik7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg2KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw2KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg2KTtcbiAgICBsbyA9IChsbyArIE1hdGguaW11bChhbDgsIGJsNykpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFsOCwgYmg3KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWg4LCBibDcpKSB8IDA7XG4gICAgaGkgPSAoaGkgKyBNYXRoLmltdWwoYWg4LCBiaDcpKSB8IDA7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw3LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDcsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoNywgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoNywgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNiwgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw2LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDYsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDYsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzE1ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTUgPj4+IDI2KSkgfCAwO1xuICAgIHcxNSAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE2ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDcpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoNyk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsNykpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoNyk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDgpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoOCkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw4KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg4KSkgfCAwO1xuICAgIGxvID0gKGxvICsgTWF0aC5pbXVsKGFsNywgYmw5KSkgfCAwO1xuICAgIG1pZCA9IChtaWQgKyBNYXRoLmltdWwoYWw3LCBiaDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDcsIGJsOSkpIHwgMDtcbiAgICBoaSA9IChoaSArIE1hdGguaW11bChhaDcsIGJoOSkpIHwgMDtcbiAgICB2YXIgdzE2ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTYgPj4+IDI2KSkgfCAwO1xuICAgIHcxNiAmPSAweDNmZmZmZmY7XG4gICAgLyogayA9IDE3ICovXG4gICAgbG8gPSBNYXRoLmltdWwoYWw5LCBibDgpO1xuICAgIG1pZCA9IE1hdGguaW11bChhbDksIGJoOCk7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhaDksIGJsOCkpIHwgMDtcbiAgICBoaSA9IE1hdGguaW11bChhaDksIGJoOCk7XG4gICAgbG8gPSAobG8gKyBNYXRoLmltdWwoYWw4LCBibDkpKSB8IDA7XG4gICAgbWlkID0gKG1pZCArIE1hdGguaW11bChhbDgsIGJoOSkpIHwgMDtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOCwgYmw5KSkgfCAwO1xuICAgIGhpID0gKGhpICsgTWF0aC5pbXVsKGFoOCwgYmg5KSkgfCAwO1xuICAgIHZhciB3MTcgPSAoKChjICsgbG8pIHwgMCkgKyAoKG1pZCAmIDB4MWZmZikgPDwgMTMpKSB8IDA7XG4gICAgYyA9ICgoKGhpICsgKG1pZCA+Pj4gMTMpKSB8IDApICsgKHcxNyA+Pj4gMjYpKSB8IDA7XG4gICAgdzE3ICY9IDB4M2ZmZmZmZjtcbiAgICAvKiBrID0gMTggKi9cbiAgICBsbyA9IE1hdGguaW11bChhbDksIGJsOSk7XG4gICAgbWlkID0gTWF0aC5pbXVsKGFsOSwgYmg5KTtcbiAgICBtaWQgPSAobWlkICsgTWF0aC5pbXVsKGFoOSwgYmw5KSkgfCAwO1xuICAgIGhpID0gTWF0aC5pbXVsKGFoOSwgYmg5KTtcbiAgICB2YXIgdzE4ID0gKCgoYyArIGxvKSB8IDApICsgKChtaWQgJiAweDFmZmYpIDw8IDEzKSkgfCAwO1xuICAgIGMgPSAoKChoaSArIChtaWQgPj4+IDEzKSkgfCAwKSArICh3MTggPj4+IDI2KSkgfCAwO1xuICAgIHcxOCAmPSAweDNmZmZmZmY7XG4gICAgb1swXSA9IHcwO1xuICAgIG9bMV0gPSB3MTtcbiAgICBvWzJdID0gdzI7XG4gICAgb1szXSA9IHczO1xuICAgIG9bNF0gPSB3NDtcbiAgICBvWzVdID0gdzU7XG4gICAgb1s2XSA9IHc2O1xuICAgIG9bN10gPSB3NztcbiAgICBvWzhdID0gdzg7XG4gICAgb1s5XSA9IHc5O1xuICAgIG9bMTBdID0gdzEwO1xuICAgIG9bMTFdID0gdzExO1xuICAgIG9bMTJdID0gdzEyO1xuICAgIG9bMTNdID0gdzEzO1xuICAgIG9bMTRdID0gdzE0O1xuICAgIG9bMTVdID0gdzE1O1xuICAgIG9bMTZdID0gdzE2O1xuICAgIG9bMTddID0gdzE3O1xuICAgIG9bMThdID0gdzE4O1xuICAgIGlmIChjICE9PSAwKSB7XG4gICAgICBvWzE5XSA9IGM7XG4gICAgICBvdXQubGVuZ3RoKys7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH07XG5cbiAgLy8gUG9seWZpbGwgY29tYlxuICBpZiAoIU1hdGguaW11bCkge1xuICAgIGNvbWIxME11bFRvID0gc21hbGxNdWxUbztcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpZ011bFRvIChzZWxmLCBudW0sIG91dCkge1xuICAgIG91dC5uZWdhdGl2ZSA9IG51bS5uZWdhdGl2ZSBeIHNlbGYubmVnYXRpdmU7XG4gICAgb3V0Lmxlbmd0aCA9IHNlbGYubGVuZ3RoICsgbnVtLmxlbmd0aDtcblxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgdmFyIGhuY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgb3V0Lmxlbmd0aCAtIDE7IGsrKykge1xuICAgICAgLy8gU3VtIGFsbCB3b3JkcyB3aXRoIHRoZSBzYW1lIGBpICsgaiA9IGtgIGFuZCBhY2N1bXVsYXRlIGBuY2FycnlgLFxuICAgICAgLy8gbm90ZSB0aGF0IG5jYXJyeSBjb3VsZCBiZSA+PSAweDNmZmZmZmZcbiAgICAgIHZhciBuY2FycnkgPSBobmNhcnJ5O1xuICAgICAgaG5jYXJyeSA9IDA7XG4gICAgICB2YXIgcndvcmQgPSBjYXJyeSAmIDB4M2ZmZmZmZjtcbiAgICAgIHZhciBtYXhKID0gTWF0aC5taW4oaywgbnVtLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaiA9IE1hdGgubWF4KDAsIGsgLSBzZWxmLmxlbmd0aCArIDEpOyBqIDw9IG1heEo7IGorKykge1xuICAgICAgICB2YXIgaSA9IGsgLSBqO1xuICAgICAgICB2YXIgYSA9IHNlbGYud29yZHNbaV0gfCAwO1xuICAgICAgICB2YXIgYiA9IG51bS53b3Jkc1tqXSB8IDA7XG4gICAgICAgIHZhciByID0gYSAqIGI7XG5cbiAgICAgICAgdmFyIGxvID0gciAmIDB4M2ZmZmZmZjtcbiAgICAgICAgbmNhcnJ5ID0gKG5jYXJyeSArICgociAvIDB4NDAwMDAwMCkgfCAwKSkgfCAwO1xuICAgICAgICBsbyA9IChsbyArIHJ3b3JkKSB8IDA7XG4gICAgICAgIHJ3b3JkID0gbG8gJiAweDNmZmZmZmY7XG4gICAgICAgIG5jYXJyeSA9IChuY2FycnkgKyAobG8gPj4+IDI2KSkgfCAwO1xuXG4gICAgICAgIGhuY2FycnkgKz0gbmNhcnJ5ID4+PiAyNjtcbiAgICAgICAgbmNhcnJ5ICY9IDB4M2ZmZmZmZjtcbiAgICAgIH1cbiAgICAgIG91dC53b3Jkc1trXSA9IHJ3b3JkO1xuICAgICAgY2FycnkgPSBuY2Fycnk7XG4gICAgICBuY2FycnkgPSBobmNhcnJ5O1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG91dC53b3Jkc1trXSA9IGNhcnJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQubGVuZ3RoLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dC5fc3RyaXAoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGp1bWJvTXVsVG8gKHNlbGYsIG51bSwgb3V0KSB7XG4gICAgLy8gVGVtcG9yYXJ5IGRpc2FibGUsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9ibi5qcy9pc3N1ZXMvMjExXG4gICAgLy8gdmFyIGZmdG0gPSBuZXcgRkZUTSgpO1xuICAgIC8vIHJldHVybiBmZnRtLm11bHAoc2VsZiwgbnVtLCBvdXQpO1xuICAgIHJldHVybiBiaWdNdWxUbyhzZWxmLCBudW0sIG91dCk7XG4gIH1cblxuICBCTi5wcm90b3R5cGUubXVsVG8gPSBmdW5jdGlvbiBtdWxUbyAobnVtLCBvdXQpIHtcbiAgICB2YXIgcmVzO1xuICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aCArIG51bS5sZW5ndGg7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxMCAmJiBudW0ubGVuZ3RoID09PSAxMCkge1xuICAgICAgcmVzID0gY29tYjEwTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAobGVuIDwgNjMpIHtcbiAgICAgIHJlcyA9IHNtYWxsTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSBpZiAobGVuIDwgMTAyNCkge1xuICAgICAgcmVzID0gYmlnTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBqdW1ib011bFRvKHRoaXMsIG51bSwgb3V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIENvb2xleS1UdWtleSBhbGdvcml0aG0gZm9yIEZGVFxuICAvLyBzbGlnaHRseSByZXZpc2l0ZWQgdG8gcmVseSBvbiBsb29waW5nIGluc3RlYWQgb2YgcmVjdXJzaW9uXG5cbiAgZnVuY3Rpb24gRkZUTSAoeCwgeSkge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfVxuXG4gIEZGVE0ucHJvdG90eXBlLm1ha2VSQlQgPSBmdW5jdGlvbiBtYWtlUkJUIChOKSB7XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoTik7XG4gICAgdmFyIGwgPSBCTi5wcm90b3R5cGUuX2NvdW50Qml0cyhOKSAtIDE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIHRbaV0gPSB0aGlzLnJldkJpbihpLCBsLCBOKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdDtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGJpbmFyeS1yZXZlcnNlZCByZXByZXNlbnRhdGlvbiBvZiBgeGBcbiAgRkZUTS5wcm90b3R5cGUucmV2QmluID0gZnVuY3Rpb24gcmV2QmluICh4LCBsLCBOKSB7XG4gICAgaWYgKHggPT09IDAgfHwgeCA9PT0gTiAtIDEpIHJldHVybiB4O1xuXG4gICAgdmFyIHJiID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgcmIgfD0gKHggJiAxKSA8PCAobCAtIGkgLSAxKTtcbiAgICAgIHggPj49IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJiO1xuICB9O1xuXG4gIC8vIFBlcmZvcm1zIFwidHdlZWRsaW5nXCIgcGhhc2UsIHRoZXJlZm9yZSAnZW11bGF0aW5nJ1xuICAvLyBiZWhhdmlvdXIgb2YgdGhlIHJlY3Vyc2l2ZSBhbGdvcml0aG1cbiAgRkZUTS5wcm90b3R5cGUucGVybXV0ZSA9IGZ1bmN0aW9uIHBlcm11dGUgKHJidCwgcndzLCBpd3MsIHJ0d3MsIGl0d3MsIE4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgcnR3c1tpXSA9IHJ3c1tyYnRbaV1dO1xuICAgICAgaXR3c1tpXSA9IGl3c1tyYnRbaV1dO1xuICAgIH1cbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiB0cmFuc2Zvcm0gKHJ3cywgaXdzLCBydHdzLCBpdHdzLCBOLCByYnQpIHtcbiAgICB0aGlzLnBlcm11dGUocmJ0LCByd3MsIGl3cywgcnR3cywgaXR3cywgTik7XG5cbiAgICBmb3IgKHZhciBzID0gMTsgcyA8IE47IHMgPDw9IDEpIHtcbiAgICAgIHZhciBsID0gcyA8PCAxO1xuXG4gICAgICB2YXIgcnR3ZGYgPSBNYXRoLmNvcygyICogTWF0aC5QSSAvIGwpO1xuICAgICAgdmFyIGl0d2RmID0gTWF0aC5zaW4oMiAqIE1hdGguUEkgLyBsKTtcblxuICAgICAgZm9yICh2YXIgcCA9IDA7IHAgPCBOOyBwICs9IGwpIHtcbiAgICAgICAgdmFyIHJ0d2RmXyA9IHJ0d2RmO1xuICAgICAgICB2YXIgaXR3ZGZfID0gaXR3ZGY7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzOyBqKyspIHtcbiAgICAgICAgICB2YXIgcmUgPSBydHdzW3AgKyBqXTtcbiAgICAgICAgICB2YXIgaWUgPSBpdHdzW3AgKyBqXTtcblxuICAgICAgICAgIHZhciBybyA9IHJ0d3NbcCArIGogKyBzXTtcbiAgICAgICAgICB2YXIgaW8gPSBpdHdzW3AgKyBqICsgc107XG5cbiAgICAgICAgICB2YXIgcnggPSBydHdkZl8gKiBybyAtIGl0d2RmXyAqIGlvO1xuXG4gICAgICAgICAgaW8gPSBydHdkZl8gKiBpbyArIGl0d2RmXyAqIHJvO1xuICAgICAgICAgIHJvID0gcng7XG5cbiAgICAgICAgICBydHdzW3AgKyBqXSA9IHJlICsgcm87XG4gICAgICAgICAgaXR3c1twICsgal0gPSBpZSArIGlvO1xuXG4gICAgICAgICAgcnR3c1twICsgaiArIHNdID0gcmUgLSBybztcbiAgICAgICAgICBpdHdzW3AgKyBqICsgc10gPSBpZSAtIGlvO1xuXG4gICAgICAgICAgLyoganNoaW50IG1heGRlcHRoIDogZmFsc2UgKi9cbiAgICAgICAgICBpZiAoaiAhPT0gbCkge1xuICAgICAgICAgICAgcnggPSBydHdkZiAqIHJ0d2RmXyAtIGl0d2RmICogaXR3ZGZfO1xuXG4gICAgICAgICAgICBpdHdkZl8gPSBydHdkZiAqIGl0d2RmXyArIGl0d2RmICogcnR3ZGZfO1xuICAgICAgICAgICAgcnR3ZGZfID0gcng7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLmd1ZXNzTGVuMTNiID0gZnVuY3Rpb24gZ3Vlc3NMZW4xM2IgKG4sIG0pIHtcbiAgICB2YXIgTiA9IE1hdGgubWF4KG0sIG4pIHwgMTtcbiAgICB2YXIgb2RkID0gTiAmIDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoTiA9IE4gLyAyIHwgMDsgTjsgTiA9IE4gPj4+IDEpIHtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4gMSA8PCBpICsgMSArIG9kZDtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5jb25qdWdhdGUgPSBmdW5jdGlvbiBjb25qdWdhdGUgKHJ3cywgaXdzLCBOKSB7XG4gICAgaWYgKE4gPD0gMSkgcmV0dXJuO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOIC8gMjsgaSsrKSB7XG4gICAgICB2YXIgdCA9IHJ3c1tpXTtcblxuICAgICAgcndzW2ldID0gcndzW04gLSBpIC0gMV07XG4gICAgICByd3NbTiAtIGkgLSAxXSA9IHQ7XG5cbiAgICAgIHQgPSBpd3NbaV07XG5cbiAgICAgIGl3c1tpXSA9IC1pd3NbTiAtIGkgLSAxXTtcbiAgICAgIGl3c1tOIC0gaSAtIDFdID0gLXQ7XG4gICAgfVxuICB9O1xuXG4gIEZGVE0ucHJvdG90eXBlLm5vcm1hbGl6ZTEzYiA9IGZ1bmN0aW9uIG5vcm1hbGl6ZTEzYiAod3MsIE4pIHtcbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTiAvIDI7IGkrKykge1xuICAgICAgdmFyIHcgPSBNYXRoLnJvdW5kKHdzWzIgKiBpICsgMV0gLyBOKSAqIDB4MjAwMCArXG4gICAgICAgIE1hdGgucm91bmQod3NbMiAqIGldIC8gTikgK1xuICAgICAgICBjYXJyeTtcblxuICAgICAgd3NbaV0gPSB3ICYgMHgzZmZmZmZmO1xuXG4gICAgICBpZiAodyA8IDB4NDAwMDAwMCkge1xuICAgICAgICBjYXJyeSA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXJyeSA9IHcgLyAweDQwMDAwMDAgfCAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3cztcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5jb252ZXJ0MTNiID0gZnVuY3Rpb24gY29udmVydDEzYiAod3MsIGxlbiwgcndzLCBOKSB7XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjYXJyeSA9IGNhcnJ5ICsgKHdzW2ldIHwgMCk7XG5cbiAgICAgIHJ3c1syICogaV0gPSBjYXJyeSAmIDB4MWZmZjsgY2FycnkgPSBjYXJyeSA+Pj4gMTM7XG4gICAgICByd3NbMiAqIGkgKyAxXSA9IGNhcnJ5ICYgMHgxZmZmOyBjYXJyeSA9IGNhcnJ5ID4+PiAxMztcbiAgICB9XG5cbiAgICAvLyBQYWQgd2l0aCB6ZXJvZXNcbiAgICBmb3IgKGkgPSAyICogbGVuOyBpIDwgTjsgKytpKSB7XG4gICAgICByd3NbaV0gPSAwO1xuICAgIH1cblxuICAgIGFzc2VydChjYXJyeSA9PT0gMCk7XG4gICAgYXNzZXJ0KChjYXJyeSAmIH4weDFmZmYpID09PSAwKTtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5zdHViID0gZnVuY3Rpb24gc3R1YiAoTikge1xuICAgIHZhciBwaCA9IG5ldyBBcnJheShOKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgcGhbaV0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiBwaDtcbiAgfTtcblxuICBGRlRNLnByb3RvdHlwZS5tdWxwID0gZnVuY3Rpb24gbXVscCAoeCwgeSwgb3V0KSB7XG4gICAgdmFyIE4gPSAyICogdGhpcy5ndWVzc0xlbjEzYih4Lmxlbmd0aCwgeS5sZW5ndGgpO1xuXG4gICAgdmFyIHJidCA9IHRoaXMubWFrZVJCVChOKTtcblxuICAgIHZhciBfID0gdGhpcy5zdHViKE4pO1xuXG4gICAgdmFyIHJ3cyA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgcndzdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgaXdzdCA9IG5ldyBBcnJheShOKTtcblxuICAgIHZhciBucndzID0gbmV3IEFycmF5KE4pO1xuICAgIHZhciBucndzdCA9IG5ldyBBcnJheShOKTtcbiAgICB2YXIgbml3c3QgPSBuZXcgQXJyYXkoTik7XG5cbiAgICB2YXIgcm13cyA9IG91dC53b3JkcztcbiAgICBybXdzLmxlbmd0aCA9IE47XG5cbiAgICB0aGlzLmNvbnZlcnQxM2IoeC53b3JkcywgeC5sZW5ndGgsIHJ3cywgTik7XG4gICAgdGhpcy5jb252ZXJ0MTNiKHkud29yZHMsIHkubGVuZ3RoLCBucndzLCBOKTtcblxuICAgIHRoaXMudHJhbnNmb3JtKHJ3cywgXywgcndzdCwgaXdzdCwgTiwgcmJ0KTtcbiAgICB0aGlzLnRyYW5zZm9ybShucndzLCBfLCBucndzdCwgbml3c3QsIE4sIHJidCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdmFyIHJ4ID0gcndzdFtpXSAqIG5yd3N0W2ldIC0gaXdzdFtpXSAqIG5pd3N0W2ldO1xuICAgICAgaXdzdFtpXSA9IHJ3c3RbaV0gKiBuaXdzdFtpXSArIGl3c3RbaV0gKiBucndzdFtpXTtcbiAgICAgIHJ3c3RbaV0gPSByeDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmp1Z2F0ZShyd3N0LCBpd3N0LCBOKTtcbiAgICB0aGlzLnRyYW5zZm9ybShyd3N0LCBpd3N0LCBybXdzLCBfLCBOLCByYnQpO1xuICAgIHRoaXMuY29uanVnYXRlKHJtd3MsIF8sIE4pO1xuICAgIHRoaXMubm9ybWFsaXplMTNiKHJtd3MsIE4pO1xuXG4gICAgb3V0Lm5lZ2F0aXZlID0geC5uZWdhdGl2ZSBeIHkubmVnYXRpdmU7XG4gICAgb3V0Lmxlbmd0aCA9IHgubGVuZ3RoICsgeS5sZW5ndGg7XG4gICAgcmV0dXJuIG91dC5fc3RyaXAoKTtcbiAgfTtcblxuICAvLyBNdWx0aXBseSBgdGhpc2AgYnkgYG51bWBcbiAgQk4ucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uIG11bCAobnVtKSB7XG4gICAgdmFyIG91dCA9IG5ldyBCTihudWxsKTtcbiAgICBvdXQud29yZHMgPSBuZXcgQXJyYXkodGhpcy5sZW5ndGggKyBudW0ubGVuZ3RoKTtcbiAgICByZXR1cm4gdGhpcy5tdWxUbyhudW0sIG91dCk7XG4gIH07XG5cbiAgLy8gTXVsdGlwbHkgZW1wbG95aW5nIEZGVFxuICBCTi5wcm90b3R5cGUubXVsZiA9IGZ1bmN0aW9uIG11bGYgKG51bSkge1xuICAgIHZhciBvdXQgPSBuZXcgQk4obnVsbCk7XG4gICAgb3V0LndvcmRzID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoICsgbnVtLmxlbmd0aCk7XG4gICAgcmV0dXJuIGp1bWJvTXVsVG8odGhpcywgbnVtLCBvdXQpO1xuICB9O1xuXG4gIC8vIEluLXBsYWNlIE11bHRpcGxpY2F0aW9uXG4gIEJOLnByb3RvdHlwZS5pbXVsID0gZnVuY3Rpb24gaW11bCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhudW0sIHRoaXMpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pbXVsbiA9IGZ1bmN0aW9uIGltdWxuIChudW0pIHtcbiAgICB2YXIgaXNOZWdOdW0gPSBudW0gPCAwO1xuICAgIGlmIChpc05lZ051bSkgbnVtID0gLW51bTtcblxuICAgIGFzc2VydCh0eXBlb2YgbnVtID09PSAnbnVtYmVyJyk7XG4gICAgYXNzZXJ0KG51bSA8IDB4NDAwMDAwMCk7XG5cbiAgICAvLyBDYXJyeVxuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdyA9ICh0aGlzLndvcmRzW2ldIHwgMCkgKiBudW07XG4gICAgICB2YXIgbG8gPSAodyAmIDB4M2ZmZmZmZikgKyAoY2FycnkgJiAweDNmZmZmZmYpO1xuICAgICAgY2FycnkgPj49IDI2O1xuICAgICAgY2FycnkgKz0gKHcgLyAweDQwMDAwMDApIHwgMDtcbiAgICAgIC8vIE5PVEU6IGxvIGlzIDI3Yml0IG1heGltdW1cbiAgICAgIGNhcnJ5ICs9IGxvID4+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBsbyAmIDB4M2ZmZmZmZjtcbiAgICB9XG5cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBjYXJyeTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICAgIHRoaXMuX25vcm1TaWduKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzTmVnTnVtID8gdGhpcy5pbmVnKCkgOiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5tdWxuID0gZnVuY3Rpb24gbXVsbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihudW0pO1xuICB9O1xuXG4gIC8vIGB0aGlzYCAqIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuc3FyID0gZnVuY3Rpb24gc3FyICgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWwodGhpcyk7XG4gIH07XG5cbiAgLy8gYHRoaXNgICogYHRoaXNgIGluLXBsYWNlXG4gIEJOLnByb3RvdHlwZS5pc3FyID0gZnVuY3Rpb24gaXNxciAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpO1xuICB9O1xuXG4gIC8vIE1hdGgucG93KGB0aGlzYCwgYG51bWApXG4gIEJOLnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiBwb3cgKG51bSkge1xuICAgIHZhciB3ID0gdG9CaXRBcnJheShudW0pO1xuICAgIGlmICh3Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBCTigxKTtcblxuICAgIC8vIFNraXAgbGVhZGluZyB6ZXJvZXNcbiAgICB2YXIgcmVzID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHcubGVuZ3RoOyBpKyssIHJlcyA9IHJlcy5zcXIoKSkge1xuICAgICAgaWYgKHdbaV0gIT09IDApIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICgrK2kgPCB3Lmxlbmd0aCkge1xuICAgICAgZm9yICh2YXIgcSA9IHJlcy5zcXIoKTsgaSA8IHcubGVuZ3RoOyBpKyssIHEgPSBxLnNxcigpKSB7XG4gICAgICAgIGlmICh3W2ldID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICByZXMgPSByZXMubXVsKHEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gU2hpZnQtbGVmdCBpbi1wbGFjZVxuICBCTi5wcm90b3R5cGUuaXVzaGxuID0gZnVuY3Rpb24gaXVzaGxuIChiaXRzKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXRzID09PSAnbnVtYmVyJyAmJiBiaXRzID49IDApO1xuICAgIHZhciByID0gYml0cyAlIDI2O1xuICAgIHZhciBzID0gKGJpdHMgLSByKSAvIDI2O1xuICAgIHZhciBjYXJyeU1hc2sgPSAoMHgzZmZmZmZmID4+PiAoMjYgLSByKSkgPDwgKDI2IC0gcik7XG4gICAgdmFyIGk7XG5cbiAgICBpZiAociAhPT0gMCkge1xuICAgICAgdmFyIGNhcnJ5ID0gMDtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG5ld0NhcnJ5ID0gdGhpcy53b3Jkc1tpXSAmIGNhcnJ5TWFzaztcbiAgICAgICAgdmFyIGMgPSAoKHRoaXMud29yZHNbaV0gfCAwKSAtIG5ld0NhcnJ5KSA8PCByO1xuICAgICAgICB0aGlzLndvcmRzW2ldID0gYyB8IGNhcnJ5O1xuICAgICAgICBjYXJyeSA9IG5ld0NhcnJ5ID4+PiAoMjYgLSByKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhcnJ5KSB7XG4gICAgICAgIHRoaXMud29yZHNbaV0gPSBjYXJyeTtcbiAgICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocyAhPT0gMCkge1xuICAgICAgZm9yIChpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICB0aGlzLndvcmRzW2kgKyBzXSA9IHRoaXMud29yZHNbaV07XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBzOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGVuZ3RoICs9IHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3N0cmlwKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmlzaGxuID0gZnVuY3Rpb24gaXNobG4gKGJpdHMpIHtcbiAgICAvLyBUT0RPKGluZHV0bnkpOiBpbXBsZW1lbnQgbWVcbiAgICBhc3NlcnQodGhpcy5uZWdhdGl2ZSA9PT0gMCk7XG4gICAgcmV0dXJuIHRoaXMuaXVzaGxuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LXJpZ2h0IGluLXBsYWNlXG4gIC8vIE5PVEU6IGBoaW50YCBpcyBhIGxvd2VzdCBiaXQgYmVmb3JlIHRyYWlsaW5nIHplcm9lc1xuICAvLyBOT1RFOiBpZiBgZXh0ZW5kZWRgIGlzIHByZXNlbnQgLSBpdCB3aWxsIGJlIGZpbGxlZCB3aXRoIGRlc3Ryb3llZCBiaXRzXG4gIEJOLnByb3RvdHlwZS5pdXNocm4gPSBmdW5jdGlvbiBpdXNocm4gKGJpdHMsIGhpbnQsIGV4dGVuZGVkKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXRzID09PSAnbnVtYmVyJyAmJiBiaXRzID49IDApO1xuICAgIHZhciBoO1xuICAgIGlmIChoaW50KSB7XG4gICAgICBoID0gKGhpbnQgLSAoaGludCAlIDI2KSkgLyAyNjtcbiAgICB9IGVsc2Uge1xuICAgICAgaCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIHIgPSBiaXRzICUgMjY7XG4gICAgdmFyIHMgPSBNYXRoLm1pbigoYml0cyAtIHIpIC8gMjYsIHRoaXMubGVuZ3RoKTtcbiAgICB2YXIgbWFzayA9IDB4M2ZmZmZmZiBeICgoMHgzZmZmZmZmID4+PiByKSA8PCByKTtcbiAgICB2YXIgbWFza2VkV29yZHMgPSBleHRlbmRlZDtcblxuICAgIGggLT0gcztcbiAgICBoID0gTWF0aC5tYXgoMCwgaCk7XG5cbiAgICAvLyBFeHRlbmRlZCBtb2RlLCBjb3B5IG1hc2tlZCBwYXJ0XG4gICAgaWYgKG1hc2tlZFdvcmRzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHM7IGkrKykge1xuICAgICAgICBtYXNrZWRXb3Jkcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaV07XG4gICAgICB9XG4gICAgICBtYXNrZWRXb3Jkcy5sZW5ndGggPSBzO1xuICAgIH1cblxuICAgIGlmIChzID09PSAwKSB7XG4gICAgICAvLyBOby1vcCwgd2Ugc2hvdWxkIG5vdCBtb3ZlIGFueXRoaW5nIGF0IGFsbFxuICAgIH0gZWxzZSBpZiAodGhpcy5sZW5ndGggPiBzKSB7XG4gICAgICB0aGlzLmxlbmd0aCAtPSBzO1xuICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53b3Jkc1tpXSA9IHRoaXMud29yZHNbaSArIHNdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndvcmRzWzBdID0gMDtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAoaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwICYmIChjYXJyeSAhPT0gMCB8fCBpID49IGgpOyBpLS0pIHtcbiAgICAgIHZhciB3b3JkID0gdGhpcy53b3Jkc1tpXSB8IDA7XG4gICAgICB0aGlzLndvcmRzW2ldID0gKGNhcnJ5IDw8ICgyNiAtIHIpKSB8ICh3b3JkID4+PiByKTtcbiAgICAgIGNhcnJ5ID0gd29yZCAmIG1hc2s7XG4gICAgfVxuXG4gICAgLy8gUHVzaCBjYXJyaWVkIGJpdHMgYXMgYSBtYXNrXG4gICAgaWYgKG1hc2tlZFdvcmRzICYmIGNhcnJ5ICE9PSAwKSB7XG4gICAgICBtYXNrZWRXb3Jkcy53b3Jkc1ttYXNrZWRXb3Jkcy5sZW5ndGgrK10gPSBjYXJyeTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAwO1xuICAgICAgdGhpcy5sZW5ndGggPSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc2hybiA9IGZ1bmN0aW9uIGlzaHJuIChiaXRzLCBoaW50LCBleHRlbmRlZCkge1xuICAgIC8vIFRPRE8oaW5kdXRueSk6IGltcGxlbWVudCBtZVxuICAgIGFzc2VydCh0aGlzLm5lZ2F0aXZlID09PSAwKTtcbiAgICByZXR1cm4gdGhpcy5pdXNocm4oYml0cywgaGludCwgZXh0ZW5kZWQpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LWxlZnRcbiAgQk4ucHJvdG90eXBlLnNobG4gPSBmdW5jdGlvbiBzaGxuIChiaXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiaXRzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUudXNobG4gPSBmdW5jdGlvbiB1c2hsbiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGJpdHMpO1xuICB9O1xuXG4gIC8vIFNoaWZ0LXJpZ2h0XG4gIEJOLnByb3RvdHlwZS5zaHJuID0gZnVuY3Rpb24gc2hybiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYml0cyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnVzaHJuID0gZnVuY3Rpb24gdXNocm4gKGJpdHMpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiaXRzKTtcbiAgfTtcblxuICAvLyBUZXN0IGlmIG4gYml0IGlzIHNldFxuICBCTi5wcm90b3R5cGUudGVzdG4gPSBmdW5jdGlvbiB0ZXN0biAoYml0KSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiaXQgPT09ICdudW1iZXInICYmIGJpdCA+PSAwKTtcbiAgICB2YXIgciA9IGJpdCAlIDI2O1xuICAgIHZhciBzID0gKGJpdCAtIHIpIC8gMjY7XG4gICAgdmFyIHEgPSAxIDw8IHI7XG5cbiAgICAvLyBGYXN0IGNhc2U6IGJpdCBpcyBtdWNoIGhpZ2hlciB0aGFuIGFsbCBleGlzdGluZyB3b3Jkc1xuICAgIGlmICh0aGlzLmxlbmd0aCA8PSBzKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayBiaXQgYW5kIHJldHVyblxuICAgIHZhciB3ID0gdGhpcy53b3Jkc1tzXTtcblxuICAgIHJldHVybiAhISh3ICYgcSk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG9ubHkgbG93ZXJzIGJpdHMgb2YgbnVtYmVyIChpbi1wbGFjZSlcbiAgQk4ucHJvdG90eXBlLmltYXNrbiA9IGZ1bmN0aW9uIGltYXNrbiAoYml0cykge1xuICAgIGFzc2VydCh0eXBlb2YgYml0cyA9PT0gJ251bWJlcicgJiYgYml0cyA+PSAwKTtcbiAgICB2YXIgciA9IGJpdHMgJSAyNjtcbiAgICB2YXIgcyA9IChiaXRzIC0gcikgLyAyNjtcblxuICAgIGFzc2VydCh0aGlzLm5lZ2F0aXZlID09PSAwLCAnaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzJyk7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPD0gcykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHIgIT09IDApIHtcbiAgICAgIHMrKztcbiAgICB9XG4gICAgdGhpcy5sZW5ndGggPSBNYXRoLm1pbihzLCB0aGlzLmxlbmd0aCk7XG5cbiAgICBpZiAociAhPT0gMCkge1xuICAgICAgdmFyIG1hc2sgPSAweDNmZmZmZmYgXiAoKDB4M2ZmZmZmZiA+Pj4gcikgPDwgcik7XG4gICAgICB0aGlzLndvcmRzW3RoaXMubGVuZ3RoIC0gMV0gJj0gbWFzaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbMF0gPSAwO1xuICAgICAgdGhpcy5sZW5ndGggPSAxO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIC8vIFJldHVybiBvbmx5IGxvd2VycyBiaXRzIG9mIG51bWJlclxuICBCTi5wcm90b3R5cGUubWFza24gPSBmdW5jdGlvbiBtYXNrbiAoYml0cykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGJpdHMpO1xuICB9O1xuXG4gIC8vIEFkZCBwbGFpbiBudW1iZXIgYG51bWAgdG8gYHRoaXNgXG4gIEJOLnByb3RvdHlwZS5pYWRkbiA9IGZ1bmN0aW9uIGlhZGRuIChudW0pIHtcbiAgICBhc3NlcnQodHlwZW9mIG51bSA9PT0gJ251bWJlcicpO1xuICAgIGFzc2VydChudW0gPCAweDQwMDAwMDApO1xuICAgIGlmIChudW0gPCAwKSByZXR1cm4gdGhpcy5pc3VibigtbnVtKTtcblxuICAgIC8vIFBvc3NpYmxlIHNpZ24gY2hhbmdlXG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMSAmJiAodGhpcy53b3Jkc1swXSB8IDApIDw9IG51bSkge1xuICAgICAgICB0aGlzLndvcmRzWzBdID0gbnVtIC0gKHRoaXMud29yZHNbMF0gfCAwKTtcbiAgICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMDtcbiAgICAgIHRoaXMuaXN1Ym4obnVtKTtcbiAgICAgIHRoaXMubmVnYXRpdmUgPSAxO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhvdXQgY2hlY2tzXG4gICAgcmV0dXJuIHRoaXMuX2lhZGRuKG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pYWRkbiA9IGZ1bmN0aW9uIF9pYWRkbiAobnVtKSB7XG4gICAgdGhpcy53b3Jkc1swXSArPSBudW07XG5cbiAgICAvLyBDYXJyeVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGggJiYgdGhpcy53b3Jkc1tpXSA+PSAweDQwMDAwMDA7IGkrKykge1xuICAgICAgdGhpcy53b3Jkc1tpXSAtPSAweDQwMDAwMDA7XG4gICAgICBpZiAoaSA9PT0gdGhpcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRoaXMud29yZHNbaSArIDFdID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud29yZHNbaSArIDFdKys7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubGVuZ3RoID0gTWF0aC5tYXgodGhpcy5sZW5ndGgsIGkgKyAxKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIC8vIFN1YnRyYWN0IHBsYWluIG51bWJlciBgbnVtYCBmcm9tIGB0aGlzYFxuICBCTi5wcm90b3R5cGUuaXN1Ym4gPSBmdW5jdGlvbiBpc3VibiAobnVtKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBudW0gPT09ICdudW1iZXInKTtcbiAgICBhc3NlcnQobnVtIDwgMHg0MDAwMDAwKTtcbiAgICBpZiAobnVtIDwgMCkgcmV0dXJuIHRoaXMuaWFkZG4oLW51bSk7XG5cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgdGhpcy5uZWdhdGl2ZSA9IDA7XG4gICAgICB0aGlzLmlhZGRuKG51bSk7XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMud29yZHNbMF0gLT0gbnVtO1xuXG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXMud29yZHNbMF0gPCAwKSB7XG4gICAgICB0aGlzLndvcmRzWzBdID0gLXRoaXMud29yZHNbMF07XG4gICAgICB0aGlzLm5lZ2F0aXZlID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2FycnlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGggJiYgdGhpcy53b3Jkc1tpXSA8IDA7IGkrKykge1xuICAgICAgICB0aGlzLndvcmRzW2ldICs9IDB4NDAwMDAwMDtcbiAgICAgICAgdGhpcy53b3Jkc1tpICsgMV0gLT0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc3RyaXAoKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuYWRkbiA9IGZ1bmN0aW9uIGFkZG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaWFkZG4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuc3VibiA9IGZ1bmN0aW9uIHN1Ym4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4obnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuaWFicyA9IGZ1bmN0aW9uIGlhYnMgKCkge1xuICAgIHRoaXMubmVnYXRpdmUgPSAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uIGFicyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9pc2hsbnN1Ym11bCA9IGZ1bmN0aW9uIF9pc2hsbnN1Ym11bCAobnVtLCBtdWwsIHNoaWZ0KSB7XG4gICAgdmFyIGxlbiA9IG51bS5sZW5ndGggKyBzaGlmdDtcbiAgICB2YXIgaTtcblxuICAgIHRoaXMuX2V4cGFuZChsZW4pO1xuXG4gICAgdmFyIHc7XG4gICAgdmFyIGNhcnJ5ID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbnVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3ID0gKHRoaXMud29yZHNbaSArIHNoaWZ0XSB8IDApICsgY2Fycnk7XG4gICAgICB2YXIgcmlnaHQgPSAobnVtLndvcmRzW2ldIHwgMCkgKiBtdWw7XG4gICAgICB3IC09IHJpZ2h0ICYgMHgzZmZmZmZmO1xuICAgICAgY2FycnkgPSAodyA+PiAyNikgLSAoKHJpZ2h0IC8gMHg0MDAwMDAwKSB8IDApO1xuICAgICAgdGhpcy53b3Jkc1tpICsgc2hpZnRdID0gdyAmIDB4M2ZmZmZmZjtcbiAgICB9XG4gICAgZm9yICg7IGkgPCB0aGlzLmxlbmd0aCAtIHNoaWZ0OyBpKyspIHtcbiAgICAgIHcgPSAodGhpcy53b3Jkc1tpICsgc2hpZnRdIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaSArIHNoaWZ0XSA9IHcgJiAweDNmZmZmZmY7XG4gICAgfVxuXG4gICAgaWYgKGNhcnJ5ID09PSAwKSByZXR1cm4gdGhpcy5fc3RyaXAoKTtcblxuICAgIC8vIFN1YnRyYWN0aW9uIG92ZXJmbG93XG4gICAgYXNzZXJ0KGNhcnJ5ID09PSAtMSk7XG4gICAgY2FycnkgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3ID0gLSh0aGlzLndvcmRzW2ldIHwgMCkgKyBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+PiAyNjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB3ICYgMHgzZmZmZmZmO1xuICAgIH1cbiAgICB0aGlzLm5lZ2F0aXZlID0gMTtcblxuICAgIHJldHVybiB0aGlzLl9zdHJpcCgpO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5fd29yZERpdiA9IGZ1bmN0aW9uIF93b3JkRGl2IChudW0sIG1vZGUpIHtcbiAgICB2YXIgc2hpZnQgPSB0aGlzLmxlbmd0aCAtIG51bS5sZW5ndGg7XG5cbiAgICB2YXIgYSA9IHRoaXMuY2xvbmUoKTtcbiAgICB2YXIgYiA9IG51bTtcblxuICAgIC8vIE5vcm1hbGl6ZVxuICAgIHZhciBiaGkgPSBiLndvcmRzW2IubGVuZ3RoIC0gMV0gfCAwO1xuICAgIHZhciBiaGlCaXRzID0gdGhpcy5fY291bnRCaXRzKGJoaSk7XG4gICAgc2hpZnQgPSAyNiAtIGJoaUJpdHM7XG4gICAgaWYgKHNoaWZ0ICE9PSAwKSB7XG4gICAgICBiID0gYi51c2hsbihzaGlmdCk7XG4gICAgICBhLml1c2hsbihzaGlmdCk7XG4gICAgICBiaGkgPSBiLndvcmRzW2IubGVuZ3RoIC0gMV0gfCAwO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgcXVvdGllbnRcbiAgICB2YXIgbSA9IGEubGVuZ3RoIC0gYi5sZW5ndGg7XG4gICAgdmFyIHE7XG5cbiAgICBpZiAobW9kZSAhPT0gJ21vZCcpIHtcbiAgICAgIHEgPSBuZXcgQk4obnVsbCk7XG4gICAgICBxLmxlbmd0aCA9IG0gKyAxO1xuICAgICAgcS53b3JkcyA9IG5ldyBBcnJheShxLmxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcS53b3Jkc1tpXSA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRpZmYgPSBhLmNsb25lKCkuX2lzaGxuc3VibXVsKGIsIDEsIG0pO1xuICAgIGlmIChkaWZmLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICBhID0gZGlmZjtcbiAgICAgIGlmIChxKSB7XG4gICAgICAgIHEud29yZHNbbV0gPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGogPSBtIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgIHZhciBxaiA9IChhLndvcmRzW2IubGVuZ3RoICsgal0gfCAwKSAqIDB4NDAwMDAwMCArXG4gICAgICAgIChhLndvcmRzW2IubGVuZ3RoICsgaiAtIDFdIHwgMCk7XG5cbiAgICAgIC8vIE5PVEU6IChxaiAvIGJoaSkgaXMgKDB4M2ZmZmZmZiAqIDB4NDAwMDAwMCArIDB4M2ZmZmZmZikgLyAweDIwMDAwMDAgbWF4XG4gICAgICAvLyAoMHg3ZmZmZmZmKVxuICAgICAgcWogPSBNYXRoLm1pbigocWogLyBiaGkpIHwgMCwgMHgzZmZmZmZmKTtcblxuICAgICAgYS5faXNobG5zdWJtdWwoYiwgcWosIGopO1xuICAgICAgd2hpbGUgKGEubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgcWotLTtcbiAgICAgICAgYS5uZWdhdGl2ZSA9IDA7XG4gICAgICAgIGEuX2lzaGxuc3VibXVsKGIsIDEsIGopO1xuICAgICAgICBpZiAoIWEuaXNaZXJvKCkpIHtcbiAgICAgICAgICBhLm5lZ2F0aXZlIF49IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChxKSB7XG4gICAgICAgIHEud29yZHNbal0gPSBxajtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHEpIHtcbiAgICAgIHEuX3N0cmlwKCk7XG4gICAgfVxuICAgIGEuX3N0cmlwKCk7XG5cbiAgICAvLyBEZW5vcm1hbGl6ZVxuICAgIGlmIChtb2RlICE9PSAnZGl2JyAmJiBzaGlmdCAhPT0gMCkge1xuICAgICAgYS5pdXNocm4oc2hpZnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkaXY6IHEgfHwgbnVsbCxcbiAgICAgIG1vZDogYVxuICAgIH07XG4gIH07XG5cbiAgLy8gTk9URTogMSkgYG1vZGVgIGNhbiBiZSBzZXQgdG8gYG1vZGAgdG8gcmVxdWVzdCBtb2Qgb25seSxcbiAgLy8gICAgICAgdG8gYGRpdmAgdG8gcmVxdWVzdCBkaXYgb25seSwgb3IgYmUgYWJzZW50IHRvXG4gIC8vICAgICAgIHJlcXVlc3QgYm90aCBkaXYgJiBtb2RcbiAgLy8gICAgICAgMikgYHBvc2l0aXZlYCBpcyB0cnVlIGlmIHVuc2lnbmVkIG1vZCBpcyByZXF1ZXN0ZWRcbiAgQk4ucHJvdG90eXBlLmRpdm1vZCA9IGZ1bmN0aW9uIGRpdm1vZCAobnVtLCBtb2RlLCBwb3NpdGl2ZSkge1xuICAgIGFzc2VydCghbnVtLmlzWmVybygpKTtcblxuICAgIGlmICh0aGlzLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IG5ldyBCTigwKSxcbiAgICAgICAgbW9kOiBuZXcgQk4oMClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRpdiwgbW9kLCByZXM7XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDAgJiYgbnVtLm5lZ2F0aXZlID09PSAwKSB7XG4gICAgICByZXMgPSB0aGlzLm5lZygpLmRpdm1vZChudW0sIG1vZGUpO1xuXG4gICAgICBpZiAobW9kZSAhPT0gJ21vZCcpIHtcbiAgICAgICAgZGl2ID0gcmVzLmRpdi5uZWcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGUgIT09ICdkaXYnKSB7XG4gICAgICAgIG1vZCA9IHJlcy5tb2QubmVnKCk7XG4gICAgICAgIGlmIChwb3NpdGl2ZSAmJiBtb2QubmVnYXRpdmUgIT09IDApIHtcbiAgICAgICAgICBtb2QuaWFkZChudW0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRpdjogZGl2LFxuICAgICAgICBtb2Q6IG1vZFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBudW0ubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMuZGl2bW9kKG51bS5uZWcoKSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnbW9kJykge1xuICAgICAgICBkaXYgPSByZXMuZGl2Lm5lZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IGRpdixcbiAgICAgICAgbW9kOiByZXMubW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICgodGhpcy5uZWdhdGl2ZSAmIG51bS5uZWdhdGl2ZSkgIT09IDApIHtcbiAgICAgIHJlcyA9IHRoaXMubmVnKCkuZGl2bW9kKG51bS5uZWcoKSwgbW9kZSk7XG5cbiAgICAgIGlmIChtb2RlICE9PSAnZGl2Jykge1xuICAgICAgICBtb2QgPSByZXMubW9kLm5lZygpO1xuICAgICAgICBpZiAocG9zaXRpdmUgJiYgbW9kLm5lZ2F0aXZlICE9PSAwKSB7XG4gICAgICAgICAgbW9kLmlzdWIobnVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IHJlcy5kaXYsXG4gICAgICAgIG1vZDogbW9kXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEJvdGggbnVtYmVycyBhcmUgcG9zaXRpdmUgYXQgdGhpcyBwb2ludFxuXG4gICAgLy8gU3RyaXAgYm90aCBudW1iZXJzIHRvIGFwcHJveGltYXRlIHNoaWZ0IHZhbHVlXG4gICAgaWYgKG51bS5sZW5ndGggPiB0aGlzLmxlbmd0aCB8fCB0aGlzLmNtcChudW0pIDwgMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGl2OiBuZXcgQk4oMCksXG4gICAgICAgIG1vZDogdGhpc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBWZXJ5IHNob3J0IHJlZHVjdGlvblxuICAgIGlmIChudW0ubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAobW9kZSA9PT0gJ2RpdicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXY6IHRoaXMuZGl2bihudW0ud29yZHNbMF0pLFxuICAgICAgICAgIG1vZDogbnVsbFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kZSA9PT0gJ21vZCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXY6IG51bGwsXG4gICAgICAgICAgbW9kOiBuZXcgQk4odGhpcy5tb2RybihudW0ud29yZHNbMF0pKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXY6IHRoaXMuZGl2bihudW0ud29yZHNbMF0pLFxuICAgICAgICBtb2Q6IG5ldyBCTih0aGlzLm1vZHJuKG51bS53b3Jkc1swXSkpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl93b3JkRGl2KG51bSwgbW9kZSk7XG4gIH07XG5cbiAgLy8gRmluZCBgdGhpc2AgLyBgbnVtYFxuICBCTi5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gZGl2IChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5kaXZtb2QobnVtLCAnZGl2JywgZmFsc2UpLmRpdjtcbiAgfTtcblxuICAvLyBGaW5kIGB0aGlzYCAlIGBudW1gXG4gIEJOLnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiBtb2QgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmRpdm1vZChudW0sICdtb2QnLCBmYWxzZSkubW9kO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS51bW9kID0gZnVuY3Rpb24gdW1vZCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZGl2bW9kKG51bSwgJ21vZCcsIHRydWUpLm1vZDtcbiAgfTtcblxuICAvLyBGaW5kIFJvdW5kKGB0aGlzYCAvIGBudW1gKVxuICBCTi5wcm90b3R5cGUuZGl2Um91bmQgPSBmdW5jdGlvbiBkaXZSb3VuZCAobnVtKSB7XG4gICAgdmFyIGRtID0gdGhpcy5kaXZtb2QobnVtKTtcblxuICAgIC8vIEZhc3QgY2FzZSAtIGV4YWN0IGRpdmlzaW9uXG4gICAgaWYgKGRtLm1vZC5pc1plcm8oKSkgcmV0dXJuIGRtLmRpdjtcblxuICAgIHZhciBtb2QgPSBkbS5tb2QuYWJzKCk7XG5cbiAgICB2YXIgaGFsZiA9IG51bS5hYnMoKS5pdXNocm4oMSk7XG4gICAgdmFyIHIyID0gbnVtLndvcmRzWzBdICYgMTtcbiAgICB2YXIgY21wID0gbW9kLmNtcChoYWxmKTtcblxuICAgIC8vIFJvdW5kIGRvd25cbiAgICBpZiAoY21wIDwgMCB8fCAocjIgPT09IDEgJiYgY21wID09PSAwKSkgcmV0dXJuIGRtLmRpdjtcblxuICAgIC8vIFJvdW5kIHVwLCBhd2F5IGZyb20gemVyb1xuICAgIHZhciB1cCA9IG5ldyBCTigxKTtcbiAgICB1cC5uZWdhdGl2ZSA9IHRoaXMubmVnYXRpdmUgXiBudW0ubmVnYXRpdmU7XG4gICAgcmV0dXJuIGRtLmRpdi5pYWRkKHVwKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubW9kcm4gPSBmdW5jdGlvbiBtb2RybiAobnVtKSB7XG4gICAgdmFyIGlzTmVnTnVtID0gbnVtIDwgMDtcbiAgICBpZiAoaXNOZWdOdW0pIG51bSA9IC1udW07XG5cbiAgICBhc3NlcnQobnVtIDw9IDB4M2ZmZmZmZik7XG4gICAgdmFyIHAgPSAoMSA8PCAyNikgJSBudW07XG5cbiAgICB2YXIgYWNjID0gMDtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgYWNjID0gKHAgKiBhY2MgKyAodGhpcy53b3Jkc1tpXSB8IDApKSAlIG51bTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNOZWdOdW0gPyAtYWNjIDogYWNjO1xuICB9O1xuXG4gIC8vIFdBUk5JTkc6IERFUFJFQ0FURURcbiAgQk4ucHJvdG90eXBlLm1vZG4gPSBmdW5jdGlvbiBtb2RuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5tb2RybihudW0pO1xuICB9O1xuXG4gIC8vIEluLXBsYWNlIGRpdmlzaW9uIGJ5IG51bWJlclxuICBCTi5wcm90b3R5cGUuaWRpdm4gPSBmdW5jdGlvbiBpZGl2biAobnVtKSB7XG4gICAgdmFyIGlzTmVnTnVtID0gbnVtIDwgMDtcbiAgICBpZiAoaXNOZWdOdW0pIG51bSA9IC1udW07XG5cbiAgICBhc3NlcnQobnVtIDw9IDB4M2ZmZmZmZik7XG5cbiAgICB2YXIgY2FycnkgPSAwO1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgdyA9ICh0aGlzLndvcmRzW2ldIHwgMCkgKyBjYXJyeSAqIDB4NDAwMDAwMDtcbiAgICAgIHRoaXMud29yZHNbaV0gPSAodyAvIG51bSkgfCAwO1xuICAgICAgY2FycnkgPSB3ICUgbnVtO1xuICAgIH1cblxuICAgIHRoaXMuX3N0cmlwKCk7XG4gICAgcmV0dXJuIGlzTmVnTnVtID8gdGhpcy5pbmVnKCkgOiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5kaXZuID0gZnVuY3Rpb24gZGl2biAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5lZ2NkID0gZnVuY3Rpb24gZWdjZCAocCkge1xuICAgIGFzc2VydChwLm5lZ2F0aXZlID09PSAwKTtcbiAgICBhc3NlcnQoIXAuaXNaZXJvKCkpO1xuXG4gICAgdmFyIHggPSB0aGlzO1xuICAgIHZhciB5ID0gcC5jbG9uZSgpO1xuXG4gICAgaWYgKHgubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIHggPSB4LnVtb2QocCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSB4LmNsb25lKCk7XG4gICAgfVxuXG4gICAgLy8gQSAqIHggKyBCICogeSA9IHhcbiAgICB2YXIgQSA9IG5ldyBCTigxKTtcbiAgICB2YXIgQiA9IG5ldyBCTigwKTtcblxuICAgIC8vIEMgKiB4ICsgRCAqIHkgPSB5XG4gICAgdmFyIEMgPSBuZXcgQk4oMCk7XG4gICAgdmFyIEQgPSBuZXcgQk4oMSk7XG5cbiAgICB2YXIgZyA9IDA7XG5cbiAgICB3aGlsZSAoeC5pc0V2ZW4oKSAmJiB5LmlzRXZlbigpKSB7XG4gICAgICB4Lml1c2hybigxKTtcbiAgICAgIHkuaXVzaHJuKDEpO1xuICAgICAgKytnO1xuICAgIH1cblxuICAgIHZhciB5cCA9IHkuY2xvbmUoKTtcbiAgICB2YXIgeHAgPSB4LmNsb25lKCk7XG5cbiAgICB3aGlsZSAoIXguaXNaZXJvKCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpbSA9IDE7ICh4LndvcmRzWzBdICYgaW0pID09PSAwICYmIGkgPCAyNjsgKytpLCBpbSA8PD0gMSk7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgeC5pdXNocm4oaSk7XG4gICAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKEEuaXNPZGQoKSB8fCBCLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIEEuaWFkZCh5cCk7XG4gICAgICAgICAgICBCLmlzdWIoeHApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEEuaXVzaHJuKDEpO1xuICAgICAgICAgIEIuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGogPSAwLCBqbSA9IDE7ICh5LndvcmRzWzBdICYgam0pID09PSAwICYmIGogPCAyNjsgKytqLCBqbSA8PD0gMSk7XG4gICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgeS5pdXNocm4oaik7XG4gICAgICAgIHdoaWxlIChqLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKEMuaXNPZGQoKSB8fCBELmlzT2RkKCkpIHtcbiAgICAgICAgICAgIEMuaWFkZCh5cCk7XG4gICAgICAgICAgICBELmlzdWIoeHApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIEMuaXVzaHJuKDEpO1xuICAgICAgICAgIEQuaXVzaHJuKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh4LmNtcCh5KSA+PSAwKSB7XG4gICAgICAgIHguaXN1Yih5KTtcbiAgICAgICAgQS5pc3ViKEMpO1xuICAgICAgICBCLmlzdWIoRCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB5LmlzdWIoeCk7XG4gICAgICAgIEMuaXN1YihBKTtcbiAgICAgICAgRC5pc3ViKEIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhOiBDLFxuICAgICAgYjogRCxcbiAgICAgIGdjZDogeS5pdXNobG4oZylcbiAgICB9O1xuICB9O1xuXG4gIC8vIFRoaXMgaXMgcmVkdWNlZCBpbmNhcm5hdGlvbiBvZiB0aGUgYmluYXJ5IEVFQVxuICAvLyBhYm92ZSwgZGVzaWduYXRlZCB0byBpbnZlcnQgbWVtYmVycyBvZiB0aGVcbiAgLy8gX3ByaW1lXyBmaWVsZHMgRihwKSBhdCBhIG1heGltYWwgc3BlZWRcbiAgQk4ucHJvdG90eXBlLl9pbnZtcCA9IGZ1bmN0aW9uIF9pbnZtcCAocCkge1xuICAgIGFzc2VydChwLm5lZ2F0aXZlID09PSAwKTtcbiAgICBhc3NlcnQoIXAuaXNaZXJvKCkpO1xuXG4gICAgdmFyIGEgPSB0aGlzO1xuICAgIHZhciBiID0gcC5jbG9uZSgpO1xuXG4gICAgaWYgKGEubmVnYXRpdmUgIT09IDApIHtcbiAgICAgIGEgPSBhLnVtb2QocCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSBhLmNsb25lKCk7XG4gICAgfVxuXG4gICAgdmFyIHgxID0gbmV3IEJOKDEpO1xuICAgIHZhciB4MiA9IG5ldyBCTigwKTtcblxuICAgIHZhciBkZWx0YSA9IGIuY2xvbmUoKTtcblxuICAgIHdoaWxlIChhLmNtcG4oMSkgPiAwICYmIGIuY21wbigxKSA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBpbSA9IDE7IChhLndvcmRzWzBdICYgaW0pID09PSAwICYmIGkgPCAyNjsgKytpLCBpbSA8PD0gMSk7XG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgYS5pdXNocm4oaSk7XG4gICAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgICAgaWYgKHgxLmlzT2RkKCkpIHtcbiAgICAgICAgICAgIHgxLmlhZGQoZGVsdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHgxLml1c2hybigxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBqID0gMCwgam0gPSAxOyAoYi53b3Jkc1swXSAmIGptKSA9PT0gMCAmJiBqIDwgMjY7ICsraiwgam0gPDw9IDEpO1xuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIGIuaXVzaHJuKGopO1xuICAgICAgICB3aGlsZSAoai0tID4gMCkge1xuICAgICAgICAgIGlmICh4Mi5pc09kZCgpKSB7XG4gICAgICAgICAgICB4Mi5pYWRkKGRlbHRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB4Mi5pdXNocm4oMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGEuY21wKGIpID49IDApIHtcbiAgICAgICAgYS5pc3ViKGIpO1xuICAgICAgICB4MS5pc3ViKHgyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGIuaXN1YihhKTtcbiAgICAgICAgeDIuaXN1Yih4MSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlcztcbiAgICBpZiAoYS5jbXBuKDEpID09PSAwKSB7XG4gICAgICByZXMgPSB4MTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0geDI7XG4gICAgfVxuXG4gICAgaWYgKHJlcy5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzLmlhZGQocCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ2NkID0gZnVuY3Rpb24gZ2NkIChudW0pIHtcbiAgICBpZiAodGhpcy5pc1plcm8oKSkgcmV0dXJuIG51bS5hYnMoKTtcbiAgICBpZiAobnVtLmlzWmVybygpKSByZXR1cm4gdGhpcy5hYnMoKTtcblxuICAgIHZhciBhID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBiID0gbnVtLmNsb25lKCk7XG4gICAgYS5uZWdhdGl2ZSA9IDA7XG4gICAgYi5uZWdhdGl2ZSA9IDA7XG5cbiAgICAvLyBSZW1vdmUgY29tbW9uIGZhY3RvciBvZiB0d29cbiAgICBmb3IgKHZhciBzaGlmdCA9IDA7IGEuaXNFdmVuKCkgJiYgYi5pc0V2ZW4oKTsgc2hpZnQrKykge1xuICAgICAgYS5pdXNocm4oMSk7XG4gICAgICBiLml1c2hybigxKTtcbiAgICB9XG5cbiAgICBkbyB7XG4gICAgICB3aGlsZSAoYS5pc0V2ZW4oKSkge1xuICAgICAgICBhLml1c2hybigxKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChiLmlzRXZlbigpKSB7XG4gICAgICAgIGIuaXVzaHJuKDEpO1xuICAgICAgfVxuXG4gICAgICB2YXIgciA9IGEuY21wKGIpO1xuICAgICAgaWYgKHIgPCAwKSB7XG4gICAgICAgIC8vIFN3YXAgYGFgIGFuZCBgYmAgdG8gbWFrZSBgYWAgYWx3YXlzIGJpZ2dlciB0aGFuIGBiYFxuICAgICAgICB2YXIgdCA9IGE7XG4gICAgICAgIGEgPSBiO1xuICAgICAgICBiID0gdDtcbiAgICAgIH0gZWxzZSBpZiAociA9PT0gMCB8fCBiLmNtcG4oMSkgPT09IDApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGEuaXN1YihiKTtcbiAgICB9IHdoaWxlICh0cnVlKTtcblxuICAgIHJldHVybiBiLml1c2hsbihzaGlmdCk7XG4gIH07XG5cbiAgLy8gSW52ZXJ0IG51bWJlciBpbiB0aGUgZmllbGQgRihudW0pXG4gIEJOLnByb3RvdHlwZS5pbnZtID0gZnVuY3Rpb24gaW52bSAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZWdjZChudW0pLmEudW1vZChudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc0V2ZW4gPSBmdW5jdGlvbiBpc0V2ZW4gKCkge1xuICAgIHJldHVybiAodGhpcy53b3Jkc1swXSAmIDEpID09PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc09kZCA9IGZ1bmN0aW9uIGlzT2RkICgpIHtcbiAgICByZXR1cm4gKHRoaXMud29yZHNbMF0gJiAxKSA9PT0gMTtcbiAgfTtcblxuICAvLyBBbmQgZmlyc3Qgd29yZCBhbmQgbnVtXG4gIEJOLnByb3RvdHlwZS5hbmRsbiA9IGZ1bmN0aW9uIGFuZGxuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy53b3Jkc1swXSAmIG51bTtcbiAgfTtcblxuICAvLyBJbmNyZW1lbnQgYXQgdGhlIGJpdCBwb3NpdGlvbiBpbi1saW5lXG4gIEJOLnByb3RvdHlwZS5iaW5jbiA9IGZ1bmN0aW9uIGJpbmNuIChiaXQpIHtcbiAgICBhc3NlcnQodHlwZW9mIGJpdCA9PT0gJ251bWJlcicpO1xuICAgIHZhciByID0gYml0ICUgMjY7XG4gICAgdmFyIHMgPSAoYml0IC0gcikgLyAyNjtcbiAgICB2YXIgcSA9IDEgPDwgcjtcblxuICAgIC8vIEZhc3QgY2FzZTogYml0IGlzIG11Y2ggaGlnaGVyIHRoYW4gYWxsIGV4aXN0aW5nIHdvcmRzXG4gICAgaWYgKHRoaXMubGVuZ3RoIDw9IHMpIHtcbiAgICAgIHRoaXMuX2V4cGFuZChzICsgMSk7XG4gICAgICB0aGlzLndvcmRzW3NdIHw9IHE7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBBZGQgYml0IGFuZCBwcm9wYWdhdGUsIGlmIG5lZWRlZFxuICAgIHZhciBjYXJyeSA9IHE7XG4gICAgZm9yICh2YXIgaSA9IHM7IGNhcnJ5ICE9PSAwICYmIGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdyA9IHRoaXMud29yZHNbaV0gfCAwO1xuICAgICAgdyArPSBjYXJyeTtcbiAgICAgIGNhcnJ5ID0gdyA+Pj4gMjY7XG4gICAgICB3ICY9IDB4M2ZmZmZmZjtcbiAgICAgIHRoaXMud29yZHNbaV0gPSB3O1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIHRoaXMud29yZHNbaV0gPSBjYXJyeTtcbiAgICAgIHRoaXMubGVuZ3RoKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiBpc1plcm8gKCkge1xuICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLndvcmRzWzBdID09PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5jbXBuID0gZnVuY3Rpb24gY21wbiAobnVtKSB7XG4gICAgdmFyIG5lZ2F0aXZlID0gbnVtIDwgMDtcblxuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwICYmICFuZWdhdGl2ZSkgcmV0dXJuIC0xO1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlID09PSAwICYmIG5lZ2F0aXZlKSByZXR1cm4gMTtcblxuICAgIHRoaXMuX3N0cmlwKCk7XG5cbiAgICB2YXIgcmVzO1xuICAgIGlmICh0aGlzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJlcyA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChuZWdhdGl2ZSkge1xuICAgICAgICBudW0gPSAtbnVtO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQobnVtIDw9IDB4M2ZmZmZmZiwgJ051bWJlciBpcyB0b28gYmlnJyk7XG5cbiAgICAgIHZhciB3ID0gdGhpcy53b3Jkc1swXSB8IDA7XG4gICAgICByZXMgPSB3ID09PSBudW0gPyAwIDogdyA8IG51bSA/IC0xIDogMTtcbiAgICB9XG4gICAgaWYgKHRoaXMubmVnYXRpdmUgIT09IDApIHJldHVybiAtcmVzIHwgMDtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIC8vIENvbXBhcmUgdHdvIG51bWJlcnMgYW5kIHJldHVybjpcbiAgLy8gMSAtIGlmIGB0aGlzYCA+IGBudW1gXG4gIC8vIDAgLSBpZiBgdGhpc2AgPT0gYG51bWBcbiAgLy8gLTEgLSBpZiBgdGhpc2AgPCBgbnVtYFxuICBCTi5wcm90b3R5cGUuY21wID0gZnVuY3Rpb24gY21wIChudW0pIHtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSAhPT0gMCAmJiBudW0ubmVnYXRpdmUgPT09IDApIHJldHVybiAtMTtcbiAgICBpZiAodGhpcy5uZWdhdGl2ZSA9PT0gMCAmJiBudW0ubmVnYXRpdmUgIT09IDApIHJldHVybiAxO1xuXG4gICAgdmFyIHJlcyA9IHRoaXMudWNtcChudW0pO1xuICAgIGlmICh0aGlzLm5lZ2F0aXZlICE9PSAwKSByZXR1cm4gLXJlcyB8IDA7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBVbnNpZ25lZCBjb21wYXJpc29uXG4gIEJOLnByb3RvdHlwZS51Y21wID0gZnVuY3Rpb24gdWNtcCAobnVtKSB7XG4gICAgLy8gQXQgdGhpcyBwb2ludCBib3RoIG51bWJlcnMgaGF2ZSB0aGUgc2FtZSBzaWduXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbnVtLmxlbmd0aCkgcmV0dXJuIDE7XG4gICAgaWYgKHRoaXMubGVuZ3RoIDwgbnVtLmxlbmd0aCkgcmV0dXJuIC0xO1xuXG4gICAgdmFyIHJlcyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBhID0gdGhpcy53b3Jkc1tpXSB8IDA7XG4gICAgICB2YXIgYiA9IG51bS53b3Jkc1tpXSB8IDA7XG5cbiAgICAgIGlmIChhID09PSBiKSBjb250aW51ZTtcbiAgICAgIGlmIChhIDwgYikge1xuICAgICAgICByZXMgPSAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYSA+IGIpIHtcbiAgICAgICAgcmVzID0gMTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5ndG4gPSBmdW5jdGlvbiBndG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA9PT0gMTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ3QgPSBmdW5jdGlvbiBndCAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wKG51bSkgPT09IDE7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmd0ZW4gPSBmdW5jdGlvbiBndGVuIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXBuKG51bSkgPj0gMDtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZ3RlID0gZnVuY3Rpb24gZ3RlIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA+PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5sdG4gPSBmdW5jdGlvbiBsdG4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA9PT0gLTE7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmx0ID0gZnVuY3Rpb24gbHQgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pID09PSAtMTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUubHRlbiA9IGZ1bmN0aW9uIGx0ZW4gKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcG4obnVtKSA8PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5sdGUgPSBmdW5jdGlvbiBsdGUgKG51bSkge1xuICAgIHJldHVybiB0aGlzLmNtcChudW0pIDw9IDA7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmVxbiA9IGZ1bmN0aW9uIGVxbiAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuY21wbihudW0pID09PSAwO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5lcSA9IGZ1bmN0aW9uIGVxIChudW0pIHtcbiAgICByZXR1cm4gdGhpcy5jbXAobnVtKSA9PT0gMDtcbiAgfTtcblxuICAvL1xuICAvLyBBIHJlZHVjZSBjb250ZXh0LCBjb3VsZCBiZSB1c2luZyBtb250Z29tZXJ5IG9yIHNvbWV0aGluZyBiZXR0ZXIsIGRlcGVuZGluZ1xuICAvLyBvbiB0aGUgYG1gIGl0c2VsZi5cbiAgLy9cbiAgQk4ucmVkID0gZnVuY3Rpb24gcmVkIChudW0pIHtcbiAgICByZXR1cm4gbmV3IFJlZChudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS50b1JlZCA9IGZ1bmN0aW9uIHRvUmVkIChjdHgpIHtcbiAgICBhc3NlcnQoIXRoaXMucmVkLCAnQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCcpO1xuICAgIGFzc2VydCh0aGlzLm5lZ2F0aXZlID09PSAwLCAncmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMnKTtcbiAgICByZXR1cm4gY3R4LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoY3R4KTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUuZnJvbVJlZCA9IGZ1bmN0aW9uIGZyb21SZWQgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ2Zyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuY29udmVydEZyb20odGhpcyk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLl9mb3JjZVJlZCA9IGZ1bmN0aW9uIF9mb3JjZVJlZCAoY3R4KSB7XG4gICAgdGhpcy5yZWQgPSBjdHg7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLmZvcmNlUmVkID0gZnVuY3Rpb24gZm9yY2VSZWQgKGN0eCkge1xuICAgIGFzc2VydCghdGhpcy5yZWQsICdBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0Jyk7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcmNlUmVkKGN0eCk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZEFkZCA9IGZ1bmN0aW9uIHJlZEFkZCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHJldHVybiB0aGlzLnJlZC5hZGQodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSUFkZCA9IGZ1bmN0aW9uIHJlZElBZGQgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmlhZGQodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkU3ViID0gZnVuY3Rpb24gcmVkU3ViIChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnN1Yih0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJU3ViID0gZnVuY3Rpb24gcmVkSVN1YiAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuaXN1Yih0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRTaGwgPSBmdW5jdGlvbiByZWRTaGwgKG51bSkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuc2hsKHRoaXMsIG51bSk7XG4gIH07XG5cbiAgQk4ucHJvdG90eXBlLnJlZE11bCA9IGZ1bmN0aW9uIHJlZE11bCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsIG51bSk7XG4gICAgcmV0dXJuIHRoaXMucmVkLm11bCh0aGlzLCBudW0pO1xuICB9O1xuXG4gIEJOLnByb3RvdHlwZS5yZWRJTXVsID0gZnVuY3Rpb24gcmVkSU11bCAobnVtKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsIG51bSk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmltdWwodGhpcywgbnVtKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkU3FyID0gZnVuY3Rpb24gcmVkU3FyICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLnNxcih0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSVNxciA9IGZ1bmN0aW9uIHJlZElTcXIgKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmlzcXIodGhpcyk7XG4gIH07XG5cbiAgLy8gU3F1YXJlIHJvb3Qgb3ZlciBwXG4gIEJOLnByb3RvdHlwZS5yZWRTcXJ0ID0gZnVuY3Rpb24gcmVkU3FydCAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucmVkLCAncmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgICB0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5yZWQuc3FydCh0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkSW52bSA9IGZ1bmN0aW9uIHJlZEludm0gKCkge1xuICAgIGFzc2VydCh0aGlzLnJlZCwgJ3JlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLmludm0odGhpcyk7XG4gIH07XG5cbiAgLy8gUmV0dXJuIG5lZ2F0aXZlIGNsb25lIG9mIGB0aGlzYCAlIGByZWQgbW9kdWxvYFxuICBCTi5wcm90b3R5cGUucmVkTmVnID0gZnVuY3Rpb24gcmVkTmVnICgpIHtcbiAgICBhc3NlcnQodGhpcy5yZWQsICdyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzJyk7XG4gICAgdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucmVkLm5lZyh0aGlzKTtcbiAgfTtcblxuICBCTi5wcm90b3R5cGUucmVkUG93ID0gZnVuY3Rpb24gcmVkUG93IChudW0pIHtcbiAgICBhc3NlcnQodGhpcy5yZWQgJiYgIW51bS5yZWQsICdyZWRQb3cobm9ybWFsTnVtKScpO1xuICAgIHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnJlZC5wb3codGhpcywgbnVtKTtcbiAgfTtcblxuICAvLyBQcmltZSBudW1iZXJzIHdpdGggZWZmaWNpZW50IHJlZHVjdGlvblxuICB2YXIgcHJpbWVzID0ge1xuICAgIGsyNTY6IG51bGwsXG4gICAgcDIyNDogbnVsbCxcbiAgICBwMTkyOiBudWxsLFxuICAgIHAyNTUxOTogbnVsbFxuICB9O1xuXG4gIC8vIFBzZXVkby1NZXJzZW5uZSBwcmltZVxuICBmdW5jdGlvbiBNUHJpbWUgKG5hbWUsIHApIHtcbiAgICAvLyBQID0gMiBeIE4gLSBLXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnAgPSBuZXcgQk4ocCwgMTYpO1xuICAgIHRoaXMubiA9IHRoaXMucC5iaXRMZW5ndGgoKTtcbiAgICB0aGlzLmsgPSBuZXcgQk4oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApO1xuXG4gICAgdGhpcy50bXAgPSB0aGlzLl90bXAoKTtcbiAgfVxuXG4gIE1QcmltZS5wcm90b3R5cGUuX3RtcCA9IGZ1bmN0aW9uIF90bXAgKCkge1xuICAgIHZhciB0bXAgPSBuZXcgQk4obnVsbCk7XG4gICAgdG1wLndvcmRzID0gbmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4gLyAxMykpO1xuICAgIHJldHVybiB0bXA7XG4gIH07XG5cbiAgTVByaW1lLnByb3RvdHlwZS5pcmVkdWNlID0gZnVuY3Rpb24gaXJlZHVjZSAobnVtKSB7XG4gICAgLy8gQXNzdW1lcyB0aGF0IGBudW1gIGlzIGxlc3MgdGhhbiBgUF4yYFxuICAgIC8vIG51bSA9IEhJICogKDIgXiBOIC0gSykgKyBISSAqIEsgKyBMTyA9IEhJICogSyArIExPIChtb2QgUClcbiAgICB2YXIgciA9IG51bTtcbiAgICB2YXIgcmxlbjtcblxuICAgIGRvIHtcbiAgICAgIHRoaXMuc3BsaXQociwgdGhpcy50bXApO1xuICAgICAgciA9IHRoaXMuaW11bEsocik7XG4gICAgICByID0gci5pYWRkKHRoaXMudG1wKTtcbiAgICAgIHJsZW4gPSByLmJpdExlbmd0aCgpO1xuICAgIH0gd2hpbGUgKHJsZW4gPiB0aGlzLm4pO1xuXG4gICAgdmFyIGNtcCA9IHJsZW4gPCB0aGlzLm4gPyAtMSA6IHIudWNtcCh0aGlzLnApO1xuICAgIGlmIChjbXAgPT09IDApIHtcbiAgICAgIHIud29yZHNbMF0gPSAwO1xuICAgICAgci5sZW5ndGggPSAxO1xuICAgIH0gZWxzZSBpZiAoY21wID4gMCkge1xuICAgICAgci5pc3ViKHRoaXMucCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyLnN0cmlwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gciBpcyBhIEJOIHY0IGluc3RhbmNlXG4gICAgICAgIHIuc3RyaXAoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHIgaXMgYSBCTiB2NSBpbnN0YW5jZVxuICAgICAgICByLl9zdHJpcCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9O1xuXG4gIE1QcmltZS5wcm90b3R5cGUuc3BsaXQgPSBmdW5jdGlvbiBzcGxpdCAoaW5wdXQsIG91dCkge1xuICAgIGlucHV0Lml1c2hybih0aGlzLm4sIDAsIG91dCk7XG4gIH07XG5cbiAgTVByaW1lLnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICByZXR1cm4gbnVtLmltdWwodGhpcy5rKTtcbiAgfTtcblxuICBmdW5jdGlvbiBLMjU2ICgpIHtcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAnazI1NicsXG4gICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYnKTtcbiAgfVxuICBpbmhlcml0cyhLMjU2LCBNUHJpbWUpO1xuXG4gIEsyNTYucHJvdG90eXBlLnNwbGl0ID0gZnVuY3Rpb24gc3BsaXQgKGlucHV0LCBvdXRwdXQpIHtcbiAgICAvLyAyNTYgPSA5ICogMjYgKyAyMlxuICAgIHZhciBtYXNrID0gMHgzZmZmZmY7XG5cbiAgICB2YXIgb3V0TGVuID0gTWF0aC5taW4oaW5wdXQubGVuZ3RoLCA5KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG91dExlbjsgaSsrKSB7XG4gICAgICBvdXRwdXQud29yZHNbaV0gPSBpbnB1dC53b3Jkc1tpXTtcbiAgICB9XG4gICAgb3V0cHV0Lmxlbmd0aCA9IG91dExlbjtcblxuICAgIGlmIChpbnB1dC5sZW5ndGggPD0gOSkge1xuICAgICAgaW5wdXQud29yZHNbMF0gPSAwO1xuICAgICAgaW5wdXQubGVuZ3RoID0gMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTaGlmdCBieSA5IGxpbWJzXG4gICAgdmFyIHByZXYgPSBpbnB1dC53b3Jkc1s5XTtcbiAgICBvdXRwdXQud29yZHNbb3V0cHV0Lmxlbmd0aCsrXSA9IHByZXYgJiBtYXNrO1xuXG4gICAgZm9yIChpID0gMTA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5leHQgPSBpbnB1dC53b3Jkc1tpXSB8IDA7XG4gICAgICBpbnB1dC53b3Jkc1tpIC0gMTBdID0gKChuZXh0ICYgbWFzaykgPDwgNCkgfCAocHJldiA+Pj4gMjIpO1xuICAgICAgcHJldiA9IG5leHQ7XG4gICAgfVxuICAgIHByZXYgPj4+PSAyMjtcbiAgICBpbnB1dC53b3Jkc1tpIC0gMTBdID0gcHJldjtcbiAgICBpZiAocHJldiA9PT0gMCAmJiBpbnB1dC5sZW5ndGggPiAxMCkge1xuICAgICAgaW5wdXQubGVuZ3RoIC09IDEwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dC5sZW5ndGggLT0gOTtcbiAgICB9XG4gIH07XG5cbiAgSzI1Ni5wcm90b3R5cGUuaW11bEsgPSBmdW5jdGlvbiBpbXVsSyAobnVtKSB7XG4gICAgLy8gSyA9IDB4MTAwMDAwM2QxID0gWyAweDQwLCAweDNkMSBdXG4gICAgbnVtLndvcmRzW251bS5sZW5ndGhdID0gMDtcbiAgICBudW0ud29yZHNbbnVtLmxlbmd0aCArIDFdID0gMDtcbiAgICBudW0ubGVuZ3RoICs9IDI7XG5cbiAgICAvLyBib3VuZGVkIGF0OiAweDQwICogMHgzZmZmZmZmICsgMHgzZDAgPSAweDEwMDAwMDM5MFxuICAgIHZhciBsbyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3ID0gbnVtLndvcmRzW2ldIHwgMDtcbiAgICAgIGxvICs9IHcgKiAweDNkMTtcbiAgICAgIG51bS53b3Jkc1tpXSA9IGxvICYgMHgzZmZmZmZmO1xuICAgICAgbG8gPSB3ICogMHg0MCArICgobG8gLyAweDQwMDAwMDApIHwgMCk7XG4gICAgfVxuXG4gICAgLy8gRmFzdCBsZW5ndGggcmVkdWN0aW9uXG4gICAgaWYgKG51bS53b3Jkc1tudW0ubGVuZ3RoIC0gMV0gPT09IDApIHtcbiAgICAgIG51bS5sZW5ndGgtLTtcbiAgICAgIGlmIChudW0ud29yZHNbbnVtLmxlbmd0aCAtIDFdID09PSAwKSB7XG4gICAgICAgIG51bS5sZW5ndGgtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbiAgfTtcblxuICBmdW5jdGlvbiBQMjI0ICgpIHtcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAncDIyNCcsXG4gICAgICAnZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEnKTtcbiAgfVxuICBpbmhlcml0cyhQMjI0LCBNUHJpbWUpO1xuXG4gIGZ1bmN0aW9uIFAxOTIgKCkge1xuICAgIE1QcmltZS5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgICdwMTkyJyxcbiAgICAgICdmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZicpO1xuICB9XG4gIGluaGVyaXRzKFAxOTIsIE1QcmltZSk7XG5cbiAgZnVuY3Rpb24gUDI1NTE5ICgpIHtcbiAgICAvLyAyIF4gMjU1IC0gMTlcbiAgICBNUHJpbWUuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAnMjU1MTknLFxuICAgICAgJzdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQnKTtcbiAgfVxuICBpbmhlcml0cyhQMjU1MTksIE1QcmltZSk7XG5cbiAgUDI1NTE5LnByb3RvdHlwZS5pbXVsSyA9IGZ1bmN0aW9uIGltdWxLIChudW0pIHtcbiAgICAvLyBLID0gMHgxM1xuICAgIHZhciBjYXJyeSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoaSA9IChudW0ud29yZHNbaV0gfCAwKSAqIDB4MTMgKyBjYXJyeTtcbiAgICAgIHZhciBsbyA9IGhpICYgMHgzZmZmZmZmO1xuICAgICAgaGkgPj4+PSAyNjtcblxuICAgICAgbnVtLndvcmRzW2ldID0gbG87XG4gICAgICBjYXJyeSA9IGhpO1xuICAgIH1cbiAgICBpZiAoY2FycnkgIT09IDApIHtcbiAgICAgIG51bS53b3Jkc1tudW0ubGVuZ3RoKytdID0gY2Fycnk7XG4gICAgfVxuICAgIHJldHVybiBudW07XG4gIH07XG5cbiAgLy8gRXhwb3J0ZWQgbW9zdGx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB1c2UgcGxhaW4gbmFtZSBpbnN0ZWFkXG4gIEJOLl9wcmltZSA9IGZ1bmN0aW9uIHByaW1lIChuYW1lKSB7XG4gICAgLy8gQ2FjaGVkIHZlcnNpb24gb2YgcHJpbWVcbiAgICBpZiAocHJpbWVzW25hbWVdKSByZXR1cm4gcHJpbWVzW25hbWVdO1xuXG4gICAgdmFyIHByaW1lO1xuICAgIGlmIChuYW1lID09PSAnazI1NicpIHtcbiAgICAgIHByaW1lID0gbmV3IEsyNTYoKTtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdwMjI0Jykge1xuICAgICAgcHJpbWUgPSBuZXcgUDIyNCgpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3AxOTInKSB7XG4gICAgICBwcmltZSA9IG5ldyBQMTkyKCk7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAncDI1NTE5Jykge1xuICAgICAgcHJpbWUgPSBuZXcgUDI1NTE5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwcmltZSAnICsgbmFtZSk7XG4gICAgfVxuICAgIHByaW1lc1tuYW1lXSA9IHByaW1lO1xuXG4gICAgcmV0dXJuIHByaW1lO1xuICB9O1xuXG4gIC8vXG4gIC8vIEJhc2UgcmVkdWN0aW9uIGVuZ2luZVxuICAvL1xuICBmdW5jdGlvbiBSZWQgKG0pIHtcbiAgICBpZiAodHlwZW9mIG0gPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgcHJpbWUgPSBCTi5fcHJpbWUobSk7XG4gICAgICB0aGlzLm0gPSBwcmltZS5wO1xuICAgICAgdGhpcy5wcmltZSA9IHByaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQobS5ndG4oMSksICdtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEnKTtcbiAgICAgIHRoaXMubSA9IG07XG4gICAgICB0aGlzLnByaW1lID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBSZWQucHJvdG90eXBlLl92ZXJpZnkxID0gZnVuY3Rpb24gX3ZlcmlmeTEgKGEpIHtcbiAgICBhc3NlcnQoYS5uZWdhdGl2ZSA9PT0gMCwgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzJyk7XG4gICAgYXNzZXJ0KGEucmVkLCAncmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycycpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuX3ZlcmlmeTIgPSBmdW5jdGlvbiBfdmVyaWZ5MiAoYSwgYikge1xuICAgIGFzc2VydCgoYS5uZWdhdGl2ZSB8IGIubmVnYXRpdmUpID09PSAwLCAncmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMnKTtcbiAgICBhc3NlcnQoYS5yZWQgJiYgYS5yZWQgPT09IGIucmVkLFxuICAgICAgJ3JlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMnKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmltb2QgPSBmdW5jdGlvbiBpbW9kIChhKSB7XG4gICAgaWYgKHRoaXMucHJpbWUpIHJldHVybiB0aGlzLnByaW1lLmlyZWR1Y2UoYSkuX2ZvcmNlUmVkKHRoaXMpO1xuXG4gICAgbW92ZShhLCBhLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpO1xuICAgIHJldHVybiBhO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gbmVnIChhKSB7XG4gICAgaWYgKGEuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiBhLmNsb25lKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubS5zdWIoYSkuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcblxuICAgIHZhciByZXMgPSBhLmFkZChiKTtcbiAgICBpZiAocmVzLmNtcCh0aGlzLm0pID49IDApIHtcbiAgICAgIHJlcy5pc3ViKHRoaXMubSk7XG4gICAgfVxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaWFkZCA9IGZ1bmN0aW9uIGlhZGQgKGEsIGIpIHtcbiAgICB0aGlzLl92ZXJpZnkyKGEsIGIpO1xuXG4gICAgdmFyIHJlcyA9IGEuaWFkZChiKTtcbiAgICBpZiAocmVzLmNtcCh0aGlzLm0pID49IDApIHtcbiAgICAgIHJlcy5pc3ViKHRoaXMubSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiBzdWIgKGEsIGIpIHtcbiAgICB0aGlzLl92ZXJpZnkyKGEsIGIpO1xuXG4gICAgdmFyIHJlcyA9IGEuc3ViKGIpO1xuICAgIGlmIChyZXMuY21wbigwKSA8IDApIHtcbiAgICAgIHJlcy5pYWRkKHRoaXMubSk7XG4gICAgfVxuICAgIHJldHVybiByZXMuX2ZvcmNlUmVkKHRoaXMpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaXN1YiA9IGZ1bmN0aW9uIGlzdWIgKGEsIGIpIHtcbiAgICB0aGlzLl92ZXJpZnkyKGEsIGIpO1xuXG4gICAgdmFyIHJlcyA9IGEuaXN1YihiKTtcbiAgICBpZiAocmVzLmNtcG4oMCkgPCAwKSB7XG4gICAgICByZXMuaWFkZCh0aGlzLm0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuc2hsID0gZnVuY3Rpb24gc2hsIChhLCBudW0pIHtcbiAgICB0aGlzLl92ZXJpZnkxKGEpO1xuICAgIHJldHVybiB0aGlzLmltb2QoYS51c2hsbihudW0pKTtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmltdWwgPSBmdW5jdGlvbiBpbXVsIChhLCBiKSB7XG4gICAgdGhpcy5fdmVyaWZ5MihhLCBiKTtcbiAgICByZXR1cm4gdGhpcy5pbW9kKGEuaW11bChiKSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiBtdWwgKGEsIGIpIHtcbiAgICB0aGlzLl92ZXJpZnkyKGEsIGIpO1xuICAgIHJldHVybiB0aGlzLmltb2QoYS5tdWwoYikpO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuaXNxciA9IGZ1bmN0aW9uIGlzcXIgKGEpIHtcbiAgICByZXR1cm4gdGhpcy5pbXVsKGEsIGEuY2xvbmUoKSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5zcXIgPSBmdW5jdGlvbiBzcXIgKGEpIHtcbiAgICByZXR1cm4gdGhpcy5tdWwoYSwgYSk7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5zcXJ0ID0gZnVuY3Rpb24gc3FydCAoYSkge1xuICAgIGlmIChhLmlzWmVybygpKSByZXR1cm4gYS5jbG9uZSgpO1xuXG4gICAgdmFyIG1vZDMgPSB0aGlzLm0uYW5kbG4oMyk7XG4gICAgYXNzZXJ0KG1vZDMgJSAyID09PSAxKTtcblxuICAgIC8vIEZhc3QgY2FzZVxuICAgIGlmIChtb2QzID09PSAzKSB7XG4gICAgICB2YXIgcG93ID0gdGhpcy5tLmFkZChuZXcgQk4oMSkpLml1c2hybigyKTtcbiAgICAgIHJldHVybiB0aGlzLnBvdyhhLCBwb3cpO1xuICAgIH1cblxuICAgIC8vIFRvbmVsbGktU2hhbmtzIGFsZ29yaXRobSAoVG90YWxseSB1bm9wdGltaXplZCBhbmQgc2xvdylcbiAgICAvL1xuICAgIC8vIEZpbmQgUSBhbmQgUywgdGhhdCBRICogMiBeIFMgPSAoUCAtIDEpXG4gICAgdmFyIHEgPSB0aGlzLm0uc3VibigxKTtcbiAgICB2YXIgcyA9IDA7XG4gICAgd2hpbGUgKCFxLmlzWmVybygpICYmIHEuYW5kbG4oMSkgPT09IDApIHtcbiAgICAgIHMrKztcbiAgICAgIHEuaXVzaHJuKDEpO1xuICAgIH1cbiAgICBhc3NlcnQoIXEuaXNaZXJvKCkpO1xuXG4gICAgdmFyIG9uZSA9IG5ldyBCTigxKS50b1JlZCh0aGlzKTtcbiAgICB2YXIgbk9uZSA9IG9uZS5yZWROZWcoKTtcblxuICAgIC8vIEZpbmQgcXVhZHJhdGljIG5vbi1yZXNpZHVlXG4gICAgLy8gTk9URTogTWF4IGlzIHN1Y2ggYmVjYXVzZSBvZiBnZW5lcmFsaXplZCBSaWVtYW5uIGh5cG90aGVzaXMuXG4gICAgdmFyIGxwb3cgPSB0aGlzLm0uc3VibigxKS5pdXNocm4oMSk7XG4gICAgdmFyIHogPSB0aGlzLm0uYml0TGVuZ3RoKCk7XG4gICAgeiA9IG5ldyBCTigyICogeiAqIHopLnRvUmVkKHRoaXMpO1xuXG4gICAgd2hpbGUgKHRoaXMucG93KHosIGxwb3cpLmNtcChuT25lKSAhPT0gMCkge1xuICAgICAgei5yZWRJQWRkKG5PbmUpO1xuICAgIH1cblxuICAgIHZhciBjID0gdGhpcy5wb3coeiwgcSk7XG4gICAgdmFyIHIgPSB0aGlzLnBvdyhhLCBxLmFkZG4oMSkuaXVzaHJuKDEpKTtcbiAgICB2YXIgdCA9IHRoaXMucG93KGEsIHEpO1xuICAgIHZhciBtID0gcztcbiAgICB3aGlsZSAodC5jbXAob25lKSAhPT0gMCkge1xuICAgICAgdmFyIHRtcCA9IHQ7XG4gICAgICBmb3IgKHZhciBpID0gMDsgdG1wLmNtcChvbmUpICE9PSAwOyBpKyspIHtcbiAgICAgICAgdG1wID0gdG1wLnJlZFNxcigpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0KGkgPCBtKTtcbiAgICAgIHZhciBiID0gdGhpcy5wb3coYywgbmV3IEJOKDEpLml1c2hsbihtIC0gaSAtIDEpKTtcblxuICAgICAgciA9IHIucmVkTXVsKGIpO1xuICAgICAgYyA9IGIucmVkU3FyKCk7XG4gICAgICB0ID0gdC5yZWRNdWwoYyk7XG4gICAgICBtID0gaTtcbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbiAgfTtcblxuICBSZWQucHJvdG90eXBlLmludm0gPSBmdW5jdGlvbiBpbnZtIChhKSB7XG4gICAgdmFyIGludiA9IGEuX2ludm1wKHRoaXMubSk7XG4gICAgaWYgKGludi5uZWdhdGl2ZSAhPT0gMCkge1xuICAgICAgaW52Lm5lZ2F0aXZlID0gMDtcbiAgICAgIHJldHVybiB0aGlzLmltb2QoaW52KS5yZWROZWcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaW1vZChpbnYpO1xuICAgIH1cbiAgfTtcblxuICBSZWQucHJvdG90eXBlLnBvdyA9IGZ1bmN0aW9uIHBvdyAoYSwgbnVtKSB7XG4gICAgaWYgKG51bS5pc1plcm8oKSkgcmV0dXJuIG5ldyBCTigxKS50b1JlZCh0aGlzKTtcbiAgICBpZiAobnVtLmNtcG4oMSkgPT09IDApIHJldHVybiBhLmNsb25lKCk7XG5cbiAgICB2YXIgd2luZG93U2l6ZSA9IDQ7XG4gICAgdmFyIHduZCA9IG5ldyBBcnJheSgxIDw8IHdpbmRvd1NpemUpO1xuICAgIHduZFswXSA9IG5ldyBCTigxKS50b1JlZCh0aGlzKTtcbiAgICB3bmRbMV0gPSBhO1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgd25kLmxlbmd0aDsgaSsrKSB7XG4gICAgICB3bmRbaV0gPSB0aGlzLm11bCh3bmRbaSAtIDFdLCBhKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0gd25kWzBdO1xuICAgIHZhciBjdXJyZW50ID0gMDtcbiAgICB2YXIgY3VycmVudExlbiA9IDA7XG4gICAgdmFyIHN0YXJ0ID0gbnVtLmJpdExlbmd0aCgpICUgMjY7XG4gICAgaWYgKHN0YXJ0ID09PSAwKSB7XG4gICAgICBzdGFydCA9IDI2O1xuICAgIH1cblxuICAgIGZvciAoaSA9IG51bS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIHdvcmQgPSBudW0ud29yZHNbaV07XG4gICAgICBmb3IgKHZhciBqID0gc3RhcnQgLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICB2YXIgYml0ID0gKHdvcmQgPj4gaikgJiAxO1xuICAgICAgICBpZiAocmVzICE9PSB3bmRbMF0pIHtcbiAgICAgICAgICByZXMgPSB0aGlzLnNxcihyZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJpdCA9PT0gMCAmJiBjdXJyZW50ID09PSAwKSB7XG4gICAgICAgICAgY3VycmVudExlbiA9IDA7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50IDw8PSAxO1xuICAgICAgICBjdXJyZW50IHw9IGJpdDtcbiAgICAgICAgY3VycmVudExlbisrO1xuICAgICAgICBpZiAoY3VycmVudExlbiAhPT0gd2luZG93U2l6ZSAmJiAoaSAhPT0gMCB8fCBqICE9PSAwKSkgY29udGludWU7XG5cbiAgICAgICAgcmVzID0gdGhpcy5tdWwocmVzLCB3bmRbY3VycmVudF0pO1xuICAgICAgICBjdXJyZW50TGVuID0gMDtcbiAgICAgICAgY3VycmVudCA9IDA7XG4gICAgICB9XG4gICAgICBzdGFydCA9IDI2O1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgUmVkLnByb3RvdHlwZS5jb252ZXJ0VG8gPSBmdW5jdGlvbiBjb252ZXJ0VG8gKG51bSkge1xuICAgIHZhciByID0gbnVtLnVtb2QodGhpcy5tKTtcblxuICAgIHJldHVybiByID09PSBudW0gPyByLmNsb25lKCkgOiByO1xuICB9O1xuXG4gIFJlZC5wcm90b3R5cGUuY29udmVydEZyb20gPSBmdW5jdGlvbiBjb252ZXJ0RnJvbSAobnVtKSB7XG4gICAgdmFyIHJlcyA9IG51bS5jbG9uZSgpO1xuICAgIHJlcy5yZWQgPSBudWxsO1xuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy9cbiAgLy8gTW9udGdvbWVyeSBtZXRob2QgZW5naW5lXG4gIC8vXG5cbiAgQk4ubW9udCA9IGZ1bmN0aW9uIG1vbnQgKG51bSkge1xuICAgIHJldHVybiBuZXcgTW9udChudW0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIE1vbnQgKG0pIHtcbiAgICBSZWQuY2FsbCh0aGlzLCBtKTtcblxuICAgIHRoaXMuc2hpZnQgPSB0aGlzLm0uYml0TGVuZ3RoKCk7XG4gICAgaWYgKHRoaXMuc2hpZnQgJSAyNiAhPT0gMCkge1xuICAgICAgdGhpcy5zaGlmdCArPSAyNiAtICh0aGlzLnNoaWZ0ICUgMjYpO1xuICAgIH1cblxuICAgIHRoaXMuciA9IG5ldyBCTigxKS5pdXNobG4odGhpcy5zaGlmdCk7XG4gICAgdGhpcy5yMiA9IHRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpO1xuICAgIHRoaXMucmludiA9IHRoaXMuci5faW52bXAodGhpcy5tKTtcblxuICAgIHRoaXMubWludiA9IHRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKTtcbiAgICB0aGlzLm1pbnYgPSB0aGlzLm1pbnYudW1vZCh0aGlzLnIpO1xuICAgIHRoaXMubWludiA9IHRoaXMuci5zdWIodGhpcy5taW52KTtcbiAgfVxuICBpbmhlcml0cyhNb250LCBSZWQpO1xuXG4gIE1vbnQucHJvdG90eXBlLmNvbnZlcnRUbyA9IGZ1bmN0aW9uIGNvbnZlcnRUbyAobnVtKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1vZChudW0udXNobG4odGhpcy5zaGlmdCkpO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLmNvbnZlcnRGcm9tID0gZnVuY3Rpb24gY29udmVydEZyb20gKG51bSkge1xuICAgIHZhciByID0gdGhpcy5pbW9kKG51bS5tdWwodGhpcy5yaW52KSk7XG4gICAgci5yZWQgPSBudWxsO1xuICAgIHJldHVybiByO1xuICB9O1xuXG4gIE1vbnQucHJvdG90eXBlLmltdWwgPSBmdW5jdGlvbiBpbXVsIChhLCBiKSB7XG4gICAgaWYgKGEuaXNaZXJvKCkgfHwgYi5pc1plcm8oKSkge1xuICAgICAgYS53b3Jkc1swXSA9IDA7XG4gICAgICBhLmxlbmd0aCA9IDE7XG4gICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICB2YXIgdCA9IGEuaW11bChiKTtcbiAgICB2YXIgYyA9IHQubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pO1xuICAgIHZhciB1ID0gdC5pc3ViKGMpLml1c2hybih0aGlzLnNoaWZ0KTtcbiAgICB2YXIgcmVzID0gdTtcblxuICAgIGlmICh1LmNtcCh0aGlzLm0pID49IDApIHtcbiAgICAgIHJlcyA9IHUuaXN1Yih0aGlzLm0pO1xuICAgIH0gZWxzZSBpZiAodS5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzID0gdS5pYWRkKHRoaXMubSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcy5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgTW9udC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gbXVsIChhLCBiKSB7XG4gICAgaWYgKGEuaXNaZXJvKCkgfHwgYi5pc1plcm8oKSkgcmV0dXJuIG5ldyBCTigwKS5fZm9yY2VSZWQodGhpcyk7XG5cbiAgICB2YXIgdCA9IGEubXVsKGIpO1xuICAgIHZhciBjID0gdC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSk7XG4gICAgdmFyIHUgPSB0LmlzdWIoYykuaXVzaHJuKHRoaXMuc2hpZnQpO1xuICAgIHZhciByZXMgPSB1O1xuICAgIGlmICh1LmNtcCh0aGlzLm0pID49IDApIHtcbiAgICAgIHJlcyA9IHUuaXN1Yih0aGlzLm0pO1xuICAgIH0gZWxzZSBpZiAodS5jbXBuKDApIDwgMCkge1xuICAgICAgcmVzID0gdS5pYWRkKHRoaXMubSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcy5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG5cbiAgTW9udC5wcm90b3R5cGUuaW52bSA9IGZ1bmN0aW9uIGludm0gKGEpIHtcbiAgICAvLyAoQVIpXi0xICogUl4yID0gKEFeLTEgKiBSXi0xKSAqIFJeMiA9IEFeLTEgKiBSXG4gICAgdmFyIHJlcyA9IHRoaXMuaW1vZChhLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSk7XG4gICAgcmV0dXJuIHJlcy5fZm9yY2VSZWQodGhpcyk7XG4gIH07XG59KSh0eXBlb2YgbW9kdWxlID09PSAndW5kZWZpbmVkJyB8fCBtb2R1bGUsIHRoaXMpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bn.js/lib/bn.js\n\n}")},"./node_modules/brorand/index.js"(module,__unused_webpack_exports,__webpack_require__){eval("{var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = __webpack_require__(/*! crypto */ \"?3fc0\");\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvcmFuZC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLHFCQUFRO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9icm9yYW5kL2luZGV4LmpzP2ZkYWMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmFuZChsZW4pIHtcbiAgaWYgKCFyKVxuICAgIHIgPSBuZXcgUmFuZChudWxsKTtcblxuICByZXR1cm4gci5nZW5lcmF0ZShsZW4pO1xufTtcblxuZnVuY3Rpb24gUmFuZChyYW5kKSB7XG4gIHRoaXMucmFuZCA9IHJhbmQ7XG59XG5tb2R1bGUuZXhwb3J0cy5SYW5kID0gUmFuZDtcblxuUmFuZC5wcm90b3R5cGUuZ2VuZXJhdGUgPSBmdW5jdGlvbiBnZW5lcmF0ZShsZW4pIHtcbiAgcmV0dXJuIHRoaXMuX3JhbmQobGVuKTtcbn07XG5cbi8vIEVtdWxhdGUgY3J5cHRvIEFQSSB1c2luZyByYW5keVxuUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbiBfcmFuZChuKSB7XG4gIGlmICh0aGlzLnJhbmQuZ2V0Qnl0ZXMpXG4gICAgcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyhuKTtcblxuICB2YXIgcmVzID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKVxuICAgIHJlc1tpXSA9IHRoaXMucmFuZC5nZXRCeXRlKCk7XG4gIHJldHVybiByZXM7XG59O1xuXG5pZiAodHlwZW9mIHNlbGYgPT09ICdvYmplY3QnKSB7XG4gIGlmIChzZWxmLmNyeXB0byAmJiBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBNb2Rlcm4gYnJvd3NlcnNcbiAgICBSYW5kLnByb3RvdHlwZS5fcmFuZCA9IGZ1bmN0aW9uIF9yYW5kKG4pIHtcbiAgICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnIpO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9O1xuICB9IGVsc2UgaWYgKHNlbGYubXNDcnlwdG8gJiYgc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBJRVxuICAgIFJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24gX3JhbmQobikge1xuICAgICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgICAgc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyKTtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfTtcblxuICAvLyBTYWZhcmkncyBXZWJXb3JrZXJzIGRvIG5vdCBoYXZlIGBjcnlwdG9gXG4gIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBPbGQganVua1xuICAgIFJhbmQucHJvdG90eXBlLl9yYW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICB9O1xuICB9XG59IGVsc2Uge1xuICAvLyBOb2RlLmpzIG9yIFdlYiB3b3JrZXIgd2l0aCBubyBjcnlwdG8gc3VwcG9ydFxuICB0cnkge1xuICAgIHZhciBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcbiAgICBpZiAodHlwZW9mIGNyeXB0by5yYW5kb21CeXRlcyAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IHN1cHBvcnRlZCcpO1xuXG4gICAgUmFuZC5wcm90b3R5cGUuX3JhbmQgPSBmdW5jdGlvbiBfcmFuZChuKSB7XG4gICAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKG4pO1xuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/brorand/index.js\n\n}")},"./node_modules/browserify-aes/aes.js"(module,__unused_webpack_exports,__webpack_require__){eval('{// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = (__webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer)\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYWVzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsc0ZBQTZCOztBQUUxQztBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLGNBQWM7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsYUFBYTtBQUMvQjtBQUNBOztBQUVBLG9CQUFvQixZQUFZO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGFBQWE7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9hZXMuanM/MzlmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBiYXNlZCBvbiB0aGUgYWVzIGltcGxpbWVudGF0aW9uIGluIHRyaXBsZSBzZWNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rZXliYXNlL3RyaXBsZXNlY1xuLy8gd2hpY2ggaXMgaW4gdHVybiBiYXNlZCBvbiB0aGUgb25lIGZyb20gY3J5cHRvLWpzXG4vLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qcy9cblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG5cbmZ1bmN0aW9uIGFzVUludDMyQXJyYXkgKGJ1Zikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSBidWYgPSBCdWZmZXIuZnJvbShidWYpXG5cbiAgdmFyIGxlbiA9IChidWYubGVuZ3RoIC8gNCkgfCAwXG4gIHZhciBvdXQgPSBuZXcgQXJyYXkobGVuKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBvdXRbaV0gPSBidWYucmVhZFVJbnQzMkJFKGkgKiA0KVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiBzY3J1YlZlYyAodikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHYubGVuZ3RoOyB2KyspIHtcbiAgICB2W2ldID0gMFxuICB9XG59XG5cbmZ1bmN0aW9uIGNyeXB0QmxvY2sgKE0sIGtleVNjaGVkdWxlLCBTVUJfTUlYLCBTQk9YLCBuUm91bmRzKSB7XG4gIHZhciBTVUJfTUlYMCA9IFNVQl9NSVhbMF1cbiAgdmFyIFNVQl9NSVgxID0gU1VCX01JWFsxXVxuICB2YXIgU1VCX01JWDIgPSBTVUJfTUlYWzJdXG4gIHZhciBTVUJfTUlYMyA9IFNVQl9NSVhbM11cblxuICB2YXIgczAgPSBNWzBdIF4ga2V5U2NoZWR1bGVbMF1cbiAgdmFyIHMxID0gTVsxXSBeIGtleVNjaGVkdWxlWzFdXG4gIHZhciBzMiA9IE1bMl0gXiBrZXlTY2hlZHVsZVsyXVxuICB2YXIgczMgPSBNWzNdIF4ga2V5U2NoZWR1bGVbM11cbiAgdmFyIHQwLCB0MSwgdDIsIHQzXG4gIHZhciBrc1JvdyA9IDRcblxuICBmb3IgKHZhciByb3VuZCA9IDE7IHJvdW5kIDwgblJvdW5kczsgcm91bmQrKykge1xuICAgIHQwID0gU1VCX01JWDBbczAgPj4+IDI0XSBeIFNVQl9NSVgxWyhzMSA+Pj4gMTYpICYgMHhmZl0gXiBTVUJfTUlYMlsoczIgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYM1tzMyAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICB0MSA9IFNVQl9NSVgwW3MxID4+PiAyNF0gXiBTVUJfTUlYMVsoczIgPj4+IDE2KSAmIDB4ZmZdIF4gU1VCX01JWDJbKHMzID4+PiA4KSAmIDB4ZmZdIF4gU1VCX01JWDNbczAgJiAweGZmXSBeIGtleVNjaGVkdWxlW2tzUm93KytdXG4gICAgdDIgPSBTVUJfTUlYMFtzMiA+Pj4gMjRdIF4gU1VCX01JWDFbKHMzID4+PiAxNikgJiAweGZmXSBeIFNVQl9NSVgyWyhzMCA+Pj4gOCkgJiAweGZmXSBeIFNVQl9NSVgzW3MxICYgMHhmZl0gXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICAgIHQzID0gU1VCX01JWDBbczMgPj4+IDI0XSBeIFNVQl9NSVgxWyhzMCA+Pj4gMTYpICYgMHhmZl0gXiBTVUJfTUlYMlsoczEgPj4+IDgpICYgMHhmZl0gXiBTVUJfTUlYM1tzMiAmIDB4ZmZdIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgICBzMCA9IHQwXG4gICAgczEgPSB0MVxuICAgIHMyID0gdDJcbiAgICBzMyA9IHQzXG4gIH1cblxuICB0MCA9ICgoU0JPWFtzMCA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMSA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMyID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMyAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdXG4gIHQxID0gKChTQk9YW3MxID4+PiAyNF0gPDwgMjQpIHwgKFNCT1hbKHMyID4+PiAxNikgJiAweGZmXSA8PCAxNikgfCAoU0JPWFsoczMgPj4+IDgpICYgMHhmZl0gPDwgOCkgfCBTQk9YW3MwICYgMHhmZl0pIF4ga2V5U2NoZWR1bGVba3NSb3crK11cbiAgdDIgPSAoKFNCT1hbczIgPj4+IDI0XSA8PCAyNCkgfCAoU0JPWFsoczMgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8IChTQk9YWyhzMCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8IFNCT1hbczEgJiAweGZmXSkgXiBrZXlTY2hlZHVsZVtrc1JvdysrXVxuICB0MyA9ICgoU0JPWFtzMyA+Pj4gMjRdIDw8IDI0KSB8IChTQk9YWyhzMCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHwgKFNCT1hbKHMxID4+PiA4KSAmIDB4ZmZdIDw8IDgpIHwgU0JPWFtzMiAmIDB4ZmZdKSBeIGtleVNjaGVkdWxlW2tzUm93KytdXG4gIHQwID0gdDAgPj4+IDBcbiAgdDEgPSB0MSA+Pj4gMFxuICB0MiA9IHQyID4+PiAwXG4gIHQzID0gdDMgPj4+IDBcblxuICByZXR1cm4gW3QwLCB0MSwgdDIsIHQzXVxufVxuXG4vLyBBRVMgY29uc3RhbnRzXG52YXIgUkNPTiA9IFsweDAwLCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2XVxudmFyIEcgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDb21wdXRlIGRvdWJsZSB0YWJsZVxuICB2YXIgZCA9IG5ldyBBcnJheSgyNTYpXG4gIGZvciAodmFyIGogPSAwOyBqIDwgMjU2OyBqKyspIHtcbiAgICBpZiAoaiA8IDEyOCkge1xuICAgICAgZFtqXSA9IGogPDwgMVxuICAgIH0gZWxzZSB7XG4gICAgICBkW2pdID0gKGogPDwgMSkgXiAweDExYlxuICAgIH1cbiAgfVxuXG4gIHZhciBTQk9YID0gW11cbiAgdmFyIElOVl9TQk9YID0gW11cbiAgdmFyIFNVQl9NSVggPSBbW10sIFtdLCBbXSwgW11dXG4gIHZhciBJTlZfU1VCX01JWCA9IFtbXSwgW10sIFtdLCBbXV1cblxuICAvLyBXYWxrIEdGKDJeOClcbiAgdmFyIHggPSAwXG4gIHZhciB4aSA9IDBcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgIC8vIENvbXB1dGUgc2JveFxuICAgIHZhciBzeCA9IHhpIF4gKHhpIDw8IDEpIF4gKHhpIDw8IDIpIF4gKHhpIDw8IDMpIF4gKHhpIDw8IDQpXG4gICAgc3ggPSAoc3ggPj4+IDgpIF4gKHN4ICYgMHhmZikgXiAweDYzXG4gICAgU0JPWFt4XSA9IHN4XG4gICAgSU5WX1NCT1hbc3hdID0geFxuXG4gICAgLy8gQ29tcHV0ZSBtdWx0aXBsaWNhdGlvblxuICAgIHZhciB4MiA9IGRbeF1cbiAgICB2YXIgeDQgPSBkW3gyXVxuICAgIHZhciB4OCA9IGRbeDRdXG5cbiAgICAvLyBDb21wdXRlIHN1YiBieXRlcywgbWl4IGNvbHVtbnMgdGFibGVzXG4gICAgdmFyIHQgPSAoZFtzeF0gKiAweDEwMSkgXiAoc3ggKiAweDEwMTAxMDApXG4gICAgU1VCX01JWFswXVt4XSA9ICh0IDw8IDI0KSB8ICh0ID4+PiA4KVxuICAgIFNVQl9NSVhbMV1beF0gPSAodCA8PCAxNikgfCAodCA+Pj4gMTYpXG4gICAgU1VCX01JWFsyXVt4XSA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KVxuICAgIFNVQl9NSVhbM11beF0gPSB0XG5cbiAgICAvLyBDb21wdXRlIGludiBzdWIgYnl0ZXMsIGludiBtaXggY29sdW1ucyB0YWJsZXNcbiAgICB0ID0gKHg4ICogMHgxMDEwMTAxKSBeICh4NCAqIDB4MTAwMDEpIF4gKHgyICogMHgxMDEpIF4gKHggKiAweDEwMTAxMDApXG4gICAgSU5WX1NVQl9NSVhbMF1bc3hdID0gKHQgPDwgMjQpIHwgKHQgPj4+IDgpXG4gICAgSU5WX1NVQl9NSVhbMV1bc3hdID0gKHQgPDwgMTYpIHwgKHQgPj4+IDE2KVxuICAgIElOVl9TVUJfTUlYWzJdW3N4XSA9ICh0IDw8IDgpIHwgKHQgPj4+IDI0KVxuICAgIElOVl9TVUJfTUlYWzNdW3N4XSA9IHRcblxuICAgIGlmICh4ID09PSAwKSB7XG4gICAgICB4ID0geGkgPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSB4MiBeIGRbZFtkW3g4IF4geDJdXV1cbiAgICAgIHhpIF49IGRbZFt4aV1dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBTQk9YOiBTQk9YLFxuICAgIElOVl9TQk9YOiBJTlZfU0JPWCxcbiAgICBTVUJfTUlYOiBTVUJfTUlYLFxuICAgIElOVl9TVUJfTUlYOiBJTlZfU1VCX01JWFxuICB9XG59KSgpXG5cbmZ1bmN0aW9uIEFFUyAoa2V5KSB7XG4gIHRoaXMuX2tleSA9IGFzVUludDMyQXJyYXkoa2V5KVxuICB0aGlzLl9yZXNldCgpXG59XG5cbkFFUy5ibG9ja1NpemUgPSA0ICogNFxuQUVTLmtleVNpemUgPSAyNTYgLyA4XG5BRVMucHJvdG90eXBlLmJsb2NrU2l6ZSA9IEFFUy5ibG9ja1NpemVcbkFFUy5wcm90b3R5cGUua2V5U2l6ZSA9IEFFUy5rZXlTaXplXG5BRVMucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGtleVdvcmRzID0gdGhpcy5fa2V5XG4gIHZhciBrZXlTaXplID0ga2V5V29yZHMubGVuZ3RoXG4gIHZhciBuUm91bmRzID0ga2V5U2l6ZSArIDZcbiAgdmFyIGtzUm93cyA9IChuUm91bmRzICsgMSkgKiA0XG5cbiAgdmFyIGtleVNjaGVkdWxlID0gW11cbiAgZm9yICh2YXIgayA9IDA7IGsgPCBrZXlTaXplOyBrKyspIHtcbiAgICBrZXlTY2hlZHVsZVtrXSA9IGtleVdvcmRzW2tdXG4gIH1cblxuICBmb3IgKGsgPSBrZXlTaXplOyBrIDwga3NSb3dzOyBrKyspIHtcbiAgICB2YXIgdCA9IGtleVNjaGVkdWxlW2sgLSAxXVxuXG4gICAgaWYgKGsgJSBrZXlTaXplID09PSAwKSB7XG4gICAgICB0ID0gKHQgPDwgOCkgfCAodCA+Pj4gMjQpXG4gICAgICB0ID1cbiAgICAgICAgKEcuU0JPWFt0ID4+PiAyNF0gPDwgMjQpIHxcbiAgICAgICAgKEcuU0JPWFsodCA+Pj4gMTYpICYgMHhmZl0gPDwgMTYpIHxcbiAgICAgICAgKEcuU0JPWFsodCA+Pj4gOCkgJiAweGZmXSA8PCA4KSB8XG4gICAgICAgIChHLlNCT1hbdCAmIDB4ZmZdKVxuXG4gICAgICB0IF49IFJDT05bKGsgLyBrZXlTaXplKSB8IDBdIDw8IDI0XG4gICAgfSBlbHNlIGlmIChrZXlTaXplID4gNiAmJiBrICUga2V5U2l6ZSA9PT0gNCkge1xuICAgICAgdCA9XG4gICAgICAgIChHLlNCT1hbdCA+Pj4gMjRdIDw8IDI0KSB8XG4gICAgICAgIChHLlNCT1hbKHQgPj4+IDE2KSAmIDB4ZmZdIDw8IDE2KSB8XG4gICAgICAgIChHLlNCT1hbKHQgPj4+IDgpICYgMHhmZl0gPDwgOCkgfFxuICAgICAgICAoRy5TQk9YW3QgJiAweGZmXSlcbiAgICB9XG5cbiAgICBrZXlTY2hlZHVsZVtrXSA9IGtleVNjaGVkdWxlW2sgLSBrZXlTaXplXSBeIHRcbiAgfVxuXG4gIHZhciBpbnZLZXlTY2hlZHVsZSA9IFtdXG4gIGZvciAodmFyIGlrID0gMDsgaWsgPCBrc1Jvd3M7IGlrKyspIHtcbiAgICB2YXIga3NSID0ga3NSb3dzIC0gaWtcbiAgICB2YXIgdHQgPSBrZXlTY2hlZHVsZVtrc1IgLSAoaWsgJSA0ID8gMCA6IDQpXVxuXG4gICAgaWYgKGlrIDwgNCB8fCBrc1IgPD0gNCkge1xuICAgICAgaW52S2V5U2NoZWR1bGVbaWtdID0gdHRcbiAgICB9IGVsc2Uge1xuICAgICAgaW52S2V5U2NoZWR1bGVbaWtdID1cbiAgICAgICAgRy5JTlZfU1VCX01JWFswXVtHLlNCT1hbdHQgPj4+IDI0XV0gXlxuICAgICAgICBHLklOVl9TVUJfTUlYWzFdW0cuU0JPWFsodHQgPj4+IDE2KSAmIDB4ZmZdXSBeXG4gICAgICAgIEcuSU5WX1NVQl9NSVhbMl1bRy5TQk9YWyh0dCA+Pj4gOCkgJiAweGZmXV0gXlxuICAgICAgICBHLklOVl9TVUJfTUlYWzNdW0cuU0JPWFt0dCAmIDB4ZmZdXVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuX25Sb3VuZHMgPSBuUm91bmRzXG4gIHRoaXMuX2tleVNjaGVkdWxlID0ga2V5U2NoZWR1bGVcbiAgdGhpcy5faW52S2V5U2NoZWR1bGUgPSBpbnZLZXlTY2hlZHVsZVxufVxuXG5BRVMucHJvdG90eXBlLmVuY3J5cHRCbG9ja1JhdyA9IGZ1bmN0aW9uIChNKSB7XG4gIE0gPSBhc1VJbnQzMkFycmF5KE0pXG4gIHJldHVybiBjcnlwdEJsb2NrKE0sIHRoaXMuX2tleVNjaGVkdWxlLCBHLlNVQl9NSVgsIEcuU0JPWCwgdGhpcy5fblJvdW5kcylcbn1cblxuQUVTLnByb3RvdHlwZS5lbmNyeXB0QmxvY2sgPSBmdW5jdGlvbiAoTSkge1xuICB2YXIgb3V0ID0gdGhpcy5lbmNyeXB0QmxvY2tSYXcoTSlcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxNilcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzBdLCAwKVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMV0sIDQpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsyXSwgOClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzNdLCAxMilcbiAgcmV0dXJuIGJ1ZlxufVxuXG5BRVMucHJvdG90eXBlLmRlY3J5cHRCbG9jayA9IGZ1bmN0aW9uIChNKSB7XG4gIE0gPSBhc1VJbnQzMkFycmF5KE0pXG5cbiAgLy8gc3dhcFxuICB2YXIgbTEgPSBNWzFdXG4gIE1bMV0gPSBNWzNdXG4gIE1bM10gPSBtMVxuXG4gIHZhciBvdXQgPSBjcnlwdEJsb2NrKE0sIHRoaXMuX2ludktleVNjaGVkdWxlLCBHLklOVl9TVUJfTUlYLCBHLklOVl9TQk9YLCB0aGlzLl9uUm91bmRzKVxuICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jVW5zYWZlKDE2KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMF0sIDApXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFszXSwgNClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzJdLCA4KVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMV0sIDEyKVxuICByZXR1cm4gYnVmXG59XG5cbkFFUy5wcm90b3R5cGUuc2NydWIgPSBmdW5jdGlvbiAoKSB7XG4gIHNjcnViVmVjKHRoaXMuX2tleVNjaGVkdWxlKVxuICBzY3J1YlZlYyh0aGlzLl9pbnZLZXlTY2hlZHVsZSlcbiAgc2NydWJWZWModGhpcy5fa2V5KVxufVxuXG5tb2R1bGUuZXhwb3J0cy5BRVMgPSBBRVNcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/aes.js\n\n}')},"./node_modules/browserify-aes/authCipher.js"(module,__unused_webpack_exports,__webpack_require__){eval('{var aes = __webpack_require__(/*! ./aes */ "./node_modules/browserify-aes/aes.js")\nvar Buffer = (__webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer)\nvar Transform = __webpack_require__(/*! cipher-base */ "./node_modules/cipher-base/index.js")\nvar inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js")\nvar GHASH = __webpack_require__(/*! ./ghash */ "./node_modules/browserify-aes/ghash.js")\nvar xor = __webpack_require__(/*! buffer-xor */ "./node_modules/buffer-xor/index.js")\nvar incr32 = __webpack_require__(/*! ./incr32 */ "./node_modules/browserify-aes/incr32.js")\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error(\'Unsupported state or unable to authenticate data\')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error(\'Unsupported state or unable to authenticate data\')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error(\'Attempting to get auth tag in unsupported state\')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error(\'Attempting to set auth tag in unsupported state\')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error(\'Attempting to set AAD in unsupported state\')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYXV0aENpcGhlci5qcyIsIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsbURBQU87QUFDekIsYUFBYSxzRkFBNkI7QUFDMUMsZ0JBQWdCLG1CQUFPLENBQUMsd0RBQWE7QUFDckMsZUFBZSxtQkFBTyxDQUFDLDZEQUFVO0FBQ2pDLFlBQVksbUJBQU8sQ0FBQyx1REFBUztBQUM3QixVQUFVLG1CQUFPLENBQUMsc0RBQVk7QUFDOUIsYUFBYSxtQkFBTyxDQUFDLHlEQUFVOztBQUUvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsU0FBUztBQUMzQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9hdXRoQ2lwaGVyLmpzPzgyZjAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFlcyA9IHJlcXVpcmUoJy4vYWVzJylcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxudmFyIFRyYW5zZm9ybSA9IHJlcXVpcmUoJ2NpcGhlci1iYXNlJylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBHSEFTSCA9IHJlcXVpcmUoJy4vZ2hhc2gnKVxudmFyIHhvciA9IHJlcXVpcmUoJ2J1ZmZlci14b3InKVxudmFyIGluY3IzMiA9IHJlcXVpcmUoJy4vaW5jcjMyJylcblxuZnVuY3Rpb24geG9yVGVzdCAoYSwgYikge1xuICB2YXIgb3V0ID0gMFxuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSBvdXQrK1xuXG4gIHZhciBsZW4gPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBvdXQgKz0gKGFbaV0gXiBiW2ldKVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiBjYWxjSXYgKHNlbGYsIGl2LCBjaykge1xuICBpZiAoaXYubGVuZ3RoID09PSAxMikge1xuICAgIHNlbGYuX2ZpbklEID0gQnVmZmVyLmNvbmNhdChbaXYsIEJ1ZmZlci5mcm9tKFswLCAwLCAwLCAxXSldKVxuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtpdiwgQnVmZmVyLmZyb20oWzAsIDAsIDAsIDJdKV0pXG4gIH1cbiAgdmFyIGdoYXNoID0gbmV3IEdIQVNIKGNrKVxuICB2YXIgbGVuID0gaXYubGVuZ3RoXG4gIHZhciB0b1BhZCA9IGxlbiAlIDE2XG4gIGdoYXNoLnVwZGF0ZShpdilcbiAgaWYgKHRvUGFkKSB7XG4gICAgdG9QYWQgPSAxNiAtIHRvUGFkXG4gICAgZ2hhc2gudXBkYXRlKEJ1ZmZlci5hbGxvYyh0b1BhZCwgMCkpXG4gIH1cbiAgZ2hhc2gudXBkYXRlKEJ1ZmZlci5hbGxvYyg4LCAwKSlcbiAgdmFyIGl2Qml0cyA9IGxlbiAqIDhcbiAgdmFyIHRhaWwgPSBCdWZmZXIuYWxsb2MoOClcbiAgdGFpbC53cml0ZVVJbnRCRShpdkJpdHMsIDAsIDgpXG4gIGdoYXNoLnVwZGF0ZSh0YWlsKVxuICBzZWxmLl9maW5JRCA9IGdoYXNoLnN0YXRlXG4gIHZhciBvdXQgPSBCdWZmZXIuZnJvbShzZWxmLl9maW5JRClcbiAgaW5jcjMyKG91dClcbiAgcmV0dXJuIG91dFxufVxuZnVuY3Rpb24gU3RyZWFtQ2lwaGVyIChtb2RlLCBrZXksIGl2LCBkZWNyeXB0KSB7XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG5cbiAgdmFyIGggPSBCdWZmZXIuYWxsb2MoNCwgMClcblxuICB0aGlzLl9jaXBoZXIgPSBuZXcgYWVzLkFFUyhrZXkpXG4gIHZhciBjayA9IHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2soaClcbiAgdGhpcy5fZ2hhc2ggPSBuZXcgR0hBU0goY2spXG4gIGl2ID0gY2FsY0l2KHRoaXMsIGl2LCBjaylcblxuICB0aGlzLl9wcmV2ID0gQnVmZmVyLmZyb20oaXYpXG4gIHRoaXMuX2NhY2hlID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG4gIHRoaXMuX3NlY0NhY2hlID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG4gIHRoaXMuX2RlY3J5cHQgPSBkZWNyeXB0XG4gIHRoaXMuX2FsZW4gPSAwXG4gIHRoaXMuX2xlbiA9IDBcbiAgdGhpcy5fbW9kZSA9IG1vZGVcblxuICB0aGlzLl9hdXRoVGFnID0gbnVsbFxuICB0aGlzLl9jYWxsZWQgPSBmYWxzZVxufVxuXG5pbmhlcml0cyhTdHJlYW1DaXBoZXIsIFRyYW5zZm9ybSlcblxuU3RyZWFtQ2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gIGlmICghdGhpcy5fY2FsbGVkICYmIHRoaXMuX2FsZW4pIHtcbiAgICB2YXIgcnVtcCA9IDE2IC0gKHRoaXMuX2FsZW4gJSAxNilcbiAgICBpZiAocnVtcCA8IDE2KSB7XG4gICAgICBydW1wID0gQnVmZmVyLmFsbG9jKHJ1bXAsIDApXG4gICAgICB0aGlzLl9naGFzaC51cGRhdGUocnVtcClcbiAgICB9XG4gIH1cblxuICB0aGlzLl9jYWxsZWQgPSB0cnVlXG4gIHZhciBvdXQgPSB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcywgY2h1bmspXG4gIGlmICh0aGlzLl9kZWNyeXB0KSB7XG4gICAgdGhpcy5fZ2hhc2gudXBkYXRlKGNodW5rKVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX2doYXNoLnVwZGF0ZShvdXQpXG4gIH1cbiAgdGhpcy5fbGVuICs9IGNodW5rLmxlbmd0aFxuICByZXR1cm4gb3V0XG59XG5cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fZGVjcnlwdCAmJiAhdGhpcy5fYXV0aFRhZykgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEnKVxuXG4gIHZhciB0YWcgPSB4b3IodGhpcy5fZ2hhc2guZmluYWwodGhpcy5fYWxlbiAqIDgsIHRoaXMuX2xlbiAqIDgpLCB0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSlcbiAgaWYgKHRoaXMuX2RlY3J5cHQgJiYgeG9yVGVzdCh0YWcsIHRoaXMuX2F1dGhUYWcpKSB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YScpXG5cbiAgdGhpcy5fYXV0aFRhZyA9IHRhZ1xuICB0aGlzLl9jaXBoZXIuc2NydWIoKVxufVxuXG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLmdldEF1dGhUYWcgPSBmdW5jdGlvbiBnZXRBdXRoVGFnICgpIHtcbiAgaWYgKHRoaXMuX2RlY3J5cHQgfHwgIUJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSkgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZScpXG5cbiAgcmV0dXJuIHRoaXMuX2F1dGhUYWdcbn1cblxuU3RyZWFtQ2lwaGVyLnByb3RvdHlwZS5zZXRBdXRoVGFnID0gZnVuY3Rpb24gc2V0QXV0aFRhZyAodGFnKSB7XG4gIGlmICghdGhpcy5fZGVjcnlwdCkgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZScpXG5cbiAgdGhpcy5fYXV0aFRhZyA9IHRhZ1xufVxuXG5TdHJlYW1DaXBoZXIucHJvdG90eXBlLnNldEFBRCA9IGZ1bmN0aW9uIHNldEFBRCAoYnVmKSB7XG4gIGlmICh0aGlzLl9jYWxsZWQpIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlJylcblxuICB0aGlzLl9naGFzaC51cGRhdGUoYnVmKVxuICB0aGlzLl9hbGVuICs9IGJ1Zi5sZW5ndGhcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTdHJlYW1DaXBoZXJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/authCipher.js\n\n}')},"./node_modules/browserify-aes/browser.js"(__unused_webpack_module,exports,__webpack_require__){eval('{var ciphers = __webpack_require__(/*! ./encrypter */ "./node_modules/browserify-aes/encrypter.js")\nvar deciphers = __webpack_require__(/*! ./decrypter */ "./node_modules/browserify-aes/decrypter.js")\nvar modes = __webpack_require__(/*! ./modes/list.json */ "./node_modules/browserify-aes/modes/list.json")\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYnJvd3Nlci5qcyIsIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsK0RBQWE7QUFDbkMsZ0JBQWdCLG1CQUFPLENBQUMsK0RBQWE7QUFDckMsWUFBWSxtQkFBTyxDQUFDLHdFQUFtQjs7QUFFdkM7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixHQUFHLGNBQWM7QUFDckMsc0JBQXNCLEdBQUcsZ0JBQWdCO0FBQ3pDLHNCQUFzQixHQUFHLGdCQUFnQjtBQUN6Qyx3QkFBd0IsR0FBRyxrQkFBa0I7QUFDN0MsbUJBQW1CLEdBQUcsa0JBQWtCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvYnJvd3Nlci5qcz9mZGE2Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBjaXBoZXJzID0gcmVxdWlyZSgnLi9lbmNyeXB0ZXInKVxudmFyIGRlY2lwaGVycyA9IHJlcXVpcmUoJy4vZGVjcnlwdGVyJylcbnZhciBtb2RlcyA9IHJlcXVpcmUoJy4vbW9kZXMvbGlzdC5qc29uJylcblxuZnVuY3Rpb24gZ2V0Q2lwaGVycyAoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhtb2Rlcylcbn1cblxuZXhwb3J0cy5jcmVhdGVDaXBoZXIgPSBleHBvcnRzLkNpcGhlciA9IGNpcGhlcnMuY3JlYXRlQ2lwaGVyXG5leHBvcnRzLmNyZWF0ZUNpcGhlcml2ID0gZXhwb3J0cy5DaXBoZXJpdiA9IGNpcGhlcnMuY3JlYXRlQ2lwaGVyaXZcbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXIgPSBleHBvcnRzLkRlY2lwaGVyID0gZGVjaXBoZXJzLmNyZWF0ZURlY2lwaGVyXG5leHBvcnRzLmNyZWF0ZURlY2lwaGVyaXYgPSBleHBvcnRzLkRlY2lwaGVyaXYgPSBkZWNpcGhlcnMuY3JlYXRlRGVjaXBoZXJpdlxuZXhwb3J0cy5saXN0Q2lwaGVycyA9IGV4cG9ydHMuZ2V0Q2lwaGVycyA9IGdldENpcGhlcnNcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/browser.js\n\n}')},"./node_modules/browserify-aes/decrypter.js"(__unused_webpack_module,exports,__webpack_require__){eval("{var AuthCipher = __webpack_require__(/*! ./authCipher */ \"./node_modules/browserify-aes/authCipher.js\")\nvar Buffer = (__webpack_require__(/*! safe-buffer */ \"./node_modules/safe-buffer/index.js\").Buffer)\nvar MODES = __webpack_require__(/*! ./modes */ \"./node_modules/browserify-aes/modes/index.js\")\nvar StreamCipher = __webpack_require__(/*! ./streamCipher */ \"./node_modules/browserify-aes/streamCipher.js\")\nvar Transform = __webpack_require__(/*! cipher-base */ \"./node_modules/cipher-base/index.js\")\nvar aes = __webpack_require__(/*! ./aes */ \"./node_modules/browserify-aes/aes.js\")\nvar ebtk = __webpack_require__(/*! evp_bytestokey */ \"./node_modules/evp_bytestokey/index.js\")\nvar inherits = __webpack_require__(/*! inherits */ \"./node_modules/inherits/inherits_browser.js\")\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvZGVjcnlwdGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQixtQkFBTyxDQUFDLGlFQUFjO0FBQ3ZDLGFBQWEsc0ZBQTZCO0FBQzFDLFlBQVksbUJBQU8sQ0FBQyw2REFBUztBQUM3QixtQkFBbUIsbUJBQU8sQ0FBQyxxRUFBZ0I7QUFDM0MsZ0JBQWdCLG1CQUFPLENBQUMsd0RBQWE7QUFDckMsVUFBVSxtQkFBTyxDQUFDLG1EQUFPO0FBQ3pCLFdBQVcsbUJBQU8sQ0FBQyw4REFBZ0I7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLDZEQUFVOztBQUVqQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0Qix3QkFBd0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9kZWNyeXB0ZXIuanM/NDIyOCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgQXV0aENpcGhlciA9IHJlcXVpcmUoJy4vYXV0aENpcGhlcicpXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBNT0RFUyA9IHJlcXVpcmUoJy4vbW9kZXMnKVxudmFyIFN0cmVhbUNpcGhlciA9IHJlcXVpcmUoJy4vc3RyZWFtQ2lwaGVyJylcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgYWVzID0gcmVxdWlyZSgnLi9hZXMnKVxudmFyIGVidGsgPSByZXF1aXJlKCdldnBfYnl0ZXN0b2tleScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5cbmZ1bmN0aW9uIERlY2lwaGVyIChtb2RlLCBrZXksIGl2KSB7XG4gIFRyYW5zZm9ybS5jYWxsKHRoaXMpXG5cbiAgdGhpcy5fY2FjaGUgPSBuZXcgU3BsaXR0ZXIoKVxuICB0aGlzLl9sYXN0ID0gdm9pZCAwXG4gIHRoaXMuX2NpcGhlciA9IG5ldyBhZXMuQUVTKGtleSlcbiAgdGhpcy5fcHJldiA9IEJ1ZmZlci5mcm9tKGl2KVxuICB0aGlzLl9tb2RlID0gbW9kZVxuICB0aGlzLl9hdXRvcGFkZGluZyA9IHRydWVcbn1cblxuaW5oZXJpdHMoRGVjaXBoZXIsIFRyYW5zZm9ybSlcblxuRGVjaXBoZXIucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLl9jYWNoZS5hZGQoZGF0YSlcbiAgdmFyIGNodW5rXG4gIHZhciB0aGluZ1xuICB2YXIgb3V0ID0gW11cbiAgd2hpbGUgKChjaHVuayA9IHRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZykpKSB7XG4gICAgdGhpbmcgPSB0aGlzLl9tb2RlLmRlY3J5cHQodGhpcywgY2h1bmspXG4gICAgb3V0LnB1c2godGhpbmcpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQob3V0KVxufVxuXG5EZWNpcGhlci5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY2h1bmsgPSB0aGlzLl9jYWNoZS5mbHVzaCgpXG4gIGlmICh0aGlzLl9hdXRvcGFkZGluZykge1xuICAgIHJldHVybiB1bnBhZCh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcywgY2h1bmspKVxuICB9IGVsc2UgaWYgKGNodW5rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgnKVxuICB9XG59XG5cbkRlY2lwaGVyLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZyA9IGZ1bmN0aW9uIChzZXRUbykge1xuICB0aGlzLl9hdXRvcGFkZGluZyA9ICEhc2V0VG9cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gU3BsaXR0ZXIgKCkge1xuICB0aGlzLmNhY2hlID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG59XG5cblNwbGl0dGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLmNhY2hlID0gQnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSwgZGF0YV0pXG59XG5cblNwbGl0dGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoYXV0b1BhZGRpbmcpIHtcbiAgdmFyIG91dFxuICBpZiAoYXV0b1BhZGRpbmcpIHtcbiAgICBpZiAodGhpcy5jYWNoZS5sZW5ndGggPiAxNikge1xuICAgICAgb3V0ID0gdGhpcy5jYWNoZS5zbGljZSgwLCAxNilcbiAgICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlLnNsaWNlKDE2KVxuICAgICAgcmV0dXJuIG91dFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodGhpcy5jYWNoZS5sZW5ndGggPj0gMTYpIHtcbiAgICAgIG91dCA9IHRoaXMuY2FjaGUuc2xpY2UoMCwgMTYpXG4gICAgICB0aGlzLmNhY2hlID0gdGhpcy5jYWNoZS5zbGljZSgxNilcbiAgICAgIHJldHVybiBvdXRcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5TcGxpdHRlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNhY2hlLmxlbmd0aCkgcmV0dXJuIHRoaXMuY2FjaGVcbn1cblxuZnVuY3Rpb24gdW5wYWQgKGxhc3QpIHtcbiAgdmFyIHBhZGRlZCA9IGxhc3RbMTVdXG4gIGlmIChwYWRkZWQgPCAxIHx8IHBhZGRlZCA+IDE2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gZGVjcnlwdCBkYXRhJylcbiAgfVxuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBwYWRkZWQpIHtcbiAgICBpZiAobGFzdFsoaSArICgxNiAtIHBhZGRlZCkpXSAhPT0gcGFkZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuYWJsZSB0byBkZWNyeXB0IGRhdGEnKVxuICAgIH1cbiAgfVxuICBpZiAocGFkZGVkID09PSAxNikgcmV0dXJuXG5cbiAgcmV0dXJuIGxhc3Quc2xpY2UoMCwgMTYgLSBwYWRkZWQpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlY2lwaGVyaXYgKHN1aXRlLCBwYXNzd29yZCwgaXYpIHtcbiAgdmFyIGNvbmZpZyA9IE1PREVTW3N1aXRlLnRvTG93ZXJDYXNlKCldXG4gIGlmICghY29uZmlnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuXG4gIGlmICh0eXBlb2YgaXYgPT09ICdzdHJpbmcnKSBpdiA9IEJ1ZmZlci5mcm9tKGl2KVxuICBpZiAoY29uZmlnLm1vZGUgIT09ICdHQ00nICYmIGl2Lmxlbmd0aCAhPT0gY29uZmlnLml2KSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGl2IGxlbmd0aCAnICsgaXYubGVuZ3RoKVxuXG4gIGlmICh0eXBlb2YgcGFzc3dvcmQgPT09ICdzdHJpbmcnKSBwYXNzd29yZCA9IEJ1ZmZlci5mcm9tKHBhc3N3b3JkKVxuICBpZiAocGFzc3dvcmQubGVuZ3RoICE9PSBjb25maWcua2V5IC8gOCkgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBrZXkgbGVuZ3RoICcgKyBwYXNzd29yZC5sZW5ndGgpXG5cbiAgaWYgKGNvbmZpZy50eXBlID09PSAnc3RyZWFtJykge1xuICAgIHJldHVybiBuZXcgU3RyZWFtQ2lwaGVyKGNvbmZpZy5tb2R1bGUsIHBhc3N3b3JkLCBpdiwgdHJ1ZSlcbiAgfSBlbHNlIGlmIChjb25maWcudHlwZSA9PT0gJ2F1dGgnKSB7XG4gICAgcmV0dXJuIG5ldyBBdXRoQ2lwaGVyKGNvbmZpZy5tb2R1bGUsIHBhc3N3b3JkLCBpdiwgdHJ1ZSlcbiAgfVxuXG4gIHJldHVybiBuZXcgRGVjaXBoZXIoY29uZmlnLm1vZHVsZSwgcGFzc3dvcmQsIGl2KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWNpcGhlciAoc3VpdGUsIHBhc3N3b3JkKSB7XG4gIHZhciBjb25maWcgPSBNT0RFU1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcblxuICB2YXIga2V5cyA9IGVidGsocGFzc3dvcmQsIGZhbHNlLCBjb25maWcua2V5LCBjb25maWcuaXYpXG4gIHJldHVybiBjcmVhdGVEZWNpcGhlcml2KHN1aXRlLCBrZXlzLmtleSwga2V5cy5pdilcbn1cblxuZXhwb3J0cy5jcmVhdGVEZWNpcGhlciA9IGNyZWF0ZURlY2lwaGVyXG5leHBvcnRzLmNyZWF0ZURlY2lwaGVyaXYgPSBjcmVhdGVEZWNpcGhlcml2XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/decrypter.js\n\n}")},"./node_modules/browserify-aes/encrypter.js"(__unused_webpack_module,exports,__webpack_require__){eval("{var MODES = __webpack_require__(/*! ./modes */ \"./node_modules/browserify-aes/modes/index.js\")\nvar AuthCipher = __webpack_require__(/*! ./authCipher */ \"./node_modules/browserify-aes/authCipher.js\")\nvar Buffer = (__webpack_require__(/*! safe-buffer */ \"./node_modules/safe-buffer/index.js\").Buffer)\nvar StreamCipher = __webpack_require__(/*! ./streamCipher */ \"./node_modules/browserify-aes/streamCipher.js\")\nvar Transform = __webpack_require__(/*! cipher-base */ \"./node_modules/cipher-base/index.js\")\nvar aes = __webpack_require__(/*! ./aes */ \"./node_modules/browserify-aes/aes.js\")\nvar ebtk = __webpack_require__(/*! evp_bytestokey */ \"./node_modules/evp_bytestokey/index.js\")\nvar inherits = __webpack_require__(/*! inherits */ \"./node_modules/inherits/inherits_browser.js\")\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvZW5jcnlwdGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyw2REFBUztBQUM3QixpQkFBaUIsbUJBQU8sQ0FBQyxpRUFBYztBQUN2QyxhQUFhLHNGQUE2QjtBQUMxQyxtQkFBbUIsbUJBQU8sQ0FBQyxxRUFBZ0I7QUFDM0MsZ0JBQWdCLG1CQUFPLENBQUMsd0RBQWE7QUFDckMsVUFBVSxtQkFBTyxDQUFDLG1EQUFPO0FBQ3pCLFdBQVcsbUJBQU8sQ0FBQyw4REFBZ0I7QUFDbkMsZUFBZSxtQkFBTyxDQUFDLDZEQUFVOztBQUVqQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0QixvQkFBb0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWFlcy9lbmNyeXB0ZXIuanM/ODk0NyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTU9ERVMgPSByZXF1aXJlKCcuL21vZGVzJylcbnZhciBBdXRoQ2lwaGVyID0gcmVxdWlyZSgnLi9hdXRoQ2lwaGVyJylcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxudmFyIFN0cmVhbUNpcGhlciA9IHJlcXVpcmUoJy4vc3RyZWFtQ2lwaGVyJylcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgYWVzID0gcmVxdWlyZSgnLi9hZXMnKVxudmFyIGVidGsgPSByZXF1aXJlKCdldnBfYnl0ZXN0b2tleScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5cbmZ1bmN0aW9uIENpcGhlciAobW9kZSwga2V5LCBpdikge1xuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuXG4gIHRoaXMuX2NhY2hlID0gbmV3IFNwbGl0dGVyKClcbiAgdGhpcy5fY2lwaGVyID0gbmV3IGFlcy5BRVMoa2V5KVxuICB0aGlzLl9wcmV2ID0gQnVmZmVyLmZyb20oaXYpXG4gIHRoaXMuX21vZGUgPSBtb2RlXG4gIHRoaXMuX2F1dG9wYWRkaW5nID0gdHJ1ZVxufVxuXG5pbmhlcml0cyhDaXBoZXIsIFRyYW5zZm9ybSlcblxuQ2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdGhpcy5fY2FjaGUuYWRkKGRhdGEpXG4gIHZhciBjaHVua1xuICB2YXIgdGhpbmdcbiAgdmFyIG91dCA9IFtdXG5cbiAgd2hpbGUgKChjaHVuayA9IHRoaXMuX2NhY2hlLmdldCgpKSkge1xuICAgIHRoaW5nID0gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsIGNodW5rKVxuICAgIG91dC5wdXNoKHRoaW5nKVxuICB9XG5cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQob3V0KVxufVxuXG52YXIgUEFERElORyA9IEJ1ZmZlci5hbGxvYygxNiwgMHgxMClcblxuQ2lwaGVyLnByb3RvdHlwZS5fZmluYWwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjaHVuayA9IHRoaXMuX2NhY2hlLmZsdXNoKClcbiAgaWYgKHRoaXMuX2F1dG9wYWRkaW5nKSB7XG4gICAgY2h1bmsgPSB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcywgY2h1bmspXG4gICAgdGhpcy5fY2lwaGVyLnNjcnViKClcbiAgICByZXR1cm4gY2h1bmtcbiAgfVxuXG4gIGlmICghY2h1bmsuZXF1YWxzKFBBRERJTkcpKSB7XG4gICAgdGhpcy5fY2lwaGVyLnNjcnViKClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCcpXG4gIH1cbn1cblxuQ2lwaGVyLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZyA9IGZ1bmN0aW9uIChzZXRUbykge1xuICB0aGlzLl9hdXRvcGFkZGluZyA9ICEhc2V0VG9cbiAgcmV0dXJuIHRoaXNcbn1cblxuZnVuY3Rpb24gU3BsaXR0ZXIgKCkge1xuICB0aGlzLmNhY2hlID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG59XG5cblNwbGl0dGVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICB0aGlzLmNhY2hlID0gQnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSwgZGF0YV0pXG59XG5cblNwbGl0dGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmNhY2hlLmxlbmd0aCA+IDE1KSB7XG4gICAgdmFyIG91dCA9IHRoaXMuY2FjaGUuc2xpY2UoMCwgMTYpXG4gICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuc2xpY2UoMTYpXG4gICAgcmV0dXJuIG91dFxuICB9XG4gIHJldHVybiBudWxsXG59XG5cblNwbGl0dGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxlbiA9IDE2IC0gdGhpcy5jYWNoZS5sZW5ndGhcbiAgdmFyIHBhZEJ1ZmYgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuKVxuXG4gIHZhciBpID0gLTFcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHBhZEJ1ZmYud3JpdGVVSW50OChsZW4sIGkpXG4gIH1cblxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSwgcGFkQnVmZl0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNpcGhlcml2IChzdWl0ZSwgcGFzc3dvcmQsIGl2KSB7XG4gIHZhciBjb25maWcgPSBNT0RFU1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcblxuICBpZiAodHlwZW9mIHBhc3N3b3JkID09PSAnc3RyaW5nJykgcGFzc3dvcmQgPSBCdWZmZXIuZnJvbShwYXNzd29yZClcbiAgaWYgKHBhc3N3b3JkLmxlbmd0aCAhPT0gY29uZmlnLmtleSAvIDgpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQga2V5IGxlbmd0aCAnICsgcGFzc3dvcmQubGVuZ3RoKVxuXG4gIGlmICh0eXBlb2YgaXYgPT09ICdzdHJpbmcnKSBpdiA9IEJ1ZmZlci5mcm9tKGl2KVxuICBpZiAoY29uZmlnLm1vZGUgIT09ICdHQ00nICYmIGl2Lmxlbmd0aCAhPT0gY29uZmlnLml2KSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGl2IGxlbmd0aCAnICsgaXYubGVuZ3RoKVxuXG4gIGlmIChjb25maWcudHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICByZXR1cm4gbmV3IFN0cmVhbUNpcGhlcihjb25maWcubW9kdWxlLCBwYXNzd29yZCwgaXYpXG4gIH0gZWxzZSBpZiAoY29uZmlnLnR5cGUgPT09ICdhdXRoJykge1xuICAgIHJldHVybiBuZXcgQXV0aENpcGhlcihjb25maWcubW9kdWxlLCBwYXNzd29yZCwgaXYpXG4gIH1cblxuICByZXR1cm4gbmV3IENpcGhlcihjb25maWcubW9kdWxlLCBwYXNzd29yZCwgaXYpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNpcGhlciAoc3VpdGUsIHBhc3N3b3JkKSB7XG4gIHZhciBjb25maWcgPSBNT0RFU1tzdWl0ZS50b0xvd2VyQ2FzZSgpXVxuICBpZiAoIWNvbmZpZykgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcblxuICB2YXIga2V5cyA9IGVidGsocGFzc3dvcmQsIGZhbHNlLCBjb25maWcua2V5LCBjb25maWcuaXYpXG4gIHJldHVybiBjcmVhdGVDaXBoZXJpdihzdWl0ZSwga2V5cy5rZXksIGtleXMuaXYpXG59XG5cbmV4cG9ydHMuY3JlYXRlQ2lwaGVyaXYgPSBjcmVhdGVDaXBoZXJpdlxuZXhwb3J0cy5jcmVhdGVDaXBoZXIgPSBjcmVhdGVDaXBoZXJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/encrypter.js\n\n}")},"./node_modules/browserify-aes/ghash.js"(module,__unused_webpack_exports,__webpack_require__){eval('{var Buffer = (__webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer)\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvZ2hhc2guanMiLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxzRkFBNkI7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvZ2hhc2guanM/M2Y2MiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBaRVJPRVMgPSBCdWZmZXIuYWxsb2MoMTYsIDApXG5cbmZ1bmN0aW9uIHRvQXJyYXkgKGJ1Zikge1xuICByZXR1cm4gW1xuICAgIGJ1Zi5yZWFkVUludDMyQkUoMCksXG4gICAgYnVmLnJlYWRVSW50MzJCRSg0KSxcbiAgICBidWYucmVhZFVJbnQzMkJFKDgpLFxuICAgIGJ1Zi5yZWFkVUludDMyQkUoMTIpXG4gIF1cbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5IChvdXQpIHtcbiAgdmFyIGJ1ZiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgxNilcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzBdID4+PiAwLCAwKVxuICBidWYud3JpdGVVSW50MzJCRShvdXRbMV0gPj4+IDAsIDQpXG4gIGJ1Zi53cml0ZVVJbnQzMkJFKG91dFsyXSA+Pj4gMCwgOClcbiAgYnVmLndyaXRlVUludDMyQkUob3V0WzNdID4+PiAwLCAxMilcbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBHSEFTSCAoa2V5KSB7XG4gIHRoaXMuaCA9IGtleVxuICB0aGlzLnN0YXRlID0gQnVmZmVyLmFsbG9jKDE2LCAwKVxuICB0aGlzLmNhY2hlID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG59XG5cbi8vIGZyb20gaHR0cDovL2JpdHdpc2VzaGlmdGxlZnQuZ2l0aHViLmlvL3NqY2wvZG9jL3N5bWJvbHMvc3JjL2NvcmVfZ2NtLmpzLmh0bWxcbi8vIGJ5IEp1aG8gVsOkaMOkLUhlcnR0dWFcbkdIQVNILnByb3RvdHlwZS5naGFzaCA9IGZ1bmN0aW9uIChibG9jaykge1xuICB2YXIgaSA9IC0xXG4gIHdoaWxlICgrK2kgPCBibG9jay5sZW5ndGgpIHtcbiAgICB0aGlzLnN0YXRlW2ldIF49IGJsb2NrW2ldXG4gIH1cbiAgdGhpcy5fbXVsdGlwbHkoKVxufVxuXG5HSEFTSC5wcm90b3R5cGUuX211bHRpcGx5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgVmkgPSB0b0FycmF5KHRoaXMuaClcbiAgdmFyIFppID0gWzAsIDAsIDAsIDBdXG4gIHZhciBqLCB4aSwgbHNiVmlcbiAgdmFyIGkgPSAtMVxuICB3aGlsZSAoKytpIDwgMTI4KSB7XG4gICAgeGkgPSAodGhpcy5zdGF0ZVt+fihpIC8gOCldICYgKDEgPDwgKDcgLSAoaSAlIDgpKSkpICE9PSAwXG4gICAgaWYgKHhpKSB7XG4gICAgICAvLyBaX2krMSA9IFpfaSBeIFZfaVxuICAgICAgWmlbMF0gXj0gVmlbMF1cbiAgICAgIFppWzFdIF49IFZpWzFdXG4gICAgICBaaVsyXSBePSBWaVsyXVxuICAgICAgWmlbM10gXj0gVmlbM11cbiAgICB9XG5cbiAgICAvLyBTdG9yZSB0aGUgdmFsdWUgb2YgTFNCKFZfaSlcbiAgICBsc2JWaSA9IChWaVszXSAmIDEpICE9PSAwXG5cbiAgICAvLyBWX2krMSA9IFZfaSA+PiAxXG4gICAgZm9yIChqID0gMzsgaiA+IDA7IGotLSkge1xuICAgICAgVmlbal0gPSAoVmlbal0gPj4+IDEpIHwgKChWaVtqIC0gMV0gJiAxKSA8PCAzMSlcbiAgICB9XG4gICAgVmlbMF0gPSBWaVswXSA+Pj4gMVxuXG4gICAgLy8gSWYgTFNCKFZfaSkgaXMgMSwgVl9pKzEgPSAoVl9pID4+IDEpIF4gUlxuICAgIGlmIChsc2JWaSkge1xuICAgICAgVmlbMF0gPSBWaVswXSBeICgweGUxIDw8IDI0KVxuICAgIH1cbiAgfVxuICB0aGlzLnN0YXRlID0gZnJvbUFycmF5KFppKVxufVxuXG5HSEFTSC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGJ1Zikge1xuICB0aGlzLmNhY2hlID0gQnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSwgYnVmXSlcbiAgdmFyIGNodW5rXG4gIHdoaWxlICh0aGlzLmNhY2hlLmxlbmd0aCA+PSAxNikge1xuICAgIGNodW5rID0gdGhpcy5jYWNoZS5zbGljZSgwLCAxNilcbiAgICB0aGlzLmNhY2hlID0gdGhpcy5jYWNoZS5zbGljZSgxNilcbiAgICB0aGlzLmdoYXNoKGNodW5rKVxuICB9XG59XG5cbkdIQVNILnByb3RvdHlwZS5maW5hbCA9IGZ1bmN0aW9uIChhYmwsIGJsKSB7XG4gIGlmICh0aGlzLmNhY2hlLmxlbmd0aCkge1xuICAgIHRoaXMuZ2hhc2goQnVmZmVyLmNvbmNhdChbdGhpcy5jYWNoZSwgWkVST0VTXSwgMTYpKVxuICB9XG5cbiAgdGhpcy5naGFzaChmcm9tQXJyYXkoWzAsIGFibCwgMCwgYmxdKSlcbiAgcmV0dXJuIHRoaXMuc3RhdGVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBHSEFTSFxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/ghash.js\n\n}')},"./node_modules/browserify-aes/incr32.js"(module){eval("{function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvaW5jcjMyLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvaW5jcjMyLmpzP2JkOWQiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gaW5jcjMyIChpdikge1xuICB2YXIgbGVuID0gaXYubGVuZ3RoXG4gIHZhciBpdGVtXG4gIHdoaWxlIChsZW4tLSkge1xuICAgIGl0ZW0gPSBpdi5yZWFkVUludDgobGVuKVxuICAgIGlmIChpdGVtID09PSAyNTUpIHtcbiAgICAgIGl2LndyaXRlVUludDgoMCwgbGVuKVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtKytcbiAgICAgIGl2LndyaXRlVUludDgoaXRlbSwgbGVuKVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gaW5jcjMyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/incr32.js\n\n}")},"./node_modules/browserify-aes/modes/cbc.js"(__unused_webpack_module,exports,__webpack_require__){eval('{var xor = __webpack_require__(/*! buffer-xor */ "./node_modules/buffer-xor/index.js")\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2JjLmpzIiwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxzREFBWTs7QUFFOUIsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2JjLmpzP2MxMTkiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHhvciA9IHJlcXVpcmUoJ2J1ZmZlci14b3InKVxuXG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgYmxvY2spIHtcbiAgdmFyIGRhdGEgPSB4b3IoYmxvY2ssIHNlbGYuX3ByZXYpXG5cbiAgc2VsZi5fcHJldiA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soZGF0YSlcbiAgcmV0dXJuIHNlbGYuX3ByZXZcbn1cblxuZXhwb3J0cy5kZWNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGJsb2NrKSB7XG4gIHZhciBwYWQgPSBzZWxmLl9wcmV2XG5cbiAgc2VsZi5fcHJldiA9IGJsb2NrXG4gIHZhciBvdXQgPSBzZWxmLl9jaXBoZXIuZGVjcnlwdEJsb2NrKGJsb2NrKVxuXG4gIHJldHVybiB4b3Iob3V0LCBwYWQpXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/modes/cbc.js\n\n}')},"./node_modules/browserify-aes/modes/cfb.js"(__unused_webpack_module,exports,__webpack_require__){eval('{var Buffer = (__webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer)\nvar xor = __webpack_require__(/*! buffer-xor */ "./node_modules/buffer-xor/index.js")\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2ZiLmpzIiwibWFwcGluZ3MiOiJBQUFBLGFBQWEsc0ZBQTZCO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQyxzREFBWTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZTtBQUNmO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2ZiLmpzPzM1MDUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyXG52YXIgeG9yID0gcmVxdWlyZSgnYnVmZmVyLXhvcicpXG5cbmZ1bmN0aW9uIGVuY3J5cHRTdGFydCAoc2VsZiwgZGF0YSwgZGVjcnlwdCkge1xuICB2YXIgbGVuID0gZGF0YS5sZW5ndGhcbiAgdmFyIG91dCA9IHhvcihkYXRhLCBzZWxmLl9jYWNoZSlcbiAgc2VsZi5fY2FjaGUgPSBzZWxmLl9jYWNoZS5zbGljZShsZW4pXG4gIHNlbGYuX3ByZXYgPSBCdWZmZXIuY29uY2F0KFtzZWxmLl9wcmV2LCBkZWNyeXB0ID8gZGF0YSA6IG91dF0pXG4gIHJldHVybiBvdXRcbn1cblxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGRhdGEsIGRlY3J5cHQpIHtcbiAgdmFyIG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgwKVxuICB2YXIgbGVuXG5cbiAgd2hpbGUgKGRhdGEubGVuZ3RoKSB7XG4gICAgaWYgKHNlbGYuX2NhY2hlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc2VsZi5fY2FjaGUgPSBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHNlbGYuX3ByZXYpXG4gICAgICBzZWxmLl9wcmV2ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG4gICAgfVxuXG4gICAgaWYgKHNlbGYuX2NhY2hlLmxlbmd0aCA8PSBkYXRhLmxlbmd0aCkge1xuICAgICAgbGVuID0gc2VsZi5fY2FjaGUubGVuZ3RoXG4gICAgICBvdXQgPSBCdWZmZXIuY29uY2F0KFtvdXQsIGVuY3J5cHRTdGFydChzZWxmLCBkYXRhLnNsaWNlKDAsIGxlbiksIGRlY3J5cHQpXSlcbiAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKGxlbilcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ID0gQnVmZmVyLmNvbmNhdChbb3V0LCBlbmNyeXB0U3RhcnQoc2VsZiwgZGF0YSwgZGVjcnlwdCldKVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/modes/cfb.js\n\n}')},"./node_modules/browserify-aes/modes/cfb1.js"(__unused_webpack_module,exports,__webpack_require__){eval('{var Buffer = (__webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer)\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2ZiMS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxhQUFhLHNGQUE2Qjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZUFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NmYjEuanM/NTIzOSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcblxuZnVuY3Rpb24gZW5jcnlwdEJ5dGUgKHNlbGYsIGJ5dGVQYXJhbSwgZGVjcnlwdCkge1xuICB2YXIgcGFkXG4gIHZhciBpID0gLTFcbiAgdmFyIGxlbiA9IDhcbiAgdmFyIG91dCA9IDBcbiAgdmFyIGJpdCwgdmFsdWVcbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIHBhZCA9IHNlbGYuX2NpcGhlci5lbmNyeXB0QmxvY2soc2VsZi5fcHJldilcbiAgICBiaXQgPSAoYnl0ZVBhcmFtICYgKDEgPDwgKDcgLSBpKSkpID8gMHg4MCA6IDBcbiAgICB2YWx1ZSA9IHBhZFswXSBeIGJpdFxuICAgIG91dCArPSAoKHZhbHVlICYgMHg4MCkgPj4gKGkgJSA4KSlcbiAgICBzZWxmLl9wcmV2ID0gc2hpZnRJbihzZWxmLl9wcmV2LCBkZWNyeXB0ID8gYml0IDogdmFsdWUpXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiBzaGlmdEluIChidWZmZXIsIHZhbHVlKSB7XG4gIHZhciBsZW4gPSBidWZmZXIubGVuZ3RoXG4gIHZhciBpID0gLTFcbiAgdmFyIG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShidWZmZXIubGVuZ3RoKVxuICBidWZmZXIgPSBCdWZmZXIuY29uY2F0KFtidWZmZXIsIEJ1ZmZlci5mcm9tKFt2YWx1ZV0pXSlcblxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgb3V0W2ldID0gYnVmZmVyW2ldIDw8IDEgfCBidWZmZXJbaSArIDFdID4+ICg3KVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuXG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgY2h1bmssIGRlY3J5cHQpIHtcbiAgdmFyIGxlbiA9IGNodW5rLmxlbmd0aFxuICB2YXIgb3V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbilcbiAgdmFyIGkgPSAtMVxuXG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBvdXRbaV0gPSBlbmNyeXB0Qnl0ZShzZWxmLCBjaHVua1tpXSwgZGVjcnlwdClcbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/modes/cfb1.js\n\n}')},"./node_modules/browserify-aes/modes/cfb8.js"(__unused_webpack_module,exports,__webpack_require__){eval('{var Buffer = (__webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer)\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY2ZiOC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxhQUFhLHNGQUE2Qjs7QUFFMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZUFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2NmYjguanM/NjJjOSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcblxuZnVuY3Rpb24gZW5jcnlwdEJ5dGUgKHNlbGYsIGJ5dGVQYXJhbSwgZGVjcnlwdCkge1xuICB2YXIgcGFkID0gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhzZWxmLl9wcmV2KVxuICB2YXIgb3V0ID0gcGFkWzBdIF4gYnl0ZVBhcmFtXG5cbiAgc2VsZi5fcHJldiA9IEJ1ZmZlci5jb25jYXQoW1xuICAgIHNlbGYuX3ByZXYuc2xpY2UoMSksXG4gICAgQnVmZmVyLmZyb20oW2RlY3J5cHQgPyBieXRlUGFyYW0gOiBvdXRdKVxuICBdKVxuXG4gIHJldHVybiBvdXRcbn1cblxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGNodW5rLCBkZWNyeXB0KSB7XG4gIHZhciBsZW4gPSBjaHVuay5sZW5ndGhcbiAgdmFyIG91dCA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW4pXG4gIHZhciBpID0gLTFcblxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgb3V0W2ldID0gZW5jcnlwdEJ5dGUoc2VsZiwgY2h1bmtbaV0sIGRlY3J5cHQpXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/modes/cfb8.js\n\n}')},"./node_modules/browserify-aes/modes/ctr.js"(__unused_webpack_module,exports,__webpack_require__){eval('{var xor = __webpack_require__(/*! buffer-xor */ "./node_modules/buffer-xor/index.js")\nvar Buffer = (__webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer)\nvar incr32 = __webpack_require__(/*! ../incr32 */ "./node_modules/browserify-aes/incr32.js")\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvY3RyLmpzIiwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxzREFBWTtBQUM5QixhQUFhLHNGQUE2QjtBQUMxQyxhQUFhLG1CQUFPLENBQUMsMERBQVc7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGNBQWM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL21vZGVzL2N0ci5qcz82YWRlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciB4b3IgPSByZXF1aXJlKCdidWZmZXIteG9yJylcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxudmFyIGluY3IzMiA9IHJlcXVpcmUoJy4uL2luY3IzMicpXG5cbmZ1bmN0aW9uIGdldEJsb2NrIChzZWxmKSB7XG4gIHZhciBvdXQgPSBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KHNlbGYuX3ByZXYpXG4gIGluY3IzMihzZWxmLl9wcmV2KVxuICByZXR1cm4gb3V0XG59XG5cbnZhciBibG9ja1NpemUgPSAxNlxuZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGNodW5rKSB7XG4gIHZhciBjaHVua051bSA9IE1hdGguY2VpbChjaHVuay5sZW5ndGggLyBibG9ja1NpemUpXG4gIHZhciBzdGFydCA9IHNlbGYuX2NhY2hlLmxlbmd0aFxuICBzZWxmLl9jYWNoZSA9IEJ1ZmZlci5jb25jYXQoW1xuICAgIHNlbGYuX2NhY2hlLFxuICAgIEJ1ZmZlci5hbGxvY1Vuc2FmZShjaHVua051bSAqIGJsb2NrU2l6ZSlcbiAgXSlcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVua051bTsgaSsrKSB7XG4gICAgdmFyIG91dCA9IGdldEJsb2NrKHNlbGYpXG4gICAgdmFyIG9mZnNldCA9IHN0YXJ0ICsgaSAqIGJsb2NrU2l6ZVxuICAgIHNlbGYuX2NhY2hlLndyaXRlVUludDMyQkUob3V0WzBdLCBvZmZzZXQgKyAwKVxuICAgIHNlbGYuX2NhY2hlLndyaXRlVUludDMyQkUob3V0WzFdLCBvZmZzZXQgKyA0KVxuICAgIHNlbGYuX2NhY2hlLndyaXRlVUludDMyQkUob3V0WzJdLCBvZmZzZXQgKyA4KVxuICAgIHNlbGYuX2NhY2hlLndyaXRlVUludDMyQkUob3V0WzNdLCBvZmZzZXQgKyAxMilcbiAgfVxuICB2YXIgcGFkID0gc2VsZi5fY2FjaGUuc2xpY2UoMCwgY2h1bmsubGVuZ3RoKVxuICBzZWxmLl9jYWNoZSA9IHNlbGYuX2NhY2hlLnNsaWNlKGNodW5rLmxlbmd0aClcbiAgcmV0dXJuIHhvcihjaHVuaywgcGFkKVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/modes/ctr.js\n\n}')},"./node_modules/browserify-aes/modes/ecb.js"(__unused_webpack_module,exports){eval("{exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvZWNiLmpzIiwibWFwcGluZ3MiOiJBQUFBLGVBQWU7QUFDZjtBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvZWNiLmpzPzAxNDUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0cy5lbmNyeXB0ID0gZnVuY3Rpb24gKHNlbGYsIGJsb2NrKSB7XG4gIHJldHVybiBzZWxmLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGJsb2NrKVxufVxuXG5leHBvcnRzLmRlY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgYmxvY2spIHtcbiAgcmV0dXJuIHNlbGYuX2NpcGhlci5kZWNyeXB0QmxvY2soYmxvY2spXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/modes/ecb.js\n\n}")},"./node_modules/browserify-aes/modes/index.js"(module,__unused_webpack_exports,__webpack_require__){eval('{var modeModules = {\n ECB: __webpack_require__(/*! ./ecb */ "./node_modules/browserify-aes/modes/ecb.js"),\n CBC: __webpack_require__(/*! ./cbc */ "./node_modules/browserify-aes/modes/cbc.js"),\n CFB: __webpack_require__(/*! ./cfb */ "./node_modules/browserify-aes/modes/cfb.js"),\n CFB8: __webpack_require__(/*! ./cfb8 */ "./node_modules/browserify-aes/modes/cfb8.js"),\n CFB1: __webpack_require__(/*! ./cfb1 */ "./node_modules/browserify-aes/modes/cfb1.js"),\n OFB: __webpack_require__(/*! ./ofb */ "./node_modules/browserify-aes/modes/ofb.js"),\n CTR: __webpack_require__(/*! ./ctr */ "./node_modules/browserify-aes/modes/ctr.js"),\n GCM: __webpack_require__(/*! ./ctr */ "./node_modules/browserify-aes/modes/ctr.js")\n}\n\nvar modes = __webpack_require__(/*! ./list.json */ "./node_modules/browserify-aes/modes/list.json")\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxPQUFPLG1CQUFPLENBQUMseURBQU87QUFDdEIsT0FBTyxtQkFBTyxDQUFDLHlEQUFPO0FBQ3RCLE9BQU8sbUJBQU8sQ0FBQyx5REFBTztBQUN0QixRQUFRLG1CQUFPLENBQUMsMkRBQVE7QUFDeEIsUUFBUSxtQkFBTyxDQUFDLDJEQUFRO0FBQ3hCLE9BQU8sbUJBQU8sQ0FBQyx5REFBTztBQUN0QixPQUFPLG1CQUFPLENBQUMseURBQU87QUFDdEIsT0FBTyxtQkFBTyxDQUFDLHlEQUFPO0FBQ3RCOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxrRUFBYTs7QUFFakM7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvaW5kZXguanM/YmFjMiJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgbW9kZU1vZHVsZXMgPSB7XG4gIEVDQjogcmVxdWlyZSgnLi9lY2InKSxcbiAgQ0JDOiByZXF1aXJlKCcuL2NiYycpLFxuICBDRkI6IHJlcXVpcmUoJy4vY2ZiJyksXG4gIENGQjg6IHJlcXVpcmUoJy4vY2ZiOCcpLFxuICBDRkIxOiByZXF1aXJlKCcuL2NmYjEnKSxcbiAgT0ZCOiByZXF1aXJlKCcuL29mYicpLFxuICBDVFI6IHJlcXVpcmUoJy4vY3RyJyksXG4gIEdDTTogcmVxdWlyZSgnLi9jdHInKVxufVxuXG52YXIgbW9kZXMgPSByZXF1aXJlKCcuL2xpc3QuanNvbicpXG5cbmZvciAodmFyIGtleSBpbiBtb2Rlcykge1xuICBtb2Rlc1trZXldLm1vZHVsZSA9IG1vZGVNb2R1bGVzW21vZGVzW2tleV0ubW9kZV1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtb2Rlc1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/modes/index.js\n\n}')},"./node_modules/browserify-aes/modes/ofb.js"(__unused_webpack_module,exports,__webpack_require__){eval('{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer;\nvar xor = __webpack_require__(/*! buffer-xor */ "./node_modules/buffer-xor/index.js")\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvb2ZiLmpzIiwibWFwcGluZ3MiOiI7QUFBQSxVQUFVLG1CQUFPLENBQUMsc0RBQVk7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBLGtCQUFrQixNQUFNO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvbW9kZXMvb2ZiLmpzPzUxNjUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHhvciA9IHJlcXVpcmUoJ2J1ZmZlci14b3InKVxuXG5mdW5jdGlvbiBnZXRCbG9jayAoc2VsZikge1xuICBzZWxmLl9wcmV2ID0gc2VsZi5fY2lwaGVyLmVuY3J5cHRCbG9jayhzZWxmLl9wcmV2KVxuICByZXR1cm4gc2VsZi5fcHJldlxufVxuXG5leHBvcnRzLmVuY3J5cHQgPSBmdW5jdGlvbiAoc2VsZiwgY2h1bmspIHtcbiAgd2hpbGUgKHNlbGYuX2NhY2hlLmxlbmd0aCA8IGNodW5rLmxlbmd0aCkge1xuICAgIHNlbGYuX2NhY2hlID0gQnVmZmVyLmNvbmNhdChbc2VsZi5fY2FjaGUsIGdldEJsb2NrKHNlbGYpXSlcbiAgfVxuXG4gIHZhciBwYWQgPSBzZWxmLl9jYWNoZS5zbGljZSgwLCBjaHVuay5sZW5ndGgpXG4gIHNlbGYuX2NhY2hlID0gc2VsZi5fY2FjaGUuc2xpY2UoY2h1bmsubGVuZ3RoKVxuICByZXR1cm4geG9yKGNodW5rLCBwYWQpXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/modes/ofb.js\n\n}')},"./node_modules/browserify-aes/streamCipher.js"(module,__unused_webpack_exports,__webpack_require__){eval('{var aes = __webpack_require__(/*! ./aes */ "./node_modules/browserify-aes/aes.js")\nvar Buffer = (__webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer)\nvar Transform = __webpack_require__(/*! cipher-base */ "./node_modules/cipher-base/index.js")\nvar inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js")\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1hZXMvc3RyZWFtQ2lwaGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxtREFBTztBQUN6QixhQUFhLHNGQUE2QjtBQUMxQyxnQkFBZ0IsbUJBQU8sQ0FBQyx3REFBYTtBQUNyQyxlQUFlLG1CQUFPLENBQUMsNkRBQVU7O0FBRWpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktYWVzL3N0cmVhbUNpcGhlci5qcz8wOWY1Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBhZXMgPSByZXF1aXJlKCcuL2FlcycpXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXJcbnZhciBUcmFuc2Zvcm0gPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpXG5cbmZ1bmN0aW9uIFN0cmVhbUNpcGhlciAobW9kZSwga2V5LCBpdiwgZGVjcnlwdCkge1xuICBUcmFuc2Zvcm0uY2FsbCh0aGlzKVxuXG4gIHRoaXMuX2NpcGhlciA9IG5ldyBhZXMuQUVTKGtleSlcbiAgdGhpcy5fcHJldiA9IEJ1ZmZlci5mcm9tKGl2KVxuICB0aGlzLl9jYWNoZSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgwKVxuICB0aGlzLl9zZWNDYWNoZSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgwKVxuICB0aGlzLl9kZWNyeXB0ID0gZGVjcnlwdFxuICB0aGlzLl9tb2RlID0gbW9kZVxufVxuXG5pbmhlcml0cyhTdHJlYW1DaXBoZXIsIFRyYW5zZm9ybSlcblxuU3RyZWFtQ2lwaGVyLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gIHJldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcywgY2h1bmssIHRoaXMuX2RlY3J5cHQpXG59XG5cblN0cmVhbUNpcGhlci5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9jaXBoZXIuc2NydWIoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmVhbUNpcGhlclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/browserify-aes/streamCipher.js\n\n}')},"./node_modules/browserify-cipher/browser.js"(__unused_webpack_module,exports,__webpack_require__){eval('{var DES = __webpack_require__(/*! browserify-des */ "./node_modules/browserify-des/index.js")\nvar aes = __webpack_require__(/*! browserify-aes/browser */ "./node_modules/browserify-aes/browser.js")\nvar aesModes = __webpack_require__(/*! browserify-aes/modes */ "./node_modules/browserify-aes/modes/index.js")\nvar desModes = __webpack_require__(/*! browserify-des/modes */ "./node_modules/browserify-des/modes.js")\nvar ebtk = __webpack_require__(/*! evp_bytestokey */ "./node_modules/evp_bytestokey/index.js")\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError(\'invalid suite type\')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError(\'invalid suite type\')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError(\'invalid suite type\')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError(\'invalid suite type\')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1jaXBoZXIvYnJvd3Nlci5qcyIsIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsOERBQWdCO0FBQ2xDLFVBQVUsbUJBQU8sQ0FBQyx3RUFBd0I7QUFDMUMsZUFBZSxtQkFBTyxDQUFDLDBFQUFzQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsb0VBQXNCO0FBQzdDLFdBQVcsbUJBQU8sQ0FBQyw4REFBZ0I7O0FBRW5DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLCtCQUErQjs7QUFFdkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsOENBQThDOztBQUV0RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsR0FBRyxjQUFjO0FBQ3JDLHNCQUFzQixHQUFHLGdCQUFnQjtBQUN6QyxzQkFBc0IsR0FBRyxnQkFBZ0I7QUFDekMsd0JBQXdCLEdBQUcsa0JBQWtCO0FBQzdDLG1CQUFtQixHQUFHLGtCQUFrQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktY2lwaGVyL2Jyb3dzZXIuanM/OTU2YSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgREVTID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1kZXMnKVxudmFyIGFlcyA9IHJlcXVpcmUoJ2Jyb3dzZXJpZnktYWVzL2Jyb3dzZXInKVxudmFyIGFlc01vZGVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1hZXMvbW9kZXMnKVxudmFyIGRlc01vZGVzID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1kZXMvbW9kZXMnKVxudmFyIGVidGsgPSByZXF1aXJlKCdldnBfYnl0ZXN0b2tleScpXG5cbmZ1bmN0aW9uIGNyZWF0ZUNpcGhlciAoc3VpdGUsIHBhc3N3b3JkKSB7XG4gIHN1aXRlID0gc3VpdGUudG9Mb3dlckNhc2UoKVxuXG4gIHZhciBrZXlMZW4sIGl2TGVuXG4gIGlmIChhZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICBrZXlMZW4gPSBhZXNNb2Rlc1tzdWl0ZV0ua2V5XG4gICAgaXZMZW4gPSBhZXNNb2Rlc1tzdWl0ZV0uaXZcbiAgfSBlbHNlIGlmIChkZXNNb2Rlc1tzdWl0ZV0pIHtcbiAgICBrZXlMZW4gPSBkZXNNb2Rlc1tzdWl0ZV0ua2V5ICogOFxuICAgIGl2TGVuID0gZGVzTW9kZXNbc3VpdGVdLml2XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcbiAgfVxuXG4gIHZhciBrZXlzID0gZWJ0ayhwYXNzd29yZCwgZmFsc2UsIGtleUxlbiwgaXZMZW4pXG4gIHJldHVybiBjcmVhdGVDaXBoZXJpdihzdWl0ZSwga2V5cy5rZXksIGtleXMuaXYpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlY2lwaGVyIChzdWl0ZSwgcGFzc3dvcmQpIHtcbiAgc3VpdGUgPSBzdWl0ZS50b0xvd2VyQ2FzZSgpXG5cbiAgdmFyIGtleUxlbiwgaXZMZW5cbiAgaWYgKGFlc01vZGVzW3N1aXRlXSkge1xuICAgIGtleUxlbiA9IGFlc01vZGVzW3N1aXRlXS5rZXlcbiAgICBpdkxlbiA9IGFlc01vZGVzW3N1aXRlXS5pdlxuICB9IGVsc2UgaWYgKGRlc01vZGVzW3N1aXRlXSkge1xuICAgIGtleUxlbiA9IGRlc01vZGVzW3N1aXRlXS5rZXkgKiA4XG4gICAgaXZMZW4gPSBkZXNNb2Rlc1tzdWl0ZV0uaXZcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxuICB9XG5cbiAgdmFyIGtleXMgPSBlYnRrKHBhc3N3b3JkLCBmYWxzZSwga2V5TGVuLCBpdkxlbilcbiAgcmV0dXJuIGNyZWF0ZURlY2lwaGVyaXYoc3VpdGUsIGtleXMua2V5LCBrZXlzLml2KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDaXBoZXJpdiAoc3VpdGUsIGtleSwgaXYpIHtcbiAgc3VpdGUgPSBzdWl0ZS50b0xvd2VyQ2FzZSgpXG4gIGlmIChhZXNNb2Rlc1tzdWl0ZV0pIHJldHVybiBhZXMuY3JlYXRlQ2lwaGVyaXYoc3VpdGUsIGtleSwgaXYpXG4gIGlmIChkZXNNb2Rlc1tzdWl0ZV0pIHJldHVybiBuZXcgREVTKHsga2V5OiBrZXksIGl2OiBpdiwgbW9kZTogc3VpdGUgfSlcblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIHN1aXRlIHR5cGUnKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWNpcGhlcml2IChzdWl0ZSwga2V5LCBpdikge1xuICBzdWl0ZSA9IHN1aXRlLnRvTG93ZXJDYXNlKClcbiAgaWYgKGFlc01vZGVzW3N1aXRlXSkgcmV0dXJuIGFlcy5jcmVhdGVEZWNpcGhlcml2KHN1aXRlLCBrZXksIGl2KVxuICBpZiAoZGVzTW9kZXNbc3VpdGVdKSByZXR1cm4gbmV3IERFUyh7IGtleToga2V5LCBpdjogaXYsIG1vZGU6IHN1aXRlLCBkZWNyeXB0OiB0cnVlIH0pXG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBzdWl0ZSB0eXBlJylcbn1cblxuZnVuY3Rpb24gZ2V0Q2lwaGVycyAoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhkZXNNb2RlcykuY29uY2F0KGFlcy5nZXRDaXBoZXJzKCkpXG59XG5cbmV4cG9ydHMuY3JlYXRlQ2lwaGVyID0gZXhwb3J0cy5DaXBoZXIgPSBjcmVhdGVDaXBoZXJcbmV4cG9ydHMuY3JlYXRlQ2lwaGVyaXYgPSBleHBvcnRzLkNpcGhlcml2ID0gY3JlYXRlQ2lwaGVyaXZcbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXIgPSBleHBvcnRzLkRlY2lwaGVyID0gY3JlYXRlRGVjaXBoZXJcbmV4cG9ydHMuY3JlYXRlRGVjaXBoZXJpdiA9IGV4cG9ydHMuRGVjaXBoZXJpdiA9IGNyZWF0ZURlY2lwaGVyaXZcbmV4cG9ydHMubGlzdENpcGhlcnMgPSBleHBvcnRzLmdldENpcGhlcnMgPSBnZXRDaXBoZXJzXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/browserify-cipher/browser.js\n\n}')},"./node_modules/browserify-des/index.js"(module,__unused_webpack_exports,__webpack_require__){eval("{var CipherBase = __webpack_require__(/*! cipher-base */ \"./node_modules/cipher-base/index.js\")\nvar des = __webpack_require__(/*! des.js */ \"./node_modules/des.js/lib/des.js\")\nvar inherits = __webpack_require__(/*! inherits */ \"./node_modules/inherits/inherits_browser.js\")\nvar Buffer = (__webpack_require__(/*! safe-buffer */ \"./node_modules/safe-buffer/index.js\").Buffer)\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1kZXMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsd0RBQWE7QUFDdEMsVUFBVSxtQkFBTyxDQUFDLGdEQUFRO0FBQzFCLGVBQWUsbUJBQU8sQ0FBQyw2REFBVTtBQUNqQyxhQUFhLHNGQUE2Qjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktZGVzL2luZGV4LmpzPzFlM2MiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIENpcGhlckJhc2UgPSByZXF1aXJlKCdjaXBoZXItYmFzZScpXG52YXIgZGVzID0gcmVxdWlyZSgnZGVzLmpzJylcbnZhciBpbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJylcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlclxuXG52YXIgbW9kZXMgPSB7XG4gICdkZXMtZWRlMy1jYmMnOiBkZXMuQ0JDLmluc3RhbnRpYXRlKGRlcy5FREUpLFxuICAnZGVzLWVkZTMnOiBkZXMuRURFLFxuICAnZGVzLWVkZS1jYmMnOiBkZXMuQ0JDLmluc3RhbnRpYXRlKGRlcy5FREUpLFxuICAnZGVzLWVkZSc6IGRlcy5FREUsXG4gICdkZXMtY2JjJzogZGVzLkNCQy5pbnN0YW50aWF0ZShkZXMuREVTKSxcbiAgJ2Rlcy1lY2InOiBkZXMuREVTXG59XG5tb2Rlcy5kZXMgPSBtb2Rlc1snZGVzLWNiYyddXG5tb2Rlcy5kZXMzID0gbW9kZXNbJ2Rlcy1lZGUzLWNiYyddXG5tb2R1bGUuZXhwb3J0cyA9IERFU1xuaW5oZXJpdHMoREVTLCBDaXBoZXJCYXNlKVxuZnVuY3Rpb24gREVTIChvcHRzKSB7XG4gIENpcGhlckJhc2UuY2FsbCh0aGlzKVxuICB2YXIgbW9kZU5hbWUgPSBvcHRzLm1vZGUudG9Mb3dlckNhc2UoKVxuICB2YXIgbW9kZSA9IG1vZGVzW21vZGVOYW1lXVxuICB2YXIgdHlwZVxuICBpZiAob3B0cy5kZWNyeXB0KSB7XG4gICAgdHlwZSA9ICdkZWNyeXB0J1xuICB9IGVsc2Uge1xuICAgIHR5cGUgPSAnZW5jcnlwdCdcbiAgfVxuICB2YXIga2V5ID0gb3B0cy5rZXlcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoa2V5KSkge1xuICAgIGtleSA9IEJ1ZmZlci5mcm9tKGtleSlcbiAgfVxuICBpZiAobW9kZU5hbWUgPT09ICdkZXMtZWRlJyB8fCBtb2RlTmFtZSA9PT0gJ2Rlcy1lZGUtY2JjJykge1xuICAgIGtleSA9IEJ1ZmZlci5jb25jYXQoW2tleSwga2V5LnNsaWNlKDAsIDgpXSlcbiAgfVxuICB2YXIgaXYgPSBvcHRzLml2XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGl2KSkge1xuICAgIGl2ID0gQnVmZmVyLmZyb20oaXYpXG4gIH1cbiAgdGhpcy5fZGVzID0gbW9kZS5jcmVhdGUoe1xuICAgIGtleToga2V5LFxuICAgIGl2OiBpdixcbiAgICB0eXBlOiB0eXBlXG4gIH0pXG59XG5ERVMucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5fZGVzLnVwZGF0ZShkYXRhKSlcbn1cbkRFUy5wcm90b3R5cGUuX2ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5fZGVzLmZpbmFsKCkpXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/browserify-des/index.js\n\n}")},"./node_modules/browserify-des/modes.js"(__unused_webpack_module,exports){eval('{exports["des-ecb"] = {\n key: 8,\n iv: 0\n}\nexports["des-cbc"] = exports.des = {\n key: 8,\n iv: 8\n}\nexports["des-ede3-cbc"] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports["des-ede3"] = {\n key: 24,\n iv: 0\n}\nexports["des-ede-cbc"] = {\n key: 16,\n iv: 8\n}\nexports["des-ede"] = {\n key: 16,\n iv: 0\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1kZXMvbW9kZXMuanMiLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixHQUFHLFdBQVc7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLEdBQUcsWUFBWTtBQUN0QztBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWRlcy9tb2Rlcy5qcz8wYmU4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHNbJ2Rlcy1lY2InXSA9IHtcbiAga2V5OiA4LFxuICBpdjogMFxufVxuZXhwb3J0c1snZGVzLWNiYyddID0gZXhwb3J0cy5kZXMgPSB7XG4gIGtleTogOCxcbiAgaXY6IDhcbn1cbmV4cG9ydHNbJ2Rlcy1lZGUzLWNiYyddID0gZXhwb3J0cy5kZXMzID0ge1xuICBrZXk6IDI0LFxuICBpdjogOFxufVxuZXhwb3J0c1snZGVzLWVkZTMnXSA9IHtcbiAga2V5OiAyNCxcbiAgaXY6IDBcbn1cbmV4cG9ydHNbJ2Rlcy1lZGUtY2JjJ10gPSB7XG4gIGtleTogMTYsXG4gIGl2OiA4XG59XG5leHBvcnRzWydkZXMtZWRlJ10gPSB7XG4gIGtleTogMTYsXG4gIGl2OiAwXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/browserify-des/modes.js\n\n}')},"./node_modules/browserify-rsa/index.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar BN = __webpack_require__(/*! bn.js */ "./node_modules/bn.js/lib/bn.js");\nvar randomBytes = __webpack_require__(/*! randombytes */ "./node_modules/randombytes/browser.js");\nvar Buffer = (__webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer);\n\nfunction getr(priv) {\n\tvar len = priv.modulus.byteLength();\n\tvar r;\n\tdo {\n\t\tr = new BN(randomBytes(len));\n\t} while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2));\n\treturn r;\n}\n\nfunction blind(priv) {\n\tvar r = getr(priv);\n\tvar blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed();\n\treturn { blinder: blinder, unblinder: r.invm(priv.modulus) };\n}\n\nfunction crt(msg, priv) {\n\tvar blinds = blind(priv);\n\tvar len = priv.modulus.byteLength();\n\tvar blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus);\n\tvar c1 = blinded.toRed(BN.mont(priv.prime1));\n\tvar c2 = blinded.toRed(BN.mont(priv.prime2));\n\tvar qinv = priv.coefficient;\n\tvar p = priv.prime1;\n\tvar q = priv.prime2;\n\tvar m1 = c1.redPow(priv.exponent1).fromRed();\n\tvar m2 = c2.redPow(priv.exponent2).fromRed();\n\tvar h = m1.isub(m2).imul(qinv).umod(p).imul(q);\n\treturn m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, \'be\', len);\n}\ncrt.getr = getr;\n\nmodule.exports = crt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1yc2EvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsU0FBUyxtQkFBTyxDQUFDLDZDQUFPO0FBQ3hCLGtCQUFrQixtQkFBTyxDQUFDLDBEQUFhO0FBQ3ZDLGFBQWEsc0ZBQTZCOztBQUUxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktcnNhL2luZGV4LmpzP2E5NTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIHJhbmRvbUJ5dGVzID0gcmVxdWlyZSgncmFuZG9tYnl0ZXMnKTtcbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcblxuZnVuY3Rpb24gZ2V0cihwcml2KSB7XG5cdHZhciBsZW4gPSBwcml2Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO1xuXHR2YXIgcjtcblx0ZG8ge1xuXHRcdHIgPSBuZXcgQk4ocmFuZG9tQnl0ZXMobGVuKSk7XG5cdH0gd2hpbGUgKHIuY21wKHByaXYubW9kdWx1cykgPj0gMCB8fCAhci51bW9kKHByaXYucHJpbWUxKSB8fCAhci51bW9kKHByaXYucHJpbWUyKSk7XG5cdHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBibGluZChwcml2KSB7XG5cdHZhciByID0gZ2V0cihwcml2KTtcblx0dmFyIGJsaW5kZXIgPSByLnRvUmVkKEJOLm1vbnQocHJpdi5tb2R1bHVzKSkucmVkUG93KG5ldyBCTihwcml2LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpO1xuXHRyZXR1cm4geyBibGluZGVyOiBibGluZGVyLCB1bmJsaW5kZXI6IHIuaW52bShwcml2Lm1vZHVsdXMpIH07XG59XG5cbmZ1bmN0aW9uIGNydChtc2csIHByaXYpIHtcblx0dmFyIGJsaW5kcyA9IGJsaW5kKHByaXYpO1xuXHR2YXIgbGVuID0gcHJpdi5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcblx0dmFyIGJsaW5kZWQgPSBuZXcgQk4obXNnKS5tdWwoYmxpbmRzLmJsaW5kZXIpLnVtb2QocHJpdi5tb2R1bHVzKTtcblx0dmFyIGMxID0gYmxpbmRlZC50b1JlZChCTi5tb250KHByaXYucHJpbWUxKSk7XG5cdHZhciBjMiA9IGJsaW5kZWQudG9SZWQoQk4ubW9udChwcml2LnByaW1lMikpO1xuXHR2YXIgcWludiA9IHByaXYuY29lZmZpY2llbnQ7XG5cdHZhciBwID0gcHJpdi5wcmltZTE7XG5cdHZhciBxID0gcHJpdi5wcmltZTI7XG5cdHZhciBtMSA9IGMxLnJlZFBvdyhwcml2LmV4cG9uZW50MSkuZnJvbVJlZCgpO1xuXHR2YXIgbTIgPSBjMi5yZWRQb3cocHJpdi5leHBvbmVudDIpLmZyb21SZWQoKTtcblx0dmFyIGggPSBtMS5pc3ViKG0yKS5pbXVsKHFpbnYpLnVtb2QocCkuaW11bChxKTtcblx0cmV0dXJuIG0yLmlhZGQoaCkuaW11bChibGluZHMudW5ibGluZGVyKS51bW9kKHByaXYubW9kdWx1cykudG9BcnJheUxpa2UoQnVmZmVyLCAnYmUnLCBsZW4pO1xufVxuY3J0LmdldHIgPSBnZXRyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNydDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/browserify-rsa/index.js\n\n}')},"./node_modules/browserify-sign/algos.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nmodule.exports = __webpack_require__(/*! ./browser/algorithms.json */ "./node_modules/browserify-sign/browser/algorithms.json");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2FsZ29zLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLCtIQUFxRCIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9hbGdvcy5qcz8xMTZkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Jyb3dzZXIvYWxnb3JpdGhtcy5qc29uJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/browserify-sign/algos.js\n\n}')},"./node_modules/browserify-sign/browser/index.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar Buffer = (__webpack_require__(/*! safe-buffer */ "./node_modules/safe-buffer/index.js").Buffer);\nvar createHash = __webpack_require__(/*! create-hash */ "./node_modules/create-hash/browser.js");\nvar stream = __webpack_require__(/*! readable-stream */ "./node_modules/readable-stream/readable-browser.js");\nvar inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js");\nvar sign = __webpack_require__(/*! ./sign */ "./node_modules/browserify-sign/browser/sign.js");\nvar verify = __webpack_require__(/*! ./verify */ "./node_modules/browserify-sign/browser/verify.js");\n\nvar algorithms = __webpack_require__(/*! ./algorithms.json */ "./node_modules/browserify-sign/browser/algorithms.json");\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, \'hex\');\n algorithms[key.toLowerCase()] = algorithms[key];\n});\n\nfunction Sign(algorithm) {\n stream.Writable.call(this);\n\n var data = algorithms[algorithm];\n if (!data) { throw new Error(\'Unknown message digest\'); }\n\n this._hashType = data.hash;\n this._hash = createHash(data.hash);\n this._tag = data.id;\n this._signType = data.sign;\n}\ninherits(Sign, stream.Writable);\n\nSign.prototype._write = function _write(data, _, done) {\n this._hash.update(data);\n done();\n};\n\nSign.prototype.update = function update(data, enc) {\n this._hash.update(typeof data === \'string\' ? Buffer.from(data, enc) : data);\n\n return this;\n};\n\nSign.prototype.sign = function signMethod(key, enc) {\n this.end();\n var hash = this._hash.digest();\n var sig = sign(hash, key, this._hashType, this._signType, this._tag);\n\n return enc ? sig.toString(enc) : sig;\n};\n\nfunction Verify(algorithm) {\n stream.Writable.call(this);\n\n var data = algorithms[algorithm];\n if (!data) { throw new Error(\'Unknown message digest\'); }\n\n this._hash = createHash(data.hash);\n this._tag = data.id;\n this._signType = data.sign;\n}\ninherits(Verify, stream.Writable);\n\nVerify.prototype._write = function _write(data, _, done) {\n this._hash.update(data);\n done();\n};\n\nVerify.prototype.update = function update(data, enc) {\n this._hash.update(typeof data === \'string\' ? Buffer.from(data, enc) : data);\n\n return this;\n};\n\nVerify.prototype.verify = function verifyMethod(key, sig, enc) {\n var sigBuffer = typeof sig === \'string\' ? Buffer.from(sig, enc) : sig;\n\n this.end();\n var hash = this._hash.digest();\n return verify(sigBuffer, hash, key, this._signType, this._tag);\n};\n\nfunction createSign(algorithm) {\n return new Sign(algorithm);\n}\n\nfunction createVerify(algorithm) {\n return new Verify(algorithm);\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2Jyb3dzZXIvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsYUFBYSxzRkFBNkI7QUFDMUMsaUJBQWlCLG1CQUFPLENBQUMsMERBQWE7QUFDdEMsYUFBYSxtQkFBTyxDQUFDLDJFQUFpQjtBQUN0QyxlQUFlLG1CQUFPLENBQUMsNkRBQVU7QUFDakMsV0FBVyxtQkFBTyxDQUFDLDhEQUFRO0FBQzNCLGFBQWEsbUJBQU8sQ0FBQyxrRUFBVTs7QUFFL0IsaUJBQWlCLG1CQUFPLENBQUMsaUZBQW1CO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBLGVBQWU7O0FBRWY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlOztBQUVmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYnJvd3Nlci9pbmRleC5qcz9iNjkyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIGNyZWF0ZUhhc2ggPSByZXF1aXJlKCdjcmVhdGUtaGFzaCcpO1xudmFyIHN0cmVhbSA9IHJlcXVpcmUoJ3JlYWRhYmxlLXN0cmVhbScpO1xudmFyIGluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9zaWduJyk7XG52YXIgdmVyaWZ5ID0gcmVxdWlyZSgnLi92ZXJpZnknKTtcblxudmFyIGFsZ29yaXRobXMgPSByZXF1aXJlKCcuL2FsZ29yaXRobXMuanNvbicpO1xuT2JqZWN0LmtleXMoYWxnb3JpdGhtcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGFsZ29yaXRobXNba2V5XS5pZCA9IEJ1ZmZlci5mcm9tKGFsZ29yaXRobXNba2V5XS5pZCwgJ2hleCcpO1xuICBhbGdvcml0aG1zW2tleS50b0xvd2VyQ2FzZSgpXSA9IGFsZ29yaXRobXNba2V5XTtcbn0pO1xuXG5mdW5jdGlvbiBTaWduKGFsZ29yaXRobSkge1xuICBzdHJlYW0uV3JpdGFibGUuY2FsbCh0aGlzKTtcblxuICB2YXIgZGF0YSA9IGFsZ29yaXRobXNbYWxnb3JpdGhtXTtcbiAgaWYgKCFkYXRhKSB7IHRocm93IG5ldyBFcnJvcignVW5rbm93biBtZXNzYWdlIGRpZ2VzdCcpOyB9XG5cbiAgdGhpcy5faGFzaFR5cGUgPSBkYXRhLmhhc2g7XG4gIHRoaXMuX2hhc2ggPSBjcmVhdGVIYXNoKGRhdGEuaGFzaCk7XG4gIHRoaXMuX3RhZyA9IGRhdGEuaWQ7XG4gIHRoaXMuX3NpZ25UeXBlID0gZGF0YS5zaWduO1xufVxuaW5oZXJpdHMoU2lnbiwgc3RyZWFtLldyaXRhYmxlKTtcblxuU2lnbi5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gX3dyaXRlKGRhdGEsIF8sIGRvbmUpIHtcbiAgdGhpcy5faGFzaC51cGRhdGUoZGF0YSk7XG4gIGRvbmUoKTtcbn07XG5cblNpZ24ucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZShkYXRhLCBlbmMpIHtcbiAgdGhpcy5faGFzaC51cGRhdGUodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gQnVmZmVyLmZyb20oZGF0YSwgZW5jKSA6IGRhdGEpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuU2lnbi5wcm90b3R5cGUuc2lnbiA9IGZ1bmN0aW9uIHNpZ25NZXRob2Qoa2V5LCBlbmMpIHtcbiAgdGhpcy5lbmQoKTtcbiAgdmFyIGhhc2ggPSB0aGlzLl9oYXNoLmRpZ2VzdCgpO1xuICB2YXIgc2lnID0gc2lnbihoYXNoLCBrZXksIHRoaXMuX2hhc2hUeXBlLCB0aGlzLl9zaWduVHlwZSwgdGhpcy5fdGFnKTtcblxuICByZXR1cm4gZW5jID8gc2lnLnRvU3RyaW5nKGVuYykgOiBzaWc7XG59O1xuXG5mdW5jdGlvbiBWZXJpZnkoYWxnb3JpdGhtKSB7XG4gIHN0cmVhbS5Xcml0YWJsZS5jYWxsKHRoaXMpO1xuXG4gIHZhciBkYXRhID0gYWxnb3JpdGhtc1thbGdvcml0aG1dO1xuICBpZiAoIWRhdGEpIHsgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG1lc3NhZ2UgZGlnZXN0Jyk7IH1cblxuICB0aGlzLl9oYXNoID0gY3JlYXRlSGFzaChkYXRhLmhhc2gpO1xuICB0aGlzLl90YWcgPSBkYXRhLmlkO1xuICB0aGlzLl9zaWduVHlwZSA9IGRhdGEuc2lnbjtcbn1cbmluaGVyaXRzKFZlcmlmeSwgc3RyZWFtLldyaXRhYmxlKTtcblxuVmVyaWZ5LnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiBfd3JpdGUoZGF0YSwgXywgZG9uZSkge1xuICB0aGlzLl9oYXNoLnVwZGF0ZShkYXRhKTtcbiAgZG9uZSgpO1xufTtcblxuVmVyaWZ5LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUoZGF0YSwgZW5jKSB7XG4gIHRoaXMuX2hhc2gudXBkYXRlKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IEJ1ZmZlci5mcm9tKGRhdGEsIGVuYykgOiBkYXRhKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cblZlcmlmeS5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gdmVyaWZ5TWV0aG9kKGtleSwgc2lnLCBlbmMpIHtcbiAgdmFyIHNpZ0J1ZmZlciA9IHR5cGVvZiBzaWcgPT09ICdzdHJpbmcnID8gQnVmZmVyLmZyb20oc2lnLCBlbmMpIDogc2lnO1xuXG4gIHRoaXMuZW5kKCk7XG4gIHZhciBoYXNoID0gdGhpcy5faGFzaC5kaWdlc3QoKTtcbiAgcmV0dXJuIHZlcmlmeShzaWdCdWZmZXIsIGhhc2gsIGtleSwgdGhpcy5fc2lnblR5cGUsIHRoaXMuX3RhZyk7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVTaWduKGFsZ29yaXRobSkge1xuICByZXR1cm4gbmV3IFNpZ24oYWxnb3JpdGhtKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVmVyaWZ5KGFsZ29yaXRobSkge1xuICByZXR1cm4gbmV3IFZlcmlmeShhbGdvcml0aG0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU2lnbjogY3JlYXRlU2lnbixcbiAgVmVyaWZ5OiBjcmVhdGVWZXJpZnksXG4gIGNyZWF0ZVNpZ246IGNyZWF0ZVNpZ24sXG4gIGNyZWF0ZVZlcmlmeTogY3JlYXRlVmVyaWZ5XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/browserify-sign/browser/index.js\n\n}')},"./node_modules/browserify-sign/browser/sign.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = (__webpack_require__(/*! safe-buffer */ \"./node_modules/safe-buffer/index.js\").Buffer);\nvar createHmac = __webpack_require__(/*! create-hmac */ \"./node_modules/create-hmac/browser.js\");\nvar crt = __webpack_require__(/*! browserify-rsa */ \"./node_modules/browserify-rsa/index.js\");\nvar EC = (__webpack_require__(/*! elliptic */ \"./node_modules/elliptic/index.js\").ec);\nvar BN = __webpack_require__(/*! bn.js */ \"./node_modules/bn.js/lib/bn.js\");\nvar parseKeys = __webpack_require__(/*! parse-asn1 */ \"./node_modules/parse-asn1/index.js\");\nvar curves = __webpack_require__(/*! ./curves.json */ \"./node_modules/browserify-sign/browser/curves.json\");\n\nvar RSA_PKCS1_PADDING = 1;\n\nfunction sign(hash, key, hashType, signType, tag) {\n var priv = parseKeys(key);\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n return ecSign(hash, priv);\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') { throw new Error('wrong private key type'); }\n return dsaSign(hash, priv, hashType);\n }\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong private key type'); }\n if (key.padding !== undefined && key.padding !== RSA_PKCS1_PADDING) { throw new Error('illegal or unsupported padding mode'); }\n\n hash = Buffer.concat([tag, hash]);\n var len = priv.modulus.byteLength();\n var pad = [0, 1];\n while (hash.length + pad.length + 1 < len) { pad.push(0xff); }\n pad.push(0x00);\n var i = -1;\n while (++i < hash.length) { pad.push(hash[i]); }\n\n var out = crt(pad, priv);\n return out;\n}\n\nfunction ecSign(hash, priv) {\n var curveId = curves[priv.curve.join('.')];\n if (!curveId) { throw new Error('unknown curve ' + priv.curve.join('.')); }\n\n var curve = new EC(curveId);\n var key = curve.keyFromPrivate(priv.privateKey);\n var out = key.sign(hash);\n\n return Buffer.from(out.toDER());\n}\n\nfunction dsaSign(hash, priv, algo) {\n var x = priv.params.priv_key;\n var p = priv.params.p;\n var q = priv.params.q;\n var g = priv.params.g;\n var r = new BN(0);\n var k;\n var H = bits2int(hash, q).mod(q);\n var s = false;\n var kv = getKey(x, q, hash, algo);\n while (s === false) {\n k = makeKey(q, kv, algo);\n r = makeR(g, k, p, q);\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q);\n if (s.cmpn(0) === 0) {\n s = false;\n r = new BN(0);\n }\n }\n return toDER(r, s);\n}\n\nfunction toDER(r, s) {\n r = r.toArray();\n s = s.toArray();\n\n // Pad values\n if (r[0] & 0x80) { r = [0].concat(r); }\n if (s[0] & 0x80) { s = [0].concat(s); }\n\n var total = r.length + s.length + 4;\n var res = [\n 0x30, total, 0x02, r.length\n ];\n res = res.concat(r, [0x02, s.length], s);\n return Buffer.from(res);\n}\n\nfunction getKey(x, q, hash, algo) {\n x = Buffer.from(x.toArray());\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length);\n x = Buffer.concat([zeros, x]);\n }\n var hlen = hash.length;\n var hbits = bits2octets(hash, q);\n var v = Buffer.alloc(hlen);\n v.fill(1);\n var k = Buffer.alloc(hlen);\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest();\n v = createHmac(algo, k).update(v).digest();\n return { k: k, v: v };\n}\n\nfunction bits2int(obits, q) {\n var bits = new BN(obits);\n var shift = (obits.length << 3) - q.bitLength();\n if (shift > 0) { bits.ishrn(shift); }\n return bits;\n}\n\nfunction bits2octets(bits, q) {\n bits = bits2int(bits, q);\n bits = bits.mod(q);\n var out = Buffer.from(bits.toArray());\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length);\n out = Buffer.concat([zeros, out]);\n }\n return out;\n}\n\nfunction makeKey(q, kv, algo) {\n var t;\n var k;\n\n do {\n t = Buffer.alloc(0);\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n t = Buffer.concat([t, kv.v]);\n }\n\n k = bits2int(t, q);\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest();\n kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n } while (k.cmp(q) !== -1);\n\n return k;\n}\n\nfunction makeR(g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);\n}\n\nmodule.exports = sign;\nmodule.exports.getKey = getKey;\nmodule.exports.makeKey = makeKey;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2Jyb3dzZXIvc2lnbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLGFBQWEsc0ZBQTZCO0FBQzFDLGlCQUFpQixtQkFBTyxDQUFDLDBEQUFhO0FBQ3RDLFVBQVUsbUJBQU8sQ0FBQyw4REFBZ0I7QUFDbEMsU0FBUyw0RUFBc0I7QUFDL0IsU0FBUyxtQkFBTyxDQUFDLDZDQUFPO0FBQ3hCLGdCQUFnQixtQkFBTyxDQUFDLHNEQUFZO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyx5RUFBZTs7QUFFcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQSxJQUFJO0FBQ0osOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQsd0VBQXdFOztBQUV4RTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUI7QUFDckIscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQjtBQUNyQixzQkFBc0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LXNpZ24vYnJvd3Nlci9zaWduLmpzPzZmZTciXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBtdWNoIG9mIHRoaXMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvc2VsZi1zaWduZWQvYmxvYi9naC1wYWdlcy9saWIvcnNhLmpzXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgY3JlYXRlSG1hYyA9IHJlcXVpcmUoJ2NyZWF0ZS1obWFjJyk7XG52YXIgY3J0ID0gcmVxdWlyZSgnYnJvd3NlcmlmeS1yc2EnKTtcbnZhciBFQyA9IHJlcXVpcmUoJ2VsbGlwdGljJykuZWM7XG52YXIgQk4gPSByZXF1aXJlKCdibi5qcycpO1xudmFyIHBhcnNlS2V5cyA9IHJlcXVpcmUoJ3BhcnNlLWFzbjEnKTtcbnZhciBjdXJ2ZXMgPSByZXF1aXJlKCcuL2N1cnZlcy5qc29uJyk7XG5cbnZhciBSU0FfUEtDUzFfUEFERElORyA9IDE7XG5cbmZ1bmN0aW9uIHNpZ24oaGFzaCwga2V5LCBoYXNoVHlwZSwgc2lnblR5cGUsIHRhZykge1xuICB2YXIgcHJpdiA9IHBhcnNlS2V5cyhrZXkpO1xuICBpZiAocHJpdi5jdXJ2ZSkge1xuICAgIC8vIHJzYSBrZXlzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBlY2RzYSBvbmVzIGluIG9wZW5zc2xcbiAgICBpZiAoc2lnblR5cGUgIT09ICdlY2RzYScgJiYgc2lnblR5cGUgIT09ICdlY2RzYS9yc2EnKSB7IHRocm93IG5ldyBFcnJvcignd3JvbmcgcHJpdmF0ZSBrZXkgdHlwZScpOyB9XG4gICAgcmV0dXJuIGVjU2lnbihoYXNoLCBwcml2KTtcbiAgfSBlbHNlIGlmIChwcml2LnR5cGUgPT09ICdkc2EnKSB7XG4gICAgaWYgKHNpZ25UeXBlICE9PSAnZHNhJykgeyB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHByaXZhdGUga2V5IHR5cGUnKTsgfVxuICAgIHJldHVybiBkc2FTaWduKGhhc2gsIHByaXYsIGhhc2hUeXBlKTtcbiAgfVxuICBpZiAoc2lnblR5cGUgIT09ICdyc2EnICYmIHNpZ25UeXBlICE9PSAnZWNkc2EvcnNhJykgeyB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHByaXZhdGUga2V5IHR5cGUnKTsgfVxuICBpZiAoa2V5LnBhZGRpbmcgIT09IHVuZGVmaW5lZCAmJiBrZXkucGFkZGluZyAhPT0gUlNBX1BLQ1MxX1BBRERJTkcpIHsgdGhyb3cgbmV3IEVycm9yKCdpbGxlZ2FsIG9yIHVuc3VwcG9ydGVkIHBhZGRpbmcgbW9kZScpOyB9XG5cbiAgaGFzaCA9IEJ1ZmZlci5jb25jYXQoW3RhZywgaGFzaF0pO1xuICB2YXIgbGVuID0gcHJpdi5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIHBhZCA9IFswLCAxXTtcbiAgd2hpbGUgKGhhc2gubGVuZ3RoICsgcGFkLmxlbmd0aCArIDEgPCBsZW4pIHsgcGFkLnB1c2goMHhmZik7IH1cbiAgcGFkLnB1c2goMHgwMCk7XG4gIHZhciBpID0gLTE7XG4gIHdoaWxlICgrK2kgPCBoYXNoLmxlbmd0aCkgeyBwYWQucHVzaChoYXNoW2ldKTsgfVxuXG4gIHZhciBvdXQgPSBjcnQocGFkLCBwcml2KTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gZWNTaWduKGhhc2gsIHByaXYpIHtcbiAgdmFyIGN1cnZlSWQgPSBjdXJ2ZXNbcHJpdi5jdXJ2ZS5qb2luKCcuJyldO1xuICBpZiAoIWN1cnZlSWQpIHsgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGN1cnZlICcgKyBwcml2LmN1cnZlLmpvaW4oJy4nKSk7IH1cblxuICB2YXIgY3VydmUgPSBuZXcgRUMoY3VydmVJZCk7XG4gIHZhciBrZXkgPSBjdXJ2ZS5rZXlGcm9tUHJpdmF0ZShwcml2LnByaXZhdGVLZXkpO1xuICB2YXIgb3V0ID0ga2V5LnNpZ24oaGFzaCk7XG5cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKG91dC50b0RFUigpKTtcbn1cblxuZnVuY3Rpb24gZHNhU2lnbihoYXNoLCBwcml2LCBhbGdvKSB7XG4gIHZhciB4ID0gcHJpdi5wYXJhbXMucHJpdl9rZXk7XG4gIHZhciBwID0gcHJpdi5wYXJhbXMucDtcbiAgdmFyIHEgPSBwcml2LnBhcmFtcy5xO1xuICB2YXIgZyA9IHByaXYucGFyYW1zLmc7XG4gIHZhciByID0gbmV3IEJOKDApO1xuICB2YXIgaztcbiAgdmFyIEggPSBiaXRzMmludChoYXNoLCBxKS5tb2QocSk7XG4gIHZhciBzID0gZmFsc2U7XG4gIHZhciBrdiA9IGdldEtleSh4LCBxLCBoYXNoLCBhbGdvKTtcbiAgd2hpbGUgKHMgPT09IGZhbHNlKSB7XG4gICAgayA9IG1ha2VLZXkocSwga3YsIGFsZ28pO1xuICAgIHIgPSBtYWtlUihnLCBrLCBwLCBxKTtcbiAgICBzID0gay5pbnZtKHEpLmltdWwoSC5hZGQoeC5tdWwocikpKS5tb2QocSk7XG4gICAgaWYgKHMuY21wbigwKSA9PT0gMCkge1xuICAgICAgcyA9IGZhbHNlO1xuICAgICAgciA9IG5ldyBCTigwKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvREVSKHIsIHMpO1xufVxuXG5mdW5jdGlvbiB0b0RFUihyLCBzKSB7XG4gIHIgPSByLnRvQXJyYXkoKTtcbiAgcyA9IHMudG9BcnJheSgpO1xuXG4gIC8vIFBhZCB2YWx1ZXNcbiAgaWYgKHJbMF0gJiAweDgwKSB7IHIgPSBbMF0uY29uY2F0KHIpOyB9XG4gIGlmIChzWzBdICYgMHg4MCkgeyBzID0gWzBdLmNvbmNhdChzKTsgfVxuXG4gIHZhciB0b3RhbCA9IHIubGVuZ3RoICsgcy5sZW5ndGggKyA0O1xuICB2YXIgcmVzID0gW1xuICAgIDB4MzAsIHRvdGFsLCAweDAyLCByLmxlbmd0aFxuICBdO1xuICByZXMgPSByZXMuY29uY2F0KHIsIFsweDAyLCBzLmxlbmd0aF0sIHMpO1xuICByZXR1cm4gQnVmZmVyLmZyb20ocmVzKTtcbn1cblxuZnVuY3Rpb24gZ2V0S2V5KHgsIHEsIGhhc2gsIGFsZ28pIHtcbiAgeCA9IEJ1ZmZlci5mcm9tKHgudG9BcnJheSgpKTtcbiAgaWYgKHgubGVuZ3RoIDwgcS5ieXRlTGVuZ3RoKCkpIHtcbiAgICB2YXIgemVyb3MgPSBCdWZmZXIuYWxsb2MocS5ieXRlTGVuZ3RoKCkgLSB4Lmxlbmd0aCk7XG4gICAgeCA9IEJ1ZmZlci5jb25jYXQoW3plcm9zLCB4XSk7XG4gIH1cbiAgdmFyIGhsZW4gPSBoYXNoLmxlbmd0aDtcbiAgdmFyIGhiaXRzID0gYml0czJvY3RldHMoaGFzaCwgcSk7XG4gIHZhciB2ID0gQnVmZmVyLmFsbG9jKGhsZW4pO1xuICB2LmZpbGwoMSk7XG4gIHZhciBrID0gQnVmZmVyLmFsbG9jKGhsZW4pO1xuICBrID0gY3JlYXRlSG1hYyhhbGdvLCBrKS51cGRhdGUodikudXBkYXRlKEJ1ZmZlci5mcm9tKFswXSkpLnVwZGF0ZSh4KS51cGRhdGUoaGJpdHMpLmRpZ2VzdCgpO1xuICB2ID0gY3JlYXRlSG1hYyhhbGdvLCBrKS51cGRhdGUodikuZGlnZXN0KCk7XG4gIGsgPSBjcmVhdGVIbWFjKGFsZ28sIGspLnVwZGF0ZSh2KS51cGRhdGUoQnVmZmVyLmZyb20oWzFdKSkudXBkYXRlKHgpLnVwZGF0ZShoYml0cykuZGlnZXN0KCk7XG4gIHYgPSBjcmVhdGVIbWFjKGFsZ28sIGspLnVwZGF0ZSh2KS5kaWdlc3QoKTtcbiAgcmV0dXJuIHsgazogaywgdjogdiB9O1xufVxuXG5mdW5jdGlvbiBiaXRzMmludChvYml0cywgcSkge1xuICB2YXIgYml0cyA9IG5ldyBCTihvYml0cyk7XG4gIHZhciBzaGlmdCA9IChvYml0cy5sZW5ndGggPDwgMykgLSBxLmJpdExlbmd0aCgpO1xuICBpZiAoc2hpZnQgPiAwKSB7IGJpdHMuaXNocm4oc2hpZnQpOyB9XG4gIHJldHVybiBiaXRzO1xufVxuXG5mdW5jdGlvbiBiaXRzMm9jdGV0cyhiaXRzLCBxKSB7XG4gIGJpdHMgPSBiaXRzMmludChiaXRzLCBxKTtcbiAgYml0cyA9IGJpdHMubW9kKHEpO1xuICB2YXIgb3V0ID0gQnVmZmVyLmZyb20oYml0cy50b0FycmF5KCkpO1xuICBpZiAob3V0Lmxlbmd0aCA8IHEuYnl0ZUxlbmd0aCgpKSB7XG4gICAgdmFyIHplcm9zID0gQnVmZmVyLmFsbG9jKHEuYnl0ZUxlbmd0aCgpIC0gb3V0Lmxlbmd0aCk7XG4gICAgb3V0ID0gQnVmZmVyLmNvbmNhdChbemVyb3MsIG91dF0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIG1ha2VLZXkocSwga3YsIGFsZ28pIHtcbiAgdmFyIHQ7XG4gIHZhciBrO1xuXG4gIGRvIHtcbiAgICB0ID0gQnVmZmVyLmFsbG9jKDApO1xuXG4gICAgd2hpbGUgKHQubGVuZ3RoICogOCA8IHEuYml0TGVuZ3RoKCkpIHtcbiAgICAgIGt2LnYgPSBjcmVhdGVIbWFjKGFsZ28sIGt2LmspLnVwZGF0ZShrdi52KS5kaWdlc3QoKTtcbiAgICAgIHQgPSBCdWZmZXIuY29uY2F0KFt0LCBrdi52XSk7XG4gICAgfVxuXG4gICAgayA9IGJpdHMyaW50KHQsIHEpO1xuICAgIGt2LmsgPSBjcmVhdGVIbWFjKGFsZ28sIGt2LmspLnVwZGF0ZShrdi52KS51cGRhdGUoQnVmZmVyLmZyb20oWzBdKSkuZGlnZXN0KCk7XG4gICAga3YudiA9IGNyZWF0ZUhtYWMoYWxnbywga3YuaykudXBkYXRlKGt2LnYpLmRpZ2VzdCgpO1xuICB9IHdoaWxlIChrLmNtcChxKSAhPT0gLTEpO1xuXG4gIHJldHVybiBrO1xufVxuXG5mdW5jdGlvbiBtYWtlUihnLCBrLCBwLCBxKSB7XG4gIHJldHVybiBnLnRvUmVkKEJOLm1vbnQocCkpLnJlZFBvdyhrKS5mcm9tUmVkKCkubW9kKHEpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNpZ247XG5tb2R1bGUuZXhwb3J0cy5nZXRLZXkgPSBnZXRLZXk7XG5tb2R1bGUuZXhwb3J0cy5tYWtlS2V5ID0gbWFrZUtleTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/browserify-sign/browser/sign.js\n\n}")},"./node_modules/browserify-sign/browser/verify.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\n// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = (__webpack_require__(/*! safe-buffer */ \"./node_modules/safe-buffer/index.js\").Buffer);\nvar BN = __webpack_require__(/*! bn.js */ \"./node_modules/bn.js/lib/bn.js\");\nvar EC = (__webpack_require__(/*! elliptic */ \"./node_modules/elliptic/index.js\").ec);\nvar parseKeys = __webpack_require__(/*! parse-asn1 */ \"./node_modules/parse-asn1/index.js\");\nvar curves = __webpack_require__(/*! ./curves.json */ \"./node_modules/browserify-sign/browser/curves.json\");\n\nfunction verify(sig, hash, key, signType, tag) {\n var pub = parseKeys(key);\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n return ecVerify(sig, hash, pub);\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') { throw new Error('wrong public key type'); }\n return dsaVerify(sig, hash, pub);\n }\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') { throw new Error('wrong public key type'); }\n\n hash = Buffer.concat([tag, hash]);\n var len = pub.modulus.byteLength();\n var pad = [1];\n var padNum = 0;\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff);\n padNum += 1;\n }\n pad.push(0x00);\n var i = -1;\n while (++i < hash.length) {\n pad.push(hash[i]);\n }\n pad = Buffer.from(pad);\n var red = BN.mont(pub.modulus);\n sig = new BN(sig).toRed(red);\n\n sig = sig.redPow(new BN(pub.publicExponent));\n sig = Buffer.from(sig.fromRed().toArray());\n var out = padNum < 8 ? 1 : 0;\n len = Math.min(sig.length, pad.length);\n if (sig.length !== pad.length) { out = 1; }\n\n i = -1;\n while (++i < len) { out |= sig[i] ^ pad[i]; }\n return out === 0;\n}\n\nfunction ecVerify(sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')];\n if (!curveId) { throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')); }\n\n var curve = new EC(curveId);\n var pubkey = pub.data.subjectPrivateKey.data;\n\n return curve.verify(hash, sig, pubkey);\n}\n\nfunction dsaVerify(sig, hash, pub) {\n var p = pub.data.p;\n var q = pub.data.q;\n var g = pub.data.g;\n var y = pub.data.pub_key;\n var unpacked = parseKeys.signature.decode(sig, 'der');\n var s = unpacked.s;\n var r = unpacked.r;\n checkValue(s, q);\n checkValue(r, q);\n var montp = BN.mont(p);\n var w = s.invm(q);\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q);\n return v.cmp(r) === 0;\n}\n\nfunction checkValue(b, q) {\n if (b.cmpn(0) <= 0) { throw new Error('invalid sig'); }\n if (b.cmp(q) >= 0) { throw new Error('invalid sig'); }\n}\n\nmodule.exports = verify;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS1zaWduL2Jyb3dzZXIvdmVyaWZ5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0EsYUFBYSxzRkFBNkI7QUFDMUMsU0FBUyxtQkFBTyxDQUFDLDZDQUFPO0FBQ3hCLFNBQVMsNEVBQXNCO0FBQy9CLGdCQUFnQixtQkFBTyxDQUFDLHNEQUFZO0FBQ3BDLGFBQWEsbUJBQU8sQ0FBQyx5RUFBZTs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQSxJQUFJO0FBQ0osOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSx3REFBd0Q7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQztBQUNBLHNCQUFzQjtBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCO0FBQ3hCLHVCQUF1QjtBQUN2Qjs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnktc2lnbi9icm93c2VyL3ZlcmlmeS5qcz85ODBjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gbXVjaCBvZiB0aGlzIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L3NlbGYtc2lnbmVkL2Jsb2IvZ2gtcGFnZXMvbGliL3JzYS5qc1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ3NhZmUtYnVmZmVyJykuQnVmZmVyO1xudmFyIEJOID0gcmVxdWlyZSgnYm4uanMnKTtcbnZhciBFQyA9IHJlcXVpcmUoJ2VsbGlwdGljJykuZWM7XG52YXIgcGFyc2VLZXlzID0gcmVxdWlyZSgncGFyc2UtYXNuMScpO1xudmFyIGN1cnZlcyA9IHJlcXVpcmUoJy4vY3VydmVzLmpzb24nKTtcblxuZnVuY3Rpb24gdmVyaWZ5KHNpZywgaGFzaCwga2V5LCBzaWduVHlwZSwgdGFnKSB7XG4gIHZhciBwdWIgPSBwYXJzZUtleXMoa2V5KTtcbiAgaWYgKHB1Yi50eXBlID09PSAnZWMnKSB7XG4gICAgLy8gcnNhIGtleXMgY2FuIGJlIGludGVycHJldGVkIGFzIGVjZHNhIG9uZXMgaW4gb3BlbnNzbFxuICAgIGlmIChzaWduVHlwZSAhPT0gJ2VjZHNhJyAmJiBzaWduVHlwZSAhPT0gJ2VjZHNhL3JzYScpIHsgdGhyb3cgbmV3IEVycm9yKCd3cm9uZyBwdWJsaWMga2V5IHR5cGUnKTsgfVxuICAgIHJldHVybiBlY1ZlcmlmeShzaWcsIGhhc2gsIHB1Yik7XG4gIH0gZWxzZSBpZiAocHViLnR5cGUgPT09ICdkc2EnKSB7XG4gICAgaWYgKHNpZ25UeXBlICE9PSAnZHNhJykgeyB0aHJvdyBuZXcgRXJyb3IoJ3dyb25nIHB1YmxpYyBrZXkgdHlwZScpOyB9XG4gICAgcmV0dXJuIGRzYVZlcmlmeShzaWcsIGhhc2gsIHB1Yik7XG4gIH1cbiAgaWYgKHNpZ25UeXBlICE9PSAncnNhJyAmJiBzaWduVHlwZSAhPT0gJ2VjZHNhL3JzYScpIHsgdGhyb3cgbmV3IEVycm9yKCd3cm9uZyBwdWJsaWMga2V5IHR5cGUnKTsgfVxuXG4gIGhhc2ggPSBCdWZmZXIuY29uY2F0KFt0YWcsIGhhc2hdKTtcbiAgdmFyIGxlbiA9IHB1Yi5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtcbiAgdmFyIHBhZCA9IFsxXTtcbiAgdmFyIHBhZE51bSA9IDA7XG4gIHdoaWxlIChoYXNoLmxlbmd0aCArIHBhZC5sZW5ndGggKyAyIDwgbGVuKSB7XG4gICAgcGFkLnB1c2goMHhmZik7XG4gICAgcGFkTnVtICs9IDE7XG4gIH1cbiAgcGFkLnB1c2goMHgwMCk7XG4gIHZhciBpID0gLTE7XG4gIHdoaWxlICgrK2kgPCBoYXNoLmxlbmd0aCkge1xuICAgIHBhZC5wdXNoKGhhc2hbaV0pO1xuICB9XG4gIHBhZCA9IEJ1ZmZlci5mcm9tKHBhZCk7XG4gIHZhciByZWQgPSBCTi5tb250KHB1Yi5tb2R1bHVzKTtcbiAgc2lnID0gbmV3IEJOKHNpZykudG9SZWQocmVkKTtcblxuICBzaWcgPSBzaWcucmVkUG93KG5ldyBCTihwdWIucHVibGljRXhwb25lbnQpKTtcbiAgc2lnID0gQnVmZmVyLmZyb20oc2lnLmZyb21SZWQoKS50b0FycmF5KCkpO1xuICB2YXIgb3V0ID0gcGFkTnVtIDwgOCA/IDEgOiAwO1xuICBsZW4gPSBNYXRoLm1pbihzaWcubGVuZ3RoLCBwYWQubGVuZ3RoKTtcbiAgaWYgKHNpZy5sZW5ndGggIT09IHBhZC5sZW5ndGgpIHsgb3V0ID0gMTsgfVxuXG4gIGkgPSAtMTtcbiAgd2hpbGUgKCsraSA8IGxlbikgeyBvdXQgfD0gc2lnW2ldIF4gcGFkW2ldOyB9XG4gIHJldHVybiBvdXQgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGVjVmVyaWZ5KHNpZywgaGFzaCwgcHViKSB7XG4gIHZhciBjdXJ2ZUlkID0gY3VydmVzW3B1Yi5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCcuJyldO1xuICBpZiAoIWN1cnZlSWQpIHsgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGN1cnZlICcgKyBwdWIuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbignLicpKTsgfVxuXG4gIHZhciBjdXJ2ZSA9IG5ldyBFQyhjdXJ2ZUlkKTtcbiAgdmFyIHB1YmtleSA9IHB1Yi5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGE7XG5cbiAgcmV0dXJuIGN1cnZlLnZlcmlmeShoYXNoLCBzaWcsIHB1YmtleSk7XG59XG5cbmZ1bmN0aW9uIGRzYVZlcmlmeShzaWcsIGhhc2gsIHB1Yikge1xuICB2YXIgcCA9IHB1Yi5kYXRhLnA7XG4gIHZhciBxID0gcHViLmRhdGEucTtcbiAgdmFyIGcgPSBwdWIuZGF0YS5nO1xuICB2YXIgeSA9IHB1Yi5kYXRhLnB1Yl9rZXk7XG4gIHZhciB1bnBhY2tlZCA9IHBhcnNlS2V5cy5zaWduYXR1cmUuZGVjb2RlKHNpZywgJ2RlcicpO1xuICB2YXIgcyA9IHVucGFja2VkLnM7XG4gIHZhciByID0gdW5wYWNrZWQucjtcbiAgY2hlY2tWYWx1ZShzLCBxKTtcbiAgY2hlY2tWYWx1ZShyLCBxKTtcbiAgdmFyIG1vbnRwID0gQk4ubW9udChwKTtcbiAgdmFyIHcgPSBzLmludm0ocSk7XG4gIHZhciB2ID0gZy50b1JlZChtb250cClcbiAgICAucmVkUG93KG5ldyBCTihoYXNoKS5tdWwodykubW9kKHEpKVxuICAgIC5mcm9tUmVkKClcbiAgICAubXVsKHkudG9SZWQobW9udHApLnJlZFBvdyhyLm11bCh3KS5tb2QocSkpLmZyb21SZWQoKSlcbiAgICAubW9kKHApXG4gICAgLm1vZChxKTtcbiAgcmV0dXJuIHYuY21wKHIpID09PSAwO1xufVxuXG5mdW5jdGlvbiBjaGVja1ZhbHVlKGIsIHEpIHtcbiAgaWYgKGIuY21wbigwKSA8PSAwKSB7IHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzaWcnKTsgfVxuICBpZiAoYi5jbXAocSkgPj0gMCkgeyB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2lnJyk7IH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJpZnk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/browserify-sign/browser/verify.js\n\n}")},"./node_modules/bs58/index.js"(module,__unused_webpack_exports,__webpack_require__){eval("{const basex = __webpack_require__(/*! base-x */ \"./node_modules/base-x/src/index.js\")\nconst ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnM1OC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsa0RBQVE7QUFDOUI7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9iczU4L2luZGV4LmpzPzA3NzQiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgYmFzZXggPSByZXF1aXJlKCdiYXNlLXgnKVxuY29uc3QgQUxQSEFCRVQgPSAnMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5eidcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNleChBTFBIQUJFVClcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/bs58/index.js\n\n}")},"./node_modules/bs58check/base.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nvar base58 = __webpack_require__(/*! bs58 */ \"./node_modules/bs58/index.js\")\n\nmodule.exports = function (checksumFn) {\n // Encode a buffer as a base58-check encoded string\n function encode (payload) {\n var payloadU8 = Uint8Array.from(payload)\n var checksum = checksumFn(payloadU8)\n var length = payloadU8.length + 4\n var both = new Uint8Array(length)\n both.set(payloadU8, 0)\n both.set(checksum.subarray(0, 4), payloadU8.length)\n return base58.encode(both, length)\n }\n\n function decodeRaw (buffer) {\n var payload = buffer.slice(0, -4)\n var checksum = buffer.slice(-4)\n var newChecksum = checksumFn(payload)\n\n if (checksum[0] ^ newChecksum[0] |\n checksum[1] ^ newChecksum[1] |\n checksum[2] ^ newChecksum[2] |\n checksum[3] ^ newChecksum[3]) return\n\n return payload\n }\n\n // Decode a base58-check encoded string to a buffer, no result if checksum is wrong\n function decodeUnsafe (string) {\n var buffer = base58.decodeUnsafe(string)\n if (!buffer) return\n\n return decodeRaw(buffer)\n }\n\n function decode (string) {\n var buffer = base58.decode(string)\n var payload = decodeRaw(buffer, checksumFn)\n if (!payload) throw new Error('Invalid checksum')\n return payload\n }\n\n return {\n encode: encode,\n decode: decode,\n decodeUnsafe: decodeUnsafe\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnM1OGNoZWNrL2Jhc2UuanMiLCJtYXBwaW5ncyI6IkFBQVk7O0FBRVosYUFBYSxtQkFBTyxDQUFDLDBDQUFNOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYnM1OGNoZWNrL2Jhc2UuanM/MDZlOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxudmFyIGJhc2U1OCA9IHJlcXVpcmUoJ2JzNTgnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjaGVja3N1bUZuKSB7XG4gIC8vIEVuY29kZSBhIGJ1ZmZlciBhcyBhIGJhc2U1OC1jaGVjayBlbmNvZGVkIHN0cmluZ1xuICBmdW5jdGlvbiBlbmNvZGUgKHBheWxvYWQpIHtcbiAgICB2YXIgcGF5bG9hZFU4ID0gVWludDhBcnJheS5mcm9tKHBheWxvYWQpXG4gICAgdmFyIGNoZWNrc3VtID0gY2hlY2tzdW1GbihwYXlsb2FkVTgpXG4gICAgdmFyIGxlbmd0aCA9IHBheWxvYWRVOC5sZW5ndGggKyA0XG4gICAgdmFyIGJvdGggPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgYm90aC5zZXQocGF5bG9hZFU4LCAwKVxuICAgIGJvdGguc2V0KGNoZWNrc3VtLnN1YmFycmF5KDAsIDQpLCBwYXlsb2FkVTgubGVuZ3RoKVxuICAgIHJldHVybiBiYXNlNTguZW5jb2RlKGJvdGgsIGxlbmd0aClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZVJhdyAoYnVmZmVyKSB7XG4gICAgdmFyIHBheWxvYWQgPSBidWZmZXIuc2xpY2UoMCwgLTQpXG4gICAgdmFyIGNoZWNrc3VtID0gYnVmZmVyLnNsaWNlKC00KVxuICAgIHZhciBuZXdDaGVja3N1bSA9IGNoZWNrc3VtRm4ocGF5bG9hZClcblxuICAgIGlmIChjaGVja3N1bVswXSBeIG5ld0NoZWNrc3VtWzBdIHxcbiAgICAgICAgY2hlY2tzdW1bMV0gXiBuZXdDaGVja3N1bVsxXSB8XG4gICAgICAgIGNoZWNrc3VtWzJdIF4gbmV3Q2hlY2tzdW1bMl0gfFxuICAgICAgICBjaGVja3N1bVszXSBeIG5ld0NoZWNrc3VtWzNdKSByZXR1cm5cblxuICAgIHJldHVybiBwYXlsb2FkXG4gIH1cblxuICAvLyBEZWNvZGUgYSBiYXNlNTgtY2hlY2sgZW5jb2RlZCBzdHJpbmcgdG8gYSBidWZmZXIsIG5vIHJlc3VsdCBpZiBjaGVja3N1bSBpcyB3cm9uZ1xuICBmdW5jdGlvbiBkZWNvZGVVbnNhZmUgKHN0cmluZykge1xuICAgIHZhciBidWZmZXIgPSBiYXNlNTguZGVjb2RlVW5zYWZlKHN0cmluZylcbiAgICBpZiAoIWJ1ZmZlcikgcmV0dXJuXG5cbiAgICByZXR1cm4gZGVjb2RlUmF3KGJ1ZmZlcilcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZSAoc3RyaW5nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IGJhc2U1OC5kZWNvZGUoc3RyaW5nKVxuICAgIHZhciBwYXlsb2FkID0gZGVjb2RlUmF3KGJ1ZmZlciwgY2hlY2tzdW1GbilcbiAgICBpZiAoIXBheWxvYWQpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGVja3N1bScpXG4gICAgcmV0dXJuIHBheWxvYWRcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgZGVjb2RlOiBkZWNvZGUsXG4gICAgZGVjb2RlVW5zYWZlOiBkZWNvZGVVbnNhZmVcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/bs58check/base.js\n\n}")},"./node_modules/bs58check/index.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar { sha256 } = __webpack_require__(/*! @noble/hashes/sha256 */ "./node_modules/@noble/hashes/sha2.js")\nvar bs58checkBase = __webpack_require__(/*! ./base */ "./node_modules/bs58check/base.js")\n\n// SHA256(SHA256(buffer))\nfunction sha256x2 (buffer) {\n return sha256(sha256(buffer))\n}\n\nmodule.exports = bs58checkBase(sha256x2)\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnM1OGNoZWNrL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFZOztBQUVaLE1BQU0sU0FBUyxFQUFFLG1CQUFPLENBQUMsa0VBQXNCO0FBQy9DLG9CQUFvQixtQkFBTyxDQUFDLGdEQUFROztBQUVwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2JzNThjaGVjay9pbmRleC5qcz82Zjc4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xuXG52YXIgeyBzaGEyNTYgfSA9IHJlcXVpcmUoJ0Bub2JsZS9oYXNoZXMvc2hhMjU2JylcbnZhciBiczU4Y2hlY2tCYXNlID0gcmVxdWlyZSgnLi9iYXNlJylcblxuLy8gU0hBMjU2KFNIQTI1NihidWZmZXIpKVxuZnVuY3Rpb24gc2hhMjU2eDIgKGJ1ZmZlcikge1xuICByZXR1cm4gc2hhMjU2KHNoYTI1NihidWZmZXIpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJzNThjaGVja0Jhc2Uoc2hhMjU2eDIpXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bs58check/index.js\n\n}')},"./node_modules/buffer-reverse/index.js"(module,__unused_webpack_exports,__webpack_require__){eval('{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer;\nmodule.exports = function reverse (src) {\n var buffer = new Buffer(src.length)\n\n for (var i = 0, j = src.length - 1; i <= j; ++i, --j) {\n buffer[i] = src[j]\n buffer[j] = src[i]\n }\n\n return buffer\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnVmZmVyLXJldmVyc2UvaW5kZXguanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0EsbUJBQW1CLE1BQU07O0FBRXpCLHNDQUFzQyxRQUFRO0FBQzlDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYnVmZmVyLXJldmVyc2UvaW5kZXguanM/ZmVhYSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJldmVyc2UgKHNyYykge1xuICB2YXIgYnVmZmVyID0gbmV3IEJ1ZmZlcihzcmMubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwLCBqID0gc3JjLmxlbmd0aCAtIDE7IGkgPD0gajsgKytpLCAtLWopIHtcbiAgICBidWZmZXJbaV0gPSBzcmNbal1cbiAgICBidWZmZXJbal0gPSBzcmNbaV1cbiAgfVxuXG4gIHJldHVybiBidWZmZXJcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/buffer-reverse/index.js\n\n}')},"./node_modules/buffer-xor/index.js"(module,__unused_webpack_exports,__webpack_require__){eval('{/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js").Buffer;\nmodule.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnVmZmVyLXhvci9pbmRleC5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBLG1CQUFtQixNQUFNOztBQUV6QixrQkFBa0IsWUFBWTtBQUM5QjtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9idWZmZXIteG9yL2luZGV4LmpzPzhjOGEiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4b3IgKGEsIGIpIHtcbiAgdmFyIGxlbmd0aCA9IE1hdGgubWluKGEubGVuZ3RoLCBiLmxlbmd0aClcbiAgdmFyIGJ1ZmZlciA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBidWZmZXJbaV0gPSBhW2ldIF4gYltpXVxuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlclxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/buffer-xor/index.js\n\n}')},"./node_modules/buffer/index.js"(__unused_webpack_module,exports,__webpack_require__){"use strict";eval("{/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n\n\nconst base64 = __webpack_require__(/*! base64-js */ \"./node_modules/base64-js/index.js\")\nconst ieee754 = __webpack_require__(/*! ieee754 */ \"./node_modules/ieee754/index.js\")\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVZOztBQUVaLGVBQWUsbUJBQU8sQ0FBQyxvREFBVztBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyxnREFBUztBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjO0FBQ2Qsa0JBQWtCO0FBQ2xCLHlCQUF5Qjs7QUFFekI7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtQkFBbUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixZQUFZO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx3Q0FBd0MsU0FBUztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYyxpQkFBaUI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsU0FBUztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsU0FBUztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLFNBQVM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixlQUFlO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLHlCQUF5QixRQUFRO0FBQ2pDO0FBQ0Esc0JBQXNCLGVBQWU7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsWUFBWTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLFNBQVM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixTQUFTO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQixTQUFTO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUI7QUFD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Q047QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdCQUFnQjtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWMsWUFBWTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFFBQVE7QUFDMUI7QUFDQSxvQkFBb0IsUUFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzP2I2MzkiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbmNvbnN0IGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbmNvbnN0IGN1c3RvbUluc3BlY3RTeW1ib2wgPVxuICAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sWydmb3InXSA9PT0gJ2Z1bmN0aW9uJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA/IFN5bWJvbFsnZm9yJ10oJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA6IG51bGxcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG5jb25zdCBLX01BWF9MRU5HVEggPSAweDdmZmZmZmZmXG5leHBvcnRzLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEhcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgUHJpbnQgd2FybmluZyBhbmQgcmVjb21tZW5kIHVzaW5nIGBidWZmZXJgIHY0Lnggd2hpY2ggaGFzIGFuIE9iamVjdFxuICogICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogV2UgcmVwb3J0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXMgaWYgdGhlIGFyZSBub3Qgc3ViY2xhc3NhYmxlXG4gKiB1c2luZyBfX3Byb3RvX18uIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgXG4gKiAoU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzgpLiBJRSAxMCBsYWNrcyBzdXBwb3J0XG4gKiBmb3IgX19wcm90b19fIGFuZCBoYXMgYSBidWdneSB0eXBlZCBhcnJheSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5ICcgK1xuICAgICdgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LidcbiAgKVxufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIC8vIENhbiB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGNvbnN0IHByb3RvID0geyBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcbiAgcmV0dXJuIGJ1ZlxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZylcbiAgfVxuICByZXR1cm4gZnJvbShhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnBvb2xTaXplID0gODE5MiAvLyBub3QgdXNlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uXG5cbmZ1bmN0aW9uIGZyb20gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheVZpZXcodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgICAnb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdmFsdWUpXG4gICAgKVxuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2UodmFsdWUsIEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBBcnJheUJ1ZmZlcikpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIChpc0luc3RhbmNlKHZhbHVlLCBTaGFyZWRBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgU2hhcmVkQXJyYXlCdWZmZXIpKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgKVxuICB9XG5cbiAgY29uc3QgdmFsdWVPZiA9IHZhbHVlLnZhbHVlT2YgJiYgdmFsdWUudmFsdWVPZigpXG4gIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgY29uc3QgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgnc3RyaW5nJyksIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIE5vdGU6IENoYW5nZSBwcm90b3R5cGUgKmFmdGVyKiBCdWZmZXIuZnJvbSBpcyBkZWZpbmVkIHRvIHdvcmthcm91bmQgQ2hyb21lIGJ1Zzpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvMTQ4XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLnByb3RvdHlwZSwgVWludDhBcnJheS5wcm90b3R5cGUpXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLCBVaW50OEFycmF5KVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgc2l6ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICBsZXQgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICBjb25zdCBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKGFycmF5KSB7XG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICBjb25zdCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheVZpZXcgKGFycmF5Vmlldykge1xuICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7XG4gICAgY29uc3QgY29weSA9IG5ldyBVaW50OEFycmF5KGFycmF5VmlldylcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKGNvcHkuYnVmZmVyLCBjb3B5LmJ5dGVPZmZzZXQsIGNvcHkuYnl0ZUxlbmd0aClcbiAgfVxuICByZXR1cm4gZnJvbUFycmF5TGlrZShhcnJheVZpZXcpXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBsZXQgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAob2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIGNvbnN0IGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgY29uc3QgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIGxldCB4ID0gYS5sZW5ndGhcbiAgbGV0IHkgPSBiLmxlbmd0aFxuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgbGV0IGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICBsZXQgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGxldCBidWYgPSBsaXN0W2ldXG4gICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHBvcyArIGJ1Zi5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIGJ1ZiA9IEJ1ZmZlci5mcm9tKGJ1ZilcbiAgICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgYnVmLFxuICAgICAgICAgIHBvc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIH1cbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgY29uc3QgbXVzdE1hdGNoID0gKGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZSlcbiAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7XG4gICAgICAgICAgcmV0dXJuIG11c3RNYXRjaCA/IC0xIDogdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgfVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJjaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCAoYW5kIHRoZSBgaXMtYnVmZmVyYCBucG0gcGFja2FnZSlcbi8vIHRvIGRldGVjdCBhIEJ1ZmZlciBpbnN0YW5jZS4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlcmBcbi8vIHJlbGlhYmx5IGluIGEgYnJvd3NlcmlmeSBjb250ZXh0IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50XG4vLyBjb3BpZXMgb2YgdGhlICdidWZmZXInIHBhY2thZ2UgaW4gdXNlLiBUaGlzIG1ldGhvZCB3b3JrcyBldmVuIGZvciBCdWZmZXJcbi8vIGluc3RhbmNlcyB0aGF0IHdlcmUgY3JlYXRlZCBmcm9tIGFub3RoZXIgY29weSBvZiB0aGUgYGJ1ZmZlcmAgcGFja2FnZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE1NFxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgY29uc3QgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcgPSBCdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nXG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgbGV0IHN0ciA9ICcnXG4gIGNvbnN0IG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5yZXBsYWNlKC8oLnsyfSkvZywgJyQxICcpLnRyaW0oKVxuICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5pZiAoY3VzdG9tSW5zcGVjdFN5bWJvbCkge1xuICBCdWZmZXIucHJvdG90eXBlW2N1c3RvbUluc3BlY3RTeW1ib2xdID0gQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmIChpc0luc3RhbmNlKHRhcmdldCwgVWludDhBcnJheSkpIHtcbiAgICB0YXJnZXQgPSBCdWZmZXIuZnJvbSh0YXJnZXQsIHRhcmdldC5vZmZzZXQsIHRhcmdldC5ieXRlTGVuZ3RoKVxuICB9XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdGFyZ2V0KVxuICAgIClcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIGxldCB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICBsZXQgeSA9IGVuZCAtIHN0YXJ0XG4gIGNvbnN0IGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgY29uc3QgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgY29uc3QgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKG51bWJlcklzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgW3ZhbF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIGxldCBpbmRleFNpemUgPSAxXG4gIGxldCBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIGxldCB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIGxldCBpXG4gIGlmIChkaXIpIHtcbiAgICBsZXQgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIGNvbnN0IHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBsZXQgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICBjb25zdCByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgY29uc3QgcmVzID0gW11cblxuICBsZXQgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgY29uc3QgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgbGV0IGNvZGVQb2ludCA9IG51bGxcbiAgICBsZXQgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKVxuICAgICAgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKVxuICAgICAgICAgID8gM1xuICAgICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIGxldCBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbmNvbnN0IE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICBjb25zdCBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGxldCByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICBsZXQgb3V0ID0gJydcbiAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gaGV4U2xpY2VMb29rdXBUYWJsZVtidWZbaV1dXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBjb25zdCBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICBsZXQgcmVzID0gJydcbiAgLy8gSWYgYnl0ZXMubGVuZ3RoIGlzIG9kZCwgdGhlIGxhc3QgOCBiaXRzIG11c3QgYmUgaWdub3JlZCAoc2FtZSBhcyBub2RlLmpzKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICBjb25zdCBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0XVxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICBsZXQgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIGxldCBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ1VJbnQ2NExFIChvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdXG4gIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddXG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KVxuICB9XG5cbiAgY29uc3QgbG8gPSBmaXJzdCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDI0XG5cbiAgY29uc3QgaGkgPSB0aGlzWysrb2Zmc2V0XSArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgbGFzdCAqIDIgKiogMjRcblxuICByZXR1cm4gQmlnSW50KGxvKSArIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0QkUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCBoaSA9IGZpcnN0ICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF1cblxuICBjb25zdCBsbyA9IHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgbGFzdFxuXG4gIHJldHVybiAoQmlnSW50KGhpKSA8PCBCaWdJbnQoMzIpKSArIEJpZ0ludChsbylcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIGxldCB2YWwgPSB0aGlzW29mZnNldF1cbiAgbGV0IG11bCA9IDFcbiAgbGV0IGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICBsZXQgaSA9IGJ5dGVMZW5ndGhcbiAgbGV0IG11bCA9IDFcbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICBjb25zdCB2YWwgPSB0aGlzW29mZnNldCArIDFdIHwgKHRoaXNbb2Zmc2V0XSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyTEUgPSBmdW5jdGlvbiByZWFkSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRMRSAob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XVxuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XVxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOClcbiAgfVxuXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgNF0gK1xuICAgIHRoaXNbb2Zmc2V0ICsgNV0gKiAyICoqIDggK1xuICAgIHRoaXNbb2Zmc2V0ICsgNl0gKiAyICoqIDE2ICtcbiAgICAobGFzdCA8PCAyNCkgLy8gT3ZlcmZsb3dcblxuICByZXR1cm4gKEJpZ0ludCh2YWwpIDw8IEJpZ0ludCgzMikpICtcbiAgICBCaWdJbnQoZmlyc3QgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAyNClcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gcmVhZEJpZ0ludDY0QkUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCB2YWwgPSAoZmlyc3QgPDwgMjQpICsgLy8gT3ZlcmZsb3dcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XVxuXG4gIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgK1xuICAgIEJpZ0ludCh0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjQgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIGxhc3QpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnRMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIGxldCBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgbGV0IG11bCA9IDFcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50OCA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyTEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIHdydEJpZ1VJbnQ2NExFIChidWYsIHZhbHVlLCBvZmZzZXQsIG1pbiwgbWF4KSB7XG4gIGNoZWNrSW50QkkodmFsdWUsIG1pbiwgbWF4LCBidWYsIG9mZnNldCwgNylcblxuICBsZXQgbG8gPSBOdW1iZXIodmFsdWUgJiBCaWdJbnQoMHhmZmZmZmZmZikpXG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0KytdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0KytdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIHJldHVybiBvZmZzZXRcbn1cblxuZnVuY3Rpb24gd3J0QmlnVUludDY0QkUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA3KVxuXG4gIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCArIDddID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQgKyA2XSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0ICsgNV0gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCArIDRdID0gbG9cbiAgbGV0IGhpID0gTnVtYmVyKHZhbHVlID4+IEJpZ0ludCgzMikgJiBCaWdJbnQoMHhmZmZmZmZmZikpXG4gIGJ1ZltvZmZzZXQgKyAzXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0ICsgMl0gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCArIDFdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXRdID0gaGlcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnVUludDY0TEUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBCaWdJbnQoMCksIEJpZ0ludCgnMHhmZmZmZmZmZmZmZmZmZmZmJykpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnVUludDY0QkUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRCRSAodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCcweGZmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgbGV0IGkgPSAwXG4gIGxldCBtdWwgPSAxXG4gIGxldCBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY29uc3QgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgbGV0IGkgPSBieXRlTGVuZ3RoIC0gMVxuICBsZXQgbXVsID0gMVxuICBsZXQgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdJbnQ2NExFICh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICByZXR1cm4gd3J0QmlnVUludDY0TEUodGhpcywgdmFsdWUsIG9mZnNldCwgLUJpZ0ludCgnMHg4MDAwMDAwMDAwMDAwMDAwJyksIEJpZ0ludCgnMHg3ZmZmZmZmZmZmZmZmZmZmJykpXG59KVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ0ludDY0QkUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRCRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCcweDgwMDAwMDAwMDAwMDAwMDAnKSwgQmlnSW50KCcweDdmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICBjb25zdCBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKChlbmNvZGluZyA9PT0gJ3V0ZjgnICYmIGNvZGUgPCAxMjgpIHx8XG4gICAgICAgICAgZW5jb2RpbmcgPT09ICdsYXRpbjEnKSB7XG4gICAgICAgIC8vIEZhc3QgcGF0aDogSWYgYHZhbGAgZml0cyBpbnRvIGEgc2luZ2xlIGJ5dGUsIHVzZSB0aGF0IG51bWVyaWMgdmFsdWUuXG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHtcbiAgICB2YWwgPSBOdW1iZXIodmFsKVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIGxldCBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgICBjb25zdCBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIENVU1RPTSBFUlJPUlNcbi8vID09PT09PT09PT09PT1cblxuLy8gU2ltcGxpZmllZCB2ZXJzaW9ucyBmcm9tIE5vZGUsIGNoYW5nZWQgZm9yIEJ1ZmZlci1vbmx5IHVzYWdlXG5jb25zdCBlcnJvcnMgPSB7fVxuZnVuY3Rpb24gRSAoc3ltLCBnZXRNZXNzYWdlLCBCYXNlKSB7XG4gIGVycm9yc1tzeW1dID0gY2xhc3MgTm9kZUVycm9yIGV4dGVuZHMgQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgc3VwZXIoKVxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ21lc3NhZ2UnLCB7XG4gICAgICAgIHZhbHVlOiBnZXRNZXNzYWdlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIC8vIEFkZCB0aGUgZXJyb3IgY29kZSB0byB0aGUgbmFtZSB0byBpbmNsdWRlIGl0IGluIHRoZSBzdGFjayB0cmFjZS5cbiAgICAgIHRoaXMubmFtZSA9IGAke3RoaXMubmFtZX0gWyR7c3ltfV1gXG4gICAgICAvLyBBY2Nlc3MgdGhlIHN0YWNrIHRvIGdlbmVyYXRlIHRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGluZyB0aGUgZXJyb3IgY29kZVxuICAgICAgLy8gZnJvbSB0aGUgbmFtZS5cbiAgICAgIHRoaXMuc3RhY2sgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgICAgIC8vIFJlc2V0IHRoZSBuYW1lIHRvIHRoZSBhY3R1YWwgbmFtZS5cbiAgICAgIGRlbGV0ZSB0aGlzLm5hbWVcbiAgICB9XG5cbiAgICBnZXQgY29kZSAoKSB7XG4gICAgICByZXR1cm4gc3ltXG4gICAgfVxuXG4gICAgc2V0IGNvZGUgKHZhbHVlKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2NvZGUnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRvU3RyaW5nICgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm5hbWV9IFske3N5bX1dOiAke3RoaXMubWVzc2FnZX1gXG4gICAgfVxuICB9XG59XG5cbkUoJ0VSUl9CVUZGRVJfT1VUX09GX0JPVU5EUycsXG4gIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiBgJHtuYW1lfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgXG4gICAgfVxuXG4gICAgcmV0dXJuICdBdHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzJ1xuICB9LCBSYW5nZUVycm9yKVxuRSgnRVJSX0lOVkFMSURfQVJHX1RZUEUnLFxuICBmdW5jdGlvbiAobmFtZSwgYWN0dWFsKSB7XG4gICAgcmV0dXJuIGBUaGUgXCIke25hbWV9XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiBhY3R1YWx9YFxuICB9LCBUeXBlRXJyb3IpXG5FKCdFUlJfT1VUX09GX1JBTkdFJyxcbiAgZnVuY3Rpb24gKHN0ciwgcmFuZ2UsIGlucHV0KSB7XG4gICAgbGV0IG1zZyA9IGBUaGUgdmFsdWUgb2YgXCIke3N0cn1cIiBpcyBvdXQgb2YgcmFuZ2UuYFxuICAgIGxldCByZWNlaXZlZCA9IGlucHV0XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5wdXQpICYmIE1hdGguYWJzKGlucHV0KSA+IDIgKiogMzIpIHtcbiAgICAgIHJlY2VpdmVkID0gYWRkTnVtZXJpY2FsU2VwYXJhdG9yKFN0cmluZyhpbnB1dCkpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdiaWdpbnQnKSB7XG4gICAgICByZWNlaXZlZCA9IFN0cmluZyhpbnB1dClcbiAgICAgIGlmIChpbnB1dCA+IEJpZ0ludCgyKSAqKiBCaWdJbnQoMzIpIHx8IGlucHV0IDwgLShCaWdJbnQoMikgKiogQmlnSW50KDMyKSkpIHtcbiAgICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IocmVjZWl2ZWQpXG4gICAgICB9XG4gICAgICByZWNlaXZlZCArPSAnbidcbiAgICB9XG4gICAgbXNnICs9IGAgSXQgbXVzdCBiZSAke3JhbmdlfS4gUmVjZWl2ZWQgJHtyZWNlaXZlZH1gXG4gICAgcmV0dXJuIG1zZ1xuICB9LCBSYW5nZUVycm9yKVxuXG5mdW5jdGlvbiBhZGROdW1lcmljYWxTZXBhcmF0b3IgKHZhbCkge1xuICBsZXQgcmVzID0gJydcbiAgbGV0IGkgPSB2YWwubGVuZ3RoXG4gIGNvbnN0IHN0YXJ0ID0gdmFsWzBdID09PSAnLScgPyAxIDogMFxuICBmb3IgKDsgaSA+PSBzdGFydCArIDQ7IGkgLT0gMykge1xuICAgIHJlcyA9IGBfJHt2YWwuc2xpY2UoaSAtIDMsIGkpfSR7cmVzfWBcbiAgfVxuICByZXR1cm4gYCR7dmFsLnNsaWNlKDAsIGkpfSR7cmVzfWBcbn1cblxuLy8gQ0hFQ0sgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gY2hlY2tCb3VuZHMgKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGlmIChidWZbb2Zmc2V0XSA9PT0gdW5kZWZpbmVkIHx8IGJ1ZltvZmZzZXQgKyBieXRlTGVuZ3RoXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCBidWYubGVuZ3RoIC0gKGJ5dGVMZW5ndGggKyAxKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0ludEJJICh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikge1xuICAgIGNvbnN0IG4gPSB0eXBlb2YgbWluID09PSAnYmlnaW50JyA/ICduJyA6ICcnXG4gICAgbGV0IHJhbmdlXG4gICAgaWYgKGJ5dGVMZW5ndGggPiAzKSB7XG4gICAgICBpZiAobWluID09PSAwIHx8IG1pbiA9PT0gQmlnSW50KDApKSB7XG4gICAgICAgIHJhbmdlID0gYD49IDAke259IGFuZCA8IDIke259ICoqICR7KGJ5dGVMZW5ndGggKyAxKSAqIDh9JHtufWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhbmdlID0gYD49IC0oMiR7bn0gKiogJHsoYnl0ZUxlbmd0aCArIDEpICogOCAtIDF9JHtufSkgYW5kIDwgMiAqKiBgICtcbiAgICAgICAgICAgICAgICBgJHsoYnl0ZUxlbmd0aCArIDEpICogOCAtIDF9JHtufWBcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UgPSBgPj0gJHttaW59JHtufSBhbmQgPD0gJHttYXh9JHtufWBcbiAgICB9XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKCd2YWx1ZScsIHJhbmdlLCB2YWx1ZSlcbiAgfVxuICBjaGVja0JvdW5kcyhidWYsIG9mZnNldCwgYnl0ZUxlbmd0aClcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIgKHZhbHVlLCBuYW1lKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfSU5WQUxJRF9BUkdfVFlQRShuYW1lLCAnbnVtYmVyJywgdmFsdWUpXG4gIH1cbn1cblxuZnVuY3Rpb24gYm91bmRzRXJyb3IgKHZhbHVlLCBsZW5ndGgsIHR5cGUpIHtcbiAgaWYgKE1hdGguZmxvb3IodmFsdWUpICE9PSB2YWx1ZSkge1xuICAgIHZhbGlkYXRlTnVtYmVyKHZhbHVlLCB0eXBlKVxuICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSh0eXBlIHx8ICdvZmZzZXQnLCAnYW4gaW50ZWdlcicsIHZhbHVlKVxuICB9XG5cbiAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUygpXG4gIH1cblxuICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UodHlwZSB8fCAnb2Zmc2V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA+PSAke3R5cGUgPyAxIDogMH0gYW5kIDw9ICR7bGVuZ3RofWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSlcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG5jb25zdCBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXisvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHRha2VzIGVxdWFsIHNpZ25zIGFzIGVuZCBvZiB0aGUgQmFzZTY0IGVuY29kaW5nXG4gIHN0ciA9IHN0ci5zcGxpdCgnPScpWzBdXG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgbGV0IGNvZGVQb2ludFxuICBjb25zdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIGxldCBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICBjb25zdCBieXRlcyA9IFtdXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIGNvbnN0IGJ5dGVBcnJheSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgbGV0IGMsIGhpLCBsb1xuICBjb25zdCBieXRlQXJyYXkgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGxldCBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGlmICgoaSArIG9mZnNldCA+PSBkc3QubGVuZ3RoKSB8fCAoaSA+PSBzcmMubGVuZ3RoKSkgYnJlYWtcbiAgICBkc3RbaSArIG9mZnNldF0gPSBzcmNbaV1cbiAgfVxuICByZXR1cm4gaVxufVxuXG4vLyBBcnJheUJ1ZmZlciBvciBVaW50OEFycmF5IG9iamVjdHMgZnJvbSBvdGhlciBjb250ZXh0cyAoaS5lLiBpZnJhbWVzKSBkbyBub3QgcGFzc1xuLy8gdGhlIGBpbnN0YW5jZW9mYCBjaGVjayBidXQgdGhleSBzaG91bGQgYmUgdHJlYXRlZCBhcyBvZiB0aGF0IHR5cGUuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNjZcbmZ1bmN0aW9uIGlzSW5zdGFuY2UgKG9iaiwgdHlwZSkge1xuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdHlwZSB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSAhPSBudWxsICYmXG4gICAgICBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gdHlwZS5uYW1lKVxufVxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICAvLyBGb3IgSUUxMSBzdXBwb3J0XG4gIHJldHVybiBvYmogIT09IG9iaiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufVxuXG4vLyBDcmVhdGUgbG9va3VwIHRhYmxlIGZvciBgdG9TdHJpbmcoJ2hleCcpYFxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMjE5XG5jb25zdCBoZXhTbGljZUxvb2t1cFRhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYWxwaGFiZXQgPSAnMDEyMzQ1Njc4OWFiY2RlZidcbiAgY29uc3QgdGFibGUgPSBuZXcgQXJyYXkoMjU2KVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICBjb25zdCBpMTYgPSBpICogMTZcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHRhYmxlW2kxNiArIGpdID0gYWxwaGFiZXRbaV0gKyBhbHBoYWJldFtqXVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFibGVcbn0pKClcblxuLy8gUmV0dXJuIG5vdCBmdW5jdGlvbiB3aXRoIEVycm9yIGlmIEJpZ0ludCBub3Qgc3VwcG9ydGVkXG5mdW5jdGlvbiBkZWZpbmVCaWdJbnRNZXRob2QgKGZuKSB7XG4gIHJldHVybiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IEJ1ZmZlckJpZ0ludE5vdERlZmluZWQgOiBmblxufVxuXG5mdW5jdGlvbiBCdWZmZXJCaWdJbnROb3REZWZpbmVkICgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdCaWdJbnQgbm90IHN1cHBvcnRlZCcpXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/buffer/index.js\n\n}")},"./node_modules/call-bind-apply-helpers/actualApply.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar bind = __webpack_require__(/*! function-bind */ "./node_modules/function-bind/index.js");\n\nvar $apply = __webpack_require__(/*! ./functionApply */ "./node_modules/call-bind-apply-helpers/functionApply.js");\nvar $call = __webpack_require__(/*! ./functionCall */ "./node_modules/call-bind-apply-helpers/functionCall.js");\nvar $reflectApply = __webpack_require__(/*! ./reflectApply */ "./node_modules/call-bind-apply-helpers/reflectApply.js");\n\n/** @type {import(\'./actualApply\')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvYWN0dWFsQXBwbHkuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsV0FBVyxtQkFBTyxDQUFDLDREQUFlOztBQUVsQyxhQUFhLG1CQUFPLENBQUMsZ0ZBQWlCO0FBQ3RDLFlBQVksbUJBQU8sQ0FBQyw4RUFBZ0I7QUFDcEMsb0JBQW9CLG1CQUFPLENBQUMsOEVBQWdCOztBQUU1QyxXQUFXLHlCQUF5QjtBQUNwQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzL2FjdHVhbEFwcGx5LmpzPzNiNmEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcblxudmFyICRhcHBseSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25BcHBseScpO1xudmFyICRjYWxsID0gcmVxdWlyZSgnLi9mdW5jdGlvbkNhbGwnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gcmVxdWlyZSgnLi9yZWZsZWN0QXBwbHknKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vYWN0dWFsQXBwbHknKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gJHJlZmxlY3RBcHBseSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/call-bind-apply-helpers/actualApply.js\n\n}')},"./node_modules/call-bind-apply-helpers/applyBind.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar bind = __webpack_require__(/*! function-bind */ "./node_modules/function-bind/index.js");\nvar $apply = __webpack_require__(/*! ./functionApply */ "./node_modules/call-bind-apply-helpers/functionApply.js");\nvar actualApply = __webpack_require__(/*! ./actualApply */ "./node_modules/call-bind-apply-helpers/actualApply.js");\n\n/** @type {import(\'./applyBind\')} */\nmodule.exports = function applyBind() {\n\treturn actualApply(bind, $apply, arguments);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvYXBwbHlCaW5kLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsbUJBQU8sQ0FBQyw0REFBZTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsZ0ZBQWlCO0FBQ3RDLGtCQUFrQixtQkFBTyxDQUFDLDRFQUFlOztBQUV6QyxXQUFXLHVCQUF1QjtBQUNsQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AZmFicmljL2h1Yi8uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQtYXBwbHktaGVscGVycy9hcHBseUJpbmQuanM/NzJlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyICRhcHBseSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25BcHBseScpO1xudmFyIGFjdHVhbEFwcGx5ID0gcmVxdWlyZSgnLi9hY3R1YWxBcHBseScpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9hcHBseUJpbmQnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXBwbHlCaW5kKCkge1xuXHRyZXR1cm4gYWN0dWFsQXBwbHkoYmluZCwgJGFwcGx5LCBhcmd1bWVudHMpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/call-bind-apply-helpers/applyBind.js\n\n}')},"./node_modules/call-bind-apply-helpers/functionApply.js"(module){"use strict";eval("{\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvZnVuY3Rpb25BcHBseS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLDJCQUEyQjtBQUN0QyIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzL2Z1bmN0aW9uQXBwbHkuanM/ZTE2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2Z1bmN0aW9uQXBwbHknKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/call-bind-apply-helpers/functionApply.js\n\n}")},"./node_modules/call-bind-apply-helpers/functionCall.js"(module){"use strict";eval("{\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvZnVuY3Rpb25DYWxsLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsMEJBQTBCO0FBQ3JDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvZnVuY3Rpb25DYWxsLmpzPzkyNmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9mdW5jdGlvbkNhbGwnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/call-bind-apply-helpers/functionCall.js\n\n}")},"./node_modules/call-bind-apply-helpers/index.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar bind = __webpack_require__(/*! function-bind */ "./node_modules/function-bind/index.js");\nvar $TypeError = __webpack_require__(/*! es-errors/type */ "./node_modules/es-errors/type.js");\n\nvar $call = __webpack_require__(/*! ./functionCall */ "./node_modules/call-bind-apply-helpers/functionCall.js");\nvar $actualApply = __webpack_require__(/*! ./actualApply */ "./node_modules/call-bind-apply-helpers/actualApply.js");\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import(\'.\') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== \'function\') {\n\t\tthrow new $TypeError(\'a function is required\');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsV0FBVyxtQkFBTyxDQUFDLDREQUFlO0FBQ2xDLGlCQUFpQixtQkFBTyxDQUFDLHdEQUFnQjs7QUFFekMsWUFBWSxtQkFBTyxDQUFDLDhFQUFnQjtBQUNwQyxtQkFBbUIsbUJBQU8sQ0FBQyw0RUFBZTs7QUFFMUMsV0FBVyx1RUFBdUU7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvaW5kZXguanM/ZjlhZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xuXG52YXIgJGNhbGwgPSByZXF1aXJlKCcuL2Z1bmN0aW9uQ2FsbCcpO1xudmFyICRhY3R1YWxBcHBseSA9IHJlcXVpcmUoJy4vYWN0dWFsQXBwbHknKTtcblxuLyoqIEB0eXBlIHsoYXJnczogW0Z1bmN0aW9uLCB0aGlzQXJnPzogdW5rbm93biwgLi4uYXJnczogdW5rbm93bltdXSkgPT4gRnVuY3Rpb259IFRPRE8gRklYTUUsIGZpbmQgYSB3YXkgdG8gdXNlIGltcG9ydCgnLicpICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCaW5kQmFzaWMoYXJncykge1xuXHRpZiAoYXJncy5sZW5ndGggPCAxIHx8IHR5cGVvZiBhcmdzWzBdICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2EgZnVuY3Rpb24gaXMgcmVxdWlyZWQnKTtcblx0fVxuXHRyZXR1cm4gJGFjdHVhbEFwcGx5KGJpbmQsICRjYWxsLCBhcmdzKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/call-bind-apply-helpers/index.js\n\n}')},"./node_modules/call-bind-apply-helpers/reflectApply.js"(module){"use strict";eval("{\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvcmVmbGVjdEFwcGx5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsMEJBQTBCO0FBQ3JDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvcmVmbGVjdEFwcGx5LmpzPzZiM2YiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9yZWZsZWN0QXBwbHknKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnICYmIFJlZmxlY3QgJiYgUmVmbGVjdC5hcHBseTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/call-bind-apply-helpers/reflectApply.js\n\n}")},"./node_modules/call-bind/index.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval('{\n\nvar setFunctionLength = __webpack_require__(/*! set-function-length */ "./node_modules/set-function-length/index.js");\n\nvar $defineProperty = __webpack_require__(/*! es-define-property */ "./node_modules/es-define-property/index.js");\n\nvar callBindBasic = __webpack_require__(/*! call-bind-apply-helpers */ "./node_modules/call-bind-apply-helpers/index.js");\nvar applyBind = __webpack_require__(/*! call-bind-apply-helpers/applyBind */ "./node_modules/call-bind-apply-helpers/applyBind.js");\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = callBindBasic(arguments);\n\tvar adjustedLength = 1 + originalFunction.length - (arguments.length - 1);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\tadjustedLength > 0 ? adjustedLength : 0,\n\t\ttrue\n\t);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, \'apply\', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLHdCQUF3QixtQkFBTyxDQUFDLHdFQUFxQjs7QUFFckQsc0JBQXNCLG1CQUFPLENBQUMsc0VBQW9COztBQUVsRCxvQkFBb0IsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDckQsZ0JBQWdCLG1CQUFPLENBQUMsOEZBQW1DOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsa0JBQWtCO0FBQzlELEVBQUU7QUFDRixDQUFDLG9CQUFvQjtBQUNyQiIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9pbmRleC5qcz8zZWIxIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHNldEZ1bmN0aW9uTGVuZ3RoID0gcmVxdWlyZSgnc2V0LWZ1bmN0aW9uLWxlbmd0aCcpO1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnZXMtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbnZhciBjYWxsQmluZEJhc2ljID0gcmVxdWlyZSgnY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMnKTtcbnZhciBhcHBseUJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQtYXBwbHktaGVscGVycy9hcHBseUJpbmQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZChvcmlnaW5hbEZ1bmN0aW9uKSB7XG5cdHZhciBmdW5jID0gY2FsbEJpbmRCYXNpYyhhcmd1bWVudHMpO1xuXHR2YXIgYWRqdXN0ZWRMZW5ndGggPSAxICsgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuXHRyZXR1cm4gc2V0RnVuY3Rpb25MZW5ndGgoXG5cdFx0ZnVuYyxcblx0XHRhZGp1c3RlZExlbmd0aCA+IDAgPyBhZGp1c3RlZExlbmd0aCA6IDAsXG5cdFx0dHJ1ZVxuXHQpO1xufTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHQkZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdhcHBseScsIHsgdmFsdWU6IGFwcGx5QmluZCB9KTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzLmFwcGx5ID0gYXBwbHlCaW5kO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/call-bind/index.js\n\n}')},"./node_modules/call-bound/index.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nvar GetIntrinsic = __webpack_require__(/*! get-intrinsic */ \"./node_modules/get-intrinsic/index.js\");\n\nvar callBindBasic = __webpack_require__(/*! call-bind-apply-helpers */ \"./node_modules/call-bind-apply-helpers/index.js\");\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t/* eslint no-extra-parens: 0 */\n\n\tvar intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic(/** @type {const} */ ([intrinsic]));\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2FsbC1ib3VuZC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTs7QUFFMUMsb0JBQW9CLG1CQUFPLENBQUMsZ0ZBQXlCOztBQUVyRCxXQUFXLHNFQUFzRTtBQUNqRjs7QUFFQSxXQUFXLGFBQWE7QUFDeEI7QUFDQTs7QUFFQSw0QkFBNEIsZ0RBQWdEO0FBQzVFO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGZhYnJpYy9odWIvLi9ub2RlX21vZHVsZXMvY2FsbC1ib3VuZC9pbmRleC5qcz8zYmJmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyIGNhbGxCaW5kQmFzaWMgPSByZXF1aXJlKCdjYWxsLWJpbmQtYXBwbHktaGVscGVycycpO1xuXG4vKiogQHR5cGUgeyh0aGlzQXJnOiBzdHJpbmcsIHNlYXJjaFN0cmluZzogc3RyaW5nLCBwb3NpdGlvbj86IG51bWJlcikgPT4gbnVtYmVyfSAqL1xudmFyICRpbmRleE9mID0gY2FsbEJpbmRCYXNpYyhbR2V0SW50cmluc2ljKCclU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJScpXSk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0LyogZXNsaW50IG5vLWV4dHJhLXBhcmVuczogMCAqL1xuXG5cdHZhciBpbnRyaW5zaWMgPSAvKiogQHR5cGUgeyh0aGlzOiB1bmtub3duLCAuLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd259ICovIChHZXRJbnRyaW5zaWMobmFtZSwgISFhbGxvd01pc3NpbmcpKTtcblx0aWYgKHR5cGVvZiBpbnRyaW5zaWMgPT09ICdmdW5jdGlvbicgJiYgJGluZGV4T2YobmFtZSwgJy5wcm90b3R5cGUuJykgPiAtMSkge1xuXHRcdHJldHVybiBjYWxsQmluZEJhc2ljKC8qKiBAdHlwZSB7Y29uc3R9ICovIChbaW50cmluc2ljXSkpO1xuXHR9XG5cdHJldHVybiBpbnRyaW5zaWM7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/call-bound/index.js\n\n}")},"./node_modules/cipher-base/index.js"(module,__unused_webpack_exports,__webpack_require__){"use strict";eval("{\n\nvar Buffer = (__webpack_require__(/*! safe-buffer */ \"./node_modules/safe-buffer/index.js\").Buffer);\nvar Transform = (__webpack_require__(/*! stream */ \"./node_modules/stream-browserify/index.js\").Transform);\nvar StringDecoder = (__webpack_require__(/*! string_decoder */ \"./node_modules/string_decoder/lib/string_decoder.js\").StringDecoder);\nvar inherits = __webpack_require__(/*! inherits */ \"./node_modules/inherits/inherits_browser.js\");\nvar toBuffer = __webpack_require__(/*! to-buffer */ \"./node_modules/to-buffer/index.js\");\n\nfunction CipherBase(hashMode) {\n\tTransform.call(this);\n\tthis.hashMode = typeof hashMode === 'string';\n\tif (this.hashMode) {\n\t\tthis[hashMode] = this._finalOrDigest;\n\t} else {\n\t\tthis['final'] = this._finalOrDigest;\n\t}\n\tif (this._final) {\n\t\tthis.__final = this._final;\n\t\tthis._final = null;\n\t}\n\tthis._decoder = null;\n\tthis._encoding = null;\n}\ninherits(CipherBase, Transform);\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n\tvar bufferData = toBuffer(data, inputEnc); // asserts correct input type\n\tvar outData = this._update(bufferData);\n\tif (this.hashMode) {\n\t\treturn this;\n\t}\n\n\tif (outputEnc) {\n\t\toutData = this._toString(outData, outputEnc);\n\t}\n\n\treturn outData;\n};\n\nCipherBase.prototype.setAutoPadding = function () {};\nCipherBase.prototype.getAuthTag = function () {\n\tthrow new Error('trying to get auth tag in unsupported state');\n};\n\nCipherBase.prototype.setAuthTag = function () {\n\tthrow new Error('trying to set auth tag in unsupported state');\n};\n\nCipherBase.prototype.setAAD = function () {\n\tthrow new Error('trying to set aad in unsupported state');\n};\n\nCipherBase.prototype._transform = function (data, _, next) {\n\tvar err;\n\ttry {\n\t\tif (this.hashMode) {\n\t\t\tthis._update(data);\n\t\t} else {\n\t\t\tthis.push(this._update(data));\n\t\t}\n\t} catch (e) {\n\t\terr = e;\n\t} finally {\n\t\tnext(err);\n\t}\n};\nCipherBase.prototype._flush = function (done) {\n\tvar err;\n\ttry {\n\t\tthis.push(this.__final());\n\t} catch (e) {\n\t\terr = e;\n\t}\n\n\tdone(err);\n};\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n\tvar outData = this.__final() || Buffer.alloc(0);\n\tif (outputEnc) {\n\t\toutData = this._toString(outData, outputEnc, true);\n\t}\n\treturn outData;\n};\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n\tif (!this._decoder) {\n\t\tthis._decoder = new StringDecoder(enc);\n\t\tthis._encoding = enc;\n\t}\n\n\tif (this._encoding !== enc) {\n\t\tthrow new Error('can’t switch encodings');\n\t}\n\n\tvar out = this._decoder.write(value);\n\tif (fin) {\n\t\tout += this._decoder.end();\n\t}\n\n\treturn out;\n};\n\nmodule.exports = CipherBase;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY2lwaGVyLWJhc2UvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsYUFBYSxzRkFBNkI7QUFDMUMsZ0JBQWdCLDBGQUEyQjtBQUMzQyxvQkFBb0IsZ0hBQXVDO0FBQzNELGVBQWUsbUJBQU8sQ0FBQyw2REFBVTtBQUNqQyxlQUFlLG1CQUFPLENBQUMsb0RBQVc7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0BmYWJyaWMvaHViLy4vbm9kZV9tb2R1bGVzL2NpcGhlci1iYXNlL2luZGV4LmpzPzY0MzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZSgnc2FmZS1idWZmZXInKS5CdWZmZXI7XG52YXIgVHJhbnNmb3JtID0gcmVxdWlyZSgnc3RyZWFtJykuVHJhbnNmb3JtO1xudmFyIFN0cmluZ0RlY29kZXIgPSByZXF1aXJlKCdzdHJpbmdfZGVjb2RlcicpLlN0cmluZ0RlY29kZXI7XG52YXIgaW5oZXJpdHMgPSByZXF1aXJlKCdpbmhlcml0cycpO1xudmFyIHRvQnVmZmVyID0gcmVxdWlyZSgndG8tYnVmZmVyJyk7XG5cbmZ1bmN0aW9uIENpcGhlckJhc2UoaGFzaE1vZGUpIHtcblx0VHJhbnNmb3JtLmNhbGwodGhpcyk7XG5cdHRoaXMuaGFzaE1vZGUgPSB0eXBlb2YgaGFzaE1vZGUgPT09ICdzdHJpbmcnO1xuXHRpZiAodGhpcy5oYXNoTW9kZSkge1xuXHRcdHRoaXNbaGFzaE1vZGVdID0gdGhpcy5fZmluYWxPckRpZ2VzdDtcblx0fSBlbHNlIHtcblx0XHR0aGlzWydmaW5hbCddID0gdGhpcy5fZmluYWxPckRpZ2VzdDtcblx0fVxuXHRpZiAodGhpcy5fZmluYWwpIHtcblx0XHR0aGlzLl9fZmluYWwgPSB0aGlzLl9maW5hbDtcblx0XHR0aGlzLl9maW5hbCA9IG51bGw7XG5cdH1cblx0dGhpcy5fZGVjb2RlciA9IG51bGw7XG5cdHRoaXMuX2VuY29kaW5nID0gbnVsbDtcbn1cbmluaGVyaXRzKENpcGhlckJhc2UsIFRyYW5zZm9ybSk7XG5cbkNpcGhlckJhc2UucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBpbnB1dEVuYywgb3V0cHV0RW5jKSB7XG5cdHZhciBidWZmZXJEYXRhID0gdG9CdWZmZXIoZGF0YSwgaW5wdXRFbmMpOyAvLyBhc3NlcnRzIGNvcnJlY3QgaW5wdXQgdHlwZVxuXHR2YXIgb3V0RGF0YSA9IHRoaXMuX3VwZGF0ZShidWZmZXJEYXRhKTtcblx0aWYgKHRoaXMuaGFzaE1vZGUpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGlmIChvdXRwdXRFbmMpIHtcblx0XHRvdXREYXRhID0gdGhpcy5fdG9TdHJpbmcob3V0RGF0YSwgb3V0cHV0RW5jKTtcblx0fVxuXG5cdHJldHVybiBvdXREYXRhO1xufTtcblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmcgPSBmdW5jdGlvbiAoKSB7fTtcbkNpcGhlckJhc2UucHJvdG90eXBlLmdldEF1dGhUYWcgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyBFcnJvcigndHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZScpO1xufTtcblxuQ2lwaGVyQmFzZS5wcm90b3R5cGUuc2V0QXV0aFRhZyA9IGZ1bmN0aW9uICgpIHtcblx0dGhyb3cgbmV3IEVycm9yKCd0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlJyk7XG59O1xuXG5DaXBoZXJCYXNlLnByb3RvdHlwZS5zZXRBQUQgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyBFcnJvcigndHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUnKTtcbn07XG5cbkNpcGhlckJhc2UucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbiAoZGF0YSwgXywgbmV4dCkge1xuXHR2YXIgZXJyO1xuXHR0cnkge1xuXHRcdGlmICh0aGlzLmhhc2hNb2RlKSB7XG5cdFx0XHR0aGlzLl91cGRhdGUoZGF0YSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucHVzaCh0aGlzLl91cGRhdGUoZGF0YSkpO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge1xuXHRcdGVyciA9IGU7XG5cdH0gZmluYWxseSB7XG5cdFx0bmV4dChlcnIpO1xuXHR9XG59O1xuQ2lwaGVyQmFzZS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24gKGRvbmUpIHtcblx0dmFyIGVycjtcblx0dHJ5IHtcblx0XHR0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0ZXJyID0gZTtcblx0fVxuXG5cdGRvbmUoZXJyKTtcbn07XG5DaXBoZXJCYXNlLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdCA9IGZ1bmN0aW9uIChvdXRwdXRFbmMpIHtcblx0dmFyIG91dERhdGEgPSB0aGlzLl9fZmluYWwoKSB8fCBCdWZmZXIuYWxsb2MoMCk7XG5cdGlmIChvdXRwdXRFbmMpIHtcblx0XHRvdXREYXRhID0gdGhpcy5fdG9TdHJpbmcob3V0RGF0YSwgb3V0cHV0RW5jLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4gb3V0RGF0YTtcbn07XG5cbkNpcGhlckJhc2UucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jLCBmaW4pIHtcblx0aWYgKCF0aGlzLl9kZWNvZGVyKSB7XG5cdFx0dGhpcy5fZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKGVuYyk7XG5cdFx0dGhpcy5fZW5jb2RpbmcgPSBlbmM7XG5cdH1cblxuXHRpZiAodGhpcy5fZW5jb2RpbmcgIT09IGVuYykge1xuXHRcdHRocm93IG5ldyBFcnJvcignY2Fu4oCZdCBzd2l0Y2ggZW5jb2RpbmdzJyk7XG5cdH1cblxuXHR2YXIgb3V0ID0gdGhpcy5fZGVjb2Rlci53cml0ZSh2YWx1ZSk7XG5cdGlmIChmaW4pIHtcblx0XHRvdXQgKz0gdGhpcy5fZGVjb2Rlci5lbmQoKTtcblx0fVxuXG5cdHJldHVybiBvdXQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENpcGhlckJhc2U7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/cipher-base/index.js\n\n}")},"./node_modules/clsx/dist/clsx.js"(module){eval('{function r(e){var o,t,f="";if("string"==typeof e||"number"==typeof e)f+=e;else if("object"==typeof e)if(Array.isArray(e)){var n=e.length;for(o=0;o\n * ; defined in [RFC1034], Section 3.5, as\n * ; enhanced by [RFC1123], Section 2.1\n * =